commit 405905f4e443f37bd7acc73a6439fd1ea18d06cf Author: cpeng Date: Mon Aug 25 08:26:03 2025 +0800 android 13 from xiaosuan diff --git a/Android.bp b/Android.bp new file mode 100644 index 0000000..72c2938 --- /dev/null +++ b/Android.bp @@ -0,0 +1,21 @@ +package { + default_applicable_licenses: ["dalvik_license"], +} + +// Added automatically by a large-scale-change +// See: http://go/android-license-faq +license { + name: "dalvik_license", + visibility: [":__subpackages__"], + license_kinds: [ + "SPDX-license-identifier-Apache-2.0", + ], + license_text: [ + "NOTICE", + ], +} + +subdirs = [ + "dx", + "tools/hprof-conv", +] diff --git a/CleanSpec.mk b/CleanSpec.mk new file mode 100644 index 0000000..4cf6c26 --- /dev/null +++ b/CleanSpec.mk @@ -0,0 +1,57 @@ +# Copyright (C) 2007 The Android Open Source Project +# +# 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. +# + +# If you don't need to do a full clean build but would like to touch +# a file or delete some intermediate files, add a clean step to the end +# of the list. These steps will only be run once, if they haven't been +# run before. +# +# E.g.: +# $(call add-clean-step, touch -c external/sqlite/sqlite3.h) +# $(call add-clean-step, rm -rf $(OUT)/obj/STATIC_LIBRARIES/libz_intermediates) +# +# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with +# files that are missing or have been moved. +# +# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory. +# Use $(OUT) to refer to the "out" directory. +# +# If you need to re-do something that's already mentioned, just copy +# the command and add it to the bottom of the list. E.g., if a change +# that you made last week required touching a file and a change you +# made today requires touching the same file, just copy the old +# touch step and add it to the end of the list. +# +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ + +# For example: +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates) +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates) +#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) +#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) +#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm*) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm*) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm*) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm*) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm*) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm*) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm*) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm*) +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libdex_intermediates/import_includes) diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..4760004 --- /dev/null +++ b/NOTICE @@ -0,0 +1,223 @@ + ========================================================================= + == NOTICE file corresponding to the section 4 d of == + == the Apache License, Version 2.0, == + == in this case for the Android-specific code. == + ========================================================================= + + Copyright (c) 2005-2008, The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + + 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. + + + 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 + + ========================================================================= + == NOTICE file for the x86 JIT libenc subdirectory. == + ========================================================================= + +Apache Harmony +Copyright 2006, 2010 The Apache Software Foundation. + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +Portions of Harmony were originally developed by +Intel Corporation and are licensed to the Apache Software +Foundation under the "Software Grant and Corporate Contribution +License Agreement" and for which the following copyright notices +apply + (C) Copyright 2005 Intel Corporation + (C) Copyright 2005-2006 Intel Corporation + (C) Copyright 2006 Intel Corporation + +Portions of the Apache Portable Runtime used by DRLVM were +developed at the National Center for Supercomputing Applications +(NCSA) at the University of Illinois at Urbana-Champaign. + +This software contains code derived from the RSA Data Security +Inc. MD5 Message-Digest Algorithm. + +This software contains code derived from UNIX V7, Copyright(C) +Caldera International Inc. diff --git a/OWNERS b/OWNERS new file mode 100644 index 0000000..ca996c4 --- /dev/null +++ b/OWNERS @@ -0,0 +1,9 @@ +# Studio +gavra@google.com +cmw@google.com +# ART / libcore +calin@google.com +dsrbecky@google.com +narayan@google.com +ngeoffray@google.com +oth@google.com diff --git a/dexgen/Android.bp b/dexgen/Android.bp new file mode 100644 index 0000000..e0e7323 --- /dev/null +++ b/dexgen/Android.bp @@ -0,0 +1,28 @@ +// Copyright (C) 2010 The Android Open Source Project +// +// 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. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "dalvik_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["dalvik_license"], +} + +java_library { + name: "dexgen", + sdk_version: "4", + srcs: ["src/**/*.java"], +} diff --git a/dexgen/README.txt b/dexgen/README.txt new file mode 100644 index 0000000..a542f04 --- /dev/null +++ b/dexgen/README.txt @@ -0,0 +1,3 @@ +Home of dexgen, the dex code generator project. It provides API for +creating dex classes in runtime which is needed e.g. for class mocking. +This solution is based on the dx tool and uses its classes extensively. diff --git a/dexgen/src/com/android/dexgen/dex/code/ArrayData.java b/dexgen/src/com/android/dexgen/dex/code/ArrayData.java new file mode 100644 index 0000000..d89a93f --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/ArrayData.java @@ -0,0 +1,199 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.rop.cst.*; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.ArrayList; + +/** + * Pseudo-instruction which holds fill array data. + */ +public final class ArrayData extends VariableSizeInsn { + /** + * {@code non-null;} address representing the instruction that uses this + * instance + */ + private final CodeAddress user; + + /** {@code non-null;} initial values to be filled into an array */ + private final ArrayList values; + + /** non-null: type of constant that initializes the array */ + private final Constant arrayType; + + /** Width of the init value element */ + private final int elemWidth; + + /** Length of the init list */ + private final int initLength; + + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + * @param user {@code non-null;} address representing the instruction that + * uses this instance + * @param values {@code non-null;} initial values to be filled into an array + */ + public ArrayData(SourcePosition position, CodeAddress user, + ArrayList values, + Constant arrayType) { + super(position, RegisterSpecList.EMPTY); + + if (user == null) { + throw new NullPointerException("user == null"); + } + + if (values == null) { + throw new NullPointerException("values == null"); + } + + int sz = values.size(); + + if (sz <= 0) { + throw new IllegalArgumentException("Illegal number of init values"); + } + + this.arrayType = arrayType; + + if (arrayType == CstType.BYTE_ARRAY || + arrayType == CstType.BOOLEAN_ARRAY) { + elemWidth = 1; + } else if (arrayType == CstType.SHORT_ARRAY || + arrayType == CstType.CHAR_ARRAY) { + elemWidth = 2; + } else if (arrayType == CstType.INT_ARRAY || + arrayType == CstType.FLOAT_ARRAY) { + elemWidth = 4; + } else if (arrayType == CstType.LONG_ARRAY || + arrayType == CstType.DOUBLE_ARRAY) { + elemWidth = 8; + } else { + throw new IllegalArgumentException("Unexpected constant type"); + } + this.user = user; + this.values = values; + initLength = values.size(); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + int sz = initLength; + // Note: the unit here is 16-bit + return 4 + ((sz * elemWidth) + 1) / 2; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out) { + int sz = values.size(); + + out.writeShort(0x300 | DalvOps.NOP); + out.writeShort(elemWidth); + out.writeInt(initLength); + + + // For speed reasons, replicate the for loop in each case + switch (elemWidth) { + case 1: { + for (int i = 0; i < sz; i++) { + Constant cst = values.get(i); + out.writeByte((byte) ((CstLiteral32) cst).getIntBits()); + } + break; + } + case 2: { + for (int i = 0; i < sz; i++) { + Constant cst = values.get(i); + out.writeShort((short) ((CstLiteral32) cst).getIntBits()); + } + break; + } + case 4: { + for (int i = 0; i < sz; i++) { + Constant cst = values.get(i); + out.writeInt(((CstLiteral32) cst).getIntBits()); + } + break; + } + case 8: { + for (int i = 0; i < sz; i++) { + Constant cst = values.get(i); + out.writeLong(((CstLiteral64) cst).getLongBits()); + } + break; + } + default: + break; + } + + // Pad one byte to make the size of data table multiples of 16-bits + if (elemWidth == 1 && (sz % 2 != 0)) { + out.writeByte(0x00); + } + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new ArrayData(getPosition(), user, values, arrayType); + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + StringBuffer sb = new StringBuffer(100); + + int sz = values.size(); + for (int i = 0; i < sz; i++) { + sb.append("\n "); + sb.append(i); + sb.append(": "); + sb.append(values.get(i).toHuman()); + } + + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + protected String listingString0(boolean noteIndices) { + int baseAddress = user.getAddress(); + StringBuffer sb = new StringBuffer(100); + int sz = values.size(); + + sb.append("array-data // for fill-array-data @ "); + sb.append(Hex.u2(baseAddress)); + + for (int i = 0; i < sz; i++) { + sb.append("\n "); + sb.append(i); + sb.append(": "); + sb.append(values.get(i).toHuman()); + } + + return sb.toString(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/BlockAddresses.java b/dexgen/src/com/android/dexgen/dex/code/BlockAddresses.java new file mode 100644 index 0000000..fa8096e --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/BlockAddresses.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.BasicBlock; +import com.android.dexgen.rop.code.BasicBlockList; +import com.android.dexgen.rop.code.Insn; +import com.android.dexgen.rop.code.RopMethod; +import com.android.dexgen.rop.code.SourcePosition; + +/** + * Container for the set of {@link CodeAddress} instances associated with + * the blocks of a particular method. Each block has a corresponding + * start address, end address, and last instruction address. + */ +public final class BlockAddresses { + /** {@code non-null;} array containing addresses for the start of each basic + * block (indexed by basic block label) */ + private final CodeAddress[] starts; + + /** {@code non-null;} array containing addresses for the final instruction + * of each basic block (indexed by basic block label) */ + private final CodeAddress[] lasts; + + /** {@code non-null;} array containing addresses for the end (just past the + * final instruction) of each basic block (indexed by basic block + * label) */ + private final CodeAddress[] ends; + + /** + * Constructs an instance. + * + * @param method {@code non-null;} the method to have block addresses for + */ + public BlockAddresses(RopMethod method) { + BasicBlockList blocks = method.getBlocks(); + int maxLabel = blocks.getMaxLabel(); + + this.starts = new CodeAddress[maxLabel]; + this.lasts = new CodeAddress[maxLabel]; + this.ends = new CodeAddress[maxLabel]; + + setupArrays(method); + } + + /** + * Gets the instance for the start of the given block. + * + * @param block {@code non-null;} the block in question + * @return {@code non-null;} the appropriate instance + */ + public CodeAddress getStart(BasicBlock block) { + return starts[block.getLabel()]; + } + + /** + * Gets the instance for the start of the block with the given label. + * + * @param label {@code non-null;} the label of the block in question + * @return {@code non-null;} the appropriate instance + */ + public CodeAddress getStart(int label) { + return starts[label]; + } + + /** + * Gets the instance for the final instruction of the given block. + * + * @param block {@code non-null;} the block in question + * @return {@code non-null;} the appropriate instance + */ + public CodeAddress getLast(BasicBlock block) { + return lasts[block.getLabel()]; + } + + /** + * Gets the instance for the final instruction of the block with + * the given label. + * + * @param label {@code non-null;} the label of the block in question + * @return {@code non-null;} the appropriate instance + */ + public CodeAddress getLast(int label) { + return lasts[label]; + } + + /** + * Gets the instance for the end (address after the final instruction) + * of the given block. + * + * @param block {@code non-null;} the block in question + * @return {@code non-null;} the appropriate instance + */ + public CodeAddress getEnd(BasicBlock block) { + return ends[block.getLabel()]; + } + + /** + * Gets the instance for the end (address after the final instruction) + * of the block with the given label. + * + * @param label {@code non-null;} the label of the block in question + * @return {@code non-null;} the appropriate instance + */ + public CodeAddress getEnd(int label) { + return ends[label]; + } + + /** + * Sets up the address arrays. + */ + private void setupArrays(RopMethod method) { + BasicBlockList blocks = method.getBlocks(); + int sz = blocks.size(); + + for (int i = 0; i < sz; i++) { + BasicBlock one = blocks.get(i); + int label = one.getLabel(); + Insn insn = one.getInsns().get(0); + + starts[label] = new CodeAddress(insn.getPosition()); + + SourcePosition pos = one.getLastInsn().getPosition(); + + lasts[label] = new CodeAddress(pos); + ends[label] = new CodeAddress(pos); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/CatchBuilder.java b/dexgen/src/com/android/dexgen/dex/code/CatchBuilder.java new file mode 100644 index 0000000..adb119a --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/CatchBuilder.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.type.Type; + +import java.util.HashSet; + +/** + * Interface for the construction of {@link CatchTable} instances. + */ +public interface CatchBuilder { + /** + * Builds and returns the catch table for this instance. + * + * @return {@code non-null;} the constructed table + */ + public CatchTable build(); + + /** + * Gets whether this instance has any catches at all (either typed + * or catch-all). + * + * @return whether this instance has any catches at all + */ + public boolean hasAnyCatches(); + + /** + * Gets the set of catch types associated with this instance. + * + * @return {@code non-null;} the set of catch types + */ + public HashSet getCatchTypes(); +} diff --git a/dexgen/src/com/android/dexgen/dex/code/CatchHandlerList.java b/dexgen/src/com/android/dexgen/dex/code/CatchHandlerList.java new file mode 100644 index 0000000..54200ed --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/CatchHandlerList.java @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.util.FixedSizeList; +import com.android.dexgen.util.Hex; + +/** + * Ordered list of (exception type, handler address) entries. + */ +public final class CatchHandlerList extends FixedSizeList + implements Comparable { + /** {@code non-null;} empty instance */ + public static final CatchHandlerList EMPTY = new CatchHandlerList(0); + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size {@code >= 0;} the size of the list + */ + public CatchHandlerList(int size) { + super(size); + } + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public Entry get(int n) { + return (Entry) get0(n); + } + + /** {@inheritDoc} */ + public String toHuman() { + return toHuman("", ""); + } + + /** + * Get the human form of this instance, prefixed on each line + * with the string. + * + * @param prefix {@code non-null;} the prefix for every line + * @param header {@code non-null;} the header for the first line (after the + * first prefix) + * @return {@code non-null;} the human form + */ + public String toHuman(String prefix, String header) { + StringBuilder sb = new StringBuilder(100); + int size = size(); + + sb.append(prefix); + sb.append(header); + sb.append("catch "); + + for (int i = 0; i < size; i++) { + Entry entry = get(i); + + if (i != 0) { + sb.append(",\n"); + sb.append(prefix); + sb.append(" "); + } + + if ((i == (size - 1)) && catchesAll()) { + sb.append(""); + } else { + sb.append(entry.getExceptionType().toHuman()); + } + + sb.append(" -> "); + sb.append(Hex.u2or4(entry.getHandler())); + } + + return sb.toString(); + } + + /** + * Returns whether or not this instance ends with a "catch-all" + * handler. + * + * @return {@code true} if this instance ends with a "catch-all" + * handler or {@code false} if not + */ + public boolean catchesAll() { + int size = size(); + + if (size == 0) { + return false; + } + + Entry last = get(size - 1); + return last.getExceptionType().equals(CstType.OBJECT); + } + + /** + * Sets the entry at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param exceptionType {@code non-null;} type of exception handled + * @param handler {@code >= 0;} exception handler address + */ + public void set(int n, CstType exceptionType, int handler) { + set0(n, new Entry(exceptionType, handler)); + } + + /** + * Sets the entry at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param entry {@code non-null;} the entry to set at {@code n} + */ + public void set(int n, Entry entry) { + set0(n, entry); + } + + /** {@inheritDoc} */ + public int compareTo(CatchHandlerList other) { + if (this == other) { + // Easy out. + return 0; + } + + int thisSize = size(); + int otherSize = other.size(); + int checkSize = Math.min(thisSize, otherSize); + + for (int i = 0; i < checkSize; i++) { + Entry thisEntry = get(i); + Entry otherEntry = other.get(i); + int compare = thisEntry.compareTo(otherEntry); + if (compare != 0) { + return compare; + } + } + + if (thisSize < otherSize) { + return -1; + } else if (thisSize > otherSize) { + return 1; + } + + return 0; + } + + /** + * Entry in the list. + */ + public static class Entry implements Comparable { + /** {@code non-null;} type of exception handled */ + private final CstType exceptionType; + + /** {@code >= 0;} exception handler address */ + private final int handler; + + /** + * Constructs an instance. + * + * @param exceptionType {@code non-null;} type of exception handled + * @param handler {@code >= 0;} exception handler address + */ + public Entry(CstType exceptionType, int handler) { + if (handler < 0) { + throw new IllegalArgumentException("handler < 0"); + } + + if (exceptionType == null) { + throw new NullPointerException("exceptionType == null"); + } + + this.handler = handler; + this.exceptionType = exceptionType; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return (handler * 31) + exceptionType.hashCode(); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (other instanceof Entry) { + return (compareTo((Entry) other) == 0); + } + + return false; + } + + /** {@inheritDoc} */ + public int compareTo(Entry other) { + if (handler < other.handler) { + return -1; + } else if (handler > other.handler) { + return 1; + } + + return exceptionType.compareTo(other.exceptionType); + } + + /** + * Gets the exception type handled. + * + * @return {@code non-null;} the exception type + */ + public CstType getExceptionType() { + return exceptionType; + } + + /** + * Gets the handler address. + * + * @return {@code >= 0;} the handler address + */ + public int getHandler() { + return handler; + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/CatchTable.java b/dexgen/src/com/android/dexgen/dex/code/CatchTable.java new file mode 100644 index 0000000..4de0da0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/CatchTable.java @@ -0,0 +1,192 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.util.FixedSizeList; + +/** + * Table of catch entries. Each entry includes a range of code + * addresses for which it is valid and an associated {@link + * CatchHandlerList}. + */ +public final class CatchTable extends FixedSizeList + implements Comparable { + /** {@code non-null;} empty instance */ + public static final CatchTable EMPTY = new CatchTable(0); + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size {@code >= 0;} the size of the table + */ + public CatchTable(int size) { + super(size); + } + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public Entry get(int n) { + return (Entry) get0(n); + } + + /** + * Sets the entry at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param entry {@code non-null;} the entry to set at {@code n} + */ + public void set(int n, Entry entry) { + set0(n, entry); + } + + /** {@inheritDoc} */ + public int compareTo(CatchTable other) { + if (this == other) { + // Easy out. + return 0; + } + + int thisSize = size(); + int otherSize = other.size(); + int checkSize = Math.min(thisSize, otherSize); + + for (int i = 0; i < checkSize; i++) { + Entry thisEntry = get(i); + Entry otherEntry = other.get(i); + int compare = thisEntry.compareTo(otherEntry); + if (compare != 0) { + return compare; + } + } + + if (thisSize < otherSize) { + return -1; + } else if (thisSize > otherSize) { + return 1; + } + + return 0; + } + + /** + * Entry in a catch list. + */ + public static class Entry implements Comparable { + /** {@code >= 0;} start address */ + private final int start; + + /** {@code > start;} end address (exclusive) */ + private final int end; + + /** {@code non-null;} list of catch handlers */ + private final CatchHandlerList handlers; + + /** + * Constructs an instance. + * + * @param start {@code >= 0;} start address + * @param end {@code > start;} end address (exclusive) + * @param handlers {@code non-null;} list of catch handlers + */ + public Entry(int start, int end, CatchHandlerList handlers) { + if (start < 0) { + throw new IllegalArgumentException("start < 0"); + } + + if (end <= start) { + throw new IllegalArgumentException("end <= start"); + } + + if (handlers.isMutable()) { + throw new IllegalArgumentException("handlers.isMutable()"); + } + + this.start = start; + this.end = end; + this.handlers = handlers; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + int hash = (start * 31) + end; + hash = (hash * 31) + handlers.hashCode(); + return hash; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (other instanceof Entry) { + return (compareTo((Entry) other) == 0); + } + + return false; + } + + /** {@inheritDoc} */ + public int compareTo(Entry other) { + if (start < other.start) { + return -1; + } else if (start > other.start) { + return 1; + } + + if (end < other.end) { + return -1; + } else if (end > other.end) { + return 1; + } + + return handlers.compareTo(other.handlers); + } + + /** + * Gets the start address. + * + * @return {@code >= 0;} the start address + */ + public int getStart() { + return start; + } + + /** + * Gets the end address (exclusive). + * + * @return {@code > start;} the end address (exclusive) + */ + public int getEnd() { + return end; + } + + /** + * Gets the handlers. + * + * @return {@code non-null;} the handlers + */ + public CatchHandlerList getHandlers() { + return handlers; + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/CodeAddress.java b/dexgen/src/com/android/dexgen/dex/code/CodeAddress.java new file mode 100644 index 0000000..b9600ee --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/CodeAddress.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; + +/** + * Pseudo-instruction which is used to track an address within a code + * array. Instances are used for such things as branch targets and + * exception handler ranges. Its code size is zero, and so instances + * do not in general directly wind up in any output (either + * human-oriented or binary file). + */ +public final class CodeAddress extends ZeroSizeInsn { + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + */ + public CodeAddress(SourcePosition position) { + super(position); + } + + /** {@inheritDoc} */ + @Override + public final DalvInsn withRegisters(RegisterSpecList registers) { + return new CodeAddress(getPosition()); + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + return null; + } + + /** {@inheritDoc} */ + @Override + protected String listingString0(boolean noteIndices) { + return "code-address"; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/CstInsn.java b/dexgen/src/com/android/dexgen/dex/code/CstInsn.java new file mode 100644 index 0000000..901266b --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/CstInsn.java @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.rop.cst.Constant; + +/** + * Instruction which has a single constant argument in addition + * to all the normal instruction information. + */ +public final class CstInsn extends FixedSizeInsn { + /** {@code non-null;} the constant argument for this instruction */ + private final Constant constant; + + /** + * {@code >= -1;} the constant pool index for {@link #constant}, or + * {@code -1} if not yet set + */ + private int index; + + /** + * {@code >= -1;} the constant pool index for the class reference in + * {@link #constant} if any, or {@code -1} if not yet set + */ + private int classIndex; + + /** + * Constructs an instance. The output address of this instance is + * initially unknown ({@code -1}) as is the constant pool index. + * + * @param opcode the opcode; one of the constants from {@link Dops} + * @param position {@code non-null;} source position + * @param registers {@code non-null;} register list, including a + * result register if appropriate (that is, registers may be either + * ins or outs) + * @param constant {@code non-null;} constant argument + */ + public CstInsn(Dop opcode, SourcePosition position, + RegisterSpecList registers, Constant constant) { + super(opcode, position, registers); + + if (constant == null) { + throw new NullPointerException("constant == null"); + } + + this.constant = constant; + this.index = -1; + this.classIndex = -1; + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withOpcode(Dop opcode) { + CstInsn result = + new CstInsn(opcode, getPosition(), getRegisters(), constant); + + if (index >= 0) { + result.setIndex(index); + } + + if (classIndex >= 0) { + result.setClassIndex(classIndex); + } + + return result; + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + CstInsn result = + new CstInsn(getOpcode(), getPosition(), registers, constant); + + if (index >= 0) { + result.setIndex(index); + } + + if (classIndex >= 0) { + result.setClassIndex(classIndex); + } + + return result; + } + + /** + * Gets the constant argument. + * + * @return {@code non-null;} the constant argument + */ + public Constant getConstant() { + return constant; + } + + /** + * Gets the constant's index. It is only valid to call this after + * {@link #setIndex} has been called. + * + * @return {@code >= 0;} the constant pool index + */ + public int getIndex() { + if (index < 0) { + throw new RuntimeException("index not yet set for " + constant); + } + + return index; + } + + /** + * Returns whether the constant's index has been set for this instance. + * + * @see #setIndex + * + * @return {@code true} iff the index has been set + */ + public boolean hasIndex() { + return (index >= 0); + } + + /** + * Sets the constant's index. It is only valid to call this method once + * per instance. + * + * @param index {@code >= 0;} the constant pool index + */ + public void setIndex(int index) { + if (index < 0) { + throw new IllegalArgumentException("index < 0"); + } + + if (this.index >= 0) { + throw new RuntimeException("index already set"); + } + + this.index = index; + } + + /** + * Gets the constant's class index. It is only valid to call this after + * {@link #setClassIndex} has been called. + * + * @return {@code >= 0;} the constant's class's constant pool index + */ + public int getClassIndex() { + if (classIndex < 0) { + throw new RuntimeException("class index not yet set"); + } + + return classIndex; + } + + /** + * Returns whether the constant's class index has been set for this + * instance. + * + * @see #setClassIndex + * + * @return {@code true} iff the index has been set + */ + public boolean hasClassIndex() { + return (classIndex >= 0); + } + + /** + * Sets the constant's class index. This is the constant pool index + * for the class referred to by this instance's constant. Only + * reference constants have a class, so it is only on instances + * with reference constants that this method should ever be + * called. It is only valid to call this method once per instance. + * + * @param index {@code >= 0;} the constant's class's constant pool index + */ + public void setClassIndex(int index) { + if (index < 0) { + throw new IllegalArgumentException("index < 0"); + } + + if (this.classIndex >= 0) { + throw new RuntimeException("class index already set"); + } + + this.classIndex = index; + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + return constant.toHuman(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/DalvCode.java b/dexgen/src/com/android/dexgen/dex/code/DalvCode.java new file mode 100644 index 0000000..2df49ed --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/DalvCode.java @@ -0,0 +1,232 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.type.Type; + +import java.util.HashSet; + +/** + * Container for all the pieces of a concrete method. Each instance + * corresponds to a {@code code} structure in a {@code .dex} file. + */ +public final class DalvCode { + /** + * how much position info to preserve; one of the static + * constants in {@link PositionList} + */ + private final int positionInfo; + + /** + * {@code null-ok;} the instruction list, ready for final processing; + * nulled out in {@link #finishProcessingIfNecessary} + */ + private OutputFinisher unprocessedInsns; + + /** + * {@code non-null;} unprocessed catch table; + * nulled out in {@link #finishProcessingIfNecessary} + */ + private CatchBuilder unprocessedCatches; + + /** + * {@code null-ok;} catch table; set in + * {@link #finishProcessingIfNecessary} + */ + private CatchTable catches; + + /** + * {@code null-ok;} source positions list; set in + * {@link #finishProcessingIfNecessary} + */ + private PositionList positions; + + /** + * {@code null-ok;} local variable list; set in + * {@link #finishProcessingIfNecessary} + */ + private LocalList locals; + + /** + * {@code null-ok;} the processed instruction list; set in + * {@link #finishProcessingIfNecessary} + */ + private DalvInsnList insns; + + /** + * Constructs an instance. + * + * @param positionInfo how much position info to preserve; one of the + * static constants in {@link PositionList} + * @param unprocessedInsns {@code non-null;} the instruction list, ready + * for final processing + * @param unprocessedCatches {@code non-null;} unprocessed catch + * (exception handler) table + */ + public DalvCode(int positionInfo, OutputFinisher unprocessedInsns, + CatchBuilder unprocessedCatches) { + if (unprocessedInsns == null) { + throw new NullPointerException("unprocessedInsns == null"); + } + + if (unprocessedCatches == null) { + throw new NullPointerException("unprocessedCatches == null"); + } + + this.positionInfo = positionInfo; + this.unprocessedInsns = unprocessedInsns; + this.unprocessedCatches = unprocessedCatches; + this.catches = null; + this.positions = null; + this.locals = null; + this.insns = null; + } + + /** + * Finish up processing of the method. + */ + private void finishProcessingIfNecessary() { + if (insns != null) { + return; + } + + insns = unprocessedInsns.finishProcessingAndGetList(); + positions = PositionList.make(insns, positionInfo); + locals = LocalList.make(insns); + catches = unprocessedCatches.build(); + + // Let them be gc'ed. + unprocessedInsns = null; + unprocessedCatches = null; + } + + /** + * Assign indices in all instructions that need them, using the + * given callback to perform lookups. This must be called before + * {@link #getInsns}. + * + * @param callback {@code non-null;} callback object + */ + public void assignIndices(AssignIndicesCallback callback) { + unprocessedInsns.assignIndices(callback); + } + + /** + * Gets whether this instance has any position data to represent. + * + * @return {@code true} iff this instance has any position + * data to represent + */ + public boolean hasPositions() { + return (positionInfo != PositionList.NONE) + && unprocessedInsns.hasAnyPositionInfo(); + } + + /** + * Gets whether this instance has any local variable data to represent. + * + * @return {@code true} iff this instance has any local variable + * data to represent + */ + public boolean hasLocals() { + return unprocessedInsns.hasAnyLocalInfo(); + } + + /** + * Gets whether this instance has any catches at all (either typed + * or catch-all). + * + * @return whether this instance has any catches at all + */ + public boolean hasAnyCatches() { + return unprocessedCatches.hasAnyCatches(); + } + + /** + * Gets the set of catch types handled anywhere in the code. + * + * @return {@code non-null;} the set of catch types + */ + public HashSet getCatchTypes() { + return unprocessedCatches.getCatchTypes(); + } + + /** + * Gets the set of all constants referred to by instructions in + * the code. + * + * @return {@code non-null;} the set of constants + */ + public HashSet getInsnConstants() { + return unprocessedInsns.getAllConstants(); + } + + /** + * Gets the list of instructions. + * + * @return {@code non-null;} the instruction list + */ + public DalvInsnList getInsns() { + finishProcessingIfNecessary(); + return insns; + } + + /** + * Gets the catch (exception handler) table. + * + * @return {@code non-null;} the catch table + */ + public CatchTable getCatches() { + finishProcessingIfNecessary(); + return catches; + } + + /** + * Gets the source positions list. + * + * @return {@code non-null;} the source positions list + */ + public PositionList getPositions() { + finishProcessingIfNecessary(); + return positions; + } + + /** + * Gets the source positions list. + * + * @return {@code non-null;} the source positions list + */ + public LocalList getLocals() { + finishProcessingIfNecessary(); + return locals; + } + + /** + * Class used as a callback for {@link #assignIndices}. + */ + public static interface AssignIndicesCallback { + /** + * Gets the index for the given constant. + * + * @param cst {@code non-null;} the constant + * @return {@code >= -1;} the index or {@code -1} if the constant + * shouldn't actually be reified with an index + */ + public int getIndex(Constant cst); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/DalvInsn.java b/dexgen/src/com/android/dexgen/dex/code/DalvInsn.java new file mode 100644 index 0000000..95b5feb --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/DalvInsn.java @@ -0,0 +1,422 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.TwoColumnOutput; + +/** + * Base class for Dalvik instructions. + */ +public abstract class DalvInsn { + /** + * the actual output address of this instance, if known, or + * {@code -1} if not + */ + private int address; + + /** the opcode; one of the constants from {@link Dops} */ + private final Dop opcode; + + /** {@code non-null;} source position */ + private final SourcePosition position; + + /** {@code non-null;} list of register arguments */ + private final RegisterSpecList registers; + + /** + * Makes a move instruction, appropriate and ideal for the given arguments. + * + * @param position {@code non-null;} source position information + * @param dest {@code non-null;} destination register + * @param src {@code non-null;} source register + * @return {@code non-null;} an appropriately-constructed instance + */ + public static SimpleInsn makeMove(SourcePosition position, + RegisterSpec dest, RegisterSpec src) { + boolean category1 = dest.getCategory() == 1; + boolean reference = dest.getType().isReference(); + int destReg = dest.getReg(); + int srcReg = src.getReg(); + Dop opcode; + + if ((srcReg | destReg) < 16) { + opcode = reference ? Dops.MOVE_OBJECT : + (category1 ? Dops.MOVE : Dops.MOVE_WIDE); + } else if (destReg < 256) { + opcode = reference ? Dops.MOVE_OBJECT_FROM16 : + (category1 ? Dops.MOVE_FROM16 : Dops.MOVE_WIDE_FROM16); + } else { + opcode = reference ? Dops.MOVE_OBJECT_16 : + (category1 ? Dops.MOVE_16 : Dops.MOVE_WIDE_16); + } + + return new SimpleInsn(opcode, position, + RegisterSpecList.make(dest, src)); + } + + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + *

Note: In the unlikely event that an instruction takes + * absolutely no registers (e.g., a {@code nop} or a + * no-argument no-result static method call), then the given + * register list may be passed as {@link + * RegisterSpecList#EMPTY}.

+ * + * @param opcode the opcode; one of the constants from {@link Dops} + * @param position {@code non-null;} source position + * @param registers {@code non-null;} register list, including a + * result register if appropriate (that is, registers may be either + * ins and outs) + */ + public DalvInsn(Dop opcode, SourcePosition position, + RegisterSpecList registers) { + if (opcode == null) { + throw new NullPointerException("opcode == null"); + } + + if (position == null) { + throw new NullPointerException("position == null"); + } + + if (registers == null) { + throw new NullPointerException("registers == null"); + } + + this.address = -1; + this.opcode = opcode; + this.position = position; + this.registers = registers; + } + + /** {@inheritDoc} */ + @Override + public final String toString() { + StringBuffer sb = new StringBuffer(100); + + sb.append(identifierString()); + sb.append(' '); + sb.append(position); + + sb.append(": "); + sb.append(opcode.getName()); + + boolean needComma = false; + if (registers.size() != 0) { + sb.append(registers.toHuman(" ", ", ", null)); + needComma = true; + } + + String extra = argString(); + if (extra != null) { + if (needComma) { + sb.append(','); + } + sb.append(' '); + sb.append(extra); + } + + return sb.toString(); + } + + /** + * Gets whether the address of this instruction is known. + * + * @see #getAddress + * @see #setAddress + */ + public final boolean hasAddress() { + return (address >= 0); + } + + /** + * Gets the output address of this instruction, if it is known. This throws + * a {@code RuntimeException} if it has not yet been set. + * + * @see #setAddress + * + * @return {@code >= 0;} the output address + */ + public final int getAddress() { + if (address < 0) { + throw new RuntimeException("address not yet known"); + } + + return address; + } + + /** + * Gets the opcode. + * + * @return {@code non-null;} the opcode + */ + public final Dop getOpcode() { + return opcode; + } + + /** + * Gets the source position. + * + * @return {@code non-null;} the source position + */ + public final SourcePosition getPosition() { + return position; + } + + /** + * Gets the register list for this instruction. + * + * @return {@code non-null;} the registers + */ + public final RegisterSpecList getRegisters() { + return registers; + } + + /** + * Returns whether this instance's opcode uses a result register. + * This method is a convenient shorthand for + * {@code getOpcode().hasResult()}. + * + * @return {@code true} iff this opcode uses a result register + */ + public final boolean hasResult() { + return opcode.hasResult(); + } + + /** + * Gets the minimum distinct registers required for this instruction. + * This assumes that the result (if any) can share registers with the + * sources (if any), that each source register is unique, and that + * (to be explicit here) category-2 values take up two consecutive + * registers. + * + * @return {@code >= 0;} the minimum distinct register requirement + */ + public final int getMinimumRegisterRequirement() { + boolean hasResult = hasResult(); + int regSz = registers.size(); + int resultRequirement = hasResult ? registers.get(0).getCategory() : 0; + int sourceRequirement = 0; + + for (int i = hasResult ? 1 : 0; i < regSz; i++) { + sourceRequirement += registers.get(i).getCategory(); + } + + return Math.max(sourceRequirement, resultRequirement); + } + + /** + * Gets the instruction prefix required, if any, to use in a high + * register transformed version of this instance. + * + * @see #hrVersion + * + * @return {@code null-ok;} the prefix, if any + */ + public DalvInsn hrPrefix() { + RegisterSpecList regs = registers; + int sz = regs.size(); + + if (hasResult()) { + if (sz == 1) { + return null; + } + regs = regs.withoutFirst(); + } else if (sz == 0) { + return null; + } + + return new HighRegisterPrefix(position, regs); + } + + /** + * Gets the instruction suffix required, if any, to use in a high + * register transformed version of this instance. + * + * @see #hrVersion + * + * @return {@code null-ok;} the suffix, if any + */ + public DalvInsn hrSuffix() { + if (hasResult()) { + RegisterSpec r = registers.get(0); + return makeMove(position, r, r.withReg(0)); + } else { + return null; + } + } + + /** + * Gets the instruction that is equivalent to this one, except that + * uses sequential registers starting at {@code 0} (storing + * the result, if any, in register {@code 0} as well). The + * sequence of instructions from {@link #hrPrefix} and {@link + * #hrSuffix} (if non-null) surrounding the result of a call to + * this method are the high register transformation of this + * instance, and it is guaranteed that the number of low registers + * used will be the number returned by {@link + * #getMinimumRegisterRequirement}. + * + * @return {@code non-null;} the replacement + */ + public DalvInsn hrVersion() { + RegisterSpecList regs = + registers.withSequentialRegisters(0, hasResult()); + return withRegisters(regs); + } + + /** + * Gets the short identifier for this instruction. This is its + * address, if assigned, or its identity hashcode if not. + * + * @return {@code non-null;} the identifier + */ + public final String identifierString() { + if (address != -1) { + return String.format("%04x", address); + } + + return Hex.u4(System.identityHashCode(this)); + } + + /** + * Returns the string form of this instance suitable for inclusion in + * a human-oriented listing dump. This method will return {@code null} + * if this instance should not appear in a listing. + * + * @param prefix {@code non-null;} prefix before the address; each follow-on + * line will be indented to match as well + * @param width {@code >= 0;} the width of the output or {@code 0} for + * unlimited width + * @param noteIndices whether to include an explicit notation of + * constant pool indices + * @return {@code null-ok;} the string form or {@code null} if this + * instance should not appear in a listing + */ + public final String listingString(String prefix, int width, + boolean noteIndices) { + String insnPerSe = listingString0(noteIndices); + + if (insnPerSe == null) { + return null; + } + + String addr = prefix + identifierString() + ": "; + int w1 = addr.length(); + int w2 = (width == 0) ? insnPerSe.length() : (width - w1); + + return TwoColumnOutput.toString(addr, w1, "", insnPerSe, w2); + } + + /** + * Sets the output address. + * + * @param address {@code >= 0;} the output address + */ + public final void setAddress(int address) { + if (address < 0) { + throw new IllegalArgumentException("address < 0"); + } + + this.address = address; + } + + /** + * Gets the address immediately after this instance. This is only + * calculable if this instance's address is known, and it is equal + * to the address plus the length of the instruction format of this + * instance's opcode. + * + * @return {@code >= 0;} the next address + */ + public final int getNextAddress() { + return getAddress() + codeSize(); + } + + /** + * Gets the size of this instruction, in 16-bit code units. + * + * @return {@code >= 0;} the code size of this instruction + */ + public abstract int codeSize(); + + /** + * Writes this instance to the given output. This method should + * never annotate the output. + * + * @param out {@code non-null;} where to write to + */ + public abstract void writeTo(AnnotatedOutput out); + + /** + * Returns an instance that is just like this one, except that its + * opcode is replaced by the one given, and its address is reset. + * + * @param opcode {@code non-null;} the new opcode + * @return {@code non-null;} an appropriately-constructed instance + */ + public abstract DalvInsn withOpcode(Dop opcode); + + /** + * Returns an instance that is just like this one, except that all + * register references have been offset by the given delta, and its + * address is reset. + * + * @param delta the amount to offset register references by + * @return {@code non-null;} an appropriately-constructed instance + */ + public abstract DalvInsn withRegisterOffset(int delta); + + /** + * Returns an instance that is just like this one, except that the + * register list is replaced by the given one, and its address is + * reset. + * + * @param registers {@code non-null;} new register list + * @return {@code non-null;} an appropriately-constructed instance + */ + public abstract DalvInsn withRegisters(RegisterSpecList registers); + + /** + * Gets the string form for any arguments to this instance. Subclasses + * must override this. + * + * @return {@code null-ok;} the string version of any arguments or + * {@code null} if there are none + */ + protected abstract String argString(); + + /** + * Helper for {@link #listingString}, which returns the string + * form of this instance suitable for inclusion in a + * human-oriented listing dump, not including the instruction + * address and without respect for any output formatting. This + * method should return {@code null} if this instance should + * not appear in a listing. + * + * @param noteIndices whether to include an explicit notation of + * constant pool indices + * @return {@code null-ok;} the listing string + */ + protected abstract String listingString0(boolean noteIndices); +} diff --git a/dexgen/src/com/android/dexgen/dex/code/DalvInsnList.java b/dexgen/src/com/android/dexgen/dex/code/DalvInsnList.java new file mode 100644 index 0000000..9ba301b --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/DalvInsnList.java @@ -0,0 +1,268 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstBaseMethodRef; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ExceptionWithContext; +import com.android.dexgen.util.FixedSizeList; +import com.android.dexgen.util.IndentingWriter; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.ArrayList; + +/** + * List of {@link DalvInsn} instances. + */ +public final class DalvInsnList extends FixedSizeList { + + /** + * The amount of register space, in register units, required for this + * code block. This may be greater than the largest observed register+ + * category because the method this code block exists in may + * specify arguments that are unused by the method. + */ + private final int regCount; + + /** + * Constructs and returns an immutable instance whose elements are + * identical to the ones in the given list, in the same order. + * + * @param list {@code non-null;} the list to use for elements + * @param regCount count, in register-units, of the number of registers + * this code block requires. + * @return {@code non-null;} an appropriately-constructed instance of this + * class + */ + public static DalvInsnList makeImmutable(ArrayList list, + int regCount) { + int size = list.size(); + DalvInsnList result = new DalvInsnList(size, regCount); + + for (int i = 0; i < size; i++) { + result.set(i, list.get(i)); + } + + result.setImmutable(); + return result; + } + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the list + */ + public DalvInsnList(int size, int regCount) { + super(size); + this.regCount = regCount; + } + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public DalvInsn get(int n) { + return (DalvInsn) get0(n); + } + + /** + * Sets the instruction at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param insn {@code non-null;} the instruction to set at {@code n} + */ + public void set(int n, DalvInsn insn) { + set0(n, insn); + } + + /** + * Gets the size of this instance, in 16-bit code units. This will only + * return a meaningful result if the instructions in this instance all + * have valid addresses. + * + * @return {@code >= 0;} the size + */ + public int codeSize() { + int sz = size(); + + if (sz == 0) { + return 0; + } + + DalvInsn last = get(sz - 1); + return last.getNextAddress(); + } + + /** + * Writes all the instructions in this instance to the given output + * destination. + * + * @param out {@code non-null;} where to write to + */ + public void writeTo(AnnotatedOutput out) { + int startCursor = out.getCursor(); + int sz = size(); + + if (out.annotates()) { + boolean verbose = out.isVerbose(); + + for (int i = 0; i < sz; i++) { + DalvInsn insn = (DalvInsn) get0(i); + int codeBytes = insn.codeSize() * 2; + String s; + + if ((codeBytes != 0) || verbose) { + s = insn.listingString(" ", out.getAnnotationWidth(), + true); + } else { + s = null; + } + + if (s != null) { + out.annotate(codeBytes, s); + } else if (codeBytes != 0) { + out.annotate(codeBytes, ""); + } + } + } + + for (int i = 0; i < sz; i++) { + DalvInsn insn = (DalvInsn) get0(i); + try { + insn.writeTo(out); + } catch (RuntimeException ex) { + throw ExceptionWithContext.withContext(ex, + "...while writing " + insn); + } + } + + // Check the amount written. + int written = (out.getCursor() - startCursor) / 2; + if (written != codeSize()) { + throw new RuntimeException("write length mismatch; expected " + + codeSize() + " but actually wrote " + written); + } + } + + /** + * Gets the minimum required register count implied by this + * instance. This includes any unused parameters that could + * potentially be at the top of the register space. + * @return {@code >= 0;} the required registers size + */ + public int getRegistersSize() { + return regCount; + } + + /** + * Gets the size of the outgoing arguments area required by this + * method. This is equal to the largest argument word count of any + * method referred to by this instance. + * + * @return {@code >= 0;} the required outgoing arguments size + */ + public int getOutsSize() { + int sz = size(); + int result = 0; + + for (int i = 0; i < sz; i++) { + DalvInsn insn = (DalvInsn) get0(i); + + if (!(insn instanceof CstInsn)) { + continue; + } + + Constant cst = ((CstInsn) insn).getConstant(); + + if (!(cst instanceof CstBaseMethodRef)) { + continue; + } + + boolean isStatic = + (insn.getOpcode().getFamily() == DalvOps.INVOKE_STATIC); + int count = + ((CstBaseMethodRef) cst).getParameterWordCount(isStatic); + + if (count > result) { + result = count; + } + } + + return result; + } + + /** + * Does a human-friendly dump of this instance. + * + * @param out {@code non-null;} where to dump + * @param prefix {@code non-null;} prefix to attach to each line of output + * @param verbose whether to be verbose; verbose output includes + * lines for zero-size instructions and explicit constant pool indices + */ + public void debugPrint(Writer out, String prefix, boolean verbose) { + IndentingWriter iw = new IndentingWriter(out, 0, prefix); + int sz = size(); + + try { + for (int i = 0; i < sz; i++) { + DalvInsn insn = (DalvInsn) get0(i); + String s; + + if ((insn.codeSize() != 0) || verbose) { + s = insn.listingString("", 0, verbose); + } else { + s = null; + } + + if (s != null) { + iw.write(s); + } + } + + iw.flush(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + /** + * Does a human-friendly dump of this instance. + * + * @param out {@code non-null;} where to dump + * @param prefix {@code non-null;} prefix to attach to each line of output + * @param verbose whether to be verbose; verbose output includes + * lines for zero-size instructions + */ + public void debugPrint(OutputStream out, String prefix, boolean verbose) { + Writer w = new OutputStreamWriter(out); + debugPrint(w, prefix, verbose); + + try { + w.flush(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/DalvOps.java b/dexgen/src/com/android/dexgen/dex/code/DalvOps.java new file mode 100644 index 0000000..732420f --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/DalvOps.java @@ -0,0 +1,298 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +/** + * All the Dalvik opcode value constants. See the related spec + * document for the meaning and instruction format of each opcode. + */ +public final class DalvOps { + /** pseudo-opcode used for nonstandard format "instructions" */ + public static final int SPECIAL_FORMAT = -1; + + /** minimum valid opcode value */ + public static final int MIN_VALUE = -1; + + /** maximum valid opcode value */ + public static final int MAX_VALUE = 0xff; + + // BEGIN(opcodes); GENERATED AUTOMATICALLY BY opcode-gen + public static final int NOP = 0x00; + public static final int MOVE = 0x01; + public static final int MOVE_FROM16 = 0x02; + public static final int MOVE_16 = 0x03; + public static final int MOVE_WIDE = 0x04; + public static final int MOVE_WIDE_FROM16 = 0x05; + public static final int MOVE_WIDE_16 = 0x06; + public static final int MOVE_OBJECT = 0x07; + public static final int MOVE_OBJECT_FROM16 = 0x08; + public static final int MOVE_OBJECT_16 = 0x09; + public static final int MOVE_RESULT = 0x0a; + public static final int MOVE_RESULT_WIDE = 0x0b; + public static final int MOVE_RESULT_OBJECT = 0x0c; + public static final int MOVE_EXCEPTION = 0x0d; + public static final int RETURN_VOID = 0x0e; + public static final int RETURN = 0x0f; + public static final int RETURN_WIDE = 0x10; + public static final int RETURN_OBJECT = 0x11; + public static final int CONST_4 = 0x12; + public static final int CONST_16 = 0x13; + public static final int CONST = 0x14; + public static final int CONST_HIGH16 = 0x15; + public static final int CONST_WIDE_16 = 0x16; + public static final int CONST_WIDE_32 = 0x17; + public static final int CONST_WIDE = 0x18; + public static final int CONST_WIDE_HIGH16 = 0x19; + public static final int CONST_STRING = 0x1a; + public static final int CONST_STRING_JUMBO = 0x1b; + public static final int CONST_CLASS = 0x1c; + public static final int MONITOR_ENTER = 0x1d; + public static final int MONITOR_EXIT = 0x1e; + public static final int CHECK_CAST = 0x1f; + public static final int INSTANCE_OF = 0x20; + public static final int ARRAY_LENGTH = 0x21; + public static final int NEW_INSTANCE = 0x22; + public static final int NEW_ARRAY = 0x23; + public static final int FILLED_NEW_ARRAY = 0x24; + public static final int FILLED_NEW_ARRAY_RANGE = 0x25; + public static final int FILL_ARRAY_DATA = 0x26; + public static final int THROW = 0x27; + public static final int GOTO = 0x28; + public static final int GOTO_16 = 0x29; + public static final int GOTO_32 = 0x2a; + public static final int PACKED_SWITCH = 0x2b; + public static final int SPARSE_SWITCH = 0x2c; + public static final int CMPL_FLOAT = 0x2d; + public static final int CMPG_FLOAT = 0x2e; + public static final int CMPL_DOUBLE = 0x2f; + public static final int CMPG_DOUBLE = 0x30; + public static final int CMP_LONG = 0x31; + public static final int IF_EQ = 0x32; + public static final int IF_NE = 0x33; + public static final int IF_LT = 0x34; + public static final int IF_GE = 0x35; + public static final int IF_GT = 0x36; + public static final int IF_LE = 0x37; + public static final int IF_EQZ = 0x38; + public static final int IF_NEZ = 0x39; + public static final int IF_LTZ = 0x3a; + public static final int IF_GEZ = 0x3b; + public static final int IF_GTZ = 0x3c; + public static final int IF_LEZ = 0x3d; + public static final int UNUSED_3E = 0x3e; + public static final int UNUSED_3F = 0x3f; + public static final int UNUSED_40 = 0x40; + public static final int UNUSED_41 = 0x41; + public static final int UNUSED_42 = 0x42; + public static final int UNUSED_43 = 0x43; + public static final int AGET = 0x44; + public static final int AGET_WIDE = 0x45; + public static final int AGET_OBJECT = 0x46; + public static final int AGET_BOOLEAN = 0x47; + public static final int AGET_BYTE = 0x48; + public static final int AGET_CHAR = 0x49; + public static final int AGET_SHORT = 0x4a; + public static final int APUT = 0x4b; + public static final int APUT_WIDE = 0x4c; + public static final int APUT_OBJECT = 0x4d; + public static final int APUT_BOOLEAN = 0x4e; + public static final int APUT_BYTE = 0x4f; + public static final int APUT_CHAR = 0x50; + public static final int APUT_SHORT = 0x51; + public static final int IGET = 0x52; + public static final int IGET_WIDE = 0x53; + public static final int IGET_OBJECT = 0x54; + public static final int IGET_BOOLEAN = 0x55; + public static final int IGET_BYTE = 0x56; + public static final int IGET_CHAR = 0x57; + public static final int IGET_SHORT = 0x58; + public static final int IPUT = 0x59; + public static final int IPUT_WIDE = 0x5a; + public static final int IPUT_OBJECT = 0x5b; + public static final int IPUT_BOOLEAN = 0x5c; + public static final int IPUT_BYTE = 0x5d; + public static final int IPUT_CHAR = 0x5e; + public static final int IPUT_SHORT = 0x5f; + public static final int SGET = 0x60; + public static final int SGET_WIDE = 0x61; + public static final int SGET_OBJECT = 0x62; + public static final int SGET_BOOLEAN = 0x63; + public static final int SGET_BYTE = 0x64; + public static final int SGET_CHAR = 0x65; + public static final int SGET_SHORT = 0x66; + public static final int SPUT = 0x67; + public static final int SPUT_WIDE = 0x68; + public static final int SPUT_OBJECT = 0x69; + public static final int SPUT_BOOLEAN = 0x6a; + public static final int SPUT_BYTE = 0x6b; + public static final int SPUT_CHAR = 0x6c; + public static final int SPUT_SHORT = 0x6d; + public static final int INVOKE_VIRTUAL = 0x6e; + public static final int INVOKE_SUPER = 0x6f; + public static final int INVOKE_DIRECT = 0x70; + public static final int INVOKE_STATIC = 0x71; + public static final int INVOKE_INTERFACE = 0x72; + public static final int UNUSED_73 = 0x73; + public static final int INVOKE_VIRTUAL_RANGE = 0x74; + public static final int INVOKE_SUPER_RANGE = 0x75; + public static final int INVOKE_DIRECT_RANGE = 0x76; + public static final int INVOKE_STATIC_RANGE = 0x77; + public static final int INVOKE_INTERFACE_RANGE = 0x78; + public static final int UNUSED_79 = 0x79; + public static final int UNUSED_7A = 0x7a; + public static final int NEG_INT = 0x7b; + public static final int NOT_INT = 0x7c; + public static final int NEG_LONG = 0x7d; + public static final int NOT_LONG = 0x7e; + public static final int NEG_FLOAT = 0x7f; + public static final int NEG_DOUBLE = 0x80; + public static final int INT_TO_LONG = 0x81; + public static final int INT_TO_FLOAT = 0x82; + public static final int INT_TO_DOUBLE = 0x83; + public static final int LONG_TO_INT = 0x84; + public static final int LONG_TO_FLOAT = 0x85; + public static final int LONG_TO_DOUBLE = 0x86; + public static final int FLOAT_TO_INT = 0x87; + public static final int FLOAT_TO_LONG = 0x88; + public static final int FLOAT_TO_DOUBLE = 0x89; + public static final int DOUBLE_TO_INT = 0x8a; + public static final int DOUBLE_TO_LONG = 0x8b; + public static final int DOUBLE_TO_FLOAT = 0x8c; + public static final int INT_TO_BYTE = 0x8d; + public static final int INT_TO_CHAR = 0x8e; + public static final int INT_TO_SHORT = 0x8f; + public static final int ADD_INT = 0x90; + public static final int SUB_INT = 0x91; + public static final int MUL_INT = 0x92; + public static final int DIV_INT = 0x93; + public static final int REM_INT = 0x94; + public static final int AND_INT = 0x95; + public static final int OR_INT = 0x96; + public static final int XOR_INT = 0x97; + public static final int SHL_INT = 0x98; + public static final int SHR_INT = 0x99; + public static final int USHR_INT = 0x9a; + public static final int ADD_LONG = 0x9b; + public static final int SUB_LONG = 0x9c; + public static final int MUL_LONG = 0x9d; + public static final int DIV_LONG = 0x9e; + public static final int REM_LONG = 0x9f; + public static final int AND_LONG = 0xa0; + public static final int OR_LONG = 0xa1; + public static final int XOR_LONG = 0xa2; + public static final int SHL_LONG = 0xa3; + public static final int SHR_LONG = 0xa4; + public static final int USHR_LONG = 0xa5; + public static final int ADD_FLOAT = 0xa6; + public static final int SUB_FLOAT = 0xa7; + public static final int MUL_FLOAT = 0xa8; + public static final int DIV_FLOAT = 0xa9; + public static final int REM_FLOAT = 0xaa; + public static final int ADD_DOUBLE = 0xab; + public static final int SUB_DOUBLE = 0xac; + public static final int MUL_DOUBLE = 0xad; + public static final int DIV_DOUBLE = 0xae; + public static final int REM_DOUBLE = 0xaf; + public static final int ADD_INT_2ADDR = 0xb0; + public static final int SUB_INT_2ADDR = 0xb1; + public static final int MUL_INT_2ADDR = 0xb2; + public static final int DIV_INT_2ADDR = 0xb3; + public static final int REM_INT_2ADDR = 0xb4; + public static final int AND_INT_2ADDR = 0xb5; + public static final int OR_INT_2ADDR = 0xb6; + public static final int XOR_INT_2ADDR = 0xb7; + public static final int SHL_INT_2ADDR = 0xb8; + public static final int SHR_INT_2ADDR = 0xb9; + public static final int USHR_INT_2ADDR = 0xba; + public static final int ADD_LONG_2ADDR = 0xbb; + public static final int SUB_LONG_2ADDR = 0xbc; + public static final int MUL_LONG_2ADDR = 0xbd; + public static final int DIV_LONG_2ADDR = 0xbe; + public static final int REM_LONG_2ADDR = 0xbf; + public static final int AND_LONG_2ADDR = 0xc0; + public static final int OR_LONG_2ADDR = 0xc1; + public static final int XOR_LONG_2ADDR = 0xc2; + public static final int SHL_LONG_2ADDR = 0xc3; + public static final int SHR_LONG_2ADDR = 0xc4; + public static final int USHR_LONG_2ADDR = 0xc5; + public static final int ADD_FLOAT_2ADDR = 0xc6; + public static final int SUB_FLOAT_2ADDR = 0xc7; + public static final int MUL_FLOAT_2ADDR = 0xc8; + public static final int DIV_FLOAT_2ADDR = 0xc9; + public static final int REM_FLOAT_2ADDR = 0xca; + public static final int ADD_DOUBLE_2ADDR = 0xcb; + public static final int SUB_DOUBLE_2ADDR = 0xcc; + public static final int MUL_DOUBLE_2ADDR = 0xcd; + public static final int DIV_DOUBLE_2ADDR = 0xce; + public static final int REM_DOUBLE_2ADDR = 0xcf; + public static final int ADD_INT_LIT16 = 0xd0; + public static final int RSUB_INT = 0xd1; + public static final int MUL_INT_LIT16 = 0xd2; + public static final int DIV_INT_LIT16 = 0xd3; + public static final int REM_INT_LIT16 = 0xd4; + public static final int AND_INT_LIT16 = 0xd5; + public static final int OR_INT_LIT16 = 0xd6; + public static final int XOR_INT_LIT16 = 0xd7; + public static final int ADD_INT_LIT8 = 0xd8; + public static final int RSUB_INT_LIT8 = 0xd9; + public static final int MUL_INT_LIT8 = 0xda; + public static final int DIV_INT_LIT8 = 0xdb; + public static final int REM_INT_LIT8 = 0xdc; + public static final int AND_INT_LIT8 = 0xdd; + public static final int OR_INT_LIT8 = 0xde; + public static final int XOR_INT_LIT8 = 0xdf; + public static final int SHL_INT_LIT8 = 0xe0; + public static final int SHR_INT_LIT8 = 0xe1; + public static final int USHR_INT_LIT8 = 0xe2; + public static final int UNUSED_E3 = 0xe3; + public static final int UNUSED_E4 = 0xe4; + public static final int UNUSED_E5 = 0xe5; + public static final int UNUSED_E6 = 0xe6; + public static final int UNUSED_E7 = 0xe7; + public static final int UNUSED_E8 = 0xe8; + public static final int UNUSED_E9 = 0xe9; + public static final int UNUSED_EA = 0xea; + public static final int UNUSED_EB = 0xeb; + public static final int UNUSED_EC = 0xec; + public static final int UNUSED_ED = 0xed; + public static final int UNUSED_EE = 0xee; + public static final int UNUSED_EF = 0xef; + public static final int UNUSED_F0 = 0xf0; + public static final int UNUSED_F1 = 0xf1; + public static final int UNUSED_F2 = 0xf2; + public static final int UNUSED_F3 = 0xf3; + public static final int UNUSED_F4 = 0xf4; + public static final int UNUSED_F5 = 0xf5; + public static final int UNUSED_F6 = 0xf6; + public static final int UNUSED_F7 = 0xf7; + public static final int UNUSED_F8 = 0xf8; + public static final int UNUSED_F9 = 0xf9; + public static final int INVOKE_POLYMORPHIC = 0xfa; + public static final int INVOKE_POLYMORPHIC_RANGE = 0xfb; + public static final int UNUSED_FC = 0xfc; + public static final int UNUSED_FD = 0xfd; + public static final int UNUSED_FE = 0xfe; + public static final int UNUSED_FF = 0xff; + // END(opcodes) + + /** + * This class is uninstantiable. + */ + private DalvOps() { + // This space intentionally left blank. + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/Dop.java b/dexgen/src/com/android/dexgen/dex/code/Dop.java new file mode 100644 index 0000000..dc788f1 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/Dop.java @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +/** + * Representation of an opcode. + */ +public final class Dop { + /** DalvOps.MIN_VALUE..DalvOps.MAX_VALUE; the opcode value itself */ + private final int opcode; + + /** DalvOps.MIN_VALUE..DalvOps.MAX_VALUE; the opcode family */ + private final int family; + + /** {@code non-null;} the instruction format */ + private final InsnFormat format; + + /** whether this opcode uses a result register */ + private final boolean hasResult; + + /** {@code non-null;} the name */ + private final String name; + + /** + * Constructs an instance. + * + * @param opcode {@code DalvOps.MIN_VALUE..DalvOps.MAX_VALUE;} the opcode + * value itself + * @param family {@code DalvOps.MIN_VALUE..DalvOps.MAX_VALUE;} the opcode family + * @param format {@code non-null;} the instruction format + * @param hasResult whether the opcode has a result register; if so it + * is always the first register + * @param name {@code non-null;} the name + */ + public Dop(int opcode, int family, InsnFormat format, + boolean hasResult, String name) { + if ((opcode < DalvOps.MIN_VALUE) || (opcode > DalvOps.MAX_VALUE)) { + throw new IllegalArgumentException("bogus opcode"); + } + + if ((family < DalvOps.MIN_VALUE) || (family > DalvOps.MAX_VALUE)) { + throw new IllegalArgumentException("bogus family"); + } + + if (format == null) { + throw new NullPointerException("format == null"); + } + + if (name == null) { + throw new NullPointerException("name == null"); + } + + this.opcode = opcode; + this.family = family; + this.format = format; + this.hasResult = hasResult; + this.name = name; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return name; + } + + /** + * Gets the opcode value. + * + * @return {@code DalvOps.MIN_VALUE..DalvOps.MAX_VALUE;} the opcode value + */ + public int getOpcode() { + return opcode; + } + + /** + * Gets the opcode family. The opcode family is the unmarked (no + * "/...") opcode that has equivalent semantics to this one. + * + * @return {@code DalvOps.MIN_VALUE..DalvOps.MAX_VALUE;} the opcode family + */ + public int getFamily() { + return family; + } + + /** + * Gets the instruction format. + * + * @return {@code non-null;} the instruction format + */ + public InsnFormat getFormat() { + return format; + } + + /** + * Returns whether this opcode uses a result register. + * + * @return {@code true} iff this opcode uses a result register + */ + public boolean hasResult() { + return hasResult; + } + + /** + * Gets the opcode name. + * + * @return {@code non-null;} the opcode name + */ + public String getName() { + return name; + } + + /** + * Gets the opcode for the opposite test of this instance. This is only + * valid for opcodes which are in fact tests. + * + * @return {@code non-null;} the opposite test + */ + public Dop getOppositeTest() { + switch (opcode) { + case DalvOps.IF_EQ: return Dops.IF_NE; + case DalvOps.IF_NE: return Dops.IF_EQ; + case DalvOps.IF_LT: return Dops.IF_GE; + case DalvOps.IF_GE: return Dops.IF_LT; + case DalvOps.IF_GT: return Dops.IF_LE; + case DalvOps.IF_LE: return Dops.IF_GT; + case DalvOps.IF_EQZ: return Dops.IF_NEZ; + case DalvOps.IF_NEZ: return Dops.IF_EQZ; + case DalvOps.IF_LTZ: return Dops.IF_GEZ; + case DalvOps.IF_GEZ: return Dops.IF_LTZ; + case DalvOps.IF_GTZ: return Dops.IF_LEZ; + case DalvOps.IF_LEZ: return Dops.IF_GTZ; + } + + throw new IllegalArgumentException("bogus opcode: " + this); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/Dops.java b/dexgen/src/com/android/dexgen/dex/code/Dops.java new file mode 100644 index 0000000..0a2a6db --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/Dops.java @@ -0,0 +1,1241 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.dex.code.form.Form10t; +import com.android.dexgen.dex.code.form.Form10x; +import com.android.dexgen.dex.code.form.Form11n; +import com.android.dexgen.dex.code.form.Form11x; +import com.android.dexgen.dex.code.form.Form12x; +import com.android.dexgen.dex.code.form.Form20t; +import com.android.dexgen.dex.code.form.Form21c; +import com.android.dexgen.dex.code.form.Form21h; +import com.android.dexgen.dex.code.form.Form21s; +import com.android.dexgen.dex.code.form.Form21t; +import com.android.dexgen.dex.code.form.Form22b; +import com.android.dexgen.dex.code.form.Form22c; +import com.android.dexgen.dex.code.form.Form22s; +import com.android.dexgen.dex.code.form.Form22t; +import com.android.dexgen.dex.code.form.Form22x; +import com.android.dexgen.dex.code.form.Form23x; +import com.android.dexgen.dex.code.form.Form30t; +import com.android.dexgen.dex.code.form.Form31c; +import com.android.dexgen.dex.code.form.Form31i; +import com.android.dexgen.dex.code.form.Form31t; +import com.android.dexgen.dex.code.form.Form32x; +import com.android.dexgen.dex.code.form.Form35c; +import com.android.dexgen.dex.code.form.Form3rc; +import com.android.dexgen.dex.code.form.Form45cc; +import com.android.dexgen.dex.code.form.Form4rcc; +import com.android.dexgen.dex.code.form.Form51l; +import com.android.dexgen.dex.code.form.SpecialFormat; + +/** + * Standard instances of {@link Dop} and utility methods for getting + * them. + */ +public final class Dops { + /** {@code non-null;} array containing all the standard instances */ + private static final Dop[] DOPS; + + /** + * pseudo-opcode used for nonstandard formatted "instructions" + * (which are mostly not actually instructions, though they do + * appear in instruction lists) + */ + public static final Dop SPECIAL_FORMAT = + new Dop(DalvOps.SPECIAL_FORMAT, DalvOps.SPECIAL_FORMAT, + SpecialFormat.THE_ONE, false, ""); + + // BEGIN(dops); GENERATED AUTOMATICALLY BY opcode-gen + public static final Dop NOP = + new Dop(DalvOps.NOP, DalvOps.NOP, + Form10x.THE_ONE, false, "nop"); + + public static final Dop MOVE = + new Dop(DalvOps.MOVE, DalvOps.MOVE, + Form12x.THE_ONE, true, "move"); + + public static final Dop MOVE_FROM16 = + new Dop(DalvOps.MOVE_FROM16, DalvOps.MOVE, + Form22x.THE_ONE, true, "move/from16"); + + public static final Dop MOVE_16 = + new Dop(DalvOps.MOVE_16, DalvOps.MOVE, + Form32x.THE_ONE, true, "move/16"); + + public static final Dop MOVE_WIDE = + new Dop(DalvOps.MOVE_WIDE, DalvOps.MOVE_WIDE, + Form12x.THE_ONE, true, "move-wide"); + + public static final Dop MOVE_WIDE_FROM16 = + new Dop(DalvOps.MOVE_WIDE_FROM16, DalvOps.MOVE_WIDE, + Form22x.THE_ONE, true, "move-wide/from16"); + + public static final Dop MOVE_WIDE_16 = + new Dop(DalvOps.MOVE_WIDE_16, DalvOps.MOVE_WIDE, + Form32x.THE_ONE, true, "move-wide/16"); + + public static final Dop MOVE_OBJECT = + new Dop(DalvOps.MOVE_OBJECT, DalvOps.MOVE_OBJECT, + Form12x.THE_ONE, true, "move-object"); + + public static final Dop MOVE_OBJECT_FROM16 = + new Dop(DalvOps.MOVE_OBJECT_FROM16, DalvOps.MOVE_OBJECT, + Form22x.THE_ONE, true, "move-object/from16"); + + public static final Dop MOVE_OBJECT_16 = + new Dop(DalvOps.MOVE_OBJECT_16, DalvOps.MOVE_OBJECT, + Form32x.THE_ONE, true, "move-object/16"); + + public static final Dop MOVE_RESULT = + new Dop(DalvOps.MOVE_RESULT, DalvOps.MOVE_RESULT, + Form11x.THE_ONE, true, "move-result"); + + public static final Dop MOVE_RESULT_WIDE = + new Dop(DalvOps.MOVE_RESULT_WIDE, DalvOps.MOVE_RESULT_WIDE, + Form11x.THE_ONE, true, "move-result-wide"); + + public static final Dop MOVE_RESULT_OBJECT = + new Dop(DalvOps.MOVE_RESULT_OBJECT, DalvOps.MOVE_RESULT_OBJECT, + Form11x.THE_ONE, true, "move-result-object"); + + public static final Dop MOVE_EXCEPTION = + new Dop(DalvOps.MOVE_EXCEPTION, DalvOps.MOVE_EXCEPTION, + Form11x.THE_ONE, true, "move-exception"); + + public static final Dop RETURN_VOID = + new Dop(DalvOps.RETURN_VOID, DalvOps.RETURN_VOID, + Form10x.THE_ONE, false, "return-void"); + + public static final Dop RETURN = + new Dop(DalvOps.RETURN, DalvOps.RETURN, + Form11x.THE_ONE, false, "return"); + + public static final Dop RETURN_WIDE = + new Dop(DalvOps.RETURN_WIDE, DalvOps.RETURN_WIDE, + Form11x.THE_ONE, false, "return-wide"); + + public static final Dop RETURN_OBJECT = + new Dop(DalvOps.RETURN_OBJECT, DalvOps.RETURN_OBJECT, + Form11x.THE_ONE, false, "return-object"); + + public static final Dop CONST_4 = + new Dop(DalvOps.CONST_4, DalvOps.CONST, + Form11n.THE_ONE, true, "const/4"); + + public static final Dop CONST_16 = + new Dop(DalvOps.CONST_16, DalvOps.CONST, + Form21s.THE_ONE, true, "const/16"); + + public static final Dop CONST = + new Dop(DalvOps.CONST, DalvOps.CONST, + Form31i.THE_ONE, true, "const"); + + public static final Dop CONST_HIGH16 = + new Dop(DalvOps.CONST_HIGH16, DalvOps.CONST, + Form21h.THE_ONE, true, "const/high16"); + + public static final Dop CONST_WIDE_16 = + new Dop(DalvOps.CONST_WIDE_16, DalvOps.CONST_WIDE, + Form21s.THE_ONE, true, "const-wide/16"); + + public static final Dop CONST_WIDE_32 = + new Dop(DalvOps.CONST_WIDE_32, DalvOps.CONST_WIDE, + Form31i.THE_ONE, true, "const-wide/32"); + + public static final Dop CONST_WIDE = + new Dop(DalvOps.CONST_WIDE, DalvOps.CONST_WIDE, + Form51l.THE_ONE, true, "const-wide"); + + public static final Dop CONST_WIDE_HIGH16 = + new Dop(DalvOps.CONST_WIDE_HIGH16, DalvOps.CONST_WIDE, + Form21h.THE_ONE, true, "const-wide/high16"); + + public static final Dop CONST_STRING = + new Dop(DalvOps.CONST_STRING, DalvOps.CONST_STRING, + Form21c.THE_ONE, true, "const-string"); + + public static final Dop CONST_STRING_JUMBO = + new Dop(DalvOps.CONST_STRING_JUMBO, DalvOps.CONST_STRING, + Form31c.THE_ONE, true, "const-string/jumbo"); + + public static final Dop CONST_CLASS = + new Dop(DalvOps.CONST_CLASS, DalvOps.CONST_CLASS, + Form21c.THE_ONE, true, "const-class"); + + public static final Dop MONITOR_ENTER = + new Dop(DalvOps.MONITOR_ENTER, DalvOps.MONITOR_ENTER, + Form11x.THE_ONE, false, "monitor-enter"); + + public static final Dop MONITOR_EXIT = + new Dop(DalvOps.MONITOR_EXIT, DalvOps.MONITOR_EXIT, + Form11x.THE_ONE, false, "monitor-exit"); + + public static final Dop CHECK_CAST = + new Dop(DalvOps.CHECK_CAST, DalvOps.CHECK_CAST, + Form21c.THE_ONE, true, "check-cast"); + + public static final Dop INSTANCE_OF = + new Dop(DalvOps.INSTANCE_OF, DalvOps.INSTANCE_OF, + Form22c.THE_ONE, true, "instance-of"); + + public static final Dop ARRAY_LENGTH = + new Dop(DalvOps.ARRAY_LENGTH, DalvOps.ARRAY_LENGTH, + Form12x.THE_ONE, true, "array-length"); + + public static final Dop NEW_INSTANCE = + new Dop(DalvOps.NEW_INSTANCE, DalvOps.NEW_INSTANCE, + Form21c.THE_ONE, true, "new-instance"); + + public static final Dop NEW_ARRAY = + new Dop(DalvOps.NEW_ARRAY, DalvOps.NEW_ARRAY, + Form22c.THE_ONE, true, "new-array"); + + public static final Dop FILLED_NEW_ARRAY = + new Dop(DalvOps.FILLED_NEW_ARRAY, DalvOps.FILLED_NEW_ARRAY, + Form35c.THE_ONE, false, "filled-new-array"); + + public static final Dop FILLED_NEW_ARRAY_RANGE = + new Dop(DalvOps.FILLED_NEW_ARRAY_RANGE, DalvOps.FILLED_NEW_ARRAY, + Form3rc.THE_ONE, false, "filled-new-array/range"); + + public static final Dop FILL_ARRAY_DATA = + new Dop(DalvOps.FILL_ARRAY_DATA, DalvOps.FILL_ARRAY_DATA, + Form31t.THE_ONE, false, "fill-array-data"); + + public static final Dop THROW = + new Dop(DalvOps.THROW, DalvOps.THROW, + Form11x.THE_ONE, false, "throw"); + + public static final Dop GOTO = + new Dop(DalvOps.GOTO, DalvOps.GOTO, + Form10t.THE_ONE, false, "goto"); + + public static final Dop GOTO_16 = + new Dop(DalvOps.GOTO_16, DalvOps.GOTO, + Form20t.THE_ONE, false, "goto/16"); + + public static final Dop GOTO_32 = + new Dop(DalvOps.GOTO_32, DalvOps.GOTO, + Form30t.THE_ONE, false, "goto/32"); + + public static final Dop PACKED_SWITCH = + new Dop(DalvOps.PACKED_SWITCH, DalvOps.PACKED_SWITCH, + Form31t.THE_ONE, false, "packed-switch"); + + public static final Dop SPARSE_SWITCH = + new Dop(DalvOps.SPARSE_SWITCH, DalvOps.SPARSE_SWITCH, + Form31t.THE_ONE, false, "sparse-switch"); + + public static final Dop CMPL_FLOAT = + new Dop(DalvOps.CMPL_FLOAT, DalvOps.CMPL_FLOAT, + Form23x.THE_ONE, true, "cmpl-float"); + + public static final Dop CMPG_FLOAT = + new Dop(DalvOps.CMPG_FLOAT, DalvOps.CMPG_FLOAT, + Form23x.THE_ONE, true, "cmpg-float"); + + public static final Dop CMPL_DOUBLE = + new Dop(DalvOps.CMPL_DOUBLE, DalvOps.CMPL_DOUBLE, + Form23x.THE_ONE, true, "cmpl-double"); + + public static final Dop CMPG_DOUBLE = + new Dop(DalvOps.CMPG_DOUBLE, DalvOps.CMPG_DOUBLE, + Form23x.THE_ONE, true, "cmpg-double"); + + public static final Dop CMP_LONG = + new Dop(DalvOps.CMP_LONG, DalvOps.CMP_LONG, + Form23x.THE_ONE, true, "cmp-long"); + + public static final Dop IF_EQ = + new Dop(DalvOps.IF_EQ, DalvOps.IF_EQ, + Form22t.THE_ONE, false, "if-eq"); + + public static final Dop IF_NE = + new Dop(DalvOps.IF_NE, DalvOps.IF_NE, + Form22t.THE_ONE, false, "if-ne"); + + public static final Dop IF_LT = + new Dop(DalvOps.IF_LT, DalvOps.IF_LT, + Form22t.THE_ONE, false, "if-lt"); + + public static final Dop IF_GE = + new Dop(DalvOps.IF_GE, DalvOps.IF_GE, + Form22t.THE_ONE, false, "if-ge"); + + public static final Dop IF_GT = + new Dop(DalvOps.IF_GT, DalvOps.IF_GT, + Form22t.THE_ONE, false, "if-gt"); + + public static final Dop IF_LE = + new Dop(DalvOps.IF_LE, DalvOps.IF_LE, + Form22t.THE_ONE, false, "if-le"); + + public static final Dop IF_EQZ = + new Dop(DalvOps.IF_EQZ, DalvOps.IF_EQZ, + Form21t.THE_ONE, false, "if-eqz"); + + public static final Dop IF_NEZ = + new Dop(DalvOps.IF_NEZ, DalvOps.IF_NEZ, + Form21t.THE_ONE, false, "if-nez"); + + public static final Dop IF_LTZ = + new Dop(DalvOps.IF_LTZ, DalvOps.IF_LTZ, + Form21t.THE_ONE, false, "if-ltz"); + + public static final Dop IF_GEZ = + new Dop(DalvOps.IF_GEZ, DalvOps.IF_GEZ, + Form21t.THE_ONE, false, "if-gez"); + + public static final Dop IF_GTZ = + new Dop(DalvOps.IF_GTZ, DalvOps.IF_GTZ, + Form21t.THE_ONE, false, "if-gtz"); + + public static final Dop IF_LEZ = + new Dop(DalvOps.IF_LEZ, DalvOps.IF_LEZ, + Form21t.THE_ONE, false, "if-lez"); + + public static final Dop AGET = + new Dop(DalvOps.AGET, DalvOps.AGET, + Form23x.THE_ONE, true, "aget"); + + public static final Dop AGET_WIDE = + new Dop(DalvOps.AGET_WIDE, DalvOps.AGET_WIDE, + Form23x.THE_ONE, true, "aget-wide"); + + public static final Dop AGET_OBJECT = + new Dop(DalvOps.AGET_OBJECT, DalvOps.AGET_OBJECT, + Form23x.THE_ONE, true, "aget-object"); + + public static final Dop AGET_BOOLEAN = + new Dop(DalvOps.AGET_BOOLEAN, DalvOps.AGET_BOOLEAN, + Form23x.THE_ONE, true, "aget-boolean"); + + public static final Dop AGET_BYTE = + new Dop(DalvOps.AGET_BYTE, DalvOps.AGET_BYTE, + Form23x.THE_ONE, true, "aget-byte"); + + public static final Dop AGET_CHAR = + new Dop(DalvOps.AGET_CHAR, DalvOps.AGET_CHAR, + Form23x.THE_ONE, true, "aget-char"); + + public static final Dop AGET_SHORT = + new Dop(DalvOps.AGET_SHORT, DalvOps.AGET_SHORT, + Form23x.THE_ONE, true, "aget-short"); + + public static final Dop APUT = + new Dop(DalvOps.APUT, DalvOps.APUT, + Form23x.THE_ONE, false, "aput"); + + public static final Dop APUT_WIDE = + new Dop(DalvOps.APUT_WIDE, DalvOps.APUT_WIDE, + Form23x.THE_ONE, false, "aput-wide"); + + public static final Dop APUT_OBJECT = + new Dop(DalvOps.APUT_OBJECT, DalvOps.APUT_OBJECT, + Form23x.THE_ONE, false, "aput-object"); + + public static final Dop APUT_BOOLEAN = + new Dop(DalvOps.APUT_BOOLEAN, DalvOps.APUT_BOOLEAN, + Form23x.THE_ONE, false, "aput-boolean"); + + public static final Dop APUT_BYTE = + new Dop(DalvOps.APUT_BYTE, DalvOps.APUT_BYTE, + Form23x.THE_ONE, false, "aput-byte"); + + public static final Dop APUT_CHAR = + new Dop(DalvOps.APUT_CHAR, DalvOps.APUT_CHAR, + Form23x.THE_ONE, false, "aput-char"); + + public static final Dop APUT_SHORT = + new Dop(DalvOps.APUT_SHORT, DalvOps.APUT_SHORT, + Form23x.THE_ONE, false, "aput-short"); + + public static final Dop IGET = + new Dop(DalvOps.IGET, DalvOps.IGET, + Form22c.THE_ONE, true, "iget"); + + public static final Dop IGET_WIDE = + new Dop(DalvOps.IGET_WIDE, DalvOps.IGET_WIDE, + Form22c.THE_ONE, true, "iget-wide"); + + public static final Dop IGET_OBJECT = + new Dop(DalvOps.IGET_OBJECT, DalvOps.IGET_OBJECT, + Form22c.THE_ONE, true, "iget-object"); + + public static final Dop IGET_BOOLEAN = + new Dop(DalvOps.IGET_BOOLEAN, DalvOps.IGET_BOOLEAN, + Form22c.THE_ONE, true, "iget-boolean"); + + public static final Dop IGET_BYTE = + new Dop(DalvOps.IGET_BYTE, DalvOps.IGET_BYTE, + Form22c.THE_ONE, true, "iget-byte"); + + public static final Dop IGET_CHAR = + new Dop(DalvOps.IGET_CHAR, DalvOps.IGET_CHAR, + Form22c.THE_ONE, true, "iget-char"); + + public static final Dop IGET_SHORT = + new Dop(DalvOps.IGET_SHORT, DalvOps.IGET_SHORT, + Form22c.THE_ONE, true, "iget-short"); + + public static final Dop IPUT = + new Dop(DalvOps.IPUT, DalvOps.IPUT, + Form22c.THE_ONE, false, "iput"); + + public static final Dop IPUT_WIDE = + new Dop(DalvOps.IPUT_WIDE, DalvOps.IPUT_WIDE, + Form22c.THE_ONE, false, "iput-wide"); + + public static final Dop IPUT_OBJECT = + new Dop(DalvOps.IPUT_OBJECT, DalvOps.IPUT_OBJECT, + Form22c.THE_ONE, false, "iput-object"); + + public static final Dop IPUT_BOOLEAN = + new Dop(DalvOps.IPUT_BOOLEAN, DalvOps.IPUT_BOOLEAN, + Form22c.THE_ONE, false, "iput-boolean"); + + public static final Dop IPUT_BYTE = + new Dop(DalvOps.IPUT_BYTE, DalvOps.IPUT_BYTE, + Form22c.THE_ONE, false, "iput-byte"); + + public static final Dop IPUT_CHAR = + new Dop(DalvOps.IPUT_CHAR, DalvOps.IPUT_CHAR, + Form22c.THE_ONE, false, "iput-char"); + + public static final Dop IPUT_SHORT = + new Dop(DalvOps.IPUT_SHORT, DalvOps.IPUT_SHORT, + Form22c.THE_ONE, false, "iput-short"); + + public static final Dop SGET = + new Dop(DalvOps.SGET, DalvOps.SGET, + Form21c.THE_ONE, true, "sget"); + + public static final Dop SGET_WIDE = + new Dop(DalvOps.SGET_WIDE, DalvOps.SGET_WIDE, + Form21c.THE_ONE, true, "sget-wide"); + + public static final Dop SGET_OBJECT = + new Dop(DalvOps.SGET_OBJECT, DalvOps.SGET_OBJECT, + Form21c.THE_ONE, true, "sget-object"); + + public static final Dop SGET_BOOLEAN = + new Dop(DalvOps.SGET_BOOLEAN, DalvOps.SGET_BOOLEAN, + Form21c.THE_ONE, true, "sget-boolean"); + + public static final Dop SGET_BYTE = + new Dop(DalvOps.SGET_BYTE, DalvOps.SGET_BYTE, + Form21c.THE_ONE, true, "sget-byte"); + + public static final Dop SGET_CHAR = + new Dop(DalvOps.SGET_CHAR, DalvOps.SGET_CHAR, + Form21c.THE_ONE, true, "sget-char"); + + public static final Dop SGET_SHORT = + new Dop(DalvOps.SGET_SHORT, DalvOps.SGET_SHORT, + Form21c.THE_ONE, true, "sget-short"); + + public static final Dop SPUT = + new Dop(DalvOps.SPUT, DalvOps.SPUT, + Form21c.THE_ONE, false, "sput"); + + public static final Dop SPUT_WIDE = + new Dop(DalvOps.SPUT_WIDE, DalvOps.SPUT_WIDE, + Form21c.THE_ONE, false, "sput-wide"); + + public static final Dop SPUT_OBJECT = + new Dop(DalvOps.SPUT_OBJECT, DalvOps.SPUT_OBJECT, + Form21c.THE_ONE, false, "sput-object"); + + public static final Dop SPUT_BOOLEAN = + new Dop(DalvOps.SPUT_BOOLEAN, DalvOps.SPUT_BOOLEAN, + Form21c.THE_ONE, false, "sput-boolean"); + + public static final Dop SPUT_BYTE = + new Dop(DalvOps.SPUT_BYTE, DalvOps.SPUT_BYTE, + Form21c.THE_ONE, false, "sput-byte"); + + public static final Dop SPUT_CHAR = + new Dop(DalvOps.SPUT_CHAR, DalvOps.SPUT_CHAR, + Form21c.THE_ONE, false, "sput-char"); + + public static final Dop SPUT_SHORT = + new Dop(DalvOps.SPUT_SHORT, DalvOps.SPUT_SHORT, + Form21c.THE_ONE, false, "sput-short"); + + public static final Dop INVOKE_VIRTUAL = + new Dop(DalvOps.INVOKE_VIRTUAL, DalvOps.INVOKE_VIRTUAL, + Form35c.THE_ONE, false, "invoke-virtual"); + + public static final Dop INVOKE_SUPER = + new Dop(DalvOps.INVOKE_SUPER, DalvOps.INVOKE_SUPER, + Form35c.THE_ONE, false, "invoke-super"); + + public static final Dop INVOKE_DIRECT = + new Dop(DalvOps.INVOKE_DIRECT, DalvOps.INVOKE_DIRECT, + Form35c.THE_ONE, false, "invoke-direct"); + + public static final Dop INVOKE_STATIC = + new Dop(DalvOps.INVOKE_STATIC, DalvOps.INVOKE_STATIC, + Form35c.THE_ONE, false, "invoke-static"); + + public static final Dop INVOKE_INTERFACE = + new Dop(DalvOps.INVOKE_INTERFACE, DalvOps.INVOKE_INTERFACE, + Form35c.THE_ONE, false, "invoke-interface"); + + public static final Dop INVOKE_POLYMORPHIC = + new Dop(DalvOps.INVOKE_POLYMORPHIC, DalvOps.INVOKE_POLYMORPHIC, + Form45cc.THE_ONE, false, "invoke-polymorphic"); + + public static final Dop INVOKE_VIRTUAL_RANGE = + new Dop(DalvOps.INVOKE_VIRTUAL_RANGE, DalvOps.INVOKE_VIRTUAL, + Form3rc.THE_ONE, false, "invoke-virtual/range"); + + public static final Dop INVOKE_SUPER_RANGE = + new Dop(DalvOps.INVOKE_SUPER_RANGE, DalvOps.INVOKE_SUPER, + Form3rc.THE_ONE, false, "invoke-super/range"); + + public static final Dop INVOKE_DIRECT_RANGE = + new Dop(DalvOps.INVOKE_DIRECT_RANGE, DalvOps.INVOKE_DIRECT, + Form3rc.THE_ONE, false, "invoke-direct/range"); + + public static final Dop INVOKE_STATIC_RANGE = + new Dop(DalvOps.INVOKE_STATIC_RANGE, DalvOps.INVOKE_STATIC, + Form3rc.THE_ONE, false, "invoke-static/range"); + + public static final Dop INVOKE_INTERFACE_RANGE = + new Dop(DalvOps.INVOKE_INTERFACE_RANGE, DalvOps.INVOKE_INTERFACE, + Form3rc.THE_ONE, false, "invoke-interface/range"); + + public static final Dop INVOKE_POLYMORPHIC_RANGE = + new Dop(DalvOps.INVOKE_POLYMORPHIC_RANGE, DalvOps.INVOKE_POLYMORPHIC, + Form4rcc.THE_ONE, false, "invoke-polymorphic/range"); + + public static final Dop NEG_INT = + new Dop(DalvOps.NEG_INT, DalvOps.NEG_INT, + Form12x.THE_ONE, true, "neg-int"); + + public static final Dop NOT_INT = + new Dop(DalvOps.NOT_INT, DalvOps.NOT_INT, + Form12x.THE_ONE, true, "not-int"); + + public static final Dop NEG_LONG = + new Dop(DalvOps.NEG_LONG, DalvOps.NEG_LONG, + Form12x.THE_ONE, true, "neg-long"); + + public static final Dop NOT_LONG = + new Dop(DalvOps.NOT_LONG, DalvOps.NOT_LONG, + Form12x.THE_ONE, true, "not-long"); + + public static final Dop NEG_FLOAT = + new Dop(DalvOps.NEG_FLOAT, DalvOps.NEG_FLOAT, + Form12x.THE_ONE, true, "neg-float"); + + public static final Dop NEG_DOUBLE = + new Dop(DalvOps.NEG_DOUBLE, DalvOps.NEG_DOUBLE, + Form12x.THE_ONE, true, "neg-double"); + + public static final Dop INT_TO_LONG = + new Dop(DalvOps.INT_TO_LONG, DalvOps.INT_TO_LONG, + Form12x.THE_ONE, true, "int-to-long"); + + public static final Dop INT_TO_FLOAT = + new Dop(DalvOps.INT_TO_FLOAT, DalvOps.INT_TO_FLOAT, + Form12x.THE_ONE, true, "int-to-float"); + + public static final Dop INT_TO_DOUBLE = + new Dop(DalvOps.INT_TO_DOUBLE, DalvOps.INT_TO_DOUBLE, + Form12x.THE_ONE, true, "int-to-double"); + + public static final Dop LONG_TO_INT = + new Dop(DalvOps.LONG_TO_INT, DalvOps.LONG_TO_INT, + Form12x.THE_ONE, true, "long-to-int"); + + public static final Dop LONG_TO_FLOAT = + new Dop(DalvOps.LONG_TO_FLOAT, DalvOps.LONG_TO_FLOAT, + Form12x.THE_ONE, true, "long-to-float"); + + public static final Dop LONG_TO_DOUBLE = + new Dop(DalvOps.LONG_TO_DOUBLE, DalvOps.LONG_TO_DOUBLE, + Form12x.THE_ONE, true, "long-to-double"); + + public static final Dop FLOAT_TO_INT = + new Dop(DalvOps.FLOAT_TO_INT, DalvOps.FLOAT_TO_INT, + Form12x.THE_ONE, true, "float-to-int"); + + public static final Dop FLOAT_TO_LONG = + new Dop(DalvOps.FLOAT_TO_LONG, DalvOps.FLOAT_TO_LONG, + Form12x.THE_ONE, true, "float-to-long"); + + public static final Dop FLOAT_TO_DOUBLE = + new Dop(DalvOps.FLOAT_TO_DOUBLE, DalvOps.FLOAT_TO_DOUBLE, + Form12x.THE_ONE, true, "float-to-double"); + + public static final Dop DOUBLE_TO_INT = + new Dop(DalvOps.DOUBLE_TO_INT, DalvOps.DOUBLE_TO_INT, + Form12x.THE_ONE, true, "double-to-int"); + + public static final Dop DOUBLE_TO_LONG = + new Dop(DalvOps.DOUBLE_TO_LONG, DalvOps.DOUBLE_TO_LONG, + Form12x.THE_ONE, true, "double-to-long"); + + public static final Dop DOUBLE_TO_FLOAT = + new Dop(DalvOps.DOUBLE_TO_FLOAT, DalvOps.DOUBLE_TO_FLOAT, + Form12x.THE_ONE, true, "double-to-float"); + + public static final Dop INT_TO_BYTE = + new Dop(DalvOps.INT_TO_BYTE, DalvOps.INT_TO_BYTE, + Form12x.THE_ONE, true, "int-to-byte"); + + public static final Dop INT_TO_CHAR = + new Dop(DalvOps.INT_TO_CHAR, DalvOps.INT_TO_CHAR, + Form12x.THE_ONE, true, "int-to-char"); + + public static final Dop INT_TO_SHORT = + new Dop(DalvOps.INT_TO_SHORT, DalvOps.INT_TO_SHORT, + Form12x.THE_ONE, true, "int-to-short"); + + public static final Dop ADD_INT = + new Dop(DalvOps.ADD_INT, DalvOps.ADD_INT, + Form23x.THE_ONE, true, "add-int"); + + public static final Dop SUB_INT = + new Dop(DalvOps.SUB_INT, DalvOps.SUB_INT, + Form23x.THE_ONE, true, "sub-int"); + + public static final Dop MUL_INT = + new Dop(DalvOps.MUL_INT, DalvOps.MUL_INT, + Form23x.THE_ONE, true, "mul-int"); + + public static final Dop DIV_INT = + new Dop(DalvOps.DIV_INT, DalvOps.DIV_INT, + Form23x.THE_ONE, true, "div-int"); + + public static final Dop REM_INT = + new Dop(DalvOps.REM_INT, DalvOps.REM_INT, + Form23x.THE_ONE, true, "rem-int"); + + public static final Dop AND_INT = + new Dop(DalvOps.AND_INT, DalvOps.AND_INT, + Form23x.THE_ONE, true, "and-int"); + + public static final Dop OR_INT = + new Dop(DalvOps.OR_INT, DalvOps.OR_INT, + Form23x.THE_ONE, true, "or-int"); + + public static final Dop XOR_INT = + new Dop(DalvOps.XOR_INT, DalvOps.XOR_INT, + Form23x.THE_ONE, true, "xor-int"); + + public static final Dop SHL_INT = + new Dop(DalvOps.SHL_INT, DalvOps.SHL_INT, + Form23x.THE_ONE, true, "shl-int"); + + public static final Dop SHR_INT = + new Dop(DalvOps.SHR_INT, DalvOps.SHR_INT, + Form23x.THE_ONE, true, "shr-int"); + + public static final Dop USHR_INT = + new Dop(DalvOps.USHR_INT, DalvOps.USHR_INT, + Form23x.THE_ONE, true, "ushr-int"); + + public static final Dop ADD_LONG = + new Dop(DalvOps.ADD_LONG, DalvOps.ADD_LONG, + Form23x.THE_ONE, true, "add-long"); + + public static final Dop SUB_LONG = + new Dop(DalvOps.SUB_LONG, DalvOps.SUB_LONG, + Form23x.THE_ONE, true, "sub-long"); + + public static final Dop MUL_LONG = + new Dop(DalvOps.MUL_LONG, DalvOps.MUL_LONG, + Form23x.THE_ONE, true, "mul-long"); + + public static final Dop DIV_LONG = + new Dop(DalvOps.DIV_LONG, DalvOps.DIV_LONG, + Form23x.THE_ONE, true, "div-long"); + + public static final Dop REM_LONG = + new Dop(DalvOps.REM_LONG, DalvOps.REM_LONG, + Form23x.THE_ONE, true, "rem-long"); + + public static final Dop AND_LONG = + new Dop(DalvOps.AND_LONG, DalvOps.AND_LONG, + Form23x.THE_ONE, true, "and-long"); + + public static final Dop OR_LONG = + new Dop(DalvOps.OR_LONG, DalvOps.OR_LONG, + Form23x.THE_ONE, true, "or-long"); + + public static final Dop XOR_LONG = + new Dop(DalvOps.XOR_LONG, DalvOps.XOR_LONG, + Form23x.THE_ONE, true, "xor-long"); + + public static final Dop SHL_LONG = + new Dop(DalvOps.SHL_LONG, DalvOps.SHL_LONG, + Form23x.THE_ONE, true, "shl-long"); + + public static final Dop SHR_LONG = + new Dop(DalvOps.SHR_LONG, DalvOps.SHR_LONG, + Form23x.THE_ONE, true, "shr-long"); + + public static final Dop USHR_LONG = + new Dop(DalvOps.USHR_LONG, DalvOps.USHR_LONG, + Form23x.THE_ONE, true, "ushr-long"); + + public static final Dop ADD_FLOAT = + new Dop(DalvOps.ADD_FLOAT, DalvOps.ADD_FLOAT, + Form23x.THE_ONE, true, "add-float"); + + public static final Dop SUB_FLOAT = + new Dop(DalvOps.SUB_FLOAT, DalvOps.SUB_FLOAT, + Form23x.THE_ONE, true, "sub-float"); + + public static final Dop MUL_FLOAT = + new Dop(DalvOps.MUL_FLOAT, DalvOps.MUL_FLOAT, + Form23x.THE_ONE, true, "mul-float"); + + public static final Dop DIV_FLOAT = + new Dop(DalvOps.DIV_FLOAT, DalvOps.DIV_FLOAT, + Form23x.THE_ONE, true, "div-float"); + + public static final Dop REM_FLOAT = + new Dop(DalvOps.REM_FLOAT, DalvOps.REM_FLOAT, + Form23x.THE_ONE, true, "rem-float"); + + public static final Dop ADD_DOUBLE = + new Dop(DalvOps.ADD_DOUBLE, DalvOps.ADD_DOUBLE, + Form23x.THE_ONE, true, "add-double"); + + public static final Dop SUB_DOUBLE = + new Dop(DalvOps.SUB_DOUBLE, DalvOps.SUB_DOUBLE, + Form23x.THE_ONE, true, "sub-double"); + + public static final Dop MUL_DOUBLE = + new Dop(DalvOps.MUL_DOUBLE, DalvOps.MUL_DOUBLE, + Form23x.THE_ONE, true, "mul-double"); + + public static final Dop DIV_DOUBLE = + new Dop(DalvOps.DIV_DOUBLE, DalvOps.DIV_DOUBLE, + Form23x.THE_ONE, true, "div-double"); + + public static final Dop REM_DOUBLE = + new Dop(DalvOps.REM_DOUBLE, DalvOps.REM_DOUBLE, + Form23x.THE_ONE, true, "rem-double"); + + public static final Dop ADD_INT_2ADDR = + new Dop(DalvOps.ADD_INT_2ADDR, DalvOps.ADD_INT, + Form12x.THE_ONE, true, "add-int/2addr"); + + public static final Dop SUB_INT_2ADDR = + new Dop(DalvOps.SUB_INT_2ADDR, DalvOps.SUB_INT, + Form12x.THE_ONE, true, "sub-int/2addr"); + + public static final Dop MUL_INT_2ADDR = + new Dop(DalvOps.MUL_INT_2ADDR, DalvOps.MUL_INT, + Form12x.THE_ONE, true, "mul-int/2addr"); + + public static final Dop DIV_INT_2ADDR = + new Dop(DalvOps.DIV_INT_2ADDR, DalvOps.DIV_INT, + Form12x.THE_ONE, true, "div-int/2addr"); + + public static final Dop REM_INT_2ADDR = + new Dop(DalvOps.REM_INT_2ADDR, DalvOps.REM_INT, + Form12x.THE_ONE, true, "rem-int/2addr"); + + public static final Dop AND_INT_2ADDR = + new Dop(DalvOps.AND_INT_2ADDR, DalvOps.AND_INT, + Form12x.THE_ONE, true, "and-int/2addr"); + + public static final Dop OR_INT_2ADDR = + new Dop(DalvOps.OR_INT_2ADDR, DalvOps.OR_INT, + Form12x.THE_ONE, true, "or-int/2addr"); + + public static final Dop XOR_INT_2ADDR = + new Dop(DalvOps.XOR_INT_2ADDR, DalvOps.XOR_INT, + Form12x.THE_ONE, true, "xor-int/2addr"); + + public static final Dop SHL_INT_2ADDR = + new Dop(DalvOps.SHL_INT_2ADDR, DalvOps.SHL_INT, + Form12x.THE_ONE, true, "shl-int/2addr"); + + public static final Dop SHR_INT_2ADDR = + new Dop(DalvOps.SHR_INT_2ADDR, DalvOps.SHR_INT, + Form12x.THE_ONE, true, "shr-int/2addr"); + + public static final Dop USHR_INT_2ADDR = + new Dop(DalvOps.USHR_INT_2ADDR, DalvOps.USHR_INT, + Form12x.THE_ONE, true, "ushr-int/2addr"); + + public static final Dop ADD_LONG_2ADDR = + new Dop(DalvOps.ADD_LONG_2ADDR, DalvOps.ADD_LONG, + Form12x.THE_ONE, true, "add-long/2addr"); + + public static final Dop SUB_LONG_2ADDR = + new Dop(DalvOps.SUB_LONG_2ADDR, DalvOps.SUB_LONG, + Form12x.THE_ONE, true, "sub-long/2addr"); + + public static final Dop MUL_LONG_2ADDR = + new Dop(DalvOps.MUL_LONG_2ADDR, DalvOps.MUL_LONG, + Form12x.THE_ONE, true, "mul-long/2addr"); + + public static final Dop DIV_LONG_2ADDR = + new Dop(DalvOps.DIV_LONG_2ADDR, DalvOps.DIV_LONG, + Form12x.THE_ONE, true, "div-long/2addr"); + + public static final Dop REM_LONG_2ADDR = + new Dop(DalvOps.REM_LONG_2ADDR, DalvOps.REM_LONG, + Form12x.THE_ONE, true, "rem-long/2addr"); + + public static final Dop AND_LONG_2ADDR = + new Dop(DalvOps.AND_LONG_2ADDR, DalvOps.AND_LONG, + Form12x.THE_ONE, true, "and-long/2addr"); + + public static final Dop OR_LONG_2ADDR = + new Dop(DalvOps.OR_LONG_2ADDR, DalvOps.OR_LONG, + Form12x.THE_ONE, true, "or-long/2addr"); + + public static final Dop XOR_LONG_2ADDR = + new Dop(DalvOps.XOR_LONG_2ADDR, DalvOps.XOR_LONG, + Form12x.THE_ONE, true, "xor-long/2addr"); + + public static final Dop SHL_LONG_2ADDR = + new Dop(DalvOps.SHL_LONG_2ADDR, DalvOps.SHL_LONG, + Form12x.THE_ONE, true, "shl-long/2addr"); + + public static final Dop SHR_LONG_2ADDR = + new Dop(DalvOps.SHR_LONG_2ADDR, DalvOps.SHR_LONG, + Form12x.THE_ONE, true, "shr-long/2addr"); + + public static final Dop USHR_LONG_2ADDR = + new Dop(DalvOps.USHR_LONG_2ADDR, DalvOps.USHR_LONG, + Form12x.THE_ONE, true, "ushr-long/2addr"); + + public static final Dop ADD_FLOAT_2ADDR = + new Dop(DalvOps.ADD_FLOAT_2ADDR, DalvOps.ADD_FLOAT, + Form12x.THE_ONE, true, "add-float/2addr"); + + public static final Dop SUB_FLOAT_2ADDR = + new Dop(DalvOps.SUB_FLOAT_2ADDR, DalvOps.SUB_FLOAT, + Form12x.THE_ONE, true, "sub-float/2addr"); + + public static final Dop MUL_FLOAT_2ADDR = + new Dop(DalvOps.MUL_FLOAT_2ADDR, DalvOps.MUL_FLOAT, + Form12x.THE_ONE, true, "mul-float/2addr"); + + public static final Dop DIV_FLOAT_2ADDR = + new Dop(DalvOps.DIV_FLOAT_2ADDR, DalvOps.DIV_FLOAT, + Form12x.THE_ONE, true, "div-float/2addr"); + + public static final Dop REM_FLOAT_2ADDR = + new Dop(DalvOps.REM_FLOAT_2ADDR, DalvOps.REM_FLOAT, + Form12x.THE_ONE, true, "rem-float/2addr"); + + public static final Dop ADD_DOUBLE_2ADDR = + new Dop(DalvOps.ADD_DOUBLE_2ADDR, DalvOps.ADD_DOUBLE, + Form12x.THE_ONE, true, "add-double/2addr"); + + public static final Dop SUB_DOUBLE_2ADDR = + new Dop(DalvOps.SUB_DOUBLE_2ADDR, DalvOps.SUB_DOUBLE, + Form12x.THE_ONE, true, "sub-double/2addr"); + + public static final Dop MUL_DOUBLE_2ADDR = + new Dop(DalvOps.MUL_DOUBLE_2ADDR, DalvOps.MUL_DOUBLE, + Form12x.THE_ONE, true, "mul-double/2addr"); + + public static final Dop DIV_DOUBLE_2ADDR = + new Dop(DalvOps.DIV_DOUBLE_2ADDR, DalvOps.DIV_DOUBLE, + Form12x.THE_ONE, true, "div-double/2addr"); + + public static final Dop REM_DOUBLE_2ADDR = + new Dop(DalvOps.REM_DOUBLE_2ADDR, DalvOps.REM_DOUBLE, + Form12x.THE_ONE, true, "rem-double/2addr"); + + public static final Dop ADD_INT_LIT16 = + new Dop(DalvOps.ADD_INT_LIT16, DalvOps.ADD_INT, + Form22s.THE_ONE, true, "add-int/lit16"); + + public static final Dop RSUB_INT = + new Dop(DalvOps.RSUB_INT, DalvOps.RSUB_INT, + Form22s.THE_ONE, true, "rsub-int"); + + public static final Dop MUL_INT_LIT16 = + new Dop(DalvOps.MUL_INT_LIT16, DalvOps.MUL_INT, + Form22s.THE_ONE, true, "mul-int/lit16"); + + public static final Dop DIV_INT_LIT16 = + new Dop(DalvOps.DIV_INT_LIT16, DalvOps.DIV_INT, + Form22s.THE_ONE, true, "div-int/lit16"); + + public static final Dop REM_INT_LIT16 = + new Dop(DalvOps.REM_INT_LIT16, DalvOps.REM_INT, + Form22s.THE_ONE, true, "rem-int/lit16"); + + public static final Dop AND_INT_LIT16 = + new Dop(DalvOps.AND_INT_LIT16, DalvOps.AND_INT, + Form22s.THE_ONE, true, "and-int/lit16"); + + public static final Dop OR_INT_LIT16 = + new Dop(DalvOps.OR_INT_LIT16, DalvOps.OR_INT, + Form22s.THE_ONE, true, "or-int/lit16"); + + public static final Dop XOR_INT_LIT16 = + new Dop(DalvOps.XOR_INT_LIT16, DalvOps.XOR_INT, + Form22s.THE_ONE, true, "xor-int/lit16"); + + public static final Dop ADD_INT_LIT8 = + new Dop(DalvOps.ADD_INT_LIT8, DalvOps.ADD_INT, + Form22b.THE_ONE, true, "add-int/lit8"); + + public static final Dop RSUB_INT_LIT8 = + new Dop(DalvOps.RSUB_INT_LIT8, DalvOps.RSUB_INT, + Form22b.THE_ONE, true, "rsub-int/lit8"); + + public static final Dop MUL_INT_LIT8 = + new Dop(DalvOps.MUL_INT_LIT8, DalvOps.MUL_INT, + Form22b.THE_ONE, true, "mul-int/lit8"); + + public static final Dop DIV_INT_LIT8 = + new Dop(DalvOps.DIV_INT_LIT8, DalvOps.DIV_INT, + Form22b.THE_ONE, true, "div-int/lit8"); + + public static final Dop REM_INT_LIT8 = + new Dop(DalvOps.REM_INT_LIT8, DalvOps.REM_INT, + Form22b.THE_ONE, true, "rem-int/lit8"); + + public static final Dop AND_INT_LIT8 = + new Dop(DalvOps.AND_INT_LIT8, DalvOps.AND_INT, + Form22b.THE_ONE, true, "and-int/lit8"); + + public static final Dop OR_INT_LIT8 = + new Dop(DalvOps.OR_INT_LIT8, DalvOps.OR_INT, + Form22b.THE_ONE, true, "or-int/lit8"); + + public static final Dop XOR_INT_LIT8 = + new Dop(DalvOps.XOR_INT_LIT8, DalvOps.XOR_INT, + Form22b.THE_ONE, true, "xor-int/lit8"); + + public static final Dop SHL_INT_LIT8 = + new Dop(DalvOps.SHL_INT_LIT8, DalvOps.SHL_INT, + Form22b.THE_ONE, true, "shl-int/lit8"); + + public static final Dop SHR_INT_LIT8 = + new Dop(DalvOps.SHR_INT_LIT8, DalvOps.SHR_INT, + Form22b.THE_ONE, true, "shr-int/lit8"); + + public static final Dop USHR_INT_LIT8 = + new Dop(DalvOps.USHR_INT_LIT8, DalvOps.USHR_INT, + Form22b.THE_ONE, true, "ushr-int/lit8"); + + // END(dops) + + // Static initialization. + static { + DOPS = new Dop[DalvOps.MAX_VALUE - DalvOps.MIN_VALUE + 1]; + + set(SPECIAL_FORMAT); + + // BEGIN(dops-init); GENERATED AUTOMATICALLY BY opcode-gen + set(NOP); + set(MOVE); + set(MOVE_FROM16); + set(MOVE_16); + set(MOVE_WIDE); + set(MOVE_WIDE_FROM16); + set(MOVE_WIDE_16); + set(MOVE_OBJECT); + set(MOVE_OBJECT_FROM16); + set(MOVE_OBJECT_16); + set(MOVE_RESULT); + set(MOVE_RESULT_WIDE); + set(MOVE_RESULT_OBJECT); + set(MOVE_EXCEPTION); + set(RETURN_VOID); + set(RETURN); + set(RETURN_WIDE); + set(RETURN_OBJECT); + set(CONST_4); + set(CONST_16); + set(CONST); + set(CONST_HIGH16); + set(CONST_WIDE_16); + set(CONST_WIDE_32); + set(CONST_WIDE); + set(CONST_WIDE_HIGH16); + set(CONST_STRING); + set(CONST_STRING_JUMBO); + set(CONST_CLASS); + set(MONITOR_ENTER); + set(MONITOR_EXIT); + set(CHECK_CAST); + set(INSTANCE_OF); + set(ARRAY_LENGTH); + set(NEW_INSTANCE); + set(NEW_ARRAY); + set(FILLED_NEW_ARRAY); + set(FILLED_NEW_ARRAY_RANGE); + set(FILL_ARRAY_DATA); + set(THROW); + set(GOTO); + set(GOTO_16); + set(GOTO_32); + set(PACKED_SWITCH); + set(SPARSE_SWITCH); + set(CMPL_FLOAT); + set(CMPG_FLOAT); + set(CMPL_DOUBLE); + set(CMPG_DOUBLE); + set(CMP_LONG); + set(IF_EQ); + set(IF_NE); + set(IF_LT); + set(IF_GE); + set(IF_GT); + set(IF_LE); + set(IF_EQZ); + set(IF_NEZ); + set(IF_LTZ); + set(IF_GEZ); + set(IF_GTZ); + set(IF_LEZ); + set(AGET); + set(AGET_WIDE); + set(AGET_OBJECT); + set(AGET_BOOLEAN); + set(AGET_BYTE); + set(AGET_CHAR); + set(AGET_SHORT); + set(APUT); + set(APUT_WIDE); + set(APUT_OBJECT); + set(APUT_BOOLEAN); + set(APUT_BYTE); + set(APUT_CHAR); + set(APUT_SHORT); + set(IGET); + set(IGET_WIDE); + set(IGET_OBJECT); + set(IGET_BOOLEAN); + set(IGET_BYTE); + set(IGET_CHAR); + set(IGET_SHORT); + set(IPUT); + set(IPUT_WIDE); + set(IPUT_OBJECT); + set(IPUT_BOOLEAN); + set(IPUT_BYTE); + set(IPUT_CHAR); + set(IPUT_SHORT); + set(SGET); + set(SGET_WIDE); + set(SGET_OBJECT); + set(SGET_BOOLEAN); + set(SGET_BYTE); + set(SGET_CHAR); + set(SGET_SHORT); + set(SPUT); + set(SPUT_WIDE); + set(SPUT_OBJECT); + set(SPUT_BOOLEAN); + set(SPUT_BYTE); + set(SPUT_CHAR); + set(SPUT_SHORT); + set(INVOKE_VIRTUAL); + set(INVOKE_SUPER); + set(INVOKE_DIRECT); + set(INVOKE_STATIC); + set(INVOKE_INTERFACE); + set(INVOKE_VIRTUAL_RANGE); + set(INVOKE_SUPER_RANGE); + set(INVOKE_DIRECT_RANGE); + set(INVOKE_STATIC_RANGE); + set(INVOKE_INTERFACE_RANGE); + set(NEG_INT); + set(NOT_INT); + set(NEG_LONG); + set(NOT_LONG); + set(NEG_FLOAT); + set(NEG_DOUBLE); + set(INT_TO_LONG); + set(INT_TO_FLOAT); + set(INT_TO_DOUBLE); + set(LONG_TO_INT); + set(LONG_TO_FLOAT); + set(LONG_TO_DOUBLE); + set(FLOAT_TO_INT); + set(FLOAT_TO_LONG); + set(FLOAT_TO_DOUBLE); + set(DOUBLE_TO_INT); + set(DOUBLE_TO_LONG); + set(DOUBLE_TO_FLOAT); + set(INT_TO_BYTE); + set(INT_TO_CHAR); + set(INT_TO_SHORT); + set(ADD_INT); + set(SUB_INT); + set(MUL_INT); + set(DIV_INT); + set(REM_INT); + set(AND_INT); + set(OR_INT); + set(XOR_INT); + set(SHL_INT); + set(SHR_INT); + set(USHR_INT); + set(ADD_LONG); + set(SUB_LONG); + set(MUL_LONG); + set(DIV_LONG); + set(REM_LONG); + set(AND_LONG); + set(OR_LONG); + set(XOR_LONG); + set(SHL_LONG); + set(SHR_LONG); + set(USHR_LONG); + set(ADD_FLOAT); + set(SUB_FLOAT); + set(MUL_FLOAT); + set(DIV_FLOAT); + set(REM_FLOAT); + set(ADD_DOUBLE); + set(SUB_DOUBLE); + set(MUL_DOUBLE); + set(DIV_DOUBLE); + set(REM_DOUBLE); + set(ADD_INT_2ADDR); + set(SUB_INT_2ADDR); + set(MUL_INT_2ADDR); + set(DIV_INT_2ADDR); + set(REM_INT_2ADDR); + set(AND_INT_2ADDR); + set(OR_INT_2ADDR); + set(XOR_INT_2ADDR); + set(SHL_INT_2ADDR); + set(SHR_INT_2ADDR); + set(USHR_INT_2ADDR); + set(ADD_LONG_2ADDR); + set(SUB_LONG_2ADDR); + set(MUL_LONG_2ADDR); + set(DIV_LONG_2ADDR); + set(REM_LONG_2ADDR); + set(AND_LONG_2ADDR); + set(OR_LONG_2ADDR); + set(XOR_LONG_2ADDR); + set(SHL_LONG_2ADDR); + set(SHR_LONG_2ADDR); + set(USHR_LONG_2ADDR); + set(ADD_FLOAT_2ADDR); + set(SUB_FLOAT_2ADDR); + set(MUL_FLOAT_2ADDR); + set(DIV_FLOAT_2ADDR); + set(REM_FLOAT_2ADDR); + set(ADD_DOUBLE_2ADDR); + set(SUB_DOUBLE_2ADDR); + set(MUL_DOUBLE_2ADDR); + set(DIV_DOUBLE_2ADDR); + set(REM_DOUBLE_2ADDR); + set(ADD_INT_LIT16); + set(RSUB_INT); + set(MUL_INT_LIT16); + set(DIV_INT_LIT16); + set(REM_INT_LIT16); + set(AND_INT_LIT16); + set(OR_INT_LIT16); + set(XOR_INT_LIT16); + set(ADD_INT_LIT8); + set(RSUB_INT_LIT8); + set(MUL_INT_LIT8); + set(DIV_INT_LIT8); + set(REM_INT_LIT8); + set(AND_INT_LIT8); + set(OR_INT_LIT8); + set(XOR_INT_LIT8); + set(SHL_INT_LIT8); + set(SHR_INT_LIT8); + set(USHR_INT_LIT8); + // END(dops-init) + } + + /** + * This class is uninstantiable. + */ + private Dops() { + // This space intentionally left blank. + } + + /** + * Gets the {@link Dop} for the given opcode value. + * + * @param opcode {@code DalvOps.MIN_VALUE..DalvOps.MAX_VALUE;} the opcode value + * @return {@code non-null;} the associated opcode instance + */ + public static Dop get(int opcode) { + int idx = opcode - DalvOps.MIN_VALUE; + + try { + Dop result = DOPS[idx]; + if (result != null) { + return result; + } + } catch (ArrayIndexOutOfBoundsException ex) { + // Fall through. + } + + throw new IllegalArgumentException("bogus opcode"); + } + + /** + * Gets the {@link Dop} with the given family/format combination, if + * any. + * + * @param family {@code DalvOps.MIN_VALUE..DalvOps.MAX_VALUE;} the opcode family + * @param format {@code non-null;} the opcode's instruction format + * @return {@code null-ok;} the corresponding opcode, or {@code null} if + * there is none + */ + public static Dop getOrNull(int family, InsnFormat format) { + if (format == null) { + throw new NullPointerException("format == null"); + } + + int len = DOPS.length; + + // TODO: Linear search is bad. + for (int i = 0; i < len; i++) { + Dop dop = DOPS[i]; + if ((dop != null) && + (dop.getFamily() == family) && + (dop.getFormat() == format)) { + return dop; + } + } + + return null; + } + + /** + * Puts the given opcode into the table of all ops. + * + * @param opcode {@code non-null;} the opcode + */ + private static void set(Dop opcode) { + int idx = opcode.getOpcode() - DalvOps.MIN_VALUE; + DOPS[idx] = opcode; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/FixedSizeInsn.java b/dexgen/src/com/android/dexgen/dex/code/FixedSizeInsn.java new file mode 100644 index 0000000..28d8986 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/FixedSizeInsn.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Base class for instructions which are of a fixed code size and which use {@link InsnFormat} methods to write themselves. This + * includes most — but not all — instructions. + */ +public abstract class FixedSizeInsn extends DalvInsn { + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + *

Note: In the unlikely event that an instruction takes + * absolutely no registers (e.g., a {@code nop} or a + * no-argument no-result * static method call), then the given + * register list may be passed as {@link + * RegisterSpecList#EMPTY}.

+ * + * @param opcode the opcode; one of the constants from {@link Dops} + * @param position {@code non-null;} source position + * @param registers {@code non-null;} register list, including a + * result register if appropriate (that is, registers may be either + * ins or outs) + */ + public FixedSizeInsn(Dop opcode, SourcePosition position, + RegisterSpecList registers) { + super(opcode, position, registers); + } + + /** {@inheritDoc} */ + @Override + public final int codeSize() { + return getOpcode().getFormat().codeSize(); + } + + /** {@inheritDoc} */ + @Override + public final void writeTo(AnnotatedOutput out) { + getOpcode().getFormat().writeTo(out, this); + } + + /** {@inheritDoc} */ + @Override + public final DalvInsn withRegisterOffset(int delta) { + return withRegisters(getRegisters().withOffset(delta)); + } + + /** {@inheritDoc} */ + @Override + protected final String listingString0(boolean noteIndices) { + return getOpcode().getFormat().listingString(this, noteIndices); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/HighRegisterPrefix.java b/dexgen/src/com/android/dexgen/dex/code/HighRegisterPrefix.java new file mode 100644 index 0000000..08794ff --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/HighRegisterPrefix.java @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Combination instruction which turns into a variable number of + * {@code move*} instructions to move a set of registers into + * registers starting at {@code 0} sequentially. This is used + * in translating an instruction whose register requirements cannot + * be met using a straightforward choice of a single opcode. + */ +public final class HighRegisterPrefix extends VariableSizeInsn { + /** {@code null-ok;} cached instructions, if constructed */ + private SimpleInsn[] insns; + + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + * @param registers {@code non-null;} source registers + */ + public HighRegisterPrefix(SourcePosition position, + RegisterSpecList registers) { + super(position, registers); + + if (registers.size() == 0) { + throw new IllegalArgumentException("registers.size() == 0"); + } + + insns = null; + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + int result = 0; + + calculateInsnsIfNecessary(); + + for (SimpleInsn insn : insns) { + result += insn.codeSize(); + } + + return result; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out) { + calculateInsnsIfNecessary(); + + for (SimpleInsn insn : insns) { + insn.writeTo(out); + } + } + + /** + * Helper for {@link #codeSize} and {@link #writeTo} which sets up + * {@link #insns} if not already done. + */ + private void calculateInsnsIfNecessary() { + if (insns != null) { + return; + } + + RegisterSpecList registers = getRegisters(); + int sz = registers.size(); + + insns = new SimpleInsn[sz]; + + for (int i = 0, outAt = 0; i < sz; i++) { + RegisterSpec src = registers.get(i); + insns[i] = moveInsnFor(src, outAt); + outAt += src.getCategory(); + } + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new HighRegisterPrefix(getPosition(), registers); + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + return null; + } + + /** {@inheritDoc} */ + @Override + protected String listingString0(boolean noteIndices) { + RegisterSpecList registers = getRegisters(); + int sz = registers.size(); + StringBuffer sb = new StringBuffer(100); + + for (int i = 0, outAt = 0; i < sz; i++) { + RegisterSpec src = registers.get(i); + SimpleInsn insn = moveInsnFor(src, outAt); + + if (i != 0) { + sb.append('\n'); + } + + sb.append(insn.listingString0(noteIndices)); + + outAt += src.getCategory(); + } + + return sb.toString(); + } + + /** + * Returns the proper move instruction for the given source spec + * and destination index. + * + * @param src {@code non-null;} the source register spec + * @param destIndex {@code >= 0;} the destination register index + * @return {@code non-null;} the appropriate move instruction + */ + private static SimpleInsn moveInsnFor(RegisterSpec src, int destIndex) { + return DalvInsn.makeMove(SourcePosition.NO_INFO, + RegisterSpec.make(destIndex, src.getType()), + src); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/InsnFormat.java b/dexgen/src/com/android/dexgen/dex/code/InsnFormat.java new file mode 100644 index 0000000..bd5b60d --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/InsnFormat.java @@ -0,0 +1,578 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstInteger; +import com.android.dexgen.rop.cst.CstKnownNull; +import com.android.dexgen.rop.cst.CstLiteral64; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * Base class for all instruction format handlers. Instruction format + * handlers know how to translate {@link DalvInsn} instances into + * streams of code words, as well as human-oriented listing strings + * representing such translations. + */ +public abstract class InsnFormat { + /** + * Returns the string form, suitable for inclusion in a listing + * dump, of the given instruction. The instruction must be of this + * instance's format for proper operation. + * + * @param insn {@code non-null;} the instruction + * @param noteIndices whether to include an explicit notation of + * constant pool indices + * @return {@code non-null;} the string form + */ + public final String listingString(DalvInsn insn, boolean noteIndices) { + String op = insn.getOpcode().getName(); + String arg = insnArgString(insn); + String comment = insnCommentString(insn, noteIndices); + StringBuilder sb = new StringBuilder(100); + + sb.append(op); + + if (arg.length() != 0) { + sb.append(' '); + sb.append(arg); + } + + if (comment.length() != 0) { + sb.append(" // "); + sb.append(comment); + } + + return sb.toString(); + } + + /** + * Returns the string form of the arguments to the given instruction. + * The instruction must be of this instance's format. If the instruction + * has no arguments, then the result should be {@code ""}, not + * {@code null}. + * + *

Subclasses must override this method.

+ * + * @param insn {@code non-null;} the instruction + * @return {@code non-null;} the string form + */ + public abstract String insnArgString(DalvInsn insn); + + /** + * Returns the associated comment for the given instruction, if any. + * The instruction must be of this instance's format. If the instruction + * has no comment, then the result should be {@code ""}, not + * {@code null}. + * + *

Subclasses must override this method.

+ * + * @param insn {@code non-null;} the instruction + * @param noteIndices whether to include an explicit notation of + * constant pool indices + * @return {@code non-null;} the string form + */ + public abstract String insnCommentString(DalvInsn insn, + boolean noteIndices); + + /** + * Gets the code size of instructions that use this format. The + * size is a number of 16-bit code units, not bytes. This should + * throw an exception if this format is of variable size. + * + * @return {@code >= 0;} the instruction length in 16-bit code units + */ + public abstract int codeSize(); + + /** + * Returns whether or not the given instruction's arguments will + * fit in this instance's format. This includes such things as + * counting register arguments, checking register ranges, and + * making sure that additional arguments are of appropriate types + * and are in-range. If this format has a branch target but the + * instruction's branch offset is unknown, this method will simply + * not check the offset. + * + *

Subclasses must override this method.

+ * + * @param insn {@code non-null;} the instruction to check + * @return {@code true} iff the instruction's arguments are + * appropriate for this instance, or {@code false} if not + */ + public abstract boolean isCompatible(DalvInsn insn); + + /** + * Returns whether or not the given instruction's branch offset will + * fit in this instance's format. This always returns {@code false} + * for formats that don't include a branch offset. + * + *

The default implementation of this method always returns + * {@code false}. Subclasses must override this method if they + * include branch offsets.

+ * + * @param insn {@code non-null;} the instruction to check + * @return {@code true} iff the instruction's branch offset is + * appropriate for this instance, or {@code false} if not + */ + public boolean branchFits(TargetInsn insn) { + return false; + } + + /** + * Returns the next instruction format to try to match an instruction + * with, presuming that this instance isn't compatible, if any. + * + *

Subclasses must override this method.

+ * + * @return {@code null-ok;} the next format to try, or {@code null} if + * there are no suitable alternatives + */ + public abstract InsnFormat nextUp(); + + /** + * Writes the code units for the given instruction to the given + * output destination. The instruction must be of this instance's format. + * + *

Subclasses must override this method.

+ * + * @param out {@code non-null;} the output destination to write to + * @param insn {@code non-null;} the instruction to write + */ + public abstract void writeTo(AnnotatedOutput out, DalvInsn insn); + + /** + * Helper method to return a register list string. + * + * @param list {@code non-null;} the list of registers + * @return {@code non-null;} the string form + */ + protected static String regListString(RegisterSpecList list) { + int sz = list.size(); + StringBuffer sb = new StringBuffer(sz * 5 + 2); + + sb.append('{'); + + for (int i = 0; i < sz; i++) { + if (i != 0) { + sb.append(", "); + } + sb.append(list.get(i).regString()); + } + + sb.append('}'); + + return sb.toString(); + } + + /** + * Helper method to return a literal bits argument string. + * + * @param value the value + * @return {@code non-null;} the string form + */ + protected static String literalBitsString(CstLiteralBits value) { + StringBuffer sb = new StringBuffer(100); + + sb.append('#'); + + if (value instanceof CstKnownNull) { + sb.append("null"); + } else { + sb.append(value.typeName()); + sb.append(' '); + sb.append(value.toHuman()); + } + + return sb.toString(); + } + + /** + * Helper method to return a literal bits comment string. + * + * @param value the value + * @param width the width of the constant, in bits (used for displaying + * the uninterpreted bits; one of: {@code 4 8 16 32 64} + * @return {@code non-null;} the comment + */ + protected static String literalBitsComment(CstLiteralBits value, + int width) { + StringBuffer sb = new StringBuffer(20); + + sb.append("#"); + + long bits; + + if (value instanceof CstLiteral64) { + bits = ((CstLiteral64) value).getLongBits(); + } else { + bits = value.getIntBits(); + } + + switch (width) { + case 4: sb.append(Hex.uNibble((int) bits)); break; + case 8: sb.append(Hex.u1((int) bits)); break; + case 16: sb.append(Hex.u2((int) bits)); break; + case 32: sb.append(Hex.u4((int) bits)); break; + case 64: sb.append(Hex.u8(bits)); break; + default: { + throw new RuntimeException("shouldn't happen"); + } + } + + return sb.toString(); + } + + /** + * Helper method to return a branch address string. + * + * @param insn {@code non-null;} the instruction in question + * @return {@code non-null;} the string form of the instruction's branch target + */ + protected static String branchString(DalvInsn insn) { + TargetInsn ti = (TargetInsn) insn; + int address = ti.getTargetAddress(); + + return (address == (char) address) ? Hex.u2(address) : Hex.u4(address); + } + + /** + * Helper method to return the comment for a branch. + * + * @param insn {@code non-null;} the instruction in question + * @return {@code non-null;} the comment + */ + protected static String branchComment(DalvInsn insn) { + TargetInsn ti = (TargetInsn) insn; + int offset = ti.getTargetOffset(); + + return (offset == (short) offset) ? Hex.s2(offset) : Hex.s4(offset); + } + + /** + * Helper method to return a constant string. + * + * @param insn {@code non-null;} a constant-bearing instruction + * @return {@code non-null;} the string form of the contained constant + */ + protected static String cstString(DalvInsn insn) { + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + return cst.toHuman(); + } + + /** + * Helper method to return an instruction comment for a constant. + * + * @param insn {@code non-null;} a constant-bearing instruction + * @return {@code non-null;} comment string representing the constant + */ + protected static String cstComment(DalvInsn insn) { + CstInsn ci = (CstInsn) insn; + + if (! ci.hasIndex()) { + return ""; + } + + StringBuilder sb = new StringBuilder(20); + int index = ci.getIndex(); + + sb.append(ci.getConstant().typeName()); + sb.append('@'); + + if (index < 65536) { + sb.append(Hex.u2(index)); + } else { + sb.append(Hex.u4(index)); + } + + return sb.toString(); + } + + /** + * Helper method to determine if a signed int value fits in a nibble. + * + * @param value the value in question + * @return {@code true} iff it's in the range -8..+7 + */ + protected static boolean signedFitsInNibble(int value) { + return (value >= -8) && (value <= 7); + } + + /** + * Helper method to determine if an unsigned int value fits in a nibble. + * + * @param value the value in question + * @return {@code true} iff it's in the range 0..0xf + */ + protected static boolean unsignedFitsInNibble(int value) { + return value == (value & 0xf); + } + + /** + * Helper method to determine if a signed int value fits in a byte. + * + * @param value the value in question + * @return {@code true} iff it's in the range -0x80..+0x7f + */ + protected static boolean signedFitsInByte(int value) { + return (byte) value == value; + } + + /** + * Helper method to determine if an unsigned int value fits in a byte. + * + * @param value the value in question + * @return {@code true} iff it's in the range 0..0xff + */ + protected static boolean unsignedFitsInByte(int value) { + return value == (value & 0xff); + } + + /** + * Helper method to determine if a signed int value fits in a short. + * + * @param value the value in question + * @return {@code true} iff it's in the range -0x8000..+0x7fff + */ + protected static boolean signedFitsInShort(int value) { + return (short) value == value; + } + + /** + * Helper method to determine if an unsigned int value fits in a short. + * + * @param value the value in question + * @return {@code true} iff it's in the range 0..0xffff + */ + protected static boolean unsignedFitsInShort(int value) { + return value == (value & 0xffff); + } + + /** + * Helper method to determine if a signed int value fits in three bytes. + * + * @param value the value in question + * @return {@code true} iff it's in the range -0x800000..+0x7fffff + */ + protected static boolean signedFitsIn3Bytes(int value) { + return value == ((value << 8) >> 8); + } + + /** + * Helper method to extract the callout-argument index from an + * appropriate instruction. + * + * @param insn {@code non-null;} the instruction + * @return {@code >= 0;} the callout argument index + */ + protected static int argIndex(DalvInsn insn) { + int arg = ((CstInteger) ((CstInsn) insn).getConstant()).getValue(); + + if (arg < 0) { + throw new IllegalArgumentException("bogus insn"); + } + + return arg; + } + + /** + * Helper method to combine an opcode and a second byte of data into + * the appropriate form for emitting into a code buffer. + * + * @param insn {@code non-null;} the instruction containing the opcode + * @param arg {@code 0..255;} arbitrary other byte value + * @return combined value + */ + protected static short opcodeUnit(DalvInsn insn, int arg) { + if ((arg & 0xff) != arg) { + throw new IllegalArgumentException("arg out of range 0..255"); + } + + int opcode = insn.getOpcode().getOpcode(); + + if ((opcode & 0xff) != opcode) { + throw new IllegalArgumentException("opcode out of range 0..255"); + } + + return (short) (opcode | (arg << 8)); + } + + /** + * Helper method to combine two bytes into a code unit. + * + * @param low {@code 0..255;} low byte + * @param high {@code 0..255;} high byte + * @return combined value + */ + protected static short codeUnit(int low, int high) { + if ((low & 0xff) != low) { + throw new IllegalArgumentException("low out of range 0..255"); + } + + if ((high & 0xff) != high) { + throw new IllegalArgumentException("high out of range 0..255"); + } + + return (short) (low | (high << 8)); + } + + /** + * Helper method to combine four nibbles into a code unit. + * + * @param n0 {@code 0..15;} low nibble + * @param n1 {@code 0..15;} medium-low nibble + * @param n2 {@code 0..15;} medium-high nibble + * @param n3 {@code 0..15;} high nibble + * @return combined value + */ + protected static short codeUnit(int n0, int n1, int n2, int n3) { + if ((n0 & 0xf) != n0) { + throw new IllegalArgumentException("n0 out of range 0..15"); + } + + if ((n1 & 0xf) != n1) { + throw new IllegalArgumentException("n1 out of range 0..15"); + } + + if ((n2 & 0xf) != n2) { + throw new IllegalArgumentException("n2 out of range 0..15"); + } + + if ((n3 & 0xf) != n3) { + throw new IllegalArgumentException("n3 out of range 0..15"); + } + + return (short) (n0 | (n1 << 4) | (n2 << 8) | (n3 << 12)); + } + + /** + * Helper method to combine two nibbles into a byte. + * + * @param low {@code 0..15;} low nibble + * @param high {@code 0..15;} high nibble + * @return {@code 0..255;} combined value + */ + protected static int makeByte(int low, int high) { + if ((low & 0xf) != low) { + throw new IllegalArgumentException("low out of range 0..15"); + } + + if ((high & 0xf) != high) { + throw new IllegalArgumentException("high out of range 0..15"); + } + + return low | (high << 4); + } + + /** + * Writes one code unit to the given output destination. + * + * @param out {@code non-null;} where to write to + * @param c0 code unit to write + */ + protected static void write(AnnotatedOutput out, short c0) { + out.writeShort(c0); + } + + /** + * Writes two code units to the given output destination. + * + * @param out {@code non-null;} where to write to + * @param c0 code unit to write + * @param c1 code unit to write + */ + protected static void write(AnnotatedOutput out, short c0, short c1) { + out.writeShort(c0); + out.writeShort(c1); + } + + /** + * Writes three code units to the given output destination. + * + * @param out {@code non-null;} where to write to + * @param c0 code unit to write + * @param c1 code unit to write + * @param c2 code unit to write + */ + protected static void write(AnnotatedOutput out, short c0, short c1, + short c2) { + out.writeShort(c0); + out.writeShort(c1); + out.writeShort(c2); + } + + /** + * Writes four code units to the given output destination. + * + * @param out {@code non-null;} where to write to + * @param c0 code unit to write + * @param c1 code unit to write + * @param c2 code unit to write + * @param c3 code unit to write + */ + protected static void write(AnnotatedOutput out, short c0, short c1, + short c2, short c3) { + out.writeShort(c0); + out.writeShort(c1); + out.writeShort(c2); + out.writeShort(c3); + } + + /** + * Writes five code units to the given output destination. + * + * @param out {@code non-null;} where to write to + * @param c0 code unit to write + * @param c1 code unit to write + * @param c2 code unit to write + * @param c3 code unit to write + * @param c4 code unit to write + */ + protected static void write(AnnotatedOutput out, short c0, short c1, + short c2, short c3, short c4) { + out.writeShort(c0); + out.writeShort(c1); + out.writeShort(c2); + out.writeShort(c3); + out.writeShort(c4); + } + + /** + * Writes six code units to the given output destination. + * + * @param out {@code non-null;} where to write to + * @param c0 code unit to write + * @param c1 code unit to write + * @param c2 code unit to write + * @param c3 code unit to write + * @param c4 code unit to write + * @param c5 code unit to write + */ + protected static void write(AnnotatedOutput out, short c0, short c1, + short c2, short c3, short c4, short c5) { + out.writeShort(c0); + out.writeShort(c1); + out.writeShort(c2); + out.writeShort(c3); + out.writeShort(c4); + out.writeShort(c5); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/LocalEnd.java b/dexgen/src/com/android/dexgen/dex/code/LocalEnd.java new file mode 100644 index 0000000..130b08b --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/LocalEnd.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; + +/** + * Pseudo-instruction which is used to explicitly end the mapping of a + * register to a named local variable. That is, an instance of this + * class in an instruction stream indicates that starting with the + * subsequent instruction, the indicated variable is no longer valid. + */ +public final class LocalEnd extends ZeroSizeInsn { + /** + * {@code non-null;} register spec representing the local variable ended + * by this instance. Note: Technically, only the register + * number needs to be recorded here as the rest of the information + * is implicit in the ambient local variable state, but other code + * will check the other info for consistency. + */ + private final RegisterSpec local; + + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + * @param local {@code non-null;} register spec representing the local + * variable introduced by this instance + */ + public LocalEnd(SourcePosition position, RegisterSpec local) { + super(position); + + if (local == null) { + throw new NullPointerException("local == null"); + } + + this.local = local; + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisterOffset(int delta) { + return new LocalEnd(getPosition(), local.withOffset(delta)); + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new LocalEnd(getPosition(), local); + } + + /** + * Gets the register spec representing the local variable ended + * by this instance. + * + * @return {@code non-null;} the register spec + */ + public RegisterSpec getLocal() { + return local; + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + return local.toString(); + } + + /** {@inheritDoc} */ + @Override + protected String listingString0(boolean noteIndices) { + return "local-end " + LocalStart.localString(local); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/LocalList.java b/dexgen/src/com/android/dexgen/dex/code/LocalList.java new file mode 100644 index 0000000..c1c3921 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/LocalList.java @@ -0,0 +1,948 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecSet; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.FixedSizeList; + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Arrays; + +/** + * List of local variables. Each local variable entry indicates a + * range of code which it is valid for, a register number, a name, + * and a type. + */ +public final class LocalList extends FixedSizeList { + /** {@code non-null;} empty instance */ + public static final LocalList EMPTY = new LocalList(0); + + /** whether to run the self-check code */ + private static final boolean DEBUG = false; + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size {@code >= 0;} the size of the list + */ + public LocalList(int size) { + super(size); + } + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public Entry get(int n) { + return (Entry) get0(n); + } + + /** + * Sets the entry at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param entry {@code non-null;} the entry to set at {@code n} + */ + public void set(int n, Entry entry) { + set0(n, entry); + } + + /** + * Does a human-friendly dump of this instance. + * + * @param out {@code non-null;} where to dump + * @param prefix {@code non-null;} prefix to attach to each line of output + */ + public void debugPrint(PrintStream out, String prefix) { + int sz = size(); + + for (int i = 0; i < sz; i++) { + out.print(prefix); + out.println(get(i)); + } + } + + /** + * Disposition of a local entry. + */ + public static enum Disposition { + /** local started (introduced) */ + START, + + /** local ended without being replaced */ + END_SIMPLY, + + /** local ended because it was directly replaced */ + END_REPLACED, + + /** local ended because it was moved to a different register */ + END_MOVED, + + /** + * local ended because the previous local clobbered this one + * (because it is category-2) + */ + END_CLOBBERED_BY_PREV, + + /** + * local ended because the next local clobbered this one + * (because this one is a category-2) + */ + END_CLOBBERED_BY_NEXT; + } + + /** + * Entry in a local list. + */ + public static class Entry implements Comparable { + /** {@code >= 0;} address */ + private final int address; + + /** {@code non-null;} disposition of the local */ + private final Disposition disposition; + + /** {@code non-null;} register spec representing the variable */ + private final RegisterSpec spec; + + /** {@code non-null;} variable type (derived from {@code spec}) */ + private final CstType type; + + /** + * Constructs an instance. + * + * @param address {@code >= 0;} address + * @param disposition {@code non-null;} disposition of the local + * @param spec {@code non-null;} register spec representing + * the variable + */ + public Entry(int address, Disposition disposition, RegisterSpec spec) { + if (address < 0) { + throw new IllegalArgumentException("address < 0"); + } + + if (disposition == null) { + throw new NullPointerException("disposition == null"); + } + + try { + if (spec.getLocalItem() == null) { + throw new NullPointerException( + "spec.getLocalItem() == null"); + } + } catch (NullPointerException ex) { + // Elucidate the exception. + throw new NullPointerException("spec == null"); + } + + this.address = address; + this.disposition = disposition; + this.spec = spec; + this.type = CstType.intern(spec.getType()); + } + + /** {@inheritDoc} */ + public String toString() { + return Integer.toHexString(address) + " " + disposition + " " + + spec; + } + + /** {@inheritDoc} */ + public boolean equals(Object other) { + if (!(other instanceof Entry)) { + return false; + } + + return (compareTo((Entry) other) == 0); + } + + /** + * Compares by (in priority order) address, end then start + * disposition (variants of end are all consistered + * equivalent), and spec. + * + * @param other {@code non-null;} entry to compare to + * @return {@code -1..1;} standard result of comparison + */ + public int compareTo(Entry other) { + if (address < other.address) { + return -1; + } else if (address > other.address) { + return 1; + } + + boolean thisIsStart = isStart(); + boolean otherIsStart = other.isStart(); + + if (thisIsStart != otherIsStart) { + return thisIsStart ? 1 : -1; + } + + return spec.compareTo(other.spec); + } + + /** + * Gets the address. + * + * @return {@code >= 0;} the address + */ + public int getAddress() { + return address; + } + + /** + * Gets the disposition. + * + * @return {@code non-null;} the disposition + */ + public Disposition getDisposition() { + return disposition; + } + + /** + * Gets whether this is a local start. This is just shorthand for + * {@code getDisposition() == Disposition.START}. + * + * @return {@code true} iff this is a start + */ + public boolean isStart() { + return disposition == Disposition.START; + } + + /** + * Gets the variable name. + * + * @return {@code null-ok;} the variable name + */ + public CstUtf8 getName() { + return spec.getLocalItem().getName(); + } + + /** + * Gets the variable signature. + * + * @return {@code null-ok;} the variable signature + */ + public CstUtf8 getSignature() { + return spec.getLocalItem().getSignature(); + } + + /** + * Gets the variable's type. + * + * @return {@code non-null;} the type + */ + public CstType getType() { + return type; + } + + /** + * Gets the number of the register holding the variable. + * + * @return {@code >= 0;} the number of the register holding + * the variable + */ + public int getRegister() { + return spec.getReg(); + } + + /** + * Gets the RegisterSpec of the register holding the variable. + * + * @return {@code non-null;} RegisterSpec of the holding register. + */ + public RegisterSpec getRegisterSpec() { + return spec; + } + + /** + * Returns whether or not this instance matches the given spec. + * + * @param otherSpec {@code non-null;} the spec in question + * @return {@code true} iff this instance matches + * {@code spec} + */ + public boolean matches(RegisterSpec otherSpec) { + return spec.equalsUsingSimpleType(otherSpec); + } + + /** + * Returns whether or not this instance matches the spec in + * the given instance. + * + * @param other {@code non-null;} another entry + * @return {@code true} iff this instance's spec matches + * {@code other} + */ + public boolean matches(Entry other) { + return matches(other.spec); + } + + /** + * Returns an instance just like this one but with the disposition + * set as given. + * + * @param disposition {@code non-null;} the new disposition + * @return {@code non-null;} an appropriately-constructed instance + */ + public Entry withDisposition(Disposition disposition) { + if (disposition == this.disposition) { + return this; + } + + return new Entry(address, disposition, spec); + } + } + + /** + * Constructs an instance for the given method, based on the given + * block order and intermediate local information. + * + * @param insns {@code non-null;} instructions to convert + * @return {@code non-null;} the constructed list + */ + public static LocalList make(DalvInsnList insns) { + int sz = insns.size(); + + /* + * Go through the insn list, looking for all the local + * variable pseudoinstructions, splitting out LocalSnapshots + * into separate per-variable starts, adding explicit ends + * wherever a variable is replaced or moved, and collecting + * these and all the other local variable "activity" + * together into an output list (without the other insns). + * + * Note: As of this writing, this method won't be handed any + * insn lists that contain local ends, but I (danfuzz) expect + * that to change at some point, when we start feeding that + * info explicitly into the rop layer rather than only trying + * to infer it. So, given that expectation, this code is + * written to deal with them. + */ + + MakeState state = new MakeState(sz); + + for (int i = 0; i < sz; i++) { + DalvInsn insn = insns.get(i); + + if (insn instanceof LocalSnapshot) { + RegisterSpecSet snapshot = + ((LocalSnapshot) insn).getLocals(); + state.snapshot(insn.getAddress(), snapshot); + } else if (insn instanceof LocalStart) { + RegisterSpec local = ((LocalStart) insn).getLocal(); + state.startLocal(insn.getAddress(), local); + } else if (insn instanceof LocalEnd) { + RegisterSpec local = ((LocalEnd) insn).getLocal(); + state.endLocal(insn.getAddress(), local); + } + } + + LocalList result = state.finish(); + + if (DEBUG) { + debugVerify(result); + } + + return result; + } + + /** + * Debugging helper that verifies the constraint that a list doesn't + * contain any redundant local starts and that local ends that are + * due to replacements are properly annotated. + */ + private static void debugVerify(LocalList locals) { + try { + debugVerify0(locals); + } catch (RuntimeException ex) { + int sz = locals.size(); + for (int i = 0; i < sz; i++) { + System.err.println(locals.get(i)); + } + throw ex; + } + + } + + /** + * Helper for {@link #debugVerify} which does most of the work. + */ + private static void debugVerify0(LocalList locals) { + int sz = locals.size(); + Entry[] active = new Entry[65536]; + + for (int i = 0; i < sz; i++) { + Entry e = locals.get(i); + int reg = e.getRegister(); + + if (e.isStart()) { + Entry already = active[reg]; + + if ((already != null) && e.matches(already)) { + throw new RuntimeException("redundant start at " + + Integer.toHexString(e.getAddress()) + ": got " + + e + "; had " + already); + } + + active[reg] = e; + } else { + if (active[reg] == null) { + throw new RuntimeException("redundant end at " + + Integer.toHexString(e.getAddress())); + } + + int addr = e.getAddress(); + boolean foundStart = false; + + for (int j = i + 1; j < sz; j++) { + Entry test = locals.get(j); + if (test.getAddress() != addr) { + break; + } + if (test.getRegisterSpec().getReg() == reg) { + if (test.isStart()) { + if (e.getDisposition() + != Disposition.END_REPLACED) { + throw new RuntimeException( + "improperly marked end at " + + Integer.toHexString(addr)); + } + foundStart = true; + } else { + throw new RuntimeException( + "redundant end at " + + Integer.toHexString(addr)); + } + } + } + + if (!foundStart && + (e.getDisposition() == Disposition.END_REPLACED)) { + throw new RuntimeException( + "improper end replacement claim at " + + Integer.toHexString(addr)); + } + + active[reg] = null; + } + } + } + + /** + * Intermediate state when constructing a local list. + */ + public static class MakeState { + /** {@code non-null;} result being collected */ + private final ArrayList result; + + /** + * {@code >= 0;} running count of nulled result entries, to help with + * sizing the final list + */ + private int nullResultCount; + + /** {@code null-ok;} current register mappings */ + private RegisterSpecSet regs; + + /** {@code null-ok;} result indices where local ends are stored */ + private int[] endIndices; + + /** {@code >= 0;} last address seen */ + private int lastAddress; + + /** + * Constructs an instance. + */ + public MakeState(int initialSize) { + result = new ArrayList(initialSize); + nullResultCount = 0; + regs = null; + endIndices = null; + lastAddress = 0; + } + + /** + * Checks the address and other vitals as a prerequisite to + * further processing. + * + * @param address {@code >= 0;} address about to be processed + * @param reg {@code >= 0;} register number about to be processed + */ + private void aboutToProcess(int address, int reg) { + boolean first = (endIndices == null); + + if ((address == lastAddress) && !first) { + return; + } + + if (address < lastAddress) { + throw new RuntimeException("shouldn't happen"); + } + + if (first || (reg >= endIndices.length)) { + /* + * This is the first allocation of the state set and + * index array, or we need to grow. (The latter doesn't + * happen much; in fact, we have only ever observed + * it happening in test cases, never in "real" code.) + */ + int newSz = reg + 1; + RegisterSpecSet newRegs = new RegisterSpecSet(newSz); + int[] newEnds = new int[newSz]; + Arrays.fill(newEnds, -1); + + if (!first) { + newRegs.putAll(regs); + System.arraycopy(endIndices, 0, newEnds, 0, + endIndices.length); + } + + regs = newRegs; + endIndices = newEnds; + } + } + + /** + * Sets the local state at the given address to the given snapshot. + * The first call on this instance must be to this method, so that + * the register state can be properly sized. + * + * @param address {@code >= 0;} the address + * @param specs {@code non-null;} spec set representing the locals + */ + public void snapshot(int address, RegisterSpecSet specs) { + if (DEBUG) { + System.err.printf("%04x snapshot %s\n", address, specs); + } + + int sz = specs.getMaxSize(); + aboutToProcess(address, sz - 1); + + for (int i = 0; i < sz; i++) { + RegisterSpec oldSpec = regs.get(i); + RegisterSpec newSpec = filterSpec(specs.get(i)); + + if (oldSpec == null) { + if (newSpec != null) { + startLocal(address, newSpec); + } + } else if (newSpec == null) { + endLocal(address, oldSpec); + } else if (! newSpec.equalsUsingSimpleType(oldSpec)) { + endLocal(address, oldSpec); + startLocal(address, newSpec); + } + } + + if (DEBUG) { + System.err.printf("%04x snapshot done\n", address); + } + } + + /** + * Starts a local at the given address. + * + * @param address {@code >= 0;} the address + * @param startedLocal {@code non-null;} spec representing the + * started local + */ + public void startLocal(int address, RegisterSpec startedLocal) { + if (DEBUG) { + System.err.printf("%04x start %s\n", address, startedLocal); + } + + int regNum = startedLocal.getReg(); + + startedLocal = filterSpec(startedLocal); + aboutToProcess(address, regNum); + + RegisterSpec existingLocal = regs.get(regNum); + + if (startedLocal.equalsUsingSimpleType(existingLocal)) { + // Silently ignore a redundant start. + return; + } + + RegisterSpec movedLocal = regs.findMatchingLocal(startedLocal); + if (movedLocal != null) { + /* + * The same variable was moved from one register to another. + * So add an end for its old location. + */ + addOrUpdateEnd(address, Disposition.END_MOVED, movedLocal); + } + + int endAt = endIndices[regNum]; + + if (existingLocal != null) { + /* + * There is an existing (but non-matching) local. + * Add an explicit end for it. + */ + add(address, Disposition.END_REPLACED, existingLocal); + } else if (endAt >= 0) { + /* + * Look for an end local for the same register at the + * same address. If found, then update it or delete + * it, depending on whether or not it represents the + * same variable as the one being started. + */ + Entry endEntry = result.get(endAt); + if (endEntry.getAddress() == address) { + if (endEntry.matches(startedLocal)) { + /* + * There was already an end local for the same + * variable at the same address. This turns + * out to be superfluous, as we are starting + * up the exact same local. This situation can + * happen when a single local variable got + * somehow "split up" during intermediate + * processing. In any case, rather than represent + * the end-then-start, just remove the old end. + */ + result.set(endAt, null); + nullResultCount++; + regs.put(startedLocal); + endIndices[regNum] = -1; + return; + } else { + /* + * There was a different variable ended at the + * same address. Update it to indicate that + * it was ended due to a replacement (rather than + * ending for no particular reason). + */ + endEntry = endEntry.withDisposition( + Disposition.END_REPLACED); + result.set(endAt, endEntry); + } + } + } + + /* + * The code above didn't find and remove an unnecessary + * local end, so we now have to add one or more entries to + * the output to capture the transition. + */ + + /* + * If the local just below (in the register set at reg-1) + * is of category-2, then it is ended by this new start. + */ + if (regNum > 0) { + RegisterSpec justBelow = regs.get(regNum - 1); + if ((justBelow != null) && justBelow.isCategory2()) { + addOrUpdateEnd(address, + Disposition.END_CLOBBERED_BY_NEXT, + justBelow); + } + } + + /* + * Similarly, if this local is category-2, then the local + * just above (if any) is ended by the start now being + * emitted. + */ + if (startedLocal.isCategory2()) { + RegisterSpec justAbove = regs.get(regNum + 1); + if (justAbove != null) { + addOrUpdateEnd(address, + Disposition.END_CLOBBERED_BY_PREV, + justAbove); + } + } + + /* + * TODO: Add an end for the same local in a different reg, + * if any (that is, if the local migrates from vX to vY, + * we should note that as a local end in vX). + */ + + add(address, Disposition.START, startedLocal); + } + + /** + * Ends a local at the given address, using the disposition + * {@code END_SIMPLY}. + * + * @param address {@code >= 0;} the address + * @param endedLocal {@code non-null;} spec representing the + * local being ended + */ + public void endLocal(int address, RegisterSpec endedLocal) { + endLocal(address, endedLocal, Disposition.END_SIMPLY); + } + + /** + * Ends a local at the given address. + * + * @param address {@code >= 0;} the address + * @param endedLocal {@code non-null;} spec representing the + * local being ended + * @param disposition reason for the end + */ + public void endLocal(int address, RegisterSpec endedLocal, + Disposition disposition) { + if (DEBUG) { + System.err.printf("%04x end %s\n", address, endedLocal); + } + + int regNum = endedLocal.getReg(); + + endedLocal = filterSpec(endedLocal); + aboutToProcess(address, regNum); + + int endAt = endIndices[regNum]; + + if (endAt >= 0) { + /* + * The local in the given register is already ended. + * Silently return without adding anything to the result. + */ + return; + } + + // Check for start and end at the same address. + if (checkForEmptyRange(address, endedLocal)) { + return; + } + + add(address, disposition, endedLocal); + } + + /** + * Helper for {@link #endLocal}, which handles the cases where + * and end local is issued at the same address as a start local + * for the same register. If this case is found, then this + * method will remove the start (as the local was never actually + * active), update the {@link #endIndices} to be accurate, and + * if needed update the newly-active end to reflect an altered + * disposition. + * + * @param address {@code >= 0;} the address + * @param endedLocal {@code non-null;} spec representing the + * local being ended + * @return {@code true} iff this method found the case in question + * and adjusted things accordingly + */ + private boolean checkForEmptyRange(int address, + RegisterSpec endedLocal) { + int at = result.size() - 1; + Entry entry; + + // Look for a previous entry at the same address. + for (/*at*/; at >= 0; at--) { + entry = result.get(at); + + if (entry == null) { + continue; + } + + if (entry.getAddress() != address) { + // We didn't find any match at the same address. + return false; + } + + if (entry.matches(endedLocal)) { + break; + } + } + + /* + * In fact, we found that the endedLocal had started at the + * same address, so do all the requisite cleanup. + */ + + regs.remove(endedLocal); + result.set(at, null); + nullResultCount++; + + int regNum = endedLocal.getReg(); + boolean found = false; + entry = null; + + // Now look back further to update where the register ended. + for (at--; at >= 0; at--) { + entry = result.get(at); + + if (entry == null) { + continue; + } + + if (entry.getRegisterSpec().getReg() == regNum) { + found = true; + break; + } + } + + if (found) { + // We found an end for the same register. + endIndices[regNum] = at; + + if (entry.getAddress() == address) { + /* + * It's still the same address, so update the + * disposition. + */ + result.set(at, + entry.withDisposition(Disposition.END_SIMPLY)); + } + } + + return true; + } + + /** + * Converts a given spec into the form acceptable for use in a + * local list. This, in particular, transforms the "known + * null" type into simply {@code Object}. This method needs to + * be called for any spec that is on its way into a locals + * list. + * + *

This isn't necessarily the cleanest way to achieve the + * goal of not representing known nulls in a locals list, but + * it gets the job done.

+ * + * @param orig {@code null-ok;} the original spec + * @return {@code null-ok;} an appropriately modified spec, or the + * original if nothing needs to be done + */ + private static RegisterSpec filterSpec(RegisterSpec orig) { + if ((orig != null) && (orig.getType() == Type.KNOWN_NULL)) { + return orig.withType(Type.OBJECT); + } + + return orig; + } + + /** + * Adds an entry to the result, updating the adjunct tables + * accordingly. + * + * @param address {@code >= 0;} the address + * @param disposition {@code non-null;} the disposition + * @param spec {@code non-null;} spec representing the local + */ + private void add(int address, Disposition disposition, + RegisterSpec spec) { + int regNum = spec.getReg(); + + result.add(new Entry(address, disposition, spec)); + + if (disposition == Disposition.START) { + regs.put(spec); + endIndices[regNum] = -1; + } else { + regs.remove(spec); + endIndices[regNum] = result.size() - 1; + } + } + + /** + * Adds or updates an end local (changing its disposition). If + * this would cause an empty range for a local, this instead + * removes the local entirely. + * + * @param address {@code >= 0;} the address + * @param disposition {@code non-null;} the disposition + * @param spec {@code non-null;} spec representing the local + */ + private void addOrUpdateEnd(int address, Disposition disposition, + RegisterSpec spec) { + if (disposition == Disposition.START) { + throw new RuntimeException("shouldn't happen"); + } + + int regNum = spec.getReg(); + int endAt = endIndices[regNum]; + + if (endAt >= 0) { + // There is a previous end. + Entry endEntry = result.get(endAt); + if ((endEntry.getAddress() == address) && + endEntry.getRegisterSpec().equals(spec)) { + /* + * The end is for the right address and variable, so + * update it. + */ + result.set(endAt, endEntry.withDisposition(disposition)); + regs.remove(spec); // TODO: Is this line superfluous? + return; + } + } + + endLocal(address, spec, disposition); + } + + /** + * Finishes processing altogether and gets the result. + * + * @return {@code non-null;} the result list + */ + public LocalList finish() { + aboutToProcess(Integer.MAX_VALUE, 0); + + int resultSz = result.size(); + int finalSz = resultSz - nullResultCount; + + if (finalSz == 0) { + return EMPTY; + } + + /* + * Collect an array of only the non-null entries, and then + * sort it to get a consistent order for everything: Local + * ends and starts for a given address could come in any + * order, but we want ends before starts as well as + * registers in order (within ends or starts). + */ + + Entry[] resultArr = new Entry[finalSz]; + + if (resultSz == finalSz) { + result.toArray(resultArr); + } else { + int at = 0; + for (Entry e : result) { + if (e != null) { + resultArr[at++] = e; + } + } + } + + Arrays.sort(resultArr); + + LocalList resultList = new LocalList(finalSz); + + for (int i = 0; i < finalSz; i++) { + resultList.set(i, resultArr[i]); + } + + resultList.setImmutable(); + return resultList; + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/LocalSnapshot.java b/dexgen/src/com/android/dexgen/dex/code/LocalSnapshot.java new file mode 100644 index 0000000..81b78c9 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/LocalSnapshot.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.RegisterSpecSet; +import com.android.dexgen.rop.code.SourcePosition; + +/** + * Pseudo-instruction which is used to hold a snapshot of the + * state of local variable name mappings that exists immediately after + * the instance in an instruction array. + */ +public final class LocalSnapshot extends ZeroSizeInsn { + /** {@code non-null;} local state associated with this instance */ + private final RegisterSpecSet locals; + + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + * @param locals {@code non-null;} associated local variable state + */ + public LocalSnapshot(SourcePosition position, RegisterSpecSet locals) { + super(position); + + if (locals == null) { + throw new NullPointerException("locals == null"); + } + + this.locals = locals; + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisterOffset(int delta) { + return new LocalSnapshot(getPosition(), locals.withOffset(delta)); + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new LocalSnapshot(getPosition(), locals); + } + + /** + * Gets the local state associated with this instance. + * + * @return {@code non-null;} the state + */ + public RegisterSpecSet getLocals() { + return locals; + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + return locals.toString(); + } + + /** {@inheritDoc} */ + @Override + protected String listingString0(boolean noteIndices) { + int sz = locals.size(); + int max = locals.getMaxSize(); + StringBuffer sb = new StringBuffer(100 + sz * 40); + + sb.append("local-snapshot"); + + for (int i = 0; i < max; i++) { + RegisterSpec spec = locals.get(i); + if (spec != null) { + sb.append("\n "); + sb.append(LocalStart.localString(spec)); + } + } + + return sb.toString(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/LocalStart.java b/dexgen/src/com/android/dexgen/dex/code/LocalStart.java new file mode 100644 index 0000000..ba426e8 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/LocalStart.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; + +/** + * Pseudo-instruction which is used to introduce a new local variable. That + * is, an instance of this class in an instruction stream indicates that + * starting with the subsequent instruction, the indicated variable + * is bound. + */ +public final class LocalStart extends ZeroSizeInsn { + /** + * {@code non-null;} register spec representing the local variable introduced + * by this instance + */ + private final RegisterSpec local; + + /** + * Returns the local variable listing string for a single register spec. + * + * @param spec {@code non-null;} the spec to convert + * @return {@code non-null;} the string form + */ + public static String localString(RegisterSpec spec) { + return spec.regString() + ' ' + spec.getLocalItem().toString() + ": " + + spec.getTypeBearer().toHuman(); + } + + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + * @param local {@code non-null;} register spec representing the local + * variable introduced by this instance + */ + public LocalStart(SourcePosition position, RegisterSpec local) { + super(position); + + if (local == null) { + throw new NullPointerException("local == null"); + } + + this.local = local; + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisterOffset(int delta) { + return new LocalStart(getPosition(), local.withOffset(delta)); + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new LocalStart(getPosition(), local); + } + + /** + * Gets the register spec representing the local variable introduced + * by this instance. + * + * @return {@code non-null;} the register spec + */ + public RegisterSpec getLocal() { + return local; + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + return local.toString(); + } + + /** {@inheritDoc} */ + @Override + protected String listingString0(boolean noteIndices) { + return "local-start " + localString(local); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/OddSpacer.java b/dexgen/src/com/android/dexgen/dex/code/OddSpacer.java new file mode 100644 index 0000000..8e2bab8 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/OddSpacer.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Pseudo-instruction which either turns into a {@code nop} or + * nothingness, in order to make the subsequent instruction have an + * even address. This is used to align (subsequent) instructions that + * require it. + */ +public final class OddSpacer extends VariableSizeInsn { + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + */ + public OddSpacer(SourcePosition position) { + super(position, RegisterSpecList.EMPTY); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return (getAddress() & 1); + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out) { + if (codeSize() != 0) { + out.writeShort(InsnFormat.codeUnit(DalvOps.NOP, 0)); + } + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new OddSpacer(getPosition()); + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + return null; + } + + /** {@inheritDoc} */ + @Override + protected String listingString0(boolean noteIndices) { + if (codeSize() == 0) { + return null; + } + + return "nop // spacer"; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/OutputCollector.java b/dexgen/src/com/android/dexgen/dex/code/OutputCollector.java new file mode 100644 index 0000000..7f970eb --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/OutputCollector.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import java.util.ArrayList; + +/** + * Destination for {@link DalvInsn} instances being output. This class + * receives and collects instructions in two pieces — a primary + * list and a suffix (generally consisting of adjunct data referred to + * by the primary list, such as switch case tables) — which it + * merges and emits back out in the form of a {@link DalvInsnList} + * instance. + */ +public final class OutputCollector { + /** + * {@code non-null;} the associated finisher (which holds the instruction + * list in-progress) + */ + private final OutputFinisher finisher; + + /** + * {@code null-ok;} suffix for the output, or {@code null} if the suffix + * has been appended to the main output (by {@link #appendSuffixToOutput}) + */ + private ArrayList suffix; + + /** + * Constructs an instance. + * + * @param initialCapacity {@code >= 0;} initial capacity of the output list + * @param suffixInitialCapacity {@code >= 0;} initial capacity of the output + * suffix + * @param regCount {@code >= 0;} register count for the method + */ + public OutputCollector(int initialCapacity, int suffixInitialCapacity, + int regCount) { + this.finisher = new OutputFinisher(initialCapacity, regCount); + this.suffix = new ArrayList(suffixInitialCapacity); + } + + /** + * Adds an instruction to the output. + * + * @param insn {@code non-null;} the instruction to add + */ + public void add(DalvInsn insn) { + finisher.add(insn); + } + + /** + * Reverses a branch which is buried a given number of instructions + * backward in the output. It is illegal to call this unless the + * indicated instruction really is a reversible branch. + * + * @param which how many instructions back to find the branch; + * {@code 0} is the most recently added instruction, + * {@code 1} is the instruction before that, etc. + * @param newTarget {@code non-null;} the new target for the reversed branch + */ + public void reverseBranch(int which, CodeAddress newTarget) { + finisher.reverseBranch(which, newTarget); + } + + /** + * Adds an instruction to the output suffix. + * + * @param insn {@code non-null;} the instruction to add + */ + public void addSuffix(DalvInsn insn) { + suffix.add(insn); + } + + /** + * Gets the results of all the calls on this instance, in the form of + * an {@link OutputFinisher}. + * + * @return {@code non-null;} the output finisher + * @throws UnsupportedOperationException if this method has + * already been called + */ + public OutputFinisher getFinisher() { + if (suffix == null) { + throw new UnsupportedOperationException("already processed"); + } + + appendSuffixToOutput(); + return finisher; + } + + /** + * Helper for {@link #getFinisher}, which appends the suffix to + * the primary output. + */ + private void appendSuffixToOutput() { + int size = suffix.size(); + + for (int i = 0; i < size; i++) { + finisher.add(suffix.get(i)); + } + + suffix = null; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/OutputFinisher.java b/dexgen/src/com/android/dexgen/dex/code/OutputFinisher.java new file mode 100644 index 0000000..98c7e4e --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/OutputFinisher.java @@ -0,0 +1,737 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.LocalItem; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.RegisterSpecSet; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstMemberRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.Type; + +import java.util.ArrayList; +import java.util.HashSet; + +/** + * Processor for instruction lists, which takes a "first cut" of + * instruction selection as a basis and produces a "final cut" in the + * form of a {@link DalvInsnList} instance. + */ +public final class OutputFinisher { + /** + * {@code >= 0;} register count for the method, not including any extra + * "reserved" registers needed to translate "difficult" instructions + */ + private final int unreservedRegCount; + + /** {@code non-null;} the list of instructions, per se */ + private ArrayList insns; + + /** whether any instruction has position info */ + private boolean hasAnyPositionInfo; + + /** whether any instruction has local variable info */ + private boolean hasAnyLocalInfo; + + /** + * {@code >= 0;} the count of reserved registers (low-numbered + * registers used when expanding instructions that can't be + * represented simply); becomes valid after a call to {@link + * #massageInstructions} + */ + private int reservedCount; + + /** + * Constructs an instance. It initially contains no instructions. + * + * @param regCount {@code >= 0;} register count for the method + * @param initialCapacity {@code >= 0;} initial capacity of the instructions + * list + */ + public OutputFinisher(int initialCapacity, int regCount) { + this.unreservedRegCount = regCount; + this.insns = new ArrayList(initialCapacity); + this.reservedCount = -1; + this.hasAnyPositionInfo = false; + this.hasAnyLocalInfo = false; + } + + /** + * Returns whether any of the instructions added to this instance + * come with position info. + * + * @return whether any of the instructions added to this instance + * come with position info + */ + public boolean hasAnyPositionInfo() { + return hasAnyPositionInfo; + } + + /** + * Returns whether this instance has any local variable information. + * + * @return whether this instance has any local variable information + */ + public boolean hasAnyLocalInfo() { + return hasAnyLocalInfo; + } + + /** + * Helper for {@link #add} which scrutinizes a single + * instruction for local variable information. + * + * @param insn {@code non-null;} instruction to scrutinize + * @return {@code true} iff the instruction refers to any + * named locals + */ + private static boolean hasLocalInfo(DalvInsn insn) { + if (insn instanceof LocalSnapshot) { + RegisterSpecSet specs = ((LocalSnapshot) insn).getLocals(); + int size = specs.size(); + for (int i = 0; i < size; i++) { + if (hasLocalInfo(specs.get(i))) { + return true; + } + } + } else if (insn instanceof LocalStart) { + RegisterSpec spec = ((LocalStart) insn).getLocal(); + if (hasLocalInfo(spec)) { + return true; + } + } + + return false; + } + + /** + * Helper for {@link #hasAnyLocalInfo} which scrutinizes a single + * register spec. + * + * @param spec {@code non-null;} spec to scrutinize + * @return {@code true} iff the spec refers to any + * named locals + */ + private static boolean hasLocalInfo(RegisterSpec spec) { + return (spec != null) + && (spec.getLocalItem().getName() != null); + } + + /** + * Returns the set of all constants referred to by instructions added + * to this instance. + * + * @return {@code non-null;} the set of constants + */ + public HashSet getAllConstants() { + HashSet result = new HashSet(20); + + for (DalvInsn insn : insns) { + addConstants(result, insn); + } + + return result; + } + + /** + * Helper for {@link #getAllConstants} which adds all the info for + * a single instruction. + * + * @param result {@code non-null;} result set to add to + * @param insn {@code non-null;} instruction to scrutinize + */ + private static void addConstants(HashSet result, + DalvInsn insn) { + if (insn instanceof CstInsn) { + Constant cst = ((CstInsn) insn).getConstant(); + result.add(cst); + } else if (insn instanceof LocalSnapshot) { + RegisterSpecSet specs = ((LocalSnapshot) insn).getLocals(); + int size = specs.size(); + for (int i = 0; i < size; i++) { + addConstants(result, specs.get(i)); + } + } else if (insn instanceof LocalStart) { + RegisterSpec spec = ((LocalStart) insn).getLocal(); + addConstants(result, spec); + } + } + + /** + * Helper for {@link #getAllConstants} which adds all the info for + * a single {@code RegisterSpec}. + * + * @param result {@code non-null;} result set to add to + * @param spec {@code null-ok;} register spec to add + */ + private static void addConstants(HashSet result, + RegisterSpec spec) { + if (spec == null) { + return; + } + + LocalItem local = spec.getLocalItem(); + CstUtf8 name = local.getName(); + CstUtf8 signature = local.getSignature(); + Type type = spec.getType(); + + if (type != Type.KNOWN_NULL) { + result.add(CstType.intern(type)); + } + + if (name != null) { + result.add(name); + } + + if (signature != null) { + result.add(signature); + } + } + + /** + * Adds an instruction to the output. + * + * @param insn {@code non-null;} the instruction to add + */ + public void add(DalvInsn insn) { + insns.add(insn); + updateInfo(insn); + } + + /** + * Inserts an instruction in the output at the given offset. + * + * @param at {@code >= 0;} what index to insert at + * @param insn {@code non-null;} the instruction to insert + */ + public void insert(int at, DalvInsn insn) { + insns.add(at, insn); + updateInfo(insn); + } + + /** + * Helper for {@link #add} and {@link #insert}, + * which updates the position and local info flags. + * + * @param insn {@code non-null;} an instruction that was just introduced + */ + private void updateInfo(DalvInsn insn) { + if (! hasAnyPositionInfo) { + SourcePosition pos = insn.getPosition(); + if (pos.getLine() >= 0) { + hasAnyPositionInfo = true; + } + } + + if (! hasAnyLocalInfo) { + if (hasLocalInfo(insn)) { + hasAnyLocalInfo = true; + } + } + } + + /** + * Reverses a branch which is buried a given number of instructions + * backward in the output. It is illegal to call this unless the + * indicated instruction really is a reversible branch. + * + * @param which how many instructions back to find the branch; + * {@code 0} is the most recently added instruction, + * {@code 1} is the instruction before that, etc. + * @param newTarget {@code non-null;} the new target for the reversed branch + */ + public void reverseBranch(int which, CodeAddress newTarget) { + int size = insns.size(); + int index = size - which - 1; + TargetInsn targetInsn; + + try { + targetInsn = (TargetInsn) insns.get(index); + } catch (IndexOutOfBoundsException ex) { + // Translate the exception. + throw new IllegalArgumentException("too few instructions"); + } catch (ClassCastException ex) { + // Translate the exception. + throw new IllegalArgumentException("non-reversible instruction"); + } + + /* + * No need to call this.set(), since the format and other info + * are the same. + */ + insns.set(index, targetInsn.withNewTargetAndReversed(newTarget)); + } + + /** + * Assigns indices in all instructions that need them, using the + * given callback to perform lookups. This should be called before + * calling {@link #finishProcessingAndGetList}. + * + * @param callback {@code non-null;} callback object + */ + public void assignIndices(DalvCode.AssignIndicesCallback callback) { + for (DalvInsn insn : insns) { + if (insn instanceof CstInsn) { + assignIndices((CstInsn) insn, callback); + } + } + } + + /** + * Helper for {@link #assignIndices} which does assignment for one + * instruction. + * + * @param insn {@code non-null;} the instruction + * @param callback {@code non-null;} the callback + */ + private static void assignIndices(CstInsn insn, + DalvCode.AssignIndicesCallback callback) { + Constant cst = insn.getConstant(); + int index = callback.getIndex(cst); + + if (index >= 0) { + insn.setIndex(index); + } + + if (cst instanceof CstMemberRef) { + CstMemberRef member = (CstMemberRef) cst; + CstType definer = member.getDefiningClass(); + index = callback.getIndex(definer); + if (index >= 0) { + insn.setClassIndex(index); + } + } + } + + /** + * Does final processing on this instance and gets the output as + * a {@link DalvInsnList}. Final processing consists of: + * + *
    + *
  • optionally renumbering registers (to make room as needed for + * expanded instructions)
  • + *
  • picking a final opcode for each instruction
  • + *
  • rewriting instructions, because of register number, + * constant pool index, or branch target size issues
  • + *
  • assigning final addresses
  • + *
+ * + *

Note: This method may only be called once per instance + * of this class.

+ * + * @return {@code non-null;} the output list + * @throws UnsupportedOperationException if this method has + * already been called + */ + public DalvInsnList finishProcessingAndGetList() { + if (reservedCount >= 0) { + throw new UnsupportedOperationException("already processed"); + } + + InsnFormat[] formats = makeFormatsArray(); + reserveRegisters(formats); + massageInstructions(formats); + assignAddressesAndFixBranches(); + + return DalvInsnList.makeImmutable(insns, + reservedCount + unreservedRegCount); + } + + /** + * Helper for {@link #finishProcessingAndGetList}, which extracts + * the format out of each instruction into a separate array, to be + * further manipulated as things progress. + * + * @return {@code non-null;} the array of formats + */ + private InsnFormat[] makeFormatsArray() { + int size = insns.size(); + InsnFormat[] result = new InsnFormat[size]; + + for (int i = 0; i < size; i++) { + result[i] = insns.get(i).getOpcode().getFormat(); + } + + return result; + } + + /** + * Helper for {@link #finishProcessingAndGetList}, which figures + * out how many reserved registers are required and then reserving + * them. It also updates the given {@code formats} array so + * as to avoid extra work when constructing the massaged + * instruction list. + * + * @param formats {@code non-null;} array of per-instruction format selections + */ + private void reserveRegisters(InsnFormat[] formats) { + int oldReservedCount = (reservedCount < 0) ? 0 : reservedCount; + + /* + * Call calculateReservedCount() and then perform register + * reservation, repeatedly until no new reservations happen. + */ + for (;;) { + int newReservedCount = calculateReservedCount(formats); + if (oldReservedCount >= newReservedCount) { + break; + } + + int reservedDifference = newReservedCount - oldReservedCount; + int size = insns.size(); + + for (int i = 0; i < size; i++) { + /* + * CodeAddress instance identity is used to link + * TargetInsns to their targets, so it is + * inappropriate to make replacements, and they don't + * have registers in any case. Hence, the instanceof + * test below. + */ + DalvInsn insn = insns.get(i); + if (!(insn instanceof CodeAddress)) { + /* + * No need to call this.set() since the format and + * other info are the same. + */ + insns.set(i, insn.withRegisterOffset(reservedDifference)); + } + } + + oldReservedCount = newReservedCount; + } + + reservedCount = oldReservedCount; + } + + /** + * Helper for {@link #reserveRegisters}, which does one + * pass over the instructions, calculating the number of + * registers that need to be reserved. It also updates the + * {@code formats} list to help avoid extra work in future + * register reservation passes. + * + * @param formats {@code non-null;} array of per-instruction format selections + * @return {@code >= 0;} the count of reserved registers + */ + private int calculateReservedCount(InsnFormat[] formats) { + int size = insns.size(); + + /* + * Potential new value of reservedCount, which gets updated in the + * following loop. It starts out with the existing reservedCount + * and gets increased if it turns out that additional registers + * need to be reserved. + */ + int newReservedCount = reservedCount; + + for (int i = 0; i < size; i++) { + DalvInsn insn = insns.get(i); + InsnFormat originalFormat = formats[i]; + InsnFormat newFormat = findFormatForInsn(insn, originalFormat); + + if (originalFormat == newFormat) { + continue; + } + + if (newFormat == null) { + /* + * The instruction will need to be expanded, so reserve + * registers for it. + */ + int reserve = insn.getMinimumRegisterRequirement(); + if (reserve > newReservedCount) { + newReservedCount = reserve; + } + } + + formats[i] = newFormat; + } + + return newReservedCount; + } + + /** + * Attempts to fit the given instruction into a format, returning + * either a format that the instruction fits into or {@code null} + * to indicate that the instruction will need to be expanded. This + * fitting process starts with the given format as a first "best + * guess" and then pessimizes from there if necessary. + * + * @param insn {@code non-null;} the instruction in question + * @param format {@code null-ok;} the current guess as to the best instruction + * format to use; {@code null} means that no simple format fits + * @return {@code null-ok;} a possibly-different format, which is either a + * good fit or {@code null} to indicate that no simple format + * fits + */ + private InsnFormat findFormatForInsn(DalvInsn insn, InsnFormat format) { + if (format == null) { + // The instruction is already known not to fit any simple format. + return format; + } + + if (format.isCompatible(insn)) { + // The instruction already fits in the current best-known format. + return format; + } + + Dop dop = insn.getOpcode(); + int family = dop.getFamily(); + + for (;;) { + format = format.nextUp(); + if ((format == null) || + (format.isCompatible(insn) && + (Dops.getOrNull(family, format) != null))) { + break; + } + } + + return format; + } + + /** + * Helper for {@link #finishProcessingAndGetList}, which goes + * through each instruction in the output, making sure its opcode + * can accomodate its arguments. In cases where the opcode is + * unable to do so, this replaces the instruction with a larger + * instruction with identical semantics that will work. + * + *

This method may also reserve a number of low-numbered + * registers, renumbering the instructions' original registers, in + * order to have register space available in which to move + * very-high registers when expanding instructions into + * multi-instruction sequences. This expansion is done when no + * simple instruction format can be found for a given instruction that + * is able to accomodate that instruction's registers.

+ * + *

This method ignores issues of branch target size, since + * final addresses aren't known at the point that this method is + * called.

+ * + * @param formats {@code non-null;} array of per-instruction format selections + */ + private void massageInstructions(InsnFormat[] formats) { + if (reservedCount == 0) { + /* + * The easy common case: No registers were reserved, so we + * merely need to replace any instructions whose format changed + * during the reservation pass, but all instructions will stay + * at their original indices, and the instruction list doesn't + * grow. + */ + int size = insns.size(); + + for (int i = 0; i < size; i++) { + DalvInsn insn = insns.get(i); + Dop dop = insn.getOpcode(); + InsnFormat format = formats[i]; + + if (format != dop.getFormat()) { + dop = Dops.getOrNull(dop.getFamily(), format); + insns.set(i, insn.withOpcode(dop)); + } + } + } else { + /* + * The difficult uncommon case: Some instructions have to be + * expanded to deal with high registers. + */ + insns = performExpansion(formats); + } + } + + /** + * Helper for {@link #massageInstructions}, which constructs a + * replacement list, where each {link DalvInsn} instance that + * couldn't be represented simply (due to register representation + * problems) is expanded into a series of instances that together + * perform the proper function. + * + * @param formats {@code non-null;} array of per-instruction format selections + * @return {@code non-null;} the replacement list + */ + private ArrayList performExpansion(InsnFormat[] formats) { + int size = insns.size(); + ArrayList result = new ArrayList(size * 2); + + for (int i = 0; i < size; i++) { + DalvInsn insn = insns.get(i); + Dop dop = insn.getOpcode(); + InsnFormat originalFormat = dop.getFormat(); + InsnFormat currentFormat = formats[i]; + DalvInsn prefix; + DalvInsn suffix; + + if (currentFormat != null) { + // No expansion is necessary. + prefix = null; + suffix = null; + } else { + // Expansion is required. + prefix = insn.hrPrefix(); + suffix = insn.hrSuffix(); + + /* + * Get the initial guess as to the hr version, but then + * let findFormatForInsn() pick a better format, if any. + */ + insn = insn.hrVersion(); + originalFormat = insn.getOpcode().getFormat(); + currentFormat = findFormatForInsn(insn, originalFormat); + } + + if (prefix != null) { + result.add(prefix); + } + + if (currentFormat != originalFormat) { + dop = Dops.getOrNull(dop.getFamily(), currentFormat); + insn = insn.withOpcode(dop); + } + result.add(insn); + + if (suffix != null) { + result.add(suffix); + } + } + + return result; + } + + /** + * Helper for {@link #finishProcessingAndGetList}, which assigns + * addresses to each instruction, possibly rewriting branches to + * fix ones that wouldn't otherwise be able to reach their + * targets. + */ + private void assignAddressesAndFixBranches() { + for (;;) { + assignAddresses(); + if (!fixBranches()) { + break; + } + } + } + + /** + * Helper for {@link #assignAddressesAndFixBranches}, which + * assigns an address to each instruction, in order. + */ + private void assignAddresses() { + int address = 0; + int size = insns.size(); + + for (int i = 0; i < size; i++) { + DalvInsn insn = insns.get(i); + insn.setAddress(address); + address += insn.codeSize(); + } + } + + /** + * Helper for {@link #assignAddressesAndFixBranches}, which checks + * the branch target size requirement of each branch instruction + * to make sure it fits. For instructions that don't fit, this + * rewrites them to use a {@code goto} of some sort. In the + * case of a conditional branch that doesn't fit, the sense of the + * test is reversed in order to branch around a {@code goto} + * to the original target. + * + * @return whether any branches had to be fixed + */ + private boolean fixBranches() { + int size = insns.size(); + boolean anyFixed = false; + + for (int i = 0; i < size; i++) { + DalvInsn insn = insns.get(i); + if (!(insn instanceof TargetInsn)) { + // This loop only needs to inspect TargetInsns. + continue; + } + + Dop dop = insn.getOpcode(); + InsnFormat format = dop.getFormat(); + TargetInsn target = (TargetInsn) insn; + + if (format.branchFits(target)) { + continue; + } + + if (dop.getFamily() == DalvOps.GOTO) { + // It is a goto; widen it if possible. + InsnFormat newFormat = findFormatForInsn(insn, format); + if (newFormat == null) { + /* + * The branch is already maximally large. This should + * only be possible if a method somehow manages to have + * more than 2^31 code units. + */ + throw new UnsupportedOperationException("method too long"); + } + dop = Dops.getOrNull(dop.getFamily(), newFormat); + insn = insn.withOpcode(dop); + insns.set(i, insn); + } else { + /* + * It is a conditional: Reverse its sense, and arrange for + * it to branch around an absolute goto to the original + * branch target. + * + * Note: An invariant of the list being processed is + * that every TargetInsn is followed by a CodeAddress. + * Hence, it is always safe to get the next element + * after a TargetInsn and cast it to CodeAddress, as + * is happening a few lines down. + * + * Also note: Size gets incremented by one here, as we + * have -- in the net -- added one additional element + * to the list, so we increment i to match. The added + * and changed elements will be inspected by a repeat + * call to this method after this invocation returns. + */ + CodeAddress newTarget; + try { + newTarget = (CodeAddress) insns.get(i + 1); + } catch (IndexOutOfBoundsException ex) { + // The TargetInsn / CodeAddress invariant was violated. + throw new IllegalStateException( + "unpaired TargetInsn (dangling)"); + } catch (ClassCastException ex) { + // The TargetInsn / CodeAddress invariant was violated. + throw new IllegalStateException("unpaired TargetInsn"); + } + TargetInsn gotoInsn = + new TargetInsn(Dops.GOTO, target.getPosition(), + RegisterSpecList.EMPTY, target.getTarget()); + insns.set(i, gotoInsn); + insns.add(i, target.withNewTargetAndReversed(newTarget)); + size++; + i++; + } + + anyFixed = true; + } + + return anyFixed; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/PositionList.java b/dexgen/src/com/android/dexgen/dex/code/PositionList.java new file mode 100644 index 0000000..8b52f26 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/PositionList.java @@ -0,0 +1,192 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.util.FixedSizeList; + +/** + * List of source position entries. This class includes a utility + * method to extract an instance out of a {@link DalvInsnList}. + */ +public final class PositionList extends FixedSizeList { + /** {@code non-null;} empty instance */ + public static final PositionList EMPTY = new PositionList(0); + + /** + * constant for {@link #make} to indicate that no actual position + * information should be returned + */ + public static final int NONE = 1; + + /** + * constant for {@link #make} to indicate that only line number + * transitions should be returned + */ + public static final int LINES = 2; + + /** + * constant for {@link #make} to indicate that only "important" position + * information should be returned. This includes block starts and + * instructions that might throw. + */ + public static final int IMPORTANT = 3; + + /** + * Extracts and returns the source position information out of an + * instruction list. + * + * @param insns {@code non-null;} instructions to convert + * @param howMuch how much information should be included; one of the + * static constants defined by this class + * @return {@code non-null;} the positions list + */ + public static PositionList make(DalvInsnList insns, int howMuch) { + switch (howMuch) { + case NONE: { + return EMPTY; + } + case LINES: + case IMPORTANT: { + // Valid. + break; + } + default: { + throw new IllegalArgumentException("bogus howMuch"); + } + } + + SourcePosition noInfo = SourcePosition.NO_INFO; + SourcePosition cur = noInfo; + int sz = insns.size(); + PositionList.Entry[] arr = new PositionList.Entry[sz]; + boolean lastWasTarget = false; + int at = 0; + + for (int i = 0; i < sz; i++) { + DalvInsn insn = insns.get(i); + + if (insn instanceof CodeAddress) { + lastWasTarget = true;; + continue; + } + + SourcePosition pos = insn.getPosition(); + + if (pos.equals(noInfo) || pos.sameLine(cur)) { + continue; + } + + if ((howMuch == IMPORTANT) && !lastWasTarget) { + continue; + } + + cur = pos; + arr[at] = new PositionList.Entry(insn.getAddress(), pos); + at++; + + lastWasTarget = false; + } + + PositionList result = new PositionList(at); + for (int i = 0; i < at; i++) { + result.set(i, arr[i]); + } + + result.setImmutable(); + return result; + } + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size {@code >= 0;} the size of the list + */ + public PositionList(int size) { + super(size); + } + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public Entry get(int n) { + return (Entry) get0(n); + } + + /** + * Sets the entry at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param entry {@code non-null;} the entry to set at {@code n} + */ + public void set(int n, Entry entry) { + set0(n, entry); + } + + /** + * Entry in a position list. + */ + public static class Entry { + /** {@code >= 0;} address of this entry */ + private final int address; + + /** {@code non-null;} corresponding source position information */ + private final SourcePosition position; + + /** + * Constructs an instance. + * + * @param address {@code >= 0;} address of this entry + * @param position {@code non-null;} corresponding source position information + */ + public Entry (int address, SourcePosition position) { + if (address < 0) { + throw new IllegalArgumentException("address < 0"); + } + + if (position == null) { + throw new NullPointerException("position == null"); + } + + this.address = address; + this.position = position; + } + + /** + * Gets the address. + * + * @return {@code >= 0;} the address + */ + public int getAddress() { + return address; + } + + /** + * Gets the source position information. + * + * @return {@code non-null;} the position information + */ + public SourcePosition getPosition() { + return position; + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/RopToDop.java b/dexgen/src/com/android/dexgen/dex/code/RopToDop.java new file mode 100644 index 0000000..03d1de8 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/RopToDop.java @@ -0,0 +1,415 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.Insn; +import com.android.dexgen.rop.code.RegOps; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.Rop; +import com.android.dexgen.rop.code.Rops; +import com.android.dexgen.rop.code.ThrowingCstInsn; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.Type; + +import java.util.HashMap; + +/** + * Translator from rop-level {@link Insn} instances to corresponding + * {@link Dop} instances. + */ +public final class RopToDop { + /** {@code non-null;} map from all the common rops to dalvik opcodes */ + private static final HashMap MAP; + + /** + * This class is uninstantiable. + */ + private RopToDop() { + // This space intentionally left blank. + } + + static { + /* + * Note: The choices made here are to pick the optimistically + * smallest Dalvik opcode, and leave it to later processing to + * pessimize. + */ + MAP = new HashMap(400); + MAP.put(Rops.NOP, Dops.NOP); + MAP.put(Rops.MOVE_INT, Dops.MOVE); + MAP.put(Rops.MOVE_LONG, Dops.MOVE_WIDE); + MAP.put(Rops.MOVE_FLOAT, Dops.MOVE); + MAP.put(Rops.MOVE_DOUBLE, Dops.MOVE_WIDE); + MAP.put(Rops.MOVE_OBJECT, Dops.MOVE_OBJECT); + MAP.put(Rops.MOVE_PARAM_INT, Dops.MOVE); + MAP.put(Rops.MOVE_PARAM_LONG, Dops.MOVE_WIDE); + MAP.put(Rops.MOVE_PARAM_FLOAT, Dops.MOVE); + MAP.put(Rops.MOVE_PARAM_DOUBLE, Dops.MOVE_WIDE); + MAP.put(Rops.MOVE_PARAM_OBJECT, Dops.MOVE_OBJECT); + + /* + * Note: No entry for MOVE_EXCEPTION, since it varies by + * exception type. (That is, there is no unique instance to + * add to the map.) + */ + + MAP.put(Rops.CONST_INT, Dops.CONST_4); + MAP.put(Rops.CONST_LONG, Dops.CONST_WIDE_16); + MAP.put(Rops.CONST_FLOAT, Dops.CONST_4); + MAP.put(Rops.CONST_DOUBLE, Dops.CONST_WIDE_16); + + /* + * Note: No entry for CONST_OBJECT, since it needs to turn + * into either CONST_STRING or CONST_CLASS. + */ + + /* + * TODO: I think the only case of this is for null, and + * const/4 should cover that. + */ + MAP.put(Rops.CONST_OBJECT_NOTHROW, Dops.CONST_4); + + MAP.put(Rops.GOTO, Dops.GOTO); + MAP.put(Rops.IF_EQZ_INT, Dops.IF_EQZ); + MAP.put(Rops.IF_NEZ_INT, Dops.IF_NEZ); + MAP.put(Rops.IF_LTZ_INT, Dops.IF_LTZ); + MAP.put(Rops.IF_GEZ_INT, Dops.IF_GEZ); + MAP.put(Rops.IF_LEZ_INT, Dops.IF_LEZ); + MAP.put(Rops.IF_GTZ_INT, Dops.IF_GTZ); + MAP.put(Rops.IF_EQZ_OBJECT, Dops.IF_EQZ); + MAP.put(Rops.IF_NEZ_OBJECT, Dops.IF_NEZ); + MAP.put(Rops.IF_EQ_INT, Dops.IF_EQ); + MAP.put(Rops.IF_NE_INT, Dops.IF_NE); + MAP.put(Rops.IF_LT_INT, Dops.IF_LT); + MAP.put(Rops.IF_GE_INT, Dops.IF_GE); + MAP.put(Rops.IF_LE_INT, Dops.IF_LE); + MAP.put(Rops.IF_GT_INT, Dops.IF_GT); + MAP.put(Rops.IF_EQ_OBJECT, Dops.IF_EQ); + MAP.put(Rops.IF_NE_OBJECT, Dops.IF_NE); + MAP.put(Rops.SWITCH, Dops.SPARSE_SWITCH); + MAP.put(Rops.ADD_INT, Dops.ADD_INT_2ADDR); + MAP.put(Rops.ADD_LONG, Dops.ADD_LONG_2ADDR); + MAP.put(Rops.ADD_FLOAT, Dops.ADD_FLOAT_2ADDR); + MAP.put(Rops.ADD_DOUBLE, Dops.ADD_DOUBLE_2ADDR); + MAP.put(Rops.SUB_INT, Dops.SUB_INT_2ADDR); + MAP.put(Rops.SUB_LONG, Dops.SUB_LONG_2ADDR); + MAP.put(Rops.SUB_FLOAT, Dops.SUB_FLOAT_2ADDR); + MAP.put(Rops.SUB_DOUBLE, Dops.SUB_DOUBLE_2ADDR); + MAP.put(Rops.MUL_INT, Dops.MUL_INT_2ADDR); + MAP.put(Rops.MUL_LONG, Dops.MUL_LONG_2ADDR); + MAP.put(Rops.MUL_FLOAT, Dops.MUL_FLOAT_2ADDR); + MAP.put(Rops.MUL_DOUBLE, Dops.MUL_DOUBLE_2ADDR); + MAP.put(Rops.DIV_INT, Dops.DIV_INT_2ADDR); + MAP.put(Rops.DIV_LONG, Dops.DIV_LONG_2ADDR); + MAP.put(Rops.DIV_FLOAT, Dops.DIV_FLOAT_2ADDR); + MAP.put(Rops.DIV_DOUBLE, Dops.DIV_DOUBLE_2ADDR); + MAP.put(Rops.REM_INT, Dops.REM_INT_2ADDR); + MAP.put(Rops.REM_LONG, Dops.REM_LONG_2ADDR); + MAP.put(Rops.REM_FLOAT, Dops.REM_FLOAT_2ADDR); + MAP.put(Rops.REM_DOUBLE, Dops.REM_DOUBLE_2ADDR); + MAP.put(Rops.NEG_INT, Dops.NEG_INT); + MAP.put(Rops.NEG_LONG, Dops.NEG_LONG); + MAP.put(Rops.NEG_FLOAT, Dops.NEG_FLOAT); + MAP.put(Rops.NEG_DOUBLE, Dops.NEG_DOUBLE); + MAP.put(Rops.AND_INT, Dops.AND_INT_2ADDR); + MAP.put(Rops.AND_LONG, Dops.AND_LONG_2ADDR); + MAP.put(Rops.OR_INT, Dops.OR_INT_2ADDR); + MAP.put(Rops.OR_LONG, Dops.OR_LONG_2ADDR); + MAP.put(Rops.XOR_INT, Dops.XOR_INT_2ADDR); + MAP.put(Rops.XOR_LONG, Dops.XOR_LONG_2ADDR); + MAP.put(Rops.SHL_INT, Dops.SHL_INT_2ADDR); + MAP.put(Rops.SHL_LONG, Dops.SHL_LONG_2ADDR); + MAP.put(Rops.SHR_INT, Dops.SHR_INT_2ADDR); + MAP.put(Rops.SHR_LONG, Dops.SHR_LONG_2ADDR); + MAP.put(Rops.USHR_INT, Dops.USHR_INT_2ADDR); + MAP.put(Rops.USHR_LONG, Dops.USHR_LONG_2ADDR); + MAP.put(Rops.NOT_INT, Dops.NOT_INT); + MAP.put(Rops.NOT_LONG, Dops.NOT_LONG); + + MAP.put(Rops.ADD_CONST_INT, Dops.ADD_INT_LIT8); + // Note: No dalvik ops for other types of add_const. + + /* + * Note: No dalvik ops for any type of sub_const; there's a + * *reverse* sub (constant - reg) for ints, though, but that + * should end up getting handled at optimization time. + */ + + MAP.put(Rops.MUL_CONST_INT, Dops.MUL_INT_LIT8); + // Note: No dalvik ops for other types of mul_const. + + MAP.put(Rops.DIV_CONST_INT, Dops.DIV_INT_LIT8); + // Note: No dalvik ops for other types of div_const. + + MAP.put(Rops.REM_CONST_INT, Dops.REM_INT_LIT8); + // Note: No dalvik ops for other types of rem_const. + + MAP.put(Rops.AND_CONST_INT, Dops.AND_INT_LIT8); + // Note: No dalvik op for and_const_long. + + MAP.put(Rops.OR_CONST_INT, Dops.OR_INT_LIT8); + // Note: No dalvik op for or_const_long. + + MAP.put(Rops.XOR_CONST_INT, Dops.XOR_INT_LIT8); + // Note: No dalvik op for xor_const_long. + + MAP.put(Rops.SHL_CONST_INT, Dops.SHL_INT_LIT8); + // Note: No dalvik op for shl_const_long. + + MAP.put(Rops.SHR_CONST_INT, Dops.SHR_INT_LIT8); + // Note: No dalvik op for shr_const_long. + + MAP.put(Rops.USHR_CONST_INT, Dops.USHR_INT_LIT8); + // Note: No dalvik op for shr_const_long. + + MAP.put(Rops.CMPL_LONG, Dops.CMP_LONG); + MAP.put(Rops.CMPL_FLOAT, Dops.CMPL_FLOAT); + MAP.put(Rops.CMPL_DOUBLE, Dops.CMPL_DOUBLE); + MAP.put(Rops.CMPG_FLOAT, Dops.CMPG_FLOAT); + MAP.put(Rops.CMPG_DOUBLE, Dops.CMPG_DOUBLE); + MAP.put(Rops.CONV_L2I, Dops.LONG_TO_INT); + MAP.put(Rops.CONV_F2I, Dops.FLOAT_TO_INT); + MAP.put(Rops.CONV_D2I, Dops.DOUBLE_TO_INT); + MAP.put(Rops.CONV_I2L, Dops.INT_TO_LONG); + MAP.put(Rops.CONV_F2L, Dops.FLOAT_TO_LONG); + MAP.put(Rops.CONV_D2L, Dops.DOUBLE_TO_LONG); + MAP.put(Rops.CONV_I2F, Dops.INT_TO_FLOAT); + MAP.put(Rops.CONV_L2F, Dops.LONG_TO_FLOAT); + MAP.put(Rops.CONV_D2F, Dops.DOUBLE_TO_FLOAT); + MAP.put(Rops.CONV_I2D, Dops.INT_TO_DOUBLE); + MAP.put(Rops.CONV_L2D, Dops.LONG_TO_DOUBLE); + MAP.put(Rops.CONV_F2D, Dops.FLOAT_TO_DOUBLE); + MAP.put(Rops.TO_BYTE, Dops.INT_TO_BYTE); + MAP.put(Rops.TO_CHAR, Dops.INT_TO_CHAR); + MAP.put(Rops.TO_SHORT, Dops.INT_TO_SHORT); + MAP.put(Rops.RETURN_VOID, Dops.RETURN_VOID); + MAP.put(Rops.RETURN_INT, Dops.RETURN); + MAP.put(Rops.RETURN_LONG, Dops.RETURN_WIDE); + MAP.put(Rops.RETURN_FLOAT, Dops.RETURN); + MAP.put(Rops.RETURN_DOUBLE, Dops.RETURN_WIDE); + MAP.put(Rops.RETURN_OBJECT, Dops.RETURN_OBJECT); + MAP.put(Rops.ARRAY_LENGTH, Dops.ARRAY_LENGTH); + MAP.put(Rops.THROW, Dops.THROW); + MAP.put(Rops.MONITOR_ENTER, Dops.MONITOR_ENTER); + MAP.put(Rops.MONITOR_EXIT, Dops.MONITOR_EXIT); + MAP.put(Rops.AGET_INT, Dops.AGET); + MAP.put(Rops.AGET_LONG, Dops.AGET_WIDE); + MAP.put(Rops.AGET_FLOAT, Dops.AGET); + MAP.put(Rops.AGET_DOUBLE, Dops.AGET_WIDE); + MAP.put(Rops.AGET_OBJECT, Dops.AGET_OBJECT); + MAP.put(Rops.AGET_BOOLEAN, Dops.AGET_BOOLEAN); + MAP.put(Rops.AGET_BYTE, Dops.AGET_BYTE); + MAP.put(Rops.AGET_CHAR, Dops.AGET_CHAR); + MAP.put(Rops.AGET_SHORT, Dops.AGET_SHORT); + MAP.put(Rops.APUT_INT, Dops.APUT); + MAP.put(Rops.APUT_LONG, Dops.APUT_WIDE); + MAP.put(Rops.APUT_FLOAT, Dops.APUT); + MAP.put(Rops.APUT_DOUBLE, Dops.APUT_WIDE); + MAP.put(Rops.APUT_OBJECT, Dops.APUT_OBJECT); + MAP.put(Rops.APUT_BOOLEAN, Dops.APUT_BOOLEAN); + MAP.put(Rops.APUT_BYTE, Dops.APUT_BYTE); + MAP.put(Rops.APUT_CHAR, Dops.APUT_CHAR); + MAP.put(Rops.APUT_SHORT, Dops.APUT_SHORT); + MAP.put(Rops.NEW_INSTANCE, Dops.NEW_INSTANCE); + MAP.put(Rops.CHECK_CAST, Dops.CHECK_CAST); + MAP.put(Rops.INSTANCE_OF, Dops.INSTANCE_OF); + + MAP.put(Rops.GET_FIELD_LONG, Dops.IGET_WIDE); + MAP.put(Rops.GET_FIELD_FLOAT, Dops.IGET); + MAP.put(Rops.GET_FIELD_DOUBLE, Dops.IGET_WIDE); + MAP.put(Rops.GET_FIELD_OBJECT, Dops.IGET_OBJECT); + /* + * Note: No map entries for get_field_* for non-long integral types, + * since they need to be handled specially (see dopFor() below). + */ + + MAP.put(Rops.GET_STATIC_LONG, Dops.SGET_WIDE); + MAP.put(Rops.GET_STATIC_FLOAT, Dops.SGET); + MAP.put(Rops.GET_STATIC_DOUBLE, Dops.SGET_WIDE); + MAP.put(Rops.GET_STATIC_OBJECT, Dops.SGET_OBJECT); + /* + * Note: No map entries for get_static* for non-long integral types, + * since they need to be handled specially (see dopFor() below). + */ + + MAP.put(Rops.PUT_FIELD_LONG, Dops.IPUT_WIDE); + MAP.put(Rops.PUT_FIELD_FLOAT, Dops.IPUT); + MAP.put(Rops.PUT_FIELD_DOUBLE, Dops.IPUT_WIDE); + MAP.put(Rops.PUT_FIELD_OBJECT, Dops.IPUT_OBJECT); + /* + * Note: No map entries for put_field_* for non-long integral types, + * since they need to be handled specially (see dopFor() below). + */ + + MAP.put(Rops.PUT_STATIC_LONG, Dops.SPUT_WIDE); + MAP.put(Rops.PUT_STATIC_FLOAT, Dops.SPUT); + MAP.put(Rops.PUT_STATIC_DOUBLE, Dops.SPUT_WIDE); + MAP.put(Rops.PUT_STATIC_OBJECT, Dops.SPUT_OBJECT); + /* + * Note: No map entries for put_static* for non-long integral types, + * since they need to be handled specially (see dopFor() below). + */ + + /* + * Note: No map entries for invoke*, new_array, and + * filled_new_array, since they need to be handled specially + * (see dopFor() below). + */ + } + + /** + * Returns the dalvik opcode appropriate for the given register-based + * instruction. + * + * @param insn {@code non-null;} the original instruction + * @return the corresponding dalvik opcode; one of the constants in + * {@link Dops} + */ + public static Dop dopFor(Insn insn) { + Rop rop = insn.getOpcode(); + + /* + * First, just try looking up the rop in the MAP of easy + * cases. + */ + Dop result = MAP.get(rop); + if (result != null) { + return result; + } + + /* + * There was no easy case for the rop, so look up the opcode, and + * do something special for each: + * + * The move_exception, new_array, filled_new_array, and + * invoke* opcodes won't be found in MAP, since they'll each + * have different source and/or result register types / lists. + * + * The get* and put* opcodes for (non-long) integral types + * aren't in the map, since the type signatures aren't + * sufficient to distinguish between the types (the salient + * source or result will always be just "int"). + * + * And const instruction need to distinguish between strings and + * classes. + */ + + switch (rop.getOpcode()) { + case RegOps.MOVE_EXCEPTION: return Dops.MOVE_EXCEPTION; + case RegOps.INVOKE_STATIC: return Dops.INVOKE_STATIC; + case RegOps.INVOKE_VIRTUAL: return Dops.INVOKE_VIRTUAL; + case RegOps.INVOKE_SUPER: return Dops.INVOKE_SUPER; + case RegOps.INVOKE_DIRECT: return Dops.INVOKE_DIRECT; + case RegOps.INVOKE_INTERFACE: return Dops.INVOKE_INTERFACE; + case RegOps.NEW_ARRAY: return Dops.NEW_ARRAY; + case RegOps.FILLED_NEW_ARRAY: return Dops.FILLED_NEW_ARRAY; + case RegOps.FILL_ARRAY_DATA: return Dops.FILL_ARRAY_DATA; + case RegOps.MOVE_RESULT: { + RegisterSpec resultReg = insn.getResult(); + + if (resultReg == null) { + return Dops.NOP; + } else { + switch (resultReg.getBasicType()) { + case Type.BT_INT: + case Type.BT_FLOAT: + case Type.BT_BOOLEAN: + case Type.BT_BYTE: + case Type.BT_CHAR: + case Type.BT_SHORT: + return Dops.MOVE_RESULT; + case Type.BT_LONG: + case Type.BT_DOUBLE: + return Dops.MOVE_RESULT_WIDE; + case Type.BT_OBJECT: + return Dops.MOVE_RESULT_OBJECT; + default: { + throw new RuntimeException("Unexpected basic type"); + } + } + } + } + + case RegOps.GET_FIELD: { + CstFieldRef ref = + (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); + int basicType = ref.getBasicType(); + switch (basicType) { + case Type.BT_BOOLEAN: return Dops.IGET_BOOLEAN; + case Type.BT_BYTE: return Dops.IGET_BYTE; + case Type.BT_CHAR: return Dops.IGET_CHAR; + case Type.BT_SHORT: return Dops.IGET_SHORT; + case Type.BT_INT: return Dops.IGET; + } + break; + } + case RegOps.PUT_FIELD: { + CstFieldRef ref = + (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); + int basicType = ref.getBasicType(); + switch (basicType) { + case Type.BT_BOOLEAN: return Dops.IPUT_BOOLEAN; + case Type.BT_BYTE: return Dops.IPUT_BYTE; + case Type.BT_CHAR: return Dops.IPUT_CHAR; + case Type.BT_SHORT: return Dops.IPUT_SHORT; + case Type.BT_INT: return Dops.IPUT; + } + break; + } + case RegOps.GET_STATIC: { + CstFieldRef ref = + (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); + int basicType = ref.getBasicType(); + switch (basicType) { + case Type.BT_BOOLEAN: return Dops.SGET_BOOLEAN; + case Type.BT_BYTE: return Dops.SGET_BYTE; + case Type.BT_CHAR: return Dops.SGET_CHAR; + case Type.BT_SHORT: return Dops.SGET_SHORT; + case Type.BT_INT: return Dops.SGET; + } + break; + } + case RegOps.PUT_STATIC: { + CstFieldRef ref = + (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); + int basicType = ref.getBasicType(); + switch (basicType) { + case Type.BT_BOOLEAN: return Dops.SPUT_BOOLEAN; + case Type.BT_BYTE: return Dops.SPUT_BYTE; + case Type.BT_CHAR: return Dops.SPUT_CHAR; + case Type.BT_SHORT: return Dops.SPUT_SHORT; + case Type.BT_INT: return Dops.SPUT; + } + break; + } + case RegOps.CONST: { + Constant cst = ((ThrowingCstInsn) insn).getConstant(); + if (cst instanceof CstType) { + return Dops.CONST_CLASS; + } else if (cst instanceof CstString) { + return Dops.CONST_STRING; + } + break; + } + } + + throw new RuntimeException("unknown rop: " + rop); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/RopTranslator.java b/dexgen/src/com/android/dexgen/dex/code/RopTranslator.java new file mode 100644 index 0000000..ad05f2b --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/RopTranslator.java @@ -0,0 +1,872 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.BasicBlock; +import com.android.dexgen.rop.code.BasicBlockList; +import com.android.dexgen.rop.code.FillArrayDataInsn; +import com.android.dexgen.rop.code.Insn; +import com.android.dexgen.rop.code.LocalVariableInfo; +import com.android.dexgen.rop.code.PlainCstInsn; +import com.android.dexgen.rop.code.PlainInsn; +import com.android.dexgen.rop.code.RegOps; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.RegisterSpecSet; +import com.android.dexgen.rop.code.Rop; +import com.android.dexgen.rop.code.RopMethod; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.rop.code.SwitchInsn; +import com.android.dexgen.rop.code.ThrowingCstInsn; +import com.android.dexgen.rop.code.ThrowingInsn; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstInteger; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.Bits; +import com.android.dexgen.util.IntList; + +import java.util.ArrayList; + +/** + * Translator from {@link RopMethod} to {@link DalvCode}. The {@link + * #translate} method is the thing to call on this class. + */ +public final class RopTranslator { + /** {@code non-null;} method to translate */ + private final RopMethod method; + + /** + * how much position info to preserve; one of the static + * constants in {@link PositionList} + */ + private final int positionInfo; + + /** {@code null-ok;} local variable info to use */ + private final LocalVariableInfo locals; + + /** {@code non-null;} container for all the address objects for the method */ + private final BlockAddresses addresses; + + /** {@code non-null;} list of output instructions in-progress */ + private final OutputCollector output; + + /** {@code non-null;} visitor to use during translation */ + private final TranslationVisitor translationVisitor; + + /** {@code >= 0;} register count for the method */ + private final int regCount; + + /** {@code null-ok;} block output order; becomes non-null in {@link #pickOrder} */ + private int[] order; + + /** size, in register units, of all the parameters to this method */ + private final int paramSize; + + /** + * true if the parameters to this method happen to be in proper order + * at the end of the frame (as the optimizer emits them) + */ + private boolean paramsAreInOrder; + + /** + * Translates a {@link RopMethod}. This may modify the given + * input. + * + * @param method {@code non-null;} the original method + * @param positionInfo how much position info to preserve; one of the + * static constants in {@link PositionList} + * @param locals {@code null-ok;} local variable information to use + * @param paramSize size, in register units, of all the parameters to + * this method + * @return {@code non-null;} the translated version + */ + public static DalvCode translate(RopMethod method, int positionInfo, + LocalVariableInfo locals, int paramSize) { + RopTranslator translator = + new RopTranslator(method, positionInfo, locals, + paramSize); + return translator.translateAndGetResult(); + } + + /** + * Constructs an instance. This method is private. Use {@link #translate}. + * + * @param method {@code non-null;} the original method + * @param positionInfo how much position info to preserve; one of the + * static constants in {@link PositionList} + * @param locals {@code null-ok;} local variable information to use + * @param paramSize size, in register units, of all the parameters to + * this method + */ + private RopTranslator(RopMethod method, int positionInfo, + LocalVariableInfo locals, int paramSize) { + this.method = method; + this.positionInfo = positionInfo; + this.locals = locals; + this.addresses = new BlockAddresses(method); + this.paramSize = paramSize; + this.order = null; + this.paramsAreInOrder = calculateParamsAreInOrder(method, paramSize); + + BasicBlockList blocks = method.getBlocks(); + int bsz = blocks.size(); + + /* + * Max possible instructions includes three code address + * objects per basic block (to the first and last instruction, + * and just past the end of the block), and the possibility of + * an extra goto at the end of each basic block. + */ + int maxInsns = (bsz * 3) + blocks.getInstructionCount(); + + if (locals != null) { + /* + * If we're tracking locals, then there's could be another + * extra instruction per block (for the locals state at the + * start of the block) as well as one for each interblock + * local introduction. + */ + maxInsns += bsz + locals.getAssignmentCount(); + } + + /* + * If params are not in order, we will need register space + * for them before this is all over... + */ + this.regCount = blocks.getRegCount() + + (paramsAreInOrder ? 0 : this.paramSize); + + this.output = new OutputCollector(maxInsns, bsz * 3, regCount); + + if (locals != null) { + this.translationVisitor = + new LocalVariableAwareTranslationVisitor(output, locals); + } else { + this.translationVisitor = new TranslationVisitor(output); + } + } + + /** + * Checks to see if the move-param instructions that occur in this + * method happen to slot the params in an order at the top of the + * stack frame that matches dalvik's calling conventions. This will + * alway result in "true" for methods that have run through the + * SSA optimizer. + * + * @param paramSize size, in register units, of all the parameters + * to this method + */ + private static boolean calculateParamsAreInOrder(RopMethod method, + final int paramSize) { + final boolean[] paramsAreInOrder = { true }; + final int initialRegCount = method.getBlocks().getRegCount(); + + /* + * We almost could just check the first block here, but the + * {@code cf} layer will put in a second move-param in a + * subsequent block in the case of synchronized methods. + */ + method.getBlocks().forEachInsn(new Insn.BaseVisitor() { + public void visitPlainCstInsn(PlainCstInsn insn) { + if (insn.getOpcode().getOpcode()== RegOps.MOVE_PARAM) { + int param = + ((CstInteger) insn.getConstant()).getValue(); + + paramsAreInOrder[0] = paramsAreInOrder[0] + && ((initialRegCount - paramSize + param) + == insn.getResult().getReg()); + } + } + }); + + return paramsAreInOrder[0]; + } + + /** + * Does the translation and returns the result. + * + * @return {@code non-null;} the result + */ + private DalvCode translateAndGetResult() { + pickOrder(); + outputInstructions(); + + StdCatchBuilder catches = + new StdCatchBuilder(method, order, addresses); + + return new DalvCode(positionInfo, output.getFinisher(), catches); + } + + /** + * Performs initial creation of output instructions based on the + * original blocks. + */ + private void outputInstructions() { + BasicBlockList blocks = method.getBlocks(); + int[] order = this.order; + int len = order.length; + + // Process the blocks in output order. + for (int i = 0; i < len; i++) { + int nextI = i + 1; + int nextLabel = (nextI == order.length) ? -1 : order[nextI]; + outputBlock(blocks.labelToBlock(order[i]), nextLabel); + } + } + + /** + * Helper for {@link #outputInstructions}, which does the processing + * and output of one block. + * + * @param block {@code non-null;} the block to process and output + * @param nextLabel {@code >= -1;} the next block that will be processed, or + * {@code -1} if there is no next block + */ + private void outputBlock(BasicBlock block, int nextLabel) { + // Append the code address for this block. + CodeAddress startAddress = addresses.getStart(block); + output.add(startAddress); + + // Append the local variable state for the block. + if (locals != null) { + RegisterSpecSet starts = locals.getStarts(block); + output.add(new LocalSnapshot(startAddress.getPosition(), + starts)); + } + + /* + * Choose and append an output instruction for each original + * instruction. + */ + translationVisitor.setBlock(block, addresses.getLast(block)); + block.getInsns().forEach(translationVisitor); + + // Insert the block end code address. + output.add(addresses.getEnd(block)); + + // Set up for end-of-block activities. + + int succ = block.getPrimarySuccessor(); + Insn lastInsn = block.getLastInsn(); + + /* + * Check for (and possibly correct for) a non-optimal choice of + * which block will get output next. + */ + + if ((succ >= 0) && (succ != nextLabel)) { + /* + * The block has a "primary successor" and that primary + * successor isn't the next block to be output. + */ + Rop lastRop = lastInsn.getOpcode(); + if ((lastRop.getBranchingness() == Rop.BRANCH_IF) && + (block.getSecondarySuccessor() == nextLabel)) { + /* + * The block ends with an "if" of some sort, and its + * secondary successor (the "then") is in fact the + * next block to output. So, reverse the sense of + * the test, so that we can just emit the next block + * without an interstitial goto. + */ + output.reverseBranch(1, addresses.getStart(succ)); + } else { + /* + * Our only recourse is to add a goto here to get the + * flow to be correct. + */ + TargetInsn insn = + new TargetInsn(Dops.GOTO, lastInsn.getPosition(), + RegisterSpecList.EMPTY, + addresses.getStart(succ)); + output.add(insn); + } + } + } + + /** + * Picks an order for the blocks by doing "trace" analysis. + */ + private void pickOrder() { + BasicBlockList blocks = method.getBlocks(); + int sz = blocks.size(); + int maxLabel = blocks.getMaxLabel(); + int[] workSet = Bits.makeBitSet(maxLabel); + int[] tracebackSet = Bits.makeBitSet(maxLabel); + + for (int i = 0; i < sz; i++) { + BasicBlock one = blocks.get(i); + Bits.set(workSet, one.getLabel()); + } + + int[] order = new int[sz]; + int at = 0; + + /* + * Starting with the designated "first label" (that is, the + * first block of the method), add that label to the order, + * and then pick its first as-yet unordered successor to + * immediately follow it, giving top priority to the primary + * (aka default) successor (if any). Keep following successors + * until the trace runs out of possibilities. Then, continue + * by finding an unordered chain containing the first as-yet + * unordered block, and adding it to the order, and so on. + */ + for (int label = method.getFirstLabel(); + label != -1; + label = Bits.findFirst(workSet, 0)) { + + /* + * Attempt to trace backward from the chosen block to an + * as-yet unordered predecessor which lists the chosen + * block as its primary successor, and so on, until we + * fail to find such an unordered predecessor. Start the + * trace with that block. Note that the first block in the + * method has no predecessors, so in that case this loop + * will simply terminate with zero iterations and without + * picking a new starter block. + */ + traceBack: + for (;;) { + IntList preds = method.labelToPredecessors(label); + int psz = preds.size(); + + for (int i = 0; i < psz; i++) { + int predLabel = preds.get(i); + + if (Bits.get(tracebackSet, predLabel)) { + /* + * We found a predecessor loop; stop tracing back + * from here. + */ + break; + } + + if (!Bits.get(workSet, predLabel)) { + // This one's already ordered. + continue; + } + + BasicBlock pred = blocks.labelToBlock(predLabel); + if (pred.getPrimarySuccessor() == label) { + // Found one! + label = predLabel; + Bits.set(tracebackSet, label); + continue traceBack; + } + } + + // Failed to find a better block to start the trace. + break; + } + + /* + * Trace a path from the chosen block to one of its + * unordered successors (hopefully the primary), and so + * on, until we run out of unordered successors. + */ + while (label != -1) { + Bits.clear(workSet, label); + Bits.clear(tracebackSet, label); + order[at] = label; + at++; + + BasicBlock one = blocks.labelToBlock(label); + BasicBlock preferredBlock = blocks.preferredSuccessorOf(one); + + if (preferredBlock == null) { + break; + } + + int preferred = preferredBlock.getLabel(); + int primary = one.getPrimarySuccessor(); + + if (Bits.get(workSet, preferred)) { + /* + * Order the current block's preferred successor + * next, as it has yet to be scheduled. + */ + label = preferred; + } else if ((primary != preferred) && (primary >= 0) + && Bits.get(workSet, primary)) { + /* + * The primary is available, so use that. + */ + label = primary; + } else { + /* + * There's no obvious candidate, so pick the first + * one that's available, if any. + */ + IntList successors = one.getSuccessors(); + int ssz = successors.size(); + label = -1; + for (int i = 0; i < ssz; i++) { + int candidate = successors.get(i); + if (Bits.get(workSet, candidate)) { + label = candidate; + break; + } + } + } + } + } + + if (at != sz) { + // There was a duplicate block label. + throw new RuntimeException("shouldn't happen"); + } + + this.order = order; + } + + /** + * Gets the complete register list (result and sources) out of a + * given rop instruction. For insns that are commutative, have + * two register sources, and have a source equal to the result, + * place that source first. + * + * @param insn {@code non-null;} instruction in question + * @return {@code non-null;} the instruction's complete register list + */ + private static RegisterSpecList getRegs(Insn insn) { + return getRegs(insn, insn.getResult()); + } + + /** + * Gets the complete register list (result and sources) out of a + * given rop instruction. For insns that are commutative, have + * two register sources, and have a source equal to the result, + * place that source first. + * + * @param insn {@code non-null;} instruction in question + * @param resultReg {@code null-ok;} the real result to use (ignore the insn's) + * @return {@code non-null;} the instruction's complete register list + */ + private static RegisterSpecList getRegs(Insn insn, + RegisterSpec resultReg) { + RegisterSpecList regs = insn.getSources(); + + if (insn.getOpcode().isCommutative() + && (regs.size() == 2) + && (resultReg.getReg() == regs.get(1).getReg())) { + + /* + * For commutative ops which have two register sources, + * if the second source is the same register as the result, + * swap the sources so that an opcode of form 12x can be selected + * instead of one of form 23x + */ + + regs = RegisterSpecList.make(regs.get(1), regs.get(0)); + } + + if (resultReg == null) { + return regs; + } + + return regs.withFirst(resultReg); + } + + /** + * Instruction visitor class for doing the instruction translation per se. + */ + private class TranslationVisitor implements Insn.Visitor { + /** {@code non-null;} list of output instructions in-progress */ + private final OutputCollector output; + + /** {@code non-null;} basic block being worked on */ + private BasicBlock block; + + /** + * {@code null-ok;} code address for the salient last instruction of the + * block (used before switches and throwing instructions) + */ + private CodeAddress lastAddress; + + /** + * Constructs an instance. + * + * @param output {@code non-null;} destination for instruction output + */ + public TranslationVisitor(OutputCollector output) { + this.output = output; + } + + /** + * Sets the block currently being worked on. + * + * @param block {@code non-null;} the block + * @param lastAddress {@code non-null;} code address for the salient + * last instruction of the block + */ + public void setBlock(BasicBlock block, CodeAddress lastAddress) { + this.block = block; + this.lastAddress = lastAddress; + } + + /** {@inheritDoc} */ + public void visitPlainInsn(PlainInsn insn) { + Rop rop = insn.getOpcode(); + if (rop.getOpcode() == RegOps.MARK_LOCAL) { + /* + * Ignore these. They're dealt with by + * the LocalVariableAwareTranslationVisitor + */ + return; + } + if (rop.getOpcode() == RegOps.MOVE_RESULT_PSEUDO) { + // These get skipped + return; + } + + SourcePosition pos = insn.getPosition(); + Dop opcode = RopToDop.dopFor(insn); + DalvInsn di; + + switch (rop.getBranchingness()) { + case Rop.BRANCH_NONE: + case Rop.BRANCH_RETURN: + case Rop.BRANCH_THROW: { + di = new SimpleInsn(opcode, pos, getRegs(insn)); + break; + } + case Rop.BRANCH_GOTO: { + /* + * Code in the main translation loop will emit a + * goto if necessary (if the branch isn't to the + * immediately subsequent block). + */ + return; + } + case Rop.BRANCH_IF: { + int target = block.getSuccessors().get(1); + di = new TargetInsn(opcode, pos, getRegs(insn), + addresses.getStart(target)); + break; + } + default: { + throw new RuntimeException("shouldn't happen"); + } + } + + addOutput(di); + } + + /** {@inheritDoc} */ + public void visitPlainCstInsn(PlainCstInsn insn) { + SourcePosition pos = insn.getPosition(); + Dop opcode = RopToDop.dopFor(insn); + Rop rop = insn.getOpcode(); + int ropOpcode = rop.getOpcode(); + DalvInsn di; + + if (rop.getBranchingness() != Rop.BRANCH_NONE) { + throw new RuntimeException("shouldn't happen"); + } + + if (ropOpcode == RegOps.MOVE_PARAM) { + if (!paramsAreInOrder) { + /* + * Parameters are not in order at the top of the reg space. + * We need to add moves. + */ + + RegisterSpec dest = insn.getResult(); + int param = + ((CstInteger) insn.getConstant()).getValue(); + RegisterSpec source = + RegisterSpec.make(regCount - paramSize + param, + dest.getType()); + di = new SimpleInsn(opcode, pos, + RegisterSpecList.make(dest, source)); + addOutput(di); + } + } else { + // No moves required for the parameters + RegisterSpecList regs = getRegs(insn); + di = new CstInsn(opcode, pos, regs, insn.getConstant()); + addOutput(di); + } + } + + /** {@inheritDoc} */ + public void visitSwitchInsn(SwitchInsn insn) { + SourcePosition pos = insn.getPosition(); + IntList cases = insn.getCases(); + IntList successors = block.getSuccessors(); + int casesSz = cases.size(); + int succSz = successors.size(); + int primarySuccessor = block.getPrimarySuccessor(); + + /* + * Check the assumptions that the number of cases is one + * less than the number of successors and that the last + * successor in the list is the primary (in this case, the + * default). This test is here to guard against forgetting + * to change this code if the way switch instructions are + * constructed also gets changed. + */ + if ((casesSz != (succSz - 1)) || + (primarySuccessor != successors.get(casesSz))) { + throw new RuntimeException("shouldn't happen"); + } + + CodeAddress[] switchTargets = new CodeAddress[casesSz]; + + for (int i = 0; i < casesSz; i++) { + int label = successors.get(i); + switchTargets[i] = addresses.getStart(label); + } + + CodeAddress dataAddress = new CodeAddress(pos); + SwitchData dataInsn = + new SwitchData(pos, lastAddress, cases, switchTargets); + Dop opcode = dataInsn.isPacked() ? + Dops.PACKED_SWITCH : Dops.SPARSE_SWITCH; + TargetInsn switchInsn = + new TargetInsn(opcode, pos, getRegs(insn), dataAddress); + + addOutput(lastAddress); + addOutput(switchInsn); + + addOutputSuffix(new OddSpacer(pos)); + addOutputSuffix(dataAddress); + addOutputSuffix(dataInsn); + } + + /** + * Looks forward to the current block's primary successor, returning + * the RegisterSpec of the result of the move-result-pseudo at the + * top of that block or null if none. + * + * @return {@code null-ok;} result of move-result-pseudo at the beginning of + * primary successor + */ + private RegisterSpec getNextMoveResultPseudo() + { + int label = block.getPrimarySuccessor(); + + if (label < 0) { + return null; + } + + Insn insn + = method.getBlocks().labelToBlock(label).getInsns().get(0); + + if (insn.getOpcode().getOpcode() != RegOps.MOVE_RESULT_PSEUDO) { + return null; + } else { + return insn.getResult(); + } + } + + /** {@inheritDoc} */ + public void visitThrowingCstInsn(ThrowingCstInsn insn) { + SourcePosition pos = insn.getPosition(); + Dop opcode = RopToDop.dopFor(insn); + Rop rop = insn.getOpcode(); + Constant cst = insn.getConstant(); + + if (rop.getBranchingness() != Rop.BRANCH_THROW) { + throw new RuntimeException("shouldn't happen"); + } + + addOutput(lastAddress); + + if (rop.isCallLike()) { + RegisterSpecList regs = insn.getSources(); + DalvInsn di = new CstInsn(opcode, pos, regs, cst); + + addOutput(di); + } else { + RegisterSpec realResult = getNextMoveResultPseudo(); + + RegisterSpecList regs = getRegs(insn, realResult); + DalvInsn di; + + boolean hasResult = opcode.hasResult() + || (rop.getOpcode() == RegOps.CHECK_CAST); + + if (hasResult != (realResult != null)) { + throw new RuntimeException( + "Insn with result/move-result-pseudo mismatch " + + insn); + } + + if ((rop.getOpcode() == RegOps.NEW_ARRAY) && + (opcode.getOpcode() != DalvOps.NEW_ARRAY)) { + /* + * It's a type-specific new-array-, and + * so it should be turned into a SimpleInsn (no + * constant ref as it's implicit). + */ + di = new SimpleInsn(opcode, pos, regs); + } else { + /* + * This is the general case for constant-bearing + * instructions. + */ + di = new CstInsn(opcode, pos, regs, cst); + } + + addOutput(di); + } + } + + /** {@inheritDoc} */ + public void visitThrowingInsn(ThrowingInsn insn) { + SourcePosition pos = insn.getPosition(); + Dop opcode = RopToDop.dopFor(insn); + Rop rop = insn.getOpcode(); + RegisterSpec realResult; + + if (rop.getBranchingness() != Rop.BRANCH_THROW) { + throw new RuntimeException("shouldn't happen"); + } + + realResult = getNextMoveResultPseudo(); + + if (opcode.hasResult() != (realResult != null)) { + throw new RuntimeException( + "Insn with result/move-result-pseudo mismatch" + insn); + } + + addOutput(lastAddress); + + DalvInsn di = new SimpleInsn(opcode, pos, + getRegs(insn, realResult)); + + addOutput(di); + } + + /** {@inheritDoc} */ + public void visitFillArrayDataInsn(FillArrayDataInsn insn) { + SourcePosition pos = insn.getPosition(); + Constant cst = insn.getConstant(); + ArrayList values = insn.getInitValues(); + Rop rop = insn.getOpcode(); + + if (rop.getBranchingness() != Rop.BRANCH_NONE) { + throw new RuntimeException("shouldn't happen"); + } + CodeAddress dataAddress = new CodeAddress(pos); + ArrayData dataInsn = + new ArrayData(pos, lastAddress, values, cst); + + TargetInsn fillArrayDataInsn = + new TargetInsn(Dops.FILL_ARRAY_DATA, pos, getRegs(insn), + dataAddress); + + addOutput(lastAddress); + addOutput(fillArrayDataInsn); + + addOutputSuffix(new OddSpacer(pos)); + addOutputSuffix(dataAddress); + addOutputSuffix(dataInsn); + } + + /** + * Adds to the output. + * + * @param insn {@code non-null;} instruction to add + */ + protected void addOutput(DalvInsn insn) { + output.add(insn); + } + + /** + * Adds to the output suffix. + * + * @param insn {@code non-null;} instruction to add + */ + protected void addOutputSuffix(DalvInsn insn) { + output.addSuffix(insn); + } + } + + /** + * Instruction visitor class for doing instruction translation with + * local variable tracking + */ + private class LocalVariableAwareTranslationVisitor + extends TranslationVisitor { + /** {@code non-null;} local variable info */ + private LocalVariableInfo locals; + + /** + * Constructs an instance. + * + * @param output {@code non-null;} destination for instruction output + * @param locals {@code non-null;} the local variable info + */ + public LocalVariableAwareTranslationVisitor(OutputCollector output, + LocalVariableInfo locals) { + super(output); + this.locals = locals; + } + + /** {@inheritDoc} */ + @Override + public void visitPlainInsn(PlainInsn insn) { + super.visitPlainInsn(insn); + addIntroductionIfNecessary(insn); + } + + /** {@inheritDoc} */ + @Override + public void visitPlainCstInsn(PlainCstInsn insn) { + super.visitPlainCstInsn(insn); + addIntroductionIfNecessary(insn); + } + + /** {@inheritDoc} */ + @Override + public void visitSwitchInsn(SwitchInsn insn) { + super.visitSwitchInsn(insn); + addIntroductionIfNecessary(insn); + } + + /** {@inheritDoc} */ + @Override + public void visitThrowingCstInsn(ThrowingCstInsn insn) { + super.visitThrowingCstInsn(insn); + addIntroductionIfNecessary(insn); + } + + /** {@inheritDoc} */ + @Override + public void visitThrowingInsn(ThrowingInsn insn) { + super.visitThrowingInsn(insn); + addIntroductionIfNecessary(insn); + } + + /** + * Adds a {@link LocalStart} to the output if the given + * instruction in fact introduces a local variable. + * + * @param insn {@code non-null;} instruction in question + */ + public void addIntroductionIfNecessary(Insn insn) { + RegisterSpec spec = locals.getAssignment(insn); + + if (spec != null) { + addOutput(new LocalStart(insn.getPosition(), spec)); + } + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/SimpleInsn.java b/dexgen/src/com/android/dexgen/dex/code/SimpleInsn.java new file mode 100644 index 0000000..abef242 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/SimpleInsn.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; + +/** + * Instruction which has no extra info beyond the basics provided for in + * the base class. + */ +public final class SimpleInsn extends FixedSizeInsn { + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param opcode the opcode; one of the constants from {@link Dops} + * @param position {@code non-null;} source position + * @param registers {@code non-null;} register list, including a + * result register if appropriate (that is, registers may be either + * ins or outs) + */ + public SimpleInsn(Dop opcode, SourcePosition position, + RegisterSpecList registers) { + super(opcode, position, registers); + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withOpcode(Dop opcode) { + return new SimpleInsn(opcode, getPosition(), getRegisters()); + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new SimpleInsn(getOpcode(), getPosition(), registers); + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + return null; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/StdCatchBuilder.java b/dexgen/src/com/android/dexgen/dex/code/StdCatchBuilder.java new file mode 100644 index 0000000..ba149e7 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/StdCatchBuilder.java @@ -0,0 +1,316 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.BasicBlock; +import com.android.dexgen.rop.code.BasicBlockList; +import com.android.dexgen.rop.code.RopMethod; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.IntList; + +import java.util.ArrayList; +import java.util.HashSet; + +/** + * Constructor of {@link CatchTable} instances from {@link RopMethod} + * and associated data. + */ +public final class StdCatchBuilder implements CatchBuilder { + /** the maximum range of a single catch handler, in code units */ + private static final int MAX_CATCH_RANGE = 65535; + + /** {@code non-null;} method to build the list for */ + private final RopMethod method; + + /** {@code non-null;} block output order */ + private final int[] order; + + /** {@code non-null;} address objects for each block */ + private final BlockAddresses addresses; + + /** + * Constructs an instance. It merely holds onto its parameters for + * a subsequent call to {@link #build}. + * + * @param method {@code non-null;} method to build the list for + * @param order {@code non-null;} block output order + * @param addresses {@code non-null;} address objects for each block + */ + public StdCatchBuilder(RopMethod method, int[] order, + BlockAddresses addresses) { + if (method == null) { + throw new NullPointerException("method == null"); + } + + if (order == null) { + throw new NullPointerException("order == null"); + } + + if (addresses == null) { + throw new NullPointerException("addresses == null"); + } + + this.method = method; + this.order = order; + this.addresses = addresses; + } + + /** {@inheritDoc} */ + public CatchTable build() { + return build(method, order, addresses); + } + + /** {@inheritDoc} */ + public boolean hasAnyCatches() { + BasicBlockList blocks = method.getBlocks(); + int size = blocks.size(); + + for (int i = 0; i < size; i++) { + BasicBlock block = blocks.get(i); + TypeList catches = block.getLastInsn().getCatches(); + if (catches.size() != 0) { + return true; + } + } + + return false; + } + + /** {@inheritDoc} */ + public HashSet getCatchTypes() { + HashSet result = new HashSet(20); + BasicBlockList blocks = method.getBlocks(); + int size = blocks.size(); + + for (int i = 0; i < size; i++) { + BasicBlock block = blocks.get(i); + TypeList catches = block.getLastInsn().getCatches(); + int catchSize = catches.size(); + + for (int j = 0; j < catchSize; j++) { + result.add(catches.getType(j)); + } + } + + return result; + } + + /** + * Builds and returns the catch table for a given method. + * + * @param method {@code non-null;} method to build the list for + * @param order {@code non-null;} block output order + * @param addresses {@code non-null;} address objects for each block + * @return {@code non-null;} the constructed table + */ + public static CatchTable build(RopMethod method, int[] order, + BlockAddresses addresses) { + int len = order.length; + BasicBlockList blocks = method.getBlocks(); + ArrayList resultList = + new ArrayList(len); + CatchHandlerList currentHandlers = CatchHandlerList.EMPTY; + BasicBlock currentStartBlock = null; + BasicBlock currentEndBlock = null; + + for (int i = 0; i < len; i++) { + BasicBlock block = blocks.labelToBlock(order[i]); + + if (!block.canThrow()) { + /* + * There is no need to concern ourselves with the + * placement of blocks that can't throw with respect + * to the blocks that *can* throw. + */ + continue; + } + + CatchHandlerList handlers = handlersFor(block, addresses); + + if (currentHandlers.size() == 0) { + // This is the start of a new catch range. + currentStartBlock = block; + currentEndBlock = block; + currentHandlers = handlers; + continue; + } + + if (currentHandlers.equals(handlers) + && rangeIsValid(currentStartBlock, block, addresses)) { + /* + * The block we are looking at now has the same handlers + * as the block that started the currently open catch + * range, and adding it to the currently open range won't + * cause it to be too long. + */ + currentEndBlock = block; + continue; + } + + /* + * The block we are looking at now has incompatible handlers, + * so we need to finish off the last entry and start a new + * one. Note: We only emit an entry if it has associated handlers. + */ + if (currentHandlers.size() != 0) { + CatchTable.Entry entry = + makeEntry(currentStartBlock, currentEndBlock, + currentHandlers, addresses); + resultList.add(entry); + } + + currentStartBlock = block; + currentEndBlock = block; + currentHandlers = handlers; + } + + if (currentHandlers.size() != 0) { + // Emit an entry for the range that was left hanging. + CatchTable.Entry entry = + makeEntry(currentStartBlock, currentEndBlock, + currentHandlers, addresses); + resultList.add(entry); + } + + // Construct the final result. + + int resultSz = resultList.size(); + + if (resultSz == 0) { + return CatchTable.EMPTY; + } + + CatchTable result = new CatchTable(resultSz); + + for (int i = 0; i < resultSz; i++) { + result.set(i, resultList.get(i)); + } + + result.setImmutable(); + return result; + } + + /** + * Makes the {@link CatchHandlerList} for the given basic block. + * + * @param block {@code non-null;} block to get entries for + * @param addresses {@code non-null;} address objects for each block + * @return {@code non-null;} array of entries + */ + private static CatchHandlerList handlersFor(BasicBlock block, + BlockAddresses addresses) { + IntList successors = block.getSuccessors(); + int succSize = successors.size(); + int primary = block.getPrimarySuccessor(); + TypeList catches = block.getLastInsn().getCatches(); + int catchSize = catches.size(); + + if (catchSize == 0) { + return CatchHandlerList.EMPTY; + } + + if (((primary == -1) && (succSize != catchSize)) + || ((primary != -1) && + ((succSize != (catchSize + 1)) + || (primary != successors.get(catchSize))))) { + /* + * Blocks that throw are supposed to list their primary + * successor -- if any -- last in the successors list, but + * that constraint appears to be violated here. + */ + throw new RuntimeException( + "shouldn't happen: weird successors list"); + } + + /* + * Reduce the effective catchSize if we spot a catch-all that + * isn't at the end. + */ + for (int i = 0; i < catchSize; i++) { + Type type = catches.getType(i); + if (type.equals(Type.OBJECT)) { + catchSize = i + 1; + break; + } + } + + CatchHandlerList result = new CatchHandlerList(catchSize); + + for (int i = 0; i < catchSize; i++) { + CstType oneType = new CstType(catches.getType(i)); + CodeAddress oneHandler = addresses.getStart(successors.get(i)); + result.set(i, oneType, oneHandler.getAddress()); + } + + result.setImmutable(); + return result; + } + + /** + * Makes a {@link CatchTable#Entry} for the given block range and + * handlers. + * + * @param start {@code non-null;} the start block for the range (inclusive) + * @param end {@code non-null;} the start block for the range (also inclusive) + * @param handlers {@code non-null;} the handlers for the range + * @param addresses {@code non-null;} address objects for each block + */ + private static CatchTable.Entry makeEntry(BasicBlock start, + BasicBlock end, CatchHandlerList handlers, + BlockAddresses addresses) { + /* + * We start at the *last* instruction of the start block, since + * that's the instruction that can throw... + */ + CodeAddress startAddress = addresses.getLast(start); + + // ...And we end *after* the last instruction of the end block. + CodeAddress endAddress = addresses.getEnd(end); + + return new CatchTable.Entry(startAddress.getAddress(), + endAddress.getAddress(), handlers); + } + + /** + * Gets whether the address range for the given two blocks is valid + * for a catch handler. This is true as long as the covered range is + * under 65536 code units. + * + * @param start {@code non-null;} the start block for the range (inclusive) + * @param end {@code non-null;} the start block for the range (also inclusive) + * @param addresses {@code non-null;} address objects for each block + * @return {@code true} if the range is valid as a catch range + */ + private static boolean rangeIsValid(BasicBlock start, BasicBlock end, + BlockAddresses addresses) { + if (start == null) { + throw new NullPointerException("start == null"); + } + + if (end == null) { + throw new NullPointerException("end == null"); + } + + // See above about selection of instructions. + int startAddress = addresses.getLast(start).getAddress(); + int endAddress = addresses.getEnd(end).getAddress(); + + return (endAddress - startAddress) <= MAX_CATCH_RANGE; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/SwitchData.java b/dexgen/src/com/android/dexgen/dex/code/SwitchData.java new file mode 100644 index 0000000..a7d8465 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/SwitchData.java @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.IntList; + +/** + * Pseudo-instruction which holds switch data. The switch data is + * a map of values to target addresses, and this class writes the data + * in either a "packed" or "sparse" form. + */ +public final class SwitchData extends VariableSizeInsn { + /** + * {@code non-null;} address representing the instruction that uses this + * instance + */ + private final CodeAddress user; + + /** {@code non-null;} sorted list of switch cases (keys) */ + private final IntList cases; + + /** + * {@code non-null;} corresponding list of code addresses; the branch + * target for each case + */ + private final CodeAddress[] targets; + + /** whether the output table will be packed (vs. sparse) */ + private final boolean packed; + + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + * @param user {@code non-null;} address representing the instruction that + * uses this instance + * @param cases {@code non-null;} sorted list of switch cases (keys) + * @param targets {@code non-null;} corresponding list of code addresses; the + * branch target for each case + */ + public SwitchData(SourcePosition position, CodeAddress user, + IntList cases, CodeAddress[] targets) { + super(position, RegisterSpecList.EMPTY); + + if (user == null) { + throw new NullPointerException("user == null"); + } + + if (cases == null) { + throw new NullPointerException("cases == null"); + } + + if (targets == null) { + throw new NullPointerException("targets == null"); + } + + int sz = cases.size(); + + if (sz != targets.length) { + throw new IllegalArgumentException("cases / targets mismatch"); + } + + if (sz > 65535) { + throw new IllegalArgumentException("too many cases"); + } + + this.user = user; + this.cases = cases; + this.targets = targets; + this.packed = shouldPack(cases); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return packed ? (int) packedCodeSize(cases) : + (int) sparseCodeSize(cases); + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out) { + int baseAddress = user.getAddress(); + int defaultTarget = Dops.PACKED_SWITCH.getFormat().codeSize(); + int sz = targets.length; + + if (packed) { + int firstCase = (sz == 0) ? 0 : cases.get(0); + int lastCase = (sz == 0) ? 0 : cases.get(sz - 1); + int outSz = lastCase - firstCase + 1; + + out.writeShort(0x100 | DalvOps.NOP); + out.writeShort(outSz); + out.writeInt(firstCase); + + int caseAt = 0; + for (int i = 0; i < outSz; i++) { + int outCase = firstCase + i; + int oneCase = cases.get(caseAt); + int relTarget; + + if (oneCase > outCase) { + relTarget = defaultTarget; + } else { + relTarget = targets[caseAt].getAddress() - baseAddress; + caseAt++; + } + + out.writeInt(relTarget); + } + } else { + out.writeShort(0x200 | DalvOps.NOP); + out.writeShort(sz); + + for (int i = 0; i < sz; i++) { + out.writeInt(cases.get(i)); + } + + for (int i = 0; i < sz; i++) { + int relTarget = targets[i].getAddress() - baseAddress; + out.writeInt(relTarget); + } + } + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new SwitchData(getPosition(), user, cases, targets); + } + + /** + * Returns whether or not this instance's data will be output as packed. + * + * @return {@code true} iff the data is to be packed + */ + public boolean isPacked() { + return packed; + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + StringBuffer sb = new StringBuffer(100); + + int sz = targets.length; + for (int i = 0; i < sz; i++) { + sb.append("\n "); + sb.append(cases.get(i)); + sb.append(": "); + sb.append(targets[i]); + } + + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + protected String listingString0(boolean noteIndices) { + int baseAddress = user.getAddress(); + StringBuffer sb = new StringBuffer(100); + int sz = targets.length; + + sb.append(packed ? "packed" : "sparse"); + sb.append("-switch-data // for switch @ "); + sb.append(Hex.u2(baseAddress)); + + for (int i = 0; i < sz; i++) { + int absTarget = targets[i].getAddress(); + int relTarget = absTarget - baseAddress; + sb.append("\n "); + sb.append(cases.get(i)); + sb.append(": "); + sb.append(Hex.u4(absTarget)); + sb.append(" // "); + sb.append(Hex.s4(relTarget)); + } + + return sb.toString(); + } + + /** + * Gets the size of a packed table for the given cases, in 16-bit code + * units. + * + * @param cases {@code non-null;} sorted list of cases + * @return {@code >= -1;} the packed table size or {@code -1} if the + * cases couldn't possibly be represented as a packed table + */ + private static long packedCodeSize(IntList cases) { + int sz = cases.size(); + long low = cases.get(0); + long high = cases.get(sz - 1); + long result = ((high - low + 1)) * 2 + 4; + + return (result <= 0x7fffffff) ? result : -1; + } + + /** + * Gets the size of a sparse table for the given cases, in 16-bit code + * units. + * + * @param cases {@code non-null;} sorted list of cases + * @return {@code > 0;} the sparse table size + */ + private static long sparseCodeSize(IntList cases) { + int sz = cases.size(); + + return (sz * 4L) + 2; + } + + /** + * Determines whether the given list of cases warrant being packed. + * + * @param cases {@code non-null;} sorted list of cases + * @return {@code true} iff the table encoding the cases + * should be packed + */ + private static boolean shouldPack(IntList cases) { + int sz = cases.size(); + + if (sz < 2) { + return true; + } + + long packedSize = packedCodeSize(cases); + long sparseSize = sparseCodeSize(cases); + + /* + * We pick the packed representation if it is possible and + * would be as small or smaller than 5/4 of the sparse + * representation. That is, we accept some size overhead on + * the packed representation, since that format is faster to + * execute at runtime. + */ + return (packedSize >= 0) && (packedSize <= ((sparseSize * 5) / 4)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/TargetInsn.java b/dexgen/src/com/android/dexgen/dex/code/TargetInsn.java new file mode 100644 index 0000000..8e02255 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/TargetInsn.java @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; + +/** + * Instruction which has a single branch target. + */ +public final class TargetInsn extends FixedSizeInsn { + /** {@code non-null;} the branch target */ + private CodeAddress target; + + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}), and the target is initially + * {@code null}. + * + * @param opcode the opcode; one of the constants from {@link Dops} + * @param position {@code non-null;} source position + * @param registers {@code non-null;} register list, including a + * result register if appropriate (that is, registers may be either + * ins or outs) + * @param target {@code non-null;} the branch target + */ + public TargetInsn(Dop opcode, SourcePosition position, + RegisterSpecList registers, CodeAddress target) { + super(opcode, position, registers); + + if (target == null) { + throw new NullPointerException("target == null"); + } + + this.target = target; + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withOpcode(Dop opcode) { + return new TargetInsn(opcode, getPosition(), getRegisters(), target); + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisters(RegisterSpecList registers) { + return new TargetInsn(getOpcode(), getPosition(), registers, target); + } + + /** + * Returns an instance that is just like this one, except that its + * opcode has the opposite sense (as a test; e.g. a + * {@code lt} test becomes a {@code ge}), and its branch + * target is replaced by the one given, and all set-once values + * associated with the class (such as its address) are reset. + * + * @param target {@code non-null;} the new branch target + * @return {@code non-null;} an appropriately-constructed instance + */ + public TargetInsn withNewTargetAndReversed(CodeAddress target) { + Dop opcode = getOpcode().getOppositeTest(); + + return new TargetInsn(opcode, getPosition(), getRegisters(), target); + } + + /** + * Gets the unique branch target of this instruction. + * + * @return {@code non-null;} the branch target + */ + public CodeAddress getTarget() { + return target; + } + + /** + * Gets the target address of this instruction. This is only valid + * to call if the target instruction has been assigned an address, + * and it is merely a convenient shorthand for + * {@code getTarget().getAddress()}. + * + * @return {@code >= 0;} the target address + */ + public int getTargetAddress() { + return target.getAddress(); + } + + /** + * Gets the branch offset of this instruction. This is only valid to + * call if both this and the target instruction each has been assigned + * an address, and it is merely a convenient shorthand for + * {@code getTargetAddress() - getAddress()}. + * + * @return the branch offset + */ + public int getTargetOffset() { + return target.getAddress() - getAddress(); + } + + /** + * Returns whether the target offset is known. + * + * @return {@code true} if the target offset is known or + * {@code false} if not + */ + public boolean hasTargetOffset() { + return hasAddress() && target.hasAddress(); + } + + /** {@inheritDoc} */ + @Override + protected String argString() { + if (target == null) { + return "????"; + } + + return target.identifierString(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/VariableSizeInsn.java b/dexgen/src/com/android/dexgen/dex/code/VariableSizeInsn.java new file mode 100644 index 0000000..baa62a3 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/VariableSizeInsn.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; + +/** + * Pseudo-instruction base class for variable-sized instructions. + */ +public abstract class VariableSizeInsn extends DalvInsn { + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + * @param registers {@code non-null;} source registers + */ + public VariableSizeInsn(SourcePosition position, + RegisterSpecList registers) { + super(Dops.SPECIAL_FORMAT, position, registers); + } + + /** {@inheritDoc} */ + @Override + public final DalvInsn withOpcode(Dop opcode) { + throw new RuntimeException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public final DalvInsn withRegisterOffset(int delta) { + return withRegisters(getRegisters().withOffset(delta)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/ZeroSizeInsn.java b/dexgen/src/com/android/dexgen/dex/code/ZeroSizeInsn.java new file mode 100644 index 0000000..3c8c94a --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/ZeroSizeInsn.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code; + +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Pseudo-instruction base class for zero-size (no code emitted) + * instructions, which are generally used for tracking metainformation + * about the code they are adjacent to. + */ +public abstract class ZeroSizeInsn extends DalvInsn { + /** + * Constructs an instance. The output address of this instance is initially + * unknown ({@code -1}). + * + * @param position {@code non-null;} source position + */ + public ZeroSizeInsn(SourcePosition position) { + super(Dops.SPECIAL_FORMAT, position, RegisterSpecList.EMPTY); + } + + /** {@inheritDoc} */ + @Override + public final int codeSize() { + return 0; + } + + /** {@inheritDoc} */ + @Override + public final void writeTo(AnnotatedOutput out) { + // Nothing to do here, for this class. + } + + /** {@inheritDoc} */ + @Override + public final DalvInsn withOpcode(Dop opcode) { + throw new RuntimeException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public DalvInsn withRegisterOffset(int delta) { + return withRegisters(getRegisters().withOffset(delta)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form10t.java b/dexgen/src/com/android/dexgen/dex/code/form/Form10t.java new file mode 100644 index 0000000..4784fc3 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form10t.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.TargetInsn; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 10t}. See the instruction format spec + * for details. + */ +public final class Form10t extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form10t(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form10t() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + return branchString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + return branchComment(insn); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 1; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!((insn instanceof TargetInsn) && + (insn.getRegisters().size() == 0))) { + return false; + } + + TargetInsn ti = (TargetInsn) insn; + return ti.hasTargetOffset() ? branchFits(ti) : true; + } + + /** {@inheritDoc} */ + @Override + public boolean branchFits(TargetInsn insn) { + int offset = insn.getTargetOffset(); + + // Note: A zero offset would fit, but it is prohibited by the spec. + return (offset != 0) && signedFitsInByte(offset); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form20t.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + int offset = ((TargetInsn) insn).getTargetOffset(); + + write(out, opcodeUnit(insn, (offset & 0xff))); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form10x.java b/dexgen/src/com/android/dexgen/dex/code/form/Form10x.java new file mode 100644 index 0000000..63c861c --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form10x.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.SimpleInsn; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 10x}. See the instruction format spec + * for details. + */ +public final class Form10x extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form10x(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form10x() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + // This format has no arguments. + return ""; + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + // This format has no comment. + return ""; + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 1; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + return (insn instanceof SimpleInsn) && + (insn.getRegisters().size() == 0); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + write(out, opcodeUnit(insn, 0)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form11n.java b/dexgen/src/com/android/dexgen/dex/code/form/Form11n.java new file mode 100644 index 0000000..511d7d1 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form11n.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 11n}. See the instruction format spec + * for details. + */ +public final class Form11n extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form11n(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form11n() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + + return regs.get(0).regString() + ", " + literalBitsString(value); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + return literalBitsComment(value, 4); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 1; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + + if (!((insn instanceof CstInsn) && + (regs.size() == 1) && + unsignedFitsInNibble(regs.get(0).getReg()))) { + return false; + } + + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + if (!(cst instanceof CstLiteralBits)) { + return false; + } + + CstLiteralBits cb = (CstLiteralBits) cst; + + return cb.fitsInInt() && signedFitsInNibble(cb.getIntBits()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form21s.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int value = + ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits(); + + write(out, + opcodeUnit(insn, makeByte(regs.get(0).getReg(), value & 0xf))); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form11x.java b/dexgen/src/com/android/dexgen/dex/code/form/Form11x.java new file mode 100644 index 0000000..8bf9bba --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form11x.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.SimpleInsn; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 11x}. See the instruction format spec + * for details. + */ +public final class Form11x extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form11x(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form11x() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString(); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + // This format has no comment. + return ""; + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 1; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return (insn instanceof SimpleInsn) && + (regs.size() == 1) && + unsignedFitsInByte(regs.get(0).getReg()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + write(out, opcodeUnit(insn, regs.get(0).getReg())); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form12x.java b/dexgen/src/com/android/dexgen/dex/code/form/Form12x.java new file mode 100644 index 0000000..d55a66a --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form12x.java @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.HighRegisterPrefix; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.SimpleInsn; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 12x}. See the instruction format spec + * for details. + */ +public final class Form12x extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form12x(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form12x() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int sz = regs.size(); + + /* + * The (sz - 2) and (sz - 1) below makes this code work for + * both the two- and three-register ops. (See "case 3" in + * isCompatible(), below.) + */ + + return regs.get(sz - 2).regString() + ", " + + regs.get(sz - 1).regString(); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + // This format has no comment. + return ""; + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 1; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!(insn instanceof SimpleInsn)) { + return false; + } + + RegisterSpecList regs = insn.getRegisters(); + RegisterSpec rs1; + RegisterSpec rs2; + + switch (regs.size()) { + case 2: { + rs1 = regs.get(0); + rs2 = regs.get(1); + break; + } + case 3: { + /* + * This format is allowed for ops that are effectively + * 3-arg but where the first two args are identical. + */ + rs1 = regs.get(1); + rs2 = regs.get(2); + if (rs1.getReg() != regs.get(0).getReg()) { + return false; + } + break; + } + default: { + return false; + } + } + + return unsignedFitsInNibble(rs1.getReg()) && + unsignedFitsInNibble(rs2.getReg()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form22x.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int sz = regs.size(); + + /* + * The (sz - 2) and (sz - 1) below makes this code work for + * both the two- and three-register ops. (See "case 3" in + * isCompatible(), above.) + */ + + write(out, opcodeUnit(insn, + makeByte(regs.get(sz - 2).getReg(), + regs.get(sz - 1).getReg()))); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form20t.java b/dexgen/src/com/android/dexgen/dex/code/form/Form20t.java new file mode 100644 index 0000000..2760606 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form20t.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.TargetInsn; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 20t}. See the instruction format spec + * for details. + */ +public final class Form20t extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form20t(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form20t() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + return branchString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + return branchComment(insn); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!((insn instanceof TargetInsn) && + (insn.getRegisters().size() == 0))) { + return false; + } + + TargetInsn ti = (TargetInsn) insn; + return ti.hasTargetOffset() ? branchFits(ti) : true; + } + + /** {@inheritDoc} */ + @Override + public boolean branchFits(TargetInsn insn) { + int offset = insn.getTargetOffset(); + + // Note: A zero offset would fit, but it is prohibited by the spec. + return (offset != 0) && signedFitsInShort(offset); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form30t.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + int offset = ((TargetInsn) insn).getTargetOffset(); + + write(out, opcodeUnit(insn, 0), (short) offset); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form21c.java b/dexgen/src/com/android/dexgen/dex/code/form/Form21c.java new file mode 100644 index 0000000..33df3d6 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form21c.java @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 21c}. See the instruction format spec + * for details. + */ +public final class Form21c extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form21c(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form21c() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + cstString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + if (noteIndices) { + return cstComment(insn); + } else { + return ""; + } + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!(insn instanceof CstInsn)) { + return false; + } + + RegisterSpecList regs = insn.getRegisters(); + RegisterSpec reg; + + switch (regs.size()) { + case 1: { + reg = regs.get(0); + break; + } + case 2: { + /* + * This format is allowed for ops that are effectively + * 2-arg but where the two args are identical. + */ + reg = regs.get(0); + if (reg.getReg() != regs.get(1).getReg()) { + return false; + } + break; + } + default: { + return false; + } + } + + if (!unsignedFitsInByte(reg.getReg())) { + return false; + } + + CstInsn ci = (CstInsn) insn; + int cpi = ci.getIndex(); + + if (! unsignedFitsInShort(cpi)) { + return false; + } + + Constant cst = ci.getConstant(); + return (cst instanceof CstType) || + (cst instanceof CstFieldRef) || + (cst instanceof CstString); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form31c.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int cpi = ((CstInsn) insn).getIndex(); + + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + (short) cpi); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form21h.java b/dexgen/src/com/android/dexgen/dex/code/form/Form21h.java new file mode 100644 index 0000000..ee6ed3e --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form21h.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 21h}. See the instruction format spec + * for details. + */ +public final class Form21h extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form21h(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form21h() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + + return regs.get(0).regString() + ", " + literalBitsString(value); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + + return + literalBitsComment(value, + (regs.get(0).getCategory() == 1) ? 32 : 64); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + if (!((insn instanceof CstInsn) && + (regs.size() == 1) && + unsignedFitsInByte(regs.get(0).getReg()))) { + return false; + } + + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + if (!(cst instanceof CstLiteralBits)) { + return false; + } + + CstLiteralBits cb = (CstLiteralBits) cst; + + // Where the high bits are depends on the category of the target. + if (regs.get(0).getCategory() == 1) { + int bits = cb.getIntBits(); + return ((bits & 0xffff) == 0); + } else { + long bits = cb.getLongBits(); + return ((bits & 0xffffffffffffL) == 0); + } + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form31i.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits cb = (CstLiteralBits) ((CstInsn) insn).getConstant(); + short bits; + + // Where the high bits are depends on the category of the target. + if (regs.get(0).getCategory() == 1) { + bits = (short) (cb.getIntBits() >>> 16); + } else { + bits = (short) (cb.getLongBits() >>> 48); + } + + write(out, opcodeUnit(insn, regs.get(0).getReg()), bits); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form21s.java b/dexgen/src/com/android/dexgen/dex/code/form/Form21s.java new file mode 100644 index 0000000..4b853d0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form21s.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 21s}. See the instruction format spec + * for details. + */ +public final class Form21s extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form21s(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form21s() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + + return regs.get(0).regString() + ", " + literalBitsString(value); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + return literalBitsComment(value, 16); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + if (!((insn instanceof CstInsn) && + (regs.size() == 1) && + unsignedFitsInByte(regs.get(0).getReg()))) { + return false; + } + + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + if (!(cst instanceof CstLiteralBits)) { + return false; + } + + CstLiteralBits cb = (CstLiteralBits) cst; + + return cb.fitsInInt() && signedFitsInShort(cb.getIntBits()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form21h.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int value = + ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits(); + + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + (short) value); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form21t.java b/dexgen/src/com/android/dexgen/dex/code/form/Form21t.java new file mode 100644 index 0000000..61599f6 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form21t.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.TargetInsn; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 21t}. See the instruction format spec + * for details. + */ +public final class Form21t extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form21t(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form21t() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + branchString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + return branchComment(insn); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + + if (!((insn instanceof TargetInsn) && + (regs.size() == 1) && + unsignedFitsInByte(regs.get(0).getReg()))) { + return false; + } + + TargetInsn ti = (TargetInsn) insn; + return ti.hasTargetOffset() ? branchFits(ti) : true; + } + + /** {@inheritDoc} */ + @Override + public boolean branchFits(TargetInsn insn) { + int offset = insn.getTargetOffset(); + + // Note: A zero offset would fit, but it is prohibited by the spec. + return (offset != 0) && signedFitsInShort(offset); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form31t.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int offset = ((TargetInsn) insn).getTargetOffset(); + + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + (short) offset); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form22b.java b/dexgen/src/com/android/dexgen/dex/code/form/Form22b.java new file mode 100644 index 0000000..6c37d57 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form22b.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 22b}. See the instruction format spec + * for details. + */ +public final class Form22b extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form22b(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form22b() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + + return regs.get(0).regString() + ", " + regs.get(1).regString() + + ", " + literalBitsString(value); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + return literalBitsComment(value, 8); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + if (!((insn instanceof CstInsn) && + (regs.size() == 2) && + unsignedFitsInByte(regs.get(0).getReg()) && + unsignedFitsInByte(regs.get(1).getReg()))) { + return false; + } + + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + if (!(cst instanceof CstLiteralBits)) { + return false; + } + + CstLiteralBits cb = (CstLiteralBits) cst; + + return cb.fitsInInt() && signedFitsInByte(cb.getIntBits()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form22s.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int value = + ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits(); + + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + codeUnit(regs.get(1).getReg(), value & 0xff)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form22c.java b/dexgen/src/com/android/dexgen/dex/code/form/Form22c.java new file mode 100644 index 0000000..b089ec4 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form22c.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 22c}. See the instruction format spec + * for details. + */ +public final class Form22c extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form22c(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form22c() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + regs.get(1).regString() + + ", " + cstString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + if (noteIndices) { + return cstComment(insn); + } else { + return ""; + } + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + if (!((insn instanceof CstInsn) && + (regs.size() == 2) && + unsignedFitsInNibble(regs.get(0).getReg()) && + unsignedFitsInNibble(regs.get(1).getReg()))) { + return false; + } + + CstInsn ci = (CstInsn) insn; + int cpi = ci.getIndex(); + + if (! unsignedFitsInShort(cpi)) { + return false; + } + + Constant cst = ci.getConstant(); + return (cst instanceof CstType) || + (cst instanceof CstFieldRef); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int cpi = ((CstInsn) insn).getIndex(); + + write(out, + opcodeUnit(insn, + makeByte(regs.get(0).getReg(), regs.get(1).getReg())), + (short) cpi); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form22s.java b/dexgen/src/com/android/dexgen/dex/code/form/Form22s.java new file mode 100644 index 0000000..0eca280 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form22s.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 22s}. See the instruction format spec + * for details. + */ +public final class Form22s extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form22s(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form22s() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + + return regs.get(0).regString() + ", " + regs.get(1).regString() + + ", " + literalBitsString(value); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + return literalBitsComment(value, 16); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + if (!((insn instanceof CstInsn) && + (regs.size() == 2) && + unsignedFitsInNibble(regs.get(0).getReg()) && + unsignedFitsInNibble(regs.get(1).getReg()))) { + return false; + } + + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + if (!(cst instanceof CstLiteralBits)) { + return false; + } + + CstLiteralBits cb = (CstLiteralBits) cst; + + return cb.fitsInInt() && signedFitsInShort(cb.getIntBits()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int value = + ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits(); + + write(out, + opcodeUnit(insn, + makeByte(regs.get(0).getReg(), regs.get(1).getReg())), + (short) value); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form22t.java b/dexgen/src/com/android/dexgen/dex/code/form/Form22t.java new file mode 100644 index 0000000..707bb97 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form22t.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.TargetInsn; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 22t}. See the instruction format spec + * for details. + */ +public final class Form22t extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form22t(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form22t() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + regs.get(1).regString() + + ", " + branchString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + return branchComment(insn); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + + if (!((insn instanceof TargetInsn) && + (regs.size() == 2) && + unsignedFitsInNibble(regs.get(0).getReg()) && + unsignedFitsInNibble(regs.get(1).getReg()))) { + return false; + } + + TargetInsn ti = (TargetInsn) insn; + return ti.hasTargetOffset() ? branchFits(ti) : true; + } + + /** {@inheritDoc} */ + @Override + public boolean branchFits(TargetInsn insn) { + int offset = insn.getTargetOffset(); + + // Note: A zero offset would fit, but it is prohibited by the spec. + return (offset != 0) && signedFitsInShort(offset); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int offset = ((TargetInsn) insn).getTargetOffset(); + + write(out, + opcodeUnit(insn, + makeByte(regs.get(0).getReg(), regs.get(1).getReg())), + (short) offset); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form22x.java b/dexgen/src/com/android/dexgen/dex/code/form/Form22x.java new file mode 100644 index 0000000..bd6a8df --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form22x.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.SimpleInsn; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 22x}. See the instruction format spec + * for details. + */ +public final class Form22x extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form22x(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form22x() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + regs.get(1).regString(); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + // This format has no comment. + return ""; + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + + return (insn instanceof SimpleInsn) && + (regs.size() == 2) && + unsignedFitsInByte(regs.get(0).getReg()) && + unsignedFitsInShort(regs.get(1).getReg()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form23x.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + (short) regs.get(1).getReg()); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form23x.java b/dexgen/src/com/android/dexgen/dex/code/form/Form23x.java new file mode 100644 index 0000000..eaf1cee --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form23x.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.SimpleInsn; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 23x}. See the instruction format spec + * for details. + */ +public final class Form23x extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form23x(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form23x() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + regs.get(1).regString() + + ", " + regs.get(2).regString(); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + // This format has no comment. + return ""; + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 2; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + + return (insn instanceof SimpleInsn) && + (regs.size() == 3) && + unsignedFitsInByte(regs.get(0).getReg()) && + unsignedFitsInByte(regs.get(1).getReg()) && + unsignedFitsInByte(regs.get(2).getReg()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form32x.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + codeUnit(regs.get(1).getReg(), regs.get(2).getReg())); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form30t.java b/dexgen/src/com/android/dexgen/dex/code/form/Form30t.java new file mode 100644 index 0000000..0909ec8 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form30t.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.TargetInsn; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 30t}. See the instruction format spec + * for details. + */ +public final class Form30t extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form30t(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form30t() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + return branchString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + return branchComment(insn); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 3; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!((insn instanceof TargetInsn) && + (insn.getRegisters().size() == 0))) { + return false; + } + + return true; + } + + /** {@inheritDoc} */ + @Override + public boolean branchFits(TargetInsn insn) { + return true; + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + int offset = ((TargetInsn) insn).getTargetOffset(); + + write(out, opcodeUnit(insn, 0), + (short) offset, + (short) (offset >> 16)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form31c.java b/dexgen/src/com/android/dexgen/dex/code/form/Form31c.java new file mode 100644 index 0000000..c87a451 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form31c.java @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 31c}. See the instruction format spec + * for details. + */ +public final class Form31c extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form31c(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form31c() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + cstString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + if (noteIndices) { + return cstComment(insn); + } else { + return ""; + } + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 3; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!(insn instanceof CstInsn)) { + return false; + } + + RegisterSpecList regs = insn.getRegisters(); + RegisterSpec reg; + + switch (regs.size()) { + case 1: { + reg = regs.get(0); + break; + } + case 2: { + /* + * This format is allowed for ops that are effectively + * 2-arg but where the two args are identical. + */ + reg = regs.get(0); + if (reg.getReg() != regs.get(1).getReg()) { + return false; + } + break; + } + default: { + return false; + } + } + + if (!unsignedFitsInByte(reg.getReg())) { + return false; + } + + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + return ((cst instanceof CstType) || + (cst instanceof CstFieldRef) || + (cst instanceof CstString)); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int cpi = ((CstInsn) insn).getIndex(); + + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + (short) cpi, + (short) (cpi >> 16)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form31i.java b/dexgen/src/com/android/dexgen/dex/code/form/Form31i.java new file mode 100644 index 0000000..e74ea86 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form31i.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 31i}. See the instruction format spec + * for details. + */ +public final class Form31i extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form31i(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form31i() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + + return regs.get(0).regString() + ", " + literalBitsString(value); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + return literalBitsComment(value, 32); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 3; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + if (!((insn instanceof CstInsn) && + (regs.size() == 1) && + unsignedFitsInByte(regs.get(0).getReg()))) { + return false; + } + + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + if (!(cst instanceof CstLiteralBits)) { + return false; + } + + return ((CstLiteralBits) cst).fitsInInt(); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form51l.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int value = + ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits(); + + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + (short) value, + (short) (value >> 16)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form31t.java b/dexgen/src/com/android/dexgen/dex/code/form/Form31t.java new file mode 100644 index 0000000..212f93b --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form31t.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.TargetInsn; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 31t}. See the instruction format spec + * for details. + */ +public final class Form31t extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form31t(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form31t() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + branchString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + return branchComment(insn); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 3; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + + if (!((insn instanceof TargetInsn) && + (regs.size() == 1) && + unsignedFitsInByte(regs.get(0).getReg()))) { + return false; + } + + return true; + } + + /** {@inheritDoc} */ + @Override + public boolean branchFits(TargetInsn insn) { + return true; + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int offset = ((TargetInsn) insn).getTargetOffset(); + + write(out, opcodeUnit(insn, regs.get(0).getReg()), + (short) offset, + (short) (offset >> 16)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form32x.java b/dexgen/src/com/android/dexgen/dex/code/form/Form32x.java new file mode 100644 index 0000000..097fb65 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form32x.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.dex.code.SimpleInsn; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 32x}. See the instruction format spec + * for details. + */ +public final class Form32x extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form32x(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form32x() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return regs.get(0).regString() + ", " + regs.get(1).regString(); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + // This format has no comment. + return ""; + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 3; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + return (insn instanceof SimpleInsn) && + (regs.size() == 2) && + unsignedFitsInShort(regs.get(0).getReg()) && + unsignedFitsInShort(regs.get(1).getReg()); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + + write(out, + opcodeUnit(insn, 0), + (short) regs.get(0).getReg(), + (short) regs.get(1).getReg()); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form35c.java b/dexgen/src/com/android/dexgen/dex/code/form/Form35c.java new file mode 100644 index 0000000..147aac1 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form35c.java @@ -0,0 +1,193 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 35c}. See the instruction format spec + * for details. + */ +public final class Form35c extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form35c(); + + /** Maximal number of operands */ + private static final int MAX_NUM_OPS = 5; + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form35c() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = explicitize(insn.getRegisters()); + return regListString(regs) + ", " + cstString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + if (noteIndices) { + return cstComment(insn); + } else { + return ""; + } + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 3; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!(insn instanceof CstInsn)) { + return false; + } + + CstInsn ci = (CstInsn) insn; + int cpi = ci.getIndex(); + + if (! unsignedFitsInShort(cpi)) { + return false; + } + + Constant cst = ci.getConstant(); + if (!((cst instanceof CstMethodRef) || + (cst instanceof CstType))) { + return false; + } + + RegisterSpecList regs = ci.getRegisters(); + return (wordCount(regs) >= 0); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form3rc.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + int cpi = ((CstInsn) insn).getIndex(); + RegisterSpecList regs = explicitize(insn.getRegisters()); + int sz = regs.size(); + int r0 = (sz > 0) ? regs.get(0).getReg() : 0; + int r1 = (sz > 1) ? regs.get(1).getReg() : 0; + int r2 = (sz > 2) ? regs.get(2).getReg() : 0; + int r3 = (sz > 3) ? regs.get(3).getReg() : 0; + int r4 = (sz > 4) ? regs.get(4).getReg() : 0; + + write(out, + opcodeUnit(insn, + makeByte(r4, sz)), // encode the fifth operand here + (short) cpi, + codeUnit(r0, r1, r2, r3)); + } + + /** + * Gets the number of words required for the given register list, where + * category-2 values count as two words. Return {@code -1} if the + * list requires more than five words or contains registers that need + * more than a nibble to identify them. + * + * @param regs {@code non-null;} the register list in question + * @return {@code >= -1;} the number of words required, or {@code -1} + * if the list couldn't possibly fit in this format + */ + private static int wordCount(RegisterSpecList regs) { + int sz = regs.size(); + + if (sz > MAX_NUM_OPS) { + // It can't possibly fit. + return -1; + } + + int result = 0; + + for (int i = 0; i < sz; i++) { + RegisterSpec one = regs.get(i); + result += one.getCategory(); + /* + * The check below adds (category - 1) to the register, to + * account for the fact that the second half of a + * category-2 register has to be represented explicitly in + * the result. + */ + if (!unsignedFitsInNibble(one.getReg() + one.getCategory() - 1)) { + return -1; + } + } + + return (result <= MAX_NUM_OPS) ? result : -1; + } + + /** + * Returns a register list which is equivalent to the given one, + * except that it splits category-2 registers into two explicit + * entries. This returns the original list if no modification is + * required + * + * @param orig {@code non-null;} the original list + * @return {@code non-null;} the list with the described transformation + */ + private static RegisterSpecList explicitize(RegisterSpecList orig) { + int wordCount = wordCount(orig); + int sz = orig.size(); + + if (wordCount == sz) { + return orig; + } + + RegisterSpecList result = new RegisterSpecList(wordCount); + int wordAt = 0; + + for (int i = 0; i < sz; i++) { + RegisterSpec one = orig.get(i); + result.set(wordAt, one); + if (one.getCategory() == 2) { + result.set(wordAt + 1, + RegisterSpec.make(one.getReg() + 1, Type.VOID)); + wordAt += 2; + } else { + wordAt++; + } + } + + result.setImmutable(); + return result; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form3rc.java b/dexgen/src/com/android/dexgen/dex/code/form/Form3rc.java new file mode 100644 index 0000000..a061c6f --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form3rc.java @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 3rc}. See the instruction format spec + * for details. + */ +public final class Form3rc extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form3rc(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form3rc() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int size = regs.size(); + StringBuilder sb = new StringBuilder(30); + + sb.append("{"); + + switch (size) { + case 0: { + // Nothing to do. + break; + } + case 1: { + sb.append(regs.get(0).regString()); + break; + } + default: { + RegisterSpec lastReg = regs.get(size - 1); + if (lastReg.getCategory() == 2) { + /* + * Add one to properly represent a list-final + * category-2 register. + */ + lastReg = lastReg.withOffset(1); + } + + sb.append(regs.get(0).regString()); + sb.append(".."); + sb.append(lastReg.regString()); + } + } + + sb.append("}, "); + sb.append(cstString(insn)); + + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + if (noteIndices) { + return cstComment(insn); + } else { + return ""; + } + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 3; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!(insn instanceof CstInsn)) { + return false; + } + + CstInsn ci = (CstInsn) insn; + int cpi = ci.getIndex(); + + if (! unsignedFitsInShort(cpi)) { + return false; + } + + Constant cst = ci.getConstant(); + if (!((cst instanceof CstMethodRef) || + (cst instanceof CstType))) { + return false; + } + + RegisterSpecList regs = ci.getRegisters(); + int sz = regs.size(); + + if (sz == 0) { + return true; + } + + int first = regs.get(0).getReg(); + int next = first; + + if (!unsignedFitsInShort(first)) { + return false; + } + + for (int i = 0; i < sz; i++) { + RegisterSpec one = regs.get(i); + if (one.getReg() != next) { + return false; + } + next += one.getCategory(); + } + + return unsignedFitsInByte(next - first); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int sz = regs.size(); + int cpi = ((CstInsn) insn).getIndex(); + int firstReg; + int count; + + if (sz == 0) { + firstReg = 0; + count = 0; + } else { + int lastReg = regs.get(sz - 1).getNextReg(); + firstReg = regs.get(0).getReg(); + count = lastReg - firstReg; + } + + write(out, + opcodeUnit(insn, count), + (short) cpi, + (short) firstReg); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form45cc.java b/dexgen/src/com/android/dexgen/dex/code/form/Form45cc.java new file mode 100644 index 0000000..9a37ba3 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form45cc.java @@ -0,0 +1,193 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 45cc}. See the instruction format spec + * for details. + */ +public final class Form45cc extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form45cc(); + + /** Maximal number of operands */ + private static final int MAX_NUM_OPS = 5; + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form45cc() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = explicitize(insn.getRegisters()); + return regListString(regs) + ", " + cstString(insn); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + if (noteIndices) { + return cstComment(insn); + } else { + return ""; + } + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 4; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!(insn instanceof CstInsn)) { + return false; + } + + CstInsn ci = (CstInsn) insn; + int cpi = ci.getIndex(); + + if (! unsignedFitsInShort(cpi)) { + return false; + } + + Constant cst = ci.getConstant(); + if (!((cst instanceof CstMethodRef) || + (cst instanceof CstType))) { + return false; + } + + RegisterSpecList regs = ci.getRegisters(); + return (wordCount(regs) >= 0); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return Form4rcc.THE_ONE; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + int cpi = ((CstInsn) insn).getIndex(); + RegisterSpecList regs = explicitize(insn.getRegisters()); + int sz = regs.size(); + int r0 = (sz > 0) ? regs.get(0).getReg() : 0; + int r1 = (sz > 1) ? regs.get(1).getReg() : 0; + int r2 = (sz > 2) ? regs.get(2).getReg() : 0; + int r3 = (sz > 3) ? regs.get(3).getReg() : 0; + int r4 = (sz > 4) ? regs.get(4).getReg() : 0; + + write(out, + opcodeUnit(insn, + makeByte(r4, sz)), // encode the fifth operand here + (short) cpi, + codeUnit(r0, r1, r2, r3)); + } + + /** + * Gets the number of words required for the given register list, where + * category-2 values count as two words. Return {@code -1} if the + * list requires more than five words or contains registers that need + * more than a nibble to identify them. + * + * @param regs {@code non-null;} the register list in question + * @return {@code >= -1;} the number of words required, or {@code -1} + * if the list couldn't possibly fit in this format + */ + private static int wordCount(RegisterSpecList regs) { + int sz = regs.size(); + + if (sz > MAX_NUM_OPS) { + // It can't possibly fit. + return -1; + } + + int result = 0; + + for (int i = 0; i < sz; i++) { + RegisterSpec one = regs.get(i); + result += one.getCategory(); + /* + * The check below adds (category - 1) to the register, to + * account for the fact that the second half of a + * category-2 register has to be represented explicitly in + * the result. + */ + if (!unsignedFitsInNibble(one.getReg() + one.getCategory() - 1)) { + return -1; + } + } + + return (result <= MAX_NUM_OPS) ? result : -1; + } + + /** + * Returns a register list which is equivalent to the given one, + * except that it splits category-2 registers into two explicit + * entries. This returns the original list if no modification is + * required + * + * @param orig {@code non-null;} the original list + * @return {@code non-null;} the list with the described transformation + */ + private static RegisterSpecList explicitize(RegisterSpecList orig) { + int wordCount = wordCount(orig); + int sz = orig.size(); + + if (wordCount == sz) { + return orig; + } + + RegisterSpecList result = new RegisterSpecList(wordCount); + int wordAt = 0; + + for (int i = 0; i < sz; i++) { + RegisterSpec one = orig.get(i); + result.set(wordAt, one); + if (one.getCategory() == 2) { + result.set(wordAt + 1, + RegisterSpec.make(one.getReg() + 1, Type.VOID)); + wordAt += 2; + } else { + wordAt++; + } + } + + result.setImmutable(); + return result; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form4rcc.java b/dexgen/src/com/android/dexgen/dex/code/form/Form4rcc.java new file mode 100644 index 0000000..3c43de3 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form4rcc.java @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 4rcc}. See the instruction format spec + * for details. + */ +public final class Form4rcc extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form4rcc(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form4rcc() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int size = regs.size(); + StringBuilder sb = new StringBuilder(30); + + sb.append("{"); + + switch (size) { + case 0: { + // Nothing to do. + break; + } + case 1: { + sb.append(regs.get(0).regString()); + break; + } + default: { + RegisterSpec lastReg = regs.get(size - 1); + if (lastReg.getCategory() == 2) { + /* + * Add one to properly represent a list-final + * category-2 register. + */ + lastReg = lastReg.withOffset(1); + } + + sb.append(regs.get(0).regString()); + sb.append(".."); + sb.append(lastReg.regString()); + } + } + + sb.append("}, "); + sb.append(cstString(insn)); + + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + if (noteIndices) { + return cstComment(insn); + } else { + return ""; + } + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 4; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + if (!(insn instanceof CstInsn)) { + return false; + } + + CstInsn ci = (CstInsn) insn; + int cpi = ci.getIndex(); + + if (! unsignedFitsInShort(cpi)) { + return false; + } + + Constant cst = ci.getConstant(); + if (!((cst instanceof CstMethodRef) || + (cst instanceof CstType))) { + return false; + } + + RegisterSpecList regs = ci.getRegisters(); + int sz = regs.size(); + + if (sz == 0) { + return true; + } + + int first = regs.get(0).getReg(); + int next = first; + + if (!unsignedFitsInShort(first)) { + return false; + } + + for (int i = 0; i < sz; i++) { + RegisterSpec one = regs.get(i); + if (one.getReg() != next) { + return false; + } + next += one.getCategory(); + } + + return unsignedFitsInByte(next - first); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + int sz = regs.size(); + int cpi = ((CstInsn) insn).getIndex(); + int firstReg; + int count; + + if (sz == 0) { + firstReg = 0; + count = 0; + } else { + int lastReg = regs.get(sz - 1).getNextReg(); + firstReg = regs.get(0).getReg(); + count = lastReg - firstReg; + } + + write(out, + opcodeUnit(insn, count), + (short) cpi, + (short) firstReg); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/Form51l.java b/dexgen/src/com/android/dexgen/dex/code/form/Form51l.java new file mode 100644 index 0000000..537eaa9 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/Form51l.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.rop.code.RegisterSpecList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstLiteral64; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format {@code 51l}. See the instruction format spec + * for details. + */ +public final class Form51l extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new Form51l(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private Form51l() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + + return regs.get(0).regString() + ", " + literalBitsString(value); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant(); + return literalBitsComment(value, 64); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + return 5; + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + if (!((insn instanceof CstInsn) && + (regs.size() == 1) && + unsignedFitsInByte(regs.get(0).getReg()))) { + return false; + } + + CstInsn ci = (CstInsn) insn; + Constant cst = ci.getConstant(); + + return (cst instanceof CstLiteral64); + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + RegisterSpecList regs = insn.getRegisters(); + long value = + ((CstLiteral64) ((CstInsn) insn).getConstant()).getLongBits(); + + write(out, + opcodeUnit(insn, regs.get(0).getReg()), + (short) value, + (short) (value >> 16), + (short) (value >> 32), + (short) (value >> 48)); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/code/form/SpecialFormat.java b/dexgen/src/com/android/dexgen/dex/code/form/SpecialFormat.java new file mode 100644 index 0000000..c75f18f --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/code/form/SpecialFormat.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.code.form; + +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.DalvOps; +import com.android.dexgen.dex.code.InsnFormat; +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Instruction format for nonstandard format instructions, which aren't + * generally real instructions but do end up appearing in instruction + * lists. Most of the overridden methods on this class end up throwing + * exceptions, as code should know (implicitly or explicitly) to avoid + * using this class. The one exception is {@link #isCompatible}, which + * always returns {@code true}. + */ +public final class SpecialFormat extends InsnFormat { + /** {@code non-null;} unique instance of this class */ + public static final InsnFormat THE_ONE = new SpecialFormat(); + + /** + * Constructs an instance. This class is not publicly + * instantiable. Use {@link #THE_ONE}. + */ + private SpecialFormat() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public String insnArgString(DalvInsn insn) { + throw new RuntimeException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public String insnCommentString(DalvInsn insn, boolean noteIndices) { + throw new RuntimeException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public int codeSize() { + throw new RuntimeException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public boolean isCompatible(DalvInsn insn) { + return true; + } + + /** {@inheritDoc} */ + @Override + public InsnFormat nextUp() { + throw new RuntimeException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public void writeTo(AnnotatedOutput out, DalvInsn insn) { + throw new RuntimeException("unsupported"); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/AnnotationItem.java b/dexgen/src/com/android/dexgen/dex/file/AnnotationItem.java new file mode 100644 index 0000000..a078bc0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/AnnotationItem.java @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotation; +import com.android.dexgen.rop.annotation.AnnotationVisibility; +import com.android.dexgen.rop.annotation.NameValuePair; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstAnnotation; +import com.android.dexgen.rop.cst.CstArray; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ByteArrayAnnotatedOutput; + +import java.util.Arrays; +import java.util.Comparator; + +/** + * Single annotation, which consists of a type and a set of name-value + * element pairs. + */ +public final class AnnotationItem extends OffsettedItem { + /** annotation visibility constant: visible at build time only */ + private static final int VISIBILITY_BUILD = 0; + + /** annotation visibility constant: visible at runtime */ + private static final int VISIBILITY_RUNTIME = 1; + + /** annotation visibility constant: visible at runtime only to system */ + private static final int VISIBILITY_SYSTEM = 2; + + /** the required alignment for instances of this class */ + private static final int ALIGNMENT = 1; + + /** {@code non-null;} unique instance of {@link #TypeIdSorter} */ + private static final TypeIdSorter TYPE_ID_SORTER = new TypeIdSorter(); + + /** {@code non-null;} the annotation to represent */ + private final Annotation annotation; + + /** + * {@code null-ok;} type reference for the annotation type; set during + * {@link #addContents} + */ + private TypeIdItem type; + + /** + * {@code null-ok;} encoded form, ready for writing to a file; set during + * {@link #place0} + */ + private byte[] encodedForm; + + /** + * Comparator that sorts (outer) instances by type id index. + */ + private static class TypeIdSorter implements Comparator { + /** {@inheritDoc} */ + public int compare(AnnotationItem item1, AnnotationItem item2) { + int index1 = item1.type.getIndex(); + int index2 = item2.type.getIndex(); + + if (index1 < index2) { + return -1; + } else if (index1 > index2) { + return 1; + } + + return 0; + } + } + + /** + * Sorts an array of instances, in place, by type id index, + * ignoring all other aspects of the elements. This is only valid + * to use after type id indices are known. + * + * @param array {@code non-null;} array to sort + */ + public static void sortByTypeIdIndex(AnnotationItem[] array) { + Arrays.sort(array, TYPE_ID_SORTER); + } + + /** + * Constructs an instance. + * + * @param annotation {@code non-null;} annotation to represent + */ + public AnnotationItem(Annotation annotation) { + /* + * The write size isn't known up-front because (the variable-lengthed) + * leb128 type is used to represent some things. + */ + super(ALIGNMENT, -1); + + if (annotation == null) { + throw new NullPointerException("annotation == null"); + } + + this.annotation = annotation; + this.type = null; + this.encodedForm = null; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_ANNOTATION_ITEM; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return annotation.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(OffsettedItem other) { + AnnotationItem otherAnnotation = (AnnotationItem) other; + + return annotation.compareTo(otherAnnotation.annotation); + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + return annotation.toHuman(); + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + type = file.getTypeIds().intern(annotation.getType()); + ValueEncoder.addContents(file, annotation); + } + + /** {@inheritDoc} */ + @Override + protected void place0(Section addedTo, int offset) { + // Encode the data and note the size. + + ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(); + ValueEncoder encoder = new ValueEncoder(addedTo.getFile(), out); + + encoder.writeAnnotation(annotation, false); + encodedForm = out.toByteArray(); + + // Add one for the visibility byte in front of the encoded annotation. + setWriteSize(encodedForm.length + 1); + } + + /** + * Write a (listing file) annotation for this instance to the given + * output, that consumes no bytes of output. This is for annotating + * a reference to this instance at the point of the reference. + * + * @param out {@code non-null;} where to output to + * @param prefix {@code non-null;} prefix for each line of output + */ + public void annotateTo(AnnotatedOutput out, String prefix) { + out.annotate(0, prefix + "visibility: " + + annotation.getVisibility().toHuman()); + out.annotate(0, prefix + "type: " + annotation.getType().toHuman()); + + for (NameValuePair pair : annotation.getNameValuePairs()) { + CstUtf8 name = pair.getName(); + Constant value = pair.getValue(); + + out.annotate(0, prefix + name.toHuman() + ": " + + ValueEncoder.constantToHuman(value)); + } + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + boolean annotates = out.annotates(); + AnnotationVisibility visibility = annotation.getVisibility(); + + if (annotates) { + out.annotate(0, offsetString() + " annotation"); + out.annotate(1, " visibility: VISBILITY_" + visibility); + } + + switch (visibility) { + case BUILD: out.writeByte(VISIBILITY_BUILD); break; + case RUNTIME: out.writeByte(VISIBILITY_RUNTIME); break; + case SYSTEM: out.writeByte(VISIBILITY_SYSTEM); break; + default: { + // EMBEDDED shouldn't appear at the top level. + throw new RuntimeException("shouldn't happen"); + } + } + + if (annotates) { + /* + * The output is to be annotated, so redo the work previously + * done by place0(), except this time annotations will actually + * get emitted. + */ + ValueEncoder encoder = new ValueEncoder(file, out); + encoder.writeAnnotation(annotation, true); + } else { + out.write(encodedForm); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/AnnotationSetItem.java b/dexgen/src/com/android/dexgen/dex/file/AnnotationSetItem.java new file mode 100644 index 0000000..46ea2f0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/AnnotationSetItem.java @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotation; +import com.android.dexgen.rop.annotation.Annotations; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * Set of annotations, where no annotation type appears more than once. + */ +public final class AnnotationSetItem extends OffsettedItem { + /** the required alignment for instances of this class */ + private static final int ALIGNMENT = 4; + + /** the size of an entry int the set: one {@code uint} */ + private static final int ENTRY_WRITE_SIZE = 4; + + /** {@code non-null;} the set of annotations */ + private final Annotations annotations; + + /** + * {@code non-null;} set of annotations as individual items in an array. + * Note: The contents have to get sorted by type id before + * writing. + */ + private final AnnotationItem[] items; + + /** + * Constructs an instance. + * + * @param annotations {@code non-null;} set of annotations + */ + public AnnotationSetItem(Annotations annotations) { + super(ALIGNMENT, writeSize(annotations)); + + this.annotations = annotations; + this.items = new AnnotationItem[annotations.size()]; + + int at = 0; + for (Annotation a : annotations.getAnnotations()) { + items[at] = new AnnotationItem(a); + at++; + } + } + + /** + * Gets the write size for the given set. + * + * @param annotations {@code non-null;} the set + * @return {@code > 0;} the write size + */ + private static int writeSize(Annotations annotations) { + // This includes an int size at the start of the list. + + try { + return (annotations.size() * ENTRY_WRITE_SIZE) + 4; + } catch (NullPointerException ex) { + // Elucidate the exception. + throw new NullPointerException("list == null"); + } + } + + /** + * Gets the underlying annotations of this instance + * + * @return {@code non-null;} the annotations + */ + public Annotations getAnnotations() { + return annotations; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return annotations.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(OffsettedItem other) { + AnnotationSetItem otherSet = (AnnotationSetItem) other; + + return annotations.compareTo(otherSet.annotations); + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_ANNOTATION_SET_ITEM; + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + return annotations.toString(); + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + MixedItemSection byteData = file.getByteData(); + int size = items.length; + + for (int i = 0; i < size; i++) { + items[i] = byteData.intern(items[i]); + } + } + + /** {@inheritDoc} */ + @Override + protected void place0(Section addedTo, int offset) { + // Sort the array to be in type id index order. + AnnotationItem.sortByTypeIdIndex(items); + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + boolean annotates = out.annotates(); + int size = items.length; + + if (annotates) { + out.annotate(0, offsetString() + " annotation set"); + out.annotate(4, " size: " + Hex.u4(size)); + } + + out.writeInt(size); + + for (int i = 0; i < size; i++) { + AnnotationItem item = items[i]; + int offset = item.getAbsoluteOffset(); + + if (annotates) { + out.annotate(4, " entries[" + Integer.toHexString(i) + "]: " + + Hex.u4(offset)); + items[i].annotateTo(out, " "); + } + + out.writeInt(offset); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/AnnotationSetRefItem.java b/dexgen/src/com/android/dexgen/dex/file/AnnotationSetRefItem.java new file mode 100644 index 0000000..b876ce0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/AnnotationSetRefItem.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * Indirect reference to an {@link AnnotationSetItem}. + */ +public final class AnnotationSetRefItem extends OffsettedItem { + /** the required alignment for instances of this class */ + private static final int ALIGNMENT = 4; + + /** write size of this class, in bytes */ + private static final int WRITE_SIZE = 4; + + /** {@code non-null;} the annotation set to refer to */ + private AnnotationSetItem annotations; + + /** + * Constructs an instance. + * + * @param annotations {@code non-null;} the annotation set to refer to + */ + public AnnotationSetRefItem(AnnotationSetItem annotations) { + super(ALIGNMENT, WRITE_SIZE); + + if (annotations == null) { + throw new NullPointerException("annotations == null"); + } + + this.annotations = annotations; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_ANNOTATION_SET_REF_ITEM; + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + MixedItemSection wordData = file.getWordData(); + + annotations = wordData.intern(annotations); + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + return annotations.toHuman(); + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + int annotationsOff = annotations.getAbsoluteOffset(); + + if (out.annotates()) { + out.annotate(4, " annotations_off: " + Hex.u4(annotationsOff)); + } + + out.writeInt(annotationsOff); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/AnnotationUtils.java b/dexgen/src/com/android/dexgen/dex/file/AnnotationUtils.java new file mode 100644 index 0000000..111ba8a --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/AnnotationUtils.java @@ -0,0 +1,254 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotation; +import com.android.dexgen.rop.annotation.NameValuePair; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstAnnotation; +import com.android.dexgen.rop.cst.CstArray; +import com.android.dexgen.rop.cst.CstInteger; +import com.android.dexgen.rop.cst.CstKnownNull; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; + +import java.util.ArrayList; + +import static com.android.dexgen.rop.annotation.AnnotationVisibility.*; + +/** + * Utility class for dealing with annotations. + */ +public final class AnnotationUtils { + /** {@code non-null;} type for {@code AnnotationDefault} annotations */ + private static final CstType ANNOTATION_DEFAULT_TYPE = + CstType.intern(Type.intern("Ldalvik/annotation/AnnotationDefault;")); + + /** {@code non-null;} type for {@code EnclosingClass} annotations */ + private static final CstType ENCLOSING_CLASS_TYPE = + CstType.intern(Type.intern("Ldalvik/annotation/EnclosingClass;")); + + /** {@code non-null;} type for {@code EnclosingMethod} annotations */ + private static final CstType ENCLOSING_METHOD_TYPE = + CstType.intern(Type.intern("Ldalvik/annotation/EnclosingMethod;")); + + /** {@code non-null;} type for {@code InnerClass} annotations */ + private static final CstType INNER_CLASS_TYPE = + CstType.intern(Type.intern("Ldalvik/annotation/InnerClass;")); + + /** {@code non-null;} type for {@code MemberClasses} annotations */ + private static final CstType MEMBER_CLASSES_TYPE = + CstType.intern(Type.intern("Ldalvik/annotation/MemberClasses;")); + + /** {@code non-null;} type for {@code Signature} annotations */ + private static final CstType SIGNATURE_TYPE = + CstType.intern(Type.intern("Ldalvik/annotation/Signature;")); + + /** {@code non-null;} type for {@code Throws} annotations */ + private static final CstType THROWS_TYPE = + CstType.intern(Type.intern("Ldalvik/annotation/Throws;")); + + /** {@code non-null;} the UTF-8 constant {@code "accessFlags"} */ + private static final CstUtf8 ACCESS_FLAGS_UTF = new CstUtf8("accessFlags"); + + /** {@code non-null;} the UTF-8 constant {@code "name"} */ + private static final CstUtf8 NAME_UTF = new CstUtf8("name"); + + /** {@code non-null;} the UTF-8 constant {@code "value"} */ + private static final CstUtf8 VALUE_UTF = new CstUtf8("value"); + + /** + * This class is uninstantiable. + */ + private AnnotationUtils() { + // This space intentionally left blank. + } + + /** + * Constructs a standard {@code AnnotationDefault} annotation. + * + * @param defaults {@code non-null;} the defaults, itself as an annotation + * @return {@code non-null;} the constructed annotation + */ + public static Annotation makeAnnotationDefault(Annotation defaults) { + Annotation result = new Annotation(ANNOTATION_DEFAULT_TYPE, SYSTEM); + + result.put(new NameValuePair(VALUE_UTF, new CstAnnotation(defaults))); + result.setImmutable(); + return result; + } + + /** + * Constructs a standard {@code EnclosingClass} annotation. + * + * @param clazz {@code non-null;} the enclosing class + * @return {@code non-null;} the annotation + */ + public static Annotation makeEnclosingClass(CstType clazz) { + Annotation result = new Annotation(ENCLOSING_CLASS_TYPE, SYSTEM); + + result.put(new NameValuePair(VALUE_UTF, clazz)); + result.setImmutable(); + return result; + } + + /** + * Constructs a standard {@code EnclosingMethod} annotation. + * + * @param method {@code non-null;} the enclosing method + * @return {@code non-null;} the annotation + */ + public static Annotation makeEnclosingMethod(CstMethodRef method) { + Annotation result = new Annotation(ENCLOSING_METHOD_TYPE, SYSTEM); + + result.put(new NameValuePair(VALUE_UTF, method)); + result.setImmutable(); + return result; + } + + /** + * Constructs a standard {@code InnerClass} annotation. + * + * @param name {@code null-ok;} the original name of the class, or + * {@code null} to represent an anonymous class + * @param accessFlags the original access flags + * @return {@code non-null;} the annotation + */ + public static Annotation makeInnerClass(CstUtf8 name, int accessFlags) { + Annotation result = new Annotation(INNER_CLASS_TYPE, SYSTEM); + Constant nameCst = + (name != null) ? new CstString(name) : CstKnownNull.THE_ONE; + + result.put(new NameValuePair(NAME_UTF, nameCst)); + result.put(new NameValuePair(ACCESS_FLAGS_UTF, + CstInteger.make(accessFlags))); + result.setImmutable(); + return result; + } + + /** + * Constructs a standard {@code MemberClasses} annotation. + * + * @param types {@code non-null;} the list of (the types of) the member classes + * @return {@code non-null;} the annotation + */ + public static Annotation makeMemberClasses(TypeList types) { + CstArray array = makeCstArray(types); + Annotation result = new Annotation(MEMBER_CLASSES_TYPE, SYSTEM); + result.put(new NameValuePair(VALUE_UTF, array)); + result.setImmutable(); + return result; + } + + /** + * Constructs a standard {@code Signature} annotation. + * + * @param signature {@code non-null;} the signature string + * @return {@code non-null;} the annotation + */ + public static Annotation makeSignature(CstUtf8 signature) { + Annotation result = new Annotation(SIGNATURE_TYPE, SYSTEM); + + /* + * Split the string into pieces that are likely to be common + * across many signatures and the rest of the file. + */ + + String raw = signature.getString(); + int rawLength = raw.length(); + ArrayList pieces = new ArrayList(20); + + for (int at = 0; at < rawLength; /*at*/) { + char c = raw.charAt(at); + int endAt = at + 1; + if (c == 'L') { + // Scan to ';' or '<'. Consume ';' but not '<'. + while (endAt < rawLength) { + c = raw.charAt(endAt); + if (c == ';') { + endAt++; + break; + } else if (c == '<') { + break; + } + endAt++; + } + } else { + // Scan to 'L' without consuming it. + while (endAt < rawLength) { + c = raw.charAt(endAt); + if (c == 'L') { + break; + } + endAt++; + } + } + + pieces.add(raw.substring(at, endAt)); + at = endAt; + } + + int size = pieces.size(); + CstArray.List list = new CstArray.List(size); + + for (int i = 0; i < size; i++) { + list.set(i, new CstString(pieces.get(i))); + } + + list.setImmutable(); + + result.put(new NameValuePair(VALUE_UTF, new CstArray(list))); + result.setImmutable(); + return result; + } + + /** + * Constructs a standard {@code Throws} annotation. + * + * @param types {@code non-null;} the list of thrown types + * @return {@code non-null;} the annotation + */ + public static Annotation makeThrows(TypeList types) { + CstArray array = makeCstArray(types); + Annotation result = new Annotation(THROWS_TYPE, SYSTEM); + result.put(new NameValuePair(VALUE_UTF, array)); + result.setImmutable(); + return result; + } + + /** + * Converts a {@link TypeList} to a {@link CstArray}. + * + * @param types {@code non-null;} the type list + * @return {@code non-null;} the corresponding array constant + */ + private static CstArray makeCstArray(TypeList types) { + int size = types.size(); + CstArray.List list = new CstArray.List(size); + + for (int i = 0; i < size; i++) { + list.set(i, CstType.intern(types.getType(i))); + } + + list.setImmutable(); + return new CstArray(list); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/AnnotationsDirectoryItem.java b/dexgen/src/com/android/dexgen/dex/file/AnnotationsDirectoryItem.java new file mode 100644 index 0000000..860c16d --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/AnnotationsDirectoryItem.java @@ -0,0 +1,385 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotations; +import com.android.dexgen.rop.annotation.AnnotationsList; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collections; + +/** + * Per-class directory of annotations. + */ +public final class AnnotationsDirectoryItem extends OffsettedItem { + /** the required alignment for instances of this class */ + private static final int ALIGNMENT = 4; + + /** write size of this class's header, in bytes */ + private static final int HEADER_SIZE = 16; + + /** write size of a list element, in bytes */ + private static final int ELEMENT_SIZE = 8; + + /** {@code null-ok;} the class-level annotations, if any */ + private AnnotationSetItem classAnnotations; + + /** {@code null-ok;} the annotated fields, if any */ + private ArrayList fieldAnnotations; + + /** {@code null-ok;} the annotated methods, if any */ + private ArrayList methodAnnotations; + + /** {@code null-ok;} the annotated parameters, if any */ + private ArrayList parameterAnnotations; + + /** + * Constructs an empty instance. + */ + public AnnotationsDirectoryItem() { + super(ALIGNMENT, -1); + + classAnnotations = null; + fieldAnnotations = null; + methodAnnotations = null; + parameterAnnotations = null; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_ANNOTATIONS_DIRECTORY_ITEM; + } + + /** + * Returns whether this item is empty (has no contents). + * + * @return {@code true} if this item is empty, or {@code false} + * if not + */ + public boolean isEmpty() { + return (classAnnotations == null) && + (fieldAnnotations == null) && + (methodAnnotations == null) && + (parameterAnnotations == null); + } + + /** + * Returns whether this item is a candidate for interning. The only + * interning candidates are ones that only have a non-null + * set of class annotations, with no other lists. + * + * @return {@code true} if this is an interning candidate, or + * {@code false} if not + */ + public boolean isInternable() { + return (classAnnotations != null) && + (fieldAnnotations == null) && + (methodAnnotations == null) && + (parameterAnnotations == null); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + if (classAnnotations == null) { + return 0; + } + + return classAnnotations.hashCode(); + } + + /** + * {@inheritDoc} + * + *

Note:: This throws an exception if this item is not + * internable.

+ * + * @see #isInternable + */ + @Override + public int compareTo0(OffsettedItem other) { + if (! isInternable()) { + throw new UnsupportedOperationException("uninternable instance"); + } + + AnnotationsDirectoryItem otherDirectory = + (AnnotationsDirectoryItem) other; + return classAnnotations.compareTo(otherDirectory.classAnnotations); + } + + /** + * Sets the direct annotations on this instance. These are annotations + * made on the class, per se, as opposed to on one of its members. + * It is only valid to call this method at most once per instance. + * + * @param annotations {@code non-null;} annotations to set for this class + */ + public void setClassAnnotations(Annotations annotations) { + if (annotations == null) { + throw new NullPointerException("annotations == null"); + } + + if (classAnnotations != null) { + throw new UnsupportedOperationException( + "class annotations already set"); + } + + classAnnotations = new AnnotationSetItem(annotations); + } + + /** + * Adds a field annotations item to this instance. + * + * @param field {@code non-null;} field in question + * @param annotations {@code non-null;} associated annotations to add + */ + public void addFieldAnnotations(CstFieldRef field, + Annotations annotations) { + if (fieldAnnotations == null) { + fieldAnnotations = new ArrayList(); + } + + fieldAnnotations.add(new FieldAnnotationStruct(field, + new AnnotationSetItem(annotations))); + } + + /** + * Adds a method annotations item to this instance. + * + * @param method {@code non-null;} method in question + * @param annotations {@code non-null;} associated annotations to add + */ + public void addMethodAnnotations(CstMethodRef method, + Annotations annotations) { + if (methodAnnotations == null) { + methodAnnotations = new ArrayList(); + } + + methodAnnotations.add(new MethodAnnotationStruct(method, + new AnnotationSetItem(annotations))); + } + + /** + * Adds a parameter annotations item to this instance. + * + * @param method {@code non-null;} method in question + * @param list {@code non-null;} associated list of annotation sets to add + */ + public void addParameterAnnotations(CstMethodRef method, + AnnotationsList list) { + if (parameterAnnotations == null) { + parameterAnnotations = new ArrayList(); + } + + parameterAnnotations.add(new ParameterAnnotationStruct(method, list)); + } + + /** + * Gets the method annotations for a given method, if any. This is + * meant for use by debugging / dumping code. + * + * @param method {@code non-null;} the method + * @return {@code null-ok;} the method annotations, if any + */ + public Annotations getMethodAnnotations(CstMethodRef method) { + if (methodAnnotations == null) { + return null; + } + + for (MethodAnnotationStruct item : methodAnnotations) { + if (item.getMethod().equals(method)) { + return item.getAnnotations(); + } + } + + return null; + } + + /** + * Gets the parameter annotations for a given method, if any. This is + * meant for use by debugging / dumping code. + * + * @param method {@code non-null;} the method + * @return {@code null-ok;} the parameter annotations, if any + */ + public AnnotationsList getParameterAnnotations(CstMethodRef method) { + if (parameterAnnotations == null) { + return null; + } + + for (ParameterAnnotationStruct item : parameterAnnotations) { + if (item.getMethod().equals(method)) { + return item.getAnnotationsList(); + } + } + + return null; + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + MixedItemSection wordData = file.getWordData(); + + if (classAnnotations != null) { + classAnnotations = wordData.intern(classAnnotations); + } + + if (fieldAnnotations != null) { + for (FieldAnnotationStruct item : fieldAnnotations) { + item.addContents(file); + } + } + + if (methodAnnotations != null) { + for (MethodAnnotationStruct item : methodAnnotations) { + item.addContents(file); + } + } + + if (parameterAnnotations != null) { + for (ParameterAnnotationStruct item : parameterAnnotations) { + item.addContents(file); + } + } + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + throw new RuntimeException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + protected void place0(Section addedTo, int offset) { + // We just need to set the write size here. + + int elementCount = listSize(fieldAnnotations) + + listSize(methodAnnotations) + listSize(parameterAnnotations); + setWriteSize(HEADER_SIZE + (elementCount * ELEMENT_SIZE)); + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + boolean annotates = out.annotates(); + int classOff = OffsettedItem.getAbsoluteOffsetOr0(classAnnotations); + int fieldsSize = listSize(fieldAnnotations); + int methodsSize = listSize(methodAnnotations); + int parametersSize = listSize(parameterAnnotations); + + if (annotates) { + out.annotate(0, offsetString() + " annotations directory"); + out.annotate(4, " class_annotations_off: " + Hex.u4(classOff)); + out.annotate(4, " fields_size: " + + Hex.u4(fieldsSize)); + out.annotate(4, " methods_size: " + + Hex.u4(methodsSize)); + out.annotate(4, " parameters_size: " + + Hex.u4(parametersSize)); + } + + out.writeInt(classOff); + out.writeInt(fieldsSize); + out.writeInt(methodsSize); + out.writeInt(parametersSize); + + if (fieldsSize != 0) { + Collections.sort(fieldAnnotations); + if (annotates) { + out.annotate(0, " fields:"); + } + for (FieldAnnotationStruct item : fieldAnnotations) { + item.writeTo(file, out); + } + } + + if (methodsSize != 0) { + Collections.sort(methodAnnotations); + if (annotates) { + out.annotate(0, " methods:"); + } + for (MethodAnnotationStruct item : methodAnnotations) { + item.writeTo(file, out); + } + } + + if (parametersSize != 0) { + Collections.sort(parameterAnnotations); + if (annotates) { + out.annotate(0, " parameters:"); + } + for (ParameterAnnotationStruct item : parameterAnnotations) { + item.writeTo(file, out); + } + } + } + + /** + * Gets the list size of the given list, or {@code 0} if given + * {@code null}. + * + * @param list {@code null-ok;} the list in question + * @return {@code >= 0;} its size + */ + private static int listSize(ArrayList list) { + if (list == null) { + return 0; + } + + return list.size(); + } + + /** + * Prints out the contents of this instance, in a debugging-friendly + * way. This is meant to be called from {@link ClassDefItem#debugPrint}. + * + * @param out {@code non-null;} where to output to + */ + /*package*/ void debugPrint(PrintWriter out) { + if (classAnnotations != null) { + out.println(" class annotations: " + classAnnotations); + } + + if (fieldAnnotations != null) { + out.println(" field annotations:"); + for (FieldAnnotationStruct item : fieldAnnotations) { + out.println(" " + item.toHuman()); + } + } + + if (methodAnnotations != null) { + out.println(" method annotations:"); + for (MethodAnnotationStruct item : methodAnnotations) { + out.println(" " + item.toHuman()); + } + } + + if (parameterAnnotations != null) { + out.println(" parameter annotations:"); + for (ParameterAnnotationStruct item : parameterAnnotations) { + out.println(" " + item.toHuman()); + } + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/CatchStructs.java b/dexgen/src/com/android/dexgen/dex/file/CatchStructs.java new file mode 100644 index 0000000..df9a847 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/CatchStructs.java @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.dex.code.CatchHandlerList; +import com.android.dexgen.dex.code.CatchTable; +import com.android.dexgen.dex.code.DalvCode; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ByteArrayAnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.io.PrintWriter; +import java.util.Map; +import java.util.TreeMap; + +/** + * List of exception handlers (tuples of covered range, catch type, + * handler address) for a particular piece of code. Instances of this + * class correspond to a {@code try_item[]} and a + * {@code catch_handler_item[]}. + */ +public final class CatchStructs { + /** + * the size of a {@code try_item}: a {@code uint} + * and two {@code ushort}s + */ + private static final int TRY_ITEM_WRITE_SIZE = 4 + (2 * 2); + + /** {@code non-null;} code that contains the catches */ + private final DalvCode code; + + /** + * {@code null-ok;} the underlying table; set in + * {@link #finishProcessingIfNecessary} + */ + private CatchTable table; + + /** + * {@code null-ok;} the encoded handler list, if calculated; set in + * {@link #encode} + */ + private byte[] encodedHandlers; + + /** + * length of the handlers header (encoded size), if known; used for + * annotation + */ + private int encodedHandlerHeaderSize; + + /** + * {@code null-ok;} map from handler lists to byte offsets, if calculated; set in + * {@link #encode} + */ + private TreeMap handlerOffsets; + + /** + * Constructs an instance. + * + * @param code {@code non-null;} code that contains the catches + */ + public CatchStructs(DalvCode code) { + this.code = code; + this.table = null; + this.encodedHandlers = null; + this.encodedHandlerHeaderSize = 0; + this.handlerOffsets = null; + } + + /** + * Finish processing the catches, if necessary. + */ + private void finishProcessingIfNecessary() { + if (table == null) { + table = code.getCatches(); + } + } + + /** + * Gets the size of the tries list, in entries. + * + * @return {@code >= 0;} the tries list size + */ + public int triesSize() { + finishProcessingIfNecessary(); + return table.size(); + } + + /** + * Does a human-friendly dump of this instance. + * + * @param out {@code non-null;} where to dump + * @param prefix {@code non-null;} prefix to attach to each line of output + */ + public void debugPrint(PrintWriter out, String prefix) { + annotateEntries(prefix, out, null); + } + + /** + * Encodes the handler lists. + * + * @param file {@code non-null;} file this instance is part of + */ + public void encode(DexFile file) { + finishProcessingIfNecessary(); + + TypeIdsSection typeIds = file.getTypeIds(); + int size = table.size(); + + handlerOffsets = new TreeMap(); + + /* + * First add a map entry for each unique list. The tree structure + * will ensure they are sorted when we reiterate later. + */ + for (int i = 0; i < size; i++) { + handlerOffsets.put(table.get(i).getHandlers(), null); + } + + if (handlerOffsets.size() > 65535) { + throw new UnsupportedOperationException( + "too many catch handlers"); + } + + ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(); + + // Write out the handlers "header" consisting of its size in entries. + encodedHandlerHeaderSize = + out.writeUnsignedLeb128(handlerOffsets.size()); + + // Now write the lists out in order, noting the offset of each. + for (Map.Entry mapping : + handlerOffsets.entrySet()) { + CatchHandlerList list = mapping.getKey(); + int listSize = list.size(); + boolean catchesAll = list.catchesAll(); + + // Set the offset before we do any writing. + mapping.setValue(out.getCursor()); + + if (catchesAll) { + // A size <= 0 means that the list ends with a catch-all. + out.writeSignedLeb128(-(listSize - 1)); + listSize--; + } else { + out.writeSignedLeb128(listSize); + } + + for (int i = 0; i < listSize; i++) { + CatchHandlerList.Entry entry = list.get(i); + out.writeUnsignedLeb128( + typeIds.indexOf(entry.getExceptionType())); + out.writeUnsignedLeb128(entry.getHandler()); + } + + if (catchesAll) { + out.writeUnsignedLeb128(list.get(listSize).getHandler()); + } + } + + encodedHandlers = out.toByteArray(); + } + + /** + * Gets the write size of this instance, in bytes. + * + * @return {@code >= 0;} the write size + */ + public int writeSize() { + return (triesSize() * TRY_ITEM_WRITE_SIZE) + + + encodedHandlers.length; + } + + /** + * Writes this instance to the given stream. + * + * @param file {@code non-null;} file this instance is part of + * @param out {@code non-null;} where to write to + */ + public void writeTo(DexFile file, AnnotatedOutput out) { + finishProcessingIfNecessary(); + + if (out.annotates()) { + annotateEntries(" ", null, out); + } + + int tableSize = table.size(); + for (int i = 0; i < tableSize; i++) { + CatchTable.Entry one = table.get(i); + int start = one.getStart(); + int end = one.getEnd(); + int insnCount = end - start; + + if (insnCount >= 65536) { + throw new UnsupportedOperationException( + "bogus exception range: " + Hex.u4(start) + ".." + + Hex.u4(end)); + } + + out.writeInt(start); + out.writeShort(insnCount); + out.writeShort(handlerOffsets.get(one.getHandlers())); + } + + out.write(encodedHandlers); + } + + /** + * Helper method to annotate or simply print the exception handlers. + * Only one of {@code printTo} or {@code annotateTo} should + * be non-null. + * + * @param prefix {@code non-null;} prefix for each line + * @param printTo {@code null-ok;} where to print to + * @param annotateTo {@code null-ok;} where to consume bytes and annotate to + */ + private void annotateEntries(String prefix, PrintWriter printTo, + AnnotatedOutput annotateTo) { + finishProcessingIfNecessary(); + + boolean consume = (annotateTo != null); + int amt1 = consume ? 6 : 0; + int amt2 = consume ? 2 : 0; + int size = table.size(); + String subPrefix = prefix + " "; + + if (consume) { + annotateTo.annotate(0, prefix + "tries:"); + } else { + printTo.println(prefix + "tries:"); + } + + for (int i = 0; i < size; i++) { + CatchTable.Entry entry = table.get(i); + CatchHandlerList handlers = entry.getHandlers(); + String s1 = subPrefix + "try " + Hex.u2or4(entry.getStart()) + + ".." + Hex.u2or4(entry.getEnd()); + String s2 = handlers.toHuman(subPrefix, ""); + + if (consume) { + annotateTo.annotate(amt1, s1); + annotateTo.annotate(amt2, s2); + } else { + printTo.println(s1); + printTo.println(s2); + } + } + + if (! consume) { + // Only emit the handler lists if we are consuming bytes. + return; + } + + annotateTo.annotate(0, prefix + "handlers:"); + annotateTo.annotate(encodedHandlerHeaderSize, + subPrefix + "size: " + Hex.u2(handlerOffsets.size())); + + int lastOffset = 0; + CatchHandlerList lastList = null; + + for (Map.Entry mapping : + handlerOffsets.entrySet()) { + CatchHandlerList list = mapping.getKey(); + int offset = mapping.getValue(); + + if (lastList != null) { + annotateAndConsumeHandlers(lastList, lastOffset, + offset - lastOffset, subPrefix, printTo, annotateTo); + } + + lastList = list; + lastOffset = offset; + } + + annotateAndConsumeHandlers(lastList, lastOffset, + encodedHandlers.length - lastOffset, + subPrefix, printTo, annotateTo); + } + + /** + * Helper for {@link #annotateEntries} to annotate a catch handler list + * while consuming it. + * + * @param handlers {@code non-null;} handlers to annotate + * @param offset {@code >= 0;} the offset of this handler + * @param size {@code >= 1;} the number of bytes the handlers consume + * @param prefix {@code non-null;} prefix for each line + * @param printTo {@code null-ok;} where to print to + * @param annotateTo {@code non-null;} where to annotate to + */ + private static void annotateAndConsumeHandlers(CatchHandlerList handlers, + int offset, int size, String prefix, PrintWriter printTo, + AnnotatedOutput annotateTo) { + String s = handlers.toHuman(prefix, Hex.u2(offset) + ": "); + + if (printTo != null) { + printTo.println(s); + } + + annotateTo.annotate(size, s); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/ClassDataItem.java b/dexgen/src/com/android/dexgen/dex/file/ClassDataItem.java new file mode 100644 index 0000000..c46a4a5 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/ClassDataItem.java @@ -0,0 +1,429 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstArray; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.Zeroes; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ByteArrayAnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.Writers; + +import java.io.PrintWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.HashMap; + +/** + * Representation of all the parts of a Dalvik class that are generally + * "inflated" into an in-memory representation at runtime. Instances of + * this class are represented in a compact streamable form in a + * {@code dex} file, as opposed to a random-access form. + */ +public final class ClassDataItem extends OffsettedItem { + /** {@code non-null;} what class this data is for, just for listing generation */ + private final CstType thisClass; + + /** {@code non-null;} list of static fields */ + private final ArrayList staticFields; + + /** {@code non-null;} list of initial values for static fields */ + private final HashMap staticValues; + + /** {@code non-null;} list of instance fields */ + private final ArrayList instanceFields; + + /** {@code non-null;} list of direct methods */ + private final ArrayList directMethods; + + /** {@code non-null;} list of virtual methods */ + private final ArrayList virtualMethods; + + /** {@code null-ok;} static initializer list; set in {@link #addContents} */ + private CstArray staticValuesConstant; + + /** + * {@code null-ok;} encoded form, ready for writing to a file; set during + * {@link #place0} + */ + private byte[] encodedForm; + + /** + * Constructs an instance. Its sets of members are initially + * empty. + * + * @param thisClass {@code non-null;} what class this data is for, just + * for listing generation + */ + public ClassDataItem(CstType thisClass) { + super(1, -1); + + if (thisClass == null) { + throw new NullPointerException("thisClass == null"); + } + + this.thisClass = thisClass; + this.staticFields = new ArrayList(20); + this.staticValues = new HashMap(40); + this.instanceFields = new ArrayList(20); + this.directMethods = new ArrayList(20); + this.virtualMethods = new ArrayList(20); + this.staticValuesConstant = null; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_CLASS_DATA_ITEM; + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + return toString(); + } + + /** + * Returns whether this instance is empty. + * + * @return {@code true} if this instance is empty or + * {@code false} if at least one element has been added to it + */ + public boolean isEmpty() { + return staticFields.isEmpty() && instanceFields.isEmpty() + && directMethods.isEmpty() && virtualMethods.isEmpty(); + } + + /** + * Adds a static field. + * + * @param field {@code non-null;} the field to add + * @param value {@code null-ok;} initial value for the field, if any + */ + public void addStaticField(EncodedField field, Constant value) { + if (field == null) { + throw new NullPointerException("field == null"); + } + + if (staticValuesConstant != null) { + throw new UnsupportedOperationException( + "static fields already sorted"); + } + + staticFields.add(field); + staticValues.put(field, value); + } + + /** + * Adds an instance field. + * + * @param field {@code non-null;} the field to add + */ + public void addInstanceField(EncodedField field) { + if (field == null) { + throw new NullPointerException("field == null"); + } + + instanceFields.add(field); + } + + /** + * Adds a direct ({@code static} and/or {@code private}) method. + * + * @param method {@code non-null;} the method to add + */ + public void addDirectMethod(EncodedMethod method) { + if (method == null) { + throw new NullPointerException("method == null"); + } + + directMethods.add(method); + } + + /** + * Adds a virtual method. + * + * @param method {@code non-null;} the method to add + */ + public void addVirtualMethod(EncodedMethod method) { + if (method == null) { + throw new NullPointerException("method == null"); + } + + virtualMethods.add(method); + } + + /** + * Gets all the methods in this class. The returned list is not linked + * in any way to the underlying lists contained in this instance, but + * the objects contained in the list are shared. + * + * @return {@code non-null;} list of all methods + */ + public ArrayList getMethods() { + int sz = directMethods.size() + virtualMethods.size(); + ArrayList result = new ArrayList(sz); + + result.addAll(directMethods); + result.addAll(virtualMethods); + + return result; + } + + + /** + * Prints out the contents of this instance, in a debugging-friendly + * way. + * + * @param out {@code non-null;} where to output to + * @param verbose whether to be verbose with the output + */ + public void debugPrint(Writer out, boolean verbose) { + PrintWriter pw = Writers.printWriterFor(out); + + int sz = staticFields.size(); + for (int i = 0; i < sz; i++) { + pw.println(" sfields[" + i + "]: " + staticFields.get(i)); + } + + sz = instanceFields.size(); + for (int i = 0; i < sz; i++) { + pw.println(" ifields[" + i + "]: " + instanceFields.get(i)); + } + + sz = directMethods.size(); + for (int i = 0; i < sz; i++) { + pw.println(" dmeths[" + i + "]:"); + directMethods.get(i).debugPrint(pw, verbose); + } + + sz = virtualMethods.size(); + for (int i = 0; i < sz; i++) { + pw.println(" vmeths[" + i + "]:"); + virtualMethods.get(i).debugPrint(pw, verbose); + } + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + if (!staticFields.isEmpty()) { + getStaticValuesConstant(); // Force the fields to be sorted. + for (EncodedField field : staticFields) { + field.addContents(file); + } + } + + if (!instanceFields.isEmpty()) { + Collections.sort(instanceFields); + for (EncodedField field : instanceFields) { + field.addContents(file); + } + } + + if (!directMethods.isEmpty()) { + Collections.sort(directMethods); + for (EncodedMethod method : directMethods) { + method.addContents(file); + } + } + + if (!virtualMethods.isEmpty()) { + Collections.sort(virtualMethods); + for (EncodedMethod method : virtualMethods) { + method.addContents(file); + } + } + } + + /** + * Gets a {@link CstArray} corresponding to {@link #staticValues} if + * it contains any non-zero non-{@code null} values. + * + * @return {@code null-ok;} the corresponding constant or {@code null} if + * there are no values to encode + */ + public CstArray getStaticValuesConstant() { + if ((staticValuesConstant == null) && (staticFields.size() != 0)) { + staticValuesConstant = makeStaticValuesConstant(); + } + + return staticValuesConstant; + } + + /** + * Gets a {@link CstArray} corresponding to {@link #staticValues} if + * it contains any non-zero non-{@code null} values. + * + * @return {@code null-ok;} the corresponding constant or {@code null} if + * there are no values to encode + */ + private CstArray makeStaticValuesConstant() { + // First sort the statics into their final order. + Collections.sort(staticFields); + + /* + * Get the size of staticValues minus any trailing zeros/nulls (both + * nulls per se as well as instances of CstKnownNull). + */ + + int size = staticFields.size(); + while (size > 0) { + EncodedField field = staticFields.get(size - 1); + Constant cst = staticValues.get(field); + if (cst instanceof CstLiteralBits) { + // Note: CstKnownNull extends CstLiteralBits. + if (((CstLiteralBits) cst).getLongBits() != 0) { + break; + } + } else if (cst != null) { + break; + } + size--; + } + + if (size == 0) { + return null; + } + + // There is something worth encoding, so build up a result. + + CstArray.List list = new CstArray.List(size); + for (int i = 0; i < size; i++) { + EncodedField field = staticFields.get(i); + Constant cst = staticValues.get(field); + if (cst == null) { + cst = Zeroes.zeroFor(field.getRef().getType()); + } + list.set(i, cst); + } + list.setImmutable(); + + return new CstArray(list); + } + + /** {@inheritDoc} */ + @Override + protected void place0(Section addedTo, int offset) { + // Encode the data and note the size. + + ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(); + + encodeOutput(addedTo.getFile(), out); + encodedForm = out.toByteArray(); + setWriteSize(encodedForm.length); + } + + /** + * Writes out the encoded form of this instance. + * + * @param file {@code non-null;} file this instance is part of + * @param out {@code non-null;} where to write to + */ + private void encodeOutput(DexFile file, AnnotatedOutput out) { + boolean annotates = out.annotates(); + + if (annotates) { + out.annotate(0, offsetString() + " class data for " + + thisClass.toHuman()); + } + + encodeSize(file, out, "static_fields", staticFields.size()); + encodeSize(file, out, "instance_fields", instanceFields.size()); + encodeSize(file, out, "direct_methods", directMethods.size()); + encodeSize(file, out, "virtual_methods", virtualMethods.size()); + + encodeList(file, out, "static_fields", staticFields); + encodeList(file, out, "instance_fields", instanceFields); + encodeList(file, out, "direct_methods", directMethods); + encodeList(file, out, "virtual_methods", virtualMethods); + + if (annotates) { + out.endAnnotation(); + } + } + + /** + * Helper for {@link #encodeOutput}, which writes out the given + * size value, annotating it as well (if annotations are enabled). + * + * @param file {@code non-null;} file this instance is part of + * @param out {@code non-null;} where to write to + * @param label {@code non-null;} the label for the purposes of annotation + * @param size {@code >= 0;} the size to write + */ + private static void encodeSize(DexFile file, AnnotatedOutput out, + String label, int size) { + if (out.annotates()) { + out.annotate(String.format(" %-21s %08x", label + "_size:", + size)); + } + + out.writeUnsignedLeb128(size); + } + + /** + * Helper for {@link #encodeOutput}, which writes out the given + * list. It also annotates the items (if any and if annotations + * are enabled). + * + * @param file {@code non-null;} file this instance is part of + * @param out {@code non-null;} where to write to + * @param label {@code non-null;} the label for the purposes of annotation + * @param list {@code non-null;} the list in question + */ + private static void encodeList(DexFile file, AnnotatedOutput out, + String label, ArrayList list) { + int size = list.size(); + int lastIndex = 0; + + if (size == 0) { + return; + } + + if (out.annotates()) { + out.annotate(0, " " + label + ":"); + } + + for (int i = 0; i < size; i++) { + lastIndex = list.get(i).encode(file, out, lastIndex, i); + } + } + + /** {@inheritDoc} */ + @Override + public void writeTo0(DexFile file, AnnotatedOutput out) { + boolean annotates = out.annotates(); + + if (annotates) { + /* + * The output is to be annotated, so redo the work previously + * done by place0(), except this time annotations will actually + * get emitted. + */ + encodeOutput(file, out); + } else { + out.write(encodedForm); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/ClassDefItem.java b/dexgen/src/com/android/dexgen/dex/file/ClassDefItem.java new file mode 100644 index 0000000..6177145 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/ClassDefItem.java @@ -0,0 +1,410 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotations; +import com.android.dexgen.rop.annotation.AnnotationsList; +import com.android.dexgen.rop.code.AccessFlags; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstArray; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.Writers; + +import java.io.PrintWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.TreeSet; + +/** + * Representation of a Dalvik class, which is basically a set of + * members (fields or methods) along with a few more pieces of + * information. + */ +public final class ClassDefItem extends IndexedItem { + /** size of instances when written out to a file, in bytes */ + public static final int WRITE_SIZE = 32; + + /** {@code non-null;} type constant for this class */ + private final CstType thisClass; + + /** access flags */ + private final int accessFlags; + + /** + * {@code null-ok;} superclass or {@code null} if this class is a/the + * root class + */ + private final CstType superclass; + + /** {@code null-ok;} list of implemented interfaces */ + private TypeListItem interfaces; + + /** {@code null-ok;} source file name or {@code null} if unknown */ + private final CstUtf8 sourceFile; + + /** {@code non-null;} associated class data object */ + private final ClassDataItem classData; + + /** + * {@code null-ok;} item wrapper for the static values, initialized + * in {@link #addContents} + */ + private EncodedArrayItem staticValuesItem; + + /** {@code non-null;} annotations directory */ + private AnnotationsDirectoryItem annotationsDirectory; + + /** + * Constructs an instance. Its sets of members and annotations are + * initially empty. + * + * @param thisClass {@code non-null;} type constant for this class + * @param accessFlags access flags + * @param superclass {@code null-ok;} superclass or {@code null} if + * this class is a/the root class + * @param interfaces {@code non-null;} list of implemented interfaces + * @param sourceFile {@code null-ok;} source file name or + * {@code null} if unknown + */ + public ClassDefItem(CstType thisClass, int accessFlags, + CstType superclass, TypeList interfaces, CstUtf8 sourceFile) { + if (thisClass == null) { + throw new NullPointerException("thisClass == null"); + } + + /* + * TODO: Maybe check accessFlags and superclass, at + * least for easily-checked stuff? + */ + + if (interfaces == null) { + throw new NullPointerException("interfaces == null"); + } + + this.thisClass = thisClass; + this.accessFlags = accessFlags; + this.superclass = superclass; + this.interfaces = + (interfaces.size() == 0) ? null : new TypeListItem(interfaces); + this.sourceFile = sourceFile; + this.classData = new ClassDataItem(thisClass); + this.staticValuesItem = null; + this.annotationsDirectory = new AnnotationsDirectoryItem(); + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_CLASS_DEF_ITEM; + } + + /** {@inheritDoc} */ + @Override + public int writeSize() { + return WRITE_SIZE; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + TypeIdsSection typeIds = file.getTypeIds(); + MixedItemSection byteData = file.getByteData(); + MixedItemSection wordData = file.getWordData(); + MixedItemSection typeLists = file.getTypeLists(); + StringIdsSection stringIds = file.getStringIds(); + + typeIds.intern(thisClass); + + if (!classData.isEmpty()) { + MixedItemSection classDataSection = file.getClassData(); + classDataSection.add(classData); + + CstArray staticValues = classData.getStaticValuesConstant(); + if (staticValues != null) { + staticValuesItem = + byteData.intern(new EncodedArrayItem(staticValues)); + } + } + + if (superclass != null) { + typeIds.intern(superclass); + } + + if (interfaces != null) { + interfaces = typeLists.intern(interfaces); + } + + if (sourceFile != null) { + stringIds.intern(sourceFile); + } + + if (! annotationsDirectory.isEmpty()) { + if (annotationsDirectory.isInternable()) { + annotationsDirectory = wordData.intern(annotationsDirectory); + } else { + wordData.add(annotationsDirectory); + } + } + } + + /** {@inheritDoc} */ + @Override + public void writeTo(DexFile file, AnnotatedOutput out) { + boolean annotates = out.annotates(); + TypeIdsSection typeIds = file.getTypeIds(); + int classIdx = typeIds.indexOf(thisClass); + int superIdx = (superclass == null) ? -1 : + typeIds.indexOf(superclass); + int interOff = OffsettedItem.getAbsoluteOffsetOr0(interfaces); + int annoOff = annotationsDirectory.isEmpty() ? 0 : + annotationsDirectory.getAbsoluteOffset(); + int sourceFileIdx = (sourceFile == null) ? -1 : + file.getStringIds().indexOf(sourceFile); + int dataOff = classData.isEmpty()? 0 : classData.getAbsoluteOffset(); + int staticValuesOff = + OffsettedItem.getAbsoluteOffsetOr0(staticValuesItem); + + if (annotates) { + out.annotate(0, indexString() + ' ' + thisClass.toHuman()); + out.annotate(4, " class_idx: " + Hex.u4(classIdx)); + out.annotate(4, " access_flags: " + + AccessFlags.classString(accessFlags)); + out.annotate(4, " superclass_idx: " + Hex.u4(superIdx) + + " // " + ((superclass == null) ? "" : + superclass.toHuman())); + out.annotate(4, " interfaces_off: " + Hex.u4(interOff)); + if (interOff != 0) { + TypeList list = interfaces.getList(); + int sz = list.size(); + for (int i = 0; i < sz; i++) { + out.annotate(0, " " + list.getType(i).toHuman()); + } + } + out.annotate(4, " source_file_idx: " + Hex.u4(sourceFileIdx) + + " // " + ((sourceFile == null) ? "" : + sourceFile.toHuman())); + out.annotate(4, " annotations_off: " + Hex.u4(annoOff)); + out.annotate(4, " class_data_off: " + Hex.u4(dataOff)); + out.annotate(4, " static_values_off: " + + Hex.u4(staticValuesOff)); + } + + out.writeInt(classIdx); + out.writeInt(accessFlags); + out.writeInt(superIdx); + out.writeInt(interOff); + out.writeInt(sourceFileIdx); + out.writeInt(annoOff); + out.writeInt(dataOff); + out.writeInt(staticValuesOff); + } + + /** + * Gets the constant corresponding to this class. + * + * @return {@code non-null;} the constant + */ + public CstType getThisClass() { + return thisClass; + } + + /** + * Gets the access flags. + * + * @return the access flags + */ + public int getAccessFlags() { + return accessFlags; + } + + /** + * Gets the superclass. + * + * @return {@code null-ok;} the superclass or {@code null} if + * this class is a/the root class + */ + public CstType getSuperclass() { + return superclass; + } + + /** + * Gets the list of interfaces implemented. + * + * @return {@code non-null;} the interfaces list + */ + public TypeList getInterfaces() { + if (interfaces == null) { + return StdTypeList.EMPTY; + } + + return interfaces.getList(); + } + + /** + * Gets the source file name. + * + * @return {@code null-ok;} the source file name or {@code null} if unknown + */ + public CstUtf8 getSourceFile() { + return sourceFile; + } + + /** + * Adds a static field. + * + * @param field {@code non-null;} the field to add + * @param value {@code null-ok;} initial value for the field, if any + */ + public void addStaticField(EncodedField field, Constant value) { + classData.addStaticField(field, value); + } + + /** + * Adds an instance field. + * + * @param field {@code non-null;} the field to add + */ + public void addInstanceField(EncodedField field) { + classData.addInstanceField(field); + } + + /** + * Adds a direct ({@code static} and/or {@code private}) method. + * + * @param method {@code non-null;} the method to add + */ + public void addDirectMethod(EncodedMethod method) { + classData.addDirectMethod(method); + } + + /** + * Adds a virtual method. + * + * @param method {@code non-null;} the method to add + */ + public void addVirtualMethod(EncodedMethod method) { + classData.addVirtualMethod(method); + } + + /** + * Gets all the methods in this class. The returned list is not linked + * in any way to the underlying lists contained in this instance, but + * the objects contained in the list are shared. + * + * @return {@code non-null;} list of all methods + */ + public ArrayList getMethods() { + return classData.getMethods(); + } + + /** + * Sets the direct annotations on this class. These are annotations + * made on the class, per se, as opposed to on one of its members. + * It is only valid to call this method at most once per instance. + * + * @param annotations {@code non-null;} annotations to set for this class + */ + public void setClassAnnotations(Annotations annotations) { + annotationsDirectory.setClassAnnotations(annotations); + } + + /** + * Adds a field annotations item to this class. + * + * @param field {@code non-null;} field in question + * @param annotations {@code non-null;} associated annotations to add + */ + public void addFieldAnnotations(CstFieldRef field, + Annotations annotations) { + annotationsDirectory.addFieldAnnotations(field, annotations); + } + + /** + * Adds a method annotations item to this class. + * + * @param method {@code non-null;} method in question + * @param annotations {@code non-null;} associated annotations to add + */ + public void addMethodAnnotations(CstMethodRef method, + Annotations annotations) { + annotationsDirectory.addMethodAnnotations(method, annotations); + } + + /** + * Adds a parameter annotations item to this class. + * + * @param method {@code non-null;} method in question + * @param list {@code non-null;} associated list of annotation sets to add + */ + public void addParameterAnnotations(CstMethodRef method, + AnnotationsList list) { + annotationsDirectory.addParameterAnnotations(method, list); + } + + /** + * Gets the method annotations for a given method, if any. This is + * meant for use by debugging / dumping code. + * + * @param method {@code non-null;} the method + * @return {@code null-ok;} the method annotations, if any + */ + public Annotations getMethodAnnotations(CstMethodRef method) { + return annotationsDirectory.getMethodAnnotations(method); + } + + /** + * Gets the parameter annotations for a given method, if any. This is + * meant for use by debugging / dumping code. + * + * @param method {@code non-null;} the method + * @return {@code null-ok;} the parameter annotations, if any + */ + public AnnotationsList getParameterAnnotations(CstMethodRef method) { + return annotationsDirectory.getParameterAnnotations(method); + } + + /** + * Prints out the contents of this instance, in a debugging-friendly + * way. + * + * @param out {@code non-null;} where to output to + * @param verbose whether to be verbose with the output + */ + public void debugPrint(Writer out, boolean verbose) { + PrintWriter pw = Writers.printWriterFor(out); + + pw.println(getClass().getName() + " {"); + pw.println(" accessFlags: " + Hex.u2(accessFlags)); + pw.println(" superclass: " + superclass); + pw.println(" interfaces: " + + ((interfaces == null) ? "" : interfaces)); + pw.println(" sourceFile: " + + ((sourceFile == null) ? "" : sourceFile.toQuoted())); + + classData.debugPrint(out, verbose); + annotationsDirectory.debugPrint(pw); + + pw.println("}"); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/ClassDefsSection.java b/dexgen/src/com/android/dexgen/dex/file/ClassDefsSection.java new file mode 100644 index 0000000..a6392d4 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/ClassDefsSection.java @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.TreeMap; + +/** + * Class definitions list section of a {@code .dex} file. + */ +public final class ClassDefsSection extends UniformItemSection { + /** + * {@code non-null;} map from type constants for classes to {@link + * ClassDefItem} instances that define those classes + */ + private final TreeMap classDefs; + + /** {@code null-ok;} ordered list of classes; set in {@link #orderItems} */ + private ArrayList orderedDefs; + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param file {@code non-null;} file that this instance is part of + */ + public ClassDefsSection(DexFile file) { + super("class_defs", file, 4); + + classDefs = new TreeMap(); + orderedDefs = null; + } + + /** {@inheritDoc} */ + @Override + public Collection items() { + if (orderedDefs != null) { + return orderedDefs; + } + + return classDefs.values(); + } + + /** {@inheritDoc} */ + @Override + public IndexedItem get(Constant cst) { + if (cst == null) { + throw new NullPointerException("cst == null"); + } + + throwIfNotPrepared(); + + Type type = ((CstType) cst).getClassType(); + IndexedItem result = classDefs.get(type); + + if (result == null) { + throw new IllegalArgumentException("not found"); + } + + return result; + } + + /** + * Writes the portion of the file header that refers to this instance. + * + * @param out {@code non-null;} where to write + */ + public void writeHeaderPart(AnnotatedOutput out) { + throwIfNotPrepared(); + + int sz = classDefs.size(); + int offset = (sz == 0) ? 0 : getFileOffset(); + + if (out.annotates()) { + out.annotate(4, "class_defs_size: " + Hex.u4(sz)); + out.annotate(4, "class_defs_off: " + Hex.u4(offset)); + } + + out.writeInt(sz); + out.writeInt(offset); + } + + /** + * Adds an element to this instance. It is illegal to attempt to add more + * than one class with the same name. + * + * @param clazz {@code non-null;} the class def to add + */ + public void add(ClassDefItem clazz) { + Type type; + + try { + type = clazz.getThisClass().getClassType(); + } catch (NullPointerException ex) { + // Elucidate the exception. + throw new NullPointerException("clazz == null"); + } + + throwIfPrepared(); + + if (classDefs.get(type) != null) { + throw new IllegalArgumentException("already added: " + type); + } + + classDefs.put(type, clazz); + } + + /** {@inheritDoc} */ + @Override + protected void orderItems() { + int sz = classDefs.size(); + int idx = 0; + + orderedDefs = new ArrayList(sz); + + /* + * Iterate over all the classes, recursively assigning an + * index to each, implicitly skipping the ones that have + * already been assigned by the time this (top-level) + * iteration reaches them. + */ + for (Type type : classDefs.keySet()) { + idx = orderItems0(type, idx, sz - idx); + } + } + + /** + * Helper for {@link #orderItems}, which recursively assigns indices + * to classes. + * + * @param type {@code null-ok;} type ref to assign, if any + * @param idx {@code >= 0;} the next index to assign + * @param maxDepth maximum recursion depth; if negative, this will + * throw an exception indicating class definition circularity + * @return {@code >= 0;} the next index to assign + */ + private int orderItems0(Type type, int idx, int maxDepth) { + ClassDefItem c = classDefs.get(type); + + if ((c == null) || (c.hasIndex())) { + return idx; + } + + if (maxDepth < 0) { + throw new RuntimeException("class circularity with " + type); + } + + maxDepth--; + + CstType superclassCst = c.getSuperclass(); + if (superclassCst != null) { + Type superclass = superclassCst.getClassType(); + idx = orderItems0(superclass, idx, maxDepth); + } + + TypeList interfaces = c.getInterfaces(); + int sz = interfaces.size(); + for (int i = 0; i < sz; i++) { + idx = orderItems0(interfaces.getType(i), idx, maxDepth); + } + + c.setIndex(idx); + orderedDefs.add(c); + return idx + 1; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/CodeItem.java b/dexgen/src/com/android/dexgen/dex/file/CodeItem.java new file mode 100644 index 0000000..1b305c7 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/CodeItem.java @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.dex.code.CatchTable; +import com.android.dexgen.dex.code.CstInsn; +import com.android.dexgen.dex.code.DalvCode; +import com.android.dexgen.dex.code.DalvInsn; +import com.android.dexgen.dex.code.DalvInsnList; +import com.android.dexgen.dex.code.LocalList; +import com.android.dexgen.dex.code.PositionList; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstMemberRef; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ExceptionWithContext; +import com.android.dexgen.util.Hex; + +import java.io.PrintWriter; +import java.util.HashSet; + +/** + * Representation of all the parts needed for concrete methods in a + * {@code dex} file. + */ +public final class CodeItem extends OffsettedItem { + /** file alignment of this class, in bytes */ + private static final int ALIGNMENT = 4; + + /** write size of the header of this class, in bytes */ + private static final int HEADER_SIZE = 16; + + /** {@code non-null;} method that this code implements */ + private final CstMethodRef ref; + + /** {@code non-null;} the bytecode instructions and associated data */ + private final DalvCode code; + + /** {@code null-ok;} the catches, if needed; set in {@link #addContents} */ + private CatchStructs catches; + + /** whether this instance is for a {@code static} method */ + private final boolean isStatic; + + /** + * {@code non-null;} list of possibly-thrown exceptions; just used in + * generating debugging output (listings) + */ + private final TypeList throwsList; + + /** + * {@code null-ok;} the debug info or {@code null} if there is none; + * set in {@link #addContents} + */ + private DebugInfoItem debugInfo; + + /** + * Constructs an instance. + * + * @param ref {@code non-null;} method that this code implements + * @param code {@code non-null;} the underlying code + * @param isStatic whether this instance is for a {@code static} + * method + * @param throwsList {@code non-null;} list of possibly-thrown exceptions, + * just used in generating debugging output (listings) + */ + public CodeItem(CstMethodRef ref, DalvCode code, boolean isStatic, + TypeList throwsList) { + super(ALIGNMENT, -1); + + if (ref == null) { + throw new NullPointerException("ref == null"); + } + + if (code == null) { + throw new NullPointerException("code == null"); + } + + if (throwsList == null) { + throw new NullPointerException("throwsList == null"); + } + + this.ref = ref; + this.code = code; + this.isStatic = isStatic; + this.throwsList = throwsList; + this.catches = null; + this.debugInfo = null; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_CODE_ITEM; + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + MixedItemSection byteData = file.getByteData(); + TypeIdsSection typeIds = file.getTypeIds(); + + if (code.hasPositions() || code.hasLocals()) { + debugInfo = new DebugInfoItem(code, isStatic, ref); + byteData.add(debugInfo); + } + + if (code.hasAnyCatches()) { + for (Type type : code.getCatchTypes()) { + typeIds.intern(type); + } + catches = new CatchStructs(code); + } + + for (Constant c : code.getInsnConstants()) { + file.internIfAppropriate(c); + } + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return "CodeItem{" + toHuman() + "}"; + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + return ref.toHuman(); + } + + /** + * Gets the reference to the method this instance implements. + * + * @return {@code non-null;} the method reference + */ + public CstMethodRef getRef() { + return ref; + } + + /** + * Does a human-friendly dump of this instance. + * + * @param out {@code non-null;} where to dump + * @param prefix {@code non-null;} per-line prefix to use + * @param verbose whether to be verbose with the output + */ + public void debugPrint(PrintWriter out, String prefix, boolean verbose) { + out.println(ref.toHuman() + ":"); + + DalvInsnList insns = code.getInsns(); + out.println("regs: " + Hex.u2(getRegistersSize()) + + "; ins: " + Hex.u2(getInsSize()) + "; outs: " + + Hex.u2(getOutsSize())); + + insns.debugPrint(out, prefix, verbose); + + String prefix2 = prefix + " "; + + if (catches != null) { + out.print(prefix); + out.println("catches"); + catches.debugPrint(out, prefix2); + } + + if (debugInfo != null) { + out.print(prefix); + out.println("debug info"); + debugInfo.debugPrint(out, prefix2); + } + } + + /** {@inheritDoc} */ + @Override + protected void place0(Section addedTo, int offset) { + final DexFile file = addedTo.getFile(); + int catchesSize; + + /* + * In order to get the catches and insns, all the code's + * constants need to be assigned indices. + */ + code.assignIndices(new DalvCode.AssignIndicesCallback() { + public int getIndex(Constant cst) { + IndexedItem item = file.findItemOrNull(cst); + if (item == null) { + return -1; + } + return item.getIndex(); + } + }); + + if (catches != null) { + catches.encode(file); + catchesSize = catches.writeSize(); + } else { + catchesSize = 0; + } + + /* + * The write size includes the header, two bytes per code + * unit, post-code padding if necessary, and however much + * space the catches need. + */ + + int insnsSize = code.getInsns().codeSize(); + if ((insnsSize & 1) != 0) { + insnsSize++; + } + + setWriteSize(HEADER_SIZE + (insnsSize * 2) + catchesSize); + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + boolean annotates = out.annotates(); + int regSz = getRegistersSize(); + int outsSz = getOutsSize(); + int insSz = getInsSize(); + int insnsSz = code.getInsns().codeSize(); + boolean needPadding = (insnsSz & 1) != 0; + int triesSz = (catches == null) ? 0 : catches.triesSize(); + int debugOff = (debugInfo == null) ? 0 : debugInfo.getAbsoluteOffset(); + + if (annotates) { + out.annotate(0, offsetString() + ' ' + ref.toHuman()); + out.annotate(2, " registers_size: " + Hex.u2(regSz)); + out.annotate(2, " ins_size: " + Hex.u2(insSz)); + out.annotate(2, " outs_size: " + Hex.u2(outsSz)); + out.annotate(2, " tries_size: " + Hex.u2(triesSz)); + out.annotate(4, " debug_off: " + Hex.u4(debugOff)); + out.annotate(4, " insns_size: " + Hex.u4(insnsSz)); + + // This isn't represented directly here, but it is useful to see. + int size = throwsList.size(); + if (size != 0) { + out.annotate(0, " throws " + StdTypeList.toHuman(throwsList)); + } + } + + out.writeShort(regSz); + out.writeShort(insSz); + out.writeShort(outsSz); + out.writeShort(triesSz); + out.writeInt(debugOff); + out.writeInt(insnsSz); + + writeCodes(file, out); + + if (catches != null) { + if (needPadding) { + if (annotates) { + out.annotate(2, " padding: 0"); + } + out.writeShort(0); + } + + catches.writeTo(file, out); + } + + if (annotates) { + /* + * These are pointed at in the code header (above), but it's less + * distracting to expand on them at the bottom of the code. + */ + if (debugInfo != null) { + out.annotate(0, " debug info"); + debugInfo.annotateTo(file, out, " "); + } + } + } + + /** + * Helper for {@link #writeTo0} which writes out the actual bytecode. + * + * @param file {@code non-null;} file we are part of + * @param out {@code non-null;} where to write to + */ + private void writeCodes(DexFile file, AnnotatedOutput out) { + DalvInsnList insns = code.getInsns(); + + try { + insns.writeTo(out); + } catch (RuntimeException ex) { + throw ExceptionWithContext.withContext(ex, "...while writing " + + "instructions for " + ref.toHuman()); + } + } + + /** + * Get the in registers count. + * + * @return the count + */ + private int getInsSize() { + return ref.getParameterWordCount(isStatic); + } + + /** + * Get the out registers count. + * + * @return the count + */ + private int getOutsSize() { + return code.getInsns().getOutsSize(); + } + + /** + * Get the total registers count. + * + * @return the count + */ + private int getRegistersSize() { + return code.getInsns().getRegistersSize(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/DebugInfoConstants.java b/dexgen/src/com/android/dexgen/dex/file/DebugInfoConstants.java new file mode 100644 index 0000000..780f350 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/DebugInfoConstants.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +/** + * Constants for the dex debug info state machine format. + */ +public interface DebugInfoConstants { + + /* + * normal opcodes + */ + + /** + * Terminates a debug info sequence for a method.

+ * Args: none + * + */ + static final int DBG_END_SEQUENCE = 0x00; + + /** + * Advances the program counter/address register without emitting + * a positions entry.

+ * + * Args: + *

    + *
  1. Unsigned LEB128 — amount to advance pc by + *
+ */ + static final int DBG_ADVANCE_PC = 0x01; + + /** + * Advances the line register without emitting + * a positions entry.

+ * + * Args: + *

    + *
  1. Signed LEB128 — amount to change line register by. + *
+ */ + static final int DBG_ADVANCE_LINE = 0x02; + + /** + * Introduces a local variable at the current address.

+ * + * Args: + *

    + *
  1. Unsigned LEB128 — register that will contain local. + *
  2. Unsigned LEB128 — string index (shifted by 1) of local name. + *
  3. Unsigned LEB128 — type index (shifted by 1) of type. + *
+ */ + static final int DBG_START_LOCAL = 0x03; + + /** + * Introduces a local variable at the current address with a type + * signature specified.

+ * + * Args: + *

    + *
  1. Unsigned LEB128 — register that will contain local. + *
  2. Unsigned LEB128 — string index (shifted by 1) of local name. + *
  3. Unsigned LEB128 — type index (shifted by 1) of type. + *
  4. Unsigned LEB128 — string index (shifted by 1) of + * type signature. + *
+ */ + static final int DBG_START_LOCAL_EXTENDED = 0x04; + + /** + * Marks a currently-live local variable as out of scope at the + * current address.

+ * + * Args: + *

    + *
  1. Unsigned LEB128 — register that contained local + *
+ */ + static final int DBG_END_LOCAL = 0x05; + + /** + * Re-introduces a local variable at the current address. The name + * and type are the same as the last local that was live in the specified + * register.

+ * + * Args: + *

    + *
  1. Unsigned LEB128 — register to re-start. + *
+ */ + static final int DBG_RESTART_LOCAL = 0x06; + + + /** + * Sets the "prologue_end" state machine register, indicating that the + * next position entry that is added should be considered the end of + * a method prologue (an appropriate place for a method breakpoint).

+ * + * The prologue_end register is cleared by any special + * ({@code >= OPCODE_BASE}) opcode. + */ + static final int DBG_SET_PROLOGUE_END = 0x07; + + /** + * Sets the "epilogue_begin" state machine register, indicating that the + * next position entry that is added should be considered the beginning of + * a method epilogue (an appropriate place to suspend execution before + * method exit).

+ * + * The epilogue_begin register is cleared by any special + * ({@code >= OPCODE_BASE}) opcode. + */ + static final int DBG_SET_EPILOGUE_BEGIN = 0x08; + + /** + * Sets the current file that that line numbers refer to. All subsequent + * line number entries make reference to this source file name, instead + * of the default name specified in code_item. + * + * Args: + *

    + *
  1. Unsigned LEB128 — string index (shifted by 1) of source + * file name. + *
+ */ + static final int DBG_SET_FILE = 0x09; + + /* IF YOU ADD A NEW OPCODE, increase OPCODE_BASE */ + + /* + * "special opcode" configuration, essentially what's found in + * the line number program header in DWARFv3, Section 6.2.4 + */ + + /** the smallest value a special opcode can take */ + static final int DBG_FIRST_SPECIAL = 0x0a; + static final int DBG_LINE_BASE = -4; + static final int DBG_LINE_RANGE = 15; + // MIN_INSN_LENGTH is always 1 +} diff --git a/dexgen/src/com/android/dexgen/dex/file/DebugInfoDecoder.java b/dexgen/src/com/android/dexgen/dex/file/DebugInfoDecoder.java new file mode 100644 index 0000000..da614d2 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/DebugInfoDecoder.java @@ -0,0 +1,653 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.dex.code.DalvCode; +import com.android.dexgen.dex.code.DalvInsnList; +import com.android.dexgen.dex.code.LocalList; +import com.android.dexgen.dex.code.PositionList; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.Prototype; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.ExceptionWithContext; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import static com.android.dexgen.dex.file.DebugInfoConstants.*; + +/** + * A decoder for the dex debug info state machine format. + * This code exists mostly as a reference implementation and test for + * for the {@code DebugInfoEncoder} + */ +public class DebugInfoDecoder { + /** encoded debug info */ + private final byte[] encoded; + + /** positions decoded */ + private final ArrayList positions; + + /** locals decoded */ + private final ArrayList locals; + + /** size of code block in code units */ + private final int codesize; + + /** indexed by register, the last local variable live in a reg */ + private final LocalEntry[] lastEntryForReg; + + /** method descriptor of method this debug info is for */ + private final Prototype desc; + + /** true if method is static */ + private final boolean isStatic; + + /** dex file this debug info will be stored in */ + private final DexFile file; + + /** + * register size, in register units, of the register space + * used by this method + */ + private final int regSize; + + /** current decoding state: line number */ + private int line = 1; + + /** current decoding state: bytecode address */ + private int address = 0; + + /** string index of the string "this" */ + private final int thisStringIdx; + + /** + * Constructs an instance. + * + * @param encoded encoded debug info + * @param codesize size of code block in code units + * @param regSize register size, in register units, of the register space + * used by this method + * @param isStatic true if method is static + * @param ref method descriptor of method this debug info is for + * @param file dex file this debug info will be stored in + */ + DebugInfoDecoder(byte[] encoded, int codesize, int regSize, + boolean isStatic, CstMethodRef ref, DexFile file) { + if (encoded == null) { + throw new NullPointerException("encoded == null"); + } + + this.encoded = encoded; + this.isStatic = isStatic; + this.desc = ref.getPrototype(); + this.file = file; + this.regSize = regSize; + + positions = new ArrayList(); + locals = new ArrayList(); + this.codesize = codesize; + lastEntryForReg = new LocalEntry[regSize]; + + int idx = -1; + + try { + idx = file.getStringIds().indexOf(new CstUtf8("this")); + } catch (IllegalArgumentException ex) { + /* + * Silently tolerate not finding "this". It just means that + * no method has local variable info that looks like + * a standard instance method. + */ + } + + thisStringIdx = idx; + } + + /** + * An entry in the resulting postions table + */ + static private class PositionEntry { + /** bytecode address */ + public int address; + + /** line number */ + public int line; + + public PositionEntry(int address, int line) { + this.address = address; + this.line = line; + } + } + + /** + * An entry in the resulting locals table + */ + static private class LocalEntry { + /** address of event */ + public int address; + + /** {@code true} iff it's a local start */ + public boolean isStart; + + /** register number */ + public int reg; + + /** index of name in strings table */ + public int nameIndex; + + /** index of type in types table */ + public int typeIndex; + + /** index of type signature in strings table */ + public int signatureIndex; + + public LocalEntry(int address, boolean isStart, int reg, int nameIndex, + int typeIndex, int signatureIndex) { + this.address = address; + this.isStart = isStart; + this.reg = reg; + this.nameIndex = nameIndex; + this.typeIndex = typeIndex; + this.signatureIndex = signatureIndex; + } + + public String toString() { + return String.format("[%x %s v%d %04x %04x %04x]", + address, isStart ? "start" : "end", reg, + nameIndex, typeIndex, signatureIndex); + } + } + + /** + * Gets the decoded positions list. + * Valid after calling {@code decode}. + * + * @return positions list in ascending address order. + */ + public List getPositionList() { + return positions; + } + + /** + * Gets the decoded locals list, in ascending start-address order. + * Valid after calling {@code decode}. + * + * @return locals list in ascending address order. + */ + public List getLocals() { + return locals; + } + + /** + * Decodes the debug info sequence. + */ + public void decode() { + try { + decode0(); + } catch (Exception ex) { + throw ExceptionWithContext.withContext(ex, + "...while decoding debug info"); + } + } + + /** + * Reads a string index. String indicies are offset by 1, and a 0 value + * in the stream (-1 as returned by this method) means "null" + * + * @param bs + * @return index into file's string ids table, -1 means null + * @throws IOException + */ + private int readStringIndex(InputStream bs) throws IOException { + int offsetIndex = readUnsignedLeb128(bs); + + return offsetIndex - 1; + } + + /** + * Gets the register that begins the method's parameter range (including + * the 'this' parameter for non-static methods). The range continues until + * {@code regSize} + * + * @return register as noted above. + */ + private int getParamBase() { + return regSize + - desc.getParameterTypes().getWordCount() - (isStatic? 0 : 1); + } + + private void decode0() throws IOException { + ByteArrayInputStream bs = new ByteArrayInputStream(encoded); + + line = readUnsignedLeb128(bs); + int szParams = readUnsignedLeb128(bs); + StdTypeList params = desc.getParameterTypes(); + int curReg = getParamBase(); + + if (szParams != params.size()) { + throw new RuntimeException( + "Mismatch between parameters_size and prototype"); + } + + if (!isStatic) { + // Start off with implicit 'this' entry + LocalEntry thisEntry = + new LocalEntry(0, true, curReg, thisStringIdx, 0, 0); + locals.add(thisEntry); + lastEntryForReg[curReg] = thisEntry; + curReg++; + } + + for (int i = 0; i < szParams; i++) { + Type paramType = params.getType(i); + LocalEntry le; + + int nameIdx = readStringIndex(bs); + + if (nameIdx == -1) { + /* + * Unnamed parameter; often but not always filled in by an + * extended start op after the prologue + */ + le = new LocalEntry(0, true, curReg, -1, 0, 0); + } else { + // TODO: Final 0 should be idx of paramType.getDescriptor(). + le = new LocalEntry(0, true, curReg, nameIdx, 0, 0); + } + + locals.add(le); + lastEntryForReg[curReg] = le; + curReg += paramType.getCategory(); + } + + for (;;) { + int opcode = bs.read(); + + if (opcode < 0) { + throw new RuntimeException + ("Reached end of debug stream without " + + "encountering end marker"); + } + + switch (opcode) { + case DBG_START_LOCAL: { + int reg = readUnsignedLeb128(bs); + int nameIdx = readStringIndex(bs); + int typeIdx = readStringIndex(bs); + LocalEntry le = new LocalEntry( + address, true, reg, nameIdx, typeIdx, 0); + + locals.add(le); + lastEntryForReg[reg] = le; + } + break; + + case DBG_START_LOCAL_EXTENDED: { + int reg = readUnsignedLeb128(bs); + int nameIdx = readStringIndex(bs); + int typeIdx = readStringIndex(bs); + int sigIdx = readStringIndex(bs); + LocalEntry le = new LocalEntry( + address, true, reg, nameIdx, typeIdx, sigIdx); + + locals.add(le); + lastEntryForReg[reg] = le; + } + break; + + case DBG_RESTART_LOCAL: { + int reg = readUnsignedLeb128(bs); + LocalEntry prevle; + LocalEntry le; + + try { + prevle = lastEntryForReg[reg]; + + if (prevle.isStart) { + throw new RuntimeException("nonsensical " + + "RESTART_LOCAL on live register v" + + reg); + } + + le = new LocalEntry(address, true, reg, + prevle.nameIndex, prevle.typeIndex, 0); + } catch (NullPointerException ex) { + throw new RuntimeException( + "Encountered RESTART_LOCAL on new v" + reg); + } + + locals.add(le); + lastEntryForReg[reg] = le; + } + break; + + case DBG_END_LOCAL: { + int reg = readUnsignedLeb128(bs); + LocalEntry prevle; + LocalEntry le; + + try { + prevle = lastEntryForReg[reg]; + + if (!prevle.isStart) { + throw new RuntimeException("nonsensical " + + "END_LOCAL on dead register v" + reg); + } + + le = new LocalEntry(address, false, reg, + prevle.nameIndex, prevle.typeIndex, + prevle.signatureIndex); + } catch (NullPointerException ex) { + throw new RuntimeException( + "Encountered END_LOCAL on new v" + reg); + } + + locals.add(le); + lastEntryForReg[reg] = le; + } + break; + + case DBG_END_SEQUENCE: + // all done + return; + + case DBG_ADVANCE_PC: + address += readUnsignedLeb128(bs); + break; + + case DBG_ADVANCE_LINE: + line += readSignedLeb128(bs); + break; + + case DBG_SET_PROLOGUE_END: + //TODO do something with this. + break; + + case DBG_SET_EPILOGUE_BEGIN: + //TODO do something with this. + break; + + case DBG_SET_FILE: + //TODO do something with this. + break; + + default: + if (opcode < DBG_FIRST_SPECIAL) { + throw new RuntimeException( + "Invalid extended opcode encountered " + + opcode); + } + + int adjopcode = opcode - DBG_FIRST_SPECIAL; + + address += adjopcode / DBG_LINE_RANGE; + line += DBG_LINE_BASE + (adjopcode % DBG_LINE_RANGE); + + positions.add(new PositionEntry(address, line)); + break; + + } + } + } + + /** + * Validates an encoded debug info stream against data used to encode it, + * throwing an exception if they do not match. Used to validate the + * encoder. + * + * @param info encoded debug info + * @param file {@code non-null;} file to refer to during decoding + * @param ref {@code non-null;} method whose info is being decoded + * @param code {@code non-null;} original code object that was encoded + * @param isStatic whether the method is static + */ + public static void validateEncode(byte[] info, DexFile file, + CstMethodRef ref, DalvCode code, boolean isStatic) { + PositionList pl = code.getPositions(); + LocalList ll = code.getLocals(); + DalvInsnList insns = code.getInsns(); + int codeSize = insns.codeSize(); + int countRegisters = insns.getRegistersSize(); + + try { + validateEncode0(info, codeSize, countRegisters, + isStatic, ref, file, pl, ll); + } catch (RuntimeException ex) { + System.err.println("instructions:"); + insns.debugPrint(System.err, " ", true); + System.err.println("local list:"); + ll.debugPrint(System.err, " "); + throw ExceptionWithContext.withContext(ex, + "while processing " + ref.toHuman()); + } + } + + private static void validateEncode0(byte[] info, int codeSize, + int countRegisters, boolean isStatic, CstMethodRef ref, + DexFile file, PositionList pl, LocalList ll) { + DebugInfoDecoder decoder + = new DebugInfoDecoder(info, codeSize, countRegisters, + isStatic, ref, file); + + decoder.decode(); + + /* + * Go through the decoded position entries, matching up + * with original entries. + */ + + List decodedEntries = decoder.getPositionList(); + + if (decodedEntries.size() != pl.size()) { + throw new RuntimeException( + "Decoded positions table not same size was " + + decodedEntries.size() + " expected " + pl.size()); + } + + for (PositionEntry entry : decodedEntries) { + boolean found = false; + for (int i = pl.size() - 1; i >= 0; i--) { + PositionList.Entry ple = pl.get(i); + + if (entry.line == ple.getPosition().getLine() + && entry.address == ple.getAddress()) { + found = true; + break; + } + } + + if (!found) { + throw new RuntimeException ("Could not match position entry: " + + entry.address + ", " + entry.line); + } + } + + /* + * Go through the original local list, in order, matching up + * with decoded entries. + */ + + List decodedLocals = decoder.getLocals(); + int thisStringIdx = decoder.thisStringIdx; + int decodedSz = decodedLocals.size(); + int paramBase = decoder.getParamBase(); + + /* + * Preflight to fill in any parameters that were skipped in + * the prologue (including an implied "this") but then + * identified by full signature. + */ + for (int i = 0; i < decodedSz; i++) { + LocalEntry entry = decodedLocals.get(i); + int idx = entry.nameIndex; + + if ((idx < 0) || (idx == thisStringIdx)) { + for (int j = i + 1; j < decodedSz; j++) { + LocalEntry e2 = decodedLocals.get(j); + if (e2.address != 0) { + break; + } + if ((entry.reg == e2.reg) && e2.isStart) { + decodedLocals.set(i, e2); + decodedLocals.remove(j); + decodedSz--; + break; + } + } + } + } + + int origSz = ll.size(); + int decodeAt = 0; + boolean problem = false; + + for (int i = 0; i < origSz; i++) { + LocalList.Entry origEntry = ll.get(i); + + if (origEntry.getDisposition() + == LocalList.Disposition.END_REPLACED) { + /* + * The encoded list doesn't represent replacements, so + * ignore them for the sake of comparison. + */ + continue; + } + + LocalEntry decodedEntry; + + do { + decodedEntry = decodedLocals.get(decodeAt); + if (decodedEntry.nameIndex >= 0) { + break; + } + /* + * A negative name index means this is an anonymous + * parameter, and we shouldn't expect to see it in the + * original list. So, skip it. + */ + decodeAt++; + } while (decodeAt < decodedSz); + + int decodedAddress = decodedEntry.address; + + if (decodedEntry.reg != origEntry.getRegister()) { + System.err.println("local register mismatch at orig " + i + + " / decoded " + decodeAt); + problem = true; + break; + } + + if (decodedEntry.isStart != origEntry.isStart()) { + System.err.println("local start/end mismatch at orig " + i + + " / decoded " + decodeAt); + problem = true; + break; + } + + /* + * The secondary check here accounts for the fact that a + * parameter might not be marked as starting at 0 in the + * original list. + */ + if ((decodedAddress != origEntry.getAddress()) + && !((decodedAddress == 0) + && (decodedEntry.reg >= paramBase))) { + System.err.println("local address mismatch at orig " + i + + " / decoded " + decodeAt); + problem = true; + break; + } + + decodeAt++; + } + + if (problem) { + System.err.println("decoded locals:"); + for (LocalEntry e : decodedLocals) { + System.err.println(" " + e); + } + throw new RuntimeException("local table problem"); + } + } + + /** + * Reads a DWARFv3-style signed LEB128 integer to the specified stream. + * See DWARF v3 section 7.6. An invalid sequence produces an IOException. + * + * @param bs stream to input from + * @return read value + * @throws IOException on invalid sequence in addition to + * those caused by the InputStream + */ + public static int readSignedLeb128(InputStream bs) throws IOException { + int result = 0; + int cur; + int count = 0; + int signBits = -1; + + do { + cur = bs.read(); + result |= (cur & 0x7f) << (count * 7); + signBits <<= 7; + count++; + } while (((cur & 0x80) == 0x80) && count < 5); + + if ((cur & 0x80) == 0x80) { + throw new IOException ("invalid LEB128 sequence"); + } + + // Sign extend if appropriate + if (((signBits >> 1) & result) != 0 ) { + result |= signBits; + } + + return result; + } + + /** + * Reads a DWARFv3-style unsigned LEB128 integer to the specified stream. + * See DWARF v3 section 7.6. An invalid sequence produces an IOException. + * + * @param bs stream to input from + * @return read value, which should be treated as an unsigned value. + * @throws IOException on invalid sequence in addition to + * those caused by the InputStream + */ + public static int readUnsignedLeb128(InputStream bs) throws IOException { + int result = 0; + int cur; + int count = 0; + + do { + cur = bs.read(); + result |= (cur & 0x7f) << (count * 7); + count++; + } while (((cur & 0x80) == 0x80) && count < 5); + + if ((cur & 0x80) == 0x80) { + throw new IOException ("invalid LEB128 sequence"); + } + + return result; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/DebugInfoEncoder.java b/dexgen/src/com/android/dexgen/dex/file/DebugInfoEncoder.java new file mode 100644 index 0000000..663de7e --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/DebugInfoEncoder.java @@ -0,0 +1,920 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.dex.code.LocalList; +import com.android.dexgen.dex.code.PositionList; +import com.android.dexgen.rop.code.RegisterSpec; +import com.android.dexgen.rop.code.SourcePosition; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.Prototype; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ByteArrayAnnotatedOutput; +import com.android.dexgen.util.ExceptionWithContext; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.BitSet; + +import static com.android.dexgen.dex.file.DebugInfoConstants.*; + +/** + * An encoder for the dex debug info state machine format. The format + * for each method enrty is as follows: + *
    + *
  1. signed LEB128: initial value for line register. + *
  2. n instances of signed LEB128: string indicies (offset by 1) + * for each method argument in left-to-right order + * with {@code this} excluded. A value of '0' indicates "no name" + *
  3. A sequence of special or normal opcodes as defined in + * {@code DebugInfoConstants}. + *
  4. A single terminating {@code OP_END_SEQUENCE} + *
+ */ +public final class DebugInfoEncoder { + private static final boolean DEBUG = false; + + /** {@code null-ok;} positions (line numbers) to encode */ + private final PositionList positions; + + /** {@code null-ok;} local variables to encode */ + private final LocalList locals; + + private final ByteArrayAnnotatedOutput output; + private final DexFile file; + private final int codeSize; + private final int regSize; + + private final Prototype desc; + private final boolean isStatic; + + /** current encoding state: bytecode address */ + private int address = 0; + + /** current encoding state: line number */ + private int line = 1; + + /** + * if non-null: the output to write annotations to. No normal + * output is written to this. + */ + private AnnotatedOutput annotateTo; + + /** if non-null: another possible output for annotations */ + private PrintWriter debugPrint; + + /** if non-null: the prefix for each annotation or debugPrint line */ + private String prefix; + + /** true if output should be consumed during annotation */ + private boolean shouldConsume; + + /** indexed by register; last local alive in register */ + private final LocalList.Entry[] lastEntryForReg; + + /** + * Creates an instance. + * + * @param positions {@code null-ok;} positions (line numbers) to encode + * @param locals {@code null-ok;} local variables to encode + * @param file {@code null-ok;} may only be {@code null} if simply using + * this class to do a debug print + * @param codeSize + * @param regSize + * @param isStatic + * @param ref + */ + public DebugInfoEncoder(PositionList positions, LocalList locals, + DexFile file, int codeSize, int regSize, + boolean isStatic, CstMethodRef ref) { + this.positions = positions; + this.locals = locals; + this.file = file; + this.desc = ref.getPrototype(); + this.isStatic = isStatic; + this.codeSize = codeSize; + this.regSize = regSize; + + output = new ByteArrayAnnotatedOutput(); + lastEntryForReg = new LocalList.Entry[regSize]; + } + + /** + * Annotates or writes a message to the {@code debugPrint} writer + * if applicable. + * + * @param length the number of bytes associated with this message + * @param message the message itself + */ + private void annotate(int length, String message) { + if (prefix != null) { + message = prefix + message; + } + + if (annotateTo != null) { + annotateTo.annotate(shouldConsume ? length : 0, message); + } + + if (debugPrint != null) { + debugPrint.println(message); + } + } + + /** + * Converts this (PositionList, LocalList) pair into a state machine + * sequence. + * + * @return {@code non-null;} encoded byte sequence without padding and + * terminated with a {@code 0x00} byte + */ + public byte[] convert() { + try { + byte[] ret; + ret = convert0(); + + if (DEBUG) { + for (int i = 0 ; i < ret.length; i++) { + System.err.printf("byte %02x\n", (0xff & ret[i])); + } + } + + return ret; + } catch (IOException ex) { + throw ExceptionWithContext + .withContext(ex, "...while encoding debug info"); + } + } + + /** + * Converts and produces annotations on a stream. Does not write + * actual bits to the {@code AnnotatedOutput}. + * + * @param prefix {@code null-ok;} prefix to attach to each line of output + * @param debugPrint {@code null-ok;} if specified, an alternate output for + * annotations + * @param out {@code null-ok;} if specified, where annotations should go + * @param consume whether to claim to have consumed output for + * {@code out} + * @return {@code non-null;} encoded output + */ + public byte[] convertAndAnnotate(String prefix, PrintWriter debugPrint, + AnnotatedOutput out, boolean consume) { + this.prefix = prefix; + this.debugPrint = debugPrint; + annotateTo = out; + shouldConsume = consume; + + byte[] result = convert(); + + return result; + } + + private byte[] convert0() throws IOException { + ArrayList sortedPositions = buildSortedPositions(); + ArrayList methodArgs = extractMethodArguments(); + + emitHeader(sortedPositions, methodArgs); + + // TODO: Make this mark be the actual prologue end. + output.writeByte(DBG_SET_PROLOGUE_END); + + if (annotateTo != null || debugPrint != null) { + annotate(1, String.format("%04x: prologue end",address)); + } + + int positionsSz = sortedPositions.size(); + int localsSz = locals.size(); + + // Current index in sortedPositions + int curPositionIdx = 0; + // Current index in locals + int curLocalIdx = 0; + + for (;;) { + /* + * Emit any information for the current address. + */ + + curLocalIdx = emitLocalsAtAddress(curLocalIdx); + curPositionIdx = + emitPositionsAtAddress(curPositionIdx, sortedPositions); + + /* + * Figure out what the next important address is. + */ + + int nextAddrL = Integer.MAX_VALUE; // local variable + int nextAddrP = Integer.MAX_VALUE; // position (line number) + + if (curLocalIdx < localsSz) { + nextAddrL = locals.get(curLocalIdx).getAddress(); + } + + if (curPositionIdx < positionsSz) { + nextAddrP = sortedPositions.get(curPositionIdx).getAddress(); + } + + int next = Math.min(nextAddrP, nextAddrL); + + // No next important address == done. + if (next == Integer.MAX_VALUE) { + break; + } + + /* + * If the only work remaining are local ends at the end of the + * block, stop here. Those are implied anyway. + */ + if (next == codeSize + && nextAddrL == Integer.MAX_VALUE + && nextAddrP == Integer.MAX_VALUE) { + break; + } + + if (next == nextAddrP) { + // Combined advance PC + position entry + emitPosition(sortedPositions.get(curPositionIdx++)); + } else { + emitAdvancePc(next - address); + } + } + + emitEndSequence(); + + return output.toByteArray(); + } + + /** + * Emits all local variable activity that occurs at the current + * {@link #address} starting at the given index into {@code + * locals} and including all subsequent activity at the same + * address. + * + * @param curLocalIdx Current index in locals + * @return new value for {@code curLocalIdx} + * @throws IOException + */ + private int emitLocalsAtAddress(int curLocalIdx) + throws IOException { + int sz = locals.size(); + + // TODO: Don't emit ends implied by starts. + + while ((curLocalIdx < sz) + && (locals.get(curLocalIdx).getAddress() == address)) { + LocalList.Entry entry = locals.get(curLocalIdx++); + int reg = entry.getRegister(); + LocalList.Entry prevEntry = lastEntryForReg[reg]; + + if (entry == prevEntry) { + /* + * Here we ignore locals entries for parameters, + * which have already been represented and placed in the + * lastEntryForReg array. + */ + continue; + } + + // At this point we have a new entry one way or another. + lastEntryForReg[reg] = entry; + + if (entry.isStart()) { + if ((prevEntry != null) && entry.matches(prevEntry)) { + /* + * The previous local in this register has the same + * name and type as the one being introduced now, so + * use the more efficient "restart" form. + */ + if (prevEntry.isStart()) { + /* + * We should never be handed a start when a + * a matching local is already active. + */ + throw new RuntimeException("shouldn't happen"); + } + emitLocalRestart(entry); + } else { + emitLocalStart(entry); + } + } else { + /* + * Only emit a local end if it is *not* due to a direct + * replacement. Direct replacements imply an end of the + * previous local in the same register. + * + * TODO: Make sure the runtime can deal with implied + * local ends from category-2 interactions, and when so, + * also stop emitting local ends for those cases. + */ + if (entry.getDisposition() + != LocalList.Disposition.END_REPLACED) { + emitLocalEnd(entry); + } + } + } + + return curLocalIdx; + } + + /** + * Emits all positions that occur at the current {@code address} + * + * @param curPositionIdx Current index in sortedPositions + * @param sortedPositions positions, sorted by ascending address + * @return new value for {@code curPositionIdx} + * @throws IOException + */ + private int emitPositionsAtAddress(int curPositionIdx, + ArrayList sortedPositions) + throws IOException { + int positionsSz = sortedPositions.size(); + while ((curPositionIdx < positionsSz) + && (sortedPositions.get(curPositionIdx).getAddress() + == address)) { + emitPosition(sortedPositions.get(curPositionIdx++)); + } + return curPositionIdx; + } + + /** + * Emits the header sequence, which consists of LEB128-encoded initial + * line number and string indicies for names of all non-"this" arguments. + * + * @param sortedPositions positions, sorted by ascending address + * @param methodArgs local list entries for method argumens arguments, + * in left-to-right order omitting "this" + * @throws IOException + */ + private void emitHeader(ArrayList sortedPositions, + ArrayList methodArgs) throws IOException { + boolean annotate = (annotateTo != null) || (debugPrint != null); + int mark = output.getCursor(); + + // Start by initializing the line number register. + if (sortedPositions.size() > 0) { + PositionList.Entry entry = sortedPositions.get(0); + line = entry.getPosition().getLine(); + } + output.writeUnsignedLeb128(line); + + if (annotate) { + annotate(output.getCursor() - mark, "line_start: " + line); + } + + int curParam = getParamBase(); + // paramTypes will not include 'this' + StdTypeList paramTypes = desc.getParameterTypes(); + int szParamTypes = paramTypes.size(); + + /* + * Initialize lastEntryForReg to have an initial + * entry for the 'this' pointer. + */ + if (!isStatic) { + for (LocalList.Entry arg : methodArgs) { + if (curParam == arg.getRegister()) { + lastEntryForReg[curParam] = arg; + break; + } + } + curParam++; + } + + // Write out the number of parameter entries that will follow. + mark = output.getCursor(); + output.writeUnsignedLeb128(szParamTypes); + + if (annotate) { + annotate(output.getCursor() - mark, + String.format("parameters_size: %04x", szParamTypes)); + } + + /* + * Then emit the string indicies of all the method parameters. + * Note that 'this', if applicable, is excluded. + */ + for (int i = 0; i < szParamTypes; i++) { + Type pt = paramTypes.get(i); + LocalList.Entry found = null; + + mark = output.getCursor(); + + for (LocalList.Entry arg : methodArgs) { + if (curParam == arg.getRegister()) { + found = arg; + + if (arg.getSignature() != null) { + /* + * Parameters with signatures will be re-emitted + * in complete as LOCAL_START_EXTENDED's below. + */ + emitStringIndex(null); + } else { + emitStringIndex(arg.getName()); + } + lastEntryForReg[curParam] = arg; + + break; + } + } + + if (found == null) { + /* + * Emit a null symbol for "unnamed." This is common + * for, e.g., synthesized methods and inner-class + * this$0 arguments. + */ + emitStringIndex(null); + } + + if (annotate) { + String parameterName + = (found == null || found.getSignature() != null) + ? "" : found.getName().toHuman(); + annotate(output.getCursor() - mark, + "parameter " + parameterName + " " + + RegisterSpec.PREFIX + curParam); + } + + curParam += pt.getCategory(); + } + + /* + * If anything emitted above has a type signature, emit it again as + * a LOCAL_RESTART_EXTENDED + */ + + for (LocalList.Entry arg : lastEntryForReg) { + if (arg == null) { + continue; + } + + CstUtf8 signature = arg.getSignature(); + + if (signature != null) { + emitLocalStartExtended(arg); + } + } + } + + /** + * Builds a list of position entries, sorted by ascending address. + * + * @return A sorted positions list + */ + private ArrayList buildSortedPositions() { + int sz = (positions == null) ? 0 : positions.size(); + ArrayList result = new ArrayList(sz); + + for (int i = 0; i < sz; i++) { + result.add(positions.get(i)); + } + + // Sort ascending by address. + Collections.sort (result, new Comparator() { + public int compare (PositionList.Entry a, PositionList.Entry b) { + return a.getAddress() - b.getAddress(); + } + + public boolean equals (Object obj) { + return obj == this; + } + }); + return result; + } + + /** + * Gets the register that begins the method's parameter range (including + * the 'this' parameter for non-static methods). The range continues until + * {@code regSize} + * + * @return register as noted above + */ + private int getParamBase() { + return regSize + - desc.getParameterTypes().getWordCount() - (isStatic? 0 : 1); + } + + /** + * Extracts method arguments from a locals list. These will be collected + * from the input list and sorted by ascending register in the + * returned list. + * + * @return list of non-{@code this} method argument locals, + * sorted by ascending register + */ + private ArrayList extractMethodArguments() { + ArrayList result + = new ArrayList(desc.getParameterTypes().size()); + int argBase = getParamBase(); + BitSet seen = new BitSet(regSize - argBase); + int sz = locals.size(); + + for (int i = 0; i < sz; i++) { + LocalList.Entry e = locals.get(i); + int reg = e.getRegister(); + + if (reg < argBase) { + continue; + } + + // only the lowest-start-address entry is included. + if (seen.get(reg - argBase)) { + continue; + } + + seen.set(reg - argBase); + result.add(e); + } + + // Sort by ascending register. + Collections.sort(result, new Comparator() { + public int compare(LocalList.Entry a, LocalList.Entry b) { + return a.getRegister() - b.getRegister(); + } + + public boolean equals(Object obj) { + return obj == this; + } + }); + + return result; + } + + /** + * Returns a string representation of this LocalList entry that is + * appropriate for emitting as an annotation. + * + * @param e {@code non-null;} entry + * @return {@code non-null;} annotation string + */ + private String entryAnnotationString(LocalList.Entry e) { + StringBuilder sb = new StringBuilder(); + + sb.append(RegisterSpec.PREFIX); + sb.append(e.getRegister()); + sb.append(' '); + + CstUtf8 name = e.getName(); + if (name == null) { + sb.append("null"); + } else { + sb.append(name.toHuman()); + } + sb.append(' '); + + CstType type = e.getType(); + if (type == null) { + sb.append("null"); + } else { + sb.append(type.toHuman()); + } + + CstUtf8 signature = e.getSignature(); + + if (signature != null) { + sb.append(' '); + sb.append(signature.toHuman()); + } + + return sb.toString(); + } + + /** + * Emits a {@link DebugInfoConstants#DBG_RESTART_LOCAL DBG_RESTART_LOCAL} + * sequence. + * + * @param entry entry associated with this restart + * @throws IOException + */ + private void emitLocalRestart(LocalList.Entry entry) + throws IOException { + + int mark = output.getCursor(); + + output.writeByte(DBG_RESTART_LOCAL); + emitUnsignedLeb128(entry.getRegister()); + + if (annotateTo != null || debugPrint != null) { + annotate(output.getCursor() - mark, + String.format("%04x: +local restart %s", + address, entryAnnotationString(entry))); + } + + if (DEBUG) { + System.err.println("emit local restart"); + } + } + + /** + * Emits a string index as an unsigned LEB128. The actual value written + * is shifted by 1, so that the '0' value is reserved for "null". The + * null symbol is used in some cases by the parameter name list + * at the beginning of the sequence. + * + * @param string {@code null-ok;} string to emit + * @throws IOException + */ + private void emitStringIndex(CstUtf8 string) throws IOException { + if ((string == null) || (file == null)) { + output.writeUnsignedLeb128(0); + } else { + output.writeUnsignedLeb128( + 1 + file.getStringIds().indexOf(string)); + } + + if (DEBUG) { + System.err.printf("Emit string %s\n", + string == null ? "" : string.toQuoted()); + } + } + + /** + * Emits a type index as an unsigned LEB128. The actual value written + * is shifted by 1, so that the '0' value is reserved for "null". + * + * @param type {@code null-ok;} type to emit + * @throws IOException + */ + private void emitTypeIndex(CstType type) throws IOException { + if ((type == null) || (file == null)) { + output.writeUnsignedLeb128(0); + } else { + output.writeUnsignedLeb128( + 1 + file.getTypeIds().indexOf(type)); + } + + if (DEBUG) { + System.err.printf("Emit type %s\n", + type == null ? "" : type.toHuman()); + } + } + + /** + * Emits a {@link DebugInfoConstants#DBG_START_LOCAL DBG_START_LOCAL} or + * {@link DebugInfoConstants#DBG_START_LOCAL_EXTENDED + * DBG_START_LOCAL_EXTENDED} sequence. + * + * @param entry entry to emit + * @throws IOException + */ + private void emitLocalStart(LocalList.Entry entry) + throws IOException { + + if (entry.getSignature() != null) { + emitLocalStartExtended(entry); + return; + } + + int mark = output.getCursor(); + + output.writeByte(DBG_START_LOCAL); + + emitUnsignedLeb128(entry.getRegister()); + emitStringIndex(entry.getName()); + emitTypeIndex(entry.getType()); + + if (annotateTo != null || debugPrint != null) { + annotate(output.getCursor() - mark, + String.format("%04x: +local %s", address, + entryAnnotationString(entry))); + } + + if (DEBUG) { + System.err.println("emit local start"); + } + } + + /** + * Emits a {@link DebugInfoConstants#DBG_START_LOCAL_EXTENDED + * DBG_START_LOCAL_EXTENDED} sequence. + * + * @param entry entry to emit + * @throws IOException + */ + private void emitLocalStartExtended(LocalList.Entry entry) + throws IOException { + + int mark = output.getCursor(); + + output.writeByte(DBG_START_LOCAL_EXTENDED); + + emitUnsignedLeb128(entry.getRegister()); + emitStringIndex(entry.getName()); + emitTypeIndex(entry.getType()); + emitStringIndex(entry.getSignature()); + + if (annotateTo != null || debugPrint != null) { + annotate(output.getCursor() - mark, + String.format("%04x: +localx %s", address, + entryAnnotationString(entry))); + } + + if (DEBUG) { + System.err.println("emit local start"); + } + } + + /** + * Emits a {@link DebugInfoConstants#DBG_END_LOCAL DBG_END_LOCAL} sequence. + * + * @param entry {@code entry non-null;} entry associated with end. + * @throws IOException + */ + private void emitLocalEnd(LocalList.Entry entry) + throws IOException { + + int mark = output.getCursor(); + + output.writeByte(DBG_END_LOCAL); + output.writeUnsignedLeb128(entry.getRegister()); + + if (annotateTo != null || debugPrint != null) { + annotate(output.getCursor() - mark, + String.format("%04x: -local %s", address, + entryAnnotationString(entry))); + } + + if (DEBUG) { + System.err.println("emit local end"); + } + } + + /** + * Emits the necessary byte sequences to emit the given position table + * entry. This will typically be a single special opcode, although + * it may also require DBG_ADVANCE_PC or DBG_ADVANCE_LINE. + * + * @param entry position entry to emit. + * @throws IOException + */ + private void emitPosition(PositionList.Entry entry) + throws IOException { + + SourcePosition pos = entry.getPosition(); + int newLine = pos.getLine(); + int newAddress = entry.getAddress(); + + int opcode; + + int deltaLines = newLine - line; + int deltaAddress = newAddress - address; + + if (deltaAddress < 0) { + throw new RuntimeException( + "Position entries must be in ascending address order"); + } + + if ((deltaLines < DBG_LINE_BASE) + || (deltaLines > (DBG_LINE_BASE + DBG_LINE_RANGE -1))) { + emitAdvanceLine(deltaLines); + deltaLines = 0; + } + + opcode = computeOpcode (deltaLines, deltaAddress); + + if ((opcode & ~0xff) > 0) { + emitAdvancePc(deltaAddress); + deltaAddress = 0; + opcode = computeOpcode (deltaLines, deltaAddress); + + if ((opcode & ~0xff) > 0) { + emitAdvanceLine(deltaLines); + deltaLines = 0; + opcode = computeOpcode (deltaLines, deltaAddress); + } + } + + output.writeByte(opcode); + + line += deltaLines; + address += deltaAddress; + + if (annotateTo != null || debugPrint != null) { + annotate(1, + String.format("%04x: line %d", address, line)); + } + } + + /** + * Computes a special opcode that will encode the given position change. + * If the return value is > 0xff, then the request cannot be fulfilled. + * Essentially the same as described in "DWARF Debugging Format Version 3" + * section 6.2.5.1. + * + * @param deltaLines {@code >= DBG_LINE_BASE, <= DBG_LINE_BASE + + * DBG_LINE_RANGE;} the line change to encode + * @param deltaAddress {@code >= 0;} the address change to encode + * @return {@code <= 0xff} if in range, otherwise parameters are out + * of range + */ + private static int computeOpcode(int deltaLines, int deltaAddress) { + if (deltaLines < DBG_LINE_BASE + || deltaLines > (DBG_LINE_BASE + DBG_LINE_RANGE -1)) { + + throw new RuntimeException("Parameter out of range"); + } + + return (deltaLines - DBG_LINE_BASE) + + (DBG_LINE_RANGE * deltaAddress) + DBG_FIRST_SPECIAL; + } + + /** + * Emits an {@link DebugInfoConstants#DBG_ADVANCE_LINE DBG_ADVANCE_LINE} + * sequence. + * + * @param deltaLines amount to change line number register by + * @throws IOException + */ + private void emitAdvanceLine(int deltaLines) throws IOException { + int mark = output.getCursor(); + + output.writeByte(DBG_ADVANCE_LINE); + output.writeSignedLeb128(deltaLines); + line += deltaLines; + + if (annotateTo != null || debugPrint != null) { + annotate(output.getCursor() - mark, + String.format("line = %d", line)); + } + + if (DEBUG) { + System.err.printf("Emitting advance_line for %d\n", deltaLines); + } + } + + /** + * Emits an {@link DebugInfoConstants#DBG_ADVANCE_PC DBG_ADVANCE_PC} + * sequence. + * + * @param deltaAddress {@code >= 0;} amount to change program counter by + * @throws IOException + */ + private void emitAdvancePc(int deltaAddress) throws IOException { + int mark = output.getCursor(); + + output.writeByte(DBG_ADVANCE_PC); + output.writeUnsignedLeb128(deltaAddress); + address += deltaAddress; + + if (annotateTo != null || debugPrint != null) { + annotate(output.getCursor() - mark, + String.format("%04x: advance pc", address)); + } + + if (DEBUG) { + System.err.printf("Emitting advance_pc for %d\n", deltaAddress); + } + } + + /** + * Emits an unsigned LEB128 value. + * + * @param n {@code >= 0;} value to emit. Note that, although this can + * represent integers larger than Integer.MAX_VALUE, we currently don't + * allow that. + * @throws IOException + */ + private void emitUnsignedLeb128(int n) throws IOException { + // We'll never need the top end of the unsigned range anyway. + if (n < 0) { + throw new RuntimeException( + "Signed value where unsigned required: " + n); + } + + output.writeUnsignedLeb128(n); + } + + /** + * Emits the {@link DebugInfoConstants#DBG_END_SEQUENCE DBG_END_SEQUENCE} + * bytecode. + */ + private void emitEndSequence() { + output.writeByte(DBG_END_SEQUENCE); + + if (annotateTo != null || debugPrint != null) { + annotate(1, "end sequence"); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/DebugInfoItem.java b/dexgen/src/com/android/dexgen/dex/file/DebugInfoItem.java new file mode 100644 index 0000000..82ad444 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/DebugInfoItem.java @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.dex.code.DalvCode; +import com.android.dexgen.dex.code.DalvInsnList; +import com.android.dexgen.dex.code.LocalList; +import com.android.dexgen.dex.code.PositionList; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ExceptionWithContext; + +import java.io.PrintWriter; + +public class DebugInfoItem extends OffsettedItem { + /** the required alignment for instances of this class */ + private static final int ALIGNMENT = 1; + + private static final boolean ENABLE_ENCODER_SELF_CHECK = false; + + /** {@code non-null;} the code this item represents */ + private final DalvCode code; + + private byte[] encoded; + + private final boolean isStatic; + private final CstMethodRef ref; + + public DebugInfoItem(DalvCode code, boolean isStatic, CstMethodRef ref) { + // We don't know the write size yet. + super (ALIGNMENT, -1); + + if (code == null) { + throw new NullPointerException("code == null"); + } + + this.code = code; + this.isStatic = isStatic; + this.ref = ref; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_DEBUG_INFO_ITEM; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + // No contents to add. + } + + /** {@inheritDoc} */ + @Override + protected void place0(Section addedTo, int offset) { + // Encode the data and note the size. + + try { + encoded = encode(addedTo.getFile(), null, null, null, false); + setWriteSize(encoded.length); + } catch (RuntimeException ex) { + throw ExceptionWithContext.withContext(ex, + "...while placing debug info for " + ref.toHuman()); + } + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + throw new RuntimeException("unsupported"); + } + + /** + * Writes annotations for the elements of this list, as + * zero-length. This is meant to be used for dumping this instance + * directly after a code dump (with the real local list actually + * existing elsewhere in the output). + * + * @param file {@code non-null;} the file to use for referencing other sections + * @param out {@code non-null;} where to annotate to + * @param prefix {@code null-ok;} prefix to attach to each line of output + */ + public void annotateTo(DexFile file, AnnotatedOutput out, String prefix) { + encode(file, prefix, null, out, false); + } + + /** + * Does a human-friendly dump of this instance. + * + * @param out {@code non-null;} where to dump + * @param prefix {@code non-null;} prefix to attach to each line of output + */ + public void debugPrint(PrintWriter out, String prefix) { + encode(null, prefix, out, null, false); + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + if (out.annotates()) { + /* + * Re-run the encoder to generate the annotations, + * but write the bits from the original encode + */ + + out.annotate(offsetString() + " debug info"); + encode(file, null, null, out, true); + } + + out.write(encoded); + } + + /** + * Performs debug info encoding. + * + * @param file {@code null-ok;} file to refer to during encoding + * @param prefix {@code null-ok;} prefix to attach to each line of output + * @param debugPrint {@code null-ok;} if specified, an alternate output for + * annotations + * @param out {@code null-ok;} if specified, where annotations should go + * @param consume whether to claim to have consumed output for + * {@code out} + * @return {@code non-null;} the encoded array + */ + private byte[] encode(DexFile file, String prefix, PrintWriter debugPrint, + AnnotatedOutput out, boolean consume) { + byte[] result = encode0(file, prefix, debugPrint, out, consume); + + if (ENABLE_ENCODER_SELF_CHECK && (file != null)) { + try { + DebugInfoDecoder.validateEncode(result, file, ref, code, + isStatic); + } catch (RuntimeException ex) { + // Reconvert, annotating to System.err. + encode0(file, "", new PrintWriter(System.err, true), null, + false); + throw ex; + } + } + + return result; + } + + /** + * Helper for {@link #encode} to do most of the work. + * + * @param file {@code null-ok;} file to refer to during encoding + * @param prefix {@code null-ok;} prefix to attach to each line of output + * @param debugPrint {@code null-ok;} if specified, an alternate output for + * annotations + * @param out {@code null-ok;} if specified, where annotations should go + * @param consume whether to claim to have consumed output for + * {@code out} + * @return {@code non-null;} the encoded array + */ + private byte[] encode0(DexFile file, String prefix, PrintWriter debugPrint, + AnnotatedOutput out, boolean consume) { + PositionList positions = code.getPositions(); + LocalList locals = code.getLocals(); + DalvInsnList insns = code.getInsns(); + int codeSize = insns.codeSize(); + int regSize = insns.getRegistersSize(); + + DebugInfoEncoder encoder = + new DebugInfoEncoder(positions, locals, + file, codeSize, regSize, isStatic, ref); + + byte[] result; + + if ((debugPrint == null) && (out == null)) { + result = encoder.convert(); + } else { + result = encoder.convertAndAnnotate(prefix, debugPrint, out, + consume); + } + + return result; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/DexFile.java b/dexgen/src/com/android/dexgen/dex/file/DexFile.java new file mode 100644 index 0000000..e92aa10 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/DexFile.java @@ -0,0 +1,646 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.dex.file.MixedItemSection.SortType; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstBaseMethodRef; +import com.android.dexgen.rop.cst.CstEnumRef; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.ByteArrayAnnotatedOutput; +import com.android.dexgen.util.ExceptionWithContext; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.Writer; +import java.security.DigestException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.zip.Adler32; + +/** + * Representation of an entire {@code .dex} (Dalvik EXecutable) + * file, which itself consists of a set of Dalvik classes. + */ +public final class DexFile { + /** {@code non-null;} word data section */ + private final MixedItemSection wordData; + + /** + * {@code non-null;} type lists section. This is word data, but separating + * it from {@link #wordData} helps break what would otherwise be a + * circular dependency between the that and {@link #protoIds}. + */ + private final MixedItemSection typeLists; + + /** + * {@code non-null;} map section. The map needs to be in a section by itself + * for the self-reference mechanics to work in a reasonably + * straightforward way. See {@link MapItem#addMap} for more detail. + */ + private final MixedItemSection map; + + /** {@code non-null;} string data section */ + private final MixedItemSection stringData; + + /** {@code non-null;} string identifiers section */ + private final StringIdsSection stringIds; + + /** {@code non-null;} type identifiers section */ + private final TypeIdsSection typeIds; + + /** {@code non-null;} prototype identifiers section */ + private final ProtoIdsSection protoIds; + + /** {@code non-null;} field identifiers section */ + private final FieldIdsSection fieldIds; + + /** {@code non-null;} method identifiers section */ + private final MethodIdsSection methodIds; + + /** {@code non-null;} class definitions section */ + private final ClassDefsSection classDefs; + + /** {@code non-null;} class data section */ + private final MixedItemSection classData; + + /** {@code non-null;} byte data section */ + private final MixedItemSection byteData; + + /** {@code non-null;} file header */ + private final HeaderSection header; + + /** + * {@code non-null;} array of sections in the order they will appear in the + * final output file + */ + private final Section[] sections; + + /** {@code >= -1;} total file size or {@code -1} if unknown */ + private int fileSize; + + /** {@code >= 40;} maximum width of the file dump */ + private int dumpWidth; + + /** + * Constructs an instance. It is initially empty. + */ + public DexFile() { + header = new HeaderSection(this); + typeLists = new MixedItemSection(null, this, 4, SortType.NONE); + wordData = new MixedItemSection("word_data", this, 4, SortType.TYPE); + stringData = + new MixedItemSection("string_data", this, 1, SortType.INSTANCE); + classData = new MixedItemSection(null, this, 1, SortType.NONE); + byteData = new MixedItemSection("byte_data", this, 1, SortType.TYPE); + stringIds = new StringIdsSection(this); + typeIds = new TypeIdsSection(this); + protoIds = new ProtoIdsSection(this); + fieldIds = new FieldIdsSection(this); + methodIds = new MethodIdsSection(this); + classDefs = new ClassDefsSection(this); + map = new MixedItemSection("map", this, 4, SortType.NONE); + + /* + * This is the list of sections in the order they appear in + * the final output. + */ + sections = new Section[] { + header, stringIds, typeIds, protoIds, fieldIds, methodIds, + classDefs, wordData, typeLists, stringData, byteData, + classData, map }; + + fileSize = -1; + dumpWidth = 79; + } + + /** + * Adds a class to this instance. It is illegal to attempt to add more + * than one class with the same name. + * + * @param clazz {@code non-null;} the class to add + */ + public void add(ClassDefItem clazz) { + classDefs.add(clazz); + } + + /** + * Gets the class definition with the given name, if any. + * + * @param name {@code non-null;} the class name to look for + * @return {@code null-ok;} the class with the given name, or {@code null} + * if there is no such class + */ + public ClassDefItem getClassOrNull(String name) { + try { + Type type = Type.internClassName(name); + return (ClassDefItem) classDefs.get(new CstType(type)); + } catch (IllegalArgumentException ex) { + // Translate exception, per contract. + return null; + } + } + + /** + * Writes the contents of this instance as either a binary or a + * human-readable form, or both. + * + * @param out {@code null-ok;} where to write to + * @param humanOut {@code null-ok;} where to write human-oriented output to + * @param verbose whether to be verbose when writing human-oriented output + */ + public void writeTo(OutputStream out, Writer humanOut, boolean verbose) + throws IOException { + boolean annotate = (humanOut != null); + ByteArrayAnnotatedOutput result = toDex0(annotate, verbose); + + if (out != null) { + out.write(result.getArray()); + } + + if (annotate) { + result.writeAnnotationsTo(humanOut); + } + } + + /** + * Returns the contents of this instance as a {@code .dex} file, + * in {@code byte[]} form. + * + * @param humanOut {@code null-ok;} where to write human-oriented output to + * @param verbose whether to be verbose when writing human-oriented output + * @return {@code non-null;} a {@code .dex} file for this instance + */ + public byte[] toDex(Writer humanOut, boolean verbose) + throws IOException { + boolean annotate = (humanOut != null); + ByteArrayAnnotatedOutput result = toDex0(annotate, verbose); + + if (annotate) { + result.writeAnnotationsTo(humanOut); + } + + return result.getArray(); + } + + /** + * Sets the maximum width of the human-oriented dump of the instance. + * + * @param dumpWidth {@code >= 40;} the width + */ + public void setDumpWidth(int dumpWidth) { + if (dumpWidth < 40) { + throw new IllegalArgumentException("dumpWidth < 40"); + } + + this.dumpWidth = dumpWidth; + } + + /** + * Gets the total file size, if known. + * + *

This is package-scope in order to allow + * the {@link HeaderSection} to set itself up properly.

+ * + * @return {@code >= 0;} the total file size + * @throws RuntimeException thrown if the file size is not yet known + */ + /*package*/ int getFileSize() { + if (fileSize < 0) { + throw new RuntimeException("file size not yet known"); + } + + return fileSize; + } + + /** + * Gets the string data section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the string data section + */ + /*package*/ MixedItemSection getStringData() { + return stringData; + } + + /** + * Gets the word data section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the word data section + */ + /*package*/ MixedItemSection getWordData() { + return wordData; + } + + /** + * Gets the type lists section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the word data section + */ + /*package*/ MixedItemSection getTypeLists() { + return typeLists; + } + + /** + * Gets the map section. + * + *

This is package-scope in order to allow the header section + * to query it.

+ * + * @return {@code non-null;} the map section + */ + /*package*/ MixedItemSection getMap() { + return map; + } + + /** + * Gets the string identifiers section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the string identifiers section + */ + /*package*/ StringIdsSection getStringIds() { + return stringIds; + } + + /** + * Gets the class definitions section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the class definitions section + */ + /*package*/ ClassDefsSection getClassDefs() { + return classDefs; + } + + /** + * Gets the class data section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the class data section + */ + /*package*/ MixedItemSection getClassData() { + return classData; + } + + /** + * Gets the type identifiers section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the class identifiers section + */ + /*package*/ TypeIdsSection getTypeIds() { + return typeIds; + } + + /** + * Gets the prototype identifiers section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the prototype identifiers section + */ + /*package*/ ProtoIdsSection getProtoIds() { + return protoIds; + } + + /** + * Gets the field identifiers section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the field identifiers section + */ + /*package*/ FieldIdsSection getFieldIds() { + return fieldIds; + } + + /** + * Gets the method identifiers section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the method identifiers section + */ + /*package*/ MethodIdsSection getMethodIds() { + return methodIds; + } + + /** + * Gets the byte data section. + * + *

This is package-scope in order to allow + * the various {@link Item} instances to add items to the + * instance.

+ * + * @return {@code non-null;} the byte data section + */ + /*package*/ MixedItemSection getByteData() { + return byteData; + } + + /** + * Gets the first section of the file that is to be considered + * part of the data section. + * + *

This is package-scope in order to allow the header section + * to query it.

+ * + * @return {@code non-null;} the section + */ + /*package*/ Section getFirstDataSection() { + return wordData; + } + + /** + * Gets the last section of the file that is to be considered + * part of the data section. + * + *

This is package-scope in order to allow the header section + * to query it.

+ * + * @return {@code non-null;} the section + */ + /*package*/ Section getLastDataSection() { + return map; + } + + /** + * Interns the given constant in the appropriate section of this + * instance, or do nothing if the given constant isn't the sort + * that should be interned. + * + * @param cst {@code non-null;} constant to possibly intern + */ + /*package*/ void internIfAppropriate(Constant cst) { + if (cst instanceof CstString) { + stringIds.intern((CstString) cst); + } else if (cst instanceof CstUtf8) { + stringIds.intern((CstUtf8) cst); + } else if (cst instanceof CstType) { + typeIds.intern((CstType) cst); + } else if (cst instanceof CstBaseMethodRef) { + methodIds.intern((CstBaseMethodRef) cst); + } else if (cst instanceof CstFieldRef) { + fieldIds.intern((CstFieldRef) cst); + } else if (cst instanceof CstEnumRef) { + fieldIds.intern(((CstEnumRef) cst).getFieldRef()); + } else if (cst == null) { + throw new NullPointerException("cst == null"); + } + } + + /** + * Gets the {@link IndexedItem} corresponding to the given constant, + * if it is a constant that has such a correspondence, or return + * {@code null} if it isn't such a constant. This will throw + * an exception if the given constant should have been found + * but wasn't. + * + * @param cst {@code non-null;} the constant to look up + * @return {@code null-ok;} its corresponding item, if it has a corresponding + * item, or {@code null} if it's not that sort of constant + */ + /*package*/ IndexedItem findItemOrNull(Constant cst) { + IndexedItem item; + + if (cst instanceof CstString) { + return stringIds.get(cst); + } else if (cst instanceof CstType) { + return typeIds.get(cst); + } else if (cst instanceof CstBaseMethodRef) { + return methodIds.get(cst); + } else if (cst instanceof CstFieldRef) { + return fieldIds.get(cst); + } else { + return null; + } + } + + /** + * Returns the contents of this instance as a {@code .dex} file, + * in a {@link ByteArrayAnnotatedOutput} instance. + * + * @param annotate whether or not to keep annotations + * @param verbose if annotating, whether to be verbose + * @return {@code non-null;} a {@code .dex} file for this instance + */ + private ByteArrayAnnotatedOutput toDex0(boolean annotate, + boolean verbose) { + /* + * The following is ordered so that the prepare() calls which + * add items happen before the calls to the sections that get + * added to. + */ + + classDefs.prepare(); + classData.prepare(); + wordData.prepare(); + byteData.prepare(); + methodIds.prepare(); + fieldIds.prepare(); + protoIds.prepare(); + typeLists.prepare(); + typeIds.prepare(); + stringIds.prepare(); + stringData.prepare(); + header.prepare(); + + // Place the sections within the file. + + int count = sections.length; + int offset = 0; + + for (int i = 0; i < count; i++) { + Section one = sections[i]; + int placedAt = one.setFileOffset(offset); + if (placedAt < offset) { + throw new RuntimeException("bogus placement for section " + i); + } + + try { + if (one == map) { + /* + * Inform the map of all the sections, and add it + * to the file. This can only be done after all + * the other items have been sorted and placed. + */ + MapItem.addMap(sections, map); + map.prepare(); + } + + if (one instanceof MixedItemSection) { + /* + * Place the items of a MixedItemSection that just + * got placed. + */ + ((MixedItemSection) one).placeItems(); + } + + offset = placedAt + one.writeSize(); + } catch (RuntimeException ex) { + throw ExceptionWithContext.withContext(ex, + "...while writing section " + i); + } + } + + // Write out all the sections. + + fileSize = offset; + byte[] barr = new byte[fileSize]; + ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(barr); + + if (annotate) { + out.enableAnnotations(dumpWidth, verbose); + } + + for (int i = 0; i < count; i++) { + try { + Section one = sections[i]; + int zeroCount = one.getFileOffset() - out.getCursor(); + if (zeroCount < 0) { + throw new ExceptionWithContext("excess write of " + + (-zeroCount)); + } + out.writeZeroes(one.getFileOffset() - out.getCursor()); + one.writeTo(out); + } catch (RuntimeException ex) { + ExceptionWithContext ec; + if (ex instanceof ExceptionWithContext) { + ec = (ExceptionWithContext) ex; + } else { + ec = new ExceptionWithContext(ex); + } + ec.addContext("...while writing section " + i); + throw ec; + } + } + + if (out.getCursor() != fileSize) { + throw new RuntimeException("foreshortened write"); + } + + // Perform final bookkeeping. + + calcSignature(barr); + calcChecksum(barr); + + if (annotate) { + wordData.writeIndexAnnotation(out, ItemType.TYPE_CODE_ITEM, + "\nmethod code index:\n\n"); + getStatistics().writeAnnotation(out); + out.finishAnnotating(); + } + + return out; + } + + /** + * Generates and returns statistics for all the items in the file. + * + * @return {@code non-null;} the statistics + */ + public Statistics getStatistics() { + Statistics stats = new Statistics(); + + for (Section s : sections) { + stats.addAll(s); + } + + return stats; + } + + /** + * Calculates the signature for the {@code .dex} file in the + * given array, and modify the array to contain it. + * + * @param bytes {@code non-null;} the bytes of the file + */ + private static void calcSignature(byte[] bytes) { + MessageDigest md; + + try { + md = MessageDigest.getInstance("SHA-1"); + } catch (NoSuchAlgorithmException ex) { + throw new RuntimeException(ex); + } + + md.update(bytes, 32, bytes.length - 32); + + try { + int amt = md.digest(bytes, 12, 20); + if (amt != 20) { + throw new RuntimeException("unexpected digest write: " + amt + + " bytes"); + } + } catch (DigestException ex) { + throw new RuntimeException(ex); + } + } + + /** + * Calculates the checksum for the {@code .dex} file in the + * given array, and modify the array to contain it. + * + * @param bytes {@code non-null;} the bytes of the file + */ + private static void calcChecksum(byte[] bytes) { + Adler32 a32 = new Adler32(); + + a32.update(bytes, 12, bytes.length - 12); + + int sum = (int) a32.getValue(); + + bytes[8] = (byte) sum; + bytes[9] = (byte) (sum >> 8); + bytes[10] = (byte) (sum >> 16); + bytes[11] = (byte) (sum >> 24); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/EncodedArrayItem.java b/dexgen/src/com/android/dexgen/dex/file/EncodedArrayItem.java new file mode 100644 index 0000000..cef2375 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/EncodedArrayItem.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotation; +import com.android.dexgen.rop.annotation.AnnotationVisibility; +import com.android.dexgen.rop.annotation.NameValuePair; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstAnnotation; +import com.android.dexgen.rop.cst.CstArray; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ByteArrayAnnotatedOutput; + +import java.util.Arrays; +import java.util.Comparator; + +/** + * Encoded array of constant values. + */ +public final class EncodedArrayItem extends OffsettedItem { + /** the required alignment for instances of this class */ + private static final int ALIGNMENT = 1; + + /** {@code non-null;} the array to represent */ + private final CstArray array; + + /** + * {@code null-ok;} encoded form, ready for writing to a file; set during + * {@link #place0} + */ + private byte[] encodedForm; + + /** + * Constructs an instance. + * + * @param array {@code non-null;} array to represent + */ + public EncodedArrayItem(CstArray array) { + /* + * The write size isn't known up-front because (the variable-lengthed) + * leb128 type is used to represent some things. + */ + super(ALIGNMENT, -1); + + if (array == null) { + throw new NullPointerException("array == null"); + } + + this.array = array; + this.encodedForm = null; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_ENCODED_ARRAY_ITEM; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return array.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(OffsettedItem other) { + EncodedArrayItem otherArray = (EncodedArrayItem) other; + + return array.compareTo(otherArray.array); + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + return array.toHuman(); + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + ValueEncoder.addContents(file, array); + } + + /** {@inheritDoc} */ + @Override + protected void place0(Section addedTo, int offset) { + // Encode the data and note the size. + + ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(); + ValueEncoder encoder = new ValueEncoder(addedTo.getFile(), out); + + encoder.writeArray(array, false); + encodedForm = out.toByteArray(); + setWriteSize(encodedForm.length); + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + boolean annotates = out.annotates(); + + if (annotates) { + out.annotate(0, offsetString() + " encoded array"); + + /* + * The output is to be annotated, so redo the work previously + * done by place0(), except this time annotations will actually + * get emitted. + */ + ValueEncoder encoder = new ValueEncoder(file, out); + encoder.writeArray(array, true); + } else { + out.write(encodedForm); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/EncodedField.java b/dexgen/src/com/android/dexgen/dex/file/EncodedField.java new file mode 100644 index 0000000..5af2b1f --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/EncodedField.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.code.AccessFlags; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.Leb128Utils; + +import java.io.PrintWriter; + +/** + * Representation of a field of a class, of any sort. + */ +public final class EncodedField extends EncodedMember + implements Comparable { + /** {@code non-null;} constant for the field */ + private final CstFieldRef field; + + /** + * Constructs an instance. + * + * @param field {@code non-null;} constant for the field + * @param accessFlags access flags + */ + public EncodedField(CstFieldRef field, int accessFlags) { + super(accessFlags); + + if (field == null) { + throw new NullPointerException("field == null"); + } + + /* + * TODO: Maybe check accessFlags, at least for + * easily-checked stuff? + */ + + this.field = field; + } + + /** {@inheritDoc} */ + public int hashCode() { + return field.hashCode(); + } + + /** {@inheritDoc} */ + public boolean equals(Object other) { + if (! (other instanceof EncodedField)) { + return false; + } + + return compareTo((EncodedField) other) == 0; + } + + /** + * {@inheritDoc} + * + *

Note: This compares the method constants only, + * ignoring any associated code, because it should never be the + * case that two different items with the same method constant + * ever appear in the same list (or same file, even).

+ */ + public int compareTo(EncodedField other) { + return field.compareTo(other.field); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(100); + + sb.append(getClass().getName()); + sb.append('{'); + sb.append(Hex.u2(getAccessFlags())); + sb.append(' '); + sb.append(field); + sb.append('}'); + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + FieldIdsSection fieldIds = file.getFieldIds(); + fieldIds.intern(field); + } + + /** {@inheritDoc} */ + @Override + public CstUtf8 getName() { + return field.getNat().getName(); + } + + /** {@inheritDoc} */ + public String toHuman() { + return field.toHuman(); + } + + /** {@inheritDoc} */ + @Override + public void debugPrint(PrintWriter out, boolean verbose) { + // TODO: Maybe put something better here? + out.println(toString()); + } + + /** + * Gets the constant for the field. + * + * @return {@code non-null;} the constant + */ + public CstFieldRef getRef() { + return field; + } + + /** {@inheritDoc} */ + @Override + public int encode(DexFile file, AnnotatedOutput out, + int lastIndex, int dumpSeq) { + int fieldIdx = file.getFieldIds().indexOf(field); + int diff = fieldIdx - lastIndex; + int accessFlags = getAccessFlags(); + + if (out.annotates()) { + out.annotate(0, String.format(" [%x] %s", dumpSeq, + field.toHuman())); + out.annotate(Leb128Utils.unsignedLeb128Size(diff), + " field_idx: " + Hex.u4(fieldIdx)); + out.annotate(Leb128Utils.unsignedLeb128Size(accessFlags), + " access_flags: " + + AccessFlags.fieldString(accessFlags)); + } + + out.writeUnsignedLeb128(diff); + out.writeUnsignedLeb128(accessFlags); + + return fieldIdx; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/EncodedMember.java b/dexgen/src/com/android/dexgen/dex/file/EncodedMember.java new file mode 100644 index 0000000..6c31704 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/EncodedMember.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ToHuman; + +import java.io.PrintWriter; + +/** + * Representation of a member (field or method) of a class, for the + * purposes of encoding it inside a {@link ClassDataItem}. + */ +public abstract class EncodedMember implements ToHuman { + /** access flags */ + private final int accessFlags; + + /** + * Constructs an instance. + * + * @param accessFlags access flags for the member + */ + public EncodedMember(int accessFlags) { + this.accessFlags = accessFlags; + } + + /** + * Gets the access flags. + * + * @return the access flags + */ + public final int getAccessFlags() { + return accessFlags; + } + + /** + * Gets the name. + * + * @return {@code non-null;} the name + */ + public abstract CstUtf8 getName(); + + /** + * Does a human-friendly dump of this instance. + * + * @param out {@code non-null;} where to dump + * @param verbose whether to be verbose with the output + */ + public abstract void debugPrint(PrintWriter out, boolean verbose); + + /** + * Populates a {@link DexFile} with items from within this instance. + * + * @param file {@code non-null;} the file to populate + */ + public abstract void addContents(DexFile file); + + /** + * Encodes this instance to the given output. + * + * @param file {@code non-null;} file this instance is part of + * @param out {@code non-null;} where to write to + * @param lastIndex {@code >= 0;} the previous member index value encoded, or + * {@code 0} if this is the first element to encode + * @param dumpSeq {@code >= 0;} sequence number of this instance for + * annotation purposes + * @return {@code >= 0;} the member index value that was encoded + */ + public abstract int encode(DexFile file, AnnotatedOutput out, + int lastIndex, int dumpSeq); +} diff --git a/dexgen/src/com/android/dexgen/dex/file/EncodedMethod.java b/dexgen/src/com/android/dexgen/dex/file/EncodedMethod.java new file mode 100644 index 0000000..a35ca2c --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/EncodedMethod.java @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.dex.code.DalvCode; +import com.android.dexgen.rop.code.AccessFlags; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.Leb128Utils; + +import java.io.PrintWriter; + +/** + * Class that representats a method of a class. + */ +public final class EncodedMethod extends EncodedMember + implements Comparable { + /** {@code non-null;} constant for the method */ + private final CstMethodRef method; + + /** + * {@code null-ok;} code for the method, if the method is neither + * {@code abstract} nor {@code native} + */ + private final CodeItem code; + + /** + * Constructs an instance. + * + * @param method {@code non-null;} constant for the method + * @param accessFlags access flags + * @param code {@code null-ok;} code for the method, if it is neither + * {@code abstract} nor {@code native} + * @param throwsList {@code non-null;} list of possibly-thrown exceptions, + * just used in generating debugging output (listings) + */ + public EncodedMethod(CstMethodRef method, int accessFlags, + DalvCode code, TypeList throwsList) { + super(accessFlags); + + if (method == null) { + throw new NullPointerException("method == null"); + } + + this.method = method; + + if (code == null) { + this.code = null; + } else { + boolean isStatic = (accessFlags & AccessFlags.ACC_STATIC) != 0; + this.code = new CodeItem(method, code, isStatic, throwsList); + } + } + + /** {@inheritDoc} */ + public boolean equals(Object other) { + if (! (other instanceof EncodedMethod)) { + return false; + } + + return compareTo((EncodedMethod) other) == 0; + } + + /** + * {@inheritDoc} + * + *

Note: This compares the method constants only, + * ignoring any associated code, because it should never be the + * case that two different items with the same method constant + * ever appear in the same list (or same file, even).

+ */ + public int compareTo(EncodedMethod other) { + return method.compareTo(other.method); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(100); + + sb.append(getClass().getName()); + sb.append('{'); + sb.append(Hex.u2(getAccessFlags())); + sb.append(' '); + sb.append(method); + + if (code != null) { + sb.append(' '); + sb.append(code); + } + + sb.append('}'); + + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + MethodIdsSection methodIds = file.getMethodIds(); + MixedItemSection wordData = file.getWordData(); + + methodIds.intern(method); + + if (code != null) { + wordData.add(code); + } + } + + /** {@inheritDoc} */ + public final String toHuman() { + return method.toHuman(); + } + + /** {@inheritDoc} */ + @Override + public final CstUtf8 getName() { + return method.getNat().getName(); + } + + /** {@inheritDoc} */ + @Override + public void debugPrint(PrintWriter out, boolean verbose) { + if (code == null) { + out.println(getRef().toHuman() + ": abstract or native"); + } else { + code.debugPrint(out, " ", verbose); + } + } + + /** + * Gets the constant for the method. + * + * @return {@code non-null;} the constant + */ + public final CstMethodRef getRef() { + return method; + } + + /** {@inheritDoc} */ + @Override + public int encode(DexFile file, AnnotatedOutput out, + int lastIndex, int dumpSeq) { + int methodIdx = file.getMethodIds().indexOf(method); + int diff = methodIdx - lastIndex; + int accessFlags = getAccessFlags(); + int codeOff = OffsettedItem.getAbsoluteOffsetOr0(code); + boolean hasCode = (codeOff != 0); + boolean shouldHaveCode = (accessFlags & + (AccessFlags.ACC_ABSTRACT | AccessFlags.ACC_NATIVE)) == 0; + + /* + * Verify that code appears if and only if a method is + * declared to have it. + */ + if (hasCode != shouldHaveCode) { + throw new UnsupportedOperationException( + "code vs. access_flags mismatch"); + } + + if (out.annotates()) { + out.annotate(0, String.format(" [%x] %s", dumpSeq, + method.toHuman())); + out.annotate(Leb128Utils.unsignedLeb128Size(diff), + " method_idx: " + Hex.u4(methodIdx)); + out.annotate(Leb128Utils.unsignedLeb128Size(accessFlags), + " access_flags: " + + AccessFlags.methodString(accessFlags)); + out.annotate(Leb128Utils.unsignedLeb128Size(codeOff), + " code_off: " + Hex.u4(codeOff)); + } + + out.writeUnsignedLeb128(diff); + out.writeUnsignedLeb128(accessFlags); + out.writeUnsignedLeb128(codeOff); + + return methodIdx; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/FieldAnnotationStruct.java b/dexgen/src/com/android/dexgen/dex/file/FieldAnnotationStruct.java new file mode 100644 index 0000000..95e4dbc --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/FieldAnnotationStruct.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotations; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.ToHuman; + +/** + * Association of a field and its annotations. + */ +public final class FieldAnnotationStruct + implements ToHuman, Comparable { + /** {@code non-null;} the field in question */ + private final CstFieldRef field; + + /** {@code non-null;} the associated annotations */ + private AnnotationSetItem annotations; + + /** + * Constructs an instance. + * + * @param field {@code non-null;} the field in question + * @param annotations {@code non-null;} the associated annotations + */ + public FieldAnnotationStruct(CstFieldRef field, + AnnotationSetItem annotations) { + if (field == null) { + throw new NullPointerException("field == null"); + } + + if (annotations == null) { + throw new NullPointerException("annotations == null"); + } + + this.field = field; + this.annotations = annotations; + } + + /** {@inheritDoc} */ + public int hashCode() { + return field.hashCode(); + } + + /** {@inheritDoc} */ + public boolean equals(Object other) { + if (! (other instanceof FieldAnnotationStruct)) { + return false; + } + + return field.equals(((FieldAnnotationStruct) other).field); + } + + /** {@inheritDoc} */ + public int compareTo(FieldAnnotationStruct other) { + return field.compareTo(other.field); + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + FieldIdsSection fieldIds = file.getFieldIds(); + MixedItemSection wordData = file.getWordData(); + + fieldIds.intern(field); + annotations = wordData.intern(annotations); + } + + /** {@inheritDoc} */ + public void writeTo(DexFile file, AnnotatedOutput out) { + int fieldIdx = file.getFieldIds().indexOf(field); + int annotationsOff = annotations.getAbsoluteOffset(); + + if (out.annotates()) { + out.annotate(0, " " + field.toHuman()); + out.annotate(4, " field_idx: " + Hex.u4(fieldIdx)); + out.annotate(4, " annotations_off: " + + Hex.u4(annotationsOff)); + } + + out.writeInt(fieldIdx); + out.writeInt(annotationsOff); + } + + /** {@inheritDoc} */ + public String toHuman() { + return field.toHuman() + ": " + annotations; + } + + /** + * Gets the field this item is for. + * + * @return {@code non-null;} the field + */ + public CstFieldRef getField() { + return field; + } + + /** + * Gets the associated annotations. + * + * @return {@code non-null;} the annotations + */ + public Annotations getAnnotations() { + return annotations.getAnnotations(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/FieldIdItem.java b/dexgen/src/com/android/dexgen/dex/file/FieldIdItem.java new file mode 100644 index 0000000..4d3721e --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/FieldIdItem.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstFieldRef; + +/** + * Representation of a field reference inside a Dalvik file. + */ +public final class FieldIdItem extends MemberIdItem { + /** + * Constructs an instance. + * + * @param field {@code non-null;} the constant for the field + */ + public FieldIdItem(CstFieldRef field) { + super(field); + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_FIELD_ID_ITEM; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + super.addContents(file); + + TypeIdsSection typeIds = file.getTypeIds(); + typeIds.intern(getFieldRef().getType()); + } + + /** + * Gets the field constant. + * + * @return {@code non-null;} the constant + */ + public CstFieldRef getFieldRef() { + return (CstFieldRef) getRef(); + } + + /** {@inheritDoc} */ + @Override + protected int getTypoidIdx(DexFile file) { + TypeIdsSection typeIds = file.getTypeIds(); + return typeIds.indexOf(getFieldRef().getType()); + } + + /** {@inheritDoc} */ + @Override + protected String getTypoidName() { + return "type_idx"; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/FieldIdsSection.java b/dexgen/src/com/android/dexgen/dex/file/FieldIdsSection.java new file mode 100644 index 0000000..65177e4 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/FieldIdsSection.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.Collection; +import java.util.TreeMap; + +/** + * Field refs list section of a {@code .dex} file. + */ +public final class FieldIdsSection extends MemberIdsSection { + /** + * {@code non-null;} map from field constants to {@link + * FieldIdItem} instances + */ + private final TreeMap fieldIds; + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param file {@code non-null;} file that this instance is part of + */ + public FieldIdsSection(DexFile file) { + super("field_ids", file); + + fieldIds = new TreeMap(); + } + + /** {@inheritDoc} */ + @Override + public Collection items() { + return fieldIds.values(); + } + + /** {@inheritDoc} */ + @Override + public IndexedItem get(Constant cst) { + if (cst == null) { + throw new NullPointerException("cst == null"); + } + + throwIfNotPrepared(); + + IndexedItem result = fieldIds.get((CstFieldRef) cst); + + if (result == null) { + throw new IllegalArgumentException("not found"); + } + + return result; + } + + /** + * Writes the portion of the file header that refers to this instance. + * + * @param out {@code non-null;} where to write + */ + public void writeHeaderPart(AnnotatedOutput out) { + throwIfNotPrepared(); + + int sz = fieldIds.size(); + int offset = (sz == 0) ? 0 : getFileOffset(); + + if (out.annotates()) { + out.annotate(4, "field_ids_size: " + Hex.u4(sz)); + out.annotate(4, "field_ids_off: " + Hex.u4(offset)); + } + + out.writeInt(sz); + out.writeInt(offset); + } + + /** + * Interns an element into this instance. + * + * @param field {@code non-null;} the reference to intern + * @return {@code non-null;} the interned reference + */ + public FieldIdItem intern(CstFieldRef field) { + if (field == null) { + throw new NullPointerException("field == null"); + } + + throwIfPrepared(); + + FieldIdItem result = fieldIds.get(field); + + if (result == null) { + result = new FieldIdItem(field); + fieldIds.put(field, result); + } + + return result; + } + + /** + * Gets the index of the given reference, which must have been added + * to this instance. + * + * @param ref {@code non-null;} the reference to look up + * @return {@code >= 0;} the reference's index + */ + public int indexOf(CstFieldRef ref) { + if (ref == null) { + throw new NullPointerException("ref == null"); + } + + throwIfNotPrepared(); + + FieldIdItem item = fieldIds.get(ref); + + if (item == null) { + throw new IllegalArgumentException("not found"); + } + + return item.getIndex(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/HeaderItem.java b/dexgen/src/com/android/dexgen/dex/file/HeaderItem.java new file mode 100644 index 0000000..ed04e25 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/HeaderItem.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * File header section of a {@code .dex} file. + */ +public final class HeaderItem extends IndexedItem { + /** + * {@code non-null;} the file format magic number, represented as the + * low-order bytes of a string + */ + private static final String MAGIC = "dex\n035\0"; + + /** size of this section, in bytes */ + private static final int HEADER_SIZE = 0x70; + + /** the endianness tag */ + private static final int ENDIAN_TAG = 0x12345678; + + /** + * Constructs an instance. + */ + public HeaderItem() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_HEADER_ITEM; + } + + /** {@inheritDoc} */ + @Override + public int writeSize() { + return HEADER_SIZE; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + // Nothing to do here. + } + + /** {@inheritDoc} */ + @Override + public void writeTo(DexFile file, AnnotatedOutput out) { + int mapOff = file.getMap().getFileOffset(); + Section firstDataSection = file.getFirstDataSection(); + Section lastDataSection = file.getLastDataSection(); + int dataOff = firstDataSection.getFileOffset(); + int dataSize = lastDataSection.getFileOffset() + + lastDataSection.writeSize() - dataOff; + + if (out.annotates()) { + out.annotate(8, "magic: " + new CstUtf8(MAGIC).toQuoted()); + out.annotate(4, "checksum"); + out.annotate(20, "signature"); + out.annotate(4, "file_size: " + + Hex.u4(file.getFileSize())); + out.annotate(4, "header_size: " + Hex.u4(HEADER_SIZE)); + out.annotate(4, "endian_tag: " + Hex.u4(ENDIAN_TAG)); + out.annotate(4, "link_size: 0"); + out.annotate(4, "link_off: 0"); + out.annotate(4, "map_off: " + Hex.u4(mapOff)); + } + + // Write the magic number. + for (int i = 0; i < 8; i++) { + out.writeByte(MAGIC.charAt(i)); + } + + // Leave space for the checksum and signature. + out.writeZeroes(24); + + out.writeInt(file.getFileSize()); + out.writeInt(HEADER_SIZE); + out.writeInt(ENDIAN_TAG); + + /* + * Write zeroes for the link size and data, as the output + * isn't a staticly linked file. + */ + out.writeZeroes(8); + + out.writeInt(mapOff); + + // Write out each section's respective header part. + file.getStringIds().writeHeaderPart(out); + file.getTypeIds().writeHeaderPart(out); + file.getProtoIds().writeHeaderPart(out); + file.getFieldIds().writeHeaderPart(out); + file.getMethodIds().writeHeaderPart(out); + file.getClassDefs().writeHeaderPart(out); + + if (out.annotates()) { + out.annotate(4, "data_size: " + Hex.u4(dataSize)); + out.annotate(4, "data_off: " + Hex.u4(dataOff)); + } + + out.writeInt(dataSize); + out.writeInt(dataOff); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/HeaderSection.java b/dexgen/src/com/android/dexgen/dex/file/HeaderSection.java new file mode 100644 index 0000000..967a90a --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/HeaderSection.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * File header section of a {@code .dex} file. + */ +public final class HeaderSection extends UniformItemSection { + /** {@code non-null;} the list of the one item in the section */ + private final List list; + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param file {@code non-null;} file that this instance is part of + */ + public HeaderSection(DexFile file) { + super(null, file, 4); + + HeaderItem item = new HeaderItem(); + item.setIndex(0); + + this.list = Collections.singletonList(item); + } + + /** {@inheritDoc} */ + @Override + public IndexedItem get(Constant cst) { + return null; + } + + /** {@inheritDoc} */ + @Override + public Collection items() { + return list; + } + + /** {@inheritDoc} */ + @Override + protected void orderItems() { + // Nothing to do here. + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/IdItem.java b/dexgen/src/com/android/dexgen/dex/file/IdItem.java new file mode 100644 index 0000000..0f8301e --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/IdItem.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstType; + +/** + * Representation of a reference to an item inside a Dalvik file. + */ +public abstract class IdItem extends IndexedItem { + /** + * {@code non-null;} the type constant for the defining class of + * the reference + */ + private final CstType type; + + /** + * Constructs an instance. + * + * @param type {@code non-null;} the type constant for the defining + * class of the reference + */ + public IdItem(CstType type) { + if (type == null) { + throw new NullPointerException("type == null"); + } + + this.type = type; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + TypeIdsSection typeIds = file.getTypeIds(); + typeIds.intern(type); + } + + /** + * Gets the type constant for the defining class of the + * reference. + * + * @return {@code non-null;} the type constant + */ + public final CstType getDefiningClass() { + return type; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/IndexedItem.java b/dexgen/src/com/android/dexgen/dex/file/IndexedItem.java new file mode 100644 index 0000000..cdc73cb --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/IndexedItem.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +/** + * An item in a Dalvik file which is referenced by index. + */ +public abstract class IndexedItem extends Item { + /** {@code >= -1;} assigned index of the item, or {@code -1} if not + * yet assigned */ + private int index; + + /** + * Constructs an instance. The index is initially unassigned. + */ + public IndexedItem() { + index = -1; + } + + /** + * Gets whether or not this instance has been assigned an index. + * + * @return {@code true} iff this instance has been assigned an index + */ + public final boolean hasIndex() { + return (index >= 0); + } + + /** + * Gets the item index. + * + * @return {@code >= 0;} the index + * @throws RuntimeException thrown if the item index is not yet assigned + */ + public final int getIndex() { + if (index < 0) { + throw new RuntimeException("index not yet set"); + } + + return index; + } + + /** + * Sets the item index. This method may only ever be called once + * per instance, and this will throw a {@code RuntimeException} if + * called a second (or subsequent) time. + * + * @param index {@code >= 0;} the item index + */ + public final void setIndex(int index) { + if (this.index != -1) { + throw new RuntimeException("index already set"); + } + + this.index = index; + } + + /** + * Gets the index of this item as a string, suitable for including in + * annotations. + * + * @return {@code non-null;} the index string + */ + public final String indexString() { + return '[' + Integer.toHexString(index) + ']'; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/Item.java b/dexgen/src/com/android/dexgen/dex/file/Item.java new file mode 100644 index 0000000..45cdc94 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/Item.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.AnnotatedOutput; + +/** + * Base class for any structurally-significant and (potentially) + * repeated piece of a Dalvik file. + */ +public abstract class Item { + /** + * Constructs an instance. + */ + public Item() { + // This space intentionally left blank. + } + + /** + * Returns the item type for this instance. + * + * @return {@code non-null;} the item type + */ + public abstract ItemType itemType(); + + /** + * Returns the human name for the particular type of item this + * instance is. + * + * @return {@code non-null;} the name + */ + public final String typeName() { + return itemType().toHuman(); + } + + /** + * Gets the size of this instance when written, in bytes. + * + * @return {@code >= 0;} the write size + */ + public abstract int writeSize(); + + /** + * Populates a {@link DexFile} with items from within this instance. + * This will not add an item to the file for this instance itself + * (which should have been done by whatever refers to this instance). + * + *

Note: Subclasses must override this to do something + * appropriate.

+ * + * @param file {@code non-null;} the file to populate + */ + public abstract void addContents(DexFile file); + + /** + * Writes the representation of this instance to the given data section, + * using the given {@link DexFile} to look things up as needed. + * If this instance keeps track of its offset, then this method will + * note the written offset and will also throw an exception if this + * instance has already been written. + * + * @param file {@code non-null;} the file to use for reference + * @param out {@code non-null;} where to write to + */ + public abstract void writeTo(DexFile file, AnnotatedOutput out); +} diff --git a/dexgen/src/com/android/dexgen/dex/file/ItemType.java b/dexgen/src/com/android/dexgen/dex/file/ItemType.java new file mode 100644 index 0000000..b3e32d0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/ItemType.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.ToHuman; + +/** + * Enumeration of all the top-level item types. + */ +public enum ItemType implements ToHuman { + TYPE_HEADER_ITEM( 0x0000, "header_item"), + TYPE_STRING_ID_ITEM( 0x0001, "string_id_item"), + TYPE_TYPE_ID_ITEM( 0x0002, "type_id_item"), + TYPE_PROTO_ID_ITEM( 0x0003, "proto_id_item"), + TYPE_FIELD_ID_ITEM( 0x0004, "field_id_item"), + TYPE_METHOD_ID_ITEM( 0x0005, "method_id_item"), + TYPE_CLASS_DEF_ITEM( 0x0006, "class_def_item"), + TYPE_MAP_LIST( 0x1000, "map_list"), + TYPE_TYPE_LIST( 0x1001, "type_list"), + TYPE_ANNOTATION_SET_REF_LIST( 0x1002, "annotation_set_ref_list"), + TYPE_ANNOTATION_SET_ITEM( 0x1003, "annotation_set_item"), + TYPE_CLASS_DATA_ITEM( 0x2000, "class_data_item"), + TYPE_CODE_ITEM( 0x2001, "code_item"), + TYPE_STRING_DATA_ITEM( 0x2002, "string_data_item"), + TYPE_DEBUG_INFO_ITEM( 0x2003, "debug_info_item"), + TYPE_ANNOTATION_ITEM( 0x2004, "annotation_item"), + TYPE_ENCODED_ARRAY_ITEM( 0x2005, "encoded_array_item"), + TYPE_ANNOTATIONS_DIRECTORY_ITEM(0x2006, "annotations_directory_item"), + TYPE_MAP_ITEM( -1, "map_item"), + TYPE_TYPE_ITEM( -1, "type_item"), + TYPE_EXCEPTION_HANDLER_ITEM( -1, "exception_handler_item"), + TYPE_ANNOTATION_SET_REF_ITEM( -1, "annotation_set_ref_item"); + + /** value when represented in a {@link MapItem} */ + private final int mapValue; + + /** {@code non-null;} name of the type */ + private final String typeName; + + /** {@code non-null;} the short human name */ + private final String humanName; + + /** + * Constructs an instance. + * + * @param mapValue value when represented in a {@link MapItem} + * @param typeName {@code non-null;} name of the type + */ + private ItemType(int mapValue, String typeName) { + this.mapValue = mapValue; + this.typeName = typeName; + + // Make the human name. + String human = typeName; + if (human.endsWith("_item")) { + human = human.substring(0, human.length() - 5); + } + this.humanName = human.replace('_', ' '); + } + + /** + * Gets the map value. + * + * @return the map value + */ + public int getMapValue() { + return mapValue; + } + + /** + * Gets the type name. + * + * @return {@code non-null;} the type name + */ + public String getTypeName() { + return typeName; + } + + /** {@inheritDoc} */ + public String toHuman() { + return humanName; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/MapItem.java b/dexgen/src/com/android/dexgen/dex/file/MapItem.java new file mode 100644 index 0000000..02472d4 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/MapItem.java @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.ArrayList; + +/** + * Class that represents a map item. + */ +public final class MapItem extends OffsettedItem { + /** file alignment of this class, in bytes */ + private static final int ALIGNMENT = 4; + + /** write size of this class, in bytes: three {@code uint}s */ + private static final int WRITE_SIZE = (4 * 3); + + /** {@code non-null;} item type this instance covers */ + private final ItemType type; + + /** {@code non-null;} section this instance covers */ + private final Section section; + + /** + * {@code null-ok;} first item covered or {@code null} if this is + * a self-reference + */ + private final Item firstItem; + + /** + * {@code null-ok;} last item covered or {@code null} if this is + * a self-reference + */ + private final Item lastItem; + + /** + * {@code > 0;} count of items covered; {@code 1} if this + * is a self-reference + */ + private final int itemCount; + + /** + * Constructs a list item with instances of this class representing + * the contents of the given array of sections, adding it to the + * given map section. + * + * @param sections {@code non-null;} the sections + * @param mapSection {@code non-null;} the section that the resulting map + * should be added to; it should be empty on entry to this method + */ + public static void addMap(Section[] sections, + MixedItemSection mapSection) { + if (sections == null) { + throw new NullPointerException("sections == null"); + } + + if (mapSection.items().size() != 0) { + throw new IllegalArgumentException( + "mapSection.items().size() != 0"); + } + + ArrayList items = new ArrayList(50); + + for (Section section : sections) { + ItemType currentType = null; + Item firstItem = null; + Item lastItem = null; + int count = 0; + + for (Item item : section.items()) { + ItemType type = item.itemType(); + if (type != currentType) { + if (count != 0) { + items.add(new MapItem(currentType, section, + firstItem, lastItem, count)); + } + currentType = type; + firstItem = item; + count = 0; + } + lastItem = item; + count++; + } + + if (count != 0) { + // Add a MapItem for the final items in the section. + items.add(new MapItem(currentType, section, + firstItem, lastItem, count)); + } else if (section == mapSection) { + // Add a MapItem for the self-referential section. + items.add(new MapItem(mapSection)); + } + } + + mapSection.add( + new UniformListItem(ItemType.TYPE_MAP_LIST, items)); + } + + /** + * Constructs an instance. + * + * @param type {@code non-null;} item type this instance covers + * @param section {@code non-null;} section this instance covers + * @param firstItem {@code non-null;} first item covered + * @param lastItem {@code non-null;} last item covered + * @param itemCount {@code > 0;} count of items covered + */ + private MapItem(ItemType type, Section section, Item firstItem, + Item lastItem, int itemCount) { + super(ALIGNMENT, WRITE_SIZE); + + if (type == null) { + throw new NullPointerException("type == null"); + } + + if (section == null) { + throw new NullPointerException("section == null"); + } + + if (firstItem == null) { + throw new NullPointerException("firstItem == null"); + } + + if (lastItem == null) { + throw new NullPointerException("lastItem == null"); + } + + if (itemCount <= 0) { + throw new IllegalArgumentException("itemCount <= 0"); + } + + this.type = type; + this.section = section; + this.firstItem = firstItem; + this.lastItem = lastItem; + this.itemCount = itemCount; + } + + /** + * Constructs a self-referential instance. This instance is meant to + * represent the section containing the {@code map_list}. + * + * @param section {@code non-null;} section this instance covers + */ + private MapItem(Section section) { + super(ALIGNMENT, WRITE_SIZE); + + if (section == null) { + throw new NullPointerException("section == null"); + } + + this.type = ItemType.TYPE_MAP_LIST; + this.section = section; + this.firstItem = null; + this.lastItem = null; + this.itemCount = 1; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_MAP_ITEM; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(100); + + sb.append(getClass().getName()); + sb.append('{'); + sb.append(section.toString()); + sb.append(' '); + sb.append(type.toHuman()); + sb.append('}'); + + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + // We have nothing to add. + } + + /** {@inheritDoc} */ + @Override + public final String toHuman() { + return toString(); + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + int value = type.getMapValue(); + int offset; + + if (firstItem == null) { + offset = section.getFileOffset(); + } else { + offset = section.getAbsoluteItemOffset(firstItem); + } + + if (out.annotates()) { + out.annotate(0, offsetString() + ' ' + type.getTypeName() + + " map"); + out.annotate(2, " type: " + Hex.u2(value) + " // " + + type.toString()); + out.annotate(2, " unused: 0"); + out.annotate(4, " size: " + Hex.u4(itemCount)); + out.annotate(4, " offset: " + Hex.u4(offset)); + } + + out.writeShort(value); + out.writeShort(0); // unused + out.writeInt(itemCount); + out.writeInt(offset); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/MemberIdItem.java b/dexgen/src/com/android/dexgen/dex/file/MemberIdItem.java new file mode 100644 index 0000000..d638f07 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/MemberIdItem.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstMemberRef; +import com.android.dexgen.rop.cst.CstNat; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * Representation of a member (field or method) reference inside a + * Dalvik file. + */ +public abstract class MemberIdItem extends IdItem { + /** size of instances when written out to a file, in bytes */ + public static final int WRITE_SIZE = 8; + + /** {@code non-null;} the constant for the member */ + private final CstMemberRef cst; + + /** + * Constructs an instance. + * + * @param cst {@code non-null;} the constant for the member + */ + public MemberIdItem(CstMemberRef cst) { + super(cst.getDefiningClass()); + + this.cst = cst; + } + + /** {@inheritDoc} */ + @Override + public int writeSize() { + return WRITE_SIZE; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + super.addContents(file); + + StringIdsSection stringIds = file.getStringIds(); + stringIds.intern(getRef().getNat().getName()); + } + + /** {@inheritDoc} */ + @Override + public final void writeTo(DexFile file, AnnotatedOutput out) { + TypeIdsSection typeIds = file.getTypeIds(); + StringIdsSection stringIds = file.getStringIds(); + CstNat nat = cst.getNat(); + int classIdx = typeIds.indexOf(getDefiningClass()); + int nameIdx = stringIds.indexOf(nat.getName()); + int typoidIdx = getTypoidIdx(file); + + if (out.annotates()) { + out.annotate(0, indexString() + ' ' + cst.toHuman()); + out.annotate(2, " class_idx: " + Hex.u2(classIdx)); + out.annotate(2, String.format(" %-10s %s", getTypoidName() + ':', + Hex.u2(typoidIdx))); + out.annotate(4, " name_idx: " + Hex.u4(nameIdx)); + } + + out.writeShort(classIdx); + out.writeShort(typoidIdx); + out.writeInt(nameIdx); + } + + /** + * Returns the index of the type-like thing associated with + * this item, in order that it may be written out. Subclasses must + * override this to get whatever it is they need to store. + * + * @param file {@code non-null;} the file being written + * @return the index in question + */ + protected abstract int getTypoidIdx(DexFile file); + + /** + * Returns the field name of the type-like thing associated with + * this item, for listing-generating purposes. Subclasses must override + * this. + * + * @return {@code non-null;} the name in question + */ + protected abstract String getTypoidName(); + + /** + * Gets the member constant. + * + * @return {@code non-null;} the constant + */ + public final CstMemberRef getRef() { + return cst; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/MemberIdsSection.java b/dexgen/src/com/android/dexgen/dex/file/MemberIdsSection.java new file mode 100644 index 0000000..dcfca30 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/MemberIdsSection.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +/** + * Member (field or method) refs list section of a {@code .dex} file. + */ +public abstract class MemberIdsSection extends UniformItemSection { + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param name {@code null-ok;} the name of this instance, for annotation + * purposes + * @param file {@code non-null;} file that this instance is part of + */ + public MemberIdsSection(String name, DexFile file) { + super(name, file, 4); + } + + /** {@inheritDoc} */ + @Override + protected void orderItems() { + int idx = 0; + + for (Object i : items()) { + ((MemberIdItem) i).setIndex(idx); + idx++; + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/MethodAnnotationStruct.java b/dexgen/src/com/android/dexgen/dex/file/MethodAnnotationStruct.java new file mode 100644 index 0000000..e511f10 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/MethodAnnotationStruct.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotations; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.ToHuman; + +/** + * Association of a method and its annotations. + */ +public final class MethodAnnotationStruct + implements ToHuman, Comparable { + /** {@code non-null;} the method in question */ + private final CstMethodRef method; + + /** {@code non-null;} the associated annotations */ + private AnnotationSetItem annotations; + + /** + * Constructs an instance. + * + * @param method {@code non-null;} the method in question + * @param annotations {@code non-null;} the associated annotations + */ + public MethodAnnotationStruct(CstMethodRef method, + AnnotationSetItem annotations) { + if (method == null) { + throw new NullPointerException("method == null"); + } + + if (annotations == null) { + throw new NullPointerException("annotations == null"); + } + + this.method = method; + this.annotations = annotations; + } + + /** {@inheritDoc} */ + public int hashCode() { + return method.hashCode(); + } + + /** {@inheritDoc} */ + public boolean equals(Object other) { + if (! (other instanceof MethodAnnotationStruct)) { + return false; + } + + return method.equals(((MethodAnnotationStruct) other).method); + } + + /** {@inheritDoc} */ + public int compareTo(MethodAnnotationStruct other) { + return method.compareTo(other.method); + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + MethodIdsSection methodIds = file.getMethodIds(); + MixedItemSection wordData = file.getWordData(); + + methodIds.intern(method); + annotations = wordData.intern(annotations); + } + + /** {@inheritDoc} */ + public void writeTo(DexFile file, AnnotatedOutput out) { + int methodIdx = file.getMethodIds().indexOf(method); + int annotationsOff = annotations.getAbsoluteOffset(); + + if (out.annotates()) { + out.annotate(0, " " + method.toHuman()); + out.annotate(4, " method_idx: " + Hex.u4(methodIdx)); + out.annotate(4, " annotations_off: " + + Hex.u4(annotationsOff)); + } + + out.writeInt(methodIdx); + out.writeInt(annotationsOff); + } + + /** {@inheritDoc} */ + public String toHuman() { + return method.toHuman() + ": " + annotations; + } + + /** + * Gets the method this item is for. + * + * @return {@code non-null;} the method + */ + public CstMethodRef getMethod() { + return method; + } + + /** + * Gets the associated annotations. + * + * @return {@code non-null;} the annotations + */ + public Annotations getAnnotations() { + return annotations.getAnnotations(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/MethodIdItem.java b/dexgen/src/com/android/dexgen/dex/file/MethodIdItem.java new file mode 100644 index 0000000..da14e19 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/MethodIdItem.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstBaseMethodRef; + +/** + * Representation of a method reference inside a Dalvik file. + */ +public final class MethodIdItem extends MemberIdItem { + /** + * Constructs an instance. + * + * @param method {@code non-null;} the constant for the method + */ + public MethodIdItem(CstBaseMethodRef method) { + super(method); + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_METHOD_ID_ITEM; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + super.addContents(file); + + ProtoIdsSection protoIds = file.getProtoIds(); + protoIds.intern(getMethodRef().getPrototype()); + } + + /** + * Gets the method constant. + * + * @return {@code non-null;} the constant + */ + public CstBaseMethodRef getMethodRef() { + return (CstBaseMethodRef) getRef(); + } + + /** {@inheritDoc} */ + @Override + protected int getTypoidIdx(DexFile file) { + ProtoIdsSection protoIds = file.getProtoIds(); + return protoIds.indexOf(getMethodRef().getPrototype()); + } + + /** {@inheritDoc} */ + @Override + protected String getTypoidName() { + return "proto_idx"; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/MethodIdsSection.java b/dexgen/src/com/android/dexgen/dex/file/MethodIdsSection.java new file mode 100644 index 0000000..3a06af7 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/MethodIdsSection.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstBaseMethodRef; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.Collection; +import java.util.TreeMap; + +/** + * Method refs list section of a {@code .dex} file. + */ +public final class MethodIdsSection extends MemberIdsSection { + /** + * {@code non-null;} map from method constants to {@link + * MethodIdItem} instances + */ + private final TreeMap methodIds; + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param file {@code non-null;} file that this instance is part of + */ + public MethodIdsSection(DexFile file) { + super("method_ids", file); + + methodIds = new TreeMap(); + } + + /** {@inheritDoc} */ + @Override + public Collection items() { + return methodIds.values(); + } + + /** {@inheritDoc} */ + @Override + public IndexedItem get(Constant cst) { + if (cst == null) { + throw new NullPointerException("cst == null"); + } + + throwIfNotPrepared(); + + IndexedItem result = methodIds.get((CstBaseMethodRef) cst); + + if (result == null) { + throw new IllegalArgumentException("not found"); + } + + return result; + } + + /** + * Writes the portion of the file header that refers to this instance. + * + * @param out {@code non-null;} where to write + */ + public void writeHeaderPart(AnnotatedOutput out) { + throwIfNotPrepared(); + + int sz = methodIds.size(); + int offset = (sz == 0) ? 0 : getFileOffset(); + + if (out.annotates()) { + out.annotate(4, "method_ids_size: " + Hex.u4(sz)); + out.annotate(4, "method_ids_off: " + Hex.u4(offset)); + } + + out.writeInt(sz); + out.writeInt(offset); + } + + /** + * Interns an element into this instance. + * + * @param method {@code non-null;} the reference to intern + * @return {@code non-null;} the interned reference + */ + public MethodIdItem intern(CstBaseMethodRef method) { + if (method == null) { + throw new NullPointerException("method == null"); + } + + throwIfPrepared(); + + MethodIdItem result = methodIds.get(method); + + if (result == null) { + result = new MethodIdItem(method); + methodIds.put(method, result); + } + + return result; + } + + /** + * Gets the index of the given reference, which must have been added + * to this instance. + * + * @param ref {@code non-null;} the reference to look up + * @return {@code >= 0;} the reference's index + */ + public int indexOf(CstBaseMethodRef ref) { + if (ref == null) { + throw new NullPointerException("ref == null"); + } + + throwIfNotPrepared(); + + MethodIdItem item = methodIds.get(ref); + + if (item == null) { + throw new IllegalArgumentException("not found"); + } + + return item.getIndex(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/MixedItemSection.java b/dexgen/src/com/android/dexgen/dex/file/MixedItemSection.java new file mode 100644 index 0000000..2fda33b --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/MixedItemSection.java @@ -0,0 +1,362 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ExceptionWithContext; +import com.android.dexgen.util.Hex; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.TreeMap; + +/** + * A section of a {@code .dex} file which consists of a sequence of + * {@link OffsettedItem} objects, which may each be of a different concrete + * class and/or size. + * + * Note: It is invalid for an item in an instance of this class to + * have a larger alignment requirement than the alignment of this instance. + */ +public final class MixedItemSection extends Section { + static enum SortType { + /** no sorting */ + NONE, + + /** sort by type only */ + TYPE, + + /** sort in class-major order, with instances sorted per-class */ + INSTANCE; + }; + + /** {@code non-null;} sorter which sorts instances by type */ + private static final Comparator TYPE_SORTER = + new Comparator() { + public int compare(OffsettedItem item1, OffsettedItem item2) { + ItemType type1 = item1.itemType(); + ItemType type2 = item2.itemType(); + return type1.compareTo(type2); + } + }; + + /** {@code non-null;} the items in this part */ + private final ArrayList items; + + /** {@code non-null;} items that have been explicitly interned */ + private final HashMap interns; + + /** {@code non-null;} how to sort the items */ + private final SortType sort; + + /** + * {@code >= -1;} the current size of this part, in bytes, or {@code -1} + * if not yet calculated + */ + private int writeSize; + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param name {@code null-ok;} the name of this instance, for annotation + * purposes + * @param file {@code non-null;} file that this instance is part of + * @param alignment {@code > 0;} alignment requirement for the final output; + * must be a power of 2 + * @param sort how the items should be sorted in the final output + */ + public MixedItemSection(String name, DexFile file, int alignment, + SortType sort) { + super(name, file, alignment); + + this.items = new ArrayList(100); + this.interns = new HashMap(100); + this.sort = sort; + this.writeSize = -1; + } + + /** {@inheritDoc} */ + @Override + public Collection items() { + return items; + } + + /** {@inheritDoc} */ + @Override + public int writeSize() { + throwIfNotPrepared(); + return writeSize; + } + + /** {@inheritDoc} */ + @Override + public int getAbsoluteItemOffset(Item item) { + OffsettedItem oi = (OffsettedItem) item; + return oi.getAbsoluteOffset(); + } + + /** + * Gets the size of this instance, in items. + * + * @return {@code >= 0;} the size + */ + public int size() { + return items.size(); + } + + /** + * Writes the portion of the file header that refers to this instance. + * + * @param out {@code non-null;} where to write + */ + public void writeHeaderPart(AnnotatedOutput out) { + throwIfNotPrepared(); + + if (writeSize == -1) { + throw new RuntimeException("write size not yet set"); + } + + int sz = writeSize; + int offset = (sz == 0) ? 0 : getFileOffset(); + String name = getName(); + + if (name == null) { + name = ""; + } + + int spaceCount = 15 - name.length(); + char[] spaceArr = new char[spaceCount]; + Arrays.fill(spaceArr, ' '); + String spaces = new String(spaceArr); + + if (out.annotates()) { + out.annotate(4, name + "_size:" + spaces + Hex.u4(sz)); + out.annotate(4, name + "_off: " + spaces + Hex.u4(offset)); + } + + out.writeInt(sz); + out.writeInt(offset); + } + + /** + * Adds an item to this instance. This will in turn tell the given item + * that it has been added to this instance. It is invalid to add the + * same item to more than one instance, nor to add the same items + * multiple times to a single instance. + * + * @param item {@code non-null;} the item to add + */ + public void add(OffsettedItem item) { + throwIfPrepared(); + + try { + if (item.getAlignment() > getAlignment()) { + throw new IllegalArgumentException( + "incompatible item alignment"); + } + } catch (NullPointerException ex) { + // Elucidate the exception. + throw new NullPointerException("item == null"); + } + + items.add(item); + } + + /** + * Interns an item in this instance, returning the interned instance + * (which may not be the one passed in). This will add the item if no + * equal item has been added. + * + * @param item {@code non-null;} the item to intern + * @return {@code non-null;} the equivalent interned instance + */ + public T intern(T item) { + throwIfPrepared(); + + OffsettedItem result = interns.get(item); + + if (result != null) { + return (T) result; + } + + add(item); + interns.put(item, item); + return item; + } + + /** + * Gets an item which was previously interned. + * + * @param item {@code non-null;} the item to look for + * @return {@code non-null;} the equivalent already-interned instance + */ + public T get(T item) { + throwIfNotPrepared(); + + OffsettedItem result = interns.get(item); + + if (result != null) { + return (T) result; + } + + throw new NoSuchElementException(item.toString()); + } + + /** + * Writes an index of contents of the items in this instance of the + * given type. If there are none, this writes nothing. If there are any, + * then the index is preceded by the given intro string. + * + * @param out {@code non-null;} where to write to + * @param itemType {@code non-null;} the item type of interest + * @param intro {@code non-null;} the introductory string for non-empty indices + */ + public void writeIndexAnnotation(AnnotatedOutput out, ItemType itemType, + String intro) { + throwIfNotPrepared(); + + TreeMap index = + new TreeMap(); + + for (OffsettedItem item : items) { + if (item.itemType() == itemType) { + String label = item.toHuman(); + index.put(label, item); + } + } + + if (index.size() == 0) { + return; + } + + out.annotate(0, intro); + + for (Map.Entry entry : index.entrySet()) { + String label = entry.getKey(); + OffsettedItem item = entry.getValue(); + out.annotate(0, item.offsetString() + ' ' + label + '\n'); + } + } + + /** {@inheritDoc} */ + @Override + protected void prepare0() { + DexFile file = getFile(); + + /* + * It's okay for new items to be added as a result of an + * addContents() call; we just have to deal with the possibility. + */ + + int i = 0; + for (;;) { + int sz = items.size(); + if (i >= sz) { + break; + } + + for (/*i*/; i < sz; i++) { + OffsettedItem one = items.get(i); + one.addContents(file); + } + } + } + + /** + * Places all the items in this instance at particular offsets. This + * will call {@link OffsettedItem#place} on each item. If an item + * does not know its write size before the call to {@code place}, + * it is that call which is responsible for setting the write size. + * This method may only be called once per instance; subsequent calls + * will throw an exception. + */ + public void placeItems() { + throwIfNotPrepared(); + + switch (sort) { + case INSTANCE: { + Collections.sort(items); + break; + } + case TYPE: { + Collections.sort(items, TYPE_SORTER); + break; + } + } + + int sz = items.size(); + int outAt = 0; + for (int i = 0; i < sz; i++) { + OffsettedItem one = items.get(i); + try { + int placedAt = one.place(this, outAt); + + if (placedAt < outAt) { + throw new RuntimeException("bogus place() result for " + + one); + } + + outAt = placedAt + one.writeSize(); + } catch (RuntimeException ex) { + throw ExceptionWithContext.withContext(ex, + "...while placing " + one); + } + } + + writeSize = outAt; + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(AnnotatedOutput out) { + boolean annotates = out.annotates(); + boolean first = true; + DexFile file = getFile(); + int at = 0; + + for (OffsettedItem one : items) { + if (annotates) { + if (first) { + first = false; + } else { + out.annotate(0, "\n"); + } + } + + int alignMask = one.getAlignment() - 1; + int writeAt = (at + alignMask) & ~alignMask; + + if (at != writeAt) { + out.writeZeroes(writeAt - at); + at = writeAt; + } + + one.writeTo(file, out); + at += one.writeSize(); + } + + if (at != writeSize) { + throw new RuntimeException("output size mismatch"); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/OffsettedItem.java b/dexgen/src/com/android/dexgen/dex/file/OffsettedItem.java new file mode 100644 index 0000000..246f903 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/OffsettedItem.java @@ -0,0 +1,314 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ExceptionWithContext; + +/** + * An item in a Dalvik file which is referenced by absolute offset. + */ +public abstract class OffsettedItem extends Item + implements Comparable { + /** {@code > 0;} alignment requirement */ + private final int alignment; + + /** {@code >= -1;} the size of this instance when written, in bytes, or + * {@code -1} if not yet known */ + private int writeSize; + + /** + * {@code null-ok;} section the item was added to, or {@code null} if + * not yet added + */ + private Section addedTo; + + /** + * {@code >= -1;} assigned offset of the item from the start of its section, + * or {@code -1} if not yet assigned + */ + private int offset; + + /** + * Gets the absolute offset of the given item, returning {@code 0} + * if handed {@code null}. + * + * @param item {@code null-ok;} the item in question + * @return {@code >= 0;} the item's absolute offset, or {@code 0} + * if {@code item == null} + */ + public static int getAbsoluteOffsetOr0(OffsettedItem item) { + if (item == null) { + return 0; + } + + return item.getAbsoluteOffset(); + } + + /** + * Constructs an instance. The offset is initially unassigned. + * + * @param alignment {@code > 0;} output alignment requirement; must be a + * power of 2 + * @param writeSize {@code >= -1;} the size of this instance when written, + * in bytes, or {@code -1} if not immediately known + */ + public OffsettedItem(int alignment, int writeSize) { + Section.validateAlignment(alignment); + + if (writeSize < -1) { + throw new IllegalArgumentException("writeSize < -1"); + } + + this.alignment = alignment; + this.writeSize = writeSize; + this.addedTo = null; + this.offset = -1; + } + + /** + * {@inheritDoc} + * + * Comparisons for this class are defined to be type-major (if the + * types don't match then the objects are not equal), with + * {@link #compareTo0} deciding same-type comparisons. + */ + @Override + public final boolean equals(Object other) { + if (this == other) { + return true; + } + + OffsettedItem otherItem = (OffsettedItem) other; + ItemType thisType = itemType(); + ItemType otherType = otherItem.itemType(); + + if (thisType != otherType) { + return false; + } + + return (compareTo0(otherItem) == 0); + } + + /** + * {@inheritDoc} + * + * Comparisons for this class are defined to be class-major (if the + * classes don't match then the objects are not equal), with + * {@link #compareTo0} deciding same-class comparisons. + */ + public final int compareTo(OffsettedItem other) { + if (this == other) { + return 0; + } + + ItemType thisType = itemType(); + ItemType otherType = other.itemType(); + + if (thisType != otherType) { + return thisType.compareTo(otherType); + } + + return compareTo0(other); + } + + /** + * Sets the write size of this item. This may only be called once + * per instance, and only if the size was unknown upon instance + * creation. + * + * @param writeSize {@code > 0;} the write size, in bytes + */ + public final void setWriteSize(int writeSize) { + if (writeSize < 0) { + throw new IllegalArgumentException("writeSize < 0"); + } + + if (this.writeSize >= 0) { + throw new UnsupportedOperationException("writeSize already set"); + } + + this.writeSize = writeSize; + } + + /** {@inheritDoc} + * + * @throws UnsupportedOperationException thrown if the write size + * is not yet known + */ + @Override + public final int writeSize() { + if (writeSize < 0) { + throw new UnsupportedOperationException("writeSize is unknown"); + } + + return writeSize; + } + + /** {@inheritDoc} */ + @Override + public final void writeTo(DexFile file, AnnotatedOutput out) { + out.alignTo(alignment); + + try { + if (writeSize < 0) { + throw new UnsupportedOperationException( + "writeSize is unknown"); + } + out.assertCursor(getAbsoluteOffset()); + } catch (RuntimeException ex) { + throw ExceptionWithContext.withContext(ex, + "...while writing " + this); + } + + writeTo0(file, out); + } + + /** + * Gets the relative item offset. The offset is from the start of + * the section which the instance was written to. + * + * @return {@code >= 0;} the offset + * @throws RuntimeException thrown if the offset is not yet known + */ + public final int getRelativeOffset() { + if (offset < 0) { + throw new RuntimeException("offset not yet known"); + } + + return offset; + } + + /** + * Gets the absolute item offset. The offset is from the start of + * the file which the instance was written to. + * + * @return {@code >= 0;} the offset + * @throws RuntimeException thrown if the offset is not yet known + */ + public final int getAbsoluteOffset() { + if (offset < 0) { + throw new RuntimeException("offset not yet known"); + } + + return addedTo.getAbsoluteOffset(offset); + } + + /** + * Indicates that this item has been added to the given section at + * the given offset. It is only valid to call this method once per + * instance. + * + * @param addedTo {@code non-null;} the section this instance has + * been added to + * @param offset {@code >= 0;} the desired offset from the start of the + * section where this instance was placed + * @return {@code >= 0;} the offset that this instance should be placed at + * in order to meet its alignment constraint + */ + public final int place(Section addedTo, int offset) { + if (addedTo == null) { + throw new NullPointerException("addedTo == null"); + } + + if (offset < 0) { + throw new IllegalArgumentException("offset < 0"); + } + + if (this.addedTo != null) { + throw new RuntimeException("already written"); + } + + int mask = alignment - 1; + offset = (offset + mask) & ~mask; + + this.addedTo = addedTo; + this.offset = offset; + + place0(addedTo, offset); + + return offset; + } + + /** + * Gets the alignment requirement of this instance. An instance should + * only be written when so aligned. + * + * @return {@code > 0;} the alignment requirement; must be a power of 2 + */ + public final int getAlignment() { + return alignment; + } + + /** + * Gets the absolute offset of this item as a string, suitable for + * including in annotations. + * + * @return {@code non-null;} the offset string + */ + public final String offsetString() { + return '[' + Integer.toHexString(getAbsoluteOffset()) + ']'; + } + + /** + * Gets a short human-readable string representing this instance. + * + * @return {@code non-null;} the human form + */ + public abstract String toHuman(); + + /** + * Compares this instance to another which is guaranteed to be of + * the same class. The default implementation of this method is to + * throw an exception (unsupported operation). If a particular + * class needs to actually sort, then it should override this + * method. + * + * @param other {@code non-null;} instance to compare to + * @return {@code -1}, {@code 0}, or {@code 1}, depending + * on the sort order of this instance and the other + */ + protected int compareTo0(OffsettedItem other) { + throw new UnsupportedOperationException("unsupported"); + } + + /** + * Does additional work required when placing an instance. The + * default implementation of this method is a no-op. If a + * particular class needs to do something special, then it should + * override this method. In particular, if this instance did not + * know its write size up-front, then this method is responsible + * for setting it. + * + * @param addedTo {@code non-null;} the section this instance has been added to + * @param offset {@code >= 0;} the offset from the start of the + * section where this instance was placed + */ + protected void place0(Section addedTo, int offset) { + // This space intentionally left blank. + } + + /** + * Performs the actual write of the contents of this instance to + * the given data section. This is called by {@link #writeTo}, + * which will have taken care of ensuring alignment. + * + * @param file {@code non-null;} the file to use for reference + * @param out {@code non-null;} where to write to + */ + protected abstract void writeTo0(DexFile file, AnnotatedOutput out); +} diff --git a/dexgen/src/com/android/dexgen/dex/file/ParameterAnnotationStruct.java b/dexgen/src/com/android/dexgen/dex/file/ParameterAnnotationStruct.java new file mode 100644 index 0000000..440da1c --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/ParameterAnnotationStruct.java @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotations; +import com.android.dexgen.rop.annotation.AnnotationsList; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.ToHuman; + +import java.util.ArrayList; + +/** + * Association of a method and its parameter annotations. + */ +public final class ParameterAnnotationStruct + implements ToHuman, Comparable { + /** {@code non-null;} the method in question */ + private final CstMethodRef method; + + /** {@code non-null;} the associated annotations list */ + private final AnnotationsList annotationsList; + + /** {@code non-null;} the associated annotations list, as an item */ + private final UniformListItem annotationsItem; + + /** + * Constructs an instance. + * + * @param method {@code non-null;} the method in question + * @param annotationsList {@code non-null;} the associated annotations list + */ + public ParameterAnnotationStruct(CstMethodRef method, + AnnotationsList annotationsList) { + if (method == null) { + throw new NullPointerException("method == null"); + } + + if (annotationsList == null) { + throw new NullPointerException("annotationsList == null"); + } + + this.method = method; + this.annotationsList = annotationsList; + + /* + * Construct an item for the annotations list. TODO: This + * requires way too much copying; fix it. + */ + + int size = annotationsList.size(); + ArrayList arrayList = new + ArrayList(size); + + for (int i = 0; i < size; i++) { + Annotations annotations = annotationsList.get(i); + AnnotationSetItem item = new AnnotationSetItem(annotations); + arrayList.add(new AnnotationSetRefItem(item)); + } + + this.annotationsItem = new UniformListItem( + ItemType.TYPE_ANNOTATION_SET_REF_LIST, arrayList); + } + + /** {@inheritDoc} */ + public int hashCode() { + return method.hashCode(); + } + + /** {@inheritDoc} */ + public boolean equals(Object other) { + if (! (other instanceof ParameterAnnotationStruct)) { + return false; + } + + return method.equals(((ParameterAnnotationStruct) other).method); + } + + /** {@inheritDoc} */ + public int compareTo(ParameterAnnotationStruct other) { + return method.compareTo(other.method); + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + MethodIdsSection methodIds = file.getMethodIds(); + MixedItemSection wordData = file.getWordData(); + + methodIds.intern(method); + wordData.add(annotationsItem); + } + + /** {@inheritDoc} */ + public void writeTo(DexFile file, AnnotatedOutput out) { + int methodIdx = file.getMethodIds().indexOf(method); + int annotationsOff = annotationsItem.getAbsoluteOffset(); + + if (out.annotates()) { + out.annotate(0, " " + method.toHuman()); + out.annotate(4, " method_idx: " + Hex.u4(methodIdx)); + out.annotate(4, " annotations_off: " + + Hex.u4(annotationsOff)); + } + + out.writeInt(methodIdx); + out.writeInt(annotationsOff); + } + + /** {@inheritDoc} */ + public String toHuman() { + StringBuilder sb = new StringBuilder(); + + sb.append(method.toHuman()); + sb.append(": "); + + boolean first = true; + for (AnnotationSetRefItem item : annotationsItem.getItems()) { + if (first) { + first = false; + } else { + sb.append(", "); + } + sb.append(item.toHuman()); + } + + return sb.toString(); + } + + /** + * Gets the method this item is for. + * + * @return {@code non-null;} the method + */ + public CstMethodRef getMethod() { + return method; + } + + /** + * Gets the associated annotations list. + * + * @return {@code non-null;} the annotations list + */ + public AnnotationsList getAnnotationsList() { + return annotationsList; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/ProtoIdItem.java b/dexgen/src/com/android/dexgen/dex/file/ProtoIdItem.java new file mode 100644 index 0000000..ef48cd4 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/ProtoIdItem.java @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.Prototype; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * Representation of a method prototype reference inside a Dalvik file. + */ +public final class ProtoIdItem extends IndexedItem { + /** size of instances when written out to a file, in bytes */ + public static final int WRITE_SIZE = 12; + + /** {@code non-null;} the wrapped prototype */ + private final Prototype prototype; + + /** {@code non-null;} the short-form of the prototype */ + private final CstUtf8 shortForm; + + /** + * {@code null-ok;} the list of parameter types or {@code null} if this + * prototype has no parameters + */ + private TypeListItem parameterTypes; + + /** + * Constructs an instance. + * + * @param prototype {@code non-null;} the constant for the prototype + */ + public ProtoIdItem(Prototype prototype) { + if (prototype == null) { + throw new NullPointerException("prototype == null"); + } + + this.prototype = prototype; + this.shortForm = makeShortForm(prototype); + + StdTypeList parameters = prototype.getParameterTypes(); + this.parameterTypes = (parameters.size() == 0) ? null + : new TypeListItem(parameters); + } + + /** + * Creates the short-form of the given prototype. + * + * @param prototype {@code non-null;} the prototype + * @return {@code non-null;} the short form + */ + private static CstUtf8 makeShortForm(Prototype prototype) { + StdTypeList parameters = prototype.getParameterTypes(); + int size = parameters.size(); + StringBuilder sb = new StringBuilder(size + 1); + + sb.append(shortFormCharFor(prototype.getReturnType())); + + for (int i = 0; i < size; i++) { + sb.append(shortFormCharFor(parameters.getType(i))); + } + + return new CstUtf8(sb.toString()); + } + + /** + * Gets the short-form character for the given type. + * + * @param type {@code non-null;} the type + * @return the corresponding short-form character + */ + private static char shortFormCharFor(Type type) { + char descriptorChar = type.getDescriptor().charAt(0); + + if (descriptorChar == '[') { + return 'L'; + } + + return descriptorChar; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_PROTO_ID_ITEM; + } + + /** {@inheritDoc} */ + @Override + public int writeSize() { + return WRITE_SIZE; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + StringIdsSection stringIds = file.getStringIds(); + TypeIdsSection typeIds = file.getTypeIds(); + MixedItemSection typeLists = file.getTypeLists(); + + typeIds.intern(prototype.getReturnType()); + stringIds.intern(shortForm); + + if (parameterTypes != null) { + parameterTypes = typeLists.intern(parameterTypes); + } + } + + /** {@inheritDoc} */ + @Override + public void writeTo(DexFile file, AnnotatedOutput out) { + int shortyIdx = file.getStringIds().indexOf(shortForm); + int returnIdx = file.getTypeIds().indexOf(prototype.getReturnType()); + int paramsOff = OffsettedItem.getAbsoluteOffsetOr0(parameterTypes); + + if (out.annotates()) { + StringBuilder sb = new StringBuilder(); + sb.append(prototype.getReturnType().toHuman()); + sb.append(" proto("); + + StdTypeList params = prototype.getParameterTypes(); + int size = params.size(); + + for (int i = 0; i < size; i++) { + if (i != 0) { + sb.append(", "); + } + sb.append(params.getType(i).toHuman()); + } + + sb.append(")"); + out.annotate(0, indexString() + ' ' + sb.toString()); + out.annotate(4, " shorty_idx: " + Hex.u4(shortyIdx) + + " // " + shortForm.toQuoted()); + out.annotate(4, " return_type_idx: " + Hex.u4(returnIdx) + + " // " + prototype.getReturnType().toHuman()); + out.annotate(4, " parameters_off: " + Hex.u4(paramsOff)); + } + + out.writeInt(shortyIdx); + out.writeInt(returnIdx); + out.writeInt(paramsOff); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/ProtoIdsSection.java b/dexgen/src/com/android/dexgen/dex/file/ProtoIdsSection.java new file mode 100644 index 0000000..b2af84e --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/ProtoIdsSection.java @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.type.Prototype; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.Collection; +import java.util.TreeMap; + +/** + * Proto (method prototype) identifiers list section of a + * {@code .dex} file. + */ +public final class ProtoIdsSection extends UniformItemSection { + /** + * {@code non-null;} map from method prototypes to {@link ProtoIdItem} instances + */ + private final TreeMap protoIds; + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param file {@code non-null;} file that this instance is part of + */ + public ProtoIdsSection(DexFile file) { + super("proto_ids", file, 4); + + protoIds = new TreeMap(); + } + + /** {@inheritDoc} */ + @Override + public Collection items() { + return protoIds.values(); + } + + /** {@inheritDoc} */ + @Override + public IndexedItem get(Constant cst) { + throw new UnsupportedOperationException("unsupported"); + } + + /** + * Writes the portion of the file header that refers to this instance. + * + * @param out {@code non-null;} where to write + */ + public void writeHeaderPart(AnnotatedOutput out) { + throwIfNotPrepared(); + + int sz = protoIds.size(); + int offset = (sz == 0) ? 0 : getFileOffset(); + + if (sz > 65536) { + throw new UnsupportedOperationException("too many proto ids"); + } + + if (out.annotates()) { + out.annotate(4, "proto_ids_size: " + Hex.u4(sz)); + out.annotate(4, "proto_ids_off: " + Hex.u4(offset)); + } + + out.writeInt(sz); + out.writeInt(offset); + } + + /** + * Interns an element into this instance. + * + * @param prototype {@code non-null;} the prototype to intern + * @return {@code non-null;} the interned reference + */ + public ProtoIdItem intern(Prototype prototype) { + if (prototype == null) { + throw new NullPointerException("prototype == null"); + } + + throwIfPrepared(); + + ProtoIdItem result = protoIds.get(prototype); + + if (result == null) { + result = new ProtoIdItem(prototype); + protoIds.put(prototype, result); + } + + return result; + } + + /** + * Gets the index of the given prototype, which must have + * been added to this instance. + * + * @param prototype {@code non-null;} the prototype to look up + * @return {@code >= 0;} the reference's index + */ + public int indexOf(Prototype prototype) { + if (prototype == null) { + throw new NullPointerException("prototype == null"); + } + + throwIfNotPrepared(); + + ProtoIdItem item = protoIds.get(prototype); + + if (item == null) { + throw new IllegalArgumentException("not found"); + } + + return item.getIndex(); + } + + /** {@inheritDoc} */ + @Override + protected void orderItems() { + int idx = 0; + + for (Object i : items()) { + ((ProtoIdItem) i).setIndex(idx); + idx++; + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/Section.java b/dexgen/src/com/android/dexgen/dex/file/Section.java new file mode 100644 index 0000000..7efaf6b --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/Section.java @@ -0,0 +1,287 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.AnnotatedOutput; + +import java.util.Collection; + +/** + * A section of a {@code .dex} file. Each section consists of a list + * of items of some sort or other. + */ +public abstract class Section { + /** {@code null-ok;} name of this part, for annotation purposes */ + private final String name; + + /** {@code non-null;} file that this instance is part of */ + private final DexFile file; + + /** {@code > 0;} alignment requirement for the final output; + * must be a power of 2 */ + private final int alignment; + + /** {@code >= -1;} offset from the start of the file to this part, or + * {@code -1} if not yet known */ + private int fileOffset; + + /** whether {@link #prepare} has been called successfully on this + * instance */ + private boolean prepared; + + /** + * Validates an alignment. + * + * @param alignment the alignment + * @throws IllegalArgumentException thrown if {@code alignment} + * isn't a positive power of 2 + */ + public static void validateAlignment(int alignment) { + if ((alignment <= 0) || + (alignment & (alignment - 1)) != 0) { + throw new IllegalArgumentException("invalid alignment"); + } + } + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param name {@code null-ok;} the name of this instance, for annotation + * purposes + * @param file {@code non-null;} file that this instance is part of + * @param alignment {@code > 0;} alignment requirement for the final output; + * must be a power of 2 + */ + public Section(String name, DexFile file, int alignment) { + if (file == null) { + throw new NullPointerException("file == null"); + } + + validateAlignment(alignment); + + this.name = name; + this.file = file; + this.alignment = alignment; + this.fileOffset = -1; + this.prepared = false; + } + + /** + * Gets the file that this instance is part of. + * + * @return {@code non-null;} the file + */ + public final DexFile getFile() { + return file; + } + + /** + * Gets the alignment for this instance's final output. + * + * @return {@code > 0;} the alignment + */ + public final int getAlignment() { + return alignment; + } + + /** + * Gets the offset from the start of the file to this part. This + * throws an exception if the offset has not yet been set. + * + * @return {@code >= 0;} the file offset + */ + public final int getFileOffset() { + if (fileOffset < 0) { + throw new RuntimeException("fileOffset not set"); + } + + return fileOffset; + } + + /** + * Sets the file offset. It is only valid to call this method once + * once per instance. + * + * @param fileOffset {@code >= 0;} the desired offset from the start of the + * file where this for this instance + * @return {@code >= 0;} the offset that this instance should be placed at + * in order to meet its alignment constraint + */ + public final int setFileOffset(int fileOffset) { + if (fileOffset < 0) { + throw new IllegalArgumentException("fileOffset < 0"); + } + + if (this.fileOffset >= 0) { + throw new RuntimeException("fileOffset already set"); + } + + int mask = alignment - 1; + fileOffset = (fileOffset + mask) & ~mask; + + this.fileOffset = fileOffset; + + return fileOffset; + } + + /** + * Writes this instance to the given raw data object. + * + * @param out {@code non-null;} where to write to + */ + public final void writeTo(AnnotatedOutput out) { + throwIfNotPrepared(); + align(out); + + int cursor = out.getCursor(); + + if (fileOffset < 0) { + fileOffset = cursor; + } else if (fileOffset != cursor) { + throw new RuntimeException("alignment mismatch: for " + this + + ", at " + cursor + + ", but expected " + fileOffset); + } + + if (out.annotates()) { + if (name != null) { + out.annotate(0, "\n" + name + ":"); + } else if (cursor != 0) { + out.annotate(0, "\n"); + } + } + + writeTo0(out); + } + + /** + * Returns the absolute file offset, given an offset from the + * start of this instance's output. This is only valid to call + * once this instance has been assigned a file offset (via {@link + * #setFileOffset}). + * + * @param relative {@code >= 0;} the relative offset + * @return {@code >= 0;} the corresponding absolute file offset + */ + public final int getAbsoluteOffset(int relative) { + if (relative < 0) { + throw new IllegalArgumentException("relative < 0"); + } + + if (fileOffset < 0) { + throw new RuntimeException("fileOffset not yet set"); + } + + return fileOffset + relative; + } + + /** + * Returns the absolute file offset of the given item which must + * be contained in this section. This is only valid to call + * once this instance has been assigned a file offset (via {@link + * #setFileOffset}). + * + *

Note: Subclasses must implement this as appropriate for + * their contents.

+ * + * @param item {@code non-null;} the item in question + * @return {@code >= 0;} the item's absolute file offset + */ + public abstract int getAbsoluteItemOffset(Item item); + + /** + * Prepares this instance for writing. This performs any necessary + * prerequisites, including particularly adding stuff to other + * sections. This method may only be called once per instance; + * subsequent calls will throw an exception. + */ + public final void prepare() { + throwIfPrepared(); + prepare0(); + prepared = true; + } + + /** + * Gets the collection of all the items in this section. + * It is not valid to attempt to change the returned list. + * + * @return {@code non-null;} the items + */ + public abstract Collection items(); + + /** + * Does the main work of {@link #prepare}. + */ + protected abstract void prepare0(); + + /** + * Gets the size of this instance when output, in bytes. + * + * @return {@code >= 0;} the size of this instance, in bytes + */ + public abstract int writeSize(); + + /** + * Throws an exception if {@link #prepare} has not been + * called on this instance. + */ + protected final void throwIfNotPrepared() { + if (!prepared) { + throw new RuntimeException("not prepared"); + } + } + + /** + * Throws an exception if {@link #prepare} has already been called + * on this instance. + */ + protected final void throwIfPrepared() { + if (prepared) { + throw new RuntimeException("already prepared"); + } + } + + /** + * Aligns the output of the given data to the alignment of this instance. + * + * @param out {@code non-null;} the output to align + */ + protected final void align(AnnotatedOutput out) { + out.alignTo(alignment); + } + + /** + * Writes this instance to the given raw data object. This gets + * called by {@link #writeTo} after aligning the cursor of + * {@code out} and verifying that either the assigned file + * offset matches the actual cursor {@code out} or that the + * file offset was not previously assigned, in which case it gets + * assigned to {@code out}'s cursor. + * + * @param out {@code non-null;} where to write to + */ + protected abstract void writeTo0(AnnotatedOutput out); + + /** + * Returns the name of this section, for annotation purposes. + * + * @return {@code null-ok;} name of this part, for annotation purposes + */ + protected final String getName() { + return name; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/Statistics.java b/dexgen/src/com/android/dexgen/dex/file/Statistics.java new file mode 100644 index 0000000..1ec2f93 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/Statistics.java @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.AnnotatedOutput; + +import java.util.Collection; +import java.util.HashMap; +import java.util.TreeMap; + +/** + * Statistics about the contents of a file. + */ +public final class Statistics { + /** {@code non-null;} data about each type of item */ + private final HashMap dataMap; + + /** + * Constructs an instance. + */ + public Statistics() { + dataMap = new HashMap(50); + } + + /** + * Adds the given item to the statistics. + * + * @param item {@code non-null;} the item to add + */ + public void add(Item item) { + String typeName = item.typeName(); + Data data = dataMap.get(typeName); + + if (data == null) { + dataMap.put(typeName, new Data(item, typeName)); + } else { + data.add(item); + } + } + + /** + * Adds the given list of items to the statistics. + * + * @param list {@code non-null;} the list of items to add + */ + public void addAll(Section list) { + Collection items = list.items(); + for (Item item : items) { + add(item); + } + } + + /** + * Writes the statistics as an annotation. + * + * @param out {@code non-null;} where to write to + */ + public final void writeAnnotation(AnnotatedOutput out) { + if (dataMap.size() == 0) { + return; + } + + out.annotate(0, "\nstatistics:\n"); + + TreeMap sortedData = new TreeMap(); + + for (Data data : dataMap.values()) { + sortedData.put(data.name, data); + } + + for (Data data : sortedData.values()) { + data.writeAnnotation(out); + } + } + + public String toHuman() { + StringBuilder sb = new StringBuilder(); + + sb.append("Statistics:\n"); + + TreeMap sortedData = new TreeMap(); + + for (Data data : dataMap.values()) { + sortedData.put(data.name, data); + } + + for (Data data : sortedData.values()) { + sb.append(data.toHuman()); + } + + return sb.toString(); + } + + /** + * Statistical data about a particular class. + */ + private static class Data { + /** {@code non-null;} name to use as a label */ + private final String name; + + /** {@code >= 0;} number of instances */ + private int count; + + /** {@code >= 0;} total size of instances in bytes */ + private int totalSize; + + /** {@code >= 0;} largest size of any individual item */ + private int largestSize; + + /** {@code >= 0;} smallest size of any individual item */ + private int smallestSize; + + /** + * Constructs an instance for the given item. + * + * @param item {@code non-null;} item in question + * @param name {@code non-null;} type name to use + */ + public Data(Item item, String name) { + int size = item.writeSize(); + + this.name = name; + this.count = 1; + this.totalSize = size; + this.largestSize = size; + this.smallestSize = size; + } + + /** + * Incorporates a new item. This assumes the type name matches. + * + * @param item {@code non-null;} item to incorporate + */ + public void add(Item item) { + int size = item.writeSize(); + + count++; + totalSize += size; + + if (size > largestSize) { + largestSize = size; + } + + if (size < smallestSize) { + smallestSize = size; + } + } + + /** + * Writes this instance as an annotation. + * + * @param out {@code non-null;} where to write to + */ + public void writeAnnotation(AnnotatedOutput out) { + out.annotate(toHuman()); + } + + /** + * Generates a human-readable string for this data item. + * + * @return string for human consumption. + */ + public String toHuman() { + StringBuilder sb = new StringBuilder(); + + sb.append(" " + name + ": " + + count + " item" + (count == 1 ? "" : "s") + "; " + + totalSize + " bytes total\n"); + + if (smallestSize == largestSize) { + sb.append(" " + smallestSize + " bytes/item\n"); + } else { + int average = totalSize / count; + sb.append(" " + smallestSize + ".." + largestSize + + " bytes/item; average " + average + "\n"); + } + + return sb.toString(); + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/StringDataItem.java b/dexgen/src/com/android/dexgen/dex/file/StringDataItem.java new file mode 100644 index 0000000..7e28323 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/StringDataItem.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.ByteArray; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.Leb128Utils; + +/** + * Representation of string data for a particular string, in a Dalvik file. + */ +public final class StringDataItem extends OffsettedItem { + /** {@code non-null;} the string value */ + private final CstUtf8 value; + + /** + * Constructs an instance. + * + * @param value {@code non-null;} the string value + */ + public StringDataItem(CstUtf8 value) { + super(1, writeSize(value)); + + this.value = value; + } + + /** + * Gets the write size for a given value. + * + * @param value {@code non-null;} the string value + * @return {@code >= 2}; the write size, in bytes + */ + private static int writeSize(CstUtf8 value) { + int utf16Size = value.getUtf16Size(); + + // The +1 is for the '\0' termination byte. + return Leb128Utils.unsignedLeb128Size(utf16Size) + + value.getUtf8Size() + 1; + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_STRING_DATA_ITEM; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + // Nothing to do here. + } + + /** {@inheritDoc} */ + @Override + public void writeTo0(DexFile file, AnnotatedOutput out) { + ByteArray bytes = value.getBytes(); + int utf16Size = value.getUtf16Size(); + + if (out.annotates()) { + out.annotate(Leb128Utils.unsignedLeb128Size(utf16Size), + "utf16_size: " + Hex.u4(utf16Size)); + out.annotate(bytes.size() + 1, value.toQuoted()); + } + + out.writeUnsignedLeb128(utf16Size); + out.write(bytes); + out.writeByte(0); + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + return value.toQuoted(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(OffsettedItem other) { + StringDataItem otherData = (StringDataItem) other; + + return value.compareTo(otherData.value); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/StringIdItem.java b/dexgen/src/com/android/dexgen/dex/file/StringIdItem.java new file mode 100644 index 0000000..30f31d4 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/StringIdItem.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * Representation of a string inside a Dalvik file. + */ +public final class StringIdItem + extends IndexedItem implements Comparable { + /** size of instances when written out to a file, in bytes */ + public static final int WRITE_SIZE = 4; + + /** {@code non-null;} the string value */ + private final CstUtf8 value; + + /** {@code null-ok;} associated string data object, if known */ + private StringDataItem data; + + /** + * Constructs an instance. + * + * @param value {@code non-null;} the string value + */ + public StringIdItem(CstUtf8 value) { + if (value == null) { + throw new NullPointerException("value == null"); + } + + this.value = value; + this.data = null; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof StringIdItem)) { + return false; + } + + StringIdItem otherString = (StringIdItem) other; + return value.equals(otherString.value); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return value.hashCode(); + } + + /** {@inheritDoc} */ + public int compareTo(Object other) { + StringIdItem otherString = (StringIdItem) other; + return value.compareTo(otherString.value); + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_STRING_ID_ITEM; + } + + /** {@inheritDoc} */ + @Override + public int writeSize() { + return WRITE_SIZE; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + if (data == null) { + // The string data hasn't yet been added, so add it. + MixedItemSection stringData = file.getStringData(); + data = new StringDataItem(value); + stringData.add(data); + } + } + + /** {@inheritDoc} */ + @Override + public void writeTo(DexFile file, AnnotatedOutput out) { + int dataOff = data.getAbsoluteOffset(); + + if (out.annotates()) { + out.annotate(0, indexString() + ' ' + value.toQuoted(100)); + out.annotate(4, " string_data_off: " + Hex.u4(dataOff)); + } + + out.writeInt(dataOff); + } + + /** + * Gets the string value. + * + * @return {@code non-null;} the value + */ + public CstUtf8 getValue() { + return value; + } + + /** + * Gets the associated data object for this instance, if known. + * + * @return {@code null-ok;} the associated data object or {@code null} + * if not yet known + */ + public StringDataItem getData() { + return data; + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/StringIdsSection.java b/dexgen/src/com/android/dexgen/dex/file/StringIdsSection.java new file mode 100644 index 0000000..9047fb9 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/StringIdsSection.java @@ -0,0 +1,210 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstNat; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.Collection; +import java.util.TreeMap; + +/** + * Strings list section of a {@code .dex} file. + */ +public final class StringIdsSection + extends UniformItemSection { + /** + * {@code non-null;} map from string constants to {@link + * StringIdItem} instances + */ + private final TreeMap strings; + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param file {@code non-null;} file that this instance is part of + */ + public StringIdsSection(DexFile file) { + super("string_ids", file, 4); + + strings = new TreeMap(); + } + + /** {@inheritDoc} */ + @Override + public Collection items() { + return strings.values(); + } + + /** {@inheritDoc} */ + @Override + public IndexedItem get(Constant cst) { + if (cst == null) { + throw new NullPointerException("cst == null"); + } + + throwIfNotPrepared(); + + if (cst instanceof CstString) { + cst = ((CstString) cst).getString(); + } + + IndexedItem result = strings.get((CstUtf8) cst); + + if (result == null) { + throw new IllegalArgumentException("not found"); + } + + return result; + } + + /** + * Writes the portion of the file header that refers to this instance. + * + * @param out {@code non-null;} where to write + */ + public void writeHeaderPart(AnnotatedOutput out) { + throwIfNotPrepared(); + + int sz = strings.size(); + int offset = (sz == 0) ? 0 : getFileOffset(); + + if (out.annotates()) { + out.annotate(4, "string_ids_size: " + Hex.u4(sz)); + out.annotate(4, "string_ids_off: " + Hex.u4(offset)); + } + + out.writeInt(sz); + out.writeInt(offset); + } + + /** + * Interns an element into this instance. + * + * @param string {@code non-null;} the string to intern, as a regular Java + * {@code String} + * @return {@code non-null;} the interned string + */ + public StringIdItem intern(String string) { + CstUtf8 utf8 = new CstUtf8(string); + return intern(new StringIdItem(utf8)); + } + + /** + * Interns an element into this instance. + * + * @param string {@code non-null;} the string to intern, as a {@link CstString} + * @return {@code non-null;} the interned string + */ + public StringIdItem intern(CstString string) { + CstUtf8 utf8 = string.getString(); + return intern(new StringIdItem(utf8)); + } + + /** + * Interns an element into this instance. + * + * @param string {@code non-null;} the string to intern, as a constant + * @return {@code non-null;} the interned string + */ + public StringIdItem intern(CstUtf8 string) { + return intern(new StringIdItem(string)); + } + + /** + * Interns an element into this instance. + * + * @param string {@code non-null;} the string to intern + * @return {@code non-null;} the interned string + */ + public StringIdItem intern(StringIdItem string) { + if (string == null) { + throw new NullPointerException("string == null"); + } + + throwIfPrepared(); + + CstUtf8 value = string.getValue(); + StringIdItem already = strings.get(value); + + if (already != null) { + return already; + } + + strings.put(value, string); + return string; + } + + /** + * Interns the components of a name-and-type into this instance. + * + * @param nat {@code non-null;} the name-and-type + */ + public void intern(CstNat nat) { + intern(nat.getName()); + intern(nat.getDescriptor()); + } + + /** + * Gets the index of the given string, which must have been added + * to this instance. + * + * @param string {@code non-null;} the string to look up + * @return {@code >= 0;} the string's index + */ + public int indexOf(CstUtf8 string) { + if (string == null) { + throw new NullPointerException("string == null"); + } + + throwIfNotPrepared(); + + StringIdItem s = strings.get(string); + + if (s == null) { + throw new IllegalArgumentException("not found"); + } + + return s.getIndex(); + } + + /** + * Gets the index of the given string, which must have been added + * to this instance. + * + * @param string {@code non-null;} the string to look up + * @return {@code >= 0;} the string's index + */ + public int indexOf(CstString string) { + return indexOf(string.getString()); + } + + /** {@inheritDoc} */ + @Override + protected void orderItems() { + int idx = 0; + + for (StringIdItem s : strings.values()) { + s.setIndex(idx); + idx++; + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/TypeIdItem.java b/dexgen/src/com/android/dexgen/dex/file/TypeIdItem.java new file mode 100644 index 0000000..2c029b0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/TypeIdItem.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * Representation of a type reference inside a Dalvik file. + */ +public final class TypeIdItem extends IdItem { + /** size of instances when written out to a file, in bytes */ + public static final int WRITE_SIZE = 4; + + /** + * Constructs an instance. + * + * @param type {@code non-null;} the constant for the type + */ + public TypeIdItem(CstType type) { + super(type); + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_TYPE_ID_ITEM; + } + + /** {@inheritDoc} */ + @Override + public int writeSize() { + return WRITE_SIZE; + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + file.getStringIds().intern(getDefiningClass().getDescriptor()); + } + + /** {@inheritDoc} */ + @Override + public void writeTo(DexFile file, AnnotatedOutput out) { + CstType type = getDefiningClass(); + CstUtf8 descriptor = type.getDescriptor(); + int idx = file.getStringIds().indexOf(descriptor); + + if (out.annotates()) { + out.annotate(0, indexString() + ' ' + descriptor.toHuman()); + out.annotate(4, " descriptor_idx: " + Hex.u4(idx)); + } + + out.writeInt(idx); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/TypeIdsSection.java b/dexgen/src/com/android/dexgen/dex/file/TypeIdsSection.java new file mode 100644 index 0000000..b02b592 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/TypeIdsSection.java @@ -0,0 +1,192 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.Collection; +import java.util.TreeMap; + +/** + * Type identifiers list section of a {@code .dex} file. + */ +public final class TypeIdsSection extends UniformItemSection { + /** + * {@code non-null;} map from types to {@link TypeIdItem} instances + */ + private final TreeMap typeIds; + + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param file {@code non-null;} file that this instance is part of + */ + public TypeIdsSection(DexFile file) { + super("type_ids", file, 4); + + typeIds = new TreeMap(); + } + + /** {@inheritDoc} */ + @Override + public Collection items() { + return typeIds.values(); + } + + /** {@inheritDoc} */ + @Override + public IndexedItem get(Constant cst) { + if (cst == null) { + throw new NullPointerException("cst == null"); + } + + throwIfNotPrepared(); + + Type type = ((CstType) cst).getClassType(); + IndexedItem result = typeIds.get(type); + + if (result == null) { + throw new IllegalArgumentException("not found: " + cst); + } + + return result; + } + + /** + * Writes the portion of the file header that refers to this instance. + * + * @param out {@code non-null;} where to write + */ + public void writeHeaderPart(AnnotatedOutput out) { + throwIfNotPrepared(); + + int sz = typeIds.size(); + int offset = (sz == 0) ? 0 : getFileOffset(); + + if (sz > 65536) { + throw new UnsupportedOperationException("too many type ids"); + } + + if (out.annotates()) { + out.annotate(4, "type_ids_size: " + Hex.u4(sz)); + out.annotate(4, "type_ids_off: " + Hex.u4(offset)); + } + + out.writeInt(sz); + out.writeInt(offset); + } + + /** + * Interns an element into this instance. + * + * @param type {@code non-null;} the type to intern + * @return {@code non-null;} the interned reference + */ + public TypeIdItem intern(Type type) { + if (type == null) { + throw new NullPointerException("type == null"); + } + + throwIfPrepared(); + + TypeIdItem result = typeIds.get(type); + + if (result == null) { + result = new TypeIdItem(new CstType(type)); + typeIds.put(type, result); + } + + return result; + } + + /** + * Interns an element into this instance. + * + * @param type {@code non-null;} the type to intern + * @return {@code non-null;} the interned reference + */ + public TypeIdItem intern(CstType type) { + if (type == null) { + throw new NullPointerException("type == null"); + } + + throwIfPrepared(); + + Type typePerSe = type.getClassType(); + TypeIdItem result = typeIds.get(typePerSe); + + if (result == null) { + result = new TypeIdItem(type); + typeIds.put(typePerSe, result); + } + + return result; + } + + /** + * Gets the index of the given type, which must have + * been added to this instance. + * + * @param type {@code non-null;} the type to look up + * @return {@code >= 0;} the reference's index + */ + public int indexOf(Type type) { + if (type == null) { + throw new NullPointerException("type == null"); + } + + throwIfNotPrepared(); + + TypeIdItem item = typeIds.get(type); + + if (item == null) { + throw new IllegalArgumentException("not found: " + type); + } + + return item.getIndex(); + } + + /** + * Gets the index of the given type, which must have + * been added to this instance. + * + * @param type {@code non-null;} the type to look up + * @return {@code >= 0;} the reference's index + */ + public int indexOf(CstType type) { + if (type == null) { + throw new NullPointerException("type == null"); + } + + return indexOf(type.getClassType()); + } + + /** {@inheritDoc} */ + @Override + protected void orderItems() { + int idx = 0; + + for (Object i : items()) { + ((TypeIdItem) i).setIndex(idx); + idx++; + } + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/TypeListItem.java b/dexgen/src/com/android/dexgen/dex/file/TypeListItem.java new file mode 100644 index 0000000..a78c63d --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/TypeListItem.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +/** + * Representation of a list of class references. + */ +public final class TypeListItem extends OffsettedItem { + /** alignment requirement */ + private static final int ALIGNMENT = 4; + + /** element size in bytes */ + private static final int ELEMENT_SIZE = 2; + + /** header size in bytes */ + private static final int HEADER_SIZE = 4; + + /** {@code non-null;} the actual list */ + private final TypeList list; + + /** + * Constructs an instance. + * + * @param list {@code non-null;} the actual list + */ + public TypeListItem(TypeList list) { + super(ALIGNMENT, (list.size() * ELEMENT_SIZE) + HEADER_SIZE); + + this.list = list; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return StdTypeList.hashContents(list); + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return ItemType.TYPE_TYPE_LIST; + } + + /** {@inheritDoc} */ + public void addContents(DexFile file) { + TypeIdsSection typeIds = file.getTypeIds(); + int sz = list.size(); + + for (int i = 0; i < sz; i++) { + typeIds.intern(list.getType(i)); + } + } + + /** {@inheritDoc} */ + @Override + public String toHuman() { + throw new RuntimeException("unsupported"); + } + + /** + * Gets the underlying list. + * + * @return {@code non-null;} the list + */ + public TypeList getList() { + return list; + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + TypeIdsSection typeIds = file.getTypeIds(); + int sz = list.size(); + + if (out.annotates()) { + out.annotate(0, offsetString() + " type_list"); + out.annotate(HEADER_SIZE, " size: " + Hex.u4(sz)); + for (int i = 0; i < sz; i++) { + Type one = list.getType(i); + int idx = typeIds.indexOf(one); + out.annotate(ELEMENT_SIZE, + " " + Hex.u2(idx) + " // " + one.toHuman()); + } + } + + out.writeInt(sz); + + for (int i = 0; i < sz; i++) { + out.writeShort(typeIds.indexOf(list.getType(i))); + } + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(OffsettedItem other) { + TypeList thisList = this.list; + TypeList otherList = ((TypeListItem) other).list; + + return StdTypeList.compareContents(thisList, otherList); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/UniformItemSection.java b/dexgen/src/com/android/dexgen/dex/file/UniformItemSection.java new file mode 100644 index 0000000..63ba36b --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/UniformItemSection.java @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.util.AnnotatedOutput; + +import java.util.Collection; + +/** + * A section of a {@code .dex} file which consists of a sequence of + * {@link Item} objects. Each of the items must have the same size in + * the output. + */ +public abstract class UniformItemSection extends Section { + /** + * Constructs an instance. The file offset is initially unknown. + * + * @param name {@code null-ok;} the name of this instance, for annotation + * purposes + * @param file {@code non-null;} file that this instance is part of + * @param alignment {@code > 0;} alignment requirement for the final output; + * must be a power of 2 + */ + public UniformItemSection(String name, DexFile file, int alignment) { + super(name, file, alignment); + } + + /** {@inheritDoc} */ + @Override + public final int writeSize() { + Collection items = items(); + int sz = items.size(); + + if (sz == 0) { + return 0; + } + + // Since each item has to be the same size, we can pick any. + return sz * items.iterator().next().writeSize(); + } + + /** + * Gets the item corresponding to the given {@link Constant}. This + * will throw an exception if the constant is not found, including + * if this instance isn't the sort that maps constants to {@link + * IndexedItem} instances. + * + * @param cst {@code non-null;} constant to look for + * @return {@code non-null;} the corresponding item found in this instance + */ + public abstract IndexedItem get(Constant cst); + + /** {@inheritDoc} */ + @Override + protected final void prepare0() { + DexFile file = getFile(); + + orderItems(); + + for (Item one : items()) { + one.addContents(file); + } + } + + /** {@inheritDoc} */ + @Override + protected final void writeTo0(AnnotatedOutput out) { + DexFile file = getFile(); + int alignment = getAlignment(); + + for (Item one : items()) { + one.writeTo(file, out); + out.alignTo(alignment); + } + } + + /** {@inheritDoc} */ + @Override + public final int getAbsoluteItemOffset(Item item) { + /* + * Since all items must be the same size, we can use the size + * of the one we're given to calculate its offset. + */ + IndexedItem ii = (IndexedItem) item; + int relativeOffset = ii.getIndex() * ii.writeSize(); + + return getAbsoluteOffset(relativeOffset); + } + + /** + * Alters or picks the order for items in this instance if desired, + * so that subsequent calls to {@link #items} will yield a + * so-ordered collection. If the items in this instance are indexed, + * then this method should also assign indices. + */ + protected abstract void orderItems(); +} diff --git a/dexgen/src/com/android/dexgen/dex/file/UniformListItem.java b/dexgen/src/com/android/dexgen/dex/file/UniformListItem.java new file mode 100644 index 0000000..88a120d --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/UniformListItem.java @@ -0,0 +1,216 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.HashMap; +import java.util.List; + +/** + * Class that represents a contiguous list of uniform items. Each + * item in the list, in particular, must have the same write size and + * alignment. + * + *

This class inherits its alignment from its items, bumped up to + * {@code 4} if the items have a looser alignment requirement. If + * it is more than {@code 4}, then there will be a gap after the + * output list size (which is four bytes) and before the first item.

+ * + * @param type of element contained in an instance + */ +public final class UniformListItem + extends OffsettedItem { + /** the size of the list header */ + private static final int HEADER_SIZE = 4; + + /** {@code non-null;} the item type */ + private final ItemType itemType; + + /** {@code non-null;} the contents */ + private final List items; + + /** + * Constructs an instance. It is illegal to modify the given list once + * it is used to construct an instance of this class. + * + * @param itemType {@code non-null;} the type of the item + * @param items {@code non-null and non-empty;} list of items to represent + */ + public UniformListItem(ItemType itemType, List items) { + super(getAlignment(items), writeSize(items)); + + if (itemType == null) { + throw new NullPointerException("itemType == null"); + } + + this.items = items; + this.itemType = itemType; + } + + /** + * Helper for {@link #UniformListItem}, which returns the alignment + * requirement implied by the given list. See the header comment for + * more details. + * + * @param items {@code non-null;} list of items being represented + * @return {@code >= 4;} the alignment requirement + */ + private static int getAlignment(List items) { + try { + // Since they all must have the same alignment, any one will do. + return Math.max(HEADER_SIZE, items.get(0).getAlignment()); + } catch (IndexOutOfBoundsException ex) { + // Translate the exception. + throw new IllegalArgumentException("items.size() == 0"); + } catch (NullPointerException ex) { + // Translate the exception. + throw new NullPointerException("items == null"); + } + } + + /** + * Calculates the write size for the given list. + * + * @param items {@code non-null;} the list in question + * @return {@code >= 0;} the write size + */ + private static int writeSize(List items) { + /* + * This class assumes all included items are the same size, + * an assumption which is verified in place0(). + */ + OffsettedItem first = items.get(0); + return (items.size() * first.writeSize()) + getAlignment(items); + } + + /** {@inheritDoc} */ + @Override + public ItemType itemType() { + return itemType; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(100); + + sb.append(getClass().getName()); + sb.append(items); + + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public void addContents(DexFile file) { + for (OffsettedItem i : items) { + i.addContents(file); + } + } + + /** {@inheritDoc} */ + @Override + public final String toHuman() { + StringBuffer sb = new StringBuffer(100); + boolean first = true; + + sb.append("{"); + + for (OffsettedItem i : items) { + if (first) { + first = false; + } else { + sb.append(", "); + } + sb.append(i.toHuman()); + } + + sb.append("}"); + return sb.toString(); + } + + /** + * Gets the underlying list of items. + * + * @return {@code non-null;} the list + */ + public final List getItems() { + return items; + } + + /** {@inheritDoc} */ + @Override + protected void place0(Section addedTo, int offset) { + offset += headerSize(); + + boolean first = true; + int theSize = -1; + int theAlignment = -1; + + for (OffsettedItem i : items) { + int size = i.writeSize(); + if (first) { + theSize = size; + theAlignment = i.getAlignment(); + first = false; + } else { + if (size != theSize) { + throw new UnsupportedOperationException( + "item size mismatch"); + } + if (i.getAlignment() != theAlignment) { + throw new UnsupportedOperationException( + "item alignment mismatch"); + } + } + + offset = i.place(addedTo, offset) + size; + } + } + + /** {@inheritDoc} */ + @Override + protected void writeTo0(DexFile file, AnnotatedOutput out) { + int size = items.size(); + + if (out.annotates()) { + out.annotate(0, offsetString() + " " + typeName()); + out.annotate(4, " size: " + Hex.u4(size)); + } + + out.writeInt(size); + + for (OffsettedItem i : items) { + i.writeTo(file, out); + } + } + + /** + * Get the size of the header of this list. + * + * @return {@code >= 0;} the header size + */ + private int headerSize() { + /* + * Because of how this instance was set up, this is the same + * as the alignment. + */ + return getAlignment(); + } +} diff --git a/dexgen/src/com/android/dexgen/dex/file/ValueEncoder.java b/dexgen/src/com/android/dexgen/dex/file/ValueEncoder.java new file mode 100644 index 0000000..7f30779 --- /dev/null +++ b/dexgen/src/com/android/dexgen/dex/file/ValueEncoder.java @@ -0,0 +1,529 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.dex.file; + +import com.android.dexgen.rop.annotation.Annotation; +import com.android.dexgen.rop.annotation.NameValuePair; +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstAnnotation; +import com.android.dexgen.rop.cst.CstArray; +import com.android.dexgen.rop.cst.CstBoolean; +import com.android.dexgen.rop.cst.CstByte; +import com.android.dexgen.rop.cst.CstChar; +import com.android.dexgen.rop.cst.CstDouble; +import com.android.dexgen.rop.cst.CstEnumRef; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstFloat; +import com.android.dexgen.rop.cst.CstInteger; +import com.android.dexgen.rop.cst.CstKnownNull; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.rop.cst.CstLong; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstShort; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.AnnotatedOutput; +import com.android.dexgen.util.Hex; + +import java.util.Collection; + +/** + * Handler for writing out {@code encoded_values} and parts + * thereof. + */ +public final class ValueEncoder { + /** annotation value type constant: {@code byte} */ + private static final int VALUE_BYTE = 0x00; + + /** annotation value type constant: {@code short} */ + private static final int VALUE_SHORT = 0x02; + + /** annotation value type constant: {@code char} */ + private static final int VALUE_CHAR = 0x03; + + /** annotation value type constant: {@code int} */ + private static final int VALUE_INT = 0x04; + + /** annotation value type constant: {@code long} */ + private static final int VALUE_LONG = 0x06; + + /** annotation value type constant: {@code float} */ + private static final int VALUE_FLOAT = 0x10; + + /** annotation value type constant: {@code double} */ + private static final int VALUE_DOUBLE = 0x11; + + /** annotation value type constant: {@code string} */ + private static final int VALUE_STRING = 0x17; + + /** annotation value type constant: {@code type} */ + private static final int VALUE_TYPE = 0x18; + + /** annotation value type constant: {@code field} */ + private static final int VALUE_FIELD = 0x19; + + /** annotation value type constant: {@code method} */ + private static final int VALUE_METHOD = 0x1a; + + /** annotation value type constant: {@code enum} */ + private static final int VALUE_ENUM = 0x1b; + + /** annotation value type constant: {@code array} */ + private static final int VALUE_ARRAY = 0x1c; + + /** annotation value type constant: {@code annotation} */ + private static final int VALUE_ANNOTATION = 0x1d; + + /** annotation value type constant: {@code null} */ + private static final int VALUE_NULL = 0x1e; + + /** annotation value type constant: {@code boolean} */ + private static final int VALUE_BOOLEAN = 0x1f; + + /** {@code non-null;} file being written */ + private final DexFile file; + + /** {@code non-null;} output stream to write to */ + private final AnnotatedOutput out; + + /** + * Construct an instance. + * + * @param file {@code non-null;} file being written + * @param out {@code non-null;} output stream to write to + */ + public ValueEncoder(DexFile file, AnnotatedOutput out) { + if (file == null) { + throw new NullPointerException("file == null"); + } + + if (out == null) { + throw new NullPointerException("out == null"); + } + + this.file = file; + this.out = out; + } + + /** + * Writes out the encoded form of the given constant. + * + * @param cst {@code non-null;} the constant to write + */ + public void writeConstant(Constant cst) { + int type = constantToValueType(cst); + int arg; + + switch (type) { + case VALUE_BYTE: + case VALUE_SHORT: + case VALUE_INT: + case VALUE_LONG: { + long value = ((CstLiteralBits) cst).getLongBits(); + writeSignedIntegralValue(type, value); + break; + } + case VALUE_CHAR: { + long value = ((CstLiteralBits) cst).getLongBits(); + writeUnsignedIntegralValue(type, value); + break; + } + case VALUE_FLOAT: { + // Shift value left 32 so that right-zero-extension works. + long value = ((CstFloat) cst).getLongBits() << 32; + writeRightZeroExtendedValue(type, value); + break; + } + case VALUE_DOUBLE: { + long value = ((CstDouble) cst).getLongBits(); + writeRightZeroExtendedValue(type, value); + break; + } + case VALUE_STRING: { + int index = file.getStringIds().indexOf((CstString) cst); + writeUnsignedIntegralValue(type, (long) index); + break; + } + case VALUE_TYPE: { + int index = file.getTypeIds().indexOf((CstType) cst); + writeUnsignedIntegralValue(type, (long) index); + break; + } + case VALUE_FIELD: { + int index = file.getFieldIds().indexOf((CstFieldRef) cst); + writeUnsignedIntegralValue(type, (long) index); + break; + } + case VALUE_METHOD: { + int index = file.getMethodIds().indexOf((CstMethodRef) cst); + writeUnsignedIntegralValue(type, (long) index); + break; + } + case VALUE_ENUM: { + CstFieldRef fieldRef = ((CstEnumRef) cst).getFieldRef(); + int index = file.getFieldIds().indexOf(fieldRef); + writeUnsignedIntegralValue(type, (long) index); + break; + } + case VALUE_ARRAY: { + out.writeByte(type); + writeArray((CstArray) cst, false); + break; + } + case VALUE_ANNOTATION: { + out.writeByte(type); + writeAnnotation(((CstAnnotation) cst).getAnnotation(), + false); + break; + } + case VALUE_NULL: { + out.writeByte(type); + break; + } + case VALUE_BOOLEAN: { + int value = ((CstBoolean) cst).getIntBits(); + out.writeByte(type | (value << 5)); + break; + } + default: { + throw new RuntimeException("Shouldn't happen"); + } + } + } + + /** + * Gets the value type for the given constant. + * + * @param cst {@code non-null;} the constant + * @return the value type; one of the {@code VALUE_*} constants + * defined by this class + */ + private static int constantToValueType(Constant cst) { + /* + * TODO: Constant should probable have an associated enum, so this + * can be a switch(). + */ + if (cst instanceof CstByte) { + return VALUE_BYTE; + } else if (cst instanceof CstShort) { + return VALUE_SHORT; + } else if (cst instanceof CstChar) { + return VALUE_CHAR; + } else if (cst instanceof CstInteger) { + return VALUE_INT; + } else if (cst instanceof CstLong) { + return VALUE_LONG; + } else if (cst instanceof CstFloat) { + return VALUE_FLOAT; + } else if (cst instanceof CstDouble) { + return VALUE_DOUBLE; + } else if (cst instanceof CstString) { + return VALUE_STRING; + } else if (cst instanceof CstType) { + return VALUE_TYPE; + } else if (cst instanceof CstFieldRef) { + return VALUE_FIELD; + } else if (cst instanceof CstMethodRef) { + return VALUE_METHOD; + } else if (cst instanceof CstEnumRef) { + return VALUE_ENUM; + } else if (cst instanceof CstArray) { + return VALUE_ARRAY; + } else if (cst instanceof CstAnnotation) { + return VALUE_ANNOTATION; + } else if (cst instanceof CstKnownNull) { + return VALUE_NULL; + } else if (cst instanceof CstBoolean) { + return VALUE_BOOLEAN; + } else { + throw new RuntimeException("Shouldn't happen"); + } + } + + /** + * Writes out the encoded form of the given array, that is, as + * an {@code encoded_array} and not including a + * {@code value_type} prefix. If the output stream keeps + * (debugging) annotations and {@code topLevel} is + * {@code true}, then this method will write (debugging) + * annotations. + * + * @param array {@code non-null;} array instance to write + * @param topLevel {@code true} iff the given annotation is the + * top-level annotation or {@code false} if it is a sub-annotation + * of some other annotation + */ + public void writeArray(CstArray array, boolean topLevel) { + boolean annotates = topLevel && out.annotates(); + CstArray.List list = ((CstArray) array).getList(); + int size = list.size(); + + if (annotates) { + out.annotate(" size: " + Hex.u4(size)); + } + + out.writeUnsignedLeb128(size); + + for (int i = 0; i < size; i++) { + Constant cst = list.get(i); + if (annotates) { + out.annotate(" [" + Integer.toHexString(i) + "] " + + constantToHuman(cst)); + } + writeConstant(cst); + } + + if (annotates) { + out.endAnnotation(); + } + } + + /** + * Writes out the encoded form of the given annotation, that is, + * as an {@code encoded_annotation} and not including a + * {@code value_type} prefix. If the output stream keeps + * (debugging) annotations and {@code topLevel} is + * {@code true}, then this method will write (debugging) + * annotations. + * + * @param annotation {@code non-null;} annotation instance to write + * @param topLevel {@code true} iff the given annotation is the + * top-level annotation or {@code false} if it is a sub-annotation + * of some other annotation + */ + public void writeAnnotation(Annotation annotation, boolean topLevel) { + boolean annotates = topLevel && out.annotates(); + StringIdsSection stringIds = file.getStringIds(); + TypeIdsSection typeIds = file.getTypeIds(); + + CstType type = annotation.getType(); + int typeIdx = typeIds.indexOf(type); + + if (annotates) { + out.annotate(" type_idx: " + Hex.u4(typeIdx) + " // " + + type.toHuman()); + } + + out.writeUnsignedLeb128(typeIds.indexOf(annotation.getType())); + + Collection pairs = annotation.getNameValuePairs(); + int size = pairs.size(); + + if (annotates) { + out.annotate(" size: " + Hex.u4(size)); + } + + out.writeUnsignedLeb128(size); + + int at = 0; + for (NameValuePair pair : pairs) { + CstUtf8 name = pair.getName(); + int nameIdx = stringIds.indexOf(name); + Constant value = pair.getValue(); + + if (annotates) { + out.annotate(0, " elements[" + at + "]:"); + at++; + out.annotate(" name_idx: " + Hex.u4(nameIdx) + " // " + + name.toHuman()); + } + + out.writeUnsignedLeb128(nameIdx); + + if (annotates) { + out.annotate(" value: " + constantToHuman(value)); + } + + writeConstant(value); + } + + if (annotates) { + out.endAnnotation(); + } + } + + /** + * Gets the colloquial type name and human form of the type of the + * given constant, when used as an encoded value. + * + * @param cst {@code non-null;} the constant + * @return {@code non-null;} its type name and human form + */ + public static String constantToHuman(Constant cst) { + int type = constantToValueType(cst); + + if (type == VALUE_NULL) { + return "null"; + } + + StringBuilder sb = new StringBuilder(); + + sb.append(cst.typeName()); + sb.append(' '); + sb.append(cst.toHuman()); + + return sb.toString(); + } + + /** + * Helper for {@link #writeConstant}, which writes out the value + * for any signed integral type. + * + * @param type the type constant + * @param value {@code long} bits of the value + */ + private void writeSignedIntegralValue(int type, long value) { + /* + * Figure out how many bits are needed to represent the value, + * including a sign bit: The bit count is subtracted from 65 + * and not 64 to account for the sign bit. The xor operation + * has the effect of leaving non-negative values alone and + * unary complementing negative values (so that a leading zero + * count always returns a useful number for our present + * purpose). + */ + int requiredBits = + 65 - Long.numberOfLeadingZeros(value ^ (value >> 63)); + + // Round up the requiredBits to a number of bytes. + int requiredBytes = (requiredBits + 0x07) >> 3; + + /* + * Write the header byte, which includes the type and + * requiredBytes - 1. + */ + out.writeByte(type | ((requiredBytes - 1) << 5)); + + // Write the value, per se. + while (requiredBytes > 0) { + out.writeByte((byte) value); + value >>= 8; + requiredBytes--; + } + } + + /** + * Helper for {@link #writeConstant}, which writes out the value + * for any unsigned integral type. + * + * @param type the type constant + * @param value {@code long} bits of the value + */ + private void writeUnsignedIntegralValue(int type, long value) { + // Figure out how many bits are needed to represent the value. + int requiredBits = 64 - Long.numberOfLeadingZeros(value); + if (requiredBits == 0) { + requiredBits = 1; + } + + // Round up the requiredBits to a number of bytes. + int requiredBytes = (requiredBits + 0x07) >> 3; + + /* + * Write the header byte, which includes the type and + * requiredBytes - 1. + */ + out.writeByte(type | ((requiredBytes - 1) << 5)); + + // Write the value, per se. + while (requiredBytes > 0) { + out.writeByte((byte) value); + value >>= 8; + requiredBytes--; + } + } + + /** + * Helper for {@link #writeConstant}, which writes out a + * right-zero-extended value. + * + * @param type the type constant + * @param value {@code long} bits of the value + */ + private void writeRightZeroExtendedValue(int type, long value) { + // Figure out how many bits are needed to represent the value. + int requiredBits = 64 - Long.numberOfTrailingZeros(value); + if (requiredBits == 0) { + requiredBits = 1; + } + + // Round up the requiredBits to a number of bytes. + int requiredBytes = (requiredBits + 0x07) >> 3; + + // Scootch the first bits to be written down to the low-order bits. + value >>= 64 - (requiredBytes * 8); + + /* + * Write the header byte, which includes the type and + * requiredBytes - 1. + */ + out.writeByte(type | ((requiredBytes - 1) << 5)); + + // Write the value, per se. + while (requiredBytes > 0) { + out.writeByte((byte) value); + value >>= 8; + requiredBytes--; + } + } + + + /** + * Helper for {@code addContents()} methods, which adds + * contents for a particular {@link Annotation}, calling itself + * recursively should it encounter a nested annotation. + * + * @param file {@code non-null;} the file to add to + * @param annotation {@code non-null;} the annotation to add contents for + */ + public static void addContents(DexFile file, Annotation annotation) { + TypeIdsSection typeIds = file.getTypeIds(); + StringIdsSection stringIds = file.getStringIds(); + + typeIds.intern(annotation.getType()); + + for (NameValuePair pair : annotation.getNameValuePairs()) { + stringIds.intern(pair.getName()); + addContents(file, pair.getValue()); + } + } + + /** + * Helper for {@code addContents()} methods, which adds + * contents for a particular constant, calling itself recursively + * should it encounter a {@link CstArray} and calling {@link + * #addContents(DexFile,Annotation)} recursively should it + * encounter a {@link CstAnnotation}. + * + * @param file {@code non-null;} the file to add to + * @param cst {@code non-null;} the constant to add contents for + */ + public static void addContents(DexFile file, Constant cst) { + if (cst instanceof CstAnnotation) { + addContents(file, ((CstAnnotation) cst).getAnnotation()); + } else if (cst instanceof CstArray) { + CstArray.List list = ((CstArray) cst).getList(); + int size = list.size(); + for (int i = 0; i < size; i++) { + addContents(file, list.get(i)); + } + } else { + file.internIfAppropriate(cst); + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/AttConstantValue.java b/dexgen/src/com/android/dexgen/rop/AttConstantValue.java new file mode 100644 index 0000000..189dd75 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/AttConstantValue.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.rop.cst.CstDouble; +import com.android.dexgen.rop.cst.CstFloat; +import com.android.dexgen.rop.cst.CstInteger; +import com.android.dexgen.rop.cst.CstLong; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.TypedConstant; + +/** + * Attribute class for standard {@code ConstantValue} attributes. + */ +public final class AttConstantValue extends BaseAttribute { + /** {@code non-null;} attribute name for attributes of this type */ + public static final String ATTRIBUTE_NAME = "ConstantValue"; + + /** {@code non-null;} the constant value */ + private final TypedConstant constantValue; + + /** + * Constructs an instance. + * + * @param constantValue {@code non-null;} the constant value, which must + * be an instance of one of: {@code CstString}, + * {@code CstInteger}, {@code CstLong}, + * {@code CstFloat}, or {@code CstDouble} + */ + public AttConstantValue(TypedConstant constantValue) { + super(ATTRIBUTE_NAME); + + if (!((constantValue instanceof CstString) || + (constantValue instanceof CstInteger) || + (constantValue instanceof CstLong) || + (constantValue instanceof CstFloat) || + (constantValue instanceof CstDouble))) { + if (constantValue == null) { + throw new NullPointerException("constantValue == null"); + } + throw new IllegalArgumentException("bad type for constantValue"); + } + + this.constantValue = constantValue; + } + + /** {@inheritDoc} */ + public int byteLength() { + return 8; + } + + /** + * Gets the constant value of this instance. The returned value + * is an instance of one of: {@code CstString}, + * {@code CstInteger}, {@code CstLong}, + * {@code CstFloat}, or {@code CstDouble}. + * + * @return {@code non-null;} the constant value + */ + public TypedConstant getConstantValue() { + return constantValue; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/Attribute.java b/dexgen/src/com/android/dexgen/rop/Attribute.java new file mode 100644 index 0000000..02f1e14 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/Attribute.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +/** + * Interface representing attributes of class files (directly or indirectly). + */ +public interface Attribute { + /** + * Get the name of the attribute. + * + * @return {@code non-null;} the name + */ + public String getName(); + + /** + * Get the total length of the attribute in bytes, including the + * header. Since the header is always six bytes, the result of + * this method is always at least {@code 6}. + * + * @return {@code >= 6;} the total length, in bytes + */ + public int byteLength(); +} diff --git a/dexgen/src/com/android/dexgen/rop/AttributeList.java b/dexgen/src/com/android/dexgen/rop/AttributeList.java new file mode 100644 index 0000000..205b9b7 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/AttributeList.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +/** + * Interface for lists of attributes. + */ +public interface AttributeList { + /** + * Get whether this instance is mutable. Note that the + * {@code AttributeList} interface itself doesn't provide any means + * of mutation, but that doesn't mean that there isn't a non-interface + * way of mutating an instance. + * + * @return {@code true} iff this instance is somehow mutable + */ + public boolean isMutable(); + + /** + * Get the number of attributes in the list. + * + * @return the size + */ + public int size(); + + /** + * Get the {@code n}th attribute. + * + * @param n {@code n >= 0, n < size();} which attribute + * @return {@code non-null;} the attribute in question + */ + public Attribute get(int n); + + /** + * Get the total length of this list in bytes, when part of a + * class file. The returned value includes the two bytes for the + * {@code attributes_count} length indicator. + * + * @return {@code >= 2;} the total length, in bytes + */ + public int byteLength(); + + /** + * Get the first attribute in the list with the given name, if any. + * + * @param name {@code non-null;} attribute name + * @return {@code null-ok;} first attribute in the list with the given name, + * or {@code null} if there is none + */ + public Attribute findFirst(String name); + + /** + * Get the next attribute in the list after the given one, with the same + * name, if any. + * + * @param attrib {@code non-null;} attribute to start looking after + * @return {@code null-ok;} next attribute after {@code attrib} with the + * same name as {@code attrib} + */ + public Attribute findNext(Attribute attrib); +} diff --git a/dexgen/src/com/android/dexgen/rop/BaseAttribute.java b/dexgen/src/com/android/dexgen/rop/BaseAttribute.java new file mode 100644 index 0000000..7ce88c0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/BaseAttribute.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + + +/** + * Base implementation of {@link Attribute}, which directly stores + * the attribute name but leaves the rest up to subclasses. + */ +public abstract class BaseAttribute implements Attribute { + /** {@code non-null;} attribute name */ + private final String name; + + /** + * Constructs an instance. + * + * @param name {@code non-null;} attribute name + */ + public BaseAttribute(String name) { + if (name == null) { + throw new NullPointerException("name == null"); + } + + this.name = name; + } + + /** {@inheritDoc} */ + public String getName() { + return name; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/ByteBlock.java b/dexgen/src/com/android/dexgen/rop/ByteBlock.java new file mode 100644 index 0000000..bdeeb0b --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/ByteBlock.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.IntList; +import com.android.dexgen.util.LabeledItem; + +/** + * Representation of a basic block in a bytecode array. + */ +public final class ByteBlock implements LabeledItem { + /** {@code >= 0;} label for this block */ + private final int label; + + /** {@code >= 0;} bytecode offset (inclusive) of the start of the block */ + private final int start; + + /** {@code > start;} bytecode offset (exclusive) of the end of the block */ + private final int end; + + /** {@code non-null;} list of successors that this block may branch to */ + private final IntList successors; + + /** {@code non-null;} list of exceptions caught and their handler targets */ + private final ByteCatchList catches; + + /** + * Constructs an instance. + * + * @param label {@code >= 0;} target label for this block + * @param start {@code >= 0;} bytecode offset (inclusive) of the start + * of the block + * @param end {@code > start;} bytecode offset (exclusive) of the end + * of the block + * @param successors {@code non-null;} list of successors that this block may + * branch to + * @param catches {@code non-null;} list of exceptions caught and their + * handler targets + */ + public ByteBlock(int label, int start, int end, IntList successors, + ByteCatchList catches) { + if (label < 0) { + throw new IllegalArgumentException("label < 0"); + } + + if (start < 0) { + throw new IllegalArgumentException("start < 0"); + } + + if (end <= start) { + throw new IllegalArgumentException("end <= start"); + } + + if (successors == null) { + throw new NullPointerException("targets == null"); + } + + int sz = successors.size(); + for (int i = 0; i < sz; i++) { + if (successors.get(i) < 0) { + throw new IllegalArgumentException("successors[" + i + + "] == " + + successors.get(i)); + } + } + + if (catches == null) { + throw new NullPointerException("catches == null"); + } + + this.label = label; + this.start = start; + this.end = end; + this.successors = successors; + this.catches = catches; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return '{' + Hex.u2(label) + ": " + Hex.u2(start) + ".." + + Hex.u2(end) + '}'; + } + + /** + * Gets the label of this block. + * + * @return {@code >= 0;} the label + */ + public int getLabel() { + return label; + } + + /** + * Gets the bytecode offset (inclusive) of the start of this block. + * + * @return {@code >= 0;} the start offset + */ + public int getStart() { + return start; + } + + /** + * Gets the bytecode offset (exclusive) of the end of this block. + * + * @return {@code > getStart();} the end offset + */ + public int getEnd() { + return end; + } + + /** + * Gets the list of successors that this block may branch to + * non-exceptionally. + * + * @return {@code non-null;} the successor list + */ + public IntList getSuccessors() { + return successors; + } + + /** + * Gets the list of exceptions caught and their handler targets. + * + * @return {@code non-null;} the catch list + */ + public ByteCatchList getCatches() { + return catches; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/ByteCatchList.java b/dexgen/src/com/android/dexgen/rop/ByteCatchList.java new file mode 100644 index 0000000..d2a4857 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/ByteCatchList.java @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.FixedSizeList; +import com.android.dexgen.util.IntList; + +/** + * List of catch entries, that is, the elements of an "exception table," + * which is part of a standard {@code Code} attribute. + */ +public final class ByteCatchList extends FixedSizeList { + /** {@code non-null;} convenient zero-entry instance */ + public static final ByteCatchList EMPTY = new ByteCatchList(0); + + /** + * Constructs an instance. + * + * @param count the number of elements to be in the table + */ + public ByteCatchList(int count) { + super(count); + } + + /** + * Gets the total length of this structure in bytes, when included in + * a {@code Code} attribute. The returned value includes the + * two bytes for {@code exception_table_length}. + * + * @return {@code >= 2;} the total length, in bytes + */ + public int byteLength() { + return 2 + size() * 8; + } + + /** + * Gets the indicated item. + * + * @param n {@code >= 0;} which item + * @return {@code null-ok;} the indicated item + */ + public Item get(int n) { + return (Item) get0(n); + } + + /** + * Sets the item at the given index. + * + * @param n {@code >= 0, < size();} which entry to set + * @param item {@code non-null;} the item + */ + public void set(int n, Item item) { + if (item == null) { + throw new NullPointerException("item == null"); + } + + set0(n, item); + } + + /** + * Sets the item at the given index. + * + * @param n {@code >= 0, < size();} which entry to set + * @param startPc {@code >= 0;} the start pc (inclusive) of the handler's range + * @param endPc {@code >= startPc;} the end pc (exclusive) of the + * handler's range + * @param handlerPc {@code >= 0;} the pc of the exception handler + * @param exceptionClass {@code null-ok;} the exception class or + * {@code null} to catch all exceptions with this handler + */ + public void set(int n, int startPc, int endPc, int handlerPc, + CstType exceptionClass) { + set0(n, new Item(startPc, endPc, handlerPc, exceptionClass)); + } + + /** + * Gets the list of items active at the given address. The result is + * automatically made immutable. + * + * @param pc which address + * @return {@code non-null;} list of exception handlers active at + * {@code pc} + */ + public ByteCatchList listFor(int pc) { + int sz = size(); + Item[] resultArr = new Item[sz]; + int resultSz = 0; + + for (int i = 0; i < sz; i++) { + Item one = get(i); + if (one.covers(pc) && typeNotFound(one, resultArr, resultSz)) { + resultArr[resultSz] = one; + resultSz++; + } + } + + if (resultSz == 0) { + return EMPTY; + } + + ByteCatchList result = new ByteCatchList(resultSz); + for (int i = 0; i < resultSz; i++) { + result.set(i, resultArr[i]); + } + + result.setImmutable(); + return result; + } + + /** + * Helper method for {@link #listFor}, which tells whether a match + * is not found for the exception type of the given item in + * the given array. A match is considered to be either an exact type + * match or the class {@code Object} which represents a catch-all. + * + * @param item {@code non-null;} item with the exception type to look for + * @param arr {@code non-null;} array to search in + * @param count {@code non-null;} maximum number of elements in the array to check + * @return {@code true} iff the exception type is not found + */ + private static boolean typeNotFound(Item item, Item[] arr, int count) { + CstType type = item.getExceptionClass(); + + for (int i = 0; i < count; i++) { + CstType one = arr[i].getExceptionClass(); + if ((one == type) || (one == CstType.OBJECT)) { + return false; + } + } + + return true; + } + + /** + * Returns a target list corresponding to this instance. The result + * is a list of all the exception handler addresses, with the given + * {@code noException} address appended if appropriate. The + * result is automatically made immutable. + * + * @param noException {@code >= -1;} the no-exception address to append, or + * {@code -1} not to append anything + * @return {@code non-null;} list of exception targets, with + * {@code noException} appended if necessary + */ + public IntList toTargetList(int noException) { + if (noException < -1) { + throw new IllegalArgumentException("noException < -1"); + } + + boolean hasDefault = (noException >= 0); + int sz = size(); + + if (sz == 0) { + if (hasDefault) { + /* + * The list is empty, but there is a no-exception + * address; so, the result is just that address. + */ + return IntList.makeImmutable(noException); + } + /* + * The list is empty and there isn't even a no-exception + * address. + */ + return IntList.EMPTY; + } + + IntList result = new IntList(sz + (hasDefault ? 1 : 0)); + + for (int i = 0; i < sz; i++) { + result.add(get(i).getHandlerPc()); + } + + if (hasDefault) { + result.add(noException); + } + + result.setImmutable(); + return result; + } + + /** + * Returns a rop-style catches list equivalent to this one. + * + * @return {@code non-null;} the converted instance + */ + public TypeList toRopCatchList() { + int sz = size(); + if (sz == 0) { + return StdTypeList.EMPTY; + } + + StdTypeList result = new StdTypeList(sz); + + for (int i = 0; i < sz; i++) { + result.set(i, get(i).getExceptionClass().getClassType()); + } + + result.setImmutable(); + return result; + } + + /** + * Item in an exception handler list. + */ + public static class Item { + /** {@code >= 0;} the start pc (inclusive) of the handler's range */ + private final int startPc; + + /** {@code >= startPc;} the end pc (exclusive) of the handler's range */ + private final int endPc; + + /** {@code >= 0;} the pc of the exception handler */ + private final int handlerPc; + + /** {@code null-ok;} the exception class or {@code null} to catch all + * exceptions with this handler */ + private final CstType exceptionClass; + + /** + * Constructs an instance. + * + * @param startPc {@code >= 0;} the start pc (inclusive) of the + * handler's range + * @param endPc {@code >= startPc;} the end pc (exclusive) of the + * handler's range + * @param handlerPc {@code >= 0;} the pc of the exception handler + * @param exceptionClass {@code null-ok;} the exception class or + * {@code null} to catch all exceptions with this handler + */ + public Item(int startPc, int endPc, int handlerPc, + CstType exceptionClass) { + if (startPc < 0) { + throw new IllegalArgumentException("startPc < 0"); + } + + if (endPc < startPc) { + throw new IllegalArgumentException("endPc < startPc"); + } + + if (handlerPc < 0) { + throw new IllegalArgumentException("handlerPc < 0"); + } + + this.startPc = startPc; + this.endPc = endPc; + this.handlerPc = handlerPc; + this.exceptionClass = exceptionClass; + } + + /** + * Gets the start pc (inclusive) of the handler's range. + * + * @return {@code >= 0;} the start pc (inclusive) of the handler's range. + */ + public int getStartPc() { + return startPc; + } + + /** + * Gets the end pc (exclusive) of the handler's range. + * + * @return {@code >= startPc;} the end pc (exclusive) of the + * handler's range. + */ + public int getEndPc() { + return endPc; + } + + /** + * Gets the pc of the exception handler. + * + * @return {@code >= 0;} the pc of the exception handler + */ + public int getHandlerPc() { + return handlerPc; + } + + /** + * Gets the class of exception handled. + * + * @return {@code non-null;} the exception class; {@link CstType#OBJECT} + * if this entry handles all possible exceptions + */ + public CstType getExceptionClass() { + return (exceptionClass != null) ? + exceptionClass : CstType.OBJECT; + } + + /** + * Returns whether the given address is in the range of this item. + * + * @param pc the address + * @return {@code true} iff this item covers {@code pc} + */ + public boolean covers(int pc) { + return (pc >= startPc) && (pc < endPc); + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/Field.java b/dexgen/src/com/android/dexgen/rop/Field.java new file mode 100644 index 0000000..3e0364b --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/Field.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.rop.cst.TypedConstant; + +/** + * Interface representing fields of class files. + */ +public interface Field + extends Member { + /** + * Get the constant value for this field, if any. This only returns + * non-{@code null} for a {@code static final} field which + * includes a {@code ConstantValue} attribute. + * + * @return {@code null-ok;} the constant value, or {@code null} if this + * field isn't a constant + */ + public TypedConstant getConstantValue(); +} diff --git a/dexgen/src/com/android/dexgen/rop/FieldList.java b/dexgen/src/com/android/dexgen/rop/FieldList.java new file mode 100644 index 0000000..ab4f28f --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/FieldList.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +/** + * Interface for lists of fields. + */ +public interface FieldList +{ + /** + * Get whether this instance is mutable. Note that the + * {@code FieldList} interface itself doesn't provide any means + * of mutation, but that doesn't mean that there isn't a non-interface + * way of mutating an instance. + * + * @return {@code true} iff this instance is somehow mutable + */ + public boolean isMutable(); + + /** + * Get the number of fields in the list. + * + * @return the size + */ + public int size(); + + /** + * Get the {@code n}th field. + * + * @param n {@code n >= 0, n < size();} which field + * @return {@code non-null;} the field in question + */ + public Field get(int n); +} diff --git a/dexgen/src/com/android/dexgen/rop/LineNumberList.java b/dexgen/src/com/android/dexgen/rop/LineNumberList.java new file mode 100644 index 0000000..f780066 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/LineNumberList.java @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.util.FixedSizeList; + +/** + * List of "line number" entries, which are the contents of + * {@code LineNumberTable} attributes. + */ +public final class LineNumberList extends FixedSizeList { + /** {@code non-null;} zero-size instance */ + public static final LineNumberList EMPTY = new LineNumberList(0); + + /** + * Returns an instance which is the concatenation of the two given + * instances. + * + * @param list1 {@code non-null;} first instance + * @param list2 {@code non-null;} second instance + * @return {@code non-null;} combined instance + */ + public static LineNumberList concat(LineNumberList list1, + LineNumberList list2) { + if (list1 == EMPTY) { + // easy case + return list2; + } + + int sz1 = list1.size(); + int sz2 = list2.size(); + LineNumberList result = new LineNumberList(sz1 + sz2); + + for (int i = 0; i < sz1; i++) { + result.set(i, list1.get(i)); + } + + for (int i = 0; i < sz2; i++) { + result.set(sz1 + i, list2.get(i)); + } + + return result; + } + + /** + * Constructs an instance. + * + * @param count the number of elements to be in the list + */ + public LineNumberList(int count) { + super(count); + } + + /** + * Gets the indicated item. + * + * @param n {@code >= 0;} which item + * @return {@code null-ok;} the indicated item + */ + public Item get(int n) { + return (Item) get0(n); + } + + /** + * Sets the item at the given index. + * + * @param n {@code >= 0, < size();} which element + * @param item {@code non-null;} the item + */ + public void set(int n, Item item) { + if (item == null) { + throw new NullPointerException("item == null"); + } + + set0(n, item); + } + + /** + * Sets the item at the given index. + * + * @param n {@code >= 0, < size();} which element + * @param startPc {@code >= 0;} start pc of this item + * @param lineNumber {@code >= 0;} corresponding line number + */ + public void set(int n, int startPc, int lineNumber) { + set0(n, new Item(startPc, lineNumber)); + } + + /** + * Gets the line number associated with the given address. + * + * @param pc {@code >= 0;} the address to look up + * @return {@code >= -1;} the associated line number, or {@code -1} if + * none is known + */ + public int pcToLine(int pc) { + /* + * Line number entries don't have to appear in any particular + * order, so we have to do a linear search. TODO: If + * this turns out to be a bottleneck, consider sorting the + * list prior to use. + */ + int sz = size(); + int bestPc = -1; + int bestLine = -1; + + for (int i = 0; i < sz; i++) { + Item one = get(i); + int onePc = one.getStartPc(); + if ((onePc <= pc) && (onePc > bestPc)) { + bestPc = onePc; + bestLine = one.getLineNumber(); + if (bestPc == pc) { + // We can't do better than this + break; + } + } + } + + return bestLine; + } + + /** + * Item in a line number table. + */ + public static class Item { + /** {@code >= 0;} start pc of this item */ + private final int startPc; + + /** {@code >= 0;} corresponding line number */ + private final int lineNumber; + + /** + * Constructs an instance. + * + * @param startPc {@code >= 0;} start pc of this item + * @param lineNumber {@code >= 0;} corresponding line number + */ + public Item(int startPc, int lineNumber) { + if (startPc < 0) { + throw new IllegalArgumentException("startPc < 0"); + } + + if (lineNumber < 0) { + throw new IllegalArgumentException("lineNumber < 0"); + } + + this.startPc = startPc; + this.lineNumber = lineNumber; + } + + /** + * Gets the start pc of this item. + * + * @return the start pc + */ + public int getStartPc() { + return startPc; + } + + /** + * Gets the line number of this item. + * + * @return the line number + */ + public int getLineNumber() { + return lineNumber; + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/Member.java b/dexgen/src/com/android/dexgen/rop/Member.java new file mode 100644 index 0000000..dfc17be --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/Member.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.rop.cst.CstNat; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; + +/** + * Interface representing members of class files (that is, fields and methods). + */ +public interface Member { + /** + * Get the defining class. + * + * @return {@code non-null;} the defining class + */ + public CstType getDefiningClass(); + + /** + * Get the field {@code access_flags}. + * + * @return the access flags + */ + public int getAccessFlags(); + + /** + * Get the field {@code name_index} of the member. This is + * just a convenient shorthand for {@code getNat().getName()}. + * + * @return {@code non-null;} the name + */ + public CstUtf8 getName(); + + /** + * Get the field {@code descriptor_index} of the member. This is + * just a convenient shorthand for {@code getNat().getDescriptor()}. + * + * @return {@code non-null;} the descriptor + */ + public CstUtf8 getDescriptor(); + + /** + * Get the name and type associated with this member. This is a + * combination of the fields {@code name_index} and + * {@code descriptor_index} in the original classfile, interpreted + * via the constant pool. + * + * @return {@code non-null;} the name and type + */ + public CstNat getNat(); + + /** + * Get the field {@code attributes} (along with + * {@code attributes_count}). + * + * @return {@code non-null;} the constant pool + */ + public AttributeList getAttributes(); +} diff --git a/dexgen/src/com/android/dexgen/rop/StdAttributeList.java b/dexgen/src/com/android/dexgen/rop/StdAttributeList.java new file mode 100644 index 0000000..bebee21 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/StdAttributeList.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.util.FixedSizeList; + +/** + * Standard implementation of {@link AttributeList}, which directly stores + * an array of {@link Attribute} objects and can be made immutable. + */ +public final class StdAttributeList extends FixedSizeList + implements AttributeList { + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the list + */ + public StdAttributeList(int size) { + super(size); + } + + /** {@inheritDoc} */ + public Attribute get(int n) { + return (Attribute) get0(n); + } + + /** {@inheritDoc} */ + public int byteLength() { + int sz = size(); + int result = 2; // u2 attributes_count + + for (int i = 0; i < sz; i++) { + result += get(i).byteLength(); + } + + return result; + } + + /** {@inheritDoc} */ + public Attribute findFirst(String name) { + int sz = size(); + + for (int i = 0; i < sz; i++) { + Attribute att = get(i); + if (att.getName().equals(name)) { + return att; + } + } + + return null; + } + + /** {@inheritDoc} */ + public Attribute findNext(Attribute attrib) { + int sz = size(); + int at; + + outer: { + for (at = 0; at < sz; at++) { + Attribute att = get(at); + if (att == attrib) { + break outer; + } + } + + return null; + } + + String name = attrib.getName(); + + for (at++; at < sz; at++) { + Attribute att = get(at); + if (att.getName().equals(name)) { + return att; + } + } + + return null; + } + + /** + * Sets the attribute at the given index. + * + * @param n {@code >= 0, < size();} which attribute + * @param attribute {@code null-ok;} the attribute object + */ + public void set(int n, Attribute attribute) { + set0(n, attribute); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/StdField.java b/dexgen/src/com/android/dexgen/rop/StdField.java new file mode 100644 index 0000000..9adcc30 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/StdField.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.rop.cst.CstNat; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.cst.TypedConstant; + +/** + * Standard implementation of {@link Field}, which directly stores + * all the associated data. + */ +public final class StdField extends StdMember implements Field { + /** + * Constructs an instance. + * + * @param definingClass {@code non-null;} the defining class + * @param accessFlags access flags + * @param nat {@code non-null;} member name and type (descriptor) + * @param attributes {@code non-null;} list of associated attributes + */ + public StdField(CstType definingClass, int accessFlags, CstNat nat, + AttributeList attributes) { + super(definingClass, accessFlags, nat, attributes); + } + + /** + * Constructs an instance having Java field as its pattern. + * + * @param field {@code non-null;} pattern for dex field + */ + public StdField(java.lang.reflect.Field field) { + this(CstType.intern(field.getDeclaringClass()), + field.getModifiers(), + new CstNat(new CstUtf8(field.getName()), + CstType.intern(field.getType()).getDescriptor()), + new StdAttributeList(0)); + } + + /** + * Constructs an instance taking field description as user-friendly arguments. + * + * @param declaringClass {@code non-null;} the class field belongs to + * @param type {@code non-null;} type of the field + * @param name {@code non-null;} name of the field + * @param modifiers access flags of the field + */ + public StdField(Class definingClass, Class type, String name, int modifiers) { + this(CstType.intern(definingClass), + modifiers, + new CstNat(new CstUtf8(name), CstType.intern(type).getDescriptor()), + new StdAttributeList(0)); + } + + /** {@inheritDoc} */ + public TypedConstant getConstantValue() { + AttributeList attribs = getAttributes(); + AttConstantValue cval = (AttConstantValue) + attribs.findFirst(AttConstantValue.ATTRIBUTE_NAME); + + if (cval == null) { + return null; + } + + return cval.getConstantValue(); + } +} \ No newline at end of file diff --git a/dexgen/src/com/android/dexgen/rop/StdFieldList.java b/dexgen/src/com/android/dexgen/rop/StdFieldList.java new file mode 100644 index 0000000..ccb7465 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/StdFieldList.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.util.FixedSizeList; + +/** + * Standard implementation of {@link FieldList}, which directly stores + * an array of {@link Field} objects and can be made immutable. + */ +public final class StdFieldList extends FixedSizeList implements FieldList { + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the list + */ + public StdFieldList(int size) { + super(size); + } + + /** {@inheritDoc} */ + public Field get(int n) { + return (Field) get0(n); + } + + /** + * Sets the field at the given index. + * + * @param n {@code >= 0, < size();} which field + * @param field {@code null-ok;} the field object + */ + public void set(int n, Field field) { + set0(n, field); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/StdMember.java b/dexgen/src/com/android/dexgen/rop/StdMember.java new file mode 100644 index 0000000..6c46051 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/StdMember.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop; + +import com.android.dexgen.rop.cst.CstNat; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; + +/** + * Standard implementation of {@link Member}, which directly stores + * all the associated data. + */ +public abstract class StdMember implements Member { + /** {@code non-null;} the defining class */ + private final CstType definingClass; + + /** access flags */ + private final int accessFlags; + + /** {@code non-null;} member name and type */ + private final CstNat nat; + + /** {@code non-null;} list of associated attributes */ + private final AttributeList attributes; + + /** + * Constructs an instance. + * + * @param definingClass {@code non-null;} the defining class + * @param accessFlags access flags + * @param nat {@code non-null;} member name and type (descriptor) + * @param attributes {@code non-null;} list of associated attributes + */ + public StdMember(CstType definingClass, int accessFlags, CstNat nat, + AttributeList attributes) { + if (definingClass == null) { + throw new NullPointerException("definingClass == null"); + } + + if (nat == null) { + throw new NullPointerException("nat == null"); + } + + if (attributes == null) { + throw new NullPointerException("attributes == null"); + } + + this.definingClass = definingClass; + this.accessFlags = accessFlags; + this.nat = nat; + this.attributes = attributes; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(100); + + sb.append(getClass().getName()); + sb.append('{'); + sb.append(nat.toHuman()); + sb.append('}'); + + return sb.toString(); + } + + /** {@inheritDoc} */ + public final CstType getDefiningClass() { + return definingClass; + } + + /** {@inheritDoc} */ + public final int getAccessFlags() { + return accessFlags; + } + + /** {@inheritDoc} */ + public final CstNat getNat() { + return nat; + } + + /** {@inheritDoc} */ + public final CstUtf8 getName() { + return nat.getName(); + } + + /** {@inheritDoc} */ + public final CstUtf8 getDescriptor() { + return nat.getDescriptor(); + } + + /** {@inheritDoc} */ + public final AttributeList getAttributes() { + return attributes; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/annotation/Annotation.java b/dexgen/src/com/android/dexgen/rop/annotation/Annotation.java new file mode 100644 index 0000000..918d2bc --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/annotation/Annotation.java @@ -0,0 +1,232 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.annotation; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstAnnotation; +import com.android.dexgen.rop.cst.CstFieldRef; +import com.android.dexgen.rop.cst.CstLiteralBits; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstNat; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.cst.TypedConstant; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.MutabilityControl; +import com.android.dexgen.util.ToHuman; + +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.TreeMap; + +/** + * An annotation on an element of a class. Annotations have an + * associated type and additionally consist of a set of (name, value) + * pairs, where the names are unique. + */ +public final class Annotation extends MutabilityControl + implements Comparable, ToHuman { + /** {@code non-null;} type of the annotation */ + private final CstType type; + + /** {@code non-null;} the visibility of the annotation */ + private final AnnotationVisibility visibility; + + /** {@code non-null;} map from names to {@link NameValuePair} instances */ + private final TreeMap elements; + + /** + * Construct an instance. It initially contains no elements. + * + * @param type {@code non-null;} type of the annotation + * @param visibility {@code non-null;} the visibility of the annotation + */ + public Annotation(CstType type, AnnotationVisibility visibility) { + if (type == null) { + throw new NullPointerException("type == null"); + } + + if (visibility == null) { + throw new NullPointerException("visibility == null"); + } + + this.type = type; + this.visibility = visibility; + this.elements = new TreeMap(); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (! (other instanceof Annotation)) { + return false; + } + + Annotation otherAnnotation = (Annotation) other; + + if (! (type.equals(otherAnnotation.type) + && (visibility == otherAnnotation.visibility))) { + return false; + } + + return elements.equals(otherAnnotation.elements); + } + + /** {@inheritDoc} */ + public int hashCode() { + int hash = type.hashCode(); + hash = (hash * 31) + elements.hashCode(); + hash = (hash * 31) + visibility.hashCode(); + return hash; + } + + /** {@inheritDoc} */ + public int compareTo(Annotation other) { + int result = type.compareTo(other.type); + + if (result != 0) { + return result; + } + + result = visibility.compareTo(other.visibility); + + if (result != 0) { + return result; + } + + Iterator thisIter = elements.values().iterator(); + Iterator otherIter = other.elements.values().iterator(); + + while (thisIter.hasNext() && otherIter.hasNext()) { + NameValuePair thisOne = thisIter.next(); + NameValuePair otherOne = otherIter.next(); + + result = thisOne.compareTo(otherOne); + if (result != 0) { + return result; + } + } + + if (thisIter.hasNext()) { + return 1; + } else if (otherIter.hasNext()) { + return -1; + } + + return 0; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return toHuman(); + } + + /** {@inheritDoc} */ + public String toHuman() { + StringBuilder sb = new StringBuilder(); + + sb.append(visibility.toHuman()); + sb.append("-annotation "); + sb.append(type.toHuman()); + sb.append(" {"); + + boolean first = true; + for (NameValuePair pair : elements.values()) { + if (first) { + first = false; + } else { + sb.append(", "); + } + sb.append(pair.getName().toHuman()); + sb.append(": "); + sb.append(pair.getValue().toHuman()); + } + + sb.append("}"); + return sb.toString(); + } + + /** + * Gets the type of this instance. + * + * @return {@code non-null;} the type + */ + public CstType getType() { + return type; + } + + /** + * Gets the visibility of this instance. + * + * @return {@code non-null;} the visibility + */ + public AnnotationVisibility getVisibility() { + return visibility; + } + + /** + * Put an element into the set of (name, value) pairs for this instance. + * If there is a preexisting element with the same name, it will be + * replaced by this method. + * + * @param pair {@code non-null;} the (name, value) pair to place into this instance + */ + public void put(NameValuePair pair) { + throwIfImmutable(); + + if (pair == null) { + throw new NullPointerException("pair == null"); + } + + elements.put(pair.getName(), pair); + } + + /** + * Add an element to the set of (name, value) pairs for this instance. + * It is an error to call this method if there is a preexisting element + * with the same name. + * + * @param pair {@code non-null;} the (name, value) pair to add to this instance + */ + public void add(NameValuePair pair) { + throwIfImmutable(); + + if (pair == null) { + throw new NullPointerException("pair == null"); + } + + CstUtf8 name = pair.getName(); + + if (elements.get(name) != null) { + throw new IllegalArgumentException("name already added: " + name); + } + + elements.put(name, pair); + } + + /** + * Gets the set of name-value pairs contained in this instance. The + * result is always unmodifiable. + * + * @return {@code non-null;} the set of name-value pairs + */ + public Collection getNameValuePairs() { + return Collections.unmodifiableCollection(elements.values()); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/annotation/AnnotationVisibility.java b/dexgen/src/com/android/dexgen/rop/annotation/AnnotationVisibility.java new file mode 100644 index 0000000..5239164 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/annotation/AnnotationVisibility.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.annotation; + +import com.android.dexgen.util.ToHuman; + +/** + * Visibility scope of an annotation. + */ +public enum AnnotationVisibility implements ToHuman { + RUNTIME("runtime"), + BUILD("build"), + SYSTEM("system"), + EMBEDDED("embedded"); + + /** {@code non-null;} the human-oriented string representation */ + private final String human; + + /** + * Constructs an instance. + * + * @param human {@code non-null;} the human-oriented string representation + */ + private AnnotationVisibility(String human) { + this.human = human; + } + + /** {@inheritDoc} */ + public String toHuman() { + return human; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/annotation/Annotations.java b/dexgen/src/com/android/dexgen/rop/annotation/Annotations.java new file mode 100644 index 0000000..a7eca04 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/annotation/Annotations.java @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.annotation; + +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.util.MutabilityControl; + +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.TreeMap; + +/** + * List of {@link Annotation} instances. + */ +public final class Annotations extends MutabilityControl + implements Comparable { + /** {@code non-null;} immutable empty instance */ + public static final Annotations EMPTY = new Annotations(); + + static { + EMPTY.setImmutable(); + } + + /** {@code non-null;} map from types to annotations */ + private final TreeMap annotations; + + /** + * Constructs an immutable instance which is the combination of the + * two given instances. The two instances must contain disjoint sets + * of types. + * + * @param a1 {@code non-null;} an instance + * @param a2 {@code non-null;} the other instance + * @return {@code non-null;} the combination + * @throws IllegalArgumentException thrown if there is a duplicate type + */ + public static Annotations combine(Annotations a1, Annotations a2) { + Annotations result = new Annotations(); + + result.addAll(a1); + result.addAll(a2); + result.setImmutable(); + + return result; + } + + /** + * Constructs an immutable instance which is the combination of the + * given instance with the given additional annotation. The latter's + * type must not already appear in the former. + * + * @param annotations {@code non-null;} the instance to augment + * @param annotation {@code non-null;} the additional annotation + * @return {@code non-null;} the combination + * @throws IllegalArgumentException thrown if there is a duplicate type + */ + public static Annotations combine(Annotations annotations, + Annotation annotation) { + Annotations result = new Annotations(); + + result.addAll(annotations); + result.add(annotation); + result.setImmutable(); + + return result; + } + + /** + * Constructs an empty instance. + */ + public Annotations() { + annotations = new TreeMap(); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return annotations.hashCode(); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (! (other instanceof Annotations)) { + return false; + } + + Annotations otherAnnotations = (Annotations) other; + + return annotations.equals(otherAnnotations.annotations); + } + + /** {@inheritDoc} */ + public int compareTo(Annotations other) { + Iterator thisIter = annotations.values().iterator(); + Iterator otherIter = other.annotations.values().iterator(); + + while (thisIter.hasNext() && otherIter.hasNext()) { + Annotation thisOne = thisIter.next(); + Annotation otherOne = otherIter.next(); + + int result = thisOne.compareTo(otherOne); + if (result != 0) { + return result; + } + } + + if (thisIter.hasNext()) { + return 1; + } else if (otherIter.hasNext()) { + return -1; + } + + return 0; + } + + /** {@inheritDoc} */ + public String toString() { + StringBuilder sb = new StringBuilder(); + boolean first = true; + + sb.append("annotations{"); + + for (Annotation a : annotations.values()) { + if (first) { + first = false; + } else { + sb.append(", "); + } + sb.append(a.toHuman()); + } + + sb.append("}"); + return sb.toString(); + } + + /** + * Gets the number of elements in this instance. + * + * @return {@code >= 0;} the size + */ + public int size() { + return annotations.size(); + } + + /** + * Adds an element to this instance. There must not already be an + * element of the same type. + * + * @param annotation {@code non-null;} the element to add + * @throws IllegalArgumentException thrown if there is a duplicate type + */ + public void add(Annotation annotation) { + throwIfImmutable(); + + if (annotation == null) { + throw new NullPointerException("annotation == null"); + } + + CstType type = annotation.getType(); + + if (annotations.containsKey(type)) { + throw new IllegalArgumentException("duplicate type: " + + type.toHuman()); + } + + annotations.put(type, annotation); + } + + /** + * Adds all of the elements of the given instance to this one. The + * instances must not have any duplicate types. + * + * @param toAdd {@code non-null;} the annotations to add + * @throws IllegalArgumentException thrown if there is a duplicate type + */ + public void addAll(Annotations toAdd) { + throwIfImmutable(); + + if (toAdd == null) { + throw new NullPointerException("toAdd == null"); + } + + for (Annotation a : toAdd.annotations.values()) { + add(a); + } + } + + /** + * Gets the set of annotations contained in this instance. The + * result is always unmodifiable. + * + * @return {@code non-null;} the set of annotations + */ + public Collection getAnnotations() { + return Collections.unmodifiableCollection(annotations.values()); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/annotation/AnnotationsList.java b/dexgen/src/com/android/dexgen/rop/annotation/AnnotationsList.java new file mode 100644 index 0000000..1159932 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/annotation/AnnotationsList.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.annotation; + +import com.android.dexgen.util.FixedSizeList; + +/** + * List of {@link Annotations} instances. + */ +public final class AnnotationsList + extends FixedSizeList { + /** {@code non-null;} immutable empty instance */ + public static final AnnotationsList EMPTY = new AnnotationsList(0); + + /** + * Constructs an immutable instance which is the combination of + * the two given instances. The two instances must each have the + * same number of elements, and each pair of elements must contain + * disjoint sets of types. + * + * @param list1 {@code non-null;} an instance + * @param list2 {@code non-null;} the other instance + * @return {@code non-null;} the combination + */ + public static AnnotationsList combine(AnnotationsList list1, + AnnotationsList list2) { + int size = list1.size(); + + if (size != list2.size()) { + throw new IllegalArgumentException("list1.size() != list2.size()"); + } + + AnnotationsList result = new AnnotationsList(size); + + for (int i = 0; i < size; i++) { + Annotations a1 = list1.get(i); + Annotations a2 = list2.get(i); + result.set(i, Annotations.combine(a1, a2)); + } + + result.setImmutable(); + return result; + } + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the list + */ + public AnnotationsList(int size) { + super(size); + } + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public Annotations get(int n) { + return (Annotations) get0(n); + } + + /** + * Sets the element at the given index. The given element must be + * immutable. + * + * @param n {@code >= 0, < size();} which index + * @param a {@code null-ok;} the element to set at {@code n} + */ + public void set(int n, Annotations a) { + a.throwIfMutable(); + set0(n, a); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/annotation/NameValuePair.java b/dexgen/src/com/android/dexgen/rop/annotation/NameValuePair.java new file mode 100644 index 0000000..9f96f14 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/annotation/NameValuePair.java @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.annotation; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstString; +import com.android.dexgen.rop.cst.CstUtf8; + +/** + * A (name, value) pair. These are used as the contents of an annotation. + */ +public final class NameValuePair implements Comparable { + /** {@code non-null;} the name */ + private final CstUtf8 name; + + /** {@code non-null;} the value */ + private final Constant value; + + /** + * Construct an instance. + * + * @param name {@code non-null;} the name + * @param value {@code non-null;} the value + */ + public NameValuePair(CstUtf8 name, Constant value) { + if (name == null) { + throw new NullPointerException("name == null"); + } + + if (value == null) { + throw new NullPointerException("value == null"); + } + + // Reject CstUtf8 values. (They should be CstStrings.) + if (value instanceof CstUtf8) { + throw new IllegalArgumentException("bad value: " + value); + } + + this.name = name; + this.value = value; + } + + /** {@inheritDoc} */ + public String toString() { + return name.toHuman() + ":" + value; + } + + /** {@inheritDoc} */ + public int hashCode() { + return name.hashCode() * 31 + value.hashCode(); + } + + /** {@inheritDoc} */ + public boolean equals(Object other) { + if (! (other instanceof NameValuePair)) { + return false; + } + + NameValuePair otherPair = (NameValuePair) other; + + return name.equals(otherPair.name) + && value.equals(otherPair.value); + } + + /** + * {@inheritDoc} + * + *

Instances of this class compare in name-major and value-minor + * order.

+ */ + public int compareTo(NameValuePair other) { + int result = name.compareTo(other.name); + + if (result != 0) { + return result; + } + + return value.compareTo(other.value); + } + + /** + * Gets the name. + * + * @return {@code non-null;} the name + */ + public CstUtf8 getName() { + return name; + } + + /** + * Gets the value. + * + * @return {@code non-null;} the value + */ + public Constant getValue() { + return value; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/AccessFlags.java b/dexgen/src/com/android/dexgen/rop/code/AccessFlags.java new file mode 100644 index 0000000..4a8b435 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/AccessFlags.java @@ -0,0 +1,374 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.util.Hex; + +/** + * Constants used as "access flags" in various places in classes, and + * related utilities. Although, at the rop layer, flags are generally + * ignored, this is the layer of communication, and as such, this + * package is where these definitions belong. The flag definitions are + * identical to Java access flags, but {@code ACC_SUPER} isn't + * used at all in translated code, and {@code ACC_SYNCHRONIZED} + * is only used in a very limited way. + */ +public final class AccessFlags { + /** public member / class */ + public static final int ACC_PUBLIC = 0x0001; + + /** private member */ + public static final int ACC_PRIVATE = 0x0002; + + /** protected member */ + public static final int ACC_PROTECTED = 0x0004; + + /** static member */ + public static final int ACC_STATIC = 0x0008; + + /** final member / class */ + public static final int ACC_FINAL = 0x0010; + + /** + * synchronized method; only valid in dex files for {@code native} + * methods + */ + public static final int ACC_SYNCHRONIZED = 0x0020; + + /** + * class with new-style {@code invokespecial} for superclass + * method access + */ + public static final int ACC_SUPER = 0x0020; + + /** volatile field */ + public static final int ACC_VOLATILE = 0x0040; + + /** bridge method (generated) */ + public static final int ACC_BRIDGE = 0x0040; + + /** transient field */ + public static final int ACC_TRANSIENT = 0x0080; + + /** varargs method */ + public static final int ACC_VARARGS = 0x0080; + + /** native method */ + public static final int ACC_NATIVE = 0x0100; + + /** "class" is in fact an public static final interface */ + public static final int ACC_INTERFACE = 0x0200; + + /** abstract method / class */ + public static final int ACC_ABSTRACT = 0x0400; + + /** + * method with strict floating point ({@code strictfp}) + * behavior + */ + public static final int ACC_STRICT = 0x0800; + + /** synthetic member */ + public static final int ACC_SYNTHETIC = 0x1000; + + /** class is an annotation type */ + public static final int ACC_ANNOTATION = 0x2000; + + /** + * class is an enumerated type; field is an element of an enumerated + * type + */ + public static final int ACC_ENUM = 0x4000; + + /** method is a constructor */ + public static final int ACC_CONSTRUCTOR = 0x10000; + + /** + * method was declared {@code synchronized}; has no effect on + * execution (other than inspecting this flag, per se) + */ + public static final int ACC_DECLARED_SYNCHRONIZED = 0x20000; + + /** flags defined on classes */ + public static final int CLASS_FLAGS = + ACC_PUBLIC | ACC_FINAL | ACC_SUPER | ACC_INTERFACE | ACC_ABSTRACT | + ACC_SYNTHETIC | ACC_ANNOTATION | ACC_ENUM; + + /** flags defined on inner classes */ + public static final int INNER_CLASS_FLAGS = + ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL | + ACC_INTERFACE | ACC_ABSTRACT | ACC_SYNTHETIC | ACC_ANNOTATION | + ACC_ENUM; + + /** flags defined on fields */ + public static final int FIELD_FLAGS = + ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL | + ACC_VOLATILE | ACC_TRANSIENT | ACC_SYNTHETIC | ACC_ENUM; + + /** flags defined on methods */ + public static final int METHOD_FLAGS = + ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL | + ACC_SYNCHRONIZED | ACC_BRIDGE | ACC_VARARGS | ACC_NATIVE | + ACC_ABSTRACT | ACC_STRICT | ACC_SYNTHETIC | ACC_CONSTRUCTOR | + ACC_DECLARED_SYNCHRONIZED; + + /** indicates conversion of class flags */ + private static final int CONV_CLASS = 1; + + /** indicates conversion of field flags */ + private static final int CONV_FIELD = 2; + + /** indicates conversion of method flags */ + private static final int CONV_METHOD = 3; + + /** + * This class is uninstantiable. + */ + private AccessFlags() { + // This space intentionally left blank. + } + + /** + * Returns a human-oriented string representing the given access flags, + * as defined on classes (not fields or methods). + * + * @param flags the flags + * @return {@code non-null;} human-oriented string + */ + public static String classString(int flags) { + return humanHelper(flags, CLASS_FLAGS, CONV_CLASS); + } + + /** + * Returns a human-oriented string representing the given access flags, + * as defined on inner classes. + * + * @param flags the flags + * @return {@code non-null;} human-oriented string + */ + public static String innerClassString(int flags) { + return humanHelper(flags, INNER_CLASS_FLAGS, CONV_CLASS); + } + + /** + * Returns a human-oriented string representing the given access flags, + * as defined on fields (not classes or methods). + * + * @param flags the flags + * @return {@code non-null;} human-oriented string + */ + public static String fieldString(int flags) { + return humanHelper(flags, FIELD_FLAGS, CONV_FIELD); + } + + /** + * Returns a human-oriented string representing the given access flags, + * as defined on methods (not classes or fields). + * + * @param flags the flags + * @return {@code non-null;} human-oriented string + */ + public static String methodString(int flags) { + return humanHelper(flags, METHOD_FLAGS, CONV_METHOD); + } + + /** + * Returns whether the flag {@code ACC_PUBLIC} is on in the given + * flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_PUBLIC} flag + */ + public static boolean isPublic(int flags) { + return (flags & ACC_PUBLIC) != 0; + } + + /** + * Returns whether the flag {@code ACC_PROTECTED} is on in the given + * flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_PROTECTED} flag + */ + public static boolean isProtected(int flags) { + return (flags & ACC_PROTECTED) != 0; + } + + /** + * Returns whether the flag {@code ACC_PRIVATE} is on in the given + * flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_PRIVATE} flag + */ + public static boolean isPrivate(int flags) { + return (flags & ACC_PRIVATE) != 0; + } + + /** + * Returns whether the flag {@code ACC_STATIC} is on in the given + * flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_STATIC} flag + */ + public static boolean isStatic(int flags) { + return (flags & ACC_STATIC) != 0; + } + + /** + * Returns whether the flag {@code ACC_SYNCHRONIZED} is on in + * the given flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_SYNCHRONIZED} flag + */ + public static boolean isSynchronized(int flags) { + return (flags & ACC_SYNCHRONIZED) != 0; + } + + /** + * Returns whether the flag {@code ACC_ABSTRACT} is on in the given + * flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_ABSTRACT} flag + */ + public static boolean isAbstract(int flags) { + return (flags & ACC_ABSTRACT) != 0; + } + + /** + * Returns whether the flag {@code ACC_NATIVE} is on in the given + * flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_NATIVE} flag + */ + public static boolean isNative(int flags) { + return (flags & ACC_NATIVE) != 0; + } + + /** + * Returns whether the flag {@code ACC_ANNOTATION} is on in the given + * flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_ANNOTATION} flag + */ + public static boolean isAnnotation(int flags) { + return (flags & ACC_ANNOTATION) != 0; + } + + /** + * Returns whether the flag {@code ACC_DECLARED_SYNCHRONIZED} is + * on in the given flags. + * + * @param flags the flags to check + * @return the value of the {@code ACC_DECLARED_SYNCHRONIZED} flag + */ + public static boolean isDeclaredSynchronized(int flags) { + return (flags & ACC_DECLARED_SYNCHRONIZED) != 0; + } + + /** + * Helper to return a human-oriented string representing the given + * access flags. + * + * @param flags the defined flags + * @param mask mask for the "defined" bits + * @param what what the flags represent (one of {@code CONV_*}) + * @return {@code non-null;} human-oriented string + */ + private static String humanHelper(int flags, int mask, int what) { + StringBuffer sb = new StringBuffer(80); + int extra = flags & ~mask; + + flags &= mask; + + if ((flags & ACC_PUBLIC) != 0) { + sb.append("|public"); + } + if ((flags & ACC_PRIVATE) != 0) { + sb.append("|private"); + } + if ((flags & ACC_PROTECTED) != 0) { + sb.append("|protected"); + } + if ((flags & ACC_STATIC) != 0) { + sb.append("|static"); + } + if ((flags & ACC_FINAL) != 0) { + sb.append("|final"); + } + if ((flags & ACC_SYNCHRONIZED) != 0) { + if (what == CONV_CLASS) { + sb.append("|super"); + } else { + sb.append("|synchronized"); + } + } + if ((flags & ACC_VOLATILE) != 0) { + if (what == CONV_METHOD) { + sb.append("|bridge"); + } else { + sb.append("|volatile"); + } + } + if ((flags & ACC_TRANSIENT) != 0) { + if (what == CONV_METHOD) { + sb.append("|varargs"); + } else { + sb.append("|transient"); + } + } + if ((flags & ACC_NATIVE) != 0) { + sb.append("|native"); + } + if ((flags & ACC_INTERFACE) != 0) { + sb.append("|interface"); + } + if ((flags & ACC_ABSTRACT) != 0) { + sb.append("|abstract"); + } + if ((flags & ACC_STRICT) != 0) { + sb.append("|strictfp"); + } + if ((flags & ACC_SYNTHETIC) != 0) { + sb.append("|synthetic"); + } + if ((flags & ACC_ANNOTATION) != 0) { + sb.append("|annotation"); + } + if ((flags & ACC_ENUM) != 0) { + sb.append("|enum"); + } + if ((flags & ACC_CONSTRUCTOR) != 0) { + sb.append("|constructor"); + } + if ((flags & ACC_DECLARED_SYNCHRONIZED) != 0) { + sb.append("|declared_synchronized"); + } + + if ((extra != 0) || (sb.length() == 0)) { + sb.append('|'); + sb.append(Hex.u2(extra)); + } + + return sb.substring(1); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/BasicBlock.java b/dexgen/src/com/android/dexgen/rop/code/BasicBlock.java new file mode 100644 index 0000000..0f7a59e --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/BasicBlock.java @@ -0,0 +1,281 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.IntList; +import com.android.dexgen.util.LabeledItem; + +/** + * Basic block of register-based instructions. + */ +public final class BasicBlock implements LabeledItem { + /** {@code >= 0;} target label for this block */ + private final int label; + + /** {@code non-null;} list of instructions in this block */ + private final InsnList insns; + + /** + * {@code non-null;} full list of successors that this block may + * branch to + */ + private final IntList successors; + + /** + * {@code >= -1;} the primary / standard-flow / "default" successor, or + * {@code -1} if this block has no successors (that is, it + * exits the function/method) + */ + private final int primarySuccessor; + + /** + * Constructs an instance. The predecessor set is set to {@code null}. + * + * @param label {@code >= 0;} target label for this block + * @param insns {@code non-null;} list of instructions in this block + * @param successors {@code non-null;} full list of successors that this + * block may branch to + * @param primarySuccessor {@code >= -1;} the primary / standard-flow / + * "default" successor, or {@code -1} if this block has no + * successors (that is, it exits the function/method or is an + * unconditional throw) + */ + public BasicBlock(int label, InsnList insns, IntList successors, + int primarySuccessor) { + if (label < 0) { + throw new IllegalArgumentException("label < 0"); + } + + try { + insns.throwIfMutable(); + } catch (NullPointerException ex) { + // Elucidate exception. + throw new NullPointerException("insns == null"); + } + + int sz = insns.size(); + + if (sz == 0) { + throw new IllegalArgumentException("insns.size() == 0"); + } + + for (int i = sz - 2; i >= 0; i--) { + Rop one = insns.get(i).getOpcode(); + if (one.getBranchingness() != Rop.BRANCH_NONE) { + throw new IllegalArgumentException("insns[" + i + "] is a " + + "branch or can throw"); + } + } + + Insn lastInsn = insns.get(sz - 1); + if (lastInsn.getOpcode().getBranchingness() == Rop.BRANCH_NONE) { + throw new IllegalArgumentException("insns does not end with " + + "a branch or throwing " + + "instruction"); + } + + try { + successors.throwIfMutable(); + } catch (NullPointerException ex) { + // Elucidate exception. + throw new NullPointerException("successors == null"); + } + + if (primarySuccessor < -1) { + throw new IllegalArgumentException("primarySuccessor < -1"); + } + + if (primarySuccessor >= 0 && !successors.contains(primarySuccessor)) { + throw new IllegalArgumentException( + "primarySuccessor not in successors"); + } + + this.label = label; + this.insns = insns; + this.successors = successors; + this.primarySuccessor = primarySuccessor; + } + + /** + * {@inheritDoc} + * + * Instances of this class compare by identity. That is, + * {@code x.equals(y)} is only true if {@code x == y}. + */ + @Override + public boolean equals(Object other) { + return (this == other); + } + + /** + * {@inheritDoc} + * + * Return the identity hashcode of this instance. This is proper, + * since instances of this class compare by identity (see {@link #equals}). + */ + @Override + public int hashCode() { + return System.identityHashCode(this); + } + + /** + * Gets the target label of this block. + * + * @return {@code >= 0;} the label + */ + public int getLabel() { + return label; + } + + /** + * Gets the list of instructions inside this block. + * + * @return {@code non-null;} the instruction list + */ + public InsnList getInsns() { + return insns; + } + + /** + * Gets the list of successors that this block may branch to. + * + * @return {@code non-null;} the successors list + */ + public IntList getSuccessors() { + return successors; + } + + /** + * Gets the primary successor of this block. + * + * @return {@code >= -1;} the primary successor, or {@code -1} if this + * block has no successors at all + */ + public int getPrimarySuccessor() { + return primarySuccessor; + } + + /** + * Gets the secondary successor of this block. It is only valid to call + * this method on blocks that have exactly two successors. + * + * @return {@code >= 0;} the secondary successor + */ + public int getSecondarySuccessor() { + if (successors.size() != 2) { + throw new UnsupportedOperationException( + "block doesn't have exactly two successors"); + } + + int succ = successors.get(0); + if (succ == primarySuccessor) { + succ = successors.get(1); + } + + return succ; + } + + /** + * Gets the first instruction of this block. This is just a + * convenient shorthand for {@code getInsns().get(0)}. + * + * @return {@code non-null;} the first instruction + */ + public Insn getFirstInsn() { + return insns.get(0); + } + + /** + * Gets the last instruction of this block. This is just a + * convenient shorthand for {@code getInsns().getLast()}. + * + * @return {@code non-null;} the last instruction + */ + public Insn getLastInsn() { + return insns.getLast(); + } + + /** + * Returns whether this block might throw an exception. This is + * just a convenient shorthand for {@code getLastInsn().canThrow()}. + * + * @return {@code true} iff this block might throw an + * exception + */ + public boolean canThrow() { + return insns.getLast().canThrow(); + } + + /** + * Returns whether this block has any associated exception handlers. + * This is just a shorthand for inspecting the last instruction in + * the block to see if it could throw, and if so, whether it in fact + * has any associated handlers. + * + * @return {@code true} iff this block has any associated + * exception handlers + */ + public boolean hasExceptionHandlers() { + Insn lastInsn = insns.getLast(); + return lastInsn.getCatches().size() != 0; + } + + /** + * Returns the exception handler types associated with this block, + * if any. This is just a shorthand for inspecting the last + * instruction in the block to see if it could throw, and if so, + * grabbing the catch list out of it. If not, this returns an + * empty list (not {@code null}). + * + * @return {@code non-null;} the exception handler types associated with + * this block + */ + public TypeList getExceptionHandlerTypes() { + Insn lastInsn = insns.getLast(); + return lastInsn.getCatches(); + } + + /** + * Returns an instance that is identical to this one, except that + * the registers in each instruction are offset by the given + * amount. + * + * @param delta the amount to offset register numbers by + * @return {@code non-null;} an appropriately-constructed instance + */ + public BasicBlock withRegisterOffset(int delta) { + return new BasicBlock(label, insns.withRegisterOffset(delta), + successors, primarySuccessor); + } + + public String toString() { + return '{' + Hex.u2(label) + '}'; + } + + /** + * BasicBlock visitor interface + */ + public interface Visitor { + /** + * Visits a basic block + * @param b block visited + */ + public void visitBlock (BasicBlock b); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/BasicBlockList.java b/dexgen/src/com/android/dexgen/rop/code/BasicBlockList.java new file mode 100644 index 0000000..f01c588 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/BasicBlockList.java @@ -0,0 +1,398 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.IntList; +import com.android.dexgen.util.LabeledList; + +/** + * List of {@link BasicBlock} instances. + */ +public final class BasicBlockList extends LabeledList { + /** + * {@code >= -1;} the count of registers required by this method or + * {@code -1} if not yet calculated + */ + private int regCount; + + /** + * Constructs an instance. All indices initially contain {@code null}, + * and the first-block label is initially {@code -1}. + * + * @param size the size of the list + */ + public BasicBlockList(int size) { + super(size); + + regCount = -1; + } + + /** + * Constructs a mutable copy for {@code getMutableCopy()}. + * + * @param old block to copy + */ + private BasicBlockList (BasicBlockList old) { + super(old); + regCount = old.regCount; + } + + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public BasicBlock get(int n) { + return (BasicBlock) get0(n); + } + + /** + * Sets the basic block at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param bb {@code null-ok;} the element to set at {@code n} + */ + public void set(int n, BasicBlock bb) { + super.set(n, bb); + + // Reset regCount, since it will need to be recalculated. + regCount = -1; + } + + /** + * Returns how many registers this method requires. This is simply + * the maximum of register-number-plus-category referred to by this + * instance's instructions (indirectly through {@link BasicBlock} + * instances). + * + * @return {@code >= 0;} the register count + */ + public int getRegCount() { + if (regCount == -1) { + RegCountVisitor visitor = new RegCountVisitor(); + forEachInsn(visitor); + regCount = visitor.getRegCount(); + } + + return regCount; + } + + /** + * Gets the total instruction count for this instance. This is the + * sum of the instruction counts of each block. + * + * @return {@code >= 0;} the total instruction count + */ + public int getInstructionCount() { + int sz = size(); + int result = 0; + + for (int i = 0; i < sz; i++) { + BasicBlock one = (BasicBlock) getOrNull0(i); + if (one != null) { + result += one.getInsns().size(); + } + } + + return result; + } + + /** + * Gets the total instruction count for this instance, ignoring + * mark-local instructions which are not actually emitted. + * + * @return {@code >= 0;} the total instruction count + */ + public int getEffectiveInstructionCount() { + int sz = size(); + int result = 0; + + for (int i = 0; i < sz; i++) { + BasicBlock one = (BasicBlock) getOrNull0(i); + if (one != null) { + InsnList insns = one.getInsns(); + int insnsSz = insns.size(); + + for (int j = 0; j < insnsSz; j++) { + Insn insn = insns.get(j); + + if (insn.getOpcode().getOpcode() != RegOps.MARK_LOCAL) { + result++; + } + } + } + } + + return result; + } + + + /** + * Gets the first block in the list with the given label, if any. + * + * @param label {@code >= 0;} the label to look for + * @return {@code non-null;} the so-labelled block + * @throws IllegalArgumentException thrown if the label isn't found + */ + public BasicBlock labelToBlock(int label) { + int idx = indexOfLabel(label); + + if (idx < 0) { + throw new IllegalArgumentException("no such label: " + + Hex.u2(label)); + } + + return get(idx); + } + + /** + * Visits each instruction of each block in the list, in order. + * + * @param visitor {@code non-null;} visitor to use + */ + public void forEachInsn(Insn.Visitor visitor) { + int sz = size(); + + for (int i = 0; i < sz; i++) { + BasicBlock one = get(i); + InsnList insns = one.getInsns(); + insns.forEach(visitor); + } + } + + /** + * Returns an instance that is identical to this one, except that + * the registers in each instruction are offset by the given + * amount. Mutability of the result is inherited from the + * original. + * + * @param delta the amount to offset register numbers by + * @return {@code non-null;} an appropriately-constructed instance + */ + public BasicBlockList withRegisterOffset(int delta) { + int sz = size(); + BasicBlockList result = new BasicBlockList(sz); + + for (int i = 0; i < sz; i++) { + BasicBlock one = (BasicBlock) get0(i); + if (one != null) { + result.set(i, one.withRegisterOffset(delta)); + } + } + + if (isImmutable()) { + result.setImmutable(); + } + + return result; + } + + /** + * Returns a mutable copy of this list. + * + * @return {@code non-null;} an appropriately-constructed instance + */ + public BasicBlockList getMutableCopy() { + return new BasicBlockList(this); + } + + /** + * Gets the preferred successor for the given block. If the block + * only has one successor, then that is the preferred successor. + * Otherwise, if the block has a primay successor, then that is + * the preferred successor. If the block has no successors, then + * this returns {@code null}. + * + * @param block {@code non-null;} the block in question + * @return {@code null-ok;} the preferred successor, if any + */ + public BasicBlock preferredSuccessorOf(BasicBlock block) { + int primarySuccessor = block.getPrimarySuccessor(); + IntList successors = block.getSuccessors(); + int succSize = successors.size(); + + switch (succSize) { + case 0: { + return null; + } + case 1: { + return labelToBlock(successors.get(0)); + } + } + + if (primarySuccessor != -1) { + return labelToBlock(primarySuccessor); + } else { + return labelToBlock(successors.get(0)); + } + } + + /** + * Compares the catches of two blocks for equality. This includes + * both the catch types and target labels. + * + * @param block1 {@code non-null;} one block to compare + * @param block2 {@code non-null;} the other block to compare + * @return {@code true} if the two blocks' non-primary successors + * are identical + */ + public boolean catchesEqual(BasicBlock block1, + BasicBlock block2) { + TypeList catches1 = block1.getExceptionHandlerTypes(); + TypeList catches2 = block2.getExceptionHandlerTypes(); + + if (!StdTypeList.equalContents(catches1, catches2)) { + return false; + } + + IntList succ1 = block1.getSuccessors(); + IntList succ2 = block2.getSuccessors(); + int size = succ1.size(); // Both are guaranteed to be the same size. + + int primary1 = block1.getPrimarySuccessor(); + int primary2 = block2.getPrimarySuccessor(); + + if (((primary1 == -1) || (primary2 == -1)) + && (primary1 != primary2)) { + /* + * For the current purpose, both blocks in question must + * either both have a primary or both not have a primary to + * be considered equal, and it turns out here that that's not + * the case. + */ + return false; + } + + for (int i = 0; i < size; i++) { + int label1 = succ1.get(i); + int label2 = succ2.get(i); + + if (label1 == primary1) { + /* + * It should be the case that block2's primary is at the + * same index. If not, we consider the blocks unequal for + * the current purpose. + */ + if (label2 != primary2) { + return false; + } + continue; + } + + if (label1 != label2) { + return false; + } + } + + return true; + } + + /** + * Instruction visitor class for counting registers used. + */ + private static class RegCountVisitor + implements Insn.Visitor { + /** {@code >= 0;} register count in-progress */ + private int regCount; + + /** + * Constructs an instance. + */ + public RegCountVisitor() { + regCount = 0; + } + + /** + * Gets the register count. + * + * @return {@code >= 0;} the count + */ + public int getRegCount() { + return regCount; + } + + /** {@inheritDoc} */ + public void visitPlainInsn(PlainInsn insn) { + visit(insn); + } + + /** {@inheritDoc} */ + public void visitPlainCstInsn(PlainCstInsn insn) { + visit(insn); + } + + /** {@inheritDoc} */ + public void visitSwitchInsn(SwitchInsn insn) { + visit(insn); + } + + /** {@inheritDoc} */ + public void visitThrowingCstInsn(ThrowingCstInsn insn) { + visit(insn); + } + + /** {@inheritDoc} */ + public void visitThrowingInsn(ThrowingInsn insn) { + visit(insn); + } + + /** {@inheritDoc} */ + public void visitFillArrayDataInsn(FillArrayDataInsn insn) { + visit(insn); + } + + /** + * Helper for all the {@code visit*} methods. + * + * @param insn {@code non-null;} instruction being visited + */ + private void visit(Insn insn) { + RegisterSpec result = insn.getResult(); + + if (result != null) { + processReg(result); + } + + RegisterSpecList sources = insn.getSources(); + int sz = sources.size(); + + for (int i = 0; i < sz; i++) { + processReg(sources.get(i)); + } + } + + /** + * Processes the given register spec. + * + * @param spec {@code non-null;} the register spec + */ + private void processReg(RegisterSpec spec) { + int reg = spec.getNextReg(); + + if (reg > regCount) { + regCount = reg; + } + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/ConservativeTranslationAdvice.java b/dexgen/src/com/android/dexgen/rop/code/ConservativeTranslationAdvice.java new file mode 100644 index 0000000..080432b --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/ConservativeTranslationAdvice.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +/** + * Implementation of {@link TranslationAdvice} which conservatively answers + * {@code false} to all methods. + */ +public final class ConservativeTranslationAdvice + implements TranslationAdvice { + /** {@code non-null;} standard instance of this class */ + public static final ConservativeTranslationAdvice THE_ONE = + new ConservativeTranslationAdvice(); + + /** + * This class is not publicly instantiable. Use {@link #THE_ONE}. + */ + private ConservativeTranslationAdvice() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + public boolean hasConstantOperation(Rop opcode, + RegisterSpec sourceA, RegisterSpec sourceB) { + return false; + } + + /** {@inheritDoc} */ + public boolean requiresSourcesInOrder(Rop opcode, + RegisterSpecList sources) { + return false; + } + + /** {@inheritDoc} */ + public int getMaxOptimalRegisterCount() { + return Integer.MAX_VALUE; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/CstInsn.java b/dexgen/src/com/android/dexgen/rop/code/CstInsn.java new file mode 100644 index 0000000..dc5ed39 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/CstInsn.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.Constant; + +/** + * Instruction which contains an explicit reference to a constant. + */ +public abstract class CstInsn + extends Insn { + /** {@code non-null;} the constant */ + private final Constant cst; + + /** + * Constructs an instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param result {@code null-ok;} spec for the result, if any + * @param sources {@code non-null;} specs for all the sources + * @param cst {@code non-null;} constant + */ + public CstInsn(Rop opcode, SourcePosition position, RegisterSpec result, + RegisterSpecList sources, Constant cst) { + super(opcode, position, result, sources); + + if (cst == null) { + throw new NullPointerException("cst == null"); + } + + this.cst = cst; + } + + /** {@inheritDoc} */ + @Override + public String getInlineString() { + return cst.toHuman(); + } + + /** + * Gets the constant. + * + * @return {@code non-null;} the constant + */ + public Constant getConstant() { + return cst; + } + + /** {@inheritDoc} */ + @Override + public boolean contentEquals(Insn b) { + /* + * The cast (CstInsn)b below should always succeed since + * Insn.contentEquals compares classes of this and b. + */ + return super.contentEquals(b) + && cst.equals(((CstInsn)b).getConstant()); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/DexTranslationAdvice.java b/dexgen/src/com/android/dexgen/rop/code/DexTranslationAdvice.java new file mode 100644 index 0000000..b46182d --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/DexTranslationAdvice.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.CstInteger; +import com.android.dexgen.rop.type.Type; + +/** + * Implementation of {@link TranslationAdvice} which represents what + * the dex format will be able to represent. + */ +public final class DexTranslationAdvice + implements TranslationAdvice { + /** {@code non-null;} standard instance of this class */ + public static final DexTranslationAdvice THE_ONE = + new DexTranslationAdvice(); + + /** debug advice for disabling invoke-range optimization */ + public static final DexTranslationAdvice NO_SOURCES_IN_ORDER = + new DexTranslationAdvice(true); + + /** + * The minimum source width, in register units, for an invoke + * instruction that requires its sources to be in order and contiguous. + */ + private static final int MIN_INVOKE_IN_ORDER = 6; + + /** when true: always returns false for requiresSourcesInOrder */ + private final boolean disableSourcesInOrder; + + /** + * This class is not publicly instantiable. Use {@link #THE_ONE}. + */ + private DexTranslationAdvice() { + disableSourcesInOrder = false; + } + + private DexTranslationAdvice(boolean disableInvokeRange) { + this.disableSourcesInOrder = disableInvokeRange; + } + + /** {@inheritDoc} */ + public boolean hasConstantOperation(Rop opcode, + RegisterSpec sourceA, RegisterSpec sourceB) { + if (sourceA.getType() != Type.INT) { + return false; + } + + if (! (sourceB.getTypeBearer() instanceof CstInteger)) { + return false; + } + + CstInteger cst = (CstInteger) sourceB.getTypeBearer(); + + // TODO handle rsub + switch (opcode.getOpcode()) { + // These have 8 and 16 bit cst representations + case RegOps.REM: + case RegOps.ADD: + case RegOps.MUL: + case RegOps.DIV: + case RegOps.AND: + case RegOps.OR: + case RegOps.XOR: + return cst.fitsIn16Bits(); + // These only have 8 bit cst reps + case RegOps.SHL: + case RegOps.SHR: + case RegOps.USHR: + return cst.fitsIn8Bits(); + default: + return false; + } + } + + /** {@inheritDoc} */ + public boolean requiresSourcesInOrder(Rop opcode, + RegisterSpecList sources) { + + return !disableSourcesInOrder && opcode.isCallLike() + && totalRopWidth(sources) >= MIN_INVOKE_IN_ORDER; + } + + /** + * Calculates the total rop width of the list of SSA registers + * + * @param sources {@code non-null;} list of SSA registers + * @return {@code >= 0;} rop-form width in register units + */ + private int totalRopWidth(RegisterSpecList sources) { + int sz = sources.size(); + int total = 0; + + for (int i = 0; i < sz; i++) { + total += sources.get(i).getCategory(); + } + + return total; + } + + /** {@inheritDoc} */ + public int getMaxOptimalRegisterCount() { + return 16; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/Exceptions.java b/dexgen/src/com/android/dexgen/rop/code/Exceptions.java new file mode 100644 index 0000000..d6584d0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/Exceptions.java @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; + +/** + * Common exception types. + */ +public final class Exceptions { + /** {@code non-null;} the type {@code java.lang.ArithmeticException} */ + public static final Type TYPE_ArithmeticException = + Type.intern("Ljava/lang/ArithmeticException;"); + + /** + * {@code non-null;} the type + * {@code java.lang.ArrayIndexOutOfBoundsException} + */ + public static final Type TYPE_ArrayIndexOutOfBoundsException = + Type.intern("Ljava/lang/ArrayIndexOutOfBoundsException;"); + + /** {@code non-null;} the type {@code java.lang.ArrayStoreException} */ + public static final Type TYPE_ArrayStoreException = + Type.intern("Ljava/lang/ArrayStoreException;"); + + /** {@code non-null;} the type {@code java.lang.ClassCastException} */ + public static final Type TYPE_ClassCastException = + Type.intern("Ljava/lang/ClassCastException;"); + + /** {@code non-null;} the type {@code java.lang.Error} */ + public static final Type TYPE_Error = Type.intern("Ljava/lang/Error;"); + + /** + * {@code non-null;} the type + * {@code java.lang.IllegalMonitorStateException} + */ + public static final Type TYPE_IllegalMonitorStateException = + Type.intern("Ljava/lang/IllegalMonitorStateException;"); + + /** {@code non-null;} the type {@code java.lang.NegativeArraySizeException} */ + public static final Type TYPE_NegativeArraySizeException = + Type.intern("Ljava/lang/NegativeArraySizeException;"); + + /** {@code non-null;} the type {@code java.lang.NullPointerException} */ + public static final Type TYPE_NullPointerException = + Type.intern("Ljava/lang/NullPointerException;"); + + /** {@code non-null;} the list {@code [java.lang.Error]} */ + public static final StdTypeList LIST_Error = StdTypeList.make(TYPE_Error); + + /** + * {@code non-null;} the list {@code[java.lang.Error, + * java.lang.ArithmeticException]} + */ + public static final StdTypeList LIST_Error_ArithmeticException = + StdTypeList.make(TYPE_Error, TYPE_ArithmeticException); + + /** + * {@code non-null;} the list {@code[java.lang.Error, + * java.lang.ClassCastException]} + */ + public static final StdTypeList LIST_Error_ClassCastException = + StdTypeList.make(TYPE_Error, TYPE_ClassCastException); + + /** + * {@code non-null;} the list {@code [java.lang.Error, + * java.lang.NegativeArraySizeException]} + */ + public static final StdTypeList LIST_Error_NegativeArraySizeException = + StdTypeList.make(TYPE_Error, TYPE_NegativeArraySizeException); + + /** + * {@code non-null;} the list {@code [java.lang.Error, + * java.lang.NullPointerException]} + */ + public static final StdTypeList LIST_Error_NullPointerException = + StdTypeList.make(TYPE_Error, TYPE_NullPointerException); + + /** + * {@code non-null;} the list {@code [java.lang.Error, + * java.lang.NullPointerException, + * java.lang.ArrayIndexOutOfBoundsException]} + */ + public static final StdTypeList LIST_Error_Null_ArrayIndexOutOfBounds = + StdTypeList.make(TYPE_Error, + TYPE_NullPointerException, + TYPE_ArrayIndexOutOfBoundsException); + + /** + * {@code non-null;} the list {@code [java.lang.Error, + * java.lang.NullPointerException, + * java.lang.ArrayIndexOutOfBoundsException, + * java.lang.ArrayStoreException]} + */ + public static final StdTypeList LIST_Error_Null_ArrayIndex_ArrayStore = + StdTypeList.make(TYPE_Error, + TYPE_NullPointerException, + TYPE_ArrayIndexOutOfBoundsException, + TYPE_ArrayStoreException); + + /** + * {@code non-null;} the list {@code [java.lang.Error, + * java.lang.NullPointerException, + * java.lang.IllegalMonitorStateException]} + */ + public static final StdTypeList + LIST_Error_Null_IllegalMonitorStateException = + StdTypeList.make(TYPE_Error, + TYPE_NullPointerException, + TYPE_IllegalMonitorStateException); + + /** + * This class is uninstantiable. + */ + private Exceptions() { + // This space intentionally left blank. + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/FillArrayDataInsn.java b/dexgen/src/com/android/dexgen/rop/code/FillArrayDataInsn.java new file mode 100644 index 0000000..3289b58 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/FillArrayDataInsn.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; + +import java.util.ArrayList; + +/** + * Instruction which fills a newly created array with a predefined list of + * constant values. + */ +public final class FillArrayDataInsn + extends Insn { + + /** non-null: initial values to fill the newly created array */ + private final ArrayList initValues; + + /** + * non-null: type of the array. Will be used to determine the width of + * elements in the array-data table. + */ + private final Constant arrayType; + + /** + * Constructs an instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param sources {@code non-null;} specs for all the sources + * @param initValues {@code non-null;} list of initial values to fill the array + * @param cst {@code non-null;} type of the new array + */ + public FillArrayDataInsn(Rop opcode, SourcePosition position, + RegisterSpecList sources, + ArrayList initValues, + Constant cst) { + super(opcode, position, null, sources); + + if (opcode.getBranchingness() != Rop.BRANCH_NONE) { + throw new IllegalArgumentException("bogus branchingness"); + } + + this.initValues = initValues; + this.arrayType = cst; + } + + + /** {@inheritDoc} */ + @Override + public TypeList getCatches() { + return StdTypeList.EMPTY; + } + + /** + * Return the list of init values + * @return {@code non-null;} list of init values + */ + public ArrayList getInitValues() { + return initValues; + } + + /** + * Return the type of the newly created array + * @return {@code non-null;} array type + */ + public Constant getConstant() { + return arrayType; + } + + /** {@inheritDoc} */ + @Override + public void accept(Visitor visitor) { + visitor.visitFillArrayDataInsn(this); + } + + /** {@inheritDoc} */ + @Override + public Insn withAddedCatch(Type type) { + throw new UnsupportedOperationException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public Insn withRegisterOffset(int delta) { + return new FillArrayDataInsn(getOpcode(), getPosition(), + getSources().withOffset(delta), + initValues, arrayType); + } + + /** {@inheritDoc} */ + @Override + public Insn withNewRegisters(RegisterSpec result, + RegisterSpecList sources) { + + return new FillArrayDataInsn(getOpcode(), getPosition(), + sources, initValues, arrayType); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/Insn.java b/dexgen/src/com/android/dexgen/rop/code/Insn.java new file mode 100644 index 0000000..4bb10d2 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/Insn.java @@ -0,0 +1,458 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.ToHuman; + +/** + * A register-based instruction. An instruction is the combination of + * an opcode (which specifies operation and source/result types), a + * list of actual sources and result registers/values, and additional + * information. + */ +public abstract class Insn implements ToHuman { + /** {@code non-null;} opcode */ + private final Rop opcode; + + /** {@code non-null;} source position */ + private final SourcePosition position; + + /** {@code null-ok;} spec for the result of this instruction, if any */ + private final RegisterSpec result; + + /** {@code non-null;} specs for all the sources of this instruction */ + private final RegisterSpecList sources; + + /** + * Constructs an instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param result {@code null-ok;} spec for the result, if any + * @param sources {@code non-null;} specs for all the sources + */ + public Insn(Rop opcode, SourcePosition position, RegisterSpec result, + RegisterSpecList sources) { + if (opcode == null) { + throw new NullPointerException("opcode == null"); + } + + if (position == null) { + throw new NullPointerException("position == null"); + } + + if (sources == null) { + throw new NullPointerException("sources == null"); + } + + this.opcode = opcode; + this.position = position; + this.result = result; + this.sources = sources; + } + + /** + * {@inheritDoc} + * + * Instances of this class compare by identity. That is, + * {@code x.equals(y)} is only true if {@code x == y}. + */ + @Override + public final boolean equals(Object other) { + return (this == other); + } + + /** + * {@inheritDoc} + * + * This implementation returns the identity hashcode of this + * instance. This is proper, since instances of this class compare + * by identity (see {@link #equals}). + */ + @Override + public final int hashCode() { + return System.identityHashCode(this); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return toStringWithInline(getInlineString()); + } + + /** + * Gets a human-oriented (and slightly lossy) string for this instance. + * + * @return {@code non-null;} the human string form + */ + public String toHuman() { + return toHumanWithInline(getInlineString()); + } + + /** + * Gets an "inline" string portion for toHuman(), if available. This + * is the portion that appears after the Rop opcode + * + * @return {@code null-ok;} if non-null, the inline text for toHuman() + */ + public String getInlineString() { + return null; + } + + /** + * Gets the opcode. + * + * @return {@code non-null;} the opcode + */ + public final Rop getOpcode() { + return opcode; + } + + /** + * Gets the source position. + * + * @return {@code non-null;} the source position + */ + public final SourcePosition getPosition() { + return position; + } + + /** + * Gets the result spec, if any. A return value of {@code null} + * means this instruction returns nothing. + * + * @return {@code null-ok;} the result spec, if any + */ + public final RegisterSpec getResult() { + return result; + } + + /** + * Gets the spec of a local variable assignment that occurs at this + * instruction, or null if no local variable assignment occurs. This + * may be the result register, or for {@code mark-local} insns + * it may be the source. + * + * @return {@code null-ok;} a named register spec or null + */ + public final RegisterSpec getLocalAssignment() { + RegisterSpec assignment; + if (opcode.getOpcode() == RegOps.MARK_LOCAL) { + assignment = sources.get(0); + } else { + assignment = result; + } + + if (assignment == null) { + return null; + } + + LocalItem localItem = assignment.getLocalItem(); + + if (localItem == null) { + return null; + } + + return assignment; + } + + /** + * Gets the source specs. + * + * @return {@code non-null;} the source specs + */ + public final RegisterSpecList getSources() { + return sources; + } + + /** + * Gets whether this instruction can possibly throw an exception. This + * is just a convenient wrapper for {@code getOpcode().canThrow()}. + * + * @return {@code true} iff this instruction can possibly throw + */ + public final boolean canThrow() { + return opcode.canThrow(); + } + + /** + * Gets the list of possibly-caught exceptions. This returns {@link + * StdTypeList#EMPTY} if this instruction has no handlers, + * which can be either if this instruction can't possibly + * throw or if it merely doesn't handle any of its possible + * exceptions. To determine whether this instruction can throw, + * use {@link #canThrow}. + * + * @return {@code non-null;} the catches list + */ + public abstract TypeList getCatches(); + + /** + * Calls the appropriate method on the given visitor, depending on the + * class of this instance. Subclasses must override this. + * + * @param visitor {@code non-null;} the visitor to call on + */ + public abstract void accept(Visitor visitor); + + /** + * Returns an instance that is just like this one, except that it + * has a catch list with the given item appended to the end. This + * method throws an exception if this instance can't possibly + * throw. To determine whether this instruction can throw, use + * {@link #canThrow}. + * + * @param type {@code non-null;} type to append to the catch list + * @return {@code non-null;} an appropriately-constructed instance + */ + public abstract Insn withAddedCatch(Type type); + + /** + * Returns an instance that is just like this one, except that all + * register references have been offset by the given delta. + * + * @param delta the amount to offset register references by + * @return {@code non-null;} an appropriately-constructed instance + */ + public abstract Insn withRegisterOffset(int delta); + + /** + * Returns an instance that is just like this one, except that, if + * possible, the insn is converted into a version in which the last + * source (if it is a constant) is represented directly rather than + * as a register reference. {@code this} is returned in cases where + * the translation is not possible. + * + * @return {@code non-null;} an appropriately-constructed instance + */ + public Insn withLastSourceLiteral() { + return this; + } + + /** + * Returns an exact copy of this Insn + * + * @return {@code non-null;} an appropriately-constructed instance + */ + public Insn copy() { + return withRegisterOffset(0); + } + + + /** + * Compares, handling nulls safely + * + * @param a first object + * @param b second object + * @return true if they're equal or both null. + */ + private static boolean equalsHandleNulls (Object a, Object b) { + return (a == b) || ((a != null) && a.equals(b)); + } + + /** + * Compares Insn contents, since {@code Insn.equals()} is defined + * to be an identity compare. Insn's are {@code contentEquals()} + * if they have the same opcode, registers, source position, and other + * metadata. + * + * @return true in the case described above + */ + public boolean contentEquals(Insn b) { + return opcode == b.getOpcode() + && position.equals(b.getPosition()) + && (getClass() == b.getClass()) + && equalsHandleNulls(result, b.getResult()) + && equalsHandleNulls(sources, b.getSources()) + && StdTypeList.equalContents(getCatches(), b.getCatches()); + } + + /** + * Returns an instance that is just like this one, except + * with new result and source registers. + * + * @param result {@code null-ok;} new result register + * @param sources {@code non-null;} new sources registers + * @return {@code non-null;} an appropriately-constructed instance + */ + public abstract Insn withNewRegisters(RegisterSpec result, + RegisterSpecList sources); + + /** + * Returns the string form of this instance, with the given bit added in + * the standard location for an inline argument. + * + * @param extra {@code null-ok;} the inline argument string + * @return {@code non-null;} the string form + */ + protected final String toStringWithInline(String extra) { + StringBuffer sb = new StringBuffer(80); + + sb.append("Insn{"); + sb.append(position); + sb.append(' '); + sb.append(opcode); + + if (extra != null) { + sb.append(' '); + sb.append(extra); + } + + sb.append(" :: "); + + if (result != null) { + sb.append(result); + sb.append(" <- "); + } + + sb.append(sources); + sb.append('}'); + + return sb.toString(); + } + + /** + * Returns the human string form of this instance, with the given + * bit added in the standard location for an inline argument. + * + * @param extra {@code null-ok;} the inline argument string + * @return {@code non-null;} the human string form + */ + protected final String toHumanWithInline(String extra) { + StringBuffer sb = new StringBuffer(80); + + sb.append(position); + sb.append(": "); + sb.append(opcode.getNickname()); + + if (extra != null) { + sb.append("("); + sb.append(extra); + sb.append(")"); + } + + if (result == null) { + sb.append(" ."); + } else { + sb.append(" "); + sb.append(result.toHuman()); + } + + sb.append(" <-"); + + int sz = sources.size(); + if (sz == 0) { + sb.append(" ."); + } else { + for (int i = 0; i < sz; i++) { + sb.append(" "); + sb.append(sources.get(i).toHuman()); + } + } + + return sb.toString(); + } + + + /** + * Visitor interface for this (outer) class. + */ + public static interface Visitor { + /** + * Visits a {@link PlainInsn}. + * + * @param insn {@code non-null;} the instruction to visit + */ + public void visitPlainInsn(PlainInsn insn); + + /** + * Visits a {@link PlainCstInsn}. + * + * @param insn {@code non-null;} the instruction to visit + */ + public void visitPlainCstInsn(PlainCstInsn insn); + + /** + * Visits a {@link SwitchInsn}. + * + * @param insn {@code non-null;} the instruction to visit + */ + public void visitSwitchInsn(SwitchInsn insn); + + /** + * Visits a {@link ThrowingCstInsn}. + * + * @param insn {@code non-null;} the instruction to visit + */ + public void visitThrowingCstInsn(ThrowingCstInsn insn); + + /** + * Visits a {@link ThrowingInsn}. + * + * @param insn {@code non-null;} the instruction to visit + */ + public void visitThrowingInsn(ThrowingInsn insn); + + /** + * Visits a {@link FillArrayDataInsn}. + * + * @param insn {@code non-null;} the instruction to visit + */ + public void visitFillArrayDataInsn(FillArrayDataInsn insn); + } + + /** + * Base implementation of {@link Visitor}, which has empty method + * bodies for all methods. + */ + public static class BaseVisitor implements Visitor { + /** {@inheritDoc} */ + public void visitPlainInsn(PlainInsn insn) { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + public void visitPlainCstInsn(PlainCstInsn insn) { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + public void visitSwitchInsn(SwitchInsn insn) { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + public void visitThrowingCstInsn(ThrowingCstInsn insn) { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + public void visitThrowingInsn(ThrowingInsn insn) { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + public void visitFillArrayDataInsn(FillArrayDataInsn insn) { + // This space intentionally left blank. + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/InsnList.java b/dexgen/src/com/android/dexgen/rop/code/InsnList.java new file mode 100644 index 0000000..0046972 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/InsnList.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.util.FixedSizeList; + +/** + * List of {@link Insn} instances. + */ +public final class InsnList + extends FixedSizeList { + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the list + */ + public InsnList(int size) { + super(size); + } + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public Insn get(int n) { + return (Insn) get0(n); + } + + /** + * Sets the instruction at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param insn {@code non-null;} the instruction to set at {@code n} + */ + public void set(int n, Insn insn) { + set0(n, insn); + } + + /** + * Gets the last instruction. This is just a convenient shorthand for + * {@code get(size() - 1)}. + * + * @return {@code non-null;} the last instruction + */ + public Insn getLast() { + return get(size() - 1); + } + + /** + * Visits each instruction in the list, in order. + * + * @param visitor {@code non-null;} visitor to use + */ + public void forEach(Insn.Visitor visitor) { + int sz = size(); + + for (int i = 0; i < sz; i++) { + get(i).accept(visitor); + } + } + + /** + * Compares the contents of this {@code InsnList} with another. + * The blocks must have the same number of insns, and each Insn must + * also return true to {@code Insn.contentEquals()}. + * + * @param b to compare + * @return true in the case described above. + */ + public boolean contentEquals(InsnList b) { + if (b == null) return false; + + int sz = size(); + + if (sz != b.size()) return false; + + for (int i = 0; i < sz; i++) { + if (!get(i).contentEquals(b.get(i))) { + return false; + } + } + + return true; + } + + /** + * Returns an instance that is identical to this one, except that + * the registers in each instruction are offset by the given + * amount. Mutability of the result is inherited from the + * original. + * + * @param delta the amount to offset register numbers by + * @return {@code non-null;} an appropriately-constructed instance + */ + public InsnList withRegisterOffset(int delta) { + int sz = size(); + InsnList result = new InsnList(sz); + + for (int i = 0; i < sz; i++) { + Insn one = (Insn) get0(i); + if (one != null) { + result.set0(i, one.withRegisterOffset(delta)); + } + } + + if (isImmutable()) { + result.setImmutable(); + } + + return result; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/LocalItem.java b/dexgen/src/com/android/dexgen/rop/code/LocalItem.java new file mode 100644 index 0000000..78386f1 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/LocalItem.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.CstUtf8; + +/** + * A local variable item: either a name or a signature or both. + */ +public class LocalItem implements Comparable { + /** {@code null-ok;} local variable name */ + private final CstUtf8 name; + + /** {@code null-ok;} local variable signature */ + private final CstUtf8 signature; + + /** + * Make a new item. If both name and signature are null, null is returned. + * + * TODO: intern these + * + * @param name {@code null-ok;} local variable name + * @param signature {@code null-ok;} local variable signature + * @return {@code non-null;} appropriate instance. + */ + public static LocalItem make(CstUtf8 name, CstUtf8 signature) { + if (name == null && signature == null) { + return null; + } + + return new LocalItem (name, signature); + } + + /** + * Constructs instance. + * + * @param name {@code null-ok;} local variable name + * @param signature {@code null-ok;} local variable signature + */ + private LocalItem(CstUtf8 name, CstUtf8 signature) { + this.name = name; + this.signature = signature; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof LocalItem)) { + return false; + } + + LocalItem local = (LocalItem) other; + + return 0 == compareTo(local); + } + + /** + * Compares two strings like String.compareTo(), excepts treats a null + * as the least-possible string value. + * + * @return negative integer, zero, or positive integer in accordance + * with Comparable.compareTo() + */ + private static int compareHandlesNulls(CstUtf8 a, CstUtf8 b) { + if (a == b) { + return 0; + } else if (a == null) { + return -1; + } else if (b == null) { + return 1; + } else { + return a.compareTo(b); + } + } + + /** {@inheritDoc} */ + public int compareTo(LocalItem local) { + int ret; + + ret = compareHandlesNulls(name, local.name); + + if (ret != 0) { + return ret; + } + + ret = compareHandlesNulls(signature, local.signature); + + return ret; + } + + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return (name == null ? 0 : name.hashCode()) * 31 + + (signature == null ? 0 : signature.hashCode()); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + if (name != null && signature == null) { + return name.toQuoted(); + } else if (name == null && signature == null) { + return ""; + } + + return "[" + (name == null ? "" : name.toQuoted()) + + "|" + (signature == null ? "" : signature.toQuoted()); + } + + /** + * Gets name. + * + * @return {@code null-ok;} name + */ + public CstUtf8 getName() { + return name; + } + + /** + * Gets signature. + * + * @return {@code null-ok;} signature + */ + public CstUtf8 getSignature() { + return signature; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/LocalVariableExtractor.java b/dexgen/src/com/android/dexgen/rop/code/LocalVariableExtractor.java new file mode 100644 index 0000000..14f5f15 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/LocalVariableExtractor.java @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.util.Bits; +import com.android.dexgen.util.IntList; + +/** + * Code to figure out which local variables are active at which points in + * a method. + */ +public final class LocalVariableExtractor { + /** {@code non-null;} method being extracted from */ + private final RopMethod method; + + /** {@code non-null;} block list for the method */ + private final BasicBlockList blocks; + + /** {@code non-null;} result in-progress */ + private final LocalVariableInfo resultInfo; + + /** {@code non-null;} work set indicating blocks needing to be processed */ + private final int[] workSet; + + /** + * Extracts out all the local variable information from the given method. + * + * @param method {@code non-null;} the method to extract from + * @return {@code non-null;} the extracted information + */ + public static LocalVariableInfo extract(RopMethod method) { + LocalVariableExtractor lve = new LocalVariableExtractor(method); + return lve.doit(); + } + + /** + * Constructs an instance. This method is private. Use {@link #extract}. + * + * @param method {@code non-null;} the method to extract from + */ + private LocalVariableExtractor(RopMethod method) { + if (method == null) { + throw new NullPointerException("method == null"); + } + + BasicBlockList blocks = method.getBlocks(); + int maxLabel = blocks.getMaxLabel(); + + this.method = method; + this.blocks = blocks; + this.resultInfo = new LocalVariableInfo(method); + this.workSet = Bits.makeBitSet(maxLabel); + } + + /** + * Does the extraction. + * + * @return {@code non-null;} the extracted information + */ + private LocalVariableInfo doit() { + for (int label = method.getFirstLabel(); + label >= 0; + label = Bits.findFirst(workSet, 0)) { + Bits.clear(workSet, label); + processBlock(label); + } + + resultInfo.setImmutable(); + return resultInfo; + } + + /** + * Processes a single block. + * + * @param label {@code >= 0;} label of the block to process + */ + private void processBlock(int label) { + RegisterSpecSet primaryState = resultInfo.mutableCopyOfStarts(label); + BasicBlock block = blocks.labelToBlock(label); + InsnList insns = block.getInsns(); + int insnSz = insns.size(); + + /* + * We may have to treat the last instruction specially: If it + * can (but doesn't always) throw, and the exception can be + * caught within the same method, then we need to use the + * state *before* executing it to be what is merged into + * exception targets. + */ + boolean canThrowDuringLastInsn = block.hasExceptionHandlers() && + (insns.getLast().getResult() != null); + int freezeSecondaryStateAt = insnSz - 1; + RegisterSpecSet secondaryState = primaryState; + + /* + * Iterate over the instructions, adding information for each place + * that the active variable set changes. + */ + + for (int i = 0; i < insnSz; i++) { + if (canThrowDuringLastInsn && (i == freezeSecondaryStateAt)) { + // Until this point, primaryState == secondaryState. + primaryState.setImmutable(); + primaryState = primaryState.mutableCopy(); + } + + Insn insn = insns.get(i); + RegisterSpec result; + + result = insn.getLocalAssignment(); + + if (result == null) { + /* + * If an assignment assigns over an existing local, make + * sure to mark the local as going out of scope. + */ + + result = insn.getResult(); + + if (result != null + && primaryState.get(result.getReg()) != null) { + primaryState.remove(primaryState.get(result.getReg())); + } + continue; + } + + result = result.withSimpleType(); + + RegisterSpec already = primaryState.get(result); + /* + * The equals() check ensures we only add new info if + * the instruction causes a change to the set of + * active variables. + */ + if (!result.equals(already)) { + /* + * If this insn represents a local moving from one register + * to another, remove the association between the old register + * and the local. + */ + RegisterSpec previous + = primaryState.localItemToSpec(result.getLocalItem()); + + if (previous != null + && (previous.getReg() != result.getReg())) { + + primaryState.remove(previous); + } + + resultInfo.addAssignment(insn, result); + primaryState.put(result); + } + } + + primaryState.setImmutable(); + + /* + * Merge this state into the start state for each successor, + * and update the work set where required (that is, in cases + * where the start state for a block changes). + */ + + IntList successors = block.getSuccessors(); + int succSz = successors.size(); + int primarySuccessor = block.getPrimarySuccessor(); + + for (int i = 0; i < succSz; i++) { + int succ = successors.get(i); + RegisterSpecSet state = (succ == primarySuccessor) ? + primaryState : secondaryState; + + if (resultInfo.mergeStarts(succ, state)) { + Bits.set(workSet, succ); + } + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/LocalVariableInfo.java b/dexgen/src/com/android/dexgen/rop/code/LocalVariableInfo.java new file mode 100644 index 0000000..b126a4c --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/LocalVariableInfo.java @@ -0,0 +1,250 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.type.TypeBearer; +import com.android.dexgen.util.MutabilityControl; + +import java.util.HashMap; + +/** + * Container for local variable information for a particular {@link + * RopMethod}. + */ +public final class LocalVariableInfo + extends MutabilityControl { + /** {@code >= 0;} the register count for the method */ + private final int regCount; + + /** + * {@code non-null;} {@link RegisterSpecSet} to use when indicating a block + * that has no locals; it is empty and immutable but has an appropriate + * max size for the method + */ + private final RegisterSpecSet emptySet; + + /** + * {@code non-null;} array consisting of register sets representing the + * sets of variables already assigned upon entry to each block, + * where array indices correspond to block labels + */ + private final RegisterSpecSet[] blockStarts; + + /** {@code non-null;} map from instructions to the variable each assigns */ + private final HashMap insnAssignments; + + /** + * Constructs an instance. + * + * @param method {@code non-null;} the method being represented by this instance + */ + public LocalVariableInfo(RopMethod method) { + if (method == null) { + throw new NullPointerException("method == null"); + } + + BasicBlockList blocks = method.getBlocks(); + int maxLabel = blocks.getMaxLabel(); + + this.regCount = blocks.getRegCount(); + this.emptySet = new RegisterSpecSet(regCount); + this.blockStarts = new RegisterSpecSet[maxLabel]; + this.insnAssignments = + new HashMap(blocks.getInstructionCount()); + + emptySet.setImmutable(); + } + + /** + * Sets the register set associated with the start of the block with + * the given label. + * + * @param label {@code >= 0;} the block label + * @param specs {@code non-null;} the register set to associate with the block + */ + public void setStarts(int label, RegisterSpecSet specs) { + throwIfImmutable(); + + if (specs == null) { + throw new NullPointerException("specs == null"); + } + + try { + blockStarts[label] = specs; + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate the exception. + throw new IllegalArgumentException("bogus label"); + } + } + + /** + * Merges the given register set into the set for the block with the + * given label. If there was not already an associated set, then this + * is the same as calling {@link #setStarts}. Otherwise, this will + * merge the two sets and call {@link #setStarts} on the result of the + * merge. + * + * @param label {@code >= 0;} the block label + * @param specs {@code non-null;} the register set to merge into the start set + * for the block + * @return {@code true} if the merge resulted in an actual change + * to the associated set (including storing one for the first time) or + * {@code false} if there was no change + */ + public boolean mergeStarts(int label, RegisterSpecSet specs) { + RegisterSpecSet start = getStarts0(label); + boolean changed = false; + + if (start == null) { + setStarts(label, specs); + return true; + } + + RegisterSpecSet newStart = start.mutableCopy(); + newStart.intersect(specs, true); + + if (start.equals(newStart)) { + return false; + } + + newStart.setImmutable(); + setStarts(label, newStart); + + return true; + } + + /** + * Gets the register set associated with the start of the block + * with the given label. This returns an empty set with the appropriate + * max size if no set was associated with the block in question. + * + * @param label {@code >= 0;} the block label + * @return {@code non-null;} the associated register set + */ + public RegisterSpecSet getStarts(int label) { + RegisterSpecSet result = getStarts0(label); + + return (result != null) ? result : emptySet; + } + + /** + * Gets the register set associated with the start of the given + * block. This is just convenient shorthand for + * {@code getStarts(block.getLabel())}. + * + * @param block {@code non-null;} the block in question + * @return {@code non-null;} the associated register set + */ + public RegisterSpecSet getStarts(BasicBlock block) { + return getStarts(block.getLabel()); + } + + /** + * Gets a mutable copy of the register set associated with the + * start of the block with the given label. This returns a + * newly-allocated empty {@link RegisterSpecSet} of appropriate + * max size if there is not yet any set associated with the block. + * + * @param label {@code >= 0;} the block label + * @return {@code non-null;} the associated register set + */ + public RegisterSpecSet mutableCopyOfStarts(int label) { + RegisterSpecSet result = getStarts0(label); + + return (result != null) ? + result.mutableCopy() : new RegisterSpecSet(regCount); + } + + /** + * Adds an assignment association for the given instruction and + * register spec. This throws an exception if the instruction + * doesn't actually perform a named variable assignment. + * + * Note: Although the instruction contains its own spec for + * the result, it still needs to be passed in explicitly to this + * method, since the spec that is stored here should always have a + * simple type and the one in the instruction can be an arbitrary + * {@link TypeBearer} (such as a constant value). + * + * @param insn {@code non-null;} the instruction in question + * @param spec {@code non-null;} the associated register spec + */ + public void addAssignment(Insn insn, RegisterSpec spec) { + throwIfImmutable(); + + if (insn == null) { + throw new NullPointerException("insn == null"); + } + + if (spec == null) { + throw new NullPointerException("spec == null"); + } + + insnAssignments.put(insn, spec); + } + + /** + * Gets the named register being assigned by the given instruction, if + * previously stored in this instance. + * + * @param insn {@code non-null;} instruction in question + * @return {@code null-ok;} the named register being assigned, if any + */ + public RegisterSpec getAssignment(Insn insn) { + return insnAssignments.get(insn); + } + + /** + * Gets the number of assignments recorded by this instance. + * + * @return {@code >= 0;} the number of assignments + */ + public int getAssignmentCount() { + return insnAssignments.size(); + } + + public void debugDump() { + for (int label = 0 ; label < blockStarts.length; label++) { + if (blockStarts[label] == null) { + continue; + } + + if (blockStarts[label] == emptySet) { + System.out.printf("%04x: empty set\n", label); + } else { + System.out.printf("%04x: %s\n", label, blockStarts[label]); + } + } + } + + /** + * Helper method, to get the starts for a label, throwing the + * right exception for range problems. + * + * @param label {@code >= 0;} the block label + * @return {@code null-ok;} associated register set or {@code null} if there + * is none + */ + private RegisterSpecSet getStarts0(int label) { + try { + return blockStarts[label]; + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate the exception. + throw new IllegalArgumentException("bogus label"); + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/PlainCstInsn.java b/dexgen/src/com/android/dexgen/rop/code/PlainCstInsn.java new file mode 100644 index 0000000..5f8f753 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/PlainCstInsn.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; + +/** + * Instruction which contains an explicit reference to a constant + * but which cannot throw an exception. + */ +public final class PlainCstInsn + extends CstInsn { + /** + * Constructs an instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param result {@code null-ok;} spec for the result, if any + * @param sources {@code non-null;} specs for all the sources + * @param cst {@code non-null;} the constant + */ + public PlainCstInsn(Rop opcode, SourcePosition position, + RegisterSpec result, RegisterSpecList sources, + Constant cst) { + super(opcode, position, result, sources, cst); + + if (opcode.getBranchingness() != Rop.BRANCH_NONE) { + throw new IllegalArgumentException("bogus branchingness"); + } + } + + /** {@inheritDoc} */ + @Override + public TypeList getCatches() { + return StdTypeList.EMPTY; + } + + /** {@inheritDoc} */ + @Override + public void accept(Visitor visitor) { + visitor.visitPlainCstInsn(this); + } + + /** {@inheritDoc} */ + @Override + public Insn withAddedCatch(Type type) { + throw new UnsupportedOperationException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public Insn withRegisterOffset(int delta) { + return new PlainCstInsn(getOpcode(), getPosition(), + getResult().withOffset(delta), + getSources().withOffset(delta), + getConstant()); + } + + /** {@inheritDoc} */ + @Override + public Insn withNewRegisters(RegisterSpec result, + RegisterSpecList sources) { + + return new PlainCstInsn(getOpcode(), getPosition(), + result, + sources, + getConstant()); + + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/PlainInsn.java b/dexgen/src/com/android/dexgen/rop/code/PlainInsn.java new file mode 100644 index 0000000..c79e7c1 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/PlainInsn.java @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeBearer; +import com.android.dexgen.rop.type.TypeList; + +/** + * Plain instruction, which has no embedded data and which cannot possibly + * throw an exception. + */ +public final class PlainInsn + extends Insn { + /** + * Constructs an instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param result {@code null-ok;} spec for the result, if any + * @param sources {@code non-null;} specs for all the sources + */ + public PlainInsn(Rop opcode, SourcePosition position, + RegisterSpec result, RegisterSpecList sources) { + super(opcode, position, result, sources); + + switch (opcode.getBranchingness()) { + case Rop.BRANCH_SWITCH: + case Rop.BRANCH_THROW: { + throw new IllegalArgumentException("bogus branchingness"); + } + } + + if (result != null && opcode.getBranchingness() != Rop.BRANCH_NONE) { + // move-result-pseudo is required here + throw new IllegalArgumentException + ("can't mix branchingness with result"); + } + } + + /** + * Constructs a single-source instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param result {@code null-ok;} spec for the result, if any + * @param source {@code non-null;} spec for the source + */ + public PlainInsn(Rop opcode, SourcePosition position, RegisterSpec result, + RegisterSpec source) { + this(opcode, position, result, RegisterSpecList.make(source)); + } + + /** {@inheritDoc} */ + @Override + public TypeList getCatches() { + return StdTypeList.EMPTY; + } + + /** {@inheritDoc} */ + @Override + public void accept(Visitor visitor) { + visitor.visitPlainInsn(this); + } + + /** {@inheritDoc} */ + @Override + public Insn withAddedCatch(Type type) { + throw new UnsupportedOperationException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public Insn withRegisterOffset(int delta) { + return new PlainInsn(getOpcode(), getPosition(), + getResult().withOffset(delta), + getSources().withOffset(delta)); + } + + /** {@inheritDoc} */ + @Override + public Insn withLastSourceLiteral() { + RegisterSpecList sources = getSources(); + int szSources = sources.size(); + + if (szSources == 0) { + return this; + } + + TypeBearer lastType = sources.get(szSources - 1).getTypeBearer(); + + if (!lastType.isConstant()) { + return this; + } + + Constant cst = (Constant) lastType; + + RegisterSpecList newSources = sources.withoutLast(); + + Rop newRop; + try { + newRop = Rops.ropFor(getOpcode().getOpcode(), + getResult(), newSources, (Constant)lastType); + } catch (IllegalArgumentException ex) { + // There's no rop for this case + return this; + } + + return new PlainCstInsn(newRop, getPosition(), + getResult(), newSources, cst); + } + + + /** {@inheritDoc} */ + @Override + public Insn withNewRegisters(RegisterSpec result, + RegisterSpecList sources) { + + return new PlainInsn(getOpcode(), getPosition(), + result, + sources); + + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/RegOps.java b/dexgen/src/com/android/dexgen/rop/code/RegOps.java new file mode 100644 index 0000000..3af8b7d --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/RegOps.java @@ -0,0 +1,399 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.util.Hex; + +/** + * All the register-based opcodes, and related utilities. + * + *

Note: Opcode descriptions use a rough pseudocode. {@code r} + * is the result register, {@code x} is the first argument, + * {@code y} is the second argument, and {@code z} is the + * third argument. The expression which describes + * the operation uses Java-ish syntax but is preceded by type indicators for + * each of the values. + */ +public final class RegOps { + /** {@code nop()} */ + public static final int NOP = 1; + + /** {@code T: any type; r,x: T :: r = x;} */ + public static final int MOVE = 2; + + /** {@code T: any type; r,param(x): T :: r = param(x)} */ + public static final int MOVE_PARAM = 3; + + /** + * {@code T: Throwable; r: T :: r = caught_exception}. + * Note: This opcode should only ever be used in the + * first instruction of a block, and such blocks must be + * the start of an exception handler. + */ + public static final int MOVE_EXCEPTION = 4; + + /** {@code T: any type; r, literal: T :: r = literal;} */ + public static final int CONST = 5; + + /** {@code goto label} */ + public static final int GOTO = 6; + + /** + * {@code T: int or Object; x,y: T :: if (x == y) goto + * label} + */ + public static final int IF_EQ = 7; + + /** + * {@code T: int or Object; x,y: T :: if (x != y) goto + * label} + */ + public static final int IF_NE = 8; + + /** {@code x,y: int :: if (x < y) goto label} */ + public static final int IF_LT = 9; + + /** {@code x,y: int :: if (x >= y) goto label} */ + public static final int IF_GE = 10; + + /** {@code x,y: int :: if (x <= y) goto label} */ + public static final int IF_LE = 11; + + /** {@code x,y: int :: if (x > y) goto label} */ + public static final int IF_GT = 12; + + /** {@code x: int :: goto table[x]} */ + public static final int SWITCH = 13; + + /** {@code T: any numeric type; r,x,y: T :: r = x + y} */ + public static final int ADD = 14; + + /** {@code T: any numeric type; r,x,y: T :: r = x - y} */ + public static final int SUB = 15; + + /** {@code T: any numeric type; r,x,y: T :: r = x * y} */ + public static final int MUL = 16; + + /** {@code T: any numeric type; r,x,y: T :: r = x / y} */ + public static final int DIV = 17; + + /** + * {@code T: any numeric type; r,x,y: T :: r = x % y} + * (Java-style remainder) + */ + public static final int REM = 18; + + /** {@code T: any numeric type; r,x: T :: r = -x} */ + public static final int NEG = 19; + + /** {@code T: any integral type; r,x,y: T :: r = x & y} */ + public static final int AND = 20; + + /** {@code T: any integral type; r,x,y: T :: r = x | y} */ + public static final int OR = 21; + + /** {@code T: any integral type; r,x,y: T :: r = x ^ y} */ + public static final int XOR = 22; + + /** + * {@code T: any integral type; r,x: T; y: int :: r = x << y} + */ + public static final int SHL = 23; + + /** + * {@code T: any integral type; r,x: T; y: int :: r = x >> y} + * (signed right-shift) + */ + public static final int SHR = 24; + + /** + * {@code T: any integral type; r,x: T; y: int :: r = x >>> y} + * (unsigned right-shift) + */ + public static final int USHR = 25; + + /** {@code T: any integral type; r,x: T :: r = ~x} */ + public static final int NOT = 26; + + /** + * {@code T: any numeric type; r: int; x,y: T :: r = (x == y) ? 0 + * : (x > y) ? 1 : -1} (Java-style "cmpl" where a NaN is + * considered "less than" all other values; also used for integral + * comparisons) + */ + public static final int CMPL = 27; + + /** + * {@code T: any floating point type; r: int; x,y: T :: r = (x == y) ? 0 + * : (x < y) ? -1 : 1} (Java-style "cmpg" where a NaN is + * considered "greater than" all other values) + */ + public static final int CMPG = 28; + + /** + * {@code T: any numeric type; U: any numeric type; r: T; x: U :: + * r = (T) x} (numeric type conversion between the four + * "real" numeric types) + */ + public static final int CONV = 29; + + /** + * {@code r,x: int :: r = (x << 24) >> 24} (Java-style + * convert int to byte) + */ + public static final int TO_BYTE = 30; + + /** + * {@code r,x: int :: r = x & 0xffff} (Java-style convert int to char) + */ + public static final int TO_CHAR = 31; + + /** + * {@code r,x: int :: r = (x << 16) >> 16} (Java-style + * convert int to short) + */ + public static final int TO_SHORT = 32; + + /** {@code T: return type for the method; x: T; return x} */ + public static final int RETURN = 33; + + /** {@code T: any type; r: int; x: T[]; :: r = x.length} */ + public static final int ARRAY_LENGTH = 34; + + /** {@code x: Throwable :: throw(x)} */ + public static final int THROW = 35; + + /** {@code x: Object :: monitorenter(x)} */ + public static final int MONITOR_ENTER = 36; + + /** {@code x: Object :: monitorexit(x)} */ + public static final int MONITOR_EXIT = 37; + + /** {@code T: any type; r: T; x: T[]; y: int :: r = x[y]} */ + public static final int AGET = 38; + + /** {@code T: any type; x: T; y: T[]; z: int :: x[y] = z} */ + public static final int APUT = 39; + + /** + * {@code T: any non-array object type :: r = + * alloc(T)} (allocate heap space for an object) + */ + public static final int NEW_INSTANCE = 40; + + /** {@code T: any array type; r: T; x: int :: r = new T[x]} */ + public static final int NEW_ARRAY = 41; + + /** + * {@code T: any array type; r: T; x: int; v0..vx: T :: r = new T[x] + * {v0, ..., vx}} + */ + public static final int FILLED_NEW_ARRAY = 42; + + /** + * {@code T: any object type; x: Object :: (T) x} (can + * throw {@code ClassCastException}) + */ + public static final int CHECK_CAST = 43; + + /** + * {@code T: any object type; x: Object :: x instanceof T} + */ + public static final int INSTANCE_OF = 44; + + /** + * {@code T: any type; r: T; x: Object; f: instance field spec of + * type T :: r = x.f} + */ + public static final int GET_FIELD = 45; + + /** + * {@code T: any type; r: T; f: static field spec of type T :: r = + * f} + */ + public static final int GET_STATIC = 46; + + /** + * {@code T: any type; x: T; y: Object; f: instance field spec of type + * T :: y.f = x} + */ + public static final int PUT_FIELD = 47; + + /** + * {@code T: any type; f: static field spec of type T; x: T :: f = x} + */ + public static final int PUT_STATIC = 48; + + /** + * {@code Tr, T0, T1...: any types; r: Tr; m: static method spec; + * y0: T0; y1: T1 ... :: r = m(y0, y1, ...)} (call static + * method) + */ + public static final int INVOKE_STATIC = 49; + + /** + * {@code Tr, T0, T1...: any types; r: Tr; x: Object; m: instance method + * spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1, ...)} (call normal + * virtual method) + */ + public static final int INVOKE_VIRTUAL = 50; + + /** + * {@code Tr, T0, T1...: any types; r: Tr; x: Object; m: instance method + * spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1, ...)} (call + * superclass virtual method) + */ + public static final int INVOKE_SUPER = 51; + + /** + * {@code Tr, T0, T1...: any types; r: Tr; x: Object; m: instance method + * spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1, ...)} (call + * direct/special method) + */ + public static final int INVOKE_DIRECT = 52; + + /** + * {@code Tr, T0, T1...: any types; r: Tr; x: Object; m: interface + * (instance) method spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1, + * ...)} (call interface method) + */ + public static final int INVOKE_INTERFACE = 53; + + /** + * {@code T0: any type; name: local variable name :: mark(name,T0)} + * (mark beginning or end of local variable name) + */ + public static final int MARK_LOCAL = 54; + + /** + * {@code T: Any type; r: T :: r = return_type}. + * Note: This opcode should only ever be used in the + * first instruction of a block following an invoke-*. + */ + public static final int MOVE_RESULT = 55; + + /** + * {@code T: Any type; r: T :: r = return_type}. + * Note: This opcode should only ever be used in the + * first instruction of a block following a non-invoke throwing insn + */ + public static final int MOVE_RESULT_PSEUDO = 56; + + /** {@code T: Any primitive type; v0..vx: T :: {v0, ..., vx}} */ + public static final int FILL_ARRAY_DATA = 57; + + /** + * This class is uninstantiable. + */ + private RegOps() { + // This space intentionally left blank. + } + + /** + * Gets the name of the given opcode. + * + * @param opcode {@code >= 0, <= 255;} the opcode + * @return {@code non-null;} its name + */ + public static String opName(int opcode) { + switch (opcode) { + case NOP: return "nop"; + case MOVE: return "move"; + case MOVE_PARAM: return "move-param"; + case MOVE_EXCEPTION: return "move-exception"; + case CONST: return "const"; + case GOTO: return "goto"; + case IF_EQ: return "if-eq"; + case IF_NE: return "if-ne"; + case IF_LT: return "if-lt"; + case IF_GE: return "if-ge"; + case IF_LE: return "if-le"; + case IF_GT: return "if-gt"; + case SWITCH: return "switch"; + case ADD: return "add"; + case SUB: return "sub"; + case MUL: return "mul"; + case DIV: return "div"; + case REM: return "rem"; + case NEG: return "neg"; + case AND: return "and"; + case OR: return "or"; + case XOR: return "xor"; + case SHL: return "shl"; + case SHR: return "shr"; + case USHR: return "ushr"; + case NOT: return "not"; + case CMPL: return "cmpl"; + case CMPG: return "cmpg"; + case CONV: return "conv"; + case TO_BYTE: return "to-byte"; + case TO_CHAR: return "to-char"; + case TO_SHORT: return "to-short"; + case RETURN: return "return"; + case ARRAY_LENGTH: return "array-length"; + case THROW: return "throw"; + case MONITOR_ENTER: return "monitor-enter"; + case MONITOR_EXIT: return "monitor-exit"; + case AGET: return "aget"; + case APUT: return "aput"; + case NEW_INSTANCE: return "new-instance"; + case NEW_ARRAY: return "new-array"; + case FILLED_NEW_ARRAY: return "filled-new-array"; + case CHECK_CAST: return "check-cast"; + case INSTANCE_OF: return "instance-of"; + case GET_FIELD: return "get-field"; + case GET_STATIC: return "get-static"; + case PUT_FIELD: return "put-field"; + case PUT_STATIC: return "put-static"; + case INVOKE_STATIC: return "invoke-static"; + case INVOKE_VIRTUAL: return "invoke-virtual"; + case INVOKE_SUPER: return "invoke-super"; + case INVOKE_DIRECT: return "invoke-direct"; + case INVOKE_INTERFACE: return "invoke-interface"; + case MOVE_RESULT: return "move-result"; + case MOVE_RESULT_PSEUDO: return "move-result-pseudo"; + case FILL_ARRAY_DATA: return "fill-array-data"; + } + + return "unknown-" + Hex.u1(opcode); + } + + /** + * Given an IF_* RegOp, returns the right-to-left flipped version. For + * example, IF_GT becomes IF_LT. + * + * @param opcode An IF_* RegOp + * @return flipped IF Regop + */ + public static int flippedIfOpcode(final int opcode) { + switch (opcode) { + case RegOps.IF_EQ: + case RegOps.IF_NE: + return opcode; + case RegOps.IF_LT: + return RegOps.IF_GT; + case RegOps.IF_GE: + return RegOps.IF_LE; + case RegOps.IF_LE: + return RegOps.IF_GE; + case RegOps.IF_GT: + return RegOps.IF_LT; + default: + throw new RuntimeException("Unrecognized IF regop: " + opcode); + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/RegisterSpec.java b/dexgen/src/com/android/dexgen/rop/code/RegisterSpec.java new file mode 100644 index 0000000..30deeca --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/RegisterSpec.java @@ -0,0 +1,650 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeBearer; +import com.android.dexgen.util.ToHuman; + +import java.util.HashMap; + +/** + * Combination of a register number and a type, used as the sources and + * destinations of register-based operations. + */ +public final class RegisterSpec + implements TypeBearer, ToHuman, Comparable { + /** {@code non-null;} string to prefix register numbers with */ + public static final String PREFIX = "v"; + + /** {@code non-null;} intern table for instances */ + private static final HashMap theInterns = + new HashMap(1000); + + /** {@code non-null;} common comparison instance used while interning */ + private static final ForComparison theInterningItem = new ForComparison(); + + /** {@code >= 0;} register number */ + private final int reg; + + /** {@code non-null;} type loaded or stored */ + private final TypeBearer type; + + /** {@code null-ok;} local variable info associated with this register, if any */ + private final LocalItem local; + + /** + * Intern the given triple as an instance of this class. + * + * @param reg {@code >= 0;} the register number + * @param type {@code non-null;} the type (or possibly actual value) which + * is loaded from or stored to the indicated register + * @param local {@code null-ok;} the associated local variable, if any + * @return {@code non-null;} an appropriately-constructed instance + */ + private static RegisterSpec intern(int reg, TypeBearer type, + LocalItem local) { + theInterningItem.set(reg, type, local); + RegisterSpec found = theInterns.get(theInterningItem); + + if (found != null) { + return found; + } + + found = theInterningItem.toRegisterSpec(); + theInterns.put(found, found); + return found; + } + + /** + * Returns an instance for the given register number and type, with + * no variable info. This method is allowed to return shared + * instances (but doesn't necessarily do so). + * + * @param reg {@code >= 0;} the register number + * @param type {@code non-null;} the type (or possibly actual value) which + * is loaded from or stored to the indicated register + * @return {@code non-null;} an appropriately-constructed instance + */ + public static RegisterSpec make(int reg, TypeBearer type) { + return intern(reg, type, null); + } + + /** + * Returns an instance for the given register number, type, and + * variable info. This method is allowed to return shared + * instances (but doesn't necessarily do so). + * + * @param reg {@code >= 0;} the register number + * @param type {@code non-null;} the type (or possibly actual value) which + * is loaded from or stored to the indicated register + * @param local {@code non-null;} the associated local variable + * @return {@code non-null;} an appropriately-constructed instance + */ + public static RegisterSpec make(int reg, TypeBearer type, + LocalItem local) { + if (local == null) { + throw new NullPointerException("local == null"); + } + + return intern(reg, type, local); + } + + /** + * Returns an instance for the given register number, type, and + * variable info. This method is allowed to return shared + * instances (but doesn't necessarily do so). + * + * @param reg {@code >= 0;} the register number + * @param type {@code non-null;} the type (or possibly actual value) which + * is loaded from or stored to the indicated register + * @param local {@code null-ok;} the associated variable info or null for + * none + * @return {@code non-null;} an appropriately-constructed instance + */ + public static RegisterSpec makeLocalOptional( + int reg, TypeBearer type, LocalItem local) { + + return intern(reg, type, local); + } + + /** + * Gets the string form for the given register number. + * + * @param reg {@code >= 0;} the register number + * @return {@code non-null;} the string form + */ + public static String regString(int reg) { + return PREFIX + reg; + } + + /** + * Constructs an instance. This constructor is private. Use + * {@link #make}. + * + * @param reg {@code >= 0;} the register number + * @param type {@code non-null;} the type (or possibly actual value) which + * is loaded from or stored to the indicated register + * @param local {@code null-ok;} the associated local variable, if any + */ + private RegisterSpec(int reg, TypeBearer type, LocalItem local) { + if (reg < 0) { + throw new IllegalArgumentException("reg < 0"); + } + + if (type == null) { + throw new NullPointerException("type == null"); + } + + this.reg = reg; + this.type = type; + this.local = local; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof RegisterSpec)) { + if (other instanceof ForComparison) { + ForComparison fc = (ForComparison) other; + return equals(fc.reg, fc.type, fc.local); + } + return false; + } + + RegisterSpec spec = (RegisterSpec) other; + return equals(spec.reg, spec.type, spec.local); + } + + /** + * Like {@code equals}, but only consider the simple types of the + * registers. That is, this compares {@code getType()} on the types + * to ignore whatever arbitrary extra stuff might be carried around + * by an outer {@link TypeBearer}. + * + * @param other {@code null-ok;} spec to compare to + * @return {@code true} iff {@code this} and {@code other} are equal + * in the stated way + */ + public boolean equalsUsingSimpleType(RegisterSpec other) { + if (!matchesVariable(other)) { + return false; + } + + return (reg == other.reg); + } + + /** + * Like {@link #equalsUsingSimpleType} but ignoring the register number. + * This is useful to determine if two instances refer to the "same" + * local variable. + * + * @param other {@code null-ok;} spec to compare to + * @return {@code true} iff {@code this} and {@code other} are equal + * in the stated way + */ + public boolean matchesVariable(RegisterSpec other) { + if (other == null) { + return false; + } + + return type.getType().equals(other.type.getType()) + && ((local == other.local) + || ((local != null) && local.equals(other.local))); + } + + /** + * Helper for {@link #equals} and {@link #ForComparison.equals}, + * which actually does the test. + * + * @param reg value of the instance variable, for another instance + * @param type value of the instance variable, for another instance + * @param local value of the instance variable, for another instance + * @return whether this instance is equal to one with the given + * values + */ + private boolean equals(int reg, TypeBearer type, LocalItem local) { + return (this.reg == reg) + && this.type.equals(type) + && ((this.local == local) + || ((this.local != null) && this.local.equals(local))); + } + + /** + * Compares by (in priority order) register number, unwrapped type + * (that is types not {@link TypeBearer}s, and local info. + * + * @param other {@code non-null;} spec to compare to + * @return {@code -1..1;} standard result of comparison + */ + public int compareTo(RegisterSpec other) { + if (this.reg < other.reg) { + return -1; + } else if (this.reg > other.reg) { + return 1; + } + + int compare = type.getType().compareTo(other.type.getType()); + + if (compare != 0) { + return compare; + } + + if (this.local == null) { + return (other.local == null) ? 0 : -1; + } else if (other.local == null) { + return 1; + } + + return this.local.compareTo(other.local); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return hashCodeOf(reg, type, local); + } + + /** + * Helper for {@link #hashCode} and {@link #ForComparison.hashCode}, + * which actually does the calculation. + * + * @param reg value of the instance variable + * @param type value of the instance variable + * @param local value of the instance variable + * @return the hash code + */ + private static int hashCodeOf(int reg, TypeBearer type, LocalItem local) { + int hash = (local != null) ? local.hashCode() : 0; + + hash = (hash * 31 + type.hashCode()) * 31 + reg; + return hash; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return toString0(false); + } + + /** {@inheritDoc} */ + public String toHuman() { + return toString0(true); + } + + /** {@inheritDoc} */ + public Type getType() { + return type.getType(); + } + + /** {@inheritDoc} */ + public TypeBearer getFrameType() { + return type.getFrameType(); + } + + /** {@inheritDoc} */ + public final int getBasicType() { + return type.getBasicType(); + } + + /** {@inheritDoc} */ + public final int getBasicFrameType() { + return type.getBasicFrameType(); + } + + /** {@inheritDoc} */ + public final boolean isConstant() { + return false; + } + + /** + * Gets the register number. + * + * @return {@code >= 0;} the register number + */ + public int getReg() { + return reg; + } + + /** + * Gets the type (or actual value) which is loaded from or stored + * to the register associated with this instance. + * + * @return {@code non-null;} the type + */ + public TypeBearer getTypeBearer() { + return type; + } + + /** + * Gets the variable info associated with this instance, if any. + * + * @return {@code null-ok;} the variable info, or {@code null} if this + * instance has none + */ + public LocalItem getLocalItem() { + return local; + } + + /** + * Gets the next available register number after the one in this + * instance. This is equal to the register number plus the width + * (category) of the type used. Among other things, this may also + * be used to determine the minimum required register count + * implied by this instance. + * + * @return {@code >= 0;} the required registers size + */ + public int getNextReg() { + return reg + getCategory(); + } + + /** + * Gets the category of this instance's type. This is just a convenient + * shorthand for {@code getType().getCategory()}. + * + * @see #isCategory1 + * @see #isCategory2 + * @return {@code 1..2;} the category of this instance's type + */ + public int getCategory() { + return type.getType().getCategory(); + } + + /** + * Gets whether this instance's type is category 1. This is just a + * convenient shorthand for {@code getType().isCategory1()}. + * + * @see #getCategory + * @see #isCategory2 + * @return whether or not this instance's type is of category 1 + */ + public boolean isCategory1() { + return type.getType().isCategory1(); + } + + /** + * Gets whether this instance's type is category 2. This is just a + * convenient shorthand for {@code getType().isCategory2()}. + * + * @see #getCategory + * @see #isCategory1 + * @return whether or not this instance's type is of category 2 + */ + public boolean isCategory2() { + return type.getType().isCategory2(); + } + + /** + * Gets the string form for just the register number of this instance. + * + * @return {@code non-null;} the register string form + */ + public String regString() { + return regString(reg); + } + + /** + * Returns an instance that is the intersection between this instance + * and the given one, if any. The intersection is defined as follows: + * + *

    + *
  • If {@code other} is {@code null}, then the result + * is {@code null}. + *
  • If the register numbers don't match, then the intersection + * is {@code null}. Otherwise, the register number of the + * intersection is the same as the one in the two instances.
  • + *
  • If the types returned by {@code getType()} are not + * {@code equals()}, then the intersection is null.
  • + *
  • If the type bearers returned by {@code getTypeBearer()} + * are {@code equals()}, then the intersection's type bearer + * is the one from this instance. Otherwise, the intersection's + * type bearer is the {@code getType()} of this instance.
  • + *
  • If the locals are {@code equals()}, then the local info + * of the intersection is the local info of this instance. Otherwise, + * the local info of the intersection is {@code null}.
  • + *
+ * + * @param other {@code null-ok;} instance to intersect with (or {@code null}) + * @param localPrimary whether local variables are primary to the + * intersection; if {@code true}, then the only non-null + * results occur when registers being intersected have equal local + * infos (or both have {@code null} local infos) + * @return {@code null-ok;} the intersection + */ + public RegisterSpec intersect(RegisterSpec other, boolean localPrimary) { + if (this == other) { + // Easy out. + return this; + } + + if ((other == null) || (reg != other.getReg())) { + return null; + } + + LocalItem resultLocal = + ((local == null) || !local.equals(other.getLocalItem())) + ? null : local; + boolean sameName = (resultLocal == local); + + if (localPrimary && !sameName) { + return null; + } + + Type thisType = getType(); + Type otherType = other.getType(); + + // Note: Types are always interned. + if (thisType != otherType) { + return null; + } + + TypeBearer resultTypeBearer = + type.equals(other.getTypeBearer()) ? type : thisType; + + if ((resultTypeBearer == type) && sameName) { + // It turns out that the intersection is "this" after all. + return this; + } + + return (resultLocal == null) ? make(reg, resultTypeBearer) : + make(reg, resultTypeBearer, resultLocal); + } + + /** + * Returns an instance that is identical to this one, except that the + * register number is replaced by the given one. + * + * @param newReg {@code >= 0;} the new register number + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpec withReg(int newReg) { + if (reg == newReg) { + return this; + } + + return makeLocalOptional(newReg, type, local); + } + + /** + * Returns an instance that is identical to this one, except that + * the type is replaced by the given one. + * + * @param newType {@code non-null;} the new type + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpec withType(TypeBearer newType) { + return makeLocalOptional(reg, newType, local); + } + + /** + * Returns an instance that is identical to this one, except that the + * register number is offset by the given amount. + * + * @param delta the amount to offset the register number by + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpec withOffset(int delta) { + if (delta == 0) { + return this; + } + + return withReg(reg + delta); + } + + /** + * Returns an instance that is identical to this one, except that + * the type bearer is replaced by the actual underlying type + * (thereby stripping off non-type information) with any + * initialization information stripped away as well. + * + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpec withSimpleType() { + TypeBearer orig = type; + Type newType; + + if (orig instanceof Type) { + newType = (Type) orig; + } else { + newType = orig.getType(); + } + + if (newType.isUninitialized()) { + newType = newType.getInitializedType(); + } + + if (newType == orig) { + return this; + } + + return makeLocalOptional(reg, newType, local); + } + + /** + * Returns an instance that is identical to this one except that the + * local variable is as specified in the parameter. + * + * @param local {@code null-ok;} the local item or null for none + * @return an appropriate instance + */ + public RegisterSpec withLocalItem(LocalItem local) { + if ((this.local== local) + || ((this.local != null) && this.local.equals(local))) { + + return this; + } + + return makeLocalOptional(reg, type, local); + } + + + /** + * Helper for {@link #toString} and {@link #toHuman}. + * + * @param human whether to be human-oriented + * @return {@code non-null;} the string form + */ + private String toString0(boolean human) { + StringBuffer sb = new StringBuffer(40); + + sb.append(regString()); + sb.append(":"); + + if (local != null) { + sb.append(local.toString()); + } + + Type justType = type.getType(); + sb.append(justType); + + if (justType != type) { + sb.append("="); + if (human && (type instanceof Constant)) { + sb.append(((Constant) type).toHuman()); + } else { + sb.append(type); + } + } + + return sb.toString(); + } + + /** + * Holder of register spec data for the purposes of comparison (so that + * {@code RegisterSpec} itself can still keep {@code final} + * instance variables. + */ + private static class ForComparison { + /** {@code >= 0;} register number */ + private int reg; + + /** {@code non-null;} type loaded or stored */ + private TypeBearer type; + + /** + * {@code null-ok;} local variable associated with this + * register, if any + */ + private LocalItem local; + + /** + * Set all the instance variables. + * + * @param reg {@code >= 0;} the register number + * @param type {@code non-null;} the type (or possibly actual + * value) which is loaded from or stored to the indicated + * register + * @param local {@code null-ok;} the associated local variable, if any + * @return {@code non-null;} an appropriately-constructed instance + */ + public void set(int reg, TypeBearer type, LocalItem local) { + this.reg = reg; + this.type = type; + this.local = local; + } + + /** + * Construct a {@code RegisterSpec} of this instance's + * contents. + * + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpec toRegisterSpec() { + return new RegisterSpec(reg, type, local); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof RegisterSpec)) { + return false; + } + + RegisterSpec spec = (RegisterSpec) other; + return spec.equals(reg, type, local); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return hashCodeOf(reg, type, local); + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/RegisterSpecList.java b/dexgen/src/com/android/dexgen/rop/code/RegisterSpecList.java new file mode 100644 index 0000000..a0f7a24 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/RegisterSpecList.java @@ -0,0 +1,362 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.FixedSizeList; + +/** + * List of {@link RegisterSpec} instances. + */ +public final class RegisterSpecList + extends FixedSizeList implements TypeList { + /** {@code non-null;} no-element instance */ + public static final RegisterSpecList EMPTY = new RegisterSpecList(0); + + /** + * Makes a single-element instance. + * + * @param spec {@code non-null;} the element + * @return {@code non-null;} an appropriately-constructed instance + */ + public static RegisterSpecList make(RegisterSpec spec) { + RegisterSpecList result = new RegisterSpecList(1); + result.set(0, spec); + return result; + } + + /** + * Makes a two-element instance. + * + * @param spec0 {@code non-null;} the first element + * @param spec1 {@code non-null;} the second element + * @return {@code non-null;} an appropriately-constructed instance + */ + public static RegisterSpecList make(RegisterSpec spec0, + RegisterSpec spec1) { + RegisterSpecList result = new RegisterSpecList(2); + result.set(0, spec0); + result.set(1, spec1); + return result; + } + + /** + * Makes a three-element instance. + * + * @param spec0 {@code non-null;} the first element + * @param spec1 {@code non-null;} the second element + * @param spec2 {@code non-null;} the third element + * @return {@code non-null;} an appropriately-constructed instance + */ + public static RegisterSpecList make(RegisterSpec spec0, RegisterSpec spec1, + RegisterSpec spec2) { + RegisterSpecList result = new RegisterSpecList(3); + result.set(0, spec0); + result.set(1, spec1); + result.set(2, spec2); + return result; + } + + /** + * Makes a four-element instance. + * + * @param spec0 {@code non-null;} the first element + * @param spec1 {@code non-null;} the second element + * @param spec2 {@code non-null;} the third element + * @param spec3 {@code non-null;} the fourth element + * @return {@code non-null;} an appropriately-constructed instance + */ + public static RegisterSpecList make(RegisterSpec spec0, RegisterSpec spec1, + RegisterSpec spec2, + RegisterSpec spec3) { + RegisterSpecList result = new RegisterSpecList(4); + result.set(0, spec0); + result.set(1, spec1); + result.set(2, spec2); + result.set(3, spec3); + return result; + } + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the list + */ + public RegisterSpecList(int size) { + super(size); + } + + /** {@inheritDoc} */ + public Type getType(int n) { + return get(n).getType().getType(); + } + + /** {@inheritDoc} */ + public int getWordCount() { + int sz = size(); + int result = 0; + + for (int i = 0; i < sz; i++) { + result += getType(i).getCategory(); + } + + return result; + } + + /** {@inheritDoc} */ + public TypeList withAddedType(Type type) { + throw new UnsupportedOperationException("unsupported"); + } + + /** + * Gets the indicated element. It is an error to call this with the + * index for an element which was never set; if you do that, this + * will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which element + * @return {@code non-null;} the indicated element + */ + public RegisterSpec get(int n) { + return (RegisterSpec) get0(n); + } + + /** + * Returns a RegisterSpec in this list that uses the specified register, + * or null if there is none in this list. + * @param reg Register to find + * @return RegisterSpec that uses argument or null. + */ + public RegisterSpec specForRegister(int reg) { + int sz = size(); + for (int i = 0; i < sz; i++) { + RegisterSpec rs; + + rs = get(i); + + if (rs.getReg() == reg) { + return rs; + } + } + + return null; + } + + /** + * Returns the index of a RegisterSpec in this list that uses the specified + * register, or -1 if none in this list uses the register. + * @param reg Register to find + * @return index of RegisterSpec or -1 + */ + public int indexOfRegister(int reg) { + int sz = size(); + for (int i = 0; i < sz; i++) { + RegisterSpec rs; + + rs = get(i); + + if (rs.getReg() == reg) { + return i; + } + } + + return -1; + } + + /** + * Sets the element at the given index. + * + * @param n {@code >= 0, < size();} which element + * @param spec {@code non-null;} the value to store + */ + public void set(int n, RegisterSpec spec) { + set0(n, spec); + } + + /** + * Gets the minimum required register count implied by this + * instance. This is equal to the highest register number referred + * to plus the widest width (largest category) of the type used in + * that register. + * + * @return {@code >= 0;} the required registers size + */ + public int getRegistersSize() { + int sz = size(); + int result = 0; + + for (int i = 0; i < sz; i++) { + RegisterSpec spec = (RegisterSpec) get0(i); + if (spec != null) { + int min = spec.getNextReg(); + if (min > result) { + result = min; + } + } + } + + return result; + } + + /** + * Returns a new instance, which is the same as this instance, + * except that it has an additional element prepended to the original. + * Mutability of the result is inherited from the original. + * + * @param spec {@code non-null;} the new first spec (to prepend) + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpecList withFirst(RegisterSpec spec) { + int sz = size(); + RegisterSpecList result = new RegisterSpecList(sz + 1); + + for (int i = 0; i < sz; i++) { + result.set0(i + 1, get0(i)); + } + + result.set0(0, spec); + if (isImmutable()) { + result.setImmutable(); + } + + return result; + } + + /** + * Returns a new instance, which is the same as this instance, + * except that its first element is removed. Mutability of the + * result is inherited from the original. + * + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpecList withoutFirst() { + int newSize = size() - 1; + + if (newSize == 0) { + return EMPTY; + } + + RegisterSpecList result = new RegisterSpecList(newSize); + + for (int i = 0; i < newSize; i++) { + result.set0(i, get0(i + 1)); + } + + if (isImmutable()) { + result.setImmutable(); + } + + return result; + } + + /** + * Returns a new instance, which is the same as this instance, + * except that its last element is removed. Mutability of the + * result is inherited from the original. + * + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpecList withoutLast() { + int newSize = size() - 1; + + if (newSize == 0) { + return EMPTY; + } + + RegisterSpecList result = new RegisterSpecList(newSize); + + for (int i = 0; i < newSize; i++) { + result.set0(i, get0(i)); + } + + if (isImmutable()) { + result.setImmutable(); + } + + return result; + } + + /** + * Returns an instance that is identical to this one, except that + * all register numbers are offset by the given amount. Mutability + * of the result is inherited from the original. + * + * @param delta the amount to offset the register numbers by + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpecList withOffset(int delta) { + int sz = size(); + + if (sz == 0) { + // Don't bother making a new zero-element instance. + return this; + } + + RegisterSpecList result = new RegisterSpecList(sz); + + for (int i = 0; i < sz; i++) { + RegisterSpec one = (RegisterSpec) get0(i); + if (one != null) { + result.set0(i, one.withOffset(delta)); + } + } + + if (isImmutable()) { + result.setImmutable(); + } + + return result; + } + + /** + * Returns an instance that is identical to this one, except that + * all register numbers are renumbered sequentially from the given + * base, with the first number duplicated if indicated. + * + * @param base the base register number + * @param duplicateFirst whether to duplicate the first number + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpecList withSequentialRegisters(int base, + boolean duplicateFirst) { + int sz = size(); + + if (sz == 0) { + // Don't bother making a new zero-element instance. + return this; + } + + RegisterSpecList result = new RegisterSpecList(sz); + + for (int i = 0; i < sz; i++) { + RegisterSpec one = (RegisterSpec) get0(i); + result.set0(i, one.withReg(base)); + if (duplicateFirst) { + duplicateFirst = false; + } else { + base += one.getCategory(); + } + } + + if (isImmutable()) { + result.setImmutable(); + } + + return result; + } + +} diff --git a/dexgen/src/com/android/dexgen/rop/code/RegisterSpecSet.java b/dexgen/src/com/android/dexgen/rop/code/RegisterSpecSet.java new file mode 100644 index 0000000..69e67e9 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/RegisterSpecSet.java @@ -0,0 +1,397 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.MutabilityControl; + +/** + * Set of {@link RegisterSpec} instances, where a given register number + * may appear only once in the set. + */ +public final class RegisterSpecSet + extends MutabilityControl { + /** {@code non-null;} no-element instance */ + public static final RegisterSpecSet EMPTY = new RegisterSpecSet(0); + + /** + * {@code non-null;} array of register specs, where each element is + * {@code null} or is an instance whose {@code reg} + * matches the array index + */ + private final RegisterSpec[] specs; + + /** {@code >= -1;} size of the set or {@code -1} if not yet calculated */ + private int size; + + /** + * Constructs an instance. The instance is initially empty. + * + * @param maxSize {@code >= 0;} the maximum register number (exclusive) that + * may be represented in this instance + */ + public RegisterSpecSet(int maxSize) { + super(maxSize != 0); + + this.specs = new RegisterSpec[maxSize]; + this.size = 0; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof RegisterSpecSet)) { + return false; + } + + RegisterSpecSet otherSet = (RegisterSpecSet) other; + RegisterSpec[] otherSpecs = otherSet.specs; + int len = specs.length; + + if ((len != otherSpecs.length) || (size() != otherSet.size())) { + return false; + } + + for (int i = 0; i < len; i++) { + RegisterSpec s1 = specs[i]; + RegisterSpec s2 = otherSpecs[i]; + + if (s1 == s2) { + continue; + } + + if ((s1 == null) || !s1.equals(s2)) { + return false; + } + } + + return true; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + int len = specs.length; + int hash = 0; + + for (int i = 0; i < len; i++) { + RegisterSpec spec = specs[i]; + int oneHash = (spec == null) ? 0 : spec.hashCode(); + hash = (hash * 31) + oneHash; + } + + return hash; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + int len = specs.length; + StringBuffer sb = new StringBuffer(len * 25); + + sb.append('{'); + + boolean any = false; + for (int i = 0; i < len; i++) { + RegisterSpec spec = specs[i]; + if (spec != null) { + if (any) { + sb.append(", "); + } else { + any = true; + } + sb.append(spec); + } + } + + sb.append('}'); + return sb.toString(); + } + + /** + * Gets the maximum number of registers that may be in this instance, which + * is also the maximum-plus-one of register numbers that may be + * represented. + * + * @return {@code >= 0;} the maximum size + */ + public int getMaxSize() { + return specs.length; + } + + /** + * Gets the current size of this instance. + * + * @return {@code >= 0;} the size + */ + public int size() { + int result = size; + + if (result < 0) { + int len = specs.length; + + result = 0; + for (int i = 0; i < len; i++) { + if (specs[i] != null) { + result++; + } + } + + size = result; + } + + return result; + } + + /** + * Gets the element with the given register number, if any. + * + * @param reg {@code >= 0;} the desired register number + * @return {@code null-ok;} the element with the given register number or + * {@code null} if there is none + */ + public RegisterSpec get(int reg) { + try { + return specs[reg]; + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate the exception. + throw new IllegalArgumentException("bogus reg"); + } + } + + /** + * Gets the element with the same register number as the given + * spec, if any. This is just a convenient shorthand for + * {@code get(spec.getReg())}. + * + * @param spec {@code non-null;} spec with the desired register number + * @return {@code null-ok;} the element with the matching register number or + * {@code null} if there is none + */ + public RegisterSpec get(RegisterSpec spec) { + return get(spec.getReg()); + } + + /** + * Returns the spec in this set that's currently associated with a + * given local (type, name, and signature), or {@code null} if there is + * none. This ignores the register number of the given spec but + * matches on everything else. + * + * @param spec {@code non-null;} local to look for + * @return {@code null-ok;} first register found that matches, if any + */ + public RegisterSpec findMatchingLocal(RegisterSpec spec) { + int length = specs.length; + + for (int reg = 0; reg < length; reg++) { + RegisterSpec s = specs[reg]; + + if (s == null) { + continue; + } + + if (spec.matchesVariable(s)) { + return s; + } + } + + return null; + } + + /** + * Returns the spec in this set that's currently associated with a given + * local (name and signature), or {@code null} if there is none. + * + * @param local {@code non-null;} local item to search for + * @return {@code null-ok;} first register found with matching name and signature + */ + public RegisterSpec localItemToSpec(LocalItem local) { + int length = specs.length; + + for (int reg = 0; reg < length; reg++) { + RegisterSpec spec = specs[reg]; + + if ((spec != null) && local.equals(spec.getLocalItem())) { + return spec; + } + } + + return null; + } + + /** + * Removes a spec from the set. Only the register number + * of the parameter is significant. + * + * @param toRemove {@code non-null;} register to remove. + */ + public void remove(RegisterSpec toRemove) { + try { + specs[toRemove.getReg()] = null; + size = -1; + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate the exception. + throw new IllegalArgumentException("bogus reg"); + } + } + + /** + * Puts the given spec into the set. If there is already an element in + * the set with the same register number, it is replaced. Additionally, + * if the previous element is for a category-2 register, then that + * previous element is nullified. Finally, if the given spec is for + * a category-2 register, then the immediately subsequent element + * is nullified. + * + * @param spec {@code non-null;} the register spec to put in the instance + */ + public void put(RegisterSpec spec) { + throwIfImmutable(); + + if (spec == null) { + throw new NullPointerException("spec == null"); + } + + size = -1; + + try { + int reg = spec.getReg(); + specs[reg] = spec; + + if (reg > 0) { + int prevReg = reg - 1; + RegisterSpec prevSpec = specs[prevReg]; + if ((prevSpec != null) && (prevSpec.getCategory() == 2)) { + specs[prevReg] = null; + } + } + + if (spec.getCategory() == 2) { + specs[reg + 1] = null; + } + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate the exception. + throw new IllegalArgumentException("spec.getReg() out of range"); + } + } + + /** + * Put the entire contents of the given set into this one. + * + * @param set {@code non-null;} the set to put into this instance + */ + public void putAll(RegisterSpecSet set) { + int max = set.getMaxSize(); + + for (int i = 0; i < max; i++) { + RegisterSpec spec = set.get(i); + if (spec != null) { + put(spec); + } + } + } + + /** + * Intersects this instance with the given one, modifying this + * instance. The intersection consists of the pairwise + * {@link RegisterSpec#intersect} of corresponding elements from + * this instance and the given one where both are non-null. + * + * @param other {@code non-null;} set to intersect with + * @param localPrimary whether local variables are primary to + * the intersection; if {@code true}, then the only non-null + * result elements occur when registers being intersected have + * equal names (or both have {@code null} names) + */ + public void intersect(RegisterSpecSet other, boolean localPrimary) { + throwIfImmutable(); + + RegisterSpec[] otherSpecs = other.specs; + int thisLen = specs.length; + int len = Math.min(thisLen, otherSpecs.length); + + size = -1; + + for (int i = 0; i < len; i++) { + RegisterSpec spec = specs[i]; + + if (spec == null) { + continue; + } + + RegisterSpec intersection = + spec.intersect(otherSpecs[i], localPrimary); + if (intersection != spec) { + specs[i] = intersection; + } + } + + for (int i = len; i < thisLen; i++) { + specs[i] = null; + } + } + + /** + * Returns an instance that is identical to this one, except that + * all register numbers are offset by the given amount. Mutability + * of the result is inherited from the original. + * + * @param delta the amount to offset the register numbers by + * @return {@code non-null;} an appropriately-constructed instance + */ + public RegisterSpecSet withOffset(int delta) { + int len = specs.length; + RegisterSpecSet result = new RegisterSpecSet(len + delta); + + for (int i = 0; i < len; i++) { + RegisterSpec spec = specs[i]; + if (spec != null) { + result.put(spec.withOffset(delta)); + } + } + + result.size = size; + + if (isImmutable()) { + result.setImmutable(); + } + + return result; + } + + /** + * Makes and return a mutable copy of this instance. + * + * @return {@code non-null;} the mutable copy + */ + public RegisterSpecSet mutableCopy() { + int len = specs.length; + RegisterSpecSet copy = new RegisterSpecSet(len); + + for (int i = 0; i < len; i++) { + RegisterSpec spec = specs[i]; + if (spec != null) { + copy.put(spec); + } + } + + copy.size = size; + + return copy; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/Rop.java b/dexgen/src/com/android/dexgen/rop/code/Rop.java new file mode 100644 index 0000000..db9a6c2 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/Rop.java @@ -0,0 +1,407 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.Hex; + +/** + * Class that describes all the immutable parts of register-based operations. + */ +public final class Rop { + /** minimum {@code BRANCH_*} value */ + public static final int BRANCH_MIN = 1; + + /** indicates a non-branching op */ + public static final int BRANCH_NONE = 1; + + /** indicates a function/method return */ + public static final int BRANCH_RETURN = 2; + + /** indicates an unconditional goto */ + public static final int BRANCH_GOTO = 3; + + /** indicates a two-way branch */ + public static final int BRANCH_IF = 4; + + /** indicates a switch-style branch */ + public static final int BRANCH_SWITCH = 5; + + /** indicates a throw-style branch (both always-throws and may-throw) */ + public static final int BRANCH_THROW = 6; + + /** maximum {@code BRANCH_*} value */ + public static final int BRANCH_MAX = 6; + + /** the opcode; one of the constants in {@link RegOps} */ + private final int opcode; + + /** + * {@code non-null;} result type of this operation; {@link Type#VOID} for + * no-result operations + */ + private final Type result; + + /** {@code non-null;} types of all the sources of this operation */ + private final TypeList sources; + + /** {@code non-null;} list of possible types thrown by this operation */ + private final TypeList exceptions; + + /** + * the branchingness of this op; one of the {@code BRANCH_*} + * constants in this class + */ + private final int branchingness; + + /** whether this is a function/method call op or similar */ + private final boolean isCallLike; + + /** {@code null-ok;} nickname, if specified (used for debugging) */ + private final String nickname; + + /** + * Constructs an instance. This method is private. Use one of the + * public constructors. + * + * @param opcode the opcode; one of the constants in {@link RegOps} + * @param result {@code non-null;} result type of this operation; {@link + * Type#VOID} for no-result operations + * @param sources {@code non-null;} types of all the sources of this operation + * @param exceptions {@code non-null;} list of possible types thrown by this + * operation + * @param branchingness the branchingness of this op; one of the + * {@code BRANCH_*} constants + * @param isCallLike whether the op is a function/method call or similar + * @param nickname {@code null-ok;} optional nickname (used for debugging) + */ + public Rop(int opcode, Type result, TypeList sources, + TypeList exceptions, int branchingness, boolean isCallLike, + String nickname) { + if (result == null) { + throw new NullPointerException("result == null"); + } + + if (sources == null) { + throw new NullPointerException("sources == null"); + } + + if (exceptions == null) { + throw new NullPointerException("exceptions == null"); + } + + if ((branchingness < BRANCH_MIN) || (branchingness > BRANCH_MAX)) { + throw new IllegalArgumentException("bogus branchingness"); + } + + if ((exceptions.size() != 0) && (branchingness != BRANCH_THROW)) { + throw new IllegalArgumentException("exceptions / branchingness " + + "mismatch"); + } + + this.opcode = opcode; + this.result = result; + this.sources = sources; + this.exceptions = exceptions; + this.branchingness = branchingness; + this.isCallLike = isCallLike; + this.nickname = nickname; + } + + /** + * Constructs an instance. The constructed instance is never a + * call-like op (see {@link #isCallLike}). + * + * @param opcode the opcode; one of the constants in {@link RegOps} + * @param result {@code non-null;} result type of this operation; {@link + * Type#VOID} for no-result operations + * @param sources {@code non-null;} types of all the sources of this operation + * @param exceptions {@code non-null;} list of possible types thrown by this + * operation + * @param branchingness the branchingness of this op; one of the + * {@code BRANCH_*} constants + * @param nickname {@code null-ok;} optional nickname (used for debugging) + */ + public Rop(int opcode, Type result, TypeList sources, + TypeList exceptions, int branchingness, String nickname) { + this(opcode, result, sources, exceptions, branchingness, false, + nickname); + } + + /** + * Constructs a no-exception instance. The constructed instance is never a + * call-like op (see {@link #isCallLike}). + * + * @param opcode the opcode; one of the constants in {@link RegOps} + * @param result {@code non-null;} result type of this operation; {@link + * Type#VOID} for no-result operations + * @param sources {@code non-null;} types of all the sources of this operation + * @param branchingness the branchingness of this op; one of the + * {@code BRANCH_*} constants + * @param nickname {@code null-ok;} optional nickname (used for debugging) + */ + public Rop(int opcode, Type result, TypeList sources, int branchingness, + String nickname) { + this(opcode, result, sources, StdTypeList.EMPTY, branchingness, false, + nickname); + } + + /** + * Constructs a non-branching no-exception instance. The + * {@code branchingness} is always {@code BRANCH_NONE}, + * and it is never a call-like op (see {@link #isCallLike}). + * + * @param opcode the opcode; one of the constants in {@link RegOps} + * @param result {@code non-null;} result type of this operation; {@link + * Type#VOID} for no-result operations + * @param sources {@code non-null;} types of all the sources of this operation + * @param nickname {@code null-ok;} optional nickname (used for debugging) + */ + public Rop(int opcode, Type result, TypeList sources, String nickname) { + this(opcode, result, sources, StdTypeList.EMPTY, Rop.BRANCH_NONE, + false, nickname); + } + + /** + * Constructs a non-empty exceptions instance. Its + * {@code branchingness} is always {@code BRANCH_THROW}, + * but it is never a call-like op (see {@link #isCallLike}). + * + * @param opcode the opcode; one of the constants in {@link RegOps} + * @param result {@code non-null;} result type of this operation; {@link + * Type#VOID} for no-result operations + * @param sources {@code non-null;} types of all the sources of this operation + * @param exceptions {@code non-null;} list of possible types thrown by this + * operation + * @param nickname {@code null-ok;} optional nickname (used for debugging) + */ + public Rop(int opcode, Type result, TypeList sources, TypeList exceptions, + String nickname) { + this(opcode, result, sources, exceptions, Rop.BRANCH_THROW, false, + nickname); + } + + /** + * Constructs a non-nicknamed instance with non-empty exceptions, which + * is always a call-like op (see {@link #isCallLike}). Its + * {@code branchingness} is always {@code BRANCH_THROW}. + * + * @param opcode the opcode; one of the constants in {@link RegOps} + * @param sources {@code non-null;} types of all the sources of this operation + * @param exceptions {@code non-null;} list of possible types thrown by this + * operation + */ + public Rop(int opcode, TypeList sources, TypeList exceptions) { + this(opcode, Type.VOID, sources, exceptions, Rop.BRANCH_THROW, true, + null); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (this == other) { + // Easy out. + return true; + } + + if (!(other instanceof Rop)) { + return false; + } + + Rop rop = (Rop) other; + + return (opcode == rop.opcode) && + (branchingness == rop.branchingness) && + (result == rop.result) && + sources.equals(rop.sources) && + exceptions.equals(rop.exceptions); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + int h = (opcode * 31) + branchingness; + h = (h * 31) + result.hashCode(); + h = (h * 31) + sources.hashCode(); + h = (h * 31) + exceptions.hashCode(); + + return h; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(40); + + sb.append("Rop{"); + + sb.append(RegOps.opName(opcode)); + + if (result != Type.VOID) { + sb.append(" "); + sb.append(result); + } else { + sb.append(" ."); + } + + sb.append(" <-"); + + int sz = sources.size(); + if (sz == 0) { + sb.append(" ."); + } else { + for (int i = 0; i < sz; i++) { + sb.append(' '); + sb.append(sources.getType(i)); + } + } + + if (isCallLike) { + sb.append(" call"); + } + + sz = exceptions.size(); + if (sz != 0) { + sb.append(" throws"); + for (int i = 0; i < sz; i++) { + sb.append(' '); + Type one = exceptions.getType(i); + if (one == Type.THROWABLE) { + sb.append(""); + } else { + sb.append(exceptions.getType(i)); + } + } + } else { + switch (branchingness) { + case BRANCH_NONE: sb.append(" flows"); break; + case BRANCH_RETURN: sb.append(" returns"); break; + case BRANCH_GOTO: sb.append(" gotos"); break; + case BRANCH_IF: sb.append(" ifs"); break; + case BRANCH_SWITCH: sb.append(" switches"); break; + default: sb.append(" " + Hex.u1(branchingness)); break; + } + } + + sb.append('}'); + + return sb.toString(); + } + + /** + * Gets the opcode. + * + * @return the opcode + */ + public int getOpcode() { + return opcode; + } + + /** + * Gets the result type. A return value of {@link Type#VOID} + * means this operation returns nothing. + * + * @return {@code null-ok;} the result spec + */ + public Type getResult() { + return result; + } + + /** + * Gets the source types. + * + * @return {@code non-null;} the source types + */ + public TypeList getSources() { + return sources; + } + + /** + * Gets the list of exception types that might be thrown. + * + * @return {@code non-null;} the list of exception types + */ + public TypeList getExceptions() { + return exceptions; + } + + /** + * Gets the branchingness of this instance. + * + * @return the branchingness + */ + public int getBranchingness() { + return branchingness; + } + + /** + * Gets whether this opcode is a function/method call or similar. + * + * @return {@code true} iff this opcode is call-like + */ + public boolean isCallLike() { + return isCallLike; + } + + + /** + * Gets whether this opcode is commutative (the order of its sources are + * unimportant) or not. All commutative Rops have exactly two sources and + * have no branchiness. + * + * @return true if rop is commutative + */ + public boolean isCommutative() { + switch (opcode) { + case RegOps.AND: + case RegOps.OR: + case RegOps.XOR: + case RegOps.ADD: + case RegOps.MUL: + return true; + default: + return false; + } + } + + /** + * Gets the nickname. If this instance has no nickname, this returns + * the result of calling {@link #toString}. + * + * @return {@code non-null;} the nickname + */ + public String getNickname() { + if (nickname != null) { + return nickname; + } + + return toString(); + } + + /** + * Gets whether this operation can possibly throw an exception. This + * is just a convenient wrapper for + * {@code getExceptions().size() != 0}. + * + * @return {@code true} iff this operation can possibly throw + */ + public final boolean canThrow() { + return (exceptions.size() != 0); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/RopMethod.java b/dexgen/src/com/android/dexgen/rop/code/RopMethod.java new file mode 100644 index 0000000..ba65b3f --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/RopMethod.java @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.util.Bits; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.IntList; + +/** + * All of the parts that make up a method at the rop layer. + */ +public final class RopMethod { + /** {@code non-null;} basic block list of the method */ + private final BasicBlockList blocks; + + /** {@code >= 0;} label for the block which starts the method */ + private final int firstLabel; + + /** + * {@code null-ok;} array of predecessors for each block, indexed by block + * label + */ + private IntList[] predecessors; + + /** + * {@code null-ok;} the predecessors for the implicit "exit" block, that is + * the labels for the blocks that return, if calculated + */ + private IntList exitPredecessors; + + /** + * Constructs an instance. + * + * @param blocks {@code non-null;} basic block list of the method + * @param firstLabel {@code >= 0;} the label of the first block to execute + */ + public RopMethod(BasicBlockList blocks, int firstLabel) { + if (blocks == null) { + throw new NullPointerException("blocks == null"); + } + + if (firstLabel < 0) { + throw new IllegalArgumentException("firstLabel < 0"); + } + + this.blocks = blocks; + this.firstLabel = firstLabel; + + this.predecessors = null; + this.exitPredecessors = null; + } + + /** + * Gets the basic block list for this method. + * + * @return {@code non-null;} the list + */ + public BasicBlockList getBlocks() { + return blocks; + } + + /** + * Gets the label for the first block in the method that this list + * represents. + * + * @return {@code >= 0;} the first-block label + */ + public int getFirstLabel() { + return firstLabel; + } + + /** + * Gets the predecessors associated with the given block. This throws + * an exception if there is no block with the given label. + * + * @param label {@code >= 0;} the label of the block in question + * @return {@code non-null;} the predecessors of that block + */ + public IntList labelToPredecessors(int label) { + if (exitPredecessors == null) { + calcPredecessors(); + } + + IntList result = predecessors[label]; + + if (result == null) { + throw new RuntimeException("no such block: " + Hex.u2(label)); + } + + return result; + } + + /** + * Gets the exit predecessors for this instance. + * + * @return {@code non-null;} the exit predecessors + */ + public IntList getExitPredecessors() { + if (exitPredecessors == null) { + calcPredecessors(); + } + + return exitPredecessors; + } + + + /** + * Returns an instance that is identical to this one, except that + * the registers in each instruction are offset by the given + * amount. + * + * @param delta the amount to offset register numbers by + * @return {@code non-null;} an appropriately-constructed instance + */ + public RopMethod withRegisterOffset(int delta) { + RopMethod result = new RopMethod(blocks.withRegisterOffset(delta), + firstLabel); + + if (exitPredecessors != null) { + /* + * The predecessors have been calculated. It's safe to + * inject these into the new instance, since the + * transformation being applied doesn't affect the + * predecessors. + */ + result.exitPredecessors = exitPredecessors; + result.predecessors = predecessors; + } + + return result; + } + + /** + * Calculates the predecessor sets for each block as well as for the + * exit. + */ + private void calcPredecessors() { + int maxLabel = blocks.getMaxLabel(); + IntList[] predecessors = new IntList[maxLabel]; + IntList exitPredecessors = new IntList(10); + int sz = blocks.size(); + + /* + * For each block, find its successors, and add the block's label to + * the successor's predecessors. + */ + for (int i = 0; i < sz; i++) { + BasicBlock one = blocks.get(i); + int label = one.getLabel(); + IntList successors = one.getSuccessors(); + int ssz = successors.size(); + if (ssz == 0) { + // This block exits. + exitPredecessors.add(label); + } else { + for (int j = 0; j < ssz; j++) { + int succLabel = successors.get(j); + IntList succPreds = predecessors[succLabel]; + if (succPreds == null) { + succPreds = new IntList(10); + predecessors[succLabel] = succPreds; + } + succPreds.add(label); + } + } + } + + // Sort and immutablize all the predecessor lists. + for (int i = 0; i < maxLabel; i++) { + IntList preds = predecessors[i]; + if (preds != null) { + preds.sort(); + preds.setImmutable(); + } + } + + exitPredecessors.sort(); + exitPredecessors.setImmutable(); + + /* + * The start label might not ever have had any predecessors + * added to it (probably doesn't, because of how Java gets + * translated into rop form). So, check for this and rectify + * the situation if required. + */ + if (predecessors[firstLabel] == null) { + predecessors[firstLabel] = IntList.EMPTY; + } + + this.predecessors = predecessors; + this.exitPredecessors = exitPredecessors; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/Rops.java b/dexgen/src/com/android/dexgen/rop/code/Rops.java new file mode 100644 index 0000000..ad9327e --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/Rops.java @@ -0,0 +1,2086 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.cst.CstBaseMethodRef; +import com.android.dexgen.rop.cst.CstMethodRef; +import com.android.dexgen.rop.cst.CstType; +import com.android.dexgen.rop.type.Prototype; +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeBearer; +import com.android.dexgen.rop.type.TypeList; + +/** + * Standard instances of {@link Rop}. + */ +public final class Rops { + /** {@code nop()} */ + public static final Rop NOP = + new Rop(RegOps.NOP, Type.VOID, StdTypeList.EMPTY, "nop"); + + /** {@code r,x: int :: r = x;} */ + public static final Rop MOVE_INT = + new Rop(RegOps.MOVE, Type.INT, StdTypeList.INT, "move-int"); + + /** {@code r,x: long :: r = x;} */ + public static final Rop MOVE_LONG = + new Rop(RegOps.MOVE, Type.LONG, StdTypeList.LONG, "move-long"); + + /** {@code r,x: float :: r = x;} */ + public static final Rop MOVE_FLOAT = + new Rop(RegOps.MOVE, Type.FLOAT, StdTypeList.FLOAT, "move-float"); + + /** {@code r,x: double :: r = x;} */ + public static final Rop MOVE_DOUBLE = + new Rop(RegOps.MOVE, Type.DOUBLE, StdTypeList.DOUBLE, "move-double"); + + /** {@code r,x: Object :: r = x;} */ + public static final Rop MOVE_OBJECT = + new Rop(RegOps.MOVE, Type.OBJECT, StdTypeList.OBJECT, "move-object"); + + /** + * {@code r,x: ReturnAddress :: r = x;} + * + * Note that this rop-form instruction has no dex-form equivilent and + * must be removed before the dex conversion. + */ + public static final Rop MOVE_RETURN_ADDRESS = + new Rop(RegOps.MOVE, Type.RETURN_ADDRESS, + StdTypeList.RETURN_ADDRESS, "move-return-address"); + + /** {@code r,param(x): int :: r = param(x);} */ + public static final Rop MOVE_PARAM_INT = + new Rop(RegOps.MOVE_PARAM, Type.INT, StdTypeList.EMPTY, + "move-param-int"); + + /** {@code r,param(x): long :: r = param(x);} */ + public static final Rop MOVE_PARAM_LONG = + new Rop(RegOps.MOVE_PARAM, Type.LONG, StdTypeList.EMPTY, + "move-param-long"); + + /** {@code r,param(x): float :: r = param(x);} */ + public static final Rop MOVE_PARAM_FLOAT = + new Rop(RegOps.MOVE_PARAM, Type.FLOAT, StdTypeList.EMPTY, + "move-param-float"); + + /** {@code r,param(x): double :: r = param(x);} */ + public static final Rop MOVE_PARAM_DOUBLE = + new Rop(RegOps.MOVE_PARAM, Type.DOUBLE, StdTypeList.EMPTY, + "move-param-double"); + + /** {@code r,param(x): Object :: r = param(x);} */ + public static final Rop MOVE_PARAM_OBJECT = + new Rop(RegOps.MOVE_PARAM, Type.OBJECT, StdTypeList.EMPTY, + "move-param-object"); + + /** {@code r, literal: int :: r = literal;} */ + public static final Rop CONST_INT = + new Rop(RegOps.CONST, Type.INT, StdTypeList.EMPTY, "const-int"); + + /** {@code r, literal: long :: r = literal;} */ + public static final Rop CONST_LONG = + new Rop(RegOps.CONST, Type.LONG, StdTypeList.EMPTY, "const-long"); + + /** {@code r, literal: float :: r = literal;} */ + public static final Rop CONST_FLOAT = + new Rop(RegOps.CONST, Type.FLOAT, StdTypeList.EMPTY, "const-float"); + + /** {@code r, literal: double :: r = literal;} */ + public static final Rop CONST_DOUBLE = + new Rop(RegOps.CONST, Type.DOUBLE, StdTypeList.EMPTY, "const-double"); + + /** {@code r, literal: Object :: r = literal;} */ + public static final Rop CONST_OBJECT = + new Rop(RegOps.CONST, Type.OBJECT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "const-object"); + + /** {@code r, literal: Object :: r = literal;} */ + public static final Rop CONST_OBJECT_NOTHROW = + new Rop(RegOps.CONST, Type.OBJECT, StdTypeList.EMPTY, + "const-object-nothrow"); + + /** {@code goto label} */ + public static final Rop GOTO = + new Rop(RegOps.GOTO, Type.VOID, StdTypeList.EMPTY, Rop.BRANCH_GOTO, + "goto"); + + /** {@code x: int :: if (x == 0) goto label} */ + public static final Rop IF_EQZ_INT = + new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF, + "if-eqz-int"); + + /** {@code x: int :: if (x != 0) goto label} */ + public static final Rop IF_NEZ_INT = + new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF, + "if-nez-int"); + + /** {@code x: int :: if (x < 0) goto label} */ + public static final Rop IF_LTZ_INT = + new Rop(RegOps.IF_LT, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF, + "if-ltz-int"); + + /** {@code x: int :: if (x >= 0) goto label} */ + public static final Rop IF_GEZ_INT = + new Rop(RegOps.IF_GE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF, + "if-gez-int"); + + /** {@code x: int :: if (x <= 0) goto label} */ + public static final Rop IF_LEZ_INT = + new Rop(RegOps.IF_LE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF, + "if-lez-int"); + + /** {@code x: int :: if (x > 0) goto label} */ + public static final Rop IF_GTZ_INT = + new Rop(RegOps.IF_GT, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF, + "if-gtz-int"); + + /** {@code x: Object :: if (x == null) goto label} */ + public static final Rop IF_EQZ_OBJECT = + new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.OBJECT, Rop.BRANCH_IF, + "if-eqz-object"); + + /** {@code x: Object :: if (x != null) goto label} */ + public static final Rop IF_NEZ_OBJECT = + new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.OBJECT, Rop.BRANCH_IF, + "if-nez-object"); + + /** {@code x,y: int :: if (x == y) goto label} */ + public static final Rop IF_EQ_INT = + new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF, + "if-eq-int"); + + /** {@code x,y: int :: if (x != y) goto label} */ + public static final Rop IF_NE_INT = + new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF, + "if-ne-int"); + + /** {@code x,y: int :: if (x < y) goto label} */ + public static final Rop IF_LT_INT = + new Rop(RegOps.IF_LT, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF, + "if-lt-int"); + + /** {@code x,y: int :: if (x >= y) goto label} */ + public static final Rop IF_GE_INT = + new Rop(RegOps.IF_GE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF, + "if-ge-int"); + + /** {@code x,y: int :: if (x <= y) goto label} */ + public static final Rop IF_LE_INT = + new Rop(RegOps.IF_LE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF, + "if-le-int"); + + /** {@code x,y: int :: if (x > y) goto label} */ + public static final Rop IF_GT_INT = + new Rop(RegOps.IF_GT, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF, + "if-gt-int"); + + /** {@code x,y: Object :: if (x == y) goto label} */ + public static final Rop IF_EQ_OBJECT = + new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.OBJECT_OBJECT, + Rop.BRANCH_IF, "if-eq-object"); + + /** {@code x,y: Object :: if (x != y) goto label} */ + public static final Rop IF_NE_OBJECT = + new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.OBJECT_OBJECT, + Rop.BRANCH_IF, "if-ne-object"); + + /** {@code x: int :: goto switchtable[x]} */ + public static final Rop SWITCH = + new Rop(RegOps.SWITCH, Type.VOID, StdTypeList.INT, Rop.BRANCH_SWITCH, + "switch"); + + /** {@code r,x,y: int :: r = x + y;} */ + public static final Rop ADD_INT = + new Rop(RegOps.ADD, Type.INT, StdTypeList.INT_INT, "add-int"); + + /** {@code r,x,y: long :: r = x + y;} */ + public static final Rop ADD_LONG = + new Rop(RegOps.ADD, Type.LONG, StdTypeList.LONG_LONG, "add-long"); + + /** {@code r,x,y: float :: r = x + y;} */ + public static final Rop ADD_FLOAT = + new Rop(RegOps.ADD, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "add-float"); + + /** {@code r,x,y: double :: r = x + y;} */ + public static final Rop ADD_DOUBLE = + new Rop(RegOps.ADD, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE, + Rop.BRANCH_NONE, "add-double"); + + /** {@code r,x,y: int :: r = x - y;} */ + public static final Rop SUB_INT = + new Rop(RegOps.SUB, Type.INT, StdTypeList.INT_INT, "sub-int"); + + /** {@code r,x,y: long :: r = x - y;} */ + public static final Rop SUB_LONG = + new Rop(RegOps.SUB, Type.LONG, StdTypeList.LONG_LONG, "sub-long"); + + /** {@code r,x,y: float :: r = x - y;} */ + public static final Rop SUB_FLOAT = + new Rop(RegOps.SUB, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "sub-float"); + + /** {@code r,x,y: double :: r = x - y;} */ + public static final Rop SUB_DOUBLE = + new Rop(RegOps.SUB, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE, + Rop.BRANCH_NONE, "sub-double"); + + /** {@code r,x,y: int :: r = x * y;} */ + public static final Rop MUL_INT = + new Rop(RegOps.MUL, Type.INT, StdTypeList.INT_INT, "mul-int"); + + /** {@code r,x,y: long :: r = x * y;} */ + public static final Rop MUL_LONG = + new Rop(RegOps.MUL, Type.LONG, StdTypeList.LONG_LONG, "mul-long"); + + /** {@code r,x,y: float :: r = x * y;} */ + public static final Rop MUL_FLOAT = + new Rop(RegOps.MUL, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "mul-float"); + + /** {@code r,x,y: double :: r = x * y;} */ + public static final Rop MUL_DOUBLE = + new Rop(RegOps.MUL, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE, + Rop.BRANCH_NONE, "mul-double"); + + /** {@code r,x,y: int :: r = x / y;} */ + public static final Rop DIV_INT = + new Rop(RegOps.DIV, Type.INT, StdTypeList.INT_INT, + Exceptions.LIST_Error_ArithmeticException, "div-int"); + + /** {@code r,x,y: long :: r = x / y;} */ + public static final Rop DIV_LONG = + new Rop(RegOps.DIV, Type.LONG, StdTypeList.LONG_LONG, + Exceptions.LIST_Error_ArithmeticException, "div-long"); + + /** {@code r,x,y: float :: r = x / y;} */ + public static final Rop DIV_FLOAT = + new Rop(RegOps.DIV, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "div-float"); + + /** {@code r,x,y: double :: r = x / y;} */ + public static final Rop DIV_DOUBLE = + new Rop(RegOps.DIV, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE, + "div-double"); + + /** {@code r,x,y: int :: r = x % y;} */ + public static final Rop REM_INT = + new Rop(RegOps.REM, Type.INT, StdTypeList.INT_INT, + Exceptions.LIST_Error_ArithmeticException, "rem-int"); + + /** {@code r,x,y: long :: r = x % y;} */ + public static final Rop REM_LONG = + new Rop(RegOps.REM, Type.LONG, StdTypeList.LONG_LONG, + Exceptions.LIST_Error_ArithmeticException, "rem-long"); + + /** {@code r,x,y: float :: r = x % y;} */ + public static final Rop REM_FLOAT = + new Rop(RegOps.REM, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "rem-float"); + + /** {@code r,x,y: double :: r = x % y;} */ + public static final Rop REM_DOUBLE = + new Rop(RegOps.REM, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE, + "rem-double"); + + /** {@code r,x: int :: r = -x;} */ + public static final Rop NEG_INT = + new Rop(RegOps.NEG, Type.INT, StdTypeList.INT, "neg-int"); + + /** {@code r,x: long :: r = -x;} */ + public static final Rop NEG_LONG = + new Rop(RegOps.NEG, Type.LONG, StdTypeList.LONG, "neg-long"); + + /** {@code r,x: float :: r = -x;} */ + public static final Rop NEG_FLOAT = + new Rop(RegOps.NEG, Type.FLOAT, StdTypeList.FLOAT, "neg-float"); + + /** {@code r,x: double :: r = -x;} */ + public static final Rop NEG_DOUBLE = + new Rop(RegOps.NEG, Type.DOUBLE, StdTypeList.DOUBLE, "neg-double"); + + /** {@code r,x,y: int :: r = x & y;} */ + public static final Rop AND_INT = + new Rop(RegOps.AND, Type.INT, StdTypeList.INT_INT, "and-int"); + + /** {@code r,x,y: long :: r = x & y;} */ + public static final Rop AND_LONG = + new Rop(RegOps.AND, Type.LONG, StdTypeList.LONG_LONG, "and-long"); + + /** {@code r,x,y: int :: r = x | y;} */ + public static final Rop OR_INT = + new Rop(RegOps.OR, Type.INT, StdTypeList.INT_INT, "or-int"); + + /** {@code r,x,y: long :: r = x | y;} */ + public static final Rop OR_LONG = + new Rop(RegOps.OR, Type.LONG, StdTypeList.LONG_LONG, "or-long"); + + /** {@code r,x,y: int :: r = x ^ y;} */ + public static final Rop XOR_INT = + new Rop(RegOps.XOR, Type.INT, StdTypeList.INT_INT, "xor-int"); + + /** {@code r,x,y: long :: r = x ^ y;} */ + public static final Rop XOR_LONG = + new Rop(RegOps.XOR, Type.LONG, StdTypeList.LONG_LONG, "xor-long"); + + /** {@code r,x,y: int :: r = x << y;} */ + public static final Rop SHL_INT = + new Rop(RegOps.SHL, Type.INT, StdTypeList.INT_INT, "shl-int"); + + /** {@code r,x: long; y: int :: r = x << y;} */ + public static final Rop SHL_LONG = + new Rop(RegOps.SHL, Type.LONG, StdTypeList.LONG_INT, "shl-long"); + + /** {@code r,x,y: int :: r = x >> y;} */ + public static final Rop SHR_INT = + new Rop(RegOps.SHR, Type.INT, StdTypeList.INT_INT, "shr-int"); + + /** {@code r,x: long; y: int :: r = x >> y;} */ + public static final Rop SHR_LONG = + new Rop(RegOps.SHR, Type.LONG, StdTypeList.LONG_INT, "shr-long"); + + /** {@code r,x,y: int :: r = x >>> y;} */ + public static final Rop USHR_INT = + new Rop(RegOps.USHR, Type.INT, StdTypeList.INT_INT, "ushr-int"); + + /** {@code r,x: long; y: int :: r = x >>> y;} */ + public static final Rop USHR_LONG = + new Rop(RegOps.USHR, Type.LONG, StdTypeList.LONG_INT, "ushr-long"); + + /** {@code r,x: int :: r = ~x;} */ + public static final Rop NOT_INT = + new Rop(RegOps.NOT, Type.INT, StdTypeList.INT, "not-int"); + + /** {@code r,x: long :: r = ~x;} */ + public static final Rop NOT_LONG = + new Rop(RegOps.NOT, Type.LONG, StdTypeList.LONG, "not-long"); + + /** {@code r,x,c: int :: r = x + c;} */ + public static final Rop ADD_CONST_INT = + new Rop(RegOps.ADD, Type.INT, StdTypeList.INT, "add-const-int"); + + /** {@code r,x,c: long :: r = x + c;} */ + public static final Rop ADD_CONST_LONG = + new Rop(RegOps.ADD, Type.LONG, StdTypeList.LONG, "add-const-long"); + + /** {@code r,x,c: float :: r = x + c;} */ + public static final Rop ADD_CONST_FLOAT = + new Rop(RegOps.ADD, Type.FLOAT, StdTypeList.FLOAT, "add-const-float"); + + /** {@code r,x,c: double :: r = x + c;} */ + public static final Rop ADD_CONST_DOUBLE = + new Rop(RegOps.ADD, Type.DOUBLE, StdTypeList.DOUBLE, + "add-const-double"); + + /** {@code r,x,c: int :: r = x - c;} */ + public static final Rop SUB_CONST_INT = + new Rop(RegOps.SUB, Type.INT, StdTypeList.INT, "sub-const-int"); + + /** {@code r,x,c: long :: r = x - c;} */ + public static final Rop SUB_CONST_LONG = + new Rop(RegOps.SUB, Type.LONG, StdTypeList.LONG, "sub-const-long"); + + /** {@code r,x,c: float :: r = x - c;} */ + public static final Rop SUB_CONST_FLOAT = + new Rop(RegOps.SUB, Type.FLOAT, StdTypeList.FLOAT, "sub-const-float"); + + /** {@code r,x,c: double :: r = x - c;} */ + public static final Rop SUB_CONST_DOUBLE = + new Rop(RegOps.SUB, Type.DOUBLE, StdTypeList.DOUBLE, + "sub-const-double"); + + /** {@code r,x,c: int :: r = x * c;} */ + public static final Rop MUL_CONST_INT = + new Rop(RegOps.MUL, Type.INT, StdTypeList.INT, "mul-const-int"); + + /** {@code r,x,c: long :: r = x * c;} */ + public static final Rop MUL_CONST_LONG = + new Rop(RegOps.MUL, Type.LONG, StdTypeList.LONG, "mul-const-long"); + + /** {@code r,x,c: float :: r = x * c;} */ + public static final Rop MUL_CONST_FLOAT = + new Rop(RegOps.MUL, Type.FLOAT, StdTypeList.FLOAT, "mul-const-float"); + + /** {@code r,x,c: double :: r = x * c;} */ + public static final Rop MUL_CONST_DOUBLE = + new Rop(RegOps.MUL, Type.DOUBLE, StdTypeList.DOUBLE, + "mul-const-double"); + + /** {@code r,x,c: int :: r = x / c;} */ + public static final Rop DIV_CONST_INT = + new Rop(RegOps.DIV, Type.INT, StdTypeList.INT, + Exceptions.LIST_Error_ArithmeticException, "div-const-int"); + + /** {@code r,x,c: long :: r = x / c;} */ + public static final Rop DIV_CONST_LONG = + new Rop(RegOps.DIV, Type.LONG, StdTypeList.LONG, + Exceptions.LIST_Error_ArithmeticException, "div-const-long"); + + /** {@code r,x,c: float :: r = x / c;} */ + public static final Rop DIV_CONST_FLOAT = + new Rop(RegOps.DIV, Type.FLOAT, StdTypeList.FLOAT, "div-const-float"); + + /** {@code r,x,c: double :: r = x / c;} */ + public static final Rop DIV_CONST_DOUBLE = + new Rop(RegOps.DIV, Type.DOUBLE, StdTypeList.DOUBLE, + "div-const-double"); + + /** {@code r,x,c: int :: r = x % c;} */ + public static final Rop REM_CONST_INT = + new Rop(RegOps.REM, Type.INT, StdTypeList.INT, + Exceptions.LIST_Error_ArithmeticException, "rem-const-int"); + + /** {@code r,x,c: long :: r = x % c;} */ + public static final Rop REM_CONST_LONG = + new Rop(RegOps.REM, Type.LONG, StdTypeList.LONG, + Exceptions.LIST_Error_ArithmeticException, "rem-const-long"); + + /** {@code r,x,c: float :: r = x % c;} */ + public static final Rop REM_CONST_FLOAT = + new Rop(RegOps.REM, Type.FLOAT, StdTypeList.FLOAT, "rem-const-float"); + + /** {@code r,x,c: double :: r = x % c;} */ + public static final Rop REM_CONST_DOUBLE = + new Rop(RegOps.REM, Type.DOUBLE, StdTypeList.DOUBLE, + "rem-const-double"); + + /** {@code r,x,c: int :: r = x & c;} */ + public static final Rop AND_CONST_INT = + new Rop(RegOps.AND, Type.INT, StdTypeList.INT, "and-const-int"); + + /** {@code r,x,c: long :: r = x & c;} */ + public static final Rop AND_CONST_LONG = + new Rop(RegOps.AND, Type.LONG, StdTypeList.LONG, "and-const-long"); + + /** {@code r,x,c: int :: r = x | c;} */ + public static final Rop OR_CONST_INT = + new Rop(RegOps.OR, Type.INT, StdTypeList.INT, "or-const-int"); + + /** {@code r,x,c: long :: r = x | c;} */ + public static final Rop OR_CONST_LONG = + new Rop(RegOps.OR, Type.LONG, StdTypeList.LONG, "or-const-long"); + + /** {@code r,x,c: int :: r = x ^ c;} */ + public static final Rop XOR_CONST_INT = + new Rop(RegOps.XOR, Type.INT, StdTypeList.INT, "xor-const-int"); + + /** {@code r,x,c: long :: r = x ^ c;} */ + public static final Rop XOR_CONST_LONG = + new Rop(RegOps.XOR, Type.LONG, StdTypeList.LONG, "xor-const-long"); + + /** {@code r,x,c: int :: r = x << c;} */ + public static final Rop SHL_CONST_INT = + new Rop(RegOps.SHL, Type.INT, StdTypeList.INT, "shl-const-int"); + + /** {@code r,x: long; c: int :: r = x << c;} */ + public static final Rop SHL_CONST_LONG = + new Rop(RegOps.SHL, Type.LONG, StdTypeList.INT, "shl-const-long"); + + /** {@code r,x,c: int :: r = x >> c;} */ + public static final Rop SHR_CONST_INT = + new Rop(RegOps.SHR, Type.INT, StdTypeList.INT, "shr-const-int"); + + /** {@code r,x: long; c: int :: r = x >> c;} */ + public static final Rop SHR_CONST_LONG = + new Rop(RegOps.SHR, Type.LONG, StdTypeList.INT, "shr-const-long"); + + /** {@code r,x,c: int :: r = x >>> c;} */ + public static final Rop USHR_CONST_INT = + new Rop(RegOps.USHR, Type.INT, StdTypeList.INT, "ushr-const-int"); + + /** {@code r,x: long; c: int :: r = x >>> c;} */ + public static final Rop USHR_CONST_LONG = + new Rop(RegOps.USHR, Type.LONG, StdTypeList.INT, "ushr-const-long"); + + /** {@code r: int; x,y: long :: r = cmp(x, y);} */ + public static final Rop CMPL_LONG = + new Rop(RegOps.CMPL, Type.INT, StdTypeList.LONG_LONG, "cmpl-long"); + + /** {@code r: int; x,y: float :: r = cmpl(x, y);} */ + public static final Rop CMPL_FLOAT = + new Rop(RegOps.CMPL, Type.INT, StdTypeList.FLOAT_FLOAT, "cmpl-float"); + + /** {@code r: int; x,y: double :: r = cmpl(x, y);} */ + public static final Rop CMPL_DOUBLE = + new Rop(RegOps.CMPL, Type.INT, StdTypeList.DOUBLE_DOUBLE, + "cmpl-double"); + + /** {@code r: int; x,y: float :: r = cmpg(x, y);} */ + public static final Rop CMPG_FLOAT = + new Rop(RegOps.CMPG, Type.INT, StdTypeList.FLOAT_FLOAT, "cmpg-float"); + + /** {@code r: int; x,y: double :: r = cmpg(x, y);} */ + public static final Rop CMPG_DOUBLE = + new Rop(RegOps.CMPG, Type.INT, StdTypeList.DOUBLE_DOUBLE, + "cmpg-double"); + + /** {@code r: int; x: long :: r = (int) x} */ + public static final Rop CONV_L2I = + new Rop(RegOps.CONV, Type.INT, StdTypeList.LONG, "conv-l2i"); + + /** {@code r: int; x: float :: r = (int) x} */ + public static final Rop CONV_F2I = + new Rop(RegOps.CONV, Type.INT, StdTypeList.FLOAT, "conv-f2i"); + + /** {@code r: int; x: double :: r = (int) x} */ + public static final Rop CONV_D2I = + new Rop(RegOps.CONV, Type.INT, StdTypeList.DOUBLE, "conv-d2i"); + + /** {@code r: long; x: int :: r = (long) x} */ + public static final Rop CONV_I2L = + new Rop(RegOps.CONV, Type.LONG, StdTypeList.INT, "conv-i2l"); + + /** {@code r: long; x: float :: r = (long) x} */ + public static final Rop CONV_F2L = + new Rop(RegOps.CONV, Type.LONG, StdTypeList.FLOAT, "conv-f2l"); + + /** {@code r: long; x: double :: r = (long) x} */ + public static final Rop CONV_D2L = + new Rop(RegOps.CONV, Type.LONG, StdTypeList.DOUBLE, "conv-d2l"); + + /** {@code r: float; x: int :: r = (float) x} */ + public static final Rop CONV_I2F = + new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.INT, "conv-i2f"); + + /** {@code r: float; x: long :: r = (float) x} */ + public static final Rop CONV_L2F = + new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.LONG, "conv-l2f"); + + /** {@code r: float; x: double :: r = (float) x} */ + public static final Rop CONV_D2F = + new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.DOUBLE, "conv-d2f"); + + /** {@code r: double; x: int :: r = (double) x} */ + public static final Rop CONV_I2D = + new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.INT, "conv-i2d"); + + /** {@code r: double; x: long :: r = (double) x} */ + public static final Rop CONV_L2D = + new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.LONG, "conv-l2d"); + + /** {@code r: double; x: float :: r = (double) x} */ + public static final Rop CONV_F2D = + new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.FLOAT, "conv-f2d"); + + /** + * {@code r,x: int :: r = (x << 24) >> 24} (Java-style + * convert int to byte) + */ + public static final Rop TO_BYTE = + new Rop(RegOps.TO_BYTE, Type.INT, StdTypeList.INT, "to-byte"); + + /** + * {@code r,x: int :: r = x & 0xffff} (Java-style + * convert int to char) + */ + public static final Rop TO_CHAR = + new Rop(RegOps.TO_CHAR, Type.INT, StdTypeList.INT, "to-char"); + + /** + * {@code r,x: int :: r = (x << 16) >> 16} (Java-style + * convert int to short) + */ + public static final Rop TO_SHORT = + new Rop(RegOps.TO_SHORT, Type.INT, StdTypeList.INT, "to-short"); + + /** {@code return void} */ + public static final Rop RETURN_VOID = + new Rop(RegOps.RETURN, Type.VOID, StdTypeList.EMPTY, Rop.BRANCH_RETURN, + "return-void"); + + /** {@code x: int; return x} */ + public static final Rop RETURN_INT = + new Rop(RegOps.RETURN, Type.VOID, StdTypeList.INT, Rop.BRANCH_RETURN, + "return-int"); + + /** {@code x: long; return x} */ + public static final Rop RETURN_LONG = + new Rop(RegOps.RETURN, Type.VOID, StdTypeList.LONG, Rop.BRANCH_RETURN, + "return-long"); + + /** {@code x: float; return x} */ + public static final Rop RETURN_FLOAT = + new Rop(RegOps.RETURN, Type.VOID, StdTypeList.FLOAT, Rop.BRANCH_RETURN, + "return-float"); + + /** {@code x: double; return x} */ + public static final Rop RETURN_DOUBLE = + new Rop(RegOps.RETURN, Type.VOID, StdTypeList.DOUBLE, + Rop.BRANCH_RETURN, "return-double"); + + /** {@code x: Object; return x} */ + public static final Rop RETURN_OBJECT = + new Rop(RegOps.RETURN, Type.VOID, StdTypeList.OBJECT, + Rop.BRANCH_RETURN, "return-object"); + + /** {@code T: any type; r: int; x: T[]; :: r = x.length} */ + public static final Rop ARRAY_LENGTH = + new Rop(RegOps.ARRAY_LENGTH, Type.INT, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, "array-length"); + + /** {@code x: Throwable :: throw(x)} */ + public static final Rop THROW = + new Rop(RegOps.THROW, Type.VOID, StdTypeList.THROWABLE, + StdTypeList.THROWABLE, "throw"); + + /** {@code x: Object :: monitorenter(x)} */ + public static final Rop MONITOR_ENTER = + new Rop(RegOps.MONITOR_ENTER, Type.VOID, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, "monitor-enter"); + + /** {@code x: Object :: monitorexit(x)} */ + public static final Rop MONITOR_EXIT = + new Rop(RegOps.MONITOR_EXIT, Type.VOID, StdTypeList.OBJECT, + Exceptions.LIST_Error_Null_IllegalMonitorStateException, + "monitor-exit"); + + /** {@code r,y: int; x: int[] :: r = x[y]} */ + public static final Rop AGET_INT = + new Rop(RegOps.AGET, Type.INT, StdTypeList.INTARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aget-int"); + + /** {@code r: long; x: long[]; y: int :: r = x[y]} */ + public static final Rop AGET_LONG = + new Rop(RegOps.AGET, Type.LONG, StdTypeList.LONGARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aget-long"); + + /** {@code r: float; x: float[]; y: int :: r = x[y]} */ + public static final Rop AGET_FLOAT = + new Rop(RegOps.AGET, Type.FLOAT, StdTypeList.FLOATARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aget-float"); + + /** {@code r: double; x: double[]; y: int :: r = x[y]} */ + public static final Rop AGET_DOUBLE = + new Rop(RegOps.AGET, Type.DOUBLE, StdTypeList.DOUBLEARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aget-double"); + + /** {@code r: Object; x: Object[]; y: int :: r = x[y]} */ + public static final Rop AGET_OBJECT = + new Rop(RegOps.AGET, Type.OBJECT, StdTypeList.OBJECTARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aget-object"); + + /** {@code r: boolean; x: boolean[]; y: int :: r = x[y]} */ + public static final Rop AGET_BOOLEAN = + new Rop(RegOps.AGET, Type.INT, StdTypeList.BOOLEANARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aget-boolean"); + + /** {@code r: byte; x: byte[]; y: int :: r = x[y]} */ + public static final Rop AGET_BYTE = + new Rop(RegOps.AGET, Type.INT, StdTypeList.BYTEARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aget-byte"); + + /** {@code r: char; x: char[]; y: int :: r = x[y]} */ + public static final Rop AGET_CHAR = + new Rop(RegOps.AGET, Type.INT, StdTypeList.CHARARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aget-char"); + + /** {@code r: short; x: short[]; y: int :: r = x[y]} */ + public static final Rop AGET_SHORT = + new Rop(RegOps.AGET, Type.INT, StdTypeList.SHORTARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aget-short"); + + /** {@code x,z: int; y: int[] :: y[z] = x} */ + public static final Rop APUT_INT = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_INTARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aput-int"); + + /** {@code x: long; y: long[]; z: int :: y[z] = x} */ + public static final Rop APUT_LONG = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.LONG_LONGARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aput-long"); + + /** {@code x: float; y: float[]; z: int :: y[z] = x} */ + public static final Rop APUT_FLOAT = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.FLOAT_FLOATARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aput-float"); + + /** {@code x: double; y: double[]; z: int :: y[z] = x} */ + public static final Rop APUT_DOUBLE = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.DOUBLE_DOUBLEARR_INT, + Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, + "aput-double"); + + /** {@code x: Object; y: Object[]; z: int :: y[z] = x} */ + public static final Rop APUT_OBJECT = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.OBJECT_OBJECTARR_INT, + Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, + "aput-object"); + + /** {@code x: boolean; y: boolean[]; z: int :: y[z] = x} */ + public static final Rop APUT_BOOLEAN = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_BOOLEANARR_INT, + Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, + "aput-boolean"); + + /** {@code x: byte; y: byte[]; z: int :: y[z] = x} */ + public static final Rop APUT_BYTE = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_BYTEARR_INT, + Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, "aput-byte"); + + /** {@code x: char; y: char[]; z: int :: y[z] = x} */ + public static final Rop APUT_CHAR = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_CHARARR_INT, + Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, "aput-char"); + + /** {@code x: short; y: short[]; z: int :: y[z] = x} */ + public static final Rop APUT_SHORT = + new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_SHORTARR_INT, + Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, + "aput-short"); + + /** + * {@code T: any non-array object type :: r = + * alloc(T)} (allocate heap space for an object) + */ + public static final Rop NEW_INSTANCE = + new Rop(RegOps.NEW_INSTANCE, Type.OBJECT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "new-instance"); + + /** {@code r: int[]; x: int :: r = new int[x]} */ + public static final Rop NEW_ARRAY_INT = + new Rop(RegOps.NEW_ARRAY, Type.INT_ARRAY, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-int"); + + /** {@code r: long[]; x: int :: r = new long[x]} */ + public static final Rop NEW_ARRAY_LONG = + new Rop(RegOps.NEW_ARRAY, Type.LONG_ARRAY, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-long"); + + /** {@code r: float[]; x: int :: r = new float[x]} */ + public static final Rop NEW_ARRAY_FLOAT = + new Rop(RegOps.NEW_ARRAY, Type.FLOAT_ARRAY, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-float"); + + /** {@code r: double[]; x: int :: r = new double[x]} */ + public static final Rop NEW_ARRAY_DOUBLE = + new Rop(RegOps.NEW_ARRAY, Type.DOUBLE_ARRAY, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-double"); + + /** {@code r: boolean[]; x: int :: r = new boolean[x]} */ + public static final Rop NEW_ARRAY_BOOLEAN = + new Rop(RegOps.NEW_ARRAY, Type.BOOLEAN_ARRAY, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-boolean"); + + /** {@code r: byte[]; x: int :: r = new byte[x]} */ + public static final Rop NEW_ARRAY_BYTE = + new Rop(RegOps.NEW_ARRAY, Type.BYTE_ARRAY, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-byte"); + + /** {@code r: char[]; x: int :: r = new char[x]} */ + public static final Rop NEW_ARRAY_CHAR = + new Rop(RegOps.NEW_ARRAY, Type.CHAR_ARRAY, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-char"); + + /** {@code r: short[]; x: int :: r = new short[x]} */ + public static final Rop NEW_ARRAY_SHORT = + new Rop(RegOps.NEW_ARRAY, Type.SHORT_ARRAY, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-short"); + + /** + * {@code T: any non-array object type; x: Object :: (T) x} (can + * throw {@code ClassCastException}) + */ + public static final Rop CHECK_CAST = + new Rop(RegOps.CHECK_CAST, Type.VOID, StdTypeList.OBJECT, + Exceptions.LIST_Error_ClassCastException, "check-cast"); + + /** + * {@code T: any non-array object type; x: Object :: x instanceof + * T}. Note: This is listed as throwing {@code Error} + * explicitly because the op can throw, but there are no + * other predefined exceptions for it. + */ + public static final Rop INSTANCE_OF = + new Rop(RegOps.INSTANCE_OF, Type.INT, StdTypeList.OBJECT, + Exceptions.LIST_Error, "instance-of"); + + /** + * {@code r: int; x: Object; f: instance field spec of + * type int :: r = x.f} + */ + public static final Rop GET_FIELD_INT = + new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, "get-field-int"); + + /** + * {@code r: long; x: Object; f: instance field spec of + * type long :: r = x.f} + */ + public static final Rop GET_FIELD_LONG = + new Rop(RegOps.GET_FIELD, Type.LONG, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, "get-field-long"); + + /** + * {@code r: float; x: Object; f: instance field spec of + * type float :: r = x.f} + */ + public static final Rop GET_FIELD_FLOAT = + new Rop(RegOps.GET_FIELD, Type.FLOAT, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, + "get-field-float"); + + /** + * {@code r: double; x: Object; f: instance field spec of + * type double :: r = x.f} + */ + public static final Rop GET_FIELD_DOUBLE = + new Rop(RegOps.GET_FIELD, Type.DOUBLE, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, + "get-field-double"); + + /** + * {@code r: Object; x: Object; f: instance field spec of + * type Object :: r = x.f} + */ + public static final Rop GET_FIELD_OBJECT = + new Rop(RegOps.GET_FIELD, Type.OBJECT, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, + "get-field-object"); + + /** + * {@code r: boolean; x: Object; f: instance field spec of + * type boolean :: r = x.f} + */ + public static final Rop GET_FIELD_BOOLEAN = + new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, + "get-field-boolean"); + + /** + * {@code r: byte; x: Object; f: instance field spec of + * type byte :: r = x.f} + */ + public static final Rop GET_FIELD_BYTE = + new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, + "get-field-byte"); + + /** + * {@code r: char; x: Object; f: instance field spec of + * type char :: r = x.f} + */ + public static final Rop GET_FIELD_CHAR = + new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, + "get-field-char"); + + /** + * {@code r: short; x: Object; f: instance field spec of + * type short :: r = x.f} + */ + public static final Rop GET_FIELD_SHORT = + new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT, + Exceptions.LIST_Error_NullPointerException, + "get-field-short"); + + /** {@code r: int; f: static field spec of type int :: r = f} */ + public static final Rop GET_STATIC_INT = + new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-static-int"); + + /** {@code r: long; f: static field spec of type long :: r = f} */ + public static final Rop GET_STATIC_LONG = + new Rop(RegOps.GET_STATIC, Type.LONG, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-static-long"); + + /** {@code r: float; f: static field spec of type float :: r = f} */ + public static final Rop GET_STATIC_FLOAT = + new Rop(RegOps.GET_STATIC, Type.FLOAT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-static-float"); + + /** {@code r: double; f: static field spec of type double :: r = f} */ + public static final Rop GET_STATIC_DOUBLE = + new Rop(RegOps.GET_STATIC, Type.DOUBLE, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-static-double"); + + /** {@code r: Object; f: static field spec of type Object :: r = f} */ + public static final Rop GET_STATIC_OBJECT = + new Rop(RegOps.GET_STATIC, Type.OBJECT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-static-object"); + + /** {@code r: boolean; f: static field spec of type boolean :: r = f} */ + public static final Rop GET_STATIC_BOOLEAN = + new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-field-boolean"); + + /** {@code r: byte; f: static field spec of type byte :: r = f} */ + public static final Rop GET_STATIC_BYTE = + new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-field-byte"); + + /** {@code r: char; f: static field spec of type char :: r = f} */ + public static final Rop GET_STATIC_CHAR = + new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-field-char"); + + /** {@code r: short; f: static field spec of type short :: r = f} */ + public static final Rop GET_STATIC_SHORT = + new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY, + Exceptions.LIST_Error, "get-field-short"); + + /** + * {@code x: int; y: Object; f: instance field spec of type + * int :: y.f = x} + */ + public static final Rop PUT_FIELD_INT = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT, + Exceptions.LIST_Error_NullPointerException, "put-field-int"); + + /** + * {@code x: long; y: Object; f: instance field spec of type + * long :: y.f = x} + */ + public static final Rop PUT_FIELD_LONG = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.LONG_OBJECT, + Exceptions.LIST_Error_NullPointerException, "put-field-long"); + + /** + * {@code x: float; y: Object; f: instance field spec of type + * float :: y.f = x} + */ + public static final Rop PUT_FIELD_FLOAT = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.FLOAT_OBJECT, + Exceptions.LIST_Error_NullPointerException, + "put-field-float"); + + /** + * {@code x: double; y: Object; f: instance field spec of type + * double :: y.f = x} + */ + public static final Rop PUT_FIELD_DOUBLE = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.DOUBLE_OBJECT, + Exceptions.LIST_Error_NullPointerException, + "put-field-double"); + + /** + * {@code x: Object; y: Object; f: instance field spec of type + * Object :: y.f = x} + */ + public static final Rop PUT_FIELD_OBJECT = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.OBJECT_OBJECT, + Exceptions.LIST_Error_NullPointerException, + "put-field-object"); + + /** + * {@code x: int; y: Object; f: instance field spec of type + * boolean :: y.f = x} + */ + public static final Rop PUT_FIELD_BOOLEAN = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT, + Exceptions.LIST_Error_NullPointerException, + "put-field-boolean"); + + /** + * {@code x: int; y: Object; f: instance field spec of type + * byte :: y.f = x} + */ + public static final Rop PUT_FIELD_BYTE = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT, + Exceptions.LIST_Error_NullPointerException, + "put-field-byte"); + + /** + * {@code x: int; y: Object; f: instance field spec of type + * char :: y.f = x} + */ + public static final Rop PUT_FIELD_CHAR = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT, + Exceptions.LIST_Error_NullPointerException, + "put-field-char"); + + /** + * {@code x: int; y: Object; f: instance field spec of type + * short :: y.f = x} + */ + public static final Rop PUT_FIELD_SHORT = + new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT, + Exceptions.LIST_Error_NullPointerException, + "put-field-short"); + + /** {@code f: static field spec of type int; x: int :: f = x} */ + public static final Rop PUT_STATIC_INT = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT, + Exceptions.LIST_Error, "put-static-int"); + + /** {@code f: static field spec of type long; x: long :: f = x} */ + public static final Rop PUT_STATIC_LONG = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.LONG, + Exceptions.LIST_Error, "put-static-long"); + + /** {@code f: static field spec of type float; x: float :: f = x} */ + public static final Rop PUT_STATIC_FLOAT = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.FLOAT, + Exceptions.LIST_Error, "put-static-float"); + + /** {@code f: static field spec of type double; x: double :: f = x} */ + public static final Rop PUT_STATIC_DOUBLE = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.DOUBLE, + Exceptions.LIST_Error, "put-static-double"); + + /** {@code f: static field spec of type Object; x: Object :: f = x} */ + public static final Rop PUT_STATIC_OBJECT = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.OBJECT, + Exceptions.LIST_Error, "put-static-object"); + + /** + * {@code f: static field spec of type boolean; x: boolean :: f = + * x} + */ + public static final Rop PUT_STATIC_BOOLEAN = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT, + Exceptions.LIST_Error, "put-static-boolean"); + + /** {@code f: static field spec of type byte; x: byte :: f = x} */ + public static final Rop PUT_STATIC_BYTE = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT, + Exceptions.LIST_Error, "put-static-byte"); + + /** {@code f: static field spec of type char; x: char :: f = x} */ + public static final Rop PUT_STATIC_CHAR = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT, + Exceptions.LIST_Error, "put-static-char"); + + /** {@code f: static field spec of type short; x: short :: f = x} */ + public static final Rop PUT_STATIC_SHORT = + new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT, + Exceptions.LIST_Error, "put-static-short"); + + /** {@code x: Int :: local variable begins in x} */ + public static final Rop MARK_LOCAL_INT = + new Rop (RegOps.MARK_LOCAL, Type.VOID, + StdTypeList.INT, "mark-local-int"); + + /** {@code x: Long :: local variable begins in x} */ + public static final Rop MARK_LOCAL_LONG = + new Rop (RegOps.MARK_LOCAL, Type.VOID, + StdTypeList.LONG, "mark-local-long"); + + /** {@code x: Float :: local variable begins in x} */ + public static final Rop MARK_LOCAL_FLOAT = + new Rop (RegOps.MARK_LOCAL, Type.VOID, + StdTypeList.FLOAT, "mark-local-float"); + + /** {@code x: Double :: local variable begins in x} */ + public static final Rop MARK_LOCAL_DOUBLE = + new Rop (RegOps.MARK_LOCAL, Type.VOID, + StdTypeList.DOUBLE, "mark-local-double"); + + /** {@code x: Object :: local variable begins in x} */ + public static final Rop MARK_LOCAL_OBJECT = + new Rop (RegOps.MARK_LOCAL, Type.VOID, + StdTypeList.OBJECT, "mark-local-object"); + + /** {@code T: Any primitive type; v0..vx: T :: {v0, ..., vx}} */ + public static final Rop FILL_ARRAY_DATA = + new Rop(RegOps.FILL_ARRAY_DATA, Type.VOID, StdTypeList.EMPTY, + "fill-array-data"); + + /** + * Returns the appropriate rop for the given opcode, destination, + * and sources. The result is typically, but not necessarily, a + * shared instance. + * + *

Note: This method does not do complete error checking on + * its arguments, and so it may return an instance which seemed "right + * enough" even though in actuality the passed arguments don't quite + * match what is returned. TODO: Revisit this issue.

+ * + * @param opcode the opcode + * @param dest {@code non-null;} destination (result) type, or + * {@link Type#VOID} if none + * @param sources {@code non-null;} list of source types + * @param cst {@code null-ok;} associated constant, if any + * @return {@code non-null;} an appropriate instance + */ + public static Rop ropFor(int opcode, TypeBearer dest, TypeList sources, + Constant cst) { + switch (opcode) { + case RegOps.NOP: return NOP; + case RegOps.MOVE: return opMove(dest); + case RegOps.MOVE_PARAM: return opMoveParam(dest); + case RegOps.MOVE_EXCEPTION: return opMoveException(dest); + case RegOps.CONST: return opConst(dest); + case RegOps.GOTO: return GOTO; + case RegOps.IF_EQ: return opIfEq(sources); + case RegOps.IF_NE: return opIfNe(sources); + case RegOps.IF_LT: return opIfLt(sources); + case RegOps.IF_GE: return opIfGe(sources); + case RegOps.IF_LE: return opIfLe(sources); + case RegOps.IF_GT: return opIfGt(sources); + case RegOps.SWITCH: return SWITCH; + case RegOps.ADD: return opAdd(sources); + case RegOps.SUB: return opSub(sources); + case RegOps.MUL: return opMul(sources); + case RegOps.DIV: return opDiv(sources); + case RegOps.REM: return opRem(sources); + case RegOps.NEG: return opNeg(dest); + case RegOps.AND: return opAnd(sources); + case RegOps.OR: return opOr(sources); + case RegOps.XOR: return opXor(sources); + case RegOps.SHL: return opShl(sources); + case RegOps.SHR: return opShr(sources); + case RegOps.USHR: return opUshr(sources); + case RegOps.NOT: return opNot(dest); + case RegOps.CMPL: return opCmpl(sources.getType(0)); + case RegOps.CMPG: return opCmpg(sources.getType(0)); + case RegOps.CONV: return opConv(dest, sources.getType(0)); + case RegOps.TO_BYTE: return TO_BYTE; + case RegOps.TO_CHAR: return TO_CHAR; + case RegOps.TO_SHORT: return TO_SHORT; + case RegOps.RETURN: { + if (sources.size() == 0) { + return RETURN_VOID; + } + return opReturn(sources.getType(0)); + } + case RegOps.ARRAY_LENGTH: return ARRAY_LENGTH; + case RegOps.THROW: return THROW; + case RegOps.MONITOR_ENTER: return MONITOR_ENTER; + case RegOps.MONITOR_EXIT: return MONITOR_EXIT; + case RegOps.AGET: { + Type source = sources.getType(0); + Type componentType; + if (source == Type.KNOWN_NULL) { + /* + * Treat a known-null as an array of the expected + * result type. + */ + componentType = dest.getType(); + } else { + componentType = source.getComponentType(); + } + return opAget(componentType); + } + case RegOps.APUT: { + Type source = sources.getType(1); + Type componentType; + if (source == Type.KNOWN_NULL) { + /* + * Treat a known-null as an array of the type being + * stored. + */ + componentType = sources.getType(0); + } else { + componentType = source.getComponentType(); + } + return opAput(componentType); + } + case RegOps.NEW_INSTANCE: return NEW_INSTANCE; + case RegOps.NEW_ARRAY: return opNewArray(dest.getType()); + case RegOps.CHECK_CAST: return CHECK_CAST; + case RegOps.INSTANCE_OF: return INSTANCE_OF; + case RegOps.GET_FIELD: return opGetField(dest); + case RegOps.GET_STATIC: return opGetStatic(dest); + case RegOps.PUT_FIELD: return opPutField(sources.getType(0)); + case RegOps.PUT_STATIC: return opPutStatic(sources.getType(0)); + case RegOps.INVOKE_STATIC: { + return opInvokeStatic(((CstMethodRef) cst).getPrototype()); + } + case RegOps.INVOKE_VIRTUAL: { + CstBaseMethodRef cstMeth = (CstMethodRef) cst; + Prototype meth = cstMeth.getPrototype(); + CstType definer = cstMeth.getDefiningClass(); + meth = meth.withFirstParameter(definer.getClassType()); + return opInvokeVirtual(meth); + } + case RegOps.INVOKE_SUPER: { + CstBaseMethodRef cstMeth = (CstMethodRef) cst; + Prototype meth = cstMeth.getPrototype(); + CstType definer = cstMeth.getDefiningClass(); + meth = meth.withFirstParameter(definer.getClassType()); + return opInvokeSuper(meth); + } + case RegOps.INVOKE_DIRECT: { + CstBaseMethodRef cstMeth = (CstMethodRef) cst; + Prototype meth = cstMeth.getPrototype(); + CstType definer = cstMeth.getDefiningClass(); + meth = meth.withFirstParameter(definer.getClassType()); + return opInvokeDirect(meth); + } + case RegOps.INVOKE_INTERFACE: { + CstBaseMethodRef cstMeth = (CstMethodRef) cst; + Prototype meth = cstMeth.getPrototype(); + CstType definer = cstMeth.getDefiningClass(); + meth = meth.withFirstParameter(definer.getClassType()); + return opInvokeInterface(meth); + } + } + + throw new RuntimeException("unknown opcode " + RegOps.opName(opcode)); + } + + /** + * Returns the appropriate {@code move} rop for the given type. The + * result is a shared instance. + * + * @param type {@code non-null;} type of value being moved + * @return {@code non-null;} an appropriate instance + */ + public static Rop opMove(TypeBearer type) { + switch (type.getBasicFrameType()) { + case Type.BT_INT: return MOVE_INT; + case Type.BT_LONG: return MOVE_LONG; + case Type.BT_FLOAT: return MOVE_FLOAT; + case Type.BT_DOUBLE: return MOVE_DOUBLE; + case Type.BT_OBJECT: return MOVE_OBJECT; + case Type.BT_ADDR: return MOVE_RETURN_ADDRESS; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code move-param} rop for the + * given type. The result is a shared instance. + * + * @param type {@code non-null;} type of value being moved + * @return {@code non-null;} an appropriate instance + */ + public static Rop opMoveParam(TypeBearer type) { + switch (type.getBasicFrameType()) { + case Type.BT_INT: return MOVE_PARAM_INT; + case Type.BT_LONG: return MOVE_PARAM_LONG; + case Type.BT_FLOAT: return MOVE_PARAM_FLOAT; + case Type.BT_DOUBLE: return MOVE_PARAM_DOUBLE; + case Type.BT_OBJECT: return MOVE_PARAM_OBJECT; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code move-exception} rop for the + * given type. The result may be a shared instance. + * + * @param type {@code non-null;} type of the exception + * @return {@code non-null;} an appropriate instance + */ + public static Rop opMoveException(TypeBearer type) { + return new Rop(RegOps.MOVE_EXCEPTION, type.getType(), + StdTypeList.EMPTY, (String) null); + } + + /** + * Returns the appropriate {@code move-result} rop for the + * given type. The result may be a shared instance. + * + * @param type {@code non-null;} type of the parameter + * @return {@code non-null;} an appropriate instance + */ + public static Rop opMoveResult(TypeBearer type) { + return new Rop(RegOps.MOVE_RESULT, type.getType(), + StdTypeList.EMPTY, (String) null); + } + + /** + * Returns the appropriate {@code move-result-pseudo} rop for the + * given type. The result may be a shared instance. + * + * @param type {@code non-null;} type of the parameter + * @return {@code non-null;} an appropriate instance + */ + public static Rop opMoveResultPseudo(TypeBearer type) { + return new Rop(RegOps.MOVE_RESULT_PSEUDO, type.getType(), + StdTypeList.EMPTY, (String) null); + } + + /** + * Returns the appropriate {@code const} rop for the given + * type. The result is a shared instance. + * + * @param type {@code non-null;} type of the constant + * @return {@code non-null;} an appropriate instance + */ + public static Rop opConst(TypeBearer type) { + if (type.getType() == Type.KNOWN_NULL) { + return CONST_OBJECT_NOTHROW; + } + + switch (type.getBasicFrameType()) { + case Type.BT_INT: return CONST_INT; + case Type.BT_LONG: return CONST_LONG; + case Type.BT_FLOAT: return CONST_FLOAT; + case Type.BT_DOUBLE: return CONST_DOUBLE; + case Type.BT_OBJECT: return CONST_OBJECT; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code if-eq} rop for the given + * sources. The result is a shared instance. + * + * @param types {@code non-null;} source types + * @return {@code non-null;} an appropriate instance + */ + public static Rop opIfEq(TypeList types) { + return pickIf(types, IF_EQZ_INT, IF_EQZ_OBJECT, + IF_EQ_INT, IF_EQ_OBJECT); + } + + /** + * Returns the appropriate {@code if-ne} rop for the given + * sources. The result is a shared instance. + * + * @param types {@code non-null;} source types + * @return {@code non-null;} an appropriate instance + */ + public static Rop opIfNe(TypeList types) { + return pickIf(types, IF_NEZ_INT, IF_NEZ_OBJECT, + IF_NE_INT, IF_NE_OBJECT); + } + + /** + * Returns the appropriate {@code if-lt} rop for the given + * sources. The result is a shared instance. + * + * @param types {@code non-null;} source types + * @return {@code non-null;} an appropriate instance + */ + public static Rop opIfLt(TypeList types) { + return pickIf(types, IF_LTZ_INT, null, IF_LT_INT, null); + } + + /** + * Returns the appropriate {@code if-ge} rop for the given + * sources. The result is a shared instance. + * + * @param types {@code non-null;} source types + * @return {@code non-null;} an appropriate instance + */ + public static Rop opIfGe(TypeList types) { + return pickIf(types, IF_GEZ_INT, null, IF_GE_INT, null); + } + + /** + * Returns the appropriate {@code if-gt} rop for the given + * sources. The result is a shared instance. + * + * @param types {@code non-null;} source types + * @return {@code non-null;} an appropriate instance + */ + public static Rop opIfGt(TypeList types) { + return pickIf(types, IF_GTZ_INT, null, IF_GT_INT, null); + } + + /** + * Returns the appropriate {@code if-le} rop for the given + * sources. The result is a shared instance. + * + * @param types {@code non-null;} source types + * @return {@code non-null;} an appropriate instance + */ + public static Rop opIfLe(TypeList types) { + return pickIf(types, IF_LEZ_INT, null, IF_LE_INT, null); + } + + /** + * Helper for all the {@code if*}-related methods, which + * checks types and picks one of the four variants, throwing if + * there's a problem. + * + * @param types {@code non-null;} the types + * @param intZ {@code non-null;} the int-to-0 comparison + * @param objZ {@code null-ok;} the object-to-null comparison + * @param intInt {@code non-null;} the int-to-int comparison + * @param objObj {@code non-null;} the object-to-object comparison + * @return {@code non-null;} the appropriate instance + */ + private static Rop pickIf(TypeList types, Rop intZ, Rop objZ, Rop intInt, + Rop objObj) { + switch(types.size()) { + case 1: { + switch (types.getType(0).getBasicFrameType()) { + case Type.BT_INT: { + return intZ; + } + case Type.BT_OBJECT: { + if (objZ != null) { + return objZ; + } + } + } + break; + } + case 2: { + int bt = types.getType(0).getBasicFrameType(); + if (bt == types.getType(1).getBasicFrameType()) { + switch (bt) { + case Type.BT_INT: { + return intInt; + } + case Type.BT_OBJECT: { + if (objObj != null) { + return objObj; + } + } + } + } + break; + } + } + + return throwBadTypes(types); + } + + /** + * Returns the appropriate {@code add} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opAdd(TypeList types) { + return pickBinaryOp(types, ADD_CONST_INT, ADD_CONST_LONG, + ADD_CONST_FLOAT, ADD_CONST_DOUBLE, ADD_INT, + ADD_LONG, ADD_FLOAT, ADD_DOUBLE); + } + + /** + * Returns the appropriate {@code sub} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opSub(TypeList types) { + return pickBinaryOp(types, SUB_CONST_INT, SUB_CONST_LONG, + SUB_CONST_FLOAT, SUB_CONST_DOUBLE, SUB_INT, + SUB_LONG, SUB_FLOAT, SUB_DOUBLE); + } + + /** + * Returns the appropriate {@code mul} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opMul(TypeList types) { + return pickBinaryOp(types, MUL_CONST_INT, MUL_CONST_LONG, + MUL_CONST_FLOAT, MUL_CONST_DOUBLE, MUL_INT, + MUL_LONG, MUL_FLOAT, MUL_DOUBLE); + } + + /** + * Returns the appropriate {@code div} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opDiv(TypeList types) { + return pickBinaryOp(types, DIV_CONST_INT, DIV_CONST_LONG, + DIV_CONST_FLOAT, DIV_CONST_DOUBLE, DIV_INT, + DIV_LONG, DIV_FLOAT, DIV_DOUBLE); + } + + /** + * Returns the appropriate {@code rem} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opRem(TypeList types) { + return pickBinaryOp(types, REM_CONST_INT, REM_CONST_LONG, + REM_CONST_FLOAT, REM_CONST_DOUBLE, REM_INT, + REM_LONG, REM_FLOAT, REM_DOUBLE); + } + + /** + * Returns the appropriate {@code and} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opAnd(TypeList types) { + return pickBinaryOp(types, AND_CONST_INT, AND_CONST_LONG, null, null, + AND_INT, AND_LONG, null, null); + } + + /** + * Returns the appropriate {@code or} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opOr(TypeList types) { + return pickBinaryOp(types, OR_CONST_INT, OR_CONST_LONG, null, null, + OR_INT, OR_LONG, null, null); + } + + /** + * Returns the appropriate {@code xor} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opXor(TypeList types) { + return pickBinaryOp(types, XOR_CONST_INT, XOR_CONST_LONG, null, null, + XOR_INT, XOR_LONG, null, null); + } + + /** + * Returns the appropriate {@code shl} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opShl(TypeList types) { + return pickBinaryOp(types, SHL_CONST_INT, SHL_CONST_LONG, null, null, + SHL_INT, SHL_LONG, null, null); + } + + /** + * Returns the appropriate {@code shr} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opShr(TypeList types) { + return pickBinaryOp(types, SHR_CONST_INT, SHR_CONST_LONG, null, null, + SHR_INT, SHR_LONG, null, null); + } + + /** + * Returns the appropriate {@code ushr} rop for the given + * types. The result is a shared instance. + * + * @param types {@code non-null;} types of the sources + * @return {@code non-null;} an appropriate instance + */ + public static Rop opUshr(TypeList types) { + return pickBinaryOp(types, USHR_CONST_INT, USHR_CONST_LONG, null, null, + USHR_INT, USHR_LONG, null, null); + } + + /** + * Returns the appropriate binary arithmetic rop for the given type + * and arguments. The result is a shared instance. + * + * @param types {@code non-null;} sources of the operation + * @param int1 {@code non-null;} the int-to-constant rop + * @param long1 {@code non-null;} the long-to-constant rop + * @param float1 {@code null-ok;} the float-to-constant rop, if any + * @param double1 {@code null-ok;} the double-to-constant rop, if any + * @param int2 {@code non-null;} the int-to-int rop + * @param long2 {@code non-null;} the long-to-long or long-to-int rop + * @param float2 {@code null-ok;} the float-to-float rop, if any + * @param double2 {@code null-ok;} the double-to-double rop, if any + * @return {@code non-null;} an appropriate instance + */ + private static Rop pickBinaryOp(TypeList types, Rop int1, Rop long1, + Rop float1, Rop double1, Rop int2, + Rop long2, Rop float2, Rop double2) { + int bt1 = types.getType(0).getBasicFrameType(); + Rop result = null; + + switch (types.size()) { + case 1: { + switch(bt1) { + case Type.BT_INT: return int1; + case Type.BT_LONG: return long1; + case Type.BT_FLOAT: result = float1; break; + case Type.BT_DOUBLE: result = double1; break; + } + break; + } + case 2: { + switch(bt1) { + case Type.BT_INT: return int2; + case Type.BT_LONG: return long2; + case Type.BT_FLOAT: result = float2; break; + case Type.BT_DOUBLE: result = double2; break; + } + break; + } + } + + if (result == null) { + return throwBadTypes(types); + } + + return result; + } + + /** + * Returns the appropriate {@code neg} rop for the given type. The + * result is a shared instance. + * + * @param type {@code non-null;} type of value being operated on + * @return {@code non-null;} an appropriate instance + */ + public static Rop opNeg(TypeBearer type) { + switch (type.getBasicFrameType()) { + case Type.BT_INT: return NEG_INT; + case Type.BT_LONG: return NEG_LONG; + case Type.BT_FLOAT: return NEG_FLOAT; + case Type.BT_DOUBLE: return NEG_DOUBLE; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code not} rop for the given type. The + * result is a shared instance. + * + * @param type {@code non-null;} type of value being operated on + * @return {@code non-null;} an appropriate instance + */ + public static Rop opNot(TypeBearer type) { + switch (type.getBasicFrameType()) { + case Type.BT_INT: return NOT_INT; + case Type.BT_LONG: return NOT_LONG; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code cmpl} rop for the given type. The + * result is a shared instance. + * + * @param type {@code non-null;} type of value being compared + * @return {@code non-null;} an appropriate instance + */ + public static Rop opCmpl(TypeBearer type) { + switch (type.getBasicType()) { + case Type.BT_LONG: return CMPL_LONG; + case Type.BT_FLOAT: return CMPL_FLOAT; + case Type.BT_DOUBLE: return CMPL_DOUBLE; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code cmpg} rop for the given type. The + * result is a shared instance. + * + * @param type {@code non-null;} type of value being compared + * @return {@code non-null;} an appropriate instance + */ + public static Rop opCmpg(TypeBearer type) { + switch (type.getBasicType()) { + case Type.BT_FLOAT: return CMPG_FLOAT; + case Type.BT_DOUBLE: return CMPG_DOUBLE; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code conv} rop for the given types. The + * result is a shared instance. + * + * @param dest {@code non-null;} target value type + * @param source {@code non-null;} source value type + * @return {@code non-null;} an appropriate instance + */ + public static Rop opConv(TypeBearer dest, TypeBearer source) { + int dbt = dest.getBasicFrameType(); + switch (source.getBasicFrameType()) { + case Type.BT_INT: { + switch (dbt) { + case Type.BT_LONG: return CONV_I2L; + case Type.BT_FLOAT: return CONV_I2F; + case Type.BT_DOUBLE: return CONV_I2D; + } + } + case Type.BT_LONG: { + switch (dbt) { + case Type.BT_INT: return CONV_L2I; + case Type.BT_FLOAT: return CONV_L2F; + case Type.BT_DOUBLE: return CONV_L2D; + } + } + case Type.BT_FLOAT: { + switch (dbt) { + case Type.BT_INT: return CONV_F2I; + case Type.BT_LONG: return CONV_F2L; + case Type.BT_DOUBLE: return CONV_F2D; + } + } + case Type.BT_DOUBLE: { + switch (dbt) { + case Type.BT_INT: return CONV_D2I; + case Type.BT_LONG: return CONV_D2L; + case Type.BT_FLOAT: return CONV_D2F; + } + } + } + + return throwBadTypes(StdTypeList.make(dest.getType(), + source.getType())); + } + + /** + * Returns the appropriate {@code return} rop for the given type. The + * result is a shared instance. + * + * @param type {@code non-null;} type of value being returned + * @return {@code non-null;} an appropriate instance + */ + public static Rop opReturn(TypeBearer type) { + switch (type.getBasicFrameType()) { + case Type.BT_INT: return RETURN_INT; + case Type.BT_LONG: return RETURN_LONG; + case Type.BT_FLOAT: return RETURN_FLOAT; + case Type.BT_DOUBLE: return RETURN_DOUBLE; + case Type.BT_OBJECT: return RETURN_OBJECT; + case Type.BT_VOID: return RETURN_VOID; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code aget} rop for the given type. The + * result is a shared instance. + * + * @param type {@code non-null;} element type of array being accessed + * @return {@code non-null;} an appropriate instance + */ + public static Rop opAget(TypeBearer type) { + switch (type.getBasicType()) { + case Type.BT_INT: return AGET_INT; + case Type.BT_LONG: return AGET_LONG; + case Type.BT_FLOAT: return AGET_FLOAT; + case Type.BT_DOUBLE: return AGET_DOUBLE; + case Type.BT_OBJECT: return AGET_OBJECT; + case Type.BT_BOOLEAN: return AGET_BOOLEAN; + case Type.BT_BYTE: return AGET_BYTE; + case Type.BT_CHAR: return AGET_CHAR; + case Type.BT_SHORT: return AGET_SHORT; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code aput} rop for the given type. The + * result is a shared instance. + * + * @param type {@code non-null;} element type of array being accessed + * @return {@code non-null;} an appropriate instance + */ + public static Rop opAput(TypeBearer type) { + switch (type.getBasicType()) { + case Type.BT_INT: return APUT_INT; + case Type.BT_LONG: return APUT_LONG; + case Type.BT_FLOAT: return APUT_FLOAT; + case Type.BT_DOUBLE: return APUT_DOUBLE; + case Type.BT_OBJECT: return APUT_OBJECT; + case Type.BT_BOOLEAN: return APUT_BOOLEAN; + case Type.BT_BYTE: return APUT_BYTE; + case Type.BT_CHAR: return APUT_CHAR; + case Type.BT_SHORT: return APUT_SHORT; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code new-array} rop for the given + * type. The result is a shared instance. + * + * @param arrayType {@code non-null;} array type of array being created + * @return {@code non-null;} an appropriate instance + */ + public static Rop opNewArray(TypeBearer arrayType) { + Type type = arrayType.getType(); + Type elementType = type.getComponentType(); + + switch (elementType.getBasicType()) { + case Type.BT_INT: return NEW_ARRAY_INT; + case Type.BT_LONG: return NEW_ARRAY_LONG; + case Type.BT_FLOAT: return NEW_ARRAY_FLOAT; + case Type.BT_DOUBLE: return NEW_ARRAY_DOUBLE; + case Type.BT_BOOLEAN: return NEW_ARRAY_BOOLEAN; + case Type.BT_BYTE: return NEW_ARRAY_BYTE; + case Type.BT_CHAR: return NEW_ARRAY_CHAR; + case Type.BT_SHORT: return NEW_ARRAY_SHORT; + case Type.BT_OBJECT: { + return new Rop(RegOps.NEW_ARRAY, type, StdTypeList.INT, + Exceptions.LIST_Error_NegativeArraySizeException, + "new-array-object"); + } + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code filled-new-array} rop for the given + * type. The result may be a shared instance. + * + * @param arrayType {@code non-null;} type of array being created + * @param count {@code >= 0;} number of elements that the array should have + * @return {@code non-null;} an appropriate instance + */ + public static Rop opFilledNewArray(TypeBearer arrayType, int count) { + Type type = arrayType.getType(); + Type elementType = type.getComponentType(); + + if (elementType.isCategory2()) { + return throwBadType(arrayType); + } + + if (count < 0) { + throw new IllegalArgumentException("count < 0"); + } + + StdTypeList sourceTypes = new StdTypeList(count); + + for (int i = 0; i < count; i++) { + sourceTypes.set(i, elementType); + } + + // Note: The resulting rop is considered call-like. + return new Rop(RegOps.FILLED_NEW_ARRAY, + sourceTypes, + Exceptions.LIST_Error); + } + + /** + * Returns the appropriate {@code get-field} rop for the given + * type. The result is a shared instance. + * + * @param type {@code non-null;} type of the field in question + * @return {@code non-null;} an appropriate instance + */ + public static Rop opGetField(TypeBearer type) { + switch (type.getBasicType()) { + case Type.BT_INT: return GET_FIELD_INT; + case Type.BT_LONG: return GET_FIELD_LONG; + case Type.BT_FLOAT: return GET_FIELD_FLOAT; + case Type.BT_DOUBLE: return GET_FIELD_DOUBLE; + case Type.BT_OBJECT: return GET_FIELD_OBJECT; + case Type.BT_BOOLEAN: return GET_FIELD_BOOLEAN; + case Type.BT_BYTE: return GET_FIELD_BYTE; + case Type.BT_CHAR: return GET_FIELD_CHAR; + case Type.BT_SHORT: return GET_FIELD_SHORT; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code put-field} rop for the given + * type. The result is a shared instance. + * + * @param type {@code non-null;} type of the field in question + * @return {@code non-null;} an appropriate instance + */ + public static Rop opPutField(TypeBearer type) { + switch (type.getBasicType()) { + case Type.BT_INT: return PUT_FIELD_INT; + case Type.BT_LONG: return PUT_FIELD_LONG; + case Type.BT_FLOAT: return PUT_FIELD_FLOAT; + case Type.BT_DOUBLE: return PUT_FIELD_DOUBLE; + case Type.BT_OBJECT: return PUT_FIELD_OBJECT; + case Type.BT_BOOLEAN: return PUT_FIELD_BOOLEAN; + case Type.BT_BYTE: return PUT_FIELD_BYTE; + case Type.BT_CHAR: return PUT_FIELD_CHAR; + case Type.BT_SHORT: return PUT_FIELD_SHORT; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code get-static} rop for the given + * type. The result is a shared instance. + * + * @param type {@code non-null;} type of the field in question + * @return {@code non-null;} an appropriate instance + */ + public static Rop opGetStatic(TypeBearer type) { + switch (type.getBasicType()) { + case Type.BT_INT: return GET_STATIC_INT; + case Type.BT_LONG: return GET_STATIC_LONG; + case Type.BT_FLOAT: return GET_STATIC_FLOAT; + case Type.BT_DOUBLE: return GET_STATIC_DOUBLE; + case Type.BT_OBJECT: return GET_STATIC_OBJECT; + case Type.BT_BOOLEAN: return GET_STATIC_BOOLEAN; + case Type.BT_BYTE: return GET_STATIC_BYTE; + case Type.BT_CHAR: return GET_STATIC_CHAR; + case Type.BT_SHORT: return GET_STATIC_SHORT; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code put-static} rop for the given + * type. The result is a shared instance. + * + * @param type {@code non-null;} type of the field in question + * @return {@code non-null;} an appropriate instance + */ + public static Rop opPutStatic(TypeBearer type) { + switch (type.getBasicType()) { + case Type.BT_INT: return PUT_STATIC_INT; + case Type.BT_LONG: return PUT_STATIC_LONG; + case Type.BT_FLOAT: return PUT_STATIC_FLOAT; + case Type.BT_DOUBLE: return PUT_STATIC_DOUBLE; + case Type.BT_OBJECT: return PUT_STATIC_OBJECT; + case Type.BT_BOOLEAN: return PUT_STATIC_BOOLEAN; + case Type.BT_BYTE: return PUT_STATIC_BYTE; + case Type.BT_CHAR: return PUT_STATIC_CHAR; + case Type.BT_SHORT: return PUT_STATIC_SHORT; + } + + return throwBadType(type); + } + + /** + * Returns the appropriate {@code invoke-static} rop for the + * given type. The result is typically a newly-allocated instance. + * + * @param meth {@code non-null;} descriptor of the method + * @return {@code non-null;} an appropriate instance + */ + public static Rop opInvokeStatic(Prototype meth) { + return new Rop(RegOps.INVOKE_STATIC, + meth.getParameterFrameTypes(), + StdTypeList.THROWABLE); + } + + /** + * Returns the appropriate {@code invoke-virtual} rop for the + * given type. The result is typically a newly-allocated instance. + * + * @param meth {@code non-null;} descriptor of the method, including the + * {@code this} parameter + * @return {@code non-null;} an appropriate instance + */ + public static Rop opInvokeVirtual(Prototype meth) { + return new Rop(RegOps.INVOKE_VIRTUAL, + meth.getParameterFrameTypes(), + StdTypeList.THROWABLE); + } + + /** + * Returns the appropriate {@code invoke-super} rop for the + * given type. The result is typically a newly-allocated instance. + * + * @param meth {@code non-null;} descriptor of the method, including the + * {@code this} parameter + * @return {@code non-null;} an appropriate instance + */ + public static Rop opInvokeSuper(Prototype meth) { + return new Rop(RegOps.INVOKE_SUPER, + meth.getParameterFrameTypes(), + StdTypeList.THROWABLE); + } + + /** + * Returns the appropriate {@code invoke-direct} rop for the + * given type. The result is typically a newly-allocated instance. + * + * @param meth {@code non-null;} descriptor of the method, including the + * {@code this} parameter + * @return {@code non-null;} an appropriate instance + */ + public static Rop opInvokeDirect(Prototype meth) { + return new Rop(RegOps.INVOKE_DIRECT, + meth.getParameterFrameTypes(), + StdTypeList.THROWABLE); + } + + /** + * Returns the appropriate {@code invoke-interface} rop for the + * given type. The result is typically a newly-allocated instance. + * + * @param meth {@code non-null;} descriptor of the method, including the + * {@code this} parameter + * @return {@code non-null;} an appropriate instance + */ + public static Rop opInvokeInterface(Prototype meth) { + return new Rop(RegOps.INVOKE_INTERFACE, + meth.getParameterFrameTypes(), + StdTypeList.THROWABLE); + } + + /** + * Returns the appropriate {@code mark-local} rop for the given type. + * The result is a shared instance. + * + * @param type {@code non-null;} type of value being marked + * @return {@code non-null;} an appropriate instance + */ + public static Rop opMarkLocal(TypeBearer type) { + switch (type.getBasicFrameType()) { + case Type.BT_INT: return MARK_LOCAL_INT; + case Type.BT_LONG: return MARK_LOCAL_LONG; + case Type.BT_FLOAT: return MARK_LOCAL_FLOAT; + case Type.BT_DOUBLE: return MARK_LOCAL_DOUBLE; + case Type.BT_OBJECT: return MARK_LOCAL_OBJECT; + } + + return throwBadType(type); + } + + /** + * This class is uninstantiable. + */ + private Rops() { + // This space intentionally left blank. + } + + /** + * Throws the right exception to complain about a bogus type. + * + * @param type {@code non-null;} the bad type + * @return never + */ + private static Rop throwBadType(TypeBearer type) { + throw new IllegalArgumentException("bad type: " + type); + } + + /** + * Throws the right exception to complain about a bogus list of types. + * + * @param types {@code non-null;} the bad types + * @return never + */ + private static Rop throwBadTypes(TypeList types) { + throw new IllegalArgumentException("bad types: " + types); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/SourcePosition.java b/dexgen/src/com/android/dexgen/rop/code/SourcePosition.java new file mode 100644 index 0000000..cd0ea25 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/SourcePosition.java @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.CstUtf8; +import com.android.dexgen.util.Hex; + +/** + * Information about a source position for code, which includes both a + * line number and original bytecode address. + */ +public final class SourcePosition { + /** {@code non-null;} convenient "no information known" instance */ + public static final SourcePosition NO_INFO = + new SourcePosition(null, -1, -1); + + /** {@code null-ok;} name of the file of origin or {@code null} if unknown */ + private final CstUtf8 sourceFile; + + /** + * {@code >= -1;} the bytecode address, or {@code -1} if that + * information is unknown + */ + private final int address; + + /** + * {@code >= -1;} the line number, or {@code -1} if that + * information is unknown + */ + private final int line; + + /** + * Constructs an instance. + * + * @param sourceFile {@code null-ok;} name of the file of origin or + * {@code null} if unknown + * @param address {@code >= -1;} original bytecode address or {@code -1} + * if unknown + * @param line {@code >= -1;} original line number or {@code -1} if + * unknown + */ + public SourcePosition(CstUtf8 sourceFile, int address, int line) { + if (address < -1) { + throw new IllegalArgumentException("address < -1"); + } + + if (line < -1) { + throw new IllegalArgumentException("line < -1"); + } + + this.sourceFile = sourceFile; + this.address = address; + this.line = line; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(50); + + if (sourceFile != null) { + sb.append(sourceFile.toHuman()); + sb.append(":"); + } + + if (line >= 0) { + sb.append(line); + } + + sb.append('@'); + + if (address < 0) { + sb.append("????"); + } else { + sb.append(Hex.u2(address)); + } + + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof SourcePosition)) { + return false; + } + + if (this == other) { + return true; + } + + SourcePosition pos = (SourcePosition) other; + + return (address == pos.address) && sameLineAndFile(pos); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return sourceFile.hashCode() + address + line; + } + + /** + * Returns whether the lines match between this instance and + * the one given. + * + * @param other {@code non-null;} the instance to compare to + * @return {@code true} iff the lines match + */ + public boolean sameLine(SourcePosition other) { + return (line == other.line); + } + + /** + * Returns whether the lines and files match between this instance and + * the one given. + * + * @param other {@code non-null;} the instance to compare to + * @return {@code true} iff the lines and files match + */ + public boolean sameLineAndFile(SourcePosition other) { + return (line == other.line) && + ((sourceFile == other.sourceFile) || + ((sourceFile != null) && sourceFile.equals(other.sourceFile))); + } + + /** + * Gets the source file, if known. + * + * @return {@code null-ok;} the source file or {@code null} if unknown + */ + public CstUtf8 getSourceFile() { + return sourceFile; + } + + /** + * Gets the original bytecode address. + * + * @return {@code >= -1;} the address or {@code -1} if unknown + */ + public int getAddress() { + return address; + } + + /** + * Gets the original line number. + * + * @return {@code >= -1;} the original line number or {@code -1} if + * unknown + */ + public int getLine() { + return line; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/SwitchInsn.java b/dexgen/src/com/android/dexgen/rop/code/SwitchInsn.java new file mode 100644 index 0000000..ee4f4b6 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/SwitchInsn.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.type.StdTypeList; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; +import com.android.dexgen.util.IntList; + +/** + * Instruction which contains switch cases. + */ +public final class SwitchInsn + extends Insn { + /** {@code non-null;} list of switch cases */ + private final IntList cases; + + /** + * Constructs an instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param result {@code null-ok;} spec for the result, if any + * @param sources {@code non-null;} specs for all the sources + * @param cases {@code non-null;} list of switch cases + */ + public SwitchInsn(Rop opcode, SourcePosition position, RegisterSpec result, + RegisterSpecList sources, IntList cases) { + super(opcode, position, result, sources); + + if (opcode.getBranchingness() != Rop.BRANCH_SWITCH) { + throw new IllegalArgumentException("bogus branchingness"); + } + + if (cases == null) { + throw new NullPointerException("cases == null"); + } + + this.cases = cases; + } + + /** {@inheritDoc} */ + @Override + public String getInlineString() { + return cases.toString(); + } + + /** {@inheritDoc} */ + @Override + public TypeList getCatches() { + return StdTypeList.EMPTY; + } + + /** {@inheritDoc} */ + @Override + public void accept(Visitor visitor) { + visitor.visitSwitchInsn(this); + } + + /** {@inheritDoc} */ + @Override + public Insn withAddedCatch(Type type) { + throw new UnsupportedOperationException("unsupported"); + } + + /** {@inheritDoc} */ + @Override + public Insn withRegisterOffset(int delta) { + return new SwitchInsn(getOpcode(), getPosition(), + getResult().withOffset(delta), + getSources().withOffset(delta), + cases); + } + + /** + * {@inheritDoc} + * + *

SwitchInsn always compares false. The current use for this method + * never encounters {@code SwitchInsn}s + */ + @Override + public boolean contentEquals(Insn b) { + return false; + } + + /** {@inheritDoc} */ + @Override + public Insn withNewRegisters(RegisterSpec result, + RegisterSpecList sources) { + + return new SwitchInsn(getOpcode(), getPosition(), + result, + sources, + cases); + } + + /** + * Gets the list of switch cases. + * + * @return {@code non-null;} the case list + */ + public IntList getCases() { + return cases; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/ThrowingCstInsn.java b/dexgen/src/com/android/dexgen/rop/code/ThrowingCstInsn.java new file mode 100644 index 0000000..7262254 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/ThrowingCstInsn.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.cst.Constant; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; + +/** + * Instruction which contains an explicit reference to a constant + * and which might throw an exception. + */ +public final class ThrowingCstInsn + extends CstInsn { + /** {@code non-null;} list of exceptions caught */ + private final TypeList catches; + + /** + * Constructs an instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param sources {@code non-null;} specs for all the sources + * @param catches {@code non-null;} list of exceptions caught + * @param cst {@code non-null;} the constant + */ + public ThrowingCstInsn(Rop opcode, SourcePosition position, + RegisterSpecList sources, + TypeList catches, Constant cst) { + super(opcode, position, null, sources, cst); + + if (opcode.getBranchingness() != Rop.BRANCH_THROW) { + throw new IllegalArgumentException("bogus branchingness"); + } + + if (catches == null) { + throw new NullPointerException("catches == null"); + } + + this.catches = catches; + } + + /** {@inheritDoc} */ + @Override + public String getInlineString() { + return getConstant().toHuman() + " " + + ThrowingInsn.toCatchString(catches); + } + + /** {@inheritDoc} */ + @Override + public TypeList getCatches() { + return catches; + } + + /** {@inheritDoc} */ + @Override + public void accept(Visitor visitor) { + visitor.visitThrowingCstInsn(this); + } + + /** {@inheritDoc} */ + @Override + public Insn withAddedCatch(Type type) { + return new ThrowingCstInsn(getOpcode(), getPosition(), + getSources(), catches.withAddedType(type), + getConstant()); + } + + /** {@inheritDoc} */ + @Override + public Insn withRegisterOffset(int delta) { + return new ThrowingCstInsn(getOpcode(), getPosition(), + getSources().withOffset(delta), + catches, + getConstant()); + } + + /** {@inheritDoc} */ + @Override + public Insn withNewRegisters(RegisterSpec result, + RegisterSpecList sources) { + + return new ThrowingCstInsn(getOpcode(), getPosition(), + sources, + catches, + getConstant()); + } + + +} diff --git a/dexgen/src/com/android/dexgen/rop/code/ThrowingInsn.java b/dexgen/src/com/android/dexgen/rop/code/ThrowingInsn.java new file mode 100644 index 0000000..24611ad --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/ThrowingInsn.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeList; + +/** + * Instruction which possibly throws. The {@code successors} list in the + * basic block an instance of this class is inside corresponds in-order to + * the list of exceptions handled by this instruction, with the + * no-exception case appended as the final target. + */ +public final class ThrowingInsn + extends Insn { + /** {@code non-null;} list of exceptions caught */ + private final TypeList catches; + + /** + * Gets the string form of a register spec list to be used as a catches + * list. + * + * @param catches {@code non-null;} the catches list + * @return {@code non-null;} the string form + */ + public static String toCatchString(TypeList catches) { + StringBuffer sb = new StringBuffer(100); + + sb.append("catch"); + + int sz = catches.size(); + for (int i = 0; i < sz; i++) { + sb.append(" "); + sb.append(catches.getType(i).toHuman()); + } + + return sb.toString(); + } + + /** + * Constructs an instance. + * + * @param opcode {@code non-null;} the opcode + * @param position {@code non-null;} source position + * @param sources {@code non-null;} specs for all the sources + * @param catches {@code non-null;} list of exceptions caught + */ + public ThrowingInsn(Rop opcode, SourcePosition position, + RegisterSpecList sources, + TypeList catches) { + super(opcode, position, null, sources); + + if (opcode.getBranchingness() != Rop.BRANCH_THROW) { + throw new IllegalArgumentException("bogus branchingness"); + } + + if (catches == null) { + throw new NullPointerException("catches == null"); + } + + this.catches = catches; + } + + /** {@inheritDoc} */ + @Override + public String getInlineString() { + return toCatchString(catches); + } + + /** {@inheritDoc} */ + @Override + public TypeList getCatches() { + return catches; + } + + /** {@inheritDoc} */ + @Override + public void accept(Visitor visitor) { + visitor.visitThrowingInsn(this); + } + + /** {@inheritDoc} */ + @Override + public Insn withAddedCatch(Type type) { + return new ThrowingInsn(getOpcode(), getPosition(), + getSources(), catches.withAddedType(type)); + } + + /** {@inheritDoc} */ + @Override + public Insn withRegisterOffset(int delta) { + return new ThrowingInsn(getOpcode(), getPosition(), + getSources().withOffset(delta), + catches); + } + + /** {@inheritDoc} */ + @Override + public Insn withNewRegisters(RegisterSpec result, + RegisterSpecList sources) { + + return new ThrowingInsn(getOpcode(), getPosition(), + sources, + catches); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/code/TranslationAdvice.java b/dexgen/src/com/android/dexgen/rop/code/TranslationAdvice.java new file mode 100644 index 0000000..9edd248 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/code/TranslationAdvice.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.code; + +/** + * Interface for "advice" passed from the late stage of translation back + * to the early stage. This allows for the final target architecture to + * exert its influence early in the translation process without having + * the early stage code be explicitly tied to the target. + */ +public interface TranslationAdvice { + /** + * Returns an indication of whether the target can directly represent an + * instruction with the given opcode operating on the given arguments, + * where the last source argument is used as a constant. (That is, the + * last argument must have a type which indicates it is a known constant.) + * The instruction associated must have exactly two sources. + * + * @param opcode {@code non-null;} the opcode + * @param sourceA {@code non-null;} the first source + * @param sourceB {@code non-null;} the second source + * @return {@code true} iff the target can represent the operation + * using a constant for the last argument + */ + public boolean hasConstantOperation(Rop opcode, + RegisterSpec sourceA, RegisterSpec sourceB); + + /** + * Returns true if the translation target requires the sources of the + * specified opcode to be in order and contiguous (eg, for an invoke-range) + * + * @param opcode {@code non-null;} opcode + * @param sources {@code non-null;} source list + * @return {@code true} iff the target requires the sources to be + * in order and contiguous. + */ + public boolean requiresSourcesInOrder(Rop opcode, RegisterSpecList sources); + + /** + * Gets the maximum register width that can be represented optimally. + * For example, Dex bytecode does not have instruction forms that take + * register numbers larger than 15 for all instructions so + * DexTranslationAdvice returns 15 here. + * + * @return register count noted above + */ + public int getMaxOptimalRegisterCount(); +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/Constant.java b/dexgen/src/com/android/dexgen/rop/cst/Constant.java new file mode 100644 index 0000000..deaa5f4 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/Constant.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.util.ToHuman; + +/** + * Base class for constants of all sorts. + */ +public abstract class Constant + implements ToHuman, Comparable { + /** + * Returns {@code true} if this instance is a category-2 constant, + * meaning it takes up two slots in the constant pool, or + * {@code false} if this instance is category-1. + * + * @return {@code true} iff this instance is category-2 + */ + public abstract boolean isCategory2(); + + /** + * Returns the human name for the particular type of constant + * this instance is. + * + * @return {@code non-null;} the name + */ + public abstract String typeName(); + + /** + * {@inheritDoc} + * + * This compares in class-major and value-minor order. + */ + public final int compareTo(Constant other) { + Class clazz = getClass(); + Class otherClazz = other.getClass(); + + if (clazz != otherClazz) { + return clazz.getName().compareTo(otherClazz.getName()); + } + + return compareTo0(other); + } + + /** + * Compare the values of this and another instance, which are guaranteed + * to be of the same class. Subclasses must implement this. + * + * @param other {@code non-null;} the instance to compare to + * @return {@code -1}, {@code 0}, or {@code 1}, as usual + * for a comparison + */ + protected abstract int compareTo0(Constant other); +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/ConstantPool.java b/dexgen/src/com/android/dexgen/rop/cst/ConstantPool.java new file mode 100644 index 0000000..1ea188a --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/ConstantPool.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +/** + * Interface for constant pools, which are, more or less, just lists of + * {@link Constant} objects. + */ +public interface ConstantPool { + /** + * Get the "size" of the constant pool. This corresponds to the + * class file field {@code constant_pool_count}, and is in fact + * always at least one more than the actual size of the constant pool, + * as element {@code 0} is always invalid. + * + * @return {@code >= 1;} the size + */ + public int size(); + + /** + * Get the {@code n}th entry in the constant pool, which must + * be valid. + * + * @param n {@code n >= 0, n < size();} the constant pool index + * @return {@code non-null;} the corresponding entry + * @throws IllegalArgumentException thrown if {@code n} is + * in-range but invalid + */ + public Constant get(int n); + + /** + * Get the {@code n}th entry in the constant pool, which must + * be valid unless {@code n == 0}, in which case {@code null} + * is returned. + * + * @param n {@code n >= 0, n < size();} the constant pool index + * @return {@code null-ok;} the corresponding entry, if {@code n != 0} + * @throws IllegalArgumentException thrown if {@code n} is + * in-range and non-zero but invalid + */ + public Constant get0Ok(int n); + + /** + * Get the {@code n}th entry in the constant pool, or + * {@code null} if the index is in-range but invalid. In + * particular, {@code null} is returned for index {@code 0} + * as well as the index after any entry which is defined to take up + * two slots (that is, {@code Long} and {@code Double} + * entries). + * + * @param n {@code n >= 0, n < size();} the constant pool index + * @return {@code null-ok;} the corresponding entry, or {@code null} if + * the index is in-range but invalid + */ + public Constant getOrNull(int n); +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstAnnotation.java b/dexgen/src/com/android/dexgen/rop/cst/CstAnnotation.java new file mode 100644 index 0000000..89b4fd8 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstAnnotation.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.annotation.Annotation; + +/** + * Constant type that represents an annotation. + */ +public final class CstAnnotation extends Constant { + /** {@code non-null;} the actual annotation */ + private final Annotation annotation; + + /** + * Constructs an instance. + * + * @param annotation {@code non-null;} the annotation to hold + */ + public CstAnnotation(Annotation annotation) { + if (annotation == null) { + throw new NullPointerException("annotation == null"); + } + + annotation.throwIfMutable(); + + this.annotation = annotation; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (! (other instanceof CstAnnotation)) { + return false; + } + + return annotation.equals(((CstAnnotation) other).annotation); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return annotation.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + return annotation.compareTo(((CstAnnotation) other).annotation); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return annotation.toString(); + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "annotation"; + } + + /** {@inheritDoc} */ + @Override + public boolean isCategory2() { + return false; + } + + /** {@inheritDoc} */ + public String toHuman() { + return annotation.toString(); + } + + /** + * Get the underlying annotation. + * + * @return {@code non-null;} the annotation + */ + public Annotation getAnnotation() { + return annotation; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstArray.java b/dexgen/src/com/android/dexgen/rop/cst/CstArray.java new file mode 100644 index 0000000..2fad35e --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstArray.java @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.FixedSizeList; + +/** + * Constant type to represent a fixed array of other constants. The contents + * may be of any type other than {@link CstUtf8}. + */ +public final class CstArray extends Constant { + /** {@code non-null;} the actual list of contents */ + private final List list; + + /** + * Constructs an instance. + * + * @param list {@code non-null;} the actual list of contents + */ + public CstArray(List list) { + if (list == null) { + throw new NullPointerException("list == null"); + } + + list.throwIfMutable(); + + this.list = list; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (! (other instanceof CstArray)) { + return false; + } + + return list.equals(((CstArray) other).list); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return list.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + return list.compareTo(((CstArray) other).list); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return list.toString("array{", ", ", "}"); + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "array"; + } + + /** {@inheritDoc} */ + @Override + public boolean isCategory2() { + return false; + } + + /** {@inheritDoc} */ + public String toHuman() { + return list.toHuman("{", ", ", "}"); + } + + /** + * Get the underlying list. + * + * @return {@code non-null;} the list + */ + public List getList() { + return list; + } + + /** + * List of {@link Constant} instances. + */ + public static final class List + extends FixedSizeList implements Comparable { + /** + * Constructs an instance. All indices initially contain + * {@code null}. + * + * @param size the size of the list + */ + public List(int size) { + super(size); + } + + /** {@inheritDoc} */ + public int compareTo(List other) { + int thisSize = size(); + int otherSize = other.size(); + int compareSize = (thisSize < otherSize) ? thisSize : otherSize; + + for (int i = 0; i < compareSize; i++) { + Constant thisItem = (Constant) get0(i); + Constant otherItem = (Constant) other.get0(i); + int compare = thisItem.compareTo(otherItem); + if (compare != 0) { + return compare; + } + } + + if (thisSize < otherSize) { + return -1; + } else if (thisSize > otherSize) { + return 1; + } + + return 0; + } + + /** + * Gets the element at the given index. It is an error to call + * this with the index for an element which was never set; if you + * do that, this will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which index + * @return {@code non-null;} element at that index + */ + public Constant get(int n) { + return (Constant) get0(n); + } + + /** + * Sets the element at the given index. + * + * @param n {@code >= 0, < size();} which index + * @param a {@code null-ok;} the element to set at {@code n} + */ + public void set(int n, Constant a) { + if (a instanceof CstUtf8) { + throw new IllegalArgumentException("bad value: " + a); + } + + set0(n, a); + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstBaseMethodRef.java b/dexgen/src/com/android/dexgen/rop/cst/CstBaseMethodRef.java new file mode 100644 index 0000000..3914272 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstBaseMethodRef.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Prototype; +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.rop.type.TypeBearer; + +/** + * Base class for constants of "methodish" type. + * + *

Note: As a {@link TypeBearer}, this class bears the return type + * of the method.

+ */ +public abstract class CstBaseMethodRef + extends CstMemberRef { + /** {@code non-null;} the raw prototype for this method */ + private final Prototype prototype; + + /** + * {@code null-ok;} the prototype for this method taken to be an instance + * method, or {@code null} if not yet calculated + */ + private Prototype instancePrototype; + + /** + * Constructs an instance. + * + * @param definingClass {@code non-null;} the type of the defining class + * @param nat {@code non-null;} the name-and-type + */ + /*package*/ CstBaseMethodRef(CstType definingClass, CstNat nat) { + super(definingClass, nat); + + String descriptor = getNat().getDescriptor().getString(); + this.prototype = Prototype.intern(descriptor); + this.instancePrototype = null; + } + + /** + * Gets the raw prototype of this method. This doesn't include a + * {@code this} argument. + * + * @return {@code non-null;} the method prototype + */ + public final Prototype getPrototype() { + return prototype; + } + + /** + * Gets the prototype of this method as either a + * {@code static} or instance method. In the case of a + * {@code static} method, this is the same as the raw + * prototype. In the case of an instance method, this has an + * appropriately-typed {@code this} argument as the first + * one. + * + * @param isStatic whether the method should be considered static + * @return {@code non-null;} the method prototype + */ + public final Prototype getPrototype(boolean isStatic) { + if (isStatic) { + return prototype; + } else { + if (instancePrototype == null) { + Type thisType = getDefiningClass().getClassType(); + instancePrototype = prototype.withFirstParameter(thisType); + } + return instancePrototype; + } + } + + /** {@inheritDoc} */ + @Override + protected final int compareTo0(Constant other) { + int cmp = super.compareTo0(other); + + if (cmp != 0) { + return cmp; + } + + CstBaseMethodRef otherMethod = (CstBaseMethodRef) other; + return prototype.compareTo(otherMethod.prototype); + } + + /** + * {@inheritDoc} + * + * In this case, this method returns the return type of this method. + * + * @return {@code non-null;} the method's return type + */ + public final Type getType() { + return prototype.getReturnType(); + } + + /** + * Gets the number of words of parameters required by this + * method's descriptor. Since instances of this class have no way + * to know if they will be used in a {@code static} or + * instance context, one has to indicate this explicitly as an + * argument. This method is just a convenient shorthand for + * {@code getPrototype().getParameterTypes().getWordCount()}, + * plus {@code 1} if the method is to be treated as an + * instance method. + * + * @param isStatic whether the method should be considered static + * @return {@code >= 0;} the argument word count + */ + public final int getParameterWordCount(boolean isStatic) { + return getPrototype(isStatic).getParameterTypes().getWordCount(); + } + + /** + * Gets whether this is a reference to an instance initialization + * method. This is just a convenient shorthand for + * {@code getNat().isInstanceInit()}. + * + * @return {@code true} iff this is a reference to an + * instance initialization method + */ + public final boolean isInstanceInit() { + return getNat().isInstanceInit(); + } + + /** + * Gets whether this is a reference to a class initialization + * method. This is just a convenient shorthand for + * {@code getNat().isClassInit()}. + * + * @return {@code true} iff this is a reference to an + * instance initialization method + */ + public final boolean isClassInit() { + return getNat().isClassInit(); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstBoolean.java b/dexgen/src/com/android/dexgen/rop/cst/CstBoolean.java new file mode 100644 index 0000000..a7501e3 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstBoolean.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; + +/** + * Constants of type {@code boolean}. + */ +public final class CstBoolean + extends CstLiteral32 { + /** {@code non-null;} instance representing {@code false} */ + public static final CstBoolean VALUE_FALSE = new CstBoolean(false); + + /** {@code non-null;} instance representing {@code true} */ + public static final CstBoolean VALUE_TRUE = new CstBoolean(true); + + /** + * Makes an instance for the given value. This will return an + * already-allocated instance. + * + * @param value the {@code boolean} value + * @return {@code non-null;} the appropriate instance + */ + public static CstBoolean make(boolean value) { + return value ? VALUE_TRUE : VALUE_FALSE; + } + + /** + * Makes an instance for the given {@code int} value. This + * will return an already-allocated instance. + * + * @param value must be either {@code 0} or {@code 1} + * @return {@code non-null;} the appropriate instance + */ + public static CstBoolean make(int value) { + if (value == 0) { + return VALUE_FALSE; + } else if (value == 1) { + return VALUE_TRUE; + } else { + throw new IllegalArgumentException("bogus value: " + value); + } + } + + /** + * Constructs an instance. This constructor is private; use {@link #make}. + * + * @param value the {@code boolean} value + */ + private CstBoolean(boolean value) { + super(value ? 1 : 0); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return getValue() ? "boolean{true}" : "boolean{false}"; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.BOOLEAN; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "boolean"; + } + + /** {@inheritDoc} */ + public String toHuman() { + return getValue() ? "true" : "false"; + } + + /** + * Gets the {@code boolean} value. + * + * @return the value + */ + public boolean getValue() { + return (getIntBits() == 0) ? false : true; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstByte.java b/dexgen/src/com/android/dexgen/rop/cst/CstByte.java new file mode 100644 index 0000000..f9b97cb --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstByte.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.Hex; + +/** + * Constants of type {@code byte}. + */ +public final class CstByte + extends CstLiteral32 { + /** {@code non-null;} the value {@code 0} as an instance of this class */ + public static final CstByte VALUE_0 = make((byte) 0); + + /** + * Makes an instance for the given value. This may (but does not + * necessarily) return an already-allocated instance. + * + * @param value the {@code byte} value + */ + public static CstByte make(byte value) { + return new CstByte(value); + } + + /** + * Makes an instance for the given {@code int} value. This + * may (but does not necessarily) return an already-allocated + * instance. + * + * @param value the value, which must be in range for a {@code byte} + * @return {@code non-null;} the appropriate instance + */ + public static CstByte make(int value) { + byte cast = (byte) value; + + if (cast != value) { + throw new IllegalArgumentException("bogus byte value: " + + value); + } + + return make(cast); + } + + /** + * Constructs an instance. This constructor is private; use {@link #make}. + * + * @param value the {@code byte} value + */ + private CstByte(byte value) { + super(value); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + int value = getIntBits(); + return "byte{0x" + Hex.u1(value) + " / " + value + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.BYTE; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "byte"; + } + + /** {@inheritDoc} */ + public String toHuman() { + return Integer.toString(getIntBits()); + } + + /** + * Gets the {@code byte} value. + * + * @return the value + */ + public byte getValue() { + return (byte) getIntBits(); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstChar.java b/dexgen/src/com/android/dexgen/rop/cst/CstChar.java new file mode 100644 index 0000000..d006525 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstChar.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.Hex; + +/** + * Constants of type {@code char}. + */ +public final class CstChar + extends CstLiteral32 { + /** {@code non-null;} the value {@code 0} as an instance of this class */ + public static final CstChar VALUE_0 = make((char) 0); + + /** + * Makes an instance for the given value. This may (but does not + * necessarily) return an already-allocated instance. + * + * @param value the {@code char} value + */ + public static CstChar make(char value) { + return new CstChar(value); + } + + /** + * Makes an instance for the given {@code int} value. This + * may (but does not necessarily) return an already-allocated + * instance. + * + * @param value the value, which must be in range for a {@code char} + * @return {@code non-null;} the appropriate instance + */ + public static CstChar make(int value) { + char cast = (char) value; + + if (cast != value) { + throw new IllegalArgumentException("bogus char value: " + + value); + } + + return make(cast); + } + + /** + * Constructs an instance. This constructor is private; use {@link #make}. + * + * @param value the {@code char} value + */ + private CstChar(char value) { + super(value); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + int value = getIntBits(); + return "char{0x" + Hex.u2(value) + " / " + value + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.CHAR; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "char"; + } + + /** {@inheritDoc} */ + public String toHuman() { + return Integer.toString(getIntBits()); + } + + /** + * Gets the {@code char} value. + * + * @return the value + */ + public char getValue() { + return (char) getIntBits(); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstDouble.java b/dexgen/src/com/android/dexgen/rop/cst/CstDouble.java new file mode 100644 index 0000000..84a53e6 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstDouble.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.Hex; + +/** + * Constants of type {@code CONSTANT_Double_info}. + */ +public final class CstDouble + extends CstLiteral64 { + /** {@code non-null;} instance representing {@code 0} */ + public static final CstDouble VALUE_0 = + new CstDouble(Double.doubleToLongBits(0.0)); + + /** {@code non-null;} instance representing {@code 1} */ + public static final CstDouble VALUE_1 = + new CstDouble(Double.doubleToLongBits(1.0)); + + /** + * Makes an instance for the given value. This may (but does not + * necessarily) return an already-allocated instance. + * + * @param bits the {@code double} value as {@code long} bits + */ + public static CstDouble make(long bits) { + /* + * Note: Javadoc notwithstanding, this implementation always + * allocates. + */ + return new CstDouble(bits); + } + + /** + * Constructs an instance. This constructor is private; use {@link #make}. + * + * @param bits the {@code double} value as {@code long} bits + */ + private CstDouble(long bits) { + super(bits); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + long bits = getLongBits(); + return "double{0x" + Hex.u8(bits) + " / " + + Double.longBitsToDouble(bits) + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.DOUBLE; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "double"; + } + + /** {@inheritDoc} */ + public String toHuman() { + return Double.toString(Double.longBitsToDouble(getLongBits())); + } + + /** + * Gets the {@code double} value. + * + * @return the value + */ + public double getValue() { + return Double.longBitsToDouble(getLongBits()); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstEnumRef.java b/dexgen/src/com/android/dexgen/rop/cst/CstEnumRef.java new file mode 100644 index 0000000..d566946 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstEnumRef.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; + +/** + * Constant type to represent a reference to a particular constant + * value of an enumerated type. + */ +public final class CstEnumRef extends CstMemberRef { + /** {@code null-ok;} the corresponding field ref, lazily initialized */ + private CstFieldRef fieldRef; + + /** + * Constructs an instance. + * + * @param nat {@code non-null;} the name-and-type; the defining class is derived + * from this + */ + public CstEnumRef(CstNat nat) { + super(new CstType(nat.getFieldType()), nat); + + fieldRef = null; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "enum"; + } + + /** + * {@inheritDoc} + * + * Note: This returns the enumerated type. + */ + public Type getType() { + return getDefiningClass().getClassType(); + } + + /** + * Get a {@link CstFieldRef} that corresponds with this instance. + * + * @return {@code non-null;} the corresponding field reference + */ + public CstFieldRef getFieldRef() { + if (fieldRef == null) { + fieldRef = new CstFieldRef(getDefiningClass(), getNat()); + } + + return fieldRef; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstFieldRef.java b/dexgen/src/com/android/dexgen/rop/cst/CstFieldRef.java new file mode 100644 index 0000000..6a6218c --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstFieldRef.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; + +/** + * Constants of type {@code CONSTANT_Fieldref_info}. + */ +public final class CstFieldRef extends CstMemberRef { + /** + * Returns an instance of this class that represents the static + * field which should hold the class corresponding to a given + * primitive type. For example, if given {@link Type#INT}, this + * method returns an instance corresponding to the field + * {@code java.lang.Integer.TYPE}. + * + * @param primitiveType {@code non-null;} the primitive type + * @return {@code non-null;} the corresponding static field + */ + public static CstFieldRef forPrimitiveType(Type primitiveType) { + return new CstFieldRef(CstType.forBoxedPrimitiveType(primitiveType), + CstNat.PRIMITIVE_TYPE_NAT); + } + + /** + * Constructs an instance. + * + * @param definingClass {@code non-null;} the type of the defining class + * @param nat {@code non-null;} the name-and-type + */ + public CstFieldRef(CstType definingClass, CstNat nat) { + super(definingClass, nat); + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "field"; + } + + /** + * Returns the type of this field. + * + * @return {@code non-null;} the field's type + */ + public Type getType() { + return getNat().getFieldType(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + int cmp = super.compareTo0(other); + + if (cmp != 0) { + return cmp; + } + + CstFieldRef otherField = (CstFieldRef) other; + CstUtf8 thisDescriptor = getNat().getDescriptor(); + CstUtf8 otherDescriptor = otherField.getNat().getDescriptor(); + return thisDescriptor.compareTo(otherDescriptor); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstFloat.java b/dexgen/src/com/android/dexgen/rop/cst/CstFloat.java new file mode 100644 index 0000000..6490f8f --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstFloat.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.Hex; + +/** + * Constants of type {@code CONSTANT_Float_info}. + */ +public final class CstFloat + extends CstLiteral32 { + /** {@code non-null;} instance representing {@code 0} */ + public static final CstFloat VALUE_0 = make(Float.floatToIntBits(0.0f)); + + /** {@code non-null;} instance representing {@code 1} */ + public static final CstFloat VALUE_1 = make(Float.floatToIntBits(1.0f)); + + /** {@code non-null;} instance representing {@code 2} */ + public static final CstFloat VALUE_2 = make(Float.floatToIntBits(2.0f)); + + /** + * Makes an instance for the given value. This may (but does not + * necessarily) return an already-allocated instance. + * + * @param bits the {@code float} value as {@code int} bits + */ + public static CstFloat make(int bits) { + /* + * Note: Javadoc notwithstanding, this implementation always + * allocates. + */ + return new CstFloat(bits); + } + + /** + * Constructs an instance. This constructor is private; use {@link #make}. + * + * @param bits the {@code float} value as {@code int} bits + */ + private CstFloat(int bits) { + super(bits); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + int bits = getIntBits(); + return "float{0x" + Hex.u4(bits) + " / " + + Float.intBitsToFloat(bits) + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.FLOAT; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "float"; + } + + /** {@inheritDoc} */ + public String toHuman() { + return Float.toString(Float.intBitsToFloat(getIntBits())); + } + + /** + * Gets the {@code float} value. + * + * @return the value + */ + public float getValue() { + return Float.intBitsToFloat(getIntBits()); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstInteger.java b/dexgen/src/com/android/dexgen/rop/cst/CstInteger.java new file mode 100644 index 0000000..41ef0a6 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstInteger.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.Hex; + +/** + * Constants of type {@code CONSTANT_Integer_info}. + */ +public final class CstInteger + extends CstLiteral32 { + /** {@code non-null;} array of cached instances */ + private static final CstInteger[] cache = new CstInteger[511]; + + /** {@code non-null;} instance representing {@code -1} */ + public static final CstInteger VALUE_M1 = make(-1); + + /** {@code non-null;} instance representing {@code 0} */ + public static final CstInteger VALUE_0 = make(0); + + /** {@code non-null;} instance representing {@code 1} */ + public static final CstInteger VALUE_1 = make(1); + + /** {@code non-null;} instance representing {@code 2} */ + public static final CstInteger VALUE_2 = make(2); + + /** {@code non-null;} instance representing {@code 3} */ + public static final CstInteger VALUE_3 = make(3); + + /** {@code non-null;} instance representing {@code 4} */ + public static final CstInteger VALUE_4 = make(4); + + /** {@code non-null;} instance representing {@code 5} */ + public static final CstInteger VALUE_5 = make(5); + + /** + * Makes an instance for the given value. This may (but does not + * necessarily) return an already-allocated instance. + * + * @param value the {@code int} value + * @return {@code non-null;} the appropriate instance + */ + public static CstInteger make(int value) { + /* + * Note: No need to synchronize, since we don't make any sort + * of guarantee about ==, and it's okay to overwrite existing + * entries too. + */ + int idx = (value & 0x7fffffff) % cache.length; + CstInteger obj = cache[idx]; + + if ((obj != null) && (obj.getValue() == value)) { + return obj; + } + + obj = new CstInteger(value); + cache[idx] = obj; + return obj; + } + + /** + * Constructs an instance. This constructor is private; use {@link #make}. + * + * @param value the {@code int} value + */ + private CstInteger(int value) { + super(value); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + int value = getIntBits(); + return "int{0x" + Hex.u4(value) + " / " + value + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.INT; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "int"; + } + + /** {@inheritDoc} */ + public String toHuman() { + return Integer.toString(getIntBits()); + } + + /** + * Gets the {@code int} value. + * + * @return the value + */ + public int getValue() { + return getIntBits(); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstInterfaceMethodRef.java b/dexgen/src/com/android/dexgen/rop/cst/CstInterfaceMethodRef.java new file mode 100644 index 0000000..c514b84 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstInterfaceMethodRef.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +/** + * Constants of type {@code CONSTANT_InterfaceMethodref_info}. + */ +public final class CstInterfaceMethodRef + extends CstBaseMethodRef { + /** + * {@code null-ok;} normal {@link CstMethodRef} that corresponds to this + * instance, if calculated + */ + private CstMethodRef methodRef; + + /** + * Constructs an instance. + * + * @param definingClass {@code non-null;} the type of the defining class + * @param nat {@code non-null;} the name-and-type + */ + public CstInterfaceMethodRef(CstType definingClass, CstNat nat) { + super(definingClass, nat); + methodRef = null; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "ifaceMethod"; + } + + /** + * Gets a normal (non-interface) {@link CstMethodRef} that corresponds to + * this instance. + * + * @return {@code non-null;} an appropriate instance + */ + public CstMethodRef toMethodRef() { + if (methodRef == null) { + methodRef = new CstMethodRef(getDefiningClass(), getNat()); + } + + return methodRef; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstKnownNull.java b/dexgen/src/com/android/dexgen/rop/cst/CstKnownNull.java new file mode 100644 index 0000000..58d6933 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstKnownNull.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; + +/** + * Constant type to represent a known-{@code null} value. + */ +public final class CstKnownNull extends CstLiteralBits { + /** {@code non-null;} unique instance of this class */ + public static final CstKnownNull THE_ONE = new CstKnownNull(); + + /** + * Constructs an instance. This class is not publicly instantiable. Use + * {@link #THE_ONE}. + */ + private CstKnownNull() { + // This space intentionally left blank. + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + return (other instanceof CstKnownNull); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return 0x4466757a; + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + return 0; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return "known-null"; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.KNOWN_NULL; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "known-null"; + } + + /** {@inheritDoc} */ + @Override + public boolean isCategory2() { + return false; + } + + /** {@inheritDoc} */ + public String toHuman() { + return "null"; + } + + /** {@inheritDoc} */ + @Override + public boolean fitsInInt() { + // See comment in getIntBits(). + return true; + } + + /** + * {@inheritDoc} + * + * As "literal bits," a known-null is always represented as the + * number zero. + */ + @Override + public int getIntBits() { + return 0; + } + + /** + * {@inheritDoc} + * + * As "literal bits," a known-null is always represented as the + * number zero. + */ + @Override + public long getLongBits() { + return 0; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstLiteral32.java b/dexgen/src/com/android/dexgen/rop/cst/CstLiteral32.java new file mode 100644 index 0000000..f7f9199 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstLiteral32.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +/** + * Constants which are literal 32-bit values of some sort. + */ +public abstract class CstLiteral32 + extends CstLiteralBits { + /** the value as {@code int} bits */ + private final int bits; + + /** + * Constructs an instance. + * + * @param bits the value as {@code int} bits + */ + /*package*/ CstLiteral32(int bits) { + this.bits = bits; + } + + /** {@inheritDoc} */ + @Override + public final boolean equals(Object other) { + return (other != null) && + (getClass() == other.getClass()) && + bits == ((CstLiteral32) other).bits; + } + + /** {@inheritDoc} */ + @Override + public final int hashCode() { + return bits; + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + int otherBits = ((CstLiteral32) other).bits; + + if (bits < otherBits) { + return -1; + } else if (bits > otherBits) { + return 1; + } else { + return 0; + } + } + + /** {@inheritDoc} */ + @Override + public final boolean isCategory2() { + return false; + } + + /** {@inheritDoc} */ + @Override + public final boolean fitsInInt() { + return true; + } + + /** {@inheritDoc} */ + @Override + public final int getIntBits() { + return bits; + } + + /** {@inheritDoc} */ + @Override + public final long getLongBits() { + return (long) bits; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstLiteral64.java b/dexgen/src/com/android/dexgen/rop/cst/CstLiteral64.java new file mode 100644 index 0000000..0bf3152 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstLiteral64.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +/** + * Constants which are literal 64-bit values of some sort. + */ +public abstract class CstLiteral64 + extends CstLiteralBits { + /** the value as {@code long} bits */ + private final long bits; + + /** + * Constructs an instance. + * + * @param bits the value as {@code long} bits + */ + /*package*/ CstLiteral64(long bits) { + this.bits = bits; + } + + /** {@inheritDoc} */ + @Override + public final boolean equals(Object other) { + return (other != null) && + (getClass() == other.getClass()) && + bits == ((CstLiteral64) other).bits; + } + + /** {@inheritDoc} */ + @Override + public final int hashCode() { + return (int) bits ^ (int) (bits >> 32); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + long otherBits = ((CstLiteral64) other).bits; + + if (bits < otherBits) { + return -1; + } else if (bits > otherBits) { + return 1; + } else { + return 0; + } + } + + /** {@inheritDoc} */ + @Override + public final boolean isCategory2() { + return true; + } + + /** {@inheritDoc} */ + @Override + public final boolean fitsInInt() { + return (int) bits == bits; + } + + /** {@inheritDoc} */ + @Override + public final int getIntBits() { + return (int) bits; + } + + /** {@inheritDoc} */ + @Override + public final long getLongBits() { + return bits; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstLiteralBits.java b/dexgen/src/com/android/dexgen/rop/cst/CstLiteralBits.java new file mode 100644 index 0000000..97e8bd1 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstLiteralBits.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +/** + * Constants which are literal bitwise values of some sort. + */ +public abstract class CstLiteralBits + extends TypedConstant { + /** + * Returns whether or not this instance's value may be accurately + * represented as an {@code int}. The rule is that if there + * is an {@code int} which may be sign-extended to yield this + * instance's value, then this method returns {@code true}. + * Otherwise, it returns {@code false}. + * + * @return {@code true} iff this instance fits in an {@code int} + */ + public abstract boolean fitsInInt(); + + /** + * Gets the value as {@code int} bits. If this instance contains + * more bits than fit in an {@code int}, then this returns only + * the low-order bits. + * + * @return the bits + */ + public abstract int getIntBits(); + + /** + * Gets the value as {@code long} bits. If this instance contains + * fewer bits than fit in a {@code long}, then the result of this + * method is the sign extension of the value. + * + * @return the bits + */ + public abstract long getLongBits(); + + /** + * Returns true if this value can fit in 16 bits with sign-extension. + * + * @return true if the sign-extended lower 16 bits are the same as + * the value. + */ + public boolean fitsIn16Bits() { + if (! fitsInInt()) { + return false; + } + + int bits = getIntBits(); + return (short) bits == bits; + } + + /** + * Returns true if this value can fit in 8 bits with sign-extension. + * + * @return true if the sign-extended lower 8 bits are the same as + * the value. + */ + public boolean fitsIn8Bits() { + if (! fitsInInt()) { + return false; + } + + int bits = getIntBits(); + return (byte) bits == bits; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstLong.java b/dexgen/src/com/android/dexgen/rop/cst/CstLong.java new file mode 100644 index 0000000..f737094 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstLong.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.Hex; + +/** + * Constants of type {@code CONSTANT_Long_info}. + */ +public final class CstLong + extends CstLiteral64 { + /** {@code non-null;} instance representing {@code 0} */ + public static final CstLong VALUE_0 = make(0); + + /** {@code non-null;} instance representing {@code 1} */ + public static final CstLong VALUE_1 = make(1); + + /** + * Makes an instance for the given value. This may (but does not + * necessarily) return an already-allocated instance. + * + * @param value the {@code long} value + */ + public static CstLong make(long value) { + /* + * Note: Javadoc notwithstanding, this implementation always + * allocates. + */ + return new CstLong(value); + } + + /** + * Constructs an instance. This constructor is private; use {@link #make}. + * + * @param value the {@code long} value + */ + private CstLong(long value) { + super(value); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + long value = getLongBits(); + return "long{0x" + Hex.u8(value) + " / " + value + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.LONG; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "long"; + } + + /** {@inheritDoc} */ + public String toHuman() { + return Long.toString(getLongBits()); + } + + /** + * Gets the {@code long} value. + * + * @return the value + */ + public long getValue() { + return getLongBits(); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstMemberRef.java b/dexgen/src/com/android/dexgen/rop/cst/CstMemberRef.java new file mode 100644 index 0000000..5abca4b --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstMemberRef.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +/** + * Constants of type {@code CONSTANT_*ref_info}. + */ +public abstract class CstMemberRef extends TypedConstant { + /** {@code non-null;} the type of the defining class */ + private final CstType definingClass; + + /** {@code non-null;} the name-and-type */ + private final CstNat nat; + + /** + * Constructs an instance. + * + * @param definingClass {@code non-null;} the type of the defining class + * @param nat {@code non-null;} the name-and-type + */ + /*package*/ CstMemberRef(CstType definingClass, CstNat nat) { + if (definingClass == null) { + throw new NullPointerException("definingClass == null"); + } + + if (nat == null) { + throw new NullPointerException("nat == null"); + } + + this.definingClass = definingClass; + this.nat = nat; + } + + /** {@inheritDoc} */ + @Override + public final boolean equals(Object other) { + if ((other == null) || (getClass() != other.getClass())) { + return false; + } + + CstMemberRef otherRef = (CstMemberRef) other; + return definingClass.equals(otherRef.definingClass) && + nat.equals(otherRef.nat); + } + + /** {@inheritDoc} */ + @Override + public final int hashCode() { + return (definingClass.hashCode() * 31) ^ nat.hashCode(); + } + + /** + * {@inheritDoc} + * + *

Note: This implementation just compares the defining + * class and name, and it is up to subclasses to compare the rest + * after calling {@code super.compareTo0()}.

+ */ + @Override + protected int compareTo0(Constant other) { + CstMemberRef otherMember = (CstMemberRef) other; + int cmp = definingClass.compareTo(otherMember.definingClass); + + if (cmp != 0) { + return cmp; + } + + CstUtf8 thisName = nat.getName(); + CstUtf8 otherName = otherMember.nat.getName(); + + return thisName.compareTo(otherName); + } + + /** {@inheritDoc} */ + @Override + public final String toString() { + return typeName() + '{' + toHuman() + '}'; + } + + /** {@inheritDoc} */ + @Override + public final boolean isCategory2() { + return false; + } + + /** {@inheritDoc} */ + public final String toHuman() { + return definingClass.toHuman() + '.' + nat.toHuman(); + } + + /** + * Gets the type of the defining class. + * + * @return {@code non-null;} the type of defining class + */ + public final CstType getDefiningClass() { + return definingClass; + } + + /** + * Gets the defining name-and-type. + * + * @return {@code non-null;} the name-and-type + */ + public final CstNat getNat() { + return nat; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstMethodRef.java b/dexgen/src/com/android/dexgen/rop/cst/CstMethodRef.java new file mode 100644 index 0000000..0bf3851 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstMethodRef.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +/** + * Constants of type {@code CONSTANT_Methodref_info}. + */ +public final class CstMethodRef + extends CstBaseMethodRef { + /** + * Constructs an instance. + * + * @param definingClass {@code non-null;} the type of the defining class + * @param nat {@code non-null;} the name-and-type + */ + public CstMethodRef(CstType definingClass, CstNat nat) { + super(definingClass, nat); + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "method"; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstNat.java b/dexgen/src/com/android/dexgen/rop/cst/CstNat.java new file mode 100644 index 0000000..34d2bfc --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstNat.java @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; + +/** + * Constants of type {@code CONSTANT_NameAndType_info}. + */ +public final class CstNat extends Constant { + /** + * {@code non-null;} the instance for name {@code TYPE} and descriptor + * {@code java.lang.Class}, which is useful when dealing with + * wrapped primitives + */ + public static final CstNat PRIMITIVE_TYPE_NAT = + new CstNat(new CstUtf8("TYPE"), + new CstUtf8("Ljava/lang/Class;")); + + /** {@code non-null;} the name */ + private final CstUtf8 name; + + /** {@code non-null;} the descriptor (type) */ + private final CstUtf8 descriptor; + + /** + * Constructs an instance. + * + * @param name {@code non-null;} the name + * @param descriptor {@code non-null;} the descriptor + */ + public CstNat(CstUtf8 name, CstUtf8 descriptor) { + if (name == null) { + throw new NullPointerException("name == null"); + } + + if (descriptor == null) { + throw new NullPointerException("descriptor == null"); + } + + this.name = name; + this.descriptor = descriptor; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof CstNat)) { + return false; + } + + CstNat otherNat = (CstNat) other; + return name.equals(otherNat.name) && + descriptor.equals(otherNat.descriptor); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return (name.hashCode() * 31) ^ descriptor.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + CstNat otherNat = (CstNat) other; + int cmp = name.compareTo(otherNat.name); + + if (cmp != 0) { + return cmp; + } + + return descriptor.compareTo(otherNat.descriptor); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return "nat{" + toHuman() + '}'; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "nat"; + } + + /** {@inheritDoc} */ + @Override + public boolean isCategory2() { + return false; + } + + /** + * Gets the name. + * + * @return {@code non-null;} the name + */ + public CstUtf8 getName() { + return name; + } + + /** + * Gets the descriptor. + * + * @return {@code non-null;} the descriptor + */ + public CstUtf8 getDescriptor() { + return descriptor; + } + + /** + * Returns an unadorned but human-readable version of the name-and-type + * value. + * + * @return {@code non-null;} the human form + */ + public String toHuman() { + return name.toHuman() + ':' + descriptor.toHuman(); + } + + /** + * Gets the field type corresponding to this instance's descriptor. + * This method is only valid to call if the descriptor in fact describes + * a field (and not a method). + * + * @return {@code non-null;} the field type + */ + public Type getFieldType() { + return Type.intern(descriptor.getString()); + } + + /** + * Gets whether this instance has the name of a standard instance + * initialization method. This is just a convenient shorthand for + * {@code getName().getString().equals("")}. + * + * @return {@code true} iff this is a reference to an + * instance initialization method + */ + public final boolean isInstanceInit() { + return name.getString().equals(""); + } + + /** + * Gets whether this instance has the name of a standard class + * initialization method. This is just a convenient shorthand for + * {@code getName().getString().equals("")}. + * + * @return {@code true} iff this is a reference to an + * instance initialization method + */ + public final boolean isClassInit() { + return name.getString().equals(""); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstShort.java b/dexgen/src/com/android/dexgen/rop/cst/CstShort.java new file mode 100644 index 0000000..c81a589 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstShort.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; +import com.android.dexgen.util.Hex; + +/** + * Constants of type {@code short}. + */ +public final class CstShort + extends CstLiteral32 { + /** {@code non-null;} the value {@code 0} as an instance of this class */ + public static final CstShort VALUE_0 = make((short) 0); + + /** + * Makes an instance for the given value. This may (but does not + * necessarily) return an already-allocated instance. + * + * @param value the {@code short} value + * @return {@code non-null;} the appropriate instance + */ + public static CstShort make(short value) { + return new CstShort(value); + } + + /** + * Makes an instance for the given {@code int} value. This + * may (but does not necessarily) return an already-allocated + * instance. + * + * @param value the value, which must be in range for a {@code short} + * @return {@code non-null;} the appropriate instance + */ + public static CstShort make(int value) { + short cast = (short) value; + + if (cast != value) { + throw new IllegalArgumentException("bogus short value: " + + value); + } + + return make(cast); + } + + /** + * Constructs an instance. This constructor is private; use {@link #make}. + * + * @param value the {@code short} value + */ + private CstShort(short value) { + super(value); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + int value = getIntBits(); + return "short{0x" + Hex.u2(value) + " / " + value + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.SHORT; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "short"; + } + + /** {@inheritDoc} */ + public String toHuman() { + return Integer.toString(getIntBits()); + } + + /** + * Gets the {@code short} value. + * + * @return the value + */ + public short getValue() { + return (short) getIntBits(); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstString.java b/dexgen/src/com/android/dexgen/rop/cst/CstString.java new file mode 100644 index 0000000..a2babf4 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstString.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; + +/** + * Constants of type {@code CONSTANT_String_info}. + */ +public final class CstString + extends TypedConstant { + /** {@code non-null;} the string value */ + private final CstUtf8 string; + + /** + * Constructs an instance. + * + * @param string {@code non-null;} the string value + */ + public CstString(CstUtf8 string) { + if (string == null) { + throw new NullPointerException("string == null"); + } + + this.string = string; + } + + /** + * Constructs an instance. + * + * @param string {@code non-null;} the string value + */ + public CstString(String string) { + this(new CstUtf8(string)); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof CstString)) { + return false; + } + + return string.equals(((CstString) other).string); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return string.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + return string.compareTo(((CstString) other).string); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return "string{" + toHuman() + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.STRING; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "string"; + } + + /** {@inheritDoc} */ + @Override + public boolean isCategory2() { + return false; + } + + /** {@inheritDoc} */ + public String toHuman() { + return string.toQuoted(); + } + + /** + * Gets the string value. + * + * @return {@code non-null;} the string value + */ + public CstUtf8 getString() { + return string; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstType.java b/dexgen/src/com/android/dexgen/rop/cst/CstType.java new file mode 100644 index 0000000..8ad418b --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstType.java @@ -0,0 +1,241 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; + +import java.util.HashMap; + +/** + * Constants that represent an arbitrary type (reference or primitive). + */ +public final class CstType extends TypedConstant { + /** {@code non-null;} map of interned types */ + private static final HashMap interns = + new HashMap(100); + + /** {@code non-null;} instance corresponding to the class {@code Object} */ + public static final CstType OBJECT = intern(Type.OBJECT); + + /** {@code non-null;} instance corresponding to the class {@code Boolean} */ + public static final CstType BOOLEAN = intern(Type.BOOLEAN_CLASS); + + /** {@code non-null;} instance corresponding to the class {@code Byte} */ + public static final CstType BYTE = intern(Type.BYTE_CLASS); + + /** {@code non-null;} instance corresponding to the class {@code Character} */ + public static final CstType CHARACTER = intern(Type.CHARACTER_CLASS); + + /** {@code non-null;} instance corresponding to the class {@code Double} */ + public static final CstType DOUBLE = intern(Type.DOUBLE_CLASS); + + /** {@code non-null;} instance corresponding to the class {@code Float} */ + public static final CstType FLOAT = intern(Type.FLOAT_CLASS); + + /** {@code non-null;} instance corresponding to the class {@code Long} */ + public static final CstType LONG = intern(Type.LONG_CLASS); + + /** {@code non-null;} instance corresponding to the class {@code Integer} */ + public static final CstType INTEGER = intern(Type.INTEGER_CLASS); + + /** {@code non-null;} instance corresponding to the class {@code Short} */ + public static final CstType SHORT = intern(Type.SHORT_CLASS); + + /** {@code non-null;} instance corresponding to the class {@code Void} */ + public static final CstType VOID = intern(Type.VOID_CLASS); + + /** {@code non-null;} instance corresponding to the type {@code boolean[]} */ + public static final CstType BOOLEAN_ARRAY = intern(Type.BOOLEAN_ARRAY); + + /** {@code non-null;} instance corresponding to the type {@code byte[]} */ + public static final CstType BYTE_ARRAY = intern(Type.BYTE_ARRAY); + + /** {@code non-null;} instance corresponding to the type {@code char[]} */ + public static final CstType CHAR_ARRAY = intern(Type.CHAR_ARRAY); + + /** {@code non-null;} instance corresponding to the type {@code double[]} */ + public static final CstType DOUBLE_ARRAY = intern(Type.DOUBLE_ARRAY); + + /** {@code non-null;} instance corresponding to the type {@code float[]} */ + public static final CstType FLOAT_ARRAY = intern(Type.FLOAT_ARRAY); + + /** {@code non-null;} instance corresponding to the type {@code long[]} */ + public static final CstType LONG_ARRAY = intern(Type.LONG_ARRAY); + + /** {@code non-null;} instance corresponding to the type {@code int[]} */ + public static final CstType INT_ARRAY = intern(Type.INT_ARRAY); + + /** {@code non-null;} instance corresponding to the type {@code short[]} */ + public static final CstType SHORT_ARRAY = intern(Type.SHORT_ARRAY); + + /** {@code non-null;} the underlying type */ + private final Type type; + + /** + * {@code null-ok;} the type descriptor corresponding to this instance, if + * calculated + */ + private CstUtf8 descriptor; + + /** + * Returns an instance of this class that represents the wrapper + * class corresponding to a given primitive type. For example, if + * given {@link Type#INT}, this method returns the class reference + * {@code java.lang.Integer}. + * + * @param primitiveType {@code non-null;} the primitive type + * @return {@code non-null;} the corresponding wrapper class + */ + public static CstType forBoxedPrimitiveType(Type primitiveType) { + switch (primitiveType.getBasicType()) { + case Type.BT_BOOLEAN: return BOOLEAN; + case Type.BT_BYTE: return BYTE; + case Type.BT_CHAR: return CHARACTER; + case Type.BT_DOUBLE: return DOUBLE; + case Type.BT_FLOAT: return FLOAT; + case Type.BT_INT: return INTEGER; + case Type.BT_LONG: return LONG; + case Type.BT_SHORT: return SHORT; + case Type.BT_VOID: return VOID; + } + + throw new IllegalArgumentException("not primitive: " + primitiveType); + } + + /** + * Returns an interned instance of this class for the given type. + * + * @param type {@code non-null;} the underlying type + * @return {@code non-null;} an appropriately-constructed instance + */ + public static CstType intern(Type type) { + CstType cst = interns.get(type); + + if (cst == null) { + cst = new CstType(type); + interns.put(type, cst); + } + + return cst; + } + + /** + * Returns an interned instance of this class for the given + * {@code Class} instance. + * + * @param clazz {@code non-null;} the underlying {@code Class} object + * @return {@code non-null;} an appropriately-constructed instance + */ + public static CstType intern(Class clazz) { + return intern(Type.intern(clazz)); + } + + /** + * Constructs an instance. + * + * @param type {@code non-null;} the underlying type + */ + public CstType(Type type) { + if (type == null) { + throw new NullPointerException("type == null"); + } + + if (type == type.KNOWN_NULL) { + throw new UnsupportedOperationException( + "KNOWN_NULL is not representable"); + } + + this.type = type; + this.descriptor = null; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof CstType)) { + return false; + } + + return type == ((CstType) other).type; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return type.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + String thisDescriptor = type.getDescriptor(); + String otherDescriptor = ((CstType) other).type.getDescriptor(); + return thisDescriptor.compareTo(otherDescriptor); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return "type{" + toHuman() + '}'; + } + + /** {@inheritDoc} */ + public Type getType() { + return Type.CLASS; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "type"; + } + + /** {@inheritDoc} */ + @Override + public boolean isCategory2() { + return false; + } + + /** {@inheritDoc} */ + public String toHuman() { + return type.toHuman(); + } + + /** + * Gets the underlying type (as opposed to the type corresponding + * to this instance as a constant, which is always + * {@code Class}). + * + * @return {@code non-null;} the type corresponding to the name + */ + public Type getClassType() { + return type; + } + + /** + * Gets the type descriptor for this instance. + * + * @return {@code non-null;} the descriptor + */ + public CstUtf8 getDescriptor() { + if (descriptor == null) { + descriptor = new CstUtf8(type.getDescriptor()); + } + + return descriptor; + } +} \ No newline at end of file diff --git a/dexgen/src/com/android/dexgen/rop/cst/CstUtf8.java b/dexgen/src/com/android/dexgen/rop/cst/CstUtf8.java new file mode 100644 index 0000000..161a57b --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/CstUtf8.java @@ -0,0 +1,371 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.util.ByteArray; +import com.android.dexgen.util.Hex; + +/** + * Constants of type {@code CONSTANT_Utf8_info}. + */ +public final class CstUtf8 extends Constant { + /** + * {@code non-null;} instance representing {@code ""}, that is, the + * empty string + */ + public static final CstUtf8 EMPTY_STRING = new CstUtf8(""); + + /** {@code non-null;} the UTF-8 value as a string */ + private final String string; + + /** {@code non-null;} the UTF-8 value as bytes */ + private final ByteArray bytes; + + /** + * Converts a string into its Java-style UTF-8 form. Java-style UTF-8 + * differs from normal UTF-8 in the handling of character '\0' and + * surrogate pairs. + * + * @param string {@code non-null;} the string to convert + * @return {@code non-null;} the UTF-8 bytes for it + */ + public static byte[] stringToUtf8Bytes(String string) { + int len = string.length(); + byte[] bytes = new byte[len * 3]; // Avoid having to reallocate. + int outAt = 0; + + for (int i = 0; i < len; i++) { + char c = string.charAt(i); + if ((c != 0) && (c < 0x80)) { + bytes[outAt] = (byte) c; + outAt++; + } else if (c < 0x800) { + bytes[outAt] = (byte) (((c >> 6) & 0x1f) | 0xc0); + bytes[outAt + 1] = (byte) ((c & 0x3f) | 0x80); + outAt += 2; + } else { + bytes[outAt] = (byte) (((c >> 12) & 0x0f) | 0xe0); + bytes[outAt + 1] = (byte) (((c >> 6) & 0x3f) | 0x80); + bytes[outAt + 2] = (byte) ((c & 0x3f) | 0x80); + outAt += 3; + } + } + + byte[] result = new byte[outAt]; + System.arraycopy(bytes, 0, result, 0, outAt); + return result; + } + + /** + * Converts an array of UTF-8 bytes into a string. + * + * @param bytes {@code non-null;} the bytes to convert + * @return {@code non-null;} the converted string + */ + public static String utf8BytesToString(ByteArray bytes) { + int length = bytes.size(); + char[] chars = new char[length]; // This is sized to avoid a realloc. + int outAt = 0; + + for (int at = 0; length > 0; /*at*/) { + int v0 = bytes.getUnsignedByte(at); + char out; + switch (v0 >> 4) { + case 0x00: case 0x01: case 0x02: case 0x03: + case 0x04: case 0x05: case 0x06: case 0x07: { + // 0XXXXXXX -- single-byte encoding + length--; + if (v0 == 0) { + // A single zero byte is illegal. + return throwBadUtf8(v0, at); + } + out = (char) v0; + at++; + break; + } + case 0x0c: case 0x0d: { + // 110XXXXX -- two-byte encoding + length -= 2; + if (length < 0) { + return throwBadUtf8(v0, at); + } + int v1 = bytes.getUnsignedByte(at + 1); + if ((v1 & 0xc0) != 0x80) { + return throwBadUtf8(v1, at + 1); + } + int value = ((v0 & 0x1f) << 6) | (v1 & 0x3f); + if ((value != 0) && (value < 0x80)) { + /* + * This should have been represented with + * one-byte encoding. + */ + return throwBadUtf8(v1, at + 1); + } + out = (char) value; + at += 2; + break; + } + case 0x0e: { + // 1110XXXX -- three-byte encoding + length -= 3; + if (length < 0) { + return throwBadUtf8(v0, at); + } + int v1 = bytes.getUnsignedByte(at + 1); + if ((v1 & 0xc0) != 0x80) { + return throwBadUtf8(v1, at + 1); + } + int v2 = bytes.getUnsignedByte(at + 2); + if ((v1 & 0xc0) != 0x80) { + return throwBadUtf8(v2, at + 2); + } + int value = ((v0 & 0x0f) << 12) | ((v1 & 0x3f) << 6) | + (v2 & 0x3f); + if (value < 0x800) { + /* + * This should have been represented with one- or + * two-byte encoding. + */ + return throwBadUtf8(v2, at + 2); + } + out = (char) value; + at += 3; + break; + } + default: { + // 10XXXXXX, 1111XXXX -- illegal + return throwBadUtf8(v0, at); + } + } + chars[outAt] = out; + outAt++; + } + + return new String(chars, 0, outAt); + } + + /** + * Helper for {@link #utf8BytesToString}, which throws the right + * exception for a bogus utf-8 byte. + * + * @param value the byte value + * @param offset the file offset + * @return never + * @throws IllegalArgumentException always thrown + */ + private static String throwBadUtf8(int value, int offset) { + throw new IllegalArgumentException("bad utf-8 byte " + Hex.u1(value) + + " at offset " + Hex.u4(offset)); + } + + /** + * Constructs an instance from a {@code String}. + * + * @param string {@code non-null;} the UTF-8 value as a string + */ + public CstUtf8(String string) { + if (string == null) { + throw new NullPointerException("string == null"); + } + + this.string = string.intern(); + this.bytes = new ByteArray(stringToUtf8Bytes(string)); + } + + /** + * Constructs an instance from some UTF-8 bytes. + * + * @param bytes {@code non-null;} array of the UTF-8 bytes + */ + public CstUtf8(ByteArray bytes) { + if (bytes == null) { + throw new NullPointerException("bytes == null"); + } + + this.bytes = bytes; + this.string = utf8BytesToString(bytes).intern(); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (!(other instanceof CstUtf8)) { + return false; + } + + return string.equals(((CstUtf8) other).string); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return string.hashCode(); + } + + /** {@inheritDoc} */ + @Override + protected int compareTo0(Constant other) { + return string.compareTo(((CstUtf8) other).string); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return "utf8{\"" + toHuman() + "\"}"; + } + + /** {@inheritDoc} */ + @Override + public String typeName() { + return "utf8"; + } + + /** {@inheritDoc} */ + @Override + public boolean isCategory2() { + return false; + } + + /** {@inheritDoc} */ + public String toHuman() { + int len = string.length(); + StringBuilder sb = new StringBuilder(len * 3 / 2); + + for (int i = 0; i < len; i++) { + char c = string.charAt(i); + if ((c >= ' ') && (c < 0x7f)) { + if ((c == '\'') || (c == '\"') || (c == '\\')) { + sb.append('\\'); + } + sb.append(c); + } else if (c <= 0x7f) { + switch (c) { + case '\n': sb.append("\\n"); break; + case '\r': sb.append("\\r"); break; + case '\t': sb.append("\\t"); break; + default: { + /* + * Represent the character as an octal escape. + * If the next character is a valid octal + * digit, disambiguate by using the + * three-digit form. + */ + char nextChar = + (i < (len - 1)) ? string.charAt(i + 1) : 0; + boolean displayZero = + (nextChar >= '0') && (nextChar <= '7'); + sb.append('\\'); + for (int shift = 6; shift >= 0; shift -= 3) { + char outChar = (char) (((c >> shift) & 7) + '0'); + if ((outChar != '0') || displayZero) { + sb.append(outChar); + displayZero = true; + } + } + if (! displayZero) { + // Ironic edge case: The original value was 0. + sb.append('0'); + } + break; + } + } + } else { + sb.append("\\u"); + sb.append(Character.forDigit(c >> 12, 16)); + sb.append(Character.forDigit((c >> 8) & 0x0f, 16)); + sb.append(Character.forDigit((c >> 4) & 0x0f, 16)); + sb.append(Character.forDigit(c & 0x0f, 16)); + } + } + + return sb.toString(); + } + + /** + * Gets the value as a human-oriented string, surrounded by double + * quotes. + * + * @return {@code non-null;} the quoted string + */ + public String toQuoted() { + return '\"' + toHuman() + '\"'; + } + + /** + * Gets the value as a human-oriented string, surrounded by double + * quotes, but ellipsizes the result if it is longer than the given + * maximum length + * + * @param maxLength {@code >= 5;} the maximum length of the string to return + * @return {@code non-null;} the quoted string + */ + public String toQuoted(int maxLength) { + String string = toHuman(); + int length = string.length(); + String ellipses; + + if (length <= (maxLength - 2)) { + ellipses = ""; + } else { + string = string.substring(0, maxLength - 5); + ellipses = "..."; + } + + return '\"' + string + ellipses + '\"'; + } + + /** + * Gets the UTF-8 value as a string. + * The returned string is always already interned. + * + * @return {@code non-null;} the UTF-8 value as a string + */ + public String getString() { + return string; + } + + /** + * Gets the UTF-8 value as UTF-8 encoded bytes. + * + * @return {@code non-null;} an array of the UTF-8 bytes + */ + public ByteArray getBytes() { + return bytes; + } + + /** + * Gets the size of this instance as UTF-8 code points. That is, + * get the number of bytes in the UTF-8 encoding of this instance. + * + * @return {@code >= 0;} the UTF-8 size + */ + public int getUtf8Size() { + return bytes.size(); + } + + /** + * Gets the size of this instance as UTF-16 code points. That is, + * get the number of 16-bit chars in the UTF-16 encoding of this + * instance. This is the same as the {@code length} of the + * Java {@code String} representation of this instance. + * + * @return {@code >= 0;} the UTF-16 size + */ + public int getUtf16Size() { + return string.length(); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/StdConstantPool.java b/dexgen/src/com/android/dexgen/rop/cst/StdConstantPool.java new file mode 100644 index 0000000..5f1728a --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/StdConstantPool.java @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.util.ExceptionWithContext; +import com.android.dexgen.util.Hex; +import com.android.dexgen.util.MutabilityControl; + +/** + * Standard implementation of {@link ConstantPool}, which directly stores + * an array of {@link Constant} objects and can be made immutable. + */ +public final class StdConstantPool + extends MutabilityControl implements ConstantPool { + /** {@code non-null;} array of entries */ + private final Constant[] entries; + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the pool; this corresponds to the + * class file field {@code constant_pool_count}, and is in fact + * always at least one more than the actual size of the constant pool, + * as element {@code 0} is always invalid. + */ + public StdConstantPool(int size) { + super(size > 1); + + if (size < 1) { + throw new IllegalArgumentException("size < 1"); + } + + entries = new Constant[size]; + } + + /** {@inheritDoc} */ + public int size() { + return entries.length; + } + + /** {@inheritDoc} */ + public Constant getOrNull(int n) { + try { + return entries[n]; + } catch (IndexOutOfBoundsException ex) { + // Translate the exception. + return throwInvalid(n); + } + } + + /** {@inheritDoc} */ + public Constant get0Ok(int n) { + if (n == 0) { + return null; + } + + return get(n); + } + + /** {@inheritDoc} */ + public Constant get(int n) { + try { + Constant result = entries[n]; + + if (result == null) { + throwInvalid(n); + } + + return result; + } catch (IndexOutOfBoundsException ex) { + // Translate the exception. + return throwInvalid(n); + } + } + + /** + * Sets the entry at the given index. + * + * @param n {@code >= 1, < size();} which entry + * @param cst {@code null-ok;} the constant to store + */ + public void set(int n, Constant cst) { + throwIfImmutable(); + + boolean cat2 = (cst != null) && cst.isCategory2(); + + if (n < 1) { + throw new IllegalArgumentException("n < 1"); + } + + if (cat2) { + // Storing a category-2 entry nulls out the next index. + if (n == (entries.length - 1)) { + throw new IllegalArgumentException("(n == size - 1) && " + + "cst.isCategory2()"); + } + entries[n + 1] = null; + } + + if ((cst != null) && (entries[n] == null)) { + /* + * Overwriting the second half of a category-2 entry nulls out + * the first half. + */ + Constant prev = entries[n - 1]; + if ((prev != null) && prev.isCategory2()) { + entries[n - 1] = null; + } + } + + entries[n] = cst; + } + + /** + * Throws the right exception for an invalid cpi. + * + * @param idx the bad cpi + * @return never + * @throws ExceptionWithContext always thrown + */ + private static Constant throwInvalid(int idx) { + throw new ExceptionWithContext("invalid constant pool index " + + Hex.u2(idx)); + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/TypedConstant.java b/dexgen/src/com/android/dexgen/rop/cst/TypedConstant.java new file mode 100644 index 0000000..251f057 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/TypedConstant.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.TypeBearer; + +/** + * Base class for constants which implement {@link TypeBearer}. + */ +public abstract class TypedConstant + extends Constant implements TypeBearer { + /** + * {@inheritDoc} + * + * This implentation always returns {@code this}. + */ + public final TypeBearer getFrameType() { + return this; + } + + /** {@inheritDoc} */ + public final int getBasicType() { + return getType().getBasicType(); + } + + /** {@inheritDoc} */ + public final int getBasicFrameType() { + return getType().getBasicFrameType(); + } + + /** {@inheritDoc} */ + public final boolean isConstant() { + return true; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/cst/Zeroes.java b/dexgen/src/com/android/dexgen/rop/cst/Zeroes.java new file mode 100644 index 0000000..28da7db --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/cst/Zeroes.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.cst; + +import com.android.dexgen.rop.type.Type; + +/** + * Utility for turning types into zeroes. + */ +public final class Zeroes { + /** + * This class is uninstantiable. + */ + private Zeroes() { + // This space intentionally left blank. + } + + /** + * Gets the "zero" (or {@code null}) value for the given type. + * + * @param type {@code non-null;} the type in question + * @return {@code non-null;} its "zero" value + */ + public static Constant zeroFor(Type type) { + switch (type.getBasicType()) { + case Type.BT_BOOLEAN: return CstBoolean.VALUE_FALSE; + case Type.BT_BYTE: return CstByte.VALUE_0; + case Type.BT_CHAR: return CstChar.VALUE_0; + case Type.BT_DOUBLE: return CstDouble.VALUE_0; + case Type.BT_FLOAT: return CstFloat.VALUE_0; + case Type.BT_INT: return CstInteger.VALUE_0; + case Type.BT_LONG: return CstLong.VALUE_0; + case Type.BT_SHORT: return CstShort.VALUE_0; + case Type.BT_OBJECT: return CstKnownNull.THE_ONE; + default: { + throw new UnsupportedOperationException("no zero for type: " + + type.toHuman()); + } + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/type/Prototype.java b/dexgen/src/com/android/dexgen/rop/type/Prototype.java new file mode 100644 index 0000000..33fa918 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/type/Prototype.java @@ -0,0 +1,396 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.type; + +import java.util.HashMap; + +/** + * Representation of a method decriptor. Instances of this class are + * generally interned and may be usefully compared with each other + * using {@code ==}. + */ +public final class Prototype implements Comparable { + /** {@code non-null;} intern table mapping string descriptors to instances */ + private static final HashMap internTable = + new HashMap(500); + + /** {@code non-null;} method descriptor */ + private final String descriptor; + + /** {@code non-null;} return type */ + private final Type returnType; + + /** {@code non-null;} list of parameter types */ + private final StdTypeList parameterTypes; + + /** {@code null-ok;} list of parameter frame types, if calculated */ + private StdTypeList parameterFrameTypes; + + /** + * Returns the unique instance corresponding to the + * given method descriptor. See vmspec-2 sec4.3.3 for details on the + * field descriptor syntax. + * + * @param descriptor {@code non-null;} the descriptor + * @return {@code non-null;} the corresponding instance + * @throws IllegalArgumentException thrown if the descriptor has + * invalid syntax + */ + public static Prototype intern(String descriptor) { + if (descriptor == null) { + throw new NullPointerException("descriptor == null"); + } + Prototype result = internTable.get(descriptor); + if (result != null) { + return result; + } + + Type[] params = makeParameterArray(descriptor); + int paramCount = 0; + int at = 1; + + for (;;) { + int startAt = at; + char c = descriptor.charAt(at); + if (c == ')') { + at++; + break; + } + + // Skip array markers. + while (c == '[') { + at++; + c = descriptor.charAt(at); + } + + if (c == 'L') { + // It looks like the start of a class name; find the end. + int endAt = descriptor.indexOf(';', at); + if (endAt == -1) { + throw new IllegalArgumentException("bad descriptor"); + } + at = endAt + 1; + } else { + at++; + } + + params[paramCount] = + Type.intern(descriptor.substring(startAt, at)); + paramCount++; + } + + Type returnType = Type.internReturnType(descriptor.substring(at)); + StdTypeList parameterTypes = new StdTypeList(paramCount); + + for (int i = 0; i < paramCount; i++) { + parameterTypes.set(i, params[i]); + } + + result = new Prototype(descriptor, returnType, parameterTypes); + return putIntern(result); + } + + /** + * Helper for {@link #intern} which returns an empty array to + * populate with parsed parameter types, and which also ensures + * that there is a '(' at the start of the descriptor and a + * single ')' somewhere before the end. + * + * @param descriptor {@code non-null;} the descriptor string + * @return {@code non-null;} array large enough to hold all parsed parameter + * types, but which is likely actually larger than needed + */ + private static Type[] makeParameterArray(String descriptor) { + int length = descriptor.length(); + + if (descriptor.charAt(0) != '(') { + throw new IllegalArgumentException("bad descriptor"); + } + + /* + * This is a cheesy way to establish an upper bound on the + * number of parameters: Just count capital letters. + */ + int closeAt = 0; + int maxParams = 0; + for (int i = 1; i < length; i++) { + char c = descriptor.charAt(i); + if (c == ')') { + closeAt = i; + break; + } + if ((c >= 'A') && (c <= 'Z')) { + maxParams++; + } + } + + if ((closeAt == 0) || (closeAt == (length - 1))) { + throw new IllegalArgumentException("bad descriptor"); + } + + if (descriptor.indexOf(')', closeAt + 1) != -1) { + throw new IllegalArgumentException("bad descriptor"); + } + + return new Type[maxParams]; + } + + /** + * Interns an instance, adding to the descriptor as necessary based + * on the given definer, name, and flags. For example, an init + * method has an uninitialized object of type {@code definer} + * as its first argument. + * + * @param descriptor {@code non-null;} the descriptor string + * @param definer {@code non-null;} class the method is defined on + * @param isStatic whether this is a static method + * @param isInit whether this is an init method + * @return {@code non-null;} the interned instance + */ + public static Prototype intern(String descriptor, Type definer, + boolean isStatic, boolean isInit) { + Prototype base = intern(descriptor); + + if (isStatic) { + return base; + } + + if (isInit) { + definer = definer.asUninitialized(Integer.MAX_VALUE); + } + + return base.withFirstParameter(definer); + } + + /** + * Interns an instance which consists of the given number of + * {@code int}s along with the given return type + * + * @param returnType {@code non-null;} the return type + * @param count {@code > 0;} the number of elements in the prototype + * @return {@code non-null;} the interned instance + */ + public static Prototype internInts(Type returnType, int count) { + // Make the descriptor... + + StringBuffer sb = new StringBuffer(100); + + sb.append('('); + + for (int i = 0; i < count; i++) { + sb.append('I'); + } + + sb.append(')'); + sb.append(returnType.getDescriptor()); + + // ...and intern it. + return intern(sb.toString()); + } + + /** + * Constructs an instance. This is a private constructor; use one + * of the public static methods to get instances. + * + * @param descriptor {@code non-null;} the descriptor string + */ + private Prototype(String descriptor, Type returnType, + StdTypeList parameterTypes) { + if (descriptor == null) { + throw new NullPointerException("descriptor == null"); + } + + if (returnType == null) { + throw new NullPointerException("returnType == null"); + } + + if (parameterTypes == null) { + throw new NullPointerException("parameterTypes == null"); + } + + this.descriptor = descriptor; + this.returnType = returnType; + this.parameterTypes = parameterTypes; + this.parameterFrameTypes = null; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (this == other) { + /* + * Since externally-visible instances are interned, this + * check helps weed out some easy cases. + */ + return true; + } + + if (!(other instanceof Prototype)) { + return false; + } + + return descriptor.equals(((Prototype) other).descriptor); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return descriptor.hashCode(); + } + + /** {@inheritDoc} */ + public int compareTo(Prototype other) { + if (this == other) { + return 0; + } + + /* + * The return type is the major order, and then args in order, + * and then the shorter list comes first (similar to string + * sorting). + */ + + int result = returnType.compareTo(other.returnType); + + if (result != 0) { + return result; + } + + int thisSize = parameterTypes.size(); + int otherSize = other.parameterTypes.size(); + int size = Math.min(thisSize, otherSize); + + for (int i = 0; i < size; i++) { + Type thisType = parameterTypes.get(i); + Type otherType = other.parameterTypes.get(i); + + result = thisType.compareTo(otherType); + + if (result != 0) { + return result; + } + } + + if (thisSize < otherSize) { + return -1; + } else if (thisSize > otherSize) { + return 1; + } else { + return 0; + } + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return descriptor; + } + + /** + * Gets the descriptor string. + * + * @return {@code non-null;} the descriptor + */ + public String getDescriptor() { + return descriptor; + } + + /** + * Gets the return type. + * + * @return {@code non-null;} the return type + */ + public Type getReturnType() { + return returnType; + } + + /** + * Gets the list of parameter types. + * + * @return {@code non-null;} the list of parameter types + */ + public StdTypeList getParameterTypes() { + return parameterTypes; + } + + /** + * Gets the list of frame types corresponding to the list of parameter + * types. The difference between the two lists (if any) is that all + * "intlike" types (see {@link Type#isIntlike}) are replaced by + * {@link Type#INT}. + * + * @return {@code non-null;} the list of parameter frame types + */ + public StdTypeList getParameterFrameTypes() { + if (parameterFrameTypes == null) { + int sz = parameterTypes.size(); + StdTypeList list = new StdTypeList(sz); + boolean any = false; + for (int i = 0; i < sz; i++) { + Type one = parameterTypes.get(i); + if (one.isIntlike()) { + any = true; + one = Type.INT; + } + list.set(i, one); + } + parameterFrameTypes = any ? list : parameterTypes; + } + + return parameterFrameTypes; + } + + /** + * Returns a new interned instance, which is the same as this instance, + * except that it has an additional parameter prepended to the original's + * argument list. + * + * @param param {@code non-null;} the new first parameter + * @return {@code non-null;} an appropriately-constructed instance + */ + public Prototype withFirstParameter(Type param) { + String newDesc = "(" + param.getDescriptor() + descriptor.substring(1); + StdTypeList newParams = parameterTypes.withFirst(param); + + newParams.setImmutable(); + + Prototype result = + new Prototype(newDesc, returnType, newParams); + + return putIntern(result); + } + + /** + * Puts the given instance in the intern table if it's not already + * there. If a conflicting value is already in the table, then leave it. + * Return the interned value. + * + * @param desc {@code non-null;} instance to make interned + * @return {@code non-null;} the actual interned object + */ + private static Prototype putIntern(Prototype desc) { + synchronized (internTable) { + String descriptor = desc.getDescriptor(); + Prototype already = internTable.get(descriptor); + if (already != null) { + return already; + } + internTable.put(descriptor, desc); + return desc; + } + } +} diff --git a/dexgen/src/com/android/dexgen/rop/type/StdTypeList.java b/dexgen/src/com/android/dexgen/rop/type/StdTypeList.java new file mode 100644 index 0000000..a3e81ff --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/type/StdTypeList.java @@ -0,0 +1,407 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.type; + +import com.android.dexgen.util.FixedSizeList; + +/** + * Standard implementation of {@link TypeList}. + */ +public final class StdTypeList + extends FixedSizeList implements TypeList { + /** {@code non-null;} no-element instance */ + public static final StdTypeList EMPTY = new StdTypeList(0); + + /** {@code non-null;} the list {@code [int]} */ + public static final StdTypeList INT = StdTypeList.make(Type.INT); + + /** {@code non-null;} the list {@code [long]} */ + public static final StdTypeList LONG = StdTypeList.make(Type.LONG); + + /** {@code non-null;} the list {@code [float]} */ + public static final StdTypeList FLOAT = StdTypeList.make(Type.FLOAT); + + /** {@code non-null;} the list {@code [double]} */ + public static final StdTypeList DOUBLE = StdTypeList.make(Type.DOUBLE); + + /** {@code non-null;} the list {@code [Object]} */ + public static final StdTypeList OBJECT = StdTypeList.make(Type.OBJECT); + + /** {@code non-null;} the list {@code [ReturnAddress]} */ + public static final StdTypeList RETURN_ADDRESS + = StdTypeList.make(Type.RETURN_ADDRESS); + + /** {@code non-null;} the list {@code [Throwable]} */ + public static final StdTypeList THROWABLE = + StdTypeList.make(Type.THROWABLE); + + /** {@code non-null;} the list {@code [int, int]} */ + public static final StdTypeList INT_INT = + StdTypeList.make(Type.INT, Type.INT); + + /** {@code non-null;} the list {@code [long, long]} */ + public static final StdTypeList LONG_LONG = + StdTypeList.make(Type.LONG, Type.LONG); + + /** {@code non-null;} the list {@code [float, float]} */ + public static final StdTypeList FLOAT_FLOAT = + StdTypeList.make(Type.FLOAT, Type.FLOAT); + + /** {@code non-null;} the list {@code [double, double]} */ + public static final StdTypeList DOUBLE_DOUBLE = + StdTypeList.make(Type.DOUBLE, Type.DOUBLE); + + /** {@code non-null;} the list {@code [Object, Object]} */ + public static final StdTypeList OBJECT_OBJECT = + StdTypeList.make(Type.OBJECT, Type.OBJECT); + + /** {@code non-null;} the list {@code [int, Object]} */ + public static final StdTypeList INT_OBJECT = + StdTypeList.make(Type.INT, Type.OBJECT); + + /** {@code non-null;} the list {@code [long, Object]} */ + public static final StdTypeList LONG_OBJECT = + StdTypeList.make(Type.LONG, Type.OBJECT); + + /** {@code non-null;} the list {@code [float, Object]} */ + public static final StdTypeList FLOAT_OBJECT = + StdTypeList.make(Type.FLOAT, Type.OBJECT); + + /** {@code non-null;} the list {@code [double, Object]} */ + public static final StdTypeList DOUBLE_OBJECT = + StdTypeList.make(Type.DOUBLE, Type.OBJECT); + + /** {@code non-null;} the list {@code [long, int]} */ + public static final StdTypeList LONG_INT = + StdTypeList.make(Type.LONG, Type.INT); + + /** {@code non-null;} the list {@code [int[], int]} */ + public static final StdTypeList INTARR_INT = + StdTypeList.make(Type.INT_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [long[], int]} */ + public static final StdTypeList LONGARR_INT = + StdTypeList.make(Type.LONG_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [float[], int]} */ + public static final StdTypeList FLOATARR_INT = + StdTypeList.make(Type.FLOAT_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [double[], int]} */ + public static final StdTypeList DOUBLEARR_INT = + StdTypeList.make(Type.DOUBLE_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [Object[], int]} */ + public static final StdTypeList OBJECTARR_INT = + StdTypeList.make(Type.OBJECT_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [boolean[], int]} */ + public static final StdTypeList BOOLEANARR_INT = + StdTypeList.make(Type.BOOLEAN_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [byte[], int]} */ + public static final StdTypeList BYTEARR_INT = + StdTypeList.make(Type.BYTE_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [char[], int]} */ + public static final StdTypeList CHARARR_INT = + StdTypeList.make(Type.CHAR_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [short[], int]} */ + public static final StdTypeList SHORTARR_INT = + StdTypeList.make(Type.SHORT_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [int, int[], int]} */ + public static final StdTypeList INT_INTARR_INT = + StdTypeList.make(Type.INT, Type.INT_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [long, long[], int]} */ + public static final StdTypeList LONG_LONGARR_INT = + StdTypeList.make(Type.LONG, Type.LONG_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [float, float[], int]} */ + public static final StdTypeList FLOAT_FLOATARR_INT = + StdTypeList.make(Type.FLOAT, Type.FLOAT_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [double, double[], int]} */ + public static final StdTypeList DOUBLE_DOUBLEARR_INT = + StdTypeList.make(Type.DOUBLE, Type.DOUBLE_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [Object, Object[], int]} */ + public static final StdTypeList OBJECT_OBJECTARR_INT = + StdTypeList.make(Type.OBJECT, Type.OBJECT_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [int, boolean[], int]} */ + public static final StdTypeList INT_BOOLEANARR_INT = + StdTypeList.make(Type.INT, Type.BOOLEAN_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [int, byte[], int]} */ + public static final StdTypeList INT_BYTEARR_INT = + StdTypeList.make(Type.INT, Type.BYTE_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [int, char[], int]} */ + public static final StdTypeList INT_CHARARR_INT = + StdTypeList.make(Type.INT, Type.CHAR_ARRAY, Type.INT); + + /** {@code non-null;} the list {@code [int, short[], int]} */ + public static final StdTypeList INT_SHORTARR_INT = + StdTypeList.make(Type.INT, Type.SHORT_ARRAY, Type.INT); + + /** + * Makes a single-element instance. + * + * @param type {@code non-null;} the element + * @return {@code non-null;} an appropriately-constructed instance + */ + public static StdTypeList make(Type type) { + StdTypeList result = new StdTypeList(1); + result.set(0, type); + return result; + } + + /** + * Makes a two-element instance. + * + * @param type0 {@code non-null;} the first element + * @param type1 {@code non-null;} the second element + * @return {@code non-null;} an appropriately-constructed instance + */ + public static StdTypeList make(Type type0, Type type1) { + StdTypeList result = new StdTypeList(2); + result.set(0, type0); + result.set(1, type1); + return result; + } + + /** + * Makes a three-element instance. + * + * @param type0 {@code non-null;} the first element + * @param type1 {@code non-null;} the second element + * @param type2 {@code non-null;} the third element + * @return {@code non-null;} an appropriately-constructed instance + */ + public static StdTypeList make(Type type0, Type type1, Type type2) { + StdTypeList result = new StdTypeList(3); + result.set(0, type0); + result.set(1, type1); + result.set(2, type2); + return result; + } + + /** + * Makes a four-element instance. + * + * @param type0 {@code non-null;} the first element + * @param type1 {@code non-null;} the second element + * @param type2 {@code non-null;} the third element + * @param type3 {@code non-null;} the fourth element + * @return {@code non-null;} an appropriately-constructed instance + */ + public static StdTypeList make(Type type0, Type type1, Type type2, + Type type3) { + StdTypeList result = new StdTypeList(4); + result.set(0, type0); + result.set(1, type1); + result.set(2, type2); + result.set(3, type3); + return result; + } + + /** + * Returns the given list as a comma-separated list of human forms. This + * is a static method so as to work on arbitrary {@link TypeList} + * instances. + * + * @param list {@code non-null;} the list to convert + * @return {@code non-null;} the human form + */ + public static String toHuman(TypeList list) { + int size = list.size(); + + if (size == 0) { + return ""; + } + + StringBuffer sb = new StringBuffer(100); + + for (int i = 0; i < size; i++) { + if (i != 0) { + sb.append(", "); + } + sb.append(list.getType(i).toHuman()); + } + + return sb.toString(); + } + + /** + * Returns a hashcode of the contents of the given list. This + * is a static method so as to work on arbitrary {@link TypeList} + * instances. + * + * @param list {@code non-null;} the list to inspect + * @return {@code non-null;} the hash code + */ + public static int hashContents(TypeList list) { + int size = list.size(); + int hash = 0; + + for (int i = 0; i < size; i++) { + hash = (hash * 31) + list.getType(i).hashCode(); + } + + return hash; + } + + /** + * Compares the contents of the given two instances for equality. This + * is a static method so as to work on arbitrary {@link TypeList} + * instances. + * + * @param list1 {@code non-null;} one list to compare + * @param list2 {@code non-null;} another list to compare + * @return whether the two lists contain corresponding equal elements + */ + public static boolean equalContents(TypeList list1, TypeList list2) { + int size = list1.size(); + + if (list2.size() != size) { + return false; + } + + for (int i = 0; i < size; i++) { + if (! list1.getType(i).equals(list2.getType(i))) { + return false; + } + } + + return true; + } + + /** + * Compares the contents of the given two instances for ordering. This + * is a static method so as to work on arbitrary {@link TypeList} + * instances. + * + * @param list1 {@code non-null;} one list to compare + * @param list2 {@code non-null;} another list to compare + * @return the order of the two lists + */ + public static int compareContents(TypeList list1, TypeList list2) { + int size1 = list1.size(); + int size2 = list2.size(); + int size = Math.min(size1, size2); + + for (int i = 0; i < size; i++) { + int comparison = list1.getType(i).compareTo(list2.getType(i)); + if (comparison != 0) { + return comparison; + } + } + + if (size1 == size2) { + return 0; + } else if (size1 < size2) { + return -1; + } else { + return 1; + } + } + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the list + */ + public StdTypeList(int size) { + super(size); + } + + /** {@inheritDoc} */ + public Type getType(int n) { + return get(n); + } + + /** {@inheritDoc} */ + public int getWordCount() { + int sz = size(); + int result = 0; + + for (int i = 0; i < sz; i++) { + result += get(i).getCategory(); + } + + return result; + } + + /** {@inheritDoc} */ + public TypeList withAddedType(Type type) { + int sz = size(); + StdTypeList result = new StdTypeList(sz + 1); + + for (int i = 0; i < sz; i++) { + result.set0(i, get0(i)); + } + + result.set(sz, type); + result.setImmutable(); + return result; + } + + /** + * Gets the indicated element. It is an error to call this with the + * index for an element which was never set; if you do that, this + * will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which element + * @return {@code non-null;} the indicated element + */ + public Type get(int n) { + return (Type) get0(n); + } + + /** + * Sets the type at the given index. + * + * @param n {@code >= 0, < size();} which element + * @param type {@code non-null;} the type to store + */ + public void set(int n, Type type) { + set0(n, type); + } + + /** + * Returns a new instance, which is the same as this instance, + * except that it has an additional type prepended to the + * original. + * + * @param type {@code non-null;} the new first element + * @return {@code non-null;} an appropriately-constructed instance + */ + public StdTypeList withFirst(Type type) { + int sz = size(); + StdTypeList result = new StdTypeList(sz + 1); + + result.set0(0, type); + for (int i = 0; i < sz; i++) { + result.set0(i + 1, getOrNull0(i)); + } + + return result; + } +} diff --git a/dexgen/src/com/android/dexgen/rop/type/Type.java b/dexgen/src/com/android/dexgen/rop/type/Type.java new file mode 100644 index 0000000..365bd78 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/type/Type.java @@ -0,0 +1,928 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.type; + +import com.android.dexgen.util.Hex; + +import java.util.HashMap; + +/** + * Representation of a value type, such as may appear in a field, in a + * local, on a stack, or in a method descriptor. Instances of this + * class are generally interned and may be usefully compared with each + * other using {@code ==}. + */ +public final class Type implements TypeBearer, Comparable { + /** {@code non-null;} intern table mapping string descriptors to instances */ + private static final HashMap internTable = + new HashMap(500); + + /** {@code non-null;} table mapping types as {@code Class} objects to internal form */ + private static final HashMap CLASS_TYPE_MAP = + new HashMap(); + + /** basic type constant for {@code void} */ + public static final int BT_VOID = 0; + + /** basic type constant for {@code boolean} */ + public static final int BT_BOOLEAN = 1; + + /** basic type constant for {@code byte} */ + public static final int BT_BYTE = 2; + + /** basic type constant for {@code char} */ + public static final int BT_CHAR = 3; + + /** basic type constant for {@code double} */ + public static final int BT_DOUBLE = 4; + + /** basic type constant for {@code float} */ + public static final int BT_FLOAT = 5; + + /** basic type constant for {@code int} */ + public static final int BT_INT = 6; + + /** basic type constant for {@code long} */ + public static final int BT_LONG = 7; + + /** basic type constant for {@code short} */ + public static final int BT_SHORT = 8; + + /** basic type constant for {@code Object} */ + public static final int BT_OBJECT = 9; + + /** basic type constant for a return address */ + public static final int BT_ADDR = 10; + + /** count of basic type constants */ + public static final int BT_COUNT = 11; + + /** {@code non-null;} instance representing {@code boolean} */ + public static final Type BOOLEAN = new Type("Z", BT_BOOLEAN); + + /** {@code non-null;} instance representing {@code byte} */ + public static final Type BYTE = new Type("B", BT_BYTE); + + /** {@code non-null;} instance representing {@code char} */ + public static final Type CHAR = new Type("C", BT_CHAR); + + /** {@code non-null;} instance representing {@code double} */ + public static final Type DOUBLE = new Type("D", BT_DOUBLE); + + /** {@code non-null;} instance representing {@code float} */ + public static final Type FLOAT = new Type("F", BT_FLOAT); + + /** {@code non-null;} instance representing {@code int} */ + public static final Type INT = new Type("I", BT_INT); + + /** {@code non-null;} instance representing {@code long} */ + public static final Type LONG = new Type("J", BT_LONG); + + /** {@code non-null;} instance representing {@code short} */ + public static final Type SHORT = new Type("S", BT_SHORT); + + /** {@code non-null;} instance representing {@code void} */ + public static final Type VOID = new Type("V", BT_VOID); + + /** {@code non-null;} instance representing a known-{@code null} */ + public static final Type KNOWN_NULL = new Type("", BT_OBJECT); + + /** {@code non-null;} instance representing a subroutine return address */ + public static final Type RETURN_ADDRESS = new Type("", BT_ADDR); + + static { + /* + * Put all the primitive types into the intern table. This needs + * to happen before the array types below get interned. + */ + putIntern(BOOLEAN); + putIntern(BYTE); + putIntern(CHAR); + putIntern(DOUBLE); + putIntern(FLOAT); + putIntern(INT); + putIntern(LONG); + putIntern(SHORT); + /* + * Note: VOID isn't put in the intern table, since it's special and + * shouldn't be found by a normal call to intern(). + */ + + /* + * Create a mapping between types as Java Class objects + * and types in dx internal format. + */ + CLASS_TYPE_MAP.put(boolean.class, BOOLEAN); + CLASS_TYPE_MAP.put(short.class, SHORT); + CLASS_TYPE_MAP.put(int.class, INT); + CLASS_TYPE_MAP.put(long.class, LONG); + CLASS_TYPE_MAP.put(char.class, CHAR); + CLASS_TYPE_MAP.put(byte.class, BYTE); + CLASS_TYPE_MAP.put(float.class, FLOAT); + CLASS_TYPE_MAP.put(double.class, DOUBLE); + CLASS_TYPE_MAP.put(void.class, VOID); + } + + /** + * {@code non-null;} instance representing + * {@code java.lang.annotation.Annotation} + */ + public static final Type ANNOTATION = + intern("Ljava/lang/annotation/Annotation;"); + + /** {@code non-null;} instance representing {@code java.lang.Class} */ + public static final Type CLASS = intern("Ljava/lang/Class;"); + + /** {@code non-null;} instance representing {@code java.lang.Cloneable} */ + public static final Type CLONEABLE = intern("Ljava/lang/Cloneable;"); + + /** {@code non-null;} instance representing {@code java.lang.Object} */ + public static final Type OBJECT = intern("Ljava/lang/Object;"); + + /** {@code non-null;} instance representing {@code java.io.Serializable} */ + public static final Type SERIALIZABLE = intern("Ljava/io/Serializable;"); + + /** {@code non-null;} instance representing {@code java.lang.String} */ + public static final Type STRING = intern("Ljava/lang/String;"); + + /** {@code non-null;} instance representing {@code java.lang.Throwable} */ + public static final Type THROWABLE = intern("Ljava/lang/Throwable;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Boolean}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type BOOLEAN_CLASS = intern("Ljava/lang/Boolean;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Byte}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type BYTE_CLASS = intern("Ljava/lang/Byte;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Character}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type CHARACTER_CLASS = intern("Ljava/lang/Character;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Double}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type DOUBLE_CLASS = intern("Ljava/lang/Double;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Float}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type FLOAT_CLASS = intern("Ljava/lang/Float;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Integer}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type INTEGER_CLASS = intern("Ljava/lang/Integer;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Long}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type LONG_CLASS = intern("Ljava/lang/Long;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Short}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type SHORT_CLASS = intern("Ljava/lang/Short;"); + + /** + * {@code non-null;} instance representing {@code java.lang.Void}; the + * suffix on the name helps disambiguate this from the instance + * representing a primitive type + */ + public static final Type VOID_CLASS = intern("Ljava/lang/Void;"); + + /** {@code non-null;} instance representing {@code boolean[]} */ + public static final Type BOOLEAN_ARRAY = BOOLEAN.getArrayType(); + + /** {@code non-null;} instance representing {@code byte[]} */ + public static final Type BYTE_ARRAY = BYTE.getArrayType(); + + /** {@code non-null;} instance representing {@code char[]} */ + public static final Type CHAR_ARRAY = CHAR.getArrayType(); + + /** {@code non-null;} instance representing {@code double[]} */ + public static final Type DOUBLE_ARRAY = DOUBLE.getArrayType(); + + /** {@code non-null;} instance representing {@code float[]} */ + public static final Type FLOAT_ARRAY = FLOAT.getArrayType(); + + /** {@code non-null;} instance representing {@code int[]} */ + public static final Type INT_ARRAY = INT.getArrayType(); + + /** {@code non-null;} instance representing {@code long[]} */ + public static final Type LONG_ARRAY = LONG.getArrayType(); + + /** {@code non-null;} instance representing {@code Object[]} */ + public static final Type OBJECT_ARRAY = OBJECT.getArrayType(); + + /** {@code non-null;} instance representing {@code short[]} */ + public static final Type SHORT_ARRAY = SHORT.getArrayType(); + + /** {@code non-null;} field descriptor for the type */ + private final String descriptor; + + /** + * basic type corresponding to this type; one of the + * {@code BT_*} constants + */ + private final int basicType; + + /** + * {@code >= -1;} for an uninitialized type, bytecode index that this + * instance was allocated at; {@code Integer.MAX_VALUE} if it + * was an incoming uninitialized instance; {@code -1} if this + * is an inititialized instance + */ + private final int newAt; + + /** + * {@code null-ok;} the internal-form class name corresponding to this type, if + * calculated; only valid if {@code this} is a reference type and + * additionally not a return address + */ + private String className; + + /** + * {@code null-ok;} the type corresponding to an array of this type, if + * calculated + */ + private Type arrayType; + + /** + * {@code null-ok;} the type corresponding to elements of this type, if + * calculated; only valid if {@code this} is an array type + */ + private Type componentType; + + /** + * {@code null-ok;} the type corresponding to the initialized version of + * this type, if this instance is in fact an uninitialized type + */ + private Type initializedType; + + /** + * Returns the unique instance corresponding to the type represented by + * given {@code Class} object. See vmspec-2 sec4.3.2 for details on the + * field descriptor syntax. This method does not allow + * {@code "V"} (that is, type {@code void}) as a valid + * descriptor. + * + * @param clazz {@code non-null;} class whose descriptor + * will be internalized + * @return {@code non-null;} the corresponding instance + */ + public static Type intern(Class clazz) { + return intern(getInternalTypeName(clazz)); + } + + /** + * Returns the unique instance corresponding to the type with the + * given descriptor. See vmspec-2 sec4.3.2 for details on the + * field descriptor syntax. This method does not allow + * {@code "V"} (that is, type {@code void}) as a valid + * descriptor. + * + * @param descriptor {@code non-null;} the descriptor + * @return {@code non-null;} the corresponding instance + * @throws IllegalArgumentException thrown if the descriptor has + * invalid syntax + */ + public static Type intern(String descriptor) { + + Type result = internTable.get(descriptor); + if (result != null) { + return result; + } + + char firstChar; + try { + firstChar = descriptor.charAt(0); + } catch (IndexOutOfBoundsException ex) { + // Translate the exception. + throw new IllegalArgumentException("descriptor is empty"); + } catch (NullPointerException ex) { + // Elucidate the exception. + throw new NullPointerException("descriptor == null"); + } + + if (firstChar == '[') { + /* + * Recursively strip away array markers to get at the underlying + * type, and build back on to form the result. + */ + result = intern(descriptor.substring(1)); + return result.getArrayType(); + } + + /* + * If the first character isn't '[' and it wasn't found in the + * intern cache, then it had better be the descriptor for a class. + */ + + int length = descriptor.length(); + if ((firstChar != 'L') || + (descriptor.charAt(length - 1) != ';')) { + throw new IllegalArgumentException("bad descriptor" + descriptor); + } + + /* + * Validate the characters of the class name itself. Note that + * vmspec-2 does not have a coherent definition for valid + * internal-form class names, and the definition here is fairly + * liberal: A name is considered valid as long as it doesn't + * contain any of '[' ';' '.' '(' ')', and it has no more than one + * '/' in a row, and no '/' at either end. + */ + + int limit = (length - 1); // Skip the final ';'. + for (int i = 1; i < limit; i++) { + char c = descriptor.charAt(i); + switch (c) { + case '[': + case ';': + case '.': + case '(': + case ')': { + throw new IllegalArgumentException("bad descriptor" + descriptor); + } + case '/': { + if ((i == 1) || + (i == (length - 1)) || + (descriptor.charAt(i - 1) == '/')) { + throw new IllegalArgumentException("bad descriptor"); + } + break; + } + } + } + + result = new Type(descriptor, BT_OBJECT); + return putIntern(result); + } + + /** + * Returns the unique instance corresponding to the type represented by + * given {@code Class} object, allowing {@code "V"} to return the type + * for {@code void}. Other than that one caveat, this method + * is identical to {@link #intern}. + * + * @param clazz {@code non-null;} class which descriptor + * will be internalized + * @return {@code non-null;} the corresponding instance + */ + public static Type internReturnType(Class clazz) { + return internReturnType(getInternalTypeName(clazz)); + } + + /** + * Returns the unique instance corresponding to the type with the + * given descriptor, allowing {@code "V"} to return the type + * for {@code void}. Other than that one caveat, this method + * is identical to {@link #intern}. + * + * @param descriptor {@code non-null;} the descriptor + * @return {@code non-null;} the corresponding instance + * @throws IllegalArgumentException thrown if the descriptor has + * invalid syntax + */ + public static Type internReturnType(String descriptor) { + try { + if (descriptor.equals("V")) { + // This is the one special case where void may be returned. + return VOID; + } + } catch (NullPointerException ex) { + // Elucidate the exception. + throw new NullPointerException("descriptor == null"); + } + + return intern(descriptor); + } + + /** + * Returns the unique instance corresponding to the type of the + * class with the given name. Calling this method is equivalent to + * calling {@code intern(name)} if {@code name} begins + * with {@code "["} and calling {@code intern("L" + name + ";")} + * in all other cases. + * + * @param name {@code non-null;} the name of the class whose type is desired + * @return {@code non-null;} the corresponding type + * @throws IllegalArgumentException thrown if the name has + * invalid syntax + */ + public static Type internClassName(String name) { + if (name == null) { + throw new NullPointerException("name == null"); + } + + if (name.startsWith("[")) { + return intern(name); + } + + return intern('L' + name + ';'); + } + + /** + * Converts type name in the format as returned by reflection + * into dex internal form. + * + * @param clazz {@code non-null;} class whose name will be internalized + * @return string with the type name in dex internal format + */ + public static String getInternalTypeName(Class clazz) { + if (clazz == null) { + throw new NullPointerException("clazz == null"); + } + + if (clazz.isPrimitive()) { + return CLASS_TYPE_MAP.get(clazz).getDescriptor(); + } + + String slashed = clazz.getName().replace('.', '/'); + + if (clazz.isArray()) { + return slashed; + } + + return 'L' + slashed + ';'; + } + + /** + * Constructs an instance corresponding to an "uninitialized type." + * This is a private constructor; use one of the public static + * methods to get instances. + * + * @param descriptor {@code non-null;} the field descriptor for the type + * @param basicType basic type corresponding to this type; one of the + * {@code BT_*} constants + * @param newAt {@code >= -1;} allocation bytecode index + */ + private Type(String descriptor, int basicType, int newAt) { + if (descriptor == null) { + throw new NullPointerException("descriptor == null"); + } + + if ((basicType < 0) || (basicType >= BT_COUNT)) { + throw new IllegalArgumentException("bad basicType"); + } + + if (newAt < -1) { + throw new IllegalArgumentException("newAt < -1"); + } + + this.descriptor = descriptor; + this.basicType = basicType; + this.newAt = newAt; + this.arrayType = null; + this.componentType = null; + this.initializedType = null; + } + + /** + * Constructs an instance corresponding to an "initialized type." + * This is a private constructor; use one of the public static + * methods to get instances. + * + * @param descriptor {@code non-null;} the field descriptor for the type + * @param basicType basic type corresponding to this type; one of the + * {@code BT_*} constants + */ + private Type(String descriptor, int basicType) { + this(descriptor, basicType, -1); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (this == other) { + /* + * Since externally-visible types are interned, this check + * helps weed out some easy cases. + */ + return true; + } + + if (!(other instanceof Type)) { + return false; + } + + return descriptor.equals(((Type) other).descriptor); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return descriptor.hashCode(); + } + + /** {@inheritDoc} */ + public int compareTo(Type other) { + return descriptor.compareTo(other.descriptor); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + return descriptor; + } + + /** {@inheritDoc} */ + public String toHuman() { + switch (basicType) { + case BT_VOID: return "void"; + case BT_BOOLEAN: return "boolean"; + case BT_BYTE: return "byte"; + case BT_CHAR: return "char"; + case BT_DOUBLE: return "double"; + case BT_FLOAT: return "float"; + case BT_INT: return "int"; + case BT_LONG: return "long"; + case BT_SHORT: return "short"; + case BT_OBJECT: break; + default: return descriptor; + } + + if (isArray()) { + return getComponentType().toHuman() + "[]"; + } + + // Remove the "L...;" around the type and convert "/" to ".". + return getClassName().replace("/", "."); + } + + /** {@inheritDoc} */ + public Type getType() { + return this; + } + + /** {@inheritDoc} */ + public Type getFrameType() { + switch (basicType) { + case BT_BOOLEAN: + case BT_BYTE: + case BT_CHAR: + case BT_INT: + case BT_SHORT: { + return INT; + } + } + + return this; + } + + /** {@inheritDoc} */ + public int getBasicType() { + return basicType; + } + + /** {@inheritDoc} */ + public int getBasicFrameType() { + switch (basicType) { + case BT_BOOLEAN: + case BT_BYTE: + case BT_CHAR: + case BT_INT: + case BT_SHORT: { + return BT_INT; + } + } + + return basicType; + } + + /** {@inheritDoc} */ + public boolean isConstant() { + return false; + } + + /** + * Gets the descriptor. + * + * @return {@code non-null;} the descriptor + */ + public String getDescriptor() { + return descriptor; + } + + /** + * Gets the name of the class this type corresponds to, in internal + * form. This method is only valid if this instance is for a + * normal reference type (that is, a reference type and + * additionally not a return address). + * + * @return {@code non-null;} the internal-form class name + */ + public String getClassName() { + if (className == null) { + if (!isReference()) { + throw new IllegalArgumentException("not an object type: " + + descriptor); + } + + if (descriptor.charAt(0) == '[') { + className = descriptor; + } else { + className = descriptor.substring(1, descriptor.length() - 1); + } + } + + return className; + } + + /** + * Gets the category. Most instances are category 1. {@code long} + * and {@code double} are the only category 2 types. + * + * @see #isCategory1 + * @see #isCategory2 + * @return the category + */ + public int getCategory() { + switch (basicType) { + case BT_LONG: + case BT_DOUBLE: { + return 2; + } + } + + return 1; + } + + /** + * Returns whether or not this is a category 1 type. + * + * @see #getCategory + * @see #isCategory2 + * @return whether or not this is a category 1 type + */ + public boolean isCategory1() { + switch (basicType) { + case BT_LONG: + case BT_DOUBLE: { + return false; + } + } + + return true; + } + + /** + * Returns whether or not this is a category 2 type. + * + * @see #getCategory + * @see #isCategory1 + * @return whether or not this is a category 2 type + */ + public boolean isCategory2() { + switch (basicType) { + case BT_LONG: + case BT_DOUBLE: { + return true; + } + } + + return false; + } + + /** + * Gets whether this type is "intlike." An intlike type is one which, when + * placed on a stack or in a local, is automatically converted to an + * {@code int}. + * + * @return whether this type is "intlike" + */ + public boolean isIntlike() { + switch (basicType) { + case BT_BOOLEAN: + case BT_BYTE: + case BT_CHAR: + case BT_INT: + case BT_SHORT: { + return true; + } + } + + return false; + } + + /** + * Gets whether this type is a primitive type. All types are either + * primitive or reference types. + * + * @return whether this type is primitive + */ + public boolean isPrimitive() { + switch (basicType) { + case BT_BOOLEAN: + case BT_BYTE: + case BT_CHAR: + case BT_DOUBLE: + case BT_FLOAT: + case BT_INT: + case BT_LONG: + case BT_SHORT: + case BT_VOID: { + return true; + } + } + + return false; + } + + /** + * Gets whether this type is a normal reference type. A normal + * reference type is a reference type that is not a return + * address. This method is just convenient shorthand for + * {@code getBasicType() == Type.BT_OBJECT}. + * + * @return whether this type is a normal reference type + */ + public boolean isReference() { + return (basicType == BT_OBJECT); + } + + /** + * Gets whether this type is an array type. If this method returns + * {@code true}, then it is safe to use {@link #getComponentType} + * to determine the component type. + * + * @return whether this type is an array type + */ + public boolean isArray() { + return (descriptor.charAt(0) == '['); + } + + /** + * Gets whether this type is an array type or is a known-null, and + * hence is compatible with array types. + * + * @return whether this type is an array type + */ + public boolean isArrayOrKnownNull() { + return isArray() || equals(KNOWN_NULL); + } + + /** + * Gets whether this type represents an uninitialized instance. An + * uninitialized instance is what one gets back from the {@code new} + * opcode, and remains uninitialized until a valid constructor is + * invoked on it. + * + * @return whether this type is "uninitialized" + */ + public boolean isUninitialized() { + return (newAt >= 0); + } + + /** + * Gets the bytecode index at which this uninitialized type was + * allocated. This returns {@code Integer.MAX_VALUE} if this + * type is an uninitialized incoming parameter (i.e., the + * {@code this} of an {@code } method) or + * {@code -1} if this type is in fact initialized. + * + * @return {@code >= -1;} the allocation bytecode index + */ + public int getNewAt() { + return newAt; + } + + /** + * Gets the initialized type corresponding to this instance, but only + * if this instance is in fact an uninitialized object type. + * + * @return {@code non-null;} the initialized type + */ + public Type getInitializedType() { + if (initializedType == null) { + throw new IllegalArgumentException("initialized type: " + + descriptor); + } + + return initializedType; + } + + /** + * Gets the type corresponding to an array of this type. + * + * @return {@code non-null;} the array type + */ + public Type getArrayType() { + if (arrayType == null) { + arrayType = putIntern(new Type('[' + descriptor, BT_OBJECT)); + } + + return arrayType; + } + + /** + * Gets the component type of this type. This method is only valid on + * array types. + * + * @return {@code non-null;} the component type + */ + public Type getComponentType() { + if (componentType == null) { + if (descriptor.charAt(0) != '[') { + throw new IllegalArgumentException("not an array type: " + + descriptor); + } + componentType = intern(descriptor.substring(1)); + } + + return componentType; + } + + /** + * Returns a new interned instance which is identical to this one, except + * it is indicated as uninitialized and allocated at the given bytecode + * index. This instance must be an initialized object type. + * + * @param newAt {@code >= 0;} the allocation bytecode index + * @return {@code non-null;} an appropriately-constructed instance + */ + public Type asUninitialized(int newAt) { + if (newAt < 0) { + throw new IllegalArgumentException("newAt < 0"); + } + + if (!isReference()) { + throw new IllegalArgumentException("not a reference type: " + + descriptor); + } + + if (isUninitialized()) { + /* + * Dealing with uninitialized types as a starting point is + * a pain, and it's not clear that it'd ever be used, so + * just disallow it. + */ + throw new IllegalArgumentException("already uninitialized: " + + descriptor); + } + + /* + * Create a new descriptor that is unique and shouldn't conflict + * with "normal" type descriptors + */ + String newDesc = 'N' + Hex.u2(newAt) + descriptor; + Type result = new Type(newDesc, BT_OBJECT, newAt); + result.initializedType = this; + return putIntern(result); + } + + /** + * Puts the given instance in the intern table if it's not already + * there. If a conflicting value is already in the table, then leave it. + * Return the interned value. + * + * @param type {@code non-null;} instance to make interned + * @return {@code non-null;} the actual interned object + */ + private static Type putIntern(Type type) { + synchronized (internTable) { + String descriptor = type.getDescriptor(); + Type already = internTable.get(descriptor); + if (already != null) { + return already; + } + internTable.put(descriptor, type); + return type; + } + } +} \ No newline at end of file diff --git a/dexgen/src/com/android/dexgen/rop/type/TypeBearer.java b/dexgen/src/com/android/dexgen/rop/type/TypeBearer.java new file mode 100644 index 0000000..da7a7ef --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/type/TypeBearer.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.type; + +import com.android.dexgen.util.ToHuman; + +/** + * Object which has an associated type, possibly itself. + */ +public interface TypeBearer + extends ToHuman { + /** + * Gets the type associated with this instance. + * + * @return {@code non-null;} the type + */ + public Type getType(); + + /** + * Gets the frame type corresponding to this type. This method returns + * {@code this}, except if {@link Type#isIntlike} on the underlying + * type returns {@code true} but the underlying type is not in + * fact {@link Type#INT}, in which case this method returns an instance + * whose underlying type is {@code INT}. + * + * @return {@code non-null;} the frame type for this instance + */ + public TypeBearer getFrameType(); + + /** + * Gets the basic type corresponding to this instance. + * + * @return the basic type; one of the {@code BT_*} constants + * defined by {@link Type} + */ + public int getBasicType(); + + /** + * Gets the basic type corresponding to this instance's frame type. This + * is equivalent to {@code getFrameType().getBasicType()}, and + * is the same as calling {@code getFrameType()} unless this + * instance is an int-like type, in which case this method returns + * {@code BT_INT}. + * + * @see #getBasicType + * @see #getFrameType + * + * @return the basic frame type; one of the {@code BT_*} constants + * defined by {@link Type} + */ + public int getBasicFrameType(); + + /** + * Returns whether this instance represents a constant value. + * + * @return {@code true} if this instance represents a constant value + * and {@code false} if not + */ + public boolean isConstant(); +} diff --git a/dexgen/src/com/android/dexgen/rop/type/TypeList.java b/dexgen/src/com/android/dexgen/rop/type/TypeList.java new file mode 100644 index 0000000..dedcbc9 --- /dev/null +++ b/dexgen/src/com/android/dexgen/rop/type/TypeList.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.rop.type; + +/** + * List of {@link Type} instances (or of things that contain types). + */ +public interface TypeList { + /** + * Returns whether this instance is mutable. Note that the + * {@code TypeList} interface itself doesn't provide any + * means of mutation, but that doesn't mean that there isn't an + * extra-interface way of mutating an instance. + * + * @return {@code true} if this instance is mutable or + * {@code false} if it is immutable + */ + public boolean isMutable(); + + /** + * Gets the size of this list. + * + * @return {@code >= 0;} the size + */ + public int size(); + + /** + * Gets the indicated element. It is an error to call this with the + * index for an element which was never set; if you do that, this + * will throw {@code NullPointerException}. + * + * @param n {@code >= 0, < size();} which element + * @return {@code non-null;} the indicated element + */ + public Type getType(int n); + + /** + * Gets the number of 32-bit words required to hold instances of + * all the elements of this list. This is a sum of the widths (categories) + * of all the elements. + * + * @return {@code >= 0;} the required number of words + */ + public int getWordCount(); + + /** + * Returns a new instance which is identical to this one, except that + * the given item is appended to the end and it is guaranteed to be + * immutable. + * + * @param type {@code non-null;} item to append + * @return {@code non-null;} an appropriately-constructed instance + */ + public TypeList withAddedType(Type type); +} diff --git a/dexgen/src/com/android/dexgen/util/AnnotatedOutput.java b/dexgen/src/com/android/dexgen/util/AnnotatedOutput.java new file mode 100644 index 0000000..3ff4cf5 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/AnnotatedOutput.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Interface for a binary output destination that may be augmented + * with textual annotations. + */ +public interface AnnotatedOutput + extends Output { + /** + * Get whether this instance will actually keep annotations. + * + * @return {@code true} iff annotations are being kept + */ + public boolean annotates(); + + /** + * Get whether this instance is intended to keep verbose annotations. + * Annotators may use the result of calling this method to inform their + * annotation activity. + * + * @return {@code true} iff annotations are to be verbose + */ + public boolean isVerbose(); + + /** + * Add an annotation for the subsequent output. Any previously + * open annotation will be closed by this call, and the new + * annotation marks all subsequent output until another annotation + * call. + * + * @param msg {@code non-null;} the annotation message + */ + public void annotate(String msg); + + /** + * Add an annotation for a specified amount of subsequent + * output. Any previously open annotation will be closed by this + * call. If there is already pending annotation from one or more + * previous calls to this method, the new call "consumes" output + * after all the output covered by the previous calls. + * + * @param amt {@code >= 0;} the amount of output for this annotation to + * cover + * @param msg {@code non-null;} the annotation message + */ + public void annotate(int amt, String msg); + + /** + * End the most recent annotation. Subsequent output will be unannotated, + * until the next call to {@link #annotate}. + */ + public void endAnnotation(); + + /** + * Get the maximum width of the annotated output. This is advisory: + * Implementations of this interface are encouraged to deal with too-wide + * output, but annotaters are encouraged to attempt to avoid exceeding + * the indicated width. + * + * @return {@code >= 1;} the maximum width + */ + public int getAnnotationWidth(); +} diff --git a/dexgen/src/com/android/dexgen/util/BitIntSet.java b/dexgen/src/com/android/dexgen/util/BitIntSet.java new file mode 100644 index 0000000..0cf9fc6 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/BitIntSet.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.util.NoSuchElementException; + +/** + * A set of integers, represented by a bit set + */ +public class BitIntSet implements IntSet { + + /** also accessed in ListIntSet */ + int[] bits; + + /** + * Constructs an instance. + * + * @param max the maximum value of ints in this set. + */ + public BitIntSet(int max) { + bits = Bits.makeBitSet(max); + } + + /** @inheritDoc */ + public void add(int value) { + ensureCapacity(value); + Bits.set(bits, value, true); + } + + /** + * Ensures that the bit set has the capacity to represent the given value. + * + * @param value {@code >= 0;} value to represent + */ + private void ensureCapacity(int value) { + if (value >= Bits.getMax(bits)) { + int[] newBits = Bits.makeBitSet( + Math.max(value + 1, 2 * Bits.getMax(bits))); + System.arraycopy(bits, 0, newBits, 0, bits.length); + bits = newBits; + } + } + + /** @inheritDoc */ + public void remove(int value) { + if (value < Bits.getMax(bits)) { + Bits.set(bits, value, false); + } + } + + /** @inheritDoc */ + public boolean has(int value) { + return (value < Bits.getMax(bits)) && Bits.get(bits, value); + } + + /** @inheritDoc */ + public void merge(IntSet other) { + if (other instanceof BitIntSet) { + BitIntSet o = (BitIntSet) other; + ensureCapacity(Bits.getMax(o.bits) + 1); + Bits.or(bits, o.bits); + } else if (other instanceof ListIntSet) { + ListIntSet o = (ListIntSet) other; + int sz = o.ints.size(); + + if (sz > 0) { + ensureCapacity(o.ints.get(sz - 1)); + } + for (int i = 0; i < o.ints.size(); i++) { + Bits.set(bits, o.ints.get(i), true); + } + } else { + IntIterator iter = other.iterator(); + while (iter.hasNext()) { + add(iter.next()); + } + } + } + + /** @inheritDoc */ + public int elements() { + return Bits.bitCount(bits); + } + + /** @inheritDoc */ + public IntIterator iterator() { + return new IntIterator() { + private int idx = Bits.findFirst(bits, 0); + + /** @inheritDoc */ + public boolean hasNext() { + return idx >= 0; + } + + /** @inheritDoc */ + public int next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + int ret = idx; + + idx = Bits.findFirst(bits, idx+1); + + return ret; + } + }; + } + + /** @inheritDoc */ + public String toString() { + StringBuilder sb = new StringBuilder(); + + sb.append('{'); + + boolean first = true; + for (int i = Bits.findFirst(bits, 0) + ; i >= 0 + ; i = Bits.findFirst(bits, i + 1)) { + if (!first) { + sb.append(", "); + } + first = false; + sb.append(i); + } + + sb.append('}'); + + return sb.toString(); + } +} diff --git a/dexgen/src/com/android/dexgen/util/Bits.java b/dexgen/src/com/android/dexgen/util/Bits.java new file mode 100644 index 0000000..5c97cc9 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/Bits.java @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Utilities for treating {@code int[]}s as bit sets. + */ +public final class Bits { + /** + * This class is uninstantiable. + */ + private Bits() { + // This space intentionally left blank. + } + + /** + * Constructs a bit set to contain bits up to the given index (exclusive). + * + * @param max {@code >= 0;} the maximum bit index (exclusive) + * @return {@code non-null;} an appropriately-constructed instance + */ + public static int[] makeBitSet(int max) { + int size = (max + 0x1f) >> 5; + return new int[size]; + } + + /** + * Gets the maximum index (exclusive) for the given bit set. + * + * @param bits {@code non-null;} bit set in question + * @return {@code >= 0;} the maximum index (exclusive) that may be set + */ + public static int getMax(int[] bits) { + return bits.length * 0x20; + } + + /** + * Gets the value of the bit at the given index. + * + * @param bits {@code non-null;} bit set to operate on + * @param idx {@code >= 0, < getMax(set);} which bit + * @return the value of the indicated bit + */ + public static boolean get(int[] bits, int idx) { + int arrayIdx = idx >> 5; + int bit = 1 << (idx & 0x1f); + return (bits[arrayIdx] & bit) != 0; + } + + /** + * Sets the given bit to the given value. + * + * @param bits {@code non-null;} bit set to operate on + * @param idx {@code >= 0, < getMax(set);} which bit + * @param value the new value for the bit + */ + public static void set(int[] bits, int idx, boolean value) { + int arrayIdx = idx >> 5; + int bit = 1 << (idx & 0x1f); + + if (value) { + bits[arrayIdx] |= bit; + } else { + bits[arrayIdx] &= ~bit; + } + } + + /** + * Sets the given bit to {@code true}. + * + * @param bits {@code non-null;} bit set to operate on + * @param idx {@code >= 0, < getMax(set);} which bit + */ + public static void set(int[] bits, int idx) { + int arrayIdx = idx >> 5; + int bit = 1 << (idx & 0x1f); + bits[arrayIdx] |= bit; + } + + /** + * Sets the given bit to {@code false}. + * + * @param bits {@code non-null;} bit set to operate on + * @param idx {@code >= 0, < getMax(set);} which bit + */ + public static void clear(int[] bits, int idx) { + int arrayIdx = idx >> 5; + int bit = 1 << (idx & 0x1f); + bits[arrayIdx] &= ~bit; + } + + /** + * Returns whether or not the given bit set is empty, that is, whether + * no bit is set to {@code true}. + * + * @param bits {@code non-null;} bit set to operate on + * @return {@code true} iff all bits are {@code false} + */ + public static boolean isEmpty(int[] bits) { + int len = bits.length; + + for (int i = 0; i < len; i++) { + if (bits[i] != 0) { + return false; + } + } + + return true; + } + + /** + * Gets the number of bits set to {@code true} in the given bit set. + * + * @param bits {@code non-null;} bit set to operate on + * @return {@code >= 0;} the bit count (aka population count) of the set + */ + public static int bitCount(int[] bits) { + int len = bits.length; + int count = 0; + + for (int i = 0; i < len; i++) { + count += Integer.bitCount(bits[i]); + } + + return count; + } + + /** + * Returns whether any bits are set to {@code true} in the + * specified range. + * + * @param bits {@code non-null;} bit set to operate on + * @param start {@code >= 0;} index of the first bit in the range (inclusive) + * @param end {@code >= 0;} index of the last bit in the range (exclusive) + * @return {@code true} if any bit is set to {@code true} in + * the indicated range + */ + public static boolean anyInRange(int[] bits, int start, int end) { + int idx = findFirst(bits, start); + return (idx >= 0) && (idx < end); + } + + /** + * Finds the lowest-order bit set at or after the given index in the + * given bit set. + * + * @param bits {@code non-null;} bit set to operate on + * @param idx {@code >= 0;} minimum index to return + * @return {@code >= -1;} lowest-order bit set at or after {@code idx}, + * or {@code -1} if there is no appropriate bit index to return + */ + public static int findFirst(int[] bits, int idx) { + int len = bits.length; + int minBit = idx & 0x1f; + + for (int arrayIdx = idx >> 5; arrayIdx < len; arrayIdx++) { + int word = bits[arrayIdx]; + if (word != 0) { + int bitIdx = findFirst(word, minBit); + if (bitIdx >= 0) { + return (arrayIdx << 5) + bitIdx; + } + } + minBit = 0; + } + + return -1; + } + + /** + * Finds the lowest-order bit set at or after the given index in the + * given {@code int}. + * + * @param value the value in question + * @param idx 0..31 the minimum bit index to return + * @return {@code >= -1;} lowest-order bit set at or after {@code idx}, + * or {@code -1} if there is no appropriate bit index to return + */ + public static int findFirst(int value, int idx) { + value &= ~((1 << idx) - 1); // Mask off too-low bits. + int result = Integer.numberOfTrailingZeros(value); + return (result == 32) ? -1 : result; + } + + /** + * Ors bit array {@code b} into bit array {@code a}. + * {@code a.length} must be greater than or equal to + * {@code b.length}. + * + * @param a {@code non-null;} int array to be ored with other argument. This + * argument is modified. + * @param b {@code non-null;} int array to be ored into {@code a}. This + * argument is not modified. + */ + public static void or(int[] a, int[] b) { + for (int i = 0; i < b.length; i++) { + a[i] |= b[i]; + } + } + + public static String toHuman(int[] bits) { + StringBuilder sb = new StringBuilder(); + + boolean needsComma = false; + + sb.append('{'); + + int bitsLength = 32 * bits.length; + for (int i = 0; i < bitsLength; i++) { + if (Bits.get(bits, i)) { + if (needsComma) { + sb.append(','); + } + needsComma = true; + sb.append(i); + } + } + sb.append('}'); + + return sb.toString(); + } +} diff --git a/dexgen/src/com/android/dexgen/util/ByteArray.java b/dexgen/src/com/android/dexgen/util/ByteArray.java new file mode 100644 index 0000000..93144b3 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/ByteArray.java @@ -0,0 +1,361 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * Wrapper for a {@code byte[]}, which provides read-only access and + * can "reveal" a partial slice of the underlying array. + * + * Note: Multibyte accessors all use big-endian order. + */ +public final class ByteArray { + /** {@code non-null;} underlying array */ + private final byte[] bytes; + + /** {@code >= 0}; start index of the slice (inclusive) */ + private final int start; + + /** {@code >= 0, <= bytes.length}; size computed as + * {@code end - start} (in the constructor) */ + private final int size; + + /** + * Constructs an instance. + * + * @param bytes {@code non-null;} the underlying array + * @param start {@code >= 0;} start index of the slice (inclusive) + * @param end {@code >= start, <= bytes.length;} end index of + * the slice (exclusive) + */ + public ByteArray(byte[] bytes, int start, int end) { + if (bytes == null) { + throw new NullPointerException("bytes == null"); + } + + if (start < 0) { + throw new IllegalArgumentException("start < 0"); + } + + if (end < start) { + throw new IllegalArgumentException("end < start"); + } + + if (end > bytes.length) { + throw new IllegalArgumentException("end > bytes.length"); + } + + this.bytes = bytes; + this.start = start; + this.size = end - start; + } + + /** + * Constructs an instance from an entire {@code byte[]}. + * + * @param bytes {@code non-null;} the underlying array + */ + public ByteArray(byte[] bytes) { + this(bytes, 0, bytes.length); + } + + /** + * Gets the size of the array, in bytes. + * + * @return {@code >= 0;} the size + */ + public int size() { + return size; + } + + /** + * Returns a slice (that is, a sub-array) of this instance. + * + * @param start {@code >= 0;} start index of the slice (inclusive) + * @param end {@code >= start, <= size();} end index of + * the slice (exclusive) + * @return {@code non-null;} the slice + */ + public ByteArray slice(int start, int end) { + checkOffsets(start, end); + return new ByteArray(bytes, start + this.start, end + this.start); + } + + /** + * Returns the offset into the given array represented by the given + * offset into this instance. + * + * @param offset offset into this instance + * @param bytes {@code non-null;} (alleged) underlying array + * @return corresponding offset into {@code bytes} + * @throws IllegalArgumentException thrown if {@code bytes} is + * not the underlying array of this instance + */ + public int underlyingOffset(int offset, byte[] bytes) { + if (bytes != this.bytes) { + throw new IllegalArgumentException("wrong bytes"); + } + + return start + offset; + } + + /** + * Gets the {@code signed byte} value at a particular offset. + * + * @param off {@code >= 0, < size();} offset to fetch + * @return {@code signed byte} at that offset + */ + public int getByte(int off) { + checkOffsets(off, off + 1); + return getByte0(off); + } + + /** + * Gets the {@code signed short} value at a particular offset. + * + * @param off {@code >= 0, < (size() - 1);} offset to fetch + * @return {@code signed short} at that offset + */ + public int getShort(int off) { + checkOffsets(off, off + 2); + return (getByte0(off) << 8) | getUnsignedByte0(off + 1); + } + + /** + * Gets the {@code signed int} value at a particular offset. + * + * @param off {@code >= 0, < (size() - 3);} offset to fetch + * @return {@code signed int} at that offset + */ + public int getInt(int off) { + checkOffsets(off, off + 4); + return (getByte0(off) << 24) | + (getUnsignedByte0(off + 1) << 16) | + (getUnsignedByte0(off + 2) << 8) | + getUnsignedByte0(off + 3); + } + + /** + * Gets the {@code signed long} value at a particular offset. + * + * @param off {@code >= 0, < (size() - 7);} offset to fetch + * @return {@code signed int} at that offset + */ + public long getLong(int off) { + checkOffsets(off, off + 8); + int part1 = (getByte0(off) << 24) | + (getUnsignedByte0(off + 1) << 16) | + (getUnsignedByte0(off + 2) << 8) | + getUnsignedByte0(off + 3); + int part2 = (getByte0(off + 4) << 24) | + (getUnsignedByte0(off + 5) << 16) | + (getUnsignedByte0(off + 6) << 8) | + getUnsignedByte0(off + 7); + + return (part2 & 0xffffffffL) | ((long) part1) << 32; + } + + /** + * Gets the {@code unsigned byte} value at a particular offset. + * + * @param off {@code >= 0, < size();} offset to fetch + * @return {@code unsigned byte} at that offset + */ + public int getUnsignedByte(int off) { + checkOffsets(off, off + 1); + return getUnsignedByte0(off); + } + + /** + * Gets the {@code unsigned short} value at a particular offset. + * + * @param off {@code >= 0, < (size() - 1);} offset to fetch + * @return {@code unsigned short} at that offset + */ + public int getUnsignedShort(int off) { + checkOffsets(off, off + 2); + return (getUnsignedByte0(off) << 8) | getUnsignedByte0(off + 1); + } + + /** + * Copies the contents of this instance into the given raw + * {@code byte[]} at the given offset. The given array must be + * large enough. + * + * @param out {@code non-null;} array to hold the output + * @param offset {@code non-null;} index into {@code out} for the first + * byte of output + */ + public void getBytes(byte[] out, int offset) { + if ((out.length - offset) < size) { + throw new IndexOutOfBoundsException("(out.length - offset) < " + + "size()"); + } + + System.arraycopy(bytes, start, out, offset, size); + } + + /** + * Checks a range of offsets for validity, throwing if invalid. + * + * @param s start offset (inclusive) + * @param e end offset (exclusive) + */ + private void checkOffsets(int s, int e) { + if ((s < 0) || (e < s) || (e > size)) { + throw new IllegalArgumentException("bad range: " + s + ".." + e + + "; actual size " + size); + } + } + + /** + * Gets the {@code signed byte} value at the given offset, + * without doing any argument checking. + * + * @param off offset to fetch + * @return byte at that offset + */ + private int getByte0(int off) { + return bytes[start + off]; + } + + /** + * Gets the {@code unsigned byte} value at the given offset, + * without doing any argument checking. + * + * @param off offset to fetch + * @return byte at that offset + */ + private int getUnsignedByte0(int off) { + return bytes[start + off] & 0xff; + } + + /** + * Gets a {@code DataInputStream} that reads from this instance, + * with the cursor starting at the beginning of this instance's data. + * Note: The returned instance may be cast to {@link #GetCursor} + * if needed. + * + * @return {@code non-null;} an appropriately-constructed + * {@code DataInputStream} instance + */ + public MyDataInputStream makeDataInputStream() { + return new MyDataInputStream(makeInputStream()); + } + + /** + * Gets a {@code InputStream} that reads from this instance, + * with the cursor starting at the beginning of this instance's data. + * Note: The returned instance may be cast to {@link #GetCursor} + * if needed. + * + * @return {@code non-null;} an appropriately-constructed + * {@code InputStream} instancex + */ + public MyInputStream makeInputStream() { + return new MyInputStream(); + } + + /** + * Helper interface that allows one to get the cursor (of a stream). + */ + public interface GetCursor { + /** + * Gets the current cursor. + * + * @return {@code 0..size();} the cursor + */ + public int getCursor(); + } + + /** + * Helper class for {@link #makeInputStream}, which implements the + * stream functionality. + */ + public class MyInputStream extends InputStream { + /** 0..size; the cursor */ + private int cursor; + + /** 0..size; the mark */ + private int mark; + + public MyInputStream() { + cursor = 0; + mark = 0; + } + + public int read() throws IOException { + if (cursor >= size) { + return -1; + } + + int result = getUnsignedByte0(cursor); + cursor++; + return result; + } + + public int read(byte[] arr, int offset, int length) { + if ((offset + length) > arr.length) { + length = arr.length - offset; + } + + int maxLength = size - cursor; + if (length > maxLength) { + length = maxLength; + } + + System.arraycopy(bytes, cursor + start, arr, offset, length); + cursor += length; + return length; + } + + public int available() { + return size - cursor; + } + + public void mark(int reserve) { + mark = cursor; + } + + public void reset() { + cursor = mark; + } + + public boolean markSupported() { + return true; + } + } + + /** + * Helper class for {@link #makeDataInputStream}. This is used + * simply so that the cursor of a wrapped {@link #MyInputStream} + * instance may be easily determined. + */ + public static class MyDataInputStream extends DataInputStream { + /** {@code non-null;} the underlying {@link #MyInputStream} */ + private final MyInputStream wrapped; + + public MyDataInputStream(MyInputStream wrapped) { + super(wrapped); + + this.wrapped = wrapped; + } + } +} diff --git a/dexgen/src/com/android/dexgen/util/ByteArrayAnnotatedOutput.java b/dexgen/src/com/android/dexgen/util/ByteArrayAnnotatedOutput.java new file mode 100644 index 0000000..5fad9a9 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/ByteArrayAnnotatedOutput.java @@ -0,0 +1,639 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; + +/** + * Implementation of {@link AnnotatedOutput} which stores the written data + * into a {@code byte[]}. + * + *

Note: As per the {@link Output} interface, multi-byte + * writes all use little-endian order.

+ */ +public final class ByteArrayAnnotatedOutput + implements AnnotatedOutput { + /** default size for stretchy instances */ + private static final int DEFAULT_SIZE = 1000; + + /** + * whether the instance is stretchy, that is, whether its array + * may be resized to increase capacity + */ + private final boolean stretchy; + + /** {@code non-null;} the data itself */ + private byte[] data; + + /** {@code >= 0;} current output cursor */ + private int cursor; + + /** whether annotations are to be verbose */ + private boolean verbose; + + /** + * {@code null-ok;} list of annotations, or {@code null} if this instance + * isn't keeping them + */ + private ArrayList annotations; + + /** {@code >= 40 (if used);} the desired maximum annotation width */ + private int annotationWidth; + + /** + * {@code >= 8 (if used);} the number of bytes of hex output to use + * in annotations + */ + private int hexCols; + + /** + * Constructs an instance with a fixed maximum size. Note that the + * given array is the only one that will be used to store data. In + * particular, no reallocation will occur in order to expand the + * capacity of the resulting instance. Also, the constructed + * instance does not keep annotations by default. + * + * @param data {@code non-null;} data array to use for output + */ + public ByteArrayAnnotatedOutput(byte[] data) { + this(data, false); + } + + /** + * Constructs a "stretchy" instance. The underlying array may be + * reallocated. The constructed instance does not keep annotations + * by default. + */ + public ByteArrayAnnotatedOutput() { + this(new byte[DEFAULT_SIZE], true); + } + + /** + * Internal constructor. + * + * @param data {@code non-null;} data array to use for output + * @param stretchy whether the instance is to be stretchy + */ + private ByteArrayAnnotatedOutput(byte[] data, boolean stretchy) { + if (data == null) { + throw new NullPointerException("data == null"); + } + + this.stretchy = stretchy; + this.data = data; + this.cursor = 0; + this.verbose = false; + this.annotations = null; + this.annotationWidth = 0; + this.hexCols = 0; + } + + /** + * Gets the underlying {@code byte[]} of this instance, which + * may be larger than the number of bytes written + * + * @see #toByteArray + * + * @return {@code non-null;} the {@code byte[]} + */ + public byte[] getArray() { + return data; + } + + /** + * Constructs and returns a new {@code byte[]} that contains + * the written contents exactly (that is, with no extra unwritten + * bytes at the end). + * + * @see #getArray + * + * @return {@code non-null;} an appropriately-constructed array + */ + public byte[] toByteArray() { + byte[] result = new byte[cursor]; + System.arraycopy(data, 0, result, 0, cursor); + return result; + } + + /** {@inheritDoc} */ + public int getCursor() { + return cursor; + } + + /** {@inheritDoc} */ + public void assertCursor(int expectedCursor) { + if (cursor != expectedCursor) { + throw new ExceptionWithContext("expected cursor " + + expectedCursor + "; actual value: " + cursor); + } + } + + /** {@inheritDoc} */ + public void writeByte(int value) { + int writeAt = cursor; + int end = writeAt + 1; + + if (stretchy) { + ensureCapacity(end); + } else if (end > data.length) { + throwBounds(); + return; + } + + data[writeAt] = (byte) value; + cursor = end; + } + + /** {@inheritDoc} */ + public void writeShort(int value) { + int writeAt = cursor; + int end = writeAt + 2; + + if (stretchy) { + ensureCapacity(end); + } else if (end > data.length) { + throwBounds(); + return; + } + + data[writeAt] = (byte) value; + data[writeAt + 1] = (byte) (value >> 8); + cursor = end; + } + + /** {@inheritDoc} */ + public void writeInt(int value) { + int writeAt = cursor; + int end = writeAt + 4; + + if (stretchy) { + ensureCapacity(end); + } else if (end > data.length) { + throwBounds(); + return; + } + + data[writeAt] = (byte) value; + data[writeAt + 1] = (byte) (value >> 8); + data[writeAt + 2] = (byte) (value >> 16); + data[writeAt + 3] = (byte) (value >> 24); + cursor = end; + } + + /** {@inheritDoc} */ + public void writeLong(long value) { + int writeAt = cursor; + int end = writeAt + 8; + + if (stretchy) { + ensureCapacity(end); + } else if (end > data.length) { + throwBounds(); + return; + } + + int half = (int) value; + data[writeAt] = (byte) half; + data[writeAt + 1] = (byte) (half >> 8); + data[writeAt + 2] = (byte) (half >> 16); + data[writeAt + 3] = (byte) (half >> 24); + + half = (int) (value >> 32); + data[writeAt + 4] = (byte) half; + data[writeAt + 5] = (byte) (half >> 8); + data[writeAt + 6] = (byte) (half >> 16); + data[writeAt + 7] = (byte) (half >> 24); + + cursor = end; + } + + /** {@inheritDoc} */ + public int writeUnsignedLeb128(int value) { + int remaining = value >> 7; + int count = 0; + + while (remaining != 0) { + writeByte((value & 0x7f) | 0x80); + value = remaining; + remaining >>= 7; + count++; + } + + writeByte(value & 0x7f); + return count + 1; + } + + /** {@inheritDoc} */ + public int writeSignedLeb128(int value) { + int remaining = value >> 7; + int count = 0; + boolean hasMore = true; + int end = ((value & Integer.MIN_VALUE) == 0) ? 0 : -1; + + while (hasMore) { + hasMore = (remaining != end) + || ((remaining & 1) != ((value >> 6) & 1)); + + writeByte((value & 0x7f) | (hasMore ? 0x80 : 0)); + value = remaining; + remaining >>= 7; + count++; + } + + return count; + } + + /** {@inheritDoc} */ + public void write(ByteArray bytes) { + int blen = bytes.size(); + int writeAt = cursor; + int end = writeAt + blen; + + if (stretchy) { + ensureCapacity(end); + } else if (end > data.length) { + throwBounds(); + return; + } + + bytes.getBytes(data, writeAt); + cursor = end; + } + + /** {@inheritDoc} */ + public void write(byte[] bytes, int offset, int length) { + int writeAt = cursor; + int end = writeAt + length; + int bytesEnd = offset + length; + + // twos-complement math trick: ((x < 0) || (y < 0)) <=> ((x|y) < 0) + if (((offset | length | end) < 0) || (bytesEnd > bytes.length)) { + throw new IndexOutOfBoundsException("bytes.length " + + bytes.length + "; " + + offset + "..!" + end); + } + + if (stretchy) { + ensureCapacity(end); + } else if (end > data.length) { + throwBounds(); + return; + } + + System.arraycopy(bytes, offset, data, writeAt, length); + cursor = end; + } + + /** {@inheritDoc} */ + public void write(byte[] bytes) { + write(bytes, 0, bytes.length); + } + + /** {@inheritDoc} */ + public void writeZeroes(int count) { + if (count < 0) { + throw new IllegalArgumentException("count < 0"); + } + + int end = cursor + count; + + if (stretchy) { + ensureCapacity(end); + } else if (end > data.length) { + throwBounds(); + return; + } + + /* + * There is no need to actually write zeroes, since the array is + * already preinitialized with zeroes. + */ + + cursor = end; + } + + /** {@inheritDoc} */ + public void alignTo(int alignment) { + int mask = alignment - 1; + + if ((alignment < 0) || ((mask & alignment) != 0)) { + throw new IllegalArgumentException("bogus alignment"); + } + + int end = (cursor + mask) & ~mask; + + if (stretchy) { + ensureCapacity(end); + } else if (end > data.length) { + throwBounds(); + return; + } + + /* + * There is no need to actually write zeroes, since the array is + * already preinitialized with zeroes. + */ + + cursor = end; + } + + /** {@inheritDoc} */ + public boolean annotates() { + return (annotations != null); + } + + /** {@inheritDoc} */ + public boolean isVerbose() { + return verbose; + } + + /** {@inheritDoc} */ + public void annotate(String msg) { + if (annotations == null) { + return; + } + + endAnnotation(); + annotations.add(new Annotation(cursor, msg)); + } + + /** {@inheritDoc} */ + public void annotate(int amt, String msg) { + if (annotations == null) { + return; + } + + endAnnotation(); + + int asz = annotations.size(); + int lastEnd = (asz == 0) ? 0 : annotations.get(asz - 1).getEnd(); + int startAt; + + if (lastEnd <= cursor) { + startAt = cursor; + } else { + startAt = lastEnd; + } + + annotations.add(new Annotation(startAt, startAt + amt, msg)); + } + + /** {@inheritDoc} */ + public void endAnnotation() { + if (annotations == null) { + return; + } + + int sz = annotations.size(); + + if (sz != 0) { + annotations.get(sz - 1).setEndIfUnset(cursor); + } + } + + /** {@inheritDoc} */ + public int getAnnotationWidth() { + int leftWidth = 8 + (hexCols * 2) + (hexCols / 2); + + return annotationWidth - leftWidth; + } + + /** + * Indicates that this instance should keep annotations. This method may + * be called only once per instance, and only before any data has been + * written to the it. + * + * @param annotationWidth {@code >= 40;} the desired maximum annotation width + * @param verbose whether or not to indicate verbose annotations + */ + public void enableAnnotations(int annotationWidth, boolean verbose) { + if ((annotations != null) || (cursor != 0)) { + throw new RuntimeException("cannot enable annotations"); + } + + if (annotationWidth < 40) { + throw new IllegalArgumentException("annotationWidth < 40"); + } + + int hexCols = (((annotationWidth - 7) / 15) + 1) & ~1; + if (hexCols < 6) { + hexCols = 6; + } else if (hexCols > 10) { + hexCols = 10; + } + + this.annotations = new ArrayList(1000); + this.annotationWidth = annotationWidth; + this.hexCols = hexCols; + this.verbose = verbose; + } + + /** + * Finishes up annotation processing. This closes off any open + * annotations and removes annotations that don't refer to written + * data. + */ + public void finishAnnotating() { + // Close off the final annotation, if any. + endAnnotation(); + + // Remove annotations that refer to unwritten data. + if (annotations != null) { + int asz = annotations.size(); + while (asz > 0) { + Annotation last = annotations.get(asz - 1); + if (last.getStart() > cursor) { + annotations.remove(asz - 1); + asz--; + } else if (last.getEnd() > cursor) { + last.setEnd(cursor); + break; + } else { + break; + } + } + } + } + + /** + * Writes the annotated content of this instance to the given writer. + * + * @param out {@code non-null;} where to write to + */ + public void writeAnnotationsTo(Writer out) throws IOException { + int width2 = getAnnotationWidth(); + int width1 = annotationWidth - width2 - 1; + + TwoColumnOutput twoc = new TwoColumnOutput(out, width1, width2, "|"); + Writer left = twoc.getLeft(); + Writer right = twoc.getRight(); + int leftAt = 0; // left-hand byte output cursor + int rightAt = 0; // right-hand annotation index + int rightSz = annotations.size(); + + while ((leftAt < cursor) && (rightAt < rightSz)) { + Annotation a = annotations.get(rightAt); + int start = a.getStart(); + int end; + String text; + + if (leftAt < start) { + // This is an area with no annotation. + end = start; + start = leftAt; + text = ""; + } else { + // This is an area with an annotation. + end = a.getEnd(); + text = a.getText(); + rightAt++; + } + + left.write(Hex.dump(data, start, end - start, start, hexCols, 6)); + right.write(text); + twoc.flush(); + leftAt = end; + } + + if (leftAt < cursor) { + // There is unannotated output at the end. + left.write(Hex.dump(data, leftAt, cursor - leftAt, leftAt, + hexCols, 6)); + } + + while (rightAt < rightSz) { + // There are zero-byte annotations at the end. + right.write(annotations.get(rightAt).getText()); + rightAt++; + } + + twoc.flush(); + } + + /** + * Throws the excpetion for when an attempt is made to write past the + * end of the instance. + */ + private static void throwBounds() { + throw new IndexOutOfBoundsException("attempt to write past the end"); + } + + /** + * Reallocates the underlying array if necessary. Calls to this method + * should be guarded by a test of {@link #stretchy}. + * + * @param desiredSize {@code >= 0;} the desired minimum total size of the array + */ + private void ensureCapacity(int desiredSize) { + if (data.length < desiredSize) { + byte[] newData = new byte[desiredSize * 2 + 1000]; + System.arraycopy(data, 0, newData, 0, cursor); + data = newData; + } + } + + /** + * Annotation on output. + */ + private static class Annotation { + /** {@code >= 0;} start of annotated range (inclusive) */ + private final int start; + + /** + * {@code >= 0;} end of annotated range (exclusive); + * {@code Integer.MAX_VALUE} if unclosed + */ + private int end; + + /** {@code non-null;} annotation text */ + private final String text; + + /** + * Constructs an instance. + * + * @param start {@code >= 0;} start of annotated range + * @param end {@code >= start;} end of annotated range (exclusive) or + * {@code Integer.MAX_VALUE} if unclosed + * @param text {@code non-null;} annotation text + */ + public Annotation(int start, int end, String text) { + this.start = start; + this.end = end; + this.text = text; + } + + /** + * Constructs an instance. It is initally unclosed. + * + * @param start {@code >= 0;} start of annotated range + * @param text {@code non-null;} annotation text + */ + public Annotation(int start, String text) { + this(start, Integer.MAX_VALUE, text); + } + + /** + * Sets the end as given, but only if the instance is unclosed; + * otherwise, do nothing. + * + * @param end {@code >= start;} the end + */ + public void setEndIfUnset(int end) { + if (this.end == Integer.MAX_VALUE) { + this.end = end; + } + } + + /** + * Sets the end as given. + * + * @param end {@code >= start;} the end + */ + public void setEnd(int end) { + this.end = end; + } + + /** + * Gets the start. + * + * @return the start + */ + public int getStart() { + return start; + } + + /** + * Gets the end. + * + * @return the end + */ + public int getEnd() { + return end; + } + + /** + * Gets the text. + * + * @return {@code non-null;} the text + */ + public String getText() { + return text; + } + } +} diff --git a/dexgen/src/com/android/dexgen/util/DexClassLoaderHelper.java b/dexgen/src/com/android/dexgen/util/DexClassLoaderHelper.java new file mode 100644 index 0000000..97118ea --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/DexClassLoaderHelper.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import dalvik.system.DexClassLoader; + +/** + * Class used indirectly for loading generated dex classes. It allows the caller + * to obtain appropriate {@code DexClassLoader} instance, which can be then used for + * loading classes. + */ +public class DexClassLoaderHelper { + + private static class DexClassLoaderHelperHolder { + private static final DexClassLoaderHelper INSTANCE = new DexClassLoaderHelper(); + } + + private DexClassLoaderHelper() { + // intentionally empty to disable direct instantiation + } + + /** + * Returns the sole instance of {@code DexClassLoaderHelper}. + * + * @return dex {@code DexClassLoaderHelper} sole instance + */ + public static DexClassLoaderHelper getInstance() { + return DexClassLoaderHelperHolder.INSTANCE; + } + + /** + * Creates and returns DexClassLoader instance with its classpath + * set to {@code pathHolder}. + * + * @param pathHolder {@code non-null;} location of jar archive containing dex + * classes canned into a working PathHolder instance. + * @return dex class loader instance with its classpath set to location + * indicated by {@code pathHolder} + */ + public ClassLoader getDexClassLoader(PathHolder pathHolder) { + ClassLoader myLoader = DexClassLoaderHelper.class.getClassLoader(); + return new DexClassLoader(pathHolder.getJarFilePath(), pathHolder.getDirLocation(), + null, myLoader); + } +} \ No newline at end of file diff --git a/dexgen/src/com/android/dexgen/util/DexClassLoadingException.java b/dexgen/src/com/android/dexgen/util/DexClassLoadingException.java new file mode 100644 index 0000000..ba4d350 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/DexClassLoadingException.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * An exception type used to aggregate all the unexpected situations while + * trying to save dex file with generated class and load the class afterwards. + */ +public class DexClassLoadingException extends Exception { + + /** + * Encapsulates any checked exception being thrown in time between saving + * generated dex class to a file and loading it via DexClassLoader with + * an user-friendly message and passing the original exception as well. + * + * @param thr {@code non-null;} lower level exception with more detailed + * error message + */ + public DexClassLoadingException(Throwable thr) { + super("Loading generated dex class has failed", thr); + } +} \ No newline at end of file diff --git a/dexgen/src/com/android/dexgen/util/DexJarMaker.java b/dexgen/src/com/android/dexgen/util/DexJarMaker.java new file mode 100644 index 0000000..4fe5a56 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/DexJarMaker.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.jar.Attributes; +import java.util.jar.JarEntry; +import java.util.jar.JarOutputStream; +import java.util.jar.Manifest; + +/** + * Helper class used to encapsulate generated .dex file into .jar + * so that it fits {@code DexClassLoader} constructor. + */ +public class DexJarMaker { + + /** indicates name of the dex file added to jar */ + public static final String DEX_FILE_NAME_IN_JAR = "classes" + PathHolder.DEX_FILE_EXTENSION; + + /** {@code non-null;} storage for all the paths related to current dex file */ + private final PathHolder pathHolder; + + public DexJarMaker(PathHolder pathHolder) { + this.pathHolder = pathHolder; + } + + /** Packs previously added files into a single jar archive. */ + public void create() throws DexClassLoadingException { + Manifest manifest = new Manifest(); + manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0"); + JarOutputStream target = null; + try { + target = new JarOutputStream( + new BufferedOutputStream(new FileOutputStream(pathHolder.getJarFilePath())), + manifest); + add(new File(pathHolder.getDexFilePath()), target); + + } catch (IOException e) { + throw new DexClassLoadingException(e); + } + finally { + try { + if (target != null) { + target.close(); + } + } catch(IOException e) { + // Ignoring deliberately in order to keep the original exception clear. + } + } + } + + /** + * Adds indicated file to the requested archive. + * + * @param source {@code non-null;} dex file to add + * @param target {@code non-null;} target jar archive + * @throws IOException + */ + private void add(File source, JarOutputStream target) throws IOException { + + if (!source.isFile()) { + throw new IllegalArgumentException("Wrong source dex file provided"); + } + + BufferedInputStream in = new BufferedInputStream(new FileInputStream(source)); + JarEntry entry = new JarEntry(DEX_FILE_NAME_IN_JAR); + entry.setTime(source.lastModified()); + target.putNextEntry(entry); + + int curr = -1; + while ((curr = in.read()) != -1) { + target.write(curr); + } + target.closeEntry(); + } +} \ No newline at end of file diff --git a/dexgen/src/com/android/dexgen/util/ExceptionWithContext.java b/dexgen/src/com/android/dexgen/util/ExceptionWithContext.java new file mode 100644 index 0000000..67e7f72 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/ExceptionWithContext.java @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * Exception which carries around structured context. + */ +public class ExceptionWithContext + extends RuntimeException { + /** {@code non-null;} human-oriented context of the exception */ + private StringBuffer context; + + /** + * Augments the given exception with the given context, and return the + * result. The result is either the given exception if it was an + * {@link ExceptionWithContext}, or a newly-constructed exception if it + * was not. + * + * @param ex {@code non-null;} the exception to augment + * @param str {@code non-null;} context to add + * @return {@code non-null;} an appropriate instance + */ + public static ExceptionWithContext withContext(Throwable ex, String str) { + ExceptionWithContext ewc; + + if (ex instanceof ExceptionWithContext) { + ewc = (ExceptionWithContext) ex; + } else { + ewc = new ExceptionWithContext(ex); + } + + ewc.addContext(str); + return ewc; + } + + /** + * Constructs an instance. + * + * @param message human-oriented message + */ + public ExceptionWithContext(String message) { + this(message, null); + } + + /** + * Constructs an instance. + * + * @param cause {@code null-ok;} exception that caused this one + */ + public ExceptionWithContext(Throwable cause) { + this(null, cause); + } + + /** + * Constructs an instance. + * + * @param message human-oriented message + * @param cause {@code null-ok;} exception that caused this one + */ + public ExceptionWithContext(String message, Throwable cause) { + super((message != null) ? message : + (cause != null) ? cause.getMessage() : null, + cause); + + if (cause instanceof ExceptionWithContext) { + String ctx = ((ExceptionWithContext) cause).context.toString(); + context = new StringBuffer(ctx.length() + 200); + context.append(ctx); + } else { + context = new StringBuffer(200); + } + } + + /** {@inheritDoc} */ + @Override + public void printStackTrace(PrintStream out) { + super.printStackTrace(out); + out.println(context); + } + + /** {@inheritDoc} */ + @Override + public void printStackTrace(PrintWriter out) { + super.printStackTrace(out); + out.println(context); + } + + /** + * Adds a line of context to this instance. + * + * @param str {@code non-null;} new context + */ + public void addContext(String str) { + if (str == null) { + throw new NullPointerException("str == null"); + } + + context.append(str); + if (!str.endsWith("\n")) { + context.append('\n'); + } + } + + /** + * Gets the context. + * + * @return {@code non-null;} the context + */ + public String getContext() { + return context.toString(); + } + + /** + * Prints the message and context. + * + * @param out {@code non-null;} where to print to + */ + public void printContext(PrintStream out) { + out.println(getMessage()); + out.print(context); + } + + /** + * Prints the message and context. + * + * @param out {@code non-null;} where to print to + */ + public void printContext(PrintWriter out) { + out.println(getMessage()); + out.print(context); + } +} diff --git a/dexgen/src/com/android/dexgen/util/FileUtils.java b/dexgen/src/com/android/dexgen/util/FileUtils.java new file mode 100644 index 0000000..b1ad30e --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/FileUtils.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * File I/O utilities. + */ +public final class FileUtils { + /** + * This class is uninstantiable. + */ + private FileUtils() { + // This space intentionally left blank. + } + + /** + * Reads the named file, translating {@link IOException} to a + * {@link RuntimeException} of some sort. + * + * @param fileName {@code non-null;} name of the file to read + * @return {@code non-null;} contents of the file + */ + public static byte[] readFile(String fileName) { + File file = new File(fileName); + return readFile(file); + } + + /** + * Reads the given file, translating {@link IOException} to a + * {@link RuntimeException} of some sort. + * + * @param file {@code non-null;} the file to read + * @return {@code non-null;} contents of the file + */ + public static byte[] readFile(File file) { + if (!file.exists()) { + throw new RuntimeException(file + ": file not found"); + } + + if (!file.isFile()) { + throw new RuntimeException(file + ": not a file"); + } + + if (!file.canRead()) { + throw new RuntimeException(file + ": file not readable"); + } + + long longLength = file.length(); + int length = (int) longLength; + if (length != longLength) { + throw new RuntimeException(file + ": file too long"); + } + + byte[] result = new byte[length]; + + try { + // convert to try-with-resources once dexgen uses an Android API 19+ which supports it + FileInputStream in = new FileInputStream(file); + try { + int at = 0; + while (length > 0) { + int amt = in.read(result, at, length); + if (amt == -1) { + throw new RuntimeException(file + ": unexpected EOF"); + } + at += amt; + length -= amt; + } + } finally { + in.close(); + } + } catch (IOException ex) { + throw new RuntimeException(file + ": trouble reading", ex); + } + + return result; + } +} diff --git a/dexgen/src/com/android/dexgen/util/FixedSizeList.java b/dexgen/src/com/android/dexgen/util/FixedSizeList.java new file mode 100644 index 0000000..039b5b0 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/FixedSizeList.java @@ -0,0 +1,276 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.util.Arrays; + +/** + * Simple (mostly) fixed-size list of objects, which may be made immutable. + */ +public class FixedSizeList + extends MutabilityControl implements ToHuman { + /** {@code non-null;} array of elements */ + private Object[] arr; + + /** + * Constructs an instance. All indices initially contain {@code null}. + * + * @param size the size of the list + */ + public FixedSizeList(int size) { + super(size != 0); + + try { + arr = new Object[size]; + } catch (NegativeArraySizeException ex) { + // Translate the exception. + throw new IllegalArgumentException("size < 0"); + } + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (this == other) { + // Easy out. + return true; + } + + if ((other == null) || (getClass() != other.getClass())) { + // Another easy out. + return false; + } + + FixedSizeList list = (FixedSizeList) other; + return Arrays.equals(arr, list.arr); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return Arrays.hashCode(arr); + } + + /** {@inheritDoc} */ + @Override + public String toString() { + String name = getClass().getName(); + + return toString0(name.substring(name.lastIndexOf('.') + 1) + '{', + ", ", + "}", + false); + } + + /** + * {@inheritDoc} + * + * This method will only work if every element of the list + * implements {@link ToHuman}. + */ + public String toHuman() { + String name = getClass().getName(); + + return toString0(name.substring(name.lastIndexOf('.') + 1) + '{', + ", ", + "}", + true); + } + + /** + * Gets a customized string form for this instance. + * + * @param prefix {@code null-ok;} prefix for the start of the result + * @param separator {@code null-ok;} separator to insert between each item + * @param suffix {@code null-ok;} suffix for the end of the result + * @return {@code non-null;} the custom string + */ + public String toString(String prefix, String separator, String suffix) { + return toString0(prefix, separator, suffix, false); + } + + /** + * Gets a customized human string for this instance. This method will + * only work if every element of the list implements {@link + * ToHuman}. + * + * @param prefix {@code null-ok;} prefix for the start of the result + * @param separator {@code null-ok;} separator to insert between each item + * @param suffix {@code null-ok;} suffix for the end of the result + * @return {@code non-null;} the custom string + */ + public String toHuman(String prefix, String separator, String suffix) { + return toString0(prefix, separator, suffix, true); + } + + /** + * Gets the number of elements in this list. + */ + public final int size() { + return arr.length; + } + + /** + * Shrinks this instance to fit, by removing any unset + * ({@code null}) elements, leaving the remaining elements in + * their original order. + */ + public void shrinkToFit() { + int sz = arr.length; + int newSz = 0; + + for (int i = 0; i < sz; i++) { + if (arr[i] != null) { + newSz++; + } + } + + if (sz == newSz) { + return; + } + + throwIfImmutable(); + + Object[] newa = new Object[newSz]; + int at = 0; + + for (int i = 0; i < sz; i++) { + Object one = arr[i]; + if (one != null) { + newa[at] = one; + at++; + } + } + + arr = newa; + if (newSz == 0) { + setImmutable(); + } + } + + /** + * Gets the indicated element. It is an error to call this with the + * index for an element which was never set; if you do that, this + * will throw {@code NullPointerException}. This method is + * protected so that subclasses may offer a safe type-checked + * public interface to their clients. + * + * @param n {@code >= 0, < size();} which element + * @return {@code non-null;} the indicated element + */ + protected final Object get0(int n) { + try { + Object result = arr[n]; + + if (result == null) { + throw new NullPointerException("unset: " + n); + } + + return result; + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate the exception. + return throwIndex(n); + } + } + + /** + * Gets the indicated element, allowing {@code null}s to be + * returned. This method is protected so that subclasses may + * (optionally) offer a safe type-checked public interface to + * their clients. + * + * @param n {@code >= 0, < size();} which element + * @return {@code null-ok;} the indicated element + */ + protected final Object getOrNull0(int n) { + return arr[n]; + } + + /** + * Sets the element at the given index, but without doing any type + * checks on the element. This method is protected so that + * subclasses may offer a safe type-checked public interface to + * their clients. + * + * @param n {@code >= 0, < size();} which element + * @param obj {@code null-ok;} the value to store + */ + protected final void set0(int n, Object obj) { + throwIfImmutable(); + + try { + arr[n] = obj; + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate the exception. + throwIndex(n); + } + } + + /** + * Throws the appropriate exception for the given index value. + * + * @param n the index value + * @return never + * @throws IndexOutOfBoundsException always thrown + */ + private Object throwIndex(int n) { + if (n < 0) { + throw new IndexOutOfBoundsException("n < 0"); + } + + throw new IndexOutOfBoundsException("n >= size()"); + } + + /** + * Helper for {@link #toString} and {@link #toHuman}, which both of + * those call to pretty much do everything. + * + * @param prefix {@code null-ok;} prefix for the start of the result + * @param separator {@code null-ok;} separator to insert between each item + * @param suffix {@code null-ok;} suffix for the end of the result + * @param human whether the output is to be human + * @return {@code non-null;} the custom string + */ + private String toString0(String prefix, String separator, String suffix, + boolean human) { + int len = arr.length; + StringBuffer sb = new StringBuffer(len * 10 + 10); + + if (prefix != null) { + sb.append(prefix); + } + + for (int i = 0; i < len; i++) { + if ((i != 0) && (separator != null)) { + sb.append(separator); + } + + if (human) { + sb.append(((ToHuman) arr[i]).toHuman()); + } else { + sb.append(arr[i]); + } + } + + if (suffix != null) { + sb.append(suffix); + } + + return sb.toString(); + } + +} diff --git a/dexgen/src/com/android/dexgen/util/Hex.java b/dexgen/src/com/android/dexgen/util/Hex.java new file mode 100644 index 0000000..4dafb77 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/Hex.java @@ -0,0 +1,303 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Utilities for formatting numbers as hexadecimal. + */ +public final class Hex { + /** + * This class is uninstantiable. + */ + private Hex() { + // This space intentionally left blank. + } + + /** + * Formats a {@code long} as an 8-byte unsigned hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String u8(long v) { + char[] result = new char[16]; + for (int i = 0; i < 16; i++) { + result[15 - i] = Character.forDigit((int) v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats an {@code int} as a 4-byte unsigned hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String u4(int v) { + char[] result = new char[8]; + for (int i = 0; i < 8; i++) { + result[7 - i] = Character.forDigit(v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats an {@code int} as a 3-byte unsigned hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String u3(int v) { + char[] result = new char[6]; + for (int i = 0; i < 6; i++) { + result[5 - i] = Character.forDigit(v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats an {@code int} as a 2-byte unsigned hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String u2(int v) { + char[] result = new char[4]; + for (int i = 0; i < 4; i++) { + result[3 - i] = Character.forDigit(v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats an {@code int} as either a 2-byte unsigned hex value + * (if the value is small enough) or a 4-byte unsigned hex value (if + * not). + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String u2or4(int v) { + if (v == (char) v) { + return u2(v); + } else { + return u4(v); + } + } + + /** + * Formats an {@code int} as a 1-byte unsigned hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String u1(int v) { + char[] result = new char[2]; + for (int i = 0; i < 2; i++) { + result[1 - i] = Character.forDigit(v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats an {@code int} as a 4-bit unsigned hex nibble. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String uNibble(int v) { + char[] result = new char[1]; + + result[0] = Character.forDigit(v & 0x0f, 16); + return new String(result); + } + + /** + * Formats a {@code long} as an 8-byte signed hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String s8(long v) { + char[] result = new char[17]; + + if (v < 0) { + result[0] = '-'; + v = -v; + } else { + result[0] = '+'; + } + + for (int i = 0; i < 16; i++) { + result[16 - i] = Character.forDigit((int) v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats an {@code int} as a 4-byte signed hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String s4(int v) { + char[] result = new char[9]; + + if (v < 0) { + result[0] = '-'; + v = -v; + } else { + result[0] = '+'; + } + + for (int i = 0; i < 8; i++) { + result[8 - i] = Character.forDigit(v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats an {@code int} as a 2-byte signed hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String s2(int v) { + char[] result = new char[5]; + + if (v < 0) { + result[0] = '-'; + v = -v; + } else { + result[0] = '+'; + } + + for (int i = 0; i < 4; i++) { + result[4 - i] = Character.forDigit(v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats an {@code int} as a 1-byte signed hex value. + * + * @param v value to format + * @return {@code non-null;} formatted form + */ + public static String s1(int v) { + char[] result = new char[3]; + + if (v < 0) { + result[0] = '-'; + v = -v; + } else { + result[0] = '+'; + } + + for (int i = 0; i < 2; i++) { + result[2 - i] = Character.forDigit(v & 0x0f, 16); + v >>= 4; + } + + return new String(result); + } + + /** + * Formats a hex dump of a portion of a {@code byte[]}. The result + * is always newline-terminated, unless the passed-in length was zero, + * in which case the result is always the empty string ({@code ""}). + * + * @param arr {@code non-null;} array to format + * @param offset {@code >= 0;} offset to the part to dump + * @param length {@code >= 0;} number of bytes to dump + * @param outOffset {@code >= 0;} first output offset to print + * @param bpl {@code >= 0;} number of bytes of output per line + * @param addressLength {@code {2,4,6,8};} number of characters for each address + * header + * @return {@code non-null;} a string of the dump + */ + public static String dump(byte[] arr, int offset, int length, + int outOffset, int bpl, int addressLength) { + int end = offset + length; + + // twos-complement math trick: ((x < 0) || (y < 0)) <=> ((x|y) < 0) + if (((offset | length | end) < 0) || (end > arr.length)) { + throw new IndexOutOfBoundsException("arr.length " + + arr.length + "; " + + offset + "..!" + end); + } + + if (outOffset < 0) { + throw new IllegalArgumentException("outOffset < 0"); + } + + if (length == 0) { + return ""; + } + + StringBuffer sb = new StringBuffer(length * 4 + 6); + boolean bol = true; + int col = 0; + + while (length > 0) { + if (col == 0) { + String astr; + switch (addressLength) { + case 2: astr = Hex.u1(outOffset); break; + case 4: astr = Hex.u2(outOffset); break; + case 6: astr = Hex.u3(outOffset); break; + default: astr = Hex.u4(outOffset); break; + } + sb.append(astr); + sb.append(": "); + } else if ((col & 1) == 0) { + sb.append(' '); + } + sb.append(Hex.u1(arr[offset])); + outOffset++; + offset++; + col++; + if (col == bpl) { + sb.append('\n'); + col = 0; + } + length--; + } + + if (col != 0) { + sb.append('\n'); + } + + return sb.toString(); + } +} diff --git a/dexgen/src/com/android/dexgen/util/HexParser.java b/dexgen/src/com/android/dexgen/util/HexParser.java new file mode 100644 index 0000000..cc4f909 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/HexParser.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Utilities for parsing hexadecimal text. + */ +public final class HexParser { + /** + * This class is uninstantiable. + */ + private HexParser() { + // This space intentionally left blank. + } + + /** + * Parses the given text as hex, returning a {@code byte[]} + * corresponding to the text. The format is simple: Each line may + * start with a hex offset followed by a colon (which is verified + * and presumably used just as a comment), and then consists of + * hex digits freely interspersed with whitespace. If a pound sign + * is encountered, it and the rest of the line are ignored as a + * comment. If a double quote is encountered, then the ASCII value + * of the subsequent characters is used, until the next double + * quote. Quoted strings may not span multiple lines. + * + * @param src {@code non-null;} the source string + * @return {@code non-null;} the parsed form + */ + public static byte[] parse(String src) { + int len = src.length(); + byte[] result = new byte[len / 2]; + int at = 0; + int outAt = 0; + + while (at < len) { + int nlAt = src.indexOf('\n', at); + if (nlAt < 0) { + nlAt = len; + } + int poundAt = src.indexOf('#', at); + + String line; + if ((poundAt >= 0) && (poundAt < nlAt)) { + line = src.substring(at, poundAt); + } else { + line = src.substring(at, nlAt); + } + at = nlAt + 1; + + int colonAt = line.indexOf(':'); + + atCheck: + if (colonAt != -1) { + int quoteAt = line.indexOf('\"'); + if ((quoteAt != -1) && (quoteAt < colonAt)) { + break atCheck; + } + + String atStr = line.substring(0, colonAt).trim(); + line = line.substring(colonAt + 1); + int alleged = Integer.parseInt(atStr, 16); + if (alleged != outAt) { + throw new RuntimeException("bogus offset marker: " + + atStr); + } + } + + int lineLen = line.length(); + int value = -1; + boolean quoteMode = false; + + for (int i = 0; i < lineLen; i++) { + char c = line.charAt(i); + + if (quoteMode) { + if (c == '\"') { + quoteMode = false; + } else { + result[outAt] = (byte) c; + outAt++; + } + continue; + } + + if (c <= ' ') { + continue; + } + if (c == '\"') { + if (value != -1) { + throw new RuntimeException("spare digit around " + + "offset " + Hex.u4(outAt)); + } + quoteMode = true; + continue; + } + + int digVal = Character.digit(c, 16); + if (digVal == -1) { + throw new RuntimeException("bogus digit character: \"" + + c + "\""); + } + if (value == -1) { + value = digVal; + } else { + result[outAt] = (byte) ((value << 4) | digVal); + outAt++; + value = -1; + } + } + + if (value != -1) { + throw new RuntimeException("spare digit around offset " + + Hex.u4(outAt)); + } + + if (quoteMode) { + throw new RuntimeException("unterminated quote around " + + "offset " + Hex.u4(outAt)); + } + } + + if (outAt < result.length) { + byte[] newr = new byte[outAt]; + System.arraycopy(result, 0, newr, 0, outAt); + result = newr; + } + + return result; + } +} diff --git a/dexgen/src/com/android/dexgen/util/IndentingWriter.java b/dexgen/src/com/android/dexgen/util/IndentingWriter.java new file mode 100644 index 0000000..05d4b0c --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/IndentingWriter.java @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.FilterWriter; +import java.io.IOException; +import java.io.Writer; + +/** + * Writer that wraps another writer and passes width-limited and + * optionally-prefixed output to its subordinate. When lines are + * wrapped they are automatically indented based on the start of the + * line. + */ +public final class IndentingWriter extends FilterWriter { + /** {@code null-ok;} optional prefix for every line */ + private final String prefix; + + /** {@code > 0;} the maximum output width */ + private final int width; + + /** {@code > 0;} the maximum indent */ + private final int maxIndent; + + /** {@code >= 0;} current output column (zero-based) */ + private int column; + + /** whether indent spaces are currently being collected */ + private boolean collectingIndent; + + /** {@code >= 0;} current indent amount */ + private int indent; + + /** + * Constructs an instance. + * + * @param out {@code non-null;} writer to send final output to + * @param width {@code >= 0;} the maximum output width (not including + * {@code prefix}), or {@code 0} for no maximum + * @param prefix {@code non-null;} the prefix for each line + */ + public IndentingWriter(Writer out, int width, String prefix) { + super(out); + + if (out == null) { + throw new NullPointerException("out == null"); + } + + if (width < 0) { + throw new IllegalArgumentException("width < 0"); + } + + if (prefix == null) { + throw new NullPointerException("prefix == null"); + } + + this.width = (width != 0) ? width : Integer.MAX_VALUE; + this.maxIndent = width >> 1; + this.prefix = (prefix.length() == 0) ? null : prefix; + + bol(); + } + + /** + * Constructs a no-prefix instance. + * + * @param out {@code non-null;} writer to send final output to + * @param width {@code >= 0;} the maximum output width (not including + * {@code prefix}), or {@code 0} for no maximum + */ + public IndentingWriter(Writer out, int width) { + this(out, width, ""); + } + + /** {@inheritDoc} */ + @Override + public void write(int c) throws IOException { + synchronized (lock) { + if (collectingIndent) { + if (c == ' ') { + indent++; + if (indent >= maxIndent) { + indent = maxIndent; + collectingIndent = false; + } + } else { + collectingIndent = false; + } + } + + if ((column == width) && (c != '\n')) { + out.write('\n'); + column = 0; + /* + * Note: No else, so this should fall through to the next + * if statement. + */ + } + + if (column == 0) { + if (prefix != null) { + out.write(prefix); + } + + if (!collectingIndent) { + for (int i = 0; i < indent; i++) { + out.write(' '); + } + column = indent; + } + } + + out.write(c); + + if (c == '\n') { + bol(); + } else { + column++; + } + } + } + + /** {@inheritDoc} */ + @Override + public void write(char[] cbuf, int off, int len) throws IOException { + synchronized (lock) { + while (len > 0) { + write(cbuf[off]); + off++; + len--; + } + } + } + + /** {@inheritDoc} */ + @Override + public void write(String str, int off, int len) throws IOException { + synchronized (lock) { + while (len > 0) { + write(str.charAt(off)); + off++; + len--; + } + } + } + + /** + * Indicates that output is at the beginning of a line. + */ + private void bol() { + column = 0; + collectingIndent = (maxIndent != 0); + indent = 0; + } +} diff --git a/dexgen/src/com/android/dexgen/util/IntIterator.java b/dexgen/src/com/android/dexgen/util/IntIterator.java new file mode 100644 index 0000000..42d92fa --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/IntIterator.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * An iterator for a list of ints. + */ +public interface IntIterator { + + /** + * Checks to see if the iterator has a next value. + * + * @return true if next() will succeed + */ + boolean hasNext(); + + /** + * Returns the next value in the iterator. + * + * @return next value + * @throws java.util.NoSuchElementException if no next element exists + */ + int next(); +} diff --git a/dexgen/src/com/android/dexgen/util/IntList.java b/dexgen/src/com/android/dexgen/util/IntList.java new file mode 100644 index 0000000..ad29c0b --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/IntList.java @@ -0,0 +1,452 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.util.Arrays; + +/** + * Simple list of {@code int}s. + */ +public final class IntList extends MutabilityControl { + /** {@code non-null;} immutable, no-element instance */ + public static final IntList EMPTY = new IntList(0); + + /** {@code non-null;} array of elements */ + private int[] values; + + /** {@code >= 0;} current size of the list */ + private int size; + + /** whether the values are currently sorted */ + private boolean sorted; + + static { + EMPTY.setImmutable(); + } + + /** + * Constructs a new immutable instance with the given element. + * + * @param value the sole value in the list + */ + public static IntList makeImmutable(int value) { + IntList result = new IntList(1); + + result.add(value); + result.setImmutable(); + + return result; + } + + /** + * Constructs a new immutable instance with the given elements. + * + * @param value0 the first value in the list + * @param value1 the second value in the list + */ + public static IntList makeImmutable(int value0, int value1) { + IntList result = new IntList(2); + + result.add(value0); + result.add(value1); + result.setImmutable(); + + return result; + } + + /** + * Constructs an empty instance with a default initial capacity. + */ + public IntList() { + this(4); + } + + /** + * Constructs an empty instance. + * + * @param initialCapacity {@code >= 0;} initial capacity of the list + */ + public IntList(int initialCapacity) { + super(true); + + try { + values = new int[initialCapacity]; + } catch (NegativeArraySizeException ex) { + // Translate the exception. + throw new IllegalArgumentException("size < 0"); + } + + size = 0; + sorted = true; + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + int result = 0; + + for (int i = 0; i < size; i++) { + result = (result * 31) + values[i]; + } + + return result; + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + if (! (other instanceof IntList)) { + return false; + } + + IntList otherList = (IntList) other; + + if (sorted != otherList.sorted) { + return false; + } + + if (size != otherList.size) { + return false; + } + + for (int i = 0; i < size; i++) { + if (values[i] != otherList.values[i]) { + return false; + } + } + + return true; + } + + /** {@inheritDoc} */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(size * 5 + 10); + + sb.append('{'); + + for (int i = 0; i < size; i++) { + if (i != 0) { + sb.append(", "); + } + sb.append(values[i]); + } + + sb.append('}'); + + return sb.toString(); + } + + /** + * Gets the number of elements in this list. + */ + public int size() { + return size; + } + + /** + * Gets the indicated value. + * + * @param n {@code >= 0, < size();} which element + * @return the indicated element's value + */ + public int get(int n) { + if (n >= size) { + throw new IndexOutOfBoundsException("n >= size()"); + } + + try { + return values[n]; + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate exception. + throw new IndexOutOfBoundsException("n < 0"); + } + } + + /** + * Sets the value at the given index. + * + * @param n {@code >= 0, < size();} which element + * @param value value to store + */ + public void set(int n, int value) { + throwIfImmutable(); + + if (n >= size) { + throw new IndexOutOfBoundsException("n >= size()"); + } + + try { + values[n] = value; + sorted = false; + } catch (ArrayIndexOutOfBoundsException ex) { + // Translate the exception. + if (n < 0) { + throw new IllegalArgumentException("n < 0"); + } + } + } + + /** + * Adds an element to the end of the list. This will increase the + * list's capacity if necessary. + * + * @param value the value to add + */ + public void add(int value) { + throwIfImmutable(); + + growIfNeeded(); + + values[size++] = value; + + if (sorted && (size > 1)) { + sorted = (value >= values[size - 2]); + } + } + + /** + * Inserts element into specified index, moving elements at and above + * that index up one. May not be used to insert at an index beyond the + * current size (that is, insertion as a last element is legal but + * no further). + * + * @param n {@code >= 0, <=size();} index of where to insert + * @param value value to insert + */ + public void insert(int n, int value) { + if (n > size) { + throw new IndexOutOfBoundsException("n > size()"); + } + + growIfNeeded(); + + System.arraycopy (values, n, values, n+1, size - n); + values[n] = value; + size++; + + sorted = sorted + && (n == 0 || value > values[n-1]) + && (n == (size - 1) || value < values[n+1]); + } + + /** + * Removes an element at a given index, shifting elements at greater + * indicies down one. + * + * @param n {@code >=0, < size();} index of element to remove + */ + public void removeIndex(int n) { + if (n >= size) { + throw new IndexOutOfBoundsException("n >= size()"); + } + + System.arraycopy (values, n + 1, values, n, size - n - 1); + size--; + + // sort status is unchanged + } + + /** + * Increases size of array if needed + */ + private void growIfNeeded() { + if (size == values.length) { + // Resize. + int[] newv = new int[size * 3 / 2 + 10]; + System.arraycopy(values, 0, newv, 0, size); + values = newv; + } + } + + /** + * Returns the last element in the array without modifying the array + * + * @return last value in the array. + * @exception IndexOutOfBoundsException if stack is empty. + */ + public int top() { + return get(size - 1); + } + + /** + * Pops an element off the end of the list and decreasing the size by one. + * + * @return value from what was the last element. + * @exception IndexOutOfBoundsException if stack is empty. + */ + public int pop() { + throwIfImmutable(); + + int result; + + result = get(size-1); + size--; + + return result; + } + + /** + * Pops N elements off the end of the list and decreasing the size by N. + * + * @param n {@code >= 0;} number of elements to remove from end. + * @exception IndexOutOfBoundsException if stack is smaller than N + */ + public void pop(int n) { + throwIfImmutable(); + + size -= n; + } + + /** + * Shrinks the size of the list. + * + * @param newSize {@code >= 0;} the new size + */ + public void shrink(int newSize) { + if (newSize < 0) { + throw new IllegalArgumentException("newSize < 0"); + } + + if (newSize > size) { + throw new IllegalArgumentException("newSize > size"); + } + + throwIfImmutable(); + + size = newSize; + } + + /** + * Makes and returns a mutable copy of the list. + * + * @return {@code non-null;} an appropriately-constructed instance + */ + public IntList mutableCopy() { + int sz = size; + IntList result = new IntList(sz); + + for (int i = 0; i < sz; i++) { + result.add(values[i]); + } + + return result; + } + + /** + * Sorts the elements in the list in-place. + */ + public void sort() { + throwIfImmutable(); + + if (!sorted) { + Arrays.sort(values, 0, size); + sorted = true; + } + } + + /** + * Returns the index of the given value, or -1 if the value does not + * appear in the list. This will do a binary search if the list is + * sorted or a linear search if not. + * @param value value to find + * @return index of value or -1 + */ + public int indexOf(int value) { + int ret = binarysearch(value); + + return ret >= 0 ? ret : -1; + + } + + /** + * Performs a binary search on a sorted list, returning the index of + * the given value if it is present or + * {@code (-(insertion point) - 1)} if the value is not present. + * If the list is not sorted, then reverts to linear search and returns + * {@code -size()} if the element is not found. + * + * @param value value to find + * @return index of value or {@code (-(insertion point) - 1)} if the + * value is not present + */ + public int binarysearch(int value) { + int sz = size; + + if (!sorted) { + // Linear search. + for (int i = 0; i < sz; i++) { + if (values[i] == value) { + return i; + } + } + + return -sz; + } + + /* + * Binary search. This variant does only one value comparison + * per iteration but does one more iteration on average than + * the variant that includes a value equality check per + * iteration. + */ + + int min = -1; + int max = sz; + + while (max > (min + 1)) { + /* + * The guessIdx calculation is equivalent to ((min + max) + * / 2) but won't go wonky when min and max are close to + * Integer.MAX_VALUE. + */ + int guessIdx = min + ((max - min) >> 1); + int guess = values[guessIdx]; + + if (value <= guess) { + max = guessIdx; + } else { + min = guessIdx; + } + } + + if ((max != sz)) { + return (value == values[max]) ? max : (-max - 1); + } else { + return -sz - 1; + } + } + + + /** + * Returns whether or not the given value appears in the list. + * This will do a binary search if the list is sorted or a linear + * search if not. + * + * @see #sort + * + * @param value value to look for + * @return whether the list contains the given value + */ + public boolean contains(int value) { + return indexOf(value) >= 0; + } +} diff --git a/dexgen/src/com/android/dexgen/util/IntSet.java b/dexgen/src/com/android/dexgen/util/IntSet.java new file mode 100644 index 0000000..4de7525 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/IntSet.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * A set of integers + */ +public interface IntSet { + + /** + * Adds an int to a set + * + * @param value int to add + */ + void add(int value); + + /** + * Removes an int from a set. + * + * @param value int to remove + */ + void remove(int value); + + /** + * Checks to see if a value is in the set + * + * @param value int to check + * @return true if in set + */ + boolean has(int value); + + /** + * Merges {@code other} into this set, so this set becomes the + * union of the two. + * + * @param other {@code non-null;} other set to merge with. + */ + void merge(IntSet other); + + /** + * Returns the count of unique elements in this set. + * + * @return {@code > = 0;} count of unique elements + */ + int elements(); + + /** + * Iterates the set + * + * @return {@code non-null;} a set iterator + */ + IntIterator iterator(); +} diff --git a/dexgen/src/com/android/dexgen/util/LabeledItem.java b/dexgen/src/com/android/dexgen/util/LabeledItem.java new file mode 100644 index 0000000..63cd067 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/LabeledItem.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * An item that has an integer label. + */ +public interface LabeledItem { + + /* + * Gets the label of this block. + * + * @return {@code >= 0;} the label + */ + public int getLabel(); +} diff --git a/dexgen/src/com/android/dexgen/util/LabeledList.java b/dexgen/src/com/android/dexgen/util/LabeledList.java new file mode 100644 index 0000000..a59e87d --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/LabeledList.java @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import com.android.dexgen.rop.ByteBlock; + +/** + * A list of labeled items, allowing easy lookup by label. + */ +public class LabeledList extends FixedSizeList { + + /** + * Sparse array indexed by label to FixedSizeList index. + * -1 = invalid label. + */ + private final IntList labelToIndex; + + /** @inheritDoc */ + public LabeledList(int size) { + super(size); + + labelToIndex = new IntList(size); + } + + /** + * Constructs a new instance that is a copy of the old instance. + * + * @param old instance to copy + */ + protected LabeledList(LabeledList old) { + super(old.size()); + labelToIndex = old.labelToIndex.mutableCopy(); + + int sz = old.size(); + + for (int i = 0; i < sz; i++) { + Object one = old.get0(i); + if (one != null) { + set0(i, one); + } + } + } + + /** + * Gets the maximum label (exclusive) of any block added to this instance. + * + * @return {@code >= 0;} the maximum label + */ + public int getMaxLabel() { + int sz = labelToIndex.size(); + + // Gobble any deleted labels that may be at the end... + int i; + for (i = sz - 1; (i >= 0) && (labelToIndex.get(i) < 0); i--) + ; + + int newSize = i+1; + + labelToIndex.shrink(newSize); + + return newSize; + } + + /** + * Removes a label from the label-to-index mapping + * @param oldLabel label to remove + */ + protected void removeLabel(int oldLabel) { + labelToIndex.set(oldLabel, -1); + } + + /** + * Adds a label and index to the label-to-index mapping + * @param label new label + * @param index index of block. + */ + protected void addLabelIndex(int label, int index) { + int origSz = labelToIndex.size(); + + for (int i = 0; i <= (label - origSz); i++) { + labelToIndex.add(-1); + } + + labelToIndex.set(label, index); + } + + /** + * Gets the index of the first item in the list with the given + * label, if any. + * + * @param label {@code >= 0;} the label to look for + * @return {@code >= -1;} the index of the so-labelled item, or {@code -1} + * if none is found + */ + public int indexOfLabel(int label) { + if (label >= labelToIndex.size()) { + return -1; + } else { + return labelToIndex.get(label); + } + } + + /** @inheritDoc */ + @Override + public void shrinkToFit() { + super.shrinkToFit(); + + rebuildLabelToIndex(); + } + + /** + * Rebuilds the label-to-index mapping after a shrinkToFit(). + * Note: assumes that the labels that are in the list are the same + * although the indicies may have changed. + */ + protected void rebuildLabelToIndex() { + int szItems = size(); + + for (int i = 0; i < szItems; i++) { + LabeledItem li = (LabeledItem)get0(i); + + if (li != null) { + labelToIndex.set(li.getLabel(), i); + } + } + } + + /** + * Sets the element at the given index. + * + * @param n {@code >= 0, < size();} which element + * @param item {@code null-ok;} the value to store + */ + protected void set(int n, LabeledItem item) { + LabeledItem old = (LabeledItem) getOrNull0(n); + + set0(n, item); + + if (old != null) { + removeLabel(old.getLabel()); + } + + if (item != null) { + addLabelIndex(item.getLabel(), n); + } + } +} diff --git a/dexgen/src/com/android/dexgen/util/Leb128Utils.java b/dexgen/src/com/android/dexgen/util/Leb128Utils.java new file mode 100644 index 0000000..05b38e2 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/Leb128Utils.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * LEB128 (little-endian base 128) utilities. + */ +public final class Leb128Utils { + /** + * This class is uninstantiable. + */ + private Leb128Utils() { + // This space intentionally left blank. + } + + /** + * Gets the number of bytes in the unsigned LEB128 encoding of the + * given value. + * + * @param value the value in question + * @return its write size, in bytes + */ + public static int unsignedLeb128Size(int value) { + // TODO: This could be much cleverer. + + int remaining = value >> 7; + int count = 0; + + while (remaining != 0) { + remaining >>= 7; + count++; + } + + return count + 1; + } + + /** + * Gets the number of bytes in the signed LEB128 encoding of the + * given value. + * + * @param value the value in question + * @return its write size, in bytes + */ + public static int signedLeb128Size(int value) { + // TODO: This could be much cleverer. + + int remaining = value >> 7; + int count = 0; + boolean hasMore = true; + int end = ((value & Integer.MIN_VALUE) == 0) ? 0 : -1; + + while (hasMore) { + hasMore = (remaining != end) + || ((remaining & 1) != ((value >> 6) & 1)); + + value = remaining; + remaining >>= 7; + count++; + } + + return count; + } +} diff --git a/dexgen/src/com/android/dexgen/util/ListIntSet.java b/dexgen/src/com/android/dexgen/util/ListIntSet.java new file mode 100644 index 0000000..b262ebb --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/ListIntSet.java @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.util.NoSuchElementException; + +/** + * A set of integers, represented by a list + */ +public class ListIntSet implements IntSet { + + /** also accessed in BitIntSet */ + final IntList ints; + + /** + * Constructs an instance + */ + public ListIntSet() { + ints = new IntList(); + ints.sort(); + } + + /** @inheritDoc */ + public void add(int value) { + int index = ints.binarysearch(value); + + if (index < 0) { + ints.insert(-(index + 1), value); + } + } + + /** @inheritDoc */ + public void remove(int value) { + int index = ints.indexOf(value); + + if (index >= 0) { + ints.removeIndex(index); + } + } + + /** @inheritDoc */ + public boolean has(int value) { + return ints.indexOf(value) >= 0; + } + + /** @inheritDoc */ + public void merge(IntSet other) { + if (other instanceof ListIntSet) { + ListIntSet o = (ListIntSet) other; + int szThis = ints.size(); + int szOther = o.ints.size(); + + int i = 0; + int j = 0; + + while (j < szOther && i < szThis) { + while (j < szOther && o.ints.get(j) < ints.get(i)) { + add(o.ints.get(j++)); + } + if (j == szOther) { + break; + } + while (i < szThis && o.ints.get(j) >= ints.get(i)) { + i++; + } + } + + while (j < szOther) { + add(o.ints.get(j++)); + } + + ints.sort(); + } else if (other instanceof BitIntSet) { + BitIntSet o = (BitIntSet) other; + + for (int i = 0; i >= 0; i = Bits.findFirst(o.bits, i + 1)) { + ints.add(i); + } + ints.sort(); + } else { + IntIterator iter = other.iterator(); + while (iter.hasNext()) { + add(iter.next()); + } + } + } + + /** @inheritDoc */ + public int elements() { + return ints.size(); + } + + /** @inheritDoc */ + public IntIterator iterator() { + return new IntIterator() { + private int idx = 0; + + /** @inheritDoc */ + public boolean hasNext() { + return idx < ints.size(); + } + + /** @inheritDoc */ + public int next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + return ints.get(idx++); + } + }; + } + + /** @inheritDoc */ + public String toString() { + return ints.toString(); + } +} diff --git a/dexgen/src/com/android/dexgen/util/MutabilityControl.java b/dexgen/src/com/android/dexgen/util/MutabilityControl.java new file mode 100644 index 0000000..b3ee691 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/MutabilityControl.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Very simple base class that implements a flag to control the mutability + * of instances. This class just provides the flag and a utility to check + * and throw the right exception, but it is up to subclasses to place calls + * to the checker in all the right places. + */ +public class MutabilityControl { + /** whether this instance is mutable */ + private boolean mutable; + + /** + * Constructs an instance. It is initially mutable. + */ + public MutabilityControl() { + mutable = true; + } + + /** + * Constructs an instance, explicitly indicating the mutability. + * + * @param mutable {@code true} iff this instance is mutable + */ + public MutabilityControl(boolean mutable) { + this.mutable = mutable; + } + + /** + * Makes this instance immutable. + */ + public void setImmutable() { + mutable = false; + } + + /** + * Checks to see whether or not this instance is immutable. This is the + * same as calling {@code !isMutable()}. + * + * @return {@code true} iff this instance is immutable + */ + public final boolean isImmutable() { + return !mutable; + } + + /** + * Checks to see whether or not this instance is mutable. + * + * @return {@code true} iff this instance is mutable + */ + public final boolean isMutable() { + return mutable; + } + + /** + * Throws {@link MutabilityException} if this instance is + * immutable. + */ + public final void throwIfImmutable() { + if (!mutable) { + throw new MutabilityException("immutable instance"); + } + } + + /** + * Throws {@link MutabilityException} if this instance is mutable. + */ + public final void throwIfMutable() { + if (mutable) { + throw new MutabilityException("mutable instance"); + } + } +} diff --git a/dexgen/src/com/android/dexgen/util/MutabilityException.java b/dexgen/src/com/android/dexgen/util/MutabilityException.java new file mode 100644 index 0000000..2188fe5 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/MutabilityException.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Exception due to a mutability problem. + */ +public class MutabilityException + extends ExceptionWithContext { + public MutabilityException(String message) { + super(message); + } + + public MutabilityException(Throwable cause) { + super(cause); + } + + public MutabilityException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/dexgen/src/com/android/dexgen/util/Output.java b/dexgen/src/com/android/dexgen/util/Output.java new file mode 100644 index 0000000..469c66a --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/Output.java @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Interface for a sink for binary output. This is similar to + * {@code java.util.DataOutput}, but no {@code IOExceptions} + * are declared, and multibyte output is defined to be little-endian. + */ +public interface Output { + /** + * Gets the current cursor position. This is the same as the number of + * bytes written to this instance. + * + * @return {@code >= 0;} the cursor position + */ + public int getCursor(); + + /** + * Asserts that the cursor is the given value. + * + * @param expectedCursor the expected cursor value + * @throws RuntimeException thrown if {@code getCursor() != + * expectedCursor} + */ + public void assertCursor(int expectedCursor); + + /** + * Writes a {@code byte} to this instance. + * + * @param value the value to write; all but the low 8 bits are ignored + */ + public void writeByte(int value); + + /** + * Writes a {@code short} to this instance. + * + * @param value the value to write; all but the low 16 bits are ignored + */ + public void writeShort(int value); + + /** + * Writes an {@code int} to this instance. + * + * @param value the value to write + */ + public void writeInt(int value); + + /** + * Writes a {@code long} to this instance. + * + * @param value the value to write + */ + public void writeLong(long value); + + /** + * Writes a DWARFv3-style unsigned LEB128 integer. For details, + * see the "Dalvik Executable Format" document or DWARF v3 section + * 7.6. + * + * @param value value to write, treated as an unsigned value + * @return {@code 1..5;} the number of bytes actually written + */ + public int writeUnsignedLeb128(int value); + + /** + * Writes a DWARFv3-style unsigned LEB128 integer. For details, + * see the "Dalvik Executable Format" document or DWARF v3 section + * 7.6. + * + * @param value value to write + * @return {@code 1..5;} the number of bytes actually written + */ + public int writeSignedLeb128(int value); + + /** + * Writes a {@link ByteArray} to this instance. + * + * @param bytes {@code non-null;} the array to write + */ + public void write(ByteArray bytes); + + /** + * Writes a portion of a {@code byte[]} to this instance. + * + * @param bytes {@code non-null;} the array to write + * @param offset {@code >= 0;} offset into {@code bytes} for the first + * byte to write + * @param length {@code >= 0;} number of bytes to write + */ + public void write(byte[] bytes, int offset, int length); + + /** + * Writes a {@code byte[]} to this instance. This is just + * a convenient shorthand for {@code write(bytes, 0, bytes.length)}. + * + * @param bytes {@code non-null;} the array to write + */ + public void write(byte[] bytes); + + /** + * Writes the given number of {@code 0} bytes. + * + * @param count {@code >= 0;} the number of zeroes to write + */ + public void writeZeroes(int count); + + /** + * Adds extra bytes if necessary (with value {@code 0}) to + * force alignment of the output cursor as given. + * + * @param alignment {@code > 0;} the alignment; must be a power of two + */ + public void alignTo(int alignment); +} diff --git a/dexgen/src/com/android/dexgen/util/PathHolder.java b/dexgen/src/com/android/dexgen/util/PathHolder.java new file mode 100644 index 0000000..b23ce66 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/PathHolder.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.File; + +/** + * Helper class used primarily for holding path on the device of different + * files arising in the dex class generation process. + */ +public class PathHolder { + + public static final String DEX_FILE_EXTENSION = ".dex"; + + public static final String JAR_FILE_EXTENSION = ".jar"; + + /** {@code non-null;} directory location of the dex-related files */ + private final String dirLocation; + + /** {@code non-null;} common file name prefix of the created files */ + private final String fileNamePrefix; + + /** + * Creates an instance of {@code PathHolder} initialized with the directory + * location for storage of temporary files and common file name prefix for these + * files. + * + * @param dirLocation {@code non-null;} path to directory used for storage of temporary files + * @param fileNamePrefix {@code non-null;} common file name prefix across all the temporary + * files involved in the dex class generation and loading process + */ + public PathHolder(String dirLocation, String fileNamePrefix) { + if (dirLocation == null) { + throw new NullPointerException("dirLocation == null"); + } + if (fileNamePrefix == null) { + throw new NullPointerException("fileNamePrefix == null"); + } + + this.dirLocation = dirLocation; + this.fileNamePrefix = fileNamePrefix; + } + + public String getFileName() { + return fileNamePrefix; + } + + public String getDexFilePath() { + return dirLocation + File.separator + fileNamePrefix + DEX_FILE_EXTENSION; + } + + public String getDexFileName() { + return fileNamePrefix + DEX_FILE_EXTENSION; + } + + public String getJarFilePath() { + return dirLocation + File.separator + fileNamePrefix + JAR_FILE_EXTENSION; + } + + public String getJarFileName() { + return fileNamePrefix + JAR_FILE_EXTENSION; + } + + public String getDirLocation() { + return dirLocation; + } +} diff --git a/dexgen/src/com/android/dexgen/util/ToHuman.java b/dexgen/src/com/android/dexgen/util/ToHuman.java new file mode 100644 index 0000000..bbf044c --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/ToHuman.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Simple interface for objects that can return a "human" (as opposed to + * a complete but often hard to read) string form. + */ +public interface ToHuman { + /** + * Return the "human" string form of this instance. This is + * generally less "debuggy" than {@code toString()}. + * + * @return {@code non-null;} the human string form + */ + public String toHuman(); +} diff --git a/dexgen/src/com/android/dexgen/util/TwoColumnOutput.java b/dexgen/src/com/android/dexgen/util/TwoColumnOutput.java new file mode 100644 index 0000000..17a4c42 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/TwoColumnOutput.java @@ -0,0 +1,254 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.StringWriter; +import java.io.Writer; + +/** + * Class that takes a combined output destination and provides two + * output writers, one of which ends up writing to the left column and + * one which goes on the right. + */ +public final class TwoColumnOutput { + /** {@code non-null;} underlying writer for final output */ + private final Writer out; + + /** {@code > 0;} the left column width */ + private final int leftWidth; + + /** {@code non-null;} pending left column output */ + private final StringBuffer leftBuf; + + /** {@code non-null;} pending right column output */ + private final StringBuffer rightBuf; + + /** {@code non-null;} left column writer */ + private final IndentingWriter leftColumn; + + /** {@code non-null;} right column writer */ + private final IndentingWriter rightColumn; + + /** + * Turns the given two strings (with widths) and spacer into a formatted + * two-column string. + * + * @param s1 {@code non-null;} first string + * @param width1 {@code > 0;} width of the first column + * @param spacer {@code non-null;} spacer string + * @param s2 {@code non-null;} second string + * @param width2 {@code > 0;} width of the second column + * @return {@code non-null;} an appropriately-formatted string + */ + public static String toString(String s1, int width1, String spacer, + String s2, int width2) { + int len1 = s1.length(); + int len2 = s2.length(); + + StringWriter sw = new StringWriter((len1 + len2) * 3); + TwoColumnOutput twoOut = + new TwoColumnOutput(sw, width1, width2, spacer); + + try { + twoOut.getLeft().write(s1); + twoOut.getRight().write(s2); + } catch (IOException ex) { + throw new RuntimeException("shouldn't happen", ex); + } + + twoOut.flush(); + return sw.toString(); + } + + /** + * Constructs an instance. + * + * @param out {@code non-null;} writer to send final output to + * @param leftWidth {@code > 0;} width of the left column, in characters + * @param rightWidth {@code > 0;} width of the right column, in characters + * @param spacer {@code non-null;} spacer string to sit between the two columns + */ + public TwoColumnOutput(Writer out, int leftWidth, int rightWidth, + String spacer) { + if (out == null) { + throw new NullPointerException("out == null"); + } + + if (leftWidth < 1) { + throw new IllegalArgumentException("leftWidth < 1"); + } + + if (rightWidth < 1) { + throw new IllegalArgumentException("rightWidth < 1"); + } + + if (spacer == null) { + throw new NullPointerException("spacer == null"); + } + + StringWriter leftWriter = new StringWriter(1000); + StringWriter rightWriter = new StringWriter(1000); + + this.out = out; + this.leftWidth = leftWidth; + this.leftBuf = leftWriter.getBuffer(); + this.rightBuf = rightWriter.getBuffer(); + this.leftColumn = new IndentingWriter(leftWriter, leftWidth); + this.rightColumn = + new IndentingWriter(rightWriter, rightWidth, spacer); + } + + /** + * Constructs an instance. + * + * @param out {@code non-null;} stream to send final output to + * @param leftWidth {@code >= 1;} width of the left column, in characters + * @param rightWidth {@code >= 1;} width of the right column, in characters + * @param spacer {@code non-null;} spacer string to sit between the two columns + */ + public TwoColumnOutput(OutputStream out, int leftWidth, int rightWidth, + String spacer) { + this(new OutputStreamWriter(out), leftWidth, rightWidth, spacer); + } + + /** + * Gets the writer to use to write to the left column. + * + * @return {@code non-null;} the left column writer + */ + public Writer getLeft() { + return leftColumn; + } + + /** + * Gets the writer to use to write to the right column. + * + * @return {@code non-null;} the right column writer + */ + public Writer getRight() { + return rightColumn; + } + + /** + * Flushes the output. If there are more lines of pending output in one + * column, then the other column will get filled with blank lines. + */ + public void flush() { + try { + appendNewlineIfNecessary(leftBuf, leftColumn); + appendNewlineIfNecessary(rightBuf, rightColumn); + outputFullLines(); + flushLeft(); + flushRight(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + /** + * Outputs to the final destination as many full line pairs as + * there are in the pending output, removing those lines from + * their respective buffers. This method terminates when at + * least one of the two column buffers is empty. + */ + private void outputFullLines() throws IOException { + for (;;) { + int leftLen = leftBuf.indexOf("\n"); + if (leftLen < 0) { + return; + } + + int rightLen = rightBuf.indexOf("\n"); + if (rightLen < 0) { + return; + } + + if (leftLen != 0) { + out.write(leftBuf.substring(0, leftLen)); + } + + if (rightLen != 0) { + writeSpaces(out, leftWidth - leftLen); + out.write(rightBuf.substring(0, rightLen)); + } + + out.write('\n'); + + leftBuf.delete(0, leftLen + 1); + rightBuf.delete(0, rightLen + 1); + } + } + + /** + * Flushes the left column buffer, printing it and clearing the buffer. + * If the buffer is already empty, this does nothing. + */ + private void flushLeft() throws IOException { + appendNewlineIfNecessary(leftBuf, leftColumn); + + while (leftBuf.length() != 0) { + rightColumn.write('\n'); + outputFullLines(); + } + } + + /** + * Flushes the right column buffer, printing it and clearing the buffer. + * If the buffer is already empty, this does nothing. + */ + private void flushRight() throws IOException { + appendNewlineIfNecessary(rightBuf, rightColumn); + + while (rightBuf.length() != 0) { + leftColumn.write('\n'); + outputFullLines(); + } + } + + /** + * Appends a newline to the given buffer via the given writer, but + * only if it isn't empty and doesn't already end with one. + * + * @param buf {@code non-null;} the buffer in question + * @param out {@code non-null;} the writer to use + */ + private static void appendNewlineIfNecessary(StringBuffer buf, + Writer out) + throws IOException { + int len = buf.length(); + + if ((len != 0) && (buf.charAt(len - 1) != '\n')) { + out.write('\n'); + } + } + + /** + * Writes the given number of spaces to the given writer. + * + * @param out {@code non-null;} where to write + * @param amt {@code >= 0;} the number of spaces to write + */ + private static void writeSpaces(Writer out, int amt) throws IOException { + while (amt > 0) { + out.write(' '); + amt--; + } + } +} diff --git a/dexgen/src/com/android/dexgen/util/Warning.java b/dexgen/src/com/android/dexgen/util/Warning.java new file mode 100644 index 0000000..204d877 --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/Warning.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +/** + * Exception which is meant to indicate a non-fatal warning. + */ +public class Warning extends RuntimeException { + /** + * Constructs an instance. + * + * @param message human-oriented message + */ + public Warning(String message) { + super(message); + } +} diff --git a/dexgen/src/com/android/dexgen/util/Writers.java b/dexgen/src/com/android/dexgen/util/Writers.java new file mode 100644 index 0000000..046967e --- /dev/null +++ b/dexgen/src/com/android/dexgen/util/Writers.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package com.android.dexgen.util; + +import java.io.PrintWriter; +import java.io.Writer; + +/** + * Utilities for dealing with {@code Writer}s. + */ +public final class Writers { + /** + * This class is uninstantiable. + */ + private Writers() { + // This space intentionally left blank. + } + + /** + * Makes a {@code PrintWriter} for the given {@code Writer}, + * returning the given writer if it already happens to be the right + * class. + * + * @param writer {@code non-null;} writer to (possibly) wrap + * @return {@code non-null;} an appropriate instance + */ + public static PrintWriter printWriterFor(Writer writer) { + if (writer instanceof PrintWriter) { + return (PrintWriter) writer; + } + + return new PrintWriter(writer); + } +} diff --git a/docs/dalvik-constraints.css b/docs/dalvik-constraints.css new file mode 100644 index 0000000..a315a73 --- /dev/null +++ b/docs/dalvik-constraints.css @@ -0,0 +1,59 @@ +h1 { + font-family: serif; + color: #222266; +} + +h2 { + font-family: serif; + border-top-style: solid; + border-top-width: 2px; + border-color: #ccccdd; + padding-top: 12px; + margin-top: 48px; + margin-bottom: 2px; + color: #222266; +} + +@media print { + table { + font-size: 8pt; + } +} + +@media screen { + table { + font-size: 10pt; + } +} + + +/* general for all tables */ + +table { + border-collapse: collapse; + margin-top: 24px; + margin-bottom: 24px; + margin-left: 48px; + margin-right: 48px; +} + +table th { + font-family: sans-serif; + background: #aabbff; + text-align: left; +} + +table td { + font-family: sans-serif; + border-top-style: solid; + border-bottom-style: solid; + border-width: 1px; + border-color: #aaaaff; + padding-top: 4px; + padding-bottom: 4px; + padding-left: 4px; + padding-right: 6px; + background: #eeeeff; + margin-top: 4pt; + margin-bottom: 0pt; +} diff --git a/docs/dalvik-constraints.html b/docs/dalvik-constraints.html new file mode 100644 index 0000000..78ba945 --- /dev/null +++ b/docs/dalvik-constraints.html @@ -0,0 +1,897 @@ + + + + + Dalvik bytecode constraints + + + + + +

Dalvik bytecode constraints

+ + + +

+ Static constraints +

+ +

+ Static constraints are constraints on individual elements of the bytecode. + They usually can be checked without employing control or data-flow analysis + techniques. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Identifier + + Description + + Spec equivalent +
+ A1 + + The insns array must not be empty. + + 4.8.1.1 +
+ A2 + + The first opcode in the insns array must have index zero. + + 4.8.1.3 +
+ A3 + + The insns array must only contain valid Dalvik opcodes. + + 4.8.1.4 +
+ A4 + + The index of instruction n+1 must equal the index of + instruction n plus the length of instruction + n, taking into account possible operands. + + 4.8.1.5 +
+ A5 + + The last instruction in the insns array must end at index + insns_size-1. + + 4.8.1.6 +
+ A6 + + All goto and if-<kind> targets must + be opcodes within in the same method. + + 4.8.1.7 +
+ A7 + + All targets of a packed-switch instruction must be + opcodes within in the same method. The size and the list of targets + must be consistent. + + 4.8.1.8 +
+ A8 + + All targets of a sparse-switch instruction must be + opcodes within in the same method. The corresponding table must be + consistent and sorted low-to-high. + + 4.8.1.9 +
+ A9 + + The B operand of the const-string and + const-string/jumbo instructions must be a valid index + into the string constant pool. + + 4.8.1.10 +
+ A10 + + The C operand of the iget<kind> and + iput<kind> instructions must be a valid index into + the field constant pool. The referenced entry must represent an + instance field. + + 4.8.1.12 +
+ A11 + + The C operand of the sget<kind> and + sput<kind> instructions must be a valid index into + the field constant pool. The referenced entry must represent a static + field. + + 4.8.1.12 +
+ A12 + + The C operand of the invoke-virtual, + invoke-super, and + invoke-static instructions must be a valid index into the + method constant pool. In all cases, the referenced + method_id must belong to a class (not an interface). + + 4.8.1.13 +
+ A13 + + The B operand of the invoke-virtual/range, + invoke-super/range, invoke-direct/range, and + invoke-static/range instructions must be a valid index + into the method constant pool. In all cases, the referenced + method_id must belong to a class (not an interface). + + 4.8.1.13 +
+ A14 + + A method the name of which starts with a '<' must only be invoked + implicitly by the VM, not by code originating from a Dex file. The + only exception is the instance initializer, which may be invoked by + invoke-direct. + + 4.8.1.14 +
+ A15 + + The C operand of the invoke-interface + instruction must be a valid index into the method constant pool. The + referenced method_id must belong to an interface (not a + class). + + 4.8.1.15 +
+ A16 + + The B operand of the invoke-interface/range + instruction must be a valid index into the method constant pool. + The referenced method_id must belong to an interface (not + a class). + + 4.8.1.15 +
+ A17 + + The B operand of the const-class, + check-cast, new-instance, and + filled-new-array/range instructions must be a valid index + into the type constant pool. + + 4.8.1.16 +
+ A18 + + The C operand of the instance-of, + new-array, and filled-new-array + instructions must be a valid index into the type constant pool. + + 4.8.1.16 +
+ A19 + + The dimensions of an array created by a new-array + instruction must be less than 256. + + 4.8.1.17 +
+ A20 + + The new instruction must not refer to array classes, + interfaces, or abstract classes. + + 4.8.1.18 +
+ A21 + + The type referred to by a new-array instruction must be + a valid, non-reference type. + + 4.8.1.20 +
+ A22 + + All registers referred to by an instruction in a single-width + (non-pair) fashion must be valid for the current method. That is, + their indices must be non-negative and smaller than + registers_size. + + 4.8.1.21 +
+ A23 + + All registers referred to by an instruction in a double-width (pair) + fashion must be valid for the current method. That is, their indices + must be non-negative and smaller than registers_size-1. + + 4.8.1.23 +
+ +

+ Structural constraints +

+ +

+ Structural constraints are constraints on relationships between several + elements of the bytecode. They usually can't be checked without employing + control or data-flow analysis techniques. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Identifier + + Description + + Spec equivalent +
+ B1 + + The number and types of arguments (registers and immediate values) + must always match the instruction. + + 4.8.2.1 +
+ B2 + + Register pairs must never be broken up. + + 4.8.2.3 +
+ B3 + + A register (or pair) has to be assigned first before it can be + read. + + 4.8.2.4 +
+ B4 + + An invoke-direct instruction must only invoke an instance + initializer or a method in the current class or one of its + superclasses. + + 4.8.2.7 +
+ B5 + + An instance initializer must only be invoked on an uninitialized + instance. + + 4.8.2.8 +
+ B6 + + Instance methods may only be invoked on and instance fields may only + be accessed on already initialized instances. + + 4.8.2.9 +
+ B7 + + A register which holds the result of a new-instance + instruction must not be used if the same + new-instance instruction is again executed before + the instance is initialized. + + 4.8.2.10 +
+ B8 + + An instance initializer must call another instance initializer (same + class or superclass) before any instance members can be accessed. + Exceptions are non-inherited instance fields, which can be assigned + before calling another initializer, and the Object class + in general. + + 4.8.2.11 +
+ B9 + + All actual method arguments must be assignment-compatible with their + respective formal arguments. + + 4.8.2.12 +
+ B10 + + For each instance method invocation, the actual instance must be + assignment-compatible with the class or interface specified in the + instruction. + + 4.8.2.13 +
+ B11 + + A return<kind> instruction must match its + method's return type. + + 4.8.2.14 +
+ B12 + + When accessing protected members of a superclass, the actual type of + the instance being accessed must be either the current class or one + of its subclasses. + + 4.8.2.15 +
+ B13 + + The type of a value stored into a static field must be + assignment-compatible with or convertible to the field's type. + + 4.8.2.16 +
+ B14 + + The type of a value stored into a field must be assignment-compatible + with or convertible to the field's type. + + 4.8.2.17 +
+ B15 + + The type of every value stored into an array must be + assignment-compatible with the array's component type. + + 4.8.2.18 +
+ B16 + + The A operand of a throw instruction must + be assignment-compatible with java.lang.Throwable. + + 4.8.2.19 +
+ B17 + + The last reachable instruction of a method must either be a backwards + goto or branch, a return, or a + throw instruction. It must not be possible to leave the + insns array at the bottom. + + 4.8.2.20 +
+ B18 + + The unassigned half of a former register pair may not be read (is + considered invalid) until it has been re-assigned by some other + instruction. + + 4.8.2.3, 4.8.2.4 +
+ B19 + + A move-result<kind> instruction must be immediately + preceded (in the insns array) by an + invoke-<kind> instruction. The only exception is + the move-result-object instruction, which may also be + preceded by a filled-new-array instruction. + + - +
+ B20 + + A move-result<kind> instruction must be immediately + preceded (in actual control flow) by a matching + return-<kind> instruction (it must not be jumped + to). The only exception is the move-result-object + instruction, which may also be preceded by a + filled-new-array instruction. + + - +
+ B21 + + A move-exception instruction must only appear as the + first instruction in an exception handler. + + - +
+ B22 + + The packed-switch-data, sparse-switch-data, + and fill-array-data pseudo-instructions must not be + reachable by control flow. + + - +
+ + + diff --git a/docs/debugger.html b/docs/debugger.html new file mode 100644 index 0000000..1c47c7a --- /dev/null +++ b/docs/debugger.html @@ -0,0 +1,243 @@ + + +Dalvik Debugger Support + + + +

Dalvik Debugger Support

+ +

+The Dalvik virtual machine supports source-level debugging with many popular +development environments. Any tool that allows remote debugging over JDWP +(the + +Java Debug Wire Protocol) is expected work. Supported debuggers +include jdb, Eclipse, IntelliJ, and JSwat. +

+The VM does not support tools based on JVMTI (Java Virtual +Machine Tool Interface). This is a relatively intrusive approach that +relies on bytecode insertion, something the Dalvik VM does not currently +support. +

+Dalvik's implementation of JDWP also includes hooks for supporting +DDM (Dalvik Debug Monitor) features, notably as implemented by DDMS +(Dalvik Debug Monitor Server) and the Eclipse ADT plugin. The protocol +and VM interaction is described in some detail +here. +

+All of the debugger support in the VM lives in the dalvik/vm/jdwp +directory, and is almost entirely isolated from the rest of the VM sources. +dalvik/vm/Debugger.c bridges the gap. The goal in doing so +was to make it easier to re-use the JDWP code in other projects. +

+ + +

Implementation

+ +

+Every VM that has debugging enabled starts a "JDWP" thread. The thread +typically sits idle until DDMS or a debugger connects. The thread is +only responsible for handling requests from the debugger; VM-initated +communication, such as notifying the debugger when the VM has stopped at +a breakpoint, are sent from the affected thread. +

+When the VM is started from the Android app framework, debugging is enabled +for all applications when the system property ro.debuggable +is set to 1 (use adb shell getprop ro.debuggable +to check it). If it's zero, debugging can be enabled via the application's +manifest, which must include android:debuggable="true" in the +<application> element. + +

+The VM recognizes the difference between a connection from DDMS and a +connection from a debugger (either directly or in concert with DDMS). +A connection from DDMS alone doesn't result in a change in VM behavior, +but when the VM sees debugger packets it allocates additional data +structures and may switch to a different implementation of the interpreter. +

+Pre-Froyo implementations of the Dalvik VM used read-only memory mappings +for all bytecode, which made it necessary to scan for breakpoints by +comparing the program counter to a set of addresses. In Froyo this was +changed to allow insertion of breakpoint opcodes. This allows the VM +to execute code more quickly, and does away with the hardcoded limit +of 20 breakpoints. Even with this change, however, the debug-enabled +interpreter is much slower than the regular interpreter (perhaps 5x). +

+The JDWP protocol is stateless, so the VM handles individual debugger +requests as they arrive, and posts events to the debugger as they happen. +

+ + +

Debug Data

+

Source code debug data, which includes mappings of source code to +bytecode and lists describing which registers are used to hold method +arguments and local variables, are optionally emitted by the Java compiler. +When dx converts Java bytecode to Dalvik bytecode, it must +also convert this debug data. +

+dx must also ensure that it doesn't perform operations +that confuse the debugger. For example, re-using registers that hold +method arguments and the "this" pointer is allowed in +Dalvik bytecode if the values are never used or no longer needed. +This can be very confusing for the debugger (and the programmer) +since the values have method scope and aren't expected to disappear. For +this reason, dx generates sub-optimal code in some situations +when debugging support is enabled. +

+Some of the debug data is used for other purposes; in particular, having +filename and line number data is necessary for generating useful exception +stack traces. This data can be omitted by dx to make the DEX +file smaller. +

+ + +

Usage

+ +

+The Dalvik VM supports many of the same command-line flags that other popular +desktop VMs do. To start a VM with debugging enabled, you add a command-line +flag with some basic options. The basic incantation looks something +like this: + +

-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
+or +
-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y
+ +

+After the initial prefix, options are provided as name=value pairs. The +options currently supported by the Dalvik VM are: +

+
transport (no default)
+
Communication transport mechanism to use. Dalvik supports + TCP/IP sockets (dt_socket) and connection over USB + through ADB (dt_android_adb). +
+ +
server (default='n')
+
Determines whether the VM acts as a client or a server. When + acting as a server, the VM waits for a debugger to connect to it. + When acting as a client, the VM attempts to connect to a waiting + debugger. +
+ +
suspend (default='n')
+
If set to 'y', the VM will wait for a debugger connection + before executing application code. When the debugger connects (or + when the VM finishes connecting to the debugger), the VM tells the + debugger that it has suspended, and will not proceed until told + to resume. If set to 'n', the VM just plows ahead. +
+ +
address (default="")
+
This must be hostname:port when server=n, + but can be just port when server=y. This + specifies the IP address and port number to connect or listen to. +
+ Listening on port 0 has a special meaning: try to + listen on port 8000; if that fails, try 8001, 8002, and so on. (This + behavior is non-standard and may be removed from a future release.) +
This option has no meaning for transport=dt_android_adb. +
+ +
help (no arguments)
+
If this is the only option, a brief usage message is displayed. +
+ +
launch, onthrow, oncaught, timeout
+
These options are accepted but ignored. +
+
+ +

+To debug a program on an Android device using DDMS over USB, you could +use a command like this: +

% dalvikvm -agentlib:jdwp=transport=dt_android_adb,suspend=y,server=y -cp /data/foo.jar Foo
+ +This tells the Dalvik VM to run the program with debugging enabled, listening +for a connection from DDMS, and waiting for a debugger. The program will show +up with an app name of "?" in the process list, because it wasn't started +from the Android application framework. From here you would connect your +debugger to the appropriate DDMS listen port (e.g. +jdb -attach localhost:8700 after selecting it in the app list). + +

+To debug a program on an Android device using TCP/IP bridged across ADB, +you would first need to set up forwarding: +

% adb forward tcp:8000 tcp:8000
+% adb shell dalvikvm -agentlib:jdwp=transport=dt_socket,address=8000,suspend=y,server=y -cp /data/foo.jar Foo
+and then jdb -attach localhost:8000. +

+(In the above examples, the VM will be suspended when you attach. In jdb, +type cont to continue.) +

+The DDMS integration makes the dt_android_adb transport much +more convenient when debugging on an Android device, but when working with +Dalvik on the desktop it makes sense to use the TCP/IP transport. +

+ + +

Known Issues and Limitations

+ +

+Most of the optional features JDWP allows are not implemented. These +include field access watchpoints and better tracking of monitors. +

+Not all JDWP requests are implemented. In particular, anything that +never gets emitted by the debuggers we've used is not supported and will +result in error messages being logged. Support will be added when a +use case is uncovered. +

+  +

+The debugger and garbage collector are somewhat loosely +integrated at present. The VM currently guarantees that any object the +debugger is aware of will not be garbage collected until after the +debugger disconnects. This can result in a build-up over time while the +debugger is connected. For example, if the debugger sees a running +thread, the associated Thread object will not be collected, even after +the thread terminates. +

+The only way to "unlock" the references is to detach and reattach the +debugger. +

+  +

+The translation from Java bytecode to Dalvik bytecode may result in +identical sequences of instructions being combined. This can make it +look like the wrong bit of code is being executed. For example: +

    int test(int i) {
+        if (i == 1) {
+            return 0;
+        }
+        return 1;
+    }
+The Dalvik bytecode uses a common return instruction for both +return statements, so when i is 1 the debugger +will single-step through return 0 and then return 1. +

+  +

+Dalvik handles synchronized methods differently from other VMs. +Instead of marking a method as synchronized and expecting +the VM to handle the locks, dx inserts a "lock" +instruction at the top of the method and an "unlock" instruction in a +synthetic finally block. As a result, when single-stepping +a return statement, the "current line" cursor may jump to +the last line in the method. +

+This can also affect the way the debugger processes exceptions. The +debugger may decide to break on an +exception based on whether that exception is "caught" or "uncaught". To +be considered uncaught, there must be no matching catch block +or finally clause between the current point of execution and +the top of the thread. An exception thrown within or below a synchronized +method will always be considered "caught", so the debugger won't stop +until the exception is re-thrown from the synthetic finally block. +

+ + +

Copyright © 2009 The Android Open Source Project
+

+ + + diff --git a/docs/debugmon.html b/docs/debugmon.html new file mode 100644 index 0000000..3e2eb4d --- /dev/null +++ b/docs/debugmon.html @@ -0,0 +1,736 @@ + + + + + Dalvik VM Debug Monitor + + + + + + + +

Dalvik VM
Debug Monitor

+ + +

Status:Draft   +(as of March 6, 2007)

+
+[authors] +
+ + +Modified: + + + + +


+


+ +

Introduction

+ +

It's extremely useful to be able to monitor the live state of the +VM. For Android, we need to monitor multiple VMs running on a device +connected through USB or a wireless network connection. This document +describes a debug monitor server that interacts with multiple VMs, and +an API that VMs and applications can use to provide information +to the monitor. + +

Some things we can monitor with the Dalvik Debug Monitor ("DDM"): +

    +
  • Thread states. Track thread creation/exit, busy/idle status. +
  • Overall heap status, useful for a heap bitmap display or + fragmentation analysis. +
+ +

It is possible for something other than a VM to act as a DDM client, but +that is a secondary goal. Examples include "logcat" log extraction +and system monitors for virtual memory usage and load average. + +

It's also possible for the DDM server to be run on the device, with +the information presented through the device UI. However, the initial goal +is to provide a display tool that takes advantage of desktop tools and +screen real estate. + +

This work is necessary because we are unable to use standard JVMTI-based +tools with Dalvik. JVMTI relies on bytecode insertion, which is not +currently possible because Dalvik doesn't support Java bytecode. + +

The DDM server is written in the Java programming language +for portability. It uses a desktop +UI toolkit (SWT) for its interface. + + +

Protocol

+ +

To take advantage of existing infrastructure we are piggy-backing the +DDM protocol on top of JDWP (the Java Debug Wire Protocol, normally spoken +between a VM and a debugger). To a +non-DDM client, the DDM server just looks like a debugger. + +

The JDWP protocol is very close to what we want to use. In particular: +

    +
  • It explicitly allows for vendor-defined packets, so there is no + need to "bend" the JDWP spec. +
  • Events may be posted from the VM at arbitrary points. Such + events do not elicit a response from the debugger, meaning the client + can post data and immediately resume work without worrying about the + eventual response. +
  • The basic protocol is stateless and asynchronous. Request packets + from the debugger side include a serial number, which the VM includes + in the response packet. This allows multiple simultaneous + conversations, which means the DDM traffic can be interleaved with + debugger traffic. +
+ +

There are a few issues with using JDWP for our purposes: +

    +
  • The VM only expects one connection from a debugger, so you couldn't + attach the monitor and a debugger at the same time. This will be + worked around by connecting the debugger to the monitor and passing the + traffic through. (We're already doing the pass-through with "jdwpspy"; + requires some management of our request IDs though.) This should + be more convenient than the current "guess the port + number" system when we're attached to a device. +
  • The VM behaves differently when a debugger is attached. It will + run more slowly, and any objects passed to the monitor or debugger are + immune to GC. We can work around this by not enabling the slow path + until non-DDM traffic is observed. We also want to have a "debugger + has connected/disconnected" message that allows the VM to release + debugger-related resources without dropping the net connection. +
  • Non-DDM VMs should not freak out when DDM connects. There are + no guarantees here for 3rd-party VMs (e.g. a certain mainstream VM, + which crashes instantly), but our older JamVM can be + configured to reject the "hello" packet. +
+ + +

Connection Establishment

+ +

There are two basic approaches: have the server contact the VMs, and +have the VMs contact the server. The former is less "precise" than the +latter, because you have to scan for the clients, but it has some +advantages. + +

There are three interesting scenarios: +

    +
  1. The DDM server is started, then the USB-attached device is booted + or the simulator is launched. +
  2. The device or simulator is already running when the DDM server + is started. +
  3. The DDM server is running when an already-started device is + attached to USB. +
+

If we have the VMs connect to the DDM server on startup, we only handle +case #1. If the DDM server scans for VMs when it starts, we only handle +case #2. Neither handles case #3, which is probably the most important +of the bunch as the device matures. +

The plan is to have a drop-down menu with two entries, +"scan workstation" and "scan device". +The former causes the DDM server to search for VMs on "localhost", the +latter causes it to search for VMs on the other side of an ADB connection. +The DDM server will scan for VMs every few seconds, either checking a +range of known VM ports (e.g. 8000-8040) or interacting with some sort +of process database on the device. Changing modes causes all existing +connections to be dropped. +

When the DDM server first starts, it will try to execute "adb usb" +to ensure that the ADB server is running. (Note it will be necessary +to launch the DDM server from a shell with "adb" in the path.) If this +fails, talking to the device will still be possible so long as the ADB +daemon is already running. + +

Connecting a Debugger

+ +

With the DDM server sitting on the JDWP port of all VMs, it will be +necessary to connect the debugger through the DDM server. Each VM being +debugged will have a separate port being listened to by the DDM server, +allowing you to connect a debugger to one or more VMs simultaneously. + +

In the common case, however, the developer will only want to debug +a single VM. One port (say 8700) will be listened to by the DDM server, +and anything connecting to it will be connected to the "current VM" +(selected in the UI). This should allow developers to focus on a +single application, which may otherwise shift around in the ordering, without +having to adjust their IDE settings to a different port every time they +restart the device. + + +

Packet Format

+ +

Information is sent in chunks. Each chunk starts with: +

+u4   type
+u4   length
+
+and contains a variable amount of type-specific data. +Unrecognized types cause an empty response from the client and +are quietly ignored by the server. [Should probably return an error; +need an "error" chunk type and a handler on the server side.] + +

The same chunk type may have different meanings when sent in different +directions. For example, the same type may be used for both a query and +a response to the query. The same type must always be used in +related transactions. + +

This is somewhat redundant with the JDWP framing, which includes a +4-byte length and a two-byte type code ("command set" and "command"; a +range of command set values is designated for "vendor-defined commands +and extensions"). Using the chunk format allows us to remain independent +of the underlying transport, avoids intrusive integration +with JDWP client code, and provides a way to send multiple chunks in a +single transmission unit. [I'm taking the multi-chunk packets into +account in the design, but do not plan to implement them unless the need +arises.] + +

Because we may be sending data over a slow USB link, the chunks may be +compressed. Compressed chunks are written as a chunk type that +indicates the compression, followed by the compressed length, followed +by the original chunk type and the uncompressed length. For zlib's deflate +algorithm, the chunk type is "ZLIB". + +

Following the JDWP model, packets sent from the server to the client +are always acknowledged, but packets sent from client to server never are. +The JDWP error code field is always set to "no error"; failure responses +from specific requests must be encoded into the DDM messages. + +

In what follows "u4" is an unsigned 32-bit value and "u1" is an +unsigned 8-bit value. Values are written in big-endian order to match +JDWP. + + +

Initial Handshake

+ +

After the JDWP handshake, the server sends a HELO chunk to the client. +If the client's JDWP layer rejects it, the server assumes that the client +is not a DDM-aware VM, and does not send it any further DDM queries. +

On the client side, upon seeing a HELO it can know that a DDM server +is attached and prepare accordingly. The VM should not assume that a +debugger is attached until a non-DDM packet arrives. + +

Chunk HELO (server --> client)

+

Basic "hello" message. +

+u4   DDM server protocol version
+
+ + +

Chunk HELO (client --> server, reply only)

+Information about the client. Must be sent in response to the HELO message. +
+u4   DDM client protocol version
+u4   pid
+u4   VM ident string len (in 16-bit units)
+u4   application name len (in 16-bit units)
+var  VM ident string (UTF-16)
+var  application name (UTF-16)
+
+ +

If the client does not wish to speak to the DDM server, it should respond +with a JDWP error packet. This is the same behavior you'd get from a VM +that doesn't support DDM. + + +

Debugger Management

+

VMs usually prepare for debugging when a JDWP connection is established, +and release debugger-related resources when the connection drops. We want +to open the JDWP connection early and hold it open after the debugger +disconnects. +

The VM can tell when a debugger attaches, because it will start seeing +non-DDM JDWP traffic, but it can't identify the disconnect. For this reason, +we need to send a packet to the client when the debugger disconnects. +

If the DDM server is talking to a non-DDM-aware client, it will be +necessary to drop and re-establish the connection when the debugger goes away. +(This also works with DDM-aware clients; this packet is an optimization.) + +

Chunk DBGD (server --> client)

+

Debugger has disconnected. The client responds with a DBGD to acknowledge +receipt. No data in request, no response required. + + +

VM Info

+

Update the server's info about the client. + +

Chunk APNM (client --> server)

+ +

If a VM's application name changes -- possible in our environment because +of the "pre-initialized" app processes -- it must send up one of these. +

+u4   application name len (in 16-bit chars)
+var  application name (UTF-16)
+
+ +

Chunk WAIT (client --> server)

+ +

This tells DDMS that one or more threads are waiting on an external +event. The simplest use is to tell DDMS that the VM is waiting for a +debugger to attach. +

+u1   reason  (0 = wait for debugger)
+
+If DDMS is attached, the client VM sends this up when waitForDebugger() +is called. If waitForDebugger() is called before DDMS attaches, the WAIT +chunk will be sent up at about the same time as the HELO response. + + +

Thread Status

+ +

The client can send updates when their status changes, or periodically +send thread state info, e.g. 2x per +second to allow a "blinkenlights" display of thread activity. + +

Chunk THEN (server --> client)

+ +

Enable thread creation/death notification. +

+u1   boolean (true=enable, false=disable)
+
+

The response is empty. The client generates THCR packets for all +known threads. (Note the THCR packets may arrive before the THEN +response.) + +

Chunk THCR (client --> server)

+

Thread Creation notification. +

+u4   VM-local thread ID (usually a small int)
+u4   thread name len (in 16-bit chars)
+var  thread name (UTF-16)
+
+ +

Chunk THDE (client --> server)

+

Thread Death notification. +

+u4   VM-local thread ID
+
+ +

Chunk THST (server --> client)

+ +

Enable periodic thread activity updates. +Threads in THCR messages are assumed to be in the "initializing" state. A +THST message should follow closely on the heels of THCR. +

+u4   interval, in msec
+
+

An interval of 0 disables the updates. This is done periodically, +rather than every time the thread state changes, to reduce the amount +of data that must be sent for an actively running VM. + +

Chunk THST (client --> server)

+

Thread Status, describing the state of one or more threads. This is +most useful when creation/death notifications are enabled first. The +overall layout is: +

+u4   count
+var  thread data
+
+Then, for every thread: +
+u4   VM-local thread ID
+u1   thread state
+u1   suspended
+
+

"thread state" must be one of: +

    +
  • 1 - running (now executing or ready to do so) +
  • 2 - sleeping (in Thread.sleep()) +
  • 3 - monitor (blocked on a monitor lock) +
  • 4 - waiting (in Object.wait()) +
  • 5 - initializing +
  • 6 - starting +
  • 7 - native (executing native code) +
  • 8 - vmwait (waiting on a VM resource) +
+

"suspended" will be 0 if the thread is running, 1 if not. +

[Any reason not to make "suspended" be the high bit of "thread state"? +Do we need to differentiate suspend-by-GC from suspend-by-debugger?] +

[We might be able to send the currently-executing method. This is a +little risky in a running VM, and increases the size of the messages +considerably, but might be handy.] + + +

Heap Status

+ +

The client sends what amounts to a color-coded bitmap to the server, +indicating which stretches of memory are free and which are in use. For +compactness the bitmap is run-length encoded, and based on multi-byte +"allocation units" rather than byte counts. + +

In the future the server will be able to correlate the bitmap with more +detailed object data, so enough information is provided to associate the +bitmap data with virtual addresses. + +

Heaps may be broken into segments within the VM, and due to memory +constraints it may be desirable to send the bitmap in smaller pieces, +so the protocol allows the heap data to be sent in several chunks. +To avoid ambiguity, the client is required +to send explicit "start" and "end" messages during an update. + +

All messages include a "heap ID" that can be used to differentiate +between multiple independent virtual heaps or perhaps a native heap. The +client is allowed to send information about different heaps simultaneously, +so all heap-specific information is tagged with a "heap ID". + +

Chunk HPIF (server --> client)

+

Request heap info. +

+u1   when to send
+
+

The "when" values are: +

+0: never
+1: immediately
+2: at the next GC
+3: at every GC
+
+ +

Chunk HPIF (client --> server, reply only)

+

Heap Info. General information about the heap, suitable for a summary +display. +

+u4   number of heaps
+
+For each heap: +
+u4   heap ID
+u8   timestamp in ms since Unix epoch
+u1   capture reason (same as 'when' value from server)
+u4   max heap size in bytes (-Xmx)
+u4   current heap size in bytes
+u4   current number of bytes allocated
+u4   current number of objects allocated
+
+

[We can get some of this from HPSG, more from HPSO.] +

[Do we need a "heap overhead" stat here, indicating how much goes to +waste? e.g. (8 bytes per object * number of objects)] + +

Chunk HPSG (server --> client)

+

Request transmission of heap segment data. +

+u1   when to send
+u1   what to send
+
+

The "when" to send will be zero to disable transmission, 1 to send +during a GC. Other values are currently undefined. (Could use to pick +which part of the GC to send it, or cause periodic transmissions.) +

The "what" field is currently 0 for HPSG and 1 for HPSO. +

No reply is expected. + +

Chunk NHSG (server --> client)

+

Request transmission of native heap segment data. +

+u1   when to send
+u1   what to send
+
+

The "when" to send will be zero to disable transmission, 1 to send +during a GC. Other values are currently undefined. +

The "what" field is currently ignored. +

No reply is expected. + +

Chunk HPST/NHST (client --> server)

+

This is a Heap Start message. It tells the server to discard any +existing notion of what the client's heap looks like, and prepare for +new information. HPST indicates a virtual heap dump and must be followed +by zero or more HPSG/HPSO messages and an HPEN. NHST indicates a native +heap dump and must be followed by zero or more NHSG messages and an NHEN. + +

The only data item is: +

+u4   heap ID
+
+ +

Chunk HPEN/NHEN (client --> server)

+

Heap End, indicating that all information about the heap has been sent. +A HPST will be paired with an HPEN and an NHST will be paired with an NHEN. + +

The only data item is: +

+u4   heap ID
+
+ +

Chunk HPSG (client --> server)

+

Heap segment data. Each chunk describes all or part of a contiguous +stretch of heap memory. +

+u4   heap ID
+u1   size of allocation unit, in bytes (e.g. 8 bytes)
+u4   virtual address of segment start
+u4   offset of this piece (relative to the virtual address)
+u4   length of piece, in allocation units
+var  usage data
+
+

The "usage data" indicates the status of each allocation unit. The data +is a stream of pairs of bytes, where the first byte indicates the state +of the allocation unit, and the second byte indicates the number of +consecutive allocation units with the same state. +

The bits in the "state" byte have the following meaning: +

++---------------------------------------+
+|  7 |  6 |  5 |  4 |  3 |  2 |  1 |  0 |
++---------------------------------------+
+|  P | U0 | K2 | K1 | K0 | S2 | S1 | S0 |
++---------------------------------------+
+
+
    +
  • 'S': solidity +
      +
    • 0=free +
    • 1=has hard reference +
    • 2=has soft reference +
    • 3=has weak reference +
    • 4=has phantom reference +
    • 5=pending finalization +
    • 6=marked, about to be swept +
    +
  • 'K': kind +
      +
    • 0=object +
    • 1=class object +
    • 2=array of byte/boolean +
    • 3=array of char/short +
    • 4=array of Object/int/float +
    • 5=array of long/double +
    +
  • 'P': partial flag (not used for HPSG) +
  • 'U': unused, must be zero +
+ +

The use of the various 'S' types depends on when the information is +sent. The current plan is to send it either immediately after a GC, +or between the "mark" and "sweep" phases of the GC. For a fancy generational +collector, we may just want to send it up periodically. + +

The run-length byte indicates the number of allocation units minus one, so a +length of 255 means there are 256 consecutive units with this state. In +some cases, e.g. arrays of bytes, the actual size of the data is rounded +up the nearest allocation unit. +

For HPSG, the runs do not end at object boundaries. It is not possible +to tell from this bitmap whether a run contains one or several objects. +(But see HPSO, below.) +

[If we find that we have many long runs, we can overload the 'P' flag +or dedicate the 'U' flag to indicate that we have a 16-bit length instead +of 8-bit. We can also use a variable-width integer scheme for the length, +encoding 1-128 in one byte, 1-16384 in two bytes, etc.] +

[Alternate plan for 'K': array of byte, array of char, array of Object, +array of miscellaneous primitive type] +

To parse the data, the server runs through the usage data until either +(a) the end of the chunk is reached, or (b) all allocation units have been +accounted for. (If these two things don't happen at the same time, the +chunk is rejected.) +

Example: suppose a VM has a heap at 0x10000 that is 0x2000 bytes long +(with an 8-byte allocation unit size, that's 0x0400 units long). +The client could send one chunk (allocSize=8, virtAddr=0x10000, offset=0, +length=0x0400) or two (allocSize=8, virtAddr=0x10000, offset=0, length=0x300; +then allocSize=8, virtAddr=0x10000, offset=0x300, length=0x100). +

The client must encode the entire heap, including all free space at +the end, or the server will not have an accurate impression of the amount +of memory in the heap. This refers to the current heap size, not the +maximum heap size. + +

Chunk HPSO (client --> server)

+

This is essentially identical to HPSG, but the runs are terminated at +object boundaries. If an object is larger than 256 allocation units, the +"partial" flag is set in all runs except the last. +

The resulting unpacked bitmap is identical, but the object boundary +information can be used to gain insights into heap layout. +

[Do we want to have a separate message for this? Maybe just include +a "variant" flag in the HPST packet. Another possible form of output +would be one that indicates the age, in generations, of each block of +memory. That would provide a quick visual indication of "permanent vs. +transient residents", perhaps with a 16-level grey scale.] + +

Chunk NHSG (client --> server)

+

Native heap segment data. Each chunk describes all or part of a +contiguous stretch of native heap memory. The format is the same as +for HPSG, except that only solidity values 0 (= free) and 1 (= hard +reference) are used, and the kind value is always 0 for free chunks +and 7 for allocated chunks, indicating a non-VM object. +

+u4   heap ID
+u1   size of allocation unit, in bytes (e.g. 8 bytes)
+u4   virtual address of segment start
+u4   offset of this piece (relative to the virtual address)
+u4   length of piece, in allocation units
+var  usage data
+
+ +

Generic Replies

+ +The client-side chunk handlers need a common way to report simple success +or failure. By convention, an empty reply packet indicates success. + +

Chunk FAIL (client --> server, reply only)

+

The chunk includes a machine-readable error code and a +human-readable error message. Server code can associate the failure +with the original request by comparing the JDWP packet ID. +

This allows a standard way of, for example, rejecting badly-formed +request packets. +

+u4   error code
+u4   error message len (in 16-bit chars)
+var  error message (UTF-16)
+
+ +

Miscellaneous

+ +

Chunk EXIT (server --> client)

+

Cause the client to exit with the specified status, using System.exit(). +Useful for certain kinds of testing. +

+u4   exit status
+
+ +

Chunk DTRC (server --> client)

+

[TBD] start/stop dmtrace; can send the results back over the wire. For +size reasons we probably need "sending", "data", "key", "finished" as +4 separate chunks/packets rather than one glob. + + +

Client API

+ +

The API is written in the Java programming language +for convenience. The code is free to call native methods if appropriate. + +

Chunk Handler API

+ +

The basic idea is that arbitrary code can register handlers for +specific chunk types. When a DDM chunk with that type arrives, the +appropriate handler is invoked. The handler's return value provides the +response to the server. + +

There are two packages. android.ddm lives in the "framework" library, +and has all of the chunk handlers and registration code. It can freely +use Android classes. org.apache.harmony.dalvik.ddmc lives in the "core" +library, and has +some base classes and features that interact with the VM. Nothing should +need to modify the org.apache.harmony.dalvik.ddmc classes. + +

The DDM classes pass chunks of data around with a simple class: + +

+class Chunk {
+    int type;
+    byte[] data;
+    int offset, length;
+};
+
+ +

The chunk handlers accept and return them: +

+public Chunk handleChunk(Chunk request)
+
+

The code is free to parse the chunk and generate a response in any +way it chooses. Big-endian byte ordering is recommended but not mandatory. +

Chunk handlers will be notified when a DDM server connects or disconnects, +so that they can perform setup and cleanup operations: +

+public void connected()
+public void disconnected()
+
+ +

The method processes the request, formulates a response, and returns it. +If the method returns null, an empty JDWP success message will be returned. +

The request/response interaction is essentially asynchronous in the +protocol. The packets are linked together with the JDWP message ID. +

[We could use ByteBuffer here instead of byte[], but it doesn't gain +us much. Wrapping a ByteBuffer around an array is easy. We don't want +to pass the full packet in because we could have multiple chunks in one +request packet. The DDM code needs to collect and aggregate the responses +to all chunks into a single JDWP response packet. Parties wanting to +write multiple chunks in response to a single chunk should send a null +response back and use "sendChunk()" to send the data independently.] + +

Unsolicited event API

+ +

If a piece of code wants to send a chunk of data to the server at some +arbitrary time, it may do so with a method provided by +org.apache.harmony.dalvik.DdmServer: + +

+public static void sendChunk(Chunk chunk)
+
+ +

There is no response or status code. No exceptions are thrown. + + +

Server API

+ +

This is similar to the client side in many ways, but makes extensive +use of ByteBuffer in a perhaps misguided attempt to use java.nio.channels +and avoid excessive thread creation and unnecessary data copying. + +

Upon receipt of a packet, the server will identify it as one of: +

    +
  1. Message to be passed through to the debugger +
  2. Response to an earlier request +
  3. Unsolicited event packet +
+

To handle (2), when messages are sent from the server to the client, +the message must be paired with a callback method. The response might be +delayed for a while -- or might never arrive -- so the server can't block +waiting for responses from the client. +

The chunk handlers look like this: +

+public void handleChunk(Client client, int type,
+    ByteBuffer data, boolean isReply, int msgId)
+
+

The arguments are: +

+
client +
An object representing the client VM that send us the packet. +
type +
The 32-bit chunk type. +
data +
The data. The data's length can be determined by calling data.limit(). +
isReply +
Set to "true" if this was a reply to a message we sent earlier, + "false" if the client sent this unsolicited. +
msgId +
The JDWP message ID. Useful for connecting replies with requests. +
+

If a handler doesn't like the contents of a packet, it should log an +error message and return. If the handler doesn't recognize the packet at +all, it can call the superclass' handleUnknownChunk() method. + +

As with the client, the server code can be notified when clients +connect or disconnect. This allows the handler to send initialization +code immediately after a connect, or clean up after a disconnect. +

Data associated with a client can be stored in a ClientData object, +which acts as a general per-client dumping around for VM and UI state. + + +


+ +


+ +
Copyright © 2007 The Android Open Source Project
+ + + diff --git a/docs/dexopt.html b/docs/dexopt.html new file mode 100644 index 0000000..7f0b4bc --- /dev/null +++ b/docs/dexopt.html @@ -0,0 +1,326 @@ + + + Dalvik Optimization and Verification + + + +

Dalvik Optimization and Verification With dexopt

+ +

+The Dalvik virtual machine was designed specifically for the Android +mobile platform. The target systems have little RAM, store data on slow +internal flash memory, and generally have the performance characteristics +of decade-old desktop systems. They also run Linux, which provides +virtual memory, processes and threads, and UID-based security mechanisms. +

+The features and limitations caused us to focus on certain goals: + +

    +
  • Class data, notably bytecode, must be shared between multiple + processes to minimize total system memory usage. +
  • The overhead in launching a new app must be minimized to keep + the device responsive. +
  • Storing class data in individual files results in a lot of + redundancy, especially with respect to strings. To conserve disk + space we need to factor this out. +
  • Parsing class data fields adds unnecessary overhead during + class loading. Accessing data values (e.g. integers and strings) + directly as C types is better. +
  • Bytecode verification is necessary, but slow, so we want to verify + as much as possible outside app execution. +
  • Bytecode optimization (quickened instructions, method pruning) is + important for speed and battery life. +
  • For security reasons, processes may not edit shared code. +
+ +

+The typical VM implementation uncompresses individual classes from a +compressed archive and stores them on the heap. This implies a separate +copy of each class in every process, and slows application startup because +the code must be uncompressed (or at least read off disk in many small +pieces). On the other hand, having the bytecode on the local heap makes +it easy to rewrite instructions on first use, facilitating a number of +different optimizations. +

+The goals led us to make some fundamental decisions: + +

    +
  • Multiple classes are aggregated into a single "DEX" file. +
  • DEX files are mapped read-only and shared between processes. +
  • Byte ordering and word alignment are adjusted to suit the local + system. +
  • Bytecode verification is mandatory for all classes, but we want + to "pre-verify" whatever we can. +
  • Optimizations that require rewriting bytecode must be done ahead + of time. +
+ +

+The consequences of these decisions are explained in the following sections. + + +

VM Operation

+ +

+Application code is delivered to the system in a .jar +or .apk file. These are really just .zip +archives with some meta-data files added. The Dalvik DEX data file +is always called classes.dex. +

+The bytecode cannot be memory-mapped and executed directly from the zip +file, because the data is compressed and the start of the file is not +guaranteed to be word-aligned. These problems could be addressed by +storing classes.dex without compression and padding out the zip +file, but that would increase the size of the package sent across the +data network. +

+We need to extract classes.dex from the zip archive before +we can use it. While we have the file available, we might as well perform +some of the other actions (realignment, optimization, verification) described +earlier. This raises a new question however: who is responsible for doing +this, and where do we keep the output? + +

Preparation

+ +

+There are at least three different ways to create a "prepared" DEX file, +sometimes known as "ODEX" (for Optimized DEX): +

    +
  1. The VM does it "just in time". The output goes into a special + dalvik-cache directory. This works on the desktop and + engineering-only device builds where the permissions on the + dalvik-cache directory are not restricted. On production + devices, this is not allowed. +
  2. The system installer does it when an application is first added. + It has the privileges required to write to dalvik-cache. +
  3. The build system does it ahead of time. The relevant jar + / apk files are present, but the classes.dex + is stripped out. The optimized DEX is stored next to the original + zip archive, not in dalvik-cache, and is part of the + system image. +
+

+The dalvik-cache directory is more accurately +$ANDROID_DATA/data/dalvik-cache. The files inside it have +names derived from the full path of the source DEX. On the device the +directory is owned by system / system +and has 0771 permissions, and the optimized DEX files stored there are +owned by system and the +application's group, with 0644 permissions. DRM-locked applications will +use 640 permissions to prevent other user applications from examining them. +The bottom line is that you can read your own DEX file and those of most +other applications, but you cannot create, modify, or remove them. +

+Preparation of the DEX file for the "just in time" and "system installer" +approaches proceeds in three steps: +

+First, the dalvik-cache file is created. This must be done in a process +with appropriate privileges, so for the "system installer" case this is +done within installd, which runs as root. +

+Second, the classes.dex entry is extracted from the the zip +archive. A small amount of space is left at the start of the file for +the ODEX header. +

+Third, the file is memory-mapped for easy access and tweaked for use on +the current system. This includes byte-swapping and structure realigning, +but no meaningful changes to the DEX file. We also do some basic +structure checks, such as ensuring that file offsets and data indices +fall within valid ranges. +

+The build system uses a hairy process that involves starting the +emulator, forcing just-in-time optimization of all relevant DEX files, +and then extracting the results from dalvik-cache. The +reasons for doing this, rather than using a tool that runs on the desktop, +will become more apparent when the optimizations are explained. +

+Once the code is byte-swapped and aligned, we're ready to go. We append +some pre-computed data, fill in the ODEX header at the start of the file, +and start executing. (The header is filled in last, so that we don't +try to use a partial file.) If we're interested in verification and +optimization, however, we need to insert a step after the initial prep. + +

dexopt

+ +

+We want to verify and optimize all of the classes in the DEX file. The +easiest and safest way to do this is to load all of the classes into +the VM and run through them. Anything that fails to load is simply not +verified or optimized. Unfortunately, this can cause allocation of some +resources that are difficult to release (e.g. loading of native shared +libraries), so we don't want to do it in the same virtual machine that +we're running applications in. +

+The solution is to invoke a program called dexopt, which +is really just a back door into the VM. It performs an abbreviated VM +initialization, loads zero or more DEX files from the bootstrap class +path, and then sets about verifying and optimizing whatever it can from +the target DEX. On completion, the process exits, freeing all resources. +

+It is possible for multiple VMs to want the same DEX file at the same +time. File locking is used to ensure that dexopt is only run once. + + +

Verification

+ +

+The bytecode verification process involves scanning through the instructions +in every method in every class in a DEX file. The goal is to identify +illegal instruction sequences so that we don't have to check for them at +run time. Many of the computations involved are also necessary for "exact" +garbage collection. See +Dalvik Bytecode Verifier Notes for more +information. +

+For performance reasons, the optimizer (described in the next section) +assumes that the verifier has run successfully, and makes some potentially +unsafe assumptions. By default, Dalvik insists upon verifying all classes, +and only optimizes classes that have been verified. If you want to +disable the verifier, you can use command-line flags to do so. See also + Controlling the Embedded VM +for instructions on controlling these +features within the Android application framework. +

+Reporting of verification failures is a tricky issue. For example, +calling a package-scope method on a class in a different package is +illegal and will be caught by the verifier. We don't necessarily want +to report it during verification though -- we actually want to throw +an exception when the method call is attempted. Checking the access +flags on every method call is expensive though. The +Dalvik Bytecode Verifier Notes document +addresses this issue. +

+Classes that have been verified successfully have a flag set in the ODEX. +They will not be re-verified when loaded. The Linux access permissions +are expected to prevent tampering; if you can get around those, installing +faulty bytecode is far from the easiest line of attack. The ODEX file has +a 32-bit checksum, but that's chiefly present as a quick check for +corrupted data. + + +

Optimization

+ +

+Virtual machine interpreters typically perform certain optimizations the +first time a piece of code is used. Constant pool references are replaced +with pointers to internal data structures, operations that always succeed +or always work a certain way are replaced with simpler forms. Some of +these require information only available at runtime, others can be inferred +statically when certain assumptions are made. +

+The Dalvik optimizer does the following: +

    +
  • For virtual method calls, replace the method index with a + vtable index. +
  • For instance field get/put, replace the field index with + a byte offset. Also, merge the boolean / byte / char / short + variants into a single 32-bit form (less code in the interpreter + means more room in the CPU I-cache). +
  • Replace a handful of high-volume calls, like String.length(), + with "inline" replacements. This skips the usual method call + overhead, directly switching from the interpreter to a native + implementation. +
  • Prune empty methods. The simplest example is + Object.<init>, which does nothing, but must be + called whenever any object is allocated. The instruction is + replaced with a new version that acts as a no-op unless a debugger + is attached. +
  • Append pre-computed data. For example, the VM wants to have a + hash table for lookups on class name. Instead of computing this + when the DEX file is loaded, we can compute it now, saving heap + space and computation time in every VM where the DEX is loaded. +
+ +

+All of the instruction modifications involve replacing the opcode with +one not defined by the Dalvik specification. This allows us to freely +mix optimized and unoptimized instructions. The set of optimized +instructions, and their exact representation, is tied closely to the VM +version. +

+Most of the optimizations are obvious "wins". The use of raw indices +and offsets not only allows us to execute more quickly, we can also +skip the initial symbolic resolution. Pre-computation eats up +disk space, and so must be done in moderation. +

+There are a couple of potential sources of trouble with these +optimizations. First, vtable indices and byte offsets are subject to +change if the VM is updated. Second, if a superclass is in a different +DEX, and that other DEX is updated, we need to ensure that our optimized +indices and offsets are updated as well. A similar but more subtle +problem emerges when user-defined class loaders are employed: the class +we actually call may not be the one we expected to call. +

These problems are addressed with dependency lists and some limitations +on what can be optimized. + + +

Dependencies and Limitations

+ +

+The optimized DEX file includes a list of dependencies on other DEX files, +plus the CRC-32 and modification date from the originating +classes.dex zip file entry. The dependency list includes the +full path to the dalvik-cache file, and the file's SHA-1 +signature. The timestamps of files on the device are unreliable and +not used. The dependency area also includes the VM version number. +

+An optimized DEX is dependent upon all of the DEX files in the bootstrap +class path. DEX files that are part of the bootstrap class path depend +upon the DEX files that appeared earlier. To ensure that nothing outside +the dependent DEX files is available, dexopt only loads the +bootstrap classes. References to classes in other DEX files fail, which +causes class loading and/or verification to fail, and classes with +external dependencies are simply not optimized. +

+This means that splitting code out into many separate DEX files has a +disadvantage: virtual method calls and instance field lookups between +non-boot DEX files can't be optimized. Because verification is pass/fail +with class granularity, no method in a class that has any reliance on +classes in external DEX files can be optimized. This may be a bit +heavy-handed, but it's the only way to guarantee that nothing breaks +when individual pieces are updated. +

+Another negative consequence: any change to a bootstrap DEX will result +in rejection of all optimized DEX files. This makes it hard to keep +system updates small. +

+Despite our caution, there is still a possibility that a class in a DEX +file loaded by a user-defined class loader could ask for a bootstrap class +(say, String) and be given a different class with the same name. If a +class in the DEX file being processed has the same name as a class in the +bootstrap DEX files, the class will be flagged as ambiguous and references +to it will not be resolved during verification / optimization. The class +linking code in the VM does additional checks to plug another hole; +see the verbose description in the VM sources for details (vm/oo/Class.c). +

+If one of the dependencies is updated, we need to re-verify and +re-optimize the DEX file. If we can do a just-in-time dexopt +invocation, this is easy. If we have to rely on the installer daemon, or +the DEX was shipped only in ODEX, then the VM has to reject the DEX. +

+The output of dexopt is byte-swapped and struct-aligned +for the host, and contains indices and offsets that are highly VM-specific +(both version-wise and platform-wise). For this reason it's tricky to +write a version of dexopt that runs on the desktop but +generates output suitable for a particular device. The safest way to +invoke it is on the target device, or on an emulator for that device. + + +

Generated DEX

+ +

+Some languages and frameworks rely on the ability to generate bytecode +and execute it. The rather heavy dexopt verification and +optimization model doesn't work well with that. +

+We intend to support this in a future release, but the exact method is +to be determined. We may allow individual classes to be added or whole +DEX files; may allow Java bytecode or Dalvik bytecode in instructions; +may perform the usual set of optimizations, or use a separate interpreter +that performs on-first-use optimizations directly on the bytecode (which +won't be mapped read-only, since it's locally defined). + +

Copyright © 2008 The Android Open Source Project
+ + + diff --git a/docs/embedded-vm-control.html b/docs/embedded-vm-control.html new file mode 100644 index 0000000..5c444de --- /dev/null +++ b/docs/embedded-vm-control.html @@ -0,0 +1,271 @@ + + + Controlling the Embedded VM + + + + +

Controlling the Embedded VM

+ + + +

Introduction (read this first!)

+ +

The Dalvik VM supports a variety of command-line arguments +(use adb shell dalvikvm -help to get a summary), but +it's not possible to pass arbitrary arguments through the +Android application runtime. It is, however, possible to affect the +VM behavior through certain system properties. + +

For all of the features described below, you would set the system property +with setprop, +issuing a shell command on the device like this: +

adb shell setprop <name> <value>
+ +

The Android runtime must be restarted before the changes will take +effect (adb shell stop; adb shell start). This is because the +settings are processed in the "zygote" process, which starts early and stays +around "forever". + +

You may not be able to set dalvik.* properties or restart +the system as an unprivileged user. You can use +adb root or run the su command from the device +shell on "userdebug" builds to become root first. When in doubt, +

adb shell getprop <name>
+will tell you if the setprop took. + +

If you don't want the property to evaporate when the device reboots, +add a line to /data/local.prop that looks like: +

<name> = <value>
+ +

Such changes will survive reboots, but will be lost if the data +partition is wiped. (Hint: create a local.prop +on your workstation, then adb push local.prop /data. Or, +use one-liners like +adb shell "echo name = value >> /data/local.prop" -- note +the quotes are important.) + + +

Extended JNI Checks

+ +

JNI, the Java Native Interface, provides a way for code written in the +Java programming language +interact with native (C/C++) code. The extended JNI checks will cause +the system to run more slowly, but they can spot a variety of nasty bugs +before they have a chance to cause problems. + +

There are two system properties that affect this feature, which is +enabled with the -Xcheck:jni command-line argument. The +first is ro.kernel.android.checkjni. This is set by the +Android build system for development builds. (It may also be set by +the Android emulator unless the -nojni flag is provided on the +emulator command line.) Because this is an "ro." property, the value cannot +be changed once the device has started. + +

To allow toggling of the CheckJNI flag, a second +property, dalvik.vm.checkjni, is also checked. The value +of this overrides the value from ro.kernel.android.checkjni. + +

If neither property is defined, or dalvik.vm.checkjni +is set to false, the -Xcheck:jni flag is +not passed in, and JNI checks will be disabled. + +

To enable JNI checking: +

adb shell setprop dalvik.vm.checkjni true
+ +

You can also pass JNI-checking options into the VM through a system +property. The value set for dalvik.vm.jniopts will +be passed in as the -Xjniopts argument. For example: +

adb shell setprop dalvik.vm.jniopts forcecopy
+ + +

Assertions

+ +

Dalvik VM supports the Java programming language "assert" statement. +By default they are off, but the dalvik.vm.enableassertions +property provides a way to set the value for a -ea argument. + +

The argument behaves the same as it does in other desktop VMs. You +can provide a class name, a package name (followed by "..."), or the +special value "all". + +

For example, this: +

adb shell setprop dalvik.vm.enableassertions all
+enables assertions in all non-system classes. + +

The system property is much more limited than the full command line. +It is not possible to specify more than one -ea entry, and there +is no way to specify a -da entry. There is presently no +equivalent for -esa/-dsa. + + +

Bytecode Verification and Optimization

+ +

The system tries to pre-verify all classes in a DEX file to reduce +class load overhead, and performs a series of optimizations to improve +runtime performance. Both of these are done by the dexopt +command, either in the build system or by the installer. On a development +device, dexopt may be run the first time a DEX file is used +and whenever it or one of its dependencies is updated ("just-in-time" +optimization and verification). + +

There are two command-line flags that control the just-in-time +verification and optimization, +-Xverify and -Xdexopt. The Android framework +configures these based on the dalvik.vm.dexopt-flags +property. + +

If you set: +

adb shell setprop dalvik.vm.dexopt-flags v=a,o=v
+then the framework will pass -Xverify:all -Xdexopt:verified +to the VM. This enables verification, and only optimizes classes that +successfully verified. This is the safest setting, and is the default. +

You could also set dalvik.vm.dexopt-flags to v=n +to have the framework pass -Xverify:none -Xdexopt:verified +to disable verification. (We could pass in -Xdexopt:all to +allow optimization, but that wouldn't necessarily optimize more of the +code, since classes that fail verification may well be skipped by the +optimizer for the same reasons.) Classes will not be verified by +dexopt, and unverified code will be loaded and executed. + +

Enabling verification will make the dexopt command +take significantly longer, because the verification process is fairly slow. +Once the verified and optimized DEX files have been prepared, verification +incurs no additional overhead except when loading classes that failed +to pre-verify. + +

If your DEX files are processed with verification disabled, and you +later turn the verifier on, application loading will be noticeably +slower (perhaps 40% or more) as classes are verified on first use. + +

For best results you should force a re-dexopt of all DEX files when +this property changes. You can do this with: +

adb shell "rm /data/dalvik-cache/*"
+This removes the cached versions of the DEX files. Remember to +stop and restart the runtime (adb shell stop; adb shell start). + +

(Previous version of the runtime supported the boolean +dalvik.vm.verify-bytecode property, but that has been +superceded by dalvik.vm.dexopt-flags.)

+ + +

Execution Mode

+ +

The current implementation of the Dalvik VM includes three distinct +interpreter cores. These are referred to as "fast", "portable", and +"debug". The "fast" interpreter is optimized for the current +platform, and might consist of hand-optimized assembly routines. In +constrast, the "portable" interpreter is written in C and expected to +run on a broad range of platforms. The "debug" interpreter is a variant +of "portable" that includes support for profiling and single-stepping. + +

The VM may also support just-in-time compilation. While not strictly +a different interpreter, the JIT compiler may be enabled or disabled +with the same flag. (Check the output of dalvikvm -help to +see if JIT compilation is enabled in your VM.) + +

The VM allows you to choose between "fast", "portable", and "jit" with an +extended form of the -Xint argument. The value of this +argument can be set through the dalvik.vm.execution-mode +system property. + +

To select the "portable" interpreter, you would use: +

adb shell setprop dalvik.vm.execution-mode int:portable
+If the property is not specified, the most appropriate interpreter +will be selected automatically. At some point this mechanism may allow +selection of other modes, such as JIT compilation. + +

Not all platforms have an optimized implementation. In such cases, +the "fast" interpreter is generated as a series of C stubs, and the +result will be slower than the +"portable" version. (When we have optimized versions for all popular +architectures the naming convention will be more accurate.) + +

If profiling is enabled or a debugger is attached, the VM +switches to the "debug" interpreter. When profiling ends or the debugger +disconnects, the original interpreter is resumed. (The "debug" interpreter +is substantially slower, something to keep in mind when evaluating +profiling data.) + +

The JIT compiler can be disabled on a per-application basis by adding +android:vmSafeMode="true" in the application +tag in AndroidManifest.xml. This can be useful if you +suspect that JIT compilation is causing your application to behave +incorrectly. + + +

Stack Dumps

+ +

Like other desktop VMs, when the Dalvik VM receives a SIGQUIT +(Ctrl-\ or kill -3), it dumps stack traces for all threads. +By default this goes to the Android log, but it can also be written to a file. + +

The dalvik.vm.stack-trace-file property allows you to +specify the name of the file where the thread stack traces will be written. +The file will be created (world writable) if it doesn't exist, and the +new information will be appended to the end of the file. The filename +is passed into the VM via the -Xstacktracefile argument. + +

For example: +

adb shell setprop dalvik.vm.stack-trace-file /tmp/stack-traces.txt
+ +

If the property is not defined, the VM will write the stack traces to +the Android log when the signal arrives. + + +

DEX File Checksums

+ +

For performance reasons, the checksum on "optimized" DEX files is +ignored. This is usually safe, because the files are generated on the +device, and have access permissions that prevent modification. + +

If the storage on a device becomes unreliable, however, data corruption +can occur. This usually manifests itself as a repeatable virtual machine +crash. To speed diagnosis of such failures, the VM provides the +-Xcheckdexsum argument. When set, the checksums on all DEX +files are verified before the contents are used. + +

The application framework will provide this argument during VM +creation if the dalvik.vm.check-dex-sum property is enabled. + +

To enable extended DEX checksum verification: +

adb shell setprop dalvik.vm.check-dex-sum true
+ +

Incorrect checksums will prevent the DEX data from being used, and will +cause errors to be written to the log file. If a device has a history of +problems it may be useful to add the property to +/data/local.prop. + +

Note also that the +dexdump tool always verifies DEX checksums, and can be used +to check for corruption in a large set of files. + + +

General Flags

+ +

In the "Gingerbread" release, a general mechanism for passing flags to +the VM was introduced: + +

adb shell setprop dalvik.vm.extra-opts "flag1 flag2 ... flagN"
+ +

The flags are separated by spaces. You can specify as many as you want +so long as they all fit within the system property value length limit +(currently 92 characters). + +

The extra-opts flags will be added at the end of the command line, +which means they will override earlier settings. This can be used, for +example, to experiment with different values for -Xmx even +though the Android framework is setting it explicitly. + +

Copyright © 2008 The Android Open Source Project
+ + diff --git a/docs/heap-profiling.html b/docs/heap-profiling.html new file mode 100644 index 0000000..3707377 --- /dev/null +++ b/docs/heap-profiling.html @@ -0,0 +1,215 @@ + + + Dalvik Heap Profiling + + + +

Dalvik Heap Profiling

+ +

+The Dalvik virtual machine can produce a complete dump of the contents +of the virtual heap. This is very useful for debugging memory usage +and looking for memory leaks. Getting at the information can be tricky, +but has become easier in recent releases. +

+In what follows, the version number refers to the software release +running on the phone. To take advantage of the DDMS integration, you will +also need a sufficiently recent version of DDMS. + + +

Getting the data

+

+The first step is to cause the VM to dump its status, and then pull the hprof +data off. The exact manner for doing so has changed over time. +

+There is a runhat shell function, added by +build/envsetup.sh, that partially automates these steps. The +function changes in each release to accommodate newer behavior, so you have +to be careful that you don't use the wrong version. +

+ +

Early releases (1.0/1.1)

+

+You can only generate heap data on the emulator or a device with root +access, because of the way the dump is initiated and where the output +files go. +

+Get a command shell on the device: +

+$ adb shell
+
+

+You can verify that you're running as root with the id command. +The response should look like uid=0(root) gid=0(root). If not, +type su and try again. If su fails, you're out +of luck. + +

+Next, ensure the target directory exists: +

+# mkdir /data/misc
+# chmod 777 /data/misc
+
+ +

+Use ps or DDMS to determine the process ID of your application, +then send a SIGUSR1 to the target process: + +

+# kill -10 <pid>
+
+ +

+The signal causes a GC, followed by the heap dump (to be completely +accurate, they actually happen concurrently, but the results in the heap +dump reflect the post-GC state). This can take a couple of seconds, +so you have to watch for the GC log message to know when it's complete. +

+Next: + +

+# ls /data/misc/heap-dump*
+# exit
+
+ +

+Use ls to check the file names, then exit to quit +the device command shell. + +

+You should see two output files, named +/data/misc/heap-dump-BLAH-BLAH.hprof and +.hprof-head, where BLAH is a runtime-generated value +that ensures the filename is unique. Pull them off of the device and +remove the device-side copy: + +

+$ adb pull /data/misc/heap-dump-BLAH-BLAH.hprof tail.hprof
+$ adb pull /data/misc/heap-dump-BLAH-BLAH.hprof-head head.hprof
+$ adb shell rm /data/misc/heap-dump-BLAH-BLAH.hprof /data/misc/heap-dump-BLAH-BLAH.hprof-head
+
+ +

+Merge them together and remove the intermediates: + +

+$ cat head.hprof tail.hprof > dump.hprof
+$ rm head.hprof tail.hprof
+
+ +

+You now have the hprof dump in dump.hprof. +

+ + +

Android 1.5 ("Cupcake")

+

+Some steps were taken to make this simpler. Notably, the two output +files are now combined for you, and a new API call was added that allows +a program to write the dump at will to a specific file. If you're not +using the API call, you still need to be on an emulator or running as root. +(For some builds, you can use adb root to restart the adb +daemon as root.) +

+The basic procedure is the same as for 1.0/1.1, but only one file will +appear in /data/misc (no -head), and upon +completion you will see a log message that says "hprof: heap dump completed". +It looks like this in the log: + +

+I/dalvikvm(  289): threadid=7: reacting to signal 10
+I/dalvikvm(  289): SIGUSR1 forcing GC and HPROF dump
+I/dalvikvm(  289): hprof: dumping VM heap to "/data/misc/heap-dump-tm1240861355-pid289.hprof-hptemp".
+I/dalvikvm(  289): hprof: dumping heap strings to "/data/misc/heap-dump-tm1240861355-pid289.hprof".
+I/dalvikvm(  289): hprof: heap dump completed, temp file removed
+
+ +

+Summary: as above, use mkdir and chmod +to ensure the directory exists and is writable by your application. +Send the SIGUSR1 or use the API call to initiate a dump. +Use adb pull <dump-file> and adb shell rm +<dump-file> to retrieve the file and remove it from the +device. The concatenation step is not needed. + +

+The new API is in the android.os.Debug class: +

+public static void dumpHprofData(String fileName) throws IOException
+
+When called, the VM will go through the same series of steps (GC and +generate a .hprof file), but the output will be written to a file of +your choice, e.g. /sdcard/myapp.hprof. Because you're +initiating the action from within the app, and can write the file to +removable storage or the app's private data area, you can do this on a +device without root access. + + +

Android 1.6 ("Donut")

+

+No real change to the way profiling works. +However, 1.6 introduced the WRITE_EXTERNAL_STORAGE +permission, which is required to write data to the SD card. If you're +accustomed to writing profile data to /sdcard, you will +need to enable the permission in your application's manifest. +

+ + +

Android 2.0 ("Eclair")

+

+In 2.0, features were added that allow DDMS to request a heap dump on +demand, and automatically pull the result across. Select your application +and click the "dump HPROF file" button in the top left. This always +writes files to the SD card, so +you must have a card inserted and the permission enabled in your application. +

+ + +

Android 2.2 ("Froyo")

+

+DDMS heap dump requests are now streamed directly out of the VM, removing +the external storage requirement. +

+ +

Android 2.3 ("Gingerbread")

+

+The kill -10 (SIGUSR1) method of generating heap +dumps has been removed from the VM. +

+ +

Android 3.0 ("Honeycomb")

+

+A new command-line tool has been added: +

+
am dumpheap <pid> <output-file-name>
+

+Unlike the SIGUSR1 approach, this does not require a rooted +phone. It's only necessary for the application to be debuggable (by setting +android:debuggable="true" in the <application> +element of the app manifest). The output file is opened by "am", which +means you can write the data to a file on /sdcard without +needing the WRITE_EXTERNAL_STORAGE permission in your app. +

+The runhat shell function has been updated to use this. +

+ +

Examining the data

+

+The data file format was augmented slightly from the common hprof format, +and due to licensing restrictions the modified hat tool cannot +be distributed. A conversion tool, hprof-conv, can be used +to strip the Android-specific portions from the output. This tool was +first included in 1.5, but will work with older versions of Android. +

+The converted output should work with any hprof data analyzer, including +jhat, which is available for free in the Sun JDK, and +Eclipse MAT. + + + +

+

Copyright © 2009 The Android Open Source Project
+ + + diff --git a/docs/hello-world.html b/docs/hello-world.html new file mode 100644 index 0000000..d988e2f --- /dev/null +++ b/docs/hello-world.html @@ -0,0 +1,95 @@ + + + Basic Dalvik VM Invocation + + + +

Basic Dalvik VM Invocation

+ +

+On an Android device, the Dalvik virtual machine usually executes embedded +in the Android application framework. It's also possible to run it directly, +just as you would a virtual machine on your desktop system. +

+After compiling your Java language sources, convert and combine the .class +files into a DEX file, and push that to the device. Here's a simple example: + +

+% echo 'class Foo {'\
+> 'public static void main(String[] args) {'\
+> 'System.out.println("Hello, world"); }}' > Foo.java
+% javac Foo.java
+% dx --dex --output=foo.jar Foo.class
+% adb push foo.jar /sdcard
+% adb shell dalvikvm -cp /sdcard/foo.jar Foo
+Hello, world +
+

+The -cp option sets the classpath. The initial directory +for adb shell may not be what you expect it to be, so it's +usually best to specify absolute pathnames. + +

+The dx command accepts lists of individual class files, +directories, or Jar archives. When the --output filename +ends with .jar, .zip, or .apk, +a file called classes.dex is created and stored inside the +archive. +

+Run adb shell dalvikvm -help to see a list of command-line +options. +

+ + + +

Using a debugger

+ +

+You can debug stand-alone applications with any JDWP-compliant debugger. +There are two basic approaches. +

+The first way is to connect directly through TCP. Add, to the "dalvikvm" +invocation line above, an argument like: +

+  -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y +

+This tells the VM to wait for a debugger to connect to it on TCP port 8000. +You need to tell adb to forward local port 8000 to device port 8000: +

+% adb forward tcp:8000 tcp:8000 +

+and then connect to it with your favorite debugger (using jdb +as an example here): +

+% jdb -attach localhost:8000 +

+When the debugger attaches, the VM will be in a suspended state. You can +set breakpoints and then tell it to continue. + + +

+You can also connect through DDMS, like you would for an Android application. +Add, to the "dalvikvm" command line: +

+  -agentlib:jdwp=transport=dt_android_adb,suspend=y,server=y +

+Note the transport has changed, and you no longer need to +specify a TCP port number. When your application starts, it will appear +in DDMS, with "?" as the application name. Select it in DDMS, and connect +to it as usual, e.g.: +

+% jdb -attach localhost:8700 +

+Because command-line applications don't include the client-side +DDM setup, features like thread monitoring and allocation tracking will not +be available in DDMS. It's strictly a debugger pass-through in this mode. +

+See Dalvik Debugger Support for more information +about using debuggers with Dalvik. + + +

+
Copyright © 2009 The Android Open Source Project
+ + + diff --git a/docs/java-bytecode.css b/docs/java-bytecode.css new file mode 100644 index 0000000..48984b2 --- /dev/null +++ b/docs/java-bytecode.css @@ -0,0 +1,54 @@ +@media print { + table { + font-size: 8pt; + } +} + +@media screen { + table { + font-size: 10pt; + } +} + +h1 { + text-align: center; +} + +table { + vertical-align: top; + border-collapse: collapse; + font-family: sans-serif; +} + +td { + vertical-align: top; + background: #f8f8f8; + border-width: 0; +} + +td.outer { + width: 25%; + padding: 0; +} + +td.outer table { + width: 100%; +} + +td.outer td { + border-width: 0; + background: #f8f8f8; + padding: 1pt; + padding-left: 10pt; + padding-right: 2pt; +} + +tr.d td { + background: #dddddd; +} + +td.outer td + td + td { + font-family: monospace; + font-weight: bold; + padding-right: 5pt; +} \ No newline at end of file diff --git a/docs/java-bytecode.html b/docs/java-bytecode.html new file mode 100644 index 0000000..691ae54 --- /dev/null +++ b/docs/java-bytecode.html @@ -0,0 +1,228 @@ + + + + + +Java Bytecode At A Glance + + + + + +

Java Bytecode At A Glance

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
0x000nop
0x011aconst_null
0x022iconst_m1
0x033iconst_0
0x044iconst_1
0x055iconst_2
0x066iconst_3
0x077iconst_4
0x088iconst_5
0x099lconst_0
0x0a10lconst_1
0x0b11fconst_0
0x0c12fconst_1
0x0d13fconst_2
0x0e14dconst_0
0x0f15dconst_1
0x1016bipush
0x1117sipush
0x1218ldc
0x1319ldc_w
0x1420ldc2_w
0x1521iload
0x1622lload
0x1723fload
0x1824dload
0x1925aload
0x1a26iload_0
0x1b27iload_1
0x1c28iload_2
0x1d29iload_3
0x1e30lload_0
0x1f31lload_1
0x2032lload_2
0x2133lload_3
0x2234fload_0
0x2335fload_1
0x2436fload_2
0x2537fload_3
0x2638dload_0
0x2739dload_1
0x2840dload_2
0x2941dload_3
0x2a42aload_0
0x2b43aload_1
0x2c44aload_2
0x2d45aload_3
0x2e46iaload
0x2f47laload
0x3048faload
0x3149daload
0x3250aaload
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
0x3351baload
0x3452caload
0x3553saload
0x3654istore
0x3755lstore
0x3856fstore
0x3957dstore
0x3a58astore
0x3b59istore_0
0x3c60istore_1
0x3d61istore_2
0x3e62istore_3
0x3f63lstore_0
0x4064lstore_1
0x4165lstore_2
0x4266lstore_3
0x4367fstore_0
0x4468fstore_1
0x4569fstore_2
0x4670fstore_3
0x4771dstore_0
0x4872dstore_1
0x4973dstore_2
0x4a74dstore_3
0x4b75astore_0
0x4c76astore_1
0x4d77astore_2
0x4e78astore_3
0x4f79iastore
0x5080lastore
0x5181fastore
0x5282dastore
0x5383aastore
0x5484bastore
0x5585castore
0x5686sastore
0x5787pop
0x5888pop2
0x5989dup
0x5a90dup_x1
0x5b91dup_x2
0x5c92dup2
0x5d93dup2_x1
0x5e94dup2_x2
0x5f95swap
0x6096iadd
0x6197ladd
0x6298fadd
0x6399dadd
0x64100isub
0x65101lsub
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
0x66102fsub
0x67103dsub
0x68104imul
0x69105lmul
0x6a106fmul
0x6b107dmul
0x6c108idiv
0x6d109ldiv
0x6e110fdiv
0x6f111ddiv
0x70112irem
0x71113lrem
0x72114frem
0x73115drem
0x74116ineg
0x75117lneg
0x76118fneg
0x77119dneg
0x78120ishl
0x79121lshl
0x7a122ishr
0x7b123lshr
0x7c124iushr
0x7d125lushr
0x7e126iand
0x7f127land
0x80128ior
0x81129lor
0x82130ixor
0x83131lxor
0x84132iinc
0x85133i2l
0x86134i2f
0x87135i2d
0x88136l2i
0x89137l2f
0x8a138l2d
0x8b139f2i
0x8c140f2l
0x8d141f2d
0x8e142d2i
0x8f143d2l
0x90144d2f
0x91145i2b
0x92146i2c
0x93147i2s
0x94148lcmp
0x95149fcmpl
0x96150fcmpg
0x97151dcmpl
0x98152dcmpg
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
0x99153ifeq
0x9a154ifne
0x9b155iflt
0x9c156ifge
0x9d157ifgt
0x9e158ifle
0x9f159if_icmpeq
0xa0160if_icmpne
0xa1161if_icmplt
0xa2162if_icmpge
0xa3163if_icmpgt
0xa4164if_icmple
0xa5165if_acmpeq
0xa6166if_acmpne
0xa7167goto
0xa8168jsr
0xa9169ret
0xaa170tableswitch
0xab171lookupswitch
0xac172ireturn
0xad173lreturn
0xae174freturn
0xaf175dreturn
0xb0176areturn
0xb1177return
0xb2178getstatic
0xb3179putstatic
0xb4180getfield
0xb5181putfield
0xb6182invokevirtual
0xb7183invokespecial
0xb8184invokestatic
0xb9185invokeinterface
0xba186(unused)
0xbb187new
0xbc188newarray
0xbd189anewarray
0xbe190arraylength
0xbf191athrow
0xc0192checkcast
0xc1193instanceof
0xc2194monitorenter
0xc3195monitorexit
0xc4196wide
0xc5197multianewarray
0xc6198ifnull
0xc7199ifnonnull
0xc8200goto_w
0xc9201jsr_w
+ + + diff --git a/docs/java-constraints.css b/docs/java-constraints.css new file mode 100644 index 0000000..a315a73 --- /dev/null +++ b/docs/java-constraints.css @@ -0,0 +1,59 @@ +h1 { + font-family: serif; + color: #222266; +} + +h2 { + font-family: serif; + border-top-style: solid; + border-top-width: 2px; + border-color: #ccccdd; + padding-top: 12px; + margin-top: 48px; + margin-bottom: 2px; + color: #222266; +} + +@media print { + table { + font-size: 8pt; + } +} + +@media screen { + table { + font-size: 10pt; + } +} + + +/* general for all tables */ + +table { + border-collapse: collapse; + margin-top: 24px; + margin-bottom: 24px; + margin-left: 48px; + margin-right: 48px; +} + +table th { + font-family: sans-serif; + background: #aabbff; + text-align: left; +} + +table td { + font-family: sans-serif; + border-top-style: solid; + border-bottom-style: solid; + border-width: 1px; + border-color: #aaaaff; + padding-top: 4px; + padding-bottom: 4px; + padding-left: 4px; + padding-right: 6px; + background: #eeeeff; + margin-top: 4pt; + margin-bottom: 0pt; +} diff --git a/docs/java-constraints.html b/docs/java-constraints.html new file mode 100644 index 0000000..9d3c434 --- /dev/null +++ b/docs/java-constraints.html @@ -0,0 +1,1080 @@ + + + + + Java bytecode constraints + + + + +

+ Bytecode constraints +

+ +

+ From the point of view of a piece of code written in the Java + programming language or targeted in the same way to .class + files, the Dalvik VM aims to behave in a way + that is fully consistent with the language's definition. + That is, the code running in Dalvik will behave the same as it + would have running in any other virtual machine. This includes + verification failures. + The Dx/Dalvik system will check roughly the same + constraints that any other VM would, except as noted in the file + verifier.html. The following table briefly + lists all Dx/Dalvik verification constraints together their analogs + from the book The JavaTM Language Specification, + second edition. In the numbering scheme, the first three + elements refer to the specification chapter, the fourth one to the + bullet inside that chapter. The failure mode specifies whether the + constraint will fail during the Dx conversion or during verification in + the VM itself. +

+ +

+ Static constraints +

+ +

+ Static constraints are constraints on individual elements of the bytecode. + They usually can be checked without employing control or data-flow analysis + techniques. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Identifier + + Description + + Spec equivalent + + Failure mode +
+ A1 + + The code array must not be empty. + + 4.8.1.1 + + DX +
+ A2 + + The code array must not be larger than 65535 bytes. + + 4.8.1.2 + + DX +
+ A3 + + The first opcode in code array must have index + 0. + + 4.8.1.3 + + DX +
+ A4 + + The code array must only contain valid opcodes. + + 4.8.1.4 + + DX +
+ A5 + + The index of instruction n+1 must equal the index of + instruction n plus the length of instruction + n, taking into account a possible wide + instruction. Opcodes modified by a wide instruction must + not be directly reachable. + + 4.8.1.5 + + DX +
+ A6 + + The last instruction in code array must end at index + code_length-1. + + 4.8.1.6 + + DX +
+ A7 + + All jump and branch targets must be opcodes within the same method. + Opcodes modified by a wide instruction must not be + directly reachable via a jump or branch instruction. + + 4.8.1.7 + + DX +
+ A8 + + All targets of a tableswitch instruction must be opcodes + within the same method. Upper and lower bounds must be consistent. + Opcodes modified by a wide instruction must not be + directly reachable via a tableswitch instruction. + + 4.8.1.8 + + DX +
+ A9 + + All targets of a lookupswitch instruction must be opcodes + within the same method. Its table must be consistent and sorted + low-to-high. Opcodes modified by a wide instruction must + not be directly reachable via a lookupswitch instruction. + + 4.8.1.9 + + DX +
+ A10 + + The operands of ldc and ldc_w instructions + must be valid indices into the constant pool. The respective entries + must be of type CONSTANT_Integer, + CONSTANT_Float, or CONSTANT_String. + + 4.8.1.10 + + DX +
+ A11 + + The operands of ldc2_w instructions must be valid indices + into the constant pool. The respective entries must be of type + CONSTANT_Long or CONSTANT_Double. The + subsequent constant pool entry must be valid and remain unused. + + 4.8.1.11 + + DX +
+ A12 + + The Operands of get<kind> and + put<kind> instructions must be valid indices into + constant pool. The respective entries must be of type + CONSTANT_Fieldref. + + 4.8.1.12 + + DX +
+ A13 + + The first two operands of invokevirtual, + invokespecial, and invokestatic must form a + valid 16-bit index into the constant pool. The respective entries must + be of type CONSTANT_Methodref. + + 4.8.1.13 + + DX +
+ A14 + + Methods whose names start with '<' must only be invoked implicitly by + the VM, not by class file code. The only exception is the instance + initializer, which may be invoked by invokespecial. + + 4.8.1.14 + + DX +
+ A15 + + The first two operands of invokeinterface must form a + valid 16-bit index into the constant pool. The entry must be of type + CONSTANT_Interface_Methodref. The third operand must + specify number of local variables and the fourth operand must always + be zero. + + 4.8.1.15 + + DX +
+ A16 + + The operands of instanceof, checkcast, + new, and anewarray instructions must + be a valid index into the constant pool. The first two operands of + multianewarray instruction must form a valid 16-bit index + into the constant pool. All respective entries must be of type + CONSTANT_Class. + + 4.8.1.16 + + DX +
+ A17 + + The dimensions of an array created by anewarray + instructions must be less than 256. + + 4.8.1.17 + + DX +
+ A18 + + The new instruction must not reference array classes, + interfaces, or abstract classes. + + 4.8.1.18 + + DX +
+ A19 + + The type referenced by a multinewarray instruction must + have at least as many dimensions as specified in the instruction. The + dimensions operand must not be 0 + + 4.8.1.19 + + DX +
+ A20 + + The type referenced by a newarray instruction must be a + valid, non-reference type. + + 4.8.1.20 + + DX +
+ A21 + + The index operand of instructions explicitly referencing single-width + local variables must be non-negative and smaller than + max_locals. + + 4.8.1.21 + + DX +
+ A22 + + The index operand of instructions implicitly referencing single-width + local variables must be non-negative and smaller than + max_locals. + + 4.8.1.22 + + DX +
+ A23 + + The index operand of instructions explicitly referencing double-width + local variables must be non-negative and smaller than + max_locals-1. + + 4.8.1.23 + + DX +
+ A24 + + The index operand of instructions implicitly referencing double-width + local variables must be non-negative and smaller than + max_locals-1. + + 4.8.1.24 + + DX +
+ A25 + + The index operand of wide instructions explicitly + referencing single-width local variables must be non-negative and + smaller than max_locals. + + 4.8.1.25 + + DX +
+ A26 + + The index operand of wide instructions explicitly + referencing double-width local variables must be non-negative and + smaller than max_locals-1. + + 4.8.1.25 + + DX +
+ +

+ Structural constraints +

+ +

+ Structural constraints are constraints on relationships between several + elements of the bytecode. They usually can't be checked without employing + control or data-flow analysis techniques. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Identifier + + Description + + Spec equivalent + + Failure mode +
+ B1 + + The number and types of arguments (operands and local variables) must + always match the instruction. + + 4.8.2.1 + + DX +
+ B2 + + The operand stack must have the same depth for all executions paths + leading to an instruction. + + 4.8.2.2 + + DX +
+ B3 + + Local variable pairs must never be broken up. + + 4.8.2.3 + + DX +
+ B4 + + A local variable (or pair) has to be assigned first before it can be + read. + + 4.8.2.4 + + DX +
+ B5 + + The operand stack must never grow beyond max_stack. + + 4.8.2.5 + + DX +
+ B6 + + The operand stack must never underflow. + + 4.8.2.6 + + DX +
+ B7 + + An invokespecial instruction must only invoke an instance + initializer or a method in the current class or one of its + superclasses. + + 4.8.2.7 + + VM +
+ B8 + + An instance initializer must only be invoked on an uninitialized + instance residing on the operand stack. + + 4.8.2.8 + + VM +
+ B9 + + Instance methods may only be invoked on and instance fields may only + be accessed on already initialized instances. + + 4.8.2.9 + + VM +
+ B10 + + The must be no backwards branches with uninitialized instances on the + operand stack or in local variables. There must be no code protected + by an exception handler that contains local variables with + uninitialized instances. + + 4.8.2.10 + + DX +
+ B11 + + An instance initializer must call another instance initializer (same + class or superclass) before any instance members can be accessed. + Exceptions are non-inherited instance fields, which can be assigned + before calling another initializer, and the Object class + in general. + + 4.8.2.11 + + VM +
+ B12 + + All actual method arguments must be assignment-compatible with formal + arguments. + + 4.8.2.12 + + VM +
+ B13 + + For each instance method invocation, the actual instance must be + assignment-compatible with the class or interface specified in the + instruction. + + 4.8.2.13 + + VM +
+ B14 + + A returns instruction must match its method's return type. + + 4.8.2.14 + + VM +
+ B15 + + When accessing protected members of a superclass, the actual type of + the instance being accessed must be either the current class or one + of its subclasses. + + 4.8.2.15 + + VM +
+ B16 + + The type of a value stored into a static field must be + assignment-compatible with or convertible to the field's type. + + 4.8.2.16 + + VM +
+ B17 + + The type of a value stored into a field must be assignment-compatible + with or convertible to the field's type. + + 4.8.2.17 + + VM +
+ B18 + + The type of every value stored into an array must be + assignment-compatible with the array's component type. + + 4.8.2.18 + + VM +
+ B19 + + The operand of an athrow instruction must be + assignment-compatible with java.lang.Throwable. + + 4.8.2.19 + + VM +
+ B20 + + The last reachable instruction of a method must either be a backwards + jump or branch, a return, or an athrow instruction. It + must not be possible to leave the code array at the + bottom. + + 4.8.2.20 + + VM +
+ B21 + + Local variable values must not be used as return addresses. + + 4.8.2.21 + + VM +
+ B22 + + There must be a single, uniquely determined return instruction per + subroutine call. + + 4.8.2.22 + + VM +
+ B23 + + Subroutine calls must not be directly or indirectly self-recursive. + + 4.8.2.23 + + DX +
+ B24 + + ReturnAddress instances must not be reused. If a + subroutine returns to a ReturnAddress further up the + stack than where its original call instruction is located, then all + ReturnAddress instances further down the stack must + never be used. + + 4.8.2.24 + + DX +
+ + diff --git a/docs/porting-guide.html b/docs/porting-guide.html new file mode 100644 index 0000000..d1a1ea3 --- /dev/null +++ b/docs/porting-guide.html @@ -0,0 +1,374 @@ + + + Dalvik Porting Guide + + + +

Dalvik Porting Guide

+ +

+The Dalvik virtual machine is intended to run on a variety of platforms. +The baseline system is expected to be a variant of UNIX (Linux, BSD, Mac +OS X) running the GNU C compiler. Little-endian CPUs have been exercised +the most heavily, but big-endian systems are explicitly supported. +

+There are two general categories of work: porting to a Linux system +with a previously unseen CPU architecture, and porting to a different +operating system. This document covers the former. +

+Basic familiarity with the Android platform, source code structure, and +build system is assumed. +

+ + +

Core Libraries

+ +

+The native code in the core libraries (chiefly libcore, +but also dalvik/vm/native) is written in C/C++ and is expected +to work without modification in a Linux environment. +

+The core libraries pull in code from many other projects, including +OpenSSL, zlib, and ICU. These will also need to be ported before the VM +can be used. +

+ + +

JNI Call Bridge

+ +

+Most of the Dalvik VM runtime is written in portable C. The one +non-portable component of the runtime is the JNI call bridge. Simply put, +this converts an array of integers into function arguments of various +types, and calls a function. This must be done according to the C calling +conventions for the platform. The task could be as simple as pushing all +of the arguments onto the stack, or involve complex rules for register +assignment and stack alignment. +

+To ease porting to new platforms, the +open-source FFI library (Foreign Function Interface) is used when a +custom bridge is unavailable. FFI is not as fast as a native implementation, +and the optional performance improvements it does offer are not used, so +writing a replacement is a good first step. +

+The code lives in dalvik/vm/arch/*, with the FFI-based version +in the "generic" directory. There are two source files for each architecture. +One defines the call bridge itself: +

+void dvmPlatformInvoke(void* pEnv, ClassObject* clazz, int argInfo, +int argc, const u4* argv, const char* signature, void* func, +JValue* pReturn) +

+This will invoke a C/C++ function declared: +

+ return_type func(JNIEnv* pEnv, Object* this [, args])
+
or (for a "static" method):
+ return_type func(JNIEnv* pEnv, ClassObject* clazz [, args]) +

+The role of dvmPlatformInvoke is to convert the values in +argv into C-style calling conventions, call the method, and +then place the return type into pReturn (a union that holds +all of the basic JNI types). The code may use the method signature +(a DEX "shorty" signature, with one character for the return type and one +per argument) to determine how to handle the values. +

+The other source file involved here defines a 32-bit "hint". The hint +is computed when the method's class is loaded, and passed in as the +"argInfo" argument. The hint can be used to avoid scanning the ASCII +method signature for things like the return value, total argument size, +or inter-argument 64-bit alignment restrictions. + + +

Interpreter

+ +

+The Dalvik runtime includes two interpreters, labeled "portable" and "fast". +The portable interpreter is largely contained within a single C function, +and should compile on any system that supports gcc. (If you don't have gcc, +you may need to disable the "threaded" execution model, which relies on +gcc's "goto table" implementation; look for the THREADED_INTERP define.) +

+The fast interpreter uses hand-coded assembly fragments. If none are +available for the current architecture, the build system will create an +interpreter out of C "stubs". The resulting "all stubs" interpreter is +quite a bit slower than the portable interpreter, making "fast" something +of a misnomer. +

+The fast interpreter is enabled by default. On platforms without native +support, you may want to switch to the portable interpreter. This can +be controlled with the dalvik.vm.execution-mode system +property. For example, if you: +

+adb shell "echo dalvik.vm.execution-mode = int:portable >> /data/local.prop" +

+and reboot, the Android app framework will start the VM with the portable +interpreter enabled. +

+ + +

Mterp Interpreter Structure

+ +

+There may be significant performance advantages to rewriting the +interpreter core in assembly language, using architecture-specific +optimizations. In Dalvik this can be done one instruction at a time. +

+The simplest way to implement an interpreter is to have a large "switch" +statement. After each instruction is handled, the interpreter returns to +the top of the loop, fetches the next instruction, and jumps to the +appropriate label. +

+An improvement on this is called "threaded" execution. The instruction +fetch and dispatch are included at the end of every instruction handler. +This makes the interpreter a little larger overall, but you get to avoid +the (potentially expensive) branch back to the top of the switch statement. +

+Dalvik mterp goes one step further, using a computed goto instead of a goto +table. Instead of looking up the address in a table, which requires an +extra memory fetch on every instruction, mterp multiplies the opcode number +by a fixed value. By default, each handler is allowed 64 bytes of space. +

+Not all handlers fit in 64 bytes. Those that don't can have subroutines +or simply continue on to additional code outside the basic space. Some of +this is handled automatically by Dalvik, but there's no portable way to detect +overflow of a 64-byte handler until the VM starts executing. +

+The choice of 64 bytes is somewhat arbitrary, but has worked out well for +ARM and x86. +

+In the course of development it's useful to have C and assembly +implementations of each handler, and be able to flip back and forth +between them when hunting problems down. In mterp this is relatively +straightforward. You can always see the files being fed to the compiler +and assembler for your platform by looking in the +dalvik/vm/mterp/out directory. +

+The interpreter sources live in dalvik/vm/mterp. If you +haven't yet, you should read dalvik/vm/mterp/README.txt now. +

+ + +

Getting Started With Mterp

+ +

+Getting started: +

    +
  1. Decide on the name of your architecture. For the sake of discussion, +let's call it myarch. +
  2. Make a copy of dalvik/vm/mterp/config-allstubs to +dalvik/vm/mterp/config-myarch. +
  3. Create a dalvik/vm/mterp/myarch directory to hold your +source files. +
  4. Add myarch to the list in +dalvik/vm/mterp/rebuild.sh. +
  5. Make sure dalvik/vm/Android.mk will find the files for +your architecture. If $(TARGET_ARCH) is configured this +will happen automatically. +
  6. Disable the Dalvik JIT. You can do this in the general device +configuration, or by editing the initialization of WITH_JIT in +dalvik/vm/Dvm.mk to always be false. +
+

+You now have the basic framework in place. Whenever you make a change, you +need to perform two steps: regenerate the mterp output, and build the +core VM library. (It's two steps because we didn't want the build system +to require Python 2.5. Which, incidentally, you need to have.) +

    +
  1. In the dalvik/vm/mterp directory, regenerate the contents +of the files in dalvik/vm/mterp/out by executing +./rebuild.sh. Note there are two files, one in C and one +in assembly. +
  2. In the dalvik directory, regenerate the +libdvm.so library with mm. You can also use +mmm dalvik/vm from the top of the tree. +
+

+This will leave you with an updated libdvm.so, which can be pushed out to +a device with adb sync or adb push. If you're +using the emulator, you need to add make snod (System image, +NO Dependency check) to rebuild the system image file. You should not +need to do a top-level "make" and rebuild the dependent binaries. +

+At this point you have an "all stubs" interpreter. You can see how it +works by examining dalvik/vm/mterp/cstubs/entry.c. The +code runs in a loop, pulling out the next opcode, and invoking the +handler through a function pointer. Each handler takes a "glue" argument +that contains all of the useful state. +

+Your goal is to replace the entry method, exit method, and each individual +instruction with custom implementations. The first thing you need to do +is create an entry function that calls the handler for the first instruction. +After that, the instructions chain together, so you don't need a loop. +(Look at the ARM or x86 implementation to see how they work.) +

+Once you have that, you need something to jump to. You can't branch +directly to the C stub because it's expecting to be called with a "glue" +argument and then return. We need a C stub "wrapper" that does the +setup and jumps directly to the next handler. We write this in assembly +and then add it to the config file definition. +

+To see how this works, create a file called +dalvik/vm/mterp/myarch/stub.S that contains one line: +

+/* stub for ${opcode} */
+
+Then, in dalvik/vm/mterp/config-myarch, add this below the +handler-size directive: +
+# source for the instruction table stub
+asm-stub myarch/stub.S
+
+

+Regenerate the sources with ./rebuild.sh, and take a look +inside dalvik/vm/mterp/out/InterpAsm-myarch.S. You should +see 256 copies of the stub function in a single large block after the +dvmAsmInstructionStart label. The stub.S +code will be used anywhere you don't provide an assembly implementation. +

+Note that each block begins with a .balign 64 directive. +This is what pads each handler out to 64 bytes. Note also that the +${opcode} text changed into an opcode name, which should +be used to call the C implementation (dvmMterp_${opcode}). +

+The actual contents of stub.S are up to you to define. +See entry.S and stub.S in the armv5te +or x86 directories for working examples. +

+If you're working on a variation of an existing architecture, you may be +able to use most of the existing code and just provide replacements for +a few instructions. Look at the vm/mterp/config-* files +for examples. +

+ + +

Replacing Stubs

+ +

+There are roughly 250 Dalvik opcodes, including some that are inserted by +dexopt and aren't described in the +Dalvik bytecode documentation. Each +one must perform the appropriate actions, fetch the next opcode, and +branch to the next handler. The actions performed by the assembly version +must exactly match those performed by the C version (in +dalvik/vm/mterp/c/OP_*). +

+It is possible to customize the set of "optimized" instructions for your +platform. This is possible because optimized DEX files are not expected +to work on multiple devices. Adding, removing, or redefining instructions +is beyond the scope of this document, and for simplicity it's best to stick +with the basic set defined by the portable interpreter. +

+Once you have written a handler that looks like it should work, add +it to the config file. For example, suppose we have a working version +of OP_NOP. For demonstration purposes, fake it for now by +putting this into dalvik/vm/mterp/myarch/OP_NOP.S: +

+/* This is my NOP handler */
+
+

+Then, in the op-start section of config-myarch, add: +

+    op OP_NOP myarch
+
+

+This tells the generation script to use the assembly version from the +myarch directory instead of the C version from the c +directory. +

+Execute ./rebuild.sh. Look at InterpAsm-myarch.S +and InterpC-myarch.c in the out directory. You +will see that the OP_NOP stub wrapper has been replaced with our +new code in the assembly file, and the C stub implementation is no longer +included. +

+As you implement instructions, the C version and corresponding stub wrapper +will disappear from the output files. Eventually you will have a 100% +assembly interpreter. You may find it saves a little time to examine +the output of your compiler for some of the operations. The +porting-proto.c sample code can be +helpful here. +

+ + +

Interpreter Switching

+ +

+The Dalvik VM actually includes a third interpreter implementation: the debug +interpreter. This is a variation of the portable interpreter that includes +support for debugging and profiling. +

+When a debugger attaches, or a profiling feature is enabled, the VM +will switch interpreters at a convenient point. This is done at the +same time as the GC safe point check: on a backward branch, a method +return, or an exception throw. Similarly, when the debugger detaches +or profiling is discontinued, execution transfers back to the "fast" or +"portable" interpreter. +

+Your entry function needs to test the "entryPoint" value in the "glue" +pointer to determine where execution should begin. Your exit function +will need to return a boolean that indicates whether the interpreter is +exiting (because we reached the "bottom" of a thread stack) or wants to +switch to the other implementation. +

+See the entry.S file in x86 or armv5te +for examples. +

+ + +

Testing

+ +

+A number of VM tests can be found in dalvik/tests. The most +useful during interpreter development is 003-omnibus-opcodes, +which tests many different instructions. +

+The basic invocation is: +

+$ cd dalvik/tests
+$ ./run-test 003
+
+

+This will run test 003 on an attached device or emulator. You can run +the test against your desktop VM by specifying --reference +if you suspect the test may be faulty. You can also use +--portable and --fast to explictly specify +one Dalvik interpreter or the other. +

+Some instructions are replaced by dexopt, notably when +"quickening" field accesses and method invocations. To ensure +that you are testing the basic form of the instruction, add the +--no-optimize option. +

+There is no in-built instruction tracing mechanism. If you want +to know for sure that your implementation of an opcode handler +is being used, the easiest approach is to insert a "printf" +call. For an example, look at common_squeak in +dalvik/vm/mterp/armv5te/footer.S. +

+At some point you need to ensure that debuggers and profiling work with +your interpreter. The easiest way to do this is to simply connect a +debugger or toggle profiling. (A future test suite may include some +tests for this.) +

+ + +

Other Performance Issues

+ +

+The System.arraycopy() function is heavily used. The +implementation relies on the bionic C library to provide a fast, +platform-optimized data copy function for arrays with elements wider +than one byte. If you're not using bionic, or your platform does not +have an implementation of this method, Dalvik will use correct but +sub-optimal algorithms instead. For best performance you will want +to provide your own version. +

+See the comments in dalvik/vm/native/java_lang_System.c +for details. +

+ +

+

Copyright © 2009 The Android Open Source Project
+ + + diff --git a/docs/porting-proto.c.txt b/docs/porting-proto.c.txt new file mode 100644 index 0000000..98c6fd3 --- /dev/null +++ b/docs/porting-proto.c.txt @@ -0,0 +1,244 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * 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. + */ + +/* + * Dalvik instruction fragments, useful when porting mterp. + * + * Compile this and examine the output to see what your compiler generates. + * This can give you a head start on some of the more complicated operations. + * + * Example: + * % gcc -c -O2 -save-temps -fverbose-asm porting-proto.c + * % less porting-proto.s + */ +#include + +typedef int8_t s1; +typedef uint8_t u1; +typedef int16_t s2; +typedef uint16_t u2; +typedef int32_t s4; +typedef uint32_t u4; +typedef int64_t s8; +typedef uint64_t u8; + +s4 iadd32(s4 x, s4 y) { return x + y; } +s8 iadd64(s8 x, s8 y) { return x + y; } +float fadd32(float x, float y) { return x + y; } +double fadd64(double x, double y) { return x + y; } + +s4 isub32(s4 x, s4 y) { return x - y; } +s8 isub64(s8 x, s8 y) { return x - y; } +float fsub32(float x, float y) { return x - y; } +double fsub64(double x, double y) { return x - y; } + +s4 irsub32lit8(s4 x) { return 25 - x; } + +s4 imul32(s4 x, s4 y) { return x * y; } +s8 imul64(s8 x, s8 y) { return x * y; } +float fmul32(float x, float y) { return x * y; } +double fmul64(double x, double y) { return x * y; } + +s4 idiv32(s4 x, s4 y) { return x / y; } +s8 idiv64(s8 x, s8 y) { return x / y; } +float fdiv32(float x, float y) { return x / y; } +double fdiv64(double x, double y) { return x / y; } + +s4 irem32(s4 x, s4 y) { return x % y; } +s8 irem64(s8 x, s8 y) { return x % y; } + +s4 iand32(s4 x, s4 y) { return x & y; } +s8 iand64(s8 x, s8 y) { return x & y; } + +s4 ior32(s4 x, s4 y) { return x | y; } +s8 ior64(s8 x, s8 y) { return x | y; } + +s4 ixor32(s4 x, s4 y) { return x ^ y; } +s8 ixor64(s8 x, s8 y) { return x ^ y; } + +s4 iasl32(s4 x, s4 count) { return x << (count & 0x1f); } +s8 iasl64(s8 x, s4 count) { return x << (count & 0x3f); } + +s4 iasr32(s4 x, s4 count) { return x >> (count & 0x1f); } +s8 iasr64(s8 x, s4 count) { return x >> (count & 0x3f); } + +s4 ilsr32(s4 x, s4 count) { return ((u4)x) >> (count & 0x1f); } // unsigned +s8 ilsr64(s8 x, s4 count) { return ((u8)x) >> (count & 0x3f); } // unsigned + +s4 ineg32(s4 x) { return -x; } +s8 ineg64(s8 x) { return -x; } +float fneg32(float x) { return -x; } +double fneg64(double x) { return -x; } + +s4 inot32(s4 x) { return x ^ -1; } +s8 inot64(s8 x) { return x ^ -1LL; } + +s4 float2int(float x) { return (s4) x; } +double float2double(float x) { return (double) x; } +s4 double2int(double x) { return (s4) x; } +float double2float(double x) { return (float) x; } + +/* + * ARM lib doesn't clamp large values or NaN the way we want on these two. + * If the simple version isn't correct, use the long version. (You can use + * dalvik/tests/041-narrowing to verify.) + */ +s8 float2long(float x) { return (s8) x; } +s8 float2long_clamp(float x) +{ + static const float kMaxLong = (float)0x7fffffffffffffffULL; + static const float kMinLong = (float)0x8000000000000000ULL; + + if (x >= kMaxLong) { + return 0x7fffffffffffffffULL; + } else if (x <= kMinLong) { + return 0x8000000000000000ULL; + } else if (x != x) { + return 0; + } else { + return (s8) x; + } +} +s8 double2long(double x) { return (s8) x; } +s8 double2long_clamp(double x) +{ + static const double kMaxLong = (double)0x7fffffffffffffffULL; + static const double kMinLong = (double)0x8000000000000000ULL; + + if (x >= kMaxLong) { + return 0x7fffffffffffffffULL; + } else if (x <= kMinLong) { + return 0x8000000000000000ULL; + } else if (x != x) { + return 0; + } else { + return (s8) x; + } +} + +s1 int2byte(s4 x) { return (s1) x; } +s2 int2short(s4 x) { return (s2) x; } +u2 int2char(s4 x) { return (u2) x; } +s8 int2long(s4 x) { return (s8) x; } +float int2float(s4 x) { return (float) x; } +double int2double(s4 x) { return (double) x; } + +s4 long2int(s8 x) { return (s4) x; } +float long2float(s8 x) { return (float) x; } +double long2double(s8 x) { return (double) x; } + +int cmpl_float(float x, float y) +{ + int result; + + if (x == y) + result = 0; + else if (x > y) + result = 1; + else /* (x < y) or NaN */ + result = -1; + return result; +} + +int cmpg_float(float x, float y) +{ + int result; + + if (x == y) + result = 0; + else if (x < y) + result = -1; + else /* (x > y) or NaN */ + result = 1; + return result; +} + +int cmpl_double(double x, double y) +{ + int result; + + if (x == y) + result = 0; + else if (x > y) + result = 1; + else /* (x < y) or NaN */ + result = -1; + return result; +} + +int cmpg_double(double x, double y) +{ + int result; + + if (x == y) + result = 0; + else if (x < y) + result = -1; + else /* (x > y) or NaN */ + result = 1; + return result; +} + +int cmp_long(s8 x, s8 y) +{ + int result; + + if (x == y) + result = 0; + else if (x < y) + result = -1; + else /* (x > y) */ + result = 1; + return result; +} + +/* instruction decoding fragments */ +u1 unsignedAA(u2 x) { return x >> 8; } +s1 signedAA(u2 x) { return (s4)(x << 16) >> 24; } +s2 signedBB(u2 x) { return (s2) x; } +u1 unsignedA(u2 x) { return (x >> 8) & 0x0f; } +u1 unsignedB(u2 x) { return x >> 12; } + +/* some handy immediate constants when working with float/double */ +u4 const_43e00000(u4 highword) { return 0x43e00000; } +u4 const_c3e00000(u4 highword) { return 0xc3e00000; } +u4 const_ffc00000(u4 highword) { return 0xffc00000; } +u4 const_41dfffff(u4 highword) { return 0x41dfffff; } +u4 const_c1e00000(u4 highword) { return 0xc1e00000; } + +/* + * Test for some gcc-defined symbols. If you're frequently switching + * between different cross-compiler architectures or CPU feature sets, + * this can help you keep track of which one you're compiling for. + */ +#ifdef __arm__ +# warning "found __arm__" +#endif +#ifdef __ARM_EABI__ +# warning "found __ARM_EABI__" +#endif +#ifdef __VFP_FP__ +# warning "found __VFP_FP__" /* VFP-format doubles used; may not have VFP */ +#endif +#if defined(__VFP_FP__) && !defined(__SOFTFP__) +# warning "VFP in use" +#endif +#ifdef __ARM_ARCH_5TE__ +# warning "found __ARM_ARCH_5TE__" +#endif +#ifdef __ARM_ARCH_7A__ +# warning "found __ARM_ARCH_7A__" +#endif diff --git a/docs/prettify.css b/docs/prettify.css new file mode 100644 index 0000000..351152b --- /dev/null +++ b/docs/prettify.css @@ -0,0 +1,27 @@ +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #080; } +.kwd { color: #008; } +.com { color: #800; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +.dec { color: #606; } +pre.prettyprint { padding: 2px; border: 1px solid #888; } + +@media print { + .str { color: #060; } + .kwd { color: #006; font-weight: bold; } + .com { color: #600; font-style: italic; } + .typ { color: #404; font-weight: bold; } + .lit { color: #044; } + .pun { color: #440; } + .pln { color: #000; } + .tag { color: #006; font-weight: bold; } + .atn { color: #404; } + .atv { color: #060; } +} diff --git a/docs/prettify.js b/docs/prettify.js new file mode 100644 index 0000000..9e99fc6 --- /dev/null +++ b/docs/prettify.js @@ -0,0 +1,1280 @@ +// Copyright (C) 2006 Google Inc. +// +// 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. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + * + * The lexer should work on a number of languages including C and friends, + * Java, Python, Bash, SQL, HTML, XML, CSS, Javascript, and Makefiles. + * It works passably on Ruby, PHP and Awk and a decent subset of Perl, but, + * because of commenting conventions, doesn't work on Smalltalk, Lisp-like, or + * CAML-like languages. + * + * If there's a language not mentioned here, then I don't know it, and don't + * know whether it works. If it has a C-like, Bash-like, or XML-like syntax + * then it should work passably. + * + * Usage: + * 1) include this source file in an html page via + * + * 2) define style rules. See the example page for examples. + * 3) mark the
 and  tags in your source with class=prettyprint.
+ *    You can also use the (html deprecated)  tag, but the pretty printer
+ *    needs to do more substantial DOM manipulations to support that, so some
+ *    css styles may not be preserved.
+ * That's it.  I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in.
+ *
+ * Change log:
+ * cbeust, 2006/08/22
+ *   Java annotations (start with "@") are now captured as literals ("lit")
+ */
+
+// JSLint declarations
+/*global console, document, navigator, setTimeout, window */
+
+/**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+var PR_SHOULD_USE_CONTINUATION = true;
+
+/** the number of characters between tab columns */
+var PR_TAB_WIDTH = 8;
+
+/** Walks the DOM returning a properly escaped version of innerHTML.
+  * @param {Node} node
+  * @param {Array.<string>} out output buffer that receives chunks of HTML.
+  */
+var PR_normalizedHtml;
+
+/** Contains functions for creating and registering new language handlers.
+  * @type {Object}
+  */
+var PR;
+
+/** Pretty print a chunk of code.
+  *
+  * @param {string} sourceCodeHtml code as html
+  * @return {string} code as html, but prettier
+  */
+var prettyPrintOne;
+/** find all the < pre > and < code > tags in the DOM with class=prettyprint
+  * and prettify them.
+  * @param {Function} opt_whenDone if specified, called when the last entry
+  *     has been finished.
+  */
+var prettyPrint;
+
+/** browser detection. @extern */
+function _pr_isIE6() {
+  var isIE6 = navigator && navigator.userAgent &&
+      /\bMSIE 6\./.test(navigator.userAgent);
+  _pr_isIE6 = function () { return isIE6; };
+  return isIE6;
+}
+
+
+(function () {
+  /** Splits input on space and returns an Object mapping each non-empty part to
+    * true.
+    */
+  function wordSet(words) {
+    words = words.split(/ /g);
+    var set = {};
+    for (var i = words.length; --i >= 0;) {
+      var w = words[i];
+      if (w) { set[w] = null; }
+    }
+    return set;
+  }
+
+  // Keyword lists for various languages.
+  var FLOW_CONTROL_KEYWORDS =
+      "break continue do else for if return while ";
+  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
+      "double enum extern float goto int long register short signed sizeof " +
+      "static struct switch typedef union unsigned void volatile ";
+  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
+      "new operator private protected public this throw true try ";
+  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
+      "concept concept_map const_cast constexpr decltype " +
+      "dynamic_cast explicit export friend inline late_check " +
+      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
+      "template typeid typename typeof using virtual wchar_t where ";
+  var JAVA_KEYWORDS = COMMON_KEYWORDS +
+      "boolean byte extends final finally implements import instanceof null " +
+      "native package strictfp super synchronized throws transient ";
+  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
+      "as base by checked decimal delegate descending event " +
+      "fixed foreach from group implicit in interface internal into is lock " +
+      "object out override orderby params readonly ref sbyte sealed " +
+      "stackalloc string select uint ulong unchecked unsafe ushort var ";
+  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
+      "debugger eval export function get null set undefined var with " +
+      "Infinity NaN ";
+  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
+      "goto if import last local my next no our print package redo require " +
+      "sub undef unless until use wantarray while BEGIN END ";
+  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
+      "elif except exec finally from global import in is lambda " +
+      "nonlocal not or pass print raise try with yield " +
+      "False True None ";
+  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
+      " defined elsif end ensure false in module next nil not or redo rescue " +
+      "retry self super then true undef unless until when yield BEGIN END ";
+  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
+      "function in local set then until ";
+  var ALL_KEYWORDS = (
+      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
+      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
+
+  // token style names.  correspond to css classes
+  /** token style for a string literal */
+  var PR_STRING = 'str';
+  /** token style for a keyword */
+  var PR_KEYWORD = 'kwd';
+  /** token style for a comment */
+  var PR_COMMENT = 'com';
+  /** token style for a type */
+  var PR_TYPE = 'typ';
+  /** token style for a literal value.  e.g. 1, null, true. */
+  var PR_LITERAL = 'lit';
+  /** token style for a punctuation string. */
+  var PR_PUNCTUATION = 'pun';
+  /** token style for a punctuation string. */
+  var PR_PLAIN = 'pln';
+
+  /** token style for an sgml tag. */
+  var PR_TAG = 'tag';
+  /** token style for a markup declaration such as a DOCTYPE. */
+  var PR_DECLARATION = 'dec';
+  /** token style for embedded source. */
+  var PR_SOURCE = 'src';
+  /** token style for an sgml attribute name. */
+  var PR_ATTRIB_NAME = 'atn';
+  /** token style for an sgml attribute value. */
+  var PR_ATTRIB_VALUE = 'atv';
+
+  /**
+   * A class that indicates a section of markup that is not code, e.g. to allow
+   * embedding of line numbers within code listings.
+   */
+  var PR_NOCODE = 'nocode';
+
+  function isWordChar(ch) {
+    return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
+  }
+
+  /** Splice one array into another.
+    * Like the python <code>
+    * container[containerPosition:containerPosition + countReplaced] = inserted
+    * </code>
+    * @param {Array} inserted
+    * @param {Array} container modified in place
+    * @param {Number} containerPosition
+    * @param {Number} countReplaced
+    */
+  function spliceArrayInto(
+      inserted, container, containerPosition, countReplaced) {
+    inserted.unshift(containerPosition, countReplaced || 0);
+    try {
+      container.splice.apply(container, inserted);
+    } finally {
+      inserted.splice(0, 2);
+    }
+  }
+
+  /** A set of tokens that can precede a regular expression literal in
+    * javascript.
+    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
+    * list, but I've removed ones that might be problematic when seen in
+    * languages that don't support regular expression literals.
+    *
+    * <p>Specifically, I've removed any keywords that can't precede a regexp
+    * literal in a syntactically legal javascript program, and I've removed the
+    * "in" keyword since it's not a keyword in many languages, and might be used
+    * as a count of inches.
+    * @private
+    */
+  var REGEXP_PRECEDER_PATTERN = function () {
+      var preceders = [
+          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
+          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
+          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
+          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
+          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
+          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
+          "||=", "~" /* handles =~ and !~ */,
+          "break", "case", "continue", "delete",
+          "do", "else", "finally", "instanceof",
+          "return", "throw", "try", "typeof"
+          ];
+      var pattern = '(?:' +
+          '(?:(?:^|[^0-9.])\\.{1,3})|' +  // a dot that's not part of a number
+          '(?:(?:^|[^\\+])\\+)|' +  // allow + but not ++
+          '(?:(?:^|[^\\-])-)';  // allow - but not --
+      for (var i = 0; i < preceders.length; ++i) {
+        var preceder = preceders[i];
+        if (isWordChar(preceder.charAt(0))) {
+          pattern += '|\\b' + preceder;
+        } else {
+          pattern += '|' + preceder.replace(/([^=<>:&])/g, '\\$1');
+        }
+      }
+      pattern += '|^)\\s*$';  // matches at end, and matches empty string
+      return new RegExp(pattern);
+      // CAVEAT: this does not properly handle the case where a regular
+      // expression immediately follows another since a regular expression may
+      // have flags for case-sensitivity and the like.  Having regexp tokens
+      // adjacent is not
+      // valid in any language I'm aware of, so I'm punting.
+      // TODO: maybe style special characters inside a regexp as punctuation.
+    }();
+
+  // Define regexps here so that the interpreter doesn't have to create an
+  // object each time the function containing them is called.
+  // The language spec requires a new object created even if you don't access
+  // the $1 members.
+  var pr_amp = /&/g;
+  var pr_lt = /</g;
+  var pr_gt = />/g;
+  var pr_quot = /\"/g;
+  /** like textToHtml but escapes double quotes to be attribute safe. */
+  function attribToHtml(str) {
+    return str.replace(pr_amp, '&amp;')
+        .replace(pr_lt, '&lt;')
+        .replace(pr_gt, '&gt;')
+        .replace(pr_quot, '&quot;');
+  }
+
+  /** escapest html special characters to html. */
+  function textToHtml(str) {
+    return str.replace(pr_amp, '&amp;')
+        .replace(pr_lt, '&lt;')
+        .replace(pr_gt, '&gt;');
+  }
+
+
+  var pr_ltEnt = /&lt;/g;
+  var pr_gtEnt = /&gt;/g;
+  var pr_aposEnt = /&apos;/g;
+  var pr_quotEnt = /&quot;/g;
+  var pr_ampEnt = /&amp;/g;
+  var pr_nbspEnt = /&nbsp;/g;
+  /** unescapes html to plain text. */
+  function htmlToText(html) {
+    var pos = html.indexOf('&');
+    if (pos < 0) { return html; }
+    // Handle numeric entities specially.  We can't use functional substitution
+    // since that doesn't work in older versions of Safari.
+    // These should be rare since most browsers convert them to normal chars.
+    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
+      var end = html.indexOf(';', pos);
+      if (end >= 0) {
+        var num = html.substring(pos + 3, end);
+        var radix = 10;
+        if (num && num.charAt(0) === 'x') {
+          num = num.substring(1);
+          radix = 16;
+        }
+        var codePoint = parseInt(num, radix);
+        if (!isNaN(codePoint)) {
+          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
+                  html.substring(end + 1));
+        }
+      }
+    }
+
+    return html.replace(pr_ltEnt, '<')
+        .replace(pr_gtEnt, '>')
+        .replace(pr_aposEnt, "'")
+        .replace(pr_quotEnt, '"')
+        .replace(pr_ampEnt, '&')
+        .replace(pr_nbspEnt, ' ');
+  }
+
+  /** is the given node's innerHTML normally unescaped? */
+  function isRawContent(node) {
+    return 'XMP' === node.tagName;
+  }
+
+  function normalizedHtml(node, out) {
+    switch (node.nodeType) {
+      case 1:  // an element
+        var name = node.tagName.toLowerCase();
+        out.push('<', name);
+        for (var i = 0; i < node.attributes.length; ++i) {
+          var attr = node.attributes[i];
+          if (!attr.specified) { continue; }
+          out.push(' ');
+          normalizedHtml(attr, out);
+        }
+        out.push('>');
+        for (var child = node.firstChild; child; child = child.nextSibling) {
+          normalizedHtml(child, out);
+        }
+        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
+          out.push('<\/', name, '>');
+        }
+        break;
+      case 2: // an attribute
+        out.push(node.name.toLowerCase(), '="', attribToHtml(node.value), '"');
+        break;
+      case 3: case 4: // text
+        out.push(textToHtml(node.nodeValue));
+        break;
+    }
+  }
+
+  var PR_innerHtmlWorks = null;
+  function getInnerHtml(node) {
+    // inner html is hopelessly broken in Safari 2.0.4 when the content is
+    // an html description of well formed XML and the containing tag is a PRE
+    // tag, so we detect that case and emulate innerHTML.
+    if (null === PR_innerHtmlWorks) {
+      var testNode = document.createElement('PRE');
+      testNode.appendChild(
+          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
+      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
+    }
+
+    if (PR_innerHtmlWorks) {
+      var content = node.innerHTML;
+      // XMP tags contain unescaped entities so require special handling.
+      if (isRawContent(node)) {
+        content = textToHtml(content);
+      }
+      return content;
+    }
+
+    var out = [];
+    for (var child = node.firstChild; child; child = child.nextSibling) {
+      normalizedHtml(child, out);
+    }
+    return out.join('');
+  }
+
+  /** returns a function that expand tabs to spaces.  This function can be fed
+    * successive chunks of text, and will maintain its own internal state to
+    * keep track of how tabs are expanded.
+    * @return {function (string) : string} a function that takes
+    *   plain text and return the text with tabs expanded.
+    * @private
+    */
+  function makeTabExpander(tabWidth) {
+    var SPACES = '                ';
+    var charInLine = 0;
+
+    return function (plainText) {
+      // walk over each character looking for tabs and newlines.
+      // On tabs, expand them.  On newlines, reset charInLine.
+      // Otherwise increment charInLine
+      var out = null;
+      var pos = 0;
+      for (var i = 0, n = plainText.length; i < n; ++i) {
+        var ch = plainText.charAt(i);
+
+        switch (ch) {
+          case '\t':
+            if (!out) { out = []; }
+            out.push(plainText.substring(pos, i));
+            // calculate how much space we need in front of this part
+            // nSpaces is the amount of padding -- the number of spaces needed
+            // to move us to the next column, where columns occur at factors of
+            // tabWidth.
+            var nSpaces = tabWidth - (charInLine % tabWidth);
+            charInLine += nSpaces;
+            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
+              out.push(SPACES.substring(0, nSpaces));
+            }
+            pos = i + 1;
+            break;
+          case '\n':
+            charInLine = 0;
+            break;
+          default:
+            ++charInLine;
+        }
+      }
+      if (!out) { return plainText; }
+      out.push(plainText.substring(pos));
+      return out.join('');
+    };
+  }
+
+  // The below pattern matches one of the following
+  // (1) /[^<]+/ : A run of characters other than '<'
+  // (2) /<!--.*?-->/: an HTML comment
+  // (3) /<!\[CDATA\[.*?\]\]>/: a cdata section
+  // (3) /<\/?[a-zA-Z][^>]*>/ : A probably tag that should not be highlighted
+  // (4) /</ : A '<' that does not begin a larger chunk.  Treated as 1
+  var pr_chunkPattern =
+  /(?:[^<]+|<!--[\s\S]*?-->|<!\[CDATA\[([\s\S]*?)\]\]>|<\/?[a-zA-Z][^>]*>|<)/g;
+  var pr_commentPrefix = /^<!--/;
+  var pr_cdataPrefix = /^<\[CDATA\[/;
+  var pr_brPrefix = /^<br\b/i;
+  var pr_tagNameRe = /^<(\/?)([a-zA-Z]+)/;
+
+  /** split markup into chunks of html tags (style null) and
+    * plain text (style {@link #PR_PLAIN}), converting tags which are
+    * significant for tokenization (<br>) into their textual equivalent.
+    *
+    * @param {string} s html where whitespace is considered significant.
+    * @return {Object} source code and extracted tags.
+    * @private
+    */
+  function extractTags(s) {
+    // since the pattern has the 'g' modifier and defines no capturing groups,
+    // this will return a list of all chunks which we then classify and wrap as
+    // PR_Tokens
+    var matches = s.match(pr_chunkPattern);
+    var sourceBuf = [];
+    var sourceBufLen = 0;
+    var extractedTags = [];
+    if (matches) {
+      for (var i = 0, n = matches.length; i < n; ++i) {
+        var match = matches[i];
+        if (match.length > 1 && match.charAt(0) === '<') {
+          if (pr_commentPrefix.test(match)) { continue; }
+          if (pr_cdataPrefix.test(match)) {
+            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
+            sourceBuf.push(match.substring(9, match.length - 3));
+            sourceBufLen += match.length - 12;
+          } else if (pr_brPrefix.test(match)) {
+            // <br> tags are lexically significant so convert them to text.
+            // This is undone later.
+            sourceBuf.push('\n');
+            ++sourceBufLen;
+          } else {
+            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
+              // A <span class="nocode"> will start a section that should be
+              // ignored.  Continue walking the list until we see a matching end
+              // tag.
+              var name = match.match(pr_tagNameRe)[2];
+              var depth = 1;
+              end_tag_loop:
+              for (var j = i + 1; j < n; ++j) {
+                var name2 = matches[j].match(pr_tagNameRe);
+                if (name2 && name2[2] === name) {
+                  if (name2[1] === '/') {
+                    if (--depth === 0) { break end_tag_loop; }
+                  } else {
+                    ++depth;
+                  }
+                }
+              }
+              if (j < n) {
+                extractedTags.push(
+                    sourceBufLen, matches.slice(i, j + 1).join(''));
+                i = j;
+              } else {  // Ignore unclosed sections.
+                extractedTags.push(sourceBufLen, match);
+              }
+            } else {
+              extractedTags.push(sourceBufLen, match);
+            }
+          }
+        } else {
+          var literalText = htmlToText(match);
+          sourceBuf.push(literalText);
+          sourceBufLen += literalText.length;
+        }
+      }
+    }
+    return { source: sourceBuf.join(''), tags: extractedTags };
+  }
+
+  /** True if the given tag contains a class attribute with the nocode class. */
+  function isNoCodeTag(tag) {
+    return !!tag
+        // First canonicalize the representation of attributes
+        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
+                 ' $1="$2$3$4"')
+        // Then look for the attribute we want.
+        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
+  }
+
+  /** Given triples of [style, pattern, context] returns a lexing function,
+    * The lexing function interprets the patterns to find token boundaries and
+    * returns a decoration list of the form
+    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+    * where index_n is an index into the sourceCode, and style_n is a style
+    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
+    * all characters in sourceCode[index_n-1:index_n].
+    *
+    * The stylePatterns is a list whose elements have the form
+    * [style : string, pattern : RegExp, context : RegExp, shortcut : string].
+    &
+    * Style is a style constant like PR_PLAIN.
+    *
+    * Pattern must only match prefixes, and if it matches a prefix and context
+    * is null or matches the last non-comment token parsed, then that match is
+    * considered a token with the same style.
+    *
+    * Context is applied to the last non-whitespace, non-comment token
+    * recognized.
+    *
+    * Shortcut is an optional string of characters, any of which, if the first
+    * character, gurantee that this pattern and only this pattern matches.
+    *
+    * @param {Array} shortcutStylePatterns patterns that always start with
+    *   a known character.  Must have a shortcut string.
+    * @param {Array} fallthroughStylePatterns patterns that will be tried in
+    *   order if the shortcut ones fail.  May have shortcuts.
+    *
+    * @return {function (string, number?) : Array.<number|string>} a
+    *   function that takes source code and returns a list of decorations.
+    */
+  function createSimpleLexer(shortcutStylePatterns,
+                             fallthroughStylePatterns) {
+    var shortcuts = {};
+    (function () {
+      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
+      for (var i = allPatterns.length; --i >= 0;) {
+        var patternParts = allPatterns[i];
+        var shortcutChars = patternParts[3];
+        if (shortcutChars) {
+          for (var c = shortcutChars.length; --c >= 0;) {
+            shortcuts[shortcutChars.charAt(c)] = patternParts;
+          }
+        }
+      }
+    })();
+
+    var nPatterns = fallthroughStylePatterns.length;
+    var notWs = /\S/;
+
+    return function (sourceCode, opt_basePos) {
+      opt_basePos = opt_basePos || 0;
+      var decorations = [opt_basePos, PR_PLAIN];
+      var lastToken = '';
+      var pos = 0;  // index into sourceCode
+      var tail = sourceCode;
+
+      while (tail.length) {
+        var style;
+        var token = null;
+        var match;
+
+        var patternParts = shortcuts[tail.charAt(0)];
+        if (patternParts) {
+          match = tail.match(patternParts[1]);
+          token = match[0];
+          style = patternParts[0];
+        } else {
+          for (var i = 0; i < nPatterns; ++i) {
+            patternParts = fallthroughStylePatterns[i];
+            var contextPattern = patternParts[2];
+            if (contextPattern && !contextPattern.test(lastToken)) {
+              // rule can't be used
+              continue;
+            }
+            match = tail.match(patternParts[1]);
+            if (match) {
+              token = match[0];
+              style = patternParts[0];
+              break;
+            }
+          }
+
+          if (!token) {  // make sure that we make progress
+            style = PR_PLAIN;
+            token = tail.substring(0, 1);
+          }
+        }
+
+        decorations.push(opt_basePos + pos, style);
+        pos += token.length;
+        tail = tail.substring(token.length);
+        if (style !== PR_COMMENT && notWs.test(token)) { lastToken = token; }
+      }
+      return decorations;
+    };
+  }
+
+  var PR_MARKUP_LEXER = createSimpleLexer([], [
+      [PR_PLAIN,       /^[^<]+/, null],
+      [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/, null],
+      [PR_COMMENT,     /^<!--[\s\S]*?(?:-->|$)/, null],
+      [PR_SOURCE,      /^<\?[\s\S]*?(?:\?>|$)/, null],
+      [PR_SOURCE,      /^<%[\s\S]*?(?:%>|$)/, null],
+      [PR_SOURCE,
+       // Tags whose content is not escaped, and which contain source code.
+       /^<(script|style|xmp)\b[^>]*>[\s\S]*?<\/\1\b[^>]*>/i, null],
+      [PR_TAG,         /^<\/?\w[^<>]*>/, null]
+      ]);
+  // Splits any of the source|style|xmp entries above into a start tag,
+  // source content, and end tag.
+  var PR_SOURCE_CHUNK_PARTS = /^(<[^>]*>)([\s\S]*)(<\/[^>]*>)$/;
+  /** split markup on tags, comments, application directives, and other top
+    * level constructs.  Tags are returned as a single token - attributes are
+    * not yet broken out.
+    * @private
+    */
+  function tokenizeMarkup(source) {
+    var decorations = PR_MARKUP_LEXER(source);
+    for (var i = 0; i < decorations.length; i += 2) {
+      if (decorations[i + 1] === PR_SOURCE) {
+        var start, end;
+        start = decorations[i];
+        end = i + 2 < decorations.length ? decorations[i + 2] : source.length;
+        // Split out start and end script tags as actual tags, and leave the
+        // body with style SCRIPT.
+        var sourceChunk = source.substring(start, end);
+        var match = sourceChunk.match(PR_SOURCE_CHUNK_PARTS);
+        if (match) {
+          decorations.splice(
+              i, 2,
+              start, PR_TAG,  // the open chunk
+              start + match[1].length, PR_SOURCE,
+              start + match[1].length + (match[2] || '').length, PR_TAG);
+        }
+      }
+    }
+    return decorations;
+  }
+
+  var PR_TAG_LEXER = createSimpleLexer([
+      [PR_ATTRIB_VALUE, /^\'[^\']*(?:\'|$)/, null, "'"],
+      [PR_ATTRIB_VALUE, /^\"[^\"]*(?:\"|$)/, null, '"'],
+      [PR_PUNCTUATION,  /^[<>\/=]+/, null, '<>/=']
+      ], [
+      [PR_TAG,          /^[\w:\-]+/, /^</],
+      [PR_ATTRIB_VALUE, /^[\w\-]+/, /^=/],
+      [PR_ATTRIB_NAME,  /^[\w:\-]+/, null],
+      [PR_PLAIN,        /^\s+/, null, ' \t\r\n']
+      ]);
+  /** split tags attributes and their values out from the tag name, and
+    * recursively lex source chunks.
+    * @private
+    */
+  function splitTagAttributes(source, decorations) {
+    for (var i = 0; i < decorations.length; i += 2) {
+      var style = decorations[i + 1];
+      if (style === PR_TAG) {
+        var start, end;
+        start = decorations[i];
+        end = i + 2 < decorations.length ? decorations[i + 2] : source.length;
+        var chunk = source.substring(start, end);
+        var subDecorations = PR_TAG_LEXER(chunk, start);
+        spliceArrayInto(subDecorations, decorations, i, 2);
+        i += subDecorations.length - 2;
+      }
+    }
+    return decorations;
+  }
+
+  /** returns a function that produces a list of decorations from source text.
+    *
+    * This code treats ", ', and ` as string delimiters, and \ as a string
+    * escape.  It does not recognize perl's qq() style strings.
+    * It has no special handling for double delimiter escapes as in basic, or
+    * the tripled delimiters used in python, but should work on those regardless
+    * although in those cases a single string literal may be broken up into
+    * multiple adjacent string literals.
+    *
+    * It recognizes C, C++, and shell style comments.
+    *
+    * @param {Object} options a set of optional parameters.
+    * @return {function (string) : Array.<string|number>} a
+    *     decorator that takes sourceCode as plain text and that returns a
+    *     decoration list
+    */
+  function sourceDecorator(options) {
+    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
+    if (options.tripleQuotedStrings) {
+      // '''multi-line-string''', 'single-line-string', and double-quoted
+      shortcutStylePatterns.push(
+          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
+           null, '\'"']);
+    } else if (options.multiLineStrings) {
+      // 'multi-line-string', "multi-line-string"
+      shortcutStylePatterns.push(
+          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
+           null, '\'"`']);
+    } else {
+      // 'single-line-string', "single-line-string"
+      shortcutStylePatterns.push(
+          [PR_STRING,
+           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
+           null, '"\'']);
+    }
+    fallthroughStylePatterns.push(
+        [PR_PLAIN,   /^(?:[^\'\"\`\/\#]+)/, null, ' \r\n']);
+    if (options.hashComments) {
+      shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
+    }
+    if (options.cStyleComments) {
+      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
+      fallthroughStylePatterns.push(
+          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
+    }
+    if (options.regexLiterals) {
+      var REGEX_LITERAL = (
+          // A regular expression literal starts with a slash that is
+          // not followed by * or / so that it is not confused with
+          // comments.
+          '^/(?=[^/*])'
+          // and then contains any number of raw characters,
+          + '(?:[^/\\x5B\\x5C]'
+          // escape sequences (\x5C),
+          +    '|\\x5C[\\s\\S]'
+          // or non-nesting character sets (\x5B\x5D);
+          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
+          // finally closed by a /.
+          + '(?:/|$)');
+      fallthroughStylePatterns.push(
+          [PR_STRING, new RegExp(REGEX_LITERAL), REGEXP_PRECEDER_PATTERN]);
+    }
+
+    var keywords = wordSet(options.keywords);
+
+    options = null;
+
+    /** splits the given string into comment, string, and "other" tokens.
+      * @param {string} sourceCode as plain text
+      * @return {Array.<number|string>} a decoration list.
+      * @private
+      */
+    var splitStringAndCommentTokens = createSimpleLexer(
+        shortcutStylePatterns, fallthroughStylePatterns);
+
+    var styleLiteralIdentifierPuncRecognizer = createSimpleLexer([], [
+        [PR_PLAIN,       /^\s+/, null, ' \r\n'],
+        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
+        [PR_PLAIN,       /^[a-z_$@][a-z_$@0-9]*/i, null],
+        // A hex number
+        [PR_LITERAL,     /^0x[a-f0-9]+[a-z]/i, null],
+        // An octal or decimal number, possibly in scientific notation
+        [PR_LITERAL,
+         /^(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?[a-z]*/i,
+         null, '123456789'],
+        [PR_PUNCTUATION, /^[^\s\w\.$@]+/, null]
+        // Fallback will handle decimal points not adjacent to a digit
+      ]);
+
+    /** splits plain text tokens into more specific tokens, and then tries to
+      * recognize keywords, and types.
+      * @private
+      */
+    function splitNonStringNonCommentTokens(source, decorations) {
+      for (var i = 0; i < decorations.length; i += 2) {
+        var style = decorations[i + 1];
+        if (style === PR_PLAIN) {
+          var start, end, chunk, subDecs;
+          start = decorations[i];
+          end = i + 2 < decorations.length ? decorations[i + 2] : source.length;
+          chunk = source.substring(start, end);
+          subDecs = styleLiteralIdentifierPuncRecognizer(chunk, start);
+          for (var j = 0, m = subDecs.length; j < m; j += 2) {
+            var subStyle = subDecs[j + 1];
+            if (subStyle === PR_PLAIN) {
+              var subStart = subDecs[j];
+              var subEnd = j + 2 < m ? subDecs[j + 2] : chunk.length;
+              var token = source.substring(subStart, subEnd);
+              if (token === '.') {
+                subDecs[j + 1] = PR_PUNCTUATION;
+              } else if (token in keywords) {
+                subDecs[j + 1] = PR_KEYWORD;
+              } else if (/^@?[A-Z][A-Z$]*[a-z][A-Za-z$]*$/.test(token)) {
+                // classify types and annotations using Java's style conventions
+                subDecs[j + 1] = token.charAt(0) === '@' ? PR_LITERAL : PR_TYPE;
+              }
+            }
+          }
+          spliceArrayInto(subDecs, decorations, i, 2);
+          i += subDecs.length - 2;
+        }
+      }
+      return decorations;
+    }
+
+    return function (sourceCode) {
+      // Split into strings, comments, and other.
+      // We do this because strings and comments are easily recognizable and can
+      // contain stuff that looks like other tokens, so we want to mark those
+      // early so we don't recurse into them.
+      var decorations = splitStringAndCommentTokens(sourceCode);
+
+      // Split non comment|string tokens on whitespace and word boundaries
+      decorations = splitNonStringNonCommentTokens(sourceCode, decorations);
+
+      return decorations;
+    };
+  }
+
+  var decorateSource = sourceDecorator({
+        keywords: ALL_KEYWORDS,
+        hashComments: true,
+        cStyleComments: true,
+        multiLineStrings: true,
+        regexLiterals: true
+      });
+
+  /** identify regions of markup that are really source code, and recursivley
+    * lex them.
+    * @private
+    */
+  function splitSourceNodes(source, decorations) {
+    for (var i = 0; i < decorations.length; i += 2) {
+      var style = decorations[i + 1];
+      if (style === PR_SOURCE) {
+        // Recurse using the non-markup lexer
+        var start, end;
+        start = decorations[i];
+        end = i + 2 < decorations.length ? decorations[i + 2] : source.length;
+        var subDecorations = decorateSource(source.substring(start, end));
+        for (var j = 0, m = subDecorations.length; j < m; j += 2) {
+          subDecorations[j] += start;
+        }
+        spliceArrayInto(subDecorations, decorations, i, 2);
+        i += subDecorations.length - 2;
+      }
+    }
+    return decorations;
+  }
+
+  /** identify attribute values that really contain source code and recursively
+    * lex them.
+    * @private
+    */
+  function splitSourceAttributes(source, decorations) {
+    var nextValueIsSource = false;
+    for (var i = 0; i < decorations.length; i += 2) {
+      var style = decorations[i + 1];
+      var start, end;
+      if (style === PR_ATTRIB_NAME) {
+        start = decorations[i];
+        end = i + 2 < decorations.length ? decorations[i + 2] : source.length;
+        nextValueIsSource = /^on|^style$/i.test(source.substring(start, end));
+      } else if (style === PR_ATTRIB_VALUE) {
+        if (nextValueIsSource) {
+          start = decorations[i];
+          end = i + 2 < decorations.length ? decorations[i + 2] : source.length;
+          var attribValue = source.substring(start, end);
+          var attribLen = attribValue.length;
+          var quoted =
+              (attribLen >= 2 && /^[\"\']/.test(attribValue) &&
+               attribValue.charAt(0) === attribValue.charAt(attribLen - 1));
+
+          var attribSource;
+          var attribSourceStart;
+          var attribSourceEnd;
+          if (quoted) {
+            attribSourceStart = start + 1;
+            attribSourceEnd = end - 1;
+            attribSource = attribValue;
+          } else {
+            attribSourceStart = start + 1;
+            attribSourceEnd = end - 1;
+            attribSource = attribValue.substring(1, attribValue.length - 1);
+          }
+
+          var attribSourceDecorations = decorateSource(attribSource);
+          for (var j = 0, m = attribSourceDecorations.length; j < m; j += 2) {
+            attribSourceDecorations[j] += attribSourceStart;
+          }
+
+          if (quoted) {
+            attribSourceDecorations.push(attribSourceEnd, PR_ATTRIB_VALUE);
+            spliceArrayInto(attribSourceDecorations, decorations, i + 2, 0);
+          } else {
+            spliceArrayInto(attribSourceDecorations, decorations, i, 2);
+          }
+        }
+        nextValueIsSource = false;
+      }
+    }
+    return decorations;
+  }
+
+  /** returns a decoration list given a string of markup.
+    *
+    * This code recognizes a number of constructs.
+    * <!-- ... --> comment
+    * <!\w ... >   declaration
+    * <\w ... >    tag
+    * </\w ... >   tag
+    * <?...?>      embedded source
+    * <%...%>      embedded source
+    * &[#\w]...;   entity
+    *
+    * It does not recognizes %foo; doctype entities from  .
+    *
+    * It will recurse into any <style>, <script>, and on* attributes using
+    * PR_lexSource.
+    */
+  function decorateMarkup(sourceCode) {
+    // This function works as follows:
+    // 1) Start by splitting the markup into text and tag chunks
+    //    Input:  string s
+    //    Output: List<PR_Token> where style in (PR_PLAIN, null)
+    // 2) Then split the text chunks further into comments, declarations,
+    //    tags, etc.
+    //    After each split, consider whether the token is the start of an
+    //    embedded source section, i.e. is an open <script> tag.  If it is, find
+    //    the corresponding close token, and don't bother to lex in between.
+    //    Input:  List<string>
+    //    Output: List<PR_Token> with style in
+    //            (PR_TAG, PR_PLAIN, PR_SOURCE, null)
+    // 3) Finally go over each tag token and split out attribute names and
+    //    values.
+    //    Input:  List<PR_Token>
+    //    Output: List<PR_Token> where style in
+    //            (PR_TAG, PR_PLAIN, PR_SOURCE, NAME, VALUE, null)
+    var decorations = tokenizeMarkup(sourceCode);
+    decorations = splitTagAttributes(sourceCode, decorations);
+    decorations = splitSourceNodes(sourceCode, decorations);
+    decorations = splitSourceAttributes(sourceCode, decorations);
+    return decorations;
+  }
+
+  /**
+    * @param {string} sourceText plain text
+    * @param {Array.<number|string>} extractedTags chunks of raw html preceded
+    *   by their position in sourceText in order.
+    * @param {Array.<number|string>} decorations style classes preceded by their
+    *   position in sourceText in order.
+    * @return {string} html
+    * @private
+    */
+  function recombineTagsAndDecorations(sourceText, extractedTags, decorations) {
+    var html = [];
+    // index past the last char in sourceText written to html
+    var outputIdx = 0;
+
+    var openDecoration = null;
+    var currentDecoration = null;
+    var tagPos = 0;  // index into extractedTags
+    var decPos = 0;  // index into decorations
+    var tabExpander = makeTabExpander(PR_TAB_WIDTH);
+
+    var adjacentSpaceRe = /([\r\n ]) /g;
+    var startOrSpaceRe = /(^| ) /gm;
+    var newlineRe = /\r\n?|\n/g;
+    var trailingSpaceRe = /[ \r\n]$/;
+    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
+
+    // A helper function that is responsible for opening sections of decoration
+    // and outputing properly escaped chunks of source
+    function emitTextUpTo(sourceIdx) {
+      if (sourceIdx > outputIdx) {
+        if (openDecoration && openDecoration !== currentDecoration) {
+          // Close the current decoration
+          html.push('</span>');
+          openDecoration = null;
+        }
+        if (!openDecoration && currentDecoration) {
+          openDecoration = currentDecoration;
+          html.push('<span class="', openDecoration, '">');
+        }
+        // This interacts badly with some wikis which introduces paragraph tags
+        // into pre blocks for some strange reason.
+        // It's necessary for IE though which seems to lose the preformattedness
+        // of <pre> tags when their innerHTML is assigned.
+        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
+        // and it serves to undo the conversion of <br>s to newlines done in
+        // chunkify.
+        var htmlChunk = textToHtml(
+            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
+            .replace(lastWasSpace
+                     ? startOrSpaceRe
+                     : adjacentSpaceRe, '$1&nbsp;');
+        // Keep track of whether we need to escape space at the beginning of the
+        // next chunk.
+        lastWasSpace = trailingSpaceRe.test(htmlChunk);
+        html.push(htmlChunk.replace(newlineRe, '<br />'));
+        outputIdx = sourceIdx;
+      }
+    }
+
+    while (true) {
+      // Determine if we're going to consume a tag this time around.  Otherwise
+      // we consume a decoration or exit.
+      var outputTag;
+      if (tagPos < extractedTags.length) {
+        if (decPos < decorations.length) {
+          // Pick one giving preference to extractedTags since we shouldn't open
+          // a new style that we're going to have to immediately close in order
+          // to output a tag.
+          outputTag = extractedTags[tagPos] <= decorations[decPos];
+        } else {
+          outputTag = true;
+        }
+      } else {
+        outputTag = false;
+      }
+      // Consume either a decoration or a tag or exit.
+      if (outputTag) {
+        emitTextUpTo(extractedTags[tagPos]);
+        if (openDecoration) {
+          // Close the current decoration
+          html.push('</span>');
+          openDecoration = null;
+        }
+        html.push(extractedTags[tagPos + 1]);
+        tagPos += 2;
+      } else if (decPos < decorations.length) {
+        emitTextUpTo(decorations[decPos]);
+        currentDecoration = decorations[decPos + 1];
+        decPos += 2;
+      } else {
+        break;
+      }
+    }
+    emitTextUpTo(sourceText.length);
+    if (openDecoration) {
+      html.push('</span>');
+    }
+
+    return html.join('');
+  }
+
+  /** Maps language-specific file extensions to handlers. */
+  var langHandlerRegistry = {};
+  /** Register a language handler for the given file extensions.
+    * @param {function (string) : Array.<number|string>} handler
+    *     a function from source code to a list of decorations.
+    * @param {Array.<string>} fileExtensions
+    */
+  function registerLangHandler(handler, fileExtensions) {
+    for (var i = fileExtensions.length; --i >= 0;) {
+      var ext = fileExtensions[i];
+      if (!langHandlerRegistry.hasOwnProperty(ext)) {
+        langHandlerRegistry[ext] = handler;
+      } else if ('console' in window) {
+        console.log('cannot override language handler %s', ext);
+      }
+    }
+  }
+  registerLangHandler(decorateSource, ['default-code']);
+  registerLangHandler(decorateMarkup,
+                      ['default-markup', 'html', 'htm', 'xhtml', 'xml', 'xsl']);
+  registerLangHandler(sourceDecorator({
+          keywords: CPP_KEYWORDS,
+          hashComments: true,
+          cStyleComments: true
+        }), ['c', 'cc', 'cpp', 'cxx', 'cyc']);
+  registerLangHandler(sourceDecorator({
+          keywords: CSHARP_KEYWORDS,
+          hashComments: true,
+          cStyleComments: true
+        }), ['cs']);
+  registerLangHandler(sourceDecorator({
+          keywords: JAVA_KEYWORDS,
+          cStyleComments: true
+        }), ['java']);
+  registerLangHandler(sourceDecorator({
+          keywords: SH_KEYWORDS,
+          hashComments: true,
+          multiLineStrings: true
+        }), ['bsh', 'csh', 'sh']);
+  registerLangHandler(sourceDecorator({
+          keywords: PYTHON_KEYWORDS,
+          hashComments: true,
+          multiLineStrings: true,
+          tripleQuotedStrings: true
+        }), ['cv', 'py']);
+  registerLangHandler(sourceDecorator({
+          keywords: PERL_KEYWORDS,
+          hashComments: true,
+          multiLineStrings: true,
+          regexLiterals: true
+        }), ['perl', 'pl', 'pm']);
+  registerLangHandler(sourceDecorator({
+          keywords: RUBY_KEYWORDS,
+          hashComments: true,
+          multiLineStrings: true,
+          regexLiterals: true
+        }), ['rb']);
+  registerLangHandler(sourceDecorator({
+          keywords: JSCRIPT_KEYWORDS,
+          cStyleComments: true,
+          regexLiterals: true
+        }), ['js']);
+
+  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
+    try {
+      // Extract tags, and convert the source code to plain text.
+      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
+      /** Plain text. @type {string} */
+      var source = sourceAndExtractedTags.source;
+
+      /** Even entries are positions in source in ascending order.  Odd entries
+        * are tags that were extracted at that position.
+        * @type {Array.<number|string>}
+        */
+      var extractedTags = sourceAndExtractedTags.tags;
+
+      // Pick a lexer and apply it.
+      if (!langHandlerRegistry.hasOwnProperty(opt_langExtension)) {
+        // Treat it as markup if the first non whitespace character is a < and
+        // the last non-whitespace character is a >.
+        opt_langExtension =
+            /^\s*</.test(source) ? 'default-markup' : 'default-code';
+      }
+
+      /** Even entries are positions in source in ascending order.  Odd enties
+        * are style markers (e.g., PR_COMMENT) that run from that position until
+        * the end.
+        * @type {Array.<number|string>}
+        */
+      var decorations = langHandlerRegistry[opt_langExtension].call({}, source);
+
+      // Integrate the decorations and tags back into the source code to produce
+      // a decorated html string.
+      return recombineTagsAndDecorations(source, extractedTags, decorations);
+    } catch (e) {
+      if ('console' in window) {
+        console.log(e);
+        console.trace();
+      }
+      return sourceCodeHtml;
+    }
+  }
+
+  function prettyPrint(opt_whenDone) {
+    var isIE6 = _pr_isIE6();
+
+    // fetch a list of nodes to rewrite
+    var codeSegments = [
+        document.getElementsByTagName('pre'),
+        document.getElementsByTagName('code'),
+        document.getElementsByTagName('xmp') ];
+    var elements = [];
+    for (var i = 0; i < codeSegments.length; ++i) {
+      for (var j = 0; j < codeSegments[i].length; ++j) {
+        elements.push(codeSegments[i][j]);
+      }
+    }
+    codeSegments = null;
+
+    // the loop is broken into a series of continuations to make sure that we
+    // don't make the browser unresponsive when rewriting a large page.
+    var k = 0;
+
+    function doWork() {
+      var endTime = (PR_SHOULD_USE_CONTINUATION ?
+                     new Date().getTime() + 250 /* ms */ :
+                     Infinity);
+      for (; k < elements.length && new Date().getTime() < endTime; k++) {
+        var cs = elements[k];
+        if (cs.className && cs.className.indexOf('prettyprint') >= 0) {
+          // If the classes includes a language extensions, use it.
+          // Language extensions can be specified like
+          //     <pre class="prettyprint lang-cpp">
+          // the language extension "cpp" is used to find a language handler as
+          // passed to PR_registerLangHandler.
+          var langExtension = cs.className.match(/\blang-(\w+)\b/);
+          if (langExtension) { langExtension = langExtension[1]; }
+
+          // make sure this is not nested in an already prettified element
+          var nested = false;
+          for (var p = cs.parentNode; p; p = p.parentNode) {
+            if ((p.tagName === 'pre' || p.tagName === 'code' ||
+                 p.tagName === 'xmp') &&
+                p.className && p.className.indexOf('prettyprint') >= 0) {
+              nested = true;
+              break;
+            }
+          }
+          if (!nested) {
+            // fetch the content as a snippet of properly escaped HTML.
+            // Firefox adds newlines at the end.
+            var content = getInnerHtml(cs);
+            content = content.replace(/(?:\r\n?|\n)$/, '');
+
+            // do the pretty printing
+            var newContent = prettyPrintOne(content, langExtension);
+
+            // push the prettified html back into the tag.
+            if (!isRawContent(cs)) {
+              // just replace the old html with the new
+              cs.innerHTML = newContent;
+            } else {
+              // we need to change the tag to a <pre> since <xmp>s do not allow
+              // embedded tags such as the span tags used to attach styles to
+              // sections of source code.
+              var pre = document.createElement('PRE');
+              for (var i = 0; i < cs.attributes.length; ++i) {
+                var a = cs.attributes[i];
+                if (a.specified) {
+                  var aname = a.name.toLowerCase();
+                  if (aname === 'class') {
+                    pre.className = a.value;  // For IE 6
+                  } else {
+                    pre.setAttribute(a.name, a.value);
+                  }
+                }
+              }
+              pre.innerHTML = newContent;
+
+              // remove the old
+              cs.parentNode.replaceChild(pre, cs);
+              cs = pre;
+            }
+
+            // Replace <br>s with line-feeds so that copying and pasting works
+            // on IE 6.
+            // Doing this on other browsers breaks lots of stuff since \r\n is
+            // treated as two newlines on Firefox, and doing this also slows
+            // down rendering.
+            if (isIE6 && cs.tagName === 'PRE') {
+              var lineBreaks = cs.getElementsByTagName('br');
+              for (var j = lineBreaks.length; --j >= 0;) {
+                var lineBreak = lineBreaks[j];
+                lineBreak.parentNode.replaceChild(
+                    document.createTextNode('\r\n'), lineBreak);
+              }
+            }
+          }
+        }
+      }
+      if (k < elements.length) {
+        // finish up in a continuation
+        setTimeout(doWork, 250);
+      } else if (opt_whenDone) {
+        opt_whenDone();
+      }
+    }
+
+    doWork();
+  }
+
+  window['PR_normalizedHtml'] = normalizedHtml;
+  window['prettyPrintOne'] = prettyPrintOne;
+  window['prettyPrint'] = prettyPrint;
+  window['PR'] = {
+        'createSimpleLexer': createSimpleLexer,
+        'registerLangHandler': registerLangHandler,
+        'sourceDecorator': sourceDecorator,
+        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
+        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
+        'PR_COMMENT': PR_COMMENT,
+        'PR_DECLARATION': PR_DECLARATION,
+        'PR_KEYWORD': PR_KEYWORD,
+        'PR_LITERAL': PR_LITERAL,
+        'PR_NOCODE': PR_NOCODE,
+        'PR_PLAIN': PR_PLAIN,
+        'PR_PUNCTUATION': PR_PUNCTUATION,
+        'PR_SOURCE': PR_SOURCE,
+        'PR_STRING': PR_STRING,
+        'PR_TAG': PR_TAG,
+        'PR_TYPE': PR_TYPE
+      };
+})();
diff --git a/docs/verifier.html b/docs/verifier.html
new file mode 100644
index 0000000..276967f
--- /dev/null
+++ b/docs/verifier.html
@@ -0,0 +1,216 @@
+<html>
+<head>
+<title>Dalvik Bytecode Verifier Notes</title>
+</head>
+
+<body>
+<h1>Dalvik Bytecode Verifier Notes</h1>
+
+<p>
+The bytecode verifier in the Dalvik VM attempts to provide the same sorts
+of checks and guarantees that other popular virtual machines do.  We
+perform generally the same set of checks as are described in _The Java
+Virtual Machine Specification, Second Edition_, including the updates
+planned for the Third Edition.
+
+<p>
+Verification can be enabled for all classes, disabled for all, or enabled
+only for "remote" (non-bootstrap) classes.  It should be performed for any
+class that will be processed with the DEX optimizer, and in fact the
+default VM behavior is to only optimize verified classes.
+
+
+<h2>Why Verify?</h2>
+
+<p>
+The verification process adds additional time to the build and to
+the installation of new applications.  It's fairly quick for app-sized
+DEX files, but rather slow for the big "core" and "framework" files.
+Why do it all, when our system relies on UNIX processes for security?
+<p>
+<ol>
+    <li>Optimizations.  The interpreter can ignore a lot of potential
+    error cases because the verifier guarantees that they are impossible.
+    Also, we can optimize the DEX file more aggressively if we start
+    with a stronger set of assumptions about the bytecode.
+    <li>"Precise" GC.  The work peformed during verification has significant
+    overlap with the work required to compute register use maps for
+    type-precise GC.
+    <li>Intra-application security.  If an app wants to download bits
+    of interpreted code over the network and execute them, it can safely
+    do so using well-established security mechanisms.
+    <li>3rd party app failure analysis.  We have no way to control the
+    tools and post-processing utilities that external developers employ,
+    so when we get bug reports with a weird exception or native crash
+    it's very helpful to start with the assumption that the bytecode
+    is valid.
+</ol>
+<p>
+It's also a convenient framework to deal with certain situations, notably
+replacement of instructions that access volatile 64-bit fields with
+more rigorous versions that guarantee atomicity.
+
+
+<h2>Verifier Differences</h2>
+
+<p>
+There are a few checks that the Dalvik bytecode verifier does not perform,
+because they're not relevant.  For example:
+<ul>
+    <li>Type restrictions on constant pool references are not enforced,
+    because Dalvik does not have a pool of typed constants.  (Dalvik
+    uses a simple index into type-specific pools.)
+    <li>Verification of the operand stack size is not performed, because
+    Dalvik does not have an operand stack.
+    <li>Limitations on <code>jsr</code> and <code>ret</code> do not apply,
+    because Dalvik doesn't support subroutines.
+</ul>
+
+In some cases they are implemented differently, e.g.:
+<ul>
+    <li>In a conventional VM, backward branches and exceptions are
+    forbidden when a local variable holds an uninitialized reference.  The
+    restriction was changed to mark registers as invalid when they hold
+    references to the uninitialized result of a previous invocation of the
+    same <code>new-instance</code> instruction.
+    This solves the same problem -- trickery potentially allowing
+    uninitialized objects to slip past the verifier -- without unduly
+    limiting branches.
+</ul>
+
+There are also some new ones, such as:
+<ul>
+    <li>The <code>move-exception</code> instruction can only appear as
+    the first instruction in an exception handler.
+    <li>The <code>move-result*</code> instructions can only appear
+    immediately after an appropriate <code>invoke-*</code>
+    or <code>filled-new-array</code> instruction.
+</ul>
+
+<p>
+The VM is permitted but not required to enforce "structured locking"
+constraints, which are designed to ensure that, when a method returns, all
+monitors locked by the method have been unlocked an equal number of times.
+This is not currently implemented.
+
+<p>
+The Dalvik verifier is more restrictive than other VMs in one area:
+type safety on sub-32-bit integer widths.  These additional restrictions
+should make it impossible to, say, pass a value outside the range
+[-128, 127] to a function that takes a <code>byte</code> as an argument.
+
+
+<h2>Monitor Verification</h2>
+
+<p>
+If a method locks an object with a <code>synchronized</code> statement, the
+object must be unlocked before the method returns.  At the bytecode level,
+this means the method must execute a matching <code>monitor-exit</code>
+for every <code>monitor-enter</code> instruction, whether the function
+completes normally or abnormally.  The bytecode verifier optionally
+enforces this.
+
+<p>
+The verifier uses a fairly simple-minded model.  If you enter a monitor
+held in register N, you can exit the monitor using register N or any
+subsequently-made copies of register N.  The verifier does not attempt
+to identify previously-made copies, track loads and stores through
+fields, or recognize identical constant values (for example, the result
+values from two <code>const-class</code> instructions on the same class
+will be the same reference, but the verifier doesn't recognize this).
+
+<p>
+Further, you may only exit the monitor most recently entered.  "Hand
+over hand" locking techniques, e.g. "lock A; lock B; unlock A; unlock B",
+are not allowed.
+
+<p>
+This means that there are a number of situations in which the verifier
+will throw an exception on code that would execute correctly at run time.
+This is not expected to be an issue for compiler-generated bytecode.
+
+<p>
+For implementation convenience, the maximum nesting depth of
+<code>synchronized</code> statements has been set to 32.  This is not
+a limitation on the recursion count.  The only way to trip this would be
+to have a single method with more than 32 nested <code>synchronized</code>
+statements, something that is unlikely to occur.
+
+
+<h2>Verification Failures</h2>
+
+<p>
+The verifier may reject a class immediately, or it may defer throwing
+an exception until the code is actually used.  For example, if a class
+attempts to perform an illegal access on a field, the VM should throw
+an IllegalAccessError the first time the instruction is encountered.
+On the other hand, if a class contains an invalid bytecode, it should be
+rejected immediately with a VerifyError.
+
+<p>
+Immediate VerifyErrors are accompanied by detailed, if somewhat cryptic,
+information in the log file.  From this it's possible to determine the
+exact instruction that failed, and the reason for the failure.
+
+<p>
+It's a bit tricky to implement deferred verification errors in Dalvik.
+A few approaches were considered:
+
+<ol>
+<li>We could replace the invalid field access instruction with a special
+instruction that generates an illegal access error, and allow class
+verification to complete successfully.  This type of verification must
+be deferred to first class load, rather than be performed ahead of time
+during DEX optimization, because some failures will depend on the current
+execution environment (e.g. not all classes are available at dexopt time).
+At that point the bytecode instructions are mapped read-only during
+verification, so rewriting them isn't possible.
+</li>
+
+<li>We can perform the access checks when the field/method/class is
+resolved.  In a typical VM implementation we would do the check when the
+entry is resolved in the context of the current classfile, but our DEX
+files combine multiple classfiles together, merging the field/method/class
+resolution results into a single large table.  Once one class successfully
+resolves the field, every other class in the same DEX file would be able
+to access the field.  This is incorrect.
+</li>
+
+<li>Perform the access checks on every field/method/class access.
+This adds significant overhead.  This is mitigated somewhat by the DEX
+optimizer, which will convert many field/method/class accesses into a
+simpler form after performing the access check.  However, not all accesses
+can be optimized (e.g. accesses to classes unknown at dexopt time),
+and we don't currently have an optimized form of certain instructions
+(notably static field operations).
+</li>
+</ol>
+
+<p>
+In early versions of Dalvik (as found in Android 1.6 and earlier), the verifier
+simply regarded all problems as immediately fatal.  This generally worked,
+but in some cases the VM was rejecting classes because of bits of code
+that were never used.  The VerifyError itself was sometimes difficult to
+decipher, because it was thrown during verification rather than at the
+point where the problem was first noticed during execution.
+<p>
+The current version uses a variation of approach #1.  The dexopt
+command works the way it did before, leaving the code untouched and
+flagging fully-correct classes as "pre-verified".  When the VM loads a
+class that didn't pass pre-verification, the verifier is invoked.  If a
+"deferrable" problem is detected, a modifiable copy of the instructions
+in the problematic method is made.  In that copy, the troubled instruction
+is replaced with an "always throw" opcode, and verification continues.
+
+<p>
+In the example used earlier, an attempt to read from an inaccessible
+field would result in the "field get" instruction being replaced by
+"always throw IllegalAccessError on field X".  Creating copies of method
+bodies requires additional heap space, but since this affects very few
+methods overall the memory impact should be minor.
+
+<p>
+<address>Copyright &copy; 2008 The Android Open Source Project</address>
+
+</body>
+</html>
diff --git a/dx/.classpath b/dx/.classpath
new file mode 100644
index 0000000..5b6d9c7
--- /dev/null
+++ b/dx/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3.8.1"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/dx/.project b/dx/.project
new file mode 100644
index 0000000..bcae232
--- /dev/null
+++ b/dx/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>dx</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/dx/Android.bp b/dx/Android.bp
new file mode 100644
index 0000000..b8ace1f
--- /dev/null
+++ b/dx/Android.bp
@@ -0,0 +1,54 @@
+// Copyright 2006 The Android Open Source Project
+//
+
+// This tool is prebuilt if we're doing an app-only build.
+// ANDROIDMK TRANSLATION ERROR: unsupported conditional
+// ifeq ($(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK)),)
+
+// dx java library
+// ============================================================
+package {
+    default_applicable_licenses: ["dalvik_dx_license"],
+}
+
+// Added automatically by a large-scale-change
+// See: http://go/android-license-faq
+license {
+    name: "dalvik_dx_license",
+    visibility: [":__subpackages__"],
+    license_kinds: [
+        "SPDX-license-identifier-Apache-2.0",
+    ],
+    license_text: [
+        "NOTICE",
+    ],
+}
+
+java_binary_host {
+    name: "dx",
+    wrapper: "etc/dx",
+    srcs: ["src/**/*.java"],
+    manifest: "etc/manifest.txt",
+    java_version: "1.7",
+    product_variables: {
+        pdk: {
+            enabled: false,
+        },
+    },
+}
+
+java_binary_host {
+  name: "jasmin",
+  wrapper: "etc/jasmin",
+  static_libs: [ "jasmin-jar" ],
+}
+
+java_import_host {
+  name: "jasmin-jar",
+  jars: ["etc/jasmin.jar"],
+}
+
+filegroup {
+    name: "mainDexClassesRules",
+    srcs: ["etc/mainDexClasses*.rules"],
+}
diff --git a/dx/NOTICE b/dx/NOTICE
new file mode 100644
index 0000000..c5b1efa
--- /dev/null
+++ b/dx/NOTICE
@@ -0,0 +1,190 @@
+
+   Copyright (c) 2005-2008, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   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.
+
+
+                                 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
+
diff --git a/dx/README.txt b/dx/README.txt
new file mode 100644
index 0000000..6a20c82
--- /dev/null
+++ b/dx/README.txt
@@ -0,0 +1,3 @@
+Home of Dalvik eXchange, the thing that takes in class files and
+reformulates them for consumption in the VM. It also does a few other
+things; use "dx --help" to see a modicum of self-documentation.
diff --git a/dx/etc/dx b/dx/etc/dx
new file mode 100644
index 0000000..05ad6b8
--- /dev/null
+++ b/dx/etc/dx
@@ -0,0 +1,89 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+jarfile=dx.jar
+libdir="$progdir"
+
+if [ ! -r "$libdir/$jarfile" ]; then
+    # set dx.jar location for the SDK case
+    libdir="$libdir/lib"
+fi
+
+
+if [ ! -r "$libdir/$jarfile" ]; then
+    # set dx.jar location for the Android tree case
+    libdir=`dirname "$progdir"`/framework
+fi
+
+if [ ! -r "$libdir/$jarfile" ]; then
+    echo `basename "$prog"`": can't find $jarfile"
+    exit 1
+fi
+
+# By default, give dx a max heap size of 1 gig. This can be overridden
+# by using a "-J" option (see below).
+defaultMx="-Xmx1024M"
+
+# The following will extract any initial parameters of the form
+# "-J<stuff>" from the command line and pass them to the Java
+# invocation (instead of to dx). This makes it possible for you to add
+# a command-line parameter such as "-JXmx256M" in your scripts, for
+# example. "java" (with no args) and "java -X" give a summary of
+# available options.
+
+javaOpts=""
+
+while expr "x$1" : 'x-J' >/dev/null; do
+    opt=`expr "x$1" : 'x-J\(.*\)'`
+    javaOpts="${javaOpts} -${opt}"
+    if expr "x${opt}" : "xXmx[0-9]" >/dev/null; then
+        defaultMx="no"
+    fi
+    shift
+done
+
+if [ "${defaultMx}" != "no" ]; then
+    javaOpts="${javaOpts} ${defaultMx}"
+fi
+
+if [ "$OSTYPE" = "cygwin" ]; then
+    # For Cygwin, convert the jarfile path into native Windows style.
+    jarpath=`cygpath -w "$libdir/$jarfile"`
+else
+    jarpath="$libdir/$jarfile"
+fi
+
+exec ${JAVA:-java} $javaOpts -jar "$jarpath" "$@"
diff --git a/dx/etc/dx.bat b/dx/etc/dx.bat
new file mode 100755
index 0000000..f2e3857
--- /dev/null
+++ b/dx/etc/dx.bat
@@ -0,0 +1,110 @@
+@echo off
+REM Copyright (C) 2007 The Android Open Source Project
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+
+REM don't modify the caller's environment
+setlocal
+
+REM Locate dx.jar in the directory where dx.bat was found and start it.
+
+REM Set up prog to be the path of this script, including following symlinks,
+REM and set up progdir to be the fully-qualified pathname of its directory.
+set prog=%~f0
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+exit /b 1
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+exit /b 1
+
+:init
+set jarfile=dx.jar
+set "frameworkdir=%~dp0"
+rem frameworkdir must not end with a dir sep.
+set "frameworkdir=%frameworkdir:~0,-1%"
+
+if exist "%frameworkdir%\%jarfile%" goto JarFileOk
+    set "frameworkdir=%~dp0lib"
+
+if exist "%frameworkdir%\%jarfile%" goto JarFileOk
+    set "frameworkdir=%~dp0..\framework"
+
+:JarFileOk
+
+set "jarpath=%frameworkdir%\%jarfile%"
+
+set javaOpts=
+set args=
+
+REM By default, give dx a max heap size of 1 gig and a stack size of 1meg.
+rem This can be overridden by using "-JXmx..." and "-JXss..." options below.
+set defaultXmx=-Xmx1024M
+set defaultXss=-Xss1m
+
+REM Capture all arguments that are not -J options.
+REM Note that when reading the input arguments with %1, the cmd.exe
+REM automagically converts --name=value arguments into 2 arguments "--name"
+REM followed by "value". Dx has been changed to know how to deal with that.
+set params=
+
+:firstArg
+if [%1]==[] goto endArgs
+set a=%~1
+
+    if [%defaultXmx%]==[] goto notXmx
+    if %a:~0,5% NEQ -JXmx goto notXmx
+        set defaultXmx=
+    :notXmx
+
+    if [%defaultXss%]==[] goto notXss
+    if %a:~0,5% NEQ -JXss goto notXss
+        set defaultXss=
+    :notXss
+
+    if %a:~0,2% NEQ -J goto notJ
+        set javaOpts=%javaOpts% -%a:~2%
+        shift /1
+        goto firstArg
+
+    :notJ
+    set params=%params% %1
+    shift /1
+    goto firstArg
+
+:endArgs
+
+set javaOpts=%javaOpts% %defaultXmx% %defaultXss%
+call "%java_exe%" %javaOpts% -Djava.ext.dirs="%frameworkdir%" -jar "%jarpath%" %params%
+
diff --git a/dx/etc/jasmin b/dx/etc/jasmin
new file mode 100644
index 0000000..20f45b5
--- /dev/null
+++ b/dx/etc/jasmin
@@ -0,0 +1,39 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+libdir=`dirname $progdir`/framework
+
+exec ${JAVA:-java} -jar $libdir/jasmin.jar "$@"
diff --git a/dx/etc/jasmin.jar b/dx/etc/jasmin.jar
new file mode 100644
index 0000000..87db0d0
Binary files /dev/null and b/dx/etc/jasmin.jar differ
diff --git a/dx/etc/mainDexClasses b/dx/etc/mainDexClasses
new file mode 100755
index 0000000..adee89c
--- /dev/null
+++ b/dx/etc/mainDexClasses
@@ -0,0 +1,180 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+function makeTempJar ()
+{
+  local tempDir=/tmp
+  if [ ! -e "${tempDir}" ]; then
+    tempDir=.
+  fi
+  local tempfile="${tempDir}/mainDexClasses-$$.tmp.jar"
+  if [ -e "${tempfile}" ]; then
+    echo "Failed to create temporary file" >2
+    exit 6
+  fi
+  echo "${tempfile}"
+}
+
+function cleanTmp ()
+{
+  if [ -e "${tmpOut}" ] ; then
+    rm "${tmpOut}"
+  fi
+}
+
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+baserules="${progdir}"/mainDexClasses.rules
+if [ ! -r "${baserules}" ]; then
+    echo `basename "$prog"`": can't find mainDexClasses.rules" 1>&2
+    exit 1
+fi
+
+extrarules="${progdir}"/mainDexClassesNoAapt.rules
+if [ ! -r ${extrarules} ]; then
+    echo `basename "$prog"`": can't find mainDexClassesNoAapt.rules" 1>&2
+    exit 1
+fi
+
+jarfile=dx.jar
+libdir="$progdir"
+
+if [ ! -r "$libdir/$jarfile" ]; then
+    # set dx.jar location for the SDK case
+    libdir="$libdir/lib"
+fi
+
+
+if [ ! -r "$libdir/$jarfile" ]; then
+    # set dx.jar location for the Android tree case
+    libdir=`dirname "$progdir"`/framework
+fi
+
+if [ ! -r "$libdir/$jarfile" ]; then
+    echo `basename "$prog"`": can't find $jarfile" 1>&2
+    exit 1
+fi
+
+proguardExec="proguard.sh"
+proguard=${PROGUARD_HOME}/bin/${proguardExec}
+
+if [ ! -r "${proguard}" ]; then
+  # set proguard location for the SDK case
+  proguardBaseDir=`dirname "$progdir"`
+  # "${progdir}"/../..
+  proguardBaseDir=`dirname "$proguardBaseDir"`
+  proguard="${proguardBaseDir}"/tools/proguard/bin/${proguardExec}
+fi
+
+if [ ! -r "${proguard}" ]; then
+  # set proguard location for the Android tree case
+  proguardBaseDir=`dirname "$proguardBaseDir"`
+  # "${progdir}"/../../../..
+  proguardBaseDir=`dirname "$proguardBaseDir"`
+  proguard="${proguardBaseDir}"/external/proguard/bin/${proguardExec}
+fi
+
+if [ ! -r "${proguard}" ]; then
+  proguard="${ANDROID_BUILD_TOP}"/external/proguard/bin/${proguardExec}
+fi
+
+if [ ! -r "${proguard}" ]; then
+    proguard="`which proguard`"
+fi
+
+if [ -z "${proguard}" -o ! -r "${proguard}" ]; then
+    proguard="`which ${proguardExec}`"
+fi
+
+if [ -z "${proguard}" -o ! -r "${proguard}" ]; then
+    echo `basename "$prog"`": can't find ${proguardExec}" 1>&2
+    exit 1
+fi
+
+shrinkedAndroidJar="${SHRINKED_ANDROID_JAR}"
+if [ -z "${shrinkedAndroidJar}" ]; then
+  shrinkedAndroidJar=shrinkedAndroid.jar
+fi
+
+if [ ! -r "${shrinkedAndroidJar}" ]; then
+  shrinkedAndroidJar=${libdir}/${shrinkedAndroidJar}
+fi
+
+if [ ! -r "${shrinkedAndroidJar}" ]; then
+    echo `basename "$prog"`": can't find shrinkedAndroid.jar" 1>&2
+    exit 1
+fi
+
+if [ "$OSTYPE" = "cygwin" ]; then
+    # For Cygwin, convert the jarfile path into native Windows style.
+    jarpath=`cygpath -w "$libdir/$jarfile"`
+  proguard=`cygpath -w "${proguard}"`
+  shrinkedAndroidJar=`cygpath -w "${shrinkedAndroidJar}"`
+else
+    jarpath="$libdir/$jarfile"
+fi
+
+disableKeepAnnotated=
+
+while true; do
+if expr "x$1" : 'x--output' >/dev/null; then
+    exec 1>$2
+    shift 2
+elif expr "x$1" : 'x--disable-annotation-resolution-workaround' >/dev/null; then
+    disableKeepAnnotated=$1
+    shift 1
+elif expr "x$1" : "x--aapt-rules" >/dev/null; then
+    extrarules=$2
+    shift 2
+else
+    break
+fi
+done
+
+if [ $# -ne 1 ]; then
+  echo "Usage : $0 [--output <output file>] <application path>" 1>&2
+  exit 2
+fi
+
+tmpOut=`makeTempJar`
+
+trap cleanTmp 0
+
+"${proguard}" -injars ${@} -dontwarn -forceprocessing  -outjars "${tmpOut}" \
+  -libraryjars "${shrinkedAndroidJar}" -dontoptimize -dontobfuscate -dontpreverify \
+  -include "${baserules}" -include "${extrarules}" 1>/dev/null || exit 10
+
+${JAVA} -cp "$jarpath" com.android.multidex.MainDexListBuilder ${disableKeepAnnotated} "${tmpOut}" ${@} ||  exit 11
diff --git a/dx/etc/mainDexClasses.bat b/dx/etc/mainDexClasses.bat
new file mode 100755
index 0000000..232635c
--- /dev/null
+++ b/dx/etc/mainDexClasses.bat
@@ -0,0 +1,149 @@
+@echo off
+REM Copyright (C) 2013 The Android Open Source Project
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+
+REM don't modify the caller's environment
+setlocal
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+exit /b 1
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+exit /b 1
+
+:init
+set baserules="%~dp0\mainDexClasses.rules"
+set extrarules="%~dp0\mainDexClassesNoAapt.rules"
+
+REM Locate dx.jar in the directory where dx.bat was found.
+set jarfile=dx.jar
+set "frameworkdir=%~dp0"
+rem frameworkdir must not end with a dir sep.
+set "frameworkdir=%frameworkdir:~0,-1%"
+if exist "%frameworkdir%\%jarfile%" goto JarFileOk
+    set "frameworkdir=%~dp0lib"
+
+if exist "%frameworkdir%\%jarfile%" goto JarFileOk
+    set "frameworkdir=%~dp0..\framework"
+:JarFileOk
+
+set "jarpath=%frameworkdir%\%jarfile%"
+
+set "shrinkedAndroidJar=%SHRINKED_ANDROID_JAR%
+if exist "%shrinkedAndroidJar%" goto shrinkedAndroidOk
+    set "shrinkedAndroidJar=shrinkedAndroid.jar"
+
+if exist "%shrinkedAndroidJar%" goto shrinkedAndroidOk
+    set "shrinkedAndroidJar=%frameworkdir%\%shrinkedAndroidJar%"
+
+:shrinkedAndroidOk
+set "proguardExec=proguard.bat"
+set "proguard=%PROGUARD_HOME%\bin\%proguardExec%"
+
+if exist "%proguard%" goto proguardOk
+REM set proguard location for the SDK case
+    set "PROGUARD_HOME=%~dp0\..\..\tools\proguard"
+    set "proguard=%PROGUARD_HOME%\bin\%proguardExec%"
+
+if exist "%proguard%" goto proguardOk
+REM set proguard location for the Android tree case
+    set "PROGUARD_HOME=%~dp0\..\..\..\..\external\proguard"
+    set "proguard=%PROGUARD_HOME%\bin\%proguardExec%"
+
+:proguardOk
+REM Capture all arguments.
+REM Note that when reading the input arguments with %1, the cmd.exe
+REM automagically converts --name=value arguments into 2 arguments "--name"
+REM followed by "value". Dx has been changed to know how to deal with that.
+set params=
+
+set output=
+set disableKeepAnnotated=
+
+:firstArg
+if [%1]==[] goto endArgs
+
+    if %1 NEQ --output goto notOut
+        set "output=%2"
+        shift
+        shift
+        goto firstArg
+
+:notOut
+
+    if %1 NEQ --disable-annotation-resolution-workaround goto notDisable
+        set "disableKeepAnnotated=%1"
+        shift
+        goto firstArg
+
+:notDisable
+
+    if %1 NEQ --aapt-rules goto notAapt
+        set "extrarules=%2"
+        shift
+        shift
+        goto firstArg
+
+:notAapt
+    if defined params goto usage
+    set params=%1
+    shift
+    goto firstArg
+
+:endArgs
+if defined params ( goto makeTmpJar ) else ( goto usage )
+
+:makeTmpJar
+set "tmpJar=%TMP%\mainDexClasses-%RANDOM%.tmp.jar"
+if exist "%tmpJar%" goto makeTmpJar
+echo "" > "%tmpJar%"
+set "exitStatus=0"
+
+
+call "%proguard%" -injars %params% -dontwarn -forceprocessing  -outjars "%tmpJar%" -libraryjars "%shrinkedAndroidJar%" -dontoptimize -dontobfuscate -dontpreverify -include "%baserules%" -include "%extrarules%" 1>nul
+
+if DEFINED output goto redirect
+call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" "%params%"
+goto afterClassReferenceListBuilder
+:redirect
+call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" "%params%" 1>"%output%"
+:afterClassReferenceListBuilder
+
+del %tmpJar%
+exit /b
+
+:usage
+echo "Usage : %0 [--output <output file>] <application path>"
+exit /b 1
diff --git a/dx/etc/mainDexClasses.rules b/dx/etc/mainDexClasses.rules
new file mode 100644
index 0000000..0cd3842
--- /dev/null
+++ b/dx/etc/mainDexClasses.rules
@@ -0,0 +1,20 @@
+  -keep public class * extends android.app.Instrumentation {
+    <init>();
+  }
+  -keep public class * extends android.app.Application {
+    <init>();
+    void attachBaseContext(android.content.Context);
+  }
+  -keep public class * extends android.app.backup.BackupAgent {
+   <init>();
+  }
+# We need to keep all annotation classes because proguard does not trace annotation attribute
+# it just filter the annotation attributes according to annotation classes it already kept.
+  -keep public class * extends java.lang.annotation.Annotation {
+   *;
+  }
+# Keep old fashion tests in the main dex or they'll be silently ignored by InstrumentationTestRunner
+  -keep public class * extends android.test.InstrumentationTestCase {
+   <init>();
+  }
+
diff --git a/dx/etc/mainDexClassesNoAapt.rules b/dx/etc/mainDexClassesNoAapt.rules
new file mode 100644
index 0000000..6290a5e
--- /dev/null
+++ b/dx/etc/mainDexClassesNoAapt.rules
@@ -0,0 +1,13 @@
+  -keep public class * extends android.app.Activity {
+    <init>();
+  }
+  -keep public class * extends android.app.Service {
+    <init>();
+  }
+  -keep public class * extends android.content.ContentProvider {
+   <init>();
+  }
+  -keep public class * extends android.content.BroadcastReceiver {
+   <init>();
+  }
+
diff --git a/dx/etc/manifest.txt b/dx/etc/manifest.txt
new file mode 100644
index 0000000..46bbe63
--- /dev/null
+++ b/dx/etc/manifest.txt
@@ -0,0 +1 @@
+Main-Class: com.android.dx.command.Main
diff --git a/dx/junit-tests/Android.bp b/dx/junit-tests/Android.bp
new file mode 100644
index 0000000..0b9ee74
--- /dev/null
+++ b/dx/junit-tests/Android.bp
@@ -0,0 +1,27 @@
+// Copyright 2011 The Android Open Source Project
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "dalvik_dx_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["dalvik_dx_license"],
+}
+
+java_test_host {
+    name: "dx-tests",
+    srcs: ["**/*.java"],
+    // Avoid anything depending on this target
+    visibility: ["//visibility:private"],
+    java_version: "1.9",
+    static_libs: [
+        "dx",
+    ],
+    libs: [
+        "junit-host",
+    ],
+    test_options: {
+        unit_test: true,
+    },
+}
diff --git a/dx/junit-tests/com/android/dex/EncodedValueReaderTest.java b/dx/junit-tests/com/android/dex/EncodedValueReaderTest.java
new file mode 100644
index 0000000..a4ca376
--- /dev/null
+++ b/dx/junit-tests/com/android/dex/EncodedValueReaderTest.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.ByteArrayByteInput;
+import junit.framework.TestCase;
+
+public final class EncodedValueReaderTest extends TestCase {
+
+    public void testReadByte() {
+        assertEquals((byte) 0x80, readerOf(0, 0x80).readByte());
+        assertEquals((byte) 0xff, readerOf(0, 0xff).readByte());
+        assertEquals((byte) 0x00, readerOf(0, 0x00).readByte());
+        assertEquals((byte) 0x01, readerOf(0, 0x01).readByte());
+        assertEquals((byte) 0x7f, readerOf(0, 0x7f).readByte());
+    }
+
+    public void testReadShort() {
+        assertEquals((short) 0x8000, readerOf(34, 0x00, 0x80).readShort());
+        assertEquals((short)      0, readerOf( 2, 0x00).readShort());
+        assertEquals((short)   0xab, readerOf(34, 0xab, 0x00).readShort());
+        assertEquals((short) 0xabcd, readerOf(34, 0xcd, 0xab).readShort());
+        assertEquals((short) 0x7FFF, readerOf(34, 0xff, 0x7f).readShort());
+    }
+
+    public void testReadInt() {
+        assertEquals(0x80000000, readerOf(100, 0x00, 0x00, 0x00, 0x80).readInt());
+        assertEquals(      0x00, readerOf(  4, 0x00).readInt());
+        assertEquals(      0xab, readerOf( 36, 0xab, 0x00).readInt());
+        assertEquals(    0xabcd, readerOf( 68, 0xcd, 0xab, 0x00).readInt());
+        assertEquals(  0xabcdef, readerOf(100, 0xef, 0xcd, 0xab, 0x00).readInt());
+        assertEquals(0xabcdef01, readerOf(100, 0x01, 0xef, 0xcd, 0xab).readInt());
+        assertEquals(0x7fffffff, readerOf(100, 0xff, 0xff, 0xff, 127).readInt());
+    }
+
+    public void testReadLong() {
+        assertEquals(0x8000000000000000L, readerOf( -26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80).readLong());
+        assertEquals(              0x00L, readerOf(   6, 0x00).readLong());
+        assertEquals(              0xabL, readerOf(  38, 0xab, 0x00).readLong());
+        assertEquals(            0xabcdL, readerOf(  70, 0xcd, 0xab, 0x00).readLong());
+        assertEquals(          0xabcdefL, readerOf( 102, 0xef, 0xcd, 0xab, 0x00).readLong());
+        assertEquals(        0xabcdef01L, readerOf(-122, 0x01, 0xef, 0xcd, 0xab, 0x00).readLong());
+        assertEquals(      0xabcdef0123L, readerOf( -90, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x00).readLong());
+        assertEquals(    0xabcdef012345L, readerOf( -58, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x00).readLong());
+        assertEquals(  0xabcdef01234567L, readerOf( -26, 0x67, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x00).readLong());
+        assertEquals(0xabcdef0123456789L, readerOf( -26, 0x89, 0x67, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab).readLong());
+        assertEquals(0x7fffffffffffffffL, readerOf( -26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f).readLong());
+    }
+
+    public void testReadFloat() {
+        assertEquals(Float.NEGATIVE_INFINITY, readerOf(48, -128, -1).readFloat());
+        assertEquals(Float.POSITIVE_INFINITY, readerOf(48, -128, 127).readFloat());
+        assertEquals(Float.NaN, readerOf(48, -64, 127).readFloat());
+        assertEquals(-0.0f, readerOf(16, -128).readFloat());
+        assertEquals(0.0f, readerOf(16, 0).readFloat());
+        assertEquals(0.5f, readerOf(16, 63).readFloat());
+        assertEquals(1f, readerOf(48, -128, 63).readFloat());
+        assertEquals(1.0E06f, readerOf(80, 36, 116, 73).readFloat());
+        assertEquals(1.0E12f, readerOf(112, -91, -44, 104, 83).readFloat());
+    }
+
+    public void testReadDouble() {
+        assertEquals(Double.NEGATIVE_INFINITY, readerOf(49, -16, -1).readDouble());
+        assertEquals(Double.POSITIVE_INFINITY, readerOf(49, -16, 127).readDouble());
+        assertEquals(Double.NaN, readerOf(49, -8, 127).readDouble());
+        assertEquals(-0.0, readerOf(17, -128).readDouble());
+        assertEquals(0.0, readerOf(17, 0).readDouble());
+        assertEquals(0.5, readerOf(49, -32, 63).readDouble());
+        assertEquals(1.0, readerOf(49, -16, 63).readDouble());
+        assertEquals(1.0E06, readerOf(113, -128, -124, 46, 65).readDouble());
+        assertEquals(1.0E12, readerOf(-111, -94, -108, 26, 109, 66).readDouble());
+        assertEquals(1.0E24, readerOf(-15, -76, -99, -39, 121, 67, 120, -22, 68).readDouble());
+    }
+
+    public void testReadChar() {
+        assertEquals('\u0000', readerOf( 3, 0x00).readChar());
+        assertEquals('\u00ab', readerOf( 3, 0xab).readChar());
+        assertEquals('\uabcd', readerOf(35, 0xcd, 0xab).readChar());
+        assertEquals('\uffff', readerOf(35, 0xff, 0xff).readChar());
+    }
+
+    public void testReadBoolean() {
+        assertEquals(true, readerOf(63).readBoolean());
+        assertEquals(false, readerOf(31).readBoolean());
+    }
+
+    public void testReadNull() {
+        readerOf(30).readNull();
+    }
+
+    public void testReadReference() {
+        assertEquals(      0xab, readerOf(0x17, 0xab).readString());
+        assertEquals(    0xabcd, readerOf(0x37, 0xcd, 0xab).readString());
+        assertEquals(  0xabcdef, readerOf(0x57, 0xef, 0xcd, 0xab).readString());
+        assertEquals(0xabcdef01, readerOf(0x77, 0x01, 0xef, 0xcd, 0xab).readString());
+    }
+
+    public void testReadWrongType() {
+        try {
+            readerOf(0x17, 0xab).readField();
+            fail();
+        } catch (IllegalStateException expected) {
+        }
+    }
+
+    private EncodedValueReader readerOf(int... bytes) {
+        byte[] data = new byte[bytes.length];
+        for (int i = 0; i < bytes.length; i++) {
+            data[i] = (byte) bytes[i];
+        }
+        return new EncodedValueReader(new ByteArrayByteInput(data));
+    }
+}
diff --git a/dx/junit-tests/com/android/dx/merge/DexMergerTest.java b/dx/junit-tests/com/android/dx/merge/DexMergerTest.java
new file mode 100644
index 0000000..b9f0392
--- /dev/null
+++ b/dx/junit-tests/com/android/dx/merge/DexMergerTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import com.android.dex.Dex;
+import com.android.dx.command.Main;
+import com.android.dx.command.dexer.DxContext;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class DexMergerTest {
+    static class NoFieldsClassA {
+    }
+    static class NoFieldsClassB {
+    }
+
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+    @Test
+    public void test_merge_dexesWithEmptyFieldsSection() throws IOException {
+        List<Dex> outputDexes = new ArrayList<>();
+        outputDexes.add(getDexForClass(NoFieldsClassA.class));
+        outputDexes.add(getDexForClass(NoFieldsClassB.class));
+
+        Dex merged =
+                new DexMerger(
+                        outputDexes.toArray(new Dex[outputDexes.size()]),
+                        CollisionPolicy.FAIL,
+                        new DxContext())
+                        .merge();
+        assertNotNull(merged);
+        assertNotNull(merged.getTableOfContents());
+        assertEquals(0, merged.getTableOfContents().fieldIds.off);
+    }
+
+    private Dex getDexForClass(Class<?> clazz) throws IOException {
+        String path = clazz.getName().replace('.', '/') + ".class";
+        Path classesJar = temporaryFolder.newFile(clazz.getName() + ".jar").toPath();
+        try (InputStream in = getClass().getClassLoader().getResourceAsStream(path);
+             ZipOutputStream zip = new ZipOutputStream(Files.newOutputStream(classesJar))) {
+
+            ZipEntry entry = new ZipEntry(path);
+            zip.putNextEntry(entry);
+            zip.write(readEntireStream(in));
+            zip.closeEntry();
+        }
+
+        Path output = temporaryFolder.newFolder().toPath();
+        Main.main(new String[]{"--dex", "--output=" + output.toString(), classesJar.toString()});
+
+        return new Dex(Files.readAllBytes(output.resolve("classes.dex")));
+    }
+
+    private static byte[] readEntireStream(InputStream inputStream) throws IOException {
+        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
+        byte[] buffer = new byte[8192];
+
+        int count;
+        while ((count = inputStream.read(buffer)) != -1) {
+            bytesOut.write(buffer, 0, count);
+        }
+
+        return bytesOut.toByteArray();
+    }
+}
diff --git a/dx/junit-tests/com/android/dx/rop/cst/CstTypeTest.java b/dx/junit-tests/com/android/dx/rop/cst/CstTypeTest.java
new file mode 100644
index 0000000..e0a0295
--- /dev/null
+++ b/dx/junit-tests/com/android/dx/rop/cst/CstTypeTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class CstTypeTest {
+
+
+    @Test
+    public void checkClearInternTable() {
+        CstType boolArray = CstType.BOOLEAN_ARRAY;
+        assertTrue(boolArray == CstType.intern(Type.BOOLEAN_ARRAY));
+        CstType myClass = CstType.intern(Type.intern("Lcom/example/Foo;"));
+
+        CstType.clearInternTable();
+        Type.clearInternTable();
+
+        assertTrue(boolArray == CstType.intern(Type.BOOLEAN_ARRAY));
+        CstType myClass2 = CstType.intern(Type.intern("Lcom/example/Foo;"));
+        assertEquals(myClass.getClassType(), myClass2.getClassType());
+        assertFalse(myClass == myClass2);
+    }
+}
\ No newline at end of file
diff --git a/dx/junit-tests/com/android/dx/rop/type/TypeTest.java b/dx/junit-tests/com/android/dx/rop/type/TypeTest.java
new file mode 100644
index 0000000..d7f465f
--- /dev/null
+++ b/dx/junit-tests/com/android/dx/rop/type/TypeTest.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+*/
+
+package com.android.dx.rop.type;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class TypeTest {
+
+    @Test
+    public void testClearInternTable() {
+        Type boolArray = Type.BOOLEAN.getArrayType();
+        assertTrue(boolArray == Type.BOOLEAN_ARRAY);
+        assertTrue(boolArray == Type.intern("[Z"));
+        Type myClass = Type.intern("Lcom/example/Foo;");
+
+        Type.clearInternTable();
+
+        assertTrue(boolArray == Type.intern("[Z"));
+        Type myClass2 = Type.intern("Lcom/example/Foo;");
+        assertEquals(myClass, myClass2);
+        assertFalse(myClass == myClass2);
+    }
+}
\ No newline at end of file
diff --git a/dx/junit-tests/com/android/dx/util/BitIntSetTest.java b/dx/junit-tests/com/android/dx/util/BitIntSetTest.java
new file mode 100644
index 0000000..d46d14f
--- /dev/null
+++ b/dx/junit-tests/com/android/dx/util/BitIntSetTest.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.util.NoSuchElementException;
+import junit.framework.TestCase;
+
+public final class BitIntSetTest extends TestCase {
+    public void test_basic() {
+        BitIntSet set = new BitIntSet(32);
+
+        assertEquals(0, set.elements());
+
+        set.add(0);
+        set.add(1);
+        set.add(31);
+
+        assertTrue(set.has(0));
+        assertTrue(set.has(1));
+        assertTrue(set.has(31));
+
+        assertEquals(3, set.elements());
+
+        assertFalse(set.has(2));
+        assertFalse(set.has(7));
+        assertFalse(set.has(30));
+    }
+
+    public void test_iterator() {
+        BitIntSet set = new BitIntSet(32);
+
+        set.add(0);
+        set.add(0);
+        set.add(1);
+        set.add(1);
+        set.add(31);
+        set.add(31);
+
+        IntIterator iter = set.iterator();
+
+        assertTrue(iter.hasNext());
+        assertEquals(iter.next(), 0);
+        assertTrue(iter.hasNext());
+        assertEquals(iter.next(), 1);
+        assertTrue(iter.hasNext());
+        assertEquals(iter.next(), 31);
+
+        assertFalse(iter.hasNext());
+
+        try {
+            iter.next();
+            fail();
+        } catch (NoSuchElementException ex) {
+            // exception excepted
+        }
+    }
+
+    public void test_remove() {
+        BitIntSet set = new BitIntSet(32);
+
+        set.add(0);
+        set.add(1);
+        set.add(31);
+
+        assertTrue(set.has(0));
+        assertTrue(set.has(1));
+        assertTrue(set.has(31));
+
+        assertFalse(set.has(2));
+        assertFalse(set.has(7));
+        assertFalse(set.has(30));
+
+        set.remove(0);
+
+        assertFalse(set.has(0));
+
+        assertTrue(set.has(1));
+        assertTrue(set.has(31));
+    }
+
+    /**
+     * Tests the auto-expansion of the set
+     */
+    public void test_expand() {
+        BitIntSet set = new BitIntSet(32);
+        int[] values = {0, 1, 31, 32, 128};
+
+        for (int i = 0; i < values.length; i++) {
+            set.add(values[i]);
+        }
+
+        IntIterator iter = set.iterator();
+
+        for (int i = 0; i < values.length; i++) {
+            assertTrue(iter.hasNext());
+            assertEquals(values[i], iter.next());
+        }
+        assertFalse(iter.hasNext());
+    }
+
+    public void test_merge() {
+        BitIntSet setA = new BitIntSet(32);
+        int[] valuesA = {0, 1, 31};
+
+        for (int i = 0; i < valuesA.length; i++) {
+            setA.add(valuesA[i]);
+        }
+
+        BitIntSet setB = new BitIntSet(32);
+        int[] valuesB = {0, 5, 6, 8, 31};
+
+        for (int i = 0; i < valuesB.length; i++) {
+            setB.add(valuesB[i]);
+        }
+
+        setA.merge(setB);
+
+        for (int i = 0; i < valuesA.length; i++) {
+            assertTrue(setA.has(valuesA[i]));
+        }
+
+        for (int i = 0; i < valuesB.length; i++) {
+            assertTrue(setA.has(valuesB[i]));
+        }
+    }
+
+    public void test_mergeWithListIntSet() {
+        BitIntSet setA = new BitIntSet(32);
+        int[] valuesA = {0, 1, 31};
+
+        for (int i = 0; i < valuesA.length; i++) {
+            setA.add(valuesA[i]);
+        }
+
+        ListIntSet setB = new ListIntSet();
+        int[] valuesB = {0, 5, 6, 8, 31};
+
+        for (int i = 0; i < valuesB.length; i++) {
+            setB.add(valuesB[i]);
+        }
+
+        setA.merge(setB);
+
+        for (int i = 0; i < valuesA.length; i++) {
+            assertTrue(setA.has(valuesA[i]));
+        }
+
+        for (int i = 0; i < valuesB.length; i++) {
+            assertTrue(setA.has(valuesB[i]));
+        }
+    }
+
+    public void test_mergeAndExpand() {
+        BitIntSet setA = new BitIntSet(32);
+        int[] valuesA = {0, 1, 31};
+
+        for (int i = 0; i < valuesA.length; i++) {
+            setA.add(valuesA[i]);
+        }
+
+        BitIntSet setB = new BitIntSet(32);
+        int[] valuesB = {0, 5, 6, 32, 127};
+
+        for (int i = 0; i < valuesB.length; i++) {
+            setB.add(valuesB[i]);
+        }
+
+        setA.merge(setB);
+
+        for (int i = 0; i < valuesA.length; i++) {
+            assertTrue(setA.has(valuesA[i]));
+        }
+
+        for (int i = 0; i < valuesB.length; i++) {
+            assertTrue(setA.has(valuesB[i]));
+        }
+    }
+
+    public void test_toString() {
+        BitIntSet set = new BitIntSet(32);
+
+        assertEquals(set.toString(), "{}");
+
+        set.add(1);
+
+        assertEquals(set.toString(), "{1}");
+
+        set.add(2);
+
+        assertEquals(set.toString(), "{1, 2}");
+    }
+}
diff --git a/dx/junit-tests/com/android/dx/util/BitsTest.java b/dx/junit-tests/com/android/dx/util/BitsTest.java
new file mode 100644
index 0000000..e427513
--- /dev/null
+++ b/dx/junit-tests/com/android/dx/util/BitsTest.java
@@ -0,0 +1,345 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import junit.framework.TestCase;
+
+public final class BitsTest extends TestCase {
+    public void test_makeBitSet() {
+        assertEquals(label(0), 0, Bits.makeBitSet(0).length);
+
+        for (int i = 1; i <= 32; i++) {
+            assertEquals(label(i), 1, Bits.makeBitSet(i).length);
+        }
+
+        for (int i = 33; i <= 64; i++) {
+            assertEquals(label(i), 2, Bits.makeBitSet(i).length);
+        }
+
+        for (int i = 65; i < 4000; i += 101) {
+            int expect = i >> 5;
+            if ((expect * 32) < i) {
+                expect++;
+            }
+            assertEquals(label(i), expect, Bits.makeBitSet(i).length);
+        }
+    }
+
+    public void test_getMax() {
+        for (int i = 0; i < 4000; i += 59) {
+            int expect = i >> 5;
+            if ((expect * 32) < i) {
+                expect++;
+            }
+            assertEquals(label(i), expect * 32,
+                         Bits.getMax(new int[expect]));
+        }
+    }
+
+    public void test1_get() {
+        int[] bits = Bits.makeBitSet(100);
+
+        for (int i = 0; i < 100; i++) {
+            assertFalse(label(i), Bits.get(bits, i));
+        }
+    }
+
+    public void test2_get() {
+        int[] bits = Bits.makeBitSet(100);
+        for (int i = 0; i < bits.length; i++) {
+            bits[i] = -1;
+        }
+
+        for (int i = 0; i < 100; i++) {
+            assertTrue(label(i), Bits.get(bits, i));
+        }
+    }
+
+    public void test3_get() {
+        int[] bits = Bits.makeBitSet(100);
+
+        for (int i = 0; i < 100; i++) {
+            Bits.set(bits, i, (i % 5) == 0);
+        }
+
+        for (int i = 0; i < 100; i++) {
+            boolean expect = (i % 5) == 0;
+            assertTrue(label(i), Bits.get(bits, i) == expect);
+        }
+    }
+
+    public void test1_set1() {
+        int[] bits = Bits.makeBitSet(50);
+        bits[1] = -1;
+
+        Bits.set(bits, 0, true);
+        Bits.set(bits, 3, true);
+        Bits.set(bits, 6, true);
+        Bits.set(bits, 3, false);
+        Bits.set(bits, 35, false);
+        Bits.set(bits, 38, false);
+        Bits.set(bits, 42, false);
+        Bits.set(bits, 38, true);
+
+        assertEquals(label(1), 0x41, bits[0]);
+        assertEquals(label(2), 0xfffffbf7, bits[1]);
+    }
+
+    public void test2_set1() {
+        int[] bits = Bits.makeBitSet(100);
+
+        for (int i = 0; i < 100; i++) {
+            if ((i % 3) == 0) {
+                Bits.set(bits, i, true);
+            }
+        }
+
+        for (int i = 0; i < 100; i++) {
+            if ((i % 5) == 0) {
+                Bits.set(bits, i, false);
+            }
+        }
+
+        for (int i = 0; i < 100; i++) {
+            if ((i % 7) == 0) {
+                Bits.set(bits, i, true);
+            }
+        }
+
+        for (int i = 0; i < 100; i++) {
+            boolean expect = ((i % 7) == 0) ||
+                (((i % 3) == 0) && ((i % 5) != 0));
+            assertTrue(label(i), Bits.get(bits, i) == expect);
+        }
+    }
+
+    public void test_set2() {
+        int[] bits = Bits.makeBitSet(100);
+
+        for (int i = 0; i < 100; i++) {
+            if ((i % 11) == 0) {
+                Bits.set(bits, i);
+            }
+        }
+
+        for (int i = 0; i < 100; i++) {
+            boolean expect = (i % 11) == 0;
+            assertTrue(label(i), Bits.get(bits, i) == expect);
+        }
+    }
+
+    public void test_clear() {
+        int[] bits = Bits.makeBitSet(100);
+        for (int i = 0; i < bits.length; i++) {
+            bits[i] = -1;
+        }
+
+        for (int i = 0; i < 100; i++) {
+            if ((i % 5) == 0) {
+                Bits.clear(bits, i);
+            }
+        }
+
+        for (int i = 0; i < 100; i++) {
+            boolean expect = (i % 5) != 0;
+            assertTrue(label(i), Bits.get(bits, i) == expect);
+        }
+    }
+
+    public void test1_isEmpty() {
+        for (int i = 0; i < 10; i++) {
+            assertTrue(label(i), Bits.isEmpty(new int[i]));
+        }
+    }
+
+    public void test2_isEmpty() {
+        for (int i = 1; i < 1000; i += 11) {
+            int[] bits = Bits.makeBitSet(i);
+            for (int j = i % 11; j >= 0; j--) {
+                int x = i - 1 - (j * 13);
+                if (x >= 0) {
+                    Bits.set(bits, x);
+                }
+            }
+            assertFalse(label(i), Bits.isEmpty(bits));
+        }
+    }
+
+    public void test1_bitCount() {
+        for (int i = 0; i < 10; i++) {
+            assertEquals(label(i), 0, Bits.bitCount(new int[i]));
+        }
+    }
+
+    public void test2_bitCount() {
+        for (int i = 1; i < 1000; i += 13) {
+            int[] bits = Bits.makeBitSet(i);
+            int count = 0;
+            for (int j = 0; j < i; j += 20) {
+                Bits.set(bits, j);
+                count++;
+            }
+            for (int j = 7; j < i; j += 11) {
+                if (!Bits.get(bits, j)) {
+                    Bits.set(bits, j);
+                    count++;
+                }
+            }
+            for (int j = 3; j < i; j += 17) {
+                if (!Bits.get(bits, j)) {
+                    Bits.set(bits, j);
+                    count++;
+                }
+            }
+            assertEquals(label(i), count, Bits.bitCount(bits));
+        }
+    }
+
+    public void test1_anyInRange() {
+        int[] bits = new int[100];
+
+        for (int i = 0; i < 100; i += 11) {
+            assertFalse(label(i), Bits.anyInRange(bits, 0, i));
+        }
+    }
+
+    public void test2_anyInRange() {
+        int[] bits = new int[100];
+
+        for (int i = 0; i < 100; i += 11) {
+            assertFalse(label(i), Bits.anyInRange(bits, i, 100));
+        }
+    }
+
+    public void test3_anyInRange() {
+        int[] bits = new int[100];
+
+        for (int i = 0; i < 50; i += 7) {
+            assertFalse(label(i), Bits.anyInRange(bits, i, 100 - i));
+        }
+    }
+
+    public void test4_anyInRange() {
+        int[] bits = new int[100];
+        for (int i = 0; i < bits.length; i++) {
+            bits[i] = -1;
+        }
+
+        for (int i = 1; i < 100; i += 11) {
+            assertTrue(label(i), Bits.anyInRange(bits, 0, i));
+        }
+    }
+
+    public void test5_anyInRange() {
+        int[] bits = new int[100];
+        for (int i = 0; i < bits.length; i++) {
+            bits[i] = -1;
+        }
+
+        for (int i = 1; i < 100; i += 11) {
+            assertTrue(label(i), Bits.anyInRange(bits, i, 100));
+        }
+    }
+
+    public void test6_anyInRange() {
+        int[] bits = new int[100];
+        for (int i = 0; i < bits.length; i++) {
+            bits[i] = -1;
+        }
+
+        for (int i = 0; i < 50; i += 7) {
+            assertTrue(label(i), Bits.anyInRange(bits, i, 100 - i));
+        }
+    }
+
+    public void test1_findFirst1() {
+        int[] bits = new int[100];
+
+        for (int i = 0; i < 100; i++) {
+            assertEquals(label(i), -1, Bits.findFirst(bits, i));
+        }
+    }
+
+    public void test2_findFirst1() {
+        int[] bits = new int[100];
+        for (int i = 0; i < bits.length; i++) {
+            bits[i] = -1;
+        }
+
+        for (int i = 0; i < 100; i++) {
+            assertEquals(label(i), i, Bits.findFirst(bits, i));
+        }
+    }
+
+    public void test3_findFirst1() {
+        int[] bits = new int[100];
+
+        for (int i = 25; i < 80; i++) {
+            for (int j = 0; j < bits.length; j++) {
+                bits[j] = 0;
+            }
+
+            Bits.set(bits, i - 5);
+            Bits.set(bits, i + 5);
+            Bits.set(bits, i + 10);
+            Bits.set(bits, i + 20);
+            assertEquals(label(i), i + 5, Bits.findFirst(bits, i));
+        }
+    }
+
+    public void test1_findFirst2() {
+        for (int i = 0; i < 32; i++) {
+            assertEquals(label(i), -1, Bits.findFirst(0, i));
+        }
+    }
+
+    public void test2_findFirst2() {
+        for (int i = 0; i < 32; i++) {
+            assertEquals(label(i), i, Bits.findFirst(-1, i));
+        }
+    }
+
+    public void test3_findFirst2() {
+        for (int i = 0; i < 32; i++) {
+            assertEquals(label(i), -1, Bits.findFirst((1 << i) >>> 1, i));
+        }
+    }
+
+    public void test4_findFirst2() {
+        for (int i = 0; i < 32; i++) {
+            assertEquals(label(i), i, Bits.findFirst(1 << i, i));
+        }
+    }
+
+    public void test5_findFirst2() {
+        for (int i = 0; i < 31; i++) {
+            assertEquals(label(i), i + 1, Bits.findFirst(1 << (i + 1), i));
+        }
+    }
+
+    public void test6_findFirst2() {
+        for (int i = 0; i < 32; i++) {
+            int value = (1 << i);
+            value |= (value >>> 1);
+            assertEquals(label(i), i, Bits.findFirst(value, i));
+        }
+    }
+
+    private static String label(int n) {
+        return "(" + n + ")";
+    }
+}
diff --git a/dx/junit-tests/com/android/dx/util/ByteArrayAnnotatedOutputTest.java b/dx/junit-tests/com/android/dx/util/ByteArrayAnnotatedOutputTest.java
new file mode 100644
index 0000000..da5a1df
--- /dev/null
+++ b/dx/junit-tests/com/android/dx/util/ByteArrayAnnotatedOutputTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import org.junit.Test;
+
+public final class ByteArrayAnnotatedOutputTest {
+    @Test
+    public void testArrayZeroedOut() {
+        int length = 100;
+        byte[] data = new byte[length];
+        Arrays.fill(data, (byte) 0xFF);
+
+        ByteArrayAnnotatedOutput output = new ByteArrayAnnotatedOutput(data);
+
+        output.writeZeroes(length);
+
+        for (int i = 0; i < length; i++) {
+            assertEquals("Position " + i + " has not been zeroed out", 0, data[i]);
+        }
+    }
+
+    @Test
+    public void testArrayAligned() {
+        int length = 16;
+        byte[] data = new byte[length];
+        Arrays.fill(data, (byte) 0xFF);
+
+        ByteArrayAnnotatedOutput output = new ByteArrayAnnotatedOutput(data);
+
+        // write at least one byte, so alignment is not correct
+        output.writeByte(0);
+        output.alignTo(length);
+
+        for (int i = 0; i < length; i++) {
+            assertEquals("Position " + i + " has not been zeroed out", 0, data[i]);
+        }
+    }
+}
diff --git a/dx/junit-tests/com/android/dx/util/IntListTest.java b/dx/junit-tests/com/android/dx/util/IntListTest.java
new file mode 100644
index 0000000..7a53a67
--- /dev/null
+++ b/dx/junit-tests/com/android/dx/util/IntListTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import junit.framework.TestCase;
+
+public final class IntListTest extends TestCase {
+    public void test_contains() {
+        for (int sz = 0; sz < 100; sz++) {
+            IntList list = new IntList(sz);
+            for (int i = 0; i < sz; i++) {
+                list.add(i * 2);
+            }
+            for (int i = (sz * 2) - 1; i >= 0; i--) {
+                boolean contains = list.contains(i);
+                if ((i & 1) == 0) {
+                    assertTrue(label(sz, i), contains);
+                } else {
+                    assertFalse(label(sz, i), contains);
+                }
+            }
+            assertFalse(label(sz, -1), list.contains(-1));
+            assertFalse(label(sz, sz * 2), list.contains(sz * 2));
+        }
+    }
+
+    public void test_addSorted() {
+        IntList list = new IntList(2);
+
+        list.add(9);
+        list.add(12);
+
+        assertTrue(list.contains(9));
+        assertTrue(list.contains(12));
+    }
+
+    public void test_addUnsorted() {
+        IntList list = new IntList(2);
+
+        list.add(12);
+        list.add(9);
+
+        assertTrue(list.contains(12));
+        assertTrue(list.contains(9));
+    }
+
+    private static String label(int n, int m) {
+        return "(" + n + "/" + m + ")";
+    }
+}
diff --git a/dx/junit-tests/com/android/dx/util/ListIntSetTest.java b/dx/junit-tests/com/android/dx/util/ListIntSetTest.java
new file mode 100644
index 0000000..868e630
--- /dev/null
+++ b/dx/junit-tests/com/android/dx/util/ListIntSetTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.util.NoSuchElementException;
+import junit.framework.TestCase;
+
+public final class ListIntSetTest extends TestCase {
+    public void test_basic() {
+        ListIntSet set = new ListIntSet();
+
+        assertEquals(0, set.elements());
+
+        set.add(31);
+        set.add(0);
+        set.add(1);
+
+        assertTrue(set.has(0));
+        assertTrue(set.has(1));
+        assertTrue(set.has(31));
+
+        assertEquals(3, set.elements());
+
+        assertFalse(set.has(2));
+        assertFalse(set.has(7));
+        assertFalse(set.has(30));
+    }
+
+    public void test_iterator() {
+        ListIntSet set = new ListIntSet();
+
+        set.add(0);
+        set.add(0);
+        set.add(1);
+        set.add(1);
+        set.add(31);
+        set.add(31);
+
+        IntIterator iter = set.iterator();
+
+        assertTrue(iter.hasNext());
+        assertEquals(iter.next(), 0);
+        assertTrue(iter.hasNext());
+        assertEquals(iter.next(), 1);
+        assertTrue(iter.hasNext());
+        assertEquals(iter.next(), 31);
+
+        assertFalse(iter.hasNext());
+
+        try {
+            iter.next();
+            fail();
+        } catch (NoSuchElementException ex) {
+            // exception excepted
+        }
+    }
+
+    public void test_empty() {
+        ListIntSet set = new ListIntSet();
+
+        IntIterator iter = set.iterator();
+
+        assertFalse(iter.hasNext());
+    }
+
+    public void test_remove() {
+        ListIntSet set = new ListIntSet();
+
+        set.add(0);
+        set.add(1);
+        set.add(31);
+
+        assertTrue(set.has(0));
+        assertTrue(set.has(1));
+        assertTrue(set.has(31));
+
+        assertFalse(set.has(2));
+        assertFalse(set.has(7));
+        assertFalse(set.has(30));
+
+        set.remove(0);
+
+        assertFalse(set.has(0));
+
+        assertTrue(set.has(1));
+        assertTrue(set.has(31));
+    }
+
+    public void test_mergeA() {
+        ListIntSet setA = new ListIntSet();
+        int[] valuesA = {0, 1, 31};
+
+        for (int i = 0; i < valuesA.length; i++) {
+            setA.add(valuesA[i]);
+        }
+
+        ListIntSet setB = new ListIntSet();
+        int[] valuesB = {0, 5, 6, 32, 127, 128};
+
+        for (int i = 0; i < valuesB.length; i++) {
+            setB.add(valuesB[i]);
+        }
+
+        setA.merge(setB);
+
+        for (int i = 0; i < valuesA.length; i++) {
+            assertTrue(setA.has(valuesA[i]));
+        }
+
+        for (int i = 0; i < valuesB.length; i++) {
+            assertTrue(setA.has(valuesB[i]));
+        }
+
+    }
+
+    public void test_mergeB() {
+        ListIntSet setA = new ListIntSet();
+        int[] valuesA = {0, 1, 31, 129, 130};
+
+        for (int i = 0; i < valuesA.length; i++) {
+            setA.add(valuesA[i]);
+        }
+
+        ListIntSet setB = new ListIntSet();
+        int[] valuesB = {0, 5, 6, 32, 127,128};
+
+        for (int i = 0; i < valuesB.length; i++) {
+            setB.add(valuesB[i]);
+        }
+
+        setA.merge(setB);
+
+        for (int i = 0; i < valuesA.length; i++) {
+            assertTrue(setA.has(valuesA[i]));
+        }
+
+        for (int i = 0; i < valuesB.length; i++) {
+            assertTrue(setA.has(valuesB[i]));
+        }
+
+    }
+
+    public void test_mergeWithBitIntSet() {
+        ListIntSet setA = new ListIntSet();
+        int[] valuesA = {0, 1, 31, 129, 130};
+
+        for (int i = 0; i < valuesA.length; i++) {
+            setA.add(valuesA[i]);
+        }
+
+        BitIntSet setB = new BitIntSet(129);
+        int[] valuesB = {0, 5, 6, 32, 127,128};
+
+        for (int i = 0; i < valuesB.length; i++) {
+            setB.add(valuesB[i]);
+        }
+
+        setA.merge(setB);
+
+        for (int i = 0; i < valuesA.length; i++) {
+            assertTrue(setA.has(valuesA[i]));
+        }
+
+        for (int i = 0; i < valuesB.length; i++) {
+            assertTrue(setA.has(valuesB[i]));
+        }
+
+    }
+
+    public void test_toString() {
+        ListIntSet set = new ListIntSet();
+
+        assertEquals(set.toString(), "{}");
+
+        set.add(1);
+
+        assertEquals(set.toString(), "{1}");
+
+        set.add(2);
+
+        assertEquals(set.toString(), "{1, 2}");
+    }
+
+}
diff --git a/dx/shrinkedAndroid.proguard.flags b/dx/shrinkedAndroid.proguard.flags
new file mode 100644
index 0000000..d248a4a
--- /dev/null
+++ b/dx/shrinkedAndroid.proguard.flags
@@ -0,0 +1,40 @@
+-dontwarn
+-forceprocessing
+-dontoptimize
+-dontobfuscate
+-dontpreverify
+-keep public class * extends android.app.Instrumentation {
+}
+-keep public class android.app.Instrumentation {
+}
+-keep public class * extends android.app.Application {
+}
+-keep public class android.app.Application {
+}
+-keep public class * extends android.app.Activity {
+}
+-keep public class android.app.Activity {
+}
+-keep public class * extends android.app.Service {
+}
+-keep public class android.app.Service {
+}
+-keep public class * extends android.content.ContentProvider {
+}
+-keep public class android.content.ContentProvider {
+}
+-keep public class * extends android.content.BroadcastReceiver {
+}
+-keep public class android.content.BroadcastReceiver {
+}
+-keep public class * extends android.app.backup.BackupAgent {
+}
+-keep public class android.app.backup.BackupAgent {
+}
+-keep public class java.lang.annotation.Annotation {
+}
+-keep public class * extends android.test.InstrumentationTestCase {
+}
+-keep public class android.test.InstrumentationTestCase {
+}
+
diff --git a/dx/src/Android.bp b/dx/src/Android.bp
new file mode 100644
index 0000000..95c68e9
--- /dev/null
+++ b/dx/src/Android.bp
@@ -0,0 +1,39 @@
+// Copyright (C) 2006 The Android Open Source Project
+//
+// 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.
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "dalvik_dx_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["dalvik_dx_license"],
+}
+
+droidstubs_host {
+    name: "dx-doc-stubs",
+    srcs: [
+        "com/**/*.java",
+    ],
+    args: "--hidden",
+    create_doc_stubs: true,
+    product_variables: {
+        pdk: {
+            enabled: false,
+        },
+        unbundled_build: {
+            enabled: false,
+        },
+    },
+}
diff --git a/dx/src/com/android/dex/Annotation.java b/dx/src/com/android/dex/Annotation.java
new file mode 100644
index 0000000..e9627ac
--- /dev/null
+++ b/dx/src/com/android/dex/Annotation.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import static com.android.dex.EncodedValueReader.ENCODED_ANNOTATION;
+
+/**
+ * An annotation.
+ */
+public final class Annotation implements Comparable<Annotation> {
+    private final Dex dex;
+    private final byte visibility;
+    private final EncodedValue encodedAnnotation;
+
+    public Annotation(Dex dex, byte visibility, EncodedValue encodedAnnotation) {
+        this.dex = dex;
+        this.visibility = visibility;
+        this.encodedAnnotation = encodedAnnotation;
+    }
+
+    public byte getVisibility() {
+        return visibility;
+    }
+
+    public EncodedValueReader getReader() {
+        return new EncodedValueReader(encodedAnnotation, ENCODED_ANNOTATION);
+    }
+
+    public int getTypeIndex() {
+        EncodedValueReader reader = getReader();
+        reader.readAnnotation();
+        return reader.getAnnotationType();
+    }
+
+    public void writeTo(Dex.Section out) {
+        out.writeByte(visibility);
+        encodedAnnotation.writeTo(out);
+    }
+
+    @Override
+    public int compareTo(Annotation other) {
+        return encodedAnnotation.compareTo(other.encodedAnnotation);
+    }
+
+    @Override
+    public String toString() {
+        return dex == null
+                ? visibility + " " + getTypeIndex()
+                : visibility + " " + dex.typeNames().get(getTypeIndex());
+    }
+}
diff --git a/dx/src/com/android/dex/CallSiteId.java b/dx/src/com/android/dex/CallSiteId.java
new file mode 100644
index 0000000..6c9a623
--- /dev/null
+++ b/dx/src/com/android/dex/CallSiteId.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.Dex.Section;
+import com.android.dex.util.Unsigned;
+
+/**
+ * A call_site_id_item: https://source.android.com/devices/tech/dalvik/dex-format#call-site-id-item
+ */
+public class CallSiteId implements Comparable<CallSiteId> {
+
+    private final Dex dex;
+    private final int offset;
+
+    public CallSiteId(Dex dex, int offset) {
+        this.dex = dex;
+        this.offset = offset;
+    }
+
+    @Override
+    public int compareTo(CallSiteId o) {
+        return Unsigned.compare(offset, o.offset);
+    }
+
+    public int getCallSiteOffset() {
+        return offset;
+    }
+
+    public void writeTo(Section out) {
+        out.writeInt(offset);
+    }
+
+    @Override
+    public String toString() {
+        if (dex == null) {
+            return String.valueOf(offset);
+        }
+        return dex.protoIds().get(offset).toString();
+    }
+}
diff --git a/dx/src/com/android/dex/ClassData.java b/dx/src/com/android/dex/ClassData.java
new file mode 100644
index 0000000..840756c
--- /dev/null
+++ b/dx/src/com/android/dex/ClassData.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+public final class ClassData {
+    private final Field[] staticFields;
+    private final Field[] instanceFields;
+    private final Method[] directMethods;
+    private final Method[] virtualMethods;
+
+    public ClassData(Field[] staticFields, Field[] instanceFields,
+            Method[] directMethods, Method[] virtualMethods) {
+        this.staticFields = staticFields;
+        this.instanceFields = instanceFields;
+        this.directMethods = directMethods;
+        this.virtualMethods = virtualMethods;
+    }
+
+    public Field[] getStaticFields() {
+        return staticFields;
+    }
+
+    public Field[] getInstanceFields() {
+        return instanceFields;
+    }
+
+    public Method[] getDirectMethods() {
+        return directMethods;
+    }
+
+    public Method[] getVirtualMethods() {
+        return virtualMethods;
+    }
+
+    public Field[] allFields() {
+        Field[] result = new Field[staticFields.length + instanceFields.length];
+        System.arraycopy(staticFields, 0, result, 0, staticFields.length);
+        System.arraycopy(instanceFields, 0, result, staticFields.length, instanceFields.length);
+        return result;
+    }
+
+    public Method[] allMethods() {
+        Method[] result = new Method[directMethods.length + virtualMethods.length];
+        System.arraycopy(directMethods, 0, result, 0, directMethods.length);
+        System.arraycopy(virtualMethods, 0, result, directMethods.length, virtualMethods.length);
+        return result;
+    }
+
+    public static class Field {
+        private final int fieldIndex;
+        private final int accessFlags;
+
+        public Field(int fieldIndex, int accessFlags) {
+            this.fieldIndex = fieldIndex;
+            this.accessFlags = accessFlags;
+        }
+
+        public int getFieldIndex() {
+            return fieldIndex;
+        }
+
+        public int getAccessFlags() {
+            return accessFlags;
+        }
+    }
+
+    public static class Method {
+        private final int methodIndex;
+        private final int accessFlags;
+        private final int codeOffset;
+
+        public Method(int methodIndex, int accessFlags, int codeOffset) {
+            this.methodIndex = methodIndex;
+            this.accessFlags = accessFlags;
+            this.codeOffset = codeOffset;
+        }
+
+        public int getMethodIndex() {
+            return methodIndex;
+        }
+
+        public int getAccessFlags() {
+            return accessFlags;
+        }
+
+        public int getCodeOffset() {
+            return codeOffset;
+        }
+    }
+}
diff --git a/dx/src/com/android/dex/ClassDef.java b/dx/src/com/android/dex/ClassDef.java
new file mode 100644
index 0000000..4432e14
--- /dev/null
+++ b/dx/src/com/android/dex/ClassDef.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+/**
+ * A type definition.
+ */
+public final class ClassDef {
+    public static final int NO_INDEX = -1;
+    private final Dex buffer;
+    private final int offset;
+    private final int typeIndex;
+    private final int accessFlags;
+    private final int supertypeIndex;
+    private final int interfacesOffset;
+    private final int sourceFileIndex;
+    private final int annotationsOffset;
+    private final int classDataOffset;
+    private final int staticValuesOffset;
+
+    public ClassDef(Dex buffer, int offset, int typeIndex, int accessFlags,
+            int supertypeIndex, int interfacesOffset, int sourceFileIndex,
+            int annotationsOffset, int classDataOffset, int staticValuesOffset) {
+        this.buffer = buffer;
+        this.offset = offset;
+        this.typeIndex = typeIndex;
+        this.accessFlags = accessFlags;
+        this.supertypeIndex = supertypeIndex;
+        this.interfacesOffset = interfacesOffset;
+        this.sourceFileIndex = sourceFileIndex;
+        this.annotationsOffset = annotationsOffset;
+        this.classDataOffset = classDataOffset;
+        this.staticValuesOffset = staticValuesOffset;
+    }
+
+    public int getOffset() {
+        return offset;
+    }
+
+    public int getTypeIndex() {
+        return typeIndex;
+    }
+
+    public int getSupertypeIndex() {
+        return supertypeIndex;
+    }
+
+    public int getInterfacesOffset() {
+        return interfacesOffset;
+    }
+
+    public short[] getInterfaces() {
+        return buffer.readTypeList(interfacesOffset).getTypes();
+    }
+
+    public int getAccessFlags() {
+        return accessFlags;
+    }
+
+    public int getSourceFileIndex() {
+        return sourceFileIndex;
+    }
+
+    public int getAnnotationsOffset() {
+        return annotationsOffset;
+    }
+
+    public int getClassDataOffset() {
+        return classDataOffset;
+    }
+
+    public int getStaticValuesOffset() {
+        return staticValuesOffset;
+    }
+
+    @Override
+    public String toString() {
+        if (buffer == null) {
+            return typeIndex + " " + supertypeIndex;
+        }
+
+        StringBuilder result = new StringBuilder();
+        result.append(buffer.typeNames().get(typeIndex));
+        if (supertypeIndex != NO_INDEX) {
+            result.append(" extends ").append(buffer.typeNames().get(supertypeIndex));
+        }
+        return result.toString();
+    }
+}
diff --git a/dx/src/com/android/dex/Code.java b/dx/src/com/android/dex/Code.java
new file mode 100644
index 0000000..9258af7
--- /dev/null
+++ b/dx/src/com/android/dex/Code.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+public final class Code {
+    private final int registersSize;
+    private final int insSize;
+    private final int outsSize;
+    private final int debugInfoOffset;
+    private final short[] instructions;
+    private final Try[] tries;
+    private final CatchHandler[] catchHandlers;
+
+    public Code(int registersSize, int insSize, int outsSize, int debugInfoOffset,
+            short[] instructions, Try[] tries, CatchHandler[] catchHandlers) {
+        this.registersSize = registersSize;
+        this.insSize = insSize;
+        this.outsSize = outsSize;
+        this.debugInfoOffset = debugInfoOffset;
+        this.instructions = instructions;
+        this.tries = tries;
+        this.catchHandlers = catchHandlers;
+    }
+
+    public int getRegistersSize() {
+        return registersSize;
+    }
+
+    public int getInsSize() {
+        return insSize;
+    }
+
+    public int getOutsSize() {
+        return outsSize;
+    }
+
+    public int getDebugInfoOffset() {
+        return debugInfoOffset;
+    }
+
+    public short[] getInstructions() {
+        return instructions;
+    }
+
+    public Try[] getTries() {
+        return tries;
+    }
+
+    public CatchHandler[] getCatchHandlers() {
+        return catchHandlers;
+    }
+
+    public static class Try {
+        final int startAddress;
+        final int instructionCount;
+        final int catchHandlerIndex;
+
+        Try(int startAddress, int instructionCount, int catchHandlerIndex) {
+            this.startAddress = startAddress;
+            this.instructionCount = instructionCount;
+            this.catchHandlerIndex = catchHandlerIndex;
+        }
+
+        public int getStartAddress() {
+            return startAddress;
+        }
+
+        public int getInstructionCount() {
+            return instructionCount;
+        }
+
+        /**
+         * Returns this try's catch handler <strong>index</strong>. Note that
+         * this is distinct from the its catch handler <strong>offset</strong>.
+         */
+        public int getCatchHandlerIndex() {
+            return catchHandlerIndex;
+        }
+    }
+
+    public static class CatchHandler {
+        final int[] typeIndexes;
+        final int[] addresses;
+        final int catchAllAddress;
+        final int offset;
+
+        public CatchHandler(int[] typeIndexes, int[] addresses, int catchAllAddress, int offset) {
+            this.typeIndexes = typeIndexes;
+            this.addresses = addresses;
+            this.catchAllAddress = catchAllAddress;
+            this.offset = offset;
+        }
+
+        public int[] getTypeIndexes() {
+            return typeIndexes;
+        }
+
+        public int[] getAddresses() {
+            return addresses;
+        }
+
+        public int getCatchAllAddress() {
+            return catchAllAddress;
+        }
+
+        public int getOffset() {
+            return offset;
+        }
+    }
+}
diff --git a/dx/src/com/android/dex/Dex.java b/dx/src/com/android/dex/Dex.java
new file mode 100644
index 0000000..6b1bb5b
--- /dev/null
+++ b/dx/src/com/android/dex/Dex.java
@@ -0,0 +1,819 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.Code.CatchHandler;
+import com.android.dex.Code.Try;
+import com.android.dex.MethodHandle.MethodHandleType;
+import com.android.dex.util.ByteInput;
+import com.android.dex.util.ByteOutput;
+import com.android.dex.util.FileUtils;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UTFDataFormatException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.AbstractList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+import java.util.zip.Adler32;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+/**
+ * The bytes of a dex file in memory for reading and writing. All int offsets
+ * are unsigned.
+ */
+public final class Dex {
+    private static final int CHECKSUM_OFFSET = 8;
+    private static final int CHECKSUM_SIZE = 4;
+    private static final int SIGNATURE_OFFSET = CHECKSUM_OFFSET + CHECKSUM_SIZE;
+    private static final int SIGNATURE_SIZE = 20;
+    // Provided as a convenience to avoid a memory allocation to benefit Dalvik.
+    // Note: libcore.util.EmptyArray cannot be accessed when this code isn't run on Dalvik.
+    static final short[] EMPTY_SHORT_ARRAY = new short[0];
+
+    private ByteBuffer data;
+    private final TableOfContents tableOfContents = new TableOfContents();
+    private int nextSectionStart = 0;
+    private final StringTable strings = new StringTable();
+    private final TypeIndexToDescriptorIndexTable typeIds = new TypeIndexToDescriptorIndexTable();
+    private final TypeIndexToDescriptorTable typeNames = new TypeIndexToDescriptorTable();
+    private final ProtoIdTable protoIds = new ProtoIdTable();
+    private final FieldIdTable fieldIds = new FieldIdTable();
+    private final MethodIdTable methodIds = new MethodIdTable();
+
+    /**
+     * Creates a new dex that reads from {@code data}. It is an error to modify
+     * {@code data} after using it to create a dex buffer.
+     */
+    public Dex(byte[] data) throws IOException {
+        this(ByteBuffer.wrap(data));
+    }
+
+    private Dex(ByteBuffer data) throws IOException {
+        this.data = data;
+        this.data.order(ByteOrder.LITTLE_ENDIAN);
+        this.tableOfContents.readFrom(this);
+    }
+
+    /**
+     * Creates a new empty dex of the specified size.
+     */
+    public Dex(int byteCount) throws IOException {
+        this.data = ByteBuffer.wrap(new byte[byteCount]);
+        this.data.order(ByteOrder.LITTLE_ENDIAN);
+    }
+
+    /**
+     * Creates a new dex buffer of the dex in {@code in}, and closes {@code in}.
+     */
+    public Dex(InputStream in) throws IOException {
+        try {
+            loadFrom(in);
+        } finally {
+            in.close();
+        }
+    }
+
+    /**
+     * Creates a new dex buffer from the dex file {@code file}.
+     */
+    public Dex(File file) throws IOException {
+        if (FileUtils.hasArchiveSuffix(file.getName())) {
+            ZipFile zipFile = new ZipFile(file);
+            ZipEntry entry = zipFile.getEntry(DexFormat.DEX_IN_JAR_NAME);
+            if (entry != null) {
+                try (InputStream inputStream = zipFile.getInputStream(entry)) {
+                    loadFrom(inputStream);
+                }
+                zipFile.close();
+            } else {
+                throw new DexException("Expected " + DexFormat.DEX_IN_JAR_NAME + " in " + file);
+            }
+        } else if (file.getName().endsWith(".dex")) {
+            try (InputStream inputStream = new FileInputStream(file)) {
+                loadFrom(inputStream);
+            }
+        } else {
+            throw new DexException("unknown output extension: " + file);
+        }
+    }
+
+    /**
+     * It is the caller's responsibility to close {@code in}.
+     */
+    private void loadFrom(InputStream in) throws IOException {
+        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
+        byte[] buffer = new byte[8192];
+
+        int count;
+        while ((count = in.read(buffer)) != -1) {
+            bytesOut.write(buffer, 0, count);
+        }
+
+        this.data = ByteBuffer.wrap(bytesOut.toByteArray());
+        this.data.order(ByteOrder.LITTLE_ENDIAN);
+        this.tableOfContents.readFrom(this);
+    }
+
+    private static void checkBounds(int index, int length) {
+        if (index < 0 || index >= length) {
+            throw new IndexOutOfBoundsException("index:" + index + ", length=" + length);
+        }
+    }
+
+    public void writeTo(OutputStream out) throws IOException {
+        byte[] buffer = new byte[8192];
+        ByteBuffer data = this.data.duplicate(); // positioned ByteBuffers aren't thread safe
+        data.clear();
+        while (data.hasRemaining()) {
+            int count = Math.min(buffer.length, data.remaining());
+            data.get(buffer, 0, count);
+            out.write(buffer, 0, count);
+        }
+    }
+
+    public void writeTo(File dexOut) throws IOException {
+        try (OutputStream out = new FileOutputStream(dexOut)) {
+            writeTo(out);
+        }
+    }
+
+    public TableOfContents getTableOfContents() {
+        return tableOfContents;
+    }
+
+    public Section open(int position) {
+        if (position < 0 || position >= data.capacity()) {
+            throw new IllegalArgumentException("position=" + position
+                    + " length=" + data.capacity());
+        }
+        ByteBuffer sectionData = data.duplicate();
+        sectionData.order(ByteOrder.LITTLE_ENDIAN); // necessary?
+        sectionData.position(position);
+        sectionData.limit(data.capacity());
+        return new Section("section", sectionData);
+    }
+
+    public Section appendSection(int maxByteCount, String name) {
+        if ((maxByteCount & 3) != 0) {
+            throw new IllegalStateException("Not four byte aligned!");
+        }
+        int limit = nextSectionStart + maxByteCount;
+        ByteBuffer sectionData = data.duplicate();
+        sectionData.order(ByteOrder.LITTLE_ENDIAN); // necessary?
+        sectionData.position(nextSectionStart);
+        sectionData.limit(limit);
+        Section result = new Section(name, sectionData);
+        nextSectionStart = limit;
+        return result;
+    }
+
+    public int getLength() {
+        return data.capacity();
+    }
+
+    public int getNextSectionStart() {
+        return nextSectionStart;
+    }
+
+    /**
+     * Returns a copy of the the bytes of this dex.
+     */
+    public byte[] getBytes() {
+        ByteBuffer data = this.data.duplicate(); // positioned ByteBuffers aren't thread safe
+        byte[] result = new byte[data.capacity()];
+        data.position(0);
+        data.get(result);
+        return result;
+    }
+
+    public List<String> strings() {
+        return strings;
+    }
+
+    public List<Integer> typeIds() {
+        return typeIds;
+    }
+
+    public List<String> typeNames() {
+        return typeNames;
+    }
+
+    public List<ProtoId> protoIds() {
+        return protoIds;
+    }
+
+    public List<FieldId> fieldIds() {
+        return fieldIds;
+    }
+
+    public List<MethodId> methodIds() {
+        return methodIds;
+    }
+
+    public Iterable<ClassDef> classDefs() {
+        return new ClassDefIterable();
+    }
+
+    public TypeList readTypeList(int offset) {
+        if (offset == 0) {
+            return TypeList.EMPTY;
+        }
+        return open(offset).readTypeList();
+    }
+
+    public ClassData readClassData(ClassDef classDef) {
+        int offset = classDef.getClassDataOffset();
+        if (offset == 0) {
+            throw new IllegalArgumentException("offset == 0");
+        }
+        return open(offset).readClassData();
+    }
+
+    public Code readCode(ClassData.Method method) {
+        int offset = method.getCodeOffset();
+        if (offset == 0) {
+            throw new IllegalArgumentException("offset == 0");
+        }
+        return open(offset).readCode();
+    }
+
+    /**
+     * Returns the signature of all but the first 32 bytes of this dex. The
+     * first 32 bytes of dex files are not specified to be included in the
+     * signature.
+     */
+    public byte[] computeSignature() throws IOException {
+        MessageDigest digest;
+        try {
+            digest = MessageDigest.getInstance("SHA-1");
+        } catch (NoSuchAlgorithmException e) {
+            throw new AssertionError();
+        }
+        byte[] buffer = new byte[8192];
+        ByteBuffer data = this.data.duplicate(); // positioned ByteBuffers aren't thread safe
+        data.limit(data.capacity());
+        data.position(SIGNATURE_OFFSET + SIGNATURE_SIZE);
+        while (data.hasRemaining()) {
+            int count = Math.min(buffer.length, data.remaining());
+            data.get(buffer, 0, count);
+            digest.update(buffer, 0, count);
+        }
+        return digest.digest();
+    }
+
+    /**
+     * Returns the checksum of all but the first 12 bytes of {@code dex}.
+     */
+    public int computeChecksum() throws IOException {
+        Adler32 adler32 = new Adler32();
+        byte[] buffer = new byte[8192];
+        ByteBuffer data = this.data.duplicate(); // positioned ByteBuffers aren't thread safe
+        data.limit(data.capacity());
+        data.position(CHECKSUM_OFFSET + CHECKSUM_SIZE);
+        while (data.hasRemaining()) {
+            int count = Math.min(buffer.length, data.remaining());
+            data.get(buffer, 0, count);
+            adler32.update(buffer, 0, count);
+        }
+        return (int) adler32.getValue();
+    }
+
+    /**
+     * Generates the signature and checksum of the dex file {@code out} and
+     * writes them to the file.
+     */
+    public void writeHashes() throws IOException {
+        open(SIGNATURE_OFFSET).write(computeSignature());
+        open(CHECKSUM_OFFSET).writeInt(computeChecksum());
+    }
+
+    /**
+     * Look up a descriptor index from a type index. Cheaper than:
+     * {@code open(tableOfContents.typeIds.off + (index * SizeOf.TYPE_ID_ITEM)).readInt();}
+     */
+    public int descriptorIndexFromTypeIndex(int typeIndex) {
+       checkBounds(typeIndex, tableOfContents.typeIds.size);
+       int position = tableOfContents.typeIds.off + (SizeOf.TYPE_ID_ITEM * typeIndex);
+       return data.getInt(position);
+    }
+
+
+    public final class Section implements ByteInput, ByteOutput {
+        private final String name;
+        private final ByteBuffer data;
+        private final int initialPosition;
+
+        private Section(String name, ByteBuffer data) {
+            this.name = name;
+            this.data = data;
+            this.initialPosition = data.position();
+        }
+
+        public int getPosition() {
+            return data.position();
+        }
+
+        public int readInt() {
+            return data.getInt();
+        }
+
+        public short readShort() {
+            return data.getShort();
+        }
+
+        public int readUnsignedShort() {
+            return readShort() & 0xffff;
+        }
+
+        @Override
+        public byte readByte() {
+            return data.get();
+        }
+
+        public byte[] readByteArray(int length) {
+            byte[] result = new byte[length];
+            data.get(result);
+            return result;
+        }
+
+        public short[] readShortArray(int length) {
+            if (length == 0) {
+                return EMPTY_SHORT_ARRAY;
+            }
+            short[] result = new short[length];
+            for (int i = 0; i < length; i++) {
+                result[i] = readShort();
+            }
+            return result;
+        }
+
+        public int readUleb128() {
+            return Leb128.readUnsignedLeb128(this);
+        }
+
+        public int readUleb128p1() {
+            return Leb128.readUnsignedLeb128(this) - 1;
+        }
+
+        public int readSleb128() {
+            return Leb128.readSignedLeb128(this);
+        }
+
+        public void writeUleb128p1(int i) {
+            writeUleb128(i + 1);
+        }
+
+        public TypeList readTypeList() {
+            int size = readInt();
+            short[] types = readShortArray(size);
+            alignToFourBytes();
+            return new TypeList(Dex.this, types);
+        }
+
+        public String readString() {
+            int offset = readInt();
+            int savedPosition = data.position();
+            int savedLimit = data.limit();
+            data.position(offset);
+            data.limit(data.capacity());
+            try {
+                int expectedLength = readUleb128();
+                String result = Mutf8.decode(this, new char[expectedLength]);
+                if (result.length() != expectedLength) {
+                    throw new DexException("Declared length " + expectedLength
+                            + " doesn't match decoded length of " + result.length());
+                }
+                return result;
+            } catch (UTFDataFormatException e) {
+                throw new DexException(e);
+            } finally {
+                data.position(savedPosition);
+                data.limit(savedLimit);
+            }
+        }
+
+        public FieldId readFieldId() {
+            int declaringClassIndex = readUnsignedShort();
+            int typeIndex = readUnsignedShort();
+            int nameIndex = readInt();
+            return new FieldId(Dex.this, declaringClassIndex, typeIndex, nameIndex);
+        }
+
+        public MethodId readMethodId() {
+            int declaringClassIndex = readUnsignedShort();
+            int protoIndex = readUnsignedShort();
+            int nameIndex = readInt();
+            return new MethodId(Dex.this, declaringClassIndex, protoIndex, nameIndex);
+        }
+
+        public ProtoId readProtoId() {
+            int shortyIndex = readInt();
+            int returnTypeIndex = readInt();
+            int parametersOffset = readInt();
+            return new ProtoId(Dex.this, shortyIndex, returnTypeIndex, parametersOffset);
+        }
+
+        public CallSiteId readCallSiteId() {
+            int offset = readInt();
+            return new CallSiteId(Dex.this, offset);
+        }
+
+        public MethodHandle readMethodHandle() {
+            MethodHandleType methodHandleType = MethodHandleType.fromValue(readUnsignedShort());
+            int unused1 = readUnsignedShort();
+            int fieldOrMethodId = readUnsignedShort();
+            int unused2 = readUnsignedShort();
+            return new MethodHandle(Dex.this, methodHandleType, unused1, fieldOrMethodId, unused2);
+        }
+
+        public ClassDef readClassDef() {
+            int offset = getPosition();
+            int type = readInt();
+            int accessFlags = readInt();
+            int supertype = readInt();
+            int interfacesOffset = readInt();
+            int sourceFileIndex = readInt();
+            int annotationsOffset = readInt();
+            int classDataOffset = readInt();
+            int staticValuesOffset = readInt();
+            return new ClassDef(Dex.this, offset, type, accessFlags, supertype,
+                    interfacesOffset, sourceFileIndex, annotationsOffset, classDataOffset,
+                    staticValuesOffset);
+        }
+
+        private Code readCode() {
+            int registersSize = readUnsignedShort();
+            int insSize = readUnsignedShort();
+            int outsSize = readUnsignedShort();
+            int triesSize = readUnsignedShort();
+            int debugInfoOffset = readInt();
+            int instructionsSize = readInt();
+            short[] instructions = readShortArray(instructionsSize);
+            Try[] tries;
+            CatchHandler[] catchHandlers;
+            if (triesSize > 0) {
+                if (instructions.length % 2 == 1) {
+                    readShort(); // padding
+                }
+
+                /*
+                 * We can't read the tries until we've read the catch handlers.
+                 * Unfortunately they're in the opposite order in the dex file
+                 * so we need to read them out-of-order.
+                 */
+                Section triesSection = open(data.position());
+                skip(triesSize * SizeOf.TRY_ITEM);
+                catchHandlers = readCatchHandlers();
+                tries = triesSection.readTries(triesSize, catchHandlers);
+            } else {
+                tries = new Try[0];
+                catchHandlers = new CatchHandler[0];
+            }
+            return new Code(registersSize, insSize, outsSize, debugInfoOffset, instructions,
+                            tries, catchHandlers);
+        }
+
+        private CatchHandler[] readCatchHandlers() {
+            int baseOffset = data.position();
+            int catchHandlersSize = readUleb128();
+            CatchHandler[] result = new CatchHandler[catchHandlersSize];
+            for (int i = 0; i < catchHandlersSize; i++) {
+                int offset = data.position() - baseOffset;
+                result[i] = readCatchHandler(offset);
+            }
+            return result;
+        }
+
+        private Try[] readTries(int triesSize, CatchHandler[] catchHandlers) {
+            Try[] result = new Try[triesSize];
+            for (int i = 0; i < triesSize; i++) {
+                int startAddress = readInt();
+                int instructionCount = readUnsignedShort();
+                int handlerOffset = readUnsignedShort();
+                int catchHandlerIndex = findCatchHandlerIndex(catchHandlers, handlerOffset);
+                result[i] = new Try(startAddress, instructionCount, catchHandlerIndex);
+            }
+            return result;
+        }
+
+        private int findCatchHandlerIndex(CatchHandler[] catchHandlers, int offset) {
+            for (int i = 0; i < catchHandlers.length; i++) {
+                CatchHandler catchHandler = catchHandlers[i];
+                if (catchHandler.getOffset() == offset) {
+                    return i;
+                }
+            }
+            throw new IllegalArgumentException();
+        }
+
+        private CatchHandler readCatchHandler(int offset) {
+            int size = readSleb128();
+            int handlersCount = Math.abs(size);
+            int[] typeIndexes = new int[handlersCount];
+            int[] addresses = new int[handlersCount];
+            for (int i = 0; i < handlersCount; i++) {
+                typeIndexes[i] = readUleb128();
+                addresses[i] = readUleb128();
+            }
+            int catchAllAddress = size <= 0 ? readUleb128() : -1;
+            return new CatchHandler(typeIndexes, addresses, catchAllAddress, offset);
+        }
+
+        private ClassData readClassData() {
+            int staticFieldsSize = readUleb128();
+            int instanceFieldsSize = readUleb128();
+            int directMethodsSize = readUleb128();
+            int virtualMethodsSize = readUleb128();
+            ClassData.Field[] staticFields = readFields(staticFieldsSize);
+            ClassData.Field[] instanceFields = readFields(instanceFieldsSize);
+            ClassData.Method[] directMethods = readMethods(directMethodsSize);
+            ClassData.Method[] virtualMethods = readMethods(virtualMethodsSize);
+            return new ClassData(staticFields, instanceFields, directMethods, virtualMethods);
+        }
+
+        private ClassData.Field[] readFields(int count) {
+            ClassData.Field[] result = new ClassData.Field[count];
+            int fieldIndex = 0;
+            for (int i = 0; i < count; i++) {
+                fieldIndex += readUleb128(); // field index diff
+                int accessFlags = readUleb128();
+                result[i] = new ClassData.Field(fieldIndex, accessFlags);
+            }
+            return result;
+        }
+
+        private ClassData.Method[] readMethods(int count) {
+            ClassData.Method[] result = new ClassData.Method[count];
+            int methodIndex = 0;
+            for (int i = 0; i < count; i++) {
+                methodIndex += readUleb128(); // method index diff
+                int accessFlags = readUleb128();
+                int codeOff = readUleb128();
+                result[i] = new ClassData.Method(methodIndex, accessFlags, codeOff);
+            }
+            return result;
+        }
+
+        /**
+         * Returns a byte array containing the bytes from {@code start} to this
+         * section's current position.
+         */
+        private byte[] getBytesFrom(int start) {
+            int end = data.position();
+            byte[] result = new byte[end - start];
+            data.position(start);
+            data.get(result);
+            return result;
+        }
+
+        public Annotation readAnnotation() {
+            byte visibility = readByte();
+            int start = data.position();
+            new EncodedValueReader(this, EncodedValueReader.ENCODED_ANNOTATION).skipValue();
+            return new Annotation(Dex.this, visibility, new EncodedValue(getBytesFrom(start)));
+        }
+
+        public EncodedValue readEncodedArray() {
+            int start = data.position();
+            new EncodedValueReader(this, EncodedValueReader.ENCODED_ARRAY).skipValue();
+            return new EncodedValue(getBytesFrom(start));
+        }
+
+        public void skip(int count) {
+            if (count < 0) {
+                throw new IllegalArgumentException();
+            }
+            data.position(data.position() + count);
+        }
+
+        /**
+         * Skips bytes until the position is aligned to a multiple of 4.
+         */
+        public void alignToFourBytes() {
+            data.position((data.position() + 3) & ~3);
+        }
+
+        /**
+         * Writes 0x00 until the position is aligned to a multiple of 4.
+         */
+        public void alignToFourBytesWithZeroFill() {
+            while ((data.position() & 3) != 0) {
+                data.put((byte) 0);
+            }
+        }
+
+        public void assertFourByteAligned() {
+            if ((data.position() & 3) != 0) {
+                throw new IllegalStateException("Not four byte aligned!");
+            }
+        }
+
+        public void write(byte[] bytes) {
+            this.data.put(bytes);
+        }
+
+        @Override
+        public void writeByte(int b) {
+            data.put((byte) b);
+        }
+
+        public void writeShort(short i) {
+            data.putShort(i);
+        }
+
+        public void writeUnsignedShort(int i) {
+            short s = (short) i;
+            if (i != (s & 0xffff)) {
+                throw new IllegalArgumentException("Expected an unsigned short: " + i);
+            }
+            writeShort(s);
+        }
+
+        public void write(short[] shorts) {
+            for (short s : shorts) {
+                writeShort(s);
+            }
+        }
+
+        public void writeInt(int i) {
+            data.putInt(i);
+        }
+
+        public void writeUleb128(int i) {
+            try {
+                Leb128.writeUnsignedLeb128(this, i);
+            } catch (ArrayIndexOutOfBoundsException e) {
+                throw new DexException("Section limit " + data.limit() + " exceeded by " + name);
+            }
+        }
+
+        public void writeSleb128(int i) {
+            try {
+                Leb128.writeSignedLeb128(this, i);
+            } catch (ArrayIndexOutOfBoundsException e) {
+                throw new DexException("Section limit " + data.limit() + " exceeded by " + name);
+            }
+        }
+
+        public void writeStringData(String value) {
+            try {
+                int length = value.length();
+                writeUleb128(length);
+                write(Mutf8.encode(value));
+                writeByte(0);
+            } catch (UTFDataFormatException e) {
+                throw new AssertionError();
+            }
+        }
+
+        public void writeTypeList(TypeList typeList) {
+            short[] types = typeList.getTypes();
+            writeInt(types.length);
+            for (short type : types) {
+                writeShort(type);
+            }
+            alignToFourBytesWithZeroFill();
+        }
+
+        /**
+         * Returns the number of bytes used by this section.
+         */
+        public int used() {
+            return data.position() - initialPosition;
+        }
+    }
+
+    private final class StringTable extends AbstractList<String> implements RandomAccess {
+        @Override
+        public String get(int index) {
+            checkBounds(index, tableOfContents.stringIds.size);
+            return open(tableOfContents.stringIds.off + (index * SizeOf.STRING_ID_ITEM))
+                    .readString();
+        }
+        @Override
+        public int size() {
+            return tableOfContents.stringIds.size;
+        }
+    }
+
+    private final class TypeIndexToDescriptorIndexTable extends AbstractList<Integer>
+            implements RandomAccess {
+        @Override
+        public Integer get(int index) {
+            return descriptorIndexFromTypeIndex(index);
+        }
+        @Override
+        public int size() {
+            return tableOfContents.typeIds.size;
+        }
+    }
+
+    private final class TypeIndexToDescriptorTable extends AbstractList<String>
+            implements RandomAccess {
+        @Override
+        public String get(int index) {
+            return strings.get(descriptorIndexFromTypeIndex(index));
+        }
+        @Override
+        public int size() {
+            return tableOfContents.typeIds.size;
+        }
+    }
+
+    private final class ProtoIdTable extends AbstractList<ProtoId> implements RandomAccess {
+        @Override
+        public ProtoId get(int index) {
+            checkBounds(index, tableOfContents.protoIds.size);
+            return open(tableOfContents.protoIds.off + (SizeOf.PROTO_ID_ITEM * index))
+                    .readProtoId();
+        }
+        @Override
+        public int size() {
+            return tableOfContents.protoIds.size;
+        }
+    }
+
+    private final class FieldIdTable extends AbstractList<FieldId> implements RandomAccess {
+        @Override
+        public FieldId get(int index) {
+            checkBounds(index, tableOfContents.fieldIds.size);
+            return open(tableOfContents.fieldIds.off + (SizeOf.MEMBER_ID_ITEM * index))
+                    .readFieldId();
+        }
+        @Override
+        public int size() {
+            return tableOfContents.fieldIds.size;
+        }
+    }
+
+    private final class MethodIdTable extends AbstractList<MethodId> implements RandomAccess {
+        @Override
+        public MethodId get(int index) {
+            checkBounds(index, tableOfContents.methodIds.size);
+            return open(tableOfContents.methodIds.off + (SizeOf.MEMBER_ID_ITEM * index))
+                    .readMethodId();
+        }
+        @Override
+        public int size() {
+            return tableOfContents.methodIds.size;
+        }
+    }
+
+    private final class ClassDefIterator implements Iterator<ClassDef> {
+        private final Dex.Section in = open(tableOfContents.classDefs.off);
+        private int count = 0;
+
+        @Override
+        public boolean hasNext() {
+            return count < tableOfContents.classDefs.size;
+        }
+        @Override
+        public ClassDef next() {
+            if (!hasNext()) {
+                throw new NoSuchElementException();
+            }
+            count++;
+            return in.readClassDef();
+        }
+        @Override
+            public void remove() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    private final class ClassDefIterable implements Iterable<ClassDef> {
+        @Override
+        public Iterator<ClassDef> iterator() {
+            return !tableOfContents.classDefs.exists()
+               ? Collections.<ClassDef>emptySet().iterator()
+               : new ClassDefIterator();
+        }
+    }
+}
diff --git a/dx/src/com/android/dex/DexException.java b/dx/src/com/android/dex/DexException.java
new file mode 100644
index 0000000..ee0af18
--- /dev/null
+++ b/dx/src/com/android/dex/DexException.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.ExceptionWithContext;
+
+/**
+ * Thrown when there's a format problem reading, writing, or generally
+ * processing a dex file.
+ */
+public class DexException extends ExceptionWithContext {
+    public DexException(String message) {
+        super(message);
+    }
+
+    public DexException(Throwable cause) {
+        super(cause);
+    }
+}
diff --git a/dx/src/com/android/dex/DexFormat.java b/dx/src/com/android/dex/DexFormat.java
new file mode 100644
index 0000000..ab99566
--- /dev/null
+++ b/dx/src/com/android/dex/DexFormat.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+/**
+ * Constants that show up in and are otherwise related to {@code .dex}
+ * files, and helper methods for same.
+ */
+public final class DexFormat {
+    private DexFormat() {}
+
+    /** API level to target in order to allow spaces in SimpleName */
+    public static final int API_SPACES_IN_SIMPLE_NAME = 10000;
+
+    /** API level to target in order to generate const-method-handle and const-method-type */
+    public static final int API_CONST_METHOD_HANDLE = 28;
+
+    /** API level to target in order to generate invoke-polymorphic and invoke-custom */
+    public static final int API_METHOD_HANDLES = 26;
+
+    /** API level to target in order to define default and static interface methods */
+    public static final int API_DEFINE_INTERFACE_METHODS = 24;
+
+    /** API level to target in order to invoke default and static interface methods */
+    public static final int API_INVOKE_INTERFACE_METHODS = 24;
+
+    /** API level at which the invocation of static interface methods is permitted by dx.
+     * This value has been determined experimentally by testing on different VM versions. */
+    public static final int API_INVOKE_STATIC_INTERFACE_METHODS = 21;
+
+    /** API level to target in order to suppress extended opcode usage */
+    public static final int API_NO_EXTENDED_OPCODES = 13;
+
+    /**
+     * API level to target in order to produce the most modern file
+     * format
+     */
+    public static final int API_CURRENT = API_CONST_METHOD_HANDLE;
+
+    /** dex file version number for API level 10000 and earlier */
+    public static final String VERSION_FOR_API_10000 = "040";
+
+    /** dex file version number for API level 28 and earlier */
+    public static final String VERSION_FOR_API_28 = "039";
+
+    /** dex file version number for API level 26 and earlier */
+    public static final String VERSION_FOR_API_26 = "038";
+
+    /** dex file version number for API level 24 and earlier */
+    public static final String VERSION_FOR_API_24 = "037";
+
+    /** dex file version number for API level 13 and earlier */
+    public static final String VERSION_FOR_API_13 = "035";
+
+    /**
+     * Dex file version number for dalvik.
+     * <p>
+     * Note: Dex version 36 was loadable in some versions of Dalvik but was never fully supported or
+     * completed and is not considered a valid dex file format.
+     * </p>
+     */
+    public static final String VERSION_CURRENT = VERSION_FOR_API_28;
+
+    /**
+     * file name of the primary {@code .dex} file inside an
+     * application or library {@code .jar} file
+     */
+    public static final String DEX_IN_JAR_NAME = "classes.dex";
+
+    /** common prefix for all dex file "magic numbers" */
+    public static final String MAGIC_PREFIX = "dex\n";
+
+    /** common suffix for all dex file "magic numbers" */
+    public static final String MAGIC_SUFFIX = "\0";
+
+    /**
+     * value used to indicate endianness of file contents
+     */
+    public static final int ENDIAN_TAG = 0x12345678;
+
+    /**
+     * Maximum addressable field or method index.
+     * The largest addressable member is 0xffff, in the "instruction formats" spec as field@CCCC or
+     * meth@CCCC.
+     */
+    public static final int MAX_MEMBER_IDX = 0xFFFF;
+
+    /**
+     * Maximum addressable type index.
+     * The largest addressable type is 0xffff, in the "instruction formats" spec as type@CCCC.
+     */
+    public static final int MAX_TYPE_IDX = 0xFFFF;
+
+    /**
+     * Returns the API level corresponding to the given magic number,
+     * or {@code -1} if the given array is not a well-formed dex file
+     * magic number.
+     *
+     * @param magic array of bytes containing DEX file magic string
+     * @return API level corresponding to magic string if valid, -1 otherwise.
+     */
+    public static int magicToApi(byte[] magic) {
+        if (magic.length != 8) {
+            return -1;
+        }
+
+        if ((magic[0] != 'd') || (magic[1] != 'e') || (magic[2] != 'x') || (magic[3] != '\n') ||
+                (magic[7] != '\0')) {
+            return -1;
+        }
+
+        String version = "" + ((char) magic[4]) + ((char) magic[5]) +((char) magic[6]);
+
+        if (version.equals(VERSION_FOR_API_13)) {
+            return API_NO_EXTENDED_OPCODES;
+        } else if (version.equals(VERSION_FOR_API_24)) {
+            return API_DEFINE_INTERFACE_METHODS;
+        } else if (version.equals(VERSION_FOR_API_26)) {
+            return API_METHOD_HANDLES;
+        } else if (version.equals(VERSION_FOR_API_28)) {
+            return API_CONST_METHOD_HANDLE;
+        } else if (version.equals(VERSION_FOR_API_10000)) {
+            return API_SPACES_IN_SIMPLE_NAME;
+        } else if (version.equals(VERSION_CURRENT)) {
+            return API_CURRENT;
+        }
+
+        return -1;
+    }
+
+    /**
+     * Returns the magic number corresponding to the given target API level.
+     *
+     * @param targetApiLevel level of API (minimum supported value 13).
+     * @return Magic string corresponding to API level supplied.
+     */
+    public static String apiToMagic(int targetApiLevel) {
+        String version;
+
+        if (targetApiLevel >= API_CURRENT) {
+            version = VERSION_CURRENT;
+        } else if (targetApiLevel >= API_SPACES_IN_SIMPLE_NAME) {
+            version = VERSION_FOR_API_10000;
+        } else if (targetApiLevel >= API_CONST_METHOD_HANDLE) {
+            version = VERSION_FOR_API_28;
+        } else if (targetApiLevel >= API_METHOD_HANDLES) {
+            version = VERSION_FOR_API_26;
+        } else if (targetApiLevel >= API_DEFINE_INTERFACE_METHODS) {
+            version = VERSION_FOR_API_24;
+        } else {
+            version = VERSION_FOR_API_13;
+        }
+
+        return MAGIC_PREFIX + version + MAGIC_SUFFIX;
+    }
+
+    /**
+     * Checks whether a DEX file magic string is supported.
+     * @param magic string from DEX file
+     * @return
+     */
+    public static boolean isSupportedDexMagic(byte[] magic) {
+        int api = magicToApi(magic);
+        return api > 0;
+    }
+}
diff --git a/dx/src/com/android/dex/DexIndexOverflowException.java b/dx/src/com/android/dex/DexIndexOverflowException.java
new file mode 100644
index 0000000..3226207
--- /dev/null
+++ b/dx/src/com/android/dex/DexIndexOverflowException.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+/**
+ * Thrown when there's an index overflow writing a dex file.
+ */
+public final class DexIndexOverflowException extends DexException {
+    public DexIndexOverflowException(String message) {
+        super(message);
+    }
+
+    public DexIndexOverflowException(Throwable cause) {
+        super(cause);
+    }
+}
diff --git a/dx/src/com/android/dex/EncodedValue.java b/dx/src/com/android/dex/EncodedValue.java
new file mode 100644
index 0000000..d5e75b0
--- /dev/null
+++ b/dx/src/com/android/dex/EncodedValue.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.ByteArrayByteInput;
+import com.android.dex.util.ByteInput;
+
+/**
+ * An encoded value or array.
+ */
+public final class EncodedValue implements Comparable<EncodedValue> {
+    private final byte[] data;
+
+    public EncodedValue(byte[] data) {
+        this.data = data;
+    }
+
+    public ByteInput asByteInput() {
+        return new ByteArrayByteInput(data);
+    }
+
+    public byte[] getBytes() {
+        return data;
+    }
+
+    public void writeTo(Dex.Section out) {
+        out.write(data);
+    }
+
+    @Override
+    public int compareTo(EncodedValue other) {
+        int size = Math.min(data.length, other.data.length);
+        for (int i = 0; i < size; i++) {
+            if (data[i] != other.data[i]) {
+                return (data[i] & 0xff) - (other.data[i] & 0xff);
+            }
+        }
+        return data.length - other.data.length;
+    }
+
+    @Override
+    public String toString() {
+        return Integer.toHexString(data[0] & 0xff) + "...(" + data.length + ")";
+    }
+}
diff --git a/dx/src/com/android/dex/EncodedValueCodec.java b/dx/src/com/android/dex/EncodedValueCodec.java
new file mode 100644
index 0000000..7fc1724
--- /dev/null
+++ b/dx/src/com/android/dex/EncodedValueCodec.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.ByteInput;
+import com.android.dex.util.ByteOutput;
+
+/**
+ * Read and write {@code encoded_value} primitives.
+ */
+public final class EncodedValueCodec {
+    private EncodedValueCodec() {
+    }
+
+    /**
+     * Writes a signed integral to {@code out}.
+     */
+    public static void writeSignedIntegralValue(ByteOutput out, int type, long value) {
+        /*
+         * Figure out how many bits are needed to represent the value,
+         * including a sign bit: The bit count is subtracted from 65
+         * and not 64 to account for the sign bit. The xor operation
+         * has the effect of leaving non-negative values alone and
+         * unary complementing negative values (so that a leading zero
+         * count always returns a useful number for our present
+         * purpose).
+         */
+        int requiredBits = 65 - Long.numberOfLeadingZeros(value ^ (value >> 63));
+
+        // Round up the requiredBits to a number of bytes.
+        int requiredBytes = (requiredBits + 0x07) >> 3;
+
+        /*
+         * Write the header byte, which includes the type and
+         * requiredBytes - 1.
+         */
+        out.writeByte(type | ((requiredBytes - 1) << 5));
+
+        // Write the value, per se.
+        while (requiredBytes > 0) {
+            out.writeByte((byte) value);
+            value >>= 8;
+            requiredBytes--;
+        }
+    }
+
+    /**
+     * Writes an unsigned integral to {@code out}.
+     */
+    public static void writeUnsignedIntegralValue(ByteOutput out, int type, long value) {
+        // Figure out how many bits are needed to represent the value.
+        int requiredBits = 64 - Long.numberOfLeadingZeros(value);
+        if (requiredBits == 0) {
+            requiredBits = 1;
+        }
+
+        // Round up the requiredBits to a number of bytes.
+        int requiredBytes = (requiredBits + 0x07) >> 3;
+
+        /*
+         * Write the header byte, which includes the type and
+         * requiredBytes - 1.
+         */
+        out.writeByte(type | ((requiredBytes - 1) << 5));
+
+        // Write the value, per se.
+        while (requiredBytes > 0) {
+            out.writeByte((byte) value);
+            value >>= 8;
+            requiredBytes--;
+        }
+    }
+
+    /**
+     * Writes a right-zero-extended value to {@code out}.
+     */
+    public static void writeRightZeroExtendedValue(ByteOutput out, int type, long value) {
+        // Figure out how many bits are needed to represent the value.
+        int requiredBits = 64 - Long.numberOfTrailingZeros(value);
+        if (requiredBits == 0) {
+            requiredBits = 1;
+        }
+
+        // Round up the requiredBits to a number of bytes.
+        int requiredBytes = (requiredBits + 0x07) >> 3;
+
+        // Scootch the first bits to be written down to the low-order bits.
+        value >>= 64 - (requiredBytes * 8);
+
+        /*
+         * Write the header byte, which includes the type and
+         * requiredBytes - 1.
+         */
+        out.writeByte(type | ((requiredBytes - 1) << 5));
+
+        // Write the value, per se.
+        while (requiredBytes > 0) {
+            out.writeByte((byte) value);
+            value >>= 8;
+            requiredBytes--;
+        }
+    }
+
+    /**
+     * Read a signed integer.
+     *
+     * @param zwidth byte count minus one
+     */
+    public static int readSignedInt(ByteInput in, int zwidth) {
+        int result = 0;
+        for (int i = zwidth; i >= 0; i--) {
+            result = (result >>> 8) | ((in.readByte() & 0xff) << 24);
+        }
+        result >>= (3 - zwidth) * 8;
+        return result;
+    }
+
+    /**
+     * Read an unsigned integer.
+     *
+     * @param zwidth byte count minus one
+     * @param fillOnRight true to zero fill on the right; false on the left
+     */
+    public static int readUnsignedInt(ByteInput in, int zwidth, boolean fillOnRight) {
+        int result = 0;
+        if (!fillOnRight) {
+            for (int i = zwidth; i >= 0; i--) {
+                result = (result >>> 8) | ((in.readByte() & 0xff) << 24);
+            }
+            result >>>= (3 - zwidth) * 8;
+        } else {
+            for (int i = zwidth; i >= 0; i--) {
+                result = (result >>> 8) | ((in.readByte() & 0xff) << 24);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Read a signed long.
+     *
+     * @param zwidth byte count minus one
+     */
+    public static long readSignedLong(ByteInput in, int zwidth) {
+        long result = 0;
+        for (int i = zwidth; i >= 0; i--) {
+            result = (result >>> 8) | ((in.readByte() & 0xffL) << 56);
+        }
+        result >>= (7 - zwidth) * 8;
+        return result;
+    }
+
+    /**
+     * Read an unsigned long.
+     *
+     * @param zwidth byte count minus one
+     * @param fillOnRight true to zero fill on the right; false on the left
+     */
+    public static long readUnsignedLong(ByteInput in, int zwidth, boolean fillOnRight) {
+        long result = 0;
+        if (!fillOnRight) {
+            for (int i = zwidth; i >= 0; i--) {
+                result = (result >>> 8) | ((in.readByte() & 0xffL) << 56);
+            }
+            result >>>= (7 - zwidth) * 8;
+        } else {
+            for (int i = zwidth; i >= 0; i--) {
+                result = (result >>> 8) | ((in.readByte() & 0xffL) << 56);
+            }
+        }
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dex/EncodedValueReader.java b/dx/src/com/android/dex/EncodedValueReader.java
new file mode 100644
index 0000000..24dc0e3
--- /dev/null
+++ b/dx/src/com/android/dex/EncodedValueReader.java
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.ByteInput;
+
+/**
+ * Pull parser for encoded values.
+ */
+public final class EncodedValueReader {
+    public static final int ENCODED_BYTE = 0x00;
+    public static final int ENCODED_SHORT = 0x02;
+    public static final int ENCODED_CHAR = 0x03;
+    public static final int ENCODED_INT = 0x04;
+    public static final int ENCODED_LONG = 0x06;
+    public static final int ENCODED_FLOAT = 0x10;
+    public static final int ENCODED_DOUBLE = 0x11;
+    public static final int ENCODED_METHOD_TYPE = 0x15;
+    public static final int ENCODED_METHOD_HANDLE = 0x16;
+    public static final int ENCODED_STRING = 0x17;
+    public static final int ENCODED_TYPE = 0x18;
+    public static final int ENCODED_FIELD = 0x19;
+    public static final int ENCODED_ENUM = 0x1b;
+    public static final int ENCODED_METHOD = 0x1a;
+    public static final int ENCODED_ARRAY = 0x1c;
+    public static final int ENCODED_ANNOTATION = 0x1d;
+    public static final int ENCODED_NULL = 0x1e;
+    public static final int ENCODED_BOOLEAN = 0x1f;
+
+    /** placeholder type if the type is not yet known */
+    private static final int MUST_READ = -1;
+
+    protected final ByteInput in;
+    private int type = MUST_READ;
+    private int annotationType;
+    private int arg;
+
+    public EncodedValueReader(ByteInput in) {
+        this.in = in;
+    }
+
+    public EncodedValueReader(EncodedValue in) {
+        this(in.asByteInput());
+    }
+
+    /**
+     * Creates a new encoded value reader whose only value is the specified
+     * known type. This is useful for encoded values without a type prefix,
+     * such as class_def_item's encoded_array or annotation_item's
+     * encoded_annotation.
+     */
+    public EncodedValueReader(ByteInput in, int knownType) {
+        this.in = in;
+        this.type = knownType;
+    }
+
+    public EncodedValueReader(EncodedValue in, int knownType) {
+        this(in.asByteInput(), knownType);
+    }
+
+    /**
+     * Returns the type of the next value to read.
+     */
+    public int peek() {
+        if (type == MUST_READ) {
+            int argAndType = in.readByte() & 0xff;
+            type = argAndType & 0x1f;
+            arg = (argAndType & 0xe0) >> 5;
+        }
+        return type;
+    }
+
+    /**
+     * Begins reading the elements of an array, returning the array's size. The
+     * caller must follow up by calling a read method for each element in the
+     * array. For example, this reads a byte array: <pre>   {@code
+     *   int arraySize = readArray();
+     *   for (int i = 0, i < arraySize; i++) {
+     *     readByte();
+     *   }
+     * }</pre>
+     */
+    public int readArray() {
+        checkType(ENCODED_ARRAY);
+        type = MUST_READ;
+        return Leb128.readUnsignedLeb128(in);
+    }
+
+    /**
+     * Begins reading the fields of an annotation, returning the number of
+     * fields. The caller must follow up by making alternating calls to {@link
+     * #readAnnotationName()} and another read method. For example, this reads
+     * an annotation whose fields are all bytes: <pre>   {@code
+     *   int fieldCount = readAnnotation();
+     *   int annotationType = getAnnotationType();
+     *   for (int i = 0; i < fieldCount; i++) {
+     *       readAnnotationName();
+     *       readByte();
+     *   }
+     * }</pre>
+     */
+    public int readAnnotation() {
+        checkType(ENCODED_ANNOTATION);
+        type = MUST_READ;
+        annotationType = Leb128.readUnsignedLeb128(in);
+        return Leb128.readUnsignedLeb128(in);
+    }
+
+    /**
+     * Returns the type of the annotation just returned by {@link
+     * #readAnnotation()}. This method's value is undefined unless the most
+     * recent call was to {@link #readAnnotation()}.
+     */
+    public int getAnnotationType() {
+        return annotationType;
+    }
+
+    public int readAnnotationName() {
+        return Leb128.readUnsignedLeb128(in);
+    }
+
+    public byte readByte() {
+        checkType(ENCODED_BYTE);
+        type = MUST_READ;
+        return (byte) EncodedValueCodec.readSignedInt(in, arg);
+    }
+
+    public short readShort() {
+        checkType(ENCODED_SHORT);
+        type = MUST_READ;
+        return (short) EncodedValueCodec.readSignedInt(in, arg);
+    }
+
+    public char readChar() {
+        checkType(ENCODED_CHAR);
+        type = MUST_READ;
+        return (char) EncodedValueCodec.readUnsignedInt(in, arg, false);
+    }
+
+    public int readInt() {
+        checkType(ENCODED_INT);
+        type = MUST_READ;
+        return EncodedValueCodec.readSignedInt(in, arg);
+    }
+
+    public long readLong() {
+        checkType(ENCODED_LONG);
+        type = MUST_READ;
+        return EncodedValueCodec.readSignedLong(in, arg);
+    }
+
+    public float readFloat() {
+        checkType(ENCODED_FLOAT);
+        type = MUST_READ;
+        return Float.intBitsToFloat(EncodedValueCodec.readUnsignedInt(in, arg, true));
+    }
+
+    public double readDouble() {
+        checkType(ENCODED_DOUBLE);
+        type = MUST_READ;
+        return Double.longBitsToDouble(EncodedValueCodec.readUnsignedLong(in, arg, true));
+    }
+
+    public int readMethodType() {
+        checkType(ENCODED_METHOD_TYPE);
+        type = MUST_READ;
+        return EncodedValueCodec.readUnsignedInt(in, arg, false);
+    }
+
+    public int readMethodHandle() {
+        checkType(ENCODED_METHOD_HANDLE);
+        type = MUST_READ;
+        return EncodedValueCodec.readUnsignedInt(in, arg, false);
+    }
+
+    public int readString() {
+        checkType(ENCODED_STRING);
+        type = MUST_READ;
+        return EncodedValueCodec.readUnsignedInt(in, arg, false);
+    }
+
+    public int readType() {
+        checkType(ENCODED_TYPE);
+        type = MUST_READ;
+        return EncodedValueCodec.readUnsignedInt(in, arg, false);
+    }
+
+    public int readField() {
+        checkType(ENCODED_FIELD);
+        type = MUST_READ;
+        return EncodedValueCodec.readUnsignedInt(in, arg, false);
+    }
+
+    public int readEnum() {
+        checkType(ENCODED_ENUM);
+        type = MUST_READ;
+        return EncodedValueCodec.readUnsignedInt(in, arg, false);
+    }
+
+    public int readMethod() {
+        checkType(ENCODED_METHOD);
+        type = MUST_READ;
+        return EncodedValueCodec.readUnsignedInt(in, arg, false);
+    }
+
+    public void readNull() {
+        checkType(ENCODED_NULL);
+        type = MUST_READ;
+    }
+
+    public boolean readBoolean() {
+        checkType(ENCODED_BOOLEAN);
+        type = MUST_READ;
+        return arg != 0;
+    }
+
+    /**
+     * Skips a single value, including its nested values if it is an array or
+     * annotation.
+     */
+    public void skipValue() {
+        switch (peek()) {
+        case ENCODED_BYTE:
+            readByte();
+            break;
+        case ENCODED_SHORT:
+            readShort();
+            break;
+        case ENCODED_CHAR:
+            readChar();
+            break;
+        case ENCODED_INT:
+            readInt();
+            break;
+        case ENCODED_LONG:
+            readLong();
+            break;
+        case ENCODED_FLOAT:
+            readFloat();
+            break;
+        case ENCODED_DOUBLE:
+            readDouble();
+            break;
+        case ENCODED_METHOD_TYPE:
+            readMethodType();
+            break;
+        case ENCODED_METHOD_HANDLE:
+            readMethodHandle();
+            break;
+        case ENCODED_STRING:
+            readString();
+            break;
+        case ENCODED_TYPE:
+            readType();
+            break;
+        case ENCODED_FIELD:
+            readField();
+            break;
+        case ENCODED_ENUM:
+            readEnum();
+            break;
+        case ENCODED_METHOD:
+            readMethod();
+            break;
+        case ENCODED_ARRAY:
+            for (int i = 0, size = readArray(); i < size; i++) {
+                skipValue();
+            }
+            break;
+        case ENCODED_ANNOTATION:
+            for (int i = 0, size = readAnnotation(); i < size; i++) {
+                readAnnotationName();
+                skipValue();
+            }
+            break;
+        case ENCODED_NULL:
+            readNull();
+            break;
+        case ENCODED_BOOLEAN:
+            readBoolean();
+            break;
+        default:
+            throw new DexException("Unexpected type: " + Integer.toHexString(type));
+        }
+    }
+
+    private void checkType(int expected) {
+        if (peek() != expected) {
+            throw new IllegalStateException(
+                    String.format("Expected %x but was %x", expected, peek()));
+        }
+    }
+}
diff --git a/dx/src/com/android/dex/FieldId.java b/dx/src/com/android/dex/FieldId.java
new file mode 100644
index 0000000..f78df9e
--- /dev/null
+++ b/dx/src/com/android/dex/FieldId.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.Unsigned;
+
+public final class FieldId implements Comparable<FieldId> {
+    private final Dex dex;
+    private final int declaringClassIndex;
+    private final int typeIndex;
+    private final int nameIndex;
+
+    public FieldId(Dex dex, int declaringClassIndex, int typeIndex, int nameIndex) {
+        this.dex = dex;
+        this.declaringClassIndex = declaringClassIndex;
+        this.typeIndex = typeIndex;
+        this.nameIndex = nameIndex;
+    }
+
+    public int getDeclaringClassIndex() {
+        return declaringClassIndex;
+    }
+
+    public int getTypeIndex() {
+        return typeIndex;
+    }
+
+    public int getNameIndex() {
+        return nameIndex;
+    }
+
+    @Override
+    public int compareTo(FieldId other) {
+        if (declaringClassIndex != other.declaringClassIndex) {
+            return Unsigned.compare(declaringClassIndex, other.declaringClassIndex);
+        }
+        if (nameIndex != other.nameIndex) {
+            return Unsigned.compare(nameIndex, other.nameIndex);
+        }
+        return Unsigned.compare(typeIndex, other.typeIndex); // should always be 0
+    }
+
+    public void writeTo(Dex.Section out) {
+        out.writeUnsignedShort(declaringClassIndex);
+        out.writeUnsignedShort(typeIndex);
+        out.writeInt(nameIndex);
+    }
+
+    @Override
+    public String toString() {
+        if (dex == null) {
+            return declaringClassIndex + " " + typeIndex + " " + nameIndex;
+        }
+        return dex.typeNames().get(typeIndex) + "." + dex.strings().get(nameIndex);
+    }
+}
diff --git a/dx/src/com/android/dex/Leb128.java b/dx/src/com/android/dex/Leb128.java
new file mode 100644
index 0000000..e4ca500
--- /dev/null
+++ b/dx/src/com/android/dex/Leb128.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.ByteInput;
+import com.android.dex.util.ByteOutput;
+
+/**
+ * Reads and writes DWARFv3 LEB 128 signed and unsigned integers. See DWARF v3
+ * section 7.6.
+ */
+public final class Leb128 {
+    private Leb128() {
+    }
+
+    /**
+     * Gets the number of bytes in the unsigned LEB128 encoding of the
+     * given value.
+     *
+     * @param value the value in question
+     * @return its write size, in bytes
+     */
+    public static int unsignedLeb128Size(int value) {
+        // TODO: This could be much cleverer.
+
+        int remaining = value >> 7;
+        int count = 0;
+
+        while (remaining != 0) {
+            remaining >>= 7;
+            count++;
+        }
+
+        return count + 1;
+    }
+
+    /**
+     * Reads an signed integer from {@code in}.
+     */
+    public static int readSignedLeb128(ByteInput in) {
+        int result = 0;
+        int cur;
+        int count = 0;
+        int signBits = -1;
+
+        do {
+            cur = in.readByte() & 0xff;
+            result |= (cur & 0x7f) << (count * 7);
+            signBits <<= 7;
+            count++;
+        } while (((cur & 0x80) == 0x80) && count < 5);
+
+        if ((cur & 0x80) == 0x80) {
+            throw new DexException("invalid LEB128 sequence");
+        }
+
+        // Sign extend if appropriate
+        if (((signBits >> 1) & result) != 0 ) {
+            result |= signBits;
+        }
+
+        return result;
+    }
+
+    /**
+     * Reads an unsigned integer from {@code in}.
+     */
+    public static int readUnsignedLeb128(ByteInput in) {
+        int result = 0;
+        int cur;
+        int count = 0;
+
+        do {
+            cur = in.readByte() & 0xff;
+            result |= (cur & 0x7f) << (count * 7);
+            count++;
+        } while (((cur & 0x80) == 0x80) && count < 5);
+
+        if ((cur & 0x80) == 0x80) {
+            throw new DexException("invalid LEB128 sequence");
+        }
+
+        return result;
+    }
+
+    /**
+     * Writes {@code value} as an unsigned integer to {@code out}, starting at
+     * {@code offset}. Returns the number of bytes written.
+     */
+    public static void writeUnsignedLeb128(ByteOutput out, int value) {
+        int remaining = value >>> 7;
+
+        while (remaining != 0) {
+            out.writeByte((byte) ((value & 0x7f) | 0x80));
+            value = remaining;
+            remaining >>>= 7;
+        }
+
+        out.writeByte((byte) (value & 0x7f));
+    }
+
+    /**
+     * Writes {@code value} as a signed integer to {@code out}, starting at
+     * {@code offset}. Returns the number of bytes written.
+     */
+    public static void writeSignedLeb128(ByteOutput out, int value) {
+        int remaining = value >> 7;
+        boolean hasMore = true;
+        int end = ((value & Integer.MIN_VALUE) == 0) ? 0 : -1;
+
+        while (hasMore) {
+            hasMore = (remaining != end)
+                    || ((remaining & 1) != ((value >> 6) & 1));
+
+            out.writeByte((byte) ((value & 0x7f) | (hasMore ? 0x80 : 0)));
+            value = remaining;
+            remaining >>= 7;
+        }
+    }
+}
diff --git a/dx/src/com/android/dex/MethodHandle.java b/dx/src/com/android/dex/MethodHandle.java
new file mode 100644
index 0000000..9772f54
--- /dev/null
+++ b/dx/src/com/android/dex/MethodHandle.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.Dex.Section;
+import com.android.dex.util.Unsigned;
+
+/**
+ * A method_handle_item:
+ * https://source.android.com/devices/tech/dalvik/dex-format#method-handle-item
+ */
+public class MethodHandle implements Comparable<MethodHandle> {
+
+    /**
+     * A method handle type code:
+     * https://source.android.com/devices/tech/dalvik/dex-format#method-handle-type-codes
+     */
+    public enum MethodHandleType {
+        METHOD_HANDLE_TYPE_STATIC_PUT(0x00),
+        METHOD_HANDLE_TYPE_STATIC_GET(0x01),
+        METHOD_HANDLE_TYPE_INSTANCE_PUT(0x02),
+        METHOD_HANDLE_TYPE_INSTANCE_GET(0x03),
+        METHOD_HANDLE_TYPE_INVOKE_STATIC(0x04),
+        METHOD_HANDLE_TYPE_INVOKE_INSTANCE(0x05),
+        METHOD_HANDLE_TYPE_INVOKE_DIRECT(0x06),
+        METHOD_HANDLE_TYPE_INVOKE_CONSTRUCTOR(0x07),
+        METHOD_HANDLE_TYPE_INVOKE_INTERFACE(0x08);
+
+        private final int value;
+
+        MethodHandleType(int value) {
+            this.value = value;
+        }
+
+        static MethodHandleType fromValue(int value) {
+            for (MethodHandleType methodHandleType : values()) {
+                if (methodHandleType.value == value) {
+                    return methodHandleType;
+                }
+            }
+            throw new IllegalArgumentException(String.valueOf(value));
+        }
+
+        public boolean isField() {
+            switch (this) {
+                case METHOD_HANDLE_TYPE_STATIC_PUT:
+                case METHOD_HANDLE_TYPE_STATIC_GET:
+                case METHOD_HANDLE_TYPE_INSTANCE_PUT:
+                case METHOD_HANDLE_TYPE_INSTANCE_GET:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+    }
+
+    private final Dex dex;
+    private final MethodHandleType methodHandleType;
+    private final int unused1;
+    private final int fieldOrMethodId;
+    private final int unused2;
+
+    public MethodHandle(
+            Dex dex,
+            MethodHandleType methodHandleType,
+            int unused1,
+            int fieldOrMethodId,
+            int unused2) {
+        this.dex = dex;
+        this.methodHandleType = methodHandleType;
+        this.unused1 = unused1;
+        this.fieldOrMethodId = fieldOrMethodId;
+        this.unused2 = unused2;
+    }
+
+    @Override
+    public int compareTo(MethodHandle o) {
+        if (methodHandleType != o.methodHandleType) {
+            return methodHandleType.compareTo(o.methodHandleType);
+        }
+        return Unsigned.compare(fieldOrMethodId, o.fieldOrMethodId);
+    }
+
+    public MethodHandleType getMethodHandleType() {
+        return methodHandleType;
+    }
+
+    public int getUnused1() {
+        return unused1;
+    }
+
+    public int getFieldOrMethodId() {
+        return fieldOrMethodId;
+    }
+
+    public int getUnused2() {
+        return unused2;
+    }
+
+    public void writeTo(Section out) {
+        out.writeUnsignedShort(methodHandleType.value);
+        out.writeUnsignedShort(unused1);
+        out.writeUnsignedShort(fieldOrMethodId);
+        out.writeUnsignedShort(unused2);
+    }
+
+    @Override
+    public String toString() {
+        if (dex == null) {
+            return methodHandleType + " " + fieldOrMethodId;
+        }
+        return methodHandleType
+                + " "
+                + (methodHandleType.isField()
+                        ? dex.fieldIds().get(fieldOrMethodId)
+                        : dex.methodIds().get(fieldOrMethodId));
+    }
+}
diff --git a/dx/src/com/android/dex/MethodId.java b/dx/src/com/android/dex/MethodId.java
new file mode 100644
index 0000000..ff3ca3e
--- /dev/null
+++ b/dx/src/com/android/dex/MethodId.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.Unsigned;
+
+public final class MethodId implements Comparable<MethodId> {
+    private final Dex dex;
+    private final int declaringClassIndex;
+    private final int protoIndex;
+    private final int nameIndex;
+
+    public MethodId(Dex dex, int declaringClassIndex, int protoIndex, int nameIndex) {
+        this.dex = dex;
+        this.declaringClassIndex = declaringClassIndex;
+        this.protoIndex = protoIndex;
+        this.nameIndex = nameIndex;
+    }
+
+    public int getDeclaringClassIndex() {
+        return declaringClassIndex;
+    }
+
+    public int getProtoIndex() {
+        return protoIndex;
+    }
+
+    public int getNameIndex() {
+        return nameIndex;
+    }
+
+    @Override
+    public int compareTo(MethodId other) {
+        if (declaringClassIndex != other.declaringClassIndex) {
+            return Unsigned.compare(declaringClassIndex, other.declaringClassIndex);
+        }
+        if (nameIndex != other.nameIndex) {
+            return Unsigned.compare(nameIndex, other.nameIndex);
+        }
+        return Unsigned.compare(protoIndex, other.protoIndex);
+    }
+
+    public void writeTo(Dex.Section out) {
+        out.writeUnsignedShort(declaringClassIndex);
+        out.writeUnsignedShort(protoIndex);
+        out.writeInt(nameIndex);
+    }
+
+    @Override
+    public String toString() {
+        if (dex == null) {
+            return declaringClassIndex + " " + protoIndex + " " + nameIndex;
+        }
+        return dex.typeNames().get(declaringClassIndex)
+                + "." + dex.strings().get(nameIndex)
+                + dex.readTypeList(dex.protoIds().get(protoIndex).getParametersOffset());
+    }
+}
diff --git a/dx/src/com/android/dex/Mutf8.java b/dx/src/com/android/dex/Mutf8.java
new file mode 100644
index 0000000..df3f315
--- /dev/null
+++ b/dx/src/com/android/dex/Mutf8.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.ByteInput;
+import java.io.UTFDataFormatException;
+
+/**
+ * Modified UTF-8 as described in the dex file format spec.
+ */
+public final class Mutf8 {
+    private Mutf8() {}
+
+    /**
+     * Decodes bytes from {@code in} into {@code out} until a delimiter 0x00 is
+     * encountered. Returns a new string containing the decoded characters.
+     */
+    public static String decode(ByteInput in, char[] out) throws UTFDataFormatException {
+        int s = 0;
+        while (true) {
+            char a = (char) (in.readByte() & 0xff);
+            if (a == 0) {
+                return new String(out, 0, s);
+            }
+            out[s] = a;
+            if (a < '\u0080') {
+                s++;
+            } else if ((a & 0xe0) == 0xc0) {
+                int b = in.readByte() & 0xff;
+                if ((b & 0xC0) != 0x80) {
+                    throw new UTFDataFormatException("bad second byte");
+                }
+                out[s++] = (char) (((a & 0x1F) << 6) | (b & 0x3F));
+            } else if ((a & 0xf0) == 0xe0) {
+                int b = in.readByte() & 0xff;
+                int c = in.readByte() & 0xff;
+                if (((b & 0xC0) != 0x80) || ((c & 0xC0) != 0x80)) {
+                    throw new UTFDataFormatException("bad second or third byte");
+                }
+                out[s++] = (char) (((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F));
+            } else {
+                throw new UTFDataFormatException("bad byte");
+            }
+        }
+    }
+
+    /**
+     * Returns the number of bytes the modified UTF8 representation of 's' would take.
+     */
+    private static long countBytes(String s, boolean shortLength) throws UTFDataFormatException {
+        long result = 0;
+        final int length = s.length();
+        for (int i = 0; i < length; ++i) {
+            char ch = s.charAt(i);
+            if (ch != 0 && ch <= 127) { // U+0000 uses two bytes.
+                ++result;
+            } else if (ch <= 2047) {
+                result += 2;
+            } else {
+                result += 3;
+            }
+            if (shortLength && result > 65535) {
+                throw new UTFDataFormatException("String more than 65535 UTF bytes long");
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Encodes the modified UTF-8 bytes corresponding to {@code s} into  {@code
+     * dst}, starting at {@code offset}.
+     */
+    public static void encode(byte[] dst, int offset, String s) {
+        final int length = s.length();
+        for (int i = 0; i < length; i++) {
+            char ch = s.charAt(i);
+            if (ch != 0 && ch <= 127) { // U+0000 uses two bytes.
+                dst[offset++] = (byte) ch;
+            } else if (ch <= 2047) {
+                dst[offset++] = (byte) (0xc0 | (0x1f & (ch >> 6)));
+                dst[offset++] = (byte) (0x80 | (0x3f & ch));
+            } else {
+                dst[offset++] = (byte) (0xe0 | (0x0f & (ch >> 12)));
+                dst[offset++] = (byte) (0x80 | (0x3f & (ch >> 6)));
+                dst[offset++] = (byte) (0x80 | (0x3f & ch));
+            }
+        }
+    }
+
+    /**
+     * Returns an array containing the <i>modified UTF-8</i> form of {@code s}.
+     */
+    public static byte[] encode(String s) throws UTFDataFormatException {
+        int utfCount = (int) countBytes(s, true);
+        byte[] result = new byte[utfCount];
+        encode(result, 0, s);
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dex/ProtoId.java b/dx/src/com/android/dex/ProtoId.java
new file mode 100644
index 0000000..b603620
--- /dev/null
+++ b/dx/src/com/android/dex/ProtoId.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.Unsigned;
+
+public final class ProtoId implements Comparable<ProtoId> {
+    private final Dex dex;
+    private final int shortyIndex;
+    private final int returnTypeIndex;
+    private final int parametersOffset;
+
+    public ProtoId(Dex dex, int shortyIndex, int returnTypeIndex, int parametersOffset) {
+        this.dex = dex;
+        this.shortyIndex = shortyIndex;
+        this.returnTypeIndex = returnTypeIndex;
+        this.parametersOffset = parametersOffset;
+    }
+
+    @Override
+    public int compareTo(ProtoId other) {
+        if (returnTypeIndex != other.returnTypeIndex) {
+            return Unsigned.compare(returnTypeIndex, other.returnTypeIndex);
+        }
+        return Unsigned.compare(parametersOffset, other.parametersOffset);
+    }
+
+    public int getShortyIndex() {
+        return shortyIndex;
+    }
+
+    public int getReturnTypeIndex() {
+        return returnTypeIndex;
+    }
+
+    public int getParametersOffset() {
+        return parametersOffset;
+    }
+
+    public void writeTo(Dex.Section out) {
+        out.writeInt(shortyIndex);
+        out.writeInt(returnTypeIndex);
+        out.writeInt(parametersOffset);
+    }
+
+    @Override
+    public String toString() {
+        if (dex == null) {
+            return shortyIndex + " " + returnTypeIndex + " " + parametersOffset;
+        }
+
+        return dex.strings().get(shortyIndex)
+                + ": " + dex.typeNames().get(returnTypeIndex)
+                + " " + dex.readTypeList(parametersOffset);
+    }
+}
diff --git a/dx/src/com/android/dex/SizeOf.java b/dx/src/com/android/dex/SizeOf.java
new file mode 100644
index 0000000..4795250
--- /dev/null
+++ b/dx/src/com/android/dex/SizeOf.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+public final class SizeOf {
+    private SizeOf() {}
+
+    public static final int UBYTE = 1;
+    public static final int USHORT = 2;
+    public static final int UINT = 4;
+
+    public static final int SIGNATURE = UBYTE * 20;
+
+    /**
+     * magic ubyte[8]
+     * checksum uint
+     * signature ubyte[20]
+     * file_size uint
+     * header_size uint
+     * endian_tag uint
+     * link_size uint
+     * link_off uint
+     * map_off uint
+     * string_ids_size uint
+     * string_ids_off uint
+     * type_ids_size uint
+     * type_ids_off uint
+     * proto_ids_size uint
+     * proto_ids_off uint
+     * field_ids_size uint
+     * field_ids_off uint
+     * method_ids_size uint
+     * method_ids_off uint
+     * class_defs_size uint
+     * class_defs_off uint
+     * data_size uint
+     * data_off uint
+     */
+    public static final int HEADER_ITEM = (8 * UBYTE) + UINT + SIGNATURE + (20 * UINT); // 0x70
+
+    /**
+     * string_data_off uint
+     */
+    public static final int STRING_ID_ITEM = UINT;
+
+    /**
+     * descriptor_idx uint
+     */
+    public static final int TYPE_ID_ITEM = UINT;
+
+    /**
+     * type_idx ushort
+     */
+    public static final int TYPE_ITEM = USHORT;
+
+    /**
+     * shorty_idx uint
+     * return_type_idx uint
+     * return_type_idx uint
+     */
+    public static final int PROTO_ID_ITEM = UINT + UINT + UINT;
+
+    /**
+     * class_idx ushort
+     * type_idx/proto_idx ushort
+     * name_idx uint
+     */
+    public static final int MEMBER_ID_ITEM = USHORT + USHORT + UINT;
+
+    /**
+     * class_idx uint
+     * access_flags uint
+     * superclass_idx uint
+     * interfaces_off uint
+     * source_file_idx uint
+     * annotations_off uint
+     * class_data_off uint
+     * static_values_off uint
+     */
+    public static final int CLASS_DEF_ITEM = 8 * UINT;
+
+    /**
+     * type ushort
+     * unused ushort
+     * size uint
+     * offset uint
+     */
+    public static final int MAP_ITEM = USHORT + USHORT + UINT + UINT;
+
+    /**
+     * start_addr uint
+     * insn_count ushort
+     * handler_off ushort
+     */
+    public static final int TRY_ITEM = UINT + USHORT + USHORT;
+
+    /**
+     * call_site_off uint
+     */
+    public static final int CALL_SITE_ID_ITEM = UINT;
+
+    /**
+     * method_handle_type ushort
+     * unused ushort
+     * field_or_method_id ushort
+     * unused ushort
+     */
+    public static final int METHOD_HANDLE_ITEM = USHORT + USHORT + USHORT + USHORT;
+}
diff --git a/dx/src/com/android/dex/TableOfContents.java b/dx/src/com/android/dex/TableOfContents.java
new file mode 100644
index 0000000..3483610
--- /dev/null
+++ b/dx/src/com/android/dex/TableOfContents.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+/**
+ * The file header and map.
+ */
+public final class TableOfContents {
+
+    /*
+     * TODO: factor out ID constants.
+     */
+
+    public final Section header = new Section(0x0000);
+    public final Section stringIds = new Section(0x0001);
+    public final Section typeIds = new Section(0x0002);
+    public final Section protoIds = new Section(0x0003);
+    public final Section fieldIds = new Section(0x0004);
+    public final Section methodIds = new Section(0x0005);
+    public final Section classDefs = new Section(0x0006);
+    public final Section callSiteIds = new Section(0x0007);
+    public final Section methodHandles = new Section(0x0008);
+    public final Section mapList = new Section(0x1000);
+    public final Section typeLists = new Section(0x1001);
+    public final Section annotationSetRefLists = new Section(0x1002);
+    public final Section annotationSets = new Section(0x1003);
+    public final Section classDatas = new Section(0x2000);
+    public final Section codes = new Section(0x2001);
+    public final Section stringDatas = new Section(0x2002);
+    public final Section debugInfos = new Section(0x2003);
+    public final Section annotations = new Section(0x2004);
+    public final Section encodedArrays = new Section(0x2005);
+    public final Section annotationsDirectories = new Section(0x2006);
+    public final Section[] sections = {
+        header, stringIds, typeIds, protoIds, fieldIds, methodIds, classDefs, mapList, callSiteIds,
+        methodHandles, typeLists, annotationSetRefLists, annotationSets, classDatas, codes,
+        stringDatas, debugInfos, annotations, encodedArrays, annotationsDirectories
+    };
+
+    public int apiLevel;
+    public int checksum;
+    public byte[] signature;
+    public int fileSize;
+    public int linkSize;
+    public int linkOff;
+    public int dataSize;
+    public int dataOff;
+
+    public TableOfContents() {
+        signature = new byte[20];
+    }
+
+    public void readFrom(Dex dex) throws IOException {
+        readHeader(dex.open(0));
+        readMap(dex.open(mapList.off));
+        computeSizesFromOffsets();
+    }
+
+    private void readHeader(Dex.Section headerIn) throws UnsupportedEncodingException {
+        byte[] magic = headerIn.readByteArray(8);
+
+        if (!DexFormat.isSupportedDexMagic(magic)) {
+            String msg =
+                    String.format("Unexpected magic: [0x%02x, 0x%02x, 0x%02x, 0x%02x, "
+                                  + "0x%02x, 0x%02x, 0x%02x, 0x%02x]",
+                                  magic[0], magic[1], magic[2], magic[3],
+                                  magic[4], magic[5], magic[6], magic[7]);
+            throw new DexException(msg);
+        }
+
+        apiLevel = DexFormat.magicToApi(magic);
+        checksum = headerIn.readInt();
+        signature = headerIn.readByteArray(20);
+        fileSize = headerIn.readInt();
+        int headerSize = headerIn.readInt();
+        if (headerSize != SizeOf.HEADER_ITEM) {
+            throw new DexException("Unexpected header: 0x" + Integer.toHexString(headerSize));
+        }
+        int endianTag = headerIn.readInt();
+        if (endianTag != DexFormat.ENDIAN_TAG) {
+            throw new DexException("Unexpected endian tag: 0x" + Integer.toHexString(endianTag));
+        }
+        linkSize = headerIn.readInt();
+        linkOff = headerIn.readInt();
+        mapList.off = headerIn.readInt();
+        if (mapList.off == 0) {
+            throw new DexException("Cannot merge dex files that do not contain a map");
+        }
+        stringIds.size = headerIn.readInt();
+        stringIds.off = headerIn.readInt();
+        typeIds.size = headerIn.readInt();
+        typeIds.off = headerIn.readInt();
+        protoIds.size = headerIn.readInt();
+        protoIds.off = headerIn.readInt();
+        fieldIds.size = headerIn.readInt();
+        fieldIds.off = headerIn.readInt();
+        methodIds.size = headerIn.readInt();
+        methodIds.off = headerIn.readInt();
+        classDefs.size = headerIn.readInt();
+        classDefs.off = headerIn.readInt();
+        dataSize = headerIn.readInt();
+        dataOff = headerIn.readInt();
+    }
+
+    private void readMap(Dex.Section in) throws IOException {
+        int mapSize = in.readInt();
+        Section previous = null;
+        for (int i = 0; i < mapSize; i++) {
+            short type = in.readShort();
+            in.readShort(); // unused
+            Section section = getSection(type);
+            int size = in.readInt();
+            int offset = in.readInt();
+
+            if ((section.size != 0 && section.size != size)
+                    || (section.off != -1 && section.off != offset)) {
+                throw new DexException("Unexpected map value for 0x" + Integer.toHexString(type));
+            }
+
+            section.size = size;
+            section.off = offset;
+
+            if (previous != null && previous.off > section.off) {
+                throw new DexException("Map is unsorted at " + previous + ", " + section);
+            }
+
+            previous = section;
+        }
+        Arrays.sort(sections);
+    }
+
+    public void computeSizesFromOffsets() {
+        int end = dataOff + dataSize;
+        for (int i = sections.length - 1; i >= 0; i--) {
+            Section section = sections[i];
+            if (section.off == -1) {
+                continue;
+            }
+            if (section.off > end) {
+                throw new DexException("Map is unsorted at " + section);
+            }
+            section.byteCount = end - section.off;
+            end = section.off;
+        }
+    }
+
+    private Section getSection(short type) {
+        for (Section section : sections) {
+            if (section.type == type) {
+                return section;
+            }
+        }
+        throw new IllegalArgumentException("No such map item: " + type);
+    }
+
+    public void writeHeader(Dex.Section out, int api) throws IOException {
+        out.write(DexFormat.apiToMagic(api).getBytes("UTF-8"));
+        out.writeInt(checksum);
+        out.write(signature);
+        out.writeInt(fileSize);
+        out.writeInt(SizeOf.HEADER_ITEM);
+        out.writeInt(DexFormat.ENDIAN_TAG);
+        out.writeInt(linkSize);
+        out.writeInt(linkOff);
+        out.writeInt(mapList.off);
+        out.writeInt(stringIds.size);
+        out.writeInt(stringIds.off);
+        out.writeInt(typeIds.size);
+        out.writeInt(typeIds.off);
+        out.writeInt(protoIds.size);
+        out.writeInt(protoIds.off);
+        out.writeInt(fieldIds.size);
+        out.writeInt(fieldIds.off);
+        out.writeInt(methodIds.size);
+        out.writeInt(methodIds.off);
+        out.writeInt(classDefs.size);
+        out.writeInt(classDefs.off);
+        out.writeInt(dataSize);
+        out.writeInt(dataOff);
+    }
+
+    public void writeMap(Dex.Section out) throws IOException {
+        int count = 0;
+        for (Section section : sections) {
+            if (section.exists()) {
+                count++;
+            }
+        }
+
+        out.writeInt(count);
+        for (Section section : sections) {
+            if (section.exists()) {
+                out.writeShort(section.type);
+                out.writeShort((short) 0);
+                out.writeInt(section.size);
+                out.writeInt(section.off);
+            }
+        }
+    }
+
+    public static class Section implements Comparable<Section> {
+        public final short type;
+        public int size = 0;
+        public int off = -1;
+        public int byteCount = 0;
+
+        public Section(int type) {
+            this.type = (short) type;
+        }
+
+        public boolean exists() {
+            return size > 0;
+        }
+
+        @Override
+        public int compareTo(Section section) {
+            if (off != section.off) {
+                return off < section.off ? -1 : 1;
+            }
+            return 0;
+        }
+
+        @Override
+        public String toString() {
+            return String.format("Section[type=%#x,off=%#x,size=%#x]", type, off, size);
+        }
+    }
+}
diff --git a/dx/src/com/android/dex/TypeList.java b/dx/src/com/android/dex/TypeList.java
new file mode 100644
index 0000000..b54e184
--- /dev/null
+++ b/dx/src/com/android/dex/TypeList.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex;
+
+import com.android.dex.util.Unsigned;
+
+public final class TypeList implements Comparable<TypeList> {
+
+    public static final TypeList EMPTY = new TypeList(null, Dex.EMPTY_SHORT_ARRAY);
+
+    private final Dex dex;
+    private final short[] types;
+
+    public TypeList(Dex dex, short[] types) {
+        this.dex = dex;
+        this.types = types;
+    }
+
+    public short[] getTypes() {
+        return types;
+    }
+
+    @Override
+    public int compareTo(TypeList other) {
+        for (int i = 0; i < types.length && i < other.types.length; i++) {
+            if (types[i] != other.types[i]) {
+                return Unsigned.compare(types[i], other.types[i]);
+            }
+        }
+        return Unsigned.compare(types.length, other.types.length);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+        result.append("(");
+        for (int i = 0, typesLength = types.length; i < typesLength; i++) {
+            result.append(dex != null ? dex.typeNames().get(types[i]) : types[i]);
+        }
+        result.append(")");
+        return result.toString();
+    }
+}
diff --git a/dx/src/com/android/dex/util/ByteArrayByteInput.java b/dx/src/com/android/dex/util/ByteArrayByteInput.java
new file mode 100644
index 0000000..054c9af
--- /dev/null
+++ b/dx/src/com/android/dex/util/ByteArrayByteInput.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex.util;
+
+public final class ByteArrayByteInput implements ByteInput {
+
+    private final byte[] bytes;
+    private int position;
+
+    public ByteArrayByteInput(byte... bytes) {
+        this.bytes = bytes;
+    }
+
+    @Override
+    public byte readByte() {
+        return bytes[position++];
+    }
+}
diff --git a/dx/src/com/android/dex/util/ByteInput.java b/dx/src/com/android/dex/util/ByteInput.java
new file mode 100644
index 0000000..f1a7196
--- /dev/null
+++ b/dx/src/com/android/dex/util/ByteInput.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex.util;
+
+/**
+ * A byte source.
+ */
+public interface ByteInput {
+
+    /**
+     * Returns a byte.
+     *
+     * @throws IndexOutOfBoundsException if all bytes have been read.
+     */
+    byte readByte();
+}
diff --git a/dx/src/com/android/dex/util/ByteOutput.java b/dx/src/com/android/dex/util/ByteOutput.java
new file mode 100644
index 0000000..eb77040
--- /dev/null
+++ b/dx/src/com/android/dex/util/ByteOutput.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex.util;
+
+/**
+ * A byte sink.
+ */
+public interface ByteOutput {
+
+    /**
+     * Writes a byte.
+     *
+     * @throws IndexOutOfBoundsException if all bytes have been written.
+     */
+    void writeByte(int i);
+}
diff --git a/dx/src/com/android/dex/util/ExceptionWithContext.java b/dx/src/com/android/dex/util/ExceptionWithContext.java
new file mode 100644
index 0000000..5dfd954
--- /dev/null
+++ b/dx/src/com/android/dex/util/ExceptionWithContext.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex.util;
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+/**
+ * Exception which carries around structured context.
+ */
+public class ExceptionWithContext extends RuntimeException {
+    /** {@code non-null;} human-oriented context of the exception */
+    private StringBuffer context;
+
+    /**
+     * Augments the given exception with the given context, and return the
+     * result. The result is either the given exception if it was an
+     * {@link ExceptionWithContext}, or a newly-constructed exception if it
+     * was not.
+     *
+     * @param ex {@code non-null;} the exception to augment
+     * @param str {@code non-null;} context to add
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static ExceptionWithContext withContext(Throwable ex, String str) {
+        ExceptionWithContext ewc;
+
+        if (ex instanceof ExceptionWithContext) {
+            ewc = (ExceptionWithContext) ex;
+        } else {
+            ewc = new ExceptionWithContext(ex);
+        }
+
+        ewc.addContext(str);
+        return ewc;
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param message human-oriented message
+     */
+    public ExceptionWithContext(String message) {
+        this(message, null);
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param cause {@code null-ok;} exception that caused this one
+     */
+    public ExceptionWithContext(Throwable cause) {
+        this(null, cause);
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param message human-oriented message
+     * @param cause {@code null-ok;} exception that caused this one
+     */
+    public ExceptionWithContext(String message, Throwable cause) {
+        super((message != null) ? message :
+              (cause != null) ? cause.getMessage() : null,
+              cause);
+
+        if (cause instanceof ExceptionWithContext) {
+            String ctx = ((ExceptionWithContext) cause).context.toString();
+            context = new StringBuffer(ctx.length() + 200);
+            context.append(ctx);
+        } else {
+            context = new StringBuffer(200);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void printStackTrace(PrintStream out) {
+        super.printStackTrace(out);
+        out.println(context);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void printStackTrace(PrintWriter out) {
+        super.printStackTrace(out);
+        out.println(context);
+    }
+
+    /**
+     * Adds a line of context to this instance.
+     *
+     * @param str {@code non-null;} new context
+     */
+    public void addContext(String str) {
+        if (str == null) {
+            throw new NullPointerException("str == null");
+        }
+
+        context.append(str);
+        if (!str.endsWith("\n")) {
+            context.append('\n');
+        }
+    }
+
+    /**
+     * Gets the context.
+     *
+     * @return {@code non-null;} the context
+     */
+    public String getContext() {
+        return context.toString();
+    }
+
+    /**
+     * Prints the message and context.
+     *
+     * @param out {@code non-null;} where to print to
+     */
+    public void printContext(PrintStream out) {
+        out.println(getMessage());
+        out.print(context);
+    }
+
+    /**
+     * Prints the message and context.
+     *
+     * @param out {@code non-null;} where to print to
+     */
+    public void printContext(PrintWriter out) {
+        out.println(getMessage());
+        out.print(context);
+    }
+}
diff --git a/dx/src/com/android/dex/util/FileUtils.java b/dx/src/com/android/dex/util/FileUtils.java
new file mode 100644
index 0000000..4cea95c
--- /dev/null
+++ b/dx/src/com/android/dex/util/FileUtils.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+/**
+ * File I/O utilities.
+ */
+public final class FileUtils {
+    private FileUtils() {
+    }
+
+    /**
+     * Reads the named file, translating {@link IOException} to a
+     * {@link RuntimeException} of some sort.
+     *
+     * @param fileName {@code non-null;} name of the file to read
+     * @return {@code non-null;} contents of the file
+     */
+    public static byte[] readFile(String fileName) {
+        File file = new File(fileName);
+        return readFile(file);
+    }
+
+    /**
+     * Reads the given file, translating {@link IOException} to a
+     * {@link RuntimeException} of some sort.
+     *
+     * @param file {@code non-null;} the file to read
+     * @return {@code non-null;} contents of the file
+     */
+    public static byte[] readFile(File file) {
+        if (!file.exists()) {
+            throw new RuntimeException(file + ": file not found");
+        }
+
+        if (!file.isFile()) {
+            throw new RuntimeException(file + ": not a file");
+        }
+
+        if (!file.canRead()) {
+            throw new RuntimeException(file + ": file not readable");
+        }
+
+        long longLength = file.length();
+        int length = (int) longLength;
+        if (length != longLength) {
+            throw new RuntimeException(file + ": file too long");
+        }
+
+        byte[] result = new byte[length];
+
+        try {
+            FileInputStream in = new FileInputStream(file);
+            int at = 0;
+            while (length > 0) {
+                int amt = in.read(result, at, length);
+                if (amt == -1) {
+                    throw new RuntimeException(file + ": unexpected EOF");
+                }
+                at += amt;
+                length -= amt;
+            }
+            in.close();
+        } catch (IOException ex) {
+            throw new RuntimeException(file + ": trouble reading", ex);
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns true if {@code fileName} names a .zip, .jar, or .apk.
+     */
+    public static boolean hasArchiveSuffix(String fileName) {
+        return fileName.endsWith(".zip")
+                || fileName.endsWith(".jar")
+                || fileName.endsWith(".apk");
+    }
+}
diff --git a/dx/src/com/android/dex/util/Unsigned.java b/dx/src/com/android/dex/util/Unsigned.java
new file mode 100644
index 0000000..cb50d0a
--- /dev/null
+++ b/dx/src/com/android/dex/util/Unsigned.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dex.util;
+
+/**
+ * Unsigned arithmetic over Java's signed types.
+ */
+public final class Unsigned {
+    private Unsigned() {}
+
+    public static int compare(short ushortA, short ushortB) {
+        if (ushortA == ushortB) {
+            return 0;
+        }
+        int a = ushortA & 0xFFFF;
+        int b = ushortB & 0xFFFF;
+        return a < b ? -1 : 1;
+    }
+
+    public static int compare(int uintA, int uintB) {
+        if (uintA == uintB) {
+            return 0;
+        }
+        long a = uintA & 0xFFFFFFFFL;
+        long b = uintB & 0xFFFFFFFFL;
+        return a < b ? -1 : 1;
+    }
+}
diff --git a/dx/src/com/android/dx/Version.java b/dx/src/com/android/dx/Version.java
new file mode 100644
index 0000000..8bc56d1
--- /dev/null
+++ b/dx/src/com/android/dx/Version.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx;
+
+/**
+ * Version number for dx.
+ */
+public class Version {
+    /** {@code non-null;} version string */
+    public static final String VERSION = "1.16";
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttAnnotationDefault.java b/dx/src/com/android/dx/cf/attrib/AttAnnotationDefault.java
new file mode 100644
index 0000000..2fff0b8
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttAnnotationDefault.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.cst.Constant;
+
+/**
+ * Attribute class for {@code AnnotationDefault} attributes.
+ */
+public final class AttAnnotationDefault extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "AnnotationDefault";
+
+    /** {@code non-null;} the annotation default value */
+    private final Constant value;
+
+    /** {@code >= 0;} attribute data length in the original classfile (not
+     * including the attribute header) */
+    private final int byteLength;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param value {@code non-null;} the annotation default value
+     * @param byteLength {@code >= 0;} attribute data length in the original
+     * classfile (not including the attribute header)
+     */
+    public AttAnnotationDefault(Constant value, int byteLength) {
+        super(ATTRIBUTE_NAME);
+
+        if (value == null) {
+            throw new NullPointerException("value == null");
+        }
+
+        this.value = value;
+        this.byteLength = byteLength;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        // Add six for the standard attribute header.
+        return byteLength + 6;
+    }
+
+    /**
+     * Gets the annotation default value.
+     *
+     * @return {@code non-null;} the value
+     */
+    public Constant getValue() {
+        return value;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttBootstrapMethods.java b/dx/src/com/android/dx/cf/attrib/AttBootstrapMethods.java
new file mode 100644
index 0000000..acb2f54
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttBootstrapMethods.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.cf.attrib;
+
+import com.android.dx.cf.code.BootstrapMethodsList;
+
+/**
+ * Attribute class for standard {@code AttBootstrapMethods} attributes.
+ */
+public class AttBootstrapMethods extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "BootstrapMethods";
+
+    private static final int ATTRIBUTE_HEADER_BYTES = 8;
+    private static final int BOOTSTRAP_METHOD_BYTES = 4;
+    private static final int BOOTSTRAP_ARGUMENT_BYTES = 2;
+
+    private final BootstrapMethodsList bootstrapMethods;
+
+    private final int byteLength;
+
+    public AttBootstrapMethods(BootstrapMethodsList bootstrapMethods) {
+        super(ATTRIBUTE_NAME);
+        this.bootstrapMethods = bootstrapMethods;
+
+        int bytes = ATTRIBUTE_HEADER_BYTES + bootstrapMethods.size() * BOOTSTRAP_METHOD_BYTES;
+        for (int i = 0; i < bootstrapMethods.size(); ++i) {
+            int numberOfArguments = bootstrapMethods.get(i).getBootstrapMethodArguments().size();
+            bytes += numberOfArguments * BOOTSTRAP_ARGUMENT_BYTES;
+        }
+        this.byteLength = bytes;
+    }
+
+    @Override
+    public int byteLength() {
+        return byteLength;
+    }
+
+    /**
+     * Get the bootstrap methods present in attribute.
+     * @return bootstrap methods list
+     */
+    public BootstrapMethodsList getBootstrapMethods() {
+        return bootstrapMethods;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttCode.java b/dx/src/com/android/dx/cf/attrib/AttCode.java
new file mode 100644
index 0000000..5cf1a54
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttCode.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.cf.code.ByteCatchList;
+import com.android.dx.cf.code.BytecodeArray;
+import com.android.dx.cf.iface.AttributeList;
+import com.android.dx.util.MutabilityException;
+
+/**
+ * Attribute class for standard {@code Code} attributes.
+ */
+public final class AttCode extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "Code";
+
+    /** {@code >= 0;} the stack size */
+    private final int maxStack;
+
+    /** {@code >= 0;} the number of locals */
+    private final int maxLocals;
+
+    /** {@code non-null;} array containing the bytecode per se */
+    private final BytecodeArray code;
+
+    /** {@code non-null;} the exception table */
+    private final ByteCatchList catches;
+
+    /** {@code non-null;} the associated list of attributes */
+    private final AttributeList attributes;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param maxStack {@code >= 0;} the stack size
+     * @param maxLocals {@code >= 0;} the number of locals
+     * @param code {@code non-null;} array containing the bytecode per se
+     * @param catches {@code non-null;} the exception table
+     * @param attributes {@code non-null;} the associated list of attributes
+     */
+    public AttCode(int maxStack, int maxLocals, BytecodeArray code,
+                   ByteCatchList catches, AttributeList attributes) {
+        super(ATTRIBUTE_NAME);
+
+        if (maxStack < 0) {
+            throw new IllegalArgumentException("maxStack < 0");
+        }
+
+        if (maxLocals < 0) {
+            throw new IllegalArgumentException("maxLocals < 0");
+        }
+
+        if (code == null) {
+            throw new NullPointerException("code == null");
+        }
+
+        try {
+            if (catches.isMutable()) {
+                throw new MutabilityException("catches.isMutable()");
+            }
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("catches == null");
+        }
+
+        try {
+            if (attributes.isMutable()) {
+                throw new MutabilityException("attributes.isMutable()");
+            }
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("attributes == null");
+        }
+
+        this.maxStack = maxStack;
+        this.maxLocals = maxLocals;
+        this.code = code;
+        this.catches = catches;
+        this.attributes = attributes;
+    }
+
+    @Override
+    public int byteLength() {
+        return 10 + code.byteLength() + catches.byteLength() +
+            attributes.byteLength();
+    }
+
+    /**
+     * Gets the maximum stack size.
+     *
+     * @return {@code >= 0;} the maximum stack size
+     */
+    public int getMaxStack() {
+        return maxStack;
+    }
+
+    /**
+     * Gets the number of locals.
+     *
+     * @return {@code >= 0;} the number of locals
+     */
+    public int getMaxLocals() {
+        return maxLocals;
+    }
+
+    /**
+     * Gets the bytecode array.
+     *
+     * @return {@code non-null;} the bytecode array
+     */
+    public BytecodeArray getCode() {
+        return code;
+    }
+
+    /**
+     * Gets the exception table.
+     *
+     * @return {@code non-null;} the exception table
+     */
+    public ByteCatchList getCatches() {
+        return catches;
+    }
+
+    /**
+     * Gets the associated attribute list.
+     *
+     * @return {@code non-null;} the attribute list
+     */
+    public AttributeList getAttributes() {
+        return attributes;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttConstantValue.java b/dx/src/com/android/dx/cf/attrib/AttConstantValue.java
new file mode 100644
index 0000000..6a4a64c
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttConstantValue.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.cst.CstDouble;
+import com.android.dx.rop.cst.CstFloat;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstLong;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.TypedConstant;
+
+/**
+ * Attribute class for standard {@code ConstantValue} attributes.
+ */
+public final class AttConstantValue extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "ConstantValue";
+
+    /** {@code non-null;} the constant value */
+    private final TypedConstant constantValue;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param constantValue {@code non-null;} the constant value, which must
+     * be an instance of one of: {@code CstString},
+     * {@code CstInteger}, {@code CstLong},
+     * {@code CstFloat}, or {@code CstDouble}
+     */
+    public AttConstantValue(TypedConstant constantValue) {
+        super(ATTRIBUTE_NAME);
+
+        if (!((constantValue instanceof CstString) ||
+               (constantValue instanceof CstInteger) ||
+               (constantValue instanceof CstLong) ||
+               (constantValue instanceof CstFloat) ||
+               (constantValue instanceof CstDouble))) {
+            if (constantValue == null) {
+                throw new NullPointerException("constantValue == null");
+            }
+            throw new IllegalArgumentException("bad type for constantValue");
+        }
+
+        this.constantValue = constantValue;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 8;
+    }
+
+    /**
+     * Gets the constant value of this instance. The returned value
+     * is an instance of one of: {@code CstString},
+     * {@code CstInteger}, {@code CstLong},
+     * {@code CstFloat}, or {@code CstDouble}.
+     *
+     * @return {@code non-null;} the constant value
+     */
+    public TypedConstant getConstantValue() {
+        return constantValue;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttDeprecated.java b/dx/src/com/android/dx/cf/attrib/AttDeprecated.java
new file mode 100644
index 0000000..ec65d35
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttDeprecated.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+/**
+ * Attribute class for standard {@code Deprecated} attributes.
+ */
+public final class AttDeprecated extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "Deprecated";
+
+    /**
+     * Constructs an instance.
+     */
+    public AttDeprecated() {
+        super(ATTRIBUTE_NAME);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 6;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttEnclosingMethod.java b/dx/src/com/android/dx/cf/attrib/AttEnclosingMethod.java
new file mode 100644
index 0000000..a413ca2
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttEnclosingMethod.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstType;
+
+/**
+ * Attribute class for standards-track {@code EnclosingMethod}
+ * attributes.
+ */
+public final class AttEnclosingMethod extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "EnclosingMethod";
+
+    /** {@code non-null;} the innermost enclosing class */
+    private final CstType type;
+
+    /** {@code null-ok;} the name-and-type of the innermost enclosing method, if any */
+    private final CstNat method;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param type {@code non-null;} the innermost enclosing class
+     * @param method {@code null-ok;} the name-and-type of the innermost enclosing
+     * method, if any
+     */
+    public AttEnclosingMethod(CstType type, CstNat method) {
+        super(ATTRIBUTE_NAME);
+
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        this.type = type;
+        this.method = method;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 10;
+    }
+
+    /**
+     * Gets the innermost enclosing class.
+     *
+     * @return {@code non-null;} the innermost enclosing class
+     */
+    public CstType getEnclosingClass() {
+        return type;
+    }
+
+    /**
+     * Gets the name-and-type of the innermost enclosing method, if
+     * any.
+     *
+     * @return {@code null-ok;} the name-and-type of the innermost enclosing
+     * method, if any
+     */
+    public CstNat getMethod() {
+        return method;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttExceptions.java b/dx/src/com/android/dx/cf/attrib/AttExceptions.java
new file mode 100644
index 0000000..0a15f09
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttExceptions.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.MutabilityException;
+
+/**
+ * Attribute class for standard {@code Exceptions} attributes.
+ */
+public final class AttExceptions extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "Exceptions";
+
+    /** {@code non-null;} list of exception classes */
+    private final TypeList exceptions;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param exceptions {@code non-null;} list of classes, presumed but not
+     * verified to be subclasses of {@code Throwable}
+     */
+    public AttExceptions(TypeList exceptions) {
+        super(ATTRIBUTE_NAME);
+
+        try {
+            if (exceptions.isMutable()) {
+                throw new MutabilityException("exceptions.isMutable()");
+            }
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("exceptions == null");
+        }
+
+        this.exceptions = exceptions;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 8 + exceptions.size() * 2;
+    }
+
+    /**
+     * Gets the list of classes associated with this instance. In
+     * general, these classes are not pre-verified to be subclasses of
+     * {@code Throwable}.
+     *
+     * @return {@code non-null;} the list of classes
+     */
+    public TypeList getExceptions() {
+        return exceptions;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttInnerClasses.java b/dx/src/com/android/dx/cf/attrib/AttInnerClasses.java
new file mode 100644
index 0000000..5dc3607
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttInnerClasses.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.util.MutabilityException;
+
+/**
+ * Attribute class for standard {@code InnerClasses} attributes.
+ */
+public final class AttInnerClasses extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "InnerClasses";
+
+    /** {@code non-null;} list of inner class entries */
+    private final InnerClassList innerClasses;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param innerClasses {@code non-null;} list of inner class entries
+     */
+    public AttInnerClasses(InnerClassList innerClasses) {
+        super(ATTRIBUTE_NAME);
+
+        try {
+            if (innerClasses.isMutable()) {
+                throw new MutabilityException("innerClasses.isMutable()");
+            }
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("innerClasses == null");
+        }
+
+        this.innerClasses = innerClasses;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 8 + innerClasses.size() * 8;
+    }
+
+    /**
+     * Gets the list of "inner class" entries associated with this instance.
+     *
+     * @return {@code non-null;} the list
+     */
+    public InnerClassList getInnerClasses() {
+        return innerClasses;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttLineNumberTable.java b/dx/src/com/android/dx/cf/attrib/AttLineNumberTable.java
new file mode 100644
index 0000000..1887984
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttLineNumberTable.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.cf.code.LineNumberList;
+import com.android.dx.util.MutabilityException;
+
+/**
+ * Attribute class for standard {@code LineNumberTable} attributes.
+ */
+public final class AttLineNumberTable extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "LineNumberTable";
+
+    /** {@code non-null;} list of line number entries */
+    private final LineNumberList lineNumbers;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param lineNumbers {@code non-null;} list of line number entries
+     */
+    public AttLineNumberTable(LineNumberList lineNumbers) {
+        super(ATTRIBUTE_NAME);
+
+        try {
+            if (lineNumbers.isMutable()) {
+                throw new MutabilityException("lineNumbers.isMutable()");
+            }
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("lineNumbers == null");
+        }
+
+        this.lineNumbers = lineNumbers;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 8 + 4 * lineNumbers.size();
+    }
+
+    /**
+     * Gets the list of "line number" entries associated with this instance.
+     *
+     * @return {@code non-null;} the list
+     */
+    public LineNumberList getLineNumbers() {
+        return lineNumbers;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttLocalVariableTable.java b/dx/src/com/android/dx/cf/attrib/AttLocalVariableTable.java
new file mode 100644
index 0000000..1d2b4aa
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttLocalVariableTable.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.cf.code.LocalVariableList;
+
+/**
+ * Attribute class for standard {@code LocalVariableTable} attributes.
+ */
+public final class AttLocalVariableTable extends BaseLocalVariables {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "LocalVariableTable";
+
+    /**
+     * Constructs an instance.
+     *
+     * @param localVariables {@code non-null;} list of local variable entries
+     */
+    public AttLocalVariableTable(LocalVariableList localVariables) {
+        super(ATTRIBUTE_NAME, localVariables);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttLocalVariableTypeTable.java b/dx/src/com/android/dx/cf/attrib/AttLocalVariableTypeTable.java
new file mode 100644
index 0000000..2520bf6
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttLocalVariableTypeTable.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.cf.code.LocalVariableList;
+
+/**
+ * Attribute class for standard {@code LocalVariableTypeTable} attributes.
+ */
+public final class AttLocalVariableTypeTable extends BaseLocalVariables {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "LocalVariableTypeTable";
+
+    /**
+     * Constructs an instance.
+     *
+     * @param localVariables {@code non-null;} list of local variable entries
+     */
+    public AttLocalVariableTypeTable(LocalVariableList localVariables) {
+        super(ATTRIBUTE_NAME, localVariables);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttRuntimeInvisibleAnnotations.java b/dx/src/com/android/dx/cf/attrib/AttRuntimeInvisibleAnnotations.java
new file mode 100644
index 0000000..d3afe27
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttRuntimeInvisibleAnnotations.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.annotation.Annotations;
+
+/**
+ * Attribute class for standard {@code RuntimeInvisibleAnnotations}
+ * attributes.
+ */
+public final class AttRuntimeInvisibleAnnotations extends BaseAnnotations {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "RuntimeInvisibleAnnotations";
+
+    /**
+     * Constructs an instance.
+     *
+     * @param annotations {@code non-null;} the list of annotations
+     * @param byteLength {@code >= 0;} attribute data length in the original
+     * classfile (not including the attribute header)
+     */
+    public AttRuntimeInvisibleAnnotations(Annotations annotations,
+            int byteLength) {
+        super(ATTRIBUTE_NAME, annotations, byteLength);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttRuntimeInvisibleParameterAnnotations.java b/dx/src/com/android/dx/cf/attrib/AttRuntimeInvisibleParameterAnnotations.java
new file mode 100644
index 0000000..c9c5136
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttRuntimeInvisibleParameterAnnotations.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.annotation.AnnotationsList;
+
+/**
+ * Attribute class for standard
+ * {@code RuntimeInvisibleParameterAnnotations} attributes.
+ */
+public final class AttRuntimeInvisibleParameterAnnotations
+        extends BaseParameterAnnotations {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME =
+        "RuntimeInvisibleParameterAnnotations";
+
+    /**
+     * Constructs an instance.
+     *
+     * @param parameterAnnotations {@code non-null;} the parameter annotations
+     * @param byteLength {@code >= 0;} attribute data length in the original
+     * classfile (not including the attribute header)
+     */
+    public AttRuntimeInvisibleParameterAnnotations(
+            AnnotationsList parameterAnnotations, int byteLength) {
+        super(ATTRIBUTE_NAME, parameterAnnotations, byteLength);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttRuntimeVisibleAnnotations.java b/dx/src/com/android/dx/cf/attrib/AttRuntimeVisibleAnnotations.java
new file mode 100644
index 0000000..a6a640d
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttRuntimeVisibleAnnotations.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.annotation.Annotations;
+
+/**
+ * Attribute class for standard {@code RuntimeVisibleAnnotations}
+ * attributes.
+ */
+public final class AttRuntimeVisibleAnnotations extends BaseAnnotations {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "RuntimeVisibleAnnotations";
+
+    /**
+     * Constructs an instance.
+     *
+     * @param annotations {@code non-null;} the list of annotations
+     * @param byteLength {@code >= 0;} attribute data length in the original
+     * classfile (not including the attribute header)
+     */
+    public AttRuntimeVisibleAnnotations(Annotations annotations,
+            int byteLength) {
+        super(ATTRIBUTE_NAME, annotations, byteLength);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttRuntimeVisibleParameterAnnotations.java b/dx/src/com/android/dx/cf/attrib/AttRuntimeVisibleParameterAnnotations.java
new file mode 100644
index 0000000..177eb4c
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttRuntimeVisibleParameterAnnotations.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.annotation.AnnotationsList;
+
+/**
+ * Attribute class for standard {@code RuntimeVisibleParameterAnnotations}
+ * attributes.
+ */
+public final class AttRuntimeVisibleParameterAnnotations
+        extends BaseParameterAnnotations {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME =
+        "RuntimeVisibleParameterAnnotations";
+
+    /**
+     * Constructs an instance.
+     *
+     * @param annotations {@code non-null;} the parameter annotations
+     * @param byteLength {@code >= 0;} attribute data length in the original
+     * classfile (not including the attribute header)
+     */
+    public AttRuntimeVisibleParameterAnnotations(
+            AnnotationsList annotations, int byteLength) {
+        super(ATTRIBUTE_NAME, annotations, byteLength);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttSignature.java b/dx/src/com/android/dx/cf/attrib/AttSignature.java
new file mode 100644
index 0000000..8709b48
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttSignature.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.cst.CstString;
+
+/**
+ * Attribute class for standards-track {@code Signature} attributes.
+ */
+public final class AttSignature extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "Signature";
+
+    /** {@code non-null;} the signature string */
+    private final CstString signature;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param signature {@code non-null;} the signature string
+     */
+    public AttSignature(CstString signature) {
+        super(ATTRIBUTE_NAME);
+
+        if (signature == null) {
+            throw new NullPointerException("signature == null");
+        }
+
+        this.signature = signature;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 8;
+    }
+
+    /**
+     * Gets the signature string.
+     *
+     * @return {@code non-null;} the signature string
+     */
+    public CstString getSignature() {
+        return signature;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttSourceDebugExtension.java b/dx/src/com/android/dx/cf/attrib/AttSourceDebugExtension.java
new file mode 100644
index 0000000..3dd4fec
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttSourceDebugExtension.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.cst.CstString;
+
+/**
+ * Attribute class for standard {@code SourceDebugExtension} attributes.
+ */
+public final class AttSourceDebugExtension extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "SourceDebugExtension";
+
+    /** {@code non-null;} Contents of SMAP */
+    private final CstString smapString;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param smapString {@code non-null;} the SMAP data from the class file.
+     */
+    public AttSourceDebugExtension(CstString smapString) {
+        super(ATTRIBUTE_NAME);
+
+        if (smapString == null) {
+            throw new NullPointerException("smapString == null");
+        }
+
+        this.smapString = smapString;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        // Add 6 for the standard attribute header: the attribute name
+        // index (2 bytes) and the attribute length (4 bytes).
+        return 6 + smapString.getUtf8Size();
+    }
+
+    /**
+     * Gets the SMAP data of this instance.
+     *
+     * @return {@code non-null;} the SMAP data.
+     */
+    public CstString getSmapString() {
+        return smapString;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttSourceFile.java b/dx/src/com/android/dx/cf/attrib/AttSourceFile.java
new file mode 100644
index 0000000..20ab70d
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttSourceFile.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.cst.CstString;
+
+/**
+ * Attribute class for standard {@code SourceFile} attributes.
+ */
+public final class AttSourceFile extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "SourceFile";
+
+    /** {@code non-null;} name of the source file */
+    private final CstString sourceFile;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param sourceFile {@code non-null;} the name of the source file
+     */
+    public AttSourceFile(CstString sourceFile) {
+        super(ATTRIBUTE_NAME);
+
+        if (sourceFile == null) {
+            throw new NullPointerException("sourceFile == null");
+        }
+
+        this.sourceFile = sourceFile;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 8;
+    }
+
+    /**
+     * Gets the source file name of this instance.
+     *
+     * @return {@code non-null;} the source file
+     */
+    public CstString getSourceFile() {
+        return sourceFile;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/AttSynthetic.java b/dx/src/com/android/dx/cf/attrib/AttSynthetic.java
new file mode 100644
index 0000000..1b2b405
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/AttSynthetic.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+/**
+ * Attribute class for standard {@code Synthetic} attributes.
+ */
+public final class AttSynthetic extends BaseAttribute {
+    /** {@code non-null;} attribute name for attributes of this type */
+    public static final String ATTRIBUTE_NAME = "Synthetic";
+
+    /**
+     * Constructs an instance.
+     */
+    public AttSynthetic() {
+        super(ATTRIBUTE_NAME);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return 6;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/BaseAnnotations.java b/dx/src/com/android/dx/cf/attrib/BaseAnnotations.java
new file mode 100644
index 0000000..ce84487
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/BaseAnnotations.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.util.MutabilityException;
+
+/**
+ * Base class for annotations attributes.
+ */
+public abstract class BaseAnnotations extends BaseAttribute {
+    /** {@code non-null;} list of annotations */
+    private final Annotations annotations;
+
+    /** {@code >= 0;} attribute data length in the original classfile (not
+     * including the attribute header) */
+    private final int byteLength;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param attributeName {@code non-null;} the name of the attribute
+     * @param annotations {@code non-null;} the list of annotations
+     * @param byteLength {@code >= 0;} attribute data length in the original
+     * classfile (not including the attribute header)
+     */
+    public BaseAnnotations(String attributeName, Annotations annotations,
+            int byteLength) {
+        super(attributeName);
+
+        try {
+            if (annotations.isMutable()) {
+                throw new MutabilityException("annotations.isMutable()");
+            }
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("annotations == null");
+        }
+
+        this.annotations = annotations;
+        this.byteLength = byteLength;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int byteLength() {
+        // Add six for the standard attribute header.
+        return byteLength + 6;
+    }
+
+    /**
+     * Gets the list of annotations associated with this instance.
+     *
+     * @return {@code non-null;} the list
+     */
+    public final Annotations getAnnotations() {
+        return annotations;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/BaseAttribute.java b/dx/src/com/android/dx/cf/attrib/BaseAttribute.java
new file mode 100644
index 0000000..1e5035c
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/BaseAttribute.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.cf.iface.Attribute;
+
+/**
+ * Base implementation of {@link Attribute}, which directly stores
+ * the attribute name but leaves the rest up to subclasses.
+ */
+public abstract class BaseAttribute implements Attribute {
+    /** {@code non-null;} attribute name */
+    private final String name;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param name {@code non-null;} attribute name
+     */
+    public BaseAttribute(String name) {
+        if (name == null) {
+            throw new NullPointerException("name == null");
+        }
+
+        this.name = name;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String getName() {
+        return name;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/BaseLocalVariables.java b/dx/src/com/android/dx/cf/attrib/BaseLocalVariables.java
new file mode 100644
index 0000000..f8909db
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/BaseLocalVariables.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.cf.code.LocalVariableList;
+import com.android.dx.util.MutabilityException;
+
+/**
+ * Base attribute class for standard {@code LocalVariableTable}
+ * and {@code LocalVariableTypeTable} attributes.
+ */
+public abstract class BaseLocalVariables extends BaseAttribute {
+    /** {@code non-null;} list of local variable entries */
+    private final LocalVariableList localVariables;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param name {@code non-null;} attribute name
+     * @param localVariables {@code non-null;} list of local variable entries
+     */
+    public BaseLocalVariables(String name,
+            LocalVariableList localVariables) {
+        super(name);
+
+        try {
+            if (localVariables.isMutable()) {
+                throw new MutabilityException("localVariables.isMutable()");
+            }
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("localVariables == null");
+        }
+
+        this.localVariables = localVariables;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int byteLength() {
+        return 8 + localVariables.size() * 10;
+    }
+
+    /**
+     * Gets the list of "local variable" entries associated with this instance.
+     *
+     * @return {@code non-null;} the list
+     */
+    public final LocalVariableList getLocalVariables() {
+        return localVariables;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/BaseParameterAnnotations.java b/dx/src/com/android/dx/cf/attrib/BaseParameterAnnotations.java
new file mode 100644
index 0000000..45bc9c0
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/BaseParameterAnnotations.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.util.MutabilityException;
+
+/**
+ * Base class for parameter annotation list attributes.
+ */
+public abstract class BaseParameterAnnotations extends BaseAttribute {
+    /** {@code non-null;} list of annotations */
+    private final AnnotationsList parameterAnnotations;
+
+    /** {@code >= 0;} attribute data length in the original classfile (not
+     * including the attribute header) */
+    private final int byteLength;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param attributeName {@code non-null;} the name of the attribute
+     * @param parameterAnnotations {@code non-null;} the annotations
+     * @param byteLength {@code >= 0;} attribute data length in the original
+     * classfile (not including the attribute header)
+     */
+    public BaseParameterAnnotations(String attributeName,
+            AnnotationsList parameterAnnotations, int byteLength) {
+        super(attributeName);
+
+        try {
+            if (parameterAnnotations.isMutable()) {
+                throw new MutabilityException(
+                        "parameterAnnotations.isMutable()");
+            }
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("parameterAnnotations == null");
+        }
+
+        this.parameterAnnotations = parameterAnnotations;
+        this.byteLength = byteLength;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int byteLength() {
+        // Add six for the standard attribute header.
+        return byteLength + 6;
+    }
+
+    /**
+     * Gets the list of annotation lists associated with this instance.
+     *
+     * @return {@code non-null;} the list
+     */
+    public final AnnotationsList getParameterAnnotations() {
+        return parameterAnnotations;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/InnerClassList.java b/dx/src/com/android/dx/cf/attrib/InnerClassList.java
new file mode 100644
index 0000000..830118c
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/InnerClassList.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * List of "inner class" entries, which are the contents of
+ * {@code InnerClasses} attributes.
+ */
+public final class InnerClassList extends FixedSizeList {
+    /**
+     * Constructs an instance.
+     *
+     * @param count the number of elements to be in the list of inner classes
+     */
+    public InnerClassList(int count) {
+        super(count);
+    }
+
+    /**
+     * Gets the indicated item.
+     *
+     * @param n {@code >= 0;} which item
+     * @return {@code null-ok;} the indicated item
+     */
+    public Item get(int n) {
+        return (Item) get0(n);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * @param n {@code >= 0, < size();} which class
+     * @param innerClass {@code non-null;} class this item refers to
+     * @param outerClass {@code null-ok;} outer class that this class is a
+     * member of, if any
+     * @param innerName {@code null-ok;} original simple name of this class,
+     * if not anonymous
+     * @param accessFlags original declared access flags
+     */
+    public void set(int n, CstType innerClass, CstType outerClass,
+                    CstString innerName, int accessFlags) {
+        set0(n, new Item(innerClass, outerClass, innerName, accessFlags));
+    }
+
+    /**
+     * Item in an inner classes list.
+     */
+    public static class Item {
+        /** {@code non-null;} class this item refers to */
+        private final CstType innerClass;
+
+        /** {@code null-ok;} outer class that this class is a member of, if any */
+        private final CstType outerClass;
+
+        /** {@code null-ok;} original simple name of this class, if not anonymous */
+        private final CstString innerName;
+
+        /** original declared access flags */
+        private final int accessFlags;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param innerClass {@code non-null;} class this item refers to
+         * @param outerClass {@code null-ok;} outer class that this class is a
+         * member of, if any
+         * @param innerName {@code null-ok;} original simple name of this
+         * class, if not anonymous
+         * @param accessFlags original declared access flags
+         */
+        public Item(CstType innerClass, CstType outerClass,
+                    CstString innerName, int accessFlags) {
+            if (innerClass == null) {
+                throw new NullPointerException("innerClass == null");
+            }
+
+            this.innerClass = innerClass;
+            this.outerClass = outerClass;
+            this.innerName = innerName;
+            this.accessFlags = accessFlags;
+        }
+
+        /**
+         * Gets the class this item refers to.
+         *
+         * @return {@code non-null;} the class
+         */
+        public CstType getInnerClass() {
+            return innerClass;
+        }
+
+        /**
+         * Gets the outer class that this item's class is a member of, if any.
+         *
+         * @return {@code null-ok;} the class
+         */
+        public CstType getOuterClass() {
+            return outerClass;
+        }
+
+        /**
+         * Gets the original name of this item's class, if not anonymous.
+         *
+         * @return {@code null-ok;} the name
+         */
+        public CstString getInnerName() {
+            return innerName;
+        }
+
+        /**
+         * Gets the original declared access flags.
+         *
+         * @return the access flags
+         */
+        public int getAccessFlags() {
+            return accessFlags;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/RawAttribute.java b/dx/src/com/android/dx/cf/attrib/RawAttribute.java
new file mode 100644
index 0000000..2ac08d4
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/RawAttribute.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.attrib;
+
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.util.ByteArray;
+
+/**
+ * Raw attribute, for holding onto attributes that are unrecognized.
+ */
+public final class RawAttribute extends BaseAttribute {
+    /** {@code non-null;} attribute data */
+    private final ByteArray data;
+
+    /**
+     * {@code null-ok;} constant pool to use for resolution of cpis in {@link
+     * #data}
+     */
+    private final ConstantPool pool;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param name {@code non-null;} attribute name
+     * @param data {@code non-null;} attribute data
+     * @param pool {@code null-ok;} constant pool to use for cpi resolution
+     */
+    public RawAttribute(String name, ByteArray data, ConstantPool pool) {
+        super(name);
+
+        if (data == null) {
+            throw new NullPointerException("data == null");
+        }
+
+        this.data = data;
+        this.pool = pool;
+    }
+
+    /**
+     * Constructs an instance from a sub-array of a {@link ByteArray}.
+     *
+     * @param name {@code non-null;} attribute name
+     * @param data {@code non-null;} array containing the attribute data
+     * @param offset offset in {@code data} to the attribute data
+     * @param length length of the attribute data, in bytes
+     * @param pool {@code null-ok;} constant pool to use for cpi resolution
+     */
+    public RawAttribute(String name, ByteArray data, int offset,
+                        int length, ConstantPool pool) {
+        this(name, data.slice(offset, offset + length), pool);
+    }
+
+    /**
+     * Get the raw data of the attribute.
+     *
+     * @return {@code non-null;} the data
+     */
+    public ByteArray getData() {
+        return data;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        return data.size() + 6;
+    }
+
+    /**
+     * Gets the constant pool to use for cpi resolution, if any. It
+     * presumably came from the class file that this attribute came
+     * from.
+     *
+     * @return {@code null-ok;} the constant pool
+     */
+    public ConstantPool getPool() {
+        return pool;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/attrib/package.html b/dx/src/com/android/dx/cf/attrib/package.html
new file mode 100644
index 0000000..8125079
--- /dev/null
+++ b/dx/src/com/android/dx/cf/attrib/package.html
@@ -0,0 +1,11 @@
+<body>
+<p>Implementation of containers and utilities for all the standard Java
+attribute types.</p>
+
+<p><b>PACKAGES USED:</b>
+<ul>
+<li><code>com.android.dx.cf.iface</code></li>
+<li><code>com.android.dx.rop.pool</code></li>
+<li><code>com.android.dx.util</code></li>
+</ul>
+</body>
diff --git a/dx/src/com/android/dx/cf/code/BaseMachine.java b/dx/src/com/android/dx/cf/code/BaseMachine.java
new file mode 100644
index 0000000..7f31f64
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/BaseMachine.java
@@ -0,0 +1,595 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import java.util.ArrayList;
+
+/**
+ * Base implementation of {@link Machine}.
+ *
+ * <p><b>Note:</b> For the most part, the documentation for this class
+ * ignores the distinction between {@link Type} and {@link
+ * TypeBearer}.</p>
+ */
+public abstract class BaseMachine implements Machine {
+    /* {@code non-null;} the prototype for the associated method */
+    private final Prototype prototype;
+
+    /** {@code non-null;} primary arguments */
+    private TypeBearer[] args;
+
+    /** {@code >= 0;} number of primary arguments */
+    private int argCount;
+
+    /** {@code null-ok;} type of the operation, if salient */
+    private Type auxType;
+
+    /** auxiliary {@code int} argument */
+    private int auxInt;
+
+    /** {@code null-ok;} auxiliary constant argument */
+    private Constant auxCst;
+
+    /** auxiliary branch target argument */
+    private int auxTarget;
+
+    /** {@code null-ok;} auxiliary switch cases argument */
+    private SwitchList auxCases;
+
+    /** {@code null-ok;} auxiliary initial value list for newarray */
+    private ArrayList<Constant> auxInitValues;
+
+    /** {@code >= -1;} last local accessed */
+    private int localIndex;
+
+    /** specifies if local has info in the local variable table */
+    private boolean localInfo;
+
+    /** {@code null-ok;} local target spec, if salient and calculated */
+    private RegisterSpec localTarget;
+
+    /** {@code non-null;} results */
+    private TypeBearer[] results;
+
+    /**
+     * {@code >= -1;} count of the results, or {@code -1} if no results
+     * have been set
+     */
+    private int resultCount;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param prototype {@code non-null;} the prototype for the
+     * associated method
+     */
+    public BaseMachine(Prototype prototype) {
+        if (prototype == null) {
+            throw new NullPointerException("prototype == null");
+        }
+
+        this.prototype = prototype;
+        args = new TypeBearer[10];
+        results = new TypeBearer[6];
+        clearArgs();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Prototype getPrototype() {
+        return prototype;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void clearArgs() {
+        argCount = 0;
+        auxType = null;
+        auxInt = 0;
+        auxCst = null;
+        auxTarget = 0;
+        auxCases = null;
+        auxInitValues = null;
+        localIndex = -1;
+        localInfo = false;
+        localTarget = null;
+        resultCount = -1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void popArgs(Frame frame, int count) {
+        ExecutionStack stack = frame.getStack();
+
+        clearArgs();
+
+        if (count > args.length) {
+            // Grow args, and add a little extra room to grow even more.
+            args = new TypeBearer[count + 10];
+        }
+
+        for (int i = count - 1; i >= 0; i--) {
+            args[i] = stack.pop();
+        }
+
+        argCount = count;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void popArgs(Frame frame, Prototype prototype) {
+        StdTypeList types = prototype.getParameterTypes();
+        int size = types.size();
+
+        // Use the above method to do the actual popping...
+        popArgs(frame, size);
+
+        // ...and then verify the popped types.
+
+        for (int i = 0; i < size; i++) {
+            if (! Merger.isPossiblyAssignableFrom(types.getType(i), args[i])) {
+                throw new SimException("at stack depth " + (size - 1 - i) +
+                        ", expected type " + types.getType(i).toHuman() +
+                        " but found " + args[i].getType().toHuman());
+            }
+        }
+    }
+
+    @Override
+    public final void popArgs(Frame frame, Type type) {
+        // Use the above method to do the actual popping...
+        popArgs(frame, 1);
+
+        // ...and then verify the popped type.
+        if (! Merger.isPossiblyAssignableFrom(type, args[0])) {
+            throw new SimException("expected type " + type.toHuman() +
+                    " but found " + args[0].getType().toHuman());
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void popArgs(Frame frame, Type type1, Type type2) {
+        // Use the above method to do the actual popping...
+        popArgs(frame, 2);
+
+        // ...and then verify the popped types.
+
+        if (! Merger.isPossiblyAssignableFrom(type1, args[0])) {
+            throw new SimException("expected type " + type1.toHuman() +
+                    " but found " + args[0].getType().toHuman());
+        }
+
+        if (! Merger.isPossiblyAssignableFrom(type2, args[1])) {
+            throw new SimException("expected type " + type2.toHuman() +
+                    " but found " + args[1].getType().toHuman());
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void popArgs(Frame frame, Type type1, Type type2,
+            Type type3) {
+        // Use the above method to do the actual popping...
+        popArgs(frame, 3);
+
+        // ...and then verify the popped types.
+
+        if (! Merger.isPossiblyAssignableFrom(type1, args[0])) {
+            throw new SimException("expected type " + type1.toHuman() +
+                    " but found " + args[0].getType().toHuman());
+        }
+
+        if (! Merger.isPossiblyAssignableFrom(type2, args[1])) {
+            throw new SimException("expected type " + type2.toHuman() +
+                    " but found " + args[1].getType().toHuman());
+        }
+
+        if (! Merger.isPossiblyAssignableFrom(type3, args[2])) {
+            throw new SimException("expected type " + type3.toHuman() +
+                    " but found " + args[2].getType().toHuman());
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void localArg(Frame frame, int idx) {
+        clearArgs();
+        args[0] = frame.getLocals().get(idx);
+        argCount = 1;
+        localIndex = idx;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void localInfo(boolean local) {
+        localInfo = local;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void auxType(Type type) {
+        auxType = type;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void auxIntArg(int value) {
+        auxInt = value;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void auxCstArg(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        auxCst = cst;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void auxTargetArg(int target) {
+        auxTarget = target;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void auxSwitchArg(SwitchList cases) {
+        if (cases == null) {
+            throw new NullPointerException("cases == null");
+        }
+
+        auxCases = cases;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void auxInitValues(ArrayList<Constant> initValues) {
+        auxInitValues = initValues;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void localTarget(int idx, Type type, LocalItem local) {
+        localTarget = RegisterSpec.makeLocalOptional(idx, type, local);
+    }
+
+    /**
+     * Gets the number of primary arguments.
+     *
+     * @return {@code >= 0;} the number of primary arguments
+     */
+    protected final int argCount() {
+        return argCount;
+    }
+
+    /**
+     * Gets the width of the arguments (where a category-2 value counts as
+     * two).
+     *
+     * @return {@code >= 0;} the argument width
+     */
+    protected final int argWidth() {
+        int result = 0;
+
+        for (int i = 0; i < argCount; i++) {
+            result += args[i].getType().getCategory();
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the {@code n}th primary argument.
+     *
+     * @param n {@code >= 0, < argCount();} which argument
+     * @return {@code non-null;} the indicated argument
+     */
+    protected final TypeBearer arg(int n) {
+        if (n >= argCount) {
+            throw new IllegalArgumentException("n >= argCount");
+        }
+
+        try {
+            return args[n];
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("n < 0");
+        }
+    }
+
+    /**
+     * Gets the type auxiliary argument.
+     *
+     * @return {@code null-ok;} the salient type
+     */
+    protected final Type getAuxType() {
+        return auxType;
+    }
+
+    /**
+     * Gets the {@code int} auxiliary argument.
+     *
+     * @return the argument value
+     */
+    protected final int getAuxInt() {
+        return auxInt;
+    }
+
+    /**
+     * Gets the constant auxiliary argument.
+     *
+     * @return {@code null-ok;} the argument value
+     */
+    protected final Constant getAuxCst() {
+        return auxCst;
+    }
+
+    /**
+     * Gets the branch target auxiliary argument.
+     *
+     * @return the argument value
+     */
+    protected final int getAuxTarget() {
+        return auxTarget;
+    }
+
+    /**
+     * Gets the switch cases auxiliary argument.
+     *
+     * @return {@code null-ok;} the argument value
+     */
+    protected final SwitchList getAuxCases() {
+        return auxCases;
+    }
+
+    /**
+     * Gets the init values auxiliary argument.
+     *
+     * @return {@code null-ok;} the argument value
+     */
+    protected final ArrayList<Constant> getInitValues() {
+        return auxInitValues;
+    }
+    /**
+     * Gets the last local index accessed.
+     *
+     * @return {@code >= -1;} the salient local index or {@code -1} if none
+     * was set since the last time {@link #clearArgs} was called
+     */
+    protected final int getLocalIndex() {
+        return localIndex;
+    }
+
+    /**
+     * Gets whether the loaded local has info in the local variable table.
+     *
+     * @return {@code true} if local arg has info in the local variable table
+     */
+    protected final boolean getLocalInfo() {
+        return localInfo;
+    }
+
+    /**
+     * Gets the target local register spec of the current operation, if any.
+     * The local target spec is the combination of the values indicated
+     * by a previous call to {@link #localTarget} with the type of what
+     * should be the sole result set by a call to {@link #setResult} (or
+     * the combination {@link #clearResult} then {@link #addResult}.
+     *
+     * @param isMove {@code true} if the operation being performed on the
+     * local is a move. This will cause constant values to be propagated
+     * to the returned local
+     * @return {@code null-ok;} the salient register spec or {@code null} if no
+     * local target was set since the last time {@link #clearArgs} was
+     * called
+     */
+    protected final RegisterSpec getLocalTarget(boolean isMove) {
+        if (localTarget == null) {
+            return null;
+        }
+
+        if (resultCount != 1) {
+            throw new SimException("local target with " +
+                    ((resultCount == 0) ? "no" : "multiple") + " results");
+        }
+
+        TypeBearer result = results[0];
+        Type resultType = result.getType();
+        Type localType = localTarget.getType();
+
+        if (resultType == localType) {
+            /*
+             * If this is to be a move operation and the result is a
+             * known value, make the returned localTarget embody that
+             * value.
+             */
+            if (isMove) {
+                return localTarget.withType(result);
+            } else {
+                return localTarget;
+            }
+        }
+
+        if (! Merger.isPossiblyAssignableFrom(localType, resultType)) {
+            // The result and local types are inconsistent. Complain!
+            throwLocalMismatch(resultType, localType);
+            return null;
+        }
+
+        if (localType == Type.OBJECT) {
+            /*
+             * The result type is more specific than the local type,
+             * so use that instead.
+             */
+            localTarget = localTarget.withType(result);
+        }
+
+        return localTarget;
+    }
+
+    /**
+     * Clears the results.
+     */
+    protected final void clearResult() {
+        resultCount = 0;
+    }
+
+    /**
+     * Sets the results list to be the given single value.
+     *
+     * <p><b>Note:</b> If there is more than one result value, the
+     * others may be added by using {@link #addResult}.</p>
+     *
+     * @param result {@code non-null;} result value
+     */
+    protected final void setResult(TypeBearer result) {
+        if (result == null) {
+            throw new NullPointerException("result == null");
+        }
+
+        results[0] = result;
+        resultCount = 1;
+    }
+
+    /**
+     * Adds an additional element to the list of results.
+     *
+     * @see #setResult
+     *
+     * @param result {@code non-null;} result value
+     */
+    protected final void addResult(TypeBearer result) {
+        if (result == null) {
+            throw new NullPointerException("result == null");
+        }
+
+        results[resultCount] = result;
+        resultCount++;
+    }
+
+    /**
+     * Gets the count of results. This throws an exception if results were
+     * never set. (Explicitly clearing the results counts as setting them.)
+     *
+     * @return {@code >= 0;} the count
+     */
+    protected final int resultCount() {
+        if (resultCount < 0) {
+            throw new SimException("results never set");
+        }
+
+        return resultCount;
+    }
+
+    /**
+     * Gets the width of the results (where a category-2 value counts as
+     * two).
+     *
+     * @return {@code >= 0;} the result width
+     */
+    protected final int resultWidth() {
+        int width = 0;
+
+        for (int i = 0; i < resultCount; i++) {
+            width += results[i].getType().getCategory();
+        }
+
+        return width;
+    }
+
+    /**
+     * Gets the {@code n}th result value.
+     *
+     * @param n {@code >= 0, < resultCount();} which result
+     * @return {@code non-null;} the indicated result value
+     */
+    protected final TypeBearer result(int n) {
+        if (n >= resultCount) {
+            throw new IllegalArgumentException("n >= resultCount");
+        }
+
+        try {
+            return results[n];
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("n < 0");
+        }
+    }
+
+    /**
+     * Stores the results of the latest operation into the given frame. If
+     * there is a local target (see {@link #localTarget}), then the sole
+     * result is stored to that target; otherwise any results are pushed
+     * onto the stack.
+     *
+     * @param frame {@code non-null;} frame to operate on
+     */
+    protected final void storeResults(Frame frame) {
+        if (resultCount < 0) {
+            throw new SimException("results never set");
+        }
+
+        if (resultCount == 0) {
+            // Nothing to do.
+            return;
+        }
+
+        if (localTarget != null) {
+            /*
+             * Note: getLocalTarget() doesn't necessarily return
+             * localTarget directly.
+             */
+            frame.getLocals().set(getLocalTarget(false));
+        } else {
+            ExecutionStack stack = frame.getStack();
+            for (int i = 0; i < resultCount; i++) {
+                if (localInfo) {
+                    stack.setLocal();
+                }
+                stack.push(results[i]);
+            }
+        }
+    }
+
+    /**
+     * Throws an exception that indicates a mismatch in local variable
+     * types.
+     *
+     * @param found {@code non-null;} the encountered type
+     * @param local {@code non-null;} the local variable's claimed type
+     */
+    public static void throwLocalMismatch(TypeBearer found,
+            TypeBearer local) {
+        throw new SimException("local variable type mismatch: " +
+                "attempt to set or access a value of type " +
+                found.toHuman() +
+                " using a local variable of type " +
+                local.toHuman() +
+                ". This is symptomatic of .class transformation tools " +
+                "that ignore local variable information.");
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/BasicBlocker.java b/dx/src/com/android/dx/cf/code/BasicBlocker.java
new file mode 100644
index 0000000..0c5d5a4
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/BasicBlocker.java
@@ -0,0 +1,465 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstInvokeDynamic;
+import com.android.dx.rop.cst.CstMemberRef;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Bits;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+
+/**
+ * Utility that identifies basic blocks in bytecode.
+ */
+public final class BasicBlocker implements BytecodeArray.Visitor {
+    /** {@code non-null;} method being converted */
+    private final ConcreteMethod method;
+
+    /**
+     * {@code non-null;} work set; bits indicate offsets in need of
+     * examination
+     */
+    private final int[] workSet;
+
+    /**
+     * {@code non-null;} live set; bits indicate potentially-live
+     * opcodes; contrawise, a bit that isn't on is either in the
+     * middle of an instruction or is a definitely-dead opcode
+     */
+    private final int[] liveSet;
+
+    /**
+     * {@code non-null;} block start set; bits indicate the starts of
+     * basic blocks, including the opcodes that start blocks of
+     * definitely-dead code
+     */
+    private final int[] blockSet;
+
+    /**
+     * {@code non-null, sparse;} for each instruction offset to a branch of
+     * some sort, the list of targets for that instruction
+     */
+    private final IntList[] targetLists;
+
+    /**
+     * {@code non-null, sparse;} for each instruction offset to a throwing
+     * instruction, the list of exception handlers for that instruction
+     */
+    private final ByteCatchList[] catchLists;
+
+    /** offset of the previously parsed bytecode */
+    private int previousOffset;
+
+    /**
+     * Identifies and enumerates the basic blocks in the given method,
+     * returning a list of them. The returned list notably omits any
+     * definitely-dead code that is identified in the process.
+     *
+     * @param method {@code non-null;} method to convert
+     * @return {@code non-null;} list of basic blocks
+     */
+    public static ByteBlockList identifyBlocks(ConcreteMethod method) {
+        BasicBlocker bb = new BasicBlocker(method);
+
+        bb.doit();
+        return bb.getBlockList();
+    }
+
+    /**
+     * Constructs an instance. This class is not publicly instantiable; use
+     * {@link #identifyBlocks}.
+     *
+     * @param method {@code non-null;} method to convert
+     */
+    private BasicBlocker(ConcreteMethod method) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        this.method = method;
+
+        /*
+         * The "+1" below is so the idx-past-end is also valid,
+         * avoiding a special case, but without preventing
+         * flow-of-control falling past the end of the method from
+         * getting properly reported.
+         */
+        int sz = method.getCode().size() + 1;
+
+        workSet = Bits.makeBitSet(sz);
+        liveSet = Bits.makeBitSet(sz);
+        blockSet = Bits.makeBitSet(sz);
+        targetLists = new IntList[sz];
+        catchLists = new ByteCatchList[sz];
+        previousOffset = -1;
+    }
+
+    /*
+     * Note: These methods are defined implementation of the interface
+     * BytecodeArray.Visitor; since the class isn't publicly
+     * instantiable, no external code ever gets a chance to actually
+     * call these methods.
+     */
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitInvalid(int opcode, int offset, int length) {
+        visitCommon(offset, length, true);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitNoArgs(int opcode, int offset, int length, Type type) {
+        switch (opcode) {
+            case ByteOps.IRETURN:
+            case ByteOps.RETURN: {
+                visitCommon(offset, length, false);
+                targetLists[offset] = IntList.EMPTY;
+                break;
+            }
+            case ByteOps.ATHROW: {
+                visitCommon(offset, length, false);
+                visitThrowing(offset, length, false);
+                break;
+            }
+            case ByteOps.IALOAD:
+            case ByteOps.LALOAD:
+            case ByteOps.FALOAD:
+            case ByteOps.DALOAD:
+            case ByteOps.AALOAD:
+            case ByteOps.BALOAD:
+            case ByteOps.CALOAD:
+            case ByteOps.SALOAD:
+            case ByteOps.IASTORE:
+            case ByteOps.LASTORE:
+            case ByteOps.FASTORE:
+            case ByteOps.DASTORE:
+            case ByteOps.AASTORE:
+            case ByteOps.BASTORE:
+            case ByteOps.CASTORE:
+            case ByteOps.SASTORE:
+            case ByteOps.ARRAYLENGTH:
+            case ByteOps.MONITORENTER:
+            case ByteOps.MONITOREXIT: {
+                /*
+                 * These instructions can all throw, so they have to end
+                 * the block they appear in (since throws are branches).
+                 */
+                visitCommon(offset, length, true);
+                visitThrowing(offset, length, true);
+                break;
+            }
+            case ByteOps.IDIV:
+            case ByteOps.IREM: {
+                /*
+                 * The int and long versions of division and remainder may
+                 * throw, but not the other types.
+                 */
+                visitCommon(offset, length, true);
+                if ((type == Type.INT) || (type == Type.LONG)) {
+                    visitThrowing(offset, length, true);
+                }
+                break;
+            }
+            default: {
+                visitCommon(offset, length, true);
+                break;
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitLocal(int opcode, int offset, int length,
+            int idx, Type type, int value) {
+        if (opcode == ByteOps.RET) {
+            visitCommon(offset, length, false);
+            targetLists[offset] = IntList.EMPTY;
+        } else {
+            visitCommon(offset, length, true);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitConstant(int opcode, int offset, int length,
+            Constant cst, int value) {
+        visitCommon(offset, length, true);
+
+        if (cst instanceof CstMemberRef || cst instanceof CstType ||
+            cst instanceof CstString || cst instanceof CstInvokeDynamic ||
+            cst instanceof CstMethodHandle || cst instanceof CstProtoRef) {
+            /*
+             * Instructions with these sorts of constants have the
+             * possibility of throwing, so this instruction needs to
+             * end its block (since it can throw, and possible-throws
+             * are branch points).
+             */
+            visitThrowing(offset, length, true);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitBranch(int opcode, int offset, int length,
+            int target) {
+        switch (opcode) {
+            case ByteOps.GOTO: {
+                visitCommon(offset, length, false);
+                targetLists[offset] = IntList.makeImmutable(target);
+                break;
+            }
+            case ByteOps.JSR: {
+                /*
+                 * Each jsr is quarantined into a separate block (containing
+                 * only the jsr instruction) but is otherwise treated
+                 * as a conditional branch. (That is to say, both its
+                 * target and next instruction begin new blocks.)
+                 */
+                addWorkIfNecessary(offset, true);
+                // Fall through to next case...
+            }
+            default: {
+                int next = offset + length;
+                visitCommon(offset, length, true);
+                addWorkIfNecessary(next, true);
+                targetLists[offset] = IntList.makeImmutable(next, target);
+                break;
+            }
+        }
+
+        addWorkIfNecessary(target, true);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitSwitch(int opcode, int offset, int length,
+            SwitchList cases, int padding) {
+        visitCommon(offset, length, false);
+        addWorkIfNecessary(cases.getDefaultTarget(), true);
+
+        int sz = cases.size();
+        for (int i = 0; i < sz; i++) {
+            addWorkIfNecessary(cases.getTarget(i), true);
+        }
+
+        targetLists[offset] = cases.getTargets();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitNewarray(int offset, int length, CstType type,
+            ArrayList<Constant> intVals) {
+        visitCommon(offset, length, true);
+        visitThrowing(offset, length, true);
+    }
+
+    /**
+     * Extracts the list of basic blocks from the bit sets.
+     *
+     * @return {@code non-null;} the list of basic blocks
+     */
+    private ByteBlockList getBlockList() {
+        BytecodeArray bytes = method.getCode();
+        ByteBlock[] bbs = new ByteBlock[bytes.size()];
+        int count = 0;
+
+        for (int at = 0, next; /*at*/; at = next) {
+            next = Bits.findFirst(blockSet, at + 1);
+            if (next < 0) {
+                break;
+            }
+
+            if (Bits.get(liveSet, at)) {
+                /*
+                 * Search backward for the branch or throwing
+                 * instruction at the end of this block, if any. If
+                 * there isn't any, then "next" is the sole target.
+                 */
+                IntList targets = null;
+                int targetsAt = -1;
+                ByteCatchList blockCatches;
+
+                for (int i = next - 1; i >= at; i--) {
+                    targets = targetLists[i];
+                    if (targets != null) {
+                        targetsAt = i;
+                        break;
+                    }
+                }
+
+                if (targets == null) {
+                    targets = IntList.makeImmutable(next);
+                    blockCatches = ByteCatchList.EMPTY;
+                } else {
+                    blockCatches = catchLists[targetsAt];
+                    if (blockCatches == null) {
+                        blockCatches = ByteCatchList.EMPTY;
+                    }
+                }
+
+                bbs[count] =
+                    new ByteBlock(at, at, next, targets, blockCatches);
+                count++;
+            }
+        }
+
+        ByteBlockList result = new ByteBlockList(count);
+        for (int i = 0; i < count; i++) {
+            result.set(i, bbs[i]);
+        }
+
+        return result;
+    }
+
+    /**
+     * Does basic block identification.
+     */
+    private void doit() {
+        BytecodeArray bytes = method.getCode();
+        ByteCatchList catches = method.getCatches();
+        int catchSz = catches.size();
+
+        /*
+         * Start by setting offset 0 as the start of a block and in need
+         * of work...
+         */
+        Bits.set(workSet, 0);
+        Bits.set(blockSet, 0);
+
+        /*
+         * And then process the work set, add new work based on
+         * exception ranges that are active, and iterate until there's
+         * nothing left to work on.
+         */
+        while (!Bits.isEmpty(workSet)) {
+            try {
+                bytes.processWorkSet(workSet, this);
+            } catch (IllegalArgumentException ex) {
+                // Translate the exception.
+                throw new SimException("flow of control falls off " +
+                                       "end of method",
+                                       ex);
+            }
+
+            for (int i = 0; i < catchSz; i++) {
+                ByteCatchList.Item item = catches.get(i);
+                int start = item.getStartPc();
+                int end = item.getEndPc();
+                if (Bits.anyInRange(liveSet, start, end)) {
+                    Bits.set(blockSet, start);
+                    Bits.set(blockSet, end);
+                    addWorkIfNecessary(item.getHandlerPc(), true);
+                }
+            }
+        }
+    }
+
+    /**
+     * Sets a bit in the work set, but only if the instruction in question
+     * isn't yet known to be possibly-live.
+     *
+     * @param offset offset to the instruction in question
+     * @param blockStart {@code true} iff this instruction starts a
+     * basic block
+     */
+    private void addWorkIfNecessary(int offset, boolean blockStart) {
+        if (!Bits.get(liveSet, offset)) {
+            Bits.set(workSet, offset);
+        }
+
+        if (blockStart) {
+            Bits.set(blockSet, offset);
+        }
+    }
+
+    /**
+     * Helper method used by all the visitor methods.
+     *
+     * @param offset offset to the instruction
+     * @param length length of the instruction, in bytes
+     * @param nextIsLive {@code true} iff the instruction after
+     * the indicated one is possibly-live (because this one isn't an
+     * unconditional branch, a return, or a switch)
+     */
+    private void visitCommon(int offset, int length, boolean nextIsLive) {
+        Bits.set(liveSet, offset);
+
+        if (nextIsLive) {
+            /*
+             * If the next instruction is flowed to by this one, just
+             * add it to the work set, and then a subsequent visit*()
+             * will deal with it as appropriate.
+             */
+            addWorkIfNecessary(offset + length, false);
+        } else {
+            /*
+             * If the next instruction isn't flowed to by this one,
+             * then mark it as a start of a block but *don't* add it
+             * to the work set, so that in the final phase we can know
+             * dead code blocks as those marked as blocks but not also marked
+             * live.
+             */
+            Bits.set(blockSet, offset + length);
+        }
+    }
+
+    /**
+     * Helper method used by all the visitor methods that deal with
+     * opcodes that possibly throw. This method should be called after calling
+     * {@link #visitCommon}.
+     *
+     * @param offset offset to the instruction
+     * @param length length of the instruction, in bytes
+     * @param nextIsLive {@code true} iff the instruction after
+     * the indicated one is possibly-live (because this one isn't an
+     * unconditional throw)
+     */
+    private void visitThrowing(int offset, int length, boolean nextIsLive) {
+        int next = offset + length;
+
+        if (nextIsLive) {
+            addWorkIfNecessary(next, true);
+        }
+
+        ByteCatchList catches = method.getCatches().listFor(offset);
+        catchLists[offset] = catches;
+        targetLists[offset] = catches.toTargetList(nextIsLive ? next : -1);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setPreviousOffset(int offset) {
+        previousOffset = offset;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public int getPreviousOffset() {
+        return previousOffset;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/BootstrapMethodArgumentsList.java b/dx/src/com/android/dx/cf/code/BootstrapMethodArgumentsList.java
new file mode 100644
index 0000000..7d5dea5
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/BootstrapMethodArgumentsList.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstDouble;
+import com.android.dx.rop.cst.CstFloat;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstLong;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * List of bootstrap method arguments, which are part of the contents of
+ * {@code BootstrapMethods} attributes.
+ */
+public class BootstrapMethodArgumentsList extends FixedSizeList {
+    /**
+     * Constructs an instance.
+     *
+     * @param count the number of elements to be in the list
+     */
+    public BootstrapMethodArgumentsList(int count) {
+        super(count);
+    }
+
+    /**
+     * Gets the bootstrap argument from the indicated position.
+     *
+     * @param n position of argument to get
+     * @return {@code Constant} instance
+     */
+    public Constant get(int n) {
+        return (Constant) get0(n);
+    }
+
+    /**
+     * Sets the bootstrap argument at the indicated position.
+     *
+     * @param n position of argument to set
+     * @param cst {@code Constant} instance
+     */
+    public void set(int n, Constant cst) {
+        // The set of permitted types is defined by the JVMS 8, section 4.7.23.
+        if (cst instanceof CstString ||
+            cst instanceof CstType ||
+            cst instanceof CstInteger ||
+            cst instanceof CstLong ||
+            cst instanceof CstFloat ||
+            cst instanceof CstDouble ||
+            cst instanceof CstMethodHandle ||
+            cst instanceof CstProtoRef) {
+            set0(n, cst);
+        } else {
+            Class<?> klass = cst.getClass();
+            throw new IllegalArgumentException("bad type for bootstrap argument: " + klass);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/BootstrapMethodsList.java b/dx/src/com/android/dx/cf/code/BootstrapMethodsList.java
new file mode 100644
index 0000000..c586949
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/BootstrapMethodsList.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * List of bootstrap method entries, which are the contents of
+ * {@code BootstrapMethods} attributes.
+ */
+public class BootstrapMethodsList extends FixedSizeList {
+    /** {@code non-null;} zero-size instance */
+    public static final BootstrapMethodsList EMPTY = new BootstrapMethodsList(0);
+
+    /**
+     * Constructs an instance.
+     *
+     * @param count the number of elements to be in the list
+     */
+    public BootstrapMethodsList(int count) {
+        super(count);
+    }
+
+    /**
+     * Gets the indicated item.
+     *
+     * @param n {@code >= 0;} which item
+     * @return {@code null-ok;} the indicated item
+     */
+    public Item get(int n) {
+        return (Item) get0(n);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param item {@code non-null;} the item
+     */
+    public void set(int n, Item item) {
+        if (item == null) {
+            throw new NullPointerException("item == null");
+        }
+
+        set0(n, item);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param declaringClass {@code non-null;} the class declaring bootstrap method.
+     * @param bootstrapMethodHandle {@code non-null;} the bootstrap method handle
+     * @param arguments {@code non-null;} the arguments of the bootstrap method
+     */
+    public void set(int n, CstType declaringClass, CstMethodHandle bootstrapMethodHandle,
+                    BootstrapMethodArgumentsList arguments) {
+        set(n, new Item(declaringClass, bootstrapMethodHandle, arguments));
+    }
+
+    /**
+     * Returns an instance which is the concatenation of the two given
+     * instances.
+     *
+     * @param list1 {@code non-null;} first instance
+     * @param list2 {@code non-null;} second instance
+     * @return {@code non-null;} combined instance
+     */
+    public static BootstrapMethodsList concat(BootstrapMethodsList list1,
+                                              BootstrapMethodsList list2) {
+        if (list1 == EMPTY) {
+            return list2;
+        } else if (list2 == EMPTY) {
+            return list1;
+        }
+
+        int sz1 = list1.size();
+        int sz2 = list2.size();
+        BootstrapMethodsList result = new BootstrapMethodsList(sz1 + sz2);
+
+        for (int i = 0; i < sz1; i++) {
+            result.set(i, list1.get(i));
+        }
+
+        for (int i = 0; i < sz2; i++) {
+            result.set(sz1 + i, list2.get(i));
+        }
+
+        return result;
+    }
+
+    public static class Item {
+        private final BootstrapMethodArgumentsList bootstrapMethodArgumentsList;
+        private final CstMethodHandle bootstrapMethodHandle;
+        private final CstType declaringClass;
+
+        public Item(CstType declaringClass, CstMethodHandle bootstrapMethodHandle,
+                    BootstrapMethodArgumentsList bootstrapMethodArguments) {
+            if (declaringClass == null) {
+                throw new NullPointerException("declaringClass == null");
+            }
+            if (bootstrapMethodHandle == null) {
+                throw new NullPointerException("bootstrapMethodHandle == null");
+            }
+            if (bootstrapMethodArguments == null) {
+                throw new NullPointerException("bootstrapMethodArguments == null");
+            }
+            this.bootstrapMethodHandle = bootstrapMethodHandle;
+            this.bootstrapMethodArgumentsList = bootstrapMethodArguments;
+            this.declaringClass = declaringClass;
+        }
+
+        public CstMethodHandle getBootstrapMethodHandle() {
+            return bootstrapMethodHandle;
+        }
+
+        public BootstrapMethodArgumentsList getBootstrapMethodArguments() {
+            return bootstrapMethodArgumentsList;
+        }
+
+        public CstType getDeclaringClass() {
+            return declaringClass;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/ByteBlock.java b/dx/src/com/android/dx/cf/code/ByteBlock.java
new file mode 100644
index 0000000..2c8e1f5
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/ByteBlock.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+import com.android.dx.util.LabeledItem;
+
+/**
+ * Representation of a basic block in a bytecode array.
+ */
+public final class ByteBlock implements LabeledItem {
+    /** {@code >= 0;} label for this block */
+    private final int label;
+
+    /** {@code >= 0;} bytecode offset (inclusive) of the start of the block */
+    private final int start;
+
+    /** {@code > start;} bytecode offset (exclusive) of the end of the block */
+    private final int end;
+
+    /** {@code non-null;} list of successors that this block may branch to */
+    private final IntList successors;
+
+    /** {@code non-null;} list of exceptions caught and their handler targets */
+    private final ByteCatchList catches;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param label {@code >= 0;} target label for this block
+     * @param start {@code >= 0;} bytecode offset (inclusive) of the start
+     * of the block
+     * @param end {@code > start;} bytecode offset (exclusive) of the end
+     * of the block
+     * @param successors {@code non-null;} list of successors that this block may
+     * branch to
+     * @param catches {@code non-null;} list of exceptions caught and their
+     * handler targets
+     */
+    public ByteBlock(int label, int start, int end, IntList successors,
+                     ByteCatchList catches) {
+        if (label < 0) {
+            throw new IllegalArgumentException("label < 0");
+        }
+
+        if (start < 0) {
+            throw new IllegalArgumentException("start < 0");
+        }
+
+        if (end <= start) {
+            throw new IllegalArgumentException("end <= start");
+        }
+
+        if (successors == null) {
+            throw new NullPointerException("targets == null");
+        }
+
+        int sz = successors.size();
+        for (int i = 0; i < sz; i++) {
+            if (successors.get(i) < 0) {
+                throw new IllegalArgumentException("successors[" + i +
+                                                   "] == " +
+                                                   successors.get(i));
+            }
+        }
+
+        if (catches == null) {
+            throw new NullPointerException("catches == null");
+        }
+
+        this.label = label;
+        this.start = start;
+        this.end = end;
+        this.successors = successors;
+        this.catches = catches;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return '{' + Hex.u2(label) + ": " + Hex.u2(start) + ".." +
+            Hex.u2(end) + '}';
+    }
+
+    /**
+     * Gets the label of this block.
+     *
+     * @return {@code >= 0;} the label
+     */
+    @Override
+    public int getLabel() {
+        return label;
+    }
+
+    /**
+     * Gets the bytecode offset (inclusive) of the start of this block.
+     *
+     * @return {@code >= 0;} the start offset
+     */
+    public int getStart() {
+        return start;
+    }
+
+    /**
+     * Gets the bytecode offset (exclusive) of the end of this block.
+     *
+     * @return {@code > getStart();} the end offset
+     */
+    public int getEnd() {
+        return end;
+    }
+
+    /**
+     * Gets the list of successors that this block may branch to
+     * non-exceptionally.
+     *
+     * @return {@code non-null;} the successor list
+     */
+    public IntList getSuccessors() {
+        return successors;
+    }
+
+    /**
+     * Gets the list of exceptions caught and their handler targets.
+     *
+     * @return {@code non-null;} the catch list
+     */
+    public ByteCatchList getCatches() {
+        return catches;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/ByteBlockList.java b/dx/src/com/android/dx/cf/code/ByteBlockList.java
new file mode 100644
index 0000000..5370c95
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/ByteBlockList.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.util.Hex;
+import com.android.dx.util.LabeledList;
+
+/**
+ * List of {@link ByteBlock} instances.
+ */
+public final class ByteBlockList extends LabeledList {
+
+    /**
+     * Constructs an instance.
+     *
+     * @param size {@code >= 0;} the number of elements to be in the list
+     */
+    public ByteBlockList(int size) {
+        super(size);
+    }
+
+    /**
+     * Gets the indicated element. It is an error to call this with the
+     * index for an element which was never set; if you do that, this
+     * will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @return {@code non-null;} the indicated element
+     */
+    public ByteBlock get(int n) {
+        return (ByteBlock) get0(n);
+    }
+
+    /**
+     * Gets the block with the given label.
+     *
+     * @param label the label to look for
+     * @return {@code non-null;} the block with the given label
+     */
+    public ByteBlock labelToBlock(int label) {
+        int idx = indexOfLabel(label);
+
+        if (idx < 0) {
+            throw new IllegalArgumentException("no such label: "
+                    + Hex.u2(label));
+        }
+
+        return get(idx);
+    }
+
+    /**
+     * Sets the element at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param bb {@code null-ok;} the value to store
+     */
+    public void set(int n, ByteBlock bb) {
+        super.set(n, bb);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/ByteCatchList.java b/dx/src/com/android/dx/cf/code/ByteCatchList.java
new file mode 100644
index 0000000..36c37af
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/ByteCatchList.java
@@ -0,0 +1,317 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.FixedSizeList;
+import com.android.dx.util.IntList;
+
+/**
+ * List of catch entries, that is, the elements of an "exception table,"
+ * which is part of a standard {@code Code} attribute.
+ */
+public final class ByteCatchList extends FixedSizeList {
+    /** {@code non-null;} convenient zero-entry instance */
+    public static final ByteCatchList EMPTY = new ByteCatchList(0);
+
+    /**
+     * Constructs an instance.
+     *
+     * @param count the number of elements to be in the table
+     */
+    public ByteCatchList(int count) {
+        super(count);
+    }
+
+    /**
+     * Gets the total length of this structure in bytes, when included in
+     * a {@code Code} attribute. The returned value includes the
+     * two bytes for {@code exception_table_length}.
+     *
+     * @return {@code >= 2;} the total length, in bytes
+     */
+    public int byteLength() {
+        return 2 + size() * 8;
+    }
+
+    /**
+     * Gets the indicated item.
+     *
+     * @param n {@code >= 0;} which item
+     * @return {@code null-ok;} the indicated item
+     */
+    public Item get(int n) {
+        return (Item) get0(n);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * @param n {@code >= 0, < size();} which entry to set
+     * @param item {@code non-null;} the item
+     */
+    public void set(int n, Item item) {
+        if (item == null) {
+            throw new NullPointerException("item == null");
+        }
+
+        set0(n, item);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * @param n {@code >= 0, < size();} which entry to set
+     * @param startPc {@code >= 0;} the start pc (inclusive) of the handler's range
+     * @param endPc {@code >= startPc;} the end pc (exclusive) of the
+     * handler's range
+     * @param handlerPc {@code >= 0;} the pc of the exception handler
+     * @param exceptionClass {@code null-ok;} the exception class or
+     * {@code null} to catch all exceptions with this handler
+     */
+    public void set(int n, int startPc, int endPc, int handlerPc,
+            CstType exceptionClass) {
+        set0(n, new Item(startPc, endPc, handlerPc, exceptionClass));
+    }
+
+    /**
+     * Gets the list of items active at the given address. The result is
+     * automatically made immutable.
+     *
+     * @param pc which address
+     * @return {@code non-null;} list of exception handlers active at
+     * {@code pc}
+     */
+    public ByteCatchList listFor(int pc) {
+        int sz = size();
+        Item[] resultArr = new Item[sz];
+        int resultSz = 0;
+
+        for (int i = 0; i < sz; i++) {
+            Item one = get(i);
+            if (one.covers(pc) && typeNotFound(one, resultArr, resultSz)) {
+                resultArr[resultSz] = one;
+                resultSz++;
+            }
+        }
+
+        if (resultSz == 0) {
+            return EMPTY;
+        }
+
+        ByteCatchList result = new ByteCatchList(resultSz);
+        for (int i = 0; i < resultSz; i++) {
+            result.set(i, resultArr[i]);
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Helper method for {@link #listFor}, which tells whether a match
+     * is <i>not</i> found for the exception type of the given item in
+     * the given array. A match is considered to be either an exact type
+     * match or the class {@code Object} which represents a catch-all.
+     *
+     * @param item {@code non-null;} item with the exception type to look for
+     * @param arr {@code non-null;} array to search in
+     * @param count {@code non-null;} maximum number of elements in the array to check
+     * @return {@code true} iff the exception type is <i>not</i> found
+     */
+    private static boolean typeNotFound(Item item, Item[] arr, int count) {
+        CstType type = item.getExceptionClass();
+
+        for (int i = 0; i < count; i++) {
+            CstType one = arr[i].getExceptionClass();
+            if ((one == type) || (one == CstType.OBJECT)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns a target list corresponding to this instance. The result
+     * is a list of all the exception handler addresses, with the given
+     * {@code noException} address appended if appropriate. The
+     * result is automatically made immutable.
+     *
+     * @param noException {@code >= -1;} the no-exception address to append, or
+     * {@code -1} not to append anything
+     * @return {@code non-null;} list of exception targets, with
+     * {@code noException} appended if necessary
+     */
+    public IntList toTargetList(int noException) {
+        if (noException < -1) {
+            throw new IllegalArgumentException("noException < -1");
+        }
+
+        boolean hasDefault = (noException >= 0);
+        int sz = size();
+
+        if (sz == 0) {
+            if (hasDefault) {
+                /*
+                 * The list is empty, but there is a no-exception
+                 * address; so, the result is just that address.
+                 */
+                return IntList.makeImmutable(noException);
+            }
+            /*
+             * The list is empty and there isn't even a no-exception
+             * address.
+             */
+            return IntList.EMPTY;
+        }
+
+        IntList result = new IntList(sz + (hasDefault ? 1 : 0));
+
+        for (int i = 0; i < sz; i++) {
+            result.add(get(i).getHandlerPc());
+        }
+
+        if (hasDefault) {
+            result.add(noException);
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Returns a rop-style catches list equivalent to this one.
+     *
+     * @return {@code non-null;} the converted instance
+     */
+    public TypeList toRopCatchList() {
+        int sz = size();
+        if (sz == 0) {
+            return StdTypeList.EMPTY;
+        }
+
+        StdTypeList result = new StdTypeList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            result.set(i, get(i).getExceptionClass().getClassType());
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Item in an exception handler list.
+     */
+    public static class Item {
+        /** {@code >= 0;} the start pc (inclusive) of the handler's range */
+        private final int startPc;
+
+        /** {@code >= startPc;} the end pc (exclusive) of the handler's range */
+        private final int endPc;
+
+        /** {@code >= 0;} the pc of the exception handler */
+        private final int handlerPc;
+
+        /** {@code null-ok;} the exception class or {@code null} to catch all
+         * exceptions with this handler */
+        private final CstType exceptionClass;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param startPc {@code >= 0;} the start pc (inclusive) of the
+         * handler's range
+         * @param endPc {@code >= startPc;} the end pc (exclusive) of the
+         * handler's range
+         * @param handlerPc {@code >= 0;} the pc of the exception handler
+         * @param exceptionClass {@code null-ok;} the exception class or
+         * {@code null} to catch all exceptions with this handler
+         */
+        public Item(int startPc, int endPc, int handlerPc,
+                CstType exceptionClass) {
+            if (startPc < 0) {
+                throw new IllegalArgumentException("startPc < 0");
+            }
+
+            if (endPc < startPc) {
+                throw new IllegalArgumentException("endPc < startPc");
+            }
+
+            if (handlerPc < 0) {
+                throw new IllegalArgumentException("handlerPc < 0");
+            }
+
+            this.startPc = startPc;
+            this.endPc = endPc;
+            this.handlerPc = handlerPc;
+            this.exceptionClass = exceptionClass;
+        }
+
+        /**
+         * Gets the start pc (inclusive) of the handler's range.
+         *
+         * @return {@code >= 0;} the start pc (inclusive) of the handler's range.
+         */
+        public int getStartPc() {
+            return startPc;
+        }
+
+        /**
+         * Gets the end pc (exclusive) of the handler's range.
+         *
+         * @return {@code >= startPc;} the end pc (exclusive) of the
+         * handler's range.
+         */
+        public int getEndPc() {
+            return endPc;
+        }
+
+        /**
+         * Gets the pc of the exception handler.
+         *
+         * @return {@code >= 0;} the pc of the exception handler
+         */
+        public int getHandlerPc() {
+            return handlerPc;
+        }
+
+        /**
+         * Gets the class of exception handled.
+         *
+         * @return {@code non-null;} the exception class; {@link CstType#OBJECT}
+         * if this entry handles all possible exceptions
+         */
+        public CstType getExceptionClass() {
+            return (exceptionClass != null) ?
+                exceptionClass : CstType.OBJECT;
+        }
+
+        /**
+         * Returns whether the given address is in the range of this item.
+         *
+         * @param pc the address
+         * @return {@code true} iff this item covers {@code pc}
+         */
+        public boolean covers(int pc) {
+            return (pc >= startPc) && (pc < endPc);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/ByteOps.java b/dx/src/com/android/dx/cf/code/ByteOps.java
new file mode 100644
index 0000000..850346a
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/ByteOps.java
@@ -0,0 +1,650 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.util.Hex;
+
+/**
+ * Constants and utility methods for dealing with bytecode arrays at an
+ * opcode level.
+ */
+public class ByteOps {
+    // one constant per opcode
+    public static final int NOP = 0x00;
+    public static final int ACONST_NULL = 0x01;
+    public static final int ICONST_M1 = 0x02;
+    public static final int ICONST_0 = 0x03;
+    public static final int ICONST_1 = 0x04;
+    public static final int ICONST_2 = 0x05;
+    public static final int ICONST_3 = 0x06;
+    public static final int ICONST_4 = 0x07;
+    public static final int ICONST_5 = 0x08;
+    public static final int LCONST_0 = 0x09;
+    public static final int LCONST_1 = 0x0a;
+    public static final int FCONST_0 = 0x0b;
+    public static final int FCONST_1 = 0x0c;
+    public static final int FCONST_2 = 0x0d;
+    public static final int DCONST_0 = 0x0e;
+    public static final int DCONST_1 = 0x0f;
+    public static final int BIPUSH = 0x10;
+    public static final int SIPUSH = 0x11;
+    public static final int LDC = 0x12;
+    public static final int LDC_W = 0x13;
+    public static final int LDC2_W = 0x14;
+    public static final int ILOAD = 0x15;
+    public static final int LLOAD = 0x16;
+    public static final int FLOAD = 0x17;
+    public static final int DLOAD = 0x18;
+    public static final int ALOAD = 0x19;
+    public static final int ILOAD_0 = 0x1a;
+    public static final int ILOAD_1 = 0x1b;
+    public static final int ILOAD_2 = 0x1c;
+    public static final int ILOAD_3 = 0x1d;
+    public static final int LLOAD_0 = 0x1e;
+    public static final int LLOAD_1 = 0x1f;
+    public static final int LLOAD_2 = 0x20;
+    public static final int LLOAD_3 = 0x21;
+    public static final int FLOAD_0 = 0x22;
+    public static final int FLOAD_1 = 0x23;
+    public static final int FLOAD_2 = 0x24;
+    public static final int FLOAD_3 = 0x25;
+    public static final int DLOAD_0 = 0x26;
+    public static final int DLOAD_1 = 0x27;
+    public static final int DLOAD_2 = 0x28;
+    public static final int DLOAD_3 = 0x29;
+    public static final int ALOAD_0 = 0x2a;
+    public static final int ALOAD_1 = 0x2b;
+    public static final int ALOAD_2 = 0x2c;
+    public static final int ALOAD_3 = 0x2d;
+    public static final int IALOAD = 0x2e;
+    public static final int LALOAD = 0x2f;
+    public static final int FALOAD = 0x30;
+    public static final int DALOAD = 0x31;
+    public static final int AALOAD = 0x32;
+    public static final int BALOAD = 0x33;
+    public static final int CALOAD = 0x34;
+    public static final int SALOAD = 0x35;
+    public static final int ISTORE = 0x36;
+    public static final int LSTORE = 0x37;
+    public static final int FSTORE = 0x38;
+    public static final int DSTORE = 0x39;
+    public static final int ASTORE = 0x3a;
+    public static final int ISTORE_0 = 0x3b;
+    public static final int ISTORE_1 = 0x3c;
+    public static final int ISTORE_2 = 0x3d;
+    public static final int ISTORE_3 = 0x3e;
+    public static final int LSTORE_0 = 0x3f;
+    public static final int LSTORE_1 = 0x40;
+    public static final int LSTORE_2 = 0x41;
+    public static final int LSTORE_3 = 0x42;
+    public static final int FSTORE_0 = 0x43;
+    public static final int FSTORE_1 = 0x44;
+    public static final int FSTORE_2 = 0x45;
+    public static final int FSTORE_3 = 0x46;
+    public static final int DSTORE_0 = 0x47;
+    public static final int DSTORE_1 = 0x48;
+    public static final int DSTORE_2 = 0x49;
+    public static final int DSTORE_3 = 0x4a;
+    public static final int ASTORE_0 = 0x4b;
+    public static final int ASTORE_1 = 0x4c;
+    public static final int ASTORE_2 = 0x4d;
+    public static final int ASTORE_3 = 0x4e;
+    public static final int IASTORE = 0x4f;
+    public static final int LASTORE = 0x50;
+    public static final int FASTORE = 0x51;
+    public static final int DASTORE = 0x52;
+    public static final int AASTORE = 0x53;
+    public static final int BASTORE = 0x54;
+    public static final int CASTORE = 0x55;
+    public static final int SASTORE = 0x56;
+    public static final int POP = 0x57;
+    public static final int POP2 = 0x58;
+    public static final int DUP = 0x59;
+    public static final int DUP_X1 = 0x5a;
+    public static final int DUP_X2 = 0x5b;
+    public static final int DUP2 = 0x5c;
+    public static final int DUP2_X1 = 0x5d;
+    public static final int DUP2_X2 = 0x5e;
+    public static final int SWAP = 0x5f;
+    public static final int IADD = 0x60;
+    public static final int LADD = 0x61;
+    public static final int FADD = 0x62;
+    public static final int DADD = 0x63;
+    public static final int ISUB = 0x64;
+    public static final int LSUB = 0x65;
+    public static final int FSUB = 0x66;
+    public static final int DSUB = 0x67;
+    public static final int IMUL = 0x68;
+    public static final int LMUL = 0x69;
+    public static final int FMUL = 0x6a;
+    public static final int DMUL = 0x6b;
+    public static final int IDIV = 0x6c;
+    public static final int LDIV = 0x6d;
+    public static final int FDIV = 0x6e;
+    public static final int DDIV = 0x6f;
+    public static final int IREM = 0x70;
+    public static final int LREM = 0x71;
+    public static final int FREM = 0x72;
+    public static final int DREM = 0x73;
+    public static final int INEG = 0x74;
+    public static final int LNEG = 0x75;
+    public static final int FNEG = 0x76;
+    public static final int DNEG = 0x77;
+    public static final int ISHL = 0x78;
+    public static final int LSHL = 0x79;
+    public static final int ISHR = 0x7a;
+    public static final int LSHR = 0x7b;
+    public static final int IUSHR = 0x7c;
+    public static final int LUSHR = 0x7d;
+    public static final int IAND = 0x7e;
+    public static final int LAND = 0x7f;
+    public static final int IOR = 0x80;
+    public static final int LOR = 0x81;
+    public static final int IXOR = 0x82;
+    public static final int LXOR = 0x83;
+    public static final int IINC = 0x84;
+    public static final int I2L = 0x85;
+    public static final int I2F = 0x86;
+    public static final int I2D = 0x87;
+    public static final int L2I = 0x88;
+    public static final int L2F = 0x89;
+    public static final int L2D = 0x8a;
+    public static final int F2I = 0x8b;
+    public static final int F2L = 0x8c;
+    public static final int F2D = 0x8d;
+    public static final int D2I = 0x8e;
+    public static final int D2L = 0x8f;
+    public static final int D2F = 0x90;
+    public static final int I2B = 0x91;
+    public static final int I2C = 0x92;
+    public static final int I2S = 0x93;
+    public static final int LCMP = 0x94;
+    public static final int FCMPL = 0x95;
+    public static final int FCMPG = 0x96;
+    public static final int DCMPL = 0x97;
+    public static final int DCMPG = 0x98;
+    public static final int IFEQ = 0x99;
+    public static final int IFNE = 0x9a;
+    public static final int IFLT = 0x9b;
+    public static final int IFGE = 0x9c;
+    public static final int IFGT = 0x9d;
+    public static final int IFLE = 0x9e;
+    public static final int IF_ICMPEQ = 0x9f;
+    public static final int IF_ICMPNE = 0xa0;
+    public static final int IF_ICMPLT = 0xa1;
+    public static final int IF_ICMPGE = 0xa2;
+    public static final int IF_ICMPGT = 0xa3;
+    public static final int IF_ICMPLE = 0xa4;
+    public static final int IF_ACMPEQ = 0xa5;
+    public static final int IF_ACMPNE = 0xa6;
+    public static final int GOTO = 0xa7;
+    public static final int JSR = 0xa8;
+    public static final int RET = 0xa9;
+    public static final int TABLESWITCH = 0xaa;
+    public static final int LOOKUPSWITCH = 0xab;
+    public static final int IRETURN = 0xac;
+    public static final int LRETURN = 0xad;
+    public static final int FRETURN = 0xae;
+    public static final int DRETURN = 0xaf;
+    public static final int ARETURN = 0xb0;
+    public static final int RETURN = 0xb1;
+    public static final int GETSTATIC = 0xb2;
+    public static final int PUTSTATIC = 0xb3;
+    public static final int GETFIELD = 0xb4;
+    public static final int PUTFIELD = 0xb5;
+    public static final int INVOKEVIRTUAL = 0xb6;
+    public static final int INVOKESPECIAL = 0xb7;
+    public static final int INVOKESTATIC = 0xb8;
+    public static final int INVOKEINTERFACE = 0xb9;
+    public static final int INVOKEDYNAMIC = 0xba;
+    public static final int NEW = 0xbb;
+    public static final int NEWARRAY = 0xbc;
+    public static final int ANEWARRAY = 0xbd;
+    public static final int ARRAYLENGTH = 0xbe;
+    public static final int ATHROW = 0xbf;
+    public static final int CHECKCAST = 0xc0;
+    public static final int INSTANCEOF = 0xc1;
+    public static final int MONITORENTER = 0xc2;
+    public static final int MONITOREXIT = 0xc3;
+    public static final int WIDE = 0xc4;
+    public static final int MULTIANEWARRAY = 0xc5;
+    public static final int IFNULL = 0xc6;
+    public static final int IFNONNULL = 0xc7;
+    public static final int GOTO_W = 0xc8;
+    public static final int JSR_W = 0xc9;
+
+    // a constant for each valid argument to "newarray"
+
+    public static final int NEWARRAY_BOOLEAN = 4;
+    public static final int NEWARRAY_CHAR = 5;
+    public static final int NEWARRAY_FLOAT = 6;
+    public static final int NEWARRAY_DOUBLE = 7;
+    public static final int NEWARRAY_BYTE = 8;
+    public static final int NEWARRAY_SHORT = 9;
+    public static final int NEWARRAY_INT = 10;
+    public static final int NEWARRAY_LONG = 11;
+
+    // a constant for each possible instruction format
+
+    /** invalid */
+    public static final int FMT_INVALID = 0;
+
+    /** "-": {@code op} */
+    public static final int FMT_NO_ARGS = 1;
+
+    /** "0": {@code op}; implies {@code max_locals >= 1} */
+    public static final int FMT_NO_ARGS_LOCALS_1 = 2;
+
+    /** "1": {@code op}; implies {@code max_locals >= 2} */
+    public static final int FMT_NO_ARGS_LOCALS_2 = 3;
+
+    /** "2": {@code op}; implies {@code max_locals >= 3} */
+    public static final int FMT_NO_ARGS_LOCALS_3 = 4;
+
+    /** "3": {@code op}; implies {@code max_locals >= 4} */
+    public static final int FMT_NO_ARGS_LOCALS_4 = 5;
+
+    /** "4": {@code op}; implies {@code max_locals >= 5} */
+    public static final int FMT_NO_ARGS_LOCALS_5 = 6;
+
+    /** "b": {@code op target target} */
+    public static final int FMT_BRANCH = 7;
+
+    /** "c": {@code op target target target target} */
+    public static final int FMT_WIDE_BRANCH = 8;
+
+    /** "p": {@code op #cpi #cpi}; constant restricted as specified */
+    public static final int FMT_CPI = 9;
+
+    /**
+     * "l": {@code op local}; category-1 local; implies
+     * {@code max_locals} is at least two more than the given
+     * local number
+     */
+    public static final int FMT_LOCAL_1 = 10;
+
+    /**
+     * "m": {@code op local}; category-2 local; implies
+     * {@code max_locals} is at least two more than the given
+     * local number
+     */
+    public static final int FMT_LOCAL_2 = 11;
+
+    /**
+     * "y": {@code op #byte} ({@code bipush} and
+     * {@code newarray})
+     */
+    public static final int FMT_LITERAL_BYTE = 12;
+
+    /** "I": {@code invokeinterface cpi cpi count 0} */
+    public static final int FMT_INVOKEINTERFACE = 13;
+
+    /** "L": {@code ldc #cpi}; constant restricted as specified */
+    public static final int FMT_LDC = 14;
+
+    /** "S": {@code sipush #byte #byte} */
+    public static final int FMT_SIPUSH = 15;
+
+    /** "T": {@code tableswitch ...} */
+    public static final int FMT_TABLESWITCH = 16;
+
+    /** "U": {@code lookupswitch ...} */
+    public static final int FMT_LOOKUPSWITCH = 17;
+
+    /** "M": {@code multianewarray cpi cpi dims} */
+    public static final int FMT_MULTIANEWARRAY = 18;
+
+    /** "W": {@code wide ...} */
+    public static final int FMT_WIDE = 19;
+
+    /** mask for the bits representing the opcode format */
+    public static final int FMT_MASK = 0x1f;
+
+    /** "I": flag bit for valid cp type for {@code Integer} */
+    public static final int CPOK_Integer = 0x20;
+
+    /** "F": flag bit for valid cp type for {@code Float} */
+    public static final int CPOK_Float = 0x40;
+
+    /** "J": flag bit for valid cp type for {@code Long} */
+    public static final int CPOK_Long = 0x80;
+
+    /** "D": flag bit for valid cp type for {@code Double} */
+    public static final int CPOK_Double = 0x100;
+
+    /** "c": flag bit for valid cp type for {@code Class} */
+    public static final int CPOK_Class = 0x200;
+
+    /** "s": flag bit for valid cp type for {@code String} */
+    public static final int CPOK_String = 0x400;
+
+    /** "f": flag bit for valid cp type for {@code Fieldref} */
+    public static final int CPOK_Fieldref = 0x800;
+
+    /** "m": flag bit for valid cp type for {@code Methodref} */
+    public static final int CPOK_Methodref = 0x1000;
+
+    /** "i": flag bit for valid cp type for {@code InterfaceMethodref} */
+    public static final int CPOK_InterfaceMethodref = 0x2000;
+
+    /**
+     * {@code non-null;} map from opcodes to format or'ed with allowed constant
+     * pool types
+     */
+    private static final int[] OPCODE_INFO = new int[256];
+
+    /** {@code non-null;} map from opcodes to their names */
+    private static final String[] OPCODE_NAMES = new String[256];
+
+    /** {@code non-null;} bigass string describing all the opcodes */
+    private static final String OPCODE_DETAILS =
+        "00 - nop;" +
+        "01 - aconst_null;" +
+        "02 - iconst_m1;" +
+        "03 - iconst_0;" +
+        "04 - iconst_1;" +
+        "05 - iconst_2;" +
+        "06 - iconst_3;" +
+        "07 - iconst_4;" +
+        "08 - iconst_5;" +
+        "09 - lconst_0;" +
+        "0a - lconst_1;" +
+        "0b - fconst_0;" +
+        "0c - fconst_1;" +
+        "0d - fconst_2;" +
+        "0e - dconst_0;" +
+        "0f - dconst_1;" +
+        "10 y bipush;" +
+        "11 S sipush;" +
+        "12 L:IFcs ldc;" +
+        "13 p:IFcs ldc_w;" +
+        "14 p:DJ ldc2_w;" +
+        "15 l iload;" +
+        "16 m lload;" +
+        "17 l fload;" +
+        "18 m dload;" +
+        "19 l aload;" +
+        "1a 0 iload_0;" +
+        "1b 1 iload_1;" +
+        "1c 2 iload_2;" +
+        "1d 3 iload_3;" +
+        "1e 1 lload_0;" +
+        "1f 2 lload_1;" +
+        "20 3 lload_2;" +
+        "21 4 lload_3;" +
+        "22 0 fload_0;" +
+        "23 1 fload_1;" +
+        "24 2 fload_2;" +
+        "25 3 fload_3;" +
+        "26 1 dload_0;" +
+        "27 2 dload_1;" +
+        "28 3 dload_2;" +
+        "29 4 dload_3;" +
+        "2a 0 aload_0;" +
+        "2b 1 aload_1;" +
+        "2c 2 aload_2;" +
+        "2d 3 aload_3;" +
+        "2e - iaload;" +
+        "2f - laload;" +
+        "30 - faload;" +
+        "31 - daload;" +
+        "32 - aaload;" +
+        "33 - baload;" +
+        "34 - caload;" +
+        "35 - saload;" +
+        "36 - istore;" +
+        "37 - lstore;" +
+        "38 - fstore;" +
+        "39 - dstore;" +
+        "3a - astore;" +
+        "3b 0 istore_0;" +
+        "3c 1 istore_1;" +
+        "3d 2 istore_2;" +
+        "3e 3 istore_3;" +
+        "3f 1 lstore_0;" +
+        "40 2 lstore_1;" +
+        "41 3 lstore_2;" +
+        "42 4 lstore_3;" +
+        "43 0 fstore_0;" +
+        "44 1 fstore_1;" +
+        "45 2 fstore_2;" +
+        "46 3 fstore_3;" +
+        "47 1 dstore_0;" +
+        "48 2 dstore_1;" +
+        "49 3 dstore_2;" +
+        "4a 4 dstore_3;" +
+        "4b 0 astore_0;" +
+        "4c 1 astore_1;" +
+        "4d 2 astore_2;" +
+        "4e 3 astore_3;" +
+        "4f - iastore;" +
+        "50 - lastore;" +
+        "51 - fastore;" +
+        "52 - dastore;" +
+        "53 - aastore;" +
+        "54 - bastore;" +
+        "55 - castore;" +
+        "56 - sastore;" +
+        "57 - pop;" +
+        "58 - pop2;" +
+        "59 - dup;" +
+        "5a - dup_x1;" +
+        "5b - dup_x2;" +
+        "5c - dup2;" +
+        "5d - dup2_x1;" +
+        "5e - dup2_x2;" +
+        "5f - swap;" +
+        "60 - iadd;" +
+        "61 - ladd;" +
+        "62 - fadd;" +
+        "63 - dadd;" +
+        "64 - isub;" +
+        "65 - lsub;" +
+        "66 - fsub;" +
+        "67 - dsub;" +
+        "68 - imul;" +
+        "69 - lmul;" +
+        "6a - fmul;" +
+        "6b - dmul;" +
+        "6c - idiv;" +
+        "6d - ldiv;" +
+        "6e - fdiv;" +
+        "6f - ddiv;" +
+        "70 - irem;" +
+        "71 - lrem;" +
+        "72 - frem;" +
+        "73 - drem;" +
+        "74 - ineg;" +
+        "75 - lneg;" +
+        "76 - fneg;" +
+        "77 - dneg;" +
+        "78 - ishl;" +
+        "79 - lshl;" +
+        "7a - ishr;" +
+        "7b - lshr;" +
+        "7c - iushr;" +
+        "7d - lushr;" +
+        "7e - iand;" +
+        "7f - land;" +
+        "80 - ior;" +
+        "81 - lor;" +
+        "82 - ixor;" +
+        "83 - lxor;" +
+        "84 l iinc;" +
+        "85 - i2l;" +
+        "86 - i2f;" +
+        "87 - i2d;" +
+        "88 - l2i;" +
+        "89 - l2f;" +
+        "8a - l2d;" +
+        "8b - f2i;" +
+        "8c - f2l;" +
+        "8d - f2d;" +
+        "8e - d2i;" +
+        "8f - d2l;" +
+        "90 - d2f;" +
+        "91 - i2b;" +
+        "92 - i2c;" +
+        "93 - i2s;" +
+        "94 - lcmp;" +
+        "95 - fcmpl;" +
+        "96 - fcmpg;" +
+        "97 - dcmpl;" +
+        "98 - dcmpg;" +
+        "99 b ifeq;" +
+        "9a b ifne;" +
+        "9b b iflt;" +
+        "9c b ifge;" +
+        "9d b ifgt;" +
+        "9e b ifle;" +
+        "9f b if_icmpeq;" +
+        "a0 b if_icmpne;" +
+        "a1 b if_icmplt;" +
+        "a2 b if_icmpge;" +
+        "a3 b if_icmpgt;" +
+        "a4 b if_icmple;" +
+        "a5 b if_acmpeq;" +
+        "a6 b if_acmpne;" +
+        "a7 b goto;" +
+        "a8 b jsr;" +
+        "a9 l ret;" +
+        "aa T tableswitch;" +
+        "ab U lookupswitch;" +
+        "ac - ireturn;" +
+        "ad - lreturn;" +
+        "ae - freturn;" +
+        "af - dreturn;" +
+        "b0 - areturn;" +
+        "b1 - return;" +
+        "b2 p:f getstatic;" +
+        "b3 p:f putstatic;" +
+        "b4 p:f getfield;" +
+        "b5 p:f putfield;" +
+        "b6 p:m invokevirtual;" +
+        "b7 p:m invokespecial;" +
+        "b8 p:m invokestatic;" +
+        "b9 I:i invokeinterface;" +
+        "bb p:c new;" +
+        "bc y newarray;" +
+        "bd p:c anewarray;" +
+        "be - arraylength;" +
+        "bf - athrow;" +
+        "c0 p:c checkcast;" +
+        "c1 p:c instanceof;" +
+        "c2 - monitorenter;" +
+        "c3 - monitorexit;" +
+        "c4 W wide;" +
+        "c5 M:c multianewarray;" +
+        "c6 b ifnull;" +
+        "c7 b ifnonnull;" +
+        "c8 c goto_w;" +
+        "c9 c jsr_w;";
+
+    static {
+        // Set up OPCODE_INFO and OPCODE_NAMES.
+        String s = OPCODE_DETAILS;
+        int len = s.length();
+
+        for (int i = 0; i < len; /*i*/) {
+            int idx = (Character.digit(s.charAt(i), 16) << 4) |
+                Character.digit(s.charAt(i + 1), 16);
+            int info;
+            switch (s.charAt(i + 3)) {
+                case '-': info = FMT_NO_ARGS; break;
+                case '0': info = FMT_NO_ARGS_LOCALS_1; break;
+                case '1': info = FMT_NO_ARGS_LOCALS_2; break;
+                case '2': info = FMT_NO_ARGS_LOCALS_3; break;
+                case '3': info = FMT_NO_ARGS_LOCALS_4; break;
+                case '4': info = FMT_NO_ARGS_LOCALS_5; break;
+                case 'b': info = FMT_BRANCH; break;
+                case 'c': info = FMT_WIDE_BRANCH; break;
+                case 'p': info = FMT_CPI; break;
+                case 'l': info = FMT_LOCAL_1; break;
+                case 'm': info = FMT_LOCAL_2; break;
+                case 'y': info = FMT_LITERAL_BYTE; break;
+                case 'I': info = FMT_INVOKEINTERFACE; break;
+                case 'L': info = FMT_LDC; break;
+                case 'S': info = FMT_SIPUSH; break;
+                case 'T': info = FMT_TABLESWITCH; break;
+                case 'U': info = FMT_LOOKUPSWITCH; break;
+                case 'M': info = FMT_MULTIANEWARRAY; break;
+                case 'W': info = FMT_WIDE; break;
+                default: info = FMT_INVALID; break;
+            }
+
+            i += 5;
+            if (s.charAt(i - 1) == ':') {
+                inner:
+                for (;;) {
+                    switch (s.charAt(i)) {
+                        case 'I': info |= CPOK_Integer; break;
+                        case 'F': info |= CPOK_Float; break;
+                        case 'J': info |= CPOK_Long; break;
+                        case 'D': info |= CPOK_Double; break;
+                        case 'c': info |= CPOK_Class; break;
+                        case 's': info |= CPOK_String; break;
+                        case 'f': info |= CPOK_Fieldref; break;
+                        case 'm': info |= CPOK_Methodref; break;
+                        case 'i': info |= CPOK_InterfaceMethodref; break;
+                        default: break inner;
+                    }
+                    i++;
+                }
+                i++;
+            }
+
+            int endAt = s.indexOf(';', i);
+            OPCODE_INFO[idx] = info;
+            OPCODE_NAMES[idx] = s.substring(i, endAt);
+            i = endAt + 1;
+        }
+    }
+
+    /**
+     * This class is uninstantiable.
+     */
+    private ByteOps() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Gets the name of the given opcode.
+     *
+     * @param opcode {@code >= 0, <= 255;} the opcode
+     * @return {@code non-null;} its name
+     */
+    public static String opName(int opcode) {
+        String result = OPCODE_NAMES[opcode];
+
+        if (result == null) {
+            result = "unused_" + Hex.u1(opcode);
+            OPCODE_NAMES[opcode] = result;
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the format and allowed cp types of the given opcode.
+     *
+     * @param opcode {@code >= 0, <= 255;} the opcode
+     * @return its format and allowed cp types
+     */
+    public static int opInfo(int opcode) {
+        return OPCODE_INFO[opcode];
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/BytecodeArray.java b/dx/src/com/android/dx/cf/code/BytecodeArray.java
new file mode 100644
index 0000000..fee66ec
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/BytecodeArray.java
@@ -0,0 +1,1439 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.rop.cst.CstDouble;
+import com.android.dx.rop.cst.CstFloat;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstInvokeDynamic;
+import com.android.dx.rop.cst.CstKnownNull;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.rop.cst.CstLong;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Bits;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+
+/**
+ * Bytecode array, which is part of a standard {@code Code} attribute.
+ */
+public final class BytecodeArray {
+    /** convenient no-op implementation of {@link Visitor} */
+    public static final Visitor EMPTY_VISITOR = new BaseVisitor();
+
+    /** {@code non-null;} underlying bytes */
+    private final ByteArray bytes;
+
+    /**
+     * {@code non-null;} constant pool to use when resolving constant
+     * pool indices
+     */
+    private final ConstantPool pool;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bytes {@code non-null;} underlying bytes
+     * @param pool {@code non-null;} constant pool to use when
+     * resolving constant pool indices
+     */
+    public BytecodeArray(ByteArray bytes, ConstantPool pool) {
+        if (bytes == null) {
+            throw new NullPointerException("bytes == null");
+        }
+
+        if (pool == null) {
+            throw new NullPointerException("pool == null");
+        }
+
+        this.bytes = bytes;
+        this.pool = pool;
+    }
+
+    /**
+     * Gets the underlying byte array.
+     *
+     * @return {@code non-null;} the byte array
+     */
+    public ByteArray getBytes() {
+        return bytes;
+    }
+
+    /**
+     * Gets the size of the bytecode array, per se.
+     *
+     * @return {@code >= 0;} the length of the bytecode array
+     */
+    public int size() {
+        return bytes.size();
+    }
+
+    /**
+     * Gets the total length of this structure in bytes, when included in
+     * a {@code Code} attribute. The returned value includes the
+     * array size plus four bytes for {@code code_length}.
+     *
+     * @return {@code >= 4;} the total length, in bytes
+     */
+    public int byteLength() {
+        return 4 + bytes.size();
+    }
+
+    /**
+     * Parses each instruction in the array, in order.
+     *
+     * @param visitor {@code null-ok;} visitor to call back to for
+     * each instruction
+     */
+    public void forEach(Visitor visitor) {
+        int sz = bytes.size();
+        int at = 0;
+
+        while (at < sz) {
+            /*
+             * Don't record the previous offset here, so that we get to see the
+             * raw code that initializes the array
+             */
+            at += parseInstruction(at, visitor);
+        }
+    }
+
+    /**
+     * Finds the offset to each instruction in the bytecode array. The
+     * result is a bit set with the offset of each opcode-per-se flipped on.
+     *
+     * @see Bits
+     * @return {@code non-null;} appropriately constructed bit set
+     */
+    public int[] getInstructionOffsets() {
+        int sz = bytes.size();
+        int[] result = Bits.makeBitSet(sz);
+        int at = 0;
+
+        while (at < sz) {
+            Bits.set(result, at, true);
+            int length = parseInstruction(at, null);
+            at += length;
+        }
+
+        return result;
+    }
+
+    /**
+     * Processes the given "work set" by repeatedly finding the lowest bit
+     * in the set, clearing it, and parsing and visiting the instruction at
+     * the indicated offset (that is, the bit index), repeating until the
+     * work set is empty. It is expected that the visitor will regularly
+     * set new bits in the work set during the process.
+     *
+     * @param workSet {@code non-null;} the work set to process
+     * @param visitor {@code non-null;} visitor to call back to for
+     * each instruction
+     */
+    public void processWorkSet(int[] workSet, Visitor visitor) {
+        if (visitor == null) {
+            throw new NullPointerException("visitor == null");
+        }
+
+        for (;;) {
+            int offset = Bits.findFirst(workSet, 0);
+            if (offset < 0) {
+                break;
+            }
+            Bits.clear(workSet, offset);
+            parseInstruction(offset, visitor);
+            visitor.setPreviousOffset(offset);
+        }
+    }
+
+    /**
+     * Parses the instruction at the indicated offset. Indicate the
+     * result by calling the visitor if supplied and by returning the
+     * number of bytes consumed by the instruction.
+     *
+     * <p>In order to simplify further processing, the opcodes passed
+     * to the visitor are canonicalized, altering the opcode to a more
+     * universal one and making formerly implicit arguments
+     * explicit. In particular:</p>
+     *
+     * <ul>
+     * <li>The opcodes to push literal constants of primitive types all become
+     *   {@code ldc}.
+     *   E.g., {@code fconst_0}, {@code sipush}, and
+     *   {@code lconst_0} qualify for this treatment.</li>
+     * <li>{@code aconst_null} becomes {@code ldc} of a
+     *   "known null."</li>
+     * <li>Shorthand local variable accessors become the corresponding
+     *   longhand. E.g. {@code aload_2} becomes {@code aload}.</li>
+     * <li>{@code goto_w} and {@code jsr_w} become {@code goto}
+     *   and {@code jsr} (respectively).</li>
+     * <li>{@code ldc_w} becomes {@code ldc}.</li>
+     * <li>{@code tableswitch} becomes {@code lookupswitch}.
+     * <li>Arithmetic, array, and value-returning ops are collapsed
+     *   to the {@code int} variant opcode, with the {@code type}
+     *   argument set to indicate the actual type. E.g.,
+     *   {@code fadd} becomes {@code iadd}, but
+     *   {@code type} is passed as {@code Type.FLOAT} in that
+     *   case. Similarly, {@code areturn} becomes
+     *   {@code ireturn}. (However, {@code return} remains
+     *   unchanged.</li>
+     * <li>Local variable access ops are collapsed to the {@code int}
+     *   variant opcode, with the {@code type} argument set to indicate
+     *   the actual type. E.g., {@code aload} becomes {@code iload},
+     *   but {@code type} is passed as {@code Type.OBJECT} in
+     *   that case.</li>
+     * <li>Numeric conversion ops ({@code i2l}, etc.) are left alone
+     *   to avoid too much confustion, but their {@code type} is
+     *   the pushed type. E.g., {@code i2b} gets type
+     *   {@code Type.INT}, and {@code f2d} gets type
+     *   {@code Type.DOUBLE}. Other unaltered opcodes also get
+     *   their pushed type. E.g., {@code arraylength} gets type
+     *   {@code Type.INT}.</li>
+     * </ul>
+     *
+     * @param offset {@code >= 0, < bytes.size();} offset to the start of the
+     * instruction
+     * @param visitor {@code null-ok;} visitor to call back to
+     * @return the length of the instruction, in bytes
+     */
+    public int parseInstruction(int offset, Visitor visitor) {
+        if (visitor == null) {
+            visitor = EMPTY_VISITOR;
+        }
+
+        try {
+            int opcode = bytes.getUnsignedByte(offset);
+            int info = ByteOps.opInfo(opcode);
+            int fmt = info & ByteOps.FMT_MASK;
+
+            switch (opcode) {
+                case ByteOps.NOP: {
+                    visitor.visitNoArgs(opcode, offset, 1, Type.VOID);
+                    return 1;
+                }
+                case ByteOps.ACONST_NULL: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstKnownNull.THE_ONE, 0);
+                    return 1;
+                }
+                case ByteOps.ICONST_M1: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstInteger.VALUE_M1, -1);
+                    return 1;
+                }
+                case ByteOps.ICONST_0: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstInteger.VALUE_0, 0);
+                    return 1;
+                }
+                case ByteOps.ICONST_1: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstInteger.VALUE_1, 1);
+                    return 1;
+                }
+                case ByteOps.ICONST_2: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstInteger.VALUE_2, 2);
+                    return 1;
+                }
+                case ByteOps.ICONST_3: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstInteger.VALUE_3, 3);
+                    return 1;
+                }
+                case ByteOps.ICONST_4: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstInteger.VALUE_4, 4);
+                    return 1;
+                }
+                case ByteOps.ICONST_5:  {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstInteger.VALUE_5, 5);
+                    return 1;
+                }
+                case ByteOps.LCONST_0: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstLong.VALUE_0, 0);
+                    return 1;
+                }
+                case ByteOps.LCONST_1: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstLong.VALUE_1, 0);
+                    return 1;
+                }
+                case ByteOps.FCONST_0: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstFloat.VALUE_0, 0);
+                    return 1;
+                }
+                case ByteOps.FCONST_1: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstFloat.VALUE_1, 0);
+                    return 1;
+                }
+                case ByteOps.FCONST_2:  {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstFloat.VALUE_2, 0);
+                    return 1;
+                }
+                case ByteOps.DCONST_0: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstDouble.VALUE_0, 0);
+                    return 1;
+                }
+                case ByteOps.DCONST_1: {
+                    visitor.visitConstant(ByteOps.LDC, offset, 1,
+                                          CstDouble.VALUE_1, 0);
+                    return 1;
+                }
+                case ByteOps.BIPUSH: {
+                    int value = bytes.getByte(offset + 1);
+                    visitor.visitConstant(ByteOps.LDC, offset, 2,
+                                          CstInteger.make(value), value);
+                    return 2;
+                }
+                case ByteOps.SIPUSH: {
+                    int value = bytes.getShort(offset + 1);
+                    visitor.visitConstant(ByteOps.LDC, offset, 3,
+                                          CstInteger.make(value), value);
+                    return 3;
+                }
+                case ByteOps.LDC: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    Constant cst = pool.get(idx);
+                    int value = (cst instanceof CstInteger) ?
+                        ((CstInteger) cst).getValue() : 0;
+                    visitor.visitConstant(ByteOps.LDC, offset, 2, cst, value);
+                    return 2;
+                }
+                case ByteOps.LDC_W: {
+                    int idx = bytes.getUnsignedShort(offset + 1);
+                    Constant cst = pool.get(idx);
+                    int value = (cst instanceof CstInteger) ?
+                        ((CstInteger) cst).getValue() : 0;
+                    visitor.visitConstant(ByteOps.LDC, offset, 3, cst, value);
+                    return 3;
+                }
+                case ByteOps.LDC2_W: {
+                    int idx = bytes.getUnsignedShort(offset + 1);
+                    Constant cst = pool.get(idx);
+                    visitor.visitConstant(ByteOps.LDC2_W, offset, 3, cst, 0);
+                    return 3;
+                }
+                case ByteOps.ILOAD: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 2, idx,
+                                       Type.INT, 0);
+                    return 2;
+                }
+                case ByteOps.LLOAD: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 2, idx,
+                                       Type.LONG, 0);
+                    return 2;
+                }
+                case ByteOps.FLOAD: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 2, idx,
+                                       Type.FLOAT, 0);
+                    return 2;
+                }
+                case ByteOps.DLOAD: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 2, idx,
+                                       Type.DOUBLE, 0);
+                    return 2;
+                }
+                case ByteOps.ALOAD: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 2, idx,
+                                       Type.OBJECT, 0);
+                    return 2;
+                }
+                case ByteOps.ILOAD_0:
+                case ByteOps.ILOAD_1:
+                case ByteOps.ILOAD_2:
+                case ByteOps.ILOAD_3: {
+                    int idx = opcode - ByteOps.ILOAD_0;
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 1, idx,
+                                       Type.INT, 0);
+                    return 1;
+                }
+                case ByteOps.LLOAD_0:
+                case ByteOps.LLOAD_1:
+                case ByteOps.LLOAD_2:
+                case ByteOps.LLOAD_3: {
+                    int idx = opcode - ByteOps.LLOAD_0;
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 1, idx,
+                                       Type.LONG, 0);
+                    return 1;
+                }
+                case ByteOps.FLOAD_0:
+                case ByteOps.FLOAD_1:
+                case ByteOps.FLOAD_2:
+                case ByteOps.FLOAD_3: {
+                    int idx = opcode - ByteOps.FLOAD_0;
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 1, idx,
+                                       Type.FLOAT, 0);
+                    return 1;
+                }
+                case ByteOps.DLOAD_0:
+                case ByteOps.DLOAD_1:
+                case ByteOps.DLOAD_2:
+                case ByteOps.DLOAD_3: {
+                    int idx = opcode - ByteOps.DLOAD_0;
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 1, idx,
+                                       Type.DOUBLE, 0);
+                    return 1;
+                }
+                case ByteOps.ALOAD_0:
+                case ByteOps.ALOAD_1:
+                case ByteOps.ALOAD_2:
+                case ByteOps.ALOAD_3: {
+                    int idx = opcode - ByteOps.ALOAD_0;
+                    visitor.visitLocal(ByteOps.ILOAD, offset, 1, idx,
+                                       Type.OBJECT, 0);
+                    return 1;
+                }
+                case ByteOps.IALOAD: {
+                    visitor.visitNoArgs(ByteOps.IALOAD, offset, 1, Type.INT);
+                    return 1;
+                }
+                case ByteOps.LALOAD: {
+                    visitor.visitNoArgs(ByteOps.IALOAD, offset, 1, Type.LONG);
+                    return 1;
+                }
+                case ByteOps.FALOAD: {
+                    visitor.visitNoArgs(ByteOps.IALOAD, offset, 1,
+                                        Type.FLOAT);
+                    return 1;
+                }
+                case ByteOps.DALOAD: {
+                    visitor.visitNoArgs(ByteOps.IALOAD, offset, 1,
+                                        Type.DOUBLE);
+                    return 1;
+                }
+                case ByteOps.AALOAD: {
+                    visitor.visitNoArgs(ByteOps.IALOAD, offset, 1,
+                                        Type.OBJECT);
+                    return 1;
+                }
+                case ByteOps.BALOAD: {
+                    /*
+                     * Note: This is a load from either a byte[] or a
+                     * boolean[].
+                     */
+                    visitor.visitNoArgs(ByteOps.IALOAD, offset, 1, Type.BYTE);
+                    return 1;
+                }
+                case ByteOps.CALOAD: {
+                    visitor.visitNoArgs(ByteOps.IALOAD, offset, 1, Type.CHAR);
+                    return 1;
+                }
+                case ByteOps.SALOAD: {
+                    visitor.visitNoArgs(ByteOps.IALOAD, offset, 1,
+                                        Type.SHORT);
+                    return 1;
+                }
+                case ByteOps.ISTORE: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 2, idx,
+                                       Type.INT, 0);
+                    return 2;
+                }
+                case ByteOps.LSTORE: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 2, idx,
+                                       Type.LONG, 0);
+                    return 2;
+                }
+                case ByteOps.FSTORE: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 2, idx,
+                                       Type.FLOAT, 0);
+                    return 2;
+                }
+                case ByteOps.DSTORE: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 2, idx,
+                                       Type.DOUBLE, 0);
+                    return 2;
+                }
+                case ByteOps.ASTORE: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 2, idx,
+                                       Type.OBJECT, 0);
+                    return 2;
+                }
+                case ByteOps.ISTORE_0:
+                case ByteOps.ISTORE_1:
+                case ByteOps.ISTORE_2:
+                case ByteOps.ISTORE_3: {
+                    int idx = opcode - ByteOps.ISTORE_0;
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 1, idx,
+                                       Type.INT, 0);
+                    return 1;
+                }
+                case ByteOps.LSTORE_0:
+                case ByteOps.LSTORE_1:
+                case ByteOps.LSTORE_2:
+                case ByteOps.LSTORE_3: {
+                    int idx = opcode - ByteOps.LSTORE_0;
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 1, idx,
+                                       Type.LONG, 0);
+                    return 1;
+                }
+                case ByteOps.FSTORE_0:
+                case ByteOps.FSTORE_1:
+                case ByteOps.FSTORE_2:
+                case ByteOps.FSTORE_3: {
+                    int idx = opcode - ByteOps.FSTORE_0;
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 1, idx,
+                                       Type.FLOAT, 0);
+                    return 1;
+                }
+                case ByteOps.DSTORE_0:
+                case ByteOps.DSTORE_1:
+                case ByteOps.DSTORE_2:
+                case ByteOps.DSTORE_3: {
+                    int idx = opcode - ByteOps.DSTORE_0;
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 1, idx,
+                                       Type.DOUBLE, 0);
+                    return 1;
+                }
+                case ByteOps.ASTORE_0:
+                case ByteOps.ASTORE_1:
+                case ByteOps.ASTORE_2:
+                case ByteOps.ASTORE_3: {
+                    int idx = opcode - ByteOps.ASTORE_0;
+                    visitor.visitLocal(ByteOps.ISTORE, offset, 1, idx,
+                                       Type.OBJECT, 0);
+                    return 1;
+                }
+                case ByteOps.IASTORE: {
+                    visitor.visitNoArgs(ByteOps.IASTORE, offset, 1, Type.INT);
+                    return 1;
+                }
+                case ByteOps.LASTORE: {
+                    visitor.visitNoArgs(ByteOps.IASTORE, offset, 1,
+                                        Type.LONG);
+                    return 1;
+                }
+                case ByteOps.FASTORE: {
+                    visitor.visitNoArgs(ByteOps.IASTORE, offset, 1,
+                                        Type.FLOAT);
+                    return 1;
+                }
+                case ByteOps.DASTORE: {
+                    visitor.visitNoArgs(ByteOps.IASTORE, offset, 1,
+                                        Type.DOUBLE);
+                    return 1;
+                }
+                case ByteOps.AASTORE: {
+                    visitor.visitNoArgs(ByteOps.IASTORE, offset, 1,
+                                        Type.OBJECT);
+                    return 1;
+                }
+                case ByteOps.BASTORE: {
+                    /*
+                     * Note: This is a load from either a byte[] or a
+                     * boolean[].
+                     */
+                    visitor.visitNoArgs(ByteOps.IASTORE, offset, 1,
+                                        Type.BYTE);
+                    return 1;
+                }
+                case ByteOps.CASTORE: {
+                    visitor.visitNoArgs(ByteOps.IASTORE, offset, 1,
+                                        Type.CHAR);
+                    return 1;
+                }
+                case ByteOps.SASTORE: {
+                    visitor.visitNoArgs(ByteOps.IASTORE, offset, 1,
+                                        Type.SHORT);
+                    return 1;
+                }
+                case ByteOps.POP:
+                case ByteOps.POP2:
+                case ByteOps.DUP:
+                case ByteOps.DUP_X1:
+                case ByteOps.DUP_X2:
+                case ByteOps.DUP2:
+                case ByteOps.DUP2_X1:
+                case ByteOps.DUP2_X2:
+                case ByteOps.SWAP: {
+                    visitor.visitNoArgs(opcode, offset, 1, Type.VOID);
+                    return 1;
+                }
+                case ByteOps.IADD:
+                case ByteOps.ISUB:
+                case ByteOps.IMUL:
+                case ByteOps.IDIV:
+                case ByteOps.IREM:
+                case ByteOps.INEG:
+                case ByteOps.ISHL:
+                case ByteOps.ISHR:
+                case ByteOps.IUSHR:
+                case ByteOps.IAND:
+                case ByteOps.IOR:
+                case ByteOps.IXOR: {
+                    visitor.visitNoArgs(opcode, offset, 1, Type.INT);
+                    return 1;
+                }
+                case ByteOps.LADD:
+                case ByteOps.LSUB:
+                case ByteOps.LMUL:
+                case ByteOps.LDIV:
+                case ByteOps.LREM:
+                case ByteOps.LNEG:
+                case ByteOps.LSHL:
+                case ByteOps.LSHR:
+                case ByteOps.LUSHR:
+                case ByteOps.LAND:
+                case ByteOps.LOR:
+                case ByteOps.LXOR: {
+                    /*
+                     * It's "opcode - 1" because, conveniently enough, all
+                     * these long ops are one past the int variants.
+                     */
+                    visitor.visitNoArgs(opcode - 1, offset, 1, Type.LONG);
+                    return 1;
+                }
+                case ByteOps.FADD:
+                case ByteOps.FSUB:
+                case ByteOps.FMUL:
+                case ByteOps.FDIV:
+                case ByteOps.FREM:
+                case ByteOps.FNEG: {
+                    /*
+                     * It's "opcode - 2" because, conveniently enough, all
+                     * these float ops are two past the int variants.
+                     */
+                    visitor.visitNoArgs(opcode - 2, offset, 1, Type.FLOAT);
+                    return 1;
+                }
+                case ByteOps.DADD:
+                case ByteOps.DSUB:
+                case ByteOps.DMUL:
+                case ByteOps.DDIV:
+                case ByteOps.DREM:
+                case ByteOps.DNEG: {
+                    /*
+                     * It's "opcode - 3" because, conveniently enough, all
+                     * these double ops are three past the int variants.
+                     */
+                    visitor.visitNoArgs(opcode - 3, offset, 1, Type.DOUBLE);
+                    return 1;
+                }
+                case ByteOps.IINC: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    int value = bytes.getByte(offset + 2);
+                    visitor.visitLocal(opcode, offset, 3, idx,
+                                       Type.INT, value);
+                    return 3;
+                }
+                case ByteOps.I2L:
+                case ByteOps.F2L:
+                case ByteOps.D2L: {
+                    visitor.visitNoArgs(opcode, offset, 1, Type.LONG);
+                    return 1;
+                }
+                case ByteOps.I2F:
+                case ByteOps.L2F:
+                case ByteOps.D2F: {
+                    visitor.visitNoArgs(opcode, offset, 1, Type.FLOAT);
+                    return 1;
+                }
+                case ByteOps.I2D:
+                case ByteOps.L2D:
+                case ByteOps.F2D: {
+                    visitor.visitNoArgs(opcode, offset, 1, Type.DOUBLE);
+                    return 1;
+                }
+                case ByteOps.L2I:
+                case ByteOps.F2I:
+                case ByteOps.D2I:
+                case ByteOps.I2B:
+                case ByteOps.I2C:
+                case ByteOps.I2S:
+                case ByteOps.LCMP:
+                case ByteOps.FCMPL:
+                case ByteOps.FCMPG:
+                case ByteOps.DCMPL:
+                case ByteOps.DCMPG:
+                case ByteOps.ARRAYLENGTH: {
+                    visitor.visitNoArgs(opcode, offset, 1, Type.INT);
+                    return 1;
+                }
+                case ByteOps.IFEQ:
+                case ByteOps.IFNE:
+                case ByteOps.IFLT:
+                case ByteOps.IFGE:
+                case ByteOps.IFGT:
+                case ByteOps.IFLE:
+                case ByteOps.IF_ICMPEQ:
+                case ByteOps.IF_ICMPNE:
+                case ByteOps.IF_ICMPLT:
+                case ByteOps.IF_ICMPGE:
+                case ByteOps.IF_ICMPGT:
+                case ByteOps.IF_ICMPLE:
+                case ByteOps.IF_ACMPEQ:
+                case ByteOps.IF_ACMPNE:
+                case ByteOps.GOTO:
+                case ByteOps.JSR:
+                case ByteOps.IFNULL:
+                case ByteOps.IFNONNULL: {
+                    int target = offset + bytes.getShort(offset + 1);
+                    visitor.visitBranch(opcode, offset, 3, target);
+                    return 3;
+                }
+                case ByteOps.RET: {
+                    int idx = bytes.getUnsignedByte(offset + 1);
+                    visitor.visitLocal(opcode, offset, 2, idx,
+                                       Type.RETURN_ADDRESS, 0);
+                    return 2;
+                }
+                case ByteOps.TABLESWITCH: {
+                    return parseTableswitch(offset, visitor);
+                }
+                case ByteOps.LOOKUPSWITCH: {
+                    return parseLookupswitch(offset, visitor);
+                }
+                case ByteOps.IRETURN: {
+                    visitor.visitNoArgs(ByteOps.IRETURN, offset, 1, Type.INT);
+                    return 1;
+                }
+                case ByteOps.LRETURN: {
+                    visitor.visitNoArgs(ByteOps.IRETURN, offset, 1,
+                                        Type.LONG);
+                    return 1;
+                }
+                case ByteOps.FRETURN: {
+                    visitor.visitNoArgs(ByteOps.IRETURN, offset, 1,
+                                        Type.FLOAT);
+                    return 1;
+                }
+                case ByteOps.DRETURN: {
+                    visitor.visitNoArgs(ByteOps.IRETURN, offset, 1,
+                                        Type.DOUBLE);
+                    return 1;
+                }
+                case ByteOps.ARETURN: {
+                    visitor.visitNoArgs(ByteOps.IRETURN, offset, 1,
+                                        Type.OBJECT);
+                    return 1;
+                }
+                case ByteOps.RETURN:
+                case ByteOps.ATHROW:
+                case ByteOps.MONITORENTER:
+                case ByteOps.MONITOREXIT: {
+                    visitor.visitNoArgs(opcode, offset, 1, Type.VOID);
+                    return 1;
+                }
+                case ByteOps.GETSTATIC:
+                case ByteOps.PUTSTATIC:
+                case ByteOps.GETFIELD:
+                case ByteOps.PUTFIELD:
+                case ByteOps.INVOKEVIRTUAL:
+                case ByteOps.INVOKESPECIAL:
+                case ByteOps.INVOKESTATIC:
+                case ByteOps.NEW:
+                case ByteOps.ANEWARRAY:
+                case ByteOps.CHECKCAST:
+                case ByteOps.INSTANCEOF: {
+                    int idx = bytes.getUnsignedShort(offset + 1);
+                    Constant cst = pool.get(idx);
+                    visitor.visitConstant(opcode, offset, 3, cst, 0);
+                    return 3;
+                }
+                case ByteOps.INVOKEINTERFACE: {
+                    int idx = bytes.getUnsignedShort(offset + 1);
+                    int count = bytes.getUnsignedByte(offset + 3);
+                    int expectZero = bytes.getUnsignedByte(offset + 4);
+                    Constant cst = pool.get(idx);
+                    visitor.visitConstant(opcode, offset, 5, cst,
+                                          count | (expectZero << 8));
+                    return 5;
+                }
+                case ByteOps.INVOKEDYNAMIC: {
+                    int idx = bytes.getUnsignedShort(offset + 1);
+                    // Skip to must-be-zero bytes at offsets 3 and 4
+                    CstInvokeDynamic cstInvokeDynamic = (CstInvokeDynamic) pool.get(idx);
+                    visitor.visitConstant(opcode, offset, 5, cstInvokeDynamic, 0);
+                    return 5;
+                }
+                case ByteOps.NEWARRAY: {
+                    return parseNewarray(offset, visitor);
+                }
+                case ByteOps.WIDE: {
+                    return parseWide(offset, visitor);
+                }
+                case ByteOps.MULTIANEWARRAY: {
+                    int idx = bytes.getUnsignedShort(offset + 1);
+                    int dimensions = bytes.getUnsignedByte(offset + 3);
+                    Constant cst = pool.get(idx);
+                    visitor.visitConstant(opcode, offset, 4, cst, dimensions);
+                    return 4;
+                }
+                case ByteOps.GOTO_W:
+                case ByteOps.JSR_W: {
+                    int target = offset + bytes.getInt(offset + 1);
+                    int newop =
+                        (opcode == ByteOps.GOTO_W) ? ByteOps.GOTO :
+                        ByteOps.JSR;
+                    visitor.visitBranch(newop, offset, 5, target);
+                    return 5;
+                }
+                default: {
+                    visitor.visitInvalid(opcode, offset, 1);
+                    return 1;
+                }
+            }
+        } catch (SimException ex) {
+            ex.addContext("...at bytecode offset " + Hex.u4(offset));
+            throw ex;
+        } catch (RuntimeException ex) {
+            SimException se = new SimException(ex);
+            se.addContext("...at bytecode offset " + Hex.u4(offset));
+            throw se;
+        }
+    }
+
+    /**
+     * Helper to deal with {@code tableswitch}.
+     *
+     * @param offset the offset to the {@code tableswitch} opcode itself
+     * @param visitor {@code non-null;} visitor to use
+     * @return instruction length, in bytes
+     */
+    private int parseTableswitch(int offset, Visitor visitor) {
+        int at = (offset + 4) & ~3; // "at" skips the padding.
+
+        // Collect the padding.
+        int padding = 0;
+        for (int i = offset + 1; i < at; i++) {
+            padding = (padding << 8) | bytes.getUnsignedByte(i);
+        }
+
+        int defaultTarget = offset + bytes.getInt(at);
+        int low = bytes.getInt(at + 4);
+        int high = bytes.getInt(at + 8);
+        int count = high - low + 1;
+        at += 12;
+
+        if (low > high) {
+            throw new SimException("low / high inversion");
+        }
+
+        SwitchList cases = new SwitchList(count);
+        for (int i = 0; i < count; i++) {
+            int target = offset + bytes.getInt(at);
+            at += 4;
+            cases.add(low + i, target);
+        }
+        cases.setDefaultTarget(defaultTarget);
+        cases.removeSuperfluousDefaults();
+        cases.setImmutable();
+
+        int length = at - offset;
+        visitor.visitSwitch(ByteOps.LOOKUPSWITCH, offset, length, cases,
+                            padding);
+
+        return length;
+    }
+
+    /**
+     * Helper to deal with {@code lookupswitch}.
+     *
+     * @param offset the offset to the {@code lookupswitch} opcode itself
+     * @param visitor {@code non-null;} visitor to use
+     * @return instruction length, in bytes
+     */
+    private int parseLookupswitch(int offset, Visitor visitor) {
+        int at = (offset + 4) & ~3; // "at" skips the padding.
+
+        // Collect the padding.
+        int padding = 0;
+        for (int i = offset + 1; i < at; i++) {
+            padding = (padding << 8) | bytes.getUnsignedByte(i);
+        }
+
+        int defaultTarget = offset + bytes.getInt(at);
+        int npairs = bytes.getInt(at + 4);
+        at += 8;
+
+        SwitchList cases = new SwitchList(npairs);
+        for (int i = 0; i < npairs; i++) {
+            int match = bytes.getInt(at);
+            int target = offset + bytes.getInt(at + 4);
+            at += 8;
+            cases.add(match, target);
+        }
+        cases.setDefaultTarget(defaultTarget);
+        cases.removeSuperfluousDefaults();
+        cases.setImmutable();
+
+        int length = at - offset;
+        visitor.visitSwitch(ByteOps.LOOKUPSWITCH, offset, length, cases,
+                            padding);
+
+        return length;
+    }
+
+    /**
+     * Helper to deal with {@code newarray}.
+     *
+     * @param offset the offset to the {@code newarray} opcode itself
+     * @param visitor {@code non-null;} visitor to use
+     * @return instruction length, in bytes
+     */
+    private int parseNewarray(int offset, Visitor visitor) {
+        int value = bytes.getUnsignedByte(offset + 1);
+        CstType type;
+        switch (value) {
+            case ByteOps.NEWARRAY_BOOLEAN: {
+                type = CstType.BOOLEAN_ARRAY;
+                break;
+            }
+            case ByteOps.NEWARRAY_CHAR: {
+                type = CstType.CHAR_ARRAY;
+                break;
+            }
+            case ByteOps.NEWARRAY_DOUBLE: {
+                type = CstType.DOUBLE_ARRAY;
+                break;
+            }
+            case ByteOps.NEWARRAY_FLOAT: {
+                type = CstType.FLOAT_ARRAY;
+                break;
+            }
+            case ByteOps.NEWARRAY_BYTE: {
+                type = CstType.BYTE_ARRAY;
+                break;
+            }
+            case ByteOps.NEWARRAY_SHORT: {
+                type = CstType.SHORT_ARRAY;
+                break;
+            }
+            case ByteOps.NEWARRAY_INT: {
+                type = CstType.INT_ARRAY;
+                break;
+            }
+            case ByteOps.NEWARRAY_LONG: {
+                type = CstType.LONG_ARRAY;
+                break;
+            }
+            default: {
+                throw new SimException("bad newarray code " +
+                        Hex.u1(value));
+            }
+        }
+
+        // Revisit the previous bytecode to find out the length of the array
+        int previousOffset = visitor.getPreviousOffset();
+        ConstantParserVisitor constantVisitor = new ConstantParserVisitor();
+        int arrayLength = 0;
+
+        /*
+         * For visitors that don't record the previous offset, -1 will be
+         * seen here
+         */
+        if (previousOffset >= 0) {
+            parseInstruction(previousOffset, constantVisitor);
+            if (constantVisitor.cst instanceof CstInteger &&
+                    constantVisitor.length + previousOffset == offset) {
+                arrayLength = constantVisitor.value;
+
+            }
+        }
+
+        /*
+         * Try to match the array initialization idiom. For example, if the
+         * subsequent code is initializing an int array, we are expecting the
+         * following pattern repeatedly:
+         *  dup
+         *  push index
+         *  push value
+         *  *astore
+         *
+         * where the index value will be incrimented sequentially from 0 up.
+         */
+        int nInit = 0;
+        int curOffset = offset+2;
+        int lastOffset = curOffset;
+        ArrayList<Constant> initVals = new ArrayList<Constant>();
+
+        if (arrayLength != 0) {
+            while (true) {
+                boolean punt = false;
+
+                // First, check if the next bytecode is dup.
+                int nextByte = bytes.getUnsignedByte(curOffset++);
+                if (nextByte != ByteOps.DUP)
+                    break;
+
+                /*
+                 * Next, check if the expected array index is pushed to
+                 * the stack.
+                 */
+                parseInstruction(curOffset, constantVisitor);
+                if (constantVisitor.length == 0 ||
+                        !(constantVisitor.cst instanceof CstInteger) ||
+                        constantVisitor.value != nInit)
+                    break;
+
+                // Next, fetch the init value and record it.
+                curOffset += constantVisitor.length;
+
+                /*
+                 * Next, find out what kind of constant is pushed onto
+                 * the stack.
+                 */
+                parseInstruction(curOffset, constantVisitor);
+                if (constantVisitor.length == 0 ||
+                        !(constantVisitor.cst instanceof CstLiteralBits))
+                    break;
+
+                curOffset += constantVisitor.length;
+                initVals.add(constantVisitor.cst);
+
+                nextByte = bytes.getUnsignedByte(curOffset++);
+                // Now, check if the value is stored to the array properly.
+                switch (value) {
+                    case ByteOps.NEWARRAY_BYTE:
+                    case ByteOps.NEWARRAY_BOOLEAN: {
+                        if (nextByte != ByteOps.BASTORE) {
+                            punt = true;
+                        }
+                        break;
+                    }
+                    case ByteOps.NEWARRAY_CHAR: {
+                        if (nextByte != ByteOps.CASTORE) {
+                            punt = true;
+                        }
+                        break;
+                    }
+                    case ByteOps.NEWARRAY_DOUBLE: {
+                        if (nextByte != ByteOps.DASTORE) {
+                            punt = true;
+                        }
+                        break;
+                    }
+                    case ByteOps.NEWARRAY_FLOAT: {
+                        if (nextByte != ByteOps.FASTORE) {
+                            punt = true;
+                        }
+                        break;
+                    }
+                    case ByteOps.NEWARRAY_SHORT: {
+                        if (nextByte != ByteOps.SASTORE) {
+                            punt = true;
+                        }
+                        break;
+                    }
+                    case ByteOps.NEWARRAY_INT: {
+                        if (nextByte != ByteOps.IASTORE) {
+                            punt = true;
+                        }
+                        break;
+                    }
+                    case ByteOps.NEWARRAY_LONG: {
+                        if (nextByte != ByteOps.LASTORE) {
+                            punt = true;
+                        }
+                        break;
+                    }
+                    default:
+                        punt = true;
+                        break;
+                }
+                if (punt) {
+                    break;
+                }
+                lastOffset = curOffset;
+                nInit++;
+            }
+        }
+
+        /*
+         * For singleton arrays it is still more economical to
+         * generate the aput.
+         */
+        if (nInit < 2 || nInit != arrayLength) {
+            visitor.visitNewarray(offset, 2, type, null);
+            return 2;
+        } else {
+            visitor.visitNewarray(offset, lastOffset - offset, type, initVals);
+            return lastOffset - offset;
+        }
+     }
+
+
+    /**
+     * Helper to deal with {@code wide}.
+     *
+     * @param offset the offset to the {@code wide} opcode itself
+     * @param visitor {@code non-null;} visitor to use
+     * @return instruction length, in bytes
+     */
+    private int parseWide(int offset, Visitor visitor) {
+        int opcode = bytes.getUnsignedByte(offset + 1);
+        int idx = bytes.getUnsignedShort(offset + 2);
+        switch (opcode) {
+            case ByteOps.ILOAD: {
+                visitor.visitLocal(ByteOps.ILOAD, offset, 4, idx,
+                                   Type.INT, 0);
+                return 4;
+            }
+            case ByteOps.LLOAD: {
+                visitor.visitLocal(ByteOps.ILOAD, offset, 4, idx,
+                                   Type.LONG, 0);
+                return 4;
+            }
+            case ByteOps.FLOAD: {
+                visitor.visitLocal(ByteOps.ILOAD, offset, 4, idx,
+                                   Type.FLOAT, 0);
+                return 4;
+            }
+            case ByteOps.DLOAD: {
+                visitor.visitLocal(ByteOps.ILOAD, offset, 4, idx,
+                                   Type.DOUBLE, 0);
+                return 4;
+            }
+            case ByteOps.ALOAD: {
+                visitor.visitLocal(ByteOps.ILOAD, offset, 4, idx,
+                                   Type.OBJECT, 0);
+                return 4;
+            }
+            case ByteOps.ISTORE: {
+                visitor.visitLocal(ByteOps.ISTORE, offset, 4, idx,
+                                   Type.INT, 0);
+                return 4;
+            }
+            case ByteOps.LSTORE: {
+                visitor.visitLocal(ByteOps.ISTORE, offset, 4, idx,
+                                   Type.LONG, 0);
+                return 4;
+            }
+            case ByteOps.FSTORE: {
+                visitor.visitLocal(ByteOps.ISTORE, offset, 4, idx,
+                                   Type.FLOAT, 0);
+                return 4;
+            }
+            case ByteOps.DSTORE: {
+                visitor.visitLocal(ByteOps.ISTORE, offset, 4, idx,
+                                   Type.DOUBLE, 0);
+                return 4;
+            }
+            case ByteOps.ASTORE: {
+                visitor.visitLocal(ByteOps.ISTORE, offset, 4, idx,
+                                   Type.OBJECT, 0);
+                return 4;
+            }
+            case ByteOps.RET: {
+                visitor.visitLocal(opcode, offset, 4, idx,
+                                   Type.RETURN_ADDRESS, 0);
+                return 4;
+            }
+            case ByteOps.IINC: {
+                int value = bytes.getShort(offset + 4);
+                visitor.visitLocal(opcode, offset, 6, idx,
+                                   Type.INT, value);
+                return 6;
+            }
+            default: {
+                visitor.visitInvalid(ByteOps.WIDE, offset, 1);
+                return 1;
+            }
+        }
+    }
+
+    /**
+     * Instruction visitor interface.
+     */
+    public interface Visitor {
+        /**
+         * Visits an invalid instruction.
+         *
+         * @param opcode the opcode
+         * @param offset offset to the instruction
+         * @param length length of the instruction, in bytes
+         */
+        public void visitInvalid(int opcode, int offset, int length);
+
+        /**
+         * Visits an instruction which has no inline arguments
+         * (implicit or explicit).
+         *
+         * @param opcode the opcode
+         * @param offset offset to the instruction
+         * @param length length of the instruction, in bytes
+         * @param type {@code non-null;} type the instruction operates on
+         */
+        public void visitNoArgs(int opcode, int offset, int length,
+                Type type);
+
+        /**
+         * Visits an instruction which has a local variable index argument.
+         *
+         * @param opcode the opcode
+         * @param offset offset to the instruction
+         * @param length length of the instruction, in bytes
+         * @param idx the local variable index
+         * @param type {@code non-null;} the type of the accessed value
+         * @param value additional literal integer argument, if salient (i.e.,
+         * for {@code iinc})
+         */
+        public void visitLocal(int opcode, int offset, int length,
+                int idx, Type type, int value);
+
+        /**
+         * Visits an instruction which has a (possibly synthetic)
+         * constant argument, and possibly also an
+         * additional literal integer argument. In the case of
+         * {@code multianewarray}, the argument is the count of
+         * dimensions. In the case of {@code invokeinterface},
+         * the argument is the parameter count or'ed with the
+         * should-be-zero value left-shifted by 8. In the case of entries
+         * of type {@code int}, the {@code value} field always
+         * holds the raw value (for convenience of clients).
+         *
+         * <p><b>Note:</b> In order to avoid giving it a barely-useful
+         * visitor all its own, {@code newarray} also uses this
+         * form, passing {@code value} as the array type code and
+         * {@code cst} as a {@link CstType} instance
+         * corresponding to the array type.</p>
+         *
+         * @param opcode the opcode
+         * @param offset offset to the instruction
+         * @param length length of the instruction, in bytes
+         * @param cst {@code non-null;} the constant
+         * @param value additional literal integer argument, if salient
+         * (ignore if not)
+         */
+        public void visitConstant(int opcode, int offset, int length,
+                Constant cst, int value);
+
+        /**
+         * Visits an instruction which has a branch target argument.
+         *
+         * @param opcode the opcode
+         * @param offset offset to the instruction
+         * @param length length of the instruction, in bytes
+         * @param target the absolute (not relative) branch target
+         */
+        public void visitBranch(int opcode, int offset, int length,
+                int target);
+
+        /**
+         * Visits a switch instruction.
+         *
+         * @param opcode the opcode
+         * @param offset offset to the instruction
+         * @param length length of the instruction, in bytes
+         * @param cases {@code non-null;} list of (value, target)
+         * pairs, plus the default target
+         * @param padding the bytes found in the padding area (if any),
+         * packed
+         */
+        public void visitSwitch(int opcode, int offset, int length,
+                SwitchList cases, int padding);
+
+        /**
+         * Visits a newarray instruction.
+         *
+         * @param offset   offset to the instruction
+         * @param length   length of the instruction, in bytes
+         * @param type {@code non-null;} the type of the array
+         * @param initVals {@code non-null;} list of bytecode offsets
+         * for init values
+         */
+        public void visitNewarray(int offset, int length, CstType type,
+                ArrayList<Constant> initVals);
+
+        /**
+         * Set previous bytecode offset
+         * @param offset    offset of the previous fully parsed bytecode
+         */
+        public void setPreviousOffset(int offset);
+
+        /**
+         * Get previous bytecode offset
+         * @return return the recored offset of the previous bytecode
+         */
+        public int getPreviousOffset();
+    }
+
+    /**
+     * Base implementation of {@link Visitor}, which has empty method
+     * bodies for all methods.
+     */
+    public static class BaseVisitor implements Visitor {
+
+        /** offset of the previously parsed bytecode */
+        private int previousOffset;
+
+        BaseVisitor() {
+            previousOffset = -1;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitInvalid(int opcode, int offset, int length) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitNoArgs(int opcode, int offset, int length,
+                Type type) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitLocal(int opcode, int offset, int length,
+                int idx, Type type, int value) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitConstant(int opcode, int offset, int length,
+                Constant cst, int value) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitBranch(int opcode, int offset, int length,
+                int target) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitSwitch(int opcode, int offset, int length,
+                SwitchList cases, int padding) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitNewarray(int offset, int length, CstType type,
+                ArrayList<Constant> initValues) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void setPreviousOffset(int offset) {
+            previousOffset = offset;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int getPreviousOffset() {
+            return previousOffset;
+        }
+    }
+
+    /**
+     * Implementation of {@link Visitor}, which just pays attention
+     * to constant values.
+     */
+    class ConstantParserVisitor extends BaseVisitor {
+        Constant cst;
+        int length;
+        int value;
+
+        /** Empty constructor */
+        ConstantParserVisitor() {
+        }
+
+        private void clear() {
+            length = 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitInvalid(int opcode, int offset, int length) {
+            clear();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitNoArgs(int opcode, int offset, int length,
+                Type type) {
+            clear();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitLocal(int opcode, int offset, int length,
+                int idx, Type type, int value) {
+            clear();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitConstant(int opcode, int offset, int length,
+                Constant cst, int value) {
+            this.cst = cst;
+            this.length = length;
+            this.value = value;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitBranch(int opcode, int offset, int length,
+                int target) {
+            clear();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitSwitch(int opcode, int offset, int length,
+                SwitchList cases, int padding) {
+            clear();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitNewarray(int offset, int length, CstType type,
+                ArrayList<Constant> initVals) {
+            clear();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void setPreviousOffset(int offset) {
+            // Intentionally left empty
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int getPreviousOffset() {
+            // Intentionally left empty
+            return -1;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/ConcreteMethod.java b/dx/src/com/android/dx/cf/code/ConcreteMethod.java
new file mode 100644
index 0000000..b544add
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/ConcreteMethod.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.cf.attrib.AttCode;
+import com.android.dx.cf.attrib.AttLineNumberTable;
+import com.android.dx.cf.attrib.AttLocalVariableTable;
+import com.android.dx.cf.attrib.AttLocalVariableTypeTable;
+import com.android.dx.cf.iface.AttributeList;
+import com.android.dx.cf.iface.ClassFile;
+import com.android.dx.cf.iface.Method;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+
+/**
+ * Container for all the giblets that make up a concrete Java bytecode method.
+ * It implements {@link Method}, so it provides all the original access
+ * (by delegation), but it also constructs and keeps useful versions of
+ * stuff extracted from the method's {@code Code} attribute.
+ */
+public final class ConcreteMethod implements Method {
+    /** {@code non-null;} method being wrapped */
+    private final Method method;
+
+    /** {@code non-null;} the {@code ClassFile} the method belongs to. */
+    private final ClassFile classFile;
+
+    /** {@code non-null;} the code attribute */
+    private final AttCode attCode;
+
+    /** {@code non-null;} line number list */
+    private final LineNumberList lineNumbers;
+
+    /** {@code non-null;} local variable list */
+    private final LocalVariableList localVariables;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param method {@code non-null;} the method to be based on
+     * @param classFile {@code non-null;} the class file that contains this method
+     * @param keepLines whether to keep the line number information
+     * (if any)
+     * @param keepLocals whether to keep the local variable
+     * information (if any)
+     */
+    public ConcreteMethod(Method method, ClassFile classFile,
+            boolean keepLines, boolean keepLocals) {
+        this.method = method;
+        this.classFile = classFile;
+
+        AttributeList attribs = method.getAttributes();
+        this.attCode = (AttCode) attribs.findFirst(AttCode.ATTRIBUTE_NAME);
+
+        AttributeList codeAttribs = attCode.getAttributes();
+
+        /*
+         * Combine all LineNumberTable attributes into one, with the
+         * combined result saved into the instance. The following code
+         * isn't particularly efficient for doing merges, but as far
+         * as I know, this situation rarely occurs "in the
+         * wild," so there's not much point in optimizing for it.
+         */
+        LineNumberList lnl = LineNumberList.EMPTY;
+        if (keepLines) {
+            for (AttLineNumberTable lnt = (AttLineNumberTable)
+                     codeAttribs.findFirst(AttLineNumberTable.ATTRIBUTE_NAME);
+                 lnt != null;
+                 lnt = (AttLineNumberTable) codeAttribs.findNext(lnt)) {
+                lnl = LineNumberList.concat(lnl, lnt.getLineNumbers());
+            }
+        }
+        this.lineNumbers = lnl;
+
+        LocalVariableList lvl = LocalVariableList.EMPTY;
+        if (keepLocals) {
+            /*
+             * Do likewise (and with the same caveat) for
+             * LocalVariableTable and LocalVariableTypeTable attributes.
+             * This combines both of these kinds of attribute into a
+             * single LocalVariableList.
+             */
+            for (AttLocalVariableTable lvt = (AttLocalVariableTable)
+                     codeAttribs.findFirst(
+                             AttLocalVariableTable.ATTRIBUTE_NAME);
+                 lvt != null;
+                 lvt = (AttLocalVariableTable) codeAttribs.findNext(lvt)) {
+
+                lvl = LocalVariableList.concat(lvl, lvt.getLocalVariables());
+            }
+
+            LocalVariableList typeList = LocalVariableList.EMPTY;
+            for (AttLocalVariableTypeTable lvtt = (AttLocalVariableTypeTable)
+                     codeAttribs.findFirst(
+                             AttLocalVariableTypeTable.ATTRIBUTE_NAME);
+                 lvtt != null;
+                 lvtt = (AttLocalVariableTypeTable) codeAttribs.findNext(lvtt)) {
+                typeList = LocalVariableList.concat(typeList, lvtt.getLocalVariables());
+            }
+
+            if (typeList.size() != 0) {
+
+                lvl = LocalVariableList.mergeDescriptorsAndSignatures(lvl, typeList);
+            }
+        }
+        this.localVariables = lvl;
+    }
+
+
+    /**
+     * Gets the source file associated with the method if known.
+     * @return {null-ok;} the source file defining the method if known, null otherwise.
+     */
+    public CstString getSourceFile() {
+        return classFile.getSourceFile();
+    }
+
+    /**
+     * Tests whether the method is being defined on an interface.
+     * @return true if the method is being defined on an interface.
+     */
+    public final boolean isDefaultOrStaticInterfaceMethod() {
+        return (classFile.getAccessFlags() & AccessFlags.ACC_INTERFACE) != 0
+            && !getNat().isClassInit();
+    }
+
+    /**
+     * Tests whether the method is being defined is declared as static.
+     * @return true if the method is being defined is declared as static.
+     */
+    public final boolean isStaticMethod() {
+        return (getAccessFlags() & AccessFlags.ACC_STATIC) != 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CstNat getNat() {
+        return method.getNat();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CstString getName() {
+        return method.getName();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CstString getDescriptor() {
+        return method.getDescriptor();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getAccessFlags() {
+        return method.getAccessFlags();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public AttributeList getAttributes() {
+        return method.getAttributes();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CstType getDefiningClass() {
+        return method.getDefiningClass();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Prototype getEffectiveDescriptor() {
+        return method.getEffectiveDescriptor();
+    }
+
+    /**
+     * Gets the maximum stack size.
+     *
+     * @return {@code >= 0;} the maximum stack size
+     */
+    public int getMaxStack() {
+        return attCode.getMaxStack();
+    }
+
+    /**
+     * Gets the number of locals.
+     *
+     * @return {@code >= 0;} the number of locals
+     */
+    public int getMaxLocals() {
+        return attCode.getMaxLocals();
+    }
+
+    /**
+     * Gets the bytecode array.
+     *
+     * @return {@code non-null;} the bytecode array
+     */
+    public BytecodeArray getCode() {
+        return attCode.getCode();
+    }
+
+    /**
+     * Gets the exception table.
+     *
+     * @return {@code non-null;} the exception table
+     */
+    public ByteCatchList getCatches() {
+        return attCode.getCatches();
+    }
+
+    /**
+     * Gets the line number list.
+     *
+     * @return {@code non-null;} the line number list
+     */
+    public LineNumberList getLineNumbers() {
+        return lineNumbers;
+    }
+
+    /**
+     * Gets the local variable list.
+     *
+     * @return {@code non-null;} the local variable list
+     */
+    public LocalVariableList getLocalVariables() {
+        return localVariables;
+    }
+
+    /**
+     * Returns a {@link SourcePosition} instance corresponding to the
+     * given bytecode offset.
+     *
+     * @param offset {@code >= 0;} the bytecode offset
+     * @return {@code non-null;} an appropriate instance
+     */
+    public SourcePosition makeSourcePosistion(int offset) {
+        return new SourcePosition(getSourceFile(), offset,
+                                  lineNumbers.pcToLine(offset));
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/ExecutionStack.java b/dx/src/com/android/dx/cf/code/ExecutionStack.java
new file mode 100644
index 0000000..696abc8
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/ExecutionStack.java
@@ -0,0 +1,343 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.Hex;
+import com.android.dx.util.MutabilityControl;
+
+/**
+ * Representation of a Java method execution stack.
+ *
+ * <p><b>Note:</b> For the most part, the documentation for this class
+ * ignores the distinction between {@link Type} and {@link
+ * TypeBearer}.</p>
+ */
+public final class ExecutionStack extends MutabilityControl {
+    /** {@code non-null;} array of stack contents */
+    private final TypeBearer[] stack;
+
+    /**
+     * {@code non-null;} array specifying whether stack contents have entries
+     * in the local variable table
+     */
+    private final boolean[] local;
+    /**
+     * {@code >= 0;} stack pointer (points one past the end) / current stack
+     * size
+     */
+    private int stackPtr;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param maxStack {@code >= 0;} the maximum size of the stack for this
+     * instance
+     */
+    public ExecutionStack(int maxStack) {
+        super(maxStack != 0);
+        stack = new TypeBearer[maxStack];
+        local = new boolean[maxStack];
+        stackPtr = 0;
+    }
+
+    /**
+     * Makes and returns a mutable copy of this instance.
+     *
+     * @return {@code non-null;} the copy
+     */
+    public ExecutionStack copy() {
+        ExecutionStack result = new ExecutionStack(stack.length);
+
+        System.arraycopy(stack, 0, result.stack, 0, stack.length);
+        System.arraycopy(local, 0, result.local, 0, local.length);
+        result.stackPtr = stackPtr;
+
+        return result;
+    }
+
+    /**
+     * Annotates (adds context to) the given exception with information
+     * about this instance.
+     *
+     * @param ex {@code non-null;} the exception to annotate
+     */
+    public void annotate(ExceptionWithContext ex) {
+        int limit = stackPtr - 1;
+
+        for (int i = 0; i <= limit; i++) {
+            String idx = (i == limit) ? "top0" : Hex.u2(limit - i);
+
+            ex.addContext("stack[" + idx + "]: " +
+                          stackElementString(stack[i]));
+        }
+    }
+
+    /**
+     * Replaces all the occurrences of the given uninitialized type in
+     * this stack with its initialized equivalent.
+     *
+     * @param type {@code non-null;} type to replace
+     */
+    public void makeInitialized(Type type) {
+        if (stackPtr == 0) {
+            // We have to check for this before checking for immutability.
+            return;
+        }
+
+        throwIfImmutable();
+
+        Type initializedType = type.getInitializedType();
+
+        for (int i = 0; i < stackPtr; i++) {
+            if (stack[i] == type) {
+                stack[i] = initializedType;
+            }
+        }
+    }
+
+    /**
+     * Gets the maximum stack size for this instance.
+     *
+     * @return {@code >= 0;} the max stack size
+     */
+    public int getMaxStack() {
+        return stack.length;
+    }
+
+    /**
+     * Gets the current stack size.
+     *
+     * @return {@code >= 0, < getMaxStack();} the current stack size
+     */
+    public int size() {
+        return stackPtr;
+    }
+
+    /**
+     * Clears the stack. (That is, this method pops everything off.)
+     */
+    public void clear() {
+        throwIfImmutable();
+
+        for (int i = 0; i < stackPtr; i++) {
+            stack[i] = null;
+            local[i] = false;
+        }
+
+        stackPtr = 0;
+    }
+
+    /**
+     * Pushes a value of the given type onto the stack.
+     *
+     * @param type {@code non-null;} type of the value
+     * @throws SimException thrown if there is insufficient room on the
+     * stack for the value
+     */
+    public void push(TypeBearer type) {
+        throwIfImmutable();
+
+        int category;
+
+        try {
+            type = type.getFrameType();
+            category = type.getType().getCategory();
+        } catch (NullPointerException ex) {
+            // Elucidate the exception.
+            throw new NullPointerException("type == null");
+        }
+
+        if ((stackPtr + category) > stack.length) {
+            throwSimException("overflow");
+            return;
+        }
+
+        if (category == 2) {
+            stack[stackPtr] = null;
+            stackPtr++;
+        }
+
+        stack[stackPtr] = type;
+        stackPtr++;
+    }
+
+    /**
+     * Flags the next value pushed onto the stack as having local info.
+     */
+    public void setLocal() {
+        throwIfImmutable();
+
+        local[stackPtr] = true;
+    }
+
+    /**
+     * Peeks at the {@code n}th element down from the top of the stack.
+     * {@code n == 0} means to peek at the top of the stack. Note that
+     * this will return {@code null} if the indicated element is the
+     * deeper half of a category-2 value.
+     *
+     * @param n {@code >= 0;} which element to peek at
+     * @return {@code null-ok;} the type of value stored at that element
+     * @throws SimException thrown if {@code n >= size()}
+     */
+    public TypeBearer peek(int n) {
+        if (n < 0) {
+            throw new IllegalArgumentException("n < 0");
+        }
+
+        if (n >= stackPtr) {
+            return throwSimException("underflow");
+        }
+
+        return stack[stackPtr - n - 1];
+    }
+
+    /**
+     * Peeks at the {@code n}th element down from the top of the
+     * stack, returning whether or not it has local info.
+     *
+     * @param n {@code >= 0;} which element to peek at
+     * @return {@code true} if the value has local info, {@code false} otherwise
+     * @throws SimException thrown if {@code n >= size()}
+     */
+    public boolean peekLocal(int n) {
+        if (n < 0) {
+            throw new IllegalArgumentException("n < 0");
+        }
+
+        if (n >= stackPtr) {
+            throw new SimException("stack: underflow");
+        }
+
+        return local[stackPtr - n - 1];
+    }
+
+    /**
+     * Peeks at the {@code n}th element down from the top of the
+     * stack, returning the type per se, as opposed to the
+     * <i>type-bearer</i>.  This method is just a convenient shorthand
+     * for {@code peek(n).getType()}.
+     *
+     * @see #peek
+     */
+    public Type peekType(int n) {
+        return peek(n).getType();
+    }
+
+    /**
+     * Pops the top element off of the stack.
+     *
+     * @return {@code non-null;} the type formerly on the top of the stack
+     * @throws SimException thrown if the stack is empty
+     */
+    public TypeBearer pop() {
+        throwIfImmutable();
+
+        TypeBearer result = peek(0);
+
+        stack[stackPtr - 1] = null;
+        local[stackPtr - 1] = false;
+        stackPtr -= result.getType().getCategory();
+
+        return result;
+    }
+
+    /**
+     * Changes an element already on a stack. This method is useful in limited
+     * contexts, particularly when merging two instances. As such, it places
+     * the following restriction on its behavior: You may only replace
+     * values with other values of the same category.
+     *
+     * @param n {@code >= 0;} which element to change, where {@code 0} is
+     * the top element of the stack
+     * @param type {@code non-null;} type of the new value
+     * @throws SimException thrown if {@code n >= size()} or
+     * the action is otherwise prohibited
+     */
+    public void change(int n, TypeBearer type) {
+        throwIfImmutable();
+
+        try {
+            type = type.getFrameType();
+        } catch (NullPointerException ex) {
+            // Elucidate the exception.
+            throw new NullPointerException("type == null");
+        }
+
+        int idx = stackPtr - n - 1;
+        TypeBearer orig = stack[idx];
+
+        if ((orig == null) ||
+            (orig.getType().getCategory() != type.getType().getCategory())) {
+            throwSimException("incompatible substitution: " +
+                              stackElementString(orig) + " -> " +
+                              stackElementString(type));
+        }
+
+        stack[idx] = type;
+    }
+
+    /**
+     * Merges this stack with another stack. A new instance is returned if
+     * this merge results in a change. If no change results, this instance is
+     * returned.  See {@link Merger#mergeStack(ExecutionStack,ExecutionStack)
+     * Merger.mergeStack()}
+     *
+     * @param other {@code non-null;} a stack to merge with
+     * @return {@code non-null;} the result of the merge
+     */
+    public ExecutionStack merge(ExecutionStack other) {
+        try {
+            return Merger.mergeStack(this, other);
+        } catch (SimException ex) {
+            ex.addContext("underlay stack:");
+            this.annotate(ex);
+            ex.addContext("overlay stack:");
+            other.annotate(ex);
+            throw ex;
+        }
+    }
+
+    /**
+     * Gets the string form for a stack element. This is the same as
+     * {@code toString()} except that {@code null} is converted
+     * to {@code "<invalid>"}.
+     *
+     * @param type {@code null-ok;} the stack element
+     * @return {@code non-null;} the string form
+     */
+    private static String stackElementString(TypeBearer type) {
+        if (type == null) {
+            return "<invalid>";
+        }
+
+        return type.toString();
+    }
+
+    /**
+     * Throws a properly-formatted exception.
+     *
+     * @param msg {@code non-null;} useful message
+     * @return never (keeps compiler happy)
+     */
+    private static TypeBearer throwSimException(String msg) {
+        throw new SimException("stack: " + msg);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/Frame.java b/dx/src/com/android/dx/cf/code/Frame.java
new file mode 100644
index 0000000..cb32b92
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/Frame.java
@@ -0,0 +1,415 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.IntList;
+
+/**
+ * Representation of a Java method execution frame. A frame consists
+ * of a set of locals and a value stack, and it can be told to act on
+ * them to load and store values between them and an "arguments /
+ * results" area.
+ */
+public final class Frame {
+    /** {@code non-null;} the locals */
+    private final LocalsArray locals;
+
+    /** {@code non-null;} the stack */
+    private final ExecutionStack stack;
+
+    /** {@code null-ok;} stack of labels of subroutines that this block is nested in */
+    private final IntList subroutines;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param locals {@code non-null;} the locals array to use
+     * @param stack {@code non-null;} the execution stack to use
+     */
+    private Frame(LocalsArray locals, ExecutionStack stack) {
+        this(locals, stack, IntList.EMPTY);
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param locals {@code non-null;} the locals array to use
+     * @param stack {@code non-null;} the execution stack to use
+     * @param subroutines {@code non-null;} list of subroutine start labels for
+     * subroutines this frame is nested in
+     */
+    private Frame(LocalsArray locals,
+            ExecutionStack stack, IntList subroutines) {
+        if (locals == null) {
+            throw new NullPointerException("locals == null");
+        }
+
+        if (stack == null) {
+            throw new NullPointerException("stack == null");
+        }
+
+        subroutines.throwIfMutable();
+
+        this.locals = locals;
+        this.stack = stack;
+        this.subroutines = subroutines;
+    }
+
+    /**
+     * Constructs an instance. The locals array initially consists of
+     * all-uninitialized values (represented as {@code null}s) and
+     * the stack starts out empty.
+     *
+     * @param maxLocals {@code >= 0;} the maximum number of locals this instance
+     * can refer to
+     * @param maxStack {@code >= 0;} the maximum size of the stack for this
+     * instance
+     */
+    public Frame(int maxLocals, int maxStack) {
+        this(new OneLocalsArray(maxLocals), new ExecutionStack(maxStack));
+    }
+
+    /**
+     * Makes and returns a mutable copy of this instance. The copy
+     * contains copies of the locals and stack (that is, it doesn't
+     * share them with the original).
+     *
+     * @return {@code non-null;} the copy
+     */
+    public Frame copy() {
+        return new Frame(locals.copy(), stack.copy(), subroutines);
+    }
+
+    /**
+     * Makes this instance immutable.
+     */
+    public void setImmutable() {
+        locals.setImmutable();
+        stack.setImmutable();
+        // "subroutines" is always immutable
+    }
+
+    /**
+     * Replaces all the occurrences of the given uninitialized type in
+     * this frame with its initialized equivalent.
+     *
+     * @param type {@code non-null;} type to replace
+     */
+    public void makeInitialized(Type type) {
+        locals.makeInitialized(type);
+        stack.makeInitialized(type);
+    }
+
+    /**
+     * Gets the locals array for this instance.
+     *
+     * @return {@code non-null;} the locals array
+     */
+    public LocalsArray getLocals() {
+        return locals;
+    }
+
+    /**
+     * Gets the execution stack for this instance.
+     *
+     * @return {@code non-null;} the execution stack
+     */
+    public ExecutionStack getStack() {
+        return stack;
+    }
+
+    /**
+     * Returns the largest subroutine nesting this block may be in. An
+     * empty list is returned if this block is not in any subroutine.
+     * Subroutines are identified by the label of their start block. The
+     * list is ordered such that the deepest nesting (the actual subroutine
+     * this block is in) is the last label in the list.
+     *
+     * @return {@code non-null;} list as noted above
+     */
+    public IntList getSubroutines() {
+        return subroutines;
+    }
+
+    /**
+     * Initialize this frame with the method's parameters. Used for the first
+     * frame.
+     *
+     * @param params Type list of method parameters.
+     */
+    public void initializeWithParameters(StdTypeList params) {
+        int at = 0;
+        int sz = params.size();
+
+        for (int i = 0; i < sz; i++) {
+             Type one = params.get(i);
+             locals.set(at, one);
+             at += one.getCategory();
+        }
+    }
+
+    /**
+     * Returns a Frame instance representing the frame state that should
+     * be used when returning from a subroutine. The stack state of all
+     * subroutine invocations is identical, but the locals state may differ.
+     *
+     * @param startLabel {@code >=0;} The label of the returning subroutine's
+     * start block
+     * @param subLabel {@code >=0;} A calling label of a subroutine
+     * @return {@code null-ok;} an appropriatly-constructed instance, or null
+     * if label is not in the set
+     */
+    public Frame subFrameForLabel(int startLabel, int subLabel) {
+        LocalsArray subLocals = null;
+
+        if (locals instanceof LocalsArraySet) {
+            subLocals = ((LocalsArraySet)locals).subArrayForLabel(subLabel);
+        }
+
+        IntList newSubroutines;
+        try {
+            newSubroutines = subroutines.mutableCopy();
+
+            if (newSubroutines.pop() != startLabel) {
+                throw new RuntimeException("returning from invalid subroutine");
+            }
+            newSubroutines.setImmutable();
+        } catch (IndexOutOfBoundsException ex) {
+            throw new RuntimeException("returning from invalid subroutine");
+        } catch (NullPointerException ex) {
+            throw new NullPointerException("can't return from non-subroutine");
+        }
+
+        return (subLocals == null) ? null
+                : new Frame(subLocals, stack, newSubroutines);
+    }
+
+    /**
+     * Merges two frames. If the merged result is the same as this frame,
+     * then this instance is returned.
+     *
+     * @param other {@code non-null;} another frame
+     * @return {@code non-null;} the result of merging the two frames
+     */
+    public Frame mergeWith(Frame other) {
+        LocalsArray resultLocals;
+        ExecutionStack resultStack;
+        IntList resultSubroutines;
+
+        resultLocals = getLocals().merge(other.getLocals());
+        resultStack = getStack().merge(other.getStack());
+        resultSubroutines = mergeSubroutineLists(other.subroutines);
+
+        resultLocals = adjustLocalsForSubroutines(
+                resultLocals, resultSubroutines);
+
+        if ((resultLocals == getLocals())
+                && (resultStack == getStack())
+                && subroutines == resultSubroutines) {
+            return this;
+        }
+
+        return new Frame(resultLocals, resultStack, resultSubroutines);
+    }
+
+    /**
+     * Merges this frame's subroutine lists with another. The result
+     * is the deepest common nesting (effectively, the common prefix of the
+     * two lists).
+     *
+     * @param otherSubroutines label list of subroutine start blocks, from
+     * least-nested to most-nested.
+     * @return {@code non-null;} merged subroutine nest list as described above
+     */
+    private IntList mergeSubroutineLists(IntList otherSubroutines) {
+        if (subroutines.equals(otherSubroutines)) {
+            return subroutines;
+        }
+
+        IntList resultSubroutines = new IntList();
+
+        int szSubroutines = subroutines.size();
+        int szOthers = otherSubroutines.size();
+        for (int i = 0; i < szSubroutines && i < szOthers
+                && (subroutines.get(i) == otherSubroutines.get(i)); i++) {
+            resultSubroutines.add(i);
+        }
+
+        resultSubroutines.setImmutable();
+
+        return resultSubroutines;
+    }
+
+    /**
+     * Adjusts a locals array to account for a merged subroutines list.
+     * If a frame merge results in, effectively, a subroutine return through
+     * a throw then the current locals will be a LocalsArraySet that will
+     * need to be trimmed of all OneLocalsArray elements that relevent to
+     * the subroutine that is returning.
+     *
+     * @param locals {@code non-null;} LocalsArray from before a merge
+     * @param subroutines {@code non-null;} a label list of subroutine start blocks
+     * representing the subroutine nesting of the block being merged into.
+     * @return {@code non-null;} locals set appropriate for merge
+     */
+    private static LocalsArray adjustLocalsForSubroutines(
+            LocalsArray locals, IntList subroutines) {
+        if (! (locals instanceof LocalsArraySet)) {
+            // nothing to see here
+            return locals;
+        }
+
+        LocalsArraySet laSet = (LocalsArraySet)locals;
+
+        if (subroutines.size() == 0) {
+            /*
+             * We've merged from a subroutine context to a non-subroutine
+             * context, likely via a throw. Our successor will only need
+             * to consider the primary locals state, not the state of
+             * all possible subroutine paths.
+             */
+
+            return laSet.getPrimary();
+        }
+
+        /*
+         * It's unclear to me if the locals set needs to be trimmed here.
+         * If it does, then I believe it is all of the calling blocks
+         * in the subroutine at the end of "subroutines" passed into
+         * this method that should be removed.
+         */
+        return laSet;
+    }
+
+    /**
+     * Merges this frame with the frame of a subroutine caller at
+     * {@code predLabel}. Only called on the frame at the first
+     * block of a subroutine.
+     *
+     * @param other {@code non-null;} another frame
+     * @param subLabel label of subroutine start block
+     * @param predLabel label of calling block
+     * @return {@code non-null;} the result of merging the two frames
+     */
+    public Frame mergeWithSubroutineCaller(Frame other, int subLabel,
+            int predLabel) {
+        LocalsArray resultLocals;
+        ExecutionStack resultStack;
+
+        resultLocals = getLocals().mergeWithSubroutineCaller(
+                other.getLocals(), predLabel);
+        resultStack = getStack().merge(other.getStack());
+
+        IntList newOtherSubroutines = other.subroutines.mutableCopy();
+        newOtherSubroutines.add(subLabel);
+        newOtherSubroutines.setImmutable();
+
+        if ((resultLocals == getLocals())
+                && (resultStack == getStack())
+                && subroutines.equals(newOtherSubroutines)) {
+            return this;
+        }
+
+        IntList resultSubroutines;
+
+        if (subroutines.equals(newOtherSubroutines)) {
+            resultSubroutines = subroutines;
+        } else {
+            /*
+             * The new subroutines list should be the deepest of the two
+             * lists being merged, but the postfix of the resultant list
+             * must be equal to the shorter list.
+             */
+            IntList nonResultSubroutines;
+
+            if (subroutines.size() > newOtherSubroutines.size()) {
+                resultSubroutines = subroutines;
+                nonResultSubroutines = newOtherSubroutines;
+            } else {
+                resultSubroutines = newOtherSubroutines;
+                nonResultSubroutines = subroutines;
+            }
+
+            int szResult = resultSubroutines.size();
+            int szNonResult = nonResultSubroutines.size();
+
+            for (int i = szNonResult - 1; i >=0; i-- ) {
+                if (nonResultSubroutines.get(i)
+                        != resultSubroutines.get(
+                        i + (szResult - szNonResult))) {
+                    throw new
+                            RuntimeException("Incompatible merged subroutines");
+                }
+            }
+
+        }
+
+        return new Frame(resultLocals, resultStack, resultSubroutines);
+    }
+
+    /**
+     * Makes a frame for a subroutine start block, given that this is the
+     * ending frame of one of the subroutine's calling blocks. Subroutine
+     * calls may be nested and thus may have nested locals state, so we
+     * start with an initial state as seen by the subroutine, but keep track
+     * of the individual locals states that will be expected when the individual
+     * subroutine calls return.
+     *
+     * @param subLabel label of subroutine start block
+     * @param callerLabel {@code >=0;} label of the caller block where this frame
+     * came from.
+     * @return a new instance to begin a called subroutine.
+     */
+    public Frame makeNewSubroutineStartFrame(int subLabel, int callerLabel) {
+        IntList newSubroutines = subroutines.mutableCopy();
+        newSubroutines.add(subLabel);
+        Frame newFrame = new Frame(locals.getPrimary(), stack,
+                IntList.makeImmutable(subLabel));
+        return newFrame.mergeWithSubroutineCaller(this, subLabel, callerLabel);
+    }
+
+    /**
+     * Makes a new frame for an exception handler block invoked from this
+     * frame.
+     *
+     * @param exceptionClass exception that the handler block will handle
+     * @return new frame
+     */
+    public Frame makeExceptionHandlerStartFrame(CstType exceptionClass) {
+        ExecutionStack newStack = getStack().copy();
+
+        newStack.clear();
+        newStack.push(exceptionClass);
+
+        return new Frame(getLocals(), newStack, subroutines);
+    }
+
+    /**
+     * Annotates (adds context to) the given exception with information
+     * about this frame.
+     *
+     * @param ex {@code non-null;} the exception to annotate
+     */
+    public void annotate(ExceptionWithContext ex) {
+        locals.annotate(ex);
+        stack.annotate(ex);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/LineNumberList.java b/dx/src/com/android/dx/cf/code/LineNumberList.java
new file mode 100644
index 0000000..f54f8b5
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/LineNumberList.java
@@ -0,0 +1,184 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * List of "line number" entries, which are the contents of
+ * {@code LineNumberTable} attributes.
+ */
+public final class LineNumberList extends FixedSizeList {
+    /** {@code non-null;} zero-size instance */
+    public static final LineNumberList EMPTY = new LineNumberList(0);
+
+    /**
+     * Returns an instance which is the concatenation of the two given
+     * instances.
+     *
+     * @param list1 {@code non-null;} first instance
+     * @param list2 {@code non-null;} second instance
+     * @return {@code non-null;} combined instance
+     */
+    public static LineNumberList concat(LineNumberList list1,
+                                        LineNumberList list2) {
+        if (list1 == EMPTY) {
+            // easy case
+            return list2;
+        }
+
+        int sz1 = list1.size();
+        int sz2 = list2.size();
+        LineNumberList result = new LineNumberList(sz1 + sz2);
+
+        for (int i = 0; i < sz1; i++) {
+            result.set(i, list1.get(i));
+        }
+
+        for (int i = 0; i < sz2; i++) {
+            result.set(sz1 + i, list2.get(i));
+        }
+
+        return result;
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param count the number of elements to be in the list
+     */
+    public LineNumberList(int count) {
+        super(count);
+    }
+
+    /**
+     * Gets the indicated item.
+     *
+     * @param n {@code >= 0;} which item
+     * @return {@code null-ok;} the indicated item
+     */
+    public Item get(int n) {
+        return (Item) get0(n);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param item {@code non-null;} the item
+     */
+    public void set(int n, Item item) {
+        if (item == null) {
+            throw new NullPointerException("item == null");
+        }
+
+        set0(n, item);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param startPc {@code >= 0;} start pc of this item
+     * @param lineNumber {@code >= 0;} corresponding line number
+     */
+    public void set(int n, int startPc, int lineNumber) {
+        set0(n, new Item(startPc, lineNumber));
+    }
+
+    /**
+     * Gets the line number associated with the given address.
+     *
+     * @param pc {@code >= 0;} the address to look up
+     * @return {@code >= -1;} the associated line number, or {@code -1} if
+     * none is known
+     */
+    public int pcToLine(int pc) {
+        /*
+         * Line number entries don't have to appear in any particular
+         * order, so we have to do a linear search. TODO: If
+         * this turns out to be a bottleneck, consider sorting the
+         * list prior to use.
+         */
+        int sz = size();
+        int bestPc = -1;
+        int bestLine = -1;
+
+        for (int i = 0; i < sz; i++) {
+            Item one = get(i);
+            int onePc = one.getStartPc();
+            if ((onePc <= pc) && (onePc > bestPc)) {
+                bestPc = onePc;
+                bestLine = one.getLineNumber();
+                if (bestPc == pc) {
+                    // We can't do better than this
+                    break;
+                }
+            }
+        }
+
+        return bestLine;
+    }
+
+    /**
+     * Item in a line number table.
+     */
+    public static class Item {
+        /** {@code >= 0;} start pc of this item */
+        private final int startPc;
+
+        /** {@code >= 0;} corresponding line number */
+        private final int lineNumber;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param startPc {@code >= 0;} start pc of this item
+         * @param lineNumber {@code >= 0;} corresponding line number
+         */
+        public Item(int startPc, int lineNumber) {
+            if (startPc < 0) {
+                throw new IllegalArgumentException("startPc < 0");
+            }
+
+            if (lineNumber < 0) {
+                throw new IllegalArgumentException("lineNumber < 0");
+            }
+
+            this.startPc = startPc;
+            this.lineNumber = lineNumber;
+        }
+
+        /**
+         * Gets the start pc of this item.
+         *
+         * @return the start pc
+         */
+        public int getStartPc() {
+            return startPc;
+        }
+
+        /**
+         * Gets the line number of this item.
+         *
+         * @return the line number
+         */
+        public int getLineNumber() {
+            return lineNumber;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/LocalVariableList.java b/dx/src/com/android/dx/cf/code/LocalVariableList.java
new file mode 100644
index 0000000..4a0bae1
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/LocalVariableList.java
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * List of "local variable" entries, which are the contents of
+ * {@code LocalVariableTable} and {@code LocalVariableTypeTable}
+ * attributes, as well as combinations of the two.
+ */
+public final class LocalVariableList extends FixedSizeList {
+    /** {@code non-null;} zero-size instance */
+    public static final LocalVariableList EMPTY = new LocalVariableList(0);
+
+    /**
+     * Returns an instance which is the concatenation of the two given
+     * instances. The result is immutable.
+     *
+     * @param list1 {@code non-null;} first instance
+     * @param list2 {@code non-null;} second instance
+     * @return {@code non-null;} combined instance
+     */
+    public static LocalVariableList concat(LocalVariableList list1,
+                                           LocalVariableList list2) {
+        if (list1 == EMPTY) {
+            // easy case
+            return list2;
+        }
+
+        int sz1 = list1.size();
+        int sz2 = list2.size();
+        LocalVariableList result = new LocalVariableList(sz1 + sz2);
+
+        for (int i = 0; i < sz1; i++) {
+            result.set(i, list1.get(i));
+        }
+
+        for (int i = 0; i < sz2; i++) {
+            result.set(sz1 + i, list2.get(i));
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Returns an instance which is the result of merging the two
+     * given instances, where one instance should have only type
+     * descriptors and the other only type signatures. The merged
+     * result is identical to the one with descriptors, except that
+     * any element whose {name, index, start, length} matches an
+     * element in the signature list gets augmented with the
+     * corresponding signature. The result is immutable.
+     *
+     * @param descriptorList {@code non-null;} list with descriptors
+     * @param signatureList {@code non-null;} list with signatures
+     * @return {@code non-null;} the merged result
+     */
+    public static LocalVariableList mergeDescriptorsAndSignatures(
+            LocalVariableList descriptorList,
+            LocalVariableList signatureList) {
+        int descriptorSize = descriptorList.size();
+        LocalVariableList result = new LocalVariableList(descriptorSize);
+
+        for (int i = 0; i < descriptorSize; i++) {
+            Item item = descriptorList.get(i);
+            Item signatureItem = signatureList.itemToLocal(item);
+            if (signatureItem != null) {
+                CstString signature = signatureItem.getSignature();
+                item = item.withSignature(signature);
+            }
+            result.set(i, item);
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param count the number of elements to be in the list
+     */
+    public LocalVariableList(int count) {
+        super(count);
+    }
+
+    /**
+     * Gets the indicated item.
+     *
+     * @param n {@code >= 0;} which item
+     * @return {@code null-ok;} the indicated item
+     */
+    public Item get(int n) {
+        return (Item) get0(n);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param item {@code non-null;} the item
+     */
+    public void set(int n, Item item) {
+        if (item == null) {
+            throw new NullPointerException("item == null");
+        }
+
+        set0(n, item);
+    }
+
+    /**
+     * Sets the item at the given index.
+     *
+     * <p><b>Note:</b> At least one of {@code descriptor} or
+     * {@code signature} must be passed as non-null.</p>
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param startPc {@code >= 0;} the start pc of this variable's scope
+     * @param length {@code >= 0;} the length (in bytecodes) of this variable's
+     * scope
+     * @param name {@code non-null;} the variable's name
+     * @param descriptor {@code null-ok;} the variable's type descriptor
+     * @param signature {@code null-ok;} the variable's type signature
+     * @param index {@code >= 0;} the variable's local index
+     */
+    public void set(int n, int startPc, int length, CstString name,
+            CstString descriptor, CstString signature, int index) {
+        set0(n, new Item(startPc, length, name, descriptor, signature, index));
+    }
+
+    /**
+     * Gets the local variable information in this instance which matches
+     * the given {@link com.android.dx.cf.code.LocalVariableList.Item}
+     * in all respects but the type descriptor and signature, if any.
+     *
+     * @param item {@code non-null;} local variable information to match
+     * @return {@code null-ok;} the corresponding local variable information stored
+     * in this instance, or {@code null} if there is no matching
+     * information
+     */
+    public Item itemToLocal(Item item) {
+        int sz = size();
+
+        for (int i = 0; i < sz; i++) {
+            Item one = (Item) get0(i);
+
+            if ((one != null) && one.matchesAllButType(item)) {
+                return one;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Gets the local variable information associated with a given address
+     * and local index, if any. <b>Note:</b> In standard classfiles, a
+     * variable's start point is listed as the address of the instruction
+     * <i>just past</i> the one that sets the variable.
+     *
+     * @param pc {@code >= 0;} the address to look up
+     * @param index {@code >= 0;} the local variable index
+     * @return {@code null-ok;} the associated local variable information, or
+     * {@code null} if none is known
+     */
+    public Item pcAndIndexToLocal(int pc, int index) {
+        int sz = size();
+
+        for (int i = 0; i < sz; i++) {
+            Item one = (Item) get0(i);
+
+            if ((one != null) && one.matchesPcAndIndex(pc, index)) {
+                return one;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Item in a local variable table.
+     */
+    public static class Item {
+        /** {@code >= 0;} the start pc of this variable's scope */
+        private final int startPc;
+
+        /** {@code >= 0;} the length (in bytecodes) of this variable's scope */
+        private final int length;
+
+        /** {@code non-null;} the variable's name */
+        private final CstString name;
+
+        /** {@code null-ok;} the variable's type descriptor */
+        private final CstString descriptor;
+
+        /** {@code null-ok;} the variable's type signature */
+        private final CstString signature;
+
+        /** {@code >= 0;} the variable's local index */
+        private final int index;
+
+        /**
+         * Constructs an instance.
+         *
+         * <p><b>Note:</b> At least one of {@code descriptor} or
+         * {@code signature} must be passed as non-null.</p>
+         *
+         * @param startPc {@code >= 0;} the start pc of this variable's scope
+         * @param length {@code >= 0;} the length (in bytecodes) of this variable's
+         * scope
+         * @param name {@code non-null;} the variable's name
+         * @param descriptor {@code null-ok;} the variable's type descriptor
+         * @param signature {@code null-ok;} the variable's type signature
+         * @param index {@code >= 0;} the variable's local index
+         */
+        public Item(int startPc, int length, CstString name,
+                CstString descriptor, CstString signature, int index) {
+            if (startPc < 0) {
+                throw new IllegalArgumentException("startPc < 0");
+            }
+
+            if (length < 0) {
+                throw new IllegalArgumentException("length < 0");
+            }
+
+            if (name == null) {
+                throw new NullPointerException("name == null");
+            }
+
+            if ((descriptor == null) && (signature == null)) {
+                throw new NullPointerException(
+                        "(descriptor == null) && (signature == null)");
+            }
+
+            if (index < 0) {
+                throw new IllegalArgumentException("index < 0");
+            }
+
+            this.startPc = startPc;
+            this.length = length;
+            this.name = name;
+            this.descriptor = descriptor;
+            this.signature = signature;
+            this.index = index;
+        }
+
+        /**
+         * Gets the start pc of this variable's scope.
+         *
+         * @return {@code >= 0;} the start pc of this variable's scope
+         */
+        public int getStartPc() {
+            return startPc;
+        }
+
+        /**
+         * Gets the length (in bytecodes) of this variable's scope.
+         *
+         * @return {@code >= 0;} the length (in bytecodes) of this variable's scope
+         */
+        public int getLength() {
+            return length;
+        }
+
+        /**
+         * Gets the variable's type descriptor.
+         *
+         * @return {@code null-ok;} the variable's type descriptor
+         */
+        public CstString getDescriptor() {
+            return descriptor;
+        }
+
+        /**
+         * Gets the variable's LocalItem, a (name, signature) tuple
+         *
+         * @return {@code null-ok;} the variable's type descriptor
+         */
+        public LocalItem getLocalItem() {
+            return LocalItem.make(name, signature);
+        }
+
+        /**
+         * Gets the variable's type signature. Private because if you need this,
+         * you want getLocalItem() instead.
+         *
+         * @return {@code null-ok;} the variable's type signature
+         */
+        private CstString getSignature() {
+            return signature;
+        }
+
+        /**
+         * Gets the variable's local index.
+         *
+         * @return {@code >= 0;} the variable's local index
+         */
+        public int getIndex() {
+            return index;
+        }
+
+        /**
+         * Gets the variable's type descriptor. This is a convenient shorthand
+         * for {@code Type.intern(getDescriptor().getString())}.
+         *
+         * @return {@code non-null;} the variable's type
+         */
+        public Type getType() {
+            return Type.intern(descriptor.getString());
+        }
+
+        /**
+         * Constructs and returns an instance which is identical to this
+         * one, except that the signature is changed to the given value.
+         *
+         * @param newSignature {@code non-null;} the new signature
+         * @return {@code non-null;} an appropriately-constructed instance
+         */
+        public Item withSignature(CstString newSignature) {
+            return new Item(startPc, length, name, descriptor, newSignature,
+                    index);
+        }
+
+        /**
+         * Gets whether this instance matches (describes) the given
+         * address and index.
+         *
+         * @param pc {@code >= 0;} the address in question
+         * @param index {@code >= 0;} the local variable index in question
+         * @return {@code true} iff this instance matches {@code pc}
+         * and {@code index}
+         */
+        public boolean matchesPcAndIndex(int pc, int index) {
+            return (index == this.index) &&
+                (pc >= startPc) &&
+                (pc < (startPc + length));
+        }
+
+        /**
+         * Gets whether this instance matches (describes) the given
+         * other instance exactly in all fields except type descriptor and
+         * type signature.
+         *
+         * @param other {@code non-null;} the instance to compare to
+         * @return {@code true} iff this instance matches
+         */
+        public boolean matchesAllButType(Item other) {
+            return (startPc == other.startPc)
+                && (length == other.length)
+                && (index == other.index)
+                && name.equals(other.name);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/LocalsArray.java b/dx/src/com/android/dx/cf/code/LocalsArray.java
new file mode 100644
index 0000000..07ca96d
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/LocalsArray.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.MutabilityControl;
+import com.android.dx.util.ToHuman;
+
+/**
+ * Representation of an array of local variables, with Java semantics.
+ *
+ * <p><b>Note:</b> For the most part, the documentation for this class
+ * ignores the distinction between {@link Type} and {@link
+ * TypeBearer}.</p>
+ */
+public abstract class LocalsArray extends MutabilityControl implements ToHuman {
+
+    /**
+     * Constructs an instance, explicitly indicating the mutability.
+     *
+     * @param mutable {@code true} if this instance is mutable
+     */
+    protected LocalsArray(boolean mutable) {
+        super(mutable);
+    }
+
+    /**
+     * Makes and returns a mutable copy of this instance.
+     *
+     * @return {@code non-null;} the copy
+     */
+    public abstract LocalsArray copy();
+
+    /**
+     * Annotates (adds context to) the given exception with information
+     * about this instance.
+     *
+     * @param ex {@code non-null;} the exception to annotate
+     */
+    public abstract void annotate(ExceptionWithContext ex);
+
+    /**
+     * Replaces all the occurrences of the given uninitialized type in
+     * this array with its initialized equivalent.
+     *
+     * @param type {@code non-null;} type to replace
+     */
+    public abstract void makeInitialized(Type type);
+
+    /**
+     * Gets the maximum number of locals this instance can refer to.
+     *
+     * @return the max locals
+     */
+    public abstract int getMaxLocals();
+
+    /**
+     * Sets the type stored at the given local index. If the given type
+     * is category-2, then (a) the index must be at least two less than
+     * {@link #getMaxLocals} and (b) the next index gets invalidated
+     * by the operation. In case of either category, if the <i>previous</i>
+     * local contains a category-2 value, then it too is invalidated by
+     * this operation.
+     *
+     * @param idx {@code >= 0, < getMaxLocals();} which local
+     * @param type {@code non-null;} new type for the local at {@code idx}
+     */
+    public abstract void set(int idx, TypeBearer type);
+
+    /**
+     * Sets the type for the local indicated by the given register spec
+     * to that register spec (which includes type and optional name
+     * information). This is identical to calling
+     * {@code set(spec.getReg(), spec)}.
+     *
+     * @param spec {@code non-null;} register spec to use as the basis for the update
+     */
+    public abstract void set(RegisterSpec spec);
+
+    /**
+     * Invalidates the local at the given index.
+     *
+     * @param idx {@code >= 0, < getMaxLocals();} which local
+     */
+    public abstract void invalidate(int idx);
+
+    /**
+     * Gets the type stored at the given local index, or {@code null}
+     * if the given local is uninitialized / invalid.
+     *
+     * @param idx {@code >= 0, < getMaxLocals();} which local
+     * @return {@code null-ok;} the type of value stored in that local
+     */
+    public abstract TypeBearer getOrNull(int idx);
+
+    /**
+     * Gets the type stored at the given local index, only succeeding if
+     * the given local contains a valid type (though it is allowed to
+     * be an uninitialized instance).
+     *
+     * @param idx {@code >= 0, < getMaxLocals();} which local
+     * @return {@code non-null;} the type of value stored in that local
+     * @throws SimException thrown if {@code idx} is valid, but
+     * the contents are invalid
+     */
+    public abstract TypeBearer get(int idx);
+
+    /**
+     * Gets the type stored at the given local index, which is expected
+     * to be an initialized category-1 value.
+     *
+     * @param idx {@code >= 0, < getMaxLocals();} which local
+     * @return {@code non-null;} the type of value stored in that local
+     * @throws SimException thrown if {@code idx} is valid, but
+     * one of the following holds: (a) the local is invalid; (b) the local
+     * contains an uninitialized instance; (c) the local contains a
+     * category-2 value
+     */
+    public abstract TypeBearer getCategory1(int idx);
+
+    /**
+     * Gets the type stored at the given local index, which is expected
+     * to be a category-2 value.
+     *
+     * @param idx {@code >= 0, < getMaxLocals();} which local
+     * @return {@code non-null;} the type of value stored in that local
+     * @throws SimException thrown if {@code idx} is valid, but
+     * one of the following holds: (a) the local is invalid; (b) the local
+     * contains a category-1 value
+     */
+    public abstract TypeBearer getCategory2(int idx);
+
+    /**
+     * Merges this instance with {@code other}. If the merged result is
+     * the same as this instance, then this is returned (not a copy).
+     *
+     * @param other {@code non-null;} another LocalsArray
+     * @return {@code non-null;} the merge result, a new instance or this
+     */
+    public abstract LocalsArray merge(LocalsArray other);
+
+    /**
+     * Merges this instance with a {@code LocalsSet} from a subroutine
+     * caller. To be used when merging in the first block of a subroutine.
+     *
+     * @param other {@code other non-null;} another LocalsArray. The final locals
+     * state of a subroutine caller.
+     * @param predLabel the label of the subroutine caller block.
+     * @return {@code non-null;} the merge result, a new instance or this
+     */
+    public abstract LocalsArraySet mergeWithSubroutineCaller
+            (LocalsArray other, int predLabel);
+
+    /**
+     * Gets the locals set appropriate for the current execution context.
+     * That is, if this is a {@code OneLocalsArray} instance, then return
+     * {@code this}, otherwise return {@code LocalsArraySet}'s
+     * primary.
+     *
+     * @return locals for this execution context.
+     */
+    protected abstract OneLocalsArray getPrimary();
+
+}
diff --git a/dx/src/com/android/dx/cf/code/LocalsArraySet.java b/dx/src/com/android/dx/cf/code/LocalsArraySet.java
new file mode 100644
index 0000000..035c370
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/LocalsArraySet.java
@@ -0,0 +1,461 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+
+/**
+ * Representation of a set of local variable arrays, with Java semantics.
+ * This peculiar case is to support in-method subroutines, which can
+ * have different locals sets for each caller.
+ *
+ * <p><b>Note:</b> For the most part, the documentation for this class
+ * ignores the distinction between {@link com.android.dx.rop.type.Type} and {@link
+ * com.android.dx.rop.type.TypeBearer}.</p>
+ */
+public class LocalsArraySet extends LocalsArray {
+
+    /**
+     * The primary LocalsArray represents the locals as seen from
+     * the subroutine itself, which is the merged representation of all the
+     * individual locals states.
+     */
+    private final OneLocalsArray primary;
+
+    /**
+     * Indexed by label of caller block: the locals specific to each caller's
+     * invocation of the subroutine.
+     */
+    private final ArrayList<LocalsArray> secondaries;
+
+    /**
+     * Constructs an instance. The locals array initially consists of
+     * all-uninitialized values (represented as {@code null}s).
+     *
+     * @param maxLocals {@code >= 0;} the maximum number of locals this instance
+     * can refer to
+     */
+    public LocalsArraySet(int maxLocals) {
+        super(maxLocals != 0);
+        primary = new OneLocalsArray(maxLocals);
+        secondaries = new ArrayList();
+    }
+
+    /**
+     * Constructs an instance with the specified primary and secondaries set.
+     *
+     * @param primary {@code non-null;} primary locals to use
+     * @param secondaries {@code non-null;} secondaries set, indexed by subroutine
+     * caller label.
+     */
+    public LocalsArraySet(OneLocalsArray primary,
+            ArrayList<LocalsArray> secondaries) {
+        super(primary.getMaxLocals() > 0);
+
+        this.primary = primary;
+        this.secondaries = secondaries;
+    }
+
+    /**
+     * Constructs an instance which is a copy of another.
+     *
+     * @param toCopy {@code non-null;} instance to copy.
+     */
+    private LocalsArraySet(LocalsArraySet toCopy) {
+        super(toCopy.getMaxLocals() > 0);
+
+        primary = toCopy.primary.copy();
+        secondaries = new ArrayList(toCopy.secondaries.size());
+
+        int sz = toCopy.secondaries.size();
+        for (int i = 0; i < sz; i++) {
+            LocalsArray la = toCopy.secondaries.get(i);
+
+            if (la == null) {
+                secondaries.add(null);
+            } else {
+                secondaries.add(la.copy());
+            }
+        }
+    }
+
+
+    /** {@inheritDoc} */
+    @Override
+    public void setImmutable() {
+        primary.setImmutable();
+
+        for (LocalsArray la : secondaries) {
+            if (la != null) {
+                la.setImmutable();
+            }
+        }
+        super.setImmutable();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public LocalsArray copy() {
+        return new LocalsArraySet(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void annotate(ExceptionWithContext ex) {
+        ex.addContext("(locals array set; primary)");
+        primary.annotate(ex);
+
+        int sz = secondaries.size();
+        for (int label = 0; label < sz; label++) {
+            LocalsArray la = secondaries.get(label);
+
+            if (la != null) {
+                ex.addContext("(locals array set: primary for caller "
+                        + Hex.u2(label) + ')');
+
+                la.getPrimary().annotate(ex);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("(locals array set; primary)\n");
+
+        sb.append(getPrimary().toHuman());
+        sb.append('\n');
+
+        int sz = secondaries.size();
+        for (int label = 0; label < sz; label++) {
+            LocalsArray la = secondaries.get(label);
+
+            if (la != null) {
+                sb.append("(locals array set: primary for caller "
+                        + Hex.u2(label) + ")\n");
+
+                sb.append(la.getPrimary().toHuman());
+                sb.append('\n');
+            }
+        }
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void makeInitialized(Type type) {
+        int len = primary.getMaxLocals();
+
+        if (len == 0) {
+            // We have to check for this before checking for immutability.
+            return;
+        }
+
+        throwIfImmutable();
+
+        primary.makeInitialized(type);
+
+        for (LocalsArray la : secondaries) {
+            if (la != null) {
+                la.makeInitialized(type);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMaxLocals() {
+        return primary.getMaxLocals();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void set(int idx, TypeBearer type) {
+        throwIfImmutable();
+
+        primary.set(idx, type);
+
+        for (LocalsArray la : secondaries) {
+            if (la != null) {
+                la.set(idx, type);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void set(RegisterSpec spec) {
+        set(spec.getReg(), spec);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void invalidate(int idx) {
+        throwIfImmutable();
+
+        primary.invalidate(idx);
+
+        for (LocalsArray la : secondaries) {
+            if (la != null) {
+                la.invalidate(idx);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer getOrNull(int idx) {
+        return primary.getOrNull(idx);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer get(int idx) {
+        return primary.get(idx);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer getCategory1(int idx) {
+        return primary.getCategory1(idx);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer getCategory2(int idx) {
+        return primary.getCategory2(idx);
+    }
+
+    /**
+     * Merges this set with another {@code LocalsArraySet} instance.
+     *
+     * @param other {@code non-null;} to merge
+     * @return {@code non-null;} this instance if merge was a no-op, or
+     * new merged instance.
+     */
+    private LocalsArraySet mergeWithSet(LocalsArraySet other) {
+        OneLocalsArray newPrimary;
+        ArrayList<LocalsArray> newSecondaries;
+        boolean secondariesChanged = false;
+
+        newPrimary = primary.merge(other.getPrimary());
+
+        int sz1 = secondaries.size();
+        int sz2 = other.secondaries.size();
+        int sz = Math.max(sz1, sz2);
+        newSecondaries = new ArrayList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            LocalsArray la1 = (i < sz1 ? secondaries.get(i) : null);
+            LocalsArray la2 = (i < sz2 ? other.secondaries.get(i) : null);
+            LocalsArray resultla = null;
+
+            if (la1 == la2) {
+                resultla = la1;
+            } else if (la1 == null) {
+                resultla = la2;
+            } else if (la2 == null) {
+                resultla = la1;
+            } else {
+                try {
+                    resultla = la1.merge(la2);
+                } catch (SimException ex) {
+                    ex.addContext(
+                            "Merging locals set for caller block " + Hex.u2(i));
+                }
+            }
+
+            secondariesChanged = secondariesChanged || (la1 != resultla);
+
+            newSecondaries.add(resultla);
+        }
+
+        if ((primary == newPrimary) && ! secondariesChanged ) {
+            return this;
+        }
+
+        return new LocalsArraySet(newPrimary, newSecondaries);
+    }
+
+    /**
+     * Merges this set with a {@code OneLocalsArray} instance.
+     *
+     * @param other {@code non-null;} to merge
+     * @return {@code non-null;} this instance if merge was a no-op, or
+     * new merged instance.
+     */
+    private LocalsArraySet mergeWithOne(OneLocalsArray other) {
+        OneLocalsArray newPrimary;
+        ArrayList<LocalsArray> newSecondaries;
+        boolean secondariesChanged = false;
+
+        newPrimary = primary.merge(other.getPrimary());
+        newSecondaries = new ArrayList(secondaries.size());
+
+        int sz = secondaries.size();
+        for (int i = 0; i < sz; i++) {
+            LocalsArray la = secondaries.get(i);
+            LocalsArray resultla = null;
+
+            if (la != null) {
+                try {
+                    resultla = la.merge(other);
+                } catch (SimException ex) {
+                    ex.addContext("Merging one locals against caller block "
+                                    + Hex.u2(i));
+                }
+            }
+
+            secondariesChanged = secondariesChanged || (la != resultla);
+
+            newSecondaries.add(resultla);
+        }
+
+        if ((primary == newPrimary) && ! secondariesChanged ) {
+            return this;
+        }
+
+        return new LocalsArraySet(newPrimary, newSecondaries);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public LocalsArraySet merge(LocalsArray other) {
+        LocalsArraySet result;
+
+        try {
+            if (other instanceof LocalsArraySet) {
+                result = mergeWithSet((LocalsArraySet) other);
+            } else {
+                result = mergeWithOne((OneLocalsArray) other);
+            }
+        } catch (SimException ex) {
+            ex.addContext("underlay locals:");
+            annotate(ex);
+            ex.addContext("overlay locals:");
+            other.annotate(ex);
+            throw ex;
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Gets the {@code LocalsArray} instance for a specified subroutine
+     * caller label, or null if label has no locals associated with it.
+     *
+     * @param label {@code >= 0;} subroutine caller label
+     * @return {@code null-ok;} locals if available.
+     */
+    private LocalsArray getSecondaryForLabel(int label) {
+        if (label >= secondaries.size()) {
+            return null;
+        }
+
+        return secondaries.get(label);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public LocalsArraySet mergeWithSubroutineCaller
+            (LocalsArray other, int predLabel) {
+
+        LocalsArray mine = getSecondaryForLabel(predLabel);
+        LocalsArray newSecondary;
+        OneLocalsArray newPrimary;
+
+        newPrimary = primary.merge(other.getPrimary());
+
+        if (mine == other) {
+            newSecondary = mine;
+        } else if (mine == null) {
+            newSecondary = other;
+        } else {
+            newSecondary = mine.merge(other);
+        }
+
+        if ((newSecondary == mine) && (newPrimary == primary)) {
+            return this;
+        } else {
+            /*
+             * We're going to re-build a primary as a merge of all the
+             * secondaries.
+             */
+            newPrimary = null;
+
+            int szSecondaries = secondaries.size();
+            int sz = Math.max(predLabel + 1, szSecondaries);
+            ArrayList<LocalsArray> newSecondaries = new ArrayList(sz);
+            for (int i = 0; i < sz; i++) {
+                LocalsArray la = null;
+
+                if (i == predLabel) {
+                    /*
+                     * This LocalsArray always replaces any existing one,
+                     * since this is the result of a refined iteration.
+                     */
+                    la = newSecondary;
+                } else if (i < szSecondaries) {
+                    la = secondaries.get(i);
+                }
+
+                if (la != null) {
+                    if (newPrimary == null) {
+                        newPrimary = la.getPrimary();
+                    } else {
+                        newPrimary = newPrimary.merge(la.getPrimary());
+                    }
+                }
+
+                newSecondaries.add(la);
+            }
+
+            LocalsArraySet result
+                    = new LocalsArraySet(newPrimary, newSecondaries);
+            result.setImmutable();
+            return result;
+        }
+    }
+
+    /**
+     * Returns a LocalsArray instance representing the locals state that should
+     * be used when returning to a subroutine caller.
+     *
+     * @param subLabel {@code >= 0;} A calling label of a subroutine
+     * @return {@code null-ok;} an instance for this subroutine, or null if subroutine
+     * is not in this set.
+     */
+    public LocalsArray subArrayForLabel(int subLabel) {
+        LocalsArray result = getSecondaryForLabel(subLabel);
+        return result;
+    }
+
+    /**{@inheritDoc}*/
+    @Override
+    protected OneLocalsArray getPrimary() {
+        return primary;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/Machine.java b/dx/src/com/android/dx/cf/code/Machine.java
new file mode 100644
index 0000000..a190505
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/Machine.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.Type;
+import java.util.ArrayList;
+
+/**
+ * Interface for machines capable of executing bytecode by acting
+ * upon a {@link Frame}. A machine conceptually contains four arbitrary-value
+ * argument slots, slots for several literal-value arguments, and slots for
+ * branch target information.
+ */
+public interface Machine {
+    /**
+     * Gets the effective prototype of the method that this instance is
+     * being used for. The <i>effective</i> prototype includes an initial
+     * {@code this} argument for instance methods.
+     *
+     * @return {@code non-null;} the method prototype
+     */
+    public Prototype getPrototype();
+
+    /**
+     * Clears the regular and auxiliary arguments area.
+     */
+    public void clearArgs();
+
+    /**
+     * Pops the given number of values from the stack (of either category),
+     * and store them in the arguments area, indicating that there are now
+     * that many arguments. Also, clear the auxiliary arguments.
+     *
+     * @param frame {@code non-null;} frame to operate on
+     * @param count {@code >= 0;} number of values to pop
+     */
+    public void popArgs(Frame frame, int count);
+
+    /**
+     * Pops values from the stack of the types indicated by the given
+     * {@code Prototype} (popped in reverse of the argument
+     * order, so the first prototype argument type is for the deepest
+     * element of the stack), and store them in the arguments area,
+     * indicating that there are now that many arguments. Also, clear
+     * the auxiliary arguments.
+     *
+     * @param frame {@code non-null;} frame to operate on
+     * @param prototype {@code non-null;} prototype indicating arguments to pop
+     */
+    public void popArgs(Frame frame, Prototype prototype);
+
+    /**
+     * Pops a value from the stack of the indicated type, and store it
+     * in the arguments area, indicating that there are now that many
+     * arguments. Also, clear the auxiliary arguments.
+     *
+     * @param frame {@code non-null;} frame to operate on
+     * @param type {@code non-null;} type of the argument
+     */
+    public void popArgs(Frame frame, Type type);
+
+    /**
+     * Pops values from the stack of the indicated types (popped in
+     * reverse argument order, so the first indicated type is for the
+     * deepest element of the stack), and store them in the arguments
+     * area, indicating that there are now that many arguments. Also,
+     * clear the auxiliary arguments.
+     *
+     * @param frame {@code non-null;} frame to operate on
+     * @param type1 {@code non-null;} type of the first argument
+     * @param type2 {@code non-null;} type of the second argument
+     */
+    public void popArgs(Frame frame, Type type1, Type type2);
+
+    /**
+     * Pops values from the stack of the indicated types (popped in
+     * reverse argument order, so the first indicated type is for the
+     * deepest element of the stack), and store them in the arguments
+     * area, indicating that there are now that many arguments. Also,
+     * clear the auxiliary arguments.
+     *
+     * @param frame {@code non-null;} frame to operate on
+     * @param type1 {@code non-null;} type of the first argument
+     * @param type2 {@code non-null;} type of the second argument
+     * @param type3 {@code non-null;} type of the third argument
+     */
+    public void popArgs(Frame frame, Type type1, Type type2, Type type3);
+
+    /**
+     * Loads the local variable with the given index as the sole argument in
+     * the arguments area. Also, clear the auxiliary arguments.
+     *
+     * @param frame {@code non-null;} frame to operate on
+     * @param idx {@code >= 0;} the local variable index
+     */
+    public void localArg(Frame frame, int idx);
+
+    /**
+     * Used to specify if a loaded local variable has info in the local
+     * variable table.
+     *
+     * @param local {@code true} if local arg has info in local variable table
+     */
+    public void localInfo(boolean local);
+
+    /**
+     * Indicates that the salient type of this operation is as
+     * given. This differentiates between, for example, the various
+     * arithmetic opcodes, which, by the time they hit a
+     * {@code Machine} are collapsed to the {@code int}
+     * variant. (See {@link BytecodeArray#parseInstruction} for
+     * details.)
+     *
+     * @param type {@code non-null;} the salient type of the upcoming operation
+     */
+    public void auxType(Type type);
+
+    /**
+     * Indicates that there is an auxiliary (inline, not stack)
+     * argument of type {@code int}, with the given value.
+     *
+     * <p><b>Note:</b> Perhaps unintuitively, the stack manipulation
+     * ops (e.g., {@code dup} and {@code swap}) use this to
+     * indicate the result stack pattern with a straightforward hex
+     * encoding of the push order starting with least-significant
+     * nibbles getting pushed first). For example, an all-category-1
+     * {@code dup2_x1} sets this to {@code 0x12312}, and the
+     * other form of that op sets this to
+     * {@code 0x121}.</p>
+     *
+     * <p><b>Also Note:</b> For {@code switch*} instructions, this is
+     * used to indicate the padding value (which is only useful for
+     * verification).</p>
+     *
+     * @param value the argument value
+     */
+    public void auxIntArg(int value);
+
+    /**
+     * Indicates that there is an auxiliary (inline, not stack) object
+     * argument, with the value based on the given constant.
+     *
+     * <p><b>Note:</b> Some opcodes use both {@code int} and
+     * constant auxiliary arguments.</p>
+     *
+     * @param cst {@code non-null;} the constant containing / referencing
+     * the value
+     */
+    public void auxCstArg(Constant cst);
+
+    /**
+     * Indicates that there is an auxiliary (inline, not stack) argument
+     * indicating a branch target.
+     *
+     * @param target the argument value
+     */
+    public void auxTargetArg(int target);
+
+    /**
+     * Indicates that there is an auxiliary (inline, not stack) argument
+     * consisting of a {@code switch*} table.
+     *
+     * <p><b>Note:</b> This is generally used in conjunction with
+     * {@link #auxIntArg} (which holds the padding).</p>
+     *
+     * @param cases {@code non-null;} the list of key-target pairs, plus the default
+     * target
+     */
+    public void auxSwitchArg(SwitchList cases);
+
+    /**
+     * Indicates that there is an auxiliary (inline, not stack) argument
+     * consisting of a list of initial values for a newly created array.
+     *
+     * @param initValues {@code non-null;} the list of constant values to initialize
+     * the array
+     */
+    public void auxInitValues(ArrayList<Constant> initValues);
+
+    /**
+     * Indicates that the target of this operation is the given local.
+     *
+     * @param idx {@code >= 0;} the local variable index
+     * @param type {@code non-null;} the type of the local
+     * @param local {@code null-ok;} the name and signature of the local, if known
+     */
+    public void localTarget(int idx, Type type, LocalItem local);
+
+    /**
+     * "Runs" the indicated opcode in an appropriate way, using the arguments
+     * area as appropriate, and modifying the given frame in response.
+     *
+     * @param frame {@code non-null;} frame to operate on
+     * @param offset {@code >= 0;} byte offset in the method to the opcode being
+     * run
+     * @param opcode {@code >= 0;} the opcode to run
+     */
+    public void run(Frame frame, int offset, int opcode);
+}
diff --git a/dx/src/com/android/dx/cf/code/Merger.java b/dx/src/com/android/dx/cf/code/Merger.java
new file mode 100644
index 0000000..51c31c3
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/Merger.java
@@ -0,0 +1,305 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.Hex;
+
+/**
+ * Utility methods to merge various frame information.
+ */
+public final class Merger {
+    /**
+     * This class is uninstantiable.
+     */
+    private Merger() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Merges two locals arrays. If the merged result is the same as the first
+     * argument, then return the first argument (not a copy).
+     *
+     * @param locals1 {@code non-null;} a locals array
+     * @param locals2 {@code non-null;} another locals array
+     * @return {@code non-null;} the result of merging the two locals arrays
+     */
+    public static OneLocalsArray mergeLocals(OneLocalsArray locals1,
+                                          OneLocalsArray locals2) {
+        if (locals1 == locals2) {
+            // Easy out.
+            return locals1;
+        }
+
+        int sz = locals1.getMaxLocals();
+        OneLocalsArray result = null;
+
+        if (locals2.getMaxLocals() != sz) {
+            throw new SimException("mismatched maxLocals values");
+        }
+
+        for (int i = 0; i < sz; i++) {
+            TypeBearer tb1 = locals1.getOrNull(i);
+            TypeBearer tb2 = locals2.getOrNull(i);
+            TypeBearer resultType = mergeType(tb1, tb2);
+            if (resultType != tb1) {
+                /*
+                 * We only need to do anything when the result differs
+                 * from what is in the first array, since that's what the
+                 * result gets initialized to.
+                 */
+                if (result == null) {
+                    result = locals1.copy();
+                }
+
+                if (resultType == null) {
+                    result.invalidate(i);
+                } else {
+                    result.set(i, resultType);
+                }
+            }
+        }
+
+        if (result == null) {
+            return locals1;
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Merges two stacks. If the merged result is the same as the first
+     * argument, then return the first argument (not a copy).
+     *
+     * @param stack1 {@code non-null;} a stack
+     * @param stack2 {@code non-null;} another stack
+     * @return {@code non-null;} the result of merging the two stacks
+     */
+    public static ExecutionStack mergeStack(ExecutionStack stack1,
+                                            ExecutionStack stack2) {
+        if (stack1 == stack2) {
+            // Easy out.
+            return stack1;
+        }
+
+        int sz = stack1.size();
+        ExecutionStack result = null;
+
+        if (stack2.size() != sz) {
+            throw new SimException("mismatched stack depths");
+        }
+
+        for (int i = 0; i < sz; i++) {
+            TypeBearer tb1 = stack1.peek(i);
+            TypeBearer tb2 = stack2.peek(i);
+            TypeBearer resultType = mergeType(tb1, tb2);
+            if (resultType != tb1) {
+                /*
+                 * We only need to do anything when the result differs
+                 * from what is in the first stack, since that's what the
+                 * result gets initialized to.
+                 */
+                if (result == null) {
+                    result = stack1.copy();
+                }
+
+                try {
+                    if (resultType == null) {
+                        throw new SimException("incompatible: " + tb1 + ", " +
+                                               tb2);
+                    } else {
+                        result.change(i, resultType);
+                    }
+                } catch (SimException ex) {
+                    ex.addContext("...while merging stack[" + Hex.u2(i) + "]");
+                    throw ex;
+                }
+            }
+        }
+
+        if (result == null) {
+            return stack1;
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Merges two frame types.
+     *
+     * @param ft1 {@code non-null;} a frame type
+     * @param ft2 {@code non-null;} another frame type
+     * @return {@code non-null;} the result of merging the two types
+     */
+    public static TypeBearer mergeType(TypeBearer ft1, TypeBearer ft2) {
+        if ((ft1 == null) || ft1.equals(ft2)) {
+            return ft1;
+        } else if (ft2 == null) {
+            return null;
+        } else {
+            Type type1 = ft1.getType();
+            Type type2 = ft2.getType();
+
+            if (type1 == type2) {
+                return type1;
+            } else if (type1.isReference() && type2.isReference()) {
+                if (type1 == Type.KNOWN_NULL) {
+                    /*
+                     * A known-null merges with any other reference type to
+                     * be that reference type.
+                     */
+                    return type2;
+                } else if (type2 == Type.KNOWN_NULL) {
+                    /*
+                     * The same as above, but this time it's type2 that's
+                     * the known-null.
+                     */
+                    return type1;
+                } else if (type1.isArray() && type2.isArray()) {
+                    TypeBearer componentUnion =
+                        mergeType(type1.getComponentType(),
+                                type2.getComponentType());
+                    if (componentUnion == null) {
+                        /*
+                         * At least one of the types is a primitive type,
+                         * so the merged result is just Object.
+                         */
+                        return Type.OBJECT;
+                    }
+                    return ((Type) componentUnion).getArrayType();
+                } else {
+                    /*
+                     * All other unequal reference types get merged to be
+                     * Object in this phase. This is fine here, but it
+                     * won't be the right thing to do in the verifier.
+                     */
+                    return Type.OBJECT;
+                }
+            } else if (type1.isIntlike() && type2.isIntlike()) {
+                /*
+                 * Merging two non-identical int-like types results in
+                 * the type int.
+                 */
+                return Type.INT;
+            } else {
+                return null;
+            }
+        }
+    }
+
+    /**
+     * Returns whether the given supertype is possibly assignable from
+     * the given subtype. This takes into account primitiveness,
+     * int-likeness, known-nullness, and array dimensions, but does
+     * not assume anything about class hierarchy other than that the
+     * type {@code Object} is the supertype of all reference
+     * types and all arrays are assignable to
+     * {@code Serializable} and {@code Cloneable}.
+     *
+     * @param supertypeBearer {@code non-null;} the supertype
+     * @param subtypeBearer {@code non-null;} the subtype
+     */
+    public static boolean isPossiblyAssignableFrom(TypeBearer supertypeBearer,
+            TypeBearer subtypeBearer) {
+        Type supertype = supertypeBearer.getType();
+        Type subtype = subtypeBearer.getType();
+
+        if (supertype.equals(subtype)) {
+            // Easy out.
+            return true;
+        }
+
+        int superBt = supertype.getBasicType();
+        int subBt = subtype.getBasicType();
+
+        // Treat return types as Object for the purposes of this method.
+
+        if (superBt == Type.BT_ADDR) {
+            supertype = Type.OBJECT;
+            superBt = Type.BT_OBJECT;
+        }
+
+        if (subBt == Type.BT_ADDR) {
+            subtype = Type.OBJECT;
+            subBt = Type.BT_OBJECT;
+        }
+
+        if ((superBt != Type.BT_OBJECT) || (subBt != Type.BT_OBJECT)) {
+            /*
+             * No two distinct primitive types are assignable in this sense,
+             * unless they are both int-like.
+             */
+            return supertype.isIntlike() && subtype.isIntlike();
+        }
+
+        // At this point, we know both types are reference types.
+
+        if (supertype == Type.KNOWN_NULL) {
+            /*
+             * A known-null supertype is only assignable from another
+             * known-null (handled in the easy out at the top of the
+             * method).
+             */
+            return false;
+        } else if (subtype == Type.KNOWN_NULL) {
+            /*
+             * A known-null subtype is in fact assignable to any
+             * reference type.
+             */
+            return true;
+        } else if (supertype == Type.OBJECT) {
+            /*
+             * Object is assignable from any reference type.
+             */
+            return true;
+        } else if (supertype.isArray()) {
+            // The supertype is an array type.
+            if (! subtype.isArray()) {
+                // The subtype isn't an array, and so can't be assignable.
+                return false;
+            }
+
+            /*
+             * Strip off as many matched component types from both
+             * types as possible, and check the assignability of the
+             * results.
+             */
+            do {
+                supertype = supertype.getComponentType();
+                subtype = subtype.getComponentType();
+            } while (supertype.isArray() && subtype.isArray());
+
+            return isPossiblyAssignableFrom(supertype, subtype);
+        } else if (subtype.isArray()) {
+            /*
+             * Other than Object (handled above), array types are
+             * assignable only to Serializable and Cloneable.
+             */
+            return (supertype == Type.SERIALIZABLE) ||
+                (supertype == Type.CLONEABLE);
+        } else {
+            /*
+             * All other unequal reference types are considered at
+             * least possibly assignable.
+             */
+            return true;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/OneLocalsArray.java b/dx/src/com/android/dx/cf/code/OneLocalsArray.java
new file mode 100644
index 0000000..78657bd
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/OneLocalsArray.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of an array of local variables, with Java semantics.
+ *
+ * <p><b>Note:</b> For the most part, the documentation for this class
+ * ignores the distinction between {@link com.android.dx.rop.type.Type} and {@link
+ * com.android.dx.rop.type.TypeBearer}.</p>
+ */
+public class OneLocalsArray extends LocalsArray {
+    /** {@code non-null;} actual array */
+    private final TypeBearer[] locals;
+
+    /**
+     * Constructs an instance. The locals array initially consists of
+     * all-uninitialized values (represented as {@code null}s).
+     *
+     * @param maxLocals {@code >= 0;} the maximum number of locals this instance
+     * can refer to
+     */
+    public OneLocalsArray(int maxLocals) {
+        super(maxLocals != 0);
+        locals = new TypeBearer[maxLocals];
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public OneLocalsArray copy() {
+        OneLocalsArray result = new OneLocalsArray(locals.length);
+
+        System.arraycopy(locals, 0, result.locals, 0, locals.length);
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void annotate(ExceptionWithContext ex) {
+        for (int i = 0; i < locals.length; i++) {
+            TypeBearer type = locals[i];
+            String s = (type == null) ? "<invalid>" : type.toString();
+            ex.addContext("locals[" + Hex.u2(i) + "]: " + s);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        StringBuilder sb = new StringBuilder();
+
+        for (int i = 0; i < locals.length; i++) {
+            TypeBearer type = locals[i];
+            String s = (type == null) ? "<invalid>" : type.toString();
+            sb.append("locals[" + Hex.u2(i) + "]: " + s + "\n");
+        }
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void makeInitialized(Type type) {
+        int len = locals.length;
+
+        if (len == 0) {
+            // We have to check for this before checking for immutability.
+            return;
+        }
+
+        throwIfImmutable();
+
+        Type initializedType = type.getInitializedType();
+
+        for (int i = 0; i < len; i++) {
+            if (locals[i] == type) {
+                locals[i] = initializedType;
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMaxLocals() {
+        return locals.length;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void set(int idx, TypeBearer type) {
+        throwIfImmutable();
+
+        try {
+            type = type.getFrameType();
+        } catch (NullPointerException ex) {
+            // Elucidate the exception
+            throw new NullPointerException("type == null");
+        }
+
+        if (idx < 0) {
+            throw new IndexOutOfBoundsException("idx < 0");
+        }
+
+        // Make highest possible out-of-bounds check happen first.
+        if (type.getType().isCategory2()) {
+            locals[idx + 1] = null;
+        }
+
+        locals[idx] = type;
+
+        if (idx != 0) {
+            TypeBearer prev = locals[idx - 1];
+            if ((prev != null) && prev.getType().isCategory2()) {
+                locals[idx - 1] = null;
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void set(RegisterSpec spec) {
+        set(spec.getReg(), spec);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void invalidate(int idx) {
+        throwIfImmutable();
+        locals[idx] = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer getOrNull(int idx) {
+        return locals[idx];
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer get(int idx) {
+        TypeBearer result = locals[idx];
+
+        if (result == null) {
+            return throwSimException(idx, "invalid");
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer getCategory1(int idx) {
+        TypeBearer result = get(idx);
+        Type type = result.getType();
+
+        if (type.isUninitialized()) {
+            return throwSimException(idx, "uninitialized instance");
+        }
+
+        if (type.isCategory2()) {
+            return throwSimException(idx, "category-2");
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer getCategory2(int idx) {
+        TypeBearer result = get(idx);
+
+        if (result.getType().isCategory1()) {
+            return throwSimException(idx, "category-1");
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public LocalsArray merge(LocalsArray other) {
+        if (other instanceof OneLocalsArray) {
+            return merge((OneLocalsArray)other);
+        } else { //LocalsArraySet
+            // LocalsArraySet knows how to merge me.
+            return other.merge(this);
+        }
+    }
+
+    /**
+     * Merges this OneLocalsArray instance with another OneLocalsArray
+     * instance. A more-refined version of {@link #merge(LocalsArray) merge}
+     * which is called by that method when appropriate.
+     *
+     * @param other locals array with which to merge
+     * @return this instance if merge was a no-op, or a new instance if
+     * the merge resulted in a change.
+     */
+    public OneLocalsArray merge(OneLocalsArray other) {
+        try {
+            return Merger.mergeLocals(this, other);
+        } catch (SimException ex) {
+            ex.addContext("underlay locals:");
+            annotate(ex);
+            ex.addContext("overlay locals:");
+            other.annotate(ex);
+            throw ex;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public LocalsArraySet mergeWithSubroutineCaller
+            (LocalsArray other, int predLabel) {
+
+        LocalsArraySet result = new LocalsArraySet(getMaxLocals());
+        return result.mergeWithSubroutineCaller(other, predLabel);
+    }
+
+    /**{@inheritDoc}*/
+    @Override
+    protected OneLocalsArray getPrimary() {
+        return this;
+    }
+
+    /**
+     * Throws a properly-formatted exception.
+     *
+     * @param idx the salient local index
+     * @param msg {@code non-null;} useful message
+     * @return never (keeps compiler happy)
+     */
+    private static TypeBearer throwSimException(int idx, String msg) {
+        throw new SimException("local " + Hex.u2(idx) + ": " + msg);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/ReturnAddress.java b/dx/src/com/android/dx/cf/code/ReturnAddress.java
new file mode 100644
index 0000000..2fc1173
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/ReturnAddress.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of a subroutine return address. In Java verification,
+ * somewhat counterintuitively, the salient bit of information you need to
+ * know about a return address is the <i>start address</i> of the subroutine
+ * being returned from, not the address being returned <i>to</i>, so that's
+ * what instances of this class hang onto.
+ */
+public final class ReturnAddress implements TypeBearer {
+    /** {@code >= 0;} the start address of the subroutine being returned from */
+    private final int subroutineAddress;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param subroutineAddress {@code >= 0;} the start address of the
+     * subroutine being returned from
+     */
+    public ReturnAddress(int subroutineAddress) {
+        if (subroutineAddress < 0) {
+            throw new IllegalArgumentException("subroutineAddress < 0");
+        }
+
+        this.subroutineAddress = subroutineAddress;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return ("<addr:" + Hex.u2(subroutineAddress) + ">");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.RETURN_ADDRESS;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer getFrameType() {
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getBasicType() {
+        return Type.RETURN_ADDRESS.getBasicType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getBasicFrameType() {
+        return Type.RETURN_ADDRESS.getBasicFrameType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isConstant() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof ReturnAddress)) {
+            return false;
+        }
+
+        return subroutineAddress == ((ReturnAddress) other).subroutineAddress;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return subroutineAddress;
+    }
+
+    /**
+     * Gets the subroutine address.
+     *
+     * @return {@code >= 0;} the subroutine address
+     */
+    public int getSubroutineAddress() {
+        return subroutineAddress;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/Ropper.java b/dx/src/com/android/dx/cf/code/Ropper.java
new file mode 100644
index 0000000..ec156d6
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/Ropper.java
@@ -0,0 +1,1801 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.cf.iface.MethodList;
+import com.android.dx.dex.DexOptions;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.InsnList;
+import com.android.dx.rop.code.PlainCstInsn;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.code.ThrowingCstInsn;
+import com.android.dx.rop.code.ThrowingInsn;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.Bits;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Utility that converts a basic block list into a list of register-oriented
+ * blocks.
+ */
+public final class Ropper {
+    /** label offset for the parameter assignment block */
+    private static final int PARAM_ASSIGNMENT = -1;
+
+    /** label offset for the return block */
+    private static final int RETURN = -2;
+
+    /** label offset for the synchronized method final return block */
+    private static final int SYNCH_RETURN = -3;
+
+    /** label offset for the first synchronized method setup block */
+    private static final int SYNCH_SETUP_1 = -4;
+
+    /** label offset for the second synchronized method setup block */
+    private static final int SYNCH_SETUP_2 = -5;
+
+    /**
+     * label offset for the first synchronized method exception
+     * handler block
+     */
+    private static final int SYNCH_CATCH_1 = -6;
+
+    /**
+     * label offset for the second synchronized method exception
+     * handler block
+     */
+    private static final int SYNCH_CATCH_2 = -7;
+
+    /** number of special label offsets */
+    private static final int SPECIAL_LABEL_COUNT = 7;
+
+    /** {@code non-null;} method being converted */
+    private final ConcreteMethod method;
+
+    /** {@code non-null;} original block list */
+    private final ByteBlockList blocks;
+
+    /** max locals of the method */
+    private final int maxLocals;
+
+    /** max label (exclusive) of any original bytecode block */
+    private final int maxLabel;
+
+    /** {@code non-null;} simulation machine to use */
+    private final RopperMachine machine;
+
+    /** {@code non-null;} simulator to use */
+    private final Simulator sim;
+
+    /**
+     * {@code non-null;} sparse array mapping block labels to initial frame
+     * contents, if known
+     */
+    private final Frame[] startFrames;
+
+    /** {@code non-null;} output block list in-progress */
+    private final ArrayList<BasicBlock> result;
+
+    /**
+     * {@code non-null;} list of subroutine-nest labels
+     * (See {@link Frame#getSubroutines} associated with each result block.
+     * Parallel to {@link Ropper#result}.
+     */
+    private final ArrayList<IntList> resultSubroutines;
+
+    /**
+     * {@code non-null;} for each block (by label) that is used as an exception
+     * handler in the input, the exception handling info in Rop.
+     */
+    private final CatchInfo[] catchInfos;
+
+    /**
+     * whether an exception-handler block for a synchronized method was
+     * ever required
+     */
+    private boolean synchNeedsExceptionHandler;
+
+    /**
+     * {@code non-null;} list of subroutines indexed by label of start
+     * address */
+    private final Subroutine[] subroutines;
+
+    /** true if {@code subroutines} is non-empty */
+    private boolean hasSubroutines;
+
+    /** Allocates labels of exception handler setup blocks. */
+    private final ExceptionSetupLabelAllocator exceptionSetupLabelAllocator;
+
+    /**
+     * Keeps mapping of an input exception handler target code and how it is generated/targeted in
+     * Rop.
+     */
+    private class CatchInfo {
+        /**
+         * {@code non-null;} map of ExceptionHandlerSetup by the type they handle */
+        private final Map<Type, ExceptionHandlerSetup> setups =
+                new HashMap<Type, ExceptionHandlerSetup>();
+
+        /**
+         * Get the {@link ExceptionHandlerSetup} corresponding to the given type. The
+         * ExceptionHandlerSetup is created if this the first request for the given type.
+         *
+         * @param caughtType {@code non-null;}  the type catch by the requested setup
+         * @return {@code non-null;} the handler setup block info for the given type
+         */
+        ExceptionHandlerSetup getSetup(Type caughtType) {
+            ExceptionHandlerSetup handler = setups.get(caughtType);
+            if (handler == null) {
+                int handlerSetupLabel = exceptionSetupLabelAllocator.getNextLabel();
+                handler = new ExceptionHandlerSetup(caughtType, handlerSetupLabel);
+                setups.put(caughtType, handler);
+            }
+            return handler;
+        }
+
+        /**
+         * Get all {@link ExceptionHandlerSetup} of this handler.
+         *
+         * @return {@code non-null;}
+         */
+       Collection<ExceptionHandlerSetup> getSetups() {
+            return setups.values();
+        }
+    }
+
+    /**
+     * Keeps track of an exception handler setup.
+     */
+    private static class ExceptionHandlerSetup {
+        /**
+         * {@code non-null;} The caught type. */
+        private Type caughtType;
+        /**
+         * {@code >= 0;} The label of the exception setup block. */
+        private int label;
+
+        /**
+         * Constructs instance.
+         *
+         * @param caughtType {@code non-null;} the caught type
+         * @param label {@code >= 0;} the label
+         */
+        ExceptionHandlerSetup(Type caughtType, int label) {
+            this.caughtType = caughtType;
+            this.label = label;
+        }
+
+        /**
+         * @return {@code non-null;} the caught type
+         */
+        Type getCaughtType() {
+            return caughtType;
+        }
+
+        /**
+         * @return {@code >= 0;} the label
+         */
+        public int getLabel() {
+            return label;
+        }
+    }
+
+    /**
+     * Keeps track of subroutines that exist in java form and are inlined in
+     * Rop form.
+     */
+    private class Subroutine {
+        /** list of all blocks that jsr to this subroutine */
+        private BitSet callerBlocks;
+        /** List of all blocks that return from this subroutine */
+        private BitSet retBlocks;
+        /** first block in this subroutine */
+        private int startBlock;
+
+        /**
+         * Constructs instance.
+         *
+         * @param startBlock First block of the subroutine.
+         */
+        Subroutine(int startBlock) {
+            this.startBlock = startBlock;
+            retBlocks = new BitSet(maxLabel);
+            callerBlocks = new BitSet(maxLabel);
+            hasSubroutines = true;
+        }
+
+        /**
+         * Constructs instance.
+         *
+         * @param startBlock First block of the subroutine.
+         * @param retBlock one of the ret blocks (final blocks) of this
+         * subroutine.
+         */
+        Subroutine(int startBlock, int retBlock) {
+            this(startBlock);
+            addRetBlock(retBlock);
+        }
+
+        /**
+         * @return {@code >= 0;} the label of the subroutine's start block.
+         */
+        int getStartBlock() {
+            return startBlock;
+        }
+
+        /**
+         * Adds a label to the list of ret blocks (final blocks) for this
+         * subroutine.
+         *
+         * @param retBlock ret block label
+         */
+        void addRetBlock(int retBlock) {
+            retBlocks.set(retBlock);
+        }
+
+        /**
+         * Adds a label to the list of caller blocks for this subroutine.
+         *
+         * @param label a block that invokes this subroutine.
+         */
+        void addCallerBlock(int label) {
+            callerBlocks.set(label);
+        }
+
+        /**
+         * Generates a list of subroutine successors. Note: successor blocks
+         * could be listed more than once. This is ok, because this successor
+         * list (and the block it's associated with) will be copied and inlined
+         * before we leave the ropper. Redundent successors will result in
+         * redundent (no-op) merges.
+         *
+         * @return all currently known successors
+         * (return destinations) for that subroutine
+         */
+        IntList getSuccessors() {
+            IntList successors = new IntList(callerBlocks.size());
+
+            /*
+             * For each subroutine caller, get it's target. If the
+             * target is us, add the ret target (subroutine successor)
+             * to our list
+             */
+
+            for (int label = callerBlocks.nextSetBit(0); label >= 0;
+                 label = callerBlocks.nextSetBit(label+1)) {
+                BasicBlock subCaller = labelToBlock(label);
+                successors.add(subCaller.getSuccessors().get(0));
+            }
+
+            successors.setImmutable();
+
+            return successors;
+        }
+
+        /**
+         * Merges the specified frame into this subroutine's successors,
+         * setting {@code workSet} as appropriate. To be called with
+         * the frame of a subroutine ret block.
+         *
+         * @param frame {@code non-null;} frame from ret block to merge
+         * @param workSet {@code non-null;} workset to update
+         */
+        void mergeToSuccessors(Frame frame, int[] workSet) {
+            for (int label = callerBlocks.nextSetBit(0); label >= 0;
+                 label = callerBlocks.nextSetBit(label+1)) {
+                BasicBlock subCaller = labelToBlock(label);
+                int succLabel = subCaller.getSuccessors().get(0);
+
+                Frame subFrame = frame.subFrameForLabel(startBlock, label);
+
+                if (subFrame != null) {
+                    mergeAndWorkAsNecessary(succLabel, -1, null,
+                            subFrame, workSet);
+                } else {
+                    Bits.set(workSet, label);
+                }
+            }
+        }
+    }
+
+    /**
+     * Converts a {@link ConcreteMethod} to a {@link RopMethod}.
+     *
+     * @param method {@code non-null;} method to convert
+     * @param advice {@code non-null;} translation advice to use
+     * @param methods {@code non-null;} list of methods defined by the class
+     *     that defines {@code method}.
+     * @return {@code non-null;} the converted instance
+     */
+    public static RopMethod convert(ConcreteMethod method,
+            TranslationAdvice advice, MethodList methods, DexOptions dexOptions) {
+        try {
+            Ropper r = new Ropper(method, advice, methods, dexOptions);
+            r.doit();
+            return r.getRopMethod();
+        } catch (SimException ex) {
+            ex.addContext("...while working on method " +
+                          method.getNat().toHuman());
+            throw ex;
+        }
+    }
+
+    /**
+     * Constructs an instance. This class is not publicly instantiable; use
+     * {@link #convert}.
+     *
+     * @param method {@code non-null;} method to convert
+     * @param advice {@code non-null;} translation advice to use
+     * @param methods {@code non-null;} list of methods defined by the class
+     *     that defines {@code method}.
+     * @param dexOptions {@code non-null;} options for dex output
+     */
+    private Ropper(ConcreteMethod method, TranslationAdvice advice, MethodList methods,
+            DexOptions dexOptions) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        if (advice == null) {
+            throw new NullPointerException("advice == null");
+        }
+
+        this.method = method;
+        this.blocks = BasicBlocker.identifyBlocks(method);
+        this.maxLabel = blocks.getMaxLabel();
+        this.maxLocals = method.getMaxLocals();
+        this.machine = new RopperMachine(this, method, advice, methods);
+        this.sim = new Simulator(machine, method, dexOptions);
+        this.startFrames = new Frame[maxLabel];
+        this.subroutines = new Subroutine[maxLabel];
+
+        /*
+         * The "* 2 + 10" below is to conservatively believe that every
+         * block is an exception handler target and should also
+         * take care of enough other possible extra overhead such that
+         * the underlying array is unlikely to need resizing.
+         */
+        this.result = new ArrayList<BasicBlock>(blocks.size() * 2 + 10);
+        this.resultSubroutines =
+            new ArrayList<IntList>(blocks.size() * 2 + 10);
+
+        this.catchInfos = new CatchInfo[maxLabel];
+        this.synchNeedsExceptionHandler = false;
+
+        /*
+         * Set up the first stack frame with the right limits, but leave it
+         * empty here (to be filled in outside of the constructor).
+         */
+        startFrames[0] = new Frame(maxLocals, method.getMaxStack());
+        exceptionSetupLabelAllocator = new ExceptionSetupLabelAllocator();
+    }
+
+    /**
+     * Gets the first (lowest) register number to use as the temporary
+     * area when unwinding stack manipulation ops.
+     *
+     * @return {@code >= 0;} the first register to use
+     */
+    /*package*/ int getFirstTempStackReg() {
+        /*
+         * We use the register that is just past the deepest possible
+         * stack element, plus one if the method is synchronized to
+         * avoid overlapping with the synch register. We don't need to
+         * do anything else special at this level, since later passes
+         * will merely notice the highest register used by explicit
+         * inspection.
+         */
+        int regCount = getNormalRegCount();
+        return isSynchronized() ? regCount + 1 : regCount;
+    }
+
+    /**
+     * Gets the label for the given special-purpose block. The given label
+     * should be one of the static constants defined by this class.
+     *
+     * @param label {@code < 0;} the special label constant
+     * @return {@code >= 0;} the actual label value to use
+     */
+    private int getSpecialLabel(int label) {
+        /*
+         * The label is bitwise-complemented so that mistakes where
+         * LABEL is used instead of getSpecialLabel(LABEL) cause a
+         * failure at block construction time, since negative labels
+         * are illegal. 0..maxLabel (exclusive) are the original blocks and
+         * maxLabel..(maxLabel + method.getCatches().size()) are reserved for exception handler
+         * setup blocks (see getAvailableLabel(), exceptionSetupLabelAllocator).
+         */
+        return maxLabel + method.getCatches().size() + ~label;
+    }
+
+    /**
+     * Gets the minimum label for unreserved use.
+     *
+     * @return {@code >= 0;} the minimum label
+     */
+    private int getMinimumUnreservedLabel() {
+        /*
+         * The labels below (maxLabel + method.getCatches().size() + SPECIAL_LABEL_COUNT) are
+         * reserved for particular uses.
+         */
+
+        return maxLabel + method.getCatches().size() + SPECIAL_LABEL_COUNT;
+    }
+
+    /**
+     * Gets an unreserved and available label.
+     * Labels are distributed this way:
+     * <ul>
+     * <li>[0, maxLabel[ are the labels of the blocks directly
+     * corresponding to the input bytecode.</li>
+     * <li>[maxLabel, maxLabel + method.getCatches().size()[ are reserved for exception setup
+     * blocks.</li>
+     * <li>[maxLabel + method.getCatches().size(),
+     * maxLabel + method.getCatches().size() + SPECIAL_LABEL_COUNT[ are reserved for special blocks,
+     * ie param assignement, return and synch blocks.</li>
+     * <li>[maxLabel method.getCatches().size() + SPECIAL_LABEL_COUNT, getAvailableLabel()[ assigned
+     *  labels. Note that some
+     * of the assigned labels may not be used any more if they were assigned to a block that was
+     * deleted since.</li>
+     * </ul>
+     *
+     * @return {@code >= 0;} an available label with the guaranty that all greater labels are
+     * also available.
+     */
+    private int getAvailableLabel() {
+        int candidate = getMinimumUnreservedLabel();
+
+        for (BasicBlock bb : result) {
+            int label = bb.getLabel();
+            if (label >= candidate) {
+                candidate = label + 1;
+            }
+        }
+
+        return candidate;
+    }
+
+    /**
+     * Gets whether the method being translated is synchronized.
+     *
+     * @return whether the method being translated is synchronized
+     */
+    private boolean isSynchronized() {
+        int accessFlags = method.getAccessFlags();
+        return (accessFlags & AccessFlags.ACC_SYNCHRONIZED) != 0;
+    }
+
+    /**
+     * Gets whether the method being translated is static.
+     *
+     * @return whether the method being translated is static
+     */
+    private boolean isStatic() {
+        int accessFlags = method.getAccessFlags();
+        return (accessFlags & AccessFlags.ACC_STATIC) != 0;
+    }
+
+    /**
+     * Gets the total number of registers used for "normal" purposes (i.e.,
+     * for the straightforward translation from the original Java).
+     *
+     * @return {@code >= 0;} the total number of registers used
+     */
+    private int getNormalRegCount() {
+        return maxLocals + method.getMaxStack();
+    }
+
+    /**
+     * Gets the register spec to use to hold the object to synchronize on,
+     * for a synchronized method.
+     *
+     * @return {@code non-null;} the register spec
+     */
+    private RegisterSpec getSynchReg() {
+        /*
+         * We use the register that is just past the deepest possible
+         * stack element, with a minimum of v1 since v0 is what's
+         * always used to hold the caught exception when unwinding. We
+         * don't need to do anything else special at this level, since
+         * later passes will merely notice the highest register used
+         * by explicit inspection.
+         */
+        int reg = getNormalRegCount();
+        return RegisterSpec.make((reg < 1) ? 1 : reg, Type.OBJECT);
+    }
+
+    /**
+     * Searches {@link #result} for a block with the given label. Returns its
+     * index if found, or returns {@code -1} if there is no such block.
+     *
+     * @param label the label to look for
+     * @return {@code >= -1;} the index for the block with the given label or
+     * {@code -1} if there is no such block
+     */
+    private int labelToResultIndex(int label) {
+        int sz = result.size();
+        for (int i = 0; i < sz; i++) {
+            BasicBlock one = result.get(i);
+            if (one.getLabel() == label) {
+                return i;
+            }
+        }
+
+        return -1;
+    }
+
+    /**
+     * Searches {@link #result} for a block with the given label. Returns it if
+     * found, or throws an exception if there is no such block.
+     *
+     * @param label the label to look for
+     * @return {@code non-null;} the block with the given label
+     */
+    private BasicBlock labelToBlock(int label) {
+        int idx = labelToResultIndex(label);
+
+        if (idx < 0) {
+            throw new IllegalArgumentException("no such label " +
+                    Hex.u2(label));
+        }
+
+        return result.get(idx);
+    }
+
+    /**
+     * Adds a block to the output result.
+     *
+     * @param block {@code non-null;} the block to add
+     * @param subroutines {@code non-null;} subroutine label list
+     * as described in {@link Frame#getSubroutines}
+     */
+    private void addBlock(BasicBlock block, IntList subroutines) {
+        if (block == null) {
+            throw new NullPointerException("block == null");
+        }
+
+        result.add(block);
+        subroutines.throwIfMutable();
+        resultSubroutines.add(subroutines);
+    }
+
+    /**
+     * Adds or replace a block in the output result. If this is a
+     * replacement, then any extra blocks that got added with the
+     * original get removed as a result of calling this method.
+     *
+     * @param block {@code non-null;} the block to add or replace
+     * @param subroutines {@code non-null;} subroutine label list
+     * as described in {@link Frame#getSubroutines}
+     * @return {@code true} if the block was replaced or
+     * {@code false} if it was added for the first time
+     */
+    private boolean addOrReplaceBlock(BasicBlock block, IntList subroutines) {
+        if (block == null) {
+            throw new NullPointerException("block == null");
+        }
+
+        int idx = labelToResultIndex(block.getLabel());
+        boolean ret;
+
+        if (idx < 0) {
+            ret = false;
+        } else {
+            /*
+             * We are replacing a pre-existing block, so find any
+             * blocks that got added as part of the original and
+             * remove those too. Such blocks are (possibly indirect)
+             * successors of this block which are out of the range of
+             * normally-translated blocks.
+             */
+            removeBlockAndSpecialSuccessors(idx);
+            ret = true;
+        }
+
+        result.add(block);
+        subroutines.throwIfMutable();
+        resultSubroutines.add(subroutines);
+        return ret;
+    }
+
+    /**
+     * Adds or replaces a block in the output result. Do not delete
+     * any successors.
+     *
+     * @param block {@code non-null;} the block to add or replace
+     * @param subroutines {@code non-null;} subroutine label list
+     * as described in {@link Frame#getSubroutines}
+     * @return {@code true} if the block was replaced or
+     * {@code false} if it was added for the first time
+     */
+    private boolean addOrReplaceBlockNoDelete(BasicBlock block,
+            IntList subroutines) {
+        if (block == null) {
+            throw new NullPointerException("block == null");
+        }
+
+        int idx = labelToResultIndex(block.getLabel());
+        boolean ret;
+
+        if (idx < 0) {
+            ret = false;
+        } else {
+            result.remove(idx);
+            resultSubroutines.remove(idx);
+            ret = true;
+        }
+
+        result.add(block);
+        subroutines.throwIfMutable();
+        resultSubroutines.add(subroutines);
+        return ret;
+    }
+
+    /**
+     * Helper for {@link #addOrReplaceBlock} which recursively removes
+     * the given block and all blocks that are (direct and indirect)
+     * successors of it whose labels indicate that they are not in the
+     * normally-translated range.
+     *
+     * @param idx {@code non-null;} block to remove (etc.)
+     */
+    private void removeBlockAndSpecialSuccessors(int idx) {
+        int minLabel = getMinimumUnreservedLabel();
+        BasicBlock block = result.get(idx);
+        IntList successors = block.getSuccessors();
+        int sz = successors.size();
+
+        result.remove(idx);
+        resultSubroutines.remove(idx);
+
+        for (int i = 0; i < sz; i++) {
+            int label = successors.get(i);
+            if (label >= minLabel) {
+                idx = labelToResultIndex(label);
+                if (idx < 0) {
+                    throw new RuntimeException("Invalid label "
+                            + Hex.u2(label));
+                }
+                removeBlockAndSpecialSuccessors(idx);
+            }
+        }
+    }
+
+    /**
+     * Extracts the resulting {@link RopMethod} from the instance.
+     *
+     * @return {@code non-null;} the method object
+     */
+    private RopMethod getRopMethod() {
+
+        // Construct the final list of blocks.
+
+        int sz = result.size();
+        BasicBlockList bbl = new BasicBlockList(sz);
+        for (int i = 0; i < sz; i++) {
+            bbl.set(i, result.get(i));
+        }
+        bbl.setImmutable();
+
+        // Construct the method object to wrap it all up.
+
+        /*
+         * Note: The parameter assignment block is always the first
+         * that should be executed, hence the second argument to the
+         * constructor.
+         */
+        return new RopMethod(bbl, getSpecialLabel(PARAM_ASSIGNMENT));
+    }
+
+    /**
+     * Does the conversion.
+     */
+    private void doit() {
+        int[] workSet = Bits.makeBitSet(maxLabel);
+
+        Bits.set(workSet, 0);
+        addSetupBlocks();
+        setFirstFrame();
+
+        for (;;) {
+            int offset = Bits.findFirst(workSet, 0);
+            if (offset < 0) {
+                break;
+            }
+            Bits.clear(workSet, offset);
+            ByteBlock block = blocks.labelToBlock(offset);
+            Frame frame = startFrames[offset];
+            try {
+                processBlock(block, frame, workSet);
+            } catch (SimException ex) {
+                ex.addContext("...while working on block " + Hex.u2(offset));
+                throw ex;
+            }
+        }
+
+        addReturnBlock();
+        addSynchExceptionHandlerBlock();
+        addExceptionSetupBlocks();
+
+        if (hasSubroutines) {
+            // Subroutines are very rare, so skip this step if it's n/a
+            inlineSubroutines();
+        }
+    }
+
+    /**
+     * Sets up the first frame to contain all the incoming parameters in
+     * locals.
+     */
+    private void setFirstFrame() {
+        Prototype desc = method.getEffectiveDescriptor();
+        startFrames[0].initializeWithParameters(desc.getParameterTypes());
+        startFrames[0].setImmutable();
+    }
+
+    /**
+     * Processes the given block.
+     *
+     * @param block {@code non-null;} block to process
+     * @param frame {@code non-null;} start frame for the block
+     * @param workSet {@code non-null;} bits representing work to do,
+     * which this method may add to
+     */
+    private void processBlock(ByteBlock block, Frame frame, int[] workSet) {
+        // Prepare the list of caught exceptions for this block.
+        ByteCatchList catches = block.getCatches();
+        machine.startBlock(catches.toRopCatchList());
+
+        /*
+         * Using a copy of the given frame, simulate each instruction,
+         * calling into machine for each.
+         */
+        frame = frame.copy();
+        sim.simulate(block, frame);
+        frame.setImmutable();
+
+        int extraBlockCount = machine.getExtraBlockCount();
+        ArrayList<Insn> insns = machine.getInsns();
+        int insnSz = insns.size();
+
+        /*
+         * Merge the frame into each possible non-exceptional
+         * successor.
+         */
+
+        int catchSz = catches.size();
+        IntList successors = block.getSuccessors();
+
+        int startSuccessorIndex;
+
+        Subroutine calledSubroutine = null;
+        if (machine.hasJsr()) {
+            /*
+             * If this frame ends in a JSR, only merge our frame with
+             * the subroutine start, not the subroutine's return target.
+             */
+            startSuccessorIndex = 1;
+
+            int subroutineLabel = successors.get(1);
+
+            if (subroutines[subroutineLabel] == null) {
+                subroutines[subroutineLabel] =
+                    new Subroutine (subroutineLabel);
+            }
+
+            subroutines[subroutineLabel].addCallerBlock(block.getLabel());
+
+            calledSubroutine = subroutines[subroutineLabel];
+        } else if (machine.hasRet()) {
+            /*
+             * This block ends in a ret, which means it's the final block
+             * in some subroutine. Ultimately, this block will be copied
+             * and inlined for each call and then disposed of.
+             */
+
+            ReturnAddress ra = machine.getReturnAddress();
+            int subroutineLabel = ra.getSubroutineAddress();
+
+            if (subroutines[subroutineLabel] == null) {
+                subroutines[subroutineLabel]
+                        = new Subroutine (subroutineLabel, block.getLabel());
+            } else {
+                subroutines[subroutineLabel].addRetBlock(block.getLabel());
+            }
+
+            successors = subroutines[subroutineLabel].getSuccessors();
+            subroutines[subroutineLabel]
+                    .mergeToSuccessors(frame, workSet);
+            // Skip processing below since we just did it.
+            startSuccessorIndex = successors.size();
+        } else if (machine.wereCatchesUsed()) {
+            /*
+             * If there are catches, then the first successors
+             * (which will either be all of them or all but the last one)
+             * are catch targets.
+             */
+            startSuccessorIndex = catchSz;
+        } else {
+            startSuccessorIndex = 0;
+        }
+
+        int succSz = successors.size();
+        for (int i = startSuccessorIndex; i < succSz;
+             i++) {
+            int succ = successors.get(i);
+            try {
+                mergeAndWorkAsNecessary(succ, block.getLabel(),
+                        calledSubroutine, frame, workSet);
+            } catch (SimException ex) {
+                ex.addContext("...while merging to block " + Hex.u2(succ));
+                throw ex;
+            }
+        }
+
+        if ((succSz == 0) && machine.returns()) {
+            /*
+             * The block originally contained a return, but it has
+             * been made to instead end with a goto, and we need to
+             * tell it at this point that its sole successor is the
+             * return block. This has to happen after the merge loop
+             * above, since, at this point, the return block doesn't
+             * actually exist; it gets synthesized at the end of
+             * processing the original blocks.
+             */
+            successors = IntList.makeImmutable(getSpecialLabel(RETURN));
+            succSz = 1;
+        }
+
+        int primarySucc;
+
+        if (succSz == 0) {
+            primarySucc = -1;
+        } else {
+            primarySucc = machine.getPrimarySuccessorIndex();
+            if (primarySucc >= 0) {
+                primarySucc = successors.get(primarySucc);
+            }
+        }
+
+        /*
+         * This variable is true only when the method is synchronized and
+         * the block being processed can possibly throw an exception.
+         */
+        boolean synch = isSynchronized() && machine.canThrow();
+
+        if (synch || (catchSz != 0)) {
+            /*
+             * Deal with exception handlers: Merge an exception-catch
+             * frame into each possible exception handler, and
+             * construct a new set of successors to point at the
+             * exception handler setup blocks (which get synthesized
+             * at the very end of processing).
+             */
+            boolean catchesAny = false;
+            IntList newSucc = new IntList(succSz);
+            for (int i = 0; i < catchSz; i++) {
+                ByteCatchList.Item one = catches.get(i);
+                CstType exceptionClass = one.getExceptionClass();
+                int targ = one.getHandlerPc();
+
+                catchesAny |= (exceptionClass == CstType.OBJECT);
+
+                Frame f = frame.makeExceptionHandlerStartFrame(exceptionClass);
+
+                try {
+                    mergeAndWorkAsNecessary(targ, block.getLabel(),
+                            null, f, workSet);
+                } catch (SimException ex) {
+                    ex.addContext("...while merging exception to block " +
+                                  Hex.u2(targ));
+                    throw ex;
+                }
+
+                /*
+                 * Set up the exception handler type.
+                 */
+                CatchInfo handlers = catchInfos[targ];
+                if (handlers == null) {
+                    handlers = new CatchInfo();
+                    catchInfos[targ] = handlers;
+                }
+                ExceptionHandlerSetup handler = handlers.getSetup(exceptionClass.getClassType());
+
+                /*
+                 * The synthesized exception setup block will have the label given by handler.
+                 */
+                newSucc.add(handler.getLabel());
+            }
+
+            if (synch && !catchesAny) {
+                /*
+                 * The method is synchronized and this block doesn't
+                 * already have a catch-all handler, so add one to the
+                 * end, both in the successors and in the throwing
+                 * instruction(s) at the end of the block (which is where
+                 * the caught classes live).
+                 */
+                newSucc.add(getSpecialLabel(SYNCH_CATCH_1));
+                synchNeedsExceptionHandler = true;
+
+                for (int i = insnSz - extraBlockCount - 1; i < insnSz; i++) {
+                    Insn insn = insns.get(i);
+                    if (insn.canThrow()) {
+                        insn = insn.withAddedCatch(Type.OBJECT);
+                        insns.set(i, insn);
+                    }
+                }
+            }
+
+            if (primarySucc >= 0) {
+                newSucc.add(primarySucc);
+            }
+
+            newSucc.setImmutable();
+            successors = newSucc;
+        }
+
+        // Construct the final resulting block(s), and store it (them).
+
+        int primarySuccListIndex = successors.indexOf(primarySucc);
+
+        /*
+         * If there are any extra blocks, work backwards through the
+         * list of instructions, adding single-instruction blocks, and
+         * resetting the successors variables as appropriate.
+         */
+        for (/*extraBlockCount*/; extraBlockCount > 0; extraBlockCount--) {
+            /*
+             * Some of the blocks that the RopperMachine wants added
+             * are for move-result insns, and these need goto insns as well.
+             */
+            Insn extraInsn = insns.get(--insnSz);
+            boolean needsGoto
+                    = extraInsn.getOpcode().getBranchingness()
+                        == Rop.BRANCH_NONE;
+            InsnList il = new InsnList(needsGoto ? 2 : 1);
+            IntList extraBlockSuccessors = successors;
+
+            il.set(0, extraInsn);
+
+            if (needsGoto) {
+                il.set(1, new PlainInsn(Rops.GOTO,
+                        extraInsn.getPosition(), null,
+                        RegisterSpecList.EMPTY));
+                /*
+                 * Obviously, this block won't be throwing an exception
+                 * so it should only have one successor.
+                 */
+                extraBlockSuccessors = IntList.makeImmutable(primarySucc);
+            }
+            il.setImmutable();
+
+            int label = getAvailableLabel();
+            BasicBlock bb = new BasicBlock(label, il, extraBlockSuccessors,
+                    primarySucc);
+            // All of these extra blocks will be in the same subroutine
+            addBlock(bb, frame.getSubroutines());
+
+            successors = successors.mutableCopy();
+            successors.set(primarySuccListIndex, label);
+            successors.setImmutable();
+            primarySucc = label;
+        }
+
+        Insn lastInsn = (insnSz == 0) ? null : insns.get(insnSz - 1);
+
+        /*
+         * Add a goto to the end of the block if it doesn't already
+         * end with a branch, to maintain the invariant that all
+         * blocks end with a branch of some sort or other. Note that
+         * it is possible for there to be blocks for which no
+         * instructions were ever output (e.g., only consist of pop*
+         * in the original Java bytecode).
+         */
+        if ((lastInsn == null) ||
+            (lastInsn.getOpcode().getBranchingness() == Rop.BRANCH_NONE)) {
+            SourcePosition pos = (lastInsn == null) ? SourcePosition.NO_INFO :
+                lastInsn.getPosition();
+            insns.add(new PlainInsn(Rops.GOTO, pos, null,
+                                    RegisterSpecList.EMPTY));
+            insnSz++;
+        }
+
+        /*
+         * Construct a block for the remaining instructions (which in
+         * the usual case is all of them).
+         */
+
+        InsnList il = new InsnList(insnSz);
+        for (int i = 0; i < insnSz; i++) {
+            il.set(i, insns.get(i));
+        }
+        il.setImmutable();
+
+        BasicBlock bb =
+            new BasicBlock(block.getLabel(), il, successors, primarySucc);
+        addOrReplaceBlock(bb, frame.getSubroutines());
+    }
+
+    /**
+     * Helper for {@link #processBlock}, which merges frames and
+     * adds to the work set, as necessary.
+     *
+     * @param label {@code >= 0;} label to work on
+     * @param pred  predecessor label; must be {@code >= 0} when
+     * {@code label} is a subroutine start block and calledSubroutine
+     * is non-null. Otherwise, may be -1.
+     * @param calledSubroutine {@code null-ok;} a Subroutine instance if
+     * {@code label} is the first block in a subroutine.
+     * @param frame {@code non-null;} new frame for the labelled block
+     * @param workSet {@code non-null;} bits representing work to do,
+     * which this method may add to
+     */
+    private void mergeAndWorkAsNecessary(int label, int pred,
+            Subroutine calledSubroutine, Frame frame, int[] workSet) {
+        Frame existing = startFrames[label];
+        Frame merged;
+
+        if (existing != null) {
+            /*
+             * Some other block also continues at this label. Merge
+             * the frames, and re-set the bit in the work set if there
+             * was a change.
+             */
+            if (calledSubroutine != null) {
+                merged = existing.mergeWithSubroutineCaller(frame,
+                        calledSubroutine.getStartBlock(), pred);
+            } else {
+                merged = existing.mergeWith(frame);
+            }
+            if (merged != existing) {
+                startFrames[label] = merged;
+                Bits.set(workSet, label);
+            }
+        } else {
+            // This is the first time this label has been encountered.
+            if (calledSubroutine != null) {
+                startFrames[label]
+                        = frame.makeNewSubroutineStartFrame(label, pred);
+            } else {
+                startFrames[label] = frame;
+            }
+            Bits.set(workSet, label);
+        }
+    }
+
+    /**
+     * Constructs and adds the blocks that perform setup for the rest of
+     * the method. This includes a first block which merely contains
+     * assignments from parameters to the same-numbered registers and
+     * a possible second block which deals with synchronization.
+     */
+    private void addSetupBlocks() {
+        LocalVariableList localVariables = method.getLocalVariables();
+        SourcePosition pos = method.makeSourcePosistion(0);
+        Prototype desc = method.getEffectiveDescriptor();
+        StdTypeList params = desc.getParameterTypes();
+        int sz = params.size();
+        InsnList insns = new InsnList(sz + 1);
+        int at = 0;
+
+        for (int i = 0; i < sz; i++) {
+            Type one = params.get(i);
+            LocalVariableList.Item local =
+                localVariables.pcAndIndexToLocal(0, at);
+            RegisterSpec result = (local == null) ?
+                RegisterSpec.make(at, one) :
+                RegisterSpec.makeLocalOptional(at, one, local.getLocalItem());
+
+            Insn insn = new PlainCstInsn(Rops.opMoveParam(one), pos, result,
+                                         RegisterSpecList.EMPTY,
+                                         CstInteger.make(at));
+            insns.set(i, insn);
+            at += one.getCategory();
+        }
+
+        insns.set(sz, new PlainInsn(Rops.GOTO, pos, null,
+                                    RegisterSpecList.EMPTY));
+        insns.setImmutable();
+
+        boolean synch = isSynchronized();
+        int label = synch ? getSpecialLabel(SYNCH_SETUP_1) : 0;
+        BasicBlock bb =
+            new BasicBlock(getSpecialLabel(PARAM_ASSIGNMENT), insns,
+                           IntList.makeImmutable(label), label);
+        addBlock(bb, IntList.EMPTY);
+
+        if (synch) {
+            RegisterSpec synchReg = getSynchReg();
+            Insn insn;
+            if (isStatic()) {
+                insn = new ThrowingCstInsn(Rops.CONST_OBJECT, pos,
+                                           RegisterSpecList.EMPTY,
+                                           StdTypeList.EMPTY,
+                                           method.getDefiningClass());
+                insns = new InsnList(1);
+                insns.set(0, insn);
+            } else {
+                insns = new InsnList(2);
+                insn = new PlainCstInsn(Rops.MOVE_PARAM_OBJECT, pos,
+                                        synchReg, RegisterSpecList.EMPTY,
+                                        CstInteger.VALUE_0);
+                insns.set(0, insn);
+                insns.set(1, new PlainInsn(Rops.GOTO, pos, null,
+                                           RegisterSpecList.EMPTY));
+            }
+
+            int label2 = getSpecialLabel(SYNCH_SETUP_2);
+            insns.setImmutable();
+            bb = new BasicBlock(label, insns,
+                                IntList.makeImmutable(label2), label2);
+            addBlock(bb, IntList.EMPTY);
+
+            insns = new InsnList(isStatic() ? 2 : 1);
+
+            if (isStatic()) {
+                insns.set(0, new PlainInsn(Rops.opMoveResultPseudo(synchReg),
+                        pos, synchReg, RegisterSpecList.EMPTY));
+            }
+
+            insn = new ThrowingInsn(Rops.MONITOR_ENTER, pos,
+                                    RegisterSpecList.make(synchReg),
+                                    StdTypeList.EMPTY);
+            insns.set(isStatic() ? 1 :0, insn);
+            insns.setImmutable();
+            bb = new BasicBlock(label2, insns, IntList.makeImmutable(0), 0);
+            addBlock(bb, IntList.EMPTY);
+        }
+    }
+
+    /**
+     * Constructs and adds the return block, if necessary. The return
+     * block merely contains an appropriate {@code return}
+     * instruction.
+     */
+    private void addReturnBlock() {
+        Rop returnOp = machine.getReturnOp();
+
+        if (returnOp == null) {
+            /*
+             * The method being converted never returns normally, so there's
+             * no need for a return block.
+             */
+            return;
+        }
+
+        SourcePosition returnPos = machine.getReturnPosition();
+        int label = getSpecialLabel(RETURN);
+
+        if (isSynchronized()) {
+            InsnList insns = new InsnList(1);
+            Insn insn = new ThrowingInsn(Rops.MONITOR_EXIT, returnPos,
+                                         RegisterSpecList.make(getSynchReg()),
+                                         StdTypeList.EMPTY);
+            insns.set(0, insn);
+            insns.setImmutable();
+
+            int nextLabel = getSpecialLabel(SYNCH_RETURN);
+            BasicBlock bb =
+                new BasicBlock(label, insns,
+                               IntList.makeImmutable(nextLabel), nextLabel);
+            addBlock(bb, IntList.EMPTY);
+
+            label = nextLabel;
+        }
+
+        InsnList insns = new InsnList(1);
+        TypeList sourceTypes = returnOp.getSources();
+        RegisterSpecList sources;
+
+        if (sourceTypes.size() == 0) {
+            sources = RegisterSpecList.EMPTY;
+        } else {
+            RegisterSpec source = RegisterSpec.make(0, sourceTypes.getType(0));
+            sources = RegisterSpecList.make(source);
+        }
+
+        Insn insn = new PlainInsn(returnOp, returnPos, null, sources);
+        insns.set(0, insn);
+        insns.setImmutable();
+
+        BasicBlock bb = new BasicBlock(label, insns, IntList.EMPTY, -1);
+        addBlock(bb, IntList.EMPTY);
+    }
+
+    /**
+     * Constructs and adds, if necessary, the catch-all exception handler
+     * block to deal with unwinding the lock taken on entry to a synchronized
+     * method.
+     */
+    private void addSynchExceptionHandlerBlock() {
+        if (!synchNeedsExceptionHandler) {
+            /*
+             * The method being converted either isn't synchronized or
+             * can't possibly throw exceptions in its main body, so
+             * there's no need for a synchronized method exception
+             * handler.
+             */
+            return;
+        }
+
+        SourcePosition pos = method.makeSourcePosistion(0);
+        RegisterSpec exReg = RegisterSpec.make(0, Type.THROWABLE);
+        BasicBlock bb;
+        Insn insn;
+
+        InsnList insns = new InsnList(2);
+        insn = new PlainInsn(Rops.opMoveException(Type.THROWABLE), pos,
+                             exReg, RegisterSpecList.EMPTY);
+        insns.set(0, insn);
+        insn = new ThrowingInsn(Rops.MONITOR_EXIT, pos,
+                                RegisterSpecList.make(getSynchReg()),
+                                StdTypeList.EMPTY);
+        insns.set(1, insn);
+        insns.setImmutable();
+
+        int label2 = getSpecialLabel(SYNCH_CATCH_2);
+        bb = new BasicBlock(getSpecialLabel(SYNCH_CATCH_1), insns,
+                            IntList.makeImmutable(label2), label2);
+        addBlock(bb, IntList.EMPTY);
+
+        insns = new InsnList(1);
+        insn = new ThrowingInsn(Rops.THROW, pos,
+                                RegisterSpecList.make(exReg),
+                                StdTypeList.EMPTY);
+        insns.set(0, insn);
+        insns.setImmutable();
+
+        bb = new BasicBlock(label2, insns, IntList.EMPTY, -1);
+        addBlock(bb, IntList.EMPTY);
+    }
+
+    /**
+     * Creates the exception handler setup blocks. "maxLocals"
+     * below is because that's the register number corresponding
+     * to the sole element on a one-deep stack (which is the
+     * situation at the start of an exception handler block).
+     */
+    private void addExceptionSetupBlocks() {
+
+        int len = catchInfos.length;
+        for (int i = 0; i < len; i++) {
+            CatchInfo catches = catchInfos[i];
+            if (catches != null) {
+                for (ExceptionHandlerSetup one : catches.getSetups()) {
+                    Insn proto = labelToBlock(i).getFirstInsn();
+                    SourcePosition pos = proto.getPosition();
+                    InsnList il = new InsnList(2);
+
+                    Insn insn = new PlainInsn(Rops.opMoveException(one.getCaughtType()),
+                            pos,
+                            RegisterSpec.make(maxLocals, one.getCaughtType()),
+                            RegisterSpecList.EMPTY);
+                    il.set(0, insn);
+
+                    insn = new PlainInsn(Rops.GOTO, pos, null,
+                            RegisterSpecList.EMPTY);
+                    il.set(1, insn);
+                    il.setImmutable();
+
+                    BasicBlock bb = new BasicBlock(one.getLabel(),
+                            il,
+                            IntList.makeImmutable(i),
+                            i);
+                    addBlock(bb, startFrames[i].getSubroutines());
+                }
+            }
+        }
+    }
+
+    /**
+     * Checks to see if the basic block is a subroutine caller block.
+     *
+     * @param bb {@code non-null;} the basic block in question
+     * @return true if this block calls a subroutine
+     */
+    private boolean isSubroutineCaller(BasicBlock bb) {
+        IntList successors = bb.getSuccessors();
+        if (successors.size() < 2) return false;
+
+        int subLabel = successors.get(1);
+
+        return (subLabel < subroutines.length)
+                && (subroutines[subLabel] != null);
+    }
+
+    /**
+     * Inlines any subroutine calls.
+     */
+    private void inlineSubroutines() {
+        final IntList reachableSubroutineCallerLabels = new IntList(4);
+
+        /*
+         * Compile a list of all subroutine calls reachable
+         * through the normal (non-subroutine) flow.  We do this first, since
+         * we'll be affecting the call flow as we go.
+         *
+         * Start at label 0 --  the param assignment block has nothing for us
+         */
+        forEachNonSubBlockDepthFirst(0, new BasicBlock.Visitor() {
+            @Override
+            public void visitBlock(BasicBlock b) {
+                if (isSubroutineCaller(b)) {
+                    reachableSubroutineCallerLabels.add(b.getLabel());
+                }
+            }
+        });
+
+        /*
+         * Convert the resultSubroutines list, indexed by block index,
+         * to a label-to-subroutines mapping used by the inliner.
+         */
+        int largestAllocedLabel = getAvailableLabel();
+        ArrayList<IntList> labelToSubroutines
+                = new ArrayList<IntList>(largestAllocedLabel);
+        for (int i = 0; i < largestAllocedLabel; i++) {
+            labelToSubroutines.add(null);
+        }
+
+        for (int i = 0; i < result.size(); i++) {
+            BasicBlock b = result.get(i);
+            if (b == null) {
+                continue;
+            }
+            IntList subroutineList = resultSubroutines.get(i);
+            labelToSubroutines.set(b.getLabel(), subroutineList);
+        }
+
+        /*
+         * Inline all reachable subroutines.
+         * Inner subroutines will be inlined as they are encountered.
+         */
+        int sz = reachableSubroutineCallerLabels.size();
+        for (int i = 0 ; i < sz ; i++) {
+            int label = reachableSubroutineCallerLabels.get(i);
+            new SubroutineInliner(
+                    new LabelAllocator(getAvailableLabel()),
+                    labelToSubroutines)
+                    .inlineSubroutineCalledFrom(labelToBlock(label));
+        }
+
+        // Now find the blocks that aren't reachable and remove them
+        deleteUnreachableBlocks();
+    }
+
+    /**
+     * Deletes all blocks that cannot be reached. This is run to delete
+     * original subroutine blocks after subroutine inlining.
+     */
+    private void deleteUnreachableBlocks() {
+        final IntList reachableLabels = new IntList(result.size());
+
+        // subroutine inlining is done now and we won't update this list here
+        resultSubroutines.clear();
+
+        forEachNonSubBlockDepthFirst(getSpecialLabel(PARAM_ASSIGNMENT),
+                new BasicBlock.Visitor() {
+
+            @Override
+            public void visitBlock(BasicBlock b) {
+                reachableLabels.add(b.getLabel());
+            }
+        });
+
+        reachableLabels.sort();
+
+        for (int i = result.size() - 1 ; i >= 0 ; i--) {
+            if (reachableLabels.indexOf(result.get(i).getLabel()) < 0) {
+                result.remove(i);
+                // unnecessary here really, since subroutine inlining is done
+                //resultSubroutines.remove(i);
+            }
+        }
+    }
+
+    /**
+     * Allocates labels, without requiring previously allocated labels
+     * to have been added to the blocks list.
+     */
+    private static class LabelAllocator {
+        int nextAvailableLabel;
+
+        /**
+         * @param startLabel available label to start allocating from
+         */
+        LabelAllocator(int startLabel) {
+            nextAvailableLabel = startLabel;
+        }
+
+        /**
+         * @return next available label
+         */
+        int getNextLabel() {
+            return nextAvailableLabel++;
+        }
+    }
+
+    /**
+     * Allocates labels for exception setup blocks.
+     */
+    private class ExceptionSetupLabelAllocator extends LabelAllocator {
+        int maxSetupLabel;
+
+        ExceptionSetupLabelAllocator() {
+            super(maxLabel);
+            maxSetupLabel = maxLabel + method.getCatches().size();
+        }
+
+        @Override
+        int getNextLabel() {
+            if (nextAvailableLabel >= maxSetupLabel) {
+                throw new IndexOutOfBoundsException();
+            }
+            return nextAvailableLabel ++;
+        }
+    }
+
+    /**
+     * Inlines a subroutine. Start by calling
+     * {@link #inlineSubroutineCalledFrom}.
+     */
+    private class SubroutineInliner {
+        /**
+         * maps original label to the label that will be used by the
+         * inlined version
+         */
+        private final HashMap<Integer, Integer> origLabelToCopiedLabel;
+
+        /** set of original labels that need to be copied */
+        private final BitSet workList;
+
+        /** the label of the original start block for this subroutine */
+        private int subroutineStart;
+
+        /** the label of the ultimate return block */
+        private int subroutineSuccessor;
+
+        /** used for generating new labels for copied blocks */
+        private final LabelAllocator labelAllocator;
+
+        /**
+         * A mapping, indexed by label, to subroutine nesting list.
+         * The subroutine nest list is as returned by
+         * {@link Frame#getSubroutines}.
+         */
+        private final ArrayList<IntList> labelToSubroutines;
+
+        SubroutineInliner(final LabelAllocator labelAllocator,
+                ArrayList<IntList> labelToSubroutines) {
+            origLabelToCopiedLabel = new HashMap<Integer, Integer>();
+
+            workList = new BitSet(maxLabel);
+
+            this.labelAllocator = labelAllocator;
+            this.labelToSubroutines = labelToSubroutines;
+        }
+
+        /**
+         * Inlines a subroutine.
+         *
+         * @param b block where {@code jsr} occurred in the original bytecode
+         */
+        void inlineSubroutineCalledFrom(final BasicBlock b) {
+            /*
+             * The 0th successor of a subroutine caller block is where
+             * the subroutine should return to. The 1st successor is
+             * the start block of the subroutine.
+             */
+            subroutineSuccessor = b.getSuccessors().get(0);
+            subroutineStart = b.getSuccessors().get(1);
+
+            /*
+             * This allocates an initial label and adds the first
+             * block to the worklist.
+             */
+            int newSubStartLabel = mapOrAllocateLabel(subroutineStart);
+
+            for (int label = workList.nextSetBit(0); label >= 0;
+                 label = workList.nextSetBit(0)) {
+                workList.clear(label);
+                int newLabel = origLabelToCopiedLabel.get(label);
+
+                copyBlock(label, newLabel);
+
+                if (isSubroutineCaller(labelToBlock(label))) {
+                    new SubroutineInliner(labelAllocator, labelToSubroutines)
+                        .inlineSubroutineCalledFrom(labelToBlock(newLabel));
+                }
+            }
+
+            /*
+             * Replace the original caller block, since we now have a
+             * new successor
+             */
+
+            addOrReplaceBlockNoDelete(
+                new BasicBlock(b.getLabel(), b.getInsns(),
+                    IntList.makeImmutable (newSubStartLabel),
+                            newSubStartLabel),
+                labelToSubroutines.get(b.getLabel()));
+        }
+
+        /**
+         * Copies a basic block, mapping its successors along the way.
+         *
+         * @param origLabel original block label
+         * @param newLabel label that the new block should have
+         */
+        private void copyBlock(int origLabel, int newLabel) {
+
+            BasicBlock origBlock = labelToBlock(origLabel);
+
+            final IntList origSuccessors = origBlock.getSuccessors();
+            IntList successors;
+            int primarySuccessor = -1;
+            Subroutine subroutine;
+
+            if (isSubroutineCaller(origBlock)) {
+                /*
+                 * A subroutine call inside a subroutine call.
+                 * Set up so we can recurse. The caller block should have
+                 * it's first successor be a copied block that will be
+                 * the subroutine's return point. It's second successor will
+                 * be copied when we recurse, and remains as the original
+                 * label of the start of the inner subroutine.
+                 */
+
+                successors = IntList.makeImmutable(
+                        mapOrAllocateLabel(origSuccessors.get(0)),
+                        origSuccessors.get(1));
+                // primary successor will be set when this block is replaced
+            } else if (null
+                    != (subroutine = subroutineFromRetBlock(origLabel))) {
+                /*
+                 * this is a ret block -- its successor
+                 * should be subroutineSuccessor
+                 */
+
+                // Check we have the expected subroutine.
+                if (subroutine.startBlock != subroutineStart) {
+                    throw new RuntimeException (
+                            "ret instruction returns to label "
+                            + Hex.u2 (subroutine.startBlock)
+                            + " expected: " + Hex.u2(subroutineStart));
+                }
+
+                successors = IntList.makeImmutable(subroutineSuccessor);
+                primarySuccessor = subroutineSuccessor;
+            } else {
+                // Map all the successor labels
+
+                int origPrimary = origBlock.getPrimarySuccessor();
+                int sz = origSuccessors.size();
+
+                successors = new IntList(sz);
+
+                for (int i = 0 ; i < sz ; i++) {
+                    int origSuccLabel = origSuccessors.get(i);
+                    int newSuccLabel =  mapOrAllocateLabel(origSuccLabel);
+
+                    successors.add(newSuccLabel);
+
+                    if (origPrimary == origSuccLabel) {
+                        primarySuccessor = newSuccLabel;
+                    }
+                }
+
+                successors.setImmutable();
+            }
+
+            addBlock (
+                new BasicBlock(newLabel,
+                    filterMoveReturnAddressInsns(origBlock.getInsns()),
+                    successors, primarySuccessor),
+                    labelToSubroutines.get(newLabel));
+        }
+
+        /**
+         * Checks to see if a specified label is involved in a specified
+         * subroutine.
+         *
+         * @param label {@code >= 0;} a basic block label
+         * @param subroutineStart {@code >= 0;} a subroutine as identified
+         * by the label of its start block
+         * @return true if the block is dominated by the subroutine call
+         */
+        private boolean involvedInSubroutine(int label, int subroutineStart) {
+            IntList subroutinesList = labelToSubroutines.get(label);
+            return (subroutinesList != null && subroutinesList.size() > 0
+                    && subroutinesList.top() == subroutineStart);
+        }
+
+        /**
+         * Maps the label of a pre-copied block to the label of the inlined
+         * block, allocating a new label and adding it to the worklist
+         * if necessary.  If the origLabel is a "special" label, it
+         * is returned exactly and not scheduled for duplication: copying
+         * never proceeds past a special label, which likely is the function
+         * return block or an immediate predecessor.
+         *
+         * @param origLabel label of original, pre-copied block
+         * @return label for new, inlined block
+         */
+        private int mapOrAllocateLabel(int origLabel) {
+            int resultLabel;
+            Integer mappedLabel = origLabelToCopiedLabel.get(origLabel);
+
+            if (mappedLabel != null) {
+                resultLabel = mappedLabel;
+            } else if (!involvedInSubroutine(origLabel,subroutineStart)) {
+                /*
+                 * A subroutine has ended by some means other than a "ret"
+                 * (which really means a throw caught later).
+                 */
+                resultLabel = origLabel;
+            } else {
+                resultLabel = labelAllocator.getNextLabel();
+                workList.set(origLabel);
+                origLabelToCopiedLabel.put(origLabel, resultLabel);
+
+                // The new label has the same frame as the original label
+                while (labelToSubroutines.size() <= resultLabel) {
+                    labelToSubroutines.add(null);
+                }
+                labelToSubroutines.set(resultLabel,
+                        labelToSubroutines.get(origLabel));
+            }
+
+            return resultLabel;
+        }
+    }
+
+    /**
+     * Finds a {@code Subroutine} that is returned from by a {@code ret} in
+     * a given block.
+     *
+     * @param label A block that originally contained a {@code ret} instruction
+     * @return {@code null-ok;} found subroutine or {@code null} if none
+     * was found
+     */
+    private Subroutine subroutineFromRetBlock(int label) {
+        for (int i = subroutines.length - 1 ; i >= 0 ; i--) {
+            if (subroutines[i] != null) {
+                Subroutine subroutine = subroutines[i];
+
+                if (subroutine.retBlocks.get(label)) {
+                    return subroutine;
+                }
+            }
+        }
+
+        return null;
+    }
+
+
+    /**
+     * Removes all {@code move-return-address} instructions, returning a new
+     * {@code InsnList} if necessary. The {@code move-return-address}
+     * insns are dead code after subroutines have been inlined.
+     *
+     * @param insns {@code InsnList} that may contain
+     * {@code move-return-address} insns
+     * @return {@code InsnList} with {@code move-return-address} removed
+     */
+    private InsnList filterMoveReturnAddressInsns(InsnList insns) {
+        int sz;
+        int newSz = 0;
+
+        // First see if we need to filter, and if so what the new size will be
+        sz = insns.size();
+        for (int i = 0; i < sz; i++) {
+            if (insns.get(i).getOpcode() != Rops.MOVE_RETURN_ADDRESS) {
+                newSz++;
+            }
+        }
+
+        if (newSz == sz) {
+            return insns;
+        }
+
+        // Make a new list without the MOVE_RETURN_ADDRESS insns
+        InsnList newInsns = new InsnList(newSz);
+
+        int newIndex = 0;
+        for (int i = 0; i < sz; i++) {
+            Insn insn = insns.get(i);
+            if (insn.getOpcode() != Rops.MOVE_RETURN_ADDRESS) {
+                newInsns.set(newIndex++, insn);
+            }
+        }
+
+        newInsns.setImmutable();
+        return newInsns;
+    }
+
+    /**
+     * Visits each non-subroutine block once in depth-first successor order.
+     *
+     * @param firstLabel label of start block
+     * @param v callback interface
+     */
+    private void forEachNonSubBlockDepthFirst(int firstLabel,
+            BasicBlock.Visitor v) {
+        forEachNonSubBlockDepthFirst0(labelToBlock(firstLabel),
+                v, new BitSet(maxLabel));
+    }
+
+    /**
+     * Visits each block once in depth-first successor order, ignoring
+     * {@code jsr} targets. Worker for {@link #forEachNonSubBlockDepthFirst}.
+     *
+     * @param next next block to visit
+     * @param v callback interface
+     * @param visited set of blocks already visited
+     */
+    private void forEachNonSubBlockDepthFirst0(
+            BasicBlock next, BasicBlock.Visitor v, BitSet visited) {
+        v.visitBlock(next);
+        visited.set(next.getLabel());
+
+        IntList successors = next.getSuccessors();
+        int sz = successors.size();
+
+        for (int i = 0; i < sz; i++) {
+            int succ = successors.get(i);
+
+            if (visited.get(succ)) {
+                continue;
+            }
+
+            if (isSubroutineCaller(next) && i > 0) {
+                // ignore jsr targets
+                continue;
+            }
+
+            /*
+             * Ignore missing labels: they're successors of
+             * subroutines that never invoke a ret.
+             */
+            int idx = labelToResultIndex(succ);
+            if (idx >= 0) {
+                forEachNonSubBlockDepthFirst0(result.get(idx), v, visited);
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/RopperMachine.java b/dx/src/com/android/dx/cf/code/RopperMachine.java
new file mode 100644
index 0000000..f0d5fdd
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/RopperMachine.java
@@ -0,0 +1,1032 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.cf.iface.Method;
+import com.android.dx.cf.iface.MethodList;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.code.FillArrayDataInsn;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.InvokePolymorphicInsn;
+import com.android.dx.rop.code.PlainCstInsn;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.code.SwitchInsn;
+import com.android.dx.rop.code.ThrowingCstInsn;
+import com.android.dx.rop.code.ThrowingInsn;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+
+/**
+ * Machine implementation for use by {@link Ropper}.
+ */
+/*package*/ final class RopperMachine extends ValueAwareMachine {
+    /** {@code non-null;} array reflection class */
+    private static final CstType ARRAY_REFLECT_TYPE =
+        new CstType(Type.internClassName("java/lang/reflect/Array"));
+
+    /**
+     * {@code non-null;} method constant for use in converting
+     * {@code multianewarray} instructions
+     */
+    private static final CstMethodRef MULTIANEWARRAY_METHOD =
+        new CstMethodRef(ARRAY_REFLECT_TYPE,
+                         new CstNat(new CstString("newInstance"),
+                                    new CstString("(Ljava/lang/Class;[I)" +
+                                                "Ljava/lang/Object;")));
+
+    /** {@code non-null;} {@link Ropper} controlling this instance */
+    private final Ropper ropper;
+
+    /** {@code non-null;} method being converted */
+    private final ConcreteMethod method;
+
+    /** {@code non-null:} list of methods from the class whose method is being converted */
+    private final MethodList methods;
+
+    /** {@code non-null;} translation advice */
+    private final TranslationAdvice advice;
+
+    /** max locals of the method */
+    private final int maxLocals;
+
+    /** {@code non-null;} instructions for the rop basic block in-progress */
+    private final ArrayList<Insn> insns;
+
+    /** {@code non-null;} catches for the block currently being processed */
+    private TypeList catches;
+
+    /** whether the catches have been used in an instruction */
+    private boolean catchesUsed;
+
+    /** whether the block contains a {@code return} */
+    private boolean returns;
+
+    /** primary successor index */
+    private int primarySuccessorIndex;
+
+    /** {@code >= 0;} number of extra basic blocks required */
+    private int extraBlockCount;
+
+    /** true if last processed block ends with a jsr or jsr_W*/
+    private boolean hasJsr;
+
+    /** true if an exception can be thrown by the last block processed */
+    private boolean blockCanThrow;
+
+    /**
+     * If non-null, the ReturnAddress that was used by the terminating ret
+     * instruction. If null, there was no ret instruction encountered.
+     */
+
+    private ReturnAddress returnAddress;
+
+    /**
+     * {@code null-ok;} the appropriate {@code return} op or {@code null}
+     * if it is not yet known
+     */
+    private Rop returnOp;
+
+    /**
+     * {@code null-ok;} the source position for the return block or {@code null}
+     * if it is not yet known
+     */
+    private SourcePosition returnPosition;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param ropper {@code non-null;} ropper controlling this instance
+     * @param method {@code non-null;} method being converted
+     * @param advice {@code non-null;} translation advice to use
+     * @param methods {@code non-null;} list of methods defined by the class
+     *     that defines {@code method}.
+     */
+    public RopperMachine(Ropper ropper, ConcreteMethod method,
+            TranslationAdvice advice, MethodList methods) {
+        super(method.getEffectiveDescriptor());
+
+        if (methods == null) {
+            throw new NullPointerException("methods == null");
+        }
+
+        if (ropper == null) {
+            throw new NullPointerException("ropper == null");
+        }
+
+        if (advice == null) {
+            throw new NullPointerException("advice == null");
+        }
+
+        this.ropper = ropper;
+        this.method = method;
+        this.methods = methods;
+        this.advice = advice;
+        this.maxLocals = method.getMaxLocals();
+        this.insns = new ArrayList<Insn>(25);
+        this.catches = null;
+        this.catchesUsed = false;
+        this.returns = false;
+        this.primarySuccessorIndex = -1;
+        this.extraBlockCount = 0;
+        this.blockCanThrow = false;
+        this.returnOp = null;
+        this.returnPosition = null;
+    }
+
+    /**
+     * Gets the instructions array. It is shared and gets modified by
+     * subsequent calls to this instance.
+     *
+     * @return {@code non-null;} the instructions array
+     */
+    public ArrayList<Insn> getInsns() {
+        return insns;
+    }
+
+    /**
+     * Gets the return opcode encountered, if any.
+     *
+     * @return {@code null-ok;} the return opcode
+     */
+    public Rop getReturnOp() {
+        return returnOp;
+    }
+
+    /**
+     * Gets the return position, if known.
+     *
+     * @return {@code null-ok;} the return position
+     */
+    public SourcePosition getReturnPosition() {
+        return returnPosition;
+    }
+
+    /**
+     * Gets ready to start working on a new block. This will clear the
+     * {@link #insns} list, set {@link #catches}, reset whether it has
+     * been used, reset whether the block contains a
+     * {@code return}, and reset {@link #primarySuccessorIndex}.
+     */
+    public void startBlock(TypeList catches) {
+        this.catches = catches;
+
+        insns.clear();
+        catchesUsed = false;
+        returns = false;
+        primarySuccessorIndex = 0;
+        extraBlockCount = 0;
+        blockCanThrow = false;
+        hasJsr = false;
+        returnAddress = null;
+    }
+
+    /**
+     * Gets whether {@link #catches} was used. This indicates that the
+     * last instruction in the block is one of the ones that can throw.
+     *
+     * @return whether {@code catches} has been used
+     */
+    public boolean wereCatchesUsed() {
+        return catchesUsed;
+    }
+
+    /**
+     * Gets whether the block just processed ended with a
+     * {@code return}.
+     *
+     * @return whether the block returns
+     */
+    public boolean returns() {
+        return returns;
+    }
+
+    /**
+     * Gets the primary successor index. This is the index into the
+     * successors list where the primary may be found or
+     * {@code -1} if there are successors but no primary
+     * successor. This may return something other than
+     * {@code -1} in the case of an instruction with no
+     * successors at all (primary or otherwise).
+     *
+     * @return {@code >= -1;} the primary successor index
+     */
+    public int getPrimarySuccessorIndex() {
+        return primarySuccessorIndex;
+    }
+
+    /**
+     * Gets how many extra blocks will be needed to represent the
+     * block currently being translated. Each extra block should consist
+     * of one instruction from the end of the original block.
+     *
+     * @return {@code >= 0;} the number of extra blocks needed
+     */
+    public int getExtraBlockCount() {
+        return extraBlockCount;
+    }
+
+    /**
+     * @return true if at least one of the insn processed since the last
+     * call to startBlock() can throw.
+     */
+    public boolean canThrow() {
+        return blockCanThrow;
+    }
+
+    /**
+     * @return true if a JSR has ben encountered since the last call to
+     * startBlock()
+     */
+    public boolean hasJsr() {
+        return hasJsr;
+    }
+
+    /**
+     * @return {@code true} if a {@code ret} has ben encountered since
+     * the last call to {@code startBlock()}
+     */
+    public boolean hasRet() {
+        return returnAddress != null;
+    }
+
+    /**
+     * @return {@code null-ok;} return address of a {@code ret}
+     * instruction if encountered since last call to startBlock().
+     * {@code null} if no ret instruction encountered.
+     */
+    public ReturnAddress getReturnAddress() {
+        return returnAddress;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void run(Frame frame, int offset, int opcode) {
+        /*
+         * This is the stack pointer after the opcode's arguments have been
+         * popped.
+         */
+        int stackPointer = maxLocals + frame.getStack().size();
+
+        // The sources have to be retrieved before super.run() gets called.
+        RegisterSpecList sources = getSources(opcode, stackPointer);
+        int sourceCount = sources.size();
+
+        super.run(frame, offset, opcode);
+
+        SourcePosition pos = method.makeSourcePosistion(offset);
+        RegisterSpec localTarget = getLocalTarget(opcode == ByteOps.ISTORE);
+        int destCount = resultCount();
+        RegisterSpec dest;
+
+        if (destCount == 0) {
+            dest = null;
+            switch (opcode) {
+                case ByteOps.POP:
+                case ByteOps.POP2: {
+                    // These simply don't appear in the rop form.
+                    return;
+                }
+            }
+        } else if (localTarget != null) {
+            dest = localTarget;
+        } else if (destCount == 1) {
+            dest = RegisterSpec.make(stackPointer, result(0));
+        } else {
+            /*
+             * This clause only ever applies to the stack manipulation
+             * ops that have results (that is, dup* and swap but not
+             * pop*).
+             *
+             * What we do is first move all the source registers into
+             * the "temporary stack" area defined for the method, and
+             * then move stuff back down onto the main "stack" in the
+             * arrangement specified by the stack op pattern.
+             *
+             * Note: This code ends up emitting a lot of what will
+             * turn out to be superfluous moves (e.g., moving back and
+             * forth to the same local when doing a dup); however,
+             * that makes this code a bit easier (and goodness knows
+             * it doesn't need any extra complexity), and all the SSA
+             * stuff is going to want to deal with this sort of
+             * superfluous assignment anyway, so it should be a wash
+             * in the end.
+             */
+            int scratchAt = ropper.getFirstTempStackReg();
+            RegisterSpec[] scratchRegs = new RegisterSpec[sourceCount];
+
+            for (int i = 0; i < sourceCount; i++) {
+                RegisterSpec src = sources.get(i);
+                TypeBearer type = src.getTypeBearer();
+                RegisterSpec scratch = src.withReg(scratchAt);
+                insns.add(new PlainInsn(Rops.opMove(type), pos, scratch, src));
+                scratchRegs[i] = scratch;
+                scratchAt += src.getCategory();
+            }
+
+            for (int pattern = getAuxInt(); pattern != 0; pattern >>= 4) {
+                int which = (pattern & 0x0f) - 1;
+                RegisterSpec scratch = scratchRegs[which];
+                TypeBearer type = scratch.getTypeBearer();
+                insns.add(new PlainInsn(Rops.opMove(type), pos,
+                                        scratch.withReg(stackPointer),
+                                        scratch));
+                stackPointer += type.getType().getCategory();
+            }
+            return;
+        }
+
+        TypeBearer destType = (dest != null) ? dest : Type.VOID;
+        Constant cst = getAuxCst();
+        int ropOpcode;
+        Rop rop;
+        Insn insn;
+
+        if (opcode == ByteOps.MULTIANEWARRAY) {
+            blockCanThrow = true;
+
+            // Add the extra instructions for handling multianewarray.
+
+            extraBlockCount = 6;
+
+            /*
+             * Add an array constructor for the int[] containing all the
+             * dimensions.
+             */
+            RegisterSpec dimsReg =
+                RegisterSpec.make(dest.getNextReg(), Type.INT_ARRAY);
+            rop = Rops.opFilledNewArray(Type.INT_ARRAY, sourceCount);
+            insn = new ThrowingCstInsn(rop, pos, sources, catches,
+                    CstType.INT_ARRAY);
+            insns.add(insn);
+
+            // Add a move-result for the new-filled-array
+            rop = Rops.opMoveResult(Type.INT_ARRAY);
+            insn = new PlainInsn(rop, pos, dimsReg, RegisterSpecList.EMPTY);
+            insns.add(insn);
+
+            /*
+             * Add a const-class instruction for the specified array
+             * class.
+             */
+
+            /*
+             * Remove as many dimensions from the originally specified
+             * class as are given in the explicit list of dimensions,
+             * so as to pass the right component class to the standard
+             * Java library array constructor.
+             */
+            Type componentType = ((CstType) cst).getClassType();
+            for (int i = 0; i < sourceCount; i++) {
+                componentType = componentType.getComponentType();
+            }
+
+            RegisterSpec classReg =
+                RegisterSpec.make(dest.getReg(), Type.CLASS);
+
+            if (componentType.isPrimitive()) {
+                /*
+                 * The component type is primitive (e.g., int as opposed
+                 * to Integer), so we have to fetch the corresponding
+                 * TYPE class.
+                 */
+                CstFieldRef typeField =
+                    CstFieldRef.forPrimitiveType(componentType);
+                insn = new ThrowingCstInsn(Rops.GET_STATIC_OBJECT, pos,
+                                           RegisterSpecList.EMPTY,
+                                           catches, typeField);
+            } else {
+                /*
+                 * The component type is an object type, so just make a
+                 * normal class reference.
+                 */
+                insn = new ThrowingCstInsn(Rops.CONST_OBJECT, pos,
+                                           RegisterSpecList.EMPTY, catches,
+                                           new CstType(componentType));
+            }
+
+            insns.add(insn);
+
+            // Add a move-result-pseudo for the get-static or const
+            rop = Rops.opMoveResultPseudo(classReg.getType());
+            insn = new PlainInsn(rop, pos, classReg, RegisterSpecList.EMPTY);
+            insns.add(insn);
+
+            /*
+             * Add a call to the "multianewarray method," that is,
+             * Array.newInstance(class, dims). Note: The result type
+             * of newInstance() is Object, which is why the last
+             * instruction in this sequence is a cast to the right
+             * type for the original instruction.
+             */
+
+            RegisterSpec objectReg =
+                RegisterSpec.make(dest.getReg(), Type.OBJECT);
+
+            insn = new ThrowingCstInsn(
+                    Rops.opInvokeStatic(MULTIANEWARRAY_METHOD.getPrototype()),
+                    pos, RegisterSpecList.make(classReg, dimsReg),
+                    catches, MULTIANEWARRAY_METHOD);
+            insns.add(insn);
+
+            // Add a move-result.
+            rop = Rops.opMoveResult(MULTIANEWARRAY_METHOD.getPrototype()
+                    .getReturnType());
+            insn = new PlainInsn(rop, pos, objectReg, RegisterSpecList.EMPTY);
+            insns.add(insn);
+
+            /*
+             * And finally, set up for the remainder of this method to
+             * add an appropriate cast.
+             */
+
+            opcode = ByteOps.CHECKCAST;
+            sources = RegisterSpecList.make(objectReg);
+        } else if (opcode == ByteOps.JSR) {
+            // JSR has no Rop instruction
+            hasJsr = true;
+            return;
+        } else if (opcode == ByteOps.RET) {
+            try {
+                returnAddress = (ReturnAddress)arg(0);
+            } catch (ClassCastException ex) {
+                throw new RuntimeException(
+                        "Argument to RET was not a ReturnAddress", ex);
+            }
+            // RET has no Rop instruction.
+            return;
+        }
+
+        ropOpcode = jopToRopOpcode(opcode, cst);
+        rop = Rops.ropFor(ropOpcode, destType, sources, cst);
+
+        Insn moveResult = null;
+        if (dest != null && rop.isCallLike()) {
+            /*
+             * We're going to want to have a move-result in the next
+             * basic block.
+             */
+            extraBlockCount++;
+
+            Type returnType;
+            if (rop.getOpcode() == RegOps.INVOKE_CUSTOM) {
+                returnType = ((CstCallSiteRef) cst).getReturnType();
+            } else {
+                returnType = ((CstMethodRef) cst).getPrototype().getReturnType();
+            }
+            moveResult = new PlainInsn(Rops.opMoveResult(returnType),
+                                       pos, dest, RegisterSpecList.EMPTY);
+
+            dest = null;
+        } else if (dest != null && rop.canThrow()) {
+            /*
+             * We're going to want to have a move-result-pseudo in the
+             * next basic block.
+             */
+            extraBlockCount++;
+
+            moveResult = new PlainInsn(
+                    Rops.opMoveResultPseudo(dest.getTypeBearer()),
+                    pos, dest, RegisterSpecList.EMPTY);
+
+            dest = null;
+        }
+        if (ropOpcode == RegOps.NEW_ARRAY) {
+            /*
+             * In the original bytecode, this was either a primitive
+             * array constructor "newarray" or an object array
+             * constructor "anewarray". In the former case, there is
+             * no explicit constant, and in the latter, the constant
+             * is for the element type and not the array type. The rop
+             * instruction form for both of these is supposed to be
+             * the resulting array type, so we initialize / alter
+             * "cst" here, accordingly. Conveniently enough, the rop
+             * opcode already gets constructed with the proper array
+             * type.
+             */
+            cst = CstType.intern(rop.getResult());
+        } else if ((cst == null) && (sourceCount == 2)) {
+            TypeBearer firstType = sources.get(0).getTypeBearer();
+            TypeBearer lastType = sources.get(1).getTypeBearer();
+
+            if ((lastType.isConstant() || firstType.isConstant()) &&
+                 advice.hasConstantOperation(rop, sources.get(0),
+                                             sources.get(1))) {
+
+                if (lastType.isConstant()) {
+                    /*
+                     * The target architecture has an instruction that can
+                     * build in the constant found in the second argument,
+                     * so pull it out of the sources and just use it as a
+                     * constant here.
+                     */
+                    cst = (Constant) lastType;
+                    sources = sources.withoutLast();
+
+                    // For subtraction, change to addition and invert constant
+                    if (rop.getOpcode() == RegOps.SUB) {
+                        ropOpcode = RegOps.ADD;
+                        CstInteger cstInt = (CstInteger) lastType;
+                        cst = CstInteger.make(-cstInt.getValue());
+                    }
+                } else {
+                    /*
+                     * The target architecture has an instruction that can
+                     * build in the constant found in the first argument,
+                     * so pull it out of the sources and just use it as a
+                     * constant here.
+                     */
+                    cst = (Constant) firstType;
+                    sources = sources.withoutFirst();
+                }
+
+                rop = Rops.ropFor(ropOpcode, destType, sources, cst);
+            }
+        }
+
+        SwitchList cases = getAuxCases();
+        ArrayList<Constant> initValues = getInitValues();
+        boolean canThrow = rop.canThrow();
+
+        blockCanThrow |= canThrow;
+
+        if (cases != null) {
+            if (cases.size() == 0) {
+                // It's a default-only switch statement. It can happen!
+                insn = new PlainInsn(Rops.GOTO, pos, null,
+                                     RegisterSpecList.EMPTY);
+                primarySuccessorIndex = 0;
+            } else {
+                IntList values = cases.getValues();
+                insn = new SwitchInsn(rop, pos, dest, sources, values);
+                primarySuccessorIndex = values.size();
+            }
+        } else if (ropOpcode == RegOps.RETURN) {
+            /*
+             * Returns get turned into the combination of a move (if
+             * non-void and if the return doesn't already mention
+             * register 0) and a goto (to the return block).
+             */
+            if (sources.size() != 0) {
+                RegisterSpec source = sources.get(0);
+                TypeBearer type = source.getTypeBearer();
+                if (source.getReg() != 0) {
+                    insns.add(new PlainInsn(Rops.opMove(type), pos,
+                                            RegisterSpec.make(0, type),
+                                            source));
+                }
+            }
+            insn = new PlainInsn(Rops.GOTO, pos, null, RegisterSpecList.EMPTY);
+            primarySuccessorIndex = 0;
+            updateReturnOp(rop, pos);
+            returns = true;
+        } else if (cst != null) {
+            if (canThrow) {
+                if (rop.getOpcode() == RegOps.INVOKE_POLYMORPHIC) {
+                    insn = makeInvokePolymorphicInsn(rop, pos, sources, catches, cst);
+                } else {
+                    insn = new ThrowingCstInsn(rop, pos, sources, catches, cst);
+                }
+                catchesUsed = true;
+                primarySuccessorIndex = catches.size();
+            } else {
+                insn = new PlainCstInsn(rop, pos, dest, sources, cst);
+            }
+        } else if (canThrow) {
+            insn = new ThrowingInsn(rop, pos, sources, catches);
+            catchesUsed = true;
+            if (opcode == ByteOps.ATHROW) {
+                /*
+                 * The op athrow is the only one where it's possible
+                 * to have non-empty successors and yet not have a
+                 * primary successor.
+                 */
+                primarySuccessorIndex = -1;
+            } else {
+                primarySuccessorIndex = catches.size();
+            }
+        } else {
+            insn = new PlainInsn(rop, pos, dest, sources);
+        }
+
+        insns.add(insn);
+
+        if (moveResult != null) {
+            insns.add(moveResult);
+        }
+
+        /*
+         * If initValues is non-null, it means that the parser has
+         * seen a group of compatible constant initialization
+         * bytecodes that are applied to the current newarray. The
+         * action we take here is to convert these initialization
+         * bytecodes into a single fill-array-data ROP which lays out
+         * all the constant values in a table.
+         */
+        if (initValues != null) {
+            extraBlockCount++;
+            insn = new FillArrayDataInsn(Rops.FILL_ARRAY_DATA, pos,
+                    RegisterSpecList.make(moveResult.getResult()), initValues,
+                    cst);
+            insns.add(insn);
+        }
+    }
+
+    /**
+     * Helper for {@link #run}, which gets the list of sources for the.
+     * instruction.
+     *
+     * @param opcode the opcode being translated
+     * @param stackPointer {@code >= 0;} the stack pointer after the
+     * instruction's arguments have been popped
+     * @return {@code non-null;} the sources
+     */
+    private RegisterSpecList getSources(int opcode, int stackPointer) {
+        int count = argCount();
+
+        if (count == 0) {
+            // We get an easy out if there aren't any sources.
+            return RegisterSpecList.EMPTY;
+        }
+
+        int localIndex = getLocalIndex();
+        RegisterSpecList sources;
+
+        if (localIndex >= 0) {
+            // The instruction is operating on a local variable.
+            sources = new RegisterSpecList(1);
+            sources.set(0, RegisterSpec.make(localIndex, arg(0)));
+        } else {
+            sources = new RegisterSpecList(count);
+            int regAt = stackPointer;
+            for (int i = 0; i < count; i++) {
+                RegisterSpec spec = RegisterSpec.make(regAt, arg(i));
+                sources.set(i, spec);
+                regAt += spec.getCategory();
+            }
+
+            switch (opcode) {
+                case ByteOps.IASTORE: {
+                    /*
+                     * The Java argument order for array stores is
+                     * (array, index, value), but the rop argument
+                     * order is (value, array, index). The following
+                     * code gets the right arguments in the right
+                     * places.
+                     */
+                    if (count != 3) {
+                        throw new RuntimeException("shouldn't happen");
+                    }
+                    RegisterSpec array = sources.get(0);
+                    RegisterSpec index = sources.get(1);
+                    RegisterSpec value = sources.get(2);
+                    sources.set(0, value);
+                    sources.set(1, array);
+                    sources.set(2, index);
+                    break;
+                }
+                case ByteOps.PUTFIELD: {
+                    /*
+                     * Similar to above: The Java argument order for
+                     * putfield is (object, value), but the rop
+                     * argument order is (value, object).
+                     */
+                    if (count != 2) {
+                        throw new RuntimeException("shouldn't happen");
+                    }
+                    RegisterSpec obj = sources.get(0);
+                    RegisterSpec value = sources.get(1);
+                    sources.set(0, value);
+                    sources.set(1, obj);
+                    break;
+                }
+            }
+        }
+
+        sources.setImmutable();
+        return sources;
+    }
+
+    /**
+     * Sets or updates the information about the return block.
+     *
+     * @param op {@code non-null;} the opcode to use
+     * @param pos {@code non-null;} the position to use
+     */
+    private void updateReturnOp(Rop op, SourcePosition pos) {
+        if (op == null) {
+            throw new NullPointerException("op == null");
+        }
+
+        if (pos == null) {
+            throw new NullPointerException("pos == null");
+        }
+
+        if (returnOp == null) {
+            returnOp = op;
+            returnPosition = pos;
+        } else {
+            if (returnOp != op) {
+                throw new SimException("return op mismatch: " + op + ", " +
+                                       returnOp);
+            }
+
+            if (pos.getLine() > returnPosition.getLine()) {
+                // Pick the largest line number to be the "canonical" return.
+                returnPosition = pos;
+            }
+        }
+    }
+
+    /**
+     * Gets the register opcode for the given Java opcode.
+     *
+     * @param jop {@code jop >= 0;} the Java opcode
+     * @param cst {@code null-ok;} the constant argument, if any
+     * @return {@code >= 0;} the corresponding register opcode
+     */
+    private int jopToRopOpcode(int jop, Constant cst) {
+        switch (jop) {
+            case ByteOps.POP:
+            case ByteOps.POP2:
+            case ByteOps.DUP:
+            case ByteOps.DUP_X1:
+            case ByteOps.DUP_X2:
+            case ByteOps.DUP2:
+            case ByteOps.DUP2_X1:
+            case ByteOps.DUP2_X2:
+            case ByteOps.SWAP:
+            case ByteOps.JSR:
+            case ByteOps.RET:
+            case ByteOps.MULTIANEWARRAY: {
+                // These need to be taken care of specially.
+                break;
+            }
+            case ByteOps.NOP: {
+                return RegOps.NOP;
+            }
+            case ByteOps.LDC:
+            case ByteOps.LDC2_W: {
+                return RegOps.CONST;
+            }
+            case ByteOps.ILOAD:
+            case ByteOps.ISTORE: {
+                return RegOps.MOVE;
+            }
+            case ByteOps.IALOAD: {
+                return RegOps.AGET;
+            }
+            case ByteOps.IASTORE: {
+                return RegOps.APUT;
+            }
+            case ByteOps.IADD:
+            case ByteOps.IINC: {
+                return RegOps.ADD;
+            }
+            case ByteOps.ISUB: {
+                return RegOps.SUB;
+            }
+            case ByteOps.IMUL: {
+                return RegOps.MUL;
+            }
+            case ByteOps.IDIV: {
+                return RegOps.DIV;
+            }
+            case ByteOps.IREM: {
+                return RegOps.REM;
+            }
+            case ByteOps.INEG: {
+                return RegOps.NEG;
+            }
+            case ByteOps.ISHL: {
+                return RegOps.SHL;
+            }
+            case ByteOps.ISHR: {
+                return RegOps.SHR;
+            }
+            case ByteOps.IUSHR: {
+                return RegOps.USHR;
+            }
+            case ByteOps.IAND: {
+                return RegOps.AND;
+            }
+            case ByteOps.IOR: {
+                return RegOps.OR;
+            }
+            case ByteOps.IXOR: {
+                return RegOps.XOR;
+            }
+            case ByteOps.I2L:
+            case ByteOps.I2F:
+            case ByteOps.I2D:
+            case ByteOps.L2I:
+            case ByteOps.L2F:
+            case ByteOps.L2D:
+            case ByteOps.F2I:
+            case ByteOps.F2L:
+            case ByteOps.F2D:
+            case ByteOps.D2I:
+            case ByteOps.D2L:
+            case ByteOps.D2F: {
+                return RegOps.CONV;
+            }
+            case ByteOps.I2B: {
+                return RegOps.TO_BYTE;
+            }
+            case ByteOps.I2C: {
+                return RegOps.TO_CHAR;
+            }
+            case ByteOps.I2S: {
+                return RegOps.TO_SHORT;
+            }
+            case ByteOps.LCMP:
+            case ByteOps.FCMPL:
+            case ByteOps.DCMPL: {
+                return RegOps.CMPL;
+            }
+            case ByteOps.FCMPG:
+            case ByteOps.DCMPG: {
+                return RegOps.CMPG;
+            }
+            case ByteOps.IFEQ:
+            case ByteOps.IF_ICMPEQ:
+            case ByteOps.IF_ACMPEQ:
+            case ByteOps.IFNULL: {
+                return RegOps.IF_EQ;
+            }
+            case ByteOps.IFNE:
+            case ByteOps.IF_ICMPNE:
+            case ByteOps.IF_ACMPNE:
+            case ByteOps.IFNONNULL: {
+                return RegOps.IF_NE;
+            }
+            case ByteOps.IFLT:
+            case ByteOps.IF_ICMPLT: {
+                return RegOps.IF_LT;
+            }
+            case ByteOps.IFGE:
+            case ByteOps.IF_ICMPGE: {
+                return RegOps.IF_GE;
+            }
+            case ByteOps.IFGT:
+            case ByteOps.IF_ICMPGT: {
+                return RegOps.IF_GT;
+            }
+            case ByteOps.IFLE:
+            case ByteOps.IF_ICMPLE: {
+                return RegOps.IF_LE;
+            }
+            case ByteOps.GOTO: {
+                return RegOps.GOTO;
+            }
+            case ByteOps.LOOKUPSWITCH: {
+                return RegOps.SWITCH;
+            }
+            case ByteOps.IRETURN:
+            case ByteOps.RETURN: {
+                return RegOps.RETURN;
+            }
+            case ByteOps.GETSTATIC: {
+                return RegOps.GET_STATIC;
+            }
+            case ByteOps.PUTSTATIC: {
+                return RegOps.PUT_STATIC;
+            }
+            case ByteOps.GETFIELD: {
+                return RegOps.GET_FIELD;
+            }
+            case ByteOps.PUTFIELD: {
+                return RegOps.PUT_FIELD;
+            }
+            case ByteOps.INVOKEVIRTUAL: {
+                CstMethodRef ref = (CstMethodRef) cst;
+                // The java bytecode specification does not explicitly disallow
+                // invokevirtual calls to any instance method, though it
+                // specifies that instance methods and private methods "should" be
+                // called using "invokespecial" instead of "invokevirtual".
+                // Several bytecode tools generate "invokevirtual" instructions for
+                // invocation of private methods.
+                //
+                // The dalvik opcode specification on the other hand allows
+                // invoke-virtual to be used only with "normal" virtual methods,
+                // i.e, ones that are not private, static, final or constructors.
+                // We therefore need to transform invoke-virtual calls to private
+                // instance methods to invoke-direct opcodes.
+                //
+                // Note that it assumes that all methods for a given class are
+                // defined in the same dex file.
+                //
+                // NOTE: This is a slow O(n) loop, and can be replaced with a
+                // faster implementation (at the cost of higher memory usage)
+                // if it proves to be a hot area of code.
+                if (ref.getDefiningClass().equals(method.getDefiningClass())) {
+                    for (int i = 0; i < methods.size(); ++i) {
+                        final Method m = methods.get(i);
+                        if (AccessFlags.isPrivate(m.getAccessFlags()) &&
+                                ref.getNat().equals(m.getNat())) {
+                            return RegOps.INVOKE_DIRECT;
+                        }
+                    }
+                }
+                // If the method reference is a signature polymorphic method
+                // substitute invoke-polymorphic for invoke-virtual. This only
+                // affects MethodHandle.invoke and MethodHandle.invokeExact.
+                if (ref.isSignaturePolymorphic()) {
+                    return RegOps.INVOKE_POLYMORPHIC;
+                }
+                return RegOps.INVOKE_VIRTUAL;
+            }
+            case ByteOps.INVOKESPECIAL: {
+                /*
+                 * Determine whether the opcode should be
+                 * INVOKE_DIRECT or INVOKE_SUPER. See vmspec-2 section 6
+                 * on "invokespecial" as well as section 4.8.2 (7th
+                 * bullet point) for the gory details.
+                 */
+                /* TODO: Consider checking that invoke-special target
+                 * method is private, or constructor since otherwise ART
+                 * verifier will reject it.
+                 */
+                CstMethodRef ref = (CstMethodRef) cst;
+                if (ref.isInstanceInit() ||
+                    (ref.getDefiningClass().equals(method.getDefiningClass()))) {
+                    return RegOps.INVOKE_DIRECT;
+                }
+                return RegOps.INVOKE_SUPER;
+            }
+            case ByteOps.INVOKESTATIC: {
+                return RegOps.INVOKE_STATIC;
+            }
+            case ByteOps.INVOKEINTERFACE: {
+                return RegOps.INVOKE_INTERFACE;
+            }
+            case ByteOps.INVOKEDYNAMIC: {
+                return RegOps.INVOKE_CUSTOM;
+            }
+            case ByteOps.NEW: {
+                return RegOps.NEW_INSTANCE;
+            }
+            case ByteOps.NEWARRAY:
+            case ByteOps.ANEWARRAY: {
+                return RegOps.NEW_ARRAY;
+            }
+            case ByteOps.ARRAYLENGTH: {
+                return RegOps.ARRAY_LENGTH;
+            }
+            case ByteOps.ATHROW: {
+                return RegOps.THROW;
+            }
+            case ByteOps.CHECKCAST: {
+                return RegOps.CHECK_CAST;
+            }
+            case ByteOps.INSTANCEOF: {
+                return RegOps.INSTANCE_OF;
+            }
+            case ByteOps.MONITORENTER: {
+                return RegOps.MONITOR_ENTER;
+            }
+            case ByteOps.MONITOREXIT: {
+                return RegOps.MONITOR_EXIT;
+            }
+        }
+
+        throw new RuntimeException("shouldn't happen");
+    }
+
+    private Insn makeInvokePolymorphicInsn(Rop rop, SourcePosition pos, RegisterSpecList sources,
+        TypeList catches, Constant cst) {
+        CstMethodRef cstMethodRef = (CstMethodRef) cst;
+        return new InvokePolymorphicInsn(rop, pos, sources, catches, cstMethodRef);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/SimException.java b/dx/src/com/android/dx/cf/code/SimException.java
new file mode 100644
index 0000000..7cbab04
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/SimException.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dex.util.ExceptionWithContext;
+
+/**
+ * Exception from simulation.
+ */
+public class SimException
+        extends ExceptionWithContext {
+    public SimException(String message) {
+        super(message);
+    }
+
+    public SimException(Throwable cause) {
+        super(cause);
+    }
+
+    public SimException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/Simulator.java b/dx/src/com/android/dx/cf/code/Simulator.java
new file mode 100644
index 0000000..e452d62
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/Simulator.java
@@ -0,0 +1,955 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dex.DexFormat;
+import com.android.dx.dex.DexOptions;
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstInterfaceMethodRef;
+import com.android.dx.rop.cst.CstInvokeDynamic;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+
+/**
+ * Class which knows how to simulate the effects of executing bytecode.
+ *
+ * <p><b>Note:</b> This class is not thread-safe. If multiple threads
+ * need to use a single instance, they must synchronize access explicitly
+ * between themselves.</p>
+ */
+public class Simulator {
+    /**
+     * {@code non-null;} canned error message for local variable
+     * table mismatches
+     */
+    private static final String LOCAL_MISMATCH_ERROR =
+        "This is symptomatic of .class transformation tools that ignore " +
+        "local variable information.";
+
+    /** {@code non-null;} machine to use when simulating */
+    private final Machine machine;
+
+    /** {@code non-null;} array of bytecode */
+    private final BytecodeArray code;
+
+    /** {@code non-null;} the method being simulated */
+    private ConcreteMethod method;
+
+    /** {@code non-null;} local variable information */
+    private final LocalVariableList localVariables;
+
+    /** {@code non-null;} visitor instance to use */
+    private final SimVisitor visitor;
+
+    /** {@code non-null;} options for dex output */
+    private final DexOptions dexOptions;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param machine {@code non-null;} machine to use when simulating
+     * @param method {@code non-null;} method data to use
+     * @param dexOptions {@code non-null;} options for dex output
+     */
+    public Simulator(Machine machine, ConcreteMethod method, DexOptions dexOptions) {
+        if (machine == null) {
+            throw new NullPointerException("machine == null");
+        }
+
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        if (dexOptions == null) {
+            throw new NullPointerException("dexOptions == null");
+        }
+
+        this.machine = machine;
+        this.code = method.getCode();
+        this.method = method;
+        this.localVariables = method.getLocalVariables();
+        this.visitor = new SimVisitor();
+        this.dexOptions = dexOptions;
+
+        // This check assumes class is initialized (accesses dexOptions).
+        if (method.isDefaultOrStaticInterfaceMethod()) {
+            checkInterfaceMethodDeclaration(method);
+        }
+    }
+
+    /**
+     * Simulates the effect of executing the given basic block. This modifies
+     * the passed-in frame to represent the end result.
+     *
+     * @param bb {@code non-null;} the basic block
+     * @param frame {@code non-null;} frame to operate on
+     */
+    public void simulate(ByteBlock bb, Frame frame) {
+        int end = bb.getEnd();
+
+        visitor.setFrame(frame);
+
+        try {
+            for (int off = bb.getStart(); off < end; /*off*/) {
+                int length = code.parseInstruction(off, visitor);
+                visitor.setPreviousOffset(off);
+                off += length;
+            }
+        } catch (SimException ex) {
+            frame.annotate(ex);
+            throw ex;
+        }
+    }
+
+    /**
+     * Simulates the effect of the instruction at the given offset, by
+     * making appropriate calls on the given frame.
+     *
+     * @param offset {@code offset >= 0;} offset of the instruction to simulate
+     * @param frame {@code non-null;} frame to operate on
+     * @return the length of the instruction, in bytes
+     */
+    public int simulate(int offset, Frame frame) {
+        visitor.setFrame(frame);
+        return code.parseInstruction(offset, visitor);
+    }
+
+    /**
+     * Constructs an "illegal top-of-stack" exception, for the stack
+     * manipulation opcodes.
+     */
+    private static SimException illegalTos() {
+        return new SimException("stack mismatch: illegal " +
+                "top-of-stack for opcode");
+    }
+
+    /**
+     * Returns the required array type for an array load or store
+     * instruction, based on a given implied type and an observed
+     * actual array type.
+     *
+     * <p>The interesting cases here have to do with object arrays,
+     * <code>byte[]</code>s, <code>boolean[]</code>s, and
+     * known-nulls.</p>
+     *
+     * <p>In the case of arrays of objects, we want to narrow the type
+     * to the actual array present on the stack, as long as what is
+     * present is an object type. Similarly, due to a quirk of the
+     * original bytecode representation, the instructions for dealing
+     * with <code>byte[]</code> and <code>boolean[]</code> are
+     * undifferentiated, and we aim here to return whichever one was
+     * actually present on the stack.</p>
+     *
+     * <p>In the case where there is a known-null on the stack where
+     * an array is expected, our behavior depends on the implied type
+     * of the instruction. When the implied type is a reference, we
+     * don't attempt to infer anything, as we don't know the dimension
+     * of the null constant and thus any explicit inferred type could
+     * be wrong. When the implied type is a primitive, we fall back to
+     * the implied type of the instruction. Due to the quirk described
+     * above, this means that source code that uses
+     * <code>boolean[]</code> might get translated surprisingly -- but
+     * correctly -- into an instruction that specifies a
+     * <code>byte[]</code>. It will be correct, because should the
+     * code actually execute, it will necessarily throw a
+     * <code>NullPointerException</code>, and it won't matter what
+     * opcode variant is used to achieve that result.</p>
+     *
+     * @param impliedType {@code non-null;} type implied by the
+     * instruction; is <i>not</i> an array type
+     * @param foundArrayType {@code non-null;} type found on the
+     * stack; is either an array type or a known-null
+     * @return {@code non-null;} the array type that should be
+     * required in this context
+     */
+    private static Type requiredArrayTypeFor(Type impliedType,
+            Type foundArrayType) {
+        if (foundArrayType == Type.KNOWN_NULL) {
+            return impliedType.isReference()
+                ? Type.KNOWN_NULL
+                : impliedType.getArrayType();
+        }
+
+        if ((impliedType == Type.OBJECT)
+                && foundArrayType.isArray()
+                && foundArrayType.getComponentType().isReference()) {
+            return foundArrayType;
+        }
+
+        if ((impliedType == Type.BYTE)
+                && (foundArrayType == Type.BOOLEAN_ARRAY)) {
+            /*
+             * Per above, an instruction with implied byte[] is also
+             * allowed to be used on boolean[].
+             */
+            return Type.BOOLEAN_ARRAY;
+        }
+
+        return impliedType.getArrayType();
+    }
+
+    /**
+     * Bytecode visitor used during simulation.
+     */
+    private class SimVisitor implements BytecodeArray.Visitor {
+        /**
+         * {@code non-null;} machine instance to use (just to avoid excessive
+         * cross-object field access)
+         */
+        private final Machine machine;
+
+        /**
+         * {@code null-ok;} frame to use; set with each call to
+         * {@link Simulator#simulate}
+         */
+        private Frame frame;
+
+        /** offset of the previous bytecode */
+        private int previousOffset;
+
+        /**
+         * Constructs an instance.
+         */
+        public SimVisitor() {
+            this.machine = Simulator.this.machine;
+            this.frame = null;
+        }
+
+        /**
+         * Sets the frame to act on.
+         *
+         * @param frame {@code non-null;} the frame
+         */
+        public void setFrame(Frame frame) {
+            if (frame == null) {
+                throw new NullPointerException("frame == null");
+            }
+
+            this.frame = frame;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitInvalid(int opcode, int offset, int length) {
+            throw new SimException("invalid opcode " + Hex.u1(opcode));
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitNoArgs(int opcode, int offset, int length,
+                Type type) {
+            switch (opcode) {
+                case ByteOps.NOP: {
+                    machine.clearArgs();
+                    break;
+                }
+                case ByteOps.INEG: {
+                    machine.popArgs(frame, type);
+                    break;
+                }
+                case ByteOps.I2L:
+                case ByteOps.I2F:
+                case ByteOps.I2D:
+                case ByteOps.I2B:
+                case ByteOps.I2C:
+                case ByteOps.I2S: {
+                    machine.popArgs(frame, Type.INT);
+                    break;
+                }
+                case ByteOps.L2I:
+                case ByteOps.L2F:
+                case ByteOps.L2D: {
+                    machine.popArgs(frame, Type.LONG);
+                    break;
+                }
+                case ByteOps.F2I:
+                case ByteOps.F2L:
+                case ByteOps.F2D: {
+                    machine.popArgs(frame, Type.FLOAT);
+                    break;
+                }
+                case ByteOps.D2I:
+                case ByteOps.D2L:
+                case ByteOps.D2F: {
+                    machine.popArgs(frame, Type.DOUBLE);
+                    break;
+                }
+                case ByteOps.RETURN: {
+                    machine.clearArgs();
+                    checkReturnType(Type.VOID);
+                    break;
+                }
+                case ByteOps.IRETURN: {
+                    Type checkType = type;
+                    if (type == Type.OBJECT) {
+                        /*
+                         * For an object return, use the best-known
+                         * type of the popped value.
+                         */
+                        checkType = frame.getStack().peekType(0);
+                    }
+                    machine.popArgs(frame, type);
+                    checkReturnType(checkType);
+                    break;
+                }
+                case ByteOps.POP: {
+                    Type peekType = frame.getStack().peekType(0);
+                    if (peekType.isCategory2()) {
+                        throw illegalTos();
+                    }
+                    machine.popArgs(frame, 1);
+                    break;
+                }
+                case ByteOps.ARRAYLENGTH: {
+                    Type arrayType = frame.getStack().peekType(0);
+                    if (!arrayType.isArrayOrKnownNull()) {
+                        fail("type mismatch: expected array type but encountered " +
+                             arrayType.toHuman());
+                    }
+                    machine.popArgs(frame, Type.OBJECT);
+                    break;
+                }
+                case ByteOps.ATHROW:
+                case ByteOps.MONITORENTER:
+                case ByteOps.MONITOREXIT: {
+                    machine.popArgs(frame, Type.OBJECT);
+                    break;
+                }
+                case ByteOps.IALOAD: {
+                    /*
+                     * See comment on requiredArrayTypeFor() for explanation
+                     * about what's going on here.
+                     */
+                    Type foundArrayType = frame.getStack().peekType(1);
+                    Type requiredArrayType =
+                        requiredArrayTypeFor(type, foundArrayType);
+
+                    // Make type agree with the discovered requiredArrayType.
+                    type = (requiredArrayType == Type.KNOWN_NULL)
+                        ? Type.KNOWN_NULL
+                        : requiredArrayType.getComponentType();
+
+                    machine.popArgs(frame, requiredArrayType, Type.INT);
+                    break;
+                }
+                case ByteOps.IADD:
+                case ByteOps.ISUB:
+                case ByteOps.IMUL:
+                case ByteOps.IDIV:
+                case ByteOps.IREM:
+                case ByteOps.IAND:
+                case ByteOps.IOR:
+                case ByteOps.IXOR: {
+                    machine.popArgs(frame, type, type);
+                    break;
+                }
+                case ByteOps.ISHL:
+                case ByteOps.ISHR:
+                case ByteOps.IUSHR: {
+                    machine.popArgs(frame, type, Type.INT);
+                    break;
+                }
+                case ByteOps.LCMP: {
+                    machine.popArgs(frame, Type.LONG, Type.LONG);
+                    break;
+                }
+                case ByteOps.FCMPL:
+                case ByteOps.FCMPG: {
+                    machine.popArgs(frame, Type.FLOAT, Type.FLOAT);
+                    break;
+                }
+                case ByteOps.DCMPL:
+                case ByteOps.DCMPG: {
+                    machine.popArgs(frame, Type.DOUBLE, Type.DOUBLE);
+                    break;
+                }
+                case ByteOps.IASTORE: {
+                    /*
+                     * See comment on requiredArrayTypeFor() for
+                     * explanation about what's going on here. In
+                     * addition to that, the category 1 vs. 2 thing
+                     * below is to deal with the fact that, if the
+                     * element type is category 2, we have to skip
+                     * over one extra stack slot to find the array.
+                     */
+                    ExecutionStack stack = frame.getStack();
+                    int peekDepth = type.isCategory1() ? 2 : 3;
+                    Type foundArrayType = stack.peekType(peekDepth);
+                    boolean foundArrayLocal = stack.peekLocal(peekDepth);
+
+                    Type requiredArrayType =
+                        requiredArrayTypeFor(type, foundArrayType);
+
+                    /*
+                     * Make type agree with the discovered requiredArrayType
+                     * if it has local info.
+                     */
+                    if (foundArrayLocal) {
+                        type = (requiredArrayType == Type.KNOWN_NULL)
+                            ? Type.KNOWN_NULL
+                            : requiredArrayType.getComponentType();
+                    }
+
+                    machine.popArgs(frame, requiredArrayType, Type.INT, type);
+                    break;
+                }
+                case ByteOps.POP2:
+                case ByteOps.DUP2: {
+                    ExecutionStack stack = frame.getStack();
+                    int pattern;
+
+                    if (stack.peekType(0).isCategory2()) {
+                        // "form 2" in vmspec-2
+                        machine.popArgs(frame, 1);
+                        pattern = 0x11;
+                    } else if (stack.peekType(1).isCategory1()) {
+                        // "form 1"
+                        machine.popArgs(frame, 2);
+                        pattern = 0x2121;
+                    } else {
+                        throw illegalTos();
+                    }
+
+                    if (opcode == ByteOps.DUP2) {
+                        machine.auxIntArg(pattern);
+                    }
+                    break;
+                }
+                case ByteOps.DUP: {
+                    Type peekType = frame.getStack().peekType(0);
+
+                    if (peekType.isCategory2()) {
+                        throw illegalTos();
+                    }
+
+                    machine.popArgs(frame, 1);
+                    machine.auxIntArg(0x11);
+                    break;
+                }
+                case ByteOps.DUP_X1: {
+                    ExecutionStack stack = frame.getStack();
+
+                    if (!(stack.peekType(0).isCategory1() &&
+                          stack.peekType(1).isCategory1())) {
+                        throw illegalTos();
+                    }
+
+                    machine.popArgs(frame, 2);
+                    machine.auxIntArg(0x212);
+                    break;
+                }
+                case ByteOps.DUP_X2: {
+                    ExecutionStack stack = frame.getStack();
+
+                    if (stack.peekType(0).isCategory2()) {
+                        throw illegalTos();
+                    }
+
+                    if (stack.peekType(1).isCategory2()) {
+                        // "form 2" in vmspec-2
+                        machine.popArgs(frame, 2);
+                        machine.auxIntArg(0x212);
+                    } else if (stack.peekType(2).isCategory1()) {
+                        // "form 1"
+                        machine.popArgs(frame, 3);
+                        machine.auxIntArg(0x3213);
+                    } else {
+                        throw illegalTos();
+                    }
+                    break;
+                }
+                case ByteOps.DUP2_X1: {
+                    ExecutionStack stack = frame.getStack();
+
+                    if (stack.peekType(0).isCategory2()) {
+                        // "form 2" in vmspec-2
+                        if (stack.peekType(2).isCategory2()) {
+                            throw illegalTos();
+                        }
+                        machine.popArgs(frame, 2);
+                        machine.auxIntArg(0x212);
+                    } else {
+                        // "form 1"
+                        if (stack.peekType(1).isCategory2() ||
+                            stack.peekType(2).isCategory2()) {
+                            throw illegalTos();
+                        }
+                        machine.popArgs(frame, 3);
+                        machine.auxIntArg(0x32132);
+                    }
+                    break;
+                }
+                case ByteOps.DUP2_X2: {
+                    ExecutionStack stack = frame.getStack();
+
+                    if (stack.peekType(0).isCategory2()) {
+                        if (stack.peekType(2).isCategory2()) {
+                            // "form 4" in vmspec-2
+                            machine.popArgs(frame, 2);
+                            machine.auxIntArg(0x212);
+                        } else if (stack.peekType(3).isCategory1()) {
+                            // "form 2"
+                            machine.popArgs(frame, 3);
+                            machine.auxIntArg(0x3213);
+                        } else {
+                            throw illegalTos();
+                        }
+                    } else if (stack.peekType(1).isCategory1()) {
+                        if (stack.peekType(2).isCategory2()) {
+                            // "form 3"
+                            machine.popArgs(frame, 3);
+                            machine.auxIntArg(0x32132);
+                        } else if (stack.peekType(3).isCategory1()) {
+                            // "form 1"
+                            machine.popArgs(frame, 4);
+                            machine.auxIntArg(0x432143);
+                        } else {
+                            throw illegalTos();
+                        }
+                    } else {
+                        throw illegalTos();
+                    }
+                    break;
+                }
+                case ByteOps.SWAP: {
+                    ExecutionStack stack = frame.getStack();
+
+                    if (!(stack.peekType(0).isCategory1() &&
+                          stack.peekType(1).isCategory1())) {
+                        throw illegalTos();
+                    }
+
+                    machine.popArgs(frame, 2);
+                    machine.auxIntArg(0x12);
+                    break;
+                }
+                default: {
+                    visitInvalid(opcode, offset, length);
+                    return;
+                }
+            }
+
+            machine.auxType(type);
+            machine.run(frame, offset, opcode);
+        }
+
+        /**
+         * Checks whether the prototype is compatible with returning the
+         * given type, and throws if not.
+         *
+         * @param encountered {@code non-null;} the encountered return type
+         */
+        private void checkReturnType(Type encountered) {
+            Type returnType = machine.getPrototype().getReturnType();
+
+            /*
+             * Check to see if the prototype's return type is
+             * possibly assignable from the type we encountered. This
+             * takes care of all the salient cases (types are the same,
+             * they're compatible primitive types, etc.).
+             */
+            if (!Merger.isPossiblyAssignableFrom(returnType, encountered)) {
+                fail("return type mismatch: prototype " +
+                     "indicates " + returnType.toHuman() +
+                     ", but encountered type " + encountered.toHuman());
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitLocal(int opcode, int offset, int length,
+                int idx, Type type, int value) {
+            /*
+             * Note that the "type" parameter is always the simplest
+             * type based on the original opcode, e.g., "int" for
+             * "iload" (per se) and "Object" for "aload". So, when
+             * possible, we replace the type with the one indicated in
+             * the local variable table, though we still need to check
+             * to make sure it's valid for the opcode.
+             *
+             * The reason we use (offset + length) for the localOffset
+             * for a store is because it is only after the store that
+             * the local type becomes valid. On the other hand, the
+             * type associated with a load is valid at the start of
+             * the instruction.
+             */
+            int localOffset =
+                (opcode == ByteOps.ISTORE) ? (offset + length) : offset;
+            LocalVariableList.Item local =
+                localVariables.pcAndIndexToLocal(localOffset, idx);
+            Type localType;
+
+            if (local != null) {
+                localType = local.getType();
+                if (localType.getBasicFrameType() !=
+                        type.getBasicFrameType()) {
+                    // wrong type, ignore local variable info
+                    local = null;
+                    localType = type;
+                }
+            } else {
+                localType = type;
+            }
+
+            switch (opcode) {
+                case ByteOps.ILOAD:
+                case ByteOps.RET: {
+                    machine.localArg(frame, idx);
+                    machine.localInfo(local != null);
+                    machine.auxType(type);
+                    break;
+                }
+                case ByteOps.ISTORE: {
+                    LocalItem item
+                            = (local == null) ? null : local.getLocalItem();
+                    machine.popArgs(frame, type);
+                    machine.auxType(type);
+                    machine.localTarget(idx, localType, item);
+                    break;
+                }
+                case ByteOps.IINC: {
+                    LocalItem item
+                            = (local == null) ? null : local.getLocalItem();
+                    machine.localArg(frame, idx);
+                    machine.localTarget(idx, localType, item);
+                    machine.auxType(type);
+                    machine.auxIntArg(value);
+                    machine.auxCstArg(CstInteger.make(value));
+                    break;
+                }
+                default: {
+                    visitInvalid(opcode, offset, length);
+                    return;
+                }
+            }
+
+            machine.run(frame, offset, opcode);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitConstant(int opcode, int offset, int length,
+                Constant cst, int value) {
+            switch (opcode) {
+                case ByteOps.ANEWARRAY: {
+                    machine.popArgs(frame, Type.INT);
+                    break;
+                }
+                case ByteOps.PUTSTATIC: {
+                    Type fieldType = ((CstFieldRef) cst).getType();
+                    machine.popArgs(frame, fieldType);
+                    break;
+                }
+                case ByteOps.GETFIELD:
+                case ByteOps.CHECKCAST:
+                case ByteOps.INSTANCEOF: {
+                    machine.popArgs(frame, Type.OBJECT);
+                    break;
+                }
+                case ByteOps.PUTFIELD: {
+                    Type fieldType = ((CstFieldRef) cst).getType();
+                    machine.popArgs(frame, Type.OBJECT, fieldType);
+                    break;
+                }
+                case ByteOps.INVOKEINTERFACE:
+                case ByteOps.INVOKEVIRTUAL:
+                case ByteOps.INVOKESPECIAL:
+                case ByteOps.INVOKESTATIC: {
+                    /*
+                     * Convert the interface method ref into a normal
+                     * method ref if necessary.
+                     */
+                    if (cst instanceof CstInterfaceMethodRef) {
+                        cst = ((CstInterfaceMethodRef) cst).toMethodRef();
+                        checkInvokeInterfaceSupported(opcode, (CstMethodRef) cst);
+                    }
+
+                    /*
+                     * Check whether invoke-polymorphic is required and supported.
+                     */
+                    if (cst instanceof CstMethodRef) {
+                        CstMethodRef methodRef = (CstMethodRef) cst;
+                        if (methodRef.isSignaturePolymorphic()) {
+                            checkInvokeSignaturePolymorphic(opcode);
+                        }
+                    }
+
+                    /*
+                     * Get the instance or static prototype, and use it to
+                     * direct the machine.
+                     */
+                    boolean staticMethod = (opcode == ByteOps.INVOKESTATIC);
+                    Prototype prototype
+                        = ((CstMethodRef) cst).getPrototype(staticMethod);
+                    machine.popArgs(frame, prototype);
+                    break;
+                }
+                case ByteOps.INVOKEDYNAMIC: {
+                    checkInvokeDynamicSupported(opcode);
+                    CstInvokeDynamic invokeDynamicRef = (CstInvokeDynamic) cst;
+                    Prototype prototype = invokeDynamicRef.getPrototype();
+                    machine.popArgs(frame, prototype);
+                    // Change the constant to be associated with instruction to
+                    // a call site reference.
+                    cst = invokeDynamicRef.addReference();
+                    break;
+                }
+                case ByteOps.MULTIANEWARRAY: {
+                    /*
+                     * The "value" here is the count of dimensions to
+                     * create. Make a prototype of that many "int"
+                     * types, and tell the machine to pop them. This
+                     * isn't the most efficient way in the world to do
+                     * this, but then again, multianewarray is pretty
+                     * darn rare and so not worth much effort
+                     * optimizing for.
+                     */
+                    Prototype prototype =
+                        Prototype.internInts(Type.VOID, value);
+                    machine.popArgs(frame, prototype);
+                    break;
+                }
+                case ByteOps.LDC:
+                case ByteOps.LDC_W: {
+                    if ((cst instanceof CstMethodHandle || cst instanceof CstProtoRef)) {
+                        checkConstMethodHandleSupported(cst);
+                    }
+                    machine.clearArgs();
+                    break;
+                }
+                default: {
+                    machine.clearArgs();
+                    break;
+                }
+            }
+
+            machine.auxIntArg(value);
+            machine.auxCstArg(cst);
+            machine.run(frame, offset, opcode);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitBranch(int opcode, int offset, int length,
+                int target) {
+            switch (opcode) {
+                case ByteOps.IFEQ:
+                case ByteOps.IFNE:
+                case ByteOps.IFLT:
+                case ByteOps.IFGE:
+                case ByteOps.IFGT:
+                case ByteOps.IFLE: {
+                    machine.popArgs(frame, Type.INT);
+                    break;
+                }
+                case ByteOps.IFNULL:
+                case ByteOps.IFNONNULL: {
+                    machine.popArgs(frame, Type.OBJECT);
+                    break;
+                }
+                case ByteOps.IF_ICMPEQ:
+                case ByteOps.IF_ICMPNE:
+                case ByteOps.IF_ICMPLT:
+                case ByteOps.IF_ICMPGE:
+                case ByteOps.IF_ICMPGT:
+                case ByteOps.IF_ICMPLE: {
+                    machine.popArgs(frame, Type.INT, Type.INT);
+                    break;
+                }
+                case ByteOps.IF_ACMPEQ:
+                case ByteOps.IF_ACMPNE: {
+                    machine.popArgs(frame, Type.OBJECT, Type.OBJECT);
+                    break;
+                }
+                case ByteOps.GOTO:
+                case ByteOps.JSR:
+                case ByteOps.GOTO_W:
+                case ByteOps.JSR_W: {
+                    machine.clearArgs();
+                    break;
+                }
+                default: {
+                    visitInvalid(opcode, offset, length);
+                    return;
+                }
+            }
+
+            machine.auxTargetArg(target);
+            machine.run(frame, offset, opcode);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitSwitch(int opcode, int offset, int length,
+                SwitchList cases, int padding) {
+            machine.popArgs(frame, Type.INT);
+            machine.auxIntArg(padding);
+            machine.auxSwitchArg(cases);
+            machine.run(frame, offset, opcode);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitNewarray(int offset, int length, CstType type,
+                ArrayList<Constant> initValues) {
+            machine.popArgs(frame, Type.INT);
+            machine.auxInitValues(initValues);
+            machine.auxCstArg(type);
+            machine.run(frame, offset, ByteOps.NEWARRAY);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void setPreviousOffset(int offset) {
+            previousOffset = offset;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int getPreviousOffset() {
+            return previousOffset;
+        }
+    }
+
+    private void checkConstMethodHandleSupported(Constant cst) throws SimException {
+        if (!dexOptions.apiIsSupported(DexFormat.API_CONST_METHOD_HANDLE)) {
+            fail(String.format("invalid constant type %s requires --min-sdk-version >= %d " +
+                               "(currently %d)",
+                               cst.typeName(), DexFormat.API_CONST_METHOD_HANDLE,
+                               dexOptions.minSdkVersion));
+        }
+    }
+
+    private void checkInvokeDynamicSupported(int opcode) throws SimException {
+        if (!dexOptions.apiIsSupported(DexFormat.API_METHOD_HANDLES)) {
+            fail(String.format("invalid opcode %02x - invokedynamic requires " +
+                               "--min-sdk-version >= %d (currently %d)",
+                               opcode, DexFormat.API_METHOD_HANDLES, dexOptions.minSdkVersion));
+        }
+    }
+
+    private void checkInvokeInterfaceSupported(final int opcode, CstMethodRef callee) {
+        if (opcode == ByteOps.INVOKEINTERFACE) {
+            // Invoked in the tranditional way, this is fine.
+            return;
+        }
+
+        if (dexOptions.apiIsSupported(DexFormat.API_INVOKE_INTERFACE_METHODS)) {
+            // Running at the officially support API level for default
+            // and static interface methods.
+            return;
+        }
+
+        //
+        // One might expect a hard API level for invoking interface
+        // methods. It's either okay to have code invoking static (and
+        // default) interface methods or not. Reality asks to be
+        // prepared for a little compromise here because the
+        // traditional guidance to Android developers when producing a
+        // multi-API level DEX file is to guard the use of the newer
+        // feature with an API level check, e.g.
+        //
+        // int x = (android.os.Build.VERSION.SDK_INT >= 038) ?
+        //         DoJava8Thing() : Do JavaOtherThing();
+        //
+        // This is fine advice if the bytecodes and VM semantics never
+        // change. Unfortunately, changes like Java 8 support
+        // introduce new bytecodes and also additional semantics to
+        // existing bytecodes. Invoking static and default interface
+        // methods is one of these awkward VM transitions.
+        //
+        // Experimentally invoke-static of static interface methods
+        // breaks on VMs running below API level 21. Invocations of
+        // default interface methods may soft-fail verification but so
+        // long as they are not called that's okay.
+        //
+        boolean softFail = dexOptions.allowAllInterfaceMethodInvokes;
+        if (opcode == ByteOps.INVOKESTATIC) {
+            softFail &= dexOptions.apiIsSupported(DexFormat.API_INVOKE_STATIC_INTERFACE_METHODS);
+        } else {
+            assert (opcode == ByteOps.INVOKESPECIAL) || (opcode == ByteOps.INVOKEVIRTUAL);
+        }
+
+        // Running below the officially supported API level. Fail hard
+        // unless the user has explicitly allowed this with
+        // "--allow-all-interface-method-invokes".
+        String invokeKind = (opcode == ByteOps.INVOKESTATIC) ? "static" : "default";
+        if (softFail) {
+            // The code we are warning about here should have an API check
+            // that protects it being used on API version < API_INVOKE_INTERFACE_METHODS.
+            String reason =
+                    String.format(
+                        "invoking a %s interface method %s.%s strictly requires " +
+                        "--min-sdk-version >= %d (experimental at current API level %d)",
+                        invokeKind, callee.getDefiningClass().toHuman(), callee.getNat().toHuman(),
+                        DexFormat.API_INVOKE_INTERFACE_METHODS, dexOptions.minSdkVersion);
+            warn(reason);
+        } else {
+            String reason =
+                    String.format(
+                        "invoking a %s interface method %s.%s strictly requires " +
+                        "--min-sdk-version >= %d (blocked at current API level %d)",
+                    invokeKind, callee.getDefiningClass().toHuman(), callee.getNat().toHuman(),
+                    DexFormat.API_INVOKE_INTERFACE_METHODS, dexOptions.minSdkVersion);
+            fail(reason);
+        }
+    }
+
+    private void checkInterfaceMethodDeclaration(ConcreteMethod declaredMethod) {
+        if (!dexOptions.apiIsSupported(DexFormat.API_DEFINE_INTERFACE_METHODS)) {
+            String reason
+                = String.format(
+                    "defining a %s interface method requires --min-sdk-version >= %d (currently %d)"
+                    + " for interface methods: %s.%s",
+                    declaredMethod.isStaticMethod() ? "static" : "default",
+                    DexFormat.API_DEFINE_INTERFACE_METHODS, dexOptions.minSdkVersion,
+                    declaredMethod.getDefiningClass().toHuman(), declaredMethod.getNat().toHuman());
+            warn(reason);
+        }
+    }
+
+    private void checkInvokeSignaturePolymorphic(final int opcode) {
+        if (!dexOptions.apiIsSupported(DexFormat.API_METHOD_HANDLES)) {
+            fail(String.format(
+                "invoking a signature-polymorphic requires --min-sdk-version >= %d (currently %d)",
+                DexFormat.API_METHOD_HANDLES, dexOptions.minSdkVersion));
+        } else if (opcode != ByteOps.INVOKEVIRTUAL) {
+            fail("Unsupported signature polymorphic invocation (" + ByteOps.opName(opcode) + ")");
+        }
+    }
+
+    private void fail(String reason) {
+        String message = String.format("ERROR in %s.%s: %s", method.getDefiningClass().toHuman(),
+                                       method.getNat().toHuman(), reason);
+        throw new SimException(message);
+    }
+
+    private void warn(String reason) {
+        String warning = String.format("WARNING in %s.%s: %s", method.getDefiningClass().toHuman(),
+                                       method.getNat().toHuman(), reason);
+        dexOptions.err.println(warning);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/SwitchList.java b/dx/src/com/android/dx/cf/code/SwitchList.java
new file mode 100644
index 0000000..621d728
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/SwitchList.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.util.IntList;
+import com.android.dx.util.MutabilityControl;
+
+/**
+ * List of (value, target) mappings representing the choices of a
+ * {@code tableswitch} or {@code lookupswitch} instruction. It
+ * also holds the default target for the switch.
+ */
+public final class SwitchList extends MutabilityControl {
+    /** {@code non-null;} list of test values */
+    private final IntList values;
+
+    /**
+     * {@code non-null;} list of targets corresponding to the test values; there
+     * is always one extra element in the target list, to hold the
+     * default target
+     */
+    private final IntList targets;
+
+    /** ultimate size of the list */
+    private int size;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param size {@code >= 0;} the number of elements to be in the table
+     */
+    public SwitchList(int size) {
+        super(true);
+        this.values = new IntList(size);
+        this.targets = new IntList(size + 1);
+        this.size = size;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setImmutable() {
+        values.setImmutable();
+        targets.setImmutable();
+        super.setImmutable();
+    }
+
+    /**
+     * Gets the size of the list.
+     *
+     * @return {@code >= 0;} the list size
+     */
+    public int size() {
+        return size;
+    }
+
+    /**
+     * Gets the indicated test value.
+     *
+     * @param n {@code >= 0;}, &lt; size(); which index
+     * @return the test value
+     */
+    public int getValue(int n) {
+        return values.get(n);
+    }
+
+    /**
+     * Gets the indicated target. Asking for the target at {@code size()}
+     * returns the default target.
+     *
+     * @param n {@code >= 0, <= size();} which index
+     * @return {@code >= 0;} the target
+     */
+    public int getTarget(int n) {
+        return targets.get(n);
+    }
+
+    /**
+     * Gets the default target. This is just a shorthand for
+     * {@code getTarget(size())}.
+     *
+     * @return {@code >= 0;} the default target
+     */
+    public int getDefaultTarget() {
+        return targets.get(size);
+    }
+
+    /**
+     * Gets the list of all targets. This includes one extra element at the
+     * end of the list, which holds the default target.
+     *
+     * @return {@code non-null;} the target list
+     */
+    public IntList getTargets() {
+        return targets;
+    }
+
+    /**
+     * Gets the list of all case values.
+     *
+     * @return {@code non-null;} the case value list
+     */
+    public IntList getValues() {
+        return values;
+    }
+
+    /**
+     * Sets the default target. It is only valid to call this method
+     * when all the non-default elements have been set.
+     *
+     * @param target {@code >= 0;} the absolute (not relative) default target
+     * address
+     */
+    public void setDefaultTarget(int target) {
+        throwIfImmutable();
+
+        if (target < 0) {
+            throw new IllegalArgumentException("target < 0");
+        }
+
+        if (targets.size() != size) {
+            throw new RuntimeException("non-default elements not all set");
+        }
+
+        targets.add(target);
+    }
+
+    /**
+     * Adds the given item.
+     *
+     * @param value the test value
+     * @param target {@code >= 0;} the absolute (not relative) target address
+     */
+    public void add(int value, int target) {
+        throwIfImmutable();
+
+        if (target < 0) {
+            throw new IllegalArgumentException("target < 0");
+        }
+
+        values.add(value);
+        targets.add(target);
+    }
+
+    /**
+     * Shrinks this instance if possible, removing test elements that
+     * refer to the default target. This is only valid after the instance
+     * is fully populated, including the default target (naturally).
+     */
+    public void removeSuperfluousDefaults() {
+        throwIfImmutable();
+
+        int sz = size;
+
+        if (sz != (targets.size() - 1)) {
+            throw new IllegalArgumentException("incomplete instance");
+        }
+
+        int defaultTarget = targets.get(sz);
+        int at = 0;
+
+        for (int i = 0; i < sz; i++) {
+            int target = targets.get(i);
+            if (target != defaultTarget) {
+                if (i != at) {
+                    targets.set(at, target);
+                    values.set(at, values.get(i));
+                }
+                at++;
+            }
+        }
+
+        if (at != sz) {
+            values.shrink(at);
+            targets.set(at, defaultTarget);
+            targets.shrink(at + 1);
+            size = at;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/ValueAwareMachine.java b/dx/src/com/android/dx/cf/code/ValueAwareMachine.java
new file mode 100644
index 0000000..7a99d7d
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/ValueAwareMachine.java
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.code;
+
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.Hex;
+
+/**
+ * {@link Machine} which keeps track of known values but does not do
+ * smart/realistic reference type calculations.
+ */
+public class ValueAwareMachine extends BaseMachine {
+    /**
+     * Constructs an instance.
+     *
+     * @param prototype {@code non-null;} the prototype for the associated
+     * method
+     */
+    public ValueAwareMachine(Prototype prototype) {
+        super(prototype);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void run(Frame frame, int offset, int opcode) {
+        switch (opcode) {
+            case ByteOps.NOP:
+            case ByteOps.IASTORE:
+            case ByteOps.POP:
+            case ByteOps.POP2:
+            case ByteOps.IFEQ:
+            case ByteOps.IFNE:
+            case ByteOps.IFLT:
+            case ByteOps.IFGE:
+            case ByteOps.IFGT:
+            case ByteOps.IFLE:
+            case ByteOps.IF_ICMPEQ:
+            case ByteOps.IF_ICMPNE:
+            case ByteOps.IF_ICMPLT:
+            case ByteOps.IF_ICMPGE:
+            case ByteOps.IF_ICMPGT:
+            case ByteOps.IF_ICMPLE:
+            case ByteOps.IF_ACMPEQ:
+            case ByteOps.IF_ACMPNE:
+            case ByteOps.GOTO:
+            case ByteOps.RET:
+            case ByteOps.LOOKUPSWITCH:
+            case ByteOps.IRETURN:
+            case ByteOps.RETURN:
+            case ByteOps.PUTSTATIC:
+            case ByteOps.PUTFIELD:
+            case ByteOps.ATHROW:
+            case ByteOps.MONITORENTER:
+            case ByteOps.MONITOREXIT:
+            case ByteOps.IFNULL:
+            case ByteOps.IFNONNULL: {
+                // Nothing to do for these ops in this class.
+                clearResult();
+                break;
+            }
+            case ByteOps.LDC:
+            case ByteOps.LDC2_W: {
+                setResult((TypeBearer) getAuxCst());
+                break;
+            }
+            case ByteOps.ILOAD:
+            case ByteOps.ISTORE: {
+                setResult(arg(0));
+                break;
+            }
+            case ByteOps.IALOAD:
+            case ByteOps.IADD:
+            case ByteOps.ISUB:
+            case ByteOps.IMUL:
+            case ByteOps.IDIV:
+            case ByteOps.IREM:
+            case ByteOps.INEG:
+            case ByteOps.ISHL:
+            case ByteOps.ISHR:
+            case ByteOps.IUSHR:
+            case ByteOps.IAND:
+            case ByteOps.IOR:
+            case ByteOps.IXOR:
+            case ByteOps.IINC:
+            case ByteOps.I2L:
+            case ByteOps.I2F:
+            case ByteOps.I2D:
+            case ByteOps.L2I:
+            case ByteOps.L2F:
+            case ByteOps.L2D:
+            case ByteOps.F2I:
+            case ByteOps.F2L:
+            case ByteOps.F2D:
+            case ByteOps.D2I:
+            case ByteOps.D2L:
+            case ByteOps.D2F:
+            case ByteOps.I2B:
+            case ByteOps.I2C:
+            case ByteOps.I2S:
+            case ByteOps.LCMP:
+            case ByteOps.FCMPL:
+            case ByteOps.FCMPG:
+            case ByteOps.DCMPL:
+            case ByteOps.DCMPG:
+            case ByteOps.ARRAYLENGTH: {
+                setResult(getAuxType());
+                break;
+            }
+            case ByteOps.DUP:
+            case ByteOps.DUP_X1:
+            case ByteOps.DUP_X2:
+            case ByteOps.DUP2:
+            case ByteOps.DUP2_X1:
+            case ByteOps.DUP2_X2:
+            case ByteOps.SWAP: {
+                clearResult();
+                for (int pattern = getAuxInt(); pattern != 0; pattern >>= 4) {
+                    int which = (pattern & 0x0f) - 1;
+                    addResult(arg(which));
+                }
+                break;
+            }
+
+            case ByteOps.JSR: {
+                setResult(new ReturnAddress(getAuxTarget()));
+                break;
+            }
+            case ByteOps.GETSTATIC:
+            case ByteOps.GETFIELD:
+            case ByteOps.INVOKEVIRTUAL:
+            case ByteOps.INVOKESTATIC:
+            case ByteOps.INVOKEINTERFACE: {
+                Type type = ((TypeBearer) getAuxCst()).getType();
+                if (type == Type.VOID) {
+                    clearResult();
+                } else {
+                    setResult(type);
+                }
+                break;
+            }
+            case ByteOps.INVOKESPECIAL: {
+                Type thisType = arg(0).getType();
+                if (thisType.isUninitialized()) {
+                    frame.makeInitialized(thisType);
+                }
+                Type type = ((TypeBearer) getAuxCst()).getType();
+                if (type == Type.VOID) {
+                    clearResult();
+                } else {
+                    setResult(type);
+                }
+                break;
+            }
+            case ByteOps.INVOKEDYNAMIC: {
+                Type type = ((CstCallSiteRef) getAuxCst()).getReturnType();
+                if (type == Type.VOID) {
+                    clearResult();
+                } else {
+                    setResult(type);
+                }
+                break;
+            }
+            case ByteOps.NEW: {
+                Type type = ((CstType) getAuxCst()).getClassType();
+                setResult(type.asUninitialized(offset));
+                break;
+            }
+            case ByteOps.NEWARRAY:
+            case ByteOps.CHECKCAST:
+            case ByteOps.MULTIANEWARRAY: {
+                Type type = ((CstType) getAuxCst()).getClassType();
+                setResult(type);
+                break;
+            }
+            case ByteOps.ANEWARRAY: {
+                Type type = ((CstType) getAuxCst()).getClassType();
+                setResult(type.getArrayType());
+                break;
+            }
+            case ByteOps.INSTANCEOF: {
+                setResult(Type.INT);
+                break;
+            }
+            default: {
+                throw new RuntimeException("shouldn't happen: " +
+                                           Hex.u1(opcode));
+            }
+        }
+
+        storeResults(frame);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/code/package.html b/dx/src/com/android/dx/cf/code/package.html
new file mode 100644
index 0000000..abd4e9b
--- /dev/null
+++ b/dx/src/com/android/dx/cf/code/package.html
@@ -0,0 +1,10 @@
+<body>
+<p>Implementation of classes having to do with Java simulation, such as
+is needed for verification or stack-to-register conversion.</p>
+
+<p><b>PACKAGES USED:</b>
+<ul>
+<li><code>com.android.dx.rop.pool</code></li>
+<li><code>com.android.dx.util</code></li>
+</ul>
+</body>
diff --git a/dx/src/com/android/dx/cf/cst/ConstantPoolParser.java b/dx/src/com/android/dx/cf/cst/ConstantPoolParser.java
new file mode 100644
index 0000000..c2dca59
--- /dev/null
+++ b/dx/src/com/android/dx/cf/cst/ConstantPoolParser.java
@@ -0,0 +1,450 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.cst;
+
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_Class;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_Double;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_Fieldref;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_Float;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_Integer;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_InterfaceMethodref;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_InvokeDynamic;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_Long;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_MethodHandle;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_MethodType;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_Methodref;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_NameAndType;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_String;
+import static com.android.dx.cf.cst.ConstantTags.CONSTANT_Utf8;
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstDouble;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstFloat;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstInterfaceMethodRef;
+import com.android.dx.rop.cst.CstInvokeDynamic;
+import com.android.dx.rop.cst.CstLong;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.cst.StdConstantPool;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import java.util.BitSet;
+
+/**
+ * Parser for a constant pool embedded in a class file.
+ */
+public final class ConstantPoolParser {
+    /** {@code non-null;} the bytes of the constant pool */
+    private final ByteArray bytes;
+
+    /** {@code non-null;} actual parsed constant pool contents */
+    private final StdConstantPool pool;
+
+    /** {@code non-null;} byte offsets to each cst */
+    private final int[] offsets;
+
+    /**
+     * -1 || &gt;= 10; the end offset of this constant pool in the
+     * {@code byte[]} which it came from or {@code -1} if not
+     * yet parsed
+     */
+    private int endOffset;
+
+    /** {@code null-ok;} parse observer, if any */
+    private ParseObserver observer;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bytes {@code non-null;} the bytes of the file
+     */
+    public ConstantPoolParser(ByteArray bytes) {
+        int size = bytes.getUnsignedShort(8); // constant_pool_count
+
+        this.bytes = bytes;
+        this.pool = new StdConstantPool(size);
+        this.offsets = new int[size];
+        this.endOffset = -1;
+    }
+
+    /**
+     * Sets the parse observer for this instance.
+     *
+     * @param observer {@code null-ok;} the observer
+     */
+    public void setObserver(ParseObserver observer) {
+        this.observer = observer;
+    }
+
+    /**
+     * Gets the end offset of this constant pool in the {@code byte[]}
+     * which it came from.
+     *
+     * @return {@code >= 10;} the end offset
+     */
+    public int getEndOffset() {
+        parseIfNecessary();
+        return endOffset;
+    }
+
+    /**
+     * Gets the actual constant pool.
+     *
+     * @return {@code non-null;} the constant pool
+     */
+    public StdConstantPool getPool() {
+        parseIfNecessary();
+        return pool;
+    }
+
+    /**
+     * Runs {@link #parse} if it has not yet been run successfully.
+     */
+    private void parseIfNecessary() {
+        if (endOffset < 0) {
+            parse();
+        }
+    }
+
+    /**
+     * Does the actual parsing.
+     */
+    private void parse() {
+        determineOffsets();
+
+        if (observer != null) {
+            observer.parsed(bytes, 8, 2,
+                            "constant_pool_count: " + Hex.u2(offsets.length));
+            observer.parsed(bytes, 10, 0, "\nconstant_pool:");
+            observer.changeIndent(1);
+        }
+
+        /*
+         * Track the constant value's original string type. True if constants[i] was
+         * a CONSTANT_Utf8, false for any other type including CONSTANT_string.
+         */
+        BitSet wasUtf8 = new BitSet(offsets.length);
+
+        for (int i = 1; i < offsets.length; i++) {
+            int offset = offsets[i];
+            if ((offset != 0) && (pool.getOrNull(i) == null)) {
+                parse0(i, wasUtf8);
+            }
+        }
+
+        if (observer != null) {
+            for (int i = 1; i < offsets.length; i++) {
+                Constant cst = pool.getOrNull(i);
+                if (cst == null) {
+                    continue;
+                }
+                int offset = offsets[i];
+                int nextOffset = endOffset;
+                for (int j = i + 1; j < offsets.length; j++) {
+                    int off = offsets[j];
+                    if (off != 0) {
+                        nextOffset = off;
+                        break;
+                    }
+                }
+                String human = wasUtf8.get(i)
+                        ? Hex.u2(i) + ": utf8{\"" + cst.toHuman() + "\"}"
+                        : Hex.u2(i) + ": " + cst.toString();
+                observer.parsed(bytes, offset, nextOffset - offset, human);
+            }
+
+            observer.changeIndent(-1);
+            observer.parsed(bytes, endOffset, 0, "end constant_pool");
+        }
+    }
+
+    /**
+     * Populates {@link #offsets} and also completely parse utf8 constants.
+     */
+    private void determineOffsets() {
+        int at = 10; // offset from the start of the file to the first cst
+        int lastCategory;
+
+        for (int i = 1; i < offsets.length; i += lastCategory) {
+            offsets[i] = at;
+            int tag = bytes.getUnsignedByte(at);
+            try {
+                switch (tag) {
+                    case CONSTANT_Integer:
+                    case CONSTANT_Float:
+                    case CONSTANT_Fieldref:
+                    case CONSTANT_Methodref:
+                    case CONSTANT_InterfaceMethodref:
+                    case CONSTANT_NameAndType: {
+                        lastCategory = 1;
+                        at += 5;
+                        break;
+                    }
+                    case CONSTANT_Long:
+                    case CONSTANT_Double: {
+                        lastCategory = 2;
+                        at += 9;
+                        break;
+                    }
+                    case CONSTANT_Class:
+                    case CONSTANT_String: {
+                        lastCategory = 1;
+                        at += 3;
+                        break;
+                    }
+                    case CONSTANT_Utf8: {
+                        lastCategory = 1;
+                        at += bytes.getUnsignedShort(at + 1) + 3;
+                        break;
+                    }
+                    case CONSTANT_MethodHandle: {
+                        lastCategory = 1;
+                        at += 4;
+                        break;
+                    }
+                    case CONSTANT_MethodType: {
+                        lastCategory = 1;
+                        at += 3;
+                        break;
+                    }
+                    case CONSTANT_InvokeDynamic: {
+                        lastCategory = 1;
+                        at += 5;
+                        break;
+                    }
+                    default: {
+                        throw new ParseException("unknown tag byte: " + Hex.u1(tag));
+                    }
+                }
+            } catch (ParseException ex) {
+                ex.addContext("...while preparsing cst " + Hex.u2(i) + " at offset " + Hex.u4(at));
+                throw ex;
+            }
+        }
+
+        endOffset = at;
+    }
+
+    /**
+     * Parses the constant for the given index if it hasn't already been
+     * parsed, also storing it in the constant pool. This will also
+     * have the side effect of parsing any entries the indicated one
+     * depends on.
+     *
+     * @param idx which constant
+     * @return {@code non-null;} the parsed constant
+     */
+    private Constant parse0(int idx, BitSet wasUtf8) {
+        Constant cst = pool.getOrNull(idx);
+        if (cst != null) {
+            return cst;
+        }
+
+        int at = offsets[idx];
+
+        try {
+            int tag = bytes.getUnsignedByte(at);
+            switch (tag) {
+                case CONSTANT_Utf8: {
+                    cst = parseUtf8(at);
+                    wasUtf8.set(idx);
+                    break;
+                }
+                case CONSTANT_Integer: {
+                    int value = bytes.getInt(at + 1);
+                    cst = CstInteger.make(value);
+                    break;
+                }
+                case CONSTANT_Float: {
+                    int bits = bytes.getInt(at + 1);
+                    cst = CstFloat.make(bits);
+                    break;
+                }
+                case CONSTANT_Long: {
+                    long value = bytes.getLong(at + 1);
+                    cst = CstLong.make(value);
+                    break;
+                }
+                case CONSTANT_Double: {
+                    long bits = bytes.getLong(at + 1);
+                    cst = CstDouble.make(bits);
+                    break;
+                }
+                case CONSTANT_Class: {
+                    int nameIndex = bytes.getUnsignedShort(at + 1);
+                    CstString name = (CstString) parse0(nameIndex, wasUtf8);
+                    cst = new CstType(Type.internClassName(name.getString()));
+                    break;
+                }
+                case CONSTANT_String: {
+                    int stringIndex = bytes.getUnsignedShort(at + 1);
+                    cst = parse0(stringIndex, wasUtf8);
+                    break;
+                }
+                case CONSTANT_Fieldref: {
+                    int classIndex = bytes.getUnsignedShort(at + 1);
+                    CstType type = (CstType) parse0(classIndex, wasUtf8);
+                    int natIndex = bytes.getUnsignedShort(at + 3);
+                    CstNat nat = (CstNat) parse0(natIndex, wasUtf8);
+                    cst = new CstFieldRef(type, nat);
+                    break;
+                }
+                case CONSTANT_Methodref: {
+                    int classIndex = bytes.getUnsignedShort(at + 1);
+                    CstType type = (CstType) parse0(classIndex, wasUtf8);
+                    int natIndex = bytes.getUnsignedShort(at + 3);
+                    CstNat nat = (CstNat) parse0(natIndex, wasUtf8);
+                    cst = new CstMethodRef(type, nat);
+                    break;
+                }
+                case CONSTANT_InterfaceMethodref: {
+                    int classIndex = bytes.getUnsignedShort(at + 1);
+                    CstType type = (CstType) parse0(classIndex, wasUtf8);
+                    int natIndex = bytes.getUnsignedShort(at + 3);
+                    CstNat nat = (CstNat) parse0(natIndex, wasUtf8);
+                    cst = new CstInterfaceMethodRef(type, nat);
+                    break;
+                }
+                case CONSTANT_NameAndType: {
+                    int nameIndex = bytes.getUnsignedShort(at + 1);
+                    CstString name = (CstString) parse0(nameIndex, wasUtf8);
+                    int descriptorIndex = bytes.getUnsignedShort(at + 3);
+                    CstString descriptor = (CstString) parse0(descriptorIndex, wasUtf8);
+                    cst = new CstNat(name, descriptor);
+                    break;
+                }
+                case CONSTANT_MethodHandle: {
+                    final int kind = bytes.getUnsignedByte(at + 1);
+                    final int constantIndex = bytes.getUnsignedShort(at + 2);
+                    final Constant ref;
+                    switch (kind) {
+                        case MethodHandleKind.REF_getField:
+                        case MethodHandleKind.REF_getStatic:
+                        case MethodHandleKind.REF_putField:
+                        case MethodHandleKind.REF_putStatic:
+                            ref = (CstFieldRef) parse0(constantIndex, wasUtf8);
+                            break;
+                        case MethodHandleKind.REF_invokeVirtual:
+                        case MethodHandleKind.REF_newInvokeSpecial:
+                            ref = (CstMethodRef) parse0(constantIndex, wasUtf8);
+                            break;
+                        case MethodHandleKind.REF_invokeStatic:
+                        case MethodHandleKind.REF_invokeSpecial:
+                            ref = parse0(constantIndex, wasUtf8);
+                            if (!(ref instanceof CstMethodRef
+                                || ref instanceof CstInterfaceMethodRef)) {
+                              throw new ParseException(
+                                  "Unsupported ref constant type for MethodHandle "
+                                  + ref.getClass());
+                            }
+                            break;
+                        case MethodHandleKind.REF_invokeInterface:
+                            ref = (CstInterfaceMethodRef) parse0(constantIndex, wasUtf8);
+                            break;
+                        default:
+                            throw new ParseException("Unsupported MethodHandle kind: " + kind);
+                    }
+
+                    final int methodHandleType = getMethodHandleTypeForKind(kind);
+                    cst = CstMethodHandle.make(methodHandleType, ref);
+                    break;
+                }
+                case CONSTANT_MethodType: {
+                    int descriptorIndex = bytes.getUnsignedShort(at + 1);
+                    CstString descriptor = (CstString) parse0(descriptorIndex, wasUtf8);
+                    cst = CstProtoRef.make(descriptor);
+                    break;
+                }
+                case CONSTANT_InvokeDynamic: {
+                    int bootstrapMethodIndex = bytes.getUnsignedShort(at + 1);
+                    int natIndex = bytes.getUnsignedShort(at + 3);
+                    CstNat nat = (CstNat) parse0(natIndex, wasUtf8);
+                    cst = CstInvokeDynamic.make(bootstrapMethodIndex, nat);
+                    break;
+                }
+                default: {
+                    throw new ParseException("unknown tag byte: " + Hex.u1(tag));
+                }
+            }
+        } catch (ParseException ex) {
+            ex.addContext("...while parsing cst " + Hex.u2(idx) +
+                          " at offset " + Hex.u4(at));
+            throw ex;
+        } catch (RuntimeException ex) {
+            ParseException pe = new ParseException(ex);
+            pe.addContext("...while parsing cst " + Hex.u2(idx) +
+                          " at offset " + Hex.u4(at));
+            throw pe;
+        }
+
+        pool.set(idx, cst);
+        return cst;
+    }
+
+    /**
+     * Parses a utf8 constant.
+     *
+     * @param at offset to the start of the constant (where the tag byte is)
+     * @return {@code non-null;} the parsed value
+     */
+    private CstString parseUtf8(int at) {
+        int length = bytes.getUnsignedShort(at + 1);
+
+        at += 3; // Skip to the data.
+
+        ByteArray ubytes = bytes.slice(at, at + length);
+
+        try {
+            return new CstString(ubytes);
+        } catch (IllegalArgumentException ex) {
+            // Translate the exception
+            throw new ParseException(ex);
+        }
+    }
+
+    private static int getMethodHandleTypeForKind(int kind) {
+        switch (kind) {
+            case MethodHandleKind.REF_getField:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_INSTANCE_GET;
+            case MethodHandleKind.REF_getStatic:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_STATIC_GET;
+            case MethodHandleKind.REF_putField:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_INSTANCE_PUT;
+            case MethodHandleKind.REF_putStatic:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_STATIC_PUT;
+            case MethodHandleKind.REF_invokeVirtual:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_INVOKE_INSTANCE;
+            case MethodHandleKind.REF_invokeStatic:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_INVOKE_STATIC;
+            case MethodHandleKind.REF_invokeSpecial:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_INVOKE_DIRECT;
+            case MethodHandleKind.REF_newInvokeSpecial:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_INVOKE_CONSTRUCTOR;
+            case MethodHandleKind.REF_invokeInterface:
+                return CstMethodHandle.METHOD_HANDLE_TYPE_INVOKE_INTERFACE;
+        }
+        throw new IllegalArgumentException("invalid kind: " + kind);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/cst/ConstantTags.java b/dx/src/com/android/dx/cf/cst/ConstantTags.java
new file mode 100644
index 0000000..56ef4d7
--- /dev/null
+++ b/dx/src/com/android/dx/cf/cst/ConstantTags.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.cst;
+
+/**
+ * Tags for constant pool constants.
+ */
+public interface ConstantTags {
+    /** tag for a {@code CONSTANT_Utf8_info} */
+    int CONSTANT_Utf8 = 1;
+
+    /** tag for a {@code CONSTANT_Integer_info} */
+    int CONSTANT_Integer = 3;
+
+    /** tag for a {@code CONSTANT_Float_info} */
+    int CONSTANT_Float = 4;
+
+    /** tag for a {@code CONSTANT_Long_info} */
+    int CONSTANT_Long = 5;
+
+    /** tag for a {@code CONSTANT_Double_info} */
+    int CONSTANT_Double = 6;
+
+    /** tag for a {@code CONSTANT_Class_info} */
+    int CONSTANT_Class = 7;
+
+    /** tag for a {@code CONSTANT_String_info} */
+    int CONSTANT_String = 8;
+
+    /** tag for a {@code CONSTANT_Fieldref_info} */
+    int CONSTANT_Fieldref = 9;
+
+    /** tag for a {@code CONSTANT_Methodref_info} */
+    int CONSTANT_Methodref = 10;
+
+    /** tag for a {@code CONSTANT_InterfaceMethodref_info} */
+    int CONSTANT_InterfaceMethodref = 11;
+
+    /** tag for a {@code CONSTANT_NameAndType_info} */
+    int CONSTANT_NameAndType = 12;
+
+    /** tag for a {@code CONSTANT_MethodHandle} */
+    int CONSTANT_MethodHandle = 15;
+
+    /** tag for a {@code CONSTANT_MethodType} */
+    int CONSTANT_MethodType = 16;
+
+    /** tag for a {@code CONSTANT_InvokeDynamic} */
+    int CONSTANT_InvokeDynamic = 18;
+}
diff --git a/dx/src/com/android/dx/cf/cst/MethodHandleKind.java b/dx/src/com/android/dx/cf/cst/MethodHandleKind.java
new file mode 100644
index 0000000..e92dbf2
--- /dev/null
+++ b/dx/src/com/android/dx/cf/cst/MethodHandleKind.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.cst;
+
+/**
+ * Method Handle kinds for {@code CONSTANT_MethodHandle_info} constants.
+ */
+public interface MethodHandleKind {
+    /** A method handle that gets an instance field. */
+    int REF_getField = 1;
+
+    /** A method handle that gets a static field. */
+    int REF_getStatic = 2;
+
+    /** A method handle that sets an instance field. */
+    int REF_putField = 3;
+
+    /** A method handle that sets a static field. */
+    int REF_putStatic = 4;
+
+    /** A method handle for {@code invokevirtual}. */
+    int REF_invokeVirtual = 5;
+
+    /** A method handle for {@code invokestatic}. */
+    int REF_invokeStatic = 6;
+
+    /** A method handle for {@code invokespecial}. */
+    int REF_invokeSpecial = 7;
+
+    /** A method handle for invoking a constructor. */
+    int REF_newInvokeSpecial = 8;
+
+    /** A method handle for {@code invokeinterface}. */
+    int REF_invokeInterface = 9;
+}
diff --git a/dx/src/com/android/dx/cf/direct/AnnotationParser.java b/dx/src/com/android/dx/cf/direct/AnnotationParser.java
new file mode 100644
index 0000000..f766694
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/AnnotationParser.java
@@ -0,0 +1,470 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.rop.annotation.Annotation;
+import com.android.dx.rop.annotation.AnnotationVisibility;
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.rop.annotation.NameValuePair;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.rop.cst.CstAnnotation;
+import com.android.dx.rop.cst.CstArray;
+import com.android.dx.rop.cst.CstBoolean;
+import com.android.dx.rop.cst.CstByte;
+import com.android.dx.rop.cst.CstChar;
+import com.android.dx.rop.cst.CstDouble;
+import com.android.dx.rop.cst.CstEnumRef;
+import com.android.dx.rop.cst.CstFloat;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstLong;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstShort;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import java.io.IOException;
+
+/**
+ * Parser for annotations.
+ */
+public final class AnnotationParser {
+    /** {@code non-null;} class file being parsed */
+    private final DirectClassFile cf;
+
+    /** {@code non-null;} constant pool to use */
+    private final ConstantPool pool;
+
+    /** {@code non-null;} bytes of the attribute data */
+    private final ByteArray bytes;
+
+    /** {@code null-ok;} parse observer, if any */
+    private final ParseObserver observer;
+
+    /** {@code non-null;} input stream to parse from */
+    private final ByteArray.MyDataInputStream input;
+
+    /**
+     * {@code non-null;} cursor for use when informing the observer of what
+     * was parsed
+     */
+    private int parseCursor;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param cf {@code non-null;} class file to parse from
+     * @param offset {@code >= 0;} offset into the class file data to parse at
+     * @param length {@code >= 0;} number of bytes left in the attribute data
+     * @param observer {@code null-ok;} parse observer to notify, if any
+     */
+    public AnnotationParser(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (cf == null) {
+            throw new NullPointerException("cf == null");
+        }
+
+        this.cf = cf;
+        this.pool = cf.getConstantPool();
+        this.observer = observer;
+        this.bytes = cf.getBytes().slice(offset, offset + length);
+        this.input = bytes.makeDataInputStream();
+        this.parseCursor = 0;
+    }
+
+    /**
+     * Parses an annotation value ({@code element_value}) attribute.
+     *
+     * @return {@code non-null;} the parsed constant value
+     */
+    public Constant parseValueAttribute() {
+        Constant result;
+
+        try {
+            result = parseValue();
+
+            if (input.available() != 0) {
+                throw new ParseException("extra data in attribute");
+            }
+        } catch (IOException ex) {
+            // ByteArray.MyDataInputStream should never throw.
+            throw new RuntimeException("shouldn't happen", ex);
+        }
+
+        return result;
+    }
+
+    /**
+     * Parses a parameter annotation attribute.
+     *
+     * @param visibility {@code non-null;} visibility of the parsed annotations
+     * @return {@code non-null;} the parsed list of lists of annotations
+     */
+    public AnnotationsList parseParameterAttribute(
+            AnnotationVisibility visibility) {
+        AnnotationsList result;
+
+        try {
+            result = parseAnnotationsList(visibility);
+
+            if (input.available() != 0) {
+                throw new ParseException("extra data in attribute");
+            }
+        } catch (IOException ex) {
+            // ByteArray.MyDataInputStream should never throw.
+            throw new RuntimeException("shouldn't happen", ex);
+        }
+
+        return result;
+    }
+
+    /**
+     * Parses an annotation attribute, per se.
+     *
+     * @param visibility {@code non-null;} visibility of the parsed annotations
+     * @return {@code non-null;} the list of annotations read from the attribute
+     * data
+     */
+    public Annotations parseAnnotationAttribute(
+            AnnotationVisibility visibility) {
+        Annotations result;
+
+        try {
+            result = parseAnnotations(visibility);
+
+            if (input.available() != 0) {
+                throw new ParseException("extra data in attribute");
+            }
+        } catch (IOException ex) {
+            // ByteArray.MyDataInputStream should never throw.
+            throw new RuntimeException("shouldn't happen", ex);
+        }
+
+        return result;
+    }
+
+    /**
+     * Parses a list of annotation lists.
+     *
+     * @param visibility {@code non-null;} visibility of the parsed annotations
+     * @return {@code non-null;} the list of annotation lists read from the attribute
+     * data
+     */
+    private AnnotationsList parseAnnotationsList(
+            AnnotationVisibility visibility) throws IOException {
+        int count = input.readUnsignedByte();
+
+        if (observer != null) {
+            parsed(1, "num_parameters: " + Hex.u1(count));
+        }
+
+        AnnotationsList outerList = new AnnotationsList(count);
+
+        for (int i = 0; i < count; i++) {
+            if (observer != null) {
+                parsed(0, "parameter_annotations[" + i + "]:");
+                changeIndent(1);
+            }
+
+            Annotations annotations = parseAnnotations(visibility);
+            outerList.set(i, annotations);
+
+            if (observer != null) {
+                observer.changeIndent(-1);
+            }
+        }
+
+        outerList.setImmutable();
+        return outerList;
+    }
+
+    /**
+     * Parses an annotation list.
+     *
+     * @param visibility {@code non-null;} visibility of the parsed annotations
+     * @return {@code non-null;} the list of annotations read from the attribute
+     * data
+     */
+    private Annotations parseAnnotations(AnnotationVisibility visibility)
+            throws IOException {
+        int count = input.readUnsignedShort();
+
+        if (observer != null) {
+            parsed(2, "num_annotations: " + Hex.u2(count));
+        }
+
+        Annotations annotations = new Annotations();
+
+        for (int i = 0; i < count; i++) {
+            if (observer != null) {
+                parsed(0, "annotations[" + i + "]:");
+                changeIndent(1);
+            }
+
+            Annotation annotation = parseAnnotation(visibility);
+            annotations.add(annotation);
+
+            if (observer != null) {
+                observer.changeIndent(-1);
+            }
+        }
+
+        annotations.setImmutable();
+        return annotations;
+    }
+
+    /**
+     * Parses a single annotation.
+     *
+     * @param visibility {@code non-null;} visibility of the parsed annotation
+     * @return {@code non-null;} the parsed annotation
+     */
+    private Annotation parseAnnotation(AnnotationVisibility visibility)
+            throws IOException {
+        requireLength(4);
+
+        int typeIndex = input.readUnsignedShort();
+        int numElements = input.readUnsignedShort();
+        CstString typeString = (CstString) pool.get(typeIndex);
+        CstType type = new CstType(Type.intern(typeString.getString()));
+
+        if (observer != null) {
+            parsed(2, "type: " + type.toHuman());
+            parsed(2, "num_elements: " + numElements);
+        }
+
+        Annotation annotation = new Annotation(type, visibility);
+
+        for (int i = 0; i < numElements; i++) {
+            if (observer != null) {
+                parsed(0, "elements[" + i + "]:");
+                changeIndent(1);
+            }
+
+            NameValuePair element = parseElement();
+            annotation.add(element);
+
+            if (observer != null) {
+                changeIndent(-1);
+            }
+        }
+
+        annotation.setImmutable();
+        return annotation;
+    }
+
+    /**
+     * Parses a {@link NameValuePair}.
+     *
+     * @return {@code non-null;} the parsed element
+     */
+    private NameValuePair parseElement() throws IOException {
+        requireLength(5);
+
+        int elementNameIndex = input.readUnsignedShort();
+        CstString elementName = (CstString) pool.get(elementNameIndex);
+
+        if (observer != null) {
+            parsed(2, "element_name: " + elementName.toHuman());
+            parsed(0, "value: ");
+            changeIndent(1);
+        }
+
+        Constant value = parseValue();
+
+        if (observer != null) {
+            changeIndent(-1);
+        }
+
+        return new NameValuePair(elementName, value);
+    }
+
+    /**
+     * Parses an annotation value.
+     *
+     * @return {@code non-null;} the parsed value
+     */
+    private Constant parseValue() throws IOException {
+        int tag = input.readUnsignedByte();
+
+        if (observer != null) {
+            CstString humanTag = new CstString(Character.toString((char) tag));
+            parsed(1, "tag: " + humanTag.toQuoted());
+        }
+
+        switch (tag) {
+            case 'B': {
+                CstInteger value = (CstInteger) parseConstant();
+                return CstByte.make(value.getValue());
+            }
+            case 'C': {
+                CstInteger value = (CstInteger) parseConstant();
+                int intValue = value.getValue();
+                return CstChar.make(value.getValue());
+            }
+            case 'D': {
+                CstDouble value = (CstDouble) parseConstant();
+                return value;
+            }
+            case 'F': {
+                CstFloat value = (CstFloat) parseConstant();
+                return value;
+            }
+            case 'I': {
+                CstInteger value = (CstInteger) parseConstant();
+                return value;
+            }
+            case 'J': {
+                CstLong value = (CstLong) parseConstant();
+                return value;
+            }
+            case 'S': {
+                CstInteger value = (CstInteger) parseConstant();
+                return CstShort.make(value.getValue());
+            }
+            case 'Z': {
+                CstInteger value = (CstInteger) parseConstant();
+                return CstBoolean.make(value.getValue());
+            }
+            case 'c': {
+                int classInfoIndex = input.readUnsignedShort();
+                CstString value = (CstString) pool.get(classInfoIndex);
+                Type type = Type.internReturnType(value.getString());
+
+                if (observer != null) {
+                    parsed(2, "class_info: " + type.toHuman());
+                }
+
+                return new CstType(type);
+            }
+            case 's': {
+                return parseConstant();
+            }
+            case 'e': {
+                requireLength(4);
+
+                int typeNameIndex = input.readUnsignedShort();
+                int constNameIndex = input.readUnsignedShort();
+                CstString typeName = (CstString) pool.get(typeNameIndex);
+                CstString constName = (CstString) pool.get(constNameIndex);
+
+                if (observer != null) {
+                    parsed(2, "type_name: " + typeName.toHuman());
+                    parsed(2, "const_name: " + constName.toHuman());
+                }
+
+                return new CstEnumRef(new CstNat(constName, typeName));
+            }
+            case '@': {
+                Annotation annotation =
+                    parseAnnotation(AnnotationVisibility.EMBEDDED);
+                return new CstAnnotation(annotation);
+            }
+            case '[': {
+                requireLength(2);
+
+                int numValues = input.readUnsignedShort();
+                CstArray.List list = new CstArray.List(numValues);
+
+                if (observer != null) {
+                    parsed(2, "num_values: " + numValues);
+                    changeIndent(1);
+                }
+
+                for (int i = 0; i < numValues; i++) {
+                    if (observer != null) {
+                        changeIndent(-1);
+                        parsed(0, "element_value[" + i + "]:");
+                        changeIndent(1);
+                    }
+                    list.set(i, parseValue());
+                }
+
+                if (observer != null) {
+                    changeIndent(-1);
+                }
+
+                list.setImmutable();
+                return new CstArray(list);
+            }
+            default: {
+                throw new ParseException("unknown annotation tag: " +
+                        Hex.u1(tag));
+            }
+        }
+    }
+
+    /**
+     * Helper for {@link #parseValue}, which parses a constant reference
+     * and returns the referred-to constant value.
+     *
+     * @return {@code non-null;} the parsed value
+     */
+    private Constant parseConstant() throws IOException {
+        int constValueIndex = input.readUnsignedShort();
+        Constant value = (Constant) pool.get(constValueIndex);
+
+        if (observer != null) {
+            String human = (value instanceof CstString)
+                ? ((CstString) value).toQuoted()
+                : value.toHuman();
+            parsed(2, "constant_value: " + human);
+        }
+
+        return value;
+    }
+
+    /**
+     * Helper which will throw an exception if the given number of bytes
+     * is not available to be read.
+     *
+     * @param requiredLength the number of required bytes
+     */
+    private void requireLength(int requiredLength) throws IOException {
+        if (input.available() < requiredLength) {
+            throw new ParseException("truncated annotation attribute");
+        }
+    }
+
+    /**
+     * Helper which indicates that some bytes were just parsed. This should
+     * only be used (for efficiency sake) if the parse is known to be
+     * observed.
+     *
+     * @param length {@code >= 0;} number of bytes parsed
+     * @param message {@code non-null;} associated message
+     */
+    private void parsed(int length, String message) {
+        observer.parsed(bytes, parseCursor, length, message);
+        parseCursor += length;
+    }
+
+    /**
+     * Convenience wrapper that simply calls through to
+     * {@code observer.changeIndent()}.
+     *
+     * @param indent the amount to change the indent by
+     */
+    private void changeIndent(int indent) {
+        observer.changeIndent(indent);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/AttributeFactory.java b/dx/src/com/android/dx/cf/direct/AttributeFactory.java
new file mode 100644
index 0000000..f7486eb
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/AttributeFactory.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.attrib.RawAttribute;
+import com.android.dx.cf.iface.Attribute;
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+
+/**
+ * Factory capable of instantiating various {@link Attribute} subclasses
+ * depending on the context and name.
+ */
+public class AttributeFactory {
+    /** context for attributes on class files */
+    public static final int CTX_CLASS = 0;
+
+    /** context for attributes on fields */
+    public static final int CTX_FIELD = 1;
+
+    /** context for attributes on methods */
+    public static final int CTX_METHOD = 2;
+
+    /** context for attributes on code attributes */
+    public static final int CTX_CODE = 3;
+
+    /** number of contexts */
+    public static final int CTX_COUNT = 4;
+
+    /**
+     * Constructs an instance.
+     */
+    public AttributeFactory() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Parses and makes an attribute based on the bytes at the
+     * indicated position in the given array. This method figures out
+     * the name, and then does all the setup to call on to {@link #parse0},
+     * which does the actual construction.
+     *
+     * @param cf {@code non-null;} class file to parse from
+     * @param context context to parse in; one of the {@code CTX_*}
+     * constants
+     * @param offset offset into {@code dcf}'s {@code bytes}
+     * to start parsing at
+     * @param observer {@code null-ok;} parse observer to report to, if any
+     * @return {@code non-null;} an appropriately-constructed {@link Attribute}
+     */
+    public final Attribute parse(DirectClassFile cf, int context, int offset,
+                                 ParseObserver observer) {
+        if (cf == null) {
+            throw new NullPointerException("cf == null");
+        }
+
+        if ((context < 0) || (context >= CTX_COUNT)) {
+            throw new IllegalArgumentException("bad context");
+        }
+
+        CstString name = null;
+
+        try {
+            ByteArray bytes = cf.getBytes();
+            ConstantPool pool = cf.getConstantPool();
+            int nameIdx = bytes.getUnsignedShort(offset);
+            int length = bytes.getInt(offset + 2);
+
+            name = (CstString) pool.get(nameIdx);
+
+            if (observer != null) {
+                observer.parsed(bytes, offset, 2,
+                                "name: " + name.toHuman());
+                observer.parsed(bytes, offset + 2, 4,
+                                "length: " + Hex.u4(length));
+            }
+
+            return parse0(cf, context, name.getString(), offset + 6, length,
+                          observer);
+        } catch (ParseException ex) {
+            ex.addContext("...while parsing " +
+                    ((name != null) ? (name.toHuman() + " ") : "") +
+                    "attribute at offset " + Hex.u4(offset));
+            throw ex;
+        }
+    }
+
+    /**
+     * Parses attribute content. The base class implements this by constructing
+     * an instance of {@link RawAttribute}. Subclasses are expected to
+     * override this to do something better in most cases.
+     *
+     * @param cf {@code non-null;} class file to parse from
+     * @param context context to parse in; one of the {@code CTX_*}
+     * constants
+     * @param name {@code non-null;} the attribute name
+     * @param offset offset into {@code bytes} to start parsing at; this
+     * is the offset to the start of attribute data, not to the header
+     * @param length the length of the attribute data
+     * @param observer {@code null-ok;} parse observer to report to, if any
+     * @return {@code non-null;} an appropriately-constructed {@link Attribute}
+     */
+    protected Attribute parse0(DirectClassFile cf, int context, String name,
+                               int offset, int length,
+                               ParseObserver observer) {
+        ByteArray bytes = cf.getBytes();
+        ConstantPool pool = cf.getConstantPool();
+        Attribute result = new RawAttribute(name, bytes, offset, length, pool);
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, length, "attribute data");
+        }
+
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/AttributeListParser.java b/dx/src/com/android/dx/cf/direct/AttributeListParser.java
new file mode 100644
index 0000000..2715e6a
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/AttributeListParser.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.iface.Attribute;
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.cf.iface.StdAttributeList;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+
+/**
+ * Parser for lists of attributes.
+ */
+final /*package*/ class AttributeListParser {
+    /** {@code non-null;} the class file to parse from */
+    private final DirectClassFile cf;
+
+    /** attribute parsing context */
+    private final int context;
+
+    /** offset in the byte array of the classfile to the start of the list */
+    private final int offset;
+
+    /** {@code non-null;} attribute factory to use */
+    private final AttributeFactory attributeFactory;
+
+    /** {@code non-null;} list of parsed attributes */
+    private final StdAttributeList list;
+
+    /** {@code >= -1;} the end offset of this list in the byte array of the
+     * classfile, or {@code -1} if not yet parsed */
+    private int endOffset;
+
+    /** {@code null-ok;} parse observer, if any */
+    private ParseObserver observer;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param cf {@code non-null;} class file to parse from
+     * @param context attribute parsing context (see {@link AttributeFactory})
+     * @param offset offset in {@code bytes} to the start of the list
+     * @param attributeFactory {@code non-null;} attribute factory to use
+     */
+    public AttributeListParser(DirectClassFile cf, int context, int offset,
+                               AttributeFactory attributeFactory) {
+        if (cf == null) {
+            throw new NullPointerException("cf == null");
+        }
+
+        if (attributeFactory == null) {
+            throw new NullPointerException("attributeFactory == null");
+        }
+
+        int size = cf.getBytes().getUnsignedShort(offset);
+
+        this.cf = cf;
+        this.context = context;
+        this.offset = offset;
+        this.attributeFactory = attributeFactory;
+        this.list = new StdAttributeList(size);
+        this.endOffset = -1;
+    }
+
+    /**
+     * Sets the parse observer for this instance.
+     *
+     * @param observer {@code null-ok;} the observer
+     */
+    public void setObserver(ParseObserver observer) {
+        this.observer = observer;
+    }
+
+    /**
+     * Gets the end offset of this constant pool in the {@code byte[]}
+     * which it came from.
+     *
+     * @return {@code >= 0;} the end offset
+     */
+    public int getEndOffset() {
+        parseIfNecessary();
+        return endOffset;
+    }
+
+    /**
+     * Gets the parsed list.
+     *
+     * @return {@code non-null;} the list
+     */
+    public StdAttributeList getList() {
+        parseIfNecessary();
+        return list;
+    }
+
+    /**
+     * Runs {@link #parse} if it has not yet been run successfully.
+     */
+    private void parseIfNecessary() {
+        if (endOffset < 0) {
+            parse();
+        }
+    }
+
+    /**
+     * Does the actual parsing.
+     */
+    private void parse() {
+        int sz = list.size();
+        int at = offset + 2; // Skip the count.
+
+        ByteArray bytes = cf.getBytes();
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                            "attributes_count: " + Hex.u2(sz));
+        }
+
+        for (int i = 0; i < sz; i++) {
+            try {
+                if (observer != null) {
+                    observer.parsed(bytes, at, 0,
+                                    "\nattributes[" + i + "]:\n");
+                    observer.changeIndent(1);
+                }
+
+                Attribute attrib =
+                    attributeFactory.parse(cf, context, at, observer);
+
+                at += attrib.byteLength();
+                list.set(i, attrib);
+
+                if (observer != null) {
+                    observer.changeIndent(-1);
+                    observer.parsed(bytes, at, 0,
+                                    "end attributes[" + i + "]\n");
+                }
+            } catch (ParseException ex) {
+                ex.addContext("...while parsing attributes[" + i + "]");
+                throw ex;
+            } catch (RuntimeException ex) {
+                ParseException pe = new ParseException(ex);
+                pe.addContext("...while parsing attributes[" + i + "]");
+                throw pe;
+            }
+        }
+
+        endOffset = at;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/ClassPathOpener.java b/dx/src/com/android/dx/cf/direct/ClassPathOpener.java
new file mode 100644
index 0000000..2b0f680
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/ClassPathOpener.java
@@ -0,0 +1,292 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dex.util.FileUtils;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+/**
+ * Opens all the class files found in a class path element. Path elements
+ * can point to class files, {jar,zip,apk} files, or directories containing
+ * class files.
+ */
+public class ClassPathOpener {
+
+    /** {@code non-null;} pathname to start with */
+    private final String pathname;
+    /** {@code non-null;} callback interface */
+    private final Consumer consumer;
+    /**
+     * If true, sort such that classes appear before their inner
+     * classes and "package-info" occurs before all other classes in that
+     * package.
+     */
+    private final boolean sort;
+    private FileNameFilter filter;
+
+    /**
+     * Callback interface for {@code ClassOpener}.
+     */
+    public interface Consumer {
+
+        /**
+         * Provides the file name and byte array for a class path element.
+         *
+         * @param name {@code non-null;} filename of element. May not be a valid
+         * filesystem path.
+         *
+         * @param lastModified milliseconds since 1970-Jan-1 00:00:00 GMT
+         * @param bytes {@code non-null;} file data
+         * @return true on success. Result is or'd with all other results
+         * from {@code processFileBytes} and returned to the caller
+         * of {@code process()}.
+         */
+        boolean processFileBytes(String name, long lastModified, byte[] bytes);
+
+        /**
+         * Informs consumer that an exception occurred while processing
+         * this path element. Processing will continue if possible.
+         *
+         * @param ex {@code non-null;} exception
+         */
+        void onException(Exception ex);
+
+        /**
+         * Informs consumer that processing of an archive file has begun.
+         *
+         * @param file {@code non-null;} archive file being processed
+         */
+        void onProcessArchiveStart(File file);
+    }
+
+    /**
+     * Filter interface for {@code ClassOpener}.
+     */
+    public interface FileNameFilter {
+
+        boolean accept(String path);
+    }
+
+    /**
+     * An accept all filter.
+     */
+    public static final FileNameFilter acceptAll = new FileNameFilter() {
+
+        @Override
+        public boolean accept(String path) {
+            return true;
+        }
+    };
+
+    /**
+     * Constructs an instance.
+     *
+     * @param pathname {@code non-null;} path element to process
+     * @param sort if true, sort such that classes appear before their inner
+     * classes and "package-info" occurs before all other classes in that
+     * package.
+     * @param consumer {@code non-null;} callback interface
+     */
+    public ClassPathOpener(String pathname, boolean sort, Consumer consumer) {
+        this(pathname, sort, acceptAll, consumer);
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param pathname {@code non-null;} path element to process
+     * @param sort if true, sort such that classes appear before their inner
+     * classes and "package-info" occurs before all other classes in that
+     * package.
+     * @param consumer {@code non-null;} callback interface
+     */
+    public ClassPathOpener(String pathname, boolean sort, FileNameFilter filter,
+            Consumer consumer) {
+        this.pathname = pathname;
+        this.sort = sort;
+        this.consumer = consumer;
+        this.filter = filter;
+    }
+
+    /**
+     * Processes a path element.
+     *
+     * @return the OR of all return values
+     * from {@code Consumer.processFileBytes()}.
+     */
+    public boolean process() {
+        File file = new File(pathname);
+
+        return processOne(file, true);
+    }
+
+    /**
+     * Processes one file.
+     *
+     * @param file {@code non-null;} the file to process
+     * @param topLevel whether this is a top-level file (that is,
+     * specified directly on the commandline)
+     * @return whether any processing actually happened
+     */
+    private boolean processOne(File file, boolean topLevel) {
+        try {
+            if (file.isDirectory()) {
+                return processDirectory(file, topLevel);
+            }
+
+            String path = file.getPath();
+
+            if (path.endsWith(".zip") ||
+                    path.endsWith(".jar") ||
+                    path.endsWith(".apk")) {
+                return processArchive(file);
+            }
+            if (filter.accept(path)) {
+                byte[] bytes = FileUtils.readFile(file);
+                return consumer.processFileBytes(path, file.lastModified(), bytes);
+            } else {
+                return false;
+            }
+        } catch (Exception ex) {
+            consumer.onException(ex);
+            return false;
+        }
+    }
+
+    /**
+     * Sorts java class names such that outer classes preceed their inner
+     * classes and "package-info" preceeds all other classes in its package.
+     *
+     * @param a {@code non-null;} first class name
+     * @param b {@code non-null;} second class name
+     * @return {@code compareTo()}-style result
+     */
+    private static int compareClassNames(String a, String b) {
+        // Ensure inner classes sort second
+        a = a.replace('$','0');
+        b = b.replace('$','0');
+
+        /*
+         * Assuming "package-info" only occurs at the end, ensures package-info
+         * sorts first.
+         */
+        a = a.replace("package-info", "");
+        b = b.replace("package-info", "");
+
+        return a.compareTo(b);
+    }
+
+    /**
+     * Processes a directory recursively.
+     *
+     * @param dir {@code non-null;} file representing the directory
+     * @param topLevel whether this is a top-level directory (that is,
+     * specified directly on the commandline)
+     * @return whether any processing actually happened
+     */
+    private boolean processDirectory(File dir, boolean topLevel) {
+        if (topLevel) {
+            dir = new File(dir, ".");
+        }
+
+        File[] files = dir.listFiles();
+        int len = files.length;
+        boolean any = false;
+
+        if (sort) {
+            Arrays.sort(files, new Comparator<File>() {
+                @Override
+                public int compare(File a, File b) {
+                    return compareClassNames(a.getName(), b.getName());
+                }
+            });
+        }
+
+        for (int i = 0; i < len; i++) {
+            any |= processOne(files[i], false);
+        }
+
+        return any;
+    }
+
+    /**
+     * Processes the contents of an archive ({@code .zip},
+     * {@code .jar}, or {@code .apk}).
+     *
+     * @param file {@code non-null;} archive file to process
+     * @return whether any processing actually happened
+     * @throws IOException on i/o problem
+     */
+    private boolean processArchive(File file) throws IOException {
+        ZipFile zip = new ZipFile(file);
+
+        ArrayList<? extends java.util.zip.ZipEntry> entriesList
+                = Collections.list(zip.entries());
+
+        if (sort) {
+            Collections.sort(entriesList, new Comparator<ZipEntry>() {
+               @Override
+               public int compare (ZipEntry a, ZipEntry b) {
+                   return compareClassNames(a.getName(), b.getName());
+               }
+            });
+        }
+
+        consumer.onProcessArchiveStart(file);
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream(40000);
+        byte[] buf = new byte[20000];
+        boolean any = false;
+
+        for (ZipEntry one : entriesList) {
+            final boolean isDirectory = one.isDirectory();
+
+            String path = one.getName();
+            if (filter.accept(path)) {
+                final byte[] bytes;
+                if (!isDirectory) {
+                    InputStream in = zip.getInputStream(one);
+
+                    baos.reset();
+                    int read;
+                    while ((read = in.read(buf)) != -1) {
+                        baos.write(buf, 0, read);
+                    }
+
+                    in.close();
+                    bytes = baos.toByteArray();
+                } else {
+                    bytes = new byte[0];
+                }
+
+                any |= consumer.processFileBytes(path, one.getTime(), bytes);
+            }
+        }
+
+        zip.close();
+        return any;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/CodeObserver.java b/dx/src/com/android/dx/cf/direct/CodeObserver.java
new file mode 100644
index 0000000..153255d
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/CodeObserver.java
@@ -0,0 +1,312 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.code.ByteOps;
+import com.android.dx.cf.code.BytecodeArray;
+import com.android.dx.cf.code.SwitchList;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstDouble;
+import com.android.dx.rop.cst.CstFloat;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstKnownNull;
+import com.android.dx.rop.cst.CstLong;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+
+/**
+ * Bytecode visitor to use when "observing" bytecode getting parsed.
+ */
+public class CodeObserver implements BytecodeArray.Visitor {
+    /** {@code non-null;} actual array of bytecode */
+    private final ByteArray bytes;
+
+    /** {@code non-null;} observer to inform of parsing */
+    private final ParseObserver observer;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bytes {@code non-null;} actual array of bytecode
+     * @param observer {@code non-null;} observer to inform of parsing
+     */
+    public CodeObserver(ByteArray bytes, ParseObserver observer) {
+        if (bytes == null) {
+            throw new NullPointerException("bytes == null");
+        }
+
+        if (observer == null) {
+            throw new NullPointerException("observer == null");
+        }
+
+        this.bytes = bytes;
+        this.observer = observer;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitInvalid(int opcode, int offset, int length) {
+        observer.parsed(bytes, offset, length, header(offset));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitNoArgs(int opcode, int offset, int length, Type type) {
+        observer.parsed(bytes, offset, length, header(offset));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitLocal(int opcode, int offset, int length,
+            int idx, Type type, int value) {
+        String idxStr = (length <= 3) ? Hex.u1(idx) : Hex.u2(idx);
+        boolean argComment = (length == 1);
+        String valueStr = "";
+
+        if (opcode == ByteOps.IINC) {
+            valueStr = ", #" +
+                ((length <= 3) ? Hex.s1(value) : Hex.s2(value));
+        }
+
+        String catStr = "";
+        if (type.isCategory2()) {
+            catStr = (argComment ? "," : " //") + " category-2";
+        }
+
+        observer.parsed(bytes, offset, length,
+                        header(offset) + (argComment ? " // " : " ") +
+                        idxStr + valueStr + catStr);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitConstant(int opcode, int offset, int length,
+            Constant cst, int value) {
+        if (cst instanceof CstKnownNull) {
+            // This is aconst_null.
+            visitNoArgs(opcode, offset, length, null);
+            return;
+        }
+
+        if (cst instanceof CstInteger) {
+            visitLiteralInt(opcode, offset, length, value);
+            return;
+        }
+
+        if (cst instanceof CstLong) {
+            visitLiteralLong(opcode, offset, length,
+                             ((CstLong) cst).getValue());
+            return;
+        }
+
+        if (cst instanceof CstFloat) {
+            visitLiteralFloat(opcode, offset, length,
+                              ((CstFloat) cst).getIntBits());
+            return;
+        }
+
+        if (cst instanceof CstDouble) {
+            visitLiteralDouble(opcode, offset, length,
+                             ((CstDouble) cst).getLongBits());
+            return;
+        }
+
+        String valueStr = "";
+        if (value != 0) {
+            valueStr = ", ";
+            if (opcode == ByteOps.MULTIANEWARRAY) {
+                valueStr += Hex.u1(value);
+            } else {
+                valueStr += Hex.u2(value);
+            }
+        }
+
+        observer.parsed(bytes, offset, length,
+                        header(offset) + " " + cst + valueStr);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitBranch(int opcode, int offset, int length,
+                            int target) {
+        String targetStr = (length <= 3) ? Hex.u2(target) : Hex.u4(target);
+        observer.parsed(bytes, offset, length,
+                        header(offset) + " " + targetStr);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitSwitch(int opcode, int offset, int length,
+            SwitchList cases, int padding) {
+        int sz = cases.size();
+        StringBuilder sb = new StringBuilder(sz * 20 + 100);
+
+        sb.append(header(offset));
+        if (padding != 0) {
+            sb.append(" // padding: " + Hex.u4(padding));
+        }
+        sb.append('\n');
+
+        for (int i = 0; i < sz; i++) {
+            sb.append("  ");
+            sb.append(Hex.s4(cases.getValue(i)));
+            sb.append(": ");
+            sb.append(Hex.u2(cases.getTarget(i)));
+            sb.append('\n');
+        }
+
+        sb.append("  default: ");
+        sb.append(Hex.u2(cases.getDefaultTarget()));
+
+        observer.parsed(bytes, offset, length, sb.toString());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void visitNewarray(int offset, int length, CstType cst,
+            ArrayList<Constant> intVals) {
+        String commentOrSpace = (length == 1) ? " // " : " ";
+        String typeName = cst.getClassType().getComponentType().toHuman();
+
+        observer.parsed(bytes, offset, length,
+                        header(offset) + commentOrSpace + typeName);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setPreviousOffset(int offset) {
+        // Do nothing
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getPreviousOffset() {
+        return -1;
+    }
+
+    /**
+     * Helper to produce the first bit of output for each instruction.
+     *
+     * @param offset the offset to the start of the instruction
+     */
+    private String header(int offset) {
+        /*
+         * Note: This uses the original bytecode, not the
+         * possibly-transformed one.
+         */
+        int opcode = bytes.getUnsignedByte(offset);
+        String name = ByteOps.opName(opcode);
+
+        if (opcode == ByteOps.WIDE) {
+            opcode = bytes.getUnsignedByte(offset + 1);
+            name += " " + ByteOps.opName(opcode);
+        }
+
+        return Hex.u2(offset) + ": " + name;
+    }
+
+    /**
+     * Helper for {@link #visitConstant} where the constant is an
+     * {@code int}.
+     *
+     * @param opcode the opcode
+     * @param offset offset to the instruction
+     * @param length instruction length
+     * @param value constant value
+     */
+    private void visitLiteralInt(int opcode, int offset, int length,
+            int value) {
+        String commentOrSpace = (length == 1) ? " // " : " ";
+        String valueStr;
+
+        opcode = bytes.getUnsignedByte(offset); // Compare with orig op below.
+        if ((length == 1) || (opcode == ByteOps.BIPUSH)) {
+            valueStr = "#" + Hex.s1(value);
+        } else if (opcode == ByteOps.SIPUSH) {
+            valueStr = "#" + Hex.s2(value);
+        } else {
+            valueStr = "#" + Hex.s4(value);
+        }
+
+        observer.parsed(bytes, offset, length,
+                        header(offset) + commentOrSpace + valueStr);
+    }
+
+    /**
+     * Helper for {@link #visitConstant} where the constant is a
+     * {@code long}.
+     *
+     * @param opcode the opcode
+     * @param offset offset to the instruction
+     * @param length instruction length
+     * @param value constant value
+     */
+    private void visitLiteralLong(int opcode, int offset, int length,
+            long value) {
+        String commentOrLit = (length == 1) ? " // " : " #";
+        String valueStr;
+
+        if (length == 1) {
+            valueStr = Hex.s1((int) value);
+        } else {
+            valueStr = Hex.s8(value);
+        }
+
+        observer.parsed(bytes, offset, length,
+                        header(offset) + commentOrLit + valueStr);
+    }
+
+    /**
+     * Helper for {@link #visitConstant} where the constant is a
+     * {@code float}.
+     *
+     * @param opcode the opcode
+     * @param offset offset to the instruction
+     * @param length instruction length
+     * @param bits constant value, as float-bits
+     */
+    private void visitLiteralFloat(int opcode, int offset, int length,
+            int bits) {
+        String optArg = (length != 1) ? " #" + Hex.u4(bits) : "";
+
+        observer.parsed(bytes, offset, length,
+                        header(offset) + optArg + " // " +
+                        Float.intBitsToFloat(bits));
+    }
+
+    /**
+     * Helper for {@link #visitConstant} where the constant is a
+     * {@code double}.
+     *
+     * @param opcode the opcode
+     * @param offset offset to the instruction
+     * @param length instruction length
+     * @param bits constant value, as double-bits
+     */
+    private void visitLiteralDouble(int opcode, int offset, int length,
+            long bits) {
+        String optArg = (length != 1) ? " #" + Hex.u8(bits) : "";
+
+        observer.parsed(bytes, offset, length,
+                        header(offset) + optArg + " // " +
+                        Double.longBitsToDouble(bits));
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/DirectClassFile.java b/dx/src/com/android/dx/cf/direct/DirectClassFile.java
new file mode 100644
index 0000000..565cefc
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/DirectClassFile.java
@@ -0,0 +1,688 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.attrib.AttBootstrapMethods;
+import com.android.dx.cf.attrib.AttSourceFile;
+import com.android.dx.cf.code.BootstrapMethodsList;
+import com.android.dx.cf.cst.ConstantPoolParser;
+import com.android.dx.cf.iface.Attribute;
+import com.android.dx.cf.iface.AttributeList;
+import com.android.dx.cf.iface.ClassFile;
+import com.android.dx.cf.iface.FieldList;
+import com.android.dx.cf.iface.MethodList;
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.cf.iface.StdAttributeList;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.cst.StdConstantPool;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+
+/**
+ * Class file with info taken from a {@code byte[]} or slice thereof.
+ */
+public class DirectClassFile implements ClassFile {
+    /** the expected value of the ClassFile.magic field */
+    private static final int CLASS_FILE_MAGIC = 0xcafebabe;
+
+    /**
+     * minimum {@code .class} file major version
+     *
+     * See http://en.wikipedia.org/wiki/Java_class_file for an up-to-date
+     * list of version numbers. Currently known (taken from that table) are:
+     *
+     *     Java SE 9 = 53 (0x35 hex),
+     *     Java SE 8 = 52 (0x34 hex),
+     *     Java SE 7 = 51 (0x33 hex),
+     *     Java SE 6.0 = 50 (0x32 hex),
+     *     Java SE 5.0 = 49 (0x31 hex),
+     *     JDK 1.4 = 48 (0x30 hex),
+     *     JDK 1.3 = 47 (0x2F hex),
+     *     JDK 1.2 = 46 (0x2E hex),
+     *     JDK 1.1 = 45 (0x2D hex).
+     *
+     * Valid ranges are typically of the form
+     * "A.0 through B.C inclusive" where A <= B and C >= 0,
+     * which is why we don't have a CLASS_FILE_MIN_MINOR_VERSION.
+     */
+    private static final int CLASS_FILE_MIN_MAJOR_VERSION = 45;
+
+    /**
+     * maximum {@code .class} file major version
+     *
+     * Note: if you change this, please change "java.class.version" in System.java.
+     */
+    private static final int CLASS_FILE_MAX_MAJOR_VERSION = 53;
+
+    /** maximum {@code .class} file minor version */
+    private static final int CLASS_FILE_MAX_MINOR_VERSION = 0;
+
+    /**
+     * {@code non-null;} the file path for the class, excluding any base directory
+     * specification
+     */
+    private final String filePath;
+
+    /** {@code non-null;} the bytes of the file */
+    private final ByteArray bytes;
+
+    /**
+     * whether to be strict about parsing; if
+     * {@code false}, this avoids doing checks that only exist
+     * for purposes of verification (such as magic number matching and
+     * path-package consistency checking)
+     */
+    private final boolean strictParse;
+
+    /**
+     * {@code null-ok;} the constant pool; only ever {@code null}
+     * before the constant pool is successfully parsed
+     */
+    private StdConstantPool pool;
+
+    /**
+     * the class file field {@code access_flags}; will be {@code -1}
+     * before the file is successfully parsed
+     */
+    private int accessFlags;
+
+    /**
+     * {@code null-ok;} the class file field {@code this_class},
+     * interpreted as a type constant; only ever {@code null}
+     * before the file is successfully parsed
+     */
+    private CstType thisClass;
+
+    /**
+     * {@code null-ok;} the class file field {@code super_class}, interpreted
+     * as a type constant if non-zero
+     */
+    private CstType superClass;
+
+    /**
+     * {@code null-ok;} the class file field {@code interfaces}; only
+     * ever {@code null} before the file is successfully
+     * parsed
+     */
+    private TypeList interfaces;
+
+    /**
+     * {@code null-ok;} the class file field {@code fields}; only ever
+     * {@code null} before the file is successfully parsed
+     */
+    private FieldList fields;
+
+    /**
+     * {@code null-ok;} the class file field {@code methods}; only ever
+     * {@code null} before the file is successfully parsed
+     */
+    private MethodList methods;
+
+    /**
+     * {@code null-ok;} the class file field {@code attributes}; only
+     * ever {@code null} before the file is successfully
+     * parsed
+     */
+    private StdAttributeList attributes;
+
+    /** {@code null-ok;} attribute factory, if any */
+    private AttributeFactory attributeFactory;
+
+    /** {@code null-ok;} parse observer, if any */
+    private ParseObserver observer;
+
+    /**
+     * Returns the string form of an object or {@code "(none)"}
+     * (rather than {@code "null"}) for {@code null}.
+     *
+     * @param obj {@code null-ok;} the object to stringify
+     * @return {@code non-null;} the appropriate string form
+     */
+    public static String stringOrNone(Object obj) {
+        if (obj == null) {
+            return "(none)";
+        }
+
+        return obj.toString();
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bytes {@code non-null;} the bytes of the file
+     * @param filePath {@code non-null;} the file path for the class,
+     * excluding any base directory specification
+     * @param strictParse whether to be strict about parsing; if
+     * {@code false}, this avoids doing checks that only exist
+     * for purposes of verification (such as magic number matching and
+     * path-package consistency checking)
+     */
+    public DirectClassFile(ByteArray bytes, String filePath,
+                           boolean strictParse) {
+        if (bytes == null) {
+            throw new NullPointerException("bytes == null");
+        }
+
+        if (filePath == null) {
+            throw new NullPointerException("filePath == null");
+        }
+
+        this.filePath = filePath;
+        this.bytes = bytes;
+        this.strictParse = strictParse;
+        this.accessFlags = -1;
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bytes {@code non-null;} the bytes of the file
+     * @param filePath {@code non-null;} the file path for the class,
+     * excluding any base directory specification
+     * @param strictParse whether to be strict about parsing; if
+     * {@code false}, this avoids doing checks that only exist
+     * for purposes of verification (such as magic number matching and
+     * path-package consistency checking)
+     */
+    public DirectClassFile(byte[] bytes, String filePath,
+                           boolean strictParse) {
+        this(new ByteArray(bytes), filePath, strictParse);
+    }
+
+    /**
+     * Sets the parse observer for this instance.
+     *
+     * @param observer {@code null-ok;} the observer
+     */
+    public void setObserver(ParseObserver observer) {
+        this.observer = observer;
+    }
+
+    /**
+     * Sets the attribute factory to use.
+     *
+     * @param attributeFactory {@code non-null;} the attribute factory
+     */
+    public void setAttributeFactory(AttributeFactory attributeFactory) {
+        if (attributeFactory == null) {
+            throw new NullPointerException("attributeFactory == null");
+        }
+
+        this.attributeFactory = attributeFactory;
+    }
+
+    /**
+     * Gets the path where this class file is located.
+     *
+     * @return {@code non-null;} the filePath
+     */
+    public String getFilePath() {
+      return filePath;
+    }
+
+    /**
+     * Gets the {@link ByteArray} that this instance's data comes from.
+     *
+     * @return {@code non-null;} the bytes
+     */
+    public ByteArray getBytes() {
+        return bytes;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMagic() {
+        parseToInterfacesIfNecessary();
+        return getMagic0();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMinorVersion() {
+        parseToInterfacesIfNecessary();
+        return getMinorVersion0();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMajorVersion() {
+        parseToInterfacesIfNecessary();
+        return getMajorVersion0();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getAccessFlags() {
+        parseToInterfacesIfNecessary();
+        return accessFlags;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CstType getThisClass() {
+        parseToInterfacesIfNecessary();
+        return thisClass;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CstType getSuperclass() {
+        parseToInterfacesIfNecessary();
+        return superClass;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ConstantPool getConstantPool() {
+        parseToInterfacesIfNecessary();
+        return pool;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList getInterfaces() {
+        parseToInterfacesIfNecessary();
+        return interfaces;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public FieldList getFields() {
+        parseToEndIfNecessary();
+        return fields;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public MethodList getMethods() {
+        parseToEndIfNecessary();
+        return methods;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public AttributeList getAttributes() {
+        parseToEndIfNecessary();
+        return attributes;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BootstrapMethodsList getBootstrapMethods() {
+        AttBootstrapMethods bootstrapMethodsAttribute =
+                (AttBootstrapMethods) getAttributes().findFirst(AttBootstrapMethods.ATTRIBUTE_NAME);
+        if (bootstrapMethodsAttribute != null) {
+            return bootstrapMethodsAttribute.getBootstrapMethods();
+        } else {
+            return BootstrapMethodsList.EMPTY;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CstString getSourceFile() {
+        AttributeList attribs = getAttributes();
+        Attribute attSf = attribs.findFirst(AttSourceFile.ATTRIBUTE_NAME);
+
+        if (attSf instanceof AttSourceFile) {
+            return ((AttSourceFile) attSf).getSourceFile();
+        }
+
+        return null;
+    }
+
+    /**
+     * Constructs and returns an instance of {@link TypeList} whose
+     * data comes from the bytes of this instance, interpreted as a
+     * list of constant pool indices for classes, which are in turn
+     * translated to type constants. Instance construction will fail
+     * if any of the (alleged) indices turn out not to refer to
+     * constant pool entries of type {@code Class}.
+     *
+     * @param offset offset into {@link #bytes} for the start of the
+     * data
+     * @param size number of elements in the list (not number of bytes)
+     * @return {@code non-null;} an appropriately-constructed class list
+     */
+    public TypeList makeTypeList(int offset, int size) {
+        if (size == 0) {
+            return StdTypeList.EMPTY;
+        }
+
+        if (pool == null) {
+            throw new IllegalStateException("pool not yet initialized");
+        }
+
+        return new DcfTypeList(bytes, offset, size, pool, observer);
+    }
+
+    /**
+     * Gets the class file field {@code magic}, but without doing any
+     * checks or parsing first.
+     *
+     * @return the magic value
+     */
+    public int getMagic0() {
+        return bytes.getInt(0);
+    }
+
+    /**
+     * Gets the class file field {@code minor_version}, but
+     * without doing any checks or parsing first.
+     *
+     * @return the minor version
+     */
+    public int getMinorVersion0() {
+        return bytes.getUnsignedShort(4);
+    }
+
+    /**
+     * Gets the class file field {@code major_version}, but
+     * without doing any checks or parsing first.
+     *
+     * @return the major version
+     */
+    public int getMajorVersion0() {
+        return bytes.getUnsignedShort(6);
+    }
+
+    /**
+     * Runs {@link #parse} if it has not yet been run to cover up to
+     * the interfaces list.
+     */
+    private void parseToInterfacesIfNecessary() {
+        if (accessFlags == -1) {
+            parse();
+        }
+    }
+
+    /**
+     * Runs {@link #parse} if it has not yet been run successfully.
+     */
+    private void parseToEndIfNecessary() {
+        if (attributes == null) {
+            parse();
+        }
+    }
+
+    /**
+     * Does the parsing, handing exceptions.
+     */
+    private void parse() {
+        try {
+            parse0();
+        } catch (ParseException ex) {
+            ex.addContext("...while parsing " + filePath);
+            throw ex;
+        } catch (RuntimeException ex) {
+            ParseException pe = new ParseException(ex);
+            pe.addContext("...while parsing " + filePath);
+            throw pe;
+        }
+    }
+
+    /**
+     * Sees if the .class file header magic has the good value.
+     *
+     * @param magic the value of a classfile "magic" field
+     * @return true if the magic is valid
+     */
+    private boolean isGoodMagic(int magic) {
+        return magic == CLASS_FILE_MAGIC;
+    }
+
+    /**
+     * Sees if the .class file header version are within
+     * range.
+     *
+     * @param minorVersion the value of a classfile "minor_version" field
+     * @param majorVersion the value of a classfile "major_version" field
+     * @return true if the parameters are valid and within range
+     */
+    private boolean isGoodVersion(int minorVersion, int majorVersion) {
+        /* Valid version ranges are typically of the form
+         * "A.0 through B.C inclusive" where A <= B and C >= 0,
+         * which is why we don't have a CLASS_FILE_MIN_MINOR_VERSION.
+         */
+        if (minorVersion >= 0) {
+            /* Check against max first to handle the case where
+             * MIN_MAJOR == MAX_MAJOR.
+             */
+            if (majorVersion == CLASS_FILE_MAX_MAJOR_VERSION) {
+                if (minorVersion <= CLASS_FILE_MAX_MINOR_VERSION) {
+                    return true;
+                }
+            } else if (majorVersion < CLASS_FILE_MAX_MAJOR_VERSION &&
+                       majorVersion >= CLASS_FILE_MIN_MAJOR_VERSION) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Does the actual parsing.
+     */
+    private void parse0() {
+        if (bytes.size() < 10) {
+            throw new ParseException("severely truncated class file");
+        }
+
+        if (observer != null) {
+            observer.parsed(bytes, 0, 0, "begin classfile");
+            observer.parsed(bytes, 0, 4, "magic: " + Hex.u4(getMagic0()));
+            observer.parsed(bytes, 4, 2,
+                            "minor_version: " + Hex.u2(getMinorVersion0()));
+            observer.parsed(bytes, 6, 2,
+                            "major_version: " + Hex.u2(getMajorVersion0()));
+        }
+
+        if (strictParse) {
+            /* Make sure that this looks like a valid class file with a
+             * version that we can handle.
+             */
+            if (!isGoodMagic(getMagic0())) {
+                throw new ParseException("bad class file magic (" + Hex.u4(getMagic0()) + ")");
+            }
+
+            if (!isGoodVersion(getMinorVersion0(), getMajorVersion0())) {
+                throw new ParseException("unsupported class file version " +
+                                         getMajorVersion0() + "." +
+                                         getMinorVersion0());
+            }
+        }
+
+        ConstantPoolParser cpParser = new ConstantPoolParser(bytes);
+        cpParser.setObserver(observer);
+        pool = cpParser.getPool();
+        pool.setImmutable();
+
+        int at = cpParser.getEndOffset();
+        int accessFlags = bytes.getUnsignedShort(at); // u2 access_flags;
+        int cpi = bytes.getUnsignedShort(at + 2); // u2 this_class;
+        thisClass = (CstType) pool.get(cpi);
+        cpi = bytes.getUnsignedShort(at + 4); // u2 super_class;
+        superClass = (CstType) pool.get0Ok(cpi);
+        int count = bytes.getUnsignedShort(at + 6); // u2 interfaces_count
+
+        if (observer != null) {
+            observer.parsed(bytes, at, 2,
+                            "access_flags: " +
+                            AccessFlags.classString(accessFlags));
+            observer.parsed(bytes, at + 2, 2, "this_class: " + thisClass);
+            observer.parsed(bytes, at + 4, 2, "super_class: " +
+                            stringOrNone(superClass));
+            observer.parsed(bytes, at + 6, 2,
+                            "interfaces_count: " + Hex.u2(count));
+            if (count != 0) {
+                observer.parsed(bytes, at + 8, 0, "interfaces:");
+            }
+        }
+
+        at += 8;
+        interfaces = makeTypeList(at, count);
+        at += count * 2;
+
+        if (strictParse) {
+            /*
+             * Make sure that the file/jar path matches the declared
+             * package/class name.
+             */
+            String thisClassName = thisClass.getClassType().getClassName();
+            if (!(filePath.endsWith(".class") &&
+                  filePath.startsWith(thisClassName) &&
+                  (filePath.length() == (thisClassName.length() + 6)))) {
+                throw new ParseException("class name (" + thisClassName +
+                                         ") does not match path (" +
+                                         filePath + ")");
+            }
+        }
+
+        /*
+         * Only set the instance variable accessFlags here, since
+         * that's what signals a successful parse of the first part of
+         * the file (through the interfaces list).
+         */
+        this.accessFlags = accessFlags;
+
+        FieldListParser flParser =
+            new FieldListParser(this, thisClass, at, attributeFactory);
+        flParser.setObserver(observer);
+        fields = flParser.getList();
+        at = flParser.getEndOffset();
+
+        MethodListParser mlParser =
+            new MethodListParser(this, thisClass, at, attributeFactory);
+        mlParser.setObserver(observer);
+        methods = mlParser.getList();
+        at = mlParser.getEndOffset();
+
+        AttributeListParser alParser =
+            new AttributeListParser(this, AttributeFactory.CTX_CLASS, at,
+                                    attributeFactory);
+        alParser.setObserver(observer);
+        attributes = alParser.getList();
+        attributes.setImmutable();
+        at = alParser.getEndOffset();
+
+        if (at != bytes.size()) {
+            throw new ParseException("extra bytes at end of class file, " +
+                                     "at offset " + Hex.u4(at));
+        }
+
+        if (observer != null) {
+            observer.parsed(bytes, at, 0, "end classfile");
+        }
+    }
+
+    /**
+     * Implementation of {@link TypeList} whose data comes directly
+     * from the bytes of an instance of this (outer) class,
+     * interpreted as a list of constant pool indices for classes
+     * which are in turn returned as type constants. Instance
+     * construction will fail if any of the (alleged) indices turn out
+     * not to refer to constant pool entries of type
+     * {@code Class}.
+     */
+    private static class DcfTypeList implements TypeList {
+        /** {@code non-null;} array containing the data */
+        private final ByteArray bytes;
+
+        /** number of elements in the list (not number of bytes) */
+        private final int size;
+
+        /** {@code non-null;} the constant pool */
+        private final StdConstantPool pool;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param bytes {@code non-null;} original classfile's bytes
+         * @param offset offset into {@link #bytes} for the start of the
+         * data
+         * @param size number of elements in the list (not number of bytes)
+         * @param pool {@code non-null;} the constant pool to use
+         * @param observer {@code null-ok;} parse observer to use, if any
+         */
+        public DcfTypeList(ByteArray bytes, int offset, int size,
+                StdConstantPool pool, ParseObserver observer) {
+            if (size < 0) {
+                throw new IllegalArgumentException("size < 0");
+            }
+
+            bytes = bytes.slice(offset, offset + size * 2);
+            this.bytes = bytes;
+            this.size = size;
+            this.pool = pool;
+
+            for (int i = 0; i < size; i++) {
+                offset = i * 2;
+                int idx = bytes.getUnsignedShort(offset);
+                CstType type;
+                try {
+                    type = (CstType) pool.get(idx);
+                } catch (ClassCastException ex) {
+                    // Translate the exception.
+                    throw new RuntimeException("bogus class cpi", ex);
+                }
+                if (observer != null) {
+                    observer.parsed(bytes, offset, 2, "  " + type);
+                }
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public boolean isMutable() {
+            return false;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int size() {
+            return size;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int getWordCount() {
+            // It is the same as size because all elements are classes.
+            return size;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public Type getType(int n) {
+            int idx = bytes.getUnsignedShort(n * 2);
+            return ((CstType) pool.get(idx)).getClassType();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public TypeList withAddedType(Type type) {
+            throw new UnsupportedOperationException("unsupported");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/FieldListParser.java b/dx/src/com/android/dx/cf/direct/FieldListParser.java
new file mode 100644
index 0000000..2d8280d
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/FieldListParser.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.iface.AttributeList;
+import com.android.dx.cf.iface.Member;
+import com.android.dx.cf.iface.StdField;
+import com.android.dx.cf.iface.StdFieldList;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstType;
+
+/**
+ * Parser for lists of fields in a class file.
+ */
+final /*package*/ class FieldListParser extends MemberListParser {
+    /** {@code non-null;} list in progress */
+    private final StdFieldList fields;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param cf {@code non-null;} the class file to parse from
+     * @param definer {@code non-null;} class being defined
+     * @param offset offset in {@code bytes} to the start of the list
+     * @param attributeFactory {@code non-null;} attribute factory to use
+     */
+    public FieldListParser(DirectClassFile cf, CstType definer, int offset,
+            AttributeFactory attributeFactory) {
+        super(cf, definer, offset, attributeFactory);
+        fields = new StdFieldList(getCount());
+    }
+
+    /**
+     * Gets the parsed list.
+     *
+     * @return {@code non-null;} the parsed list
+     */
+    public StdFieldList getList() {
+        parseIfNecessary();
+        return fields;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String humanName() {
+        return "field";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String humanAccessFlags(int accessFlags) {
+        return AccessFlags.fieldString(accessFlags);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int getAttributeContext() {
+        return AttributeFactory.CTX_FIELD;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected Member set(int n, int accessFlags, CstNat nat,
+                         AttributeList attributes) {
+        StdField field =
+            new StdField(getDefiner(), accessFlags, nat, attributes);
+
+        fields.set(n, field);
+        return field;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/MemberListParser.java b/dx/src/com/android/dx/cf/direct/MemberListParser.java
new file mode 100644
index 0000000..605bab8
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/MemberListParser.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.iface.AttributeList;
+import com.android.dx.cf.iface.Member;
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.cf.iface.StdAttributeList;
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+
+/**
+ * Parser for lists of class file members (that is, fields and methods).
+ */
+abstract /*package*/ class MemberListParser {
+    /** {@code non-null;} the class file to parse from */
+    private final DirectClassFile cf;
+
+    /** {@code non-null;} class being defined */
+    private final CstType definer;
+
+    /** offset in the byte array of the classfile to the start of the list */
+    private final int offset;
+
+    /** {@code non-null;} attribute factory to use */
+    private final AttributeFactory attributeFactory;
+
+    /** {@code >= -1;} the end offset of this list in the byte array of the
+     * classfile, or {@code -1} if not yet parsed */
+    private int endOffset;
+
+    /** {@code null-ok;} parse observer, if any */
+    private ParseObserver observer;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param cf {@code non-null;} the class file to parse from
+     * @param definer {@code non-null;} class being defined
+     * @param offset offset in {@code bytes} to the start of the list
+     * @param attributeFactory {@code non-null;} attribute factory to use
+     */
+    public MemberListParser(DirectClassFile cf, CstType definer,
+            int offset, AttributeFactory attributeFactory) {
+        if (cf == null) {
+            throw new NullPointerException("cf == null");
+        }
+
+        if (offset < 0) {
+            throw new IllegalArgumentException("offset < 0");
+        }
+
+        if (attributeFactory == null) {
+            throw new NullPointerException("attributeFactory == null");
+        }
+
+        this.cf = cf;
+        this.definer = definer;
+        this.offset = offset;
+        this.attributeFactory = attributeFactory;
+        this.endOffset = -1;
+    }
+
+    /**
+     * Gets the end offset of this constant pool in the {@code byte[]}
+     * which it came from.
+     *
+     * @return {@code >= 0;} the end offset
+     */
+    public int getEndOffset() {
+        parseIfNecessary();
+        return endOffset;
+    }
+
+    /**
+     * Sets the parse observer for this instance.
+     *
+     * @param observer {@code null-ok;} the observer
+     */
+    public final void setObserver(ParseObserver observer) {
+        this.observer = observer;
+    }
+
+    /**
+     * Runs {@link #parse} if it has not yet been run successfully.
+     */
+    protected final void parseIfNecessary() {
+        if (endOffset < 0) {
+            parse();
+        }
+    }
+
+    /**
+     * Gets the count of elements in the list.
+     *
+     * @return the count
+     */
+    protected final int getCount() {
+        ByteArray bytes = cf.getBytes();
+        return bytes.getUnsignedShort(offset);
+    }
+
+    /**
+     * Gets the class file being defined.
+     *
+     * @return {@code non-null;} the class
+     */
+    protected final CstType getDefiner() {
+        return definer;
+    }
+
+    /**
+     * Gets the human-oriented name for what this instance is parsing.
+     * Subclasses must override this method.
+     *
+     * @return {@code non-null;} the human oriented name
+     */
+    protected abstract String humanName();
+
+    /**
+     * Gets the human-oriented string for the given access flags.
+     * Subclasses must override this method.
+     *
+     * @param accessFlags the flags
+     * @return {@code non-null;} the string form
+     */
+    protected abstract String humanAccessFlags(int accessFlags);
+
+    /**
+     * Gets the {@code CTX_*} constant to use when parsing attributes.
+     * Subclasses must override this method.
+     *
+     * @return {@code non-null;} the human oriented name
+     */
+    protected abstract int getAttributeContext();
+
+    /**
+     * Sets an element in the list. Subclasses must override this method.
+     *
+     * @param n which element
+     * @param accessFlags the {@code access_flags}
+     * @param nat the interpreted name and type (based on the two
+     * {@code *_index} fields)
+     * @param attributes list of parsed attributes
+     * @return {@code non-null;} the constructed member
+     */
+    protected abstract Member set(int n, int accessFlags, CstNat nat,
+            AttributeList attributes);
+
+    /**
+     * Does the actual parsing.
+     */
+    private void parse() {
+        int attributeContext = getAttributeContext();
+        int count = getCount();
+        int at = offset + 2; // Skip the count.
+
+        ByteArray bytes = cf.getBytes();
+        ConstantPool pool = cf.getConstantPool();
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                            humanName() + "s_count: " + Hex.u2(count));
+        }
+
+        for (int i = 0; i < count; i++) {
+            try {
+                int accessFlags = bytes.getUnsignedShort(at);
+                int nameIdx = bytes.getUnsignedShort(at + 2);
+                int descIdx = bytes.getUnsignedShort(at + 4);
+                CstString name = (CstString) pool.get(nameIdx);
+                CstString desc = (CstString) pool.get(descIdx);
+
+                if (observer != null) {
+                    observer.startParsingMember(bytes, at, name.getString(),
+                                                desc.getString());
+                    observer.parsed(bytes, at, 0, "\n" + humanName() +
+                                    "s[" + i + "]:\n");
+                    observer.changeIndent(1);
+                    observer.parsed(bytes, at, 2,
+                                    "access_flags: " +
+                                    humanAccessFlags(accessFlags));
+                    observer.parsed(bytes, at + 2, 2,
+                                    "name: " + name.toHuman());
+                    observer.parsed(bytes, at + 4, 2,
+                                    "descriptor: " + desc.toHuman());
+                }
+
+                at += 6;
+                AttributeListParser parser =
+                    new AttributeListParser(cf, attributeContext, at,
+                                            attributeFactory);
+                parser.setObserver(observer);
+                at = parser.getEndOffset();
+                StdAttributeList attributes = parser.getList();
+                attributes.setImmutable();
+                CstNat nat = new CstNat(name, desc);
+                Member member = set(i, accessFlags, nat, attributes);
+
+                if (observer != null) {
+                    observer.changeIndent(-1);
+                    observer.parsed(bytes, at, 0, "end " + humanName() +
+                                    "s[" + i + "]\n");
+                    observer.endParsingMember(bytes, at, name.getString(),
+                                              desc.getString(), member);
+                }
+            } catch (ParseException ex) {
+                ex.addContext("...while parsing " + humanName() + "s[" + i +
+                              "]");
+                throw ex;
+            } catch (RuntimeException ex) {
+                ParseException pe = new ParseException(ex);
+                pe.addContext("...while parsing " + humanName() + "s[" + i +
+                              "]");
+                throw pe;
+            }
+        }
+
+        endOffset = at;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/MethodListParser.java b/dx/src/com/android/dx/cf/direct/MethodListParser.java
new file mode 100644
index 0000000..9e3494e
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/MethodListParser.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.iface.AttributeList;
+import com.android.dx.cf.iface.Member;
+import com.android.dx.cf.iface.StdMethod;
+import com.android.dx.cf.iface.StdMethodList;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstType;
+
+/**
+ * Parser for lists of methods in a class file.
+ */
+final /*package*/ class MethodListParser extends MemberListParser {
+    /** {@code non-null;} list in progress */
+    final private StdMethodList methods;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param cf {@code non-null;} the class file to parse from
+     * @param definer {@code non-null;} class being defined
+     * @param offset offset in {@code bytes} to the start of the list
+     * @param attributeFactory {@code non-null;} attribute factory to use
+     */
+    public MethodListParser(DirectClassFile cf, CstType definer,
+            int offset, AttributeFactory attributeFactory) {
+        super(cf, definer, offset, attributeFactory);
+        methods = new StdMethodList(getCount());
+    }
+
+    /**
+     * Gets the parsed list.
+     *
+     * @return {@code non-null;} the parsed list
+     */
+    public StdMethodList getList() {
+        parseIfNecessary();
+        return methods;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String humanName() {
+        return "method";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String humanAccessFlags(int accessFlags) {
+        return AccessFlags.methodString(accessFlags);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int getAttributeContext() {
+        return AttributeFactory.CTX_METHOD;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected Member set(int n, int accessFlags, CstNat nat,
+                         AttributeList attributes) {
+        StdMethod meth =
+            new StdMethod(getDefiner(), accessFlags, nat, attributes);
+
+        methods.set(n, meth);
+        return meth;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/StdAttributeFactory.java b/dx/src/com/android/dx/cf/direct/StdAttributeFactory.java
new file mode 100644
index 0000000..2c58e0b
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/StdAttributeFactory.java
@@ -0,0 +1,861 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.direct;
+
+import com.android.dx.cf.attrib.AttAnnotationDefault;
+import com.android.dx.cf.attrib.AttBootstrapMethods;
+import com.android.dx.cf.attrib.AttCode;
+import com.android.dx.cf.attrib.AttConstantValue;
+import com.android.dx.cf.attrib.AttDeprecated;
+import com.android.dx.cf.attrib.AttEnclosingMethod;
+import com.android.dx.cf.attrib.AttExceptions;
+import com.android.dx.cf.attrib.AttInnerClasses;
+import com.android.dx.cf.attrib.AttLineNumberTable;
+import com.android.dx.cf.attrib.AttLocalVariableTable;
+import com.android.dx.cf.attrib.AttLocalVariableTypeTable;
+import com.android.dx.cf.attrib.AttRuntimeInvisibleAnnotations;
+import com.android.dx.cf.attrib.AttRuntimeInvisibleParameterAnnotations;
+import com.android.dx.cf.attrib.AttRuntimeVisibleAnnotations;
+import com.android.dx.cf.attrib.AttRuntimeVisibleParameterAnnotations;
+import com.android.dx.cf.attrib.AttSignature;
+import com.android.dx.cf.attrib.AttSourceDebugExtension;
+import com.android.dx.cf.attrib.AttSourceFile;
+import com.android.dx.cf.attrib.AttSynthetic;
+import com.android.dx.cf.attrib.InnerClassList;
+import com.android.dx.cf.code.BootstrapMethodArgumentsList;
+import com.android.dx.cf.code.BootstrapMethodsList;
+import com.android.dx.cf.code.ByteCatchList;
+import com.android.dx.cf.code.BytecodeArray;
+import com.android.dx.cf.code.LineNumberList;
+import com.android.dx.cf.code.LocalVariableList;
+import com.android.dx.cf.iface.Attribute;
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.cf.iface.StdAttributeList;
+import com.android.dx.rop.annotation.AnnotationVisibility;
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.cst.TypedConstant;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import java.io.IOException;
+
+/**
+ * Standard subclass of {@link AttributeFactory}, which knows how to parse
+ * all the standard attribute types.
+ */
+public class StdAttributeFactory
+    extends AttributeFactory {
+    /** {@code non-null;} shared instance of this class */
+    public static final StdAttributeFactory THE_ONE =
+        new StdAttributeFactory();
+
+    /**
+     * Constructs an instance.
+     */
+    public StdAttributeFactory() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected Attribute parse0(DirectClassFile cf, int context, String name,
+            int offset, int length, ParseObserver observer) {
+        switch (context) {
+            case CTX_CLASS: {
+                if (name == AttBootstrapMethods.ATTRIBUTE_NAME) {
+                    return bootstrapMethods(cf, offset, length, observer);
+                }
+                if (name == AttDeprecated.ATTRIBUTE_NAME) {
+                    return deprecated(cf, offset, length, observer);
+                }
+                if (name == AttEnclosingMethod.ATTRIBUTE_NAME) {
+                    return enclosingMethod(cf, offset, length, observer);
+                }
+                if (name == AttInnerClasses.ATTRIBUTE_NAME) {
+                    return innerClasses(cf, offset, length, observer);
+                }
+                if (name == AttRuntimeInvisibleAnnotations.ATTRIBUTE_NAME) {
+                    return runtimeInvisibleAnnotations(cf, offset, length,
+                            observer);
+                }
+                if (name == AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME) {
+                    return runtimeVisibleAnnotations(cf, offset, length,
+                            observer);
+                }
+                if (name == AttSynthetic.ATTRIBUTE_NAME) {
+                    return synthetic(cf, offset, length, observer);
+                }
+                if (name == AttSignature.ATTRIBUTE_NAME) {
+                    return signature(cf, offset, length, observer);
+                }
+                if (name == AttSourceDebugExtension.ATTRIBUTE_NAME) {
+                    return sourceDebugExtension(cf, offset, length, observer);
+                }
+                if (name == AttSourceFile.ATTRIBUTE_NAME) {
+                    return sourceFile(cf, offset, length, observer);
+                }
+                break;
+            }
+            case CTX_FIELD: {
+                if (name == AttConstantValue.ATTRIBUTE_NAME) {
+                    return constantValue(cf, offset, length, observer);
+                }
+                if (name == AttDeprecated.ATTRIBUTE_NAME) {
+                    return deprecated(cf, offset, length, observer);
+                }
+                if (name == AttRuntimeInvisibleAnnotations.ATTRIBUTE_NAME) {
+                    return runtimeInvisibleAnnotations(cf, offset, length,
+                            observer);
+                }
+                if (name == AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME) {
+                    return runtimeVisibleAnnotations(cf, offset, length,
+                            observer);
+                }
+                if (name == AttSignature.ATTRIBUTE_NAME) {
+                    return signature(cf, offset, length, observer);
+                }
+                if (name == AttSynthetic.ATTRIBUTE_NAME) {
+                    return synthetic(cf, offset, length, observer);
+                }
+                break;
+            }
+            case CTX_METHOD: {
+                if (name == AttAnnotationDefault.ATTRIBUTE_NAME) {
+                    return annotationDefault(cf, offset, length, observer);
+                }
+                if (name == AttCode.ATTRIBUTE_NAME) {
+                    return code(cf, offset, length, observer);
+                }
+                if (name == AttDeprecated.ATTRIBUTE_NAME) {
+                    return deprecated(cf, offset, length, observer);
+                }
+                if (name == AttExceptions.ATTRIBUTE_NAME) {
+                    return exceptions(cf, offset, length, observer);
+                }
+                if (name == AttRuntimeInvisibleAnnotations.ATTRIBUTE_NAME) {
+                    return runtimeInvisibleAnnotations(cf, offset, length,
+                            observer);
+                }
+                if (name == AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME) {
+                    return runtimeVisibleAnnotations(cf, offset, length,
+                            observer);
+                }
+                if (name == AttRuntimeInvisibleParameterAnnotations.
+                        ATTRIBUTE_NAME) {
+                    return runtimeInvisibleParameterAnnotations(
+                            cf, offset, length, observer);
+                }
+                if (name == AttRuntimeVisibleParameterAnnotations.
+                        ATTRIBUTE_NAME) {
+                    return runtimeVisibleParameterAnnotations(
+                            cf, offset, length, observer);
+                }
+                if (name == AttSignature.ATTRIBUTE_NAME) {
+                    return signature(cf, offset, length, observer);
+                }
+                if (name == AttSynthetic.ATTRIBUTE_NAME) {
+                    return synthetic(cf, offset, length, observer);
+                }
+                break;
+            }
+            case CTX_CODE: {
+                if (name == AttLineNumberTable.ATTRIBUTE_NAME) {
+                    return lineNumberTable(cf, offset, length, observer);
+                }
+                if (name == AttLocalVariableTable.ATTRIBUTE_NAME) {
+                    return localVariableTable(cf, offset, length, observer);
+                }
+                if (name == AttLocalVariableTypeTable.ATTRIBUTE_NAME) {
+                    return localVariableTypeTable(cf, offset, length,
+                            observer);
+                }
+                break;
+            }
+        }
+
+        return super.parse0(cf, context, name, offset, length, observer);
+    }
+
+    /**
+     * Parses an {@code AnnotationDefault} attribute.
+     */
+    private Attribute annotationDefault(DirectClassFile cf,
+            int offset, int length, ParseObserver observer) {
+        if (length < 2) {
+            throwSeverelyTruncated();
+        }
+
+        AnnotationParser ap =
+            new AnnotationParser(cf, offset, length, observer);
+        Constant cst = ap.parseValueAttribute();
+
+        return new AttAnnotationDefault(cst, length);
+    }
+
+    /**
+     * Parses a {@code BootstrapMethods} attribute.
+     */
+    private Attribute bootstrapMethods(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length < 2) {
+            return throwSeverelyTruncated();
+        }
+
+        ByteArray bytes = cf.getBytes();
+        int numMethods = bytes.getUnsignedShort(offset);
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                            "num_boostrap_methods: " + Hex.u2(numMethods));
+        }
+
+        offset += 2;
+        length -= 2;
+
+        BootstrapMethodsList methods = parseBootstrapMethods(bytes, cf.getConstantPool(),
+                                                             cf.getThisClass(), numMethods,
+                                                             offset, length, observer);
+        return new AttBootstrapMethods(methods);
+    }
+
+    /**
+     * Parses a {@code Code} attribute.
+     */
+    private Attribute code(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length < 12) {
+            return throwSeverelyTruncated();
+        }
+
+        ByteArray bytes = cf.getBytes();
+        ConstantPool pool = cf.getConstantPool();
+        int maxStack = bytes.getUnsignedShort(offset); // u2 max_stack
+        int maxLocals = bytes.getUnsignedShort(offset + 2); // u2 max_locals
+        int codeLength = bytes.getInt(offset + 4); // u4 code_length
+        int origOffset = offset;
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                            "max_stack: " + Hex.u2(maxStack));
+            observer.parsed(bytes, offset + 2, 2,
+                            "max_locals: " + Hex.u2(maxLocals));
+            observer.parsed(bytes, offset + 4, 4,
+                            "code_length: " + Hex.u4(codeLength));
+        }
+
+        offset += 8;
+        length -= 8;
+
+        if (length < (codeLength + 4)) {
+            return throwTruncated();
+        }
+
+        int codeOffset = offset;
+        offset += codeLength;
+        length -= codeLength;
+        BytecodeArray code =
+            new BytecodeArray(bytes.slice(codeOffset, codeOffset + codeLength),
+                              pool);
+        if (observer != null) {
+            code.forEach(new CodeObserver(code.getBytes(), observer));
+        }
+
+        // u2 exception_table_length
+        int exceptionTableLength = bytes.getUnsignedShort(offset);
+        ByteCatchList catches = (exceptionTableLength == 0) ?
+            ByteCatchList.EMPTY :
+            new ByteCatchList(exceptionTableLength);
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                            "exception_table_length: " +
+                            Hex.u2(exceptionTableLength));
+        }
+
+        offset += 2;
+        length -= 2;
+
+        if (length < (exceptionTableLength * 8 + 2)) {
+            return throwTruncated();
+        }
+
+        for (int i = 0; i < exceptionTableLength; i++) {
+            if (observer != null) {
+                observer.changeIndent(1);
+            }
+
+            int startPc = bytes.getUnsignedShort(offset);
+            int endPc = bytes.getUnsignedShort(offset + 2);
+            int handlerPc = bytes.getUnsignedShort(offset + 4);
+            int catchTypeIdx = bytes.getUnsignedShort(offset + 6);
+            CstType catchType = (CstType) pool.get0Ok(catchTypeIdx);
+            catches.set(i, startPc, endPc, handlerPc, catchType);
+            if (observer != null) {
+                observer.parsed(bytes, offset, 8,
+                                Hex.u2(startPc) + ".." + Hex.u2(endPc) +
+                                " -> " + Hex.u2(handlerPc) + " " +
+                                ((catchType == null) ? "<any>" :
+                                 catchType.toHuman()));
+            }
+            offset += 8;
+            length -= 8;
+
+            if (observer != null) {
+                observer.changeIndent(-1);
+            }
+        }
+
+        catches.setImmutable();
+
+        AttributeListParser parser =
+            new AttributeListParser(cf, CTX_CODE, offset, this);
+        parser.setObserver(observer);
+
+        StdAttributeList attributes = parser.getList();
+        attributes.setImmutable();
+
+        int attributeByteCount = parser.getEndOffset() - offset;
+        if (attributeByteCount != length) {
+            return throwBadLength(attributeByteCount + (offset - origOffset));
+        }
+
+        return new AttCode(maxStack, maxLocals, code, catches, attributes);
+    }
+
+    /**
+     * Parses a {@code ConstantValue} attribute.
+     */
+    private Attribute constantValue(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length != 2) {
+            return throwBadLength(2);
+        }
+
+        ByteArray bytes = cf.getBytes();
+        ConstantPool pool = cf.getConstantPool();
+        int idx = bytes.getUnsignedShort(offset);
+        TypedConstant cst = (TypedConstant) pool.get(idx);
+        Attribute result = new AttConstantValue(cst);
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2, "value: " + cst);
+        }
+
+        return result;
+    }
+
+    /**
+     * Parses a {@code Deprecated} attribute.
+     */
+    private Attribute deprecated(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length != 0) {
+            return throwBadLength(0);
+        }
+
+        return new AttDeprecated();
+    }
+
+    /**
+     * Parses an {@code EnclosingMethod} attribute.
+     */
+    private Attribute enclosingMethod(DirectClassFile cf, int offset,
+            int length, ParseObserver observer) {
+        if (length != 4) {
+            throwBadLength(4);
+        }
+
+        ByteArray bytes = cf.getBytes();
+        ConstantPool pool = cf.getConstantPool();
+
+        int idx = bytes.getUnsignedShort(offset);
+        CstType type = (CstType) pool.get(idx);
+
+        idx = bytes.getUnsignedShort(offset + 2);
+        CstNat method = (CstNat) pool.get0Ok(idx);
+
+        Attribute result = new AttEnclosingMethod(type, method);
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2, "class: " + type);
+            observer.parsed(bytes, offset + 2, 2, "method: " +
+                            DirectClassFile.stringOrNone(method));
+        }
+
+        return result;
+    }
+
+    /**
+     * Parses an {@code Exceptions} attribute.
+     */
+    private Attribute exceptions(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length < 2) {
+            return throwSeverelyTruncated();
+        }
+
+        ByteArray bytes = cf.getBytes();
+        int count = bytes.getUnsignedShort(offset); // number_of_exceptions
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                            "number_of_exceptions: " + Hex.u2(count));
+        }
+
+        offset += 2;
+        length -= 2;
+
+        if (length != (count * 2)) {
+            throwBadLength((count * 2) + 2);
+        }
+
+        TypeList list = cf.makeTypeList(offset, count);
+        return new AttExceptions(list);
+    }
+
+    /**
+     * Parses an {@code InnerClasses} attribute.
+     */
+    private Attribute innerClasses(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length < 2) {
+            return throwSeverelyTruncated();
+        }
+
+        ByteArray bytes = cf.getBytes();
+        ConstantPool pool = cf.getConstantPool();
+        int count = bytes.getUnsignedShort(offset); // number_of_classes
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                            "number_of_classes: " + Hex.u2(count));
+        }
+
+        offset += 2;
+        length -= 2;
+
+        if (length != (count * 8)) {
+            throwBadLength((count * 8) + 2);
+        }
+
+        InnerClassList list = new InnerClassList(count);
+
+        for (int i = 0; i < count; i++) {
+            int innerClassIdx = bytes.getUnsignedShort(offset);
+            int outerClassIdx = bytes.getUnsignedShort(offset + 2);
+            int nameIdx = bytes.getUnsignedShort(offset + 4);
+            int accessFlags = bytes.getUnsignedShort(offset + 6);
+            CstType innerClass = (CstType) pool.get(innerClassIdx);
+            CstType outerClass = (CstType) pool.get0Ok(outerClassIdx);
+            CstString name = (CstString) pool.get0Ok(nameIdx);
+            list.set(i, innerClass, outerClass, name, accessFlags);
+            if (observer != null) {
+                observer.parsed(bytes, offset, 2,
+                                "inner_class: " +
+                                DirectClassFile.stringOrNone(innerClass));
+                observer.parsed(bytes, offset + 2, 2,
+                                "  outer_class: " +
+                                DirectClassFile.stringOrNone(outerClass));
+                observer.parsed(bytes, offset + 4, 2,
+                                "  name: " +
+                                DirectClassFile.stringOrNone(name));
+                observer.parsed(bytes, offset + 6, 2,
+                                "  access_flags: " +
+                                AccessFlags.innerClassString(accessFlags));
+            }
+            offset += 8;
+        }
+
+        list.setImmutable();
+        return new AttInnerClasses(list);
+    }
+
+    /**
+     * Parses a {@code LineNumberTable} attribute.
+     */
+    private Attribute lineNumberTable(DirectClassFile cf, int offset,
+            int length, ParseObserver observer) {
+        if (length < 2) {
+            return throwSeverelyTruncated();
+        }
+
+        ByteArray bytes = cf.getBytes();
+        int count = bytes.getUnsignedShort(offset); // line_number_table_length
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                            "line_number_table_length: " + Hex.u2(count));
+        }
+
+        offset += 2;
+        length -= 2;
+
+        if (length != (count * 4)) {
+            throwBadLength((count * 4) + 2);
+        }
+
+        LineNumberList list = new LineNumberList(count);
+
+        for (int i = 0; i < count; i++) {
+            int startPc = bytes.getUnsignedShort(offset);
+            int lineNumber = bytes.getUnsignedShort(offset + 2);
+            list.set(i, startPc, lineNumber);
+            if (observer != null) {
+                observer.parsed(bytes, offset, 4,
+                                Hex.u2(startPc) + " " + lineNumber);
+            }
+            offset += 4;
+        }
+
+        list.setImmutable();
+        return new AttLineNumberTable(list);
+    }
+
+    /**
+     * Parses a {@code LocalVariableTable} attribute.
+     */
+    private Attribute localVariableTable(DirectClassFile cf, int offset,
+            int length, ParseObserver observer) {
+        if (length < 2) {
+            return throwSeverelyTruncated();
+        }
+
+        ByteArray bytes = cf.getBytes();
+        int count = bytes.getUnsignedShort(offset);
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                    "local_variable_table_length: " + Hex.u2(count));
+        }
+
+        LocalVariableList list = parseLocalVariables(
+                bytes.slice(offset + 2, offset + length), cf.getConstantPool(),
+                observer, count, false);
+        return new AttLocalVariableTable(list);
+    }
+
+    /**
+     * Parses a {@code LocalVariableTypeTable} attribute.
+     */
+    private Attribute localVariableTypeTable(DirectClassFile cf, int offset,
+            int length, ParseObserver observer) {
+        if (length < 2) {
+            return throwSeverelyTruncated();
+        }
+
+        ByteArray bytes = cf.getBytes();
+        int count = bytes.getUnsignedShort(offset);
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2,
+                    "local_variable_type_table_length: " + Hex.u2(count));
+        }
+
+        LocalVariableList list = parseLocalVariables(
+                bytes.slice(offset + 2, offset + length), cf.getConstantPool(),
+                observer, count, true);
+        return new AttLocalVariableTypeTable(list);
+    }
+
+    /**
+     * Parse the table part of either a {@code LocalVariableTable}
+     * or a {@code LocalVariableTypeTable}.
+     *
+     * @param bytes {@code non-null;} bytes to parse, which should <i>only</i>
+     * contain the table data (no header)
+     * @param pool {@code non-null;} constant pool to use
+     * @param count {@code >= 0;} the number of entries
+     * @param typeTable {@code true} iff this is for a type table
+     * @return {@code non-null;} the constructed list
+     */
+    private LocalVariableList parseLocalVariables(ByteArray bytes,
+            ConstantPool pool, ParseObserver observer, int count,
+            boolean typeTable) {
+        if (bytes.size() != (count * 10)) {
+            // "+ 2" is for the count.
+            throwBadLength((count * 10) + 2);
+        }
+
+        ByteArray.MyDataInputStream in = bytes.makeDataInputStream();
+        LocalVariableList list = new LocalVariableList(count);
+
+        try {
+            for (int i = 0; i < count; i++) {
+                int startPc = in.readUnsignedShort();
+                int length = in.readUnsignedShort();
+                int nameIdx = in.readUnsignedShort();
+                int typeIdx = in.readUnsignedShort();
+                int index = in.readUnsignedShort();
+                CstString name = (CstString) pool.get(nameIdx);
+                CstString type = (CstString) pool.get(typeIdx);
+                CstString descriptor = null;
+                CstString signature = null;
+
+                if (typeTable) {
+                    signature = type;
+                } else {
+                    descriptor = type;
+                }
+
+                list.set(i, startPc, length, name,
+                        descriptor, signature, index);
+
+                if (observer != null) {
+                    observer.parsed(bytes, i * 10, 10, Hex.u2(startPc) +
+                            ".." + Hex.u2(startPc + length) + " " +
+                            Hex.u2(index) + " " + name.toHuman() + " " +
+                            type.toHuman());
+                }
+            }
+        } catch (IOException ex) {
+            throw new RuntimeException("shouldn't happen", ex);
+        }
+
+        list.setImmutable();
+        return list;
+    }
+
+    /**
+     * Parses a {@code RuntimeInvisibleAnnotations} attribute.
+     */
+    private Attribute runtimeInvisibleAnnotations(DirectClassFile cf,
+            int offset, int length, ParseObserver observer) {
+        if (length < 2) {
+            throwSeverelyTruncated();
+        }
+
+        AnnotationParser ap =
+            new AnnotationParser(cf, offset, length, observer);
+        Annotations annotations =
+            ap.parseAnnotationAttribute(AnnotationVisibility.BUILD);
+
+        return new AttRuntimeInvisibleAnnotations(annotations, length);
+    }
+
+    /**
+     * Parses a {@code RuntimeVisibleAnnotations} attribute.
+     */
+    private Attribute runtimeVisibleAnnotations(DirectClassFile cf,
+            int offset, int length, ParseObserver observer) {
+        if (length < 2) {
+            throwSeverelyTruncated();
+        }
+
+        AnnotationParser ap =
+            new AnnotationParser(cf, offset, length, observer);
+        Annotations annotations =
+            ap.parseAnnotationAttribute(AnnotationVisibility.RUNTIME);
+
+        return new AttRuntimeVisibleAnnotations(annotations, length);
+    }
+
+    /**
+     * Parses a {@code RuntimeInvisibleParameterAnnotations} attribute.
+     */
+    private Attribute runtimeInvisibleParameterAnnotations(DirectClassFile cf,
+            int offset, int length, ParseObserver observer) {
+        if (length < 2) {
+            throwSeverelyTruncated();
+        }
+
+        AnnotationParser ap =
+            new AnnotationParser(cf, offset, length, observer);
+        AnnotationsList list =
+            ap.parseParameterAttribute(AnnotationVisibility.BUILD);
+
+        return new AttRuntimeInvisibleParameterAnnotations(list, length);
+    }
+
+    /**
+     * Parses a {@code RuntimeVisibleParameterAnnotations} attribute.
+     */
+    private Attribute runtimeVisibleParameterAnnotations(DirectClassFile cf,
+            int offset, int length, ParseObserver observer) {
+        if (length < 2) {
+            throwSeverelyTruncated();
+        }
+
+        AnnotationParser ap =
+            new AnnotationParser(cf, offset, length, observer);
+        AnnotationsList list =
+            ap.parseParameterAttribute(AnnotationVisibility.RUNTIME);
+
+        return new AttRuntimeVisibleParameterAnnotations(list, length);
+    }
+
+    /**
+     * Parses a {@code Signature} attribute.
+     */
+    private Attribute signature(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length != 2) {
+            throwBadLength(2);
+        }
+
+        ByteArray bytes = cf.getBytes();
+        ConstantPool pool = cf.getConstantPool();
+        int idx = bytes.getUnsignedShort(offset);
+        CstString cst = (CstString) pool.get(idx);
+        Attribute result = new AttSignature(cst);
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2, "signature: " + cst);
+        }
+
+        return result;
+    }
+
+    /**
+     * Parses a {@code SourceDebugExtesion} attribute.
+     */
+    private Attribute sourceDebugExtension(DirectClassFile cf, int offset, int length,
+                                           ParseObserver observer) {
+        ByteArray bytes = cf.getBytes().slice(offset, offset + length);
+        CstString smapString = new CstString(bytes);
+        Attribute result = new AttSourceDebugExtension(smapString);
+
+        if (observer != null) {
+            String decoded = smapString.getString();
+            observer.parsed(bytes, offset, length, "sourceDebugExtension: " + decoded);
+        }
+
+        return result;
+    }
+
+    /**
+     * Parses a {@code SourceFile} attribute.
+     */
+    private Attribute sourceFile(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length != 2) {
+            throwBadLength(2);
+        }
+
+        ByteArray bytes = cf.getBytes();
+        ConstantPool pool = cf.getConstantPool();
+        int idx = bytes.getUnsignedShort(offset);
+        CstString cst = (CstString) pool.get(idx);
+        Attribute result = new AttSourceFile(cst);
+
+        if (observer != null) {
+            observer.parsed(bytes, offset, 2, "source: " + cst);
+        }
+
+        return result;
+    }
+
+    /**
+     * Parses a {@code Synthetic} attribute.
+     */
+    private Attribute synthetic(DirectClassFile cf, int offset, int length,
+            ParseObserver observer) {
+        if (length != 0) {
+            return throwBadLength(0);
+        }
+
+        return new AttSynthetic();
+    }
+
+    /**
+     * Throws the right exception when a known attribute has a way too short
+     * length.
+     *
+     * @return never
+     * @throws ParseException always thrown
+     */
+    private static Attribute throwSeverelyTruncated() {
+        throw new ParseException("severely truncated attribute");
+    }
+
+    /**
+     * Throws the right exception when a known attribute has a too short
+     * length.
+     *
+     * @return never
+     * @throws ParseException always thrown
+     */
+    private static Attribute throwTruncated() {
+        throw new ParseException("truncated attribute");
+    }
+
+    /**
+     * Throws the right exception when an attribute has an unexpected length
+     * (given its contents).
+     *
+     * @param expected expected length
+     * @return never
+     * @throws ParseException always thrown
+     */
+    private static Attribute throwBadLength(int expected) {
+        throw new ParseException("bad attribute length; expected length " +
+                                 Hex.u4(expected));
+    }
+
+    private BootstrapMethodsList parseBootstrapMethods(ByteArray bytes, ConstantPool constantPool,
+            CstType declaringClass, int numMethods, int offset, int length, ParseObserver observer)
+        throws ParseException {
+        BootstrapMethodsList methods = new BootstrapMethodsList(numMethods);
+        for (int methodIndex = 0; methodIndex < numMethods; ++methodIndex) {
+            if (length < 4) {
+                throwTruncated();
+            }
+
+            int methodRef = bytes.getUnsignedShort(offset);
+            int numArguments = bytes.getUnsignedShort(offset + 2);
+
+            if (observer != null) {
+                observer.parsed(bytes, offset, 2, "bootstrap_method_ref: " + Hex.u2(methodRef));
+                observer.parsed(bytes, offset + 2, 2,
+                                "num_bootstrap_arguments: " + Hex.u2(numArguments));
+            }
+
+            offset += 4;
+            length -= 4;
+            if (length < numArguments * 2) {
+                throwTruncated();
+            }
+
+            BootstrapMethodArgumentsList arguments = new BootstrapMethodArgumentsList(numArguments);
+            for (int argIndex = 0; argIndex < numArguments; ++argIndex, offset += 2, length -= 2) {
+                int argumentRef = bytes.getUnsignedShort(offset);
+                if (observer != null) {
+                    observer.parsed(bytes, offset, 2,
+                                    "bootstrap_arguments[" + argIndex + "]" + Hex.u2(argumentRef));
+                }
+                arguments.set(argIndex, constantPool.get(argumentRef));
+            }
+            arguments.setImmutable();
+            Constant cstMethodRef = constantPool.get(methodRef);
+            methods.set(methodIndex, declaringClass, (CstMethodHandle) cstMethodRef, arguments);
+        }
+        methods.setImmutable();
+
+        if (length != 0) {
+            throwBadLength(length);
+        }
+
+        return methods;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/direct/package.html b/dx/src/com/android/dx/cf/direct/package.html
new file mode 100644
index 0000000..2a46198
--- /dev/null
+++ b/dx/src/com/android/dx/cf/direct/package.html
@@ -0,0 +1,12 @@
+<body>
+<p>Implementation of <code>cf.iface.*</code> based on a direct representation
+of class files as <code>byte[]</code>s.</p>
+
+<p><b>PACKAGES USED:</b>
+<ul>
+<li><code>com.android.dx.cf.attrib</code></li>
+<li><code>com.android.dx.cf.iface</code></li>
+<li><code>com.android.dx.rop.pool</code></li>
+<li><code>com.android.dx.util</code></li>
+</ul>
+</body>
diff --git a/dx/src/com/android/dx/cf/iface/Attribute.java b/dx/src/com/android/dx/cf/iface/Attribute.java
new file mode 100644
index 0000000..b075251
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/Attribute.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+/**
+ * Interface representing attributes of class files (directly or indirectly).
+ */
+public interface Attribute {
+    /**
+     * Get the name of the attribute.
+     *
+     * @return {@code non-null;} the name
+     */
+    public String getName();
+
+    /**
+     * Get the total length of the attribute in bytes, including the
+     * header. Since the header is always six bytes, the result of
+     * this method is always at least {@code 6}.
+     *
+     * @return {@code >= 6;} the total length, in bytes
+     */
+    public int byteLength();
+}
diff --git a/dx/src/com/android/dx/cf/iface/AttributeList.java b/dx/src/com/android/dx/cf/iface/AttributeList.java
new file mode 100644
index 0000000..f7a1d27
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/AttributeList.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+/**
+ * Interface for lists of attributes.
+ */
+public interface AttributeList {
+    /**
+     * Get whether this instance is mutable. Note that the
+     * {@code AttributeList} interface itself doesn't provide any means
+     * of mutation, but that doesn't mean that there isn't a non-interface
+     * way of mutating an instance.
+     *
+     * @return {@code true} iff this instance is somehow mutable
+     */
+    public boolean isMutable();
+
+    /**
+     * Get the number of attributes in the list.
+     *
+     * @return the size
+     */
+    public int size();
+
+    /**
+     * Get the {@code n}th attribute.
+     *
+     * @param n {@code n >= 0, n < size();} which attribute
+     * @return {@code non-null;} the attribute in question
+     */
+    public Attribute get(int n);
+
+    /**
+     * Get the total length of this list in bytes, when part of a
+     * class file. The returned value includes the two bytes for the
+     * {@code attributes_count} length indicator.
+     *
+     * @return {@code >= 2;} the total length, in bytes
+     */
+    public int byteLength();
+
+    /**
+     * Get the first attribute in the list with the given name, if any.
+     *
+     * @param name {@code non-null;} attribute name
+     * @return {@code null-ok;} first attribute in the list with the given name,
+     * or {@code null} if there is none
+     */
+    public Attribute findFirst(String name);
+
+    /**
+     * Get the next attribute in the list after the given one, with the same
+     * name, if any.
+     *
+     * @param attrib {@code non-null;} attribute to start looking after
+     * @return {@code null-ok;} next attribute after {@code attrib} with the
+     * same name as {@code attrib}
+     */
+    public Attribute findNext(Attribute attrib);
+}
diff --git a/dx/src/com/android/dx/cf/iface/ClassFile.java b/dx/src/com/android/dx/cf/iface/ClassFile.java
new file mode 100644
index 0000000..b2f29ee
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/ClassFile.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.cf.code.BootstrapMethodsList;
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.TypeList;
+
+/**
+ * Interface for things which purport to be class files or reasonable
+ * facsimiles thereof.
+ *
+ * <p><b>Note:</b> The fields referred to in this documentation are of the
+ * {@code ClassFile} structure defined in vmspec-2 sec4.1.
+ */
+public interface ClassFile extends HasAttribute {
+    /**
+     * Gets the field {@code magic}.
+     *
+     * @return the value in question
+     */
+    public int getMagic();
+
+    /**
+     * Gets the field {@code minor_version}.
+     *
+     * @return the value in question
+     */
+    public int getMinorVersion();
+
+    /**
+     * Gets the field {@code major_version}.
+     *
+     * @return the value in question
+     */
+    public int getMajorVersion();
+
+    /**
+     * Gets the field {@code access_flags}.
+     *
+     * @return the value in question
+     */
+    public int getAccessFlags();
+
+    /**
+     * Gets the field {@code this_class}, interpreted as a type constant.
+     *
+     * @return {@code non-null;} the value in question
+     */
+    public CstType getThisClass();
+
+    /**
+     * Gets the field {@code super_class}, interpreted as a type constant
+     * if non-zero.
+     *
+     * @return {@code null-ok;} the value in question
+     */
+    public CstType getSuperclass();
+
+    /**
+     * Gets the field {@code constant_pool} (along with
+     * {@code constant_pool_count}).
+     *
+     * @return {@code non-null;} the constant pool
+     */
+    public ConstantPool getConstantPool();
+
+    /**
+     * Gets the field {@code interfaces} (along with
+     * {@code interfaces_count}).
+     *
+     * @return {@code non-null;} the list of interfaces
+     */
+    public TypeList getInterfaces();
+
+    /**
+     * Gets the field {@code fields} (along with
+     * {@code fields_count}).
+     *
+     * @return {@code non-null;} the list of fields
+     */
+    public FieldList getFields();
+
+    /**
+     * Gets the field {@code methods} (along with
+     * {@code methods_count}).
+     *
+     * @return {@code non-null;} the list of fields
+     */
+    public MethodList getMethods();
+
+    /**
+     * Gets the field {@code attributes} (along with
+     * {@code attributes_count}).
+     *
+     * @return {@code non-null;} the list of attributes
+     */
+    @Override
+    public AttributeList getAttributes();
+
+    /**
+     * Gets the bootstrap method {@code attributes}.
+     * @return {@code non-null;} the list of bootstrap methods
+     */
+    public BootstrapMethodsList getBootstrapMethods();
+
+    /**
+     * Gets the name out of the {@code SourceFile} attribute of this
+     * file, if any. This is a convenient shorthand for scrounging around
+     * the class's attributes.
+     *
+     * @return {@code non-null;} the constant pool
+     */
+    public CstString getSourceFile();
+}
diff --git a/dx/src/com/android/dx/cf/iface/Field.java b/dx/src/com/android/dx/cf/iface/Field.java
new file mode 100644
index 0000000..e3002bc
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/Field.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.rop.cst.TypedConstant;
+
+/**
+ * Interface representing fields of class files.
+ */
+public interface Field
+        extends Member {
+    /**
+     * Get the constant value for this field, if any. This only returns
+     * non-{@code null} for a {@code static final} field which
+     * includes a {@code ConstantValue} attribute.
+     *
+     * @return {@code null-ok;} the constant value, or {@code null} if this
+     * field isn't a constant
+     */
+    public TypedConstant getConstantValue();
+}
diff --git a/dx/src/com/android/dx/cf/iface/FieldList.java b/dx/src/com/android/dx/cf/iface/FieldList.java
new file mode 100644
index 0000000..9cd27a3
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/FieldList.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+/**
+ * Interface for lists of fields.
+ */
+public interface FieldList
+{
+    /**
+     * Get whether this instance is mutable. Note that the
+     * {@code FieldList} interface itself doesn't provide any means
+     * of mutation, but that doesn't mean that there isn't a non-interface
+     * way of mutating an instance.
+     *
+     * @return {@code true} iff this instance is somehow mutable
+     */
+    public boolean isMutable();
+
+    /**
+     * Get the number of fields in the list.
+     *
+     * @return the size
+     */
+    public int size();
+
+    /**
+     * Get the {@code n}th field.
+     *
+     * @param n {@code n >= 0, n < size();} which field
+     * @return {@code non-null;} the field in question
+     */
+    public Field get(int n);
+}
diff --git a/dx/src/com/android/dx/cf/iface/HasAttribute.java b/dx/src/com/android/dx/cf/iface/HasAttribute.java
new file mode 100644
index 0000000..9f3e48d
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/HasAttribute.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+/**
+ * An element that can have {@link Attribute}
+ */
+public interface HasAttribute {
+
+    /**
+     * Get the element {@code attributes} (along with
+     * {@code attributes_count}).
+     *
+     * @return {@code non-null;} the attributes list
+     */
+    public AttributeList getAttributes();
+
+}
diff --git a/dx/src/com/android/dx/cf/iface/Member.java b/dx/src/com/android/dx/cf/iface/Member.java
new file mode 100644
index 0000000..878bfed
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/Member.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+
+/**
+ * Interface representing members of class files (that is, fields and methods).
+ */
+public interface Member extends HasAttribute {
+    /**
+     * Get the defining class.
+     *
+     * @return {@code non-null;} the defining class
+     */
+    public CstType getDefiningClass();
+
+    /**
+     * Get the field {@code access_flags}.
+     *
+     * @return the access flags
+     */
+    public int getAccessFlags();
+
+    /**
+     * Get the field {@code name_index} of the member. This is
+     * just a convenient shorthand for {@code getNat().getName()}.
+     *
+     * @return {@code non-null;} the name
+     */
+    public CstString getName();
+
+    /**
+     * Get the field {@code descriptor_index} of the member. This is
+     * just a convenient shorthand for {@code getNat().getDescriptor()}.
+     *
+     * @return {@code non-null;} the descriptor
+     */
+    public CstString getDescriptor();
+
+    /**
+     * Get the name and type associated with this member. This is a
+     * combination of the fields {@code name_index} and
+     * {@code descriptor_index} in the original classfile, interpreted
+     * via the constant pool.
+     *
+     * @return {@code non-null;} the name and type
+     */
+    public CstNat getNat();
+
+    /**
+     * Get the field {@code attributes} (along with
+     * {@code attributes_count}).
+     *
+     * @return {@code non-null;} the constant pool
+     */
+    @Override
+    public AttributeList getAttributes();
+}
diff --git a/dx/src/com/android/dx/cf/iface/Method.java b/dx/src/com/android/dx/cf/iface/Method.java
new file mode 100644
index 0000000..18b9af6
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/Method.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.rop.type.Prototype;
+
+/**
+ * Interface representing methods of class files.
+ */
+public interface Method
+    extends Member
+{
+    /**
+     * Get the <i>effective</i> method descriptor, which includes, if
+     * necessary, a first {@code this} parameter.
+     *
+     * @return {@code non-null;} the effective method descriptor
+     */
+    public Prototype getEffectiveDescriptor();
+}
diff --git a/dx/src/com/android/dx/cf/iface/MethodList.java b/dx/src/com/android/dx/cf/iface/MethodList.java
new file mode 100644
index 0000000..dfa6528
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/MethodList.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+/**
+ * Interface for lists of methods.
+ */
+public interface MethodList {
+    /**
+     * Get whether this instance is mutable. Note that the
+     * {@code MethodList} interface itself doesn't provide any means
+     * of mutation, but that doesn't mean that there isn't a non-interface
+     * way of mutating an instance.
+     *
+     * @return {@code true} iff this instance is somehow mutable
+     */
+    public boolean isMutable();
+
+    /**
+     * Get the number of methods in the list.
+     *
+     * @return the size
+     */
+    public int size();
+
+    /**
+     * Get the {@code n}th method.
+     *
+     * @param n {@code n >= 0, n < size();} which method
+     * @return {@code non-null;} the method in question
+     */
+    public Method get(int n);
+}
diff --git a/dx/src/com/android/dx/cf/iface/ParseException.java b/dx/src/com/android/dx/cf/iface/ParseException.java
new file mode 100644
index 0000000..6ed6d3b
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/ParseException.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dex.util.ExceptionWithContext;
+
+/**
+ * Exception from parsing.
+ */
+public class ParseException
+        extends ExceptionWithContext {
+    public ParseException(String message) {
+        super(message);
+    }
+
+    public ParseException(Throwable cause) {
+        super(cause);
+    }
+
+    public ParseException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/iface/ParseObserver.java b/dx/src/com/android/dx/cf/iface/ParseObserver.java
new file mode 100644
index 0000000..98d5a75
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/ParseObserver.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.util.ByteArray;
+
+/**
+ * Observer of parsing in action. This is used to supply feedback from
+ * the various things that parse particularly to the dumping utilities.
+ */
+public interface ParseObserver {
+    /**
+     * Indicate that the level of indentation for a dump should increase
+     * or decrease (positive or negative argument, respectively).
+     *
+     * @param indentDelta the amount to change indentation
+     */
+    public void changeIndent(int indentDelta);
+
+    /**
+     * Indicate that a particular member is now being parsed.
+     *
+     * @param bytes {@code non-null;} the source that is being parsed
+     * @param offset offset into {@code bytes} for the start of the
+     * member
+     * @param name {@code non-null;} name of the member
+     * @param descriptor {@code non-null;} descriptor of the member
+     */
+    public void startParsingMember(ByteArray bytes, int offset, String name,
+                                   String descriptor);
+
+    /**
+     * Indicate that a particular member is no longer being parsed.
+     *
+     * @param bytes {@code non-null;} the source that was parsed
+     * @param offset offset into {@code bytes} for the end of the
+     * member
+     * @param name {@code non-null;} name of the member
+     * @param descriptor {@code non-null;} descriptor of the member
+     * @param member {@code non-null;} the actual member that was parsed
+     */
+    public void endParsingMember(ByteArray bytes, int offset, String name,
+                                 String descriptor, Member member);
+
+    /**
+     * Indicate that some parsing happened.
+     *
+     * @param bytes {@code non-null;} the source that was parsed
+     * @param offset offset into {@code bytes} for what was parsed
+     * @param len number of bytes parsed
+     * @param human {@code non-null;} human form for what was parsed
+     */
+    public void parsed(ByteArray bytes, int offset, int len, String human);
+}
diff --git a/dx/src/com/android/dx/cf/iface/StdAttributeList.java b/dx/src/com/android/dx/cf/iface/StdAttributeList.java
new file mode 100644
index 0000000..31a9047
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/StdAttributeList.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * Standard implementation of {@link AttributeList}, which directly stores
+ * an array of {@link Attribute} objects and can be made immutable.
+ */
+public final class StdAttributeList extends FixedSizeList
+        implements AttributeList {
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     */
+    public StdAttributeList(int size) {
+        super(size);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Attribute get(int n) {
+        return (Attribute) get0(n);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int byteLength() {
+        int sz = size();
+        int result = 2; // u2 attributes_count
+
+        for (int i = 0; i < sz; i++) {
+            result += get(i).byteLength();
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Attribute findFirst(String name) {
+        int sz = size();
+
+        for (int i = 0; i < sz; i++) {
+            Attribute att = get(i);
+            if (att.getName().equals(name)) {
+                return att;
+            }
+        }
+
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Attribute findNext(Attribute attrib) {
+        int sz = size();
+        int at;
+
+        outer: {
+            for (at = 0; at < sz; at++) {
+                Attribute att = get(at);
+                if (att == attrib) {
+                    break outer;
+                }
+            }
+
+            return null;
+        }
+
+        String name = attrib.getName();
+
+        for (at++; at < sz; at++) {
+            Attribute att = get(at);
+            if (att.getName().equals(name)) {
+                return att;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Sets the attribute at the given index.
+     *
+     * @param n {@code >= 0, < size();} which attribute
+     * @param attribute {@code null-ok;} the attribute object
+     */
+    public void set(int n, Attribute attribute) {
+        set0(n, attribute);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/iface/StdField.java b/dx/src/com/android/dx/cf/iface/StdField.java
new file mode 100644
index 0000000..022d757
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/StdField.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.cf.attrib.AttConstantValue;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.cst.TypedConstant;
+
+/**
+ * Standard implementation of {@link Field}, which directly stores
+ * all the associated data.
+ */
+public final class StdField extends StdMember implements Field {
+    /**
+     * Constructs an instance.
+     *
+     * @param definingClass {@code non-null;} the defining class
+     * @param accessFlags access flags
+     * @param nat {@code non-null;} member name and type (descriptor)
+     * @param attributes {@code non-null;} list of associated attributes
+     */
+    public StdField(CstType definingClass, int accessFlags, CstNat nat,
+                    AttributeList attributes) {
+        super(definingClass, accessFlags, nat, attributes);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypedConstant getConstantValue() {
+        AttributeList attribs = getAttributes();
+        AttConstantValue cval = (AttConstantValue)
+            attribs.findFirst(AttConstantValue.ATTRIBUTE_NAME);
+
+        if (cval == null) {
+            return null;
+        }
+
+        return cval.getConstantValue();
+    }
+}
diff --git a/dx/src/com/android/dx/cf/iface/StdFieldList.java b/dx/src/com/android/dx/cf/iface/StdFieldList.java
new file mode 100644
index 0000000..b2fcbcf
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/StdFieldList.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * Standard implementation of {@link FieldList}, which directly stores
+ * an array of {@link Field} objects and can be made immutable.
+ */
+public final class StdFieldList extends FixedSizeList implements FieldList {
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     */
+    public StdFieldList(int size) {
+        super(size);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Field get(int n) {
+        return (Field) get0(n);
+    }
+
+    /**
+     * Sets the field at the given index.
+     *
+     * @param n {@code >= 0, < size();} which field
+     * @param field {@code null-ok;} the field object
+     */
+    public void set(int n, Field field) {
+        set0(n, field);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/iface/StdMember.java b/dx/src/com/android/dx/cf/iface/StdMember.java
new file mode 100644
index 0000000..30c395e
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/StdMember.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+
+/**
+ * Standard implementation of {@link Member}, which directly stores
+ * all the associated data.
+ */
+public abstract class StdMember implements Member {
+    /** {@code non-null;} the defining class */
+    private final CstType definingClass;
+
+    /** access flags */
+    private final int accessFlags;
+
+    /** {@code non-null;} member name and type */
+    private final CstNat nat;
+
+    /** {@code non-null;} list of associated attributes */
+    private final AttributeList attributes;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param definingClass {@code non-null;} the defining class
+     * @param accessFlags access flags
+     * @param nat {@code non-null;} member name and type (descriptor)
+     * @param attributes {@code non-null;} list of associated attributes
+     */
+    public StdMember(CstType definingClass, int accessFlags, CstNat nat,
+                     AttributeList attributes) {
+        if (definingClass == null) {
+            throw new NullPointerException("definingClass == null");
+        }
+
+        if (nat == null) {
+            throw new NullPointerException("nat == null");
+        }
+
+        if (attributes == null) {
+            throw new NullPointerException("attributes == null");
+        }
+
+        this.definingClass = definingClass;
+        this.accessFlags = accessFlags;
+        this.nat = nat;
+        this.attributes = attributes;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append(getClass().getName());
+        sb.append('{');
+        sb.append(nat.toHuman());
+        sb.append('}');
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final CstType getDefiningClass() {
+        return definingClass;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int getAccessFlags() {
+        return accessFlags;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final CstNat getNat() {
+        return nat;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final CstString getName() {
+        return nat.getName();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final CstString getDescriptor() {
+        return nat.getDescriptor();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final AttributeList getAttributes() {
+        return attributes;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/iface/StdMethod.java b/dx/src/com/android/dx/cf/iface/StdMethod.java
new file mode 100644
index 0000000..5ff86ad
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/StdMethod.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+
+/**
+ * Standard implementation of {@link Method}, which directly stores
+ * all the associated data.
+ */
+public final class StdMethod extends StdMember implements Method {
+    /** {@code non-null;} the effective method descriptor */
+    private final Prototype effectiveDescriptor;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param definingClass {@code non-null;} the defining class
+     * @param accessFlags access flags
+     * @param nat {@code non-null;} member name and type (descriptor)
+     * @param attributes {@code non-null;} list of associated attributes
+     */
+    public StdMethod(CstType definingClass, int accessFlags, CstNat nat,
+            AttributeList attributes) {
+        super(definingClass, accessFlags, nat, attributes);
+
+        String descStr = getDescriptor().getString();
+        effectiveDescriptor =
+            Prototype.intern(descStr, definingClass.getClassType(),
+                                    AccessFlags.isStatic(accessFlags),
+                                    nat.isInstanceInit());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Prototype getEffectiveDescriptor() {
+        return effectiveDescriptor;
+    }
+}
diff --git a/dx/src/com/android/dx/cf/iface/StdMethodList.java b/dx/src/com/android/dx/cf/iface/StdMethodList.java
new file mode 100644
index 0000000..114b682
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/StdMethodList.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.cf.iface;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * Standard implementation of {@link MethodList}, which directly stores
+ * an array of {@link Method} objects and can be made immutable.
+ */
+public final class StdMethodList extends FixedSizeList implements MethodList {
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     */
+    public StdMethodList(int size) {
+        super(size);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Method get(int n) {
+        return (Method) get0(n);
+    }
+
+    /**
+     * Sets the method at the given index.
+     *
+     * @param n {@code >= 0, < size();} which method
+     * @param method {@code null-ok;} the method object
+     */
+    public void set(int n, Method method) {
+        set0(n, method);
+    }
+}
diff --git a/dx/src/com/android/dx/cf/iface/package.html b/dx/src/com/android/dx/cf/iface/package.html
new file mode 100644
index 0000000..c734552
--- /dev/null
+++ b/dx/src/com/android/dx/cf/iface/package.html
@@ -0,0 +1,10 @@
+<body>
+<p>Interfaces and base classes for dealing with class files. This package
+doesn't have any parsing but does have basic container implementations.</p>
+
+<p><b>PACKAGES USED:</b>
+<ul>
+<li><code>com.android.dx.rop.pool</code></li>
+<li><code>com.android.dx.util</code></li>
+</ul>
+</body>
diff --git a/dx/src/com/android/dx/command/Main.java b/dx/src/com/android/dx/command/Main.java
new file mode 100644
index 0000000..67875fa
--- /dev/null
+++ b/dx/src/com/android/dx/command/Main.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command;
+
+import com.android.dx.Version;
+
+/**
+ * Main class for dx. It recognizes enough options to be able to dispatch
+ * to the right "actual" main.
+ */
+public class Main {
+    private static final String USAGE_MESSAGE =
+        "usage:\n" +
+        "  dx --dex [--debug] [--verbose] [--positions=<style>] [--no-locals]\n" +
+        "  [--no-optimize] [--statistics] [--[no-]optimize-list=<file>] [--no-strict]\n" +
+        "  [--keep-classes] [--output=<file>] [--dump-to=<file>] [--dump-width=<n>]\n" +
+        "  [--dump-method=<name>[*]] [--verbose-dump] [--no-files] [--core-library]\n" +
+        "  [--num-threads=<n>] [--incremental] [--force-jumbo] [--no-warning]\n" +
+        "  [--multi-dex [--main-dex-list=<file> [--minimal-main-dex]]\n" +
+        "  [--input-list=<file>] [--min-sdk-version=<n>]\n" +
+        "  [--allow-all-interface-method-invokes]\n" +
+        "  [<file>.class | <file>.{zip,jar,apk} | <directory>] ...\n" +
+        "    Convert a set of classfiles into a dex file, optionally embedded in a\n" +
+        "    jar/zip. Output name must end with one of: .dex .jar .zip .apk or be a\n" +
+        "    directory.\n" +
+        "    Positions options: none, important, lines.\n" +
+        "    --multi-dex: allows to generate several dex files if needed. This option is\n" +
+        "    exclusive with --incremental, causes --num-threads to be ignored and only\n" +
+        "    supports folder or archive output.\n" +
+        "    --main-dex-list=<file>: <file> is a list of class file names, classes\n" +
+        "    defined by those class files are put in classes.dex.\n" +
+        "    --minimal-main-dex: only classes selected by --main-dex-list are to be put\n" +
+        "    in the main dex.\n" +
+        "    --input-list: <file> is a list of inputs.\n" +
+        "    Each line in <file> must end with one of: .class .jar .zip .apk or be a\n" +
+        "    directory.\n" +
+        "    --min-sdk-version=<n>: Enable dex file features that require at least sdk\n" +
+        "    version <n>.\n" +
+        "  dx --annotool --annotation=<class> [--element=<element types>]\n" +
+        "  [--print=<print types>]\n" +
+        "  dx --dump [--debug] [--strict] [--bytes] [--optimize]\n" +
+        "  [--basic-blocks | --rop-blocks | --ssa-blocks | --dot] [--ssa-step=<step>]\n" +
+        "  [--width=<n>] [<file>.class | <file>.txt] ...\n" +
+        "    Dump classfiles, or transformations thereof, in a human-oriented format.\n" +
+        "  dx --find-usages <file.dex> <declaring type> <member>\n" +
+        "    Find references and declarations to a field or method.\n" +
+        "    <declaring type> is a class name in internal form, like Ljava/lang/Object;\n" +
+        "    <member> is a field or method name, like hashCode.\n" +
+        "  dx -J<option> ... <arguments, in one of the above forms>\n" +
+        "    Pass VM-specific options to the virtual machine that runs dx.\n" +
+        "  dx --version\n" +
+        "    Print the version of this tool (" + Version.VERSION + ").\n" +
+        "  dx --help\n" +
+        "    Print this message.";
+
+    /**
+     * This class is uninstantiable.
+     */
+    private Main() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Run!
+     */
+    public static void main(String[] args) {
+        boolean gotCmd = false;
+        boolean showUsage = false;
+
+        try {
+            for (int i = 0; i < args.length; i++) {
+                String arg = args[i];
+                if (arg.equals("--") || !arg.startsWith("--")) {
+                    gotCmd = false;
+                    showUsage = true;
+                    break;
+                }
+
+                gotCmd = true;
+                if (arg.equals("--dex")) {
+                    com.android.dx.command.dexer.Main.main(without(args, i));
+                    break;
+                } else if (arg.equals("--dump")) {
+                    com.android.dx.command.dump.Main.main(without(args, i));
+                    break;
+                } else if (arg.equals("--annotool")) {
+                    com.android.dx.command.annotool.Main.main(
+                            without(args, i));
+                    break;
+                } else if (arg.equals("--find-usages")) {
+                    com.android.dx.command.findusages.Main.main(without(args, i));
+                    break;
+                } else if (arg.equals("--version")) {
+                    version();
+                    break;
+                } else if (arg.equals("--help")) {
+                    showUsage = true;
+                    break;
+                } else {
+                    gotCmd = false;
+                }
+            }
+        } catch (UsageException ex) {
+            showUsage = true;
+        } catch (RuntimeException ex) {
+            System.err.println("\nUNEXPECTED TOP-LEVEL EXCEPTION:");
+            ex.printStackTrace();
+            System.exit(2);
+        } catch (Throwable ex) {
+            System.err.println("\nUNEXPECTED TOP-LEVEL ERROR:");
+            ex.printStackTrace();
+            if ((ex instanceof NoClassDefFoundError)
+                    || (ex instanceof NoSuchMethodError)) {
+                System.err.println(
+                        "Note: You may be using an incompatible " +
+                        "virtual machine or class library.\n" +
+                        "(This program is known to be incompatible " +
+                        "with recent releases of GCJ.)");
+            }
+            System.exit(3);
+        }
+
+        if (!gotCmd) {
+            System.err.println("error: no command specified");
+            showUsage = true;
+        }
+
+        if (showUsage) {
+            usage();
+            System.exit(1);
+        }
+    }
+
+    /**
+     * Prints the version message.
+     */
+    private static void version() {
+        System.err.println("dx version " + Version.VERSION);
+        System.exit(0);
+    }
+
+    /**
+     * Prints the usage message.
+     */
+    private static void usage() {
+        System.err.println(USAGE_MESSAGE);
+    }
+
+    /**
+     * Returns a copy of the given args array, but without the indicated
+     * element.
+     *
+     * @param orig {@code non-null;} original array
+     * @param n which element to omit
+     * @return {@code non-null;} new array
+     */
+    private static String[] without(String[] orig, int n) {
+        int len = orig.length - 1;
+        String[] newa = new String[len];
+        System.arraycopy(orig, 0, newa, 0, n);
+        System.arraycopy(orig, n + 1, newa, n, len - n);
+        return newa;
+    }
+}
diff --git a/dx/src/com/android/dx/command/UsageException.java b/dx/src/com/android/dx/command/UsageException.java
new file mode 100644
index 0000000..6809bf4
--- /dev/null
+++ b/dx/src/com/android/dx/command/UsageException.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command;
+
+/**
+ * Simple exception class used to communicate that the command-line tool
+ * should print the usage message.
+ */
+public class UsageException extends RuntimeException {
+    // This space intentionally left blank.
+}
diff --git a/dx/src/com/android/dx/command/annotool/AnnotationLister.java b/dx/src/com/android/dx/command/annotool/AnnotationLister.java
new file mode 100644
index 0000000..02e1c69
--- /dev/null
+++ b/dx/src/com/android/dx/command/annotool/AnnotationLister.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.annotool;
+
+import com.android.dx.cf.attrib.AttRuntimeInvisibleAnnotations;
+import com.android.dx.cf.attrib.AttRuntimeVisibleAnnotations;
+import com.android.dx.cf.attrib.BaseAnnotations;
+import com.android.dx.cf.direct.ClassPathOpener;
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.direct.StdAttributeFactory;
+import com.android.dx.cf.iface.Attribute;
+import com.android.dx.cf.iface.AttributeList;
+import com.android.dx.rop.annotation.Annotation;
+import com.android.dx.util.ByteArray;
+import java.io.File;
+import java.lang.annotation.ElementType;
+import java.util.HashSet;
+
+/**
+ * Greps annotations on a set of class files and prints matching elements
+ * to stdout. What counts as a match and what should be printed is controlled
+ * by the {@code Main.Arguments} instance.
+ */
+class AnnotationLister {
+    /**
+     * The string name of the pseudo-class that
+     * contains package-wide annotations
+     */
+    private static final String PACKAGE_INFO = "package-info";
+
+    /** current match configuration */
+    private final Main.Arguments args;
+
+    /** Set of classes whose inner classes should be considered matched */
+    HashSet<String> matchInnerClassesOf = new HashSet<String>();
+
+    /** set of packages whose classes should be considered matched */
+    HashSet<String> matchPackages = new HashSet<String>();
+
+    AnnotationLister (Main.Arguments args) {
+        this.args = args;
+    }
+
+    /** Processes based on configuration specified in constructor. */
+    void process() {
+        for (String path : args.files) {
+            ClassPathOpener opener;
+
+            opener = new ClassPathOpener(path, true,
+                    new ClassPathOpener.Consumer() {
+                @Override
+                public boolean processFileBytes(String name, long lastModified, byte[] bytes) {
+                    if (!name.endsWith(".class")) {
+                        return true;
+                    }
+
+                    ByteArray ba = new ByteArray(bytes);
+                    DirectClassFile cf
+                        = new DirectClassFile(ba, name, true);
+
+                    cf.setAttributeFactory(StdAttributeFactory.THE_ONE);
+                    AttributeList attributes = cf.getAttributes();
+                    Attribute att;
+
+                    String cfClassName
+                            = cf.getThisClass().getClassType().getClassName();
+
+                    if (cfClassName.endsWith(PACKAGE_INFO)) {
+                        att = attributes.findFirst(
+                                AttRuntimeInvisibleAnnotations.ATTRIBUTE_NAME);
+
+                        for (;att != null; att = attributes.findNext(att)) {
+                            BaseAnnotations ann = (BaseAnnotations)att;
+                            visitPackageAnnotation(cf, ann);
+                        }
+
+                        att = attributes.findFirst(
+                                AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME);
+
+                        for (;att != null; att = attributes.findNext(att)) {
+                            BaseAnnotations ann = (BaseAnnotations)att;
+                            visitPackageAnnotation(cf, ann);
+                        }
+                    } else if (isMatchingInnerClass(cfClassName)
+                            || isMatchingPackage(cfClassName)) {
+                        printMatch(cf);
+                    } else {
+                        att = attributes.findFirst(
+                                AttRuntimeInvisibleAnnotations.ATTRIBUTE_NAME);
+
+                        for (;att != null; att = attributes.findNext(att)) {
+                            BaseAnnotations ann = (BaseAnnotations)att;
+                            visitClassAnnotation(cf, ann);
+                        }
+
+                        att = attributes.findFirst(
+                                AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME);
+
+                        for (;att != null; att = attributes.findNext(att)) {
+                            BaseAnnotations ann = (BaseAnnotations)att;
+                            visitClassAnnotation(cf, ann);
+                        }
+                    }
+
+                    return true;
+                }
+
+                @Override
+                public void onException(Exception ex) {
+                    throw new RuntimeException(ex);
+                }
+
+                @Override
+                public void onProcessArchiveStart(File file) {
+
+                }
+
+            });
+
+            opener.process();
+        }
+    }
+
+    /**
+     * Inspects a class annotation.
+     *
+     * @param cf {@code non-null;} class file
+     * @param ann {@code non-null;} annotation
+     */
+    private void visitClassAnnotation(DirectClassFile cf,
+            BaseAnnotations ann) {
+
+        if (!args.eTypes.contains(ElementType.TYPE)) {
+            return;
+        }
+
+        for (Annotation anAnn : ann.getAnnotations().getAnnotations()) {
+            String annClassName
+                    = anAnn.getType().getClassType().getClassName();
+            if (args.aclass.equals(annClassName)) {
+                printMatch(cf);
+            }
+        }
+    }
+
+    /**
+     * Inspects a package annotation
+     *
+     * @param cf {@code non-null;} class file of "package-info" pseudo-class
+     * @param ann {@code non-null;} annotation
+     */
+    private void visitPackageAnnotation(
+            DirectClassFile cf, BaseAnnotations ann) {
+
+        if (!args.eTypes.contains(ElementType.PACKAGE)) {
+            return;
+        }
+
+        String packageName = cf.getThisClass().getClassType().getClassName();
+
+        int slashIndex = packageName.lastIndexOf('/');
+
+        if (slashIndex == -1) {
+            packageName = "";
+        } else {
+            packageName
+                    = packageName.substring(0, slashIndex);
+        }
+
+
+        for (Annotation anAnn : ann.getAnnotations().getAnnotations()) {
+            String annClassName
+                    = anAnn.getType().getClassType().getClassName();
+            if (args.aclass.equals(annClassName)) {
+                printMatchPackage(packageName);
+            }
+        }
+    }
+
+
+    /**
+     * Prints, or schedules for printing, elements related to a
+     * matching package.
+     *
+     * @param packageName {@code non-null;} name of package
+     */
+    private void printMatchPackage(String packageName) {
+        for (Main.PrintType pt : args.printTypes) {
+            switch (pt) {
+                case CLASS:
+                case INNERCLASS:
+                case METHOD:
+                    matchPackages.add(packageName);
+                    break;
+                case PACKAGE:
+                    System.out.println(packageName.replace('/','.'));
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Prints, or schedules for printing, elements related to a matching
+     * class.
+     *
+     * @param cf {@code non-null;} matching class
+     */
+    private void printMatch(DirectClassFile cf) {
+        for (Main.PrintType pt : args.printTypes) {
+            switch (pt) {
+                case CLASS:
+                    String classname;
+                    classname =
+                        cf.getThisClass().getClassType().getClassName();
+                    classname = classname.replace('/','.');
+                    System.out.println(classname);
+                    break;
+                case INNERCLASS:
+                    matchInnerClassesOf.add(
+                            cf.getThisClass().getClassType().getClassName());
+                    break;
+                case METHOD:
+                    //TODO
+                    break;
+                case PACKAGE:
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Checks to see if a specified class name should be considered a match
+     * due to previous matches.
+     *
+     * @param s {@code non-null;} class name
+     * @return true if this class should be considered a match
+     */
+    private boolean isMatchingInnerClass(String s) {
+        int i;
+
+        while (0 < (i = s.lastIndexOf('$'))) {
+            s = s.substring(0, i);
+            if (matchInnerClassesOf.contains(s)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks to see if a specified package should be considered a match due
+     * to previous matches.
+     *
+     * @param s {@code non-null;} package name
+     * @return true if this package should be considered a match
+     */
+    private boolean isMatchingPackage(String s) {
+        int slashIndex = s.lastIndexOf('/');
+
+        String packageName;
+        if (slashIndex == -1) {
+            packageName = "";
+        } else {
+            packageName
+                    = s.substring(0, slashIndex);
+        }
+
+        return matchPackages.contains(packageName);
+    }
+}
diff --git a/dx/src/com/android/dx/command/annotool/Main.java b/dx/src/com/android/dx/command/annotool/Main.java
new file mode 100644
index 0000000..b05287c
--- /dev/null
+++ b/dx/src/com/android/dx/command/annotool/Main.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.annotool;
+
+import java.lang.annotation.ElementType;
+import java.util.EnumSet;
+import java.util.Locale;
+
+public class Main {
+
+    private static class InvalidArgumentException extends Exception {
+        InvalidArgumentException() {
+            super();
+        }
+
+        InvalidArgumentException(String s) {
+            super(s);
+        }
+    }
+
+    enum PrintType {
+        CLASS,
+        INNERCLASS,
+        METHOD,
+        PACKAGE
+    }
+
+
+    static class Arguments {
+        /**
+         * from --annotation, dot-separated classname
+         * of annotation to look for
+         */
+        String aclass;
+
+        /** from --eTypes */
+        EnumSet<ElementType> eTypes = EnumSet.noneOf(ElementType.class);
+
+        /** from --print */
+        EnumSet<PrintType> printTypes = EnumSet.noneOf(PrintType.class);
+
+        /** remaining positional arguments */
+        String[] files;
+
+        Arguments() {
+        }
+
+        void parse (String[] argArray) throws InvalidArgumentException {
+            for (int i = 0; i < argArray.length; i++) {
+                String arg = argArray[i];
+
+                if (arg.startsWith("--annotation=")) {
+                    String argParam = arg.substring(arg.indexOf('=') + 1);
+                    if (aclass != null) {
+                        throw new InvalidArgumentException(
+                                "--annotation can only be specified once.");
+                    }
+                    aclass = argParam.replace('.','/');
+                } else if (arg.startsWith("--element=")) {
+                    String argParam = arg.substring(arg.indexOf('=') + 1);
+
+                    try {
+                        for (String p : argParam.split(",")) {
+                            eTypes.add(ElementType.valueOf(p.toUpperCase(Locale.ROOT)));
+                        }
+                    } catch (IllegalArgumentException ex) {
+                        throw new InvalidArgumentException(
+                                "invalid --element");
+                    }
+                } else if (arg.startsWith("--print=")) {
+                    String argParam = arg.substring(arg.indexOf('=') + 1);
+
+                    try {
+                        for (String p : argParam.split(",")) {
+                            printTypes.add(PrintType.valueOf(p.toUpperCase(Locale.ROOT)));
+                        }
+                    } catch (IllegalArgumentException ex) {
+                        throw new InvalidArgumentException("invalid --print");
+                    }
+                } else {
+                    files = new String[argArray.length - i];
+                    System.arraycopy(argArray, i, files, 0, files.length);
+                    break;
+                }
+            }
+
+            if (aclass == null) {
+                throw new InvalidArgumentException(
+                        "--annotation must be specified");
+            }
+
+            if (printTypes.isEmpty()) {
+                printTypes.add(PrintType.CLASS);
+            }
+
+            if (eTypes.isEmpty()) {
+                eTypes.add(ElementType.TYPE);
+            }
+
+            EnumSet<ElementType> set = eTypes.clone();
+
+            set.remove(ElementType.TYPE);
+            set.remove(ElementType.PACKAGE);
+            if (!set.isEmpty()) {
+                throw new InvalidArgumentException(
+                        "only --element parameters 'type' and 'package' "
+                                + "supported");
+            }
+        }
+    }
+
+    /**
+     * This class is uninstantiable.
+     */
+    private Main() {
+        // This space intentionally left blank.
+    }
+
+    public static void main(String[] argArray) {
+
+        final Arguments args = new Arguments();
+
+        try {
+            args.parse(argArray);
+        } catch (InvalidArgumentException ex) {
+            System.err.println(ex.getMessage());
+
+            throw new RuntimeException("usage");
+        }
+
+        new AnnotationLister(args).process();
+    }
+}
diff --git a/dx/src/com/android/dx/command/dexer/DxContext.java b/dx/src/com/android/dx/command/dexer/DxContext.java
new file mode 100644
index 0000000..db106cd
--- /dev/null
+++ b/dx/src/com/android/dx/command/dexer/DxContext.java
@@ -0,0 +1,34 @@
+package com.android.dx.command.dexer;
+
+import com.android.dx.dex.cf.CodeStatistics;
+import com.android.dx.dex.cf.OptimizerOptions;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+
+/**
+ * State used by a single invocation of {@link Main}.
+ */
+public class DxContext {
+    public final CodeStatistics codeStatistics = new CodeStatistics();
+    public final OptimizerOptions optimizerOptions = new OptimizerOptions();
+    public final PrintStream out;
+    public final PrintStream err;
+
+    @SuppressWarnings("IOResourceOpenedButNotSafelyClosed")
+    final PrintStream noop = new PrintStream(new OutputStream() {
+        @Override
+        public void write(int b) throws IOException {
+            // noop;
+        }
+    });
+
+    public DxContext(OutputStream out, OutputStream err) {
+        this.out = new PrintStream(out);
+        this.err = new PrintStream(err);
+    }
+
+    public DxContext() {
+        this(System.out, System.err);
+    }
+}
diff --git a/dx/src/com/android/dx/command/dexer/Main.java b/dx/src/com/android/dx/command/dexer/Main.java
new file mode 100644
index 0000000..3503edb
--- /dev/null
+++ b/dx/src/com/android/dx/command/dexer/Main.java
@@ -0,0 +1,1974 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.dexer;
+
+import com.android.dex.Dex;
+import com.android.dex.DexException;
+import com.android.dex.DexFormat;
+import com.android.dex.util.FileUtils;
+import com.android.dx.Version;
+import com.android.dx.cf.code.SimException;
+import com.android.dx.cf.direct.ClassPathOpener;
+import com.android.dx.cf.direct.ClassPathOpener.FileNameFilter;
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.direct.StdAttributeFactory;
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.command.UsageException;
+import com.android.dx.dex.DexOptions;
+import com.android.dx.dex.cf.CfOptions;
+import com.android.dx.dex.cf.CfTranslator;
+import com.android.dx.dex.code.PositionList;
+import com.android.dx.dex.file.ClassDefItem;
+import com.android.dx.dex.file.DexFile;
+import com.android.dx.dex.file.EncodedMethod;
+import com.android.dx.merge.CollisionPolicy;
+import com.android.dx.merge.DexMerger;
+import com.android.dx.rop.annotation.Annotation;
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.Type;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+
+/**
+ * Main class for the class file translator.
+ */
+public class Main {
+
+    /**
+     * File extension of a {@code .dex} file.
+     */
+    private static final String DEX_EXTENSION = ".dex";
+
+    /**
+     * File name prefix of a {@code .dex} file automatically loaded in an
+     * archive.
+     */
+    private static final String DEX_PREFIX = "classes";
+
+    /**
+     * {@code non-null;} the lengthy message that tries to discourage
+     * people from defining core classes in applications
+     */
+    private static final String IN_RE_CORE_CLASSES =
+        "Ill-advised or mistaken usage of a core class (java.* or javax.*)\n" +
+        "when not building a core library.\n\n" +
+        "This is often due to inadvertently including a core library file\n" +
+        "in your application's project, when using an IDE (such as\n" +
+        "Eclipse). If you are sure you're not intentionally defining a\n" +
+        "core class, then this is the most likely explanation of what's\n" +
+        "going on.\n\n" +
+        "However, you might actually be trying to define a class in a core\n" +
+        "namespace, the source of which you may have taken, for example,\n" +
+        "from a non-Android virtual machine project. This will most\n" +
+        "assuredly not work. At a minimum, it jeopardizes the\n" +
+        "compatibility of your app with future versions of the platform.\n" +
+        "It is also often of questionable legality.\n\n" +
+        "If you really intend to build a core library -- which is only\n" +
+        "appropriate as part of creating a full virtual machine\n" +
+        "distribution, as opposed to compiling an application -- then use\n" +
+        "the \"--core-library\" option to suppress this error message.\n\n" +
+        "If you go ahead and use \"--core-library\" but are in fact\n" +
+        "building an application, then be forewarned that your application\n" +
+        "will still fail to build or run, at some point. Please be\n" +
+        "prepared for angry customers who find, for example, that your\n" +
+        "application ceases to function once they upgrade their operating\n" +
+        "system. You will be to blame for this problem.\n\n" +
+        "If you are legitimately using some code that happens to be in a\n" +
+        "core package, then the easiest safe alternative you have is to\n" +
+        "repackage that code. That is, move the classes in question into\n" +
+        "your own package namespace. This means that they will never be in\n" +
+        "conflict with core system classes. JarJar is a tool that may help\n" +
+        "you in this endeavor. If you find that you cannot do this, then\n" +
+        "that is an indication that the path you are on will ultimately\n" +
+        "lead to pain, suffering, grief, and lamentation.\n";
+
+    /**
+     * {@code non-null;} name of the standard manifest file in {@code .jar}
+     * files
+     */
+    private static final String MANIFEST_NAME = "META-INF/MANIFEST.MF";
+
+    /**
+     * {@code non-null;} attribute name for the (quasi-standard?)
+     * {@code Created-By} attribute
+     */
+    private static final Attributes.Name CREATED_BY =
+        new Attributes.Name("Created-By");
+
+    /**
+     * {@code non-null;} list of {@code javax} subpackages that are considered
+     * to be "core". <b>Note:</b>: This list must be sorted, since it
+     * is binary-searched.
+     */
+    private static final String[] JAVAX_CORE = {
+        "accessibility", "crypto", "imageio", "management", "naming", "net",
+        "print", "rmi", "security", "sip", "sound", "sql", "swing",
+        "transaction", "xml"
+    };
+
+    /* Array.newInstance may be added by RopperMachine,
+     * ArrayIndexOutOfBoundsException.<init> may be added by EscapeAnalysis */
+    private static final int MAX_METHOD_ADDED_DURING_DEX_CREATION = 2;
+
+    /* <primitive types box class>.TYPE */
+    private static final int MAX_FIELD_ADDED_DURING_DEX_CREATION = 9;
+
+    /** number of errors during processing */
+    private AtomicInteger errors = new AtomicInteger(0);
+
+    /** {@code non-null;} parsed command-line arguments */
+    private Arguments args;
+
+    /** {@code non-null;} output file in-progress */
+    private DexFile outputDex;
+
+    /**
+     * {@code null-ok;} map of resources to include in the output, or
+     * {@code null} if resources are being ignored
+     */
+    private TreeMap<String, byte[]> outputResources;
+
+    /** Library .dex files to merge into the output .dex. */
+    private final List<byte[]> libraryDexBuffers = new ArrayList<byte[]>();
+
+    /** Thread pool object used for multi-thread class translation. */
+    private ExecutorService classTranslatorPool;
+
+    /** Single thread executor, for collecting results of parallel translation,
+     * and adding classes to dex file in original input file order. */
+    private ExecutorService classDefItemConsumer;
+
+    /** Futures for {@code classDefItemConsumer} tasks. */
+    private List<Future<Boolean>> addToDexFutures =
+            new ArrayList<Future<Boolean>>();
+
+    /** Thread pool object used for multi-thread dex conversion (to byte array).
+     * Used in combination with multi-dex support, to allow outputing
+     * a completed dex file, in parallel with continuing processing. */
+    private ExecutorService dexOutPool;
+
+    /** Futures for {@code dexOutPool} task. */
+    private List<Future<byte[]>> dexOutputFutures = new ArrayList<Future<byte[]>>();
+
+    /** Lock object used to to coordinate dex file rotation, and
+     * multi-threaded translation. */
+    private Object dexRotationLock = new Object();
+
+    /** Record the number if method indices "reserved" for files
+     * committed to translation in the context of the current dex
+     * file, but not yet added. */
+    private int maxMethodIdsInProcess = 0;
+
+    /** Record the number if field indices "reserved" for files
+     * committed to translation in the context of the current dex
+     * file, but not yet added. */
+    private int maxFieldIdsInProcess = 0;
+
+    /** true if any files are successfully processed */
+    private volatile boolean anyFilesProcessed;
+
+    /** class files older than this must be defined in the target dex file. */
+    private long minimumFileAge = 0;
+
+    private Set<String> classesInMainDex = null;
+
+    private List<byte[]> dexOutputArrays = new ArrayList<byte[]>();
+
+    private OutputStreamWriter humanOutWriter = null;
+
+    private final DxContext context;
+
+    public Main(DxContext context) {
+        this.context = context;
+    }
+
+    /**
+     * Run and exit if something unexpected happened.
+     * @param argArray the command line arguments
+     */
+    public static void main(String[] argArray) throws IOException {
+        DxContext context = new DxContext();
+        Arguments arguments = new Arguments(context);
+        arguments.parse(argArray);
+
+        int result = new Main(context).runDx(arguments);
+
+        if (result != 0) {
+            System.exit(result);
+        }
+    }
+
+    public static void clearInternTables() {
+        Prototype.clearInternTable();
+        RegisterSpec.clearInternTable();
+        CstType.clearInternTable();
+        Type.clearInternTable();
+    }
+
+    /**
+     * Run and return a result code.
+     * @param arguments the data + parameters for the conversion
+     * @return 0 if success &gt; 0 otherwise.
+     */
+    public static int run(Arguments arguments) throws IOException {
+        return new Main(new DxContext()).runDx(arguments);
+    }
+
+    public int runDx(Arguments arguments) throws IOException {
+
+        // Reset the error count to start fresh.
+        errors.set(0);
+        // empty the list, so that  tools that load dx and keep it around
+        // for multiple runs don't reuse older buffers.
+        libraryDexBuffers.clear();
+
+        args = arguments;
+        args.makeOptionsObjects();
+
+        OutputStream humanOutRaw = null;
+        if (args.humanOutName != null) {
+            humanOutRaw = openOutput(args.humanOutName);
+            humanOutWriter = new OutputStreamWriter(humanOutRaw);
+        }
+
+        try {
+            if (args.multiDex) {
+                return runMultiDex();
+            } else {
+                return runMonoDex();
+            }
+        } finally {
+            closeOutput(humanOutRaw);
+        }
+    }
+
+    private int runMonoDex() throws IOException {
+
+        File incrementalOutFile = null;
+        if (args.incremental) {
+            if (args.outName == null) {
+                context.err.println(
+                        "error: no incremental output name specified");
+                return -1;
+            }
+            incrementalOutFile = new File(args.outName);
+            if (incrementalOutFile.exists()) {
+                minimumFileAge = incrementalOutFile.lastModified();
+            }
+        }
+
+        if (!processAllFiles()) {
+            return 1;
+        }
+
+        if (args.incremental && !anyFilesProcessed) {
+            return 0; // this was a no-op incremental build
+        }
+
+        // this array is null if no classes were defined
+        byte[] outArray = null;
+
+        if (!outputDex.isEmpty() || (args.humanOutName != null)) {
+            outArray = writeDex(outputDex);
+
+            if (outArray == null) {
+                return 2;
+            }
+        }
+
+        if (args.incremental) {
+            outArray = mergeIncremental(outArray, incrementalOutFile);
+        }
+
+        outArray = mergeLibraryDexBuffers(outArray);
+
+        if (args.jarOutput) {
+            // Effectively free up the (often massive) DexFile memory.
+            outputDex = null;
+
+            if (outArray != null) {
+                outputResources.put(DexFormat.DEX_IN_JAR_NAME, outArray);
+            }
+            if (!createJar(args.outName)) {
+                return 3;
+            }
+        } else if (outArray != null && args.outName != null) {
+            OutputStream out = openOutput(args.outName);
+            out.write(outArray);
+            closeOutput(out);
+        }
+
+        return 0;
+    }
+
+    private int runMultiDex() throws IOException {
+
+        assert !args.incremental;
+
+        if (args.mainDexListFile != null) {
+            classesInMainDex = new HashSet<String>();
+            readPathsFromFile(args.mainDexListFile, classesInMainDex);
+        }
+
+        dexOutPool = Executors.newFixedThreadPool(args.numThreads);
+
+        if (!processAllFiles()) {
+            return 1;
+        }
+
+        if (!libraryDexBuffers.isEmpty()) {
+            throw new DexException("Library dex files are not supported in multi-dex mode");
+        }
+
+        if (outputDex != null) {
+            // this array is null if no classes were defined
+
+            dexOutputFutures.add(dexOutPool.submit(new DexWriter(outputDex)));
+
+            // Effectively free up the (often massive) DexFile memory.
+            outputDex = null;
+        }
+        try {
+            dexOutPool.shutdown();
+            if (!dexOutPool.awaitTermination(600L, TimeUnit.SECONDS)) {
+                throw new RuntimeException("Timed out waiting for dex writer threads.");
+            }
+
+            for (Future<byte[]> f : dexOutputFutures) {
+                dexOutputArrays.add(f.get());
+            }
+
+        } catch (InterruptedException ex) {
+            dexOutPool.shutdownNow();
+            throw new RuntimeException("A dex writer thread has been interrupted.");
+        } catch (Exception e) {
+            dexOutPool.shutdownNow();
+            throw new RuntimeException("Unexpected exception in dex writer thread");
+        }
+
+        if (args.jarOutput) {
+            for (int i = 0; i < dexOutputArrays.size(); i++) {
+                outputResources.put(getDexFileName(i),
+                        dexOutputArrays.get(i));
+            }
+
+            if (!createJar(args.outName)) {
+                return 3;
+            }
+        } else if (args.outName != null) {
+            File outDir = new File(args.outName);
+            assert outDir.isDirectory();
+            for (int i = 0; i < dexOutputArrays.size(); i++) {
+                OutputStream out = new FileOutputStream(new File(outDir, getDexFileName(i)));
+                try {
+                    out.write(dexOutputArrays.get(i));
+                } finally {
+                    closeOutput(out);
+                }
+            }
+        }
+
+        return 0;
+    }
+
+    private static String getDexFileName(int i) {
+        if (i == 0) {
+            return DexFormat.DEX_IN_JAR_NAME;
+        } else {
+            return DEX_PREFIX + (i + 1) + DEX_EXTENSION;
+        }
+    }
+
+    private static void readPathsFromFile(String fileName, Collection<String> paths) throws IOException {
+        BufferedReader bfr = null;
+        try {
+            FileReader fr = new FileReader(fileName);
+            bfr = new BufferedReader(fr);
+
+            String line;
+
+            while (null != (line = bfr.readLine())) {
+                paths.add(fixPath(line));
+            }
+
+        } finally {
+            if (bfr != null) {
+                bfr.close();
+            }
+        }
+    }
+
+    /**
+     * Merges the dex files {@code update} and {@code base}, preferring
+     * {@code update}'s definition for types defined in both dex files.
+     *
+     * @param base a file to find the previous dex file. May be a .dex file, a
+     *     jar file possibly containing a .dex file, or null.
+     * @return the bytes of the merged dex file, or null if both the update
+     *     and the base dex do not exist.
+     */
+    private byte[] mergeIncremental(byte[] update, File base) throws IOException {
+        Dex dexA = null;
+        Dex dexB = null;
+
+        if (update != null) {
+            dexA = new Dex(update);
+        }
+
+        if (base.exists()) {
+            dexB = new Dex(base);
+        }
+
+        Dex result;
+        if (dexA == null && dexB == null) {
+            return null;
+        } else if (dexA == null) {
+            result = dexB;
+        } else if (dexB == null) {
+            result = dexA;
+        } else {
+            result = new DexMerger(new Dex[] {dexA, dexB}, CollisionPolicy.KEEP_FIRST, context).merge();
+        }
+
+        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
+        result.writeTo(bytesOut);
+        return bytesOut.toByteArray();
+    }
+
+    /**
+     * Merges the dex files in library jars. If multiple dex files define the
+     * same type, this fails with an exception.
+     */
+    private byte[] mergeLibraryDexBuffers(byte[] outArray) throws IOException {
+        ArrayList<Dex> dexes = new ArrayList<Dex>();
+        if (outArray != null) {
+            dexes.add(new Dex(outArray));
+        }
+        for (byte[] libraryDex : libraryDexBuffers) {
+            dexes.add(new Dex(libraryDex));
+        }
+        if (dexes.isEmpty()) {
+            return null;
+        }
+        Dex merged = new DexMerger(dexes.toArray(new Dex[dexes.size()]), CollisionPolicy.FAIL, context).merge();
+        return merged.getBytes();
+    }
+
+    /**
+     * Constructs the output {@link DexFile}, fill it in with all the
+     * specified classes, and populate the resources map if required.
+     *
+     * @return whether processing was successful
+     */
+    private boolean processAllFiles() {
+        createDexFile();
+
+        if (args.jarOutput) {
+            outputResources = new TreeMap<String, byte[]>();
+        }
+
+        anyFilesProcessed = false;
+        String[] fileNames = args.fileNames;
+        Arrays.sort(fileNames);
+
+        // translate classes in parallel
+        classTranslatorPool = new ThreadPoolExecutor(args.numThreads,
+               args.numThreads, 0, TimeUnit.SECONDS,
+               new ArrayBlockingQueue<Runnable>(2 * args.numThreads, true),
+               new ThreadPoolExecutor.CallerRunsPolicy());
+        // collect translated and write to dex in order
+        classDefItemConsumer = Executors.newSingleThreadExecutor();
+
+
+        try {
+            if (args.mainDexListFile != null) {
+                // with --main-dex-list
+                FileNameFilter mainPassFilter = args.strictNameCheck ? new MainDexListFilter() :
+                    new BestEffortMainDexListFilter();
+
+                // forced in main dex
+                for (int i = 0; i < fileNames.length; i++) {
+                    processOne(fileNames[i], mainPassFilter);
+                }
+
+                if (dexOutputFutures.size() > 0) {
+                    throw new DexException("Too many classes in " + Arguments.MAIN_DEX_LIST_OPTION
+                            + ", main dex capacity exceeded");
+                }
+
+                if (args.minimalMainDex) {
+                    // start second pass directly in a secondary dex file.
+
+                    // Wait for classes in progress to complete
+                    synchronized(dexRotationLock) {
+                        while(maxMethodIdsInProcess > 0 || maxFieldIdsInProcess > 0) {
+                            try {
+                                dexRotationLock.wait();
+                            } catch(InterruptedException ex) {
+                                /* ignore */
+                            }
+                        }
+                    }
+
+                    rotateDexFile();
+                }
+
+                // remaining files
+                FileNameFilter filter = new RemoveModuleInfoFilter(new NotFilter(mainPassFilter));
+                for (int i = 0; i < fileNames.length; i++) {
+                    processOne(fileNames[i], filter);
+                }
+            } else {
+                // without --main-dex-list
+                FileNameFilter filter = new RemoveModuleInfoFilter(ClassPathOpener.acceptAll);
+                for (int i = 0; i < fileNames.length; i++) {
+                    processOne(fileNames[i], filter);
+                }
+            }
+        } catch (StopProcessing ex) {
+            /*
+             * Ignore it and just let the error reporting do
+             * their things.
+             */
+        }
+
+        try {
+            classTranslatorPool.shutdown();
+            classTranslatorPool.awaitTermination(600L, TimeUnit.SECONDS);
+            classDefItemConsumer.shutdown();
+            classDefItemConsumer.awaitTermination(600L, TimeUnit.SECONDS);
+
+            for (Future<Boolean> f : addToDexFutures) {
+                try {
+                    f.get();
+                } catch(ExecutionException ex) {
+                    // Catch any previously uncaught exceptions from
+                    // class translation and adding to dex.
+                    int count = errors.incrementAndGet();
+                    if (count < 10) {
+                        if (args.debug) {
+                            context.err.println("Uncaught translation error:");
+                            ex.getCause().printStackTrace(context.err);
+                        } else {
+                            context.err.println("Uncaught translation error: " + ex.getCause());
+                        }
+                    } else {
+                        throw new InterruptedException("Too many errors");
+                    }
+                }
+            }
+
+        } catch (InterruptedException ie) {
+            classTranslatorPool.shutdownNow();
+            classDefItemConsumer.shutdownNow();
+            throw new RuntimeException("Translation has been interrupted", ie);
+        } catch (Exception e) {
+            classTranslatorPool.shutdownNow();
+            classDefItemConsumer.shutdownNow();
+            e.printStackTrace(context.out);
+            throw new RuntimeException("Unexpected exception in translator thread.", e);
+        }
+
+        int errorNum = errors.get();
+        if (errorNum != 0) {
+            context.err.println(errorNum + " error" +
+                    ((errorNum == 1) ? "" : "s") + "; aborting");
+            return false;
+        }
+
+        if (args.incremental && !anyFilesProcessed) {
+            return true;
+        }
+
+        if (!(anyFilesProcessed || args.emptyOk)) {
+            context.err.println("no classfiles specified");
+            return false;
+        }
+
+        if (args.optimize && args.statistics) {
+            context.codeStatistics.dumpStatistics(context.out);
+        }
+
+        return true;
+    }
+
+    private void createDexFile() {
+        outputDex = new DexFile(args.dexOptions);
+
+        if (args.dumpWidth != 0) {
+            outputDex.setDumpWidth(args.dumpWidth);
+        }
+    }
+
+    private void rotateDexFile() {
+        if (outputDex != null) {
+            if (dexOutPool != null) {
+                dexOutputFutures.add(dexOutPool.submit(new DexWriter(outputDex)));
+            } else {
+                dexOutputArrays.add(writeDex(outputDex));
+            }
+        }
+
+        createDexFile();
+    }
+
+    /**
+     * Processes one pathname element.
+     *
+     * @param pathname {@code non-null;} the pathname to process. May
+     * be the path of a class file, a jar file, or a directory
+     * containing class files.
+     * @param filter {@code non-null;} A filter for excluding files.
+     */
+    private void processOne(String pathname, FileNameFilter filter) {
+        ClassPathOpener opener;
+
+        opener = new ClassPathOpener(pathname, true, filter, new FileBytesConsumer());
+
+        if (opener.process()) {
+          updateStatus(true);
+        }
+    }
+
+    private void updateStatus(boolean res) {
+        anyFilesProcessed |= res;
+    }
+
+
+    /**
+     * Processes one file, which may be either a class or a resource.
+     *
+     * @param name {@code non-null;} name of the file
+     * @param bytes {@code non-null;} contents of the file
+     * @return whether processing was successful
+     */
+    private boolean processFileBytes(String name, long lastModified, byte[] bytes) {
+
+        boolean isClass = name.endsWith(".class");
+        boolean isClassesDex = name.equals(DexFormat.DEX_IN_JAR_NAME);
+        boolean keepResources = (outputResources != null);
+
+        if (!isClass && !isClassesDex && !keepResources) {
+            if (args.verbose) {
+                context.out.println("ignored resource " + name);
+            }
+            return false;
+        }
+
+        if (args.verbose) {
+            context.out.println("processing " + name + "...");
+        }
+
+        String fixedName = fixPath(name);
+
+        if (isClass) {
+
+            if (keepResources && args.keepClassesInJar) {
+                synchronized (outputResources) {
+                    outputResources.put(fixedName, bytes);
+                }
+            }
+            if (lastModified < minimumFileAge) {
+                return true;
+            }
+            processClass(fixedName, bytes);
+            // Assume that an exception may occur. Status will be updated
+            // asynchronously, if the class compiles without error.
+            return false;
+        } else if (isClassesDex) {
+            synchronized (libraryDexBuffers) {
+                libraryDexBuffers.add(bytes);
+            }
+            return true;
+        } else {
+            synchronized (outputResources) {
+                outputResources.put(fixedName, bytes);
+            }
+            return true;
+        }
+    }
+
+    /**
+     * Processes one classfile.
+     *
+     * @param name {@code non-null;} name of the file, clipped such that it
+     * <i>should</i> correspond to the name of the class it contains
+     * @param bytes {@code non-null;} contents of the file
+     * @return whether processing was successful
+     */
+    private boolean processClass(String name, byte[] bytes) {
+        if (! args.coreLibrary) {
+            checkClassName(name);
+        }
+
+        try {
+            new DirectClassFileConsumer(name, bytes, null).call(
+                    new ClassParserTask(name, bytes).call());
+        } catch (ParseException ex) {
+            // handled in FileBytesConsumer
+            throw ex;
+        } catch(Exception ex) {
+            throw new RuntimeException("Exception parsing classes", ex);
+        }
+
+        return true;
+    }
+
+
+    private DirectClassFile parseClass(String name, byte[] bytes) {
+
+        DirectClassFile cf = new DirectClassFile(bytes, name,
+                args.cfOptions.strictNameCheck);
+        cf.setAttributeFactory(StdAttributeFactory.THE_ONE);
+        cf.getMagic(); // triggers the actual parsing
+        return cf;
+    }
+
+    private ClassDefItem translateClass(byte[] bytes, DirectClassFile cf) {
+        try {
+            return CfTranslator.translate(context, cf, bytes, args.cfOptions,
+                    args.dexOptions, outputDex);
+        } catch (ParseException ex) {
+            context.err.println("\ntrouble processing:");
+            if (args.debug) {
+                ex.printStackTrace(context.err);
+            } else {
+                ex.printContext(context.err);
+            }
+        }
+        errors.incrementAndGet();
+        return null;
+    }
+
+    private boolean addClassToDex(ClassDefItem clazz) {
+        synchronized (outputDex) {
+            outputDex.add(clazz);
+        }
+        return true;
+    }
+
+    /**
+     * Check the class name to make sure it's not a "core library"
+     * class. If there is a problem, this updates the error count and
+     * throws an exception to stop processing.
+     *
+     * @param name {@code non-null;} the fully-qualified internal-form
+     * class name
+     */
+    private void checkClassName(String name) {
+        boolean bogus = false;
+
+        if (name.startsWith("java/")) {
+            bogus = true;
+        } else if (name.startsWith("javax/")) {
+            int slashAt = name.indexOf('/', 6);
+            if (slashAt == -1) {
+                // Top-level javax classes are verboten.
+                bogus = true;
+            } else {
+                String pkg = name.substring(6, slashAt);
+                bogus = (Arrays.binarySearch(JAVAX_CORE, pkg) >= 0);
+            }
+        }
+
+        if (! bogus) {
+            return;
+        }
+
+        /*
+         * The user is probably trying to include an entire desktop
+         * core library in a misguided attempt to get their application
+         * working. Try to help them understand what's happening.
+         */
+
+        context.err.println("\ntrouble processing \"" + name + "\":\n\n" +
+                IN_RE_CORE_CLASSES);
+        errors.incrementAndGet();
+        throw new StopProcessing();
+    }
+
+    /**
+     * Converts {@link #outputDex} into a {@code byte[]} and do whatever
+     * human-oriented dumping is required.
+     *
+     * @return {@code null-ok;} the converted {@code byte[]} or {@code null}
+     * if there was a problem
+     */
+    private byte[] writeDex(DexFile outputDex) {
+        byte[] outArray = null;
+
+        try {
+            try {
+                if (args.methodToDump != null) {
+                    /*
+                     * Simply dump the requested method. Note: The call
+                     * to toDex() is required just to get the underlying
+                     * structures ready.
+                     */
+                    outputDex.toDex(null, false);
+                    dumpMethod(outputDex, args.methodToDump, humanOutWriter);
+                } else {
+                    /*
+                     * This is the usual case: Create an output .dex file,
+                     * and write it, dump it, etc.
+                     */
+                    outArray = outputDex.toDex(humanOutWriter, args.verboseDump);
+                }
+
+                if (args.statistics) {
+                    context.out.println(outputDex.getStatistics().toHuman());
+                }
+            } finally {
+                if (humanOutWriter != null) {
+                    humanOutWriter.flush();
+                }
+            }
+        } catch (Exception ex) {
+            if (args.debug) {
+                context.err.println("\ntrouble writing output:");
+                ex.printStackTrace(context.err);
+            } else {
+                context.err.println("\ntrouble writing output: " +
+                                   ex.getMessage());
+            }
+            return null;
+        }
+        return outArray;
+    }
+
+    /**
+     * Creates a jar file from the resources (including dex file arrays).
+     *
+     * @param fileName {@code non-null;} name of the file
+     * @return whether the creation was successful
+     */
+    private boolean createJar(String fileName) {
+        /*
+         * Make or modify the manifest (as appropriate), put the dex
+         * array into the resources map, and then process the entire
+         * resources map in a uniform manner.
+         */
+
+        try {
+            Manifest manifest = makeManifest();
+            OutputStream out = openOutput(fileName);
+            JarOutputStream jarOut = new JarOutputStream(out, manifest);
+
+            try {
+                for (Map.Entry<String, byte[]> e :
+                         outputResources.entrySet()) {
+                    String name = e.getKey();
+                    byte[] contents = e.getValue();
+                    JarEntry entry = new JarEntry(name);
+                    int length = contents.length;
+
+                    if (args.verbose) {
+                        context.out.println("writing " + name + "; size " + length + "...");
+                    }
+
+                    entry.setSize(length);
+                    jarOut.putNextEntry(entry);
+                    jarOut.write(contents);
+                    jarOut.closeEntry();
+                }
+            } finally {
+                jarOut.finish();
+                jarOut.flush();
+                closeOutput(out);
+            }
+        } catch (Exception ex) {
+            if (args.debug) {
+                context.err.println("\ntrouble writing output:");
+                ex.printStackTrace(context.err);
+            } else {
+                context.err.println("\ntrouble writing output: " +
+                                   ex.getMessage());
+            }
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Creates and returns the manifest to use for the output. This may
+     * modify {@link #outputResources} (removing the pre-existing manifest).
+     *
+     * @return {@code non-null;} the manifest
+     */
+    private Manifest makeManifest() throws IOException {
+        byte[] manifestBytes = outputResources.get(MANIFEST_NAME);
+        Manifest manifest;
+        Attributes attribs;
+
+        if (manifestBytes == null) {
+            // We need to construct an entirely new manifest.
+            manifest = new Manifest();
+            attribs = manifest.getMainAttributes();
+            attribs.put(Attributes.Name.MANIFEST_VERSION, "1.0");
+        } else {
+            manifest = new Manifest(new ByteArrayInputStream(manifestBytes));
+            attribs = manifest.getMainAttributes();
+            outputResources.remove(MANIFEST_NAME);
+        }
+
+        String createdBy = attribs.getValue(CREATED_BY);
+        if (createdBy == null) {
+            createdBy = "";
+        } else {
+            createdBy += " + ";
+        }
+        createdBy += "dx " + Version.VERSION;
+
+        attribs.put(CREATED_BY, createdBy);
+        attribs.putValue("Dex-Location", DexFormat.DEX_IN_JAR_NAME);
+
+        return manifest;
+    }
+
+    /**
+     * Opens and returns the named file for writing, treating "-" specially.
+     *
+     * @param name {@code non-null;} the file name
+     * @return {@code non-null;} the opened file
+     */
+    private OutputStream openOutput(String name) throws IOException {
+        if (name.equals("-") ||
+                name.startsWith("-.")) {
+            return context.out;
+        }
+
+        return new FileOutputStream(name);
+    }
+
+    /**
+     * Flushes and closes the given output stream, except if it happens to be
+     * {@link System#out} in which case this method does the flush but not
+     * the close. This method will also silently do nothing if given a
+     * {@code null} argument.
+     *
+     * @param stream {@code null-ok;} what to close
+     */
+    private void closeOutput(OutputStream stream) throws IOException {
+        if (stream == null) {
+            return;
+        }
+
+        stream.flush();
+
+        if (stream != context.out) {
+            stream.close();
+        }
+    }
+
+    /**
+     * Returns the "fixed" version of a given file path, suitable for
+     * use as a path within a {@code .jar} file and for checking
+     * against a classfile-internal "this class" name. This looks for
+     * the last instance of the substring {@code "/./"} within
+     * the path, and if it finds it, it takes the portion after to be
+     * the fixed path. If that isn't found but the path starts with
+     * {@code "./"}, then that prefix is removed and the rest is
+     * return. If neither of these is the case, this method returns
+     * its argument.
+     *
+     * @param path {@code non-null;} the path to "fix"
+     * @return {@code non-null;} the fixed version (which might be the same as
+     * the given {@code path})
+     */
+    private static String fixPath(String path) {
+        /*
+         * If the path separator is \ (like on windows), we convert the
+         * path to a standard '/' separated path.
+         */
+        if (File.separatorChar == '\\') {
+            path = path.replace('\\', '/');
+        }
+
+        int index = path.lastIndexOf("/./");
+
+        if (index != -1) {
+            return path.substring(index + 3);
+        }
+
+        if (path.startsWith("./")) {
+            return path.substring(2);
+        }
+
+        return path;
+    }
+
+    /**
+     * Dumps any method with the given name in the given file.
+     *
+     * @param dex {@code non-null;} the dex file
+     * @param fqName {@code non-null;} the fully-qualified name of the
+     * method(s)
+     * @param out {@code non-null;} where to dump to
+     */
+    private void dumpMethod(DexFile dex, String fqName,
+            OutputStreamWriter out) {
+        boolean wildcard = fqName.endsWith("*");
+        int lastDot = fqName.lastIndexOf('.');
+
+        if ((lastDot <= 0) || (lastDot == (fqName.length() - 1))) {
+            context.err.println("bogus fully-qualified method name: " +
+                               fqName);
+            return;
+        }
+
+        String className = fqName.substring(0, lastDot).replace('.', '/');
+        String methodName = fqName.substring(lastDot + 1);
+        ClassDefItem clazz = dex.getClassOrNull(className);
+
+        if (clazz == null) {
+            context.err.println("no such class: " + className);
+            return;
+        }
+
+        if (wildcard) {
+            methodName = methodName.substring(0, methodName.length() - 1);
+        }
+
+        ArrayList<EncodedMethod> allMeths = clazz.getMethods();
+        TreeMap<CstNat, EncodedMethod> meths =
+            new TreeMap<CstNat, EncodedMethod>();
+
+        /*
+         * Figure out which methods to include in the output, and get them
+         * all sorted, so that the printout code is robust with respect to
+         * changes in the underlying order.
+         */
+        for (EncodedMethod meth : allMeths) {
+            String methName = meth.getName().getString();
+            if ((wildcard && methName.startsWith(methodName)) ||
+                (!wildcard && methName.equals(methodName))) {
+                meths.put(meth.getRef().getNat(), meth);
+            }
+        }
+
+        if (meths.size() == 0) {
+            context.err.println("no such method: " + fqName);
+            return;
+        }
+
+        PrintWriter pw = new PrintWriter(out);
+
+        for (EncodedMethod meth : meths.values()) {
+            // TODO: Better stuff goes here, perhaps.
+            meth.debugPrint(pw, args.verboseDump);
+
+            /*
+             * The (default) source file is an attribute of the class, but
+             * it's useful to see it in method dumps.
+             */
+            CstString sourceFile = clazz.getSourceFile();
+            if (sourceFile != null) {
+                pw.println("  source file: " + sourceFile.toQuoted());
+            }
+
+            Annotations methodAnnotations =
+                clazz.getMethodAnnotations(meth.getRef());
+            AnnotationsList parameterAnnotations =
+                clazz.getParameterAnnotations(meth.getRef());
+
+            if (methodAnnotations != null) {
+                pw.println("  method annotations:");
+                for (Annotation a : methodAnnotations.getAnnotations()) {
+                    pw.println("    " + a);
+                }
+            }
+
+            if (parameterAnnotations != null) {
+                pw.println("  parameter annotations:");
+                int sz = parameterAnnotations.size();
+                for (int i = 0; i < sz; i++) {
+                    pw.println("    parameter " + i);
+                    Annotations annotations = parameterAnnotations.get(i);
+                    for (Annotation a : annotations.getAnnotations()) {
+                        pw.println("      " + a);
+                    }
+                }
+            }
+        }
+
+        pw.flush();
+    }
+
+    private static class NotFilter implements FileNameFilter {
+        private final FileNameFilter filter;
+
+        private NotFilter(FileNameFilter filter) {
+            this.filter = filter;
+        }
+
+        @Override
+        public boolean accept(String path) {
+            return !filter.accept(path);
+        }
+    }
+
+    /**
+     * Filters "module-info.class" out of the paths accepted by delegate.
+     */
+    private static class RemoveModuleInfoFilter implements FileNameFilter {
+        protected final FileNameFilter delegate;
+
+        public RemoveModuleInfoFilter(FileNameFilter delegate) {
+            this.delegate = delegate;
+        }
+
+        @Override
+        public boolean accept(String path) {
+            return delegate.accept(path) && !("module-info.class".equals(path));
+        }
+    }
+
+    /**
+     * A quick and accurate filter for when file path can be trusted.
+     */
+    private class MainDexListFilter implements FileNameFilter {
+
+        @Override
+        public boolean accept(String fullPath) {
+            if (fullPath.endsWith(".class")) {
+                String path = fixPath(fullPath);
+                return classesInMainDex.contains(path);
+            } else {
+                return true;
+            }
+        }
+    }
+
+    /**
+     * A best effort conservative filter for when file path can <b>not</b> be trusted.
+     */
+    private class BestEffortMainDexListFilter implements FileNameFilter {
+
+       Map<String, List<String>> map = new HashMap<String, List<String>>();
+
+       public BestEffortMainDexListFilter() {
+           for (String pathOfClass : classesInMainDex) {
+               String normalized = fixPath(pathOfClass);
+               String simple = getSimpleName(normalized);
+               List<String> fullPath = map.get(simple);
+               if (fullPath == null) {
+                   fullPath = new ArrayList<String>(1);
+                   map.put(simple, fullPath);
+               }
+               fullPath.add(normalized);
+           }
+        }
+
+        @Override
+        public boolean accept(String path) {
+            if (path.endsWith(".class")) {
+                String normalized = fixPath(path);
+                String simple = getSimpleName(normalized);
+                List<String> fullPaths = map.get(simple);
+                if (fullPaths != null) {
+                    for (String fullPath : fullPaths) {
+                        if (normalized.endsWith(fullPath)) {
+                            return true;
+                        }
+                    }
+                }
+                return false;
+            } else {
+                return true;
+            }
+        }
+
+        private String getSimpleName(String path) {
+            int index = path.lastIndexOf('/');
+            if (index >= 0) {
+                return path.substring(index + 1);
+            } else {
+                return path;
+            }
+        }
+    }
+
+    /**
+     * Exception class used to halt processing prematurely.
+     */
+    private static class StopProcessing extends RuntimeException {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Command-line argument parser and access.
+     */
+    public static class Arguments {
+
+        private static final String MINIMAL_MAIN_DEX_OPTION = "--minimal-main-dex";
+
+        private static final String MAIN_DEX_LIST_OPTION = "--main-dex-list";
+
+        private static final String MULTI_DEX_OPTION = "--multi-dex";
+
+        private static final String NUM_THREADS_OPTION = "--num-threads";
+
+        private static final String INCREMENTAL_OPTION = "--incremental";
+
+        private static final String INPUT_LIST_OPTION = "--input-list";
+
+        public final DxContext context;
+
+        /** whether to run in debug mode */
+        public boolean debug = false;
+
+        /** whether to emit warning messages */
+        public boolean warnings = true;
+
+        /** whether to emit high-level verbose human-oriented output */
+        public boolean verbose = false;
+
+        /** whether to emit verbose human-oriented output in the dump file */
+        public boolean verboseDump = false;
+
+        /** whether we are constructing a core library */
+        public boolean coreLibrary = false;
+
+        /** {@code null-ok;} particular method to dump */
+        public String methodToDump = null;
+
+        /** max width for columnar output */
+        public int dumpWidth = 0;
+
+        /** {@code null-ok;} output file name for binary file */
+        public String outName = null;
+
+        /** {@code null-ok;} output file name for human-oriented dump */
+        public String humanOutName = null;
+
+        /** whether strict file-name-vs-class-name checking should be done */
+        public boolean strictNameCheck = true;
+
+        /**
+         * whether it is okay for there to be no {@code .class} files
+         * to process
+         */
+        public boolean emptyOk = false;
+
+        /**
+         * whether the binary output is to be a {@code .jar} file
+         * instead of a plain {@code .dex}
+         */
+        public boolean jarOutput = false;
+
+        /**
+         * when writing a {@code .jar} file, whether to still
+         * keep the {@code .class} files
+         */
+        public boolean keepClassesInJar = false;
+
+        /** what API level to target */
+        public int minSdkVersion = DexFormat.API_NO_EXTENDED_OPCODES;
+
+        /** how much source position info to preserve */
+        public int positionInfo = PositionList.LINES;
+
+        /** whether to keep local variable information */
+        public boolean localInfo = true;
+
+        /** whether to merge with the output dex file if it exists. */
+        public boolean incremental = false;
+
+        /** whether to force generation of const-string/jumbo for all indexes,
+         *  to allow merges between dex files with many strings. */
+        public boolean forceJumbo = false;
+
+        /** whether default and static interface methods can be invoked at any API level. */
+        public boolean allowAllInterfaceMethodInvokes = false;
+
+        /** {@code non-null} after {@link #parse}; file name arguments */
+        public String[] fileNames;
+
+        /** whether to do SSA/register optimization */
+        public boolean optimize = true;
+
+        /** Filename containg list of methods to optimize */
+        public String optimizeListFile = null;
+
+        /** Filename containing list of methods to NOT optimize */
+        public String dontOptimizeListFile = null;
+
+        /** Whether to print statistics to stdout at end of compile cycle */
+        public boolean statistics;
+
+        /** Options for class file transformation */
+        public CfOptions cfOptions;
+
+        /** Options for dex file output */
+        public DexOptions dexOptions;
+
+        /** number of threads to run with */
+        public int numThreads = 1;
+
+        /** generation of multiple dex is allowed */
+        public boolean multiDex = false;
+
+        /** Optional file containing a list of class files containing classes to be forced in main
+         * dex */
+        public String mainDexListFile = null;
+
+        /** Produce the smallest possible main dex. Ignored unless multiDex is true and
+         * mainDexListFile is specified and non empty. */
+        public boolean minimalMainDex = false;
+
+        public int maxNumberOfIdxPerDex = DexFormat.MAX_MEMBER_IDX + 1;
+
+        /** Optional list containing inputs read in from a file. */
+        private List<String> inputList = null;
+
+        private boolean outputIsDirectory = false;
+        private boolean outputIsDirectDex = false;
+
+        public Arguments(DxContext context) {
+            this.context = context;
+        }
+
+        public Arguments() {
+            this(new DxContext());
+        }
+
+        private static class ArgumentsParser {
+
+            /** The arguments to process. */
+            private final String[] arguments;
+            /** The index of the next argument to process. */
+            private int index;
+            /** The current argument being processed after a {@link #getNext()} call. */
+            private String current;
+            /** The last value of an argument processed by {@link #isArg(String)}. */
+            private String lastValue;
+
+            public ArgumentsParser(String[] arguments) {
+                this.arguments = arguments;
+                index = 0;
+            }
+
+            public String getCurrent() {
+                return current;
+            }
+
+            public String getLastValue() {
+                return lastValue;
+            }
+
+            /**
+             * Moves on to the next argument.
+             * Returns false when we ran out of arguments that start with --.
+             */
+            public boolean getNext() {
+                if (index >= arguments.length) {
+                    return false;
+                }
+                current = arguments[index];
+                if (current.equals("--") || !current.startsWith("--")) {
+                    return false;
+                }
+                index++;
+                return true;
+            }
+
+            /**
+             * Similar to {@link #getNext()}, this moves on the to next argument.
+             * It does not check however whether the argument starts with --
+             * and thus can be used to retrieve values.
+             */
+            private boolean getNextValue() {
+                if (index >= arguments.length) {
+                    return false;
+                }
+                current = arguments[index];
+                index++;
+                return true;
+            }
+
+            /**
+             * Returns all the arguments that have not been processed yet.
+             */
+            public String[] getRemaining() {
+                int n = arguments.length - index;
+                String[] remaining = new String[n];
+                if (n > 0) {
+                    System.arraycopy(arguments, index, remaining, 0, n);
+                }
+                return remaining;
+            }
+
+            /**
+             * Checks the current argument against the given prefix.
+             * If prefix is in the form '--name=', an extra value is expected.
+             * The argument can then be in the form '--name=value' or as a 2-argument
+             * form '--name value'.
+             */
+            public boolean isArg(String prefix) {
+                int n = prefix.length();
+                if (n > 0 && prefix.charAt(n-1) == '=') {
+                    // Argument accepts a value. Capture it.
+                    if (current.startsWith(prefix)) {
+                        // Argument is in the form --name=value, split the value out
+                        lastValue = current.substring(n);
+                        return true;
+                    } else {
+                        // Check whether we have "--name value" as 2 arguments
+                        prefix = prefix.substring(0, n-1);
+                        if (current.equals(prefix)) {
+                            if (getNextValue()) {
+                                lastValue = current;
+                                return true;
+                            } else {
+                                System.err.println("Missing value after parameter " + prefix);
+                                throw new UsageException();
+                            }
+                        }
+                        return false;
+                    }
+                } else {
+                    // Argument does not accept a value.
+                    return current.equals(prefix);
+                }
+            }
+        }
+
+        private void parseFlags(ArgumentsParser parser) {
+
+            while(parser.getNext()) {
+                if (parser.isArg("--debug")) {
+                    debug = true;
+                } else if (parser.isArg("--no-warning")) {
+                    warnings = false;
+                } else if (parser.isArg("--verbose")) {
+                    verbose = true;
+                } else if (parser.isArg("--verbose-dump")) {
+                    verboseDump = true;
+                } else if (parser.isArg("--no-files")) {
+                    emptyOk = true;
+                } else if (parser.isArg("--no-optimize")) {
+                    optimize = false;
+                } else if (parser.isArg("--no-strict")) {
+                    strictNameCheck = false;
+                } else if (parser.isArg("--core-library")) {
+                    coreLibrary = true;
+                } else if (parser.isArg("--statistics")) {
+                    statistics = true;
+                } else if (parser.isArg("--optimize-list=")) {
+                    if (dontOptimizeListFile != null) {
+                        context.err.println("--optimize-list and "
+                                + "--no-optimize-list are incompatible.");
+                        throw new UsageException();
+                    }
+                    optimize = true;
+                    optimizeListFile = parser.getLastValue();
+                } else if (parser.isArg("--no-optimize-list=")) {
+                    if (dontOptimizeListFile != null) {
+                        context.err.println("--optimize-list and "
+                                + "--no-optimize-list are incompatible.");
+                        throw new UsageException();
+                    }
+                    optimize = true;
+                    dontOptimizeListFile = parser.getLastValue();
+                } else if (parser.isArg("--keep-classes")) {
+                    keepClassesInJar = true;
+                } else if (parser.isArg("--output=")) {
+                    outName = parser.getLastValue();
+                    if (new File(outName).isDirectory()) {
+                        jarOutput = false;
+                        outputIsDirectory = true;
+                    } else if (FileUtils.hasArchiveSuffix(outName)) {
+                        jarOutput = true;
+                    } else if (outName.endsWith(".dex") ||
+                               outName.equals("-")) {
+                        jarOutput = false;
+                        outputIsDirectDex = true;
+                    } else {
+                        context.err.println("unknown output extension: " +
+                                outName);
+                        throw new UsageException();
+                    }
+                } else if (parser.isArg("--dump-to=")) {
+                    humanOutName = parser.getLastValue();
+                } else if (parser.isArg("--dump-width=")) {
+                    dumpWidth = Integer.parseInt(parser.getLastValue());
+                } else if (parser.isArg("--dump-method=")) {
+                    methodToDump = parser.getLastValue();
+                    jarOutput = false;
+                } else if (parser.isArg("--positions=")) {
+                    String pstr = parser.getLastValue().intern();
+                    if (pstr == "none") {
+                        positionInfo = PositionList.NONE;
+                    } else if (pstr == "important") {
+                        positionInfo = PositionList.IMPORTANT;
+                    } else if (pstr == "lines") {
+                        positionInfo = PositionList.LINES;
+                    } else {
+                        context.err.println("unknown positions option: " +
+                                pstr);
+                        throw new UsageException();
+                    }
+                } else if (parser.isArg("--no-locals")) {
+                    localInfo = false;
+                } else if (parser.isArg(NUM_THREADS_OPTION + "=")) {
+                    numThreads = Integer.parseInt(parser.getLastValue());
+                } else if (parser.isArg(INCREMENTAL_OPTION)) {
+                    incremental = true;
+                } else if (parser.isArg("--force-jumbo")) {
+                    forceJumbo = true;
+                } else if (parser.isArg(MULTI_DEX_OPTION)) {
+                    multiDex = true;
+                } else if (parser.isArg(MAIN_DEX_LIST_OPTION + "=")) {
+                    mainDexListFile = parser.getLastValue();
+                } else if (parser.isArg(MINIMAL_MAIN_DEX_OPTION)) {
+                    minimalMainDex = true;
+                } else if (parser.isArg("--set-max-idx-number=")) { // undocumented test option
+                    maxNumberOfIdxPerDex = Integer.parseInt(parser.getLastValue());
+                } else if(parser.isArg(INPUT_LIST_OPTION + "=")) {
+                    File inputListFile = new File(parser.getLastValue());
+                    try {
+                        inputList = new ArrayList<String>();
+                        readPathsFromFile(inputListFile.getAbsolutePath(), inputList);
+                    } catch (IOException e) {
+                        context.err.println(
+                            "Unable to read input list file: " + inputListFile.getName());
+                        // problem reading the file so we should halt execution
+                        throw new UsageException();
+                    }
+                } else if (parser.isArg("--min-sdk-version=")) {
+                    String arg = parser.getLastValue();
+                    int value;
+                    try {
+                        value = Integer.parseInt(arg);
+                    } catch (NumberFormatException ex) {
+                        value = -1;
+                    }
+                    if (value < 1) {
+                        System.err.println("improper min-sdk-version option: " + arg);
+                        throw new UsageException();
+                    }
+                    minSdkVersion = value;
+                } else if (parser.isArg("--allow-all-interface-method-invokes")) {
+                    allowAllInterfaceMethodInvokes = true;
+                } else {
+                    context.err.println("unknown option: " + parser.getCurrent());
+                    throw new UsageException();
+                }
+            }
+        }
+
+
+        /**
+         * Parses all command-line arguments and updates the state of the {@code Arguments} object
+         * accordingly.
+         *
+         * @param args {@code non-null;} the arguments
+         */
+        private void parse(String[] args) {
+            ArgumentsParser parser = new ArgumentsParser(args);
+
+            parseFlags(parser);
+
+            fileNames = parser.getRemaining();
+            if(inputList != null && !inputList.isEmpty()) {
+                // append the file names to the end of the input list
+                inputList.addAll(Arrays.asList(fileNames));
+                fileNames = inputList.toArray(new String[inputList.size()]);
+            }
+
+            if (fileNames.length == 0) {
+                if (!emptyOk) {
+                    context.err.println("no input files specified");
+                    throw new UsageException();
+                }
+            } else if (emptyOk) {
+                context.out.println("ignoring input files");
+            }
+
+            if ((humanOutName == null) && (methodToDump != null)) {
+                humanOutName = "-";
+            }
+
+            if (mainDexListFile != null && !multiDex) {
+                context.err.println(MAIN_DEX_LIST_OPTION + " is only supported in combination with "
+                    + MULTI_DEX_OPTION);
+                throw new UsageException();
+            }
+
+            if (minimalMainDex && (mainDexListFile == null || !multiDex)) {
+                context.err.println(MINIMAL_MAIN_DEX_OPTION + " is only supported in combination with "
+                    + MULTI_DEX_OPTION + " and " + MAIN_DEX_LIST_OPTION);
+                throw new UsageException();
+            }
+
+            if (multiDex && incremental) {
+                context.err.println(INCREMENTAL_OPTION + " is not supported with "
+                    + MULTI_DEX_OPTION);
+                throw new UsageException();
+            }
+
+            if (multiDex && outputIsDirectDex) {
+                context.err.println("Unsupported output \"" + outName +"\". " + MULTI_DEX_OPTION +
+                        " supports only archive or directory output");
+                throw new UsageException();
+            }
+
+            if (outputIsDirectory && !multiDex) {
+                outName = new File(outName, DexFormat.DEX_IN_JAR_NAME).getPath();
+            }
+
+            makeOptionsObjects();
+        }
+
+        /**
+         * Parses only command-line flags and updates the state of the {@code Arguments} object
+         * accordingly.
+         *
+         * @param flags {@code non-null;} the flags
+         */
+        public void parseFlags(String[] flags) {
+            parseFlags(new ArgumentsParser(flags));
+        }
+
+        /**
+         * Copies relevant arguments over into CfOptions and DexOptions instances.
+         */
+        public void makeOptionsObjects() {
+            cfOptions = new CfOptions();
+            cfOptions.positionInfo = positionInfo;
+            cfOptions.localInfo = localInfo;
+            cfOptions.strictNameCheck = strictNameCheck;
+            cfOptions.optimize = optimize;
+            cfOptions.optimizeListFile = optimizeListFile;
+            cfOptions.dontOptimizeListFile = dontOptimizeListFile;
+            cfOptions.statistics = statistics;
+
+            if (warnings) {
+                cfOptions.warn = context.err;
+            } else {
+                cfOptions.warn = context.noop;
+            }
+
+            dexOptions = new DexOptions(context.err);
+            dexOptions.minSdkVersion = minSdkVersion;
+            dexOptions.forceJumbo = forceJumbo;
+            dexOptions.allowAllInterfaceMethodInvokes = allowAllInterfaceMethodInvokes;
+        }
+    }
+
+    /**
+     * Callback class for processing input file bytes, produced by the
+     * ClassPathOpener.
+     */
+    private class FileBytesConsumer implements ClassPathOpener.Consumer {
+
+        @Override
+        public boolean processFileBytes(String name, long lastModified,
+                byte[] bytes)   {
+            return Main.this.processFileBytes(name, lastModified, bytes);
+        }
+
+        @Override
+        public void onException(Exception ex) {
+            if (ex instanceof StopProcessing) {
+                throw (StopProcessing) ex;
+            } else if (ex instanceof SimException) {
+                context.err.println("\nEXCEPTION FROM SIMULATION:");
+                context.err.println(ex.getMessage() + "\n");
+                context.err.println(((SimException) ex).getContext());
+            } else if (ex instanceof ParseException) {
+                context.err.println("\nPARSE ERROR:");
+                ParseException parseException = (ParseException) ex;
+                if (args.debug) {
+                    parseException.printStackTrace(context.err);
+                } else {
+                    parseException.printContext(context.err);
+                }
+            } else {
+                context.err.println("\nUNEXPECTED TOP-LEVEL EXCEPTION:");
+                ex.printStackTrace(context.err);
+            }
+            errors.incrementAndGet();
+        }
+
+        @Override
+        public void onProcessArchiveStart(File file) {
+            if (args.verbose) {
+                context.out.println("processing archive " + file + "...");
+            }
+        }
+    }
+
+    /** Callable helper class to parse class bytes. */
+    private class ClassParserTask implements Callable<DirectClassFile> {
+
+        String name;
+        byte[] bytes;
+
+        private ClassParserTask(String name, byte[] bytes) {
+            this.name = name;
+            this.bytes = bytes;
+        }
+
+        @Override
+        public DirectClassFile call() throws Exception {
+            DirectClassFile cf =  parseClass(name, bytes);
+
+            return cf;
+        }
+    }
+
+    /**
+     * Callable helper class used to sequentially collect the results of
+     * the (optionally parallel) translation phase, in correct input file order.
+     * This class is also responsible for coordinating dex file rotation
+     * with the ClassDefItemConsumer class.
+     * We maintain invariant that the number of indices used in the current
+     * dex file plus the max number of indices required by classes passed to
+     * the translation phase and not yet added to the dex file, is less than
+     * or equal to the dex file limit.
+     * For each parsed file, we estimate the maximum number of indices it may
+     * require. If passing the file to the translation phase would invalidate
+     * the invariant, we wait, until the next class is added to the dex file,
+     * and then reevaluate the invariant. If there are no further classes in
+     * the translation phase, we rotate the dex file.
+     */
+    private class DirectClassFileConsumer implements Callable<Boolean> {
+
+        String name;
+        byte[] bytes;
+        Future<DirectClassFile> dcff;
+
+        private DirectClassFileConsumer(String name, byte[] bytes,
+                Future<DirectClassFile> dcff) {
+            this.name = name;
+            this.bytes = bytes;
+            this.dcff = dcff;
+        }
+
+        @Override
+        public Boolean call() throws Exception {
+
+            DirectClassFile cf = dcff.get();
+            return call(cf);
+        }
+
+        private Boolean call(DirectClassFile cf) {
+
+            int maxMethodIdsInClass = 0;
+            int maxFieldIdsInClass = 0;
+
+            if (args.multiDex) {
+
+                // Calculate max number of indices this class will add to the
+                // dex file.
+                // The possibility of overloading means that we can't easily
+                // know how many constant are needed for declared methods and
+                // fields. We therefore make the simplifying assumption that
+                // all constants are external method or field references.
+
+                int constantPoolSize = cf.getConstantPool().size();
+                maxMethodIdsInClass = constantPoolSize + cf.getMethods().size()
+                        + MAX_METHOD_ADDED_DURING_DEX_CREATION;
+                maxFieldIdsInClass = constantPoolSize + cf.getFields().size()
+                        + MAX_FIELD_ADDED_DURING_DEX_CREATION;
+                synchronized(dexRotationLock) {
+
+                    int numMethodIds;
+                    int numFieldIds;
+                    // Number of indices used in current dex file.
+                    synchronized(outputDex) {
+                        numMethodIds = outputDex.getMethodIds().items().size();
+                        numFieldIds = outputDex.getFieldIds().items().size();
+                    }
+                    // Wait until we're sure this class will fit in the current
+                    // dex file.
+                    while(((numMethodIds + maxMethodIdsInClass + maxMethodIdsInProcess
+                            > args.maxNumberOfIdxPerDex) ||
+                           (numFieldIds + maxFieldIdsInClass + maxFieldIdsInProcess
+                            > args.maxNumberOfIdxPerDex))) {
+
+                        if (maxMethodIdsInProcess > 0 || maxFieldIdsInProcess > 0) {
+                            // There are classes in the translation phase that
+                            // have not yet been added to the dex file, so we
+                            // wait for the next class to complete.
+                            try {
+                                dexRotationLock.wait();
+                            } catch(InterruptedException ex) {
+                                /* ignore */
+                            }
+                        } else if (outputDex.getClassDefs().items().size() > 0) {
+                            // There are no further classes in the translation
+                            // phase, and we have a full dex file. Rotate!
+                            rotateDexFile();
+                        } else {
+                            // The estimated number of indices is too large for
+                            // an empty dex file. We proceed hoping the actual
+                            // number of indices needed will fit.
+                            break;
+                        }
+                        synchronized(outputDex) {
+                            numMethodIds = outputDex.getMethodIds().items().size();
+                            numFieldIds = outputDex.getFieldIds().items().size();
+                        }
+                    }
+                    // Add our estimate to the total estimate for
+                    // classes under translation.
+                    maxMethodIdsInProcess += maxMethodIdsInClass;
+                    maxFieldIdsInProcess += maxFieldIdsInClass;
+                }
+            }
+
+            // Submit class to translation phase.
+            Future<ClassDefItem> cdif = classTranslatorPool.submit(
+                    new ClassTranslatorTask(name, bytes, cf));
+            Future<Boolean> res = classDefItemConsumer.submit(new ClassDefItemConsumer(
+                    name, cdif, maxMethodIdsInClass, maxFieldIdsInClass));
+            addToDexFutures.add(res);
+
+            return true;
+        }
+    }
+
+
+    /** Callable helper class to translate classes in parallel  */
+    private class ClassTranslatorTask implements Callable<ClassDefItem> {
+
+        String name;
+        byte[] bytes;
+        DirectClassFile classFile;
+
+        private ClassTranslatorTask(String name, byte[] bytes,
+                DirectClassFile classFile) {
+            this.name = name;
+            this.bytes = bytes;
+            this.classFile = classFile;
+        }
+
+        @Override
+        public ClassDefItem call() {
+            ClassDefItem clazz = translateClass(bytes, classFile);
+            return clazz;
+        }
+    }
+
+    /**
+     * Callable helper class used to collect the results of
+     * the parallel translation phase, adding the translated classes to
+     * the current dex file in correct (deterministic) file order.
+     * This class is also responsible for coordinating dex file rotation
+     * with the DirectClassFileConsumer class.
+     */
+    private class ClassDefItemConsumer implements Callable<Boolean> {
+
+        String name;
+        Future<ClassDefItem> futureClazz;
+        int maxMethodIdsInClass;
+        int maxFieldIdsInClass;
+
+        private ClassDefItemConsumer(String name, Future<ClassDefItem> futureClazz,
+                int maxMethodIdsInClass, int maxFieldIdsInClass) {
+            this.name = name;
+            this.futureClazz = futureClazz;
+            this.maxMethodIdsInClass = maxMethodIdsInClass;
+            this.maxFieldIdsInClass = maxFieldIdsInClass;
+        }
+
+        @Override
+        public Boolean call() throws Exception {
+            try {
+                ClassDefItem clazz = futureClazz.get();
+                if (clazz != null) {
+                    addClassToDex(clazz);
+                    updateStatus(true);
+                }
+                return true;
+            } catch(ExecutionException ex) {
+                // Rethrow previously uncaught translation exceptions.
+                // These, as well as any exceptions from addClassToDex,
+                // are handled and reported in processAllFiles().
+                Throwable t = ex.getCause();
+                throw (t instanceof Exception) ? (Exception) t : ex;
+            } finally {
+                if (args.multiDex) {
+                    // Having added our actual indicies to the dex file,
+                    // we subtract our original estimate from the total estimate,
+                    // and signal the translation phase, which may be paused
+                    // waiting to determine if more classes can be added to the
+                    // current dex file, or if a new dex file must be created.
+                    synchronized(dexRotationLock) {
+                        maxMethodIdsInProcess -= maxMethodIdsInClass;
+                        maxFieldIdsInProcess -= maxFieldIdsInClass;
+                        dexRotationLock.notifyAll();
+                    }
+                }
+            }
+        }
+    }
+
+    /** Callable helper class to convert dex files in worker threads */
+    private class DexWriter implements Callable<byte[]> {
+
+        private final DexFile dexFile;
+
+        private DexWriter(DexFile dexFile) {
+            this.dexFile = dexFile;
+        }
+
+        @Override
+        public byte[] call() throws IOException {
+            return writeDex(dexFile);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/command/dump/Args.java b/dx/src/com/android/dx/command/dump/Args.java
new file mode 100644
index 0000000..042fae2
--- /dev/null
+++ b/dx/src/com/android/dx/command/dump/Args.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.dump;
+
+/**
+ * contains command line parsedArgs values
+ */
+class Args {
+    /** whether to run in debug mode */
+    boolean debug = false;
+
+    /** whether to dump raw bytes where salient */
+    boolean rawBytes = false;
+
+    /** whether to dump information about basic blocks */
+    boolean basicBlocks = false;
+
+    /** whether to dump regiserized blocks */
+    boolean ropBlocks = false;
+
+    /** whether to dump SSA-form blocks */
+    boolean ssaBlocks = false;
+
+    /** Step in SSA processing to stop at, or null for all */
+    String ssaStep = null;
+
+    /** whether to run SSA optimizations */
+    boolean optimize = false;
+
+    /** whether to be strict about parsing classfiles*/
+    boolean strictParse = false;
+
+    /** max width for columnar output */
+    int width = 0;
+
+    /** whether to dump flow-graph in "dot" format */
+    boolean dotDump = false;
+
+    /** if non-null, an explicit method to dump */
+    String method;
+
+}
diff --git a/dx/src/com/android/dx/command/dump/BaseDumper.java b/dx/src/com/android/dx/command/dump/BaseDumper.java
new file mode 100644
index 0000000..b2bc5bb
--- /dev/null
+++ b/dx/src/com/android/dx/command/dump/BaseDumper.java
@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.dump;
+
+import com.android.dx.cf.code.ConcreteMethod;
+import com.android.dx.cf.iface.Member;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.dex.DexOptions;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IndentingWriter;
+import com.android.dx.util.TwoColumnOutput;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.StringWriter;
+
+/**
+ * Base class for the various human-friendly dumpers.
+ */
+public abstract class BaseDumper
+        implements ParseObserver {
+    /** {@code non-null;} array of data being dumped */
+    private final byte[] bytes;
+
+    /** whether or not to include the raw bytes (in a column on the left) */
+    private final boolean rawBytes;
+
+    /** {@code non-null;} where to dump to */
+    private final PrintStream out;
+
+    /** width of the output in columns */
+    private final int width;
+
+    /**
+     * {@code non-null;} the file path for the class, excluding any base
+     * directory specification
+     */
+    private final String filePath;
+
+    /** whether to be strict about parsing */
+    private final boolean strictParse;
+
+     /** number of bytes per line in hex dumps */
+    private final int hexCols;
+
+    /** the current level of indentation */
+    private int indent;
+
+    /** {@code non-null;} the current column separator string */
+    private String separator;
+
+    /** the number of read bytes */
+    private int readBytes;
+
+    /** commandline parsedArgs */
+    protected Args args;
+
+    /** {@code non-null;} options for dex output, always set to the defaults for now */
+    protected final DexOptions dexOptions;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bytes {@code non-null;} bytes of the (alleged) class file
+     * on the left)
+     * @param out {@code non-null;} where to dump to
+     * @param filePath the file path for the class, excluding any base
+     * directory specification
+     */
+    public BaseDumper(byte[] bytes, PrintStream out,
+                      String filePath, Args args) {
+        this.bytes = bytes;
+        this.rawBytes = args.rawBytes;
+        this.out = out;
+        this.width = (args.width <= 0) ? 79 : args.width;
+        this.filePath = filePath;
+        this.strictParse = args.strictParse;
+        this.indent = 0;
+        this.separator = rawBytes ? "|" : "";
+        this.readBytes = 0;
+        this.args = args;
+
+        this.dexOptions = new DexOptions();
+
+        int hexCols = (((width - 5) / 15) + 1) & ~1;
+        if (hexCols < 6) {
+            hexCols = 6;
+        } else if (hexCols > 10) {
+            hexCols = 10;
+        }
+        this.hexCols = hexCols;
+    }
+
+    /**
+     * Computes the total width, in register-units, of the parameters for
+     * this method.
+     * @param meth method to process
+     * @return width in register-units
+     */
+    static int computeParamWidth(ConcreteMethod meth, boolean isStatic) {
+        return meth.getEffectiveDescriptor().getParameterTypes().
+            getWordCount();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void changeIndent(int indentDelta) {
+        indent += indentDelta;
+
+        separator = rawBytes ? "|" : "";
+        for (int i = 0; i < indent; i++) {
+            separator += "  ";
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void parsed(ByteArray bytes, int offset, int len, String human) {
+        offset = bytes.underlyingOffset(offset);
+
+        boolean rawBytes = getRawBytes();
+
+        String hex = rawBytes ? hexDump(offset, len) : "";
+        print(twoColumns(hex, human));
+        readBytes += len;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void startParsingMember(ByteArray bytes, int offset, String name,
+                                   String descriptor) {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void endParsingMember(ByteArray bytes, int offset, String name,
+                                 String descriptor, Member member) {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Gets the current number of read bytes.
+     *
+     * @return {@code >= 0;} the dump cursor
+     */
+    protected final int getReadBytes() {
+        return readBytes;
+    }
+
+    /**
+     * Gets the array of {@code byte}s to process.
+     *
+     * @return {@code non-null;} the bytes
+     */
+    protected final byte[] getBytes() {
+        return bytes;
+    }
+
+    /**
+     * Gets the filesystem/jar path of the file being dumped.
+     *
+     * @return {@code non-null;} the path
+     */
+    protected final String getFilePath() {
+        return filePath;
+    }
+
+    /**
+     * Gets whether to be strict about parsing.
+     *
+     * @return whether to be strict about parsing
+     */
+    protected final boolean getStrictParse() {
+        return strictParse;
+    }
+
+    /**
+     * Prints the given string to this instance's output stream.
+     *
+     * @param s {@code null-ok;} string to print
+     */
+    protected final void print(String s) {
+        out.print(s);
+    }
+
+    /**
+     * Prints the given string to this instance's output stream, followed
+     * by a newline.
+     *
+     * @param s {@code null-ok;} string to print
+     */
+    protected final void println(String s) {
+        out.println(s);
+    }
+
+    /**
+     * Gets whether this dump is to include raw bytes.
+     *
+     * @return the raw bytes flag
+     */
+    protected final boolean getRawBytes() {
+        return rawBytes;
+    }
+
+    /**
+     * Gets the width of the first column of output. This is {@code 0}
+     * unless raw bytes are being included in the output.
+     *
+     * @return {@code >= 0;} the width of the first column
+     */
+    protected final int getWidth1() {
+        if (rawBytes) {
+            return 5 + (hexCols * 2) + (hexCols / 2);
+        }
+
+        return 0;
+    }
+
+    /**
+     * Gets the width of the second column of output.
+     *
+     * @return {@code >= 0;} the width of the second column
+     */
+    protected final int getWidth2() {
+        int w1 = rawBytes ? (getWidth1() + 1) : 0;
+        return width - w1 - (indent * 2);
+    }
+
+    /**
+     * Constructs a hex data dump of the given portion of {@link #bytes}.
+     *
+     * @param offset offset to start dumping at
+     * @param len length to dump
+     * @return {@code non-null;} the dump
+     */
+    protected final String hexDump(int offset, int len) {
+        return Hex.dump(bytes, offset, len, offset, hexCols, 4);
+    }
+
+    /**
+     * Combines a pair of strings as two columns, or if this is one-column
+     * output, format the otherwise-second column.
+     *
+     * @param s1 {@code non-null;} the first column's string
+     * @param s2 {@code non-null;} the second column's string
+     * @return {@code non-null;} the combined output
+     */
+    protected final String twoColumns(String s1, String s2) {
+        int w1 = getWidth1();
+        int w2 = getWidth2();
+
+        try {
+            if (w1 == 0) {
+                int len2 = s2.length();
+                StringWriter sw = new StringWriter(len2 * 2);
+                IndentingWriter iw = new IndentingWriter(sw, w2, separator);
+
+                iw.write(s2);
+                if ((len2 == 0) || (s2.charAt(len2 - 1) != '\n')) {
+                    iw.write('\n');
+                }
+                iw.flush();
+
+                return sw.toString();
+            } else {
+                return TwoColumnOutput.toString(s1, w1, separator, s2, w2);
+            }
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/command/dump/BlockDumper.java b/dx/src/com/android/dx/command/dump/BlockDumper.java
new file mode 100644
index 0000000..21a2de9
--- /dev/null
+++ b/dx/src/com/android/dx/command/dump/BlockDumper.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.dump;
+
+import com.android.dx.cf.code.BasicBlocker;
+import com.android.dx.cf.code.ByteBlock;
+import com.android.dx.cf.code.ByteBlockList;
+import com.android.dx.cf.code.ByteCatchList;
+import com.android.dx.cf.code.BytecodeArray;
+import com.android.dx.cf.code.ConcreteMethod;
+import com.android.dx.cf.code.Ropper;
+import com.android.dx.cf.direct.CodeObserver;
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.direct.StdAttributeFactory;
+import com.android.dx.cf.iface.Member;
+import com.android.dx.cf.iface.Method;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.DexTranslationAdvice;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.InsnList;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.ssa.Optimizer;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+import java.io.PrintStream;
+
+/**
+ * Utility to dump basic block info from methods in a human-friendly form.
+ */
+public class BlockDumper
+        extends BaseDumper {
+    /** whether or not to registerize (make rop blocks) */
+    private final boolean rop;
+
+    /**
+     * {@code null-ok;} the class file object being constructed;
+     * becomes non-null during {@link #dump}
+     */
+    protected DirectClassFile classFile;
+
+    /** whether or not to suppress dumping */
+    protected boolean suppressDump;
+
+    /** whether this is the first method being dumped */
+    private boolean first;
+
+    /** whether or not to run the ssa optimziations */
+    private final boolean optimize;
+
+    /**
+     * Dumps the given array, interpreting it as a class file and dumping
+     * methods with indications of block-level stuff.
+     *
+     * @param bytes {@code non-null;} bytes of the (alleged) class file
+     * @param out {@code non-null;} where to dump to
+     * @param filePath the file path for the class, excluding any base
+     * directory specification
+     * @param rop whether or not to registerize (make rop blocks)
+     * @param args commandline parsedArgs
+     */
+    public static void dump(byte[] bytes, PrintStream out,
+            String filePath, boolean rop, Args args) {
+        BlockDumper bd = new BlockDumper(bytes, out, filePath,
+                rop, args);
+        bd.dump();
+    }
+
+    /**
+     * Constructs an instance. This class is not publicly instantiable.
+     * Use {@link #dump}.
+     */
+    BlockDumper(byte[] bytes, PrintStream out, String filePath,
+            boolean rop, Args args) {
+        super(bytes, out, filePath, args);
+
+        this.rop = rop;
+        this.classFile = null;
+        this.suppressDump = true;
+        this.first = true;
+        this.optimize = args.optimize;
+    }
+
+    /**
+     * Does the dumping.
+     */
+    public void dump() {
+        byte[] bytes = getBytes();
+        ByteArray ba = new ByteArray(bytes);
+
+        /*
+         * First, parse the file completely, so we can safely refer to
+         * attributes, etc.
+         */
+        classFile = new DirectClassFile(ba, getFilePath(), getStrictParse());
+        classFile.setAttributeFactory(StdAttributeFactory.THE_ONE);
+        classFile.getMagic(); // Force parsing to happen.
+
+        // Next, reparse it and observe the process.
+        DirectClassFile liveCf =
+            new DirectClassFile(ba, getFilePath(), getStrictParse());
+        liveCf.setAttributeFactory(StdAttributeFactory.THE_ONE);
+        liveCf.setObserver(this);
+        liveCf.getMagic(); // Force parsing to happen.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void changeIndent(int indentDelta) {
+        if (!suppressDump) {
+            super.changeIndent(indentDelta);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void parsed(ByteArray bytes, int offset, int len, String human) {
+        if (!suppressDump) {
+            super.parsed(bytes, offset, len, human);
+        }
+    }
+
+    /**
+     * @param name method name
+     * @return true if this method should be dumped
+     */
+    protected boolean shouldDumpMethod(String name) {
+        return args.method == null || args.method.equals(name);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void startParsingMember(ByteArray bytes, int offset, String name,
+            String descriptor) {
+        if (descriptor.indexOf('(') < 0) {
+            // It's a field, not a method
+            return;
+        }
+
+        if (!shouldDumpMethod(name)) {
+            return;
+        }
+
+        suppressDump = false;
+
+        if (first) {
+            first = false;
+        } else {
+            parsed(bytes, offset, 0, "\n");
+        }
+
+        parsed(bytes, offset, 0, "method " + name + " " + descriptor);
+        suppressDump = true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void endParsingMember(ByteArray bytes, int offset, String name,
+            String descriptor, Member member) {
+        if (!(member instanceof Method)) {
+            return;
+        }
+
+        if (!shouldDumpMethod(name)) {
+            return;
+        }
+
+        if ((member.getAccessFlags() & (AccessFlags.ACC_ABSTRACT |
+                AccessFlags.ACC_NATIVE)) != 0) {
+            return;
+        }
+
+        ConcreteMethod meth =
+            new ConcreteMethod((Method) member, classFile, true, true);
+
+        if (rop) {
+            ropDump(meth);
+        } else {
+            regularDump(meth);
+        }
+    }
+
+    /**
+     * Does a regular basic block dump.
+     *
+     * @param meth {@code non-null;} method data to dump
+     */
+    private void regularDump(ConcreteMethod meth) {
+        BytecodeArray code = meth.getCode();
+        ByteArray bytes = code.getBytes();
+        ByteBlockList list = BasicBlocker.identifyBlocks(meth);
+        int sz = list.size();
+        CodeObserver codeObserver = new CodeObserver(bytes, BlockDumper.this);
+
+        suppressDump = false;
+
+        int byteAt = 0;
+        for (int i = 0; i < sz; i++) {
+            ByteBlock bb = list.get(i);
+            int start = bb.getStart();
+            int end = bb.getEnd();
+
+            if (byteAt < start) {
+                parsed(bytes, byteAt, start - byteAt,
+                       "dead code " + Hex.u2(byteAt) + ".." + Hex.u2(start));
+            }
+
+            parsed(bytes, start, 0,
+                    "block " + Hex.u2(bb.getLabel()) + ": " +
+                    Hex.u2(start) + ".." + Hex.u2(end));
+            changeIndent(1);
+
+            int len;
+            for (int j = start; j < end; j += len) {
+                len = code.parseInstruction(j, codeObserver);
+                codeObserver.setPreviousOffset(j);
+            }
+
+            IntList successors = bb.getSuccessors();
+            int ssz = successors.size();
+            if (ssz == 0) {
+                parsed(bytes, end, 0, "returns");
+            } else {
+                for (int j = 0; j < ssz; j++) {
+                    int succ = successors.get(j);
+                    parsed(bytes, end, 0, "next " + Hex.u2(succ));
+                }
+            }
+
+            ByteCatchList catches = bb.getCatches();
+            int csz = catches.size();
+            for (int j = 0; j < csz; j++) {
+                ByteCatchList.Item one = catches.get(j);
+                CstType exceptionClass = one.getExceptionClass();
+                parsed(bytes, end, 0,
+                       "catch " +
+                       ((exceptionClass == CstType.OBJECT) ? "<any>" :
+                        exceptionClass.toHuman()) + " -> " +
+                       Hex.u2(one.getHandlerPc()));
+            }
+
+            changeIndent(-1);
+            byteAt = end;
+        }
+
+        int end = bytes.size();
+        if (byteAt < end) {
+            parsed(bytes, byteAt, end - byteAt,
+                    "dead code " + Hex.u2(byteAt) + ".." + Hex.u2(end));
+        }
+
+        suppressDump = true;
+    }
+
+    /**
+     * Does a registerizing dump.
+     *
+     * @param meth {@code non-null;} method data to dump
+     */
+    private void ropDump(ConcreteMethod meth) {
+        TranslationAdvice advice = DexTranslationAdvice.THE_ONE;
+        BytecodeArray code = meth.getCode();
+        ByteArray bytes = code.getBytes();
+        RopMethod rmeth = Ropper.convert(meth, advice, classFile.getMethods(), dexOptions);
+        StringBuilder sb = new StringBuilder(2000);
+
+        if (optimize) {
+            boolean isStatic = AccessFlags.isStatic(meth.getAccessFlags());
+            int paramWidth = computeParamWidth(meth, isStatic);
+            rmeth =
+                Optimizer.optimize(rmeth, paramWidth, isStatic, true, advice);
+        }
+
+        BasicBlockList blocks = rmeth.getBlocks();
+        int[] order = blocks.getLabelsInOrder();
+
+        sb.append("first " + Hex.u2(rmeth.getFirstLabel()) + "\n");
+
+        for (int label : order) {
+            BasicBlock bb = blocks.get(blocks.indexOfLabel(label));
+            sb.append("block ");
+            sb.append(Hex.u2(label));
+            sb.append("\n");
+
+            IntList preds = rmeth.labelToPredecessors(label);
+            int psz = preds.size();
+            for (int i = 0; i < psz; i++) {
+                sb.append("  pred ");
+                sb.append(Hex.u2(preds.get(i)));
+                sb.append("\n");
+            }
+
+            InsnList il = bb.getInsns();
+            int ilsz = il.size();
+            for (int i = 0; i < ilsz; i++) {
+                Insn one = il.get(i);
+                sb.append("  ");
+                sb.append(il.get(i).toHuman());
+                sb.append("\n");
+            }
+
+            IntList successors = bb.getSuccessors();
+            int ssz = successors.size();
+            if (ssz == 0) {
+                sb.append("  returns\n");
+            } else {
+                int primary = bb.getPrimarySuccessor();
+                for (int i = 0; i < ssz; i++) {
+                    int succ = successors.get(i);
+                    sb.append("  next ");
+                    sb.append(Hex.u2(succ));
+
+                    if ((ssz != 1) && (succ == primary)) {
+                        sb.append(" *");
+                    }
+
+                    sb.append("\n");
+                }
+            }
+        }
+
+        suppressDump = false;
+        parsed(bytes, 0, bytes.size(), sb.toString());
+        suppressDump = true;
+    }
+}
diff --git a/dx/src/com/android/dx/command/dump/ClassDumper.java b/dx/src/com/android/dx/command/dump/ClassDumper.java
new file mode 100644
index 0000000..22f13bd
--- /dev/null
+++ b/dx/src/com/android/dx/command/dump/ClassDumper.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.dump;
+
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.direct.StdAttributeFactory;
+import com.android.dx.util.ByteArray;
+import java.io.PrintStream;
+
+/**
+ * Utility to dump the contents of class files in a human-friendly form.
+ */
+public final class ClassDumper
+        extends BaseDumper {
+    /**
+     * Dumps the given array, interpreting it as a class file.
+     *
+     * @param bytes {@code non-null;} bytes of the (alleged) class file
+     * @param out {@code non-null;} where to dump to
+     * passed in as &lt;= 0
+     * @param filePath the file path for the class, excluding any base
+     * directory specification
+     * @param args bag of commandline arguments
+     */
+    public static void dump(byte[] bytes, PrintStream out,
+                            String filePath, Args args) {
+        ClassDumper cd =
+            new ClassDumper(bytes, out, filePath, args);
+        cd.dump();
+    }
+
+    /**
+     * Constructs an instance. This class is not publicly instantiable.
+     * Use {@link #dump}.
+     */
+    private ClassDumper(byte[] bytes, PrintStream out,
+                        String filePath, Args args) {
+        super(bytes, out, filePath, args);
+    }
+
+    /**
+     * Does the dumping.
+     */
+    public void dump() {
+        byte[] bytes = getBytes();
+        ByteArray ba = new ByteArray(bytes);
+        DirectClassFile cf =
+            new DirectClassFile(ba, getFilePath(), getStrictParse());
+
+        cf.setAttributeFactory(StdAttributeFactory.THE_ONE);
+        cf.setObserver(this);
+        cf.getMagic(); // Force parsing to happen.
+
+        int readBytes = getReadBytes();
+        if (readBytes != bytes.length) {
+            parsed(ba, readBytes, bytes.length - readBytes, "<extra data at end of file>");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/command/dump/DotDumper.java b/dx/src/com/android/dx/command/dump/DotDumper.java
new file mode 100644
index 0000000..1efb0a9
--- /dev/null
+++ b/dx/src/com/android/dx/command/dump/DotDumper.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.dump;
+
+import com.android.dx.cf.code.ConcreteMethod;
+import com.android.dx.cf.code.Ropper;
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.direct.StdAttributeFactory;
+import com.android.dx.cf.iface.Member;
+import com.android.dx.cf.iface.Method;
+import com.android.dx.cf.iface.ParseObserver;
+import com.android.dx.dex.DexOptions;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.DexTranslationAdvice;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.ssa.Optimizer;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+
+/**
+ * Dumps the pred/succ graph of methods into a format compatible
+ * with the popular graph utility "dot".
+ */
+public class DotDumper implements ParseObserver {
+    private DirectClassFile classFile;
+
+    private final byte[] bytes;
+    private final String filePath;
+    private final boolean strictParse;
+    private final boolean optimize;
+    private final Args args;
+    private final DexOptions dexOptions;
+
+    static void dump(byte[] bytes, String filePath, Args args) {
+        new DotDumper(bytes, filePath, args).run();
+    }
+
+    DotDumper(byte[] bytes, String filePath, Args args) {
+        this.bytes = bytes;
+        this.filePath = filePath;
+        this.strictParse = args.strictParse;
+        this.optimize = args.optimize;
+        this.args = args;
+        this.dexOptions = new DexOptions();
+    }
+
+    private void run() {
+        ByteArray ba = new ByteArray(bytes);
+
+        /*
+         * First, parse the file completely, so we can safely refer to
+         * attributes, etc.
+         */
+        classFile = new DirectClassFile(ba, filePath, strictParse);
+        classFile.setAttributeFactory(StdAttributeFactory.THE_ONE);
+        classFile.getMagic(); // Force parsing to happen.
+
+        // Next, reparse it and observe the process.
+        DirectClassFile liveCf =
+            new DirectClassFile(ba, filePath, strictParse);
+        liveCf.setAttributeFactory(StdAttributeFactory.THE_ONE);
+        liveCf.setObserver(this);
+        liveCf.getMagic(); // Force parsing to happen.
+    }
+
+    /**
+     * @param name method name
+     * @return true if this method should be dumped
+     */
+    protected boolean shouldDumpMethod(String name) {
+        return args.method == null || args.method.equals(name);
+    }
+
+    @Override
+    public void changeIndent(int indentDelta) {
+        // This space intentionally left blank.
+    }
+
+    @Override
+    public void parsed(ByteArray bytes, int offset, int len, String human) {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void startParsingMember(ByteArray bytes, int offset, String name,
+                                   String descriptor) {
+        // This space intentionally left blank.
+    }
+
+    @Override
+    public void endParsingMember(ByteArray bytes, int offset, String name,
+                                 String descriptor, Member member) {
+        if (!(member instanceof Method)) {
+            return;
+        }
+
+        if (!shouldDumpMethod(name)) {
+            return;
+        }
+
+        ConcreteMethod meth = new ConcreteMethod((Method) member, classFile,
+                                                 true, true);
+
+        TranslationAdvice advice = DexTranslationAdvice.THE_ONE;
+        RopMethod rmeth =
+            Ropper.convert(meth, advice, classFile.getMethods(), dexOptions);
+
+        if (optimize) {
+            boolean isStatic = AccessFlags.isStatic(meth.getAccessFlags());
+            rmeth = Optimizer.optimize(rmeth,
+                    BaseDumper.computeParamWidth(meth, isStatic), isStatic,
+                    true, advice);
+        }
+
+        System.out.println("digraph "  + name + "{");
+
+        System.out.println("\tfirst -> n"
+                + Hex.u2(rmeth.getFirstLabel()) + ";");
+
+        BasicBlockList blocks = rmeth.getBlocks();
+
+        int sz = blocks.size();
+        for (int i = 0; i < sz; i++) {
+            BasicBlock bb = blocks.get(i);
+            int label = bb.getLabel();
+            IntList successors = bb.getSuccessors();
+
+            if (successors.size() == 0) {
+                System.out.println("\tn" + Hex.u2(label) + " -> returns;");
+            } else if (successors.size() == 1) {
+                System.out.println("\tn" + Hex.u2(label) + " -> n"
+                        + Hex.u2(successors.get(0)) + ";");
+            } else {
+                System.out.print("\tn" + Hex.u2(label) + " -> {");
+                for (int j = 0; j < successors.size(); j++ ) {
+                    int successor = successors.get(j);
+
+                    if (successor != bb.getPrimarySuccessor()) {
+                        System.out.print(" n" + Hex.u2(successor) + " ");
+                    }
+
+                }
+                System.out.println("};");
+
+                System.out.println("\tn" + Hex.u2(label) + " -> n"
+                        + Hex.u2(bb.getPrimarySuccessor())
+                        + " [label=\"primary\"];");
+
+
+            }
+        }
+
+        System.out.println("}");
+    }
+}
diff --git a/dx/src/com/android/dx/command/dump/Main.java b/dx/src/com/android/dx/command/dump/Main.java
new file mode 100644
index 0000000..5af6a11
--- /dev/null
+++ b/dx/src/com/android/dx/command/dump/Main.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.dump;
+
+import com.android.dex.util.FileUtils;
+import com.android.dx.cf.iface.ParseException;
+import com.android.dx.util.HexParser;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * Main class for the class file dumper.
+ */
+public class Main {
+
+    private final Args parsedArgs = new Args();
+
+    /**
+     * This class is uninstantiable.
+     */
+    private Main() {
+        // This space intentionally left blank.
+    }
+
+    public static void main(String[] args) {
+        new Main().run(args);
+    }
+
+    /**
+     * Run!
+     */
+    private void run(String[] args) {
+        int at = 0;
+
+        for (/*at*/; at < args.length; at++) {
+            String arg = args[at];
+            if (arg.equals("--") || !arg.startsWith("--")) {
+                break;
+            } else if (arg.equals("--bytes")) {
+                parsedArgs.rawBytes = true;
+            } else if (arg.equals("--basic-blocks")) {
+                parsedArgs.basicBlocks = true;
+            } else if (arg.equals("--rop-blocks")) {
+                parsedArgs.ropBlocks = true;
+            } else if (arg.equals("--optimize")) {
+                parsedArgs.optimize = true;
+            } else if (arg.equals("--ssa-blocks")) {
+                parsedArgs.ssaBlocks = true;
+            } else if (arg.startsWith("--ssa-step=")) {
+                parsedArgs.ssaStep = arg.substring(arg.indexOf('=') + 1);
+            } else if (arg.equals("--debug")) {
+                parsedArgs.debug = true;
+            } else if (arg.equals("--dot")) {
+                parsedArgs.dotDump = true;
+            } else if (arg.equals("--strict")) {
+                parsedArgs.strictParse = true;
+            } else if (arg.startsWith("--width=")) {
+                arg = arg.substring(arg.indexOf('=') + 1);
+                parsedArgs.width = Integer.parseInt(arg);
+            } else if (arg.startsWith("--method=")) {
+                arg = arg.substring(arg.indexOf('=') + 1);
+                parsedArgs.method = arg;
+            } else {
+                System.err.println("unknown option: " + arg);
+                throw new RuntimeException("usage");
+            }
+        }
+
+        if (at == args.length) {
+            System.err.println("no input files specified");
+            throw new RuntimeException("usage");
+        }
+
+        for (/*at*/; at < args.length; at++) {
+            try {
+                String name = args[at];
+                System.out.println("reading " + name + "...");
+                byte[] bytes = FileUtils.readFile(name);
+                if (!name.endsWith(".class")) {
+                    String src;
+                    try {
+                        src = new String(bytes, "utf-8");
+                    } catch (UnsupportedEncodingException ex) {
+                        throw new RuntimeException("shouldn't happen", ex);
+                    }
+                    bytes = HexParser.parse(src);
+                }
+                processOne(name, bytes);
+            } catch (ParseException ex) {
+                System.err.println("\ntrouble parsing:");
+                if (parsedArgs.debug) {
+                    ex.printStackTrace();
+                } else {
+                    ex.printContext(System.err);
+                }
+            }
+        }
+    }
+
+    /**
+     * Processes one file.
+     *
+     * @param name {@code non-null;} name of the file
+     * @param bytes {@code non-null;} contents of the file
+     */
+    private void processOne(String name, byte[] bytes) {
+        if (parsedArgs.dotDump) {
+            DotDumper.dump(bytes, name, parsedArgs);
+        } else if (parsedArgs.basicBlocks) {
+            BlockDumper.dump(bytes, System.out, name, false, parsedArgs);
+        } else if (parsedArgs.ropBlocks) {
+            BlockDumper.dump(bytes, System.out, name, true, parsedArgs);
+        } else if (parsedArgs.ssaBlocks) {
+            // --optimize ignored with --ssa-blocks
+            parsedArgs.optimize = false;
+            SsaDumper.dump(bytes, System.out, name, parsedArgs);
+        } else {
+            ClassDumper.dump(bytes, System.out, name, parsedArgs);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/command/dump/SsaDumper.java b/dx/src/com/android/dx/command/dump/SsaDumper.java
new file mode 100644
index 0000000..58b8461
--- /dev/null
+++ b/dx/src/com/android/dx/command/dump/SsaDumper.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.dump;
+
+import com.android.dx.cf.code.ConcreteMethod;
+import com.android.dx.cf.code.Ropper;
+import com.android.dx.cf.iface.Member;
+import com.android.dx.cf.iface.Method;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.code.DexTranslationAdvice;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.ssa.Optimizer;
+import com.android.dx.ssa.SsaBasicBlock;
+import com.android.dx.ssa.SsaInsn;
+import com.android.dx.ssa.SsaMethod;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Collections;
+import java.util.EnumSet;
+
+/**
+ * Dumper for the SSA-translated blocks of a method.
+ */
+public class SsaDumper extends BlockDumper {
+    /**
+     * Does the dump.
+     *
+     * @param bytes {@code non-null;} bytes of the original class file
+     * @param out {@code non-null;} where to dump to
+     * @param filePath the file path for the class, excluding any base
+     * directory specification
+     * @param args commandline parsedArgs
+     */
+    public static void dump(byte[] bytes, PrintStream out,
+            String filePath, Args args) {
+        SsaDumper sd = new SsaDumper(bytes, out, filePath, args);
+        sd.dump();
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bytes {@code non-null;} bytes of the original class file
+     * @param out {@code non-null;} where to dump to
+     * @param filePath the file path for the class, excluding any base
+     * directory specification
+     * @param args commandline parsedArgs
+     */
+    private SsaDumper(byte[] bytes, PrintStream out, String filePath,
+            Args args) {
+        super(bytes, out, filePath, true, args);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void endParsingMember(ByteArray bytes, int offset, String name,
+            String descriptor, Member member) {
+        if (!(member instanceof Method)) {
+            return;
+        }
+
+        if (!shouldDumpMethod(name)) {
+            return;
+        }
+
+        if ((member.getAccessFlags() & (AccessFlags.ACC_ABSTRACT |
+                AccessFlags.ACC_NATIVE)) != 0) {
+            return;
+        }
+
+        ConcreteMethod meth =
+            new ConcreteMethod((Method) member, classFile, true, true);
+        TranslationAdvice advice = DexTranslationAdvice.THE_ONE;
+        RopMethod rmeth = Ropper.convert(meth, advice, classFile.getMethods(), dexOptions);
+        SsaMethod ssaMeth = null;
+        boolean isStatic = AccessFlags.isStatic(meth.getAccessFlags());
+        int paramWidth = computeParamWidth(meth, isStatic);
+
+        if (args.ssaStep == null) {
+            ssaMeth = Optimizer.debugNoRegisterAllocation(rmeth,
+                    paramWidth, isStatic, true, advice,
+                    EnumSet.allOf(Optimizer.OptionalStep.class));
+        } else if ("edge-split".equals(args.ssaStep)) {
+            ssaMeth = Optimizer.debugEdgeSplit(rmeth, paramWidth,
+                    isStatic, true, advice);
+        } else if ("phi-placement".equals(args.ssaStep)) {
+            ssaMeth = Optimizer.debugPhiPlacement(
+                    rmeth, paramWidth, isStatic, true, advice);
+        } else if ("renaming".equals(args.ssaStep)) {
+            ssaMeth = Optimizer.debugRenaming(
+                    rmeth, paramWidth, isStatic, true, advice);
+        } else if ("dead-code".equals(args.ssaStep)) {
+            ssaMeth = Optimizer.debugDeadCodeRemover(
+                    rmeth, paramWidth, isStatic,true, advice);
+        }
+
+        StringBuilder sb = new StringBuilder(2000);
+
+        sb.append("first ");
+        sb.append(Hex.u2(
+                ssaMeth.blockIndexToRopLabel(ssaMeth.getEntryBlockIndex())));
+        sb.append('\n');
+
+        ArrayList<SsaBasicBlock> blocks = ssaMeth.getBlocks();
+        ArrayList<SsaBasicBlock> sortedBlocks =
+            (ArrayList<SsaBasicBlock>) blocks.clone();
+        Collections.sort(sortedBlocks, SsaBasicBlock.LABEL_COMPARATOR);
+
+        for (SsaBasicBlock block : sortedBlocks) {
+            sb.append("block ")
+                    .append(Hex.u2(block.getRopLabel())).append('\n');
+
+            BitSet preds = block.getPredecessors();
+
+            for (int i = preds.nextSetBit(0); i >= 0;
+                 i = preds.nextSetBit(i+1)) {
+                sb.append("  pred ");
+                sb.append(Hex.u2(ssaMeth.blockIndexToRopLabel(i)));
+                sb.append('\n');
+            }
+
+            sb.append("  live in:" + block.getLiveInRegs());
+            sb.append("\n");
+
+            for (SsaInsn insn : block.getInsns()) {
+                sb.append("  ");
+                sb.append(insn.toHuman());
+                sb.append('\n');
+            }
+
+            if (block.getSuccessors().cardinality() == 0) {
+                sb.append("  returns\n");
+            } else {
+                int primary = block.getPrimarySuccessorRopLabel();
+
+                IntList succLabelList = block.getRopLabelSuccessorList();
+
+                int szSuccLabels = succLabelList.size();
+
+                for (int i = 0; i < szSuccLabels; i++) {
+                    sb.append("  next ");
+                    sb.append(Hex.u2(succLabelList.get(i)));
+
+                    if (szSuccLabels != 1 && primary == succLabelList.get(i)) {
+                        sb.append(" *");
+                    }
+                    sb.append('\n');
+                }
+            }
+
+            sb.append("  live out:" + block.getLiveOutRegs());
+            sb.append("\n");
+        }
+
+        suppressDump = false;
+        parsed(bytes, 0, bytes.size(), sb.toString());
+        suppressDump = true;
+    }
+}
diff --git a/dx/src/com/android/dx/command/findusages/FindUsages.java b/dx/src/com/android/dx/command/findusages/FindUsages.java
new file mode 100644
index 0000000..99f91e9
--- /dev/null
+++ b/dx/src/com/android/dx/command/findusages/FindUsages.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.findusages;
+
+import com.android.dex.ClassData;
+import com.android.dex.ClassDef;
+import com.android.dex.Dex;
+import com.android.dex.FieldId;
+import com.android.dex.MethodId;
+import com.android.dx.io.CodeReader;
+import com.android.dx.io.OpcodeInfo;
+import com.android.dx.io.instructions.DecodedInstruction;
+import java.io.PrintWriter;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+public final class FindUsages {
+    private final Dex dex;
+    private final Set<Integer> methodIds;
+    private final Set<Integer> fieldIds;
+    private final CodeReader codeReader = new CodeReader();
+    private final PrintWriter out;
+
+    private ClassDef currentClass;
+    private ClassData.Method currentMethod;
+
+    public FindUsages(final Dex dex, String declaredBy, String memberName, final PrintWriter out) {
+        this.dex = dex;
+        this.out = out;
+
+        Set<Integer> typeStringIndexes = new HashSet<Integer>();
+        Set<Integer> memberNameIndexes = new HashSet<Integer>();
+        Pattern declaredByPattern = Pattern.compile(declaredBy);
+        Pattern memberNamePattern = Pattern.compile(memberName);
+        List<String> strings = dex.strings();
+        for (int i = 0; i < strings.size(); ++i) {
+            String string = strings.get(i);
+            if (declaredByPattern.matcher(string).matches()) {
+                typeStringIndexes.add(i);
+            }
+            if (memberNamePattern.matcher(string).matches()) {
+                memberNameIndexes.add(i);
+            }
+        }
+        if (typeStringIndexes.isEmpty() || memberNameIndexes.isEmpty()) {
+            methodIds = fieldIds = null;
+            return; // these symbols are not mentioned in this dex
+        }
+
+        methodIds = new HashSet<Integer>();
+        fieldIds = new HashSet<Integer>();
+        for (int typeStringIndex : typeStringIndexes) {
+            int typeIndex = Collections.binarySearch(dex.typeIds(), typeStringIndex);
+            if (typeIndex < 0) {
+                continue; // this type name isn't used as a type in this dex
+            }
+            methodIds.addAll(getMethodIds(dex, memberNameIndexes, typeIndex));
+            fieldIds.addAll(getFieldIds(dex, memberNameIndexes, typeIndex));
+        }
+
+        codeReader.setFieldVisitor(new CodeReader.Visitor() {
+            @Override
+            public void visit(DecodedInstruction[] all,
+                    DecodedInstruction one) {
+                int fieldId = one.getIndex();
+                if (fieldIds.contains(fieldId)) {
+                    out.println(location() + ": field reference " + dex.fieldIds().get(fieldId)
+                            + " (" + OpcodeInfo.getName(one.getOpcode()) + ")");
+                }
+            }
+        });
+
+        codeReader.setMethodVisitor(new CodeReader.Visitor() {
+            @Override
+            public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+                int methodId = one.getIndex();
+                if (methodIds.contains(methodId)) {
+                    out.println(location() + ": method reference " + dex.methodIds().get(methodId)
+                            + " (" + OpcodeInfo.getName(one.getOpcode()) + ")");
+                }
+            }
+        });
+    }
+
+    private String location() {
+        String className = dex.typeNames().get(currentClass.getTypeIndex());
+        if (currentMethod != null) {
+            MethodId methodId = dex.methodIds().get(currentMethod.getMethodIndex());
+            return className + "." + dex.strings().get(methodId.getNameIndex());
+        } else {
+            return className;
+        }
+    }
+
+    /**
+     * Prints usages to out.
+     */
+    public void findUsages() {
+        if (fieldIds == null || methodIds == null) {
+            return;
+        }
+
+        for (ClassDef classDef : dex.classDefs()) {
+            currentClass = classDef;
+            currentMethod = null;
+
+            if (classDef.getClassDataOffset() == 0) {
+                continue;
+            }
+
+            ClassData classData = dex.readClassData(classDef);
+            for (ClassData.Field field : classData.allFields()) {
+                int fieldIndex = field.getFieldIndex();
+                if (fieldIds.contains(fieldIndex)) {
+                    out.println(location() + " field declared " + dex.fieldIds().get(fieldIndex));
+                }
+            }
+
+            for (ClassData.Method method : classData.allMethods()) {
+                currentMethod = method;
+                int methodIndex = method.getMethodIndex();
+                if (methodIds.contains(methodIndex)) {
+                    out.println(location() + " method declared " + dex.methodIds().get(methodIndex));
+                }
+                if (method.getCodeOffset() != 0) {
+                    codeReader.visitAll(dex.readCode(method).getInstructions());
+                }
+            }
+        }
+
+        currentClass = null;
+        currentMethod = null;
+    }
+
+    /**
+     * Returns the fields with {@code memberNameIndex} declared by {@code
+     * declaringType}.
+     */
+    private Set<Integer> getFieldIds(Dex dex, Set<Integer> memberNameIndexes, int declaringType) {
+        Set<Integer> fields = new HashSet<Integer>();
+        int fieldIndex = 0;
+        for (FieldId fieldId : dex.fieldIds()) {
+            if (memberNameIndexes.contains(fieldId.getNameIndex())
+                    && declaringType == fieldId.getDeclaringClassIndex()) {
+                fields.add(fieldIndex);
+            }
+            fieldIndex++;
+        }
+        return fields;
+    }
+
+    /**
+     * Returns the methods with {@code memberNameIndex} declared by {@code
+     * declaringType} and its subtypes.
+     */
+    private Set<Integer> getMethodIds(Dex dex, Set<Integer> memberNameIndexes, int declaringType) {
+        Set<Integer> subtypes = findAssignableTypes(dex, declaringType);
+
+        Set<Integer> methods = new HashSet<Integer>();
+        int methodIndex = 0;
+        for (MethodId method : dex.methodIds()) {
+            if (memberNameIndexes.contains(method.getNameIndex())
+                    && subtypes.contains(method.getDeclaringClassIndex())) {
+                methods.add(methodIndex);
+            }
+            methodIndex++;
+        }
+        return methods;
+    }
+
+    /**
+     * Returns the set of types that can be assigned to {@code typeIndex}.
+     */
+    private Set<Integer> findAssignableTypes(Dex dex, int typeIndex) {
+        Set<Integer> assignableTypes = new HashSet<Integer>();
+        assignableTypes.add(typeIndex);
+
+        for (ClassDef classDef : dex.classDefs()) {
+            if (assignableTypes.contains(classDef.getSupertypeIndex())) {
+                assignableTypes.add(classDef.getTypeIndex());
+                continue;
+            }
+
+            for (int implemented : classDef.getInterfaces()) {
+                if (assignableTypes.contains(implemented)) {
+                    assignableTypes.add(classDef.getTypeIndex());
+                    break;
+                }
+            }
+        }
+
+        return assignableTypes;
+    }
+}
diff --git a/dx/src/com/android/dx/command/findusages/Main.java b/dx/src/com/android/dx/command/findusages/Main.java
new file mode 100644
index 0000000..b0eeb69
--- /dev/null
+++ b/dx/src/com/android/dx/command/findusages/Main.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.findusages;
+
+import com.android.dex.Dex;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public final class Main {
+    public static void main(String[] args) throws IOException {
+        String dexFile = args[0];
+        String declaredBy = args[1];
+        String memberName = args[2];
+
+        Dex dex = new Dex(new File(dexFile));
+        PrintWriter out = new PrintWriter(System.out);
+        new FindUsages(dex, declaredBy, memberName, out).findUsages();
+        out.flush();
+    }
+}
diff --git a/dx/src/com/android/dx/command/grep/Grep.java b/dx/src/com/android/dx/command/grep/Grep.java
new file mode 100644
index 0000000..1c03d20
--- /dev/null
+++ b/dx/src/com/android/dx/command/grep/Grep.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.grep;
+
+import com.android.dex.ClassData;
+import com.android.dex.ClassDef;
+import com.android.dex.Dex;
+import com.android.dex.EncodedValueReader;
+import com.android.dex.MethodId;
+import com.android.dx.io.CodeReader;
+import com.android.dx.io.instructions.DecodedInstruction;
+import java.io.PrintWriter;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+public final class Grep {
+    private final Dex dex;
+    private final CodeReader codeReader = new CodeReader();
+    private final Set<Integer> stringIds;
+
+    private final PrintWriter out;
+    private int count = 0;
+
+    private ClassDef currentClass;
+    private ClassData.Method currentMethod;
+
+    public Grep(final Dex dex, Pattern pattern, final PrintWriter out) {
+        this.dex = dex;
+        this.out = out;
+
+        stringIds = getStringIds(dex, pattern);
+
+        codeReader.setStringVisitor(new CodeReader.Visitor() {
+            @Override
+            public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+                encounterString(one.getIndex());
+            }
+        });
+    }
+
+    private void readArray(EncodedValueReader reader) {
+        for (int i = 0, size = reader.readArray(); i < size; i++) {
+            switch (reader.peek()) {
+            case EncodedValueReader.ENCODED_STRING:
+                encounterString(reader.readString());
+                break;
+            case EncodedValueReader.ENCODED_ARRAY:
+                readArray(reader);
+                break;
+            }
+        }
+    }
+
+    private void encounterString(int index) {
+        if (stringIds.contains(index)) {
+            out.println(location() + " " + dex.strings().get(index));
+            count++;
+        }
+    }
+
+    private String location() {
+        String className = dex.typeNames().get(currentClass.getTypeIndex());
+        if (currentMethod != null) {
+            MethodId methodId = dex.methodIds().get(currentMethod.getMethodIndex());
+            return className + "." + dex.strings().get(methodId.getNameIndex());
+        } else {
+            return className;
+        }
+    }
+
+    /**
+     * Prints usages to out. Returns the number of matches found.
+     */
+    public int grep() {
+        for (ClassDef classDef : dex.classDefs()) {
+            currentClass = classDef;
+            currentMethod = null;
+
+            if (classDef.getClassDataOffset() == 0) {
+                continue;
+            }
+
+            ClassData classData = dex.readClassData(classDef);
+
+            // find the strings in encoded constants
+            int staticValuesOffset = classDef.getStaticValuesOffset();
+            if (staticValuesOffset != 0) {
+                readArray(new EncodedValueReader(dex.open(staticValuesOffset)));
+            }
+
+            // find the strings in method bodies
+            for (ClassData.Method method : classData.allMethods()) {
+                currentMethod = method;
+                if (method.getCodeOffset() != 0) {
+                    codeReader.visitAll(dex.readCode(method).getInstructions());
+                }
+            }
+        }
+
+        currentClass = null;
+        currentMethod = null;
+        return count;
+    }
+
+    private Set<Integer> getStringIds(Dex dex, Pattern pattern) {
+        Set<Integer> stringIds = new HashSet<Integer>();
+        int stringIndex = 0;
+        for (String s : dex.strings()) {
+            if (pattern.matcher(s).find()) {
+                stringIds.add(stringIndex);
+            }
+            stringIndex++;
+        }
+        return stringIds;
+    }
+}
diff --git a/dx/src/com/android/dx/command/grep/Main.java b/dx/src/com/android/dx/command/grep/Main.java
new file mode 100644
index 0000000..08920f7
--- /dev/null
+++ b/dx/src/com/android/dx/command/grep/Main.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.command.grep;
+
+import com.android.dex.Dex;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.regex.Pattern;
+
+public final class Main {
+    public static void main(String[] args) throws IOException {
+        String dexFile = args[0];
+        String pattern = args[1];
+
+        Dex dex = new Dex(new File(dexFile));
+        int count = new Grep(dex, Pattern.compile(pattern), new PrintWriter(System.out)).grep();
+        System.exit((count > 0) ? 0 : 1);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/DexOptions.java b/dx/src/com/android/dx/dex/DexOptions.java
new file mode 100644
index 0000000..d747889
--- /dev/null
+++ b/dx/src/com/android/dx/dex/DexOptions.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex;
+
+import com.android.dex.DexFormat;
+import com.android.dx.dex.code.DalvInsnList;
+import java.io.PrintStream;
+
+/**
+ * Container for options used to control details of dex file generation.
+ */
+public final class DexOptions {
+
+    /**
+     * Enable alignment support of 64-bit registers on Dalvik even registers. This is a temporary
+     * configuration flag allowing to quickly go back on the default behavior to face up to problem.
+     */
+    public static final boolean ALIGN_64BIT_REGS_SUPPORT = true;
+
+   /**
+    * Does final processing of 64-bit alignment into output finisher to gets output as
+    * {@link DalvInsnList} with 64-bit registers aligned at best. Disabled the final processing is
+    * required for tools such as Dasm to avoid modifying user inputs.
+    */
+    public boolean ALIGN_64BIT_REGS_IN_OUTPUT_FINISHER = ALIGN_64BIT_REGS_SUPPORT;
+
+    /** minimum SDK version targeted */
+    public int minSdkVersion = DexFormat.API_NO_EXTENDED_OPCODES;
+
+    /** force generation of jumbo opcodes */
+    public boolean forceJumbo = false;
+
+    /** Enable user override for default and static interface method invocation. */
+    public boolean allowAllInterfaceMethodInvokes = false;
+
+    /** output stream for reporting warnings */
+    public final PrintStream err;
+
+    public DexOptions() {
+        err = System.err;
+    }
+
+    public DexOptions(PrintStream stream) {
+        err = stream;
+    }
+
+    /**
+     * Gets the dex file magic number corresponding to this instance.
+     * @return string representing the dex file magic number
+     */
+    public String getMagic() {
+        return DexFormat.apiToMagic(minSdkVersion);
+    }
+
+    /**
+     * Checks whether an API feature is supported.
+     * @param apiLevel the API level to test
+     * @return returns true if the current API level is at least sdkVersion
+     */
+    public boolean apiIsSupported(int apiLevel) {
+        // TODO: the naming here is awkward. Tooling may rely on the minSdkVersion,
+        // but it is referred to as API in DexFormat. Currently indistinguishable.
+        return minSdkVersion >= apiLevel;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/cf/AttributeTranslator.java b/dx/src/com/android/dx/dex/cf/AttributeTranslator.java
new file mode 100644
index 0000000..31f19c0
--- /dev/null
+++ b/dx/src/com/android/dx/dex/cf/AttributeTranslator.java
@@ -0,0 +1,443 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.cf;
+
+import com.android.dx.cf.attrib.AttAnnotationDefault;
+import com.android.dx.cf.attrib.AttEnclosingMethod;
+import com.android.dx.cf.attrib.AttExceptions;
+import com.android.dx.cf.attrib.AttInnerClasses;
+import com.android.dx.cf.attrib.AttRuntimeInvisibleAnnotations;
+import com.android.dx.cf.attrib.AttRuntimeInvisibleParameterAnnotations;
+import com.android.dx.cf.attrib.AttRuntimeVisibleAnnotations;
+import com.android.dx.cf.attrib.AttRuntimeVisibleParameterAnnotations;
+import com.android.dx.cf.attrib.AttSignature;
+import com.android.dx.cf.attrib.AttSourceDebugExtension;
+import com.android.dx.cf.attrib.InnerClassList;
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.iface.AttributeList;
+import com.android.dx.cf.iface.Method;
+import com.android.dx.cf.iface.MethodList;
+import com.android.dx.dex.file.AnnotationUtils;
+import com.android.dx.rop.annotation.Annotation;
+import com.android.dx.rop.annotation.AnnotationVisibility;
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.rop.annotation.NameValuePair;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.Warning;
+import java.util.ArrayList;
+
+/**
+ * Utility methods that translate various classfile attributes
+ * into forms suitable for use in creating {@code dex} files.
+ */
+/*package*/ class AttributeTranslator {
+    /**
+     * This class is uninstantiable.
+     */
+    private AttributeTranslator() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Gets the list of thrown exceptions for a given method.
+     *
+     * @param method {@code non-null;} the method in question
+     * @return {@code non-null;} the list of thrown exceptions
+     */
+    public static TypeList getExceptions(Method method) {
+        AttributeList attribs = method.getAttributes();
+        AttExceptions exceptions = (AttExceptions)
+            attribs.findFirst(AttExceptions.ATTRIBUTE_NAME);
+
+        if (exceptions == null) {
+            return StdTypeList.EMPTY;
+        }
+
+        return exceptions.getExceptions();
+    }
+
+    /**
+     * Gets the annotations out of a given {@link AttributeList}. This
+     * combines both visible and invisible annotations into a single
+     * result set and also adds in a system annotation for the
+     * {@code Signature} attribute if present.
+     *
+     * @param attribs {@code non-null;} the attributes list to search in
+     * @return {@code non-null;} the set of annotations, which may be empty
+     */
+    public static Annotations getAnnotations(AttributeList attribs) {
+        Annotations result = getAnnotations0(attribs);
+        Annotation signature = getSignature(attribs);
+        Annotation sourceDebugExtension = getSourceDebugExtension(attribs);
+
+        if (signature != null) {
+            result = Annotations.combine(result, signature);
+        }
+
+        if (sourceDebugExtension != null) {
+            result = Annotations.combine(result, sourceDebugExtension);
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the annotations out of a given class, similar to {@link
+     * #getAnnotations}, also including annotations for translations
+     * of class-level attributes {@code EnclosingMethod} and
+     * {@code InnerClasses}, if present. Additionally, if the
+     * class is an annotation class, then this also includes a
+     * representation of all the {@code AnnotationDefault}
+     * values.
+     *
+     * @param cf {@code non-null;} the class in question
+     * @param args {@code non-null;} the high-level options
+     * @return {@code non-null;} the set of annotations, which may be empty
+     */
+    public static Annotations getClassAnnotations(DirectClassFile cf,
+            CfOptions args) {
+        CstType thisClass = cf.getThisClass();
+        AttributeList attribs = cf.getAttributes();
+        Annotations result = getAnnotations(attribs);
+        Annotation enclosingMethod = translateEnclosingMethod(attribs);
+
+        try {
+            Annotations innerClassAnnotations =
+                translateInnerClasses(thisClass, attribs,
+                        enclosingMethod == null);
+            if (innerClassAnnotations != null) {
+                result = Annotations.combine(result, innerClassAnnotations);
+            }
+        } catch (Warning warn) {
+            args.warn.println("warning: " + warn.getMessage());
+        }
+
+        if (enclosingMethod != null) {
+            result = Annotations.combine(result, enclosingMethod);
+        }
+
+        if (AccessFlags.isAnnotation(cf.getAccessFlags())) {
+            Annotation annotationDefault =
+                translateAnnotationDefaults(cf);
+            if (annotationDefault != null) {
+                result = Annotations.combine(result, annotationDefault);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the annotations out of a given method, similar to {@link
+     * #getAnnotations}, also including an annotation for the translation
+     * of the method-specific attribute {@code Exceptions}.
+     *
+     * @param method {@code non-null;} the method in question
+     * @return {@code non-null;} the set of annotations, which may be empty
+     */
+    public static Annotations getMethodAnnotations(Method method) {
+        Annotations result = getAnnotations(method.getAttributes());
+        TypeList exceptions = getExceptions(method);
+
+        if (exceptions.size() != 0) {
+            Annotation throwsAnnotation =
+                AnnotationUtils.makeThrows(exceptions);
+            result = Annotations.combine(result, throwsAnnotation);
+        }
+
+        return result;
+    }
+
+    /**
+     * Helper method for {@link #getAnnotations} which just gets the
+     * existing annotations, per se.
+     *
+     * @param attribs {@code non-null;} the attributes list to search in
+     * @return {@code non-null;} the set of annotations, which may be empty
+     */
+    private static Annotations getAnnotations0(AttributeList attribs) {
+        AttRuntimeVisibleAnnotations visible =
+            (AttRuntimeVisibleAnnotations)
+            attribs.findFirst(AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME);
+        AttRuntimeInvisibleAnnotations invisible =
+            (AttRuntimeInvisibleAnnotations)
+            attribs.findFirst(AttRuntimeInvisibleAnnotations.ATTRIBUTE_NAME);
+
+        if (visible == null) {
+            if (invisible == null) {
+                return Annotations.EMPTY;
+            }
+            return invisible.getAnnotations();
+        }
+
+        if (invisible == null) {
+            return visible.getAnnotations();
+        }
+
+        // Both are non-null, so combine them.
+
+        return Annotations.combine(visible.getAnnotations(),
+                invisible.getAnnotations());
+    }
+
+    /**
+     * Gets the {@code Signature} attribute out of a given
+     * {@link AttributeList}, if any, translating it to an annotation.
+     *
+     * @param attribs {@code non-null;} the attributes list to search in
+     * @return {@code null-ok;} the converted {@code Signature} annotation,
+     * if there was an attribute to translate
+     */
+    private static Annotation getSignature(AttributeList attribs) {
+        AttSignature signature = (AttSignature)
+            attribs.findFirst(AttSignature.ATTRIBUTE_NAME);
+
+        if (signature == null) {
+            return null;
+        }
+
+        return AnnotationUtils.makeSignature(signature.getSignature());
+    }
+
+
+    private static Annotation getSourceDebugExtension(AttributeList attribs) {
+        AttSourceDebugExtension extension = (AttSourceDebugExtension)
+            attribs.findFirst(AttSourceDebugExtension.ATTRIBUTE_NAME);
+
+        if (extension == null) {
+            return null;
+        }
+
+        return AnnotationUtils.makeSourceDebugExtension(extension.getSmapString());
+    }
+
+    /**
+     * Gets the {@code EnclosingMethod} attribute out of a given
+     * {@link AttributeList}, if any, translating it to an annotation.
+     * If the class really has an enclosing method, this returns an
+     * {@code EnclosingMethod} annotation; if not, this returns
+     * an {@code EnclosingClass} annotation.
+     *
+     * @param attribs {@code non-null;} the attributes list to search in
+     * @return {@code null-ok;} the converted {@code EnclosingMethod} or
+     * {@code EnclosingClass} annotation, if there was an
+     * attribute to translate
+     */
+    private static Annotation translateEnclosingMethod(AttributeList attribs) {
+        AttEnclosingMethod enclosingMethod = (AttEnclosingMethod)
+            attribs.findFirst(AttEnclosingMethod.ATTRIBUTE_NAME);
+
+        if (enclosingMethod == null) {
+            return null;
+        }
+
+        CstType enclosingClass = enclosingMethod.getEnclosingClass();
+        CstNat nat = enclosingMethod.getMethod();
+
+        if (nat == null) {
+            /*
+             * Dalvik doesn't use EnclosingMethod annotations unless
+             * there really is an enclosing method. Anonymous classes
+             * are unambiguously identified by having an InnerClass
+             * annotation with an empty name along with an appropriate
+             * EnclosingClass.
+             */
+            return AnnotationUtils.makeEnclosingClass(enclosingClass);
+        }
+
+        return AnnotationUtils.makeEnclosingMethod(
+                new CstMethodRef(enclosingClass, nat));
+    }
+
+    /**
+     * Gets the {@code InnerClasses} attribute out of a given
+     * {@link AttributeList}, if any, translating it to one or more of an
+     * {@code InnerClass}, {@code EnclosingClass}, or
+     * {@code MemberClasses} annotation.
+     *
+     * @param thisClass {@code non-null;} type representing the class being
+     * processed
+     * @param attribs {@code non-null;} the attributes list to search in
+     * @param needEnclosingClass whether to include an
+     * {@code EnclosingClass} annotation
+     * @return {@code null-ok;} the converted list of annotations, if there
+     * was an attribute to translate
+     */
+    private static Annotations translateInnerClasses(CstType thisClass,
+            AttributeList attribs, boolean needEnclosingClass) {
+        AttInnerClasses innerClasses = (AttInnerClasses)
+            attribs.findFirst(AttInnerClasses.ATTRIBUTE_NAME);
+
+        if (innerClasses == null) {
+            return null;
+        }
+
+        /*
+         * Search the list for the element representing the current class
+         * as well as for any named member classes.
+         */
+
+        InnerClassList list = innerClasses.getInnerClasses();
+        int size = list.size();
+        InnerClassList.Item foundThisClass = null;
+        ArrayList<Type> membersList = new ArrayList<Type>();
+
+        for (int i = 0; i < size; i++) {
+            InnerClassList.Item item = list.get(i);
+            CstType innerClass = item.getInnerClass();
+            if (innerClass.equals(thisClass)) {
+                foundThisClass = item;
+            } else if (thisClass.equals(item.getOuterClass())) {
+                membersList.add(innerClass.getClassType());
+            }
+        }
+
+        int membersSize = membersList.size();
+
+        if ((foundThisClass == null) && (membersSize == 0)) {
+            return null;
+        }
+
+        Annotations result = new Annotations();
+
+        if (foundThisClass != null) {
+            result.add(AnnotationUtils.makeInnerClass(
+                               foundThisClass.getInnerName(),
+                               foundThisClass.getAccessFlags()));
+            if (needEnclosingClass) {
+                CstType outer = foundThisClass.getOuterClass();
+                if (outer == null) {
+                    throw new Warning(
+                            "Ignoring InnerClasses attribute for an " +
+                            "anonymous inner class\n" +
+                            "(" + thisClass.toHuman() +
+                            ") that doesn't come with an\n" +
+                            "associated EnclosingMethod attribute. " +
+                            "This class was probably produced by a\n" +
+                            "compiler that did not target the modern " +
+                            ".class file format. The recommended\n" +
+                            "solution is to recompile the class from " +
+                            "source, using an up-to-date compiler\n" +
+                            "and without specifying any \"-target\" type " +
+                            "options. The consequence of ignoring\n" +
+                            "this warning is that reflective operations " +
+                            "on this class will incorrectly\n" +
+                            "indicate that it is *not* an inner class.");
+                }
+                result.add(AnnotationUtils.makeEnclosingClass(
+                                   foundThisClass.getOuterClass()));
+            }
+        }
+
+        if (membersSize != 0) {
+            StdTypeList typeList = new StdTypeList(membersSize);
+            for (int i = 0; i < membersSize; i++) {
+                typeList.set(i, membersList.get(i));
+            }
+            typeList.setImmutable();
+            result.add(AnnotationUtils.makeMemberClasses(typeList));
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Gets the parameter annotations out of a given method. This
+     * combines both visible and invisible annotations into a single
+     * result set.
+     *
+     * @param method {@code non-null;} the method in question
+     * @return {@code non-null;} the list of annotation sets, which may be
+     * empty
+     */
+    public static AnnotationsList getParameterAnnotations(Method method) {
+        AttributeList attribs = method.getAttributes();
+        AttRuntimeVisibleParameterAnnotations visible =
+            (AttRuntimeVisibleParameterAnnotations)
+            attribs.findFirst(
+                    AttRuntimeVisibleParameterAnnotations.ATTRIBUTE_NAME);
+        AttRuntimeInvisibleParameterAnnotations invisible =
+            (AttRuntimeInvisibleParameterAnnotations)
+            attribs.findFirst(
+                    AttRuntimeInvisibleParameterAnnotations.ATTRIBUTE_NAME);
+
+        if (visible == null) {
+            if (invisible == null) {
+                return AnnotationsList.EMPTY;
+            }
+            return invisible.getParameterAnnotations();
+        }
+
+        if (invisible == null) {
+            return visible.getParameterAnnotations();
+        }
+
+        // Both are non-null, so combine them.
+
+        return AnnotationsList.combine(visible.getParameterAnnotations(),
+                invisible.getParameterAnnotations());
+    }
+
+    /**
+     * Gets the {@code AnnotationDefault} attributes out of a
+     * given class, if any, reforming them as an
+     * {@code AnnotationDefault} annotation.
+     *
+     * @param cf {@code non-null;} the class in question
+     * @return {@code null-ok;} an appropriately-constructed
+     * {@code AnnotationDefault} annotation, if there were any
+     * annotation defaults in the class, or {@code null} if not
+     */
+    private static Annotation translateAnnotationDefaults(DirectClassFile cf) {
+        CstType thisClass = cf.getThisClass();
+        MethodList methods = cf.getMethods();
+        int sz = methods.size();
+        Annotation result =
+            new Annotation(thisClass, AnnotationVisibility.EMBEDDED);
+        boolean any = false;
+
+        for (int i = 0; i < sz; i++) {
+            Method one = methods.get(i);
+            AttributeList attribs = one.getAttributes();
+            AttAnnotationDefault oneDefault = (AttAnnotationDefault)
+                attribs.findFirst(AttAnnotationDefault.ATTRIBUTE_NAME);
+
+            if (oneDefault != null) {
+                NameValuePair pair = new NameValuePair(
+                        one.getNat().getName(),
+                        oneDefault.getValue());
+                result.add(pair);
+                any = true;
+            }
+        }
+
+        if (! any) {
+            return null;
+        }
+
+        result.setImmutable();
+        return AnnotationUtils.makeAnnotationDefault(result);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/cf/CfOptions.java b/dx/src/com/android/dx/dex/cf/CfOptions.java
new file mode 100644
index 0000000..03d1d29
--- /dev/null
+++ b/dx/src/com/android/dx/dex/cf/CfOptions.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.cf;
+
+import com.android.dx.dex.code.PositionList;
+import java.io.PrintStream;
+
+/**
+ * A class to contain options passed into dex.cf
+ */
+public class CfOptions {
+    /** how much source position info to preserve */
+    public int positionInfo = PositionList.LINES;
+
+    /** whether to keep local variable information */
+    public boolean localInfo = false;
+
+    /** whether strict file-name-vs-class-name checking should be done */
+    public boolean strictNameCheck = true;
+
+    /** whether to do SSA/register optimization */
+    public boolean optimize = false;
+
+    /** filename containing list of methods to optimize */
+    public String optimizeListFile = null;
+
+    /** filename containing list of methods <i>not</i> to optimize */
+    public String dontOptimizeListFile = null;
+
+    /** whether to print statistics to stdout at end of compile cycle */
+    public boolean statistics;
+
+    /** where to issue warnings to */
+    public PrintStream warn = System.err;
+}
diff --git a/dx/src/com/android/dx/dex/cf/CfTranslator.java b/dx/src/com/android/dx/dex/cf/CfTranslator.java
new file mode 100644
index 0000000..0253da7
--- /dev/null
+++ b/dx/src/com/android/dx/dex/cf/CfTranslator.java
@@ -0,0 +1,442 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.cf;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.cf.code.BootstrapMethodsList;
+import com.android.dx.cf.code.ConcreteMethod;
+import com.android.dx.cf.code.Ropper;
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.iface.Field;
+import com.android.dx.cf.iface.FieldList;
+import com.android.dx.cf.iface.Method;
+import com.android.dx.cf.iface.MethodList;
+import com.android.dx.command.dexer.DxContext;
+import com.android.dx.dex.DexOptions;
+import com.android.dx.dex.code.DalvCode;
+import com.android.dx.dex.code.PositionList;
+import com.android.dx.dex.code.RopTranslator;
+import com.android.dx.dex.file.CallSiteIdsSection;
+import com.android.dx.dex.file.ClassDefItem;
+import com.android.dx.dex.file.DexFile;
+import com.android.dx.dex.file.EncodedField;
+import com.android.dx.dex.file.EncodedMethod;
+import com.android.dx.dex.file.FieldIdsSection;
+import com.android.dx.dex.file.MethodHandlesSection;
+import com.android.dx.dex.file.MethodIdsSection;
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.code.DexTranslationAdvice;
+import com.android.dx.rop.code.LocalVariableExtractor;
+import com.android.dx.rop.code.LocalVariableInfo;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.ConstantPool;
+import com.android.dx.rop.cst.CstBaseMethodRef;
+import com.android.dx.rop.cst.CstBoolean;
+import com.android.dx.rop.cst.CstByte;
+import com.android.dx.rop.cst.CstCallSite;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.rop.cst.CstChar;
+import com.android.dx.rop.cst.CstEnumRef;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstInterfaceMethodRef;
+import com.android.dx.rop.cst.CstInvokeDynamic;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstShort;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.cst.TypedConstant;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.ssa.Optimizer;
+
+/**
+ * Static method that turns {@code byte[]}s containing Java
+ * classfiles into {@link ClassDefItem} instances.
+ */
+public class CfTranslator {
+    /** set to {@code true} to enable development-time debugging code */
+    private static final boolean DEBUG = false;
+
+    /**
+     * This class is uninstantiable.
+     */
+    private CfTranslator() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Takes a {@code byte[]}, interprets it as a Java classfile, and
+     * translates it into a {@link ClassDefItem}.
+     *
+     * @param context {@code non-null;} the state global to this invocation.
+     * @param cf {@code non-null;} the class file
+     * @param bytes {@code non-null;} contents of the file
+     * @param cfOptions options for class translation
+     * @param dexOptions options for dex output
+     * @param dexFile {@code non-null;} dex output
+     * @return {@code non-null;} the translated class
+     */
+    public static ClassDefItem translate(DxContext context, DirectClassFile cf, byte[] bytes,
+            CfOptions cfOptions, DexOptions dexOptions, DexFile dexFile) {
+        try {
+            return translate0(context, cf, bytes, cfOptions, dexOptions, dexFile);
+        } catch (RuntimeException ex) {
+            String msg = "...while processing " + cf.getFilePath();
+            throw ExceptionWithContext.withContext(ex, msg);
+        }
+    }
+
+    /**
+     * Performs the main act of translation. This method is separated
+     * from {@link #translate} just to keep things a bit simpler in
+     * terms of exception handling.
+     *
+     *
+     * @param context {@code non-null;} the state global to this invocation.
+     * @param cf {@code non-null;} the class file
+     * @param bytes {@code non-null;} contents of the file
+     * @param cfOptions options for class translation
+     * @param dexOptions options for dex output
+     * @param dexFile {@code non-null;} dex output
+     * @return {@code non-null;} the translated class
+     */
+    private static ClassDefItem translate0(DxContext context, DirectClassFile cf, byte[] bytes,
+            CfOptions cfOptions, DexOptions dexOptions, DexFile dexFile) {
+
+        context.optimizerOptions.loadOptimizeLists(cfOptions.optimizeListFile,
+                cfOptions.dontOptimizeListFile);
+
+        // Build up a class to output.
+
+        CstType thisClass = cf.getThisClass();
+        int classAccessFlags = cf.getAccessFlags() & ~AccessFlags.ACC_SUPER;
+        CstString sourceFile = (cfOptions.positionInfo == PositionList.NONE) ? null :
+            cf.getSourceFile();
+        ClassDefItem out =
+            new ClassDefItem(thisClass, classAccessFlags,
+                    cf.getSuperclass(), cf.getInterfaces(), sourceFile);
+
+        Annotations classAnnotations =
+            AttributeTranslator.getClassAnnotations(cf, cfOptions);
+        if (classAnnotations.size() != 0) {
+            out.setClassAnnotations(classAnnotations, dexFile);
+        }
+
+        FieldIdsSection fieldIdsSection = dexFile.getFieldIds();
+        MethodIdsSection methodIdsSection = dexFile.getMethodIds();
+        MethodHandlesSection methodHandlesSection = dexFile.getMethodHandles();
+        CallSiteIdsSection callSiteIds = dexFile.getCallSiteIds();
+        processFields(cf, out, dexFile);
+        processMethods(context, cf, cfOptions, dexOptions, out, dexFile);
+
+        // intern constant pool method, field and type references
+        ConstantPool constantPool = cf.getConstantPool();
+        int constantPoolSize = constantPool.size();
+
+        for (int i = 0; i < constantPoolSize; i++) {
+            Constant constant = constantPool.getOrNull(i);
+            if (constant instanceof CstMethodRef) {
+                methodIdsSection.intern((CstBaseMethodRef) constant);
+            } else if (constant instanceof CstInterfaceMethodRef) {
+                methodIdsSection.intern(((CstInterfaceMethodRef) constant).toMethodRef());
+            } else if (constant instanceof CstFieldRef) {
+                fieldIdsSection.intern((CstFieldRef) constant);
+            } else if (constant instanceof CstEnumRef) {
+                fieldIdsSection.intern(((CstEnumRef) constant).getFieldRef());
+            } else if (constant instanceof CstMethodHandle) {
+                methodHandlesSection.intern((CstMethodHandle) constant);
+            } else if (constant instanceof CstInvokeDynamic) {
+                CstInvokeDynamic cstInvokeDynamic = (CstInvokeDynamic) constant;
+                int index = cstInvokeDynamic.getBootstrapMethodIndex();
+                BootstrapMethodsList.Item bootstrapMethod = cf.getBootstrapMethods().get(index);
+                CstCallSite callSite =
+                        CstCallSite.make(bootstrapMethod.getBootstrapMethodHandle(),
+                                         cstInvokeDynamic.getNat(),
+                                         bootstrapMethod.getBootstrapMethodArguments());
+                cstInvokeDynamic.setDeclaringClass(cf.getThisClass());
+                cstInvokeDynamic.setCallSite(callSite);
+                for (CstCallSiteRef ref : cstInvokeDynamic.getReferences()) {
+                    callSiteIds.intern(ref);
+                }
+            }
+        }
+
+        return out;
+    }
+
+    /**
+     * Processes the fields of the given class.
+     *
+     * @param cf {@code non-null;} class being translated
+     * @param out {@code non-null;} output class
+     * @param dexFile {@code non-null;} dex output
+     */
+    private static void processFields(
+            DirectClassFile cf, ClassDefItem out, DexFile dexFile) {
+        CstType thisClass = cf.getThisClass();
+        FieldList fields = cf.getFields();
+        int sz = fields.size();
+
+        for (int i = 0; i < sz; i++) {
+            Field one = fields.get(i);
+            try {
+                CstFieldRef field = new CstFieldRef(thisClass, one.getNat());
+                int accessFlags = one.getAccessFlags();
+
+                if (AccessFlags.isStatic(accessFlags)) {
+                    TypedConstant constVal = one.getConstantValue();
+                    EncodedField fi = new EncodedField(field, accessFlags);
+                    if (constVal != null) {
+                        constVal = coerceConstant(constVal, field.getType());
+                    }
+                    out.addStaticField(fi, constVal);
+                } else {
+                    EncodedField fi = new EncodedField(field, accessFlags);
+                    out.addInstanceField(fi);
+                }
+
+                Annotations annotations =
+                    AttributeTranslator.getAnnotations(one.getAttributes());
+                if (annotations.size() != 0) {
+                    out.addFieldAnnotations(field, annotations, dexFile);
+                }
+                dexFile.getFieldIds().intern(field);
+            } catch (RuntimeException ex) {
+                String msg = "...while processing " + one.getName().toHuman() +
+                    " " + one.getDescriptor().toHuman();
+                throw ExceptionWithContext.withContext(ex, msg);
+            }
+        }
+    }
+
+    /**
+     * Helper for {@link #processFields}, which translates constants into
+     * more specific types if necessary.
+     *
+     * @param constant {@code non-null;} the constant in question
+     * @param type {@code non-null;} the desired type
+     */
+    private static TypedConstant coerceConstant(TypedConstant constant,
+            Type type) {
+        Type constantType = constant.getType();
+
+        if (constantType.equals(type)) {
+            return constant;
+        }
+
+        switch (type.getBasicType()) {
+            case Type.BT_BOOLEAN: {
+                return CstBoolean.make(((CstInteger) constant).getValue());
+            }
+            case Type.BT_BYTE: {
+                return CstByte.make(((CstInteger) constant).getValue());
+            }
+            case Type.BT_CHAR: {
+                return CstChar.make(((CstInteger) constant).getValue());
+            }
+            case Type.BT_SHORT: {
+                return CstShort.make(((CstInteger) constant).getValue());
+            }
+            default: {
+                throw new UnsupportedOperationException("can't coerce " +
+                        constant + " to " + type);
+            }
+        }
+    }
+
+    /**
+     * Processes the methods of the given class.
+     *
+     * @param context {@code non-null;} the state global to this invocation.
+     * @param cf {@code non-null;} class being translated
+     * @param cfOptions {@code non-null;} options for class translation
+     * @param dexOptions {@code non-null;} options for dex output
+     * @param out {@code non-null;} output class
+     * @param dexFile {@code non-null;} dex output
+     */
+    private static void processMethods(DxContext context, DirectClassFile cf, CfOptions cfOptions,
+                                       DexOptions dexOptions, ClassDefItem out, DexFile dexFile) {
+        CstType thisClass = cf.getThisClass();
+        MethodList methods = cf.getMethods();
+        int sz = methods.size();
+
+        for (int i = 0; i < sz; i++) {
+            Method one = methods.get(i);
+            try {
+                CstMethodRef meth = new CstMethodRef(thisClass, one.getNat());
+                int accessFlags = one.getAccessFlags();
+                boolean isStatic = AccessFlags.isStatic(accessFlags);
+                boolean isPrivate = AccessFlags.isPrivate(accessFlags);
+                boolean isNative = AccessFlags.isNative(accessFlags);
+                boolean isAbstract = AccessFlags.isAbstract(accessFlags);
+                boolean isConstructor = meth.isInstanceInit() ||
+                    meth.isClassInit();
+                DalvCode code;
+
+                if (isNative || isAbstract) {
+                    // There's no code for native or abstract methods.
+                    code = null;
+                } else {
+                    ConcreteMethod concrete =
+                        new ConcreteMethod(one, cf,
+                                (cfOptions.positionInfo != PositionList.NONE),
+                                cfOptions.localInfo);
+
+                    TranslationAdvice advice;
+
+                    advice = DexTranslationAdvice.THE_ONE;
+
+                    RopMethod rmeth = Ropper.convert(concrete, advice, methods, dexOptions);
+                    RopMethod nonOptRmeth = null;
+                    int paramSize;
+
+                    paramSize = meth.getParameterWordCount(isStatic);
+
+                    String canonicalName
+                            = thisClass.getClassType().getDescriptor()
+                                + "." + one.getName().getString();
+
+                    if (cfOptions.optimize &&
+                            context.optimizerOptions.shouldOptimize(canonicalName)) {
+                        if (DEBUG) {
+                            System.err.println("Optimizing " + canonicalName);
+                        }
+
+                        nonOptRmeth = rmeth;
+                        rmeth = Optimizer.optimize(rmeth,
+                                paramSize, isStatic, cfOptions.localInfo, advice);
+
+                        if (DEBUG) {
+                            context.optimizerOptions.compareOptimizerStep(nonOptRmeth,
+                                    paramSize, isStatic, cfOptions, advice, rmeth);
+                        }
+
+                        if (cfOptions.statistics) {
+                            context.codeStatistics.updateRopStatistics(
+                                    nonOptRmeth, rmeth);
+                        }
+                    }
+
+                    LocalVariableInfo locals = null;
+
+                    if (cfOptions.localInfo) {
+                        locals = LocalVariableExtractor.extract(rmeth);
+                    }
+
+                    code = RopTranslator.translate(rmeth, cfOptions.positionInfo,
+                            locals, paramSize, dexOptions);
+
+                    if (cfOptions.statistics && nonOptRmeth != null) {
+                        updateDexStatistics(context, cfOptions, dexOptions, rmeth, nonOptRmeth, locals,
+                                paramSize, concrete.getCode().size());
+                    }
+                }
+
+                // Preserve the synchronized flag as its "declared" variant...
+                if (AccessFlags.isSynchronized(accessFlags)) {
+                    accessFlags |= AccessFlags.ACC_DECLARED_SYNCHRONIZED;
+
+                    /*
+                     * ...but only native methods are actually allowed to be
+                     * synchronized.
+                     */
+                    if (!isNative) {
+                        accessFlags &= ~AccessFlags.ACC_SYNCHRONIZED;
+                    }
+                }
+
+                if (isConstructor) {
+                    accessFlags |= AccessFlags.ACC_CONSTRUCTOR;
+                }
+
+                TypeList exceptions = AttributeTranslator.getExceptions(one);
+                EncodedMethod mi =
+                    new EncodedMethod(meth, accessFlags, code, exceptions);
+
+                if (meth.isInstanceInit() || meth.isClassInit() ||
+                    isStatic || isPrivate) {
+                    out.addDirectMethod(mi);
+                } else {
+                    out.addVirtualMethod(mi);
+                }
+
+                Annotations annotations =
+                    AttributeTranslator.getMethodAnnotations(one);
+                if (annotations.size() != 0) {
+                    out.addMethodAnnotations(meth, annotations, dexFile);
+                }
+
+                AnnotationsList list =
+                    AttributeTranslator.getParameterAnnotations(one);
+                if (list.size() != 0) {
+                    out.addParameterAnnotations(meth, list, dexFile);
+                }
+                dexFile.getMethodIds().intern(meth);
+            } catch (RuntimeException ex) {
+                String msg = "...while processing " + one.getName().toHuman() +
+                    " " + one.getDescriptor().toHuman();
+                throw ExceptionWithContext.withContext(ex, msg);
+            }
+        }
+    }
+
+    /**
+     * Helper that updates the dex statistics.
+     */
+    private static void updateDexStatistics(DxContext context, CfOptions cfOptions, DexOptions dexOptions,
+            RopMethod optRmeth, RopMethod nonOptRmeth,
+            LocalVariableInfo locals, int paramSize, int originalByteCount) {
+        /*
+         * Run rop->dex again on optimized vs. non-optimized method to
+         * collect statistics. We have to totally convert both ways,
+         * since converting the "real" method getting added to the
+         * file would corrupt it (by messing with its constant pool
+         * indices).
+         */
+
+        DalvCode optCode = RopTranslator.translate(optRmeth,
+                cfOptions.positionInfo, locals, paramSize, dexOptions);
+        DalvCode nonOptCode = RopTranslator.translate(nonOptRmeth,
+                cfOptions.positionInfo, locals, paramSize, dexOptions);
+
+        /*
+         * Fake out the indices, so code.getInsns() can work well enough
+         * for the current purpose.
+         */
+
+        DalvCode.AssignIndicesCallback callback =
+            new DalvCode.AssignIndicesCallback() {
+                @Override
+                public int getIndex(Constant cst) {
+                    // Everything is at index 0!
+                    return 0;
+                }
+            };
+
+        optCode.assignIndices(callback);
+        nonOptCode.assignIndices(callback);
+
+        context.codeStatistics.updateDexStatistics(nonOptCode, optCode);
+        context.codeStatistics.updateOriginalByteCount(originalByteCount);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/cf/CodeStatistics.java b/dx/src/com/android/dx/dex/cf/CodeStatistics.java
new file mode 100644
index 0000000..d0c75d9
--- /dev/null
+++ b/dx/src/com/android/dx/dex/cf/CodeStatistics.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.cf;
+
+import com.android.dx.dex.code.DalvCode;
+import com.android.dx.rop.code.RopMethod;
+import java.io.PrintStream;
+
+/**
+ * Static methods and variables for collecting statistics on generated
+ * code.
+ */
+public final class CodeStatistics {
+    /** set to {@code true} to enable development-time debugging code */
+    private static final boolean DEBUG = false;
+
+    /**
+     * running sum of the number of registers added/removed in
+     * SSA form by the optimizer
+     */
+    public int runningDeltaRegisters = 0;
+
+    /**
+     * running sum of the number of insns added/removed in
+     * SSA form by the optimizer
+     */
+    public int runningDeltaInsns = 0;
+
+    /** running sum of the total number of Rop insns processed */
+    public int runningTotalInsns = 0;
+
+    /**
+     * running sum of the number of dex-form registers added/removed in
+     * SSA form by the optimizer. Only valid if args.statistics is true.
+     */
+    public int dexRunningDeltaRegisters = 0;
+
+    /**
+     * running sum of the number of dex-form insns (actually code
+     * units) added/removed in SSA form by the optimizer. Only valid
+     * if args.statistics is true.
+     */
+    public int dexRunningDeltaInsns = 0;
+
+    /**
+     * running sum of the total number of dex insns (actually code
+     * units) processed
+     */
+    public int dexRunningTotalInsns = 0;
+
+    /** running sum of original class bytecode bytes */
+    public int runningOriginalBytes = 0;
+
+    /**
+     * Updates the number of original bytecode bytes processed.
+     *
+     * @param count {@code >= 0;} the number of bytes to add
+     */
+    public void updateOriginalByteCount(int count) {
+        runningOriginalBytes += count;
+    }
+
+    /**
+     * Updates the dex statistics.
+     *
+     * @param nonOptCode non-optimized code block
+     * @param code optimized code block
+     */
+    public void updateDexStatistics(DalvCode nonOptCode,
+            DalvCode code) {
+        if (DEBUG) {
+            System.err.println("dex insns (old/new) "
+                    + nonOptCode.getInsns().codeSize()
+                    + "/" + code.getInsns().codeSize()
+                    + " regs (o/n) "
+                    + nonOptCode.getInsns().getRegistersSize()
+                    + "/" + code.getInsns().getRegistersSize()
+            );
+        }
+
+        dexRunningDeltaInsns
+            += (code.getInsns().codeSize()
+                - nonOptCode.getInsns().codeSize());
+
+        dexRunningDeltaRegisters
+            += (code.getInsns().getRegistersSize()
+                - nonOptCode.getInsns().getRegistersSize());
+
+        dexRunningTotalInsns += code.getInsns().codeSize();
+    }
+
+    /**
+     * Updates the ROP statistics.
+     *
+     * @param nonOptRmeth non-optimized method
+     * @param rmeth optimized method
+     */
+    public void updateRopStatistics(RopMethod nonOptRmeth,
+            RopMethod rmeth) {
+        int oldCountInsns
+                = nonOptRmeth.getBlocks().getEffectiveInstructionCount();
+        int oldCountRegs = nonOptRmeth.getBlocks().getRegCount();
+
+        if (DEBUG) {
+            System.err.println("insns (old/new): "
+                    + oldCountInsns + "/"
+                    + rmeth.getBlocks().getEffectiveInstructionCount()
+                    + " regs (o/n):" + oldCountRegs
+                    + "/"  +  rmeth.getBlocks().getRegCount());
+        }
+
+        int newCountInsns
+                = rmeth.getBlocks().getEffectiveInstructionCount();
+
+        runningDeltaInsns
+            += (newCountInsns - oldCountInsns);
+
+        runningDeltaRegisters
+            += (rmeth.getBlocks().getRegCount() - oldCountRegs);
+
+        runningTotalInsns += newCountInsns;
+    }
+
+    /**
+     * Prints out the collected statistics.
+     *
+     * @param out {@code non-null;} where to output to
+     */
+    public void dumpStatistics(PrintStream out) {
+        out.printf("Optimizer Delta Rop Insns: %d total: %d "
+                + "(%.2f%%) Delta Registers: %d\n",
+                runningDeltaInsns,
+                runningTotalInsns,
+                (100.0 * (((float) runningDeltaInsns)
+                        / (runningTotalInsns + Math.abs(runningDeltaInsns)))),
+                runningDeltaRegisters);
+
+        out.printf("Optimizer Delta Dex Insns: Insns: %d total: %d "
+                + "(%.2f%%) Delta Registers: %d\n",
+                dexRunningDeltaInsns,
+                dexRunningTotalInsns,
+                (100.0 * (((float) dexRunningDeltaInsns)
+                        / (dexRunningTotalInsns
+                                + Math.abs(dexRunningDeltaInsns)))),
+                dexRunningDeltaRegisters);
+
+        out.printf("Original bytecode byte count: %d\n",
+                runningOriginalBytes);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/cf/OptimizerOptions.java b/dx/src/com/android/dx/dex/cf/OptimizerOptions.java
new file mode 100644
index 0000000..8132adf
--- /dev/null
+++ b/dx/src/com/android/dx/dex/cf/OptimizerOptions.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.cf;
+
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.ssa.Optimizer;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.EnumSet;
+import java.util.HashSet;
+
+/**
+ * Settings for optimization of code.
+ */
+public class OptimizerOptions {
+    /**
+     * {@code null-ok;} hash set of class name + method names that
+     * should be optimized. {@code null} if this constraint was not
+     * specified on the command line
+     */
+    private HashSet<String> optimizeList;
+
+    /**
+     * {@code null-ok;} hash set of class name + method names that should NOT
+     * be optimized.  null if this constraint was not specified on the
+     * command line
+     */
+    private HashSet<String> dontOptimizeList;
+
+    /** true if the above lists have been loaded */
+    private boolean optimizeListsLoaded;
+
+
+    /**
+     * Loads the optimize/don't optimize lists from files.
+     *
+     * @param optimizeListFile Pathname
+     * @param dontOptimizeListFile Pathname
+     */
+    public void loadOptimizeLists(String optimizeListFile,
+            String dontOptimizeListFile) {
+        if (optimizeListsLoaded) {
+            return;
+        }
+
+        if (optimizeListFile != null && dontOptimizeListFile != null) {
+            /*
+             * We shouldn't get this far. The condition should have
+             * been caught in the arg processor.
+             */
+            throw new RuntimeException("optimize and don't optimize lists "
+                    + " are mutually exclusive.");
+        }
+
+        if (optimizeListFile != null) {
+            optimizeList = loadStringsFromFile(optimizeListFile);
+        }
+
+        if (dontOptimizeListFile != null) {
+            dontOptimizeList = loadStringsFromFile(dontOptimizeListFile);
+        }
+
+        optimizeListsLoaded = true;
+    }
+
+    /**
+     * Loads a list of newline-separated strings into a new HashSet and returns
+     * the HashSet.
+     *
+     * @param filename filename to process
+     * @return set of all unique lines in the file
+     */
+    private static HashSet<String> loadStringsFromFile(String filename) {
+        HashSet<String> result = new HashSet<String>();
+
+        try {
+            FileReader fr = new FileReader(filename);
+            BufferedReader bfr = new BufferedReader(fr);
+
+            String line;
+
+            while (null != (line = bfr.readLine())) {
+                result.add(line);
+            }
+
+            fr.close();
+        } catch (IOException ex) {
+            // Let the exception percolate up as a RuntimeException.
+            throw new RuntimeException("Error with optimize list: " +
+                    filename, ex);
+        }
+
+        return result;
+    }
+
+    /**
+     * Compares the output of the optimizer run normally with a run skipping
+     * some optional steps. Results are printed to stderr.
+     *
+     * @param nonOptRmeth {@code non-null;} origional rop method
+     * @param paramSize {@code >= 0;} parameter size of method
+     * @param isStatic true if this method has no 'this' pointer argument.
+     * @param args {@code non-null;} translator arguments
+     * @param advice {@code non-null;} translation advice
+     * @param rmeth {@code non-null;} method with all optimization steps run.
+     */
+    public void compareOptimizerStep(RopMethod nonOptRmeth,
+            int paramSize, boolean isStatic, CfOptions args,
+            TranslationAdvice advice, RopMethod rmeth) {
+        EnumSet<Optimizer.OptionalStep> steps;
+
+        steps = EnumSet.allOf(Optimizer.OptionalStep.class);
+
+        // This is the step to skip.
+        steps.remove(Optimizer.OptionalStep.CONST_COLLECTOR);
+
+        RopMethod skipRopMethod
+                = Optimizer.optimize(nonOptRmeth,
+                        paramSize, isStatic, args.localInfo, advice, steps);
+
+        int normalInsns
+                = rmeth.getBlocks().getEffectiveInstructionCount();
+        int skipInsns
+                = skipRopMethod.getBlocks().getEffectiveInstructionCount();
+
+        System.err.printf(
+                "optimize step regs:(%d/%d/%.2f%%)"
+                + " insns:(%d/%d/%.2f%%)\n",
+                rmeth.getBlocks().getRegCount(),
+                skipRopMethod.getBlocks().getRegCount(),
+                100.0 * ((skipRopMethod.getBlocks().getRegCount()
+                        - rmeth.getBlocks().getRegCount())
+                        / (float) skipRopMethod.getBlocks().getRegCount()),
+                normalInsns, skipInsns,
+                100.0 * ((skipInsns - normalInsns) / (float) skipInsns));
+    }
+
+    /**
+     * Checks whether the specified method should be optimized
+     *
+     * @param canonicalMethodName name of method being considered
+     * @return true if it should be optimized
+     */
+    public boolean shouldOptimize(String canonicalMethodName) {
+        // Optimize only what's in the optimize list.
+        if (optimizeList != null) {
+            return optimizeList.contains(canonicalMethodName);
+        }
+
+        /*
+         * Or don't optimize what's listed here. (The two lists are
+         * mutually exclusive.
+         */
+
+        if (dontOptimizeList != null) {
+            return !dontOptimizeList.contains(canonicalMethodName);
+        }
+
+        // If neither list has been specified, then optimize everything.
+        return true;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/cf/package.html b/dx/src/com/android/dx/dex/cf/package.html
new file mode 100644
index 0000000..d56e8a7
--- /dev/null
+++ b/dx/src/com/android/dx/dex/cf/package.html
@@ -0,0 +1,15 @@
+<body>
+<p>Classes for translating Java classfiles into Dalvik classes.</p>
+
+<p><b>PACKAGES USED:</b>
+<ul>
+<li><code>com.android.dx.cf.code</code></li>
+<li><code>com.android.dx.cf.direct</code></li>
+<li><code>com.android.dx.cf.iface</code></li>
+<li><code>com.android.dx.dex.code</code></li>
+<li><code>com.android.dx.dex.file</code></li>
+<li><code>com.android.dx.rop.code</code></li>
+<li><code>com.android.dx.rop.cst</code></li>
+<li><code>com.android.dx.util</code></li>
+</ul>
+</body>
diff --git a/dx/src/com/android/dx/dex/code/ArrayData.java b/dx/src/com/android/dx/dex/code/ArrayData.java
new file mode 100644
index 0000000..a93d2e7
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/ArrayData.java
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.io.Opcodes;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteral32;
+import com.android.dx.rop.cst.CstLiteral64;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+
+/**
+ * Pseudo-instruction which holds fill array data.
+ */
+public final class ArrayData extends VariableSizeInsn {
+    /**
+     * {@code non-null;} address representing the instruction that uses this
+     * instance
+     */
+    private final CodeAddress user;
+
+    /** {@code non-null;} initial values to be filled into an array */
+    private final ArrayList<Constant> values;
+
+    /** non-null: type of constant that initializes the array */
+    private final Constant arrayType;
+
+    /** Width of the init value element */
+    private final int elemWidth;
+
+    /** Length of the init list */
+    private final int initLength;
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     * @param user {@code non-null;} address representing the instruction that
+     * uses this instance
+     * @param values {@code non-null;} initial values to be filled into an array
+     */
+    public ArrayData(SourcePosition position, CodeAddress user,
+                     ArrayList<Constant> values,
+                     Constant arrayType) {
+        super(position, RegisterSpecList.EMPTY);
+
+        if (user == null) {
+            throw new NullPointerException("user == null");
+        }
+
+        if (values == null) {
+            throw new NullPointerException("values == null");
+        }
+
+        int sz = values.size();
+
+        if (sz <= 0) {
+            throw new IllegalArgumentException("Illegal number of init values");
+        }
+
+        this.arrayType = arrayType;
+
+        if (arrayType == CstType.BYTE_ARRAY ||
+                arrayType == CstType.BOOLEAN_ARRAY) {
+            elemWidth = 1;
+        } else if (arrayType == CstType.SHORT_ARRAY ||
+                arrayType == CstType.CHAR_ARRAY) {
+            elemWidth = 2;
+        } else if (arrayType == CstType.INT_ARRAY ||
+                arrayType == CstType.FLOAT_ARRAY) {
+            elemWidth = 4;
+        } else if (arrayType == CstType.LONG_ARRAY ||
+                arrayType == CstType.DOUBLE_ARRAY) {
+            elemWidth = 8;
+        } else {
+            throw new IllegalArgumentException("Unexpected constant type");
+        }
+        this.user = user;
+        this.values = values;
+        initLength = values.size();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        int sz = initLength;
+        // Note: the unit here is 16-bit
+        return 4 + ((sz * elemWidth) + 1) / 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out) {
+        int sz = values.size();
+
+        out.writeShort(Opcodes.FILL_ARRAY_DATA_PAYLOAD);
+        out.writeShort(elemWidth);
+        out.writeInt(initLength);
+
+
+        // For speed reasons, replicate the for loop in each case
+        switch (elemWidth) {
+            case 1: {
+                for (int i = 0; i < sz; i++) {
+                    Constant cst = values.get(i);
+                    out.writeByte((byte) ((CstLiteral32) cst).getIntBits());
+                }
+                break;
+            }
+            case 2: {
+                for (int i = 0; i < sz; i++) {
+                    Constant cst = values.get(i);
+                    out.writeShort((short) ((CstLiteral32) cst).getIntBits());
+                }
+                break;
+            }
+            case 4: {
+                for (int i = 0; i < sz; i++) {
+                    Constant cst = values.get(i);
+                    out.writeInt(((CstLiteral32) cst).getIntBits());
+                }
+                break;
+            }
+            case 8: {
+                for (int i = 0; i < sz; i++) {
+                    Constant cst = values.get(i);
+                    out.writeLong(((CstLiteral64) cst).getLongBits());
+                }
+                break;
+            }
+            default:
+                break;
+        }
+
+        // Pad one byte to make the size of data table multiples of 16-bits
+        if (elemWidth == 1 && (sz % 2 != 0)) {
+            out.writeByte(0x00);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new ArrayData(getPosition(), user, values, arrayType);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        int sz = values.size();
+        for (int i = 0; i < sz; i++) {
+            sb.append("\n    ");
+            sb.append(i);
+            sb.append(": ");
+            sb.append(values.get(i).toHuman());
+        }
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String listingString0(boolean noteIndices) {
+        int baseAddress = user.getAddress();
+        StringBuilder sb = new StringBuilder(100);
+        int sz = values.size();
+
+        sb.append("fill-array-data-payload // for fill-array-data @ ");
+        sb.append(Hex.u2(baseAddress));
+
+        for (int i = 0; i < sz; i++) {
+            sb.append("\n  ");
+            sb.append(i);
+            sb.append(": ");
+            sb.append(values.get(i).toHuman());
+        }
+
+        return sb.toString();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/BlockAddresses.java b/dx/src/com/android/dx/dex/code/BlockAddresses.java
new file mode 100644
index 0000000..1a1d184
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/BlockAddresses.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.SourcePosition;
+
+/**
+ * Container for the set of {@link CodeAddress} instances associated with
+ * the blocks of a particular method. Each block has a corresponding
+ * start address, end address, and last instruction address.
+ */
+public final class BlockAddresses {
+    /** {@code non-null;} array containing addresses for the start of each basic
+     * block (indexed by basic block label) */
+    private final CodeAddress[] starts;
+
+    /** {@code non-null;} array containing addresses for the final instruction
+     * of each basic block (indexed by basic block label) */
+    private final CodeAddress[] lasts;
+
+    /** {@code non-null;} array containing addresses for the end (just past the
+     * final instruction) of each basic block (indexed by basic block
+     * label) */
+    private final CodeAddress[] ends;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param method {@code non-null;} the method to have block addresses for
+     */
+    public BlockAddresses(RopMethod method) {
+        BasicBlockList blocks = method.getBlocks();
+        int maxLabel = blocks.getMaxLabel();
+
+        this.starts = new CodeAddress[maxLabel];
+        this.lasts = new CodeAddress[maxLabel];
+        this.ends = new CodeAddress[maxLabel];
+
+        setupArrays(method);
+    }
+
+    /**
+     * Gets the instance for the start of the given block.
+     *
+     * @param block {@code non-null;} the block in question
+     * @return {@code non-null;} the appropriate instance
+     */
+    public CodeAddress getStart(BasicBlock block) {
+        return starts[block.getLabel()];
+    }
+
+    /**
+     * Gets the instance for the start of the block with the given label.
+     *
+     * @param label {@code non-null;} the label of the block in question
+     * @return {@code non-null;} the appropriate instance
+     */
+    public CodeAddress getStart(int label) {
+        return starts[label];
+    }
+
+    /**
+     * Gets the instance for the final instruction of the given block.
+     *
+     * @param block {@code non-null;} the block in question
+     * @return {@code non-null;} the appropriate instance
+     */
+    public CodeAddress getLast(BasicBlock block) {
+        return lasts[block.getLabel()];
+    }
+
+    /**
+     * Gets the instance for the final instruction of the block with
+     * the given label.
+     *
+     * @param label {@code non-null;} the label of the block in question
+     * @return {@code non-null;} the appropriate instance
+     */
+    public CodeAddress getLast(int label) {
+        return lasts[label];
+    }
+
+    /**
+     * Gets the instance for the end (address after the final instruction)
+     * of the given block.
+     *
+     * @param block {@code non-null;} the block in question
+     * @return {@code non-null;} the appropriate instance
+     */
+    public CodeAddress getEnd(BasicBlock block) {
+        return ends[block.getLabel()];
+    }
+
+    /**
+     * Gets the instance for the end (address after the final instruction)
+     * of the block with the given label.
+     *
+     * @param label {@code non-null;} the label of the block in question
+     * @return {@code non-null;} the appropriate instance
+     */
+    public CodeAddress getEnd(int label) {
+        return ends[label];
+    }
+
+    /**
+     * Sets up the address arrays.
+     */
+    private void setupArrays(RopMethod method) {
+        BasicBlockList blocks = method.getBlocks();
+        int sz = blocks.size();
+
+        for (int i = 0; i < sz; i++) {
+            BasicBlock one = blocks.get(i);
+            int label = one.getLabel();
+            Insn insn = one.getInsns().get(0);
+
+            starts[label] = new CodeAddress(insn.getPosition());
+
+            SourcePosition pos = one.getLastInsn().getPosition();
+
+            lasts[label] = new CodeAddress(pos);
+            ends[label] = new CodeAddress(pos);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/CatchBuilder.java b/dx/src/com/android/dx/dex/code/CatchBuilder.java
new file mode 100644
index 0000000..059091e
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/CatchBuilder.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.type.Type;
+import java.util.HashSet;
+
+/**
+ * Interface for the construction of {@link CatchTable} instances.
+ */
+public interface CatchBuilder {
+    /**
+     * Builds and returns the catch table for this instance.
+     *
+     * @return {@code non-null;} the constructed table
+     */
+    public CatchTable build();
+
+    /**
+     * Gets whether this instance has any catches at all (either typed
+     * or catch-all).
+     *
+     * @return whether this instance has any catches at all
+     */
+    public boolean hasAnyCatches();
+
+    /**
+     * Gets the set of catch types associated with this instance.
+     *
+     * @return {@code non-null;} the set of catch types
+     */
+    public HashSet<Type> getCatchTypes();
+}
diff --git a/dx/src/com/android/dx/dex/code/CatchHandlerList.java b/dx/src/com/android/dx/dex/code/CatchHandlerList.java
new file mode 100644
index 0000000..c7653ef
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/CatchHandlerList.java
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.FixedSizeList;
+import com.android.dx.util.Hex;
+
+/**
+ * Ordered list of (exception type, handler address) entries.
+ */
+public final class CatchHandlerList extends FixedSizeList
+        implements Comparable<CatchHandlerList> {
+    /** {@code non-null;} empty instance */
+    public static final CatchHandlerList EMPTY = new CatchHandlerList(0);
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size {@code >= 0;} the size of the list
+     */
+    public CatchHandlerList(int size) {
+        super(size);
+    }
+
+    /**
+     * Gets the element at the given index. It is an error to call
+     * this with the index for an element which was never set; if you
+     * do that, this will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @return {@code non-null;} element at that index
+     */
+    public Entry get(int n) {
+        return (Entry) get0(n);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return toHuman("", "");
+    }
+
+    /**
+     * Get the human form of this instance, prefixed on each line
+     * with the string.
+     *
+     * @param prefix {@code non-null;} the prefix for every line
+     * @param header {@code non-null;} the header for the first line (after the
+     * first prefix)
+     * @return {@code non-null;} the human form
+     */
+    public String toHuman(String prefix, String header) {
+        StringBuilder sb = new StringBuilder(100);
+        int size = size();
+
+        sb.append(prefix);
+        sb.append(header);
+        sb.append("catch ");
+
+        for (int i = 0; i < size; i++) {
+            Entry entry = get(i);
+
+            if (i != 0) {
+                sb.append(",\n");
+                sb.append(prefix);
+                sb.append("  ");
+            }
+
+            if ((i == (size - 1)) && catchesAll()) {
+                sb.append("<any>");
+            } else {
+                sb.append(entry.getExceptionType().toHuman());
+            }
+
+            sb.append(" -> ");
+            sb.append(Hex.u2or4(entry.getHandler()));
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Returns whether or not this instance ends with a "catch-all"
+     * handler.
+     *
+     * @return {@code true} if this instance ends with a "catch-all"
+     * handler or {@code false} if not
+     */
+    public boolean catchesAll() {
+        int size = size();
+
+        if (size == 0) {
+            return false;
+        }
+
+        Entry last = get(size - 1);
+        return last.getExceptionType().equals(CstType.OBJECT);
+    }
+
+    /**
+     * Sets the entry at the given index.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param exceptionType {@code non-null;} type of exception handled
+     * @param handler {@code >= 0;} exception handler address
+     */
+    public void set(int n, CstType exceptionType, int handler) {
+        set0(n, new Entry(exceptionType, handler));
+    }
+
+    /**
+     * Sets the entry at the given index.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param entry {@code non-null;} the entry to set at {@code n}
+     */
+    public void set(int n, Entry entry) {
+        set0(n, entry);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(CatchHandlerList other) {
+        if (this == other) {
+            // Easy out.
+            return 0;
+        }
+
+        int thisSize = size();
+        int otherSize = other.size();
+        int checkSize = Math.min(thisSize, otherSize);
+
+        for (int i = 0; i < checkSize; i++) {
+            Entry thisEntry = get(i);
+            Entry otherEntry = other.get(i);
+            int compare = thisEntry.compareTo(otherEntry);
+            if (compare != 0) {
+                return compare;
+            }
+        }
+
+        if (thisSize < otherSize) {
+            return -1;
+        } else if (thisSize > otherSize) {
+            return 1;
+        }
+
+        return 0;
+    }
+
+    /**
+     * Entry in the list.
+     */
+    public static class Entry implements Comparable<Entry> {
+        /** {@code non-null;} type of exception handled */
+        private final CstType exceptionType;
+
+        /** {@code >= 0;} exception handler address */
+        private final int handler;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param exceptionType {@code non-null;} type of exception handled
+         * @param handler {@code >= 0;} exception handler address
+         */
+        public Entry(CstType exceptionType, int handler) {
+            if (handler < 0) {
+                throw new IllegalArgumentException("handler < 0");
+            }
+
+            if (exceptionType == null) {
+                throw new NullPointerException("exceptionType == null");
+            }
+
+            this.handler = handler;
+            this.exceptionType = exceptionType;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int hashCode() {
+            return (handler * 31) + exceptionType.hashCode();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public boolean equals(Object other) {
+            if (other instanceof Entry) {
+                return (compareTo((Entry) other) == 0);
+            }
+
+            return false;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int compareTo(Entry other) {
+            if (handler < other.handler) {
+                return -1;
+            } else if (handler > other.handler) {
+                return 1;
+            }
+
+            return exceptionType.compareTo(other.exceptionType);
+        }
+
+        /**
+         * Gets the exception type handled.
+         *
+         * @return {@code non-null;} the exception type
+         */
+        public CstType getExceptionType() {
+            return exceptionType;
+        }
+
+        /**
+         * Gets the handler address.
+         *
+         * @return {@code >= 0;} the handler address
+         */
+        public int getHandler() {
+            return handler;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/CatchTable.java b/dx/src/com/android/dx/dex/code/CatchTable.java
new file mode 100644
index 0000000..08cc90c
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/CatchTable.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * Table of catch entries. Each entry includes a range of code
+ * addresses for which it is valid and an associated {@link
+ * CatchHandlerList}.
+ */
+public final class CatchTable extends FixedSizeList
+        implements Comparable<CatchTable> {
+    /** {@code non-null;} empty instance */
+    public static final CatchTable EMPTY = new CatchTable(0);
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size {@code >= 0;} the size of the table
+     */
+    public CatchTable(int size) {
+        super(size);
+    }
+
+    /**
+     * Gets the element at the given index. It is an error to call
+     * this with the index for an element which was never set; if you
+     * do that, this will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @return {@code non-null;} element at that index
+     */
+    public Entry get(int n) {
+        return (Entry) get0(n);
+    }
+
+    /**
+     * Sets the entry at the given index.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param entry {@code non-null;} the entry to set at {@code n}
+     */
+    public void set(int n, Entry entry) {
+        set0(n, entry);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(CatchTable other) {
+        if (this == other) {
+            // Easy out.
+            return 0;
+        }
+
+        int thisSize = size();
+        int otherSize = other.size();
+        int checkSize = Math.min(thisSize, otherSize);
+
+        for (int i = 0; i < checkSize; i++) {
+            Entry thisEntry = get(i);
+            Entry otherEntry = other.get(i);
+            int compare = thisEntry.compareTo(otherEntry);
+            if (compare != 0) {
+                return compare;
+            }
+        }
+
+        if (thisSize < otherSize) {
+            return -1;
+        } else if (thisSize > otherSize) {
+            return 1;
+        }
+
+        return 0;
+    }
+
+    /**
+     * Entry in a catch list.
+     */
+    public static class Entry implements Comparable<Entry> {
+        /** {@code >= 0;} start address */
+        private final int start;
+
+        /** {@code > start;} end address (exclusive) */
+        private final int end;
+
+        /** {@code non-null;} list of catch handlers */
+        private final CatchHandlerList handlers;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param start {@code >= 0;} start address
+         * @param end {@code > start;} end address (exclusive)
+         * @param handlers {@code non-null;} list of catch handlers
+         */
+        public Entry(int start, int end, CatchHandlerList handlers) {
+            if (start < 0) {
+                throw new IllegalArgumentException("start < 0");
+            }
+
+            if (end <= start) {
+                throw new IllegalArgumentException("end <= start");
+            }
+
+            if (handlers.isMutable()) {
+                throw new IllegalArgumentException("handlers.isMutable()");
+            }
+
+            this.start = start;
+            this.end = end;
+            this.handlers = handlers;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int hashCode() {
+            int hash = (start * 31) + end;
+            hash = (hash * 31) + handlers.hashCode();
+            return hash;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public boolean equals(Object other) {
+            if (other instanceof Entry) {
+                return (compareTo((Entry) other) == 0);
+            }
+
+            return false;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int compareTo(Entry other) {
+            if (start < other.start) {
+                return -1;
+            } else if (start > other.start) {
+                return 1;
+            }
+
+            if (end < other.end) {
+                return -1;
+            } else if (end > other.end) {
+                return 1;
+            }
+
+            return handlers.compareTo(other.handlers);
+        }
+
+        /**
+         * Gets the start address.
+         *
+         * @return {@code >= 0;} the start address
+         */
+        public int getStart() {
+            return start;
+        }
+
+        /**
+         * Gets the end address (exclusive).
+         *
+         * @return {@code > start;} the end address (exclusive)
+         */
+        public int getEnd() {
+            return end;
+        }
+
+        /**
+         * Gets the handlers.
+         *
+         * @return {@code non-null;} the handlers
+         */
+        public CatchHandlerList getHandlers() {
+            return handlers;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/CodeAddress.java b/dx/src/com/android/dx/dex/code/CodeAddress.java
new file mode 100644
index 0000000..b31e31c
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/CodeAddress.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+
+/**
+ * Pseudo-instruction which is used to track an address within a code
+ * array. Instances are used for such things as branch targets and
+ * exception handler ranges. Its code size is zero, and so instances
+ * do not in general directly wind up in any output (either
+ * human-oriented or binary file).
+ */
+public final class CodeAddress extends ZeroSizeInsn {
+    /** If this address should bind closely to the following real instruction */
+    private final boolean bindsClosely;
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     */
+    public CodeAddress(SourcePosition position) {
+        this(position, false);
+    }
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     * @param bindsClosely if the address should bind closely to the following
+     *                     real instruction.
+     */
+    public CodeAddress(SourcePosition position, boolean bindsClosely) {
+        super(position);
+        this.bindsClosely = bindsClosely;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final DalvInsn withRegisters(RegisterSpecList registers) {
+        return new CodeAddress(getPosition());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String listingString0(boolean noteIndices) {
+        return "code-address";
+    }
+
+    /**
+     * Gets whether this address binds closely to the following "real"
+     * (non-zero-length) instruction.
+     *
+     * When a prefix is added to an instruction (for example, to move a value
+     * from a high register to a low register), this determines whether this
+     * {@code CodeAddress} will point to the prefix, or to the instruction
+     * itself.
+     *
+     * If bindsClosely is true, the address will point to the instruction
+     * itself, otherwise it will point to the prefix (if any)
+     *
+     * @return true if this address binds closely to the next real instruction
+     */
+    public boolean getBindsClosely() {
+        return bindsClosely;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/CstInsn.java b/dx/src/com/android/dx/dex/code/CstInsn.java
new file mode 100644
index 0000000..d4e5223
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/CstInsn.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.Hex;
+
+/**
+ * Instruction which has a single constant argument in addition
+ * to all the normal instruction information.
+ */
+public final class CstInsn extends FixedSizeInsn {
+    /** {@code non-null;} the constant argument for this instruction */
+    private final Constant constant;
+
+    /**
+     * {@code >= -1;} the constant pool index for {@link #constant}, or
+     * {@code -1} if not yet set
+     */
+    private int index;
+
+    /**
+     * {@code >= -1;} the constant pool index for the class reference in
+     * {@link #constant} if any, or {@code -1} if not yet set
+     */
+    private int classIndex;
+
+    /**
+     * Constructs an instance. The output address of this instance is
+     * initially unknown ({@code -1}) as is the constant pool index.
+     *
+     * @param opcode the opcode; one of the constants from {@link Dops}
+     * @param position {@code non-null;} source position
+     * @param registers {@code non-null;} register list, including a
+     * result register if appropriate (that is, registers may be either
+     * ins or outs)
+     * @param constant {@code non-null;} constant argument
+     */
+    public CstInsn(Dop opcode, SourcePosition position,
+                   RegisterSpecList registers, Constant constant) {
+        super(opcode, position, registers);
+
+        if (constant == null) {
+            throw new NullPointerException("constant == null");
+        }
+
+        this.constant = constant;
+        this.index = -1;
+        this.classIndex = -1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withOpcode(Dop opcode) {
+        CstInsn result =
+            new CstInsn(opcode, getPosition(), getRegisters(), constant);
+
+        if (index >= 0) {
+            result.setIndex(index);
+        }
+
+        if (classIndex >= 0) {
+            result.setClassIndex(classIndex);
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        CstInsn result =
+            new CstInsn(getOpcode(), getPosition(), registers, constant);
+
+        if (index >= 0) {
+            result.setIndex(index);
+        }
+
+        if (classIndex >= 0) {
+            result.setClassIndex(classIndex);
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the constant argument.
+     *
+     * @return {@code non-null;} the constant argument
+     */
+    public Constant getConstant() {
+        return constant;
+    }
+
+    /**
+     * Gets the constant's index. It is only valid to call this after
+     * {@link #setIndex} has been called.
+     *
+     * @return {@code >= 0;} the constant pool index
+     */
+    public int getIndex() {
+        if (index < 0) {
+            throw new IllegalStateException("index not yet set for " + constant);
+        }
+
+        return index;
+    }
+
+    /**
+     * Returns whether the constant's index has been set for this instance.
+     *
+     * @see #setIndex
+     *
+     * @return {@code true} iff the index has been set
+     */
+    public boolean hasIndex() {
+        return (index >= 0);
+    }
+
+    /**
+     * Sets the constant's index. It is only valid to call this method once
+     * per instance.
+     *
+     * @param index {@code index >= 0;} the constant pool index
+     */
+    public void setIndex(int index) {
+        if (index < 0) {
+            throw new IllegalArgumentException("index < 0");
+        }
+
+        if (this.index >= 0) {
+            throw new IllegalStateException("index already set");
+        }
+
+        this.index = index;
+    }
+
+    /**
+     * Gets the constant's class index. It is only valid to call this after
+     * {@link #setClassIndex} has been called.
+     *
+     * @return {@code >= 0;} the constant's class's constant pool index
+     */
+    public int getClassIndex() {
+        if (classIndex < 0) {
+            throw new IllegalStateException("class index not yet set");
+        }
+
+        return classIndex;
+    }
+
+    /**
+     * Returns whether the constant's class index has been set for this
+     * instance.
+     *
+     * @see #setClassIndex
+     *
+     * @return {@code true} iff the index has been set
+     */
+    public boolean hasClassIndex() {
+        return (classIndex >= 0);
+    }
+
+    /**
+     * Sets the constant's class index. This is the constant pool index
+     * for the class referred to by this instance's constant. Only
+     * reference constants have a class, so it is only on instances
+     * with reference constants that this method should ever be
+     * called. It is only valid to call this method once per instance.
+     *
+     * @param index {@code index >= 0;} the constant's class's constant pool index
+     */
+    public void setClassIndex(int index) {
+        if (index < 0) {
+            throw new IllegalArgumentException("index < 0");
+        }
+
+        if (this.classIndex >= 0) {
+            throw new IllegalStateException("class index already set");
+        }
+
+        this.classIndex = index;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        return constant.toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String cstString() {
+        if (constant instanceof CstString) {
+            return ((CstString) constant).toQuoted();
+        }
+        return constant.toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String cstComment() {
+        if (!hasIndex()) {
+            return "";
+        }
+
+        StringBuilder sb = new StringBuilder(20);
+        sb.append(getConstant().typeName());
+        sb.append('@');
+
+        if (index < 65536) {
+            sb.append(Hex.u2(index));
+        } else {
+            sb.append(Hex.u4(index));
+        }
+
+        return sb.toString();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/DalvCode.java b/dx/src/com/android/dx/dex/code/DalvCode.java
new file mode 100644
index 0000000..ebaf288
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/DalvCode.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.type.Type;
+import java.util.HashSet;
+
+/**
+ * Container for all the pieces of a concrete method. Each instance
+ * corresponds to a {@code code} structure in a {@code .dex} file.
+ */
+public final class DalvCode {
+    /**
+     * how much position info to preserve; one of the static
+     * constants in {@link PositionList}
+     */
+    private final int positionInfo;
+
+    /**
+     * {@code null-ok;} the instruction list, ready for final processing;
+     * nulled out in {@link #finishProcessingIfNecessary}
+     */
+    private OutputFinisher unprocessedInsns;
+
+    /**
+     * {@code non-null;} unprocessed catch table;
+     * nulled out in {@link #finishProcessingIfNecessary}
+     */
+    private CatchBuilder unprocessedCatches;
+
+    /**
+     * {@code null-ok;} catch table; set in
+     * {@link #finishProcessingIfNecessary}
+     */
+    private CatchTable catches;
+
+    /**
+     * {@code null-ok;} source positions list; set in
+     * {@link #finishProcessingIfNecessary}
+     */
+    private PositionList positions;
+
+    /**
+     * {@code null-ok;} local variable list; set in
+     * {@link #finishProcessingIfNecessary}
+     */
+    private LocalList locals;
+
+    /**
+     * {@code null-ok;} the processed instruction list; set in
+     * {@link #finishProcessingIfNecessary}
+     */
+    private DalvInsnList insns;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param positionInfo how much position info to preserve; one of the
+     * static constants in {@link PositionList}
+     * @param unprocessedInsns {@code non-null;} the instruction list, ready
+     * for final processing
+     * @param unprocessedCatches {@code non-null;} unprocessed catch
+     * (exception handler) table
+     */
+    public DalvCode(int positionInfo, OutputFinisher unprocessedInsns,
+            CatchBuilder unprocessedCatches) {
+        if (unprocessedInsns == null) {
+            throw new NullPointerException("unprocessedInsns == null");
+        }
+
+        if (unprocessedCatches == null) {
+            throw new NullPointerException("unprocessedCatches == null");
+        }
+
+        this.positionInfo = positionInfo;
+        this.unprocessedInsns = unprocessedInsns;
+        this.unprocessedCatches = unprocessedCatches;
+        this.catches = null;
+        this.positions = null;
+        this.locals = null;
+        this.insns = null;
+    }
+
+    /**
+     * Finish up processing of the method.
+     */
+    private void finishProcessingIfNecessary() {
+        if (insns != null) {
+            return;
+        }
+
+        insns = unprocessedInsns.finishProcessingAndGetList();
+        positions = PositionList.make(insns, positionInfo);
+        locals = LocalList.make(insns);
+        catches = unprocessedCatches.build();
+
+        // Let them be gc'ed.
+        unprocessedInsns = null;
+        unprocessedCatches = null;
+    }
+
+    /**
+     * Assign indices in all instructions that need them, using the
+     * given callback to perform lookups. This must be called before
+     * {@link #getInsns}.
+     *
+     * @param callback {@code non-null;} callback object
+     */
+    public void assignIndices(AssignIndicesCallback callback) {
+        unprocessedInsns.assignIndices(callback);
+    }
+
+    /**
+     * Gets whether this instance has any position data to represent.
+     *
+     * @return {@code true} iff this instance has any position
+     * data to represent
+     */
+    public boolean hasPositions() {
+        return (positionInfo != PositionList.NONE)
+            && unprocessedInsns.hasAnyPositionInfo();
+    }
+
+    /**
+     * Gets whether this instance has any local variable data to represent.
+     *
+     * @return {@code true} iff this instance has any local variable
+     * data to represent
+     */
+    public boolean hasLocals() {
+        return unprocessedInsns.hasAnyLocalInfo();
+    }
+
+    /**
+     * Gets whether this instance has any catches at all (either typed
+     * or catch-all).
+     *
+     * @return whether this instance has any catches at all
+     */
+    public boolean hasAnyCatches() {
+        return unprocessedCatches.hasAnyCatches();
+    }
+
+    /**
+     * Gets the set of catch types handled anywhere in the code.
+     *
+     * @return {@code non-null;} the set of catch types
+     */
+    public HashSet<Type> getCatchTypes() {
+        return unprocessedCatches.getCatchTypes();
+    }
+
+    /**
+     * Gets the set of all constants referred to by instructions in
+     * the code.
+     *
+     * @return {@code non-null;} the set of constants
+     */
+    public HashSet<Constant> getInsnConstants() {
+        return unprocessedInsns.getAllConstants();
+    }
+
+    /**
+     * Gets the list of instructions.
+     *
+     * @return {@code non-null;} the instruction list
+     */
+    public DalvInsnList getInsns() {
+        finishProcessingIfNecessary();
+        return insns;
+    }
+
+    /**
+     * Gets the catch (exception handler) table.
+     *
+     * @return {@code non-null;} the catch table
+     */
+    public CatchTable getCatches() {
+        finishProcessingIfNecessary();
+        return catches;
+    }
+
+    /**
+     * Gets the source positions list.
+     *
+     * @return {@code non-null;} the source positions list
+     */
+    public PositionList getPositions() {
+        finishProcessingIfNecessary();
+        return positions;
+    }
+
+    /**
+     * Gets the source positions list.
+     *
+     * @return {@code non-null;} the source positions list
+     */
+    public LocalList getLocals() {
+        finishProcessingIfNecessary();
+        return locals;
+    }
+
+    /**
+     * Class used as a callback for {@link #assignIndices}.
+     */
+    public static interface AssignIndicesCallback {
+        /**
+         * Gets the index for the given constant.
+         *
+         * @param cst {@code non-null;} the constant
+         * @return {@code >= -1;} the index or {@code -1} if the constant
+         * shouldn't actually be reified with an index
+         */
+        public int getIndex(Constant cst);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/DalvInsn.java b/dx/src/com/android/dx/dex/code/DalvInsn.java
new file mode 100644
index 0000000..94acfab
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/DalvInsn.java
@@ -0,0 +1,487 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.ssa.RegisterMapper;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import com.android.dx.util.TwoColumnOutput;
+import java.util.BitSet;
+
+/**
+ * Base class for Dalvik instructions.
+ */
+public abstract class DalvInsn {
+    /**
+     * the actual output address of this instance, if known, or
+     * {@code -1} if not
+     */
+    private int address;
+
+    /** the opcode; one of the constants from {@link Dops} */
+    private final Dop opcode;
+
+    /** {@code non-null;} source position */
+    private final SourcePosition position;
+
+    /** {@code non-null;} list of register arguments */
+    private final RegisterSpecList registers;
+
+    /**
+     * Makes a move instruction, appropriate and ideal for the given arguments.
+     *
+     * @param position {@code non-null;} source position information
+     * @param dest {@code non-null;} destination register
+     * @param src {@code non-null;} source register
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static SimpleInsn makeMove(SourcePosition position,
+            RegisterSpec dest, RegisterSpec src) {
+        boolean category1 = dest.getCategory() == 1;
+        boolean reference = dest.getType().isReference();
+        int destReg = dest.getReg();
+        int srcReg = src.getReg();
+        Dop opcode;
+
+        if ((srcReg | destReg) < 16) {
+            opcode = reference ? Dops.MOVE_OBJECT :
+                (category1 ? Dops.MOVE : Dops.MOVE_WIDE);
+        } else if (destReg < 256) {
+            opcode = reference ? Dops.MOVE_OBJECT_FROM16 :
+                (category1 ? Dops.MOVE_FROM16 : Dops.MOVE_WIDE_FROM16);
+        } else {
+            opcode = reference ? Dops.MOVE_OBJECT_16 :
+                (category1 ? Dops.MOVE_16 : Dops.MOVE_WIDE_16);
+        }
+
+        return new SimpleInsn(opcode, position,
+                              RegisterSpecList.make(dest, src));
+    }
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * <p><b>Note:</b> In the unlikely event that an instruction takes
+     * absolutely no registers (e.g., a {@code nop} or a
+     * no-argument no-result static method call), then the given
+     * register list may be passed as {@link
+     * RegisterSpecList#EMPTY}.</p>
+     *
+     * @param opcode the opcode; one of the constants from {@link Dops}
+     * @param position {@code non-null;} source position
+     * @param registers {@code non-null;} register list, including a
+     * result register if appropriate (that is, registers may be either
+     * ins and outs)
+     */
+    public DalvInsn(Dop opcode, SourcePosition position,
+                    RegisterSpecList registers) {
+        if (opcode == null) {
+            throw new NullPointerException("opcode == null");
+        }
+
+        if (position == null) {
+            throw new NullPointerException("position == null");
+        }
+
+        if (registers == null) {
+            throw new NullPointerException("registers == null");
+        }
+
+        this.address = -1;
+        this.opcode = opcode;
+        this.position = position;
+        this.registers = registers;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final String toString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append(identifierString());
+        sb.append(' ');
+        sb.append(position);
+
+        sb.append(": ");
+        sb.append(opcode.getName());
+
+        boolean needComma = false;
+        if (registers.size() != 0) {
+            sb.append(registers.toHuman(" ", ", ", null));
+            needComma = true;
+        }
+
+        String extra = argString();
+        if (extra != null) {
+            if (needComma) {
+                sb.append(',');
+            }
+            sb.append(' ');
+            sb.append(extra);
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Gets whether the address of this instruction is known.
+     *
+     * @see #getAddress
+     * @see #setAddress
+     */
+    public final boolean hasAddress() {
+        return (address >= 0);
+    }
+
+    /**
+     * Gets the output address of this instruction, if it is known. This throws
+     * a {@code RuntimeException} if it has not yet been set.
+     *
+     * @see #setAddress
+     *
+     * @return {@code >= 0;} the output address
+     */
+    public final int getAddress() {
+        if (address < 0) {
+            throw new RuntimeException("address not yet known");
+        }
+
+        return address;
+    }
+
+    /**
+     * Gets the opcode.
+     *
+     * @return {@code non-null;} the opcode
+     */
+    public final Dop getOpcode() {
+        return opcode;
+    }
+
+    /**
+     * Gets the source position.
+     *
+     * @return {@code non-null;} the source position
+     */
+    public final SourcePosition getPosition() {
+        return position;
+    }
+
+    /**
+     * Gets the register list for this instruction.
+     *
+     * @return {@code non-null;} the registers
+     */
+    public final RegisterSpecList getRegisters() {
+        return registers;
+    }
+
+    /**
+     * Returns whether this instance's opcode uses a result register.
+     * This method is a convenient shorthand for
+     * {@code getOpcode().hasResult()}.
+     *
+     * @return {@code true} iff this opcode uses a result register
+     */
+    public final boolean hasResult() {
+        return opcode.hasResult();
+    }
+
+    /**
+     * Gets the minimum distinct registers required for this instruction.
+     * Uses the given BitSet to determine which registers require
+     * replacement, and ignores registers that are already compatible.
+     * This assumes that the result (if any) can share registers with the
+     * sources (if any), that each source register is unique, and that
+     * (to be explicit here) category-2 values take up two consecutive
+     * registers.
+     *
+     * @param compatRegs {@code non-null;} set of compatible registers
+     * @return {@code >= 0;} the minimum distinct register requirement
+     */
+    public final int getMinimumRegisterRequirement(BitSet compatRegs) {
+        boolean hasResult = hasResult();
+        int regSz = registers.size();
+        int resultRequirement = 0;
+        int sourceRequirement = 0;
+
+        if (hasResult && !compatRegs.get(0)) {
+            resultRequirement = registers.get(0).getCategory();
+        }
+
+        for (int i = hasResult ? 1 : 0; i < regSz; i++) {
+            if (!compatRegs.get(i)) {
+                sourceRequirement += registers.get(i).getCategory();
+            }
+        }
+
+        return Math.max(sourceRequirement, resultRequirement);
+    }
+
+    /**
+     * Gets the instruction that is equivalent to this one, except that
+     * it uses sequential registers starting at {@code 0} (storing
+     * the result, if any, in register {@code 0} as well).
+     *
+     * @return {@code non-null;} the replacement
+     */
+    public DalvInsn getLowRegVersion() {
+        RegisterSpecList regs =
+            registers.withExpandedRegisters(0, hasResult(), null);
+        return withRegisters(regs);
+    }
+
+    /**
+     * Gets the instruction prefix required, if any, to use in an expanded
+     * version of this instance. Will not generate moves for registers
+     * marked compatible to the format by the given BitSet.
+     *
+     * @see #expandedVersion
+     *
+     * @param compatRegs {@code non-null;} set of compatible registers
+     * @return {@code null-ok;} the prefix, if any
+     */
+    public DalvInsn expandedPrefix(BitSet compatRegs) {
+        RegisterSpecList regs = registers;
+        boolean firstBit = compatRegs.get(0);
+
+        if (hasResult()) compatRegs.set(0);
+
+        regs = regs.subset(compatRegs);
+
+        if (hasResult()) compatRegs.set(0, firstBit);
+
+        if (regs.size() == 0) return null;
+
+        return new HighRegisterPrefix(position, regs);
+    }
+
+    /**
+     * Gets the instruction suffix required, if any, to use in an expanded
+     * version of this instance. Will not generate a move for a register
+     * marked compatible to the format by the given BitSet.
+     *
+     * @see #expandedVersion
+     *
+     * @param compatRegs {@code non-null;} set of compatible registers
+     * @return {@code null-ok;} the suffix, if any
+     */
+    public DalvInsn expandedSuffix(BitSet compatRegs) {
+        if (hasResult() && !compatRegs.get(0)) {
+            RegisterSpec r = registers.get(0);
+            return makeMove(position, r, r.withReg(0));
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Gets the instruction that is equivalent to this one, except that
+     * it replaces incompatible registers with sequential registers
+     * starting at {@code 0} (storing the result, if any, in register
+     * {@code 0} as well). The sequence of instructions from
+     * {@link #expandedPrefix} and {@link #expandedSuffix} (if non-null)
+     * surrounding the result of a call to this method are the expanded
+     * transformation of this instance, and it is guaranteed that the
+     * number of low registers used will be the number returned by
+     * {@link #getMinimumRegisterRequirement}.
+     *
+     * @param compatRegs {@code non-null;} set of compatible registers
+     * @return {@code non-null;} the replacement
+     */
+    public DalvInsn expandedVersion(BitSet compatRegs) {
+        RegisterSpecList regs =
+            registers.withExpandedRegisters(0, hasResult(), compatRegs);
+        return withRegisters(regs);
+    }
+
+    /**
+     * Gets the short identifier for this instruction. This is its
+     * address, if assigned, or its identity hashcode if not.
+     *
+     * @return {@code non-null;} the identifier
+     */
+    public final String identifierString() {
+        if (address != -1) {
+            return String.format("%04x", address);
+        }
+
+        return Hex.u4(System.identityHashCode(this));
+    }
+
+    /**
+     * Returns the string form of this instance suitable for inclusion in
+     * a human-oriented listing dump. This method will return {@code null}
+     * if this instance should not appear in a listing.
+     *
+     * @param prefix {@code non-null;} prefix before the address; each follow-on
+     * line will be indented to match as well
+     * @param width {@code width >= 0;} the width of the output or {@code 0} for
+     * unlimited width
+     * @param noteIndices whether to include an explicit notation of
+     * constant pool indices
+     * @return {@code null-ok;} the string form or {@code null} if this
+     * instance should not appear in a listing
+     */
+    public final String listingString(String prefix, int width,
+            boolean noteIndices) {
+        String insnPerSe = listingString0(noteIndices);
+
+        if (insnPerSe == null) {
+            return null;
+        }
+
+        String addr = prefix + identifierString() + ": ";
+        int w1 = addr.length();
+        int w2 = (width == 0) ? insnPerSe.length() : (width - w1);
+
+        return TwoColumnOutput.toString(addr, w1, "", insnPerSe, w2);
+    }
+
+    /**
+     * Sets the output address.
+     *
+     * @param address {@code address >= 0;} the output address
+     */
+    public final void setAddress(int address) {
+        if (address < 0) {
+            throw new IllegalArgumentException("address < 0");
+        }
+
+        this.address = address;
+    }
+
+    /**
+     * Gets the address immediately after this instance. This is only
+     * calculable if this instance's address is known, and it is equal
+     * to the address plus the length of the instruction format of this
+     * instance's opcode.
+     *
+     * @return {@code >= 0;} the next address
+     */
+    public final int getNextAddress() {
+        return getAddress() + codeSize();
+    }
+
+    /**
+     * Returns an instance that is just like this one, except that the
+     * register list is mapped by using {@code mapper}.
+     *
+     * @param mapper {@code non-null;} used to map registers
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public DalvInsn withMapper(RegisterMapper mapper) {
+      return withRegisters(mapper.map(getRegisters()));
+    }
+
+    /**
+     * Gets the size of this instruction, in 16-bit code units.
+     *
+     * @return {@code >= 0;} the code size of this instruction
+     */
+    public abstract int codeSize();
+
+    /**
+     * Writes this instance to the given output. This method should
+     * never annotate the output.
+     *
+     * @param out {@code non-null;} where to write to
+     */
+    public abstract void writeTo(AnnotatedOutput out);
+
+    /**
+     * Returns an instance that is just like this one, except that its
+     * opcode is replaced by the one given, and its address is reset.
+     *
+     * @param opcode {@code non-null;} the new opcode
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public abstract DalvInsn withOpcode(Dop opcode);
+
+    /**
+     * Returns an instance that is just like this one, except that all
+     * register references have been offset by the given delta, and its
+     * address is reset.
+     *
+     * @param delta the amount to offset register references by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public abstract DalvInsn withRegisterOffset(int delta);
+
+    /**
+     * Returns an instance that is just like this one, except that the
+     * register list is replaced by the given one, and its address is
+     * reset.
+     *
+     * @param registers {@code non-null;} new register list
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public abstract DalvInsn withRegisters(RegisterSpecList registers);
+
+    /**
+     * Gets the string form for any arguments to this instance. Subclasses
+     * must override this.
+     *
+     * @return {@code null-ok;} the string version of any arguments or
+     * {@code null} if there are none
+     */
+    protected abstract String argString();
+
+    /**
+     * Helper for {@link #listingString}, which returns the string
+     * form of this instance suitable for inclusion in a
+     * human-oriented listing dump, not including the instruction
+     * address and without respect for any output formatting. This
+     * method should return {@code null} if this instance should
+     * not appear in a listing.
+     *
+     * @param noteIndices whether to include an explicit notation of
+     * constant pool indices
+     * @return {@code null-ok;} the listing string
+     */
+    protected abstract String listingString0(boolean noteIndices);
+
+    /**
+     * Helper which returns the string form of the associated constants
+     * for inclusion in a human oriented listing dump.
+     *
+     * This method is only implemented for instructions with one or more
+     * constants.
+     *
+     * @return the constant as a string.
+     */
+    public String cstString() {
+        throw new UnsupportedOperationException("Not supported.");
+    }
+
+    /**
+     * Helper which returns the comment form of the associated constants
+     * for inclusion in a human oriented listing dump.
+     *
+     * This method is only implemented for instructions with one or more
+     * constants.
+     *
+     * @return the comment as a string.
+     */
+    public String cstComment() {
+        throw new UnsupportedOperationException("Not supported.");
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/DalvInsnList.java b/dx/src/com/android/dx/dex/code/DalvInsnList.java
new file mode 100644
index 0000000..d8d4a22
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/DalvInsnList.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.io.Opcodes;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstBaseMethodRef;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.FixedSizeList;
+import com.android.dx.util.IndentingWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+
+/**
+ * List of {@link DalvInsn} instances.
+ */
+public final class DalvInsnList extends FixedSizeList {
+
+    /**
+     * The amount of register space, in register units, required for this
+     * code block. This may be greater than the largest observed register+
+     * category because the method this code block exists in may
+     * specify arguments that are unused by the method.
+     */
+    private final int regCount;
+
+    /**
+     * Constructs and returns an immutable instance whose elements are
+     * identical to the ones in the given list, in the same order.
+     *
+     * @param list {@code non-null;} the list to use for elements
+     * @param regCount count, in register-units, of the number of registers
+     * this code block requires.
+     * @return {@code non-null;} an appropriately-constructed instance of this
+     * class
+     */
+    public static DalvInsnList makeImmutable(ArrayList<DalvInsn> list,
+            int regCount) {
+        int size = list.size();
+        DalvInsnList result = new DalvInsnList(size, regCount);
+
+        for (int i = 0; i < size; i++) {
+            result.set(i, list.get(i));
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     * @param regCount count, in register-units, of the number of registers
+     * this code block requires.
+     */
+    public DalvInsnList(int size, int regCount) {
+        super(size);
+        this.regCount = regCount;
+    }
+
+    /**
+     * Gets the element at the given index. It is an error to call
+     * this with the index for an element which was never set; if you
+     * do that, this will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @return {@code non-null;} element at that index
+     */
+    public DalvInsn get(int n) {
+        return (DalvInsn) get0(n);
+    }
+
+    /**
+     * Sets the instruction at the given index.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param insn {@code non-null;} the instruction to set at {@code n}
+     */
+    public void set(int n, DalvInsn insn) {
+        set0(n, insn);
+    }
+
+    /**
+     * Gets the size of this instance, in 16-bit code units. This will only
+     * return a meaningful result if the instructions in this instance all
+     * have valid addresses.
+     *
+     * @return {@code >= 0;} the size
+     */
+    public int codeSize() {
+        int sz = size();
+
+        if (sz == 0) {
+            return 0;
+        }
+
+        DalvInsn last = get(sz - 1);
+        return last.getNextAddress();
+    }
+
+    /**
+     * Writes all the instructions in this instance to the given output
+     * destination.
+     *
+     * @param out {@code non-null;} where to write to
+     */
+    public void writeTo(AnnotatedOutput out) {
+        int startCursor = out.getCursor();
+        int sz = size();
+
+        if (out.annotates()) {
+            boolean verbose = out.isVerbose();
+
+            for (int i = 0; i < sz; i++) {
+                DalvInsn insn = (DalvInsn) get0(i);
+                int codeBytes = insn.codeSize() * 2;
+                String s;
+
+                if ((codeBytes != 0) || verbose) {
+                    s = insn.listingString("  ", out.getAnnotationWidth(),
+                            true);
+                } else {
+                    s = null;
+                }
+
+                if (s != null) {
+                    out.annotate(codeBytes, s);
+                } else if (codeBytes != 0) {
+                    out.annotate(codeBytes, "");
+                }
+            }
+        }
+
+        for (int i = 0; i < sz; i++) {
+            DalvInsn insn = (DalvInsn) get0(i);
+            try {
+                insn.writeTo(out);
+            } catch (RuntimeException ex) {
+                throw ExceptionWithContext.withContext(ex,
+                        "...while writing " + insn);
+            }
+        }
+
+        // Check the amount written.
+        int written = (out.getCursor() - startCursor) / 2;
+        if (written != codeSize()) {
+            throw new RuntimeException("write length mismatch; expected " +
+                    codeSize() + " but actually wrote " + written);
+        }
+    }
+
+    /**
+     * Gets the minimum required register count implied by this
+     * instance.  This includes any unused parameters that could
+     * potentially be at the top of the register space.
+     * @return {@code >= 0;} the required registers size
+     */
+    public int getRegistersSize() {
+        return regCount;
+    }
+
+    /**
+     * Gets the size of the outgoing arguments area required by this
+     * method. This is equal to the largest argument word count of any
+     * method referred to by this instance.
+     *
+     * @return {@code >= 0;} the required outgoing arguments size
+     */
+    public int getOutsSize() {
+        int sz = size();
+        int result = 0;
+
+        for (int i = 0; i < sz; i++) {
+            DalvInsn insn = (DalvInsn) get0(i);
+            int count = 0;
+
+            if (insn instanceof CstInsn) {
+                Constant cst = ((CstInsn) insn).getConstant();
+                if (cst instanceof CstBaseMethodRef) {
+                    CstBaseMethodRef methodRef = (CstBaseMethodRef) cst;
+                    boolean isStatic =
+                        (insn.getOpcode().getFamily() == Opcodes.INVOKE_STATIC);
+                    count = methodRef.getParameterWordCount(isStatic);
+                } else if (cst instanceof CstCallSiteRef) {
+                    CstCallSiteRef invokeDynamicRef = (CstCallSiteRef) cst;
+                    count = invokeDynamicRef.getPrototype().getParameterTypes().getWordCount();
+                }
+            } else if (insn instanceof MultiCstInsn) {
+                if (insn.getOpcode().getFamily() != Opcodes.INVOKE_POLYMORPHIC) {
+                    throw new RuntimeException("Expecting invoke-polymorphic");
+                }
+                MultiCstInsn mci = (MultiCstInsn) insn;
+                // Invoke-polymorphic has two constants: [0] method-ref and
+                // [1] call site prototype. The number of arguments is based
+                // on the call site prototype since these are the arguments
+                // presented. The method-ref is always MethodHandle.invoke(Object[])
+                // or MethodHandle.invokeExact(Object[]).
+                CstProtoRef proto = (CstProtoRef) mci.getConstant(1);
+                count = proto.getPrototype().getParameterTypes().getWordCount();
+                count = count + 1; // And one for receiver (method handle).
+            } else {
+                continue;
+            }
+
+            if (count > result) {
+                result = count;
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Does a human-friendly dump of this instance.
+     *
+     * @param out {@code non-null;} where to dump
+     * @param prefix {@code non-null;} prefix to attach to each line of output
+     * @param verbose whether to be verbose; verbose output includes
+     * lines for zero-size instructions and explicit constant pool indices
+     */
+    public void debugPrint(Writer out, String prefix, boolean verbose) {
+        IndentingWriter iw = new IndentingWriter(out, 0, prefix);
+        int sz = size();
+
+        try {
+            for (int i = 0; i < sz; i++) {
+                DalvInsn insn = (DalvInsn) get0(i);
+                String s;
+
+                if ((insn.codeSize() != 0) || verbose) {
+                    s = insn.listingString("", 0, verbose);
+                } else {
+                    s = null;
+                }
+
+                if (s != null) {
+                    iw.write(s);
+                }
+            }
+
+            iw.flush();
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    /**
+     * Does a human-friendly dump of this instance.
+     *
+     * @param out {@code non-null;} where to dump
+     * @param prefix {@code non-null;} prefix to attach to each line of output
+     * @param verbose whether to be verbose; verbose output includes
+     * lines for zero-size instructions
+     */
+    public void debugPrint(OutputStream out, String prefix, boolean verbose) {
+        Writer w = new OutputStreamWriter(out);
+        debugPrint(w, prefix, verbose);
+
+        try {
+            w.flush();
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/Dop.java b/dx/src/com/android/dx/dex/code/Dop.java
new file mode 100644
index 0000000..51d1b51
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/Dop.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.io.OpcodeInfo;
+import com.android.dx.io.Opcodes;
+
+/**
+ * Representation of an opcode.
+ */
+public final class Dop {
+    /** {@code Opcodes.isValid();} the opcode value itself */
+    private final int opcode;
+
+    /** {@code Opcodes.isValid();} the opcode family */
+    private final int family;
+
+    /**
+     * {@code Opcodes.isValid();} what opcode (by number) to try next
+     * when attempting to match an opcode to particular arguments;
+     * {@code Opcodes.NO_NEXT} to indicate that this is the last
+     * opcode to try in a particular chain
+     */
+    private final int nextOpcode;
+
+    /** {@code non-null;} the instruction format */
+    private final InsnFormat format;
+
+    /** whether this opcode uses a result register */
+    private final boolean hasResult;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code Opcodes.isValid();} the opcode value
+     * itself
+     * @param family {@code Opcodes.isValid();} the opcode family
+     * @param nextOpcode {@code Opcodes.isValid();} what opcode (by
+     * number) to try next when attempting to match an opcode to
+     * particular arguments; {@code Opcodes.NO_NEXT} to indicate that
+     * this is the last opcode to try in a particular chain
+     * @param format {@code non-null;} the instruction format
+     * @param hasResult whether the opcode has a result register; if so it
+     * is always the first register
+     */
+    public Dop(int opcode, int family, int nextOpcode, InsnFormat format,
+            boolean hasResult) {
+        if (!Opcodes.isValidShape(opcode)) {
+            throw new IllegalArgumentException("bogus opcode");
+        }
+
+        if (!Opcodes.isValidShape(family)) {
+            throw new IllegalArgumentException("bogus family");
+        }
+
+        if (!Opcodes.isValidShape(nextOpcode)) {
+            throw new IllegalArgumentException("bogus nextOpcode");
+        }
+
+        if (format == null) {
+            throw new NullPointerException("format == null");
+        }
+
+        this.opcode = opcode;
+        this.family = family;
+        this.nextOpcode = nextOpcode;
+        this.format = format;
+        this.hasResult = hasResult;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getName();
+    }
+
+    /**
+     * Gets the opcode value.
+     *
+     * @return {@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the opcode value
+     */
+    public int getOpcode() {
+        return opcode;
+    }
+
+    /**
+     * Gets the opcode family. The opcode family is the unmarked (no
+     * "/...") opcode that has equivalent semantics to this one.
+     *
+     * @return {@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the opcode family
+     */
+    public int getFamily() {
+        return family;
+    }
+
+    /**
+     * Gets the instruction format.
+     *
+     * @return {@code non-null;} the instruction format
+     */
+    public InsnFormat getFormat() {
+        return format;
+    }
+
+    /**
+     * Returns whether this opcode uses a result register.
+     *
+     * @return {@code true} iff this opcode uses a result register
+     */
+    public boolean hasResult() {
+        return hasResult;
+    }
+
+    /**
+     * Gets the opcode name.
+     *
+     * @return {@code non-null;} the opcode name
+     */
+    public String getName() {
+        return OpcodeInfo.getName(opcode);
+    }
+
+    /**
+     * Gets the opcode value to try next when attempting to match an
+     * opcode to particular arguments. This returns {@code
+     * Opcodes.NO_NEXT} to indicate that this is the last opcode to
+     * try in a particular chain.
+     *
+     * @return {@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the opcode value
+     */
+    public int getNextOpcode() {
+        return nextOpcode;
+    }
+
+    /**
+     * Gets the opcode for the opposite test of this instance. This is only
+     * valid for opcodes which are in fact tests.
+     *
+     * @return {@code non-null;} the opposite test
+     */
+    public Dop getOppositeTest() {
+        switch (opcode) {
+            case Opcodes.IF_EQ:  return Dops.IF_NE;
+            case Opcodes.IF_NE:  return Dops.IF_EQ;
+            case Opcodes.IF_LT:  return Dops.IF_GE;
+            case Opcodes.IF_GE:  return Dops.IF_LT;
+            case Opcodes.IF_GT:  return Dops.IF_LE;
+            case Opcodes.IF_LE:  return Dops.IF_GT;
+            case Opcodes.IF_EQZ: return Dops.IF_NEZ;
+            case Opcodes.IF_NEZ: return Dops.IF_EQZ;
+            case Opcodes.IF_LTZ: return Dops.IF_GEZ;
+            case Opcodes.IF_GEZ: return Dops.IF_LTZ;
+            case Opcodes.IF_GTZ: return Dops.IF_LEZ;
+            case Opcodes.IF_LEZ: return Dops.IF_GTZ;
+        }
+
+        throw new IllegalArgumentException("bogus opcode: " + this);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/Dops.java b/dx/src/com/android/dx/dex/code/Dops.java
new file mode 100644
index 0000000..743e544
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/Dops.java
@@ -0,0 +1,1261 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.dex.DexOptions;
+import com.android.dx.dex.code.form.Form10t;
+import com.android.dx.dex.code.form.Form10x;
+import com.android.dx.dex.code.form.Form11n;
+import com.android.dx.dex.code.form.Form11x;
+import com.android.dx.dex.code.form.Form12x;
+import com.android.dx.dex.code.form.Form20t;
+import com.android.dx.dex.code.form.Form21c;
+import com.android.dx.dex.code.form.Form21h;
+import com.android.dx.dex.code.form.Form21s;
+import com.android.dx.dex.code.form.Form21t;
+import com.android.dx.dex.code.form.Form22b;
+import com.android.dx.dex.code.form.Form22c;
+import com.android.dx.dex.code.form.Form22s;
+import com.android.dx.dex.code.form.Form22t;
+import com.android.dx.dex.code.form.Form22x;
+import com.android.dx.dex.code.form.Form23x;
+import com.android.dx.dex.code.form.Form30t;
+import com.android.dx.dex.code.form.Form31c;
+import com.android.dx.dex.code.form.Form31i;
+import com.android.dx.dex.code.form.Form31t;
+import com.android.dx.dex.code.form.Form32x;
+import com.android.dx.dex.code.form.Form35c;
+import com.android.dx.dex.code.form.Form3rc;
+import com.android.dx.dex.code.form.Form45cc;
+import com.android.dx.dex.code.form.Form4rcc;
+import com.android.dx.dex.code.form.Form51l;
+import com.android.dx.dex.code.form.SpecialFormat;
+import com.android.dx.io.Opcodes;
+
+/**
+ * Standard instances of {@link Dop} and utility methods for getting
+ * them.
+ */
+public final class Dops {
+    /** {@code non-null;} array containing all the standard instances */
+    private static final Dop[] DOPS;
+
+    /**
+     * pseudo-opcode used for nonstandard formatted "instructions"
+     * (which are mostly not actually instructions, though they do
+     * appear in instruction lists). TODO: Retire the usage of this
+     * constant.
+     */
+    public static final Dop SPECIAL_FORMAT =
+        new Dop(Opcodes.SPECIAL_FORMAT, Opcodes.SPECIAL_FORMAT,
+                Opcodes.NO_NEXT, SpecialFormat.THE_ONE, false);
+
+    // BEGIN(dops); GENERATED AUTOMATICALLY BY opcode-gen
+    public static final Dop NOP =
+        new Dop(Opcodes.NOP, Opcodes.NOP,
+            Opcodes.NO_NEXT, Form10x.THE_ONE, false);
+
+    public static final Dop MOVE =
+        new Dop(Opcodes.MOVE, Opcodes.MOVE,
+            Opcodes.MOVE_FROM16, Form12x.THE_ONE, true);
+
+    public static final Dop MOVE_FROM16 =
+        new Dop(Opcodes.MOVE_FROM16, Opcodes.MOVE,
+            Opcodes.MOVE_16, Form22x.THE_ONE, true);
+
+    public static final Dop MOVE_16 =
+        new Dop(Opcodes.MOVE_16, Opcodes.MOVE,
+            Opcodes.NO_NEXT, Form32x.THE_ONE, true);
+
+    public static final Dop MOVE_WIDE =
+        new Dop(Opcodes.MOVE_WIDE, Opcodes.MOVE_WIDE,
+            Opcodes.MOVE_WIDE_FROM16, Form12x.THE_ONE, true);
+
+    public static final Dop MOVE_WIDE_FROM16 =
+        new Dop(Opcodes.MOVE_WIDE_FROM16, Opcodes.MOVE_WIDE,
+            Opcodes.MOVE_WIDE_16, Form22x.THE_ONE, true);
+
+    public static final Dop MOVE_WIDE_16 =
+        new Dop(Opcodes.MOVE_WIDE_16, Opcodes.MOVE_WIDE,
+            Opcodes.NO_NEXT, Form32x.THE_ONE, true);
+
+    public static final Dop MOVE_OBJECT =
+        new Dop(Opcodes.MOVE_OBJECT, Opcodes.MOVE_OBJECT,
+            Opcodes.MOVE_OBJECT_FROM16, Form12x.THE_ONE, true);
+
+    public static final Dop MOVE_OBJECT_FROM16 =
+        new Dop(Opcodes.MOVE_OBJECT_FROM16, Opcodes.MOVE_OBJECT,
+            Opcodes.MOVE_OBJECT_16, Form22x.THE_ONE, true);
+
+    public static final Dop MOVE_OBJECT_16 =
+        new Dop(Opcodes.MOVE_OBJECT_16, Opcodes.MOVE_OBJECT,
+            Opcodes.NO_NEXT, Form32x.THE_ONE, true);
+
+    public static final Dop MOVE_RESULT =
+        new Dop(Opcodes.MOVE_RESULT, Opcodes.MOVE_RESULT,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, true);
+
+    public static final Dop MOVE_RESULT_WIDE =
+        new Dop(Opcodes.MOVE_RESULT_WIDE, Opcodes.MOVE_RESULT_WIDE,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, true);
+
+    public static final Dop MOVE_RESULT_OBJECT =
+        new Dop(Opcodes.MOVE_RESULT_OBJECT, Opcodes.MOVE_RESULT_OBJECT,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, true);
+
+    public static final Dop MOVE_EXCEPTION =
+        new Dop(Opcodes.MOVE_EXCEPTION, Opcodes.MOVE_EXCEPTION,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, true);
+
+    public static final Dop RETURN_VOID =
+        new Dop(Opcodes.RETURN_VOID, Opcodes.RETURN_VOID,
+            Opcodes.NO_NEXT, Form10x.THE_ONE, false);
+
+    public static final Dop RETURN =
+        new Dop(Opcodes.RETURN, Opcodes.RETURN,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, false);
+
+    public static final Dop RETURN_WIDE =
+        new Dop(Opcodes.RETURN_WIDE, Opcodes.RETURN_WIDE,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, false);
+
+    public static final Dop RETURN_OBJECT =
+        new Dop(Opcodes.RETURN_OBJECT, Opcodes.RETURN_OBJECT,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, false);
+
+    public static final Dop CONST_4 =
+        new Dop(Opcodes.CONST_4, Opcodes.CONST,
+            Opcodes.CONST_16, Form11n.THE_ONE, true);
+
+    public static final Dop CONST_16 =
+        new Dop(Opcodes.CONST_16, Opcodes.CONST,
+            Opcodes.CONST_HIGH16, Form21s.THE_ONE, true);
+
+    public static final Dop CONST =
+        new Dop(Opcodes.CONST, Opcodes.CONST,
+            Opcodes.NO_NEXT, Form31i.THE_ONE, true);
+
+    public static final Dop CONST_HIGH16 =
+        new Dop(Opcodes.CONST_HIGH16, Opcodes.CONST,
+            Opcodes.CONST, Form21h.THE_ONE, true);
+
+    public static final Dop CONST_WIDE_16 =
+        new Dop(Opcodes.CONST_WIDE_16, Opcodes.CONST_WIDE,
+            Opcodes.CONST_WIDE_HIGH16, Form21s.THE_ONE, true);
+
+    public static final Dop CONST_WIDE_32 =
+        new Dop(Opcodes.CONST_WIDE_32, Opcodes.CONST_WIDE,
+            Opcodes.CONST_WIDE, Form31i.THE_ONE, true);
+
+    public static final Dop CONST_WIDE =
+        new Dop(Opcodes.CONST_WIDE, Opcodes.CONST_WIDE,
+            Opcodes.NO_NEXT, Form51l.THE_ONE, true);
+
+    public static final Dop CONST_WIDE_HIGH16 =
+        new Dop(Opcodes.CONST_WIDE_HIGH16, Opcodes.CONST_WIDE,
+            Opcodes.CONST_WIDE_32, Form21h.THE_ONE, true);
+
+    public static final Dop CONST_STRING =
+        new Dop(Opcodes.CONST_STRING, Opcodes.CONST_STRING,
+            Opcodes.CONST_STRING_JUMBO, Form21c.THE_ONE, true);
+
+    public static final Dop CONST_STRING_JUMBO =
+        new Dop(Opcodes.CONST_STRING_JUMBO, Opcodes.CONST_STRING,
+            Opcodes.NO_NEXT, Form31c.THE_ONE, true);
+
+    public static final Dop CONST_CLASS =
+        new Dop(Opcodes.CONST_CLASS, Opcodes.CONST_CLASS,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop MONITOR_ENTER =
+        new Dop(Opcodes.MONITOR_ENTER, Opcodes.MONITOR_ENTER,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, false);
+
+    public static final Dop MONITOR_EXIT =
+        new Dop(Opcodes.MONITOR_EXIT, Opcodes.MONITOR_EXIT,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, false);
+
+    public static final Dop CHECK_CAST =
+        new Dop(Opcodes.CHECK_CAST, Opcodes.CHECK_CAST,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop INSTANCE_OF =
+        new Dop(Opcodes.INSTANCE_OF, Opcodes.INSTANCE_OF,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop ARRAY_LENGTH =
+        new Dop(Opcodes.ARRAY_LENGTH, Opcodes.ARRAY_LENGTH,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop NEW_INSTANCE =
+        new Dop(Opcodes.NEW_INSTANCE, Opcodes.NEW_INSTANCE,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop NEW_ARRAY =
+        new Dop(Opcodes.NEW_ARRAY, Opcodes.NEW_ARRAY,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop FILLED_NEW_ARRAY =
+        new Dop(Opcodes.FILLED_NEW_ARRAY, Opcodes.FILLED_NEW_ARRAY,
+            Opcodes.FILLED_NEW_ARRAY_RANGE, Form35c.THE_ONE, false);
+
+    public static final Dop FILLED_NEW_ARRAY_RANGE =
+        new Dop(Opcodes.FILLED_NEW_ARRAY_RANGE, Opcodes.FILLED_NEW_ARRAY,
+            Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
+
+    public static final Dop FILL_ARRAY_DATA =
+        new Dop(Opcodes.FILL_ARRAY_DATA, Opcodes.FILL_ARRAY_DATA,
+            Opcodes.NO_NEXT, Form31t.THE_ONE, false);
+
+    public static final Dop THROW =
+        new Dop(Opcodes.THROW, Opcodes.THROW,
+            Opcodes.NO_NEXT, Form11x.THE_ONE, false);
+
+    public static final Dop GOTO =
+        new Dop(Opcodes.GOTO, Opcodes.GOTO,
+            Opcodes.GOTO_16, Form10t.THE_ONE, false);
+
+    public static final Dop GOTO_16 =
+        new Dop(Opcodes.GOTO_16, Opcodes.GOTO,
+            Opcodes.GOTO_32, Form20t.THE_ONE, false);
+
+    public static final Dop GOTO_32 =
+        new Dop(Opcodes.GOTO_32, Opcodes.GOTO,
+            Opcodes.NO_NEXT, Form30t.THE_ONE, false);
+
+    public static final Dop PACKED_SWITCH =
+        new Dop(Opcodes.PACKED_SWITCH, Opcodes.PACKED_SWITCH,
+            Opcodes.NO_NEXT, Form31t.THE_ONE, false);
+
+    public static final Dop SPARSE_SWITCH =
+        new Dop(Opcodes.SPARSE_SWITCH, Opcodes.SPARSE_SWITCH,
+            Opcodes.NO_NEXT, Form31t.THE_ONE, false);
+
+    public static final Dop CMPL_FLOAT =
+        new Dop(Opcodes.CMPL_FLOAT, Opcodes.CMPL_FLOAT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop CMPG_FLOAT =
+        new Dop(Opcodes.CMPG_FLOAT, Opcodes.CMPG_FLOAT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop CMPL_DOUBLE =
+        new Dop(Opcodes.CMPL_DOUBLE, Opcodes.CMPL_DOUBLE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop CMPG_DOUBLE =
+        new Dop(Opcodes.CMPG_DOUBLE, Opcodes.CMPG_DOUBLE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop CMP_LONG =
+        new Dop(Opcodes.CMP_LONG, Opcodes.CMP_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop IF_EQ =
+        new Dop(Opcodes.IF_EQ, Opcodes.IF_EQ,
+            Opcodes.NO_NEXT, Form22t.THE_ONE, false);
+
+    public static final Dop IF_NE =
+        new Dop(Opcodes.IF_NE, Opcodes.IF_NE,
+            Opcodes.NO_NEXT, Form22t.THE_ONE, false);
+
+    public static final Dop IF_LT =
+        new Dop(Opcodes.IF_LT, Opcodes.IF_LT,
+            Opcodes.NO_NEXT, Form22t.THE_ONE, false);
+
+    public static final Dop IF_GE =
+        new Dop(Opcodes.IF_GE, Opcodes.IF_GE,
+            Opcodes.NO_NEXT, Form22t.THE_ONE, false);
+
+    public static final Dop IF_GT =
+        new Dop(Opcodes.IF_GT, Opcodes.IF_GT,
+            Opcodes.NO_NEXT, Form22t.THE_ONE, false);
+
+    public static final Dop IF_LE =
+        new Dop(Opcodes.IF_LE, Opcodes.IF_LE,
+            Opcodes.NO_NEXT, Form22t.THE_ONE, false);
+
+    public static final Dop IF_EQZ =
+        new Dop(Opcodes.IF_EQZ, Opcodes.IF_EQZ,
+            Opcodes.NO_NEXT, Form21t.THE_ONE, false);
+
+    public static final Dop IF_NEZ =
+        new Dop(Opcodes.IF_NEZ, Opcodes.IF_NEZ,
+            Opcodes.NO_NEXT, Form21t.THE_ONE, false);
+
+    public static final Dop IF_LTZ =
+        new Dop(Opcodes.IF_LTZ, Opcodes.IF_LTZ,
+            Opcodes.NO_NEXT, Form21t.THE_ONE, false);
+
+    public static final Dop IF_GEZ =
+        new Dop(Opcodes.IF_GEZ, Opcodes.IF_GEZ,
+            Opcodes.NO_NEXT, Form21t.THE_ONE, false);
+
+    public static final Dop IF_GTZ =
+        new Dop(Opcodes.IF_GTZ, Opcodes.IF_GTZ,
+            Opcodes.NO_NEXT, Form21t.THE_ONE, false);
+
+    public static final Dop IF_LEZ =
+        new Dop(Opcodes.IF_LEZ, Opcodes.IF_LEZ,
+            Opcodes.NO_NEXT, Form21t.THE_ONE, false);
+
+    public static final Dop AGET =
+        new Dop(Opcodes.AGET, Opcodes.AGET,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop AGET_WIDE =
+        new Dop(Opcodes.AGET_WIDE, Opcodes.AGET_WIDE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop AGET_OBJECT =
+        new Dop(Opcodes.AGET_OBJECT, Opcodes.AGET_OBJECT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop AGET_BOOLEAN =
+        new Dop(Opcodes.AGET_BOOLEAN, Opcodes.AGET_BOOLEAN,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop AGET_BYTE =
+        new Dop(Opcodes.AGET_BYTE, Opcodes.AGET_BYTE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop AGET_CHAR =
+        new Dop(Opcodes.AGET_CHAR, Opcodes.AGET_CHAR,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop AGET_SHORT =
+        new Dop(Opcodes.AGET_SHORT, Opcodes.AGET_SHORT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop APUT =
+        new Dop(Opcodes.APUT, Opcodes.APUT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, false);
+
+    public static final Dop APUT_WIDE =
+        new Dop(Opcodes.APUT_WIDE, Opcodes.APUT_WIDE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, false);
+
+    public static final Dop APUT_OBJECT =
+        new Dop(Opcodes.APUT_OBJECT, Opcodes.APUT_OBJECT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, false);
+
+    public static final Dop APUT_BOOLEAN =
+        new Dop(Opcodes.APUT_BOOLEAN, Opcodes.APUT_BOOLEAN,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, false);
+
+    public static final Dop APUT_BYTE =
+        new Dop(Opcodes.APUT_BYTE, Opcodes.APUT_BYTE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, false);
+
+    public static final Dop APUT_CHAR =
+        new Dop(Opcodes.APUT_CHAR, Opcodes.APUT_CHAR,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, false);
+
+    public static final Dop APUT_SHORT =
+        new Dop(Opcodes.APUT_SHORT, Opcodes.APUT_SHORT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, false);
+
+    public static final Dop IGET =
+        new Dop(Opcodes.IGET, Opcodes.IGET,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop IGET_WIDE =
+        new Dop(Opcodes.IGET_WIDE, Opcodes.IGET_WIDE,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop IGET_OBJECT =
+        new Dop(Opcodes.IGET_OBJECT, Opcodes.IGET_OBJECT,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop IGET_BOOLEAN =
+        new Dop(Opcodes.IGET_BOOLEAN, Opcodes.IGET_BOOLEAN,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop IGET_BYTE =
+        new Dop(Opcodes.IGET_BYTE, Opcodes.IGET_BYTE,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop IGET_CHAR =
+        new Dop(Opcodes.IGET_CHAR, Opcodes.IGET_CHAR,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop IGET_SHORT =
+        new Dop(Opcodes.IGET_SHORT, Opcodes.IGET_SHORT,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, true);
+
+    public static final Dop IPUT =
+        new Dop(Opcodes.IPUT, Opcodes.IPUT,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, false);
+
+    public static final Dop IPUT_WIDE =
+        new Dop(Opcodes.IPUT_WIDE, Opcodes.IPUT_WIDE,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, false);
+
+    public static final Dop IPUT_OBJECT =
+        new Dop(Opcodes.IPUT_OBJECT, Opcodes.IPUT_OBJECT,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, false);
+
+    public static final Dop IPUT_BOOLEAN =
+        new Dop(Opcodes.IPUT_BOOLEAN, Opcodes.IPUT_BOOLEAN,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, false);
+
+    public static final Dop IPUT_BYTE =
+        new Dop(Opcodes.IPUT_BYTE, Opcodes.IPUT_BYTE,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, false);
+
+    public static final Dop IPUT_CHAR =
+        new Dop(Opcodes.IPUT_CHAR, Opcodes.IPUT_CHAR,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, false);
+
+    public static final Dop IPUT_SHORT =
+        new Dop(Opcodes.IPUT_SHORT, Opcodes.IPUT_SHORT,
+            Opcodes.NO_NEXT, Form22c.THE_ONE, false);
+
+    public static final Dop SGET =
+        new Dop(Opcodes.SGET, Opcodes.SGET,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop SGET_WIDE =
+        new Dop(Opcodes.SGET_WIDE, Opcodes.SGET_WIDE,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop SGET_OBJECT =
+        new Dop(Opcodes.SGET_OBJECT, Opcodes.SGET_OBJECT,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop SGET_BOOLEAN =
+        new Dop(Opcodes.SGET_BOOLEAN, Opcodes.SGET_BOOLEAN,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop SGET_BYTE =
+        new Dop(Opcodes.SGET_BYTE, Opcodes.SGET_BYTE,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop SGET_CHAR =
+        new Dop(Opcodes.SGET_CHAR, Opcodes.SGET_CHAR,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop SGET_SHORT =
+        new Dop(Opcodes.SGET_SHORT, Opcodes.SGET_SHORT,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop SPUT =
+        new Dop(Opcodes.SPUT, Opcodes.SPUT,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, false);
+
+    public static final Dop SPUT_WIDE =
+        new Dop(Opcodes.SPUT_WIDE, Opcodes.SPUT_WIDE,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, false);
+
+    public static final Dop SPUT_OBJECT =
+        new Dop(Opcodes.SPUT_OBJECT, Opcodes.SPUT_OBJECT,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, false);
+
+    public static final Dop SPUT_BOOLEAN =
+        new Dop(Opcodes.SPUT_BOOLEAN, Opcodes.SPUT_BOOLEAN,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, false);
+
+    public static final Dop SPUT_BYTE =
+        new Dop(Opcodes.SPUT_BYTE, Opcodes.SPUT_BYTE,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, false);
+
+    public static final Dop SPUT_CHAR =
+        new Dop(Opcodes.SPUT_CHAR, Opcodes.SPUT_CHAR,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, false);
+
+    public static final Dop SPUT_SHORT =
+        new Dop(Opcodes.SPUT_SHORT, Opcodes.SPUT_SHORT,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, false);
+
+    public static final Dop INVOKE_VIRTUAL =
+        new Dop(Opcodes.INVOKE_VIRTUAL, Opcodes.INVOKE_VIRTUAL,
+            Opcodes.INVOKE_VIRTUAL_RANGE, Form35c.THE_ONE, false);
+
+    public static final Dop INVOKE_SUPER =
+        new Dop(Opcodes.INVOKE_SUPER, Opcodes.INVOKE_SUPER,
+            Opcodes.INVOKE_SUPER_RANGE, Form35c.THE_ONE, false);
+
+    public static final Dop INVOKE_DIRECT =
+        new Dop(Opcodes.INVOKE_DIRECT, Opcodes.INVOKE_DIRECT,
+            Opcodes.INVOKE_DIRECT_RANGE, Form35c.THE_ONE, false);
+
+    public static final Dop INVOKE_STATIC =
+        new Dop(Opcodes.INVOKE_STATIC, Opcodes.INVOKE_STATIC,
+            Opcodes.INVOKE_STATIC_RANGE, Form35c.THE_ONE, false);
+
+    public static final Dop INVOKE_INTERFACE =
+        new Dop(Opcodes.INVOKE_INTERFACE, Opcodes.INVOKE_INTERFACE,
+            Opcodes.INVOKE_INTERFACE_RANGE, Form35c.THE_ONE, false);
+
+    public static final Dop INVOKE_VIRTUAL_RANGE =
+        new Dop(Opcodes.INVOKE_VIRTUAL_RANGE, Opcodes.INVOKE_VIRTUAL,
+            Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
+
+    public static final Dop INVOKE_SUPER_RANGE =
+        new Dop(Opcodes.INVOKE_SUPER_RANGE, Opcodes.INVOKE_SUPER,
+            Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
+
+    public static final Dop INVOKE_DIRECT_RANGE =
+        new Dop(Opcodes.INVOKE_DIRECT_RANGE, Opcodes.INVOKE_DIRECT,
+            Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
+
+    public static final Dop INVOKE_STATIC_RANGE =
+        new Dop(Opcodes.INVOKE_STATIC_RANGE, Opcodes.INVOKE_STATIC,
+            Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
+
+    public static final Dop INVOKE_INTERFACE_RANGE =
+        new Dop(Opcodes.INVOKE_INTERFACE_RANGE, Opcodes.INVOKE_INTERFACE,
+            Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
+
+    public static final Dop NEG_INT =
+        new Dop(Opcodes.NEG_INT, Opcodes.NEG_INT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop NOT_INT =
+        new Dop(Opcodes.NOT_INT, Opcodes.NOT_INT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop NEG_LONG =
+        new Dop(Opcodes.NEG_LONG, Opcodes.NEG_LONG,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop NOT_LONG =
+        new Dop(Opcodes.NOT_LONG, Opcodes.NOT_LONG,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop NEG_FLOAT =
+        new Dop(Opcodes.NEG_FLOAT, Opcodes.NEG_FLOAT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop NEG_DOUBLE =
+        new Dop(Opcodes.NEG_DOUBLE, Opcodes.NEG_DOUBLE,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop INT_TO_LONG =
+        new Dop(Opcodes.INT_TO_LONG, Opcodes.INT_TO_LONG,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop INT_TO_FLOAT =
+        new Dop(Opcodes.INT_TO_FLOAT, Opcodes.INT_TO_FLOAT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop INT_TO_DOUBLE =
+        new Dop(Opcodes.INT_TO_DOUBLE, Opcodes.INT_TO_DOUBLE,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop LONG_TO_INT =
+        new Dop(Opcodes.LONG_TO_INT, Opcodes.LONG_TO_INT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop LONG_TO_FLOAT =
+        new Dop(Opcodes.LONG_TO_FLOAT, Opcodes.LONG_TO_FLOAT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop LONG_TO_DOUBLE =
+        new Dop(Opcodes.LONG_TO_DOUBLE, Opcodes.LONG_TO_DOUBLE,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop FLOAT_TO_INT =
+        new Dop(Opcodes.FLOAT_TO_INT, Opcodes.FLOAT_TO_INT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop FLOAT_TO_LONG =
+        new Dop(Opcodes.FLOAT_TO_LONG, Opcodes.FLOAT_TO_LONG,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop FLOAT_TO_DOUBLE =
+        new Dop(Opcodes.FLOAT_TO_DOUBLE, Opcodes.FLOAT_TO_DOUBLE,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop DOUBLE_TO_INT =
+        new Dop(Opcodes.DOUBLE_TO_INT, Opcodes.DOUBLE_TO_INT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop DOUBLE_TO_LONG =
+        new Dop(Opcodes.DOUBLE_TO_LONG, Opcodes.DOUBLE_TO_LONG,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop DOUBLE_TO_FLOAT =
+        new Dop(Opcodes.DOUBLE_TO_FLOAT, Opcodes.DOUBLE_TO_FLOAT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop INT_TO_BYTE =
+        new Dop(Opcodes.INT_TO_BYTE, Opcodes.INT_TO_BYTE,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop INT_TO_CHAR =
+        new Dop(Opcodes.INT_TO_CHAR, Opcodes.INT_TO_CHAR,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop INT_TO_SHORT =
+        new Dop(Opcodes.INT_TO_SHORT, Opcodes.INT_TO_SHORT,
+            Opcodes.NO_NEXT, Form12x.THE_ONE, true);
+
+    public static final Dop ADD_INT =
+        new Dop(Opcodes.ADD_INT, Opcodes.ADD_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop SUB_INT =
+        new Dop(Opcodes.SUB_INT, Opcodes.SUB_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop MUL_INT =
+        new Dop(Opcodes.MUL_INT, Opcodes.MUL_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop DIV_INT =
+        new Dop(Opcodes.DIV_INT, Opcodes.DIV_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop REM_INT =
+        new Dop(Opcodes.REM_INT, Opcodes.REM_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop AND_INT =
+        new Dop(Opcodes.AND_INT, Opcodes.AND_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop OR_INT =
+        new Dop(Opcodes.OR_INT, Opcodes.OR_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop XOR_INT =
+        new Dop(Opcodes.XOR_INT, Opcodes.XOR_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop SHL_INT =
+        new Dop(Opcodes.SHL_INT, Opcodes.SHL_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop SHR_INT =
+        new Dop(Opcodes.SHR_INT, Opcodes.SHR_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop USHR_INT =
+        new Dop(Opcodes.USHR_INT, Opcodes.USHR_INT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop ADD_LONG =
+        new Dop(Opcodes.ADD_LONG, Opcodes.ADD_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop SUB_LONG =
+        new Dop(Opcodes.SUB_LONG, Opcodes.SUB_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop MUL_LONG =
+        new Dop(Opcodes.MUL_LONG, Opcodes.MUL_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop DIV_LONG =
+        new Dop(Opcodes.DIV_LONG, Opcodes.DIV_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop REM_LONG =
+        new Dop(Opcodes.REM_LONG, Opcodes.REM_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop AND_LONG =
+        new Dop(Opcodes.AND_LONG, Opcodes.AND_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop OR_LONG =
+        new Dop(Opcodes.OR_LONG, Opcodes.OR_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop XOR_LONG =
+        new Dop(Opcodes.XOR_LONG, Opcodes.XOR_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop SHL_LONG =
+        new Dop(Opcodes.SHL_LONG, Opcodes.SHL_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop SHR_LONG =
+        new Dop(Opcodes.SHR_LONG, Opcodes.SHR_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop USHR_LONG =
+        new Dop(Opcodes.USHR_LONG, Opcodes.USHR_LONG,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop ADD_FLOAT =
+        new Dop(Opcodes.ADD_FLOAT, Opcodes.ADD_FLOAT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop SUB_FLOAT =
+        new Dop(Opcodes.SUB_FLOAT, Opcodes.SUB_FLOAT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop MUL_FLOAT =
+        new Dop(Opcodes.MUL_FLOAT, Opcodes.MUL_FLOAT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop DIV_FLOAT =
+        new Dop(Opcodes.DIV_FLOAT, Opcodes.DIV_FLOAT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop REM_FLOAT =
+        new Dop(Opcodes.REM_FLOAT, Opcodes.REM_FLOAT,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop ADD_DOUBLE =
+        new Dop(Opcodes.ADD_DOUBLE, Opcodes.ADD_DOUBLE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop SUB_DOUBLE =
+        new Dop(Opcodes.SUB_DOUBLE, Opcodes.SUB_DOUBLE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop MUL_DOUBLE =
+        new Dop(Opcodes.MUL_DOUBLE, Opcodes.MUL_DOUBLE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop DIV_DOUBLE =
+        new Dop(Opcodes.DIV_DOUBLE, Opcodes.DIV_DOUBLE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop REM_DOUBLE =
+        new Dop(Opcodes.REM_DOUBLE, Opcodes.REM_DOUBLE,
+            Opcodes.NO_NEXT, Form23x.THE_ONE, true);
+
+    public static final Dop ADD_INT_2ADDR =
+        new Dop(Opcodes.ADD_INT_2ADDR, Opcodes.ADD_INT,
+            Opcodes.ADD_INT, Form12x.THE_ONE, true);
+
+    public static final Dop SUB_INT_2ADDR =
+        new Dop(Opcodes.SUB_INT_2ADDR, Opcodes.SUB_INT,
+            Opcodes.SUB_INT, Form12x.THE_ONE, true);
+
+    public static final Dop MUL_INT_2ADDR =
+        new Dop(Opcodes.MUL_INT_2ADDR, Opcodes.MUL_INT,
+            Opcodes.MUL_INT, Form12x.THE_ONE, true);
+
+    public static final Dop DIV_INT_2ADDR =
+        new Dop(Opcodes.DIV_INT_2ADDR, Opcodes.DIV_INT,
+            Opcodes.DIV_INT, Form12x.THE_ONE, true);
+
+    public static final Dop REM_INT_2ADDR =
+        new Dop(Opcodes.REM_INT_2ADDR, Opcodes.REM_INT,
+            Opcodes.REM_INT, Form12x.THE_ONE, true);
+
+    public static final Dop AND_INT_2ADDR =
+        new Dop(Opcodes.AND_INT_2ADDR, Opcodes.AND_INT,
+            Opcodes.AND_INT, Form12x.THE_ONE, true);
+
+    public static final Dop OR_INT_2ADDR =
+        new Dop(Opcodes.OR_INT_2ADDR, Opcodes.OR_INT,
+            Opcodes.OR_INT, Form12x.THE_ONE, true);
+
+    public static final Dop XOR_INT_2ADDR =
+        new Dop(Opcodes.XOR_INT_2ADDR, Opcodes.XOR_INT,
+            Opcodes.XOR_INT, Form12x.THE_ONE, true);
+
+    public static final Dop SHL_INT_2ADDR =
+        new Dop(Opcodes.SHL_INT_2ADDR, Opcodes.SHL_INT,
+            Opcodes.SHL_INT, Form12x.THE_ONE, true);
+
+    public static final Dop SHR_INT_2ADDR =
+        new Dop(Opcodes.SHR_INT_2ADDR, Opcodes.SHR_INT,
+            Opcodes.SHR_INT, Form12x.THE_ONE, true);
+
+    public static final Dop USHR_INT_2ADDR =
+        new Dop(Opcodes.USHR_INT_2ADDR, Opcodes.USHR_INT,
+            Opcodes.USHR_INT, Form12x.THE_ONE, true);
+
+    public static final Dop ADD_LONG_2ADDR =
+        new Dop(Opcodes.ADD_LONG_2ADDR, Opcodes.ADD_LONG,
+            Opcodes.ADD_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop SUB_LONG_2ADDR =
+        new Dop(Opcodes.SUB_LONG_2ADDR, Opcodes.SUB_LONG,
+            Opcodes.SUB_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop MUL_LONG_2ADDR =
+        new Dop(Opcodes.MUL_LONG_2ADDR, Opcodes.MUL_LONG,
+            Opcodes.MUL_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop DIV_LONG_2ADDR =
+        new Dop(Opcodes.DIV_LONG_2ADDR, Opcodes.DIV_LONG,
+            Opcodes.DIV_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop REM_LONG_2ADDR =
+        new Dop(Opcodes.REM_LONG_2ADDR, Opcodes.REM_LONG,
+            Opcodes.REM_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop AND_LONG_2ADDR =
+        new Dop(Opcodes.AND_LONG_2ADDR, Opcodes.AND_LONG,
+            Opcodes.AND_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop OR_LONG_2ADDR =
+        new Dop(Opcodes.OR_LONG_2ADDR, Opcodes.OR_LONG,
+            Opcodes.OR_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop XOR_LONG_2ADDR =
+        new Dop(Opcodes.XOR_LONG_2ADDR, Opcodes.XOR_LONG,
+            Opcodes.XOR_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop SHL_LONG_2ADDR =
+        new Dop(Opcodes.SHL_LONG_2ADDR, Opcodes.SHL_LONG,
+            Opcodes.SHL_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop SHR_LONG_2ADDR =
+        new Dop(Opcodes.SHR_LONG_2ADDR, Opcodes.SHR_LONG,
+            Opcodes.SHR_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop USHR_LONG_2ADDR =
+        new Dop(Opcodes.USHR_LONG_2ADDR, Opcodes.USHR_LONG,
+            Opcodes.USHR_LONG, Form12x.THE_ONE, true);
+
+    public static final Dop ADD_FLOAT_2ADDR =
+        new Dop(Opcodes.ADD_FLOAT_2ADDR, Opcodes.ADD_FLOAT,
+            Opcodes.ADD_FLOAT, Form12x.THE_ONE, true);
+
+    public static final Dop SUB_FLOAT_2ADDR =
+        new Dop(Opcodes.SUB_FLOAT_2ADDR, Opcodes.SUB_FLOAT,
+            Opcodes.SUB_FLOAT, Form12x.THE_ONE, true);
+
+    public static final Dop MUL_FLOAT_2ADDR =
+        new Dop(Opcodes.MUL_FLOAT_2ADDR, Opcodes.MUL_FLOAT,
+            Opcodes.MUL_FLOAT, Form12x.THE_ONE, true);
+
+    public static final Dop DIV_FLOAT_2ADDR =
+        new Dop(Opcodes.DIV_FLOAT_2ADDR, Opcodes.DIV_FLOAT,
+            Opcodes.DIV_FLOAT, Form12x.THE_ONE, true);
+
+    public static final Dop REM_FLOAT_2ADDR =
+        new Dop(Opcodes.REM_FLOAT_2ADDR, Opcodes.REM_FLOAT,
+            Opcodes.REM_FLOAT, Form12x.THE_ONE, true);
+
+    public static final Dop ADD_DOUBLE_2ADDR =
+        new Dop(Opcodes.ADD_DOUBLE_2ADDR, Opcodes.ADD_DOUBLE,
+            Opcodes.ADD_DOUBLE, Form12x.THE_ONE, true);
+
+    public static final Dop SUB_DOUBLE_2ADDR =
+        new Dop(Opcodes.SUB_DOUBLE_2ADDR, Opcodes.SUB_DOUBLE,
+            Opcodes.SUB_DOUBLE, Form12x.THE_ONE, true);
+
+    public static final Dop MUL_DOUBLE_2ADDR =
+        new Dop(Opcodes.MUL_DOUBLE_2ADDR, Opcodes.MUL_DOUBLE,
+            Opcodes.MUL_DOUBLE, Form12x.THE_ONE, true);
+
+    public static final Dop DIV_DOUBLE_2ADDR =
+        new Dop(Opcodes.DIV_DOUBLE_2ADDR, Opcodes.DIV_DOUBLE,
+            Opcodes.DIV_DOUBLE, Form12x.THE_ONE, true);
+
+    public static final Dop REM_DOUBLE_2ADDR =
+        new Dop(Opcodes.REM_DOUBLE_2ADDR, Opcodes.REM_DOUBLE,
+            Opcodes.REM_DOUBLE, Form12x.THE_ONE, true);
+
+    public static final Dop ADD_INT_LIT16 =
+        new Dop(Opcodes.ADD_INT_LIT16, Opcodes.ADD_INT,
+            Opcodes.NO_NEXT, Form22s.THE_ONE, true);
+
+    public static final Dop RSUB_INT =
+        new Dop(Opcodes.RSUB_INT, Opcodes.RSUB_INT,
+            Opcodes.NO_NEXT, Form22s.THE_ONE, true);
+
+    public static final Dop MUL_INT_LIT16 =
+        new Dop(Opcodes.MUL_INT_LIT16, Opcodes.MUL_INT,
+            Opcodes.NO_NEXT, Form22s.THE_ONE, true);
+
+    public static final Dop DIV_INT_LIT16 =
+        new Dop(Opcodes.DIV_INT_LIT16, Opcodes.DIV_INT,
+            Opcodes.NO_NEXT, Form22s.THE_ONE, true);
+
+    public static final Dop REM_INT_LIT16 =
+        new Dop(Opcodes.REM_INT_LIT16, Opcodes.REM_INT,
+            Opcodes.NO_NEXT, Form22s.THE_ONE, true);
+
+    public static final Dop AND_INT_LIT16 =
+        new Dop(Opcodes.AND_INT_LIT16, Opcodes.AND_INT,
+            Opcodes.NO_NEXT, Form22s.THE_ONE, true);
+
+    public static final Dop OR_INT_LIT16 =
+        new Dop(Opcodes.OR_INT_LIT16, Opcodes.OR_INT,
+            Opcodes.NO_NEXT, Form22s.THE_ONE, true);
+
+    public static final Dop XOR_INT_LIT16 =
+        new Dop(Opcodes.XOR_INT_LIT16, Opcodes.XOR_INT,
+            Opcodes.NO_NEXT, Form22s.THE_ONE, true);
+
+    public static final Dop ADD_INT_LIT8 =
+        new Dop(Opcodes.ADD_INT_LIT8, Opcodes.ADD_INT,
+            Opcodes.ADD_INT_LIT16, Form22b.THE_ONE, true);
+
+    public static final Dop RSUB_INT_LIT8 =
+        new Dop(Opcodes.RSUB_INT_LIT8, Opcodes.RSUB_INT,
+            Opcodes.RSUB_INT, Form22b.THE_ONE, true);
+
+    public static final Dop MUL_INT_LIT8 =
+        new Dop(Opcodes.MUL_INT_LIT8, Opcodes.MUL_INT,
+            Opcodes.MUL_INT_LIT16, Form22b.THE_ONE, true);
+
+    public static final Dop DIV_INT_LIT8 =
+        new Dop(Opcodes.DIV_INT_LIT8, Opcodes.DIV_INT,
+            Opcodes.DIV_INT_LIT16, Form22b.THE_ONE, true);
+
+    public static final Dop REM_INT_LIT8 =
+        new Dop(Opcodes.REM_INT_LIT8, Opcodes.REM_INT,
+            Opcodes.REM_INT_LIT16, Form22b.THE_ONE, true);
+
+    public static final Dop AND_INT_LIT8 =
+        new Dop(Opcodes.AND_INT_LIT8, Opcodes.AND_INT,
+            Opcodes.AND_INT_LIT16, Form22b.THE_ONE, true);
+
+    public static final Dop OR_INT_LIT8 =
+        new Dop(Opcodes.OR_INT_LIT8, Opcodes.OR_INT,
+            Opcodes.OR_INT_LIT16, Form22b.THE_ONE, true);
+
+    public static final Dop XOR_INT_LIT8 =
+        new Dop(Opcodes.XOR_INT_LIT8, Opcodes.XOR_INT,
+            Opcodes.XOR_INT_LIT16, Form22b.THE_ONE, true);
+
+    public static final Dop SHL_INT_LIT8 =
+        new Dop(Opcodes.SHL_INT_LIT8, Opcodes.SHL_INT,
+            Opcodes.NO_NEXT, Form22b.THE_ONE, true);
+
+    public static final Dop SHR_INT_LIT8 =
+        new Dop(Opcodes.SHR_INT_LIT8, Opcodes.SHR_INT,
+            Opcodes.NO_NEXT, Form22b.THE_ONE, true);
+
+    public static final Dop USHR_INT_LIT8 =
+        new Dop(Opcodes.USHR_INT_LIT8, Opcodes.USHR_INT,
+            Opcodes.NO_NEXT, Form22b.THE_ONE, true);
+
+    public static final Dop INVOKE_POLYMORPHIC =
+        new Dop(Opcodes.INVOKE_POLYMORPHIC, Opcodes.INVOKE_POLYMORPHIC,
+            Opcodes.INVOKE_POLYMORPHIC_RANGE, Form45cc.THE_ONE, false);
+
+    public static final Dop INVOKE_POLYMORPHIC_RANGE =
+        new Dop(Opcodes.INVOKE_POLYMORPHIC_RANGE, Opcodes.INVOKE_POLYMORPHIC,
+            Opcodes.NO_NEXT, Form4rcc.THE_ONE, false);
+
+    public static final Dop INVOKE_CUSTOM =
+        new Dop(Opcodes.INVOKE_CUSTOM, Opcodes.INVOKE_CUSTOM,
+            Opcodes.INVOKE_CUSTOM_RANGE, Form35c.THE_ONE, false);
+
+    public static final Dop INVOKE_CUSTOM_RANGE =
+        new Dop(Opcodes.INVOKE_CUSTOM_RANGE, Opcodes.INVOKE_CUSTOM,
+            Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
+
+    public static final Dop CONST_METHOD_HANDLE =
+        new Dop(Opcodes.CONST_METHOD_HANDLE, Opcodes.CONST_METHOD_HANDLE,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    public static final Dop CONST_METHOD_TYPE =
+        new Dop(Opcodes.CONST_METHOD_TYPE, Opcodes.CONST_METHOD_TYPE,
+            Opcodes.NO_NEXT, Form21c.THE_ONE, true);
+
+    // END(dops)
+
+    // Static initialization.
+    static {
+        DOPS = new Dop[Opcodes.MAX_VALUE - Opcodes.MIN_VALUE + 1];
+
+        set(SPECIAL_FORMAT);
+
+        // BEGIN(dops-init); GENERATED AUTOMATICALLY BY opcode-gen
+        set(NOP);
+        set(MOVE);
+        set(MOVE_FROM16);
+        set(MOVE_16);
+        set(MOVE_WIDE);
+        set(MOVE_WIDE_FROM16);
+        set(MOVE_WIDE_16);
+        set(MOVE_OBJECT);
+        set(MOVE_OBJECT_FROM16);
+        set(MOVE_OBJECT_16);
+        set(MOVE_RESULT);
+        set(MOVE_RESULT_WIDE);
+        set(MOVE_RESULT_OBJECT);
+        set(MOVE_EXCEPTION);
+        set(RETURN_VOID);
+        set(RETURN);
+        set(RETURN_WIDE);
+        set(RETURN_OBJECT);
+        set(CONST_4);
+        set(CONST_16);
+        set(CONST);
+        set(CONST_HIGH16);
+        set(CONST_WIDE_16);
+        set(CONST_WIDE_32);
+        set(CONST_WIDE);
+        set(CONST_WIDE_HIGH16);
+        set(CONST_STRING);
+        set(CONST_STRING_JUMBO);
+        set(CONST_CLASS);
+        set(MONITOR_ENTER);
+        set(MONITOR_EXIT);
+        set(CHECK_CAST);
+        set(INSTANCE_OF);
+        set(ARRAY_LENGTH);
+        set(NEW_INSTANCE);
+        set(NEW_ARRAY);
+        set(FILLED_NEW_ARRAY);
+        set(FILLED_NEW_ARRAY_RANGE);
+        set(FILL_ARRAY_DATA);
+        set(THROW);
+        set(GOTO);
+        set(GOTO_16);
+        set(GOTO_32);
+        set(PACKED_SWITCH);
+        set(SPARSE_SWITCH);
+        set(CMPL_FLOAT);
+        set(CMPG_FLOAT);
+        set(CMPL_DOUBLE);
+        set(CMPG_DOUBLE);
+        set(CMP_LONG);
+        set(IF_EQ);
+        set(IF_NE);
+        set(IF_LT);
+        set(IF_GE);
+        set(IF_GT);
+        set(IF_LE);
+        set(IF_EQZ);
+        set(IF_NEZ);
+        set(IF_LTZ);
+        set(IF_GEZ);
+        set(IF_GTZ);
+        set(IF_LEZ);
+        set(AGET);
+        set(AGET_WIDE);
+        set(AGET_OBJECT);
+        set(AGET_BOOLEAN);
+        set(AGET_BYTE);
+        set(AGET_CHAR);
+        set(AGET_SHORT);
+        set(APUT);
+        set(APUT_WIDE);
+        set(APUT_OBJECT);
+        set(APUT_BOOLEAN);
+        set(APUT_BYTE);
+        set(APUT_CHAR);
+        set(APUT_SHORT);
+        set(IGET);
+        set(IGET_WIDE);
+        set(IGET_OBJECT);
+        set(IGET_BOOLEAN);
+        set(IGET_BYTE);
+        set(IGET_CHAR);
+        set(IGET_SHORT);
+        set(IPUT);
+        set(IPUT_WIDE);
+        set(IPUT_OBJECT);
+        set(IPUT_BOOLEAN);
+        set(IPUT_BYTE);
+        set(IPUT_CHAR);
+        set(IPUT_SHORT);
+        set(SGET);
+        set(SGET_WIDE);
+        set(SGET_OBJECT);
+        set(SGET_BOOLEAN);
+        set(SGET_BYTE);
+        set(SGET_CHAR);
+        set(SGET_SHORT);
+        set(SPUT);
+        set(SPUT_WIDE);
+        set(SPUT_OBJECT);
+        set(SPUT_BOOLEAN);
+        set(SPUT_BYTE);
+        set(SPUT_CHAR);
+        set(SPUT_SHORT);
+        set(INVOKE_VIRTUAL);
+        set(INVOKE_SUPER);
+        set(INVOKE_DIRECT);
+        set(INVOKE_STATIC);
+        set(INVOKE_INTERFACE);
+        set(INVOKE_VIRTUAL_RANGE);
+        set(INVOKE_SUPER_RANGE);
+        set(INVOKE_DIRECT_RANGE);
+        set(INVOKE_STATIC_RANGE);
+        set(INVOKE_INTERFACE_RANGE);
+        set(NEG_INT);
+        set(NOT_INT);
+        set(NEG_LONG);
+        set(NOT_LONG);
+        set(NEG_FLOAT);
+        set(NEG_DOUBLE);
+        set(INT_TO_LONG);
+        set(INT_TO_FLOAT);
+        set(INT_TO_DOUBLE);
+        set(LONG_TO_INT);
+        set(LONG_TO_FLOAT);
+        set(LONG_TO_DOUBLE);
+        set(FLOAT_TO_INT);
+        set(FLOAT_TO_LONG);
+        set(FLOAT_TO_DOUBLE);
+        set(DOUBLE_TO_INT);
+        set(DOUBLE_TO_LONG);
+        set(DOUBLE_TO_FLOAT);
+        set(INT_TO_BYTE);
+        set(INT_TO_CHAR);
+        set(INT_TO_SHORT);
+        set(ADD_INT);
+        set(SUB_INT);
+        set(MUL_INT);
+        set(DIV_INT);
+        set(REM_INT);
+        set(AND_INT);
+        set(OR_INT);
+        set(XOR_INT);
+        set(SHL_INT);
+        set(SHR_INT);
+        set(USHR_INT);
+        set(ADD_LONG);
+        set(SUB_LONG);
+        set(MUL_LONG);
+        set(DIV_LONG);
+        set(REM_LONG);
+        set(AND_LONG);
+        set(OR_LONG);
+        set(XOR_LONG);
+        set(SHL_LONG);
+        set(SHR_LONG);
+        set(USHR_LONG);
+        set(ADD_FLOAT);
+        set(SUB_FLOAT);
+        set(MUL_FLOAT);
+        set(DIV_FLOAT);
+        set(REM_FLOAT);
+        set(ADD_DOUBLE);
+        set(SUB_DOUBLE);
+        set(MUL_DOUBLE);
+        set(DIV_DOUBLE);
+        set(REM_DOUBLE);
+        set(ADD_INT_2ADDR);
+        set(SUB_INT_2ADDR);
+        set(MUL_INT_2ADDR);
+        set(DIV_INT_2ADDR);
+        set(REM_INT_2ADDR);
+        set(AND_INT_2ADDR);
+        set(OR_INT_2ADDR);
+        set(XOR_INT_2ADDR);
+        set(SHL_INT_2ADDR);
+        set(SHR_INT_2ADDR);
+        set(USHR_INT_2ADDR);
+        set(ADD_LONG_2ADDR);
+        set(SUB_LONG_2ADDR);
+        set(MUL_LONG_2ADDR);
+        set(DIV_LONG_2ADDR);
+        set(REM_LONG_2ADDR);
+        set(AND_LONG_2ADDR);
+        set(OR_LONG_2ADDR);
+        set(XOR_LONG_2ADDR);
+        set(SHL_LONG_2ADDR);
+        set(SHR_LONG_2ADDR);
+        set(USHR_LONG_2ADDR);
+        set(ADD_FLOAT_2ADDR);
+        set(SUB_FLOAT_2ADDR);
+        set(MUL_FLOAT_2ADDR);
+        set(DIV_FLOAT_2ADDR);
+        set(REM_FLOAT_2ADDR);
+        set(ADD_DOUBLE_2ADDR);
+        set(SUB_DOUBLE_2ADDR);
+        set(MUL_DOUBLE_2ADDR);
+        set(DIV_DOUBLE_2ADDR);
+        set(REM_DOUBLE_2ADDR);
+        set(ADD_INT_LIT16);
+        set(RSUB_INT);
+        set(MUL_INT_LIT16);
+        set(DIV_INT_LIT16);
+        set(REM_INT_LIT16);
+        set(AND_INT_LIT16);
+        set(OR_INT_LIT16);
+        set(XOR_INT_LIT16);
+        set(ADD_INT_LIT8);
+        set(RSUB_INT_LIT8);
+        set(MUL_INT_LIT8);
+        set(DIV_INT_LIT8);
+        set(REM_INT_LIT8);
+        set(AND_INT_LIT8);
+        set(OR_INT_LIT8);
+        set(XOR_INT_LIT8);
+        set(SHL_INT_LIT8);
+        set(SHR_INT_LIT8);
+        set(USHR_INT_LIT8);
+        set(INVOKE_POLYMORPHIC);
+        set(INVOKE_POLYMORPHIC_RANGE);
+        set(INVOKE_CUSTOM);
+        set(INVOKE_CUSTOM_RANGE);
+        set(CONST_METHOD_HANDLE);
+        set(CONST_METHOD_TYPE);
+        // END(dops-init)
+    }
+
+    /**
+     * This class is uninstantiable.
+     */
+    private Dops() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Gets the {@link Dop} for the given opcode value.
+     *
+     * @param opcode {@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the
+     * opcode value
+     * @return {@code non-null;} the associated opcode instance
+     */
+    public static Dop get(int opcode) {
+        int idx = opcode - Opcodes.MIN_VALUE;
+
+        try {
+            Dop result = DOPS[idx];
+            if (result != null) {
+                return result;
+            }
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Fall through.
+        }
+
+        throw new IllegalArgumentException("bogus opcode");
+    }
+
+    /**
+     * Gets the next {@link Dop} in the instruction fitting chain after the
+     * given instance, if any.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param options {@code non-null;} options, used to determine
+     * which opcodes are potentially off-limits
+     * @return {@code null-ok;} the next opcode in the same family, in the
+     * chain of opcodes to try, or {@code null} if the given opcode is
+     * the last in its chain
+     */
+    public static Dop getNextOrNull(Dop opcode, DexOptions options) {
+      int nextOpcode = opcode.getNextOpcode();
+
+      if (nextOpcode == Opcodes.NO_NEXT) {
+        return null;
+      }
+
+      opcode = get(nextOpcode);
+
+      return opcode;
+    }
+
+    /**
+     * Puts the given opcode into the table of all ops.
+     *
+     * @param opcode {@code non-null;} the opcode
+     */
+    private static void set(Dop opcode) {
+        int idx = opcode.getOpcode() - Opcodes.MIN_VALUE;
+        DOPS[idx] = opcode;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/FixedSizeInsn.java b/dx/src/com/android/dx/dex/code/FixedSizeInsn.java
new file mode 100644
index 0000000..faed530
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/FixedSizeInsn.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Base class for instructions which are of a fixed code size and
+ * which use {@link InsnFormat} methods to write themselves. This
+ * includes most &mdash; but not all &mdash; instructions.
+ */
+public abstract class FixedSizeInsn extends DalvInsn {
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * <p><b>Note:</b> In the unlikely event that an instruction takes
+     * absolutely no registers (e.g., a {@code nop} or a
+     * no-argument no-result * static method call), then the given
+     * register list may be passed as {@link
+     * RegisterSpecList#EMPTY}.</p>
+     *
+     * @param opcode the opcode; one of the constants from {@link Dops}
+     * @param position {@code non-null;} source position
+     * @param registers {@code non-null;} register list, including a
+     * result register if appropriate (that is, registers may be either
+     * ins or outs)
+     */
+    public FixedSizeInsn(Dop opcode, SourcePosition position,
+                         RegisterSpecList registers) {
+        super(opcode, position, registers);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int codeSize() {
+        return getOpcode().getFormat().codeSize();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void writeTo(AnnotatedOutput out) {
+        getOpcode().getFormat().writeTo(out, this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final DalvInsn withRegisterOffset(int delta) {
+        return withRegisters(getRegisters().withOffset(delta));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected final String listingString0(boolean noteIndices) {
+        return getOpcode().getFormat().listingString(this, noteIndices);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/HighRegisterPrefix.java b/dx/src/com/android/dx/dex/code/HighRegisterPrefix.java
new file mode 100644
index 0000000..a88a39c
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/HighRegisterPrefix.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Combination instruction which turns into a variable number of
+ * {@code move*} instructions to move a set of registers into
+ * registers starting at {@code 0} sequentially. This is used
+ * in translating an instruction whose register requirements cannot
+ * be met using a straightforward choice of a single opcode.
+ */
+public final class HighRegisterPrefix extends VariableSizeInsn {
+    /** {@code null-ok;} cached instructions, if constructed */
+    private SimpleInsn[] insns;
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     * @param registers {@code non-null;} source registers
+     */
+    public HighRegisterPrefix(SourcePosition position,
+                              RegisterSpecList registers) {
+        super(position, registers);
+
+        if (registers.size() == 0) {
+            throw new IllegalArgumentException("registers.size() == 0");
+        }
+
+        insns = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        int result = 0;
+
+        calculateInsnsIfNecessary();
+
+        for (SimpleInsn insn : insns) {
+            result += insn.codeSize();
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out) {
+        calculateInsnsIfNecessary();
+
+        for (SimpleInsn insn : insns) {
+            insn.writeTo(out);
+        }
+    }
+
+    /**
+     * Helper for {@link #codeSize} and {@link #writeTo} which sets up
+     * {@link #insns} if not already done.
+     */
+    private void calculateInsnsIfNecessary() {
+        if (insns != null) {
+            return;
+        }
+
+        RegisterSpecList registers = getRegisters();
+        int sz = registers.size();
+
+        insns = new SimpleInsn[sz];
+
+        for (int i = 0, outAt = 0; i < sz; i++) {
+          RegisterSpec src = registers.get(i);
+          insns[i] = moveInsnFor(src, outAt);
+          outAt += src.getCategory();
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new HighRegisterPrefix(getPosition(), registers);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String listingString0(boolean noteIndices) {
+        RegisterSpecList registers = getRegisters();
+        int sz = registers.size();
+        StringBuilder sb = new StringBuilder(100);
+
+        for (int i = 0, outAt = 0; i < sz; i++) {
+            RegisterSpec src = registers.get(i);
+            SimpleInsn insn = moveInsnFor(src, outAt);
+
+            if (i != 0) {
+                sb.append('\n');
+            }
+
+            sb.append(insn.listingString0(noteIndices));
+
+            outAt += src.getCategory();
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Returns the proper move instruction for the given source spec
+     * and destination index.
+     *
+     * @param src {@code non-null;} the source register spec
+     * @param destIndex {@code >= 0;} the destination register index
+     * @return {@code non-null;} the appropriate move instruction
+     */
+    private static SimpleInsn moveInsnFor(RegisterSpec src, int destIndex) {
+        return DalvInsn.makeMove(SourcePosition.NO_INFO,
+                RegisterSpec.make(destIndex, src.getType()),
+                src);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/InsnFormat.java b/dx/src/com/android/dx/dex/code/InsnFormat.java
new file mode 100644
index 0000000..61515bb
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/InsnFormat.java
@@ -0,0 +1,668 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstKnownNull;
+import com.android.dx.rop.cst.CstLiteral64;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.BitSet;
+
+/**
+ * Base class for all instruction format handlers. Instruction format
+ * handlers know how to translate {@link DalvInsn} instances into
+ * streams of code units, as well as human-oriented listing strings
+ * representing such translations.
+ */
+public abstract class InsnFormat {
+    /**
+     * flag to enable/disable the new extended opcode formats; meant as a
+     * temporary measure until VM support for the salient opcodes is
+     * added. TODO: Remove this declaration when the VM can deal.
+     */
+    public static final boolean ALLOW_EXTENDED_OPCODES = true;
+
+    /**
+     * Returns the string form, suitable for inclusion in a listing
+     * dump, of the given instruction. The instruction must be of this
+     * instance's format for proper operation.
+     *
+     * @param insn {@code non-null;} the instruction
+     * @param noteIndices whether to include an explicit notation of
+     * constant pool indices
+     * @return {@code non-null;} the string form
+     */
+    public final String listingString(DalvInsn insn, boolean noteIndices) {
+        String op = insn.getOpcode().getName();
+        String arg = insnArgString(insn);
+        String comment = insnCommentString(insn, noteIndices);
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append(op);
+
+        if (arg.length() != 0) {
+            sb.append(' ');
+            sb.append(arg);
+        }
+
+        if (comment.length() != 0) {
+            sb.append(" // ");
+            sb.append(comment);
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Returns the string form of the arguments to the given instruction.
+     * The instruction must be of this instance's format. If the instruction
+     * has no arguments, then the result should be {@code ""}, not
+     * {@code null}.
+     *
+     * <p>Subclasses must override this method.</p>
+     *
+     * @param insn {@code non-null;} the instruction
+     * @return {@code non-null;} the string form
+     */
+    public abstract String insnArgString(DalvInsn insn);
+
+    /**
+     * Returns the associated comment for the given instruction, if any.
+     * The instruction must be of this instance's format. If the instruction
+     * has no comment, then the result should be {@code ""}, not
+     * {@code null}.
+     *
+     * <p>Subclasses must override this method.</p>
+     *
+     * @param insn {@code non-null;} the instruction
+     * @param noteIndices whether to include an explicit notation of
+     * constant pool indices
+     * @return {@code non-null;} the string form
+     */
+    public abstract String insnCommentString(DalvInsn insn,
+            boolean noteIndices);
+
+    /**
+     * Gets the code size of instructions that use this format. The
+     * size is a number of 16-bit code units, not bytes. This should
+     * throw an exception if this format is of variable size.
+     *
+     * @return {@code >= 0;} the instruction length in 16-bit code units
+     */
+    public abstract int codeSize();
+
+    /**
+     * Returns whether or not the given instruction's arguments will
+     * fit in this instance's format. This includes such things as
+     * counting register arguments, checking register ranges, and
+     * making sure that additional arguments are of appropriate types
+     * and are in-range. If this format has a branch target but the
+     * instruction's branch offset is unknown, this method will simply
+     * not check the offset.
+     *
+     * <p>Subclasses must override this method.</p>
+     *
+     * @param insn {@code non-null;} the instruction to check
+     * @return {@code true} iff the instruction's arguments are
+     * appropriate for this instance, or {@code false} if not
+     */
+    public abstract boolean isCompatible(DalvInsn insn);
+
+    /**
+     * Returns which of a given instruction's registers will fit in
+     * this instance's format.
+     *
+     * <p>The default implementation of this method always returns
+     * an empty BitSet. Subclasses must override this method if they
+     * have registers.</p>
+     *
+     * @param insn {@code non-null;} the instruction to check
+     * @return {@code non-null;} a BitSet flagging registers in the
+     * register list that are compatible to this format
+     */
+    public BitSet compatibleRegs(DalvInsn insn) {
+        return new BitSet();
+    }
+
+    /**
+     * Returns whether or not the given instruction's branch offset will
+     * fit in this instance's format. This always returns {@code false}
+     * for formats that don't include a branch offset.
+     *
+     * <p>The default implementation of this method always returns
+     * {@code false}. Subclasses must override this method if they
+     * include branch offsets.</p>
+     *
+     * @param insn {@code non-null;} the instruction to check
+     * @return {@code true} iff the instruction's branch offset is
+     * appropriate for this instance, or {@code false} if not
+     */
+    public boolean branchFits(TargetInsn insn) {
+        return false;
+    }
+
+    /**
+     * Writes the code units for the given instruction to the given
+     * output destination. The instruction must be of this instance's format.
+     *
+     * <p>Subclasses must override this method.</p>
+     *
+     * @param out {@code non-null;} the output destination to write to
+     * @param insn {@code non-null;} the instruction to write
+     */
+    public abstract void writeTo(AnnotatedOutput out, DalvInsn insn);
+
+    /**
+     * Helper method to return a register list string.
+     *
+     * @param list {@code non-null;} the list of registers
+     * @return {@code non-null;} the string form
+     */
+    protected static String regListString(RegisterSpecList list) {
+        int sz = list.size();
+        StringBuilder sb = new StringBuilder(sz * 5 + 2);
+
+        sb.append('{');
+
+        for (int i = 0; i < sz; i++) {
+            if (i != 0) {
+                sb.append(", ");
+            }
+            sb.append(list.get(i).regString());
+        }
+
+        sb.append('}');
+
+        return sb.toString();
+    }
+
+    /**
+     * Helper method to return a register range string.
+     *
+     * @param list {@code non-null;} the list of registers (which must be
+     * sequential)
+     * @return {@code non-null;} the string form
+     */
+    protected static String regRangeString(RegisterSpecList list) {
+        int size = list.size();
+        StringBuilder sb = new StringBuilder(30);
+
+        sb.append("{");
+
+        switch (size) {
+            case 0: {
+                // Nothing to do.
+                break;
+            }
+            case 1: {
+                sb.append(list.get(0).regString());
+                break;
+            }
+            default: {
+                RegisterSpec lastReg = list.get(size - 1);
+                if (lastReg.getCategory() == 2) {
+                    /*
+                     * Add one to properly represent a list-final
+                     * category-2 register.
+                     */
+                    lastReg = lastReg.withOffset(1);
+                }
+
+                sb.append(list.get(0).regString());
+                sb.append("..");
+                sb.append(lastReg.regString());
+            }
+        }
+
+        sb.append("}");
+
+        return sb.toString();
+    }
+
+    /**
+     * Helper method to return a literal bits argument string.
+     *
+     * @param value the value
+     * @return {@code non-null;} the string form
+     */
+    protected static String literalBitsString(CstLiteralBits value) {
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append('#');
+
+        if (value instanceof CstKnownNull) {
+            sb.append("null");
+        } else {
+            sb.append(value.typeName());
+            sb.append(' ');
+            sb.append(value.toHuman());
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Helper method to return a literal bits comment string.
+     *
+     * @param value the value
+     * @param width the width of the constant, in bits (used for displaying
+     * the uninterpreted bits; one of: {@code 4 8 16 32 64}
+     * @return {@code non-null;} the comment
+     */
+    protected static String literalBitsComment(CstLiteralBits value,
+            int width) {
+        StringBuilder sb = new StringBuilder(20);
+
+        sb.append("#");
+
+        long bits;
+
+        if (value instanceof CstLiteral64) {
+            bits = ((CstLiteral64) value).getLongBits();
+        } else {
+            bits = value.getIntBits();
+        }
+
+        switch (width) {
+            case 4:  sb.append(Hex.uNibble((int) bits)); break;
+            case 8:  sb.append(Hex.u1((int) bits));      break;
+            case 16: sb.append(Hex.u2((int) bits));      break;
+            case 32: sb.append(Hex.u4((int) bits));      break;
+            case 64: sb.append(Hex.u8(bits));            break;
+            default: {
+                throw new RuntimeException("shouldn't happen");
+            }
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Helper method to return a branch address string.
+     *
+     * @param insn {@code non-null;} the instruction in question
+     * @return {@code non-null;} the string form of the instruction's
+     * branch target
+     */
+    protected static String branchString(DalvInsn insn) {
+        TargetInsn ti = (TargetInsn) insn;
+        int address = ti.getTargetAddress();
+
+        return (address == (char) address) ? Hex.u2(address) : Hex.u4(address);
+    }
+
+    /**
+     * Helper method to return the comment for a branch.
+     *
+     * @param insn {@code non-null;} the instruction in question
+     * @return {@code non-null;} the comment
+     */
+    protected static String branchComment(DalvInsn insn) {
+        TargetInsn ti = (TargetInsn) insn;
+        int offset = ti.getTargetOffset();
+
+        return (offset == (short) offset) ? Hex.s2(offset) : Hex.s4(offset);
+    }
+
+    /**
+     * Helper method to determine if a signed int value fits in a nibble.
+     *
+     * @param value the value in question
+     * @return {@code true} iff it's in the range -8..+7
+     */
+    protected static boolean signedFitsInNibble(int value) {
+        return (value >= -8) && (value <= 7);
+    }
+
+    /**
+     * Helper method to determine if an unsigned int value fits in a nibble.
+     *
+     * @param value the value in question
+     * @return {@code true} iff it's in the range 0..0xf
+     */
+    protected static boolean unsignedFitsInNibble(int value) {
+        return value == (value & 0xf);
+    }
+
+    /**
+     * Helper method to determine if a signed int value fits in a byte.
+     *
+     * @param value the value in question
+     * @return {@code true} iff it's in the range -0x80..+0x7f
+     */
+    protected static boolean signedFitsInByte(int value) {
+        return (byte) value == value;
+    }
+
+    /**
+     * Helper method to determine if an unsigned int value fits in a byte.
+     *
+     * @param value the value in question
+     * @return {@code true} iff it's in the range 0..0xff
+     */
+    protected static boolean unsignedFitsInByte(int value) {
+        return value == (value & 0xff);
+    }
+
+    /**
+     * Helper method to determine if a signed int value fits in a short.
+     *
+     * @param value the value in question
+     * @return {@code true} iff it's in the range -0x8000..+0x7fff
+     */
+    protected static boolean signedFitsInShort(int value) {
+        return (short) value == value;
+    }
+
+    /**
+     * Helper method to determine if an unsigned int value fits in a short.
+     *
+     * @param value the value in question
+     * @return {@code true} iff it's in the range 0..0xffff
+     */
+    protected static boolean unsignedFitsInShort(int value) {
+        return value == (value & 0xffff);
+    }
+
+    /**
+     * Helper method to determine if a list of registers are sequential,
+     * including degenerate cases for empty or single-element lists.
+     *
+     * @param list {@code non-null;} the list of registers
+     * @return {@code true} iff the list is sequentially ordered
+     */
+    protected static boolean isRegListSequential(RegisterSpecList list) {
+        int sz = list.size();
+
+        if (sz < 2) {
+            return true;
+        }
+
+        int first = list.get(0).getReg();
+        int next = first;
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec one = list.get(i);
+            if (one.getReg() != next) {
+                return false;
+            }
+            next += one.getCategory();
+        }
+
+        return true;
+    }
+
+    /**
+     * Helper method to extract the callout-argument index from an
+     * appropriate instruction.
+     *
+     * @param insn {@code non-null;} the instruction
+     * @return {@code >= 0;} the callout argument index
+     */
+    protected static int argIndex(DalvInsn insn) {
+        int arg = ((CstInteger) ((CstInsn) insn).getConstant()).getValue();
+
+        if (arg < 0) {
+            throw new IllegalArgumentException("bogus insn");
+        }
+
+        return arg;
+    }
+
+    /**
+     * Helper method to combine an opcode and a second byte of data into
+     * the appropriate form for emitting into a code buffer.
+     *
+     * @param insn {@code non-null;} the instruction containing the opcode
+     * @param arg {@code 0..255;} arbitrary other byte value
+     * @return combined value
+     */
+    protected static short opcodeUnit(DalvInsn insn, int arg) {
+        if ((arg & 0xff) != arg) {
+            throw new IllegalArgumentException("arg out of range 0..255");
+        }
+
+        int opcode = insn.getOpcode().getOpcode();
+
+        if ((opcode & 0xff) != opcode) {
+            throw new IllegalArgumentException("opcode out of range 0..255");
+        }
+
+        return (short) (opcode | (arg << 8));
+    }
+
+    /**
+     * Helper method to get an extended (16-bit) opcode out of an
+     * instruction, returning it as a code unit. The opcode
+     * <i>must</i> be an extended opcode.
+     *
+     * @param insn {@code non-null;} the instruction containing the
+     * extended opcode
+     * @return the opcode as a code unit
+     */
+    protected static short opcodeUnit(DalvInsn insn) {
+        int opcode = insn.getOpcode().getOpcode();
+
+        if ((opcode < 0x100) || (opcode > 0xffff)) {
+            throw new IllegalArgumentException("opcode out of range 0..65535");
+        }
+
+        return (short) opcode;
+    }
+
+    /**
+     * Helper method to combine two bytes into a code unit.
+     *
+     * @param low {@code 0..255;} low byte
+     * @param high {@code 0..255;} high byte
+     * @return combined value
+     */
+    protected static short codeUnit(int low, int high) {
+        if ((low & 0xff) != low) {
+            throw new IllegalArgumentException("low out of range 0..255");
+        }
+
+        if ((high & 0xff) != high) {
+            throw new IllegalArgumentException("high out of range 0..255");
+        }
+
+        return (short) (low | (high << 8));
+    }
+
+    /**
+     * Helper method to combine four nibbles into a code unit.
+     *
+     * @param n0 {@code 0..15;} low nibble
+     * @param n1 {@code 0..15;} medium-low nibble
+     * @param n2 {@code 0..15;} medium-high nibble
+     * @param n3 {@code 0..15;} high nibble
+     * @return combined value
+     */
+    protected static short codeUnit(int n0, int n1, int n2, int n3) {
+        if ((n0 & 0xf) != n0) {
+            throw new IllegalArgumentException("n0 out of range 0..15");
+        }
+
+        if ((n1 & 0xf) != n1) {
+            throw new IllegalArgumentException("n1 out of range 0..15");
+        }
+
+        if ((n2 & 0xf) != n2) {
+            throw new IllegalArgumentException("n2 out of range 0..15");
+        }
+
+        if ((n3 & 0xf) != n3) {
+            throw new IllegalArgumentException("n3 out of range 0..15");
+        }
+
+        return (short) (n0 | (n1 << 4) | (n2 << 8) | (n3 << 12));
+    }
+
+    /**
+     * Helper method to combine two nibbles into a byte.
+     *
+     * @param low {@code 0..15;} low nibble
+     * @param high {@code 0..15;} high nibble
+     * @return {@code 0..255;} combined value
+     */
+    protected static int makeByte(int low, int high) {
+        if ((low & 0xf) != low) {
+            throw new IllegalArgumentException("low out of range 0..15");
+        }
+
+        if ((high & 0xf) != high) {
+            throw new IllegalArgumentException("high out of range 0..15");
+        }
+
+        return low | (high << 4);
+    }
+
+    /**
+     * Writes one code unit to the given output destination.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     */
+    protected static void write(AnnotatedOutput out, short c0) {
+        out.writeShort(c0);
+    }
+
+    /**
+     * Writes two code units to the given output destination.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     * @param c1 code unit to write
+     */
+    protected static void write(AnnotatedOutput out, short c0, short c1) {
+        out.writeShort(c0);
+        out.writeShort(c1);
+    }
+
+    /**
+     * Writes three code units to the given output destination.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     * @param c1 code unit to write
+     * @param c2 code unit to write
+     */
+    protected static void write(AnnotatedOutput out, short c0, short c1,
+            short c2) {
+        out.writeShort(c0);
+        out.writeShort(c1);
+        out.writeShort(c2);
+    }
+
+    /**
+     * Writes four code units to the given output destination.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     * @param c1 code unit to write
+     * @param c2 code unit to write
+     * @param c3 code unit to write
+     */
+    protected static void write(AnnotatedOutput out, short c0, short c1,
+            short c2, short c3) {
+        out.writeShort(c0);
+        out.writeShort(c1);
+        out.writeShort(c2);
+        out.writeShort(c3);
+    }
+
+    /**
+     * Writes five code units to the given output destination.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     * @param c1 code unit to write
+     * @param c2 code unit to write
+     * @param c3 code unit to write
+     * @param c4 code unit to write
+     */
+    protected static void write(AnnotatedOutput out, short c0, short c1,
+            short c2, short c3, short c4) {
+        out.writeShort(c0);
+        out.writeShort(c1);
+        out.writeShort(c2);
+        out.writeShort(c3);
+        out.writeShort(c4);
+    }
+
+    /**
+     * Writes three code units to the given output destination, where the
+     * second and third are represented as single <code>int</code> and emitted
+     * in little-endian order.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     * @param c1c2 code unit pair to write
+     */
+    protected static void write(AnnotatedOutput out, short c0, int c1c2) {
+        write(out, c0, (short) c1c2, (short) (c1c2 >> 16));
+    }
+
+    /**
+     * Writes four code units to the given output destination, where the
+     * second and third are represented as single <code>int</code> and emitted
+     * in little-endian order.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     * @param c1c2 code unit pair to write
+     * @param c3 code unit to write
+     */
+    protected static void write(AnnotatedOutput out, short c0, int c1c2,
+            short c3) {
+        write(out, c0, (short) c1c2, (short) (c1c2 >> 16), c3);
+    }
+
+    /**
+     * Writes five code units to the given output destination, where the
+     * second and third are represented as single <code>int</code> and emitted
+     * in little-endian order.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     * @param c1c2 code unit pair to write
+     * @param c3 code unit to write
+     * @param c4 code unit to write
+     */
+    protected static void write(AnnotatedOutput out, short c0, int c1c2,
+            short c3, short c4) {
+        write(out, c0, (short) c1c2, (short) (c1c2 >> 16), c3, c4);
+    }
+
+    /**
+     * Writes five code units to the given output destination, where the
+     * second through fifth are represented as single <code>long</code>
+     * and emitted in little-endian order.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param c0 code unit to write
+     * @param c1c2c3c4 code unit quad to write
+     */
+    protected static void write(AnnotatedOutput out, short c0, long c1c2c3c4) {
+        write(out, c0, (short) c1c2c3c4, (short) (c1c2c3c4 >> 16),
+                (short) (c1c2c3c4 >> 32), (short) (c1c2c3c4 >> 48));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/LocalList.java b/dx/src/com/android/dx/dex/code/LocalList.java
new file mode 100644
index 0000000..bb10aa8
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/LocalList.java
@@ -0,0 +1,947 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecSet;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.FixedSizeList;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * List of local variables. Each local variable entry indicates a
+ * range of code which it is valid for, a register number, a name,
+ * and a type.
+ */
+public final class LocalList extends FixedSizeList {
+    /** {@code non-null;} empty instance */
+    public static final LocalList EMPTY = new LocalList(0);
+
+    /** whether to run the self-check code */
+    private static final boolean DEBUG = false;
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size {@code >= 0;} the size of the list
+     */
+    public LocalList(int size) {
+        super(size);
+    }
+
+    /**
+     * Gets the element at the given index. It is an error to call
+     * this with the index for an element which was never set; if you
+     * do that, this will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @return {@code non-null;} element at that index
+     */
+    public Entry get(int n) {
+        return (Entry) get0(n);
+    }
+
+    /**
+     * Sets the entry at the given index.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param entry {@code non-null;} the entry to set at {@code n}
+     */
+    public void set(int n, Entry entry) {
+        set0(n, entry);
+    }
+
+    /**
+     * Does a human-friendly dump of this instance.
+     *
+     * @param out {@code non-null;} where to dump
+     * @param prefix {@code non-null;} prefix to attach to each line of output
+     */
+    public void debugPrint(PrintStream out, String prefix) {
+        int sz = size();
+
+        for (int i = 0; i < sz; i++) {
+            out.print(prefix);
+            out.println(get(i));
+        }
+    }
+
+    /**
+     * Disposition of a local entry.
+     */
+    public static enum Disposition {
+        /** local started (introduced) */
+        START,
+
+        /** local ended without being replaced */
+        END_SIMPLY,
+
+        /** local ended because it was directly replaced */
+        END_REPLACED,
+
+        /** local ended because it was moved to a different register */
+        END_MOVED,
+
+        /**
+         * local ended because the previous local clobbered this one
+         * (because it is category-2)
+         */
+        END_CLOBBERED_BY_PREV,
+
+        /**
+         * local ended because the next local clobbered this one
+         * (because this one is a category-2)
+         */
+        END_CLOBBERED_BY_NEXT;
+    }
+
+    /**
+     * Entry in a local list.
+     */
+    public static class Entry implements Comparable<Entry> {
+        /** {@code >= 0;} address */
+        private final int address;
+
+        /** {@code non-null;} disposition of the local */
+        private final Disposition disposition;
+
+        /** {@code non-null;} register spec representing the variable */
+        private final RegisterSpec spec;
+
+        /** {@code non-null;} variable type (derived from {@code spec}) */
+        private final CstType type;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param address {@code >= 0;} address
+         * @param disposition {@code non-null;} disposition of the local
+         * @param spec {@code non-null;} register spec representing
+         * the variable
+         */
+        public Entry(int address, Disposition disposition, RegisterSpec spec) {
+            if (address < 0) {
+                throw new IllegalArgumentException("address < 0");
+            }
+
+            if (disposition == null) {
+                throw new NullPointerException("disposition == null");
+            }
+
+            try {
+                if (spec.getLocalItem() == null) {
+                    throw new NullPointerException(
+                            "spec.getLocalItem() == null");
+                }
+            } catch (NullPointerException ex) {
+                // Elucidate the exception.
+                throw new NullPointerException("spec == null");
+            }
+
+            this.address = address;
+            this.disposition = disposition;
+            this.spec = spec;
+            this.type = CstType.intern(spec.getType());
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public String toString() {
+            return Integer.toHexString(address) + " " + disposition + " " +
+                spec;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public boolean equals(Object other) {
+            if (!(other instanceof Entry)) {
+                return false;
+            }
+
+            return (compareTo((Entry) other) == 0);
+        }
+
+        /**
+         * Compares by (in priority order) address, end then start
+         * disposition (variants of end are all consistered
+         * equivalent), and spec.
+         *
+         * @param other {@code non-null;} entry to compare to
+         * @return {@code -1..1;} standard result of comparison
+         */
+        @Override
+        public int compareTo(Entry other) {
+            if (address < other.address) {
+                return -1;
+            } else if (address > other.address) {
+                return 1;
+            }
+
+            boolean thisIsStart = isStart();
+            boolean otherIsStart = other.isStart();
+
+            if (thisIsStart != otherIsStart) {
+                return thisIsStart ? 1 : -1;
+            }
+
+            return spec.compareTo(other.spec);
+        }
+
+        /**
+         * Gets the address.
+         *
+         * @return {@code >= 0;} the address
+         */
+        public int getAddress() {
+            return address;
+        }
+
+        /**
+         * Gets the disposition.
+         *
+         * @return {@code non-null;} the disposition
+         */
+        public Disposition getDisposition() {
+            return disposition;
+        }
+
+        /**
+         * Gets whether this is a local start. This is just shorthand for
+         * {@code getDisposition() == Disposition.START}.
+         *
+         * @return {@code true} iff this is a start
+         */
+        public boolean isStart() {
+            return disposition == Disposition.START;
+        }
+
+        /**
+         * Gets the variable name.
+         *
+         * @return {@code null-ok;} the variable name
+         */
+        public CstString getName() {
+            return spec.getLocalItem().getName();
+        }
+
+        /**
+         * Gets the variable signature.
+         *
+         * @return {@code null-ok;} the variable signature
+         */
+        public CstString getSignature() {
+            return spec.getLocalItem().getSignature();
+        }
+
+        /**
+         * Gets the variable's type.
+         *
+         * @return {@code non-null;} the type
+         */
+        public CstType getType() {
+            return type;
+        }
+
+        /**
+         * Gets the number of the register holding the variable.
+         *
+         * @return {@code >= 0;} the number of the register holding
+         * the variable
+         */
+        public int getRegister() {
+            return spec.getReg();
+        }
+
+        /**
+         * Gets the RegisterSpec of the register holding the variable.
+         *
+         * @return {@code non-null;} RegisterSpec of the holding register.
+         */
+        public RegisterSpec getRegisterSpec() {
+            return spec;
+        }
+
+        /**
+         * Returns whether or not this instance matches the given spec.
+         *
+         * @param otherSpec {@code non-null;} the spec in question
+         * @return {@code true} iff this instance matches
+         * {@code spec}
+         */
+        public boolean matches(RegisterSpec otherSpec) {
+            return spec.equalsUsingSimpleType(otherSpec);
+        }
+
+        /**
+         * Returns whether or not this instance matches the spec in
+         * the given instance.
+         *
+         * @param other {@code non-null;} another entry
+         * @return {@code true} iff this instance's spec matches
+         * {@code other}
+         */
+        public boolean matches(Entry other) {
+            return matches(other.spec);
+        }
+
+        /**
+         * Returns an instance just like this one but with the disposition
+         * set as given.
+         *
+         * @param disposition {@code non-null;} the new disposition
+         * @return {@code non-null;} an appropriately-constructed instance
+         */
+        public Entry withDisposition(Disposition disposition) {
+            if (disposition == this.disposition) {
+                return this;
+            }
+
+            return new Entry(address, disposition, spec);
+        }
+    }
+
+    /**
+     * Constructs an instance for the given method, based on the given
+     * block order and intermediate local information.
+     *
+     * @param insns {@code non-null;} instructions to convert
+     * @return {@code non-null;} the constructed list
+     */
+    public static LocalList make(DalvInsnList insns) {
+        int sz = insns.size();
+
+        /*
+         * Go through the insn list, looking for all the local
+         * variable pseudoinstructions, splitting out LocalSnapshots
+         * into separate per-variable starts, adding explicit ends
+         * wherever a variable is replaced or moved, and collecting
+         * these and all the other local variable "activity"
+         * together into an output list (without the other insns).
+         *
+         * Note: As of this writing, this method won't be handed any
+         * insn lists that contain local ends, but I (danfuzz) expect
+         * that to change at some point, when we start feeding that
+         * info explicitly into the rop layer rather than only trying
+         * to infer it. So, given that expectation, this code is
+         * written to deal with them.
+         */
+
+        MakeState state = new MakeState(sz);
+
+        for (int i = 0; i < sz; i++) {
+            DalvInsn insn = insns.get(i);
+
+            if (insn instanceof LocalSnapshot) {
+                RegisterSpecSet snapshot =
+                    ((LocalSnapshot) insn).getLocals();
+                state.snapshot(insn.getAddress(), snapshot);
+            } else if (insn instanceof LocalStart) {
+                RegisterSpec local = ((LocalStart) insn).getLocal();
+                state.startLocal(insn.getAddress(), local);
+            }
+        }
+
+        LocalList result = state.finish();
+
+        if (DEBUG) {
+            debugVerify(result);
+        }
+
+        return result;
+    }
+
+    /**
+     * Debugging helper that verifies the constraint that a list doesn't
+     * contain any redundant local starts and that local ends that are
+     * due to replacements are properly annotated.
+     */
+    private static void debugVerify(LocalList locals) {
+        try {
+            debugVerify0(locals);
+        } catch (RuntimeException ex) {
+            int sz = locals.size();
+            for (int i = 0; i < sz; i++) {
+                System.err.println(locals.get(i));
+            }
+            throw ex;
+        }
+
+    }
+
+    /**
+     * Helper for {@link #debugVerify} which does most of the work.
+     */
+    private static void debugVerify0(LocalList locals) {
+        int sz = locals.size();
+        Entry[] active = new Entry[65536];
+
+        for (int i = 0; i < sz; i++) {
+            Entry e = locals.get(i);
+            int reg = e.getRegister();
+
+            if (e.isStart()) {
+                Entry already = active[reg];
+
+                if ((already != null) && e.matches(already)) {
+                    throw new RuntimeException("redundant start at " +
+                            Integer.toHexString(e.getAddress()) + ": got " +
+                            e + "; had " + already);
+                }
+
+                active[reg] = e;
+            } else {
+                if (active[reg] == null) {
+                    throw new RuntimeException("redundant end at " +
+                            Integer.toHexString(e.getAddress()));
+                }
+
+                int addr = e.getAddress();
+                boolean foundStart = false;
+
+                for (int j = i + 1; j < sz; j++) {
+                    Entry test = locals.get(j);
+                    if (test.getAddress() != addr) {
+                        break;
+                    }
+                    if (test.getRegisterSpec().getReg() == reg) {
+                        if (test.isStart()) {
+                            if (e.getDisposition()
+                                    != Disposition.END_REPLACED) {
+                                throw new RuntimeException(
+                                        "improperly marked end at " +
+                                        Integer.toHexString(addr));
+                            }
+                            foundStart = true;
+                        } else {
+                            throw new RuntimeException(
+                                    "redundant end at " +
+                                    Integer.toHexString(addr));
+                        }
+                    }
+                }
+
+                if (!foundStart &&
+                        (e.getDisposition() == Disposition.END_REPLACED)) {
+                    throw new RuntimeException(
+                            "improper end replacement claim at " +
+                            Integer.toHexString(addr));
+                }
+
+                active[reg] = null;
+            }
+        }
+    }
+
+    /**
+     * Intermediate state when constructing a local list.
+     */
+    public static class MakeState {
+        /** {@code non-null;} result being collected */
+        private final ArrayList<Entry> result;
+
+        /**
+         * {@code >= 0;} running count of nulled result entries, to help with
+         * sizing the final list
+         */
+        private int nullResultCount;
+
+        /** {@code null-ok;} current register mappings */
+        private RegisterSpecSet regs;
+
+        /** {@code null-ok;} result indices where local ends are stored */
+        private int[] endIndices;
+
+        /** {@code >= 0;} last address seen */
+        private final int lastAddress;
+
+        /**
+         * Constructs an instance.
+         */
+        public MakeState(int initialSize) {
+            result = new ArrayList<Entry>(initialSize);
+            nullResultCount = 0;
+            regs = null;
+            endIndices = null;
+            lastAddress = 0;
+        }
+
+        /**
+         * Checks the address and other vitals as a prerequisite to
+         * further processing.
+         *
+         * @param address {@code >= 0;} address about to be processed
+         * @param reg {@code >= 0;} register number about to be processed
+         */
+        private void aboutToProcess(int address, int reg) {
+            boolean first = (endIndices == null);
+
+            if ((address == lastAddress) && !first) {
+                return;
+            }
+
+            if (address < lastAddress) {
+                throw new RuntimeException("shouldn't happen");
+            }
+
+            if (first || (reg >= endIndices.length)) {
+                /*
+                 * This is the first allocation of the state set and
+                 * index array, or we need to grow. (The latter doesn't
+                 * happen much; in fact, we have only ever observed
+                 * it happening in test cases, never in "real" code.)
+                 */
+                int newSz = reg + 1;
+                RegisterSpecSet newRegs = new RegisterSpecSet(newSz);
+                int[] newEnds = new int[newSz];
+                Arrays.fill(newEnds, -1);
+
+                if (!first) {
+                    newRegs.putAll(regs);
+                    System.arraycopy(endIndices, 0, newEnds, 0,
+                            endIndices.length);
+                }
+
+                regs = newRegs;
+                endIndices = newEnds;
+            }
+        }
+
+        /**
+         * Sets the local state at the given address to the given snapshot.
+         * The first call on this instance must be to this method, so that
+         * the register state can be properly sized.
+         *
+         * @param address {@code >= 0;} the address
+         * @param specs {@code non-null;} spec set representing the locals
+         */
+        public void snapshot(int address, RegisterSpecSet specs) {
+            if (DEBUG) {
+                System.err.printf("%04x snapshot %s\n", address, specs);
+            }
+
+            int sz = specs.getMaxSize();
+            aboutToProcess(address, sz - 1);
+
+            for (int i = 0; i < sz; i++) {
+                RegisterSpec oldSpec = regs.get(i);
+                RegisterSpec newSpec = filterSpec(specs.get(i));
+
+                if (oldSpec == null) {
+                    if (newSpec != null) {
+                        startLocal(address, newSpec);
+                    }
+                } else if (newSpec == null) {
+                    endLocal(address, oldSpec);
+                } else if (! newSpec.equalsUsingSimpleType(oldSpec)) {
+                    endLocal(address, oldSpec);
+                    startLocal(address, newSpec);
+                }
+            }
+
+            if (DEBUG) {
+                System.err.printf("%04x snapshot done\n", address);
+            }
+        }
+
+        /**
+         * Starts a local at the given address.
+         *
+         * @param address {@code >= 0;} the address
+         * @param startedLocal {@code non-null;} spec representing the
+         * started local
+         */
+        public void startLocal(int address, RegisterSpec startedLocal) {
+            if (DEBUG) {
+                System.err.printf("%04x start %s\n", address, startedLocal);
+            }
+
+            int regNum = startedLocal.getReg();
+
+            startedLocal = filterSpec(startedLocal);
+            aboutToProcess(address, regNum);
+
+            RegisterSpec existingLocal = regs.get(regNum);
+
+            if (startedLocal.equalsUsingSimpleType(existingLocal)) {
+                // Silently ignore a redundant start.
+                return;
+            }
+
+            RegisterSpec movedLocal = regs.findMatchingLocal(startedLocal);
+            if (movedLocal != null) {
+                /*
+                 * The same variable was moved from one register to another.
+                 * So add an end for its old location.
+                 */
+                addOrUpdateEnd(address, Disposition.END_MOVED, movedLocal);
+            }
+
+            int endAt = endIndices[regNum];
+
+            if (existingLocal != null) {
+                /*
+                 * There is an existing (but non-matching) local.
+                 * Add an explicit end for it.
+                 */
+                add(address, Disposition.END_REPLACED, existingLocal);
+            } else if (endAt >= 0) {
+                /*
+                 * Look for an end local for the same register at the
+                 * same address. If found, then update it or delete
+                 * it, depending on whether or not it represents the
+                 * same variable as the one being started.
+                 */
+                Entry endEntry = result.get(endAt);
+                if (endEntry.getAddress() == address) {
+                    if (endEntry.matches(startedLocal)) {
+                        /*
+                         * There was already an end local for the same
+                         * variable at the same address. This turns
+                         * out to be superfluous, as we are starting
+                         * up the exact same local. This situation can
+                         * happen when a single local variable got
+                         * somehow "split up" during intermediate
+                         * processing. In any case, rather than represent
+                         * the end-then-start, just remove the old end.
+                         */
+                        result.set(endAt, null);
+                        nullResultCount++;
+                        regs.put(startedLocal);
+                        endIndices[regNum] = -1;
+                        return;
+                    } else {
+                        /*
+                         * There was a different variable ended at the
+                         * same address. Update it to indicate that
+                         * it was ended due to a replacement (rather than
+                         * ending for no particular reason).
+                         */
+                        endEntry = endEntry.withDisposition(
+                                Disposition.END_REPLACED);
+                        result.set(endAt, endEntry);
+                    }
+                }
+            }
+
+            /*
+             * The code above didn't find and remove an unnecessary
+             * local end, so we now have to add one or more entries to
+             * the output to capture the transition.
+             */
+
+            /*
+             * If the local just below (in the register set at reg-1)
+             * is of category-2, then it is ended by this new start.
+             */
+            if (regNum > 0) {
+                RegisterSpec justBelow = regs.get(regNum - 1);
+                if ((justBelow != null) && justBelow.isCategory2()) {
+                    addOrUpdateEnd(address,
+                            Disposition.END_CLOBBERED_BY_NEXT,
+                            justBelow);
+                }
+            }
+
+            /*
+             * Similarly, if this local is category-2, then the local
+             * just above (if any) is ended by the start now being
+             * emitted.
+             */
+            if (startedLocal.isCategory2()) {
+                RegisterSpec justAbove = regs.get(regNum + 1);
+                if (justAbove != null) {
+                    addOrUpdateEnd(address,
+                            Disposition.END_CLOBBERED_BY_PREV,
+                            justAbove);
+                }
+            }
+
+            /*
+             * TODO: Add an end for the same local in a different reg,
+             * if any (that is, if the local migrates from vX to vY,
+             * we should note that as a local end in vX).
+             */
+
+            add(address, Disposition.START, startedLocal);
+        }
+
+        /**
+         * Ends a local at the given address, using the disposition
+         * {@code END_SIMPLY}.
+         *
+         * @param address {@code >= 0;} the address
+         * @param endedLocal {@code non-null;} spec representing the
+         * local being ended
+         */
+        public void endLocal(int address, RegisterSpec endedLocal) {
+            endLocal(address, endedLocal, Disposition.END_SIMPLY);
+        }
+
+        /**
+         * Ends a local at the given address.
+         *
+         * @param address {@code >= 0;} the address
+         * @param endedLocal {@code non-null;} spec representing the
+         * local being ended
+         * @param disposition reason for the end
+         */
+        public void endLocal(int address, RegisterSpec endedLocal,
+                Disposition disposition) {
+            if (DEBUG) {
+                System.err.printf("%04x end %s\n", address, endedLocal);
+            }
+
+            int regNum = endedLocal.getReg();
+
+            endedLocal = filterSpec(endedLocal);
+            aboutToProcess(address, regNum);
+
+            int endAt = endIndices[regNum];
+
+            if (endAt >= 0) {
+                /*
+                 * The local in the given register is already ended.
+                 * Silently return without adding anything to the result.
+                 */
+                return;
+            }
+
+            // Check for start and end at the same address.
+            if (checkForEmptyRange(address, endedLocal)) {
+                return;
+            }
+
+            add(address, disposition, endedLocal);
+        }
+
+        /**
+         * Helper for {@link #endLocal}, which handles the cases where
+         * and end local is issued at the same address as a start local
+         * for the same register. If this case is found, then this
+         * method will remove the start (as the local was never actually
+         * active), update the {@link #endIndices} to be accurate, and
+         * if needed update the newly-active end to reflect an altered
+         * disposition.
+         *
+         * @param address {@code >= 0;} the address
+         * @param endedLocal {@code non-null;} spec representing the
+         * local being ended
+         * @return {@code true} iff this method found the case in question
+         * and adjusted things accordingly
+         */
+        private boolean checkForEmptyRange(int address,
+                RegisterSpec endedLocal) {
+            int at = result.size() - 1;
+            Entry entry;
+
+            // Look for a previous entry at the same address.
+            for (/*at*/; at >= 0; at--) {
+                entry = result.get(at);
+
+                if (entry == null) {
+                    continue;
+                }
+
+                if (entry.getAddress() != address) {
+                    // We didn't find any match at the same address.
+                    return false;
+                }
+
+                if (entry.matches(endedLocal)) {
+                    break;
+                }
+            }
+
+            /*
+             * In fact, we found that the endedLocal had started at the
+             * same address, so do all the requisite cleanup.
+             */
+
+            regs.remove(endedLocal);
+            result.set(at, null);
+            nullResultCount++;
+
+            int regNum = endedLocal.getReg();
+            boolean found = false;
+            entry = null;
+
+            // Now look back further to update where the register ended.
+            for (at--; at >= 0; at--) {
+                entry = result.get(at);
+
+                if (entry == null) {
+                    continue;
+                }
+
+                if (entry.getRegisterSpec().getReg() == regNum) {
+                    found = true;
+                    break;
+                }
+            }
+
+            if (found) {
+                // We found an end for the same register.
+                endIndices[regNum] = at;
+
+                if (entry.getAddress() == address) {
+                    /*
+                     * It's still the same address, so update the
+                     * disposition.
+                     */
+                    result.set(at,
+                            entry.withDisposition(Disposition.END_SIMPLY));
+                }
+            }
+
+            return true;
+        }
+
+        /**
+         * Converts a given spec into the form acceptable for use in a
+         * local list. This, in particular, transforms the "known
+         * null" type into simply {@code Object}. This method needs to
+         * be called for any spec that is on its way into a locals
+         * list.
+         *
+         * <p>This isn't necessarily the cleanest way to achieve the
+         * goal of not representing known nulls in a locals list, but
+         * it gets the job done.</p>
+         *
+         * @param orig {@code null-ok;} the original spec
+         * @return {@code null-ok;} an appropriately modified spec, or the
+         * original if nothing needs to be done
+         */
+        private static RegisterSpec filterSpec(RegisterSpec orig) {
+            if ((orig != null) && (orig.getType() == Type.KNOWN_NULL)) {
+                return orig.withType(Type.OBJECT);
+            }
+
+            return orig;
+        }
+
+        /**
+         * Adds an entry to the result, updating the adjunct tables
+         * accordingly.
+         *
+         * @param address {@code >= 0;} the address
+         * @param disposition {@code non-null;} the disposition
+         * @param spec {@code non-null;} spec representing the local
+         */
+        private void add(int address, Disposition disposition,
+                RegisterSpec spec) {
+            int regNum = spec.getReg();
+
+            result.add(new Entry(address, disposition, spec));
+
+            if (disposition == Disposition.START) {
+                regs.put(spec);
+                endIndices[regNum] = -1;
+            } else {
+                regs.remove(spec);
+                endIndices[regNum] = result.size() - 1;
+            }
+        }
+
+        /**
+         * Adds or updates an end local (changing its disposition). If
+         * this would cause an empty range for a local, this instead
+         * removes the local entirely.
+         *
+         * @param address {@code >= 0;} the address
+         * @param disposition {@code non-null;} the disposition
+         * @param spec {@code non-null;} spec representing the local
+         */
+        private void addOrUpdateEnd(int address, Disposition disposition,
+                RegisterSpec spec) {
+            if (disposition == Disposition.START) {
+                throw new RuntimeException("shouldn't happen");
+            }
+
+            int regNum = spec.getReg();
+            int endAt = endIndices[regNum];
+
+            if (endAt >= 0) {
+                // There is a previous end.
+                Entry endEntry = result.get(endAt);
+                if ((endEntry.getAddress() == address) &&
+                        endEntry.getRegisterSpec().equals(spec)) {
+                    /*
+                     * The end is for the right address and variable, so
+                     * update it.
+                     */
+                    result.set(endAt, endEntry.withDisposition(disposition));
+                    regs.remove(spec); // TODO: Is this line superfluous?
+                    return;
+                }
+            }
+
+            endLocal(address, spec, disposition);
+        }
+
+        /**
+         * Finishes processing altogether and gets the result.
+         *
+         * @return {@code non-null;} the result list
+         */
+        public LocalList finish() {
+            aboutToProcess(Integer.MAX_VALUE, 0);
+
+            int resultSz = result.size();
+            int finalSz = resultSz - nullResultCount;
+
+            if (finalSz == 0) {
+                return EMPTY;
+            }
+
+            /*
+             * Collect an array of only the non-null entries, and then
+             * sort it to get a consistent order for everything: Local
+             * ends and starts for a given address could come in any
+             * order, but we want ends before starts as well as
+             * registers in order (within ends or starts).
+             */
+
+            Entry[] resultArr = new Entry[finalSz];
+
+            if (resultSz == finalSz) {
+                result.toArray(resultArr);
+            } else {
+                int at = 0;
+                for (Entry e : result) {
+                    if (e != null) {
+                        resultArr[at++] = e;
+                    }
+                }
+            }
+
+            Arrays.sort(resultArr);
+
+            LocalList resultList = new LocalList(finalSz);
+
+            for (int i = 0; i < finalSz; i++) {
+                resultList.set(i, resultArr[i]);
+            }
+
+            resultList.setImmutable();
+            return resultList;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/LocalSnapshot.java b/dx/src/com/android/dx/dex/code/LocalSnapshot.java
new file mode 100644
index 0000000..28c08ef
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/LocalSnapshot.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.RegisterSpecSet;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.ssa.RegisterMapper;
+
+/**
+ * Pseudo-instruction which is used to hold a snapshot of the
+ * state of local variable name mappings that exists immediately after
+ * the instance in an instruction array.
+ */
+public final class LocalSnapshot extends ZeroSizeInsn {
+    /** {@code non-null;} local state associated with this instance */
+    private final RegisterSpecSet locals;
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     * @param locals {@code non-null;} associated local variable state
+     */
+    public LocalSnapshot(SourcePosition position, RegisterSpecSet locals) {
+        super(position);
+
+        if (locals == null) {
+            throw new NullPointerException("locals == null");
+        }
+
+        this.locals = locals;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisterOffset(int delta) {
+        return new LocalSnapshot(getPosition(), locals.withOffset(delta));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new LocalSnapshot(getPosition(), locals);
+    }
+
+    /**
+     * Gets the local state associated with this instance.
+     *
+     * @return {@code non-null;} the state
+     */
+    public RegisterSpecSet getLocals() {
+        return locals;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        return locals.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String listingString0(boolean noteIndices) {
+        int sz = locals.size();
+        int max = locals.getMaxSize();
+        StringBuilder sb = new StringBuilder(100 + sz * 40);
+
+        sb.append("local-snapshot");
+
+        for (int i = 0; i < max; i++) {
+            RegisterSpec spec = locals.get(i);
+            if (spec != null) {
+                sb.append("\n  ");
+                sb.append(LocalStart.localString(spec));
+            }
+        }
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withMapper(RegisterMapper mapper) {
+      return new LocalSnapshot(getPosition(), mapper.map(locals));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/LocalStart.java b/dx/src/com/android/dx/dex/code/LocalStart.java
new file mode 100644
index 0000000..0566cb5
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/LocalStart.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.ssa.RegisterMapper;
+
+/**
+ * Pseudo-instruction which is used to introduce a new local variable. That
+ * is, an instance of this class in an instruction stream indicates that
+ * starting with the subsequent instruction, the indicated variable
+ * is bound.
+ */
+public final class LocalStart extends ZeroSizeInsn {
+    /**
+     * {@code non-null;} register spec representing the local variable introduced
+     * by this instance
+     */
+    private final RegisterSpec local;
+
+    /**
+     * Returns the local variable listing string for a single register spec.
+     *
+     * @param spec {@code non-null;} the spec to convert
+     * @return {@code non-null;} the string form
+     */
+    public static String localString(RegisterSpec spec) {
+        return spec.regString() + ' ' + spec.getLocalItem().toString() + ": " +
+            spec.getTypeBearer().toHuman();
+    }
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     * @param local {@code non-null;} register spec representing the local
+     * variable introduced by this instance
+     */
+    public LocalStart(SourcePosition position, RegisterSpec local) {
+        super(position);
+
+        if (local == null) {
+            throw new NullPointerException("local == null");
+        }
+
+        this.local = local;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisterOffset(int delta) {
+        return new LocalStart(getPosition(), local.withOffset(delta));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new LocalStart(getPosition(), local);
+    }
+
+    /**
+     * Gets the register spec representing the local variable introduced
+     * by this instance.
+     *
+     * @return {@code non-null;} the register spec
+     */
+    public RegisterSpec getLocal() {
+        return local;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        return local.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String listingString0(boolean noteIndices) {
+        return "local-start " + localString(local);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withMapper(RegisterMapper mapper) {
+      return new LocalStart(getPosition(), mapper.map(local));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/MultiCstInsn.java b/dx/src/com/android/dx/dex/code/MultiCstInsn.java
new file mode 100644
index 0000000..28baa3c
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/MultiCstInsn.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.util.Hex;
+
+/**
+ * An instruction with multiple constant arguments in addition
+ * to all the normal instruction information.
+ */
+public final class MultiCstInsn extends FixedSizeInsn {
+    private static final int NOT_SET = -1;
+
+    /** {@code non-null;} the constant argument for this instruction */
+    private final Constant[] constants;
+
+    /**
+     * {@code >= NOT_SET;} the constant pool indicies for {@link #constants}, or
+     * {@code NOT_SET} if not yet set
+     */
+    private final int[] index;
+
+    /**
+     * {@code >= NOT_SET;} the constant pool index for the class reference in
+     * {@link #constants} if any, or {@code NOT_SET} if not yet set
+     */
+    private int classIndex;
+
+    /**
+     * Constructs an instance. The output address of this instance is
+     * initially unknown ({@code -1}) as is the constant pool index.
+     *
+     * @param opcode the opcode; one of the constants from {@link Dops}
+     * @param position {@code non-null;} source position
+     * @param registers {@code non-null;} register list, including a
+     * result register if appropriate (that is, registers may be either
+     * ins or outs)
+     * @param constants {@code non-null;} constants argument
+     */
+    public MultiCstInsn(Dop opcode, SourcePosition position,
+                        RegisterSpecList registers, Constant[] constants) {
+        super(opcode, position, registers);
+
+        if (constants == null) {
+            throw new NullPointerException("constants == null");
+        }
+
+        this.constants = constants;
+        this.index = new int[constants.length];
+        for (int i = 0; i < this.index.length; ++i) {
+            if (constants[i] == null) {
+                throw new NullPointerException("constants[i] == null");
+            }
+            this.index[i] = NOT_SET;
+        }
+        this.classIndex = NOT_SET;
+    }
+
+    private MultiCstInsn(Dop opcode, SourcePosition position,
+            RegisterSpecList registers, Constant[] constants, int[] index,
+            int classIndex) {
+        super(opcode, position, registers);
+        this.constants = constants;
+        this.index = index;
+        this.classIndex = classIndex;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withOpcode(Dop opcode) {
+        return new MultiCstInsn(opcode, getPosition(), getRegisters(),
+                this.constants, this.index, this.classIndex);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new MultiCstInsn(getOpcode(), getPosition(), registers,
+                this.constants, this.index, this.classIndex);
+    }
+
+    /**
+     * Gets the number of constants associated with instruction.
+     * @return the number of constants.
+     */
+    public int getNumberOfConstants() {
+        return constants.length;
+    }
+
+    /**
+     * Gets a constant associated with the instruction.
+     *
+     * @param position the position of the constant to get.
+     * @return {@code non-null;} the constant argument
+     */
+    public Constant getConstant(int position) {
+        return constants[position];
+    }
+
+    /**
+     * Gets the DEX index of a constant. It is only valid to call this after
+     * {@link #setIndex} has been called.
+     *
+     * @param position the position of the constant to get the index for.
+     * @return {@code >= 0;} the constant pool index
+     */
+    public int getIndex(int position) {
+        if (!hasIndex(position)) {
+            throw new IllegalStateException("index not yet set for constant "
+                + position + " value = " + constants[position]);
+        }
+
+        return index[position];
+    }
+
+    /**
+     * Returns whether the DEX index of a constant has been set.
+     *
+     * @param position the position of the constant to test.
+     * @see #setIndex
+     *
+     * @return {@code true} if the index has been set
+     */
+    public boolean hasIndex(int position) {
+        return (index[position] != NOT_SET);
+    }
+
+    /**
+     * Sets the DEX index of a constant. It is only valid to call this method
+     * once per instance.
+     *
+     * @param position the position of the constant to set.
+     * @param index {@code index >= 0;} the constant pool index
+     */
+    public void setIndex(int position, int index) {
+        if (index < 0) {
+            throw new IllegalArgumentException("index < 0");
+        }
+
+        if (hasIndex(position)) {
+            throw new IllegalStateException("index already set");
+        }
+
+        this.index[position] = index;
+    }
+
+    /**
+     * Gets the class index associated with this instance. The class index
+     * may be set only once and for one of the constants associated with this
+     * instance (e.g. a CstMethodRef). It is only valid to
+     * call this after {@link #setClassIndex} has been called.
+     *
+     * @return {@code >= 0;} the constant pool index of the class.
+     */
+    public int getClassIndex() {
+        if (!hasClassIndex()) {
+            throw new IllegalStateException("class index not yet set");
+        }
+
+        return classIndex;
+    }
+
+    /**
+     * Returns whether the class index associated with this instruction has
+     * been set.
+     *
+     * @see #setClassIndex
+     *
+     * @return {@code true} if the index has been set, false otherwise
+     */
+    public boolean hasClassIndex() {
+        return (classIndex != NOT_SET);
+    }
+
+    /**
+     * Sets the class index associated with this instruction. This is the
+     * constant pool index for the class referred to by this instruction. Only
+     * reference constants have a class, so it is only on instances
+     * with reference constants that this method should ever be
+     * called. It is only valid to call this method once per instance.
+     *
+     * @param index {@code index >= 0;} the constant pool index of the class
+     */
+    public void setClassIndex(int index) {
+        if (index < 0) {
+            throw new IllegalArgumentException("index < 0");
+        }
+
+        if (hasClassIndex()) {
+            throw new IllegalStateException("class index already set");
+        }
+
+        this.classIndex = index;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < constants.length; ++i) {
+            if (sb.length() > 0) sb.append(", ");
+            sb.append(constants[i].toHuman());
+        }
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String cstString() {
+        return argString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String cstComment() {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < constants.length; ++i) {
+            if (!hasIndex(i)) {
+                return "";
+            }
+
+            if (i > 0) {
+                sb.append(", ");
+            }
+            sb.append(getConstant(i).typeName());
+            sb.append('@');
+
+            final int currentIndex = getIndex(i);
+            if (currentIndex < 65536) {
+                sb.append(Hex.u2(currentIndex));
+            } else {
+                sb.append(Hex.u4(currentIndex));
+            }
+        }
+        return sb.toString();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/OddSpacer.java b/dx/src/com/android/dx/dex/code/OddSpacer.java
new file mode 100644
index 0000000..f44f9cc
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/OddSpacer.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.io.Opcodes;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Pseudo-instruction which either turns into a {@code nop} or
+ * nothingness, in order to make the subsequent instruction have an
+ * even address. This is used to align (subsequent) instructions that
+ * require it.
+ */
+public final class OddSpacer extends VariableSizeInsn {
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     */
+    public OddSpacer(SourcePosition position) {
+        super(position, RegisterSpecList.EMPTY);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return (getAddress() & 1);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out) {
+        if (codeSize() != 0) {
+            out.writeShort(InsnFormat.codeUnit(Opcodes.NOP, 0));
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new OddSpacer(getPosition());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String listingString0(boolean noteIndices) {
+        if (codeSize() == 0) {
+            return null;
+        }
+
+        return "nop // spacer";
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/OutputCollector.java b/dx/src/com/android/dx/dex/code/OutputCollector.java
new file mode 100644
index 0000000..8c8867a
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/OutputCollector.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.dex.DexOptions;
+import java.util.ArrayList;
+
+/**
+ * Destination for {@link DalvInsn} instances being output. This class
+ * receives and collects instructions in two pieces &mdash; a primary
+ * list and a suffix (generally consisting of adjunct data referred to
+ * by the primary list, such as switch case tables) &mdash; which it
+ * merges and emits back out in the form of a {@link DalvInsnList}
+ * instance.
+ */
+public final class OutputCollector {
+    /**
+     * {@code non-null;} the associated finisher (which holds the instruction
+     * list in-progress)
+     */
+    private final OutputFinisher finisher;
+
+    /**
+     * {@code null-ok;} suffix for the output, or {@code null} if the suffix
+     * has been appended to the main output (by {@link #appendSuffixToOutput})
+     */
+    private ArrayList<DalvInsn> suffix;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param dexOptions {@code non-null;} options for dex output
+     * @param initialCapacity {@code >= 0;} initial capacity of the output list
+     * @param suffixInitialCapacity {@code >= 0;} initial capacity of the output
+     * suffix
+     * @param regCount {@code >= 0;} register count for the method
+     * @param paramSize size, in register units, of all the parameters for this method
+     */
+    public OutputCollector(DexOptions dexOptions, int initialCapacity, int suffixInitialCapacity,
+            int regCount, int paramSize) {
+        this.finisher = new OutputFinisher(dexOptions, initialCapacity, regCount, paramSize);
+        this.suffix = new ArrayList<DalvInsn>(suffixInitialCapacity);
+    }
+
+    /**
+     * Adds an instruction to the output.
+     *
+     * @param insn {@code non-null;} the instruction to add
+     */
+    public void add(DalvInsn insn) {
+        finisher.add(insn);
+    }
+
+    public DalvInsn get(int at) {
+        if (at >= finisher.size() || at < 0) {
+            return null;
+        } else {
+            return finisher.get(at);
+        }
+    }
+
+    public int size() {
+        return finisher.size();
+    }
+
+    /**
+     * Reverses a branch which is buried a given number of instructions
+     * backward in the output. It is illegal to call this unless the
+     * indicated instruction really is a reversible branch.
+     *
+     * @param which how many instructions back to find the branch;
+     * {@code 0} is the most recently added instruction,
+     * {@code 1} is the instruction before that, etc.
+     * @param newTarget {@code non-null;} the new target for the reversed branch
+     */
+    public void reverseBranch(int which, CodeAddress newTarget) {
+        finisher.reverseBranch(which, newTarget);
+    }
+
+    /**
+     * Adds an instruction to the output suffix.
+     *
+     * @param insn {@code non-null;} the instruction to add
+     */
+    public void addSuffix(DalvInsn insn) {
+        suffix.add(insn);
+    }
+
+    /**
+     * Gets the results of all the calls on this instance, in the form of
+     * an {@link OutputFinisher}.
+     *
+     * @return {@code non-null;} the output finisher
+     * @throws UnsupportedOperationException if this method has
+     * already been called
+     */
+    public OutputFinisher getFinisher() {
+        if (suffix == null) {
+            throw new UnsupportedOperationException("already processed");
+        }
+
+        appendSuffixToOutput();
+        return finisher;
+    }
+
+    /**
+     * Helper for {@link #getFinisher}, which appends the suffix to
+     * the primary output.
+     */
+    private void appendSuffixToOutput() {
+        int size = suffix.size();
+
+        for (int i = 0; i < size; i++) {
+            finisher.add(suffix.get(i));
+        }
+
+        suffix = null;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/OutputFinisher.java b/dx/src/com/android/dx/dex/code/OutputFinisher.java
new file mode 100644
index 0000000..82a4725
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/OutputFinisher.java
@@ -0,0 +1,946 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dex.DexException;
+import com.android.dx.dex.DexOptions;
+import com.android.dx.io.Opcodes;
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.RegisterSpecSet;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstMemberRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.ssa.BasicRegisterMapper;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashSet;
+
+/**
+ * Processor for instruction lists, which takes a "first cut" of
+ * instruction selection as a basis and produces a "final cut" in the
+ * form of a {@link DalvInsnList} instance.
+ */
+public final class OutputFinisher {
+    /** {@code non-null;} options for dex output */
+    private final DexOptions dexOptions;
+
+    /**
+     * {@code >= 0;} register count for the method, not including any extra
+     * "reserved" registers needed to translate "difficult" instructions
+     */
+    private final int unreservedRegCount;
+
+    /** {@code non-null;} the list of instructions, per se */
+    private ArrayList<DalvInsn> insns;
+
+    /** whether any instruction has position info */
+    private boolean hasAnyPositionInfo;
+
+    /** whether any instruction has local variable info */
+    private boolean hasAnyLocalInfo;
+
+    /**
+     * {@code >= 0;} the count of reserved registers (low-numbered
+     * registers used when expanding instructions that can't be
+     * represented simply); becomes valid after a call to {@link
+     * #massageInstructions}
+     */
+    private int reservedCount;
+
+    /**
+     * {@code >= 0;} the count of reserved registers just before parameters in order to align them.
+     */
+    private int reservedParameterCount;
+
+    /**
+     * Size, in register units, of all the parameters to this method
+     */
+    private final int paramSize;
+
+    /**
+     * Constructs an instance. It initially contains no instructions.
+     *
+     * @param dexOptions {@code non-null;} options for dex output
+     * @param initialCapacity {@code >= 0;} initial capacity of the
+     * instructions list
+     * @param regCount {@code >= 0;} register count for the method
+     * @param paramSize size, in register units, of all the parameters for this method
+     */
+    public OutputFinisher(DexOptions dexOptions, int initialCapacity, int regCount, int paramSize) {
+        this.dexOptions = dexOptions;
+        this.unreservedRegCount = regCount;
+        this.insns = new ArrayList<DalvInsn>(initialCapacity);
+        this.reservedCount = -1;
+        this.hasAnyPositionInfo = false;
+        this.hasAnyLocalInfo = false;
+        this.paramSize = paramSize;
+    }
+
+    /**
+     * Returns whether any of the instructions added to this instance
+     * come with position info.
+     *
+     * @return whether any of the instructions added to this instance
+     * come with position info
+     */
+    public boolean hasAnyPositionInfo() {
+        return hasAnyPositionInfo;
+    }
+
+    /**
+     * Returns whether this instance has any local variable information.
+     *
+     * @return whether this instance has any local variable information
+     */
+    public boolean hasAnyLocalInfo() {
+        return hasAnyLocalInfo;
+    }
+
+    /**
+     * Helper for {@link #add} which scrutinizes a single
+     * instruction for local variable information.
+     *
+     * @param insn {@code non-null;} instruction to scrutinize
+     * @return {@code true} iff the instruction refers to any
+     * named locals
+     */
+    private static boolean hasLocalInfo(DalvInsn insn) {
+        if (insn instanceof LocalSnapshot) {
+            RegisterSpecSet specs = ((LocalSnapshot) insn).getLocals();
+            int size = specs.size();
+            for (int i = 0; i < size; i++) {
+                if (hasLocalInfo(specs.get(i))) {
+                    return true;
+                }
+            }
+        } else if (insn instanceof LocalStart) {
+            RegisterSpec spec = ((LocalStart) insn).getLocal();
+            if (hasLocalInfo(spec)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Helper for {@link #hasAnyLocalInfo} which scrutinizes a single
+     * register spec.
+     *
+     * @param spec {@code non-null;} spec to scrutinize
+     * @return {@code true} iff the spec refers to any
+     * named locals
+     */
+    private static boolean hasLocalInfo(RegisterSpec spec) {
+        return (spec != null)
+            && (spec.getLocalItem().getName() != null);
+    }
+
+    /**
+     * Returns the set of all constants referred to by instructions added
+     * to this instance.
+     *
+     * @return {@code non-null;} the set of constants
+     */
+    public HashSet<Constant> getAllConstants() {
+        HashSet<Constant> result = new HashSet<Constant>(20);
+
+        for (DalvInsn insn : insns) {
+            addConstants(result, insn);
+        }
+
+        return result;
+    }
+
+    /**
+     * Helper for {@link #getAllConstants} which adds all the info for
+     * a single instruction.
+     *
+     * @param result {@code non-null;} result set to add to
+     * @param insn {@code non-null;} instruction to scrutinize
+     */
+    private static void addConstants(HashSet<Constant> result,
+            DalvInsn insn) {
+        if (insn instanceof CstInsn) {
+            Constant cst = ((CstInsn) insn).getConstant();
+            result.add(cst);
+        } else if (insn instanceof MultiCstInsn) {
+            MultiCstInsn m = (MultiCstInsn) insn;
+            for (int i = 0; i < m.getNumberOfConstants(); i++) {
+                result.add(m.getConstant(i));
+            }
+        } else if (insn instanceof LocalSnapshot) {
+            RegisterSpecSet specs = ((LocalSnapshot) insn).getLocals();
+            int size = specs.size();
+            for (int i = 0; i < size; i++) {
+                addConstants(result, specs.get(i));
+            }
+        } else if (insn instanceof LocalStart) {
+            RegisterSpec spec = ((LocalStart) insn).getLocal();
+            addConstants(result, spec);
+        }
+    }
+
+    /**
+     * Helper for {@link #getAllConstants} which adds all the info for
+     * a single {@code RegisterSpec}.
+     *
+     * @param result {@code non-null;} result set to add to
+     * @param spec {@code null-ok;} register spec to add
+     */
+    private static void addConstants(HashSet<Constant> result,
+            RegisterSpec spec) {
+        if (spec == null) {
+            return;
+        }
+
+        LocalItem local = spec.getLocalItem();
+        CstString name = local.getName();
+        CstString signature = local.getSignature();
+        Type type = spec.getType();
+
+        if (type != Type.KNOWN_NULL) {
+            result.add(CstType.intern(type));
+        } else {
+            /* If this a "known null", let's use "Object" because that's going to be the
+             * resulting type in {@link LocalList.MakeState#filterSpec} */
+            result.add(CstType.intern(Type.OBJECT));
+        }
+
+        if (name != null) {
+            result.add(name);
+        }
+
+        if (signature != null) {
+            result.add(signature);
+        }
+    }
+
+    /**
+     * Adds an instruction to the output.
+     *
+     * @param insn {@code non-null;} the instruction to add
+     */
+    public void add(DalvInsn insn) {
+        insns.add(insn);
+        updateInfo(insn);
+    }
+
+    /**
+     * Inserts an instruction in the output at the given offset.
+     *
+     * @param at {@code at >= 0;} what index to insert at
+     * @param insn {@code non-null;} the instruction to insert
+     */
+    public void insert(int at, DalvInsn insn) {
+        insns.add(at, insn);
+        updateInfo(insn);
+    }
+
+    public DalvInsn get(int at) {
+        return insns.get(at);
+    }
+
+    public int size() {
+        return insns.size();
+    }
+
+    /**
+     * Helper for {@link #add} and {@link #insert},
+     * which updates the position and local info flags.
+     *
+     * @param insn {@code non-null;} an instruction that was just introduced
+     */
+    private void updateInfo(DalvInsn insn) {
+        if (! hasAnyPositionInfo) {
+            SourcePosition pos = insn.getPosition();
+            if (pos.getLine() >= 0) {
+                hasAnyPositionInfo = true;
+            }
+        }
+
+        if (! hasAnyLocalInfo) {
+            if (hasLocalInfo(insn)) {
+                hasAnyLocalInfo = true;
+            }
+        }
+    }
+
+    /**
+     * Reverses a branch which is buried a given number of instructions
+     * backward in the output. It is illegal to call this unless the
+     * indicated instruction really is a reversible branch.
+     *
+     * @param which how many instructions back to find the branch;
+     * {@code 0} is the most recently added instruction,
+     * {@code 1} is the instruction before that, etc.
+     * @param newTarget {@code non-null;} the new target for the
+     * reversed branch
+     */
+    public void reverseBranch(int which, CodeAddress newTarget) {
+        int size = insns.size();
+        int index = size - which - 1;
+        TargetInsn targetInsn;
+
+        try {
+            targetInsn = (TargetInsn) insns.get(index);
+        } catch (IndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("too few instructions");
+        } catch (ClassCastException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("non-reversible instruction");
+        }
+
+        /*
+         * No need to call this.set(), since the format and other info
+         * are the same.
+         */
+        insns.set(index, targetInsn.withNewTargetAndReversed(newTarget));
+    }
+
+    /**
+     * Assigns indices in all instructions that need them, using the
+     * given callback to perform lookups. This should be called before
+     * calling {@link #finishProcessingAndGetList}.
+     *
+     * @param callback {@code non-null;} callback object
+     */
+    public void assignIndices(DalvCode.AssignIndicesCallback callback) {
+        for (DalvInsn insn : insns) {
+            if (insn instanceof CstInsn) {
+                assignIndices((CstInsn) insn, callback);
+            } else if (insn instanceof MultiCstInsn) {
+                assignIndices((MultiCstInsn) insn, callback);
+            }
+        }
+    }
+
+    /**
+     * Helper for {@link #assignIndices} which does assignment for one
+     * instruction.
+     *
+     * @param insn {@code non-null;} the instruction
+     * @param callback {@code non-null;} the callback
+     */
+    private static void assignIndices(CstInsn insn,
+            DalvCode.AssignIndicesCallback callback) {
+        Constant cst = insn.getConstant();
+        int index = callback.getIndex(cst);
+
+        if (index >= 0) {
+            insn.setIndex(index);
+        }
+
+        if (cst instanceof CstMemberRef) {
+            CstMemberRef member = (CstMemberRef) cst;
+            CstType definer = member.getDefiningClass();
+            index = callback.getIndex(definer);
+            // TODO(oth): what scenarios is this guard valid under? Is it not just an error?
+            if (index >= 0) {
+                insn.setClassIndex(index);
+            }
+        }
+    }
+
+    /**
+     * Helper for {@link #assignIndices} which does assignment for one
+     * instruction.
+     *
+     * @param insn {@code non-null;} the instruction
+     * @param callback {@code non-null;} the callback
+     */
+    private static void assignIndices(MultiCstInsn insn, DalvCode.AssignIndicesCallback callback) {
+        for (int i = 0; i < insn.getNumberOfConstants(); ++i) {
+            Constant cst = insn.getConstant(i);
+            int index = callback.getIndex(cst);
+            insn.setIndex(i, index);
+
+            if (cst instanceof CstMemberRef) {
+                CstMemberRef member = (CstMemberRef) cst;
+                CstType definer = member.getDefiningClass();
+                index = callback.getIndex(definer);
+                insn.setClassIndex(index);
+            }
+        }
+    }
+
+    /**
+     * Does final processing on this instance and gets the output as
+     * a {@link DalvInsnList}. Final processing consists of:
+     *
+     * <ul>
+     *   <li>optionally renumbering registers (to make room as needed for
+     *   expanded instructions)</li>
+     *   <li>picking a final opcode for each instruction</li>
+     *   <li>rewriting instructions, because of register number,
+     *   constant pool index, or branch target size issues</li>
+     *   <li>assigning final addresses</li>
+     * </ul>
+     *
+     * <p><b>Note:</b> This method may only be called once per instance
+     * of this class.</p>
+     *
+     * @return {@code non-null;} the output list
+     * @throws UnsupportedOperationException if this method has
+     * already been called
+     */
+    public DalvInsnList finishProcessingAndGetList() {
+        if (reservedCount >= 0) {
+            throw new UnsupportedOperationException("already processed");
+        }
+
+        Dop[] opcodes = makeOpcodesArray();
+        reserveRegisters(opcodes);
+        if (dexOptions.ALIGN_64BIT_REGS_IN_OUTPUT_FINISHER) {
+          align64bits(opcodes);
+        }
+        massageInstructions(opcodes);
+        assignAddressesAndFixBranches();
+
+        return DalvInsnList.makeImmutable(insns, reservedCount + unreservedRegCount
+            + reservedParameterCount);
+    }
+
+    /**
+     * Helper for {@link #finishProcessingAndGetList}, which extracts
+     * the opcode out of each instruction into a separate array, to be
+     * further manipulated as things progress.
+     *
+     * @return {@code non-null;} the array of opcodes
+     */
+    private Dop[] makeOpcodesArray() {
+        int size = insns.size();
+        Dop[] result = new Dop[size];
+
+        for (int i = 0; i < size; i++) {
+            DalvInsn insn = insns.get(i);
+            result[i] = insn.getOpcode();
+        }
+
+        return result;
+    }
+
+    /**
+     * Helper for {@link #finishProcessingAndGetList}, which figures
+     * out how many reserved registers are required and then reserving
+     * them. It also updates the given {@code opcodes} array so
+     * as to avoid extra work when constructing the massaged
+     * instruction list.
+     *
+     * @param opcodes {@code non-null;} array of per-instruction
+     * opcode selections
+     * @return true if reservedCount is expanded, false otherwise
+     */
+    private boolean reserveRegisters(Dop[] opcodes) {
+        boolean reservedCountExpanded = false;
+        int oldReservedCount = (reservedCount < 0) ? 0 : reservedCount;
+
+        /*
+         * Call calculateReservedCount() and then perform register
+         * reservation, repeatedly until no new reservations happen.
+         */
+        for (;;) {
+            int newReservedCount = calculateReservedCount(opcodes);
+            if (oldReservedCount >= newReservedCount) {
+                break;
+            }
+
+            reservedCountExpanded = true;
+
+            int reservedDifference = newReservedCount - oldReservedCount;
+            int size = insns.size();
+
+            for (int i = 0; i < size; i++) {
+                /*
+                 * CodeAddress instance identity is used to link
+                 * TargetInsns to their targets, so it is
+                 * inappropriate to make replacements, and they don't
+                 * have registers in any case. Hence, the instanceof
+                 * test below.
+                 */
+                DalvInsn insn = insns.get(i);
+                if (!(insn instanceof CodeAddress)) {
+                    /*
+                     * No need to call this.set() since the format and
+                     * other info are the same.
+                     */
+                    insns.set(i, insn.withRegisterOffset(reservedDifference));
+                }
+            }
+
+            oldReservedCount = newReservedCount;
+        }
+
+        reservedCount = oldReservedCount;
+
+        return reservedCountExpanded;
+    }
+
+    /**
+     * Helper for {@link #reserveRegisters}, which does one
+     * pass over the instructions, calculating the number of
+     * registers that need to be reserved. It also updates the
+     * {@code opcodes} list to help avoid extra work in future
+     * register reservation passes.
+     *
+     * @param opcodes {@code non-null;} array of per-instruction
+     * opcode selections
+     * @return {@code >= 0;} the count of reserved registers
+     */
+    private int calculateReservedCount(Dop[] opcodes) {
+        int size = insns.size();
+
+        /*
+         * Potential new value of reservedCount, which gets updated in the
+         * following loop. It starts out with the existing reservedCount
+         * and gets increased if it turns out that additional registers
+         * need to be reserved.
+         */
+        int newReservedCount = reservedCount;
+
+        for (int i = 0; i < size; i++) {
+            DalvInsn insn = insns.get(i);
+            Dop originalOpcode = opcodes[i];
+            Dop newOpcode = findOpcodeForInsn(insn, originalOpcode);
+
+            if (newOpcode == null) {
+                /*
+                 * The instruction will need to be expanded, so find the
+                 * expanded opcode and reserve registers for it.
+                 */
+                Dop expandedOp = findExpandedOpcodeForInsn(insn);
+                BitSet compatRegs = expandedOp.getFormat().compatibleRegs(insn);
+                int reserve = insn.getMinimumRegisterRequirement(compatRegs);
+                if (reserve > newReservedCount) {
+                    newReservedCount = reserve;
+                }
+            } else if (originalOpcode == newOpcode) {
+                continue;
+            }
+
+            opcodes[i] = newOpcode;
+        }
+
+        return newReservedCount;
+    }
+
+    /**
+     * Attempts to fit the given instruction into a specific opcode,
+     * returning the opcode whose format that the instruction fits
+     * into or {@code null} to indicate that the instruction will need
+     * to be expanded. This fitting process starts with the given
+     * opcode as a first "best guess" and then pessimizes from there
+     * if necessary.
+     *
+     * @param insn {@code non-null;} the instruction in question
+     * @param guess {@code null-ok;} the current guess as to the best
+     * opcode; {@code null} means that no simple opcode fits
+     * @return {@code null-ok;} a possibly-different opcode; either a
+     * {@code non-null} good fit or {@code null} to indicate that no
+     * simple opcode fits
+     */
+    private Dop findOpcodeForInsn(DalvInsn insn, Dop guess) {
+        /*
+         * Note: The initial guess might be null, meaning that an
+         * earlier call to this method already determined that there
+         * was no possible simple opcode fit.
+         */
+
+        while (guess != null) {
+            if (guess.getFormat().isCompatible(insn)) {
+                /*
+                 * Don't break out for const_string to generate jumbo version
+                 * when option is enabled.
+                 */
+                if (!dexOptions.forceJumbo ||
+                    guess.getOpcode() != Opcodes.CONST_STRING) {
+                    break;
+                }
+            }
+
+            guess = Dops.getNextOrNull(guess, dexOptions);
+        }
+
+        return guess;
+    }
+
+    /**
+     * Finds the proper opcode for the given instruction, ignoring
+     * register constraints.
+     *
+     * @param insn {@code non-null;} the instruction in question
+     * @return {@code non-null;} the opcode that fits
+     */
+    private Dop findExpandedOpcodeForInsn(DalvInsn insn) {
+        Dop result = findOpcodeForInsn(insn.getLowRegVersion(), insn.getOpcode());
+        if (result == null) {
+            throw new DexException("No expanded opcode for " + insn);
+        }
+        return result;
+    }
+
+    /**
+     * Helper for {@link #finishProcessingAndGetList}, which goes
+     * through each instruction in the output, making sure its opcode
+     * can accomodate its arguments. In cases where the opcode is
+     * unable to do so, this replaces the instruction with a larger
+     * instruction with identical semantics that <i>will</i> work.
+     *
+     * <p>This method may also reserve a number of low-numbered
+     * registers, renumbering the instructions' original registers, in
+     * order to have register space available in which to move
+     * very-high registers when expanding instructions into
+     * multi-instruction sequences. This expansion is done when no
+     * simple instruction format can be found for a given instruction that
+     * is able to accomodate that instruction's registers.</p>
+     *
+     * <p>This method ignores issues of branch target size, since
+     * final addresses aren't known at the point that this method is
+     * called.</p>
+     *
+     * @param opcodes {@code non-null;} array of per-instruction
+     * opcode selections
+     */
+    private void massageInstructions(Dop[] opcodes) {
+        if (reservedCount == 0) {
+            /*
+             * The easy common case: No registers were reserved, so we
+             * merely need to replace any instructions whose format
+             * (and hence whose opcode) changed during the reservation
+             * pass, but all instructions will stay at their original
+             * indices, and the instruction list doesn't grow.
+             */
+            int size = insns.size();
+
+            for (int i = 0; i < size; i++) {
+                DalvInsn insn = insns.get(i);
+                Dop originalOpcode = insn.getOpcode();
+                Dop currentOpcode = opcodes[i];
+
+                if (originalOpcode != currentOpcode) {
+                    insns.set(i, insn.withOpcode(currentOpcode));
+                }
+            }
+        } else {
+            /*
+             * The difficult uncommon case: Some instructions have to be
+             * expanded to deal with high registers.
+             */
+            insns = performExpansion(opcodes);
+        }
+    }
+
+    /**
+     * Helper for {@link #massageInstructions}, which constructs a
+     * replacement list, where each {link DalvInsn} instance that
+     * couldn't be represented simply (due to register representation
+     * problems) is expanded into a series of instances that together
+     * perform the proper function.
+     *
+     * @param opcodes {@code non-null;} array of per-instruction
+     * opcode selections
+     * @return {@code non-null;} the replacement list
+     */
+    private ArrayList<DalvInsn> performExpansion(Dop[] opcodes) {
+        int size = insns.size();
+        ArrayList<DalvInsn> result = new ArrayList<DalvInsn>(size * 2);
+
+        ArrayList<CodeAddress> closelyBoundAddresses = new ArrayList<CodeAddress>();
+
+        for (int i = 0; i < size; i++) {
+            DalvInsn insn = insns.get(i);
+            Dop originalOpcode = insn.getOpcode();
+            Dop currentOpcode = opcodes[i];
+            DalvInsn prefix;
+            DalvInsn suffix;
+
+            if (currentOpcode != null) {
+                // No expansion is necessary.
+                prefix = null;
+                suffix = null;
+            } else {
+                // Expansion is required.
+                currentOpcode = findExpandedOpcodeForInsn(insn);
+                BitSet compatRegs =
+                    currentOpcode.getFormat().compatibleRegs(insn);
+                prefix = insn.expandedPrefix(compatRegs);
+                suffix = insn.expandedSuffix(compatRegs);
+
+                // Expand necessary registers to fit the new format
+                insn = insn.expandedVersion(compatRegs);
+            }
+
+            if (insn instanceof CodeAddress) {
+                // If we have a closely bound address, don't add it yet,
+                // because we need to add it after the prefix for the
+                // instruction it is bound to.
+                if (((CodeAddress) insn).getBindsClosely()) {
+                    closelyBoundAddresses.add((CodeAddress)insn);
+                    continue;
+                }
+            }
+
+            if (prefix != null) {
+                result.add(prefix);
+            }
+
+            // Add any pending closely bound addresses
+            if (!(insn instanceof ZeroSizeInsn) && closelyBoundAddresses.size() > 0) {
+                for (CodeAddress codeAddress: closelyBoundAddresses) {
+                    result.add(codeAddress);
+                }
+                closelyBoundAddresses.clear();
+            }
+
+            if (currentOpcode != originalOpcode) {
+                insn = insn.withOpcode(currentOpcode);
+            }
+            result.add(insn);
+
+            if (suffix != null) {
+                result.add(suffix);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Helper for {@link #finishProcessingAndGetList}, which assigns
+     * addresses to each instruction, possibly rewriting branches to
+     * fix ones that wouldn't otherwise be able to reach their
+     * targets.
+     */
+    private void assignAddressesAndFixBranches() {
+        for (;;) {
+            assignAddresses();
+            if (!fixBranches()) {
+                break;
+            }
+        }
+    }
+
+    /**
+     * Helper for {@link #assignAddressesAndFixBranches}, which
+     * assigns an address to each instruction, in order.
+     */
+    private void assignAddresses() {
+        int address = 0;
+        int size = insns.size();
+
+        for (int i = 0; i < size; i++) {
+            DalvInsn insn = insns.get(i);
+            insn.setAddress(address);
+            address += insn.codeSize();
+        }
+    }
+
+    /**
+     * Helper for {@link #assignAddressesAndFixBranches}, which checks
+     * the branch target size requirement of each branch instruction
+     * to make sure it fits. For instructions that don't fit, this
+     * rewrites them to use a {@code goto} of some sort. In the
+     * case of a conditional branch that doesn't fit, the sense of the
+     * test is reversed in order to branch around a {@code goto}
+     * to the original target.
+     *
+     * @return whether any branches had to be fixed
+     */
+    private boolean fixBranches() {
+        int size = insns.size();
+        boolean anyFixed = false;
+
+        for (int i = 0; i < size; i++) {
+            DalvInsn insn = insns.get(i);
+            if (!(insn instanceof TargetInsn)) {
+                // This loop only needs to inspect TargetInsns.
+                continue;
+            }
+
+            Dop opcode = insn.getOpcode();
+            TargetInsn target = (TargetInsn) insn;
+
+            if (opcode.getFormat().branchFits(target)) {
+                continue;
+            }
+
+            if (opcode.getFamily() == Opcodes.GOTO) {
+                // It is a goto; widen it if possible.
+                opcode = findOpcodeForInsn(insn, opcode);
+                if (opcode == null) {
+                    /*
+                     * The branch is already maximally large. This should
+                     * only be possible if a method somehow manages to have
+                     * more than 2^31 code units.
+                     */
+                    throw new UnsupportedOperationException("method too long");
+                }
+                insns.set(i, insn.withOpcode(opcode));
+            } else {
+                /*
+                 * It is a conditional: Reverse its sense, and arrange for
+                 * it to branch around an absolute goto to the original
+                 * branch target.
+                 *
+                 * Note: An invariant of the list being processed is
+                 * that every TargetInsn is followed by a CodeAddress.
+                 * Hence, it is always safe to get the next element
+                 * after a TargetInsn and cast it to CodeAddress, as
+                 * is happening a few lines down.
+                 *
+                 * Also note: Size gets incremented by one here, as we
+                 * have -- in the net -- added one additional element
+                 * to the list, so we increment i to match. The added
+                 * and changed elements will be inspected by a repeat
+                 * call to this method after this invocation returns.
+                 */
+                CodeAddress newTarget;
+                try {
+                    newTarget = (CodeAddress) insns.get(i + 1);
+                } catch (IndexOutOfBoundsException ex) {
+                    // The TargetInsn / CodeAddress invariant was violated.
+                    throw new IllegalStateException(
+                            "unpaired TargetInsn (dangling)");
+                } catch (ClassCastException ex) {
+                    // The TargetInsn / CodeAddress invariant was violated.
+                    throw new IllegalStateException("unpaired TargetInsn");
+                }
+                TargetInsn gotoInsn =
+                    new TargetInsn(Dops.GOTO, target.getPosition(),
+                            RegisterSpecList.EMPTY, target.getTarget());
+                insns.set(i, gotoInsn);
+                insns.add(i, target.withNewTargetAndReversed(newTarget));
+                size++;
+                i++;
+            }
+
+            anyFixed = true;
+        }
+
+        return anyFixed;
+    }
+
+    private void align64bits(Dop[] opcodes) {
+      while (true) {
+        int notAligned64bitRegAccess = 0;
+        int aligned64bitRegAccess = 0;
+        int notAligned64bitParamAccess = 0;
+        int aligned64bitParamAccess = 0;
+        int lastParameter = unreservedRegCount + reservedCount + reservedParameterCount;
+        int firstParameter = lastParameter - paramSize;
+
+        // Collects the number of time that 64-bit registers are accessed aligned or not.
+        for (DalvInsn insn : insns) {
+          RegisterSpecList regs = insn.getRegisters();
+          for (int usedRegIdx = 0; usedRegIdx < regs.size(); usedRegIdx++) {
+            RegisterSpec reg = regs.get(usedRegIdx);
+            if (reg.isCategory2()) {
+              boolean isParameter = reg.getReg() >= firstParameter;
+              if (reg.isEvenRegister()) {
+                if (isParameter) {
+                  aligned64bitParamAccess++;
+                } else {
+                  aligned64bitRegAccess++;
+                }
+              } else {
+                if (isParameter) {
+                  notAligned64bitParamAccess++;
+                } else {
+                  notAligned64bitRegAccess++;
+                }
+              }
+            }
+          }
+        }
+
+        if (notAligned64bitParamAccess > aligned64bitParamAccess
+            && notAligned64bitRegAccess > aligned64bitRegAccess) {
+          addReservedRegisters(1);
+        } else if (notAligned64bitParamAccess > aligned64bitParamAccess) {
+          addReservedParameters(1);
+        } else if (notAligned64bitRegAccess > aligned64bitRegAccess) {
+          addReservedRegisters(1);
+
+          // Need to shift parameters if they exist and if number of unaligned is greater than
+          // aligned. We test the opposite because we previously shift all registers by one,
+          // so the number of aligned become the number of unaligned.
+          if (paramSize != 0 && aligned64bitParamAccess > notAligned64bitParamAccess) {
+            addReservedParameters(1);
+          }
+        } else {
+          break;
+        }
+
+        if (!reserveRegisters(opcodes)) {
+          break;
+        }
+      }
+    }
+
+    private void addReservedParameters(int delta) {
+      shiftParameters(delta);
+      reservedParameterCount += delta;
+    }
+
+    private void addReservedRegisters(int delta) {
+      shiftAllRegisters(delta);
+      reservedCount += delta;
+    }
+
+    private void shiftAllRegisters(int delta) {
+      int insnSize = insns.size();
+
+      for (int i = 0; i < insnSize; i++) {
+        DalvInsn insn = insns.get(i);
+        // Since there is no need to replace CodeAddress since it does not use registers, skips it to
+        // avoid to update all TargetInsn that contain a reference to CodeAddress
+        if (!(insn instanceof CodeAddress)) {
+          insns.set(i, insn.withRegisterOffset(delta));
+        }
+      }
+    }
+
+    private void shiftParameters(int delta) {
+      int insnSize = insns.size();
+      int lastParameter = unreservedRegCount + reservedCount + reservedParameterCount;
+      int firstParameter = lastParameter - paramSize;
+
+      BasicRegisterMapper mapper = new BasicRegisterMapper(lastParameter);
+      for (int i = 0; i < lastParameter; i++) {
+        if (i >= firstParameter) {
+          mapper.addMapping(i, i + delta, 1);
+        } else {
+          mapper.addMapping(i, i, 1);
+        }
+      }
+
+      for (int i = 0; i < insnSize; i++) {
+        DalvInsn insn = insns.get(i);
+        // Since there is no need to replace CodeAddress since it does not use registers, skips it to
+        // avoid to update all TargetInsn that contain a reference to CodeAddress
+        if (!(insn instanceof CodeAddress)) {
+          insns.set(i, insn.withMapper(mapper));
+        }
+      }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/PositionList.java b/dx/src/com/android/dx/dex/code/PositionList.java
new file mode 100644
index 0000000..1e07e46
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/PositionList.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * List of source position entries. This class includes a utility
+ * method to extract an instance out of a {@link DalvInsnList}.
+ */
+public final class PositionList extends FixedSizeList {
+    /** {@code non-null;} empty instance */
+    public static final PositionList EMPTY = new PositionList(0);
+
+    /**
+     * constant for {@link #make} to indicate that no actual position
+     * information should be returned
+     */
+    public static final int NONE = 1;
+
+    /**
+     * constant for {@link #make} to indicate that only line number
+     * transitions should be returned
+     */
+    public static final int LINES = 2;
+
+    /**
+     * constant for {@link #make} to indicate that only "important" position
+     * information should be returned. This includes block starts and
+     * instructions that might throw.
+     */
+    public static final int IMPORTANT = 3;
+
+    /**
+     * Extracts and returns the source position information out of an
+     * instruction list.
+     *
+     * @param insns {@code non-null;} instructions to convert
+     * @param howMuch how much information should be included; one of the
+     * static constants defined by this class
+     * @return {@code non-null;} the positions list
+     */
+    public static PositionList make(DalvInsnList insns, int howMuch) {
+        switch (howMuch) {
+            case NONE: {
+                return EMPTY;
+            }
+            case LINES:
+            case IMPORTANT: {
+                // Valid.
+                break;
+            }
+            default: {
+                throw new IllegalArgumentException("bogus howMuch");
+            }
+        }
+
+        SourcePosition noInfo = SourcePosition.NO_INFO;
+        SourcePosition cur = noInfo;
+        int sz = insns.size();
+        PositionList.Entry[] arr = new PositionList.Entry[sz];
+        boolean lastWasTarget = false;
+        int at = 0;
+
+        for (int i = 0; i < sz; i++) {
+            DalvInsn insn = insns.get(i);
+
+            if (insn instanceof CodeAddress) {
+                lastWasTarget = true;;
+                continue;
+            }
+
+            SourcePosition pos = insn.getPosition();
+
+            if (pos.equals(noInfo) || pos.sameLine(cur)) {
+                continue;
+            }
+
+            if ((howMuch == IMPORTANT) && !lastWasTarget) {
+                continue;
+            }
+
+            cur = pos;
+            arr[at] = new PositionList.Entry(insn.getAddress(), pos);
+            at++;
+
+            lastWasTarget = false;
+        }
+
+        PositionList result = new PositionList(at);
+        for (int i = 0; i < at; i++) {
+            result.set(i, arr[i]);
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size {@code >= 0;} the size of the list
+     */
+    public PositionList(int size) {
+        super(size);
+    }
+
+    /**
+     * Gets the element at the given index. It is an error to call
+     * this with the index for an element which was never set; if you
+     * do that, this will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @return {@code non-null;} element at that index
+     */
+    public Entry get(int n) {
+        return (Entry) get0(n);
+    }
+
+    /**
+     * Sets the entry at the given index.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param entry {@code non-null;} the entry to set at {@code n}
+     */
+    public void set(int n, Entry entry) {
+        set0(n, entry);
+    }
+
+    /**
+     * Entry in a position list.
+     */
+    public static class Entry {
+        /** {@code >= 0;} address of this entry */
+        private final int address;
+
+        /** {@code non-null;} corresponding source position information */
+        private final SourcePosition position;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param address {@code >= 0;} address of this entry
+         * @param position {@code non-null;} corresponding source position information
+         */
+        public Entry (int address, SourcePosition position) {
+            if (address < 0) {
+                throw new IllegalArgumentException("address < 0");
+            }
+
+            if (position == null) {
+                throw new NullPointerException("position == null");
+            }
+
+            this.address = address;
+            this.position = position;
+        }
+
+        /**
+         * Gets the address.
+         *
+         * @return {@code >= 0;} the address
+         */
+        public int getAddress() {
+            return address;
+        }
+
+        /**
+         * Gets the source position information.
+         *
+         * @return {@code non-null;} the position information
+         */
+        public SourcePosition getPosition() {
+            return position;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/RopToDop.java b/dx/src/com/android/dx/dex/code/RopToDop.java
new file mode 100644
index 0000000..082d051
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/RopToDop.java
@@ -0,0 +1,599 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.ThrowingCstInsn;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import java.util.HashMap;
+
+/**
+ * Translator from rop-level {@link Insn} instances to corresponding
+ * {@link Dop} instances.
+ */
+public final class RopToDop {
+    /** {@code non-null;} map from all the common rops to dalvik opcodes */
+    private static final HashMap<Rop, Dop> MAP;
+
+    /**
+     * This class is uninstantiable.
+     */
+    private RopToDop() {
+        // This space intentionally left blank.
+    }
+
+    /*
+     * The following comment lists each opcode that should be considered
+     * the "head" of an opcode chain, in terms of the process of fitting
+     * an instruction's arguments to an actual opcode. This list is
+     * automatically generated and may be of use in double-checking the
+     * manually-generated static initialization code for this class.
+     *
+     * TODO: Make opcode-gen produce useful code in this case instead
+     * of just a comment.
+     */
+
+    // BEGIN(first-opcodes); GENERATED AUTOMATICALLY BY opcode-gen
+    //     Opcodes.NOP
+    //     Opcodes.MOVE
+    //     Opcodes.MOVE_WIDE
+    //     Opcodes.MOVE_OBJECT
+    //     Opcodes.MOVE_RESULT
+    //     Opcodes.MOVE_RESULT_WIDE
+    //     Opcodes.MOVE_RESULT_OBJECT
+    //     Opcodes.MOVE_EXCEPTION
+    //     Opcodes.RETURN_VOID
+    //     Opcodes.RETURN
+    //     Opcodes.RETURN_WIDE
+    //     Opcodes.RETURN_OBJECT
+    //     Opcodes.CONST_4
+    //     Opcodes.CONST_WIDE_16
+    //     Opcodes.CONST_STRING
+    //     Opcodes.CONST_CLASS
+    //     Opcodes.MONITOR_ENTER
+    //     Opcodes.MONITOR_EXIT
+    //     Opcodes.CHECK_CAST
+    //     Opcodes.INSTANCE_OF
+    //     Opcodes.ARRAY_LENGTH
+    //     Opcodes.NEW_INSTANCE
+    //     Opcodes.NEW_ARRAY
+    //     Opcodes.FILLED_NEW_ARRAY
+    //     Opcodes.FILL_ARRAY_DATA
+    //     Opcodes.THROW
+    //     Opcodes.GOTO
+    //     Opcodes.PACKED_SWITCH
+    //     Opcodes.SPARSE_SWITCH
+    //     Opcodes.CMPL_FLOAT
+    //     Opcodes.CMPG_FLOAT
+    //     Opcodes.CMPL_DOUBLE
+    //     Opcodes.CMPG_DOUBLE
+    //     Opcodes.CMP_LONG
+    //     Opcodes.IF_EQ
+    //     Opcodes.IF_NE
+    //     Opcodes.IF_LT
+    //     Opcodes.IF_GE
+    //     Opcodes.IF_GT
+    //     Opcodes.IF_LE
+    //     Opcodes.IF_EQZ
+    //     Opcodes.IF_NEZ
+    //     Opcodes.IF_LTZ
+    //     Opcodes.IF_GEZ
+    //     Opcodes.IF_GTZ
+    //     Opcodes.IF_LEZ
+    //     Opcodes.AGET
+    //     Opcodes.AGET_WIDE
+    //     Opcodes.AGET_OBJECT
+    //     Opcodes.AGET_BOOLEAN
+    //     Opcodes.AGET_BYTE
+    //     Opcodes.AGET_CHAR
+    //     Opcodes.AGET_SHORT
+    //     Opcodes.APUT
+    //     Opcodes.APUT_WIDE
+    //     Opcodes.APUT_OBJECT
+    //     Opcodes.APUT_BOOLEAN
+    //     Opcodes.APUT_BYTE
+    //     Opcodes.APUT_CHAR
+    //     Opcodes.APUT_SHORT
+    //     Opcodes.IGET
+    //     Opcodes.IGET_WIDE
+    //     Opcodes.IGET_OBJECT
+    //     Opcodes.IGET_BOOLEAN
+    //     Opcodes.IGET_BYTE
+    //     Opcodes.IGET_CHAR
+    //     Opcodes.IGET_SHORT
+    //     Opcodes.IPUT
+    //     Opcodes.IPUT_WIDE
+    //     Opcodes.IPUT_OBJECT
+    //     Opcodes.IPUT_BOOLEAN
+    //     Opcodes.IPUT_BYTE
+    //     Opcodes.IPUT_CHAR
+    //     Opcodes.IPUT_SHORT
+    //     Opcodes.SGET
+    //     Opcodes.SGET_WIDE
+    //     Opcodes.SGET_OBJECT
+    //     Opcodes.SGET_BOOLEAN
+    //     Opcodes.SGET_BYTE
+    //     Opcodes.SGET_CHAR
+    //     Opcodes.SGET_SHORT
+    //     Opcodes.SPUT
+    //     Opcodes.SPUT_WIDE
+    //     Opcodes.SPUT_OBJECT
+    //     Opcodes.SPUT_BOOLEAN
+    //     Opcodes.SPUT_BYTE
+    //     Opcodes.SPUT_CHAR
+    //     Opcodes.SPUT_SHORT
+    //     Opcodes.INVOKE_VIRTUAL
+    //     Opcodes.INVOKE_SUPER
+    //     Opcodes.INVOKE_DIRECT
+    //     Opcodes.INVOKE_STATIC
+    //     Opcodes.INVOKE_INTERFACE
+    //     Opcodes.NEG_INT
+    //     Opcodes.NOT_INT
+    //     Opcodes.NEG_LONG
+    //     Opcodes.NOT_LONG
+    //     Opcodes.NEG_FLOAT
+    //     Opcodes.NEG_DOUBLE
+    //     Opcodes.INT_TO_LONG
+    //     Opcodes.INT_TO_FLOAT
+    //     Opcodes.INT_TO_DOUBLE
+    //     Opcodes.LONG_TO_INT
+    //     Opcodes.LONG_TO_FLOAT
+    //     Opcodes.LONG_TO_DOUBLE
+    //     Opcodes.FLOAT_TO_INT
+    //     Opcodes.FLOAT_TO_LONG
+    //     Opcodes.FLOAT_TO_DOUBLE
+    //     Opcodes.DOUBLE_TO_INT
+    //     Opcodes.DOUBLE_TO_LONG
+    //     Opcodes.DOUBLE_TO_FLOAT
+    //     Opcodes.INT_TO_BYTE
+    //     Opcodes.INT_TO_CHAR
+    //     Opcodes.INT_TO_SHORT
+    //     Opcodes.ADD_INT_2ADDR
+    //     Opcodes.SUB_INT_2ADDR
+    //     Opcodes.MUL_INT_2ADDR
+    //     Opcodes.DIV_INT_2ADDR
+    //     Opcodes.REM_INT_2ADDR
+    //     Opcodes.AND_INT_2ADDR
+    //     Opcodes.OR_INT_2ADDR
+    //     Opcodes.XOR_INT_2ADDR
+    //     Opcodes.SHL_INT_2ADDR
+    //     Opcodes.SHR_INT_2ADDR
+    //     Opcodes.USHR_INT_2ADDR
+    //     Opcodes.ADD_LONG_2ADDR
+    //     Opcodes.SUB_LONG_2ADDR
+    //     Opcodes.MUL_LONG_2ADDR
+    //     Opcodes.DIV_LONG_2ADDR
+    //     Opcodes.REM_LONG_2ADDR
+    //     Opcodes.AND_LONG_2ADDR
+    //     Opcodes.OR_LONG_2ADDR
+    //     Opcodes.XOR_LONG_2ADDR
+    //     Opcodes.SHL_LONG_2ADDR
+    //     Opcodes.SHR_LONG_2ADDR
+    //     Opcodes.USHR_LONG_2ADDR
+    //     Opcodes.ADD_FLOAT_2ADDR
+    //     Opcodes.SUB_FLOAT_2ADDR
+    //     Opcodes.MUL_FLOAT_2ADDR
+    //     Opcodes.DIV_FLOAT_2ADDR
+    //     Opcodes.REM_FLOAT_2ADDR
+    //     Opcodes.ADD_DOUBLE_2ADDR
+    //     Opcodes.SUB_DOUBLE_2ADDR
+    //     Opcodes.MUL_DOUBLE_2ADDR
+    //     Opcodes.DIV_DOUBLE_2ADDR
+    //     Opcodes.REM_DOUBLE_2ADDR
+    //     Opcodes.ADD_INT_LIT8
+    //     Opcodes.RSUB_INT_LIT8
+    //     Opcodes.MUL_INT_LIT8
+    //     Opcodes.DIV_INT_LIT8
+    //     Opcodes.REM_INT_LIT8
+    //     Opcodes.AND_INT_LIT8
+    //     Opcodes.OR_INT_LIT8
+    //     Opcodes.XOR_INT_LIT8
+    //     Opcodes.SHL_INT_LIT8
+    //     Opcodes.SHR_INT_LIT8
+    //     Opcodes.USHR_INT_LIT8
+    //     Opcodes.INVOKE_POLYMORPHIC
+    //     Opcodes.INVOKE_CUSTOM
+    //     Opcodes.CONST_METHOD_HANDLE
+    //     Opcodes.CONST_METHOD_TYPE
+    // END(first-opcodes)
+
+    static {
+        /*
+         * Note: The choices made here are to pick the optimistically
+         * smallest Dalvik opcode, and leave it to later processing to
+         * pessimize. See the automatically-generated comment above
+         * for reference.
+         */
+        MAP = new HashMap<Rop, Dop>(400);
+        MAP.put(Rops.NOP,               Dops.NOP);
+        MAP.put(Rops.MOVE_INT,          Dops.MOVE);
+        MAP.put(Rops.MOVE_LONG,         Dops.MOVE_WIDE);
+        MAP.put(Rops.MOVE_FLOAT,        Dops.MOVE);
+        MAP.put(Rops.MOVE_DOUBLE,       Dops.MOVE_WIDE);
+        MAP.put(Rops.MOVE_OBJECT,       Dops.MOVE_OBJECT);
+        MAP.put(Rops.MOVE_PARAM_INT,    Dops.MOVE);
+        MAP.put(Rops.MOVE_PARAM_LONG,   Dops.MOVE_WIDE);
+        MAP.put(Rops.MOVE_PARAM_FLOAT,  Dops.MOVE);
+        MAP.put(Rops.MOVE_PARAM_DOUBLE, Dops.MOVE_WIDE);
+        MAP.put(Rops.MOVE_PARAM_OBJECT, Dops.MOVE_OBJECT);
+
+        /*
+         * Note: No entry for MOVE_EXCEPTION, since it varies by
+         * exception type. (That is, there is no unique instance to
+         * add to the map.)
+         */
+
+        MAP.put(Rops.CONST_INT,         Dops.CONST_4);
+        MAP.put(Rops.CONST_LONG,        Dops.CONST_WIDE_16);
+        MAP.put(Rops.CONST_FLOAT,       Dops.CONST_4);
+        MAP.put(Rops.CONST_DOUBLE,      Dops.CONST_WIDE_16);
+
+        /*
+         * Note: No entry for CONST_OBJECT, since it needs to turn
+         * into either CONST_STRING or CONST_CLASS.
+         */
+
+        /*
+         * TODO: I think the only case of this is for null, and
+         * const/4 should cover that.
+         */
+        MAP.put(Rops.CONST_OBJECT_NOTHROW, Dops.CONST_4);
+
+        MAP.put(Rops.GOTO,                 Dops.GOTO);
+        MAP.put(Rops.IF_EQZ_INT,           Dops.IF_EQZ);
+        MAP.put(Rops.IF_NEZ_INT,           Dops.IF_NEZ);
+        MAP.put(Rops.IF_LTZ_INT,           Dops.IF_LTZ);
+        MAP.put(Rops.IF_GEZ_INT,           Dops.IF_GEZ);
+        MAP.put(Rops.IF_LEZ_INT,           Dops.IF_LEZ);
+        MAP.put(Rops.IF_GTZ_INT,           Dops.IF_GTZ);
+        MAP.put(Rops.IF_EQZ_OBJECT,        Dops.IF_EQZ);
+        MAP.put(Rops.IF_NEZ_OBJECT,        Dops.IF_NEZ);
+        MAP.put(Rops.IF_EQ_INT,            Dops.IF_EQ);
+        MAP.put(Rops.IF_NE_INT,            Dops.IF_NE);
+        MAP.put(Rops.IF_LT_INT,            Dops.IF_LT);
+        MAP.put(Rops.IF_GE_INT,            Dops.IF_GE);
+        MAP.put(Rops.IF_LE_INT,            Dops.IF_LE);
+        MAP.put(Rops.IF_GT_INT,            Dops.IF_GT);
+        MAP.put(Rops.IF_EQ_OBJECT,         Dops.IF_EQ);
+        MAP.put(Rops.IF_NE_OBJECT,         Dops.IF_NE);
+        MAP.put(Rops.SWITCH,               Dops.SPARSE_SWITCH);
+        MAP.put(Rops.ADD_INT,              Dops.ADD_INT_2ADDR);
+        MAP.put(Rops.ADD_LONG,             Dops.ADD_LONG_2ADDR);
+        MAP.put(Rops.ADD_FLOAT,            Dops.ADD_FLOAT_2ADDR);
+        MAP.put(Rops.ADD_DOUBLE,           Dops.ADD_DOUBLE_2ADDR);
+        MAP.put(Rops.SUB_INT,              Dops.SUB_INT_2ADDR);
+        MAP.put(Rops.SUB_LONG,             Dops.SUB_LONG_2ADDR);
+        MAP.put(Rops.SUB_FLOAT,            Dops.SUB_FLOAT_2ADDR);
+        MAP.put(Rops.SUB_DOUBLE,           Dops.SUB_DOUBLE_2ADDR);
+        MAP.put(Rops.MUL_INT,              Dops.MUL_INT_2ADDR);
+        MAP.put(Rops.MUL_LONG,             Dops.MUL_LONG_2ADDR);
+        MAP.put(Rops.MUL_FLOAT,            Dops.MUL_FLOAT_2ADDR);
+        MAP.put(Rops.MUL_DOUBLE,           Dops.MUL_DOUBLE_2ADDR);
+        MAP.put(Rops.DIV_INT,              Dops.DIV_INT_2ADDR);
+        MAP.put(Rops.DIV_LONG,             Dops.DIV_LONG_2ADDR);
+        MAP.put(Rops.DIV_FLOAT,            Dops.DIV_FLOAT_2ADDR);
+        MAP.put(Rops.DIV_DOUBLE,           Dops.DIV_DOUBLE_2ADDR);
+        MAP.put(Rops.REM_INT,              Dops.REM_INT_2ADDR);
+        MAP.put(Rops.REM_LONG,             Dops.REM_LONG_2ADDR);
+        MAP.put(Rops.REM_FLOAT,            Dops.REM_FLOAT_2ADDR);
+        MAP.put(Rops.REM_DOUBLE,           Dops.REM_DOUBLE_2ADDR);
+        MAP.put(Rops.NEG_INT,              Dops.NEG_INT);
+        MAP.put(Rops.NEG_LONG,             Dops.NEG_LONG);
+        MAP.put(Rops.NEG_FLOAT,            Dops.NEG_FLOAT);
+        MAP.put(Rops.NEG_DOUBLE,           Dops.NEG_DOUBLE);
+        MAP.put(Rops.AND_INT,              Dops.AND_INT_2ADDR);
+        MAP.put(Rops.AND_LONG,             Dops.AND_LONG_2ADDR);
+        MAP.put(Rops.OR_INT,               Dops.OR_INT_2ADDR);
+        MAP.put(Rops.OR_LONG,              Dops.OR_LONG_2ADDR);
+        MAP.put(Rops.XOR_INT,              Dops.XOR_INT_2ADDR);
+        MAP.put(Rops.XOR_LONG,             Dops.XOR_LONG_2ADDR);
+        MAP.put(Rops.SHL_INT,              Dops.SHL_INT_2ADDR);
+        MAP.put(Rops.SHL_LONG,             Dops.SHL_LONG_2ADDR);
+        MAP.put(Rops.SHR_INT,              Dops.SHR_INT_2ADDR);
+        MAP.put(Rops.SHR_LONG,             Dops.SHR_LONG_2ADDR);
+        MAP.put(Rops.USHR_INT,             Dops.USHR_INT_2ADDR);
+        MAP.put(Rops.USHR_LONG,            Dops.USHR_LONG_2ADDR);
+        MAP.put(Rops.NOT_INT,              Dops.NOT_INT);
+        MAP.put(Rops.NOT_LONG,             Dops.NOT_LONG);
+
+        MAP.put(Rops.ADD_CONST_INT,        Dops.ADD_INT_LIT8);
+        // Note: No dalvik ops for other types of add_const.
+
+        MAP.put(Rops.SUB_CONST_INT,        Dops.RSUB_INT_LIT8);
+        /*
+         * Note: No dalvik ops for any type of sub_const; instead
+         * there's a *reverse* sub (constant - reg) for ints only.
+         */
+
+        MAP.put(Rops.MUL_CONST_INT,        Dops.MUL_INT_LIT8);
+        // Note: No dalvik ops for other types of mul_const.
+
+        MAP.put(Rops.DIV_CONST_INT,        Dops.DIV_INT_LIT8);
+        // Note: No dalvik ops for other types of div_const.
+
+        MAP.put(Rops.REM_CONST_INT,        Dops.REM_INT_LIT8);
+        // Note: No dalvik ops for other types of rem_const.
+
+        MAP.put(Rops.AND_CONST_INT,        Dops.AND_INT_LIT8);
+        // Note: No dalvik op for and_const_long.
+
+        MAP.put(Rops.OR_CONST_INT,         Dops.OR_INT_LIT8);
+        // Note: No dalvik op for or_const_long.
+
+        MAP.put(Rops.XOR_CONST_INT,        Dops.XOR_INT_LIT8);
+        // Note: No dalvik op for xor_const_long.
+
+        MAP.put(Rops.SHL_CONST_INT,        Dops.SHL_INT_LIT8);
+        // Note: No dalvik op for shl_const_long.
+
+        MAP.put(Rops.SHR_CONST_INT,        Dops.SHR_INT_LIT8);
+        // Note: No dalvik op for shr_const_long.
+
+        MAP.put(Rops.USHR_CONST_INT,       Dops.USHR_INT_LIT8);
+        // Note: No dalvik op for shr_const_long.
+
+        MAP.put(Rops.CMPL_LONG,            Dops.CMP_LONG);
+        MAP.put(Rops.CMPL_FLOAT,           Dops.CMPL_FLOAT);
+        MAP.put(Rops.CMPL_DOUBLE,          Dops.CMPL_DOUBLE);
+        MAP.put(Rops.CMPG_FLOAT,           Dops.CMPG_FLOAT);
+        MAP.put(Rops.CMPG_DOUBLE,          Dops.CMPG_DOUBLE);
+        MAP.put(Rops.CONV_L2I,             Dops.LONG_TO_INT);
+        MAP.put(Rops.CONV_F2I,             Dops.FLOAT_TO_INT);
+        MAP.put(Rops.CONV_D2I,             Dops.DOUBLE_TO_INT);
+        MAP.put(Rops.CONV_I2L,             Dops.INT_TO_LONG);
+        MAP.put(Rops.CONV_F2L,             Dops.FLOAT_TO_LONG);
+        MAP.put(Rops.CONV_D2L,             Dops.DOUBLE_TO_LONG);
+        MAP.put(Rops.CONV_I2F,             Dops.INT_TO_FLOAT);
+        MAP.put(Rops.CONV_L2F,             Dops.LONG_TO_FLOAT);
+        MAP.put(Rops.CONV_D2F,             Dops.DOUBLE_TO_FLOAT);
+        MAP.put(Rops.CONV_I2D,             Dops.INT_TO_DOUBLE);
+        MAP.put(Rops.CONV_L2D,             Dops.LONG_TO_DOUBLE);
+        MAP.put(Rops.CONV_F2D,             Dops.FLOAT_TO_DOUBLE);
+        MAP.put(Rops.TO_BYTE,              Dops.INT_TO_BYTE);
+        MAP.put(Rops.TO_CHAR,              Dops.INT_TO_CHAR);
+        MAP.put(Rops.TO_SHORT,             Dops.INT_TO_SHORT);
+        MAP.put(Rops.RETURN_VOID,          Dops.RETURN_VOID);
+        MAP.put(Rops.RETURN_INT,           Dops.RETURN);
+        MAP.put(Rops.RETURN_LONG,          Dops.RETURN_WIDE);
+        MAP.put(Rops.RETURN_FLOAT,         Dops.RETURN);
+        MAP.put(Rops.RETURN_DOUBLE,        Dops.RETURN_WIDE);
+        MAP.put(Rops.RETURN_OBJECT,        Dops.RETURN_OBJECT);
+        MAP.put(Rops.ARRAY_LENGTH,         Dops.ARRAY_LENGTH);
+        MAP.put(Rops.THROW,                Dops.THROW);
+        MAP.put(Rops.MONITOR_ENTER,        Dops.MONITOR_ENTER);
+        MAP.put(Rops.MONITOR_EXIT,         Dops.MONITOR_EXIT);
+        MAP.put(Rops.AGET_INT,             Dops.AGET);
+        MAP.put(Rops.AGET_LONG,            Dops.AGET_WIDE);
+        MAP.put(Rops.AGET_FLOAT,           Dops.AGET);
+        MAP.put(Rops.AGET_DOUBLE,          Dops.AGET_WIDE);
+        MAP.put(Rops.AGET_OBJECT,          Dops.AGET_OBJECT);
+        MAP.put(Rops.AGET_BOOLEAN,         Dops.AGET_BOOLEAN);
+        MAP.put(Rops.AGET_BYTE,            Dops.AGET_BYTE);
+        MAP.put(Rops.AGET_CHAR,            Dops.AGET_CHAR);
+        MAP.put(Rops.AGET_SHORT,           Dops.AGET_SHORT);
+        MAP.put(Rops.APUT_INT,             Dops.APUT);
+        MAP.put(Rops.APUT_LONG,            Dops.APUT_WIDE);
+        MAP.put(Rops.APUT_FLOAT,           Dops.APUT);
+        MAP.put(Rops.APUT_DOUBLE,          Dops.APUT_WIDE);
+        MAP.put(Rops.APUT_OBJECT,          Dops.APUT_OBJECT);
+        MAP.put(Rops.APUT_BOOLEAN,         Dops.APUT_BOOLEAN);
+        MAP.put(Rops.APUT_BYTE,            Dops.APUT_BYTE);
+        MAP.put(Rops.APUT_CHAR,            Dops.APUT_CHAR);
+        MAP.put(Rops.APUT_SHORT,           Dops.APUT_SHORT);
+        MAP.put(Rops.NEW_INSTANCE,         Dops.NEW_INSTANCE);
+        MAP.put(Rops.CHECK_CAST,           Dops.CHECK_CAST);
+        MAP.put(Rops.INSTANCE_OF,          Dops.INSTANCE_OF);
+
+        MAP.put(Rops.GET_FIELD_LONG,       Dops.IGET_WIDE);
+        MAP.put(Rops.GET_FIELD_FLOAT,      Dops.IGET);
+        MAP.put(Rops.GET_FIELD_DOUBLE,     Dops.IGET_WIDE);
+        MAP.put(Rops.GET_FIELD_OBJECT,     Dops.IGET_OBJECT);
+        /*
+         * Note: No map entries for get_field_* for non-long integral types,
+         * since they need to be handled specially (see dopFor() below).
+         */
+
+        MAP.put(Rops.GET_STATIC_LONG,      Dops.SGET_WIDE);
+        MAP.put(Rops.GET_STATIC_FLOAT,     Dops.SGET);
+        MAP.put(Rops.GET_STATIC_DOUBLE,    Dops.SGET_WIDE);
+        MAP.put(Rops.GET_STATIC_OBJECT,    Dops.SGET_OBJECT);
+        /*
+         * Note: No map entries for get_static* for non-long integral types,
+         * since they need to be handled specially (see dopFor() below).
+         */
+
+        MAP.put(Rops.PUT_FIELD_LONG,       Dops.IPUT_WIDE);
+        MAP.put(Rops.PUT_FIELD_FLOAT,      Dops.IPUT);
+        MAP.put(Rops.PUT_FIELD_DOUBLE,     Dops.IPUT_WIDE);
+        MAP.put(Rops.PUT_FIELD_OBJECT,     Dops.IPUT_OBJECT);
+        /*
+         * Note: No map entries for put_field_* for non-long integral types,
+         * since they need to be handled specially (see dopFor() below).
+         */
+
+        MAP.put(Rops.PUT_STATIC_LONG,      Dops.SPUT_WIDE);
+        MAP.put(Rops.PUT_STATIC_FLOAT,     Dops.SPUT);
+        MAP.put(Rops.PUT_STATIC_DOUBLE,    Dops.SPUT_WIDE);
+        MAP.put(Rops.PUT_STATIC_OBJECT,    Dops.SPUT_OBJECT);
+        /*
+         * Note: No map entries for put_static* for non-long integral types,
+         * since they need to be handled specially (see dopFor() below).
+         */
+
+        /*
+         * Note: No map entries for invoke*, new_array, and
+         * filled_new_array, since they need to be handled specially
+         * (see dopFor() below).
+         */
+    }
+
+    /**
+     * Returns the dalvik opcode appropriate for the given register-based
+     * instruction.
+     *
+     * @param insn {@code non-null;} the original instruction
+     * @return the corresponding dalvik opcode; one of the constants in
+     * {@link Dops}
+     */
+    public static Dop dopFor(Insn insn) {
+        Rop rop = insn.getOpcode();
+
+        /*
+         * First, just try looking up the rop in the MAP of easy
+         * cases.
+         */
+        Dop result = MAP.get(rop);
+        if (result != null) {
+            return result;
+        }
+
+        /*
+         * There was no easy case for the rop, so look up the opcode, and
+         * do something special for each:
+         *
+         * The move_exception, new_array, filled_new_array, and
+         * invoke* opcodes won't be found in MAP, since they'll each
+         * have different source and/or result register types / lists.
+         *
+         * The get* and put* opcodes for (non-long) integral types
+         * aren't in the map, since the type signatures aren't
+         * sufficient to distinguish between the types (the salient
+         * source or result will always be just "int").
+         *
+         * And const instruction need to distinguish between strings and
+         * classes.
+         */
+
+        switch (rop.getOpcode()) {
+            case RegOps.MOVE_EXCEPTION:     return Dops.MOVE_EXCEPTION;
+            case RegOps.INVOKE_STATIC:      return Dops.INVOKE_STATIC;
+            case RegOps.INVOKE_VIRTUAL:     return Dops.INVOKE_VIRTUAL;
+            case RegOps.INVOKE_SUPER:       return Dops.INVOKE_SUPER;
+            case RegOps.INVOKE_DIRECT:      return Dops.INVOKE_DIRECT;
+            case RegOps.INVOKE_INTERFACE:   return Dops.INVOKE_INTERFACE;
+            case RegOps.INVOKE_POLYMORPHIC: return Dops.INVOKE_POLYMORPHIC;
+            case RegOps.INVOKE_CUSTOM:      return Dops.INVOKE_CUSTOM;
+            case RegOps.NEW_ARRAY:          return Dops.NEW_ARRAY;
+            case RegOps.FILLED_NEW_ARRAY:   return Dops.FILLED_NEW_ARRAY;
+            case RegOps.FILL_ARRAY_DATA:    return Dops.FILL_ARRAY_DATA;
+            case RegOps.MOVE_RESULT: {
+                RegisterSpec resultReg = insn.getResult();
+
+                if (resultReg == null) {
+                    return Dops.NOP;
+                } else {
+                    switch (resultReg.getBasicType()) {
+                        case Type.BT_INT:
+                        case Type.BT_FLOAT:
+                        case Type.BT_BOOLEAN:
+                        case Type.BT_BYTE:
+                        case Type.BT_CHAR:
+                        case Type.BT_SHORT:
+                            return Dops.MOVE_RESULT;
+                        case Type.BT_LONG:
+                        case Type.BT_DOUBLE:
+                            return Dops.MOVE_RESULT_WIDE;
+                        case Type.BT_OBJECT:
+                            return Dops.MOVE_RESULT_OBJECT;
+                        default: {
+                            throw new RuntimeException("Unexpected basic type");
+                        }
+                    }
+                }
+            }
+
+            case RegOps.GET_FIELD: {
+                CstFieldRef ref =
+                    (CstFieldRef) ((ThrowingCstInsn) insn).getConstant();
+                int basicType = ref.getBasicType();
+                switch (basicType) {
+                    case Type.BT_BOOLEAN: return Dops.IGET_BOOLEAN;
+                    case Type.BT_BYTE:    return Dops.IGET_BYTE;
+                    case Type.BT_CHAR:    return Dops.IGET_CHAR;
+                    case Type.BT_SHORT:   return Dops.IGET_SHORT;
+                    case Type.BT_INT:     return Dops.IGET;
+                }
+                break;
+            }
+            case RegOps.PUT_FIELD: {
+                CstFieldRef ref =
+                    (CstFieldRef) ((ThrowingCstInsn) insn).getConstant();
+                int basicType = ref.getBasicType();
+                switch (basicType) {
+                    case Type.BT_BOOLEAN: return Dops.IPUT_BOOLEAN;
+                    case Type.BT_BYTE:    return Dops.IPUT_BYTE;
+                    case Type.BT_CHAR:    return Dops.IPUT_CHAR;
+                    case Type.BT_SHORT:   return Dops.IPUT_SHORT;
+                    case Type.BT_INT:     return Dops.IPUT;
+                }
+                break;
+            }
+            case RegOps.GET_STATIC: {
+                CstFieldRef ref =
+                    (CstFieldRef) ((ThrowingCstInsn) insn).getConstant();
+                int basicType = ref.getBasicType();
+                switch (basicType) {
+                    case Type.BT_BOOLEAN: return Dops.SGET_BOOLEAN;
+                    case Type.BT_BYTE:    return Dops.SGET_BYTE;
+                    case Type.BT_CHAR:    return Dops.SGET_CHAR;
+                    case Type.BT_SHORT:   return Dops.SGET_SHORT;
+                    case Type.BT_INT:     return Dops.SGET;
+                }
+                break;
+            }
+            case RegOps.PUT_STATIC: {
+                CstFieldRef ref =
+                    (CstFieldRef) ((ThrowingCstInsn) insn).getConstant();
+                int basicType = ref.getBasicType();
+                switch (basicType) {
+                    case Type.BT_BOOLEAN: return Dops.SPUT_BOOLEAN;
+                    case Type.BT_BYTE:    return Dops.SPUT_BYTE;
+                    case Type.BT_CHAR:    return Dops.SPUT_CHAR;
+                    case Type.BT_SHORT:   return Dops.SPUT_SHORT;
+                    case Type.BT_INT:     return Dops.SPUT;
+                }
+                break;
+            }
+            case RegOps.CONST: {
+                Constant cst = ((ThrowingCstInsn) insn).getConstant();
+                if (cst instanceof CstType) {
+                    return Dops.CONST_CLASS;
+                } else if (cst instanceof CstString) {
+                    return Dops.CONST_STRING;
+                } else if (cst instanceof CstMethodHandle) {
+                    return Dops.CONST_METHOD_HANDLE;
+                } else if (cst instanceof CstProtoRef) {
+                    return Dops.CONST_METHOD_TYPE;
+                } else {
+                    throw new RuntimeException("Unexpected constant type");
+                }
+            }
+        }
+
+        throw new RuntimeException("unknown rop: " + rop);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/RopTranslator.java b/dx/src/com/android/dx/dex/code/RopTranslator.java
new file mode 100644
index 0000000..517b4f8
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/RopTranslator.java
@@ -0,0 +1,943 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.dex.DexOptions;
+import com.android.dx.io.Opcodes;
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.FillArrayDataInsn;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.InvokePolymorphicInsn;
+import com.android.dx.rop.code.LocalVariableInfo;
+import com.android.dx.rop.code.PlainCstInsn;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.RegisterSpecSet;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.code.SwitchInsn;
+import com.android.dx.rop.code.ThrowingCstInsn;
+import com.android.dx.rop.code.ThrowingInsn;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.util.Bits;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+
+/**
+ * Translator from {@link RopMethod} to {@link DalvCode}. The {@link
+ * #translate} method is the thing to call on this class.
+ */
+public final class RopTranslator {
+    /** {@code non-null;} options for dex output */
+    private final DexOptions dexOptions;
+
+    /** {@code non-null;} method to translate */
+    private final RopMethod method;
+
+    /**
+     * how much position info to preserve; one of the static
+     * constants in {@link PositionList}
+     */
+    private final int positionInfo;
+
+    /** {@code null-ok;} local variable info to use */
+    private final LocalVariableInfo locals;
+
+    /** {@code non-null;} container for all the address objects for the method */
+    private final BlockAddresses addresses;
+
+    /** {@code non-null;} list of output instructions in-progress */
+    private final OutputCollector output;
+
+    /** {@code non-null;} visitor to use during translation */
+    private final TranslationVisitor translationVisitor;
+
+    /** {@code >= 0;} register count for the method */
+    private final int regCount;
+
+    /** {@code null-ok;} block output order; becomes non-null in {@link #pickOrder} */
+    private int[] order;
+
+    /** size, in register units, of all the parameters to this method */
+    private final int paramSize;
+
+    /**
+     * true if the parameters to this method happen to be in proper order
+     * at the end of the frame (as the optimizer emits them)
+     */
+    private final boolean paramsAreInOrder;
+
+    /**
+     * Translates a {@link RopMethod}. This may modify the given
+     * input.
+     *
+     * @param method {@code non-null;} the original method
+     * @param positionInfo how much position info to preserve; one of the
+     * static constants in {@link PositionList}
+     * @param locals {@code null-ok;} local variable information to use
+     * @param paramSize size, in register units, of all the parameters to
+     * this method
+     * @param dexOptions {@code non-null;} options for dex output
+     * @return {@code non-null;} the translated version
+     */
+    public static DalvCode translate(RopMethod method, int positionInfo,
+            LocalVariableInfo locals, int paramSize, DexOptions dexOptions) {
+        RopTranslator translator =
+            new RopTranslator(method, positionInfo, locals, paramSize, dexOptions);
+        return translator.translateAndGetResult();
+    }
+
+    /**
+     * Constructs an instance. This method is private. Use {@link #translate}.
+     *
+     * @param method {@code non-null;} the original method
+     * @param positionInfo how much position info to preserve; one of the
+     * static constants in {@link PositionList}
+     * @param locals {@code null-ok;} local variable information to use
+     * @param paramSize size, in register units, of all the parameters to
+     * this method
+     * @param dexOptions {@code non-null;} options for dex output
+     */
+    private RopTranslator(RopMethod method, int positionInfo, LocalVariableInfo locals,
+            int paramSize, DexOptions dexOptions) {
+        this.dexOptions = dexOptions;
+        this.method = method;
+        this.positionInfo = positionInfo;
+        this.locals = locals;
+        this.addresses = new BlockAddresses(method);
+        this.paramSize = paramSize;
+        this.order = null;
+        this.paramsAreInOrder = calculateParamsAreInOrder(method, paramSize);
+
+        BasicBlockList blocks = method.getBlocks();
+        int bsz = blocks.size();
+
+        /*
+         * Max possible instructions includes three code address
+         * objects per basic block (to the first and last instruction,
+         * and just past the end of the block), and the possibility of
+         * an extra goto at the end of each basic block.
+         */
+        int maxInsns = (bsz * 3) + blocks.getInstructionCount();
+
+        if (locals != null) {
+            /*
+             * If we're tracking locals, then there's could be another
+             * extra instruction per block (for the locals state at the
+             * start of the block) as well as one for each interblock
+             * local introduction.
+             */
+            maxInsns += bsz + locals.getAssignmentCount();
+        }
+
+        /*
+         * If params are not in order, we will need register space
+         * for them before this is all over...
+         */
+        this.regCount = blocks.getRegCount()
+                + (paramsAreInOrder ? 0 : this.paramSize);
+
+        this.output = new OutputCollector(dexOptions, maxInsns, bsz * 3, regCount, paramSize);
+
+        if (locals != null) {
+            this.translationVisitor =
+                new LocalVariableAwareTranslationVisitor(output, locals);
+        } else {
+            this.translationVisitor = new TranslationVisitor(output);
+        }
+    }
+
+    /**
+     * Checks to see if the move-param instructions that occur in this
+     * method happen to slot the params in an order at the top of the
+     * stack frame that matches dalvik's calling conventions. This will
+     * alway result in "true" for methods that have run through the
+     * SSA optimizer.
+     *
+     * @param paramSize size, in register units, of all the parameters
+     * to this method
+     */
+    private static boolean calculateParamsAreInOrder(RopMethod method,
+            final int paramSize) {
+        final boolean[] paramsAreInOrder = { true };
+        final int initialRegCount = method.getBlocks().getRegCount();
+
+        /*
+         * We almost could just check the first block here, but the
+         * {@code cf} layer will put in a second move-param in a
+         * subsequent block in the case of synchronized methods.
+         */
+        method.getBlocks().forEachInsn(new Insn.BaseVisitor() {
+            @Override
+            public void visitPlainCstInsn(PlainCstInsn insn) {
+                if (insn.getOpcode().getOpcode()== RegOps.MOVE_PARAM) {
+                    int param =
+                        ((CstInteger) insn.getConstant()).getValue();
+
+                    paramsAreInOrder[0] = paramsAreInOrder[0]
+                            && ((initialRegCount - paramSize + param)
+                                == insn.getResult().getReg());
+                }
+            }
+        });
+
+        return paramsAreInOrder[0];
+    }
+
+    /**
+     * Does the translation and returns the result.
+     *
+     * @return {@code non-null;} the result
+     */
+    private DalvCode translateAndGetResult() {
+        pickOrder();
+        outputInstructions();
+
+        StdCatchBuilder catches =
+            new StdCatchBuilder(method, order, addresses);
+
+        return new DalvCode(positionInfo, output.getFinisher(), catches);
+    }
+
+    /**
+     * Performs initial creation of output instructions based on the
+     * original blocks.
+     */
+    private void outputInstructions() {
+        BasicBlockList blocks = method.getBlocks();
+        int[] order = this.order;
+        int len = order.length;
+
+        // Process the blocks in output order.
+        for (int i = 0; i < len; i++) {
+            int nextI = i + 1;
+            int nextLabel = (nextI == order.length) ? -1 : order[nextI];
+            outputBlock(blocks.labelToBlock(order[i]), nextLabel);
+        }
+    }
+
+    /**
+     * Helper for {@link #outputInstructions}, which does the processing
+     * and output of one block.
+     *
+     * @param block {@code non-null;} the block to process and output
+     * @param nextLabel {@code >= -1;} the next block that will be processed, or
+     * {@code -1} if there is no next block
+     */
+    private void outputBlock(BasicBlock block, int nextLabel) {
+        // Append the code address for this block.
+        CodeAddress startAddress = addresses.getStart(block);
+        output.add(startAddress);
+
+        // Append the local variable state for the block.
+        if (locals != null) {
+            RegisterSpecSet starts = locals.getStarts(block);
+            output.add(new LocalSnapshot(startAddress.getPosition(),
+                                         starts));
+        }
+
+        /*
+         * Choose and append an output instruction for each original
+         * instruction.
+         */
+        translationVisitor.setBlock(block, addresses.getLast(block));
+        block.getInsns().forEach(translationVisitor);
+
+        // Insert the block end code address.
+        output.add(addresses.getEnd(block));
+
+        // Set up for end-of-block activities.
+
+        int succ = block.getPrimarySuccessor();
+        Insn lastInsn = block.getLastInsn();
+
+        /*
+         * Check for (and possibly correct for) a non-optimal choice of
+         * which block will get output next.
+         */
+
+        if ((succ >= 0) && (succ != nextLabel)) {
+            /*
+             * The block has a "primary successor" and that primary
+             * successor isn't the next block to be output.
+             */
+            Rop lastRop = lastInsn.getOpcode();
+            if ((lastRop.getBranchingness() == Rop.BRANCH_IF) &&
+                    (block.getSecondarySuccessor() == nextLabel)) {
+                /*
+                 * The block ends with an "if" of some sort, and its
+                 * secondary successor (the "then") is in fact the
+                 * next block to output. So, reverse the sense of
+                 * the test, so that we can just emit the next block
+                 * without an interstitial goto.
+                 */
+                output.reverseBranch(1, addresses.getStart(succ));
+            } else {
+                /*
+                 * Our only recourse is to add a goto here to get the
+                 * flow to be correct.
+                 */
+                TargetInsn insn =
+                    new TargetInsn(Dops.GOTO, lastInsn.getPosition(),
+                            RegisterSpecList.EMPTY,
+                            addresses.getStart(succ));
+                output.add(insn);
+            }
+        }
+    }
+
+    /**
+     * Picks an order for the blocks by doing "trace" analysis.
+     */
+    private void pickOrder() {
+        BasicBlockList blocks = method.getBlocks();
+        int sz = blocks.size();
+        int maxLabel = blocks.getMaxLabel();
+        int[] workSet = Bits.makeBitSet(maxLabel);
+        int[] tracebackSet = Bits.makeBitSet(maxLabel);
+
+        for (int i = 0; i < sz; i++) {
+            BasicBlock one = blocks.get(i);
+            Bits.set(workSet, one.getLabel());
+        }
+
+        int[] order = new int[sz];
+        int at = 0;
+
+        /*
+         * Starting with the designated "first label" (that is, the
+         * first block of the method), add that label to the order,
+         * and then pick its first as-yet unordered successor to
+         * immediately follow it, giving top priority to the primary
+         * (aka default) successor (if any). Keep following successors
+         * until the trace runs out of possibilities. Then, continue
+         * by finding an unordered chain containing the first as-yet
+         * unordered block, and adding it to the order, and so on.
+         */
+        for (int label = method.getFirstLabel();
+             label != -1;
+             label = Bits.findFirst(workSet, 0)) {
+
+            /*
+             * Attempt to trace backward from the chosen block to an
+             * as-yet unordered predecessor which lists the chosen
+             * block as its primary successor, and so on, until we
+             * fail to find such an unordered predecessor. Start the
+             * trace with that block. Note that the first block in the
+             * method has no predecessors, so in that case this loop
+             * will simply terminate with zero iterations and without
+             * picking a new starter block.
+             */
+            traceBack:
+            for (;;) {
+                IntList preds = method.labelToPredecessors(label);
+                int psz = preds.size();
+
+                for (int i = 0; i < psz; i++) {
+                    int predLabel = preds.get(i);
+
+                    if (Bits.get(tracebackSet, predLabel)) {
+                        /*
+                         * We found a predecessor loop; stop tracing back
+                         * from here.
+                         */
+                        break;
+                    }
+
+                    if (!Bits.get(workSet, predLabel)) {
+                        // This one's already ordered.
+                        continue;
+                    }
+
+                    BasicBlock pred = blocks.labelToBlock(predLabel);
+                    if (pred.getPrimarySuccessor() == label) {
+                        // Found one!
+                        label = predLabel;
+                        Bits.set(tracebackSet, label);
+                        continue traceBack;
+                    }
+                }
+
+                // Failed to find a better block to start the trace.
+                break;
+            }
+
+            /*
+             * Trace a path from the chosen block to one of its
+             * unordered successors (hopefully the primary), and so
+             * on, until we run out of unordered successors.
+             */
+            while (label != -1) {
+                Bits.clear(workSet, label);
+                Bits.clear(tracebackSet, label);
+                order[at] = label;
+                at++;
+
+                BasicBlock one = blocks.labelToBlock(label);
+                BasicBlock preferredBlock = blocks.preferredSuccessorOf(one);
+
+                if (preferredBlock == null) {
+                    break;
+                }
+
+                int preferred = preferredBlock.getLabel();
+                int primary = one.getPrimarySuccessor();
+
+                if (Bits.get(workSet, preferred)) {
+                    /*
+                     * Order the current block's preferred successor
+                     * next, as it has yet to be scheduled.
+                     */
+                    label = preferred;
+                } else if ((primary != preferred) && (primary >= 0)
+                        && Bits.get(workSet, primary)) {
+                    /*
+                     * The primary is available, so use that.
+                     */
+                    label = primary;
+                } else {
+                    /*
+                     * There's no obvious candidate, so pick the first
+                     * one that's available, if any.
+                     */
+                    IntList successors = one.getSuccessors();
+                    int ssz = successors.size();
+                    label = -1;
+                    for (int i = 0; i < ssz; i++) {
+                        int candidate = successors.get(i);
+                        if (Bits.get(workSet, candidate)) {
+                            label = candidate;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        if (at != sz) {
+            // There was a duplicate block label.
+            throw new RuntimeException("shouldn't happen");
+        }
+
+        this.order = order;
+    }
+
+    /**
+     * Gets the complete register list (result and sources) out of a
+     * given rop instruction. For insns that are commutative, have
+     * two register sources, and have a source equal to the result,
+     * place that source first.
+     *
+     * @param insn {@code non-null;} instruction in question
+     * @return {@code non-null;} the instruction's complete register list
+     */
+    private static RegisterSpecList getRegs(Insn insn) {
+        return getRegs(insn, insn.getResult());
+    }
+
+    /**
+     * Gets the complete register list (result and sources) out of a
+     * given rop instruction. For insns that are commutative, have
+     * two register sources, and have a source equal to the result,
+     * place that source first.
+     *
+     * @param insn {@code non-null;} instruction in question
+     * @param resultReg {@code null-ok;} the real result to use (ignore the insn's)
+     * @return {@code non-null;} the instruction's complete register list
+     */
+    private static RegisterSpecList getRegs(Insn insn,
+            RegisterSpec resultReg) {
+        RegisterSpecList regs = insn.getSources();
+
+        if (insn.getOpcode().isCommutative()
+                && (regs.size() == 2)
+                && (resultReg.getReg() == regs.get(1).getReg())) {
+
+            /*
+             * For commutative ops which have two register sources,
+             * if the second source is the same register as the result,
+             * swap the sources so that an opcode of form 12x can be selected
+             * instead of one of form 23x
+             */
+
+            regs = RegisterSpecList.make(regs.get(1), regs.get(0));
+        }
+
+        if (resultReg == null) {
+            return regs;
+        }
+
+        return regs.withFirst(resultReg);
+    }
+
+    /**
+     * Instruction visitor class for doing the instruction translation per se.
+     */
+    private class TranslationVisitor implements Insn.Visitor {
+        /** {@code non-null;} list of output instructions in-progress */
+        private final OutputCollector output;
+
+        /** {@code non-null;} basic block being worked on */
+        private BasicBlock block;
+
+        /**
+         * {@code null-ok;} code address for the salient last instruction of the
+         * block (used before switches and throwing instructions)
+         */
+        private CodeAddress lastAddress;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param output {@code non-null;} destination for instruction output
+         */
+        public TranslationVisitor(OutputCollector output) {
+            this.output = output;
+        }
+
+        /**
+         * Sets the block currently being worked on.
+         *
+         * @param block {@code non-null;} the block
+         * @param lastAddress {@code non-null;} code address for the salient
+         * last instruction of the block
+         */
+        public void setBlock(BasicBlock block, CodeAddress lastAddress) {
+            this.block = block;
+            this.lastAddress = lastAddress;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitPlainInsn(PlainInsn insn) {
+            Rop rop = insn.getOpcode();
+            if (rop.getOpcode() == RegOps.MARK_LOCAL) {
+                /*
+                 * Ignore these. They're dealt with by
+                 * the LocalVariableAwareTranslationVisitor
+                 */
+                return;
+            }
+            if (rop.getOpcode() == RegOps.MOVE_RESULT_PSEUDO) {
+                // These get skipped
+                return;
+            }
+
+            SourcePosition pos = insn.getPosition();
+            Dop opcode = RopToDop.dopFor(insn);
+            DalvInsn di;
+
+            switch (rop.getBranchingness()) {
+                case Rop.BRANCH_NONE:
+                case Rop.BRANCH_RETURN:
+                case Rop.BRANCH_THROW: {
+                    di = new SimpleInsn(opcode, pos, getRegs(insn));
+                    break;
+                }
+                case Rop.BRANCH_GOTO: {
+                    /*
+                     * Code in the main translation loop will emit a
+                     * goto if necessary (if the branch isn't to the
+                     * immediately subsequent block).
+                     */
+                    return;
+                }
+                case Rop.BRANCH_IF: {
+                    int target = block.getSuccessors().get(1);
+                    di = new TargetInsn(opcode, pos, getRegs(insn),
+                                        addresses.getStart(target));
+                    break;
+                }
+                default: {
+                    throw new RuntimeException("shouldn't happen");
+                }
+            }
+
+            addOutput(di);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitPlainCstInsn(PlainCstInsn insn) {
+            SourcePosition pos = insn.getPosition();
+            Dop opcode = RopToDop.dopFor(insn);
+            Rop rop = insn.getOpcode();
+            int ropOpcode = rop.getOpcode();
+            DalvInsn di;
+
+            if (rop.getBranchingness() != Rop.BRANCH_NONE) {
+                throw new RuntimeException("shouldn't happen");
+            }
+
+            if (ropOpcode == RegOps.MOVE_PARAM) {
+                if (!paramsAreInOrder) {
+                    /*
+                     * Parameters are not in order at the top of the reg space.
+                     * We need to add moves.
+                     */
+
+                    RegisterSpec dest = insn.getResult();
+                    int param =
+                        ((CstInteger) insn.getConstant()).getValue();
+                    RegisterSpec source =
+                        RegisterSpec.make(regCount - paramSize + param,
+                                dest.getType());
+                    di = new SimpleInsn(opcode, pos,
+                                        RegisterSpecList.make(dest, source));
+                    addOutput(di);
+                }
+            } else {
+                // No moves required for the parameters
+                RegisterSpecList regs = getRegs(insn);
+                di = new CstInsn(opcode, pos, regs, insn.getConstant());
+                addOutput(di);
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitSwitchInsn(SwitchInsn insn) {
+            SourcePosition pos = insn.getPosition();
+            IntList cases = insn.getCases();
+            IntList successors = block.getSuccessors();
+            int casesSz = cases.size();
+            int succSz = successors.size();
+            int primarySuccessor = block.getPrimarySuccessor();
+
+            /*
+             * Check the assumptions that the number of cases is one
+             * less than the number of successors and that the last
+             * successor in the list is the primary (in this case, the
+             * default). This test is here to guard against forgetting
+             * to change this code if the way switch instructions are
+             * constructed also gets changed.
+             */
+            if ((casesSz != (succSz - 1)) ||
+                (primarySuccessor != successors.get(casesSz))) {
+                throw new RuntimeException("shouldn't happen");
+            }
+
+            CodeAddress[] switchTargets = new CodeAddress[casesSz];
+
+            for (int i = 0; i < casesSz; i++) {
+                int label = successors.get(i);
+                switchTargets[i] = addresses.getStart(label);
+            }
+
+            CodeAddress dataAddress = new CodeAddress(pos);
+            // make a new address that binds closely to the switch instruction
+            CodeAddress switchAddress =
+                new CodeAddress(lastAddress.getPosition(), true);
+            SwitchData dataInsn =
+                new SwitchData(pos, switchAddress, cases, switchTargets);
+            Dop opcode = dataInsn.isPacked() ?
+                Dops.PACKED_SWITCH : Dops.SPARSE_SWITCH;
+            TargetInsn switchInsn =
+                new TargetInsn(opcode, pos, getRegs(insn), dataAddress);
+
+            addOutput(switchAddress);
+            addOutput(switchInsn);
+
+            addOutputSuffix(new OddSpacer(pos));
+            addOutputSuffix(dataAddress);
+            addOutputSuffix(dataInsn);
+        }
+
+        /**
+         * Looks forward to the current block's primary successor, returning
+         * the RegisterSpec of the result of the move-result-pseudo at the
+         * top of that block or null if none.
+         *
+         * @return {@code null-ok;} result of move-result-pseudo at the beginning of
+         * primary successor
+         */
+        private RegisterSpec getNextMoveResultPseudo()
+        {
+            int label = block.getPrimarySuccessor();
+
+            if (label < 0) {
+                return null;
+            }
+
+            Insn insn
+                    = method.getBlocks().labelToBlock(label).getInsns().get(0);
+
+            if (insn.getOpcode().getOpcode() != RegOps.MOVE_RESULT_PSEUDO) {
+                return null;
+            } else {
+                return insn.getResult();
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitInvokePolymorphicInsn(InvokePolymorphicInsn insn) {
+            SourcePosition pos = insn.getPosition();
+            Dop opcode = RopToDop.dopFor(insn);
+            Rop rop = insn.getOpcode();
+
+            if (rop.getBranchingness() != Rop.BRANCH_THROW) {
+                throw new RuntimeException("Expected BRANCH_THROW got " + rop.getBranchingness());
+            } else if (!rop.isCallLike()) {
+                throw new RuntimeException("Expected call-like operation");
+            }
+
+            addOutput(lastAddress);
+
+            RegisterSpecList regs = insn.getSources();
+            Constant[] constants = new Constant[] {
+                insn.getPolymorphicMethod(),
+                insn.getCallSiteProto()
+                };
+            DalvInsn di = new MultiCstInsn(opcode, pos, regs, constants);
+
+            addOutput(di);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitThrowingCstInsn(ThrowingCstInsn insn) {
+            SourcePosition pos = insn.getPosition();
+            Dop opcode = RopToDop.dopFor(insn);
+            Rop rop = insn.getOpcode();
+            Constant cst = insn.getConstant();
+
+            if (rop.getBranchingness() != Rop.BRANCH_THROW) {
+                throw new RuntimeException("Expected BRANCH_THROW got " + rop.getBranchingness());
+            }
+
+            addOutput(lastAddress);
+
+            if (rop.isCallLike()) {
+                RegisterSpecList regs = insn.getSources();
+                DalvInsn di = new CstInsn(opcode, pos, regs, cst);
+
+                addOutput(di);
+            } else {
+                RegisterSpec realResult = getNextMoveResultPseudo();
+
+                RegisterSpecList regs = getRegs(insn, realResult);
+                DalvInsn di;
+
+                boolean hasResult = opcode.hasResult()
+                        || (rop.getOpcode() == RegOps.CHECK_CAST);
+
+                if (hasResult != (realResult != null)) {
+                    throw new RuntimeException(
+                            "Insn with result/move-result-pseudo mismatch " +
+                            insn);
+                }
+
+                if ((rop.getOpcode() == RegOps.NEW_ARRAY) &&
+                    (opcode.getOpcode() != Opcodes.NEW_ARRAY)) {
+                    /*
+                     * It's a type-specific new-array-<primitive>, and
+                     * so it should be turned into a SimpleInsn (no
+                     * constant ref as it's implicit).
+                     */
+                    di = new SimpleInsn(opcode, pos, regs);
+                } else {
+                    /*
+                     * This is the general case for constant-bearing
+                     * instructions.
+                     */
+                    di = new CstInsn(opcode, pos, regs, cst);
+                }
+                // (b/120985556) update the following code
+                // move-object vX, vY
+                // instance-of vY, vX, LMyClass;
+                // into
+                // move-object vX, vY
+                // nop
+                // instance-of vY, vX, LMyClass;
+                DalvInsn previousDi = getPrevNonSpecialInsn();
+                if (opcode.getOpcode() == Opcodes.INSTANCE_OF && previousDi != null) {
+                    int prevOpcode = previousDi.getOpcode().getOpcode();
+                    if (prevOpcode == Opcodes.MOVE_OBJECT
+                        || prevOpcode == Opcodes.MOVE_OBJECT_FROM16
+                        || prevOpcode == Opcodes.MOVE_OBJECT_16) {
+                        if (di.getRegisters().size() > 0 && previousDi.getRegisters().size() > 1
+                            && (di.getRegisters().get(0).getReg()
+                                    == previousDi.getRegisters().get(1).getReg())) {
+                            DalvInsn nopDi = new SimpleInsn(Dops.NOP, pos, RegisterSpecList.EMPTY);
+                            addOutput(nopDi);
+                        }
+                    }
+                }
+                addOutput(di);
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitThrowingInsn(ThrowingInsn insn) {
+            SourcePosition pos = insn.getPosition();
+            Dop opcode = RopToDop.dopFor(insn);
+            Rop rop = insn.getOpcode();
+            RegisterSpec realResult;
+
+            if (rop.getBranchingness() != Rop.BRANCH_THROW) {
+                throw new RuntimeException("shouldn't happen");
+            }
+
+            realResult = getNextMoveResultPseudo();
+
+            if (opcode.hasResult() != (realResult != null)) {
+                throw new RuntimeException(
+                        "Insn with result/move-result-pseudo mismatch" + insn);
+            }
+
+            addOutput(lastAddress);
+
+            DalvInsn di = new SimpleInsn(opcode, pos,
+                    getRegs(insn, realResult));
+
+            addOutput(di);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitFillArrayDataInsn(FillArrayDataInsn insn) {
+            SourcePosition pos = insn.getPosition();
+            Constant cst = insn.getConstant();
+            ArrayList<Constant> values = insn.getInitValues();
+            Rop rop = insn.getOpcode();
+
+            if (rop.getBranchingness() != Rop.BRANCH_NONE) {
+                throw new RuntimeException("shouldn't happen");
+            }
+            CodeAddress dataAddress = new CodeAddress(pos);
+            ArrayData dataInsn =
+                new ArrayData(pos, lastAddress, values, cst);
+
+            TargetInsn fillArrayDataInsn =
+                new TargetInsn(Dops.FILL_ARRAY_DATA, pos, getRegs(insn),
+                        dataAddress);
+
+            addOutput(lastAddress);
+            addOutput(fillArrayDataInsn);
+
+            addOutputSuffix(new OddSpacer(pos));
+            addOutputSuffix(dataAddress);
+            addOutputSuffix(dataInsn);
+        }
+
+        /**
+         * Adds to the output.
+         *
+         * @param insn {@code non-null;} instruction to add
+         */
+        protected void addOutput(DalvInsn insn) {
+            output.add(insn);
+        }
+
+        protected DalvInsn getPrevNonSpecialInsn() {
+            for (int i = output.size() - 1; i >= 0; --i) {
+                DalvInsn insn = output.get(i);
+                if (insn.getOpcode().getOpcode() != Opcodes.SPECIAL_FORMAT) {
+                    return insn;
+                }
+            }
+            return null;
+        }
+
+        /**
+         * Adds to the output suffix.
+         *
+         * @param insn {@code non-null;} instruction to add
+         */
+        protected void addOutputSuffix(DalvInsn insn) {
+            output.addSuffix(insn);
+        }
+    }
+
+    /**
+     * Instruction visitor class for doing instruction translation with
+     * local variable tracking
+     */
+    private class LocalVariableAwareTranslationVisitor
+            extends TranslationVisitor {
+        /** {@code non-null;} local variable info */
+        private final LocalVariableInfo locals;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param output {@code non-null;} destination for instruction output
+         * @param locals {@code non-null;} the local variable info
+         */
+        public LocalVariableAwareTranslationVisitor(OutputCollector output,
+                                                    LocalVariableInfo locals) {
+            super(output);
+            this.locals = locals;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitPlainInsn(PlainInsn insn) {
+            super.visitPlainInsn(insn);
+            addIntroductionIfNecessary(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitPlainCstInsn(PlainCstInsn insn) {
+            super.visitPlainCstInsn(insn);
+            addIntroductionIfNecessary(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitSwitchInsn(SwitchInsn insn) {
+            super.visitSwitchInsn(insn);
+            addIntroductionIfNecessary(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitThrowingCstInsn(ThrowingCstInsn insn) {
+            super.visitThrowingCstInsn(insn);
+            addIntroductionIfNecessary(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitThrowingInsn(ThrowingInsn insn) {
+            super.visitThrowingInsn(insn);
+            addIntroductionIfNecessary(insn);
+        }
+
+        /**
+         * Adds a {@link LocalStart} to the output if the given
+         * instruction in fact introduces a local variable.
+         *
+         * @param insn {@code non-null;} instruction in question
+         */
+        public void addIntroductionIfNecessary(Insn insn) {
+            RegisterSpec spec = locals.getAssignment(insn);
+
+            if (spec != null) {
+                addOutput(new LocalStart(insn.getPosition(), spec));
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/SimpleInsn.java b/dx/src/com/android/dx/dex/code/SimpleInsn.java
new file mode 100644
index 0000000..8cdcc55
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/SimpleInsn.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+
+/**
+ * Instruction which has no extra info beyond the basics provided for in
+ * the base class.
+ */
+public final class SimpleInsn extends FixedSizeInsn {
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param opcode the opcode; one of the constants from {@link Dops}
+     * @param position {@code non-null;} source position
+     * @param registers {@code non-null;} register list, including a
+     * result register if appropriate (that is, registers may be either
+     * ins or outs)
+     */
+    public SimpleInsn(Dop opcode, SourcePosition position,
+                      RegisterSpecList registers) {
+        super(opcode, position, registers);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withOpcode(Dop opcode) {
+        return new SimpleInsn(opcode, getPosition(), getRegisters());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new SimpleInsn(getOpcode(), getPosition(), registers);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        return null;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/StdCatchBuilder.java b/dx/src/com/android/dx/dex/code/StdCatchBuilder.java
new file mode 100644
index 0000000..621b8ee
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/StdCatchBuilder.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+import java.util.HashSet;
+
+/**
+ * Constructor of {@link CatchTable} instances from {@link RopMethod}
+ * and associated data.
+ */
+public final class StdCatchBuilder implements CatchBuilder {
+    /** the maximum range of a single catch handler, in code units */
+    private static final int MAX_CATCH_RANGE = 65535;
+
+    /** {@code non-null;} method to build the list for */
+    private final RopMethod method;
+
+    /** {@code non-null;} block output order */
+    private final int[] order;
+
+    /** {@code non-null;} address objects for each block */
+    private final BlockAddresses addresses;
+
+    /**
+     * Constructs an instance. It merely holds onto its parameters for
+     * a subsequent call to {@link #build}.
+     *
+     * @param method {@code non-null;} method to build the list for
+     * @param order {@code non-null;} block output order
+     * @param addresses {@code non-null;} address objects for each block
+     */
+    public StdCatchBuilder(RopMethod method, int[] order,
+            BlockAddresses addresses) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        if (order == null) {
+            throw new NullPointerException("order == null");
+        }
+
+        if (addresses == null) {
+            throw new NullPointerException("addresses == null");
+        }
+
+        this.method = method;
+        this.order = order;
+        this.addresses = addresses;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CatchTable build() {
+        return build(method, order, addresses);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean hasAnyCatches() {
+        BasicBlockList blocks = method.getBlocks();
+        int size = blocks.size();
+
+        for (int i = 0; i < size; i++) {
+            BasicBlock block = blocks.get(i);
+            TypeList catches = block.getLastInsn().getCatches();
+            if (catches.size() != 0) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public HashSet<Type> getCatchTypes() {
+        HashSet<Type> result = new HashSet<Type>(20);
+        BasicBlockList blocks = method.getBlocks();
+        int size = blocks.size();
+
+        for (int i = 0; i < size; i++) {
+            BasicBlock block = blocks.get(i);
+            TypeList catches = block.getLastInsn().getCatches();
+            int catchSize = catches.size();
+
+            for (int j = 0; j < catchSize; j++) {
+                result.add(catches.getType(j));
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Builds and returns the catch table for a given method.
+     *
+     * @param method {@code non-null;} method to build the list for
+     * @param order {@code non-null;} block output order
+     * @param addresses {@code non-null;} address objects for each block
+     * @return {@code non-null;} the constructed table
+     */
+    public static CatchTable build(RopMethod method, int[] order,
+            BlockAddresses addresses) {
+        int len = order.length;
+        BasicBlockList blocks = method.getBlocks();
+        ArrayList<CatchTable.Entry> resultList =
+            new ArrayList<CatchTable.Entry>(len);
+        CatchHandlerList currentHandlers = CatchHandlerList.EMPTY;
+        BasicBlock currentStartBlock = null;
+        BasicBlock currentEndBlock = null;
+
+        for (int i = 0; i < len; i++) {
+            BasicBlock block = blocks.labelToBlock(order[i]);
+
+            if (!block.canThrow()) {
+                /*
+                 * There is no need to concern ourselves with the
+                 * placement of blocks that can't throw with respect
+                 * to the blocks that *can* throw.
+                 */
+                continue;
+            }
+
+            CatchHandlerList handlers = handlersFor(block, addresses);
+
+            if (currentHandlers.size() == 0) {
+                // This is the start of a new catch range.
+                currentStartBlock = block;
+                currentEndBlock = block;
+                currentHandlers = handlers;
+                continue;
+            }
+
+            if (currentHandlers.equals(handlers)
+                    && rangeIsValid(currentStartBlock, block, addresses)) {
+                /*
+                 * The block we are looking at now has the same handlers
+                 * as the block that started the currently open catch
+                 * range, and adding it to the currently open range won't
+                 * cause it to be too long.
+                 */
+                currentEndBlock = block;
+                continue;
+            }
+
+            /*
+             * The block we are looking at now has incompatible handlers,
+             * so we need to finish off the last entry and start a new
+             * one. Note: We only emit an entry if it has associated handlers.
+             */
+            if (currentHandlers.size() != 0) {
+                CatchTable.Entry entry =
+                    makeEntry(currentStartBlock, currentEndBlock,
+                            currentHandlers, addresses);
+                resultList.add(entry);
+            }
+
+            currentStartBlock = block;
+            currentEndBlock = block;
+            currentHandlers = handlers;
+        }
+
+        if (currentHandlers.size() != 0) {
+            // Emit an entry for the range that was left hanging.
+            CatchTable.Entry entry =
+                makeEntry(currentStartBlock, currentEndBlock,
+                        currentHandlers, addresses);
+            resultList.add(entry);
+        }
+
+        // Construct the final result.
+
+        int resultSz = resultList.size();
+
+        if (resultSz == 0) {
+            return CatchTable.EMPTY;
+        }
+
+        CatchTable result = new CatchTable(resultSz);
+
+        for (int i = 0; i < resultSz; i++) {
+            result.set(i, resultList.get(i));
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Makes the {@link CatchHandlerList} for the given basic block.
+     *
+     * @param block {@code non-null;} block to get entries for
+     * @param addresses {@code non-null;} address objects for each block
+     * @return {@code non-null;} array of entries
+     */
+    private static CatchHandlerList handlersFor(BasicBlock block,
+            BlockAddresses addresses) {
+        IntList successors = block.getSuccessors();
+        int succSize = successors.size();
+        int primary = block.getPrimarySuccessor();
+        TypeList catches = block.getLastInsn().getCatches();
+        int catchSize = catches.size();
+
+        if (catchSize == 0) {
+            return CatchHandlerList.EMPTY;
+        }
+
+        if (((primary == -1) && (succSize != catchSize))
+                || ((primary != -1) &&
+                        ((succSize != (catchSize + 1))
+                                || (primary != successors.get(catchSize))))) {
+            /*
+             * Blocks that throw are supposed to list their primary
+             * successor -- if any -- last in the successors list, but
+             * that constraint appears to be violated here.
+             */
+            throw new RuntimeException(
+                    "shouldn't happen: weird successors list");
+        }
+
+        /*
+         * Reduce the effective catchSize if we spot a catch-all that
+         * isn't at the end.
+         */
+        for (int i = 0; i < catchSize; i++) {
+            Type type = catches.getType(i);
+            if (type.equals(Type.OBJECT)) {
+                catchSize = i + 1;
+                break;
+            }
+        }
+
+        CatchHandlerList result = new CatchHandlerList(catchSize);
+
+        for (int i = 0; i < catchSize; i++) {
+            CstType oneType = new CstType(catches.getType(i));
+            CodeAddress oneHandler = addresses.getStart(successors.get(i));
+            result.set(i, oneType, oneHandler.getAddress());
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Makes a {@link CatchTable.Entry} for the given block range and
+     * handlers.
+     *
+     * @param start {@code non-null;} the start block for the range (inclusive)
+     * @param end {@code non-null;} the start block for the range (also inclusive)
+     * @param handlers {@code non-null;} the handlers for the range
+     * @param addresses {@code non-null;} address objects for each block
+     */
+    private static CatchTable.Entry makeEntry(BasicBlock start,
+            BasicBlock end, CatchHandlerList handlers,
+            BlockAddresses addresses) {
+        /*
+         * We start at the *last* instruction of the start block, since
+         * that's the instruction that can throw...
+         */
+        CodeAddress startAddress = addresses.getLast(start);
+
+        // ...And we end *after* the last instruction of the end block.
+        CodeAddress endAddress = addresses.getEnd(end);
+
+        return new CatchTable.Entry(startAddress.getAddress(),
+                endAddress.getAddress(), handlers);
+    }
+
+    /**
+     * Gets whether the address range for the given two blocks is valid
+     * for a catch handler. This is true as long as the covered range is
+     * under 65536 code units.
+     *
+     * @param start {@code non-null;} the start block for the range (inclusive)
+     * @param end {@code non-null;} the start block for the range (also inclusive)
+     * @param addresses {@code non-null;} address objects for each block
+     * @return {@code true} if the range is valid as a catch range
+     */
+    private static boolean rangeIsValid(BasicBlock start, BasicBlock end,
+            BlockAddresses addresses) {
+        if (start == null) {
+            throw new NullPointerException("start == null");
+        }
+
+        if (end == null) {
+            throw new NullPointerException("end == null");
+        }
+
+        // See above about selection of instructions.
+        int startAddress = addresses.getLast(start).getAddress();
+        int endAddress = addresses.getEnd(end).getAddress();
+
+        return (endAddress - startAddress) <= MAX_CATCH_RANGE;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/SwitchData.java b/dx/src/com/android/dx/dex/code/SwitchData.java
new file mode 100644
index 0000000..fa60684
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/SwitchData.java
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.io.Opcodes;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+
+/**
+ * Pseudo-instruction which holds switch data. The switch data is
+ * a map of values to target addresses, and this class writes the data
+ * in either a "packed" or "sparse" form.
+ */
+public final class SwitchData extends VariableSizeInsn {
+    /**
+     * {@code non-null;} address representing the instruction that uses this
+     * instance
+     */
+    private final CodeAddress user;
+
+    /** {@code non-null;} sorted list of switch cases (keys) */
+    private final IntList cases;
+
+    /**
+     * {@code non-null;} corresponding list of code addresses; the branch
+     * target for each case
+     */
+    private final CodeAddress[] targets;
+
+    /** whether the output table will be packed (vs. sparse) */
+    private final boolean packed;
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     * @param user {@code non-null;} address representing the instruction that
+     * uses this instance
+     * @param cases {@code non-null;} sorted list of switch cases (keys)
+     * @param targets {@code non-null;} corresponding list of code addresses; the
+     * branch target for each case
+     */
+    public SwitchData(SourcePosition position, CodeAddress user,
+                      IntList cases, CodeAddress[] targets) {
+        super(position, RegisterSpecList.EMPTY);
+
+        if (user == null) {
+            throw new NullPointerException("user == null");
+        }
+
+        if (cases == null) {
+            throw new NullPointerException("cases == null");
+        }
+
+        if (targets == null) {
+            throw new NullPointerException("targets == null");
+        }
+
+        int sz = cases.size();
+
+        if (sz != targets.length) {
+            throw new IllegalArgumentException("cases / targets mismatch");
+        }
+
+        if (sz > 65535) {
+            throw new IllegalArgumentException("too many cases");
+        }
+
+        this.user = user;
+        this.cases = cases;
+        this.targets = targets;
+        this.packed = shouldPack(cases);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return packed ? (int) packedCodeSize(cases) :
+            (int) sparseCodeSize(cases);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out) {
+        int baseAddress = user.getAddress();
+        int defaultTarget = Dops.PACKED_SWITCH.getFormat().codeSize();
+        int sz = targets.length;
+
+        if (packed) {
+            int firstCase = (sz == 0) ? 0 : cases.get(0);
+            int lastCase = (sz == 0) ? 0 : cases.get(sz - 1);
+            int outSz = lastCase - firstCase + 1;
+
+            out.writeShort(Opcodes.PACKED_SWITCH_PAYLOAD);
+            out.writeShort(outSz);
+            out.writeInt(firstCase);
+
+            int caseAt = 0;
+            for (int i = 0; i < outSz; i++) {
+                int outCase = firstCase + i;
+                int oneCase = cases.get(caseAt);
+                int relTarget;
+
+                if (oneCase > outCase) {
+                    relTarget = defaultTarget;
+                } else {
+                    relTarget = targets[caseAt].getAddress() - baseAddress;
+                    caseAt++;
+                }
+
+                out.writeInt(relTarget);
+            }
+        } else {
+            out.writeShort(Opcodes.SPARSE_SWITCH_PAYLOAD);
+            out.writeShort(sz);
+
+            for (int i = 0; i < sz; i++) {
+                out.writeInt(cases.get(i));
+            }
+
+            for (int i = 0; i < sz; i++) {
+                int relTarget = targets[i].getAddress() - baseAddress;
+                out.writeInt(relTarget);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new SwitchData(getPosition(), user, cases, targets);
+    }
+
+    /**
+     * Returns whether or not this instance's data will be output as packed.
+     *
+     * @return {@code true} iff the data is to be packed
+     */
+    public boolean isPacked() {
+        return packed;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        int sz = targets.length;
+        for (int i = 0; i < sz; i++) {
+            sb.append("\n    ");
+            sb.append(cases.get(i));
+            sb.append(": ");
+            sb.append(targets[i]);
+        }
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String listingString0(boolean noteIndices) {
+        int baseAddress = user.getAddress();
+        StringBuilder sb = new StringBuilder(100);
+        int sz = targets.length;
+
+        sb.append(packed ? "packed" : "sparse");
+        sb.append("-switch-payload // for switch @ ");
+        sb.append(Hex.u2(baseAddress));
+
+        for (int i = 0; i < sz; i++) {
+            int absTarget = targets[i].getAddress();
+            int relTarget = absTarget - baseAddress;
+            sb.append("\n  ");
+            sb.append(cases.get(i));
+            sb.append(": ");
+            sb.append(Hex.u4(absTarget));
+            sb.append(" // ");
+            sb.append(Hex.s4(relTarget));
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Gets the size of a packed table for the given cases, in 16-bit code
+     * units.
+     *
+     * @param cases {@code non-null;} sorted list of cases
+     * @return {@code >= -1;} the packed table size or {@code -1} if the
+     * cases couldn't possibly be represented as a packed table
+     */
+    private static long packedCodeSize(IntList cases) {
+        int sz = cases.size();
+        long low = cases.get(0);
+        long high = cases.get(sz - 1);
+        long result = ((high - low + 1)) * 2 + 4;
+
+        return (result <= 0x7fffffff) ? result : -1;
+    }
+
+    /**
+     * Gets the size of a sparse table for the given cases, in 16-bit code
+     * units.
+     *
+     * @param cases {@code non-null;} sorted list of cases
+     * @return {@code > 0;} the sparse table size
+     */
+    private static long sparseCodeSize(IntList cases) {
+        int sz = cases.size();
+
+        return (sz * 4L) + 2;
+    }
+
+    /**
+     * Determines whether the given list of cases warrant being packed.
+     *
+     * @param cases {@code non-null;} sorted list of cases
+     * @return {@code true} iff the table encoding the cases
+     * should be packed
+     */
+    private static boolean shouldPack(IntList cases) {
+        int sz = cases.size();
+
+        if (sz < 2) {
+            return true;
+        }
+
+        long packedSize = packedCodeSize(cases);
+        long sparseSize = sparseCodeSize(cases);
+
+        /*
+         * We pick the packed representation if it is possible and
+         * would be as small or smaller than 5/4 of the sparse
+         * representation. That is, we accept some size overhead on
+         * the packed representation, since that format is faster to
+         * execute at runtime.
+         */
+        return (packedSize >= 0) && (packedSize <= ((sparseSize * 5) / 4));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/TargetInsn.java b/dx/src/com/android/dx/dex/code/TargetInsn.java
new file mode 100644
index 0000000..cbb5ff9
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/TargetInsn.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+
+/**
+ * Instruction which has a single branch target.
+ */
+public final class TargetInsn extends FixedSizeInsn {
+    /** {@code non-null;} the branch target */
+    private CodeAddress target;
+
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}), and the target is initially
+     * {@code null}.
+     *
+     * @param opcode the opcode; one of the constants from {@link Dops}
+     * @param position {@code non-null;} source position
+     * @param registers {@code non-null;} register list, including a
+     * result register if appropriate (that is, registers may be either
+     * ins or outs)
+     * @param target {@code non-null;} the branch target
+     */
+    public TargetInsn(Dop opcode, SourcePosition position,
+                      RegisterSpecList registers, CodeAddress target) {
+        super(opcode, position, registers);
+
+        if (target == null) {
+            throw new NullPointerException("target == null");
+        }
+
+        this.target = target;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withOpcode(Dop opcode) {
+        return new TargetInsn(opcode, getPosition(), getRegisters(), target);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisters(RegisterSpecList registers) {
+        return new TargetInsn(getOpcode(), getPosition(), registers, target);
+    }
+
+    /**
+     * Returns an instance that is just like this one, except that its
+     * opcode has the opposite sense (as a test; e.g. a
+     * {@code lt} test becomes a {@code ge}), and its branch
+     * target is replaced by the one given, and all set-once values
+     * associated with the class (such as its address) are reset.
+     *
+     * @param target {@code non-null;} the new branch target
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public TargetInsn withNewTargetAndReversed(CodeAddress target) {
+        Dop opcode = getOpcode().getOppositeTest();
+
+        return new TargetInsn(opcode, getPosition(), getRegisters(), target);
+    }
+
+    /**
+     * Gets the unique branch target of this instruction.
+     *
+     * @return {@code non-null;} the branch target
+     */
+    public CodeAddress getTarget() {
+        return target;
+    }
+
+    /**
+     * Gets the target address of this instruction. This is only valid
+     * to call if the target instruction has been assigned an address,
+     * and it is merely a convenient shorthand for
+     * {@code getTarget().getAddress()}.
+     *
+     * @return {@code >= 0;} the target address
+     */
+    public int getTargetAddress() {
+        return target.getAddress();
+    }
+
+    /**
+     * Gets the branch offset of this instruction. This is only valid to
+     * call if both this and the target instruction each has been assigned
+     * an address, and it is merely a convenient shorthand for
+     * {@code getTargetAddress() - getAddress()}.
+     *
+     * @return the branch offset
+     */
+    public int getTargetOffset() {
+        return target.getAddress() - getAddress();
+    }
+
+    /**
+     * Returns whether the target offset is known.
+     *
+     * @return {@code true} if the target offset is known or
+     * {@code false} if not
+     */
+    public boolean hasTargetOffset() {
+        return hasAddress() && target.hasAddress();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String argString() {
+        if (target == null) {
+            return "????";
+        }
+
+        return target.identifierString();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/VariableSizeInsn.java b/dx/src/com/android/dx/dex/code/VariableSizeInsn.java
new file mode 100644
index 0000000..06b40f7
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/VariableSizeInsn.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+
+/**
+ * Pseudo-instruction base class for variable-sized instructions.
+ */
+public abstract class VariableSizeInsn extends DalvInsn {
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     * @param registers {@code non-null;} source registers
+     */
+    public VariableSizeInsn(SourcePosition position,
+                            RegisterSpecList registers) {
+        super(Dops.SPECIAL_FORMAT, position, registers);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final DalvInsn withOpcode(Dop opcode) {
+        throw new RuntimeException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final DalvInsn withRegisterOffset(int delta) {
+        return withRegisters(getRegisters().withOffset(delta));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/ZeroSizeInsn.java b/dx/src/com/android/dx/dex/code/ZeroSizeInsn.java
new file mode 100644
index 0000000..2cc157b
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/ZeroSizeInsn.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code;
+
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Pseudo-instruction base class for zero-size (no code emitted)
+ * instructions, which are generally used for tracking metainformation
+ * about the code they are adjacent to.
+ */
+public abstract class ZeroSizeInsn extends DalvInsn {
+    /**
+     * Constructs an instance. The output address of this instance is initially
+     * unknown ({@code -1}).
+     *
+     * @param position {@code non-null;} source position
+     */
+    public ZeroSizeInsn(SourcePosition position) {
+        super(Dops.SPECIAL_FORMAT, position, RegisterSpecList.EMPTY);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int codeSize() {
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void writeTo(AnnotatedOutput out) {
+        // Nothing to do here, for this class.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final DalvInsn withOpcode(Dop opcode) {
+        throw new RuntimeException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DalvInsn withRegisterOffset(int delta) {
+        return withRegisters(getRegisters().withOffset(delta));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form10t.java b/dx/src/com/android/dx/dex/code/form/Form10t.java
new file mode 100644
index 0000000..ced4a64
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form10t.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.TargetInsn;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Instruction format {@code 10t}. See the instruction format spec
+ * for details.
+ */
+public final class Form10t extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form10t();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form10t() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        return branchString(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        return branchComment(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!((insn instanceof TargetInsn) &&
+              (insn.getRegisters().size() == 0))) {
+            return false;
+        }
+
+        TargetInsn ti = (TargetInsn) insn;
+        return ti.hasTargetOffset() ? branchFits(ti) : true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean branchFits(TargetInsn insn) {
+        int offset = insn.getTargetOffset();
+
+        // Note: A zero offset would fit, but it is prohibited by the spec.
+        return (offset != 0) && signedFitsInByte(offset);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        int offset = ((TargetInsn) insn).getTargetOffset();
+
+        write(out, opcodeUnit(insn, (offset & 0xff)));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form10x.java b/dx/src/com/android/dx/dex/code/form/Form10x.java
new file mode 100644
index 0000000..4be3aa0
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form10x.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.SimpleInsn;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Instruction format {@code 10x}. See the instruction format spec
+ * for details.
+ */
+public final class Form10x extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form10x();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form10x() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        // This format has no arguments.
+        return "";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        // This format has no comment.
+        return "";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        return (insn instanceof SimpleInsn) &&
+            (insn.getRegisters().size() == 0);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        write(out, opcodeUnit(insn, 0));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form11n.java b/dx/src/com/android/dx/dex/code/form/Form11n.java
new file mode 100644
index 0000000..f83f331
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form11n.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 11n}. See the instruction format spec
+ * for details.
+ */
+public final class Form11n extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form11n();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form11n() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+
+        return regs.get(0).regString() + ", " + literalBitsString(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+        return literalBitsComment(value, 4);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+
+        if (!((insn instanceof CstInsn) &&
+              (regs.size() == 1) &&
+              unsignedFitsInNibble(regs.get(0).getReg()))) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        Constant cst = ci.getConstant();
+
+        if (!(cst instanceof CstLiteralBits)) {
+            return false;
+        }
+
+        CstLiteralBits cb = (CstLiteralBits) cst;
+
+        return cb.fitsInInt() && signedFitsInNibble(cb.getIntBits());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(1);
+
+        bits.set(0, unsignedFitsInNibble(regs.get(0).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int value =
+            ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits();
+
+        write(out,
+              opcodeUnit(insn, makeByte(regs.get(0).getReg(), value & 0xf)));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form11x.java b/dx/src/com/android/dx/dex/code/form/Form11x.java
new file mode 100644
index 0000000..cb1fd0d
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form11x.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.SimpleInsn;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 11x}. See the instruction format spec
+ * for details.
+ */
+public final class Form11x extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form11x();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form11x() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        // This format has no comment.
+        return "";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return (insn instanceof SimpleInsn) &&
+            (regs.size() == 1) &&
+            unsignedFitsInByte(regs.get(0).getReg());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(1);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        write(out, opcodeUnit(insn, regs.get(0).getReg()));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form12x.java b/dx/src/com/android/dx/dex/code/form/Form12x.java
new file mode 100644
index 0000000..a2e88e3
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form12x.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.SimpleInsn;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 12x}. See the instruction format spec
+ * for details.
+ */
+public final class Form12x extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form12x();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form12x() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int sz = regs.size();
+
+        /*
+         * The (sz - 2) and (sz - 1) below makes this code work for
+         * both the two- and three-register ops. (See "case 3" in
+         * isCompatible(), below.)
+         */
+
+        return regs.get(sz - 2).regString() + ", " +
+            regs.get(sz - 1).regString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        // This format has no comment.
+        return "";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!(insn instanceof SimpleInsn)) {
+            return false;
+        }
+
+        RegisterSpecList regs = insn.getRegisters();
+        RegisterSpec rs1;
+        RegisterSpec rs2;
+
+        switch (regs.size()) {
+            case 2: {
+                rs1 = regs.get(0);
+                rs2 = regs.get(1);
+                break;
+            }
+            case 3: {
+                /*
+                 * This format is allowed for ops that are effectively
+                 * 3-arg but where the first two args are identical.
+                 */
+                rs1 = regs.get(1);
+                rs2 = regs.get(2);
+                if (rs1.getReg() != regs.get(0).getReg()) {
+                    return false;
+                }
+                break;
+            }
+            default: {
+                return false;
+            }
+        }
+
+        return unsignedFitsInNibble(rs1.getReg()) &&
+            unsignedFitsInNibble(rs2.getReg());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(2);
+        int r0 = regs.get(0).getReg();
+        int r1 = regs.get(1).getReg();
+
+        switch (regs.size()) {
+          case 2: {
+            bits.set(0, unsignedFitsInNibble(r0));
+            bits.set(1, unsignedFitsInNibble(r1));
+            break;
+          }
+          case 3: {
+            if (r0 != r1) {
+                bits.set(0, false);
+                bits.set(1, false);
+            } else {
+                boolean dstRegComp = unsignedFitsInNibble(r1);
+                bits.set(0, dstRegComp);
+                bits.set(1, dstRegComp);
+            }
+
+            bits.set(2, unsignedFitsInNibble(regs.get(2).getReg()));
+            break;
+          }
+          default: {
+            throw new AssertionError();
+          }
+        }
+
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int sz = regs.size();
+
+        /*
+         * The (sz - 2) and (sz - 1) below makes this code work for
+         * both the two- and three-register ops. (See "case 3" in
+         * isCompatible(), above.)
+         */
+
+        write(out, opcodeUnit(insn,
+                              makeByte(regs.get(sz - 2).getReg(),
+                                       regs.get(sz - 1).getReg())));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form20t.java b/dx/src/com/android/dx/dex/code/form/Form20t.java
new file mode 100644
index 0000000..a19ed28
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form20t.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.TargetInsn;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Instruction format {@code 20t}. See the instruction format spec
+ * for details.
+ */
+public final class Form20t extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form20t();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form20t() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        return branchString(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        return branchComment(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!((insn instanceof TargetInsn) &&
+              (insn.getRegisters().size() == 0))) {
+            return false;
+        }
+
+        TargetInsn ti = (TargetInsn) insn;
+        return ti.hasTargetOffset() ? branchFits(ti) : true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean branchFits(TargetInsn insn) {
+        int offset = insn.getTargetOffset();
+
+        // Note: A zero offset would fit, but it is prohibited by the spec.
+        return (offset != 0) && signedFitsInShort(offset);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        int offset = ((TargetInsn) insn).getTargetOffset();
+
+        write(out, opcodeUnit(insn, 0), (short) offset);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form21c.java b/dx/src/com/android/dx/dex/code/form/Form21c.java
new file mode 100644
index 0000000..40a03da
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form21c.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 21c}. See the instruction format spec
+ * for details.
+ */
+public final class Form21c extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form21c();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form21c() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + insn.cstString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        if (noteIndices) {
+            return insn.cstComment();
+        } else {
+            return "";
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!(insn instanceof CstInsn)) {
+            return false;
+        }
+
+        RegisterSpecList regs = insn.getRegisters();
+        RegisterSpec reg;
+
+        switch (regs.size()) {
+            case 1: {
+                reg = regs.get(0);
+                break;
+            }
+            case 2: {
+                /*
+                 * This format is allowed for ops that are effectively
+                 * 2-arg but where the two args are identical.
+                 */
+                reg = regs.get(0);
+                if (reg.getReg() != regs.get(1).getReg()) {
+                    return false;
+                }
+                break;
+            }
+            default: {
+                return false;
+            }
+        }
+
+        if (!unsignedFitsInByte(reg.getReg())) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        int cpi = ci.getIndex();
+        Constant cst = ci.getConstant();
+
+        if (! unsignedFitsInShort(cpi)) {
+            return false;
+        }
+
+        return cst instanceof CstType ||
+            cst instanceof CstFieldRef ||
+            cst instanceof CstString ||
+            cst instanceof CstMethodHandle ||
+            cst instanceof CstProtoRef;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int sz = regs.size();
+        BitSet bits = new BitSet(sz);
+        boolean compat = unsignedFitsInByte(regs.get(0).getReg());
+
+        if (sz == 1) {
+            bits.set(0, compat);
+        } else {
+            if (regs.get(0).getReg() == regs.get(1).getReg()) {
+                bits.set(0, compat);
+                bits.set(1, compat);
+            }
+        }
+
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int cpi = ((CstInsn) insn).getIndex();
+
+        write(out,
+              opcodeUnit(insn, regs.get(0).getReg()),
+              (short) cpi);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form21h.java b/dx/src/com/android/dx/dex/code/form/Form21h.java
new file mode 100644
index 0000000..ea51cb8
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form21h.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 21h}. See the instruction format spec
+ * for details.
+ */
+public final class Form21h extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form21h();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form21h() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+
+        return regs.get(0).regString() + ", " + literalBitsString(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+
+        return
+            literalBitsComment(value,
+                    (regs.get(0).getCategory() == 1) ? 32 : 64);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        if (!((insn instanceof CstInsn) &&
+              (regs.size() == 1) &&
+              unsignedFitsInByte(regs.get(0).getReg()))) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        Constant cst = ci.getConstant();
+
+        if (!(cst instanceof CstLiteralBits)) {
+            return false;
+        }
+
+        CstLiteralBits cb = (CstLiteralBits) cst;
+
+        // Where the high bits are depends on the category of the target.
+        if (regs.get(0).getCategory() == 1) {
+            int bits = cb.getIntBits();
+            return ((bits & 0xffff) == 0);
+        } else {
+            long bits = cb.getLongBits();
+            return ((bits & 0xffffffffffffL) == 0);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(1);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits cb = (CstLiteralBits) ((CstInsn) insn).getConstant();
+        short bits;
+
+        // Where the high bits are depends on the category of the target.
+        if (regs.get(0).getCategory() == 1) {
+            bits = (short) (cb.getIntBits() >>> 16);
+        } else {
+            bits = (short) (cb.getLongBits() >>> 48);
+        }
+
+        write(out, opcodeUnit(insn, regs.get(0).getReg()), bits);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form21s.java b/dx/src/com/android/dx/dex/code/form/Form21s.java
new file mode 100644
index 0000000..76f9824
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form21s.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 21s}. See the instruction format spec
+ * for details.
+ */
+public final class Form21s extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form21s();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form21s() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+
+        return regs.get(0).regString() + ", " + literalBitsString(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+        return literalBitsComment(value, 16);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        if (!((insn instanceof CstInsn) &&
+              (regs.size() == 1) &&
+              unsignedFitsInByte(regs.get(0).getReg()))) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        Constant cst = ci.getConstant();
+
+        if (!(cst instanceof CstLiteralBits)) {
+            return false;
+        }
+
+        CstLiteralBits cb = (CstLiteralBits) cst;
+
+        return cb.fitsInInt() && signedFitsInShort(cb.getIntBits());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(1);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int value =
+            ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits();
+
+        write(out,
+              opcodeUnit(insn, regs.get(0).getReg()),
+              (short) value);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form21t.java b/dx/src/com/android/dx/dex/code/form/Form21t.java
new file mode 100644
index 0000000..9d31dc5
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form21t.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.TargetInsn;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 21t}. See the instruction format spec
+ * for details.
+ */
+public final class Form21t extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form21t();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form21t() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + branchString(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        return branchComment(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+
+        if (!((insn instanceof TargetInsn) &&
+              (regs.size() == 1) &&
+              unsignedFitsInByte(regs.get(0).getReg()))) {
+            return false;
+        }
+
+        TargetInsn ti = (TargetInsn) insn;
+        return ti.hasTargetOffset() ? branchFits(ti) : true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(1);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean branchFits(TargetInsn insn) {
+        int offset = insn.getTargetOffset();
+
+        // Note: A zero offset would fit, but it is prohibited by the spec.
+        return (offset != 0) && signedFitsInShort(offset);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int offset = ((TargetInsn) insn).getTargetOffset();
+
+        write(out,
+              opcodeUnit(insn, regs.get(0).getReg()),
+              (short) offset);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form22b.java b/dx/src/com/android/dx/dex/code/form/Form22b.java
new file mode 100644
index 0000000..006308b
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form22b.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 22b}. See the instruction format spec
+ * for details.
+ */
+public final class Form22b extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form22b();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form22b() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+
+        return regs.get(0).regString() + ", " + regs.get(1).regString() +
+            ", " + literalBitsString(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+        return literalBitsComment(value, 8);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        if (!((insn instanceof CstInsn) &&
+              (regs.size() == 2) &&
+              unsignedFitsInByte(regs.get(0).getReg()) &&
+              unsignedFitsInByte(regs.get(1).getReg()))) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        Constant cst = ci.getConstant();
+
+        if (!(cst instanceof CstLiteralBits)) {
+            return false;
+        }
+
+        CstLiteralBits cb = (CstLiteralBits) cst;
+
+        return cb.fitsInInt() && signedFitsInByte(cb.getIntBits());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(2);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        bits.set(1, unsignedFitsInByte(regs.get(1).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int value =
+            ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits();
+
+        write(out,
+              opcodeUnit(insn, regs.get(0).getReg()),
+              codeUnit(regs.get(1).getReg(), value & 0xff));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form22c.java b/dx/src/com/android/dx/dex/code/form/Form22c.java
new file mode 100644
index 0000000..c964cd8
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form22c.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 22c}. See the instruction format spec
+ * for details.
+ */
+public final class Form22c extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form22c();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form22c() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + regs.get(1).regString() +
+            ", " + insn.cstString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        if (noteIndices) {
+            return insn.cstComment();
+        } else {
+            return "";
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        if (!((insn instanceof CstInsn) &&
+              (regs.size() == 2) &&
+              unsignedFitsInNibble(regs.get(0).getReg()) &&
+              unsignedFitsInNibble(regs.get(1).getReg()))) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        int cpi = ci.getIndex();
+
+        if (! unsignedFitsInShort(cpi)) {
+            return false;
+        }
+
+        Constant cst = ci.getConstant();
+        return (cst instanceof CstType) ||
+            (cst instanceof CstFieldRef);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(2);
+
+        bits.set(0, unsignedFitsInNibble(regs.get(0).getReg()));
+        bits.set(1, unsignedFitsInNibble(regs.get(1).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int cpi = ((CstInsn) insn).getIndex();
+
+        write(out,
+              opcodeUnit(insn,
+                         makeByte(regs.get(0).getReg(), regs.get(1).getReg())),
+              (short) cpi);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form22s.java b/dx/src/com/android/dx/dex/code/form/Form22s.java
new file mode 100644
index 0000000..a48c367
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form22s.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 22s}. See the instruction format spec
+ * for details.
+ */
+public final class Form22s extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form22s();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form22s() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+
+        return regs.get(0).regString() + ", " + regs.get(1).regString()
+            + ", " + literalBitsString(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+        return literalBitsComment(value, 16);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        if (!((insn instanceof CstInsn) &&
+              (regs.size() == 2) &&
+              unsignedFitsInNibble(regs.get(0).getReg()) &&
+              unsignedFitsInNibble(regs.get(1).getReg()))) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        Constant cst = ci.getConstant();
+
+        if (!(cst instanceof CstLiteralBits)) {
+            return false;
+        }
+
+        CstLiteralBits cb = (CstLiteralBits) cst;
+
+        return cb.fitsInInt() && signedFitsInShort(cb.getIntBits());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(2);
+
+        bits.set(0, unsignedFitsInNibble(regs.get(0).getReg()));
+        bits.set(1, unsignedFitsInNibble(regs.get(1).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int value =
+            ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits();
+
+        write(out,
+              opcodeUnit(insn,
+                         makeByte(regs.get(0).getReg(), regs.get(1).getReg())),
+              (short) value);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form22t.java b/dx/src/com/android/dx/dex/code/form/Form22t.java
new file mode 100644
index 0000000..f67608f
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form22t.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.TargetInsn;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 22t}. See the instruction format spec
+ * for details.
+ */
+public final class Form22t extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form22t();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form22t() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + regs.get(1).regString() +
+            ", " + branchString(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        return branchComment(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+
+        if (!((insn instanceof TargetInsn) &&
+              (regs.size() == 2) &&
+              unsignedFitsInNibble(regs.get(0).getReg()) &&
+              unsignedFitsInNibble(regs.get(1).getReg()))) {
+            return false;
+        }
+
+        TargetInsn ti = (TargetInsn) insn;
+        return ti.hasTargetOffset() ? branchFits(ti) : true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(2);
+
+        bits.set(0, unsignedFitsInNibble(regs.get(0).getReg()));
+        bits.set(1, unsignedFitsInNibble(regs.get(1).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean branchFits(TargetInsn insn) {
+        int offset = insn.getTargetOffset();
+
+        // Note: A zero offset would fit, but it is prohibited by the spec.
+        return (offset != 0) && signedFitsInShort(offset);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int offset = ((TargetInsn) insn).getTargetOffset();
+
+        write(out,
+              opcodeUnit(insn,
+                         makeByte(regs.get(0).getReg(), regs.get(1).getReg())),
+              (short) offset);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form22x.java b/dx/src/com/android/dx/dex/code/form/Form22x.java
new file mode 100644
index 0000000..fedc911
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form22x.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.SimpleInsn;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 22x}. See the instruction format spec
+ * for details.
+ */
+public final class Form22x extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form22x();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form22x() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + regs.get(1).regString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        // This format has no comment.
+        return "";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+
+        return (insn instanceof SimpleInsn) &&
+            (regs.size() == 2) &&
+            unsignedFitsInByte(regs.get(0).getReg()) &&
+            unsignedFitsInShort(regs.get(1).getReg());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(2);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        bits.set(1, unsignedFitsInShort(regs.get(1).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        write(out,
+              opcodeUnit(insn, regs.get(0).getReg()),
+              (short) regs.get(1).getReg());
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form23x.java b/dx/src/com/android/dx/dex/code/form/Form23x.java
new file mode 100644
index 0000000..4e11ab8
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form23x.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.SimpleInsn;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 23x}. See the instruction format spec
+ * for details.
+ */
+public final class Form23x extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form23x();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form23x() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + regs.get(1).regString() +
+            ", " + regs.get(2).regString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        // This format has no comment.
+        return "";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+
+        return (insn instanceof SimpleInsn) &&
+            (regs.size() == 3) &&
+            unsignedFitsInByte(regs.get(0).getReg()) &&
+            unsignedFitsInByte(regs.get(1).getReg()) &&
+            unsignedFitsInByte(regs.get(2).getReg());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(3);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        bits.set(1, unsignedFitsInByte(regs.get(1).getReg()));
+        bits.set(2, unsignedFitsInByte(regs.get(2).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        write(out,
+              opcodeUnit(insn, regs.get(0).getReg()),
+              codeUnit(regs.get(1).getReg(), regs.get(2).getReg()));
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form30t.java b/dx/src/com/android/dx/dex/code/form/Form30t.java
new file mode 100644
index 0000000..86a3e82
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form30t.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.TargetInsn;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Instruction format {@code 30t}. See the instruction format spec
+ * for details.
+ */
+public final class Form30t extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form30t();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form30t() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        return branchString(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        return branchComment(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!((insn instanceof TargetInsn) &&
+              (insn.getRegisters().size() == 0))) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean branchFits(TargetInsn insn) {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        int offset = ((TargetInsn) insn).getTargetOffset();
+
+        write(out, opcodeUnit(insn, 0), offset);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form31c.java b/dx/src/com/android/dx/dex/code/form/Form31c.java
new file mode 100644
index 0000000..bf64f27
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form31c.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 31c}. See the instruction format spec
+ * for details.
+ */
+public final class Form31c extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form31c();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form31c() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + insn.cstString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        if (noteIndices) {
+            return insn.cstComment();
+        } else {
+            return "";
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!(insn instanceof CstInsn)) {
+            return false;
+        }
+
+        RegisterSpecList regs = insn.getRegisters();
+        RegisterSpec reg;
+
+        switch (regs.size()) {
+            case 1: {
+                reg = regs.get(0);
+                break;
+            }
+            case 2: {
+                /*
+                 * This format is allowed for ops that are effectively
+                 * 2-arg but where the two args are identical.
+                 */
+                reg = regs.get(0);
+                if (reg.getReg() != regs.get(1).getReg()) {
+                    return false;
+                }
+                break;
+            }
+            default: {
+                return false;
+            }
+        }
+
+        if (!unsignedFitsInByte(reg.getReg())) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        Constant cst = ci.getConstant();
+
+        return (cst instanceof CstType) ||
+            (cst instanceof CstFieldRef) ||
+            (cst instanceof CstString);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int sz = regs.size();
+        BitSet bits = new BitSet(sz);
+        boolean compat = unsignedFitsInByte(regs.get(0).getReg());
+
+        if (sz == 1) {
+            bits.set(0, compat);
+        } else {
+            if (regs.get(0).getReg() == regs.get(1).getReg()) {
+                bits.set(0, compat);
+                bits.set(1, compat);
+            }
+        }
+
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int cpi = ((CstInsn) insn).getIndex();
+
+        write(out, opcodeUnit(insn, regs.get(0).getReg()), cpi);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form31i.java b/dx/src/com/android/dx/dex/code/form/Form31i.java
new file mode 100644
index 0000000..a059111
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form31i.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 31i}. See the instruction format spec
+ * for details.
+ */
+public final class Form31i extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form31i();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form31i() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+
+        return regs.get(0).regString() + ", " + literalBitsString(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+        return literalBitsComment(value, 32);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        if (!((insn instanceof CstInsn) &&
+              (regs.size() == 1) &&
+              unsignedFitsInByte(regs.get(0).getReg()))) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        Constant cst = ci.getConstant();
+
+        if (!(cst instanceof CstLiteralBits)) {
+            return false;
+        }
+
+        return ((CstLiteralBits) cst).fitsInInt();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(1);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int value =
+            ((CstLiteralBits) ((CstInsn) insn).getConstant()).getIntBits();
+
+        write(out, opcodeUnit(insn, regs.get(0).getReg()), value);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form31t.java b/dx/src/com/android/dx/dex/code/form/Form31t.java
new file mode 100644
index 0000000..77dc077
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form31t.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.TargetInsn;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 31t}. See the instruction format spec
+ * for details.
+ */
+public final class Form31t extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form31t();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form31t() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + branchString(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        return branchComment(insn);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+
+        if (!((insn instanceof TargetInsn) &&
+              (regs.size() == 1) &&
+              unsignedFitsInByte(regs.get(0).getReg()))) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(1);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean branchFits(TargetInsn insn) {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int offset = ((TargetInsn) insn).getTargetOffset();
+
+        write(out, opcodeUnit(insn, regs.get(0).getReg()), offset);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form32x.java b/dx/src/com/android/dx/dex/code/form/Form32x.java
new file mode 100644
index 0000000..a653619
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form32x.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.SimpleInsn;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 32x}. See the instruction format spec
+ * for details.
+ */
+public final class Form32x extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form32x();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form32x() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return regs.get(0).regString() + ", " + regs.get(1).regString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        // This format has no comment.
+        return "";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        return (insn instanceof SimpleInsn) &&
+            (regs.size() == 2) &&
+            unsignedFitsInShort(regs.get(0).getReg()) &&
+            unsignedFitsInShort(regs.get(1).getReg());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(2);
+
+        bits.set(0, unsignedFitsInShort(regs.get(0).getReg()));
+        bits.set(1, unsignedFitsInShort(regs.get(1).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+
+        write(out,
+              opcodeUnit(insn, 0),
+              (short) regs.get(0).getReg(),
+              (short) regs.get(1).getReg());
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form35c.java b/dx/src/com/android/dx/dex/code/form/Form35c.java
new file mode 100644
index 0000000..7d05395
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form35c.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 35c}. See the instruction format spec
+ * for details.
+ */
+public final class Form35c extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form35c();
+
+    /** Maximal number of operands */
+    private static final int MAX_NUM_OPS = 5;
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form35c() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = explicitize(insn.getRegisters());
+        return regListString(regs) + ", " + insn.cstString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        if (noteIndices) {
+            return insn.cstComment();
+        } else {
+            return "";
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!(insn instanceof CstInsn)) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        int cpi = ci.getIndex();
+
+        if (! unsignedFitsInShort(cpi)) {
+            return false;
+        }
+
+        Constant cst = ci.getConstant();
+        if (!((cst instanceof CstMethodRef) ||
+              (cst instanceof CstType) ||
+              (cst instanceof CstCallSiteRef))) {
+            return false;
+        }
+
+        RegisterSpecList regs = ci.getRegisters();
+        return (wordCount(regs) >= 0);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int sz = regs.size();
+        BitSet bits = new BitSet(sz);
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec reg = regs.get(i);
+            /*
+             * The check below adds (category - 1) to the register, to
+             * account for the fact that the second half of a
+             * category-2 register has to be represented explicitly in
+             * the result.
+             */
+            bits.set(i, unsignedFitsInNibble(reg.getReg() +
+                                             reg.getCategory() - 1));
+        }
+
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        int cpi = ((CstInsn) insn).getIndex();
+        RegisterSpecList regs = explicitize(insn.getRegisters());
+        int sz = regs.size();
+        int r0 = (sz > 0) ? regs.get(0).getReg() : 0;
+        int r1 = (sz > 1) ? regs.get(1).getReg() : 0;
+        int r2 = (sz > 2) ? regs.get(2).getReg() : 0;
+        int r3 = (sz > 3) ? regs.get(3).getReg() : 0;
+        int r4 = (sz > 4) ? regs.get(4).getReg() : 0;
+
+        write(out,
+              opcodeUnit(insn,
+                         makeByte(r4, sz)), // encode the fifth operand here
+              (short) cpi,
+              codeUnit(r0, r1, r2, r3));
+    }
+
+    /**
+     * Gets the number of words required for the given register list, where
+     * category-2 values count as two words. Return {@code -1} if the
+     * list requires more than five words or contains registers that need
+     * more than a nibble to identify them.
+     *
+     * @param regs {@code non-null;} the register list in question
+     * @return {@code >= -1;} the number of words required, or {@code -1}
+     * if the list couldn't possibly fit in this format
+     */
+    private static int wordCount(RegisterSpecList regs) {
+        int sz = regs.size();
+
+        if (sz > MAX_NUM_OPS) {
+            // It can't possibly fit.
+            return -1;
+        }
+
+        int result = 0;
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec one = regs.get(i);
+            result += one.getCategory();
+            /*
+             * The check below adds (category - 1) to the register, to
+             * account for the fact that the second half of a
+             * category-2 register has to be represented explicitly in
+             * the result.
+             */
+            if (!unsignedFitsInNibble(one.getReg() + one.getCategory() - 1)) {
+                return -1;
+            }
+        }
+
+        return (result <= MAX_NUM_OPS) ? result : -1;
+    }
+
+    /**
+     * Returns a register list which is equivalent to the given one,
+     * except that it splits category-2 registers into two explicit
+     * entries. This returns the original list if no modification is
+     * required
+     *
+     * @param orig {@code non-null;} the original list
+     * @return {@code non-null;} the list with the described transformation
+     */
+    private static RegisterSpecList explicitize(RegisterSpecList orig) {
+        int wordCount = wordCount(orig);
+        int sz = orig.size();
+
+        if (wordCount == sz) {
+            return orig;
+        }
+
+        RegisterSpecList result = new RegisterSpecList(wordCount);
+        int wordAt = 0;
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec one = orig.get(i);
+            result.set(wordAt, one);
+            if (one.getCategory() == 2) {
+                result.set(wordAt + 1,
+                           RegisterSpec.make(one.getReg() + 1, Type.VOID));
+                wordAt += 2;
+            } else {
+                wordAt++;
+            }
+        }
+
+        result.setImmutable();
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form3rc.java b/dx/src/com/android/dx/dex/code/form/Form3rc.java
new file mode 100644
index 0000000..732214a
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form3rc.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Instruction format {@code 3rc}. See the instruction format spec
+ * for details.
+ */
+public final class Form3rc extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form3rc();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form3rc() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        return regRangeString(insn.getRegisters()) + ", " +
+            insn.cstString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        if (noteIndices) {
+            return insn.cstComment();
+        } else {
+            return "";
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!(insn instanceof CstInsn)) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        int cpi = ci.getIndex();
+        Constant cst = ci.getConstant();
+
+        if (! unsignedFitsInShort(cpi)) {
+            return false;
+        }
+
+        if (!((cst instanceof CstMethodRef) ||
+              (cst instanceof CstType) ||
+              (cst instanceof CstCallSiteRef))) {
+            return false;
+        }
+
+        RegisterSpecList regs = ci.getRegisters();
+        int sz = regs.size();
+
+        return (regs.size() == 0) ||
+            (isRegListSequential(regs) &&
+             unsignedFitsInShort(regs.get(0).getReg()) &&
+             unsignedFitsInByte(regs.getWordCount()));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int cpi = ((CstInsn) insn).getIndex();
+        int firstReg = (regs.size() == 0) ? 0 : regs.get(0).getReg();
+        int count = regs.getWordCount();
+
+        write(out, opcodeUnit(insn, count), (short) cpi, (short) firstReg);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form45cc.java b/dx/src/com/android/dx/dex/code/form/Form45cc.java
new file mode 100644
index 0000000..6875b1b
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form45cc.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.MultiCstInsn;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 45cc}. See the instruction format spec
+ * for details.
+ */
+public final class Form45cc extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form45cc();
+
+    /** Maximal number of operands */
+    private static final int MAX_NUM_OPS = 5;
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form45cc() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = explicitize(insn.getRegisters());
+        return regListString(regs) + ", " + insn.cstString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        if (noteIndices) {
+            return insn.cstComment();
+        } else {
+            return "";
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 4;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!(insn instanceof MultiCstInsn)) {
+            return false;
+        }
+
+        MultiCstInsn mci = (MultiCstInsn) insn;
+        if (mci.getNumberOfConstants() != 2) {
+            return false;
+        }
+
+        int methodIdx = mci.getIndex(0);
+        int protoIdx = mci.getIndex(1);
+        if (!unsignedFitsInShort(methodIdx) || !unsignedFitsInShort(protoIdx)) {
+            return false;
+        }
+
+        Constant methodRef = mci.getConstant(0);
+        if (!(methodRef instanceof CstMethodRef)) {
+            return false;
+        }
+
+        Constant protoRef = mci.getConstant(1);
+        if (!(protoRef instanceof CstProtoRef)) {
+            return false;
+        }
+
+        RegisterSpecList regs = mci.getRegisters();
+        return (wordCount(regs) >= 0);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        int sz = regs.size();
+        BitSet bits = new BitSet(sz);
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec reg = regs.get(i);
+            /*
+             * The check below adds (category - 1) to the register, to
+             * account for the fact that the second half of a
+             * category-2 register has to be represented explicitly in
+             * the result.
+             */
+            bits.set(i, unsignedFitsInNibble(reg.getReg() +
+                                             reg.getCategory() - 1));
+        }
+
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        MultiCstInsn mci = (MultiCstInsn) insn;
+        short regB = (short) mci.getIndex(0);  // B is the method index
+        short regH = (short) mci.getIndex(1);  // H is the call site proto index
+
+        RegisterSpecList regs = explicitize(insn.getRegisters());
+        int regA = regs.size();
+        int regC = (regA > 0) ? regs.get(0).getReg() : 0;
+        int regD = (regA > 1) ? regs.get(1).getReg() : 0;
+        int regE = (regA > 2) ? regs.get(2).getReg() : 0;
+        int regF = (regA > 3) ? regs.get(3).getReg() : 0;
+        int regG = (regA > 4) ? regs.get(4).getReg() : 0;
+
+        // The output format is: A|G|op BBBB F|E|D|C HHHHH
+        write(out,
+              opcodeUnit(insn, makeByte(regG, regA)),
+              regB,
+              codeUnit(regC, regD, regE, regF),
+              regH);
+    }
+
+    /**
+     * Gets the number of words required for the given register list, where
+     * category-2 values count as two words. Return {@code -1} if the
+     * list requires more than five words or contains registers that need
+     * more than a nibble to identify them.
+     *
+     * @param regs {@code non-null;} the register list in question
+     * @return {@code >= -1;} the number of words required, or {@code -1}
+     * if the list couldn't possibly fit in this format
+     */
+    private static int wordCount(RegisterSpecList regs) {
+        int sz = regs.size();
+
+        if (sz > MAX_NUM_OPS) {
+            // It can't possibly fit.
+            return -1;
+        }
+
+        int result = 0;
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec one = regs.get(i);
+            result += one.getCategory();
+            /*
+             * The check below adds (category - 1) to the register, to
+             * account for the fact that the second half of a
+             * category-2 register has to be represented explicitly in
+             * the result.
+             */
+            if (!unsignedFitsInNibble(one.getReg() + one.getCategory() - 1)) {
+                return -1;
+            }
+        }
+
+        return (result <= MAX_NUM_OPS) ? result : -1;
+    }
+
+    /**
+     * Returns a register list which is equivalent to the given one,
+     * except that it splits category-2 registers into two explicit
+     * entries. This returns the original list if no modification is
+     * required
+     *
+     * @param orig {@code non-null;} the original list
+     * @return {@code non-null;} the list with the described transformation
+     */
+    private static RegisterSpecList explicitize(RegisterSpecList orig) {
+        int wordCount = wordCount(orig);
+        int sz = orig.size();
+
+        if (wordCount == sz) {
+            return orig;
+        }
+
+        RegisterSpecList result = new RegisterSpecList(wordCount);
+        int wordAt = 0;
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec one = orig.get(i);
+            result.set(wordAt, one);
+            if (one.getCategory() == 2) {
+                result.set(wordAt + 1,
+                           RegisterSpec.make(one.getReg() + 1, Type.VOID));
+                wordAt += 2;
+            } else {
+                wordAt++;
+            }
+        }
+
+        result.setImmutable();
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form4rcc.java b/dx/src/com/android/dx/dex/code/form/Form4rcc.java
new file mode 100644
index 0000000..74b57f4
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form4rcc.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.dex.code.MultiCstInsn;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Instruction format {@code 4rcc}. See the instruction format spec
+ * for details.
+ */
+public final class Form4rcc extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form4rcc();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form4rcc() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        return regRangeString(insn.getRegisters()) + ", " +
+            insn.cstString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        if (noteIndices) {
+            return insn.cstComment();
+        } else {
+            return "";
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 4;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        if (!(insn instanceof MultiCstInsn)) {
+            return false;
+        }
+
+        MultiCstInsn mci = (MultiCstInsn) insn;
+        int methodIdx = mci.getIndex(0);
+        int protoIdx = mci.getIndex(1);
+        if (!unsignedFitsInShort(methodIdx) || !unsignedFitsInShort(protoIdx)) {
+            return false;
+        }
+
+        Constant methodRef = mci.getConstant(0);
+        if (!(methodRef instanceof CstMethodRef)) {
+            return false;
+        }
+
+        Constant protoRef = mci.getConstant(1);
+        if (!(protoRef instanceof CstProtoRef)) {
+            return false;
+        }
+
+        RegisterSpecList regs = mci.getRegisters();
+        int sz = regs.size();
+        if (sz == 0) {
+            return true;
+        }
+
+        return (unsignedFitsInByte(regs.getWordCount()) &&
+                unsignedFitsInShort(sz) &&
+                unsignedFitsInShort(regs.get(0).getReg()) &&
+                isRegListSequential(regs));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        MultiCstInsn mci = (MultiCstInsn) insn;
+        short regB = (short) mci.getIndex(0);  // B is the method index
+        short regH = (short) mci.getIndex(1);  // H is the call site proto index
+
+        RegisterSpecList regs = insn.getRegisters();
+        short regC = 0;
+        if (regs.size() > 0) {
+            regC = (short) regs.get(0).getReg();
+        }
+        int regA = regs.getWordCount();
+
+        // The output format is: AA|op BBBB CCCC HHHH
+        write(out, opcodeUnit(insn,regA), regB, regC, regH);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/Form51l.java b/dx/src/com/android/dx/dex/code/form/Form51l.java
new file mode 100644
index 0000000..2a31dea
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/Form51l.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.CstInsn;
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteral64;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.BitSet;
+
+/**
+ * Instruction format {@code 51l}. See the instruction format spec
+ * for details.
+ */
+public final class Form51l extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new Form51l();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private Form51l() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+
+        return regs.get(0).regString() + ", " + literalBitsString(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        CstLiteralBits value = (CstLiteralBits) ((CstInsn) insn).getConstant();
+        return literalBitsComment(value, 64);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        return 5;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        if (!((insn instanceof CstInsn) &&
+              (regs.size() == 1) &&
+              unsignedFitsInByte(regs.get(0).getReg()))) {
+            return false;
+        }
+
+        CstInsn ci = (CstInsn) insn;
+        Constant cst = ci.getConstant();
+
+        return (cst instanceof CstLiteral64);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BitSet compatibleRegs(DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        BitSet bits = new BitSet(1);
+
+        bits.set(0, unsignedFitsInByte(regs.get(0).getReg()));
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        RegisterSpecList regs = insn.getRegisters();
+        long value =
+            ((CstLiteral64) ((CstInsn) insn).getConstant()).getLongBits();
+
+        write(out, opcodeUnit(insn, regs.get(0).getReg()), value);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/code/form/SpecialFormat.java b/dx/src/com/android/dx/dex/code/form/SpecialFormat.java
new file mode 100644
index 0000000..87091b5
--- /dev/null
+++ b/dx/src/com/android/dx/dex/code/form/SpecialFormat.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.code.form;
+
+import com.android.dx.dex.code.DalvInsn;
+import com.android.dx.dex.code.InsnFormat;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Instruction format for nonstandard format instructions, which aren't
+ * generally real instructions but do end up appearing in instruction
+ * lists. Most of the overridden methods on this class end up throwing
+ * exceptions, as code should know (implicitly or explicitly) to avoid
+ * using this class. The one exception is {@link #isCompatible}, which
+ * always returns {@code true}.
+ */
+public final class SpecialFormat extends InsnFormat {
+    /** {@code non-null;} unique instance of this class */
+    public static final InsnFormat THE_ONE = new SpecialFormat();
+
+    /**
+     * Constructs an instance. This class is not publicly
+     * instantiable. Use {@link #THE_ONE}.
+     */
+    private SpecialFormat() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnArgString(DalvInsn insn) {
+        throw new RuntimeException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
+        throw new RuntimeException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int codeSize() {
+        throw new RuntimeException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCompatible(DalvInsn insn) {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
+        throw new RuntimeException("unsupported");
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/AnnotationItem.java b/dx/src/com/android/dx/dex/file/AnnotationItem.java
new file mode 100644
index 0000000..de3ce41
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/AnnotationItem.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.annotation.Annotation;
+import com.android.dx.rop.annotation.AnnotationVisibility;
+import com.android.dx.rop.annotation.NameValuePair;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.ByteArrayAnnotatedOutput;
+import java.util.Arrays;
+import java.util.Comparator;
+
+/**
+ * Single annotation, which consists of a type and a set of name-value
+ * element pairs.
+ */
+public final class AnnotationItem extends OffsettedItem {
+    /** annotation visibility constant: visible at build time only */
+    private static final int VISIBILITY_BUILD = 0;
+
+    /** annotation visibility constant: visible at runtime */
+    private static final int VISIBILITY_RUNTIME = 1;
+
+    /** annotation visibility constant: visible at runtime only to system */
+    private static final int VISIBILITY_SYSTEM = 2;
+
+    /** the required alignment for instances of this class */
+    private static final int ALIGNMENT = 1;
+
+    /** {@code non-null;} unique instance of
+     * {@link com.android.dx.dex.file.AnnotationItem.TypeIdSorter} */
+    private static final TypeIdSorter TYPE_ID_SORTER = new TypeIdSorter();
+
+    /** {@code non-null;} the annotation to represent */
+    private final Annotation annotation;
+
+    /**
+     * {@code null-ok;} type reference for the annotation type; set during
+     * {@link #addContents}
+     */
+    private TypeIdItem type;
+
+    /**
+     * {@code null-ok;} encoded form, ready for writing to a file; set during
+     * {@link #place0}
+     */
+    private byte[] encodedForm;
+
+    /**
+     * Comparator that sorts (outer) instances by type id index.
+     */
+    private static class TypeIdSorter implements Comparator<AnnotationItem> {
+        /** {@inheritDoc} */
+        @Override
+        public int compare(AnnotationItem item1, AnnotationItem item2) {
+            int index1 = item1.type.getIndex();
+            int index2 = item2.type.getIndex();
+
+            if (index1 < index2) {
+                return -1;
+            } else if (index1 > index2) {
+                return 1;
+            }
+
+            return 0;
+        }
+    }
+
+    /**
+     * Sorts an array of instances, in place, by type id index,
+     * ignoring all other aspects of the elements. This is only valid
+     * to use after type id indices are known.
+     *
+     * @param array {@code non-null;} array to sort
+     */
+    public static void sortByTypeIdIndex(AnnotationItem[] array) {
+        Arrays.sort(array, TYPE_ID_SORTER);
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param annotation {@code non-null;} annotation to represent
+     * @param dexFile {@code non-null;} dex output
+     */
+    public AnnotationItem(Annotation annotation, DexFile dexFile) {
+        /*
+         * The write size isn't known up-front because (the variable-lengthed)
+         * leb128 type is used to represent some things.
+         */
+        super(ALIGNMENT, -1);
+
+        if (annotation == null) {
+            throw new NullPointerException("annotation == null");
+        }
+
+        this.annotation = annotation;
+        this.type = null;
+        this.encodedForm = null;
+        addContents(dexFile);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_ANNOTATION_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return annotation.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(OffsettedItem other) {
+        AnnotationItem otherAnnotation = (AnnotationItem) other;
+
+        return annotation.compareTo(otherAnnotation.annotation);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return annotation.toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        type = file.getTypeIds().intern(annotation.getType());
+        ValueEncoder.addContents(file, annotation);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        // Encode the data and note the size.
+
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput();
+        ValueEncoder encoder = new ValueEncoder(addedTo.getFile(), out);
+
+        encoder.writeAnnotation(annotation, false);
+        encodedForm = out.toByteArray();
+
+        // Add one for the visibility byte in front of the encoded annotation.
+        setWriteSize(encodedForm.length + 1);
+    }
+
+    /**
+     * Write a (listing file) annotation for this instance to the given
+     * output, that consumes no bytes of output. This is for annotating
+     * a reference to this instance at the point of the reference.
+     *
+     * @param out {@code non-null;} where to output to
+     * @param prefix {@code non-null;} prefix for each line of output
+     */
+    public void annotateTo(AnnotatedOutput out, String prefix) {
+        out.annotate(0, prefix + "visibility: " +
+                annotation.getVisibility().toHuman());
+        out.annotate(0, prefix + "type: " + annotation.getType().toHuman());
+
+        for (NameValuePair pair : annotation.getNameValuePairs()) {
+            CstString name = pair.getName();
+            Constant value = pair.getValue();
+
+            out.annotate(0, prefix + name.toHuman() + ": " +
+                    ValueEncoder.constantToHuman(value));
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+        AnnotationVisibility visibility = annotation.getVisibility();
+
+        if (annotates) {
+            out.annotate(0, offsetString() + " annotation");
+            out.annotate(1, "  visibility: VISBILITY_" + visibility);
+        }
+
+        switch (visibility) {
+            case BUILD:   out.writeByte(VISIBILITY_BUILD); break;
+            case RUNTIME: out.writeByte(VISIBILITY_RUNTIME); break;
+            case SYSTEM:  out.writeByte(VISIBILITY_SYSTEM); break;
+            default: {
+                // EMBEDDED shouldn't appear at the top level.
+                throw new RuntimeException("shouldn't happen");
+            }
+        }
+
+        if (annotates) {
+            /*
+             * The output is to be annotated, so redo the work previously
+             * done by place0(), except this time annotations will actually
+             * get emitted.
+             */
+            ValueEncoder encoder = new ValueEncoder(file, out);
+            encoder.writeAnnotation(annotation, true);
+        } else {
+            out.write(encodedForm);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/AnnotationSetItem.java b/dx/src/com/android/dx/dex/file/AnnotationSetItem.java
new file mode 100644
index 0000000..4464372
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/AnnotationSetItem.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.annotation.Annotation;
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Set of annotations, where no annotation type appears more than once.
+ */
+public final class AnnotationSetItem extends OffsettedItem {
+    /** the required alignment for instances of this class */
+    private static final int ALIGNMENT = 4;
+
+    /** the size of an entry int the set: one {@code uint} */
+    private static final int ENTRY_WRITE_SIZE = 4;
+
+    /** {@code non-null;} the set of annotations */
+    private final Annotations annotations;
+
+    /**
+     * {@code non-null;} set of annotations as individual items in an array.
+     * <b>Note:</b> The contents have to get sorted by type id before
+     * writing.
+     */
+    private final AnnotationItem[] items;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param annotations {@code non-null;} set of annotations
+     * @param dexFile {@code non-null;} dex output
+     */
+    public AnnotationSetItem(Annotations annotations, DexFile dexFile) {
+        super(ALIGNMENT, writeSize(annotations));
+
+        this.annotations = annotations;
+        this.items = new AnnotationItem[annotations.size()];
+
+        int at = 0;
+        for (Annotation a : annotations.getAnnotations()) {
+            items[at] = new AnnotationItem(a, dexFile);
+            at++;
+        }
+    }
+
+    /**
+     * Gets the write size for the given set.
+     *
+     * @param annotations {@code non-null;} the set
+     * @return {@code > 0;} the write size
+     */
+    private static int writeSize(Annotations annotations) {
+        // This includes an int size at the start of the list.
+
+        try {
+            return (annotations.size() * ENTRY_WRITE_SIZE) + 4;
+        } catch (NullPointerException ex) {
+            // Elucidate the exception.
+            throw new NullPointerException("list == null");
+        }
+    }
+
+    /**
+     * Gets the underlying annotations of this instance
+     *
+     * @return {@code non-null;} the annotations
+     */
+    public Annotations getAnnotations() {
+        return annotations;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return annotations.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(OffsettedItem other) {
+        AnnotationSetItem otherSet = (AnnotationSetItem) other;
+
+        return annotations.compareTo(otherSet.annotations);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_ANNOTATION_SET_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return annotations.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        MixedItemSection byteData = file.getByteData();
+        int size = items.length;
+
+        for (int i = 0; i < size; i++) {
+            items[i] = byteData.intern(items[i]);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        // Sort the array to be in type id index order.
+        AnnotationItem.sortByTypeIdIndex(items);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+        int size = items.length;
+
+        if (annotates) {
+            out.annotate(0, offsetString() + " annotation set");
+            out.annotate(4, "  size: " + Hex.u4(size));
+        }
+
+        out.writeInt(size);
+
+        for (int i = 0; i < size; i++) {
+            AnnotationItem item = items[i];
+            int offset = item.getAbsoluteOffset();
+
+            if (annotates) {
+                out.annotate(4, "  entries[" + Integer.toHexString(i) + "]: " +
+                        Hex.u4(offset));
+                items[i].annotateTo(out, "    ");
+            }
+
+            out.writeInt(offset);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/AnnotationSetRefItem.java b/dx/src/com/android/dx/dex/file/AnnotationSetRefItem.java
new file mode 100644
index 0000000..872068f
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/AnnotationSetRefItem.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Indirect reference to an {@link AnnotationSetItem}.
+ */
+public final class AnnotationSetRefItem extends OffsettedItem {
+    /** the required alignment for instances of this class */
+    private static final int ALIGNMENT = 4;
+
+    /** write size of this class, in bytes */
+    private static final int WRITE_SIZE = 4;
+
+    /** {@code non-null;} the annotation set to refer to */
+    private AnnotationSetItem annotations;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param annotations {@code non-null;} the annotation set to refer to
+     */
+    public AnnotationSetRefItem(AnnotationSetItem annotations) {
+        super(ALIGNMENT, WRITE_SIZE);
+
+        if (annotations == null) {
+            throw new NullPointerException("annotations == null");
+        }
+
+        this.annotations = annotations;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_ANNOTATION_SET_REF_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        MixedItemSection wordData = file.getWordData();
+
+        annotations = wordData.intern(annotations);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return annotations.toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        int annotationsOff = annotations.getAbsoluteOffset();
+
+        if (out.annotates()) {
+            out.annotate(4, "  annotations_off: " + Hex.u4(annotationsOff));
+        }
+
+        out.writeInt(annotationsOff);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/AnnotationUtils.java b/dx/src/com/android/dx/dex/file/AnnotationUtils.java
new file mode 100644
index 0000000..ca2f454
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/AnnotationUtils.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.annotation.Annotation;
+import static com.android.dx.rop.annotation.AnnotationVisibility.SYSTEM;
+import com.android.dx.rop.annotation.NameValuePair;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstAnnotation;
+import com.android.dx.rop.cst.CstArray;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstKnownNull;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import java.util.ArrayList;
+
+/**
+ * Utility class for dealing with annotations.
+ */
+public final class AnnotationUtils {
+
+    /** {@code non-null;} type for {@code AnnotationDefault} annotations */
+    private static final CstType ANNOTATION_DEFAULT_TYPE =
+        CstType.intern(Type.intern("Ldalvik/annotation/AnnotationDefault;"));
+
+    /** {@code non-null;} type for {@code EnclosingClass} annotations */
+    private static final CstType ENCLOSING_CLASS_TYPE =
+        CstType.intern(Type.intern("Ldalvik/annotation/EnclosingClass;"));
+
+    /** {@code non-null;} type for {@code EnclosingMethod} annotations */
+    private static final CstType ENCLOSING_METHOD_TYPE =
+        CstType.intern(Type.intern("Ldalvik/annotation/EnclosingMethod;"));
+
+    /** {@code non-null;} type for {@code InnerClass} annotations */
+    private static final CstType INNER_CLASS_TYPE =
+        CstType.intern(Type.intern("Ldalvik/annotation/InnerClass;"));
+
+    /** {@code non-null;} type for {@code MemberClasses} annotations */
+    private static final CstType MEMBER_CLASSES_TYPE =
+        CstType.intern(Type.intern("Ldalvik/annotation/MemberClasses;"));
+
+    /** {@code non-null;} type for {@code Signature} annotations */
+    private static final CstType SIGNATURE_TYPE =
+        CstType.intern(Type.intern("Ldalvik/annotation/Signature;"));
+
+        /** {@code non-null;} type for {@code SourceDebugExtension} annotations */
+    private static final CstType SOURCE_DEBUG_EXTENSION_TYPE =
+        CstType.intern(Type.intern("Ldalvik/annotation/SourceDebugExtension;"));
+
+    /** {@code non-null;} type for {@code Throws} annotations */
+    private static final CstType THROWS_TYPE =
+        CstType.intern(Type.intern("Ldalvik/annotation/Throws;"));
+
+    /** {@code non-null;} the UTF-8 constant {@code "accessFlags"} */
+    private static final CstString ACCESS_FLAGS_STRING = new CstString("accessFlags");
+
+    /** {@code non-null;} the UTF-8 constant {@code "name"} */
+    private static final CstString NAME_STRING = new CstString("name");
+
+    /** {@code non-null;} the UTF-8 constant {@code "value"} */
+    private static final CstString VALUE_STRING = new CstString("value");
+
+    /**
+     * This class is uninstantiable.
+     */
+    private AnnotationUtils() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Constructs a standard {@code AnnotationDefault} annotation.
+     *
+     * @param defaults {@code non-null;} the defaults, itself as an annotation
+     * @return {@code non-null;} the constructed annotation
+     */
+    public static Annotation makeAnnotationDefault(Annotation defaults) {
+        Annotation result = new Annotation(ANNOTATION_DEFAULT_TYPE, SYSTEM);
+
+        result.put(new NameValuePair(VALUE_STRING, new CstAnnotation(defaults)));
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs a standard {@code EnclosingClass} annotation.
+     *
+     * @param clazz {@code non-null;} the enclosing class
+     * @return {@code non-null;} the annotation
+     */
+    public static Annotation makeEnclosingClass(CstType clazz) {
+        Annotation result = new Annotation(ENCLOSING_CLASS_TYPE, SYSTEM);
+
+        result.put(new NameValuePair(VALUE_STRING, clazz));
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs a standard {@code EnclosingMethod} annotation.
+     *
+     * @param method {@code non-null;} the enclosing method
+     * @return {@code non-null;} the annotation
+     */
+    public static Annotation makeEnclosingMethod(CstMethodRef method) {
+        Annotation result = new Annotation(ENCLOSING_METHOD_TYPE, SYSTEM);
+
+        result.put(new NameValuePair(VALUE_STRING, method));
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs a standard {@code InnerClass} annotation.
+     *
+     * @param name {@code null-ok;} the original name of the class, or
+     * {@code null} to represent an anonymous class
+     * @param accessFlags the original access flags
+     * @return {@code non-null;} the annotation
+     */
+    public static Annotation makeInnerClass(CstString name, int accessFlags) {
+        Annotation result = new Annotation(INNER_CLASS_TYPE, SYSTEM);
+        Constant nameCst = (name != null) ? name : CstKnownNull.THE_ONE;
+
+        result.put(new NameValuePair(NAME_STRING, nameCst));
+        result.put(new NameValuePair(ACCESS_FLAGS_STRING,
+                        CstInteger.make(accessFlags)));
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs a standard {@code MemberClasses} annotation.
+     *
+     * @param types {@code non-null;} the list of (the types of) the member classes
+     * @return {@code non-null;} the annotation
+     */
+    public static Annotation makeMemberClasses(TypeList types) {
+        CstArray array = makeCstArray(types);
+        Annotation result = new Annotation(MEMBER_CLASSES_TYPE, SYSTEM);
+        result.put(new NameValuePair(VALUE_STRING, array));
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs a standard {@code Signature} annotation.
+     *
+     * @param signature {@code non-null;} the signature string
+     * @return {@code non-null;} the annotation
+     */
+    public static Annotation makeSignature(CstString signature) {
+        Annotation result = new Annotation(SIGNATURE_TYPE, SYSTEM);
+
+        /*
+         * Split the string into pieces that are likely to be common
+         * across many signatures and the rest of the file.
+         */
+
+        String raw = signature.getString();
+        int rawLength = raw.length();
+        ArrayList<String> pieces = new ArrayList<String>(20);
+
+        for (int at = 0; at < rawLength; /*at*/) {
+            char c = raw.charAt(at);
+            int endAt = at + 1;
+            if (c == 'L') {
+                // Scan to ';' or '<'. Consume ';' but not '<'.
+                while (endAt < rawLength) {
+                    c = raw.charAt(endAt);
+                    if (c == ';') {
+                        endAt++;
+                        break;
+                    } else if (c == '<') {
+                        break;
+                    }
+                    endAt++;
+                }
+            } else {
+                // Scan to 'L' without consuming it.
+                while (endAt < rawLength) {
+                    c = raw.charAt(endAt);
+                    if (c == 'L') {
+                        break;
+                    }
+                    endAt++;
+                }
+            }
+
+            pieces.add(raw.substring(at, endAt));
+            at = endAt;
+        }
+
+        int size = pieces.size();
+        CstArray.List list = new CstArray.List(size);
+
+        for (int i = 0; i < size; i++) {
+            list.set(i, new CstString(pieces.get(i)));
+        }
+
+        list.setImmutable();
+
+        result.put(new NameValuePair(VALUE_STRING, new CstArray(list)));
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs a standard {@code SourceDebugExtension} annotation.
+     *
+     * @param smapString {@code non-null;} the SMAP string associated with
+     * @return {@code non-null;} the annotation
+     */
+    public static Annotation makeSourceDebugExtension(CstString smapString) {
+        Annotation result = new Annotation(SOURCE_DEBUG_EXTENSION_TYPE, SYSTEM);
+
+        result.put(new NameValuePair(VALUE_STRING, smapString));
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs a standard {@code Throws} annotation.
+     *
+     * @param types {@code non-null;} the list of thrown types
+     * @return {@code non-null;} the annotation
+     */
+    public static Annotation makeThrows(TypeList types) {
+        CstArray array = makeCstArray(types);
+        Annotation result = new Annotation(THROWS_TYPE, SYSTEM);
+        result.put(new NameValuePair(VALUE_STRING, array));
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Converts a {@link TypeList} to a {@link CstArray}.
+     *
+     * @param types {@code non-null;} the type list
+     * @return {@code non-null;} the corresponding array constant
+     */
+    private static CstArray makeCstArray(TypeList types) {
+        int size = types.size();
+        CstArray.List list = new CstArray.List(size);
+
+        for (int i = 0; i < size; i++) {
+            list.set(i, CstType.intern(types.getType(i)));
+        }
+
+        list.setImmutable();
+        return new CstArray(list);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/AnnotationsDirectoryItem.java b/dx/src/com/android/dx/dex/file/AnnotationsDirectoryItem.java
new file mode 100644
index 0000000..f25f7ba
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/AnnotationsDirectoryItem.java
@@ -0,0 +1,389 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * Per-class directory of annotations.
+ */
+public final class AnnotationsDirectoryItem extends OffsettedItem {
+    /** the required alignment for instances of this class */
+    private static final int ALIGNMENT = 4;
+
+    /** write size of this class's header, in bytes */
+    private static final int HEADER_SIZE = 16;
+
+    /** write size of a list element, in bytes */
+    private static final int ELEMENT_SIZE = 8;
+
+    /** {@code null-ok;} the class-level annotations, if any */
+    private AnnotationSetItem classAnnotations;
+
+    /** {@code null-ok;} the annotated fields, if any */
+    private ArrayList<FieldAnnotationStruct> fieldAnnotations;
+
+    /** {@code null-ok;} the annotated methods, if any */
+    private ArrayList<MethodAnnotationStruct> methodAnnotations;
+
+    /** {@code null-ok;} the annotated parameters, if any */
+    private ArrayList<ParameterAnnotationStruct> parameterAnnotations;
+
+    /**
+     * Constructs an empty instance.
+     */
+    public AnnotationsDirectoryItem() {
+        super(ALIGNMENT, -1);
+
+        classAnnotations = null;
+        fieldAnnotations = null;
+        methodAnnotations = null;
+        parameterAnnotations = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_ANNOTATIONS_DIRECTORY_ITEM;
+    }
+
+    /**
+     * Returns whether this item is empty (has no contents).
+     *
+     * @return {@code true} if this item is empty, or {@code false}
+     * if not
+     */
+    public boolean isEmpty() {
+        return (classAnnotations == null) &&
+            (fieldAnnotations == null) &&
+            (methodAnnotations == null) &&
+            (parameterAnnotations == null);
+    }
+
+    /**
+     * Returns whether this item is a candidate for interning. The only
+     * interning candidates are ones that <i>only</i> have a non-null
+     * set of class annotations, with no other lists.
+     *
+     * @return {@code true} if this is an interning candidate, or
+     * {@code false} if not
+     */
+    public boolean isInternable() {
+        return (classAnnotations != null) &&
+            (fieldAnnotations == null) &&
+            (methodAnnotations == null) &&
+            (parameterAnnotations == null);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        if (classAnnotations == null) {
+            return 0;
+        }
+
+        return classAnnotations.hashCode();
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p><b>Note:</b>: This throws an exception if this item is not
+     * internable.</p>
+     *
+     * @see #isInternable
+     */
+    @Override
+    public int compareTo0(OffsettedItem other) {
+        if (! isInternable()) {
+            throw new UnsupportedOperationException("uninternable instance");
+        }
+
+        AnnotationsDirectoryItem otherDirectory =
+            (AnnotationsDirectoryItem) other;
+        return classAnnotations.compareTo(otherDirectory.classAnnotations);
+    }
+
+    /**
+     * Sets the direct annotations on this instance. These are annotations
+     * made on the class, per se, as opposed to on one of its members.
+     * It is only valid to call this method at most once per instance.
+     *
+     * @param annotations {@code non-null;} annotations to set for this class
+     * @param dexFile {@code non-null;} dex output
+     */
+    public void setClassAnnotations(Annotations annotations, DexFile dexFile) {
+        if (annotations == null) {
+            throw new NullPointerException("annotations == null");
+        }
+
+        if (classAnnotations != null) {
+            throw new UnsupportedOperationException(
+                    "class annotations already set");
+        }
+
+        classAnnotations = new AnnotationSetItem(annotations, dexFile);
+    }
+
+    /**
+     * Adds a field annotations item to this instance.
+     *
+     * @param field {@code non-null;} field in question
+     * @param annotations {@code non-null;} associated annotations to add
+     * @param dexFile {@code non-null;} dex output
+     */
+    public void addFieldAnnotations(CstFieldRef field,
+            Annotations annotations, DexFile dexFile) {
+        if (fieldAnnotations == null) {
+            fieldAnnotations = new ArrayList<FieldAnnotationStruct>();
+        }
+
+        fieldAnnotations.add(new FieldAnnotationStruct(field,
+                        new AnnotationSetItem(annotations, dexFile)));
+    }
+
+    /**
+     * Adds a method annotations item to this instance.
+     *
+     * @param method {@code non-null;} method in question
+     * @param annotations {@code non-null;} associated annotations to add
+     * @param dexFile {@code non-null;} dex output
+     */
+    public void addMethodAnnotations(CstMethodRef method,
+            Annotations annotations, DexFile dexFile) {
+        if (methodAnnotations == null) {
+            methodAnnotations = new ArrayList<MethodAnnotationStruct>();
+        }
+
+        methodAnnotations.add(new MethodAnnotationStruct(method,
+                        new AnnotationSetItem(annotations, dexFile)));
+    }
+
+    /**
+     * Adds a parameter annotations item to this instance.
+     *
+     * @param method {@code non-null;} method in question
+     * @param list {@code non-null;} associated list of annotation sets to add
+     * @param dexFile {@code non-null;} dex output
+     */
+    public void addParameterAnnotations(CstMethodRef method,
+            AnnotationsList list, DexFile dexFile) {
+        if (parameterAnnotations == null) {
+            parameterAnnotations = new ArrayList<ParameterAnnotationStruct>();
+        }
+
+        parameterAnnotations.add(new ParameterAnnotationStruct(method, list, dexFile));
+    }
+
+    /**
+     * Gets the method annotations for a given method, if any. This is
+     * meant for use by debugging / dumping code.
+     *
+     * @param method {@code non-null;} the method
+     * @return {@code null-ok;} the method annotations, if any
+     */
+    public Annotations getMethodAnnotations(CstMethodRef method) {
+        if (methodAnnotations == null) {
+            return null;
+        }
+
+        for (MethodAnnotationStruct item : methodAnnotations) {
+            if (item.getMethod().equals(method)) {
+                return item.getAnnotations();
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Gets the parameter annotations for a given method, if any. This is
+     * meant for use by debugging / dumping code.
+     *
+     * @param method {@code non-null;} the method
+     * @return {@code null-ok;} the parameter annotations, if any
+     */
+    public AnnotationsList getParameterAnnotations(CstMethodRef method) {
+        if (parameterAnnotations == null) {
+            return null;
+        }
+
+        for (ParameterAnnotationStruct item : parameterAnnotations) {
+            if (item.getMethod().equals(method)) {
+                return item.getAnnotationsList();
+            }
+        }
+
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        MixedItemSection wordData = file.getWordData();
+
+        if (classAnnotations != null) {
+            classAnnotations = wordData.intern(classAnnotations);
+        }
+
+        if (fieldAnnotations != null) {
+            for (FieldAnnotationStruct item : fieldAnnotations) {
+                item.addContents(file);
+            }
+        }
+
+        if (methodAnnotations != null) {
+            for (MethodAnnotationStruct item : methodAnnotations) {
+                item.addContents(file);
+            }
+        }
+
+        if (parameterAnnotations != null) {
+            for (ParameterAnnotationStruct item : parameterAnnotations) {
+                item.addContents(file);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        throw new RuntimeException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        // We just need to set the write size here.
+
+        int elementCount = listSize(fieldAnnotations)
+            + listSize(methodAnnotations) + listSize(parameterAnnotations);
+        setWriteSize(HEADER_SIZE + (elementCount * ELEMENT_SIZE));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+        int classOff = OffsettedItem.getAbsoluteOffsetOr0(classAnnotations);
+        int fieldsSize = listSize(fieldAnnotations);
+        int methodsSize = listSize(methodAnnotations);
+        int parametersSize = listSize(parameterAnnotations);
+
+        if (annotates) {
+            out.annotate(0, offsetString() + " annotations directory");
+            out.annotate(4, "  class_annotations_off: " + Hex.u4(classOff));
+            out.annotate(4, "  fields_size:           " +
+                    Hex.u4(fieldsSize));
+            out.annotate(4, "  methods_size:          " +
+                    Hex.u4(methodsSize));
+            out.annotate(4, "  parameters_size:       " +
+                    Hex.u4(parametersSize));
+        }
+
+        out.writeInt(classOff);
+        out.writeInt(fieldsSize);
+        out.writeInt(methodsSize);
+        out.writeInt(parametersSize);
+
+        if (fieldsSize != 0) {
+            Collections.sort(fieldAnnotations);
+            if (annotates) {
+                out.annotate(0, "  fields:");
+            }
+            for (FieldAnnotationStruct item : fieldAnnotations) {
+                item.writeTo(file, out);
+            }
+        }
+
+        if (methodsSize != 0) {
+            Collections.sort(methodAnnotations);
+            if (annotates) {
+                out.annotate(0, "  methods:");
+            }
+            for (MethodAnnotationStruct item : methodAnnotations) {
+                item.writeTo(file, out);
+            }
+        }
+
+        if (parametersSize != 0) {
+            Collections.sort(parameterAnnotations);
+            if (annotates) {
+                out.annotate(0, "  parameters:");
+            }
+            for (ParameterAnnotationStruct item : parameterAnnotations) {
+                item.writeTo(file, out);
+            }
+        }
+    }
+
+    /**
+     * Gets the list size of the given list, or {@code 0} if given
+     * {@code null}.
+     *
+     * @param list {@code null-ok;} the list in question
+     * @return {@code >= 0;} its size
+     */
+    private static int listSize(ArrayList<?> list) {
+        if (list == null) {
+            return 0;
+        }
+
+        return list.size();
+    }
+
+    /**
+     * Prints out the contents of this instance, in a debugging-friendly
+     * way. This is meant to be called from {@link ClassDefItem#debugPrint}.
+     *
+     * @param out {@code non-null;} where to output to
+     */
+    /*package*/ void debugPrint(PrintWriter out) {
+        if (classAnnotations != null) {
+            out.println("  class annotations: " + classAnnotations);
+        }
+
+        if (fieldAnnotations != null) {
+            out.println("  field annotations:");
+            for (FieldAnnotationStruct item : fieldAnnotations) {
+                out.println("    " + item.toHuman());
+            }
+        }
+
+        if (methodAnnotations != null) {
+            out.println("  method annotations:");
+            for (MethodAnnotationStruct item : methodAnnotations) {
+                out.println("    " + item.toHuman());
+            }
+        }
+
+        if (parameterAnnotations != null) {
+            out.println("  parameter annotations:");
+            for (ParameterAnnotationStruct item : parameterAnnotations) {
+                out.println("    " + item.toHuman());
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/CallSiteIdItem.java b/dx/src/com/android/dx/dex/file/CallSiteIdItem.java
new file mode 100644
index 0000000..cf0bb24
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/CallSiteIdItem.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.CstCallSite;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of a call site reference in a DEX file.
+ */
+public final class CallSiteIdItem extends IndexedItem implements Comparable {
+
+    /** The item size when placed in a DEX file. */
+    private static final int ITEM_SIZE = 4;
+
+    /** {@code non-null;} The call site represented by this identifier. */
+    final CstCallSiteRef invokeDynamicRef;
+
+    CallSiteItem data;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param invokeDynamicRef {@code non-null;} The call site to represent in the DEX file.
+     */
+    public CallSiteIdItem(CstCallSiteRef invokeDynamicRef) {
+        this.invokeDynamicRef = invokeDynamicRef;
+        this.data = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_CALL_SITE_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        return ITEM_SIZE;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        CstCallSite callSite = invokeDynamicRef.getCallSite();
+        CallSiteIdsSection callSiteIds = file.getCallSiteIds();
+        CallSiteItem callSiteItem = callSiteIds.getCallSiteItem(callSite);
+        if (callSiteItem == null) {
+            MixedItemSection byteData = file.getByteData();
+            callSiteItem = new CallSiteItem(callSite);
+            byteData.add(callSiteItem);
+            callSiteIds.addCallSiteItem(callSite, callSiteItem);
+        }
+        this.data = callSiteItem;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        int offset = data.getAbsoluteOffset();
+        if (out.annotates()) {
+            out.annotate(0, indexString() + ' ' + invokeDynamicRef.toString());
+            out.annotate(4, "call_site_off: " + Hex.u4(offset));
+        }
+        out.writeInt(offset);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(Object o) {
+        CallSiteIdItem other = (CallSiteIdItem) o;
+        return invokeDynamicRef.compareTo(other.invokeDynamicRef);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/CallSiteIdsSection.java b/dx/src/com/android/dx/dex/file/CallSiteIdsSection.java
new file mode 100644
index 0000000..0a0e781
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/CallSiteIdsSection.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstCallSite;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import java.util.Collection;
+import java.util.TreeMap;
+
+/**
+ * A section in the DEX file for call site identifiers.
+ */
+public final class CallSiteIdsSection extends UniformItemSection {
+
+    /** A map from call site references to their DEX file identifier. */
+    private final TreeMap<CstCallSiteRef, CallSiteIdItem> callSiteIds = new TreeMap<>();
+
+    /** A map from call site instances to their DEX file item. */
+    private final TreeMap<CstCallSite, CallSiteItem> callSites = new TreeMap<>();
+
+    /**
+     * Constructs an instance.
+     *
+     * @param dexFile {@code non-null;} file that this instance is part of
+     */
+    public CallSiteIdsSection(DexFile dexFile) {
+        super("call_site_ids", dexFile, 4);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IndexedItem get(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+        throwIfNotPrepared();
+
+        IndexedItem result = callSiteIds.get((CstCallSiteRef) cst);
+        if (result == null) {
+            throw new IllegalArgumentException("not found");
+        }
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void orderItems() {
+        int index = 0;
+        for (CallSiteIdItem callSiteId : callSiteIds.values()) {
+            callSiteId.setIndex(index++);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        return callSiteIds.values();
+    }
+
+    /**
+     * Interns a call site into this instance.
+     *
+     * This method is synchronized as it is called during class file translation which runs
+     * concurrently on a per class basis.
+     *
+     * @param cstRef
+     */
+    public synchronized void intern(CstCallSiteRef cstRef) {
+        if (cstRef == null) {
+            throw new NullPointerException("cstRef");
+        }
+
+        throwIfPrepared();
+
+        CallSiteIdItem result = callSiteIds.get(cstRef);
+        if (result == null) {
+            result = new CallSiteIdItem(cstRef);
+            callSiteIds.put(cstRef, result);
+        }
+    }
+
+    /**
+     * Adds an association between call site constant and its DEX file representation.
+     *
+     * This method is not synchronized as it is called during DEX file writing which happens
+     * concurrently on a per DEX file basis and this information per DEX file.
+     *
+     * @param callSite {@code non-null;} a constant call site
+     * @param callSiteItem {@code non-null;} a call site item as represented in a DEX file
+     */
+    void addCallSiteItem(CstCallSite callSite, CallSiteItem callSiteItem) {
+        if (callSite == null) {
+            throw new NullPointerException("callSite == null");
+        }
+        if (callSiteItem == null) {
+            throw new NullPointerException("callSiteItem == null");
+        }
+        callSites.put(callSite, callSiteItem);
+    }
+
+    /**
+     * Gets the DEX file representation of a call site associated with a call site constant.
+     *
+     * This method is not synchronized as it is called during DEX file writing which happens
+     * concurrently on a per DEX file basis and this information per DEX file.
+     *
+     * @param callSite {@code non-null;} a constant call site
+     * @return {@code non-null;} a call site item as represented in a DEX file
+     */
+    CallSiteItem getCallSiteItem(CstCallSite callSite) {
+        if (callSite == null) {
+            throw new NullPointerException("callSite == null");
+        }
+        return callSites.get(callSite);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/CallSiteItem.java b/dx/src/com/android/dx/dex/file/CallSiteItem.java
new file mode 100644
index 0000000..0489272
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/CallSiteItem.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.CstCallSite;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.ByteArrayAnnotatedOutput;
+
+/**
+ * Representation of a call site in a DEX file.
+ */
+public final class CallSiteItem extends OffsettedItem {
+
+    /** {@code non-null;} the call site value */
+    private final CstCallSite value;
+
+    /** {@code null-ok;} the encoded representation of the call site value */
+    private byte[] encodedForm;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param value {@code non-null;} the string value
+     */
+    public CallSiteItem(CstCallSite value) {
+        super(1, writeSize(value));
+
+        this.value = value;
+    }
+
+    /**
+     * Gets the write size for a given value.
+     *
+     * @param value {@code non-null;} the call site value
+     * @return {@code >= 2}; the write size, in bytes
+     */
+    private static int writeSize(CstCallSite value) {
+        return -1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        // Encode the data and note the size.
+
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput();
+        ValueEncoder encoder = new ValueEncoder(addedTo.getFile(), out);
+
+        encoder.writeArray(value, true);
+        encodedForm = out.toByteArray();
+        setWriteSize(encodedForm.length);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return value.toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return value.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        if (out.annotates()) {
+            out.annotate(0, offsetString() + " call site");
+            ValueEncoder encoder = new ValueEncoder(file, out);
+            encoder.writeArray(value, true);
+        } else {
+            out.write(encodedForm);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        // A call site is an encoded array with additional constraints
+        // on the element kinds. It is not listed separately in the
+        // DEX file's table of contents.
+        return ItemType.TYPE_ENCODED_ARRAY_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        ValueEncoder.addContents(file, value);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/CatchStructs.java b/dx/src/com/android/dx/dex/file/CatchStructs.java
new file mode 100644
index 0000000..1e02452
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/CatchStructs.java
@@ -0,0 +1,314 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.dex.code.CatchHandlerList;
+import com.android.dx.dex.code.CatchTable;
+import com.android.dx.dex.code.DalvCode;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.ByteArrayAnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.io.PrintWriter;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * List of exception handlers (tuples of covered range, catch type,
+ * handler address) for a particular piece of code. Instances of this
+ * class correspond to a {@code try_item[]} and a
+ * {@code catch_handler_item[]}.
+ */
+public final class CatchStructs {
+    /**
+     * the size of a {@code try_item}: a {@code uint}
+     * and two {@code ushort}s
+     */
+    private static final int TRY_ITEM_WRITE_SIZE = 4 + (2 * 2);
+
+    /** {@code non-null;} code that contains the catches */
+    private final DalvCode code;
+
+    /**
+     * {@code null-ok;} the underlying table; set in
+     * {@link #finishProcessingIfNecessary}
+     */
+    private CatchTable table;
+
+    /**
+     * {@code null-ok;} the encoded handler list, if calculated; set in
+     * {@link #encode}
+     */
+    private byte[] encodedHandlers;
+
+    /**
+     * length of the handlers header (encoded size), if known; used for
+     * annotation
+     */
+    private int encodedHandlerHeaderSize;
+
+    /**
+     * {@code null-ok;} map from handler lists to byte offsets, if calculated; set in
+     * {@link #encode}
+     */
+    private TreeMap<CatchHandlerList, Integer> handlerOffsets;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param code {@code non-null;} code that contains the catches
+     */
+    public CatchStructs(DalvCode code) {
+        this.code = code;
+        this.table = null;
+        this.encodedHandlers = null;
+        this.encodedHandlerHeaderSize = 0;
+        this.handlerOffsets = null;
+    }
+
+    /**
+     * Finish processing the catches, if necessary.
+     */
+    private void finishProcessingIfNecessary() {
+        if (table == null) {
+            table = code.getCatches();
+        }
+    }
+
+    /**
+     * Gets the size of the tries list, in entries.
+     *
+     * @return {@code >= 0;} the tries list size
+     */
+    public int triesSize() {
+        finishProcessingIfNecessary();
+        return table.size();
+    }
+
+    /**
+     * Does a human-friendly dump of this instance.
+     *
+     * @param out {@code non-null;} where to dump
+     * @param prefix {@code non-null;} prefix to attach to each line of output
+     */
+    public void debugPrint(PrintWriter out, String prefix) {
+        annotateEntries(prefix, out, null);
+    }
+
+    /**
+     * Encodes the handler lists.
+     *
+     * @param file {@code non-null;} file this instance is part of
+     */
+    public void encode(DexFile file) {
+        finishProcessingIfNecessary();
+
+        TypeIdsSection typeIds = file.getTypeIds();
+        int size = table.size();
+
+        handlerOffsets = new TreeMap<CatchHandlerList, Integer>();
+
+        /*
+         * First add a map entry for each unique list. The tree structure
+         * will ensure they are sorted when we reiterate later.
+         */
+        for (int i = 0; i < size; i++) {
+            handlerOffsets.put(table.get(i).getHandlers(), null);
+        }
+
+        if (handlerOffsets.size() > 65535) {
+            throw new UnsupportedOperationException(
+                    "too many catch handlers");
+        }
+
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput();
+
+        // Write out the handlers "header" consisting of its size in entries.
+        encodedHandlerHeaderSize =
+            out.writeUleb128(handlerOffsets.size());
+
+        // Now write the lists out in order, noting the offset of each.
+        for (Map.Entry<CatchHandlerList, Integer> mapping :
+                 handlerOffsets.entrySet()) {
+            CatchHandlerList list = mapping.getKey();
+            int listSize = list.size();
+            boolean catchesAll = list.catchesAll();
+
+            // Set the offset before we do any writing.
+            mapping.setValue(out.getCursor());
+
+            if (catchesAll) {
+                // A size <= 0 means that the list ends with a catch-all.
+                out.writeSleb128(-(listSize - 1));
+                listSize--;
+            } else {
+                out.writeSleb128(listSize);
+            }
+
+            for (int i = 0; i < listSize; i++) {
+                CatchHandlerList.Entry entry = list.get(i);
+                out.writeUleb128(
+                        typeIds.indexOf(entry.getExceptionType()));
+                out.writeUleb128(entry.getHandler());
+            }
+
+            if (catchesAll) {
+                out.writeUleb128(list.get(listSize).getHandler());
+            }
+        }
+
+        encodedHandlers = out.toByteArray();
+    }
+
+    /**
+     * Gets the write size of this instance, in bytes.
+     *
+     * @return {@code >= 0;} the write size
+     */
+    public int writeSize() {
+        return (triesSize() * TRY_ITEM_WRITE_SIZE) +
+                + encodedHandlers.length;
+    }
+
+    /**
+     * Writes this instance to the given stream.
+     *
+     * @param file {@code non-null;} file this instance is part of
+     * @param out {@code non-null;} where to write to
+     */
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        finishProcessingIfNecessary();
+
+        if (out.annotates()) {
+            annotateEntries("  ", null, out);
+        }
+
+        int tableSize = table.size();
+        for (int i = 0; i < tableSize; i++) {
+            CatchTable.Entry one = table.get(i);
+            int start = one.getStart();
+            int end = one.getEnd();
+            int insnCount = end - start;
+
+            if (insnCount >= 65536) {
+                throw new UnsupportedOperationException(
+                        "bogus exception range: " + Hex.u4(start) + ".." +
+                        Hex.u4(end));
+            }
+
+            out.writeInt(start);
+            out.writeShort(insnCount);
+            out.writeShort(handlerOffsets.get(one.getHandlers()));
+        }
+
+        out.write(encodedHandlers);
+    }
+
+    /**
+     * Helper method to annotate or simply print the exception handlers.
+     * Only one of {@code printTo} or {@code annotateTo} should
+     * be non-null.
+     *
+     * @param prefix {@code non-null;} prefix for each line
+     * @param printTo {@code null-ok;} where to print to
+     * @param annotateTo {@code null-ok;} where to consume bytes and annotate to
+     */
+    private void annotateEntries(String prefix, PrintWriter printTo,
+            AnnotatedOutput annotateTo) {
+        finishProcessingIfNecessary();
+
+        boolean consume = (annotateTo != null);
+        int amt1 = consume ? 6 : 0;
+        int amt2 = consume ? 2 : 0;
+        int size = table.size();
+        String subPrefix = prefix + "  ";
+
+        if (consume) {
+            annotateTo.annotate(0, prefix + "tries:");
+        } else {
+            printTo.println(prefix + "tries:");
+        }
+
+        for (int i = 0; i < size; i++) {
+            CatchTable.Entry entry = table.get(i);
+            CatchHandlerList handlers = entry.getHandlers();
+            String s1 = subPrefix + "try " + Hex.u2or4(entry.getStart())
+                + ".." + Hex.u2or4(entry.getEnd());
+            String s2 = handlers.toHuman(subPrefix, "");
+
+            if (consume) {
+                annotateTo.annotate(amt1, s1);
+                annotateTo.annotate(amt2, s2);
+            } else {
+                printTo.println(s1);
+                printTo.println(s2);
+            }
+        }
+
+        if (! consume) {
+            // Only emit the handler lists if we are consuming bytes.
+            return;
+        }
+
+        annotateTo.annotate(0, prefix + "handlers:");
+        annotateTo.annotate(encodedHandlerHeaderSize,
+                subPrefix + "size: " + Hex.u2(handlerOffsets.size()));
+
+        int lastOffset = 0;
+        CatchHandlerList lastList = null;
+
+        for (Map.Entry<CatchHandlerList, Integer> mapping :
+                 handlerOffsets.entrySet()) {
+            CatchHandlerList list = mapping.getKey();
+            int offset = mapping.getValue();
+
+            if (lastList != null) {
+                annotateAndConsumeHandlers(lastList, lastOffset,
+                        offset - lastOffset, subPrefix, printTo, annotateTo);
+            }
+
+            lastList = list;
+            lastOffset = offset;
+        }
+
+        annotateAndConsumeHandlers(lastList, lastOffset,
+                encodedHandlers.length - lastOffset,
+                subPrefix, printTo, annotateTo);
+    }
+
+    /**
+     * Helper for {@link #annotateEntries} to annotate a catch handler list
+     * while consuming it.
+     *
+     * @param handlers {@code non-null;} handlers to annotate
+     * @param offset {@code >= 0;} the offset of this handler
+     * @param size {@code >= 1;} the number of bytes the handlers consume
+     * @param prefix {@code non-null;} prefix for each line
+     * @param printTo {@code null-ok;} where to print to
+     * @param annotateTo {@code non-null;} where to annotate to
+     */
+    private static void annotateAndConsumeHandlers(CatchHandlerList handlers,
+            int offset, int size, String prefix, PrintWriter printTo,
+            AnnotatedOutput annotateTo) {
+        String s = handlers.toHuman(prefix, Hex.u2(offset) + ": ");
+
+        if (printTo != null) {
+            printTo.println(s);
+        }
+
+        annotateTo.annotate(size, s);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/ClassDataItem.java b/dx/src/com/android/dx/dex/file/ClassDataItem.java
new file mode 100644
index 0000000..c3bd0c1
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/ClassDataItem.java
@@ -0,0 +1,425 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstArray;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.cst.Zeroes;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.ByteArrayAnnotatedOutput;
+import com.android.dx.util.Writers;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+
+/**
+ * Representation of all the parts of a Dalvik class that are generally
+ * "inflated" into an in-memory representation at runtime. Instances of
+ * this class are represented in a compact streamable form in a
+ * {@code dex} file, as opposed to a random-access form.
+ */
+public final class ClassDataItem extends OffsettedItem {
+    /** {@code non-null;} what class this data is for, just for listing generation */
+    private final CstType thisClass;
+
+    /** {@code non-null;} list of static fields */
+    private final ArrayList<EncodedField> staticFields;
+
+    /** {@code non-null;} list of initial values for static fields */
+    private final HashMap<EncodedField, Constant> staticValues;
+
+    /** {@code non-null;} list of instance fields */
+    private final ArrayList<EncodedField> instanceFields;
+
+    /** {@code non-null;} list of direct methods */
+    private final ArrayList<EncodedMethod> directMethods;
+
+    /** {@code non-null;} list of virtual methods */
+    private final ArrayList<EncodedMethod> virtualMethods;
+
+    /** {@code null-ok;} static initializer list; set in {@link #addContents} */
+    private CstArray staticValuesConstant;
+
+    /**
+     * {@code null-ok;} encoded form, ready for writing to a file; set during
+     * {@link #place0}
+     */
+    private byte[] encodedForm;
+
+    /**
+     * Constructs an instance. Its sets of members are initially
+     * empty.
+     *
+     * @param thisClass {@code non-null;} what class this data is for, just
+     * for listing generation
+     */
+    public ClassDataItem(CstType thisClass) {
+        super(1, -1);
+
+        if (thisClass == null) {
+            throw new NullPointerException("thisClass == null");
+        }
+
+        this.thisClass = thisClass;
+        this.staticFields = new ArrayList<EncodedField>(20);
+        this.staticValues = new HashMap<EncodedField, Constant>(40);
+        this.instanceFields = new ArrayList<EncodedField>(20);
+        this.directMethods = new ArrayList<EncodedMethod>(20);
+        this.virtualMethods = new ArrayList<EncodedMethod>(20);
+        this.staticValuesConstant = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_CLASS_DATA_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return toString();
+    }
+
+    /**
+     * Returns whether this instance is empty.
+     *
+     * @return {@code true} if this instance is empty or
+     * {@code false} if at least one element has been added to it
+     */
+    public boolean isEmpty() {
+        return staticFields.isEmpty() && instanceFields.isEmpty()
+            && directMethods.isEmpty() && virtualMethods.isEmpty();
+    }
+
+    /**
+     * Adds a static field.
+     *
+     * @param field {@code non-null;} the field to add
+     * @param value {@code null-ok;} initial value for the field, if any
+     */
+    public void addStaticField(EncodedField field, Constant value) {
+        if (field == null) {
+            throw new NullPointerException("field == null");
+        }
+
+        if (staticValuesConstant != null) {
+            throw new UnsupportedOperationException(
+                    "static fields already sorted");
+        }
+
+        staticFields.add(field);
+        staticValues.put(field, value);
+    }
+
+    /**
+     * Adds an instance field.
+     *
+     * @param field {@code non-null;} the field to add
+     */
+    public void addInstanceField(EncodedField field) {
+        if (field == null) {
+            throw new NullPointerException("field == null");
+        }
+
+        instanceFields.add(field);
+    }
+
+    /**
+     * Adds a direct ({@code static} and/or {@code private}) method.
+     *
+     * @param method {@code non-null;} the method to add
+     */
+    public void addDirectMethod(EncodedMethod method) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        directMethods.add(method);
+    }
+
+    /**
+     * Adds a virtual method.
+     *
+     * @param method {@code non-null;} the method to add
+     */
+    public void addVirtualMethod(EncodedMethod method) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        virtualMethods.add(method);
+    }
+
+    /**
+     * Gets all the methods in this class. The returned list is not linked
+     * in any way to the underlying lists contained in this instance, but
+     * the objects contained in the list are shared.
+     *
+     * @return {@code non-null;} list of all methods
+     */
+    public ArrayList<EncodedMethod> getMethods() {
+        int sz = directMethods.size() + virtualMethods.size();
+        ArrayList<EncodedMethod> result = new ArrayList<EncodedMethod>(sz);
+
+        result.addAll(directMethods);
+        result.addAll(virtualMethods);
+
+        return result;
+    }
+
+
+    /**
+     * Prints out the contents of this instance, in a debugging-friendly
+     * way.
+     *
+     * @param out {@code non-null;} where to output to
+     * @param verbose whether to be verbose with the output
+     */
+    public void debugPrint(Writer out, boolean verbose) {
+        PrintWriter pw = Writers.printWriterFor(out);
+
+        int sz = staticFields.size();
+        for (int i = 0; i < sz; i++) {
+            pw.println("  sfields[" + i + "]: " + staticFields.get(i));
+        }
+
+        sz = instanceFields.size();
+        for (int i = 0; i < sz; i++) {
+            pw.println("  ifields[" + i + "]: " + instanceFields.get(i));
+        }
+
+        sz = directMethods.size();
+        for (int i = 0; i < sz; i++) {
+            pw.println("  dmeths[" + i + "]:");
+            directMethods.get(i).debugPrint(pw, verbose);
+        }
+
+        sz = virtualMethods.size();
+        for (int i = 0; i < sz; i++) {
+            pw.println("  vmeths[" + i + "]:");
+            virtualMethods.get(i).debugPrint(pw, verbose);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        if (!staticFields.isEmpty()) {
+            getStaticValuesConstant(); // Force the fields to be sorted.
+            for (EncodedField field : staticFields) {
+                field.addContents(file);
+            }
+        }
+
+        if (!instanceFields.isEmpty()) {
+            Collections.sort(instanceFields);
+            for (EncodedField field : instanceFields) {
+                field.addContents(file);
+            }
+        }
+
+        if (!directMethods.isEmpty()) {
+            Collections.sort(directMethods);
+            for (EncodedMethod method : directMethods) {
+                method.addContents(file);
+            }
+        }
+
+        if (!virtualMethods.isEmpty()) {
+            Collections.sort(virtualMethods);
+            for (EncodedMethod method : virtualMethods) {
+                method.addContents(file);
+            }
+        }
+    }
+
+    /**
+     * Gets a {@link CstArray} corresponding to {@link #staticValues} if
+     * it contains any non-zero non-{@code null} values.
+     *
+     * @return {@code null-ok;} the corresponding constant or {@code null} if
+     * there are no values to encode
+     */
+    public CstArray getStaticValuesConstant() {
+        if ((staticValuesConstant == null) && (staticFields.size() != 0)) {
+            staticValuesConstant = makeStaticValuesConstant();
+        }
+
+        return staticValuesConstant;
+    }
+
+    /**
+     * Gets a {@link CstArray} corresponding to {@link #staticValues} if
+     * it contains any non-zero non-{@code null} values.
+     *
+     * @return {@code null-ok;} the corresponding constant or {@code null} if
+     * there are no values to encode
+     */
+    private CstArray makeStaticValuesConstant() {
+        // First sort the statics into their final order.
+        Collections.sort(staticFields);
+
+        /*
+         * Get the size of staticValues minus any trailing zeros/nulls (both
+         * nulls per se as well as instances of CstKnownNull).
+         */
+
+        int size = staticFields.size();
+        while (size > 0) {
+            EncodedField field = staticFields.get(size - 1);
+            Constant cst = staticValues.get(field);
+            if (cst instanceof CstLiteralBits) {
+                // Note: CstKnownNull extends CstLiteralBits.
+                if (((CstLiteralBits) cst).getLongBits() != 0) {
+                    break;
+                }
+            } else if (cst != null) {
+                break;
+            }
+            size--;
+        }
+
+        if (size == 0) {
+            return null;
+        }
+
+        // There is something worth encoding, so build up a result.
+
+        CstArray.List list = new CstArray.List(size);
+        for (int i = 0; i < size; i++) {
+            EncodedField field = staticFields.get(i);
+            Constant cst = staticValues.get(field);
+            if (cst == null) {
+                cst = Zeroes.zeroFor(field.getRef().getType());
+            }
+            list.set(i, cst);
+        }
+        list.setImmutable();
+
+        return new CstArray(list);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        // Encode the data and note the size.
+
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput();
+
+        encodeOutput(addedTo.getFile(), out);
+        encodedForm = out.toByteArray();
+        setWriteSize(encodedForm.length);
+    }
+
+    /**
+     * Writes out the encoded form of this instance.
+     *
+     * @param file {@code non-null;} file this instance is part of
+     * @param out {@code non-null;} where to write to
+     */
+    private void encodeOutput(DexFile file, AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+
+        if (annotates) {
+            out.annotate(0, offsetString() + " class data for " +
+                    thisClass.toHuman());
+        }
+
+        encodeSize(file, out, "static_fields", staticFields.size());
+        encodeSize(file, out, "instance_fields", instanceFields.size());
+        encodeSize(file, out, "direct_methods", directMethods.size());
+        encodeSize(file, out, "virtual_methods", virtualMethods.size());
+
+        encodeList(file, out, "static_fields", staticFields);
+        encodeList(file, out, "instance_fields", instanceFields);
+        encodeList(file, out, "direct_methods", directMethods);
+        encodeList(file, out, "virtual_methods", virtualMethods);
+
+        if (annotates) {
+            out.endAnnotation();
+        }
+    }
+
+    /**
+     * Helper for {@link #encodeOutput}, which writes out the given
+     * size value, annotating it as well (if annotations are enabled).
+     *
+     * @param file {@code non-null;} file this instance is part of
+     * @param out {@code non-null;} where to write to
+     * @param label {@code non-null;} the label for the purposes of annotation
+     * @param size {@code >= 0;} the size to write
+     */
+    private static void encodeSize(DexFile file, AnnotatedOutput out,
+            String label, int size) {
+        if (out.annotates()) {
+            out.annotate(String.format("  %-21s %08x", label + "_size:",
+                            size));
+        }
+
+        out.writeUleb128(size);
+    }
+
+    /**
+     * Helper for {@link #encodeOutput}, which writes out the given
+     * list. It also annotates the items (if any and if annotations
+     * are enabled).
+     *
+     * @param file {@code non-null;} file this instance is part of
+     * @param out {@code non-null;} where to write to
+     * @param label {@code non-null;} the label for the purposes of annotation
+     * @param list {@code non-null;} the list in question
+     */
+    private static void encodeList(DexFile file, AnnotatedOutput out,
+            String label, ArrayList<? extends EncodedMember> list) {
+        int size = list.size();
+        int lastIndex = 0;
+
+        if (size == 0) {
+            return;
+        }
+
+        if (out.annotates()) {
+            out.annotate(0, "  " + label + ":");
+        }
+
+        for (int i = 0; i < size; i++) {
+            lastIndex = list.get(i).encode(file, out, lastIndex, i);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo0(DexFile file, AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+
+        if (annotates) {
+            /*
+             * The output is to be annotated, so redo the work previously
+             * done by place0(), except this time annotations will actually
+             * get emitted.
+             */
+            encodeOutput(file, out);
+        } else {
+            out.write(encodedForm);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/ClassDefItem.java b/dx/src/com/android/dx/dex/file/ClassDefItem.java
new file mode 100644
index 0000000..1b79bde
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/ClassDefItem.java
@@ -0,0 +1,411 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.SizeOf;
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstArray;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import com.android.dx.util.Writers;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+
+/**
+ * Representation of a Dalvik class, which is basically a set of
+ * members (fields or methods) along with a few more pieces of
+ * information.
+ */
+public final class ClassDefItem extends IndexedItem {
+
+    /** {@code non-null;} type constant for this class */
+    private final CstType thisClass;
+
+    /** access flags */
+    private final int accessFlags;
+
+    /**
+     * {@code null-ok;} superclass or {@code null} if this class is a/the
+     * root class
+     */
+    private final CstType superclass;
+
+    /** {@code null-ok;} list of implemented interfaces */
+    private TypeListItem interfaces;
+
+    /** {@code null-ok;} source file name or {@code null} if unknown */
+    private final CstString sourceFile;
+
+    /** {@code non-null;} associated class data object */
+    private final ClassDataItem classData;
+
+    /**
+     * {@code null-ok;} item wrapper for the static values, initialized
+     * in {@link #addContents}
+     */
+    private EncodedArrayItem staticValuesItem;
+
+    /** {@code non-null;} annotations directory */
+    private AnnotationsDirectoryItem annotationsDirectory;
+
+    /**
+     * Constructs an instance. Its sets of members and annotations are
+     * initially empty.
+     *
+     * @param thisClass {@code non-null;} type constant for this class
+     * @param accessFlags access flags
+     * @param superclass {@code null-ok;} superclass or {@code null} if
+     * this class is a/the root class
+     * @param interfaces {@code non-null;} list of implemented interfaces
+     * @param sourceFile {@code null-ok;} source file name or
+     * {@code null} if unknown
+     */
+    public ClassDefItem(CstType thisClass, int accessFlags,
+            CstType superclass, TypeList interfaces, CstString sourceFile) {
+        if (thisClass == null) {
+            throw new NullPointerException("thisClass == null");
+        }
+
+        /*
+         * TODO: Maybe check accessFlags and superclass, at
+         * least for easily-checked stuff?
+         */
+
+        if (interfaces == null) {
+            throw new NullPointerException("interfaces == null");
+        }
+
+        this.thisClass = thisClass;
+        this.accessFlags = accessFlags;
+        this.superclass = superclass;
+        this.interfaces =
+            (interfaces.size() == 0) ? null :  new TypeListItem(interfaces);
+        this.sourceFile = sourceFile;
+        this.classData = new ClassDataItem(thisClass);
+        this.staticValuesItem = null;
+        this.annotationsDirectory = new AnnotationsDirectoryItem();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_CLASS_DEF_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        return SizeOf.CLASS_DEF_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        TypeIdsSection typeIds = file.getTypeIds();
+        MixedItemSection byteData = file.getByteData();
+        MixedItemSection wordData = file.getWordData();
+        MixedItemSection typeLists = file.getTypeLists();
+        StringIdsSection stringIds = file.getStringIds();
+
+        typeIds.intern(thisClass);
+
+        if (!classData.isEmpty()) {
+            MixedItemSection classDataSection = file.getClassData();
+            classDataSection.add(classData);
+
+            CstArray staticValues = classData.getStaticValuesConstant();
+            if (staticValues != null) {
+                staticValuesItem =
+                    byteData.intern(new EncodedArrayItem(staticValues));
+            }
+        }
+
+        if (superclass != null) {
+            typeIds.intern(superclass);
+        }
+
+        if (interfaces != null) {
+            interfaces = typeLists.intern(interfaces);
+        }
+
+        if (sourceFile != null) {
+            stringIds.intern(sourceFile);
+        }
+
+        if (! annotationsDirectory.isEmpty()) {
+            if (annotationsDirectory.isInternable()) {
+                annotationsDirectory = wordData.intern(annotationsDirectory);
+            } else {
+                wordData.add(annotationsDirectory);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+        TypeIdsSection typeIds = file.getTypeIds();
+        int classIdx = typeIds.indexOf(thisClass);
+        int superIdx = (superclass == null) ? -1 :
+            typeIds.indexOf(superclass);
+        int interOff = OffsettedItem.getAbsoluteOffsetOr0(interfaces);
+        int annoOff = annotationsDirectory.isEmpty() ? 0 :
+            annotationsDirectory.getAbsoluteOffset();
+        int sourceFileIdx = (sourceFile == null) ? -1 :
+            file.getStringIds().indexOf(sourceFile);
+        int dataOff = classData.isEmpty()? 0 : classData.getAbsoluteOffset();
+        int staticValuesOff =
+            OffsettedItem.getAbsoluteOffsetOr0(staticValuesItem);
+
+        if (annotates) {
+            out.annotate(0, indexString() + ' ' + thisClass.toHuman());
+            out.annotate(4, "  class_idx:           " + Hex.u4(classIdx));
+            out.annotate(4, "  access_flags:        " +
+                         AccessFlags.classString(accessFlags));
+            out.annotate(4, "  superclass_idx:      " + Hex.u4(superIdx) +
+                         " // " + ((superclass == null) ? "<none>" :
+                          superclass.toHuman()));
+            out.annotate(4, "  interfaces_off:      " + Hex.u4(interOff));
+            if (interOff != 0) {
+                TypeList list = interfaces.getList();
+                int sz = list.size();
+                for (int i = 0; i < sz; i++) {
+                    out.annotate(0, "    " + list.getType(i).toHuman());
+                }
+            }
+            out.annotate(4, "  source_file_idx:     " + Hex.u4(sourceFileIdx) +
+                         " // " + ((sourceFile == null) ? "<none>" :
+                          sourceFile.toHuman()));
+            out.annotate(4, "  annotations_off:     " + Hex.u4(annoOff));
+            out.annotate(4, "  class_data_off:      " + Hex.u4(dataOff));
+            out.annotate(4, "  static_values_off:   " +
+                    Hex.u4(staticValuesOff));
+        }
+
+        out.writeInt(classIdx);
+        out.writeInt(accessFlags);
+        out.writeInt(superIdx);
+        out.writeInt(interOff);
+        out.writeInt(sourceFileIdx);
+        out.writeInt(annoOff);
+        out.writeInt(dataOff);
+        out.writeInt(staticValuesOff);
+    }
+
+    /**
+     * Gets the constant corresponding to this class.
+     *
+     * @return {@code non-null;} the constant
+     */
+    public CstType getThisClass() {
+        return thisClass;
+    }
+
+    /**
+     * Gets the access flags.
+     *
+     * @return the access flags
+     */
+    public int getAccessFlags() {
+        return accessFlags;
+    }
+
+    /**
+     * Gets the superclass.
+     *
+     * @return {@code null-ok;} the superclass or {@code null} if
+     * this class is a/the root class
+     */
+    public CstType getSuperclass() {
+        return superclass;
+    }
+
+    /**
+     * Gets the list of interfaces implemented.
+     *
+     * @return {@code non-null;} the interfaces list
+     */
+    public TypeList getInterfaces() {
+        if (interfaces == null) {
+            return StdTypeList.EMPTY;
+        }
+
+        return interfaces.getList();
+    }
+
+    /**
+     * Gets the source file name.
+     *
+     * @return {@code null-ok;} the source file name or {@code null} if unknown
+     */
+    public CstString getSourceFile() {
+        return sourceFile;
+    }
+
+    /**
+     * Adds a static field.
+     *
+     * @param field {@code non-null;} the field to add
+     * @param value {@code null-ok;} initial value for the field, if any
+     */
+    public void addStaticField(EncodedField field, Constant value) {
+        classData.addStaticField(field, value);
+    }
+
+    /**
+     * Adds an instance field.
+     *
+     * @param field {@code non-null;} the field to add
+     */
+    public void addInstanceField(EncodedField field) {
+        classData.addInstanceField(field);
+    }
+
+    /**
+     * Adds a direct ({@code static} and/or {@code private}) method.
+     *
+     * @param method {@code non-null;} the method to add
+     */
+    public void addDirectMethod(EncodedMethod method) {
+        classData.addDirectMethod(method);
+    }
+
+    /**
+     * Adds a virtual method.
+     *
+     * @param method {@code non-null;} the method to add
+     */
+    public void addVirtualMethod(EncodedMethod method) {
+        classData.addVirtualMethod(method);
+    }
+
+    /**
+     * Gets all the methods in this class. The returned list is not linked
+     * in any way to the underlying lists contained in this instance, but
+     * the objects contained in the list are shared.
+     *
+     * @return {@code non-null;} list of all methods
+     */
+    public ArrayList<EncodedMethod> getMethods() {
+        return classData.getMethods();
+    }
+
+    /**
+     * Sets the direct annotations on this class. These are annotations
+     * made on the class, per se, as opposed to on one of its members.
+     * It is only valid to call this method at most once per instance.
+     *
+     * @param annotations {@code non-null;} annotations to set for this class
+     * @param dexFile {@code non-null;} dex output
+     */
+    public void setClassAnnotations(Annotations annotations, DexFile dexFile) {
+        annotationsDirectory.setClassAnnotations(annotations, dexFile);
+    }
+
+    /**
+     * Adds a field annotations item to this class.
+     *
+     * @param field {@code non-null;} field in question
+     * @param annotations {@code non-null;} associated annotations to add
+     * @param dexFile {@code non-null;} dex output
+     */
+    public void addFieldAnnotations(CstFieldRef field,
+            Annotations annotations, DexFile dexFile) {
+        annotationsDirectory.addFieldAnnotations(field, annotations, dexFile);
+    }
+
+    /**
+     * Adds a method annotations item to this class.
+     *
+     * @param method {@code non-null;} method in question
+     * @param annotations {@code non-null;} associated annotations to add
+     * @param dexFile {@code non-null;} dex output
+     */
+    public void addMethodAnnotations(CstMethodRef method,
+            Annotations annotations, DexFile dexFile) {
+        annotationsDirectory.addMethodAnnotations(method, annotations, dexFile);
+    }
+
+    /**
+     * Adds a parameter annotations item to this class.
+     *
+     * @param method {@code non-null;} method in question
+     * @param list {@code non-null;} associated list of annotation sets to add
+     * @param dexFile {@code non-null;} dex output
+     */
+    public void addParameterAnnotations(CstMethodRef method,
+            AnnotationsList list, DexFile dexFile) {
+        annotationsDirectory.addParameterAnnotations(method, list, dexFile);
+    }
+
+    /**
+     * Gets the method annotations for a given method, if any. This is
+     * meant for use by debugging / dumping code.
+     *
+     * @param method {@code non-null;} the method
+     * @return {@code null-ok;} the method annotations, if any
+     */
+    public Annotations getMethodAnnotations(CstMethodRef method) {
+        return annotationsDirectory.getMethodAnnotations(method);
+    }
+
+    /**
+     * Gets the parameter annotations for a given method, if any. This is
+     * meant for use by debugging / dumping code.
+     *
+     * @param method {@code non-null;} the method
+     * @return {@code null-ok;} the parameter annotations, if any
+     */
+    public AnnotationsList getParameterAnnotations(CstMethodRef method) {
+        return annotationsDirectory.getParameterAnnotations(method);
+    }
+
+    /**
+     * Prints out the contents of this instance, in a debugging-friendly
+     * way.
+     *
+     * @param out {@code non-null;} where to output to
+     * @param verbose whether to be verbose with the output
+     */
+    public void debugPrint(Writer out, boolean verbose) {
+        PrintWriter pw = Writers.printWriterFor(out);
+
+        pw.println(getClass().getName() + " {");
+        pw.println("  accessFlags: " + Hex.u2(accessFlags));
+        pw.println("  superclass: " + superclass);
+        pw.println("  interfaces: " +
+                ((interfaces == null) ? "<none>" : interfaces));
+        pw.println("  sourceFile: " +
+                ((sourceFile == null) ? "<none>" : sourceFile.toQuoted()));
+
+        classData.debugPrint(out, verbose);
+        annotationsDirectory.debugPrint(pw);
+
+        pw.println("}");
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/ClassDefsSection.java b/dx/src/com/android/dx/dex/file/ClassDefsSection.java
new file mode 100644
index 0000000..4db056b
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/ClassDefsSection.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.TreeMap;
+
+/**
+ * Class definitions list section of a {@code .dex} file.
+ */
+public final class ClassDefsSection extends UniformItemSection {
+    /**
+     * {@code non-null;} map from type constants for classes to {@link
+     * ClassDefItem} instances that define those classes
+     */
+    private final TreeMap<Type, ClassDefItem> classDefs;
+
+    /** {@code null-ok;} ordered list of classes; set in {@link #orderItems} */
+    private ArrayList<ClassDefItem> orderedDefs;
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param file {@code non-null;} file that this instance is part of
+     */
+    public ClassDefsSection(DexFile file) {
+        super("class_defs", file, 4);
+
+        classDefs = new TreeMap<Type, ClassDefItem>();
+        orderedDefs = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        if (orderedDefs != null) {
+            return orderedDefs;
+        }
+
+        return classDefs.values();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IndexedItem get(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        throwIfNotPrepared();
+
+        Type type = ((CstType) cst).getClassType();
+        IndexedItem result = classDefs.get(type);
+
+        if (result == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return result;
+    }
+
+    /**
+     * Writes the portion of the file header that refers to this instance.
+     *
+     * @param out {@code non-null;} where to write
+     */
+    public void writeHeaderPart(AnnotatedOutput out) {
+        throwIfNotPrepared();
+
+        int sz = classDefs.size();
+        int offset = (sz == 0) ? 0 : getFileOffset();
+
+        if (out.annotates()) {
+            out.annotate(4, "class_defs_size: " + Hex.u4(sz));
+            out.annotate(4, "class_defs_off:  " + Hex.u4(offset));
+        }
+
+        out.writeInt(sz);
+        out.writeInt(offset);
+    }
+
+    /**
+     * Adds an element to this instance. It is illegal to attempt to add more
+     * than one class with the same name.
+     *
+     * @param clazz {@code non-null;} the class def to add
+     */
+    public void add(ClassDefItem clazz) {
+        Type type;
+
+        try {
+            type = clazz.getThisClass().getClassType();
+        } catch (NullPointerException ex) {
+            // Elucidate the exception.
+            throw new NullPointerException("clazz == null");
+        }
+
+        throwIfPrepared();
+
+        if (classDefs.get(type) != null) {
+            throw new IllegalArgumentException("already added: " + type);
+        }
+
+        classDefs.put(type, clazz);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void orderItems() {
+        int sz = classDefs.size();
+        int idx = 0;
+
+        orderedDefs = new ArrayList<ClassDefItem>(sz);
+
+        /*
+         * Iterate over all the classes, recursively assigning an
+         * index to each, implicitly skipping the ones that have
+         * already been assigned by the time this (top-level)
+         * iteration reaches them.
+         */
+        for (Type type : classDefs.keySet()) {
+            idx = orderItems0(type, idx, sz - idx);
+        }
+    }
+
+    /**
+     * Helper for {@link #orderItems}, which recursively assigns indices
+     * to classes.
+     *
+     * @param type {@code null-ok;} type ref to assign, if any
+     * @param idx {@code >= 0;} the next index to assign
+     * @param maxDepth maximum recursion depth; if negative, this will
+     * throw an exception indicating class definition circularity
+     * @return {@code >= 0;} the next index to assign
+     */
+    private int orderItems0(Type type, int idx, int maxDepth) {
+        ClassDefItem c = classDefs.get(type);
+
+        if ((c == null) || (c.hasIndex())) {
+            return idx;
+        }
+
+        if (maxDepth < 0) {
+            throw new RuntimeException("class circularity with " + type);
+        }
+
+        maxDepth--;
+
+        CstType superclassCst = c.getSuperclass();
+        if (superclassCst != null) {
+            Type superclass = superclassCst.getClassType();
+            idx = orderItems0(superclass, idx, maxDepth);
+        }
+
+        TypeList interfaces = c.getInterfaces();
+        int sz = interfaces.size();
+        for (int i = 0; i < sz; i++) {
+            idx = orderItems0(interfaces.getType(i), idx, maxDepth);
+        }
+
+        c.setIndex(idx);
+        orderedDefs.add(c);
+        return idx + 1;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/CodeItem.java b/dx/src/com/android/dx/dex/file/CodeItem.java
new file mode 100644
index 0000000..500dbff
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/CodeItem.java
@@ -0,0 +1,327 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.dex.code.DalvCode;
+import com.android.dx.dex.code.DalvInsnList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.io.PrintWriter;
+
+/**
+ * Representation of all the parts needed for concrete methods in a
+ * {@code dex} file.
+ */
+public final class CodeItem extends OffsettedItem {
+    /** file alignment of this class, in bytes */
+    private static final int ALIGNMENT = 4;
+
+    /** write size of the header of this class, in bytes */
+    private static final int HEADER_SIZE = 16;
+
+    /** {@code non-null;} method that this code implements */
+    private final CstMethodRef ref;
+
+    /** {@code non-null;} the bytecode instructions and associated data */
+    private final DalvCode code;
+
+    /** {@code null-ok;} the catches, if needed; set in {@link #addContents} */
+    private CatchStructs catches;
+
+    /** whether this instance is for a {@code static} method */
+    private final boolean isStatic;
+
+    /**
+     * {@code non-null;} list of possibly-thrown exceptions; just used in
+     * generating debugging output (listings)
+     */
+    private final TypeList throwsList;
+
+    /**
+     * {@code null-ok;} the debug info or {@code null} if there is none;
+     * set in {@link #addContents}
+     */
+    private DebugInfoItem debugInfo;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param ref {@code non-null;} method that this code implements
+     * @param code {@code non-null;} the underlying code
+     * @param isStatic whether this instance is for a {@code static}
+     * method
+     * @param throwsList {@code non-null;} list of possibly-thrown exceptions,
+     * just used in generating debugging output (listings)
+     */
+    public CodeItem(CstMethodRef ref, DalvCode code, boolean isStatic,
+            TypeList throwsList) {
+        super(ALIGNMENT, -1);
+
+        if (ref == null) {
+            throw new NullPointerException("ref == null");
+        }
+
+        if (code == null) {
+            throw new NullPointerException("code == null");
+        }
+
+        if (throwsList == null) {
+            throw new NullPointerException("throwsList == null");
+        }
+
+        this.ref = ref;
+        this.code = code;
+        this.isStatic = isStatic;
+        this.throwsList = throwsList;
+        this.catches = null;
+        this.debugInfo = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_CODE_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        MixedItemSection byteData = file.getByteData();
+        TypeIdsSection typeIds = file.getTypeIds();
+
+        if (code.hasPositions() || code.hasLocals()) {
+            debugInfo = new DebugInfoItem(code, isStatic, ref);
+            byteData.add(debugInfo);
+        }
+
+        if (code.hasAnyCatches()) {
+            for (Type type : code.getCatchTypes()) {
+                typeIds.intern(type);
+            }
+            catches = new CatchStructs(code);
+        }
+
+        for (Constant c : code.getInsnConstants()) {
+            file.internIfAppropriate(c);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "CodeItem{" + toHuman() + "}";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return ref.toHuman();
+    }
+
+    /**
+     * Gets the reference to the method this instance implements.
+     *
+     * @return {@code non-null;} the method reference
+     */
+    public CstMethodRef getRef() {
+        return ref;
+    }
+
+    /**
+     * Does a human-friendly dump of this instance.
+     *
+     * @param out {@code non-null;} where to dump
+     * @param prefix {@code non-null;} per-line prefix to use
+     * @param verbose whether to be verbose with the output
+     */
+    public void debugPrint(PrintWriter out, String prefix, boolean verbose) {
+        out.println(ref.toHuman() + ":");
+
+        DalvInsnList insns = code.getInsns();
+        out.println("regs: " + Hex.u2(getRegistersSize()) +
+                "; ins: " + Hex.u2(getInsSize()) + "; outs: " +
+                Hex.u2(getOutsSize()));
+
+        insns.debugPrint(out, prefix, verbose);
+
+        String prefix2 = prefix + "  ";
+
+        if (catches != null) {
+            out.print(prefix);
+            out.println("catches");
+            catches.debugPrint(out, prefix2);
+        }
+
+        if (debugInfo != null) {
+            out.print(prefix);
+            out.println("debug info");
+            debugInfo.debugPrint(out, prefix2);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        final DexFile file = addedTo.getFile();
+        int catchesSize;
+
+        /*
+         * In order to get the catches and insns, all the code's
+         * constants need to be assigned indices.
+         */
+        code.assignIndices(new DalvCode.AssignIndicesCallback() {
+                @Override
+                public int getIndex(Constant cst) {
+                    IndexedItem item = file.findItemOrNull(cst);
+                    if (item == null) {
+                        return -1;
+                    }
+                    return item.getIndex();
+                }
+            });
+
+        if (catches != null) {
+            catches.encode(file);
+            catchesSize = catches.writeSize();
+        } else {
+            catchesSize = 0;
+        }
+
+        /*
+         * The write size includes the header, two bytes per code
+         * unit, post-code padding if necessary, and however much
+         * space the catches need.
+         */
+
+        int insnsSize = code.getInsns().codeSize();
+        if ((insnsSize & 1) != 0) {
+            insnsSize++;
+        }
+
+        setWriteSize(HEADER_SIZE + (insnsSize * 2) + catchesSize);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+        int regSz = getRegistersSize();
+        int outsSz = getOutsSize();
+        int insSz = getInsSize();
+        int insnsSz = code.getInsns().codeSize();
+        boolean needPadding = (insnsSz & 1) != 0;
+        int triesSz = (catches == null) ? 0 : catches.triesSize();
+        int debugOff = (debugInfo == null) ? 0 : debugInfo.getAbsoluteOffset();
+
+        if (annotates) {
+            out.annotate(0, offsetString() + ' ' + ref.toHuman());
+            out.annotate(2, "  registers_size: " + Hex.u2(regSz));
+            out.annotate(2, "  ins_size:       " + Hex.u2(insSz));
+            out.annotate(2, "  outs_size:      " + Hex.u2(outsSz));
+            out.annotate(2, "  tries_size:     " + Hex.u2(triesSz));
+            out.annotate(4, "  debug_off:      " + Hex.u4(debugOff));
+            out.annotate(4, "  insns_size:     " + Hex.u4(insnsSz));
+
+            // This isn't represented directly here, but it is useful to see.
+            int size = throwsList.size();
+            if (size != 0) {
+                out.annotate(0, "  throws " + StdTypeList.toHuman(throwsList));
+            }
+        }
+
+        out.writeShort(regSz);
+        out.writeShort(insSz);
+        out.writeShort(outsSz);
+        out.writeShort(triesSz);
+        out.writeInt(debugOff);
+        out.writeInt(insnsSz);
+
+        writeCodes(file, out);
+
+        if (catches != null) {
+            if (needPadding) {
+                if (annotates) {
+                    out.annotate(2, "  padding: 0");
+                }
+                out.writeShort(0);
+            }
+
+            catches.writeTo(file, out);
+        }
+
+        if (annotates) {
+            /*
+             * These are pointed at in the code header (above), but it's less
+             * distracting to expand on them at the bottom of the code.
+             */
+            if (debugInfo != null) {
+                out.annotate(0, "  debug info");
+                debugInfo.annotateTo(file, out, "    ");
+            }
+        }
+    }
+
+    /**
+     * Helper for {@link #writeTo0} which writes out the actual bytecode.
+     *
+     * @param file {@code non-null;} file we are part of
+     * @param out {@code non-null;} where to write to
+     */
+    private void writeCodes(DexFile file, AnnotatedOutput out) {
+        DalvInsnList insns = code.getInsns();
+
+        try {
+            insns.writeTo(out);
+        } catch (RuntimeException ex) {
+            throw ExceptionWithContext.withContext(ex, "...while writing " +
+                    "instructions for " + ref.toHuman());
+        }
+    }
+
+    /**
+     * Get the in registers count.
+     *
+     * @return the count
+     */
+    private int getInsSize() {
+        return ref.getParameterWordCount(isStatic);
+    }
+
+    /**
+     * Get the out registers count.
+     *
+     * @return the count
+     */
+    private int getOutsSize() {
+        return code.getInsns().getOutsSize();
+    }
+
+    /**
+     * Get the total registers count.
+     *
+     * @return the count
+     */
+    private int getRegistersSize() {
+        return code.getInsns().getRegistersSize();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/DebugInfoConstants.java b/dx/src/com/android/dx/dex/file/DebugInfoConstants.java
new file mode 100644
index 0000000..78b6b04
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/DebugInfoConstants.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+/**
+ * Constants for the dex debug info state machine format.
+ */
+public interface DebugInfoConstants {
+
+    /*
+     * normal opcodes
+     */
+
+    /**
+     * Terminates a debug info sequence for a method.<p>
+     * Args: none
+     *
+     */
+    static final int DBG_END_SEQUENCE = 0x00;
+
+    /**
+     * Advances the program counter/address register without emitting
+     * a positions entry.<p>
+     *
+     * Args:
+     * <ol>
+     * <li>Unsigned LEB128 &mdash; amount to advance pc by
+     * </ol>
+     */
+    static final int DBG_ADVANCE_PC = 0x01;
+
+    /**
+     * Advances the line register without emitting
+     * a positions entry.<p>
+     *
+     * Args:
+     * <ol>
+     * <li>Signed LEB128 &mdash; amount to change line register by.
+     * </ol>
+     */
+    static final int DBG_ADVANCE_LINE = 0x02;
+
+    /**
+     * Introduces a local variable at the current address.<p>
+     *
+     * Args:
+     * <ol>
+     * <li>Unsigned LEB128 &mdash; register that will contain local.
+     * <li>Unsigned LEB128 &mdash; string index (shifted by 1) of local name.
+     * <li>Unsigned LEB128 &mdash; type index (shifted by 1) of type.
+     * </ol>
+     */
+    static final int DBG_START_LOCAL = 0x03;
+
+    /**
+     * Introduces a local variable at the current address with a type
+     * signature specified.<p>
+     *
+     * Args:
+     * <ol>
+     * <li>Unsigned LEB128 &mdash; register that will contain local.
+     * <li>Unsigned LEB128 &mdash; string index (shifted by 1) of local name.
+     * <li>Unsigned LEB128 &mdash; type index (shifted by 1) of type.
+     * <li>Unsigned LEB128 &mdash; string index (shifted by 1) of
+     * type signature.
+     * </ol>
+     */
+    static final int DBG_START_LOCAL_EXTENDED = 0x04;
+
+    /**
+     * Marks a currently-live local variable as out of scope at the
+     * current address.<p>
+     *
+     * Args:
+     * <ol>
+     * <li>Unsigned LEB128 &mdash; register that contained local
+     * </ol>
+     */
+    static final int DBG_END_LOCAL = 0x05;
+
+    /**
+     * Re-introduces a local variable at the current address. The name
+     * and type are the same as the last local that was live in the specified
+     * register.<p>
+     *
+     * Args:
+     * <ol>
+     * <li>Unsigned LEB128 &mdash; register to re-start.
+     * </ol>
+     */
+    static final int DBG_RESTART_LOCAL = 0x06;
+
+
+    /**
+     * Sets the "prologue_end" state machine register, indicating that the
+     * next position entry that is added should be considered the end of
+     * a method prologue (an appropriate place for a method breakpoint).<p>
+     *
+     * The prologue_end register is cleared by any special
+     * ({@code >= OPCODE_BASE}) opcode.
+     */
+    static final int DBG_SET_PROLOGUE_END = 0x07;
+
+    /**
+     * Sets the "epilogue_begin" state machine register, indicating that the
+     * next position entry that is added should be considered the beginning of
+     * a method epilogue (an appropriate place to suspend execution before
+     * method exit).<p>
+     *
+     * The epilogue_begin register is cleared by any special
+     * ({@code >= OPCODE_BASE}) opcode.
+     */
+    static final int DBG_SET_EPILOGUE_BEGIN = 0x08;
+
+    /**
+     * Sets the current file that that line numbers refer to. All subsequent
+     * line number entries make reference to this source file name, instead
+     * of the default name specified in code_item.
+     *
+     * Args:
+     * <ol>
+     * <li>Unsigned LEB128 &mdash; string index (shifted by 1) of source
+     * file name.
+     * </ol>
+     */
+    static final int DBG_SET_FILE = 0x09;
+
+    /* IF YOU ADD A NEW OPCODE, increase OPCODE_BASE */
+
+    /*
+     * "special opcode" configuration, essentially what's found in
+     * the line number program header in DWARFv3, Section 6.2.4
+     */
+
+    /** the smallest value a special opcode can take */
+    static final int DBG_FIRST_SPECIAL = 0x0a;
+    static final int DBG_LINE_BASE = -4;
+    static final int DBG_LINE_RANGE = 15;
+    // MIN_INSN_LENGTH is always 1
+}
diff --git a/dx/src/com/android/dx/dex/file/DebugInfoDecoder.java b/dx/src/com/android/dx/dex/file/DebugInfoDecoder.java
new file mode 100644
index 0000000..912f12a
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/DebugInfoDecoder.java
@@ -0,0 +1,597 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.Leb128;
+import com.android.dex.util.ByteArrayByteInput;
+import com.android.dex.util.ByteInput;
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.dex.code.DalvCode;
+import com.android.dx.dex.code.DalvInsnList;
+import com.android.dx.dex.code.LocalList;
+import com.android.dx.dex.code.PositionList;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_ADVANCE_LINE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_ADVANCE_PC;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_END_LOCAL;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_END_SEQUENCE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_FIRST_SPECIAL;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_LINE_BASE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_LINE_RANGE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_RESTART_LOCAL;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_SET_EPILOGUE_BEGIN;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_SET_FILE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_SET_PROLOGUE_END;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_START_LOCAL;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_START_LOCAL_EXTENDED;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A decoder for the dex debug info state machine format.
+ * This code exists mostly as a reference implementation and test for
+ * for the {@code DebugInfoEncoder}
+ */
+public class DebugInfoDecoder {
+    /** encoded debug info */
+    private final byte[] encoded;
+
+    /** positions decoded */
+    private final ArrayList<PositionEntry> positions;
+
+    /** locals decoded */
+    private final ArrayList<LocalEntry> locals;
+
+    /** size of code block in code units */
+    private final int codesize;
+
+    /** indexed by register, the last local variable live in a reg */
+    private final LocalEntry[] lastEntryForReg;
+
+    /** method descriptor of method this debug info is for */
+    private final Prototype desc;
+
+    /** true if method is static */
+    private final boolean isStatic;
+
+    /** dex file this debug info will be stored in */
+    private final DexFile file;
+
+    /**
+     * register size, in register units, of the register space
+     * used by this method
+     */
+    private final int regSize;
+
+    /** current decoding state: line number */
+    private int line = 1;
+
+    /** current decoding state: bytecode address */
+    private int address = 0;
+
+    /** string index of the string "this" */
+    private final int thisStringIdx;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param encoded encoded debug info
+     * @param codesize size of code block in code units
+     * @param regSize register size, in register units, of the register space
+     * used by this method
+     * @param isStatic true if method is static
+     * @param ref method descriptor of method this debug info is for
+     * @param file dex file this debug info will be stored in
+     */
+    DebugInfoDecoder(byte[] encoded, int codesize, int regSize,
+            boolean isStatic, CstMethodRef ref, DexFile file) {
+        if (encoded == null) {
+            throw new NullPointerException("encoded == null");
+        }
+
+        this.encoded = encoded;
+        this.isStatic = isStatic;
+        this.desc = ref.getPrototype();
+        this.file = file;
+        this.regSize = regSize;
+
+        positions = new ArrayList<PositionEntry>();
+        locals = new ArrayList<LocalEntry>();
+        this.codesize = codesize;
+        lastEntryForReg = new LocalEntry[regSize];
+
+        int idx = -1;
+
+        try {
+            idx = file.getStringIds().indexOf(new CstString("this"));
+        } catch (IllegalArgumentException ex) {
+            /*
+             * Silently tolerate not finding "this". It just means that
+             * no method has local variable info that looks like
+             * a standard instance method.
+             */
+        }
+
+        thisStringIdx = idx;
+    }
+
+    /**
+     * An entry in the resulting postions table
+     */
+    static private class PositionEntry {
+        /** bytecode address */
+        public int address;
+
+        /** line number */
+        public int line;
+
+        public PositionEntry(int address, int line) {
+            this.address = address;
+            this.line = line;
+        }
+    }
+
+    /**
+     * An entry in the resulting locals table
+     */
+    static private class LocalEntry {
+        /** address of event */
+        public int address;
+
+        /** {@code true} iff it's a local start */
+        public boolean isStart;
+
+        /** register number */
+        public int reg;
+
+        /** index of name in strings table */
+        public int nameIndex;
+
+        /** index of type in types table */
+        public int typeIndex;
+
+        /** index of type signature in strings table */
+        public int signatureIndex;
+
+        public LocalEntry(int address, boolean isStart, int reg, int nameIndex,
+                int typeIndex, int signatureIndex) {
+            this.address        = address;
+            this.isStart        = isStart;
+            this.reg            = reg;
+            this.nameIndex      = nameIndex;
+            this.typeIndex      = typeIndex;
+            this.signatureIndex = signatureIndex;
+        }
+
+        @Override
+        public String toString() {
+            return String.format("[%x %s v%d %04x %04x %04x]",
+                    address, isStart ? "start" : "end", reg,
+                    nameIndex, typeIndex, signatureIndex);
+        }
+    }
+
+    /**
+     * Gets the decoded positions list.
+     * Valid after calling {@code decode}.
+     *
+     * @return positions list in ascending address order.
+     */
+    public List<PositionEntry> getPositionList() {
+        return positions;
+    }
+
+    /**
+     * Gets the decoded locals list, in ascending start-address order.
+     * Valid after calling {@code decode}.
+     *
+     * @return locals list in ascending address order.
+     */
+    public List<LocalEntry> getLocals() {
+        return locals;
+    }
+
+    /**
+     * Decodes the debug info sequence.
+     */
+    public void decode() {
+        try {
+            decode0();
+        } catch (Exception ex) {
+            throw ExceptionWithContext.withContext(ex,
+                    "...while decoding debug info");
+        }
+    }
+
+    /**
+     * Reads a string index. String indicies are offset by 1, and a 0 value
+     * in the stream (-1 as returned by this method) means "null"
+     *
+     * @return index into file's string ids table, -1 means null
+     * @throws IOException
+     */
+    private int readStringIndex(ByteInput bs) throws IOException {
+        int offsetIndex = Leb128.readUnsignedLeb128(bs);
+
+        return offsetIndex - 1;
+    }
+
+    /**
+     * Gets the register that begins the method's parameter range (including
+     * the 'this' parameter for non-static methods). The range continues until
+     * {@code regSize}
+     *
+     * @return register as noted above.
+     */
+    private int getParamBase() {
+        return regSize
+                - desc.getParameterTypes().getWordCount() - (isStatic? 0 : 1);
+    }
+
+    private void decode0() throws IOException {
+        ByteInput bs = new ByteArrayByteInput(encoded);
+
+        line = Leb128.readUnsignedLeb128(bs);
+        int szParams = Leb128.readUnsignedLeb128(bs);
+        StdTypeList params = desc.getParameterTypes();
+        int curReg = getParamBase();
+
+        if (szParams != params.size()) {
+            throw new RuntimeException(
+                    "Mismatch between parameters_size and prototype");
+        }
+
+        if (!isStatic) {
+            // Start off with implicit 'this' entry
+            LocalEntry thisEntry =
+                new LocalEntry(0, true, curReg, thisStringIdx, 0, 0);
+            locals.add(thisEntry);
+            lastEntryForReg[curReg] = thisEntry;
+            curReg++;
+        }
+
+        for (int i = 0; i < szParams; i++) {
+            Type paramType = params.getType(i);
+            LocalEntry le;
+
+            int nameIdx = readStringIndex(bs);
+
+            if (nameIdx == -1) {
+                /*
+                 * Unnamed parameter; often but not always filled in by an
+                 * extended start op after the prologue
+                 */
+                le = new LocalEntry(0, true, curReg, -1, 0, 0);
+            } else {
+                // TODO: Final 0 should be idx of paramType.getDescriptor().
+                le = new LocalEntry(0, true, curReg, nameIdx, 0, 0);
+            }
+
+            locals.add(le);
+            lastEntryForReg[curReg] = le;
+            curReg += paramType.getCategory();
+        }
+
+        for (;;) {
+            int opcode = bs.readByte() & 0xff;
+
+            switch (opcode) {
+                case DBG_START_LOCAL: {
+                    int reg = Leb128.readUnsignedLeb128(bs);
+                    int nameIdx = readStringIndex(bs);
+                    int typeIdx = readStringIndex(bs);
+                    LocalEntry le = new LocalEntry(
+                            address, true, reg, nameIdx, typeIdx, 0);
+
+                    locals.add(le);
+                    lastEntryForReg[reg] = le;
+                }
+                break;
+
+                case DBG_START_LOCAL_EXTENDED: {
+                    int reg = Leb128.readUnsignedLeb128(bs);
+                    int nameIdx = readStringIndex(bs);
+                    int typeIdx = readStringIndex(bs);
+                    int sigIdx = readStringIndex(bs);
+                    LocalEntry le = new LocalEntry(
+                            address, true, reg, nameIdx, typeIdx, sigIdx);
+
+                    locals.add(le);
+                    lastEntryForReg[reg] = le;
+                }
+                break;
+
+                case DBG_RESTART_LOCAL: {
+                    int reg = Leb128.readUnsignedLeb128(bs);
+                    LocalEntry prevle;
+                    LocalEntry le;
+
+                    try {
+                        prevle = lastEntryForReg[reg];
+
+                        if (prevle.isStart) {
+                            throw new RuntimeException("nonsensical "
+                                    + "RESTART_LOCAL on live register v"
+                                    + reg);
+                        }
+
+                        le = new LocalEntry(address, true, reg,
+                                prevle.nameIndex, prevle.typeIndex, 0);
+                    } catch (NullPointerException ex) {
+                        throw new RuntimeException(
+                                "Encountered RESTART_LOCAL on new v" + reg);
+                    }
+
+                    locals.add(le);
+                    lastEntryForReg[reg] = le;
+                }
+                break;
+
+                case DBG_END_LOCAL: {
+                    int reg = Leb128.readUnsignedLeb128(bs);
+                    LocalEntry prevle;
+                    LocalEntry le;
+
+                    try {
+                        prevle = lastEntryForReg[reg];
+
+                        if (!prevle.isStart) {
+                            throw new RuntimeException("nonsensical "
+                                    + "END_LOCAL on dead register v" + reg);
+                        }
+
+                        le = new LocalEntry(address, false, reg,
+                                prevle.nameIndex, prevle.typeIndex,
+                                prevle.signatureIndex);
+                    } catch (NullPointerException ex) {
+                        throw new RuntimeException(
+                                "Encountered END_LOCAL on new v" + reg);
+                    }
+
+                    locals.add(le);
+                    lastEntryForReg[reg] = le;
+                }
+                break;
+
+                case DBG_END_SEQUENCE:
+                    // all done
+                return;
+
+                case DBG_ADVANCE_PC:
+                    address += Leb128.readUnsignedLeb128(bs);
+                break;
+
+                case DBG_ADVANCE_LINE:
+                    line += Leb128.readSignedLeb128(bs);
+                break;
+
+                case DBG_SET_PROLOGUE_END:
+                    //TODO do something with this.
+                break;
+
+                case DBG_SET_EPILOGUE_BEGIN:
+                    //TODO do something with this.
+                break;
+
+                case DBG_SET_FILE:
+                    //TODO do something with this.
+                break;
+
+                default:
+                    if (opcode < DBG_FIRST_SPECIAL) {
+                        throw new RuntimeException(
+                                "Invalid extended opcode encountered "
+                                        + opcode);
+                    }
+
+                    int adjopcode = opcode - DBG_FIRST_SPECIAL;
+
+                    address += adjopcode / DBG_LINE_RANGE;
+                    line += DBG_LINE_BASE + (adjopcode % DBG_LINE_RANGE);
+
+                    positions.add(new PositionEntry(address, line));
+                break;
+
+            }
+        }
+    }
+
+    /**
+     * Validates an encoded debug info stream against data used to encode it,
+     * throwing an exception if they do not match. Used to validate the
+     * encoder.
+     *
+     * @param info encoded debug info
+     * @param file {@code non-null;} file to refer to during decoding
+     * @param ref {@code non-null;} method whose info is being decoded
+     * @param code {@code non-null;} original code object that was encoded
+     * @param isStatic whether the method is static
+     */
+    public static void validateEncode(byte[] info, DexFile file,
+            CstMethodRef ref, DalvCode code, boolean isStatic) {
+        PositionList pl = code.getPositions();
+        LocalList ll = code.getLocals();
+        DalvInsnList insns = code.getInsns();
+        int codeSize = insns.codeSize();
+        int countRegisters = insns.getRegistersSize();
+
+        try {
+            validateEncode0(info, codeSize, countRegisters,
+                    isStatic, ref, file, pl, ll);
+        } catch (RuntimeException ex) {
+            System.err.println("instructions:");
+            insns.debugPrint(System.err, "  ", true);
+            System.err.println("local list:");
+            ll.debugPrint(System.err, "  ");
+            throw ExceptionWithContext.withContext(ex,
+                    "while processing " + ref.toHuman());
+        }
+    }
+
+    private static void validateEncode0(byte[] info, int codeSize,
+            int countRegisters, boolean isStatic, CstMethodRef ref,
+            DexFile file, PositionList pl, LocalList ll) {
+        DebugInfoDecoder decoder
+                = new DebugInfoDecoder(info, codeSize, countRegisters,
+                    isStatic, ref, file);
+
+        decoder.decode();
+
+        /*
+         * Go through the decoded position entries, matching up
+         * with original entries.
+         */
+
+        List<PositionEntry> decodedEntries = decoder.getPositionList();
+
+        if (decodedEntries.size() != pl.size()) {
+            throw new RuntimeException(
+                    "Decoded positions table not same size was "
+                    + decodedEntries.size() + " expected " + pl.size());
+        }
+
+        for (PositionEntry entry : decodedEntries) {
+            boolean found = false;
+            for (int i = pl.size() - 1; i >= 0; i--) {
+                PositionList.Entry ple = pl.get(i);
+
+                if (entry.line == ple.getPosition().getLine()
+                        && entry.address == ple.getAddress()) {
+                    found = true;
+                    break;
+                }
+            }
+
+            if (!found) {
+                throw new RuntimeException ("Could not match position entry: "
+                        + entry.address + ", " + entry.line);
+            }
+        }
+
+        /*
+         * Go through the original local list, in order, matching up
+         * with decoded entries.
+         */
+
+        List<LocalEntry> decodedLocals = decoder.getLocals();
+        int thisStringIdx = decoder.thisStringIdx;
+        int decodedSz = decodedLocals.size();
+        int paramBase = decoder.getParamBase();
+
+        /*
+         * Preflight to fill in any parameters that were skipped in
+         * the prologue (including an implied "this") but then
+         * identified by full signature.
+         */
+        for (int i = 0; i < decodedSz; i++) {
+            LocalEntry entry = decodedLocals.get(i);
+            int idx = entry.nameIndex;
+
+            if ((idx < 0) || (idx == thisStringIdx)) {
+                for (int j = i + 1; j < decodedSz; j++) {
+                    LocalEntry e2 = decodedLocals.get(j);
+                    if (e2.address != 0) {
+                        break;
+                    }
+                    if ((entry.reg == e2.reg) && e2.isStart) {
+                        decodedLocals.set(i, e2);
+                        decodedLocals.remove(j);
+                        decodedSz--;
+                        break;
+                    }
+                }
+            }
+        }
+
+        int origSz = ll.size();
+        int decodeAt = 0;
+        boolean problem = false;
+
+        for (int i = 0; i < origSz; i++) {
+            LocalList.Entry origEntry = ll.get(i);
+
+            if (origEntry.getDisposition()
+                    == LocalList.Disposition.END_REPLACED) {
+                /*
+                 * The encoded list doesn't represent replacements, so
+                 * ignore them for the sake of comparison.
+                 */
+                continue;
+            }
+
+            LocalEntry decodedEntry;
+
+            do {
+                decodedEntry = decodedLocals.get(decodeAt);
+                if (decodedEntry.nameIndex >= 0) {
+                    break;
+                }
+                /*
+                 * A negative name index means this is an anonymous
+                 * parameter, and we shouldn't expect to see it in the
+                 * original list. So, skip it.
+                 */
+                decodeAt++;
+            } while (decodeAt < decodedSz);
+
+            int decodedAddress = decodedEntry.address;
+
+            if (decodedEntry.reg != origEntry.getRegister()) {
+                System.err.println("local register mismatch at orig " + i +
+                        " / decoded " + decodeAt);
+                problem = true;
+                break;
+            }
+
+            if (decodedEntry.isStart != origEntry.isStart()) {
+                System.err.println("local start/end mismatch at orig " + i +
+                        " / decoded " + decodeAt);
+                problem = true;
+                break;
+            }
+
+            /*
+             * The secondary check here accounts for the fact that a
+             * parameter might not be marked as starting at 0 in the
+             * original list.
+             */
+            if ((decodedAddress != origEntry.getAddress())
+                    && !((decodedAddress == 0)
+                            && (decodedEntry.reg >= paramBase))) {
+                System.err.println("local address mismatch at orig " + i +
+                        " / decoded " + decodeAt);
+                problem = true;
+                break;
+            }
+
+            decodeAt++;
+        }
+
+        if (problem) {
+            System.err.println("decoded locals:");
+            for (LocalEntry e : decodedLocals) {
+                System.err.println("  " + e);
+            }
+            throw new RuntimeException("local table problem");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/DebugInfoEncoder.java b/dx/src/com/android/dx/dex/file/DebugInfoEncoder.java
new file mode 100644
index 0000000..352c1f4
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/DebugInfoEncoder.java
@@ -0,0 +1,932 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.dex.code.LocalList;
+import com.android.dx.dex.code.PositionList;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_ADVANCE_LINE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_ADVANCE_PC;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_END_LOCAL;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_END_SEQUENCE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_FIRST_SPECIAL;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_LINE_BASE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_LINE_RANGE;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_RESTART_LOCAL;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_SET_PROLOGUE_END;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_START_LOCAL;
+import static com.android.dx.dex.file.DebugInfoConstants.DBG_START_LOCAL_EXTENDED;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.ByteArrayAnnotatedOutput;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Collections;
+import java.util.Comparator;
+
+/**
+ * An encoder for the dex debug info state machine format. The format
+ * for each method enrty is as follows:
+ * <ol>
+ * <li> signed LEB128: initial value for line register.
+ * <li> n instances of signed LEB128: string indicies (offset by 1)
+ * for each method argument in left-to-right order
+ * with {@code this} excluded. A value of '0' indicates "no name"
+ * <li> A sequence of special or normal opcodes as defined in
+ * {@code DebugInfoConstants}.
+ * <li> A single terminating {@code OP_END_SEQUENCE}
+ * </ol>
+ */
+public final class DebugInfoEncoder {
+    private static final boolean DEBUG = false;
+
+    /** {@code null-ok;} positions (line numbers) to encode */
+    private final PositionList positions;
+
+    /** {@code null-ok;} local variables to encode */
+    private final LocalList locals;
+
+    private final ByteArrayAnnotatedOutput output;
+    private final DexFile file;
+    private final int codeSize;
+    private final int regSize;
+
+    private final Prototype desc;
+    private final boolean isStatic;
+
+    /** current encoding state: bytecode address */
+    private int address = 0;
+
+    /** current encoding state: line number */
+    private int line = 1;
+
+    /**
+     * if non-null: the output to write annotations to. No normal
+     * output is written to this.
+     */
+    private AnnotatedOutput annotateTo;
+
+    /** if non-null: another possible output for annotations */
+    private PrintWriter debugPrint;
+
+    /** if non-null: the prefix for each annotation or debugPrint line */
+    private String prefix;
+
+    /** true if output should be consumed during annotation */
+    private boolean shouldConsume;
+
+    /** indexed by register; last local alive in register */
+    private final LocalList.Entry[] lastEntryForReg;
+
+    /**
+     * Creates an instance.
+     *
+     * @param positions {@code null-ok;} positions (line numbers) to encode
+     * @param locals {@code null-ok;} local variables to encode
+     * @param file {@code null-ok;} may only be {@code null} if simply using
+     * this class to do a debug print
+     * @param codeSize
+     * @param regSize
+     * @param isStatic
+     * @param ref
+     */
+    public DebugInfoEncoder(PositionList positions, LocalList locals,
+            DexFile file, int codeSize, int regSize,
+            boolean isStatic, CstMethodRef ref) {
+        this.positions = positions;
+        this.locals = locals;
+        this.file = file;
+        this.desc = ref.getPrototype();
+        this.isStatic = isStatic;
+        this.codeSize = codeSize;
+        this.regSize = regSize;
+
+        output = new ByteArrayAnnotatedOutput();
+        lastEntryForReg = new LocalList.Entry[regSize];
+    }
+
+    /**
+     * Annotates or writes a message to the {@code debugPrint} writer
+     * if applicable.
+     *
+     * @param length the number of bytes associated with this message
+     * @param message the message itself
+     */
+    private void annotate(int length, String message) {
+        if (prefix != null) {
+            message = prefix + message;
+        }
+
+        if (annotateTo != null) {
+            annotateTo.annotate(shouldConsume ? length : 0, message);
+        }
+
+        if (debugPrint != null) {
+            debugPrint.println(message);
+        }
+    }
+
+    /**
+     * Converts this (PositionList, LocalList) pair into a state machine
+     * sequence.
+     *
+     * @return {@code non-null;} encoded byte sequence without padding and
+     * terminated with a {@code 0x00} byte
+     */
+    public byte[] convert() {
+        try {
+            byte[] ret;
+            ret = convert0();
+
+            if (DEBUG) {
+                for (int i = 0 ; i < ret.length; i++) {
+                    System.err.printf("byte %02x\n", (0xff & ret[i]));
+                }
+            }
+
+            return ret;
+        } catch (IOException ex) {
+            throw ExceptionWithContext
+                    .withContext(ex, "...while encoding debug info");
+        }
+    }
+
+    /**
+     * Converts and produces annotations on a stream. Does not write
+     * actual bits to the {@code AnnotatedOutput}.
+     *
+     * @param prefix {@code null-ok;} prefix to attach to each line of output
+     * @param debugPrint {@code null-ok;} if specified, an alternate output for
+     * annotations
+     * @param out {@code null-ok;} if specified, where annotations should go
+     * @param consume whether to claim to have consumed output for
+     * {@code out}
+     * @return {@code non-null;} encoded output
+     */
+    public byte[] convertAndAnnotate(String prefix, PrintWriter debugPrint,
+            AnnotatedOutput out, boolean consume) {
+        this.prefix = prefix;
+        this.debugPrint = debugPrint;
+        annotateTo = out;
+        shouldConsume = consume;
+
+        byte[] result = convert();
+
+        return result;
+    }
+
+    private byte[] convert0() throws IOException {
+        ArrayList<PositionList.Entry> sortedPositions = buildSortedPositions();
+        ArrayList<LocalList.Entry> methodArgs = extractMethodArguments();
+
+        emitHeader(sortedPositions, methodArgs);
+
+        // TODO: Make this mark be the actual prologue end.
+        output.writeByte(DBG_SET_PROLOGUE_END);
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(1, String.format("%04x: prologue end",address));
+        }
+
+        int positionsSz = sortedPositions.size();
+        int localsSz = locals.size();
+
+        // Current index in sortedPositions
+        int curPositionIdx = 0;
+        // Current index in locals
+        int curLocalIdx = 0;
+
+        for (;;) {
+            /*
+             * Emit any information for the current address.
+             */
+
+            curLocalIdx = emitLocalsAtAddress(curLocalIdx);
+            curPositionIdx =
+                emitPositionsAtAddress(curPositionIdx, sortedPositions);
+
+            /*
+             * Figure out what the next important address is.
+             */
+
+            int nextAddrL = Integer.MAX_VALUE; // local variable
+            int nextAddrP = Integer.MAX_VALUE; // position (line number)
+
+            if (curLocalIdx < localsSz) {
+                nextAddrL = locals.get(curLocalIdx).getAddress();
+            }
+
+            if (curPositionIdx < positionsSz) {
+                nextAddrP = sortedPositions.get(curPositionIdx).getAddress();
+            }
+
+            int next = Math.min(nextAddrP, nextAddrL);
+
+            // No next important address == done.
+            if (next == Integer.MAX_VALUE) {
+                break;
+            }
+
+            /*
+             * If the only work remaining are local ends at the end of the
+             * block, stop here. Those are implied anyway.
+             */
+            if (next == codeSize
+                    && nextAddrL == Integer.MAX_VALUE
+                    && nextAddrP == Integer.MAX_VALUE) {
+                break;
+            }
+
+            if (next == nextAddrP) {
+                // Combined advance PC + position entry
+                emitPosition(sortedPositions.get(curPositionIdx++));
+            } else {
+                emitAdvancePc(next - address);
+            }
+        }
+
+        emitEndSequence();
+
+        return output.toByteArray();
+    }
+
+    /**
+     * Emits all local variable activity that occurs at the current
+     * {@link #address} starting at the given index into {@code
+     * locals} and including all subsequent activity at the same
+     * address.
+     *
+     * @param curLocalIdx Current index in locals
+     * @return new value for {@code curLocalIdx}
+     * @throws IOException
+     */
+    private int emitLocalsAtAddress(int curLocalIdx)
+            throws IOException {
+        int sz = locals.size();
+
+        // TODO: Don't emit ends implied by starts.
+
+        while ((curLocalIdx < sz)
+                && (locals.get(curLocalIdx).getAddress() == address)) {
+            LocalList.Entry entry = locals.get(curLocalIdx++);
+            int reg = entry.getRegister();
+            LocalList.Entry prevEntry = lastEntryForReg[reg];
+
+            if (entry == prevEntry) {
+                /*
+                 * Here we ignore locals entries for parameters,
+                 * which have already been represented and placed in the
+                 * lastEntryForReg array.
+                 */
+                continue;
+            }
+
+            // At this point we have a new entry one way or another.
+            lastEntryForReg[reg] = entry;
+
+            if (entry.isStart()) {
+                if ((prevEntry != null) && entry.matches(prevEntry)) {
+                    /*
+                     * The previous local in this register has the same
+                     * name and type as the one being introduced now, so
+                     * use the more efficient "restart" form.
+                     */
+                    if (prevEntry.isStart()) {
+                        /*
+                         * We should never be handed a start when a
+                         * a matching local is already active.
+                         */
+                        throw new RuntimeException("shouldn't happen");
+                    }
+                    emitLocalRestart(entry);
+                } else {
+                    emitLocalStart(entry);
+                }
+            } else {
+                /*
+                 * Only emit a local end if it is *not* due to a direct
+                 * replacement. Direct replacements imply an end of the
+                 * previous local in the same register.
+                 *
+                 * TODO: Make sure the runtime can deal with implied
+                 * local ends from category-2 interactions, and when so,
+                 * also stop emitting local ends for those cases.
+                 */
+                if (entry.getDisposition()
+                        != LocalList.Disposition.END_REPLACED) {
+                    emitLocalEnd(entry);
+                }
+            }
+        }
+
+        return curLocalIdx;
+    }
+
+    /**
+     * Emits all positions that occur at the current {@code address}
+     *
+     * @param curPositionIdx Current index in sortedPositions
+     * @param sortedPositions positions, sorted by ascending address
+     * @return new value for {@code curPositionIdx}
+     * @throws IOException
+     */
+    private int emitPositionsAtAddress(int curPositionIdx,
+            ArrayList<PositionList.Entry> sortedPositions)
+            throws IOException {
+        int positionsSz = sortedPositions.size();
+        while ((curPositionIdx < positionsSz)
+                && (sortedPositions.get(curPositionIdx).getAddress()
+                        == address)) {
+            emitPosition(sortedPositions.get(curPositionIdx++));
+        }
+        return curPositionIdx;
+    }
+
+    /**
+     * Emits the header sequence, which consists of LEB128-encoded initial
+     * line number and string indicies for names of all non-"this" arguments.
+     *
+     * @param sortedPositions positions, sorted by ascending address
+     * @param methodArgs local list entries for method argumens arguments,
+     * in left-to-right order omitting "this"
+     * @throws IOException
+     */
+    private void emitHeader(ArrayList<PositionList.Entry> sortedPositions,
+            ArrayList<LocalList.Entry> methodArgs) throws IOException {
+        boolean annotate = (annotateTo != null) || (debugPrint != null);
+        int mark = output.getCursor();
+
+        // Start by initializing the line number register.
+        if (sortedPositions.size() > 0) {
+            PositionList.Entry entry = sortedPositions.get(0);
+            line = entry.getPosition().getLine();
+        }
+        output.writeUleb128(line);
+
+        if (annotate) {
+            annotate(output.getCursor() - mark, "line_start: " + line);
+        }
+
+        int curParam = getParamBase();
+        // paramTypes will not include 'this'
+        StdTypeList paramTypes = desc.getParameterTypes();
+        int szParamTypes = paramTypes.size();
+
+        /*
+         * Initialize lastEntryForReg to have an initial
+         * entry for the 'this' pointer.
+         */
+        if (!isStatic) {
+            for (LocalList.Entry arg : methodArgs) {
+                if (curParam == arg.getRegister()) {
+                    lastEntryForReg[curParam] = arg;
+                    break;
+                }
+            }
+            curParam++;
+        }
+
+        // Write out the number of parameter entries that will follow.
+        mark = output.getCursor();
+        output.writeUleb128(szParamTypes);
+
+        if (annotate) {
+            annotate(output.getCursor() - mark,
+                    String.format("parameters_size: %04x", szParamTypes));
+        }
+
+        /*
+         * Then emit the string indicies of all the method parameters.
+         * Note that 'this', if applicable, is excluded.
+         */
+        for (int i = 0; i < szParamTypes; i++) {
+            Type pt = paramTypes.get(i);
+            LocalList.Entry found = null;
+
+            mark = output.getCursor();
+
+            for (LocalList.Entry arg : methodArgs) {
+                if (curParam == arg.getRegister()) {
+                    found = arg;
+
+                    if (arg.getSignature() != null) {
+                        /*
+                         * Parameters with signatures will be re-emitted
+                         * in complete as LOCAL_START_EXTENDED's below.
+                         */
+                        emitStringIndex(null);
+                    } else {
+                        emitStringIndex(arg.getName());
+                    }
+                    lastEntryForReg[curParam] = arg;
+
+                    break;
+                }
+            }
+
+            if (found == null) {
+                /*
+                 * Emit a null symbol for "unnamed." This is common
+                 * for, e.g., synthesized methods and inner-class
+                 * this$0 arguments.
+                 */
+                emitStringIndex(null);
+            }
+
+            if (annotate) {
+                String parameterName
+                        = (found == null || found.getSignature() != null)
+                                ? "<unnamed>" : found.getName().toHuman();
+                annotate(output.getCursor() - mark,
+                        "parameter " + parameterName + " "
+                                + RegisterSpec.PREFIX + curParam);
+            }
+
+            curParam += pt.getCategory();
+        }
+
+        /*
+         * If anything emitted above has a type signature, emit it again as
+         * a LOCAL_RESTART_EXTENDED
+         */
+
+        for (LocalList.Entry arg : lastEntryForReg) {
+            if (arg == null) {
+                continue;
+            }
+
+            CstString signature = arg.getSignature();
+
+            if (signature != null) {
+                emitLocalStartExtended(arg);
+            }
+        }
+    }
+
+    /**
+     * Builds a list of position entries, sorted by ascending address.
+     *
+     * @return A sorted positions list
+     */
+    private ArrayList<PositionList.Entry> buildSortedPositions() {
+        int sz = (positions == null) ? 0 : positions.size();
+        ArrayList<PositionList.Entry> result = new ArrayList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            result.add(positions.get(i));
+        }
+
+        // Sort ascending by address.
+        Collections.sort (result, new Comparator<PositionList.Entry>() {
+            @Override
+            public int compare (PositionList.Entry a, PositionList.Entry b) {
+                return a.getAddress() - b.getAddress();
+            }
+
+            @Override
+            public boolean equals (Object obj) {
+               return obj == this;
+            }
+        });
+        return result;
+    }
+
+    /**
+     * Gets the register that begins the method's parameter range (including
+     * the 'this' parameter for non-static methods). The range continues until
+     * {@code regSize}
+     *
+     * @return register as noted above
+     */
+    private int getParamBase() {
+        return regSize
+                - desc.getParameterTypes().getWordCount() - (isStatic? 0 : 1);
+    }
+
+    /**
+     * Extracts method arguments from a locals list. These will be collected
+     * from the input list and sorted by ascending register in the
+     * returned list.
+     *
+     * @return list of non-{@code this} method argument locals,
+     * sorted by ascending register
+     */
+    private ArrayList<LocalList.Entry> extractMethodArguments() {
+        ArrayList<LocalList.Entry> result
+                = new ArrayList(desc.getParameterTypes().size());
+        int argBase = getParamBase();
+        BitSet seen = new BitSet(regSize - argBase);
+        int sz = locals.size();
+
+        for (int i = 0; i < sz; i++) {
+            LocalList.Entry e = locals.get(i);
+            int reg = e.getRegister();
+
+            if (reg < argBase) {
+                continue;
+            }
+
+            // only the lowest-start-address entry is included.
+            if (seen.get(reg - argBase)) {
+                continue;
+            }
+
+            seen.set(reg - argBase);
+            result.add(e);
+        }
+
+        // Sort by ascending register.
+        Collections.sort(result, new Comparator<LocalList.Entry>() {
+            @Override
+            public int compare(LocalList.Entry a, LocalList.Entry b) {
+                return a.getRegister() - b.getRegister();
+            }
+
+            @Override
+            public boolean equals(Object obj) {
+               return obj == this;
+            }
+        });
+
+        return result;
+    }
+
+    /**
+     * Returns a string representation of this LocalList entry that is
+     * appropriate for emitting as an annotation.
+     *
+     * @param e {@code non-null;} entry
+     * @return {@code non-null;} annotation string
+     */
+    private String entryAnnotationString(LocalList.Entry e) {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append(RegisterSpec.PREFIX);
+        sb.append(e.getRegister());
+        sb.append(' ');
+
+        CstString name = e.getName();
+        if (name == null) {
+            sb.append("null");
+        } else {
+            sb.append(name.toHuman());
+        }
+        sb.append(' ');
+
+        CstType type = e.getType();
+        if (type == null) {
+            sb.append("null");
+        } else {
+            sb.append(type.toHuman());
+        }
+
+        CstString signature = e.getSignature();
+
+        if (signature != null) {
+            sb.append(' ');
+            sb.append(signature.toHuman());
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Emits a {@link DebugInfoConstants#DBG_RESTART_LOCAL DBG_RESTART_LOCAL}
+     * sequence.
+     *
+     * @param entry entry associated with this restart
+     * @throws IOException
+     */
+    private void emitLocalRestart(LocalList.Entry entry)
+            throws IOException {
+
+        int mark = output.getCursor();
+
+        output.writeByte(DBG_RESTART_LOCAL);
+        emitUnsignedLeb128(entry.getRegister());
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(output.getCursor() - mark,
+                    String.format("%04x: +local restart %s",
+                            address, entryAnnotationString(entry)));
+        }
+
+        if (DEBUG) {
+            System.err.println("emit local restart");
+        }
+    }
+
+    /**
+     * Emits a string index as an unsigned LEB128. The actual value written
+     * is shifted by 1, so that the '0' value is reserved for "null". The
+     * null symbol is used in some cases by the parameter name list
+     * at the beginning of the sequence.
+     *
+     * @param string {@code null-ok;} string to emit
+     * @throws IOException
+     */
+    private void emitStringIndex(CstString string) throws IOException {
+        if ((string == null) || (file == null)) {
+            output.writeUleb128(0);
+        } else {
+            output.writeUleb128(
+                    1 + file.getStringIds().indexOf(string));
+        }
+
+        if (DEBUG) {
+            System.err.printf("Emit string %s\n",
+                    string == null ? "<null>" : string.toQuoted());
+        }
+    }
+
+    /**
+     * Emits a type index as an unsigned LEB128. The actual value written
+     * is shifted by 1, so that the '0' value is reserved for "null".
+     *
+     * @param type {@code null-ok;} type to emit
+     * @throws IOException
+     */
+    private void emitTypeIndex(CstType type) throws IOException {
+        if ((type == null) || (file == null)) {
+            output.writeUleb128(0);
+        } else {
+            output.writeUleb128(
+                    1 + file.getTypeIds().indexOf(type));
+        }
+
+        if (DEBUG) {
+            System.err.printf("Emit type %s\n",
+                    type == null ? "<null>" : type.toHuman());
+        }
+    }
+
+    /**
+     * Emits a {@link DebugInfoConstants#DBG_START_LOCAL DBG_START_LOCAL} or
+     * {@link DebugInfoConstants#DBG_START_LOCAL_EXTENDED
+     * DBG_START_LOCAL_EXTENDED} sequence.
+     *
+     * @param entry entry to emit
+     * @throws IOException
+     */
+    private void emitLocalStart(LocalList.Entry entry)
+        throws IOException {
+
+        if (entry.getSignature() != null) {
+            emitLocalStartExtended(entry);
+            return;
+        }
+
+        int mark = output.getCursor();
+
+        output.writeByte(DBG_START_LOCAL);
+
+        emitUnsignedLeb128(entry.getRegister());
+        emitStringIndex(entry.getName());
+        emitTypeIndex(entry.getType());
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(output.getCursor() - mark,
+                    String.format("%04x: +local %s", address,
+                            entryAnnotationString(entry)));
+        }
+
+        if (DEBUG) {
+            System.err.println("emit local start");
+        }
+    }
+
+    /**
+     * Emits a {@link DebugInfoConstants#DBG_START_LOCAL_EXTENDED
+     * DBG_START_LOCAL_EXTENDED} sequence.
+     *
+     * @param entry entry to emit
+     * @throws IOException
+     */
+    private void emitLocalStartExtended(LocalList.Entry entry)
+        throws IOException {
+
+        int mark = output.getCursor();
+
+        output.writeByte(DBG_START_LOCAL_EXTENDED);
+
+        emitUnsignedLeb128(entry.getRegister());
+        emitStringIndex(entry.getName());
+        emitTypeIndex(entry.getType());
+        emitStringIndex(entry.getSignature());
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(output.getCursor() - mark,
+                    String.format("%04x: +localx %s", address,
+                            entryAnnotationString(entry)));
+        }
+
+        if (DEBUG) {
+            System.err.println("emit local start");
+        }
+    }
+
+    /**
+     * Emits a {@link DebugInfoConstants#DBG_END_LOCAL DBG_END_LOCAL} sequence.
+     *
+     * @param entry {@code entry non-null;} entry associated with end.
+     * @throws IOException
+     */
+    private void emitLocalEnd(LocalList.Entry entry)
+            throws IOException {
+
+        int mark = output.getCursor();
+
+        output.writeByte(DBG_END_LOCAL);
+        output.writeUleb128(entry.getRegister());
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(output.getCursor() - mark,
+                    String.format("%04x: -local %s", address,
+                            entryAnnotationString(entry)));
+        }
+
+        if (DEBUG) {
+            System.err.println("emit local end");
+        }
+    }
+
+    /**
+     * Emits the necessary byte sequences to emit the given position table
+     * entry. This will typically be a single special opcode, although
+     * it may also require DBG_ADVANCE_PC or DBG_ADVANCE_LINE.
+     *
+     * @param entry position entry to emit.
+     * @throws IOException
+     */
+    private void emitPosition(PositionList.Entry entry)
+            throws IOException {
+
+        SourcePosition pos = entry.getPosition();
+        int newLine = pos.getLine();
+        int newAddress = entry.getAddress();
+
+        int opcode;
+
+        int deltaLines = newLine - line;
+        int deltaAddress = newAddress - address;
+
+        if (deltaAddress < 0) {
+            throw new RuntimeException(
+                    "Position entries must be in ascending address order");
+        }
+
+        if ((deltaLines < DBG_LINE_BASE)
+                || (deltaLines > (DBG_LINE_BASE + DBG_LINE_RANGE -1))) {
+            emitAdvanceLine(deltaLines);
+            deltaLines = 0;
+        }
+
+        opcode = computeOpcode (deltaLines, deltaAddress);
+
+        if ((opcode & ~0xff) > 0) {
+            emitAdvancePc(deltaAddress);
+            deltaAddress = 0;
+            opcode = computeOpcode (deltaLines, deltaAddress);
+
+            if ((opcode & ~0xff) > 0) {
+                emitAdvanceLine(deltaLines);
+                deltaLines = 0;
+                opcode = computeOpcode (deltaLines, deltaAddress);
+            }
+        }
+
+        output.writeByte(opcode);
+
+        line += deltaLines;
+        address += deltaAddress;
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(1,
+                    String.format("%04x: line %d", address, line));
+        }
+    }
+
+    /**
+     * Computes a special opcode that will encode the given position change.
+     * If the return value is > 0xff, then the request cannot be fulfilled.
+     * Essentially the same as described in "DWARF Debugging Format Version 3"
+     * section 6.2.5.1.
+     *
+     * @param deltaLines {@code >= DBG_LINE_BASE, <= DBG_LINE_BASE +
+     * DBG_LINE_RANGE;} the line change to encode
+     * @param deltaAddress {@code >= 0;} the address change to encode
+     * @return {@code <= 0xff} if in range, otherwise parameters are out
+     * of range
+     */
+    private static int computeOpcode(int deltaLines, int deltaAddress) {
+        if (deltaLines < DBG_LINE_BASE
+                || deltaLines > (DBG_LINE_BASE + DBG_LINE_RANGE -1)) {
+
+            throw new RuntimeException("Parameter out of range");
+        }
+
+        return (deltaLines - DBG_LINE_BASE)
+            + (DBG_LINE_RANGE * deltaAddress) + DBG_FIRST_SPECIAL;
+    }
+
+    /**
+     * Emits an {@link DebugInfoConstants#DBG_ADVANCE_LINE DBG_ADVANCE_LINE}
+     * sequence.
+     *
+     * @param deltaLines amount to change line number register by
+     * @throws IOException
+     */
+    private void emitAdvanceLine(int deltaLines) throws IOException {
+        int mark = output.getCursor();
+
+        output.writeByte(DBG_ADVANCE_LINE);
+        output.writeSleb128(deltaLines);
+        line += deltaLines;
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(output.getCursor() - mark,
+                    String.format("line = %d", line));
+        }
+
+        if (DEBUG) {
+            System.err.printf("Emitting advance_line for %d\n", deltaLines);
+        }
+    }
+
+    /**
+     * Emits an  {@link DebugInfoConstants#DBG_ADVANCE_PC DBG_ADVANCE_PC}
+     * sequence.
+     *
+     * @param deltaAddress {@code >= 0;} amount to change program counter by
+     * @throws IOException
+     */
+    private void emitAdvancePc(int deltaAddress) throws IOException {
+        int mark = output.getCursor();
+
+        output.writeByte(DBG_ADVANCE_PC);
+        output.writeUleb128(deltaAddress);
+        address += deltaAddress;
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(output.getCursor() - mark,
+                    String.format("%04x: advance pc", address));
+        }
+
+        if (DEBUG) {
+            System.err.printf("Emitting advance_pc for %d\n", deltaAddress);
+        }
+    }
+
+    /**
+     * Emits an unsigned LEB128 value.
+     *
+     * @param n {@code >= 0;} value to emit. Note that, although this can
+     * represent integers larger than Integer.MAX_VALUE, we currently don't
+     * allow that.
+     * @throws IOException
+     */
+    private void emitUnsignedLeb128(int n) throws IOException {
+        // We'll never need the top end of the unsigned range anyway.
+        if (n < 0) {
+            throw new RuntimeException(
+                    "Signed value where unsigned required: " + n);
+        }
+
+        output.writeUleb128(n);
+    }
+
+    /**
+     * Emits the {@link DebugInfoConstants#DBG_END_SEQUENCE DBG_END_SEQUENCE}
+     * bytecode.
+     */
+    private void emitEndSequence() {
+        output.writeByte(DBG_END_SEQUENCE);
+
+        if (annotateTo != null || debugPrint != null) {
+            annotate(1, "end sequence");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/DebugInfoItem.java b/dx/src/com/android/dx/dex/file/DebugInfoItem.java
new file mode 100644
index 0000000..2fd864a
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/DebugInfoItem.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.dex.code.DalvCode;
+import com.android.dx.dex.code.DalvInsnList;
+import com.android.dx.dex.code.LocalList;
+import com.android.dx.dex.code.PositionList;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.util.AnnotatedOutput;
+import java.io.PrintWriter;
+
+public class DebugInfoItem extends OffsettedItem {
+    /** the required alignment for instances of this class */
+    private static final int ALIGNMENT = 1;
+
+    private static final boolean ENABLE_ENCODER_SELF_CHECK = false;
+
+    /** {@code non-null;} the code this item represents */
+    private final DalvCode code;
+
+    private byte[] encoded;
+
+    private final boolean isStatic;
+    private final CstMethodRef ref;
+
+    public DebugInfoItem(DalvCode code, boolean isStatic, CstMethodRef ref) {
+        // We don't know the write size yet.
+        super (ALIGNMENT, -1);
+
+        if (code == null) {
+            throw new NullPointerException("code == null");
+        }
+
+        this.code = code;
+        this.isStatic = isStatic;
+        this.ref = ref;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_DEBUG_INFO_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        // No contents to add.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        // Encode the data and note the size.
+
+        try {
+            encoded = encode(addedTo.getFile(), null, null, null, false);
+            setWriteSize(encoded.length);
+        } catch (RuntimeException ex) {
+            throw ExceptionWithContext.withContext(ex,
+                    "...while placing debug info for " + ref.toHuman());
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        throw new RuntimeException("unsupported");
+    }
+
+    /**
+     * Writes annotations for the elements of this list, as
+     * zero-length. This is meant to be used for dumping this instance
+     * directly after a code dump (with the real local list actually
+     * existing elsewhere in the output).
+     *
+     * @param file {@code non-null;} the file to use for referencing other sections
+     * @param out {@code non-null;} where to annotate to
+     * @param prefix {@code null-ok;} prefix to attach to each line of output
+     */
+    public void annotateTo(DexFile file, AnnotatedOutput out, String prefix) {
+        encode(file, prefix, null, out, false);
+    }
+
+    /**
+     * Does a human-friendly dump of this instance.
+     *
+     * @param out {@code non-null;} where to dump
+     * @param prefix {@code non-null;} prefix to attach to each line of output
+     */
+    public void debugPrint(PrintWriter out, String prefix) {
+        encode(null, prefix, out, null, false);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        if (out.annotates()) {
+            /*
+             * Re-run the encoder to generate the annotations,
+             * but write the bits from the original encode
+             */
+
+            out.annotate(offsetString() + " debug info");
+            encode(file, null, null, out, true);
+        }
+
+        out.write(encoded);
+    }
+
+    /**
+     * Performs debug info encoding.
+     *
+     * @param file {@code null-ok;} file to refer to during encoding
+     * @param prefix {@code null-ok;} prefix to attach to each line of output
+     * @param debugPrint {@code null-ok;} if specified, an alternate output for
+     * annotations
+     * @param out {@code null-ok;} if specified, where annotations should go
+     * @param consume whether to claim to have consumed output for
+     * {@code out}
+     * @return {@code non-null;} the encoded array
+     */
+    private byte[] encode(DexFile file, String prefix, PrintWriter debugPrint,
+            AnnotatedOutput out, boolean consume) {
+        byte[] result = encode0(file, prefix, debugPrint, out, consume);
+
+        if (ENABLE_ENCODER_SELF_CHECK && (file != null)) {
+            try {
+                DebugInfoDecoder.validateEncode(result, file, ref, code,
+                        isStatic);
+            } catch (RuntimeException ex) {
+                // Reconvert, annotating to System.err.
+                encode0(file, "", new PrintWriter(System.err, true), null,
+                        false);
+                throw ex;
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Helper for {@link #encode} to do most of the work.
+     *
+     * @param file {@code null-ok;} file to refer to during encoding
+     * @param prefix {@code null-ok;} prefix to attach to each line of output
+     * @param debugPrint {@code null-ok;} if specified, an alternate output for
+     * annotations
+     * @param out {@code null-ok;} if specified, where annotations should go
+     * @param consume whether to claim to have consumed output for
+     * {@code out}
+     * @return {@code non-null;} the encoded array
+     */
+    private byte[] encode0(DexFile file, String prefix, PrintWriter debugPrint,
+            AnnotatedOutput out, boolean consume) {
+        PositionList positions = code.getPositions();
+        LocalList locals = code.getLocals();
+        DalvInsnList insns = code.getInsns();
+        int codeSize = insns.codeSize();
+        int regSize = insns.getRegistersSize();
+
+        DebugInfoEncoder encoder =
+            new DebugInfoEncoder(positions, locals,
+                    file, codeSize, regSize, isStatic, ref);
+
+        byte[] result;
+
+        if ((debugPrint == null) && (out == null)) {
+            result = encoder.convert();
+        } else {
+            result = encoder.convertAndAnnotate(prefix, debugPrint, out,
+                    consume);
+        }
+
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/DexFile.java b/dx/src/com/android/dx/dex/file/DexFile.java
new file mode 100644
index 0000000..7df046c
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/DexFile.java
@@ -0,0 +1,805 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.DexFormat;
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.dex.DexOptions;
+import com.android.dx.dex.file.MixedItemSection.SortType;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstBaseMethodRef;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.rop.cst.CstEnumRef;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.ByteArrayAnnotatedOutput;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.security.DigestException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.zip.Adler32;
+
+/**
+ * Representation of an entire {@code .dex} (Dalvik EXecutable)
+ * file, which itself consists of a set of Dalvik classes.
+ */
+public final class DexFile {
+    /** options controlling the creation of the file */
+    private final DexOptions dexOptions;
+
+    /** {@code non-null;} word data section */
+    private final MixedItemSection wordData;
+
+    /**
+     * {@code non-null;} type lists section. This is word data, but separating
+     * it from {@link #wordData} helps break what would otherwise be a
+     * circular dependency between the that and {@link #protoIds}.
+     */
+    private final MixedItemSection typeLists;
+
+    /**
+     * {@code non-null;} map section. The map needs to be in a section by itself
+     * for the self-reference mechanics to work in a reasonably
+     * straightforward way. See {@link MapItem#addMap} for more detail.
+     */
+    private final MixedItemSection map;
+
+    /** {@code non-null;} string data section */
+    private final MixedItemSection stringData;
+
+    /** {@code non-null;} string identifiers section */
+    private final StringIdsSection stringIds;
+
+    /** {@code non-null;} type identifiers section */
+    private final TypeIdsSection typeIds;
+
+    /** {@code non-null;} prototype identifiers section */
+    private final ProtoIdsSection protoIds;
+
+    /** {@code non-null;} field identifiers section */
+    private final FieldIdsSection fieldIds;
+
+    /** {@code non-null;} method identifiers section */
+    private final MethodIdsSection methodIds;
+
+    /** {@code non-null;} class definitions section */
+    private final ClassDefsSection classDefs;
+
+    /** {@code non-null;} class data section */
+    private final MixedItemSection classData;
+
+    /** {@code null-ok;} call site identifiers section, only exists for SDK >= 26 */
+    private final CallSiteIdsSection callSiteIds;
+
+    /** {@code null-ok;} method handles section, only exists for SDK >= 26 */
+    private final MethodHandlesSection methodHandles;
+
+    /** {@code non-null;} byte data section */
+    private final MixedItemSection byteData;
+
+    /** {@code non-null;} file header */
+    private final HeaderSection header;
+
+    /**
+     * {@code non-null;} array of sections in the order they will appear in the
+     * final output file
+     */
+    private final Section[] sections;
+
+    /** {@code >= -1;} total file size or {@code -1} if unknown */
+    private int fileSize;
+
+    /** {@code >= 40;} maximum width of the file dump */
+    private int dumpWidth;
+
+    /**
+     * Constructs an instance. It is initially empty.
+     *
+     * @param dexOptions {@code non-null;} DEX file generations options to apply
+     */
+    public DexFile(final DexOptions dexOptions) {
+        this.dexOptions = dexOptions;
+
+        header = new HeaderSection(this);
+        typeLists = new MixedItemSection(null, this, 4, SortType.NONE);
+        wordData = new MixedItemSection("word_data", this, 4, SortType.TYPE);
+        stringData =
+            new MixedItemSection("string_data", this, 1, SortType.INSTANCE);
+        classData = new MixedItemSection(null, this, 1, SortType.NONE);
+        byteData = new MixedItemSection("byte_data", this, 1, SortType.TYPE);
+        stringIds = new StringIdsSection(this);
+        typeIds = new TypeIdsSection(this);
+        protoIds = new ProtoIdsSection(this);
+        fieldIds = new FieldIdsSection(this);
+        methodIds = new MethodIdsSection(this);
+        classDefs = new ClassDefsSection(this);
+        map = new MixedItemSection("map", this, 4, SortType.NONE);
+
+        /*
+         * Prepare the list of sections in the order they appear in
+         * the final output.
+         */
+        if (dexOptions.apiIsSupported(DexFormat.API_METHOD_HANDLES)) {
+            /*
+             * Method handles and call sites only visible in DEX files
+             * from SDK version 26 onwards. Do not create or add sections unless
+             * version true. This is conditional to avoid churn in the dx tests
+             * that look at annotated output.
+             */
+            callSiteIds = new CallSiteIdsSection(this);
+            methodHandles = new MethodHandlesSection(this);
+
+            sections = new Section[] {
+                header, stringIds, typeIds, protoIds, fieldIds, methodIds, classDefs,
+                callSiteIds, methodHandles,
+                wordData, typeLists, stringData, byteData, classData, map };
+        } else {
+            callSiteIds = null;
+            methodHandles = null;
+
+            sections = new Section[] {
+                header, stringIds, typeIds, protoIds, fieldIds, methodIds, classDefs,
+                wordData, typeLists, stringData, byteData, classData, map };
+        }
+
+        fileSize = -1;
+        dumpWidth = 79;
+    }
+
+    /**
+     * Returns true if this dex doesn't contain any class defs.
+     */
+    public boolean isEmpty() {
+        return classDefs.items().isEmpty();
+    }
+
+    /**
+     * Gets the dex-creation options object.
+     */
+    public DexOptions getDexOptions() {
+        return dexOptions;
+    }
+
+    /**
+     * Adds a class to this instance. It is illegal to attempt to add more
+     * than one class with the same name.
+     *
+     * @param clazz {@code non-null;} the class to add
+     */
+    public void add(ClassDefItem clazz) {
+        classDefs.add(clazz);
+    }
+
+    /**
+     * Gets the class definition with the given name, if any.
+     *
+     * @param name {@code non-null;} the class name to look for
+     * @return {@code null-ok;} the class with the given name, or {@code null}
+     * if there is no such class
+     */
+    public ClassDefItem getClassOrNull(String name) {
+        try {
+            Type type = Type.internClassName(name);
+            return (ClassDefItem) classDefs.get(new CstType(type));
+        } catch (IllegalArgumentException ex) {
+            // Translate exception, per contract.
+            return null;
+        }
+    }
+
+    /**
+     * Writes the contents of this instance as either a binary or a
+     * human-readable form, or both.
+     *
+     * @param out {@code null-ok;} where to write to
+     * @param humanOut {@code null-ok;} where to write human-oriented output to
+     * @param verbose whether to be verbose when writing human-oriented output
+     */
+    public void writeTo(OutputStream out, Writer humanOut, boolean verbose)
+        throws IOException {
+        writeTo(out, null /* storage */, humanOut, verbose);
+    }
+
+
+    /**
+     * Writes the contents of this instance as either a binary or a
+     * human-readable form, or both.
+     *
+     * @param out {@code null-ok;} where to write to
+     * @param storage temporary storage for storing dexing.
+     * @param humanOut {@code null-ok;} where to write human-oriented output to
+     * @param verbose whether to be verbose when writing human-oriented output
+     */
+    public void writeTo(OutputStream out, Storage storage, Writer humanOut, boolean verbose)
+            throws IOException {
+        boolean annotate = (humanOut != null);
+        ByteArrayAnnotatedOutput result = toDex0(annotate, verbose, storage);
+
+        if (out != null) {
+            out.write(result.getArray());
+        }
+
+        if (annotate) {
+            result.writeAnnotationsTo(humanOut);
+        }
+    }
+
+    /**
+     * Writes the contents of this instance as a binary.
+     *
+     * @param storage temporary storage for storing dexing.
+     * @return the stored content.
+     */
+    public ByteArrayAnnotatedOutput writeTo(Storage storage) {
+        return toDex0(false, false, storage);
+    }
+
+
+    /**
+     * Returns the contents of this instance as a {@code .dex} file,
+     * in {@code byte[]} form.
+     *
+     * @param humanOut {@code null-ok;} where to write human-oriented output to
+     * @param verbose whether to be verbose when writing human-oriented output
+     * @return {@code non-null;} a {@code .dex} file for this instance
+     */
+    public byte[] toDex(Writer humanOut, boolean verbose)
+        throws IOException {
+        boolean annotate = (humanOut != null);
+        ByteArrayAnnotatedOutput result = toDex0(annotate, verbose, null);
+
+        if (annotate) {
+            result.writeAnnotationsTo(humanOut);
+        }
+
+        return result.getArray();
+    }
+
+    /**
+     * Sets the maximum width of the human-oriented dump of the instance.
+     *
+     * @param dumpWidth {@code >= 40;} the width
+     */
+    public void setDumpWidth(int dumpWidth) {
+        if (dumpWidth < 40) {
+            throw new IllegalArgumentException("dumpWidth < 40");
+        }
+
+        this.dumpWidth = dumpWidth;
+    }
+
+    /**
+     * Gets the total file size, if known.
+     *
+     * <p>This is package-scope in order to allow
+     * the {@link HeaderSection} to set itself up properly.</p>
+     *
+     * @return {@code >= 0;} the total file size
+     * @throws RuntimeException thrown if the file size is not yet known
+     */
+    public int getFileSize() {
+        if (fileSize < 0) {
+            throw new RuntimeException("file size not yet known");
+        }
+
+        return fileSize;
+    }
+
+    /**
+     * Gets the string data section.
+     *
+     * <p>This is package-scope in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance.</p>
+     *
+     * @return {@code non-null;} the string data section
+     */
+    /*package*/ MixedItemSection getStringData() {
+        return stringData;
+    }
+
+    /**
+     * Gets the word data section.
+     *
+     * <p>This is package-scope in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance.</p>
+     *
+     * @return {@code non-null;} the word data section
+     */
+    /*package*/ MixedItemSection getWordData() {
+        return wordData;
+    }
+
+    /**
+     * Gets the type lists section.
+     *
+     * <p>This is package-scope in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance.</p>
+     *
+     * @return {@code non-null;} the word data section
+     */
+    /*package*/ MixedItemSection getTypeLists() {
+        return typeLists;
+    }
+
+    /**
+     * Gets the map section.
+     *
+     * <p>This is package-scope in order to allow the header section
+     * to query it.</p>
+     *
+     * @return {@code non-null;} the map section
+     */
+    /*package*/ MixedItemSection getMap() {
+        return map;
+    }
+
+    /**
+     * Gets the string identifiers section.
+     *
+     * <p>This is package-scope in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance.</p>
+     *
+     * @return {@code non-null;} the string identifiers section
+     */
+    /*package*/ StringIdsSection getStringIds() {
+        return stringIds;
+    }
+
+    /**
+     * Gets the class definitions section.
+     *
+     * <p>This is package-scope in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance.</p>
+     *
+     * @return {@code non-null;} the class definitions section
+     */
+    public ClassDefsSection getClassDefs() {
+        return classDefs;
+    }
+
+    /**
+     * Gets the class data section.
+     *
+     * <p>This is package-scope in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance.</p>
+     *
+     * @return {@code non-null;} the class data section
+     */
+    /*package*/ MixedItemSection getClassData() {
+        return classData;
+    }
+
+    /**
+     * Gets the type identifiers section.
+     *
+     * <p>This is public in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance and help early counting of type ids.</p>
+     *
+     * @return {@code non-null;} the class identifiers section
+     */
+    public TypeIdsSection getTypeIds() {
+        return typeIds;
+    }
+
+    /**
+     * Gets the prototype identifiers section.
+     *
+     * <p>This is package-scope in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance.</p>
+     *
+     * @return {@code non-null;} the prototype identifiers section
+     */
+    /*package*/ ProtoIdsSection getProtoIds() {
+        return protoIds;
+    }
+
+    /**
+     * Gets the field identifiers section.
+     *
+     * <p>This is public in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance and help early counting of field ids.</p>
+     *
+     * @return {@code non-null;} the field identifiers section
+     */
+    public FieldIdsSection getFieldIds() {
+        return fieldIds;
+    }
+
+    /**
+     * Gets the method identifiers section.
+     *
+     * <p>This is public in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance and help early counting of method ids.</p>
+     *
+     * @return {@code non-null;} the method identifiers section
+     */
+    public MethodIdsSection getMethodIds() {
+        return methodIds;
+    }
+
+    /**
+     * Gets the method handles section.
+     *
+     * <p>This is public in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance and help early counting of method handles.</p>
+     *
+     * @return {@code non-null;} the method handles section
+     */
+    public MethodHandlesSection getMethodHandles() {
+        return methodHandles;
+    }
+
+    /**
+     * Gets the call site identifiers section.
+     *
+     * <p>This is public in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance and help early counting of call site identifiers.</p>
+     *
+     * @return {@code non-null;} the call site identifiers section
+     */
+    public CallSiteIdsSection getCallSiteIds() {
+        return callSiteIds;
+    }
+
+    /**
+     * Gets the byte data section.
+     *
+     * <p>This is package-scope in order to allow
+     * the various {@link Item} instances to add items to the
+     * instance.</p>
+     *
+     * @return {@code non-null;} the byte data section
+     */
+    /*package*/ MixedItemSection getByteData() {
+        return byteData;
+    }
+
+    /**
+     * Gets the first section of the file that is to be considered
+     * part of the data section.
+     *
+     * <p>This is package-scope in order to allow the header section
+     * to query it.</p>
+     *
+     * @return {@code non-null;} the section
+     */
+    /*package*/ Section getFirstDataSection() {
+        return wordData;
+    }
+
+    /**
+     * Gets the last section of the file that is to be considered
+     * part of the data section.
+     *
+     * <p>This is package-scope in order to allow the header section
+     * to query it.</p>
+     *
+     * @return {@code non-null;} the section
+     */
+    /*package*/ Section getLastDataSection() {
+        return map;
+    }
+
+    /**
+     * Interns the given constant in the appropriate section of this
+     * instance, or do nothing if the given constant isn't the sort
+     * that should be interned.
+     *
+     * @param cst {@code non-null;} constant to possibly intern
+     */
+    /*package*/ void internIfAppropriate(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        if (cst instanceof CstString) {
+            stringIds.intern((CstString) cst);
+        } else if (cst instanceof CstType) {
+            typeIds.intern((CstType) cst);
+        } else if (cst instanceof CstBaseMethodRef) {
+            methodIds.intern((CstBaseMethodRef) cst);
+        } else if (cst instanceof CstFieldRef) {
+            fieldIds.intern((CstFieldRef) cst);
+        } else if (cst instanceof CstEnumRef) {
+            fieldIds.intern(((CstEnumRef) cst).getFieldRef());
+        } else if (cst instanceof CstProtoRef) {
+            protoIds.intern(((CstProtoRef) cst).getPrototype());
+        } else if (cst instanceof CstMethodHandle) {
+            methodHandles.intern((CstMethodHandle) cst);
+        }
+    }
+
+    /**
+     * Gets the {@link IndexedItem} corresponding to the given constant,
+     * if it is a constant that has such a correspondence, or return
+     * {@code null} if it isn't such a constant. This will throw
+     * an exception if the given constant <i>should</i> have been found
+     * but wasn't.
+     *
+     * @param cst {@code non-null;} the constant to look up
+     * @return {@code null-ok;} its corresponding item, if it has a corresponding
+     * item, or {@code null} if it's not that sort of constant
+     */
+    /*package*/ IndexedItem findItemOrNull(Constant cst) {
+        if (cst instanceof CstString) {
+            return stringIds.get(cst);
+        } else if (cst instanceof CstType) {
+            return typeIds.get(cst);
+        } else if (cst instanceof CstBaseMethodRef) {
+            return methodIds.get(cst);
+        } else if (cst instanceof CstFieldRef) {
+            return fieldIds.get(cst);
+        } else if (cst instanceof CstEnumRef) {
+            return fieldIds.intern(((CstEnumRef) cst).getFieldRef());
+        } else if (cst instanceof CstProtoRef) {
+            return protoIds.get(cst);
+        } else if (cst instanceof CstMethodHandle) {
+            return methodHandles.get(cst);
+        } else if (cst instanceof CstCallSiteRef) {
+            return callSiteIds.get(cst);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Holder for a byte[] that can grow on demand.
+     */
+    public static final class Storage {
+        byte[] storage;
+        public Storage(byte[] storage) {
+            this.storage = storage;
+        }
+
+        public byte[] getStorage(int requestedLength) {
+            if (storage.length < requestedLength) {
+                Logger.getAnonymousLogger().log(
+                        Level.FINER,
+                        "DexFile storage too small  "
+                                + storage.length
+                                + " vs "
+                                + requestedLength);
+                storage = new byte[requestedLength];
+            }
+            return storage;
+        }
+    }
+
+    /**
+     * Returns the contents of this instance as a {@code .dex} file,
+     * in a {@link ByteArrayAnnotatedOutput} instance.
+     *
+     * @param annotate whether or not to keep annotations
+     * @param verbose if annotating, whether to be verbose
+     * @return {@code non-null;} a {@code .dex} file for this instance
+     */
+    private ByteArrayAnnotatedOutput toDex0(boolean annotate,
+            boolean verbose,
+            Storage storage) {
+        /*
+         * The following is ordered so that the prepare() calls which
+         * add items happen before the calls to the sections that get
+         * added to.
+         */
+
+        classDefs.prepare();
+        classData.prepare();
+        wordData.prepare();
+        if (dexOptions.apiIsSupported(DexFormat.API_METHOD_HANDLES)) {
+            // Prepare call site ids before byteData where the call site items are placed.
+            callSiteIds.prepare();
+        }
+        byteData.prepare();
+        if (dexOptions.apiIsSupported(DexFormat.API_METHOD_HANDLES)) {
+            // Prepare method handles after call site items placed in byteData.
+            methodHandles.prepare();
+        }
+        methodIds.prepare();
+        fieldIds.prepare();
+        protoIds.prepare();
+        typeLists.prepare();
+        typeIds.prepare();
+        stringIds.prepare();
+        stringData.prepare();
+        header.prepare();
+
+        // Place the sections within the file.
+
+        int count = sections.length;
+        int offset = 0;
+
+        for (int i = 0; i < count; i++) {
+            Section one = sections[i];
+            if ((one == callSiteIds || one == methodHandles) && one.items().isEmpty()) {
+                /*
+                 * Skip call site or method handles sections if they have no items as
+                 * they may change the alignment of what follows even if empty as
+                 * Section.setFileOffset() always ensures appropriate alignment for the section.
+                 */
+                continue;
+            }
+
+            int placedAt = one.setFileOffset(offset);
+            if (placedAt < offset) {
+                throw new RuntimeException("bogus placement for section " + i);
+            }
+
+            try {
+                if (one == map) {
+                    /*
+                     * Inform the map of all the sections, and add it
+                     * to the file. This can only be done after all
+                     * the other items have been sorted and placed.
+                     */
+                    MapItem.addMap(sections, map);
+                    map.prepare();
+                }
+
+                if (one instanceof MixedItemSection) {
+                    /*
+                     * Place the items of a MixedItemSection that just
+                     * got placed.
+                     */
+                    ((MixedItemSection) one).placeItems();
+                }
+
+                offset = placedAt + one.writeSize();
+            } catch (RuntimeException ex) {
+                throw ExceptionWithContext.withContext(ex,
+                        "...while writing section " + i);
+            }
+        }
+
+        // Write out all the sections.
+
+        fileSize = offset;
+        byte[] barr = storage == null ? new byte[fileSize] : storage.getStorage(fileSize);
+
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(barr);
+
+        if (annotate) {
+            out.enableAnnotations(dumpWidth, verbose);
+        }
+
+        for (int i = 0; i < count; i++) {
+            try {
+                final Section one = sections[i];
+                if ((one == callSiteIds || one == methodHandles) && one.items().isEmpty()) {
+                   continue;
+                }
+                final int zeroCount = one.getFileOffset() - out.getCursor();
+                if (zeroCount < 0) {
+                    throw new ExceptionWithContext("excess write of " +
+                            (-zeroCount));
+                }
+                out.writeZeroes(zeroCount);
+                one.writeTo(out);
+            } catch (RuntimeException ex) {
+                ExceptionWithContext ec;
+                if (ex instanceof ExceptionWithContext) {
+                    ec = (ExceptionWithContext) ex;
+                } else {
+                    ec = new ExceptionWithContext(ex);
+                }
+                ec.addContext("...while writing section " + i);
+                throw ec;
+            }
+        }
+
+        if (out.getCursor() != fileSize) {
+            throw new RuntimeException("foreshortened write");
+        }
+
+        // Perform final bookkeeping.
+
+        calcSignature(barr, out.getCursor());
+        calcChecksum(barr, out.getCursor());
+
+        if (annotate) {
+            wordData.writeIndexAnnotation(out, ItemType.TYPE_CODE_ITEM,
+                    "\nmethod code index:\n\n");
+            getStatistics().writeAnnotation(out);
+            out.finishAnnotating();
+        }
+
+        return out;
+    }
+
+    /**
+     * Generates and returns statistics for all the items in the file.
+     *
+     * @return {@code non-null;} the statistics
+     */
+    public Statistics getStatistics() {
+        Statistics stats = new Statistics();
+
+        for (Section s : sections) {
+            stats.addAll(s);
+        }
+
+        return stats;
+    }
+
+    /**
+     * Calculates the signature for the {@code .dex} file in the
+     * given array, and modify the array to contain it.
+     *
+     * @param bytes {@code non-null;} the bytes of the file
+     * @param len length of {@code .dex} file encoded in the array
+     */
+    private static void calcSignature(byte[] bytes, int len) {
+        MessageDigest md;
+
+        try {
+            md = MessageDigest.getInstance("SHA-1");
+        } catch (NoSuchAlgorithmException ex) {
+            throw new RuntimeException(ex);
+        }
+
+        md.update(bytes, 32, len - 32);
+
+        try {
+            int amt = md.digest(bytes, 12, 20);
+            if (amt != 20) {
+                throw new RuntimeException("unexpected digest write: " + amt +
+                        " bytes");
+            }
+        } catch (DigestException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    /**
+     * Calculates the checksum for the {@code .dex} file in the
+     * given array, and modify the array to contain it.
+     *
+     * @param bytes {@code non-null;} the bytes of the file
+     * @param len length of {@code .dex} file encoded in the array
+     */
+    private static void calcChecksum(byte[] bytes, int len) {
+        Adler32 a32 = new Adler32();
+
+        a32.update(bytes, 12, len - 12);
+
+        int sum = (int) a32.getValue();
+
+        bytes[8]  = (byte) sum;
+        bytes[9]  = (byte) (sum >> 8);
+        bytes[10] = (byte) (sum >> 16);
+        bytes[11] = (byte) (sum >> 24);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/EncodedArrayItem.java b/dx/src/com/android/dx/dex/file/EncodedArrayItem.java
new file mode 100644
index 0000000..886e251
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/EncodedArrayItem.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.CstArray;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.ByteArrayAnnotatedOutput;
+
+/**
+ * Encoded array of constant values.
+ */
+public final class EncodedArrayItem extends OffsettedItem {
+    /** the required alignment for instances of this class */
+    private static final int ALIGNMENT = 1;
+
+    /** {@code non-null;} the array to represent */
+    private final CstArray array;
+
+    /**
+     * {@code null-ok;} encoded form, ready for writing to a file; set during
+     * {@link #place0}
+     */
+    private byte[] encodedForm;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param array {@code non-null;} array to represent
+     */
+    public EncodedArrayItem(CstArray array) {
+        /*
+         * The write size isn't known up-front because (the variable-lengthed)
+         * leb128 type is used to represent some things.
+         */
+        super(ALIGNMENT, -1);
+
+        if (array == null) {
+            throw new NullPointerException("array == null");
+        }
+
+        this.array = array;
+        this.encodedForm = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_ENCODED_ARRAY_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return array.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(OffsettedItem other) {
+        EncodedArrayItem otherArray = (EncodedArrayItem) other;
+
+        return array.compareTo(otherArray.array);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return array.toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        ValueEncoder.addContents(file, array);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        // Encode the data and note the size.
+
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput();
+        ValueEncoder encoder = new ValueEncoder(addedTo.getFile(), out);
+
+        encoder.writeArray(array, false);
+        encodedForm = out.toByteArray();
+        setWriteSize(encodedForm.length);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+
+        if (annotates) {
+            out.annotate(0, offsetString() + " encoded array");
+
+            /*
+             * The output is to be annotated, so redo the work previously
+             * done by place0(), except this time annotations will actually
+             * get emitted.
+             */
+            ValueEncoder encoder = new ValueEncoder(file, out);
+            encoder.writeArray(array, true);
+        } else {
+            out.write(encodedForm);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/EncodedField.java b/dx/src/com/android/dx/dex/file/EncodedField.java
new file mode 100644
index 0000000..74ba64a
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/EncodedField.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.Leb128;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.io.PrintWriter;
+
+/**
+ * Representation of a field of a class, of any sort.
+ */
+public final class EncodedField extends EncodedMember
+        implements Comparable<EncodedField> {
+    /** {@code non-null;} constant for the field */
+    private final CstFieldRef field;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param field {@code non-null;} constant for the field
+     * @param accessFlags access flags
+     */
+    public EncodedField(CstFieldRef field, int accessFlags) {
+        super(accessFlags);
+
+        if (field == null) {
+            throw new NullPointerException("field == null");
+        }
+
+        /*
+         * TODO: Maybe check accessFlags, at least for
+         * easily-checked stuff?
+         */
+
+        this.field = field;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return field.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof EncodedField)) {
+            return false;
+        }
+
+        return compareTo((EncodedField) other) == 0;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p><b>Note:</b> This compares the method constants only,
+     * ignoring any associated code, because it should never be the
+     * case that two different items with the same method constant
+     * ever appear in the same list (or same file, even).</p>
+     */
+    @Override
+    public int compareTo(EncodedField other) {
+        return field.compareTo(other.field);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append(getClass().getName());
+        sb.append('{');
+        sb.append(Hex.u2(getAccessFlags()));
+        sb.append(' ');
+        sb.append(field);
+        sb.append('}');
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        FieldIdsSection fieldIds = file.getFieldIds();
+        fieldIds.intern(field);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public CstString getName() {
+        return field.getNat().getName();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return field.toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void debugPrint(PrintWriter out, boolean verbose) {
+        // TODO: Maybe put something better here?
+        out.println(toString());
+    }
+
+    /**
+     * Gets the constant for the field.
+     *
+     * @return {@code non-null;} the constant
+     */
+    public CstFieldRef getRef() {
+        return field;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int encode(DexFile file, AnnotatedOutput out,
+            int lastIndex, int dumpSeq) {
+        int fieldIdx = file.getFieldIds().indexOf(field);
+        int diff = fieldIdx - lastIndex;
+        int accessFlags = getAccessFlags();
+
+        if (out.annotates()) {
+            out.annotate(0, String.format("  [%x] %s", dumpSeq,
+                            field.toHuman()));
+            out.annotate(Leb128.unsignedLeb128Size(diff),
+                    "    field_idx:    " + Hex.u4(fieldIdx));
+            out.annotate(Leb128.unsignedLeb128Size(accessFlags),
+                    "    access_flags: " +
+                    AccessFlags.fieldString(accessFlags));
+        }
+
+        out.writeUleb128(diff);
+        out.writeUleb128(accessFlags);
+
+        return fieldIdx;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/EncodedMember.java b/dx/src/com/android/dx/dex/file/EncodedMember.java
new file mode 100644
index 0000000..a681d82
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/EncodedMember.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.ToHuman;
+import java.io.PrintWriter;
+
+/**
+ * Representation of a member (field or method) of a class, for the
+ * purposes of encoding it inside a {@link ClassDataItem}.
+ */
+public abstract class EncodedMember implements ToHuman {
+    /** access flags */
+    private final int accessFlags;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param accessFlags access flags for the member
+     */
+    public EncodedMember(int accessFlags) {
+        this.accessFlags = accessFlags;
+    }
+
+    /**
+     * Gets the access flags.
+     *
+     * @return the access flags
+     */
+    public final int getAccessFlags() {
+        return accessFlags;
+    }
+
+    /**
+     * Gets the name.
+     *
+     * @return {@code non-null;} the name
+     */
+    public abstract CstString getName();
+
+    /**
+     * Does a human-friendly dump of this instance.
+     *
+     * @param out {@code non-null;} where to dump
+     * @param verbose whether to be verbose with the output
+     */
+    public abstract void debugPrint(PrintWriter out, boolean verbose);
+
+    /**
+     * Populates a {@link DexFile} with items from within this instance.
+     *
+     * @param file {@code non-null;} the file to populate
+     */
+    public abstract void addContents(DexFile file);
+
+    /**
+     * Encodes this instance to the given output.
+     *
+     * @param file {@code non-null;} file this instance is part of
+     * @param out {@code non-null;} where to write to
+     * @param lastIndex {@code >= 0;} the previous member index value encoded, or
+     * {@code 0} if this is the first element to encode
+     * @param dumpSeq {@code >= 0;} sequence number of this instance for
+     * annotation purposes
+     * @return {@code >= 0;} the member index value that was encoded
+     */
+    public abstract int encode(DexFile file, AnnotatedOutput out,
+            int lastIndex, int dumpSeq);
+}
diff --git a/dx/src/com/android/dx/dex/file/EncodedMethod.java b/dx/src/com/android/dx/dex/file/EncodedMethod.java
new file mode 100644
index 0000000..f61be0f
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/EncodedMethod.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.Leb128;
+import com.android.dx.dex.code.DalvCode;
+import com.android.dx.rop.code.AccessFlags;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.io.PrintWriter;
+
+/**
+ * Class that representats a method of a class.
+ */
+public final class EncodedMethod extends EncodedMember
+        implements Comparable<EncodedMethod> {
+    /** {@code non-null;} constant for the method */
+    private final CstMethodRef method;
+
+    /**
+     * {@code null-ok;} code for the method, if the method is neither
+     * {@code abstract} nor {@code native}
+     */
+    private final CodeItem code;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param method {@code non-null;} constant for the method
+     * @param accessFlags access flags
+     * @param code {@code null-ok;} code for the method, if it is neither
+     * {@code abstract} nor {@code native}
+     * @param throwsList {@code non-null;} list of possibly-thrown exceptions,
+     * just used in generating debugging output (listings)
+     */
+    public EncodedMethod(CstMethodRef method, int accessFlags,
+            DalvCode code, TypeList throwsList) {
+        super(accessFlags);
+
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        this.method = method;
+
+        if (code == null) {
+            this.code = null;
+        } else {
+            boolean isStatic = (accessFlags & AccessFlags.ACC_STATIC) != 0;
+            this.code = new CodeItem(method, code, isStatic, throwsList);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof EncodedMethod)) {
+            return false;
+        }
+
+        return compareTo((EncodedMethod) other) == 0;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p><b>Note:</b> This compares the method constants only,
+     * ignoring any associated code, because it should never be the
+     * case that two different items with the same method constant
+     * ever appear in the same list (or same file, even).</p>
+     */
+    @Override
+    public int compareTo(EncodedMethod other) {
+        return method.compareTo(other.method);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append(getClass().getName());
+        sb.append('{');
+        sb.append(Hex.u2(getAccessFlags()));
+        sb.append(' ');
+        sb.append(method);
+
+        if (code != null) {
+            sb.append(' ');
+            sb.append(code);
+        }
+
+        sb.append('}');
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        MethodIdsSection methodIds = file.getMethodIds();
+        MixedItemSection wordData = file.getWordData();
+
+        methodIds.intern(method);
+
+        if (code != null) {
+            wordData.add(code);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final String toHuman() {
+        return method.toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final CstString getName() {
+        return method.getNat().getName();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void debugPrint(PrintWriter out, boolean verbose) {
+        if (code == null) {
+            out.println(getRef().toHuman() + ": abstract or native");
+        } else {
+            code.debugPrint(out, "  ", verbose);
+        }
+    }
+
+    /**
+     * Gets the constant for the method.
+     *
+     * @return {@code non-null;} the constant
+     */
+    public final CstMethodRef getRef() {
+        return method;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int encode(DexFile file, AnnotatedOutput out,
+            int lastIndex, int dumpSeq) {
+        int methodIdx = file.getMethodIds().indexOf(method);
+        int diff = methodIdx - lastIndex;
+        int accessFlags = getAccessFlags();
+        int codeOff = OffsettedItem.getAbsoluteOffsetOr0(code);
+        boolean hasCode = (codeOff != 0);
+        boolean shouldHaveCode = (accessFlags &
+                (AccessFlags.ACC_ABSTRACT | AccessFlags.ACC_NATIVE)) == 0;
+
+        /*
+         * Verify that code appears if and only if a method is
+         * declared to have it.
+         */
+        if (hasCode != shouldHaveCode) {
+            throw new UnsupportedOperationException(
+                    "code vs. access_flags mismatch");
+        }
+
+        if (out.annotates()) {
+            out.annotate(0, String.format("  [%x] %s", dumpSeq,
+                            method.toHuman()));
+            out.annotate(Leb128.unsignedLeb128Size(diff),
+                    "    method_idx:   " + Hex.u4(methodIdx));
+            out.annotate(Leb128.unsignedLeb128Size(accessFlags),
+                    "    access_flags: " +
+                    AccessFlags.methodString(accessFlags));
+            out.annotate(Leb128.unsignedLeb128Size(codeOff),
+                    "    code_off:     " + Hex.u4(codeOff));
+        }
+
+        out.writeUleb128(diff);
+        out.writeUleb128(accessFlags);
+        out.writeUleb128(codeOff);
+
+        return methodIdx;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/FieldAnnotationStruct.java b/dx/src/com/android/dx/dex/file/FieldAnnotationStruct.java
new file mode 100644
index 0000000..624ee4e
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/FieldAnnotationStruct.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import com.android.dx.util.ToHuman;
+
+/**
+ * Association of a field and its annotations.
+ */
+public final class FieldAnnotationStruct
+        implements ToHuman, Comparable<FieldAnnotationStruct> {
+    /** {@code non-null;} the field in question */
+    private final CstFieldRef field;
+
+    /** {@code non-null;} the associated annotations */
+    private AnnotationSetItem annotations;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param field {@code non-null;} the field in question
+     * @param annotations {@code non-null;} the associated annotations
+     */
+    public FieldAnnotationStruct(CstFieldRef field,
+            AnnotationSetItem annotations) {
+        if (field == null) {
+            throw new NullPointerException("field == null");
+        }
+
+        if (annotations == null) {
+            throw new NullPointerException("annotations == null");
+        }
+
+        this.field = field;
+        this.annotations = annotations;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return field.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof FieldAnnotationStruct)) {
+            return false;
+        }
+
+        return field.equals(((FieldAnnotationStruct) other).field);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(FieldAnnotationStruct other) {
+        return field.compareTo(other.field);
+    }
+
+    /** {@inheritDoc} */
+    public void addContents(DexFile file) {
+        FieldIdsSection fieldIds = file.getFieldIds();
+        MixedItemSection wordData = file.getWordData();
+
+        fieldIds.intern(field);
+        annotations = wordData.intern(annotations);
+    }
+
+    /** {@inheritDoc} */
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        int fieldIdx = file.getFieldIds().indexOf(field);
+        int annotationsOff = annotations.getAbsoluteOffset();
+
+        if (out.annotates()) {
+            out.annotate(0, "    " + field.toHuman());
+            out.annotate(4, "      field_idx:       " + Hex.u4(fieldIdx));
+            out.annotate(4, "      annotations_off: " +
+                    Hex.u4(annotationsOff));
+        }
+
+        out.writeInt(fieldIdx);
+        out.writeInt(annotationsOff);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return field.toHuman() + ": " + annotations;
+    }
+
+    /**
+     * Gets the field this item is for.
+     *
+     * @return {@code non-null;} the field
+     */
+    public CstFieldRef getField() {
+        return field;
+    }
+
+    /**
+     * Gets the associated annotations.
+     *
+     * @return {@code non-null;} the annotations
+     */
+    public Annotations getAnnotations() {
+        return annotations.getAnnotations();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/FieldIdItem.java b/dx/src/com/android/dx/dex/file/FieldIdItem.java
new file mode 100644
index 0000000..ecb1d3d
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/FieldIdItem.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.CstFieldRef;
+
+/**
+ * Representation of a field reference inside a Dalvik file.
+ */
+public final class FieldIdItem extends MemberIdItem {
+    /**
+     * Constructs an instance.
+     *
+     * @param field {@code non-null;} the constant for the field
+     */
+    public FieldIdItem(CstFieldRef field) {
+        super(field);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_FIELD_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        super.addContents(file);
+
+        TypeIdsSection typeIds = file.getTypeIds();
+        typeIds.intern(getFieldRef().getType());
+    }
+
+    /**
+     * Gets the field constant.
+     *
+     * @return {@code non-null;} the constant
+     */
+    public CstFieldRef getFieldRef() {
+        return (CstFieldRef) getRef();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int getTypoidIdx(DexFile file) {
+        TypeIdsSection typeIds = file.getTypeIds();
+        return typeIds.indexOf(getFieldRef().getType());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String getTypoidName() {
+        return "type_idx";
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/FieldIdsSection.java b/dx/src/com/android/dx/dex/file/FieldIdsSection.java
new file mode 100644
index 0000000..416f938
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/FieldIdsSection.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.Collection;
+import java.util.TreeMap;
+
+/**
+ * Field refs list section of a {@code .dex} file.
+ */
+public final class FieldIdsSection extends MemberIdsSection {
+    /**
+     * {@code non-null;} map from field constants to {@link
+     * FieldIdItem} instances
+     */
+    private final TreeMap<CstFieldRef, FieldIdItem> fieldIds;
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param file {@code non-null;} file that this instance is part of
+     */
+    public FieldIdsSection(DexFile file) {
+        super("field_ids", file);
+
+        fieldIds = new TreeMap<CstFieldRef, FieldIdItem>();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        return fieldIds.values();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IndexedItem get(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        throwIfNotPrepared();
+
+        IndexedItem result = fieldIds.get((CstFieldRef) cst);
+
+        if (result == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return result;
+    }
+
+    /**
+     * Writes the portion of the file header that refers to this instance.
+     *
+     * @param out {@code non-null;} where to write
+     */
+    public void writeHeaderPart(AnnotatedOutput out) {
+        throwIfNotPrepared();
+
+        int sz = fieldIds.size();
+        int offset = (sz == 0) ? 0 : getFileOffset();
+
+        if (out.annotates()) {
+            out.annotate(4, "field_ids_size:  " + Hex.u4(sz));
+            out.annotate(4, "field_ids_off:   " + Hex.u4(offset));
+        }
+
+        out.writeInt(sz);
+        out.writeInt(offset);
+    }
+
+    /**
+     * Interns an element into this instance.
+     *
+     * @param field {@code non-null;} the reference to intern
+     * @return {@code non-null;} the interned reference
+     */
+    public synchronized FieldIdItem intern(CstFieldRef field) {
+        if (field == null) {
+            throw new NullPointerException("field == null");
+        }
+
+        throwIfPrepared();
+
+        FieldIdItem result = fieldIds.get(field);
+
+        if (result == null) {
+            result = new FieldIdItem(field);
+            fieldIds.put(field, result);
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the index of the given reference, which must have been added
+     * to this instance.
+     *
+     * @param ref {@code non-null;} the reference to look up
+     * @return {@code >= 0;} the reference's index
+     */
+    public int indexOf(CstFieldRef ref) {
+        if (ref == null) {
+            throw new NullPointerException("ref == null");
+        }
+
+        throwIfNotPrepared();
+
+        FieldIdItem item = fieldIds.get(ref);
+
+        if (item == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return item.getIndex();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/HeaderItem.java b/dx/src/com/android/dx/dex/file/HeaderItem.java
new file mode 100644
index 0000000..f404c3e
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/HeaderItem.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.DexFormat;
+import com.android.dex.SizeOf;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * File header section of a {@code .dex} file.
+ */
+public final class HeaderItem extends IndexedItem {
+    /**
+     * Constructs an instance.
+     */
+    public HeaderItem() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_HEADER_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        return SizeOf.HEADER_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        // Nothing to do here.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        int mapOff = file.getMap().getFileOffset();
+        Section firstDataSection = file.getFirstDataSection();
+        Section lastDataSection = file.getLastDataSection();
+        int dataOff = firstDataSection.getFileOffset();
+        int dataSize = lastDataSection.getFileOffset() +
+            lastDataSection.writeSize() - dataOff;
+
+        String magic = file.getDexOptions().getMagic();
+
+        if (out.annotates()) {
+            out.annotate(8, "magic: " + new CstString(magic).toQuoted());
+            out.annotate(4, "checksum");
+            out.annotate(20, "signature");
+            out.annotate(4, "file_size:       " +
+                         Hex.u4(file.getFileSize()));
+            out.annotate(4, "header_size:     " + Hex.u4(SizeOf.HEADER_ITEM));
+            out.annotate(4, "endian_tag:      " + Hex.u4(DexFormat.ENDIAN_TAG));
+            out.annotate(4, "link_size:       0");
+            out.annotate(4, "link_off:        0");
+            out.annotate(4, "map_off:         " + Hex.u4(mapOff));
+        }
+
+        // Write the magic number.
+        for (int i = 0; i < 8; i++) {
+            out.writeByte(magic.charAt(i));
+        }
+
+        // Leave space for the checksum and signature.
+        out.writeZeroes(24);
+
+        out.writeInt(file.getFileSize());
+        out.writeInt(SizeOf.HEADER_ITEM);
+        out.writeInt(DexFormat.ENDIAN_TAG);
+
+        /*
+         * Write zeroes for the link size and data, as the output
+         * isn't a staticly linked file.
+         */
+        out.writeZeroes(8);
+
+        out.writeInt(mapOff);
+
+        // Write out each section's respective header part.
+        file.getStringIds().writeHeaderPart(out);
+        file.getTypeIds().writeHeaderPart(out);
+        file.getProtoIds().writeHeaderPart(out);
+        file.getFieldIds().writeHeaderPart(out);
+        file.getMethodIds().writeHeaderPart(out);
+        file.getClassDefs().writeHeaderPart(out);
+
+        if (out.annotates()) {
+            out.annotate(4, "data_size:       " + Hex.u4(dataSize));
+            out.annotate(4, "data_off:        " + Hex.u4(dataOff));
+        }
+
+        out.writeInt(dataSize);
+        out.writeInt(dataOff);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/HeaderSection.java b/dx/src/com/android/dx/dex/file/HeaderSection.java
new file mode 100644
index 0000000..e3de356
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/HeaderSection.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * File header section of a {@code .dex} file.
+ */
+public final class HeaderSection extends UniformItemSection {
+    /** {@code non-null;} the list of the one item in the section */
+    private final List<HeaderItem> list;
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param file {@code non-null;} file that this instance is part of
+     */
+    public HeaderSection(DexFile file) {
+        super(null, file, 4);
+
+        HeaderItem item = new HeaderItem();
+        item.setIndex(0);
+
+        this.list = Collections.singletonList(item);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IndexedItem get(Constant cst) {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        return list;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void orderItems() {
+        // Nothing to do here.
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/IdItem.java b/dx/src/com/android/dx/dex/file/IdItem.java
new file mode 100644
index 0000000..1bd2b5f
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/IdItem.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.CstType;
+
+/**
+ * Representation of a reference to an item inside a Dalvik file.
+ */
+public abstract class IdItem extends IndexedItem {
+    /**
+     * {@code non-null;} the type constant for the defining class of
+     * the reference
+     */
+    private final CstType type;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param type {@code non-null;} the type constant for the defining
+     * class of the reference
+     */
+    public IdItem(CstType type) {
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        this.type = type;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        TypeIdsSection typeIds = file.getTypeIds();
+        typeIds.intern(type);
+    }
+
+    /**
+     * Gets the type constant for the defining class of the
+     * reference.
+     *
+     * @return {@code non-null;} the type constant
+     */
+    public final CstType getDefiningClass() {
+        return type;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/IndexedItem.java b/dx/src/com/android/dx/dex/file/IndexedItem.java
new file mode 100644
index 0000000..9ba4783
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/IndexedItem.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+/**
+ * An item in a Dalvik file which is referenced by index.
+ */
+public abstract class IndexedItem extends Item {
+    /** {@code >= -1;} assigned index of the item, or {@code -1} if not
+     * yet assigned */
+    private int index;
+
+    /**
+     * Constructs an instance. The index is initially unassigned.
+     */
+    public IndexedItem() {
+        index = -1;
+    }
+
+    /**
+     * Gets whether or not this instance has been assigned an index.
+     *
+     * @return {@code true} iff this instance has been assigned an index
+     */
+    public final boolean hasIndex() {
+        return (index >= 0);
+    }
+
+    /**
+     * Gets the item index.
+     *
+     * @return {@code >= 0;} the index
+     * @throws RuntimeException thrown if the item index is not yet assigned
+     */
+    public final int getIndex() {
+        if (index < 0) {
+            throw new RuntimeException("index not yet set");
+        }
+
+        return index;
+    }
+
+    /**
+     * Sets the item index. This method may only ever be called once
+     * per instance, and this will throw a {@code RuntimeException} if
+     * called a second (or subsequent) time.
+     *
+     * @param index {@code >= 0;} the item index
+     */
+    public final void setIndex(int index) {
+        if (this.index != -1) {
+            throw new RuntimeException("index already set");
+        }
+
+        this.index = index;
+    }
+
+    /**
+     * Gets the index of this item as a string, suitable for including in
+     * annotations.
+     *
+     * @return {@code non-null;} the index string
+     */
+    public final String indexString() {
+        return '[' + Integer.toHexString(index) + ']';
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/Item.java b/dx/src/com/android/dx/dex/file/Item.java
new file mode 100644
index 0000000..cf2b380
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/Item.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * Base class for any structurally-significant and (potentially)
+ * repeated piece of a Dalvik file.
+ */
+public abstract class Item {
+    /**
+     * Constructs an instance.
+     */
+    public Item() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Returns the item type for this instance.
+     *
+     * @return {@code non-null;} the item type
+     */
+    public abstract ItemType itemType();
+
+    /**
+     * Returns the human name for the particular type of item this
+     * instance is.
+     *
+     * @return {@code non-null;} the name
+     */
+    public final String typeName() {
+        return itemType().toHuman();
+    }
+
+    /**
+     * Gets the size of this instance when written, in bytes.
+     *
+     * @return {@code >= 0;} the write size
+     */
+    public abstract int writeSize();
+
+    /**
+     * Populates a {@link DexFile} with items from within this instance.
+     * This will <i>not</i> add an item to the file for this instance itself
+     * (which should have been done by whatever refers to this instance).
+     *
+     * <p><b>Note:</b> Subclasses must override this to do something
+     * appropriate.</p>
+     *
+     * @param file {@code non-null;} the file to populate
+     */
+    public abstract void addContents(DexFile file);
+
+    /**
+     * Writes the representation of this instance to the given data section,
+     * using the given {@link DexFile} to look things up as needed.
+     * If this instance keeps track of its offset, then this method will
+     * note the written offset and will also throw an exception if this
+     * instance has already been written.
+     *
+     * @param file {@code non-null;} the file to use for reference
+     * @param out {@code non-null;} where to write to
+     */
+    public abstract void writeTo(DexFile file, AnnotatedOutput out);
+}
diff --git a/dx/src/com/android/dx/dex/file/ItemType.java b/dx/src/com/android/dx/dex/file/ItemType.java
new file mode 100644
index 0000000..2288df8
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/ItemType.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.util.ToHuman;
+
+/**
+ * Enumeration of all the top-level item types.
+ */
+public enum ItemType implements ToHuman {
+    TYPE_HEADER_ITEM(               0x0000, "header_item"),
+    TYPE_STRING_ID_ITEM(            0x0001, "string_id_item"),
+    TYPE_TYPE_ID_ITEM(              0x0002, "type_id_item"),
+    TYPE_PROTO_ID_ITEM(             0x0003, "proto_id_item"),
+    TYPE_FIELD_ID_ITEM(             0x0004, "field_id_item"),
+    TYPE_METHOD_ID_ITEM(            0x0005, "method_id_item"),
+    TYPE_CLASS_DEF_ITEM(            0x0006, "class_def_item"),
+    TYPE_CALL_SITE_ID_ITEM(         0x0007, "call_site_id_item"),
+    TYPE_METHOD_HANDLE_ITEM(        0x0008, "method_handle_item"),
+    TYPE_MAP_LIST(                  0x1000, "map_list"),
+    TYPE_TYPE_LIST(                 0x1001, "type_list"),
+    TYPE_ANNOTATION_SET_REF_LIST(   0x1002, "annotation_set_ref_list"),
+    TYPE_ANNOTATION_SET_ITEM(       0x1003, "annotation_set_item"),
+    TYPE_CLASS_DATA_ITEM(           0x2000, "class_data_item"),
+    TYPE_CODE_ITEM(                 0x2001, "code_item"),
+    TYPE_STRING_DATA_ITEM(          0x2002, "string_data_item"),
+    TYPE_DEBUG_INFO_ITEM(           0x2003, "debug_info_item"),
+    TYPE_ANNOTATION_ITEM(           0x2004, "annotation_item"),
+    TYPE_ENCODED_ARRAY_ITEM(        0x2005, "encoded_array_item"),
+    TYPE_ANNOTATIONS_DIRECTORY_ITEM(0x2006, "annotations_directory_item"),
+    TYPE_MAP_ITEM(                  -1,     "map_item"),
+    TYPE_TYPE_ITEM(                 -1,     "type_item"),
+    TYPE_EXCEPTION_HANDLER_ITEM(    -1,     "exception_handler_item"),
+    TYPE_ANNOTATION_SET_REF_ITEM(   -1,     "annotation_set_ref_item");
+
+    /** value when represented in a {@link MapItem} */
+    private final int mapValue;
+
+    /** {@code non-null;} name of the type */
+    private final String typeName;
+
+    /** {@code non-null;} the short human name */
+    private final String humanName;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param mapValue value when represented in a {@link MapItem}
+     * @param typeName {@code non-null;} name of the type
+     */
+    private ItemType(int mapValue, String typeName) {
+        this.mapValue = mapValue;
+        this.typeName = typeName;
+
+        // Make the human name.
+        String human = typeName;
+        if (human.endsWith("_item")) {
+            human = human.substring(0, human.length() - 5);
+        }
+        this.humanName = human.replace('_', ' ');
+    }
+
+    /**
+     * Gets the map value.
+     *
+     * @return the map value
+     */
+    public int getMapValue() {
+        return mapValue;
+    }
+
+    /**
+     * Gets the type name.
+     *
+     * @return {@code non-null;} the type name
+     */
+    public String getTypeName() {
+        return typeName;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return humanName;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/MapItem.java b/dx/src/com/android/dx/dex/file/MapItem.java
new file mode 100644
index 0000000..0d4901b
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MapItem.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+
+/**
+ * Class that represents a map item.
+ */
+public final class MapItem extends OffsettedItem {
+    /** file alignment of this class, in bytes */
+    private static final int ALIGNMENT = 4;
+
+    /** write size of this class, in bytes: three {@code uint}s */
+    private static final int WRITE_SIZE = (4 * 3);
+
+    /** {@code non-null;} item type this instance covers */
+    private final ItemType type;
+
+    /** {@code non-null;} section this instance covers */
+    private final Section section;
+
+    /**
+     * {@code null-ok;} first item covered or {@code null} if this is
+     * a self-reference
+     */
+    private final Item firstItem;
+
+    /**
+     * {@code null-ok;} last item covered or {@code null} if this is
+     * a self-reference
+     */
+    private final Item lastItem;
+
+    /**
+     * {@code > 0;} count of items covered; {@code 1} if this
+     * is a self-reference
+     */
+    private final int itemCount;
+
+    /**
+     * Constructs a list item with instances of this class representing
+     * the contents of the given array of sections, adding it to the
+     * given map section.
+     *
+     * @param sections {@code non-null;} the sections
+     * @param mapSection {@code non-null;} the section that the resulting map
+     * should be added to; it should be empty on entry to this method
+     */
+    public static void addMap(Section[] sections,
+            MixedItemSection mapSection) {
+        if (sections == null) {
+            throw new NullPointerException("sections == null");
+        }
+
+        if (mapSection.items().size() != 0) {
+            throw new IllegalArgumentException(
+                    "mapSection.items().size() != 0");
+        }
+
+        ArrayList<MapItem> items = new ArrayList<MapItem>(50);
+
+        for (Section section : sections) {
+            ItemType currentType = null;
+            Item firstItem = null;
+            Item lastItem = null;
+            int count = 0;
+
+            for (Item item : section.items()) {
+                ItemType type = item.itemType();
+                if (type != currentType) {
+                    if (count != 0) {
+                        items.add(new MapItem(currentType, section,
+                                        firstItem, lastItem, count));
+                    }
+                    currentType = type;
+                    firstItem = item;
+                    count = 0;
+                }
+                lastItem = item;
+                count++;
+            }
+
+            if (count != 0) {
+                // Add a MapItem for the final items in the section.
+                items.add(new MapItem(currentType, section,
+                                firstItem, lastItem, count));
+            } else if (section == mapSection) {
+                // Add a MapItem for the self-referential section.
+                items.add(new MapItem(mapSection));
+            }
+        }
+
+        mapSection.add(
+                new UniformListItem<MapItem>(ItemType.TYPE_MAP_LIST, items));
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param type {@code non-null;} item type this instance covers
+     * @param section {@code non-null;} section this instance covers
+     * @param firstItem {@code non-null;} first item covered
+     * @param lastItem {@code non-null;} last item covered
+     * @param itemCount {@code > 0;} count of items covered
+     */
+    private MapItem(ItemType type, Section section, Item firstItem,
+            Item lastItem, int itemCount) {
+        super(ALIGNMENT, WRITE_SIZE);
+
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        if (section == null) {
+            throw new NullPointerException("section == null");
+        }
+
+        if (firstItem == null) {
+            throw new NullPointerException("firstItem == null");
+        }
+
+        if (lastItem == null) {
+            throw new NullPointerException("lastItem == null");
+        }
+
+        if (itemCount <= 0) {
+            throw new IllegalArgumentException("itemCount <= 0");
+        }
+
+        this.type = type;
+        this.section = section;
+        this.firstItem = firstItem;
+        this.lastItem = lastItem;
+        this.itemCount = itemCount;
+    }
+
+    /**
+     * Constructs a self-referential instance. This instance is meant to
+     * represent the section containing the {@code map_list}.
+     *
+     * @param section {@code non-null;} section this instance covers
+     */
+    private MapItem(Section section) {
+        super(ALIGNMENT, WRITE_SIZE);
+
+        if (section == null) {
+            throw new NullPointerException("section == null");
+        }
+
+        this.type = ItemType.TYPE_MAP_LIST;
+        this.section = section;
+        this.firstItem = null;
+        this.lastItem = null;
+        this.itemCount = 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_MAP_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append(getClass().getName());
+        sb.append('{');
+        sb.append(section.toString());
+        sb.append(' ');
+        sb.append(type.toHuman());
+        sb.append('}');
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        // We have nothing to add.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final String toHuman() {
+        return toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        int value = type.getMapValue();
+        int offset;
+
+        if (firstItem == null) {
+            offset = section.getFileOffset();
+        } else {
+            offset = section.getAbsoluteItemOffset(firstItem);
+        }
+
+        if (out.annotates()) {
+            out.annotate(0, offsetString() + ' ' + type.getTypeName() +
+                    " map");
+            out.annotate(2, "  type:   " + Hex.u2(value) + " // " +
+                    type.toString());
+            out.annotate(2, "  unused: 0");
+            out.annotate(4, "  size:   " + Hex.u4(itemCount));
+            out.annotate(4, "  offset: " + Hex.u4(offset));
+        }
+
+        out.writeShort(value);
+        out.writeShort(0); // unused
+        out.writeInt(itemCount);
+        out.writeInt(offset);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/MemberIdItem.java b/dx/src/com/android/dx/dex/file/MemberIdItem.java
new file mode 100644
index 0000000..ffe4c6c
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MemberIdItem.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.SizeOf;
+import com.android.dx.rop.cst.CstMemberRef;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of a member (field or method) reference inside a
+ * Dalvik file.
+ */
+public abstract class MemberIdItem extends IdItem {
+    /** {@code non-null;} the constant for the member */
+    private final CstMemberRef cst;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param cst {@code non-null;} the constant for the member
+     */
+    public MemberIdItem(CstMemberRef cst) {
+        super(cst.getDefiningClass());
+
+        this.cst = cst;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        return SizeOf.MEMBER_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        super.addContents(file);
+
+        StringIdsSection stringIds = file.getStringIds();
+        stringIds.intern(getRef().getNat().getName());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void writeTo(DexFile file, AnnotatedOutput out) {
+        TypeIdsSection typeIds = file.getTypeIds();
+        StringIdsSection stringIds = file.getStringIds();
+        CstNat nat = cst.getNat();
+        int classIdx = typeIds.indexOf(getDefiningClass());
+        int nameIdx = stringIds.indexOf(nat.getName());
+        int typoidIdx = getTypoidIdx(file);
+
+        if (out.annotates()) {
+            out.annotate(0, indexString() + ' ' + cst.toHuman());
+            out.annotate(2, "  class_idx: " + Hex.u2(classIdx));
+            out.annotate(2, String.format("  %-10s %s", getTypoidName() + ':',
+                            Hex.u2(typoidIdx)));
+            out.annotate(4, "  name_idx:  " + Hex.u4(nameIdx));
+        }
+
+        out.writeShort(classIdx);
+        out.writeShort(typoidIdx);
+        out.writeInt(nameIdx);
+    }
+
+    /**
+     * Returns the index of the type-like thing associated with
+     * this item, in order that it may be written out. Subclasses must
+     * override this to get whatever it is they need to store.
+     *
+     * @param file {@code non-null;} the file being written
+     * @return the index in question
+     */
+    protected abstract int getTypoidIdx(DexFile file);
+
+    /**
+     * Returns the field name of the type-like thing associated with
+     * this item, for listing-generating purposes. Subclasses must override
+     * this.
+     *
+     * @return {@code non-null;} the name in question
+     */
+    protected abstract String getTypoidName();
+
+    /**
+     * Gets the member constant.
+     *
+     * @return {@code non-null;} the constant
+     */
+    public final CstMemberRef getRef() {
+        return cst;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/MemberIdsSection.java b/dx/src/com/android/dx/dex/file/MemberIdsSection.java
new file mode 100644
index 0000000..6be27de
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MemberIdsSection.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.DexFormat;
+import com.android.dex.DexIndexOverflowException;
+import java.util.Formatter;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Member (field or method) refs list section of a {@code .dex} file.
+ */
+public abstract class MemberIdsSection extends UniformItemSection {
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param name {@code null-ok;} the name of this instance, for annotation
+     * purposes
+     * @param file {@code non-null;} file that this instance is part of
+     */
+    public MemberIdsSection(String name, DexFile file) {
+        super(name, file, 4);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void orderItems() {
+        int idx = 0;
+
+        if (items().size() > DexFormat.MAX_MEMBER_IDX + 1) {
+            throw new DexIndexOverflowException(getTooManyMembersMessage());
+        }
+
+        for (Object i : items()) {
+            ((MemberIdItem) i).setIndex(idx);
+            idx++;
+        }
+    }
+
+    private String getTooManyMembersMessage() {
+        Map<String, AtomicInteger> membersByPackage = new TreeMap<String, AtomicInteger>();
+        for (Object member : items()) {
+            String packageName = ((MemberIdItem) member).getDefiningClass().getPackageName();
+            AtomicInteger count = membersByPackage.get(packageName);
+            if (count == null) {
+                count = new AtomicInteger();
+                membersByPackage.put(packageName, count);
+            }
+            count.incrementAndGet();
+        }
+
+        Formatter formatter = new Formatter();
+        try {
+            String memberType = this instanceof MethodIdsSection ? "method" : "field";
+            formatter.format("Too many %1$s references to fit in one dex file: %2$d; max is %3$d.%n" +
+                            "You may try using multi-dex. If multi-dex is enabled then the list of " +
+                            "classes for the main dex list is too large.%n" +
+                    "References by package:",
+                    memberType, items().size(), DexFormat.MAX_MEMBER_IDX + 1);
+            for (Map.Entry<String, AtomicInteger> entry : membersByPackage.entrySet()) {
+                formatter.format("%n%6d %s", entry.getValue().get(), entry.getKey());
+            }
+            return formatter.toString();
+        } finally {
+            formatter.close();
+        }
+    }
+
+}
diff --git a/dx/src/com/android/dx/dex/file/MethodAnnotationStruct.java b/dx/src/com/android/dx/dex/file/MethodAnnotationStruct.java
new file mode 100644
index 0000000..0636a2c
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MethodAnnotationStruct.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import com.android.dx.util.ToHuman;
+
+/**
+ * Association of a method and its annotations.
+ */
+public final class MethodAnnotationStruct
+        implements ToHuman, Comparable<MethodAnnotationStruct> {
+    /** {@code non-null;} the method in question */
+    private final CstMethodRef method;
+
+    /** {@code non-null;} the associated annotations */
+    private AnnotationSetItem annotations;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param method {@code non-null;} the method in question
+     * @param annotations {@code non-null;} the associated annotations
+     */
+    public MethodAnnotationStruct(CstMethodRef method,
+            AnnotationSetItem annotations) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        if (annotations == null) {
+            throw new NullPointerException("annotations == null");
+        }
+
+        this.method = method;
+        this.annotations = annotations;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return method.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof MethodAnnotationStruct)) {
+            return false;
+        }
+
+        return method.equals(((MethodAnnotationStruct) other).method);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(MethodAnnotationStruct other) {
+        return method.compareTo(other.method);
+    }
+
+    /** {@inheritDoc} */
+    public void addContents(DexFile file) {
+        MethodIdsSection methodIds = file.getMethodIds();
+        MixedItemSection wordData = file.getWordData();
+
+        methodIds.intern(method);
+        annotations = wordData.intern(annotations);
+    }
+
+    /** {@inheritDoc} */
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        int methodIdx = file.getMethodIds().indexOf(method);
+        int annotationsOff = annotations.getAbsoluteOffset();
+
+        if (out.annotates()) {
+            out.annotate(0, "    " + method.toHuman());
+            out.annotate(4, "      method_idx:      " + Hex.u4(methodIdx));
+            out.annotate(4, "      annotations_off: " +
+                    Hex.u4(annotationsOff));
+        }
+
+        out.writeInt(methodIdx);
+        out.writeInt(annotationsOff);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return method.toHuman() + ": " + annotations;
+    }
+
+    /**
+     * Gets the method this item is for.
+     *
+     * @return {@code non-null;} the method
+     */
+    public CstMethodRef getMethod() {
+        return method;
+    }
+
+    /**
+     * Gets the associated annotations.
+     *
+     * @return {@code non-null;} the annotations
+     */
+    public Annotations getAnnotations() {
+        return annotations.getAnnotations();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/MethodHandleItem.java b/dx/src/com/android/dx/dex/file/MethodHandleItem.java
new file mode 100644
index 0000000..621b4e9
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MethodHandleItem.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstBaseMethodRef;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstInterfaceMethodRef;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of a method handle in a DEX file.
+ */
+public final class MethodHandleItem extends IndexedItem {
+
+    /** The item size when placed in a DEX file. */
+    private final int ITEM_SIZE = 8;
+
+    /** {@code non-null;} The method handle represented by this item. */
+    private final CstMethodHandle methodHandle;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param methodHandle {@code non-null;} The method handle to represent in the DEX file.
+     */
+    public MethodHandleItem(CstMethodHandle methodHandle) {
+        this.methodHandle = methodHandle;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_METHOD_HANDLE_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        return ITEM_SIZE;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        MethodHandlesSection methodHandles = file.getMethodHandles();
+        methodHandles.intern(methodHandle);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        int targetIndex = getTargetIndex(file);
+        int mhType = methodHandle.getMethodHandleType();
+        if (out.annotates()) {
+            out.annotate(0, indexString() + ' ' + methodHandle.toString());
+            String typeComment = " // " + CstMethodHandle.getMethodHandleTypeName(mhType);
+            out.annotate(2, "type:     " + Hex.u2(mhType) + typeComment);
+            out.annotate(2, "reserved: " + Hex.u2(0));
+            String targetComment = " // " +  methodHandle.getRef().toString();
+            if (methodHandle.isAccessor()) {
+                out.annotate(2, "fieldId:  " + Hex.u2(targetIndex) + targetComment);
+            } else {
+                out.annotate(2, "methodId: " + Hex.u2(targetIndex) + targetComment);
+            }
+            out.annotate(2, "reserved: " + Hex.u2(0));
+        }
+        out.writeShort(mhType);
+        out.writeShort(0);
+        out.writeShort(getTargetIndex(file));
+        out.writeShort(0);
+    }
+
+    private int getTargetIndex(DexFile file) {
+        Constant ref = methodHandle.getRef();
+        if (methodHandle.isAccessor()) {
+            FieldIdsSection fieldIds = file.getFieldIds();
+            return fieldIds.indexOf((CstFieldRef) ref);
+        } else if (methodHandle.isInvocation()) {
+            if (ref instanceof CstInterfaceMethodRef) {
+                ref = ((CstInterfaceMethodRef)ref).toMethodRef();
+            }
+            MethodIdsSection methodIds = file.getMethodIds();
+            return methodIds.indexOf((CstBaseMethodRef) ref);
+        } else {
+            throw new IllegalStateException("Unhandled invocation type");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/MethodHandlesSection.java b/dx/src/com/android/dx/dex/file/MethodHandlesSection.java
new file mode 100644
index 0000000..5aca47e
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MethodHandlesSection.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstMethodHandle;
+import java.util.Collection;
+import java.util.TreeMap;
+
+public final class MethodHandlesSection extends UniformItemSection {
+
+    private final TreeMap<CstMethodHandle, MethodHandleItem> methodHandles = new TreeMap<>();
+
+    public MethodHandlesSection(DexFile dexFile) {
+        super("method_handles", dexFile, 8);
+    }
+
+    @Override
+    public IndexedItem get(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+        throwIfNotPrepared();
+
+        IndexedItem result = methodHandles.get((CstMethodHandle) cst);
+        if (result == null) {
+            throw new IllegalArgumentException("not found");
+        }
+        return result;
+    }
+
+    @Override
+    protected void orderItems() {
+        int index = 0;
+        for (MethodHandleItem item : methodHandles.values()) {
+            item.setIndex(index++);
+        }
+    }
+
+    @Override
+    public Collection<? extends Item> items() {
+        return methodHandles.values();
+    }
+
+    public synchronized void intern(CstMethodHandle methodHandle) {
+        if (methodHandle == null) {
+            throw new NullPointerException("methodHandle == null");
+        }
+
+        throwIfPrepared();
+
+        MethodHandleItem result = methodHandles.get(methodHandle);
+        if (result == null) {
+            result = new MethodHandleItem(methodHandle);
+            methodHandles.put(methodHandle, result);
+        }
+    }
+
+    int indexOf(CstMethodHandle cstMethodHandle) {
+        return methodHandles.get(cstMethodHandle).getIndex();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/MethodIdItem.java b/dx/src/com/android/dx/dex/file/MethodIdItem.java
new file mode 100644
index 0000000..f2ff4f9
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MethodIdItem.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.CstBaseMethodRef;
+
+/**
+ * Representation of a method reference inside a Dalvik file.
+ */
+public final class MethodIdItem extends MemberIdItem {
+    /**
+     * Constructs an instance.
+     *
+     * @param method {@code non-null;} the constant for the method
+     */
+    public MethodIdItem(CstBaseMethodRef method) {
+        super(method);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_METHOD_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        super.addContents(file);
+
+        ProtoIdsSection protoIds = file.getProtoIds();
+        protoIds.intern(getMethodRef().getPrototype());
+    }
+
+    /**
+     * Gets the method constant.
+     *
+     * @return {@code non-null;} the constant
+     */
+    public CstBaseMethodRef getMethodRef() {
+        return (CstBaseMethodRef) getRef();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int getTypoidIdx(DexFile file) {
+        ProtoIdsSection protoIds = file.getProtoIds();
+        return protoIds.indexOf(getMethodRef().getPrototype());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected String getTypoidName() {
+        return "proto_idx";
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/MethodIdsSection.java b/dx/src/com/android/dx/dex/file/MethodIdsSection.java
new file mode 100644
index 0000000..9652871
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MethodIdsSection.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstBaseMethodRef;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.Collection;
+import java.util.TreeMap;
+
+/**
+ * Method refs list section of a {@code .dex} file.
+ */
+public final class MethodIdsSection extends MemberIdsSection {
+    /**
+     * {@code non-null;} map from method constants to {@link
+     * MethodIdItem} instances
+     */
+    private final TreeMap<CstBaseMethodRef, MethodIdItem> methodIds;
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param file {@code non-null;} file that this instance is part of
+     */
+    public MethodIdsSection(DexFile file) {
+        super("method_ids", file);
+
+        methodIds = new TreeMap<CstBaseMethodRef, MethodIdItem>();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        return methodIds.values();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IndexedItem get(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        throwIfNotPrepared();
+
+        IndexedItem result = methodIds.get((CstBaseMethodRef) cst);
+
+        if (result == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return result;
+    }
+
+    /**
+     * Writes the portion of the file header that refers to this instance.
+     *
+     * @param out {@code non-null;} where to write
+     */
+    public void writeHeaderPart(AnnotatedOutput out) {
+        throwIfNotPrepared();
+
+        int sz = methodIds.size();
+        int offset = (sz == 0) ? 0 : getFileOffset();
+
+        if (out.annotates()) {
+            out.annotate(4, "method_ids_size: " + Hex.u4(sz));
+            out.annotate(4, "method_ids_off:  " + Hex.u4(offset));
+        }
+
+        out.writeInt(sz);
+        out.writeInt(offset);
+    }
+
+    /**
+     * Interns an element into this instance.
+     *
+     * @param method {@code non-null;} the reference to intern
+     * @return {@code non-null;} the interned reference
+     */
+    public synchronized MethodIdItem intern(CstBaseMethodRef method) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        throwIfPrepared();
+
+        MethodIdItem result = methodIds.get(method);
+
+        if (result == null) {
+            result = new MethodIdItem(method);
+            methodIds.put(method, result);
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the index of the given reference, which must have been added
+     * to this instance.
+     *
+     * @param ref {@code non-null;} the reference to look up
+     * @return {@code >= 0;} the reference's index
+     */
+    public int indexOf(CstBaseMethodRef ref) {
+        if (ref == null) {
+            throw new NullPointerException("ref == null");
+        }
+
+        throwIfNotPrepared();
+
+        MethodIdItem item = methodIds.get(ref);
+
+        if (item == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return item.getIndex();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/MixedItemSection.java b/dx/src/com/android/dx/dex/file/MixedItemSection.java
new file mode 100644
index 0000000..6c6e672
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/MixedItemSection.java
@@ -0,0 +1,362 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.TreeMap;
+
+/**
+ * A section of a {@code .dex} file which consists of a sequence of
+ * {@link OffsettedItem} objects, which may each be of a different concrete
+ * class and/or size.
+ *
+ * <b>Note:</b> It is invalid for an item in an instance of this class to
+ * have a larger alignment requirement than the alignment of this instance.
+ */
+public final class MixedItemSection extends Section {
+    static enum SortType {
+        /** no sorting */
+        NONE,
+
+        /** sort by type only */
+        TYPE,
+
+        /** sort in class-major order, with instances sorted per-class */
+        INSTANCE;
+    };
+
+    /** {@code non-null;} sorter which sorts instances by type */
+    private static final Comparator<OffsettedItem> TYPE_SORTER =
+        new Comparator<OffsettedItem>() {
+        @Override
+        public int compare(OffsettedItem item1, OffsettedItem item2) {
+            ItemType type1 = item1.itemType();
+            ItemType type2 = item2.itemType();
+            return type1.compareTo(type2);
+        }
+    };
+
+    /** {@code non-null;} the items in this part */
+    private final ArrayList<OffsettedItem> items;
+
+    /** {@code non-null;} items that have been explicitly interned */
+    private final HashMap<OffsettedItem, OffsettedItem> interns;
+
+    /** {@code non-null;} how to sort the items */
+    private final SortType sort;
+
+    /**
+     * {@code >= -1;} the current size of this part, in bytes, or {@code -1}
+     * if not yet calculated
+     */
+    private int writeSize;
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param name {@code null-ok;} the name of this instance, for annotation
+     * purposes
+     * @param file {@code non-null;} file that this instance is part of
+     * @param alignment {@code > 0;} alignment requirement for the final output;
+     * must be a power of 2
+     * @param sort how the items should be sorted in the final output
+     */
+    public MixedItemSection(String name, DexFile file, int alignment,
+            SortType sort) {
+        super(name, file, alignment);
+
+        this.items = new ArrayList<OffsettedItem>(100);
+        this.interns = new HashMap<OffsettedItem, OffsettedItem>(100);
+        this.sort = sort;
+        this.writeSize = -1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        return items;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        throwIfNotPrepared();
+        return writeSize;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getAbsoluteItemOffset(Item item) {
+        OffsettedItem oi = (OffsettedItem) item;
+        return oi.getAbsoluteOffset();
+    }
+
+    /**
+     * Gets the size of this instance, in items.
+     *
+     * @return {@code >= 0;} the size
+     */
+    public int size() {
+        return items.size();
+    }
+
+    /**
+     * Writes the portion of the file header that refers to this instance.
+     *
+     * @param out {@code non-null;} where to write
+     */
+    public void writeHeaderPart(AnnotatedOutput out) {
+        throwIfNotPrepared();
+
+        if (writeSize == -1) {
+            throw new RuntimeException("write size not yet set");
+        }
+
+        int sz = writeSize;
+        int offset = (sz == 0) ? 0 : getFileOffset();
+        String name = getName();
+
+        if (name == null) {
+            name = "<unnamed>";
+        }
+
+        int spaceCount = 15 - name.length();
+        char[] spaceArr = new char[spaceCount];
+        Arrays.fill(spaceArr, ' ');
+        String spaces = new String(spaceArr);
+
+        if (out.annotates()) {
+            out.annotate(4, name + "_size:" + spaces + Hex.u4(sz));
+            out.annotate(4, name + "_off: " + spaces + Hex.u4(offset));
+        }
+
+        out.writeInt(sz);
+        out.writeInt(offset);
+    }
+
+    /**
+     * Adds an item to this instance. This will in turn tell the given item
+     * that it has been added to this instance. It is invalid to add the
+     * same item to more than one instance, nor to add the same items
+     * multiple times to a single instance.
+     *
+     * @param item {@code non-null;} the item to add
+     */
+    public void add(OffsettedItem item) {
+        throwIfPrepared();
+
+        try {
+            if (item.getAlignment() > getAlignment()) {
+                throw new IllegalArgumentException(
+                        "incompatible item alignment");
+            }
+        } catch (NullPointerException ex) {
+            // Elucidate the exception.
+            throw new NullPointerException("item == null");
+        }
+
+        items.add(item);
+    }
+
+    /**
+     * Interns an item in this instance, returning the interned instance
+     * (which may not be the one passed in). This will add the item if no
+     * equal item has been added.
+     *
+     * @param item {@code non-null;} the item to intern
+     * @return {@code non-null;} the equivalent interned instance
+     */
+    public synchronized <T extends OffsettedItem> T intern(T item) {
+        throwIfPrepared();
+
+        OffsettedItem result = interns.get(item);
+
+        if (result != null) {
+            return (T) result;
+        }
+
+        add(item);
+        interns.put(item, item);
+        return item;
+    }
+
+    /**
+     * Gets an item which was previously interned.
+     *
+     * @param item {@code non-null;} the item to look for
+     * @return {@code non-null;} the equivalent already-interned instance
+     */
+    public <T extends OffsettedItem> T get(T item) {
+        throwIfNotPrepared();
+
+        OffsettedItem result = interns.get(item);
+
+        if (result != null) {
+            return (T) result;
+        }
+
+        throw new NoSuchElementException(item.toString());
+    }
+
+    /**
+     * Writes an index of contents of the items in this instance of the
+     * given type. If there are none, this writes nothing. If there are any,
+     * then the index is preceded by the given intro string.
+     *
+     * @param out {@code non-null;} where to write to
+     * @param itemType {@code non-null;} the item type of interest
+     * @param intro {@code non-null;} the introductory string for non-empty indices
+     */
+    public void writeIndexAnnotation(AnnotatedOutput out, ItemType itemType,
+            String intro) {
+        throwIfNotPrepared();
+
+        TreeMap<String, OffsettedItem> index =
+            new TreeMap<String, OffsettedItem>();
+
+        for (OffsettedItem item : items) {
+            if (item.itemType() == itemType) {
+                String label = item.toHuman();
+                index.put(label, item);
+            }
+        }
+
+        if (index.size() == 0) {
+            return;
+        }
+
+        out.annotate(0, intro);
+
+        for (Map.Entry<String, OffsettedItem> entry : index.entrySet()) {
+            String label = entry.getKey();
+            OffsettedItem item = entry.getValue();
+            out.annotate(0, item.offsetString() + ' ' + label + '\n');
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void prepare0() {
+        DexFile file = getFile();
+
+        /*
+         * It's okay for new items to be added as a result of an
+         * addContents() call; we just have to deal with the possibility.
+         */
+
+        int i = 0;
+        for (;;) {
+            int sz = items.size();
+            if (i >= sz) {
+                break;
+            }
+
+            for (/*i*/; i < sz; i++) {
+                OffsettedItem one = items.get(i);
+                one.addContents(file);
+            }
+        }
+    }
+
+    /**
+     * Places all the items in this instance at particular offsets. This
+     * will call {@link OffsettedItem#place} on each item. If an item
+     * does not know its write size before the call to {@code place},
+     * it is that call which is responsible for setting the write size.
+     * This method may only be called once per instance; subsequent calls
+     * will throw an exception.
+     */
+    public void placeItems() {
+        throwIfNotPrepared();
+
+        switch (sort) {
+            case INSTANCE: {
+                Collections.sort(items);
+                break;
+            }
+            case TYPE: {
+                Collections.sort(items, TYPE_SORTER);
+                break;
+            }
+        }
+
+        int sz = items.size();
+        int outAt = 0;
+        for (int i = 0; i < sz; i++) {
+            OffsettedItem one = items.get(i);
+            try {
+                int placedAt = one.place(this, outAt);
+
+                if (placedAt < outAt) {
+                    throw new RuntimeException("bogus place() result for " +
+                            one);
+                }
+
+                outAt = placedAt + one.writeSize();
+            } catch (RuntimeException ex) {
+                throw ExceptionWithContext.withContext(ex,
+                        "...while placing " + one);
+            }
+        }
+
+        writeSize = outAt;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(AnnotatedOutput out) {
+        boolean annotates = out.annotates();
+        boolean first = true;
+        DexFile file = getFile();
+        int at = 0;
+
+        for (OffsettedItem one : items) {
+            if (annotates) {
+                if (first) {
+                    first = false;
+                } else {
+                    out.annotate(0, "\n");
+                }
+            }
+
+            int alignMask = one.getAlignment() - 1;
+            int writeAt = (at + alignMask) & ~alignMask;
+
+            if (at != writeAt) {
+                out.writeZeroes(writeAt - at);
+                at = writeAt;
+            }
+
+            one.writeTo(file, out);
+            at += one.writeSize();
+        }
+
+        if (at != writeSize) {
+            throw new RuntimeException("output size mismatch");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/OffsettedItem.java b/dx/src/com/android/dx/dex/file/OffsettedItem.java
new file mode 100644
index 0000000..e947ed0
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/OffsettedItem.java
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.util.AnnotatedOutput;
+
+/**
+ * An item in a Dalvik file which is referenced by absolute offset.
+ */
+public abstract class OffsettedItem extends Item
+        implements Comparable<OffsettedItem> {
+    /** {@code > 0;} alignment requirement */
+    private final int alignment;
+
+    /** {@code >= -1;} the size of this instance when written, in bytes, or
+     * {@code -1} if not yet known */
+    private int writeSize;
+
+    /**
+     * {@code null-ok;} section the item was added to, or {@code null} if
+     * not yet added
+     */
+    private Section addedTo;
+
+    /**
+     * {@code >= -1;} assigned offset of the item from the start of its section,
+     * or {@code -1} if not yet assigned
+     */
+    private int offset;
+
+    /**
+     * Gets the absolute offset of the given item, returning {@code 0}
+     * if handed {@code null}.
+     *
+     * @param item {@code null-ok;} the item in question
+     * @return {@code >= 0;} the item's absolute offset, or {@code 0}
+     * if {@code item == null}
+     */
+    public static int getAbsoluteOffsetOr0(OffsettedItem item) {
+        if (item == null) {
+            return 0;
+        }
+
+        return item.getAbsoluteOffset();
+    }
+
+    /**
+     * Constructs an instance. The offset is initially unassigned.
+     *
+     * @param alignment {@code > 0;} output alignment requirement; must be a
+     * power of 2
+     * @param writeSize {@code >= -1;} the size of this instance when written,
+     * in bytes, or {@code -1} if not immediately known
+     */
+    public OffsettedItem(int alignment, int writeSize) {
+        Section.validateAlignment(alignment);
+
+        if (writeSize < -1) {
+            throw new IllegalArgumentException("writeSize < -1");
+        }
+
+        this.alignment = alignment;
+        this.writeSize = writeSize;
+        this.addedTo = null;
+        this.offset = -1;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Comparisons for this class are defined to be type-major (if the
+     * types don't match then the objects are not equal), with
+     * {@link #compareTo0} deciding same-type comparisons.
+     */
+    @Override
+    public final boolean equals(Object other) {
+        if (this == other) {
+            return true;
+        }
+
+        OffsettedItem otherItem = (OffsettedItem) other;
+        ItemType thisType = itemType();
+        ItemType otherType = otherItem.itemType();
+
+        if (thisType != otherType) {
+            return false;
+        }
+
+        return (compareTo0(otherItem) == 0);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Comparisons for this class are defined to be class-major (if the
+     * classes don't match then the objects are not equal), with
+     * {@link #compareTo0} deciding same-class comparisons.
+     */
+    @Override
+    public final int compareTo(OffsettedItem other) {
+        if (this == other) {
+            return 0;
+        }
+
+        ItemType thisType = itemType();
+        ItemType otherType = other.itemType();
+
+        if (thisType != otherType) {
+            return thisType.compareTo(otherType);
+        }
+
+        return compareTo0(other);
+    }
+
+    /**
+     * Sets the write size of this item. This may only be called once
+     * per instance, and only if the size was unknown upon instance
+     * creation.
+     *
+     * @param writeSize {@code > 0;} the write size, in bytes
+     */
+    public final void setWriteSize(int writeSize) {
+        if (writeSize < 0) {
+            throw new IllegalArgumentException("writeSize < 0");
+        }
+
+        if (this.writeSize >= 0) {
+            throw new UnsupportedOperationException("writeSize already set");
+        }
+
+        this.writeSize = writeSize;
+    }
+
+    /** {@inheritDoc}
+     *
+     * @throws UnsupportedOperationException thrown if the write size
+     * is not yet known
+     */
+    @Override
+    public final int writeSize() {
+        if (writeSize < 0) {
+            throw new UnsupportedOperationException("writeSize is unknown");
+        }
+
+        return writeSize;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void writeTo(DexFile file, AnnotatedOutput out) {
+        out.alignTo(alignment);
+
+        try {
+            if (writeSize < 0) {
+                throw new UnsupportedOperationException(
+                        "writeSize is unknown");
+            }
+            out.assertCursor(getAbsoluteOffset());
+        } catch (RuntimeException ex) {
+            throw ExceptionWithContext.withContext(ex,
+                    "...while writing " + this);
+        }
+
+        writeTo0(file, out);
+    }
+
+    /**
+     * Gets the relative item offset. The offset is from the start of
+     * the section which the instance was written to.
+     *
+     * @return {@code >= 0;} the offset
+     * @throws RuntimeException thrown if the offset is not yet known
+     */
+    public final int getRelativeOffset() {
+        if (offset < 0) {
+            throw new RuntimeException("offset not yet known");
+        }
+
+        return offset;
+    }
+
+    /**
+     * Gets the absolute item offset. The offset is from the start of
+     * the file which the instance was written to.
+     *
+     * @return {@code >= 0;} the offset
+     * @throws RuntimeException thrown if the offset is not yet known
+     */
+    public final int getAbsoluteOffset() {
+        if (offset < 0) {
+            throw new RuntimeException("offset not yet known");
+        }
+
+        return addedTo.getAbsoluteOffset(offset);
+    }
+
+    /**
+     * Indicates that this item has been added to the given section at
+     * the given offset. It is only valid to call this method once per
+     * instance.
+     *
+     * @param addedTo {@code non-null;} the section this instance has
+     * been added to
+     * @param offset {@code >= 0;} the desired offset from the start of the
+     * section where this instance was placed
+     * @return {@code >= 0;} the offset that this instance should be placed at
+     * in order to meet its alignment constraint
+     */
+    public final int place(Section addedTo, int offset) {
+        if (addedTo == null) {
+            throw new NullPointerException("addedTo == null");
+        }
+
+        if (offset < 0) {
+            throw new IllegalArgumentException("offset < 0");
+        }
+
+        if (this.addedTo != null) {
+            throw new RuntimeException("already written");
+        }
+
+        int mask = alignment - 1;
+        offset = (offset + mask) & ~mask;
+
+        this.addedTo = addedTo;
+        this.offset = offset;
+
+        place0(addedTo, offset);
+
+        return offset;
+    }
+
+    /**
+     * Gets the alignment requirement of this instance. An instance should
+     * only be written when so aligned.
+     *
+     * @return {@code > 0;} the alignment requirement; must be a power of 2
+     */
+    public final int getAlignment() {
+        return alignment;
+    }
+
+    /**
+     * Gets the absolute offset of this item as a string, suitable for
+     * including in annotations.
+     *
+     * @return {@code non-null;} the offset string
+     */
+    public final String offsetString() {
+        return '[' + Integer.toHexString(getAbsoluteOffset()) + ']';
+    }
+
+    /**
+     * Gets a short human-readable string representing this instance.
+     *
+     * @return {@code non-null;} the human form
+     */
+    public abstract String toHuman();
+
+    /**
+     * Compares this instance to another which is guaranteed to be of
+     * the same class. The default implementation of this method is to
+     * throw an exception (unsupported operation). If a particular
+     * class needs to actually sort, then it should override this
+     * method.
+     *
+     * @param other {@code non-null;} instance to compare to
+     * @return {@code -1}, {@code 0}, or {@code 1}, depending
+     * on the sort order of this instance and the other
+     */
+    protected int compareTo0(OffsettedItem other) {
+        throw new UnsupportedOperationException("unsupported");
+    }
+
+    /**
+     * Does additional work required when placing an instance. The
+     * default implementation of this method is a no-op. If a
+     * particular class needs to do something special, then it should
+     * override this method. In particular, if this instance did not
+     * know its write size up-front, then this method is responsible
+     * for setting it.
+     *
+     * @param addedTo {@code non-null;} the section this instance has been added to
+     * @param offset {@code >= 0;} the offset from the start of the
+     * section where this instance was placed
+     */
+    protected void place0(Section addedTo, int offset) {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Performs the actual write of the contents of this instance to
+     * the given data section. This is called by {@link #writeTo},
+     * which will have taken care of ensuring alignment.
+     *
+     * @param file {@code non-null;} the file to use for reference
+     * @param out {@code non-null;} where to write to
+     */
+    protected abstract void writeTo0(DexFile file, AnnotatedOutput out);
+}
diff --git a/dx/src/com/android/dx/dex/file/ParameterAnnotationStruct.java b/dx/src/com/android/dx/dex/file/ParameterAnnotationStruct.java
new file mode 100644
index 0000000..73b63ff
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/ParameterAnnotationStruct.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.annotation.Annotations;
+import com.android.dx.rop.annotation.AnnotationsList;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import com.android.dx.util.ToHuman;
+import java.util.ArrayList;
+
+/**
+ * Association of a method and its parameter annotations.
+ */
+public final class ParameterAnnotationStruct
+        implements ToHuman, Comparable<ParameterAnnotationStruct> {
+    /** {@code non-null;} the method in question */
+    private final CstMethodRef method;
+
+    /** {@code non-null;} the associated annotations list */
+    private final AnnotationsList annotationsList;
+
+    /** {@code non-null;} the associated annotations list, as an item */
+    private final UniformListItem<AnnotationSetRefItem> annotationsItem;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param method {@code non-null;} the method in question
+     * @param annotationsList {@code non-null;} the associated annotations list
+     * @param dexFile {@code non-null;} dex output
+     */
+    public ParameterAnnotationStruct(CstMethodRef method,
+            AnnotationsList annotationsList, DexFile dexFile) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        if (annotationsList == null) {
+            throw new NullPointerException("annotationsList == null");
+        }
+
+        this.method = method;
+        this.annotationsList = annotationsList;
+
+        /*
+         * Construct an item for the annotations list. TODO: This
+         * requires way too much copying; fix it.
+         */
+
+        int size = annotationsList.size();
+        ArrayList<AnnotationSetRefItem> arrayList = new
+            ArrayList<AnnotationSetRefItem>(size);
+
+        for (int i = 0; i < size; i++) {
+            Annotations annotations = annotationsList.get(i);
+            AnnotationSetItem item = new AnnotationSetItem(annotations, dexFile);
+            arrayList.add(new AnnotationSetRefItem(item));
+        }
+
+        this.annotationsItem = new UniformListItem<AnnotationSetRefItem>(
+                ItemType.TYPE_ANNOTATION_SET_REF_LIST, arrayList);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return method.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof ParameterAnnotationStruct)) {
+            return false;
+        }
+
+        return method.equals(((ParameterAnnotationStruct) other).method);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(ParameterAnnotationStruct other) {
+        return method.compareTo(other.method);
+    }
+
+    /** {@inheritDoc} */
+    public void addContents(DexFile file) {
+        MethodIdsSection methodIds = file.getMethodIds();
+        MixedItemSection wordData = file.getWordData();
+
+        methodIds.intern(method);
+        wordData.add(annotationsItem);
+    }
+
+    /** {@inheritDoc} */
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        int methodIdx = file.getMethodIds().indexOf(method);
+        int annotationsOff = annotationsItem.getAbsoluteOffset();
+
+        if (out.annotates()) {
+            out.annotate(0, "    " + method.toHuman());
+            out.annotate(4, "      method_idx:      " + Hex.u4(methodIdx));
+            out.annotate(4, "      annotations_off: " +
+                    Hex.u4(annotationsOff));
+        }
+
+        out.writeInt(methodIdx);
+        out.writeInt(annotationsOff);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append(method.toHuman());
+        sb.append(": ");
+
+        boolean first = true;
+        for (AnnotationSetRefItem item : annotationsItem.getItems()) {
+            if (first) {
+                first = false;
+            } else {
+                sb.append(", ");
+            }
+            sb.append(item.toHuman());
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Gets the method this item is for.
+     *
+     * @return {@code non-null;} the method
+     */
+    public CstMethodRef getMethod() {
+        return method;
+    }
+
+    /**
+     * Gets the associated annotations list.
+     *
+     * @return {@code non-null;} the annotations list
+     */
+    public AnnotationsList getAnnotationsList() {
+        return annotationsList;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/ProtoIdItem.java b/dx/src/com/android/dx/dex/file/ProtoIdItem.java
new file mode 100644
index 0000000..19eb3d2
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/ProtoIdItem.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.SizeOf;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of a method prototype reference inside a Dalvik file.
+ */
+public final class ProtoIdItem extends IndexedItem {
+    /** {@code non-null;} the wrapped prototype */
+    private final Prototype prototype;
+
+    /** {@code non-null;} the short-form of the prototype */
+    private final CstString shortForm;
+
+    /**
+     * {@code null-ok;} the list of parameter types or {@code null} if this
+     * prototype has no parameters
+     */
+    private TypeListItem parameterTypes;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param prototype {@code non-null;} the constant for the prototype
+     */
+    public ProtoIdItem(Prototype prototype) {
+        if (prototype == null) {
+            throw new NullPointerException("prototype == null");
+        }
+
+        this.prototype = prototype;
+        this.shortForm = makeShortForm(prototype);
+
+        StdTypeList parameters = prototype.getParameterTypes();
+        this.parameterTypes = (parameters.size() == 0) ? null
+            : new TypeListItem(parameters);
+    }
+
+    /**
+     * Creates the short-form of the given prototype.
+     *
+     * @param prototype {@code non-null;} the prototype
+     * @return {@code non-null;} the short form
+     */
+    private static CstString makeShortForm(Prototype prototype) {
+        StdTypeList parameters = prototype.getParameterTypes();
+        int size = parameters.size();
+        StringBuilder sb = new StringBuilder(size + 1);
+
+        sb.append(shortFormCharFor(prototype.getReturnType()));
+
+        for (int i = 0; i < size; i++) {
+            sb.append(shortFormCharFor(parameters.getType(i)));
+        }
+
+        return new CstString(sb.toString());
+    }
+
+    /**
+     * Gets the short-form character for the given type.
+     *
+     * @param type {@code non-null;} the type
+     * @return the corresponding short-form character
+     */
+    private static char shortFormCharFor(Type type) {
+        char descriptorChar = type.getDescriptor().charAt(0);
+
+        if (descriptorChar == '[') {
+            return 'L';
+        }
+
+        return descriptorChar;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_PROTO_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        return SizeOf.PROTO_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        StringIdsSection stringIds = file.getStringIds();
+        TypeIdsSection typeIds = file.getTypeIds();
+        MixedItemSection typeLists = file.getTypeLists();
+
+        typeIds.intern(prototype.getReturnType());
+        stringIds.intern(shortForm);
+
+        if (parameterTypes != null) {
+            parameterTypes = typeLists.intern(parameterTypes);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        int shortyIdx = file.getStringIds().indexOf(shortForm);
+        int returnIdx = file.getTypeIds().indexOf(prototype.getReturnType());
+        int paramsOff = OffsettedItem.getAbsoluteOffsetOr0(parameterTypes);
+
+        if (out.annotates()) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(prototype.getReturnType().toHuman());
+            sb.append(" proto(");
+
+            StdTypeList params = prototype.getParameterTypes();
+            int size = params.size();
+
+            for (int i = 0; i < size; i++) {
+                if (i != 0) {
+                    sb.append(", ");
+                }
+                sb.append(params.getType(i).toHuman());
+            }
+
+            sb.append(")");
+            out.annotate(0, indexString() + ' ' + sb.toString());
+            out.annotate(4, "  shorty_idx:      " + Hex.u4(shortyIdx) +
+                    " // " + shortForm.toQuoted());
+            out.annotate(4, "  return_type_idx: " + Hex.u4(returnIdx) +
+                    " // " + prototype.getReturnType().toHuman());
+            out.annotate(4, "  parameters_off:  " + Hex.u4(paramsOff));
+        }
+
+        out.writeInt(shortyIdx);
+        out.writeInt(returnIdx);
+        out.writeInt(paramsOff);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/ProtoIdsSection.java b/dx/src/com/android/dx/dex/file/ProtoIdsSection.java
new file mode 100644
index 0000000..41be5e9
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/ProtoIdsSection.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.Collection;
+import java.util.TreeMap;
+
+/**
+ * Proto (method prototype) identifiers list section of a
+ * {@code .dex} file.
+ */
+public final class ProtoIdsSection extends UniformItemSection {
+    /**
+     * {@code non-null;} map from method prototypes to {@link ProtoIdItem} instances
+     */
+    private final TreeMap<Prototype, ProtoIdItem> protoIds;
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param file {@code non-null;} file that this instance is part of
+     */
+    public ProtoIdsSection(DexFile file) {
+        super("proto_ids", file, 4);
+
+        protoIds = new TreeMap<Prototype, ProtoIdItem>();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        return protoIds.values();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IndexedItem get(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        if (!(cst instanceof CstProtoRef)) {
+            throw new IllegalArgumentException("cst not instance of CstProtoRef");
+        }
+
+        throwIfNotPrepared();
+        CstProtoRef protoRef = (CstProtoRef) cst;
+        IndexedItem result = protoIds.get(protoRef.getPrototype());
+        if (result == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return result;
+    }
+
+    /**
+     * Writes the portion of the file header that refers to this instance.
+     *
+     * @param out {@code non-null;} where to write
+     */
+    public void writeHeaderPart(AnnotatedOutput out) {
+        throwIfNotPrepared();
+
+        int sz = protoIds.size();
+        int offset = (sz == 0) ? 0 : getFileOffset();
+
+        if (sz > 65536) {
+            throw new UnsupportedOperationException("too many proto ids");
+        }
+
+        if (out.annotates()) {
+            out.annotate(4, "proto_ids_size:  " + Hex.u4(sz));
+            out.annotate(4, "proto_ids_off:   " + Hex.u4(offset));
+        }
+
+        out.writeInt(sz);
+        out.writeInt(offset);
+    }
+
+    /**
+     * Interns an element into this instance.
+     *
+     * @param prototype {@code non-null;} the prototype to intern
+     * @return {@code non-null;} the interned reference
+     */
+    public synchronized ProtoIdItem intern(Prototype prototype) {
+        if (prototype == null) {
+            throw new NullPointerException("prototype == null");
+        }
+
+        throwIfPrepared();
+
+        ProtoIdItem result = protoIds.get(prototype);
+
+        if (result == null) {
+            result = new ProtoIdItem(prototype);
+            protoIds.put(prototype, result);
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the index of the given prototype, which must have
+     * been added to this instance.
+     *
+     * @param prototype {@code non-null;} the prototype to look up
+     * @return {@code >= 0;} the reference's index
+     */
+    public int indexOf(Prototype prototype) {
+        if (prototype == null) {
+            throw new NullPointerException("prototype == null");
+        }
+
+        throwIfNotPrepared();
+
+        ProtoIdItem item = protoIds.get(prototype);
+
+        if (item == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return item.getIndex();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void orderItems() {
+        int idx = 0;
+
+        for (Object i : items()) {
+            ((ProtoIdItem) i).setIndex(idx);
+            idx++;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/Section.java b/dx/src/com/android/dx/dex/file/Section.java
new file mode 100644
index 0000000..bde714c
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/Section.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.util.AnnotatedOutput;
+import java.util.Collection;
+
+/**
+ * A section of a {@code .dex} file. Each section consists of a list
+ * of items of some sort or other.
+ */
+public abstract class Section {
+    /** {@code null-ok;} name of this part, for annotation purposes */
+    private final String name;
+
+    /** {@code non-null;} file that this instance is part of */
+    private final DexFile file;
+
+    /** {@code > 0;} alignment requirement for the final output;
+     * must be a power of 2 */
+    private final int alignment;
+
+    /** {@code >= -1;} offset from the start of the file to this part, or
+     * {@code -1} if not yet known */
+    private int fileOffset;
+
+    /** whether {@link #prepare} has been called successfully on this
+     * instance */
+    private boolean prepared;
+
+    /**
+     * Validates an alignment.
+     *
+     * @param alignment the alignment
+     * @throws IllegalArgumentException thrown if {@code alignment}
+     * isn't a positive power of 2
+     */
+    public static void validateAlignment(int alignment) {
+        if ((alignment <= 0) ||
+            (alignment & (alignment - 1)) != 0) {
+            throw new IllegalArgumentException("invalid alignment");
+        }
+    }
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param name {@code null-ok;} the name of this instance, for annotation
+     * purposes
+     * @param file {@code non-null;} file that this instance is part of
+     * @param alignment {@code > 0;} alignment requirement for the final output;
+     * must be a power of 2
+     */
+    public Section(String name, DexFile file, int alignment) {
+        if (file == null) {
+            throw new NullPointerException("file == null");
+        }
+
+        validateAlignment(alignment);
+
+        this.name = name;
+        this.file = file;
+        this.alignment = alignment;
+        this.fileOffset = -1;
+        this.prepared = false;
+    }
+
+    /**
+     * Gets the file that this instance is part of.
+     *
+     * @return {@code non-null;} the file
+     */
+    public final DexFile getFile() {
+        return file;
+    }
+
+    /**
+     * Gets the alignment for this instance's final output.
+     *
+     * @return {@code > 0;} the alignment
+     */
+    public final int getAlignment() {
+        return alignment;
+    }
+
+    /**
+     * Gets the offset from the start of the file to this part. This
+     * throws an exception if the offset has not yet been set.
+     *
+     * @return {@code >= 0;} the file offset
+     */
+    public final int getFileOffset() {
+        if (fileOffset < 0) {
+            throw new RuntimeException("fileOffset not set");
+        }
+
+        return fileOffset;
+    }
+
+    /**
+     * Sets the file offset. It is only valid to call this method once
+     * once per instance.
+     *
+     * @param fileOffset {@code >= 0;} the desired offset from the start of the
+     * file where this for this instance
+     * @return {@code >= 0;} the offset that this instance should be placed at
+     * in order to meet its alignment constraint
+     */
+    public final int setFileOffset(int fileOffset) {
+        if (fileOffset < 0) {
+            throw new IllegalArgumentException("fileOffset < 0");
+        }
+
+        if (this.fileOffset >= 0) {
+            throw new RuntimeException("fileOffset already set");
+        }
+
+        int mask = alignment - 1;
+        fileOffset = (fileOffset + mask) & ~mask;
+
+        this.fileOffset = fileOffset;
+
+        return fileOffset;
+    }
+
+    /**
+     * Writes this instance to the given raw data object.
+     *
+     * @param out {@code non-null;} where to write to
+     */
+    public final void writeTo(AnnotatedOutput out) {
+        throwIfNotPrepared();
+        align(out);
+
+        int cursor = out.getCursor();
+
+        if (fileOffset < 0) {
+            fileOffset = cursor;
+        } else if (fileOffset != cursor) {
+            throw new RuntimeException("alignment mismatch: for " + this +
+                                       ", at " + cursor +
+                                       ", but expected " + fileOffset);
+        }
+
+        if (out.annotates()) {
+            if (name != null) {
+                out.annotate(0, "\n" + name + ":");
+            } else if (cursor != 0) {
+                out.annotate(0, "\n");
+            }
+        }
+
+        writeTo0(out);
+    }
+
+    /**
+     * Returns the absolute file offset, given an offset from the
+     * start of this instance's output. This is only valid to call
+     * once this instance has been assigned a file offset (via {@link
+     * #setFileOffset}).
+     *
+     * @param relative {@code >= 0;} the relative offset
+     * @return {@code >= 0;} the corresponding absolute file offset
+     */
+    public final int getAbsoluteOffset(int relative) {
+        if (relative < 0) {
+            throw new IllegalArgumentException("relative < 0");
+        }
+
+        if (fileOffset < 0) {
+            throw new RuntimeException("fileOffset not yet set");
+        }
+
+        return fileOffset + relative;
+    }
+
+    /**
+     * Returns the absolute file offset of the given item which must
+     * be contained in this section. This is only valid to call
+     * once this instance has been assigned a file offset (via {@link
+     * #setFileOffset}).
+     *
+     * <p><b>Note:</b> Subclasses must implement this as appropriate for
+     * their contents.</p>
+     *
+     * @param item {@code non-null;} the item in question
+     * @return {@code >= 0;} the item's absolute file offset
+     */
+    public abstract int getAbsoluteItemOffset(Item item);
+
+    /**
+     * Prepares this instance for writing. This performs any necessary
+     * prerequisites, including particularly adding stuff to other
+     * sections. This method may only be called once per instance;
+     * subsequent calls will throw an exception.
+     */
+    public final void prepare() {
+        throwIfPrepared();
+        prepare0();
+        prepared = true;
+    }
+
+    /**
+     * Gets the collection of all the items in this section.
+     * It is not valid to attempt to change the returned list.
+     *
+     * @return {@code non-null;} the items
+     */
+    public abstract Collection<? extends Item> items();
+
+    /**
+     * Does the main work of {@link #prepare}.
+     */
+    protected abstract void prepare0();
+
+    /**
+     * Gets the size of this instance when output, in bytes.
+     *
+     * @return {@code >= 0;} the size of this instance, in bytes
+     */
+    public abstract int writeSize();
+
+    /**
+     * Throws an exception if {@link #prepare} has not been
+     * called on this instance.
+     */
+    protected final void throwIfNotPrepared() {
+        if (!prepared) {
+            throw new RuntimeException("not prepared");
+        }
+    }
+
+    /**
+     * Throws an exception if {@link #prepare} has already been called
+     * on this instance.
+     */
+    protected final void throwIfPrepared() {
+        if (prepared) {
+            throw new RuntimeException("already prepared");
+        }
+    }
+
+    /**
+     * Aligns the output of the given data to the alignment of this instance.
+     *
+     * @param out {@code non-null;} the output to align
+     */
+    protected final void align(AnnotatedOutput out) {
+        out.alignTo(alignment);
+    }
+
+    /**
+     * Writes this instance to the given raw data object. This gets
+     * called by {@link #writeTo} after aligning the cursor of
+     * {@code out} and verifying that either the assigned file
+     * offset matches the actual cursor {@code out} or that the
+     * file offset was not previously assigned, in which case it gets
+     * assigned to {@code out}'s cursor.
+     *
+     * @param out {@code non-null;} where to write to
+     */
+    protected abstract void writeTo0(AnnotatedOutput out);
+
+    /**
+     * Returns the name of this section, for annotation purposes.
+     *
+     * @return {@code null-ok;} name of this part, for annotation purposes
+     */
+    protected final String getName() {
+        return name;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/Statistics.java b/dx/src/com/android/dx/dex/file/Statistics.java
new file mode 100644
index 0000000..42f5b49
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/Statistics.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.util.AnnotatedOutput;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.TreeMap;
+
+/**
+ * Statistics about the contents of a file.
+ */
+public final class Statistics {
+    /** {@code non-null;} data about each type of item */
+    private final HashMap<String, Data> dataMap;
+
+    /**
+     * Constructs an instance.
+     */
+    public Statistics() {
+        dataMap = new HashMap<String, Data>(50);
+    }
+
+    /**
+     * Adds the given item to the statistics.
+     *
+     * @param item {@code non-null;} the item to add
+     */
+    public void add(Item item) {
+        String typeName = item.typeName();
+        Data data = dataMap.get(typeName);
+
+        if (data == null) {
+            dataMap.put(typeName, new Data(item, typeName));
+        } else {
+            data.add(item);
+        }
+    }
+
+    /**
+     * Adds the given list of items to the statistics.
+     *
+     * @param list {@code non-null;} the list of items to add
+     */
+    public void addAll(Section list) {
+        Collection<? extends Item> items = list.items();
+        for (Item item : items) {
+            add(item);
+        }
+    }
+
+    /**
+     * Writes the statistics as an annotation.
+     *
+     * @param out {@code non-null;} where to write to
+     */
+    public final void writeAnnotation(AnnotatedOutput out) {
+        if (dataMap.size() == 0) {
+            return;
+        }
+
+        out.annotate(0, "\nstatistics:\n");
+
+        TreeMap<String, Data> sortedData = new TreeMap<String, Data>();
+
+        for (Data data : dataMap.values()) {
+            sortedData.put(data.name, data);
+        }
+
+        for (Data data : sortedData.values()) {
+            data.writeAnnotation(out);
+        }
+    }
+
+    public String toHuman() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("Statistics:\n");
+
+        TreeMap<String, Data> sortedData = new TreeMap<String, Data>();
+
+        for (Data data : dataMap.values()) {
+            sortedData.put(data.name, data);
+        }
+
+        for (Data data : sortedData.values()) {
+            sb.append(data.toHuman());
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Statistical data about a particular class.
+     */
+    private static class Data {
+        /** {@code non-null;} name to use as a label */
+        private final String name;
+
+        /** {@code >= 0;} number of instances */
+        private int count;
+
+        /** {@code >= 0;} total size of instances in bytes */
+        private int totalSize;
+
+        /** {@code >= 0;} largest size of any individual item */
+        private int largestSize;
+
+        /** {@code >= 0;} smallest size of any individual item */
+        private int smallestSize;
+
+        /**
+         * Constructs an instance for the given item.
+         *
+         * @param item {@code non-null;} item in question
+         * @param name {@code non-null;} type name to use
+         */
+        public Data(Item item, String name) {
+            int size = item.writeSize();
+
+            this.name = name;
+            this.count = 1;
+            this.totalSize = size;
+            this.largestSize = size;
+            this.smallestSize = size;
+        }
+
+        /**
+         * Incorporates a new item. This assumes the type name matches.
+         *
+         * @param item {@code non-null;} item to incorporate
+         */
+        public void add(Item item) {
+            int size = item.writeSize();
+
+            count++;
+            totalSize += size;
+
+            if (size > largestSize) {
+                largestSize = size;
+            }
+
+            if (size < smallestSize) {
+                smallestSize = size;
+            }
+        }
+
+        /**
+         * Writes this instance as an annotation.
+         *
+         * @param out {@code non-null;} where to write to
+         */
+        public void writeAnnotation(AnnotatedOutput out) {
+            out.annotate(toHuman());
+        }
+
+        /**
+         * Generates a human-readable string for this data item.
+         *
+         * @return string for human consumption.
+         */
+        public String toHuman() {
+            StringBuilder sb = new StringBuilder();
+
+            sb.append("  " + name + ": " +
+                         count + " item" + (count == 1 ? "" : "s") + "; " +
+                         totalSize + " bytes total\n");
+
+            if (smallestSize == largestSize) {
+                sb.append("    " + smallestSize + " bytes/item\n");
+            } else {
+                int average = totalSize / count;
+                sb.append("    " + smallestSize + ".." + largestSize +
+                             " bytes/item; average " + average + "\n");
+            }
+
+            return sb.toString();
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/StringDataItem.java b/dx/src/com/android/dx/dex/file/StringDataItem.java
new file mode 100644
index 0000000..38be344
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/StringDataItem.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.Leb128;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of string data for a particular string, in a Dalvik file.
+ */
+public final class StringDataItem extends OffsettedItem {
+    /** {@code non-null;} the string value */
+    private final CstString value;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param value {@code non-null;} the string value
+     */
+    public StringDataItem(CstString value) {
+        super(1, writeSize(value));
+
+        this.value = value;
+    }
+
+    /**
+     * Gets the write size for a given value.
+     *
+     * @param value {@code non-null;} the string value
+     * @return {@code >= 2}; the write size, in bytes
+     */
+    private static int writeSize(CstString value) {
+        int utf16Size = value.getUtf16Size();
+
+        // The +1 is for the '\0' termination byte.
+        return Leb128.unsignedLeb128Size(utf16Size)
+            + value.getUtf8Size() + 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_STRING_DATA_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        // Nothing to do here.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo0(DexFile file, AnnotatedOutput out) {
+        ByteArray bytes = value.getBytes();
+        int utf16Size = value.getUtf16Size();
+
+        if (out.annotates()) {
+            out.annotate(Leb128.unsignedLeb128Size(utf16Size),
+                    "utf16_size: " + Hex.u4(utf16Size));
+            out.annotate(bytes.size() + 1, value.toQuoted());
+        }
+
+        out.writeUleb128(utf16Size);
+        out.write(bytes);
+        out.writeByte(0);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return value.toQuoted();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(OffsettedItem other) {
+        StringDataItem otherData = (StringDataItem) other;
+
+        return value.compareTo(otherData.value);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/StringIdItem.java b/dx/src/com/android/dx/dex/file/StringIdItem.java
new file mode 100644
index 0000000..e4fb559
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/StringIdItem.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.SizeOf;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of a string inside a Dalvik file.
+ */
+public final class StringIdItem
+        extends IndexedItem implements Comparable {
+    /** {@code non-null;} the string value */
+    private final CstString value;
+
+    /** {@code null-ok;} associated string data object, if known */
+    private StringDataItem data;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param value {@code non-null;} the string value
+     */
+    public StringIdItem(CstString value) {
+        if (value == null) {
+            throw new NullPointerException("value == null");
+        }
+
+        this.value = value;
+        this.data = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof StringIdItem)) {
+            return false;
+        }
+
+        StringIdItem otherString = (StringIdItem) other;
+        return value.equals(otherString.value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return value.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(Object other) {
+        StringIdItem otherString = (StringIdItem) other;
+        return value.compareTo(otherString.value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_STRING_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        return SizeOf.STRING_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        if (data == null) {
+            // The string data hasn't yet been added, so add it.
+            MixedItemSection stringData = file.getStringData();
+            data = new StringDataItem(value);
+            stringData.add(data);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        int dataOff = data.getAbsoluteOffset();
+
+        if (out.annotates()) {
+            out.annotate(0, indexString() + ' ' + value.toQuoted(100));
+            out.annotate(4, "  string_data_off: " + Hex.u4(dataOff));
+        }
+
+        out.writeInt(dataOff);
+    }
+
+    /**
+     * Gets the string value.
+     *
+     * @return {@code non-null;} the value
+     */
+    public CstString getValue() {
+        return value;
+    }
+
+    /**
+     * Gets the associated data object for this instance, if known.
+     *
+     * @return {@code null-ok;} the associated data object or {@code null}
+     * if not yet known
+     */
+    public StringDataItem getData() {
+        return data;
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/StringIdsSection.java b/dx/src/com/android/dx/dex/file/StringIdsSection.java
new file mode 100644
index 0000000..6826c5a
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/StringIdsSection.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.Collection;
+import java.util.TreeMap;
+
+/**
+ * Strings list section of a {@code .dex} file.
+ */
+public final class StringIdsSection
+        extends UniformItemSection {
+    /**
+     * {@code non-null;} map from string constants to {@link
+     * StringIdItem} instances
+     */
+    private final TreeMap<CstString, StringIdItem> strings;
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param file {@code non-null;} file that this instance is part of
+     */
+    public StringIdsSection(DexFile file) {
+        super("string_ids", file, 4);
+
+        strings = new TreeMap<CstString, StringIdItem>();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        return strings.values();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IndexedItem get(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        throwIfNotPrepared();
+
+        IndexedItem result = strings.get((CstString) cst);
+
+        if (result == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return result;
+    }
+
+    /**
+     * Writes the portion of the file header that refers to this instance.
+     *
+     * @param out {@code non-null;} where to write
+     */
+    public void writeHeaderPart(AnnotatedOutput out) {
+        throwIfNotPrepared();
+
+        int sz = strings.size();
+        int offset = (sz == 0) ? 0 : getFileOffset();
+
+        if (out.annotates()) {
+            out.annotate(4, "string_ids_size: " + Hex.u4(sz));
+            out.annotate(4, "string_ids_off:  " + Hex.u4(offset));
+        }
+
+        out.writeInt(sz);
+        out.writeInt(offset);
+    }
+
+    /**
+     * Interns an element into this instance.
+     *
+     * @param string {@code non-null;} the string to intern, as a regular Java
+     * {@code String}
+     * @return {@code non-null;} the interned string
+     */
+    public StringIdItem intern(String string) {
+        return intern(new StringIdItem(new CstString(string)));
+    }
+
+    /**
+     * Interns an element into this instance.
+     *
+     * @param string {@code non-null;} the string to intern, as a constant
+     * @return {@code non-null;} the interned string
+     */
+    public StringIdItem intern(CstString string) {
+        return intern(new StringIdItem(string));
+    }
+
+    /**
+     * Interns an element into this instance.
+     *
+     * @param string {@code non-null;} the string to intern
+     * @return {@code non-null;} the interned string
+     */
+    public synchronized StringIdItem intern(StringIdItem string) {
+        if (string == null) {
+            throw new NullPointerException("string == null");
+        }
+
+        throwIfPrepared();
+
+        CstString value = string.getValue();
+        StringIdItem already = strings.get(value);
+
+        if (already != null) {
+            return already;
+        }
+
+        strings.put(value, string);
+        return string;
+    }
+
+    /**
+     * Interns the components of a name-and-type into this instance.
+     *
+     * @param nat {@code non-null;} the name-and-type
+     */
+    public synchronized void intern(CstNat nat) {
+        intern(nat.getName());
+        intern(nat.getDescriptor());
+    }
+
+    /**
+     * Gets the index of the given string, which must have been added
+     * to this instance.
+     *
+     * @param string {@code non-null;} the string to look up
+     * @return {@code >= 0;} the string's index
+     */
+    public int indexOf(CstString string) {
+        if (string == null) {
+            throw new NullPointerException("string == null");
+        }
+
+        throwIfNotPrepared();
+
+        StringIdItem s = strings.get(string);
+
+        if (s == null) {
+            throw new IllegalArgumentException("not found");
+        }
+
+        return s.getIndex();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void orderItems() {
+        int idx = 0;
+
+        for (StringIdItem s : strings.values()) {
+            s.setIndex(idx);
+            idx++;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/TypeIdItem.java b/dx/src/com/android/dx/dex/file/TypeIdItem.java
new file mode 100644
index 0000000..e585f1f
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/TypeIdItem.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.SizeOf;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of a type reference inside a Dalvik file.
+ */
+public final class TypeIdItem extends IdItem {
+    /**
+     * Constructs an instance.
+     *
+     * @param type {@code non-null;} the constant for the type
+     */
+    public TypeIdItem(CstType type) {
+        super(type);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_TYPE_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSize() {
+        return SizeOf.TYPE_ID_ITEM;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        file.getStringIds().intern(getDefiningClass().getDescriptor());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeTo(DexFile file, AnnotatedOutput out) {
+        CstType type = getDefiningClass();
+        CstString descriptor = type.getDescriptor();
+        int idx = file.getStringIds().indexOf(descriptor);
+
+        if (out.annotates()) {
+            out.annotate(0, indexString() + ' ' + descriptor.toHuman());
+            out.annotate(4, "  descriptor_idx: " + Hex.u4(idx));
+        }
+
+        out.writeInt(idx);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/TypeIdsSection.java b/dx/src/com/android/dx/dex/file/TypeIdsSection.java
new file mode 100644
index 0000000..e8a093a
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/TypeIdsSection.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.DexFormat;
+import com.android.dex.DexIndexOverflowException;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.Collection;
+import java.util.TreeMap;
+
+/**
+ * Type identifiers list section of a {@code .dex} file.
+ */
+public final class TypeIdsSection extends UniformItemSection {
+    /**
+     * {@code non-null;} map from types to {@link TypeIdItem} instances
+     */
+    private final TreeMap<Type, TypeIdItem> typeIds;
+
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param file {@code non-null;} file that this instance is part of
+     */
+    public TypeIdsSection(DexFile file) {
+        super("type_ids", file, 4);
+
+        typeIds = new TreeMap<Type, TypeIdItem>();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Collection<? extends Item> items() {
+        return typeIds.values();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IndexedItem get(Constant cst) {
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        throwIfNotPrepared();
+
+        Type type = ((CstType) cst).getClassType();
+        IndexedItem result = typeIds.get(type);
+
+        if (result == null) {
+            throw new IllegalArgumentException("not found: " + cst);
+        }
+
+        return result;
+    }
+
+    /**
+     * Writes the portion of the file header that refers to this instance.
+     *
+     * @param out {@code non-null;} where to write
+     */
+    public void writeHeaderPart(AnnotatedOutput out) {
+        throwIfNotPrepared();
+
+        int sz = typeIds.size();
+        int offset = (sz == 0) ? 0 : getFileOffset();
+
+        if (sz > DexFormat.MAX_TYPE_IDX + 1) {
+            throw new DexIndexOverflowException(
+                    String.format("Too many type identifiers to fit in one dex file: %1$d; max is %2$d.%n"
+                                    + "You may try using multi-dex. If multi-dex is enabled then the list of "
+                                    + "classes for the main dex list is too large.",
+                            items().size(), DexFormat.MAX_MEMBER_IDX + 1));
+        }
+
+        if (out.annotates()) {
+            out.annotate(4, "type_ids_size:   " + Hex.u4(sz));
+            out.annotate(4, "type_ids_off:    " + Hex.u4(offset));
+        }
+
+        out.writeInt(sz);
+        out.writeInt(offset);
+    }
+
+    /**
+     * Interns an element into this instance.
+     *
+     * @param type {@code non-null;} the type to intern
+     * @return {@code non-null;} the interned reference
+     */
+    public synchronized TypeIdItem intern(Type type) {
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        throwIfPrepared();
+
+        TypeIdItem result = typeIds.get(type);
+
+        if (result == null) {
+            result = new TypeIdItem(new CstType(type));
+            typeIds.put(type, result);
+        }
+
+        return result;
+    }
+
+    /**
+     * Interns an element into this instance.
+     *
+     * @param type {@code non-null;} the type to intern
+     * @return {@code non-null;} the interned reference
+     */
+    public synchronized TypeIdItem intern(CstType type) {
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        throwIfPrepared();
+
+        Type typePerSe = type.getClassType();
+        TypeIdItem result = typeIds.get(typePerSe);
+
+        if (result == null) {
+            result = new TypeIdItem(type);
+            typeIds.put(typePerSe, result);
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the index of the given type, which must have
+     * been added to this instance.
+     *
+     * @param type {@code non-null;} the type to look up
+     * @return {@code >= 0;} the reference's index
+     */
+    public int indexOf(Type type) {
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        throwIfNotPrepared();
+
+        TypeIdItem item = typeIds.get(type);
+
+        if (item == null) {
+            throw new IllegalArgumentException("not found: " + type);
+        }
+
+        return item.getIndex();
+    }
+
+    /**
+     * Gets the index of the given type, which must have
+     * been added to this instance.
+     *
+     * @param type {@code non-null;} the type to look up
+     * @return {@code >= 0;} the reference's index
+     */
+    public int indexOf(CstType type) {
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        return indexOf(type.getClassType());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void orderItems() {
+        int idx = 0;
+
+        for (Object i : items()) {
+            ((TypeIdItem) i).setIndex(idx);
+            idx++;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/TypeListItem.java b/dx/src/com/android/dx/dex/file/TypeListItem.java
new file mode 100644
index 0000000..8a7a6e4
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/TypeListItem.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+
+/**
+ * Representation of a list of class references.
+ */
+public final class TypeListItem extends OffsettedItem {
+    /** alignment requirement */
+    private static final int ALIGNMENT = 4;
+
+    /** element size in bytes */
+    private static final int ELEMENT_SIZE = 2;
+
+    /** header size in bytes */
+    private static final int HEADER_SIZE = 4;
+
+    /** {@code non-null;} the actual list */
+    private final TypeList list;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param list {@code non-null;} the actual list
+     */
+    public TypeListItem(TypeList list) {
+        super(ALIGNMENT, (list.size() * ELEMENT_SIZE) + HEADER_SIZE);
+
+        this.list = list;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return StdTypeList.hashContents(list);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return ItemType.TYPE_TYPE_LIST;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        TypeIdsSection typeIds = file.getTypeIds();
+        int sz = list.size();
+
+        for (int i = 0; i < sz; i++) {
+            typeIds.intern(list.getType(i));
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        throw new RuntimeException("unsupported");
+    }
+
+    /**
+     * Gets the underlying list.
+     *
+     * @return {@code non-null;} the list
+     */
+    public TypeList getList() {
+        return list;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        TypeIdsSection typeIds = file.getTypeIds();
+        int sz = list.size();
+
+        if (out.annotates()) {
+            out.annotate(0, offsetString() + " type_list");
+            out.annotate(HEADER_SIZE, "  size: " + Hex.u4(sz));
+            for (int i = 0; i < sz; i++) {
+                Type one = list.getType(i);
+                int idx = typeIds.indexOf(one);
+                out.annotate(ELEMENT_SIZE,
+                             "  " + Hex.u2(idx) + " // " + one.toHuman());
+            }
+        }
+
+        out.writeInt(sz);
+
+        for (int i = 0; i < sz; i++) {
+            out.writeShort(typeIds.indexOf(list.getType(i)));
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(OffsettedItem other) {
+        TypeList thisList = this.list;
+        TypeList otherList = ((TypeListItem) other).list;
+
+        return StdTypeList.compareContents(thisList, otherList);
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/UniformItemSection.java b/dx/src/com/android/dx/dex/file/UniformItemSection.java
new file mode 100644
index 0000000..ade268f
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/UniformItemSection.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.util.AnnotatedOutput;
+import java.util.Collection;
+
+/**
+ * A section of a {@code .dex} file which consists of a sequence of
+ * {@link Item} objects. Each of the items must have the same size in
+ * the output.
+ */
+public abstract class UniformItemSection extends Section {
+    /**
+     * Constructs an instance. The file offset is initially unknown.
+     *
+     * @param name {@code null-ok;} the name of this instance, for annotation
+     * purposes
+     * @param file {@code non-null;} file that this instance is part of
+     * @param alignment {@code > 0;} alignment requirement for the final output;
+     * must be a power of 2
+     */
+    public UniformItemSection(String name, DexFile file, int alignment) {
+        super(name, file, alignment);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int writeSize() {
+        Collection<? extends Item> items = items();
+        int sz = items.size();
+
+        if (sz == 0) {
+            return 0;
+        }
+
+        // Since each item has to be the same size, we can pick any.
+        return sz * items.iterator().next().writeSize();
+    }
+
+    /**
+     * Gets the item corresponding to the given {@link Constant}. This
+     * will throw an exception if the constant is not found, including
+     * if this instance isn't the sort that maps constants to {@link
+     * IndexedItem} instances.
+     *
+     * @param cst {@code non-null;} constant to look for
+     * @return {@code non-null;} the corresponding item found in this instance
+     */
+    public abstract IndexedItem get(Constant cst);
+
+    /** {@inheritDoc} */
+    @Override
+    protected final void prepare0() {
+        DexFile file = getFile();
+
+        orderItems();
+
+        for (Item one : items()) {
+            one.addContents(file);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected final void writeTo0(AnnotatedOutput out) {
+        DexFile file = getFile();
+        int alignment = getAlignment();
+
+        for (Item one : items()) {
+            one.writeTo(file, out);
+            out.alignTo(alignment);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int getAbsoluteItemOffset(Item item) {
+        /*
+         * Since all items must be the same size, we can use the size
+         * of the one we're given to calculate its offset.
+         */
+        IndexedItem ii = (IndexedItem) item;
+        int relativeOffset = ii.getIndex() * ii.writeSize();
+
+        return getAbsoluteOffset(relativeOffset);
+    }
+
+    /**
+     * Alters or picks the order for items in this instance if desired,
+     * so that subsequent calls to {@link #items} will yield a
+     * so-ordered collection. If the items in this instance are indexed,
+     * then this method should also assign indices.
+     */
+    protected abstract void orderItems();
+}
diff --git a/dx/src/com/android/dx/dex/file/UniformListItem.java b/dx/src/com/android/dx/dex/file/UniformListItem.java
new file mode 100644
index 0000000..a69a527
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/UniformListItem.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.List;
+
+/**
+ * Class that represents a contiguous list of uniform items. Each
+ * item in the list, in particular, must have the same write size and
+ * alignment.
+ *
+ * <p>This class inherits its alignment from its items, bumped up to
+ * {@code 4} if the items have a looser alignment requirement. If
+ * it is more than {@code 4}, then there will be a gap after the
+ * output list size (which is four bytes) and before the first item.</p>
+ *
+ * @param <T> type of element contained in an instance
+ */
+public final class UniformListItem<T extends OffsettedItem>
+        extends OffsettedItem {
+    /** the size of the list header */
+    private static final int HEADER_SIZE = 4;
+
+    /** {@code non-null;} the item type */
+    private final ItemType itemType;
+
+    /** {@code non-null;} the contents */
+    private final List<T> items;
+
+    /**
+     * Constructs an instance. It is illegal to modify the given list once
+     * it is used to construct an instance of this class.
+     *
+     * @param itemType {@code non-null;} the type of the item
+     * @param items {@code non-null and non-empty;} list of items to represent
+     */
+    public UniformListItem(ItemType itemType, List<T> items) {
+        super(getAlignment(items), writeSize(items));
+
+        if (itemType == null) {
+            throw new NullPointerException("itemType == null");
+        }
+
+        this.items = items;
+        this.itemType = itemType;
+    }
+
+    /**
+     * Helper for {@link #UniformListItem}, which returns the alignment
+     * requirement implied by the given list. See the header comment for
+     * more details.
+     *
+     * @param items {@code non-null;} list of items being represented
+     * @return {@code >= 4;} the alignment requirement
+     */
+    private static int getAlignment(List<? extends OffsettedItem> items) {
+        try {
+            // Since they all must have the same alignment, any one will do.
+            return Math.max(HEADER_SIZE, items.get(0).getAlignment());
+        } catch (IndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("items.size() == 0");
+        } catch (NullPointerException ex) {
+            // Translate the exception.
+            throw new NullPointerException("items == null");
+        }
+    }
+
+    /**
+     * Calculates the write size for the given list.
+     *
+     * @param items {@code non-null;} the list in question
+     * @return {@code >= 0;} the write size
+     */
+    private static int writeSize(List<? extends OffsettedItem> items) {
+        /*
+         * This class assumes all included items are the same size,
+         * an assumption which is verified in place0().
+         */
+        OffsettedItem first = items.get(0);
+        return (items.size() * first.writeSize()) + getAlignment(items);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public ItemType itemType() {
+        return itemType;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append(getClass().getName());
+        sb.append(items);
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addContents(DexFile file) {
+        for (OffsettedItem i : items) {
+            i.addContents(file);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final String toHuman() {
+        StringBuilder sb = new StringBuilder(100);
+        boolean first = true;
+
+        sb.append("{");
+
+        for (OffsettedItem i : items) {
+            if (first) {
+                first = false;
+            } else {
+                sb.append(", ");
+            }
+            sb.append(i.toHuman());
+        }
+
+        sb.append("}");
+        return sb.toString();
+    }
+
+    /**
+     * Gets the underlying list of items.
+     *
+     * @return {@code non-null;} the list
+     */
+    public final List<T> getItems() {
+        return items;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void place0(Section addedTo, int offset) {
+        offset += headerSize();
+
+        boolean first = true;
+        int theSize = -1;
+        int theAlignment = -1;
+
+        for (OffsettedItem i : items) {
+            int size = i.writeSize();
+            if (first) {
+                theSize = size;
+                theAlignment = i.getAlignment();
+                first = false;
+            } else {
+                if (size != theSize) {
+                    throw new UnsupportedOperationException(
+                            "item size mismatch");
+                }
+                if (i.getAlignment() != theAlignment) {
+                    throw new UnsupportedOperationException(
+                            "item alignment mismatch");
+                }
+            }
+
+            offset = i.place(addedTo, offset) + size;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void writeTo0(DexFile file, AnnotatedOutput out) {
+        int size = items.size();
+
+        if (out.annotates()) {
+            out.annotate(0, offsetString() + " " + typeName());
+            out.annotate(4, "  size: " + Hex.u4(size));
+        }
+
+        out.writeInt(size);
+
+        for (OffsettedItem i : items) {
+            i.writeTo(file, out);
+        }
+    }
+
+    /**
+     * Get the size of the header of this list.
+     *
+     * @return {@code >= 0;} the header size
+     */
+    private int headerSize() {
+        /*
+         * Because of how this instance was set up, this is the same
+         * as the alignment.
+         */
+        return getAlignment();
+    }
+}
diff --git a/dx/src/com/android/dx/dex/file/ValueEncoder.java b/dx/src/com/android/dx/dex/file/ValueEncoder.java
new file mode 100644
index 0000000..72f4cc3
--- /dev/null
+++ b/dx/src/com/android/dx/dex/file/ValueEncoder.java
@@ -0,0 +1,447 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.dex.file;
+
+import com.android.dex.EncodedValueCodec;
+import com.android.dx.rop.annotation.Annotation;
+import com.android.dx.rop.annotation.NameValuePair;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstAnnotation;
+import com.android.dx.rop.cst.CstArray;
+import com.android.dx.rop.cst.CstBoolean;
+import com.android.dx.rop.cst.CstByte;
+import com.android.dx.rop.cst.CstChar;
+import com.android.dx.rop.cst.CstDouble;
+import com.android.dx.rop.cst.CstEnumRef;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstFloat;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.CstKnownNull;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.rop.cst.CstLong;
+import com.android.dx.rop.cst.CstMethodHandle;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstShort;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.AnnotatedOutput;
+import com.android.dx.util.Hex;
+import java.util.Collection;
+
+/**
+ * Handler for writing out {@code encoded_values} and parts
+ * thereof.
+ */
+public final class ValueEncoder {
+    /** annotation value type constant: {@code byte} */
+    private static final int VALUE_BYTE = 0x00;
+
+    /** annotation value type constant: {@code short} */
+    private static final int VALUE_SHORT = 0x02;
+
+    /** annotation value type constant: {@code char} */
+    private static final int VALUE_CHAR = 0x03;
+
+    /** annotation value type constant: {@code int} */
+    private static final int VALUE_INT = 0x04;
+
+    /** annotation value type constant: {@code long} */
+    private static final int VALUE_LONG = 0x06;
+
+    /** annotation value type constant: {@code float} */
+    private static final int VALUE_FLOAT = 0x10;
+
+    /** annotation value type constant: {@code double} */
+    private static final int VALUE_DOUBLE = 0x11;
+
+    /** annotation value type constant: {@code method type} */
+    private static final int VALUE_METHOD_TYPE = 0x15;
+
+    /** annotation value type constant: {@code method handle} */
+    private static final int VALUE_METHOD_HANDLE = 0x16;
+
+    /** annotation value type constant: {@code string} */
+    private static final int VALUE_STRING = 0x17;
+
+    /** annotation value type constant: {@code type} */
+    private static final int VALUE_TYPE = 0x18;
+
+    /** annotation value type constant: {@code field} */
+    private static final int VALUE_FIELD = 0x19;
+
+    /** annotation value type constant: {@code method} */
+    private static final int VALUE_METHOD = 0x1a;
+
+    /** annotation value type constant: {@code enum} */
+    private static final int VALUE_ENUM = 0x1b;
+
+    /** annotation value type constant: {@code array} */
+    private static final int VALUE_ARRAY = 0x1c;
+
+    /** annotation value type constant: {@code annotation} */
+    private static final int VALUE_ANNOTATION = 0x1d;
+
+    /** annotation value type constant: {@code null} */
+    private static final int VALUE_NULL = 0x1e;
+
+    /** annotation value type constant: {@code boolean} */
+    private static final int VALUE_BOOLEAN = 0x1f;
+
+    /** {@code non-null;} file being written */
+    private final DexFile file;
+
+    /** {@code non-null;} output stream to write to */
+    private final AnnotatedOutput out;
+
+    /**
+     * Construct an instance.
+     *
+     * @param file {@code non-null;} file being written
+     * @param out {@code non-null;} output stream to write to
+     */
+    public ValueEncoder(DexFile file, AnnotatedOutput out) {
+        if (file == null) {
+            throw new NullPointerException("file == null");
+        }
+
+        if (out == null) {
+            throw new NullPointerException("out == null");
+        }
+
+        this.file = file;
+        this.out = out;
+    }
+
+    /**
+     * Writes out the encoded form of the given constant.
+     *
+     * @param cst {@code non-null;} the constant to write
+     */
+    public void writeConstant(Constant cst) {
+        int type = constantToValueType(cst);
+        int arg;
+
+        switch (type) {
+            case VALUE_BYTE:
+            case VALUE_SHORT:
+            case VALUE_INT:
+            case VALUE_LONG: {
+                long value = ((CstLiteralBits) cst).getLongBits();
+                EncodedValueCodec.writeSignedIntegralValue(out, type, value);
+                break;
+            }
+            case VALUE_CHAR: {
+                long value = ((CstLiteralBits) cst).getLongBits();
+                EncodedValueCodec.writeUnsignedIntegralValue(out, type, value);
+                break;
+            }
+            case VALUE_FLOAT: {
+                // Shift value left 32 so that right-zero-extension works.
+                long value = ((CstFloat) cst).getLongBits() << 32;
+                EncodedValueCodec.writeRightZeroExtendedValue(out, type, value);
+                break;
+            }
+            case VALUE_DOUBLE: {
+                long value = ((CstDouble) cst).getLongBits();
+                EncodedValueCodec.writeRightZeroExtendedValue(out, type, value);
+                break;
+            }
+            case VALUE_METHOD_TYPE: {
+                int index = file.getProtoIds().indexOf(((CstProtoRef) cst).getPrototype());
+                EncodedValueCodec.writeUnsignedIntegralValue(out, type, (long) index);
+                break;
+            }
+            case VALUE_METHOD_HANDLE: {
+                int index = file.getMethodHandles().indexOf((CstMethodHandle) cst);
+                EncodedValueCodec.writeUnsignedIntegralValue(out, type, (long) index);
+                break;
+            }
+            case VALUE_STRING: {
+                int index = file.getStringIds().indexOf((CstString) cst);
+                EncodedValueCodec.writeUnsignedIntegralValue(out, type, (long) index);
+                break;
+            }
+            case VALUE_TYPE: {
+                int index = file.getTypeIds().indexOf((CstType) cst);
+                EncodedValueCodec.writeUnsignedIntegralValue(out, type, (long) index);
+                break;
+            }
+            case VALUE_FIELD: {
+                int index = file.getFieldIds().indexOf((CstFieldRef) cst);
+                EncodedValueCodec.writeUnsignedIntegralValue(out, type, (long) index);
+                break;
+            }
+            case VALUE_METHOD: {
+                int index = file.getMethodIds().indexOf((CstMethodRef) cst);
+                EncodedValueCodec.writeUnsignedIntegralValue(out, type, (long) index);
+                break;
+            }
+            case VALUE_ENUM: {
+                CstFieldRef fieldRef = ((CstEnumRef) cst).getFieldRef();
+                int index = file.getFieldIds().indexOf(fieldRef);
+                EncodedValueCodec.writeUnsignedIntegralValue(out, type, (long) index);
+                break;
+            }
+            case VALUE_ARRAY: {
+                out.writeByte(type);
+                writeArray((CstArray) cst, false);
+                break;
+            }
+            case VALUE_ANNOTATION: {
+                out.writeByte(type);
+                writeAnnotation(((CstAnnotation) cst).getAnnotation(),
+                        false);
+                break;
+            }
+            case VALUE_NULL: {
+                out.writeByte(type);
+                break;
+            }
+            case VALUE_BOOLEAN: {
+                int value = ((CstBoolean) cst).getIntBits();
+                out.writeByte(type | (value << 5));
+                break;
+            }
+            default: {
+                throw new RuntimeException("Shouldn't happen");
+            }
+        }
+    }
+
+    /**
+     * Gets the value type for the given constant.
+     *
+     * @param cst {@code non-null;} the constant
+     * @return the value type; one of the {@code VALUE_*} constants
+     * defined by this class
+     */
+    private static int constantToValueType(Constant cst) {
+        /*
+         * TODO: Constant should probable have an associated enum, so this
+         * can be a switch().
+         */
+        if (cst instanceof CstByte) {
+            return VALUE_BYTE;
+        } else if (cst instanceof CstShort) {
+            return VALUE_SHORT;
+        } else if (cst instanceof CstChar) {
+            return VALUE_CHAR;
+        } else if (cst instanceof CstInteger) {
+            return VALUE_INT;
+        } else if (cst instanceof CstLong) {
+            return VALUE_LONG;
+        } else if (cst instanceof CstFloat) {
+            return VALUE_FLOAT;
+        } else if (cst instanceof CstDouble) {
+            return VALUE_DOUBLE;
+        } else if (cst instanceof CstProtoRef) {
+            return VALUE_METHOD_TYPE;
+        } else if (cst instanceof CstMethodHandle) {
+           return VALUE_METHOD_HANDLE;
+        } else if (cst instanceof CstString) {
+            return VALUE_STRING;
+        } else if (cst instanceof CstType) {
+            return VALUE_TYPE;
+        } else if (cst instanceof CstFieldRef) {
+            return VALUE_FIELD;
+        } else if (cst instanceof CstMethodRef) {
+            return VALUE_METHOD;
+        } else if (cst instanceof CstEnumRef) {
+            return VALUE_ENUM;
+        } else if (cst instanceof CstArray) {
+            return VALUE_ARRAY;
+        } else if (cst instanceof CstAnnotation) {
+            return VALUE_ANNOTATION;
+        } else if (cst instanceof CstKnownNull) {
+            return VALUE_NULL;
+        } else if (cst instanceof CstBoolean) {
+            return VALUE_BOOLEAN;
+        } else {
+            throw new RuntimeException("Shouldn't happen");
+        }
+    }
+
+    /**
+     * Writes out the encoded form of the given array, that is, as
+     * an {@code encoded_array} and not including a
+     * {@code value_type} prefix. If the output stream keeps
+     * (debugging) annotations and {@code topLevel} is
+     * {@code true}, then this method will write (debugging)
+     * annotations.
+     *
+     * @param array {@code non-null;} array instance to write
+     * @param topLevel {@code true} iff the given annotation is the
+     * top-level annotation or {@code false} if it is a sub-annotation
+     * of some other annotation
+     */
+    public void writeArray(CstArray array, boolean topLevel) {
+        boolean annotates = topLevel && out.annotates();
+        CstArray.List list = ((CstArray) array).getList();
+        int size = list.size();
+
+        if (annotates) {
+            out.annotate("  size: " + Hex.u4(size));
+        }
+
+        out.writeUleb128(size);
+
+        for (int i = 0; i < size; i++) {
+            Constant cst = list.get(i);
+            if (annotates) {
+                out.annotate("  [" + Integer.toHexString(i) + "] " +
+                        constantToHuman(cst));
+            }
+            writeConstant(cst);
+        }
+
+        if (annotates) {
+            out.endAnnotation();
+        }
+    }
+
+    /**
+     * Writes out the encoded form of the given annotation, that is,
+     * as an {@code encoded_annotation} and not including a
+     * {@code value_type} prefix. If the output stream keeps
+     * (debugging) annotations and {@code topLevel} is
+     * {@code true}, then this method will write (debugging)
+     * annotations.
+     *
+     * @param annotation {@code non-null;} annotation instance to write
+     * @param topLevel {@code true} iff the given annotation is the
+     * top-level annotation or {@code false} if it is a sub-annotation
+     * of some other annotation
+     */
+    public void writeAnnotation(Annotation annotation, boolean topLevel) {
+        boolean annotates = topLevel && out.annotates();
+        StringIdsSection stringIds = file.getStringIds();
+        TypeIdsSection typeIds = file.getTypeIds();
+
+        CstType type = annotation.getType();
+        int typeIdx = typeIds.indexOf(type);
+
+        if (annotates) {
+            out.annotate("  type_idx: " + Hex.u4(typeIdx) + " // " +
+                    type.toHuman());
+        }
+
+        out.writeUleb128(typeIds.indexOf(annotation.getType()));
+
+        Collection<NameValuePair> pairs = annotation.getNameValuePairs();
+        int size = pairs.size();
+
+        if (annotates) {
+            out.annotate("  size: " + Hex.u4(size));
+        }
+
+        out.writeUleb128(size);
+
+        int at = 0;
+        for (NameValuePair pair : pairs) {
+            CstString name = pair.getName();
+            int nameIdx = stringIds.indexOf(name);
+            Constant value = pair.getValue();
+
+            if (annotates) {
+                out.annotate(0, "  elements[" + at + "]:");
+                at++;
+                out.annotate("    name_idx: " + Hex.u4(nameIdx) + " // " +
+                        name.toHuman());
+            }
+
+            out.writeUleb128(nameIdx);
+
+            if (annotates) {
+                out.annotate("    value: " + constantToHuman(value));
+            }
+
+            writeConstant(value);
+        }
+
+        if (annotates) {
+            out.endAnnotation();
+        }
+    }
+
+    /**
+     * Gets the colloquial type name and human form of the type of the
+     * given constant, when used as an encoded value.
+     *
+     * @param cst {@code non-null;} the constant
+     * @return {@code non-null;} its type name and human form
+     */
+    public static String constantToHuman(Constant cst) {
+        int type = constantToValueType(cst);
+
+        if (type == VALUE_NULL) {
+            return "null";
+        }
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append(cst.typeName());
+        sb.append(' ');
+        sb.append(cst.toHuman());
+
+        return sb.toString();
+    }
+
+    /**
+     * Helper for {@code addContents()} methods, which adds
+     * contents for a particular {@link Annotation}, calling itself
+     * recursively should it encounter a nested annotation.
+     *
+     * @param file {@code non-null;} the file to add to
+     * @param annotation {@code non-null;} the annotation to add contents for
+     */
+    public static void addContents(DexFile file, Annotation annotation) {
+        TypeIdsSection typeIds = file.getTypeIds();
+        StringIdsSection stringIds = file.getStringIds();
+
+        typeIds.intern(annotation.getType());
+
+        for (NameValuePair pair : annotation.getNameValuePairs()) {
+            stringIds.intern(pair.getName());
+            addContents(file, pair.getValue());
+        }
+    }
+
+    /**
+     * Helper for {@code addContents()} methods, which adds
+     * contents for a particular constant, calling itself recursively
+     * should it encounter a {@link CstArray} and calling {@link
+     * #addContents(DexFile,Annotation)} recursively should it
+     * encounter a {@link CstAnnotation}.
+     *
+     * @param file {@code non-null;} the file to add to
+     * @param cst {@code non-null;} the constant to add contents for
+     */
+    public static void addContents(DexFile file, Constant cst) {
+        if (cst instanceof CstAnnotation) {
+            addContents(file, ((CstAnnotation) cst).getAnnotation());
+        } else if (cst instanceof CstArray) {
+            CstArray.List list = ((CstArray) cst).getList();
+            int size = list.size();
+            for (int i = 0; i < size; i++) {
+                addContents(file, list.get(i));
+            }
+        } else {
+            file.internIfAppropriate(cst);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/io/CodeReader.java b/dx/src/com/android/dx/io/CodeReader.java
new file mode 100644
index 0000000..52a3c68
--- /dev/null
+++ b/dx/src/com/android/dx/io/CodeReader.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io;
+
+import com.android.dex.DexException;
+import com.android.dx.io.instructions.DecodedInstruction;
+
+/**
+ * Walks through a block of code and calls visitor call backs.
+ */
+public final class CodeReader {
+    private Visitor fallbackVisitor = null;
+    private Visitor stringVisitor = null;
+    private Visitor typeVisitor = null;
+    private Visitor fieldVisitor = null;
+    private Visitor methodVisitor = null;
+    private Visitor methodAndProtoVisitor = null;
+    private Visitor callSiteVisitor = null;
+
+    /**
+     * Sets {@code visitor} as the visitor for all instructions.
+     */
+    public void setAllVisitors(Visitor visitor) {
+        fallbackVisitor = visitor;
+        stringVisitor = visitor;
+        typeVisitor = visitor;
+        fieldVisitor = visitor;
+        methodVisitor = visitor;
+        methodAndProtoVisitor = visitor;
+        callSiteVisitor = visitor;
+    }
+
+    /**
+     * Sets {@code visitor} as the visitor for all instructions not
+     * otherwise handled.
+     */
+    public void setFallbackVisitor(Visitor visitor) {
+        fallbackVisitor = visitor;
+    }
+
+    /**
+     * Sets {@code visitor} as the visitor for all string instructions.
+     */
+    public void setStringVisitor(Visitor visitor) {
+        stringVisitor = visitor;
+    }
+
+    /**
+     * Sets {@code visitor} as the visitor for all type instructions.
+     */
+    public void setTypeVisitor(Visitor visitor) {
+        typeVisitor = visitor;
+    }
+
+    /**
+     * Sets {@code visitor} as the visitor for all field instructions.
+     */
+    public void setFieldVisitor(Visitor visitor) {
+        fieldVisitor = visitor;
+    }
+
+    /**
+     * Sets {@code visitor} as the visitor for all method instructions.
+     */
+    public void setMethodVisitor(Visitor visitor) {
+        methodVisitor = visitor;
+    }
+
+    /** Sets {@code visitor} as the visitor for all method and proto instructions. */
+    public void setMethodAndProtoVisitor(Visitor visitor) {
+        methodAndProtoVisitor = visitor;
+    }
+
+    /** Sets {@code visitor} as the visitor for all call site instructions. */
+    public void setCallSiteVisitor(Visitor visitor) {
+        callSiteVisitor = visitor;
+    }
+
+    public void visitAll(DecodedInstruction[] decodedInstructions)
+            throws DexException {
+        int size = decodedInstructions.length;
+
+        for (int i = 0; i < size; i++) {
+            DecodedInstruction one = decodedInstructions[i];
+            if (one == null) {
+                continue;
+            }
+
+            callVisit(decodedInstructions, one);
+        }
+    }
+
+    public void visitAll(short[] encodedInstructions) throws DexException {
+        DecodedInstruction[] decodedInstructions =
+            DecodedInstruction.decodeAll(encodedInstructions);
+        visitAll(decodedInstructions);
+    }
+
+    private void callVisit(DecodedInstruction[] all, DecodedInstruction one) {
+        Visitor visitor = null;
+
+        switch (OpcodeInfo.getIndexType(one.getOpcode())) {
+            case STRING_REF:           visitor = stringVisitor;         break;
+            case TYPE_REF:             visitor = typeVisitor;           break;
+            case FIELD_REF:            visitor = fieldVisitor;          break;
+            case METHOD_REF:           visitor = methodVisitor;         break;
+            case METHOD_AND_PROTO_REF: visitor = methodAndProtoVisitor; break;
+            case CALL_SITE_REF:        visitor = callSiteVisitor;       break;
+        }
+
+        if (visitor == null) {
+            visitor = fallbackVisitor;
+        }
+
+        if (visitor != null) {
+            visitor.visit(all, one);
+        }
+    }
+
+    public interface Visitor {
+        void visit(DecodedInstruction[] all, DecodedInstruction one);
+    }
+}
diff --git a/dx/src/com/android/dx/io/DexIndexPrinter.java b/dx/src/com/android/dx/io/DexIndexPrinter.java
new file mode 100644
index 0000000..2b89d44
--- /dev/null
+++ b/dx/src/com/android/dx/io/DexIndexPrinter.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io;
+
+import com.android.dex.ClassDef;
+import com.android.dex.Dex;
+import com.android.dex.FieldId;
+import com.android.dex.MethodId;
+import com.android.dex.ProtoId;
+import com.android.dex.TableOfContents;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Executable that prints all indices of a dex file.
+ */
+public final class DexIndexPrinter {
+    private final Dex dex;
+    private final TableOfContents tableOfContents;
+
+    public DexIndexPrinter(File file) throws IOException {
+        this.dex = new Dex(file);
+        this.tableOfContents = dex.getTableOfContents();
+    }
+
+    private void printMap() {
+        for (TableOfContents.Section section : tableOfContents.sections) {
+            if (section.off != -1) {
+                System.out.println("section " + Integer.toHexString(section.type)
+                        + " off=" + Integer.toHexString(section.off)
+                        + " size=" + Integer.toHexString(section.size)
+                        + " byteCount=" + Integer.toHexString(section.byteCount));
+            }
+        }
+    }
+
+    private void printStrings() throws IOException {
+        int index = 0;
+        for (String string : dex.strings()) {
+            System.out.println("string " + index + ": " + string);
+            index++;
+        }
+    }
+
+    private void printTypeIds() throws IOException {
+        int index = 0;
+        for (Integer type : dex.typeIds()) {
+            System.out.println("type " + index + ": " + dex.strings().get(type));
+            index++;
+        }
+    }
+
+    private void printProtoIds() throws IOException {
+        int index = 0;
+        for (ProtoId protoId : dex.protoIds()) {
+            System.out.println("proto " + index + ": " + protoId);
+            index++;
+        }
+    }
+
+    private void printFieldIds() throws IOException {
+        int index = 0;
+        for (FieldId fieldId : dex.fieldIds()) {
+            System.out.println("field " + index + ": " + fieldId);
+            index++;
+        }
+    }
+
+    private void printMethodIds() throws IOException {
+        int index = 0;
+        for (MethodId methodId : dex.methodIds()) {
+            System.out.println("methodId " + index + ": " + methodId);
+            index++;
+        }
+    }
+
+    private void printTypeLists() throws IOException {
+        if (tableOfContents.typeLists.off == -1) {
+            System.out.println("No type lists");
+            return;
+        }
+        Dex.Section in = dex.open(tableOfContents.typeLists.off);
+        for (int i = 0; i < tableOfContents.typeLists.size; i++) {
+            int size = in.readInt();
+            System.out.print("Type list i=" + i + ", size=" + size + ", elements=");
+            for (int t = 0; t < size; t++) {
+                System.out.print(" " + dex.typeNames().get((int) in.readShort()));
+            }
+            if (size % 2 == 1) {
+                in.readShort(); // retain alignment
+            }
+            System.out.println();
+        }
+    }
+
+    private void printClassDefs() {
+        int index = 0;
+        for (ClassDef classDef : dex.classDefs()) {
+            System.out.println("class def " + index + ": " + classDef);
+            index++;
+        }
+    }
+
+    public static void main(String[] args) throws IOException {
+        DexIndexPrinter indexPrinter = new DexIndexPrinter(new File(args[0]));
+        indexPrinter.printMap();
+        indexPrinter.printStrings();
+        indexPrinter.printTypeIds();
+        indexPrinter.printProtoIds();
+        indexPrinter.printFieldIds();
+        indexPrinter.printMethodIds();
+        indexPrinter.printTypeLists();
+        indexPrinter.printClassDefs();
+    }
+}
diff --git a/dx/src/com/android/dx/io/IndexType.java b/dx/src/com/android/dx/io/IndexType.java
new file mode 100644
index 0000000..fb8763e
--- /dev/null
+++ b/dx/src/com/android/dx/io/IndexType.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io;
+
+/**
+ * The various types that an index in a Dalvik instruction might refer to.
+ */
+public enum IndexType {
+    /** "Unknown." Used for undefined opcodes. */
+    UNKNOWN,
+
+    /** no index used */
+    NONE,
+
+    /** "It depends." Used for {@code throw-verification-error}. */
+    VARIES,
+
+    /** type reference index */
+    TYPE_REF,
+
+    /** string reference index */
+    STRING_REF,
+
+    /** method reference index */
+    METHOD_REF,
+
+    /** field reference index */
+    FIELD_REF,
+
+    /** method index and a proto index */
+    METHOD_AND_PROTO_REF,
+
+    /** call site reference index */
+    CALL_SITE_REF,
+
+    /** inline method index (for inline linked method invocations) */
+    INLINE_METHOD,
+
+    /** direct vtable offset (for static linked method invocations) */
+    VTABLE_OFFSET,
+
+    /** direct field offset (for static linked field accesses) */
+    FIELD_OFFSET,
+
+    /** method handle reference index (for loading constant method handles) */
+    METHOD_HANDLE_REF,
+
+    /** proto reference index (for loading constant proto ref) */
+    PROTO_REF;
+}
diff --git a/dx/src/com/android/dx/io/OpcodeInfo.java b/dx/src/com/android/dx/io/OpcodeInfo.java
new file mode 100644
index 0000000..40def04
--- /dev/null
+++ b/dx/src/com/android/dx/io/OpcodeInfo.java
@@ -0,0 +1,1295 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io;
+
+import com.android.dx.io.instructions.InstructionCodec;
+import com.android.dx.util.Hex;
+
+/**
+ * Information about each Dalvik opcode.
+ */
+public final class OpcodeInfo {
+    /*
+     * TODO: Merge at least most of the info from the Dops class into
+     * this one.
+     */
+
+    /** non-null; array containing all the information */
+    private static final Info[] INFO;
+
+    /**
+     * pseudo-opcode used for nonstandard formatted "instructions"
+     * (which are mostly not actually instructions, though they do
+     * appear in instruction lists). TODO: Retire the usage of this
+     * constant.
+     */
+    public static final Info SPECIAL_FORMAT =
+        new Info(Opcodes.SPECIAL_FORMAT, "<special>",
+                InstructionCodec.FORMAT_00X, IndexType.NONE);
+
+    // TODO: These payload opcodes should be generated by opcode-gen.
+
+    public static final Info PACKED_SWITCH_PAYLOAD =
+        new Info(Opcodes.PACKED_SWITCH_PAYLOAD, "packed-switch-payload",
+                InstructionCodec.FORMAT_PACKED_SWITCH_PAYLOAD,
+                IndexType.NONE);
+
+    public static final Info SPARSE_SWITCH_PAYLOAD =
+        new Info(Opcodes.SPARSE_SWITCH_PAYLOAD, "sparse-switch-payload",
+                InstructionCodec.FORMAT_SPARSE_SWITCH_PAYLOAD,
+                IndexType.NONE);
+
+    public static final Info FILL_ARRAY_DATA_PAYLOAD =
+        new Info(Opcodes.FILL_ARRAY_DATA_PAYLOAD, "fill-array-data-payload",
+                InstructionCodec.FORMAT_FILL_ARRAY_DATA_PAYLOAD,
+                IndexType.NONE);
+
+    // BEGIN(opcode-info-defs); GENERATED AUTOMATICALLY BY opcode-gen
+    public static final Info NOP =
+        new Info(Opcodes.NOP, "nop",
+            InstructionCodec.FORMAT_10X, IndexType.NONE);
+
+    public static final Info MOVE =
+        new Info(Opcodes.MOVE, "move",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info MOVE_FROM16 =
+        new Info(Opcodes.MOVE_FROM16, "move/from16",
+            InstructionCodec.FORMAT_22X, IndexType.NONE);
+
+    public static final Info MOVE_16 =
+        new Info(Opcodes.MOVE_16, "move/16",
+            InstructionCodec.FORMAT_32X, IndexType.NONE);
+
+    public static final Info MOVE_WIDE =
+        new Info(Opcodes.MOVE_WIDE, "move-wide",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info MOVE_WIDE_FROM16 =
+        new Info(Opcodes.MOVE_WIDE_FROM16, "move-wide/from16",
+            InstructionCodec.FORMAT_22X, IndexType.NONE);
+
+    public static final Info MOVE_WIDE_16 =
+        new Info(Opcodes.MOVE_WIDE_16, "move-wide/16",
+            InstructionCodec.FORMAT_32X, IndexType.NONE);
+
+    public static final Info MOVE_OBJECT =
+        new Info(Opcodes.MOVE_OBJECT, "move-object",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info MOVE_OBJECT_FROM16 =
+        new Info(Opcodes.MOVE_OBJECT_FROM16, "move-object/from16",
+            InstructionCodec.FORMAT_22X, IndexType.NONE);
+
+    public static final Info MOVE_OBJECT_16 =
+        new Info(Opcodes.MOVE_OBJECT_16, "move-object/16",
+            InstructionCodec.FORMAT_32X, IndexType.NONE);
+
+    public static final Info MOVE_RESULT =
+        new Info(Opcodes.MOVE_RESULT, "move-result",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info MOVE_RESULT_WIDE =
+        new Info(Opcodes.MOVE_RESULT_WIDE, "move-result-wide",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info MOVE_RESULT_OBJECT =
+        new Info(Opcodes.MOVE_RESULT_OBJECT, "move-result-object",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info MOVE_EXCEPTION =
+        new Info(Opcodes.MOVE_EXCEPTION, "move-exception",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info RETURN_VOID =
+        new Info(Opcodes.RETURN_VOID, "return-void",
+            InstructionCodec.FORMAT_10X, IndexType.NONE);
+
+    public static final Info RETURN =
+        new Info(Opcodes.RETURN, "return",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info RETURN_WIDE =
+        new Info(Opcodes.RETURN_WIDE, "return-wide",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info RETURN_OBJECT =
+        new Info(Opcodes.RETURN_OBJECT, "return-object",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info CONST_4 =
+        new Info(Opcodes.CONST_4, "const/4",
+            InstructionCodec.FORMAT_11N, IndexType.NONE);
+
+    public static final Info CONST_16 =
+        new Info(Opcodes.CONST_16, "const/16",
+            InstructionCodec.FORMAT_21S, IndexType.NONE);
+
+    public static final Info CONST =
+        new Info(Opcodes.CONST, "const",
+            InstructionCodec.FORMAT_31I, IndexType.NONE);
+
+    public static final Info CONST_HIGH16 =
+        new Info(Opcodes.CONST_HIGH16, "const/high16",
+            InstructionCodec.FORMAT_21H, IndexType.NONE);
+
+    public static final Info CONST_WIDE_16 =
+        new Info(Opcodes.CONST_WIDE_16, "const-wide/16",
+            InstructionCodec.FORMAT_21S, IndexType.NONE);
+
+    public static final Info CONST_WIDE_32 =
+        new Info(Opcodes.CONST_WIDE_32, "const-wide/32",
+            InstructionCodec.FORMAT_31I, IndexType.NONE);
+
+    public static final Info CONST_WIDE =
+        new Info(Opcodes.CONST_WIDE, "const-wide",
+            InstructionCodec.FORMAT_51L, IndexType.NONE);
+
+    public static final Info CONST_WIDE_HIGH16 =
+        new Info(Opcodes.CONST_WIDE_HIGH16, "const-wide/high16",
+            InstructionCodec.FORMAT_21H, IndexType.NONE);
+
+    public static final Info CONST_STRING =
+        new Info(Opcodes.CONST_STRING, "const-string",
+            InstructionCodec.FORMAT_21C, IndexType.STRING_REF);
+
+    public static final Info CONST_STRING_JUMBO =
+        new Info(Opcodes.CONST_STRING_JUMBO, "const-string/jumbo",
+            InstructionCodec.FORMAT_31C, IndexType.STRING_REF);
+
+    public static final Info CONST_CLASS =
+        new Info(Opcodes.CONST_CLASS, "const-class",
+            InstructionCodec.FORMAT_21C, IndexType.TYPE_REF);
+
+    public static final Info MONITOR_ENTER =
+        new Info(Opcodes.MONITOR_ENTER, "monitor-enter",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info MONITOR_EXIT =
+        new Info(Opcodes.MONITOR_EXIT, "monitor-exit",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info CHECK_CAST =
+        new Info(Opcodes.CHECK_CAST, "check-cast",
+            InstructionCodec.FORMAT_21C, IndexType.TYPE_REF);
+
+    public static final Info INSTANCE_OF =
+        new Info(Opcodes.INSTANCE_OF, "instance-of",
+            InstructionCodec.FORMAT_22C, IndexType.TYPE_REF);
+
+    public static final Info ARRAY_LENGTH =
+        new Info(Opcodes.ARRAY_LENGTH, "array-length",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info NEW_INSTANCE =
+        new Info(Opcodes.NEW_INSTANCE, "new-instance",
+            InstructionCodec.FORMAT_21C, IndexType.TYPE_REF);
+
+    public static final Info NEW_ARRAY =
+        new Info(Opcodes.NEW_ARRAY, "new-array",
+            InstructionCodec.FORMAT_22C, IndexType.TYPE_REF);
+
+    public static final Info FILLED_NEW_ARRAY =
+        new Info(Opcodes.FILLED_NEW_ARRAY, "filled-new-array",
+            InstructionCodec.FORMAT_35C, IndexType.TYPE_REF);
+
+    public static final Info FILLED_NEW_ARRAY_RANGE =
+        new Info(Opcodes.FILLED_NEW_ARRAY_RANGE, "filled-new-array/range",
+            InstructionCodec.FORMAT_3RC, IndexType.TYPE_REF);
+
+    public static final Info FILL_ARRAY_DATA =
+        new Info(Opcodes.FILL_ARRAY_DATA, "fill-array-data",
+            InstructionCodec.FORMAT_31T, IndexType.NONE);
+
+    public static final Info THROW =
+        new Info(Opcodes.THROW, "throw",
+            InstructionCodec.FORMAT_11X, IndexType.NONE);
+
+    public static final Info GOTO =
+        new Info(Opcodes.GOTO, "goto",
+            InstructionCodec.FORMAT_10T, IndexType.NONE);
+
+    public static final Info GOTO_16 =
+        new Info(Opcodes.GOTO_16, "goto/16",
+            InstructionCodec.FORMAT_20T, IndexType.NONE);
+
+    public static final Info GOTO_32 =
+        new Info(Opcodes.GOTO_32, "goto/32",
+            InstructionCodec.FORMAT_30T, IndexType.NONE);
+
+    public static final Info PACKED_SWITCH =
+        new Info(Opcodes.PACKED_SWITCH, "packed-switch",
+            InstructionCodec.FORMAT_31T, IndexType.NONE);
+
+    public static final Info SPARSE_SWITCH =
+        new Info(Opcodes.SPARSE_SWITCH, "sparse-switch",
+            InstructionCodec.FORMAT_31T, IndexType.NONE);
+
+    public static final Info CMPL_FLOAT =
+        new Info(Opcodes.CMPL_FLOAT, "cmpl-float",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info CMPG_FLOAT =
+        new Info(Opcodes.CMPG_FLOAT, "cmpg-float",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info CMPL_DOUBLE =
+        new Info(Opcodes.CMPL_DOUBLE, "cmpl-double",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info CMPG_DOUBLE =
+        new Info(Opcodes.CMPG_DOUBLE, "cmpg-double",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info CMP_LONG =
+        new Info(Opcodes.CMP_LONG, "cmp-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info IF_EQ =
+        new Info(Opcodes.IF_EQ, "if-eq",
+            InstructionCodec.FORMAT_22T, IndexType.NONE);
+
+    public static final Info IF_NE =
+        new Info(Opcodes.IF_NE, "if-ne",
+            InstructionCodec.FORMAT_22T, IndexType.NONE);
+
+    public static final Info IF_LT =
+        new Info(Opcodes.IF_LT, "if-lt",
+            InstructionCodec.FORMAT_22T, IndexType.NONE);
+
+    public static final Info IF_GE =
+        new Info(Opcodes.IF_GE, "if-ge",
+            InstructionCodec.FORMAT_22T, IndexType.NONE);
+
+    public static final Info IF_GT =
+        new Info(Opcodes.IF_GT, "if-gt",
+            InstructionCodec.FORMAT_22T, IndexType.NONE);
+
+    public static final Info IF_LE =
+        new Info(Opcodes.IF_LE, "if-le",
+            InstructionCodec.FORMAT_22T, IndexType.NONE);
+
+    public static final Info IF_EQZ =
+        new Info(Opcodes.IF_EQZ, "if-eqz",
+            InstructionCodec.FORMAT_21T, IndexType.NONE);
+
+    public static final Info IF_NEZ =
+        new Info(Opcodes.IF_NEZ, "if-nez",
+            InstructionCodec.FORMAT_21T, IndexType.NONE);
+
+    public static final Info IF_LTZ =
+        new Info(Opcodes.IF_LTZ, "if-ltz",
+            InstructionCodec.FORMAT_21T, IndexType.NONE);
+
+    public static final Info IF_GEZ =
+        new Info(Opcodes.IF_GEZ, "if-gez",
+            InstructionCodec.FORMAT_21T, IndexType.NONE);
+
+    public static final Info IF_GTZ =
+        new Info(Opcodes.IF_GTZ, "if-gtz",
+            InstructionCodec.FORMAT_21T, IndexType.NONE);
+
+    public static final Info IF_LEZ =
+        new Info(Opcodes.IF_LEZ, "if-lez",
+            InstructionCodec.FORMAT_21T, IndexType.NONE);
+
+    public static final Info AGET =
+        new Info(Opcodes.AGET, "aget",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info AGET_WIDE =
+        new Info(Opcodes.AGET_WIDE, "aget-wide",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info AGET_OBJECT =
+        new Info(Opcodes.AGET_OBJECT, "aget-object",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info AGET_BOOLEAN =
+        new Info(Opcodes.AGET_BOOLEAN, "aget-boolean",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info AGET_BYTE =
+        new Info(Opcodes.AGET_BYTE, "aget-byte",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info AGET_CHAR =
+        new Info(Opcodes.AGET_CHAR, "aget-char",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info AGET_SHORT =
+        new Info(Opcodes.AGET_SHORT, "aget-short",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info APUT =
+        new Info(Opcodes.APUT, "aput",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info APUT_WIDE =
+        new Info(Opcodes.APUT_WIDE, "aput-wide",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info APUT_OBJECT =
+        new Info(Opcodes.APUT_OBJECT, "aput-object",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info APUT_BOOLEAN =
+        new Info(Opcodes.APUT_BOOLEAN, "aput-boolean",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info APUT_BYTE =
+        new Info(Opcodes.APUT_BYTE, "aput-byte",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info APUT_CHAR =
+        new Info(Opcodes.APUT_CHAR, "aput-char",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info APUT_SHORT =
+        new Info(Opcodes.APUT_SHORT, "aput-short",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info IGET =
+        new Info(Opcodes.IGET, "iget",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IGET_WIDE =
+        new Info(Opcodes.IGET_WIDE, "iget-wide",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IGET_OBJECT =
+        new Info(Opcodes.IGET_OBJECT, "iget-object",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IGET_BOOLEAN =
+        new Info(Opcodes.IGET_BOOLEAN, "iget-boolean",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IGET_BYTE =
+        new Info(Opcodes.IGET_BYTE, "iget-byte",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IGET_CHAR =
+        new Info(Opcodes.IGET_CHAR, "iget-char",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IGET_SHORT =
+        new Info(Opcodes.IGET_SHORT, "iget-short",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IPUT =
+        new Info(Opcodes.IPUT, "iput",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IPUT_WIDE =
+        new Info(Opcodes.IPUT_WIDE, "iput-wide",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IPUT_OBJECT =
+        new Info(Opcodes.IPUT_OBJECT, "iput-object",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IPUT_BOOLEAN =
+        new Info(Opcodes.IPUT_BOOLEAN, "iput-boolean",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IPUT_BYTE =
+        new Info(Opcodes.IPUT_BYTE, "iput-byte",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IPUT_CHAR =
+        new Info(Opcodes.IPUT_CHAR, "iput-char",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info IPUT_SHORT =
+        new Info(Opcodes.IPUT_SHORT, "iput-short",
+            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);
+
+    public static final Info SGET =
+        new Info(Opcodes.SGET, "sget",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SGET_WIDE =
+        new Info(Opcodes.SGET_WIDE, "sget-wide",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SGET_OBJECT =
+        new Info(Opcodes.SGET_OBJECT, "sget-object",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SGET_BOOLEAN =
+        new Info(Opcodes.SGET_BOOLEAN, "sget-boolean",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SGET_BYTE =
+        new Info(Opcodes.SGET_BYTE, "sget-byte",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SGET_CHAR =
+        new Info(Opcodes.SGET_CHAR, "sget-char",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SGET_SHORT =
+        new Info(Opcodes.SGET_SHORT, "sget-short",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SPUT =
+        new Info(Opcodes.SPUT, "sput",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SPUT_WIDE =
+        new Info(Opcodes.SPUT_WIDE, "sput-wide",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SPUT_OBJECT =
+        new Info(Opcodes.SPUT_OBJECT, "sput-object",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SPUT_BOOLEAN =
+        new Info(Opcodes.SPUT_BOOLEAN, "sput-boolean",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SPUT_BYTE =
+        new Info(Opcodes.SPUT_BYTE, "sput-byte",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SPUT_CHAR =
+        new Info(Opcodes.SPUT_CHAR, "sput-char",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info SPUT_SHORT =
+        new Info(Opcodes.SPUT_SHORT, "sput-short",
+            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);
+
+    public static final Info INVOKE_VIRTUAL =
+        new Info(Opcodes.INVOKE_VIRTUAL, "invoke-virtual",
+            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_SUPER =
+        new Info(Opcodes.INVOKE_SUPER, "invoke-super",
+            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_DIRECT =
+        new Info(Opcodes.INVOKE_DIRECT, "invoke-direct",
+            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_STATIC =
+        new Info(Opcodes.INVOKE_STATIC, "invoke-static",
+            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_INTERFACE =
+        new Info(Opcodes.INVOKE_INTERFACE, "invoke-interface",
+            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_VIRTUAL_RANGE =
+        new Info(Opcodes.INVOKE_VIRTUAL_RANGE, "invoke-virtual/range",
+            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_SUPER_RANGE =
+        new Info(Opcodes.INVOKE_SUPER_RANGE, "invoke-super/range",
+            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_DIRECT_RANGE =
+        new Info(Opcodes.INVOKE_DIRECT_RANGE, "invoke-direct/range",
+            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_STATIC_RANGE =
+        new Info(Opcodes.INVOKE_STATIC_RANGE, "invoke-static/range",
+            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);
+
+    public static final Info INVOKE_INTERFACE_RANGE =
+        new Info(Opcodes.INVOKE_INTERFACE_RANGE, "invoke-interface/range",
+            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);
+
+    public static final Info NEG_INT =
+        new Info(Opcodes.NEG_INT, "neg-int",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info NOT_INT =
+        new Info(Opcodes.NOT_INT, "not-int",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info NEG_LONG =
+        new Info(Opcodes.NEG_LONG, "neg-long",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info NOT_LONG =
+        new Info(Opcodes.NOT_LONG, "not-long",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info NEG_FLOAT =
+        new Info(Opcodes.NEG_FLOAT, "neg-float",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info NEG_DOUBLE =
+        new Info(Opcodes.NEG_DOUBLE, "neg-double",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info INT_TO_LONG =
+        new Info(Opcodes.INT_TO_LONG, "int-to-long",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info INT_TO_FLOAT =
+        new Info(Opcodes.INT_TO_FLOAT, "int-to-float",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info INT_TO_DOUBLE =
+        new Info(Opcodes.INT_TO_DOUBLE, "int-to-double",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info LONG_TO_INT =
+        new Info(Opcodes.LONG_TO_INT, "long-to-int",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info LONG_TO_FLOAT =
+        new Info(Opcodes.LONG_TO_FLOAT, "long-to-float",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info LONG_TO_DOUBLE =
+        new Info(Opcodes.LONG_TO_DOUBLE, "long-to-double",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info FLOAT_TO_INT =
+        new Info(Opcodes.FLOAT_TO_INT, "float-to-int",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info FLOAT_TO_LONG =
+        new Info(Opcodes.FLOAT_TO_LONG, "float-to-long",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info FLOAT_TO_DOUBLE =
+        new Info(Opcodes.FLOAT_TO_DOUBLE, "float-to-double",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info DOUBLE_TO_INT =
+        new Info(Opcodes.DOUBLE_TO_INT, "double-to-int",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info DOUBLE_TO_LONG =
+        new Info(Opcodes.DOUBLE_TO_LONG, "double-to-long",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info DOUBLE_TO_FLOAT =
+        new Info(Opcodes.DOUBLE_TO_FLOAT, "double-to-float",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info INT_TO_BYTE =
+        new Info(Opcodes.INT_TO_BYTE, "int-to-byte",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info INT_TO_CHAR =
+        new Info(Opcodes.INT_TO_CHAR, "int-to-char",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info INT_TO_SHORT =
+        new Info(Opcodes.INT_TO_SHORT, "int-to-short",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info ADD_INT =
+        new Info(Opcodes.ADD_INT, "add-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info SUB_INT =
+        new Info(Opcodes.SUB_INT, "sub-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info MUL_INT =
+        new Info(Opcodes.MUL_INT, "mul-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info DIV_INT =
+        new Info(Opcodes.DIV_INT, "div-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info REM_INT =
+        new Info(Opcodes.REM_INT, "rem-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info AND_INT =
+        new Info(Opcodes.AND_INT, "and-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info OR_INT =
+        new Info(Opcodes.OR_INT, "or-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info XOR_INT =
+        new Info(Opcodes.XOR_INT, "xor-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info SHL_INT =
+        new Info(Opcodes.SHL_INT, "shl-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info SHR_INT =
+        new Info(Opcodes.SHR_INT, "shr-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info USHR_INT =
+        new Info(Opcodes.USHR_INT, "ushr-int",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info ADD_LONG =
+        new Info(Opcodes.ADD_LONG, "add-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info SUB_LONG =
+        new Info(Opcodes.SUB_LONG, "sub-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info MUL_LONG =
+        new Info(Opcodes.MUL_LONG, "mul-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info DIV_LONG =
+        new Info(Opcodes.DIV_LONG, "div-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info REM_LONG =
+        new Info(Opcodes.REM_LONG, "rem-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info AND_LONG =
+        new Info(Opcodes.AND_LONG, "and-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info OR_LONG =
+        new Info(Opcodes.OR_LONG, "or-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info XOR_LONG =
+        new Info(Opcodes.XOR_LONG, "xor-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info SHL_LONG =
+        new Info(Opcodes.SHL_LONG, "shl-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info SHR_LONG =
+        new Info(Opcodes.SHR_LONG, "shr-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info USHR_LONG =
+        new Info(Opcodes.USHR_LONG, "ushr-long",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info ADD_FLOAT =
+        new Info(Opcodes.ADD_FLOAT, "add-float",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info SUB_FLOAT =
+        new Info(Opcodes.SUB_FLOAT, "sub-float",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info MUL_FLOAT =
+        new Info(Opcodes.MUL_FLOAT, "mul-float",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info DIV_FLOAT =
+        new Info(Opcodes.DIV_FLOAT, "div-float",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info REM_FLOAT =
+        new Info(Opcodes.REM_FLOAT, "rem-float",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info ADD_DOUBLE =
+        new Info(Opcodes.ADD_DOUBLE, "add-double",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info SUB_DOUBLE =
+        new Info(Opcodes.SUB_DOUBLE, "sub-double",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info MUL_DOUBLE =
+        new Info(Opcodes.MUL_DOUBLE, "mul-double",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info DIV_DOUBLE =
+        new Info(Opcodes.DIV_DOUBLE, "div-double",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info REM_DOUBLE =
+        new Info(Opcodes.REM_DOUBLE, "rem-double",
+            InstructionCodec.FORMAT_23X, IndexType.NONE);
+
+    public static final Info ADD_INT_2ADDR =
+        new Info(Opcodes.ADD_INT_2ADDR, "add-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info SUB_INT_2ADDR =
+        new Info(Opcodes.SUB_INT_2ADDR, "sub-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info MUL_INT_2ADDR =
+        new Info(Opcodes.MUL_INT_2ADDR, "mul-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info DIV_INT_2ADDR =
+        new Info(Opcodes.DIV_INT_2ADDR, "div-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info REM_INT_2ADDR =
+        new Info(Opcodes.REM_INT_2ADDR, "rem-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info AND_INT_2ADDR =
+        new Info(Opcodes.AND_INT_2ADDR, "and-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info OR_INT_2ADDR =
+        new Info(Opcodes.OR_INT_2ADDR, "or-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info XOR_INT_2ADDR =
+        new Info(Opcodes.XOR_INT_2ADDR, "xor-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info SHL_INT_2ADDR =
+        new Info(Opcodes.SHL_INT_2ADDR, "shl-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info SHR_INT_2ADDR =
+        new Info(Opcodes.SHR_INT_2ADDR, "shr-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info USHR_INT_2ADDR =
+        new Info(Opcodes.USHR_INT_2ADDR, "ushr-int/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info ADD_LONG_2ADDR =
+        new Info(Opcodes.ADD_LONG_2ADDR, "add-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info SUB_LONG_2ADDR =
+        new Info(Opcodes.SUB_LONG_2ADDR, "sub-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info MUL_LONG_2ADDR =
+        new Info(Opcodes.MUL_LONG_2ADDR, "mul-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info DIV_LONG_2ADDR =
+        new Info(Opcodes.DIV_LONG_2ADDR, "div-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info REM_LONG_2ADDR =
+        new Info(Opcodes.REM_LONG_2ADDR, "rem-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info AND_LONG_2ADDR =
+        new Info(Opcodes.AND_LONG_2ADDR, "and-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info OR_LONG_2ADDR =
+        new Info(Opcodes.OR_LONG_2ADDR, "or-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info XOR_LONG_2ADDR =
+        new Info(Opcodes.XOR_LONG_2ADDR, "xor-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info SHL_LONG_2ADDR =
+        new Info(Opcodes.SHL_LONG_2ADDR, "shl-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info SHR_LONG_2ADDR =
+        new Info(Opcodes.SHR_LONG_2ADDR, "shr-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info USHR_LONG_2ADDR =
+        new Info(Opcodes.USHR_LONG_2ADDR, "ushr-long/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info ADD_FLOAT_2ADDR =
+        new Info(Opcodes.ADD_FLOAT_2ADDR, "add-float/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info SUB_FLOAT_2ADDR =
+        new Info(Opcodes.SUB_FLOAT_2ADDR, "sub-float/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info MUL_FLOAT_2ADDR =
+        new Info(Opcodes.MUL_FLOAT_2ADDR, "mul-float/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info DIV_FLOAT_2ADDR =
+        new Info(Opcodes.DIV_FLOAT_2ADDR, "div-float/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info REM_FLOAT_2ADDR =
+        new Info(Opcodes.REM_FLOAT_2ADDR, "rem-float/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info ADD_DOUBLE_2ADDR =
+        new Info(Opcodes.ADD_DOUBLE_2ADDR, "add-double/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info SUB_DOUBLE_2ADDR =
+        new Info(Opcodes.SUB_DOUBLE_2ADDR, "sub-double/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info MUL_DOUBLE_2ADDR =
+        new Info(Opcodes.MUL_DOUBLE_2ADDR, "mul-double/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info DIV_DOUBLE_2ADDR =
+        new Info(Opcodes.DIV_DOUBLE_2ADDR, "div-double/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info REM_DOUBLE_2ADDR =
+        new Info(Opcodes.REM_DOUBLE_2ADDR, "rem-double/2addr",
+            InstructionCodec.FORMAT_12X, IndexType.NONE);
+
+    public static final Info ADD_INT_LIT16 =
+        new Info(Opcodes.ADD_INT_LIT16, "add-int/lit16",
+            InstructionCodec.FORMAT_22S, IndexType.NONE);
+
+    public static final Info RSUB_INT =
+        new Info(Opcodes.RSUB_INT, "rsub-int",
+            InstructionCodec.FORMAT_22S, IndexType.NONE);
+
+    public static final Info MUL_INT_LIT16 =
+        new Info(Opcodes.MUL_INT_LIT16, "mul-int/lit16",
+            InstructionCodec.FORMAT_22S, IndexType.NONE);
+
+    public static final Info DIV_INT_LIT16 =
+        new Info(Opcodes.DIV_INT_LIT16, "div-int/lit16",
+            InstructionCodec.FORMAT_22S, IndexType.NONE);
+
+    public static final Info REM_INT_LIT16 =
+        new Info(Opcodes.REM_INT_LIT16, "rem-int/lit16",
+            InstructionCodec.FORMAT_22S, IndexType.NONE);
+
+    public static final Info AND_INT_LIT16 =
+        new Info(Opcodes.AND_INT_LIT16, "and-int/lit16",
+            InstructionCodec.FORMAT_22S, IndexType.NONE);
+
+    public static final Info OR_INT_LIT16 =
+        new Info(Opcodes.OR_INT_LIT16, "or-int/lit16",
+            InstructionCodec.FORMAT_22S, IndexType.NONE);
+
+    public static final Info XOR_INT_LIT16 =
+        new Info(Opcodes.XOR_INT_LIT16, "xor-int/lit16",
+            InstructionCodec.FORMAT_22S, IndexType.NONE);
+
+    public static final Info ADD_INT_LIT8 =
+        new Info(Opcodes.ADD_INT_LIT8, "add-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info RSUB_INT_LIT8 =
+        new Info(Opcodes.RSUB_INT_LIT8, "rsub-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info MUL_INT_LIT8 =
+        new Info(Opcodes.MUL_INT_LIT8, "mul-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info DIV_INT_LIT8 =
+        new Info(Opcodes.DIV_INT_LIT8, "div-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info REM_INT_LIT8 =
+        new Info(Opcodes.REM_INT_LIT8, "rem-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info AND_INT_LIT8 =
+        new Info(Opcodes.AND_INT_LIT8, "and-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info OR_INT_LIT8 =
+        new Info(Opcodes.OR_INT_LIT8, "or-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info XOR_INT_LIT8 =
+        new Info(Opcodes.XOR_INT_LIT8, "xor-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info SHL_INT_LIT8 =
+        new Info(Opcodes.SHL_INT_LIT8, "shl-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info SHR_INT_LIT8 =
+        new Info(Opcodes.SHR_INT_LIT8, "shr-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info USHR_INT_LIT8 =
+        new Info(Opcodes.USHR_INT_LIT8, "ushr-int/lit8",
+            InstructionCodec.FORMAT_22B, IndexType.NONE);
+
+    public static final Info INVOKE_POLYMORPHIC =
+        new Info(Opcodes.INVOKE_POLYMORPHIC, "invoke-polymorphic",
+            InstructionCodec.FORMAT_45CC, IndexType.METHOD_AND_PROTO_REF);
+
+    public static final Info INVOKE_POLYMORPHIC_RANGE =
+        new Info(Opcodes.INVOKE_POLYMORPHIC_RANGE, "invoke-polymorphic/range",
+            InstructionCodec.FORMAT_4RCC, IndexType.METHOD_AND_PROTO_REF);
+
+    public static final Info INVOKE_CUSTOM =
+        new Info(Opcodes.INVOKE_CUSTOM, "invoke-custom",
+            InstructionCodec.FORMAT_35C, IndexType.CALL_SITE_REF);
+
+    public static final Info INVOKE_CUSTOM_RANGE =
+        new Info(Opcodes.INVOKE_CUSTOM_RANGE, "invoke-custom/range",
+            InstructionCodec.FORMAT_3RC, IndexType.CALL_SITE_REF);
+
+    public static final Info CONST_METHOD_HANDLE =
+        new Info(Opcodes.CONST_METHOD_HANDLE, "const-method-handle",
+            InstructionCodec.FORMAT_21C, IndexType.METHOD_HANDLE_REF);
+
+    public static final Info CONST_METHOD_TYPE =
+        new Info(Opcodes.CONST_METHOD_TYPE, "const-method-type",
+            InstructionCodec.FORMAT_21C, IndexType.PROTO_REF);
+
+    // END(opcode-info-defs)
+
+    // Static initialization.
+    static {
+        INFO = new Info[Opcodes.MAX_VALUE - Opcodes.MIN_VALUE + 1];
+
+        // TODO: Stop using this constant.
+        set(SPECIAL_FORMAT);
+
+        // TODO: These payload opcodes should be generated by opcode-gen.
+        set(PACKED_SWITCH_PAYLOAD);
+        set(SPARSE_SWITCH_PAYLOAD);
+        set(FILL_ARRAY_DATA_PAYLOAD);
+
+        // BEGIN(opcode-info-init); GENERATED AUTOMATICALLY BY opcode-gen
+        set(NOP);
+        set(MOVE);
+        set(MOVE_FROM16);
+        set(MOVE_16);
+        set(MOVE_WIDE);
+        set(MOVE_WIDE_FROM16);
+        set(MOVE_WIDE_16);
+        set(MOVE_OBJECT);
+        set(MOVE_OBJECT_FROM16);
+        set(MOVE_OBJECT_16);
+        set(MOVE_RESULT);
+        set(MOVE_RESULT_WIDE);
+        set(MOVE_RESULT_OBJECT);
+        set(MOVE_EXCEPTION);
+        set(RETURN_VOID);
+        set(RETURN);
+        set(RETURN_WIDE);
+        set(RETURN_OBJECT);
+        set(CONST_4);
+        set(CONST_16);
+        set(CONST);
+        set(CONST_HIGH16);
+        set(CONST_WIDE_16);
+        set(CONST_WIDE_32);
+        set(CONST_WIDE);
+        set(CONST_WIDE_HIGH16);
+        set(CONST_STRING);
+        set(CONST_STRING_JUMBO);
+        set(CONST_CLASS);
+        set(MONITOR_ENTER);
+        set(MONITOR_EXIT);
+        set(CHECK_CAST);
+        set(INSTANCE_OF);
+        set(ARRAY_LENGTH);
+        set(NEW_INSTANCE);
+        set(NEW_ARRAY);
+        set(FILLED_NEW_ARRAY);
+        set(FILLED_NEW_ARRAY_RANGE);
+        set(FILL_ARRAY_DATA);
+        set(THROW);
+        set(GOTO);
+        set(GOTO_16);
+        set(GOTO_32);
+        set(PACKED_SWITCH);
+        set(SPARSE_SWITCH);
+        set(CMPL_FLOAT);
+        set(CMPG_FLOAT);
+        set(CMPL_DOUBLE);
+        set(CMPG_DOUBLE);
+        set(CMP_LONG);
+        set(IF_EQ);
+        set(IF_NE);
+        set(IF_LT);
+        set(IF_GE);
+        set(IF_GT);
+        set(IF_LE);
+        set(IF_EQZ);
+        set(IF_NEZ);
+        set(IF_LTZ);
+        set(IF_GEZ);
+        set(IF_GTZ);
+        set(IF_LEZ);
+        set(AGET);
+        set(AGET_WIDE);
+        set(AGET_OBJECT);
+        set(AGET_BOOLEAN);
+        set(AGET_BYTE);
+        set(AGET_CHAR);
+        set(AGET_SHORT);
+        set(APUT);
+        set(APUT_WIDE);
+        set(APUT_OBJECT);
+        set(APUT_BOOLEAN);
+        set(APUT_BYTE);
+        set(APUT_CHAR);
+        set(APUT_SHORT);
+        set(IGET);
+        set(IGET_WIDE);
+        set(IGET_OBJECT);
+        set(IGET_BOOLEAN);
+        set(IGET_BYTE);
+        set(IGET_CHAR);
+        set(IGET_SHORT);
+        set(IPUT);
+        set(IPUT_WIDE);
+        set(IPUT_OBJECT);
+        set(IPUT_BOOLEAN);
+        set(IPUT_BYTE);
+        set(IPUT_CHAR);
+        set(IPUT_SHORT);
+        set(SGET);
+        set(SGET_WIDE);
+        set(SGET_OBJECT);
+        set(SGET_BOOLEAN);
+        set(SGET_BYTE);
+        set(SGET_CHAR);
+        set(SGET_SHORT);
+        set(SPUT);
+        set(SPUT_WIDE);
+        set(SPUT_OBJECT);
+        set(SPUT_BOOLEAN);
+        set(SPUT_BYTE);
+        set(SPUT_CHAR);
+        set(SPUT_SHORT);
+        set(INVOKE_VIRTUAL);
+        set(INVOKE_SUPER);
+        set(INVOKE_DIRECT);
+        set(INVOKE_STATIC);
+        set(INVOKE_INTERFACE);
+        set(INVOKE_VIRTUAL_RANGE);
+        set(INVOKE_SUPER_RANGE);
+        set(INVOKE_DIRECT_RANGE);
+        set(INVOKE_STATIC_RANGE);
+        set(INVOKE_INTERFACE_RANGE);
+        set(NEG_INT);
+        set(NOT_INT);
+        set(NEG_LONG);
+        set(NOT_LONG);
+        set(NEG_FLOAT);
+        set(NEG_DOUBLE);
+        set(INT_TO_LONG);
+        set(INT_TO_FLOAT);
+        set(INT_TO_DOUBLE);
+        set(LONG_TO_INT);
+        set(LONG_TO_FLOAT);
+        set(LONG_TO_DOUBLE);
+        set(FLOAT_TO_INT);
+        set(FLOAT_TO_LONG);
+        set(FLOAT_TO_DOUBLE);
+        set(DOUBLE_TO_INT);
+        set(DOUBLE_TO_LONG);
+        set(DOUBLE_TO_FLOAT);
+        set(INT_TO_BYTE);
+        set(INT_TO_CHAR);
+        set(INT_TO_SHORT);
+        set(ADD_INT);
+        set(SUB_INT);
+        set(MUL_INT);
+        set(DIV_INT);
+        set(REM_INT);
+        set(AND_INT);
+        set(OR_INT);
+        set(XOR_INT);
+        set(SHL_INT);
+        set(SHR_INT);
+        set(USHR_INT);
+        set(ADD_LONG);
+        set(SUB_LONG);
+        set(MUL_LONG);
+        set(DIV_LONG);
+        set(REM_LONG);
+        set(AND_LONG);
+        set(OR_LONG);
+        set(XOR_LONG);
+        set(SHL_LONG);
+        set(SHR_LONG);
+        set(USHR_LONG);
+        set(ADD_FLOAT);
+        set(SUB_FLOAT);
+        set(MUL_FLOAT);
+        set(DIV_FLOAT);
+        set(REM_FLOAT);
+        set(ADD_DOUBLE);
+        set(SUB_DOUBLE);
+        set(MUL_DOUBLE);
+        set(DIV_DOUBLE);
+        set(REM_DOUBLE);
+        set(ADD_INT_2ADDR);
+        set(SUB_INT_2ADDR);
+        set(MUL_INT_2ADDR);
+        set(DIV_INT_2ADDR);
+        set(REM_INT_2ADDR);
+        set(AND_INT_2ADDR);
+        set(OR_INT_2ADDR);
+        set(XOR_INT_2ADDR);
+        set(SHL_INT_2ADDR);
+        set(SHR_INT_2ADDR);
+        set(USHR_INT_2ADDR);
+        set(ADD_LONG_2ADDR);
+        set(SUB_LONG_2ADDR);
+        set(MUL_LONG_2ADDR);
+        set(DIV_LONG_2ADDR);
+        set(REM_LONG_2ADDR);
+        set(AND_LONG_2ADDR);
+        set(OR_LONG_2ADDR);
+        set(XOR_LONG_2ADDR);
+        set(SHL_LONG_2ADDR);
+        set(SHR_LONG_2ADDR);
+        set(USHR_LONG_2ADDR);
+        set(ADD_FLOAT_2ADDR);
+        set(SUB_FLOAT_2ADDR);
+        set(MUL_FLOAT_2ADDR);
+        set(DIV_FLOAT_2ADDR);
+        set(REM_FLOAT_2ADDR);
+        set(ADD_DOUBLE_2ADDR);
+        set(SUB_DOUBLE_2ADDR);
+        set(MUL_DOUBLE_2ADDR);
+        set(DIV_DOUBLE_2ADDR);
+        set(REM_DOUBLE_2ADDR);
+        set(ADD_INT_LIT16);
+        set(RSUB_INT);
+        set(MUL_INT_LIT16);
+        set(DIV_INT_LIT16);
+        set(REM_INT_LIT16);
+        set(AND_INT_LIT16);
+        set(OR_INT_LIT16);
+        set(XOR_INT_LIT16);
+        set(ADD_INT_LIT8);
+        set(RSUB_INT_LIT8);
+        set(MUL_INT_LIT8);
+        set(DIV_INT_LIT8);
+        set(REM_INT_LIT8);
+        set(AND_INT_LIT8);
+        set(OR_INT_LIT8);
+        set(XOR_INT_LIT8);
+        set(SHL_INT_LIT8);
+        set(SHR_INT_LIT8);
+        set(USHR_INT_LIT8);
+        set(INVOKE_POLYMORPHIC);
+        set(INVOKE_POLYMORPHIC_RANGE);
+        set(INVOKE_CUSTOM);
+        set(INVOKE_CUSTOM_RANGE);
+        set(CONST_METHOD_HANDLE);
+        set(CONST_METHOD_TYPE);
+        // END(opcode-info-init)
+    }
+
+    /**
+     * This class is uninstantiable.
+     */
+    private OpcodeInfo() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Gets the {@link Info} for the given opcode value.
+     *
+     * @param opcode {@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the
+     * opcode value
+     * @return non-null; the associated opcode information instance
+     */
+    public static Info get(int opcode) {
+        int idx = opcode - Opcodes.MIN_VALUE;
+
+        try {
+            Info result = INFO[idx];
+            if (result != null) {
+                return result;
+            }
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Fall through.
+        }
+
+        throw new IllegalArgumentException("bogus opcode: "
+                + Hex.u2or4(opcode));
+    }
+
+    /**
+     * Gets the name of the given opcode.
+     */
+    public static String getName(int opcode) {
+        return get(opcode).getName();
+    }
+
+    /**
+     * Gets the format (an {@link InstructionCodec}) for the given opcode
+     * value.
+     */
+    public static InstructionCodec getFormat(int opcode) {
+        return get(opcode).getFormat();
+    }
+
+    /**
+     * Gets the {@link IndexType} for the given opcode value.
+     */
+    public static IndexType getIndexType(int opcode) {
+        return get(opcode).getIndexType();
+    }
+
+    /**
+     * Puts the given opcode into the table of all ops.
+     *
+     * @param opcode non-null; the opcode
+     */
+    private static void set(Info opcode) {
+        int idx = opcode.getOpcode() - Opcodes.MIN_VALUE;
+        INFO[idx] = opcode;
+    }
+
+    /**
+     * Information about an opcode.
+     */
+    public static class Info {
+        private final int opcode;
+        private final String name;
+        private final InstructionCodec format;
+        private final IndexType indexType;
+
+        public Info(int opcode, String name, InstructionCodec format,
+                IndexType indexType) {
+            this.opcode = opcode;
+            this.name = name;
+            this.format = format;
+            this.indexType = indexType;
+        }
+
+        public int getOpcode() {
+            return opcode;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public InstructionCodec getFormat() {
+            return format;
+        }
+
+        public IndexType getIndexType() {
+            return indexType;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/io/Opcodes.java b/dx/src/com/android/dx/io/Opcodes.java
new file mode 100644
index 0000000..1aede73
--- /dev/null
+++ b/dx/src/com/android/dx/io/Opcodes.java
@@ -0,0 +1,353 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io;
+
+/**
+ * All the Dalvik opcode value constants.
+ *
+ * @see <a href="https://source.android.com/devices/tech/dalvik/dalvik-bytecode">Dalvik bytecode</a>
+ */
+public final class Opcodes {
+    /**
+     * pseudo-opcode used for nonstandard format payload "instructions". TODO:
+     * Retire this concept, and start treating the payload instructions
+     * more like the rest.
+     */
+    public static final int SPECIAL_FORMAT = -1;
+
+    /**
+     * pseudo-opcode used to indicate there is no next opcode; used
+     * in opcode chaining lists
+     */
+    public static final int NO_NEXT = -1;
+
+    /** minimum valid opcode value */
+    public static final int MIN_VALUE = -1;
+
+    /** maximum valid opcode value */
+    public static final int MAX_VALUE = 0xffff;
+
+    // BEGIN(opcodes); GENERATED AUTOMATICALLY BY opcode-gen
+    public static final int NOP = 0x00;
+    public static final int MOVE = 0x01;
+    public static final int MOVE_FROM16 = 0x02;
+    public static final int MOVE_16 = 0x03;
+    public static final int MOVE_WIDE = 0x04;
+    public static final int MOVE_WIDE_FROM16 = 0x05;
+    public static final int MOVE_WIDE_16 = 0x06;
+    public static final int MOVE_OBJECT = 0x07;
+    public static final int MOVE_OBJECT_FROM16 = 0x08;
+    public static final int MOVE_OBJECT_16 = 0x09;
+    public static final int MOVE_RESULT = 0x0a;
+    public static final int MOVE_RESULT_WIDE = 0x0b;
+    public static final int MOVE_RESULT_OBJECT = 0x0c;
+    public static final int MOVE_EXCEPTION = 0x0d;
+    public static final int RETURN_VOID = 0x0e;
+    public static final int RETURN = 0x0f;
+    public static final int RETURN_WIDE = 0x10;
+    public static final int RETURN_OBJECT = 0x11;
+    public static final int CONST_4 = 0x12;
+    public static final int CONST_16 = 0x13;
+    public static final int CONST = 0x14;
+    public static final int CONST_HIGH16 = 0x15;
+    public static final int CONST_WIDE_16 = 0x16;
+    public static final int CONST_WIDE_32 = 0x17;
+    public static final int CONST_WIDE = 0x18;
+    public static final int CONST_WIDE_HIGH16 = 0x19;
+    public static final int CONST_STRING = 0x1a;
+    public static final int CONST_STRING_JUMBO = 0x1b;
+    public static final int CONST_CLASS = 0x1c;
+    public static final int MONITOR_ENTER = 0x1d;
+    public static final int MONITOR_EXIT = 0x1e;
+    public static final int CHECK_CAST = 0x1f;
+    public static final int INSTANCE_OF = 0x20;
+    public static final int ARRAY_LENGTH = 0x21;
+    public static final int NEW_INSTANCE = 0x22;
+    public static final int NEW_ARRAY = 0x23;
+    public static final int FILLED_NEW_ARRAY = 0x24;
+    public static final int FILLED_NEW_ARRAY_RANGE = 0x25;
+    public static final int FILL_ARRAY_DATA = 0x26;
+    public static final int THROW = 0x27;
+    public static final int GOTO = 0x28;
+    public static final int GOTO_16 = 0x29;
+    public static final int GOTO_32 = 0x2a;
+    public static final int PACKED_SWITCH = 0x2b;
+    public static final int SPARSE_SWITCH = 0x2c;
+    public static final int CMPL_FLOAT = 0x2d;
+    public static final int CMPG_FLOAT = 0x2e;
+    public static final int CMPL_DOUBLE = 0x2f;
+    public static final int CMPG_DOUBLE = 0x30;
+    public static final int CMP_LONG = 0x31;
+    public static final int IF_EQ = 0x32;
+    public static final int IF_NE = 0x33;
+    public static final int IF_LT = 0x34;
+    public static final int IF_GE = 0x35;
+    public static final int IF_GT = 0x36;
+    public static final int IF_LE = 0x37;
+    public static final int IF_EQZ = 0x38;
+    public static final int IF_NEZ = 0x39;
+    public static final int IF_LTZ = 0x3a;
+    public static final int IF_GEZ = 0x3b;
+    public static final int IF_GTZ = 0x3c;
+    public static final int IF_LEZ = 0x3d;
+    public static final int AGET = 0x44;
+    public static final int AGET_WIDE = 0x45;
+    public static final int AGET_OBJECT = 0x46;
+    public static final int AGET_BOOLEAN = 0x47;
+    public static final int AGET_BYTE = 0x48;
+    public static final int AGET_CHAR = 0x49;
+    public static final int AGET_SHORT = 0x4a;
+    public static final int APUT = 0x4b;
+    public static final int APUT_WIDE = 0x4c;
+    public static final int APUT_OBJECT = 0x4d;
+    public static final int APUT_BOOLEAN = 0x4e;
+    public static final int APUT_BYTE = 0x4f;
+    public static final int APUT_CHAR = 0x50;
+    public static final int APUT_SHORT = 0x51;
+    public static final int IGET = 0x52;
+    public static final int IGET_WIDE = 0x53;
+    public static final int IGET_OBJECT = 0x54;
+    public static final int IGET_BOOLEAN = 0x55;
+    public static final int IGET_BYTE = 0x56;
+    public static final int IGET_CHAR = 0x57;
+    public static final int IGET_SHORT = 0x58;
+    public static final int IPUT = 0x59;
+    public static final int IPUT_WIDE = 0x5a;
+    public static final int IPUT_OBJECT = 0x5b;
+    public static final int IPUT_BOOLEAN = 0x5c;
+    public static final int IPUT_BYTE = 0x5d;
+    public static final int IPUT_CHAR = 0x5e;
+    public static final int IPUT_SHORT = 0x5f;
+    public static final int SGET = 0x60;
+    public static final int SGET_WIDE = 0x61;
+    public static final int SGET_OBJECT = 0x62;
+    public static final int SGET_BOOLEAN = 0x63;
+    public static final int SGET_BYTE = 0x64;
+    public static final int SGET_CHAR = 0x65;
+    public static final int SGET_SHORT = 0x66;
+    public static final int SPUT = 0x67;
+    public static final int SPUT_WIDE = 0x68;
+    public static final int SPUT_OBJECT = 0x69;
+    public static final int SPUT_BOOLEAN = 0x6a;
+    public static final int SPUT_BYTE = 0x6b;
+    public static final int SPUT_CHAR = 0x6c;
+    public static final int SPUT_SHORT = 0x6d;
+    public static final int INVOKE_VIRTUAL = 0x6e;
+    public static final int INVOKE_SUPER = 0x6f;
+    public static final int INVOKE_DIRECT = 0x70;
+    public static final int INVOKE_STATIC = 0x71;
+    public static final int INVOKE_INTERFACE = 0x72;
+    public static final int INVOKE_VIRTUAL_RANGE = 0x74;
+    public static final int INVOKE_SUPER_RANGE = 0x75;
+    public static final int INVOKE_DIRECT_RANGE = 0x76;
+    public static final int INVOKE_STATIC_RANGE = 0x77;
+    public static final int INVOKE_INTERFACE_RANGE = 0x78;
+    public static final int NEG_INT = 0x7b;
+    public static final int NOT_INT = 0x7c;
+    public static final int NEG_LONG = 0x7d;
+    public static final int NOT_LONG = 0x7e;
+    public static final int NEG_FLOAT = 0x7f;
+    public static final int NEG_DOUBLE = 0x80;
+    public static final int INT_TO_LONG = 0x81;
+    public static final int INT_TO_FLOAT = 0x82;
+    public static final int INT_TO_DOUBLE = 0x83;
+    public static final int LONG_TO_INT = 0x84;
+    public static final int LONG_TO_FLOAT = 0x85;
+    public static final int LONG_TO_DOUBLE = 0x86;
+    public static final int FLOAT_TO_INT = 0x87;
+    public static final int FLOAT_TO_LONG = 0x88;
+    public static final int FLOAT_TO_DOUBLE = 0x89;
+    public static final int DOUBLE_TO_INT = 0x8a;
+    public static final int DOUBLE_TO_LONG = 0x8b;
+    public static final int DOUBLE_TO_FLOAT = 0x8c;
+    public static final int INT_TO_BYTE = 0x8d;
+    public static final int INT_TO_CHAR = 0x8e;
+    public static final int INT_TO_SHORT = 0x8f;
+    public static final int ADD_INT = 0x90;
+    public static final int SUB_INT = 0x91;
+    public static final int MUL_INT = 0x92;
+    public static final int DIV_INT = 0x93;
+    public static final int REM_INT = 0x94;
+    public static final int AND_INT = 0x95;
+    public static final int OR_INT = 0x96;
+    public static final int XOR_INT = 0x97;
+    public static final int SHL_INT = 0x98;
+    public static final int SHR_INT = 0x99;
+    public static final int USHR_INT = 0x9a;
+    public static final int ADD_LONG = 0x9b;
+    public static final int SUB_LONG = 0x9c;
+    public static final int MUL_LONG = 0x9d;
+    public static final int DIV_LONG = 0x9e;
+    public static final int REM_LONG = 0x9f;
+    public static final int AND_LONG = 0xa0;
+    public static final int OR_LONG = 0xa1;
+    public static final int XOR_LONG = 0xa2;
+    public static final int SHL_LONG = 0xa3;
+    public static final int SHR_LONG = 0xa4;
+    public static final int USHR_LONG = 0xa5;
+    public static final int ADD_FLOAT = 0xa6;
+    public static final int SUB_FLOAT = 0xa7;
+    public static final int MUL_FLOAT = 0xa8;
+    public static final int DIV_FLOAT = 0xa9;
+    public static final int REM_FLOAT = 0xaa;
+    public static final int ADD_DOUBLE = 0xab;
+    public static final int SUB_DOUBLE = 0xac;
+    public static final int MUL_DOUBLE = 0xad;
+    public static final int DIV_DOUBLE = 0xae;
+    public static final int REM_DOUBLE = 0xaf;
+    public static final int ADD_INT_2ADDR = 0xb0;
+    public static final int SUB_INT_2ADDR = 0xb1;
+    public static final int MUL_INT_2ADDR = 0xb2;
+    public static final int DIV_INT_2ADDR = 0xb3;
+    public static final int REM_INT_2ADDR = 0xb4;
+    public static final int AND_INT_2ADDR = 0xb5;
+    public static final int OR_INT_2ADDR = 0xb6;
+    public static final int XOR_INT_2ADDR = 0xb7;
+    public static final int SHL_INT_2ADDR = 0xb8;
+    public static final int SHR_INT_2ADDR = 0xb9;
+    public static final int USHR_INT_2ADDR = 0xba;
+    public static final int ADD_LONG_2ADDR = 0xbb;
+    public static final int SUB_LONG_2ADDR = 0xbc;
+    public static final int MUL_LONG_2ADDR = 0xbd;
+    public static final int DIV_LONG_2ADDR = 0xbe;
+    public static final int REM_LONG_2ADDR = 0xbf;
+    public static final int AND_LONG_2ADDR = 0xc0;
+    public static final int OR_LONG_2ADDR = 0xc1;
+    public static final int XOR_LONG_2ADDR = 0xc2;
+    public static final int SHL_LONG_2ADDR = 0xc3;
+    public static final int SHR_LONG_2ADDR = 0xc4;
+    public static final int USHR_LONG_2ADDR = 0xc5;
+    public static final int ADD_FLOAT_2ADDR = 0xc6;
+    public static final int SUB_FLOAT_2ADDR = 0xc7;
+    public static final int MUL_FLOAT_2ADDR = 0xc8;
+    public static final int DIV_FLOAT_2ADDR = 0xc9;
+    public static final int REM_FLOAT_2ADDR = 0xca;
+    public static final int ADD_DOUBLE_2ADDR = 0xcb;
+    public static final int SUB_DOUBLE_2ADDR = 0xcc;
+    public static final int MUL_DOUBLE_2ADDR = 0xcd;
+    public static final int DIV_DOUBLE_2ADDR = 0xce;
+    public static final int REM_DOUBLE_2ADDR = 0xcf;
+    public static final int ADD_INT_LIT16 = 0xd0;
+    public static final int RSUB_INT = 0xd1;
+    public static final int MUL_INT_LIT16 = 0xd2;
+    public static final int DIV_INT_LIT16 = 0xd3;
+    public static final int REM_INT_LIT16 = 0xd4;
+    public static final int AND_INT_LIT16 = 0xd5;
+    public static final int OR_INT_LIT16 = 0xd6;
+    public static final int XOR_INT_LIT16 = 0xd7;
+    public static final int ADD_INT_LIT8 = 0xd8;
+    public static final int RSUB_INT_LIT8 = 0xd9;
+    public static final int MUL_INT_LIT8 = 0xda;
+    public static final int DIV_INT_LIT8 = 0xdb;
+    public static final int REM_INT_LIT8 = 0xdc;
+    public static final int AND_INT_LIT8 = 0xdd;
+    public static final int OR_INT_LIT8 = 0xde;
+    public static final int XOR_INT_LIT8 = 0xdf;
+    public static final int SHL_INT_LIT8 = 0xe0;
+    public static final int SHR_INT_LIT8 = 0xe1;
+    public static final int USHR_INT_LIT8 = 0xe2;
+    public static final int INVOKE_POLYMORPHIC = 0xfa;
+    public static final int INVOKE_POLYMORPHIC_RANGE = 0xfb;
+    public static final int INVOKE_CUSTOM = 0xfc;
+    public static final int INVOKE_CUSTOM_RANGE = 0xfd;
+    public static final int CONST_METHOD_HANDLE = 0xfe;
+    public static final int CONST_METHOD_TYPE = 0xff;
+    // END(opcodes)
+
+    // TODO: Generate these payload opcodes with opcode-gen.
+
+    /**
+     * special pseudo-opcode value for packed-switch data payload
+     * instructions
+     */
+    public static final int PACKED_SWITCH_PAYLOAD = 0x100;
+
+    /** special pseudo-opcode value for packed-switch data payload
+     * instructions
+     */
+    public static final int SPARSE_SWITCH_PAYLOAD = 0x200;
+
+    /** special pseudo-opcode value for fill-array-data data payload
+     * instructions
+     */
+    public static final int FILL_ARRAY_DATA_PAYLOAD = 0x300;
+
+    /**
+     * This class is uninstantiable.
+     */
+    private Opcodes() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Determines if the given opcode has the right "shape" to be
+     * valid. This includes the range {@code 0x01..0xfe}, the range
+     * {@code 0x00ff..0xffff} where the low-order byte is either
+     * {@code 0} or {@code 0xff}, and the special opcode values {@code
+     * SPECIAL_FORMAT} and {@code NO_NEXT}. Note that not all of the
+     * opcode values that pass this test are in fact used. This method
+     * is meant to perform a quick check to reject blatantly wrong
+     * values (e.g. when validating arguments).
+     *
+     * @param opcode the opcode value
+     * @return {@code true} iff the value has the right "shape" to be
+     * possibly valid
+     */
+    public static boolean isValidShape(int opcode) {
+        /*
+         * Note: This method bakes in knowledge that all opcodes are
+         * one of the forms:
+         *
+         *   * single byte in range 0x01..0xfe -- normal opcodes
+         *   * (byteValue << 8) -- nop and data payload opcodes
+         *   * ((byteValue << 8) | 0xff) -- 16-bit extended opcodes
+         *   * SPECIAL_FORMAT or NO_NEXT -- pseudo-opcodes
+         */
+
+        // Note: SPECIAL_FORMAT == NO_NEXT.
+        if (opcode < SPECIAL_FORMAT) {
+            return false;
+        } else if (opcode == SPECIAL_FORMAT) {
+            return true;
+        }
+
+        int lowByte = opcode & 0xff;
+        if ((lowByte == 0) || (lowByte == 0xff)) {
+            return true;
+        }
+
+        return (opcode & 0xff00) == 0;
+    }
+
+    /**
+     * Gets the opcode out of an opcode unit, the latter of which may also
+     * include one or more argument values.
+     *
+     * @param opcodeUnit the opcode-containing code unit
+     * @return the extracted opcode
+     */
+    public static int extractOpcodeFromUnit(int opcodeUnit) {
+        /*
+         * Note: This method bakes in knowledge that all opcodes are
+         * either single-byte or of the forms (byteValue << 8) or
+         * ((byteValue << 8) | 0xff).
+         */
+
+        int lowByte = opcodeUnit & 0xff;
+        return ((lowByte == 0) || (lowByte == 0xff)) ? opcodeUnit : lowByte;
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/AddressMap.java b/dx/src/com/android/dx/io/instructions/AddressMap.java
new file mode 100644
index 0000000..953bdc9
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/AddressMap.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import java.util.HashMap;
+
+/**
+ * Map from addresses to addresses, where addresses are all
+ * {@code int}s.
+ */
+public final class AddressMap {
+    /** underlying map. TODO: This might be too inefficient. */
+    private final HashMap<Integer,Integer> map;
+
+    /**
+     * Constructs an instance.
+     */
+    public AddressMap() {
+        map = new HashMap<Integer,Integer>();
+    }
+
+    /**
+     * Gets the value address corresponding to the given key address. Returns
+     * {@code -1} if there is no mapping.
+     */
+    public int get(int keyAddress) {
+        Integer value = map.get(keyAddress);
+        return (value == null) ? -1 : value;
+    }
+
+    /**
+     * Sets the value address associated with the given key address.
+     */
+    public void put(int keyAddress, int valueAddress) {
+        map.put(keyAddress, valueAddress);
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/BaseCodeCursor.java b/dx/src/com/android/dx/io/instructions/BaseCodeCursor.java
new file mode 100644
index 0000000..e541b31
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/BaseCodeCursor.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+/**
+ * Base implementation of {@link CodeCursor}.
+ */
+public abstract class BaseCodeCursor implements CodeCursor {
+    /** base address map */
+    private final AddressMap baseAddressMap;
+
+    /** next index within {@link #baseAddressMap} to read from or write to */
+    private int cursor;
+
+    /**
+     * Constructs an instance.
+     */
+    public BaseCodeCursor() {
+        this.baseAddressMap = new AddressMap();
+        this.cursor = 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int cursor() {
+        return cursor;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int baseAddressForCursor() {
+        int mapped = baseAddressMap.get(cursor);
+        return (mapped >= 0) ? mapped : cursor;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void setBaseAddress(int targetAddress, int baseAddress) {
+        baseAddressMap.put(targetAddress, baseAddress);
+    }
+
+    /**
+     * Advance the cursor by the indicated amount.
+     */
+    protected final void advance(int amount) {
+        cursor += amount;
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/CodeCursor.java b/dx/src/com/android/dx/io/instructions/CodeCursor.java
new file mode 100644
index 0000000..de29e30
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/CodeCursor.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+/**
+ * Cursor over code units, for reading or writing out Dalvik bytecode.
+ */
+public interface CodeCursor {
+    /**
+     * Gets the cursor. The cursor is the offset in code units from
+     * the start of the input of the next code unit to be read or
+     * written, where the input generally consists of the code for a
+     * single method.
+     */
+    public int cursor();
+
+    /**
+     * Gets the base address associated with the current cursor. This
+     * differs from the cursor value when explicitly set (by {@link
+     * #setBaseAddress}). This is used, in particular, to convey base
+     * addresses to switch data payload instructions, whose relative
+     * addresses are relative to the address of a dependant switch
+     * instruction.
+     */
+    public int baseAddressForCursor();
+
+    /**
+     * Sets the base address for the given target address to be as indicated.
+     *
+     * @see #baseAddressForCursor
+     */
+    public void setBaseAddress(int targetAddress, int baseAddress);
+}
diff --git a/dx/src/com/android/dx/io/instructions/CodeInput.java b/dx/src/com/android/dx/io/instructions/CodeInput.java
new file mode 100644
index 0000000..41a5ef7
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/CodeInput.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import java.io.EOFException;
+
+/**
+ * Input stream of code units, for reading in Dalvik bytecode.
+ */
+public interface CodeInput extends CodeCursor {
+    /**
+     * Returns whether there are any more code units to read. This
+     * is analogous to {@code hasNext()} on an interator.
+     */
+    public boolean hasMore();
+
+    /**
+     * Reads a code unit.
+     */
+    public int read() throws EOFException;
+
+    /**
+     * Reads two code units, treating them as a little-endian {@code int}.
+     */
+    public int readInt() throws EOFException;
+
+    /**
+     * Reads four code units, treating them as a little-endian {@code long}.
+     */
+    public long readLong() throws EOFException;
+}
diff --git a/dx/src/com/android/dx/io/instructions/CodeOutput.java b/dx/src/com/android/dx/io/instructions/CodeOutput.java
new file mode 100644
index 0000000..7d0077e
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/CodeOutput.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+/**
+ * Output stream of code units, for writing out Dalvik bytecode.
+ */
+public interface CodeOutput extends CodeCursor {
+    /**
+     * Writes a code unit.
+     */
+    public void write(short codeUnit);
+
+    /**
+     * Writes two code units.
+     */
+    public void write(short u0, short u1);
+
+    /**
+     * Writes three code units.
+     */
+    public void write(short u0, short u1, short u2);
+
+    /**
+     * Writes four code units.
+     */
+    public void write(short u0, short u1, short u2, short u3);
+
+    /**
+     * Writes five code units.
+     */
+    public void write(short u0, short u1, short u2, short u3, short u4);
+
+    /**
+     * Writes an {@code int}, little-endian.
+     */
+    public void writeInt(int value);
+
+    /**
+     * Writes a {@code long}, little-endian.
+     */
+    public void writeLong(long value);
+
+    /**
+     * Writes the contents of the given array.
+     */
+    public void write(byte[] data);
+
+    /**
+     * Writes the contents of the given array.
+     */
+    public void write(short[] data);
+
+    /**
+     * Writes the contents of the given array.
+     */
+    public void write(int[] data);
+
+    /**
+     * Writes the contents of the given array.
+     */
+    public void write(long[] data);
+}
diff --git a/dx/src/com/android/dx/io/instructions/DecodedInstruction.java b/dx/src/com/android/dx/io/instructions/DecodedInstruction.java
new file mode 100644
index 0000000..921001a
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/DecodedInstruction.java
@@ -0,0 +1,488 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dex.DexException;
+import com.android.dx.io.IndexType;
+import com.android.dx.io.OpcodeInfo;
+import com.android.dx.io.Opcodes;
+import com.android.dx.util.Hex;
+import java.io.EOFException;
+
+/**
+ * A decoded Dalvik instruction. This consists of a format codec, a
+ * numeric opcode, an optional index type, and any additional
+ * arguments of the instruction. The additional arguments (if any) are
+ * represented as uninterpreted data.
+ *
+ * <p><b>Note:</b> The names of the arguments are <i>not</i> meant to
+ * match the names given in the Dalvik instruction format
+ * specification, specification which just names fields (somewhat)
+ * arbitrarily alphabetically from A. In this class, non-register
+ * fields are given descriptive names and register fields are
+ * consistently named alphabetically.</p>
+ */
+public abstract class DecodedInstruction {
+    /** non-null; instruction format / codec */
+    private final InstructionCodec format;
+
+    /** opcode number */
+    private final int opcode;
+
+    /** constant index argument */
+    private final int index;
+
+    /** null-ok; index type */
+    private final IndexType indexType;
+
+    /**
+     * target address argument. This is an absolute address, not just
+     * a signed offset. <b>Note:</b> The address is unsigned, even
+     * though it is stored in an {@code int}.
+     */
+    private final int target;
+
+    /**
+     * literal value argument; also used for special verification error
+     * constants (format 20bc) as well as should-be-zero values
+     * (formats 10x, 20t, 30t, and 32x)
+     */
+    private final long literal;
+
+    /**
+     * Decodes an instruction from the given input source.
+     */
+    public static DecodedInstruction decode(CodeInput in) throws EOFException {
+        int opcodeUnit = in.read();
+        int opcode = Opcodes.extractOpcodeFromUnit(opcodeUnit);
+        InstructionCodec format = OpcodeInfo.getFormat(opcode);
+
+        return format.decode(opcodeUnit, in);
+    }
+
+    /**
+     * Decodes an array of instructions. The result has non-null
+     * elements at each offset that represents the start of an
+     * instruction.
+     */
+    public static DecodedInstruction[] decodeAll(short[] encodedInstructions) {
+        int size = encodedInstructions.length;
+        DecodedInstruction[] decoded = new DecodedInstruction[size];
+        ShortArrayCodeInput in = new ShortArrayCodeInput(encodedInstructions);
+
+        try {
+            while (in.hasMore()) {
+                decoded[in.cursor()] = DecodedInstruction.decode(in);
+            }
+        } catch (EOFException ex) {
+            throw new DexException(ex);
+        }
+
+        return decoded;
+    }
+
+    /**
+     * Constructs an instance.
+     */
+    public DecodedInstruction(InstructionCodec format, int opcode,
+            int index, IndexType indexType, int target, long literal) {
+        if (format == null) {
+            throw new NullPointerException("format == null");
+        }
+
+        if (!Opcodes.isValidShape(opcode)) {
+            throw new IllegalArgumentException("invalid opcode");
+        }
+
+        this.format = format;
+        this.opcode = opcode;
+        this.index = index;
+        this.indexType = indexType;
+        this.target = target;
+        this.literal = literal;
+    }
+
+    public final InstructionCodec getFormat() {
+        return format;
+    }
+
+    public final int getOpcode() {
+        return opcode;
+    }
+
+    /**
+     * Gets the opcode, as a code unit.
+     */
+    public final short getOpcodeUnit() {
+        return (short) opcode;
+    }
+
+    public final int getIndex() {
+        return index;
+    }
+
+    /**
+     * Gets the index, as a code unit.
+     */
+    public final short getIndexUnit() {
+        return (short) index;
+    }
+
+    public final IndexType getIndexType() {
+        return indexType;
+    }
+
+    /**
+     * Gets the raw target.
+     */
+    public final int getTarget() {
+        return target;
+    }
+
+    /**
+     * Gets the target as a relative offset from the given address.
+     */
+    public final int getTarget(int baseAddress) {
+        return target - baseAddress;
+    }
+
+    /**
+     * Gets the target as a relative offset from the given base
+     * address, as a code unit. This will throw if the value is out of
+     * the range of a signed code unit.
+     */
+    public final short getTargetUnit(int baseAddress) {
+        int relativeTarget = getTarget(baseAddress);
+
+        if (relativeTarget != (short) relativeTarget) {
+            throw new DexException("Target out of range: "
+                    + Hex.s4(relativeTarget));
+        }
+
+        return (short) relativeTarget;
+    }
+
+    /**
+     * Gets the target as a relative offset from the given base
+     * address, masked to be a byte in size. This will throw if the
+     * value is out of the range of a signed byte.
+     */
+    public final int getTargetByte(int baseAddress) {
+        int relativeTarget = getTarget(baseAddress);
+
+        if (relativeTarget != (byte) relativeTarget) {
+            throw new DexException("Target out of range: "
+                    + Hex.s4(relativeTarget));
+        }
+
+        return relativeTarget & 0xff;
+    }
+
+    public final long getLiteral() {
+        return literal;
+    }
+
+    /**
+     * Gets the literal value, masked to be an int in size. This will
+     * throw if the value is out of the range of a signed int.
+     */
+    public final int getLiteralInt() {
+        if (literal != (int) literal) {
+            throw new DexException("Literal out of range: " + Hex.u8(literal));
+        }
+
+        return (int) literal;
+    }
+
+    /**
+     * Gets the literal value, as a code unit. This will throw if the
+     * value is out of the range of a signed code unit.
+     */
+    public final short getLiteralUnit() {
+        if (literal != (short) literal) {
+            throw new DexException("Literal out of range: " + Hex.u8(literal));
+        }
+
+        return (short) literal;
+    }
+
+    /**
+     * Gets the literal value, masked to be a byte in size. This will
+     * throw if the value is out of the range of a signed byte.
+     */
+    public final int getLiteralByte() {
+        if (literal != (byte) literal) {
+            throw new DexException("Literal out of range: " + Hex.u8(literal));
+        }
+
+        return (int) literal & 0xff;
+    }
+
+    /**
+     * Gets the literal value, masked to be a nibble in size. This
+     * will throw if the value is out of the range of a signed nibble.
+     */
+    public final int getLiteralNibble() {
+        if ((literal < -8) || (literal > 7)) {
+            throw new DexException("Literal out of range: " + Hex.u8(literal));
+        }
+
+        return (int) literal & 0xf;
+    }
+
+    public abstract int getRegisterCount();
+
+    public int getA() {
+        return 0;
+    }
+
+    public int getB() {
+        return 0;
+    }
+
+    public int getC() {
+        return 0;
+    }
+
+    public int getD() {
+        return 0;
+    }
+
+    public int getE() {
+        return 0;
+    }
+
+    /**
+     * Gets the register count, as a code unit. This will throw if the
+     * value is out of the range of an unsigned code unit.
+     */
+    public final short getRegisterCountUnit() {
+        int registerCount = getRegisterCount();
+
+        if ((registerCount & ~0xffff) != 0) {
+            throw new DexException("Register count out of range: "
+                    + Hex.u8(registerCount));
+        }
+
+        return (short) registerCount;
+    }
+
+    /**
+     * Gets the A register number, as a code unit. This will throw if the
+     * value is out of the range of an unsigned code unit.
+     */
+    public final short getAUnit() {
+        int a = getA();
+
+        if ((a & ~0xffff) != 0) {
+            throw new DexException("Register A out of range: " + Hex.u8(a));
+        }
+
+        return (short) a;
+    }
+
+    /**
+     * Gets the A register number, as a byte. This will throw if the
+     * value is out of the range of an unsigned byte.
+     */
+    public final short getAByte() {
+        int a = getA();
+
+        if ((a & ~0xff) != 0) {
+            throw new DexException("Register A out of range: " + Hex.u8(a));
+        }
+
+        return (short) a;
+    }
+
+    /**
+     * Gets the A register number, as a nibble. This will throw if the
+     * value is out of the range of an unsigned nibble.
+     */
+    public final short getANibble() {
+        int a = getA();
+
+        if ((a & ~0xf) != 0) {
+            throw new DexException("Register A out of range: " + Hex.u8(a));
+        }
+
+        return (short) a;
+    }
+
+    /**
+     * Gets the B register number, as a code unit. This will throw if the
+     * value is out of the range of an unsigned code unit.
+     */
+    public final short getBUnit() {
+        int b = getB();
+
+        if ((b & ~0xffff) != 0) {
+            throw new DexException("Register B out of range: " + Hex.u8(b));
+        }
+
+        return (short) b;
+    }
+
+    /**
+     * Gets the B register number, as a byte. This will throw if the
+     * value is out of the range of an unsigned byte.
+     */
+    public final short getBByte() {
+        int b = getB();
+
+        if ((b & ~0xff) != 0) {
+            throw new DexException("Register B out of range: " + Hex.u8(b));
+        }
+
+        return (short) b;
+    }
+
+    /**
+     * Gets the B register number, as a nibble. This will throw if the
+     * value is out of the range of an unsigned nibble.
+     */
+    public final short getBNibble() {
+        int b = getB();
+
+        if ((b & ~0xf) != 0) {
+            throw new DexException("Register B out of range: " + Hex.u8(b));
+        }
+
+        return (short) b;
+    }
+
+    /**
+     * Gets the C register number, as a code unit. This will throw if the
+     * value is out of the range of an unsigned code unit.
+     */
+    public final short getCUnit() {
+        int c = getC();
+
+        if ((c & ~0xffff) != 0) {
+            throw new DexException("Register C out of range: " + Hex.u8(c));
+        }
+
+        return (short) c;
+    }
+
+    /**
+     * Gets the C register number, as a byte. This will throw if the
+     * value is out of the range of an unsigned byte.
+     */
+    public final short getCByte() {
+        int c = getC();
+
+        if ((c & ~0xff) != 0) {
+            throw new DexException("Register C out of range: " + Hex.u8(c));
+        }
+
+        return (short) c;
+    }
+
+    /**
+     * Gets the C register number, as a nibble. This will throw if the
+     * value is out of the range of an unsigned nibble.
+     */
+    public final short getCNibble() {
+        int c = getC();
+
+        if ((c & ~0xf) != 0) {
+            throw new DexException("Register C out of range: " + Hex.u8(c));
+        }
+
+        return (short) c;
+    }
+
+    /**
+     * Gets the D register number, as a code unit. This will throw if the
+     * value is out of the range of an unsigned code unit.
+     */
+    public final short getDUnit() {
+        int d = getD();
+
+        if ((d & ~0xffff) != 0) {
+            throw new DexException("Register D out of range: " + Hex.u8(d));
+        }
+
+        return (short) d;
+    }
+
+    /**
+     * Gets the D register number, as a byte. This will throw if the
+     * value is out of the range of an unsigned byte.
+     */
+    public final short getDByte() {
+        int d = getD();
+
+        if ((d & ~0xff) != 0) {
+            throw new DexException("Register D out of range: " + Hex.u8(d));
+        }
+
+        return (short) d;
+    }
+
+    /**
+     * Gets the D register number, as a nibble. This will throw if the
+     * value is out of the range of an unsigned nibble.
+     */
+    public final short getDNibble() {
+        int d = getD();
+
+        if ((d & ~0xf) != 0) {
+            throw new DexException("Register D out of range: " + Hex.u8(d));
+        }
+
+        return (short) d;
+    }
+
+    /**
+     * Gets the E register number, as a nibble. This will throw if the
+     * value is out of the range of an unsigned nibble.
+     */
+    public final short getENibble() {
+        int e = getE();
+
+        if ((e & ~0xf) != 0) {
+            throw new DexException("Register E out of range: " + Hex.u8(e));
+        }
+
+        return (short) e;
+    }
+
+    /**
+     * Encodes this instance to the given output.
+     */
+    public final void encode(CodeOutput out) {
+        format.encode(this, out);
+    }
+
+    /**
+     * Returns an instance just like this one, except with the index replaced
+     * with the given one.
+     */
+    public abstract DecodedInstruction withIndex(int newIndex);
+
+    /** Update the instruction with a new 45cc or 4rcc proto index. */
+    public DecodedInstruction withProtoIndex(int newIndex, int newProtoIndex) {
+        throw new IllegalStateException(getClass().toString());
+    }
+
+    /** Returns a 45cc or 4rcc proto index. */
+    public short getProtoIndex() {
+        throw new IllegalStateException(getClass().toString());
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/FillArrayDataPayloadDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/FillArrayDataPayloadDecodedInstruction.java
new file mode 100644
index 0000000..f6cf860
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/FillArrayDataPayloadDecodedInstruction.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+/**
+ * A decoded Dalvik instruction which contains the payload for
+ * a {@code packed-switch} instruction.
+ */
+public final class FillArrayDataPayloadDecodedInstruction
+        extends DecodedInstruction {
+    /** data array */
+    private final Object data;
+
+    /** number of elements */
+    private final int size;
+
+    /** element width */
+    private final int elementWidth;
+
+    /**
+     * Constructs an instance. This private instance doesn't check the
+     * type of the data array.
+     */
+    private FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
+            int opcode, Object data, int size, int elementWidth) {
+        super(format, opcode, 0, null, 0, 0L);
+
+        this.data = data;
+        this.size = size;
+        this.elementWidth = elementWidth;
+    }
+
+    /**
+     * Constructs an instance.
+     */
+    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
+            int opcode, byte[] data) {
+        this(format, opcode, data, data.length, 1);
+    }
+
+    /**
+     * Constructs an instance.
+     */
+    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
+            int opcode, short[] data) {
+        this(format, opcode, data, data.length, 2);
+    }
+
+    /**
+     * Constructs an instance.
+     */
+    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
+            int opcode, int[] data) {
+        this(format, opcode, data, data.length, 4);
+    }
+
+    /**
+     * Constructs an instance.
+     */
+    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
+            int opcode, long[] data) {
+        this(format, opcode, data, data.length, 8);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 0;
+    }
+
+    public short getElementWidthUnit() {
+        return (short) elementWidth;
+    }
+
+    public int getSize() {
+        return size;
+    }
+
+    public Object getData() {
+        return data;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        throw new UnsupportedOperationException("no index in instruction");
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/FiveRegisterDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/FiveRegisterDecodedInstruction.java
new file mode 100644
index 0000000..2578416
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/FiveRegisterDecodedInstruction.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/**
+ * A decoded Dalvik instruction which has five register arguments.
+ */
+public final class FiveRegisterDecodedInstruction extends DecodedInstruction {
+    /** register argument "A" */
+    private final int a;
+
+    /** register argument "B" */
+    private final int b;
+
+    /** register argument "C" */
+    private final int c;
+
+    /** register argument "D" */
+    private final int d;
+
+    /** register argument "E" */
+    private final int e;
+
+    /**
+     * Constructs an instance.
+     */
+    public FiveRegisterDecodedInstruction(InstructionCodec format, int opcode,
+            int index, IndexType indexType, int target, long literal,
+            int a, int b, int c, int d, int e) {
+        super(format, opcode, index, indexType, target, literal);
+
+        this.a = a;
+        this.b = b;
+        this.c = c;
+        this.d = d;
+        this.e = e;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 5;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getA() {
+        return a;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getB() {
+        return b;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getC() {
+        return c;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getD() {
+        return d;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getE() {
+        return e;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        return new FiveRegisterDecodedInstruction(
+                getFormat(), getOpcode(), newIndex, getIndexType(),
+                getTarget(), getLiteral(), a, b, c, d, e);
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/FourRegisterDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/FourRegisterDecodedInstruction.java
new file mode 100644
index 0000000..6b39e50
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/FourRegisterDecodedInstruction.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/**
+ * A decoded Dalvik instruction which has five register arguments.
+ */
+public final class FourRegisterDecodedInstruction extends DecodedInstruction {
+    /** register argument "A" */
+    private final int a;
+
+    /** register argument "B" */
+    private final int b;
+
+    /** register argument "C" */
+    private final int c;
+
+    /** register argument "D" */
+    private final int d;
+
+    /**
+     * Constructs an instance.
+     */
+    public FourRegisterDecodedInstruction(InstructionCodec format, int opcode,
+            int index, IndexType indexType, int target, long literal,
+            int a, int b, int c, int d) {
+        super(format, opcode, index, indexType, target, literal);
+
+        this.a = a;
+        this.b = b;
+        this.c = c;
+        this.d = d;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 4;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getA() {
+        return a;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getB() {
+        return b;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getC() {
+        return c;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getD() {
+        return d;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        return new FourRegisterDecodedInstruction(
+                getFormat(), getOpcode(), newIndex, getIndexType(),
+                getTarget(), getLiteral(), a, b, c, d);
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/InstructionCodec.java b/dx/src/com/android/dx/io/instructions/InstructionCodec.java
new file mode 100644
index 0000000..4ce966a
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/InstructionCodec.java
@@ -0,0 +1,1112 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dex.DexException;
+import com.android.dx.io.IndexType;
+import com.android.dx.io.OpcodeInfo;
+import com.android.dx.io.Opcodes;
+import com.android.dx.util.Hex;
+import java.io.EOFException;
+import java.util.Arrays;
+
+/**
+ * Representation of an instruction format, which knows how to decode into
+ * and encode from instances of {@link DecodedInstruction}.
+ */
+public enum InstructionCodec {
+    FORMAT_00X() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            return new ZeroRegisterDecodedInstruction(
+                    this, opcodeUnit, 0, null,
+                    0, 0L);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(insn.getOpcodeUnit());
+        }
+    },
+
+    FORMAT_10X() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int literal = byte1(opcodeUnit); // should be zero
+            return new ZeroRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(insn.getOpcodeUnit());
+        }
+    },
+
+    FORMAT_12X() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = nibble2(opcodeUnit);
+            int b = nibble3(opcodeUnit);
+            return new TwoRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, 0L,
+                    a, b);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcodeUnit(),
+                             makeByte(insn.getA(), insn.getB())));
+        }
+    },
+
+    FORMAT_11N() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = nibble2(opcodeUnit);
+            int literal = (nibble3(opcodeUnit) << 28) >> 28; // sign-extend
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcodeUnit(),
+                             makeByte(insn.getA(), insn.getLiteralNibble())));
+        }
+    },
+
+    FORMAT_11X() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, 0L,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(codeUnit(insn.getOpcode(), insn.getA()));
+        }
+    },
+
+    FORMAT_10T() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int baseAddress = in.cursor() - 1;
+            int opcode = byte0(opcodeUnit);
+            int target = (byte) byte1(opcodeUnit); // sign-extend
+            return new ZeroRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    baseAddress + target, 0L);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            int relativeTarget = insn.getTargetByte(out.cursor());
+            out.write(codeUnit(insn.getOpcode(), relativeTarget));
+        }
+    },
+
+    FORMAT_20T() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int baseAddress = in.cursor() - 1;
+            int opcode = byte0(opcodeUnit);
+            int literal = byte1(opcodeUnit); // should be zero
+            int target = (short) in.read(); // sign-extend
+            return new ZeroRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    baseAddress + target, literal);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            short relativeTarget = insn.getTargetUnit(out.cursor());
+            out.write(insn.getOpcodeUnit(), relativeTarget);
+        }
+    },
+
+    FORMAT_20BC() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            // Note: We use the literal field to hold the decoded AA value.
+            int opcode = byte0(opcodeUnit);
+            int literal = byte1(opcodeUnit);
+            int index = in.read();
+            return new ZeroRegisterDecodedInstruction(
+                    this, opcode, index, IndexType.VARIES,
+                    0, literal);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getLiteralByte()),
+                    insn.getIndexUnit());
+        }
+    },
+
+    FORMAT_22X() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int b = in.read();
+            return new TwoRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, 0L,
+                    a, b);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    insn.getBUnit());
+        }
+    },
+
+    FORMAT_21T() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int baseAddress = in.cursor() - 1;
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int target = (short) in.read(); // sign-extend
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    baseAddress + target, 0L,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            short relativeTarget = insn.getTargetUnit(out.cursor());
+            out.write(codeUnit(insn.getOpcode(), insn.getA()), relativeTarget);
+        }
+    },
+
+    FORMAT_21S() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int literal = (short) in.read(); // sign-extend
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    insn.getLiteralUnit());
+        }
+    },
+
+    FORMAT_21H() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            long literal = (short) in.read(); // sign-extend
+
+            /*
+             * Format 21h decodes differently depending on the opcode,
+             * because the "signed hat" might represent either a 32-
+             * or 64- bit value.
+             */
+            literal <<= (opcode == Opcodes.CONST_HIGH16) ? 16 : 48;
+
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            // See above.
+            int opcode = insn.getOpcode();
+            int shift = (opcode == Opcodes.CONST_HIGH16) ? 16 : 48;
+            short literal = (short) (insn.getLiteral() >> shift);
+
+            out.write(codeUnit(opcode, insn.getA()), literal);
+        }
+    },
+
+    FORMAT_21C() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int index = in.read();
+            IndexType indexType = OpcodeInfo.getIndexType(opcode);
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, index, indexType,
+                    0, 0L,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    insn.getIndexUnit());
+        }
+    },
+
+    FORMAT_23X() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int bc = in.read();
+            int b = byte0(bc);
+            int c = byte1(bc);
+            return new ThreeRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, 0L,
+                    a, b, c);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    codeUnit(insn.getB(), insn.getC()));
+        }
+    },
+
+    FORMAT_22B() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int bc = in.read();
+            int b = byte0(bc);
+            int literal = (byte) byte1(bc); // sign-extend
+            return new TwoRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal,
+                    a, b);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    codeUnit(insn.getB(),
+                             insn.getLiteralByte()));
+        }
+    },
+
+    FORMAT_22T() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int baseAddress = in.cursor() - 1;
+            int opcode = byte0(opcodeUnit);
+            int a = nibble2(opcodeUnit);
+            int b = nibble3(opcodeUnit);
+            int target = (short) in.read(); // sign-extend
+            return new TwoRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    baseAddress + target, 0L,
+                    a, b);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            short relativeTarget = insn.getTargetUnit(out.cursor());
+            out.write(
+                    codeUnit(insn.getOpcode(),
+                             makeByte(insn.getA(), insn.getB())),
+                    relativeTarget);
+        }
+    },
+
+    FORMAT_22S() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = nibble2(opcodeUnit);
+            int b = nibble3(opcodeUnit);
+            int literal = (short) in.read(); // sign-extend
+            return new TwoRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal,
+                    a, b);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(),
+                             makeByte(insn.getA(), insn.getB())),
+                    insn.getLiteralUnit());
+        }
+    },
+
+    FORMAT_22C() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = nibble2(opcodeUnit);
+            int b = nibble3(opcodeUnit);
+            int index = in.read();
+            IndexType indexType = OpcodeInfo.getIndexType(opcode);
+            return new TwoRegisterDecodedInstruction(
+                    this, opcode, index, indexType,
+                    0, 0L,
+                    a, b);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(),
+                             makeByte(insn.getA(), insn.getB())),
+                    insn.getIndexUnit());
+        }
+    },
+
+    FORMAT_22CS() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = nibble2(opcodeUnit);
+            int b = nibble3(opcodeUnit);
+            int index = in.read();
+            return new TwoRegisterDecodedInstruction(
+                    this, opcode, index, IndexType.FIELD_OFFSET,
+                    0, 0L,
+                    a, b);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(),
+                             makeByte(insn.getA(), insn.getB())),
+                    insn.getIndexUnit());
+        }
+    },
+
+    FORMAT_30T() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int baseAddress = in.cursor() - 1;
+            int opcode = byte0(opcodeUnit);
+            int literal = byte1(opcodeUnit); // should be zero
+            int target = in.readInt();
+            return new ZeroRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    baseAddress + target, literal);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            int relativeTarget = insn.getTarget(out.cursor());
+            out.write(insn.getOpcodeUnit(),
+                    unit0(relativeTarget), unit1(relativeTarget));
+        }
+    },
+
+    FORMAT_32X() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int literal = byte1(opcodeUnit); // should be zero
+            int a = in.read();
+            int b = in.read();
+            return new TwoRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal,
+                    a, b);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(insn.getOpcodeUnit(), insn.getAUnit(), insn.getBUnit());
+        }
+    },
+
+    FORMAT_31I() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int literal = in.readInt();
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            int literal = insn.getLiteralInt();
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    unit0(literal),
+                    unit1(literal));
+        }
+    },
+
+    FORMAT_31T() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int baseAddress = in.cursor() - 1;
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int target = baseAddress + in.readInt();
+
+            /*
+             * Switch instructions need to "forward" their addresses to their
+             * payload target instructions.
+             */
+            switch (opcode) {
+                case Opcodes.PACKED_SWITCH:
+                case Opcodes.SPARSE_SWITCH: {
+                    in.setBaseAddress(target, baseAddress);
+                    break;
+                }
+                default: // fall out
+            }
+
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    target, 0L,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            int relativeTarget = insn.getTarget(out.cursor());
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    unit0(relativeTarget), unit1(relativeTarget));
+        }
+    },
+
+    FORMAT_31C() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            int index = in.readInt();
+            IndexType indexType = OpcodeInfo.getIndexType(opcode);
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, index, indexType,
+                    0, 0L,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            int index = insn.getIndex();
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    unit0(index),
+                    unit1(index));
+        }
+    },
+
+    FORMAT_35C() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            return decodeRegisterList(this, opcodeUnit, in);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            encodeRegisterList(insn, out);
+        }
+    },
+
+    FORMAT_35MS() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            return decodeRegisterList(this, opcodeUnit, in);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            encodeRegisterList(insn, out);
+        }
+    },
+
+    FORMAT_35MI() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            return decodeRegisterList(this, opcodeUnit, in);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            encodeRegisterList(insn, out);
+        }
+    },
+
+    FORMAT_3RC() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            return decodeRegisterRange(this, opcodeUnit, in);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            encodeRegisterRange(insn, out);
+        }
+    },
+
+    FORMAT_3RMS() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            return decodeRegisterRange(this, opcodeUnit, in);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            encodeRegisterRange(insn, out);
+        }
+    },
+
+    FORMAT_3RMI() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            return decodeRegisterRange(this, opcodeUnit, in);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            encodeRegisterRange(insn, out);
+        }
+    },
+
+    FORMAT_51L() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            int a = byte1(opcodeUnit);
+            long literal = in.readLong();
+            return new OneRegisterDecodedInstruction(
+                    this, opcode, 0, null,
+                    0, literal,
+                    a);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            long literal = insn.getLiteral();
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getA()),
+                    unit0(literal),
+                    unit1(literal),
+                    unit2(literal),
+                    unit3(literal));
+        }
+    },
+
+    FORMAT_45CC() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            if (opcode != Opcodes.INVOKE_POLYMORPHIC) {
+              // 45cc isn't currently used for anything other than invoke-polymorphic.
+              // If that changes, add a more general DecodedInstruction for this format.
+              throw new UnsupportedOperationException(String.valueOf(opcode));
+            }
+            int g = nibble2(opcodeUnit);
+            int registerCount = nibble3(opcodeUnit);
+            int methodIndex = in.read();
+            int cdef = in.read();
+            int c = nibble0(cdef);
+            int d = nibble1(cdef);
+            int e = nibble2(cdef);
+            int f = nibble3(cdef);
+            int protoIndex = in.read();
+            IndexType indexType = OpcodeInfo.getIndexType(opcode);
+
+            if (registerCount < 1 || registerCount > 5) {
+                throw new DexException("bogus registerCount: " + Hex.uNibble(registerCount));
+            }
+            int[] registers = {c, d, e, f, g};
+            registers = Arrays.copyOfRange(registers, 0, registerCount);
+
+            return new InvokePolymorphicDecodedInstruction(
+                    this, opcode, methodIndex, indexType, protoIndex, registers);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            InvokePolymorphicDecodedInstruction polyInsn =
+                    (InvokePolymorphicDecodedInstruction) insn;
+            out.write(codeUnit(polyInsn.getOpcode(),
+                            makeByte(polyInsn.getG(), polyInsn.getRegisterCount())),
+                    polyInsn.getIndexUnit(),
+                    codeUnit(polyInsn.getC(), polyInsn.getD(), polyInsn.getE(), polyInsn.getF()),
+                    polyInsn.getProtoIndex());
+
+        }
+    },
+
+    FORMAT_4RCC() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int opcode = byte0(opcodeUnit);
+            if (opcode != Opcodes.INVOKE_POLYMORPHIC_RANGE) {
+              // 4rcc isn't currently used for anything other than invoke-polymorphic.
+              // If that changes, add a more general DecodedInstruction for this format.
+              throw new UnsupportedOperationException(String.valueOf(opcode));
+            }
+            int registerCount = byte1(opcodeUnit);
+            int methodIndex = in.read();
+            int c = in.read();
+            int protoIndex = in.read();
+            IndexType indexType = OpcodeInfo.getIndexType(opcode);
+            return new InvokePolymorphicRangeDecodedInstruction(
+                    this, opcode, methodIndex, indexType, c, registerCount, protoIndex);
+
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            out.write(
+                    codeUnit(insn.getOpcode(), insn.getRegisterCount()),
+                    insn.getIndexUnit(),
+                    insn.getCUnit(),
+                    insn.getProtoIndex());
+
+        }
+    },
+
+    FORMAT_PACKED_SWITCH_PAYLOAD() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int baseAddress = in.baseAddressForCursor() - 1; // already read opcode
+            int size = in.read();
+            int firstKey = in.readInt();
+            int[] targets = new int[size];
+
+            for (int i = 0; i < size; i++) {
+                targets[i] = baseAddress + in.readInt();
+            }
+
+            return new PackedSwitchPayloadDecodedInstruction(
+                    this, opcodeUnit, firstKey, targets);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            PackedSwitchPayloadDecodedInstruction payload =
+                (PackedSwitchPayloadDecodedInstruction) insn;
+            int[] targets = payload.getTargets();
+            int baseAddress = out.baseAddressForCursor();
+
+            out.write(payload.getOpcodeUnit());
+            out.write(asUnsignedUnit(targets.length));
+            out.writeInt(payload.getFirstKey());
+
+            for (int target : targets) {
+                out.writeInt(target - baseAddress);
+            }
+        }
+    },
+
+    FORMAT_SPARSE_SWITCH_PAYLOAD() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int baseAddress = in.baseAddressForCursor() - 1; // already read opcode
+            int size = in.read();
+            int[] keys = new int[size];
+            int[] targets = new int[size];
+
+            for (int i = 0; i < size; i++) {
+                keys[i] = in.readInt();
+            }
+
+            for (int i = 0; i < size; i++) {
+                targets[i] = baseAddress + in.readInt();
+            }
+
+            return new SparseSwitchPayloadDecodedInstruction(
+                    this, opcodeUnit, keys, targets);
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            SparseSwitchPayloadDecodedInstruction payload =
+                (SparseSwitchPayloadDecodedInstruction) insn;
+            int[] keys = payload.getKeys();
+            int[] targets = payload.getTargets();
+            int baseAddress = out.baseAddressForCursor();
+
+            out.write(payload.getOpcodeUnit());
+            out.write(asUnsignedUnit(targets.length));
+
+            for (int key : keys) {
+                out.writeInt(key);
+            }
+
+            for (int target : targets) {
+                out.writeInt(target - baseAddress);
+            }
+        }
+    },
+
+    FORMAT_FILL_ARRAY_DATA_PAYLOAD() {
+        @Override
+        public DecodedInstruction decode(int opcodeUnit,
+                CodeInput in) throws EOFException {
+            int elementWidth = in.read();
+            int size = in.readInt();
+
+            switch (elementWidth) {
+                case 1: {
+                    byte[] array = new byte[size];
+                    boolean even = true;
+                    for (int i = 0, value = 0; i < size; i++, even = !even) {
+                        if (even) {
+                            value = in.read();
+                        }
+                        array[i] = (byte) (value & 0xff);
+                        value >>= 8;
+                    }
+                    return new FillArrayDataPayloadDecodedInstruction(
+                            this, opcodeUnit, array);
+                }
+                case 2: {
+                    short[] array = new short[size];
+                    for (int i = 0; i < size; i++) {
+                        array[i] = (short) in.read();
+                    }
+                    return new FillArrayDataPayloadDecodedInstruction(
+                            this, opcodeUnit, array);
+                }
+                case 4: {
+                    int[] array = new int[size];
+                    for (int i = 0; i < size; i++) {
+                        array[i] = in.readInt();
+                    }
+                    return new FillArrayDataPayloadDecodedInstruction(
+                            this, opcodeUnit, array);
+                }
+                case 8: {
+                    long[] array = new long[size];
+                    for (int i = 0; i < size; i++) {
+                        array[i] = in.readLong();
+                    }
+                    return new FillArrayDataPayloadDecodedInstruction(
+                            this, opcodeUnit, array);
+                }
+                default: // fall out
+            }
+
+            throw new DexException("bogus element_width: "
+                    + Hex.u2(elementWidth));
+        }
+
+        @Override
+        public void encode(DecodedInstruction insn, CodeOutput out) {
+            FillArrayDataPayloadDecodedInstruction payload =
+                (FillArrayDataPayloadDecodedInstruction) insn;
+            short elementWidth = payload.getElementWidthUnit();
+            Object data = payload.getData();
+
+            out.write(payload.getOpcodeUnit());
+            out.write(elementWidth);
+            out.writeInt(payload.getSize());
+
+            switch (elementWidth) {
+                case 1: out.write((byte[]) data);  break;
+                case 2: out.write((short[]) data); break;
+                case 4: out.write((int[]) data);   break;
+                case 8: out.write((long[]) data);  break;
+                default: {
+                    throw new DexException("bogus element_width: "
+                            + Hex.u2(elementWidth));
+                }
+            }
+        }
+    };
+
+    /**
+     * Decodes an instruction specified by the given opcode unit, reading
+     * any required additional code units from the given input source.
+     */
+    public abstract DecodedInstruction decode(int opcodeUnit, CodeInput in)
+        throws EOFException;
+
+    /**
+     * Encodes the given instruction.
+     */
+    public abstract void encode(DecodedInstruction insn, CodeOutput out);
+
+    /**
+     * Helper method that decodes any of the register-list formats.
+     */
+    private static DecodedInstruction decodeRegisterList(
+            InstructionCodec format, int opcodeUnit, CodeInput in)
+            throws EOFException {
+        int opcode = byte0(opcodeUnit);
+        int e = nibble2(opcodeUnit);
+        int registerCount = nibble3(opcodeUnit);
+        int index = in.read();
+        int abcd = in.read();
+        int a = nibble0(abcd);
+        int b = nibble1(abcd);
+        int c = nibble2(abcd);
+        int d = nibble3(abcd);
+        IndexType indexType = OpcodeInfo.getIndexType(opcode);
+
+        // TODO: Having to switch like this is less than ideal.
+        switch (registerCount) {
+            case 0:
+                return new ZeroRegisterDecodedInstruction(
+                        format, opcode, index, indexType,
+                        0, 0L);
+            case 1:
+                return new OneRegisterDecodedInstruction(
+                        format, opcode, index, indexType,
+                        0, 0L,
+                        a);
+            case 2:
+                return new TwoRegisterDecodedInstruction(
+                        format, opcode, index, indexType,
+                        0, 0L,
+                        a, b);
+            case 3:
+                return new ThreeRegisterDecodedInstruction(
+                        format, opcode, index, indexType,
+                        0, 0L,
+                        a, b, c);
+            case 4:
+                return new FourRegisterDecodedInstruction(
+                        format, opcode, index, indexType,
+                        0, 0L,
+                        a, b, c, d);
+            case 5:
+                return new FiveRegisterDecodedInstruction(
+                        format, opcode, index, indexType,
+                        0, 0L,
+                        a, b, c, d, e);
+            default: // fall out
+        }
+
+        throw new DexException("bogus registerCount: "
+                + Hex.uNibble(registerCount));
+    }
+
+    /**
+     * Helper method that encodes any of the register-list formats.
+     */
+    private static void encodeRegisterList(DecodedInstruction insn,
+            CodeOutput out) {
+        out.write(codeUnit(insn.getOpcode(),
+                        makeByte(insn.getE(), insn.getRegisterCount())),
+                insn.getIndexUnit(),
+                codeUnit(insn.getA(), insn.getB(), insn.getC(), insn.getD()));
+    }
+
+    /**
+     * Helper method that decodes any of the three-unit register-range formats.
+     */
+    private static DecodedInstruction decodeRegisterRange(
+            InstructionCodec format, int opcodeUnit, CodeInput in)
+            throws EOFException {
+        int opcode = byte0(opcodeUnit);
+        int registerCount = byte1(opcodeUnit);
+        int index = in.read();
+        int a = in.read();
+        IndexType indexType = OpcodeInfo.getIndexType(opcode);
+        return new RegisterRangeDecodedInstruction(
+                format, opcode, index, indexType,
+                0, 0L,
+                a, registerCount);
+    }
+
+    /**
+     * Helper method that encodes any of the three-unit register-range formats.
+     */
+    private static void encodeRegisterRange(DecodedInstruction insn,
+            CodeOutput out) {
+        out.write(codeUnit(insn.getOpcode(), insn.getRegisterCount()),
+                insn.getIndexUnit(),
+                insn.getAUnit());
+    }
+
+    private static short codeUnit(int lowByte, int highByte) {
+        if ((lowByte & ~0xff) != 0) {
+            throw new IllegalArgumentException("bogus lowByte");
+        }
+
+        if ((highByte & ~0xff) != 0) {
+            throw new IllegalArgumentException("bogus highByte");
+        }
+
+        return (short) (lowByte | (highByte << 8));
+    }
+
+    private static short codeUnit(int nibble0, int nibble1, int nibble2,
+            int nibble3) {
+        if ((nibble0 & ~0xf) != 0) {
+            throw new IllegalArgumentException("bogus nibble0");
+        }
+
+        if ((nibble1 & ~0xf) != 0) {
+            throw new IllegalArgumentException("bogus nibble1");
+        }
+
+        if ((nibble2 & ~0xf) != 0) {
+            throw new IllegalArgumentException("bogus nibble2");
+        }
+
+        if ((nibble3 & ~0xf) != 0) {
+            throw new IllegalArgumentException("bogus nibble3");
+        }
+
+        return (short) (nibble0 | (nibble1 << 4)
+                | (nibble2 << 8) | (nibble3 << 12));
+    }
+
+    private static int makeByte(int lowNibble, int highNibble) {
+        if ((lowNibble & ~0xf) != 0) {
+            throw new IllegalArgumentException("bogus lowNibble");
+        }
+
+        if ((highNibble & ~0xf) != 0) {
+            throw new IllegalArgumentException("bogus highNibble");
+        }
+
+        return lowNibble | (highNibble << 4);
+    }
+
+    private static short asUnsignedUnit(int value) {
+        if ((value & ~0xffff) != 0) {
+            throw new IllegalArgumentException("bogus unsigned code unit");
+        }
+
+        return (short) value;
+    }
+
+    private static short unit0(int value) {
+        return (short) value;
+    }
+
+    private static short unit1(int value) {
+        return (short) (value >> 16);
+    }
+
+    private static short unit0(long value) {
+        return (short) value;
+    }
+
+    private static short unit1(long value) {
+        return (short) (value >> 16);
+    }
+
+    private static short unit2(long value) {
+        return (short) (value >> 32);
+    }
+
+    private static short unit3(long value) {
+        return (short) (value >> 48);
+    }
+
+    private static int byte0(int value) {
+        return value & 0xff;
+    }
+
+    private static int byte1(int value) {
+        return (value >> 8) & 0xff;
+    }
+
+    private static int byte2(int value) {
+        return (value >> 16) & 0xff;
+    }
+
+    private static int byte3(int value) {
+        return value >>> 24;
+    }
+
+    private static int nibble0(int value) {
+        return value & 0xf;
+    }
+
+    private static int nibble1(int value) {
+        return (value >> 4) & 0xf;
+    }
+
+    private static int nibble2(int value) {
+        return (value >> 8) & 0xf;
+    }
+
+    private static int nibble3(int value) {
+        return (value >> 12) & 0xf;
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/InvokePolymorphicDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/InvokePolymorphicDecodedInstruction.java
new file mode 100644
index 0000000..4797dcc
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/InvokePolymorphicDecodedInstruction.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/** A decoded invoke-polymorphic instruction. */
+public class InvokePolymorphicDecodedInstruction extends DecodedInstruction {
+
+    private final int protoIndex;
+    private final int[] registers;
+
+    public InvokePolymorphicDecodedInstruction(
+            InstructionCodec format,
+            int opcode,
+            int methodIndex,
+            IndexType indexType,
+            int protoIndex,
+            int[] registers) {
+        super(format, opcode, methodIndex, indexType, 0, 0);
+        if (protoIndex != (short) protoIndex) {
+          throw new IllegalArgumentException("protoIndex doesn't fit in a short: " + protoIndex);
+        }
+        this.protoIndex = protoIndex;
+        this.registers = registers;
+    }
+
+    @Override
+    public int getRegisterCount() {
+        return registers.length;
+    }
+
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        throw new UnsupportedOperationException(
+                "use withProtoIndex to update both the method and proto indices for"
+                        + " invoke-polymorphic");
+    }
+
+    @Override
+    public DecodedInstruction withProtoIndex(int newIndex, int newProtoIndex) {
+        return new InvokePolymorphicDecodedInstruction(
+                getFormat(), getOpcode(), newIndex, getIndexType(), newProtoIndex, registers);
+    }
+
+    @Override
+    public int getC() {
+        return registers.length > 0 ? registers[0] : 0;
+    }
+
+    @Override
+    public int getD() {
+        return registers.length > 1 ? registers[1] : 0;
+    }
+
+    @Override
+    public int getE() {
+        return registers.length > 2 ? registers[2] : 0;
+    }
+
+    public int getF() {
+        return registers.length > 3 ? registers[3] : 0;
+    }
+
+    public int getG() {
+        return registers.length > 4 ? registers[4] : 0;
+    }
+
+    @Override
+    public short getProtoIndex() {
+        return (short) protoIndex;
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/InvokePolymorphicRangeDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/InvokePolymorphicRangeDecodedInstruction.java
new file mode 100644
index 0000000..e4c99c9
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/InvokePolymorphicRangeDecodedInstruction.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/** A decoded invoke-polymorphic/range instruction. */
+public class InvokePolymorphicRangeDecodedInstruction extends DecodedInstruction {
+
+    private final int c;
+    private final int registerCount;
+    private final int protoIndex;
+
+    public InvokePolymorphicRangeDecodedInstruction(
+            InstructionCodec format,
+            int opcode,
+            int methodIndex,
+            IndexType indexType,
+            int c,
+            int registerCount,
+            int protoIndex) {
+        super(format, opcode, methodIndex, indexType, 0, 0);
+        if (protoIndex != (short) protoIndex) {
+          throw new IllegalArgumentException("protoIndex doesn't fit in a short: " + protoIndex);
+        }
+        this.c = c;
+        this.registerCount = registerCount;
+        this.protoIndex = protoIndex;
+    }
+
+    @Override
+    public int getRegisterCount() {
+        return registerCount;
+    }
+
+    @Override
+    public int getC() {
+        return c;
+    }
+
+    @Override
+    public DecodedInstruction withProtoIndex(int newIndex, int newProtoIndex) {
+        return new InvokePolymorphicRangeDecodedInstruction(
+                getFormat(),
+                getOpcode(),
+                newIndex,
+                getIndexType(),
+                c,
+                registerCount,
+                newProtoIndex);
+    }
+
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        throw new UnsupportedOperationException(
+                "use withProtoIndex to update both the method and proto indices for "
+                        + "invoke-polymorphic/range");
+    }
+
+    @Override
+    public short getProtoIndex() {
+        return (short) protoIndex;
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/OneRegisterDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/OneRegisterDecodedInstruction.java
new file mode 100644
index 0000000..b88aa18
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/OneRegisterDecodedInstruction.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/**
+ * A decoded Dalvik instruction which has one register argument.
+ */
+public final class OneRegisterDecodedInstruction extends DecodedInstruction {
+    /** register argument "A" */
+    private final int a;
+
+    /**
+     * Constructs an instance.
+     */
+    public OneRegisterDecodedInstruction(InstructionCodec format, int opcode,
+            int index, IndexType indexType, int target, long literal,
+            int a) {
+        super(format, opcode, index, indexType, target, literal);
+
+        this.a = a;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getA() {
+        return a;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        return new OneRegisterDecodedInstruction(
+                getFormat(), getOpcode(), newIndex, getIndexType(),
+                getTarget(), getLiteral(), a);
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/PackedSwitchPayloadDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/PackedSwitchPayloadDecodedInstruction.java
new file mode 100644
index 0000000..9750798
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/PackedSwitchPayloadDecodedInstruction.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+/**
+ * A decoded Dalvik instruction which contains the payload for
+ * a {@code packed-switch} instruction.
+ */
+public final class PackedSwitchPayloadDecodedInstruction
+        extends DecodedInstruction {
+    /** first key value */
+    private final int firstKey;
+
+    /**
+     * array of target addresses. These are absolute, not relative,
+     * addresses.
+     */
+    private final int[] targets;
+
+    /**
+     * Constructs an instance.
+     */
+    public PackedSwitchPayloadDecodedInstruction(InstructionCodec format,
+            int opcode, int firstKey, int[] targets) {
+        super(format, opcode, 0, null, 0, 0L);
+
+        this.firstKey = firstKey;
+        this.targets = targets;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 0;
+    }
+
+    public int getFirstKey() {
+        return firstKey;
+    }
+
+    public int[] getTargets() {
+        return targets;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        throw new UnsupportedOperationException("no index in instruction");
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/RegisterRangeDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/RegisterRangeDecodedInstruction.java
new file mode 100644
index 0000000..c7b15e2
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/RegisterRangeDecodedInstruction.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/**
+ * A decoded Dalvik instruction which has register range arguments (an
+ * "A" start register and a register count).
+ */
+public final class RegisterRangeDecodedInstruction extends DecodedInstruction {
+    /** register argument "A" */
+    private final int a;
+
+    /** register count */
+    private final int registerCount;
+
+    /**
+     * Constructs an instance.
+     */
+    public RegisterRangeDecodedInstruction(InstructionCodec format, int opcode,
+            int index, IndexType indexType, int target, long literal,
+            int a, int registerCount) {
+        super(format, opcode, index, indexType, target, literal);
+
+        this.a = a;
+        this.registerCount = registerCount;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return registerCount;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getA() {
+        return a;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        return new RegisterRangeDecodedInstruction(
+                getFormat(), getOpcode(), newIndex, getIndexType(),
+                getTarget(), getLiteral(), a, registerCount);
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/ShortArrayCodeInput.java b/dx/src/com/android/dx/io/instructions/ShortArrayCodeInput.java
new file mode 100644
index 0000000..f93d770
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/ShortArrayCodeInput.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import java.io.EOFException;
+
+/**
+ * Implementation of {@code CodeInput} that reads from a {@code short[]}.
+ */
+public final class ShortArrayCodeInput extends BaseCodeCursor
+        implements CodeInput {
+    /** source array to read from */
+    private final short[] array;
+
+    /**
+     * Constructs an instance.
+     */
+    public ShortArrayCodeInput(short[] array) {
+        if (array == null) {
+            throw new NullPointerException("array == null");
+        }
+
+        this.array = array;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean hasMore() {
+        return cursor() < array.length;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int read() throws EOFException {
+        try {
+            int value = array[cursor()];
+            advance(1);
+            return value & 0xffff;
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            throw new EOFException();
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int readInt() throws EOFException {
+        int short0 = read();
+        int short1 = read();
+
+        return short0 | (short1 << 16);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public long readLong() throws EOFException {
+        long short0 = read();
+        long short1 = read();
+        long short2 = read();
+        long short3 = read();
+
+        return short0 | (short1 << 16) | (short2 << 32) | (short3 << 48);
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/ShortArrayCodeOutput.java b/dx/src/com/android/dx/io/instructions/ShortArrayCodeOutput.java
new file mode 100644
index 0000000..7a0fc4d
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/ShortArrayCodeOutput.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+/**
+ * Implementation of {@code CodeOutput} that writes to a {@code short[]}.
+ */
+public final class ShortArrayCodeOutput extends BaseCodeCursor
+        implements CodeOutput {
+    /** array to write to */
+    private final short[] array;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param maxSize the maximum number of code units that will be written
+     */
+    public ShortArrayCodeOutput(int maxSize) {
+        if (maxSize < 0) {
+            throw new IllegalArgumentException("maxSize < 0");
+        }
+
+        this.array = new short[maxSize];
+    }
+
+    /**
+     * Gets the array. The returned array contains exactly the data
+     * written (e.g. no leftover space at the end).
+     */
+    public short[] getArray() {
+        int cursor = cursor();
+
+        if (cursor == array.length) {
+            return array;
+        }
+
+        short[] result = new short[cursor];
+        System.arraycopy(array, 0, result, 0, cursor);
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(short codeUnit) {
+        array[cursor()] = codeUnit;
+        advance(1);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(short u0, short u1) {
+        write(u0);
+        write(u1);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(short u0, short u1, short u2) {
+        write(u0);
+        write(u1);
+        write(u2);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(short u0, short u1, short u2, short u3) {
+        write(u0);
+        write(u1);
+        write(u2);
+        write(u3);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(short u0, short u1, short u2, short u3, short u4) {
+        write(u0);
+        write(u1);
+        write(u2);
+        write(u3);
+        write(u4);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeInt(int value) {
+        write((short) value);
+        write((short) (value >> 16));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeLong(long value) {
+        write((short) value);
+        write((short) (value >> 16));
+        write((short) (value >> 32));
+        write((short) (value >> 48));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(byte[] data) {
+        int value = 0;
+        boolean even = true;
+        for (byte b : data) {
+            if (even) {
+                value = b & 0xff;
+                even = false;
+            } else {
+                value |= b << 8;
+                write((short) value);
+                even = true;
+            }
+        }
+
+        if (!even) {
+            write((short) value);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(short[] data) {
+        for (short unit : data) {
+            write(unit);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(int[] data) {
+        for (int i : data) {
+            writeInt(i);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(long[] data) {
+        for (long l : data) {
+            writeLong(l);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/SparseSwitchPayloadDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/SparseSwitchPayloadDecodedInstruction.java
new file mode 100644
index 0000000..b599fc1
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/SparseSwitchPayloadDecodedInstruction.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+/**
+ * A decoded Dalvik instruction which contains the payload for
+ * a {@code packed-switch} instruction.
+ */
+public final class SparseSwitchPayloadDecodedInstruction
+        extends DecodedInstruction {
+    /** array of key values */
+    private final int[] keys;
+
+    /**
+     * array of target addresses. These are absolute, not relative,
+     * addresses.
+     */
+    private final int[] targets;
+
+    /**
+     * Constructs an instance.
+     */
+    public SparseSwitchPayloadDecodedInstruction(InstructionCodec format,
+            int opcode, int[] keys, int[] targets) {
+        super(format, opcode, 0, null, 0, 0L);
+
+        if (keys.length != targets.length) {
+            throw new IllegalArgumentException("keys/targets length mismatch");
+        }
+
+        this.keys = keys;
+        this.targets = targets;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 0;
+    }
+
+    public int[] getKeys() {
+        return keys;
+    }
+
+    public int[] getTargets() {
+        return targets;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        throw new UnsupportedOperationException("no index in instruction");
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/ThreeRegisterDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/ThreeRegisterDecodedInstruction.java
new file mode 100644
index 0000000..33c0330
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/ThreeRegisterDecodedInstruction.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/**
+ * A decoded Dalvik instruction which has three register arguments.
+ */
+public final class ThreeRegisterDecodedInstruction extends DecodedInstruction {
+    /** register argument "A" */
+    private final int a;
+
+    /** register argument "B" */
+    private final int b;
+
+    /** register argument "C" */
+    private final int c;
+
+    /**
+     * Constructs an instance.
+     */
+    public ThreeRegisterDecodedInstruction(InstructionCodec format, int opcode,
+            int index, IndexType indexType, int target, long literal,
+            int a, int b, int c) {
+        super(format, opcode, index, indexType, target, literal);
+
+        this.a = a;
+        this.b = b;
+        this.c = c;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getA() {
+        return a;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getB() {
+        return b;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getC() {
+        return c;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        return new ThreeRegisterDecodedInstruction(
+                getFormat(), getOpcode(), newIndex, getIndexType(),
+                getTarget(), getLiteral(), a, b, c);
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/TwoRegisterDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/TwoRegisterDecodedInstruction.java
new file mode 100644
index 0000000..fd5e128
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/TwoRegisterDecodedInstruction.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/**
+ * A decoded Dalvik instruction which has two register arguments.
+ */
+public final class TwoRegisterDecodedInstruction extends DecodedInstruction {
+    /** register argument "A" */
+    private final int a;
+
+    /** register argument "B" */
+    private final int b;
+
+    /**
+     * Constructs an instance.
+     */
+    public TwoRegisterDecodedInstruction(InstructionCodec format, int opcode,
+            int index, IndexType indexType, int target, long literal,
+            int a, int b) {
+        super(format, opcode, index, indexType, target, literal);
+
+        this.a = a;
+        this.b = b;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getA() {
+        return a;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getB() {
+        return b;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        return new TwoRegisterDecodedInstruction(
+                getFormat(), getOpcode(), newIndex, getIndexType(),
+                getTarget(), getLiteral(), a, b);
+    }
+}
diff --git a/dx/src/com/android/dx/io/instructions/ZeroRegisterDecodedInstruction.java b/dx/src/com/android/dx/io/instructions/ZeroRegisterDecodedInstruction.java
new file mode 100644
index 0000000..af7fe47
--- /dev/null
+++ b/dx/src/com/android/dx/io/instructions/ZeroRegisterDecodedInstruction.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.io.instructions;
+
+import com.android.dx.io.IndexType;
+
+/**
+ * A decoded Dalvik instruction which has no register arguments.
+ */
+public final class ZeroRegisterDecodedInstruction extends DecodedInstruction {
+    /**
+     * Constructs an instance.
+     */
+    public ZeroRegisterDecodedInstruction(InstructionCodec format, int opcode,
+            int index, IndexType indexType, int target, long literal) {
+        super(format, opcode, index, indexType, target, literal);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getRegisterCount() {
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public DecodedInstruction withIndex(int newIndex) {
+        return new ZeroRegisterDecodedInstruction(
+                getFormat(), getOpcode(), newIndex, getIndexType(),
+                getTarget(), getLiteral());
+    }
+}
diff --git a/dx/src/com/android/dx/merge/CollisionPolicy.java b/dx/src/com/android/dx/merge/CollisionPolicy.java
new file mode 100644
index 0000000..95e9835
--- /dev/null
+++ b/dx/src/com/android/dx/merge/CollisionPolicy.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+/**
+ * What to do when two dex files define the same class.
+ */
+public enum CollisionPolicy {
+
+    /**
+     * Keep the class def from the first dex file and discard the def from the
+     * second dex file. This policy is appropriate for incremental builds.
+     */
+    KEEP_FIRST,
+
+    /**
+     * Forbid collisions. This policy is appropriate for merging libraries.
+     */
+    FAIL
+}
diff --git a/dx/src/com/android/dx/merge/DexMerger.java b/dx/src/com/android/dx/merge/DexMerger.java
new file mode 100644
index 0000000..e3279a2
--- /dev/null
+++ b/dx/src/com/android/dx/merge/DexMerger.java
@@ -0,0 +1,1201 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+import com.android.dex.Annotation;
+import com.android.dex.CallSiteId;
+import com.android.dex.ClassData;
+import com.android.dex.ClassDef;
+import com.android.dex.Code;
+import com.android.dex.Dex;
+import com.android.dex.DexException;
+import com.android.dex.DexIndexOverflowException;
+import com.android.dex.FieldId;
+import com.android.dex.MethodHandle;
+import com.android.dex.MethodId;
+import com.android.dex.ProtoId;
+import com.android.dex.SizeOf;
+import com.android.dex.TableOfContents;
+import com.android.dex.TypeList;
+import com.android.dx.command.dexer.DxContext;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * Combine two dex files into one.
+ */
+public final class DexMerger {
+    private final Dex[] dexes;
+    private final IndexMap[] indexMaps;
+
+    private final CollisionPolicy collisionPolicy;
+    private final DxContext context;
+    private final WriterSizes writerSizes;
+
+    private final Dex dexOut;
+
+    private final Dex.Section headerOut;
+
+    /** All IDs and definitions sections */
+    private final Dex.Section idsDefsOut;
+
+    private final Dex.Section mapListOut;
+
+    private final Dex.Section typeListOut;
+
+    private final Dex.Section classDataOut;
+
+    private final Dex.Section codeOut;
+
+    private final Dex.Section stringDataOut;
+
+    private final Dex.Section debugInfoOut;
+
+    private final Dex.Section encodedArrayOut;
+
+    /** annotations directory on a type */
+    private final Dex.Section annotationsDirectoryOut;
+
+    /** sets of annotations on a member, parameter or type */
+    private final Dex.Section annotationSetOut;
+
+    /** parameter lists */
+    private final Dex.Section annotationSetRefListOut;
+
+    /** individual annotations, each containing zero or more fields */
+    private final Dex.Section annotationOut;
+
+    private final TableOfContents contentsOut;
+
+    private final InstructionTransformer instructionTransformer;
+
+    /** minimum number of wasted bytes before it's worthwhile to compact the result */
+    private int compactWasteThreshold = 1024 * 1024; // 1MiB
+
+    public DexMerger(Dex[] dexes, CollisionPolicy collisionPolicy, DxContext context)
+            throws IOException {
+        this(dexes, collisionPolicy, context, new WriterSizes(dexes));
+    }
+
+    private DexMerger(Dex[] dexes, CollisionPolicy collisionPolicy, DxContext context,
+            WriterSizes writerSizes) throws IOException {
+        this.dexes = dexes;
+        this.collisionPolicy = collisionPolicy;
+        this.context = context;
+        this.writerSizes = writerSizes;
+
+        dexOut = new Dex(writerSizes.size());
+
+        indexMaps = new IndexMap[dexes.length];
+        for (int i = 0; i < dexes.length; i++) {
+            indexMaps[i] = new IndexMap(dexOut, dexes[i].getTableOfContents());
+        }
+        instructionTransformer = new InstructionTransformer();
+
+        headerOut = dexOut.appendSection(writerSizes.header, "header");
+        idsDefsOut = dexOut.appendSection(writerSizes.idsDefs, "ids defs");
+
+        contentsOut = dexOut.getTableOfContents();
+        contentsOut.dataOff = dexOut.getNextSectionStart();
+
+        contentsOut.mapList.off = dexOut.getNextSectionStart();
+        contentsOut.mapList.size = 1;
+        mapListOut = dexOut.appendSection(writerSizes.mapList, "map list");
+
+        contentsOut.typeLists.off = dexOut.getNextSectionStart();
+        typeListOut = dexOut.appendSection(writerSizes.typeList, "type list");
+
+        contentsOut.annotationSetRefLists.off = dexOut.getNextSectionStart();
+        annotationSetRefListOut = dexOut.appendSection(
+                writerSizes.annotationsSetRefList, "annotation set ref list");
+
+        contentsOut.annotationSets.off = dexOut.getNextSectionStart();
+        annotationSetOut = dexOut.appendSection(writerSizes.annotationsSet, "annotation sets");
+
+        contentsOut.classDatas.off = dexOut.getNextSectionStart();
+        classDataOut = dexOut.appendSection(writerSizes.classData, "class data");
+
+        contentsOut.codes.off = dexOut.getNextSectionStart();
+        codeOut = dexOut.appendSection(writerSizes.code, "code");
+
+        contentsOut.stringDatas.off = dexOut.getNextSectionStart();
+        stringDataOut = dexOut.appendSection(writerSizes.stringData, "string data");
+
+        contentsOut.debugInfos.off = dexOut.getNextSectionStart();
+        debugInfoOut = dexOut.appendSection(writerSizes.debugInfo, "debug info");
+
+        contentsOut.annotations.off = dexOut.getNextSectionStart();
+        annotationOut = dexOut.appendSection(writerSizes.annotation, "annotation");
+
+        contentsOut.encodedArrays.off = dexOut.getNextSectionStart();
+        encodedArrayOut = dexOut.appendSection(writerSizes.encodedArray, "encoded array");
+
+        contentsOut.annotationsDirectories.off = dexOut.getNextSectionStart();
+        annotationsDirectoryOut = dexOut.appendSection(
+                writerSizes.annotationsDirectory, "annotations directory");
+
+        contentsOut.dataSize = dexOut.getNextSectionStart() - contentsOut.dataOff;
+    }
+
+    public void setCompactWasteThreshold(int compactWasteThreshold) {
+        this.compactWasteThreshold = compactWasteThreshold;
+    }
+
+    private Dex mergeDexes() throws IOException {
+        mergeStringIds();
+        mergeTypeIds();
+        mergeTypeLists();
+        mergeProtoIds();
+        mergeFieldIds();
+        mergeMethodIds();
+        mergeMethodHandles();
+        mergeAnnotations();
+        unionAnnotationSetsAndDirectories();
+        mergeCallSiteIds();
+        mergeClassDefs();
+
+        // computeSizesFromOffsets expects sections sorted by offset, so make it so
+        Arrays.sort(contentsOut.sections);
+
+        // write the header
+        contentsOut.header.off = 0;
+        contentsOut.header.size = 1;
+        contentsOut.fileSize = dexOut.getLength();
+        contentsOut.computeSizesFromOffsets();
+        contentsOut.writeHeader(headerOut, mergeApiLevels());
+        contentsOut.writeMap(mapListOut);
+
+        // generate and write the hashes
+        dexOut.writeHashes();
+
+        return dexOut;
+    }
+
+    public Dex merge() throws IOException {
+        if (dexes.length == 1) {
+            return dexes[0];
+        } else if (dexes.length == 0) {
+            return null;
+        }
+
+        long start = System.nanoTime();
+        Dex result = mergeDexes();
+
+        /*
+         * We use pessimistic sizes when merging dex files. If those sizes
+         * result in too many bytes wasted, compact the result. To compact,
+         * simply merge the result with itself.
+         */
+        WriterSizes compactedSizes = new WriterSizes(this);
+        int wastedByteCount = writerSizes.size() - compactedSizes.size();
+        if (wastedByteCount >  + compactWasteThreshold) {
+            DexMerger compacter = new DexMerger(
+                    new Dex[] {dexOut, new Dex(0)}, CollisionPolicy.FAIL, context, compactedSizes);
+            result = compacter.mergeDexes();
+            context.out.printf("Result compacted from %.1fKiB to %.1fKiB to save %.1fKiB%n",
+                    dexOut.getLength() / 1024f,
+                    result.getLength() / 1024f,
+                    wastedByteCount / 1024f);
+        }
+
+        long elapsed = System.nanoTime() - start;
+        for (int i = 0; i < dexes.length; i++) {
+            context.out.printf("Merged dex #%d (%d defs/%.1fKiB)%n",
+                i + 1,
+                dexes[i].getTableOfContents().classDefs.size,
+                dexes[i].getLength() / 1024f);
+        }
+        context.out.printf("Result is %d defs/%.1fKiB. Took %.1fs%n",
+                result.getTableOfContents().classDefs.size,
+                result.getLength() / 1024f,
+                elapsed / 1000000000f);
+
+        return result;
+    }
+
+    /**
+     * Reads an IDs section of two dex files and writes an IDs section of a
+     * merged dex file. Populates maps from old to new indices in the process.
+     */
+    abstract class IdMerger<T extends Comparable<T>> {
+        private final Dex.Section out;
+
+        protected IdMerger(Dex.Section out) {
+            this.out = out;
+        }
+
+        /**
+         * Merges already-sorted sections, reading one value from each dex into memory
+         * at a time.
+         */
+        public final void mergeSorted() {
+            TableOfContents.Section[] sections = new TableOfContents.Section[dexes.length];
+            Dex.Section[] dexSections = new Dex.Section[dexes.length];
+            int[] offsets = new int[dexes.length];
+            int[] indexes = new int[dexes.length];
+
+            // values contains one value from each dex, sorted for fast retrieval of
+            // the smallest value. The list associated with a value has the indexes
+            // of the dexes that had that value.
+            TreeMap<T, List<Integer>> values = new TreeMap<T, List<Integer>>();
+
+            for (int i = 0; i < dexes.length; i++) {
+                sections[i] = getSection(dexes[i].getTableOfContents());
+                dexSections[i] = sections[i].exists() ? dexes[i].open(sections[i].off) : null;
+                // Fill in values with the first value of each dex.
+                offsets[i] = readIntoMap(
+                        dexSections[i], sections[i], indexMaps[i], indexes[i], values, i);
+            }
+            if (values.isEmpty()) {
+                getSection(contentsOut).off = 0;
+                getSection(contentsOut).size = 0;
+                return;
+            }
+            getSection(contentsOut).off = out.getPosition();
+
+            int outCount = 0;
+            while (!values.isEmpty()) {
+                Map.Entry<T, List<Integer>> first = values.pollFirstEntry();
+                for (Integer dex : first.getValue()) {
+                    updateIndex(offsets[dex], indexMaps[dex], indexes[dex]++, outCount);
+                    // Fetch the next value of the dexes we just polled out
+                    offsets[dex] = readIntoMap(dexSections[dex], sections[dex],
+                            indexMaps[dex], indexes[dex], values, dex);
+                }
+                write(first.getKey());
+                outCount++;
+            }
+
+            getSection(contentsOut).size = outCount;
+        }
+
+        private int readIntoMap(Dex.Section in, TableOfContents.Section section, IndexMap indexMap,
+                                int index, TreeMap<T, List<Integer>> values, int dex) {
+            int offset = in != null ? in.getPosition() : -1;
+            if (index < section.size) {
+                T v = read(in, indexMap, index);
+                List<Integer> l = values.get(v);
+                if (l == null) {
+                    l = new ArrayList<Integer>();
+                    values.put(v, l);
+                }
+                l.add(dex);
+            }
+            return offset;
+        }
+
+        /**
+         * Merges unsorted sections by reading them completely into memory and
+         * sorting in memory.
+         */
+        public final void mergeUnsorted() {
+            getSection(contentsOut).off = out.getPosition();
+
+            List<UnsortedValue> all = new ArrayList<UnsortedValue>();
+            for (int i = 0; i < dexes.length; i++) {
+                all.addAll(readUnsortedValues(dexes[i], indexMaps[i]));
+            }
+            if (all.isEmpty()) {
+                getSection(contentsOut).off = 0;
+                getSection(contentsOut).size = 0;
+                return;
+            }
+            Collections.sort(all);
+
+            int outCount = 0;
+            for (int i = 0; i < all.size(); ) {
+                UnsortedValue e1 = all.get(i++);
+                updateIndex(e1.offset, e1.indexMap, e1.index, outCount - 1);
+
+                while (i < all.size() && e1.compareTo(all.get(i)) == 0) {
+                    UnsortedValue e2 = all.get(i++);
+                    updateIndex(e2.offset, e2.indexMap, e2.index, outCount - 1);
+                }
+
+                write(e1.value);
+                outCount++;
+            }
+
+            getSection(contentsOut).size = outCount;
+        }
+
+        private List<UnsortedValue> readUnsortedValues(Dex source, IndexMap indexMap) {
+            TableOfContents.Section section = getSection(source.getTableOfContents());
+            if (!section.exists()) {
+                return Collections.emptyList();
+            }
+
+            List<UnsortedValue> result = new ArrayList<UnsortedValue>();
+            Dex.Section in = source.open(section.off);
+            for (int i = 0; i < section.size; i++) {
+                int offset = in.getPosition();
+                T value = read(in, indexMap, 0);
+                result.add(new UnsortedValue(source, indexMap, value, i, offset));
+            }
+            return result;
+        }
+
+        abstract TableOfContents.Section getSection(TableOfContents tableOfContents);
+        abstract T read(Dex.Section in, IndexMap indexMap, int index);
+        abstract void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex);
+        abstract void write(T value);
+
+        class UnsortedValue implements Comparable<UnsortedValue> {
+            final Dex source;
+            final IndexMap indexMap;
+            final T value;
+            final int index;
+            final int offset;
+
+            UnsortedValue(Dex source, IndexMap indexMap, T value, int index, int offset) {
+                this.source = source;
+                this.indexMap = indexMap;
+                this.value = value;
+                this.index = index;
+                this.offset = offset;
+            }
+
+            @Override
+            public int compareTo(UnsortedValue unsortedValue) {
+                return value.compareTo(unsortedValue.value);
+            }
+        }
+    }
+
+    private int mergeApiLevels() {
+        int maxApi = -1;
+        for (int i = 0; i < dexes.length; i++) {
+            int dexMinApi = dexes[i].getTableOfContents().apiLevel;
+            if (maxApi < dexMinApi) {
+                maxApi = dexMinApi;
+            }
+        }
+        return maxApi;
+    }
+
+    private void mergeStringIds() {
+        new IdMerger<String>(idsDefsOut) {
+            @Override TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.stringIds;
+            }
+
+            @Override String read(Dex.Section in, IndexMap indexMap, int index) {
+                return in.readString();
+            }
+
+            @Override void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                indexMap.stringIds[oldIndex] = newIndex;
+            }
+
+            @Override void write(String value) {
+                contentsOut.stringDatas.size++;
+                idsDefsOut.writeInt(stringDataOut.getPosition());
+                stringDataOut.writeStringData(value);
+            }
+        }.mergeSorted();
+    }
+
+    private void mergeTypeIds() {
+        new IdMerger<Integer>(idsDefsOut) {
+            @Override TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.typeIds;
+            }
+
+            @Override Integer read(Dex.Section in, IndexMap indexMap, int index) {
+                int stringIndex = in.readInt();
+                return indexMap.adjustString(stringIndex);
+            }
+
+            @Override void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                if (newIndex < 0 || newIndex > 0xffff) {
+                    throw new DexIndexOverflowException("type ID not in [0, 0xffff]: " + newIndex);
+                }
+                indexMap.typeIds[oldIndex] = (short) newIndex;
+            }
+
+            @Override void write(Integer value) {
+                idsDefsOut.writeInt(value);
+            }
+        }.mergeSorted();
+    }
+
+    private void mergeTypeLists() {
+        new IdMerger<TypeList>(typeListOut) {
+            @Override TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.typeLists;
+            }
+
+            @Override TypeList read(Dex.Section in, IndexMap indexMap, int index) {
+                return indexMap.adjustTypeList(in.readTypeList());
+            }
+
+            @Override void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                indexMap.putTypeListOffset(offset, typeListOut.getPosition());
+            }
+
+            @Override void write(TypeList value) {
+                typeListOut.writeTypeList(value);
+            }
+        }.mergeUnsorted();
+    }
+
+    private void mergeProtoIds() {
+        new IdMerger<ProtoId>(idsDefsOut) {
+            @Override TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.protoIds;
+            }
+
+            @Override ProtoId read(Dex.Section in, IndexMap indexMap, int index) {
+                return indexMap.adjust(in.readProtoId());
+            }
+
+            @Override void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                if (newIndex < 0 || newIndex > 0xffff) {
+                    throw new DexIndexOverflowException("proto ID not in [0, 0xffff]: " + newIndex);
+                }
+                indexMap.protoIds[oldIndex] = (short) newIndex;
+            }
+
+            @Override
+            void write(ProtoId value) {
+                value.writeTo(idsDefsOut);
+            }
+        }.mergeSorted();
+    }
+
+    private void mergeCallSiteIds() {
+        new IdMerger<CallSiteId>(idsDefsOut) {
+            @Override
+            TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.callSiteIds;
+            }
+
+            @Override
+            CallSiteId read(Dex.Section in, IndexMap indexMap, int index) {
+                return indexMap.adjust(in.readCallSiteId());
+            }
+
+            @Override
+            void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                indexMap.callSiteIds[oldIndex] = newIndex;
+            }
+
+            @Override
+            void write(CallSiteId value) {
+                value.writeTo(idsDefsOut);
+            }
+        }.mergeSorted();
+    }
+
+    private void mergeMethodHandles() {
+        new IdMerger<MethodHandle>(idsDefsOut) {
+            @Override
+            TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.methodHandles;
+            }
+
+            @Override
+            MethodHandle read(Dex.Section in, IndexMap indexMap, int index) {
+                return indexMap.adjust(in.readMethodHandle());
+            }
+
+            @Override
+            void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                indexMap.methodHandleIds.put(oldIndex, indexMap.methodHandleIds.size());
+            }
+
+            @Override
+            void write(MethodHandle value) {
+                value.writeTo(idsDefsOut);
+            }
+        }.mergeUnsorted();
+    }
+
+    private void mergeFieldIds() {
+        new IdMerger<FieldId>(idsDefsOut) {
+            @Override TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.fieldIds;
+            }
+
+            @Override FieldId read(Dex.Section in, IndexMap indexMap, int index) {
+                return indexMap.adjust(in.readFieldId());
+            }
+
+            @Override void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                if (newIndex < 0 || newIndex > 0xffff) {
+                    throw new DexIndexOverflowException("field ID not in [0, 0xffff]: " + newIndex);
+                }
+                indexMap.fieldIds[oldIndex] = (short) newIndex;
+            }
+
+            @Override void write(FieldId value) {
+                value.writeTo(idsDefsOut);
+            }
+        }.mergeSorted();
+    }
+
+    private void mergeMethodIds() {
+        new IdMerger<MethodId>(idsDefsOut) {
+            @Override TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.methodIds;
+            }
+
+            @Override MethodId read(Dex.Section in, IndexMap indexMap, int index) {
+                return indexMap.adjust(in.readMethodId());
+            }
+
+            @Override void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                if (newIndex < 0 || newIndex > 0xffff) {
+                    throw new DexIndexOverflowException(
+                        "method ID not in [0, 0xffff]: " + newIndex);
+                }
+                indexMap.methodIds[oldIndex] = (short) newIndex;
+            }
+
+            @Override void write(MethodId methodId) {
+                methodId.writeTo(idsDefsOut);
+            }
+        }.mergeSorted();
+    }
+
+    private void mergeAnnotations() {
+        new IdMerger<Annotation>(annotationOut) {
+            @Override TableOfContents.Section getSection(TableOfContents tableOfContents) {
+                return tableOfContents.annotations;
+            }
+
+            @Override Annotation read(Dex.Section in, IndexMap indexMap, int index) {
+                return indexMap.adjust(in.readAnnotation());
+            }
+
+            @Override void updateIndex(int offset, IndexMap indexMap, int oldIndex, int newIndex) {
+                indexMap.putAnnotationOffset(offset, annotationOut.getPosition());
+            }
+
+            @Override void write(Annotation value) {
+                value.writeTo(annotationOut);
+            }
+        }.mergeUnsorted();
+    }
+
+    private void mergeClassDefs() {
+        SortableType[] types = getSortedTypes();
+        contentsOut.classDefs.off = idsDefsOut.getPosition();
+        contentsOut.classDefs.size = types.length;
+
+        for (SortableType type : types) {
+            Dex in = type.getDex();
+            transformClassDef(in, type.getClassDef(), type.getIndexMap());
+        }
+    }
+
+    /**
+     * Returns the union of classes from both files, sorted in order such that
+     * a class is always preceded by its supertype and implemented interfaces.
+     */
+    private SortableType[] getSortedTypes() {
+        // size is pessimistic; doesn't include arrays
+        SortableType[] sortableTypes = new SortableType[contentsOut.typeIds.size];
+        for (int i = 0; i < dexes.length; i++) {
+            readSortableTypes(sortableTypes, dexes[i], indexMaps[i]);
+        }
+
+        /*
+         * Populate the depths of each sortable type. This makes D iterations
+         * through all N types, where 'D' is the depth of the deepest type. For
+         * example, the deepest class in libcore is Xalan's KeyIterator, which
+         * is 11 types deep.
+         */
+        while (true) {
+            boolean allDone = true;
+            for (SortableType sortableType : sortableTypes) {
+                if (sortableType != null && !sortableType.isDepthAssigned()) {
+                    allDone &= sortableType.tryAssignDepth(sortableTypes);
+                }
+            }
+            if (allDone) {
+                break;
+            }
+        }
+
+        // Now that all types have depth information, the result can be sorted
+        Arrays.sort(sortableTypes, SortableType.NULLS_LAST_ORDER);
+
+        // Strip nulls from the end
+        int firstNull = Arrays.asList(sortableTypes).indexOf(null);
+        return firstNull != -1
+                ? Arrays.copyOfRange(sortableTypes, 0, firstNull)
+                : sortableTypes;
+    }
+
+    /**
+     * Reads just enough data on each class so that we can sort it and then find
+     * it later.
+     */
+    private void readSortableTypes(SortableType[] sortableTypes, Dex buffer,
+            IndexMap indexMap) {
+        for (ClassDef classDef : buffer.classDefs()) {
+            SortableType sortableType = indexMap.adjust(
+                    new SortableType(buffer, indexMap, classDef));
+            int t = sortableType.getTypeIndex();
+            if (sortableTypes[t] == null) {
+                sortableTypes[t] = sortableType;
+            } else if (collisionPolicy != CollisionPolicy.KEEP_FIRST) {
+                throw new DexException("Multiple dex files define "
+                        + buffer.typeNames().get(classDef.getTypeIndex()));
+            }
+        }
+    }
+
+    /**
+     * Copy annotation sets from each input to the output.
+     *
+     * TODO: this may write multiple copies of the same annotation set.
+     * We should shrink the output by merging rather than unioning
+     */
+    private void unionAnnotationSetsAndDirectories() {
+        for (int i = 0; i < dexes.length; i++) {
+            transformAnnotationSets(dexes[i], indexMaps[i]);
+        }
+        for (int i = 0; i < dexes.length; i++) {
+            transformAnnotationSetRefLists(dexes[i], indexMaps[i]);
+        }
+        for (int i = 0; i < dexes.length; i++) {
+            transformAnnotationDirectories(dexes[i], indexMaps[i]);
+        }
+        for (int i = 0; i < dexes.length; i++) {
+            transformStaticValues(dexes[i], indexMaps[i]);
+        }
+    }
+
+    private void transformAnnotationSets(Dex in, IndexMap indexMap) {
+        TableOfContents.Section section = in.getTableOfContents().annotationSets;
+        if (section.exists()) {
+            Dex.Section setIn = in.open(section.off);
+            for (int i = 0; i < section.size; i++) {
+                transformAnnotationSet(indexMap, setIn);
+            }
+        }
+    }
+
+    private void transformAnnotationSetRefLists(Dex in, IndexMap indexMap) {
+        TableOfContents.Section section = in.getTableOfContents().annotationSetRefLists;
+        if (section.exists()) {
+            Dex.Section setIn = in.open(section.off);
+            for (int i = 0; i < section.size; i++) {
+                transformAnnotationSetRefList(indexMap, setIn);
+            }
+        }
+    }
+
+    private void transformAnnotationDirectories(Dex in, IndexMap indexMap) {
+        TableOfContents.Section section = in.getTableOfContents().annotationsDirectories;
+        if (section.exists()) {
+            Dex.Section directoryIn = in.open(section.off);
+            for (int i = 0; i < section.size; i++) {
+                transformAnnotationDirectory(directoryIn, indexMap);
+            }
+        }
+    }
+
+    private void transformStaticValues(Dex in, IndexMap indexMap) {
+        TableOfContents.Section section = in.getTableOfContents().encodedArrays;
+        if (section.exists()) {
+            Dex.Section staticValuesIn = in.open(section.off);
+            for (int i = 0; i < section.size; i++) {
+                transformStaticValues(staticValuesIn, indexMap);
+            }
+        }
+    }
+
+    /**
+     * Reads a class_def_item beginning at {@code in} and writes the index and
+     * data.
+     */
+    private void transformClassDef(Dex in, ClassDef classDef, IndexMap indexMap) {
+        idsDefsOut.assertFourByteAligned();
+        idsDefsOut.writeInt(classDef.getTypeIndex());
+        idsDefsOut.writeInt(classDef.getAccessFlags());
+        idsDefsOut.writeInt(classDef.getSupertypeIndex());
+        idsDefsOut.writeInt(classDef.getInterfacesOffset());
+
+        int sourceFileIndex = indexMap.adjustString(classDef.getSourceFileIndex());
+        idsDefsOut.writeInt(sourceFileIndex);
+
+        int annotationsOff = classDef.getAnnotationsOffset();
+        idsDefsOut.writeInt(indexMap.adjustAnnotationDirectory(annotationsOff));
+
+        int classDataOff = classDef.getClassDataOffset();
+        if (classDataOff == 0) {
+            idsDefsOut.writeInt(0);
+        } else {
+            idsDefsOut.writeInt(classDataOut.getPosition());
+            ClassData classData = in.readClassData(classDef);
+            transformClassData(in, classData, indexMap);
+        }
+
+        int staticValuesOff = classDef.getStaticValuesOffset();
+        idsDefsOut.writeInt(indexMap.adjustEncodedArray(staticValuesOff));
+    }
+
+    /**
+     * Transform all annotations on a class.
+     */
+    private void transformAnnotationDirectory(
+            Dex.Section directoryIn, IndexMap indexMap) {
+        contentsOut.annotationsDirectories.size++;
+        annotationsDirectoryOut.assertFourByteAligned();
+        indexMap.putAnnotationDirectoryOffset(
+                directoryIn.getPosition(), annotationsDirectoryOut.getPosition());
+
+        int classAnnotationsOffset = indexMap.adjustAnnotationSet(directoryIn.readInt());
+        annotationsDirectoryOut.writeInt(classAnnotationsOffset);
+
+        int fieldsSize = directoryIn.readInt();
+        annotationsDirectoryOut.writeInt(fieldsSize);
+
+        int methodsSize = directoryIn.readInt();
+        annotationsDirectoryOut.writeInt(methodsSize);
+
+        int parameterListSize = directoryIn.readInt();
+        annotationsDirectoryOut.writeInt(parameterListSize);
+
+        for (int i = 0; i < fieldsSize; i++) {
+            // field index
+            annotationsDirectoryOut.writeInt(indexMap.adjustField(directoryIn.readInt()));
+
+            // annotations offset
+            annotationsDirectoryOut.writeInt(indexMap.adjustAnnotationSet(directoryIn.readInt()));
+        }
+
+        for (int i = 0; i < methodsSize; i++) {
+            // method index
+            annotationsDirectoryOut.writeInt(indexMap.adjustMethod(directoryIn.readInt()));
+
+            // annotation set offset
+            annotationsDirectoryOut.writeInt(
+                    indexMap.adjustAnnotationSet(directoryIn.readInt()));
+        }
+
+        for (int i = 0; i < parameterListSize; i++) {
+            // method index
+            annotationsDirectoryOut.writeInt(indexMap.adjustMethod(directoryIn.readInt()));
+
+            // annotations offset
+            annotationsDirectoryOut.writeInt(
+                    indexMap.adjustAnnotationSetRefList(directoryIn.readInt()));
+        }
+    }
+
+    /**
+     * Transform all annotations on a single type, member or parameter.
+     */
+    private void transformAnnotationSet(IndexMap indexMap, Dex.Section setIn) {
+        contentsOut.annotationSets.size++;
+        annotationSetOut.assertFourByteAligned();
+        indexMap.putAnnotationSetOffset(setIn.getPosition(), annotationSetOut.getPosition());
+
+        int size = setIn.readInt();
+        annotationSetOut.writeInt(size);
+
+        for (int j = 0; j < size; j++) {
+            annotationSetOut.writeInt(indexMap.adjustAnnotation(setIn.readInt()));
+        }
+    }
+
+    /**
+     * Transform all annotation set ref lists.
+     */
+    private void transformAnnotationSetRefList(IndexMap indexMap, Dex.Section refListIn) {
+        contentsOut.annotationSetRefLists.size++;
+        annotationSetRefListOut.assertFourByteAligned();
+        indexMap.putAnnotationSetRefListOffset(
+                refListIn.getPosition(), annotationSetRefListOut.getPosition());
+
+        int parameterCount = refListIn.readInt();
+        annotationSetRefListOut.writeInt(parameterCount);
+        for (int p = 0; p < parameterCount; p++) {
+            annotationSetRefListOut.writeInt(indexMap.adjustAnnotationSet(refListIn.readInt()));
+        }
+    }
+
+    private void transformClassData(Dex in, ClassData classData, IndexMap indexMap) {
+        contentsOut.classDatas.size++;
+
+        ClassData.Field[] staticFields = classData.getStaticFields();
+        ClassData.Field[] instanceFields = classData.getInstanceFields();
+        ClassData.Method[] directMethods = classData.getDirectMethods();
+        ClassData.Method[] virtualMethods = classData.getVirtualMethods();
+
+        classDataOut.writeUleb128(staticFields.length);
+        classDataOut.writeUleb128(instanceFields.length);
+        classDataOut.writeUleb128(directMethods.length);
+        classDataOut.writeUleb128(virtualMethods.length);
+
+        transformFields(indexMap, staticFields);
+        transformFields(indexMap, instanceFields);
+        transformMethods(in, indexMap, directMethods);
+        transformMethods(in, indexMap, virtualMethods);
+    }
+
+    private void transformFields(IndexMap indexMap, ClassData.Field[] fields) {
+        int lastOutFieldIndex = 0;
+        for (ClassData.Field field : fields) {
+            int outFieldIndex = indexMap.adjustField(field.getFieldIndex());
+            classDataOut.writeUleb128(outFieldIndex - lastOutFieldIndex);
+            lastOutFieldIndex = outFieldIndex;
+            classDataOut.writeUleb128(field.getAccessFlags());
+        }
+    }
+
+    private void transformMethods(Dex in, IndexMap indexMap, ClassData.Method[] methods) {
+        int lastOutMethodIndex = 0;
+        for (ClassData.Method method : methods) {
+            int outMethodIndex = indexMap.adjustMethod(method.getMethodIndex());
+            classDataOut.writeUleb128(outMethodIndex - lastOutMethodIndex);
+            lastOutMethodIndex = outMethodIndex;
+
+            classDataOut.writeUleb128(method.getAccessFlags());
+
+            if (method.getCodeOffset() == 0) {
+                classDataOut.writeUleb128(0);
+            } else {
+                codeOut.alignToFourBytesWithZeroFill();
+                classDataOut.writeUleb128(codeOut.getPosition());
+                transformCode(in, in.readCode(method), indexMap);
+            }
+        }
+    }
+
+    private void transformCode(Dex in, Code code, IndexMap indexMap) {
+        contentsOut.codes.size++;
+        codeOut.assertFourByteAligned();
+
+        codeOut.writeUnsignedShort(code.getRegistersSize());
+        codeOut.writeUnsignedShort(code.getInsSize());
+        codeOut.writeUnsignedShort(code.getOutsSize());
+
+        Code.Try[] tries = code.getTries();
+        Code.CatchHandler[] catchHandlers = code.getCatchHandlers();
+        codeOut.writeUnsignedShort(tries.length);
+
+        int debugInfoOffset = code.getDebugInfoOffset();
+        if (debugInfoOffset != 0) {
+            codeOut.writeInt(debugInfoOut.getPosition());
+            transformDebugInfoItem(in.open(debugInfoOffset), indexMap);
+        } else {
+            codeOut.writeInt(0);
+        }
+
+        short[] instructions = code.getInstructions();
+        short[] newInstructions = instructionTransformer.transform(indexMap, instructions);
+        codeOut.writeInt(newInstructions.length);
+        codeOut.write(newInstructions);
+
+        if (tries.length > 0) {
+            if (newInstructions.length % 2 == 1) {
+                codeOut.writeShort((short) 0); // padding
+            }
+
+            /*
+             * We can't write the tries until we've written the catch handlers.
+             * Unfortunately they're in the opposite order in the dex file so we
+             * need to transform them out-of-order.
+             */
+            Dex.Section triesSection = dexOut.open(codeOut.getPosition());
+            codeOut.skip(tries.length * SizeOf.TRY_ITEM);
+            int[] offsets = transformCatchHandlers(indexMap, catchHandlers);
+            transformTries(triesSection, tries, offsets);
+        }
+    }
+
+    /**
+     * Writes the catch handlers to {@code codeOut} and returns their indices.
+     */
+    private int[] transformCatchHandlers(IndexMap indexMap, Code.CatchHandler[] catchHandlers) {
+        int baseOffset = codeOut.getPosition();
+        codeOut.writeUleb128(catchHandlers.length);
+        int[] offsets = new int[catchHandlers.length];
+        for (int i = 0; i < catchHandlers.length; i++) {
+            offsets[i] = codeOut.getPosition() - baseOffset;
+            transformEncodedCatchHandler(catchHandlers[i], indexMap);
+        }
+        return offsets;
+    }
+
+    private void transformTries(Dex.Section out, Code.Try[] tries,
+            int[] catchHandlerOffsets) {
+        for (Code.Try tryItem : tries) {
+            out.writeInt(tryItem.getStartAddress());
+            out.writeUnsignedShort(tryItem.getInstructionCount());
+            out.writeUnsignedShort(catchHandlerOffsets[tryItem.getCatchHandlerIndex()]);
+        }
+    }
+
+    private static final byte DBG_END_SEQUENCE = 0x00;
+    private static final byte DBG_ADVANCE_PC = 0x01;
+    private static final byte DBG_ADVANCE_LINE = 0x02;
+    private static final byte DBG_START_LOCAL = 0x03;
+    private static final byte DBG_START_LOCAL_EXTENDED = 0x04;
+    private static final byte DBG_END_LOCAL = 0x05;
+    private static final byte DBG_RESTART_LOCAL = 0x06;
+    private static final byte DBG_SET_PROLOGUE_END = 0x07;
+    private static final byte DBG_SET_EPILOGUE_BEGIN = 0x08;
+    private static final byte DBG_SET_FILE = 0x09;
+
+    private void transformDebugInfoItem(Dex.Section in, IndexMap indexMap) {
+        contentsOut.debugInfos.size++;
+        int lineStart = in.readUleb128();
+        debugInfoOut.writeUleb128(lineStart);
+
+        int parametersSize = in.readUleb128();
+        debugInfoOut.writeUleb128(parametersSize);
+
+        for (int p = 0; p < parametersSize; p++) {
+            int parameterName = in.readUleb128p1();
+            debugInfoOut.writeUleb128p1(indexMap.adjustString(parameterName));
+        }
+
+        int addrDiff;    // uleb128   address delta.
+        int lineDiff;    // sleb128   line delta.
+        int registerNum; // uleb128   register number.
+        int nameIndex;   // uleb128p1 string index.    Needs indexMap adjustment.
+        int typeIndex;   // uleb128p1 type index.      Needs indexMap adjustment.
+        int sigIndex;    // uleb128p1 string index.    Needs indexMap adjustment.
+
+        while (true) {
+            int opcode = in.readByte();
+            debugInfoOut.writeByte(opcode);
+
+            switch (opcode) {
+            case DBG_END_SEQUENCE:
+                return;
+
+            case DBG_ADVANCE_PC:
+                addrDiff = in.readUleb128();
+                debugInfoOut.writeUleb128(addrDiff);
+                break;
+
+            case DBG_ADVANCE_LINE:
+                lineDiff = in.readSleb128();
+                debugInfoOut.writeSleb128(lineDiff);
+                break;
+
+            case DBG_START_LOCAL:
+            case DBG_START_LOCAL_EXTENDED:
+                registerNum = in.readUleb128();
+                debugInfoOut.writeUleb128(registerNum);
+                nameIndex = in.readUleb128p1();
+                debugInfoOut.writeUleb128p1(indexMap.adjustString(nameIndex));
+                typeIndex = in.readUleb128p1();
+                debugInfoOut.writeUleb128p1(indexMap.adjustType(typeIndex));
+                if (opcode == DBG_START_LOCAL_EXTENDED) {
+                    sigIndex = in.readUleb128p1();
+                    debugInfoOut.writeUleb128p1(indexMap.adjustString(sigIndex));
+                }
+                break;
+
+            case DBG_END_LOCAL:
+            case DBG_RESTART_LOCAL:
+                registerNum = in.readUleb128();
+                debugInfoOut.writeUleb128(registerNum);
+                break;
+
+            case DBG_SET_FILE:
+                nameIndex = in.readUleb128p1();
+                debugInfoOut.writeUleb128p1(indexMap.adjustString(nameIndex));
+                break;
+
+            case DBG_SET_PROLOGUE_END:
+            case DBG_SET_EPILOGUE_BEGIN:
+            default:
+                break;
+            }
+        }
+    }
+
+    private void transformEncodedCatchHandler(Code.CatchHandler catchHandler, IndexMap indexMap) {
+        int catchAllAddress = catchHandler.getCatchAllAddress();
+        int[] typeIndexes = catchHandler.getTypeIndexes();
+        int[] addresses = catchHandler.getAddresses();
+
+        if (catchAllAddress != -1) {
+            codeOut.writeSleb128(-typeIndexes.length);
+        } else {
+            codeOut.writeSleb128(typeIndexes.length);
+        }
+
+        for (int i = 0; i < typeIndexes.length; i++) {
+            codeOut.writeUleb128(indexMap.adjustType(typeIndexes[i]));
+            codeOut.writeUleb128(addresses[i]);
+        }
+
+        if (catchAllAddress != -1) {
+            codeOut.writeUleb128(catchAllAddress);
+        }
+    }
+
+    private void transformStaticValues(Dex.Section in, IndexMap indexMap) {
+        contentsOut.encodedArrays.size++;
+        indexMap.putEncodedArrayValueOffset(in.getPosition(), encodedArrayOut.getPosition());
+        indexMap.adjustEncodedArray(in.readEncodedArray()).writeTo(encodedArrayOut);
+    }
+
+    /**
+     * Byte counts for the sections written when creating a dex. Target sizes
+     * are defined in one of two ways:
+     * <ul>
+     * <li>By pessimistically guessing how large the union of dex files will be.
+     *     We're pessimistic because we can't predict the amount of duplication
+     *     between dex files, nor can we predict the length of ULEB-encoded
+     *     offsets or indices.
+     * <li>By exactly measuring an existing dex.
+     * </ul>
+     */
+    private static class WriterSizes {
+        private int header = SizeOf.HEADER_ITEM;
+        private int idsDefs;
+        private int mapList;
+        private int typeList;
+        private int classData;
+        private int code;
+        private int stringData;
+        private int debugInfo;
+        private int encodedArray;
+        private int annotationsDirectory;
+        private int annotationsSet;
+        private int annotationsSetRefList;
+        private int annotation;
+
+        /**
+         * Compute sizes for merging several dexes.
+         */
+        public WriterSizes(Dex[] dexes) {
+            for (int i = 0; i < dexes.length; i++) {
+                plus(dexes[i].getTableOfContents(), false);
+            }
+            fourByteAlign();
+        }
+
+        public WriterSizes(DexMerger dexMerger) {
+            header = dexMerger.headerOut.used();
+            idsDefs = dexMerger.idsDefsOut.used();
+            mapList = dexMerger.mapListOut.used();
+            typeList = dexMerger.typeListOut.used();
+            classData = dexMerger.classDataOut.used();
+            code = dexMerger.codeOut.used();
+            stringData = dexMerger.stringDataOut.used();
+            debugInfo = dexMerger.debugInfoOut.used();
+            encodedArray = dexMerger.encodedArrayOut.used();
+            annotationsDirectory = dexMerger.annotationsDirectoryOut.used();
+            annotationsSet = dexMerger.annotationSetOut.used();
+            annotationsSetRefList = dexMerger.annotationSetRefListOut.used();
+            annotation = dexMerger.annotationOut.used();
+            fourByteAlign();
+        }
+
+        private void plus(TableOfContents contents, boolean exact) {
+            idsDefs += contents.stringIds.size * SizeOf.STRING_ID_ITEM
+                    + contents.typeIds.size * SizeOf.TYPE_ID_ITEM
+                    + contents.protoIds.size * SizeOf.PROTO_ID_ITEM
+                    + contents.fieldIds.size * SizeOf.MEMBER_ID_ITEM
+                    + contents.methodIds.size * SizeOf.MEMBER_ID_ITEM
+                    + contents.classDefs.size * SizeOf.CLASS_DEF_ITEM;
+            mapList = SizeOf.UINT + (contents.sections.length * SizeOf.MAP_ITEM);
+            typeList += fourByteAlign(contents.typeLists.byteCount); // We count each dex's
+            // typelists section as realigned on 4 bytes, because each typelist of each dex's
+            // typelists section is aligned on 4 bytes. If we didn't, there is a case where each
+            // size of both dex's typelists section is a multiple of 2 but not a multiple of 4,
+            // and the sum of both sizes is a multiple of 4 but would not be sufficient to write
+            // each typelist aligned on 4 bytes.
+            stringData += contents.stringDatas.byteCount;
+            annotationsDirectory += contents.annotationsDirectories.byteCount;
+            annotationsSet += contents.annotationSets.byteCount;
+            annotationsSetRefList += contents.annotationSetRefLists.byteCount;
+
+            if (exact) {
+                code += contents.codes.byteCount;
+                classData += contents.classDatas.byteCount;
+                encodedArray += contents.encodedArrays.byteCount;
+                annotation += contents.annotations.byteCount;
+                debugInfo += contents.debugInfos.byteCount;
+            } else {
+                // at most 1/4 of the bytes in a code section are uleb/sleb
+                code += (int) Math.ceil(contents.codes.byteCount * 1.25);
+                // at most 2/3 of the bytes in a class data section are uleb/sleb that may change
+                // (assuming the worst case that section contains only methods and no fields)
+                classData += (int) Math.ceil(contents.classDatas.byteCount * 1.67);
+                // all of the bytes in an encoding arrays section may be uleb/sleb
+                encodedArray += contents.encodedArrays.byteCount * 2;
+                // all of the bytes in an annotations section may be uleb/sleb
+                annotation += (int) Math.ceil(contents.annotations.byteCount * 2);
+                // all of the bytes in a debug info section may be uleb/sleb. The additive constant
+                // is a fudge factor observed to be required when merging small
+                // DEX files (b/68483205).
+                debugInfo += contents.debugInfos.byteCount * 2 + 8;
+            }
+        }
+
+        private void fourByteAlign() {
+            header = fourByteAlign(header);
+            idsDefs = fourByteAlign(idsDefs);
+            mapList = fourByteAlign(mapList);
+            typeList = fourByteAlign(typeList);
+            classData = fourByteAlign(classData);
+            code = fourByteAlign(code);
+            stringData = fourByteAlign(stringData);
+            debugInfo = fourByteAlign(debugInfo);
+            encodedArray = fourByteAlign(encodedArray);
+            annotationsDirectory = fourByteAlign(annotationsDirectory);
+            annotationsSet = fourByteAlign(annotationsSet);
+            annotationsSetRefList = fourByteAlign(annotationsSetRefList);
+            annotation = fourByteAlign(annotation);
+        }
+
+        private static int fourByteAlign(int position) {
+            return (position + 3) & ~3;
+        }
+
+        public int size() {
+            return header + idsDefs + mapList + typeList + classData + code + stringData + debugInfo
+                    + encodedArray + annotationsDirectory + annotationsSet + annotationsSetRefList
+                    + annotation;
+        }
+    }
+
+    public static void main(String[] args) throws IOException {
+        if (args.length < 2) {
+            printUsage();
+            return;
+        }
+
+        Dex[] dexes = new Dex[args.length - 1];
+        for (int i = 1; i < args.length; i++) {
+            dexes[i - 1] = new Dex(new File(args[i]));
+        }
+        Dex merged = new DexMerger(dexes, CollisionPolicy.KEEP_FIRST, new DxContext()).merge();
+        merged.writeTo(new File(args[0]));
+    }
+
+    private static void printUsage() {
+        System.out.println("Usage: DexMerger <out.dex> <a.dex> <b.dex> ...");
+        System.out.println();
+        System.out.println(
+            "If a class is defined in several dex, the class found in the first dex will be used.");
+    }
+}
diff --git a/dx/src/com/android/dx/merge/IndexMap.java b/dx/src/com/android/dx/merge/IndexMap.java
new file mode 100644
index 0000000..9b4354b
--- /dev/null
+++ b/dx/src/com/android/dx/merge/IndexMap.java
@@ -0,0 +1,389 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+import com.android.dex.Annotation;
+import com.android.dex.CallSiteId;
+import com.android.dex.ClassDef;
+import com.android.dex.Dex;
+import com.android.dex.DexException;
+import com.android.dex.EncodedValue;
+import com.android.dex.EncodedValueCodec;
+import com.android.dex.EncodedValueReader;
+import static com.android.dex.EncodedValueReader.ENCODED_ANNOTATION;
+import static com.android.dex.EncodedValueReader.ENCODED_ARRAY;
+import static com.android.dex.EncodedValueReader.ENCODED_BOOLEAN;
+import static com.android.dex.EncodedValueReader.ENCODED_BYTE;
+import static com.android.dex.EncodedValueReader.ENCODED_CHAR;
+import static com.android.dex.EncodedValueReader.ENCODED_DOUBLE;
+import static com.android.dex.EncodedValueReader.ENCODED_ENUM;
+import static com.android.dex.EncodedValueReader.ENCODED_FIELD;
+import static com.android.dex.EncodedValueReader.ENCODED_FLOAT;
+import static com.android.dex.EncodedValueReader.ENCODED_INT;
+import static com.android.dex.EncodedValueReader.ENCODED_LONG;
+import static com.android.dex.EncodedValueReader.ENCODED_METHOD;
+import static com.android.dex.EncodedValueReader.ENCODED_METHOD_HANDLE;
+import static com.android.dex.EncodedValueReader.ENCODED_METHOD_TYPE;
+import static com.android.dex.EncodedValueReader.ENCODED_NULL;
+import static com.android.dex.EncodedValueReader.ENCODED_SHORT;
+import static com.android.dex.EncodedValueReader.ENCODED_STRING;
+import static com.android.dex.EncodedValueReader.ENCODED_TYPE;
+import com.android.dex.FieldId;
+import com.android.dex.Leb128;
+import com.android.dex.MethodHandle;
+import com.android.dex.MethodId;
+import com.android.dex.ProtoId;
+import com.android.dex.TableOfContents;
+import com.android.dex.TypeList;
+import com.android.dex.util.ByteOutput;
+import com.android.dx.util.ByteArrayAnnotatedOutput;
+import java.util.HashMap;
+
+/**
+ * Maps the index offsets from one dex file to those in another. For example, if
+ * you have string #5 in the old dex file, its position in the new dex file is
+ * {@code strings[5]}.
+ */
+public final class IndexMap {
+    private final Dex target;
+    public final int[] stringIds;
+    public final short[] typeIds;
+    public final short[] protoIds;
+    public final short[] fieldIds;
+    public final short[] methodIds;
+    public final int[] callSiteIds;
+    public final HashMap<Integer, Integer> methodHandleIds;
+    private final HashMap<Integer, Integer> typeListOffsets;
+    private final HashMap<Integer, Integer> annotationOffsets;
+    private final HashMap<Integer, Integer> annotationSetOffsets;
+    private final HashMap<Integer, Integer> annotationSetRefListOffsets;
+    private final HashMap<Integer, Integer> annotationDirectoryOffsets;
+    private final HashMap<Integer, Integer> encodedArrayValueOffset;
+
+    public IndexMap(Dex target, TableOfContents tableOfContents) {
+        this.target = target;
+        this.stringIds = new int[tableOfContents.stringIds.size];
+        this.typeIds = new short[tableOfContents.typeIds.size];
+        this.protoIds = new short[tableOfContents.protoIds.size];
+        this.fieldIds = new short[tableOfContents.fieldIds.size];
+        this.methodIds = new short[tableOfContents.methodIds.size];
+        this.callSiteIds = new int[tableOfContents.callSiteIds.size];
+        this.methodHandleIds = new HashMap<Integer, Integer>();
+        this.typeListOffsets = new HashMap<Integer, Integer>();
+        this.annotationOffsets = new HashMap<Integer, Integer>();
+        this.annotationSetOffsets = new HashMap<Integer, Integer>();
+        this.annotationSetRefListOffsets = new HashMap<Integer, Integer>();
+        this.annotationDirectoryOffsets = new HashMap<Integer, Integer>();
+        this.encodedArrayValueOffset = new HashMap<Integer, Integer>();
+
+        /*
+         * A type list, annotation set, annotation directory, or static value at
+         * offset 0 is always empty. Always map offset 0 to 0.
+         */
+        this.typeListOffsets.put(0, 0);
+        this.annotationSetOffsets.put(0, 0);
+        this.annotationDirectoryOffsets.put(0, 0);
+        this.encodedArrayValueOffset.put(0, 0);
+    }
+
+    public void putTypeListOffset(int oldOffset, int newOffset) {
+        if (oldOffset <= 0 || newOffset <= 0) {
+            throw new IllegalArgumentException();
+        }
+        typeListOffsets.put(oldOffset, newOffset);
+    }
+
+    public void putAnnotationOffset(int oldOffset, int newOffset) {
+        if (oldOffset <= 0 || newOffset <= 0) {
+            throw new IllegalArgumentException();
+        }
+        annotationOffsets.put(oldOffset, newOffset);
+    }
+
+    public void putAnnotationSetOffset(int oldOffset, int newOffset) {
+        if (oldOffset <= 0 || newOffset <= 0) {
+            throw new IllegalArgumentException();
+        }
+        annotationSetOffsets.put(oldOffset, newOffset);
+    }
+
+    public void putAnnotationSetRefListOffset(int oldOffset, int newOffset) {
+        if (oldOffset <= 0 || newOffset <= 0) {
+            throw new IllegalArgumentException();
+        }
+        annotationSetRefListOffsets.put(oldOffset, newOffset);
+    }
+
+    public void putAnnotationDirectoryOffset(int oldOffset, int newOffset) {
+        if (oldOffset <= 0 || newOffset <= 0) {
+            throw new IllegalArgumentException();
+        }
+        annotationDirectoryOffsets.put(oldOffset, newOffset);
+    }
+
+    public void putEncodedArrayValueOffset(int oldOffset, int newOffset) {
+        if (oldOffset <= 0 || newOffset <= 0) {
+            throw new IllegalArgumentException();
+        }
+        encodedArrayValueOffset.put(oldOffset, newOffset);
+    }
+
+    public int adjustString(int stringIndex) {
+        return stringIndex == ClassDef.NO_INDEX ? ClassDef.NO_INDEX : stringIds[stringIndex];
+    }
+
+    public int adjustType(int typeIndex) {
+        return (typeIndex == ClassDef.NO_INDEX) ? ClassDef.NO_INDEX : (typeIds[typeIndex] & 0xffff);
+    }
+
+    public TypeList adjustTypeList(TypeList typeList) {
+        if (typeList == TypeList.EMPTY) {
+            return typeList;
+        }
+        short[] types = typeList.getTypes().clone();
+        for (int i = 0; i < types.length; i++) {
+            types[i] = (short) adjustType(types[i]);
+        }
+        return new TypeList(target, types);
+    }
+
+    public int adjustProto(int protoIndex) {
+        return protoIds[protoIndex] & 0xffff;
+    }
+
+    public int adjustField(int fieldIndex) {
+        return fieldIds[fieldIndex] & 0xffff;
+    }
+
+    public int adjustMethod(int methodIndex) {
+        return methodIds[methodIndex] & 0xffff;
+    }
+
+    public int adjustTypeListOffset(int typeListOffset) {
+        return typeListOffsets.get(typeListOffset);
+    }
+
+    public int adjustAnnotation(int annotationOffset) {
+        return annotationOffsets.get(annotationOffset);
+    }
+
+    public int adjustAnnotationSet(int annotationSetOffset) {
+        return annotationSetOffsets.get(annotationSetOffset);
+    }
+
+    public int adjustAnnotationSetRefList(int annotationSetRefListOffset) {
+        return annotationSetRefListOffsets.get(annotationSetRefListOffset);
+    }
+
+    public int adjustAnnotationDirectory(int annotationDirectoryOffset) {
+        return annotationDirectoryOffsets.get(annotationDirectoryOffset);
+    }
+
+    public int adjustEncodedArray(int encodedArrayAttribute) {
+        return encodedArrayValueOffset.get(encodedArrayAttribute);
+    }
+
+    public int adjustCallSite(int callSiteIndex) {
+        return callSiteIds[callSiteIndex];
+    }
+
+    public int adjustMethodHandle(int methodHandleIndex) {
+        return methodHandleIds.get(methodHandleIndex);
+    }
+
+    public MethodId adjust(MethodId methodId) {
+        return new MethodId(target,
+                adjustType(methodId.getDeclaringClassIndex()),
+                adjustProto(methodId.getProtoIndex()),
+                adjustString(methodId.getNameIndex()));
+    }
+
+    public CallSiteId adjust(CallSiteId callSiteId) {
+        return new CallSiteId(target, adjustEncodedArray(callSiteId.getCallSiteOffset()));
+    }
+
+    public MethodHandle adjust(MethodHandle methodHandle) {
+        return new MethodHandle(
+                target,
+                methodHandle.getMethodHandleType(),
+                methodHandle.getUnused1(),
+                methodHandle.getMethodHandleType().isField()
+                        ? adjustField(methodHandle.getFieldOrMethodId())
+                        : adjustMethod(methodHandle.getFieldOrMethodId()),
+                methodHandle.getUnused2());
+    }
+
+    public FieldId adjust(FieldId fieldId) {
+        return new FieldId(target,
+                adjustType(fieldId.getDeclaringClassIndex()),
+                adjustType(fieldId.getTypeIndex()),
+                adjustString(fieldId.getNameIndex()));
+
+    }
+
+    public ProtoId adjust(ProtoId protoId) {
+        return new ProtoId(target,
+                adjustString(protoId.getShortyIndex()),
+                adjustType(protoId.getReturnTypeIndex()),
+                adjustTypeListOffset(protoId.getParametersOffset()));
+    }
+
+    public ClassDef adjust(ClassDef classDef) {
+        return new ClassDef(target, classDef.getOffset(), adjustType(classDef.getTypeIndex()),
+                classDef.getAccessFlags(), adjustType(classDef.getSupertypeIndex()),
+                adjustTypeListOffset(classDef.getInterfacesOffset()), classDef.getSourceFileIndex(),
+                classDef.getAnnotationsOffset(), classDef.getClassDataOffset(),
+                classDef.getStaticValuesOffset());
+    }
+
+    public SortableType adjust(SortableType sortableType) {
+        return new SortableType(sortableType.getDex(),
+                sortableType.getIndexMap(), adjust(sortableType.getClassDef()));
+    }
+
+    public EncodedValue adjustEncodedValue(EncodedValue encodedValue) {
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(32);
+        new EncodedValueTransformer(out).transform(new EncodedValueReader(encodedValue));
+        return new EncodedValue(out.toByteArray());
+    }
+
+    public EncodedValue adjustEncodedArray(EncodedValue encodedArray) {
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(32);
+        new EncodedValueTransformer(out).transformArray(
+                new EncodedValueReader(encodedArray, ENCODED_ARRAY));
+        return new EncodedValue(out.toByteArray());
+    }
+
+    public Annotation adjust(Annotation annotation) {
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(32);
+        new EncodedValueTransformer(out).transformAnnotation(
+                annotation.getReader());
+        return new Annotation(target, annotation.getVisibility(),
+                new EncodedValue(out.toByteArray()));
+    }
+
+    /**
+     * Adjust an encoded value or array.
+     */
+    private final class EncodedValueTransformer {
+        private final ByteOutput out;
+
+        public EncodedValueTransformer(ByteOutput out) {
+            this.out = out;
+        }
+
+        public void transform(EncodedValueReader reader) {
+            // TODO: extract this into a helper class, EncodedValueWriter
+            switch (reader.peek()) {
+            case ENCODED_BYTE:
+                EncodedValueCodec.writeSignedIntegralValue(out, ENCODED_BYTE, reader.readByte());
+                break;
+            case ENCODED_SHORT:
+                EncodedValueCodec.writeSignedIntegralValue(out, ENCODED_SHORT, reader.readShort());
+                break;
+            case ENCODED_INT:
+                EncodedValueCodec.writeSignedIntegralValue(out, ENCODED_INT, reader.readInt());
+                break;
+            case ENCODED_LONG:
+                EncodedValueCodec.writeSignedIntegralValue(out, ENCODED_LONG, reader.readLong());
+                break;
+            case ENCODED_CHAR:
+                EncodedValueCodec.writeUnsignedIntegralValue(out, ENCODED_CHAR, reader.readChar());
+                break;
+            case ENCODED_FLOAT:
+                // Shift value left 32 so that right-zero-extension works.
+                long longBits = ((long) Float.floatToIntBits(reader.readFloat())) << 32;
+                EncodedValueCodec.writeRightZeroExtendedValue(out, ENCODED_FLOAT, longBits);
+                break;
+            case ENCODED_DOUBLE:
+                EncodedValueCodec.writeRightZeroExtendedValue(
+                        out, ENCODED_DOUBLE, Double.doubleToLongBits(reader.readDouble()));
+                break;
+            case ENCODED_METHOD_TYPE:
+                EncodedValueCodec.writeUnsignedIntegralValue(
+                        out, ENCODED_METHOD_TYPE, adjustProto(reader.readMethodType()));
+                break;
+            case ENCODED_METHOD_HANDLE:
+                EncodedValueCodec.writeUnsignedIntegralValue(
+                        out,
+                        ENCODED_METHOD_HANDLE,
+                        adjustMethodHandle(reader.readMethodHandle()));
+                break;
+            case ENCODED_STRING:
+                EncodedValueCodec.writeUnsignedIntegralValue(
+                        out, ENCODED_STRING, adjustString(reader.readString()));
+                break;
+            case ENCODED_TYPE:
+                EncodedValueCodec.writeUnsignedIntegralValue(
+                        out, ENCODED_TYPE, adjustType(reader.readType()));
+                break;
+            case ENCODED_FIELD:
+                EncodedValueCodec.writeUnsignedIntegralValue(
+                        out, ENCODED_FIELD, adjustField(reader.readField()));
+                break;
+            case ENCODED_ENUM:
+                EncodedValueCodec.writeUnsignedIntegralValue(
+                        out, ENCODED_ENUM, adjustField(reader.readEnum()));
+                break;
+            case ENCODED_METHOD:
+                EncodedValueCodec.writeUnsignedIntegralValue(
+                        out, ENCODED_METHOD, adjustMethod(reader.readMethod()));
+                break;
+            case ENCODED_ARRAY:
+                writeTypeAndArg(ENCODED_ARRAY, 0);
+                transformArray(reader);
+                break;
+            case ENCODED_ANNOTATION:
+                writeTypeAndArg(ENCODED_ANNOTATION, 0);
+                transformAnnotation(reader);
+                break;
+            case ENCODED_NULL:
+                reader.readNull();
+                writeTypeAndArg(ENCODED_NULL, 0);
+                break;
+            case ENCODED_BOOLEAN:
+                boolean value = reader.readBoolean();
+                writeTypeAndArg(ENCODED_BOOLEAN, value ? 1 : 0);
+                break;
+            default:
+                throw new DexException("Unexpected type: " + Integer.toHexString(reader.peek()));
+            }
+        }
+
+        private void transformAnnotation(EncodedValueReader reader) {
+            int fieldCount = reader.readAnnotation();
+            Leb128.writeUnsignedLeb128(out, adjustType(reader.getAnnotationType()));
+            Leb128.writeUnsignedLeb128(out, fieldCount);
+            for (int i = 0; i < fieldCount; i++) {
+                Leb128.writeUnsignedLeb128(out, adjustString(reader.readAnnotationName()));
+                transform(reader);
+            }
+        }
+
+        private void transformArray(EncodedValueReader reader) {
+            int size = reader.readArray();
+            Leb128.writeUnsignedLeb128(out, size);
+            for (int i = 0; i < size; i++) {
+                transform(reader);
+            }
+        }
+
+        private void writeTypeAndArg(int type, int arg) {
+            out.writeByte((arg << 5) | type);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/merge/InstructionTransformer.java b/dx/src/com/android/dx/merge/InstructionTransformer.java
new file mode 100644
index 0000000..dc99108
--- /dev/null
+++ b/dx/src/com/android/dx/merge/InstructionTransformer.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+import com.android.dex.DexException;
+import com.android.dex.DexIndexOverflowException;
+import com.android.dx.io.CodeReader;
+import com.android.dx.io.Opcodes;
+import com.android.dx.io.instructions.DecodedInstruction;
+import com.android.dx.io.instructions.ShortArrayCodeOutput;
+
+final class InstructionTransformer {
+    private final CodeReader reader;
+
+    private DecodedInstruction[] mappedInstructions;
+    private int mappedAt;
+    private IndexMap indexMap;
+
+    public InstructionTransformer() {
+        this.reader = new CodeReader();
+        this.reader.setAllVisitors(new GenericVisitor());
+        this.reader.setStringVisitor(new StringVisitor());
+        this.reader.setTypeVisitor(new TypeVisitor());
+        this.reader.setFieldVisitor(new FieldVisitor());
+        this.reader.setMethodVisitor(new MethodVisitor());
+        this.reader.setMethodAndProtoVisitor(new MethodAndProtoVisitor());
+        this.reader.setCallSiteVisitor(new CallSiteVisitor());
+    }
+
+    public short[] transform(IndexMap indexMap, short[] encodedInstructions) throws DexException {
+        DecodedInstruction[] decodedInstructions =
+            DecodedInstruction.decodeAll(encodedInstructions);
+        int size = decodedInstructions.length;
+
+        this.indexMap = indexMap;
+        mappedInstructions = new DecodedInstruction[size];
+        mappedAt = 0;
+        reader.visitAll(decodedInstructions);
+
+        ShortArrayCodeOutput out = new ShortArrayCodeOutput(size);
+        for (DecodedInstruction instruction : mappedInstructions) {
+            if (instruction != null) {
+                instruction.encode(out);
+            }
+        }
+
+        this.indexMap = null;
+        return out.getArray();
+    }
+
+    private class GenericVisitor implements CodeReader.Visitor {
+        @Override
+        public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+            mappedInstructions[mappedAt++] = one;
+        }
+    }
+
+    private class StringVisitor implements CodeReader.Visitor {
+        @Override
+        public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+            int stringId = one.getIndex();
+            int mappedId = indexMap.adjustString(stringId);
+            boolean isJumbo = (one.getOpcode() == Opcodes.CONST_STRING_JUMBO);
+            jumboCheck(isJumbo, mappedId);
+            mappedInstructions[mappedAt++] = one.withIndex(mappedId);
+        }
+    }
+
+    private class FieldVisitor implements CodeReader.Visitor {
+        @Override
+        public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+            int fieldId = one.getIndex();
+            int mappedId = indexMap.adjustField(fieldId);
+            boolean isJumbo = (one.getOpcode() == Opcodes.CONST_STRING_JUMBO);
+            jumboCheck(isJumbo, mappedId);
+            mappedInstructions[mappedAt++] = one.withIndex(mappedId);
+        }
+    }
+
+    private class TypeVisitor implements CodeReader.Visitor {
+        @Override
+        public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+            int typeId = one.getIndex();
+            int mappedId = indexMap.adjustType(typeId);
+            boolean isJumbo = (one.getOpcode() == Opcodes.CONST_STRING_JUMBO);
+            jumboCheck(isJumbo, mappedId);
+            mappedInstructions[mappedAt++] = one.withIndex(mappedId);
+        }
+    }
+
+    private class MethodVisitor implements CodeReader.Visitor {
+        @Override
+        public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+            int methodId = one.getIndex();
+            int mappedId = indexMap.adjustMethod(methodId);
+            boolean isJumbo = (one.getOpcode() == Opcodes.CONST_STRING_JUMBO);
+            jumboCheck(isJumbo, mappedId);
+            mappedInstructions[mappedAt++] = one.withIndex(mappedId);
+        }
+    }
+
+    private class MethodAndProtoVisitor implements CodeReader.Visitor {
+        @Override
+        public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+            int methodId = one.getIndex();
+            int protoId = one.getProtoIndex();
+            mappedInstructions[mappedAt++] =
+                one.withProtoIndex(indexMap.adjustMethod(methodId), indexMap.adjustProto(protoId));
+        }
+    }
+
+    private class CallSiteVisitor implements CodeReader.Visitor {
+        @Override
+        public void visit(DecodedInstruction[] all, DecodedInstruction one) {
+            int callSiteId = one.getIndex();
+            int mappedCallSiteId = indexMap.adjustCallSite(callSiteId);
+            mappedInstructions[mappedAt++] = one.withIndex(mappedCallSiteId);
+        }
+    }
+
+    private static void jumboCheck(boolean isJumbo, int newIndex) {
+        if (!isJumbo && (newIndex > 0xffff)) {
+            throw new DexIndexOverflowException("Cannot merge new index " + newIndex +
+                                   " into a non-jumbo instruction!");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/merge/SortableType.java b/dx/src/com/android/dx/merge/SortableType.java
new file mode 100644
index 0000000..1f3fa74
--- /dev/null
+++ b/dx/src/com/android/dx/merge/SortableType.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+import com.android.dex.ClassDef;
+import com.android.dex.Dex;
+import com.android.dex.DexException;
+import java.util.Comparator;
+
+/**
+ * Name and structure of a type. Used to order types such that each type is
+ * preceded by its supertype and implemented interfaces.
+ */
+final class SortableType {
+    public static final Comparator<SortableType> NULLS_LAST_ORDER = new Comparator<SortableType>() {
+        @Override
+        public int compare(SortableType a, SortableType b) {
+            if (a == b) {
+                return 0;
+            }
+            if (b == null) {
+                return -1;
+            }
+            if (a == null) {
+                return 1;
+            }
+            if (a.depth != b.depth) {
+                return a.depth - b.depth;
+            }
+            return a.getTypeIndex() - b.getTypeIndex();
+        }
+    };
+
+    private final Dex dex;
+    private final IndexMap indexMap;
+    private final ClassDef classDef;
+    private int depth = -1;
+
+    public SortableType(Dex dex, IndexMap indexMap, ClassDef classDef) {
+        this.dex = dex;
+        this.indexMap = indexMap;
+        this.classDef = classDef;
+    }
+
+    public Dex getDex() {
+        return dex;
+    }
+
+    public IndexMap getIndexMap() {
+        return indexMap;
+    }
+
+    public ClassDef getClassDef() {
+        return classDef;
+    }
+
+    public int getTypeIndex() {
+        return classDef.getTypeIndex();
+    }
+
+    /**
+     * Assigns this type's depth if the depths of its supertype and implemented
+     * interfaces are known. Returns false if the depth couldn't be computed
+     * yet.
+     */
+    public boolean tryAssignDepth(SortableType[] types) {
+        int max;
+        if (classDef.getSupertypeIndex() == ClassDef.NO_INDEX) {
+            max = 0; // this is Object.class or an interface
+        } else if (classDef.getSupertypeIndex() == classDef.getTypeIndex()) {
+            // This is an invalid class extending itself.
+            throw new DexException("Class with type index " + classDef.getTypeIndex()
+                    + " extends itself");
+        } else {
+            SortableType sortableSupertype = types[classDef.getSupertypeIndex()];
+            if (sortableSupertype == null) {
+                max = 1; // unknown, so assume it's a root.
+            } else if (sortableSupertype.depth == -1) {
+                return false;
+            } else {
+                max = sortableSupertype.depth;
+            }
+        }
+
+        for (short interfaceIndex : classDef.getInterfaces()) {
+            SortableType implemented = types[interfaceIndex];
+            if (implemented == null) {
+                max = Math.max(max, 1); // unknown, so assume it's a root.
+            } else if (implemented.depth == -1) {
+                return false;
+            } else {
+                max = Math.max(max, implemented.depth);
+            }
+        }
+
+        depth = max + 1;
+        return true;
+    }
+
+    public boolean isDepthAssigned() {
+        return depth != -1;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/annotation/Annotation.java b/dx/src/com/android/dx/rop/annotation/Annotation.java
new file mode 100644
index 0000000..c2d9601
--- /dev/null
+++ b/dx/src/com/android/dx/rop/annotation/Annotation.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.annotation;
+
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.MutabilityControl;
+import com.android.dx.util.ToHuman;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.TreeMap;
+
+/**
+ * An annotation on an element of a class. Annotations have an
+ * associated type and additionally consist of a set of (name, value)
+ * pairs, where the names are unique.
+ */
+public final class Annotation extends MutabilityControl
+        implements Comparable<Annotation>, ToHuman {
+    /** {@code non-null;} type of the annotation */
+    private final CstType type;
+
+    /** {@code non-null;} the visibility of the annotation */
+    private final AnnotationVisibility visibility;
+
+    /** {@code non-null;} map from names to {@link NameValuePair} instances */
+    private final TreeMap<CstString, NameValuePair> elements;
+
+    /**
+     * Construct an instance. It initially contains no elements.
+     *
+     * @param type {@code non-null;} type of the annotation
+     * @param visibility {@code non-null;} the visibility of the annotation
+     */
+    public Annotation(CstType type, AnnotationVisibility visibility) {
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        if (visibility == null) {
+            throw new NullPointerException("visibility == null");
+        }
+
+        this.type = type;
+        this.visibility = visibility;
+        this.elements = new TreeMap<CstString, NameValuePair>();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof Annotation)) {
+            return false;
+        }
+
+        Annotation otherAnnotation = (Annotation) other;
+
+        if (! (type.equals(otherAnnotation.type)
+                        && (visibility == otherAnnotation.visibility))) {
+            return false;
+        }
+
+        return elements.equals(otherAnnotation.elements);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        int hash = type.hashCode();
+        hash = (hash * 31) + elements.hashCode();
+        hash = (hash * 31) + visibility.hashCode();
+        return hash;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(Annotation other) {
+        int result = type.compareTo(other.type);
+
+        if (result != 0) {
+            return result;
+        }
+
+        result = visibility.compareTo(other.visibility);
+
+        if (result != 0) {
+            return result;
+        }
+
+        Iterator<NameValuePair> thisIter = elements.values().iterator();
+        Iterator<NameValuePair> otherIter = other.elements.values().iterator();
+
+        while (thisIter.hasNext() && otherIter.hasNext()) {
+            NameValuePair thisOne = thisIter.next();
+            NameValuePair otherOne = otherIter.next();
+
+            result = thisOne.compareTo(otherOne);
+            if (result != 0) {
+                return result;
+            }
+        }
+
+        if (thisIter.hasNext()) {
+            return 1;
+        } else if (otherIter.hasNext()) {
+            return -1;
+        }
+
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append(visibility.toHuman());
+        sb.append("-annotation ");
+        sb.append(type.toHuman());
+        sb.append(" {");
+
+        boolean first = true;
+        for (NameValuePair pair : elements.values()) {
+            if (first) {
+                first = false;
+            } else {
+                sb.append(", ");
+            }
+            sb.append(pair.getName().toHuman());
+            sb.append(": ");
+            sb.append(pair.getValue().toHuman());
+        }
+
+        sb.append("}");
+        return sb.toString();
+    }
+
+    /**
+     * Gets the type of this instance.
+     *
+     * @return {@code non-null;} the type
+     */
+    public CstType getType() {
+        return type;
+    }
+
+    /**
+     * Gets the visibility of this instance.
+     *
+     * @return {@code non-null;} the visibility
+     */
+    public AnnotationVisibility getVisibility() {
+        return visibility;
+    }
+
+    /**
+     * Put an element into the set of (name, value) pairs for this instance.
+     * If there is a preexisting element with the same name, it will be
+     * replaced by this method.
+     *
+     * @param pair {@code non-null;} the (name, value) pair to place into this instance
+     */
+    public void put(NameValuePair pair) {
+        throwIfImmutable();
+
+        if (pair == null) {
+            throw new NullPointerException("pair == null");
+        }
+
+        elements.put(pair.getName(), pair);
+    }
+
+    /**
+     * Add an element to the set of (name, value) pairs for this instance.
+     * It is an error to call this method if there is a preexisting element
+     * with the same name.
+     *
+     * @param pair {@code non-null;} the (name, value) pair to add to this instance
+     */
+    public void add(NameValuePair pair) {
+        throwIfImmutable();
+
+        if (pair == null) {
+            throw new NullPointerException("pair == null");
+        }
+
+        CstString name = pair.getName();
+
+        if (elements.get(name) != null) {
+            throw new IllegalArgumentException("name already added: " + name);
+        }
+
+        elements.put(name, pair);
+    }
+
+    /**
+     * Gets the set of name-value pairs contained in this instance. The
+     * result is always unmodifiable.
+     *
+     * @return {@code non-null;} the set of name-value pairs
+     */
+    public Collection<NameValuePair> getNameValuePairs() {
+        return Collections.unmodifiableCollection(elements.values());
+    }
+}
diff --git a/dx/src/com/android/dx/rop/annotation/AnnotationVisibility.java b/dx/src/com/android/dx/rop/annotation/AnnotationVisibility.java
new file mode 100644
index 0000000..fab43be
--- /dev/null
+++ b/dx/src/com/android/dx/rop/annotation/AnnotationVisibility.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.annotation;
+
+import com.android.dx.util.ToHuman;
+
+/**
+ * Visibility scope of an annotation.
+ */
+public enum AnnotationVisibility implements ToHuman {
+    RUNTIME("runtime"),
+    BUILD("build"),
+    SYSTEM("system"),
+    EMBEDDED("embedded");
+
+    /** {@code non-null;} the human-oriented string representation */
+    private final String human;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param human {@code non-null;} the human-oriented string representation
+     */
+    private AnnotationVisibility(String human) {
+        this.human = human;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return human;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/annotation/Annotations.java b/dx/src/com/android/dx/rop/annotation/Annotations.java
new file mode 100644
index 0000000..17e22d1
--- /dev/null
+++ b/dx/src/com/android/dx/rop/annotation/Annotations.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.annotation;
+
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.util.MutabilityControl;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.TreeMap;
+
+/**
+ * List of {@link Annotation} instances.
+ */
+public final class Annotations extends MutabilityControl
+        implements Comparable<Annotations> {
+    /** {@code non-null;} immutable empty instance */
+    public static final Annotations EMPTY = new Annotations();
+
+    static {
+        EMPTY.setImmutable();
+    }
+
+    /** {@code non-null;} map from types to annotations */
+    private final TreeMap<CstType, Annotation> annotations;
+
+    /**
+     * Constructs an immutable instance which is the combination of the
+     * two given instances. The two instances must contain disjoint sets
+     * of types.
+     *
+     * @param a1 {@code non-null;} an instance
+     * @param a2 {@code non-null;} the other instance
+     * @return {@code non-null;} the combination
+     * @throws IllegalArgumentException thrown if there is a duplicate type
+     */
+    public static Annotations combine(Annotations a1, Annotations a2) {
+        Annotations result = new Annotations();
+
+        result.addAll(a1);
+        result.addAll(a2);
+        result.setImmutable();
+
+        return result;
+    }
+
+    /**
+     * Constructs an immutable instance which is the combination of the
+     * given instance with the given additional annotation. The latter's
+     * type must not already appear in the former.
+     *
+     * @param annotations {@code non-null;} the instance to augment
+     * @param annotation {@code non-null;} the additional annotation
+     * @return {@code non-null;} the combination
+     * @throws IllegalArgumentException thrown if there is a duplicate type
+     */
+    public static Annotations combine(Annotations annotations,
+            Annotation annotation) {
+        Annotations result = new Annotations();
+
+        result.addAll(annotations);
+        result.add(annotation);
+        result.setImmutable();
+
+        return result;
+    }
+
+    /**
+     * Constructs an empty instance.
+     */
+    public Annotations() {
+        annotations = new TreeMap<CstType, Annotation>();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return annotations.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof Annotations)) {
+            return false;
+        }
+
+        Annotations otherAnnotations = (Annotations) other;
+
+        return annotations.equals(otherAnnotations.annotations);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(Annotations other) {
+        Iterator<Annotation> thisIter = annotations.values().iterator();
+        Iterator<Annotation> otherIter = other.annotations.values().iterator();
+
+        while (thisIter.hasNext() && otherIter.hasNext()) {
+            Annotation thisOne = thisIter.next();
+            Annotation otherOne = otherIter.next();
+
+            int result = thisOne.compareTo(otherOne);
+            if (result != 0) {
+                return result;
+            }
+        }
+
+        if (thisIter.hasNext()) {
+            return 1;
+        } else if (otherIter.hasNext()) {
+            return -1;
+        }
+
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        boolean first = true;
+
+        sb.append("annotations{");
+
+        for (Annotation a : annotations.values()) {
+            if (first) {
+                first = false;
+            } else {
+                sb.append(", ");
+            }
+            sb.append(a.toHuman());
+        }
+
+        sb.append("}");
+        return sb.toString();
+    }
+
+    /**
+     * Gets the number of elements in this instance.
+     *
+     * @return {@code >= 0;} the size
+     */
+    public int size() {
+        return annotations.size();
+    }
+
+    /**
+     * Adds an element to this instance. There must not already be an
+     * element of the same type.
+     *
+     * @param annotation {@code non-null;} the element to add
+     * @throws IllegalArgumentException thrown if there is a duplicate type
+     */
+    public void add(Annotation annotation) {
+        throwIfImmutable();
+
+        if (annotation == null) {
+            throw new NullPointerException("annotation == null");
+        }
+
+        CstType type = annotation.getType();
+
+        if (annotations.containsKey(type)) {
+            throw new IllegalArgumentException("duplicate type: " +
+                    type.toHuman());
+        }
+
+        annotations.put(type, annotation);
+    }
+
+    /**
+     * Adds all of the elements of the given instance to this one. The
+     * instances must not have any duplicate types.
+     *
+     * @param toAdd {@code non-null;} the annotations to add
+     * @throws IllegalArgumentException thrown if there is a duplicate type
+     */
+    public void addAll(Annotations toAdd) {
+        throwIfImmutable();
+
+        if (toAdd == null) {
+            throw new NullPointerException("toAdd == null");
+        }
+
+        for (Annotation a : toAdd.annotations.values()) {
+            add(a);
+        }
+    }
+
+    /**
+     * Gets the set of annotations contained in this instance. The
+     * result is always unmodifiable.
+     *
+     * @return {@code non-null;} the set of annotations
+     */
+    public Collection<Annotation> getAnnotations() {
+        return Collections.unmodifiableCollection(annotations.values());
+    }
+}
diff --git a/dx/src/com/android/dx/rop/annotation/AnnotationsList.java b/dx/src/com/android/dx/rop/annotation/AnnotationsList.java
new file mode 100644
index 0000000..b97b385
--- /dev/null
+++ b/dx/src/com/android/dx/rop/annotation/AnnotationsList.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.annotation;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * List of {@link Annotations} instances.
+ */
+public final class AnnotationsList
+        extends FixedSizeList {
+    /** {@code non-null;} immutable empty instance */
+    public static final AnnotationsList EMPTY = new AnnotationsList(0);
+
+    /**
+     * Constructs an immutable instance which is the combination of
+     * the two given instances. The two instances must each have the
+     * same number of elements, and each pair of elements must contain
+     * disjoint sets of types.
+     *
+     * @param list1 {@code non-null;} an instance
+     * @param list2 {@code non-null;} the other instance
+     * @return {@code non-null;} the combination
+     */
+    public static AnnotationsList combine(AnnotationsList list1,
+            AnnotationsList list2) {
+        int size = list1.size();
+
+        if (size != list2.size()) {
+            throw new IllegalArgumentException("list1.size() != list2.size()");
+        }
+
+        AnnotationsList result = new AnnotationsList(size);
+
+        for (int i = 0; i < size; i++) {
+            Annotations a1 = list1.get(i);
+            Annotations a2 = list2.get(i);
+            result.set(i, Annotations.combine(a1, a2));
+        }
+
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     */
+    public AnnotationsList(int size) {
+        super(size);
+    }
+
+    /**
+     * Gets the element at the given index. It is an error to call
+     * this with the index for an element which was never set; if you
+     * do that, this will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @return {@code non-null;} element at that index
+     */
+    public Annotations get(int n) {
+        return (Annotations) get0(n);
+    }
+
+    /**
+     * Sets the element at the given index. The given element must be
+     * immutable.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param a {@code null-ok;} the element to set at {@code n}
+     */
+    public void set(int n, Annotations a) {
+        a.throwIfMutable();
+        set0(n, a);
+    }
+}
diff --git a/dx/src/com/android/dx/rop/annotation/NameValuePair.java b/dx/src/com/android/dx/rop/annotation/NameValuePair.java
new file mode 100644
index 0000000..c44dd06
--- /dev/null
+++ b/dx/src/com/android/dx/rop/annotation/NameValuePair.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.annotation;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstString;
+
+/**
+ * A (name, value) pair. These are used as the contents of an annotation.
+ */
+public final class NameValuePair implements Comparable<NameValuePair> {
+    /** {@code non-null;} the name */
+    private final CstString name;
+
+    /** {@code non-null;} the value */
+    private final Constant value;
+
+    /**
+     * Construct an instance.
+     *
+     * @param name {@code non-null;} the name
+     * @param value {@code non-null;} the value
+     */
+    public NameValuePair(CstString name, Constant value) {
+        if (name == null) {
+            throw new NullPointerException("name == null");
+        }
+
+        if (value == null) {
+            throw new NullPointerException("value == null");
+        }
+
+        this.name = name;
+        this.value = value;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return name.toHuman() + ":" + value;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return name.hashCode() * 31 + value.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof NameValuePair)) {
+            return false;
+        }
+
+        NameValuePair otherPair = (NameValuePair) other;
+
+        return name.equals(otherPair.name)
+            && value.equals(otherPair.value);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p>Instances of this class compare in name-major and value-minor
+     * order.</p>
+     */
+    @Override
+    public int compareTo(NameValuePair other) {
+        int result = name.compareTo(other.name);
+
+        if (result != 0) {
+            return result;
+        }
+
+        return value.compareTo(other.value);
+    }
+
+    /**
+     * Gets the name.
+     *
+     * @return {@code non-null;} the name
+     */
+    public CstString getName() {
+        return name;
+    }
+
+    /**
+     * Gets the value.
+     *
+     * @return {@code non-null;} the value
+     */
+    public Constant getValue() {
+        return value;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/AccessFlags.java b/dx/src/com/android/dx/rop/code/AccessFlags.java
new file mode 100644
index 0000000..018a01c
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/AccessFlags.java
@@ -0,0 +1,406 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.util.Hex;
+
+/**
+ * Constants used as "access flags" in various places in classes, and
+ * related utilities. Although, at the rop layer, flags are generally
+ * ignored, this is the layer of communication, and as such, this
+ * package is where these definitions belong. The flag definitions are
+ * identical to Java access flags, but {@code ACC_SUPER} isn't
+ * used at all in translated code, and {@code ACC_SYNCHRONIZED}
+ * is only used in a very limited way.
+ */
+public final class AccessFlags {
+    /** public member / class */
+    public static final int ACC_PUBLIC = 0x0001;
+
+    /** private member */
+    public static final int ACC_PRIVATE = 0x0002;
+
+    /** protected member */
+    public static final int ACC_PROTECTED = 0x0004;
+
+    /** static member */
+    public static final int ACC_STATIC = 0x0008;
+
+    /** final member / class */
+    public static final int ACC_FINAL = 0x0010;
+
+    /**
+     * synchronized method; only valid in dex files for {@code native}
+     * methods
+     */
+    public static final int ACC_SYNCHRONIZED = 0x0020;
+
+    /**
+     * class with new-style {@code invokespecial} for superclass
+     * method access
+     */
+    public static final int ACC_SUPER = 0x0020;
+
+    /** volatile field */
+    public static final int ACC_VOLATILE = 0x0040;
+
+    /** bridge method (generated) */
+    public static final int ACC_BRIDGE = 0x0040;
+
+    /** transient field */
+    public static final int ACC_TRANSIENT = 0x0080;
+
+    /** varargs method */
+    public static final int ACC_VARARGS = 0x0080;
+
+    /** native method */
+    public static final int ACC_NATIVE = 0x0100;
+
+    /** "class" is in fact an public static final interface */
+    public static final int ACC_INTERFACE = 0x0200;
+
+    /** abstract method / class */
+    public static final int ACC_ABSTRACT = 0x0400;
+
+    /**
+     * method with strict floating point ({@code strictfp})
+     * behavior
+     */
+    public static final int ACC_STRICT = 0x0800;
+
+    /** synthetic member */
+    public static final int ACC_SYNTHETIC = 0x1000;
+
+    /** class is an annotation type */
+    public static final int ACC_ANNOTATION = 0x2000;
+
+    /**
+     * class is an enumerated type; field is an element of an enumerated
+     * type
+     */
+    public static final int ACC_ENUM = 0x4000;
+
+    /** method is a constructor */
+    public static final int ACC_CONSTRUCTOR = 0x10000;
+
+    /**
+     * method was declared {@code synchronized}; has no effect on
+     * execution (other than inspecting this flag, per se)
+     */
+    public static final int ACC_DECLARED_SYNCHRONIZED = 0x20000;
+
+    /** flags defined on classes */
+    public static final int CLASS_FLAGS =
+        ACC_PUBLIC | ACC_FINAL | ACC_SUPER | ACC_INTERFACE | ACC_ABSTRACT |
+        ACC_SYNTHETIC | ACC_ANNOTATION | ACC_ENUM;
+
+    /** flags defined on inner classes */
+    public static final int INNER_CLASS_FLAGS =
+        ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL |
+        ACC_INTERFACE | ACC_ABSTRACT | ACC_SYNTHETIC | ACC_ANNOTATION |
+        ACC_ENUM;
+
+    /** flags defined on fields */
+    public static final int FIELD_FLAGS =
+        ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL |
+        ACC_VOLATILE | ACC_TRANSIENT | ACC_SYNTHETIC | ACC_ENUM;
+
+    /** flags defined on methods */
+    public static final int METHOD_FLAGS =
+        ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL |
+        ACC_SYNCHRONIZED | ACC_BRIDGE | ACC_VARARGS | ACC_NATIVE |
+        ACC_ABSTRACT | ACC_STRICT | ACC_SYNTHETIC | ACC_CONSTRUCTOR |
+        ACC_DECLARED_SYNCHRONIZED;
+
+    /** indicates conversion of class flags */
+    private static final int CONV_CLASS = 1;
+
+    /** indicates conversion of field flags */
+    private static final int CONV_FIELD = 2;
+
+    /** indicates conversion of method flags */
+    private static final int CONV_METHOD = 3;
+
+    /**
+     * This class is uninstantiable.
+     */
+    private AccessFlags() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Returns a human-oriented string representing the given access flags,
+     * as defined on classes (not fields or methods).
+     *
+     * @param flags the flags
+     * @return {@code non-null;} human-oriented string
+     */
+    public static String classString(int flags) {
+        return humanHelper(flags, CLASS_FLAGS, CONV_CLASS);
+    }
+
+    /**
+     * Returns a human-oriented string representing the given access flags,
+     * as defined on inner classes.
+     *
+     * @param flags the flags
+     * @return {@code non-null;} human-oriented string
+     */
+    public static String innerClassString(int flags) {
+        return humanHelper(flags, INNER_CLASS_FLAGS, CONV_CLASS);
+    }
+
+    /**
+     * Returns a human-oriented string representing the given access flags,
+     * as defined on fields (not classes or methods).
+     *
+     * @param flags the flags
+     * @return {@code non-null;} human-oriented string
+     */
+    public static String fieldString(int flags) {
+        return humanHelper(flags, FIELD_FLAGS, CONV_FIELD);
+    }
+
+    /**
+     * Returns a human-oriented string representing the given access flags,
+     * as defined on methods (not classes or fields).
+     *
+     * @param flags the flags
+     * @return {@code non-null;} human-oriented string
+     */
+    public static String methodString(int flags) {
+        return humanHelper(flags, METHOD_FLAGS, CONV_METHOD);
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_PUBLIC} is on in the given
+     * flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_PUBLIC} flag
+     */
+    public static boolean isPublic(int flags) {
+        return (flags & ACC_PUBLIC) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_PROTECTED} is on in the given
+     * flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_PROTECTED} flag
+     */
+    public static boolean isProtected(int flags) {
+        return (flags & ACC_PROTECTED) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_PRIVATE} is on in the given
+     * flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_PRIVATE} flag
+     */
+    public static boolean isPrivate(int flags) {
+        return (flags & ACC_PRIVATE) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_STATIC} is on in the given
+     * flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_STATIC} flag
+     */
+    public static boolean isStatic(int flags) {
+        return (flags & ACC_STATIC) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_CONSTRUCTOR} is on in
+     * the given flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_CONSTRUCTOR} flag
+     */
+    public static boolean isConstructor(int flags) {
+        return (flags & ACC_CONSTRUCTOR) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_INTERFACE} is on in
+     * the given flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_INTERFACE} flag
+     */
+    public static boolean isInterface(int flags) {
+        return (flags & ACC_INTERFACE) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_SYNCHRONIZED} is on in
+     * the given flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_SYNCHRONIZED} flag
+     */
+    public static boolean isSynchronized(int flags) {
+        return (flags & ACC_SYNCHRONIZED) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_ABSTRACT} is on in the given
+     * flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_ABSTRACT} flag
+     */
+    public static boolean isAbstract(int flags) {
+        return (flags & ACC_ABSTRACT) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_NATIVE} is on in the given
+     * flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_NATIVE} flag
+     */
+    public static boolean isNative(int flags) {
+        return (flags & ACC_NATIVE) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_ANNOTATION} is on in the given
+     * flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_ANNOTATION} flag
+     */
+    public static boolean isAnnotation(int flags) {
+        return (flags & ACC_ANNOTATION) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_DECLARED_SYNCHRONIZED} is
+     * on in the given flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_DECLARED_SYNCHRONIZED} flag
+     */
+    public static boolean isDeclaredSynchronized(int flags) {
+        return (flags & ACC_DECLARED_SYNCHRONIZED) != 0;
+    }
+
+    /**
+     * Returns whether the flag {@code ACC_ENUM} is on in the given flags.
+     *
+     * @param flags the flags to check
+     * @return the value of the {@code ACC_ENUM} flag
+     */
+    public static boolean isEnum(int flags) {
+        return (flags & ACC_ENUM) != 0;
+    }
+
+    /**
+     * Helper to return a human-oriented string representing the given
+     * access flags.
+     *
+     * @param flags the defined flags
+     * @param mask mask for the "defined" bits
+     * @param what what the flags represent (one of {@code CONV_*})
+     * @return {@code non-null;} human-oriented string
+     */
+    private static String humanHelper(int flags, int mask, int what) {
+        StringBuilder sb = new StringBuilder(80);
+        int extra = flags & ~mask;
+
+        flags &= mask;
+
+        if ((flags & ACC_PUBLIC) != 0) {
+            sb.append("|public");
+        }
+        if ((flags & ACC_PRIVATE) != 0) {
+            sb.append("|private");
+        }
+        if ((flags & ACC_PROTECTED) != 0) {
+            sb.append("|protected");
+        }
+        if ((flags & ACC_STATIC) != 0) {
+            sb.append("|static");
+        }
+        if ((flags & ACC_FINAL) != 0) {
+            sb.append("|final");
+        }
+        if ((flags & ACC_SYNCHRONIZED) != 0) {
+            if (what == CONV_CLASS) {
+                sb.append("|super");
+            } else {
+                sb.append("|synchronized");
+            }
+        }
+        if ((flags & ACC_VOLATILE) != 0) {
+            if (what == CONV_METHOD) {
+                sb.append("|bridge");
+            } else {
+                sb.append("|volatile");
+            }
+        }
+        if ((flags & ACC_TRANSIENT) != 0) {
+            if (what == CONV_METHOD) {
+                sb.append("|varargs");
+            } else {
+                sb.append("|transient");
+            }
+        }
+        if ((flags & ACC_NATIVE) != 0) {
+            sb.append("|native");
+        }
+        if ((flags & ACC_INTERFACE) != 0) {
+            sb.append("|interface");
+        }
+        if ((flags & ACC_ABSTRACT) != 0) {
+            sb.append("|abstract");
+        }
+        if ((flags & ACC_STRICT) != 0) {
+            sb.append("|strictfp");
+        }
+        if ((flags & ACC_SYNTHETIC) != 0) {
+            sb.append("|synthetic");
+        }
+        if ((flags & ACC_ANNOTATION) != 0) {
+            sb.append("|annotation");
+        }
+        if ((flags & ACC_ENUM) != 0) {
+            sb.append("|enum");
+        }
+        if ((flags & ACC_CONSTRUCTOR) != 0) {
+            sb.append("|constructor");
+        }
+        if ((flags & ACC_DECLARED_SYNCHRONIZED) != 0) {
+            sb.append("|declared_synchronized");
+        }
+
+        if ((extra != 0) || (sb.length() == 0)) {
+            sb.append('|');
+            sb.append(Hex.u2(extra));
+        }
+
+        return sb.substring(1);
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/BasicBlock.java b/dx/src/com/android/dx/rop/code/BasicBlock.java
new file mode 100644
index 0000000..daea41a
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/BasicBlock.java
@@ -0,0 +1,283 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+import com.android.dx.util.LabeledItem;
+
+/**
+ * Basic block of register-based instructions.
+ */
+public final class BasicBlock implements LabeledItem {
+    /** {@code >= 0;} target label for this block */
+    private final int label;
+
+    /** {@code non-null;} list of instructions in this block */
+    private final InsnList insns;
+
+    /**
+     * {@code non-null;} full list of successors that this block may
+     * branch to
+     */
+    private final IntList successors;
+
+    /**
+     * {@code >= -1;} the primary / standard-flow / "default" successor, or
+     * {@code -1} if this block has no successors (that is, it
+     * exits the function/method)
+     */
+    private final int primarySuccessor;
+
+    /**
+     * Constructs an instance. The predecessor set is set to {@code null}.
+     *
+     * @param label {@code >= 0;} target label for this block
+     * @param insns {@code non-null;} list of instructions in this block
+     * @param successors {@code non-null;} full list of successors that this
+     * block may branch to
+     * @param primarySuccessor {@code >= -1;} the primary / standard-flow /
+     * "default" successor, or {@code -1} if this block has no
+     * successors (that is, it exits the function/method or is an
+     * unconditional throw)
+     */
+    public BasicBlock(int label, InsnList insns, IntList successors,
+                      int primarySuccessor) {
+        if (label < 0) {
+            throw new IllegalArgumentException("label < 0");
+        }
+
+        try {
+            insns.throwIfMutable();
+        } catch (NullPointerException ex) {
+            // Elucidate exception.
+            throw new NullPointerException("insns == null");
+        }
+
+        int sz = insns.size();
+
+        if (sz == 0) {
+            throw new IllegalArgumentException("insns.size() == 0");
+        }
+
+        for (int i = sz - 2; i >= 0; i--) {
+            Rop one = insns.get(i).getOpcode();
+            if (one.getBranchingness() != Rop.BRANCH_NONE) {
+                throw new IllegalArgumentException("insns[" + i + "] is a " +
+                                                   "branch or can throw");
+            }
+        }
+
+        Insn lastInsn = insns.get(sz - 1);
+        if (lastInsn.getOpcode().getBranchingness() == Rop.BRANCH_NONE) {
+            throw new IllegalArgumentException("insns does not end with " +
+                                               "a branch or throwing " +
+                                               "instruction");
+        }
+
+        try {
+            successors.throwIfMutable();
+        } catch (NullPointerException ex) {
+            // Elucidate exception.
+            throw new NullPointerException("successors == null");
+        }
+
+        if (primarySuccessor < -1) {
+            throw new IllegalArgumentException("primarySuccessor < -1");
+        }
+
+        if (primarySuccessor >= 0 && !successors.contains(primarySuccessor)) {
+            throw new IllegalArgumentException(
+                    "primarySuccessor " + primarySuccessor + " not in successors " + successors);
+        }
+
+        this.label = label;
+        this.insns = insns;
+        this.successors = successors;
+        this.primarySuccessor = primarySuccessor;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Instances of this class compare by identity. That is,
+     * {@code x.equals(y)} is only true if {@code x == y}.
+     */
+    @Override
+    public boolean equals(Object other) {
+        return (this == other);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Return the identity hashcode of this instance. This is proper,
+     * since instances of this class compare by identity (see {@link #equals}).
+     */
+    @Override
+    public int hashCode() {
+        return System.identityHashCode(this);
+    }
+
+    /**
+     * Gets the target label of this block.
+     *
+     * @return {@code >= 0;} the label
+     */
+    @Override
+    public int getLabel() {
+        return label;
+    }
+
+    /**
+     * Gets the list of instructions inside this block.
+     *
+     * @return {@code non-null;} the instruction list
+     */
+    public InsnList getInsns() {
+        return insns;
+    }
+
+    /**
+     * Gets the list of successors that this block may branch to.
+     *
+     * @return {@code non-null;} the successors list
+     */
+    public IntList getSuccessors() {
+        return successors;
+    }
+
+    /**
+     * Gets the primary successor of this block.
+     *
+     * @return {@code >= -1;} the primary successor, or {@code -1} if this
+     * block has no successors at all
+     */
+    public int getPrimarySuccessor() {
+        return primarySuccessor;
+    }
+
+    /**
+     * Gets the secondary successor of this block. It is only valid to call
+     * this method on blocks that have exactly two successors.
+     *
+     * @return {@code >= 0;} the secondary successor
+     */
+    public int getSecondarySuccessor() {
+        if (successors.size() != 2) {
+            throw new UnsupportedOperationException(
+                    "block doesn't have exactly two successors");
+        }
+
+        int succ = successors.get(0);
+        if (succ == primarySuccessor) {
+            succ = successors.get(1);
+        }
+
+        return succ;
+    }
+
+    /**
+     * Gets the first instruction of this block. This is just a
+     * convenient shorthand for {@code getInsns().get(0)}.
+     *
+     * @return {@code non-null;} the first instruction
+     */
+    public Insn getFirstInsn() {
+        return insns.get(0);
+    }
+
+    /**
+     * Gets the last instruction of this block. This is just a
+     * convenient shorthand for {@code getInsns().getLast()}.
+     *
+     * @return {@code non-null;} the last instruction
+     */
+    public Insn getLastInsn() {
+        return insns.getLast();
+    }
+
+    /**
+     * Returns whether this block might throw an exception. This is
+     * just a convenient shorthand for {@code getLastInsn().canThrow()}.
+     *
+     * @return {@code true} iff this block might throw an
+     * exception
+     */
+    public boolean canThrow() {
+        return insns.getLast().canThrow();
+    }
+
+    /**
+     * Returns whether this block has any associated exception handlers.
+     * This is just a shorthand for inspecting the last instruction in
+     * the block to see if it could throw, and if so, whether it in fact
+     * has any associated handlers.
+     *
+     * @return {@code true} iff this block has any associated
+     * exception handlers
+     */
+    public boolean hasExceptionHandlers() {
+        Insn lastInsn = insns.getLast();
+        return lastInsn.getCatches().size() != 0;
+    }
+
+    /**
+     * Returns the exception handler types associated with this block,
+     * if any. This is just a shorthand for inspecting the last
+     * instruction in the block to see if it could throw, and if so,
+     * grabbing the catch list out of it. If not, this returns an
+     * empty list (not {@code null}).
+     *
+     * @return {@code non-null;} the exception handler types associated with
+     * this block
+     */
+    public TypeList getExceptionHandlerTypes() {
+        Insn lastInsn = insns.getLast();
+        return lastInsn.getCatches();
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * the registers in each instruction are offset by the given
+     * amount.
+     *
+     * @param delta the amount to offset register numbers by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public BasicBlock withRegisterOffset(int delta) {
+        return new BasicBlock(label, insns.withRegisterOffset(delta),
+                              successors, primarySuccessor);
+    }
+
+    @Override
+    public String toString() {
+        return '{' + Hex.u2(label) + '}';
+    }
+
+    /**
+     * BasicBlock visitor interface
+     */
+    public interface Visitor {
+        /**
+         * Visits a basic block
+         * @param b block visited
+         */
+        public void visitBlock (BasicBlock b);
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/BasicBlockList.java b/dx/src/com/android/dx/rop/code/BasicBlockList.java
new file mode 100644
index 0000000..816e67f
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/BasicBlockList.java
@@ -0,0 +1,408 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+import com.android.dx.util.LabeledList;
+
+/**
+ * List of {@link BasicBlock} instances.
+ */
+public final class BasicBlockList extends LabeledList {
+    /**
+     * {@code >= -1;} the count of registers required by this method or
+     * {@code -1} if not yet calculated
+     */
+    private int regCount;
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null},
+     * and the first-block label is initially {@code -1}.
+     *
+     * @param size the size of the list
+     */
+    public BasicBlockList(int size) {
+        super(size);
+
+        regCount = -1;
+    }
+
+    /**
+     * Constructs a mutable copy for {@code getMutableCopy()}.
+     *
+     * @param old block to copy
+     */
+    private BasicBlockList(BasicBlockList old) {
+        super(old);
+        regCount = old.regCount;
+    }
+
+
+    /**
+     * Gets the element at the given index. It is an error to call
+     * this with the index for an element which was never set; if you
+     * do that, this will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @return {@code non-null;} element at that index
+     */
+    public BasicBlock get(int n) {
+        return (BasicBlock) get0(n);
+    }
+
+    /**
+     * Sets the basic block at the given index.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param bb {@code null-ok;} the element to set at {@code n}
+     */
+    public void set(int n, BasicBlock bb) {
+        super.set(n, bb);
+
+        // Reset regCount, since it will need to be recalculated.
+        regCount = -1;
+    }
+
+    /**
+     * Returns how many registers this method requires. This is simply
+     * the maximum of register-number-plus-category referred to by this
+     * instance's instructions (indirectly through {@link BasicBlock}
+     * instances).
+     *
+     * @return {@code >= 0;} the register count
+     */
+    public int getRegCount() {
+        if (regCount == -1) {
+            RegCountVisitor visitor = new RegCountVisitor();
+            forEachInsn(visitor);
+            regCount = visitor.getRegCount();
+        }
+
+        return regCount;
+    }
+
+    /**
+     * Gets the total instruction count for this instance. This is the
+     * sum of the instruction counts of each block.
+     *
+     * @return {@code >= 0;} the total instruction count
+     */
+    public int getInstructionCount() {
+        int sz = size();
+        int result = 0;
+
+        for (int i = 0; i < sz; i++) {
+            BasicBlock one = (BasicBlock) getOrNull0(i);
+            if (one != null) {
+                result += one.getInsns().size();
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the total instruction count for this instance, ignoring
+     * mark-local instructions which are not actually emitted.
+     *
+     * @return {@code >= 0;} the total instruction count
+     */
+    public int getEffectiveInstructionCount() {
+        int sz = size();
+        int result = 0;
+
+        for (int i = 0; i < sz; i++) {
+            BasicBlock one = (BasicBlock) getOrNull0(i);
+            if (one != null) {
+                InsnList insns = one.getInsns();
+                int insnsSz = insns.size();
+
+                for (int j = 0; j < insnsSz; j++) {
+                    Insn insn = insns.get(j);
+
+                    if (insn.getOpcode().getOpcode() != RegOps.MARK_LOCAL) {
+                        result++;
+                    }
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the first block in the list with the given label, if any.
+     *
+     * @param label {@code label >= 0;} the label to look for
+     * @return {@code non-null;} the so-labelled block
+     * @throws IllegalArgumentException thrown if the label isn't found
+     */
+    public BasicBlock labelToBlock(int label) {
+        int idx = indexOfLabel(label);
+
+        if (idx < 0) {
+            throw new IllegalArgumentException("no such label: "
+                    + Hex.u2(label));
+        }
+
+        return get(idx);
+    }
+
+    /**
+     * Visits each instruction of each block in the list, in order.
+     *
+     * @param visitor {@code non-null;} visitor to use
+     */
+    public void forEachInsn(Insn.Visitor visitor) {
+        int sz = size();
+
+        for (int i = 0; i < sz; i++) {
+            BasicBlock one = get(i);
+            InsnList insns = one.getInsns();
+            insns.forEach(visitor);
+        }
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * the registers in each instruction are offset by the given
+     * amount. Mutability of the result is inherited from the
+     * original.
+     *
+     * @param delta the amount to offset register numbers by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public BasicBlockList withRegisterOffset(int delta) {
+        int sz = size();
+        BasicBlockList result = new BasicBlockList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            BasicBlock one = (BasicBlock) get0(i);
+            if (one != null) {
+                result.set(i, one.withRegisterOffset(delta));
+            }
+        }
+
+        if (isImmutable()) {
+            result.setImmutable();
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns a mutable copy of this list.
+     *
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public BasicBlockList getMutableCopy() {
+        return new BasicBlockList(this);
+    }
+
+    /**
+     * Gets the preferred successor for the given block. If the block
+     * only has one successor, then that is the preferred successor.
+     * Otherwise, if the block has a primay successor, then that is
+     * the preferred successor. If the block has no successors, then
+     * this returns {@code null}.
+     *
+     * @param block {@code non-null;} the block in question
+     * @return {@code null-ok;} the preferred successor, if any
+     */
+    public BasicBlock preferredSuccessorOf(BasicBlock block) {
+        int primarySuccessor = block.getPrimarySuccessor();
+        IntList successors = block.getSuccessors();
+        int succSize = successors.size();
+
+        switch (succSize) {
+            case 0: {
+                return null;
+            }
+            case 1: {
+                return labelToBlock(successors.get(0));
+            }
+        }
+
+        if (primarySuccessor != -1) {
+            return labelToBlock(primarySuccessor);
+        } else {
+            return labelToBlock(successors.get(0));
+        }
+    }
+
+    /**
+     * Compares the catches of two blocks for equality. This includes
+     * both the catch types and target labels.
+     *
+     * @param block1 {@code non-null;} one block to compare
+     * @param block2 {@code non-null;} the other block to compare
+     * @return {@code true} if the two blocks' non-primary successors
+     * are identical
+     */
+    public boolean catchesEqual(BasicBlock block1, BasicBlock block2) {
+        TypeList catches1 = block1.getExceptionHandlerTypes();
+        TypeList catches2 = block2.getExceptionHandlerTypes();
+
+        if (!StdTypeList.equalContents(catches1, catches2)) {
+            return false;
+        }
+
+        IntList succ1 = block1.getSuccessors();
+        IntList succ2 = block2.getSuccessors();
+        int size = succ1.size(); // Both are guaranteed to be the same size.
+
+        int primary1 = block1.getPrimarySuccessor();
+        int primary2 = block2.getPrimarySuccessor();
+
+        if (((primary1 == -1) || (primary2 == -1))
+                && (primary1 != primary2)) {
+            /*
+             * For the current purpose, both blocks in question must
+             * either both have a primary or both not have a primary to
+             * be considered equal, and it turns out here that that's not
+             * the case.
+             */
+            return false;
+        }
+
+        for (int i = 0; i < size; i++) {
+            int label1 = succ1.get(i);
+            int label2 = succ2.get(i);
+
+            if (label1 == primary1) {
+                /*
+                 * It should be the case that block2's primary is at the
+                 * same index. If not, we consider the blocks unequal for
+                 * the current purpose.
+                 */
+                if (label2 != primary2) {
+                    return false;
+                }
+                continue;
+            }
+
+            if (label1 != label2) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Instruction visitor class for counting registers used.
+     */
+    private static class RegCountVisitor
+            implements Insn.Visitor {
+        /** {@code >= 0;} register count in-progress */
+        private int regCount;
+
+        /**
+         * Constructs an instance.
+         */
+        public RegCountVisitor() {
+            regCount = 0;
+        }
+
+        /**
+         * Gets the register count.
+         *
+         * @return {@code >= 0;} the count
+         */
+        public int getRegCount() {
+            return regCount;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitPlainInsn(PlainInsn insn) {
+            visit(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitPlainCstInsn(PlainCstInsn insn) {
+            visit(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitSwitchInsn(SwitchInsn insn) {
+            visit(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitThrowingCstInsn(ThrowingCstInsn insn) {
+            visit(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitThrowingInsn(ThrowingInsn insn) {
+            visit(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitFillArrayDataInsn(FillArrayDataInsn insn) {
+            visit(insn);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitInvokePolymorphicInsn(InvokePolymorphicInsn insn) {
+            visit(insn);
+        }
+
+        /**
+         * Helper for all the {@code visit*} methods.
+         *
+         * @param insn {@code non-null;} instruction being visited
+         */
+        private void visit(Insn insn) {
+            RegisterSpec result = insn.getResult();
+
+            if (result != null) {
+                processReg(result);
+            }
+
+            RegisterSpecList sources = insn.getSources();
+            int sz = sources.size();
+
+            for (int i = 0; i < sz; i++) {
+                processReg(sources.get(i));
+            }
+        }
+
+        /**
+         * Processes the given register spec.
+         *
+         * @param spec {@code non-null;} the register spec
+         */
+        private void processReg(RegisterSpec spec) {
+            int reg = spec.getNextReg();
+
+            if (reg > regCount) {
+                regCount = reg;
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/ConservativeTranslationAdvice.java b/dx/src/com/android/dx/rop/code/ConservativeTranslationAdvice.java
new file mode 100644
index 0000000..5269ef9
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/ConservativeTranslationAdvice.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+/**
+ * Implementation of {@link TranslationAdvice} which conservatively answers
+ * {@code false} to all methods.
+ */
+public final class ConservativeTranslationAdvice
+        implements TranslationAdvice {
+    /** {@code non-null;} standard instance of this class */
+    public static final ConservativeTranslationAdvice THE_ONE =
+        new ConservativeTranslationAdvice();
+
+    /**
+     * This class is not publicly instantiable. Use {@link #THE_ONE}.
+     */
+    private ConservativeTranslationAdvice() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean hasConstantOperation(Rop opcode,
+            RegisterSpec sourceA, RegisterSpec sourceB) {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean requiresSourcesInOrder(Rop opcode,
+            RegisterSpecList sources) {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMaxOptimalRegisterCount() {
+        return Integer.MAX_VALUE;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/CstInsn.java b/dx/src/com/android/dx/rop/code/CstInsn.java
new file mode 100644
index 0000000..d7de2f4
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/CstInsn.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.Constant;
+
+/**
+ * Instruction which contains an explicit reference to a constant.
+ */
+public abstract class CstInsn
+        extends Insn {
+    /** {@code non-null;} the constant */
+    private final Constant cst;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param result {@code null-ok;} spec for the result, if any
+     * @param sources {@code non-null;} specs for all the sources
+     * @param cst {@code non-null;} constant
+     */
+    public CstInsn(Rop opcode, SourcePosition position, RegisterSpec result,
+                   RegisterSpecList sources, Constant cst) {
+        super(opcode, position, result, sources);
+
+        if (cst == null) {
+            throw new NullPointerException("cst == null");
+        }
+
+        this.cst = cst;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String getInlineString() {
+        return cst.toHuman();
+    }
+
+    /**
+     * Gets the constant.
+     *
+     * @return {@code non-null;} the constant
+     */
+    public Constant getConstant() {
+        return cst;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean contentEquals(Insn b) {
+        /*
+         * The cast (CstInsn)b below should always succeed since
+         * Insn.contentEquals compares classes of this and b.
+         */
+        return super.contentEquals(b)
+                && cst.equals(((CstInsn)b).getConstant());
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/DexTranslationAdvice.java b/dx/src/com/android/dx/rop/code/DexTranslationAdvice.java
new file mode 100644
index 0000000..54533ce
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/DexTranslationAdvice.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.type.Type;
+
+/**
+ * Implementation of {@link TranslationAdvice} which represents what
+ * the dex format will be able to represent.
+ */
+public final class DexTranslationAdvice
+        implements TranslationAdvice {
+    /** {@code non-null;} standard instance of this class */
+    public static final DexTranslationAdvice THE_ONE =
+        new DexTranslationAdvice();
+
+    /** debug advice for disabling invoke-range optimization */
+    public static final DexTranslationAdvice NO_SOURCES_IN_ORDER =
+        new DexTranslationAdvice(true);
+
+    /**
+     * The minimum source width, in register units, for an invoke
+     * instruction that requires its sources to be in order and contiguous.
+     */
+    private static final int MIN_INVOKE_IN_ORDER = 6;
+
+    /** when true: always returns false for requiresSourcesInOrder */
+    private final boolean disableSourcesInOrder;
+
+    /**
+     * This class is not publicly instantiable. Use {@link #THE_ONE}.
+     */
+    private DexTranslationAdvice() {
+        disableSourcesInOrder = false;
+    }
+
+    private DexTranslationAdvice(boolean disableInvokeRange) {
+        this.disableSourcesInOrder = disableInvokeRange;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean hasConstantOperation(Rop opcode,
+            RegisterSpec sourceA, RegisterSpec sourceB) {
+        if (sourceA.getType() != Type.INT) {
+            return false;
+        }
+
+        // Return false if second source isn't a constant
+        if (! (sourceB.getTypeBearer() instanceof CstInteger)) {
+            // Except for rsub-int (reverse sub) where first source is constant
+            if (sourceA.getTypeBearer() instanceof CstInteger &&
+                    opcode.getOpcode() == RegOps.SUB) {
+                CstInteger cst = (CstInteger) sourceA.getTypeBearer();
+                return cst.fitsIn16Bits();
+            } else {
+                return false;
+            }
+        }
+
+        CstInteger cst = (CstInteger) sourceB.getTypeBearer();
+
+        switch (opcode.getOpcode()) {
+            // These have 8 and 16 bit cst representations
+            case RegOps.REM:
+            case RegOps.ADD:
+            case RegOps.MUL:
+            case RegOps.DIV:
+            case RegOps.AND:
+            case RegOps.OR:
+            case RegOps.XOR:
+                return cst.fitsIn16Bits();
+            // These only have 8 bit cst reps
+            case RegOps.SHL:
+            case RegOps.SHR:
+            case RegOps.USHR:
+                return cst.fitsIn8Bits();
+            // No sub-const insn, so check if equivalent add-const fits
+            case RegOps.SUB:
+                CstInteger cst2 = CstInteger.make(-cst.getValue());
+                return cst2.fitsIn16Bits();
+            default:
+                return false;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean requiresSourcesInOrder(Rop opcode,
+            RegisterSpecList sources) {
+
+        return !disableSourcesInOrder && opcode.isCallLike()
+                && totalRopWidth(sources) >= MIN_INVOKE_IN_ORDER;
+    }
+
+    /**
+     * Calculates the total rop width of the list of SSA registers
+     *
+     * @param sources {@code non-null;} list of SSA registers
+     * @return {@code >= 0;} rop-form width in register units
+     */
+    private int totalRopWidth(RegisterSpecList sources) {
+        int sz = sources.size();
+        int total = 0;
+
+        for (int i = 0; i < sz; i++) {
+            total += sources.get(i).getCategory();
+        }
+
+        return total;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMaxOptimalRegisterCount() {
+        return 16;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/Exceptions.java b/dx/src/com/android/dx/rop/code/Exceptions.java
new file mode 100644
index 0000000..b206f86
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/Exceptions.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+
+/**
+ * Common exception types.
+ */
+public final class Exceptions {
+    /** {@code non-null;} the type {@code java.lang.ArithmeticException} */
+    public static final Type TYPE_ArithmeticException =
+        Type.intern("Ljava/lang/ArithmeticException;");
+
+    /**
+     * {@code non-null;} the type
+     * {@code java.lang.ArrayIndexOutOfBoundsException}
+     */
+    public static final Type TYPE_ArrayIndexOutOfBoundsException =
+        Type.intern("Ljava/lang/ArrayIndexOutOfBoundsException;");
+
+    /** {@code non-null;} the type {@code java.lang.ArrayStoreException} */
+    public static final Type TYPE_ArrayStoreException =
+        Type.intern("Ljava/lang/ArrayStoreException;");
+
+    /** {@code non-null;} the type {@code java.lang.ClassCastException} */
+    public static final Type TYPE_ClassCastException =
+        Type.intern("Ljava/lang/ClassCastException;");
+
+    /** {@code non-null;} the type {@code java.lang.Error} */
+    public static final Type TYPE_Error = Type.intern("Ljava/lang/Error;");
+
+    /**
+     * {@code non-null;} the type
+     * {@code java.lang.IllegalMonitorStateException}
+     */
+    public static final Type TYPE_IllegalMonitorStateException =
+        Type.intern("Ljava/lang/IllegalMonitorStateException;");
+
+    /** {@code non-null;} the type {@code java.lang.NegativeArraySizeException} */
+    public static final Type TYPE_NegativeArraySizeException =
+        Type.intern("Ljava/lang/NegativeArraySizeException;");
+
+    /** {@code non-null;} the type {@code java.lang.NullPointerException} */
+    public static final Type TYPE_NullPointerException =
+        Type.intern("Ljava/lang/NullPointerException;");
+
+    /** {@code non-null;} the list {@code [java.lang.Error]} */
+    public static final StdTypeList LIST_Error = StdTypeList.make(TYPE_Error);
+
+    /**
+     * {@code non-null;} the list {@code [java.lang.Error,
+     * java.lang.ArithmeticException] }
+     */
+    public static final StdTypeList LIST_Error_ArithmeticException =
+        StdTypeList.make(TYPE_Error, TYPE_ArithmeticException);
+
+    /**
+     * {@code non-null;} the list {@code [java.lang.Error,
+     * java.lang.ClassCastException]}
+     */
+    public static final StdTypeList LIST_Error_ClassCastException =
+        StdTypeList.make(TYPE_Error, TYPE_ClassCastException);
+
+    /**
+     * {@code non-null;} the list {@code [java.lang.Error,
+     * java.lang.NegativeArraySizeException]}
+     */
+    public static final StdTypeList LIST_Error_NegativeArraySizeException =
+        StdTypeList.make(TYPE_Error, TYPE_NegativeArraySizeException);
+
+    /**
+     * {@code non-null;} the list {@code [java.lang.Error,
+     * java.lang.NullPointerException]}
+     */
+    public static final StdTypeList LIST_Error_NullPointerException =
+        StdTypeList.make(TYPE_Error, TYPE_NullPointerException);
+
+    /**
+     * {@code non-null;} the list {@code [java.lang.Error,
+     * java.lang.NullPointerException,
+     * java.lang.ArrayIndexOutOfBoundsException]}
+     */
+    public static final StdTypeList LIST_Error_Null_ArrayIndexOutOfBounds =
+        StdTypeList.make(TYPE_Error,
+                      TYPE_NullPointerException,
+                      TYPE_ArrayIndexOutOfBoundsException);
+
+    /**
+     * {@code non-null;} the list {@code [java.lang.Error,
+     * java.lang.NullPointerException,
+     * java.lang.ArrayIndexOutOfBoundsException,
+     * java.lang.ArrayStoreException]}
+     */
+    public static final StdTypeList LIST_Error_Null_ArrayIndex_ArrayStore =
+        StdTypeList.make(TYPE_Error,
+                      TYPE_NullPointerException,
+                      TYPE_ArrayIndexOutOfBoundsException,
+                      TYPE_ArrayStoreException);
+
+    /**
+     * {@code non-null;} the list {@code [java.lang.Error,
+     * java.lang.NullPointerException,
+     * java.lang.IllegalMonitorStateException]}
+     */
+    public static final StdTypeList
+        LIST_Error_Null_IllegalMonitorStateException =
+        StdTypeList.make(TYPE_Error,
+                      TYPE_NullPointerException,
+                      TYPE_IllegalMonitorStateException);
+
+    /**
+     * This class is uninstantiable.
+     */
+    private Exceptions() {
+        // This space intentionally left blank.
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/FillArrayDataInsn.java b/dx/src/com/android/dx/rop/code/FillArrayDataInsn.java
new file mode 100644
index 0000000..1f233ec
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/FillArrayDataInsn.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import java.util.ArrayList;
+
+/**
+ * Instruction which fills a newly created array with a predefined list of
+ * constant values.
+ */
+public final class FillArrayDataInsn
+        extends Insn {
+
+    /** non-null: initial values to fill the newly created array */
+    private final ArrayList<Constant> initValues;
+
+    /**
+     * non-null: type of the array. Will be used to determine the width of
+     * elements in the array-data table.
+     */
+    private final Constant arrayType;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param sources {@code non-null;} specs for all the sources
+     * @param initValues {@code non-null;} list of initial values to fill the array
+     * @param cst {@code non-null;} type of the new array
+     */
+    public FillArrayDataInsn(Rop opcode, SourcePosition position,
+                             RegisterSpecList sources,
+                             ArrayList<Constant> initValues,
+                             Constant cst) {
+        super(opcode, position, null, sources);
+
+        if (opcode.getBranchingness() != Rop.BRANCH_NONE) {
+            throw new IllegalArgumentException("opcode with invalid branchingness: " + opcode.getBranchingness());
+        }
+
+        this.initValues = initValues;
+        this.arrayType = cst;
+    }
+
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList getCatches() {
+        return StdTypeList.EMPTY;
+    }
+
+    /**
+     * Return the list of init values
+     * @return {@code non-null;} list of init values
+     */
+    public ArrayList<Constant> getInitValues() {
+        return initValues;
+    }
+
+    /**
+     * Return the type of the newly created array
+     * @return {@code non-null;} array type
+     */
+    public Constant getConstant() {
+        return arrayType;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(Visitor visitor) {
+        visitor.visitFillArrayDataInsn(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withAddedCatch(Type type) {
+        throw new  UnsupportedOperationException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withRegisterOffset(int delta) {
+        return new FillArrayDataInsn(getOpcode(), getPosition(),
+                                     getSources().withOffset(delta),
+                                     initValues, arrayType);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withNewRegisters(RegisterSpec result,
+            RegisterSpecList sources) {
+
+        return new FillArrayDataInsn(getOpcode(), getPosition(),
+                                     sources, initValues, arrayType);
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/Insn.java b/dx/src/com/android/dx/rop/code/Insn.java
new file mode 100644
index 0000000..d08d58f
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/Insn.java
@@ -0,0 +1,476 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.ToHuman;
+
+/**
+ * A register-based instruction. An instruction is the combination of
+ * an opcode (which specifies operation and source/result types), a
+ * list of actual sources and result registers/values, and additional
+ * information.
+ */
+public abstract class Insn implements ToHuman {
+    /** {@code non-null;} opcode */
+    private final Rop opcode;
+
+    /** {@code non-null;} source position */
+    private final SourcePosition position;
+
+    /** {@code null-ok;} spec for the result of this instruction, if any */
+    private final RegisterSpec result;
+
+    /** {@code non-null;} specs for all the sources of this instruction */
+    private final RegisterSpecList sources;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param result {@code null-ok;} spec for the result, if any
+     * @param sources {@code non-null;} specs for all the sources
+     */
+    public Insn(Rop opcode, SourcePosition position, RegisterSpec result,
+                RegisterSpecList sources) {
+        if (opcode == null) {
+            throw new NullPointerException("opcode == null");
+        }
+
+        if (position == null) {
+            throw new NullPointerException("position == null");
+        }
+
+        if (sources == null) {
+            throw new NullPointerException("sources == null");
+        }
+
+        this.opcode = opcode;
+        this.position = position;
+        this.result = result;
+        this.sources = sources;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Instances of this class compare by identity. That is,
+     * {@code x.equals(y)} is only true if {@code x == y}.
+     */
+    @Override
+    public final boolean equals(Object other) {
+        return (this == other);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * This implementation returns the identity hashcode of this
+     * instance. This is proper, since instances of this class compare
+     * by identity (see {@link #equals}).
+     */
+    @Override
+    public final int hashCode() {
+        return System.identityHashCode(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return toStringWithInline(getInlineString());
+    }
+
+    /**
+     * Gets a human-oriented (and slightly lossy) string for this instance.
+     *
+     * @return {@code non-null;} the human string form
+     */
+    @Override
+    public String toHuman() {
+        return toHumanWithInline(getInlineString());
+    }
+
+    /**
+     * Gets an "inline" string portion for toHuman(), if available. This
+     * is the portion that appears after the Rop opcode
+     *
+     * @return {@code null-ok;} if non-null, the inline text for toHuman()
+     */
+    public String getInlineString() {
+        return null;
+    }
+
+    /**
+     * Gets the opcode.
+     *
+     * @return {@code non-null;} the opcode
+     */
+    public final Rop getOpcode() {
+        return opcode;
+    }
+
+    /**
+     * Gets the source position.
+     *
+     * @return {@code non-null;} the source position
+     */
+    public final SourcePosition getPosition() {
+        return position;
+    }
+
+    /**
+     * Gets the result spec, if any. A return value of {@code null}
+     * means this instruction returns nothing.
+     *
+     * @return {@code null-ok;} the result spec, if any
+     */
+    public final RegisterSpec getResult() {
+        return result;
+    }
+
+    /**
+     * Gets the spec of a local variable assignment that occurs at this
+     * instruction, or null if no local variable assignment occurs. This
+     * may be the result register, or for {@code mark-local} insns
+     * it may be the source.
+     *
+     * @return {@code null-ok;} a named register spec or null
+     */
+    public final RegisterSpec getLocalAssignment() {
+        RegisterSpec assignment;
+        if (opcode.getOpcode() == RegOps.MARK_LOCAL) {
+            assignment = sources.get(0);
+        } else {
+            assignment = result;
+        }
+
+        if (assignment == null) {
+            return null;
+        }
+
+        LocalItem localItem = assignment.getLocalItem();
+
+        if (localItem == null) {
+            return null;
+        }
+
+        return assignment;
+    }
+
+    /**
+     * Gets the source specs.
+     *
+     * @return {@code non-null;} the source specs
+     */
+    public final RegisterSpecList getSources() {
+        return sources;
+    }
+
+    /**
+     * Gets whether this instruction can possibly throw an exception. This
+     * is just a convenient wrapper for {@code getOpcode().canThrow()}.
+     *
+     * @return {@code true} iff this instruction can possibly throw
+     */
+    public final boolean canThrow() {
+        return opcode.canThrow();
+    }
+
+    /**
+     * Gets the list of possibly-caught exceptions. This returns {@link
+     * StdTypeList#EMPTY} if this instruction has no handlers,
+     * which can be <i>either</i> if this instruction can't possibly
+     * throw or if it merely doesn't handle any of its possible
+     * exceptions. To determine whether this instruction can throw,
+     * use {@link #canThrow}.
+     *
+     * @return {@code non-null;} the catches list
+     */
+    public abstract TypeList getCatches();
+
+    /**
+     * Calls the appropriate method on the given visitor, depending on the
+     * class of this instance. Subclasses must override this.
+     *
+     * @param visitor {@code non-null;} the visitor to call on
+     */
+    public abstract void accept(Visitor visitor);
+
+    /**
+     * Returns an instance that is just like this one, except that it
+     * has a catch list with the given item appended to the end. This
+     * method throws an exception if this instance can't possibly
+     * throw. To determine whether this instruction can throw, use
+     * {@link #canThrow}.
+     *
+     * @param type {@code non-null;} type to append to the catch list
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public abstract Insn withAddedCatch(Type type);
+
+    /**
+     * Returns an instance that is just like this one, except that all
+     * register references have been offset by the given delta.
+     *
+     * @param delta the amount to offset register references by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public abstract Insn withRegisterOffset(int delta);
+
+    /**
+     * Returns an instance that is just like this one, except that, if
+     * possible, the insn is converted into a version in which a source
+     * (if it is a constant) is represented directly rather than as a
+     * register reference. {@code this} is returned in cases where the
+     * translation is not possible.
+     *
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public Insn withSourceLiteral() {
+        return this;
+    }
+
+    /**
+     * Returns an exact copy of this Insn
+     *
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public Insn copy() {
+        return withRegisterOffset(0);
+    }
+
+
+    /**
+     * Compares, handling nulls safely
+     *
+     * @param a first object
+     * @param b second object
+     * @return true if they're equal or both null.
+     */
+    private static boolean equalsHandleNulls (Object a, Object b) {
+        return (a == b) || ((a != null) && a.equals(b));
+    }
+
+    /**
+     * Compares Insn contents, since {@code Insn.equals()} is defined
+     * to be an identity compare. Insn's are {@code contentEquals()}
+     * if they have the same opcode, registers, source position, and other
+     * metadata.
+     *
+     * @return true in the case described above
+     */
+    public boolean contentEquals(Insn b) {
+        return opcode == b.getOpcode()
+                && position.equals(b.getPosition())
+                && (getClass() == b.getClass())
+                && equalsHandleNulls(result, b.getResult())
+                && equalsHandleNulls(sources, b.getSources())
+                && StdTypeList.equalContents(getCatches(), b.getCatches());
+    }
+
+    /**
+     * Returns an instance that is just like this one, except
+     * with new result and source registers.
+     *
+     * @param result {@code null-ok;} new result register
+     * @param sources {@code non-null;} new sources registers
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public abstract Insn withNewRegisters(RegisterSpec result,
+            RegisterSpecList sources);
+
+    /**
+     * Returns the string form of this instance, with the given bit added in
+     * the standard location for an inline argument.
+     *
+     * @param extra {@code null-ok;} the inline argument string
+     * @return {@code non-null;} the string form
+     */
+    protected final String toStringWithInline(String extra) {
+        StringBuilder sb = new StringBuilder(80);
+
+        sb.append("Insn{");
+        sb.append(position);
+        sb.append(' ');
+        sb.append(opcode);
+
+        if (extra != null) {
+            sb.append(' ');
+            sb.append(extra);
+        }
+
+        sb.append(" :: ");
+
+        if (result != null) {
+            sb.append(result);
+            sb.append(" <- ");
+        }
+
+        sb.append(sources);
+        sb.append('}');
+
+        return sb.toString();
+    }
+
+    /**
+     * Returns the human string form of this instance, with the given
+     * bit added in the standard location for an inline argument.
+     *
+     * @param extra {@code null-ok;} the inline argument string
+     * @return {@code non-null;} the human string form
+     */
+    protected final String toHumanWithInline(String extra) {
+        StringBuilder sb = new StringBuilder(80);
+
+        sb.append(position);
+        sb.append(": ");
+        sb.append(opcode.getNickname());
+
+        if (extra != null) {
+            sb.append("(");
+            sb.append(extra);
+            sb.append(")");
+        }
+
+        if (result == null) {
+            sb.append(" .");
+        } else {
+            sb.append(" ");
+            sb.append(result.toHuman());
+        }
+
+        sb.append(" <-");
+
+        int sz = sources.size();
+        if (sz == 0) {
+            sb.append(" .");
+        } else {
+            for (int i = 0; i < sz; i++) {
+                sb.append(" ");
+                sb.append(sources.get(i).toHuman());
+            }
+        }
+
+        return sb.toString();
+    }
+
+
+    /**
+     * Visitor interface for this (outer) class.
+     */
+    public static interface Visitor {
+        /**
+         * Visits a {@link PlainInsn}.
+         *
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitPlainInsn(PlainInsn insn);
+
+        /**
+         * Visits a {@link PlainCstInsn}.
+         *
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitPlainCstInsn(PlainCstInsn insn);
+
+        /**
+         * Visits a {@link SwitchInsn}.
+         *
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitSwitchInsn(SwitchInsn insn);
+
+        /**
+         * Visits a {@link ThrowingCstInsn}.
+         *
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitThrowingCstInsn(ThrowingCstInsn insn);
+
+        /**
+         * Visits a {@link ThrowingInsn}.
+         *
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitThrowingInsn(ThrowingInsn insn);
+
+        /**
+         * Visits a {@link FillArrayDataInsn}.
+         *
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitFillArrayDataInsn(FillArrayDataInsn insn);
+
+        /**
+         * Visits a {@link InvokePolymorphicInsn}.
+         *
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitInvokePolymorphicInsn(InvokePolymorphicInsn insn);
+    }
+
+    /**
+     * Base implementation of {@link Visitor}, which has empty method
+     * bodies for all methods.
+     */
+    public static class BaseVisitor implements Visitor {
+        /** {@inheritDoc} */
+        @Override
+        public void visitPlainInsn(PlainInsn insn) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitPlainCstInsn(PlainCstInsn insn) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitSwitchInsn(SwitchInsn insn) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitThrowingCstInsn(ThrowingCstInsn insn) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitThrowingInsn(ThrowingInsn insn) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitFillArrayDataInsn(FillArrayDataInsn insn) {
+            // This space intentionally left blank.
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitInvokePolymorphicInsn(InvokePolymorphicInsn insn) {
+            // This space intentionally left blank.
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/InsnList.java b/dx/src/com/android/dx/rop/code/InsnList.java
new file mode 100644
index 0000000..88abd72
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/InsnList.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * List of {@link Insn} instances.
+ */
+public final class InsnList
+        extends FixedSizeList {
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     */
+    public InsnList(int size) {
+        super(size);
+    }
+
+    /**
+     * Gets the element at the given index. It is an error to call
+     * this with the index for an element which was never set; if you
+     * do that, this will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @return {@code non-null;} element at that index
+     */
+    public Insn get(int n) {
+        return (Insn) get0(n);
+    }
+
+    /**
+     * Sets the instruction at the given index.
+     *
+     * @param n {@code >= 0, < size();} which index
+     * @param insn {@code non-null;} the instruction to set at {@code n}
+     */
+    public void set(int n, Insn insn) {
+        set0(n, insn);
+    }
+
+    /**
+     * Gets the last instruction. This is just a convenient shorthand for
+     * {@code get(size() - 1)}.
+     *
+     * @return {@code non-null;} the last instruction
+     */
+    public Insn getLast() {
+        return get(size() - 1);
+    }
+
+    /**
+     * Visits each instruction in the list, in order.
+     *
+     * @param visitor {@code non-null;} visitor to use
+     */
+    public void forEach(Insn.Visitor visitor) {
+        int sz = size();
+
+        for (int i = 0; i < sz; i++) {
+            get(i).accept(visitor);
+        }
+    }
+
+    /**
+     * Compares the contents of this {@code InsnList} with another.
+     * The blocks must have the same number of insns, and each Insn must
+     * also return true to {@code Insn.contentEquals()}.
+     *
+     * @param b to compare
+     * @return true in the case described above.
+     */
+    public boolean contentEquals(InsnList b) {
+        if (b == null) return false;
+
+        int sz = size();
+
+        if (sz != b.size()) return false;
+
+        for (int i = 0; i < sz; i++) {
+            if (!get(i).contentEquals(b.get(i))) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * the registers in each instruction are offset by the given
+     * amount. Mutability of the result is inherited from the
+     * original.
+     *
+     * @param delta the amount to offset register numbers by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public InsnList withRegisterOffset(int delta) {
+        int sz = size();
+        InsnList result = new InsnList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            Insn one = (Insn) get0(i);
+            if (one != null) {
+                result.set0(i, one.withRegisterOffset(delta));
+            }
+        }
+
+        if (isImmutable()) {
+            result.setImmutable();
+        }
+
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java b/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java
new file mode 100644
index 0000000..ca5a3b8
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstProtoRef;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+
+/**
+ * An invoke-polymorphic instruction. This is a throwing instruction with
+ * multiple constants.
+ */
+public class InvokePolymorphicInsn extends Insn {
+    /** Default descriptor for signature polymorphic methods. */
+    private static final CstString DEFAULT_DESCRIPTOR =
+            new CstString("([Ljava/lang/Object;)Ljava/lang/Object;");
+
+    /** Descriptor for VarHandle set methods. */
+    private static final CstString VARHANDLE_SET_DESCRIPTOR =
+            new CstString("([Ljava/lang/Object;)V");
+
+    /** Descriptor for VarHandle compare-and-set methods. */
+    private static final CstString VARHANDLE_COMPARE_AND_SET_DESCRIPTOR =
+            new CstString("([Ljava/lang/Object;)Z");
+
+    /** {@code non-null;} list of exceptions caught */
+    private final TypeList catches;
+
+    /**
+     * {@code non-null;} method as it appears at the call site of the original
+     * invoke-virtual instruction. This is used to construct the invoke method
+     * to target and the call-site prototype.
+     */
+    private final CstMethodRef callSiteMethod;
+
+    /**
+     * {@code non-null;} signature polymorphic method.
+     */
+    private final CstMethodRef polymorphicMethod;
+
+    /**
+     * {@code non-null;} the call site prototype.
+     */
+    private final CstProtoRef callSiteProto;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param sources {@code non-null;} specs for all the sources
+     * @param catches {@code non-null;} list of exceptions caught
+     * @param callSiteMethod {@code non-null;} the method called by
+     * invoke-virtual that this instance will replace.
+     */
+    public InvokePolymorphicInsn(Rop opcode, SourcePosition position, RegisterSpecList sources, TypeList catches,
+            CstMethodRef callSiteMethod) {
+        super(opcode, position, null, sources);
+
+        if (opcode.getBranchingness() != Rop.BRANCH_THROW) {
+            throw new IllegalArgumentException("opcode with invalid branchingness: " + opcode.getBranchingness());
+        }
+
+        if (catches == null) {
+            throw new NullPointerException("catches == null");
+        }
+        this.catches = catches;
+
+        if (callSiteMethod == null) {
+            throw new NullPointerException("callSiteMethod == null");
+        } else if (!callSiteMethod.isSignaturePolymorphic()) {
+            throw new IllegalArgumentException("callSiteMethod is not signature polymorphic");
+        }
+
+        this.callSiteMethod = callSiteMethod;
+        this.polymorphicMethod = makePolymorphicMethod(callSiteMethod);
+        this.callSiteProto = makeCallSiteProto(callSiteMethod);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList getCatches() {
+        return this.catches;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(Visitor visitor) {
+        visitor.visitInvokePolymorphicInsn(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withAddedCatch(Type type) {
+        return new InvokePolymorphicInsn(getOpcode(), getPosition(),
+                getSources(), catches.withAddedType(type), getCallSiteMethod());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withRegisterOffset(int delta) {
+        return new InvokePolymorphicInsn(getOpcode(), getPosition(),
+                getSources().withOffset(delta),
+                catches, getCallSiteMethod());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withNewRegisters(RegisterSpec result, RegisterSpecList sources) {
+        return new InvokePolymorphicInsn(getOpcode(), getPosition(),
+                sources, catches, getCallSiteMethod());
+    }
+
+    /**
+     * Gets the method as it appears at the call site of the original
+     * invoke-virtual instruction.
+     *
+     * @return {@code non-null;} the original method reference
+     */
+    public CstMethodRef getCallSiteMethod() {
+        return callSiteMethod;
+    }
+
+    /**
+     * Gets the method to be invoked. This will be will either be
+     * {@code java.lang.invoke.MethodHandle.invoke()} or
+     * {@code java.lang.invoke.MethodHandle.invokeExact()}.
+     *
+     * @return {@code non-null;} method reference to be invoked
+     */
+    public CstMethodRef getPolymorphicMethod() {
+        return polymorphicMethod;
+    }
+
+    /**
+     * Gets the call site prototype. The call site prototype is provided
+     * as an argument to invoke-polymorphic to enable type checking and
+     * type conversion.
+     *
+     * @return {@code non-null;} Prototype reference for call site
+     */
+    public CstProtoRef getCallSiteProto() {
+        return callSiteProto;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String getInlineString() {
+        return getPolymorphicMethod().toString() + " " +
+            getCallSiteProto().toString() + " " +
+            ThrowingInsn.toCatchString(catches);
+    }
+
+    private static CstMethodRef makePolymorphicMethod(final CstMethodRef callSiteMethod) {
+        CstType definingClass= callSiteMethod.getDefiningClass();
+        CstString cstMethodName = callSiteMethod.getNat().getName();
+        String methodName = callSiteMethod.getNat().getName().getString();
+
+        if (definingClass.equals(CstType.METHOD_HANDLE)) {
+            if (methodName.equals("invoke") || methodName.equals("invokeExact")) {
+                CstNat cstNat = new CstNat(cstMethodName, DEFAULT_DESCRIPTOR);
+                return new CstMethodRef(definingClass, cstNat);
+            }
+        }
+
+        if (definingClass.equals(CstType.VAR_HANDLE)) {
+            switch (methodName) {
+                case "compareAndExchange":
+                case "compareAndExchangeAcquire":
+                case "compareAndExchangeRelease":
+                case "get":
+                case "getAcquire":
+                case "getAndAdd":
+                case "getAndAddAcquire":
+                case "getAndAddRelease":
+                case "getAndBitwiseAnd":
+                case "getAndBitwiseAndAcquire":
+                case "getAndBitwiseAndRelease":
+                case "getAndBitwiseOr":
+                case "getAndBitwiseOrAcquire":
+                case "getAndBitwiseOrRelease":
+                case "getAndBitwiseXor":
+                case "getAndBitwiseXorAcquire":
+                case "getAndBitwiseXorRelease":
+                case "getAndSet":
+                case "getAndSetAcquire":
+                case "getAndSetRelease":
+                case "getOpaque":
+                case "getVolatile":
+                {
+                    CstNat cstNat = new CstNat(cstMethodName, DEFAULT_DESCRIPTOR);
+                    return new CstMethodRef(definingClass, cstNat);
+                }
+                case "set":
+                case "setOpaque":
+                case "setRelease":
+                case "setVolatile":
+                {
+                    CstNat cstNat = new CstNat(cstMethodName, VARHANDLE_SET_DESCRIPTOR);
+                    return new CstMethodRef(definingClass, cstNat);
+                }
+                case "compareAndSet":
+                case "weakCompareAndSet":
+                case "weakCompareAndSetAcquire":
+                case "weakCompareAndSetPlain":
+                case "weakCompareAndSetRelease":
+                {
+                    CstNat cstNat = new CstNat(cstMethodName, VARHANDLE_COMPARE_AND_SET_DESCRIPTOR);
+                    return new CstMethodRef(definingClass, cstNat);
+                }
+                default:
+                    break;
+            }
+        }
+        throw new IllegalArgumentException("Unknown signature polymorphic method: " +
+                                           callSiteMethod.toHuman());
+    }
+
+    private static CstProtoRef makeCallSiteProto(final CstMethodRef callSiteMethod) {
+        return new CstProtoRef(callSiteMethod.getPrototype(true));
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/LocalItem.java b/dx/src/com/android/dx/rop/code/LocalItem.java
new file mode 100644
index 0000000..ca5e394
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/LocalItem.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.CstString;
+
+/**
+ * A local variable item: either a name or a signature or both.
+ */
+public class LocalItem implements Comparable<LocalItem> {
+    /** {@code null-ok;} local variable name */
+    private final CstString name;
+
+    /** {@code null-ok;} local variable signature */
+    private final CstString signature;
+
+    /**
+     * Make a new item. If both name and signature are null, null is returned.
+     *
+     * TODO: intern these
+     *
+     * @param name {@code null-ok;} local variable name
+     * @param signature {@code null-ok;} local variable signature
+     * @return {@code non-null;} appropriate instance.
+     */
+    public static LocalItem make(CstString name, CstString signature) {
+        if (name == null && signature == null) {
+            return null;
+        }
+
+        return new LocalItem (name, signature);
+    }
+
+    /**
+     * Constructs instance.
+     *
+     * @param name {@code null-ok;} local variable name
+     * @param signature {@code null-ok;} local variable signature
+     */
+    private LocalItem(CstString name, CstString signature) {
+        this.name = name;
+        this.signature = signature;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof LocalItem)) {
+            return false;
+        }
+
+        LocalItem local = (LocalItem) other;
+
+        return 0 == compareTo(local);
+    }
+
+    /**
+     * Compares two strings like String.compareTo(), excepts treats a null
+     * as the least-possible string value.
+     *
+     * @return negative integer, zero, or positive integer in accordance
+     * with Comparable.compareTo()
+     */
+    private static int compareHandlesNulls(CstString a, CstString b) {
+        if (a == b) {
+            return 0;
+        } else if (a == null) {
+            return -1;
+        } else if (b == null) {
+            return 1;
+        } else {
+            return a.compareTo(b);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(LocalItem local) {
+        int ret;
+
+        ret = compareHandlesNulls(name, local.name);
+
+        if (ret != 0) {
+            return ret;
+        }
+
+        ret = compareHandlesNulls(signature, local.signature);
+
+        return ret;
+    }
+
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return (name == null ? 0 : name.hashCode()) * 31
+                + (signature == null ? 0 : signature.hashCode());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        if (name != null && signature == null) {
+            return name.toQuoted();
+        } else if (name == null && signature == null) {
+            return "";
+        }
+
+        return "[" + (name == null ? "" : name.toQuoted())
+                + "|" + (signature == null ? "" : signature.toQuoted());
+    }
+
+    /**
+     * Gets name.
+     *
+     * @return {@code null-ok;} name
+     */
+    public CstString getName() {
+        return name;
+    }
+
+    /**
+     * Gets signature.
+     *
+     * @return {@code null-ok;} signature
+     */
+    public CstString getSignature() {
+        return signature;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/LocalVariableExtractor.java b/dx/src/com/android/dx/rop/code/LocalVariableExtractor.java
new file mode 100644
index 0000000..c2c4021
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/LocalVariableExtractor.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.util.Bits;
+import com.android.dx.util.IntList;
+
+/**
+ * Code to figure out which local variables are active at which points in
+ * a method.
+ */
+public final class LocalVariableExtractor {
+    /** {@code non-null;} method being extracted from */
+    private final RopMethod method;
+
+    /** {@code non-null;} block list for the method */
+    private final BasicBlockList blocks;
+
+    /** {@code non-null;} result in-progress */
+    private final LocalVariableInfo resultInfo;
+
+    /** {@code non-null;} work set indicating blocks needing to be processed */
+    private final int[] workSet;
+
+    /**
+     * Extracts out all the local variable information from the given method.
+     *
+     * @param method {@code non-null;} the method to extract from
+     * @return {@code non-null;} the extracted information
+     */
+    public static LocalVariableInfo extract(RopMethod method) {
+        LocalVariableExtractor lve = new LocalVariableExtractor(method);
+        return lve.doit();
+    }
+
+    /**
+     * Constructs an instance. This method is private. Use {@link #extract}.
+     *
+     * @param method {@code non-null;} the method to extract from
+     */
+    private LocalVariableExtractor(RopMethod method) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        BasicBlockList blocks = method.getBlocks();
+        int maxLabel = blocks.getMaxLabel();
+
+        this.method = method;
+        this.blocks = blocks;
+        this.resultInfo = new LocalVariableInfo(method);
+        this.workSet = Bits.makeBitSet(maxLabel);
+    }
+
+    /**
+     * Does the extraction.
+     *
+     * @return {@code non-null;} the extracted information
+     */
+    private LocalVariableInfo doit() {
+        for (int label = method.getFirstLabel();
+             label >= 0;
+             label = Bits.findFirst(workSet, 0)) {
+            Bits.clear(workSet, label);
+            processBlock(label);
+        }
+
+        resultInfo.setImmutable();
+        return resultInfo;
+    }
+
+    /**
+     * Processes a single block.
+     *
+     * @param label {@code >= 0;} label of the block to process
+     */
+    private void processBlock(int label) {
+        RegisterSpecSet primaryState = resultInfo.mutableCopyOfStarts(label);
+        BasicBlock block = blocks.labelToBlock(label);
+        InsnList insns = block.getInsns();
+        int insnSz = insns.size();
+
+        /*
+         * We may have to treat the last instruction specially: If it
+         * can (but doesn't always) throw, and the exception can be
+         * caught within the same method, then we need to use the
+         * state *before* executing it to be what is merged into
+         * exception targets.
+         */
+        boolean canThrowDuringLastInsn = block.hasExceptionHandlers() &&
+            (insns.getLast().getResult() != null);
+        int freezeSecondaryStateAt = insnSz - 1;
+        RegisterSpecSet secondaryState = primaryState;
+
+        /*
+         * Iterate over the instructions, adding information for each place
+         * that the active variable set changes.
+         */
+
+        for (int i = 0; i < insnSz; i++) {
+            if (canThrowDuringLastInsn && (i == freezeSecondaryStateAt)) {
+                // Until this point, primaryState == secondaryState.
+                primaryState.setImmutable();
+                primaryState = primaryState.mutableCopy();
+            }
+
+            Insn insn = insns.get(i);
+            RegisterSpec result;
+
+            result = insn.getLocalAssignment();
+
+            if (result == null) {
+                /*
+                 * If an assignment assigns over an existing local, make
+                 * sure to mark the local as going out of scope.
+                 */
+
+                result = insn.getResult();
+
+                if (result != null
+                        && primaryState.get(result.getReg()) != null) {
+                    primaryState.remove(primaryState.get(result.getReg()));
+                }
+                continue;
+            }
+
+            result = result.withSimpleType();
+
+            RegisterSpec already = primaryState.get(result);
+            /*
+             * The equals() check ensures we only add new info if
+             * the instruction causes a change to the set of
+             * active variables.
+             */
+            if (!result.equals(already)) {
+                /*
+                 * If this insn represents a local moving from one register
+                 * to another, remove the association between the old register
+                 * and the local.
+                 */
+                RegisterSpec previous
+                        = primaryState.localItemToSpec(result.getLocalItem());
+
+                if (previous != null
+                        && (previous.getReg() != result.getReg())) {
+
+                    primaryState.remove(previous);
+                }
+
+                resultInfo.addAssignment(insn, result);
+                primaryState.put(result);
+            }
+        }
+
+        primaryState.setImmutable();
+
+        /*
+         * Merge this state into the start state for each successor,
+         * and update the work set where required (that is, in cases
+         * where the start state for a block changes).
+         */
+
+        IntList successors = block.getSuccessors();
+        int succSz = successors.size();
+        int primarySuccessor = block.getPrimarySuccessor();
+
+        for (int i = 0; i < succSz; i++) {
+            int succ = successors.get(i);
+            RegisterSpecSet state = (succ == primarySuccessor) ?
+                primaryState : secondaryState;
+
+            if (resultInfo.mergeStarts(succ, state)) {
+                Bits.set(workSet, succ);
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/LocalVariableInfo.java b/dx/src/com/android/dx/rop/code/LocalVariableInfo.java
new file mode 100644
index 0000000..4376a2e
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/LocalVariableInfo.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.MutabilityControl;
+import java.util.HashMap;
+
+/**
+ * Container for local variable information for a particular {@link
+ * RopMethod}.
+ */
+public final class LocalVariableInfo
+        extends MutabilityControl {
+    /** {@code >= 0;} the register count for the method */
+    private final int regCount;
+
+    /**
+     * {@code non-null;} {@link RegisterSpecSet} to use when indicating a block
+     * that has no locals; it is empty and immutable but has an appropriate
+     * max size for the method
+     */
+    private final RegisterSpecSet emptySet;
+
+    /**
+     * {@code non-null;} array consisting of register sets representing the
+     * sets of variables already assigned upon entry to each block,
+     * where array indices correspond to block labels
+     */
+    private final RegisterSpecSet[] blockStarts;
+
+    /** {@code non-null;} map from instructions to the variable each assigns */
+    private final HashMap<Insn, RegisterSpec> insnAssignments;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param method {@code non-null;} the method being represented by this instance
+     */
+    public LocalVariableInfo(RopMethod method) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        BasicBlockList blocks = method.getBlocks();
+        int maxLabel = blocks.getMaxLabel();
+
+        this.regCount = blocks.getRegCount();
+        this.emptySet = new RegisterSpecSet(regCount);
+        this.blockStarts = new RegisterSpecSet[maxLabel];
+        this.insnAssignments =
+            new HashMap<Insn, RegisterSpec>(blocks.getInstructionCount());
+
+        emptySet.setImmutable();
+    }
+
+    /**
+     * Sets the register set associated with the start of the block with
+     * the given label.
+     *
+     * @param label {@code >= 0;} the block label
+     * @param specs {@code non-null;} the register set to associate with the block
+     */
+    public void setStarts(int label, RegisterSpecSet specs) {
+        throwIfImmutable();
+
+        if (specs == null) {
+            throw new NullPointerException("specs == null");
+        }
+
+        try {
+            blockStarts[label] = specs;
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("bogus label");
+        }
+    }
+
+    /**
+     * Merges the given register set into the set for the block with the
+     * given label. If there was not already an associated set, then this
+     * is the same as calling {@link #setStarts}. Otherwise, this will
+     * merge the two sets and call {@link #setStarts} on the result of the
+     * merge.
+     *
+     * @param label {@code >= 0;} the block label
+     * @param specs {@code non-null;} the register set to merge into the start set
+     * for the block
+     * @return {@code true} if the merge resulted in an actual change
+     * to the associated set (including storing one for the first time) or
+     * {@code false} if there was no change
+     */
+    public boolean mergeStarts(int label, RegisterSpecSet specs) {
+        RegisterSpecSet start = getStarts0(label);
+        boolean changed = false;
+
+        if (start == null) {
+            setStarts(label, specs);
+            return true;
+        }
+
+        RegisterSpecSet newStart = start.mutableCopy();
+        if (start.size() != 0) {
+            newStart.intersect(specs, true);
+        } else {
+            newStart = specs.mutableCopy();
+        }
+
+        if (start.equals(newStart)) {
+            return false;
+        }
+
+        newStart.setImmutable();
+        setStarts(label, newStart);
+
+        return true;
+    }
+
+    /**
+     * Gets the register set associated with the start of the block
+     * with the given label. This returns an empty set with the appropriate
+     * max size if no set was associated with the block in question.
+     *
+     * @param label {@code >= 0;} the block label
+     * @return {@code non-null;} the associated register set
+     */
+    public RegisterSpecSet getStarts(int label) {
+        RegisterSpecSet result = getStarts0(label);
+
+        return (result != null) ? result : emptySet;
+    }
+
+    /**
+     * Gets the register set associated with the start of the given
+     * block. This is just convenient shorthand for
+     * {@code getStarts(block.getLabel())}.
+     *
+     * @param block {@code non-null;} the block in question
+     * @return {@code non-null;} the associated register set
+     */
+    public RegisterSpecSet getStarts(BasicBlock block) {
+        return getStarts(block.getLabel());
+    }
+
+    /**
+     * Gets a mutable copy of the register set associated with the
+     * start of the block with the given label. This returns a
+     * newly-allocated empty {@link RegisterSpecSet} of appropriate
+     * max size if there is not yet any set associated with the block.
+     *
+     * @param label {@code >= 0;} the block label
+     * @return {@code non-null;} the associated register set
+     */
+    public RegisterSpecSet mutableCopyOfStarts(int label) {
+        RegisterSpecSet result = getStarts0(label);
+
+        return (result != null) ?
+            result.mutableCopy() : new RegisterSpecSet(regCount);
+    }
+
+    /**
+     * Adds an assignment association for the given instruction and
+     * register spec. This throws an exception if the instruction
+     * doesn't actually perform a named variable assignment.
+     *
+     * <b>Note:</b> Although the instruction contains its own spec for
+     * the result, it still needs to be passed in explicitly to this
+     * method, since the spec that is stored here should always have a
+     * simple type and the one in the instruction can be an arbitrary
+     * {@link TypeBearer} (such as a constant value).
+     *
+     * @param insn {@code non-null;} the instruction in question
+     * @param spec {@code non-null;} the associated register spec
+     */
+    public void addAssignment(Insn insn, RegisterSpec spec) {
+        throwIfImmutable();
+
+        if (insn == null) {
+            throw new NullPointerException("insn == null");
+        }
+
+        if (spec == null) {
+            throw new NullPointerException("spec == null");
+        }
+
+        insnAssignments.put(insn, spec);
+    }
+
+    /**
+     * Gets the named register being assigned by the given instruction, if
+     * previously stored in this instance.
+     *
+     * @param insn {@code non-null;} instruction in question
+     * @return {@code null-ok;} the named register being assigned, if any
+     */
+    public RegisterSpec getAssignment(Insn insn) {
+        return insnAssignments.get(insn);
+    }
+
+    /**
+     * Gets the number of assignments recorded by this instance.
+     *
+     * @return {@code >= 0;} the number of assignments
+     */
+    public int getAssignmentCount() {
+        return insnAssignments.size();
+    }
+
+    public void debugDump() {
+        for (int label = 0 ; label < blockStarts.length; label++) {
+            if (blockStarts[label] == null) {
+                continue;
+            }
+
+            if (blockStarts[label] == emptySet) {
+                System.out.printf("%04x: empty set\n", label);
+            } else {
+                System.out.printf("%04x: %s\n", label, blockStarts[label]);
+            }
+        }
+    }
+
+    /**
+     * Helper method, to get the starts for a label, throwing the
+     * right exception for range problems.
+     *
+     * @param label {@code >= 0;} the block label
+     * @return {@code null-ok;} associated register set or {@code null} if there
+     * is none
+     */
+    private RegisterSpecSet getStarts0(int label) {
+        try {
+            return blockStarts[label];
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("bogus label");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/PlainCstInsn.java b/dx/src/com/android/dx/rop/code/PlainCstInsn.java
new file mode 100644
index 0000000..021abd6
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/PlainCstInsn.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+
+/**
+ * Instruction which contains an explicit reference to a constant
+ * but which cannot throw an exception.
+ */
+public final class PlainCstInsn
+        extends CstInsn {
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param result {@code null-ok;} spec for the result, if any
+     * @param sources {@code non-null;} specs for all the sources
+     * @param cst {@code non-null;} the constant
+     */
+    public PlainCstInsn(Rop opcode, SourcePosition position,
+                        RegisterSpec result, RegisterSpecList sources,
+                        Constant cst) {
+        super(opcode, position, result, sources, cst);
+
+        if (opcode.getBranchingness() != Rop.BRANCH_NONE) {
+            throw new IllegalArgumentException("opcode with invalid branchingness: " + opcode.getBranchingness());
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList getCatches() {
+        return StdTypeList.EMPTY;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(Visitor visitor) {
+        visitor.visitPlainCstInsn(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withAddedCatch(Type type) {
+        throw new UnsupportedOperationException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withRegisterOffset(int delta) {
+        return new PlainCstInsn(getOpcode(), getPosition(),
+                                getResult().withOffset(delta),
+                                getSources().withOffset(delta),
+                                getConstant());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withNewRegisters(RegisterSpec result,
+            RegisterSpecList sources) {
+
+        return new PlainCstInsn(getOpcode(), getPosition(),
+                                result,
+                                sources,
+                                getConstant());
+
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/PlainInsn.java b/dx/src/com/android/dx/rop/code/PlainInsn.java
new file mode 100644
index 0000000..241ab11
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/PlainInsn.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.rop.type.TypeList;
+
+/**
+ * Plain instruction, which has no embedded data and which cannot possibly
+ * throw an exception.
+ */
+public final class PlainInsn
+        extends Insn {
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param result {@code null-ok;} spec for the result, if any
+     * @param sources {@code non-null;} specs for all the sources
+     */
+    public PlainInsn(Rop opcode, SourcePosition position,
+                     RegisterSpec result, RegisterSpecList sources) {
+        super(opcode, position, result, sources);
+
+        switch (opcode.getBranchingness()) {
+            case Rop.BRANCH_SWITCH:
+            case Rop.BRANCH_THROW: {
+                throw new IllegalArgumentException("opcode with invalid branchingness: " + opcode.getBranchingness());
+            }
+        }
+
+        if (result != null && opcode.getBranchingness() != Rop.BRANCH_NONE) {
+            // move-result-pseudo is required here
+            throw new IllegalArgumentException
+                    ("can't mix branchingness with result");
+        }
+    }
+
+    /**
+     * Constructs a single-source instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param result {@code null-ok;} spec for the result, if any
+     * @param source {@code non-null;} spec for the source
+     */
+    public PlainInsn(Rop opcode, SourcePosition position, RegisterSpec result,
+                     RegisterSpec source) {
+        this(opcode, position, result, RegisterSpecList.make(source));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList getCatches() {
+        return StdTypeList.EMPTY;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(Visitor visitor) {
+        visitor.visitPlainInsn(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withAddedCatch(Type type) {
+        throw new UnsupportedOperationException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withRegisterOffset(int delta) {
+        return new PlainInsn(getOpcode(), getPosition(),
+                             getResult().withOffset(delta),
+                             getSources().withOffset(delta));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withSourceLiteral() {
+        RegisterSpecList sources = getSources();
+        int szSources = sources.size();
+
+        if (szSources == 0) {
+            return this;
+        }
+
+        TypeBearer lastType = sources.get(szSources - 1).getTypeBearer();
+
+        if (!lastType.isConstant()) {
+            // Check for reverse subtraction, where first source is constant
+            TypeBearer firstType = sources.get(0).getTypeBearer();
+            if (szSources == 2 && firstType.isConstant()) {
+                Constant cst = (Constant) firstType;
+                RegisterSpecList newSources = sources.withoutFirst();
+                Rop newRop = Rops.ropFor(getOpcode().getOpcode(), getResult(),
+                                             newSources, cst);
+                return new PlainCstInsn(newRop, getPosition(), getResult(),
+                                            newSources, cst);
+            }
+            return this;
+        } else {
+
+            Constant cst = (Constant) lastType;
+
+            RegisterSpecList newSources = sources.withoutLast();
+
+            Rop newRop;
+            try {
+                // Check for constant subtraction and flip it to be addition
+                int opcode = getOpcode().getOpcode();
+                if (opcode == RegOps.SUB && cst instanceof CstInteger) {
+                    opcode = RegOps.ADD;
+                    cst = CstInteger.make(-((CstInteger)cst).getValue());
+                }
+                newRop = Rops.ropFor(opcode, getResult(), newSources, cst);
+            } catch (IllegalArgumentException ex) {
+                // There's no rop for this case
+                return this;
+            }
+
+            return new PlainCstInsn(newRop, getPosition(),
+                    getResult(), newSources, cst);
+        }
+    }
+
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withNewRegisters(RegisterSpec result,
+            RegisterSpecList sources) {
+
+        return new PlainInsn(getOpcode(), getPosition(),
+                             result,
+                             sources);
+
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/RegOps.java b/dx/src/com/android/dx/rop/code/RegOps.java
new file mode 100644
index 0000000..ff10691
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/RegOps.java
@@ -0,0 +1,417 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.util.Hex;
+
+/**
+ * All the register-based opcodes, and related utilities.
+ *
+ * <p><b>Note:</b> Opcode descriptions use a rough pseudocode. {@code r}
+ * is the result register, {@code x} is the first argument,
+ * {@code y} is the second argument, and {@code z} is the
+ * third argument. The expression which describes
+ * the operation uses Java-ish syntax but is preceded by type indicators for
+ * each of the values.
+ */
+public final class RegOps {
+    /** {@code nop()} */
+    public static final int NOP = 1;
+
+    /** {@code T: any type; r,x: T :: r = x;} */
+    public static final int MOVE = 2;
+
+    /** {@code T: any type; r,param(x): T :: r = param(x)} */
+    public static final int MOVE_PARAM = 3;
+
+    /**
+     * {@code T: Throwable; r: T :: r = caught_exception}.
+     * <b>Note:</b> This opcode should only ever be used in the
+     * first instruction of a block, and such blocks must be
+     * the start of an exception handler.
+     */
+    public static final int MOVE_EXCEPTION = 4;
+
+    /** {@code T: any type; r, literal: T :: r = literal;} */
+    public static final int CONST = 5;
+
+    /** {@code goto label} */
+    public static final int GOTO = 6;
+
+    /**
+     * {@code T: int or Object; x,y: T :: if (x == y) goto
+     * label}
+     */
+    public static final int IF_EQ = 7;
+
+    /**
+     * {@code T: int or Object; x,y: T :: if (x != y) goto
+     * label}
+     */
+    public static final int IF_NE = 8;
+
+    /** {@code x,y: int :: if (x < y) goto label} */
+    public static final int IF_LT = 9;
+
+    /** {@code x,y: int :: if (x >= y) goto label} */
+    public static final int IF_GE = 10;
+
+    /** {@code x,y: int :: if (x <= y) goto label} */
+    public static final int IF_LE = 11;
+
+    /** {@code x,y: int :: if (x > y) goto label} */
+    public static final int IF_GT = 12;
+
+    /** {@code x: int :: goto table[x]} */
+    public static final int SWITCH = 13;
+
+    /** {@code T: any numeric type; r,x,y: T :: r = x + y} */
+    public static final int ADD = 14;
+
+    /** {@code T: any numeric type; r,x,y: T :: r = x - y} */
+    public static final int SUB = 15;
+
+    /** {@code T: any numeric type; r,x,y: T :: r = x * y} */
+    public static final int MUL = 16;
+
+    /** {@code T: any numeric type; r,x,y: T :: r = x / y} */
+    public static final int DIV = 17;
+
+    /**
+     * {@code T: any numeric type; r,x,y: T :: r = x % y}
+     * (Java-style remainder)
+     */
+    public static final int REM = 18;
+
+    /** {@code T: any numeric type; r,x: T :: r = -x} */
+    public static final int NEG = 19;
+
+    /** {@code T: any integral type; r,x,y: T :: r = x & y} */
+    public static final int AND = 20;
+
+    /** {@code T: any integral type; r,x,y: T :: r = x | y} */
+    public static final int OR = 21;
+
+    /** {@code T: any integral type; r,x,y: T :: r = x ^ y} */
+    public static final int XOR = 22;
+
+    /**
+     * {@code T: any integral type; r,x: T; y: int :: r = x << y}
+     */
+    public static final int SHL = 23;
+
+    /**
+     * {@code T: any integral type; r,x: T; y: int :: r = x >> y}
+     * (signed right-shift)
+     */
+    public static final int SHR = 24;
+
+    /**
+     * {@code T: any integral type; r,x: T; y: int :: r = x >>> y}
+     * (unsigned right-shift)
+     */
+    public static final int USHR = 25;
+
+    /** {@code T: any integral type; r,x: T :: r = ~x} */
+    public static final int NOT = 26;
+
+    /**
+     * {@code T: any numeric type; r: int; x,y: T :: r = (x == y) ? 0
+     * : (x > y) ? 1 : -1} (Java-style "cmpl" where a NaN is
+     * considered "less than" all other values; also used for integral
+     * comparisons)
+     */
+    public static final int CMPL = 27;
+
+    /**
+     * {@code T: any floating point type; r: int; x,y: T :: r = (x == y) ? 0
+     * : (x < y) ? -1 : 1} (Java-style "cmpg" where a NaN is
+     * considered "greater than" all other values)
+     */
+    public static final int CMPG = 28;
+
+    /**
+     * {@code T: any numeric type; U: any numeric type; r: T; x: U ::
+     * r = (T) x} (numeric type conversion between the four
+     * "real" numeric types)
+     */
+    public static final int CONV = 29;
+
+    /**
+     * {@code r,x: int :: r = (x << 24) >> 24} (Java-style
+     * convert int to byte)
+     */
+    public static final int TO_BYTE = 30;
+
+    /**
+     * {@code r,x: int :: r = x & 0xffff} (Java-style convert int to char)
+     */
+    public static final int TO_CHAR = 31;
+
+    /**
+     * {@code r,x: int :: r = (x << 16) >> 16} (Java-style
+     * convert int to short)
+     */
+    public static final int TO_SHORT = 32;
+
+    /** {@code T: return type for the method; x: T; return x} */
+    public static final int RETURN = 33;
+
+    /** {@code T: any type; r: int; x: T[]; :: r = x.length} */
+    public static final int ARRAY_LENGTH = 34;
+
+    /** {@code x: Throwable :: throw(x)} */
+    public static final int THROW = 35;
+
+    /** {@code x: Object :: monitorenter(x)} */
+    public static final int MONITOR_ENTER = 36;
+
+    /** {@code x: Object :: monitorexit(x)} */
+    public static final int MONITOR_EXIT = 37;
+
+    /** {@code T: any type; r: T; x: T[]; y: int :: r = x[y]} */
+    public static final int AGET = 38;
+
+    /** {@code T: any type; x: T; y: T[]; z: int :: x[y] = z} */
+    public static final int APUT = 39;
+
+    /**
+     * {@code T: any non-array object type :: r =
+     * alloc(T)} (allocate heap space for an object)
+     */
+    public static final int NEW_INSTANCE = 40;
+
+    /** {@code T: any array type; r: T; x: int :: r = new T[x]} */
+    public static final int NEW_ARRAY = 41;
+
+    /**
+     * {@code T: any array type; r: T; x: int; v0..vx: T :: r = new T[x]
+     * {v0, ..., vx}}
+     */
+    public static final int FILLED_NEW_ARRAY = 42;
+
+    /**
+     * {@code T: any object type; x: Object :: (T) x} (can
+     * throw {@code ClassCastException})
+     */
+    public static final int CHECK_CAST = 43;
+
+    /**
+     * {@code T: any object type; x: Object :: x instanceof T}
+     */
+    public static final int INSTANCE_OF = 44;
+
+    /**
+     * {@code T: any type; r: T; x: Object; f: instance field spec of
+     * type T :: r = x.f}
+     */
+    public static final int GET_FIELD = 45;
+
+    /**
+     * {@code T: any type; r: T; f: static field spec of type T :: r =
+     * f}
+     */
+    public static final int GET_STATIC = 46;
+
+    /**
+     * {@code T: any type; x: T; y: Object; f: instance field spec of type
+     * T :: y.f = x}
+     */
+    public static final int PUT_FIELD = 47;
+
+    /**
+     * {@code T: any type; f: static field spec of type T; x: T :: f = x}
+     */
+    public static final int PUT_STATIC = 48;
+
+    /**
+     * {@code Tr, T0, T1...: any types; r: Tr; m: static method spec;
+     * y0: T0; y1: T1 ... :: r = m(y0, y1, ...)} (call static
+     * method)
+     */
+    public static final int INVOKE_STATIC = 49;
+
+    /**
+     * {@code Tr, T0, T1...: any types; r: Tr; x: Object; m: instance method
+     * spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1, ...)} (call normal
+     * virtual method)
+     */
+    public static final int INVOKE_VIRTUAL = 50;
+
+    /**
+     * {@code Tr, T0, T1...: any types; r: Tr; x: Object; m: instance method
+     * spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1, ...)} (call
+     * superclass virtual method)
+     */
+    public static final int INVOKE_SUPER = 51;
+
+    /**
+     * {@code Tr, T0, T1...: any types; r: Tr; x: Object; m: instance method
+     * spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1, ...)} (call
+     * direct/special method)
+     */
+    public static final int INVOKE_DIRECT = 52;
+
+    /**
+     * {@code Tr, T0, T1...: any types; r: Tr; x: Object; m: interface
+     * (instance) method spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1,
+     * ...)} (call interface method)
+     */
+    public static final int INVOKE_INTERFACE = 53;
+
+    /**
+     * {@code T0: any type; name: local variable name  :: mark(name,T0)}
+     * (mark beginning or end of local variable name)
+     */
+    public static final int MARK_LOCAL = 54;
+
+    /**
+     * {@code T: Any type; r: T :: r = return_type}.
+     * <b>Note:</b> This opcode should only ever be used in the
+     * first instruction of a block following an invoke-*.
+     */
+    public static final int MOVE_RESULT = 55;
+
+    /**
+     * {@code T: Any type; r: T :: r = return_type}.
+     * <b>Note:</b> This opcode should only ever be used in the
+     * first instruction of a block following a non-invoke throwing insn
+     */
+    public static final int MOVE_RESULT_PSEUDO = 56;
+
+    /** {@code T: Any primitive type; v0..vx: T :: {v0, ..., vx}} */
+    public static final int FILL_ARRAY_DATA = 57;
+
+    /**
+     * {@code Tr, T0, T1...: any types; r: Tr; x: java.lang.invoke.MethodHandle;
+     * m: signature polymorphic method
+     * spec; y0: T0; y1: T1 ... :: r = x.m(y0, y1, ...)} (call signature
+     * polymorphic method)
+     */
+    public static final int INVOKE_POLYMORPHIC = 58;
+
+    /**
+     * {@Code Tr, T0, T1...: any types; r: Tr; m: method spec;
+     * y0: T0; y1: T1 ... :: r = m(y0, y1, ...)
+     * <b>Note:</b> The signature of the invoked target is determined by the
+     * dynamic invocation call site information.
+     */
+    public static final int INVOKE_CUSTOM = 59;
+
+    /**
+     * This class is uninstantiable.
+     */
+    private RegOps() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Gets the name of the given opcode.
+     *
+     * @param opcode the opcode
+     * @return {@code non-null;} its name
+     */
+    public static String opName(int opcode) {
+        switch (opcode) {
+            case NOP: return "nop";
+            case MOVE: return "move";
+            case MOVE_PARAM: return "move-param";
+            case MOVE_EXCEPTION: return "move-exception";
+            case CONST: return "const";
+            case GOTO: return "goto";
+            case IF_EQ: return "if-eq";
+            case IF_NE: return "if-ne";
+            case IF_LT: return "if-lt";
+            case IF_GE: return "if-ge";
+            case IF_LE: return "if-le";
+            case IF_GT: return "if-gt";
+            case SWITCH: return "switch";
+            case ADD: return "add";
+            case SUB: return "sub";
+            case MUL: return "mul";
+            case DIV: return "div";
+            case REM: return "rem";
+            case NEG: return "neg";
+            case AND: return "and";
+            case OR: return "or";
+            case XOR: return "xor";
+            case SHL: return "shl";
+            case SHR: return "shr";
+            case USHR: return "ushr";
+            case NOT: return "not";
+            case CMPL: return "cmpl";
+            case CMPG: return "cmpg";
+            case CONV: return "conv";
+            case TO_BYTE: return "to-byte";
+            case TO_CHAR: return "to-char";
+            case TO_SHORT: return "to-short";
+            case RETURN: return "return";
+            case ARRAY_LENGTH: return "array-length";
+            case THROW: return "throw";
+            case MONITOR_ENTER: return "monitor-enter";
+            case MONITOR_EXIT: return "monitor-exit";
+            case AGET: return "aget";
+            case APUT: return "aput";
+            case NEW_INSTANCE: return "new-instance";
+            case NEW_ARRAY: return "new-array";
+            case FILLED_NEW_ARRAY: return "filled-new-array";
+            case CHECK_CAST: return "check-cast";
+            case INSTANCE_OF: return "instance-of";
+            case GET_FIELD: return "get-field";
+            case GET_STATIC: return "get-static";
+            case PUT_FIELD: return "put-field";
+            case PUT_STATIC: return "put-static";
+            case INVOKE_STATIC: return "invoke-static";
+            case INVOKE_VIRTUAL: return "invoke-virtual";
+            case INVOKE_SUPER: return "invoke-super";
+            case INVOKE_DIRECT: return "invoke-direct";
+            case INVOKE_INTERFACE: return "invoke-interface";
+            case MOVE_RESULT: return "move-result";
+            case MOVE_RESULT_PSEUDO: return "move-result-pseudo";
+            case FILL_ARRAY_DATA: return "fill-array-data";
+            case INVOKE_POLYMORPHIC: return "invoke-polymorphic";
+            case INVOKE_CUSTOM: return "invoke-custom";
+        }
+
+        return "unknown-" + Hex.u1(opcode);
+    }
+
+    /**
+     * Given an IF_* RegOp, returns the right-to-left flipped version. For
+     * example, IF_GT becomes IF_LT.
+     *
+     * @param opcode An IF_* RegOp
+     * @return flipped IF Regop
+     */
+    public static int flippedIfOpcode(final int opcode) {
+        switch (opcode) {
+            case RegOps.IF_EQ:
+            case RegOps.IF_NE:
+                return opcode;
+            case RegOps.IF_LT:
+                return RegOps.IF_GT;
+            case RegOps.IF_GE:
+                return RegOps.IF_LE;
+            case RegOps.IF_LE:
+                return RegOps.IF_GE;
+            case RegOps.IF_GT:
+                return RegOps.IF_LT;
+            default:
+                throw new RuntimeException("Unrecognized IF regop: " + opcode);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/RegisterSpec.java b/dx/src/com/android/dx/rop/code/RegisterSpec.java
new file mode 100644
index 0000000..ecaa358
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/RegisterSpec.java
@@ -0,0 +1,686 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.ToHuman;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Combination of a register number and a type, used as the sources and
+ * destinations of register-based operations.
+ */
+public final class RegisterSpec
+        implements TypeBearer, ToHuman, Comparable<RegisterSpec> {
+    /** {@code non-null;} string to prefix register numbers with */
+    public static final String PREFIX = "v";
+
+    /** {@code non-null;} intern table for instances */
+    private static final ConcurrentHashMap<Object, RegisterSpec> theInterns =
+        new ConcurrentHashMap<Object, RegisterSpec>(10_000, 0.75f);
+
+    /** {@code non-null;} common comparison instance used while interning */
+    private static final ThreadLocal<ForComparison> theInterningItem =
+            new ThreadLocal<ForComparison>() {
+                @Override
+                protected ForComparison initialValue() {
+                    return new ForComparison();
+                }
+            };
+
+    /** {@code >= 0;} register number */
+    private final int reg;
+
+    /** {@code non-null;} type loaded or stored */
+    private final TypeBearer type;
+
+    /**
+     * {@code null-ok;} local variable info associated with this register,
+     * if any
+     */
+    private final LocalItem local;
+
+    /**
+     * Intern the given triple as an instance of this class.
+     *
+     * @param reg {@code >= 0;} the register number
+     * @param type {@code non-null;} the type (or possibly actual value) which
+     * is loaded from or stored to the indicated register
+     * @param local {@code null-ok;} the associated local variable, if any
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    private static RegisterSpec intern(int reg, TypeBearer type,
+            LocalItem local) {
+        ForComparison interningItem = theInterningItem.get();
+        interningItem.set(reg, type, local);
+        RegisterSpec found = theInterns.get(interningItem);
+        if (found == null) {
+            found = interningItem.toRegisterSpec();
+            RegisterSpec existing = theInterns.putIfAbsent(found, found);
+            if (existing != null) {
+                return existing;
+            }
+        }
+        return found;
+    }
+
+    /**
+     * Returns an instance for the given register number and type, with
+     * no variable info. This method is allowed to return shared
+     * instances (but doesn't necessarily do so).
+     *
+     * @param reg {@code >= 0;} the register number
+     * @param type {@code non-null;} the type (or possibly actual value) which
+     * is loaded from or stored to the indicated register
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static RegisterSpec make(int reg, TypeBearer type) {
+        return intern(reg, type, null);
+    }
+
+    /**
+     * Returns an instance for the given register number, type, and
+     * variable info. This method is allowed to return shared
+     * instances (but doesn't necessarily do so).
+     *
+     * @param reg {@code >= 0;} the register number
+     * @param type {@code non-null;} the type (or possibly actual value) which
+     * is loaded from or stored to the indicated register
+     * @param local {@code non-null;} the associated local variable
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static RegisterSpec make(int reg, TypeBearer type,
+            LocalItem local) {
+        if (local == null) {
+            throw new NullPointerException("local  == null");
+        }
+
+        return intern(reg, type, local);
+    }
+
+    /**
+     * Returns an instance for the given register number, type, and
+     * variable info. This method is allowed to return shared
+     * instances (but doesn't necessarily do so).
+     *
+     * @param reg {@code >= 0;} the register number
+     * @param type {@code non-null;} the type (or possibly actual value) which
+     * is loaded from or stored to the indicated register
+     * @param local {@code null-ok;} the associated variable info or null for
+     * none
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static RegisterSpec makeLocalOptional(
+            int reg, TypeBearer type, LocalItem local) {
+
+        return intern(reg, type, local);
+    }
+
+    /**
+     * Gets the string form for the given register number.
+     *
+     * @param reg {@code >= 0;} the register number
+     * @return {@code non-null;} the string form
+     */
+    public static String regString(int reg) {
+        return PREFIX + reg;
+    }
+
+    /**
+     * Constructs an instance. This constructor is private. Use
+     * {@link #make}.
+     *
+     * @param reg {@code >= 0;} the register number
+     * @param type {@code non-null;} the type (or possibly actual value) which
+     * is loaded from or stored to the indicated register
+     * @param local {@code null-ok;} the associated local variable, if any
+     */
+    private RegisterSpec(int reg, TypeBearer type, LocalItem local) {
+        if (reg < 0) {
+            throw new IllegalArgumentException("reg < 0");
+        }
+
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        this.reg = reg;
+        this.type = type;
+        this.local = local;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;
+        }
+
+        if (!(other instanceof RegisterSpec)) {
+            if (other instanceof ForComparison) {
+                ForComparison fc = (ForComparison) other;
+                return equals(fc.reg, fc.type, fc.local);
+            }
+            return false;
+        }
+
+        RegisterSpec spec = (RegisterSpec) other;
+        return equals(spec.reg, spec.type, spec.local);
+    }
+
+    /**
+     * Like {@code equals}, but only consider the simple types of the
+     * registers. That is, this compares {@code getType()} on the types
+     * to ignore whatever arbitrary extra stuff might be carried around
+     * by an outer {@link TypeBearer}.
+     *
+     * @param other {@code null-ok;} spec to compare to
+     * @return {@code true} iff {@code this} and {@code other} are equal
+     * in the stated way
+     */
+    public boolean equalsUsingSimpleType(RegisterSpec other) {
+        if (!matchesVariable(other)) {
+            return false;
+        }
+
+        return (reg == other.reg);
+    }
+
+    /**
+     * Like {@link #equalsUsingSimpleType} but ignoring the register number.
+     * This is useful to determine if two instances refer to the "same"
+     * local variable.
+     *
+     * @param other {@code null-ok;} spec to compare to
+     * @return {@code true} iff {@code this} and {@code other} are equal
+     * in the stated way
+     */
+    public boolean matchesVariable(RegisterSpec other) {
+        if (other == null) {
+            return false;
+        }
+
+        return type.getType().equals(other.type.getType())
+            && ((local == other.local)
+                    || ((local != null) && local.equals(other.local)));
+    }
+
+    /**
+     * Helper for {@link #equals} and
+     * {@link com.android.dx.rop.code.RegisterSpec.ForComparison#equals},
+     * which actually does the test.
+     *
+     * @param reg value of the instance variable, for another instance
+     * @param type value of the instance variable, for another instance
+     * @param local value of the instance variable, for another instance
+     * @return whether this instance is equal to one with the given
+     * values
+     */
+    private boolean equals(int reg, TypeBearer type, LocalItem local) {
+        return (this.reg == reg)
+            && this.type.equals(type)
+            && ((this.local == local)
+                    || ((this.local != null) && this.local.equals(local)));
+    }
+
+    /**
+     * Compares by (in priority order) register number, unwrapped type
+     * (that is types not {@link TypeBearer}s, and local info.
+     *
+     * @param other {@code non-null;} spec to compare to
+     * @return {@code -1..1;} standard result of comparison
+     */
+    @Override
+    public int compareTo(RegisterSpec other) {
+        if (this.reg < other.reg) {
+            return -1;
+        } else if (this.reg > other.reg) {
+            return 1;
+        } else if (this == other) {
+            return 0;
+        }
+
+        int compare = type.getType().compareTo(other.type.getType());
+
+        if (compare != 0) {
+            return compare;
+        }
+
+        if (this.local == null) {
+            return (other.local == null) ? 0 : -1;
+        } else if (other.local == null) {
+            return 1;
+        }
+
+        return this.local.compareTo(other.local);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return hashCodeOf(reg, type, local);
+    }
+
+    /**
+     * Helper for {@link #hashCode} and
+     * {@link com.android.dx.rop.code.RegisterSpec.ForComparison#hashCode},
+     * which actually does the calculation.
+     *
+     * @param reg value of the instance variable
+     * @param type value of the instance variable
+     * @param local value of the instance variable
+     * @return the hash code
+     */
+    private static int hashCodeOf(int reg, TypeBearer type, LocalItem local) {
+        int hash = (local != null) ? local.hashCode() : 0;
+
+        hash = (hash * 31 + type.hashCode()) * 31 + reg;
+        return hash;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return toString0(false);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return toString0(true);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return type.getType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeBearer getFrameType() {
+        return type.getFrameType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int getBasicType() {
+        return type.getBasicType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int getBasicFrameType() {
+        return type.getBasicFrameType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean isConstant() {
+        return false;
+    }
+
+    /**
+     * Gets the register number.
+     *
+     * @return {@code >= 0;} the register number
+     */
+    public int getReg() {
+        return reg;
+    }
+
+    /**
+     * Gets the type (or actual value) which is loaded from or stored
+     * to the register associated with this instance.
+     *
+     * @return {@code non-null;} the type
+     */
+    public TypeBearer getTypeBearer() {
+        return type;
+    }
+
+    /**
+     * Gets the variable info associated with this instance, if any.
+     *
+     * @return {@code null-ok;} the variable info, or {@code null} if this
+     * instance has none
+     */
+    public LocalItem getLocalItem() {
+        return local;
+    }
+
+    /**
+     * Gets the next available register number after the one in this
+     * instance. This is equal to the register number plus the width
+     * (category) of the type used. Among other things, this may also
+     * be used to determine the minimum required register count
+     * implied by this instance.
+     *
+     * @return {@code >= 0;} the required registers size
+     */
+    public int getNextReg() {
+        return reg + getCategory();
+    }
+
+    /**
+     * Gets the category of this instance's type. This is just a convenient
+     * shorthand for {@code getType().getCategory()}.
+     *
+     * @see #isCategory1
+     * @see #isCategory2
+     * @return {@code 1..2;} the category of this instance's type
+     */
+    public int getCategory() {
+        return type.getType().getCategory();
+    }
+
+    /**
+     * Gets whether this instance's type is category 1. This is just a
+     * convenient shorthand for {@code getType().isCategory1()}.
+     *
+     * @see #getCategory
+     * @see #isCategory2
+     * @return whether or not this instance's type is of category 1
+     */
+    public boolean isCategory1() {
+        return type.getType().isCategory1();
+    }
+
+    /**
+     * Gets whether this instance's type is category 2. This is just a
+     * convenient shorthand for {@code getType().isCategory2()}.
+     *
+     * @see #getCategory
+     * @see #isCategory1
+     * @return whether or not this instance's type is of category 2
+     */
+    public boolean isCategory2() {
+        return type.getType().isCategory2();
+    }
+
+    /**
+     * Gets the string form for just the register number of this instance.
+     *
+     * @return {@code non-null;} the register string form
+     */
+    public String regString() {
+        return regString(reg);
+    }
+
+    /**
+     * Returns an instance that is the intersection between this instance
+     * and the given one, if any. The intersection is defined as follows:
+     *
+     * <ul>
+     *   <li>If {@code other} is {@code null}, then the result
+     *     is {@code null}.
+     *   <li>If the register numbers don't match, then the intersection
+     *     is {@code null}. Otherwise, the register number of the
+     *     intersection is the same as the one in the two instances.</li>
+     *   <li>If the types returned by {@code getType()} are not
+     *     {@code equals()}, then the intersection is null.</li>
+     *   <li>If the type bearers returned by {@code getTypeBearer()}
+     *     are {@code equals()}, then the intersection's type bearer
+     *     is the one from this instance. Otherwise, the intersection's
+     *     type bearer is the {@code getType()} of this instance.</li>
+     *   <li>If the locals are {@code equals()}, then the local info
+     *     of the intersection is the local info of this instance. Otherwise,
+     *     the local info of the intersection is {@code null}.</li>
+     * </ul>
+     *
+     * @param other {@code null-ok;} instance to intersect with (or {@code null})
+     * @param localPrimary whether local variables are primary to the
+     * intersection; if {@code true}, then the only non-null
+     * results occur when registers being intersected have equal local
+     * infos (or both have {@code null} local infos)
+     * @return {@code null-ok;} the intersection
+     */
+    public RegisterSpec intersect(RegisterSpec other, boolean localPrimary) {
+        if (this == other) {
+            // Easy out.
+            return this;
+        }
+
+        if ((other == null) || (reg != other.getReg())) {
+            return null;
+        }
+
+        LocalItem resultLocal =
+            ((local == null) || !local.equals(other.getLocalItem()))
+            ? null : local;
+        boolean sameName = (resultLocal == local);
+
+        if (localPrimary && !sameName) {
+            return null;
+        }
+
+        Type thisType = getType();
+        Type otherType = other.getType();
+
+        // Note: Types are always interned.
+        if (thisType != otherType) {
+            return null;
+        }
+
+        TypeBearer resultTypeBearer =
+            type.equals(other.getTypeBearer()) ? type : thisType;
+
+        if ((resultTypeBearer == type) && sameName) {
+            // It turns out that the intersection is "this" after all.
+            return this;
+        }
+
+        return (resultLocal == null) ? make(reg, resultTypeBearer) :
+            make(reg, resultTypeBearer, resultLocal);
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that the
+     * register number is replaced by the given one.
+     *
+     * @param newReg {@code >= 0;} the new register number
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpec withReg(int newReg) {
+        if (reg == newReg) {
+            return this;
+        }
+
+        return makeLocalOptional(newReg, type, local);
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * the type is replaced by the given one.
+     *
+     * @param newType {@code non-null;} the new type
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpec withType(TypeBearer newType) {
+        return makeLocalOptional(reg, newType, local);
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that the
+     * register number is offset by the given amount.
+     *
+     * @param delta the amount to offset the register number by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpec withOffset(int delta) {
+        if (delta == 0) {
+            return this;
+        }
+
+        return withReg(reg + delta);
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * the type bearer is replaced by the actual underlying type
+     * (thereby stripping off non-type information) with any
+     * initialization information stripped away as well.
+     *
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpec withSimpleType() {
+        TypeBearer orig = type;
+        Type newType;
+
+        if (orig instanceof Type) {
+            newType = (Type) orig;
+        } else {
+            newType = orig.getType();
+        }
+
+        if (newType.isUninitialized()) {
+            newType = newType.getInitializedType();
+        }
+
+        if (newType == orig) {
+            return this;
+        }
+
+        return makeLocalOptional(reg, newType, local);
+    }
+
+    /**
+     * Returns an instance that is identical to this one except that the
+     * local variable is as specified in the parameter.
+     *
+     * @param local {@code null-ok;} the local item or null for none
+     * @return an appropriate instance
+     */
+    public RegisterSpec withLocalItem(LocalItem local) {
+        if ((this.local== local)
+                    || ((this.local != null) && this.local.equals(local))) {
+
+            return this;
+        }
+
+        return makeLocalOptional(reg, type, local);
+    }
+
+    /**
+     * @return boolean specifying if this instance is an even register or not.
+     */
+    public boolean isEvenRegister() {
+      return ((getReg() & 1) == 0);
+    }
+
+    /**
+     * Helper for {@link #toString} and {@link #toHuman}.
+     *
+     * @param human whether to be human-oriented
+     * @return {@code non-null;} the string form
+     */
+    private String toString0(boolean human) {
+        StringBuilder sb = new StringBuilder(40);
+
+        sb.append(regString());
+        sb.append(":");
+
+        if (local != null) {
+            sb.append(local.toString());
+        }
+
+        Type justType = type.getType();
+        sb.append(justType);
+
+        if (justType != type) {
+            sb.append("=");
+            if (human && (type instanceof CstString)) {
+                sb.append(((CstString) type).toQuoted());
+            } else if (human && (type instanceof Constant)) {
+                sb.append(type.toHuman());
+            } else {
+                sb.append(type);
+            }
+        }
+
+        return sb.toString();
+    }
+
+    public static void clearInternTable() {
+        theInterns.clear();
+    }
+
+    /**
+     * Holder of register spec data for the purposes of comparison (so that
+     * {@code RegisterSpec} itself can still keep {@code final}
+     * instance variables.
+     */
+    private static class ForComparison {
+        /** {@code >= 0;} register number */
+        private int reg;
+
+        /** {@code non-null;} type loaded or stored */
+        private TypeBearer type;
+
+        /**
+         * {@code null-ok;} local variable associated with this
+         * register, if any
+         */
+        private LocalItem local;
+
+        /**
+         * Set all the instance variables.
+         *
+         * @param reg {@code >= 0;} the register number
+         * @param type {@code non-null;} the type (or possibly actual
+         * value) which is loaded from or stored to the indicated
+         * register
+         * @param local {@code null-ok;} the associated local variable, if any
+         * @return {@code non-null;} an appropriately-constructed instance
+         */
+        public void set(int reg, TypeBearer type, LocalItem local) {
+            this.reg = reg;
+            this.type = type;
+            this.local = local;
+        }
+
+        /**
+         * Construct a {@code RegisterSpec} of this instance's
+         * contents.
+         *
+         * @return {@code non-null;} an appropriately-constructed instance
+         */
+        public RegisterSpec toRegisterSpec() {
+            return new RegisterSpec(reg, type, local);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public boolean equals(Object other) {
+            if (!(other instanceof RegisterSpec)) {
+                return false;
+            }
+
+            RegisterSpec spec = (RegisterSpec) other;
+            return spec.equals(reg, type, local);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int hashCode() {
+            return hashCodeOf(reg, type, local);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/RegisterSpecList.java b/dx/src/com/android/dx/rop/code/RegisterSpecList.java
new file mode 100644
index 0000000..1784497
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/RegisterSpecList.java
@@ -0,0 +1,441 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.FixedSizeList;
+import java.util.BitSet;
+
+/**
+ * List of {@link RegisterSpec} instances.
+ */
+public final class RegisterSpecList
+        extends FixedSizeList implements TypeList {
+    /** {@code non-null;} no-element instance */
+    public static final RegisterSpecList EMPTY = new RegisterSpecList(0);
+
+    /**
+     * Makes a single-element instance.
+     *
+     * @param spec {@code non-null;} the element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static RegisterSpecList make(RegisterSpec spec) {
+        RegisterSpecList result = new RegisterSpecList(1);
+        result.set(0, spec);
+        return result;
+    }
+
+    /**
+     * Makes a two-element instance.
+     *
+     * @param spec0 {@code non-null;} the first element
+     * @param spec1 {@code non-null;} the second element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static RegisterSpecList make(RegisterSpec spec0,
+                                        RegisterSpec spec1) {
+        RegisterSpecList result = new RegisterSpecList(2);
+        result.set(0, spec0);
+        result.set(1, spec1);
+        return result;
+    }
+
+    /**
+     * Makes a three-element instance.
+     *
+     * @param spec0 {@code non-null;} the first element
+     * @param spec1 {@code non-null;} the second element
+     * @param spec2 {@code non-null;} the third element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static RegisterSpecList make(RegisterSpec spec0, RegisterSpec spec1,
+                                        RegisterSpec spec2) {
+        RegisterSpecList result = new RegisterSpecList(3);
+        result.set(0, spec0);
+        result.set(1, spec1);
+        result.set(2, spec2);
+        return result;
+    }
+
+    /**
+     * Makes a four-element instance.
+     *
+     * @param spec0 {@code non-null;} the first element
+     * @param spec1 {@code non-null;} the second element
+     * @param spec2 {@code non-null;} the third element
+     * @param spec3 {@code non-null;} the fourth element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static RegisterSpecList make(RegisterSpec spec0, RegisterSpec spec1,
+                                        RegisterSpec spec2,
+                                        RegisterSpec spec3) {
+        RegisterSpecList result = new RegisterSpecList(4);
+        result.set(0, spec0);
+        result.set(1, spec1);
+        result.set(2, spec2);
+        result.set(3, spec3);
+        return result;
+    }
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     */
+    public RegisterSpecList(int size) {
+        super(size);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType(int n) {
+        return get(n).getType().getType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getWordCount() {
+        int sz = size();
+        int result = 0;
+
+        for (int i = 0; i < sz; i++) {
+            result += getType(i).getCategory();
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList withAddedType(Type type) {
+        throw new UnsupportedOperationException("unsupported");
+    }
+
+    /**
+     * Gets the indicated element. It is an error to call this with the
+     * index for an element which was never set; if you do that, this
+     * will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @return {@code non-null;} the indicated element
+     */
+    public RegisterSpec get(int n) {
+        return (RegisterSpec) get0(n);
+    }
+
+    /**
+     * Returns a RegisterSpec in this list that uses the specified register,
+     * or null if there is none in this list.
+     * @param reg Register to find
+     * @return RegisterSpec that uses argument or null.
+     */
+    public RegisterSpec specForRegister(int reg) {
+        int sz = size();
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec rs;
+
+            rs = get(i);
+
+            if (rs.getReg() == reg) {
+                return rs;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the index of a RegisterSpec in this list that uses the specified
+     * register, or -1 if none in this list uses the register.
+     * @param reg Register to find
+     * @return index of RegisterSpec or -1
+     */
+    public int indexOfRegister(int reg) {
+        int sz = size();
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec rs;
+
+            rs = get(i);
+
+            if (rs.getReg() == reg) {
+                return i;
+            }
+        }
+
+        return -1;
+    }
+
+    /**
+     * Sets the element at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param spec {@code non-null;} the value to store
+     */
+    public void set(int n, RegisterSpec spec) {
+        set0(n, spec);
+    }
+
+    /**
+     * Gets the minimum required register count implied by this
+     * instance. This is equal to the highest register number referred
+     * to plus the widest width (largest category) of the type used in
+     * that register.
+     *
+     * @return {@code >= 0;} the required registers size
+     */
+    public int getRegistersSize() {
+        int sz = size();
+        int result = 0;
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec spec = (RegisterSpec) get0(i);
+            if (spec != null) {
+                int min = spec.getNextReg();
+                if (min > result) {
+                    result = min;
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns a new instance, which is the same as this instance,
+     * except that it has an additional element prepended to the original.
+     * Mutability of the result is inherited from the original.
+     *
+     * @param spec {@code non-null;} the new first spec (to prepend)
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpecList withFirst(RegisterSpec spec) {
+        int sz = size();
+        RegisterSpecList result = new RegisterSpecList(sz + 1);
+
+        for (int i = 0; i < sz; i++) {
+            result.set0(i + 1, get0(i));
+        }
+
+        result.set0(0, spec);
+        if (isImmutable()) {
+            result.setImmutable();
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns a new instance, which is the same as this instance,
+     * except that its first element is removed. Mutability of the
+     * result is inherited from the original.
+     *
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpecList withoutFirst() {
+        int newSize = size() - 1;
+
+        if (newSize == 0) {
+            return EMPTY;
+        }
+
+        RegisterSpecList result = new RegisterSpecList(newSize);
+
+        for (int i = 0; i < newSize; i++) {
+            result.set0(i, get0(i + 1));
+        }
+
+        if (isImmutable()) {
+            result.setImmutable();
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns a new instance, which is the same as this instance,
+     * except that its last element is removed. Mutability of the
+     * result is inherited from the original.
+     *
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpecList withoutLast() {
+        int newSize = size() - 1;
+
+        if (newSize == 0) {
+            return EMPTY;
+        }
+
+        RegisterSpecList result = new RegisterSpecList(newSize);
+
+        for (int i = 0; i < newSize; i++) {
+            result.set0(i, get0(i));
+        }
+
+        if (isImmutable()) {
+            result.setImmutable();
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns a new instance, which contains a subset of the elements
+     * specified by the given BitSet. Indexes in the BitSet with a zero
+     * are included, while indexes with a one are excluded. Mutability
+     * of the result is inherited from the original.
+     *
+     * @param exclusionSet {@code non-null;} set of registers to exclude
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpecList subset(BitSet exclusionSet) {
+        int newSize = size() - exclusionSet.cardinality();
+
+        if (newSize == 0) {
+            return EMPTY;
+        }
+
+        RegisterSpecList result = new RegisterSpecList(newSize);
+
+        int newIndex = 0;
+        for (int oldIndex = 0; oldIndex < size(); oldIndex++) {
+            if (!exclusionSet.get(oldIndex)) {
+                result.set0(newIndex, get0(oldIndex));
+                newIndex++;
+            }
+        }
+
+        if (isImmutable()) {
+            result.setImmutable();
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * all register numbers are offset by the given amount. Mutability
+     * of the result is inherited from the original.
+     *
+     * @param delta the amount to offset the register numbers by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpecList withOffset(int delta) {
+        int sz = size();
+
+        if (sz == 0) {
+            // Don't bother making a new zero-element instance.
+            return this;
+        }
+
+        RegisterSpecList result = new RegisterSpecList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec one = (RegisterSpec) get0(i);
+            if (one != null) {
+                result.set0(i, one.withOffset(delta));
+            }
+        }
+
+        if (isImmutable()) {
+            result.setImmutable();
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * all incompatible register numbers are renumbered sequentially from
+     * the given base, with the first number duplicated if indicated. If
+     * a null BitSet is given, it indicates all registers are incompatible.
+     *
+     * @param base the base register number
+     * @param duplicateFirst whether to duplicate the first number
+     * @param compatRegs {@code null-ok;} either a {@code non-null} set of
+     * compatible registers, or {@code null} to indicate all registers are
+     * incompatible
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpecList withExpandedRegisters(int base,
+                                                  boolean duplicateFirst,
+                                                  BitSet compatRegs) {
+        int sz = size();
+
+        if (sz == 0) {
+            // Don't bother making a new zero-element instance.
+            return this;
+        }
+
+        Expander expander = new Expander(this, compatRegs, base, duplicateFirst);
+
+        for (int regIdx = 0; regIdx < sz; regIdx++) {
+          expander.expandRegister(regIdx);
+        }
+
+        return expander.getResult();
+    }
+
+    private static class Expander {
+      private final BitSet compatRegs;
+      private final RegisterSpecList regSpecList;
+      private int base;
+      private final RegisterSpecList result;
+      private boolean duplicateFirst;
+
+      private Expander(RegisterSpecList regSpecList, BitSet compatRegs, int base,
+          boolean duplicateFirst) {
+        this.regSpecList = regSpecList;
+        this.compatRegs = compatRegs;
+        this.base = base;
+        this.result = new RegisterSpecList(regSpecList.size());
+        this.duplicateFirst = duplicateFirst;
+      }
+
+      private void expandRegister(int regIdx) {
+        expandRegister(regIdx, (RegisterSpec) regSpecList.get0(regIdx));
+      }
+
+      private void expandRegister(int regIdx, RegisterSpec registerToExpand) {
+        boolean replace = (compatRegs == null) ? true : !compatRegs.get(regIdx);
+        RegisterSpec expandedReg;
+
+        if (replace) {
+          expandedReg = registerToExpand.withReg(base);
+          if (!duplicateFirst) {
+            base += expandedReg.getCategory();
+          }
+        } else {
+          expandedReg = registerToExpand;
+        }
+
+        // Reset duplicateFirst when the first register has been dealt with.
+        duplicateFirst = false;
+
+        result.set0(regIdx, expandedReg);
+      }
+
+      private RegisterSpecList getResult() {
+        if (regSpecList.isImmutable()) {
+          result.setImmutable();
+        }
+
+        return result;
+      }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/RegisterSpecSet.java b/dx/src/com/android/dx/rop/code/RegisterSpecSet.java
new file mode 100644
index 0000000..7ba5efc
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/RegisterSpecSet.java
@@ -0,0 +1,396 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.util.MutabilityControl;
+
+/**
+ * Set of {@link RegisterSpec} instances, where a given register number
+ * may appear only once in the set.
+ */
+public final class RegisterSpecSet
+        extends MutabilityControl {
+    /** {@code non-null;} no-element instance */
+    public static final RegisterSpecSet EMPTY = new RegisterSpecSet(0);
+
+    /**
+     * {@code non-null;} array of register specs, where each element is
+     * {@code null} or is an instance whose {@code reg}
+     * matches the array index
+     */
+    private final RegisterSpec[] specs;
+
+    /** {@code >= -1;} size of the set or {@code -1} if not yet calculated */
+    private int size;
+
+    /**
+     * Constructs an instance. The instance is initially empty.
+     *
+     * @param maxSize {@code >= 0;} the maximum register number (exclusive) that
+     * may be represented in this instance
+     */
+    public RegisterSpecSet(int maxSize) {
+        super(maxSize != 0);
+
+        this.specs = new RegisterSpec[maxSize];
+        this.size = 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof RegisterSpecSet)) {
+            return false;
+        }
+
+        RegisterSpecSet otherSet = (RegisterSpecSet) other;
+        RegisterSpec[] otherSpecs = otherSet.specs;
+        int len = specs.length;
+
+        if ((len != otherSpecs.length) || (size() != otherSet.size())) {
+            return false;
+        }
+
+        for (int i = 0; i < len; i++) {
+            RegisterSpec s1 = specs[i];
+            RegisterSpec s2 = otherSpecs[i];
+
+            if (s1 == s2) {
+                continue;
+            }
+
+            if ((s1 == null) || !s1.equals(s2)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        int len = specs.length;
+        int hash = 0;
+
+        for (int i = 0; i < len; i++) {
+            RegisterSpec spec = specs[i];
+            int oneHash = (spec == null) ? 0 : spec.hashCode();
+            hash = (hash * 31) + oneHash;
+        }
+
+        return hash;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        int len = specs.length;
+        StringBuilder sb = new StringBuilder(len * 25);
+
+        sb.append('{');
+
+        boolean any = false;
+        for (int i = 0; i < len; i++) {
+            RegisterSpec spec = specs[i];
+            if (spec != null) {
+                if (any) {
+                    sb.append(", ");
+                } else {
+                    any = true;
+                }
+                sb.append(spec);
+            }
+        }
+
+        sb.append('}');
+        return sb.toString();
+    }
+
+    /**
+     * Gets the maximum number of registers that may be in this instance, which
+     * is also the maximum-plus-one of register numbers that may be
+     * represented.
+     *
+     * @return {@code >= 0;} the maximum size
+     */
+    public int getMaxSize() {
+        return specs.length;
+    }
+
+    /**
+     * Gets the current size of this instance.
+     *
+     * @return {@code >= 0;} the size
+     */
+    public int size() {
+        int result = size;
+
+        if (result < 0) {
+            int len = specs.length;
+
+            result = 0;
+            for (int i = 0; i < len; i++) {
+                if (specs[i] != null) {
+                    result++;
+                }
+            }
+
+            size = result;
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the element with the given register number, if any.
+     *
+     * @param reg {@code >= 0;} the desired register number
+     * @return {@code null-ok;} the element with the given register number or
+     * {@code null} if there is none
+     */
+    public RegisterSpec get(int reg) {
+        try {
+            return specs[reg];
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("bogus reg");
+        }
+    }
+
+    /**
+     * Gets the element with the same register number as the given
+     * spec, if any. This is just a convenient shorthand for
+     * {@code get(spec.getReg())}.
+     *
+     * @param spec {@code non-null;} spec with the desired register number
+     * @return {@code null-ok;} the element with the matching register number or
+     * {@code null} if there is none
+     */
+    public RegisterSpec get(RegisterSpec spec) {
+        return get(spec.getReg());
+    }
+
+    /**
+     * Returns the spec in this set that's currently associated with a
+     * given local (type, name, and signature), or {@code null} if there is
+     * none. This ignores the register number of the given spec but
+     * matches on everything else.
+     *
+     * @param spec {@code non-null;} local to look for
+     * @return {@code null-ok;} first register found that matches, if any
+     */
+    public RegisterSpec findMatchingLocal(RegisterSpec spec) {
+        int length = specs.length;
+
+        for (int reg = 0; reg < length; reg++) {
+            RegisterSpec s = specs[reg];
+
+            if (s == null) {
+                continue;
+            }
+
+            if (spec.matchesVariable(s)) {
+                return s;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the spec in this set that's currently associated with a given
+     * local (name and signature), or {@code null} if there is none.
+     *
+     * @param local {@code non-null;} local item to search for
+     * @return {@code null-ok;} first register found with matching name and signature
+     */
+    public RegisterSpec localItemToSpec(LocalItem local) {
+        int length = specs.length;
+
+        for (int reg = 0; reg < length; reg++) {
+            RegisterSpec spec = specs[reg];
+
+            if ((spec != null) && local.equals(spec.getLocalItem())) {
+                return spec;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Removes a spec from the set. Only the register number
+     * of the parameter is significant.
+     *
+     * @param toRemove {@code non-null;} register to remove.
+     */
+    public void remove(RegisterSpec toRemove) {
+        try {
+            specs[toRemove.getReg()] = null;
+            size = -1;
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("bogus reg");
+        }
+    }
+
+    /**
+     * Puts the given spec into the set. If there is already an element in
+     * the set with the same register number, it is replaced. Additionally,
+     * if the previous element is for a category-2 register, then that
+     * previous element is nullified. Finally, if the given spec is for
+     * a category-2 register, then the immediately subsequent element
+     * is nullified.
+     *
+     * @param spec {@code non-null;} the register spec to put in the instance
+     */
+    public void put(RegisterSpec spec) {
+        throwIfImmutable();
+
+        if (spec == null) {
+            throw new NullPointerException("spec == null");
+        }
+
+        size = -1;
+
+        try {
+            int reg = spec.getReg();
+            specs[reg] = spec;
+
+            if (reg > 0) {
+                int prevReg = reg - 1;
+                RegisterSpec prevSpec = specs[prevReg];
+                if ((prevSpec != null) && (prevSpec.getCategory() == 2)) {
+                    specs[prevReg] = null;
+                }
+            }
+
+            if (spec.getCategory() == 2) {
+                specs[reg + 1] = null;
+            }
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("spec.getReg() out of range");
+        }
+    }
+
+    /**
+     * Put the entire contents of the given set into this one.
+     *
+     * @param set {@code non-null;} the set to put into this instance
+     */
+    public void putAll(RegisterSpecSet set) {
+        int max = set.getMaxSize();
+
+        for (int i = 0; i < max; i++) {
+            RegisterSpec spec = set.get(i);
+            if (spec != null) {
+                put(spec);
+            }
+        }
+    }
+
+    /**
+     * Intersects this instance with the given one, modifying this
+     * instance. The intersection consists of the pairwise
+     * {@link RegisterSpec#intersect} of corresponding elements from
+     * this instance and the given one where both are non-null.
+     *
+     * @param other {@code non-null;} set to intersect with
+     * @param localPrimary whether local variables are primary to
+     * the intersection; if {@code true}, then the only non-null
+     * result elements occur when registers being intersected have
+     * equal names (or both have {@code null} names)
+     */
+    public void intersect(RegisterSpecSet other, boolean localPrimary) {
+        throwIfImmutable();
+
+        RegisterSpec[] otherSpecs = other.specs;
+        int thisLen = specs.length;
+        int len = Math.min(thisLen, otherSpecs.length);
+
+        size = -1;
+
+        for (int i = 0; i < len; i++) {
+            RegisterSpec spec = specs[i];
+
+            if (spec == null) {
+                continue;
+            }
+
+            RegisterSpec intersection =
+                spec.intersect(otherSpecs[i], localPrimary);
+            if (intersection != spec) {
+                specs[i] = intersection;
+            }
+        }
+
+        for (int i = len; i < thisLen; i++) {
+            specs[i] = null;
+        }
+    }
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * all register numbers are offset by the given amount. Mutability
+     * of the result is inherited from the original.
+     *
+     * @param delta the amount to offset the register numbers by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RegisterSpecSet withOffset(int delta) {
+        int len = specs.length;
+        RegisterSpecSet result = new RegisterSpecSet(len + delta);
+
+        for (int i = 0; i < len; i++) {
+            RegisterSpec spec = specs[i];
+            if (spec != null) {
+                result.put(spec.withOffset(delta));
+            }
+        }
+
+        result.size = size;
+
+        if (isImmutable()) {
+            result.setImmutable();
+        }
+
+        return result;
+    }
+
+    /**
+     * Makes and return a mutable copy of this instance.
+     *
+     * @return {@code non-null;} the mutable copy
+     */
+    public RegisterSpecSet mutableCopy() {
+        int len = specs.length;
+        RegisterSpecSet copy = new RegisterSpecSet(len);
+
+        for (int i = 0; i < len; i++) {
+            RegisterSpec spec = specs[i];
+            if (spec != null) {
+                copy.put(spec);
+            }
+        }
+
+        copy.size = size;
+
+        return copy;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/Rop.java b/dx/src/com/android/dx/rop/code/Rop.java
new file mode 100644
index 0000000..3e7148f
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/Rop.java
@@ -0,0 +1,407 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.Hex;
+
+/**
+ * Class that describes all the immutable parts of register-based operations.
+ */
+public final class Rop {
+    /** minimum {@code BRANCH_*} value */
+    public static final int BRANCH_MIN = 1;
+
+    /** indicates a non-branching op */
+    public static final int BRANCH_NONE = 1;
+
+    /** indicates a function/method return */
+    public static final int BRANCH_RETURN = 2;
+
+    /** indicates an unconditional goto */
+    public static final int BRANCH_GOTO = 3;
+
+    /** indicates a two-way branch */
+    public static final int BRANCH_IF = 4;
+
+    /** indicates a switch-style branch */
+    public static final int BRANCH_SWITCH = 5;
+
+    /** indicates a throw-style branch (both always-throws and may-throw) */
+    public static final int BRANCH_THROW = 6;
+
+    /** maximum {@code BRANCH_*} value */
+    public static final int BRANCH_MAX = 6;
+
+    /** the opcode; one of the constants in {@link RegOps} */
+    private final int opcode;
+
+    /**
+     * {@code non-null;} result type of this operation; {@link Type#VOID} for
+     * no-result operations
+     */
+    private final Type result;
+
+    /** {@code non-null;} types of all the sources of this operation */
+    private final TypeList sources;
+
+    /** {@code non-null;} list of possible types thrown by this operation */
+    private final TypeList exceptions;
+
+    /**
+     * the branchingness of this op; one of the {@code BRANCH_*}
+     * constants in this class
+     */
+    private final int branchingness;
+
+    /** whether this is a function/method call op or similar */
+    private final boolean isCallLike;
+
+    /** {@code null-ok;} nickname, if specified (used for debugging) */
+    private final String nickname;
+
+    /**
+     * Constructs an instance. This method is private. Use one of the
+     * public constructors.
+     *
+     * @param opcode the opcode; one of the constants in {@link RegOps}
+     * @param result {@code non-null;} result type of this operation; {@link
+     * Type#VOID} for no-result operations
+     * @param sources {@code non-null;} types of all the sources of this operation
+     * @param exceptions {@code non-null;} list of possible types thrown by this
+     * operation
+     * @param branchingness the branchingness of this op; one of the
+     * {@code BRANCH_*} constants
+     * @param isCallLike whether the op is a function/method call or similar
+     * @param nickname {@code null-ok;} optional nickname (used for debugging)
+     */
+    public Rop(int opcode, Type result, TypeList sources,
+               TypeList exceptions, int branchingness, boolean isCallLike,
+               String nickname) {
+        if (result == null) {
+            throw new NullPointerException("result == null");
+        }
+
+        if (sources == null) {
+            throw new NullPointerException("sources == null");
+        }
+
+        if (exceptions == null) {
+            throw new NullPointerException("exceptions == null");
+        }
+
+        if ((branchingness < BRANCH_MIN) || (branchingness > BRANCH_MAX)) {
+            throw new IllegalArgumentException("invalid branchingness: " + branchingness);
+        }
+
+        if ((exceptions.size() != 0) && (branchingness != BRANCH_THROW)) {
+            throw new IllegalArgumentException("exceptions / branchingness " +
+                                               "mismatch");
+        }
+
+        this.opcode = opcode;
+        this.result = result;
+        this.sources = sources;
+        this.exceptions = exceptions;
+        this.branchingness = branchingness;
+        this.isCallLike = isCallLike;
+        this.nickname = nickname;
+    }
+
+    /**
+     * Constructs an instance. The constructed instance is never a
+     * call-like op (see {@link #isCallLike}).
+     *
+     * @param opcode the opcode; one of the constants in {@link RegOps}
+     * @param result {@code non-null;} result type of this operation; {@link
+     * Type#VOID} for no-result operations
+     * @param sources {@code non-null;} types of all the sources of this operation
+     * @param exceptions {@code non-null;} list of possible types thrown by this
+     * operation
+     * @param branchingness the branchingness of this op; one of the
+     * {@code BRANCH_*} constants
+     * @param nickname {@code null-ok;} optional nickname (used for debugging)
+     */
+    public Rop(int opcode, Type result, TypeList sources,
+               TypeList exceptions, int branchingness, String nickname) {
+        this(opcode, result, sources, exceptions, branchingness, false,
+             nickname);
+    }
+
+    /**
+     * Constructs a no-exception instance. The constructed instance is never a
+     * call-like op (see {@link #isCallLike}).
+     *
+     * @param opcode the opcode; one of the constants in {@link RegOps}
+     * @param result {@code non-null;} result type of this operation; {@link
+     * Type#VOID} for no-result operations
+     * @param sources {@code non-null;} types of all the sources of this operation
+     * @param branchingness the branchingness of this op; one of the
+     * {@code BRANCH_*} constants
+     * @param nickname {@code null-ok;} optional nickname (used for debugging)
+     */
+    public Rop(int opcode, Type result, TypeList sources, int branchingness,
+               String nickname) {
+        this(opcode, result, sources, StdTypeList.EMPTY, branchingness, false,
+             nickname);
+    }
+
+    /**
+     * Constructs a non-branching no-exception instance. The
+     * {@code branchingness} is always {@code BRANCH_NONE},
+     * and it is never a call-like op (see {@link #isCallLike}).
+     *
+     * @param opcode the opcode; one of the constants in {@link RegOps}
+     * @param result {@code non-null;} result type of this operation; {@link
+     * Type#VOID} for no-result operations
+     * @param sources {@code non-null;} types of all the sources of this operation
+     * @param nickname {@code null-ok;} optional nickname (used for debugging)
+     */
+    public Rop(int opcode, Type result, TypeList sources, String nickname) {
+        this(opcode, result, sources, StdTypeList.EMPTY, Rop.BRANCH_NONE,
+             false, nickname);
+    }
+
+    /**
+     * Constructs a non-empty exceptions instance. Its
+     * {@code branchingness} is always {@code BRANCH_THROW},
+     * but it is never a call-like op (see {@link #isCallLike}).
+     *
+     * @param opcode the opcode; one of the constants in {@link RegOps}
+     * @param result {@code non-null;} result type of this operation; {@link
+     * Type#VOID} for no-result operations
+     * @param sources {@code non-null;} types of all the sources of this operation
+     * @param exceptions {@code non-null;} list of possible types thrown by this
+     * operation
+     * @param nickname {@code null-ok;} optional nickname (used for debugging)
+     */
+    public Rop(int opcode, Type result, TypeList sources, TypeList exceptions,
+               String nickname) {
+        this(opcode, result, sources, exceptions, Rop.BRANCH_THROW, false,
+             nickname);
+    }
+
+    /**
+     * Constructs a non-nicknamed instance with non-empty exceptions, which
+     * is always a call-like op (see {@link #isCallLike}). Its
+     * {@code branchingness} is always {@code BRANCH_THROW}.
+     *
+     * @param opcode the opcode; one of the constants in {@link RegOps}
+     * @param sources {@code non-null;} types of all the sources of this operation
+     * @param exceptions {@code non-null;} list of possible types thrown by this
+     * operation
+     */
+    public Rop(int opcode, TypeList sources, TypeList exceptions) {
+        this(opcode, Type.VOID, sources, exceptions, Rop.BRANCH_THROW, true,
+             null);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            // Easy out.
+            return true;
+        }
+
+        if (!(other instanceof Rop)) {
+            return false;
+        }
+
+        Rop rop = (Rop) other;
+
+        return (opcode == rop.opcode) &&
+            (branchingness == rop.branchingness) &&
+            (result == rop.result) &&
+            sources.equals(rop.sources) &&
+            exceptions.equals(rop.exceptions);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        int h = (opcode * 31) + branchingness;
+        h = (h * 31) + result.hashCode();
+        h = (h * 31) + sources.hashCode();
+        h = (h * 31) + exceptions.hashCode();
+
+        return h;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(40);
+
+        sb.append("Rop{");
+
+        sb.append(RegOps.opName(opcode));
+
+        if (result != Type.VOID) {
+            sb.append(" ");
+            sb.append(result);
+        } else {
+            sb.append(" .");
+        }
+
+        sb.append(" <-");
+
+        int sz = sources.size();
+        if (sz == 0) {
+            sb.append(" .");
+        } else {
+            for (int i = 0; i < sz; i++) {
+                sb.append(' ');
+                sb.append(sources.getType(i));
+            }
+        }
+
+        if (isCallLike) {
+            sb.append(" call");
+        }
+
+        sz = exceptions.size();
+        if (sz != 0) {
+            sb.append(" throws");
+            for (int i = 0; i < sz; i++) {
+                sb.append(' ');
+                Type one = exceptions.getType(i);
+                if (one == Type.THROWABLE) {
+                    sb.append("<any>");
+                } else {
+                    sb.append(exceptions.getType(i));
+                }
+            }
+        } else {
+            switch (branchingness) {
+                case BRANCH_NONE:   sb.append(" flows"); break;
+                case BRANCH_RETURN: sb.append(" returns"); break;
+                case BRANCH_GOTO:   sb.append(" gotos"); break;
+                case BRANCH_IF:     sb.append(" ifs"); break;
+                case BRANCH_SWITCH: sb.append(" switches"); break;
+                default: sb.append(" " + Hex.u1(branchingness)); break;
+            }
+        }
+
+        sb.append('}');
+
+        return sb.toString();
+    }
+
+    /**
+     * Gets the opcode.
+     *
+     * @return the opcode
+     */
+    public int getOpcode() {
+        return opcode;
+    }
+
+    /**
+     * Gets the result type. A return value of {@link Type#VOID}
+     * means this operation returns nothing.
+     *
+     * @return {@code null-ok;} the result spec
+     */
+    public Type getResult() {
+        return result;
+    }
+
+    /**
+     * Gets the source types.
+     *
+     * @return {@code non-null;} the source types
+     */
+    public TypeList getSources() {
+        return sources;
+    }
+
+    /**
+     * Gets the list of exception types that might be thrown.
+     *
+     * @return {@code non-null;} the list of exception types
+     */
+    public TypeList getExceptions() {
+        return exceptions;
+    }
+
+    /**
+     * Gets the branchingness of this instance.
+     *
+     * @return the branchingness
+     */
+    public int getBranchingness() {
+        return branchingness;
+    }
+
+    /**
+     * Gets whether this opcode is a function/method call or similar.
+     *
+     * @return {@code true} iff this opcode is call-like
+     */
+    public boolean isCallLike() {
+        return isCallLike;
+    }
+
+
+    /**
+     * Gets whether this opcode is commutative (the order of its sources are
+     * unimportant) or not. All commutative Rops have exactly two sources and
+     * have no branchiness.
+     *
+     * @return true if rop is commutative
+     */
+    public boolean isCommutative() {
+        switch (opcode) {
+            case RegOps.AND:
+            case RegOps.OR:
+            case RegOps.XOR:
+            case RegOps.ADD:
+            case RegOps.MUL:
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Gets the nickname. If this instance has no nickname, this returns
+     * the result of calling {@link #toString}.
+     *
+     * @return {@code non-null;} the nickname
+     */
+    public String getNickname() {
+        if (nickname != null) {
+            return nickname;
+        }
+
+        return toString();
+    }
+
+    /**
+     * Gets whether this operation can possibly throw an exception. This
+     * is just a convenient wrapper for
+     * {@code getExceptions().size() != 0}.
+     *
+     * @return {@code true} iff this operation can possibly throw
+     */
+    public final boolean canThrow() {
+        return (exceptions.size() != 0);
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/RopMethod.java b/dx/src/com/android/dx/rop/code/RopMethod.java
new file mode 100644
index 0000000..f1643c1
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/RopMethod.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+
+/**
+ * All of the parts that make up a method at the rop layer.
+ */
+public final class RopMethod {
+    /** {@code non-null;} basic block list of the method */
+    private final BasicBlockList blocks;
+
+    /** {@code >= 0;} label for the block which starts the method */
+    private final int firstLabel;
+
+    /**
+     * {@code null-ok;} array of predecessors for each block, indexed by block
+     * label
+     */
+    private IntList[] predecessors;
+
+    /**
+     * {@code null-ok;} the predecessors for the implicit "exit" block, that is
+     * the labels for the blocks that return, if calculated
+     */
+    private IntList exitPredecessors;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param blocks {@code non-null;} basic block list of the method
+     * @param firstLabel {@code >= 0;} the label of the first block to execute
+     */
+    public RopMethod(BasicBlockList blocks, int firstLabel) {
+        if (blocks == null) {
+            throw new NullPointerException("blocks == null");
+        }
+
+        if (firstLabel < 0) {
+            throw new IllegalArgumentException("firstLabel < 0");
+        }
+
+        this.blocks = blocks;
+        this.firstLabel = firstLabel;
+
+        this.predecessors = null;
+        this.exitPredecessors = null;
+    }
+
+    /**
+     * Gets the basic block list for this method.
+     *
+     * @return {@code non-null;} the list
+     */
+    public BasicBlockList getBlocks() {
+        return blocks;
+    }
+
+    /**
+     * Gets the label for the first block in the method that this list
+     * represents.
+     *
+     * @return {@code >= 0;} the first-block label
+     */
+    public int getFirstLabel() {
+        return firstLabel;
+    }
+
+    /**
+     * Gets the predecessors associated with the given block. This throws
+     * an exception if there is no block with the given label.
+     *
+     * @param label {@code >= 0;} the label of the block in question
+     * @return {@code non-null;} the predecessors of that block
+     */
+    public IntList labelToPredecessors(int label) {
+        if (exitPredecessors == null) {
+            calcPredecessors();
+        }
+
+        IntList result = predecessors[label];
+
+        if (result == null) {
+            throw new RuntimeException("no such block: " + Hex.u2(label));
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the exit predecessors for this instance.
+     *
+     * @return {@code non-null;} the exit predecessors
+     */
+    public IntList getExitPredecessors() {
+        if (exitPredecessors == null) {
+            calcPredecessors();
+        }
+
+        return exitPredecessors;
+    }
+
+
+    /**
+     * Returns an instance that is identical to this one, except that
+     * the registers in each instruction are offset by the given
+     * amount.
+     *
+     * @param delta the amount to offset register numbers by
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public RopMethod withRegisterOffset(int delta) {
+        RopMethod result = new RopMethod(blocks.withRegisterOffset(delta),
+                                         firstLabel);
+
+        if (exitPredecessors != null) {
+            /*
+             * The predecessors have been calculated. It's safe to
+             * inject these into the new instance, since the
+             * transformation being applied doesn't affect the
+             * predecessors.
+             */
+            result.exitPredecessors = exitPredecessors;
+            result.predecessors = predecessors;
+        }
+
+        return result;
+    }
+
+    /**
+     * Calculates the predecessor sets for each block as well as for the
+     * exit.
+     */
+    private void calcPredecessors() {
+        int maxLabel = blocks.getMaxLabel();
+        IntList[] predecessors = new IntList[maxLabel];
+        IntList exitPredecessors = new IntList(10);
+        int sz = blocks.size();
+
+        /*
+         * For each block, find its successors, and add the block's label to
+         * the successor's predecessors.
+         */
+        for (int i = 0; i < sz; i++) {
+            BasicBlock one = blocks.get(i);
+            int label = one.getLabel();
+            IntList successors = one.getSuccessors();
+            int ssz = successors.size();
+            if (ssz == 0) {
+                // This block exits.
+                exitPredecessors.add(label);
+            } else {
+                for (int j = 0; j < ssz; j++) {
+                    int succLabel = successors.get(j);
+                    IntList succPreds = predecessors[succLabel];
+                    if (succPreds == null) {
+                        succPreds = new IntList(10);
+                        predecessors[succLabel] = succPreds;
+                    }
+                    succPreds.add(label);
+                }
+            }
+        }
+
+        // Sort and immutablize all the predecessor lists.
+        for (int i = 0; i < maxLabel; i++) {
+            IntList preds = predecessors[i];
+            if (preds != null) {
+                preds.sort();
+                preds.setImmutable();
+            }
+        }
+
+        exitPredecessors.sort();
+        exitPredecessors.setImmutable();
+
+        /*
+         * The start label might not ever have had any predecessors
+         * added to it (probably doesn't, because of how Java gets
+         * translated into rop form). So, check for this and rectify
+         * the situation if required.
+         */
+        if (predecessors[firstLabel] == null) {
+            predecessors[firstLabel] = IntList.EMPTY;
+        }
+
+        this.predecessors = predecessors;
+        this.exitPredecessors = exitPredecessors;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/Rops.java b/dx/src/com/android/dx/rop/code/Rops.java
new file mode 100644
index 0000000..66d0ed9
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/Rops.java
@@ -0,0 +1,2131 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstBaseMethodRef;
+import com.android.dx.rop.cst.CstCallSiteRef;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.rop.type.TypeList;
+
+/**
+ * Standard instances of {@link Rop}.
+ */
+public final class Rops {
+    /** {@code nop()} */
+    public static final Rop NOP =
+        new Rop(RegOps.NOP, Type.VOID, StdTypeList.EMPTY, "nop");
+
+    /** {@code r,x: int :: r = x;} */
+    public static final Rop MOVE_INT =
+        new Rop(RegOps.MOVE, Type.INT, StdTypeList.INT, "move-int");
+
+    /** {@code r,x: long :: r = x;} */
+    public static final Rop MOVE_LONG =
+        new Rop(RegOps.MOVE, Type.LONG, StdTypeList.LONG, "move-long");
+
+    /** {@code r,x: float :: r = x;} */
+    public static final Rop MOVE_FLOAT =
+        new Rop(RegOps.MOVE, Type.FLOAT, StdTypeList.FLOAT, "move-float");
+
+    /** {@code r,x: double :: r = x;} */
+    public static final Rop MOVE_DOUBLE =
+        new Rop(RegOps.MOVE, Type.DOUBLE, StdTypeList.DOUBLE, "move-double");
+
+    /** {@code r,x: Object :: r = x;} */
+    public static final Rop MOVE_OBJECT =
+        new Rop(RegOps.MOVE, Type.OBJECT, StdTypeList.OBJECT, "move-object");
+
+    /**
+     * {@code r,x: ReturnAddress :: r = x;}
+     *
+     * Note that this rop-form instruction has no dex-form equivilent and
+     * must be removed before the dex conversion.
+     */
+    public static final Rop MOVE_RETURN_ADDRESS =
+        new Rop(RegOps.MOVE, Type.RETURN_ADDRESS,
+                StdTypeList.RETURN_ADDRESS, "move-return-address");
+
+    /** {@code r,param(x): int :: r = param(x);} */
+    public static final Rop MOVE_PARAM_INT =
+        new Rop(RegOps.MOVE_PARAM, Type.INT, StdTypeList.EMPTY,
+                "move-param-int");
+
+    /** {@code r,param(x): long :: r = param(x);} */
+    public static final Rop MOVE_PARAM_LONG =
+        new Rop(RegOps.MOVE_PARAM, Type.LONG, StdTypeList.EMPTY,
+                "move-param-long");
+
+    /** {@code r,param(x): float :: r = param(x);} */
+    public static final Rop MOVE_PARAM_FLOAT =
+        new Rop(RegOps.MOVE_PARAM, Type.FLOAT, StdTypeList.EMPTY,
+                "move-param-float");
+
+    /** {@code r,param(x): double :: r = param(x);} */
+    public static final Rop MOVE_PARAM_DOUBLE =
+        new Rop(RegOps.MOVE_PARAM, Type.DOUBLE, StdTypeList.EMPTY,
+                "move-param-double");
+
+    /** {@code r,param(x): Object :: r = param(x);} */
+    public static final Rop MOVE_PARAM_OBJECT =
+        new Rop(RegOps.MOVE_PARAM, Type.OBJECT, StdTypeList.EMPTY,
+                "move-param-object");
+
+    /** {@code r, literal: int :: r = literal;} */
+    public static final Rop CONST_INT =
+        new Rop(RegOps.CONST, Type.INT, StdTypeList.EMPTY, "const-int");
+
+    /** {@code r, literal: long :: r = literal;} */
+    public static final Rop CONST_LONG =
+        new Rop(RegOps.CONST, Type.LONG, StdTypeList.EMPTY, "const-long");
+
+    /** {@code r, literal: float :: r = literal;} */
+    public static final Rop CONST_FLOAT =
+        new Rop(RegOps.CONST, Type.FLOAT, StdTypeList.EMPTY, "const-float");
+
+    /** {@code r, literal: double :: r = literal;} */
+    public static final Rop CONST_DOUBLE =
+        new Rop(RegOps.CONST, Type.DOUBLE, StdTypeList.EMPTY, "const-double");
+
+    /** {@code r, literal: Object :: r = literal;} */
+    public static final Rop CONST_OBJECT =
+        new Rop(RegOps.CONST, Type.OBJECT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "const-object");
+
+    /** {@code r, literal: Object :: r = literal;} */
+    public static final Rop CONST_OBJECT_NOTHROW =
+        new Rop(RegOps.CONST, Type.OBJECT, StdTypeList.EMPTY,
+                "const-object-nothrow");
+
+    /** {@code goto label} */
+    public static final Rop GOTO =
+        new Rop(RegOps.GOTO, Type.VOID, StdTypeList.EMPTY, Rop.BRANCH_GOTO,
+                "goto");
+
+    /** {@code x: int :: if (x == 0) goto label} */
+    public static final Rop IF_EQZ_INT =
+        new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
+                "if-eqz-int");
+
+    /** {@code x: int :: if (x != 0) goto label} */
+    public static final Rop IF_NEZ_INT =
+        new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
+                "if-nez-int");
+
+    /** {@code x: int :: if (x < 0) goto label} */
+    public static final Rop IF_LTZ_INT =
+        new Rop(RegOps.IF_LT, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
+                "if-ltz-int");
+
+    /** {@code x: int :: if (x >= 0) goto label} */
+    public static final Rop IF_GEZ_INT =
+        new Rop(RegOps.IF_GE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
+                "if-gez-int");
+
+    /** {@code x: int :: if (x <= 0) goto label} */
+    public static final Rop IF_LEZ_INT =
+        new Rop(RegOps.IF_LE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
+                "if-lez-int");
+
+    /** {@code x: int :: if (x > 0) goto label} */
+    public static final Rop IF_GTZ_INT =
+        new Rop(RegOps.IF_GT, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
+                "if-gtz-int");
+
+    /** {@code x: Object :: if (x == null) goto label} */
+    public static final Rop IF_EQZ_OBJECT =
+        new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.OBJECT, Rop.BRANCH_IF,
+                "if-eqz-object");
+
+    /** {@code x: Object :: if (x != null) goto label} */
+    public static final Rop IF_NEZ_OBJECT =
+        new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.OBJECT, Rop.BRANCH_IF,
+                "if-nez-object");
+
+    /** {@code x,y: int :: if (x == y) goto label} */
+    public static final Rop IF_EQ_INT =
+        new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
+                "if-eq-int");
+
+    /** {@code x,y: int :: if (x != y) goto label} */
+    public static final Rop IF_NE_INT =
+        new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
+                "if-ne-int");
+
+    /** {@code x,y: int :: if (x < y) goto label} */
+    public static final Rop IF_LT_INT =
+        new Rop(RegOps.IF_LT, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
+                "if-lt-int");
+
+    /** {@code x,y: int :: if (x >= y) goto label} */
+    public static final Rop IF_GE_INT =
+        new Rop(RegOps.IF_GE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
+                "if-ge-int");
+
+    /** {@code x,y: int :: if (x <= y) goto label} */
+    public static final Rop IF_LE_INT =
+        new Rop(RegOps.IF_LE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
+                "if-le-int");
+
+    /** {@code x,y: int :: if (x > y) goto label} */
+    public static final Rop IF_GT_INT =
+        new Rop(RegOps.IF_GT, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
+                "if-gt-int");
+
+    /** {@code x,y: Object :: if (x == y) goto label} */
+    public static final Rop IF_EQ_OBJECT =
+        new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.OBJECT_OBJECT,
+                Rop.BRANCH_IF, "if-eq-object");
+
+    /** {@code x,y: Object :: if (x != y) goto label} */
+    public static final Rop IF_NE_OBJECT =
+        new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.OBJECT_OBJECT,
+                Rop.BRANCH_IF, "if-ne-object");
+
+    /** {@code x: int :: goto switchtable[x]} */
+    public static final Rop SWITCH =
+        new Rop(RegOps.SWITCH, Type.VOID, StdTypeList.INT, Rop.BRANCH_SWITCH,
+                "switch");
+
+    /** {@code r,x,y: int :: r = x + y;} */
+    public static final Rop ADD_INT =
+        new Rop(RegOps.ADD, Type.INT, StdTypeList.INT_INT, "add-int");
+
+    /** {@code r,x,y: long :: r = x + y;} */
+    public static final Rop ADD_LONG =
+        new Rop(RegOps.ADD, Type.LONG, StdTypeList.LONG_LONG, "add-long");
+
+    /** {@code r,x,y: float :: r = x + y;} */
+    public static final Rop ADD_FLOAT =
+        new Rop(RegOps.ADD, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "add-float");
+
+    /** {@code r,x,y: double :: r = x + y;} */
+    public static final Rop ADD_DOUBLE =
+        new Rop(RegOps.ADD, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
+                Rop.BRANCH_NONE, "add-double");
+
+    /** {@code r,x,y: int :: r = x - y;} */
+    public static final Rop SUB_INT =
+        new Rop(RegOps.SUB, Type.INT, StdTypeList.INT_INT, "sub-int");
+
+    /** {@code r,x,y: long :: r = x - y;} */
+    public static final Rop SUB_LONG =
+        new Rop(RegOps.SUB, Type.LONG, StdTypeList.LONG_LONG, "sub-long");
+
+    /** {@code r,x,y: float :: r = x - y;} */
+    public static final Rop SUB_FLOAT =
+        new Rop(RegOps.SUB, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "sub-float");
+
+    /** {@code r,x,y: double :: r = x - y;} */
+    public static final Rop SUB_DOUBLE =
+        new Rop(RegOps.SUB, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
+                Rop.BRANCH_NONE, "sub-double");
+
+    /** {@code r,x,y: int :: r = x * y;} */
+    public static final Rop MUL_INT =
+        new Rop(RegOps.MUL, Type.INT, StdTypeList.INT_INT, "mul-int");
+
+    /** {@code r,x,y: long :: r = x * y;} */
+    public static final Rop MUL_LONG =
+        new Rop(RegOps.MUL, Type.LONG, StdTypeList.LONG_LONG, "mul-long");
+
+    /** {@code r,x,y: float :: r = x * y;} */
+    public static final Rop MUL_FLOAT =
+        new Rop(RegOps.MUL, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "mul-float");
+
+    /** {@code r,x,y: double :: r = x * y;} */
+    public static final Rop MUL_DOUBLE =
+        new Rop(RegOps.MUL, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
+                Rop.BRANCH_NONE, "mul-double");
+
+    /** {@code r,x,y: int :: r = x / y;} */
+    public static final Rop DIV_INT =
+        new Rop(RegOps.DIV, Type.INT, StdTypeList.INT_INT,
+                Exceptions.LIST_Error_ArithmeticException, "div-int");
+
+    /** {@code r,x,y: long :: r = x / y;} */
+    public static final Rop DIV_LONG =
+        new Rop(RegOps.DIV, Type.LONG, StdTypeList.LONG_LONG,
+                Exceptions.LIST_Error_ArithmeticException, "div-long");
+
+    /** {@code r,x,y: float :: r = x / y;} */
+    public static final Rop DIV_FLOAT =
+        new Rop(RegOps.DIV, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "div-float");
+
+    /** {@code r,x,y: double :: r = x / y;} */
+    public static final Rop DIV_DOUBLE =
+        new Rop(RegOps.DIV, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
+                "div-double");
+
+    /** {@code r,x,y: int :: r = x % y;} */
+    public static final Rop REM_INT =
+        new Rop(RegOps.REM, Type.INT, StdTypeList.INT_INT,
+                Exceptions.LIST_Error_ArithmeticException, "rem-int");
+
+    /** {@code r,x,y: long :: r = x % y;} */
+    public static final Rop REM_LONG =
+        new Rop(RegOps.REM, Type.LONG, StdTypeList.LONG_LONG,
+                Exceptions.LIST_Error_ArithmeticException, "rem-long");
+
+    /** {@code r,x,y: float :: r = x % y;} */
+    public static final Rop REM_FLOAT =
+        new Rop(RegOps.REM, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "rem-float");
+
+    /** {@code r,x,y: double :: r = x % y;} */
+    public static final Rop REM_DOUBLE =
+        new Rop(RegOps.REM, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
+                "rem-double");
+
+    /** {@code r,x: int :: r = -x;} */
+    public static final Rop NEG_INT =
+        new Rop(RegOps.NEG, Type.INT, StdTypeList.INT, "neg-int");
+
+    /** {@code r,x: long :: r = -x;} */
+    public static final Rop NEG_LONG =
+        new Rop(RegOps.NEG, Type.LONG, StdTypeList.LONG, "neg-long");
+
+    /** {@code r,x: float :: r = -x;} */
+    public static final Rop NEG_FLOAT =
+        new Rop(RegOps.NEG, Type.FLOAT, StdTypeList.FLOAT, "neg-float");
+
+    /** {@code r,x: double :: r = -x;} */
+    public static final Rop NEG_DOUBLE =
+        new Rop(RegOps.NEG, Type.DOUBLE, StdTypeList.DOUBLE, "neg-double");
+
+    /** {@code r,x,y: int :: r = x & y;} */
+    public static final Rop AND_INT =
+        new Rop(RegOps.AND, Type.INT, StdTypeList.INT_INT, "and-int");
+
+    /** {@code r,x,y: long :: r = x & y;} */
+    public static final Rop AND_LONG =
+        new Rop(RegOps.AND, Type.LONG, StdTypeList.LONG_LONG, "and-long");
+
+    /** {@code r,x,y: int :: r = x | y;} */
+    public static final Rop OR_INT =
+        new Rop(RegOps.OR, Type.INT, StdTypeList.INT_INT, "or-int");
+
+    /** {@code r,x,y: long :: r = x | y;} */
+    public static final Rop OR_LONG =
+        new Rop(RegOps.OR, Type.LONG, StdTypeList.LONG_LONG, "or-long");
+
+    /** {@code r,x,y: int :: r = x ^ y;} */
+    public static final Rop XOR_INT =
+        new Rop(RegOps.XOR, Type.INT, StdTypeList.INT_INT, "xor-int");
+
+    /** {@code r,x,y: long :: r = x ^ y;} */
+    public static final Rop XOR_LONG =
+        new Rop(RegOps.XOR, Type.LONG, StdTypeList.LONG_LONG, "xor-long");
+
+    /** {@code r,x,y: int :: r = x << y;} */
+    public static final Rop SHL_INT =
+        new Rop(RegOps.SHL, Type.INT, StdTypeList.INT_INT, "shl-int");
+
+    /** {@code r,x: long; y: int :: r = x << y;} */
+    public static final Rop SHL_LONG =
+        new Rop(RegOps.SHL, Type.LONG, StdTypeList.LONG_INT, "shl-long");
+
+    /** {@code r,x,y: int :: r = x >> y;} */
+    public static final Rop SHR_INT =
+        new Rop(RegOps.SHR, Type.INT, StdTypeList.INT_INT, "shr-int");
+
+    /** {@code r,x: long; y: int :: r = x >> y;} */
+    public static final Rop SHR_LONG =
+        new Rop(RegOps.SHR, Type.LONG, StdTypeList.LONG_INT, "shr-long");
+
+    /** {@code r,x,y: int :: r = x >>> y;} */
+    public static final Rop USHR_INT =
+        new Rop(RegOps.USHR, Type.INT, StdTypeList.INT_INT, "ushr-int");
+
+    /** {@code r,x: long; y: int :: r = x >>> y;} */
+    public static final Rop USHR_LONG =
+        new Rop(RegOps.USHR, Type.LONG, StdTypeList.LONG_INT, "ushr-long");
+
+    /** {@code r,x: int :: r = ~x;} */
+    public static final Rop NOT_INT =
+        new Rop(RegOps.NOT, Type.INT, StdTypeList.INT, "not-int");
+
+    /** {@code r,x: long :: r = ~x;} */
+    public static final Rop NOT_LONG =
+        new Rop(RegOps.NOT, Type.LONG, StdTypeList.LONG, "not-long");
+
+    /** {@code r,x,c: int :: r = x + c;} */
+    public static final Rop ADD_CONST_INT =
+        new Rop(RegOps.ADD, Type.INT, StdTypeList.INT, "add-const-int");
+
+    /** {@code r,x,c: long :: r = x + c;} */
+    public static final Rop ADD_CONST_LONG =
+        new Rop(RegOps.ADD, Type.LONG, StdTypeList.LONG, "add-const-long");
+
+    /** {@code r,x,c: float :: r = x + c;} */
+    public static final Rop ADD_CONST_FLOAT =
+        new Rop(RegOps.ADD, Type.FLOAT, StdTypeList.FLOAT, "add-const-float");
+
+    /** {@code r,x,c: double :: r = x + c;} */
+    public static final Rop ADD_CONST_DOUBLE =
+        new Rop(RegOps.ADD, Type.DOUBLE, StdTypeList.DOUBLE,
+                "add-const-double");
+
+    /** {@code r,x,c: int :: r = x - c;} */
+    public static final Rop SUB_CONST_INT =
+        new Rop(RegOps.SUB, Type.INT, StdTypeList.INT, "sub-const-int");
+
+    /** {@code r,x,c: long :: r = x - c;} */
+    public static final Rop SUB_CONST_LONG =
+        new Rop(RegOps.SUB, Type.LONG, StdTypeList.LONG, "sub-const-long");
+
+    /** {@code r,x,c: float :: r = x - c;} */
+    public static final Rop SUB_CONST_FLOAT =
+        new Rop(RegOps.SUB, Type.FLOAT, StdTypeList.FLOAT, "sub-const-float");
+
+    /** {@code r,x,c: double :: r = x - c;} */
+    public static final Rop SUB_CONST_DOUBLE =
+        new Rop(RegOps.SUB, Type.DOUBLE, StdTypeList.DOUBLE,
+                "sub-const-double");
+
+    /** {@code r,x,c: int :: r = x * c;} */
+    public static final Rop MUL_CONST_INT =
+        new Rop(RegOps.MUL, Type.INT, StdTypeList.INT, "mul-const-int");
+
+    /** {@code r,x,c: long :: r = x * c;} */
+    public static final Rop MUL_CONST_LONG =
+        new Rop(RegOps.MUL, Type.LONG, StdTypeList.LONG, "mul-const-long");
+
+    /** {@code r,x,c: float :: r = x * c;} */
+    public static final Rop MUL_CONST_FLOAT =
+        new Rop(RegOps.MUL, Type.FLOAT, StdTypeList.FLOAT, "mul-const-float");
+
+    /** {@code r,x,c: double :: r = x * c;} */
+    public static final Rop MUL_CONST_DOUBLE =
+        new Rop(RegOps.MUL, Type.DOUBLE, StdTypeList.DOUBLE,
+                "mul-const-double");
+
+    /** {@code r,x,c: int :: r = x / c;} */
+    public static final Rop DIV_CONST_INT =
+        new Rop(RegOps.DIV, Type.INT, StdTypeList.INT,
+                Exceptions.LIST_Error_ArithmeticException, "div-const-int");
+
+    /** {@code r,x,c: long :: r = x / c;} */
+    public static final Rop DIV_CONST_LONG =
+        new Rop(RegOps.DIV, Type.LONG, StdTypeList.LONG,
+                Exceptions.LIST_Error_ArithmeticException, "div-const-long");
+
+    /** {@code r,x,c: float :: r = x / c;} */
+    public static final Rop DIV_CONST_FLOAT =
+        new Rop(RegOps.DIV, Type.FLOAT, StdTypeList.FLOAT, "div-const-float");
+
+    /** {@code r,x,c: double :: r = x / c;} */
+    public static final Rop DIV_CONST_DOUBLE =
+        new Rop(RegOps.DIV, Type.DOUBLE, StdTypeList.DOUBLE,
+                "div-const-double");
+
+    /** {@code r,x,c: int :: r = x % c;} */
+    public static final Rop REM_CONST_INT =
+        new Rop(RegOps.REM, Type.INT, StdTypeList.INT,
+                Exceptions.LIST_Error_ArithmeticException, "rem-const-int");
+
+    /** {@code r,x,c: long :: r = x % c;} */
+    public static final Rop REM_CONST_LONG =
+        new Rop(RegOps.REM, Type.LONG, StdTypeList.LONG,
+                Exceptions.LIST_Error_ArithmeticException, "rem-const-long");
+
+    /** {@code r,x,c: float :: r = x % c;} */
+    public static final Rop REM_CONST_FLOAT =
+        new Rop(RegOps.REM, Type.FLOAT, StdTypeList.FLOAT, "rem-const-float");
+
+    /** {@code r,x,c: double :: r = x % c;} */
+    public static final Rop REM_CONST_DOUBLE =
+        new Rop(RegOps.REM, Type.DOUBLE, StdTypeList.DOUBLE,
+                "rem-const-double");
+
+    /** {@code r,x,c: int :: r = x & c;} */
+    public static final Rop AND_CONST_INT =
+        new Rop(RegOps.AND, Type.INT, StdTypeList.INT, "and-const-int");
+
+    /** {@code r,x,c: long :: r = x & c;} */
+    public static final Rop AND_CONST_LONG =
+        new Rop(RegOps.AND, Type.LONG, StdTypeList.LONG, "and-const-long");
+
+    /** {@code r,x,c: int :: r = x | c;} */
+    public static final Rop OR_CONST_INT =
+        new Rop(RegOps.OR, Type.INT, StdTypeList.INT, "or-const-int");
+
+    /** {@code r,x,c: long :: r = x | c;} */
+    public static final Rop OR_CONST_LONG =
+        new Rop(RegOps.OR, Type.LONG, StdTypeList.LONG, "or-const-long");
+
+    /** {@code r,x,c: int :: r = x ^ c;} */
+    public static final Rop XOR_CONST_INT =
+        new Rop(RegOps.XOR, Type.INT, StdTypeList.INT, "xor-const-int");
+
+    /** {@code r,x,c: long :: r = x ^ c;} */
+    public static final Rop XOR_CONST_LONG =
+        new Rop(RegOps.XOR, Type.LONG, StdTypeList.LONG, "xor-const-long");
+
+    /** {@code r,x,c: int :: r = x << c;} */
+    public static final Rop SHL_CONST_INT =
+        new Rop(RegOps.SHL, Type.INT, StdTypeList.INT, "shl-const-int");
+
+    /** {@code r,x: long; c: int :: r = x << c;} */
+    public static final Rop SHL_CONST_LONG =
+        new Rop(RegOps.SHL, Type.LONG, StdTypeList.INT, "shl-const-long");
+
+    /** {@code r,x,c: int :: r = x >> c;} */
+    public static final Rop SHR_CONST_INT =
+        new Rop(RegOps.SHR, Type.INT, StdTypeList.INT, "shr-const-int");
+
+    /** {@code r,x: long; c: int :: r = x >> c;} */
+    public static final Rop SHR_CONST_LONG =
+        new Rop(RegOps.SHR, Type.LONG, StdTypeList.INT, "shr-const-long");
+
+    /** {@code r,x,c: int :: r = x >>> c;} */
+    public static final Rop USHR_CONST_INT =
+        new Rop(RegOps.USHR, Type.INT, StdTypeList.INT, "ushr-const-int");
+
+    /** {@code r,x: long; c: int :: r = x >>> c;} */
+    public static final Rop USHR_CONST_LONG =
+        new Rop(RegOps.USHR, Type.LONG, StdTypeList.INT, "ushr-const-long");
+
+    /** {@code r: int; x,y: long :: r = cmp(x, y);} */
+    public static final Rop CMPL_LONG =
+        new Rop(RegOps.CMPL, Type.INT, StdTypeList.LONG_LONG, "cmpl-long");
+
+    /** {@code r: int; x,y: float :: r = cmpl(x, y);} */
+    public static final Rop CMPL_FLOAT =
+        new Rop(RegOps.CMPL, Type.INT, StdTypeList.FLOAT_FLOAT, "cmpl-float");
+
+    /** {@code r: int; x,y: double :: r = cmpl(x, y);} */
+    public static final Rop CMPL_DOUBLE =
+        new Rop(RegOps.CMPL, Type.INT, StdTypeList.DOUBLE_DOUBLE,
+                "cmpl-double");
+
+    /** {@code r: int; x,y: float :: r = cmpg(x, y);} */
+    public static final Rop CMPG_FLOAT =
+        new Rop(RegOps.CMPG, Type.INT, StdTypeList.FLOAT_FLOAT, "cmpg-float");
+
+    /** {@code r: int; x,y: double :: r = cmpg(x, y);} */
+    public static final Rop CMPG_DOUBLE =
+        new Rop(RegOps.CMPG, Type.INT, StdTypeList.DOUBLE_DOUBLE,
+                "cmpg-double");
+
+    /** {@code r: int; x: long :: r = (int) x} */
+    public static final Rop CONV_L2I =
+        new Rop(RegOps.CONV, Type.INT, StdTypeList.LONG, "conv-l2i");
+
+    /** {@code r: int; x: float :: r = (int) x} */
+    public static final Rop CONV_F2I =
+        new Rop(RegOps.CONV, Type.INT, StdTypeList.FLOAT, "conv-f2i");
+
+    /** {@code r: int; x: double :: r = (int) x} */
+    public static final Rop CONV_D2I =
+        new Rop(RegOps.CONV, Type.INT, StdTypeList.DOUBLE, "conv-d2i");
+
+    /** {@code r: long; x: int :: r = (long) x} */
+    public static final Rop CONV_I2L =
+        new Rop(RegOps.CONV, Type.LONG, StdTypeList.INT, "conv-i2l");
+
+    /** {@code r: long; x: float :: r = (long) x} */
+    public static final Rop CONV_F2L =
+        new Rop(RegOps.CONV, Type.LONG, StdTypeList.FLOAT, "conv-f2l");
+
+    /** {@code r: long; x: double :: r = (long) x} */
+    public static final Rop CONV_D2L =
+        new Rop(RegOps.CONV, Type.LONG, StdTypeList.DOUBLE, "conv-d2l");
+
+    /** {@code r: float; x: int :: r = (float) x} */
+    public static final Rop CONV_I2F =
+        new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.INT, "conv-i2f");
+
+    /** {@code r: float; x: long :: r = (float) x} */
+    public static final Rop CONV_L2F =
+        new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.LONG, "conv-l2f");
+
+    /** {@code r: float; x: double :: r = (float) x} */
+    public static final Rop CONV_D2F =
+        new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.DOUBLE, "conv-d2f");
+
+    /** {@code r: double; x: int :: r = (double) x} */
+    public static final Rop CONV_I2D =
+        new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.INT, "conv-i2d");
+
+    /** {@code r: double; x: long :: r = (double) x} */
+    public static final Rop CONV_L2D =
+        new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.LONG, "conv-l2d");
+
+    /** {@code r: double; x: float :: r = (double) x} */
+    public static final Rop CONV_F2D =
+        new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.FLOAT, "conv-f2d");
+
+    /**
+     * {@code r,x: int :: r = (x << 24) >> 24} (Java-style
+     * convert int to byte)
+     */
+    public static final Rop TO_BYTE =
+        new Rop(RegOps.TO_BYTE, Type.INT, StdTypeList.INT, "to-byte");
+
+    /**
+     * {@code r,x: int :: r = x & 0xffff} (Java-style
+     * convert int to char)
+     */
+    public static final Rop TO_CHAR =
+        new Rop(RegOps.TO_CHAR, Type.INT, StdTypeList.INT, "to-char");
+
+    /**
+     * {@code r,x: int :: r = (x << 16) >> 16} (Java-style
+     * convert int to short)
+     */
+    public static final Rop TO_SHORT =
+        new Rop(RegOps.TO_SHORT, Type.INT, StdTypeList.INT, "to-short");
+
+    /** {@code return void} */
+    public static final Rop RETURN_VOID =
+        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.EMPTY, Rop.BRANCH_RETURN,
+                "return-void");
+
+    /** {@code x: int; return x} */
+    public static final Rop RETURN_INT =
+        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.INT, Rop.BRANCH_RETURN,
+                "return-int");
+
+    /** {@code x: long; return x} */
+    public static final Rop RETURN_LONG =
+        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.LONG, Rop.BRANCH_RETURN,
+                "return-long");
+
+    /** {@code x: float; return x} */
+    public static final Rop RETURN_FLOAT =
+        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.FLOAT, Rop.BRANCH_RETURN,
+                "return-float");
+
+    /** {@code x: double; return x} */
+    public static final Rop RETURN_DOUBLE =
+        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.DOUBLE,
+                Rop.BRANCH_RETURN, "return-double");
+
+    /** {@code x: Object; return x} */
+    public static final Rop RETURN_OBJECT =
+        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.OBJECT,
+                Rop.BRANCH_RETURN, "return-object");
+
+    /** {@code T: any type; r: int; x: T[]; :: r = x.length} */
+    public static final Rop ARRAY_LENGTH =
+        new Rop(RegOps.ARRAY_LENGTH, Type.INT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException, "array-length");
+
+    /** {@code x: Throwable :: throw(x)} */
+    public static final Rop THROW =
+        new Rop(RegOps.THROW, Type.VOID, StdTypeList.THROWABLE,
+                StdTypeList.THROWABLE, "throw");
+
+    /** {@code x: Object :: monitorenter(x)} */
+    public static final Rop MONITOR_ENTER =
+        new Rop(RegOps.MONITOR_ENTER, Type.VOID, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException, "monitor-enter");
+
+    /** {@code x: Object :: monitorexit(x)} */
+    public static final Rop MONITOR_EXIT =
+        new Rop(RegOps.MONITOR_EXIT, Type.VOID, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_Null_IllegalMonitorStateException,
+                "monitor-exit");
+
+    /** {@code r,y: int; x: int[] :: r = x[y]} */
+    public static final Rop AGET_INT =
+        new Rop(RegOps.AGET, Type.INT, StdTypeList.INTARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aget-int");
+
+    /** {@code r: long; x: long[]; y: int :: r = x[y]} */
+    public static final Rop AGET_LONG =
+        new Rop(RegOps.AGET, Type.LONG, StdTypeList.LONGARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aget-long");
+
+    /** {@code r: float; x: float[]; y: int :: r = x[y]} */
+    public static final Rop AGET_FLOAT =
+        new Rop(RegOps.AGET, Type.FLOAT, StdTypeList.FLOATARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aget-float");
+
+    /** {@code r: double; x: double[]; y: int :: r = x[y]} */
+    public static final Rop AGET_DOUBLE =
+        new Rop(RegOps.AGET, Type.DOUBLE, StdTypeList.DOUBLEARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aget-double");
+
+    /** {@code r: Object; x: Object[]; y: int :: r = x[y]} */
+    public static final Rop AGET_OBJECT =
+        new Rop(RegOps.AGET, Type.OBJECT, StdTypeList.OBJECTARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aget-object");
+
+    /** {@code r: boolean; x: boolean[]; y: int :: r = x[y]} */
+    public static final Rop AGET_BOOLEAN =
+        new Rop(RegOps.AGET, Type.INT, StdTypeList.BOOLEANARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aget-boolean");
+
+    /** {@code r: byte; x: byte[]; y: int :: r = x[y]} */
+    public static final Rop AGET_BYTE =
+        new Rop(RegOps.AGET, Type.INT, StdTypeList.BYTEARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aget-byte");
+
+    /** {@code r: char; x: char[]; y: int :: r = x[y]} */
+    public static final Rop AGET_CHAR =
+        new Rop(RegOps.AGET, Type.INT, StdTypeList.CHARARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aget-char");
+
+    /** {@code r: short; x: short[]; y: int :: r = x[y]} */
+    public static final Rop AGET_SHORT =
+        new Rop(RegOps.AGET, Type.INT, StdTypeList.SHORTARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aget-short");
+
+    /** {@code x,z: int; y: int[] :: y[z] = x} */
+    public static final Rop APUT_INT =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_INTARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aput-int");
+
+    /** {@code x: long; y: long[]; z: int :: y[z] = x} */
+    public static final Rop APUT_LONG =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.LONG_LONGARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aput-long");
+
+    /** {@code x: float; y: float[]; z: int :: y[z] = x} */
+    public static final Rop APUT_FLOAT =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.FLOAT_FLOATARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aput-float");
+
+    /** {@code x: double; y: double[]; z: int :: y[z] = x} */
+    public static final Rop APUT_DOUBLE =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.DOUBLE_DOUBLEARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
+                "aput-double");
+
+    /** {@code x: Object; y: Object[]; z: int :: y[z] = x} */
+    public static final Rop APUT_OBJECT =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.OBJECT_OBJECTARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore,
+                "aput-object");
+
+    /** {@code x: boolean; y: boolean[]; z: int :: y[z] = x} */
+    public static final Rop APUT_BOOLEAN =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_BOOLEANARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore,
+                "aput-boolean");
+
+    /** {@code x: byte; y: byte[]; z: int :: y[z] = x} */
+    public static final Rop APUT_BYTE =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_BYTEARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, "aput-byte");
+
+    /** {@code x: char; y: char[]; z: int :: y[z] = x} */
+    public static final Rop APUT_CHAR =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_CHARARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, "aput-char");
+
+    /** {@code x: short; y: short[]; z: int :: y[z] = x} */
+    public static final Rop APUT_SHORT =
+        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_SHORTARR_INT,
+                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore,
+                "aput-short");
+
+    /**
+     * {@code T: any non-array object type :: r =
+     * alloc(T)} (allocate heap space for an object)
+     */
+    public static final Rop NEW_INSTANCE =
+        new Rop(RegOps.NEW_INSTANCE, Type.OBJECT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "new-instance");
+
+    /** {@code r: int[]; x: int :: r = new int[x]} */
+    public static final Rop NEW_ARRAY_INT =
+        new Rop(RegOps.NEW_ARRAY, Type.INT_ARRAY, StdTypeList.INT,
+                Exceptions.LIST_Error_NegativeArraySizeException,
+                "new-array-int");
+
+    /** {@code r: long[]; x: int :: r = new long[x]} */
+    public static final Rop NEW_ARRAY_LONG =
+        new Rop(RegOps.NEW_ARRAY, Type.LONG_ARRAY, StdTypeList.INT,
+                Exceptions.LIST_Error_NegativeArraySizeException,
+                "new-array-long");
+
+    /** {@code r: float[]; x: int :: r = new float[x]} */
+    public static final Rop NEW_ARRAY_FLOAT =
+        new Rop(RegOps.NEW_ARRAY, Type.FLOAT_ARRAY, StdTypeList.INT,
+                Exceptions.LIST_Error_NegativeArraySizeException,
+                "new-array-float");
+
+    /** {@code r: double[]; x: int :: r = new double[x]} */
+    public static final Rop NEW_ARRAY_DOUBLE =
+        new Rop(RegOps.NEW_ARRAY, Type.DOUBLE_ARRAY, StdTypeList.INT,
+                Exceptions.LIST_Error_NegativeArraySizeException,
+                "new-array-double");
+
+    /** {@code r: boolean[]; x: int :: r = new boolean[x]} */
+    public static final Rop NEW_ARRAY_BOOLEAN =
+        new Rop(RegOps.NEW_ARRAY, Type.BOOLEAN_ARRAY, StdTypeList.INT,
+                Exceptions.LIST_Error_NegativeArraySizeException,
+                "new-array-boolean");
+
+    /** {@code r: byte[]; x: int :: r = new byte[x]} */
+    public static final Rop NEW_ARRAY_BYTE =
+        new Rop(RegOps.NEW_ARRAY, Type.BYTE_ARRAY, StdTypeList.INT,
+                Exceptions.LIST_Error_NegativeArraySizeException,
+                "new-array-byte");
+
+    /** {@code r: char[]; x: int :: r = new char[x]} */
+    public static final Rop NEW_ARRAY_CHAR =
+        new Rop(RegOps.NEW_ARRAY, Type.CHAR_ARRAY, StdTypeList.INT,
+                Exceptions.LIST_Error_NegativeArraySizeException,
+                "new-array-char");
+
+    /** {@code r: short[]; x: int :: r = new short[x]} */
+    public static final Rop NEW_ARRAY_SHORT =
+        new Rop(RegOps.NEW_ARRAY, Type.SHORT_ARRAY, StdTypeList.INT,
+                Exceptions.LIST_Error_NegativeArraySizeException,
+                "new-array-short");
+
+    /**
+     * {@code T: any non-array object type; x: Object :: (T) x} (can
+     * throw {@code ClassCastException})
+     */
+    public static final Rop CHECK_CAST =
+        new Rop(RegOps.CHECK_CAST, Type.VOID, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_ClassCastException, "check-cast");
+
+    /**
+     * {@code T: any non-array object type; x: Object :: x instanceof
+     * T}. Note: This is listed as throwing {@code Error}
+     * explicitly because the op <i>can</i> throw, but there are no
+     * other predefined exceptions for it.
+     */
+    public static final Rop INSTANCE_OF =
+        new Rop(RegOps.INSTANCE_OF, Type.INT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error, "instance-of");
+
+    /**
+     * {@code r: int; x: Object; f: instance field spec of
+     * type int :: r = x.f}
+     */
+    public static final Rop GET_FIELD_INT =
+        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException, "get-field-int");
+
+    /**
+     * {@code r: long; x: Object; f: instance field spec of
+     * type long :: r = x.f}
+     */
+    public static final Rop GET_FIELD_LONG =
+        new Rop(RegOps.GET_FIELD, Type.LONG, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException, "get-field-long");
+
+    /**
+     * {@code r: float; x: Object; f: instance field spec of
+     * type float :: r = x.f}
+     */
+    public static final Rop GET_FIELD_FLOAT =
+        new Rop(RegOps.GET_FIELD, Type.FLOAT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "get-field-float");
+
+    /**
+     * {@code r: double; x: Object; f: instance field spec of
+     * type double :: r = x.f}
+     */
+    public static final Rop GET_FIELD_DOUBLE =
+        new Rop(RegOps.GET_FIELD, Type.DOUBLE, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "get-field-double");
+
+    /**
+     * {@code r: Object; x: Object; f: instance field spec of
+     * type Object :: r = x.f}
+     */
+    public static final Rop GET_FIELD_OBJECT =
+        new Rop(RegOps.GET_FIELD, Type.OBJECT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "get-field-object");
+
+    /**
+     * {@code r: boolean; x: Object; f: instance field spec of
+     * type boolean :: r = x.f}
+     */
+    public static final Rop GET_FIELD_BOOLEAN =
+        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "get-field-boolean");
+
+    /**
+     * {@code r: byte; x: Object; f: instance field spec of
+     * type byte :: r = x.f}
+     */
+    public static final Rop GET_FIELD_BYTE =
+        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "get-field-byte");
+
+    /**
+     * {@code r: char; x: Object; f: instance field spec of
+     * type char :: r = x.f}
+     */
+    public static final Rop GET_FIELD_CHAR =
+        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "get-field-char");
+
+    /**
+     * {@code r: short; x: Object; f: instance field spec of
+     * type short :: r = x.f}
+     */
+    public static final Rop GET_FIELD_SHORT =
+        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "get-field-short");
+
+    /** {@code r: int; f: static field spec of type int :: r = f} */
+    public static final Rop GET_STATIC_INT =
+        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-static-int");
+
+    /** {@code r: long; f: static field spec of type long :: r = f} */
+    public static final Rop GET_STATIC_LONG =
+        new Rop(RegOps.GET_STATIC, Type.LONG, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-static-long");
+
+    /** {@code r: float; f: static field spec of type float :: r = f} */
+    public static final Rop GET_STATIC_FLOAT =
+        new Rop(RegOps.GET_STATIC, Type.FLOAT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-static-float");
+
+    /** {@code r: double; f: static field spec of type double :: r = f} */
+    public static final Rop GET_STATIC_DOUBLE =
+        new Rop(RegOps.GET_STATIC, Type.DOUBLE, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-static-double");
+
+    /** {@code r: Object; f: static field spec of type Object :: r = f} */
+    public static final Rop GET_STATIC_OBJECT =
+        new Rop(RegOps.GET_STATIC, Type.OBJECT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-static-object");
+
+    /** {@code r: boolean; f: static field spec of type boolean :: r = f} */
+    public static final Rop GET_STATIC_BOOLEAN =
+        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-field-boolean");
+
+    /** {@code r: byte; f: static field spec of type byte :: r = f} */
+    public static final Rop GET_STATIC_BYTE =
+        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-field-byte");
+
+    /** {@code r: char; f: static field spec of type char :: r = f} */
+    public static final Rop GET_STATIC_CHAR =
+        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-field-char");
+
+    /** {@code r: short; f: static field spec of type short :: r = f} */
+    public static final Rop GET_STATIC_SHORT =
+        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
+                Exceptions.LIST_Error, "get-field-short");
+
+    /**
+     * {@code x: int; y: Object; f: instance field spec of type
+     * int :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_INT =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
+                Exceptions.LIST_Error_NullPointerException, "put-field-int");
+
+    /**
+     * {@code x: long; y: Object; f: instance field spec of type
+     * long :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_LONG =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.LONG_OBJECT,
+                Exceptions.LIST_Error_NullPointerException, "put-field-long");
+
+    /**
+     * {@code x: float; y: Object; f: instance field spec of type
+     * float :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_FLOAT =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.FLOAT_OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "put-field-float");
+
+    /**
+     * {@code x: double; y: Object; f: instance field spec of type
+     * double :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_DOUBLE =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.DOUBLE_OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "put-field-double");
+
+    /**
+     * {@code x: Object; y: Object; f: instance field spec of type
+     * Object :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_OBJECT =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.OBJECT_OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "put-field-object");
+
+    /**
+     * {@code x: int; y: Object; f: instance field spec of type
+     * boolean :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_BOOLEAN =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "put-field-boolean");
+
+    /**
+     * {@code x: int; y: Object; f: instance field spec of type
+     * byte :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_BYTE =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "put-field-byte");
+
+    /**
+     * {@code x: int; y: Object; f: instance field spec of type
+     * char :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_CHAR =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "put-field-char");
+
+    /**
+     * {@code x: int; y: Object; f: instance field spec of type
+     * short :: y.f = x}
+     */
+    public static final Rop PUT_FIELD_SHORT =
+        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
+                Exceptions.LIST_Error_NullPointerException,
+                "put-field-short");
+
+    /** {@code f: static field spec of type int; x: int :: f = x} */
+    public static final Rop PUT_STATIC_INT =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
+                Exceptions.LIST_Error, "put-static-int");
+
+    /** {@code f: static field spec of type long; x: long :: f = x} */
+    public static final Rop PUT_STATIC_LONG =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.LONG,
+                Exceptions.LIST_Error, "put-static-long");
+
+    /** {@code f: static field spec of type float; x: float :: f = x} */
+    public static final Rop PUT_STATIC_FLOAT =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.FLOAT,
+                Exceptions.LIST_Error, "put-static-float");
+
+    /** {@code f: static field spec of type double; x: double :: f = x} */
+    public static final Rop PUT_STATIC_DOUBLE =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.DOUBLE,
+                Exceptions.LIST_Error, "put-static-double");
+
+    /** {@code f: static field spec of type Object; x: Object :: f = x} */
+    public static final Rop PUT_STATIC_OBJECT =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.OBJECT,
+                Exceptions.LIST_Error, "put-static-object");
+
+    /**
+     * {@code f: static field spec of type boolean; x: boolean :: f =
+     * x}
+     */
+    public static final Rop PUT_STATIC_BOOLEAN =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
+                Exceptions.LIST_Error, "put-static-boolean");
+
+    /** {@code f: static field spec of type byte; x: byte :: f = x} */
+    public static final Rop PUT_STATIC_BYTE =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
+                Exceptions.LIST_Error, "put-static-byte");
+
+    /** {@code f: static field spec of type char; x: char :: f = x} */
+    public static final Rop PUT_STATIC_CHAR =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
+                Exceptions.LIST_Error, "put-static-char");
+
+    /** {@code f: static field spec of type short; x: short :: f = x} */
+    public static final Rop PUT_STATIC_SHORT =
+        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
+                Exceptions.LIST_Error, "put-static-short");
+
+    /** {@code x: Int :: local variable begins in x} */
+    public static final Rop MARK_LOCAL_INT =
+            new Rop (RegOps.MARK_LOCAL, Type.VOID,
+                    StdTypeList.INT, "mark-local-int");
+
+    /** {@code x: Long :: local variable begins in x} */
+    public static final Rop MARK_LOCAL_LONG =
+            new Rop (RegOps.MARK_LOCAL, Type.VOID,
+                    StdTypeList.LONG, "mark-local-long");
+
+    /** {@code x: Float :: local variable begins in x} */
+    public static final Rop MARK_LOCAL_FLOAT =
+            new Rop (RegOps.MARK_LOCAL, Type.VOID,
+                    StdTypeList.FLOAT, "mark-local-float");
+
+    /** {@code x: Double :: local variable begins in x} */
+    public static final Rop MARK_LOCAL_DOUBLE =
+            new Rop (RegOps.MARK_LOCAL, Type.VOID,
+                    StdTypeList.DOUBLE, "mark-local-double");
+
+    /** {@code x: Object :: local variable begins in x} */
+    public static final Rop MARK_LOCAL_OBJECT =
+            new Rop (RegOps.MARK_LOCAL, Type.VOID,
+                    StdTypeList.OBJECT, "mark-local-object");
+
+    /** {@code T: Any primitive type; v0..vx: T :: {v0, ..., vx}} */
+    public static final Rop FILL_ARRAY_DATA =
+        new Rop(RegOps.FILL_ARRAY_DATA, Type.VOID, StdTypeList.EMPTY,
+                "fill-array-data");
+
+    /**
+     * Returns the appropriate rop for the given opcode, destination,
+     * and sources. The result is typically, but not necessarily, a
+     * shared instance.
+     *
+     * <p><b>Note:</b> This method does not do complete error checking on
+     * its arguments, and so it may return an instance which seemed "right
+     * enough" even though in actuality the passed arguments don't quite
+     * match what is returned. TODO: Revisit this issue.</p>
+     *
+     * @param opcode the opcode
+     * @param dest {@code non-null;} destination (result) type, or
+     * {@link Type#VOID} if none
+     * @param sources {@code non-null;} list of source types
+     * @param cst {@code null-ok;} associated constant, if any
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop ropFor(int opcode, TypeBearer dest, TypeList sources,
+            Constant cst) {
+        switch (opcode) {
+            case RegOps.NOP: return NOP;
+            case RegOps.MOVE: return opMove(dest);
+            case RegOps.MOVE_PARAM: return opMoveParam(dest);
+            case RegOps.MOVE_EXCEPTION: return opMoveException(dest);
+            case RegOps.CONST: return opConst(dest);
+            case RegOps.GOTO: return GOTO;
+            case RegOps.IF_EQ: return opIfEq(sources);
+            case RegOps.IF_NE: return opIfNe(sources);
+            case RegOps.IF_LT: return opIfLt(sources);
+            case RegOps.IF_GE: return opIfGe(sources);
+            case RegOps.IF_LE: return opIfLe(sources);
+            case RegOps.IF_GT: return opIfGt(sources);
+            case RegOps.SWITCH: return SWITCH;
+            case RegOps.ADD: return opAdd(sources);
+            case RegOps.SUB: return opSub(sources);
+            case RegOps.MUL: return opMul(sources);
+            case RegOps.DIV: return opDiv(sources);
+            case RegOps.REM: return opRem(sources);
+            case RegOps.NEG: return opNeg(dest);
+            case RegOps.AND: return opAnd(sources);
+            case RegOps.OR: return opOr(sources);
+            case RegOps.XOR: return opXor(sources);
+            case RegOps.SHL: return opShl(sources);
+            case RegOps.SHR: return opShr(sources);
+            case RegOps.USHR: return opUshr(sources);
+            case RegOps.NOT: return opNot(dest);
+            case RegOps.CMPL: return opCmpl(sources.getType(0));
+            case RegOps.CMPG: return opCmpg(sources.getType(0));
+            case RegOps.CONV: return opConv(dest, sources.getType(0));
+            case RegOps.TO_BYTE: return TO_BYTE;
+            case RegOps.TO_CHAR: return TO_CHAR;
+            case RegOps.TO_SHORT: return TO_SHORT;
+            case RegOps.RETURN: {
+                if (sources.size() == 0) {
+                    return RETURN_VOID;
+                }
+                return opReturn(sources.getType(0));
+            }
+            case RegOps.ARRAY_LENGTH: return ARRAY_LENGTH;
+            case RegOps.THROW: return THROW;
+            case RegOps.MONITOR_ENTER: return MONITOR_ENTER;
+            case RegOps.MONITOR_EXIT: return MONITOR_EXIT;
+            case RegOps.AGET: {
+                Type source = sources.getType(0);
+                Type componentType;
+                if (source == Type.KNOWN_NULL) {
+                    /*
+                     * Treat a known-null as an array of the expected
+                     * result type.
+                     */
+                    componentType = dest.getType();
+                } else {
+                    componentType = source.getComponentType();
+                }
+                return opAget(componentType);
+            }
+            case RegOps.APUT: {
+                Type source = sources.getType(1);
+                Type componentType;
+                if (source == Type.KNOWN_NULL) {
+                    /*
+                     * Treat a known-null as an array of the type being
+                     * stored.
+                     */
+                    componentType = sources.getType(0);
+                } else {
+                    componentType = source.getComponentType();
+                }
+                return opAput(componentType);
+            }
+            case RegOps.NEW_INSTANCE: return NEW_INSTANCE;
+            case RegOps.NEW_ARRAY: return opNewArray(dest.getType());
+            case RegOps.CHECK_CAST: return CHECK_CAST;
+            case RegOps.INSTANCE_OF: return INSTANCE_OF;
+            case RegOps.GET_FIELD: return opGetField(dest);
+            case RegOps.GET_STATIC: return opGetStatic(dest);
+            case RegOps.PUT_FIELD: return opPutField(sources.getType(0));
+            case RegOps.PUT_STATIC: return opPutStatic(sources.getType(0));
+            case RegOps.INVOKE_STATIC: {
+                return opInvokeStatic(((CstMethodRef) cst).getPrototype());
+            }
+            case RegOps.INVOKE_VIRTUAL: {
+                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
+                Prototype meth = cstMeth.getPrototype();
+                CstType definer = cstMeth.getDefiningClass();
+                meth = meth.withFirstParameter(definer.getClassType());
+                return opInvokeVirtual(meth);
+            }
+            case RegOps.INVOKE_SUPER: {
+                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
+                Prototype meth = cstMeth.getPrototype();
+                CstType definer = cstMeth.getDefiningClass();
+                meth = meth.withFirstParameter(definer.getClassType());
+                return opInvokeSuper(meth);
+            }
+            case RegOps.INVOKE_DIRECT: {
+                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
+                Prototype meth = cstMeth.getPrototype();
+                CstType definer = cstMeth.getDefiningClass();
+                meth = meth.withFirstParameter(definer.getClassType());
+                return opInvokeDirect(meth);
+            }
+            case RegOps.INVOKE_INTERFACE: {
+                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
+                Prototype meth = cstMeth.getPrototype();
+                CstType definer = cstMeth.getDefiningClass();
+                meth = meth.withFirstParameter(definer.getClassType());
+                return opInvokeInterface(meth);
+            }
+            case RegOps.INVOKE_POLYMORPHIC: {
+                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
+                Prototype proto = cstMeth.getPrototype();
+                CstType definer = cstMeth.getDefiningClass();
+                Prototype meth = proto.withFirstParameter(definer.getClassType());
+                return opInvokePolymorphic(meth);
+            }
+            case RegOps.INVOKE_CUSTOM: {
+                CstCallSiteRef cstInvokeDynamicRef = (CstCallSiteRef) cst;
+                Prototype proto = cstInvokeDynamicRef.getPrototype();
+                return opInvokeCustom(proto);
+            }
+        }
+
+        throw new RuntimeException("unknown opcode " + RegOps.opName(opcode));
+    }
+
+    /**
+     * Returns the appropriate {@code move} rop for the given type. The
+     * result is a shared instance.
+     *
+     * @param type {@code non-null;} type of value being moved
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opMove(TypeBearer type) {
+        switch (type.getBasicFrameType()) {
+            case Type.BT_INT:    return MOVE_INT;
+            case Type.BT_LONG:   return MOVE_LONG;
+            case Type.BT_FLOAT:  return MOVE_FLOAT;
+            case Type.BT_DOUBLE: return MOVE_DOUBLE;
+            case Type.BT_OBJECT: return MOVE_OBJECT;
+            case Type.BT_ADDR:   return MOVE_RETURN_ADDRESS;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code move-param} rop for the
+     * given type. The result is a shared instance.
+     *
+     * @param type {@code non-null;} type of value being moved
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opMoveParam(TypeBearer type) {
+        switch (type.getBasicFrameType()) {
+            case Type.BT_INT:    return MOVE_PARAM_INT;
+            case Type.BT_LONG:   return MOVE_PARAM_LONG;
+            case Type.BT_FLOAT:  return MOVE_PARAM_FLOAT;
+            case Type.BT_DOUBLE: return MOVE_PARAM_DOUBLE;
+            case Type.BT_OBJECT: return MOVE_PARAM_OBJECT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code move-exception} rop for the
+     * given type. The result may be a shared instance.
+     *
+     * @param type {@code non-null;} type of the exception
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opMoveException(TypeBearer type) {
+        return new Rop(RegOps.MOVE_EXCEPTION, type.getType(),
+                       StdTypeList.EMPTY, (String) null);
+    }
+
+    /**
+     * Returns the appropriate {@code move-result} rop for the
+     * given type. The result may be a shared instance.
+     *
+     * @param type {@code non-null;} type of the parameter
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opMoveResult(TypeBearer type) {
+        return new Rop(RegOps.MOVE_RESULT, type.getType(),
+                       StdTypeList.EMPTY, (String) null);
+    }
+
+    /**
+     * Returns the appropriate {@code move-result-pseudo} rop for the
+     * given type. The result may be a shared instance.
+     *
+     * @param type {@code non-null;} type of the parameter
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opMoveResultPseudo(TypeBearer type) {
+        return new Rop(RegOps.MOVE_RESULT_PSEUDO, type.getType(),
+                       StdTypeList.EMPTY, (String) null);
+    }
+
+    /**
+     * Returns the appropriate {@code const} rop for the given
+     * type. The result is a shared instance.
+     *
+     * @param type {@code non-null;} type of the constant
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opConst(TypeBearer type) {
+        if (type.getType() == Type.KNOWN_NULL) {
+            return CONST_OBJECT_NOTHROW;
+        }
+
+        switch (type.getBasicFrameType()) {
+            case Type.BT_INT:    return CONST_INT;
+            case Type.BT_LONG:   return CONST_LONG;
+            case Type.BT_FLOAT:  return CONST_FLOAT;
+            case Type.BT_DOUBLE: return CONST_DOUBLE;
+            case Type.BT_OBJECT: return CONST_OBJECT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code if-eq} rop for the given
+     * sources. The result is a shared instance.
+     *
+     * @param types {@code non-null;} source types
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opIfEq(TypeList types) {
+        return pickIf(types, IF_EQZ_INT, IF_EQZ_OBJECT,
+                      IF_EQ_INT, IF_EQ_OBJECT);
+    }
+
+    /**
+     * Returns the appropriate {@code if-ne} rop for the given
+     * sources. The result is a shared instance.
+     *
+     * @param types {@code non-null;} source types
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opIfNe(TypeList types) {
+        return pickIf(types, IF_NEZ_INT, IF_NEZ_OBJECT,
+                      IF_NE_INT, IF_NE_OBJECT);
+    }
+
+    /**
+     * Returns the appropriate {@code if-lt} rop for the given
+     * sources. The result is a shared instance.
+     *
+     * @param types {@code non-null;} source types
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opIfLt(TypeList types) {
+        return pickIf(types, IF_LTZ_INT, null, IF_LT_INT, null);
+    }
+
+    /**
+     * Returns the appropriate {@code if-ge} rop for the given
+     * sources. The result is a shared instance.
+     *
+     * @param types {@code non-null;} source types
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opIfGe(TypeList types) {
+        return pickIf(types, IF_GEZ_INT, null, IF_GE_INT, null);
+    }
+
+    /**
+     * Returns the appropriate {@code if-gt} rop for the given
+     * sources. The result is a shared instance.
+     *
+     * @param types {@code non-null;} source types
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opIfGt(TypeList types) {
+        return pickIf(types, IF_GTZ_INT, null, IF_GT_INT, null);
+    }
+
+    /**
+     * Returns the appropriate {@code if-le} rop for the given
+     * sources. The result is a shared instance.
+     *
+     * @param types {@code non-null;} source types
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opIfLe(TypeList types) {
+        return pickIf(types, IF_LEZ_INT, null, IF_LE_INT, null);
+    }
+
+    /**
+     * Helper for all the {@code if*}-related methods, which
+     * checks types and picks one of the four variants, throwing if
+     * there's a problem.
+     *
+     * @param types {@code non-null;} the types
+     * @param intZ {@code non-null;} the int-to-0 comparison
+     * @param objZ {@code null-ok;} the object-to-null comparison
+     * @param intInt {@code non-null;} the int-to-int comparison
+     * @param objObj {@code non-null;} the object-to-object comparison
+     * @return {@code non-null;} the appropriate instance
+     */
+    private static Rop pickIf(TypeList types, Rop intZ, Rop objZ, Rop intInt,
+                              Rop objObj) {
+        switch(types.size()) {
+            case 1: {
+                switch (types.getType(0).getBasicFrameType()) {
+                    case Type.BT_INT: {
+                        return intZ;
+                    }
+                    case Type.BT_OBJECT: {
+                        if (objZ != null) {
+                            return objZ;
+                        }
+                    }
+                }
+                break;
+            }
+            case 2: {
+                int bt = types.getType(0).getBasicFrameType();
+                if (bt == types.getType(1).getBasicFrameType()) {
+                    switch (bt) {
+                        case Type.BT_INT: {
+                            return intInt;
+                        }
+                        case Type.BT_OBJECT: {
+                            if (objObj != null) {
+                                return objObj;
+                            }
+                        }
+                    }
+                }
+                break;
+            }
+        }
+
+        return throwBadTypes(types);
+    }
+
+    /**
+     * Returns the appropriate {@code add} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opAdd(TypeList types) {
+        return pickBinaryOp(types, ADD_CONST_INT, ADD_CONST_LONG,
+                            ADD_CONST_FLOAT, ADD_CONST_DOUBLE, ADD_INT,
+                            ADD_LONG, ADD_FLOAT, ADD_DOUBLE);
+    }
+
+    /**
+     * Returns the appropriate {@code sub} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opSub(TypeList types) {
+        return pickBinaryOp(types, SUB_CONST_INT, SUB_CONST_LONG,
+                            SUB_CONST_FLOAT, SUB_CONST_DOUBLE, SUB_INT,
+                            SUB_LONG, SUB_FLOAT, SUB_DOUBLE);
+    }
+
+    /**
+     * Returns the appropriate {@code mul} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opMul(TypeList types) {
+        return pickBinaryOp(types, MUL_CONST_INT, MUL_CONST_LONG,
+                            MUL_CONST_FLOAT, MUL_CONST_DOUBLE, MUL_INT,
+                            MUL_LONG, MUL_FLOAT, MUL_DOUBLE);
+    }
+
+    /**
+     * Returns the appropriate {@code div} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opDiv(TypeList types) {
+        return pickBinaryOp(types, DIV_CONST_INT, DIV_CONST_LONG,
+                            DIV_CONST_FLOAT, DIV_CONST_DOUBLE, DIV_INT,
+                            DIV_LONG, DIV_FLOAT, DIV_DOUBLE);
+    }
+
+    /**
+     * Returns the appropriate {@code rem} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opRem(TypeList types) {
+        return pickBinaryOp(types, REM_CONST_INT, REM_CONST_LONG,
+                            REM_CONST_FLOAT, REM_CONST_DOUBLE, REM_INT,
+                            REM_LONG, REM_FLOAT, REM_DOUBLE);
+    }
+
+    /**
+     * Returns the appropriate {@code and} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opAnd(TypeList types) {
+        return pickBinaryOp(types, AND_CONST_INT, AND_CONST_LONG, null, null,
+                            AND_INT, AND_LONG, null, null);
+    }
+
+    /**
+     * Returns the appropriate {@code or} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opOr(TypeList types) {
+        return pickBinaryOp(types, OR_CONST_INT, OR_CONST_LONG, null, null,
+                            OR_INT, OR_LONG, null, null);
+    }
+
+    /**
+     * Returns the appropriate {@code xor} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opXor(TypeList types) {
+        return pickBinaryOp(types, XOR_CONST_INT, XOR_CONST_LONG, null, null,
+                            XOR_INT, XOR_LONG, null, null);
+    }
+
+    /**
+     * Returns the appropriate {@code shl} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opShl(TypeList types) {
+        return pickBinaryOp(types, SHL_CONST_INT, SHL_CONST_LONG, null, null,
+                            SHL_INT, SHL_LONG, null, null);
+    }
+
+    /**
+     * Returns the appropriate {@code shr} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opShr(TypeList types) {
+        return pickBinaryOp(types, SHR_CONST_INT, SHR_CONST_LONG, null, null,
+                            SHR_INT, SHR_LONG, null, null);
+    }
+
+    /**
+     * Returns the appropriate {@code ushr} rop for the given
+     * types. The result is a shared instance.
+     *
+     * @param types {@code non-null;} types of the sources
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opUshr(TypeList types) {
+        return pickBinaryOp(types, USHR_CONST_INT, USHR_CONST_LONG, null, null,
+                            USHR_INT, USHR_LONG, null, null);
+    }
+
+    /**
+     * Returns the appropriate binary arithmetic rop for the given type
+     * and arguments. The result is a shared instance.
+     *
+     * @param types {@code non-null;} sources of the operation
+     * @param int1 {@code non-null;} the int-to-constant rop
+     * @param long1 {@code non-null;} the long-to-constant rop
+     * @param float1 {@code null-ok;} the float-to-constant rop, if any
+     * @param double1 {@code null-ok;} the double-to-constant rop, if any
+     * @param int2 {@code non-null;} the int-to-int rop
+     * @param long2 {@code non-null;} the long-to-long or long-to-int rop
+     * @param float2 {@code null-ok;} the float-to-float rop, if any
+     * @param double2 {@code null-ok;} the double-to-double rop, if any
+     * @return {@code non-null;} an appropriate instance
+     */
+    private static Rop pickBinaryOp(TypeList types, Rop int1, Rop long1,
+                                    Rop float1, Rop double1, Rop int2,
+                                    Rop long2, Rop float2, Rop double2) {
+        int bt1 = types.getType(0).getBasicFrameType();
+        Rop result = null;
+
+        switch (types.size()) {
+            case 1: {
+                switch(bt1) {
+                    case Type.BT_INT:    return int1;
+                    case Type.BT_LONG:   return long1;
+                    case Type.BT_FLOAT:  result = float1; break;
+                    case Type.BT_DOUBLE: result = double1; break;
+                }
+                break;
+            }
+            case 2: {
+                switch(bt1) {
+                    case Type.BT_INT:    return int2;
+                    case Type.BT_LONG:   return long2;
+                    case Type.BT_FLOAT:  result = float2; break;
+                    case Type.BT_DOUBLE: result = double2; break;
+                }
+                break;
+            }
+        }
+
+        if (result == null) {
+            return throwBadTypes(types);
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns the appropriate {@code neg} rop for the given type. The
+     * result is a shared instance.
+     *
+     * @param type {@code non-null;} type of value being operated on
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opNeg(TypeBearer type) {
+        switch (type.getBasicFrameType()) {
+            case Type.BT_INT:    return NEG_INT;
+            case Type.BT_LONG:   return NEG_LONG;
+            case Type.BT_FLOAT:  return NEG_FLOAT;
+            case Type.BT_DOUBLE: return NEG_DOUBLE;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code not} rop for the given type. The
+     * result is a shared instance.
+     *
+     * @param type {@code non-null;} type of value being operated on
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opNot(TypeBearer type) {
+        switch (type.getBasicFrameType()) {
+            case Type.BT_INT:  return NOT_INT;
+            case Type.BT_LONG: return NOT_LONG;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code cmpl} rop for the given type. The
+     * result is a shared instance.
+     *
+     * @param type {@code non-null;} type of value being compared
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opCmpl(TypeBearer type) {
+        switch (type.getBasicType()) {
+            case Type.BT_LONG:   return CMPL_LONG;
+            case Type.BT_FLOAT:  return CMPL_FLOAT;
+            case Type.BT_DOUBLE: return CMPL_DOUBLE;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code cmpg} rop for the given type. The
+     * result is a shared instance.
+     *
+     * @param type {@code non-null;} type of value being compared
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opCmpg(TypeBearer type) {
+        switch (type.getBasicType()) {
+            case Type.BT_FLOAT:  return CMPG_FLOAT;
+            case Type.BT_DOUBLE: return CMPG_DOUBLE;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code conv} rop for the given types. The
+     * result is a shared instance.
+     *
+     * @param dest {@code non-null;} target value type
+     * @param source {@code non-null;} source value type
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opConv(TypeBearer dest, TypeBearer source) {
+        int dbt = dest.getBasicFrameType();
+        switch (source.getBasicFrameType()) {
+            case Type.BT_INT: {
+                switch (dbt) {
+                    case Type.BT_LONG:   return CONV_I2L;
+                    case Type.BT_FLOAT:  return CONV_I2F;
+                    case Type.BT_DOUBLE: return CONV_I2D;
+                    default:             break;
+                }
+            }
+            case Type.BT_LONG: {
+                switch (dbt) {
+                    case Type.BT_INT:    return CONV_L2I;
+                    case Type.BT_FLOAT:  return CONV_L2F;
+                    case Type.BT_DOUBLE: return CONV_L2D;
+                    default:             break;
+                }
+            }
+            case Type.BT_FLOAT: {
+                switch (dbt) {
+                    case Type.BT_INT:    return CONV_F2I;
+                    case Type.BT_LONG:   return CONV_F2L;
+                    case Type.BT_DOUBLE: return CONV_F2D;
+                    default:             break;
+                }
+            }
+            case Type.BT_DOUBLE: {
+                switch (dbt) {
+                    case Type.BT_INT:    return CONV_D2I;
+                    case Type.BT_LONG:   return CONV_D2L;
+                    case Type.BT_FLOAT:  return CONV_D2F;
+                    default:             break;
+                }
+            }
+        }
+
+        return throwBadTypes(StdTypeList.make(dest.getType(),
+                                              source.getType()));
+    }
+
+    /**
+     * Returns the appropriate {@code return} rop for the given type. The
+     * result is a shared instance.
+     *
+     * @param type {@code non-null;} type of value being returned
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opReturn(TypeBearer type) {
+        switch (type.getBasicFrameType()) {
+            case Type.BT_INT:    return RETURN_INT;
+            case Type.BT_LONG:   return RETURN_LONG;
+            case Type.BT_FLOAT:  return RETURN_FLOAT;
+            case Type.BT_DOUBLE: return RETURN_DOUBLE;
+            case Type.BT_OBJECT: return RETURN_OBJECT;
+            case Type.BT_VOID:   return RETURN_VOID;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code aget} rop for the given type. The
+     * result is a shared instance.
+     *
+     * @param type {@code non-null;} element type of array being accessed
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opAget(TypeBearer type) {
+        switch (type.getBasicType()) {
+            case Type.BT_INT:     return AGET_INT;
+            case Type.BT_LONG:    return AGET_LONG;
+            case Type.BT_FLOAT:   return AGET_FLOAT;
+            case Type.BT_DOUBLE:  return AGET_DOUBLE;
+            case Type.BT_OBJECT:  return AGET_OBJECT;
+            case Type.BT_BOOLEAN: return AGET_BOOLEAN;
+            case Type.BT_BYTE:    return AGET_BYTE;
+            case Type.BT_CHAR:    return AGET_CHAR;
+            case Type.BT_SHORT:   return AGET_SHORT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code aput} rop for the given type. The
+     * result is a shared instance.
+     *
+     * @param type {@code non-null;} element type of array being accessed
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opAput(TypeBearer type) {
+        switch (type.getBasicType()) {
+            case Type.BT_INT:     return APUT_INT;
+            case Type.BT_LONG:    return APUT_LONG;
+            case Type.BT_FLOAT:   return APUT_FLOAT;
+            case Type.BT_DOUBLE:  return APUT_DOUBLE;
+            case Type.BT_OBJECT:  return APUT_OBJECT;
+            case Type.BT_BOOLEAN: return APUT_BOOLEAN;
+            case Type.BT_BYTE:    return APUT_BYTE;
+            case Type.BT_CHAR:    return APUT_CHAR;
+            case Type.BT_SHORT:   return APUT_SHORT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code new-array} rop for the given
+     * type. The result is a shared instance.
+     *
+     * @param arrayType {@code non-null;} array type of array being created
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opNewArray(TypeBearer arrayType) {
+        Type type = arrayType.getType();
+        Type elementType = type.getComponentType();
+
+        switch (elementType.getBasicType()) {
+            case Type.BT_INT:     return NEW_ARRAY_INT;
+            case Type.BT_LONG:    return NEW_ARRAY_LONG;
+            case Type.BT_FLOAT:   return NEW_ARRAY_FLOAT;
+            case Type.BT_DOUBLE:  return NEW_ARRAY_DOUBLE;
+            case Type.BT_BOOLEAN: return NEW_ARRAY_BOOLEAN;
+            case Type.BT_BYTE:    return NEW_ARRAY_BYTE;
+            case Type.BT_CHAR:    return NEW_ARRAY_CHAR;
+            case Type.BT_SHORT:   return NEW_ARRAY_SHORT;
+            case Type.BT_OBJECT: {
+                return new Rop(RegOps.NEW_ARRAY, type, StdTypeList.INT,
+                        Exceptions.LIST_Error_NegativeArraySizeException,
+                        "new-array-object");
+            }
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code filled-new-array} rop for the given
+     * type. The result may be a shared instance.
+     *
+     * @param arrayType {@code non-null;} type of array being created
+     * @param count {@code count >= 0;} number of elements that the array should have
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opFilledNewArray(TypeBearer arrayType, int count) {
+        Type type = arrayType.getType();
+        Type elementType = type.getComponentType();
+
+        if (elementType.isCategory2()) {
+            return throwBadType(arrayType);
+        }
+
+        if (count < 0) {
+            throw new IllegalArgumentException("count < 0");
+        }
+
+        StdTypeList sourceTypes = new StdTypeList(count);
+
+        for (int i = 0; i < count; i++) {
+            sourceTypes.set(i, elementType);
+        }
+
+        // Note: The resulting rop is considered call-like.
+        return new Rop(RegOps.FILLED_NEW_ARRAY,
+                       sourceTypes,
+                       Exceptions.LIST_Error);
+    }
+
+    /**
+     * Returns the appropriate {@code get-field} rop for the given
+     * type. The result is a shared instance.
+     *
+     * @param type {@code non-null;} type of the field in question
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opGetField(TypeBearer type) {
+        switch (type.getBasicType()) {
+            case Type.BT_INT:     return GET_FIELD_INT;
+            case Type.BT_LONG:    return GET_FIELD_LONG;
+            case Type.BT_FLOAT:   return GET_FIELD_FLOAT;
+            case Type.BT_DOUBLE:  return GET_FIELD_DOUBLE;
+            case Type.BT_OBJECT:  return GET_FIELD_OBJECT;
+            case Type.BT_BOOLEAN: return GET_FIELD_BOOLEAN;
+            case Type.BT_BYTE:    return GET_FIELD_BYTE;
+            case Type.BT_CHAR:    return GET_FIELD_CHAR;
+            case Type.BT_SHORT:   return GET_FIELD_SHORT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code put-field} rop for the given
+     * type. The result is a shared instance.
+     *
+     * @param type {@code non-null;} type of the field in question
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opPutField(TypeBearer type) {
+        switch (type.getBasicType()) {
+            case Type.BT_INT:     return PUT_FIELD_INT;
+            case Type.BT_LONG:    return PUT_FIELD_LONG;
+            case Type.BT_FLOAT:   return PUT_FIELD_FLOAT;
+            case Type.BT_DOUBLE:  return PUT_FIELD_DOUBLE;
+            case Type.BT_OBJECT:  return PUT_FIELD_OBJECT;
+            case Type.BT_BOOLEAN: return PUT_FIELD_BOOLEAN;
+            case Type.BT_BYTE:    return PUT_FIELD_BYTE;
+            case Type.BT_CHAR:    return PUT_FIELD_CHAR;
+            case Type.BT_SHORT:   return PUT_FIELD_SHORT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code get-static} rop for the given
+     * type. The result is a shared instance.
+     *
+     * @param type {@code non-null;} type of the field in question
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opGetStatic(TypeBearer type) {
+        switch (type.getBasicType()) {
+            case Type.BT_INT:     return GET_STATIC_INT;
+            case Type.BT_LONG:    return GET_STATIC_LONG;
+            case Type.BT_FLOAT:   return GET_STATIC_FLOAT;
+            case Type.BT_DOUBLE:  return GET_STATIC_DOUBLE;
+            case Type.BT_OBJECT:  return GET_STATIC_OBJECT;
+            case Type.BT_BOOLEAN: return GET_STATIC_BOOLEAN;
+            case Type.BT_BYTE:    return GET_STATIC_BYTE;
+            case Type.BT_CHAR:    return GET_STATIC_CHAR;
+            case Type.BT_SHORT:   return GET_STATIC_SHORT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code put-static} rop for the given
+     * type. The result is a shared instance.
+     *
+     * @param type {@code non-null;} type of the field in question
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opPutStatic(TypeBearer type) {
+        switch (type.getBasicType()) {
+            case Type.BT_INT:     return PUT_STATIC_INT;
+            case Type.BT_LONG:    return PUT_STATIC_LONG;
+            case Type.BT_FLOAT:   return PUT_STATIC_FLOAT;
+            case Type.BT_DOUBLE:  return PUT_STATIC_DOUBLE;
+            case Type.BT_OBJECT:  return PUT_STATIC_OBJECT;
+            case Type.BT_BOOLEAN: return PUT_STATIC_BOOLEAN;
+            case Type.BT_BYTE:    return PUT_STATIC_BYTE;
+            case Type.BT_CHAR:    return PUT_STATIC_CHAR;
+            case Type.BT_SHORT:   return PUT_STATIC_SHORT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * Returns the appropriate {@code invoke-static} rop for the
+     * given type. The result is typically a newly-allocated instance.
+     *
+     * @param meth {@code non-null;} descriptor of the method
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opInvokeStatic(Prototype meth) {
+        return new Rop(RegOps.INVOKE_STATIC,
+                       meth.getParameterFrameTypes(),
+                       StdTypeList.THROWABLE);
+    }
+
+    /**
+     * Returns the appropriate {@code invoke-virtual} rop for the
+     * given type. The result is typically a newly-allocated instance.
+     *
+     * @param meth {@code non-null;} descriptor of the method, including the
+     * {@code this} parameter
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opInvokeVirtual(Prototype meth) {
+        return new Rop(RegOps.INVOKE_VIRTUAL,
+                       meth.getParameterFrameTypes(),
+                       StdTypeList.THROWABLE);
+    }
+
+    /**
+     * Returns the appropriate {@code invoke-super} rop for the
+     * given type. The result is typically a newly-allocated instance.
+     *
+     * @param meth {@code non-null;} descriptor of the method, including the
+     * {@code this} parameter
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opInvokeSuper(Prototype meth) {
+        return new Rop(RegOps.INVOKE_SUPER,
+                       meth.getParameterFrameTypes(),
+                       StdTypeList.THROWABLE);
+    }
+
+    /**
+     * Returns the appropriate {@code invoke-direct} rop for the
+     * given type. The result is typically a newly-allocated instance.
+     *
+     * @param meth {@code non-null;} descriptor of the method, including the
+     * {@code this} parameter
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opInvokeDirect(Prototype meth) {
+        return new Rop(RegOps.INVOKE_DIRECT,
+                       meth.getParameterFrameTypes(),
+                       StdTypeList.THROWABLE);
+    }
+
+    /**
+     * Returns the appropriate {@code invoke-interface} rop for the
+     * given type. The result is typically a newly-allocated instance.
+     *
+     * @param meth {@code non-null;} descriptor of the method, including the
+     * {@code this} parameter
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opInvokeInterface(Prototype meth) {
+        return new Rop(RegOps.INVOKE_INTERFACE,
+                       meth.getParameterFrameTypes(),
+                       StdTypeList.THROWABLE);
+    }
+
+    /**
+     * Returns the appropriate {@code invoke-polymorphic} rop for the
+     * given type. The result is typically a newly-allocated instance.
+     *
+     * @param meth {@code non-null;} descriptor of the method, including the
+     * {@code this} parameter
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opInvokePolymorphic(Prototype meth) {
+        return new Rop(RegOps.INVOKE_POLYMORPHIC,
+                       meth.getParameterFrameTypes(),
+                       StdTypeList.THROWABLE);
+    }
+
+    /**
+     * Returns the appropriate {@code invoke-dynamic} rop for the
+     * given type. The result is typically a newly-allocated instance.
+     *
+     * @param meth {@code non-null;} descriptor of the method, including the
+     * {@code this} parameter
+     * @return {@code non-null;} an appropriate instance
+     */
+    private static Rop opInvokeCustom(Prototype meth) {
+        return new Rop(RegOps.INVOKE_CUSTOM,
+                       meth.getParameterFrameTypes(),
+                       StdTypeList.THROWABLE);
+    }
+
+    /**
+     * Returns the appropriate {@code mark-local} rop for the given type.
+     * The result is a shared instance.
+     *
+     * @param type {@code non-null;} type of value being marked
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static Rop opMarkLocal(TypeBearer type) {
+        switch (type.getBasicFrameType()) {
+            case Type.BT_INT:    return MARK_LOCAL_INT;
+            case Type.BT_LONG:   return MARK_LOCAL_LONG;
+            case Type.BT_FLOAT:  return MARK_LOCAL_FLOAT;
+            case Type.BT_DOUBLE: return MARK_LOCAL_DOUBLE;
+            case Type.BT_OBJECT: return MARK_LOCAL_OBJECT;
+        }
+
+        return throwBadType(type);
+    }
+
+    /**
+     * This class is uninstantiable.
+     */
+    private Rops() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Throws the right exception to complain about a bogus type.
+     *
+     * @param type {@code non-null;} the bad type
+     * @return never
+     */
+    private static Rop throwBadType(TypeBearer type) {
+        throw new IllegalArgumentException("bad type: " + type);
+    }
+
+    /**
+     * Throws the right exception to complain about a bogus list of types.
+     *
+     * @param types {@code non-null;} the bad types
+     * @return never
+     */
+    private static Rop throwBadTypes(TypeList types) {
+        throw new IllegalArgumentException("bad types: " + types);
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/SourcePosition.java b/dx/src/com/android/dx/rop/code/SourcePosition.java
new file mode 100644
index 0000000..76938c5
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/SourcePosition.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.util.Hex;
+
+/**
+ * Information about a source position for code, which includes both a
+ * line number and original bytecode address.
+ */
+public final class SourcePosition {
+    /** {@code non-null;} convenient "no information known" instance */
+    public static final SourcePosition NO_INFO =
+        new SourcePosition(null, -1, -1);
+
+    /** {@code null-ok;} name of the file of origin or {@code null} if unknown */
+    private final CstString sourceFile;
+
+    /**
+     * {@code >= -1;} the bytecode address, or {@code -1} if that
+     * information is unknown
+     */
+    private final int address;
+
+    /**
+     * {@code >= -1;} the line number, or {@code -1} if that
+     * information is unknown
+     */
+    private final int line;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param sourceFile {@code null-ok;} name of the file of origin or
+     * {@code null} if unknown
+     * @param address {@code >= -1;} original bytecode address or {@code -1}
+     * if unknown
+     * @param line {@code >= -1;} original line number or {@code -1} if
+     * unknown
+     */
+    public SourcePosition(CstString sourceFile, int address, int line) {
+        if (address < -1) {
+            throw new IllegalArgumentException("address < -1");
+        }
+
+        if (line < -1) {
+            throw new IllegalArgumentException("line < -1");
+        }
+
+        this.sourceFile = sourceFile;
+        this.address = address;
+        this.line = line;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(50);
+
+        if (sourceFile != null) {
+            sb.append(sourceFile.toHuman());
+            sb.append(":");
+        }
+
+        if (line >= 0) {
+            sb.append(line);
+        }
+
+        sb.append('@');
+
+        if (address < 0) {
+            sb.append("????");
+        } else {
+            sb.append(Hex.u2(address));
+        }
+
+        return sb.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof SourcePosition)) {
+            return false;
+        }
+
+        if (this == other) {
+            return true;
+        }
+
+        SourcePosition pos = (SourcePosition) other;
+
+        return (address == pos.address) && sameLineAndFile(pos);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return sourceFile.hashCode() + address + line;
+    }
+
+    /**
+     * Returns whether the lines match between this instance and
+     * the one given.
+     *
+     * @param other {@code non-null;} the instance to compare to
+     * @return {@code true} iff the lines match
+     */
+    public boolean sameLine(SourcePosition other) {
+        return (line == other.line);
+    }
+
+    /**
+     * Returns whether the lines and files match between this instance and
+     * the one given.
+     *
+     * @param other {@code non-null;} the instance to compare to
+     * @return {@code true} iff the lines and files match
+     */
+    public boolean sameLineAndFile(SourcePosition other) {
+        return (line == other.line) &&
+            ((sourceFile == other.sourceFile) ||
+             ((sourceFile != null) && sourceFile.equals(other.sourceFile)));
+    }
+
+    /**
+     * Gets the source file, if known.
+     *
+     * @return {@code null-ok;} the source file or {@code null} if unknown
+     */
+    public CstString getSourceFile() {
+        return sourceFile;
+    }
+
+    /**
+     * Gets the original bytecode address.
+     *
+     * @return {@code >= -1;} the address or {@code -1} if unknown
+     */
+    public int getAddress() {
+        return address;
+    }
+
+    /**
+     * Gets the original line number.
+     *
+     * @return {@code >= -1;} the original line number or {@code -1} if
+     * unknown
+     */
+    public int getLine() {
+        return line;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/SwitchInsn.java b/dx/src/com/android/dx/rop/code/SwitchInsn.java
new file mode 100644
index 0000000..31bb94d
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/SwitchInsn.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+import com.android.dx.util.IntList;
+
+/**
+ * Instruction which contains switch cases.
+ */
+public final class SwitchInsn
+        extends Insn {
+    /** {@code non-null;} list of switch cases */
+    private final IntList cases;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param result {@code null-ok;} spec for the result, if any
+     * @param sources {@code non-null;} specs for all the sources
+     * @param cases {@code non-null;} list of switch cases
+     */
+    public SwitchInsn(Rop opcode, SourcePosition position, RegisterSpec result,
+                      RegisterSpecList sources, IntList cases) {
+        super(opcode, position, result, sources);
+
+        if (opcode.getBranchingness() != Rop.BRANCH_SWITCH) {
+            throw new IllegalArgumentException("bogus branchingness");
+        }
+
+        if (cases == null) {
+            throw new NullPointerException("cases == null");
+        }
+
+        this.cases = cases;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String getInlineString() {
+        return cases.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList getCatches() {
+        return StdTypeList.EMPTY;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(Visitor visitor) {
+        visitor.visitSwitchInsn(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withAddedCatch(Type type) {
+        throw new UnsupportedOperationException("unsupported");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withRegisterOffset(int delta) {
+        return new SwitchInsn(getOpcode(), getPosition(),
+                              getResult().withOffset(delta),
+                              getSources().withOffset(delta),
+                              cases);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p> SwitchInsn always compares false. The current use for this method
+     * never encounters {@code SwitchInsn}s
+     */
+    @Override
+    public boolean contentEquals(Insn b) {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withNewRegisters(RegisterSpec result,
+            RegisterSpecList sources) {
+
+        return new SwitchInsn(getOpcode(), getPosition(),
+                              result,
+                              sources,
+                              cases);
+    }
+
+    /**
+     * Gets the list of switch cases.
+     *
+     * @return {@code non-null;} the case list
+     */
+    public IntList getCases() {
+        return cases;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/ThrowingCstInsn.java b/dx/src/com/android/dx/rop/code/ThrowingCstInsn.java
new file mode 100644
index 0000000..0cf321c
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/ThrowingCstInsn.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+
+/**
+ * Instruction which contains an explicit reference to a constant
+ * and which might throw an exception.
+ */
+public final class ThrowingCstInsn
+        extends CstInsn {
+    /** {@code non-null;} list of exceptions caught */
+    private final TypeList catches;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param sources {@code non-null;} specs for all the sources
+     * @param catches {@code non-null;} list of exceptions caught
+     * @param cst {@code non-null;} the constant
+     */
+    public ThrowingCstInsn(Rop opcode, SourcePosition position,
+                           RegisterSpecList sources,
+                           TypeList catches, Constant cst) {
+        super(opcode, position, null, sources, cst);
+
+        if (opcode.getBranchingness() != Rop.BRANCH_THROW) {
+            throw new IllegalArgumentException("opcode with invalid branchingness: " + opcode.getBranchingness());
+        }
+
+        if (catches == null) {
+            throw new NullPointerException("catches == null");
+        }
+
+        this.catches = catches;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String getInlineString() {
+        Constant cst = getConstant();
+        String constantString = cst.toHuman();
+        if (cst instanceof CstString) {
+            constantString = ((CstString) cst).toQuoted();
+        }
+        return constantString + " " + ThrowingInsn.toCatchString(catches);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList getCatches() {
+        return catches;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(Visitor visitor) {
+        visitor.visitThrowingCstInsn(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withAddedCatch(Type type) {
+        return new ThrowingCstInsn(getOpcode(), getPosition(),
+                                   getSources(), catches.withAddedType(type),
+                                   getConstant());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withRegisterOffset(int delta) {
+        return new ThrowingCstInsn(getOpcode(), getPosition(),
+                                   getSources().withOffset(delta),
+                                   catches,
+                                   getConstant());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withNewRegisters(RegisterSpec result,
+            RegisterSpecList sources) {
+
+        return new ThrowingCstInsn(getOpcode(), getPosition(),
+                                   sources,
+                                   catches,
+                                   getConstant());
+    }
+
+
+}
diff --git a/dx/src/com/android/dx/rop/code/ThrowingInsn.java b/dx/src/com/android/dx/rop/code/ThrowingInsn.java
new file mode 100644
index 0000000..7e69cc0
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/ThrowingInsn.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeList;
+
+/**
+ * Instruction which possibly throws. The {@code successors} list in the
+ * basic block an instance of this class is inside corresponds in-order to
+ * the list of exceptions handled by this instruction, with the
+ * no-exception case appended as the final target.
+ */
+public final class ThrowingInsn
+        extends Insn {
+    /** {@code non-null;} list of exceptions caught */
+    private final TypeList catches;
+
+    /**
+     * Gets the string form of a register spec list to be used as a catches
+     * list.
+     *
+     * @param catches {@code non-null;} the catches list
+     * @return {@code non-null;} the string form
+     */
+    public static String toCatchString(TypeList catches) {
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append("catch");
+
+        int sz = catches.size();
+        for (int i = 0; i < sz; i++) {
+            sb.append(" ");
+            sb.append(catches.getType(i).toHuman());
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param position {@code non-null;} source position
+     * @param sources {@code non-null;} specs for all the sources
+     * @param catches {@code non-null;} list of exceptions caught
+     */
+    public ThrowingInsn(Rop opcode, SourcePosition position,
+                        RegisterSpecList sources,
+                        TypeList catches) {
+        super(opcode, position, null, sources);
+
+        if (opcode.getBranchingness() != Rop.BRANCH_THROW) {
+            throw new IllegalArgumentException("opcode with invalid branchingness: " + opcode.getBranchingness());
+        }
+
+        if (catches == null) {
+            throw new NullPointerException("catches == null");
+        }
+
+        this.catches = catches;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String getInlineString() {
+        return toCatchString(catches);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList getCatches() {
+        return catches;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(Visitor visitor) {
+        visitor.visitThrowingInsn(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withAddedCatch(Type type) {
+        return new ThrowingInsn(getOpcode(), getPosition(),
+                                getSources(), catches.withAddedType(type));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withRegisterOffset(int delta) {
+        return new ThrowingInsn(getOpcode(), getPosition(),
+                                getSources().withOffset(delta),
+                                catches);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn withNewRegisters(RegisterSpec result,
+            RegisterSpecList sources) {
+
+        return new ThrowingInsn(getOpcode(), getPosition(),
+                                sources,
+                                catches);
+    }
+}
diff --git a/dx/src/com/android/dx/rop/code/TranslationAdvice.java b/dx/src/com/android/dx/rop/code/TranslationAdvice.java
new file mode 100644
index 0000000..832d84d
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/TranslationAdvice.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.code;
+
+/**
+ * Interface for "advice" passed from the late stage of translation back
+ * to the early stage. This allows for the final target architecture to
+ * exert its influence early in the translation process without having
+ * the early stage code be explicitly tied to the target.
+ */
+public interface TranslationAdvice {
+    /**
+     * Returns an indication of whether the target can directly represent an
+     * instruction with the given opcode operating on the given arguments,
+     * where the last source argument is used as a constant. (That is, the
+     * last argument must have a type which indicates it is a known constant.)
+     * The instruction associated must have exactly two sources.
+     *
+     * @param opcode {@code non-null;} the opcode
+     * @param sourceA {@code non-null;} the first source
+     * @param sourceB {@code non-null;} the second source
+     * @return {@code true} iff the target can represent the operation
+     * using a constant for the last argument
+     */
+    public boolean hasConstantOperation(Rop opcode,
+            RegisterSpec sourceA, RegisterSpec sourceB);
+
+    /**
+     * Returns true if the translation target requires the sources of the
+     * specified opcode to be in order and contiguous (eg, for an invoke-range)
+     *
+     * @param opcode {@code non-null;} opcode
+     * @param sources {@code non-null;} source list
+     * @return {@code true} iff the target requires the sources to be
+     * in order and contiguous.
+     */
+    public boolean requiresSourcesInOrder(Rop opcode, RegisterSpecList sources);
+
+    /**
+     * Gets the maximum register width that can be represented optimally.
+     * For example, Dex bytecode does not have instruction forms that take
+     * register numbers larger than 15 for all instructions so
+     * DexTranslationAdvice returns 15 here.
+     *
+     * @return register count noted above
+     */
+    public int getMaxOptimalRegisterCount();
+}
diff --git a/dx/src/com/android/dx/rop/code/package.html b/dx/src/com/android/dx/rop/code/package.html
new file mode 100644
index 0000000..86566b4
--- /dev/null
+++ b/dx/src/com/android/dx/rop/code/package.html
@@ -0,0 +1,8 @@
+<body>
+<p>Classes relating to a register-based opcode system.</p>
+
+<p><b>PACKAGES USED:</b>
+<ul>
+<li><code>com.android.dx.util</code></li>
+</ul>
+</body>
diff --git a/dx/src/com/android/dx/rop/cst/Constant.java b/dx/src/com/android/dx/rop/cst/Constant.java
new file mode 100644
index 0000000..3a26579
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/Constant.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.util.ToHuman;
+
+/**
+ * Base class for constants of all sorts.
+ */
+public abstract class Constant
+        implements ToHuman, Comparable<Constant> {
+    /**
+     * Returns {@code true} if this instance is a category-2 constant,
+     * meaning it takes up two slots in the constant pool, or
+     * {@code false} if this instance is category-1.
+     *
+     * @return {@code true} iff this instance is category-2
+     */
+    public abstract boolean isCategory2();
+
+    /**
+     * Returns the human name for the particular type of constant
+     * this instance is.
+     *
+     * @return {@code non-null;} the name
+     */
+    public abstract String typeName();
+
+    /**
+     * {@inheritDoc}
+     *
+     * This compares in class-major and value-minor order.
+     */
+    @Override
+    public final int compareTo(Constant other) {
+        Class clazz = getClass();
+        Class otherClazz = other.getClass();
+
+        if (clazz != otherClazz) {
+            return clazz.getName().compareTo(otherClazz.getName());
+        }
+
+        return compareTo0(other);
+    }
+
+    /**
+     * Compare the values of this and another instance, which are guaranteed
+     * to be of the same class. Subclasses must implement this.
+     *
+     * @param other {@code non-null;} the instance to compare to
+     * @return {@code -1}, {@code 0}, or {@code 1}, as usual
+     * for a comparison
+     */
+    protected abstract int compareTo0(Constant other);
+}
diff --git a/dx/src/com/android/dx/rop/cst/ConstantPool.java b/dx/src/com/android/dx/rop/cst/ConstantPool.java
new file mode 100644
index 0000000..f4b8086
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/ConstantPool.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+/**
+ * Interface for constant pools, which are, more or less, just lists of
+ * {@link Constant} objects.
+ */
+public interface ConstantPool {
+    /**
+     * Get the "size" of the constant pool. This corresponds to the
+     * class file field {@code constant_pool_count}, and is in fact
+     * always at least one more than the actual size of the constant pool,
+     * as element {@code 0} is always invalid.
+     *
+     * @return {@code >= 1;} the size
+     */
+    public int size();
+
+    /**
+     * Get the {@code n}th entry in the constant pool, which must
+     * be valid.
+     *
+     * @param n {@code n >= 0, n < size();} the constant pool index
+     * @return {@code non-null;} the corresponding entry
+     * @throws IllegalArgumentException thrown if {@code n} is
+     * in-range but invalid
+     */
+    public Constant get(int n);
+
+    /**
+     * Get the {@code n}th entry in the constant pool, which must
+     * be valid unless {@code n == 0}, in which case {@code null}
+     * is returned.
+     *
+     * @param n {@code n >= 0, n < size();} the constant pool index
+     * @return {@code null-ok;} the corresponding entry, if {@code n != 0}
+     * @throws IllegalArgumentException thrown if {@code n} is
+     * in-range and non-zero but invalid
+     */
+    public Constant get0Ok(int n);
+
+    /**
+     * Get the {@code n}th entry in the constant pool, or
+     * {@code null} if the index is in-range but invalid. In
+     * particular, {@code null} is returned for index {@code 0}
+     * as well as the index after any entry which is defined to take up
+     * two slots (that is, {@code Long} and {@code Double}
+     * entries).
+     *
+     * @param n {@code n >= 0, n < size();} the constant pool index
+     * @return {@code null-ok;} the corresponding entry, or {@code null} if
+     * the index is in-range but invalid
+     */
+    public Constant getOrNull(int n);
+
+    /**
+     * Get all entries in this constant pool.
+     *
+     * @return the returned array may contain null entries.
+     */
+    public Constant[] getEntries();
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstAnnotation.java b/dx/src/com/android/dx/rop/cst/CstAnnotation.java
new file mode 100644
index 0000000..b3d138d
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstAnnotation.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.annotation.Annotation;
+
+/**
+ * Constant type that represents an annotation.
+ */
+public final class CstAnnotation extends Constant {
+    /** {@code non-null;} the actual annotation */
+    private final Annotation annotation;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param annotation {@code non-null;} the annotation to hold
+     */
+    public CstAnnotation(Annotation annotation) {
+        if (annotation == null) {
+            throw new NullPointerException("annotation == null");
+        }
+
+        annotation.throwIfMutable();
+
+        this.annotation = annotation;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof CstAnnotation)) {
+            return false;
+        }
+
+        return annotation.equals(((CstAnnotation) other).annotation);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return annotation.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        return annotation.compareTo(((CstAnnotation) other).annotation);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return annotation.toString();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "annotation";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return annotation.toString();
+    }
+
+    /**
+     * Get the underlying annotation.
+     *
+     * @return {@code non-null;} the annotation
+     */
+    public Annotation getAnnotation() {
+        return annotation;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstArray.java b/dx/src/com/android/dx/rop/cst/CstArray.java
new file mode 100644
index 0000000..43a0a44
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstArray.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * Constant type to represent a fixed array of other constants.
+ */
+public class CstArray extends Constant {
+    /** {@code non-null;} the actual list of contents */
+    private final List list;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param list {@code non-null;} the actual list of contents
+     */
+    public CstArray(List list) {
+        if (list == null) {
+            throw new NullPointerException("list == null");
+        }
+
+        list.throwIfMutable();
+
+        this.list = list;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (! (other instanceof CstArray)) {
+            return false;
+        }
+
+        return list.equals(((CstArray) other).list);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return list.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        return list.compareTo(((CstArray) other).list);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return list.toString("array{", ", ", "}");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "array";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return list.toHuman("{", ", ", "}");
+    }
+
+    /**
+     * Get the underlying list.
+     *
+     * @return {@code non-null;} the list
+     */
+    public List getList() {
+        return list;
+    }
+
+    /**
+     * List of {@link Constant} instances.
+     */
+    public static final class List
+            extends FixedSizeList implements Comparable<List> {
+        /**
+         * Constructs an instance. All indices initially contain
+         * {@code null}.
+         *
+         * @param size the size of the list
+         */
+        public List(int size) {
+            super(size);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int compareTo(List other) {
+            int thisSize = size();
+            int otherSize = other.size();
+            int compareSize = (thisSize < otherSize) ? thisSize : otherSize;
+
+            for (int i = 0; i < compareSize; i++) {
+                Constant thisItem = (Constant) get0(i);
+                Constant otherItem = (Constant) other.get0(i);
+                int compare = thisItem.compareTo(otherItem);
+                if (compare != 0) {
+                    return compare;
+                }
+            }
+
+            if (thisSize < otherSize) {
+                return -1;
+            } else if (thisSize > otherSize) {
+                return 1;
+            }
+
+            return 0;
+        }
+
+        /**
+         * Gets the element at the given index. It is an error to call
+         * this with the index for an element which was never set; if you
+         * do that, this will throw {@code NullPointerException}.
+         *
+         * @param n {@code >= 0, < size();} which index
+         * @return {@code non-null;} element at that index
+         */
+        public Constant get(int n) {
+            return (Constant) get0(n);
+        }
+
+        /**
+         * Sets the element at the given index.
+         *
+         * @param n {@code >= 0, < size();} which index
+         * @param a {@code null-ok;} the element to set at {@code n}
+         */
+        public void set(int n, Constant a) {
+            set0(n, a);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstBaseMethodRef.java b/dx/src/com/android/dx/rop/cst/CstBaseMethodRef.java
new file mode 100644
index 0000000..76f3a30
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstBaseMethodRef.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+
+/**
+ * Base class for constants of "methodish" type.
+ *
+ * <p><b>Note:</b> As a {@link TypeBearer}, this class bears the return type
+ * of the method.</p>
+ */
+public abstract class CstBaseMethodRef
+        extends CstMemberRef {
+    /** {@code non-null;} the raw prototype for this method */
+    private final Prototype prototype;
+
+    /**
+     * {@code null-ok;} the prototype for this method taken to be an instance
+     * method, or {@code null} if not yet calculated
+     */
+    private Prototype instancePrototype;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param definingClass {@code non-null;} the type of the defining class
+     * @param nat {@code non-null;} the name-and-type
+     */
+    /*package*/ CstBaseMethodRef(CstType definingClass, CstNat nat) {
+        super(definingClass, nat);
+
+        String descriptor = getNat().getDescriptor().getString();
+        if (isSignaturePolymorphic()) {
+            // The prototype for signature polymorphic methods is used to
+            // construct call-site information and select the true invocation
+            // target (invoke() or invokeExact(). The prototype is created
+            // without being interned to avoid polluting the DEX file with
+            // unused data.
+            this.prototype = Prototype.fromDescriptor(descriptor);
+        } else {
+            this.prototype = Prototype.intern(descriptor);
+        }
+        this.instancePrototype = null;
+    }
+
+    /**
+     * Gets the raw prototype of this method. This doesn't include a
+     * {@code this} argument.
+     *
+     * @return {@code non-null;} the method prototype
+     */
+    public final Prototype getPrototype() {
+        return prototype;
+    }
+
+    /**
+     * Gets the prototype of this method as either a
+     * {@code static} or instance method. In the case of a
+     * {@code static} method, this is the same as the raw
+     * prototype. In the case of an instance method, this has an
+     * appropriately-typed {@code this} argument as the first
+     * one.
+     *
+     * @param isStatic whether the method should be considered static
+     * @return {@code non-null;} the method prototype
+     */
+    public final Prototype getPrototype(boolean isStatic) {
+        if (isStatic) {
+            return prototype;
+        } else {
+            if (instancePrototype == null) {
+                Type thisType = getDefiningClass().getClassType();
+                instancePrototype = prototype.withFirstParameter(thisType);
+            }
+            return instancePrototype;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected final int compareTo0(Constant other) {
+        int cmp = super.compareTo0(other);
+
+        if (cmp != 0) {
+            return cmp;
+        }
+
+        CstBaseMethodRef otherMethod = (CstBaseMethodRef) other;
+        return prototype.compareTo(otherMethod.prototype);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * In this case, this method returns the <i>return type</i> of this method.
+     *
+     * @return {@code non-null;} the method's return type
+     */
+    @Override
+    public final Type getType() {
+        return prototype.getReturnType();
+    }
+
+    /**
+     * Gets the number of words of parameters required by this
+     * method's descriptor. Since instances of this class have no way
+     * to know if they will be used in a {@code static} or
+     * instance context, one has to indicate this explicitly as an
+     * argument. This method is just a convenient shorthand for
+     * {@code getPrototype().getParameterTypes().getWordCount()},
+     * plus {@code 1} if the method is to be treated as an
+     * instance method.
+     *
+     * @param isStatic whether the method should be considered static
+     * @return {@code >= 0;} the argument word count
+     */
+    public final int getParameterWordCount(boolean isStatic) {
+        return getPrototype(isStatic).getParameterTypes().getWordCount();
+    }
+
+    /**
+     * Gets whether this is a reference to an instance initialization
+     * method. This is just a convenient shorthand for
+     * {@code getNat().isInstanceInit()}.
+     *
+     * @return {@code true} iff this is a reference to an
+     * instance initialization method
+     */
+    public final boolean isInstanceInit() {
+        return getNat().isInstanceInit();
+    }
+
+    /**
+     * Gets whether this is a reference to a class initialization
+     * method. This is just a convenient shorthand for
+     * {@code getNat().isClassInit()}.
+     *
+     * @return {@code true} iff this is a reference to an
+     * instance initialization method
+     */
+    public final boolean isClassInit() {
+        return getNat().isClassInit();
+    }
+
+    /**
+     * Get whether this is a reference to a signature polymorphic
+     * method. This means it is defined in {@code java.lang.invoke.MethodHandle} and
+     * is either the {@code invoke} or the {@code invokeExact} method.
+     *
+     * @return {@code true} iff this is a reference to a
+     * signature polymorphic method.
+     */
+    public final boolean isSignaturePolymorphic() {
+        CstType definingClass = getDefiningClass();
+        if (definingClass.equals(CstType.METHOD_HANDLE)) {
+            switch (getNat().getName().getString()) {
+                case "invoke":
+                case "invokeExact":
+                    return true;
+            }
+        } else if (definingClass.equals(CstType.VAR_HANDLE)) {
+            switch (getNat().getName().getString()) {
+                case "compareAndExchange":
+                case "compareAndExchangeAcquire":
+                case "compareAndExchangeRelease":
+                case "compareAndSet":
+                case "get":
+                case "getAcquire":
+                case "getAndAdd":
+                case "getAndAddAcquire":
+                case "getAndAddRelease":
+                case "getAndBitwiseAnd":
+                case "getAndBitwiseAndAcquire":
+                case "getAndBitwiseAndRelease":
+                case "getAndBitwiseOr":
+                case "getAndBitwiseOrAcquire":
+                case "getAndBitwiseOrRelease":
+                case "getAndBitwiseXor":
+                case "getAndBitwiseXorAcquire":
+                case "getAndBitwiseXorRelease":
+                case "getAndSet":
+                case "getAndSetAcquire":
+                case "getAndSetRelease":
+                case "getOpaque":
+                case "getVolatile":
+                case "set":
+                case "setOpaque":
+                case "setRelease":
+                case "setVolatile":
+                case "weakCompareAndSet":
+                case "weakCompareAndSetAcquire":
+                case "weakCompareAndSetPlain":
+                case "weakCompareAndSetRelease":
+                    return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstBoolean.java b/dx/src/com/android/dx/rop/cst/CstBoolean.java
new file mode 100644
index 0000000..de9a890
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstBoolean.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+
+/**
+ * Constants of type {@code boolean}.
+ */
+public final class CstBoolean
+        extends CstLiteral32 {
+    /** {@code non-null;} instance representing {@code false} */
+    public static final CstBoolean VALUE_FALSE = new CstBoolean(false);
+
+    /** {@code non-null;} instance representing {@code true} */
+    public static final CstBoolean VALUE_TRUE = new CstBoolean(true);
+
+    /**
+     * Makes an instance for the given value. This will return an
+     * already-allocated instance.
+     *
+     * @param value the {@code boolean} value
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstBoolean make(boolean value) {
+        return value ? VALUE_TRUE : VALUE_FALSE;
+    }
+
+    /**
+     * Makes an instance for the given {@code int} value. This
+     * will return an already-allocated instance.
+     *
+     * @param value must be either {@code 0} or {@code 1}
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstBoolean make(int value) {
+        if (value == 0) {
+            return VALUE_FALSE;
+        } else if (value == 1) {
+            return VALUE_TRUE;
+        } else {
+            throw new IllegalArgumentException("bogus value: " + value);
+        }
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param value the {@code boolean} value
+     */
+    private CstBoolean(boolean value) {
+        super(value ? 1 : 0);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getValue() ? "boolean{true}" : "boolean{false}";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.BOOLEAN;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "boolean";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return getValue() ? "true" : "false";
+    }
+
+    /**
+     * Gets the {@code boolean} value.
+     *
+     * @return the value
+     */
+    public boolean getValue() {
+        return (getIntBits() == 0) ? false : true;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstByte.java b/dx/src/com/android/dx/rop/cst/CstByte.java
new file mode 100644
index 0000000..0c63a12
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstByte.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Hex;
+
+/**
+ * Constants of type {@code byte}.
+ */
+public final class CstByte
+        extends CstLiteral32 {
+    /** {@code non-null;} the value {@code 0} as an instance of this class */
+    public static final CstByte VALUE_0 = make((byte) 0);
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param value the {@code byte} value
+     */
+    public static CstByte make(byte value) {
+        return new CstByte(value);
+    }
+
+    /**
+     * Makes an instance for the given {@code int} value. This
+     * may (but does not necessarily) return an already-allocated
+     * instance.
+     *
+     * @param value the value, which must be in range for a {@code byte}
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstByte make(int value) {
+        byte cast = (byte) value;
+
+        if (cast != value) {
+            throw new IllegalArgumentException("bogus byte value: " +
+                    value);
+        }
+
+        return make(cast);
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param value the {@code byte} value
+     */
+    private CstByte(byte value) {
+        super(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        int value = getIntBits();
+        return "byte{0x" + Hex.u1(value) + " / " + value + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.BYTE;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "byte";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return Integer.toString(getIntBits());
+    }
+
+    /**
+     * Gets the {@code byte} value.
+     *
+     * @return the value
+     */
+    public byte getValue() {
+        return (byte) getIntBits();
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstCallSite.java b/dx/src/com/android/dx/rop/cst/CstCallSite.java
new file mode 100644
index 0000000..df7de9a
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstCallSite.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.cf.code.BootstrapMethodArgumentsList;
+import com.android.dx.rop.type.Prototype;
+
+/**
+ * Constant type to represent a call site.
+ */
+public final class CstCallSite extends CstArray {
+    /**
+     * Creates an instance of a {@code CstCallSite}.
+     *
+     * @param bootstrapHandle {@code non-null;} the bootstrap method handle to invoke
+     * @param nat {@code non-null;} the name and type to be resolved by the bootstrap method handle
+     * @param optionalArguments {@code null-ok;} optional arguments to provide to the bootstrap
+     *     method
+     * @return a new {@code CstCallSite} instance
+     */
+    public static CstCallSite make(CstMethodHandle bootstrapHandle, CstNat nat,
+                                   BootstrapMethodArgumentsList optionalArguments) {
+        if (bootstrapHandle == null) {
+            throw new NullPointerException("bootstrapMethodHandle == null");
+        } else if (nat == null) {
+            throw new NullPointerException("nat == null");
+        }
+
+        List list = new List(3 + optionalArguments.size());
+        list.set(0, bootstrapHandle);
+        list.set(1, nat.getName());
+        list.set(2, new CstProtoRef(Prototype.fromDescriptor(nat.getDescriptor().getString())));
+        if (optionalArguments != null) {
+            for (int i = 0; i < optionalArguments.size(); ++i) {
+                list.set(i + 3, optionalArguments.get(i));
+            }
+        }
+        list.setImmutable();
+        return new CstCallSite(list);
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param list {@code non-null;} the actual list of contents
+     */
+    private CstCallSite(List list) {
+        super(list);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (other instanceof CstCallSite) {
+            return getList().equals(((CstCallSite) other).getList());
+        } else {
+            return false;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return getList().hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        return getList().compareTo(((CstCallSite) other).getList());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getList().toString("call site{", ", ", "}");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "call site";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return getList().toHuman("{", ", ", "}");
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstCallSiteRef.java b/dx/src/com/android/dx/rop/cst/CstCallSiteRef.java
new file mode 100644
index 0000000..2d7c63f
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstCallSiteRef.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.Type;
+
+/**
+ * Reference to a call site. Each instance of the invoke-custom bytecode uses a unique call site
+ * reference. The call site reference becomes a call site id in the DEX file and multiple call
+ * site id's can refer to the same call site data.
+ */
+public class CstCallSiteRef extends Constant {
+
+    /** {@code non-null;} The invokedynamic constant from the classfile */
+    private final CstInvokeDynamic invokeDynamic;
+
+    /** A unique identifier to ensure the uniqueness of {@code CstCallSiteRef} instances. */
+    private final int id;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param invokeDynamic {@code non-null;} an instance of invokeDynamic for reference
+     * @param id a distinguishing integer for instances referring to the same
+     *      {@code CstInvokeDynamic} instance
+     */
+    CstCallSiteRef(CstInvokeDynamic invokeDynamic, int id) {
+        if (invokeDynamic == null) {
+            throw new NullPointerException("invokeDynamic == null");
+        }
+        this.invokeDynamic = invokeDynamic;
+        this.id = id;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "CallSiteRef";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        CstCallSiteRef o = (CstCallSiteRef) other;
+        int result = invokeDynamic.compareTo(o.invokeDynamic);
+        if (result != 0) {
+            return result;
+        }
+        return Integer.compare(id, o.id);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return getCallSite().toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getCallSite().toString();
+    }
+
+    /**
+     * Gets the prototype of the method handle resolved at the call site.
+     *
+     * @return the prototype associated with the call site invocation
+     */
+    public Prototype getPrototype() {
+        return invokeDynamic.getPrototype();
+    }
+
+    /**
+     * Gets the return type of the method handle resolved at the call site.
+     *
+     * @return the return type associated with the call site invocation
+     */
+    public Type getReturnType() {
+        return invokeDynamic.getReturnType();
+    }
+
+    /**
+     * Gets the {@code CstCallSite} that this instance refers to.
+     *
+     * @return {@code null-ok;} the call site associated with this instance
+     */
+    public CstCallSite getCallSite() {
+        return invokeDynamic.getCallSite();
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstChar.java b/dx/src/com/android/dx/rop/cst/CstChar.java
new file mode 100644
index 0000000..4ad9598
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstChar.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Hex;
+
+/**
+ * Constants of type {@code char}.
+ */
+public final class CstChar
+        extends CstLiteral32 {
+    /** {@code non-null;} the value {@code 0} as an instance of this class */
+    public static final CstChar VALUE_0 = make((char) 0);
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param value the {@code char} value
+     */
+    public static CstChar make(char value) {
+        return new CstChar(value);
+    }
+
+    /**
+     * Makes an instance for the given {@code int} value. This
+     * may (but does not necessarily) return an already-allocated
+     * instance.
+     *
+     * @param value the value, which must be in range for a {@code char}
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstChar make(int value) {
+        char cast = (char) value;
+
+        if (cast != value) {
+            throw new IllegalArgumentException("bogus char value: " +
+                    value);
+        }
+
+        return make(cast);
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param value the {@code char} value
+     */
+    private CstChar(char value) {
+        super(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        int value = getIntBits();
+        return "char{0x" + Hex.u2(value) + " / " + value + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.CHAR;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "char";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return Integer.toString(getIntBits());
+    }
+
+    /**
+     * Gets the {@code char} value.
+     *
+     * @return the value
+     */
+    public char getValue() {
+        return (char) getIntBits();
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstDouble.java b/dx/src/com/android/dx/rop/cst/CstDouble.java
new file mode 100644
index 0000000..ff20474
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstDouble.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Hex;
+
+/**
+ * Constants of type {@code CONSTANT_Double_info}.
+ */
+public final class CstDouble
+        extends CstLiteral64 {
+    /** {@code non-null;} instance representing {@code 0} */
+    public static final CstDouble VALUE_0 =
+        new CstDouble(Double.doubleToLongBits(0.0));
+
+    /** {@code non-null;} instance representing {@code 1} */
+    public static final CstDouble VALUE_1 =
+        new CstDouble(Double.doubleToLongBits(1.0));
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param bits the {@code double} value as {@code long} bits
+     */
+    public static CstDouble make(long bits) {
+        /*
+         * Note: Javadoc notwithstanding, this implementation always
+         * allocates.
+         */
+        return new CstDouble(bits);
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param bits the {@code double} value as {@code long} bits
+     */
+    private CstDouble(long bits) {
+        super(bits);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        long bits = getLongBits();
+        return "double{0x" + Hex.u8(bits) + " / " +
+            Double.longBitsToDouble(bits) + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.DOUBLE;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "double";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return Double.toString(Double.longBitsToDouble(getLongBits()));
+    }
+
+    /**
+     * Gets the {@code double} value.
+     *
+     * @return the value
+     */
+    public double getValue() {
+        return Double.longBitsToDouble(getLongBits());
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstEnumRef.java b/dx/src/com/android/dx/rop/cst/CstEnumRef.java
new file mode 100644
index 0000000..b737fcc
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstEnumRef.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+
+/**
+ * Constant type to represent a reference to a particular constant
+ * value of an enumerated type.
+ */
+public final class CstEnumRef extends CstMemberRef {
+    /** {@code null-ok;} the corresponding field ref, lazily initialized */
+    private CstFieldRef fieldRef;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param nat {@code non-null;} the name-and-type; the defining class is derived
+     * from this
+     */
+    public CstEnumRef(CstNat nat) {
+        super(new CstType(nat.getFieldType()), nat);
+
+        fieldRef = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "enum";
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <b>Note:</b> This returns the enumerated type.
+     */
+    @Override
+    public Type getType() {
+        return getDefiningClass().getClassType();
+    }
+
+    /**
+     * Get a {@link CstFieldRef} that corresponds with this instance.
+     *
+     * @return {@code non-null;} the corresponding field reference
+     */
+    public CstFieldRef getFieldRef() {
+        if (fieldRef == null) {
+            fieldRef = new CstFieldRef(getDefiningClass(), getNat());
+        }
+
+        return fieldRef;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstFieldRef.java b/dx/src/com/android/dx/rop/cst/CstFieldRef.java
new file mode 100644
index 0000000..d4fc9f7
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstFieldRef.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+
+/**
+ * Constants of type {@code CONSTANT_Fieldref_info}.
+ */
+public final class CstFieldRef extends CstMemberRef {
+    /**
+     * Returns an instance of this class that represents the static
+     * field which should hold the class corresponding to a given
+     * primitive type. For example, if given {@link Type#INT}, this
+     * method returns an instance corresponding to the field
+     * {@code java.lang.Integer.TYPE}.
+     *
+     * @param primitiveType {@code non-null;} the primitive type
+     * @return {@code non-null;} the corresponding static field
+     */
+    public static CstFieldRef forPrimitiveType(Type primitiveType) {
+        return new CstFieldRef(CstType.forBoxedPrimitiveType(primitiveType),
+                CstNat.PRIMITIVE_TYPE_NAT);
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param definingClass {@code non-null;} the type of the defining class
+     * @param nat {@code non-null;} the name-and-type
+     */
+    public CstFieldRef(CstType definingClass, CstNat nat) {
+        super(definingClass, nat);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "field";
+    }
+
+    /**
+     * Returns the type of this field.
+     *
+     * @return {@code non-null;} the field's type
+     */
+    @Override
+    public Type getType() {
+        return getNat().getFieldType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        int cmp = super.compareTo0(other);
+
+        if (cmp != 0) {
+            return cmp;
+        }
+
+        CstFieldRef otherField = (CstFieldRef) other;
+        CstString thisDescriptor = getNat().getDescriptor();
+        CstString otherDescriptor = otherField.getNat().getDescriptor();
+        return thisDescriptor.compareTo(otherDescriptor);
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstFloat.java b/dx/src/com/android/dx/rop/cst/CstFloat.java
new file mode 100644
index 0000000..b7056ae
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstFloat.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Hex;
+
+/**
+ * Constants of type {@code CONSTANT_Float_info}.
+ */
+public final class CstFloat
+        extends CstLiteral32 {
+    /** {@code non-null;} instance representing {@code 0} */
+    public static final CstFloat VALUE_0 = make(Float.floatToIntBits(0.0f));
+
+    /** {@code non-null;} instance representing {@code 1} */
+    public static final CstFloat VALUE_1 = make(Float.floatToIntBits(1.0f));
+
+    /** {@code non-null;} instance representing {@code 2} */
+    public static final CstFloat VALUE_2 = make(Float.floatToIntBits(2.0f));
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param bits the {@code float} value as {@code int} bits
+     */
+    public static CstFloat make(int bits) {
+        /*
+         * Note: Javadoc notwithstanding, this implementation always
+         * allocates.
+         */
+        return new CstFloat(bits);
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param bits the {@code float} value as {@code int} bits
+     */
+    private CstFloat(int bits) {
+        super(bits);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        int bits = getIntBits();
+        return "float{0x" + Hex.u4(bits) + " / " +
+            Float.intBitsToFloat(bits) + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.FLOAT;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "float";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return Float.toString(Float.intBitsToFloat(getIntBits()));
+    }
+
+    /**
+     * Gets the {@code float} value.
+     *
+     * @return the value
+     */
+    public float getValue() {
+        return Float.intBitsToFloat(getIntBits());
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstInteger.java b/dx/src/com/android/dx/rop/cst/CstInteger.java
new file mode 100644
index 0000000..7ed2cc3
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstInteger.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Hex;
+
+/**
+ * Constants of type {@code CONSTANT_Integer_info}.
+ */
+public final class CstInteger
+        extends CstLiteral32 {
+    /** {@code non-null;} array of cached instances */
+    private static final CstInteger[] cache = new CstInteger[511];
+
+    /** {@code non-null;} instance representing {@code -1} */
+    public static final CstInteger VALUE_M1 = make(-1);
+
+    /** {@code non-null;} instance representing {@code 0} */
+    public static final CstInteger VALUE_0 = make(0);
+
+    /** {@code non-null;} instance representing {@code 1} */
+    public static final CstInteger VALUE_1 = make(1);
+
+    /** {@code non-null;} instance representing {@code 2} */
+    public static final CstInteger VALUE_2 = make(2);
+
+    /** {@code non-null;} instance representing {@code 3} */
+    public static final CstInteger VALUE_3 = make(3);
+
+    /** {@code non-null;} instance representing {@code 4} */
+    public static final CstInteger VALUE_4 = make(4);
+
+    /** {@code non-null;} instance representing {@code 5} */
+    public static final CstInteger VALUE_5 = make(5);
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param value the {@code int} value
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstInteger make(int value) {
+        /*
+         * Note: No need to synchronize, since we don't make any sort
+         * of guarantee about ==, and it's okay to overwrite existing
+         * entries too.
+         */
+        int idx = (value & 0x7fffffff) % cache.length;
+        CstInteger obj = cache[idx];
+
+        if ((obj != null) && (obj.getValue() == value)) {
+            return obj;
+        }
+
+        obj = new CstInteger(value);
+        cache[idx] = obj;
+        return obj;
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param value the {@code int} value
+     */
+    private CstInteger(int value) {
+        super(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        int value = getIntBits();
+        return "int{0x" + Hex.u4(value) + " / " + value + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.INT;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "int";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return Integer.toString(getIntBits());
+    }
+
+    /**
+     * Gets the {@code int} value.
+     *
+     * @return the value
+     */
+    public int getValue() {
+        return getIntBits();
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstInterfaceMethodRef.java b/dx/src/com/android/dx/rop/cst/CstInterfaceMethodRef.java
new file mode 100644
index 0000000..8b8cb30
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstInterfaceMethodRef.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+/**
+ * Constants of type {@code CONSTANT_InterfaceMethodref_info}.
+ */
+public final class CstInterfaceMethodRef
+        extends CstBaseMethodRef {
+    /**
+     * {@code null-ok;} normal {@link CstMethodRef} that corresponds to this
+     * instance, if calculated
+     */
+    private CstMethodRef methodRef;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param definingClass {@code non-null;} the type of the defining class
+     * @param nat {@code non-null;} the name-and-type
+     */
+    public CstInterfaceMethodRef(CstType definingClass, CstNat nat) {
+        super(definingClass, nat);
+        methodRef = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "ifaceMethod";
+    }
+
+    /**
+     * Gets a normal (non-interface) {@link CstMethodRef} that corresponds to
+     * this instance.
+     *
+     * @return {@code non-null;} an appropriate instance
+     */
+    public CstMethodRef toMethodRef() {
+        if (methodRef == null) {
+            methodRef = new CstMethodRef(getDefiningClass(), getNat());
+        }
+
+        return methodRef;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstInvokeDynamic.java b/dx/src/com/android/dx/rop/cst/CstInvokeDynamic.java
new file mode 100644
index 0000000..2ef0b2c
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstInvokeDynamic.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Constants of type {@code InvokeDynamic}. These are present in the class file.
+ */
+public final class CstInvokeDynamic extends Constant {
+
+    /** The index of the bootstrap method in the bootstrap method table */
+    private final int bootstrapMethodIndex;
+
+    /** {@code non-null;} the name and type */
+    private final CstNat nat;
+
+    /** {@code non-null;} the prototype derived from {@code nat} */
+    private final Prototype prototype;
+
+    /** {@code null-ok;} the class declaring invoke dynamic instance */
+    private CstType declaringClass;
+
+    /** {@code null-ok;} the associated call site */
+    private CstCallSite callSite;
+
+    /** {@code non-null;} list of references to this {@code CstInvokeDynamic} constant */
+    private final List<CstCallSiteRef> references;
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param bootstrapMethodIndex The index of the bootstrap method in the bootstrap method table
+     * @param nat the name and type
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstInvokeDynamic make(int bootstrapMethodIndex, CstNat nat) {
+        return new CstInvokeDynamic(bootstrapMethodIndex, nat);
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param bootstrapMethodIndex The index of the bootstrap method in the bootstrap method table
+     * @param nat the name and type
+     */
+    private CstInvokeDynamic(int bootstrapMethodIndex, CstNat nat) {
+        this.bootstrapMethodIndex = bootstrapMethodIndex;
+        this.nat = nat;
+        this.prototype = Prototype.fromDescriptor(nat.getDescriptor().toHuman());
+        this.references = new ArrayList<>();
+    }
+
+    /**
+     * Creates a {@code CstCallSiteRef} that refers to this instance.
+     *
+     * @return {@code non-null;} a reference to this instance
+     */
+    public CstCallSiteRef addReference() {
+        CstCallSiteRef ref = new CstCallSiteRef(this, references.size());
+        references.add(ref);
+        return ref;
+    }
+
+    /**
+     * Gets the list of references to this instance.
+     *
+     * @return {@code non-null;} the list of references to this instance
+     */
+    public List<CstCallSiteRef> getReferences() {
+        return references;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "InvokeDynamic";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        String klass = (declaringClass != null) ? declaringClass.toHuman() : "Unknown";
+        return "InvokeDynamic(" + klass + ":" + bootstrapMethodIndex + ", " + nat.toHuman() + ")";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        CstInvokeDynamic otherInvoke = (CstInvokeDynamic) other;
+        int result = Integer.compare(bootstrapMethodIndex, otherInvoke.getBootstrapMethodIndex());
+        if (result != 0) {
+            return result;
+        }
+
+        result = nat.compareTo(otherInvoke.getNat());
+        if (result != 0) {
+            return result;
+        }
+
+        result = declaringClass.compareTo(otherInvoke.getDeclaringClass());
+        if (result != 0) {
+            return result;
+        }
+
+        return callSite.compareTo(otherInvoke.getCallSite());
+    }
+
+    /**
+     * Gets the bootstrap method index.
+     *
+     * @return the bootstrap method index
+     */
+    public int getBootstrapMethodIndex() {
+        return bootstrapMethodIndex;
+    }
+
+    /**
+     * Gets the {@code CstNat} value.
+     *
+     * @return the name and type
+     */
+    public CstNat getNat() {
+        return nat;
+    }
+
+    /**
+     * Gets the {@code Prototype} of the {@code invokedynamic} call site.
+     *
+     * @return the {@code invokedynamic} call site prototype
+     */
+    public Prototype getPrototype() {
+        return prototype;
+    }
+
+    /**
+     * Gets the return type.
+     *
+     * @return {@code non-null;} the return type
+     */
+    public Type getReturnType() {
+        return prototype.getReturnType();
+    }
+
+    /**
+     * Sets the declaring class of this instance.
+     *
+     * This is a set-once property.
+     *
+     * @param declaringClass {@code non-null;} the declaring class
+     */
+    public void setDeclaringClass(CstType declaringClass) {
+        if (this.declaringClass != null) {
+            throw new IllegalArgumentException("already added declaring class");
+        } else if (declaringClass == null) {
+            throw new NullPointerException("declaringClass == null");
+        }
+        this.declaringClass = declaringClass;
+    }
+
+    /**
+     * Gets the declaring class of this instance.
+     *
+     * @return the declaring class
+     */
+    public CstType getDeclaringClass() {
+        return declaringClass;
+    }
+
+    /**
+     * Sets the call site associated with this instance.
+     *
+     * This is set-once property.
+     *
+     * @param callSite {@code non-null;} the call site created for this instance
+     */
+    public void setCallSite(CstCallSite callSite) {
+        if (this.callSite != null) {
+            throw new IllegalArgumentException("already added call site");
+        } else if (callSite == null) {
+            throw new NullPointerException("callSite == null");
+        }
+        this.callSite = callSite;
+    }
+
+    /**
+     * Gets the call site associated with this instance.
+     *
+     * @return the call site associated with this instance
+     */
+    public CstCallSite getCallSite() {
+        return callSite;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstKnownNull.java b/dx/src/com/android/dx/rop/cst/CstKnownNull.java
new file mode 100644
index 0000000..e764419
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstKnownNull.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+
+/**
+ * Constant type to represent a known-{@code null} value.
+ */
+public final class CstKnownNull extends CstLiteralBits {
+    /** {@code non-null;} unique instance of this class */
+    public static final CstKnownNull THE_ONE = new CstKnownNull();
+
+    /**
+     * Constructs an instance. This class is not publicly instantiable. Use
+     * {@link #THE_ONE}.
+     */
+    private CstKnownNull() {
+        // This space intentionally left blank.
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        return (other instanceof CstKnownNull);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return 0x4466757a;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "known-null";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.KNOWN_NULL;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "known-null";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return "null";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean fitsInInt() {
+        // See comment in getIntBits().
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * As "literal bits," a known-null is always represented as the
+     * number zero.
+     */
+    @Override
+    public int getIntBits() {
+        return 0;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * As "literal bits," a known-null is always represented as the
+     * number zero.
+     */
+    @Override
+    public long getLongBits() {
+        return 0;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstLiteral32.java b/dx/src/com/android/dx/rop/cst/CstLiteral32.java
new file mode 100644
index 0000000..042cbd9
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstLiteral32.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+/**
+ * Constants which are literal 32-bit values of some sort.
+ */
+public abstract class CstLiteral32
+        extends CstLiteralBits {
+    /** the value as {@code int} bits */
+    private final int bits;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bits the value as {@code int} bits
+     */
+    /*package*/ CstLiteral32(int bits) {
+        this.bits = bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean equals(Object other) {
+        return (other != null) &&
+            (getClass() == other.getClass()) &&
+            bits == ((CstLiteral32) other).bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int hashCode() {
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        int otherBits = ((CstLiteral32) other).bits;
+
+        if (bits < otherBits) {
+            return -1;
+        } else if (bits > otherBits) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean fitsInInt() {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int getIntBits() {
+        return bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final long getLongBits() {
+        return (long) bits;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstLiteral64.java b/dx/src/com/android/dx/rop/cst/CstLiteral64.java
new file mode 100644
index 0000000..94cfa8c
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstLiteral64.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+/**
+ * Constants which are literal 64-bit values of some sort.
+ */
+public abstract class CstLiteral64
+        extends CstLiteralBits {
+    /** the value as {@code long} bits */
+    private final long bits;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bits the value as {@code long} bits
+     */
+    /*package*/ CstLiteral64(long bits) {
+        this.bits = bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean equals(Object other) {
+        return (other != null) &&
+            (getClass() == other.getClass()) &&
+            bits == ((CstLiteral64) other).bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int hashCode() {
+        return (int) bits ^ (int) (bits >> 32);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        long otherBits = ((CstLiteral64) other).bits;
+
+        if (bits < otherBits) {
+            return -1;
+        } else if (bits > otherBits) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean isCategory2() {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean fitsInInt() {
+        return (int) bits == bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int getIntBits() {
+        return (int) bits;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final long getLongBits() {
+        return bits;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstLiteralBits.java b/dx/src/com/android/dx/rop/cst/CstLiteralBits.java
new file mode 100644
index 0000000..8bf13a2
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstLiteralBits.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+/**
+ * Constants which are literal bitwise values of some sort.
+ */
+public abstract class CstLiteralBits
+        extends TypedConstant {
+    /**
+     * Returns whether or not this instance's value may be accurately
+     * represented as an {@code int}. The rule is that if there
+     * is an {@code int} which may be sign-extended to yield this
+     * instance's value, then this method returns {@code true}.
+     * Otherwise, it returns {@code false}.
+     *
+     * @return {@code true} iff this instance fits in an {@code int}
+     */
+    public abstract boolean fitsInInt();
+
+    /**
+     * Gets the value as {@code int} bits. If this instance contains
+     * more bits than fit in an {@code int}, then this returns only
+     * the low-order bits.
+     *
+     * @return the bits
+     */
+    public abstract int getIntBits();
+
+    /**
+     * Gets the value as {@code long} bits. If this instance contains
+     * fewer bits than fit in a {@code long}, then the result of this
+     * method is the sign extension of the value.
+     *
+     * @return the bits
+     */
+    public abstract long getLongBits();
+
+    /**
+     * Returns true if this value can fit in 16 bits with sign-extension.
+     *
+     * @return true if the sign-extended lower 16 bits are the same as
+     * the value.
+     */
+    public boolean fitsIn16Bits() {
+        if (! fitsInInt()) {
+            return false;
+        }
+
+        int bits = getIntBits();
+        return (short) bits == bits;
+    }
+
+    /**
+     * Returns true if this value can fit in 8 bits with sign-extension.
+     *
+     * @return true if the sign-extended lower 8 bits are the same as
+     * the value.
+     */
+    public boolean fitsIn8Bits() {
+        if (! fitsInInt()) {
+            return false;
+        }
+
+        int bits = getIntBits();
+        return (byte) bits == bits;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstLong.java b/dx/src/com/android/dx/rop/cst/CstLong.java
new file mode 100644
index 0000000..88a57a8
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstLong.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Hex;
+
+/**
+ * Constants of type {@code CONSTANT_Long_info}.
+ */
+public final class CstLong
+        extends CstLiteral64 {
+    /** {@code non-null;} instance representing {@code 0} */
+    public static final CstLong VALUE_0 = make(0);
+
+    /** {@code non-null;} instance representing {@code 1} */
+    public static final CstLong VALUE_1 = make(1);
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param value the {@code long} value
+     */
+    public static CstLong make(long value) {
+        /*
+         * Note: Javadoc notwithstanding, this implementation always
+         * allocates.
+         */
+        return new CstLong(value);
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param value the {@code long} value
+     */
+    private CstLong(long value) {
+        super(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        long value = getLongBits();
+        return "long{0x" + Hex.u8(value) + " / " + value + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.LONG;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "long";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return Long.toString(getLongBits());
+    }
+
+    /**
+     * Gets the {@code long} value.
+     *
+     * @return the value
+     */
+    public long getValue() {
+        return getLongBits();
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstMemberRef.java b/dx/src/com/android/dx/rop/cst/CstMemberRef.java
new file mode 100644
index 0000000..0306847
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstMemberRef.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+/**
+ * Constants of type {@code CONSTANT_*ref_info}.
+ */
+public abstract class CstMemberRef extends TypedConstant {
+    /** {@code non-null;} the type of the defining class */
+    private final CstType definingClass;
+
+    /** {@code non-null;} the name-and-type */
+    private final CstNat nat;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param definingClass {@code non-null;} the type of the defining class
+     * @param nat {@code non-null;} the name-and-type
+     */
+    /*package*/ CstMemberRef(CstType definingClass, CstNat nat) {
+        if (definingClass == null) {
+            throw new NullPointerException("definingClass == null");
+        }
+
+        if (nat == null) {
+            throw new NullPointerException("nat == null");
+        }
+
+        this.definingClass = definingClass;
+        this.nat = nat;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean equals(Object other) {
+        if ((other == null) || (getClass() != other.getClass())) {
+            return false;
+        }
+
+        CstMemberRef otherRef = (CstMemberRef) other;
+        return definingClass.equals(otherRef.definingClass) &&
+            nat.equals(otherRef.nat);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int hashCode() {
+        return (definingClass.hashCode() * 31) ^ nat.hashCode();
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p><b>Note:</b> This implementation just compares the defining
+     * class and name, and it is up to subclasses to compare the rest
+     * after calling {@code super.compareTo0()}.</p>
+     */
+    @Override
+    protected int compareTo0(Constant other) {
+        CstMemberRef otherMember = (CstMemberRef) other;
+        int cmp = definingClass.compareTo(otherMember.definingClass);
+
+        if (cmp != 0) {
+            return cmp;
+        }
+
+        CstString thisName = nat.getName();
+        CstString otherName = otherMember.nat.getName();
+
+        return thisName.compareTo(otherName);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final String toString() {
+        return typeName() + '{' + toHuman() + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final String toHuman() {
+        return definingClass.toHuman() + '.' + nat.toHuman();
+    }
+
+    /**
+     * Gets the type of the defining class.
+     *
+     * @return {@code non-null;} the type of defining class
+     */
+    public final CstType getDefiningClass() {
+        return definingClass;
+    }
+
+    /**
+     * Gets the defining name-and-type.
+     *
+     * @return {@code non-null;} the name-and-type
+     */
+    public final CstNat getNat() {
+        return nat;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstMethodHandle.java b/dx/src/com/android/dx/rop/cst/CstMethodHandle.java
new file mode 100644
index 0000000..e96700f
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstMethodHandle.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+
+/**
+ * Constants of type {@code MethodHandle}.
+ */
+public final class CstMethodHandle extends TypedConstant {
+
+    public static final int METHOD_HANDLE_TYPE_STATIC_PUT = 0;
+    public static final int METHOD_HANDLE_TYPE_STATIC_GET = 1;
+    public static final int METHOD_HANDLE_TYPE_INSTANCE_PUT = 2;
+    public static final int METHOD_HANDLE_TYPE_INSTANCE_GET = 3;
+
+    public static final int METHOD_HANDLE_TYPE_INVOKE_STATIC = 4;
+    public static final int METHOD_HANDLE_TYPE_INVOKE_INSTANCE = 5;
+    public static final int METHOD_HANDLE_TYPE_INVOKE_CONSTRUCTOR = 6;
+    public static final int METHOD_HANDLE_TYPE_INVOKE_DIRECT = 7;
+    public static final int METHOD_HANDLE_TYPE_INVOKE_INTERFACE = 8;
+
+    private static final String [] TYPE_NAMES = {
+        "static-put", "static-get", "instance-put", "instance-get",
+        "invoke-static", "invoke-instance", "invoke-constructor", "invoke-direct",
+        "invoke-interface"
+    };
+
+    /** The type of MethodHandle */
+    private final int type;
+
+    /** {@code non-null;} the referenced constant */
+    private final Constant ref;
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param type the type of this handle
+     * @param ref {@code non-null;} the referenced field or method constant
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstMethodHandle make(int type, Constant ref) {
+        if (isAccessor(type)) {
+            if (!(ref instanceof CstFieldRef)) {
+                throw new IllegalArgumentException("ref has wrong type: " + ref.getClass());
+            }
+        } else if (isInvocation(type)) {
+            if (!(ref instanceof CstBaseMethodRef)) {
+                throw new IllegalArgumentException("ref has wrong type: " + ref.getClass());
+            }
+        } else {
+            throw new IllegalArgumentException("type is out of range: " + type);
+        }
+        return new CstMethodHandle(type, ref);
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param type the type of this handle
+     * @param ref the actual referenced constant
+     */
+    private CstMethodHandle(int type, Constant ref) {
+        this.type = type;
+        this.ref = ref;
+    }
+
+    /**
+     * Gets the actual constant.
+     *
+     * @return the value
+     */
+    public Constant getRef() {
+        return ref;
+    }
+
+    /**
+     * Gets the type of this method handle.
+     *
+     * @return the type
+     */
+    public int getMethodHandleType() {
+        return type;
+    }
+
+    /**
+     * Reports whether the method handle type is a field accessor.
+     *
+     * @param type the method handle type
+     * @return true if the method handle type is a field accessor, false otherwise
+     */
+    public static boolean isAccessor(int type) {
+        switch (type) {
+            case METHOD_HANDLE_TYPE_STATIC_PUT:
+            case METHOD_HANDLE_TYPE_STATIC_GET:
+            case METHOD_HANDLE_TYPE_INSTANCE_PUT:
+            case METHOD_HANDLE_TYPE_INSTANCE_GET:
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Reports whether the method handle is a field accessor.
+     *
+     * @return true if the method handle is a field accessor, false otherwise
+     */
+    public boolean isAccessor() {
+        return isAccessor(type);
+    }
+
+    /**
+     * Reports whether the method handle type is a method invocation.
+     *
+     * @param type the method handle type
+     * @return true if the method handle type is a method invocation, false otherwise
+     */
+    public static boolean isInvocation(int type) {
+        switch (type) {
+            case METHOD_HANDLE_TYPE_INVOKE_STATIC:
+            case METHOD_HANDLE_TYPE_INVOKE_INSTANCE:
+            case METHOD_HANDLE_TYPE_INVOKE_CONSTRUCTOR:
+            case METHOD_HANDLE_TYPE_INVOKE_DIRECT:
+            case METHOD_HANDLE_TYPE_INVOKE_INTERFACE:
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Reports whether the method handle is a method invocation.
+     *
+     * @return true if the method handle is a method invocation, false otherwise
+     */
+    public boolean isInvocation() {
+        return isInvocation(type);
+    }
+
+    /**
+     * Gets a human readable name for a method handle type.
+     *
+     * @param type the method handle type
+     * @return the string representation of the type
+     */
+    public static String getMethodHandleTypeName(final int type) {
+        return TYPE_NAMES[type];
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        CstMethodHandle otherHandle = (CstMethodHandle) other;
+        if (getMethodHandleType() == otherHandle.getMethodHandleType()) {
+            return getRef().compareTo(otherHandle.getRef());
+        } else {
+            return Integer.compare(getMethodHandleType(), otherHandle.getMethodHandleType());
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "method-handle{" + toHuman() + "}";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "method handle";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return getMethodHandleTypeName(type)+ "," + ref.toString();
+    }
+
+    @Override
+    public Type getType() {
+        return Type.METHOD_HANDLE;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstMethodRef.java b/dx/src/com/android/dx/rop/cst/CstMethodRef.java
new file mode 100644
index 0000000..075bc7c
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstMethodRef.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+/**
+ * Constants of type {@code CONSTANT_Methodref_info}.
+ */
+public final class CstMethodRef
+        extends CstBaseMethodRef {
+    /**
+     * Constructs an instance.
+     *
+     * @param definingClass {@code non-null;} the type of the defining class
+     * @param nat {@code non-null;} the name-and-type
+     */
+    public CstMethodRef(CstType definingClass, CstNat nat) {
+        super(definingClass, nat);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "method";
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstNat.java b/dx/src/com/android/dx/rop/cst/CstNat.java
new file mode 100644
index 0000000..e149fdc
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstNat.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+
+/**
+ * Constants of type {@code CONSTANT_NameAndType_info}.
+ */
+public final class CstNat extends Constant {
+    /**
+     * {@code non-null;} the instance for name {@code TYPE} and descriptor
+     * {@code java.lang.Class}, which is useful when dealing with
+     * wrapped primitives
+     */
+    public static final CstNat PRIMITIVE_TYPE_NAT =
+        new CstNat(new CstString("TYPE"),
+                   new CstString("Ljava/lang/Class;"));
+
+    /** {@code non-null;} the name */
+    private final CstString name;
+
+    /** {@code non-null;} the descriptor (type) */
+    private final CstString descriptor;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param name {@code non-null;} the name
+     * @param descriptor {@code non-null;} the descriptor
+     */
+    public CstNat(CstString name, CstString descriptor) {
+        if (name == null) {
+            throw new NullPointerException("name == null");
+        }
+
+        if (descriptor == null) {
+            throw new NullPointerException("descriptor == null");
+        }
+
+        this.name = name;
+        this.descriptor = descriptor;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof CstNat)) {
+            return false;
+        }
+
+        CstNat otherNat = (CstNat) other;
+        return name.equals(otherNat.name) &&
+            descriptor.equals(otherNat.descriptor);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return (name.hashCode() * 31) ^ descriptor.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        CstNat otherNat = (CstNat) other;
+        int cmp = name.compareTo(otherNat.name);
+
+        if (cmp != 0) {
+            return cmp;
+        }
+
+        return descriptor.compareTo(otherNat.descriptor);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "nat{" + toHuman() + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "nat";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /**
+     * Gets the name.
+     *
+     * @return {@code non-null;} the name
+     */
+    public CstString getName() {
+        return name;
+    }
+
+    /**
+     * Gets the descriptor.
+     *
+     * @return {@code non-null;} the descriptor
+     */
+    public CstString getDescriptor() {
+        return descriptor;
+    }
+
+    /**
+     * Returns an unadorned but human-readable version of the name-and-type
+     * value.
+     *
+     * @return {@code non-null;} the human form
+     */
+    @Override
+    public String toHuman() {
+        return name.toHuman() + ':' + descriptor.toHuman();
+    }
+
+    /**
+     * Gets the field type corresponding to this instance's descriptor.
+     * This method is only valid to call if the descriptor in fact describes
+     * a field (and not a method).
+     *
+     * @return {@code non-null;} the field type
+     */
+    public Type getFieldType() {
+        return Type.intern(descriptor.getString());
+    }
+
+    /**
+     * Gets whether this instance has the name of a standard instance
+     * initialization method. This is just a convenient shorthand for
+     * {@code getName().getString().equals("<init>")}.
+     *
+     * @return {@code true} iff this is a reference to an
+     * instance initialization method
+     */
+    public final boolean isInstanceInit() {
+        return name.getString().equals("<init>");
+    }
+
+    /**
+     * Gets whether this instance has the name of a standard class
+     * initialization method. This is just a convenient shorthand for
+     * {@code getName().getString().equals("<clinit>")}.
+     *
+     * @return {@code true} iff this is a reference to an
+     * instance initialization method
+     */
+    public final boolean isClassInit() {
+        return name.getString().equals("<clinit>");
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstProtoRef.java b/dx/src/com/android/dx/rop/cst/CstProtoRef.java
new file mode 100644
index 0000000..9d0a783
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstProtoRef.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.Type;
+
+/**
+ * Prototype reference.
+ */
+public final class CstProtoRef extends TypedConstant {
+
+    /** {@code non-null;} the prototype */
+    private final Prototype prototype;
+
+    public CstProtoRef(Prototype prototype) {
+        this.prototype = prototype;
+    }
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param descriptor the method descriptor
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstProtoRef make(CstString descriptor) {
+        Prototype prototype = Prototype.fromDescriptor(descriptor.getString());
+        return new CstProtoRef(prototype);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof CstProtoRef)) {
+            return false;
+        }
+        CstProtoRef otherCstProtoRef = (CstProtoRef) other;
+        return getPrototype().equals(otherCstProtoRef.getPrototype());
+    }
+
+    @Override
+    public int hashCode() {
+        return prototype.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "proto";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        CstProtoRef otherCstProtoRef = (CstProtoRef) other;
+        return prototype.compareTo(otherCstProtoRef.getPrototype());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return prototype.getDescriptor();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final String toString() {
+        return typeName() + "{" + toHuman() + '}';
+    }
+
+    public Prototype getPrototype() {
+        return prototype;
+    }
+
+    @Override
+    public Type getType() {
+        return Type.METHOD_TYPE;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstShort.java b/dx/src/com/android/dx/rop/cst/CstShort.java
new file mode 100644
index 0000000..2761da1
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstShort.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.Hex;
+
+/**
+ * Constants of type {@code short}.
+ */
+public final class CstShort
+        extends CstLiteral32 {
+    /** {@code non-null;} the value {@code 0} as an instance of this class */
+    public static final CstShort VALUE_0 = make((short) 0);
+
+    /**
+     * Makes an instance for the given value. This may (but does not
+     * necessarily) return an already-allocated instance.
+     *
+     * @param value the {@code short} value
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstShort make(short value) {
+        return new CstShort(value);
+    }
+
+    /**
+     * Makes an instance for the given {@code int} value. This
+     * may (but does not necessarily) return an already-allocated
+     * instance.
+     *
+     * @param value the value, which must be in range for a {@code short}
+     * @return {@code non-null;} the appropriate instance
+     */
+    public static CstShort make(int value) {
+        short cast = (short) value;
+
+        if (cast != value) {
+            throw new IllegalArgumentException("bogus short value: " +
+                    value);
+        }
+
+        return make(cast);
+    }
+
+    /**
+     * Constructs an instance. This constructor is private; use {@link #make}.
+     *
+     * @param value the {@code short} value
+     */
+    private CstShort(short value) {
+        super(value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        int value = getIntBits();
+        return "short{0x" + Hex.u2(value) + " / " + value + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.SHORT;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "short";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return Integer.toString(getIntBits());
+    }
+
+    /**
+     * Gets the {@code short} value.
+     *
+     * @return the value
+     */
+    public short getValue() {
+        return (short) getIntBits();
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstString.java b/dx/src/com/android/dx/rop/cst/CstString.java
new file mode 100644
index 0000000..c1a8c23
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstString.java
@@ -0,0 +1,377 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.ByteArray;
+import com.android.dx.util.Hex;
+
+/**
+ * Constants of type {@code CONSTANT_Utf8_info} or {@code CONSTANT_String_info}.
+ */
+public final class CstString extends TypedConstant {
+    /**
+     * {@code non-null;} instance representing {@code ""}, that is, the
+     * empty string
+     */
+    public static final CstString EMPTY_STRING = new CstString("");
+
+    /** {@code non-null;} the UTF-8 value as a string */
+    private final String string;
+
+    /** {@code non-null;} the UTF-8 value as bytes */
+    private final ByteArray bytes;
+
+    /**
+     * Converts a string into its MUTF-8 form. MUTF-8 differs from normal UTF-8
+     * in the handling of character '\0' and surrogate pairs.
+     *
+     * @param string {@code non-null;} the string to convert
+     * @return {@code non-null;} the UTF-8 bytes for it
+     */
+    public static byte[] stringToUtf8Bytes(String string) {
+        int len = string.length();
+        byte[] bytes = new byte[len * 3]; // Avoid having to reallocate.
+        int outAt = 0;
+
+        for (int i = 0; i < len; i++) {
+            char c = string.charAt(i);
+            if ((c != 0) && (c < 0x80)) {
+                bytes[outAt] = (byte) c;
+                outAt++;
+            } else if (c < 0x800) {
+                bytes[outAt] = (byte) (((c >> 6) & 0x1f) | 0xc0);
+                bytes[outAt + 1] = (byte) ((c & 0x3f) | 0x80);
+                outAt += 2;
+            } else {
+                bytes[outAt] = (byte) (((c >> 12) & 0x0f) | 0xe0);
+                bytes[outAt + 1] = (byte) (((c >> 6) & 0x3f) | 0x80);
+                bytes[outAt + 2] = (byte) ((c & 0x3f) | 0x80);
+                outAt += 3;
+            }
+        }
+
+        byte[] result = new byte[outAt];
+        System.arraycopy(bytes, 0, result, 0, outAt);
+        return result;
+    }
+
+    /**
+     * Converts an array of UTF-8 bytes into a string.
+     *
+     * @param bytes {@code non-null;} the bytes to convert
+     * @return {@code non-null;} the converted string
+     */
+    public static String utf8BytesToString(ByteArray bytes) {
+        int length = bytes.size();
+        char[] chars = new char[length]; // This is sized to avoid a realloc.
+        int outAt = 0;
+
+        for (int at = 0; length > 0; /*at*/) {
+            int v0 = bytes.getUnsignedByte(at);
+            char out;
+            switch (v0 >> 4) {
+                case 0x00: case 0x01: case 0x02: case 0x03:
+                case 0x04: case 0x05: case 0x06: case 0x07: {
+                    // 0XXXXXXX -- single-byte encoding
+                    length--;
+                    if (v0 == 0) {
+                        // A single zero byte is illegal.
+                        return throwBadUtf8(v0, at);
+                    }
+                    out = (char) v0;
+                    at++;
+                    break;
+                }
+                case 0x0c: case 0x0d: {
+                    // 110XXXXX -- two-byte encoding
+                    length -= 2;
+                    if (length < 0) {
+                        return throwBadUtf8(v0, at);
+                    }
+                    int v1 = bytes.getUnsignedByte(at + 1);
+                    if ((v1 & 0xc0) != 0x80) {
+                        return throwBadUtf8(v1, at + 1);
+                    }
+                    int value = ((v0 & 0x1f) << 6) | (v1 & 0x3f);
+                    if ((value != 0) && (value < 0x80)) {
+                        /*
+                         * This should have been represented with
+                         * one-byte encoding.
+                         */
+                        return throwBadUtf8(v1, at + 1);
+                    }
+                    out = (char) value;
+                    at += 2;
+                    break;
+                }
+                case 0x0e: {
+                    // 1110XXXX -- three-byte encoding
+                    length -= 3;
+                    if (length < 0) {
+                        return throwBadUtf8(v0, at);
+                    }
+                    int v1 = bytes.getUnsignedByte(at + 1);
+                    if ((v1 & 0xc0) != 0x80) {
+                        return throwBadUtf8(v1, at + 1);
+                    }
+                    int v2 = bytes.getUnsignedByte(at + 2);
+                    if ((v1 & 0xc0) != 0x80) {
+                        return throwBadUtf8(v2, at + 2);
+                    }
+                    int value = ((v0 & 0x0f) << 12) | ((v1 & 0x3f) << 6) |
+                        (v2 & 0x3f);
+                    if (value < 0x800) {
+                        /*
+                         * This should have been represented with one- or
+                         * two-byte encoding.
+                         */
+                        return throwBadUtf8(v2, at + 2);
+                    }
+                    out = (char) value;
+                    at += 3;
+                    break;
+                }
+                default: {
+                    // 10XXXXXX, 1111XXXX -- illegal
+                    return throwBadUtf8(v0, at);
+                }
+            }
+            chars[outAt] = out;
+            outAt++;
+        }
+
+        return new String(chars, 0, outAt);
+    }
+
+    /**
+     * Helper for {@link #utf8BytesToString}, which throws the right
+     * exception for a bogus utf-8 byte.
+     *
+     * @param value the byte value
+     * @param offset the file offset
+     * @return never
+     * @throws IllegalArgumentException always thrown
+     */
+    private static String throwBadUtf8(int value, int offset) {
+        throw new IllegalArgumentException("bad utf-8 byte " + Hex.u1(value) +
+                                           " at offset " + Hex.u4(offset));
+    }
+
+    /**
+     * Constructs an instance from a {@code String}.
+     *
+     * @param string {@code non-null;} the UTF-8 value as a string
+     */
+    public CstString(String string) {
+        if (string == null) {
+            throw new NullPointerException("string == null");
+        }
+
+        this.string = string.intern();
+        this.bytes = new ByteArray(stringToUtf8Bytes(string));
+    }
+
+    /**
+     * Constructs an instance from some UTF-8 bytes.
+     *
+     * @param bytes {@code non-null;} array of the UTF-8 bytes
+     */
+    public CstString(ByteArray bytes) {
+        if (bytes == null) {
+            throw new NullPointerException("bytes == null");
+        }
+
+        this.bytes = bytes;
+        this.string = utf8BytesToString(bytes).intern();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof CstString)) {
+            return false;
+        }
+
+        return string.equals(((CstString) other).string);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return string.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        return string.compareTo(((CstString) other).string);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "string{\"" + toHuman() + "\"}";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "utf8";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        int len = string.length();
+        StringBuilder sb = new StringBuilder(len * 3 / 2);
+
+        for (int i = 0; i < len; i++) {
+            char c = string.charAt(i);
+            if ((c >= ' ') && (c < 0x7f)) {
+                if ((c == '\'') || (c == '\"') || (c == '\\')) {
+                    sb.append('\\');
+                }
+                sb.append(c);
+            } else if (c <= 0x7f) {
+                switch (c) {
+                    case '\n': sb.append("\\n"); break;
+                    case '\r': sb.append("\\r"); break;
+                    case '\t': sb.append("\\t"); break;
+                    default: {
+                        /*
+                         * Represent the character as an octal escape.
+                         * If the next character is a valid octal
+                         * digit, disambiguate by using the
+                         * three-digit form.
+                         */
+                        char nextChar =
+                            (i < (len - 1)) ? string.charAt(i + 1) : 0;
+                        boolean displayZero =
+                            (nextChar >= '0') && (nextChar <= '7');
+                        sb.append('\\');
+                        for (int shift = 6; shift >= 0; shift -= 3) {
+                            char outChar = (char) (((c >> shift) & 7) + '0');
+                            if ((outChar != '0') || displayZero) {
+                                sb.append(outChar);
+                                displayZero = true;
+                            }
+                        }
+                        if (! displayZero) {
+                            // Ironic edge case: The original value was 0.
+                            sb.append('0');
+                        }
+                        break;
+                    }
+                }
+            } else {
+                sb.append("\\u");
+                sb.append(Character.forDigit(c >> 12, 16));
+                sb.append(Character.forDigit((c >> 8) & 0x0f, 16));
+                sb.append(Character.forDigit((c >> 4) & 0x0f, 16));
+                sb.append(Character.forDigit(c & 0x0f, 16));
+            }
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Gets the value as a human-oriented string, surrounded by double
+     * quotes.
+     *
+     * @return {@code non-null;} the quoted string
+     */
+    public String toQuoted() {
+        return '\"' + toHuman() + '\"';
+    }
+
+    /**
+     * Gets the value as a human-oriented string, surrounded by double
+     * quotes, but ellipsizes the result if it is longer than the given
+     * maximum length
+     *
+     * @param maxLength {@code >= 5;} the maximum length of the string to return
+     * @return {@code non-null;} the quoted string
+     */
+    public String toQuoted(int maxLength) {
+        String string = toHuman();
+        int length = string.length();
+        String ellipses;
+
+        if (length <= (maxLength - 2)) {
+            ellipses = "";
+        } else {
+            string = string.substring(0, maxLength - 5);
+            ellipses = "...";
+        }
+
+        return '\"' + string + ellipses + '\"';
+    }
+
+    /**
+     * Gets the UTF-8 value as a string.
+     * The returned string is always already interned.
+     *
+     * @return {@code non-null;} the UTF-8 value as a string
+     */
+    public String getString() {
+        return string;
+    }
+
+    /**
+     * Gets the UTF-8 value as UTF-8 encoded bytes.
+     *
+     * @return {@code non-null;} an array of the UTF-8 bytes
+     */
+    public ByteArray getBytes() {
+        return bytes;
+    }
+
+    /**
+     * Gets the size of this instance as UTF-8 code points. That is,
+     * get the number of bytes in the UTF-8 encoding of this instance.
+     *
+     * @return {@code >= 0;} the UTF-8 size
+     */
+    public int getUtf8Size() {
+        return bytes.size();
+    }
+
+    /**
+     * Gets the size of this instance as UTF-16 code points. That is,
+     * get the number of 16-bit chars in the UTF-16 encoding of this
+     * instance. This is the same as the {@code length} of the
+     * Java {@code String} representation of this instance.
+     *
+     * @return {@code >= 0;} the UTF-16 size
+     */
+    public int getUtf16Size() {
+        return string.length();
+    }
+
+    @Override
+    public Type getType() {
+        return Type.STRING;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/CstType.java b/dx/src/com/android/dx/rop/cst/CstType.java
new file mode 100644
index 0000000..e1e2ad9
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/CstType.java
@@ -0,0 +1,299 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Constants that represent an arbitrary type (reference or primitive).
+ */
+public final class CstType extends TypedConstant {
+
+    /**
+     * Intern table for instances.
+     *
+     * <p>The initial capacity is based on a medium-size project.
+     */
+    private static final ConcurrentMap<Type, CstType> interns =
+            new ConcurrentHashMap<>(1_000, 0.75f);
+
+    /** {@code non-null;} instance corresponding to the class {@code Object} */
+    public static final CstType OBJECT = new CstType(Type.OBJECT);
+
+    /** {@code non-null;} instance corresponding to the class {@code Boolean} */
+    public static final CstType BOOLEAN = new CstType(Type.BOOLEAN_CLASS);
+
+    /** {@code non-null;} instance corresponding to the class {@code Byte} */
+    public static final CstType BYTE = new CstType(Type.BYTE_CLASS);
+
+    /** {@code non-null;} instance corresponding to the class {@code Character} */
+    public static final CstType CHARACTER = new CstType(Type.CHARACTER_CLASS);
+
+    /** {@code non-null;} instance corresponding to the class {@code Double} */
+    public static final CstType DOUBLE = new CstType(Type.DOUBLE_CLASS);
+
+    /** {@code non-null;} instance corresponding to the class {@code Float} */
+    public static final CstType FLOAT = new CstType(Type.FLOAT_CLASS);
+
+    /** {@code non-null;} instance corresponding to the class {@code Long} */
+    public static final CstType LONG = new CstType(Type.LONG_CLASS);
+
+    /** {@code non-null;} instance corresponding to the class {@code Integer} */
+    public static final CstType INTEGER = new CstType(Type.INTEGER_CLASS);
+
+    /** {@code non-null;} instance corresponding to the class {@code Short} */
+    public static final CstType SHORT = new CstType(Type.SHORT_CLASS);
+
+    /** {@code non-null;} instance corresponding to the class {@code Void} */
+    public static final CstType VOID = new CstType(Type.VOID_CLASS);
+
+    /** {@code non-null;} instance corresponding to the type {@code boolean[]} */
+    public static final CstType BOOLEAN_ARRAY = new CstType(Type.BOOLEAN_ARRAY);
+
+    /** {@code non-null;} instance corresponding to the type {@code byte[]} */
+    public static final CstType BYTE_ARRAY = new CstType(Type.BYTE_ARRAY);
+
+    /** {@code non-null;} instance corresponding to the type {@code char[]} */
+    public static final CstType CHAR_ARRAY = new CstType(Type.CHAR_ARRAY);
+
+    /** {@code non-null;} instance corresponding to the type {@code double[]} */
+    public static final CstType DOUBLE_ARRAY = new CstType(Type.DOUBLE_ARRAY);
+
+    /** {@code non-null;} instance corresponding to the type {@code float[]} */
+    public static final CstType FLOAT_ARRAY = new CstType(Type.FLOAT_ARRAY);
+
+    /** {@code non-null;} instance corresponding to the type {@code long[]} */
+    public static final CstType LONG_ARRAY = new CstType(Type.LONG_ARRAY);
+
+    /** {@code non-null;} instance corresponding to the type {@code int[]} */
+    public static final CstType INT_ARRAY = new CstType(Type.INT_ARRAY);
+
+    /** {@code non-null;} instance corresponding to the type {@code short[]} */
+    public static final CstType SHORT_ARRAY = new CstType(Type.SHORT_ARRAY);
+
+    /**
+     * {@code non-null;} instance corresponding to the type {@code java.lang.invoke.MethodHandle}
+     */
+    public static final CstType METHOD_HANDLE = new CstType(Type.METHOD_HANDLE);
+
+    /**
+     * {@code non-null;} instance corresponding to the type {@code java.lang.invoke.VarHandle}
+     */
+    public static final CstType VAR_HANDLE = new CstType(Type.VAR_HANDLE);
+
+    static {
+        initInterns();
+    }
+
+    private static void initInterns() {
+        internInitial(OBJECT);
+        internInitial(BOOLEAN);
+        internInitial(BYTE);
+        internInitial(CHARACTER);
+        internInitial(DOUBLE);
+        internInitial(FLOAT);
+        internInitial(LONG);
+        internInitial(INTEGER);
+        internInitial(SHORT);
+        internInitial(VOID);
+        internInitial(BOOLEAN_ARRAY);
+        internInitial(BYTE_ARRAY);
+        internInitial(CHAR_ARRAY);
+        internInitial(DOUBLE_ARRAY);
+        internInitial(FLOAT_ARRAY);
+        internInitial(LONG_ARRAY);
+        internInitial(INT_ARRAY);
+        internInitial(SHORT_ARRAY);
+        internInitial(METHOD_HANDLE);
+    }
+
+    private static void internInitial(CstType cst) {
+        if (interns.putIfAbsent(cst.getClassType(), cst) != null) {
+            throw new IllegalStateException("Attempted re-init of " + cst);
+        }
+    }
+
+
+    /** {@code non-null;} the underlying type */
+    private final Type type;
+
+    /**
+     * {@code null-ok;} the type descriptor corresponding to this instance, if
+     * calculated
+     */
+    private CstString descriptor;
+
+    /**
+     * Returns an instance of this class that represents the wrapper
+     * class corresponding to a given primitive type. For example, if
+     * given {@link Type#INT}, this method returns the class reference
+     * {@code java.lang.Integer}.
+     *
+     * @param primitiveType {@code non-null;} the primitive type
+     * @return {@code non-null;} the corresponding wrapper class
+     */
+    public static CstType forBoxedPrimitiveType(Type primitiveType) {
+        switch (primitiveType.getBasicType()) {
+            case Type.BT_BOOLEAN: return BOOLEAN;
+            case Type.BT_BYTE:    return BYTE;
+            case Type.BT_CHAR:    return CHARACTER;
+            case Type.BT_DOUBLE:  return DOUBLE;
+            case Type.BT_FLOAT:   return FLOAT;
+            case Type.BT_INT:     return INTEGER;
+            case Type.BT_LONG:    return LONG;
+            case Type.BT_SHORT:   return SHORT;
+            case Type.BT_VOID:    return VOID;
+        }
+
+        throw new IllegalArgumentException("not primitive: " + primitiveType);
+    }
+
+    /**
+     * Returns an interned instance of this class for the given type.
+     *
+     * @param type {@code non-null;} the underlying type
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static CstType intern(Type type) {
+        CstType cst = new CstType(type);
+        CstType result = interns.putIfAbsent(type, cst);
+        return result != null ? result : cst;
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param type {@code non-null;} the underlying type
+     */
+    public CstType(Type type) {
+        if (type == null) {
+            throw new NullPointerException("type == null");
+        }
+
+        if (type == Type.KNOWN_NULL) {
+            throw new UnsupportedOperationException(
+                    "KNOWN_NULL is not representable");
+        }
+
+        this.type = type;
+        this.descriptor = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof CstType)) {
+            return false;
+        }
+
+        return type == ((CstType) other).type;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return type.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected int compareTo0(Constant other) {
+        String thisDescriptor = type.getDescriptor();
+        String otherDescriptor = ((CstType) other).type.getDescriptor();
+        return thisDescriptor.compareTo(otherDescriptor);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "type{" + toHuman() + '}';
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return Type.CLASS;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String typeName() {
+        return "type";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isCategory2() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return type.toHuman();
+    }
+
+    /**
+     * Gets the underlying type (as opposed to the type corresponding
+     * to this instance as a constant, which is always
+     * {@code Class}).
+     *
+     * @return {@code non-null;} the type corresponding to the name
+     */
+    public Type getClassType() {
+        return type;
+    }
+
+    /**
+     * Gets the type descriptor for this instance.
+     *
+     * @return {@code non-null;} the descriptor
+     */
+    public CstString getDescriptor() {
+        if (descriptor == null) {
+            descriptor = new CstString(type.getDescriptor());
+        }
+
+        return descriptor;
+    }
+
+    /**
+     * Returns a human readable package name for this type, like "java.util".
+     * If this is an array type, this returns the package name of the array's
+     * component type. If this is a primitive type, this returns "default".
+     */
+    public String getPackageName() {
+        // descriptor is a string like "[[Ljava/util/String;"
+        String descriptor = getDescriptor().getString();
+        int lastSlash = descriptor.lastIndexOf('/');
+        int lastLeftSquare = descriptor.lastIndexOf('['); // -1 unless this is an array
+        if (lastSlash == -1) {
+            return "default";
+        } else {
+            // +2 to skip the '[' and the 'L' prefix
+            return descriptor.substring(lastLeftSquare + 2, lastSlash).replace('/', '.');
+        }
+    }
+
+    public static void clearInternTable() {
+        interns.clear();
+        initInterns();
+    }
+
+}
diff --git a/dx/src/com/android/dx/rop/cst/StdConstantPool.java b/dx/src/com/android/dx/rop/cst/StdConstantPool.java
new file mode 100644
index 0000000..1001038
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/StdConstantPool.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dex.util.ExceptionWithContext;
+import com.android.dx.util.Hex;
+import com.android.dx.util.MutabilityControl;
+
+/**
+ * Standard implementation of {@link ConstantPool}, which directly stores
+ * an array of {@link Constant} objects and can be made immutable.
+ */
+public final class StdConstantPool
+        extends MutabilityControl implements ConstantPool {
+    /** {@code non-null;} array of entries */
+    private final Constant[] entries;
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the pool; this corresponds to the
+     * class file field {@code constant_pool_count}, and is in fact
+     * always at least one more than the actual size of the constant pool,
+     * as element {@code 0} is always invalid.
+     */
+    public StdConstantPool(int size) {
+        super(size > 1);
+
+        if (size < 1) {
+            throw new IllegalArgumentException("size < 1");
+        }
+
+        entries = new Constant[size];
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int size() {
+        return entries.length;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Constant getOrNull(int n) {
+        try {
+            return entries[n];
+        } catch (IndexOutOfBoundsException ex) {
+            // Translate the exception.
+            return throwInvalid(n);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Constant get0Ok(int n) {
+        if (n == 0) {
+            return null;
+        }
+
+        return get(n);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Constant get(int n) {
+        try {
+            Constant result = entries[n];
+
+            if (result == null) {
+                throwInvalid(n);
+            }
+
+            return result;
+        } catch (IndexOutOfBoundsException ex) {
+            // Translate the exception.
+            return throwInvalid(n);
+        }
+    }
+
+    /**
+     * Get all entries in this constant pool.
+     *
+     * @return the returned array may contain null entries.
+     */
+    @Override
+    public Constant[] getEntries() {
+        return entries;
+    }
+
+    /**
+     * Sets the entry at the given index.
+     *
+     * @param n {@code >= 1, < size();} which entry
+     * @param cst {@code null-ok;} the constant to store
+     */
+    public void set(int n, Constant cst) {
+        throwIfImmutable();
+
+        boolean cat2 = (cst != null) && cst.isCategory2();
+
+        if (n < 1) {
+            throw new IllegalArgumentException("n < 1");
+        }
+
+        if (cat2) {
+            // Storing a category-2 entry nulls out the next index.
+            if (n == (entries.length - 1)) {
+                throw new IllegalArgumentException("(n == size - 1) && " +
+                                                   "cst.isCategory2()");
+            }
+            entries[n + 1] = null;
+        }
+
+        if ((cst != null) && (entries[n] == null)) {
+            /*
+             * Overwriting the second half of a category-2 entry nulls out
+             * the first half.
+             */
+            Constant prev = entries[n - 1];
+            if ((prev != null) && prev.isCategory2()) {
+                entries[n - 1] = null;
+            }
+        }
+
+        entries[n] = cst;
+    }
+
+    /**
+     * Throws the right exception for an invalid cpi.
+     *
+     * @param idx the bad cpi
+     * @return never
+     * @throws ExceptionWithContext always thrown
+     */
+    private static Constant throwInvalid(int idx) {
+        throw new ExceptionWithContext("invalid constant pool index " +
+                                       Hex.u2(idx));
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/TypedConstant.java b/dx/src/com/android/dx/rop/cst/TypedConstant.java
new file mode 100644
index 0000000..f52f547
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/TypedConstant.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.TypeBearer;
+
+/**
+ * Base class for constants which implement {@link TypeBearer}.
+ */
+public abstract class TypedConstant
+        extends Constant implements TypeBearer {
+    /**
+     * {@inheritDoc}
+     *
+     * This implementation always returns {@code this}.
+     */
+    @Override
+    public final TypeBearer getFrameType() {
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int getBasicType() {
+        return getType().getBasicType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final int getBasicFrameType() {
+        return getType().getBasicFrameType();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final boolean isConstant() {
+        return true;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/Zeroes.java b/dx/src/com/android/dx/rop/cst/Zeroes.java
new file mode 100644
index 0000000..7250b5a
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/Zeroes.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.cst;
+
+import com.android.dx.rop.type.Type;
+
+/**
+ * Utility for turning types into zeroes.
+ */
+public final class Zeroes {
+    /**
+     * This class is uninstantiable.
+     */
+    private Zeroes() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Gets the "zero" (or {@code null}) value for the given type.
+     *
+     * @param type {@code non-null;} the type in question
+     * @return {@code non-null;} its "zero" value
+     */
+    public static Constant zeroFor(Type type) {
+        switch (type.getBasicType()) {
+            case Type.BT_BOOLEAN: return CstBoolean.VALUE_FALSE;
+            case Type.BT_BYTE:    return CstByte.VALUE_0;
+            case Type.BT_CHAR:    return CstChar.VALUE_0;
+            case Type.BT_DOUBLE:  return CstDouble.VALUE_0;
+            case Type.BT_FLOAT:   return CstFloat.VALUE_0;
+            case Type.BT_INT:     return CstInteger.VALUE_0;
+            case Type.BT_LONG:    return CstLong.VALUE_0;
+            case Type.BT_SHORT:   return CstShort.VALUE_0;
+            case Type.BT_OBJECT:  return CstKnownNull.THE_ONE;
+            default: {
+                throw new UnsupportedOperationException("no zero for type: " +
+                        type.toHuman());
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/rop/cst/package.html b/dx/src/com/android/dx/rop/cst/package.html
new file mode 100644
index 0000000..c784d16
--- /dev/null
+++ b/dx/src/com/android/dx/rop/cst/package.html
@@ -0,0 +1,9 @@
+<body>
+<p>Interfaces and implementation of things related to the constant pool.</p>
+
+<p><b>PACKAGES USED:</b>
+<ul>
+<li><code>com.android.dx.rop.type</code></li>
+<li><code>com.android.dx.util</code></li>
+</ul>
+</body>
diff --git a/dx/src/com/android/dx/rop/package-info.java b/dx/src/com/android/dx/rop/package-info.java
new file mode 100644
index 0000000..aaf21ee
--- /dev/null
+++ b/dx/src/com/android/dx/rop/package-info.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop;
+
+/**
+ * <h1>An Introduction to Rop Form</h1>
+ *
+ * This package contains classes associated with dx's {@code Rop}
+ * intermediate form.<p>
+ *
+ * The Rop form is intended to represent the instructions and the control-flow
+ * graph in a reasonably programmatically useful form while closely mirroring
+ * the dex instruction set.<p>
+ *
+ * <h2>Key Classes</h2>
+ *
+ * <ul>
+ * <li> {@link RopMethod}, the representation of an individual method
+ * <li> {@link BasicBlock} and its per-method container, {@link BasicBlockList},
+ * the representation of control flow elements.
+ * <li> {@link Insn} and its subclasses along with its per-basic block
+ * container {@link InsnList}. {@code Insn} instances represent
+ * individual instructions in the abstract register machine.
+ * <li> {@link RegisterSpec} and its container {@link RegisterSpecList}. A
+ * register spec encodes register number, register width, type information,
+ * and potentially local variable information as well for instruction sources
+ * and results.
+ * <li> {@link Rop} instances represent opcodes in the abstract machine. Many
+ * {@code Rop} instances are singletons defined in static fields in
+ * {@link Rops}. The rest are constructed dynamically using static methods
+ * in {@code Rops}
+ * <li> {@link RegOps} lists numeric constants for the opcodes
+ * <li> {@link Constant} and its subclasses represent constant data values
+ * that opcodes may refer to.
+ * <li> {@link Type} instances represent the core data types that can be
+ * handled by the abstract machine.
+ * <li> The {@link TypeBearer} interface is implemented by classes that
+ * represent a core data type, but may also have secondary information
+ * (such as constant value) associated with them.
+ * <ul>
+ *
+ * <h2>Control-Flow Graph</h2>
+ *
+ * Each method is separated into a list of basic blocks. For the most part,
+ * basic blocks are referred to by a positive integer
+ * {@link BasicBlock#getLabel label}, which is always unique per method. The
+ * label value is typically derived from a bytecode address from the source
+ * bytecode. Blocks that don't originate directly from source bytecode have
+ * labels generated for them in a mostly arbitrary order.<p>
+ *
+ * Blocks are referred to by their label, for the most part, because
+ * {@code BasicBlock} instances are immutable and thus any modification to
+ * the control flow graph or the instruction list results in replacement
+ * instances (with identical labels) being created.<p>
+ *
+ * A method has a single {@link RopMethod#getFirstLabel entry block} and 0
+ * to N {@link RopMethod#getExitPredecessors exit predecessor blocks} which
+ * will return. All blocks that are not the entry block will have at least
+ * one predecessor (or are unreachable and should be removed from the block
+ * list). All blocks that are not exit predecessors must have at least one
+ * successor.<p>
+ *
+ * Since all blocks must branch, all blocks must have, as their final
+ * instruction, an instruction whose opcode has a {@link Rop#getBranchingness
+ * branchingness} other than {@link Rop.BRANCH_NONE}. Furthermore, branching
+ * instructions may only be the final instruction in any basic block. If
+ * no other terminating opcode is appropriate, use a {@link Rops#GOTO GOTO}.<p>
+ *
+ * Typically a block will have a {@link BasicBlock#getPrimarySuccessor
+ * primary successor} which distinguishes a particular control flow path.
+ * For {Rops#isCallLike}call or call-like} opcodes, this is the path taken
+ * in the non-exceptional case, where all other successors represent
+ * various exception paths. For comparison operators such as
+ * {@link Rops#IF_EQZ_INT}, the primary successor represents the path taken
+ * if the <b>condition evaluates to false</b>. For {@link SwitchInsn switch
+ * instructions}, the primary successor is the default case.<p>
+ *
+ * A basic block's successor list is ordered and may refer to unique labels
+ * multiple times. For example, if a switch statement contains multiple case
+ * statements for the same code path, a single basic block will likely
+ * appear in the successor list multiple times. In general, the
+ * significance of the successor list's order (like the significance of
+ * the primary successor) is a property of the final instruction of the basic
+ * block. A basic block containing a {@link ThrowingInsn}, for example, has
+ * its successor list in an order identical to the
+ * {@link ThrowingInsn#getCatches} instruction's catches list, with the
+ * primary successor (the no-exception case) listed at the end.
+ *
+ * It is legal for a basic block to have no primary successor. An obvious
+ * example of this is a block that terminates in a {@link Rops#THROW throw}
+ * instruction where a catch block exists inside the current method for that
+ * exception class. Since the only possible path is the exception path, only
+ * the exception path (which cannot be a primary successor) is a successor.
+ * An example of this is shown in {@code dx/tests/092-ssa-cfg-edge-cases}.
+ *
+ * <h2>Rop Instructions</h2>
+ *
+ * <h3>move-result and move-result-pseudo</h3>
+ *
+ * An instruction that may throw an exception may not specify a result. This
+ * is necessary because the result register will not be assigned to if an
+ * exception occurs while processing said instruction and a result assignment
+ * may not occur. Since result assignments only occur in the non-exceptional
+ * case,  the result assignments for throwing instructions can be said to occur
+ * at the beginning of the primary successor block rather than at the end of
+ * the current block. The Rop form represents the result assignments this way.
+ * Throwing instructions may not directly specify results. Instead, result
+ * assignments are represented by {@link
+ * Rops#MOVE_RESULT move-result} or {@link Rops#MOVE_RESULT_PSEUDO
+ * move-result-pseudo} instructions at the top of the primary successor block.
+ *
+ * Only a single {@code move-result} or {@code move-result-pseudo}
+ * may exist in any block and it must be exactly the first instruction in the
+ * block.
+ *
+ * A {@code move-result} instruction is used for the results of call-like
+ * instructions. If the value produced by a {@code move-result} is not
+ * used by the method, it may be eliminated as dead code.
+ *
+ * A {@code move-result-pseudo} instruction is used for the results of
+ * non-call-like throwing instructions. It may never be considered dead code
+ * since the final dex instruction will always indicate a result register.
+ * If a required {@code move-result-pseudo} instruction is not found
+ * during conversion to dex bytecode, an exception will be thrown.
+ *
+ * <h3>move-exception</h3>
+ *
+ * A {@link RegOps.MOVE_EXCEPTION move-exception} instruction may appear at
+ * the start of a catch block, and represents the obtaining of the thrown
+ * exception instance. It may only occur as the first instruction in a
+ * basic block, and any basic block in which it occurs must be reachable only
+ * as an exception successor.
+ *
+ * <h3>move-param</h3>
+ *
+ * A {@link RegOps.MOVE_PARAM move-param} instruction represents a method
+ * parameter. Every {@code move-param} instruction is a
+ * {@link PlainCstInsn}. The index of the method parameter they refer to is
+ * carried as the {@link CstInteger integer constant} associated with the
+ * instruction.
+ *
+ * Any number of {@code move-param} instructions referring to the same
+ * parameter index may be included in a method's instruction lists. They
+ * have no restrictions on placement beyond those of any other
+ * {@link Rop.BRANCH_NONE} instruction. Note that the SSA optimizer arranges the
+ * parameter assignments to align with the dex bytecode calling conventions.
+ * With parameter assignments so arranged, the
+ * {@link com.android.dx.dex.code.RopTranslator} sees Rop {@code move-param}
+ * instructions as unnecessary in dex form and eliminates them.
+ *
+ * <h3>mark-local</h3>
+ *
+ * A {@link RegOps.MARK_LOCAL mark-local} instruction indicates that a local
+ * variable becomes live in a specified register specified register for the
+ * purposes of debug information. A {@code mark-local} instruction has
+ * a single source (the register which will now be considered a local variable)
+ * and no results. The instruction has no side effect.<p>
+ *
+ * In a typical case, a local variable's lifetime begins with an
+ * assignment. The local variable whose information is present in a result's
+ * {@link RegisterSpec#getLocalItem LocalItem} is considered to begin (or move
+ * between registers) when the instruction is executed.<p>
+ *
+ * However, sometimes a local variable can begin its life or move without
+ * an assignment occurring. A common example of this is occurs in the Rop
+ * representation of the following code:<p>
+ *
+ * <pre>
+ * try {
+ *     Object foo = null;
+ *     foo = new Object();
+ * } catch (Throwable ex) { }
+ * </pre>
+ *
+ * An object's initialization occurs in two steps. First, a
+ * {@code new-instance} instruction is executed, whose result is stored in a
+ * register. However, that register can not yet be considered to contain
+ * "foo". That's because the instance's constructor method must be called
+ * via an {@code invoke} instruction. The constructor method, however, may
+ * throw an exception. And if an exception occurs, then "foo" should remain
+ * null. So "foo" becomes the value of the result of the {@code new-instance}
+ * instruction after the (void) constructor method is invoked and
+ * returns successfully. In such a case, a {@code mark-local} will
+ * typically occur at the beginning of the primary successor block following
+ * the invocation to the constructor.
+ */
diff --git a/dx/src/com/android/dx/rop/type/Prototype.java b/dx/src/com/android/dx/rop/type/Prototype.java
new file mode 100644
index 0000000..d7b9c8b
--- /dev/null
+++ b/dx/src/com/android/dx/rop/type/Prototype.java
@@ -0,0 +1,421 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.type;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Representation of a method descriptor. Instances of this class are
+ * generally interned and may be usefully compared with each other
+ * using {@code ==}.
+ */
+public final class Prototype implements Comparable<Prototype> {
+    /**
+     * Intern table for instances.
+     *
+     * <p>The initial capacity is based on a medium-size project.
+     */
+    private static final ConcurrentMap<String, Prototype> internTable =
+            new ConcurrentHashMap<>(10_000, 0.75f);
+
+    /** {@code non-null;} method descriptor */
+    private final String descriptor;
+
+    /** {@code non-null;} return type */
+    private final Type returnType;
+
+    /** {@code non-null;} list of parameter types */
+    private final StdTypeList parameterTypes;
+
+    /** {@code null-ok;} list of parameter frame types, if calculated */
+    private StdTypeList parameterFrameTypes;
+
+    /**
+     * Returns the unique instance corresponding to the
+     * given method descriptor. See vmspec-2 sec4.3.3 for details on the
+     * field descriptor syntax.
+     *
+     * @param descriptor {@code non-null;} the descriptor
+     * @return {@code non-null;} the corresponding instance
+     * @throws IllegalArgumentException thrown if the descriptor has
+     * invalid syntax
+     */
+    public static Prototype intern(String descriptor) {
+        if (descriptor == null) {
+            throw new NullPointerException("descriptor == null");
+        }
+
+        Prototype result = internTable.get(descriptor);
+        if (result != null) {
+            return result;
+        }
+
+        result = fromDescriptor(descriptor);
+        return putIntern(result);
+    }
+
+    /**
+     * Returns a prototype for a method descriptor.
+     *
+     * The {@code Prototype} returned will be the interned value if present,
+     * or a new instance otherwise. If a new instance is created, it is not
+     * placed in the intern table.
+     *
+     * @param descriptor {@code non-null;} the descriptor
+     * @return {@code non-null;} the corresponding instance
+     * @throws IllegalArgumentException thrown if the descriptor has
+     * invalid syntax
+     */
+    public static Prototype fromDescriptor(String descriptor) {
+        Prototype result = internTable.get(descriptor);
+        if (result != null) {
+            return result;
+        }
+
+        Type[] params = makeParameterArray(descriptor);
+        int paramCount = 0;
+        int at = 1;
+
+        for (;;) {
+            int startAt = at;
+            char c = descriptor.charAt(at);
+            if (c == ')') {
+                at++;
+                break;
+            }
+
+            // Skip array markers.
+            while (c == '[') {
+                at++;
+                c = descriptor.charAt(at);
+            }
+
+            if (c == 'L') {
+                // It looks like the start of a class name; find the end.
+                int endAt = descriptor.indexOf(';', at);
+                if (endAt == -1) {
+                    throw new IllegalArgumentException("bad descriptor");
+                }
+                at = endAt + 1;
+            } else {
+                at++;
+            }
+
+            params[paramCount] =
+                Type.intern(descriptor.substring(startAt, at));
+            paramCount++;
+        }
+
+        Type returnType = Type.internReturnType(descriptor.substring(at));
+        StdTypeList parameterTypes = new StdTypeList(paramCount);
+
+        for (int i = 0; i < paramCount; i++) {
+            parameterTypes.set(i, params[i]);
+        }
+
+        return new Prototype(descriptor, returnType, parameterTypes);
+    }
+
+    public static void clearInternTable() {
+        internTable.clear();
+    }
+
+    /**
+     * Helper for {@link #intern} which returns an empty array to
+     * populate with parsed parameter types, and which also ensures
+     * that there is a '(' at the start of the descriptor and a
+     * single ')' somewhere before the end.
+     *
+     * @param descriptor {@code non-null;} the descriptor string
+     * @return {@code non-null;} array large enough to hold all parsed parameter
+     * types, but which is likely actually larger than needed
+     */
+    private static Type[] makeParameterArray(String descriptor) {
+        int length = descriptor.length();
+
+        if (descriptor.charAt(0) != '(') {
+            throw new IllegalArgumentException("bad descriptor");
+        }
+
+        /*
+         * This is a cheesy way to establish an upper bound on the
+         * number of parameters: Just count capital letters.
+         */
+        int closeAt = 0;
+        int maxParams = 0;
+        for (int i = 1; i < length; i++) {
+            char c = descriptor.charAt(i);
+            if (c == ')') {
+                closeAt = i;
+                break;
+            }
+            if ((c >= 'A') && (c <= 'Z')) {
+                maxParams++;
+            }
+        }
+
+        if ((closeAt == 0) || (closeAt == (length - 1))) {
+            throw new IllegalArgumentException("bad descriptor");
+        }
+
+        if (descriptor.indexOf(')', closeAt + 1) != -1) {
+            throw new IllegalArgumentException("bad descriptor");
+        }
+
+        return new Type[maxParams];
+    }
+
+    /**
+     * Interns an instance, adding to the descriptor as necessary based
+     * on the given definer, name, and flags. For example, an init
+     * method has an uninitialized object of type {@code definer}
+     * as its first argument.
+     *
+     * @param descriptor {@code non-null;} the descriptor string
+     * @param definer {@code non-null;} class the method is defined on
+     * @param isStatic whether this is a static method
+     * @param isInit whether this is an init method
+     * @return {@code non-null;} the interned instance
+     */
+    public static Prototype intern(String descriptor, Type definer,
+            boolean isStatic, boolean isInit) {
+        Prototype base = intern(descriptor);
+
+        if (isStatic) {
+            return base;
+        }
+
+        if (isInit) {
+            definer = definer.asUninitialized(Integer.MAX_VALUE);
+        }
+
+        return base.withFirstParameter(definer);
+    }
+
+    /**
+     * Interns an instance which consists of the given number of
+     * {@code int}s along with the given return type
+     *
+     * @param returnType {@code non-null;} the return type
+     * @param count {@code > 0;} the number of elements in the prototype
+     * @return {@code non-null;} the interned instance
+     */
+    public static Prototype internInts(Type returnType, int count) {
+        // Make the descriptor...
+
+        StringBuilder sb = new StringBuilder(100);
+
+        sb.append('(');
+
+        for (int i = 0; i < count; i++) {
+            sb.append('I');
+        }
+
+        sb.append(')');
+        sb.append(returnType.getDescriptor());
+
+        // ...and intern it.
+        return intern(sb.toString());
+    }
+
+    /**
+     * Constructs an instance. This is a private constructor; use one
+     * of the public static methods to get instances.
+     *
+     * @param descriptor {@code non-null;} the descriptor string
+     */
+    private Prototype(String descriptor, Type returnType,
+            StdTypeList parameterTypes) {
+        if (descriptor == null) {
+            throw new NullPointerException("descriptor == null");
+        }
+
+        if (returnType == null) {
+            throw new NullPointerException("returnType == null");
+        }
+
+        if (parameterTypes == null) {
+            throw new NullPointerException("parameterTypes == null");
+        }
+
+        this.descriptor = descriptor;
+        this.returnType = returnType;
+        this.parameterTypes = parameterTypes;
+        this.parameterFrameTypes = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            /*
+             * Since externally-visible instances are interned, this
+             * check helps weed out some easy cases.
+             */
+            return true;
+        }
+
+        if (!(other instanceof Prototype)) {
+            return false;
+        }
+
+        return descriptor.equals(((Prototype) other).descriptor);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return descriptor.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(Prototype other) {
+        if (this == other) {
+            return 0;
+        }
+
+        /*
+         * The return type is the major order, and then args in order,
+         * and then the shorter list comes first (similar to string
+         * sorting).
+         */
+
+        int result = returnType.compareTo(other.returnType);
+
+        if (result != 0) {
+            return result;
+        }
+
+        int thisSize = parameterTypes.size();
+        int otherSize = other.parameterTypes.size();
+        int size = Math.min(thisSize, otherSize);
+
+        for (int i = 0; i < size; i++) {
+            Type thisType = parameterTypes.get(i);
+            Type otherType = other.parameterTypes.get(i);
+
+            result = thisType.compareTo(otherType);
+
+            if (result != 0) {
+                return result;
+            }
+        }
+
+        if (thisSize < otherSize) {
+            return -1;
+        } else if (thisSize > otherSize) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return descriptor;
+    }
+
+    /**
+     * Gets the descriptor string.
+     *
+     * @return {@code non-null;} the descriptor
+     */
+    public String getDescriptor() {
+        return descriptor;
+    }
+
+    /**
+     * Gets the return type.
+     *
+     * @return {@code non-null;} the return type
+     */
+    public Type getReturnType() {
+        return returnType;
+    }
+
+    /**
+     * Gets the list of parameter types.
+     *
+     * @return {@code non-null;} the list of parameter types
+     */
+    public StdTypeList getParameterTypes() {
+        return parameterTypes;
+    }
+
+    /**
+     * Gets the list of frame types corresponding to the list of parameter
+     * types. The difference between the two lists (if any) is that all
+     * "intlike" types (see {@link Type#isIntlike}) are replaced by
+     * {@link Type#INT}.
+     *
+     * @return {@code non-null;} the list of parameter frame types
+     */
+    public StdTypeList getParameterFrameTypes() {
+        if (parameterFrameTypes == null) {
+            int sz = parameterTypes.size();
+            StdTypeList list = new StdTypeList(sz);
+            boolean any = false;
+            for (int i = 0; i < sz; i++) {
+                Type one = parameterTypes.get(i);
+                if (one.isIntlike()) {
+                    any = true;
+                    one = Type.INT;
+                }
+                list.set(i, one);
+            }
+            parameterFrameTypes = any ? list : parameterTypes;
+        }
+
+        return parameterFrameTypes;
+    }
+
+    /**
+     * Returns a new interned instance, which is the same as this instance,
+     * except that it has an additional parameter prepended to the original's
+     * argument list.
+     *
+     * @param param {@code non-null;} the new first parameter
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public Prototype withFirstParameter(Type param) {
+        String newDesc = "(" + param.getDescriptor() + descriptor.substring(1);
+        StdTypeList newParams = parameterTypes.withFirst(param);
+
+        newParams.setImmutable();
+
+        Prototype result =
+            new Prototype(newDesc, returnType, newParams);
+
+        return putIntern(result);
+    }
+
+    /**
+     * Puts the given instance in the intern table if it's not already
+     * there. If a conflicting value is already in the table, then leave it.
+     * Return the interned value.
+     *
+     * @param desc {@code non-null;} instance to make interned
+     * @return {@code non-null;} the actual interned object
+     */
+    private static Prototype putIntern(Prototype desc) {
+        Prototype result = internTable.putIfAbsent(desc.getDescriptor(), desc);
+        return result != null ? result : desc;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/type/StdTypeList.java b/dx/src/com/android/dx/rop/type/StdTypeList.java
new file mode 100644
index 0000000..943e9a1
--- /dev/null
+++ b/dx/src/com/android/dx/rop/type/StdTypeList.java
@@ -0,0 +1,410 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.type;
+
+import com.android.dx.util.FixedSizeList;
+
+/**
+ * Standard implementation of {@link TypeList}.
+ */
+public final class StdTypeList
+        extends FixedSizeList implements TypeList {
+    /** {@code non-null;} no-element instance */
+    public static final StdTypeList EMPTY = new StdTypeList(0);
+
+    /** {@code non-null;} the list {@code [int]} */
+    public static final StdTypeList INT = StdTypeList.make(Type.INT);
+
+    /** {@code non-null;} the list {@code [long]} */
+    public static final StdTypeList LONG = StdTypeList.make(Type.LONG);
+
+    /** {@code non-null;} the list {@code [float]} */
+    public static final StdTypeList FLOAT = StdTypeList.make(Type.FLOAT);
+
+    /** {@code non-null;} the list {@code [double]} */
+    public static final StdTypeList DOUBLE = StdTypeList.make(Type.DOUBLE);
+
+    /** {@code non-null;} the list {@code [Object]} */
+    public static final StdTypeList OBJECT = StdTypeList.make(Type.OBJECT);
+
+    /** {@code non-null;} the list {@code [ReturnAddress]} */
+    public static final StdTypeList RETURN_ADDRESS
+            = StdTypeList.make(Type.RETURN_ADDRESS);
+
+    /** {@code non-null;} the list {@code [Throwable]} */
+    public static final StdTypeList THROWABLE =
+        StdTypeList.make(Type.THROWABLE);
+
+    /** {@code non-null;} the list {@code [int, int]} */
+    public static final StdTypeList INT_INT =
+        StdTypeList.make(Type.INT, Type.INT);
+
+    /** {@code non-null;} the list {@code [long, long]} */
+    public static final StdTypeList LONG_LONG =
+        StdTypeList.make(Type.LONG, Type.LONG);
+
+    /** {@code non-null;} the list {@code [float, float]} */
+    public static final StdTypeList FLOAT_FLOAT =
+        StdTypeList.make(Type.FLOAT, Type.FLOAT);
+
+    /** {@code non-null;} the list {@code [double, double]} */
+    public static final StdTypeList DOUBLE_DOUBLE =
+        StdTypeList.make(Type.DOUBLE, Type.DOUBLE);
+
+    /** {@code non-null;} the list {@code [Object, Object]} */
+    public static final StdTypeList OBJECT_OBJECT =
+        StdTypeList.make(Type.OBJECT, Type.OBJECT);
+
+    /** {@code non-null;} the list {@code [int, Object]} */
+    public static final StdTypeList INT_OBJECT =
+        StdTypeList.make(Type.INT, Type.OBJECT);
+
+    /** {@code non-null;} the list {@code [long, Object]} */
+    public static final StdTypeList LONG_OBJECT =
+        StdTypeList.make(Type.LONG, Type.OBJECT);
+
+    /** {@code non-null;} the list {@code [float, Object]} */
+    public static final StdTypeList FLOAT_OBJECT =
+        StdTypeList.make(Type.FLOAT, Type.OBJECT);
+
+    /** {@code non-null;} the list {@code [double, Object]} */
+    public static final StdTypeList DOUBLE_OBJECT =
+        StdTypeList.make(Type.DOUBLE, Type.OBJECT);
+
+    /** {@code non-null;} the list {@code [long, int]} */
+    public static final StdTypeList LONG_INT =
+        StdTypeList.make(Type.LONG, Type.INT);
+
+    /** {@code non-null;} the list {@code [int[], int]} */
+    public static final StdTypeList INTARR_INT =
+        StdTypeList.make(Type.INT_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [long[], int]} */
+    public static final StdTypeList LONGARR_INT =
+        StdTypeList.make(Type.LONG_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [float[], int]} */
+    public static final StdTypeList FLOATARR_INT =
+        StdTypeList.make(Type.FLOAT_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [double[], int]} */
+    public static final StdTypeList DOUBLEARR_INT =
+        StdTypeList.make(Type.DOUBLE_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [Object[], int]} */
+    public static final StdTypeList OBJECTARR_INT =
+        StdTypeList.make(Type.OBJECT_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [boolean[], int]} */
+    public static final StdTypeList BOOLEANARR_INT =
+        StdTypeList.make(Type.BOOLEAN_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [byte[], int]} */
+    public static final StdTypeList BYTEARR_INT =
+        StdTypeList.make(Type.BYTE_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [char[], int]} */
+    public static final StdTypeList CHARARR_INT =
+        StdTypeList.make(Type.CHAR_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [short[], int]} */
+    public static final StdTypeList SHORTARR_INT =
+        StdTypeList.make(Type.SHORT_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [int, int[], int]} */
+    public static final StdTypeList INT_INTARR_INT =
+        StdTypeList.make(Type.INT, Type.INT_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [long, long[], int]} */
+    public static final StdTypeList LONG_LONGARR_INT =
+        StdTypeList.make(Type.LONG, Type.LONG_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [float, float[], int]} */
+    public static final StdTypeList FLOAT_FLOATARR_INT =
+        StdTypeList.make(Type.FLOAT, Type.FLOAT_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [double, double[], int]} */
+    public static final StdTypeList DOUBLE_DOUBLEARR_INT =
+        StdTypeList.make(Type.DOUBLE, Type.DOUBLE_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [Object, Object[], int]} */
+    public static final StdTypeList OBJECT_OBJECTARR_INT =
+        StdTypeList.make(Type.OBJECT, Type.OBJECT_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [int, boolean[], int]} */
+    public static final StdTypeList INT_BOOLEANARR_INT =
+        StdTypeList.make(Type.INT, Type.BOOLEAN_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [int, byte[], int]} */
+    public static final StdTypeList INT_BYTEARR_INT =
+        StdTypeList.make(Type.INT, Type.BYTE_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [int, char[], int]} */
+    public static final StdTypeList INT_CHARARR_INT =
+        StdTypeList.make(Type.INT, Type.CHAR_ARRAY, Type.INT);
+
+    /** {@code non-null;} the list {@code [int, short[], int]} */
+    public static final StdTypeList INT_SHORTARR_INT =
+        StdTypeList.make(Type.INT, Type.SHORT_ARRAY, Type.INT);
+
+    /**
+     * Makes a single-element instance.
+     *
+     * @param type {@code non-null;} the element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static StdTypeList make(Type type) {
+        StdTypeList result = new StdTypeList(1);
+        result.set(0, type);
+        return result;
+    }
+
+    /**
+     * Makes a two-element instance.
+     *
+     * @param type0 {@code non-null;} the first element
+     * @param type1 {@code non-null;} the second element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static StdTypeList make(Type type0, Type type1) {
+        StdTypeList result = new StdTypeList(2);
+        result.set(0, type0);
+        result.set(1, type1);
+        return result;
+    }
+
+    /**
+     * Makes a three-element instance.
+     *
+     * @param type0 {@code non-null;} the first element
+     * @param type1 {@code non-null;} the second element
+     * @param type2 {@code non-null;} the third element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static StdTypeList make(Type type0, Type type1, Type type2) {
+        StdTypeList result = new StdTypeList(3);
+        result.set(0, type0);
+        result.set(1, type1);
+        result.set(2, type2);
+        return result;
+    }
+
+    /**
+     * Makes a four-element instance.
+     *
+     * @param type0 {@code non-null;} the first element
+     * @param type1 {@code non-null;} the second element
+     * @param type2 {@code non-null;} the third element
+     * @param type3 {@code non-null;} the fourth element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static StdTypeList make(Type type0, Type type1, Type type2,
+                                   Type type3) {
+        StdTypeList result = new StdTypeList(4);
+        result.set(0, type0);
+        result.set(1, type1);
+        result.set(2, type2);
+        result.set(3, type3);
+        return result;
+    }
+
+    /**
+     * Returns the given list as a comma-separated list of human forms. This
+     * is a static method so as to work on arbitrary {@link TypeList}
+     * instances.
+     *
+     * @param list {@code non-null;} the list to convert
+     * @return {@code non-null;} the human form
+     */
+    public static String toHuman(TypeList list) {
+        int size = list.size();
+
+        if (size == 0) {
+            return "<empty>";
+        }
+
+        StringBuilder sb = new StringBuilder(100);
+
+        for (int i = 0; i < size; i++) {
+            if (i != 0) {
+                sb.append(", ");
+            }
+            sb.append(list.getType(i).toHuman());
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Returns a hashcode of the contents of the given list. This
+     * is a static method so as to work on arbitrary {@link TypeList}
+     * instances.
+     *
+     * @param list {@code non-null;} the list to inspect
+     * @return {@code non-null;} the hash code
+     */
+    public static int hashContents(TypeList list) {
+        int size = list.size();
+        int hash = 0;
+
+        for (int i = 0; i < size; i++) {
+            hash = (hash * 31) + list.getType(i).hashCode();
+        }
+
+        return hash;
+    }
+
+    /**
+     * Compares the contents of the given two instances for equality. This
+     * is a static method so as to work on arbitrary {@link TypeList}
+     * instances.
+     *
+     * @param list1 {@code non-null;} one list to compare
+     * @param list2 {@code non-null;} another list to compare
+     * @return whether the two lists contain corresponding equal elements
+     */
+    public static boolean equalContents(TypeList list1, TypeList list2) {
+        int size = list1.size();
+
+        if (list2.size() != size) {
+            return false;
+        }
+
+        for (int i = 0; i < size; i++) {
+            if (! list1.getType(i).equals(list2.getType(i))) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Compares the contents of the given two instances for ordering. This
+     * is a static method so as to work on arbitrary {@link TypeList}
+     * instances.
+     *
+     * @param list1 {@code non-null;} one list to compare
+     * @param list2 {@code non-null;} another list to compare
+     * @return the order of the two lists
+     */
+    public static int compareContents(TypeList list1, TypeList list2) {
+        int size1 = list1.size();
+        int size2 = list2.size();
+        int size = Math.min(size1, size2);
+
+        for (int i = 0; i < size; i++) {
+            int comparison = list1.getType(i).compareTo(list2.getType(i));
+            if (comparison != 0) {
+                return comparison;
+            }
+        }
+
+        if (size1 == size2) {
+            return 0;
+        } else if (size1 < size2) {
+            return -1;
+        } else {
+            return 1;
+        }
+    }
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     */
+    public StdTypeList(int size) {
+        super(size);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType(int n) {
+        return get(n);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getWordCount() {
+        int sz = size();
+        int result = 0;
+
+        for (int i = 0; i < sz; i++) {
+            result += get(i).getCategory();
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public TypeList withAddedType(Type type) {
+        int sz = size();
+        StdTypeList result = new StdTypeList(sz + 1);
+
+        for (int i = 0; i < sz; i++) {
+            result.set0(i, get0(i));
+        }
+
+        result.set(sz, type);
+        result.setImmutable();
+        return result;
+    }
+
+    /**
+     * Gets the indicated element. It is an error to call this with the
+     * index for an element which was never set; if you do that, this
+     * will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @return {@code non-null;} the indicated element
+     */
+    public Type get(int n) {
+        return (Type) get0(n);
+    }
+
+    /**
+     * Sets the type at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param type {@code non-null;} the type to store
+     */
+    public void set(int n, Type type) {
+        set0(n, type);
+    }
+
+    /**
+     * Returns a new instance, which is the same as this instance,
+     * except that it has an additional type prepended to the
+     * original.
+     *
+     * @param type {@code non-null;} the new first element
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public StdTypeList withFirst(Type type) {
+        int sz = size();
+        StdTypeList result = new StdTypeList(sz + 1);
+
+        result.set0(0, type);
+        for (int i = 0; i < sz; i++) {
+            result.set0(i + 1, getOrNull0(i));
+        }
+
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dx/rop/type/Type.java b/dx/src/com/android/dx/rop/type/Type.java
new file mode 100644
index 0000000..783ef45
--- /dev/null
+++ b/dx/src/com/android/dx/rop/type/Type.java
@@ -0,0 +1,913 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.type;
+
+import com.android.dx.util.Hex;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Representation of a value type, such as may appear in a field, in a
+ * local, on a stack, or in a method descriptor. Instances of this
+ * class are generally interned and may be usefully compared with each
+ * other using {@code ==}.
+ */
+public final class Type implements TypeBearer, Comparable<Type> {
+    /**
+     * Intern table for instances.
+     *
+     * <p>The initial capacity is based on a medium-size project.
+     */
+    private static final ConcurrentMap<String, Type> internTable =
+            new ConcurrentHashMap<>(10_000, 0.75f);
+
+
+    /** basic type constant for {@code void} */
+    public static final int BT_VOID = 0;
+
+    /** basic type constant for {@code boolean} */
+    public static final int BT_BOOLEAN = 1;
+
+    /** basic type constant for {@code byte} */
+    public static final int BT_BYTE = 2;
+
+    /** basic type constant for {@code char} */
+    public static final int BT_CHAR = 3;
+
+    /** basic type constant for {@code double} */
+    public static final int BT_DOUBLE = 4;
+
+    /** basic type constant for {@code float} */
+    public static final int BT_FLOAT = 5;
+
+    /** basic type constant for {@code int} */
+    public static final int BT_INT = 6;
+
+    /** basic type constant for {@code long} */
+    public static final int BT_LONG = 7;
+
+    /** basic type constant for {@code short} */
+    public static final int BT_SHORT = 8;
+
+    /** basic type constant for {@code Object} */
+    public static final int BT_OBJECT = 9;
+
+    /** basic type constant for a return address */
+    public static final int BT_ADDR = 10;
+
+    /** count of basic type constants */
+    public static final int BT_COUNT = 11;
+
+    /** {@code non-null;} instance representing {@code boolean} */
+    public static final Type BOOLEAN = new Type("Z", BT_BOOLEAN);
+
+    /** {@code non-null;} instance representing {@code byte} */
+    public static final Type BYTE = new Type("B", BT_BYTE);
+
+    /** {@code non-null;} instance representing {@code char} */
+    public static final Type CHAR = new Type("C", BT_CHAR);
+
+    /** {@code non-null;} instance representing {@code double} */
+    public static final Type DOUBLE = new Type("D", BT_DOUBLE);
+
+    /** {@code non-null;} instance representing {@code float} */
+    public static final Type FLOAT = new Type("F", BT_FLOAT);
+
+    /** {@code non-null;} instance representing {@code int} */
+    public static final Type INT = new Type("I", BT_INT);
+
+    /** {@code non-null;} instance representing {@code long} */
+    public static final Type LONG = new Type("J", BT_LONG);
+
+    /** {@code non-null;} instance representing {@code short} */
+    public static final Type SHORT = new Type("S", BT_SHORT);
+
+    /** {@code non-null;} instance representing {@code void} */
+    public static final Type VOID = new Type("V", BT_VOID);
+
+    /** {@code non-null;} instance representing a known-{@code null} */
+    public static final Type KNOWN_NULL = new Type("<null>", BT_OBJECT);
+
+    /** {@code non-null;} instance representing a subroutine return address */
+    public static final Type RETURN_ADDRESS = new Type("<addr>", BT_ADDR);
+
+
+    /**
+     * {@code non-null;} instance representing
+     * {@code java.lang.annotation.Annotation}
+     */
+    public static final Type ANNOTATION =
+        new Type("Ljava/lang/annotation/Annotation;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.lang.Class} */
+    public static final Type CLASS = new Type("Ljava/lang/Class;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.lang.Cloneable} */
+    public static final Type CLONEABLE = new Type("Ljava/lang/Cloneable;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.lang.invoke.MethodHandle} */
+    public static final Type METHOD_HANDLE = new Type("Ljava/lang/invoke/MethodHandle;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.lang.invoke.MethodType} */
+    public static final Type METHOD_TYPE = new Type("Ljava/lang/invoke/MethodType;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.lang.invoke.VarHandle} */
+    public static final Type VAR_HANDLE = new Type("Ljava/lang/invoke/VarHandle;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.lang.Object} */
+    public static final Type OBJECT = new Type("Ljava/lang/Object;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.io.Serializable} */
+    public static final Type SERIALIZABLE = new Type("Ljava/io/Serializable;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.lang.String} */
+    public static final Type STRING = new Type("Ljava/lang/String;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code java.lang.Throwable} */
+    public static final Type THROWABLE = new Type("Ljava/lang/Throwable;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Boolean}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type BOOLEAN_CLASS = new Type("Ljava/lang/Boolean;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Byte}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type BYTE_CLASS = new Type("Ljava/lang/Byte;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Character}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type CHARACTER_CLASS = new Type("Ljava/lang/Character;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Double}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type DOUBLE_CLASS = new Type("Ljava/lang/Double;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Float}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type FLOAT_CLASS = new Type("Ljava/lang/Float;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Integer}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type INTEGER_CLASS = new Type("Ljava/lang/Integer;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Long}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type LONG_CLASS = new Type("Ljava/lang/Long;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Short}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type SHORT_CLASS = new Type("Ljava/lang/Short;", BT_OBJECT);
+
+    /**
+     * {@code non-null;} instance representing {@code java.lang.Void}; the
+     * suffix on the name helps disambiguate this from the instance
+     * representing a primitive type
+     */
+    public static final Type VOID_CLASS = new Type("Ljava/lang/Void;", BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code boolean[]} */
+    public static final Type BOOLEAN_ARRAY = new Type("[" + BOOLEAN.descriptor, BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code byte[]} */
+    public static final Type BYTE_ARRAY = new Type("[" + BYTE.descriptor, BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code char[]} */
+    public static final Type CHAR_ARRAY = new Type("[" + CHAR.descriptor, BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code double[]} */
+    public static final Type DOUBLE_ARRAY = new Type("[" + DOUBLE.descriptor, BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code float[]} */
+    public static final Type FLOAT_ARRAY = new Type("[" + FLOAT.descriptor, BT_OBJECT);;
+
+    /** {@code non-null;} instance representing {@code int[]} */
+    public static final Type INT_ARRAY = new Type("[" + INT.descriptor, BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code long[]} */
+    public static final Type LONG_ARRAY = new Type("[" + LONG.descriptor, BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code Object[]} */
+    public static final Type OBJECT_ARRAY = new Type("[" + OBJECT.descriptor, BT_OBJECT);
+
+    /** {@code non-null;} instance representing {@code short[]} */
+    public static final Type SHORT_ARRAY = new Type("[" + SHORT.descriptor, BT_OBJECT);
+
+    static {
+        initInterns();
+    }
+
+    /**
+     * Put the constant fields, including primitive types in to the intern table.
+     *
+     * <p>Must be called after the types are initialized above.
+     */
+    private static void initInterns() {
+        putIntern(BOOLEAN);
+        putIntern(BYTE);
+        putIntern(CHAR);
+        putIntern(DOUBLE);
+        putIntern(FLOAT);
+        putIntern(INT);
+        putIntern(LONG);
+        putIntern(SHORT);
+        /*
+         * Note: VOID isn't put in the intern table, since it's special and
+         * shouldn't be found by a normal call to intern().
+         */
+
+        putIntern(ANNOTATION);
+        putIntern(CLASS);
+        putIntern(CLONEABLE);
+        putIntern(METHOD_HANDLE);
+        putIntern(VAR_HANDLE);
+        putIntern(OBJECT);
+        putIntern(SERIALIZABLE);
+        putIntern(STRING);
+        putIntern(THROWABLE);
+        putIntern(BOOLEAN_CLASS);
+        putIntern(BYTE_CLASS);
+        putIntern(CHARACTER_CLASS);
+        putIntern(DOUBLE_CLASS);
+        putIntern(FLOAT_CLASS);
+        putIntern(INTEGER_CLASS);
+        putIntern(LONG_CLASS);
+        putIntern(SHORT_CLASS);
+        putIntern(VOID_CLASS);
+
+        // Array types
+        putIntern(BOOLEAN_ARRAY);
+        putIntern(BYTE_ARRAY);
+        putIntern(CHAR_ARRAY);
+        putIntern(DOUBLE_ARRAY);
+        putIntern(FLOAT_ARRAY);
+        putIntern(INT_ARRAY);
+        putIntern(LONG_ARRAY);
+        putIntern(OBJECT_ARRAY);
+        putIntern(SHORT_ARRAY);
+    }
+
+
+    /** {@code non-null;} field descriptor for the type */
+    private final String descriptor;
+
+    /**
+     * basic type corresponding to this type; one of the
+     * {@code BT_*} constants
+     */
+    private final int basicType;
+
+    /**
+     * {@code >= -1;} for an uninitialized type, bytecode index that this
+     * instance was allocated at; {@code Integer.MAX_VALUE} if it
+     * was an incoming uninitialized instance; {@code -1} if this
+     * is an <i>inititialized</i> instance
+     */
+    private final int newAt;
+
+    /**
+     * {@code null-ok;} the internal-form class name corresponding to
+     * this type, if calculated; only valid if {@code this} is a
+     * reference type and additionally not a return address
+     */
+    private String className;
+
+    /**
+     * {@code null-ok;} the type corresponding to an array of this type, if
+     * calculated
+     */
+    private Type arrayType;
+
+    /**
+     * {@code null-ok;} the type corresponding to elements of this type, if
+     * calculated; only valid if {@code this} is an array type
+     */
+    private Type componentType;
+
+    /**
+     * {@code null-ok;} the type corresponding to the initialized version of
+     * this type, if this instance is in fact an uninitialized type
+     */
+    private Type initializedType;
+
+    /**
+     * Returns the unique instance corresponding to the type with the
+     * given descriptor. See vmspec-2 sec4.3.2 for details on the
+     * field descriptor syntax. This method does <i>not</i> allow
+     * {@code "V"} (that is, type {@code void}) as a valid
+     * descriptor.
+     *
+     * @param descriptor {@code non-null;} the descriptor
+     * @return {@code non-null;} the corresponding instance
+     * @throws IllegalArgumentException thrown if the descriptor has
+     * invalid syntax
+     */
+    public static Type intern(String descriptor) {
+        Type result = internTable.get(descriptor);
+
+        if (result != null) {
+            return result;
+        }
+
+        char firstChar;
+        try {
+            firstChar = descriptor.charAt(0);
+        } catch (IndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("descriptor is empty");
+        } catch (NullPointerException ex) {
+            // Elucidate the exception.
+            throw new NullPointerException("descriptor == null");
+        }
+
+        if (firstChar == '[') {
+            /*
+             * Recursively strip away array markers to get at the underlying
+             * type, and build back on to form the result.
+             */
+            result = intern(descriptor.substring(1));
+            return result.getArrayType();
+        }
+
+        /*
+         * If the first character isn't '[' and it wasn't found in the
+         * intern cache, then it had better be the descriptor for a class.
+         */
+
+        int length = descriptor.length();
+        if ((firstChar != 'L') ||
+            (descriptor.charAt(length - 1) != ';')) {
+            throw new IllegalArgumentException("bad descriptor: " + descriptor);
+        }
+
+        /*
+         * Validate the characters of the class name itself. Note that
+         * vmspec-2 does not have a coherent definition for valid
+         * internal-form class names, and the definition here is fairly
+         * liberal: A name is considered valid as long as it doesn't
+         * contain any of '[' ';' '.' '(' ')', and it has no more than one
+         * '/' in a row, and no '/' at either end.
+         */
+
+        int limit = (length - 1); // Skip the final ';'.
+        for (int i = 1; i < limit; i++) {
+            char c = descriptor.charAt(i);
+            switch (c) {
+                case '[':
+                case ';':
+                case '.':
+                case '(':
+                case ')': {
+                    throw new IllegalArgumentException("bad descriptor: " + descriptor);
+                }
+                case '/': {
+                    if ((i == 1) ||
+                        (i == (length - 1)) ||
+                        (descriptor.charAt(i - 1) == '/')) {
+                        throw new IllegalArgumentException("bad descriptor: " + descriptor);
+                    }
+                    break;
+                }
+            }
+        }
+
+        result = new Type(descriptor, BT_OBJECT);
+        return putIntern(result);
+    }
+
+    /**
+     * Returns the unique instance corresponding to the type with the
+     * given descriptor, allowing {@code "V"} to return the type
+     * for {@code void}. Other than that one caveat, this method
+     * is identical to {@link #intern}.
+     *
+     * @param descriptor {@code non-null;} the descriptor
+     * @return {@code non-null;} the corresponding instance
+     * @throws IllegalArgumentException thrown if the descriptor has
+     * invalid syntax
+     */
+    public static Type internReturnType(String descriptor) {
+        try {
+            if (descriptor.equals("V")) {
+                // This is the one special case where void may be returned.
+                return VOID;
+            }
+        } catch (NullPointerException ex) {
+            // Elucidate the exception.
+            throw new NullPointerException("descriptor == null");
+        }
+
+        return intern(descriptor);
+    }
+
+    /**
+     * Returns the unique instance corresponding to the type of the
+     * class with the given name. Calling this method is equivalent to
+     * calling {@code intern(name)} if {@code name} begins
+     * with {@code "["} and calling {@code intern("L" + name + ";")}
+     * in all other cases.
+     *
+     * @param name {@code non-null;} the name of the class whose type
+     * is desired
+     * @return {@code non-null;} the corresponding type
+     * @throws IllegalArgumentException thrown if the name has
+     * invalid syntax
+     */
+    public static Type internClassName(String name) {
+        if (name == null) {
+            throw new NullPointerException("name == null");
+        }
+
+        if (name.startsWith("[")) {
+            return intern(name);
+        }
+
+        return intern('L' + name + ';');
+    }
+
+    /**
+     * Constructs an instance corresponding to an "uninitialized type."
+     * This is a private constructor; use one of the public static
+     * methods to get instances.
+     *
+     * @param descriptor {@code non-null;} the field descriptor for the type
+     * @param basicType basic type corresponding to this type; one of the
+     * {@code BT_*} constants
+     * @param newAt {@code >= -1;} allocation bytecode index
+     */
+    private Type(String descriptor, int basicType, int newAt) {
+        if (descriptor == null) {
+            throw new NullPointerException("descriptor == null");
+        }
+
+        if ((basicType < 0) || (basicType >= BT_COUNT)) {
+            throw new IllegalArgumentException("bad basicType");
+        }
+
+        if (newAt < -1) {
+            throw new IllegalArgumentException("newAt < -1");
+        }
+
+        this.descriptor = descriptor;
+        this.basicType = basicType;
+        this.newAt = newAt;
+        this.arrayType = null;
+        this.componentType = null;
+        this.initializedType = null;
+    }
+
+    /**
+     * Constructs an instance corresponding to an "initialized type."
+     * This is a private constructor; use one of the public static
+     * methods to get instances.
+     *
+     * @param descriptor {@code non-null;} the field descriptor for the type
+     * @param basicType basic type corresponding to this type; one of the
+     * {@code BT_*} constants
+     */
+    private Type(String descriptor, int basicType) {
+        this(descriptor, basicType, -1);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            /*
+             * Since externally-visible types are interned, this check
+             * helps weed out some easy cases.
+             */
+            return true;
+        }
+
+        if (!(other instanceof Type)) {
+            return false;
+        }
+
+        return descriptor.equals(((Type) other).descriptor);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return descriptor.hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int compareTo(Type other) {
+        return descriptor.compareTo(other.descriptor);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return descriptor;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        switch (basicType) {
+            case BT_VOID:    return "void";
+            case BT_BOOLEAN: return "boolean";
+            case BT_BYTE:    return "byte";
+            case BT_CHAR:    return "char";
+            case BT_DOUBLE:  return "double";
+            case BT_FLOAT:   return "float";
+            case BT_INT:     return "int";
+            case BT_LONG:    return "long";
+            case BT_SHORT:   return "short";
+            case BT_OBJECT:  break;
+            default:         return descriptor;
+        }
+
+        if (isArray()) {
+            return getComponentType().toHuman() + "[]";
+        }
+
+        // Remove the "L...;" around the type and convert "/" to ".".
+        return getClassName().replace("/", ".");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getType() {
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type getFrameType() {
+        switch (basicType) {
+            case BT_BOOLEAN:
+            case BT_BYTE:
+            case BT_CHAR:
+            case BT_INT:
+            case BT_SHORT: {
+                return INT;
+            }
+        }
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getBasicType() {
+        return basicType;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getBasicFrameType() {
+        switch (basicType) {
+            case BT_BOOLEAN:
+            case BT_BYTE:
+            case BT_CHAR:
+            case BT_INT:
+            case BT_SHORT: {
+                return BT_INT;
+            }
+        }
+
+        return basicType;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isConstant() {
+        return false;
+    }
+
+    /**
+     * Gets the descriptor.
+     *
+     * @return {@code non-null;} the descriptor
+     */
+    public String getDescriptor() {
+        return descriptor;
+    }
+
+    /**
+     * Gets the name of the class this type corresponds to, in internal
+     * form. This method is only valid if this instance is for a
+     * normal reference type (that is, a reference type and
+     * additionally not a return address).
+     *
+     * @return {@code non-null;} the internal-form class name
+     */
+    public String getClassName() {
+        if (className == null) {
+            if (!isReference()) {
+                throw new IllegalArgumentException("not an object type: " +
+                                                   descriptor);
+            }
+
+            if (descriptor.charAt(0) == '[') {
+                className = descriptor;
+            } else {
+                className = descriptor.substring(1, descriptor.length() - 1);
+            }
+        }
+
+        return className;
+    }
+
+    /**
+     * Gets the category. Most instances are category 1. {@code long}
+     * and {@code double} are the only category 2 types.
+     *
+     * @see #isCategory1
+     * @see #isCategory2
+     * @return the category
+     */
+    public int getCategory() {
+        switch (basicType) {
+            case BT_LONG:
+            case BT_DOUBLE: {
+                return 2;
+            }
+        }
+
+        return 1;
+    }
+
+    /**
+     * Returns whether or not this is a category 1 type.
+     *
+     * @see #getCategory
+     * @see #isCategory2
+     * @return whether or not this is a category 1 type
+     */
+    public boolean isCategory1() {
+        switch (basicType) {
+            case BT_LONG:
+            case BT_DOUBLE: {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns whether or not this is a category 2 type.
+     *
+     * @see #getCategory
+     * @see #isCategory1
+     * @return whether or not this is a category 2 type
+     */
+    public boolean isCategory2() {
+        switch (basicType) {
+            case BT_LONG:
+            case BT_DOUBLE: {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Gets whether this type is "intlike." An intlike type is one which, when
+     * placed on a stack or in a local, is automatically converted to an
+     * {@code int}.
+     *
+     * @return whether this type is "intlike"
+     */
+    public boolean isIntlike() {
+        switch (basicType) {
+            case BT_BOOLEAN:
+            case BT_BYTE:
+            case BT_CHAR:
+            case BT_INT:
+            case BT_SHORT: {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Gets whether this type is a primitive type. All types are either
+     * primitive or reference types.
+     *
+     * @return whether this type is primitive
+     */
+    public boolean isPrimitive() {
+        switch (basicType) {
+            case BT_BOOLEAN:
+            case BT_BYTE:
+            case BT_CHAR:
+            case BT_DOUBLE:
+            case BT_FLOAT:
+            case BT_INT:
+            case BT_LONG:
+            case BT_SHORT:
+            case BT_VOID: {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Gets whether this type is a normal reference type. A normal
+     * reference type is a reference type that is not a return
+     * address. This method is just convenient shorthand for
+     * {@code getBasicType() == Type.BT_OBJECT}.
+     *
+     * @return whether this type is a normal reference type
+     */
+    public boolean isReference() {
+        return (basicType == BT_OBJECT);
+    }
+
+    /**
+     * Gets whether this type is an array type. If this method returns
+     * {@code true}, then it is safe to use {@link #getComponentType}
+     * to determine the component type.
+     *
+     * @return whether this type is an array type
+     */
+    public boolean isArray() {
+        return (descriptor.charAt(0) == '[');
+    }
+
+    /**
+     * Gets whether this type is an array type or is a known-null, and
+     * hence is compatible with array types.
+     *
+     * @return whether this type is an array type
+     */
+    public boolean isArrayOrKnownNull() {
+        return isArray() || equals(KNOWN_NULL);
+    }
+
+    /**
+     * Gets whether this type represents an uninitialized instance. An
+     * uninitialized instance is what one gets back from the {@code new}
+     * opcode, and remains uninitialized until a valid constructor is
+     * invoked on it.
+     *
+     * @return whether this type is "uninitialized"
+     */
+    public boolean isUninitialized() {
+        return (newAt >= 0);
+    }
+
+    /**
+     * Gets the bytecode index at which this uninitialized type was
+     * allocated.  This returns {@code Integer.MAX_VALUE} if this
+     * type is an uninitialized incoming parameter (i.e., the
+     * {@code this} of an {@code <init>} method) or
+     * {@code -1} if this type is in fact <i>initialized</i>.
+     *
+     * @return {@code >= -1;} the allocation bytecode index
+     */
+    public int getNewAt() {
+        return newAt;
+    }
+
+    /**
+     * Gets the initialized type corresponding to this instance, but only
+     * if this instance is in fact an uninitialized object type.
+     *
+     * @return {@code non-null;} the initialized type
+     */
+    public Type getInitializedType() {
+        if (initializedType == null) {
+            throw new IllegalArgumentException("initialized type: " +
+                                               descriptor);
+        }
+
+        return initializedType;
+    }
+
+    /**
+     * Gets the type corresponding to an array of this type.
+     *
+     * @return {@code non-null;} the array type
+     */
+    public Type getArrayType() {
+        if (arrayType == null) {
+            arrayType = putIntern(new Type('[' + descriptor, BT_OBJECT));
+        }
+
+        return arrayType;
+    }
+
+    /**
+     * Gets the component type of this type. This method is only valid on
+     * array types.
+     *
+     * @return {@code non-null;} the component type
+     */
+    public Type getComponentType() {
+        if (componentType == null) {
+            if (descriptor.charAt(0) != '[') {
+                throw new IllegalArgumentException("not an array type: " +
+                                                   descriptor);
+            }
+            componentType = intern(descriptor.substring(1));
+        }
+
+        return componentType;
+    }
+
+    /**
+     * Returns a new interned instance which is identical to this one, except
+     * it is indicated as uninitialized and allocated at the given bytecode
+     * index. This instance must be an initialized object type.
+     *
+     * @param newAt {@code >= 0;} the allocation bytecode index
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public Type asUninitialized(int newAt) {
+        if (newAt < 0) {
+            throw new IllegalArgumentException("newAt < 0");
+        }
+
+        if (!isReference()) {
+            throw new IllegalArgumentException("not a reference type: " +
+                                               descriptor);
+        }
+
+        if (isUninitialized()) {
+            /*
+             * Dealing with uninitialized types as a starting point is
+             * a pain, and it's not clear that it'd ever be used, so
+             * just disallow it.
+             */
+            throw new IllegalArgumentException("already uninitialized: " +
+                                               descriptor);
+        }
+
+        /*
+         * Create a new descriptor that is unique and shouldn't conflict
+         * with "normal" type descriptors
+         */
+        String newDesc = 'N' + Hex.u2(newAt) + descriptor;
+        Type result = new Type(newDesc, BT_OBJECT, newAt);
+        result.initializedType = this;
+        return putIntern(result);
+    }
+
+    /**
+     * Puts the given instance in the intern table if it's not already
+     * there. If a conflicting value is already in the table, then leave it.
+     * Return the interned value.
+     *
+     * @param type {@code non-null;} instance to make interned
+     * @return {@code non-null;} the actual interned object
+     */
+    private static Type putIntern(Type type) {
+        Type result = internTable.putIfAbsent(type.getDescriptor(), type);
+        return result != null ? result : type;
+    }
+
+    public static void clearInternTable() {
+        internTable.clear();
+        initInterns();
+    }
+}
diff --git a/dx/src/com/android/dx/rop/type/TypeBearer.java b/dx/src/com/android/dx/rop/type/TypeBearer.java
new file mode 100644
index 0000000..b03dbaf
--- /dev/null
+++ b/dx/src/com/android/dx/rop/type/TypeBearer.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.type;
+
+import com.android.dx.util.ToHuman;
+
+/**
+ * Object which has an associated type, possibly itself.
+ */
+public interface TypeBearer
+        extends ToHuman {
+    /**
+     * Gets the type associated with this instance.
+     *
+     * @return {@code non-null;} the type
+     */
+    public Type getType();
+
+    /**
+     * Gets the frame type corresponding to this type. This method returns
+     * {@code this}, except if {@link Type#isIntlike} on the underlying
+     * type returns {@code true} but the underlying type is not in
+     * fact {@link Type#INT}, in which case this method returns an instance
+     * whose underlying type <i>is</i> {@code INT}.
+     *
+     * @return {@code non-null;} the frame type for this instance
+     */
+    public TypeBearer getFrameType();
+
+    /**
+     * Gets the basic type corresponding to this instance.
+     *
+     * @return the basic type; one of the {@code BT_*} constants
+     * defined by {@link Type}
+     */
+    public int getBasicType();
+
+    /**
+     * Gets the basic type corresponding to this instance's frame type. This
+     * is equivalent to {@code getFrameType().getBasicType()}, and
+     * is the same as calling {@code getFrameType()} unless this
+     * instance is an int-like type, in which case this method returns
+     * {@code BT_INT}.
+     *
+     * @see #getBasicType
+     * @see #getFrameType
+     *
+     * @return the basic frame type; one of the {@code BT_*} constants
+     * defined by {@link Type}
+     */
+    public int getBasicFrameType();
+
+    /**
+     * Returns whether this instance represents a constant value.
+     *
+     * @return {@code true} if this instance represents a constant value
+     * and {@code false} if not
+     */
+    public boolean isConstant();
+}
diff --git a/dx/src/com/android/dx/rop/type/TypeList.java b/dx/src/com/android/dx/rop/type/TypeList.java
new file mode 100644
index 0000000..de2d62e
--- /dev/null
+++ b/dx/src/com/android/dx/rop/type/TypeList.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.rop.type;
+
+/**
+ * List of {@link Type} instances (or of things that contain types).
+ */
+public interface TypeList {
+    /**
+     * Returns whether this instance is mutable. Note that the
+     * {@code TypeList} interface itself doesn't provide any
+     * means of mutation, but that doesn't mean that there isn't an
+     * extra-interface way of mutating an instance.
+     *
+     * @return {@code true} if this instance is mutable or
+     * {@code false} if it is immutable
+     */
+    public boolean isMutable();
+
+    /**
+     * Gets the size of this list.
+     *
+     * @return {@code >= 0;} the size
+     */
+    public int size();
+
+    /**
+     * Gets the indicated element. It is an error to call this with the
+     * index for an element which was never set; if you do that, this
+     * will throw {@code NullPointerException}.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @return {@code non-null;} the indicated element
+     */
+    public Type getType(int n);
+
+    /**
+     * Gets the number of 32-bit words required to hold instances of
+     * all the elements of this list. This is a sum of the widths (categories)
+     * of all the elements.
+     *
+     * @return {@code >= 0;} the required number of words
+     */
+    public int getWordCount();
+
+    /**
+     * Returns a new instance which is identical to this one, except that
+     * the given item is appended to the end and it is guaranteed to be
+     * immutable.
+     *
+     * @param type {@code non-null;} item to append
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public TypeList withAddedType(Type type);
+}
diff --git a/dx/src/com/android/dx/rop/type/package.html b/dx/src/com/android/dx/rop/type/package.html
new file mode 100644
index 0000000..93d9d5f
--- /dev/null
+++ b/dx/src/com/android/dx/rop/type/package.html
@@ -0,0 +1,8 @@
+<body>
+<p>Implementation of classes that represent types (classes or primitives).</p>
+
+<p><b>PACKAGES USED:</b>
+<ul>
+<li><code>com.android.dx.util</code></li>
+</ul>
+</body>
diff --git a/dx/src/com/android/dx/ssa/BasicRegisterMapper.java b/dx/src/com/android/dx/ssa/BasicRegisterMapper.java
new file mode 100644
index 0000000..fe8bee4
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/BasicRegisterMapper.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.util.IntList;
+
+/**
+ * This class maps one register space into another, with
+ * each mapping built up individually and added via addMapping()
+ */
+public class BasicRegisterMapper extends RegisterMapper {
+    /** indexed by old register, containing new name */
+    private final IntList oldToNew;
+
+    /** running count of used registers in new namespace */
+    private int runningCountNewRegisters;
+
+    /**
+     * Creates a new OneToOneRegisterMapper.
+     *
+     * @param countOldRegisters the number of registers in the old name space
+     */
+    public BasicRegisterMapper(int countOldRegisters) {
+        oldToNew = new IntList(countOldRegisters);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getNewRegisterCount() {
+        return runningCountNewRegisters;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public RegisterSpec map(RegisterSpec registerSpec) {
+        if (registerSpec == null) {
+            return null;
+        }
+
+        int newReg;
+        try {
+            newReg = oldToNew.get(registerSpec.getReg());
+        } catch (IndexOutOfBoundsException ex) {
+            newReg = -1;
+        }
+
+        if (newReg < 0) {
+            throw new RuntimeException("no mapping specified for register");
+        }
+
+        return registerSpec.withReg(newReg);
+    }
+
+    /**
+     * Returns the new-namespace mapping for the specified
+     * old-namespace register, or -1 if one exists.
+     *
+     * @param oldReg {@code >= 0;} old-namespace register
+     * @return new-namespace register or -1 if none
+     */
+    public int oldToNew(int oldReg) {
+        if (oldReg >= oldToNew.size()) {
+            return -1;
+        }
+
+        return oldToNew.get(oldReg);
+    }
+
+    /** {@inheritDoc} */
+    public String toHuman() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("Old\tNew\n");
+        int sz = oldToNew.size();
+
+        for (int i = 0; i < sz; i++) {
+            sb.append(i);
+            sb.append('\t');
+            sb.append(oldToNew.get(i));
+            sb.append('\n');
+        }
+
+        sb.append("new reg count:");
+
+        sb.append(runningCountNewRegisters);
+        sb.append('\n');
+
+        return sb.toString();
+    }
+
+    /**
+     * Adds a mapping to the mapper. If oldReg has already been mapped,
+     * overwrites previous mapping with new mapping.
+     *
+     * @param oldReg {@code >= 0;} old register
+     * @param newReg {@code >= 0;} new register
+     * @param category {@code 1..2;} width of reg
+     */
+    public void addMapping(int oldReg, int newReg, int category) {
+        if (oldReg >= oldToNew.size()) {
+            // expand the array as necessary
+            for (int i = oldReg - oldToNew.size(); i >= 0; i--) {
+                oldToNew.add(-1);
+            }
+        }
+
+        oldToNew.set(oldReg, newReg);
+
+        if (runningCountNewRegisters < (newReg + category)) {
+            runningCountNewRegisters = newReg + category;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/ConstCollector.java b/dx/src/com/android/dx/ssa/ConstCollector.java
new file mode 100644
index 0000000..38812e0
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/ConstCollector.java
@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.PlainCstInsn;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.code.ThrowingCstInsn;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.TypedConstant;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.TypeBearer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+/**
+ * Collects constants that are used more than once at the top of the
+ * method block. This increases register usage by about 5% but decreases
+ * insn size by about 3%.
+ */
+public class ConstCollector {
+    /** Maximum constants to collect per method. Puts cap on reg use */
+    private static final int MAX_COLLECTED_CONSTANTS = 5;
+
+    /**
+     * Also collect string consts, although they can throw exceptions.
+     * This is off now because it just doesn't seem to gain a whole lot.
+     * TODO if you turn this on, you must change SsaInsn.hasSideEffect()
+     * to return false for const-string insns whose exceptions are not
+     * caught in the current method.
+     */
+    private static final boolean COLLECT_STRINGS = false;
+
+    /**
+     * If true, allow one local var to be involved with a collected const.
+     * Turned off because it mostly just inserts more moves.
+     */
+    private static final boolean COLLECT_ONE_LOCAL = false;
+
+    /** method we're processing */
+    private final SsaMethod ssaMeth;
+
+    /**
+     * Processes a method.
+     *
+     * @param ssaMethod {@code non-null;} method to process
+     */
+    public static void process(SsaMethod ssaMethod) {
+        ConstCollector cc = new ConstCollector(ssaMethod);
+        cc.run();
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param ssaMethod {@code non-null;} method to process
+     */
+    private ConstCollector(SsaMethod ssaMethod) {
+        this.ssaMeth = ssaMethod;
+    }
+
+    /**
+     * Applies the optimization.
+     */
+    private void run() {
+        int regSz = ssaMeth.getRegCount();
+
+        ArrayList<TypedConstant> constantList
+                = getConstsSortedByCountUse();
+
+        int toCollect = Math.min(constantList.size(), MAX_COLLECTED_CONSTANTS);
+
+        SsaBasicBlock start = ssaMeth.getEntryBlock();
+
+        // Constant to new register containing the constant
+        HashMap<TypedConstant, RegisterSpec> newRegs
+                = new HashMap<TypedConstant, RegisterSpec> (toCollect);
+
+        for (int i = 0; i < toCollect; i++) {
+            TypedConstant cst = constantList.get(i);
+            RegisterSpec result
+                    = RegisterSpec.make(ssaMeth.makeNewSsaReg(), cst);
+
+            Rop constRop = Rops.opConst(cst);
+
+            if (constRop.getBranchingness() == Rop.BRANCH_NONE) {
+                start.addInsnToHead(
+                        new PlainCstInsn(Rops.opConst(cst),
+                                SourcePosition.NO_INFO, result,
+                                RegisterSpecList.EMPTY, cst));
+            } else {
+                // We need two new basic blocks along with the new insn
+                SsaBasicBlock entryBlock = ssaMeth.getEntryBlock();
+                SsaBasicBlock successorBlock
+                        = entryBlock.getPrimarySuccessor();
+
+                // Insert a block containing the const insn.
+                SsaBasicBlock constBlock
+                        = entryBlock.insertNewSuccessor(successorBlock);
+
+                constBlock.replaceLastInsn(
+                        new ThrowingCstInsn(constRop, SourcePosition.NO_INFO,
+                                RegisterSpecList.EMPTY,
+                                StdTypeList.EMPTY, cst));
+
+                // Insert a block containing the move-result-pseudo insn.
+
+                SsaBasicBlock resultBlock
+                        = constBlock.insertNewSuccessor(successorBlock);
+                PlainInsn insn
+                    = new PlainInsn(
+                            Rops.opMoveResultPseudo(result.getTypeBearer()),
+                            SourcePosition.NO_INFO,
+                            result, RegisterSpecList.EMPTY);
+
+                resultBlock.addInsnToHead(insn);
+            }
+
+            newRegs.put(cst, result);
+        }
+
+        updateConstUses(newRegs, regSz);
+    }
+
+    /**
+     * Gets all of the collectable constant values used in this method,
+     * sorted by most used first. Skips non-collectable consts, such as
+     * non-string object constants
+     *
+     * @return {@code non-null;} list of constants in most-to-least used order
+     */
+    private ArrayList<TypedConstant> getConstsSortedByCountUse() {
+        int regSz = ssaMeth.getRegCount();
+
+        final HashMap<TypedConstant, Integer> countUses
+                = new HashMap<TypedConstant, Integer>();
+
+        /*
+         * Each collected constant can be used by just one local
+         * (used only if COLLECT_ONE_LOCAL is true).
+         */
+        final HashSet<TypedConstant> usedByLocal
+                = new HashSet<TypedConstant>();
+
+        // Count how many times each const value is used.
+        for (int i = 0; i < regSz; i++) {
+            SsaInsn insn = ssaMeth.getDefinitionForRegister(i);
+
+            if (insn == null || insn.getOpcode() == null) continue;
+
+            RegisterSpec result = insn.getResult();
+            TypeBearer typeBearer = result.getTypeBearer();
+
+            if (!typeBearer.isConstant()) continue;
+
+            TypedConstant cst = (TypedConstant) typeBearer;
+
+            // Find defining instruction for move-result-pseudo instructions
+            if (insn.getOpcode().getOpcode() == RegOps.MOVE_RESULT_PSEUDO) {
+                int pred = insn.getBlock().getPredecessors().nextSetBit(0);
+                ArrayList<SsaInsn> predInsns;
+                predInsns = ssaMeth.getBlocks().get(pred).getInsns();
+                insn = predInsns.get(predInsns.size()-1);
+            }
+
+            if (insn.canThrow()) {
+                /*
+                 * Don't move anything other than strings -- the risk
+                 * of changing where an exception is thrown is too high.
+                 */
+                if (!(cst instanceof CstString) || !COLLECT_STRINGS) {
+                    continue;
+                }
+                /*
+                 * We can't move any throwable const whose throw will be
+                 * caught, so don't count them.
+                 */
+                if (insn.getBlock().getSuccessors().cardinality() > 1) {
+                    continue;
+                }
+            }
+
+            /*
+             * TODO: Might be nice to try and figure out which local
+             * wins most when collected.
+             */
+            if (ssaMeth.isRegALocal(result)) {
+                if (!COLLECT_ONE_LOCAL) {
+                    continue;
+                } else {
+                    if (usedByLocal.contains(cst)) {
+                        // Count one local usage only.
+                        continue;
+                    } else {
+                        usedByLocal.add(cst);
+                    }
+                }
+            }
+
+            Integer has = countUses.get(cst);
+            if (has == null) {
+                countUses.put(cst, 1);
+            } else {
+                countUses.put(cst, has + 1);
+            }
+        }
+
+        // Collect constants that have been reused.
+        ArrayList<TypedConstant> constantList = new ArrayList<TypedConstant>();
+        for (Map.Entry<TypedConstant, Integer> entry : countUses.entrySet()) {
+            if (entry.getValue() > 1) {
+                constantList.add(entry.getKey());
+            }
+        }
+
+        // Sort by use, with most used at the beginning of the list.
+        Collections.sort(constantList, new Comparator<Constant>() {
+            @Override
+            public int compare(Constant a, Constant b) {
+                int ret;
+                ret = countUses.get(b) - countUses.get(a);
+
+                if (ret == 0) {
+                    /*
+                     * Provide sorting determinisim for constants with same
+                     * usage count.
+                     */
+                    ret = a.compareTo(b);
+                }
+
+                return ret;
+            }
+
+            @Override
+            public boolean equals (Object obj) {
+                return obj == this;
+            }
+        });
+
+        return constantList;
+    }
+
+    /**
+     * Inserts mark-locals if necessary when changing a register. If
+     * the definition of {@code origReg} is associated with a local
+     * variable, then insert a mark-local for {@code newReg} just below
+     * it. We expect the definition of  {@code origReg} to ultimately
+     * be removed by the dead code eliminator
+     *
+     * @param origReg {@code non-null;} original register
+     * @param newReg {@code non-null;} new register that will replace
+     * {@code origReg}
+     */
+    private void fixLocalAssignment(RegisterSpec origReg,
+            RegisterSpec newReg) {
+        for (SsaInsn use : ssaMeth.getUseListForRegister(origReg.getReg())) {
+            RegisterSpec localAssignment = use.getLocalAssignment();
+            if (localAssignment == null) {
+                continue;
+            }
+
+            if (use.getResult() == null) {
+                /*
+                 * This is a mark-local. it will be updated when all uses
+                 * are updated.
+                 */
+                continue;
+            }
+
+            LocalItem local = localAssignment.getLocalItem();
+
+            // Un-associate original use.
+            use.setResultLocal(null);
+
+            // Now add a mark-local to the new reg immediately after.
+            newReg = newReg.withLocalItem(local);
+
+            SsaInsn newInsn
+                    = SsaInsn.makeFromRop(
+                        new PlainInsn(Rops.opMarkLocal(newReg),
+                        SourcePosition.NO_INFO, null,
+                                RegisterSpecList.make(newReg)),
+                    use.getBlock());
+
+            ArrayList<SsaInsn> insns = use.getBlock().getInsns();
+
+            insns.add(insns.indexOf(use) + 1, newInsn);
+        }
+    }
+
+    /**
+     * Updates all uses of various consts to use the values in the newly
+     * assigned registers.
+     *
+     * @param newRegs {@code non-null;} mapping between constant and new reg
+     * @param origRegCount {@code >=0;} original SSA reg count, not including
+     * newly added constant regs
+     */
+    private void updateConstUses(HashMap<TypedConstant, RegisterSpec> newRegs,
+            int origRegCount) {
+
+        /*
+         * set of constants associated with a local variable; used
+         * only if COLLECT_ONE_LOCAL is true.
+         */
+        final HashSet<TypedConstant> usedByLocal
+                = new HashSet<TypedConstant>();
+
+        final ArrayList<SsaInsn>[] useList = ssaMeth.getUseListCopy();
+
+        for (int i = 0; i < origRegCount; i++) {
+            SsaInsn insn = ssaMeth.getDefinitionForRegister(i);
+
+            if (insn == null) {
+                continue;
+            }
+
+            final RegisterSpec origReg = insn.getResult();
+            TypeBearer typeBearer = insn.getResult().getTypeBearer();
+
+            if (!typeBearer.isConstant()) continue;
+
+            TypedConstant cst = (TypedConstant) typeBearer;
+            final RegisterSpec newReg = newRegs.get(cst);
+
+            if (newReg == null) {
+                continue;
+            }
+
+            if (ssaMeth.isRegALocal(origReg)) {
+                if (!COLLECT_ONE_LOCAL) {
+                    continue;
+                } else {
+                    /*
+                     * TODO: If the same local gets the same cst
+                     * multiple times, it would be nice to reuse the
+                     * register.
+                     */
+                    if (usedByLocal.contains(cst)) {
+                        continue;
+                    } else {
+                        usedByLocal.add(cst);
+                        fixLocalAssignment(origReg, newRegs.get(cst));
+                    }
+                }
+            }
+
+            // maps an original const register to the new collected register
+            RegisterMapper mapper = new RegisterMapper() {
+                @Override
+                public int getNewRegisterCount() {
+                    return ssaMeth.getRegCount();
+                }
+
+                @Override
+                public RegisterSpec map(RegisterSpec registerSpec) {
+                    if (registerSpec.getReg() == origReg.getReg()) {
+                        return newReg.withLocalItem(
+                                registerSpec.getLocalItem());
+                    }
+
+                    return registerSpec;
+                }
+            };
+
+            for (SsaInsn use : useList[origReg.getReg()]) {
+                if (use.canThrow()
+                        && use.getBlock().getSuccessors().cardinality() > 1) {
+                    continue;
+                }
+                use.mapSourceRegisters(mapper);
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/DeadCodeRemover.java b/dx/src/com/android/dx/ssa/DeadCodeRemover.java
new file mode 100644
index 0000000..c2d4daf
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/DeadCodeRemover.java
@@ -0,0 +1,271 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashSet;
+
+/**
+ * A variation on Appel Algorithm 19.12 "Dead code elimination in SSA form".
+ *
+ * TODO this algorithm is more efficient if run in reverse from exit
+ * block to entry block.
+ */
+public class DeadCodeRemover {
+    /** method we're processing */
+    private final SsaMethod ssaMeth;
+
+    /** ssaMeth.getRegCount() */
+    private final int regCount;
+
+    /**
+     * indexed by register: whether reg should be examined
+     * (does it correspond to a no-side-effect insn?)
+     */
+    private final BitSet worklist;
+
+    /** use list indexed by register; modified during operation */
+    private final ArrayList<SsaInsn>[] useList;
+
+    /**
+     * Process a method with the dead-code remver
+     *
+     * @param ssaMethod method to process
+     */
+    public static void process(SsaMethod ssaMethod) {
+        DeadCodeRemover dc = new DeadCodeRemover(ssaMethod);
+        dc.run();
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param ssaMethod method to process
+     */
+    private DeadCodeRemover(SsaMethod ssaMethod) {
+        this.ssaMeth = ssaMethod;
+
+        regCount = ssaMethod.getRegCount();
+        worklist = new BitSet(regCount);
+        useList = ssaMeth.getUseListCopy();
+    }
+
+    /**
+     * Runs the dead code remover.
+     */
+    private void run() {
+        pruneDeadInstructions();
+
+        HashSet<SsaInsn> deletedInsns = new HashSet<SsaInsn>();
+
+        ssaMeth.forEachInsn(new NoSideEffectVisitor(worklist));
+
+        int regV;
+
+        while ( 0 <= (regV = worklist.nextSetBit(0)) ) {
+            worklist.clear(regV);
+
+            if (useList[regV].size() == 0
+                    || isCircularNoSideEffect(regV, null)) {
+
+                SsaInsn insnS = ssaMeth.getDefinitionForRegister(regV);
+
+                // This insn has already been deleted.
+                if (deletedInsns.contains(insnS)) {
+                    continue;
+                }
+
+                RegisterSpecList sources = insnS.getSources();
+
+                int sz = sources.size();
+                for (int i = 0; i < sz; i++) {
+                    // Delete this insn from all usage lists.
+                    RegisterSpec source = sources.get(i);
+                    useList[source.getReg()].remove(insnS);
+
+                    if (!hasSideEffect(
+                            ssaMeth.getDefinitionForRegister(
+                                    source.getReg()))) {
+                        /*
+                         * Only registers whose definition has no side effect
+                         * should be added back to the worklist.
+                         */
+                        worklist.set(source.getReg());
+                    }
+                }
+
+                // Schedule this insn for later deletion.
+                deletedInsns.add(insnS);
+            }
+        }
+
+        ssaMeth.deleteInsns(deletedInsns);
+    }
+
+    /**
+     * Removes all instructions from every unreachable block.
+     */
+    private void pruneDeadInstructions() {
+        HashSet<SsaInsn> deletedInsns = new HashSet<SsaInsn>();
+
+        BitSet reachable = ssaMeth.computeReachability();
+        ArrayList<SsaBasicBlock> blocks = ssaMeth.getBlocks();
+        int blockIndex = 0;
+
+        while ((blockIndex = reachable.nextClearBit(blockIndex)) < blocks.size()) {
+            SsaBasicBlock block = blocks.get(blockIndex);
+            blockIndex++;
+
+            // Prune instructions from unreachable blocks
+            for (int i = 0; i < block.getInsns().size(); i++) {
+                SsaInsn insn = block.getInsns().get(i);
+                RegisterSpecList sources = insn.getSources();
+                int sourcesSize = sources.size();
+
+                // Delete this instruction completely if it has sources
+                if (sourcesSize != 0) {
+                    deletedInsns.add(insn);
+                }
+
+                // Delete this instruction from all usage lists.
+                for (int j = 0; j < sourcesSize; j++) {
+                    RegisterSpec source = sources.get(j);
+                    useList[source.getReg()].remove(insn);
+                }
+
+                // Remove this instruction result from the sources of any phis
+                RegisterSpec result = insn.getResult();
+                if (result == null) continue;
+                for (SsaInsn use : useList[result.getReg()]) {
+                    if (use instanceof PhiInsn) {
+                        PhiInsn phiUse = (PhiInsn) use;
+                        phiUse.removePhiRegister(result);
+                    }
+                }
+            }
+        }
+
+        ssaMeth.deleteInsns(deletedInsns);
+    }
+
+    /**
+     * Returns true if the only uses of this register form a circle of
+     * operations with no side effects.
+     *
+     * @param regV register to examine
+     * @param set a set of registers that we've already determined
+     * are only used as sources in operations with no side effect or null
+     * if this is the first recursion
+     * @return true if usage is circular without side effect
+     */
+    private boolean isCircularNoSideEffect(int regV, BitSet set) {
+        if ((set != null) && set.get(regV)) {
+            return true;
+        }
+
+        for (SsaInsn use : useList[regV]) {
+            if (hasSideEffect(use)) {
+                return false;
+            }
+        }
+
+        if (set == null) {
+            set = new BitSet(regCount);
+        }
+
+        // This register is only used in operations that have no side effect.
+        set.set(regV);
+
+        for (SsaInsn use : useList[regV]) {
+            RegisterSpec result = use.getResult();
+
+            if (result == null
+                    || !isCircularNoSideEffect(result.getReg(), set)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns true if this insn has a side-effect. Returns true
+     * if the insn is null for reasons stated in the code block.
+     *
+     * @param insn {@code null-ok;} instruction in question
+     * @return true if it has a side-effect
+     */
+    private static boolean hasSideEffect(SsaInsn insn) {
+        if (insn == null) {
+            /* While false would seem to make more sense here, true
+             * prevents us from adding this back to a worklist unnecessarally.
+             */
+            return true;
+        }
+
+        return insn.hasSideEffect();
+    }
+
+    /**
+     * A callback class used to build up the initial worklist of
+     * registers defined by an instruction with no side effect.
+     */
+    static private class NoSideEffectVisitor implements SsaInsn.Visitor {
+        BitSet noSideEffectRegs;
+
+        /**
+         * Passes in data structures that will be filled out after
+         * ssaMeth.forEachInsn() is called with this instance.
+         *
+         * @param noSideEffectRegs to-build bitset of regs that are
+         * results of regs with no side effects
+         */
+        public NoSideEffectVisitor(BitSet noSideEffectRegs) {
+            this.noSideEffectRegs = noSideEffectRegs;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitMoveInsn (NormalSsaInsn insn) {
+            // If we're tracking local vars, some moves have side effects.
+            if (!hasSideEffect(insn)) {
+                noSideEffectRegs.set(insn.getResult().getReg());
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitPhiInsn (PhiInsn phi) {
+            // If we're tracking local vars, then some phis have side effects.
+            if (!hasSideEffect(phi)) {
+                noSideEffectRegs.set(phi.getResult().getReg());
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void visitNonMoveInsn (NormalSsaInsn insn) {
+            RegisterSpec result = insn.getResult();
+            if (!hasSideEffect(insn) && result != null) {
+                noSideEffectRegs.set(result.getReg());
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/DomFront.java b/dx/src/com/android/dx/ssa/DomFront.java
new file mode 100644
index 0000000..0278a67
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/DomFront.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.util.IntSet;
+import java.util.ArrayList;
+import java.util.BitSet;
+
+/**
+ * Calculates the dominance-frontiers of a method's basic blocks.
+ * Algorithm from "A Simple, Fast Dominance Algorithm" by Cooper,
+ * Harvey, and Kennedy; transliterated to Java.
+ */
+public class DomFront {
+    /** local debug flag */
+    private static final boolean DEBUG = false;
+
+    /** {@code non-null;} method being processed */
+    private final SsaMethod meth;
+
+    private final ArrayList<SsaBasicBlock> nodes;
+
+    private final DomInfo[] domInfos;
+
+    /**
+     * Dominance-frontier information for a single basic block.
+     */
+    public static class DomInfo {
+        /**
+         * {@code null-ok;} the dominance frontier set indexed by
+         * block index
+         */
+        public IntSet dominanceFrontiers;
+
+        /** {@code >= 0 after run();} the index of the immediate dominator */
+        public int idom = -1;
+    }
+
+    /**
+     * Constructs instance. Call {@link DomFront#run} to process.
+     *
+     * @param meth {@code non-null;} method to process
+     */
+    public DomFront(SsaMethod meth) {
+        this.meth = meth;
+        nodes = meth.getBlocks();
+
+        int szNodes = nodes.size();
+        domInfos = new DomInfo[szNodes];
+
+        for (int i = 0; i < szNodes; i++) {
+            domInfos[i] = new DomInfo();
+        }
+    }
+
+    /**
+     * Calculates the dominance frontier information for the method.
+     *
+     * @return {@code non-null;} an array of DomInfo structures
+     */
+    public DomInfo[] run() {
+        int szNodes = nodes.size();
+
+        if (DEBUG) {
+            for (int i = 0; i < szNodes; i++) {
+                SsaBasicBlock node = nodes.get(i);
+                System.out.println("pred[" + i + "]: "
+                        + node.getPredecessors());
+            }
+        }
+
+        Dominators methDom = Dominators.make(meth, domInfos, false);
+
+        if (DEBUG) {
+            for (int i = 0; i < szNodes; i++) {
+                DomInfo info = domInfos[i];
+                System.out.println("idom[" + i + "]: "
+                        + info.idom);
+            }
+        }
+
+        buildDomTree();
+
+        if (DEBUG) {
+            debugPrintDomChildren();
+        }
+
+        for (int i = 0; i < szNodes; i++) {
+            domInfos[i].dominanceFrontiers
+                    = SetFactory.makeDomFrontSet(szNodes);
+        }
+
+        calcDomFronts();
+
+        if (DEBUG) {
+            for (int i = 0; i < szNodes; i++) {
+                System.out.println("df[" + i + "]: "
+                        + domInfos[i].dominanceFrontiers);
+            }
+        }
+
+        return domInfos;
+    }
+
+    private void debugPrintDomChildren() {
+        int szNodes = nodes.size();
+
+        for (int i = 0; i < szNodes; i++) {
+            SsaBasicBlock node = nodes.get(i);
+            StringBuffer sb = new StringBuffer();
+
+            sb.append('{');
+            boolean comma = false;
+            for (SsaBasicBlock child : node.getDomChildren()) {
+                if (comma) {
+                    sb.append(',');
+                }
+                sb.append(child);
+                comma = true;
+            }
+            sb.append('}');
+
+            System.out.println("domChildren[" + node + "]: "
+                    + sb);
+        }
+    }
+
+    /**
+     * The dominators algorithm leaves us knowing who the immediate dominator
+     * is for each node. This sweeps the node list and builds the proper
+     * dominance tree.
+     */
+    private void buildDomTree() {
+        int szNodes = nodes.size();
+
+        for (int i = 0; i < szNodes; i++) {
+            DomInfo info = domInfos[i];
+
+            if (info.idom == -1) continue;
+
+            SsaBasicBlock domParent = nodes.get(info.idom);
+            domParent.addDomChild(nodes.get(i));
+        }
+    }
+
+    /**
+     * Calculates the dominance-frontier set.
+     * from "A Simple, Fast Dominance Algorithm" by Cooper,
+     * Harvey, and Kennedy; transliterated to Java.
+     */
+    private void calcDomFronts() {
+        int szNodes = nodes.size();
+
+        for (int b = 0; b < szNodes; b++) {
+            SsaBasicBlock nb = nodes.get(b);
+            DomInfo nbInfo = domInfos[b];
+            BitSet pred = nb.getPredecessors();
+
+            if (pred.cardinality() > 1) {
+                for (int i = pred.nextSetBit(0); i >= 0;
+                     i = pred.nextSetBit(i + 1)) {
+
+                    for (int runnerIndex = i;
+                         runnerIndex != nbInfo.idom; /* empty */) {
+                        /*
+                         * We can stop if we hit a block we already
+                         * added label to, since we must be at a part
+                         * of the dom tree we have seen before.
+                         */
+                        if (runnerIndex == -1) break;
+
+                        DomInfo runnerInfo = domInfos[runnerIndex];
+
+                        if (runnerInfo.dominanceFrontiers.has(b)) {
+                            break;
+                        }
+
+                        // Add b to runner's dominance frontier set.
+                        runnerInfo.dominanceFrontiers.add(b);
+                        runnerIndex = runnerInfo.idom;
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/Dominators.java b/dx/src/com/android/dx/ssa/Dominators.java
new file mode 100644
index 0000000..a65012c
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/Dominators.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashSet;
+
+/**
+ * This class computes dominator and post-dominator information using the
+ * Lengauer-Tarjan method.
+ *
+ * See A Fast Algorithm for Finding Dominators in a Flowgraph
+ * T. Lengauer &amp; R. Tarjan, ACM TOPLAS July 1979, pgs 121-141.
+ *
+ * This implementation runs in time O(n log n).  The time bound
+ * could be changed to O(n * ack(n)) with a small change to the link and eval,
+ * and an addition of a child field to the DFS info. In reality, the constant
+ * overheads are high enough that the current method is faster in all but the
+ * strangest artificially constructed examples.
+ *
+ * The basic idea behind this algorithm is to perform a DFS walk, keeping track
+ * of various info about parents.  We then use this info to calculate the
+ * dominators, using union-find structures to link together the DFS info,
+ * then finally evaluate the union-find results to get the dominators.
+ * This implementation is m log n because it does not perform union by
+ * rank to keep the union-find tree balanced.
+ */
+public final class Dominators {
+    /* postdom is true if we want post dominators */
+    private final boolean postdom;
+
+    /* {@code non-null;} method being processed */
+    private final SsaMethod meth;
+
+    /* Method's basic blocks. */
+    private final ArrayList<SsaBasicBlock> blocks;
+
+    /** indexed by basic block index */
+    private final DFSInfo[] info;
+
+    private final ArrayList<SsaBasicBlock> vertex;
+
+    /** {@code non-null;} the raw dominator info */
+    private final DomFront.DomInfo domInfos[];
+
+    /**
+     * Constructs an instance.
+     *
+     * @param meth {@code non-null;} method to process
+     * @param domInfos {@code non-null;} the raw dominator info
+     * @param postdom true for postdom information, false for normal dom info
+     */
+    private Dominators(SsaMethod meth, DomFront.DomInfo[] domInfos,
+            boolean postdom) {
+        this.meth = meth;
+        this.domInfos = domInfos;
+        this.postdom = postdom;
+        this.blocks = meth.getBlocks();
+        this.info = new DFSInfo[blocks.size() + 2];
+        this.vertex = new ArrayList<SsaBasicBlock>();
+    }
+
+    /**
+     * Constructs a fully-initialized instance. (This method exists so as
+     * to avoid calling a large amount of code in the constructor.)
+     *
+     * @param meth {@code non-null;} method to process
+     * @param domInfos {@code non-null;} the raw dominator info
+     * @param postdom true for postdom information, false for normal dom info
+     */
+    public static Dominators make(SsaMethod meth, DomFront.DomInfo[] domInfos,
+            boolean postdom) {
+        Dominators result = new Dominators(meth, domInfos, postdom);
+
+        result.run();
+        return result;
+    }
+
+    private BitSet getSuccs(SsaBasicBlock block) {
+        if (postdom) {
+            return block.getPredecessors();
+        } else {
+            return block.getSuccessors();
+        }
+    }
+
+    private BitSet getPreds(SsaBasicBlock block) {
+        if (postdom) {
+            return block.getSuccessors();
+        } else {
+            return block.getPredecessors();
+        }
+    }
+
+    /**
+     * Performs path compress on the DFS info.
+     *
+     * @param in Basic block whose DFS info we are path compressing.
+     */
+    private void compress(SsaBasicBlock in) {
+        DFSInfo bbInfo = info[in.getIndex()];
+        DFSInfo ancestorbbInfo = info[bbInfo.ancestor.getIndex()];
+
+        if (ancestorbbInfo.ancestor != null) {
+            ArrayList<SsaBasicBlock> worklist = new ArrayList<SsaBasicBlock>();
+            HashSet<SsaBasicBlock> visited = new HashSet<SsaBasicBlock>();
+            worklist.add(in);
+
+            while (!worklist.isEmpty()) {
+                int wsize = worklist.size();
+                SsaBasicBlock v = worklist.get(wsize - 1);
+                DFSInfo vbbInfo = info[v.getIndex()];
+                SsaBasicBlock vAncestor = vbbInfo.ancestor;
+                DFSInfo vabbInfo = info[vAncestor.getIndex()];
+
+                // Make sure we process our ancestor before ourselves.
+                if (visited.add(vAncestor) && vabbInfo.ancestor != null) {
+                    worklist.add(vAncestor);
+                    continue;
+                }
+                worklist.remove(wsize - 1);
+
+                // Update based on ancestor info.
+                if (vabbInfo.ancestor == null) {
+                    continue;
+                }
+                SsaBasicBlock vAncestorRep = vabbInfo.rep;
+                SsaBasicBlock vRep = vbbInfo.rep;
+                if (info[vAncestorRep.getIndex()].semidom
+                        < info[vRep.getIndex()].semidom) {
+                    vbbInfo.rep = vAncestorRep;
+                }
+                vbbInfo.ancestor = vabbInfo.ancestor;
+            }
+        }
+    }
+
+    private SsaBasicBlock eval(SsaBasicBlock v) {
+        DFSInfo bbInfo = info[v.getIndex()];
+
+        if (bbInfo.ancestor == null) {
+            return v;
+        }
+
+        compress(v);
+        return bbInfo.rep;
+    }
+
+    /**
+     * Performs dominator/post-dominator calculation for the control
+     * flow graph.
+     *
+     * @param meth {@code non-null;} method to analyze
+     */
+    private void run() {
+        SsaBasicBlock root = postdom
+                ? meth.getExitBlock() : meth.getEntryBlock();
+
+        if (root != null) {
+            vertex.add(root);
+            domInfos[root.getIndex()].idom = root.getIndex();
+        }
+
+        /*
+         * First we perform a DFS numbering of the blocks, by
+         * numbering the dfs tree roots.
+         */
+
+        DfsWalker walker = new DfsWalker();
+        meth.forEachBlockDepthFirst(postdom, walker);
+
+        // the largest semidom number assigned
+        int dfsMax = vertex.size() - 1;
+
+        // Now calculate semidominators.
+        for (int i = dfsMax; i >= 2; --i) {
+            SsaBasicBlock w = vertex.get(i);
+            DFSInfo wInfo = info[w.getIndex()];
+
+            BitSet preds = getPreds(w);
+            for (int j = preds.nextSetBit(0);
+                 j >= 0;
+                 j = preds.nextSetBit(j + 1)) {
+                SsaBasicBlock predBlock = blocks.get(j);
+                DFSInfo predInfo = info[predBlock.getIndex()];
+
+                /*
+                 * PredInfo may not exist in case the predecessor is
+                 * not reachable.
+                 */
+                if (predInfo != null) {
+                    int predSemidom = info[eval(predBlock).getIndex()].semidom;
+                    if (predSemidom < wInfo.semidom) {
+                        wInfo.semidom = predSemidom;
+                    }
+                }
+            }
+            info[vertex.get(wInfo.semidom).getIndex()].bucket.add(w);
+
+            /*
+             * Normally we would call link here, but in our O(m log n)
+             * implementation this is equivalent to the following
+             * single line.
+             */
+            wInfo.ancestor = wInfo.parent;
+
+            // Implicity define idom for each vertex.
+            ArrayList<SsaBasicBlock> wParentBucket;
+            wParentBucket = info[wInfo.parent.getIndex()].bucket;
+
+            while (!wParentBucket.isEmpty()) {
+                int lastItem = wParentBucket.size() - 1;
+                SsaBasicBlock last = wParentBucket.remove(lastItem);
+                SsaBasicBlock U = eval(last);
+                if (info[U.getIndex()].semidom
+                        < info[last.getIndex()].semidom) {
+                    domInfos[last.getIndex()].idom = U.getIndex();
+                } else {
+                    domInfos[last.getIndex()].idom = wInfo.parent.getIndex();
+                }
+            }
+        }
+
+        // Now explicitly define the immediate dominator of each vertex
+        for (int i =  2; i <= dfsMax; ++i) {
+            SsaBasicBlock w = vertex.get(i);
+            if (domInfos[w.getIndex()].idom
+                    != vertex.get(info[w.getIndex()].semidom).getIndex()) {
+                domInfos[w.getIndex()].idom
+                        = domInfos[domInfos[w.getIndex()].idom].idom;
+            }
+        }
+    }
+
+    /**
+     * Callback for depth-first walk through control flow graph (either
+     * from the entry block or the exit block). Records the traversal order
+     * in the {@code info}list.
+     */
+    private class DfsWalker implements SsaBasicBlock.Visitor {
+        private int dfsNum = 0;
+
+        @Override
+        public void visitBlock(SsaBasicBlock v, SsaBasicBlock parent) {
+            DFSInfo bbInfo = new DFSInfo();
+            bbInfo.semidom = ++dfsNum;
+            bbInfo.rep = v;
+            bbInfo.parent = parent;
+            vertex.add(v);
+            info[v.getIndex()] = bbInfo;
+        }
+    }
+
+    private static final class DFSInfo {
+        public int semidom;
+        public SsaBasicBlock parent;
+
+        /**
+         * rep(resentative) is known as "label" in the paper. It is the node
+         * that our block's DFS info has been unioned to.
+         */
+        public SsaBasicBlock rep;
+
+        public SsaBasicBlock ancestor;
+        public ArrayList<SsaBasicBlock> bucket;
+
+        public DFSInfo() {
+            bucket = new ArrayList<SsaBasicBlock>();
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/EscapeAnalysis.java b/dx/src/com/android/dx/ssa/EscapeAnalysis.java
new file mode 100644
index 0000000..a53787a
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/EscapeAnalysis.java
@@ -0,0 +1,846 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.Exceptions;
+import com.android.dx.rop.code.FillArrayDataInsn;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.PlainCstInsn;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.ThrowingCstInsn;
+import com.android.dx.rop.code.ThrowingInsn;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.rop.cst.CstMethodRef;
+import com.android.dx.rop.cst.CstNat;
+import com.android.dx.rop.cst.CstString;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.cst.TypedConstant;
+import com.android.dx.rop.cst.Zeroes;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * Simple intraprocedural escape analysis. Finds new arrays that don't escape
+ * the method they are created in and replaces the array values with registers.
+ */
+public class EscapeAnalysis {
+    /**
+     * Struct used to generate and maintain escape analysis results.
+     */
+    static class EscapeSet {
+        /** set containing all registers related to an object */
+        BitSet regSet;
+        /** escape state of the object */
+        EscapeState escape;
+        /** list of objects that are put into this object */
+        ArrayList<EscapeSet> childSets;
+        /** list of objects that this object is put into */
+        ArrayList<EscapeSet> parentSets;
+        /** flag to indicate this object is a scalar replaceable array */
+        boolean replaceableArray;
+
+        /**
+         * Constructs an instance of an EscapeSet
+         *
+         * @param reg the SSA register that defines the object
+         * @param size the number of registers in the method
+         * @param escState the lattice value to initially set this to
+         */
+        EscapeSet(int reg, int size, EscapeState escState) {
+            regSet = new BitSet(size);
+            regSet.set(reg);
+            escape = escState;
+            childSets = new ArrayList<EscapeSet>();
+            parentSets = new ArrayList<EscapeSet>();
+            replaceableArray = false;
+        }
+    }
+
+    /**
+     * Lattice values used to indicate escape state for an object. Analysis can
+     * only raise escape state values, not lower them.
+     *
+     * TOP - Used for objects that haven't been analyzed yet
+     * NONE - Object does not escape, and is eligible for scalar replacement.
+     * METHOD - Object remains local to method, but can't be scalar replaced.
+     * INTER - Object is passed between methods. (treated as globally escaping
+     *         since this is an intraprocedural analysis)
+     * GLOBAL - Object escapes globally.
+     */
+    public enum EscapeState {
+        TOP, NONE, METHOD, INTER, GLOBAL
+    }
+
+    /** method we're processing */
+    private final SsaMethod ssaMeth;
+    /** ssaMeth.getRegCount() */
+    private final int regCount;
+    /** Lattice values for each object register group */
+    private final ArrayList<EscapeSet> latticeValues;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param ssaMeth method to process
+     */
+    private EscapeAnalysis(SsaMethod ssaMeth) {
+        this.ssaMeth = ssaMeth;
+        this.regCount = ssaMeth.getRegCount();
+        this.latticeValues = new ArrayList<EscapeSet>();
+    }
+
+    /**
+     * Finds the index in the lattice for a particular register.
+     * Returns the size of the lattice if the register wasn't found.
+     *
+     * @param reg {@code non-null;} register being looked up
+     * @return index of the register or size of the lattice if it wasn't found.
+     */
+    private int findSetIndex(RegisterSpec reg) {
+        int i;
+        for (i = 0; i < latticeValues.size(); i++) {
+            EscapeSet e = latticeValues.get(i);
+            if (e.regSet.get(reg.getReg())) {
+                return i;
+            }
+        }
+        return i;
+    }
+
+    /**
+     * Finds the corresponding instruction for a given move result
+     *
+     * @param moveInsn {@code non-null;} a move result instruction
+     * @return {@code non-null;} the instruction that produces the result for
+     * the move
+     */
+    private SsaInsn getInsnForMove(SsaInsn moveInsn) {
+        int pred = moveInsn.getBlock().getPredecessors().nextSetBit(0);
+        ArrayList<SsaInsn> predInsns = ssaMeth.getBlocks().get(pred).getInsns();
+        return predInsns.get(predInsns.size()-1);
+    }
+
+    /**
+     * Finds the corresponding move result for a given instruction
+     *
+     * @param insn {@code non-null;} an instruction that must always be
+     * followed by a move result
+     * @return {@code non-null;} the move result for the given instruction
+     */
+    private SsaInsn getMoveForInsn(SsaInsn insn) {
+        int succ = insn.getBlock().getSuccessors().nextSetBit(0);
+        ArrayList<SsaInsn> succInsns = ssaMeth.getBlocks().get(succ).getInsns();
+        return succInsns.get(0);
+    }
+
+    /**
+     * Creates a link in the lattice between two EscapeSets due to a put
+     * instruction. The object being put is the child and the object being put
+     * into is the parent. A child set must always have an escape state at
+     * least as high as its parent.
+     *
+     * @param parentSet {@code non-null;} the EscapeSet for the object being put
+     * into
+     * @param childSet {@code non-null;} the EscapeSet for the object being put
+     */
+    private void addEdge(EscapeSet parentSet, EscapeSet childSet) {
+        if (!childSet.parentSets.contains(parentSet)) {
+            childSet.parentSets.add(parentSet);
+        }
+        if (!parentSet.childSets.contains(childSet)) {
+            parentSet.childSets.add(childSet);
+        }
+    }
+
+    /**
+     * Merges all links in the lattice among two EscapeSets. On return, the
+     * newNode will have its old links as well as all links from the oldNode.
+     * The oldNode has all its links removed.
+     *
+     * @param newNode {@code non-null;} the EscapeSet to merge all links into
+     * @param oldNode {@code non-null;} the EscapeSet to remove all links from
+     */
+    private void replaceNode(EscapeSet newNode, EscapeSet oldNode) {
+        for (EscapeSet e : oldNode.parentSets) {
+            e.childSets.remove(oldNode);
+            e.childSets.add(newNode);
+            newNode.parentSets.add(e);
+        }
+        for (EscapeSet e : oldNode.childSets) {
+            e.parentSets.remove(oldNode);
+            e.parentSets.add(newNode);
+            newNode.childSets.add(e);
+        }
+    }
+
+    /**
+     * Performs escape analysis on a method. Finds scalar replaceable arrays and
+     * replaces them with equivalent registers.
+     *
+     * @param ssaMethod {@code non-null;} method to process
+     */
+    public static void process(SsaMethod ssaMethod) {
+        new EscapeAnalysis(ssaMethod).run();
+    }
+
+    /**
+     * Process a single instruction, looking for new objects resulting from
+     * move result or move param.
+     *
+     * @param insn {@code non-null;} instruction to process
+     */
+    private void processInsn(SsaInsn insn) {
+        int op = insn.getOpcode().getOpcode();
+        RegisterSpec result = insn.getResult();
+        EscapeSet escSet;
+
+        // Identify new objects
+        if (op == RegOps.MOVE_RESULT_PSEUDO &&
+                result.getTypeBearer().getBasicType() == Type.BT_OBJECT) {
+            // Handle objects generated through move_result_pseudo
+            escSet = processMoveResultPseudoInsn(insn);
+            processRegister(result, escSet);
+        } else if (op == RegOps.MOVE_PARAM &&
+                      result.getTypeBearer().getBasicType() == Type.BT_OBJECT) {
+            // Track method arguments that are objects
+            escSet = new EscapeSet(result.getReg(), regCount, EscapeState.NONE);
+            latticeValues.add(escSet);
+            processRegister(result, escSet);
+        } else if (op == RegOps.MOVE_RESULT &&
+                result.getTypeBearer().getBasicType() == Type.BT_OBJECT) {
+            // Track method return values that are objects
+            escSet = new EscapeSet(result.getReg(), regCount, EscapeState.NONE);
+            latticeValues.add(escSet);
+            processRegister(result, escSet);
+        }
+    }
+
+    /**
+     * Determine the origin of a move result pseudo instruction that generates
+     * an object. Creates a new EscapeSet for the new object accordingly.
+     *
+     * @param insn {@code non-null;} move result pseudo instruction to process
+     * @return {@code non-null;} an EscapeSet for the object referred to by the
+     * move result pseudo instruction
+     */
+    private EscapeSet processMoveResultPseudoInsn(SsaInsn insn) {
+        RegisterSpec result = insn.getResult();
+        SsaInsn prevSsaInsn = getInsnForMove(insn);
+        int prevOpcode = prevSsaInsn.getOpcode().getOpcode();
+        EscapeSet escSet;
+        RegisterSpec prevSource;
+
+        switch(prevOpcode) {
+           // New instance / Constant
+            case RegOps.NEW_INSTANCE:
+            case RegOps.CONST:
+                escSet = new EscapeSet(result.getReg(), regCount,
+                                           EscapeState.NONE);
+                break;
+            // New array
+            case RegOps.NEW_ARRAY:
+            case RegOps.FILLED_NEW_ARRAY:
+                prevSource = prevSsaInsn.getSources().get(0);
+                if (prevSource.getTypeBearer().isConstant()) {
+                    // New fixed array
+                    escSet = new EscapeSet(result.getReg(), regCount,
+                                               EscapeState.NONE);
+                    escSet.replaceableArray = true;
+                } else {
+                    // New variable array
+                    escSet = new EscapeSet(result.getReg(), regCount,
+                                               EscapeState.GLOBAL);
+                }
+                break;
+            // Loading a static object
+            case RegOps.GET_STATIC:
+                escSet = new EscapeSet(result.getReg(), regCount,
+                                           EscapeState.GLOBAL);
+                break;
+            // Type cast / load an object from a field or array
+            case RegOps.CHECK_CAST:
+            case RegOps.GET_FIELD:
+            case RegOps.AGET:
+                prevSource = prevSsaInsn.getSources().get(0);
+                int setIndex = findSetIndex(prevSource);
+
+                // Set should already exist, try to find it
+                if (setIndex != latticeValues.size()) {
+                    escSet = latticeValues.get(setIndex);
+                    escSet.regSet.set(result.getReg());
+                    return escSet;
+                }
+
+                // Set not found, must be either null or unknown
+                if (prevSource.getType() == Type.KNOWN_NULL) {
+                    escSet = new EscapeSet(result.getReg(), regCount,
+                                               EscapeState.NONE);
+               } else {
+                    escSet = new EscapeSet(result.getReg(), regCount,
+                                               EscapeState.GLOBAL);
+                }
+                break;
+            default:
+                return null;
+        }
+
+        // Add the newly created escSet to the lattice and return it
+        latticeValues.add(escSet);
+        return escSet;
+    }
+
+    /**
+     * Iterate through all the uses of a new object.
+     *
+     * @param result {@code non-null;} register where new object is stored
+     * @param escSet {@code non-null;} EscapeSet for the new object
+     */
+    private void processRegister(RegisterSpec result, EscapeSet escSet) {
+        ArrayList<RegisterSpec> regWorklist = new ArrayList<RegisterSpec>();
+        regWorklist.add(result);
+
+        // Go through the worklist
+        while (!regWorklist.isEmpty()) {
+            int listSize = regWorklist.size() - 1;
+            RegisterSpec def = regWorklist.remove(listSize);
+            List<SsaInsn> useList = ssaMeth.getUseListForRegister(def.getReg());
+
+            // Handle all the uses of this register
+            for (SsaInsn use : useList) {
+                Rop useOpcode = use.getOpcode();
+
+                if (useOpcode == null) {
+                    // Handle phis
+                    processPhiUse(use, escSet, regWorklist);
+                } else {
+                    // Handle other opcodes
+                    processUse(def, use, escSet, regWorklist);
+                }
+            }
+        }
+    }
+
+    /**
+     * Handles phi uses of new objects. Will merge together the sources of a phi
+     * into a single EscapeSet. Adds the result of the phi to the worklist so
+     * its uses can be followed.
+     *
+     * @param use {@code non-null;} phi use being processed
+     * @param escSet {@code non-null;} EscapeSet for the object
+     * @param regWorklist {@code non-null;} worklist of instructions left to
+     * process for this object
+     */
+    private void processPhiUse(SsaInsn use, EscapeSet escSet,
+                                   ArrayList<RegisterSpec> regWorklist) {
+        int setIndex = findSetIndex(use.getResult());
+        if (setIndex != latticeValues.size()) {
+            // Check if result is in a set already
+            EscapeSet mergeSet = latticeValues.get(setIndex);
+            if (mergeSet != escSet) {
+                // If it is, merge the sets and states, then delete the copy
+                escSet.replaceableArray = false;
+                escSet.regSet.or(mergeSet.regSet);
+                if (escSet.escape.compareTo(mergeSet.escape) < 0) {
+                    escSet.escape = mergeSet.escape;
+                }
+                replaceNode(escSet, mergeSet);
+                latticeValues.remove(setIndex);
+            }
+        } else {
+            // If no set is found, add it to this escSet and the worklist
+            escSet.regSet.set(use.getResult().getReg());
+            regWorklist.add(use.getResult());
+        }
+    }
+
+    /**
+     * Handles non-phi uses of new objects. Checks to see how instruction is
+     * used and updates the escape state accordingly.
+     *
+     * @param def {@code non-null;} register holding definition of new object
+     * @param use {@code non-null;} use of object being processed
+     * @param escSet {@code non-null;} EscapeSet for the object
+     * @param regWorklist {@code non-null;} worklist of instructions left to
+     * process for this object
+     */
+    private void processUse(RegisterSpec def, SsaInsn use, EscapeSet escSet,
+                                ArrayList<RegisterSpec> regWorklist) {
+        int useOpcode = use.getOpcode().getOpcode();
+        switch (useOpcode) {
+            case RegOps.MOVE:
+                // Follow uses of the move by adding it to the worklist
+                escSet.regSet.set(use.getResult().getReg());
+                regWorklist.add(use.getResult());
+                break;
+            case RegOps.IF_EQ:
+            case RegOps.IF_NE:
+            case RegOps.CHECK_CAST:
+                // Compared objects can't be replaced, so promote if necessary
+                if (escSet.escape.compareTo(EscapeState.METHOD) < 0) {
+                    escSet.escape = EscapeState.METHOD;
+                }
+                break;
+            case RegOps.APUT:
+                // For array puts, check for a constant array index
+                RegisterSpec putIndex = use.getSources().get(2);
+                if (!putIndex.getTypeBearer().isConstant()) {
+                    // If not constant, array can't be replaced
+                    escSet.replaceableArray = false;
+                }
+                // Intentional fallthrough
+            case RegOps.PUT_FIELD:
+                // Skip non-object puts
+                RegisterSpec putValue = use.getSources().get(0);
+                if (putValue.getTypeBearer().getBasicType() != Type.BT_OBJECT) {
+                    break;
+                }
+                escSet.replaceableArray = false;
+
+                // Raise 1st object's escape state to 2nd if 2nd is higher
+                RegisterSpecList sources = use.getSources();
+                if (sources.get(0).getReg() == def.getReg()) {
+                    int setIndex = findSetIndex(sources.get(1));
+                    if (setIndex != latticeValues.size()) {
+                        EscapeSet parentSet = latticeValues.get(setIndex);
+                        addEdge(parentSet, escSet);
+                        if (escSet.escape.compareTo(parentSet.escape) < 0) {
+                            escSet.escape = parentSet.escape;
+                        }
+                    }
+                } else {
+                    int setIndex = findSetIndex(sources.get(0));
+                    if (setIndex != latticeValues.size()) {
+                        EscapeSet childSet = latticeValues.get(setIndex);
+                        addEdge(escSet, childSet);
+                        if (childSet.escape.compareTo(escSet.escape) < 0) {
+                            childSet.escape = escSet.escape;
+                        }
+                    }
+                }
+                break;
+            case RegOps.AGET:
+                // For array gets, check for a constant array index
+                RegisterSpec getIndex = use.getSources().get(1);
+                if (!getIndex.getTypeBearer().isConstant()) {
+                    // If not constant, array can't be replaced
+                    escSet.replaceableArray = false;
+                }
+                break;
+            case RegOps.PUT_STATIC:
+                // Static puts cause an object to escape globally
+                escSet.escape = EscapeState.GLOBAL;
+                break;
+            case RegOps.INVOKE_STATIC:
+            case RegOps.INVOKE_VIRTUAL:
+            case RegOps.INVOKE_SUPER:
+            case RegOps.INVOKE_DIRECT:
+            case RegOps.INVOKE_INTERFACE:
+            case RegOps.RETURN:
+            case RegOps.THROW:
+                // These operations cause an object to escape interprocedurally
+                escSet.escape = EscapeState.INTER;
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Performs scalar replacement on all eligible arrays.
+     */
+    private void scalarReplacement() {
+        // Iterate through lattice, looking for non-escaping replaceable arrays
+        for (EscapeSet escSet : latticeValues) {
+            if (!escSet.replaceableArray || escSet.escape != EscapeState.NONE) {
+                continue;
+            }
+
+            // Get the instructions for the definition and move of the array
+            int e = escSet.regSet.nextSetBit(0);
+            SsaInsn def = ssaMeth.getDefinitionForRegister(e);
+            SsaInsn prev = getInsnForMove(def);
+
+            // Create a map for the new registers that will be created
+            TypeBearer lengthReg = prev.getSources().get(0).getTypeBearer();
+            int length = ((CstLiteralBits) lengthReg).getIntBits();
+            ArrayList<RegisterSpec> newRegs =
+                new ArrayList<RegisterSpec>(length);
+            HashSet<SsaInsn> deletedInsns = new HashSet<SsaInsn>();
+
+            // Replace the definition of the array with registers
+            replaceDef(def, prev, length, newRegs);
+
+            // Mark definition instructions for deletion
+            deletedInsns.add(prev);
+            deletedInsns.add(def);
+
+            // Go through all uses of the array
+            List<SsaInsn> useList = ssaMeth.getUseListForRegister(e);
+            for (SsaInsn use : useList) {
+                // Replace the use with scalars and then mark it for deletion
+                replaceUse(use, prev, newRegs, deletedInsns);
+                deletedInsns.add(use);
+            }
+
+            // Delete all marked instructions
+            ssaMeth.deleteInsns(deletedInsns);
+            ssaMeth.onInsnsChanged();
+
+            // Convert the method back to SSA form
+            SsaConverter.updateSsaMethod(ssaMeth, regCount);
+
+            // Propagate and remove extra moves added by scalar replacement
+            movePropagate();
+        }
+    }
+
+    /**
+     * Replaces the instructions that define an array with equivalent registers.
+     * For each entry in the array, a register is created, initialized to zero.
+     * A mapping between this register and the corresponding array index is
+     * added.
+     *
+     * @param def {@code non-null;} move result instruction for array
+     * @param prev {@code non-null;} instruction for instantiating new array
+     * @param length size of the new array
+     * @param newRegs {@code non-null;} mapping of array indices to new
+     * registers to be populated
+     */
+    private void replaceDef(SsaInsn def, SsaInsn prev, int length,
+                                ArrayList<RegisterSpec> newRegs) {
+        Type resultType = def.getResult().getType();
+
+        // Create new zeroed out registers for each element in the array
+        for (int i = 0; i < length; i++) {
+            Constant newZero = Zeroes.zeroFor(resultType.getComponentType());
+            TypedConstant typedZero = (TypedConstant) newZero;
+            RegisterSpec newReg =
+                RegisterSpec.make(ssaMeth.makeNewSsaReg(), typedZero);
+            newRegs.add(newReg);
+            insertPlainInsnBefore(def, RegisterSpecList.EMPTY, newReg,
+                                      RegOps.CONST, newZero);
+        }
+    }
+
+    /**
+     * Replaces the use for a scalar replaceable array. Gets and puts become
+     * move instructions, and array lengths and fills are handled. Can also
+     * identify ArrayIndexOutOfBounds exceptions and throw them if detected.
+     *
+     * @param use {@code non-null;} move result instruction for array
+     * @param prev {@code non-null;} instruction for instantiating new array
+     * @param newRegs {@code non-null;} mapping of array indices to new
+     * registers
+     * @param deletedInsns {@code non-null;} set of instructions marked for
+     * deletion
+     */
+    private void replaceUse(SsaInsn use, SsaInsn prev,
+                                ArrayList<RegisterSpec> newRegs,
+                                HashSet<SsaInsn> deletedInsns) {
+        int index;
+        int length = newRegs.size();
+        SsaInsn next;
+        RegisterSpecList sources;
+        RegisterSpec source, result;
+        CstLiteralBits indexReg;
+
+        switch (use.getOpcode().getOpcode()) {
+            case RegOps.AGET:
+                // Replace array gets with moves
+                next = getMoveForInsn(use);
+                sources = use.getSources();
+                indexReg = ((CstLiteralBits) sources.get(1).getTypeBearer());
+                index = indexReg.getIntBits();
+                if (index < length) {
+                    source = newRegs.get(index);
+                    result = source.withReg(next.getResult().getReg());
+                    insertPlainInsnBefore(next, RegisterSpecList.make(source),
+                                              result, RegOps.MOVE, null);
+                } else {
+                    // Throw an exception if the index is out of bounds
+                    insertExceptionThrow(next, sources.get(1), deletedInsns);
+                    deletedInsns.add(next.getBlock().getInsns().get(2));
+                }
+                deletedInsns.add(next);
+                break;
+            case RegOps.APUT:
+                // Replace array puts with moves
+                sources = use.getSources();
+                indexReg = ((CstLiteralBits) sources.get(2).getTypeBearer());
+                index = indexReg.getIntBits();
+                if (index < length) {
+                    source = sources.get(0);
+                    result = source.withReg(newRegs.get(index).getReg());
+                    insertPlainInsnBefore(use, RegisterSpecList.make(source),
+                                              result, RegOps.MOVE, null);
+                    // Update the newReg entry to mark value as unknown now
+                    newRegs.set(index, result.withSimpleType());
+                } else {
+                    // Throw an exception if the index is out of bounds
+                    insertExceptionThrow(use, sources.get(2), deletedInsns);
+                }
+                break;
+            case RegOps.ARRAY_LENGTH:
+                // Replace array lengths with const instructions
+                TypeBearer lengthReg = prev.getSources().get(0).getTypeBearer();
+                //CstInteger lengthReg = CstInteger.make(length);
+                next = getMoveForInsn(use);
+                insertPlainInsnBefore(next, RegisterSpecList.EMPTY,
+                                          next.getResult(), RegOps.CONST,
+                                          (Constant) lengthReg);
+                deletedInsns.add(next);
+                break;
+            case RegOps.MARK_LOCAL:
+                // Remove mark local instructions
+                break;
+            case RegOps.FILL_ARRAY_DATA:
+                // Create const instructions for each fill value
+                Insn ropUse = use.getOriginalRopInsn();
+                FillArrayDataInsn fill = (FillArrayDataInsn) ropUse;
+                ArrayList<Constant> constList = fill.getInitValues();
+                for (int i = 0; i < length; i++) {
+                    RegisterSpec newFill =
+                        RegisterSpec.make(newRegs.get(i).getReg(),
+                                              (TypeBearer) constList.get(i));
+                    insertPlainInsnBefore(use, RegisterSpecList.EMPTY, newFill,
+                                              RegOps.CONST, constList.get(i));
+                    // Update the newRegs to hold the new const value
+                    newRegs.set(i, newFill);
+                }
+                break;
+            default:
+        }
+    }
+
+    /**
+     * Identifies extra moves added by scalar replacement and propagates the
+     * source of the move to any users of the result.
+     */
+    private void movePropagate() {
+        for (int i = 0; i < ssaMeth.getRegCount(); i++) {
+            SsaInsn insn = ssaMeth.getDefinitionForRegister(i);
+
+            // Look for move instructions only
+            if (insn == null || insn.getOpcode() == null ||
+                insn.getOpcode().getOpcode() != RegOps.MOVE) {
+                continue;
+            }
+
+            final ArrayList<SsaInsn>[] useList = ssaMeth.getUseListCopy();
+            final RegisterSpec source = insn.getSources().get(0);
+            final RegisterSpec result = insn.getResult();
+
+            // Ignore moves that weren't added due to scalar replacement
+            if (source.getReg() < regCount && result.getReg() < regCount) {
+                continue;
+            }
+
+            // Create a mapping from source to result
+            RegisterMapper mapper = new RegisterMapper() {
+                @Override
+                public int getNewRegisterCount() {
+                    return ssaMeth.getRegCount();
+                }
+
+                @Override
+                public RegisterSpec map(RegisterSpec registerSpec) {
+                    if (registerSpec.getReg() == result.getReg()) {
+                        return source;
+                    }
+
+                    return registerSpec;
+                }
+            };
+
+            // Modify all uses of the move to use the source of the move instead
+            for (SsaInsn use : useList[result.getReg()]) {
+                use.mapSourceRegisters(mapper);
+            }
+        }
+    }
+
+    /**
+     * Runs escape analysis and scalar replacement of arrays.
+     */
+    private void run() {
+        ssaMeth.forEachBlockDepthFirstDom(new SsaBasicBlock.Visitor() {
+            @Override
+            public void visitBlock (SsaBasicBlock block,
+                    SsaBasicBlock unused) {
+                block.forEachInsn(new SsaInsn.Visitor() {
+                    @Override
+                    public void visitMoveInsn(NormalSsaInsn insn) {
+                        // do nothing
+                    }
+
+                    @Override
+                    public void visitPhiInsn(PhiInsn insn) {
+                        // do nothing
+                    }
+
+                    @Override
+                    public void visitNonMoveInsn(NormalSsaInsn insn) {
+                        processInsn(insn);
+                    }
+                });
+            }
+        });
+
+        // Go through lattice and promote fieldSets as necessary
+        for (EscapeSet e : latticeValues) {
+            if (e.escape != EscapeState.NONE) {
+                for (EscapeSet field : e.childSets) {
+                    if (e.escape.compareTo(field.escape) > 0) {
+                        field.escape = e.escape;
+                    }
+                }
+            }
+        }
+
+        // Perform scalar replacement for arrays
+        scalarReplacement();
+    }
+
+    /**
+     * Replaces instructions that trigger an ArrayIndexOutofBounds exception
+     * with an actual throw of the exception.
+     *
+     * @param insn {@code non-null;} instruction causing the exception
+     * @param index {@code non-null;} index value that is out of bounds
+     * @param deletedInsns {@code non-null;} set of instructions marked for
+     * deletion
+     */
+    private void insertExceptionThrow(SsaInsn insn, RegisterSpec index,
+                                          HashSet<SsaInsn> deletedInsns) {
+        // Create a new ArrayIndexOutOfBoundsException
+        CstType exception =
+            new CstType(Exceptions.TYPE_ArrayIndexOutOfBoundsException);
+        insertThrowingInsnBefore(insn, RegisterSpecList.EMPTY, null,
+                                     RegOps.NEW_INSTANCE, exception);
+
+        // Add a successor block with a move result pseudo for the exception
+        SsaBasicBlock currBlock = insn.getBlock();
+        SsaBasicBlock newBlock =
+            currBlock.insertNewSuccessor(currBlock.getPrimarySuccessor());
+        SsaInsn newInsn = newBlock.getInsns().get(0);
+        RegisterSpec newReg =
+            RegisterSpec.make(ssaMeth.makeNewSsaReg(), exception);
+        insertPlainInsnBefore(newInsn, RegisterSpecList.EMPTY, newReg,
+                                  RegOps.MOVE_RESULT_PSEUDO, null);
+
+        // Add another successor block to initialize the exception
+        SsaBasicBlock newBlock2 =
+            newBlock.insertNewSuccessor(newBlock.getPrimarySuccessor());
+        SsaInsn newInsn2 = newBlock2.getInsns().get(0);
+        CstNat newNat = new CstNat(new CstString("<init>"), new CstString("(I)V"));
+        CstMethodRef newRef = new CstMethodRef(exception, newNat);
+        insertThrowingInsnBefore(newInsn2, RegisterSpecList.make(newReg, index),
+                                     null, RegOps.INVOKE_DIRECT, newRef);
+        deletedInsns.add(newInsn2);
+
+        // Add another successor block to throw the new exception
+        SsaBasicBlock newBlock3 =
+            newBlock2.insertNewSuccessor(newBlock2.getPrimarySuccessor());
+        SsaInsn newInsn3 = newBlock3.getInsns().get(0);
+        insertThrowingInsnBefore(newInsn3, RegisterSpecList.make(newReg), null,
+                                     RegOps.THROW, null);
+        newBlock3.replaceSuccessor(newBlock3.getPrimarySuccessorIndex(),
+                                       ssaMeth.getExitBlock().getIndex());
+        deletedInsns.add(newInsn3);
+    }
+
+    /**
+     * Inserts a new PlainInsn before the given instruction.
+     * TODO: move this somewhere more appropriate
+     *
+     * @param insn {@code non-null;} instruction to insert before
+     * @param newSources {@code non-null;} sources of new instruction
+     * @param newResult {@code non-null;} result of new instruction
+     * @param newOpcode opcode of new instruction
+     * @param cst {@code null-ok;} constant for new instruction, if any
+     */
+    private void insertPlainInsnBefore(SsaInsn insn,
+        RegisterSpecList newSources, RegisterSpec newResult, int newOpcode,
+        Constant cst) {
+
+        Insn originalRopInsn = insn.getOriginalRopInsn();
+        Rop newRop;
+        if (newOpcode == RegOps.MOVE_RESULT_PSEUDO) {
+            newRop = Rops.opMoveResultPseudo(newResult.getType());
+        } else {
+            newRop = Rops.ropFor(newOpcode, newResult, newSources, cst);
+        }
+
+        Insn newRopInsn;
+        if (cst == null) {
+            newRopInsn = new PlainInsn(newRop,
+                    originalRopInsn.getPosition(), newResult, newSources);
+        } else {
+            newRopInsn = new PlainCstInsn(newRop,
+                originalRopInsn.getPosition(), newResult, newSources, cst);
+        }
+
+        NormalSsaInsn newInsn = new NormalSsaInsn(newRopInsn, insn.getBlock());
+        List<SsaInsn> insns = insn.getBlock().getInsns();
+
+        insns.add(insns.lastIndexOf(insn), newInsn);
+        ssaMeth.onInsnAdded(newInsn);
+    }
+
+    /**
+     * Inserts a new ThrowingInsn before the given instruction.
+     * TODO: move this somewhere more appropriate
+     *
+     * @param insn {@code non-null;} instruction to insert before
+     * @param newSources {@code non-null;} sources of new instruction
+     * @param newResult {@code non-null;} result of new instruction
+     * @param newOpcode opcode of new instruction
+     * @param cst {@code null-ok;} constant for new instruction, if any
+     */
+    private void insertThrowingInsnBefore(SsaInsn insn,
+        RegisterSpecList newSources, RegisterSpec newResult, int newOpcode,
+        Constant cst) {
+
+        Insn origRopInsn = insn.getOriginalRopInsn();
+        Rop newRop = Rops.ropFor(newOpcode, newResult, newSources, cst);
+        Insn newRopInsn;
+        if (cst == null) {
+            newRopInsn = new ThrowingInsn(newRop,
+                origRopInsn.getPosition(), newSources, StdTypeList.EMPTY);
+        } else {
+            newRopInsn = new ThrowingCstInsn(newRop,
+                origRopInsn.getPosition(), newSources, StdTypeList.EMPTY, cst);
+        }
+
+        NormalSsaInsn newInsn = new NormalSsaInsn(newRopInsn, insn.getBlock());
+        List<SsaInsn> insns = insn.getBlock().getInsns();
+
+        insns.add(insns.lastIndexOf(insn), newInsn);
+        ssaMeth.onInsnAdded(newInsn);
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/InterferenceRegisterMapper.java b/dx/src/com/android/dx/ssa/InterferenceRegisterMapper.java
new file mode 100644
index 0000000..446888d
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/InterferenceRegisterMapper.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.ssa.back.InterferenceGraph;
+import com.android.dx.util.BitIntSet;
+import com.android.dx.util.IntSet;
+import java.util.ArrayList;
+
+/**
+ * A register mapper that keeps track of the accumulated interference
+ * information for the registers in the new namespace.
+ *
+ * Please note that this mapper requires that the old namespace does not
+ * have variable register widths/categories, and the new namespace does.
+ */
+public class InterferenceRegisterMapper extends BasicRegisterMapper {
+    /**
+     * Array of interference sets. ArrayList is indexed by new namespace
+     * and BitIntSet's are indexed by old namespace.  The list expands
+     * as needed and missing items are assumed to interfere with nothing.
+     *
+     * Bit sets are always used here, unlike elsewhere, because the max
+     * size of this matrix will be (countSsaRegs * countRopRegs), which may
+     * grow to hundreds of K but not megabytes.
+     */
+    private final ArrayList<BitIntSet> newRegInterference;
+
+    /** the interference graph for the old namespace */
+    private final InterferenceGraph oldRegInterference;
+
+    /**
+     * Constructs an instance
+     *
+     * @param countOldRegisters number of registers in old namespace
+     */
+    public InterferenceRegisterMapper(InterferenceGraph oldRegInterference,
+            int countOldRegisters) {
+        super(countOldRegisters);
+
+        newRegInterference = new ArrayList<BitIntSet>();
+        this.oldRegInterference = oldRegInterference;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void addMapping(int oldReg, int newReg, int category) {
+        super.addMapping(oldReg, newReg, category);
+
+        addInterfence(newReg, oldReg);
+
+        if (category == 2) {
+            addInterfence(newReg + 1, oldReg);
+        }
+    }
+
+    /**
+     * Checks to see if old namespace reg {@code oldReg} interferes
+     * with what currently maps to {@code newReg}.
+     *
+     * @param oldReg old namespace register
+     * @param newReg new namespace register
+     * @param category category of old namespace register
+     * @return true if oldReg will interfere with newReg
+     */
+    public boolean interferes(int oldReg, int newReg, int category) {
+        if (newReg >= newRegInterference.size()) {
+            return false;
+        } else {
+            IntSet existing = newRegInterference.get(newReg);
+
+            if (existing == null) {
+                return false;
+            } else if (category == 1) {
+                return existing.has(oldReg);
+            } else {
+                return existing.has(oldReg)
+                        || (interferes(oldReg, newReg+1, category-1));
+            }
+        }
+    }
+
+    /**
+     * Checks to see if old namespace reg {@code oldReg} interferes
+     * with what currently maps to {@code newReg}.
+     *
+     * @param oldSpec {@code non-null;} old namespace register
+     * @param newReg new namespace register
+     * @return true if oldReg will interfere with newReg
+     */
+    public boolean interferes(RegisterSpec oldSpec, int newReg) {
+        return interferes(oldSpec.getReg(), newReg, oldSpec.getCategory());
+    }
+
+    /**
+     * Adds a register's interference set to the interference list,
+     * growing it if necessary.
+     *
+     * @param newReg register in new namespace
+     * @param oldReg register in old namespace
+     */
+    private void addInterfence(int newReg, int oldReg) {
+        newRegInterference.ensureCapacity(newReg + 1);
+
+        while (newReg >= newRegInterference.size()) {
+            newRegInterference.add(new BitIntSet(newReg +1));
+        }
+
+        oldRegInterference.mergeInterferenceSet(
+                oldReg, newRegInterference.get(newReg));
+    }
+
+    /**
+     * Checks to see if any of a set of old-namespace registers are
+     * pinned to the specified new-namespace reg + category. Takes into
+     * account the category of the old-namespace registers.
+     *
+     * @param oldSpecs {@code non-null;} set of old-namespace regs
+     * @param newReg {@code >= 0;} new-namespace register
+     * @param targetCategory {@code 1..2;} the number of adjacent new-namespace
+     * registers (starting at ropReg) to consider
+     * @return true if any of the old-namespace register have been mapped
+     * to the new-namespace register + category
+     */
+    public boolean areAnyPinned(RegisterSpecList oldSpecs,
+            int newReg, int targetCategory) {
+        int sz = oldSpecs.size();
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec oldSpec = oldSpecs.get(i);
+            int r = oldToNew(oldSpec.getReg());
+
+            /*
+             * If oldSpec is a category-2 register, then check both newReg
+             * and newReg - 1.
+             */
+            if (r == newReg
+                || (oldSpec.getCategory() == 2 && (r + 1) == newReg)
+                || (targetCategory == 2 && (r == newReg + 1))) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/LiteralOpUpgrader.java b/dx/src/com/android/dx/ssa/LiteralOpUpgrader.java
new file mode 100644
index 0000000..9024c8b
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/LiteralOpUpgrader.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.PlainCstInsn;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstLiteralBits;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Upgrades insn to their literal (constant-immediate) equivalent if possible.
+ * Also switches IF instructions that compare with a constant zero or null
+ * to be their IF_*Z equivalents.
+ */
+public class LiteralOpUpgrader {
+
+    /** method we're processing */
+    private final SsaMethod ssaMeth;
+
+    /**
+     * Process a method.
+     *
+     * @param ssaMethod {@code non-null;} method to process
+     */
+    public static void process(SsaMethod ssaMethod) {
+        LiteralOpUpgrader dc;
+
+        dc = new LiteralOpUpgrader(ssaMethod);
+
+        dc.run();
+    }
+
+    private LiteralOpUpgrader(SsaMethod ssaMethod) {
+        this.ssaMeth = ssaMethod;
+    }
+
+    /**
+     * Returns true if the register contains an integer 0 or a known-null
+     * object reference
+     *
+     * @param spec non-null spec
+     * @return true for 0 or null type bearers
+     */
+    private static boolean isConstIntZeroOrKnownNull(RegisterSpec spec) {
+        TypeBearer tb = spec.getTypeBearer();
+        if (tb instanceof CstLiteralBits) {
+            CstLiteralBits clb = (CstLiteralBits) tb;
+            return (clb.getLongBits() == 0);
+        }
+        return false;
+    }
+
+    /**
+     * Run the literal op upgrader
+     */
+    private void run() {
+        final TranslationAdvice advice = Optimizer.getAdvice();
+
+        ssaMeth.forEachInsn(new SsaInsn.Visitor() {
+            @Override
+            public void visitMoveInsn(NormalSsaInsn insn) {
+                // do nothing
+            }
+
+            @Override
+            public void visitPhiInsn(PhiInsn insn) {
+                // do nothing
+            }
+
+            @Override
+            public void visitNonMoveInsn(NormalSsaInsn insn) {
+
+                Insn originalRopInsn = insn.getOriginalRopInsn();
+                Rop opcode = originalRopInsn.getOpcode();
+                RegisterSpecList sources = insn.getSources();
+
+                // Replace insns with constant results with const insns
+                if (tryReplacingWithConstant(insn)) return;
+
+                if (sources.size() != 2 ) {
+                    // We're only dealing with two-source insns here.
+                    return;
+                }
+
+                if (opcode.getBranchingness() == Rop.BRANCH_IF) {
+                    /*
+                     * An if instruction can become an if-*z instruction.
+                     */
+                    if (isConstIntZeroOrKnownNull(sources.get(0))) {
+                        replacePlainInsn(insn, sources.withoutFirst(),
+                              RegOps.flippedIfOpcode(opcode.getOpcode()), null);
+                    } else if (isConstIntZeroOrKnownNull(sources.get(1))) {
+                        replacePlainInsn(insn, sources.withoutLast(),
+                              opcode.getOpcode(), null);
+                    }
+                } else if (advice.hasConstantOperation(
+                        opcode, sources.get(0), sources.get(1))) {
+                    insn.upgradeToLiteral();
+                } else  if (opcode.isCommutative()
+                        && advice.hasConstantOperation(
+                        opcode, sources.get(1), sources.get(0))) {
+                    /*
+                     * An instruction can be commuted to a literal operation
+                     */
+
+                    insn.setNewSources(
+                            RegisterSpecList.make(
+                                    sources.get(1), sources.get(0)));
+
+                    insn.upgradeToLiteral();
+                }
+            }
+        });
+    }
+
+    /**
+     * Tries to replace an instruction with a const instruction. The given
+     * instruction must have a constant result for it to be replaced.
+     *
+     * @param insn {@code non-null;} instruction to try to replace
+     * @return true if the instruction was replaced
+     */
+    private boolean tryReplacingWithConstant(NormalSsaInsn insn) {
+        Insn originalRopInsn = insn.getOriginalRopInsn();
+        Rop opcode = originalRopInsn.getOpcode();
+        RegisterSpec result = insn.getResult();
+
+        if (result != null && !ssaMeth.isRegALocal(result) &&
+                opcode.getOpcode() != RegOps.CONST) {
+            TypeBearer type = insn.getResult().getTypeBearer();
+            if (type.isConstant() && type.getBasicType() == Type.BT_INT) {
+                // Replace the instruction with a constant
+                replacePlainInsn(insn, RegisterSpecList.EMPTY,
+                        RegOps.CONST, (Constant) type);
+
+                // Remove the source as well if this is a move-result-pseudo
+                if (opcode.getOpcode() == RegOps.MOVE_RESULT_PSEUDO) {
+                    int pred = insn.getBlock().getPredecessors().nextSetBit(0);
+                    ArrayList<SsaInsn> predInsns =
+                            ssaMeth.getBlocks().get(pred).getInsns();
+                    NormalSsaInsn sourceInsn =
+                            (NormalSsaInsn) predInsns.get(predInsns.size()-1);
+                    replacePlainInsn(sourceInsn, RegisterSpecList.EMPTY,
+                            RegOps.GOTO, null);
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Replaces an SsaInsn containing a PlainInsn with a new PlainInsn. The
+     * new PlainInsn is constructed with a new RegOp and new sources.
+     *
+     * TODO move this somewhere else.
+     *
+     * @param insn {@code non-null;} an SsaInsn containing a PlainInsn
+     * @param newSources {@code non-null;} new sources list for new insn
+     * @param newOpcode A RegOp from {@link RegOps}
+     * @param cst {@code null-ok;} constant for new instruction, if any
+     */
+    private void replacePlainInsn(NormalSsaInsn insn,
+            RegisterSpecList newSources, int newOpcode, Constant cst) {
+
+        Insn originalRopInsn = insn.getOriginalRopInsn();
+        Rop newRop = Rops.ropFor(newOpcode, insn.getResult(), newSources, cst);
+        Insn newRopInsn;
+        if (cst == null) {
+            newRopInsn = new PlainInsn(newRop, originalRopInsn.getPosition(),
+                    insn.getResult(), newSources);
+        } else {
+            newRopInsn = new PlainCstInsn(newRop, originalRopInsn.getPosition(),
+                    insn.getResult(), newSources, cst);
+        }
+        NormalSsaInsn newInsn = new NormalSsaInsn(newRopInsn, insn.getBlock());
+
+        List<SsaInsn> insns = insn.getBlock().getInsns();
+
+        ssaMeth.onInsnRemoved(insn);
+        insns.set(insns.lastIndexOf(insn), newInsn);
+        ssaMeth.onInsnAdded(newInsn);
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/LocalVariableExtractor.java b/dx/src/com/android/dx/ssa/LocalVariableExtractor.java
new file mode 100644
index 0000000..b86bed6
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/LocalVariableExtractor.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecSet;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.List;
+
+/**
+ * Code to figure out which local variables are active at which points in
+ * a method. Stolen and retrofitted from
+ * com.android.dx.rop.code.LocalVariableExtractor
+ *
+ * TODO remove this. Allow Rop-form LocalVariableInfo to be passed in,
+ * converted, and adapted through edge-splitting.
+ */
+public class LocalVariableExtractor {
+    /** {@code non-null;} method being extracted from */
+    private final SsaMethod method;
+
+    /** {@code non-null;} block list for the method */
+    private final ArrayList<SsaBasicBlock> blocks;
+
+    /** {@code non-null;} result in-progress */
+    private final LocalVariableInfo resultInfo;
+
+    /** {@code non-null;} work set indicating blocks needing to be processed */
+    private final BitSet workSet;
+
+    /**
+     * Extracts out all the local variable information from the given method.
+     *
+     * @param method {@code non-null;} the method to extract from
+     * @return {@code non-null;} the extracted information
+     */
+    public static LocalVariableInfo extract(SsaMethod method) {
+        LocalVariableExtractor lve = new LocalVariableExtractor(method);
+        return lve.doit();
+    }
+
+    /**
+     * Constructs an instance. This method is private. Use {@link #extract}.
+     *
+     * @param method {@code non-null;} the method to extract from
+     */
+    private LocalVariableExtractor(SsaMethod method) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        ArrayList<SsaBasicBlock> blocks = method.getBlocks();
+
+        this.method = method;
+        this.blocks = blocks;
+        this.resultInfo = new LocalVariableInfo(method);
+        this.workSet = new BitSet(blocks.size());
+    }
+
+    /**
+     * Does the extraction.
+     *
+     * @return {@code non-null;} the extracted information
+     */
+    private LocalVariableInfo doit() {
+
+        //FIXME why is this needed here?
+        if (method.getRegCount() > 0 ) {
+            for (int bi = method.getEntryBlockIndex();
+                 bi >= 0;
+                 bi = workSet.nextSetBit(0)) {
+                workSet.clear(bi);
+                processBlock(bi);
+            }
+        }
+
+        resultInfo.setImmutable();
+        return resultInfo;
+    }
+
+    /**
+     * Processes a single block.
+     *
+     * @param blockIndex {@code >= 0;} block index of the block to process
+     */
+    private void processBlock(int blockIndex) {
+        RegisterSpecSet primaryState
+                = resultInfo.mutableCopyOfStarts(blockIndex);
+        SsaBasicBlock block = blocks.get(blockIndex);
+        List<SsaInsn> insns = block.getInsns();
+        int insnSz = insns.size();
+
+        // The exit block has no insns and no successors
+        if (blockIndex == method.getExitBlockIndex()) {
+            return;
+        }
+
+        /*
+         * We may have to treat the last instruction specially: If it
+         * can (but doesn't always) throw, and the exception can be
+         * caught within the same method, then we need to use the
+         * state *before* executing it to be what is merged into
+         * exception targets.
+         */
+        SsaInsn lastInsn = insns.get(insnSz - 1);
+        boolean hasExceptionHandlers
+                = lastInsn.getOriginalRopInsn().getCatches().size() !=0 ;
+        boolean canThrowDuringLastInsn = hasExceptionHandlers
+                && (lastInsn.getResult() != null);
+        int freezeSecondaryStateAt = insnSz - 1;
+        RegisterSpecSet secondaryState = primaryState;
+
+        /*
+         * Iterate over the instructions, adding information for each place
+         * that the active variable set changes.
+         */
+
+        for (int i = 0; i < insnSz; i++) {
+            if (canThrowDuringLastInsn && (i == freezeSecondaryStateAt)) {
+                // Until this point, primaryState == secondaryState.
+                primaryState.setImmutable();
+                primaryState = primaryState.mutableCopy();
+            }
+
+            SsaInsn insn = insns.get(i);
+            RegisterSpec result;
+
+            result = insn.getLocalAssignment();
+
+            if (result == null) {
+                // We may be nuking an existing local
+
+                result = insn.getResult();
+
+                if (result != null && primaryState.get(result.getReg()) != null) {
+                    primaryState.remove(primaryState.get(result.getReg()));
+                }
+                continue;
+            }
+
+            result = result.withSimpleType();
+
+            RegisterSpec already = primaryState.get(result);
+            /*
+             * The equals() check ensures we only add new info if
+             * the instruction causes a change to the set of
+             * active variables.
+             */
+            if (!result.equals(already)) {
+                /*
+                 * If this insn represents a local moving from one register
+                 * to another, remove the association between the old register
+                 * and the local.
+                 */
+                RegisterSpec previous
+                        = primaryState.localItemToSpec(result.getLocalItem());
+
+                if (previous != null
+                        && (previous.getReg() != result.getReg())) {
+
+                    primaryState.remove(previous);
+                }
+
+                resultInfo.addAssignment(insn, result);
+                primaryState.put(result);
+            }
+        }
+
+        primaryState.setImmutable();
+
+        /*
+         * Merge this state into the start state for each successor,
+         * and update the work set where required (that is, in cases
+         * where the start state for a block changes).
+         */
+
+        IntList successors = block.getSuccessorList();
+        int succSz = successors.size();
+        int primarySuccessor = block.getPrimarySuccessorIndex();
+
+        for (int i = 0; i < succSz; i++) {
+            int succ = successors.get(i);
+            RegisterSpecSet state = (succ == primarySuccessor) ?
+                primaryState : secondaryState;
+
+            if (resultInfo.mergeStarts(succ, state)) {
+                workSet.set(succ);
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/LocalVariableInfo.java b/dx/src/com/android/dx/ssa/LocalVariableInfo.java
new file mode 100644
index 0000000..1520531
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/LocalVariableInfo.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecSet;
+import com.android.dx.util.MutabilityControl;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Container for local variable information for a particular {@link
+ * com.android.dx.ssa.SsaMethod}.
+ * Stolen from {@link com.android.dx.rop.code.LocalVariableInfo}.
+ */
+public class LocalVariableInfo         extends MutabilityControl {
+    /** {@code >= 0;} the register count for the method */
+    private final int regCount;
+
+    /**
+     * {@code non-null;} {@link com.android.dx.rop.code.RegisterSpecSet} to use when indicating a block
+     * that has no locals; it is empty and immutable but has an appropriate
+     * max size for the method
+     */
+    private final RegisterSpecSet emptySet;
+
+    /**
+     * {@code non-null;} array consisting of register sets representing the
+     * sets of variables already assigned upon entry to each block,
+     * where array indices correspond to block indices
+     */
+    private final RegisterSpecSet[] blockStarts;
+
+    /** {@code non-null;} map from instructions to the variable each assigns */
+    private final HashMap<SsaInsn, RegisterSpec> insnAssignments;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param method {@code non-null;} the method being represented by this instance
+     */
+    public LocalVariableInfo(SsaMethod method) {
+        if (method == null) {
+            throw new NullPointerException("method == null");
+        }
+
+        List<SsaBasicBlock> blocks = method.getBlocks();
+
+        this.regCount = method.getRegCount();
+        this.emptySet = new RegisterSpecSet(regCount);
+        this.blockStarts = new RegisterSpecSet[blocks.size()];
+        this.insnAssignments =
+            new HashMap<SsaInsn, RegisterSpec>(/*hint here*/);
+
+        emptySet.setImmutable();
+    }
+
+    /**
+     * Sets the register set associated with the start of the block with
+     * the given index.
+     *
+     * @param index {@code >= 0;} the block index
+     * @param specs {@code non-null;} the register set to associate with the block
+     */
+    public void setStarts(int index, RegisterSpecSet specs) {
+        throwIfImmutable();
+
+        if (specs == null) {
+            throw new NullPointerException("specs == null");
+        }
+
+        try {
+            blockStarts[index] = specs;
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("bogus index");
+        }
+    }
+
+    /**
+     * Merges the given register set into the set for the block with the
+     * given index. If there was not already an associated set, then this
+     * is the same as calling {@link #setStarts}. Otherwise, this will
+     * merge the two sets and call {@link #setStarts} on the result of the
+     * merge.
+     *
+     * @param index {@code >= 0;} the block index
+     * @param specs {@code non-null;} the register set to merge into the start set
+     * for the block
+     * @return {@code true} if the merge resulted in an actual change
+     * to the associated set (including storing one for the first time) or
+     * {@code false} if there was no change
+     */
+    public boolean mergeStarts(int index, RegisterSpecSet specs) {
+        RegisterSpecSet start = getStarts0(index);
+        boolean changed = false;
+
+        if (start == null) {
+            setStarts(index, specs);
+            return true;
+        }
+
+        RegisterSpecSet newStart = start.mutableCopy();
+        newStart.intersect(specs, true);
+
+        if (start.equals(newStart)) {
+            return false;
+        }
+
+        newStart.setImmutable();
+        setStarts(index, newStart);
+
+        return true;
+    }
+
+    /**
+     * Gets the register set associated with the start of the block
+     * with the given index. This returns an empty set with the appropriate
+     * max size if no set was associated with the block in question.
+     *
+     * @param index {@code >= 0;} the block index
+     * @return {@code non-null;} the associated register set
+     */
+    public RegisterSpecSet getStarts(int index) {
+        RegisterSpecSet result = getStarts0(index);
+
+        return (result != null) ? result : emptySet;
+    }
+
+    /**
+     * Gets the register set associated with the start of the given
+     * block. This is just convenient shorthand for
+     * {@code getStarts(block.getLabel())}.
+     *
+     * @param block {@code non-null;} the block in question
+     * @return {@code non-null;} the associated register set
+     */
+    public RegisterSpecSet getStarts(SsaBasicBlock block) {
+        return getStarts(block.getIndex());
+    }
+
+    /**
+     * Gets a mutable copy of the register set associated with the
+     * start of the block with the given index. This returns a
+     * newly-allocated empty {@link RegisterSpecSet} of appropriate
+     * max size if there is not yet any set associated with the block.
+     *
+     * @param index {@code >= 0;} the block index
+     * @return {@code non-null;} the associated register set
+     */
+    public RegisterSpecSet mutableCopyOfStarts(int index) {
+        RegisterSpecSet result = getStarts0(index);
+
+        return (result != null) ?
+            result.mutableCopy() : new RegisterSpecSet(regCount);
+    }
+
+    /**
+     * Adds an assignment association for the given instruction and
+     * register spec. This throws an exception if the instruction
+     * doesn't actually perform a named variable assignment.
+     *
+     * <b>Note:</b> Although the instruction contains its own spec for
+     * the result, it still needs to be passed in explicitly to this
+     * method, since the spec that is stored here should always have a
+     * simple type and the one in the instruction can be an arbitrary
+     * {@link com.android.dx.rop.type.TypeBearer} (such as a constant value).
+     *
+     * @param insn {@code non-null;} the instruction in question
+     * @param spec {@code non-null;} the associated register spec
+     */
+    public void addAssignment(SsaInsn insn, RegisterSpec spec) {
+        throwIfImmutable();
+
+        if (insn == null) {
+            throw new NullPointerException("insn == null");
+        }
+
+        if (spec == null) {
+            throw new NullPointerException("spec == null");
+        }
+
+        insnAssignments.put(insn, spec);
+    }
+
+    /**
+     * Gets the named register being assigned by the given instruction, if
+     * previously stored in this instance.
+     *
+     * @param insn {@code non-null;} instruction in question
+     * @return {@code null-ok;} the named register being assigned, if any
+     */
+    public RegisterSpec getAssignment(SsaInsn insn) {
+        return insnAssignments.get(insn);
+    }
+
+    /**
+     * Gets the number of assignments recorded by this instance.
+     *
+     * @return {@code >= 0;} the number of assignments
+     */
+    public int getAssignmentCount() {
+        return insnAssignments.size();
+    }
+
+    public void debugDump() {
+        for (int index = 0 ; index < blockStarts.length; index++) {
+            if (blockStarts[index] == null) {
+                continue;
+            }
+
+            if (blockStarts[index] == emptySet) {
+                System.out.printf("%04x: empty set\n", index);
+            } else {
+                System.out.printf("%04x: %s\n", index, blockStarts[index]);
+            }
+        }
+    }
+
+    /**
+     * Helper method, to get the starts for a index, throwing the
+     * right exception for range problems.
+     *
+     * @param index {@code >= 0;} the block index
+     * @return {@code null-ok;} associated register set or {@code null} if there
+     * is none
+     */
+    private RegisterSpecSet getStarts0(int index) {
+        try {
+            return blockStarts[index];
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("bogus index");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/MoveParamCombiner.java b/dx/src/com/android/dx/ssa/MoveParamCombiner.java
new file mode 100644
index 0000000..c8c6def
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/MoveParamCombiner.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.CstInsn;
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.cst.CstInteger;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * Combine identical move-param insns, which may result from Ropper's
+ * handling of synchronized methods.
+ */
+public class MoveParamCombiner {
+
+    /** method to process */
+    private final SsaMethod ssaMeth;
+
+    /**
+     * Processes a method with this optimization step.
+     *
+     * @param ssaMethod method to process
+     */
+    public static void process(SsaMethod ssaMethod) {
+        new MoveParamCombiner(ssaMethod).run();
+    }
+
+    private MoveParamCombiner(SsaMethod ssaMeth) {
+        this.ssaMeth = ssaMeth;
+    }
+
+    /**
+     * Runs this optimization step.
+     */
+    private void run() {
+        // This will contain the definition specs for each parameter
+        final RegisterSpec[] paramSpecs
+                = new RegisterSpec[ssaMeth.getParamWidth()];
+
+        // Insns to delete when all done
+        final HashSet<SsaInsn> deletedInsns = new HashSet();
+
+        ssaMeth.forEachInsn(new SsaInsn.Visitor() {
+            @Override
+            public void visitMoveInsn (NormalSsaInsn insn) {
+            }
+            @Override
+            public void visitPhiInsn (PhiInsn phi) {
+            }
+            @Override
+            public void visitNonMoveInsn (NormalSsaInsn insn) {
+                if (insn.getOpcode().getOpcode() != RegOps.MOVE_PARAM) {
+                    return;
+                }
+
+                int param = getParamIndex(insn);
+
+                if (paramSpecs[param] == null) {
+                    paramSpecs[param] = insn.getResult();
+                } else {
+                    final RegisterSpec specA = paramSpecs[param];
+                    final RegisterSpec specB = insn.getResult();
+                    LocalItem localA = specA.getLocalItem();
+                    LocalItem localB = specB.getLocalItem();
+                    LocalItem newLocal;
+
+                    /*
+                     * Is there local information to preserve?
+                     */
+
+                    if (localA == null) {
+                        newLocal = localB;
+                    } else if (localB == null) {
+                        newLocal = localA;
+                    } else if (localA.equals(localB)) {
+                        newLocal = localA;
+                    } else {
+                        /*
+                         * Oddly, these two identical move-params have distinct
+                         * debug info. We'll just keep them distinct.
+                         */
+                        return;
+                    }
+
+                    ssaMeth.getDefinitionForRegister(specA.getReg())
+                            .setResultLocal(newLocal);
+
+                    /*
+                     * Map all uses of specB to specA
+                     */
+
+                    RegisterMapper mapper = new RegisterMapper() {
+                        /** {@inheritDoc} */
+                        @Override
+                        public int getNewRegisterCount() {
+                            return ssaMeth.getRegCount();
+                        }
+
+                        /** {@inheritDoc} */
+                        @Override
+                        public RegisterSpec map(RegisterSpec registerSpec) {
+                            if (registerSpec.getReg() == specB.getReg()) {
+                                return specA;
+                            }
+
+                            return registerSpec;
+                        }
+                    };
+
+                    List<SsaInsn> uses
+                            = ssaMeth.getUseListForRegister(specB.getReg());
+
+                    // Use list is modified by mapSourceRegisters
+                    for (int i = uses.size() - 1; i >= 0; i--) {
+                        SsaInsn use = uses.get(i);
+                        use.mapSourceRegisters(mapper);
+                    }
+
+                    deletedInsns.add(insn);
+                }
+
+            }
+        });
+
+        ssaMeth.deleteInsns(deletedInsns);
+    }
+
+    /**
+     * Returns the parameter index associated with a move-param insn. Does
+     * not verify that the insn is a move-param insn.
+     *
+     * @param insn {@code non-null;} a move-param insn
+     * @return {@code >=0;} parameter index
+     */
+    private int getParamIndex(NormalSsaInsn insn) {
+        CstInsn cstInsn = (CstInsn)(insn.getOriginalRopInsn());
+
+        int param = ((CstInteger)cstInsn.getConstant()).getValue();
+        return param;
+    }
+
+}
diff --git a/dx/src/com/android/dx/ssa/NormalSsaInsn.java b/dx/src/com/android/dx/ssa/NormalSsaInsn.java
new file mode 100644
index 0000000..8f1d433
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/NormalSsaInsn.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+
+/**
+ * A "normal" (non-phi) instruction in SSA form. Always wraps a rop insn.
+ */
+public final class NormalSsaInsn extends SsaInsn implements Cloneable {
+    /** {@code non-null;} rop insn that we're wrapping */
+    private Insn insn;
+
+    /**
+     * Creates an instance.
+     *
+     * @param insn Rop insn to wrap
+     * @param block block that contains this insn
+     */
+    NormalSsaInsn(final Insn insn, final SsaBasicBlock block) {
+        super(insn.getResult(), block);
+        this.insn = insn;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void mapSourceRegisters(RegisterMapper mapper) {
+        RegisterSpecList oldSources = insn.getSources();
+        RegisterSpecList newSources = mapper.map(oldSources);
+
+        if (newSources != oldSources) {
+            insn = insn.withNewRegisters(getResult(), newSources);
+            getBlock().getParent().onSourcesChanged(this, oldSources);
+        }
+    }
+
+    /**
+     * Changes one of the insn's sources. New source should be of same type
+     * and category.
+     *
+     * @param index {@code >=0;} index of source to change
+     * @param newSpec spec for new source
+     */
+    public final void changeOneSource(int index, RegisterSpec newSpec) {
+        RegisterSpecList origSources = insn.getSources();
+        int sz = origSources.size();
+        RegisterSpecList newSources = new RegisterSpecList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            newSources.set(i, i == index ? newSpec : origSources.get(i));
+        }
+
+        newSources.setImmutable();
+
+        RegisterSpec origSpec = origSources.get(index);
+        if (origSpec.getReg() != newSpec.getReg()) {
+            /*
+             * If the register remains unchanged, we're only changing
+             * the type or local var name so don't update use list
+             */
+            getBlock().getParent().onSourceChanged(this, origSpec, newSpec);
+        }
+
+        insn = insn.withNewRegisters(getResult(), newSources);
+    }
+
+    /**
+     * Changes the source list of the insn. New source list should be the
+     * same size and consist of sources of identical types.
+     *
+     * @param newSources non-null new sources list.
+     */
+    public final void setNewSources (RegisterSpecList newSources) {
+        RegisterSpecList origSources = insn.getSources();
+
+        if (origSources.size() != newSources.size()) {
+            throw new RuntimeException("Sources counts don't match");
+        }
+
+        insn = insn.withNewRegisters(getResult(), newSources);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public NormalSsaInsn clone() {
+        return (NormalSsaInsn) super.clone();
+    }
+
+    /**
+     * Like rop.Insn.getSources().
+     *
+     * @return {@code null-ok;} sources list
+     */
+    @Override
+    public RegisterSpecList getSources() {
+        return insn.getSources();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return toRopInsn().toHuman();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn toRopInsn() {
+        return insn.withNewRegisters(getResult(), insn.getSources());
+    }
+
+    /**
+     * @return the Rop opcode for this insn
+     */
+    @Override
+    public Rop getOpcode() {
+        return insn.getOpcode();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Insn getOriginalRopInsn() {
+        return insn;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public RegisterSpec getLocalAssignment() {
+        RegisterSpec assignment;
+
+        if (insn.getOpcode().getOpcode() == RegOps.MARK_LOCAL) {
+            assignment = insn.getSources().get(0);
+        } else {
+            assignment = getResult();
+        }
+
+        if (assignment == null) {
+            return null;
+        }
+
+        LocalItem local = assignment.getLocalItem();
+
+        if (local == null) {
+            return null;
+        }
+
+        return assignment;
+    }
+
+    /**
+     * Upgrades this insn to a version that represents the constant source
+     * literally. If the upgrade is not possible, this does nothing.
+     *
+     * @see Insn#withSourceLiteral
+     */
+    public void upgradeToLiteral() {
+        RegisterSpecList oldSources = insn.getSources();
+
+        insn = insn.withSourceLiteral();
+        getBlock().getParent().onSourcesChanged(this, oldSources);
+    }
+
+    /**
+     * @return true if this is a move (but not a move-operand) instruction
+     */
+    @Override
+    public boolean isNormalMoveInsn() {
+        return insn.getOpcode().getOpcode() == RegOps.MOVE;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isMoveException() {
+        return insn.getOpcode().getOpcode() == RegOps.MOVE_EXCEPTION;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean canThrow() {
+        return insn.canThrow();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(Visitor v) {
+        if (isNormalMoveInsn()) {
+            v.visitMoveInsn(this);
+        } else {
+            v.visitNonMoveInsn(this);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public  boolean isPhiOrMove() {
+        return isNormalMoveInsn();
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * TODO: Increase the scope of this.
+     */
+    @Override
+    public boolean hasSideEffect() {
+        Rop opcode = getOpcode();
+
+        if (opcode.getBranchingness() != Rop.BRANCH_NONE) {
+            return true;
+        }
+
+        boolean hasLocalSideEffect
+            = Optimizer.getPreserveLocals() && getLocalAssignment() != null;
+
+        switch (opcode.getOpcode()) {
+            case RegOps.MOVE_RESULT:
+            case RegOps.MOVE:
+            case RegOps.CONST:
+                return hasLocalSideEffect;
+            default:
+                return true;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/Optimizer.java b/dx/src/com/android/dx/ssa/Optimizer.java
new file mode 100644
index 0000000..8c2e284
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/Optimizer.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.TranslationAdvice;
+import com.android.dx.ssa.back.LivenessAnalyzer;
+import com.android.dx.ssa.back.SsaToRop;
+import java.util.EnumSet;
+
+/**
+ * Runs a method through the SSA form conversion, any optimization algorithms,
+ * and returns it to rop form.
+ */
+public class Optimizer {
+    private static boolean preserveLocals = true;
+
+    private static TranslationAdvice advice;
+
+    /** optional optimizer steps */
+    public enum OptionalStep {
+        MOVE_PARAM_COMBINER, SCCP, LITERAL_UPGRADE, CONST_COLLECTOR,
+            ESCAPE_ANALYSIS
+    }
+
+    /**
+     * @return true if local variable information should be preserved, even
+     * at code size/register size cost
+     */
+    public static boolean getPreserveLocals() {
+        return preserveLocals;
+    }
+
+    /**
+     * @return {@code non-null;} translation advice
+     */
+    public static TranslationAdvice getAdvice() {
+        return advice;
+    }
+
+    /**
+     * Runs optimization algorthims over this method, and returns a new
+     * instance of RopMethod with the changes.
+     *
+     * @param rmeth method to process
+     * @param paramWidth the total width, in register-units, of this method's
+     * parameters
+     * @param isStatic true if this method has no 'this' pointer argument.
+     * @param inPreserveLocals true if local variable info should be preserved,
+     * at the cost of some registers and insns
+     * @param inAdvice {@code non-null;} translation advice
+     * @return optimized method
+     */
+    public static RopMethod optimize(RopMethod rmeth, int paramWidth,
+            boolean isStatic, boolean inPreserveLocals,
+            TranslationAdvice inAdvice) {
+
+        return optimize(rmeth, paramWidth, isStatic, inPreserveLocals, inAdvice,
+                EnumSet.allOf(OptionalStep.class));
+    }
+
+    /**
+     * Runs optimization algorthims over this method, and returns a new
+     * instance of RopMethod with the changes.
+     *
+     * @param rmeth method to process
+     * @param paramWidth the total width, in register-units, of this method's
+     * parameters
+     * @param isStatic true if this method has no 'this' pointer argument.
+     * @param inPreserveLocals true if local variable info should be preserved,
+     * at the cost of some registers and insns
+     * @param inAdvice {@code non-null;} translation advice
+     * @param steps set of optional optimization steps to run
+     * @return optimized method
+     */
+    public static RopMethod optimize(RopMethod rmeth, int paramWidth,
+            boolean isStatic, boolean inPreserveLocals,
+            TranslationAdvice inAdvice, EnumSet<OptionalStep> steps) {
+        SsaMethod ssaMeth = null;
+
+        preserveLocals = inPreserveLocals;
+        advice = inAdvice;
+
+        ssaMeth = SsaConverter.convertToSsaMethod(rmeth, paramWidth, isStatic);
+        runSsaFormSteps(ssaMeth, steps);
+
+        RopMethod resultMeth = SsaToRop.convertToRopMethod(ssaMeth, false);
+
+        if (resultMeth.getBlocks().getRegCount()
+                > advice.getMaxOptimalRegisterCount()) {
+            // Try to see if we can squeeze it under the register count bar
+            resultMeth = optimizeMinimizeRegisters(rmeth, paramWidth, isStatic,
+                    steps);
+        }
+        return resultMeth;
+    }
+
+    /**
+     * Runs the optimizer with a strategy to minimize the number of rop-form
+     * registers used by the end result. Dex bytecode does not have instruction
+     * forms that take register numbers larger than 15 for all instructions.
+     * If we've produced a method that uses more than 16 registers, try again
+     * with a different strategy to see if we can get under the bar. The end
+     * result will be much more efficient.
+     *
+     * @param rmeth method to process
+     * @param paramWidth the total width, in register-units, of this method's
+     * parameters
+     * @param isStatic true if this method has no 'this' pointer argument.
+     * @param steps set of optional optimization steps to run
+     * @return optimized method
+     */
+    private static RopMethod optimizeMinimizeRegisters(RopMethod rmeth,
+            int paramWidth, boolean isStatic,
+            EnumSet<OptionalStep> steps) {
+        SsaMethod ssaMeth;
+        RopMethod resultMeth;
+
+        ssaMeth = SsaConverter.convertToSsaMethod(
+                rmeth, paramWidth, isStatic);
+
+        EnumSet<OptionalStep> newSteps = steps.clone();
+
+        /*
+         * CONST_COLLECTOR trades insns for registers, which is not an
+         * appropriate strategy here.
+         */
+        newSteps.remove(OptionalStep.CONST_COLLECTOR);
+
+        runSsaFormSteps(ssaMeth, newSteps);
+
+        resultMeth = SsaToRop.convertToRopMethod(ssaMeth, true);
+        return resultMeth;
+    }
+
+    private static void runSsaFormSteps(SsaMethod ssaMeth,
+            EnumSet<OptionalStep> steps) {
+        boolean needsDeadCodeRemover = true;
+
+        if (steps.contains(OptionalStep.MOVE_PARAM_COMBINER)) {
+            MoveParamCombiner.process(ssaMeth);
+        }
+
+        if (steps.contains(OptionalStep.SCCP)) {
+            SCCP.process(ssaMeth);
+            DeadCodeRemover.process(ssaMeth);
+            needsDeadCodeRemover = false;
+        }
+
+        if (steps.contains(OptionalStep.LITERAL_UPGRADE)) {
+            LiteralOpUpgrader.process(ssaMeth);
+            DeadCodeRemover.process(ssaMeth);
+            needsDeadCodeRemover = false;
+        }
+
+        /*
+         * ESCAPE_ANALYSIS impacts debuggability, so left off by default
+         */
+        steps.remove(OptionalStep.ESCAPE_ANALYSIS);
+        if (steps.contains(OptionalStep.ESCAPE_ANALYSIS)) {
+            EscapeAnalysis.process(ssaMeth);
+            DeadCodeRemover.process(ssaMeth);
+            needsDeadCodeRemover = false;
+        }
+
+        if (steps.contains(OptionalStep.CONST_COLLECTOR)) {
+            ConstCollector.process(ssaMeth);
+            DeadCodeRemover.process(ssaMeth);
+            needsDeadCodeRemover = false;
+        }
+
+        // dead code remover must be run before phi type resolver
+        if (needsDeadCodeRemover) {
+            DeadCodeRemover.process(ssaMeth);
+        }
+
+        PhiTypeResolver.process(ssaMeth);
+    }
+
+    public static SsaMethod debugEdgeSplit(RopMethod rmeth, int paramWidth,
+            boolean isStatic, boolean inPreserveLocals,
+            TranslationAdvice inAdvice) {
+
+        preserveLocals = inPreserveLocals;
+        advice = inAdvice;
+
+        return SsaConverter.testEdgeSplit(rmeth, paramWidth, isStatic);
+    }
+
+    public static SsaMethod debugPhiPlacement(RopMethod rmeth, int paramWidth,
+            boolean isStatic, boolean inPreserveLocals,
+            TranslationAdvice inAdvice) {
+
+        preserveLocals = inPreserveLocals;
+        advice = inAdvice;
+
+        return SsaConverter.testPhiPlacement(rmeth, paramWidth, isStatic);
+    }
+
+    public static SsaMethod debugRenaming(RopMethod rmeth, int paramWidth,
+            boolean isStatic, boolean inPreserveLocals,
+            TranslationAdvice inAdvice) {
+
+        preserveLocals = inPreserveLocals;
+        advice = inAdvice;
+
+        return SsaConverter.convertToSsaMethod(rmeth, paramWidth, isStatic);
+    }
+
+    public static SsaMethod debugDeadCodeRemover(RopMethod rmeth,
+            int paramWidth, boolean isStatic, boolean inPreserveLocals,
+            TranslationAdvice inAdvice) {
+
+        SsaMethod ssaMeth;
+
+        preserveLocals = inPreserveLocals;
+        advice = inAdvice;
+
+        ssaMeth = SsaConverter.convertToSsaMethod(rmeth, paramWidth, isStatic);
+        DeadCodeRemover.process(ssaMeth);
+
+        return ssaMeth;
+    }
+
+    public static SsaMethod debugNoRegisterAllocation(RopMethod rmeth,
+            int paramWidth, boolean isStatic, boolean inPreserveLocals,
+            TranslationAdvice inAdvice, EnumSet<OptionalStep> steps) {
+
+        SsaMethod ssaMeth;
+
+        preserveLocals = inPreserveLocals;
+        advice = inAdvice;
+
+        ssaMeth = SsaConverter.convertToSsaMethod(rmeth, paramWidth, isStatic);
+
+        runSsaFormSteps(ssaMeth, steps);
+
+        LivenessAnalyzer.constructInterferenceGraph(ssaMeth);
+
+        return ssaMeth;
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/PhiInsn.java b/dx/src/com/android/dx/ssa/PhiInsn.java
new file mode 100644
index 0000000..81ef5b3
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/PhiInsn.java
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import com.android.dx.util.Hex;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A Phi instruction (magical post-control-flow-merge) instruction
+ * in SSA form. Will be converted to moves in predecessor blocks before
+ * conversion back to ROP form.
+ */
+public final class PhiInsn extends SsaInsn {
+    /**
+     * result register. The original result register of the phi insn
+     * is needed during the renaming process after the new result
+     * register has already been chosen.
+     */
+    private final int ropResultReg;
+
+    /**
+     * {@code non-null;} operands of the instruction; built up by
+     * {@link #addPhiOperand}
+     */
+    private final ArrayList<Operand> operands = new ArrayList<Operand>();
+
+    /** {@code null-ok;} source registers; constructed lazily */
+    private RegisterSpecList sources;
+
+    /**
+     * Constructs a new phi insn with no operands.
+     *
+     * @param resultReg the result reg for this phi insn
+     * @param block block containing this insn.
+     */
+    public PhiInsn(RegisterSpec resultReg, SsaBasicBlock block) {
+        super(resultReg, block);
+        ropResultReg = resultReg.getReg();
+    }
+
+    /**
+     * Makes a phi insn with a void result type.
+     *
+     * @param resultReg the result register for this phi insn.
+     * @param block block containing this insn.
+     */
+    public PhiInsn(final int resultReg, final SsaBasicBlock block) {
+        /*
+         * The result type here is bogus: The type depends on the
+         * operand and will be derived later.
+         */
+        super(RegisterSpec.make(resultReg, Type.VOID), block);
+        ropResultReg = resultReg;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public PhiInsn clone() {
+        throw new UnsupportedOperationException("can't clone phi");
+    }
+
+    /**
+     * Updates the TypeBearers of all the sources (phi operands) to be
+     * the current TypeBearer of the register-defining instruction's result.
+     * This is used during phi-type resolution.<p>
+     *
+     * Note that local association of operands are preserved in this step.
+     *
+     * @param ssaMeth method that contains this insn
+     */
+    public void updateSourcesToDefinitions(SsaMethod ssaMeth) {
+        for (Operand o : operands) {
+            RegisterSpec def
+                = ssaMeth.getDefinitionForRegister(
+                    o.regSpec.getReg()).getResult();
+
+            o.regSpec = o.regSpec.withType(def.getType());
+        }
+
+        sources = null;
+    }
+
+    /**
+     * Changes the result type. Used during phi type resolution
+     *
+     * @param type {@code non-null;} new TypeBearer
+     * @param local {@code null-ok;} new local info, if available
+     */
+    public void changeResultType(TypeBearer type, LocalItem local) {
+        setResult(RegisterSpec.makeLocalOptional(
+                          getResult().getReg(), type, local));
+    }
+
+    /**
+     * Gets the original rop-form result reg. This is useful during renaming.
+     *
+     * @return the original rop-form result reg
+     */
+    public int getRopResultReg() {
+        return ropResultReg;
+    }
+
+    /**
+     * Adds an operand to this phi instruction.
+     *
+     * @param registerSpec register spec, including type and reg of operand
+     * @param predBlock predecessor block to be associated with this operand
+     */
+    public void addPhiOperand(RegisterSpec registerSpec,
+            SsaBasicBlock predBlock) {
+        operands.add(new Operand(registerSpec, predBlock.getIndex(),
+                predBlock.getRopLabel()));
+
+        // Un-cache sources, in case someone has already called getSources().
+        sources = null;
+    }
+
+    /**
+     * Removes all operand uses of a register from this phi instruction.
+     *
+     * @param registerSpec register spec, including type and reg of operand
+     */
+    public void removePhiRegister(RegisterSpec registerSpec) {
+        ArrayList<Operand> operandsToRemove = new ArrayList<Operand>();
+        for (Operand o : operands) {
+            if (o.regSpec.getReg() == registerSpec.getReg()) {
+                operandsToRemove.add(o);
+            }
+        }
+
+        operands.removeAll(operandsToRemove);
+
+        // Un-cache sources, in case someone has already called getSources().
+        sources = null;
+    }
+
+    /**
+     * Gets the index of the pred block associated with the RegisterSpec
+     * at the particular getSources() index.
+     *
+     * @param sourcesIndex index of source in getSources()
+     * @return block index
+     */
+    public int predBlockIndexForSourcesIndex(int sourcesIndex) {
+        return operands.get(sourcesIndex).blockIndex;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Always returns null for {@code PhiInsn}s.
+     */
+    @Override
+    public Rop getOpcode() {
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Always returns null for {@code PhiInsn}s.
+     */
+    @Override
+    public Insn getOriginalRopInsn() {
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Always returns false for {@code PhiInsn}s.
+     */
+    @Override
+    public boolean canThrow() {
+        return false;
+    }
+
+    /**
+     * Gets sources. Constructed lazily from phi operand data structures and
+     * then cached.
+     *
+     * @return {@code non-null;} sources list
+     */
+    @Override
+    public RegisterSpecList getSources() {
+        if (sources != null) {
+            return sources;
+        }
+
+        if (operands.size() == 0) {
+            // How'd this happen? A phi insn with no operand?
+            return RegisterSpecList.EMPTY;
+        }
+
+        int szSources = operands.size();
+        sources = new RegisterSpecList(szSources);
+
+        for (int i = 0; i < szSources; i++) {
+            Operand o = operands.get(i);
+
+            sources.set(i, o.regSpec);
+        }
+
+        sources.setImmutable();
+        return sources;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isRegASource(int reg) {
+        /*
+         * Avoid creating a sources list in case it has not already been
+         * created.
+         */
+
+        for (Operand o : operands) {
+            if (o.regSpec.getReg() == reg) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * @return true if all operands use the same register
+     */
+    public boolean areAllOperandsEqual() {
+        if (operands.size() == 0 ) {
+            // This should never happen.
+            return true;
+        }
+
+        int firstReg = operands.get(0).regSpec.getReg();
+        for (Operand o : operands) {
+            if (firstReg != o.regSpec.getReg()) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public final void mapSourceRegisters(RegisterMapper mapper) {
+        for (Operand o : operands) {
+            RegisterSpec old = o.regSpec;
+            o.regSpec = mapper.map(old);
+            if (old != o.regSpec) {
+                getBlock().getParent().onSourceChanged(this, old, o.regSpec);
+            }
+        }
+        sources = null;
+    }
+
+    /**
+     * Always throws an exeption, since a phi insn may not be
+     * converted back to rop form.
+     *
+     * @return always throws exception
+     */
+    @Override
+    public Insn toRopInsn() {
+        throw new IllegalArgumentException(
+                "Cannot convert phi insns to rop form");
+    }
+
+    /**
+     * Returns the list of predecessor blocks associated with all operands
+     * that have {@code reg} as an operand register.
+     *
+     * @param reg register to look up
+     * @param ssaMeth method we're operating on
+     * @return list of predecessor blocks, empty if none
+     */
+    public List<SsaBasicBlock> predBlocksForReg(int reg, SsaMethod ssaMeth) {
+        ArrayList<SsaBasicBlock> ret = new ArrayList<SsaBasicBlock>();
+
+        for (Operand o : operands) {
+            if (o.regSpec.getReg() == reg) {
+                ret.add(ssaMeth.getBlocks().get(o.blockIndex));
+            }
+        }
+
+        return ret;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isPhiOrMove() {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean hasSideEffect() {
+        return Optimizer.getPreserveLocals() && getLocalAssignment() != null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void accept(SsaInsn.Visitor v) {
+        v.visitPhiInsn(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toHuman() {
+        return toHumanWithInline(null);
+    }
+
+    /**
+     * Returns human-readable string for listing dumps. This method
+     * allows sub-classes to specify extra text.
+     *
+     * @param extra {@code null-ok;} the argument to print after the opcode
+     * @return human-readable string for listing dumps
+     */
+    protected final String toHumanWithInline(String extra) {
+        StringBuilder sb = new StringBuilder(80);
+
+        sb.append(SourcePosition.NO_INFO);
+        sb.append(": phi");
+
+        if (extra != null) {
+            sb.append("(");
+            sb.append(extra);
+            sb.append(")");
+        }
+
+        RegisterSpec result = getResult();
+
+        if (result == null) {
+            sb.append(" .");
+        } else {
+            sb.append(" ");
+            sb.append(result.toHuman());
+        }
+
+        sb.append(" <-");
+
+        int sz = getSources().size();
+        if (sz == 0) {
+            sb.append(" .");
+        } else {
+            for (int i = 0; i < sz; i++) {
+                sb.append(" ");
+                sb.append(sources.get(i).toHuman()
+                        + "[b="
+                        + Hex.u2(operands.get(i).ropLabel)  + "]");
+            }
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * A single phi operand, consiting of source register and block index
+     * for move.
+     */
+    private static class Operand {
+        public RegisterSpec regSpec;
+        public final int blockIndex;
+        public final int ropLabel;       // only used for debugging
+
+        public Operand(RegisterSpec regSpec, int blockIndex, int ropLabel) {
+            this.regSpec = regSpec;
+            this.blockIndex = blockIndex;
+            this.ropLabel = ropLabel;
+        }
+    }
+
+    /**
+     * Visitor interface for instances of this (outer) class.
+     */
+    public static interface Visitor {
+        public void visitPhiInsn(PhiInsn insn);
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/PhiTypeResolver.java b/dx/src/com/android/dx/ssa/PhiTypeResolver.java
new file mode 100644
index 0000000..1b2ce9f
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/PhiTypeResolver.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.cf.code.Merger;
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import java.util.BitSet;
+import java.util.List;
+
+/**
+ * Resolves the result types of phi instructions. When phi instructions
+ * are inserted, their result types are set to BT_VOID (which is a nonsensical
+ * type for a register) but must be resolve to a real type before converting
+ * out of SSA form.<p>
+ *
+ * The resolve is done as an iterative merge of each phi's operand types.
+ * Phi operands may be themselves be the result of unresolved phis,
+ * and the algorithm tries to find the most-fit type (for example, if every
+ * operand is the same constant value or the same local variable info, we want
+ * that to be reflected).<p>
+ *
+ * This algorithm assumes a dead-code remover has already removed all
+ * circular-only phis that may have been inserted.
+ */
+public class PhiTypeResolver {
+
+    SsaMethod ssaMeth;
+    /** indexed by register; all registers still defined by unresolved phis */
+    private final BitSet worklist;
+
+    /**
+     * Resolves all phi types in the method
+     * @param ssaMeth method to process
+     */
+    public static void process (SsaMethod ssaMeth) {
+        new PhiTypeResolver(ssaMeth).run();
+    }
+
+    private PhiTypeResolver(SsaMethod ssaMeth) {
+        this.ssaMeth = ssaMeth;
+        worklist = new BitSet(ssaMeth.getRegCount());
+    }
+
+    /**
+     * Runs the phi-type resolver.
+     */
+    private void run() {
+
+        int regCount = ssaMeth.getRegCount();
+
+        for (int reg = 0; reg < regCount; reg++) {
+            SsaInsn definsn = ssaMeth.getDefinitionForRegister(reg);
+
+            if (definsn != null
+                    && (definsn.getResult().getBasicType() == Type.BT_VOID)) {
+                worklist.set(reg);
+            }
+        }
+
+        int reg;
+        while ( 0 <= (reg = worklist.nextSetBit(0))) {
+            worklist.clear(reg);
+
+            /*
+             * definitions on the worklist have a type of BT_VOID, which
+             * must have originated from a PhiInsn.
+             */
+            PhiInsn definsn = (PhiInsn)ssaMeth.getDefinitionForRegister(reg);
+
+            if (resolveResultType(definsn)) {
+                /*
+                 * If the result type has changed, re-resolve all phis
+                 * that use this.
+                 */
+
+                List<SsaInsn> useList = ssaMeth.getUseListForRegister(reg);
+
+                int sz = useList.size();
+                for (int i = 0; i < sz; i++ ) {
+                    SsaInsn useInsn = useList.get(i);
+                    RegisterSpec resultReg = useInsn.getResult();
+                    if (resultReg != null && useInsn instanceof PhiInsn) {
+                        worklist.set(resultReg.getReg());
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns true if a and b are equal, whether
+     * or not either of them are null.
+     * @param a
+     * @param b
+     * @return true if equal
+     */
+    private static boolean equalsHandlesNulls(LocalItem a, LocalItem b) {
+        return (a == b) || ((a != null) && a.equals(b));
+    }
+
+    /**
+     * Resolves the result of a phi insn based on its operands. The "void"
+     * type, which is a nonsensical type for a register, is used for
+     * registers defined by as-of-yet-unresolved phi operations.
+     *
+     * @return true if the result type changed, false if no change
+     */
+    boolean resolveResultType(PhiInsn insn) {
+        insn.updateSourcesToDefinitions(ssaMeth);
+
+        RegisterSpecList sources = insn.getSources();
+
+        // Start by finding the first non-void operand
+        RegisterSpec first = null;
+        int firstIndex = -1;
+
+        int szSources = sources.size();
+        for (int i = 0 ; i <szSources ; i++) {
+            RegisterSpec rs = sources.get(i);
+
+            if (rs.getBasicType() != Type.BT_VOID) {
+                first = rs;
+                firstIndex = i;
+            }
+        }
+
+        if (first == null) {
+            // All operands are void -- we're not ready to resolve yet
+            return false;
+        }
+
+        LocalItem firstLocal = first.getLocalItem();
+        TypeBearer mergedType = first.getType();
+        boolean sameLocals = true;
+        for (int i = 0 ; i < szSources ; i++) {
+            if (i == firstIndex) {
+                continue;
+            }
+
+            RegisterSpec rs = sources.get(i);
+
+            // Just skip void (unresolved phi results) for now
+            if (rs.getBasicType() == Type.BT_VOID){
+                continue;
+            }
+
+            sameLocals = sameLocals
+                    && equalsHandlesNulls(firstLocal, rs.getLocalItem());
+
+            mergedType = Merger.mergeType(mergedType, rs.getType());
+        }
+
+        TypeBearer newResultType;
+
+        if (mergedType != null) {
+            newResultType = mergedType;
+        } else {
+            StringBuilder sb = new StringBuilder();
+
+            for (int i = 0; i < szSources; i++) {
+                sb.append(sources.get(i).toString());
+                sb.append(' ');
+            }
+
+            throw new RuntimeException ("Couldn't map types in phi insn:" + sb);
+        }
+
+        LocalItem newLocal = sameLocals ? firstLocal : null;
+
+        RegisterSpec result = insn.getResult();
+
+        if ((result.getTypeBearer() == newResultType)
+                && equalsHandlesNulls(newLocal, result.getLocalItem())) {
+            return false;
+        }
+
+        insn.changeResultType(newResultType, newLocal);
+
+        return true;
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/RegisterMapper.java b/dx/src/com/android/dx/ssa/RegisterMapper.java
new file mode 100644
index 0000000..4e01fd1
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/RegisterMapper.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.RegisterSpecSet;
+
+/**
+ * Represents a mapping between two register numbering schemes.
+ * Subclasses of this may be mutable, and as such the mapping provided
+ * is only valid for the lifetime of the method call in which
+ * instances of this class are passed.
+ */
+public abstract class RegisterMapper {
+    /**
+     * Gets the count of registers (really, the total register width, since
+     * category width is counted) in the new namespace.
+     * @return &ge; 0 width of new namespace.
+     */
+    public abstract int getNewRegisterCount();
+
+    /**
+     * @param registerSpec old register
+     * @return register in new space
+     */
+    public abstract RegisterSpec map(RegisterSpec registerSpec);
+
+    /**
+     *
+     * @param sources old register list
+     * @return new mapped register list, or old if nothing has changed.
+     */
+    public final RegisterSpecList map(RegisterSpecList sources) {
+        int sz = sources.size();
+        RegisterSpecList newSources = new RegisterSpecList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            newSources.set(i, map(sources.get(i)));
+        }
+
+        newSources.setImmutable();
+
+        // Return the old sources if nothing has changed.
+        return newSources.equals(sources) ? sources : newSources;
+    }
+
+    /**
+     *
+     * @param sources old register set
+     * @return new mapped register set, or old if nothing has changed.
+     */
+    public final RegisterSpecSet map(RegisterSpecSet sources) {
+        int sz = sources.getMaxSize();
+        RegisterSpecSet newSources = new RegisterSpecSet(getNewRegisterCount());
+
+        for (int i = 0; i < sz; i++) {
+            RegisterSpec registerSpec = sources.get(i);
+            if (registerSpec != null) {
+                newSources.put(map(registerSpec));
+            }
+        }
+
+        newSources.setImmutable();
+
+        // Return the old sources if nothing has changed.
+        return newSources.equals(sources) ? sources : newSources;
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/SCCP.java b/dx/src/com/android/dx/ssa/SCCP.java
new file mode 100644
index 0000000..c3c044f
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/SCCP.java
@@ -0,0 +1,680 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.CstInsn;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.rop.cst.TypedConstant;
+import com.android.dx.rop.type.Type;
+import com.android.dx.rop.type.TypeBearer;
+import java.util.ArrayList;
+import java.util.BitSet;
+
+/**
+ * A small variant of Wegman and Zadeck's Sparse Conditional Constant
+ * Propagation algorithm.
+ */
+public class SCCP {
+    /** Lattice values  */
+    private static final int TOP = 0;
+    private static final int CONSTANT = 1;
+    private static final int VARYING = 2;
+    /** method we're processing */
+    private final SsaMethod ssaMeth;
+    /** ssaMeth.getRegCount() */
+    private final int regCount;
+    /** Lattice values for each SSA register */
+    private final int[] latticeValues;
+    /** For those registers that are constant, this is the constant value */
+    private final Constant[] latticeConstants;
+    /** Worklist of basic blocks to be processed */
+    private final ArrayList<SsaBasicBlock> cfgWorklist;
+    /** Worklist of executed basic blocks with phis to be processed */
+    private final ArrayList<SsaBasicBlock> cfgPhiWorklist;
+    /** Bitset containing bits for each block that has been found executable */
+    private final BitSet executableBlocks;
+    /** Worklist for SSA edges.  This is a list of registers to process */
+    private final ArrayList<SsaInsn> ssaWorklist;
+    /**
+     * Worklist for SSA edges that represent varying values.  It makes the
+     * algorithm much faster if you move all values to VARYING as fast as
+     * possible.
+     */
+    private final ArrayList<SsaInsn> varyingWorklist;
+    /** Worklist of potential branches to convert to gotos */
+    private final ArrayList<SsaInsn> branchWorklist;
+
+    private SCCP(SsaMethod ssaMeth) {
+        this.ssaMeth = ssaMeth;
+        this.regCount = ssaMeth.getRegCount();
+        this.latticeValues = new int[this.regCount];
+        this.latticeConstants = new Constant[this.regCount];
+        this.cfgWorklist = new ArrayList<SsaBasicBlock>();
+        this.cfgPhiWorklist = new ArrayList<SsaBasicBlock>();
+        this.executableBlocks = new BitSet(ssaMeth.getBlocks().size());
+        this.ssaWorklist = new ArrayList<SsaInsn>();
+        this.varyingWorklist = new ArrayList<SsaInsn>();
+        this.branchWorklist = new ArrayList<SsaInsn>();
+        for (int i = 0; i < this.regCount; i++) {
+            latticeValues[i] = TOP;
+            latticeConstants[i] = null;
+        }
+    }
+
+    /**
+     * Performs sparse conditional constant propagation on a method.
+     * @param ssaMethod Method to process
+     */
+    public static void process (SsaMethod ssaMethod) {
+        new SCCP(ssaMethod).run();
+    }
+
+    /**
+     * Adds a SSA basic block to the CFG worklist if it's unexecuted, or
+     * to the CFG phi worklist if it's already executed.
+     * @param ssaBlock Block to add
+     */
+    private void addBlockToWorklist(SsaBasicBlock ssaBlock) {
+        if (!executableBlocks.get(ssaBlock.getIndex())) {
+            cfgWorklist.add(ssaBlock);
+            executableBlocks.set(ssaBlock.getIndex());
+        } else {
+            cfgPhiWorklist.add(ssaBlock);
+        }
+    }
+
+    /**
+     * Adds an SSA register's uses to the SSA worklist.
+     * @param reg SSA register
+     * @param latticeValue new lattice value for @param reg.
+     */
+    private void addUsersToWorklist(int reg, int latticeValue) {
+        if (latticeValue == VARYING) {
+            for (SsaInsn insn : ssaMeth.getUseListForRegister(reg)) {
+                varyingWorklist.add(insn);
+            }
+        } else {
+            for (SsaInsn insn : ssaMeth.getUseListForRegister(reg)) {
+                ssaWorklist.add(insn);
+            }
+        }
+    }
+
+    /**
+     * Sets a lattice value for a register to value.
+     * @param reg SSA register
+     * @param value Lattice value
+     * @param cst Constant value (may be null)
+     * @return true if the lattice value changed.
+     */
+    private boolean setLatticeValueTo(int reg, int value, Constant cst) {
+        if (value != CONSTANT) {
+            if (latticeValues[reg] != value) {
+                latticeValues[reg] = value;
+                return true;
+            }
+            return false;
+        } else {
+            if (latticeValues[reg] != value
+                    || !latticeConstants[reg].equals(cst)) {
+                latticeValues[reg] = value;
+                latticeConstants[reg] = cst;
+                return true;
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Simulates a PHI node and set the lattice for the result
+     * to the appropriate value.
+     * Meet values:
+     * TOP x anything = TOP
+     * VARYING x anything = VARYING
+     * CONSTANT x CONSTANT = CONSTANT if equal constants, VARYING otherwise
+     * @param insn PHI to simulate.
+     */
+    private void simulatePhi(PhiInsn insn) {
+        int phiResultReg = insn.getResult().getReg();
+
+        if (latticeValues[phiResultReg] == VARYING) {
+            return;
+        }
+
+        RegisterSpecList sources = insn.getSources();
+        int phiResultValue = TOP;
+        Constant phiConstant = null;
+        int sourceSize = sources.size();
+
+        for (int i = 0; i < sourceSize; i++) {
+            int predBlockIndex = insn.predBlockIndexForSourcesIndex(i);
+            int sourceReg = sources.get(i).getReg();
+            int sourceRegValue = latticeValues[sourceReg];
+
+            if (!executableBlocks.get(predBlockIndex)) {
+                continue;
+            }
+
+            if (sourceRegValue == CONSTANT) {
+                if (phiConstant == null) {
+                    phiConstant = latticeConstants[sourceReg];
+                    phiResultValue = CONSTANT;
+                 } else if (!latticeConstants[sourceReg].equals(phiConstant)){
+                    phiResultValue = VARYING;
+                    break;
+                }
+            } else {
+                phiResultValue = sourceRegValue;
+                break;
+            }
+        }
+        if (setLatticeValueTo(phiResultReg, phiResultValue, phiConstant)) {
+            addUsersToWorklist(phiResultReg, phiResultValue);
+        }
+    }
+
+    /**
+     * Simulate a block and note the results in the lattice.
+     * @param block Block to visit
+     */
+    private void simulateBlock(SsaBasicBlock block) {
+        for (SsaInsn insn : block.getInsns()) {
+            if (insn instanceof PhiInsn) {
+                simulatePhi((PhiInsn) insn);
+            } else {
+                simulateStmt(insn);
+            }
+        }
+    }
+
+    /**
+     * Simulate the phis in a block and note the results in the lattice.
+     * @param block Block to visit
+     */
+    private void simulatePhiBlock(SsaBasicBlock block) {
+        for (SsaInsn insn : block.getInsns()) {
+            if (insn instanceof PhiInsn) {
+                simulatePhi((PhiInsn) insn);
+            } else {
+                return;
+            }
+        }
+    }
+
+    private static String latticeValName(int latticeVal) {
+        switch (latticeVal) {
+            case TOP: return "TOP";
+            case CONSTANT: return "CONSTANT";
+            case VARYING: return "VARYING";
+            default: return "UNKNOWN";
+        }
+    }
+
+    /**
+     * Simulates branch insns, if possible. Adds reachable successor blocks
+     * to the CFG worklists.
+     * @param insn branch to simulate
+     */
+    private void simulateBranch(SsaInsn insn) {
+        Rop opcode = insn.getOpcode();
+        RegisterSpecList sources = insn.getSources();
+
+        boolean constantBranch = false;
+        boolean constantSuccessor = false;
+
+        // Check if the insn is a branch with a constant condition
+        if (opcode.getBranchingness() == Rop.BRANCH_IF) {
+            Constant cA = null;
+            Constant cB = null;
+
+            RegisterSpec specA = sources.get(0);
+            int regA = specA.getReg();
+            if (!ssaMeth.isRegALocal(specA) &&
+                    latticeValues[regA] == CONSTANT) {
+                cA = latticeConstants[regA];
+            }
+
+            if (sources.size() == 2) {
+                RegisterSpec specB = sources.get(1);
+                int regB = specB.getReg();
+                if (!ssaMeth.isRegALocal(specB) &&
+                        latticeValues[regB] == CONSTANT) {
+                    cB = latticeConstants[regB];
+                }
+            }
+
+            // Calculate the result of the condition
+            if (cA != null && sources.size() == 1) {
+                switch (((TypedConstant) cA).getBasicType()) {
+                    case Type.BT_INT:
+                        constantBranch = true;
+                        int vA = ((CstInteger) cA).getValue();
+                        switch (opcode.getOpcode()) {
+                            case RegOps.IF_EQ:
+                                constantSuccessor = (vA == 0);
+                                break;
+                            case RegOps.IF_NE:
+                                constantSuccessor = (vA != 0);
+                                break;
+                            case RegOps.IF_LT:
+                                constantSuccessor = (vA < 0);
+                                break;
+                            case RegOps.IF_GE:
+                                constantSuccessor = (vA >= 0);
+                                break;
+                            case RegOps.IF_LE:
+                                constantSuccessor = (vA <= 0);
+                                break;
+                            case RegOps.IF_GT:
+                                constantSuccessor = (vA > 0);
+                                break;
+                            default:
+                                throw new RuntimeException("Unexpected op");
+                        }
+                        break;
+                    default:
+                        // not yet supported
+                }
+            } else if (cA != null && cB != null) {
+                switch (((TypedConstant) cA).getBasicType()) {
+                    case Type.BT_INT:
+                        constantBranch = true;
+                        int vA = ((CstInteger) cA).getValue();
+                        int vB = ((CstInteger) cB).getValue();
+                        switch (opcode.getOpcode()) {
+                            case RegOps.IF_EQ:
+                                constantSuccessor = (vA == vB);
+                                break;
+                            case RegOps.IF_NE:
+                                constantSuccessor = (vA != vB);
+                                break;
+                            case RegOps.IF_LT:
+                                constantSuccessor = (vA < vB);
+                                break;
+                            case RegOps.IF_GE:
+                                constantSuccessor = (vA >= vB);
+                                break;
+                            case RegOps.IF_LE:
+                                constantSuccessor = (vA <= vB);
+                                break;
+                            case RegOps.IF_GT:
+                                constantSuccessor = (vA > vB);
+                                break;
+                            default:
+                                throw new RuntimeException("Unexpected op");
+                        }
+                        break;
+                    default:
+                        // not yet supported
+                }
+            }
+        }
+
+        /*
+         * If condition is constant, add only the target block to the
+         * worklist. Otherwise, add all successors to the worklist.
+         */
+        SsaBasicBlock block = insn.getBlock();
+
+        if (constantBranch) {
+            int successorBlock;
+            if (constantSuccessor) {
+                successorBlock = block.getSuccessorList().get(1);
+            } else {
+                successorBlock = block.getSuccessorList().get(0);
+            }
+            addBlockToWorklist(ssaMeth.getBlocks().get(successorBlock));
+            branchWorklist.add(insn);
+        } else {
+            for (int i = 0; i < block.getSuccessorList().size(); i++) {
+                int successorBlock = block.getSuccessorList().get(i);
+                addBlockToWorklist(ssaMeth.getBlocks().get(successorBlock));
+            }
+        }
+    }
+
+    /**
+     * Simulates math insns, if possible.
+     *
+     * @param insn non-null insn to simulate
+     * @param resultType basic type of the result
+     * @return constant result or null if not simulatable.
+     */
+    private Constant simulateMath(SsaInsn insn, int resultType) {
+        Insn ropInsn = insn.getOriginalRopInsn();
+        int opcode = insn.getOpcode().getOpcode();
+        RegisterSpecList sources = insn.getSources();
+        int regA = sources.get(0).getReg();
+        Constant cA;
+        Constant cB;
+
+        if (latticeValues[regA] != CONSTANT) {
+            cA = null;
+        } else {
+            cA = latticeConstants[regA];
+        }
+
+        if (sources.size() == 1) {
+            CstInsn cstInsn = (CstInsn) ropInsn;
+            cB = cstInsn.getConstant();
+        } else { /* sources.size() == 2 */
+            int regB = sources.get(1).getReg();
+            if (latticeValues[regB] != CONSTANT) {
+                cB = null;
+            } else {
+                cB = latticeConstants[regB];
+            }
+        }
+
+        if (cA == null || cB == null) {
+            //TODO handle a constant of 0 with MUL or AND
+            return null;
+        }
+
+        switch (resultType) {
+            case Type.BT_INT:
+                int vR;
+                boolean skip=false;
+
+                int vA = ((CstInteger) cA).getValue();
+                int vB = ((CstInteger) cB).getValue();
+
+                switch (opcode) {
+                    case RegOps.ADD:
+                        vR = vA + vB;
+                        break;
+                    case RegOps.SUB:
+                        // 1 source for reverse sub, 2 sources for regular sub
+                        if (sources.size() == 1) {
+                            vR = vB - vA;
+                        } else {
+                            vR = vA - vB;
+                        }
+                        break;
+                    case RegOps.MUL:
+                        vR = vA * vB;
+                        break;
+                    case RegOps.DIV:
+                        if (vB == 0) {
+                            skip = true;
+                            vR = 0; // just to hide a warning
+                        } else {
+                            vR = vA / vB;
+                        }
+                        break;
+                    case RegOps.AND:
+                        vR = vA & vB;
+                        break;
+                    case RegOps.OR:
+                        vR = vA | vB;
+                        break;
+                    case RegOps.XOR:
+                        vR = vA ^ vB;
+                        break;
+                    case RegOps.SHL:
+                        vR = vA << vB;
+                        break;
+                    case RegOps.SHR:
+                        vR = vA >> vB;
+                        break;
+                    case RegOps.USHR:
+                        vR = vA >>> vB;
+                        break;
+                    case RegOps.REM:
+                        if (vB == 0) {
+                            skip = true;
+                            vR = 0; // just to hide a warning
+                        } else {
+                            vR = vA % vB;
+                        }
+                        break;
+                    default:
+                        throw new RuntimeException("Unexpected op");
+                }
+
+                return skip ? null : CstInteger.make(vR);
+
+            default:
+                // not yet supported
+                return null;
+        }
+    }
+
+    /**
+     * Simulates a statement and set the result lattice value.
+     * @param insn instruction to simulate
+     */
+    private void simulateStmt(SsaInsn insn) {
+        Insn ropInsn = insn.getOriginalRopInsn();
+        if (ropInsn.getOpcode().getBranchingness() != Rop.BRANCH_NONE
+                || ropInsn.getOpcode().isCallLike()) {
+            simulateBranch(insn);
+        }
+
+        int opcode = insn.getOpcode().getOpcode();
+        RegisterSpec result = insn.getResult();
+
+        if (result == null) {
+            // Find move-result-pseudo result for int div and int rem
+            if (opcode == RegOps.DIV || opcode == RegOps.REM) {
+                SsaBasicBlock succ = insn.getBlock().getPrimarySuccessor();
+                result = succ.getInsns().get(0).getResult();
+            } else {
+                return;
+            }
+        }
+
+        int resultReg = result.getReg();
+        int resultValue = VARYING;
+        Constant resultConstant = null;
+
+        switch (opcode) {
+            case RegOps.CONST: {
+                CstInsn cstInsn = (CstInsn)ropInsn;
+                resultValue = CONSTANT;
+                resultConstant = cstInsn.getConstant();
+                break;
+            }
+            case RegOps.MOVE: {
+                if (insn.getSources().size() == 1) {
+                    int sourceReg = insn.getSources().get(0).getReg();
+                    resultValue = latticeValues[sourceReg];
+                    resultConstant = latticeConstants[sourceReg];
+                }
+                break;
+            }
+            case RegOps.ADD:
+            case RegOps.SUB:
+            case RegOps.MUL:
+            case RegOps.DIV:
+            case RegOps.AND:
+            case RegOps.OR:
+            case RegOps.XOR:
+            case RegOps.SHL:
+            case RegOps.SHR:
+            case RegOps.USHR:
+            case RegOps.REM: {
+                resultConstant = simulateMath(insn, result.getBasicType());
+                if (resultConstant != null) {
+                    resultValue = CONSTANT;
+                }
+                break;
+            }
+            case RegOps.MOVE_RESULT_PSEUDO: {
+                if (latticeValues[resultReg] == CONSTANT) {
+                    resultValue = latticeValues[resultReg];
+                    resultConstant = latticeConstants[resultReg];
+                }
+                break;
+            }
+            // TODO: Handle non-int arithmetic.
+            // TODO: Eliminate check casts that we can prove the type of.
+            default: {}
+        }
+        if (setLatticeValueTo(resultReg, resultValue, resultConstant)) {
+            addUsersToWorklist(resultReg, resultValue);
+        }
+    }
+
+    private void run() {
+        SsaBasicBlock firstBlock = ssaMeth.getEntryBlock();
+        addBlockToWorklist(firstBlock);
+
+        /* Empty all the worklists by propagating our values */
+        while (!cfgWorklist.isEmpty()
+                || !cfgPhiWorklist.isEmpty()
+                || !ssaWorklist.isEmpty()
+                || !varyingWorklist.isEmpty()) {
+            while (!cfgWorklist.isEmpty()) {
+                int listSize = cfgWorklist.size() - 1;
+                SsaBasicBlock block = cfgWorklist.remove(listSize);
+                simulateBlock(block);
+            }
+
+            while (!cfgPhiWorklist.isEmpty()) {
+                int listSize = cfgPhiWorklist.size() - 1;
+                SsaBasicBlock block = cfgPhiWorklist.remove(listSize);
+                simulatePhiBlock(block);
+            }
+
+            while (!varyingWorklist.isEmpty()) {
+                int listSize = varyingWorklist.size() - 1;
+                SsaInsn insn = varyingWorklist.remove(listSize);
+
+                if (!executableBlocks.get(insn.getBlock().getIndex())) {
+                    continue;
+                }
+
+                if (insn instanceof PhiInsn) {
+                    simulatePhi((PhiInsn)insn);
+                } else {
+                    simulateStmt(insn);
+                }
+            }
+            while (!ssaWorklist.isEmpty()) {
+                int listSize = ssaWorklist.size() - 1;
+                SsaInsn insn = ssaWorklist.remove(listSize);
+
+                if (!executableBlocks.get(insn.getBlock().getIndex())) {
+                    continue;
+                }
+
+                if (insn instanceof PhiInsn) {
+                    simulatePhi((PhiInsn)insn);
+                } else {
+                    simulateStmt(insn);
+                }
+            }
+        }
+
+        replaceConstants();
+        replaceBranches();
+    }
+
+    /**
+     * Replaces TypeBearers in source register specs with constant type
+     * bearers if possible. These are then referenced in later optimization
+     * steps.
+     */
+    private void replaceConstants() {
+        for (int reg = 0; reg < regCount; reg++) {
+            if (latticeValues[reg] != CONSTANT) {
+                continue;
+            }
+            if (!(latticeConstants[reg] instanceof TypedConstant)) {
+                // We can't do much with these
+                continue;
+            }
+
+            SsaInsn defn = ssaMeth.getDefinitionForRegister(reg);
+            TypeBearer typeBearer = defn.getResult().getTypeBearer();
+
+            if (typeBearer.isConstant()) {
+                /*
+                 * The definition was a constant already.
+                 * The uses should be as well.
+                 */
+                continue;
+            }
+
+            // Update the destination RegisterSpec with the constant value
+            RegisterSpec dest = defn.getResult();
+            RegisterSpec newDest
+                    = dest.withType((TypedConstant)latticeConstants[reg]);
+            defn.setResult(newDest);
+
+            /*
+             * Update the sources RegisterSpec's of all non-move uses.
+             * These will be used in later steps.
+             */
+            for (SsaInsn insn : ssaMeth.getUseListForRegister(reg)) {
+                if (insn.isPhiOrMove()) {
+                    continue;
+                }
+
+                NormalSsaInsn nInsn = (NormalSsaInsn) insn;
+                RegisterSpecList sources = insn.getSources();
+
+                int index = sources.indexOfRegister(reg);
+
+                RegisterSpec spec = sources.get(index);
+                RegisterSpec newSpec
+                        = spec.withType((TypedConstant)latticeConstants[reg]);
+
+                nInsn.changeOneSource(index, newSpec);
+            }
+        }
+    }
+
+    /**
+     * Replaces branches that have constant conditions with gotos
+     */
+    private void replaceBranches() {
+        for (SsaInsn insn : branchWorklist) {
+            // Find if a successor block is never executed
+            int oldSuccessor = -1;
+            SsaBasicBlock block = insn.getBlock();
+            int successorSize = block.getSuccessorList().size();
+            for (int i = 0; i < successorSize; i++) {
+                int successorBlock = block.getSuccessorList().get(i);
+                if (!executableBlocks.get(successorBlock)) {
+                    oldSuccessor = successorBlock;
+                }
+            }
+
+            /*
+             * Prune branches that have already been handled and ones that no
+             * longer have constant conditions (no nonexecutable successors)
+             */
+            if (successorSize != 2 || oldSuccessor == -1) continue;
+
+            // Replace branch with goto
+            Insn originalRopInsn = insn.getOriginalRopInsn();
+            block.replaceLastInsn(new PlainInsn(Rops.GOTO,
+                originalRopInsn.getPosition(), null, RegisterSpecList.EMPTY));
+            block.removeSuccessor(oldSuccessor);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/SetFactory.java b/dx/src/com/android/dx/ssa/SetFactory.java
new file mode 100644
index 0000000..92e965f
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/SetFactory.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.util.BitIntSet;
+import com.android.dx.util.IntSet;
+import com.android.dx.util.ListIntSet;
+
+
+/**
+ * Makes int sets for various parts of the optimizer.
+ */
+public final class SetFactory {
+
+    /**
+     * BitIntSet/ListIntSet threshold for dominance frontier sets. These
+     * sets are kept per basic block until phi placement and tend to be,
+     * like the CFG itself, very sparse at large sizes.
+     *
+     * A value of 3072 here is somewhere around 1.125mb of total bitset size.
+     */
+    private static final int DOMFRONT_SET_THRESHOLD_SIZE = 3072;
+
+    /**
+     * BitIntSet/ListIntSet threshold for interference graph sets. These
+     * sets are kept per register until register allocation is done.
+     *
+     * A value of 3072 here is somewhere around 1.125mb of total bitset size.
+     */
+    private static final int INTERFERENCE_SET_THRESHOLD_SIZE = 3072;
+
+    /**
+     * BitIntSet/ListIntSet threshold for the live in/out sets kept by
+     * {@link SsaBasicBlock}. These are sets of SSA registers kept per basic
+     * block during register allocation.
+     *
+     * The total size of a bitset for this would be the count of blocks
+     * times the size of registers. The threshold value here is merely
+     * the register count, which is typically on the order of the block
+     * count as well.
+     */
+    private static final int LIVENESS_SET_THRESHOLD_SIZE = 3072;
+
+
+    /**
+     * Make IntSet for the dominance-frontier sets.
+     *
+     * @param szBlocks {@code >=0;} count of basic blocks in method
+     * @return {@code non-null;} appropriate set
+     */
+    /*package*/ static IntSet makeDomFrontSet(int szBlocks) {
+        return szBlocks <= DOMFRONT_SET_THRESHOLD_SIZE
+                ? new BitIntSet(szBlocks)
+                : new ListIntSet();
+    }
+
+    /**
+     * Make IntSet for the interference graph sets. Public because
+     * InterferenceGraph is in another package.
+     *
+     * @param countRegs {@code >=0;} count of SSA registers used in method
+     * @return {@code non-null;} appropriate set
+     */
+    public static IntSet makeInterferenceSet(int countRegs) {
+        return countRegs <= INTERFERENCE_SET_THRESHOLD_SIZE
+                ? new BitIntSet(countRegs)
+                : new ListIntSet();
+    }
+
+    /**
+     * Make IntSet for register live in/out sets.
+     *
+     * @param countRegs {@code >=0;} count of SSA registers used in method
+     * @return {@code non-null;} appropriate set
+     */
+    /*package*/ static IntSet makeLivenessSet(int countRegs) {
+        return countRegs <= LIVENESS_SET_THRESHOLD_SIZE
+                ? new BitIntSet(countRegs)
+                : new ListIntSet();
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/SsaBasicBlock.java b/dx/src/com/android/dx/ssa/SsaBasicBlock.java
new file mode 100644
index 0000000..0ac618b
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/SsaBasicBlock.java
@@ -0,0 +1,1011 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.InsnList;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+import com.android.dx.util.IntSet;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * An SSA representation of a basic block.
+ */
+public final class SsaBasicBlock {
+    /**
+     * {@code non-null;} comparator for instances of this class that
+     * just compares block labels
+     */
+    public static final Comparator<SsaBasicBlock> LABEL_COMPARATOR =
+        new LabelComparator();
+
+    /** {@code non-null;} insn list associated with this instance */
+    private final ArrayList<SsaInsn> insns;
+
+    /** {@code non-null;} predecessor set (by block list index) */
+    private BitSet predecessors;
+
+    /** {@code non-null;} successor set (by block list index) */
+    private BitSet successors;
+
+    /**
+     * {@code non-null;} ordered successor list
+     * (same block may be listed more than once)
+     */
+    private IntList successorList;
+
+    /**
+     * block list index of primary successor, or {@code -1} for no primary
+     * successor
+     */
+    private int primarySuccessor = -1;
+
+    /** label of block in rop form */
+    private final int ropLabel;
+
+    /** {@code non-null;} method we belong to */
+    private final SsaMethod parent;
+
+    /** our index into parent.getBlock() */
+    private final int index;
+
+    /** list of dom children */
+    private final ArrayList<SsaBasicBlock> domChildren;
+
+    /**
+     * the number of moves added to the end of the block during the
+     * phi-removal process. Retained for subsequent move scheduling.
+     */
+    private int movesFromPhisAtEnd = 0;
+
+    /**
+     * the number of moves added to the beginning of the block during the
+     * phi-removal process. Retained for subsequent move scheduling.
+     */
+    private int movesFromPhisAtBeginning = 0;
+
+    /**
+     * {@code null-ok;} indexed by reg: the regs that are live-in at
+     * this block
+     */
+    private IntSet liveIn;
+
+    /**
+     * {@code null-ok;} indexed by reg: the regs that are live-out at
+     * this block
+     */
+    private IntSet liveOut;
+
+    /**
+     * Creates a new empty basic block.
+     *
+     * @param basicBlockIndex index this block will have
+     * @param ropLabel original rop-form label
+     * @param parent method of this block
+     */
+    public SsaBasicBlock(final int basicBlockIndex, final int ropLabel,
+            final SsaMethod parent) {
+        this.parent = parent;
+        this.index = basicBlockIndex;
+        this.insns = new ArrayList<SsaInsn>();
+        this.ropLabel = ropLabel;
+
+        this.predecessors = new BitSet(parent.getBlocks().size());
+        this.successors = new BitSet(parent.getBlocks().size());
+        this.successorList = new IntList();
+
+        domChildren = new ArrayList<SsaBasicBlock>();
+    }
+
+    /**
+     * Creates a new SSA basic block from a ROP form basic block.
+     *
+     * @param rmeth original method
+     * @param basicBlockIndex index this block will have
+     * @param parent method of this block predecessor set will be
+     * updated
+     * @return new instance
+     */
+    public static SsaBasicBlock newFromRop(RopMethod rmeth,
+            int basicBlockIndex, final SsaMethod parent) {
+        BasicBlockList ropBlocks = rmeth.getBlocks();
+        BasicBlock bb = ropBlocks.get(basicBlockIndex);
+        SsaBasicBlock result =
+            new SsaBasicBlock(basicBlockIndex, bb.getLabel(), parent);
+        InsnList ropInsns = bb.getInsns();
+
+        result.insns.ensureCapacity(ropInsns.size());
+
+        for (int i = 0, sz = ropInsns.size() ; i < sz ; i++) {
+            result.insns.add(new NormalSsaInsn (ropInsns.get(i), result));
+        }
+
+        result.predecessors = SsaMethod.bitSetFromLabelList(
+                ropBlocks,
+                rmeth.labelToPredecessors(bb.getLabel()));
+
+        result.successors
+                = SsaMethod.bitSetFromLabelList(ropBlocks, bb.getSuccessors());
+
+        result.successorList
+                = SsaMethod.indexListFromLabelList(ropBlocks,
+                    bb.getSuccessors());
+
+        if (result.successorList.size() != 0) {
+            int primarySuccessor = bb.getPrimarySuccessor();
+
+            result.primarySuccessor = (primarySuccessor < 0)
+                    ? -1 : ropBlocks.indexOfLabel(primarySuccessor);
+        }
+
+        return result;
+    }
+
+    /**
+     * Adds a basic block as a dom child for this block. Used when constructing
+     * the dom tree.
+     *
+     * @param child {@code non-null;} new dom child
+     */
+    public void addDomChild(SsaBasicBlock child) {
+        domChildren.add(child);
+    }
+
+    /**
+     * Gets the dom children for this node. Don't modify this list.
+     *
+     * @return {@code non-null;} list of dom children
+     */
+    public ArrayList<SsaBasicBlock> getDomChildren() {
+        return domChildren;
+    }
+
+    /**
+     * Adds a phi insn to the beginning of this block. The result type of
+     * the phi will be set to void, to indicate that it's currently unknown.
+     *
+     * @param reg {@code >=0;} result reg
+     */
+    public void addPhiInsnForReg(int reg) {
+        insns.add(0, new PhiInsn(reg, this));
+    }
+
+    /**
+     * Adds a phi insn to the beginning of this block. This is to be used
+     * when the result type or local-association can be determined at phi
+     * insert time.
+     *
+     * @param resultSpec {@code non-null;} reg
+     */
+    public void addPhiInsnForReg(RegisterSpec resultSpec) {
+        insns.add(0, new PhiInsn(resultSpec, this));
+    }
+
+    /**
+     * Adds an insn to the head of this basic block, just after any phi
+     * insns.
+     *
+     * @param insn {@code non-null;} rop-form insn to add
+     */
+    public void addInsnToHead(Insn insn) {
+        SsaInsn newInsn = SsaInsn.makeFromRop(insn, this);
+        insns.add(getCountPhiInsns(), newInsn);
+        parent.onInsnAdded(newInsn);
+    }
+
+    /**
+     * Replaces the last insn in this block. The provided insn must have
+     * some branchingness.
+     *
+     * @param insn {@code non-null;} rop-form insn to add, which must branch.
+     */
+    public void replaceLastInsn(Insn insn) {
+        if (insn.getOpcode().getBranchingness() == Rop.BRANCH_NONE) {
+            throw new IllegalArgumentException("last insn must branch");
+        }
+
+        SsaInsn oldInsn = insns.get(insns.size() - 1);
+        SsaInsn newInsn = SsaInsn.makeFromRop(insn, this);
+
+        insns.set(insns.size() - 1, newInsn);
+
+        parent.onInsnRemoved(oldInsn);
+        parent.onInsnAdded(newInsn);
+    }
+
+    /**
+     * Visits each phi insn.
+     *
+     * @param v {@code non-null;} the callback
+     */
+    public void forEachPhiInsn(PhiInsn.Visitor v) {
+        int sz = insns.size();
+
+        for (int i = 0; i < sz; i++) {
+            SsaInsn insn = insns.get(i);
+            if (insn instanceof PhiInsn) {
+                v.visitPhiInsn((PhiInsn) insn);
+            } else {
+                /*
+                 * Presently we assume PhiInsn's are in a continuous
+                 * block at the top of the list
+                 */
+                break;
+            }
+        }
+    }
+
+    /**
+     * Deletes all phi insns. Do this after adding appropriate move insns.
+     */
+    public void removeAllPhiInsns() {
+        /*
+         * Presently we assume PhiInsn's are in a continuous
+         * block at the top of the list.
+         */
+
+        insns.subList(0, getCountPhiInsns()).clear();
+    }
+
+    /**
+     * Gets the number of phi insns at the top of this basic block.
+     *
+     * @return count of phi insns
+     */
+    private int getCountPhiInsns() {
+        int countPhiInsns;
+
+        int sz = insns.size();
+        for (countPhiInsns = 0; countPhiInsns < sz; countPhiInsns++) {
+            SsaInsn insn = insns.get(countPhiInsns);
+            if (!(insn instanceof PhiInsn)) {
+                break;
+            }
+        }
+
+        return countPhiInsns;
+    }
+
+    /**
+     * @return {@code non-null;} the (mutable) instruction list for this block,
+     * with phi insns at the beginning
+     */
+    public ArrayList<SsaInsn> getInsns() {
+        return insns;
+    }
+
+    /**
+     * @return {@code non-null;} the (mutable) list of phi insns for this block
+     */
+    public List<SsaInsn> getPhiInsns() {
+        return insns.subList(0, getCountPhiInsns());
+    }
+
+    /**
+     * @return the block index of this block
+     */
+    public int getIndex() {
+        return index;
+    }
+
+    /**
+     * @return the label of this block in rop form
+     */
+    public int getRopLabel() {
+        return ropLabel;
+    }
+
+    /**
+     * @return the label of this block in rop form as a hex string
+     */
+    public String getRopLabelString() {
+        return Hex.u2(ropLabel);
+    }
+
+    /**
+     * @return {@code non-null;} predecessors set, indexed by block index
+     */
+    public BitSet getPredecessors() {
+        return predecessors;
+    }
+
+    /**
+     * @return {@code non-null;} successors set, indexed by block index
+     */
+    public BitSet getSuccessors() {
+        return successors;
+    }
+
+    /**
+     * @return {@code non-null;} ordered successor list, containing block
+     * indicies
+     */
+    public IntList getSuccessorList() {
+        return successorList;
+    }
+
+    /**
+     * @return {@code >= -1;} block index of primary successor or
+     * {@code -1} if no primary successor
+     */
+    public int getPrimarySuccessorIndex() {
+        return primarySuccessor;
+    }
+
+    /**
+     * @return rop label of primary successor
+     */
+    public int getPrimarySuccessorRopLabel() {
+        return parent.blockIndexToRopLabel(primarySuccessor);
+    }
+
+    /**
+     * @return {@code null-ok;} the primary successor block or {@code null}
+     * if there is none
+     */
+    public SsaBasicBlock getPrimarySuccessor() {
+        if (primarySuccessor < 0) {
+            return null;
+        } else {
+            return parent.getBlocks().get(primarySuccessor);
+        }
+    }
+
+    /**
+     * @return successor list of rop labels
+     */
+    public IntList getRopLabelSuccessorList() {
+        IntList result = new IntList(successorList.size());
+
+        int sz = successorList.size();
+
+        for (int i = 0; i < sz; i++) {
+            result.add(parent.blockIndexToRopLabel(successorList.get(i)));
+        }
+        return result;
+    }
+
+    /**
+     * @return {@code non-null;} method that contains this block
+     */
+    public SsaMethod getParent() {
+        return parent;
+    }
+
+    /**
+     * Inserts a new empty GOTO block as a predecessor to this block.
+     * All previous predecessors will be predecessors to the new block.
+     *
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public SsaBasicBlock insertNewPredecessor() {
+        SsaBasicBlock newPred = parent.makeNewGotoBlock();
+
+        // Update the new block.
+        newPred.predecessors = predecessors;
+        newPred.successors.set(index) ;
+        newPred.successorList.add(index);
+        newPred.primarySuccessor = index;
+
+
+        // Update us.
+        predecessors = new BitSet(parent.getBlocks().size());
+        predecessors.set(newPred.index);
+
+        // Update our (soon-to-be) old predecessors.
+        for (int i = newPred.predecessors.nextSetBit(0); i >= 0;
+                i = newPred.predecessors.nextSetBit(i + 1)) {
+
+            SsaBasicBlock predBlock = parent.getBlocks().get(i);
+
+            predBlock.replaceSuccessor(index, newPred.index);
+        }
+
+        return newPred;
+    }
+
+    /**
+     * Constructs and inserts a new empty GOTO block {@code Z} between
+     * this block ({@code A}) and a current successor block
+     * ({@code B}). The new block will replace B as A's successor and
+     * A as B's predecessor. A and B will no longer be directly connected.
+     * If B is listed as a successor multiple times, all references
+     * are replaced.
+     *
+     * @param other current successor (B)
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public SsaBasicBlock insertNewSuccessor(SsaBasicBlock other) {
+        SsaBasicBlock newSucc = parent.makeNewGotoBlock();
+
+        if (!successors.get(other.index)) {
+            throw new RuntimeException("Block " + other.getRopLabelString()
+                    + " not successor of " + getRopLabelString());
+        }
+
+        // Update the new block.
+        newSucc.predecessors.set(this.index);
+        newSucc.successors.set(other.index) ;
+        newSucc.successorList.add(other.index);
+        newSucc.primarySuccessor = other.index;
+
+        // Update us.
+        for (int i = successorList.size() - 1 ;  i >= 0; i--) {
+            if (successorList.get(i) == other.index) {
+                successorList.set(i, newSucc.index);
+            }
+        }
+
+        if (primarySuccessor == other.index) {
+            primarySuccessor = newSucc.index;
+        }
+        successors.clear(other.index);
+        successors.set(newSucc.index);
+
+        // Update "other".
+        other.predecessors.set(newSucc.index);
+        other.predecessors.set(index, successors.get(other.index));
+
+        return newSucc;
+    }
+
+    /**
+     * Replaces an old successor with a new successor. This will throw
+     * RuntimeException if {@code oldIndex} was not a successor.
+     *
+     * @param oldIndex index of old successor block
+     * @param newIndex index of new successor block
+     */
+    public void replaceSuccessor(int oldIndex, int newIndex) {
+        if (oldIndex == newIndex) {
+            return;
+        }
+
+        // Update us.
+        successors.set(newIndex);
+
+        if (primarySuccessor == oldIndex) {
+            primarySuccessor = newIndex;
+        }
+
+        for (int i = successorList.size() - 1 ;  i >= 0; i--) {
+            if (successorList.get(i) == oldIndex) {
+                successorList.set(i, newIndex);
+            }
+        }
+
+        successors.clear(oldIndex);
+
+        // Update new successor.
+        parent.getBlocks().get(newIndex).predecessors.set(index);
+
+        // Update old successor.
+        parent.getBlocks().get(oldIndex).predecessors.clear(index);
+    }
+
+    /**
+     * Removes a successor from this block's successor list.
+     *
+     * @param oldIndex index of successor block to remove
+     */
+    public void removeSuccessor(int oldIndex) {
+        int removeIndex = 0;
+
+        for (int i = successorList.size() - 1; i >= 0; i--) {
+            if (successorList.get(i) == oldIndex) {
+                removeIndex = i;
+            } else {
+                primarySuccessor = successorList.get(i);
+            }
+        }
+
+        successorList.removeIndex(removeIndex);
+        successors.clear(oldIndex);
+        parent.getBlocks().get(oldIndex).predecessors.clear(index);
+    }
+
+    /**
+     * Attaches block to an exit block if necessary. If this block
+     * is not an exit predecessor or is the exit block, this block does
+     * nothing. For use by {@link com.android.dx.ssa.SsaMethod#makeExitBlock}
+     *
+     * @param exitBlock {@code non-null;} exit block
+     */
+    public void exitBlockFixup(SsaBasicBlock exitBlock) {
+        if (this == exitBlock) {
+            return;
+        }
+
+        if (successorList.size() == 0) {
+            /*
+             * This is an exit predecessor.
+             * Set the successor to the exit block
+             */
+            successors.set(exitBlock.index);
+            successorList.add(exitBlock.index);
+            primarySuccessor = exitBlock.index;
+            exitBlock.predecessors.set(this.index);
+        }
+    }
+
+    /**
+     * Adds a move instruction to the end of this basic block, just
+     * before the last instruction. If the result of the final instruction
+     * is the source in question, then the move is placed at the beginning of
+     * the primary successor block. This is for unversioned registers.
+     *
+     * @param result move destination
+     * @param source move source
+     */
+    public void addMoveToEnd(RegisterSpec result, RegisterSpec source) {
+        /*
+         * Check that there are no other successors otherwise we may
+         * insert a move that affects those (b/69128828).
+         */
+        if (successors.cardinality() > 1) {
+            throw new IllegalStateException("Inserting a move to a block with multiple successors");
+        }
+
+        if (result.getReg() == source.getReg()) {
+            // Sometimes we end up with no-op moves. Ignore them here.
+            return;
+        }
+
+        /*
+         * The last Insn has to be a normal SSA insn: a phi can't branch
+         * or return or cause an exception, etc.
+         */
+        NormalSsaInsn lastInsn;
+        lastInsn = (NormalSsaInsn)insns.get(insns.size()-1);
+
+        if (lastInsn.getResult() != null || lastInsn.getSources().size() > 0) {
+            /*
+             * The final insn in this block has a source or result
+             * register, and the moves we may need to place and
+             * schedule may interfere. We need to insert this
+             * instruction at the beginning of the primary successor
+             * block instead. We know this is safe, because when we
+             * edge-split earlier, we ensured that each successor has
+             * only us as a predecessor.
+             */
+
+            for (int i = successors.nextSetBit(0)
+                    ; i >= 0
+                    ; i = successors.nextSetBit(i + 1)) {
+
+                SsaBasicBlock succ;
+
+                succ = parent.getBlocks().get(i);
+                succ.addMoveToBeginning(result, source);
+            }
+        } else {
+            /*
+             * We can safely add a move to the end of the block just
+             * before the last instruction, because the final insn does
+             * not assign to anything.
+             */
+            RegisterSpecList sources = RegisterSpecList.make(source);
+            NormalSsaInsn toAdd = new NormalSsaInsn(
+                    new PlainInsn(Rops.opMove(result.getType()),
+                            SourcePosition.NO_INFO, result, sources), this);
+
+            insns.add(insns.size() - 1, toAdd);
+
+            movesFromPhisAtEnd++;
+        }
+    }
+
+    /**
+     * Adds a move instruction after the phi insn block.
+     *
+     * @param result move destination
+     * @param source move source
+     */
+    public void addMoveToBeginning (RegisterSpec result, RegisterSpec source) {
+        if (result.getReg() == source.getReg()) {
+            // Sometimes we end up with no-op moves. Ignore them here.
+            return;
+        }
+
+        RegisterSpecList sources = RegisterSpecList.make(source);
+        NormalSsaInsn toAdd = new NormalSsaInsn(
+                new PlainInsn(Rops.opMove(result.getType()),
+                        SourcePosition.NO_INFO, result, sources), this);
+
+        insns.add(getCountPhiInsns(), toAdd);
+        movesFromPhisAtBeginning++;
+    }
+
+    /**
+     * Sets the register as used in a bitset, taking into account its
+     * category/width.
+     *
+     * @param regsUsed set, indexed by register number
+     * @param rs register to mark as used
+     */
+    private static void setRegsUsed (BitSet regsUsed, RegisterSpec rs) {
+        regsUsed.set(rs.getReg());
+        if (rs.getCategory() > 1) {
+            regsUsed.set(rs.getReg() + 1);
+        }
+    }
+
+    /**
+     * Checks to see if the register is used in a bitset, taking
+     * into account its category/width.
+     *
+     * @param regsUsed set, indexed by register number
+     * @param rs register to mark as used
+     * @return true if register is fully or partially (for the case of wide
+     * registers) used.
+     */
+    private static boolean checkRegUsed (BitSet regsUsed, RegisterSpec rs) {
+        int reg = rs.getReg();
+        int category = rs.getCategory();
+
+        return regsUsed.get(reg)
+                || (category == 2 ? regsUsed.get(reg + 1) : false);
+    }
+
+    /**
+     * Ensures that all move operations in this block occur such that
+     * reads of any register happen before writes to that register.
+     * NOTE: caller is expected to returnSpareRegisters()!
+     *
+     * TODO: See Briggs, et al "Practical Improvements to the Construction and
+     * Destruction of Static Single Assignment Form" section 5. a) This can
+     * be done in three passes.
+     *
+     * @param toSchedule List of instructions. Must consist only of moves.
+     */
+    private void scheduleUseBeforeAssigned(List<SsaInsn> toSchedule) {
+        BitSet regsUsedAsSources = new BitSet(parent.getRegCount());
+
+        // TODO: Get rid of this.
+        BitSet regsUsedAsResults = new BitSet(parent.getRegCount());
+
+        int sz = toSchedule.size();
+
+        int insertPlace = 0;
+
+        while (insertPlace < sz) {
+            int oldInsertPlace = insertPlace;
+
+            // Record all registers used as sources in this block.
+            for (int i = insertPlace; i < sz; i++) {
+                setRegsUsed(regsUsedAsSources,
+                        toSchedule.get(i).getSources().get(0));
+
+                setRegsUsed(regsUsedAsResults,
+                        toSchedule.get(i).getResult());
+            }
+
+            /*
+             * If there are no circular dependencies, then there exists
+             * n instructions where n > 1 whose result is not used as a source.
+             */
+            for (int i = insertPlace; i <sz; i++) {
+                SsaInsn insn = toSchedule.get(i);
+
+                /*
+                 * Move these n registers to the front, since they overwrite
+                 * nothing.
+                 */
+                if (!checkRegUsed(regsUsedAsSources, insn.getResult())) {
+                    Collections.swap(toSchedule, i, insertPlace++);
+                }
+            }
+
+            /*
+             * If we've made no progress in this iteration, there's a
+             * circular dependency. Split it using the temp reg.
+             */
+            if (oldInsertPlace == insertPlace) {
+
+                SsaInsn insnToSplit = null;
+
+                // Find an insn whose result is used as a source.
+                for (int i = insertPlace; i < sz; i++) {
+                    SsaInsn insn = toSchedule.get(i);
+                    if (checkRegUsed(regsUsedAsSources, insn.getResult())
+                            && checkRegUsed(regsUsedAsResults,
+                                insn.getSources().get(0))) {
+
+                        insnToSplit = insn;
+                        /*
+                         * We're going to split this insn; move it to the
+                         * front.
+                         */
+                        Collections.swap(toSchedule, insertPlace, i);
+                        break;
+                    }
+                }
+
+                // At least one insn will be set above.
+
+                RegisterSpec result = insnToSplit.getResult();
+                RegisterSpec tempSpec = result.withReg(
+                        parent.borrowSpareRegister(result.getCategory()));
+
+                NormalSsaInsn toAdd = new NormalSsaInsn(
+                        new PlainInsn(Rops.opMove(result.getType()),
+                                SourcePosition.NO_INFO,
+                                tempSpec,
+                                insnToSplit.getSources()), this);
+
+                toSchedule.add(insertPlace++, toAdd);
+
+                RegisterSpecList newSources = RegisterSpecList.make(tempSpec);
+
+                NormalSsaInsn toReplace = new NormalSsaInsn(
+                        new PlainInsn(Rops.opMove(result.getType()),
+                                SourcePosition.NO_INFO,
+                                result,
+                                newSources), this);
+
+                toSchedule.set(insertPlace, toReplace);
+
+                // The size changed.
+                sz = toSchedule.size();
+            }
+
+            regsUsedAsSources.clear();
+            regsUsedAsResults.clear();
+        }
+    }
+
+    /**
+     * Adds {@code regV} to the live-out list for this block. This is called
+     * by the liveness analyzer.
+     *
+     * @param regV register that is live-out for this block.
+     */
+    public void addLiveOut (int regV) {
+        if (liveOut == null) {
+            liveOut = SetFactory.makeLivenessSet(parent.getRegCount());
+        }
+
+        liveOut.add(regV);
+    }
+
+    /**
+     * Adds {@code regV} to the live-in list for this block. This is
+     * called by the liveness analyzer.
+     *
+     * @param regV register that is live-in for this block.
+     */
+    public void addLiveIn (int regV) {
+        if (liveIn == null) {
+            liveIn = SetFactory.makeLivenessSet(parent.getRegCount());
+        }
+
+        liveIn.add(regV);
+    }
+
+    /**
+     * Returns the set of live-in registers. Valid after register
+     * interference graph has been generated, otherwise empty.
+     *
+     * @return {@code non-null;} live-in register set.
+     */
+    public IntSet getLiveInRegs() {
+        if (liveIn == null) {
+            liveIn = SetFactory.makeLivenessSet(parent.getRegCount());
+        }
+        return liveIn;
+    }
+
+    /**
+     * Returns the set of live-out registers. Valid after register
+     * interference graph has been generated, otherwise empty.
+     *
+     * @return {@code non-null;} live-out register set
+     */
+    public IntSet getLiveOutRegs() {
+        if (liveOut == null) {
+            liveOut = SetFactory.makeLivenessSet(parent.getRegCount());
+        }
+        return liveOut;
+    }
+
+    /**
+     * @return true if this is the one-and-only exit block for this method
+     */
+    public boolean isExitBlock() {
+        return index == parent.getExitBlockIndex();
+    }
+
+    /**
+     * Sorts move instructions added via {@code addMoveToEnd} during
+     * phi removal so that results don't overwrite sources that are used.
+     * For use after all phis have been removed and all calls to
+     * addMoveToEnd() have been made.<p>
+     *
+     * This is necessary because copy-propogation may have left us in a state
+     * where the same basic block has the same register as a phi operand
+     * and a result. In this case, the register in the phi operand always
+     * refers value before any other phis have executed.
+     */
+    public void scheduleMovesFromPhis() {
+        if (movesFromPhisAtBeginning > 1) {
+            List<SsaInsn> toSchedule;
+
+            toSchedule = insns.subList(0, movesFromPhisAtBeginning);
+
+            scheduleUseBeforeAssigned(toSchedule);
+
+            SsaInsn firstNonPhiMoveInsn = insns.get(movesFromPhisAtBeginning);
+
+            /*
+             * TODO: It's actually possible that this case never happens,
+             * because a move-exception block, having only one predecessor
+             * in SSA form, perhaps is never on a dominance frontier.
+             */
+            if (firstNonPhiMoveInsn.isMoveException()) {
+                if (true) {
+                    /*
+                     * We've yet to observe this case, and if it can
+                     * occur the code written to handle it probably
+                     * does not work.
+                     */
+                    throw new RuntimeException(
+                            "Unexpected: moves from "
+                                    +"phis before move-exception");
+                } else {
+                    /*
+                     * A move-exception insn must be placed first in this block
+                     * We need to move it there, and deal with possible
+                     * interference.
+                     */
+                    boolean moveExceptionInterferes = false;
+
+                    int moveExceptionResult
+                            = firstNonPhiMoveInsn.getResult().getReg();
+
+                    /*
+                     * Does the move-exception result reg interfere with the
+                     * phi moves?
+                     */
+                    for (SsaInsn insn : toSchedule) {
+                        if (insn.isResultReg(moveExceptionResult)
+                                || insn.isRegASource(moveExceptionResult)) {
+                            moveExceptionInterferes = true;
+                            break;
+                        }
+                    }
+
+                    if (!moveExceptionInterferes) {
+                        // This is the easy case.
+                        insns.remove(movesFromPhisAtBeginning);
+                        insns.add(0, firstNonPhiMoveInsn);
+                    } else {
+                        /*
+                         * We need to move the result to a spare reg
+                         * and move it back.
+                         */
+                        RegisterSpec originalResultSpec
+                            = firstNonPhiMoveInsn.getResult();
+                        int spareRegister = parent.borrowSpareRegister(
+                                originalResultSpec.getCategory());
+
+                        // We now move it to a spare register.
+                        firstNonPhiMoveInsn.changeResultReg(spareRegister);
+                        RegisterSpec tempSpec =
+                            firstNonPhiMoveInsn.getResult();
+
+                        insns.add(0, firstNonPhiMoveInsn);
+
+                        // And here we move it back.
+
+                        NormalSsaInsn toAdd = new NormalSsaInsn(
+                                new PlainInsn(
+                                        Rops.opMove(tempSpec.getType()),
+                                        SourcePosition.NO_INFO,
+                                        originalResultSpec,
+                                        RegisterSpecList.make(tempSpec)),
+                                this);
+
+
+                        /*
+                         * Place it immediately after the phi-moves,
+                         * overwriting the move-exception that was there.
+                         */
+                        insns.set(movesFromPhisAtBeginning + 1, toAdd);
+                    }
+                }
+            }
+        }
+
+        if (movesFromPhisAtEnd > 1) {
+            scheduleUseBeforeAssigned(
+                    insns.subList(insns.size() - movesFromPhisAtEnd - 1,
+                                insns.size() - 1));
+        }
+
+        // Return registers borrowed here and in scheduleUseBeforeAssigned().
+        parent.returnSpareRegisters();
+
+    }
+
+    /**
+     * Visits all insns in this block.
+     *
+     * @param visitor {@code non-null;} callback interface
+     */
+    public void forEachInsn(SsaInsn.Visitor visitor) {
+        // This gets called a LOT, and not using an iterator
+        // saves a lot of allocations and reduces memory usage
+        int len = insns.size();
+        for (int i = 0; i < len; i++) {
+            insns.get(i).accept(visitor);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "{" + index + ":" + Hex.u2(ropLabel) + '}';
+    }
+
+    /**
+     * Visitor interface for basic blocks.
+     */
+    public interface Visitor {
+        /**
+         * Indicates a block has been visited by an iterator method.
+         *
+         * @param v {@code non-null;} block visited
+         * @param parent {@code null-ok;} parent node if applicable
+         */
+        void visitBlock (SsaBasicBlock v, SsaBasicBlock parent);
+    }
+
+    /**
+     * Label comparator.
+     */
+    public static final class LabelComparator
+            implements Comparator<SsaBasicBlock> {
+        /** {@inheritDoc} */
+        @Override
+        public int compare(SsaBasicBlock b1, SsaBasicBlock b2) {
+            int label1 = b1.ropLabel;
+            int label2 = b2.ropLabel;
+
+            if (label1 < label2) {
+                return -1;
+            } else if (label1 > label2) {
+                return 1;
+            } else {
+                return 0;
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/SsaConverter.java b/dx/src/com/android/dx/ssa/SsaConverter.java
new file mode 100644
index 0000000..a7d044c
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/SsaConverter.java
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.util.IntIterator;
+import java.util.ArrayList;
+import java.util.BitSet;
+
+/**
+ * Converts ROP methods to SSA Methods
+ */
+public class SsaConverter {
+    public static final boolean DEBUG = false;
+
+    /**
+     * Returns an SSA representation, edge-split and with phi
+     * functions placed.
+     *
+     * @param rmeth input
+     * @param paramWidth the total width, in register-units, of the method's
+     * parameters
+     * @param isStatic {@code true} if this method has no {@code this}
+     * pointer argument
+     * @return output in SSA form
+     */
+    public static SsaMethod convertToSsaMethod(RopMethod rmeth,
+            int paramWidth, boolean isStatic) {
+        SsaMethod result
+            = SsaMethod.newFromRopMethod(rmeth, paramWidth, isStatic);
+
+        edgeSplit(result);
+
+        LocalVariableInfo localInfo = LocalVariableExtractor.extract(result);
+
+        placePhiFunctions(result, localInfo, 0);
+        new SsaRenamer(result).run();
+
+        /*
+         * The exit block, added here, is not considered for edge splitting
+         * or phi placement since no actual control flows to it.
+         */
+        result.makeExitBlock();
+
+        return result;
+    }
+
+    /**
+     * Updates an SSA representation, placing phi functions and renaming all
+     * registers above a certain threshold number.
+     *
+     * @param ssaMeth input
+     * @param threshold registers below this number are unchanged
+     */
+    public static void updateSsaMethod(SsaMethod ssaMeth, int threshold) {
+        LocalVariableInfo localInfo = LocalVariableExtractor.extract(ssaMeth);
+        placePhiFunctions(ssaMeth, localInfo, threshold);
+        new SsaRenamer(ssaMeth, threshold).run();
+    }
+
+    /**
+     * Returns an SSA represention with only the edge-splitter run.
+     *
+     * @param rmeth method to process
+     * @param paramWidth width of all arguments in the method
+     * @param isStatic {@code true} if this method has no {@code this}
+     * pointer argument
+     * @return an SSA represention with only the edge-splitter run
+     */
+    public static SsaMethod testEdgeSplit (RopMethod rmeth, int paramWidth,
+            boolean isStatic) {
+        SsaMethod result;
+
+        result = SsaMethod.newFromRopMethod(rmeth, paramWidth, isStatic);
+
+        edgeSplit(result);
+        return result;
+    }
+
+    /**
+     * Returns an SSA represention with only the steps through the
+     * phi placement run.
+     *
+     * @param rmeth method to process
+     * @param paramWidth width of all arguments in the method
+     * @param isStatic {@code true} if this method has no {@code this}
+     * pointer argument
+     * @return an SSA represention with only the edge-splitter run
+     */
+    public static SsaMethod testPhiPlacement (RopMethod rmeth, int paramWidth,
+            boolean isStatic) {
+        SsaMethod result;
+
+        result = SsaMethod.newFromRopMethod(rmeth, paramWidth, isStatic);
+
+        edgeSplit(result);
+
+        LocalVariableInfo localInfo = LocalVariableExtractor.extract(result);
+
+        placePhiFunctions(result, localInfo, 0);
+        return result;
+    }
+
+    /**
+     * See Appel section 19.1:
+     *
+     * Converts CFG into "edge-split" form, such that each node either a
+     * unique successor or unique predecessor.<p>
+     *
+     * In addition, the SSA form we use enforces a further constraint,
+     * requiring each block with a final instruction that returns a
+     * value to have a primary successor that has no other
+     * predecessor. This ensures move statements can always be
+     * inserted correctly when phi statements are removed.
+     *
+     * @param result method to process
+     */
+    private static void edgeSplit(SsaMethod result) {
+        edgeSplitPredecessors(result);
+        edgeSplitMoveExceptionsAndResults(result);
+        edgeSplitSuccessors(result);
+    }
+
+    /**
+     * Inserts Z nodes as new predecessors for every node that has multiple
+     * successors and multiple predecessors.
+     *
+     * @param result {@code non-null;} method to process
+     */
+    private static void edgeSplitPredecessors(SsaMethod result) {
+        ArrayList<SsaBasicBlock> blocks = result.getBlocks();
+
+        /*
+         * New blocks are added to the end of the block list during
+         * this iteration.
+         */
+        for (int i = blocks.size() - 1; i >= 0; i-- ) {
+            SsaBasicBlock block = blocks.get(i);
+            if (nodeNeedsUniquePredecessor(block)) {
+                block.insertNewPredecessor();
+            }
+        }
+    }
+
+    /**
+     * @param block {@code non-null;} block in question
+     * @return {@code true} if this node needs to have a unique
+     * predecessor created for it
+     */
+    private static boolean nodeNeedsUniquePredecessor(SsaBasicBlock block) {
+        /*
+         * Any block with that has both multiple successors and multiple
+         * predecessors needs a new predecessor node.
+         */
+
+        int countPredecessors = block.getPredecessors().cardinality();
+        int countSuccessors = block.getSuccessors().cardinality();
+
+        return  (countPredecessors > 1 && countSuccessors > 1);
+    }
+
+    /**
+     * In ROP form, move-exception must occur as the first insn in a block
+     * immediately succeeding the insn that could thrown an exception.
+     * We may need room to insert move insns later, so make sure to split
+     * any block that starts with a move-exception such that there is a
+     * unique move-exception block for each predecessor.
+     *
+     * @param ssaMeth method to process
+     */
+    private static void edgeSplitMoveExceptionsAndResults(SsaMethod ssaMeth) {
+        ArrayList<SsaBasicBlock> blocks = ssaMeth.getBlocks();
+
+        /*
+         * New blocks are added to the end of the block list during
+         * this iteration.
+         */
+        for (int i = blocks.size() - 1; i >= 0; i-- ) {
+            SsaBasicBlock block = blocks.get(i);
+
+            /*
+             * Any block that starts with a move-exception and has more than
+             * one predecessor...
+             */
+            if (!block.isExitBlock()
+                    && block.getPredecessors().cardinality() > 1
+                    && block.getInsns().get(0).isMoveException()) {
+
+                // block.getPredecessors() is changed in the loop below.
+                BitSet preds = (BitSet)block.getPredecessors().clone();
+                for (int j = preds.nextSetBit(0); j >= 0;
+                     j = preds.nextSetBit(j + 1)) {
+                    SsaBasicBlock predecessor = blocks.get(j);
+                    SsaBasicBlock zNode
+                        = predecessor.insertNewSuccessor(block);
+
+                    /*
+                     * Make sure to place the move-exception as the
+                     * first insn.
+                     */
+                    zNode.getInsns().add(0, block.getInsns().get(0).clone());
+                }
+
+                // Remove the move-exception from the original block.
+                block.getInsns().remove(0);
+            }
+        }
+    }
+
+    /**
+     * Inserts Z nodes for every node that needs a new
+     * successor.
+     *
+     * @param result {@code non-null;} method to process
+     */
+    private static void edgeSplitSuccessors(SsaMethod result) {
+        ArrayList<SsaBasicBlock> blocks = result.getBlocks();
+
+        /*
+         * New blocks are added to the end of the block list during
+         * this iteration.
+         */
+        for (int i = blocks.size() - 1; i >= 0; i-- ) {
+            SsaBasicBlock block = blocks.get(i);
+
+            // Successors list is modified in loop below.
+            BitSet successors = (BitSet)block.getSuccessors().clone();
+            for (int j = successors.nextSetBit(0);
+                 j >= 0; j = successors.nextSetBit(j+1)) {
+
+                SsaBasicBlock succ = blocks.get(j);
+
+                if (needsNewSuccessor(block, succ)) {
+                    block.insertNewSuccessor(succ);
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns {@code true} if block and successor need a Z-node
+     * between them. Presently, this is {@code true} if either:
+     * <p><ul>
+     * <li> there is a critical edge between block and successor.
+     * <li> the final instruction has any sources or results and the current
+     * successor block has more than one predecessor.
+     * </ul></p>
+     *
+     * @param block predecessor node
+     * @param succ successor node
+     * @return {@code true} if a Z node is needed
+     */
+    private static boolean needsNewSuccessor(SsaBasicBlock block,
+            SsaBasicBlock succ) {
+        ArrayList<SsaInsn> insns = block.getInsns();
+        SsaInsn lastInsn = insns.get(insns.size() - 1);
+
+        // This is to address b/69128828 where the moves associated
+        // with a phi were being propagated along a critical
+        // edge. Consequently, the move instruction inserted was
+        // positioned before the first instruction in the predecessor
+        // block. The generated bytecode was rejected by the ART
+        // verifier.
+        if (block.getSuccessors().cardinality() > 1 && succ.getPredecessors().cardinality() > 1) {
+            return true;
+        }
+
+        return ((lastInsn.getResult() != null)
+                    || (lastInsn.getSources().size() > 0))
+                && succ.getPredecessors().cardinality() > 1;
+    }
+
+    /**
+     * See Appel algorithm 19.6:
+     *
+     * Place Phi functions in appropriate locations.
+     *
+     * @param ssaMeth {@code non-null;} method to process.
+     * Modifications are made in-place.
+     * @param localInfo {@code non-null;} local variable info, used
+     * when placing phis
+     * @param threshold registers below this number are ignored
+     */
+    private static void placePhiFunctions (SsaMethod ssaMeth,
+            LocalVariableInfo localInfo, int threshold) {
+        ArrayList<SsaBasicBlock> ssaBlocks;
+        int regCount;
+        int blockCount;
+
+        ssaBlocks = ssaMeth.getBlocks();
+        blockCount = ssaBlocks.size();
+        regCount = ssaMeth.getRegCount() - threshold;
+
+        DomFront df = new DomFront(ssaMeth);
+        DomFront.DomInfo[] domInfos = df.run();
+
+        // Bit set of registers vs block index "definition sites"
+        BitSet[] defsites = new BitSet[regCount];
+
+        // Bit set of registers vs block index "phi placement sites"
+        BitSet[] phisites = new BitSet[regCount];
+
+        for (int i = 0; i < regCount; i++) {
+            defsites[i] = new BitSet(blockCount);
+            phisites[i] = new BitSet(blockCount);
+        }
+
+        /*
+         * For each register, build a set of all basic blocks where
+         * containing an assignment to that register.
+         */
+        for (int bi = 0, s = ssaBlocks.size(); bi < s; bi++) {
+            SsaBasicBlock b = ssaBlocks.get(bi);
+
+            for (SsaInsn insn : b.getInsns()) {
+                RegisterSpec rs = insn.getResult();
+
+                if (rs != null && rs.getReg() - threshold >= 0) {
+                    defsites[rs.getReg() - threshold].set(bi);
+                }
+            }
+        }
+
+        if (DEBUG) {
+            System.out.println("defsites");
+
+            for (int i = 0; i < regCount; i++) {
+                StringBuilder sb = new StringBuilder();
+                sb.append('v').append(i).append(": ");
+                sb.append(defsites[i].toString());
+                System.out.println(sb);
+            }
+        }
+
+        BitSet worklist;
+
+        /*
+         * For each register, compute all locations for phi placement
+         * based on dominance-frontier algorithm.
+         */
+        for (int reg = 0, s = regCount; reg < s; reg++) {
+            int workBlockIndex;
+
+            /* Worklist set starts out with each node where reg is assigned. */
+
+            worklist = (BitSet) (defsites[reg].clone());
+
+            while (0 <= (workBlockIndex = worklist.nextSetBit(0))) {
+                worklist.clear(workBlockIndex);
+                IntIterator dfIterator
+                    = domInfos[workBlockIndex].dominanceFrontiers.iterator();
+
+                while (dfIterator.hasNext()) {
+                    int dfBlockIndex = dfIterator.next();
+
+                    if (!phisites[reg].get(dfBlockIndex)) {
+                        phisites[reg].set(dfBlockIndex);
+
+                        int tReg = reg + threshold;
+                        RegisterSpec rs
+                            = localInfo.getStarts(dfBlockIndex).get(tReg);
+
+                        if (rs == null) {
+                            ssaBlocks.get(dfBlockIndex).addPhiInsnForReg(tReg);
+                        } else {
+                            ssaBlocks.get(dfBlockIndex).addPhiInsnForReg(rs);
+                        }
+
+                        if (!defsites[reg].get(dfBlockIndex)) {
+                            worklist.set(dfBlockIndex);
+                        }
+                    }
+                }
+            }
+        }
+
+        if (DEBUG) {
+            System.out.println("phisites");
+
+            for (int i = 0; i < regCount; i++) {
+                StringBuilder sb = new StringBuilder();
+                sb.append('v').append(i).append(": ");
+                sb.append(phisites[i].toString());
+                System.out.println(sb);
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/SsaInsn.java b/dx/src/com/android/dx/ssa/SsaInsn.java
new file mode 100644
index 0000000..fb82f2d
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/SsaInsn.java
@@ -0,0 +1,293 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.util.ToHuman;
+
+/**
+ * An instruction in SSA form
+ */
+public abstract class SsaInsn implements ToHuman, Cloneable {
+    /** {@code non-null;} the block that contains this instance */
+    private final SsaBasicBlock block;
+
+    /** {@code null-ok;} result register */
+    private RegisterSpec result;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param result {@code null-ok;} initial result register. May be changed.
+     * @param block {@code non-null;} block containing this insn. Can
+     * never change.
+     */
+    protected SsaInsn(RegisterSpec result, SsaBasicBlock block) {
+        if (block == null) {
+            throw new NullPointerException("block == null");
+        }
+
+        this.block = block;
+        this.result = result;
+    }
+
+    /**
+     * Makes a new SSA insn form a rop insn.
+     *
+     * @param insn {@code non-null;} rop insn
+     * @param block {@code non-null;} owning block
+     * @return {@code non-null;} an appropriately constructed instance
+     */
+    public static SsaInsn makeFromRop(Insn insn, SsaBasicBlock block) {
+        return new NormalSsaInsn(insn, block);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public SsaInsn clone() {
+        try {
+            return (SsaInsn)super.clone();
+        } catch (CloneNotSupportedException ex) {
+            throw new RuntimeException ("unexpected", ex);
+        }
+    }
+
+    /**
+     * Like {@link com.android.dx.rop.code.Insn getResult()}.
+     *
+     * @return result register
+     */
+    public RegisterSpec getResult() {
+        return result;
+    }
+
+    /**
+     * Set the result register.
+     *
+     * @param result {@code non-null;} the new result register
+     */
+    protected void setResult(RegisterSpec result) {
+        if (result == null) {
+            throw new NullPointerException("result == null");
+        }
+
+        this.result = result;
+    }
+
+    /**
+     * Like {@link com.android.dx.rop.code.Insn getSources()}.
+     *
+     * @return {@code non-null;} sources list
+     */
+    abstract public RegisterSpecList getSources();
+
+    /**
+     * Gets the block to which this insn instance belongs.
+     *
+     * @return owning block
+     */
+    public SsaBasicBlock getBlock() {
+        return block;
+    }
+
+    /**
+     * Returns whether or not the specified reg is the result reg.
+     *
+     * @param reg register to test
+     * @return true if there is a result and it is stored in the specified
+     * register
+     */
+    public boolean isResultReg(int reg) {
+        return result != null && result.getReg() == reg;
+    }
+
+
+    /**
+     * Changes the result register if this insn has a result. This is used
+     * during renaming.
+     *
+     * @param reg new result register
+     */
+    public void changeResultReg(int reg) {
+        if (result != null) {
+            result = result.withReg(reg);
+        }
+    }
+
+    /**
+     * Sets the local association for the result of this insn. This is
+     * sometimes updated during the SsaRenamer process.
+     *
+     * @param local {@code null-ok;} new debug/local variable info
+     */
+    public final void setResultLocal(LocalItem local) {
+        LocalItem oldItem = result.getLocalItem();
+
+        if (local != oldItem && (local == null
+                || !local.equals(result.getLocalItem()))) {
+            result = RegisterSpec.makeLocalOptional(
+                    result.getReg(), result.getType(), local);
+        }
+    }
+
+    /**
+     * Map registers after register allocation.
+     *
+     * @param mapper {@code non-null;} mapping from old to new registers
+     */
+    public final void mapRegisters(RegisterMapper mapper) {
+        RegisterSpec oldResult = result;
+
+        result = mapper.map(result);
+        block.getParent().updateOneDefinition(this, oldResult);
+        mapSourceRegisters(mapper);
+    }
+
+    /**
+     * Maps only source registers.
+     *
+     * @param mapper new mapping
+     */
+    abstract public void mapSourceRegisters(RegisterMapper mapper);
+
+    /**
+     * Returns the Rop opcode for this insn, or null if this is a phi insn.
+     *
+     * TODO: Move this up into NormalSsaInsn.
+     *
+     * @return {@code null-ok;} Rop opcode if there is one.
+     */
+    abstract public Rop getOpcode();
+
+    /**
+     * Returns the original Rop insn for this insn, or null if this is
+     * a phi insn.
+     *
+     * TODO: Move this up into NormalSsaInsn.
+     *
+     * @return {@code null-ok;} Rop insn if there is one.
+     */
+    abstract public Insn getOriginalRopInsn();
+
+    /**
+     * Gets the spec of a local variable assignment that occurs at this
+     * instruction, or null if no local variable assignment occurs. This
+     * may be the result register, or for {@code mark-local} insns
+     * it may be the source.
+     *
+     * @see com.android.dx.rop.code.Insn#getLocalAssignment()
+     *
+     * @return {@code null-ok;} a local-associated register spec or null
+     */
+    public RegisterSpec getLocalAssignment() {
+        if (result != null && result.getLocalItem() != null) {
+            return result;
+        }
+
+        return null;
+    }
+
+    /**
+     * Indicates whether the specified register is amongst the registers
+     * used as sources for this instruction.
+     *
+     * @param reg the register in question
+     * @return true if the reg is a source
+     */
+    public boolean isRegASource(int reg) {
+        return null != getSources().specForRegister(reg);
+    }
+
+    /**
+     * Transform back to ROP form.
+     *
+     * TODO: Move this up into NormalSsaInsn.
+     *
+     * @return {@code non-null;} a ROP representation of this instruction, with
+     * updated registers.
+     */
+    public abstract Insn toRopInsn();
+
+    /**
+     * @return true if this is a PhiInsn or a normal move insn
+     */
+    public abstract boolean isPhiOrMove();
+
+    /**
+     * Returns true if this insn is considered to have a side effect beyond
+     * that of assigning to the result reg.
+     *
+     * @return true if this insn is considered to have a side effect beyond
+     * that of assigning to the result reg.
+     */
+    public abstract boolean hasSideEffect();
+
+    /**
+     * @return true if this is a move (but not a move-operand or
+     * move-exception) instruction
+     */
+    public boolean isNormalMoveInsn() {
+        return false;
+    }
+
+    /**
+     * @return true if this is a move-exception instruction.
+     * These instructions must immediately follow a preceeding invoke*
+     */
+    public boolean isMoveException() {
+        return false;
+    }
+
+    /**
+     * @return true if this instruction can throw.
+     */
+    abstract public boolean canThrow();
+
+    /**
+     * Accepts a visitor.
+     *
+     * @param v {@code non-null} the visitor
+     */
+    public abstract void accept(Visitor v);
+
+    /**
+     * Visitor interface for this class.
+     */
+    public static interface Visitor {
+        /**
+         * Any non-phi move instruction
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitMoveInsn(NormalSsaInsn insn);
+
+        /**
+         * Any phi insn
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitPhiInsn(PhiInsn insn);
+
+        /**
+         * Any insn that isn't a move or a phi (which is also a move).
+         * @param insn {@code non-null;} the instruction to visit
+         */
+        public void visitNonMoveInsn(NormalSsaInsn insn);
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/SsaMethod.java b/dx/src/com/android/dx/ssa/SsaMethod.java
new file mode 100644
index 0000000..1ab4a27
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/SsaMethod.java
@@ -0,0 +1,857 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.Insn;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.Stack;
+
+/**
+ * A method in SSA form.
+ */
+public final class SsaMethod {
+    /** basic blocks, indexed by block index */
+    private ArrayList<SsaBasicBlock> blocks;
+
+    /** Index of first executed block in method */
+    private int entryBlockIndex;
+
+    /**
+     * Index of exit block, which exists only in SSA form,
+     * or or {@code -1} if there is none
+     */
+    private int exitBlockIndex;
+
+    /** total number of registers required */
+    private int registerCount;
+
+    /** first register number to use for any temporary "spares" */
+    private int spareRegisterBase;
+
+    /** current count of spare registers used */
+    private int borrowedSpareRegisters;
+
+    /** really one greater than the max label */
+    private int maxLabel;
+
+    /** the total width, in register-units, of the method's parameters */
+    private final int paramWidth;
+
+    /** true if this method has no {@code this} pointer argument */
+    private final boolean isStatic;
+
+    /**
+     * indexed by register: the insn where said register is defined or null
+     * if undefined. null until (lazily) created.
+     */
+    private SsaInsn[] definitionList;
+
+    /** indexed by register: the list of all insns that use a register */
+    private ArrayList<SsaInsn>[] useList;
+
+    /** A version of useList with each List unmodifiable */
+    private List<SsaInsn>[] unmodifiableUseList;
+
+    /**
+     * "back-convert mode". Set during back-conversion when registers
+     * are about to be mapped into a non-SSA namespace. When true,
+     * use and def lists are unavailable.
+     *
+     * TODO: Remove this mode, and place the functionality elsewhere
+     */
+    private boolean backMode;
+
+    /**
+     * @param ropMethod rop-form method to convert from
+     * @param paramWidth the total width, in register-units, of the
+     * method's parameters
+     * @param isStatic {@code true} if this method has no {@code this}
+     * pointer argument
+     */
+    public static SsaMethod newFromRopMethod(RopMethod ropMethod,
+            int paramWidth, boolean isStatic) {
+        SsaMethod result = new SsaMethod(ropMethod, paramWidth, isStatic);
+
+        result.convertRopToSsaBlocks(ropMethod);
+
+        return result;
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param ropMethod {@code non-null;} the original rop-form method that
+     * this instance is based on
+     * @param paramWidth the total width, in register-units, of the
+     * method's parameters
+     * @param isStatic {@code true} if this method has no {@code this}
+     * pointer argument
+     */
+    private SsaMethod(RopMethod ropMethod, int paramWidth, boolean isStatic) {
+        this.paramWidth = paramWidth;
+        this.isStatic = isStatic;
+        this.backMode = false;
+        this.maxLabel = ropMethod.getBlocks().getMaxLabel();
+        this.registerCount = ropMethod.getBlocks().getRegCount();
+        this.spareRegisterBase = registerCount;
+    }
+
+    /**
+     * Builds a BitSet of block indices from a basic block list and a list
+     * of labels taken from Rop form.
+     *
+     * @param blocks Rop blocks
+     * @param labelList list of rop block labels
+     * @return BitSet of block indices
+     */
+    static BitSet bitSetFromLabelList(BasicBlockList blocks,
+            IntList labelList) {
+        BitSet result = new BitSet(blocks.size());
+
+        for (int i = 0, sz = labelList.size(); i < sz; i++) {
+            result.set(blocks.indexOfLabel(labelList.get(i)));
+        }
+
+        return result;
+    }
+
+    /**
+     * Builds an IntList of block indices from a basic block list and a list
+     * of labels taken from Rop form.
+     *
+     * @param ropBlocks Rop blocks
+     * @param labelList list of rop block labels
+     * @return IntList of block indices
+     */
+    public static IntList indexListFromLabelList(BasicBlockList ropBlocks,
+            IntList labelList) {
+
+        IntList result = new IntList(labelList.size());
+
+        for (int i = 0, sz = labelList.size(); i < sz; i++) {
+            result.add(ropBlocks.indexOfLabel(labelList.get(i)));
+        }
+
+        return result;
+    }
+
+    private void convertRopToSsaBlocks(RopMethod rmeth) {
+        BasicBlockList ropBlocks = rmeth.getBlocks();
+        int sz = ropBlocks.size();
+
+        blocks = new ArrayList<SsaBasicBlock>(sz + 2);
+
+        for (int i = 0; i < sz; i++) {
+            SsaBasicBlock sbb = SsaBasicBlock.newFromRop(rmeth, i, this);
+            blocks.add(sbb);
+        }
+
+        // Add an no-op entry block.
+        int origEntryBlockIndex = rmeth.getBlocks()
+                .indexOfLabel(rmeth.getFirstLabel());
+
+        SsaBasicBlock entryBlock
+                = blocks.get(origEntryBlockIndex).insertNewPredecessor();
+
+        entryBlockIndex = entryBlock.getIndex();
+        exitBlockIndex = -1; // This gets made later.
+    }
+
+    /**
+     * Creates an exit block and attaches it to the CFG if this method
+     * exits. Methods that never exit will not have an exit block. This
+     * is called after edge-splitting and phi insertion, since the edges
+     * going into the exit block should not be considered in those steps.
+     */
+    /*package*/ void makeExitBlock() {
+        if (exitBlockIndex >= 0) {
+            throw new RuntimeException("must be called at most once");
+        }
+
+        exitBlockIndex = blocks.size();
+        SsaBasicBlock exitBlock
+                = new SsaBasicBlock(exitBlockIndex, maxLabel++, this);
+
+        blocks.add(exitBlock);
+
+        for (SsaBasicBlock block : blocks) {
+            block.exitBlockFixup(exitBlock);
+        }
+
+        if (exitBlock.getPredecessors().cardinality() == 0) {
+            // In cases where there is no exit...
+            blocks.remove(exitBlockIndex);
+            exitBlockIndex = -1;
+            maxLabel--;
+        }
+    }
+
+    /**
+     * Gets a new {@code GOTO} insn.
+     *
+     * @param block block to which this GOTO will be added
+     * (not it's destination!)
+     * @return an appropriately-constructed instance.
+     */
+    private static SsaInsn getGoto(SsaBasicBlock block) {
+        return new NormalSsaInsn (
+                new PlainInsn(Rops.GOTO, SourcePosition.NO_INFO,
+                    null, RegisterSpecList.EMPTY), block);
+    }
+
+    /**
+     * Makes a new basic block for this method, which is empty besides
+     * a single {@code GOTO}. Successors and predecessors are not yet
+     * set.
+     *
+     * @return new block
+     */
+    public SsaBasicBlock makeNewGotoBlock() {
+        int newIndex = blocks.size();
+        SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this);
+
+        newBlock.getInsns().add(getGoto(newBlock));
+        blocks.add(newBlock);
+
+        return newBlock;
+    }
+
+    /**
+     * @return block index of first execution block
+     */
+    public int getEntryBlockIndex() {
+        return entryBlockIndex;
+    }
+
+    /**
+     * @return first execution block
+     */
+    public SsaBasicBlock getEntryBlock() {
+        return blocks.get(entryBlockIndex);
+    }
+
+    /**
+     * @return block index of exit block or {@code -1} if there is none
+     */
+    public int getExitBlockIndex() {
+        return exitBlockIndex;
+    }
+
+    /**
+     * @return {@code null-ok;} block of exit block or {@code null} if
+     * there is none
+     */
+    public SsaBasicBlock getExitBlock() {
+        return exitBlockIndex < 0 ? null : blocks.get(exitBlockIndex);
+    }
+
+    /**
+     * @param bi block index or {@code -1} for none
+     * @return rop label or {code -1} if {@code bi} was {@code -1}
+     */
+    public int blockIndexToRopLabel(int bi) {
+        if (bi < 0) {
+            return -1;
+        }
+        return blocks.get(bi).getRopLabel();
+    }
+
+    /**
+     * @return count of registers used in this method
+     */
+    public int getRegCount() {
+        return registerCount;
+    }
+
+    /**
+     * @return the total width, in register units, of the method's
+     * parameters
+     */
+    public int getParamWidth() {
+        return paramWidth;
+    }
+
+    /**
+     * Returns {@code true} if this is a static method.
+     *
+     * @return {@code true} if this is a static method
+     */
+    public boolean isStatic() {
+        return isStatic;
+    }
+
+    /**
+     * Borrows a register to use as a temp. Used in the phi removal process.
+     * Call returnSpareRegisters() when done.
+     *
+     * @param category width (1 or 2) of the register
+     * @return register number to use
+     */
+    public int borrowSpareRegister(int category) {
+        int result = spareRegisterBase + borrowedSpareRegisters;
+
+        borrowedSpareRegisters += category;
+        registerCount = Math.max(registerCount, result + category);
+
+        return result;
+    }
+
+    /**
+     * Returns all borrowed registers.
+     */
+    public void returnSpareRegisters() {
+        borrowedSpareRegisters = 0;
+    }
+
+    /**
+     * @return {@code non-null;} basic block list. Do not modify.
+     */
+    public ArrayList<SsaBasicBlock> getBlocks() {
+        return blocks;
+    }
+
+    /**
+     * Computes reachability for all blocks in the method.
+     *
+     * @return a BitSet of reachable blocks.
+     */
+    public BitSet computeReachability() {
+        final int size = blocks.size();
+        BitSet reachableUnvisited = new BitSet(size);
+        BitSet reachableVisited = new BitSet(size);
+
+        reachableUnvisited.set(getEntryBlock().getIndex());
+
+        int index;
+        while ((index = reachableUnvisited.nextSetBit(0)) != -1) {
+            reachableVisited.set(index);
+            reachableUnvisited.or(blocks.get(index).getSuccessors());
+            reachableUnvisited.andNot(reachableVisited);
+        }
+
+        return reachableVisited;
+    }
+
+    /**
+     * Remaps unversioned registers.
+     *
+     * @param mapper maps old registers to new.
+     */
+    public void mapRegisters(RegisterMapper mapper) {
+        for (SsaBasicBlock block : getBlocks()) {
+            for (SsaInsn insn : block.getInsns()) {
+                insn.mapRegisters(mapper);
+            }
+        }
+
+        registerCount = mapper.getNewRegisterCount();
+        spareRegisterBase = registerCount;
+    }
+
+    /**
+     * Returns the insn that defines the given register
+     * @param reg register in question
+     * @return insn (actual instance from code) that defined this reg or null
+     * if reg is not defined.
+     */
+    public SsaInsn getDefinitionForRegister(int reg) {
+        if (backMode) {
+            throw new RuntimeException("No def list in back mode");
+        }
+
+        if (definitionList != null) {
+            return definitionList[reg];
+        }
+
+        definitionList = new SsaInsn[getRegCount()];
+
+        forEachInsn(new SsaInsn.Visitor() {
+            @Override
+            public void visitMoveInsn (NormalSsaInsn insn) {
+                definitionList[insn.getResult().getReg()] = insn;
+            }
+            @Override
+            public void visitPhiInsn (PhiInsn phi) {
+                definitionList[phi.getResult().getReg()] = phi;
+            }
+            @Override
+            public void visitNonMoveInsn (NormalSsaInsn insn) {
+                RegisterSpec result = insn.getResult();
+                if (result != null) {
+                    definitionList[insn.getResult().getReg()] = insn;
+                }
+            }
+        });
+
+        return definitionList[reg];
+    }
+
+    /**
+     * Builds useList and unmodifiableUseList.
+     */
+    private void buildUseList() {
+        if (backMode) {
+            throw new RuntimeException("No use list in back mode");
+        }
+
+        useList = new ArrayList[registerCount];
+
+        for (int i = 0; i < registerCount; i++) {
+            useList[i] = new ArrayList();
+        }
+
+        forEachInsn(new SsaInsn.Visitor() {
+            /** {@inheritDoc} */
+            @Override
+            public void visitMoveInsn (NormalSsaInsn insn) {
+                addToUses(insn);
+            }
+            /** {@inheritDoc} */
+            @Override
+            public void visitPhiInsn (PhiInsn phi) {
+                addToUses(phi);
+            }
+            /** {@inheritDoc} */
+            @Override
+            public void visitNonMoveInsn (NormalSsaInsn insn) {
+                addToUses(insn);
+            }
+            /**
+             * Adds specified insn to the uses list for all of its sources.
+             * @param insn {@code non-null;} insn to process
+             */
+            private void addToUses(SsaInsn insn) {
+                RegisterSpecList rl = insn.getSources();
+                int sz = rl.size();
+
+                for (int i = 0; i < sz; i++) {
+                    useList[rl.get(i).getReg()].add(insn);
+                }
+            }
+        });
+
+        unmodifiableUseList = new List[registerCount];
+
+        for (int i = 0; i < registerCount; i++) {
+            unmodifiableUseList[i] = Collections.unmodifiableList(useList[i]);
+        }
+    }
+
+    /**
+     * Updates the use list for a single change in source register.
+     *
+     * @param insn {@code non-null;} insn being changed
+     * @param oldSource {@code null-ok;} The source that was used, if
+     * applicable
+     * @param newSource {@code non-null;} the new source being used
+     */
+    /*package*/ void onSourceChanged(SsaInsn insn,
+            RegisterSpec oldSource, RegisterSpec newSource) {
+        if (useList == null) return;
+
+        if (oldSource != null) {
+            int reg = oldSource.getReg();
+            useList[reg].remove(insn);
+        }
+
+        int reg = newSource.getReg();
+        if (useList.length <= reg) {
+            useList = null;
+            return;
+        }
+        useList[reg].add(insn);
+    }
+
+    /**
+     * Updates the use list for a source list change.
+     *
+     * @param insn {@code insn non-null;} insn being changed.
+     * {@code insn.getSources()} must return the new source list.
+     * @param oldSources {@code null-ok;} list of sources that were
+     * previously used
+     */
+    /*package*/ void onSourcesChanged(SsaInsn insn,
+            RegisterSpecList oldSources) {
+        if (useList == null) return;
+
+        if (oldSources != null) {
+            removeFromUseList(insn, oldSources);
+        }
+
+        RegisterSpecList sources = insn.getSources();
+        int szNew = sources.size();
+
+        for (int i = 0; i < szNew; i++) {
+            int reg = sources.get(i).getReg();
+            useList[reg].add(insn);
+        }
+    }
+
+    /**
+     * Removes a given {@code insn} from the use lists for the given
+     * {@code oldSources} (rather than the sources currently
+     * returned by insn.getSources()).
+     *
+     * @param insn {@code non-null;} insn in question
+     * @param oldSources {@code null-ok;} registers whose use lists
+     * {@code insn} should be removed form
+     */
+    private void removeFromUseList(SsaInsn insn, RegisterSpecList oldSources) {
+        if (oldSources == null) {
+            return;
+        }
+
+        int szNew = oldSources.size();
+        for (int i = 0; i < szNew; i++) {
+            if (!useList[oldSources.get(i).getReg()].remove(insn)) {
+                throw new RuntimeException("use not found");
+            }
+        }
+    }
+
+    /**
+     * Adds an insn to both the use and def lists. For use when adding
+     * a new insn to the method.
+     *
+     * @param insn {@code non-null;} insn to add
+     */
+    /*package*/ void onInsnAdded(SsaInsn insn) {
+        onSourcesChanged(insn, null);
+        updateOneDefinition(insn, null);
+    }
+
+    /**
+     * Removes an instruction from use and def lists. For use during
+     * instruction removal.
+     *
+     * @param insn {@code non-null;} insn to remove
+     */
+    /*package*/ void onInsnRemoved(SsaInsn insn) {
+        if (useList != null) {
+            removeFromUseList(insn, insn.getSources());
+        }
+
+        RegisterSpec resultReg = insn.getResult();
+        if (definitionList != null && resultReg != null) {
+            definitionList[resultReg.getReg()] = null;
+        }
+    }
+
+    /**
+     * Indicates that the instruction list has changed or the SSA register
+     * count has increased, so that internal datastructures that rely on
+     * it should be rebuild. In general, the various other on* methods
+     * should be called in preference when changes occur if they are
+     * applicable.
+     */
+    public void onInsnsChanged() {
+        // Definition list will need to be recomputed
+        definitionList = null;
+
+        // Use list will need to be recomputed
+        useList = null;
+        unmodifiableUseList = null;
+    }
+
+    /**
+     * Updates a single definition.
+     *
+     * @param insn {@code non-null;} insn who's result should be recorded as
+     * a definition
+     * @param oldResult {@code null-ok;} a previous result that should
+     * be no longer considered a definition by this insn
+     */
+    /*package*/ void updateOneDefinition(SsaInsn insn,
+            RegisterSpec oldResult) {
+        if (definitionList == null) return;
+
+        if (oldResult != null) {
+            int reg = oldResult.getReg();
+            definitionList[reg] = null;
+        }
+
+        RegisterSpec resultReg = insn.getResult();
+
+        if (resultReg != null) {
+            int reg = resultReg.getReg();
+
+            if (definitionList[reg] != null) {
+                throw new RuntimeException("Duplicate add of insn");
+            } else {
+                definitionList[resultReg.getReg()] = insn;
+            }
+        }
+    }
+
+    /**
+     * Returns the list of all source uses (not results) for a register.
+     *
+     * @param reg register in question
+     * @return unmodifiable instruction list
+     */
+    public List<SsaInsn> getUseListForRegister(int reg) {
+
+        if (unmodifiableUseList == null) {
+            buildUseList();
+        }
+
+        return unmodifiableUseList[reg];
+    }
+
+    /**
+     * Returns a modifiable copy of the register use list.
+     *
+     * @return modifiable copy of the use-list, indexed by register
+     */
+    public ArrayList<SsaInsn>[] getUseListCopy() {
+        if (useList == null) {
+            buildUseList();
+        }
+
+        ArrayList<SsaInsn>[] useListCopy
+                = (ArrayList<SsaInsn>[])(new ArrayList[registerCount]);
+
+        for (int i = 0; i < registerCount; i++) {
+            useListCopy[i] = (ArrayList<SsaInsn>)(new ArrayList(useList[i]));
+        }
+
+        return useListCopy;
+    }
+
+    /**
+     * Checks to see if the given SSA reg is ever associated with a local
+     * local variable. Each SSA reg may be associated with at most one
+     * local var.
+     *
+     * @param spec {@code non-null;} ssa reg
+     * @return true if reg is ever associated with a local
+     */
+    public boolean isRegALocal(RegisterSpec spec) {
+        SsaInsn defn = getDefinitionForRegister(spec.getReg());
+
+        if (defn == null) {
+            // version 0 registers are never used as locals
+            return false;
+        }
+
+        // Does the definition have a local associated with it?
+        if (defn.getLocalAssignment() != null) return true;
+
+        // If not, is there a mark-local insn?
+        for (SsaInsn use : getUseListForRegister(spec.getReg())) {
+            Insn insn = use.getOriginalRopInsn();
+
+            if (insn != null
+                    && insn.getOpcode().getOpcode() == RegOps.MARK_LOCAL) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Sets the new register count after renaming.
+     *
+     * @param newRegCount new register count
+     */
+    /*package*/ void setNewRegCount(int newRegCount) {
+        registerCount = newRegCount;
+        spareRegisterBase = registerCount;
+        onInsnsChanged();
+    }
+
+    /**
+     * Makes a new SSA register. For use after renaming has completed.
+     *
+     * @return {@code >=0;} new SSA register.
+     */
+    public int makeNewSsaReg() {
+        int reg = registerCount++;
+        spareRegisterBase = registerCount;
+        onInsnsChanged();
+        return reg;
+    }
+
+    /**
+     * Visits all insns in this method.
+     *
+     * @param visitor {@code non-null;} callback interface
+     */
+    public void forEachInsn(SsaInsn.Visitor visitor) {
+        for (SsaBasicBlock block : blocks) {
+            block.forEachInsn(visitor);
+        }
+    }
+
+    /**
+     * Visits each phi insn in this method
+     * @param v {@code non-null;} callback.
+     *
+     */
+    public void forEachPhiInsn(PhiInsn.Visitor v) {
+        for (SsaBasicBlock block : blocks) {
+            block.forEachPhiInsn(v);
+        }
+    }
+
+
+    /**
+     * Walks the basic block tree in depth-first order, calling the visitor
+     * method once for every block. This depth-first walk may be run forward
+     * from the method entry point or backwards from the method exit points.
+     *
+     * @param reverse true if this should walk backwards from the exit points
+     * @param v {@code non-null;} callback interface. {@code parent} is set
+     * unless this is the root node
+     */
+    public void forEachBlockDepthFirst(boolean reverse,
+            SsaBasicBlock.Visitor v) {
+        BitSet visited = new BitSet(blocks.size());
+
+        // We push the parent first, then the child on the stack.
+        Stack<SsaBasicBlock> stack = new Stack<SsaBasicBlock>();
+
+        SsaBasicBlock rootBlock = reverse ? getExitBlock() : getEntryBlock();
+
+        if (rootBlock == null) {
+            // in the case there's no exit block
+            return;
+        }
+
+        stack.add(null);    // Start with null parent.
+        stack.add(rootBlock);
+
+        while (stack.size() > 0) {
+            SsaBasicBlock cur = stack.pop();
+            SsaBasicBlock parent = stack.pop();
+
+            if (!visited.get(cur.getIndex())) {
+                BitSet children
+                    = reverse ? cur.getPredecessors() : cur.getSuccessors();
+                for (int i = children.nextSetBit(0); i >= 0
+                        ; i = children.nextSetBit(i + 1)) {
+                    stack.add(cur);
+                    stack.add(blocks.get(i));
+                }
+                visited.set(cur.getIndex());
+                v.visitBlock(cur, parent);
+            }
+        }
+    }
+
+    /**
+     * Visits blocks in dom-tree order, starting at the current node.
+     * The {@code parent} parameter of the Visitor.visitBlock callback
+     * is currently always set to null.
+     *
+     * @param v {@code non-null;} callback interface
+     */
+    public void forEachBlockDepthFirstDom(SsaBasicBlock.Visitor v) {
+        BitSet visited = new BitSet(getBlocks().size());
+        Stack<SsaBasicBlock> stack = new Stack<SsaBasicBlock>();
+
+        stack.add(getEntryBlock());
+
+        while (stack.size() > 0) {
+            SsaBasicBlock cur = stack.pop();
+            ArrayList<SsaBasicBlock> curDomChildren = cur.getDomChildren();
+
+            if (!visited.get(cur.getIndex())) {
+                // We walk the tree this way for historical reasons...
+                for (int i = curDomChildren.size() - 1; i >= 0; i--) {
+                    SsaBasicBlock child = curDomChildren.get(i);
+                    stack.add(child);
+                }
+                visited.set(cur.getIndex());
+                v.visitBlock(cur, null);
+            }
+        }
+    }
+
+    /**
+     * Deletes all insns in the set from this method.
+     *
+     * @param deletedInsns {@code non-null;} insns to delete
+     */
+    public void deleteInsns(Set<SsaInsn> deletedInsns) {
+        for (SsaInsn deletedInsn : deletedInsns) {
+            SsaBasicBlock block = deletedInsn.getBlock();
+            ArrayList<SsaInsn> insns = block.getInsns();
+
+            for (int i = insns.size() - 1; i >= 0; i--) {
+                SsaInsn insn = insns.get(i);
+
+                if (deletedInsn == insn) {
+                    onInsnRemoved(insn);
+                    insns.remove(i);
+                    break;
+                }
+            }
+
+            // Check to see if we need to add a GOTO
+
+            int insnsSz = insns.size();
+            SsaInsn lastInsn = (insnsSz == 0) ? null : insns.get(insnsSz - 1);
+
+            if (block != getExitBlock() && (insnsSz == 0
+                    || lastInsn.getOriginalRopInsn() == null
+                    || lastInsn.getOriginalRopInsn().getOpcode()
+                        .getBranchingness() == Rop.BRANCH_NONE)) {
+                // We managed to eat a throwable insn
+
+                Insn gotoInsn = new PlainInsn(Rops.GOTO,
+                        SourcePosition.NO_INFO, null, RegisterSpecList.EMPTY);
+                insns.add(SsaInsn.makeFromRop(gotoInsn, block));
+
+                // Remove secondary successors from this block
+                BitSet succs = block.getSuccessors();
+                for (int i = succs.nextSetBit(0); i >= 0;
+                         i = succs.nextSetBit(i + 1)) {
+                    if (i != block.getPrimarySuccessorIndex()) {
+                        block.removeSuccessor(i);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Sets "back-convert mode". Set during back-conversion when registers
+     * are about to be mapped into a non-SSA namespace. When true,
+     * use and def lists are unavailable.
+     */
+    public void setBackMode() {
+        backMode = true;
+        useList = null;
+        definitionList = null;
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/SsaRenamer.java b/dx/src/com/android/dx/ssa/SsaRenamer.java
new file mode 100644
index 0000000..1167f98
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/SsaRenamer.java
@@ -0,0 +1,667 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.rop.type.Type;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.HashSet;
+
+/**
+ * Complete transformation to SSA form by renaming all registers accessed.<p>
+ *
+ * See Appel algorithm 19.7<p>
+ *
+ * Unlike the original algorithm presented in Appel, this renamer converts
+ * to a new flat (versionless) register space. The "version 0" registers,
+ * which represent the initial state of the Rop registers and should never
+ * actually be meaningfully accessed in a legal program, are represented
+ * as the first N registers in the SSA namespace. Subsequent assignments
+ * are assigned new unique names. Note that the incoming Rop representation
+ * has a concept of register widths, where 64-bit values are stored into
+ * two adjoining Rop registers. This adjoining register representation is
+ * ignored in SSA form conversion and while in SSA form, each register can be e
+ * either 32 or 64 bits wide depending on use. The adjoining-register
+ * represention is re-created later when converting back to Rop form. <p>
+ *
+ * But, please note, the SSA Renamer's ignoring of the adjoining-register ROP
+ * representation means that unaligned accesses to 64-bit registers are not
+ * supported. For example, you cannot do a 32-bit operation on a portion of
+ * a 64-bit register. This will never be observed to happen when coming
+ * from Java code, of course.<p>
+ *
+ * The implementation here, rather than keeping a single register version
+ * stack for the entire method as the dom tree is walked, instead keeps
+ * a mapping table for the current block being processed. Once the
+ * current block has been processed, this mapping table is then copied
+ * and used as the initial state for child blocks.<p>
+ */
+public class SsaRenamer implements Runnable {
+    /** debug flag */
+    private static final boolean DEBUG = false;
+
+    /** method we're processing */
+    private final SsaMethod ssaMeth;
+
+    /** next available SSA register */
+    private int nextSsaReg;
+
+    /** the number of original rop registers */
+    private final int ropRegCount;
+
+    /** work only on registers above this value */
+    private int threshold;
+
+    /**
+     * indexed by block index; register version state for each block start.
+     * This list is updated by each dom parent for its children. The only
+     * sub-arrays that exist at any one time are the start states for blocks
+     * yet to be processed by a {@code BlockRenamer} instance.
+     */
+    private final RegisterSpec[][] startsForBlocks;
+
+    /** map of SSA register number to debug (local var names) or null of n/a */
+    private final ArrayList<LocalItem> ssaRegToLocalItems;
+
+    /**
+     * maps SSA registers back to the original rop number. Used for
+     * debug only.
+     */
+    private IntList ssaRegToRopReg;
+
+    /**
+     * Constructs an instance of the renamer
+     *
+     * @param ssaMeth {@code non-null;} un-renamed SSA method that will
+     * be renamed.
+     */
+    public SsaRenamer(SsaMethod ssaMeth) {
+        ropRegCount = ssaMeth.getRegCount();
+
+        this.ssaMeth = ssaMeth;
+
+        /*
+         * Reserve the first N registers in the SSA register space for
+         * "version 0" registers.
+         */
+        nextSsaReg = ropRegCount;
+        threshold = 0;
+        startsForBlocks = new RegisterSpec[ssaMeth.getBlocks().size()][];
+
+        ssaRegToLocalItems = new ArrayList<LocalItem>();
+
+        if (DEBUG) {
+            ssaRegToRopReg = new IntList(ropRegCount);
+        }
+
+        /*
+         * Appel 19.7
+         *
+         * Initialization:
+         *   for each variable a        // register i
+         *      Count[a] <- 0           // nextSsaReg, flattened
+         *      Stack[a] <- 0           // versionStack
+         *      push 0 onto Stack[a]
+         *
+         */
+
+        // top entry for the version stack is version 0
+        RegisterSpec[] initialRegMapping = new RegisterSpec[ropRegCount];
+        for (int i = 0; i < ropRegCount; i++) {
+            // everyone starts with a version 0 register
+            initialRegMapping[i] = RegisterSpec.make(i, Type.VOID);
+
+            if (DEBUG) {
+                ssaRegToRopReg.add(i);
+            }
+        }
+
+        // Initial state for entry block
+        startsForBlocks[ssaMeth.getEntryBlockIndex()] = initialRegMapping;
+    }
+
+    /**
+    * Constructs an instance of the renamer with threshold set
+    *
+    * @param ssaMeth {@code non-null;} un-renamed SSA method that will
+    * be renamed.
+    * @param thresh registers below this number are unchanged
+    */
+   public SsaRenamer(SsaMethod ssaMeth, int thresh) {
+       this(ssaMeth);
+       threshold = thresh;
+   }
+
+    /**
+     * Performs renaming transformation, modifying the method's instructions
+     * in-place.
+     */
+    @Override
+    public void run() {
+        // Rename each block in dom-tree DFS order.
+        ssaMeth.forEachBlockDepthFirstDom(new SsaBasicBlock.Visitor() {
+            @Override
+            public void visitBlock (SsaBasicBlock block,
+                    SsaBasicBlock unused) {
+                new BlockRenamer(block).process();
+            }
+        });
+
+        ssaMeth.setNewRegCount(nextSsaReg);
+        ssaMeth.onInsnsChanged();
+
+        if (DEBUG) {
+            System.out.println("SSA\tRop");
+            /*
+             * We're going to compute the version of the rop register
+             * by keeping a running total of how many times the rop
+             * register has been mapped.
+             */
+            int[] versions = new int[ropRegCount];
+
+            int sz = ssaRegToRopReg.size();
+            for (int i = 0; i < sz; i++) {
+                int ropReg = ssaRegToRopReg.get(i);
+                System.out.println(i + "\t" + ropReg + "["
+                        + versions[ropReg] + "]");
+                versions[ropReg]++;
+            }
+        }
+    }
+
+    /**
+     * Duplicates a RegisterSpec array.
+     *
+     * @param orig {@code non-null;} array to duplicate
+     * @return {@code non-null;} new instance
+     */
+    private static  RegisterSpec[] dupArray(RegisterSpec[] orig) {
+        RegisterSpec[] copy = new RegisterSpec[orig.length];
+
+        System.arraycopy(orig, 0, copy, 0, orig.length);
+
+        return copy;
+    }
+
+    /**
+     * Gets a local variable item for a specified register.
+     *
+     * @param ssaReg register in SSA name space
+     * @return {@code null-ok;} Local variable name or null if none
+     */
+    private LocalItem getLocalForNewReg(int ssaReg) {
+        if (ssaReg < ssaRegToLocalItems.size()) {
+            return ssaRegToLocalItems.get(ssaReg);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Records a debug (local variable) name for a specified register.
+     *
+     * @param ssaReg non-null named register spec in SSA name space
+     */
+    private void setNameForSsaReg(RegisterSpec ssaReg) {
+        int reg = ssaReg.getReg();
+        LocalItem local = ssaReg.getLocalItem();
+
+        ssaRegToLocalItems.ensureCapacity(reg + 1);
+        while (ssaRegToLocalItems.size() <= reg) {
+            ssaRegToLocalItems.add(null);
+        }
+
+        ssaRegToLocalItems.set(reg, local);
+    }
+
+    /**
+     * Returns true if this SSA register is below the specified threshold.
+     * Used when most code is already in SSA form, and renaming is needed only
+     * for registers above a certain threshold.
+     *
+     * @param ssaReg the SSA register in question
+     * @return {@code true} if its register number is below the threshold
+     */
+    private boolean isBelowThresholdRegister(int ssaReg) {
+        return ssaReg < threshold;
+    }
+
+    /**
+     * Returns true if this SSA register is a "version 0"
+     * register. All version 0 registers are assigned the first N register
+     * numbers, where N is the count of original rop registers.
+     *
+     * @param ssaReg the SSA register in question
+     * @return true if it is a version 0 register.
+     */
+    private boolean isVersionZeroRegister(int ssaReg) {
+        return ssaReg < ropRegCount;
+    }
+
+    /**
+     * Returns true if a and b are equal or are both null.
+     *
+     * @param a null-ok
+     * @param b null-ok
+     * @return Returns true if a and b are equal or are both null
+     */
+    private static boolean equalsHandlesNulls(Object a, Object b) {
+        return a == b ||  (a != null && a.equals(b));
+    }
+
+    /**
+     * Processes all insns in a block and renames their registers
+     * as appropriate.
+     */
+    private class BlockRenamer implements SsaInsn.Visitor{
+        /** {@code non-null;} block we're processing. */
+        private final SsaBasicBlock block;
+
+        /**
+         * {@code non-null;} indexed by old register name. The current
+         * top of the version stack as seen by this block. It's
+         * initialized from the ending state of its dom parent,
+         * updated as the block's instructions are processed, and then
+         * copied to each one of its dom children.
+         */
+        private final RegisterSpec[] currentMapping;
+
+        /**
+         * contains the set of moves we need to keep to preserve local
+         * var info. All other moves will be deleted.
+         */
+        private final HashSet<SsaInsn> movesToKeep;
+
+        /**
+         * maps the set of insns to replace after renaming is finished
+         * on the block.
+         */
+        private final HashMap<SsaInsn, SsaInsn> insnsToReplace;
+
+        private final RenamingMapper mapper;
+
+        /**
+         * Constructs a block renamer instance. Call {@code process}
+         * to process.
+         *
+         * @param block {@code non-null;} block to process
+         */
+        BlockRenamer(final SsaBasicBlock block) {
+            this.block = block;
+            currentMapping = startsForBlocks[block.getIndex()];
+            movesToKeep = new HashSet<SsaInsn>();
+            insnsToReplace = new HashMap<SsaInsn, SsaInsn>();
+            mapper =  new RenamingMapper();
+
+            // We don't need our own start state anymore
+            startsForBlocks[block.getIndex()] = null;
+        }
+
+        /**
+         * Provides a register mapping between the old register space
+         * and the current renaming mapping. The mapping is updated
+         * as the current block's instructions are processed.
+         */
+        private class RenamingMapper extends RegisterMapper {
+            public RenamingMapper() {
+                // This space intentionally left blank.
+            }
+
+            /** {@inheritDoc} */
+            @Override
+            public int getNewRegisterCount() {
+                return nextSsaReg;
+            }
+
+            /** {@inheritDoc} */
+            @Override
+            public RegisterSpec map(RegisterSpec registerSpec) {
+                if (registerSpec == null) return null;
+
+                int reg = registerSpec.getReg();
+
+                // For debugging: assert that the mapped types are compatible.
+                if (DEBUG) {
+                    RegisterSpec newVersion = currentMapping[reg];
+                    if (newVersion.getBasicType() != Type.BT_VOID
+                            && registerSpec.getBasicFrameType()
+                                != newVersion.getBasicFrameType()) {
+
+                        throw new RuntimeException(
+                                "mapping registers of incompatible types! "
+                                + registerSpec
+                                + " " + currentMapping[reg]);
+                    }
+                }
+
+                return registerSpec.withReg(currentMapping[reg].getReg());
+            }
+        }
+
+        /**
+         * Renames all the variables in this block and inserts appriopriate
+         * phis in successor blocks.
+         */
+        public void process() {
+            /*
+             * From Appel:
+             *
+             * Rename(n) =
+             *   for each statement S in block n   // 'statement' in 'block'
+             */
+
+            block.forEachInsn(this);
+
+            updateSuccessorPhis();
+
+            // Delete all move insns in this block.
+            ArrayList<SsaInsn> insns = block.getInsns();
+            int szInsns = insns.size();
+
+            for (int i = szInsns - 1; i >= 0 ; i--) {
+                SsaInsn insn = insns.get(i);
+                SsaInsn replaceInsn;
+
+                replaceInsn = insnsToReplace.get(insn);
+
+                if (replaceInsn != null) {
+                    insns.set(i, replaceInsn);
+                } else if (insn.isNormalMoveInsn()
+                        && !movesToKeep.contains(insn)) {
+                    insns.remove(i);
+                }
+            }
+
+            // Store the start states for our dom children.
+            boolean first = true;
+            for (SsaBasicBlock child : block.getDomChildren()) {
+                if (child != block) {
+                    // Don't bother duplicating the array for the first child.
+                    RegisterSpec[] childStart = first ? currentMapping
+                        : dupArray(currentMapping);
+
+                    startsForBlocks[child.getIndex()] = childStart;
+                    first = false;
+                }
+            }
+
+            // currentMapping is owned by a child now.
+        }
+
+        /**
+         * Enforces a few contraints when a register mapping is added.
+         *
+         * <ol>
+         * <li> Ensures that all new SSA registers specs in the mapping
+         * table with the same register number are identical. In effect, once
+         * an SSA register spec has received or lost a local variable name,
+         * then every old-namespace register that maps to it should gain or
+         * lose its local variable name as well.
+         * <li> Records the local name associated with the
+         * register so that a register is never associated with more than one
+         * local.
+         * <li> ensures that only one SSA register
+         * at a time is considered to be associated with a local variable. When
+         * {@code currentMapping} is updated and the newly added element
+         * is named, strip that name from any other SSA registers.
+         * </ol>
+         *
+         * @param ropReg {@code >= 0;} rop register number
+         * @param ssaReg {@code non-null;} an SSA register that has just
+         * been added to {@code currentMapping}
+         */
+        private void addMapping(int ropReg, RegisterSpec ssaReg) {
+            int ssaRegNum = ssaReg.getReg();
+            LocalItem ssaRegLocal = ssaReg.getLocalItem();
+
+            currentMapping[ropReg] = ssaReg;
+
+            /*
+             * Ensure all SSA register specs with the same reg are identical.
+             */
+            for (int i = currentMapping.length - 1; i >= 0; i--) {
+                RegisterSpec cur = currentMapping[i];
+
+                if (ssaRegNum == cur.getReg()) {
+                    currentMapping[i] = ssaReg;
+                }
+            }
+
+            // All further steps are for registers with local information.
+            if (ssaRegLocal == null) {
+                return;
+            }
+
+            // Record that this SSA reg has been associated with a local.
+            setNameForSsaReg(ssaReg);
+
+            // Ensure that no other SSA regs are associated with this local.
+            for (int i = currentMapping.length - 1; i >= 0; i--) {
+                RegisterSpec cur = currentMapping[i];
+
+                if (ssaRegNum != cur.getReg()
+                        && ssaRegLocal.equals(cur.getLocalItem())) {
+                    currentMapping[i] = cur.withLocalItem(null);
+                }
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         *
+         * Phi insns have their result registers renamed.
+         */
+        @Override
+        public void visitPhiInsn(PhiInsn phi) {
+            /* don't process sources for phi's */
+            processResultReg(phi);
+        }
+
+        /**
+         * {@inheritDoc}
+         *
+         * Move insns are treated as a simple mapping operation, and
+         * will later be removed unless they represent a local variable
+         * assignment. If they represent a local variable assignement, they
+         * are preserved.
+         */
+        @Override
+        public void visitMoveInsn(NormalSsaInsn insn) {
+            /*
+             * For moves: copy propogate the move if we can, but don't
+             * if we need to preserve local variable info and the
+             * result has a different name than the source.
+             */
+
+            RegisterSpec ropResult = insn.getResult();
+            int ropResultReg = ropResult.getReg();
+            int ropSourceReg = insn.getSources().get(0).getReg();
+
+            insn.mapSourceRegisters(mapper);
+            int ssaSourceReg = insn.getSources().get(0).getReg();
+
+            LocalItem sourceLocal
+                = currentMapping[ropSourceReg].getLocalItem();
+            LocalItem resultLocal = ropResult.getLocalItem();
+
+            /*
+             * A move from a register that's currently associated with a local
+             * to one that will not be associated with a local does not need
+             * to be preserved, but the local association should remain.
+             * Hence, we inherit the sourceLocal where the resultLocal is null.
+             */
+
+            LocalItem newLocal
+                = (resultLocal == null) ? sourceLocal : resultLocal;
+            LocalItem associatedLocal = getLocalForNewReg(ssaSourceReg);
+
+            /*
+             * If we take the new local, will only one local have ever
+             * been associated with this SSA reg?
+             */
+            boolean onlyOneAssociatedLocal
+                    = associatedLocal == null || newLocal == null
+                    || newLocal.equals(associatedLocal);
+
+            /*
+             * If we're going to copy-propogate, then the ssa register
+             * spec that's going to go into the mapping is made up of
+             * the source register number mapped from above, the type
+             * of the result, and the name either from the result (if
+             * specified) or inherited from the existing mapping.
+             *
+             * The move source has incomplete type information in null
+             * object cases, so the result type is used.
+             */
+            RegisterSpec ssaReg
+                    = RegisterSpec.makeLocalOptional(
+                        ssaSourceReg, ropResult.getType(), newLocal);
+
+            if (!Optimizer.getPreserveLocals() || (onlyOneAssociatedLocal
+                    && equalsHandlesNulls(newLocal, sourceLocal)) &&
+                    threshold == 0) {
+                /*
+                 * We don't have to keep this move to preserve local
+                 * information. Either the name is the same, or the result
+                 * register spec is unnamed.
+                 */
+
+                addMapping(ropResultReg, ssaReg);
+            } else if (onlyOneAssociatedLocal && sourceLocal == null &&
+                    threshold == 0) {
+                /*
+                 * The register was previously unnamed. This means that a
+                 * local starts after it's first assignment in SSA form
+                 */
+
+                RegisterSpecList ssaSources = RegisterSpecList.make(
+                        RegisterSpec.make(ssaReg.getReg(),
+                                ssaReg.getType(), newLocal));
+
+                SsaInsn newInsn
+                        = SsaInsn.makeFromRop(
+                            new PlainInsn(Rops.opMarkLocal(ssaReg),
+                            SourcePosition.NO_INFO, null, ssaSources),block);
+
+                insnsToReplace.put(insn, newInsn);
+
+                // Just map as above.
+                addMapping(ropResultReg, ssaReg);
+            } else {
+                /*
+                 * Do not copy-propogate, since the two registers have
+                 * two different local-variable names.
+                 */
+                processResultReg(insn);
+
+                movesToKeep.add(insn);
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         *
+         * All insns that are not move or phi insns have their source registers
+         * mapped ot the current mapping. Their result registers are then
+         * renamed to a new SSA register which is then added to the current
+         * register mapping.
+         */
+        @Override
+        public void visitNonMoveInsn(NormalSsaInsn insn) {
+            /* for each use of some variable X in S */
+            insn.mapSourceRegisters(mapper);
+
+            processResultReg(insn);
+        }
+
+        /**
+         * Renames the result register of this insn and updates the
+         * current register mapping. Does nothing if this insn has no result.
+         * Applied to all non-move insns.
+         *
+         * @param insn insn to process.
+         */
+        void processResultReg(SsaInsn insn) {
+            RegisterSpec ropResult = insn.getResult();
+
+            if (ropResult == null) {
+                return;
+            }
+
+            int ropReg = ropResult.getReg();
+            if (isBelowThresholdRegister(ropReg)) {
+                return;
+            }
+
+            insn.changeResultReg(nextSsaReg);
+            addMapping(ropReg, insn.getResult());
+
+            if (DEBUG) {
+                ssaRegToRopReg.add(ropReg);
+            }
+
+            nextSsaReg++;
+        }
+
+        /**
+         * Updates the phi insns in successor blocks with operands based
+         * on the current mapping of the rop register the phis represent.
+         */
+        private void updateSuccessorPhis() {
+            PhiInsn.Visitor visitor = new PhiInsn.Visitor() {
+                @Override
+                public void visitPhiInsn (PhiInsn insn) {
+                    int ropReg;
+
+                    ropReg = insn.getRopResultReg();
+                    if (isBelowThresholdRegister(ropReg)) {
+                        return;
+                    }
+
+                    /*
+                     * Never add a version 0 register as a phi
+                     * operand. Version 0 registers represent the
+                     * initial register state, and thus are never
+                     * significant. Furthermore, the register liveness
+                     * algorithm doesn't properly count them as "live
+                     * in" at the beginning of the method.
+                     */
+
+                    RegisterSpec stackTop = currentMapping[ropReg];
+                    if (!isVersionZeroRegister(stackTop.getReg())) {
+                        insn.addPhiOperand(stackTop, block);
+                    }
+                }
+            };
+
+            BitSet successors = block.getSuccessors();
+            for (int i = successors.nextSetBit(0); i >= 0;
+                    i = successors.nextSetBit(i + 1)) {
+                SsaBasicBlock successor = ssaMeth.getBlocks().get(i);
+                successor.forEachPhiInsn(visitor);
+            }
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/back/FirstFitAllocator.java b/dx/src/com/android/dx/ssa/back/FirstFitAllocator.java
new file mode 100644
index 0000000..a9043c2
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/back/FirstFitAllocator.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa.back;
+
+import com.android.dx.rop.code.CstInsn;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.ssa.BasicRegisterMapper;
+import com.android.dx.ssa.NormalSsaInsn;
+import com.android.dx.ssa.RegisterMapper;
+import com.android.dx.ssa.SsaMethod;
+import com.android.dx.util.BitIntSet;
+import com.android.dx.util.IntSet;
+import java.util.BitSet;
+
+/**
+ * Allocates registers via a naive n^2 register allocator.
+ * This allocator does not try to co-locate local variables or deal
+ * intelligently with different size register uses.
+ */
+public class FirstFitAllocator extends RegisterAllocator {
+    /**
+     * If true, allocator places parameters at the top of the frame
+     * in calling-convention order.
+     */
+    private static final boolean PRESLOT_PARAMS = true;
+
+    /** indexed by old reg; the set of old regs we've mapped */
+    private final BitSet mapped;
+
+    /** {@inheritDoc} */
+    public FirstFitAllocator(
+            final SsaMethod ssaMeth, final InterferenceGraph interference) {
+        super(ssaMeth, interference);
+
+        mapped = new BitSet(ssaMeth.getRegCount());
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean wantsParamsMovedHigh() {
+        return PRESLOT_PARAMS;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public RegisterMapper allocateRegisters() {
+        int oldRegCount = ssaMeth.getRegCount();
+
+        BasicRegisterMapper mapper
+                = new BasicRegisterMapper(oldRegCount);
+
+        int nextNewRegister = 0;
+
+        if (PRESLOT_PARAMS) {
+            /*
+             * Reserve space for the params at the bottom of the register
+             * space. Later, we'll flip the params to the end of the register
+             * space.
+             */
+
+            nextNewRegister = ssaMeth.getParamWidth();
+        }
+
+        for (int i = 0; i < oldRegCount; i++) {
+            if (mapped.get(i)) {
+                // we already got this one
+                continue;
+            }
+
+            int maxCategory = getCategoryForSsaReg(i);
+            IntSet current = new BitIntSet(oldRegCount);
+
+            interference.mergeInterferenceSet(i, current);
+
+            boolean isPreslotted = false;
+            int newReg = 0;
+
+            if (PRESLOT_PARAMS && isDefinitionMoveParam(i)) {
+                // Any move-param definition must be a NormalSsaInsn
+                NormalSsaInsn defInsn = (NormalSsaInsn)
+                       ssaMeth.getDefinitionForRegister(i);
+
+                newReg = paramNumberFromMoveParam(defInsn);
+
+                mapper.addMapping(i, newReg, maxCategory);
+                isPreslotted = true;
+            } else {
+                mapper.addMapping(i, nextNewRegister, maxCategory);
+                newReg = nextNewRegister;
+            }
+
+            for (int j = i + 1; j < oldRegCount; j++) {
+                if (mapped.get(j) || isDefinitionMoveParam(j)) {
+                    continue;
+                }
+
+                /*
+                 * If reg j doesn't interfere with the current mapping.
+                 * Also, if this is a pre-slotted method parameter, we
+                 * can't use more than the original param width.
+                 */
+                if (!current.has(j)
+                        && !(isPreslotted
+                            && (maxCategory < getCategoryForSsaReg(j)))) {
+
+                    interference.mergeInterferenceSet(j, current);
+
+                    maxCategory = Math.max(maxCategory,
+                            getCategoryForSsaReg(j));
+
+                    mapper.addMapping(j, newReg, maxCategory);
+                    mapped.set(j);
+                }
+            }
+
+            mapped.set(i);
+            if (!isPreslotted) {
+                nextNewRegister += maxCategory;
+            }
+        }
+
+        return mapper;
+    }
+
+    /**
+     * Returns the parameter number that this move-param insn refers to
+     * @param ndefInsn a move-param insn (otherwise, exceptions will be thrown)
+     * @return parameter number (offset in the total parameter width)
+     */
+    private int paramNumberFromMoveParam(NormalSsaInsn ndefInsn) {
+        CstInsn origInsn = (CstInsn) ndefInsn.getOriginalRopInsn();
+
+        return ((CstInteger) origInsn.getConstant()).getValue();
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/back/FirstFitLocalCombiningAllocator.java b/dx/src/com/android/dx/ssa/back/FirstFitLocalCombiningAllocator.java
new file mode 100644
index 0000000..ec917d5
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/back/FirstFitLocalCombiningAllocator.java
@@ -0,0 +1,1259 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa.back;
+
+import com.android.dx.dex.DexOptions;
+import com.android.dx.rop.code.CstInsn;
+import com.android.dx.rop.code.LocalItem;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.cst.CstInteger;
+import com.android.dx.ssa.InterferenceRegisterMapper;
+import com.android.dx.ssa.NormalSsaInsn;
+import com.android.dx.ssa.Optimizer;
+import com.android.dx.ssa.PhiInsn;
+import com.android.dx.ssa.RegisterMapper;
+import com.android.dx.ssa.SsaBasicBlock;
+import com.android.dx.ssa.SsaInsn;
+import com.android.dx.ssa.SsaMethod;
+import com.android.dx.util.IntIterator;
+import com.android.dx.util.IntSet;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * Allocates registers in a first-fit fashion, with the bottom reserved for
+ * method parameters and all SSAregisters representing the same local variable
+ * kept together if possible.
+ */
+public class FirstFitLocalCombiningAllocator extends RegisterAllocator {
+
+    /**
+     * Alignment constraint that can be used during search of free registers.
+     */
+    private enum Alignment {
+      EVEN {
+        @Override
+        int nextClearBit(BitSet bitSet, int startIdx) {
+          int bitNumber = bitSet.nextClearBit(startIdx);
+          while (!isEven(bitNumber)) {
+            bitNumber = bitSet.nextClearBit(bitNumber + 1);
+          }
+          return bitNumber;
+        }
+      },
+      ODD {
+        @Override
+        int nextClearBit(BitSet bitSet, int startIdx) {
+          int bitNumber = bitSet.nextClearBit(startIdx);
+          while (isEven(bitNumber)) {
+            bitNumber = bitSet.nextClearBit(bitNumber + 1);
+          }
+          return bitNumber;
+        }
+      },
+      UNSPECIFIED {
+        @Override
+        int nextClearBit(BitSet bitSet, int startIdx) {
+          return bitSet.nextClearBit(startIdx);
+        }
+      };
+
+      /**
+       * Returns the index of the first bit that is set to {@code false} that occurs on or after the
+       * specified starting index and that respect {@link Alignment}.
+       *
+       * @param bitSet bitSet working on.
+       * @param startIdx {@code >= 0;} the index to start checking from (inclusive).
+       * @return the index of the next clear bit respecting alignment.
+       */
+      abstract int nextClearBit(BitSet bitSet, int startIdx);
+    }
+
+    /** local debug flag */
+    private static final boolean DEBUG = false;
+
+    /** maps local variable to a list of associated SSA registers */
+    private final Map<LocalItem, ArrayList<RegisterSpec>> localVariables;
+
+    /** list of move-result-pesudo instructions seen in this method */
+    private final ArrayList<NormalSsaInsn> moveResultPseudoInsns;
+
+    /** list of invoke-range instructions seen in this method */
+    private final ArrayList<NormalSsaInsn> invokeRangeInsns;
+
+    /** list of phi instructions seen in this method */
+    private final ArrayList<PhiInsn> phiInsns;
+
+    /** indexed by SSA reg; the set of SSA regs we've mapped */
+    private final BitSet ssaRegsMapped;
+
+    /** Register mapper which will be our result */
+    private final InterferenceRegisterMapper mapper;
+
+    /** end of rop registers range (starting at 0) reserved for parameters */
+    private final int paramRangeEnd;
+
+    /** set of rop registers reserved for parameters or local variables */
+    private final BitSet reservedRopRegs;
+
+    /** set of rop registers that have been used by anything */
+    private final BitSet usedRopRegs;
+
+    /** true if converter should take steps to minimize rop-form registers */
+    private final boolean minimizeRegisters;
+
+    /**
+     * Constructs instance.
+     *
+     * @param ssaMeth {@code non-null;} method to process
+     * @param interference non-null interference graph for SSA registers
+     * @param minimizeRegisters true if converter should take steps to
+     * minimize rop-form registers
+     */
+    public FirstFitLocalCombiningAllocator(
+            SsaMethod ssaMeth, InterferenceGraph interference,
+            boolean minimizeRegisters) {
+        super(ssaMeth, interference);
+
+        ssaRegsMapped = new BitSet(ssaMeth.getRegCount());
+
+        mapper = new InterferenceRegisterMapper(
+                interference, ssaMeth.getRegCount());
+
+        this.minimizeRegisters = minimizeRegisters;
+
+        /*
+         * Reserve space for the params at the bottom of the register
+         * space. Later, we'll flip the params to the end of the register
+         * space.
+         */
+
+        paramRangeEnd = ssaMeth.getParamWidth();
+
+        reservedRopRegs = new BitSet(paramRangeEnd * 2);
+        reservedRopRegs.set(0, paramRangeEnd);
+        usedRopRegs = new BitSet(paramRangeEnd * 2);
+        localVariables = new TreeMap<LocalItem, ArrayList<RegisterSpec>>();
+        moveResultPseudoInsns = new ArrayList<NormalSsaInsn>();
+        invokeRangeInsns = new ArrayList<NormalSsaInsn>();
+        phiInsns = new ArrayList<PhiInsn>();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean wantsParamsMovedHigh() {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public RegisterMapper allocateRegisters() {
+
+        analyzeInstructions();
+
+        if (DEBUG) {
+            printLocalVars();
+        }
+
+        if (DEBUG) System.out.println("--->Mapping local-associated params");
+        handleLocalAssociatedParams();
+
+        if (DEBUG) System.out.println("--->Mapping other params");
+        handleUnassociatedParameters();
+
+        if (DEBUG) System.out.println("--->Mapping invoke-range");
+        handleInvokeRangeInsns();
+
+        if (DEBUG) {
+            System.out.println("--->Mapping local-associated non-params");
+        }
+        handleLocalAssociatedOther();
+
+        if (DEBUG) System.out.println("--->Mapping check-cast results");
+        handleCheckCastResults();
+
+        if (DEBUG) System.out.println("--->Mapping phis");
+        handlePhiInsns();
+
+        if (DEBUG) System.out.println("--->Mapping others");
+        handleNormalUnassociated();
+
+        return mapper;
+    }
+
+    /**
+     * Dumps local variable table to stdout for debugging.
+     */
+    private void printLocalVars() {
+        System.out.println("Printing local vars");
+        for (Map.Entry<LocalItem, ArrayList<RegisterSpec>> e :
+                localVariables.entrySet()) {
+            StringBuilder regs = new StringBuilder();
+
+            regs.append('{');
+            regs.append(' ');
+            for (RegisterSpec reg : e.getValue()) {
+                regs.append('v');
+                regs.append(reg.getReg());
+                regs.append(' ');
+            }
+            regs.append('}');
+            System.out.printf("Local: %s Registers: %s\n", e.getKey(), regs);
+        }
+    }
+
+    /**
+     * Maps all local-associated parameters to rop registers.
+     */
+    private void handleLocalAssociatedParams() {
+        for (ArrayList<RegisterSpec> ssaRegs : localVariables.values()) {
+            int sz = ssaRegs.size();
+            int paramIndex = -1;
+            int paramCategory = 0;
+
+            // First, find out if this local variable is a parameter.
+            for (int i = 0; i < sz; i++) {
+                RegisterSpec ssaSpec = ssaRegs.get(i);
+                int ssaReg = ssaSpec.getReg();
+
+                paramIndex = getParameterIndexForReg(ssaReg);
+
+                if (paramIndex >= 0) {
+                    paramCategory = ssaSpec.getCategory();
+                    addMapping(ssaSpec, paramIndex);
+                    break;
+                }
+            }
+
+            if (paramIndex < 0) {
+                // This local wasn't a parameter.
+                continue;
+            }
+
+            // Any remaining local-associated registers will be mapped later.
+            tryMapRegs(ssaRegs, paramIndex, paramCategory, true);
+        }
+    }
+
+    /**
+     * Gets the parameter index for SSA registers that are method parameters.
+     * {@code -1} is returned for non-parameter registers.
+     *
+     * @param ssaReg {@code >=0;} SSA register to look up
+     * @return parameter index or {@code -1} if not a parameter
+     */
+    private int getParameterIndexForReg(int ssaReg) {
+        SsaInsn defInsn = ssaMeth.getDefinitionForRegister(ssaReg);
+        if (defInsn == null) {
+            return -1;
+        }
+
+        Rop opcode = defInsn.getOpcode();
+
+        // opcode == null for phi insns.
+        if (opcode != null && opcode.getOpcode() == RegOps.MOVE_PARAM) {
+            CstInsn origInsn = (CstInsn) defInsn.getOriginalRopInsn();
+            return  ((CstInteger) origInsn.getConstant()).getValue();
+        }
+
+        return -1;
+    }
+
+    /**
+     * Maps all local-associated registers that are not parameters.
+     * Tries to find an unreserved range that's wide enough for all of
+     * the SSA registers, and then tries to map them all to that
+     * range. If not all fit, a new range is tried until all registers
+     * have been fit.
+     */
+    private void handleLocalAssociatedOther() {
+        for (ArrayList<RegisterSpec> specs : localVariables.values()) {
+            int ropReg = paramRangeEnd;
+
+            boolean done = false;
+            do {
+                int maxCategory = 1;
+
+                // Compute max category for remaining unmapped registers.
+                int sz = specs.size();
+                for (int i = 0; i < sz; i++) {
+                    RegisterSpec ssaSpec = specs.get(i);
+                    int category = ssaSpec.getCategory();
+                    if (!ssaRegsMapped.get(ssaSpec.getReg())
+                            && category > maxCategory) {
+                        maxCategory = category;
+                    }
+                }
+
+                ropReg = findRopRegForLocal(ropReg, maxCategory);
+                if (canMapRegs(specs, ropReg)) {
+                    done = tryMapRegs(specs, ropReg, maxCategory, true);
+                }
+
+                // Increment for next call to findRopRegForLocal.
+                ropReg++;
+            } while (!done);
+        }
+    }
+
+    /**
+     * Tries to map a list of SSA registers into the a rop reg, marking
+     * used rop space as reserved. SSA registers that don't fit are left
+     * unmapped.
+     *
+     * @param specs {@code non-null;} SSA registers to attempt to map
+     * @param ropReg {@code >=0;} rop register to map to
+     * @param maxAllowedCategory {@code 1..2;} maximum category
+     * allowed in mapping.
+     * @param markReserved do so if {@code true}
+     * @return {@code true} if all registers were mapped, {@code false}
+     * if some remain unmapped
+     */
+    private boolean tryMapRegs(
+            ArrayList<RegisterSpec> specs, int ropReg,
+            int maxAllowedCategory, boolean markReserved) {
+        boolean remaining = false;
+        for (RegisterSpec spec : specs) {
+            if (ssaRegsMapped.get(spec.getReg())) {
+                continue;
+            }
+
+            boolean succeeded;
+            succeeded = tryMapReg(spec, ropReg, maxAllowedCategory);
+            remaining = !succeeded || remaining;
+            if (succeeded && markReserved) {
+                // This only needs to be called once really with
+                // the widest category used, but <shrug>
+                markReserved(ropReg, spec.getCategory());
+            }
+        }
+        return !remaining;
+    }
+
+    /**
+     * Tries to map an SSA register to a rop register.
+     *
+     * @param ssaSpec {@code non-null;} SSA register
+     * @param ropReg {@code >=0;} rop register
+     * @param maxAllowedCategory {@code 1..2;} the maximum category
+     * that the SSA register is allowed to be
+     * @return {@code true} if map succeeded, {@code false} if not
+     */
+    private boolean tryMapReg(RegisterSpec ssaSpec, int ropReg,
+            int maxAllowedCategory) {
+        if (ssaSpec.getCategory() <= maxAllowedCategory
+                && !ssaRegsMapped.get(ssaSpec.getReg())
+                && canMapReg(ssaSpec, ropReg)) {
+            addMapping(ssaSpec, ropReg);
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Marks a range of rop registers as "reserved for a local variable."
+     *
+     * @param ropReg {@code >= 0;} rop register to reserve
+     * @param category {@code > 0;} width to reserve
+     */
+    private void markReserved(int ropReg, int category) {
+        reservedRopRegs.set(ropReg, ropReg + category, true);
+    }
+
+    /**
+     * Checks to see if any rop registers in the specified range are reserved
+     * for local variables or parameters.
+     *
+     * @param ropRangeStart {@code >= 0;} lowest rop register
+     * @param width {@code > 0;} number of rop registers in range.
+     * @return {@code true} if any register in range is marked reserved
+     */
+    private boolean rangeContainsReserved(int ropRangeStart, int width) {
+        for (int i = ropRangeStart; i < (ropRangeStart + width); i++) {
+            if (reservedRopRegs.get(i)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns true if given rop register represents the {@code this} pointer
+     * for a non-static method.
+     *
+     * @param startReg rop register
+     * @return true if the "this" pointer is located here.
+     */
+    private boolean isThisPointerReg(int startReg) {
+        // "this" is always the first parameter.
+        return startReg == 0 && !ssaMeth.isStatic();
+    }
+
+    /**
+     * Return the register alignment constraint to have 64-bits registers that will be align on even
+     * dalvik registers after that parameter registers are move up to the top of the frame to match
+     * the calling convention.
+     *
+     * @param regCategory category of the register that will be aligned.
+     * @return the register alignment constraint.
+     */
+    private Alignment getAlignment(int regCategory) {
+      Alignment alignment = Alignment.UNSPECIFIED;
+
+      if (DexOptions.ALIGN_64BIT_REGS_SUPPORT && regCategory == 2) {
+        if (isEven(paramRangeEnd)) {
+          alignment = Alignment.EVEN;
+        } else {
+          alignment = Alignment.ODD;
+        }
+      }
+
+      return alignment;
+    }
+
+    /**
+     * Finds unreserved rop registers with a specific category.
+     *
+     * @param startReg {@code >= 0;} a rop register to start the search at
+     * @param regCategory {@code > 0;} category of the searched registers.
+     * @return {@code >= 0;} start of available registers.
+     */
+    private int findNextUnreservedRopReg(int startReg, int regCategory) {
+      return findNextUnreservedRopReg(startReg, regCategory, getAlignment(regCategory));
+    }
+
+    /**
+     * Finds a range of unreserved rop registers.
+     *
+     * @param startReg {@code >= 0;} a rop register to start the search at
+     * @param width {@code > 0;} the width, in registers, required.
+     * @param alignment the alignment constraint.
+     * @return {@code >= 0;} start of available register range.
+     */
+    private int findNextUnreservedRopReg(int startReg, int width, Alignment alignment) {
+      int reg = alignment.nextClearBit(reservedRopRegs, startReg);
+
+      while (true) {
+        int i = 1;
+
+        while (i < width && !reservedRopRegs.get(reg + i)) {
+          i++;
+        }
+
+        if (i == width) {
+          return reg;
+        }
+
+        reg = alignment.nextClearBit(reservedRopRegs, reg + i);
+      }
+    }
+
+    /**
+     * Finds rop registers that can be used for local variables.
+     * If {@code MIX_LOCALS_AND_OTHER} is {@code false}, this means any
+     * rop register that has not yet been used.
+     *
+     * @param startReg {@code >= 0;} a rop register to start the search at
+     * @param category {@code > 0;} the register category required.
+     * @return {@code >= 0;} start of available registers.
+     */
+    private int findRopRegForLocal(int startReg, int category) {
+      Alignment alignment = getAlignment(category);
+      int reg = alignment.nextClearBit(usedRopRegs, startReg);
+
+      while (true) {
+        int i = 1;
+
+        while (i < category && !usedRopRegs.get(reg + i)) {
+          i++;
+        }
+
+        if (i == category) {
+          return reg;
+        }
+
+        reg = alignment.nextClearBit(usedRopRegs, reg + i);
+      }
+    }
+
+    /**
+     * Maps any parameter that isn't local-associated, which can happen
+     * in the case where there is no java debug info.
+     */
+    private void handleUnassociatedParameters() {
+        int szSsaRegs = ssaMeth.getRegCount();
+
+        for (int ssaReg = 0; ssaReg < szSsaRegs; ssaReg++) {
+            if (ssaRegsMapped.get(ssaReg)) {
+                // We already did this one above
+                continue;
+            }
+
+            int paramIndex = getParameterIndexForReg(ssaReg);
+
+            RegisterSpec ssaSpec = getDefinitionSpecForSsaReg(ssaReg);
+            if (paramIndex >= 0) {
+                addMapping(ssaSpec, paramIndex);
+            }
+        }
+    }
+
+    /**
+     * Handles all insns that want a register range for their sources.
+     */
+    private void handleInvokeRangeInsns() {
+        for (NormalSsaInsn insn : invokeRangeInsns) {
+            adjustAndMapSourceRangeRange(insn);
+        }
+    }
+
+    /**
+     * Handles check cast results to reuse the same source register.
+     * Inserts a move if it can't map the same register to both and the
+     * check cast is not caught.
+     */
+    private void handleCheckCastResults() {
+        for (NormalSsaInsn insn : moveResultPseudoInsns) {
+            RegisterSpec moveRegSpec = insn.getResult();
+            int moveReg = moveRegSpec.getReg();
+            BitSet predBlocks = insn.getBlock().getPredecessors();
+
+            // Expect one predecessor block only
+            if (predBlocks.cardinality() != 1) {
+                continue;
+            }
+
+            SsaBasicBlock predBlock =
+                    ssaMeth.getBlocks().get(predBlocks.nextSetBit(0));
+            ArrayList<SsaInsn> insnList = predBlock.getInsns();
+
+            /**
+             * If the predecessor block has a check-cast, it will be the last
+             * instruction
+             */
+            SsaInsn checkCastInsn = insnList.get(insnList.size() - 1);
+            if (checkCastInsn.getOpcode().getOpcode() != RegOps.CHECK_CAST) {
+                continue;
+            }
+
+            RegisterSpec checkRegSpec = checkCastInsn.getSources().get(0);
+            int checkReg = checkRegSpec.getReg();
+
+            /**
+             * See if either register is already mapped. Most likely the move
+             * result will be mapped already since the cast result is stored
+             * in a local variable.
+             */
+            int category = checkRegSpec.getCategory();
+            boolean moveMapped = ssaRegsMapped.get(moveReg);
+            boolean checkMapped = ssaRegsMapped.get(checkReg);
+            if (moveMapped & !checkMapped) {
+                int moveRopReg = mapper.oldToNew(moveReg);
+                checkMapped = tryMapReg(checkRegSpec, moveRopReg, category);
+            }
+            if (checkMapped & !moveMapped) {
+                int checkRopReg = mapper.oldToNew(checkReg);
+                moveMapped = tryMapReg(moveRegSpec, checkRopReg, category);
+            }
+
+            // Map any unmapped registers to anything available
+            if (!moveMapped || !checkMapped) {
+                int ropReg = findNextUnreservedRopReg(paramRangeEnd, category);
+                ArrayList<RegisterSpec> ssaRegs =
+                    new ArrayList<RegisterSpec>(2);
+                ssaRegs.add(moveRegSpec);
+                ssaRegs.add(checkRegSpec);
+
+                while (!tryMapRegs(ssaRegs, ropReg, category, false)) {
+                    ropReg = findNextUnreservedRopReg(ropReg + 1, category);
+                }
+            }
+
+            /*
+             * If source and result have a different mapping, insert a move so
+             * they can have the same mapping. Don't do this if the check cast
+             * is caught, since it will overwrite a potentially live value.
+             */
+            boolean hasExceptionHandlers =
+                checkCastInsn.getOriginalRopInsn().getCatches().size() != 0;
+            int moveRopReg = mapper.oldToNew(moveReg);
+            int checkRopReg = mapper.oldToNew(checkReg);
+            if (moveRopReg != checkRopReg && !hasExceptionHandlers) {
+                ((NormalSsaInsn) checkCastInsn).changeOneSource(0,
+                        insertMoveBefore(checkCastInsn, checkRegSpec));
+                addMapping(checkCastInsn.getSources().get(0), moveRopReg);
+            }
+        }
+    }
+
+    /**
+    * Handles all phi instructions, trying to map them to a common register.
+    */
+    private void handlePhiInsns() {
+        for (PhiInsn insn : phiInsns) {
+            processPhiInsn(insn);
+        }
+    }
+
+    /**
+     * Maps all non-parameter, non-local variable registers.
+     */
+    private void handleNormalUnassociated() {
+        int szSsaRegs = ssaMeth.getRegCount();
+
+        for (int ssaReg = 0; ssaReg < szSsaRegs; ssaReg++) {
+            if (ssaRegsMapped.get(ssaReg)) {
+                // We already did this one
+                continue;
+            }
+
+            RegisterSpec ssaSpec = getDefinitionSpecForSsaReg(ssaReg);
+
+            if (ssaSpec == null) continue;
+
+            int category = ssaSpec.getCategory();
+            // Find a rop reg that does not interfere
+            int ropReg = findNextUnreservedRopReg(paramRangeEnd, category);
+            while (!canMapReg(ssaSpec, ropReg)) {
+                ropReg = findNextUnreservedRopReg(ropReg + 1, category);
+            }
+
+            addMapping(ssaSpec, ropReg);
+        }
+    }
+
+    /**
+     * Checks to see if a list of SSA registers can all be mapped into
+     * the same rop reg. Ignores registers that have already been mapped,
+     * and checks the interference graph and ensures the range does not
+     * cross the parameter range.
+     *
+     * @param specs {@code non-null;} SSA registers to check
+     * @param ropReg {@code >=0;} rop register to check mapping to
+     * @return {@code true} if all unmapped registers can be mapped
+     */
+    private boolean canMapRegs(ArrayList<RegisterSpec> specs, int ropReg) {
+        for (RegisterSpec spec : specs) {
+            if (ssaRegsMapped.get(spec.getReg())) continue;
+            if (!canMapReg(spec, ropReg)) return false;
+        }
+        return true;
+    }
+
+    /**
+     * Checks to see if {@code ssaSpec} can be mapped to
+     * {@code ropReg}. Checks interference graph and ensures
+     * the range does not cross the parameter range.
+     *
+     * @param ssaSpec {@code non-null;} SSA spec
+     * @param ropReg prosepctive new-namespace reg
+     * @return {@code true} if mapping is possible
+     */
+    private boolean canMapReg(RegisterSpec ssaSpec, int ropReg) {
+        int category = ssaSpec.getCategory();
+        return !(spansParamRange(ropReg, category)
+                || mapper.interferes(ssaSpec, ropReg));
+    }
+
+    /**
+     * Returns true if the specified rop register + category
+     * will cross the boundry between the lower {@code paramWidth}
+     * registers reserved for method params and the upper registers. We cannot
+     * allocate a register that spans the param block and the normal block,
+     * because we will be moving the param block to high registers later.
+     *
+     * @param ssaReg register in new namespace
+     * @param category width that the register will have
+     * @return {@code true} in the case noted above
+     */
+    private boolean spansParamRange(int ssaReg, int category) {
+        return ((ssaReg < paramRangeEnd)
+                && ((ssaReg + category) > paramRangeEnd));
+    }
+
+    /**
+     * Analyze each instruction and find out all the local variable assignments
+     * and move-result-pseudo/invoke-range instrucitons.
+     */
+    private void analyzeInstructions() {
+        ssaMeth.forEachInsn(new SsaInsn.Visitor() {
+            /** {@inheritDoc} */
+            @Override
+            public void visitMoveInsn(NormalSsaInsn insn) {
+                processInsn(insn);
+            }
+
+            /** {@inheritDoc} */
+            @Override
+            public void visitPhiInsn(PhiInsn insn) {
+                processInsn(insn);
+            }
+
+            /** {@inheritDoc} */
+            @Override
+            public void visitNonMoveInsn(NormalSsaInsn insn) {
+                processInsn(insn);
+            }
+
+            /**
+             * This method collects three types of instructions:
+             *
+             * 1) Adds a local variable assignment to the
+             *    {@code localVariables} map.
+             * 2) Add move-result-pseudo to the
+             *    {@code moveResultPseudoInsns} list.
+             * 3) Add invoke-range to the
+             *    {@code invokeRangeInsns} list.
+             *
+             * @param insn {@code non-null;} insn that may represent a
+             * local variable assignment
+             */
+            private void processInsn(SsaInsn insn) {
+                RegisterSpec assignment;
+                assignment = insn.getLocalAssignment();
+
+                if (assignment != null) {
+                    LocalItem local = assignment.getLocalItem();
+
+                    ArrayList<RegisterSpec> regList
+                        = localVariables.get(local);
+
+                    if (regList == null) {
+                        regList = new ArrayList<RegisterSpec>();
+                        localVariables.put(local, regList);
+                    }
+
+                    regList.add(assignment);
+                }
+
+                if (insn instanceof NormalSsaInsn) {
+                    if (insn.getOpcode().getOpcode() ==
+                            RegOps.MOVE_RESULT_PSEUDO) {
+                        moveResultPseudoInsns.add((NormalSsaInsn) insn);
+                    } else if (Optimizer.getAdvice().requiresSourcesInOrder(
+                            insn.getOriginalRopInsn().getOpcode(),
+                            insn.getSources())) {
+                        invokeRangeInsns.add((NormalSsaInsn) insn);
+                    }
+                } else if (insn instanceof PhiInsn) {
+                    phiInsns.add((PhiInsn) insn);
+                }
+
+            }
+        });
+    }
+
+    /**
+     * Adds a mapping from an SSA register to a rop register.
+     * {@link #canMapReg} should have already been called.
+     *
+     * @param ssaSpec {@code non-null;} SSA register to map from
+     * @param ropReg {@code >=0;} rop register to map to
+     */
+    private void addMapping(RegisterSpec ssaSpec, int ropReg) {
+        int ssaReg = ssaSpec.getReg();
+
+        // An assertion.
+        if (ssaRegsMapped.get(ssaReg) || !canMapReg(ssaSpec, ropReg)) {
+            throw new RuntimeException(
+                    "attempt to add invalid register mapping");
+        }
+
+        if (DEBUG) {
+            System.out.printf("Add mapping s%d -> v%d c:%d\n",
+                    ssaSpec.getReg(), ropReg, ssaSpec.getCategory());
+        }
+
+        int category = ssaSpec.getCategory();
+        mapper.addMapping(ssaSpec.getReg(), ropReg, category);
+        ssaRegsMapped.set(ssaReg);
+        usedRopRegs.set(ropReg, ropReg + category);
+    }
+
+
+    /**
+     * Maps the source registers of the specified instruction such that they
+     * will fall in a contiguous range in rop form. Moves are inserted as
+     * necessary to allow the range to be allocated.
+     *
+     * @param insn {@code non-null;} insn whos sources to process
+     */
+    private void adjustAndMapSourceRangeRange(NormalSsaInsn insn) {
+        int newRegStart = findRangeAndAdjust(insn);
+
+        RegisterSpecList sources = insn.getSources();
+        int szSources = sources.size();
+        int nextRopReg = newRegStart;
+
+        for (int i = 0; i < szSources; i++) {
+            RegisterSpec source = sources.get(i);
+            int sourceReg = source.getReg();
+            int category = source.getCategory();
+            int curRopReg = nextRopReg;
+            nextRopReg += category;
+
+            if (ssaRegsMapped.get(sourceReg)) {
+                continue;
+            }
+
+            LocalItem localItem = getLocalItemForReg(sourceReg);
+            addMapping(source, curRopReg);
+
+            if (localItem != null) {
+                markReserved(curRopReg, category);
+                ArrayList<RegisterSpec> similarRegisters
+                        = localVariables.get(localItem);
+
+                int szSimilar = similarRegisters.size();
+
+                /*
+                 * Try to map all SSA registers also associated with
+                 * this local.
+                 */
+                for (int j = 0; j < szSimilar; j++) {
+                    RegisterSpec similarSpec = similarRegisters.get(j);
+                    int similarReg = similarSpec.getReg();
+
+                    // Don't map anything that's also a source.
+                    if (-1 != sources.indexOfRegister(similarReg)) {
+                        continue;
+                    }
+
+                    // Registers left unmapped will get handled later.
+                    tryMapReg(similarSpec, curRopReg, category);
+                }
+            }
+        }
+    }
+
+    /**
+     * Find a contiguous rop register range that fits the specified
+     * instruction's sources. First, try to center the range around
+     * sources that have already been mapped to rop registers. If that fails,
+     * just find a new contiguous range that doesn't interfere.
+     *
+     * @param insn {@code non-null;} the insn whose sources need to
+     * fit. Must be last insn in basic block.
+     * @return {@code >= 0;} rop register of start of range
+     */
+    private int findRangeAndAdjust(NormalSsaInsn insn) {
+        RegisterSpecList sources = insn.getSources();
+        int szSources = sources.size();
+        // the category for each source index
+        int categoriesForIndex[] = new int[szSources];
+        int rangeLength = 0;
+
+        // Compute rangeLength and categoriesForIndex
+        for (int i = 0; i < szSources; i++) {
+            int category = sources.get(i).getCategory();
+            categoriesForIndex[i] = category;
+            rangeLength += categoriesForIndex[i];
+        }
+
+        // the highest score of fits tried so far
+        int maxScore = Integer.MIN_VALUE;
+        // the high scoring range's start
+        int resultRangeStart = -1;
+        // by source index: set of sources needing moves in high scoring plan
+        BitSet resultMovesRequired = null;
+
+        /*
+         * First, go through each source that's already been mapped. Try
+         * to center the range around the rop register this source is mapped
+         * to.
+         */
+        int rangeStartOffset = 0;
+        for (int i = 0; i < szSources; i++) {
+            int ssaCenterReg = sources.get(i).getReg();
+
+            if (i != 0) {
+                rangeStartOffset -= categoriesForIndex[i - 1];
+            }
+            if (!ssaRegsMapped.get(ssaCenterReg)) {
+                continue;
+            }
+
+            int rangeStart = mapper.oldToNew(ssaCenterReg) + rangeStartOffset;
+
+            if (rangeStart < 0 || spansParamRange(rangeStart, rangeLength)) {
+                continue;
+            }
+
+            BitSet curMovesRequired = new BitSet(szSources);
+
+            int fitWidth
+                    = fitPlanForRange(rangeStart, insn, categoriesForIndex,
+                    curMovesRequired);
+
+            if (fitWidth < 0) {
+                continue;
+            }
+
+            int score = fitWidth - curMovesRequired.cardinality();
+
+            if (score > maxScore) {
+                maxScore = score;
+                resultRangeStart = rangeStart;
+                resultMovesRequired = curMovesRequired;
+            }
+
+            if (fitWidth == rangeLength) {
+                // We can't do any better than this, so stop here
+                break;
+            }
+        }
+
+        /*
+         * If we were unable to find a plan for a fit centered around
+         * an already-mapped source, just try to find a range of
+         * registers we can move the range into.
+         */
+
+        if (resultRangeStart == -1) {
+            resultMovesRequired = new BitSet(szSources);
+
+            resultRangeStart = findAnyFittingRange(insn, rangeLength,
+                    categoriesForIndex, resultMovesRequired);
+        }
+
+        /*
+         * Now, insert any moves required.
+         */
+
+        for (int i = resultMovesRequired.nextSetBit(0); i >= 0;
+             i = resultMovesRequired.nextSetBit(i+1)) {
+            insn.changeOneSource(i, insertMoveBefore(insn, sources.get(i)));
+        }
+
+        return resultRangeStart;
+    }
+
+    /**
+     * Finds an unreserved range that will fit the sources of the
+     * specified instruction. Does not bother trying to center the range
+     * around an already-mapped source register;
+     *
+     * @param insn {@code non-null;} insn to build range for
+     * @param rangeLength {@code >=0;} length required in register units
+     * @param categoriesForIndex {@code non-null;} indexed by source index;
+     * the category for each source
+     * @param outMovesRequired {@code non-null;} an output parameter indexed by
+     * source index that will contain the set of sources which need
+     * moves inserted
+     * @return the rop register that starts the fitting range
+     */
+    private int findAnyFittingRange(NormalSsaInsn insn, int rangeLength,
+            int[] categoriesForIndex, BitSet outMovesRequired) {
+        Alignment alignment = Alignment.UNSPECIFIED;
+
+        if (DexOptions.ALIGN_64BIT_REGS_SUPPORT) {
+          int regNumber = 0;
+          int p64bitsAligned = 0;
+          int p64bitsNotAligned = 0;
+          for (int category : categoriesForIndex) {
+            if (category == 2) {
+              if (isEven(regNumber)) {
+                p64bitsAligned++;
+              } else {
+                p64bitsNotAligned++;
+              }
+              regNumber += 2;
+            } else {
+              regNumber += 1;
+            }
+          }
+
+          if (p64bitsNotAligned > p64bitsAligned) {
+            if (isEven(paramRangeEnd)) {
+              alignment = Alignment.ODD;
+            } else {
+              alignment = Alignment.EVEN;
+            }
+          } else if (p64bitsAligned > 0) {
+            if (isEven(paramRangeEnd)) {
+              alignment = Alignment.EVEN;
+            } else {
+              alignment = Alignment.ODD;
+            }
+          }
+        }
+
+        int rangeStart = paramRangeEnd;
+        while (true) {
+          rangeStart = findNextUnreservedRopReg(rangeStart, rangeLength, alignment);
+
+          int fitWidth = fitPlanForRange(rangeStart, insn, categoriesForIndex, outMovesRequired);
+
+          if (fitWidth >= 0) {
+            break;
+          }
+          rangeStart++;
+          outMovesRequired.clear();
+        }
+
+        return rangeStart;
+    }
+
+    /**
+     * Attempts to build a plan for fitting a range of sources into rop
+     * registers.
+     *
+     * @param ropReg {@code >= 0;} rop reg that begins range
+     * @param insn {@code non-null;} insn to plan range for
+     * @param categoriesForIndex {@code non-null;} indexed by source index;
+     * the category for each source
+     * @param outMovesRequired {@code non-null;} an output parameter indexed by
+     * source index that will contain the set of sources which need
+     * moves inserted
+     * @return the width of the fit that that does not involve added moves or
+     * {@code -1} if "no fit possible"
+     */
+    private int fitPlanForRange(int ropReg, NormalSsaInsn insn,
+            int[] categoriesForIndex, BitSet outMovesRequired) {
+        RegisterSpecList sources = insn.getSources();
+        int szSources = sources.size();
+        int fitWidth = 0;
+        IntSet liveOut = insn.getBlock().getLiveOutRegs();
+        RegisterSpecList liveOutSpecs = ssaSetToSpecs(liveOut);
+
+        // An SSA reg may only be mapped into a range once.
+        BitSet seen = new BitSet(ssaMeth.getRegCount());
+
+        for (int i = 0; i < szSources ; i++) {
+            RegisterSpec ssaSpec = sources.get(i);
+            int ssaReg = ssaSpec.getReg();
+            int category = categoriesForIndex[i];
+
+            if (i != 0) {
+                ropReg += categoriesForIndex[i-1];
+            }
+
+            if (ssaRegsMapped.get(ssaReg)
+                    && mapper.oldToNew(ssaReg) == ropReg) {
+                // This is a register that is already mapped appropriately.
+                fitWidth += category;
+            } else if (rangeContainsReserved(ropReg, category)) {
+                fitWidth = -1;
+                break;
+            } else if (!ssaRegsMapped.get(ssaReg)
+                    && canMapReg(ssaSpec, ropReg)
+                    && !seen.get(ssaReg)) {
+                // This is a register that can be mapped appropriately.
+                fitWidth += category;
+            } else if (!mapper.areAnyPinned(liveOutSpecs, ropReg, category)
+                    && !mapper.areAnyPinned(sources, ropReg, category)) {
+                /*
+                 * This is a source that can be moved. We can insert a
+                 * move as long as:
+                 *
+                 *   * no SSA register pinned to the desired rop reg
+                 *     is live out on the block
+                 *
+                 *   * no SSA register pinned to desired rop reg is
+                 *     a source of this insn (since this may require
+                 *     overlapping moves, which we can't presently handle)
+                 */
+
+                outMovesRequired.set(i);
+            } else {
+                fitWidth = -1;
+                break;
+            }
+
+            seen.set(ssaReg);
+        }
+        return fitWidth;
+    }
+
+    /**
+     * Converts a bit set of SSA registers into a RegisterSpecList containing
+     * the definition specs of all the registers.
+     *
+     * @param ssaSet {@code non-null;} set of SSA registers
+     * @return list of RegisterSpecs as noted above
+     */
+    RegisterSpecList ssaSetToSpecs(IntSet ssaSet) {
+        RegisterSpecList result = new RegisterSpecList(ssaSet.elements());
+
+        IntIterator iter = ssaSet.iterator();
+
+        int i = 0;
+        while (iter.hasNext()) {
+            result.set(i++, getDefinitionSpecForSsaReg(iter.next()));
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets a local item associated with an ssa register, if one exists.
+     *
+     * @param ssaReg {@code >= 0;} SSA register
+     * @return {@code null-ok;} associated local item or null
+     */
+    private LocalItem getLocalItemForReg(int ssaReg) {
+        for (Map.Entry<LocalItem, ArrayList<RegisterSpec>> entry :
+                 localVariables.entrySet()) {
+            for (RegisterSpec spec : entry.getValue()) {
+                if (spec.getReg() == ssaReg) {
+                    return entry.getKey();
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Attempts to map the sources and result of a phi to a common register.
+     * Will try existing mappings first, from most to least common. If none
+     * of the registers have mappings yet, a new mapping is created.
+     */
+    private void processPhiInsn(PhiInsn insn) {
+        RegisterSpec result = insn.getResult();
+        int resultReg = result.getReg();
+        int category = result.getCategory();
+
+        RegisterSpecList sources = insn.getSources();
+        int sourcesSize = sources.size();
+
+        // List of phi sources / result that need mapping
+        ArrayList<RegisterSpec> ssaRegs = new ArrayList<RegisterSpec>();
+
+        // Track how many times a particular mapping is found
+        Multiset mapSet = new Multiset(sourcesSize + 1);
+
+        /*
+         * If the result of the phi has an existing mapping, get it.
+         * Otherwise, add it to the list of regs that need mapping.
+         */
+        if (ssaRegsMapped.get(resultReg)) {
+            mapSet.add(mapper.oldToNew(resultReg));
+        } else {
+            ssaRegs.add(result);
+        }
+
+        for (int i = 0; i < sourcesSize; i++) {
+            RegisterSpec source = sources.get(i);
+            SsaInsn def = ssaMeth.getDefinitionForRegister(source.getReg());
+            RegisterSpec sourceDef = def.getResult();
+            int sourceReg = sourceDef.getReg();
+
+            /*
+             * If a source of the phi has an existing mapping, get it.
+             * Otherwise, add it to the list of regs that need mapping.
+             */
+            if (ssaRegsMapped.get(sourceReg)) {
+                mapSet.add(mapper.oldToNew(sourceReg));
+            } else {
+                ssaRegs.add(sourceDef);
+            }
+        }
+
+        // Try all existing mappings, with the most common ones first
+        for (int i = 0; i < mapSet.getSize(); i++) {
+            int maxReg = mapSet.getAndRemoveHighestCount();
+            tryMapRegs(ssaRegs, maxReg, category, false);
+        }
+
+        // Map any remaining unmapped regs with whatever fits
+        int mapReg = findNextUnreservedRopReg(paramRangeEnd, category);
+        while (!tryMapRegs(ssaRegs, mapReg, category, false)) {
+            mapReg = findNextUnreservedRopReg(mapReg + 1, category);
+        }
+    }
+
+    private static boolean isEven(int regNumger) {
+      return ((regNumger & 1) == 0);
+    }
+
+    // A set that tracks how often elements are added to it.
+    private static class Multiset {
+        private final int[] reg;
+        private final int[] count;
+        private int size;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param maxSize the maximum distinct elements the set may have
+         */
+        public Multiset(int maxSize) {
+            reg = new int[maxSize];
+            count = new int[maxSize];
+            size = 0;
+        }
+
+        /**
+         * Adds an element to the set.
+         *
+         * @param element element to add
+         */
+        public void add(int element) {
+            for (int i = 0; i < size; i++) {
+                if (reg[i] == element) {
+                    count[i]++;
+                    return;
+                }
+            }
+
+            reg[size] = element;
+            count[size] = 1;
+            size++;
+        }
+
+        /**
+         * Searches the set for the element that has been added the most.
+         * In the case of a tie, the element that was added first is returned.
+         * Then, it clears the count on that element. The size of the set
+         * remains unchanged.
+         *
+         * @return element with the highest count
+         */
+        public int getAndRemoveHighestCount() {
+            int maxIndex = -1;
+            int maxReg = -1;
+            int maxCount = 0;
+
+            for (int i = 0; i < size; i++) {
+                if (maxCount < count[i]) {
+                    maxIndex = i;
+                    maxReg = reg[i];
+                    maxCount = count[i];
+                }
+            }
+
+            count[maxIndex] = 0;
+            return maxReg;
+        }
+
+        /**
+         * Gets the number of distinct elements in the set.
+         *
+         * @return size of the set
+         */
+        public int getSize() {
+            return size;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/back/IdenticalBlockCombiner.java b/dx/src/com/android/dx/ssa/back/IdenticalBlockCombiner.java
new file mode 100644
index 0000000..b2be1dd
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/back/IdenticalBlockCombiner.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa.back;
+
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.util.IntList;
+import java.util.BitSet;
+
+/**
+ * Searches for basic blocks that all have the same successor and insns
+ * but different predecessors. These blocks are then combined into a single
+ * block and the now-unused blocks are deleted. These identical blocks
+ * frequently are created when catch blocks are edge-split.
+ */
+public class IdenticalBlockCombiner {
+    private final RopMethod ropMethod;
+    private final BasicBlockList blocks;
+    private final BasicBlockList newBlocks;
+
+    /**
+     * Constructs instance. Call {@code process()} to run.
+     *
+     * @param rm {@code non-null;} instance to process
+     */
+    public IdenticalBlockCombiner(RopMethod rm) {
+        ropMethod = rm;
+        blocks = ropMethod.getBlocks();
+        newBlocks = blocks.getMutableCopy();
+    }
+
+    /**
+     * Runs algorithm. TODO: This is n^2, and could be made linear-ish with
+     * a hash. In particular, hash the contents of each block and only
+     * compare blocks with the same hash.
+     *
+     * @return {@code non-null;} new method that has been processed
+     */
+    public RopMethod process() {
+        int szBlocks = blocks.size();
+        // indexed by label
+        BitSet toDelete = new BitSet(blocks.getMaxLabel());
+
+        // For each non-deleted block...
+        for (int bindex = 0; bindex < szBlocks; bindex++) {
+            BasicBlock b = blocks.get(bindex);
+
+            if (toDelete.get(b.getLabel())) {
+                // doomed block
+                continue;
+            }
+
+            IntList preds = ropMethod.labelToPredecessors(b.getLabel());
+
+            // ...look at all of it's predecessors that have only one succ...
+            int szPreds = preds.size();
+            for (int i = 0; i < szPreds; i++) {
+                int iLabel = preds.get(i);
+
+                BasicBlock iBlock = blocks.labelToBlock(iLabel);
+
+                if (toDelete.get(iLabel)
+                        || iBlock.getSuccessors().size() > 1
+                        || iBlock.getFirstInsn().getOpcode().getOpcode() ==
+                            RegOps.MOVE_RESULT) {
+                    continue;
+                }
+
+                IntList toCombine = new IntList();
+
+                // ...and see if they can be combined with any other preds...
+                for (int j = i + 1; j < szPreds; j++) {
+                    int jLabel = preds.get(j);
+                    BasicBlock jBlock = blocks.labelToBlock(jLabel);
+
+                    if (jBlock.getSuccessors().size() == 1
+                            && compareInsns(iBlock, jBlock)) {
+
+                        toCombine.add(jLabel);
+                        toDelete.set(jLabel);
+                    }
+                }
+
+                combineBlocks(iLabel, toCombine);
+            }
+        }
+
+        for (int i = szBlocks - 1; i >= 0; i--) {
+            if (toDelete.get(newBlocks.get(i).getLabel())) {
+                newBlocks.set(i, null);
+            }
+        }
+
+        newBlocks.shrinkToFit();
+        newBlocks.setImmutable();
+
+        return new RopMethod(newBlocks, ropMethod.getFirstLabel());
+    }
+
+    /**
+     * Helper method to compare the contents of two blocks.
+     *
+     * @param a {@code non-null;} a block to compare
+     * @param b {@code non-null;} another block to compare
+     * @return {@code true} iff the two blocks' instructions are the same
+     */
+    private static boolean compareInsns(BasicBlock a, BasicBlock b) {
+        return a.getInsns().contentEquals(b.getInsns());
+    }
+
+    /**
+     * Combines blocks proven identical into one alpha block, re-writing
+     * all of the successor links that point to the beta blocks to point
+     * to the alpha block instead.
+     *
+     * @param alphaLabel block that will replace all the beta block
+     * @param betaLabels label list of blocks to combine
+     */
+    private void combineBlocks(int alphaLabel, IntList betaLabels) {
+        int szBetas = betaLabels.size();
+
+        for (int i = 0; i < szBetas; i++) {
+            int betaLabel = betaLabels.get(i);
+            BasicBlock bb = blocks.labelToBlock(betaLabel);
+            IntList preds = ropMethod.labelToPredecessors(bb.getLabel());
+            int szPreds = preds.size();
+
+            for (int j = 0; j < szPreds; j++) {
+                BasicBlock predBlock = newBlocks.labelToBlock(preds.get(j));
+                replaceSucc(predBlock, betaLabel, alphaLabel);
+            }
+        }
+    }
+
+    /**
+     * Replaces one of a block's successors with a different label. Constructs
+     * an updated BasicBlock instance and places it in {@code newBlocks}.
+     *
+     * @param block block to replace
+     * @param oldLabel label of successor to replace
+     * @param newLabel label of new successor
+     */
+    private void replaceSucc(BasicBlock block, int oldLabel, int newLabel) {
+        IntList newSuccessors = block.getSuccessors().mutableCopy();
+        int newPrimarySuccessor;
+
+        newSuccessors.set(newSuccessors.indexOf(oldLabel), newLabel);
+        newPrimarySuccessor = block.getPrimarySuccessor();
+
+        if (newPrimarySuccessor == oldLabel) {
+            newPrimarySuccessor = newLabel;
+        }
+
+        newSuccessors.setImmutable();
+
+        BasicBlock newBB = new BasicBlock(block.getLabel(),
+                block.getInsns(), newSuccessors, newPrimarySuccessor);
+
+        newBlocks.set(newBlocks.indexOfLabel(block.getLabel()), newBB);
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/back/InterferenceGraph.java b/dx/src/com/android/dx/ssa/back/InterferenceGraph.java
new file mode 100644
index 0000000..5ed2f82
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/back/InterferenceGraph.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa.back;
+
+import com.android.dx.ssa.SetFactory;
+import com.android.dx.util.IntSet;
+import java.util.ArrayList;
+
+/**
+ * A register interference graph
+ */
+public class InterferenceGraph {
+    /**
+     * {@code non-null;} interference graph, indexed by register in
+     * both dimensions
+     */
+    private final ArrayList<IntSet> interference;
+
+    /**
+     * Creates a new graph.
+     *
+     * @param countRegs {@code >= 0;} the start count of registers in
+     * the namespace. New registers can be added subsequently.
+     */
+    public InterferenceGraph(int countRegs) {
+        interference = new ArrayList<IntSet>(countRegs);
+
+        for (int i = 0; i < countRegs; i++) {
+            interference.add(SetFactory.makeInterferenceSet(countRegs));
+        }
+    }
+
+    /**
+     * Adds a register pair to the interference/liveness graph. Parameter
+     * order is insignificant.
+     *
+     * @param regV one register index
+     * @param regW another register index
+     */
+    public void add(int regV, int regW) {
+        ensureCapacity(Math.max(regV, regW) + 1);
+
+        interference.get(regV).add(regW);
+        interference.get(regW).add(regV);
+    }
+
+    /**
+     * Dumps interference graph to stdout for debugging.
+     */
+    public void dumpToStdout() {
+        int oldRegCount = interference.size();
+
+        for (int i = 0; i < oldRegCount; i++) {
+            StringBuilder sb = new StringBuilder();
+
+            sb.append("Reg " + i + ":" + interference.get(i).toString());
+
+            System.out.println(sb.toString());
+        }
+    }
+
+    /**
+     * Merges the interference set for a register into a given bit set
+     *
+     * @param reg {@code >= 0;} register
+     * @param set {@code non-null;} interference set; will be merged
+     * with set for given register
+     */
+    public void mergeInterferenceSet(int reg, IntSet set) {
+        if (reg < interference.size()) {
+            set.merge(interference.get(reg));
+        }
+    }
+
+    /**
+     * Ensures that the interference graph is appropriately sized.
+     *
+     * @param size requested minumum size
+     */
+    private void ensureCapacity(int size) {
+        int countRegs = interference.size();
+
+        interference.ensureCapacity(size);
+
+        for (int i = countRegs; i < size; i++) {
+            interference.add(SetFactory.makeInterferenceSet(size));
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/back/LivenessAnalyzer.java b/dx/src/com/android/dx/ssa/back/LivenessAnalyzer.java
new file mode 100644
index 0000000..bb318da
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/back/LivenessAnalyzer.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa.back;
+
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.ssa.PhiInsn;
+import com.android.dx.ssa.SsaBasicBlock;
+import com.android.dx.ssa.SsaInsn;
+import com.android.dx.ssa.SsaMethod;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.List;
+
+/**
+ * From Appel "Modern Compiler Implementation in Java" algorithm 19.17
+ * Calculate the live ranges for register {@code reg}.<p>
+ *
+ * v = regV <p>
+ * s = insn <p>
+ * M = visitedBlocks <p>
+ */
+public class LivenessAnalyzer {
+    /**
+     * {@code non-null;} index by basic block indexed set of basic blocks
+     * that have already been visited. "M" as written in the original Appel
+     * algorithm.
+     */
+    private final BitSet visitedBlocks;
+
+    /**
+     * {@code non-null;} set of blocks remaing to visit as "live out as block"
+     */
+    private final BitSet liveOutBlocks;
+
+    /**
+     * {@code >=0;} SSA register currently being analyzed.
+     * "v" in the original Appel algorithm.
+     */
+    private final int regV;
+
+    /** method to process */
+    private final SsaMethod ssaMeth;
+
+    /** interference graph being updated */
+    private final InterferenceGraph interference;
+
+    /** block "n" in Appel 19.17 */
+    private SsaBasicBlock blockN;
+
+    /** index of statement {@code s} in {@code blockN} */
+    private int statementIndex;
+
+    /** the next function to call */
+    private NextFunction nextFunction;
+
+    /** constants for {@link #nextFunction} */
+    private static enum NextFunction {
+        LIVE_IN_AT_STATEMENT,
+            LIVE_OUT_AT_STATEMENT,
+            LIVE_OUT_AT_BLOCK,
+            DONE;
+    }
+
+    /**
+     * Runs register liveness algorithm for a method, updating the
+     * live in/out information in {@code SsaBasicBlock} instances and
+     * returning an interference graph.
+     *
+     * @param ssaMeth {@code non-null;} method to process
+     * @return {@code non-null;} interference graph indexed by SSA
+     * registers in both directions
+     */
+    public static InterferenceGraph constructInterferenceGraph(
+            SsaMethod ssaMeth) {
+        int szRegs = ssaMeth.getRegCount();
+        InterferenceGraph interference = new InterferenceGraph(szRegs);
+
+        for (int i = 0; i < szRegs; i++) {
+            new LivenessAnalyzer(ssaMeth, i, interference).run();
+        }
+
+        coInterferePhis(ssaMeth, interference);
+
+        return interference;
+    }
+
+    /**
+     * Makes liveness analyzer instance for specific register.
+     *
+     * @param ssaMeth {@code non-null;} method to process
+     * @param reg register whose liveness to analyze
+     * @param interference {@code non-null;} indexed by SSA reg in
+     * both dimensions; graph to update
+     *
+     */
+    private LivenessAnalyzer(SsaMethod ssaMeth, int reg,
+            InterferenceGraph interference) {
+        int blocksSz = ssaMeth.getBlocks().size();
+
+        this.ssaMeth = ssaMeth;
+        this.regV = reg;
+        visitedBlocks = new BitSet(blocksSz);
+        liveOutBlocks = new BitSet(blocksSz);
+        this.interference = interference;
+    }
+
+    /**
+     * The algorithm in Appel is presented in partial tail-recursion
+     * form. Obviously, that's not efficient in java, so this function
+     * serves as the dispatcher instead.
+     */
+    private void handleTailRecursion() {
+        while (nextFunction != NextFunction.DONE) {
+            switch (nextFunction) {
+                case LIVE_IN_AT_STATEMENT:
+                    nextFunction = NextFunction.DONE;
+                    liveInAtStatement();
+                    break;
+
+                case LIVE_OUT_AT_STATEMENT:
+                    nextFunction = NextFunction.DONE;
+                    liveOutAtStatement();
+                    break;
+
+                case LIVE_OUT_AT_BLOCK:
+                    nextFunction = NextFunction.DONE;
+                    liveOutAtBlock();
+                    break;
+
+                default:
+            }
+        }
+    }
+
+    /**
+     * From Appel algorithm 19.17.
+     */
+    public void run() {
+        List<SsaInsn> useList = ssaMeth.getUseListForRegister(regV);
+
+        for (SsaInsn insn : useList) {
+            nextFunction = NextFunction.DONE;
+
+            if (insn instanceof PhiInsn) {
+                // If s is a phi-function with V as it's ith argument.
+                PhiInsn phi = (PhiInsn) insn;
+
+                for (SsaBasicBlock pred :
+                         phi.predBlocksForReg(regV, ssaMeth)) {
+                    blockN = pred;
+
+                    nextFunction = NextFunction.LIVE_OUT_AT_BLOCK;
+                    handleTailRecursion();
+                }
+            } else {
+                blockN = insn.getBlock();
+                statementIndex = blockN.getInsns().indexOf(insn);
+
+                if (statementIndex < 0) {
+                    throw new RuntimeException(
+                            "insn not found in it's own block");
+                }
+
+                nextFunction = NextFunction.LIVE_IN_AT_STATEMENT;
+                handleTailRecursion();
+            }
+        }
+
+        int nextLiveOutBlock;
+        while ((nextLiveOutBlock = liveOutBlocks.nextSetBit(0)) >= 0) {
+            blockN = ssaMeth.getBlocks().get(nextLiveOutBlock);
+            liveOutBlocks.clear(nextLiveOutBlock);
+            nextFunction = NextFunction.LIVE_OUT_AT_BLOCK;
+            handleTailRecursion();
+        }
+    }
+
+    /**
+     * "v is live-out at n."
+     */
+    private void liveOutAtBlock() {
+        if (! visitedBlocks.get(blockN.getIndex())) {
+            visitedBlocks.set(blockN.getIndex());
+
+            blockN.addLiveOut(regV);
+
+            ArrayList<SsaInsn> insns;
+
+            insns = blockN.getInsns();
+
+            // Live out at last statement in blockN
+            statementIndex = insns.size() - 1;
+            nextFunction = NextFunction.LIVE_OUT_AT_STATEMENT;
+        }
+    }
+
+    /**
+     * "v is live-in at s."
+     */
+    private void liveInAtStatement() {
+        // if s is the first statement in block N
+        if (statementIndex == 0) {
+            // v is live-in at n
+            blockN.addLiveIn(regV);
+
+            BitSet preds = blockN.getPredecessors();
+
+            liveOutBlocks.or(preds);
+        } else {
+            // Let s' be the statement preceeding s
+            statementIndex -= 1;
+            nextFunction = NextFunction.LIVE_OUT_AT_STATEMENT;
+        }
+    }
+
+    /**
+     * "v is live-out at s."
+     */
+    private void liveOutAtStatement() {
+        SsaInsn statement = blockN.getInsns().get(statementIndex);
+        RegisterSpec rs = statement.getResult();
+
+        if (!statement.isResultReg(regV)) {
+            if (rs != null) {
+                interference.add(regV, rs.getReg());
+            }
+            nextFunction = NextFunction.LIVE_IN_AT_STATEMENT;
+        }
+    }
+
+    /**
+     * Ensures that all the phi result registers for all the phis in the
+     * same basic block interfere with each other, and also that a phi's source
+     * registers interfere with the result registers from other phis. This is needed since
+     * the dead code remover has allowed through "dead-end phis" whose
+     * results are not used except as local assignments. Without this step,
+     * a the result of a dead-end phi might be assigned the same register
+     * as the result of another phi, and the phi removal move scheduler may
+     * generate moves that over-write the live result.
+     *
+     * @param ssaMeth {@code non-null;} method to process
+     * @param interference {@code non-null;} interference graph
+     */
+    private static void coInterferePhis(SsaMethod ssaMeth,
+            InterferenceGraph interference) {
+        for (SsaBasicBlock b : ssaMeth.getBlocks()) {
+            List<SsaInsn> phis = b.getPhiInsns();
+
+            int szPhis = phis.size();
+
+            for (int i = 0; i < szPhis; i++) {
+                for (int j = 0; j < szPhis; j++) {
+                    if (i == j) {
+                        continue;
+                    }
+
+                    SsaInsn first = phis.get(i);
+                    SsaInsn second = phis.get(j);
+                    coInterferePhiRegisters(interference, first.getResult(), second.getSources());
+                    coInterferePhiRegisters(interference, second.getResult(), first.getSources());
+                    interference.add(first.getResult().getReg(), second.getResult().getReg());
+                }
+            }
+        }
+    }
+
+    private static void coInterferePhiRegisters(InterferenceGraph interference, RegisterSpec result,
+            RegisterSpecList sources) {
+        int resultReg = result.getReg();
+        for (int i = 0; i < sources.size(); ++i) {
+            interference.add(resultReg, sources.get(i).getReg());
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/back/NullRegisterAllocator.java b/dx/src/com/android/dx/ssa/back/NullRegisterAllocator.java
new file mode 100644
index 0000000..adacdda
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/back/NullRegisterAllocator.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa.back;
+
+import com.android.dx.ssa.BasicRegisterMapper;
+import com.android.dx.ssa.RegisterMapper;
+import com.android.dx.ssa.SsaMethod;
+
+/**
+ * A register allocator that maps SSA register n to Rop register 2*n,
+ * essentially preserving the original mapping and remaining agnostic
+ * about normal or wide categories. Used for debugging.
+ */
+public class NullRegisterAllocator extends RegisterAllocator {
+    /** {@inheritDoc} */
+    public NullRegisterAllocator(SsaMethod ssaMeth,
+            InterferenceGraph interference) {
+        super(ssaMeth, interference);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean wantsParamsMovedHigh() {
+        // We're not smart enough for this.
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public RegisterMapper allocateRegisters() {
+        int oldRegCount = ssaMeth.getRegCount();
+
+        BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount);
+
+        for (int i = 0; i < oldRegCount; i++) {
+            mapper.addMapping(i, i*2, 2);
+        }
+
+        return mapper;
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/back/RegisterAllocator.java b/dx/src/com/android/dx/ssa/back/RegisterAllocator.java
new file mode 100644
index 0000000..9d53798
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/back/RegisterAllocator.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa.back;
+
+import com.android.dx.rop.code.PlainInsn;
+import com.android.dx.rop.code.RegOps;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.rop.code.SourcePosition;
+import com.android.dx.ssa.NormalSsaInsn;
+import com.android.dx.ssa.RegisterMapper;
+import com.android.dx.ssa.SsaBasicBlock;
+import com.android.dx.ssa.SsaInsn;
+import com.android.dx.ssa.SsaMethod;
+import com.android.dx.util.IntIterator;
+import com.android.dx.util.IntSet;
+import java.util.ArrayList;
+
+/**
+ * Base class of all register allocators.
+ */
+public abstract class RegisterAllocator {
+    /** method being processed */
+    protected final SsaMethod ssaMeth;
+
+    /** interference graph, indexed by register in both dimensions */
+    protected final InterferenceGraph interference;
+
+    /**
+     * Creates an instance. Call {@code allocateRegisters} to run.
+     * @param ssaMeth method to process.
+     * @param interference Interference graph, indexed by register in both
+     * dimensions.
+     */
+    public RegisterAllocator(SsaMethod ssaMeth,
+            InterferenceGraph interference) {
+        this.ssaMeth = ssaMeth;
+        this.interference = interference;
+    }
+
+    /**
+     * Indicates whether the method params were allocated at the bottom
+     * of the namespace, and thus should be moved up to the top of the
+     * namespace after phi removal.
+     *
+     * @return {@code true} if params should be moved from low to high
+     */
+    public abstract boolean wantsParamsMovedHigh();
+
+    /**
+     * Runs the algorithm.
+     *
+     * @return a register mapper to apply to the {@code SsaMethod}
+     */
+    public abstract RegisterMapper allocateRegisters();
+
+    /**
+     * Returns the category (width) of the definition site of the register.
+     * Returns {@code 1} for undefined registers.
+     *
+     * @param reg register
+     * @return {@code 1..2}
+     */
+    protected final int getCategoryForSsaReg(int reg) {
+        SsaInsn definition = ssaMeth.getDefinitionForRegister(reg);
+
+        if (definition == null) {
+            // an undefined reg
+            return 1;
+        } else {
+            return definition.getResult().getCategory();
+        }
+    }
+
+    /**
+     * Returns the RegisterSpec of the definition of the register.
+     *
+     * @param reg {@code >= 0;} SSA register
+     * @return definition spec of the register or null if it is never defined
+     * (for the case of "version 0" SSA registers)
+     */
+    protected final RegisterSpec getDefinitionSpecForSsaReg(int reg) {
+        SsaInsn definition = ssaMeth.getDefinitionForRegister(reg);
+
+        return definition == null ? null : definition.getResult();
+    }
+
+    /**
+     * Returns true if the definition site of this register is a
+     * move-param (ie, this is a method parameter).
+     *
+     * @param reg register in question
+     * @return {@code true} if this is a method parameter
+     */
+    protected boolean isDefinitionMoveParam(int reg) {
+        SsaInsn defInsn = ssaMeth.getDefinitionForRegister(reg);
+
+        if (defInsn instanceof NormalSsaInsn) {
+            NormalSsaInsn ndefInsn = (NormalSsaInsn) defInsn;
+
+            return ndefInsn.getOpcode().getOpcode() == RegOps.MOVE_PARAM;
+        }
+
+        return false;
+    }
+
+    /**
+     * Inserts a move instruction for a specified SSA register before a
+     * specified instruction, creating a new SSA register and adjusting the
+     * interference graph in the process. The insn currently must be the
+     * last insn in a block.
+     *
+     * @param insn {@code non-null;} insn to insert move before, must
+     * be last insn in block
+     * @param reg {@code non-null;} SSA register to duplicate
+     * @return {@code non-null;} spec of new SSA register created by move
+     */
+    protected final RegisterSpec insertMoveBefore(SsaInsn insn,
+            RegisterSpec reg) {
+        SsaBasicBlock block = insn.getBlock();
+        ArrayList<SsaInsn> insns = block.getInsns();
+        int insnIndex = insns.indexOf(insn);
+
+        if (insnIndex < 0) {
+            throw new IllegalArgumentException (
+                    "specified insn is not in this block");
+        }
+
+        if (insnIndex != insns.size() - 1) {
+            /*
+             * Presently, the interference updater only works when
+             * adding before the last insn, and the last insn must have no
+             * result
+             */
+            throw new IllegalArgumentException(
+                    "Adding move here not supported:" + insn.toHuman());
+        }
+
+        /*
+         * Get new register and make new move instruction.
+         */
+
+        // The new result must not have an associated local variable.
+        RegisterSpec newRegSpec = RegisterSpec.make(ssaMeth.makeNewSsaReg(),
+                reg.getTypeBearer());
+
+        SsaInsn toAdd = SsaInsn.makeFromRop(
+                new PlainInsn(Rops.opMove(newRegSpec.getType()),
+                        SourcePosition.NO_INFO, newRegSpec,
+                        RegisterSpecList.make(reg)), block);
+
+        insns.add(insnIndex, toAdd);
+
+        int newReg = newRegSpec.getReg();
+
+        /*
+         * Adjust interference graph based on what's live out of the current
+         * block and what's used by the final instruction.
+         */
+
+        IntSet liveOut = block.getLiveOutRegs();
+        IntIterator liveOutIter = liveOut.iterator();
+
+        while (liveOutIter.hasNext()) {
+            interference.add(newReg, liveOutIter.next());
+        }
+
+        // Everything that's a source in the last insn interferes.
+        RegisterSpecList sources = insn.getSources();
+        int szSources = sources.size();
+
+        for (int i = 0; i < szSources; i++) {
+            interference.add(newReg, sources.get(i).getReg());
+        }
+
+        ssaMeth.onInsnsChanged();
+
+        return newRegSpec;
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/back/SsaToRop.java b/dx/src/com/android/dx/ssa/back/SsaToRop.java
new file mode 100644
index 0000000..b97e167
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/back/SsaToRop.java
@@ -0,0 +1,384 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa.back;
+
+import com.android.dx.rop.code.BasicBlock;
+import com.android.dx.rop.code.BasicBlockList;
+import com.android.dx.rop.code.InsnList;
+import com.android.dx.rop.code.RegisterSpec;
+import com.android.dx.rop.code.RegisterSpecList;
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.RopMethod;
+import com.android.dx.rop.code.Rops;
+import com.android.dx.ssa.BasicRegisterMapper;
+import com.android.dx.ssa.PhiInsn;
+import com.android.dx.ssa.RegisterMapper;
+import com.android.dx.ssa.SsaBasicBlock;
+import com.android.dx.ssa.SsaInsn;
+import com.android.dx.ssa.SsaMethod;
+import com.android.dx.util.Hex;
+import com.android.dx.util.IntList;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.Comparator;
+
+/**
+ * Converts a method in SSA form to ROP form.
+ */
+public class SsaToRop {
+    /** local debug flag */
+    private static final boolean DEBUG = false;
+
+    /** {@code non-null;} method to process */
+    private final SsaMethod ssaMeth;
+
+    /**
+     * {@code true} if the converter should attempt to minimize
+     * the rop-form register count
+     */
+    private final boolean minimizeRegisters;
+
+    /** {@code non-null;} interference graph */
+    private final InterferenceGraph interference;
+
+    /**
+     * Converts a method in SSA form to ROP form.
+     *
+     * @param ssaMeth {@code non-null;} method to process
+     * @param minimizeRegisters {@code true} if the converter should
+     * attempt to minimize the rop-form register count
+     * @return {@code non-null;} rop-form output
+     */
+    public static RopMethod convertToRopMethod(SsaMethod ssaMeth,
+            boolean minimizeRegisters) {
+        return new SsaToRop(ssaMeth, minimizeRegisters).convert();
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param ssaMethod {@code non-null;} method to process
+     * @param minimizeRegisters {@code true} if the converter should
+     * attempt to minimize the rop-form register count
+     */
+    private SsaToRop(SsaMethod ssaMethod, boolean minimizeRegisters) {
+        this.minimizeRegisters = minimizeRegisters;
+        this.ssaMeth = ssaMethod;
+        this.interference =
+            LivenessAnalyzer.constructInterferenceGraph(ssaMethod);
+    }
+
+    /**
+     * Performs the conversion.
+     *
+     * @return {@code non-null;} rop-form output
+     */
+    private RopMethod convert() {
+        if (DEBUG) {
+            interference.dumpToStdout();
+        }
+
+        // These are other allocators for debugging or historical comparison:
+        // allocator = new NullRegisterAllocator(ssaMeth, interference);
+        // allocator = new FirstFitAllocator(ssaMeth, interference);
+
+        RegisterAllocator allocator =
+            new FirstFitLocalCombiningAllocator(ssaMeth, interference,
+                    minimizeRegisters);
+
+        RegisterMapper mapper = allocator.allocateRegisters();
+
+        if (DEBUG) {
+            System.out.println("Printing reg map");
+            System.out.println(((BasicRegisterMapper)mapper).toHuman());
+        }
+
+        ssaMeth.setBackMode();
+
+        ssaMeth.mapRegisters(mapper);
+
+        removePhiFunctions();
+
+        if (allocator.wantsParamsMovedHigh()) {
+            moveParametersToHighRegisters();
+        }
+
+        removeEmptyGotos();
+
+        RopMethod ropMethod = new RopMethod(convertBasicBlocks(),
+                ssaMeth.blockIndexToRopLabel(ssaMeth.getEntryBlockIndex()));
+        ropMethod = new IdenticalBlockCombiner(ropMethod).process();
+
+        return ropMethod;
+    }
+
+    /**
+     * Removes all blocks containing only GOTOs from the control flow.
+     * Although much of this work will be done later when converting
+     * from rop to dex, not all simplification cases can be handled
+     * there. Furthermore, any no-op block between the exit block and
+     * blocks containing the real return or throw statements must be
+     * removed.
+     */
+    private void removeEmptyGotos() {
+        final ArrayList<SsaBasicBlock> blocks = ssaMeth.getBlocks();
+
+        ssaMeth.forEachBlockDepthFirst(false, new SsaBasicBlock.Visitor() {
+            @Override
+            public void visitBlock(SsaBasicBlock b, SsaBasicBlock parent) {
+                ArrayList<SsaInsn> insns = b.getInsns();
+
+                if ((insns.size() == 1)
+                        && (insns.get(0).getOpcode() == Rops.GOTO)) {
+                    BitSet preds = (BitSet) b.getPredecessors().clone();
+
+                    for (int i = preds.nextSetBit(0); i >= 0;
+                            i = preds.nextSetBit(i + 1)) {
+                        SsaBasicBlock pb = blocks.get(i);
+                        pb.replaceSuccessor(b.getIndex(),
+                                b.getPrimarySuccessorIndex());
+                    }
+                }
+            }
+        });
+    }
+
+    /**
+     * See Appel 19.6. To remove the phi instructions in an edge-split
+     * SSA representation we know we can always insert a move in a
+     * predecessor block.
+     */
+    private void removePhiFunctions() {
+        ArrayList<SsaBasicBlock> blocks = ssaMeth.getBlocks();
+
+        for (SsaBasicBlock block : blocks) {
+            // Add moves in all the pred blocks for each phi insn.
+            block.forEachPhiInsn(new PhiVisitor(blocks));
+
+            // Delete the phi insns.
+            block.removeAllPhiInsns();
+        }
+
+        /*
+         * After all move insns have been added, sort them so they don't
+         * destructively interfere.
+         */
+        for (SsaBasicBlock block : blocks) {
+            block.scheduleMovesFromPhis();
+        }
+    }
+
+    /**
+     * Helper for {@link #removePhiFunctions}: PhiSuccessorUpdater for
+     * adding move instructions to predecessors based on phi insns.
+     */
+    private static class PhiVisitor implements PhiInsn.Visitor {
+        private final ArrayList<SsaBasicBlock> blocks;
+
+        public PhiVisitor(ArrayList<SsaBasicBlock> blocks) {
+            this.blocks = blocks;
+        }
+
+        @Override
+        public void visitPhiInsn(PhiInsn insn) {
+            RegisterSpecList sources = insn.getSources();
+            RegisterSpec result = insn.getResult();
+            int sz = sources.size();
+
+            for (int i = 0; i < sz; i++) {
+                RegisterSpec source = sources.get(i);
+                SsaBasicBlock predBlock = blocks.get(
+                        insn.predBlockIndexForSourcesIndex(i));
+
+                predBlock.addMoveToEnd(result, source);
+            }
+        }
+    }
+
+    /**
+     * Moves the parameter registers, which allocateRegisters() places
+     * at the bottom of the frame, up to the top of the frame to match
+     * Dalvik calling convention.
+     */
+    private void moveParametersToHighRegisters() {
+        int paramWidth = ssaMeth.getParamWidth();
+        BasicRegisterMapper mapper
+                = new BasicRegisterMapper(ssaMeth.getRegCount());
+        int regCount = ssaMeth.getRegCount();
+
+        for (int i = 0; i < regCount; i++) {
+            if (i < paramWidth) {
+                mapper.addMapping(i, regCount - paramWidth + i, 1);
+            } else {
+                mapper.addMapping(i, i - paramWidth, 1);
+            }
+        }
+
+        if (DEBUG) {
+            System.out.printf("Moving %d registers from 0 to %d\n",
+                    paramWidth, regCount - paramWidth);
+        }
+
+        ssaMeth.mapRegisters(mapper);
+    }
+
+    /**
+     * @return rop-form basic block list
+     */
+    private BasicBlockList convertBasicBlocks() {
+        ArrayList<SsaBasicBlock> blocks = ssaMeth.getBlocks();
+
+        // Exit block may be null.
+        SsaBasicBlock exitBlock = ssaMeth.getExitBlock();
+
+        BitSet reachable = ssaMeth.computeReachability();
+        int ropBlockCount = reachable.cardinality();
+
+        // Don't count the exit block, if it exists and is reachable.
+        if (exitBlock != null && reachable.get(exitBlock.getIndex())) {
+            ropBlockCount -= 1;
+        }
+
+        BasicBlockList result = new BasicBlockList(ropBlockCount);
+
+        // Convert all the reachable blocks except the exit block.
+        int ropBlockIndex = 0;
+        for (SsaBasicBlock b : blocks) {
+            if (reachable.get(b.getIndex()) && b != exitBlock) {
+                result.set(ropBlockIndex++, convertBasicBlock(b));
+            }
+        }
+
+        // The exit block, which is discarded, must do nothing.
+        if (exitBlock != null && !exitBlock.getInsns().isEmpty()) {
+            throw new RuntimeException(
+                    "Exit block must have no insns when leaving SSA form");
+        }
+
+        return result;
+    }
+
+    /**
+     * Validates that a basic block is a valid end predecessor. It must
+     * end in a RETURN or a THROW. Throws a runtime exception on error.
+     *
+     * @param b {@code non-null;} block to validate
+     * @throws RuntimeException on error
+     */
+    private void verifyValidExitPredecessor(SsaBasicBlock b) {
+        ArrayList<SsaInsn> insns = b.getInsns();
+        SsaInsn lastInsn = insns.get(insns.size() - 1);
+        Rop opcode = lastInsn.getOpcode();
+
+        if (opcode.getBranchingness() != Rop.BRANCH_RETURN
+                && opcode != Rops.THROW) {
+            throw new RuntimeException("Exit predecessor must end"
+                    + " in valid exit statement.");
+        }
+    }
+
+    /**
+     * Converts a single basic block to rop form.
+     *
+     * @param block SSA block to process
+     * @return {@code non-null;} ROP block
+     */
+    private BasicBlock convertBasicBlock(SsaBasicBlock block) {
+        IntList successorList = block.getRopLabelSuccessorList();
+        int primarySuccessorLabel = block.getPrimarySuccessorRopLabel();
+
+        // Filter out any reference to the SSA form's exit block.
+
+        // Exit block may be null.
+        SsaBasicBlock exitBlock = ssaMeth.getExitBlock();
+        int exitRopLabel = (exitBlock == null) ? -1 : exitBlock.getRopLabel();
+
+        if (successorList.contains(exitRopLabel)) {
+            if (successorList.size() > 1) {
+                throw new RuntimeException(
+                        "Exit predecessor must have no other successors"
+                                + Hex.u2(block.getRopLabel()));
+            } else {
+                successorList = IntList.EMPTY;
+                primarySuccessorLabel = -1;
+
+                verifyValidExitPredecessor(block);
+            }
+        }
+
+        successorList.setImmutable();
+
+        BasicBlock result = new BasicBlock(
+                block.getRopLabel(), convertInsns(block.getInsns()),
+                successorList,
+                primarySuccessorLabel);
+
+        return result;
+    }
+
+    /**
+     * Converts an insn list to rop form.
+     *
+     * @param ssaInsns {@code non-null;} old instructions
+     * @return {@code non-null;} immutable instruction list
+     */
+    private InsnList convertInsns(ArrayList<SsaInsn> ssaInsns) {
+        int insnCount = ssaInsns.size();
+        InsnList result = new InsnList(insnCount);
+
+        for (int i = 0; i < insnCount; i++) {
+            result.set(i, ssaInsns.get(i).toRopInsn());
+        }
+
+        result.setImmutable();
+
+        return result;
+    }
+
+    /**
+     * <b>Note:</b> This method is not presently used.
+     *
+     * @return a list of registers ordered by most-frequently-used to
+     * least-frequently-used. Each register is listed once and only
+     * once.
+     */
+    public int[] getRegistersByFrequency() {
+        int regCount = ssaMeth.getRegCount();
+        Integer[] ret = new Integer[regCount];
+
+        for (int i = 0; i < regCount; i++) {
+            ret[i] = i;
+        }
+
+        Arrays.sort(ret, new Comparator<Integer>() {
+            @Override
+            public int compare(Integer o1, Integer o2) {
+                return ssaMeth.getUseListForRegister(o2).size()
+                        - ssaMeth.getUseListForRegister(o1).size();
+            }
+        });
+
+        int result[] = new int[regCount];
+
+        for (int i = 0; i < regCount; i++) {
+            result[i] = ret[i];
+        }
+
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dx/ssa/package-info.java b/dx/src/com/android/dx/ssa/package-info.java
new file mode 100644
index 0000000..582a327
--- /dev/null
+++ b/dx/src/com/android/dx/ssa/package-info.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.ssa;
+
+/**
+ * <h1>An introduction to SSA Form</h1>
+ *
+ * This package contains classes associated with dx's {@code SSA}
+ * intermediate form. This form is a static-single-assignment representation of
+ * Rop-form a method with Rop-form-like instructions (with the addition of a
+ * {@link PhiInsn phi instriction}. This form is intended to make it easy to
+ * implement basic optimization steps and register allocation so that a
+ * reasonably efficient register machine representation can be produced from a
+ * stack machine source bytecode.<p>
+ *
+ * <h2>Key Classes</h2>
+ *
+ * <h3>Classes related to conversion and lifetime</h3>
+ * <ul>
+ * <li> {@link Optimizer} is a singleton class containing methods for
+ * converting, optimizing, and then back-converting Rop-form methods. It's the
+ * typical gateway into the rest of the package.
+ * <li> {@link SsaConverter} converts a Rop-form method to SSA form.
+ * <li> {@link SsaToRop} converts an SSA-form method back to Rop form.
+ * </ul>
+ *
+ * <h3>Classes related to method representation</h3>
+ * <ul>
+ * <li> A {@link SsaMethod} instance represents a method.
+ * <li> A {@link SsaBasicBlock} instance represents a basic block, whose
+ * semantics are quite similar to basic blocks in
+ * {@link com.android.dx.rop Rop form}.
+ * <li> {@link PhiInsn} instances represent "phi" operators defined in SSA
+ * literature. They must be the first N instructions in a basic block.
+ * <li> {@link NormalSsaInsn} instances represent instructions that directly
+ * correspond to {@code Rop} form.
+ * </ul>
+ *
+ * <h3>Classes related to optimization steps</h3>
+ * <ul>
+ * <li> {@link MoveParamCombiner} is a simple step that ensures each method
+ * parameter is represented by at most one SSA register.
+ * <li> {@link SCCP} is a (partially implemented) sparse-conditional
+ * constant propogator.
+ * <li> {@link LiteralOpUpgrader} is a step that attempts to use constant
+ * information to convert math and comparison instructions into
+ * constant-bearing "literal ops" in cases where they can be represented in the
+ * output form (see {@link TranslationAdvice#hasConstantOperation}).
+ * <li> {@link ConstCollector} is a step that attempts to trade (modest)
+ * increased register space for decreased instruction count in cases where
+ * the same constant value is used repeatedly in a single method.
+ * <li> {@link DeadCodeRemover} is a dead code remover. This phase must
+ * always be run to remove unused phi instructions.
+ * </ul>
+ *
+ * <h2>SSA Lifetime</h2>
+ * The representation of a method in SSA form obeys slightly different
+ * constraints depending upon whether it is in the process of being converted
+ * into or out of SSA form.
+ *
+ * <h3>Conversion into SSA Form</h3>
+ *
+ * {@link SsaConverter#convertToSsaMethod} takes a {@code RopMethod} and
+ * returns a fully-converted {@code SsaMethod}. The conversion process
+ * is roughly as follows:
+ *
+ * <ol>
+ * <li> The Rop-form method, its blocks and their instructions are directly
+ * wrapped in {@code SsaMethod}, {@code SsaBasicBlock} and
+ * {@code SsaInsn} instances. Nothing else changes.
+ * <li> Critical control-flow graph edges are {@link SsaConverter#edgeSplit
+ * split} and new basic blocks inserted as required to meet the constraints
+ * necessary for the ultimate SSA representation.
+ * <li> A {@link LocalVariableExtractor} is run to produce a table of
+ * Rop registers to local variables necessary during phi placement. This
+ * step could also be done in Rop form and then updated through the preceding
+ * steps.
+ * <li> {@code Phi} instructions are {link SsaConverter#placePhiFunctions}
+ * placed in a semi-pruned fashion, which requires computation of {@link
+ * Dominators dominance graph} and each node's {@link DomFront
+ * dominance-frontier set}.
+ * <li> Finally, source and result registers for all instructions are {@link
+ * SsaRenamer renamed} such that each assignment is given a unique register
+ * number (register categories or widths, significant in Rop form, do not
+ * exist in SSA). Move instructions are eliminated except where necessary
+ * to preserve local variable assignments.
+ * </ol>
+ *
+ */
diff --git a/dx/src/com/android/dx/util/AnnotatedOutput.java b/dx/src/com/android/dx/util/AnnotatedOutput.java
new file mode 100644
index 0000000..7a9ea29
--- /dev/null
+++ b/dx/src/com/android/dx/util/AnnotatedOutput.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * Interface for a binary output destination that may be augmented
+ * with textual annotations.
+ */
+public interface AnnotatedOutput
+        extends Output {
+    /**
+     * Get whether this instance will actually keep annotations.
+     *
+     * @return {@code true} iff annotations are being kept
+     */
+    public boolean annotates();
+
+    /**
+     * Get whether this instance is intended to keep verbose annotations.
+     * Annotators may use the result of calling this method to inform their
+     * annotation activity.
+     *
+     * @return {@code true} iff annotations are to be verbose
+     */
+    public boolean isVerbose();
+
+    /**
+     * Add an annotation for the subsequent output. Any previously
+     * open annotation will be closed by this call, and the new
+     * annotation marks all subsequent output until another annotation
+     * call.
+     *
+     * @param msg {@code non-null;} the annotation message
+     */
+    public void annotate(String msg);
+
+    /**
+     * Add an annotation for a specified amount of subsequent
+     * output. Any previously open annotation will be closed by this
+     * call. If there is already pending annotation from one or more
+     * previous calls to this method, the new call "consumes" output
+     * after all the output covered by the previous calls.
+     *
+     * @param amt {@code >= 0;} the amount of output for this annotation to
+     * cover
+     * @param msg {@code non-null;} the annotation message
+     */
+    public void annotate(int amt, String msg);
+
+    /**
+     * End the most recent annotation. Subsequent output will be unannotated,
+     * until the next call to {@link #annotate}.
+     */
+    public void endAnnotation();
+
+    /**
+     * Get the maximum width of the annotated output. This is advisory:
+     * Implementations of this interface are encouraged to deal with too-wide
+     * output, but annotaters are encouraged to attempt to avoid exceeding
+     * the indicated width.
+     *
+     * @return {@code >= 1;} the maximum width
+     */
+    public int getAnnotationWidth();
+}
diff --git a/dx/src/com/android/dx/util/BitIntSet.java b/dx/src/com/android/dx/util/BitIntSet.java
new file mode 100644
index 0000000..da1c39c
--- /dev/null
+++ b/dx/src/com/android/dx/util/BitIntSet.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.util.NoSuchElementException;
+
+/**
+ * A set of integers, represented by a bit set
+ */
+public class BitIntSet implements IntSet {
+
+    /** also accessed in ListIntSet */
+    int[] bits;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param max the maximum value of ints in this set.
+     */
+    public BitIntSet(int max) {
+        bits = Bits.makeBitSet(max);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void add(int value) {
+        ensureCapacity(value);
+        Bits.set(bits, value, true);
+    }
+
+    /**
+     * Ensures that the bit set has the capacity to represent the given value.
+     *
+     * @param value {@code >= 0;} value to represent
+     */
+    private void ensureCapacity(int value) {
+        if (value >= Bits.getMax(bits)) {
+            int[] newBits = Bits.makeBitSet(
+                    Math.max(value + 1, 2 * Bits.getMax(bits)));
+            System.arraycopy(bits, 0, newBits, 0, bits.length);
+            bits = newBits;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void remove(int value) {
+        if (value < Bits.getMax(bits)) {
+            Bits.set(bits, value, false);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean has(int value) {
+        return (value < Bits.getMax(bits)) && Bits.get(bits, value);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void merge(IntSet other) {
+        if (other instanceof BitIntSet) {
+            BitIntSet o = (BitIntSet) other;
+            ensureCapacity(Bits.getMax(o.bits) + 1);
+            Bits.or(bits, o.bits);
+        } else if (other instanceof ListIntSet) {
+            ListIntSet o = (ListIntSet) other;
+            int sz = o.ints.size();
+
+            if (sz > 0) {
+                ensureCapacity(o.ints.get(sz - 1));
+            }
+            for (int i = 0; i < o.ints.size(); i++) {
+                Bits.set(bits, o.ints.get(i), true);
+            }
+        } else {
+            IntIterator iter = other.iterator();
+            while (iter.hasNext()) {
+                add(iter.next());
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int elements() {
+        return Bits.bitCount(bits);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IntIterator iterator() {
+        return new IntIterator() {
+            private int idx = Bits.findFirst(bits, 0);
+
+            /** {@inheritDoc} */
+            @Override
+            public boolean hasNext() {
+                return idx >= 0;
+            }
+
+            /** {@inheritDoc} */
+            @Override
+            public int next() {
+                if (!hasNext()) {
+                    throw new NoSuchElementException();
+                }
+
+                int ret = idx;
+
+                idx = Bits.findFirst(bits, idx+1);
+
+                return ret;
+            }
+        };
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append('{');
+
+        boolean first = true;
+        for (int i = Bits.findFirst(bits, 0)
+                ; i >= 0
+                ; i = Bits.findFirst(bits, i + 1)) {
+            if (!first) {
+                sb.append(", ");
+            }
+            first = false;
+            sb.append(i);
+        }
+
+        sb.append('}');
+
+        return sb.toString();
+    }
+}
diff --git a/dx/src/com/android/dx/util/Bits.java b/dx/src/com/android/dx/util/Bits.java
new file mode 100644
index 0000000..cbc0a5b
--- /dev/null
+++ b/dx/src/com/android/dx/util/Bits.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * Utilities for treating {@code int[]}s as bit sets.
+ */
+public final class Bits {
+    /**
+     * This class is uninstantiable.
+     */
+    private Bits() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Constructs a bit set to contain bits up to the given index (exclusive).
+     *
+     * @param max {@code >= 0;} the maximum bit index (exclusive)
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public static int[] makeBitSet(int max) {
+        int size = (max + 0x1f) >> 5;
+        return new int[size];
+    }
+
+    /**
+     * Gets the maximum index (exclusive) for the given bit set.
+     *
+     * @param bits {@code non-null;} bit set in question
+     * @return {@code >= 0;} the maximum index (exclusive) that may be set
+     */
+    public static int getMax(int[] bits) {
+        return bits.length * 0x20;
+    }
+
+    /**
+     * Gets the value of the bit at the given index.
+     *
+     * @param bits {@code non-null;} bit set to operate on
+     * @param idx {@code >= 0, < getMax(set);} which bit
+     * @return the value of the indicated bit
+     */
+    public static boolean get(int[] bits, int idx) {
+        int arrayIdx = idx >> 5;
+        int bit = 1 << (idx & 0x1f);
+        return (bits[arrayIdx] & bit) != 0;
+    }
+
+    /**
+     * Sets the given bit to the given value.
+     *
+     * @param bits {@code non-null;} bit set to operate on
+     * @param idx {@code >= 0, < getMax(set);} which bit
+     * @param value the new value for the bit
+     */
+    public static void set(int[] bits, int idx, boolean value) {
+        int arrayIdx = idx >> 5;
+        int bit = 1 << (idx & 0x1f);
+
+        if (value) {
+            bits[arrayIdx] |= bit;
+        } else {
+            bits[arrayIdx] &= ~bit;
+        }
+    }
+
+    /**
+     * Sets the given bit to {@code true}.
+     *
+     * @param bits {@code non-null;} bit set to operate on
+     * @param idx {@code >= 0, < getMax(set);} which bit
+     */
+    public static void set(int[] bits, int idx) {
+        int arrayIdx = idx >> 5;
+        int bit = 1 << (idx & 0x1f);
+        bits[arrayIdx] |= bit;
+    }
+
+    /**
+     * Sets the given bit to {@code false}.
+     *
+     * @param bits {@code non-null;} bit set to operate on
+     * @param idx {@code >= 0, < getMax(set);} which bit
+     */
+    public static void clear(int[] bits, int idx) {
+        int arrayIdx = idx >> 5;
+        int bit = 1 << (idx & 0x1f);
+        bits[arrayIdx] &= ~bit;
+    }
+
+    /**
+     * Returns whether or not the given bit set is empty, that is, whether
+     * no bit is set to {@code true}.
+     *
+     * @param bits {@code non-null;} bit set to operate on
+     * @return {@code true} iff all bits are {@code false}
+     */
+    public static boolean isEmpty(int[] bits) {
+        int len = bits.length;
+
+        for (int i = 0; i < len; i++) {
+            if (bits[i] != 0) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Gets the number of bits set to {@code true} in the given bit set.
+     *
+     * @param bits {@code non-null;} bit set to operate on
+     * @return {@code >= 0;} the bit count (aka population count) of the set
+     */
+    public static int bitCount(int[] bits) {
+        int len = bits.length;
+        int count = 0;
+
+        for (int i = 0; i < len; i++) {
+            count += Integer.bitCount(bits[i]);
+        }
+
+        return count;
+    }
+
+    /**
+     * Returns whether any bits are set to {@code true} in the
+     * specified range.
+     *
+     * @param bits {@code non-null;} bit set to operate on
+     * @param start {@code >= 0;} index of the first bit in the range (inclusive)
+     * @param end {@code >= 0;} index of the last bit in the range (exclusive)
+     * @return {@code true} if any bit is set to {@code true} in
+     * the indicated range
+     */
+    public static boolean anyInRange(int[] bits, int start, int end) {
+        int idx = findFirst(bits, start);
+        return (idx >= 0) && (idx < end);
+    }
+
+    /**
+     * Finds the lowest-order bit set at or after the given index in the
+     * given bit set.
+     *
+     * @param bits {@code non-null;} bit set to operate on
+     * @param idx {@code >= 0;} minimum index to return
+     * @return {@code >= -1;} lowest-order bit set at or after {@code idx},
+     * or {@code -1} if there is no appropriate bit index to return
+     */
+    public static int findFirst(int[] bits, int idx) {
+        int len = bits.length;
+        int minBit = idx & 0x1f;
+
+        for (int arrayIdx = idx >> 5; arrayIdx < len; arrayIdx++) {
+            int word = bits[arrayIdx];
+            if (word != 0) {
+                int bitIdx = findFirst(word, minBit);
+                if (bitIdx >= 0) {
+                    return (arrayIdx << 5) + bitIdx;
+                }
+            }
+            minBit = 0;
+        }
+
+        return -1;
+    }
+
+    /**
+     * Finds the lowest-order bit set at or after the given index in the
+     * given {@code int}.
+     *
+     * @param value the value in question
+     * @param idx 0..31 the minimum bit index to return
+     * @return {@code >= -1;} lowest-order bit set at or after {@code idx},
+     * or {@code -1} if there is no appropriate bit index to return
+     */
+    public static int findFirst(int value, int idx) {
+        value &= ~((1 << idx) - 1); // Mask off too-low bits.
+        int result = Integer.numberOfTrailingZeros(value);
+        return (result == 32) ? -1 : result;
+    }
+
+    /**
+     * Ors bit array {@code b} into bit array {@code a}.
+     * {@code a.length} must be greater than or equal to
+     * {@code b.length}.
+     *
+     * @param a {@code non-null;} int array to be ored with other argument. This
+     * argument is modified.
+     * @param b {@code non-null;} int array to be ored into {@code a}. This
+     * argument is not modified.
+     */
+    public static void or(int[] a, int[] b) {
+        for (int i = 0; i < b.length; i++) {
+            a[i] |= b[i];
+        }
+    }
+
+    public static String toHuman(int[] bits) {
+        StringBuilder sb = new StringBuilder();
+
+        boolean needsComma = false;
+
+        sb.append('{');
+
+        int bitsLength = 32 * bits.length;
+        for (int i = 0; i < bitsLength; i++) {
+            if (Bits.get(bits, i)) {
+                if (needsComma) {
+                    sb.append(',');
+                }
+                needsComma = true;
+                sb.append(i);
+            }
+        }
+        sb.append('}');
+
+        return sb.toString();
+    }
+}
diff --git a/dx/src/com/android/dx/util/ByteArray.java b/dx/src/com/android/dx/util/ByteArray.java
new file mode 100644
index 0000000..be5d776
--- /dev/null
+++ b/dx/src/com/android/dx/util/ByteArray.java
@@ -0,0 +1,364 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+
+/**
+ * Wrapper for a {@code byte[]}, which provides read-only access and
+ * can "reveal" a partial slice of the underlying array.
+ *
+ * <b>Note:</b> Multibyte accessors all use big-endian order.
+ */
+public final class ByteArray {
+    /** {@code non-null;} underlying array */
+    private final byte[] bytes;
+
+    /** {@code >= 0}; start index of the slice (inclusive) */
+    private final int start;
+
+    /** {@code >= 0, <= bytes.length}; size computed as
+     * {@code end - start} (in the constructor) */
+    private final int size;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param bytes {@code non-null;} the underlying array
+     * @param start {@code >= 0;} start index of the slice (inclusive)
+     * @param end {@code >= start, <= bytes.length;} end index of
+     * the slice (exclusive)
+     */
+    public ByteArray(byte[] bytes, int start, int end) {
+        if (bytes == null) {
+            throw new NullPointerException("bytes == null");
+        }
+
+        if (start < 0) {
+            throw new IllegalArgumentException("start < 0");
+        }
+
+        if (end < start) {
+            throw new IllegalArgumentException("end < start");
+        }
+
+        if (end > bytes.length) {
+            throw new IllegalArgumentException("end > bytes.length");
+        }
+
+        this.bytes = bytes;
+        this.start = start;
+        this.size = end - start;
+    }
+
+    /**
+     * Constructs an instance from an entire {@code byte[]}.
+     *
+     * @param bytes {@code non-null;} the underlying array
+     */
+    public ByteArray(byte[] bytes) {
+        this(bytes, 0, bytes.length);
+    }
+
+    /**
+     * Gets the size of the array, in bytes.
+     *
+     * @return {@code >= 0;} the size
+     */
+    public int size() {
+        return size;
+    }
+
+    /**
+     * Returns a slice (that is, a sub-array) of this instance.
+     *
+     * @param start {@code >= 0;} start index of the slice (inclusive)
+     * @param end {@code >= start, <= size();} end index of
+     * the slice (exclusive)
+     * @return {@code non-null;} the slice
+     */
+    public ByteArray slice(int start, int end) {
+        checkOffsets(start, end);
+        byte[] slicedOut = Arrays.copyOfRange(bytes, start, end);
+        return new ByteArray(slicedOut);
+    }
+
+    /**
+     * Returns the offset into the given array represented by the given
+     * offset into this instance.
+     *
+     * @param offset offset into this instance
+     * @return corresponding offset into {@code bytes}
+     * @throws IllegalArgumentException thrown if {@code bytes} is
+     * not the underlying array of this instance
+     */
+    public int underlyingOffset(int offset) {
+        return start + offset;
+    }
+
+    /**
+     * Gets the {@code signed byte} value at a particular offset.
+     *
+     * @param off {@code >= 0, < size();} offset to fetch
+     * @return {@code signed byte} at that offset
+     */
+    public int getByte(int off) {
+        checkOffsets(off, off + 1);
+        return getByte0(off);
+    }
+
+    /**
+     * Gets the {@code signed short} value at a particular offset.
+     *
+     * @param off {@code >= 0, < (size() - 1);} offset to fetch
+     * @return {@code signed short} at that offset
+     */
+    public int getShort(int off) {
+        checkOffsets(off, off + 2);
+        return (getByte0(off) << 8) | getUnsignedByte0(off + 1);
+    }
+
+    /**
+     * Gets the {@code signed int} value at a particular offset.
+     *
+     * @param off {@code >= 0, < (size() - 3);} offset to fetch
+     * @return {@code signed int} at that offset
+     */
+    public int getInt(int off) {
+        checkOffsets(off, off + 4);
+        return (getByte0(off) << 24) |
+            (getUnsignedByte0(off + 1) << 16) |
+            (getUnsignedByte0(off + 2) << 8) |
+            getUnsignedByte0(off + 3);
+    }
+
+    /**
+     * Gets the {@code signed long} value at a particular offset.
+     *
+     * @param off {@code >= 0, < (size() - 7);} offset to fetch
+     * @return {@code signed int} at that offset
+     */
+    public long getLong(int off) {
+        checkOffsets(off, off + 8);
+        int part1 = (getByte0(off) << 24) |
+            (getUnsignedByte0(off + 1) << 16) |
+            (getUnsignedByte0(off + 2) << 8) |
+            getUnsignedByte0(off + 3);
+        int part2 = (getByte0(off + 4) << 24) |
+            (getUnsignedByte0(off + 5) << 16) |
+            (getUnsignedByte0(off + 6) << 8) |
+            getUnsignedByte0(off + 7);
+
+        return (part2 & 0xffffffffL) | ((long) part1) << 32;
+    }
+
+    /**
+     * Gets the {@code unsigned byte} value at a particular offset.
+     *
+     * @param off {@code >= 0, < size();} offset to fetch
+     * @return {@code unsigned byte} at that offset
+     */
+    public int getUnsignedByte(int off) {
+        checkOffsets(off, off + 1);
+        return getUnsignedByte0(off);
+    }
+
+    /**
+     * Gets the {@code unsigned short} value at a particular offset.
+     *
+     * @param off {@code >= 0, < (size() - 1);} offset to fetch
+     * @return {@code unsigned short} at that offset
+     */
+    public int getUnsignedShort(int off) {
+        checkOffsets(off, off + 2);
+        return (getUnsignedByte0(off) << 8) | getUnsignedByte0(off + 1);
+    }
+
+    /**
+     * Copies the contents of this instance into the given raw
+     * {@code byte[]} at the given offset. The given array must be
+     * large enough.
+     *
+     * @param out {@code non-null;} array to hold the output
+     * @param offset {@code non-null;} index into {@code out} for the first
+     * byte of output
+     */
+    public void getBytes(byte[] out, int offset) {
+        if ((out.length - offset) < size) {
+            throw new IndexOutOfBoundsException("(out.length - offset) < " +
+                                                "size()");
+        }
+
+        System.arraycopy(bytes, start, out, offset, size);
+    }
+
+    /**
+     * Checks a range of offsets for validity, throwing if invalid.
+     *
+     * @param s start offset (inclusive)
+     * @param e end offset (exclusive)
+     */
+    private void checkOffsets(int s, int e) {
+        if ((s < 0) || (e < s) || (e > size)) {
+            throw new IllegalArgumentException("bad range: " + s + ".." + e +
+                                               "; actual size " + size);
+        }
+    }
+
+    /**
+     * Gets the {@code signed byte} value at the given offset,
+     * without doing any argument checking.
+     *
+     * @param off offset to fetch
+     * @return byte at that offset
+     */
+    private int getByte0(int off) {
+        return bytes[start + off];
+    }
+
+    /**
+     * Gets the {@code unsigned byte} value at the given offset,
+     * without doing any argument checking.
+     *
+     * @param off offset to fetch
+     * @return byte at that offset
+     */
+    private int getUnsignedByte0(int off) {
+        return bytes[start + off] & 0xff;
+    }
+
+    /**
+     * Gets a {@code DataInputStream} that reads from this instance,
+     * with the cursor starting at the beginning of this instance's data.
+     * <b>Note:</b> The returned instance may be cast to {@link GetCursor}
+     * if needed.
+     *
+     * @return {@code non-null;} an appropriately-constructed
+     * {@code DataInputStream} instance
+     */
+    public MyDataInputStream makeDataInputStream() {
+        return new MyDataInputStream(makeInputStream());
+    }
+
+    /**
+     * Gets a {@code InputStream} that reads from this instance,
+     * with the cursor starting at the beginning of this instance's data.
+     * <b>Note:</b> The returned instance may be cast to {@link GetCursor}
+     * if needed.
+     *
+     * @return {@code non-null;} an appropriately-constructed
+     * {@code InputStream} instancex
+     */
+    public MyInputStream makeInputStream() {
+        return new MyInputStream();
+    }
+
+    /**
+     * Helper interface that allows one to get the cursor (of a stream).
+     */
+    public interface GetCursor {
+        /**
+         * Gets the current cursor.
+         *
+         * @return {@code 0..size();} the cursor
+         */
+        int getCursor();
+    }
+
+    /**
+     * Helper class for {@link #makeInputStream}, which implements the
+     * stream functionality.
+     */
+    public class MyInputStream extends InputStream {
+        /** 0..size; the cursor */
+        private int cursor;
+
+        /** 0..size; the mark */
+        private int mark;
+
+        public MyInputStream() {
+            cursor = 0;
+            mark = 0;
+        }
+
+        @Override
+        public int read() throws IOException {
+            if (cursor >= size) {
+                return -1;
+            }
+
+            int result = getUnsignedByte0(cursor);
+            cursor++;
+            return result;
+        }
+
+        @Override
+        public int read(byte[] arr, int offset, int length) {
+            if ((offset + length) > arr.length) {
+                length = arr.length - offset;
+            }
+
+            int maxLength = size - cursor;
+            if (length > maxLength) {
+                length = maxLength;
+            }
+
+            System.arraycopy(bytes, cursor + start, arr, offset, length);
+            cursor += length;
+            return length;
+        }
+
+        @Override
+        public int available() {
+            return size - cursor;
+        }
+
+        @Override
+        public void mark(int reserve) {
+            mark = cursor;
+        }
+
+        @Override
+        public void reset() {
+            cursor = mark;
+        }
+
+        @Override
+        public boolean markSupported() {
+            return true;
+        }
+    }
+
+    /**
+     * Helper class for {@link #makeDataInputStream}. This is used
+     * simply so that the cursor of a wrapped {@link MyInputStream}
+     * instance may be easily determined.
+     */
+    public static class MyDataInputStream extends DataInputStream {
+        /** {@code non-null;} the underlying {@link MyInputStream} */
+        private final MyInputStream wrapped;
+
+        public MyDataInputStream(MyInputStream wrapped) {
+            super(wrapped);
+
+            this.wrapped = wrapped;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/util/ByteArrayAnnotatedOutput.java b/dx/src/com/android/dx/util/ByteArrayAnnotatedOutput.java
new file mode 100644
index 0000000..55a3ffd
--- /dev/null
+++ b/dx/src/com/android/dx/util/ByteArrayAnnotatedOutput.java
@@ -0,0 +1,655 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import com.android.dex.Leb128;
+import com.android.dex.util.ByteOutput;
+import com.android.dex.util.ExceptionWithContext;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Implementation of {@link AnnotatedOutput} which stores the written data
+ * into a {@code byte[]}.
+ *
+ * <p><b>Note:</b> As per the {@link Output} interface, multi-byte
+ * writes all use little-endian order.</p>
+ */
+public final class ByteArrayAnnotatedOutput
+        implements AnnotatedOutput, ByteOutput {
+    /** default size for stretchy instances */
+    private static final int DEFAULT_SIZE = 1000;
+
+    /**
+     * whether the instance is stretchy, that is, whether its array
+     * may be resized to increase capacity
+     */
+    private final boolean stretchy;
+
+    /** {@code non-null;} the data itself */
+    private byte[] data;
+
+    /** {@code >= 0;} current output cursor */
+    private int cursor;
+
+    /** whether annotations are to be verbose */
+    private boolean verbose;
+
+    /**
+     * {@code null-ok;} list of annotations, or {@code null} if this instance
+     * isn't keeping them
+     */
+    private ArrayList<Annotation> annotations;
+
+    /** {@code >= 40 (if used);} the desired maximum annotation width */
+    private int annotationWidth;
+
+    /**
+     * {@code >= 8 (if used);} the number of bytes of hex output to use
+     * in annotations
+     */
+    private int hexCols;
+
+    /**
+     * Constructs an instance with a fixed maximum size. Note that the
+     * given array is the only one that will be used to store data. In
+     * particular, no reallocation will occur in order to expand the
+     * capacity of the resulting instance. Also, the constructed
+     * instance does not keep annotations by default.
+     *
+     * @param data {@code non-null;} data array to use for output
+     */
+    public ByteArrayAnnotatedOutput(byte[] data) {
+        this(data, false);
+    }
+
+    /**
+     * Constructs a "stretchy" instance. The underlying array may be
+     * reallocated. The constructed instance does not keep annotations
+     * by default.
+     */
+    public ByteArrayAnnotatedOutput() {
+        this(DEFAULT_SIZE);
+    }
+
+    /**
+     * Constructs a "stretchy" instance with initial size {@code size}. The
+     * underlying array may be reallocated. The constructed instance does not
+     * keep annotations by default.
+     */
+    public ByteArrayAnnotatedOutput(int size) {
+        this(new byte[size], true);
+    }
+
+    /**
+     * Internal constructor.
+     *
+     * @param data {@code non-null;} data array to use for output
+     * @param stretchy whether the instance is to be stretchy
+     */
+    private ByteArrayAnnotatedOutput(byte[] data, boolean stretchy) {
+        if (data == null) {
+            throw new NullPointerException("data == null");
+        }
+
+        this.stretchy = stretchy;
+        this.data = data;
+        this.cursor = 0;
+        this.verbose = false;
+        this.annotations = null;
+        this.annotationWidth = 0;
+        this.hexCols = 0;
+    }
+
+    /**
+     * Gets the underlying {@code byte[]} of this instance, which
+     * may be larger than the number of bytes written
+     *
+     * @see #toByteArray
+     *
+     * @return {@code non-null;} the {@code byte[]}
+     */
+    public byte[] getArray() {
+        return data;
+    }
+
+    /**
+     * Constructs and returns a new {@code byte[]} that contains
+     * the written contents exactly (that is, with no extra unwritten
+     * bytes at the end).
+     *
+     * @see #getArray
+     *
+     * @return {@code non-null;} an appropriately-constructed array
+     */
+    public byte[] toByteArray() {
+        byte[] result = new byte[cursor];
+        System.arraycopy(data, 0, result, 0, cursor);
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getCursor() {
+        return cursor;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void assertCursor(int expectedCursor) {
+        if (cursor != expectedCursor) {
+            throw new ExceptionWithContext("expected cursor " +
+                    expectedCursor + "; actual value: " + cursor);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeByte(int value) {
+        int writeAt = cursor;
+        int end = writeAt + 1;
+
+        if (stretchy) {
+            ensureCapacity(end);
+        } else if (end > data.length) {
+            throwBounds();
+            return;
+        }
+
+        data[writeAt] = (byte) value;
+        cursor = end;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeShort(int value) {
+        int writeAt = cursor;
+        int end = writeAt + 2;
+
+        if (stretchy) {
+            ensureCapacity(end);
+        } else if (end > data.length) {
+            throwBounds();
+            return;
+        }
+
+        data[writeAt] = (byte) value;
+        data[writeAt + 1] = (byte) (value >> 8);
+        cursor = end;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeInt(int value) {
+        int writeAt = cursor;
+        int end = writeAt + 4;
+
+        if (stretchy) {
+            ensureCapacity(end);
+        } else if (end > data.length) {
+            throwBounds();
+            return;
+        }
+
+        data[writeAt] = (byte) value;
+        data[writeAt + 1] = (byte) (value >> 8);
+        data[writeAt + 2] = (byte) (value >> 16);
+        data[writeAt + 3] = (byte) (value >> 24);
+        cursor = end;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeLong(long value) {
+        int writeAt = cursor;
+        int end = writeAt + 8;
+
+        if (stretchy) {
+            ensureCapacity(end);
+        } else if (end > data.length) {
+            throwBounds();
+            return;
+        }
+
+        int half = (int) value;
+        data[writeAt] = (byte) half;
+        data[writeAt + 1] = (byte) (half >> 8);
+        data[writeAt + 2] = (byte) (half >> 16);
+        data[writeAt + 3] = (byte) (half >> 24);
+
+        half = (int) (value >> 32);
+        data[writeAt + 4] = (byte) half;
+        data[writeAt + 5] = (byte) (half >> 8);
+        data[writeAt + 6] = (byte) (half >> 16);
+        data[writeAt + 7] = (byte) (half >> 24);
+
+        cursor = end;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeUleb128(int value) {
+        if (stretchy) {
+            ensureCapacity(cursor + 5); // pessimistic
+        }
+        int cursorBefore = cursor;
+        Leb128.writeUnsignedLeb128(this, value);
+        return (cursor - cursorBefore);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int writeSleb128(int value) {
+        if (stretchy) {
+            ensureCapacity(cursor + 5); // pessimistic
+        }
+        int cursorBefore = cursor;
+        Leb128.writeSignedLeb128(this, value);
+        return (cursor - cursorBefore);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(ByteArray bytes) {
+        int blen = bytes.size();
+        int writeAt = cursor;
+        int end = writeAt + blen;
+
+        if (stretchy) {
+            ensureCapacity(end);
+        } else if (end > data.length) {
+            throwBounds();
+            return;
+        }
+
+        bytes.getBytes(data, writeAt);
+        cursor = end;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(byte[] bytes, int offset, int length) {
+        int writeAt = cursor;
+        int end = writeAt + length;
+        int bytesEnd = offset + length;
+
+        // twos-complement math trick: ((x < 0) || (y < 0)) <=> ((x|y) < 0)
+        if (((offset | length | end) < 0) || (bytesEnd > bytes.length)) {
+            throw new IndexOutOfBoundsException("bytes.length " +
+                                                bytes.length + "; " +
+                                                offset + "..!" + end);
+        }
+
+        if (stretchy) {
+            ensureCapacity(end);
+        } else if (end > data.length) {
+            throwBounds();
+            return;
+        }
+
+        System.arraycopy(bytes, offset, data, writeAt, length);
+        cursor = end;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(byte[] bytes) {
+        write(bytes, 0, bytes.length);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeZeroes(int count) {
+        if (count < 0) {
+            throw new IllegalArgumentException("count < 0");
+        }
+
+        int end = cursor + count;
+
+        if (stretchy) {
+            ensureCapacity(end);
+        } else if (end > data.length) {
+            throwBounds();
+            return;
+        }
+
+        /*
+         * We need to write zeroes, since the array might be reused across different dx invocations.
+         */
+        Arrays.fill(data, cursor, end, (byte) 0);
+
+        cursor = end;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void alignTo(int alignment) {
+        int mask = alignment - 1;
+
+        if ((alignment < 0) || ((mask & alignment) != 0)) {
+            throw new IllegalArgumentException("bogus alignment");
+        }
+
+        int end = (cursor + mask) & ~mask;
+
+        if (stretchy) {
+            ensureCapacity(end);
+        } else if (end > data.length) {
+            throwBounds();
+            return;
+        }
+
+        /*
+         * We need to write zeroes, since the array might be reused across different dx invocations.
+         */
+        Arrays.fill(data, cursor, end, (byte) 0);
+
+        cursor = end;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean annotates() {
+        return (annotations != null);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isVerbose() {
+        return verbose;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void annotate(String msg) {
+        if (annotations == null) {
+            return;
+        }
+
+        endAnnotation();
+        annotations.add(new Annotation(cursor, msg));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void annotate(int amt, String msg) {
+        if (annotations == null) {
+            return;
+        }
+
+        endAnnotation();
+
+        int asz = annotations.size();
+        int lastEnd = (asz == 0) ? 0 : annotations.get(asz - 1).getEnd();
+        int startAt;
+
+        if (lastEnd <= cursor) {
+            startAt = cursor;
+        } else {
+            startAt = lastEnd;
+        }
+
+        annotations.add(new Annotation(startAt, startAt + amt, msg));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void endAnnotation() {
+        if (annotations == null) {
+            return;
+        }
+
+        int sz = annotations.size();
+
+        if (sz != 0) {
+            annotations.get(sz - 1).setEndIfUnset(cursor);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getAnnotationWidth() {
+        int leftWidth = 8 + (hexCols * 2) + (hexCols / 2);
+
+        return annotationWidth - leftWidth;
+    }
+
+    /**
+     * Indicates that this instance should keep annotations. This method may
+     * be called only once per instance, and only before any data has been
+     * written to the it.
+     *
+     * @param annotationWidth {@code >= 40;} the desired maximum annotation width
+     * @param verbose whether or not to indicate verbose annotations
+     */
+    public void enableAnnotations(int annotationWidth, boolean verbose) {
+        if ((annotations != null) || (cursor != 0)) {
+            throw new RuntimeException("cannot enable annotations");
+        }
+
+        if (annotationWidth < 40) {
+            throw new IllegalArgumentException("annotationWidth < 40");
+        }
+
+        int hexCols = (((annotationWidth - 7) / 15) + 1) & ~1;
+        if (hexCols < 6) {
+            hexCols = 6;
+        } else if (hexCols > 10) {
+            hexCols = 10;
+        }
+
+        this.annotations = new ArrayList<Annotation>(1000);
+        this.annotationWidth = annotationWidth;
+        this.hexCols = hexCols;
+        this.verbose = verbose;
+    }
+
+    /**
+     * Finishes up annotation processing. This closes off any open
+     * annotations and removes annotations that don't refer to written
+     * data.
+     */
+    public void finishAnnotating() {
+        // Close off the final annotation, if any.
+        endAnnotation();
+
+        // Remove annotations that refer to unwritten data.
+        if (annotations != null) {
+            int asz = annotations.size();
+            while (asz > 0) {
+                Annotation last = annotations.get(asz - 1);
+                if (last.getStart() > cursor) {
+                    annotations.remove(asz - 1);
+                    asz--;
+                } else if (last.getEnd() > cursor) {
+                    last.setEnd(cursor);
+                    break;
+                } else {
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * Writes the annotated content of this instance to the given writer.
+     *
+     * @param out {@code non-null;} where to write to
+     */
+    public void writeAnnotationsTo(Writer out) throws IOException {
+        int width2 = getAnnotationWidth();
+        int width1 = annotationWidth - width2 - 1;
+
+        TwoColumnOutput twoc = new TwoColumnOutput(out, width1, width2, "|");
+        Writer left = twoc.getLeft();
+        Writer right = twoc.getRight();
+        int leftAt = 0; // left-hand byte output cursor
+        int rightAt = 0; // right-hand annotation index
+        int rightSz = annotations.size();
+
+        while ((leftAt < cursor) && (rightAt < rightSz)) {
+            Annotation a = annotations.get(rightAt);
+            int start = a.getStart();
+            int end;
+            String text;
+
+            if (leftAt < start) {
+                // This is an area with no annotation.
+                end = start;
+                start = leftAt;
+                text = "";
+            } else {
+                // This is an area with an annotation.
+                end = a.getEnd();
+                text = a.getText();
+                rightAt++;
+            }
+
+            left.write(Hex.dump(data, start, end - start, start, hexCols, 6));
+            right.write(text);
+            twoc.flush();
+            leftAt = end;
+        }
+
+        if (leftAt < cursor) {
+            // There is unannotated output at the end.
+            left.write(Hex.dump(data, leftAt, cursor - leftAt, leftAt,
+                                hexCols, 6));
+        }
+
+        while (rightAt < rightSz) {
+            // There are zero-byte annotations at the end.
+            right.write(annotations.get(rightAt).getText());
+            rightAt++;
+        }
+
+        twoc.flush();
+    }
+
+    /**
+     * Throws the excpetion for when an attempt is made to write past the
+     * end of the instance.
+     */
+    private static void throwBounds() {
+        throw new IndexOutOfBoundsException("attempt to write past the end");
+    }
+
+    /**
+     * Reallocates the underlying array if necessary. Calls to this method
+     * should be guarded by a test of {@link #stretchy}.
+     *
+     * @param desiredSize {@code >= 0;} the desired minimum total size of the array
+     */
+    private void ensureCapacity(int desiredSize) {
+        if (data.length < desiredSize) {
+            byte[] newData = new byte[desiredSize * 2 + 1000];
+            System.arraycopy(data, 0, newData, 0, cursor);
+            data = newData;
+        }
+    }
+
+    /**
+     * Annotation on output.
+     */
+    private static class Annotation {
+        /** {@code >= 0;} start of annotated range (inclusive) */
+        private final int start;
+
+        /**
+         * {@code >= 0;} end of annotated range (exclusive);
+         * {@code Integer.MAX_VALUE} if unclosed
+         */
+        private int end;
+
+        /** {@code non-null;} annotation text */
+        private final String text;
+
+        /**
+         * Constructs an instance.
+         *
+         * @param start {@code >= 0;} start of annotated range
+         * @param end {@code >= start;} end of annotated range (exclusive) or
+         * {@code Integer.MAX_VALUE} if unclosed
+         * @param text {@code non-null;} annotation text
+         */
+        public Annotation(int start, int end, String text) {
+            this.start = start;
+            this.end = end;
+            this.text = text;
+        }
+
+        /**
+         * Constructs an instance. It is initally unclosed.
+         *
+         * @param start {@code >= 0;} start of annotated range
+         * @param text {@code non-null;} annotation text
+         */
+        public Annotation(int start, String text) {
+            this(start, Integer.MAX_VALUE, text);
+        }
+
+        /**
+         * Sets the end as given, but only if the instance is unclosed;
+         * otherwise, do nothing.
+         *
+         * @param end {@code >= start;} the end
+         */
+        public void setEndIfUnset(int end) {
+            if (this.end == Integer.MAX_VALUE) {
+                this.end = end;
+            }
+        }
+
+        /**
+         * Sets the end as given.
+         *
+         * @param end {@code >= start;} the end
+         */
+        public void setEnd(int end) {
+            this.end = end;
+        }
+
+        /**
+         * Gets the start.
+         *
+         * @return the start
+         */
+        public int getStart() {
+            return start;
+        }
+
+        /**
+         * Gets the end.
+         *
+         * @return the end
+         */
+        public int getEnd() {
+            return end;
+        }
+
+        /**
+         * Gets the text.
+         *
+         * @return {@code non-null;} the text
+         */
+        public String getText() {
+            return text;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/util/FixedSizeList.java b/dx/src/com/android/dx/util/FixedSizeList.java
new file mode 100644
index 0000000..d5425a4
--- /dev/null
+++ b/dx/src/com/android/dx/util/FixedSizeList.java
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.util.Arrays;
+
+/**
+ * Simple (mostly) fixed-size list of objects, which may be made immutable.
+ */
+public class FixedSizeList
+        extends MutabilityControl implements ToHuman {
+    /** {@code non-null;} array of elements */
+    private Object[] arr;
+
+    /**
+     * Constructs an instance. All indices initially contain {@code null}.
+     *
+     * @param size the size of the list
+     */
+    public FixedSizeList(int size) {
+        super(size != 0);
+
+        try {
+            arr = new Object[size];
+        } catch (NegativeArraySizeException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("size < 0");
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            // Easy out.
+            return true;
+        }
+
+        if ((other == null) || (getClass() != other.getClass())) {
+            // Another easy out.
+            return false;
+        }
+
+        FixedSizeList list = (FixedSizeList) other;
+        return Arrays.equals(arr, list.arr);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return Arrays.hashCode(arr);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        String name = getClass().getName();
+
+        return toString0(name.substring(name.lastIndexOf('.') + 1) + '{',
+                         ", ",
+                         "}",
+                         false);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * This method will only work if every element of the list
+     * implements {@link ToHuman}.
+     */
+    @Override
+    public String toHuman() {
+        String name = getClass().getName();
+
+        return toString0(name.substring(name.lastIndexOf('.') + 1) + '{',
+                         ", ",
+                         "}",
+                         true);
+    }
+
+    /**
+     * Gets a customized string form for this instance.
+     *
+     * @param prefix {@code null-ok;} prefix for the start of the result
+     * @param separator {@code null-ok;} separator to insert between each item
+     * @param suffix {@code null-ok;} suffix for the end of the result
+     * @return {@code non-null;} the custom string
+     */
+    public String toString(String prefix, String separator, String suffix) {
+        return toString0(prefix, separator, suffix, false);
+    }
+
+    /**
+     * Gets a customized human string for this instance. This method will
+     * only work if every element of the list implements {@link
+     * ToHuman}.
+     *
+     * @param prefix {@code null-ok;} prefix for the start of the result
+     * @param separator {@code null-ok;} separator to insert between each item
+     * @param suffix {@code null-ok;} suffix for the end of the result
+     * @return {@code non-null;} the custom string
+     */
+    public String toHuman(String prefix, String separator, String suffix) {
+        return toString0(prefix, separator, suffix, true);
+    }
+
+    /**
+     * Gets the number of elements in this list.
+     */
+    public final int size() {
+        return arr.length;
+    }
+
+    /**
+     * Shrinks this instance to fit, by removing any unset
+     * ({@code null}) elements, leaving the remaining elements in
+     * their original order.
+     */
+    public void shrinkToFit() {
+        int sz = arr.length;
+        int newSz = 0;
+
+        for (int i = 0; i < sz; i++) {
+            if (arr[i] != null) {
+                newSz++;
+            }
+        }
+
+        if (sz == newSz) {
+            return;
+        }
+
+        throwIfImmutable();
+
+        Object[] newa = new Object[newSz];
+        int at = 0;
+
+        for (int i = 0; i < sz; i++) {
+            Object one = arr[i];
+            if (one != null) {
+                newa[at] = one;
+                at++;
+            }
+        }
+
+        arr = newa;
+        if (newSz == 0) {
+            setImmutable();
+        }
+    }
+
+    /**
+     * Gets the indicated element. It is an error to call this with the
+     * index for an element which was never set; if you do that, this
+     * will throw {@code NullPointerException}. This method is
+     * protected so that subclasses may offer a safe type-checked
+     * public interface to their clients.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @return {@code non-null;} the indicated element
+     */
+    protected final Object get0(int n) {
+        try {
+            Object result = arr[n];
+
+            if (result == null) {
+                throw new NullPointerException("unset: " + n);
+            }
+
+            return result;
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            return throwIndex(n);
+        }
+    }
+
+    /**
+     * Gets the indicated element, allowing {@code null}s to be
+     * returned. This method is protected so that subclasses may
+     * (optionally) offer a safe type-checked public interface to
+     * their clients.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @return {@code null-ok;} the indicated element
+     */
+    protected final Object getOrNull0(int n) {
+        return arr[n];
+    }
+
+    /**
+     * Sets the element at the given index, but without doing any type
+     * checks on the element. This method is protected so that
+     * subclasses may offer a safe type-checked public interface to
+     * their clients.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param obj {@code null-ok;} the value to store
+     */
+    protected final void set0(int n, Object obj) {
+        throwIfImmutable();
+
+        try {
+            arr[n] = obj;
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            throwIndex(n);
+        }
+    }
+
+    /**
+     * Throws the appropriate exception for the given index value.
+     *
+     * @param n the index value
+     * @return never
+     * @throws IndexOutOfBoundsException always thrown
+     */
+    private Object throwIndex(int n) {
+        if (n < 0) {
+            throw new IndexOutOfBoundsException("n < 0");
+        }
+
+        throw new IndexOutOfBoundsException("n >= size()");
+    }
+
+    /**
+     * Helper for {@link #toString} and {@link #toHuman}, which both of
+     * those call to pretty much do everything.
+     *
+     * @param prefix {@code null-ok;} prefix for the start of the result
+     * @param separator {@code null-ok;} separator to insert between each item
+     * @param suffix {@code null-ok;} suffix for the end of the result
+     * @param human whether the output is to be human
+     * @return {@code non-null;} the custom string
+     */
+    private String toString0(String prefix, String separator, String suffix,
+                             boolean human) {
+        int len = arr.length;
+        StringBuilder sb = new StringBuilder(len * 10 + 10);
+
+        if (prefix != null) {
+            sb.append(prefix);
+        }
+
+        for (int i = 0; i < len; i++) {
+            if ((i != 0) && (separator != null)) {
+                sb.append(separator);
+            }
+
+            if (human) {
+                sb.append(((ToHuman) arr[i]).toHuman());
+            } else {
+                sb.append(arr[i]);
+            }
+        }
+
+        if (suffix != null) {
+            sb.append(suffix);
+        }
+
+        return sb.toString();
+    }
+
+}
diff --git a/dx/src/com/android/dx/util/Hex.java b/dx/src/com/android/dx/util/Hex.java
new file mode 100644
index 0000000..27862ab
--- /dev/null
+++ b/dx/src/com/android/dx/util/Hex.java
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * Utilities for formatting numbers as hexadecimal.
+ */
+public final class Hex {
+    /**
+     * This class is uninstantiable.
+     */
+    private Hex() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Formats a {@code long} as an 8-byte unsigned hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String u8(long v) {
+        char[] result = new char[16];
+        for (int i = 0; i < 16; i++) {
+            result[15 - i] = Character.forDigit((int) v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats an {@code int} as a 4-byte unsigned hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String u4(int v) {
+        char[] result = new char[8];
+        for (int i = 0; i < 8; i++) {
+            result[7 - i] = Character.forDigit(v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats an {@code int} as a 3-byte unsigned hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String u3(int v) {
+        char[] result = new char[6];
+        for (int i = 0; i < 6; i++) {
+            result[5 - i] = Character.forDigit(v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats an {@code int} as a 2-byte unsigned hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String u2(int v) {
+        char[] result = new char[4];
+        for (int i = 0; i < 4; i++) {
+            result[3 - i] = Character.forDigit(v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats an {@code int} as either a 2-byte unsigned hex value
+     * (if the value is small enough) or a 4-byte unsigned hex value (if
+     * not).
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String u2or4(int v) {
+        if (v == (char) v) {
+            return u2(v);
+        } else {
+            return u4(v);
+        }
+    }
+
+    /**
+     * Formats an {@code int} as a 1-byte unsigned hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String u1(int v) {
+        char[] result = new char[2];
+        for (int i = 0; i < 2; i++) {
+            result[1 - i] = Character.forDigit(v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats an {@code int} as a 4-bit unsigned hex nibble.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String uNibble(int v) {
+        char[] result = new char[1];
+
+        result[0] = Character.forDigit(v & 0x0f, 16);
+        return new String(result);
+    }
+
+    /**
+     * Formats a {@code long} as an 8-byte signed hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String s8(long v) {
+        char[] result = new char[17];
+
+        if (v < 0) {
+            result[0] = '-';
+            v = -v;
+        } else {
+            result[0] = '+';
+        }
+
+        for (int i = 0; i < 16; i++) {
+            result[16 - i] = Character.forDigit((int) v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats an {@code int} as a 4-byte signed hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String s4(int v) {
+        char[] result = new char[9];
+
+        if (v < 0) {
+            result[0] = '-';
+            v = -v;
+        } else {
+            result[0] = '+';
+        }
+
+        for (int i = 0; i < 8; i++) {
+            result[8 - i] = Character.forDigit(v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats an {@code int} as a 2-byte signed hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String s2(int v) {
+        char[] result = new char[5];
+
+        if (v < 0) {
+            result[0] = '-';
+            v = -v;
+        } else {
+            result[0] = '+';
+        }
+
+        for (int i = 0; i < 4; i++) {
+            result[4 - i] = Character.forDigit(v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats an {@code int} as a 1-byte signed hex value.
+     *
+     * @param v value to format
+     * @return {@code non-null;} formatted form
+     */
+    public static String s1(int v) {
+        char[] result = new char[3];
+
+        if (v < 0) {
+            result[0] = '-';
+            v = -v;
+        } else {
+            result[0] = '+';
+        }
+
+        for (int i = 0; i < 2; i++) {
+            result[2 - i] = Character.forDigit(v & 0x0f, 16);
+            v >>= 4;
+        }
+
+        return new String(result);
+    }
+
+    /**
+     * Formats a hex dump of a portion of a {@code byte[]}. The result
+     * is always newline-terminated, unless the passed-in length was zero,
+     * in which case the result is always the empty string ({@code ""}).
+     *
+     * @param arr {@code non-null;} array to format
+     * @param offset {@code >= 0;} offset to the part to dump
+     * @param length {@code >= 0;} number of bytes to dump
+     * @param outOffset {@code >= 0;} first output offset to print
+     * @param bpl {@code >= 0;} number of bytes of output per line
+     * @param addressLength {@code {2,4,6,8};} number of characters for each address
+     * header
+     * @return {@code non-null;} a string of the dump
+     */
+    public static String dump(byte[] arr, int offset, int length,
+                              int outOffset, int bpl, int addressLength) {
+        int end = offset + length;
+
+        // twos-complement math trick: ((x < 0) || (y < 0)) <=> ((x|y) < 0)
+        if (((offset | length | end) < 0) || (end > arr.length)) {
+            throw new IndexOutOfBoundsException("arr.length " +
+                                                arr.length + "; " +
+                                                offset + "..!" + end);
+        }
+
+        if (outOffset < 0) {
+            throw new IllegalArgumentException("outOffset < 0");
+        }
+
+        if (length == 0) {
+            return "";
+        }
+
+        StringBuilder sb = new StringBuilder(length * 4 + 6);
+        boolean bol = true;
+        int col = 0;
+
+        while (length > 0) {
+            if (col == 0) {
+                String astr;
+                switch (addressLength) {
+                    case 2:  astr = Hex.u1(outOffset); break;
+                    case 4:  astr = Hex.u2(outOffset); break;
+                    case 6:  astr = Hex.u3(outOffset); break;
+                    default: astr = Hex.u4(outOffset); break;
+                }
+                sb.append(astr);
+                sb.append(": ");
+            } else if ((col & 1) == 0) {
+                sb.append(' ');
+            }
+            sb.append(Hex.u1(arr[offset]));
+            outOffset++;
+            offset++;
+            col++;
+            if (col == bpl) {
+                sb.append('\n');
+                col = 0;
+            }
+            length--;
+        }
+
+        if (col != 0) {
+            sb.append('\n');
+        }
+
+        return sb.toString();
+    }
+}
diff --git a/dx/src/com/android/dx/util/HexParser.java b/dx/src/com/android/dx/util/HexParser.java
new file mode 100644
index 0000000..1b34345
--- /dev/null
+++ b/dx/src/com/android/dx/util/HexParser.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * Utilities for parsing hexadecimal text.
+ */
+public final class HexParser {
+    /**
+     * This class is uninstantiable.
+     */
+    private HexParser() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Parses the given text as hex, returning a {@code byte[]}
+     * corresponding to the text. The format is simple: Each line may
+     * start with a hex offset followed by a colon (which is verified
+     * and presumably used just as a comment), and then consists of
+     * hex digits freely interspersed with whitespace. If a pound sign
+     * is encountered, it and the rest of the line are ignored as a
+     * comment. If a double quote is encountered, then the ASCII value
+     * of the subsequent characters is used, until the next double
+     * quote. Quoted strings may not span multiple lines.
+     *
+     * @param src {@code non-null;} the source string
+     * @return {@code non-null;} the parsed form
+     */
+    public static byte[] parse(String src) {
+        int len = src.length();
+        byte[] result = new byte[len / 2];
+        int at = 0;
+        int outAt = 0;
+
+        while (at < len) {
+            int nlAt = src.indexOf('\n', at);
+            if (nlAt < 0) {
+                nlAt = len;
+            }
+            int poundAt = src.indexOf('#', at);
+
+            String line;
+            if ((poundAt >= 0) && (poundAt < nlAt)) {
+                line = src.substring(at, poundAt);
+            } else {
+                line = src.substring(at, nlAt);
+            }
+            at = nlAt + 1;
+
+            int colonAt = line.indexOf(':');
+
+            atCheck:
+            if (colonAt != -1) {
+                int quoteAt = line.indexOf('\"');
+                if ((quoteAt != -1) && (quoteAt < colonAt)) {
+                    break atCheck;
+                }
+
+                String atStr = line.substring(0, colonAt).trim();
+                line = line.substring(colonAt + 1);
+                int alleged = Integer.parseInt(atStr, 16);
+                if (alleged != outAt) {
+                    throw new RuntimeException("bogus offset marker: " +
+                                               atStr);
+                }
+            }
+
+            int lineLen = line.length();
+            int value = -1;
+            boolean quoteMode = false;
+
+            for (int i = 0; i < lineLen; i++) {
+                char c = line.charAt(i);
+
+                if (quoteMode) {
+                    if (c == '\"') {
+                        quoteMode = false;
+                    } else {
+                        result[outAt] = (byte) c;
+                        outAt++;
+                    }
+                    continue;
+                }
+
+                if (c <= ' ') {
+                    continue;
+                }
+                if (c == '\"') {
+                    if (value != -1) {
+                        throw new RuntimeException("spare digit around " +
+                                                   "offset " + Hex.u4(outAt));
+                    }
+                    quoteMode = true;
+                    continue;
+                }
+
+                int digVal = Character.digit(c, 16);
+                if (digVal == -1) {
+                    throw new RuntimeException("bogus digit character: \"" +
+                                               c + "\"");
+                }
+                if (value == -1) {
+                    value = digVal;
+                } else {
+                    result[outAt] = (byte) ((value << 4) | digVal);
+                    outAt++;
+                    value = -1;
+                }
+            }
+
+            if (value != -1) {
+                throw new RuntimeException("spare digit around offset " +
+                                           Hex.u4(outAt));
+            }
+
+            if (quoteMode) {
+                throw new RuntimeException("unterminated quote around " +
+                                           "offset " + Hex.u4(outAt));
+            }
+        }
+
+        if (outAt < result.length) {
+            byte[] newr = new byte[outAt];
+            System.arraycopy(result, 0, newr, 0, outAt);
+            result = newr;
+        }
+
+        return result;
+    }
+}
diff --git a/dx/src/com/android/dx/util/IndentingWriter.java b/dx/src/com/android/dx/util/IndentingWriter.java
new file mode 100644
index 0000000..3424e37
--- /dev/null
+++ b/dx/src/com/android/dx/util/IndentingWriter.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.io.FilterWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Writer that wraps another writer and passes width-limited and
+ * optionally-prefixed output to its subordinate. When lines are
+ * wrapped they are automatically indented based on the start of the
+ * line.
+ */
+public final class IndentingWriter extends FilterWriter {
+    /** {@code null-ok;} optional prefix for every line */
+    private final String prefix;
+
+    /** {@code > 0;} the maximum output width */
+    private final int width;
+
+    /** {@code > 0;} the maximum indent */
+    private final int maxIndent;
+
+    /** {@code >= 0;} current output column (zero-based) */
+    private int column;
+
+    /** whether indent spaces are currently being collected */
+    private boolean collectingIndent;
+
+    /** {@code >= 0;} current indent amount */
+    private int indent;
+
+    /**
+     * Constructs an instance.
+     *
+     * @param out {@code non-null;} writer to send final output to
+     * @param width {@code >= 0;} the maximum output width (not including
+     * {@code prefix}), or {@code 0} for no maximum
+     * @param prefix {@code non-null;} the prefix for each line
+     */
+    public IndentingWriter(Writer out, int width, String prefix) {
+        super(out);
+
+        if (out == null) {
+            throw new NullPointerException("out == null");
+        }
+
+        if (width < 0) {
+            throw new IllegalArgumentException("width < 0");
+        }
+
+        if (prefix == null) {
+            throw new NullPointerException("prefix == null");
+        }
+
+        this.width = (width != 0) ? width : Integer.MAX_VALUE;
+        this.maxIndent = width >> 1;
+        this.prefix = (prefix.length() == 0) ? null : prefix;
+
+        bol();
+    }
+
+    /**
+     * Constructs a no-prefix instance.
+     *
+     * @param out {@code non-null;} writer to send final output to
+     * @param width {@code >= 0;} the maximum output width (not including
+     * {@code prefix}), or {@code 0} for no maximum
+     */
+    public IndentingWriter(Writer out, int width) {
+        this(out, width, "");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(int c) throws IOException {
+        synchronized (lock) {
+            if (collectingIndent) {
+                if (c == ' ') {
+                    indent++;
+                    if (indent >= maxIndent) {
+                        indent = maxIndent;
+                        collectingIndent = false;
+                    }
+                } else {
+                    collectingIndent = false;
+                }
+            }
+
+            if ((column == width) && (c != '\n')) {
+                out.write('\n');
+                column = 0;
+                /*
+                 * Note: No else, so this should fall through to the next
+                 * if statement.
+                 */
+            }
+
+            if (column == 0) {
+                if (prefix != null) {
+                    out.write(prefix);
+                }
+
+                if (!collectingIndent) {
+                    for (int i = 0; i < indent; i++) {
+                        out.write(' ');
+                    }
+                    column = indent;
+                }
+            }
+
+            out.write(c);
+
+            if (c == '\n') {
+                bol();
+            } else {
+                column++;
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(char[] cbuf, int off, int len) throws IOException {
+        synchronized (lock) {
+            while (len > 0) {
+                write(cbuf[off]);
+                off++;
+                len--;
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(String str, int off, int len) throws IOException {
+        synchronized (lock) {
+            while (len > 0) {
+                write(str.charAt(off));
+                off++;
+                len--;
+            }
+        }
+    }
+
+    /**
+     * Indicates that output is at the beginning of a line.
+     */
+    private void bol() {
+        column = 0;
+        collectingIndent = (maxIndent != 0);
+        indent = 0;
+    }
+}
diff --git a/dx/src/com/android/dx/util/IntIterator.java b/dx/src/com/android/dx/util/IntIterator.java
new file mode 100644
index 0000000..4caa439
--- /dev/null
+++ b/dx/src/com/android/dx/util/IntIterator.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * An iterator for a list of ints.
+ */
+public interface IntIterator {
+
+    /**
+     * Checks to see if the iterator has a next value.
+     *
+     * @return true if next() will succeed
+     */
+    boolean hasNext();
+
+    /**
+     * Returns the next value in the iterator.
+     *
+     * @return next value
+     * @throws java.util.NoSuchElementException if no next element exists
+     */
+    int next();
+}
diff --git a/dx/src/com/android/dx/util/IntList.java b/dx/src/com/android/dx/util/IntList.java
new file mode 100644
index 0000000..e0fdefe
--- /dev/null
+++ b/dx/src/com/android/dx/util/IntList.java
@@ -0,0 +1,453 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.util.Arrays;
+
+/**
+ * Simple list of {@code int}s.
+ */
+public final class IntList extends MutabilityControl {
+    /** {@code non-null;} immutable, no-element instance */
+    public static final IntList EMPTY = new IntList(0);
+
+    /** {@code non-null;} array of elements */
+    private int[] values;
+
+    /** {@code >= 0;} current size of the list */
+    private int size;
+
+    /** whether the values are currently sorted */
+    private boolean sorted;
+
+    static {
+        EMPTY.setImmutable();
+    }
+
+    /**
+     * Constructs a new immutable instance with the given element.
+     *
+     * @param value the sole value in the list
+     */
+    public static IntList makeImmutable(int value) {
+        IntList result = new IntList(1);
+
+        result.add(value);
+        result.setImmutable();
+
+        return result;
+    }
+
+    /**
+     * Constructs a new immutable instance with the given elements.
+     *
+     * @param value0 the first value in the list
+     * @param value1 the second value in the list
+     */
+    public static IntList makeImmutable(int value0, int value1) {
+        IntList result = new IntList(2);
+
+        result.add(value0);
+        result.add(value1);
+        result.setImmutable();
+
+        return result;
+    }
+
+    /**
+     * Constructs an empty instance with a default initial capacity.
+     */
+    public IntList() {
+        this(4);
+    }
+
+    /**
+     * Constructs an empty instance.
+     *
+     * @param initialCapacity {@code >= 0;} initial capacity of the list
+     */
+    public IntList(int initialCapacity) {
+        super(true);
+
+        try {
+            values = new int[initialCapacity];
+        } catch (NegativeArraySizeException ex) {
+            // Translate the exception.
+            throw new IllegalArgumentException("size < 0");
+        }
+
+        size = 0;
+        sorted = true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        int result = 0;
+
+        for (int i = 0; i < size; i++) {
+            result = (result * 31) + values[i];
+        }
+
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object other) {
+        if (other == this) {
+            return true;
+        }
+
+        if (! (other instanceof IntList)) {
+            return false;
+        }
+
+        IntList otherList = (IntList) other;
+
+        if (sorted != otherList.sorted) {
+            return false;
+        }
+
+        if (size != otherList.size) {
+            return false;
+        }
+
+        for (int i = 0; i < size; i++) {
+            if (values[i] != otherList.values[i]) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(size * 5 + 10);
+
+        sb.append('{');
+
+        for (int i = 0; i < size; i++) {
+            if (i != 0) {
+                sb.append(", ");
+            }
+            sb.append(values[i]);
+        }
+
+        sb.append('}');
+
+        return sb.toString();
+    }
+
+    /**
+     * Gets the number of elements in this list.
+     */
+    public int size() {
+        return size;
+    }
+
+    /**
+     * Gets the indicated value.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @return the indicated element's value
+     */
+    public int get(int n) {
+        if (n >= size) {
+            throw new IndexOutOfBoundsException("n >= size()");
+        }
+
+        try {
+            return values[n];
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate exception.
+            throw new IndexOutOfBoundsException("n < 0");
+        }
+    }
+
+    /**
+     * Sets the value at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param value value to store
+     */
+    public void set(int n, int value) {
+        throwIfImmutable();
+
+        if (n >= size) {
+            throw new IndexOutOfBoundsException("n >= size()");
+        }
+
+        try {
+            values[n] = value;
+            sorted = false;
+        } catch (ArrayIndexOutOfBoundsException ex) {
+            // Translate the exception.
+            if (n < 0) {
+                throw new IllegalArgumentException("n < 0");
+            }
+        }
+    }
+
+    /**
+     * Adds an element to the end of the list. This will increase the
+     * list's capacity if necessary.
+     *
+     * @param value the value to add
+     */
+    public void add(int value) {
+        throwIfImmutable();
+
+        growIfNeeded();
+
+        values[size++] = value;
+
+        if (sorted && (size > 1)) {
+            sorted = (value >= values[size - 2]);
+        }
+    }
+
+    /**
+     * Inserts element into specified index, moving elements at and above
+     * that index up one. May not be used to insert at an index beyond the
+     * current size (that is, insertion as a last element is legal but
+     * no further).
+     *
+     * @param n {@code >= 0, <=size();} index of where to insert
+     * @param value value to insert
+     */
+    public void insert(int n, int value) {
+        if (n > size) {
+            throw new IndexOutOfBoundsException("n > size()");
+        }
+
+        growIfNeeded();
+
+        System.arraycopy (values, n, values, n+1, size - n);
+        values[n] = value;
+        size++;
+
+        sorted = sorted
+                && (n == 0 || value > values[n-1])
+                && (n == (size - 1) || value < values[n+1]);
+    }
+
+    /**
+     * Removes an element at a given index, shifting elements at greater
+     * indicies down one.
+     *
+     * @param n  {@code >=0, < size();} index of element to remove
+     */
+    public void removeIndex(int n) {
+        if (n >= size) {
+            throw new IndexOutOfBoundsException("n >= size()");
+        }
+
+        System.arraycopy (values, n + 1, values, n, size - n - 1);
+        size--;
+
+        // sort status is unchanged
+    }
+
+    /**
+     * Increases size of array if needed
+     */
+    private void growIfNeeded() {
+        if (size == values.length) {
+            // Resize.
+            int[] newv = new int[size * 3 / 2 + 10];
+            System.arraycopy(values, 0, newv, 0, size);
+            values = newv;
+        }
+    }
+
+    /**
+     * Returns the last element in the array without modifying the array
+     *
+     * @return last value in the array
+     * @throws IndexOutOfBoundsException if stack is empty
+     */
+    public int top() {
+        return get(size - 1);
+    }
+
+    /**
+     * Pops an element off the end of the list and decreasing the size by one.
+     *
+     * @return value from what was the last element
+     * @throws IndexOutOfBoundsException if stack is empty
+     */
+    public int pop() {
+        throwIfImmutable();
+
+        int result;
+
+        result = get(size-1);
+        size--;
+
+        return result;
+    }
+
+    /**
+     * Pops N elements off the end of the list and decreasing the size by N.
+     *
+     * @param n {@code >= 0;} number of elements to remove from end
+     * @throws IndexOutOfBoundsException if stack is smaller than N
+     */
+    public void pop(int n) {
+        throwIfImmutable();
+
+        size -= n;
+    }
+
+    /**
+     * Shrinks the size of the list.
+     *
+     * @param newSize {@code >= 0;} the new size
+     */
+    public void shrink(int newSize) {
+        if (newSize < 0) {
+            throw new IllegalArgumentException("newSize < 0");
+        }
+
+        if (newSize > size) {
+            throw new IllegalArgumentException("newSize > size");
+        }
+
+        throwIfImmutable();
+
+        size = newSize;
+    }
+
+    /**
+     * Makes and returns a mutable copy of the list.
+     *
+     * @return {@code non-null;} an appropriately-constructed instance
+     */
+    public IntList mutableCopy() {
+        int sz = size;
+        IntList result = new IntList(sz);
+
+        for (int i = 0; i < sz; i++) {
+            result.add(values[i]);
+        }
+
+        return result;
+    }
+
+    /**
+     * Sorts the elements in the list in-place.
+     */
+    public void sort() {
+        throwIfImmutable();
+
+        if (!sorted) {
+            Arrays.sort(values, 0, size);
+            sorted = true;
+        }
+    }
+
+    /**
+     * Returns the index of the given value, or -1 if the value does not
+     * appear in the list.  This will do a binary search if the list is
+     * sorted or a linear search if not.
+     *
+     * @param value value to find
+     * @return index of value or -1
+     */
+    public int indexOf(int value) {
+        int ret = binarysearch(value);
+
+        return ret >= 0 ? ret : -1;
+
+    }
+
+    /**
+     * Performs a binary search on a sorted list, returning the index of
+     * the given value if it is present or
+     * {@code (-(insertion point) - 1)} if the value is not present.
+     * If the list is not sorted, then reverts to linear search and returns
+     * {@code -size()} if the element is not found.
+     *
+     * @param value value to find
+     * @return index of value or {@code (-(insertion point) - 1)} if the
+     * value is not present
+     */
+    public int binarysearch(int value) {
+        int sz = size;
+
+        if (!sorted) {
+            // Linear search.
+            for (int i = 0; i < sz; i++) {
+                if (values[i] == value) {
+                    return i;
+                }
+            }
+
+            return -sz;
+        }
+
+        /*
+         * Binary search. This variant does only one value comparison
+         * per iteration but does one more iteration on average than
+         * the variant that includes a value equality check per
+         * iteration.
+         */
+
+        int min = -1;
+        int max = sz;
+
+        while (max > (min + 1)) {
+            /*
+             * The guessIdx calculation is equivalent to ((min + max)
+             * / 2) but won't go wonky when min and max are close to
+             * Integer.MAX_VALUE.
+             */
+            int guessIdx = min + ((max - min) >> 1);
+            int guess = values[guessIdx];
+
+            if (value <= guess) {
+                max = guessIdx;
+            } else {
+                min = guessIdx;
+            }
+        }
+
+        if ((max != sz)) {
+            return (value == values[max]) ? max : (-max - 1);
+        } else {
+            return -sz - 1;
+        }
+    }
+
+
+    /**
+     * Returns whether or not the given value appears in the list.
+     * This will do a binary search if the list is sorted or a linear
+     * search if not.
+     *
+     * @see #sort
+     *
+     * @param value value to look for
+     * @return whether the list contains the given value
+     */
+    public boolean contains(int value) {
+        return indexOf(value) >= 0;
+    }
+}
diff --git a/dx/src/com/android/dx/util/IntSet.java b/dx/src/com/android/dx/util/IntSet.java
new file mode 100644
index 0000000..33b6bdd
--- /dev/null
+++ b/dx/src/com/android/dx/util/IntSet.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * A set of integers
+ */
+public interface IntSet {
+
+    /**
+     * Adds an int to a set
+     *
+     * @param value int to add
+     */
+    void add(int value);
+
+    /**
+     * Removes an int from a set.
+     *
+     * @param value int to remove
+     */
+    void remove(int value);
+
+    /**
+     * Checks to see if a value is in the set
+     *
+     * @param value int to check
+     * @return true if in set
+     */
+    boolean has(int value);
+
+    /**
+     * Merges {@code other} into this set, so this set becomes the
+     * union of the two.
+     *
+     * @param other {@code non-null;} other set to merge with.
+     */
+    void merge(IntSet other);
+
+    /**
+     * Returns the count of unique elements in this set.
+     *
+     * @return {@code > = 0;} count of unique elements
+     */
+    int elements();
+
+    /**
+     * Iterates the set
+     *
+     * @return {@code non-null;} a set iterator
+     */
+    IntIterator iterator();
+}
diff --git a/dx/src/com/android/dx/util/LabeledItem.java b/dx/src/com/android/dx/util/LabeledItem.java
new file mode 100644
index 0000000..b4856cf
--- /dev/null
+++ b/dx/src/com/android/dx/util/LabeledItem.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * An item that has an integer label.
+ */
+public interface LabeledItem {
+
+    /*
+     * Gets the label of this block.
+     *
+     * @return {@code >= 0;} the label
+     */
+    public int getLabel();
+}
diff --git a/dx/src/com/android/dx/util/LabeledList.java b/dx/src/com/android/dx/util/LabeledList.java
new file mode 100644
index 0000000..d270a13
--- /dev/null
+++ b/dx/src/com/android/dx/util/LabeledList.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.util.Arrays;
+
+/**
+ * A list of labeled items, allowing easy lookup by label.
+ */
+public class LabeledList extends FixedSizeList {
+    /**
+     * Sparse array indexed by label to FixedSizeList index;
+     * {@code -1} for an invalid label.
+     */
+    private final IntList labelToIndex;
+
+    /** {@inheritDoc} */
+    public LabeledList(int size) {
+        super(size);
+
+        labelToIndex = new IntList(size);
+    }
+
+    /**
+     * Constructs a new instance that is a copy of the old instance.
+     *
+     * @param old instance to copy
+     */
+    public LabeledList(LabeledList old) {
+        super(old.size());
+        labelToIndex = old.labelToIndex.mutableCopy();
+
+        int sz = old.size();
+
+        for (int i = 0; i < sz; i++) {
+            Object one = old.get0(i);
+            if (one != null) {
+                set0(i, one);
+            }
+        }
+    }
+
+    /**
+     * Gets the maximum label (exclusive) of any block added to this instance.
+     *
+     * @return {@code >= 0;} the maximum label
+     */
+    public final int getMaxLabel() {
+        int sz = labelToIndex.size();
+
+        // Gobble any deleted labels that may be at the end.
+        int i;
+        for (i = sz - 1; (i >= 0) && (labelToIndex.get(i) < 0); i--)
+            /*empty*/ ;
+
+        int newSize = i + 1;
+
+        labelToIndex.shrink(newSize);
+
+        return newSize;
+    }
+
+    /**
+     * Removes a label from the label-to-index mapping.
+     *
+     * @param oldLabel label to remove
+     */
+    private void removeLabel(int oldLabel) {
+        labelToIndex.set(oldLabel, -1);
+    }
+
+    /**
+     * Adds a label and index to the label-to-index mapping.
+     *
+     * @param label new label
+     * @param index index of block.
+     */
+    private void addLabelIndex(int label, int index) {
+        int origSz = labelToIndex.size();
+
+        for (int i = 0; i <= (label - origSz); i++) {
+            labelToIndex.add(-1);
+        }
+
+        labelToIndex.set(label, index);
+    }
+
+    /**
+     * Gets the index of the first item in the list with the given
+     * label, if any.
+     *
+     * @param label {@code >= 0;} the label to look for
+     * @return {@code >= -1;} the index of the so-labelled item, or {@code -1}
+     * if none is found
+     */
+    public final int indexOfLabel(int label) {
+        if (label >= labelToIndex.size()) {
+            return -1;
+        } else {
+            return labelToIndex.get(label);
+        }
+    }
+
+    /**
+     * Gets an array containing all of the labels used in this instance,
+     * in order. The returned array is freshly-allocated and so may be
+     * modified safely by the caller without impacting this instance.
+     *
+     * @return {@code non-null;} ordered array of labels
+     * @throws NullPointerException thrown if there are any {@code null}
+     * items in this instance
+     */
+    public final int[] getLabelsInOrder() {
+        int sz = size();
+        int[] result = new int[sz];
+
+        for (int i = 0; i < sz; i++) {
+            LabeledItem li = (LabeledItem) get0(i);
+            if (li == null) {
+                throw new NullPointerException("null at index " + i);
+            }
+            result[i] = li.getLabel();
+        }
+
+        Arrays.sort(result);
+        return result;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void shrinkToFit() {
+        super.shrinkToFit();
+
+        rebuildLabelToIndex();
+    }
+
+    /**
+     * Rebuilds the label-to-index mapping after a {@code shrinkToFit()}.
+     * Note: This assumes that the labels that are in the list are the
+     * same, although the indicies may have changed.
+     */
+    private void rebuildLabelToIndex() {
+        int szItems = size();
+
+        for (int i = 0; i < szItems; i++) {
+            LabeledItem li = (LabeledItem) get0(i);
+
+            if (li != null) {
+                labelToIndex.set(li.getLabel(), i);
+            }
+        }
+    }
+
+    /**
+     * Sets the element at the given index.
+     *
+     * @param n {@code >= 0, < size();} which element
+     * @param item {@code null-ok;} the value to store
+     */
+    protected void set(int n, LabeledItem item) {
+        LabeledItem old = (LabeledItem) getOrNull0(n);
+
+        set0(n, item);
+
+        if (old != null) {
+            removeLabel(old.getLabel());
+        }
+
+        if (item != null) {
+            addLabelIndex(item.getLabel(), n);
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/util/ListIntSet.java b/dx/src/com/android/dx/util/ListIntSet.java
new file mode 100644
index 0000000..3bb0ea6
--- /dev/null
+++ b/dx/src/com/android/dx/util/ListIntSet.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.util.NoSuchElementException;
+
+/**
+ * A set of integers, represented by a list
+ */
+public class ListIntSet implements IntSet {
+
+    /** also accessed in BitIntSet */
+    final IntList ints;
+
+    /**
+     * Constructs an instance
+     */
+    public ListIntSet() {
+        ints = new IntList();
+        ints.sort();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void add(int value) {
+        int index = ints.binarysearch(value);
+
+        if (index < 0) {
+            ints.insert(-(index + 1), value);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void remove(int value) {
+        int index = ints.indexOf(value);
+
+        if (index >= 0) {
+            ints.removeIndex(index);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean has(int value) {
+        return ints.indexOf(value) >= 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void merge(IntSet other) {
+        if (other instanceof ListIntSet) {
+            ListIntSet o = (ListIntSet) other;
+            int szThis = ints.size();
+            int szOther = o.ints.size();
+
+            int i = 0;
+            int j = 0;
+
+            while (j < szOther && i < szThis) {
+                while (j < szOther && o.ints.get(j) < ints.get(i)) {
+                    add(o.ints.get(j++));
+                }
+                if (j == szOther) {
+                    break;
+                }
+                while (i < szThis && o.ints.get(j) >= ints.get(i)) {
+                    i++;
+                }
+            }
+
+            while (j < szOther) {
+                add(o.ints.get(j++));
+            }
+
+            ints.sort();
+        } else if (other instanceof BitIntSet) {
+            BitIntSet o = (BitIntSet) other;
+
+            for (int i = 0; i >= 0; i = Bits.findFirst(o.bits, i + 1)) {
+                ints.add(i);
+            }
+            ints.sort();
+        } else {
+            IntIterator iter = other.iterator();
+            while (iter.hasNext()) {
+                add(iter.next());
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int elements() {
+        return ints.size();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public IntIterator iterator() {
+        return new IntIterator() {
+            private int idx = 0;
+
+            /** {@inheritDoc} */
+            @Override
+            public boolean hasNext() {
+                return idx < ints.size();
+            }
+
+            /** {@inheritDoc} */
+            @Override
+            public int next() {
+                if (!hasNext()) {
+                    throw new NoSuchElementException();
+                }
+
+                return ints.get(idx++);
+            }
+        };
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return ints.toString();
+    }
+}
diff --git a/dx/src/com/android/dx/util/MutabilityControl.java b/dx/src/com/android/dx/util/MutabilityControl.java
new file mode 100644
index 0000000..14e0f2e
--- /dev/null
+++ b/dx/src/com/android/dx/util/MutabilityControl.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * Very simple base class that implements a flag to control the mutability
+ * of instances. This class just provides the flag and a utility to check
+ * and throw the right exception, but it is up to subclasses to place calls
+ * to the checker in all the right places.
+ */
+public class MutabilityControl {
+    /** whether this instance is mutable */
+    private boolean mutable;
+
+    /**
+     * Constructs an instance. It is initially mutable.
+     */
+    public MutabilityControl() {
+        mutable = true;
+    }
+
+    /**
+     * Constructs an instance, explicitly indicating the mutability.
+     *
+     * @param mutable {@code true} iff this instance is mutable
+     */
+    public MutabilityControl(boolean mutable) {
+        this.mutable = mutable;
+    }
+
+    /**
+     * Makes this instance immutable.
+     */
+    public void setImmutable() {
+        mutable = false;
+    }
+
+    /**
+     * Checks to see whether or not this instance is immutable. This is the
+     * same as calling {@code !isMutable()}.
+     *
+     * @return {@code true} iff this instance is immutable
+     */
+    public final boolean isImmutable() {
+        return !mutable;
+    }
+
+    /**
+     * Checks to see whether or not this instance is mutable.
+     *
+     * @return {@code true} iff this instance is mutable
+     */
+    public final boolean isMutable() {
+        return mutable;
+    }
+
+    /**
+     * Throws {@link MutabilityException} if this instance is
+     * immutable.
+     */
+    public final void throwIfImmutable() {
+        if (!mutable) {
+            throw new MutabilityException("immutable instance");
+        }
+    }
+
+    /**
+     * Throws {@link MutabilityException} if this instance is mutable.
+     */
+    public final void throwIfMutable() {
+        if (mutable) {
+            throw new MutabilityException("mutable instance");
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/util/MutabilityException.java b/dx/src/com/android/dx/util/MutabilityException.java
new file mode 100644
index 0000000..6e029df
--- /dev/null
+++ b/dx/src/com/android/dx/util/MutabilityException.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import com.android.dex.util.ExceptionWithContext;
+
+/**
+ * Exception due to a mutability problem.
+ */
+public class MutabilityException
+        extends ExceptionWithContext {
+    public MutabilityException(String message) {
+        super(message);
+    }
+
+    public MutabilityException(Throwable cause) {
+        super(cause);
+    }
+
+    public MutabilityException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
diff --git a/dx/src/com/android/dx/util/Output.java b/dx/src/com/android/dx/util/Output.java
new file mode 100644
index 0000000..5f6f470
--- /dev/null
+++ b/dx/src/com/android/dx/util/Output.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import com.android.dex.util.ByteOutput;
+
+/**
+ * Interface for a sink for binary output. This is similar to
+ * {@code java.util.DataOutput}, but no {@code IOExceptions}
+ * are declared, and multibyte output is defined to be little-endian.
+ */
+public interface Output extends ByteOutput {
+    /**
+     * Gets the current cursor position. This is the same as the number of
+     * bytes written to this instance.
+     *
+     * @return {@code >= 0;} the cursor position
+     */
+    public int getCursor();
+
+    /**
+     * Asserts that the cursor is the given value.
+     *
+     * @param expectedCursor the expected cursor value
+     * @throws RuntimeException thrown if {@code getCursor() !=
+     * expectedCursor}
+     */
+    public void assertCursor(int expectedCursor);
+
+    /**
+     * Writes a {@code byte} to this instance.
+     *
+     * @param value the value to write; all but the low 8 bits are ignored
+     */
+    @Override
+    public void writeByte(int value);
+
+    /**
+     * Writes a {@code short} to this instance.
+     *
+     * @param value the value to write; all but the low 16 bits are ignored
+     */
+    public void writeShort(int value);
+
+    /**
+     * Writes an {@code int} to this instance.
+     *
+     * @param value the value to write
+     */
+    public void writeInt(int value);
+
+    /**
+     * Writes a {@code long} to this instance.
+     *
+     * @param value the value to write
+     */
+    public void writeLong(long value);
+
+    /**
+     * Writes a DWARFv3-style unsigned LEB128 integer. For details,
+     * see the "Dalvik Executable Format" document or DWARF v3 section
+     * 7.6.
+     *
+     * @param value value to write, treated as an unsigned value
+     * @return {@code 1..5;} the number of bytes actually written
+     */
+    public int writeUleb128(int value);
+
+    /**
+     * Writes a DWARFv3-style unsigned LEB128 integer. For details,
+     * see the "Dalvik Executable Format" document or DWARF v3 section
+     * 7.6.
+     *
+     * @param value value to write
+     * @return {@code 1..5;} the number of bytes actually written
+     */
+    public int writeSleb128(int value);
+
+    /**
+     * Writes a {@link ByteArray} to this instance.
+     *
+     * @param bytes {@code non-null;} the array to write
+     */
+    public void write(ByteArray bytes);
+
+    /**
+     * Writes a portion of a {@code byte[]} to this instance.
+     *
+     * @param bytes {@code non-null;} the array to write
+     * @param offset {@code >= 0;} offset into {@code bytes} for the first
+     * byte to write
+     * @param length {@code >= 0;} number of bytes to write
+     */
+    public void write(byte[] bytes, int offset, int length);
+
+    /**
+     * Writes a {@code byte[]} to this instance. This is just
+     * a convenient shorthand for {@code write(bytes, 0, bytes.length)}.
+     *
+     * @param bytes {@code non-null;} the array to write
+     */
+    public void write(byte[] bytes);
+
+    /**
+     * Writes the given number of {@code 0} bytes.
+     *
+     * @param count {@code >= 0;} the number of zeroes to write
+     */
+    public void writeZeroes(int count);
+
+    /**
+     * Adds extra bytes if necessary (with value {@code 0}) to
+     * force alignment of the output cursor as given.
+     *
+     * @param alignment {@code > 0;} the alignment; must be a power of two
+     */
+    public void alignTo(int alignment);
+}
diff --git a/dx/src/com/android/dx/util/ToHuman.java b/dx/src/com/android/dx/util/ToHuman.java
new file mode 100644
index 0000000..b3a31a5
--- /dev/null
+++ b/dx/src/com/android/dx/util/ToHuman.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * Simple interface for objects that can return a "human" (as opposed to
+ * a complete but often hard to read) string form.
+ */
+public interface ToHuman {
+    /**
+     * Return the "human" string form of this instance.  This is
+     * generally less "debuggy" than {@code toString()}.
+     *
+     * @return {@code non-null;} the human string form
+     */
+    public String toHuman();
+}
diff --git a/dx/src/com/android/dx/util/TwoColumnOutput.java b/dx/src/com/android/dx/util/TwoColumnOutput.java
new file mode 100644
index 0000000..ed2ab9f
--- /dev/null
+++ b/dx/src/com/android/dx/util/TwoColumnOutput.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+
+/**
+ * Class that takes a combined output destination and provides two
+ * output writers, one of which ends up writing to the left column and
+ * one which goes on the right.
+ */
+public final class TwoColumnOutput {
+    /** {@code non-null;} underlying writer for final output */
+    private final Writer out;
+
+    /** {@code > 0;} the left column width */
+    private final int leftWidth;
+
+    /** {@code non-null;} pending left column output */
+    private final StringBuffer leftBuf;
+
+    /** {@code non-null;} pending right column output */
+    private final StringBuffer rightBuf;
+
+    /** {@code non-null;} left column writer */
+    private final IndentingWriter leftColumn;
+
+    /** {@code non-null;} right column writer */
+    private final IndentingWriter rightColumn;
+
+    /**
+     * Turns the given two strings (with widths) and spacer into a formatted
+     * two-column string.
+     *
+     * @param s1 {@code non-null;} first string
+     * @param width1 {@code > 0;} width of the first column
+     * @param spacer {@code non-null;} spacer string
+     * @param s2 {@code non-null;} second string
+     * @param width2 {@code > 0;} width of the second column
+     * @return {@code non-null;} an appropriately-formatted string
+     */
+    public static String toString(String s1, int width1, String spacer,
+                                  String s2, int width2) {
+        int len1 = s1.length();
+        int len2 = s2.length();
+
+        StringWriter sw = new StringWriter((len1 + len2) * 3);
+        TwoColumnOutput twoOut =
+            new TwoColumnOutput(sw, width1, width2, spacer);
+
+        try {
+            twoOut.getLeft().write(s1);
+            twoOut.getRight().write(s2);
+        } catch (IOException ex) {
+            throw new RuntimeException("shouldn't happen", ex);
+        }
+
+        twoOut.flush();
+        return sw.toString();
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param out {@code non-null;} writer to send final output to
+     * @param leftWidth {@code > 0;} width of the left column, in characters
+     * @param rightWidth {@code > 0;} width of the right column, in characters
+     * @param spacer {@code non-null;} spacer string to sit between the two columns
+     */
+    public TwoColumnOutput(Writer out, int leftWidth, int rightWidth,
+                           String spacer) {
+        if (out == null) {
+            throw new NullPointerException("out == null");
+        }
+
+        if (leftWidth < 1) {
+            throw new IllegalArgumentException("leftWidth < 1");
+        }
+
+        if (rightWidth < 1) {
+            throw new IllegalArgumentException("rightWidth < 1");
+        }
+
+        if (spacer == null) {
+            throw new NullPointerException("spacer == null");
+        }
+
+        StringWriter leftWriter = new StringWriter(1000);
+        StringWriter rightWriter = new StringWriter(1000);
+
+        this.out = out;
+        this.leftWidth = leftWidth;
+        this.leftBuf = leftWriter.getBuffer();
+        this.rightBuf = rightWriter.getBuffer();
+        this.leftColumn = new IndentingWriter(leftWriter, leftWidth);
+        this.rightColumn =
+            new IndentingWriter(rightWriter, rightWidth, spacer);
+    }
+
+    /**
+     * Constructs an instance.
+     *
+     * @param out {@code non-null;} stream to send final output to
+     * @param leftWidth {@code >= 1;} width of the left column, in characters
+     * @param rightWidth {@code >= 1;} width of the right column, in characters
+     * @param spacer {@code non-null;} spacer string to sit between the two columns
+     */
+    public TwoColumnOutput(OutputStream out, int leftWidth, int rightWidth,
+                           String spacer) {
+        this(new OutputStreamWriter(out), leftWidth, rightWidth, spacer);
+    }
+
+    /**
+     * Gets the writer to use to write to the left column.
+     *
+     * @return {@code non-null;} the left column writer
+     */
+    public Writer getLeft() {
+        return leftColumn;
+    }
+
+    /**
+     * Gets the writer to use to write to the right column.
+     *
+     * @return {@code non-null;} the right column writer
+     */
+    public Writer getRight() {
+        return rightColumn;
+    }
+
+    /**
+     * Flushes the output. If there are more lines of pending output in one
+     * column, then the other column will get filled with blank lines.
+     */
+    public void flush() {
+        try {
+            appendNewlineIfNecessary(leftBuf, leftColumn);
+            appendNewlineIfNecessary(rightBuf, rightColumn);
+            outputFullLines();
+            flushLeft();
+            flushRight();
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    /**
+     * Outputs to the final destination as many full line pairs as
+     * there are in the pending output, removing those lines from
+     * their respective buffers. This method terminates when at
+     * least one of the two column buffers is empty.
+     */
+    private void outputFullLines() throws IOException {
+        for (;;) {
+            int leftLen = leftBuf.indexOf("\n");
+            if (leftLen < 0) {
+                return;
+            }
+
+            int rightLen = rightBuf.indexOf("\n");
+            if (rightLen < 0) {
+                return;
+            }
+
+            if (leftLen != 0) {
+                out.write(leftBuf.substring(0, leftLen));
+            }
+
+            if (rightLen != 0) {
+                writeSpaces(out, leftWidth - leftLen);
+                out.write(rightBuf.substring(0, rightLen));
+            }
+
+            out.write('\n');
+
+            leftBuf.delete(0, leftLen + 1);
+            rightBuf.delete(0, rightLen + 1);
+        }
+    }
+
+    /**
+     * Flushes the left column buffer, printing it and clearing the buffer.
+     * If the buffer is already empty, this does nothing.
+     */
+    private void flushLeft() throws IOException {
+        appendNewlineIfNecessary(leftBuf, leftColumn);
+
+        while (leftBuf.length() != 0) {
+            rightColumn.write('\n');
+            outputFullLines();
+        }
+    }
+
+    /**
+     * Flushes the right column buffer, printing it and clearing the buffer.
+     * If the buffer is already empty, this does nothing.
+     */
+    private void flushRight() throws IOException {
+        appendNewlineIfNecessary(rightBuf, rightColumn);
+
+        while (rightBuf.length() != 0) {
+            leftColumn.write('\n');
+            outputFullLines();
+        }
+    }
+
+    /**
+     * Appends a newline to the given buffer via the given writer, but
+     * only if it isn't empty and doesn't already end with one.
+     *
+     * @param buf {@code non-null;} the buffer in question
+     * @param out {@code non-null;} the writer to use
+     */
+    private static void appendNewlineIfNecessary(StringBuffer buf,
+                                                 Writer out)
+            throws IOException {
+        int len = buf.length();
+
+        if ((len != 0) && (buf.charAt(len - 1) != '\n')) {
+            out.write('\n');
+        }
+    }
+
+    /**
+     * Writes the given number of spaces to the given writer.
+     *
+     * @param out {@code non-null;} where to write
+     * @param amt {@code >= 0;} the number of spaces to write
+     */
+    private static void writeSpaces(Writer out, int amt) throws IOException {
+        while (amt > 0) {
+            out.write(' ');
+            amt--;
+        }
+    }
+}
diff --git a/dx/src/com/android/dx/util/Warning.java b/dx/src/com/android/dx/util/Warning.java
new file mode 100644
index 0000000..3c23c7c
--- /dev/null
+++ b/dx/src/com/android/dx/util/Warning.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+/**
+ * Exception which is meant to indicate a non-fatal warning.
+ */
+public class Warning extends RuntimeException {
+    /**
+     * Constructs an instance.
+     *
+     * @param message human-oriented message
+     */
+    public Warning(String message) {
+        super(message);
+    }
+}
diff --git a/dx/src/com/android/dx/util/Writers.java b/dx/src/com/android/dx/util/Writers.java
new file mode 100644
index 0000000..eba845c
--- /dev/null
+++ b/dx/src/com/android/dx/util/Writers.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import java.io.PrintWriter;
+import java.io.Writer;
+
+/**
+ * Utilities for dealing with {@code Writer}s.
+ */
+public final class Writers {
+    /**
+     * This class is uninstantiable.
+     */
+    private Writers() {
+        // This space intentionally left blank.
+    }
+
+    /**
+     * Makes a {@code PrintWriter} for the given {@code Writer},
+     * returning the given writer if it already happens to be the right
+     * class.
+     *
+     * @param writer {@code non-null;} writer to (possibly) wrap
+     * @return {@code non-null;} an appropriate instance
+     */
+    public static PrintWriter printWriterFor(Writer writer) {
+        if (writer instanceof PrintWriter) {
+            return (PrintWriter) writer;
+        }
+
+        return new PrintWriter(writer);
+    }
+}
diff --git a/dx/src/com/android/dx/util/package.html b/dx/src/com/android/dx/util/package.html
new file mode 100644
index 0000000..8e81e94
--- /dev/null
+++ b/dx/src/com/android/dx/util/package.html
@@ -0,0 +1,3 @@
+<body>
+<p>Utility classes for class file access/manipulation.</p>
+</body>
diff --git a/dx/src/com/android/multidex/ArchivePathElement.java b/dx/src/com/android/multidex/ArchivePathElement.java
new file mode 100644
index 0000000..05788d1
--- /dev/null
+++ b/dx/src/com/android/multidex/ArchivePathElement.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.multidex;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+/**
+ * A zip element.
+ */
+class ArchivePathElement implements ClassPathElement {
+
+    static class DirectoryEntryException extends IOException {
+    }
+
+    private final ZipFile archive;
+
+    public ArchivePathElement(ZipFile archive) {
+        this.archive = archive;
+    }
+
+    @Override
+    public InputStream open(String path) throws IOException {
+        ZipEntry entry = archive.getEntry(path);
+        if (entry == null) {
+            throw new FileNotFoundException("File \"" + path + "\" not found");
+        } else if (entry.isDirectory()) {
+            throw new DirectoryEntryException();
+        } else {
+            return archive.getInputStream(entry);
+        }
+    }
+
+    @Override
+    public void close() throws IOException {
+        archive.close();
+    }
+
+    @Override
+    public Iterable<String> list() {
+        return new Iterable<String>() {
+
+            @Override
+            public Iterator<String> iterator() {
+                return new Iterator<String>() {
+                    Enumeration<? extends ZipEntry> delegate = archive.entries();
+                    ZipEntry next = null;
+
+                    @Override
+                    public boolean hasNext() {
+                        while (next == null && delegate.hasMoreElements()) {
+                            next = delegate.nextElement();
+                            if (next.isDirectory()) {
+                                next = null;
+                            }
+                        }
+                        return next != null;
+                    }
+
+                    @Override
+                    public String next() {
+                        if (hasNext()) {
+                            String name = next.getName();
+                            next = null;
+                            return name;
+                        } else {
+                            throw new NoSuchElementException();
+                        }
+                    }
+
+                    @Override
+                    public void remove() {
+                        throw new UnsupportedOperationException();
+                    }
+                };
+            }
+        };
+    }
+
+}
diff --git a/dx/src/com/android/multidex/ClassPathElement.java b/dx/src/com/android/multidex/ClassPathElement.java
new file mode 100644
index 0000000..aee81cd
--- /dev/null
+++ b/dx/src/com/android/multidex/ClassPathElement.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.multidex;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * An element of the class path in which class files can be found.
+ */
+interface ClassPathElement {
+
+    char SEPARATOR_CHAR = '/';
+
+    /**
+     * Open a "file" from this {@code ClassPathElement}.
+     * @param path a '/' separated relative path to the wanted file.
+     * @return an {@code InputStream} ready to read the requested file.
+     * @throws IOException if the path can not be found or if an error occurred while opening it.
+     */
+    InputStream open(String path) throws IOException;
+
+    void close() throws IOException;
+
+    Iterable<String> list();
+
+}
diff --git a/dx/src/com/android/multidex/ClassReferenceListBuilder.java b/dx/src/com/android/multidex/ClassReferenceListBuilder.java
new file mode 100644
index 0000000..6f2fe38
--- /dev/null
+++ b/dx/src/com/android/multidex/ClassReferenceListBuilder.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.multidex;
+
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.iface.FieldList;
+import com.android.dx.cf.iface.MethodList;
+import com.android.dx.rop.cst.Constant;
+import com.android.dx.rop.cst.CstBaseMethodRef;
+import com.android.dx.rop.cst.CstFieldRef;
+import com.android.dx.rop.cst.CstType;
+import com.android.dx.rop.type.Prototype;
+import com.android.dx.rop.type.StdTypeList;
+import com.android.dx.rop.type.TypeList;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+/**
+ * Tool to find direct class references to other classes.
+ */
+public class ClassReferenceListBuilder {
+    private static final String CLASS_EXTENSION = ".class";
+
+    private final Path path;
+    private final Set<String> classNames = new HashSet<String>();
+
+    public ClassReferenceListBuilder(Path path) {
+        this.path = path;
+    }
+
+    /**
+     * Kept for compatibility with the gradle integration, this method just forwards to
+     * {@link MainDexListBuilder#main(String[])}.
+     * @deprecated use {@link MainDexListBuilder#main(String[])} instead.
+     */
+    @Deprecated
+    public static void main(String[] args) {
+        MainDexListBuilder.main(args);
+    }
+
+    /**
+     * @param jarOfRoots Archive containing the class files resulting of the tracing, typically
+     * this is the result of running ProGuard.
+     */
+    public void addRoots(ZipFile jarOfRoots) throws IOException {
+
+        // keep roots
+        for (Enumeration<? extends ZipEntry> entries = jarOfRoots.entries();
+                entries.hasMoreElements();) {
+            ZipEntry entry = entries.nextElement();
+            String name = entry.getName();
+            if (name.endsWith(CLASS_EXTENSION)) {
+                classNames.add(name.substring(0, name.length() - CLASS_EXTENSION.length()));
+            }
+        }
+
+        // keep direct references of roots (+ direct references hierarchy)
+        for (Enumeration<? extends ZipEntry> entries = jarOfRoots.entries();
+                entries.hasMoreElements();) {
+            ZipEntry entry = entries.nextElement();
+            String name = entry.getName();
+            if (name.endsWith(CLASS_EXTENSION)) {
+                DirectClassFile classFile;
+                try {
+                    classFile = path.getClass(name);
+                } catch (FileNotFoundException e) {
+                    throw new IOException("Class " + name +
+                            " is missing form original class path " + path, e);
+                }
+                addDependencies(classFile);
+            }
+        }
+    }
+
+    Set<String> getClassNames() {
+        return classNames;
+    }
+
+    private void addDependencies(DirectClassFile classFile) {
+        for (Constant constant : classFile.getConstantPool().getEntries()) {
+            if (constant instanceof CstType) {
+                checkDescriptor(((CstType) constant).getClassType().getDescriptor());
+            } else if (constant instanceof CstFieldRef) {
+                checkDescriptor(((CstFieldRef) constant).getType().getDescriptor());
+            } else if (constant instanceof CstBaseMethodRef) {
+                checkPrototype(((CstBaseMethodRef) constant).getPrototype());
+            }
+        }
+
+        FieldList fields = classFile.getFields();
+        int nbField = fields.size();
+        for (int i = 0; i < nbField; i++) {
+          checkDescriptor(fields.get(i).getDescriptor().getString());
+        }
+
+        MethodList methods = classFile.getMethods();
+        int nbMethods = methods.size();
+        for (int i = 0; i < nbMethods; i++) {
+          checkPrototype(Prototype.intern(methods.get(i).getDescriptor().getString()));
+        }
+    }
+
+    private void checkPrototype(Prototype proto) {
+      checkDescriptor(proto.getReturnType().getDescriptor());
+      StdTypeList args = proto.getParameterTypes();
+      for (int i = 0; i < args.size(); i++) {
+          checkDescriptor(args.get(i).getDescriptor());
+      }
+    }
+
+    private void checkDescriptor(String typeDescriptor) {
+        if (typeDescriptor.endsWith(";")) {
+            int lastBrace = typeDescriptor.lastIndexOf('[');
+            if (lastBrace < 0) {
+                addClassWithHierachy(typeDescriptor.substring(1, typeDescriptor.length()-1));
+            } else {
+                assert typeDescriptor.length() > lastBrace + 3
+                && typeDescriptor.charAt(lastBrace + 1) == 'L';
+                addClassWithHierachy(typeDescriptor.substring(lastBrace + 2,
+                        typeDescriptor.length() - 1));
+            }
+        }
+    }
+
+    private void addClassWithHierachy(String classBinaryName) {
+        if (classNames.contains(classBinaryName)) {
+            return;
+        }
+
+        try {
+            DirectClassFile classFile = path.getClass(classBinaryName + CLASS_EXTENSION);
+            classNames.add(classBinaryName);
+            CstType superClass = classFile.getSuperclass();
+            if (superClass != null) {
+                addClassWithHierachy(superClass.getClassType().getClassName());
+            }
+
+            TypeList interfaceList = classFile.getInterfaces();
+            int interfaceNumber = interfaceList.size();
+            for (int i = 0; i < interfaceNumber; i++) {
+                addClassWithHierachy(interfaceList.getType(i).getClassName());
+            }
+        } catch (FileNotFoundException e) {
+            // Ignore: The referenced type is not in the path it must be part of the libraries.
+        }
+    }
+
+}
diff --git a/dx/src/com/android/multidex/FolderPathElement.java b/dx/src/com/android/multidex/FolderPathElement.java
new file mode 100644
index 0000000..254c509
--- /dev/null
+++ b/dx/src/com/android/multidex/FolderPathElement.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.multidex;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+/**
+ * A folder element.
+ */
+class FolderPathElement implements ClassPathElement {
+
+    private final File baseFolder;
+
+    public FolderPathElement(File baseFolder) {
+        this.baseFolder = baseFolder;
+    }
+
+    @Override
+    public InputStream open(String path) throws FileNotFoundException {
+        return new FileInputStream(new File(baseFolder,
+                path.replace(SEPARATOR_CHAR, File.separatorChar)));
+    }
+
+    @Override
+    public void close() {
+    }
+
+    @Override
+    public Iterable<String> list() {
+        ArrayList<String> result = new ArrayList<String>();
+        collect(baseFolder, "", result);
+        return result;
+    }
+
+    private void collect(File folder, String prefix, ArrayList<String> result) {
+        for (File file : folder.listFiles()) {
+            if (file.isDirectory()) {
+                collect(file, prefix + SEPARATOR_CHAR + file.getName(), result);
+            } else {
+                result.add(prefix + SEPARATOR_CHAR + file.getName());
+            }
+        }
+    }
+
+}
diff --git a/dx/src/com/android/multidex/MainDexListBuilder.java b/dx/src/com/android/multidex/MainDexListBuilder.java
new file mode 100644
index 0000000..e0cd34c
--- /dev/null
+++ b/dx/src/com/android/multidex/MainDexListBuilder.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.multidex;
+
+import com.android.dx.cf.attrib.AttRuntimeVisibleAnnotations;
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.iface.Attribute;
+import com.android.dx.cf.iface.FieldList;
+import com.android.dx.cf.iface.HasAttribute;
+import com.android.dx.cf.iface.MethodList;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.zip.ZipFile;
+
+/**
+ * This is a command line tool used by mainDexClasses script to build a main dex classes list. First
+ * argument of the command line is an archive, each class file contained in this archive is used to
+ * identify a class that can be used during secondary dex installation, those class files
+ * are not opened by this tool only their names matter. Other arguments must be zip files or
+ * directories, they constitute in a classpath in with the classes named by the first argument
+ * will be searched. Each searched class must be found. On each of this classes are searched for
+ * their dependencies to other classes. The tool also browses for classes annotated by runtime
+ * visible annotations and adds them to the list/ Finally the tools prints on standard output a list
+ * of class files names suitable as content of the file argument --main-dex-list of dx.
+ */
+public class MainDexListBuilder {
+    private static final String CLASS_EXTENSION = ".class";
+
+    private static final int STATUS_ERROR = 1;
+
+    private static final String EOL = System.getProperty("line.separator");
+
+    private static final String USAGE_MESSAGE =
+            "Usage:" + EOL + EOL +
+            "Short version: Don't use this." + EOL + EOL +
+            "Slightly longer version: This tool is used by mainDexClasses script to build" + EOL +
+            "the main dex list." + EOL;
+
+    /**
+     * By default we force all classes annotated with runtime annotation to be kept in the
+     * main dex list. This option disable the workaround, limiting the index pressure in the main
+     * dex but exposing to the Dalvik resolution bug. The resolution bug occurs when accessing
+     * annotations of a class that is not in the main dex and one of the annotations as an enum
+     * parameter.
+     *
+     * @see <a href="https://code.google.com/p/android/issues/detail?id=78144">bug discussion</a>
+     *
+     */
+    private static final String DISABLE_ANNOTATION_RESOLUTION_WORKAROUND =
+            "--disable-annotation-resolution-workaround";
+
+    private Set<String> filesToKeep = new HashSet<String>();
+
+    public static void main(String[] args) {
+
+        int argIndex = 0;
+        boolean keepAnnotated = true;
+        while (argIndex < args.length -2) {
+            if (args[argIndex].equals(DISABLE_ANNOTATION_RESOLUTION_WORKAROUND)) {
+                keepAnnotated = false;
+            } else {
+                System.err.println("Invalid option " + args[argIndex]);
+                printUsage();
+                System.exit(STATUS_ERROR);
+            }
+            argIndex++;
+        }
+        if (args.length - argIndex != 2) {
+            printUsage();
+            System.exit(STATUS_ERROR);
+        }
+
+        try {
+            MainDexListBuilder builder = new MainDexListBuilder(keepAnnotated, args[argIndex],
+                    args[argIndex + 1]);
+            Set<String> toKeep = builder.getMainDexList();
+            printList(toKeep);
+        } catch (IOException e) {
+            System.err.println("A fatal error occured: " + e.getMessage());
+            System.exit(STATUS_ERROR);
+            return;
+        }
+    }
+
+    public MainDexListBuilder(boolean keepAnnotated, String rootJar, String pathString)
+            throws IOException {
+        ZipFile jarOfRoots = null;
+        Path path = null;
+        try {
+            try {
+                jarOfRoots = new ZipFile(rootJar);
+            } catch (IOException e) {
+                throw new IOException("\"" + rootJar + "\" can not be read as a zip archive. ("
+                        + e.getMessage() + ")", e);
+            }
+            path = new Path(pathString);
+
+            ClassReferenceListBuilder mainListBuilder = new ClassReferenceListBuilder(path);
+            mainListBuilder.addRoots(jarOfRoots);
+            for (String className : mainListBuilder.getClassNames()) {
+                filesToKeep.add(className + CLASS_EXTENSION);
+            }
+            if (keepAnnotated) {
+                keepAnnotated(path);
+            }
+        } finally {
+            try {
+                jarOfRoots.close();
+            } catch (IOException e) {
+                // ignore
+            }
+            if (path != null) {
+                for (ClassPathElement element : path.elements) {
+                    try {
+                        element.close();
+                    } catch (IOException e) {
+                        // keep going, lets do our best.
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns a list of classes to keep. This can be passed to dx as a file with --main-dex-list.
+     */
+    public Set<String> getMainDexList() {
+        return filesToKeep;
+    }
+
+    private static void printUsage() {
+        System.err.print(USAGE_MESSAGE);
+    }
+
+    private static void printList(Set<String> fileNames) {
+        for (String fileName : fileNames) {
+            System.out.println(fileName);
+        }
+    }
+
+    /**
+     * Keep classes annotated with runtime annotations.
+     */
+    private void keepAnnotated(Path path) throws FileNotFoundException {
+        for (ClassPathElement element : path.getElements()) {
+            forClazz:
+                for (String name : element.list()) {
+                    if (name.endsWith(CLASS_EXTENSION)) {
+                        DirectClassFile clazz = path.getClass(name);
+                        if (hasRuntimeVisibleAnnotation(clazz)) {
+                            filesToKeep.add(name);
+                        } else {
+                            MethodList methods = clazz.getMethods();
+                            for (int i = 0; i<methods.size(); i++) {
+                                if (hasRuntimeVisibleAnnotation(methods.get(i))) {
+                                    filesToKeep.add(name);
+                                    continue forClazz;
+                                }
+                            }
+                            FieldList fields = clazz.getFields();
+                            for (int i = 0; i<fields.size(); i++) {
+                                if (hasRuntimeVisibleAnnotation(fields.get(i))) {
+                                    filesToKeep.add(name);
+                                    continue forClazz;
+                                }
+                            }
+                        }
+                    }
+                }
+        }
+    }
+
+    private boolean hasRuntimeVisibleAnnotation(HasAttribute element) {
+        Attribute att = element.getAttributes().findFirst(
+                AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME);
+        return (att != null && ((AttRuntimeVisibleAnnotations)att).getAnnotations().size()>0);
+    }
+}
diff --git a/dx/src/com/android/multidex/Path.java b/dx/src/com/android/multidex/Path.java
new file mode 100644
index 0000000..adac5a0
--- /dev/null
+++ b/dx/src/com/android/multidex/Path.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.multidex;
+
+import com.android.dx.cf.direct.DirectClassFile;
+import com.android.dx.cf.direct.StdAttributeFactory;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+class Path {
+
+    static ClassPathElement getClassPathElement(File file)
+            throws ZipException, IOException {
+        if (file.isDirectory()) {
+            return new FolderPathElement(file);
+        } else if (file.isFile()) {
+            return new ArchivePathElement(new ZipFile(file));
+        } else if (file.exists()) {
+            throw new IOException("\"" + file.getPath() +
+                    "\" is not a directory neither a zip file");
+        } else {
+            throw new FileNotFoundException("File \"" + file.getPath() + "\" not found");
+        }
+    }
+
+    List<ClassPathElement> elements = new ArrayList<ClassPathElement>();
+    private final String definition;
+    private final ByteArrayOutputStream baos = new ByteArrayOutputStream(40 * 1024);
+    private final byte[] readBuffer = new byte[20 * 1024];
+
+    Path(String definition) throws IOException {
+        this.definition = definition;
+        for (String filePath : definition.split(Pattern.quote(File.pathSeparator))) {
+            try {
+                addElement(getClassPathElement(new File(filePath)));
+            } catch (IOException e) {
+                throw new IOException("Wrong classpath: " + e.getMessage(), e);
+            }
+        }
+    }
+
+    private static byte[] readStream(InputStream in, ByteArrayOutputStream baos, byte[] readBuffer)
+            throws IOException {
+        try {
+            for (;;) {
+                int amt = in.read(readBuffer);
+                if (amt < 0) {
+                    break;
+                }
+
+                baos.write(readBuffer, 0, amt);
+            }
+        } finally {
+            in.close();
+        }
+        return baos.toByteArray();
+    }
+
+    @Override
+    public String toString() {
+        return definition;
+    }
+
+    Iterable<ClassPathElement> getElements() {
+      return elements;
+    }
+
+    private void addElement(ClassPathElement element) {
+        assert element != null;
+        elements.add(element);
+    }
+
+    synchronized DirectClassFile getClass(String path) throws FileNotFoundException {
+        DirectClassFile classFile = null;
+        for (ClassPathElement element : elements) {
+            try {
+                InputStream in = element.open(path);
+                try {
+                    byte[] bytes = readStream(in, baos, readBuffer);
+                    baos.reset();
+                    classFile = new DirectClassFile(bytes, path, false);
+                    classFile.setAttributeFactory(StdAttributeFactory.THE_ONE);
+                    break;
+                } finally {
+                    in.close();
+                }
+            } catch (IOException e) {
+                // search next element
+            }
+        }
+        if (classFile == null) {
+            throw new FileNotFoundException("File \"" + path + "\" not found");
+        }
+        return classFile;
+    }
+}
diff --git a/dx/tests/001-nop/expected.txt b/dx/tests/001-nop/expected.txt
new file mode 100644
index 0000000..d4a85ce
--- /dev/null
+++ b/dx/tests/001-nop/expected.txt
@@ -0,0 +1 @@
+I am a jelly donut.
diff --git a/dx/tests/001-nop/info.txt b/dx/tests/001-nop/info.txt
new file mode 100644
index 0000000..9942f10
--- /dev/null
+++ b/dx/tests/001-nop/info.txt
@@ -0,0 +1,2 @@
+This is a sample no-op test, which does at least serve to verify that the
+test harness is working.
diff --git a/dx/tests/001-nop/run b/dx/tests/001-nop/run
new file mode 100644
index 0000000..51637c1
--- /dev/null
+++ b/dx/tests/001-nop/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+echo 'I am a jelly donut.'
diff --git a/dx/tests/002-minimal-valid/expected.txt b/dx/tests/002-minimal-valid/expected.txt
new file mode 100644
index 0000000..3877fb5
--- /dev/null
+++ b/dx/tests/002-minimal-valid/expected.txt
@@ -0,0 +1,46 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 000a
+
+constant_pool:
+  0001: method{java.lang.Object.<init>:()V}
+  0002: type{Small}
+  0003: type{java.lang.Object}
+  0004: utf8{"<init>"}
+  0005: utf8{"()V"}
+  0006: utf8{"Code"}
+  0007: nat{<init>:()V}
+  0008: utf8{"Small"}
+  0009: utf8{"java/lang/Object"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public
+  name: <init>
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Code
+    length: 00000011
+    max_stack: 0001
+    max_locals: 0001
+    code_length: 00000005
+    0000: aload_0 // 00
+    0001: invokespecial method{java.lang.Object.<init>:()V}
+    0004: return
+    exception_table_length: 0000
+    attributes_count: 0000
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/002-minimal-valid/info.txt b/dx/tests/002-minimal-valid/info.txt
new file mode 100644
index 0000000..f296af8
--- /dev/null
+++ b/dx/tests/002-minimal-valid/info.txt
@@ -0,0 +1 @@
+This is just a dump of a simple but valid class.
diff --git a/dx/tests/002-minimal-valid/run b/dx/tests/002-minimal-valid/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/002-minimal-valid/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/002-minimal-valid/small-class.txt b/dx/tests/002-minimal-valid/small-class.txt
new file mode 100644
index 0000000..25a323f
--- /dev/null
+++ b/dx/tests/002-minimal-valid/small-class.txt
@@ -0,0 +1,49 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+000a       # constant_pool_count
+
+#
+# constant_pool
+#
+0a 0003 0007               # 0001: method[0003, 0007]
+07 0008                    # 0002: class[0008]
+07 0009                    # 0003: class[0009]
+01 0006 "<init>"           # 0004: utf8["<init>"]
+01 0003 "()V"              # 0005: utf8["()V"]
+01 0004 "Code"             # 0006: utf8["Code"]
+0c 0004 0005               # 0007: nat[0004, 0005]
+01 0005 "Small"            # 0008: utf8["Small"]
+01 0010 "java/lang/Object" # 0009: utf8["java/lang/Object"]
+
+0021  # access_flags
+0002  # this_class
+0003  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+#
+# methods[0]
+#
+0001  # access_flags
+0004  # name
+0005  # descriptor
+0001  # attributes_count
+# attributes[0]
+0006       # name
+0000 0011  # length
+0001       # max_stack
+0001       # max_locals
+0000 0005  # code_length
+2a         # 0000: aload_0
+b7 0001    # 0001: invokespecial method[java/lang/Object.<init>:()V]
+b1         # 0004: return
+0000       # exception_table_length
+0000       # attributes_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-bad-magic.txt b/dx/tests/003-magic-version-access/class-bad-magic.txt
new file mode 100644
index 0000000..f3c64bd
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-bad-magic.txt
@@ -0,0 +1,25 @@
+#
+# classfile with a bad magic value
+#
+
+dead babe  # magic
+0000       # minor_version
+0031       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-44.0.txt b/dx/tests/003-magic-version-access/class-version-44.0.txt
new file mode 100644
index 0000000..2d9055c
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-44.0.txt
@@ -0,0 +1,25 @@
+#
+# classfile with an out-of-range version.
+#
+
+cafe babe  # magic
+0000       # minor_version
+002c       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-44.65535.txt b/dx/tests/003-magic-version-access/class-version-44.65535.txt
new file mode 100644
index 0000000..0f2b582
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-44.65535.txt
@@ -0,0 +1,25 @@
+#
+# classfile with an out-of-range version.
+#
+
+cafe babe  # magic
+ffff       # minor_version
+002c       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-45.0.txt b/dx/tests/003-magic-version-access/class-version-45.0.txt
new file mode 100644
index 0000000..335079d
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-45.0.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the lowest valid version, 45.0 (0x2d.0x00)
+#
+
+cafe babe  # magic
+0000       # minor_version
+002d       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-45.65535.txt b/dx/tests/003-magic-version-access/class-version-45.65535.txt
new file mode 100644
index 0000000..2b31404
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-45.65535.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 45.65535 (0x2d.0xffff)
+#
+
+cafe babe  # magic
+ffff       # minor_version
+002d       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-48.0.txt b/dx/tests/003-magic-version-access/class-version-48.0.txt
new file mode 100644
index 0000000..551b221
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-48.0.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 48.0 (0x30.0x00)
+#
+
+cafe babe  # magic
+0000       # minor_version
+0030       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-48.65535.txt b/dx/tests/003-magic-version-access/class-version-48.65535.txt
new file mode 100644
index 0000000..ac95b52
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-48.65535.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 48.65535 (0x30.0xffff)
+#
+
+cafe babe  # magic
+ffff       # minor_version
+0030       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-49.0.txt b/dx/tests/003-magic-version-access/class-version-49.0.txt
new file mode 100644
index 0000000..9b9a27f
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-49.0.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 49.0 (0x31.0x00)
+#
+
+cafe babe  # magic
+0000       # minor_version
+0031       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-49.1.txt b/dx/tests/003-magic-version-access/class-version-49.1.txt
new file mode 100644
index 0000000..69c0ab1
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-49.1.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 49.1 (0x31.0x01)
+#
+
+cafe babe  # magic
+0001       # minor_version
+0031       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-49.65535.txt b/dx/tests/003-magic-version-access/class-version-49.65535.txt
new file mode 100644
index 0000000..42970aa
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-49.65535.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 49.65535 (0x31.0xffff)
+#
+
+cafe babe  # magic
+ffff       # minor_version
+0031       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-50.0.txt b/dx/tests/003-magic-version-access/class-version-50.0.txt
new file mode 100644
index 0000000..dac631d
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-50.0.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 50.0 (0x30.0x00)
+#
+
+cafe babe  # magic
+0000       # minor_version
+0032       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-50.1.txt b/dx/tests/003-magic-version-access/class-version-50.1.txt
new file mode 100644
index 0000000..2b0d547
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-50.1.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 50.1 (0x32.0x01)
+#
+
+cafe babe  # magic
+0001       # minor_version
+0032       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-50.65535.txt b/dx/tests/003-magic-version-access/class-version-50.65535.txt
new file mode 100644
index 0000000..b74f326
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-50.65535.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 50.65535 (0x32.0xffff)
+#
+
+cafe babe  # magic
+ffff       # minor_version
+0032       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-51.0.txt b/dx/tests/003-magic-version-access/class-version-51.0.txt
new file mode 100644
index 0000000..e2611b2
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-51.0.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 51.0 (0x33.0x00)
+#
+
+cafe babe  # magic
+0000       # minor_version
+0033       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-51.1.txt b/dx/tests/003-magic-version-access/class-version-51.1.txt
new file mode 100644
index 0000000..7048aaa
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-51.1.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 51.1 (0x33.0x01)
+#
+
+cafe babe  # magic
+0001       # minor_version
+0033       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-51.65535.txt b/dx/tests/003-magic-version-access/class-version-51.65535.txt
new file mode 100644
index 0000000..2955e57
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-51.65535.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 51.65535 (0x33.0xffff)
+#
+
+cafe babe  # magic
+ffff       # minor_version
+0033       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-52.0.txt b/dx/tests/003-magic-version-access/class-version-52.0.txt
new file mode 100644
index 0000000..4860ec9
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-52.0.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 52.0 (0x34.0x00)
+#
+
+cafe babe  # magic
+0000       # minor_version
+0034       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-52.1.txt b/dx/tests/003-magic-version-access/class-version-52.1.txt
new file mode 100644
index 0000000..b567be0
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-52.1.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 52.1 (0x34.0x01)
+#
+
+cafe babe  # magic
+0001       # minor_version
+0034       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-52.65535.txt b/dx/tests/003-magic-version-access/class-version-52.65535.txt
new file mode 100644
index 0000000..02f8f65
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-52.65535.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 52.65535 (0x34.0xffff)
+#
+
+cafe babe  # magic
+ffff       # minor_version
+0034       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-53.0.txt b/dx/tests/003-magic-version-access/class-version-53.0.txt
new file mode 100644
index 0000000..e6ada88
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-53.0.txt
@@ -0,0 +1,25 @@
+#
+# classfile with the valid version 53.0 (0x35.0x00)
+#
+
+cafe babe  # magic
+0000       # minor_version
+0035       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-53.1.txt b/dx/tests/003-magic-version-access/class-version-53.1.txt
new file mode 100644
index 0000000..40e28e3
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-53.1.txt
@@ -0,0 +1,26 @@
+#
+# classfile with an invalid version, with a higher minor version
+# than the highest valid version. 53.1 (0x35.0x01)
+#
+
+cafe babe  # magic
+0001       # minor_version
+0035       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-53.65535.txt b/dx/tests/003-magic-version-access/class-version-53.65535.txt
new file mode 100644
index 0000000..397a00b
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-53.65535.txt
@@ -0,0 +1,26 @@
+#
+# classfile with an invalid version, with the same major version
+# as the highest valid version.  53.65535 (0x35.0xffff)
+#
+
+cafe babe  # magic
+ffff       # minor_version
+0035       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/class-version-54.0.txt b/dx/tests/003-magic-version-access/class-version-54.0.txt
new file mode 100644
index 0000000..36afc74
--- /dev/null
+++ b/dx/tests/003-magic-version-access/class-version-54.0.txt
@@ -0,0 +1,26 @@
+#
+# classfile with an invalid version, with a higher major version
+# than the highest valid version. 54.0 (0x36.0x00)
+#
+
+cafe babe  # magic
+0000       # minor_version
+0036       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/003-magic-version-access/expected.txt b/dx/tests/003-magic-version-access/expected.txt
new file mode 100644
index 0000000..f52e34b
--- /dev/null
+++ b/dx/tests/003-magic-version-access/expected.txt
@@ -0,0 +1,411 @@
+reading class-bad-magic.txt...
+begin classfile
+magic: deadbabe
+minor_version: 0000
+major_version: 0031
+
+trouble parsing:
+bad class file magic (deadbabe)
+...while parsing class-bad-magic.txt
+reading class-version-44.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002c
+
+trouble parsing:
+unsupported class file version 44.0
+...while parsing class-version-44.0.txt
+reading class-version-44.65535.txt...
+begin classfile
+magic: cafebabe
+minor_version: ffff
+major_version: 002c
+
+trouble parsing:
+unsupported class file version 44.65535
+...while parsing class-version-44.65535.txt
+reading class-version-45.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002d
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-45.65535.txt...
+begin classfile
+magic: cafebabe
+minor_version: ffff
+major_version: 002d
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-48.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 0030
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-48.65535.txt...
+begin classfile
+magic: cafebabe
+minor_version: ffff
+major_version: 0030
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-49.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 0031
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-49.1.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0001
+major_version: 0031
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-49.65535.txt...
+begin classfile
+magic: cafebabe
+minor_version: ffff
+major_version: 0031
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-50.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 0032
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-50.1.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0001
+major_version: 0032
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-50.65535.txt...
+begin classfile
+magic: cafebabe
+minor_version: ffff
+major_version: 0032
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-51.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 0033
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-51.65535.txt...
+begin classfile
+magic: cafebabe
+minor_version: ffff
+major_version: 0033
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-52.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 0034
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-52.1.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0001
+major_version: 0034
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-52.65535.txt...
+begin classfile
+magic: cafebabe
+minor_version: ffff
+major_version: 0034
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-53.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 0035
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
+reading class-version-53.1.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0001
+major_version: 0035
+
+trouble parsing:
+unsupported class file version 53.1
+...while parsing class-version-53.1.txt
+reading class-version-53.65535.txt...
+begin classfile
+magic: cafebabe
+minor_version: ffff
+major_version: 0035
+
+trouble parsing:
+unsupported class file version 53.65535
+...while parsing class-version-53.65535.txt
+reading class-version-54.0.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 0036
+
+trouble parsing:
+unsupported class file version 54.0
+...while parsing class-version-54.0.txt
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 0031
+constant_pool_count: 0005
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+end constant_pool
+access_flags: public|final|super|interface|abstract|synthetic|annotation|enum|89ce
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/003-magic-version-access/info.txt b/dx/tests/003-magic-version-access/info.txt
new file mode 100644
index 0000000..4d6a697
--- /dev/null
+++ b/dx/tests/003-magic-version-access/info.txt
@@ -0,0 +1,9 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bits of parsing tested here are:
+
+* magic number
+* major / minor version numbers
+* class access_flags
diff --git a/dx/tests/003-magic-version-access/run b/dx/tests/003-magic-version-access/run
new file mode 100644
index 0000000..ce0724b
--- /dev/null
+++ b/dx/tests/003-magic-version-access/run
@@ -0,0 +1,62 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# The tests that don't specify "--debug" are expected to
+# throw exceptions.  If --debug is on we'll get a stack
+# trace, which is unpredictable and doesn't work well with
+# expected.txt vs. out.txt comparisons.
+
+function check_rejected {
+  dx --dump --width=100 --strict $1
+}
+
+function check_accepted {
+  dx --debug --dump --width=100 $1
+}
+
+# Bad magic (throws an expection)
+check_rejected class-bad-magic.txt
+
+# Too small (throws an exception)
+check_rejected class-version-44.0.txt
+check_rejected class-version-44.65535.txt
+
+# Just right
+check_accepted class-version-45.0.txt
+check_accepted class-version-45.65535.txt
+check_accepted class-version-48.0.txt
+check_accepted class-version-48.65535.txt
+check_accepted class-version-49.0.txt
+check_accepted class-version-49.1.txt
+check_accepted class-version-49.65535.txt
+check_accepted class-version-50.0.txt
+check_accepted class-version-50.1.txt
+check_accepted class-version-50.65535.txt
+check_accepted class-version-51.0.txt
+check_accepted class-version-51.65535.txt
+check_accepted class-version-52.0.txt
+check_accepted class-version-52.1.txt
+check_accepted class-version-52.65535.txt
+check_accepted class-version-53.0.txt
+
+# Too big (throws an exception)
+check_rejected class-version-53.1.txt
+check_rejected class-version-53.65535.txt
+check_rejected class-version-54.0.txt
+
+# Show that we can dump the access flags even when they
+# don't make any sense.
+check_accepted small-class.txt
diff --git a/dx/tests/003-magic-version-access/small-class.txt b/dx/tests/003-magic-version-access/small-class.txt
new file mode 100644
index 0000000..3eb7402
--- /dev/null
+++ b/dx/tests/003-magic-version-access/small-class.txt
@@ -0,0 +1,25 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+0031       # major_version
+0005       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+
+ffff  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/004-cp-bottom-up/expected.txt b/dx/tests/004-cp-bottom-up/expected.txt
new file mode 100644
index 0000000..4edbed5
--- /dev/null
+++ b/dx/tests/004-cp-bottom-up/expected.txt
@@ -0,0 +1,34 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0014
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"blort"}
+  0006: utf8{"x/y/Zzz"}
+  0007: utf8{"()V"}
+  0008: nat{blort:x/y/Zzz}
+  0009: nat{blort:()V}
+  000a: field{Small.blort:x/y/Zzz}
+  000b: method{Small.blort:()V}
+  000c: ifaceMethod{Small.blort:()V}
+  000d: string{"Small"}
+  000e: int{0x12345678 / 305419896}
+  000f: float{0x42f6e666 / 123.45}
+  0010: long{0x123456789abcdef0 / 1311768467463790320}
+  0012: double{0x411958955f8a0903 / 415269.3433}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/004-cp-bottom-up/info.txt b/dx/tests/004-cp-bottom-up/info.txt
new file mode 100644
index 0000000..f78a626
--- /dev/null
+++ b/dx/tests/004-cp-bottom-up/info.txt
@@ -0,0 +1,8 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the constant pool contains
+at least one valid entry of each possible constant pool type, and that
+entries that are referred to by other entries always occur before the
+referring entries.
diff --git a/dx/tests/004-cp-bottom-up/run b/dx/tests/004-cp-bottom-up/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/004-cp-bottom-up/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/004-cp-bottom-up/small-class.txt b/dx/tests/004-cp-bottom-up/small-class.txt
new file mode 100644
index 0000000..8a68cbf
--- /dev/null
+++ b/dx/tests/004-cp-bottom-up/small-class.txt
@@ -0,0 +1,38 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0014       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 0005 "blort"            # 0005: utf8["blort"]
+01 0007 "x/y/Zzz"          # 0006: utf8["x/y/Zzz"]
+01 0003 "()V"              # 0007: utf8["()V"]
+0c 0005 0006               # 0008: nat[blort:x/y/Zzz]
+0c 0005 0007               # 0009: nat[blort:()V]
+09 0003 0008               # 000a: field[Small.blort:x/y/Zzz]
+0a 0003 0009               # 000b: method[Small.blort:()V]
+0b 0003 0009               # 000c: ifaceMethod[Small.blort:()V]
+08 0001                    # 000d: string["Small"]
+03 12345678                # 000e: integer[0x12345678]
+04 42f6e666                # 000f: float[123.45]
+05 12345678 9abcdef0       # 0010: long[0x1234567890abcdef0]
+06 41195895 5f8a0903       # 0012: double[415269.3433]
+
+0001  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/005-cp-top-down/expected.txt b/dx/tests/005-cp-top-down/expected.txt
new file mode 100644
index 0000000..791b9da
--- /dev/null
+++ b/dx/tests/005-cp-top-down/expected.txt
@@ -0,0 +1,34 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0014
+
+constant_pool:
+  0001: double{0x411958955f8a0903 / 415269.3433}
+  0003: long{0x123456789abcdef0 / 1311768467463790320}
+  0005: float{0x42f6e666 / 123.45}
+  0006: int{0x12345678 / 305419896}
+  0007: string{"Small"}
+  0008: ifaceMethod{Small.blort:()V}
+  0009: method{Small.blort:()V}
+  000a: field{Small.blort:x/y/Zzz}
+  000b: nat{blort:()V}
+  000c: nat{blort:x/y/Zzz}
+  000d: utf8{"()V"}
+  000e: utf8{"x/y/Zzz"}
+  000f: utf8{"blort"}
+  0010: type{java.lang.Object}
+  0011: type{Small}
+  0012: utf8{"java/lang/Object"}
+  0013: utf8{"Small"}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/005-cp-top-down/info.txt b/dx/tests/005-cp-top-down/info.txt
new file mode 100644
index 0000000..5842fb3
--- /dev/null
+++ b/dx/tests/005-cp-top-down/info.txt
@@ -0,0 +1,8 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the constant pool contains
+at least one valid entry of each possible constant pool type, and that
+entries that are referred to by other entries always occur after the
+referring entries.
diff --git a/dx/tests/005-cp-top-down/run b/dx/tests/005-cp-top-down/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/005-cp-top-down/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/005-cp-top-down/small-class.txt b/dx/tests/005-cp-top-down/small-class.txt
new file mode 100644
index 0000000..a681f65
--- /dev/null
+++ b/dx/tests/005-cp-top-down/small-class.txt
@@ -0,0 +1,38 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0014       # constant_pool_count
+
+#
+# constant_pool
+#
+06 41195895 5f8a0903       # 0001: double[415269.3433]
+05 12345678 9abcdef0       # 0003: long[0x1234567890abcdef0]
+04 42f6e666                # 0005: float[123.45]
+03 12345678                # 0006: integer[0x12345678]
+08 0013                    # 0007: string["Small"]
+0b 0011 000b               # 0008: ifaceMethod[Small.blort:()V]
+0a 0011 000b               # 0009: method[Small.blort:()V]
+09 0011 000c               # 000a: field[Small.blort:x/y/Zzz]
+0c 000f 000d               # 000b: nat[blort:()V]
+0c 000f 000e               # 000c: nat[blort:x/y/Zzz]
+01 0003 "()V"              # 000d: utf8["()V"]
+01 0007 "x/y/Zzz"          # 000e: utf8["x/y/Zzz"]
+01 0005 "blort"            # 000f: utf8["blort"]
+07 0012                    # 0010: class[java/lang/Object]
+07 0013                    # 0011: class[Small]
+01 0010 "java/lang/Object" # 0012: utf8["java/lang/Object"]
+01 0005 "Small"            # 0013: utf8["Small"]
+
+0001  # access_flags
+0011  # this_class
+0010  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/006-interfaces/expected.txt b/dx/tests/006-interfaces/expected.txt
new file mode 100644
index 0000000..09e066b
--- /dev/null
+++ b/dx/tests/006-interfaces/expected.txt
@@ -0,0 +1,31 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 000b
+
+constant_pool:
+  0001: utf8{"java/lang/Object"}
+  0002: utf8{"Small"}
+  0003: utf8{"Foo"}
+  0004: utf8{"Bar"}
+  0005: utf8{"Baz"}
+  0006: type{java.lang.Object}
+  0007: type{Small}
+  0008: type{Foo}
+  0009: type{Bar}
+  000a: type{Baz}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0003
+interfaces:
+  type{Foo}
+  type{Bar}
+  type{Baz}
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/006-interfaces/info.txt b/dx/tests/006-interfaces/info.txt
new file mode 100644
index 0000000..0959482
--- /dev/null
+++ b/dx/tests/006-interfaces/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a non-empty
+interfaces list.
diff --git a/dx/tests/006-interfaces/run b/dx/tests/006-interfaces/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/006-interfaces/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/006-interfaces/small-class.txt b/dx/tests/006-interfaces/small-class.txt
new file mode 100644
index 0000000..ea24923
--- /dev/null
+++ b/dx/tests/006-interfaces/small-class.txt
@@ -0,0 +1,33 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+000b       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0010 "java/lang/Object" # 0001: utf8["java/lang/Object"]
+01 0005 "Small"            # 0002: utf8["Small"]
+01 0003 "Foo"              # 0003: utf8["Foo"]
+01 0003 "Bar"              # 0004: utf8["Bar"]
+01 0003 "Baz"              # 0005: utf8["Baz"]
+07 0001                    # 0006: class[java/lang/Object]
+07 0002                    # 0007: class[Small]
+07 0003                    # 0008: class[Foo]
+07 0004                    # 0009: class[Bar]
+07 0005                    # 000a: class[Baz]
+
+0001  # access_flags
+0007  # this_class
+0006  # super_class
+0003  # interfaces_count
+0008 0009 000a  # interfaces
+
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/007-no-superclass/expected.txt b/dx/tests/007-no-superclass/expected.txt
new file mode 100644
index 0000000..d635c9a
--- /dev/null
+++ b/dx/tests/007-no-superclass/expected.txt
@@ -0,0 +1,19 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0003
+
+constant_pool:
+  0001: utf8{"java/lang/Object"}
+  0002: type{java.lang.Object}
+end constant_pool
+access_flags: public
+this_class: type{java.lang.Object}
+super_class: (none)
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/007-no-superclass/info.txt b/dx/tests/007-no-superclass/info.txt
new file mode 100644
index 0000000..5f941d0
--- /dev/null
+++ b/dx/tests/007-no-superclass/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class is Object-like and
+has no superclass.
diff --git a/dx/tests/007-no-superclass/run b/dx/tests/007-no-superclass/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/007-no-superclass/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/007-no-superclass/small-class.txt b/dx/tests/007-no-superclass/small-class.txt
new file mode 100644
index 0000000..6fd4408
--- /dev/null
+++ b/dx/tests/007-no-superclass/small-class.txt
@@ -0,0 +1,24 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0003       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0010 "java/lang/Object" # 0001: utf8["java/lang/Object"]
+07 0001                    # 0002: class[java/lang/Object]
+
+0001  # access_flags
+0002  # this_class
+0000  # super_class
+0000  # interfaces_count
+
+0000  # fields_count
+0000  # methods_count
+
+0000  # attributes_count
diff --git a/dx/tests/008-field/expected.txt b/dx/tests/008-field/expected.txt
new file mode 100644
index 0000000..9e3bcaf
--- /dev/null
+++ b/dx/tests/008-field/expected.txt
@@ -0,0 +1,30 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0007
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"foo"}
+  0006: utf8{"I"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0001
+
+fields[0]:
+  access_flags: public|private|protected|static|final|volatile|transient|synthetic|enum|af20
+  name: foo
+  descriptor: I
+  attributes_count: 0000
+end fields[0]
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/008-field/info.txt b/dx/tests/008-field/info.txt
new file mode 100644
index 0000000..0b8e92f
--- /dev/null
+++ b/dx/tests/008-field/info.txt
@@ -0,0 +1,7 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+simple field with no attributes and with every access flag turned on
+(so that the names can be verified in debugging output).
diff --git a/dx/tests/008-field/run b/dx/tests/008-field/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/008-field/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/008-field/small-class.txt b/dx/tests/008-field/small-class.txt
new file mode 100644
index 0000000..81eb164
--- /dev/null
+++ b/dx/tests/008-field/small-class.txt
@@ -0,0 +1,34 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0007       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 0003 "foo"              # 0005: utf8["foo"]
+01 0001 "I"                # 0006: utf8["I"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+
+0001  # fields_count
+
+# fields[0]
+ffff  # access_flags
+0005  # name
+0006  # descriptor
+0000  # attributes_count
+
+0000  # methods_count
+0000  # attributes_count
diff --git a/dx/tests/009-method/expected.txt b/dx/tests/009-method/expected.txt
new file mode 100644
index 0000000..3c0d6ad
--- /dev/null
+++ b/dx/tests/009-method/expected.txt
@@ -0,0 +1,30 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0007
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"foo"}
+  0006: utf8{"()V"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public|private|protected|static|final|synchronized|bridge|varargs|native|abstract|strictfp|synthetic|e200
+  name: foo
+  descriptor: ()V
+  attributes_count: 0000
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/009-method/info.txt b/dx/tests/009-method/info.txt
new file mode 100644
index 0000000..3df2f09
--- /dev/null
+++ b/dx/tests/009-method/info.txt
@@ -0,0 +1,7 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+simple method with no attributes and with every access flag turned on
+(so that the names can be verified in debugging output).
diff --git a/dx/tests/009-method/run b/dx/tests/009-method/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/009-method/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/009-method/small-class.txt b/dx/tests/009-method/small-class.txt
new file mode 100644
index 0000000..54fbc5f
--- /dev/null
+++ b/dx/tests/009-method/small-class.txt
@@ -0,0 +1,34 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0007       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 0003 "foo"              # 0005: utf8["foo"]
+01 0003 "()V"              # 0006: utf8["()V"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+
+0001  # methods_count
+
+# methods[0]
+ffff  # access_flags
+0005  # name
+0006  # descriptor
+0000  # attributes_count
+
+0000  # attributes_count
diff --git a/dx/tests/010-class-attrib-InnerClasses/expected.txt b/dx/tests/010-class-attrib-InnerClasses/expected.txt
new file mode 100644
index 0000000..f588190
--- /dev/null
+++ b/dx/tests/010-class-attrib-InnerClasses/expected.txt
@@ -0,0 +1,46 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0008
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"InnerClasses"}
+  0006: utf8{"Zorch"}
+  0007: type{Zorch}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0001
+
+attributes[0]:
+  name: InnerClasses
+  length: 00000022
+  number_of_classes: 0004
+  inner_class: type{Small}
+    outer_class: (none)
+    name: (none)
+    access_flags: public
+  inner_class: type{Small}
+    outer_class: (none)
+    name: string{"Small"}
+    access_flags: private
+  inner_class: type{Small}
+    outer_class: type{Zorch}
+    name: (none)
+    access_flags: protected
+  inner_class: type{Zorch}
+    outer_class: type{Small}
+    name: string{"Zorch"}
+    access_flags: public|private|protected|static|final|interface|abstract|synthetic|annotation|enum|89e0
+end attributes[0]
+end classfile
diff --git a/dx/tests/010-class-attrib-InnerClasses/info.txt b/dx/tests/010-class-attrib-InnerClasses/info.txt
new file mode 100644
index 0000000..305b035
--- /dev/null
+++ b/dx/tests/010-class-attrib-InnerClasses/info.txt
@@ -0,0 +1,7 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+class-level InnerClasses attribute, which is syntactically valid and contains
+one entry for each of the possible combinations of null-vs-valid cpe.
diff --git a/dx/tests/010-class-attrib-InnerClasses/run b/dx/tests/010-class-attrib-InnerClasses/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/010-class-attrib-InnerClasses/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/010-class-attrib-InnerClasses/small-class.txt b/dx/tests/010-class-attrib-InnerClasses/small-class.txt
new file mode 100644
index 0000000..54fd19d
--- /dev/null
+++ b/dx/tests/010-class-attrib-InnerClasses/small-class.txt
@@ -0,0 +1,37 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0008       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 000c "InnerClasses"     # 0005: utf8["InnerClasses"]
+01 0005 "Zorch"            # 0006: utf8["Zorch"]
+07 0006                    # 0007: class[Zorch]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0001  # attributes_count
+
+# attribute[0]
+0005      # name
+00000022  # length
+0004      # number_of_classes
+0003 0000 0000 0001  # Small / null / null / public
+0003 0000 0001 0002  # Small / null / "Small" / private
+0003 0007 0000 0004  # Small / Zorch / null / protected
+0007 0003 0006 ffff  # Zorch / Small / "Zorch" / all-bits
diff --git a/dx/tests/011-class-attrib-Synthetic/expected.txt b/dx/tests/011-class-attrib-Synthetic/expected.txt
new file mode 100644
index 0000000..85e2bff
--- /dev/null
+++ b/dx/tests/011-class-attrib-Synthetic/expected.txt
@@ -0,0 +1,27 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0006
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"Synthetic"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0001
+
+attributes[0]:
+  name: Synthetic
+  length: 00000000
+end attributes[0]
+end classfile
diff --git a/dx/tests/011-class-attrib-Synthetic/info.txt b/dx/tests/011-class-attrib-Synthetic/info.txt
new file mode 100644
index 0000000..bfd443e
--- /dev/null
+++ b/dx/tests/011-class-attrib-Synthetic/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+class-level Synthetic attribute, which is syntactically valid.
diff --git a/dx/tests/011-class-attrib-Synthetic/run b/dx/tests/011-class-attrib-Synthetic/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/011-class-attrib-Synthetic/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/011-class-attrib-Synthetic/small-class.txt b/dx/tests/011-class-attrib-Synthetic/small-class.txt
new file mode 100644
index 0000000..bc3281b
--- /dev/null
+++ b/dx/tests/011-class-attrib-Synthetic/small-class.txt
@@ -0,0 +1,30 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0006       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 0009 "Synthetic"        # 0005: utf8["Synthetic"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0001  # attributes_count
+
+# attribute[0]
+0005      # name
+00000000  # length
diff --git a/dx/tests/012-class-attrib-SourceFile/expected.txt b/dx/tests/012-class-attrib-SourceFile/expected.txt
new file mode 100644
index 0000000..e607900
--- /dev/null
+++ b/dx/tests/012-class-attrib-SourceFile/expected.txt
@@ -0,0 +1,29 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0007
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"SourceFile"}
+  0006: utf8{"Blort.java"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0001
+
+attributes[0]:
+  name: SourceFile
+  length: 00000002
+  source: string{"Blort.java"}
+end attributes[0]
+end classfile
diff --git a/dx/tests/012-class-attrib-SourceFile/info.txt b/dx/tests/012-class-attrib-SourceFile/info.txt
new file mode 100644
index 0000000..f1d8985
--- /dev/null
+++ b/dx/tests/012-class-attrib-SourceFile/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+class-level SourceFile attribute, which is syntactically valid.
diff --git a/dx/tests/012-class-attrib-SourceFile/run b/dx/tests/012-class-attrib-SourceFile/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/012-class-attrib-SourceFile/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/012-class-attrib-SourceFile/small-class.txt b/dx/tests/012-class-attrib-SourceFile/small-class.txt
new file mode 100644
index 0000000..3c514be
--- /dev/null
+++ b/dx/tests/012-class-attrib-SourceFile/small-class.txt
@@ -0,0 +1,32 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0007       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 000a "SourceFile"       # 0005: utf8["SourceFile"]
+01 000a "Blort.java"       # 0006: utf8["Blort.java"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0001  # attributes_count
+
+# attribute[0]
+0005      # name
+00000002  # length
+0006      # "Blort.java"
diff --git a/dx/tests/013-class-attrib-Deprecated/expected.txt b/dx/tests/013-class-attrib-Deprecated/expected.txt
new file mode 100644
index 0000000..4476c89
--- /dev/null
+++ b/dx/tests/013-class-attrib-Deprecated/expected.txt
@@ -0,0 +1,27 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0006
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"Deprecated"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0001
+
+attributes[0]:
+  name: Deprecated
+  length: 00000000
+end attributes[0]
+end classfile
diff --git a/dx/tests/013-class-attrib-Deprecated/info.txt b/dx/tests/013-class-attrib-Deprecated/info.txt
new file mode 100644
index 0000000..8164fe1
--- /dev/null
+++ b/dx/tests/013-class-attrib-Deprecated/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+class-level Deprecated attribute, which is syntactically valid.
diff --git a/dx/tests/013-class-attrib-Deprecated/run b/dx/tests/013-class-attrib-Deprecated/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/013-class-attrib-Deprecated/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/013-class-attrib-Deprecated/small-class.txt b/dx/tests/013-class-attrib-Deprecated/small-class.txt
new file mode 100644
index 0000000..03d7e24
--- /dev/null
+++ b/dx/tests/013-class-attrib-Deprecated/small-class.txt
@@ -0,0 +1,30 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0006       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 000a "Deprecated"       # 0005: utf8["Deprecated"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0001  # attributes_count
+
+# attribute[0]
+0005      # name
+00000000  # length
diff --git a/dx/tests/014-field-attrib-ConstantValue/expected.txt b/dx/tests/014-field-attrib-ConstantValue/expected.txt
new file mode 100644
index 0000000..b3d91a5
--- /dev/null
+++ b/dx/tests/014-field-attrib-ConstantValue/expected.txt
@@ -0,0 +1,162 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 001f
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"ConstantValue"}
+  0006: utf8{"a"}
+  0007: utf8{"b"}
+  0008: utf8{"c"}
+  0009: utf8{"d"}
+  000a: utf8{"e"}
+  000b: utf8{"f"}
+  000c: utf8{"g"}
+  000d: utf8{"h"}
+  000e: utf8{"i"}
+  000f: string{"Small"}
+  0010: int{0x8191a1b1 / -2121162319}
+  0011: float{0xbffeb852 / -1.99}
+  0012: long{0x80818283f0f1f2f3 / -9186918261664386317}
+  0014: double{0xbfffd70a3d70a3d7 / -1.99}
+  0016: utf8{"B"}
+  0017: utf8{"C"}
+  0018: utf8{"D"}
+  0019: utf8{"F"}
+  001a: utf8{"I"}
+  001b: utf8{"J"}
+  001c: utf8{"S"}
+  001d: utf8{"Z"}
+  001e: utf8{"Ljava/lang/String;"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0009
+
+fields[0]:
+  access_flags: public
+  name: a
+  descriptor: B
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: int{0x8191a1b1 / -2121162319}
+  end attributes[0]
+end fields[0]
+
+fields[1]:
+  access_flags: private
+  name: b
+  descriptor: C
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: int{0x8191a1b1 / -2121162319}
+  end attributes[0]
+end fields[1]
+
+fields[2]:
+  access_flags: protected
+  name: c
+  descriptor: D
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: double{0xbfffd70a3d70a3d7 / -1.99}
+  end attributes[0]
+end fields[2]
+
+fields[3]:
+  access_flags: static
+  name: d
+  descriptor: F
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: float{0xbffeb852 / -1.99}
+  end attributes[0]
+end fields[3]
+
+fields[4]:
+  access_flags: final
+  name: e
+  descriptor: I
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: int{0x8191a1b1 / -2121162319}
+  end attributes[0]
+end fields[4]
+
+fields[5]:
+  access_flags: volatile
+  name: f
+  descriptor: J
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: long{0x80818283f0f1f2f3 / -9186918261664386317}
+  end attributes[0]
+end fields[5]
+
+fields[6]:
+  access_flags: transient
+  name: g
+  descriptor: S
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: int{0x8191a1b1 / -2121162319}
+  end attributes[0]
+end fields[6]
+
+fields[7]:
+  access_flags: public|static|final
+  name: h
+  descriptor: Z
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: int{0x8191a1b1 / -2121162319}
+  end attributes[0]
+end fields[7]
+
+fields[8]:
+  access_flags: public|static|final
+  name: i
+  descriptor: Ljava/lang/String;
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: ConstantValue
+    length: 00000002
+    value: string{"Small"}
+  end attributes[0]
+end fields[8]
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/014-field-attrib-ConstantValue/info.txt b/dx/tests/014-field-attrib-ConstantValue/info.txt
new file mode 100644
index 0000000..313159c
--- /dev/null
+++ b/dx/tests/014-field-attrib-ConstantValue/info.txt
@@ -0,0 +1,7 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a series of
+fields, each with a single ConstantValue attribute, which points at one
+of the appropriate sorts of cpes.
diff --git a/dx/tests/014-field-attrib-ConstantValue/run b/dx/tests/014-field-attrib-ConstantValue/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/014-field-attrib-ConstantValue/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/014-field-attrib-ConstantValue/small-class.txt b/dx/tests/014-field-attrib-ConstantValue/small-class.txt
new file mode 100644
index 0000000..8d869de
--- /dev/null
+++ b/dx/tests/014-field-attrib-ConstantValue/small-class.txt
@@ -0,0 +1,140 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+001f       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"              # 0001: utf8["Small"]
+01 0010 "java/lang/Object"   # 0002: utf8["java/lang/Object"]
+07 0001                      # 0003: class[Small]
+07 0002                      # 0004: class[java/lang/Object]
+01 000d "ConstantValue"      # 0005: utf8["ConstantValue"]
+01 0001 "a"                  # 0006: utf8["a"]
+01 0001 "b"                  # 0007: utf8["b"]
+01 0001 "c"                  # 0008: utf8["c"]
+01 0001 "d"                  # 0009: utf8["d"]
+01 0001 "e"                  # 000a: utf8["e"]
+01 0001 "f"                  # 000b: utf8["f"]
+01 0001 "g"                  # 000c: utf8["g"]
+01 0001 "h"                  # 000d: utf8["h"]
+01 0001 "i"                  # 000e: utf8["i"]
+08 0001                      # 000f: string["Small"]
+03 8191a1b1                  # 0010: integer[0x8191a1b1]
+04 bffeb852                  # 0011: float[-1.99]
+05 80818283 f0f1f2f3         # 0012: long[0x80818283f0f1f2f3]
+06 bfffd70a 3d70a3d7         # 0014: double[-1.99]
+01 0001 "B"                  # 0016: utf8["B"]
+01 0001 "C"                  # 0017: utf8["C"]
+01 0001 "D"                  # 0018: utf8["D"]
+01 0001 "F"                  # 0019: utf8["F"]
+01 0001 "I"                  # 001a: utf8["I"]
+01 0001 "J"                  # 001b: utf8["J"]
+01 0001 "S"                  # 001c: utf8["S"]
+01 0001 "Z"                  # 001d: utf8["Z"]
+01 0012 "Ljava/lang/String;" # 001e: utf8["Ljava/lang/String;"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+
+0009  # fields_count
+
+# fields[0]
+0001  # access_flags
+0006  # "a"
+0016  # "B"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0010      # value
+
+# fields[1]
+0002  # access_flags
+0007  # "b"
+0017  # "C"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0010      # value
+
+# fields[2]
+0004  # access_flags
+0008  # "c"
+0018  # "D"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0014      # value
+
+# fields[3]
+0008  # access_flags
+0009  # "d"
+0019  # "F"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0011      # value
+
+# fields[4]
+0010  # access_flags
+000a  # "e"
+001a  # "I"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0010      # value
+
+# fields[5]
+0040  # access_flags
+000b  # "f"
+001b  # "J"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0012      # value
+
+# fields[6]
+0080  # access_flags
+000c  # "g"
+001c  # "Z"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0010      # value
+
+# fields[7]
+0019  # access_flags
+000d  # "h"
+001d  # "S"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0010      # value
+
+# fields[8]
+0019  # access_flags
+000e  # "i"
+001e  # "Ljava/lang/String;"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+000f      # value
+
+0000  # methods_count
+0000  # attributes_count
diff --git a/dx/tests/015-field-attrib-Synthetic/expected.txt b/dx/tests/015-field-attrib-Synthetic/expected.txt
new file mode 100644
index 0000000..bdb4519
--- /dev/null
+++ b/dx/tests/015-field-attrib-Synthetic/expected.txt
@@ -0,0 +1,36 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0008
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"Synthetic"}
+  0006: utf8{"a"}
+  0007: utf8{"I"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0001
+
+fields[0]:
+  access_flags: public
+  name: a
+  descriptor: I
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Synthetic
+    length: 00000000
+  end attributes[0]
+end fields[0]
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/015-field-attrib-Synthetic/info.txt b/dx/tests/015-field-attrib-Synthetic/info.txt
new file mode 100644
index 0000000..6037cfa
--- /dev/null
+++ b/dx/tests/015-field-attrib-Synthetic/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+field with a valid Synthetic attribute.
diff --git a/dx/tests/015-field-attrib-Synthetic/run b/dx/tests/015-field-attrib-Synthetic/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/015-field-attrib-Synthetic/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/015-field-attrib-Synthetic/small-class.txt b/dx/tests/015-field-attrib-Synthetic/small-class.txt
new file mode 100644
index 0000000..e5f429e
--- /dev/null
+++ b/dx/tests/015-field-attrib-Synthetic/small-class.txt
@@ -0,0 +1,38 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0008       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 0009 "Synthetic"        # 0005: utf8["Synthetic"]
+01 0001 "a"                # 0006: utf8["a"]
+01 0001 "I"                # 0007: utf8["I"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+
+0001  # fields_count
+
+# fields[0]
+0001  # access_flags
+0006  # "a"
+0007  # "I"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000000  # length
+
+0000  # methods_count
+0000  # attributes_count
diff --git a/dx/tests/016-field-attrib-Deprecated/expected.txt b/dx/tests/016-field-attrib-Deprecated/expected.txt
new file mode 100644
index 0000000..1b5547f
--- /dev/null
+++ b/dx/tests/016-field-attrib-Deprecated/expected.txt
@@ -0,0 +1,36 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0008
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"Deprecated"}
+  0006: utf8{"a"}
+  0007: utf8{"I"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0001
+
+fields[0]:
+  access_flags: public
+  name: a
+  descriptor: I
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Deprecated
+    length: 00000000
+  end attributes[0]
+end fields[0]
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/016-field-attrib-Deprecated/info.txt b/dx/tests/016-field-attrib-Deprecated/info.txt
new file mode 100644
index 0000000..1185981
--- /dev/null
+++ b/dx/tests/016-field-attrib-Deprecated/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+field with a valid Deprecated attribute.
diff --git a/dx/tests/016-field-attrib-Deprecated/run b/dx/tests/016-field-attrib-Deprecated/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/016-field-attrib-Deprecated/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/016-field-attrib-Deprecated/small-class.txt b/dx/tests/016-field-attrib-Deprecated/small-class.txt
new file mode 100644
index 0000000..2448ce4
--- /dev/null
+++ b/dx/tests/016-field-attrib-Deprecated/small-class.txt
@@ -0,0 +1,38 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0008       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 000a "Deprecated"       # 0005: utf8["Deprecated"]
+01 0001 "a"                # 0006: utf8["a"]
+01 0001 "I"                # 0007: utf8["I"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+
+0001  # fields_count
+
+# fields[0]
+0001  # access_flags
+0006  # "a"
+0007  # "I"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000000  # length
+
+0000  # methods_count
+0000  # attributes_count
diff --git a/dx/tests/017-method-attrib-Code/expected.txt b/dx/tests/017-method-attrib-Code/expected.txt
new file mode 100644
index 0000000..c43730c
--- /dev/null
+++ b/dx/tests/017-method-attrib-Code/expected.txt
@@ -0,0 +1,42 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0008
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Code"}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Code
+    length: 0000000d
+    max_stack: 0001
+    max_locals: 0001
+    code_length: 00000001
+    0000: return
+    exception_table_length: 0000
+    attributes_count: 0000
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/017-method-attrib-Code/info.txt b/dx/tests/017-method-attrib-Code/info.txt
new file mode 100644
index 0000000..a3ed24c
--- /dev/null
+++ b/dx/tests/017-method-attrib-Code/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a minimal but syntactically valid Code attribute.
diff --git a/dx/tests/017-method-attrib-Code/run b/dx/tests/017-method-attrib-Code/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/017-method-attrib-Code/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/017-method-attrib-Code/small-class.txt b/dx/tests/017-method-attrib-Code/small-class.txt
new file mode 100644
index 0000000..699005b
--- /dev/null
+++ b/dx/tests/017-method-attrib-Code/small-class.txt
@@ -0,0 +1,43 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0008       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                    # 0001: class[Small]
+07 0004                    # 0002: class[java/lang/Object]
+01 0005 "Small"            # 0003: utf8["Small"]
+01 0010 "java/lang/Object" # 0004: utf8["java/lang/Object"]
+01 0005 "blort"            # 0005: utf8["blort"]
+01 0003 "()V"              # 0006: utf8["()V"]
+01 0004 "Code"             # 0007: utf8["Code"]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0001  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+0000000d  # length
+0001      # max_stack
+0001      # max_locals
+00000001  # code_length
+b1        # 0000: return
+0000      # exception_table_length
+0000      # attributes_count
+
+0000  # attributes_count
diff --git a/dx/tests/018-method-attrib-Exceptions/expected.txt b/dx/tests/018-method-attrib-Exceptions/expected.txt
new file mode 100644
index 0000000..15f923f
--- /dev/null
+++ b/dx/tests/018-method-attrib-Exceptions/expected.txt
@@ -0,0 +1,40 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 000a
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Exceptions"}
+  0008: utf8{"java/lang/Error"}
+  0009: type{java.lang.Error}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public|abstract
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Exceptions
+    length: 00000004
+    number_of_exceptions: 0001
+      type{java.lang.Error}
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/018-method-attrib-Exceptions/info.txt b/dx/tests/018-method-attrib-Exceptions/info.txt
new file mode 100644
index 0000000..4a3738d
--- /dev/null
+++ b/dx/tests/018-method-attrib-Exceptions/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a syntactically valid Exceptions attribute.
diff --git a/dx/tests/018-method-attrib-Exceptions/run b/dx/tests/018-method-attrib-Exceptions/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/018-method-attrib-Exceptions/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/018-method-attrib-Exceptions/small-class.txt b/dx/tests/018-method-attrib-Exceptions/small-class.txt
new file mode 100644
index 0000000..5d05b43
--- /dev/null
+++ b/dx/tests/018-method-attrib-Exceptions/small-class.txt
@@ -0,0 +1,41 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+000a       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                    # 0001: class[Small]
+07 0004                    # 0002: class[java/lang/Object]
+01 0005 "Small"            # 0003: utf8["Small"]
+01 0010 "java/lang/Object" # 0004: utf8["java/lang/Object"]
+01 0005 "blort"            # 0005: utf8["blort"]
+01 0003 "()V"              # 0006: utf8["()V"]
+01 000a "Exceptions"       # 0007: utf8["Exceptions"]
+01 000f "java/lang/Error"  # 0008: utf8["java/lang/Error"]
+07 0008                    # 0009: class[java/lang/Error]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0401  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+00000004  # length
+0001      # number_of_exceptions
+0009      # class[java/lang/Error]
+
+0000  # attributes_count
diff --git a/dx/tests/019-method-attrib-Synthetic/expected.txt b/dx/tests/019-method-attrib-Synthetic/expected.txt
new file mode 100644
index 0000000..5d1d9cb
--- /dev/null
+++ b/dx/tests/019-method-attrib-Synthetic/expected.txt
@@ -0,0 +1,36 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0008
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Synthetic"}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public|abstract
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Synthetic
+    length: 00000000
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/019-method-attrib-Synthetic/info.txt b/dx/tests/019-method-attrib-Synthetic/info.txt
new file mode 100644
index 0000000..eddf4fb
--- /dev/null
+++ b/dx/tests/019-method-attrib-Synthetic/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a syntactically valid Synthetic attribute.
diff --git a/dx/tests/019-method-attrib-Synthetic/run b/dx/tests/019-method-attrib-Synthetic/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/019-method-attrib-Synthetic/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/019-method-attrib-Synthetic/small-class.txt b/dx/tests/019-method-attrib-Synthetic/small-class.txt
new file mode 100644
index 0000000..458dae8
--- /dev/null
+++ b/dx/tests/019-method-attrib-Synthetic/small-class.txt
@@ -0,0 +1,37 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0008       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                    # 0001: class[Small]
+07 0004                    # 0002: class[java/lang/Object]
+01 0005 "Small"            # 0003: utf8["Small"]
+01 0010 "java/lang/Object" # 0004: utf8["java/lang/Object"]
+01 0005 "blort"            # 0005: utf8["blort"]
+01 0003 "()V"              # 0006: utf8["()V"]
+01 0009 "Synthetic"        # 0007: utf8["Synthetic"]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0401  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+00000000  # length
+
+0000  # attributes_count
diff --git a/dx/tests/020-method-attrib-Deprecated/expected.txt b/dx/tests/020-method-attrib-Deprecated/expected.txt
new file mode 100644
index 0000000..8da8aa8
--- /dev/null
+++ b/dx/tests/020-method-attrib-Deprecated/expected.txt
@@ -0,0 +1,36 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0008
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Deprecated"}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public|abstract
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Deprecated
+    length: 00000000
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/020-method-attrib-Deprecated/info.txt b/dx/tests/020-method-attrib-Deprecated/info.txt
new file mode 100644
index 0000000..b7c6266
--- /dev/null
+++ b/dx/tests/020-method-attrib-Deprecated/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a syntactically valid Deprecated attribute.
diff --git a/dx/tests/020-method-attrib-Deprecated/run b/dx/tests/020-method-attrib-Deprecated/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/020-method-attrib-Deprecated/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/020-method-attrib-Deprecated/small-class.txt b/dx/tests/020-method-attrib-Deprecated/small-class.txt
new file mode 100644
index 0000000..f906733
--- /dev/null
+++ b/dx/tests/020-method-attrib-Deprecated/small-class.txt
@@ -0,0 +1,37 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0008       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                    # 0001: class[Small]
+07 0004                    # 0002: class[java/lang/Object]
+01 0005 "Small"            # 0003: utf8["Small"]
+01 0010 "java/lang/Object" # 0004: utf8["java/lang/Object"]
+01 0005 "blort"            # 0005: utf8["blort"]
+01 0003 "()V"              # 0006: utf8["()V"]
+01 000a "Deprecated"       # 0007: utf8["Deprecated"]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0401  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+00000000  # length
+
+0000  # attributes_count
diff --git a/dx/tests/021-code-attrib-LineNumberTable/expected.txt b/dx/tests/021-code-attrib-LineNumberTable/expected.txt
new file mode 100644
index 0000000..3f29310
--- /dev/null
+++ b/dx/tests/021-code-attrib-LineNumberTable/expected.txt
@@ -0,0 +1,52 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0009
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Code"}
+  0008: utf8{"LineNumberTable"}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Code
+    length: 0000001e
+    max_stack: 0001
+    max_locals: 0001
+    code_length: 00000002
+    0000: return
+    0001: return
+    exception_table_length: 0000
+    attributes_count: 0001
+    
+    attributes[0]:
+      name: LineNumberTable
+      length: 0000000a
+      line_number_table_length: 0002
+      0000 17
+      0001 34
+    end attributes[0]
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/021-code-attrib-LineNumberTable/info.txt b/dx/tests/021-code-attrib-LineNumberTable/info.txt
new file mode 100644
index 0000000..2ffc798
--- /dev/null
+++ b/dx/tests/021-code-attrib-LineNumberTable/info.txt
@@ -0,0 +1,7 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a simple Code attribute, which itself has a syntactically
+valid LineNumberTable attribute.
diff --git a/dx/tests/021-code-attrib-LineNumberTable/run b/dx/tests/021-code-attrib-LineNumberTable/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/021-code-attrib-LineNumberTable/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/021-code-attrib-LineNumberTable/small-class.txt b/dx/tests/021-code-attrib-LineNumberTable/small-class.txt
new file mode 100644
index 0000000..c28c39a
--- /dev/null
+++ b/dx/tests/021-code-attrib-LineNumberTable/small-class.txt
@@ -0,0 +1,51 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0009       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                    # 0001: class[Small]
+07 0004                    # 0002: class[java/lang/Object]
+01 0005 "Small"            # 0003: utf8["Small"]
+01 0010 "java/lang/Object" # 0004: utf8["java/lang/Object"]
+01 0005 "blort"            # 0005: utf8["blort"]
+01 0003 "()V"              # 0006: utf8["()V"]
+01 0004 "Code"             # 0007: utf8["Code"]
+01 000f "LineNumberTable"  # 0008: utf8["LineNumberTable"]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0001  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+0000001e  # length
+0001      # max_stack
+0001      # max_locals
+00000002  # code_length
+b1        # 0000: return
+b1        # 0001: return
+0000      # exception_table_length
+0001      # attributes_count
+# attributes[0]
+0008      # name
+0000000a  # length
+0002      # line_number_table_length
+0000 0011 # offset 0000, line #17
+0001 0022 # offset 0001, line #34
+
+0000  # attributes_count
diff --git a/dx/tests/022-code-attrib-LocalVariableTable/expected.txt b/dx/tests/022-code-attrib-LocalVariableTable/expected.txt
new file mode 100644
index 0000000..80091ed
--- /dev/null
+++ b/dx/tests/022-code-attrib-LocalVariableTable/expected.txt
@@ -0,0 +1,57 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 000d
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Code"}
+  0008: utf8{"LocalVariableTable"}
+  0009: utf8{"foo"}
+  000a: utf8{"bar"}
+  000b: utf8{"baz"}
+  000c: utf8{"[I"}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Code
+    length: 00000034
+    max_stack: 0001
+    max_locals: 0002
+    code_length: 00000002
+    0000: return
+    0001: return
+    exception_table_length: 0000
+    attributes_count: 0001
+    
+    attributes[0]:
+      name: LocalVariableTable
+      length: 00000020
+      local_variable_table_length: 0003
+      0000..0002 0000 foo [I
+      0000..0001 0001 bar [I
+      0001..0002 0001 baz [I
+    end attributes[0]
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/022-code-attrib-LocalVariableTable/info.txt b/dx/tests/022-code-attrib-LocalVariableTable/info.txt
new file mode 100644
index 0000000..5b44286
--- /dev/null
+++ b/dx/tests/022-code-attrib-LocalVariableTable/info.txt
@@ -0,0 +1,7 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a simple Code attribute, which itself has a syntactically
+valid LocalVariableTable attribute.
diff --git a/dx/tests/022-code-attrib-LocalVariableTable/run b/dx/tests/022-code-attrib-LocalVariableTable/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/022-code-attrib-LocalVariableTable/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/022-code-attrib-LocalVariableTable/small-class.txt b/dx/tests/022-code-attrib-LocalVariableTable/small-class.txt
new file mode 100644
index 0000000..abbf8ea
--- /dev/null
+++ b/dx/tests/022-code-attrib-LocalVariableTable/small-class.txt
@@ -0,0 +1,56 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+000d       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                      # 0001: class[Small]
+07 0004                      # 0002: class[java/lang/Object]
+01 0005 "Small"              # 0003: utf8["Small"]
+01 0010 "java/lang/Object"   # 0004: utf8["java/lang/Object"]
+01 0005 "blort"              # 0005: utf8["blort"]
+01 0003 "()V"                # 0006: utf8["()V"]
+01 0004 "Code"               # 0007: utf8["Code"]
+01 0012 "LocalVariableTable" # 0008: utf8["LocalVariableTable"]
+01 0003 "foo"                # 0009: utf8["foo"]
+01 0003 "bar"                # 000a: utf8["bar"]
+01 0003 "baz"                # 000b: utf8["baz"]
+01 0002 "[I"                 # 000c: utf8["[I"]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0001  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+00000034  # length
+0001      # max_stack
+0002      # max_locals
+00000002  # code_length
+b1        # 0000: return
+b1        # 0001: return
+0000      # exception_table_length
+0001      # attributes_count
+# attributes[0]
+0008      # name
+00000020  # length
+0003      # local_variable_table_length
+0000 0002 0009 000c 0000  # 0000..0002 foo:[I #0000
+0000 0001 000a 000c 0001  # 0000..0001 bar:[I #0001
+0001 0001 000b 000c 0001  # 0001..0002 baz:[I #0001
+
+0000  # attributes_count
diff --git a/dx/tests/023-code-exception-table/expected.txt b/dx/tests/023-code-exception-table/expected.txt
new file mode 100644
index 0000000..552e5d3
--- /dev/null
+++ b/dx/tests/023-code-exception-table/expected.txt
@@ -0,0 +1,51 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 000c
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Code"}
+  0008: utf8{"java/lang/Error"}
+  0009: utf8{"java/lang/Exception"}
+  000a: type{java.lang.Error}
+  000b: type{java.lang.Exception}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Code
+    length: 00000027
+    max_stack: 0001
+    max_locals: 0001
+    code_length: 00000003
+    0000: return
+    0001: return
+    0002: return
+    exception_table_length: 0003
+      0000..0002 -> 0002 java.lang.Error
+      0000..0001 -> 0001 java.lang.Exception
+      0001..0002 -> 0002 <any>
+    attributes_count: 0000
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/023-code-exception-table/info.txt b/dx/tests/023-code-exception-table/info.txt
new file mode 100644
index 0000000..2dbb5da
--- /dev/null
+++ b/dx/tests/023-code-exception-table/info.txt
@@ -0,0 +1,7 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a minimal but syntactically valid Code attribute, which
+sports a non-empty syntactically valid exception table.
diff --git a/dx/tests/023-code-exception-table/run b/dx/tests/023-code-exception-table/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/023-code-exception-table/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/023-code-exception-table/small-class.txt b/dx/tests/023-code-exception-table/small-class.txt
new file mode 100644
index 0000000..f8ff1f3
--- /dev/null
+++ b/dx/tests/023-code-exception-table/small-class.txt
@@ -0,0 +1,52 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+000c       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                       # 0001: class[Small]
+07 0004                       # 0002: class[java/lang/Object]
+01 0005 "Small"               # 0003: utf8["Small"]
+01 0010 "java/lang/Object"    # 0004: utf8["java/lang/Object"]
+01 0005 "blort"               # 0005: utf8["blort"]
+01 0003 "()V"                 # 0006: utf8["()V"]
+01 0004 "Code"                # 0007: utf8["Code"]
+01 000f "java/lang/Error"     # 0008: utf8["java/lang/Error"]
+01 0013 "java/lang/Exception" # 0009: utf8["java/lang/Exception"]
+07 0008                       # 000a: class[java/lang/Error]
+07 0009                       # 000b: class[java/lang/Exception]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0001  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+00000027  # length
+0001      # max_stack
+0001      # max_locals
+00000003  # code_length
+b1        # 0000: return
+b1        # 0001: return
+b1        # 0002: return
+0003      # exception_table_length
+0000 0002 0002 000a  # 0000..0002 -> 0002 java/lang/Error
+0000 0001 0001 000b  # 0000..0001 -> 0001 java/lang/Exception
+0001 0002 0002 0000  # 0001..0002 -> 0002 <any>
+0000      # attributes_count
+
+0000  # attributes_count
diff --git a/dx/tests/024-code-bytecode/expected.txt b/dx/tests/024-code-bytecode/expected.txt
new file mode 100644
index 0000000..26d58bd
--- /dev/null
+++ b/dx/tests/024-code-bytecode/expected.txt
@@ -0,0 +1,293 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0017
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Code"}
+  0008: string{"Small"}
+  0009: int{0x12345678 / 305419896}
+  000a: float{0x42f6e666 / 123.45}
+  000b: long{0x123456789abcdef0 / 1311768467463790320}
+  000d: double{0x411958955f8a0903 / 415269.3433}
+  000f: utf8{"blort"}
+  0010: utf8{"x/y/Zzz"}
+  0011: utf8{"()V"}
+  0012: nat{blort:x/y/Zzz}
+  0013: nat{blort:()V}
+  0014: field{Small.blort:x/y/Zzz}
+  0015: method{Small.blort:()V}
+  0016: ifaceMethod{Small.blort:()V}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Code
+    length: 000001db
+    max_stack: 0001
+    max_locals: 0001
+    code_length: 000001cf
+    0000: nop
+    0001: aconst_null
+    0002: iconst_m1 // #-01
+    0003: iconst_0 // #+00
+    0004: iconst_1 // #+01
+    0005: iconst_2 // #+02
+    0006: iconst_3 // #+03
+    0007: iconst_4 // #+04
+    0008: iconst_5 // #+05
+    0009: lconst_0 // +00
+    000a: lconst_1 // +01
+    000b: fconst_0 // 0.0
+    000c: fconst_1 // 1.0
+    000d: fconst_2 // 2.0
+    000e: dconst_0 // 0.0
+    000f: dconst_1 // 1.0
+    0010: bipush #+45
+    0012: sipush #+5432
+    0015: ldc string{"Small"}
+    0017: ldc #+12345678
+    0019: ldc #42f6e666 // 123.45
+    001b: ldc_w string{"Small"}
+    001e: ldc_w #+12345678
+    0021: ldc_w #42f6e666 // 123.45
+    0024: ldc2_w #+123456789abcdef0
+    0027: ldc2_w #411958955f8a0903 // 415269.3433
+    002a: iload 01
+    002c: lload 02 // category-2
+    002e: fload 03
+    0030: dload 04 // category-2
+    0032: aload 05
+    0034: iload_0 // 00
+    0035: iload_1 // 01
+    0036: iload_2 // 02
+    0037: iload_3 // 03
+    0038: lload_0 // 00, category-2
+    0039: lload_1 // 01, category-2
+    003a: lload_2 // 02, category-2
+    003b: lload_3 // 03, category-2
+    003c: fload_0 // 00
+    003d: fload_1 // 01
+    003e: fload_2 // 02
+    003f: fload_3 // 03
+    0040: dload_0 // 00, category-2
+    0041: dload_1 // 01, category-2
+    0042: dload_2 // 02, category-2
+    0043: dload_3 // 03, category-2
+    0044: aload_0 // 00
+    0045: aload_1 // 01
+    0046: aload_2 // 02
+    0047: aload_3 // 03
+    0048: iaload
+    0049: laload
+    004a: faload
+    004b: daload
+    004c: aaload
+    004d: baload
+    004e: caload
+    004f: saload
+    0050: istore 41
+    0052: lstore 42 // category-2
+    0054: fstore 43
+    0056: dstore 44 // category-2
+    0058: astore 45
+    005a: istore_0 // 00
+    005b: istore_1 // 01
+    005c: istore_2 // 02
+    005d: istore_3 // 03
+    005e: lstore_0 // 00, category-2
+    005f: lstore_1 // 01, category-2
+    0060: lstore_2 // 02, category-2
+    0061: lstore_3 // 03, category-2
+    0062: fstore_0 // 00
+    0063: fstore_1 // 01
+    0064: fstore_2 // 02
+    0065: fstore_3 // 03
+    0066: dstore_0 // 00, category-2
+    0067: dstore_1 // 01, category-2
+    0068: dstore_2 // 02, category-2
+    0069: dstore_3 // 03, category-2
+    006a: astore_0 // 00
+    006b: astore_1 // 01
+    006c: astore_2 // 02
+    006d: astore_3 // 03
+    006e: iastore
+    006f: lastore
+    0070: fastore
+    0071: dastore
+    0072: aastore
+    0073: bastore
+    0074: castore
+    0075: sastore
+    0076: pop
+    0077: pop2
+    0078: dup
+    0079: dup_x1
+    007a: dup_x2
+    007b: dup2
+    007c: dup2_x1
+    007d: dup2_x2
+    007e: swap
+    007f: iadd
+    0080: ladd
+    0081: fadd
+    0082: dadd
+    0083: isub
+    0084: lsub
+    0085: fsub
+    0086: dsub
+    0087: imul
+    0088: lmul
+    0089: fmul
+    008a: dmul
+    008b: idiv
+    008c: ldiv
+    008d: fdiv
+    008e: ddiv
+    008f: irem
+    0090: lrem
+    0091: frem
+    0092: drem
+    0093: ineg
+    0094: lneg
+    0095: fneg
+    0096: dneg
+    0097: ishl
+    0098: lshl
+    0099: ishr
+    009a: lshr
+    009b: iushr
+    009c: lushr
+    009d: iand
+    009e: land
+    009f: ior
+    00a0: lor
+    00a1: ixor
+    00a2: lxor
+    00a3: iinc 05, #-01
+    00a6: i2l
+    00a7: i2f
+    00a8: i2d
+    00a9: l2i
+    00aa: l2f
+    00ab: l2d
+    00ac: f2i
+    00ad: f2l
+    00ae: f2d
+    00af: d2i
+    00b0: d2l
+    00b1: d2f
+    00b2: i2b
+    00b3: i2c
+    00b4: i2s
+    00b5: lcmp
+    00b6: fcmpl
+    00b7: fcmpg
+    00b8: dcmpl
+    00b9: dcmpg
+    00ba: ifeq 00ba
+    00bd: ifne 00ba
+    00c0: iflt 00ba
+    00c3: ifge 00ba
+    00c6: ifgt 00ba
+    00c9: ifle 00ba
+    00cc: if_icmpeq 00db
+    00cf: if_icmpne 00db
+    00d2: if_icmplt 00db
+    00d5: if_icmpge 00db
+    00d8: if_icmpgt 00db
+    00db: if_icmple 00db
+    00de: if_acmpeq 00de
+    00e1: if_acmpne 00e1
+    00e4: goto 0000
+    00e7: jsr 00e7
+    00ea: ret 2f
+    00ec: tableswitch
+      +12340000: 0000
+      +12340001: 0001
+      +12340002: 0002
+      +12340003: 0003
+      +12340004: 0004
+      +12340005: 0005
+      +12340006: 0007
+      +12340007: 0009
+      default: 00ea
+    011c: lookupswitch
+      -7689edcc: 0148
+      +00001000: 0149
+      +03333333: 0149
+      +79787776: 014b
+      default: 00ec
+    0148: ireturn
+    0149: lreturn
+    014a: freturn
+    014b: dreturn
+    014c: areturn
+    014d: return
+    014e: getstatic field{Small.blort:x/y/Zzz}
+    0151: putstatic field{Small.blort:x/y/Zzz}
+    0154: getfield field{Small.blort:x/y/Zzz}
+    0157: putfield field{Small.blort:x/y/Zzz}
+    015a: invokevirtual method{Small.blort:()V}
+    015d: invokespecial method{Small.blort:()V}
+    0160: invokestatic method{Small.blort:()V}
+    0163: invokeinterface ifaceMethod{Small.blort:()V}, 0001
+    0168: new type{Small}
+    016b: newarray boolean
+    016d: newarray char
+    016f: newarray float
+    0171: newarray double
+    0173: newarray byte
+    0175: newarray short
+    0177: newarray int
+    0179: newarray long
+    017b: anewarray type{Small}
+    017e: arraylength
+    017f: athrow
+    0180: checkcast type{java.lang.Object}
+    0183: instanceof type{java.lang.Object}
+    0186: monitorenter
+    0187: monitorexit
+    0188: wide iload 0123
+    018c: wide lload 0124 // category-2
+    0190: wide fload 0125
+    0194: wide dload 0126 // category-2
+    0198: wide aload 0127
+    019c: wide istore 20f0
+    01a0: wide lstore 20f1 // category-2
+    01a4: wide fstore 20f2
+    01a8: wide dstore 20f3 // category-2
+    01ac: wide astore 20f4
+    01b0: wide ret ffff
+    01b4: wide iinc 0002, #+1000
+    01ba: multianewarray type{java.lang.Object}, 04
+    01be: ifnull ffff
+    01c1: ifnonnull 01c1
+    01c4: goto_w 700001c4
+    01c9: jsr_w 000001c4
+    01ce: unused_ca
+    exception_table_length: 0000
+    attributes_count: 0000
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/024-code-bytecode/info.txt b/dx/tests/024-code-bytecode/info.txt
new file mode 100644
index 0000000..d1264a8
--- /dev/null
+++ b/dx/tests/024-code-bytecode/info.txt
@@ -0,0 +1,7 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a Code attribute, and the code[] array of the attribute has
+one instance of each interesting variant of each possible bytecode.
diff --git a/dx/tests/024-code-bytecode/run b/dx/tests/024-code-bytecode/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/024-code-bytecode/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/024-code-bytecode/small-class.txt b/dx/tests/024-code-bytecode/small-class.txt
new file mode 100644
index 0000000..7d1ff37
--- /dev/null
+++ b/dx/tests/024-code-bytecode/small-class.txt
@@ -0,0 +1,303 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0017       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                    # 0001: class[Small]
+07 0004                    # 0002: class[java/lang/Object]
+01 0005 "Small"            # 0003: utf8["Small"]
+01 0010 "java/lang/Object" # 0004: utf8["java/lang/Object"]
+01 0005 "blort"            # 0005: utf8["blort"]
+01 0003 "()V"              # 0006: utf8["()V"]
+01 0004 "Code"             # 0007: utf8["Code"]
+08 0003                    # 0008: string["Small"]
+03 12345678                # 0009: integer[0x12345678]
+04 42f6e666                # 000a: float[123.45]
+05 12345678 9abcdef0       # 000b: long[0x1234567890abcdef0]
+06 41195895 5f8a0903       # 000d: double[415269.3433]
+01 0005 "blort"            # 000f: utf8["blort"]
+01 0007 "x/y/Zzz"          # 0010: utf8["x/y/Zzz"]
+01 0003 "()V"              # 0011: utf8["()V"]
+0c 000f 0010               # 0012: nat[blort:x/y/Zzz]
+0c 000f 0011               # 0013: nat[blort:()V]
+09 0001 0012               # 0014: field[Small.blort:x/y/Zzz]
+0a 0001 0013               # 0015: method[Small.blort:()V]
+0b 0001 0013               # 0016: ifaceMethod[Small.blort:()V]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0001  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+000001db  # length (note: == code_length + 0x0c)
+0001      # max_stack
+0001      # max_locals
+000001cf  # code_length
+
+00        # 0000: nop
+01        # 0001: aconst_null
+02        # 0002: aconst_m1
+03        # 0003: iconst_0
+04        # 0004: iconst_1
+05        # 0005: iconst_2
+06        # 0006: iconst_3
+07        # 0007: iconst_4
+08        # 0008: iconst_5
+09        # 0009: lconst_0
+0a        # 000a: lconst_1
+0b        # 000b: fconst_0
+0c        # 000c: fconst_1
+0d        # 000d: fconst_2
+0e        # 000e: dconst_0
+0f        # 000f: dconst_1
+10 45     # 0010: bipush #+45
+11 5432   # 0012: sipush #+5432
+12 08     # 0015: ldc <string>
+12 09     # 0017: ldc <integer>
+12 0a     # 0019: ldc <float>
+13 0008   # 001b: ldc_w <string>
+13 0009   # 001e: ldc_w <integer>
+13 000a   # 0021: ldc_w <float>
+14 000b   # 0024: ldc2_w <long>
+14 000d   # 0027: ldc2_w <double>
+15 01     # 002a: iload 01
+16 02     # 002c: lload 02
+17 03     # 002e: fload 03
+18 04     # 0030: dload 04
+19 05     # 0032: aload 05
+1a        # 0034: iload_0
+1b        # 0035: iload_1
+1c        # 0036: iload_2
+1d        # 0037: iload_3
+1e        # 0038: lload_0
+1f        # 0039: lload_1
+20        # 003a: lload_2
+21        # 003b: lload_3
+22        # 003c: fload_0
+23        # 003d: fload_1
+24        # 003e: fload_2
+25        # 003f: fload_3
+26        # 0040: dload_0
+27        # 0041: dload_1
+28        # 0042: dload_2
+29        # 0043: dload_3
+2a        # 0044: aload_0
+2b        # 0045: aload_1
+2c        # 0046: aload_2
+2d        # 0047: aload_3
+2e        # 0048: iaload
+2f        # 0049: laload
+30        # 004a: faload
+31        # 004b: daload
+32        # 004c: aaload
+33        # 004d: baload
+34        # 004e: caload
+35        # 004f: saload
+36 41     # 0050: istore 41
+37 42     # 0052: lstore 42
+38 43     # 0054: fstore 43
+39 44     # 0056: dstore 44
+3a 45     # 0058: astore 45
+3b        # 005a: istore_0
+3c        # 005b: istore_1
+3d        # 005c: istore_2
+3e        # 005d: istore_3
+3f        # 005e: lstore_0
+40        # 005f: lstore_1
+41        # 0060: lstore_2
+42        # 0061: lstore_3
+43        # 0062: fstore_0
+44        # 0063: fstore_1
+45        # 0064: fstore_2
+46        # 0065: fstore_3
+47        # 0066: dstore_0
+48        # 0067: dstore_1
+49        # 0068: dstore_2
+4a        # 0069: dstore_3
+4b        # 006a: astore_0
+4c        # 006b: astore_1
+4d        # 006c: astore_2
+4e        # 006d: astore_3
+4f        # 006e: iastore
+50        # 006f: lastore
+51        # 0070: fastore
+52        # 0071: dastore
+53        # 0072: aastore
+54        # 0073: bastore
+55        # 0074: castore
+56        # 0075: sastore
+57        # 0076: pop
+58        # 0077: pop2
+59        # 0078: dup
+5a        # 0079: dup_x1
+5b        # 007a: dup_x2
+5c        # 007b: dup2
+5d        # 007c: dup2_x1
+5e        # 007d: dup2_x2
+5f        # 007e: swap
+60        # 007f: iadd
+61        # 0080: ladd
+62        # 0081: fadd
+63        # 0082: dadd
+64        # 0083: isub
+65        # 0084: lsub
+66        # 0085: fsub
+67        # 0086: dsub
+68        # 0087: imul
+69        # 0088: lmul
+6a        # 0089: fmul
+6b        # 008a: dmul
+6c        # 008b: idiv
+6d        # 008c: ldiv
+6e        # 008d: fdiv
+6f        # 008e: ddiv
+70        # 008f: irem
+71        # 0090: lrem
+72        # 0091: frem
+73        # 0092: drem
+74        # 0093: ineg
+75        # 0094: lneg
+76        # 0095: fneg
+77        # 0096: dneg
+78        # 0097: ishl
+79        # 0098: lshl
+7a        # 0099: ishr
+7b        # 009a: lshr
+7c        # 009b: iushr
+7d        # 009c: lushr
+7e        # 009d: iand
+7f        # 009e: land
+80        # 009f: ior
+81        # 00a0: lor
+82        # 00a1: ixor
+83        # 00a2: lxor
+84 05 ff  # 00a3: iinc 05, #-1
+85        # 00a6: i2l
+86        # 00a7: i2f
+87        # 00a8: i2d
+88        # 00a9: l2i
+89        # 00aa: l2f
+8a        # 00ab: l2d
+8b        # 00ac: f2i
+8c        # 00ad: f2l
+8d        # 00ae: f2d
+8e        # 00af: d2i
+8f        # 00b0: d2l
+90        # 00b1: d2f
+91        # 00b2: i2b
+92        # 00b3: i2c
+93        # 00b4: i2s
+94        # 00b5: lcmp
+95        # 00b6: fcmpl
+96        # 00b7: fcmpg
+97        # 00b8: dcmpl
+98        # 00b9: dcmpg
+99 0000   # 00ba: ifeq 00ba
+9a fffd   # 00bd: ifne 00ba
+9b fffa   # 00c0: iflt 00ba
+9c fff7   # 00c3: ifge 00ba
+9d fff4   # 00c6: ifgt 00ba
+9e fff1   # 00c9: ifle 00ba
+9f 000f   # 00cc: if_icmpeq 00db
+a0 000c   # 00cf: if_icmpne 00db
+a1 0009   # 00d2: if_icmplt 00db
+a2 0006   # 00d5: if_icmpge 00db
+a3 0003   # 00d8: if_icmpgt 00db
+a4 0000   # 00db: if_icmple 00db
+a5 0000   # 00de: if_acmpeq 00de
+a6 0000   # 00e1: if_acmpne 00e1
+a7 ff1c   # 00e4: goto 0000
+a8 0000   # 00e7: jsr 00e7
+a9 2f     # 00ea: ret 2f
+aa 000000 # 00ec: tableswitch + padding
+ fffffffe #   default: 000000ea
+ 12340000 #   low: 12340000
+ 12340007 #   high: 12340007
+ ffffff14 #   [0]: 00000000
+ ffffff15 #   [1]: 00000001
+ ffffff16 #   [2]: 00000002
+ ffffff17 #   [3]: 00000003
+ ffffff18 #   [4]: 00000004
+ ffffff19 #   [5]: 00000005
+ ffffff1b #   [6]: 00000007
+ ffffff1d #   [7]: 00000009
+ab 000000 # 011c: lookupswitch + padding
+ ffffffd0 #   default: 000000ec
+ 00000004 #   npairs: 4
+ 89761234 #   match[0]: 89761234
+ 0000002c #   offset[0]: 0148
+ 00001000 #   match[1]: 00001000
+ 0000002d #   offset[1]: 0149
+ 03333333 #   match[2]: 03333333
+ 0000002d #   offset[2]: 0149
+ 79787776 #   match[3]: 79787776
+ 0000002f #   offset[3]: 014b
+ac        # 0148: ireturn
+ad        # 0149: lreturn
+ae        # 014a: freturn
+af        # 014b: dreturn
+b0        # 014c: areturn
+b1        # 014d: return
+b2 0014   # 014e: getstatic 0014
+b3 0014   # 0151: putstatic 0014
+b4 0014   # 0154: getfield 0014
+b5 0014   # 0157: putfield 0014
+b6 0015   # 015a: invokevirtual 0015
+b7 0015   # 015d: invokespecial 0015
+b8 0015   # 0160: invokestatic 0015
+b9 0016 01 00  # 0163: invokeinterface 0016
+bb 0001   # 0169: new 0001
+bc 04     # 016c: newarray boolean
+bc 05     # 016e: newarray char
+bc 06     # 0170: newarray float
+bc 07     # 0172: newarray double
+bc 08     # 0174: newarray byte
+bc 09     # 0176: newarray short
+bc 0a     # 0178: newarray int
+bc 0b     # 017a: newarray long
+bd 0001   # 017c: anewarray 0001
+be        # 017f: arraylength
+bf        # 0180: athrow
+c0 0002   # 0181: checkcast 0002
+c1 0002   # 0184: instanceof 0002
+c2        # 0187: monitorenter
+c3        # 0188: monitorexit
+c415 0123 # 0189: wide iload 0123
+c416 0124 # 018d: wide lload 0124
+c417 0125 # 0191: wide fload 0125
+c418 0126 # 0195: wide dload 0126
+c419 0127 # 0199: wide aload 0127
+c436 20f0 # 019d: wide istore 20f0
+c437 20f1 # 01a1: wide lstore 20f1
+c438 20f2 # 01a5: wide fstore 20f2
+c439 20f3 # 01a9: wide dstore 20f3
+c43a 20f4 # 01ad: wide astore 20f4
+c4a9 ffff # 01b1: wide ret ffff
+c484 0002 1000 # 01b5: wide iinc 0002, 1000
+c5 0002 04 # 01bb: multianewarray 0002, #04
+c6 fe41   # 01bf: ifnull 0000
+c7 0000   # 01c2: ifnonnull 01c2
+c8 70000000 # 01c5: goto_w 700001c5
+c9 fffffffb # 01ca: jsr_w 000001c5
+ca        # 01cf: <unused>
+
+0000      # exception_table_length
+0000      # attributes_count
+
+0000  # attributes_count
diff --git a/dx/tests/025-class-attrib-Signature/expected.txt b/dx/tests/025-class-attrib-Signature/expected.txt
new file mode 100644
index 0000000..e3f7233
--- /dev/null
+++ b/dx/tests/025-class-attrib-Signature/expected.txt
@@ -0,0 +1,29 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0007
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"Signature"}
+  0006: utf8{"LYo;"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0001
+
+attributes[0]:
+  name: Signature
+  length: 00000002
+  signature: string{"LYo;"}
+end attributes[0]
+end classfile
diff --git a/dx/tests/025-class-attrib-Signature/info.txt b/dx/tests/025-class-attrib-Signature/info.txt
new file mode 100644
index 0000000..3d0ce51
--- /dev/null
+++ b/dx/tests/025-class-attrib-Signature/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+class-level Signature attribute, which is syntactically valid.
diff --git a/dx/tests/025-class-attrib-Signature/run b/dx/tests/025-class-attrib-Signature/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/025-class-attrib-Signature/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/025-class-attrib-Signature/small-class.txt b/dx/tests/025-class-attrib-Signature/small-class.txt
new file mode 100644
index 0000000..d332e3a
--- /dev/null
+++ b/dx/tests/025-class-attrib-Signature/small-class.txt
@@ -0,0 +1,32 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0007       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 0009 "Signature"        # 0005: utf8["Signature"]
+01 0004 "LYo;"             # 0006: utf8["Yo"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0001  # attributes_count
+
+# attribute[0]
+0005      # name
+00000002  # length
+0006      # signature
\ No newline at end of file
diff --git a/dx/tests/026-field-attrib-Signature/expected.txt b/dx/tests/026-field-attrib-Signature/expected.txt
new file mode 100644
index 0000000..228989a
--- /dev/null
+++ b/dx/tests/026-field-attrib-Signature/expected.txt
@@ -0,0 +1,38 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0009
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"Signature"}
+  0006: utf8{"a"}
+  0007: utf8{"I"}
+  0008: utf8{"LYo;"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0001
+
+fields[0]:
+  access_flags: public
+  name: a
+  descriptor: I
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Signature
+    length: 00000002
+    signature: string{"LYo;"}
+  end attributes[0]
+end fields[0]
+methods_count: 0000
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/026-field-attrib-Signature/info.txt b/dx/tests/026-field-attrib-Signature/info.txt
new file mode 100644
index 0000000..5b21ccb
--- /dev/null
+++ b/dx/tests/026-field-attrib-Signature/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+field with a syntactically valid Signature attribute.
diff --git a/dx/tests/026-field-attrib-Signature/run b/dx/tests/026-field-attrib-Signature/run
new file mode 100644
index 0000000..1c759d6
--- /dev/null
+++ b/dx/tests/026-field-attrib-Signature/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class.txt
diff --git a/dx/tests/026-field-attrib-Signature/small-class.txt b/dx/tests/026-field-attrib-Signature/small-class.txt
new file mode 100644
index 0000000..07d56a0
--- /dev/null
+++ b/dx/tests/026-field-attrib-Signature/small-class.txt
@@ -0,0 +1,40 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0009       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 0009 "Signature"        # 0005: utf8["Signature"]
+01 0001 "a"                # 0006: utf8["a"]
+01 0001 "I"                # 0007: utf8["I"]
+01 0004 "LYo;"             # 0008: utf8["Yo"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+
+0001  # fields_count
+
+# fields[0]
+0001  # access_flags
+0006  # "a"
+0007  # "I"
+0001  # attributes_count
+# attributes[0]
+0005      # name
+00000002  # length
+0008      # signature
+
+0000  # methods_count
+0000  # attributes_count
diff --git a/dx/tests/027-method-attrib-Signature/expected.txt b/dx/tests/027-method-attrib-Signature/expected.txt
new file mode 100644
index 0000000..c3610e9
--- /dev/null
+++ b/dx/tests/027-method-attrib-Signature/expected.txt
@@ -0,0 +1,38 @@
+reading small-class.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0009
+
+constant_pool:
+  0001: type{Small}
+  0002: type{java.lang.Object}
+  0003: utf8{"Small"}
+  0004: utf8{"java/lang/Object"}
+  0005: utf8{"blort"}
+  0006: utf8{"()V"}
+  0007: utf8{"Signature"}
+  0008: utf8{"LYo;"}
+end constant_pool
+access_flags: public
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0001
+
+methods[0]:
+  access_flags: public|abstract
+  name: blort
+  descriptor: ()V
+  attributes_count: 0001
+  
+  attributes[0]:
+    name: Signature
+    length: 00000002
+    signature: string{"LYo;"}
+  end attributes[0]
+end methods[0]
+attributes_count: 0000
+end classfile
diff --git a/dx/tests/027-method-attrib-Signature/info.txt b/dx/tests/027-method-attrib-Signature/info.txt
new file mode 100644
index 0000000..ea18c03
--- /dev/null
+++ b/dx/tests/027-method-attrib-Signature/info.txt
@@ -0,0 +1,6 @@
+This is a dump of a simple class which is valid in structure but is overall
+invalid. That being said, the system should still have no trouble parsing and
+dumping it.
+
+The salient bit of parsing tested here is that the class has a single
+method with a syntactically valid Signature attribute.
diff --git a/dx/tests/027-method-attrib-Signature/run b/dx/tests/027-method-attrib-Signature/run
new file mode 100644
index 0000000..16b7755
--- /dev/null
+++ b/dx/tests/027-method-attrib-Signature/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump small-class.txt
diff --git a/dx/tests/027-method-attrib-Signature/small-class.txt b/dx/tests/027-method-attrib-Signature/small-class.txt
new file mode 100644
index 0000000..c1cd6e3
--- /dev/null
+++ b/dx/tests/027-method-attrib-Signature/small-class.txt
@@ -0,0 +1,39 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0009       # constant_pool_count
+
+#
+# constant_pool
+#
+07 0003                    # 0001: class[Small]
+07 0004                    # 0002: class[java/lang/Object]
+01 0005 "Small"            # 0003: utf8["Small"]
+01 0010 "java/lang/Object" # 0004: utf8["java/lang/Object"]
+01 0005 "blort"            # 0005: utf8["blort"]
+01 0003 "()V"              # 0006: utf8["()V"]
+01 0009 "Signature"        # 0007: utf8["Signature"]
+01 0004 "LYo;"             # 0008: utf8["Yo"]
+
+0001  # access_flags
+0001  # this_class
+0002  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0001  # methods_count
+
+# methods[0]
+0401  # access_flags
+0005  # name
+0006  # descriptor
+0001  # attributes_count
+# attributes[0]
+0007      # name
+00000002  # length
+0008      # signature
+
+0000  # attributes_count
diff --git a/dx/tests/028-class-attrib-EnclosingMethod/expected.txt b/dx/tests/028-class-attrib-EnclosingMethod/expected.txt
new file mode 100644
index 0000000..15e9524
--- /dev/null
+++ b/dx/tests/028-class-attrib-EnclosingMethod/expected.txt
@@ -0,0 +1,61 @@
+reading small-class-1.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0006
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"EnclosingMethod"}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0001
+
+attributes[0]:
+  name: EnclosingMethod
+  length: 00000004
+  class: type{Small}
+  method: (none)
+end attributes[0]
+end classfile
+reading small-class-2.txt...
+begin classfile
+magic: cafebabe
+minor_version: 0000
+major_version: 002e
+constant_pool_count: 0009
+
+constant_pool:
+  0001: utf8{"Small"}
+  0002: utf8{"java/lang/Object"}
+  0003: type{Small}
+  0004: type{java.lang.Object}
+  0005: utf8{"EnclosingMethod"}
+  0006: utf8{"zorp"}
+  0007: utf8{"()V"}
+  0008: nat{zorp:()V}
+end constant_pool
+access_flags: public|super
+this_class: type{Small}
+super_class: type{java.lang.Object}
+interfaces_count: 0000
+fields_count: 0000
+methods_count: 0000
+attributes_count: 0001
+
+attributes[0]:
+  name: EnclosingMethod
+  length: 00000004
+  class: type{Small}
+  method: nat{zorp:()V}
+end attributes[0]
+end classfile
diff --git a/dx/tests/028-class-attrib-EnclosingMethod/info.txt b/dx/tests/028-class-attrib-EnclosingMethod/info.txt
new file mode 100644
index 0000000..9600803
--- /dev/null
+++ b/dx/tests/028-class-attrib-EnclosingMethod/info.txt
@@ -0,0 +1,8 @@
+This is a dump of two simple classes which are valid in structure but
+are overall invalid. That being said, the system should still have no
+trouble parsing and dumping them.
+
+The salient bit of parsing tested here is that each class has a single
+class-level EnclosingMethod attribute, which is syntactically valid. There
+are two possible variants (method may be null), and this test contains one
+of each.
diff --git a/dx/tests/028-class-attrib-EnclosingMethod/run b/dx/tests/028-class-attrib-EnclosingMethod/run
new file mode 100644
index 0000000..f33a338
--- /dev/null
+++ b/dx/tests/028-class-attrib-EnclosingMethod/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 small-class-1.txt small-class-2.txt
diff --git a/dx/tests/028-class-attrib-EnclosingMethod/small-class-1.txt b/dx/tests/028-class-attrib-EnclosingMethod/small-class-1.txt
new file mode 100644
index 0000000..aeaf2a3
--- /dev/null
+++ b/dx/tests/028-class-attrib-EnclosingMethod/small-class-1.txt
@@ -0,0 +1,32 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0006       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 000f "EnclosingMethod"  # 0005: utf8["EnclosingMethod"]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0001  # attributes_count
+
+# attribute[0]
+0005      # name
+00000004  # length
+0003      # class
+0000      # method
diff --git a/dx/tests/028-class-attrib-EnclosingMethod/small-class-2.txt b/dx/tests/028-class-attrib-EnclosingMethod/small-class-2.txt
new file mode 100644
index 0000000..8e6148e
--- /dev/null
+++ b/dx/tests/028-class-attrib-EnclosingMethod/small-class-2.txt
@@ -0,0 +1,35 @@
+#
+# sample small-but-valid classfile
+#
+
+cafe babe  # magic
+0000       # minor_version
+002e       # major_version
+0009       # constant_pool_count
+
+#
+# constant_pool
+#
+01 0005 "Small"            # 0001: utf8["Small"]
+01 0010 "java/lang/Object" # 0002: utf8["java/lang/Object"]
+07 0001                    # 0003: class[Small]
+07 0002                    # 0004: class[java/lang/Object]
+01 000f "EnclosingMethod"  # 0005: utf8["EnclosingMethod"]
+01 0004 "zorp"             # 0006: utf8["zorp"]
+01 0003 "()V"              # 0007: utf8["()V"]
+0c 0006 0007               # 0008: nat[zorp:()V]
+
+0021  # access_flags
+0003  # this_class
+0004  # super_class
+0000  # interfaces_count
+0000  # fields_count
+0000  # methods_count
+
+0001  # attributes_count
+
+# attribute[0]
+0005      # name
+00000004  # length
+0003      # class
+0008      # method
diff --git a/dx/tests/029-unit-Bits/expected.txt b/dx/tests/029-unit-Bits/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/029-unit-Bits/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/029-unit-Bits/info.txt b/dx/tests/029-unit-Bits/info.txt
new file mode 100644
index 0000000..fa56715
--- /dev/null
+++ b/dx/tests/029-unit-Bits/info.txt
@@ -0,0 +1 @@
+Unit test for com.android.dx.util.Bits.
diff --git a/dx/tests/029-unit-Bits/run b/dx/tests/029-unit-Bits/run
new file mode 100644
index 0000000..d6c733c
--- /dev/null
+++ b/dx/tests/029-unit-Bits/run
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+dxtestsjar=$progdir/../framework/dx-tests.jar
+junitjar=$progdir/../framework/junit-host.jar
+
+for i in "$dxtestsjar" "$dxjar" "$junitjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+${JAVA} -cp $dxtestsjar:$dxjar:$junitjar junit.textui.TestRunner com.android.dx.util.BitsTest > unit-out.txt 2>&1
+
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/030-minimal-jasmin/blort.class b/dx/tests/030-minimal-jasmin/blort.class
new file mode 100644
index 0000000..1e55f0e
Binary files /dev/null and b/dx/tests/030-minimal-jasmin/blort.class differ
diff --git a/dx/tests/030-minimal-jasmin/blort.j b/dx/tests/030-minimal-jasmin/blort.j
new file mode 100644
index 0000000..45722bc
--- /dev/null
+++ b/dx/tests/030-minimal-jasmin/blort.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public <init>()V
+    .limit locals 2
+    .limit stack 3
+
+    aload_0
+    dup
+    dup
+    astore_1
+    pop2
+    return
+.end method
diff --git a/dx/tests/030-minimal-jasmin/build b/dx/tests/030-minimal-jasmin/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/030-minimal-jasmin/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/030-minimal-jasmin/expected.txt b/dx/tests/030-minimal-jasmin/expected.txt
new file mode 100644
index 0000000..a8e0319
--- /dev/null
+++ b/dx/tests/030-minimal-jasmin/expected.txt
@@ -0,0 +1,6 @@
+    0000: aload_0 // 00
+    0001: dup
+    0002: dup
+    0003: astore_1 // 01
+    0004: pop2
+    0005: return
diff --git a/dx/tests/030-minimal-jasmin/info.txt b/dx/tests/030-minimal-jasmin/info.txt
new file mode 100644
index 0000000..816c244
--- /dev/null
+++ b/dx/tests/030-minimal-jasmin/info.txt
@@ -0,0 +1,2 @@
+This test is just a minimal test involving assembling a jasmin source
+file and then dumping it. It doesn't test any features in particular.
diff --git a/dx/tests/030-minimal-jasmin/run b/dx/tests/030-minimal-jasmin/run
new file mode 100644
index 0000000..85ee0e3
--- /dev/null
+++ b/dx/tests/030-minimal-jasmin/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --width=200 blort.class | grep '    000.:'
diff --git a/dx/tests/031-bb-dead-code/blort.class b/dx/tests/031-bb-dead-code/blort.class
new file mode 100644
index 0000000..42918e4
Binary files /dev/null and b/dx/tests/031-bb-dead-code/blort.class differ
diff --git a/dx/tests/031-bb-dead-code/blort.j b/dx/tests/031-bb-dead-code/blort.j
new file mode 100644
index 0000000..b6854f2
--- /dev/null
+++ b/dx/tests/031-bb-dead-code/blort.j
@@ -0,0 +1,182 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public <init>()V
+    .limit locals 1
+
+    aload_0
+    invokespecial java/lang/Object/<init>()V
+    return
+.end method
+
+; dead code after the last reachable instruction in a method
+.method public test_deadend1()V
+    return
+    aload_0
+.end method
+
+; dead code after the last reachable instruction in a method
+.method public test_deadend2()V
+    ireturn
+    aload_0
+    aload_0
+.end method
+
+; dead code after the last reachable instruction in a method
+.method public test_deadend3()V
+    aconst_null
+    athrow
+    sipush 0x1234
+.end method
+
+; make sure an exception handler for a dead range doesn't get enlivened
+.method public test_dead_exception_handler()V
+    return
+    nop
+blort:
+    nop
+    nop
+    return
+handler:
+    nop
+    return
+    .catch all from blort to handler using handler
+.end method
+
+; dead code after goto instruction
+.method public test_dead_goto()V
+    goto blort
+    nop
+blort:
+    return
+.end method
+
+; dead code after ret instruction
+.method public test_dead_ret()V
+    ifeq blort
+    ret 0
+    iconst_m1
+blort:
+    return
+.end method
+
+; dead code after tableswitch instruction
+.method public test_dead_tableswitch()V
+    tableswitch 0x10
+        blort
+        default: blort
+    nop
+    nop
+    nop
+    aload_0
+    aload_1
+    aload_2
+    aload_3
+blort:
+    return
+.end method
+
+; dead code after lookupswitch instruction
+.method public test_dead_lookupswitch()V
+    lookupswitch
+        0x10: blort
+        0x20: blort
+        default: blort
+    ldc "WHYA REYO UREA DING THIS ?"
+blort:
+    return
+.end method
+
+; dead code after ireturn instruction
+.method public test_dead_ireturn()V
+    ifeq blort
+    ireturn
+    iconst_1
+blort:
+    return
+.end method
+
+; dead code after lreturn instruction
+.method public test_dead_lreturn()V
+    ifeq blort
+    lreturn
+    iconst_1
+blort:
+    return
+.end method
+
+; dead code after freturn instruction
+.method public test_dead_freturn()V
+    ifeq blort
+    freturn
+    iconst_1
+blort:
+    return
+.end method
+
+; dead code after dreturn instruction
+.method public test_dead_dreturn()V
+    ifeq blort
+    dreturn
+    iconst_1
+blort:
+    return
+.end method
+
+; dead code after areturn instruction
+.method public test_dead_areturn()V
+    ifeq blort
+    areturn
+    iconst_1
+blort:
+    return
+.end method
+
+; dead code after return instruction
+.method public test_dead_return()V
+    ifeq blort
+    return
+    iconst_1
+blort:
+    return
+.end method
+
+; dead code after athrow instruction
+.method public test_dead_athrow()V
+    ifeq blort
+    athrow
+    iconst_1
+blort:
+    return
+.end method
+
+; dead code after wide ret instruction
+.method public test_dead_wideret()V
+    ifeq blort
+    ret 0x0100
+    iconst_1
+blort:
+    return
+.end method
+
+; dead code after goto_w instruction
+.method public test_dead_goto_w()V
+    goto_w blort
+    iconst_1
+blort:
+    return
+.end method
diff --git a/dx/tests/031-bb-dead-code/build b/dx/tests/031-bb-dead-code/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/031-bb-dead-code/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/031-bb-dead-code/expected.txt b/dx/tests/031-bb-dead-code/expected.txt
new file mode 100644
index 0000000..5f3d34e
--- /dev/null
+++ b/dx/tests/031-bb-dead-code/expected.txt
@@ -0,0 +1,189 @@
+reading blort.class...
+method <init> ()V
+block 0000: 0000..0004
+  0000: aload_0 // 00
+  0001: invokespecial method{java.lang.Object.<init>:()V}
+  next 0004
+block 0004: 0004..0005
+  0004: return
+  returns
+
+method test_deadend1 ()V
+block 0000: 0000..0001
+  0000: return
+  returns
+dead code 0001..0002
+
+method test_deadend2 ()V
+block 0000: 0000..0001
+  0000: ireturn
+  returns
+dead code 0001..0003
+
+method test_deadend3 ()V
+block 0000: 0000..0002
+  0000: aconst_null
+  0001: athrow
+  returns
+dead code 0002..0005
+
+method test_dead_exception_handler ()V
+block 0000: 0000..0001
+  0000: return
+  returns
+dead code 0001..0007
+
+method test_dead_goto ()V
+block 0000: 0000..0003
+  0000: goto 0004
+  next 0004
+dead code 0003..0004
+block 0004: 0004..0005
+  0004: return
+  returns
+
+method test_dead_ret ()V
+block 0000: 0000..0003
+  0000: ifeq 0006
+  next 0003
+  next 0006
+block 0003: 0003..0005
+  0003: ret 00
+  returns
+dead code 0005..0006
+block 0006: 0006..0007
+  0006: return
+  returns
+
+method test_dead_tableswitch ()V
+block 0000: 0000..0014
+  0000: tableswitch
+    default: 001b
+  next 001b
+dead code 0014..001b
+block 001b: 001b..001c
+  001b: return
+  returns
+
+method test_dead_lookupswitch ()V
+block 0000: 0000..001c
+  0000: lookupswitch
+    default: 001e
+  next 001e
+dead code 001c..001e
+block 001e: 001e..001f
+  001e: return
+  returns
+
+method test_dead_ireturn ()V
+block 0000: 0000..0003
+  0000: ifeq 0005
+  next 0003
+  next 0005
+block 0003: 0003..0004
+  0003: ireturn
+  returns
+dead code 0004..0005
+block 0005: 0005..0006
+  0005: return
+  returns
+
+method test_dead_lreturn ()V
+block 0000: 0000..0003
+  0000: ifeq 0005
+  next 0003
+  next 0005
+block 0003: 0003..0004
+  0003: lreturn
+  returns
+dead code 0004..0005
+block 0005: 0005..0006
+  0005: return
+  returns
+
+method test_dead_freturn ()V
+block 0000: 0000..0003
+  0000: ifeq 0005
+  next 0003
+  next 0005
+block 0003: 0003..0004
+  0003: freturn
+  returns
+dead code 0004..0005
+block 0005: 0005..0006
+  0005: return
+  returns
+
+method test_dead_dreturn ()V
+block 0000: 0000..0003
+  0000: ifeq 0005
+  next 0003
+  next 0005
+block 0003: 0003..0004
+  0003: dreturn
+  returns
+dead code 0004..0005
+block 0005: 0005..0006
+  0005: return
+  returns
+
+method test_dead_areturn ()V
+block 0000: 0000..0003
+  0000: ifeq 0005
+  next 0003
+  next 0005
+block 0003: 0003..0004
+  0003: areturn
+  returns
+dead code 0004..0005
+block 0005: 0005..0006
+  0005: return
+  returns
+
+method test_dead_return ()V
+block 0000: 0000..0003
+  0000: ifeq 0005
+  next 0003
+  next 0005
+block 0003: 0003..0004
+  0003: return
+  returns
+dead code 0004..0005
+block 0005: 0005..0006
+  0005: return
+  returns
+
+method test_dead_athrow ()V
+block 0000: 0000..0003
+  0000: ifeq 0005
+  next 0003
+  next 0005
+block 0003: 0003..0004
+  0003: athrow
+  returns
+dead code 0004..0005
+block 0005: 0005..0006
+  0005: return
+  returns
+
+method test_dead_wideret ()V
+block 0000: 0000..0003
+  0000: ifeq 0008
+  next 0003
+  next 0008
+block 0003: 0003..0007
+  0003: wide ret 0100
+  returns
+dead code 0007..0008
+block 0008: 0008..0009
+  0008: return
+  returns
+
+method test_dead_goto_w ()V
+block 0000: 0000..0005
+  0000: goto_w 00000006
+  next 0006
+dead code 0005..0006
+block 0006: 0006..0007
+  0006: return
+  returns
diff --git a/dx/tests/031-bb-dead-code/info.txt b/dx/tests/031-bb-dead-code/info.txt
new file mode 100644
index 0000000..d5aa398
--- /dev/null
+++ b/dx/tests/031-bb-dead-code/info.txt
@@ -0,0 +1,3 @@
+This test checks to see that the basic block recognizer properly omits
+dead code. There is at least one example of dead code after each instruction 
+that *doesn't* flow to the next instruction.
diff --git a/dx/tests/031-bb-dead-code/run b/dx/tests/031-bb-dead-code/run
new file mode 100644
index 0000000..7b57144
--- /dev/null
+++ b/dx/tests/031-bb-dead-code/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --basic-blocks --width=200 blort.class
diff --git a/dx/tests/032-bb-live-code/blort.class b/dx/tests/032-bb-live-code/blort.class
new file mode 100644
index 0000000..564f7ba
Binary files /dev/null and b/dx/tests/032-bb-live-code/blort.class differ
diff --git a/dx/tests/032-bb-live-code/blort.j b/dx/tests/032-bb-live-code/blort.j
new file mode 100644
index 0000000..05790bb
--- /dev/null
+++ b/dx/tests/032-bb-live-code/blort.j
@@ -0,0 +1,342 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public <init>()V
+    .limit locals 1
+
+    aload_0
+    invokespecial java/lang/Object/<init>()V
+    return
+.end method
+
+; Test that an exception handler for a live range is enlivened.
+.method public test_live_exception([I)V
+    nop
+    nop
+start:
+    aload_0
+    arraylength
+end1:
+    nop
+end2:
+    return
+handler1:
+    return
+handler2:
+    return
+    .catch java/lang/RuntimeException from start to end2 using handler2
+    .catch all from start to end1 using handler1
+.end method
+
+; Test that an exception handler for a live range is dead as long as
+; the covered code can't possibly throw.
+.method public test_dead_exception()V
+    nop
+    nop
+start:
+    nop
+end1:
+    nop
+end2:
+    return
+handler1:
+    return
+handler2:
+    return
+    .catch java/lang/RuntimeException from start to end2 using handler2
+    .catch all from start to end1 using handler1
+.end method
+
+; Test all the if* variants.
+.method public test_ifs()V
+    ifeq x0
+    ifne x1
+    iflt x2
+    ifge x3
+    ifgt x4
+    ifle x5
+    if_icmpeq x6
+    if_icmpne x7
+    if_icmplt x8
+    if_icmpge x9
+    if_icmpgt x10
+    if_icmple x11
+    if_acmpeq x12
+    if_acmpne x13
+    ifnull x14
+    ifnonnull x15
+    return
+x0:
+    return
+x1:
+    return
+x2:
+    return
+x3:
+    return
+x4:
+    return
+x5:
+    return
+x6:
+    return
+x7:
+    return
+x8:
+    return
+x9:
+    return
+x10:
+    return
+x11:
+    return
+x12:
+    return
+x13:
+    return
+x14:
+    return
+x15:
+    return
+.end method
+
+; Test jsr and jsr_w.
+.method public test_jsr()V
+    jsr j1
+    jsr_w j2
+    return
+j1:
+    astore_0
+    ret 0
+j2:
+    astore_0
+    ret_w 0
+.end method
+
+; Test tableswitch.
+.method public test_tableswitch()V
+    tableswitch 0x10
+        t1
+        t2
+        default: t3
+t1:
+    return
+t2:
+    return
+t3:
+    return
+.end method
+
+; Test lookupswitch.
+.method public test_lookupswitch()V
+    lookupswitch
+        0x05: s1
+        0x10: s2
+        default: s3
+s1:
+    return
+s2:
+    return
+s3:
+    return
+.end method
+
+; Test every non-branching op.
+.method public test_nonbranch()V
+    nop
+    aconst_null
+    iconst_m1
+    iconst_0
+    iconst_1
+    iconst_2
+    iconst_3
+    iconst_4
+    iconst_5
+    lconst_0
+    lconst_1
+    fconst_0
+    fconst_1
+    fconst_2
+    dconst_0
+    dconst_1
+    bipush 0x10
+    sipush 0x1000
+    ldc "x"
+    ldc_w "y"
+    ldc2_w 3.0
+    iload 5
+    lload 5
+    fload 5
+    dload 5
+    aload 5
+    iload_0
+    iload_1
+    iload_2
+    iload_3
+    lload_0
+    lload_1
+    lload_2
+    lload_3
+    fload_0
+    fload_1
+    fload_2
+    fload_3
+    dload_0
+    dload_1
+    dload_2
+    dload_3
+    aload_0
+    aload_1
+    aload_2
+    aload_3
+    iaload
+    laload
+    faload
+    daload
+    aaload
+    baload
+    caload
+    saload
+    istore 5
+    lstore 5
+    fstore 5
+    dstore 5
+    astore 5
+    istore_0
+    istore_1
+    istore_2
+    istore_3
+    lstore_0
+    lstore_1
+    lstore_2
+    lstore_3
+    fstore_0
+    fstore_1
+    fstore_2
+    fstore_3
+    dstore_0
+    dstore_1
+    dstore_2
+    dstore_3
+    astore_0
+    astore_1
+    astore_2
+    astore_3
+    iastore
+    lastore
+    fastore
+    dastore
+    aastore
+    bastore
+    castore
+    sastore
+    pop
+    pop2
+    dup
+    dup_x1
+    dup_x2
+    dup2
+    dup2_x1
+    dup2_x2
+    swap
+    iadd
+    ladd
+    fadd
+    dadd
+    isub
+    lsub
+    fsub
+    dsub
+    imul
+    lmul
+    fmul
+    dmul
+    idiv
+    ldiv
+    fdiv
+    ddiv
+    irem
+    lrem
+    frem
+    drem
+    ineg
+    lneg
+    fneg
+    dneg
+    ishl
+    lshl
+    ishr
+    lshr
+    iushr
+    lushr
+    iand
+    land
+    ior
+    lor
+    ixor
+    lxor
+    iinc 5 0x10
+    i2l
+    i2f
+    i2d
+    l2i
+    l2f
+    l2d
+    f2i
+    f2l
+    f2d
+    d2i
+    d2l
+    d2f
+    i2b
+    i2c
+    i2s
+    lcmp
+    fcmpl
+    fcmpg
+    dcmpl
+    dcmpg
+    getstatic blort/x I
+    putstatic blort/x I
+    getfield blort/x I
+    putfield blort/x I
+    invokevirtual blort/x()V
+    invokespecial blort/x()V
+    invokestatic blort/x()V
+    invokeinterface blort/x()V 1
+    new blort
+    newarray int
+    anewarray blort
+    arraylength
+    checkcast blort
+    instanceof blort
+    monitorenter
+    monitorexit
+    iload 0x100
+    lload 0x100
+    fload 0x100
+    dload 0x100
+    aload 0x100
+    istore 0x100
+    lstore 0x100
+    fstore 0x100
+    dstore 0x100
+    astore 0x100
+    iinc 0x123 0x321
+    multianewarray [[[I 2
+    return
+.end method
diff --git a/dx/tests/032-bb-live-code/build b/dx/tests/032-bb-live-code/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/032-bb-live-code/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/032-bb-live-code/expected.txt b/dx/tests/032-bb-live-code/expected.txt
new file mode 100644
index 0000000..ba21876
--- /dev/null
+++ b/dx/tests/032-bb-live-code/expected.txt
@@ -0,0 +1,496 @@
+reading blort.class...
+method <init> ()V
+block 0000: 0000..0004
+  0000: aload_0 // 00
+  0001: invokespecial method{java.lang.Object.<init>:()V}
+  next 0004
+block 0004: 0004..0005
+  0004: return
+  returns
+
+method test_live_exception ([I)V
+block 0000: 0000..0002
+  0000: nop
+  0001: nop
+  next 0002
+block 0002: 0002..0004
+  0002: aload_0 // 00
+  0003: arraylength
+  next 0007
+  next 0006
+  next 0004
+  catch java.lang.RuntimeException -> 0007
+  catch <any> -> 0006
+block 0004: 0004..0005
+  0004: nop
+  next 0005
+block 0005: 0005..0006
+  0005: return
+  returns
+block 0006: 0006..0007
+  0006: return
+  returns
+block 0007: 0007..0008
+  0007: return
+  returns
+
+method test_dead_exception ()V
+block 0000: 0000..0002
+  0000: nop
+  0001: nop
+  next 0002
+block 0002: 0002..0003
+  0002: nop
+  next 0003
+block 0003: 0003..0004
+  0003: nop
+  next 0004
+block 0004: 0004..0005
+  0004: return
+  returns
+block 0005: 0005..0006
+  0005: return
+  returns
+block 0006: 0006..0007
+  0006: return
+  returns
+
+method test_ifs ()V
+block 0000: 0000..0003
+  0000: ifeq 0031
+  next 0003
+  next 0031
+block 0003: 0003..0006
+  0003: ifne 0032
+  next 0006
+  next 0032
+block 0006: 0006..0009
+  0006: iflt 0033
+  next 0009
+  next 0033
+block 0009: 0009..000c
+  0009: ifge 0034
+  next 000c
+  next 0034
+block 000c: 000c..000f
+  000c: ifgt 0035
+  next 000f
+  next 0035
+block 000f: 000f..0012
+  000f: ifle 0036
+  next 0012
+  next 0036
+block 0012: 0012..0015
+  0012: if_icmpeq 0037
+  next 0015
+  next 0037
+block 0015: 0015..0018
+  0015: if_icmpne 0038
+  next 0018
+  next 0038
+block 0018: 0018..001b
+  0018: if_icmplt 0039
+  next 001b
+  next 0039
+block 001b: 001b..001e
+  001b: if_icmpge 003a
+  next 001e
+  next 003a
+block 001e: 001e..0021
+  001e: if_icmpgt 003b
+  next 0021
+  next 003b
+block 0021: 0021..0024
+  0021: if_icmple 003c
+  next 0024
+  next 003c
+block 0024: 0024..0027
+  0024: if_acmpeq 003d
+  next 0027
+  next 003d
+block 0027: 0027..002a
+  0027: if_acmpne 003e
+  next 002a
+  next 003e
+block 002a: 002a..002d
+  002a: ifnull 003f
+  next 002d
+  next 003f
+block 002d: 002d..0030
+  002d: ifnonnull 0040
+  next 0030
+  next 0040
+block 0030: 0030..0031
+  0030: return
+  returns
+block 0031: 0031..0032
+  0031: return
+  returns
+block 0032: 0032..0033
+  0032: return
+  returns
+block 0033: 0033..0034
+  0033: return
+  returns
+block 0034: 0034..0035
+  0034: return
+  returns
+block 0035: 0035..0036
+  0035: return
+  returns
+block 0036: 0036..0037
+  0036: return
+  returns
+block 0037: 0037..0038
+  0037: return
+  returns
+block 0038: 0038..0039
+  0038: return
+  returns
+block 0039: 0039..003a
+  0039: return
+  returns
+block 003a: 003a..003b
+  003a: return
+  returns
+block 003b: 003b..003c
+  003b: return
+  returns
+block 003c: 003c..003d
+  003c: return
+  returns
+block 003d: 003d..003e
+  003d: return
+  returns
+block 003e: 003e..003f
+  003e: return
+  returns
+block 003f: 003f..0040
+  003f: return
+  returns
+block 0040: 0040..0041
+  0040: return
+  returns
+
+method test_jsr ()V
+block 0000: 0000..0003
+  0000: jsr 0009
+  next 0003
+  next 0009
+block 0003: 0003..0008
+  0003: jsr_w 0000000c
+  next 0008
+  next 000c
+block 0008: 0008..0009
+  0008: return
+  returns
+block 0009: 0009..000c
+  0009: astore_0 // 00
+  000a: ret 00
+  returns
+block 000c: 000c..0011
+  000c: astore_0 // 00
+  000d: wide ret 0000
+  returns
+
+method test_tableswitch ()V
+block 0000: 0000..0018
+  0000: tableswitch
+    +00000010: 0018
+    +00000011: 0019
+    default: 001a
+  next 0018
+  next 0019
+  next 001a
+block 0018: 0018..0019
+  0018: return
+  returns
+block 0019: 0019..001a
+  0019: return
+  returns
+block 001a: 001a..001b
+  001a: return
+  returns
+
+method test_lookupswitch ()V
+block 0000: 0000..001c
+  0000: lookupswitch
+    +00000005: 001c
+    +00000010: 001d
+    default: 001e
+  next 001c
+  next 001d
+  next 001e
+block 001c: 001c..001d
+  001c: return
+  returns
+block 001d: 001d..001e
+  001d: return
+  returns
+block 001e: 001e..001f
+  001e: return
+  returns
+
+method test_nonbranch ()V
+block 0000: 0000..0017
+  0000: nop
+  0001: aconst_null
+  0002: iconst_m1 // #-01
+  0003: iconst_0 // #+00
+  0004: iconst_1 // #+01
+  0005: iconst_2 // #+02
+  0006: iconst_3 // #+03
+  0007: iconst_4 // #+04
+  0008: iconst_5 // #+05
+  0009: lconst_0 // +00
+  000a: lconst_1 // +01
+  000b: fconst_0 // 0.0
+  000c: fconst_1 // 1.0
+  000d: fconst_2 // 2.0
+  000e: dconst_0 // 0.0
+  000f: dconst_1 // 1.0
+  0010: bipush #+10
+  0012: sipush #+1000
+  0015: ldc string{"x"}
+  next 0017
+block 0017: 0017..001a
+  0017: ldc_w string{"y"}
+  next 001a
+block 001a: 001a..003c
+  001a: ldc2_w #4008000000000000 // 3.0
+  001d: iload 05
+  001f: lload 05 // category-2
+  0021: fload 05
+  0023: dload 05 // category-2
+  0025: aload 05
+  0027: iload_0 // 00
+  0028: iload_1 // 01
+  0029: iload_2 // 02
+  002a: iload_3 // 03
+  002b: lload_0 // 00, category-2
+  002c: lload_1 // 01, category-2
+  002d: lload_2 // 02, category-2
+  002e: lload_3 // 03, category-2
+  002f: fload_0 // 00
+  0030: fload_1 // 01
+  0031: fload_2 // 02
+  0032: fload_3 // 03
+  0033: dload_0 // 00, category-2
+  0034: dload_1 // 01, category-2
+  0035: dload_2 // 02, category-2
+  0036: dload_3 // 03, category-2
+  0037: aload_0 // 00
+  0038: aload_1 // 01
+  0039: aload_2 // 02
+  003a: aload_3 // 03
+  003b: iaload
+  next 003c
+block 003c: 003c..003d
+  003c: laload
+  next 003d
+block 003d: 003d..003e
+  003d: faload
+  next 003e
+block 003e: 003e..003f
+  003e: daload
+  next 003f
+block 003f: 003f..0040
+  003f: aaload
+  next 0040
+block 0040: 0040..0041
+  0040: baload
+  next 0041
+block 0041: 0041..0042
+  0041: caload
+  next 0042
+block 0042: 0042..0043
+  0042: saload
+  next 0043
+block 0043: 0043..0062
+  0043: istore 05
+  0045: lstore 05 // category-2
+  0047: fstore 05
+  0049: dstore 05 // category-2
+  004b: astore 05
+  004d: istore_0 // 00
+  004e: istore_1 // 01
+  004f: istore_2 // 02
+  0050: istore_3 // 03
+  0051: lstore_0 // 00, category-2
+  0052: lstore_1 // 01, category-2
+  0053: lstore_2 // 02, category-2
+  0054: lstore_3 // 03, category-2
+  0055: fstore_0 // 00
+  0056: fstore_1 // 01
+  0057: fstore_2 // 02
+  0058: fstore_3 // 03
+  0059: dstore_0 // 00, category-2
+  005a: dstore_1 // 01, category-2
+  005b: dstore_2 // 02, category-2
+  005c: dstore_3 // 03, category-2
+  005d: astore_0 // 00
+  005e: astore_1 // 01
+  005f: astore_2 // 02
+  0060: astore_3 // 03
+  0061: iastore
+  next 0062
+block 0062: 0062..0063
+  0062: lastore
+  next 0063
+block 0063: 0063..0064
+  0063: fastore
+  next 0064
+block 0064: 0064..0065
+  0064: dastore
+  next 0065
+block 0065: 0065..0066
+  0065: aastore
+  next 0066
+block 0066: 0066..0067
+  0066: bastore
+  next 0067
+block 0067: 0067..0068
+  0067: castore
+  next 0068
+block 0068: 0068..0069
+  0068: sastore
+  next 0069
+block 0069: 0069..007f
+  0069: pop
+  006a: pop2
+  006b: dup
+  006c: dup_x1
+  006d: dup_x2
+  006e: dup2
+  006f: dup2_x1
+  0070: dup2_x2
+  0071: swap
+  0072: iadd
+  0073: ladd
+  0074: fadd
+  0075: dadd
+  0076: isub
+  0077: lsub
+  0078: fsub
+  0079: dsub
+  007a: imul
+  007b: lmul
+  007c: fmul
+  007d: dmul
+  007e: idiv
+  next 007f
+block 007f: 007f..0080
+  007f: ldiv
+  next 0080
+block 0080: 0080..0083
+  0080: fdiv
+  0081: ddiv
+  0082: irem
+  next 0083
+block 0083: 0083..0084
+  0083: lrem
+  next 0084
+block 0084: 0084..00b0
+  0084: frem
+  0085: drem
+  0086: ineg
+  0087: lneg
+  0088: fneg
+  0089: dneg
+  008a: ishl
+  008b: lshl
+  008c: ishr
+  008d: lshr
+  008e: iushr
+  008f: lushr
+  0090: iand
+  0091: land
+  0092: ior
+  0093: lor
+  0094: ixor
+  0095: lxor
+  0096: iinc 05, #+10
+  0099: i2l
+  009a: i2f
+  009b: i2d
+  009c: l2i
+  009d: l2f
+  009e: l2d
+  009f: f2i
+  00a0: f2l
+  00a1: f2d
+  00a2: d2i
+  00a3: d2l
+  00a4: d2f
+  00a5: i2b
+  00a6: i2c
+  00a7: i2s
+  00a8: lcmp
+  00a9: fcmpl
+  00aa: fcmpg
+  00ab: dcmpl
+  00ac: dcmpg
+  00ad: getstatic field{blort.x:I}
+  next 00b0
+block 00b0: 00b0..00b3
+  00b0: putstatic field{blort.x:I}
+  next 00b3
+block 00b3: 00b3..00b6
+  00b3: getfield field{blort.x:I}
+  next 00b6
+block 00b6: 00b6..00b9
+  00b6: putfield field{blort.x:I}
+  next 00b9
+block 00b9: 00b9..00bc
+  00b9: invokevirtual method{blort.x:()V}
+  next 00bc
+block 00bc: 00bc..00bf
+  00bc: invokespecial method{blort.x:()V}
+  next 00bf
+block 00bf: 00bf..00c2
+  00bf: invokestatic method{blort.x:()V}
+  next 00c2
+block 00c2: 00c2..00c7
+  00c2: invokeinterface ifaceMethod{blort.x:()V}, 0001
+  next 00c7
+block 00c7: 00c7..00ca
+  00c7: new type{blort}
+  next 00ca
+block 00ca: 00ca..00cc
+  00ca: newarray int
+  next 00cc
+block 00cc: 00cc..00cf
+  00cc: anewarray type{blort}
+  next 00cf
+block 00cf: 00cf..00d0
+  00cf: arraylength
+  next 00d0
+block 00d0: 00d0..00d3
+  00d0: checkcast type{blort}
+  next 00d3
+block 00d3: 00d3..00d6
+  00d3: instanceof type{blort}
+  next 00d6
+block 00d6: 00d6..00d7
+  00d6: monitorenter
+  next 00d7
+block 00d7: 00d7..00d8
+  00d7: monitorexit
+  next 00d8
+block 00d8: 00d8..010a
+  00d8: wide iload 0100
+  00dc: wide lload 0100 // category-2
+  00e0: wide fload 0100
+  00e4: wide dload 0100 // category-2
+  00e8: wide aload 0100
+  00ec: wide istore 0100
+  00f0: wide lstore 0100 // category-2
+  00f4: wide fstore 0100
+  00f8: wide dstore 0100 // category-2
+  00fc: wide astore 0100
+  0100: wide iinc 0123, #+0321
+  0106: multianewarray type{int[][][]}, 02
+  next 010a
+block 010a: 010a..010b
+  010a: return
+  returns
diff --git a/dx/tests/032-bb-live-code/info.txt b/dx/tests/032-bb-live-code/info.txt
new file mode 100644
index 0000000..f94b435
--- /dev/null
+++ b/dx/tests/032-bb-live-code/info.txt
@@ -0,0 +1,5 @@
+This test checks to see that the basic block recognizer properly
+includes as live code all code which could possibly be flowed
+to. There is at least one example of each instruction which allows
+flow to the subsequent instruction, and all forks of each conditional
+branch are checked for liveness as well.
diff --git a/dx/tests/032-bb-live-code/run b/dx/tests/032-bb-live-code/run
new file mode 100644
index 0000000..7b57144
--- /dev/null
+++ b/dx/tests/032-bb-live-code/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --basic-blocks --width=200 blort.class
diff --git a/dx/tests/033-unit-IntList/expected.txt b/dx/tests/033-unit-IntList/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/033-unit-IntList/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/033-unit-IntList/info.txt b/dx/tests/033-unit-IntList/info.txt
new file mode 100644
index 0000000..7d7e8aa
--- /dev/null
+++ b/dx/tests/033-unit-IntList/info.txt
@@ -0,0 +1 @@
+Unit test for com.android.dx.util.IntList.
diff --git a/dx/tests/033-unit-IntList/run b/dx/tests/033-unit-IntList/run
new file mode 100644
index 0000000..936e533
--- /dev/null
+++ b/dx/tests/033-unit-IntList/run
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+dxtestsjar=$progdir/../framework/dx-tests.jar
+junitjar=$progdir/../framework/junit-host.jar
+
+for i in "$dxtestsjar" "$dxjar" "$junitjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+${JAVA} -cp $dxtestsjar:$dxjar:$junitjar junit.textui.TestRunner com.android.dx.util.IntListTest > unit-out.txt 2>&1
+
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/034-dex-minimal/blort.class b/dx/tests/034-dex-minimal/blort.class
new file mode 100644
index 0000000..5952951
Binary files /dev/null and b/dx/tests/034-dex-minimal/blort.class differ
diff --git a/dx/tests/034-dex-minimal/blort.j b/dx/tests/034-dex-minimal/blort.j
new file mode 100644
index 0000000..b4715b2
--- /dev/null
+++ b/dx/tests/034-dex-minimal/blort.j
@@ -0,0 +1,16 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
diff --git a/dx/tests/034-dex-minimal/build b/dx/tests/034-dex-minimal/build
new file mode 100644
index 0000000..2eeaff6
--- /dev/null
+++ b/dx/tests/034-dex-minimal/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j >/dev/null
diff --git a/dx/tests/034-dex-minimal/expected.txt b/dx/tests/034-dex-minimal/expected.txt
new file mode 100644
index 0000000..a8f81c8
--- /dev/null
+++ b/dx/tests/034-dex-minimal/expected.txt
@@ -0,0 +1,70 @@
+000000: 6465 780a 3033|magic: "dex\n035\0"
+000006: 3500          |
+000008: be0b 70d9     |checksum
+00000c: 1d9c 3f88 730d|signature
+000012: 0ed6 caa3 77d4|
+000018: 5204 65e7 322d|
+00001e: 365a          |
+000020: 8c00 0000     |file_size:       0000008c
+000024: 7000 0000     |header_size:     00000070
+000028: 7856 3412     |endian_tag:      12345678
+00002c: 0000 0000     |link_size:       0
+000030: 0000 0000     |link_off:        0
+000034: 7000 0000     |map_off:         00000070
+000038: 0000 0000     |string_ids_size: 00000000
+00003c: 0000 0000     |string_ids_off:  00000000
+000040: 0000 0000     |type_ids_size:   00000000
+000044: 0000 0000     |type_ids_off:    00000000
+000048: 0000 0000     |proto_ids_size:  00000000
+00004c: 0000 0000     |proto_ids_off:   00000000
+000050: 0000 0000     |field_ids_size:  00000000
+000054: 0000 0000     |field_ids_off:   00000000
+000058: 0000 0000     |method_ids_size: 00000000
+00005c: 0000 0000     |method_ids_off:  00000000
+000060: 0000 0000     |class_defs_size: 00000000
+000064: 0000 0000     |class_defs_off:  00000000
+000068: 1c00 0000     |data_size:       0000001c
+00006c: 7000 0000     |data_off:        00000070
+                      |
+                      |string_ids:
+                      |
+                      |type_ids:
+                      |
+                      |proto_ids:
+                      |
+                      |field_ids:
+                      |
+                      |method_ids:
+                      |
+                      |class_defs:
+                      |
+                      |word_data:
+                      |
+                      |
+                      |string_data:
+                      |
+                      |byte_data:
+                      |
+                      |
+                      |map:
+                      |[70] map list
+000070: 0200 0000     |  size: 00000002
+                      |[74] header_item map
+000074: 0000          |  type:   0000 // TYPE_HEADER_ITEM
+000076: 0000          |  unused: 0
+000078: 0100 0000     |  size:   00000001
+00007c: 0000 0000     |  offset: 00000000
+                      |[80] map_list map
+000080: 0010          |  type:   1000 // TYPE_MAP_LIST
+000082: 0000          |  unused: 0
+000084: 0100 0000     |  size:   00000001
+000088: 7000 0000     |  offset: 00000070
+                      |
+                      |statistics:
+                      |  header: 1 item; 112 bytes total
+                      |    112 bytes/item
+                      |  map list: 1 item; 28 bytes total
+                      |    28 bytes/item
+
+processing blort.class...
+Good!
diff --git a/dx/tests/034-dex-minimal/info.txt b/dx/tests/034-dex-minimal/info.txt
new file mode 100644
index 0000000..13bb9ab
--- /dev/null
+++ b/dx/tests/034-dex-minimal/info.txt
@@ -0,0 +1,9 @@
+This is a smoke test of a couple cases of minimal dex creation:
+
+The first test tries to create the truly minimal dex file by using the
+--no-files option. The output dump of this is checked to make sure it
+is exactly correct. (There is arguably only one "right" answer.)
+
+The second test tries to convert a minimal classfile and ensures that
+the conversion runs without failure, though the contents of the
+converted file are not checked for correctness.
diff --git a/dx/tests/034-dex-minimal/run b/dx/tests/034-dex-minimal/run
new file mode 100644
index 0000000..a7d3074
--- /dev/null
+++ b/dx/tests/034-dex-minimal/run
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --dump-to=- --no-files
+echo ""
+
+dx --verbose --debug --dex --output=blort.dex blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/035-dex-instance-var/blort.class b/dx/tests/035-dex-instance-var/blort.class
new file mode 100644
index 0000000..e356a4a
Binary files /dev/null and b/dx/tests/035-dex-instance-var/blort.class differ
diff --git a/dx/tests/035-dex-instance-var/blort.j b/dx/tests/035-dex-instance-var/blort.j
new file mode 100644
index 0000000..1bcdf8e
--- /dev/null
+++ b/dx/tests/035-dex-instance-var/blort.j
@@ -0,0 +1,18 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.field public x I
diff --git a/dx/tests/035-dex-instance-var/build b/dx/tests/035-dex-instance-var/build
new file mode 100644
index 0000000..2eeaff6
--- /dev/null
+++ b/dx/tests/035-dex-instance-var/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j >/dev/null
diff --git a/dx/tests/035-dex-instance-var/expected.txt b/dx/tests/035-dex-instance-var/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/035-dex-instance-var/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/035-dex-instance-var/info.txt b/dx/tests/035-dex-instance-var/info.txt
new file mode 100644
index 0000000..294c9eb
--- /dev/null
+++ b/dx/tests/035-dex-instance-var/info.txt
@@ -0,0 +1,4 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test is of a classfile with
+just an instance variable.
diff --git a/dx/tests/035-dex-instance-var/run b/dx/tests/035-dex-instance-var/run
new file mode 100644
index 0000000..0a48413
--- /dev/null
+++ b/dx/tests/035-dex-instance-var/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/036-dex-static-var/blort.class b/dx/tests/036-dex-static-var/blort.class
new file mode 100644
index 0000000..aa2164e
Binary files /dev/null and b/dx/tests/036-dex-static-var/blort.class differ
diff --git a/dx/tests/036-dex-static-var/blort.j b/dx/tests/036-dex-static-var/blort.j
new file mode 100644
index 0000000..260f446
--- /dev/null
+++ b/dx/tests/036-dex-static-var/blort.j
@@ -0,0 +1,18 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.field public static x I
diff --git a/dx/tests/036-dex-static-var/build b/dx/tests/036-dex-static-var/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/036-dex-static-var/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/036-dex-static-var/expected.txt b/dx/tests/036-dex-static-var/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/036-dex-static-var/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/036-dex-static-var/info.txt b/dx/tests/036-dex-static-var/info.txt
new file mode 100644
index 0000000..5c562eb
--- /dev/null
+++ b/dx/tests/036-dex-static-var/info.txt
@@ -0,0 +1,4 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test is of a classfile with
+just a static variable.
diff --git a/dx/tests/036-dex-static-var/run b/dx/tests/036-dex-static-var/run
new file mode 100644
index 0000000..0a48413
--- /dev/null
+++ b/dx/tests/036-dex-static-var/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/037-dex-static-final-var/blort.class b/dx/tests/037-dex-static-final-var/blort.class
new file mode 100644
index 0000000..ca92954
Binary files /dev/null and b/dx/tests/037-dex-static-final-var/blort.class differ
diff --git a/dx/tests/037-dex-static-final-var/blort.j b/dx/tests/037-dex-static-final-var/blort.j
new file mode 100644
index 0000000..ac0332e
--- /dev/null
+++ b/dx/tests/037-dex-static-final-var/blort.j
@@ -0,0 +1,18 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.field public static final x I = 10
diff --git a/dx/tests/037-dex-static-final-var/build b/dx/tests/037-dex-static-final-var/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/037-dex-static-final-var/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/037-dex-static-final-var/expected.txt b/dx/tests/037-dex-static-final-var/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/037-dex-static-final-var/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/037-dex-static-final-var/info.txt b/dx/tests/037-dex-static-final-var/info.txt
new file mode 100644
index 0000000..03d798f
--- /dev/null
+++ b/dx/tests/037-dex-static-final-var/info.txt
@@ -0,0 +1,4 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test is of a classfile with
+just a final static variable.
diff --git a/dx/tests/037-dex-static-final-var/run b/dx/tests/037-dex-static-final-var/run
new file mode 100644
index 0000000..0a48413
--- /dev/null
+++ b/dx/tests/037-dex-static-final-var/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/038-dex-instance-method/blort.class b/dx/tests/038-dex-instance-method/blort.class
new file mode 100644
index 0000000..a06bb86
Binary files /dev/null and b/dx/tests/038-dex-instance-method/blort.class differ
diff --git a/dx/tests/038-dex-instance-method/blort.j b/dx/tests/038-dex-instance-method/blort.j
new file mode 100644
index 0000000..7ddd7b5
--- /dev/null
+++ b/dx/tests/038-dex-instance-method/blort.j
@@ -0,0 +1,21 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public blort()V
+    nop
+    return
+.end method
diff --git a/dx/tests/038-dex-instance-method/build b/dx/tests/038-dex-instance-method/build
new file mode 100644
index 0000000..2eeaff6
--- /dev/null
+++ b/dx/tests/038-dex-instance-method/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j >/dev/null
diff --git a/dx/tests/038-dex-instance-method/expected.txt b/dx/tests/038-dex-instance-method/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/038-dex-instance-method/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/038-dex-instance-method/info.txt b/dx/tests/038-dex-instance-method/info.txt
new file mode 100644
index 0000000..6aa93c3
--- /dev/null
+++ b/dx/tests/038-dex-instance-method/info.txt
@@ -0,0 +1,4 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test is of a classfile with
+just an instance method.
diff --git a/dx/tests/038-dex-instance-method/run b/dx/tests/038-dex-instance-method/run
new file mode 100644
index 0000000..0a48413
--- /dev/null
+++ b/dx/tests/038-dex-instance-method/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/039-dex-static-method/blort.class b/dx/tests/039-dex-static-method/blort.class
new file mode 100644
index 0000000..c945442
Binary files /dev/null and b/dx/tests/039-dex-static-method/blort.class differ
diff --git a/dx/tests/039-dex-static-method/blort.j b/dx/tests/039-dex-static-method/blort.j
new file mode 100644
index 0000000..5b74c57
--- /dev/null
+++ b/dx/tests/039-dex-static-method/blort.j
@@ -0,0 +1,21 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public static blort()V
+    nop
+    return
+.end method
diff --git a/dx/tests/039-dex-static-method/build b/dx/tests/039-dex-static-method/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/039-dex-static-method/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/039-dex-static-method/expected.txt b/dx/tests/039-dex-static-method/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/039-dex-static-method/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/039-dex-static-method/info.txt b/dx/tests/039-dex-static-method/info.txt
new file mode 100644
index 0000000..59c8d6e
--- /dev/null
+++ b/dx/tests/039-dex-static-method/info.txt
@@ -0,0 +1,4 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test is of a classfile with
+just a static method.
diff --git a/dx/tests/039-dex-static-method/run b/dx/tests/039-dex-static-method/run
new file mode 100644
index 0000000..0a48413
--- /dev/null
+++ b/dx/tests/039-dex-static-method/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/040-dex-constructor/blort.class b/dx/tests/040-dex-constructor/blort.class
new file mode 100644
index 0000000..1c775aa
Binary files /dev/null and b/dx/tests/040-dex-constructor/blort.class differ
diff --git a/dx/tests/040-dex-constructor/blort.j b/dx/tests/040-dex-constructor/blort.j
new file mode 100644
index 0000000..e0ae441
--- /dev/null
+++ b/dx/tests/040-dex-constructor/blort.j
@@ -0,0 +1,21 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public <init>()V
+    nop
+    return
+.end method
diff --git a/dx/tests/040-dex-constructor/build b/dx/tests/040-dex-constructor/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/040-dex-constructor/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/040-dex-constructor/expected.txt b/dx/tests/040-dex-constructor/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/040-dex-constructor/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/040-dex-constructor/info.txt b/dx/tests/040-dex-constructor/info.txt
new file mode 100644
index 0000000..65eef93
--- /dev/null
+++ b/dx/tests/040-dex-constructor/info.txt
@@ -0,0 +1,4 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test is of a classfile with
+just a constructor.
diff --git a/dx/tests/040-dex-constructor/run b/dx/tests/040-dex-constructor/run
new file mode 100644
index 0000000..0a48413
--- /dev/null
+++ b/dx/tests/040-dex-constructor/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/041-dex-abstract-method/blort.class b/dx/tests/041-dex-abstract-method/blort.class
new file mode 100644
index 0000000..bf3750e
Binary files /dev/null and b/dx/tests/041-dex-abstract-method/blort.class differ
diff --git a/dx/tests/041-dex-abstract-method/blort.j b/dx/tests/041-dex-abstract-method/blort.j
new file mode 100644
index 0000000..8074fae
--- /dev/null
+++ b/dx/tests/041-dex-abstract-method/blort.j
@@ -0,0 +1,19 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public abstract blort()V
+.end method
diff --git a/dx/tests/041-dex-abstract-method/build b/dx/tests/041-dex-abstract-method/build
new file mode 100644
index 0000000..2eeaff6
--- /dev/null
+++ b/dx/tests/041-dex-abstract-method/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j >/dev/null
diff --git a/dx/tests/041-dex-abstract-method/expected.txt b/dx/tests/041-dex-abstract-method/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/041-dex-abstract-method/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/041-dex-abstract-method/info.txt b/dx/tests/041-dex-abstract-method/info.txt
new file mode 100644
index 0000000..e004388
--- /dev/null
+++ b/dx/tests/041-dex-abstract-method/info.txt
@@ -0,0 +1,4 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test is of a classfile with
+just an abstract instance method.
diff --git a/dx/tests/041-dex-abstract-method/run b/dx/tests/041-dex-abstract-method/run
new file mode 100644
index 0000000..0a48413
--- /dev/null
+++ b/dx/tests/041-dex-abstract-method/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/042-dex-ignore-result/Blort.class b/dx/tests/042-dex-ignore-result/Blort.class
new file mode 100644
index 0000000..823ba6d
Binary files /dev/null and b/dx/tests/042-dex-ignore-result/Blort.class differ
diff --git a/dx/tests/042-dex-ignore-result/Blort.java b/dx/tests/042-dex-ignore-result/Blort.java
new file mode 100644
index 0000000..2df4e66
--- /dev/null
+++ b/dx/tests/042-dex-ignore-result/Blort.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    static public int hello() {
+        return 10;
+    }
+
+    static public void ouch() {
+        hello();
+        hello();
+    }
+}
diff --git a/dx/tests/042-dex-ignore-result/build b/dx/tests/042-dex-ignore-result/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/042-dex-ignore-result/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/042-dex-ignore-result/expected.txt b/dx/tests/042-dex-ignore-result/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/042-dex-ignore-result/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/042-dex-ignore-result/info.txt b/dx/tests/042-dex-ignore-result/info.txt
new file mode 100644
index 0000000..6289664
--- /dev/null
+++ b/dx/tests/042-dex-ignore-result/info.txt
@@ -0,0 +1,5 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test is of the case of a
+method call to a method which returns a value, where that value is
+ignored.
diff --git a/dx/tests/042-dex-ignore-result/run b/dx/tests/042-dex-ignore-result/run
new file mode 100644
index 0000000..06288ca
--- /dev/null
+++ b/dx/tests/042-dex-ignore-result/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex Blort.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/043-dex-two-classes/Blort.class b/dx/tests/043-dex-two-classes/Blort.class
new file mode 100644
index 0000000..95827d7
Binary files /dev/null and b/dx/tests/043-dex-two-classes/Blort.class differ
diff --git a/dx/tests/043-dex-two-classes/Blort.java b/dx/tests/043-dex-two-classes/Blort.java
new file mode 100644
index 0000000..235907d
--- /dev/null
+++ b/dx/tests/043-dex-two-classes/Blort.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    // This space intentionally left blank.
+}
diff --git a/dx/tests/043-dex-two-classes/Zorch.class b/dx/tests/043-dex-two-classes/Zorch.class
new file mode 100644
index 0000000..6e57bb5
Binary files /dev/null and b/dx/tests/043-dex-two-classes/Zorch.class differ
diff --git a/dx/tests/043-dex-two-classes/Zorch.java b/dx/tests/043-dex-two-classes/Zorch.java
new file mode 100644
index 0000000..c9dc4eb
--- /dev/null
+++ b/dx/tests/043-dex-two-classes/Zorch.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Zorch
+{
+    // This space intentionally left blank.
+}
diff --git a/dx/tests/043-dex-two-classes/build b/dx/tests/043-dex-two-classes/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/043-dex-two-classes/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/043-dex-two-classes/expected.txt b/dx/tests/043-dex-two-classes/expected.txt
new file mode 100644
index 0000000..e88eb13
--- /dev/null
+++ b/dx/tests/043-dex-two-classes/expected.txt
@@ -0,0 +1,3 @@
+processing Blort.class...
+processing Zorch.class...
+Good!
diff --git a/dx/tests/043-dex-two-classes/info.txt b/dx/tests/043-dex-two-classes/info.txt
new file mode 100644
index 0000000..785fb9b
--- /dev/null
+++ b/dx/tests/043-dex-two-classes/info.txt
@@ -0,0 +1,4 @@
+This is a smoke test of dex conversion, which ensures that the
+conversion runs without failure, though the contents of the converted
+file are not checked for correctness. This test just makes sure that
+an attempt to combine two classes into a .dex file succeeds.
diff --git a/dx/tests/043-dex-two-classes/run b/dx/tests/043-dex-two-classes/run
new file mode 100644
index 0000000..9158f09
--- /dev/null
+++ b/dx/tests/043-dex-two-classes/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --verbose --dex --output=blort.dex *.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/044-dex-math-ops/Blort.class b/dx/tests/044-dex-math-ops/Blort.class
new file mode 100644
index 0000000..2aa89a9
Binary files /dev/null and b/dx/tests/044-dex-math-ops/Blort.class differ
diff --git a/dx/tests/044-dex-math-ops/Blort.java b/dx/tests/044-dex-math-ops/Blort.java
new file mode 100644
index 0000000..75095b5
--- /dev/null
+++ b/dx/tests/044-dex-math-ops/Blort.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    private volatile int i;
+    private volatile long l;
+    private volatile float f;
+    private volatile double d;
+
+    public void blort(int i1, int i2) {
+        i = -i1;
+        i = ~i1;
+        i = i1 + i2;
+        i = i1 - i2;
+        i = i1 * i2;
+        i = i1 / i2;
+        i = i1 % i2;
+        i = i1 & i2;
+        i = i1 | i2;
+        i = i1 ^ i2;
+        i = i1 << i2;
+        i = i1 >> i2;
+        i = i1 >>> i2;
+    }
+
+    public void blort(long l1, long l2) {
+        l = -l1;
+        l = ~l1;
+        l = l1 + l2;
+        l = l1 - l2;
+        l = l1 * l2;
+        l = l1 / l2;
+        l = l1 % l2;
+        l = l1 & l2;
+        l = l1 | l2;
+        l = l1 ^ l2;
+        l = l1 << l2;
+        l = l1 >> l2;
+        l = l1 >>> l2;
+    }
+
+    public void blort(float f1, float f2) {
+        f = -f1;
+        f = f1 + f2;
+        f = f1 - f2;
+        f = f1 * f2;
+        f = f1 / f2;
+        f = f1 % f2;
+    }
+
+    public void blort(double d1, double d2) {
+        d = -d1;
+        d = d1 + d2;
+        d = d1 - d2;
+        d = d1 * d2;
+        d = d1 / d2;
+        d = d1 % d2;
+    }
+}
diff --git a/dx/tests/044-dex-math-ops/build b/dx/tests/044-dex-math-ops/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/044-dex-math-ops/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/044-dex-math-ops/expected.txt b/dx/tests/044-dex-math-ops/expected.txt
new file mode 100644
index 0000000..1ca84cb
--- /dev/null
+++ b/dx/tests/044-dex-math-ops/expected.txt
@@ -0,0 +1,213 @@
+Blort.blort:(DD)V:
+regs: 0010; ins: 0005; outs: 0000
+  0000: move-object v0, v11
+  0001: move-wide v1, v12
+  0002: move-wide v3, v14
+  0003: move-object v5, v0
+  0004: move-wide v6, v1
+  0005: neg-double v6, v6
+  0006: iput-wide v6, v5, Blort.d:D
+  0008: move-object v5, v0
+  0009: move-wide v6, v1
+  000a: move-wide v8, v3
+  000b: add-double/2addr v6, v8
+  000c: iput-wide v6, v5, Blort.d:D
+  000e: move-object v5, v0
+  000f: move-wide v6, v1
+  0010: move-wide v8, v3
+  0011: sub-double/2addr v6, v8
+  0012: iput-wide v6, v5, Blort.d:D
+  0014: move-object v5, v0
+  0015: move-wide v6, v1
+  0016: move-wide v8, v3
+  0017: mul-double/2addr v6, v8
+  0018: iput-wide v6, v5, Blort.d:D
+  001a: move-object v5, v0
+  001b: move-wide v6, v1
+  001c: move-wide v8, v3
+  001d: div-double/2addr v6, v8
+  001e: iput-wide v6, v5, Blort.d:D
+  0020: move-object v5, v0
+  0021: move-wide v6, v1
+  0022: move-wide v8, v3
+  0023: rem-double/2addr v6, v8
+  0024: iput-wide v6, v5, Blort.d:D
+  0026: return-void
+Blort.blort:(FF)V:
+regs: 0009; ins: 0003; outs: 0000
+  0000: move-object v0, v6
+  0001: move v1, v7
+  0002: move v2, v8
+  0003: move-object v3, v0
+  0004: move v4, v1
+  0005: neg-float v4, v4
+  0006: iput v4, v3, Blort.f:F
+  0008: move-object v3, v0
+  0009: move v4, v1
+  000a: move v5, v2
+  000b: add-float/2addr v4, v5
+  000c: iput v4, v3, Blort.f:F
+  000e: move-object v3, v0
+  000f: move v4, v1
+  0010: move v5, v2
+  0011: sub-float/2addr v4, v5
+  0012: iput v4, v3, Blort.f:F
+  0014: move-object v3, v0
+  0015: move v4, v1
+  0016: move v5, v2
+  0017: mul-float/2addr v4, v5
+  0018: iput v4, v3, Blort.f:F
+  001a: move-object v3, v0
+  001b: move v4, v1
+  001c: move v5, v2
+  001d: div-float/2addr v4, v5
+  001e: iput v4, v3, Blort.f:F
+  0020: move-object v3, v0
+  0021: move v4, v1
+  0022: move v5, v2
+  0023: rem-float/2addr v4, v5
+  0024: iput v4, v3, Blort.f:F
+  0026: return-void
+Blort.blort:(II)V:
+regs: 0009; ins: 0003; outs: 0000
+  0000: move-object v0, v6
+  0001: move v1, v7
+  0002: move v2, v8
+  0003: move-object v3, v0
+  0004: move v4, v1
+  0005: neg-int v4, v4
+  0006: iput v4, v3, Blort.i:I
+  0008: move-object v3, v0
+  0009: move v4, v1
+  000a: const/4 v5, #int -1 // #f
+  000b: xor-int/lit8 v4, v4, #int -1 // #ff
+  000d: iput v4, v3, Blort.i:I
+  000f: move-object v3, v0
+  0010: move v4, v1
+  0011: move v5, v2
+  0012: add-int/2addr v4, v5
+  0013: iput v4, v3, Blort.i:I
+  0015: move-object v3, v0
+  0016: move v4, v1
+  0017: move v5, v2
+  0018: sub-int/2addr v4, v5
+  0019: iput v4, v3, Blort.i:I
+  001b: move-object v3, v0
+  001c: move v4, v1
+  001d: move v5, v2
+  001e: mul-int/2addr v4, v5
+  001f: iput v4, v3, Blort.i:I
+  0021: move-object v3, v0
+  0022: move v4, v1
+  0023: move v5, v2
+  0024: div-int/2addr v4, v5
+  0025: iput v4, v3, Blort.i:I
+  0027: move-object v3, v0
+  0028: move v4, v1
+  0029: move v5, v2
+  002a: rem-int/2addr v4, v5
+  002b: iput v4, v3, Blort.i:I
+  002d: move-object v3, v0
+  002e: move v4, v1
+  002f: move v5, v2
+  0030: and-int/2addr v4, v5
+  0031: iput v4, v3, Blort.i:I
+  0033: move-object v3, v0
+  0034: move v4, v1
+  0035: move v5, v2
+  0036: or-int/2addr v4, v5
+  0037: iput v4, v3, Blort.i:I
+  0039: move-object v3, v0
+  003a: move v4, v1
+  003b: move v5, v2
+  003c: xor-int/2addr v4, v5
+  003d: iput v4, v3, Blort.i:I
+  003f: move-object v3, v0
+  0040: move v4, v1
+  0041: move v5, v2
+  0042: shl-int/2addr v4, v5
+  0043: iput v4, v3, Blort.i:I
+  0045: move-object v3, v0
+  0046: move v4, v1
+  0047: move v5, v2
+  0048: shr-int/2addr v4, v5
+  0049: iput v4, v3, Blort.i:I
+  004b: move-object v3, v0
+  004c: move v4, v1
+  004d: move v5, v2
+  004e: ushr-int/2addr v4, v5
+  004f: iput v4, v3, Blort.i:I
+  0051: return-void
+Blort.blort:(JJ)V:
+regs: 0010; ins: 0005; outs: 0000
+  0000: move-object v0, v11
+  0001: move-wide v1, v12
+  0002: move-wide v3, v14
+  0003: move-object v5, v0
+  0004: move-wide v6, v1
+  0005: neg-long v6, v6
+  0006: iput-wide v6, v5, Blort.l:J
+  0008: move-object v5, v0
+  0009: move-wide v6, v1
+  000a: const-wide/16 v8, #long -1 // #ffff
+  000c: xor-long/2addr v6, v8
+  000d: iput-wide v6, v5, Blort.l:J
+  000f: move-object v5, v0
+  0010: move-wide v6, v1
+  0011: move-wide v8, v3
+  0012: add-long/2addr v6, v8
+  0013: iput-wide v6, v5, Blort.l:J
+  0015: move-object v5, v0
+  0016: move-wide v6, v1
+  0017: move-wide v8, v3
+  0018: sub-long/2addr v6, v8
+  0019: iput-wide v6, v5, Blort.l:J
+  001b: move-object v5, v0
+  001c: move-wide v6, v1
+  001d: move-wide v8, v3
+  001e: mul-long/2addr v6, v8
+  001f: iput-wide v6, v5, Blort.l:J
+  0021: move-object v5, v0
+  0022: move-wide v6, v1
+  0023: move-wide v8, v3
+  0024: div-long/2addr v6, v8
+  0025: iput-wide v6, v5, Blort.l:J
+  0027: move-object v5, v0
+  0028: move-wide v6, v1
+  0029: move-wide v8, v3
+  002a: rem-long/2addr v6, v8
+  002b: iput-wide v6, v5, Blort.l:J
+  002d: move-object v5, v0
+  002e: move-wide v6, v1
+  002f: move-wide v8, v3
+  0030: and-long/2addr v6, v8
+  0031: iput-wide v6, v5, Blort.l:J
+  0033: move-object v5, v0
+  0034: move-wide v6, v1
+  0035: move-wide v8, v3
+  0036: or-long/2addr v6, v8
+  0037: iput-wide v6, v5, Blort.l:J
+  0039: move-object v5, v0
+  003a: move-wide v6, v1
+  003b: move-wide v8, v3
+  003c: xor-long/2addr v6, v8
+  003d: iput-wide v6, v5, Blort.l:J
+  003f: move-object v5, v0
+  0040: move-wide v6, v1
+  0041: move-wide v8, v3
+  0042: long-to-int v8, v8
+  0043: shl-long/2addr v6, v8
+  0044: iput-wide v6, v5, Blort.l:J
+  0046: move-object v5, v0
+  0047: move-wide v6, v1
+  0048: move-wide v8, v3
+  0049: long-to-int v8, v8
+  004a: shr-long/2addr v6, v8
+  004b: iput-wide v6, v5, Blort.l:J
+  004d: move-object v5, v0
+  004e: move-wide v6, v1
+  004f: move-wide v8, v3
+  0050: long-to-int v8, v8
+  0051: ushr-long/2addr v6, v8
+  0052: iput-wide v6, v5, Blort.l:J
+  0054: return-void
diff --git a/dx/tests/044-dex-math-ops/info.txt b/dx/tests/044-dex-math-ops/info.txt
new file mode 100644
index 0000000..733dcb6
--- /dev/null
+++ b/dx/tests/044-dex-math-ops/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+simple uses of all the math ops end up getting converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/044-dex-math-ops/run b/dx/tests/044-dex-math-ops/run
new file mode 100644
index 0000000..2146f96
--- /dev/null
+++ b/dx/tests/044-dex-math-ops/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.blort *.class
diff --git a/dx/tests/045-dex-switch-ops/Blort.class b/dx/tests/045-dex-switch-ops/Blort.class
new file mode 100644
index 0000000..ff3ed82
Binary files /dev/null and b/dx/tests/045-dex-switch-ops/Blort.class differ
diff --git a/dx/tests/045-dex-switch-ops/Blort.java b/dx/tests/045-dex-switch-ops/Blort.java
new file mode 100644
index 0000000..598bd69
--- /dev/null
+++ b/dx/tests/045-dex-switch-ops/Blort.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public int switchTest1(int x) {
+        switch (x) {
+            case 1: {
+                return 2;
+            }
+            case 2: {
+                return 3;
+            }
+            case 3: {
+                return 4;
+            }
+            case 4: {
+                return 5;
+            }
+        }
+
+        return 6;
+    }
+
+    public int switchTest2(int x) {
+        switch (x) {
+            case 1: {
+                return 2;
+            }
+            case 10: {
+                return 3;
+            }
+            case 100: {
+                return 4;
+            }
+            case 1000: {
+                return 50;
+            }
+        }
+
+        return 6;
+    }
+}
diff --git a/dx/tests/045-dex-switch-ops/build b/dx/tests/045-dex-switch-ops/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/045-dex-switch-ops/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/045-dex-switch-ops/expected.txt b/dx/tests/045-dex-switch-ops/expected.txt
new file mode 100644
index 0000000..80bc808
--- /dev/null
+++ b/dx/tests/045-dex-switch-ops/expected.txt
@@ -0,0 +1,53 @@
+Blort.switchTest1:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: packed-switch v2, 0016 // +0013
+  0006: const/4 v2, #int 6 // #6
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 2 // #2
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: const/4 v2, #int 3 // #3
+  000d: move v0, v2
+  000e: goto 0008 // -0006
+  000f: const/4 v2, #int 4 // #4
+  0010: move v0, v2
+  0011: goto 0008 // -0009
+  0012: const/4 v2, #int 5 // #5
+  0013: move v0, v2
+  0014: goto 0008 // -000c
+  0015: nop // spacer
+  0016: packed-switch-payload // for switch @ 0003
+          1: 00000009 // +00000006
+          2: 0000000c // +00000009
+          3: 0000000f // +0000000c
+          4: 00000012 // +0000000f
+Blort.switchTest2:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: sparse-switch v2, 0016 // +0013
+  0006: const/4 v2, #int 6 // #6
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 2 // #2
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: const/4 v2, #int 3 // #3
+  000d: move v0, v2
+  000e: goto 0008 // -0006
+  000f: const/4 v2, #int 4 // #4
+  0010: move v0, v2
+  0011: goto 0008 // -0009
+  0012: const/16 v2, #int 50 // #0032
+  0014: move v0, v2
+  0015: goto 0008 // -000d
+  0016: sparse-switch-payload // for switch @ 0003
+          1: 00000009 // +00000006
+          10: 0000000c // +00000009
+          100: 0000000f // +0000000c
+          1000: 00000012 // +0000000f
diff --git a/dx/tests/045-dex-switch-ops/info.txt b/dx/tests/045-dex-switch-ops/info.txt
new file mode 100644
index 0000000..492dc0b
--- /dev/null
+++ b/dx/tests/045-dex-switch-ops/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+both kinds of switch op get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/045-dex-switch-ops/run b/dx/tests/045-dex-switch-ops/run
new file mode 100644
index 0000000..95c30dd
--- /dev/null
+++ b/dx/tests/045-dex-switch-ops/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.switchTest'*' *.class
diff --git a/dx/tests/046-dex-exceptions/Blort.class b/dx/tests/046-dex-exceptions/Blort.class
new file mode 100644
index 0000000..fbbf61f
Binary files /dev/null and b/dx/tests/046-dex-exceptions/Blort.class differ
diff --git a/dx/tests/046-dex-exceptions/Blort.java b/dx/tests/046-dex-exceptions/Blort.java
new file mode 100644
index 0000000..a0b6c0b
--- /dev/null
+++ b/dx/tests/046-dex-exceptions/Blort.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static int maybeThrow(int x) {
+        if (x < 10) {
+            throw new RuntimeException();
+        }
+
+        return x;
+    }
+
+    public static int exTest1(int x) {
+        try {
+            maybeThrow(x);
+            return 1;
+        } catch (RuntimeException ex) {
+            return 2;
+        }
+    }
+
+    public static int exTest2(int x) {
+        try {
+            x++;
+            x = maybeThrow(x);
+        } catch (RuntimeException ex) {
+            return 1;
+        }
+
+        // Since the code in the try block can't possibly throw, there
+        // should not be a catch in the final result.
+        try {
+            x++;
+        } catch (RuntimeException ex) {
+            return 2;
+        }
+
+        try {
+            return maybeThrow(x);
+        } catch (RuntimeException ex) {
+            return 3;
+        }
+    }
+}
diff --git a/dx/tests/046-dex-exceptions/build b/dx/tests/046-dex-exceptions/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/046-dex-exceptions/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/046-dex-exceptions/expected.txt b/dx/tests/046-dex-exceptions/expected.txt
new file mode 100644
index 0000000..933a547
--- /dev/null
+++ b/dx/tests/046-dex-exceptions/expected.txt
@@ -0,0 +1,48 @@
+Blort.exTest1:(I)I:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: invoke-static {v2}, Blort.maybeThrow:(I)I
+  0005: move-result v2
+  0006: const/4 v2, #int 1 // #1
+  0007: move v0, v2
+  0008: return v0
+  0009: move-exception v2
+  000a: move-object v1, v2
+  000b: const/4 v2, #int 2 // #2
+  000c: move v0, v2
+  000d: goto 0008 // -0005
+  catches
+    tries:
+      try 0002..0005
+      catch java.lang.RuntimeException -> 0009
+Blort.exTest2:(I)I:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move v0, v3
+  0001: add-int/lit8 v0, v0, #int 1 // #01
+  0003: move v2, v0
+  0004: invoke-static {v2}, Blort.maybeThrow:(I)I
+  0007: move-result v2
+  0008: move v0, v2
+  0009: add-int/lit8 v0, v0, #int 1 // #01
+  000b: move v2, v0
+  000c: invoke-static {v2}, Blort.maybeThrow:(I)I
+  000f: move-result v2
+  0010: move v0, v2
+  0011: return v0
+  0012: move-exception v2
+  0013: move-object v1, v2
+  0014: const/4 v2, #int 1 // #1
+  0015: move v0, v2
+  0016: goto 0011 // -0005
+  0017: move-exception v2
+  0018: move-object v1, v2
+  0019: const/4 v2, #int 3 // #3
+  001a: move v0, v2
+  001b: goto 0011 // -000a
+  catches
+    tries:
+      try 0004..0007
+      catch java.lang.RuntimeException -> 0012
+      try 000c..000f
+      catch java.lang.RuntimeException -> 0017
diff --git a/dx/tests/046-dex-exceptions/info.txt b/dx/tests/046-dex-exceptions/info.txt
new file mode 100644
index 0000000..a4bc065
--- /dev/null
+++ b/dx/tests/046-dex-exceptions/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple simple cases of exception handling get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/046-dex-exceptions/run b/dx/tests/046-dex-exceptions/run
new file mode 100644
index 0000000..d952490
--- /dev/null
+++ b/dx/tests/046-dex-exceptions/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals --dump-method=Blort.exTest'*' *.class
diff --git a/dx/tests/047-dex-wide-args/Blort.class b/dx/tests/047-dex-wide-args/Blort.class
new file mode 100644
index 0000000..fef489c
Binary files /dev/null and b/dx/tests/047-dex-wide-args/Blort.class differ
diff --git a/dx/tests/047-dex-wide-args/Blort.java b/dx/tests/047-dex-wide-args/Blort.java
new file mode 100644
index 0000000..fa0f1d8
--- /dev/null
+++ b/dx/tests/047-dex-wide-args/Blort.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static long test1(int w, long x, int y, long z) {
+        return w + x + y + z;
+    }
+
+    public static long test2(long w, int x, long y, int z) {
+        return w + x + y + z;
+    }
+}
diff --git a/dx/tests/047-dex-wide-args/build b/dx/tests/047-dex-wide-args/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/047-dex-wide-args/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/047-dex-wide-args/expected.txt b/dx/tests/047-dex-wide-args/expected.txt
new file mode 100644
index 0000000..cc353fc
--- /dev/null
+++ b/dx/tests/047-dex-wide-args/expected.txt
@@ -0,0 +1,34 @@
+Blort.test1:(IJIJ)J:
+regs: 0010; ins: 0006; outs: 0000
+  0000: move v0, v10
+  0001: move-wide v1, v11
+  0002: move v3, v13
+  0003: move-wide v4, v14
+  0004: move v6, v0
+  0005: int-to-long v6, v6
+  0006: move-wide v8, v1
+  0007: add-long/2addr v6, v8
+  0008: move v8, v3
+  0009: int-to-long v8, v8
+  000a: add-long/2addr v6, v8
+  000b: move-wide v8, v4
+  000c: add-long/2addr v6, v8
+  000d: move-wide v0, v6
+  000e: return-wide v0
+Blort.test2:(JIJI)J:
+regs: 0010; ins: 0006; outs: 0000
+  0000: move-wide v0, v10
+  0001: move v2, v12
+  0002: move-wide v3, v13
+  0003: move v5, v15
+  0004: move-wide v6, v0
+  0005: move v8, v2
+  0006: int-to-long v8, v8
+  0007: add-long/2addr v6, v8
+  0008: move-wide v8, v3
+  0009: add-long/2addr v6, v8
+  000a: move v8, v5
+  000b: int-to-long v8, v8
+  000c: add-long/2addr v6, v8
+  000d: move-wide v0, v6
+  000e: return-wide v0
diff --git a/dx/tests/047-dex-wide-args/info.txt b/dx/tests/047-dex-wide-args/info.txt
new file mode 100644
index 0000000..357204d
--- /dev/null
+++ b/dx/tests/047-dex-wide-args/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+wide (category-2) arguments get treated reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/047-dex-wide-args/run b/dx/tests/047-dex-wide-args/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/047-dex-wide-args/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/048-dex-new-array/Blort.class b/dx/tests/048-dex-new-array/Blort.class
new file mode 100644
index 0000000..35c9f93
Binary files /dev/null and b/dx/tests/048-dex-new-array/Blort.class differ
diff --git a/dx/tests/048-dex-new-array/Blort.java b/dx/tests/048-dex-new-array/Blort.java
new file mode 100644
index 0000000..1af0cde
--- /dev/null
+++ b/dx/tests/048-dex-new-array/Blort.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static void sink(Object x) {
+        // Do nothing.
+    }
+
+    public static void test() {
+        sink(new boolean[0]);
+        sink(new byte[1]);
+        sink(new char[2]);
+        sink(new short[3]);
+        sink(new int[4]);
+        sink(new long[5]);
+        sink(new float[6]);
+        sink(new double[7]);
+        sink(new Object[0]);
+    }
+}
diff --git a/dx/tests/048-dex-new-array/build b/dx/tests/048-dex-new-array/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/048-dex-new-array/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/048-dex-new-array/expected.txt b/dx/tests/048-dex-new-array/expected.txt
new file mode 100644
index 0000000..15332ca
--- /dev/null
+++ b/dx/tests/048-dex-new-array/expected.txt
@@ -0,0 +1,29 @@
+Blort.test:()V:
+regs: 0002; ins: 0000; outs: 0001
+  0000: const/4 v1, #int 0 // #0
+  0001: new-array v0, v1, boolean[]
+  0003: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  0006: const/4 v0, #int 1 // #1
+  0007: new-array v0, v0, byte[]
+  0009: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  000c: const/4 v0, #int 2 // #2
+  000d: new-array v0, v0, char[]
+  000f: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  0012: const/4 v0, #int 3 // #3
+  0013: new-array v0, v0, short[]
+  0015: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  0018: const/4 v0, #int 4 // #4
+  0019: new-array v0, v0, int[]
+  001b: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  001e: const/4 v0, #int 5 // #5
+  001f: new-array v0, v0, long[]
+  0021: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  0024: const/4 v0, #int 6 // #6
+  0025: new-array v0, v0, float[]
+  0027: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  002a: const/4 v0, #int 7 // #7
+  002b: new-array v0, v0, double[]
+  002d: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  0030: new-array v0, v1, java.lang.Object[]
+  0032: invoke-static {v0}, Blort.sink:(Ljava/lang/Object;)V
+  0035: return-void
diff --git a/dx/tests/048-dex-new-array/info.txt b/dx/tests/048-dex-new-array/info.txt
new file mode 100644
index 0000000..a2ff173
--- /dev/null
+++ b/dx/tests/048-dex-new-array/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+simple array construction expressions get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/048-dex-new-array/run b/dx/tests/048-dex-new-array/run
new file mode 100644
index 0000000..0dae6f6
--- /dev/null
+++ b/dx/tests/048-dex-new-array/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none --no-locals --dump-method=Blort.test *.class
diff --git a/dx/tests/049-dex-instanceof/Blort.class b/dx/tests/049-dex-instanceof/Blort.class
new file mode 100644
index 0000000..6e66394
Binary files /dev/null and b/dx/tests/049-dex-instanceof/Blort.class differ
diff --git a/dx/tests/049-dex-instanceof/Blort.java b/dx/tests/049-dex-instanceof/Blort.java
new file mode 100644
index 0000000..ad41f30
--- /dev/null
+++ b/dx/tests/049-dex-instanceof/Blort.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static boolean test(Object x) {
+        return x instanceof Blort;
+    }
+}
diff --git a/dx/tests/049-dex-instanceof/build b/dx/tests/049-dex-instanceof/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/049-dex-instanceof/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/049-dex-instanceof/expected.txt b/dx/tests/049-dex-instanceof/expected.txt
new file mode 100644
index 0000000..77f903c
--- /dev/null
+++ b/dx/tests/049-dex-instanceof/expected.txt
@@ -0,0 +1,7 @@
+Blort.test:(Ljava/lang/Object;)Z:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: move-object v1, v0
+  0002: instance-of v1, v1, Blort
+  0004: move v0, v1
+  0005: return v0
diff --git a/dx/tests/049-dex-instanceof/info.txt b/dx/tests/049-dex-instanceof/info.txt
new file mode 100644
index 0000000..a6c82b2
--- /dev/null
+++ b/dx/tests/049-dex-instanceof/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+instanceof expressions get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/049-dex-instanceof/run b/dx/tests/049-dex-instanceof/run
new file mode 100644
index 0000000..e75f918
--- /dev/null
+++ b/dx/tests/049-dex-instanceof/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test *.class
diff --git a/dx/tests/050-dex-checkcast/Blort.class b/dx/tests/050-dex-checkcast/Blort.class
new file mode 100644
index 0000000..cc78d48
Binary files /dev/null and b/dx/tests/050-dex-checkcast/Blort.class differ
diff --git a/dx/tests/050-dex-checkcast/Blort.java b/dx/tests/050-dex-checkcast/Blort.java
new file mode 100644
index 0000000..5441eec
--- /dev/null
+++ b/dx/tests/050-dex-checkcast/Blort.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static Blort test(Object x) {
+        return (Blort) x;
+    }
+}
diff --git a/dx/tests/050-dex-checkcast/build b/dx/tests/050-dex-checkcast/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/050-dex-checkcast/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/050-dex-checkcast/expected.txt b/dx/tests/050-dex-checkcast/expected.txt
new file mode 100644
index 0000000..96f7f20
--- /dev/null
+++ b/dx/tests/050-dex-checkcast/expected.txt
@@ -0,0 +1,7 @@
+Blort.test:(Ljava/lang/Object;)LBlort;:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: move-object v1, v0
+  0002: check-cast v1, Blort
+  0004: move-object v0, v1
+  0005: return-object v0
diff --git a/dx/tests/050-dex-checkcast/info.txt b/dx/tests/050-dex-checkcast/info.txt
new file mode 100644
index 0000000..b23daa4
--- /dev/null
+++ b/dx/tests/050-dex-checkcast/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+checked cast expressions get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/050-dex-checkcast/run b/dx/tests/050-dex-checkcast/run
new file mode 100644
index 0000000..e75f918
--- /dev/null
+++ b/dx/tests/050-dex-checkcast/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test *.class
diff --git a/dx/tests/051-dex-explicit-null/Blort.class b/dx/tests/051-dex-explicit-null/Blort.class
new file mode 100644
index 0000000..043f2d2
Binary files /dev/null and b/dx/tests/051-dex-explicit-null/Blort.class differ
diff --git a/dx/tests/051-dex-explicit-null/Blort.java b/dx/tests/051-dex-explicit-null/Blort.java
new file mode 100644
index 0000000..9045c50
--- /dev/null
+++ b/dx/tests/051-dex-explicit-null/Blort.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static Object test1() {
+        return null;
+    }
+
+    public static void test2(Object x) {
+        x = null;
+    }
+}
diff --git a/dx/tests/051-dex-explicit-null/build b/dx/tests/051-dex-explicit-null/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/051-dex-explicit-null/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/051-dex-explicit-null/expected.txt b/dx/tests/051-dex-explicit-null/expected.txt
new file mode 100644
index 0000000..18ce092
--- /dev/null
+++ b/dx/tests/051-dex-explicit-null/expected.txt
@@ -0,0 +1,10 @@
+Blort.test1:()Ljava/lang/Object;:
+regs: 0001; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: return-object v0
+Blort.test2:(Ljava/lang/Object;)V:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #null // #0
+  0002: move-object v0, v1
+  0003: return-void
diff --git a/dx/tests/051-dex-explicit-null/info.txt b/dx/tests/051-dex-explicit-null/info.txt
new file mode 100644
index 0000000..8a03dc3
--- /dev/null
+++ b/dx/tests/051-dex-explicit-null/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to see that
+assigning a reference variable to null works, as well as explicitly
+returning a null.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/051-dex-explicit-null/run b/dx/tests/051-dex-explicit-null/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/051-dex-explicit-null/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/052-dex-static-var-access/Blort.class b/dx/tests/052-dex-static-var-access/Blort.class
new file mode 100644
index 0000000..872bc58
Binary files /dev/null and b/dx/tests/052-dex-static-var-access/Blort.class differ
diff --git a/dx/tests/052-dex-static-var-access/Blort.java b/dx/tests/052-dex-static-var-access/Blort.java
new file mode 100644
index 0000000..3dd0e78
--- /dev/null
+++ b/dx/tests/052-dex-static-var-access/Blort.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static boolean staticBoolean;
+    public static byte staticByte;
+    public static char staticChar;
+    public static short staticShort;
+    public static int staticInt;
+    public static long staticLong;
+    public static float staticFloat;
+    public static double staticDouble;
+    public static Object staticObject;
+
+    public static Object test1() {
+        int x = staticByte + staticChar + staticShort + staticInt +
+            (int) staticLong + (int) staticFloat + (int) staticDouble;
+
+        if (staticBoolean && (x > 0)) {;
+            return staticObject;
+        } else {
+            return null;
+        }
+    }
+
+    public static void test2(boolean b, int i, Object o) {
+        staticBoolean = b;
+        staticByte = (byte) i;
+        staticChar = (char) i;
+        staticShort = (short) i;
+        staticInt = i;
+        staticLong = i;
+        staticFloat = i;
+        staticDouble = i;
+        staticObject = o;
+    }
+}
diff --git a/dx/tests/052-dex-static-var-access/build b/dx/tests/052-dex-static-var-access/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/052-dex-static-var-access/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/052-dex-static-var-access/expected.txt b/dx/tests/052-dex-static-var-access/expected.txt
new file mode 100644
index 0000000..09a0dbb
--- /dev/null
+++ b/dx/tests/052-dex-static-var-access/expected.txt
@@ -0,0 +1,59 @@
+Blort.test1:()Ljava/lang/Object;:
+regs: 0004; ins: 0000; outs: 0000
+  0000: sget-byte v1, Blort.staticByte:B
+  0002: sget-char v2, Blort.staticChar:C
+  0004: add-int/2addr v1, v2
+  0005: sget-short v2, Blort.staticShort:S
+  0007: add-int/2addr v1, v2
+  0008: sget v2, Blort.staticInt:I
+  000a: add-int/2addr v1, v2
+  000b: sget-wide v2, Blort.staticLong:J
+  000d: long-to-int v2, v2
+  000e: add-int/2addr v1, v2
+  000f: sget v2, Blort.staticFloat:F
+  0011: float-to-int v2, v2
+  0012: add-int/2addr v1, v2
+  0013: sget-wide v2, Blort.staticDouble:D
+  0015: double-to-int v2, v2
+  0016: add-int/2addr v1, v2
+  0017: move v0, v1
+  0018: sget-boolean v1, Blort.staticBoolean:Z
+  001a: if-eqz v1, 0023 // +0009
+  001c: move v1, v0
+  001d: if-lez v1, 0023 // +0006
+  001f: sget-object v1, Blort.staticObject:Ljava/lang/Object;
+  0021: move-object v0, v1
+  0022: return-object v0
+  0023: const/4 v1, #null // #0
+  0024: move-object v0, v1
+  0025: goto 0022 // -0003
+Blort.test2:(ZILjava/lang/Object;)V:
+regs: 0009; ins: 0003; outs: 0000
+  0000: move v1, v6
+  0001: move v2, v7
+  0002: move-object v3, v8
+  0003: move v4, v1
+  0004: sput-boolean v4, Blort.staticBoolean:Z
+  0006: move v4, v2
+  0007: int-to-byte v4, v4
+  0008: sput-byte v4, Blort.staticByte:B
+  000a: move v4, v2
+  000b: int-to-char v4, v4
+  000c: sput-char v4, Blort.staticChar:C
+  000e: move v4, v2
+  000f: int-to-short v4, v4
+  0010: sput-short v4, Blort.staticShort:S
+  0012: move v4, v2
+  0013: sput v4, Blort.staticInt:I
+  0015: move v4, v2
+  0016: int-to-long v4, v4
+  0017: sput-wide v4, Blort.staticLong:J
+  0019: move v4, v2
+  001a: int-to-float v4, v4
+  001b: sput v4, Blort.staticFloat:F
+  001d: move v4, v2
+  001e: int-to-double v4, v4
+  001f: sput-wide v4, Blort.staticDouble:D
+  0021: move-object v4, v3
+  0022: sput-object v4, Blort.staticObject:Ljava/lang/Object;
+  0024: return-void
diff --git a/dx/tests/052-dex-static-var-access/info.txt b/dx/tests/052-dex-static-var-access/info.txt
new file mode 100644
index 0000000..c3c3b0b
--- /dev/null
+++ b/dx/tests/052-dex-static-var-access/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+static variable access works.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/052-dex-static-var-access/run b/dx/tests/052-dex-static-var-access/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/052-dex-static-var-access/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/053-dex-instance-var-access/Blort.class b/dx/tests/053-dex-instance-var-access/Blort.class
new file mode 100644
index 0000000..7062266
Binary files /dev/null and b/dx/tests/053-dex-instance-var-access/Blort.class differ
diff --git a/dx/tests/053-dex-instance-var-access/Blort.java b/dx/tests/053-dex-instance-var-access/Blort.java
new file mode 100644
index 0000000..eb62d62
--- /dev/null
+++ b/dx/tests/053-dex-instance-var-access/Blort.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public boolean insBoolean;
+    public byte insByte;
+    public char insChar;
+    public short insShort;
+    public int insInt;
+    public long insLong;
+    public float insFloat;
+    public double insDouble;
+    public Object insObject;
+
+    public Object test1() {
+        int x = insByte + insChar + insShort + insInt +
+            (int) insLong + (int) insFloat + (int) insDouble;
+
+        if (insBoolean && (x > 0)) {;
+            return insObject;
+        } else {
+            return null;
+        }
+    }
+
+    public void test2(boolean b, int i, Object o) {
+        insBoolean = b;
+        insByte = (byte) i;
+        insChar = (char) i;
+        insShort = (short) i;
+        insInt = i;
+        insLong = i;
+        insFloat = i;
+        insDouble = i;
+        insObject = o;
+    }
+}
diff --git a/dx/tests/053-dex-instance-var-access/build b/dx/tests/053-dex-instance-var-access/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/053-dex-instance-var-access/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/053-dex-instance-var-access/expected.txt b/dx/tests/053-dex-instance-var-access/expected.txt
new file mode 100644
index 0000000..313e7e1
--- /dev/null
+++ b/dx/tests/053-dex-instance-var-access/expected.txt
@@ -0,0 +1,79 @@
+Blort.test1:()Ljava/lang/Object;:
+regs: 0007; ins: 0001; outs: 0000
+  0000: move-object v1, v6
+  0001: move-object v3, v1
+  0002: iget-byte v3, v3, Blort.insByte:B
+  0004: move-object v4, v1
+  0005: iget-char v4, v4, Blort.insChar:C
+  0007: add-int/2addr v3, v4
+  0008: move-object v4, v1
+  0009: iget-short v4, v4, Blort.insShort:S
+  000b: add-int/2addr v3, v4
+  000c: move-object v4, v1
+  000d: iget v4, v4, Blort.insInt:I
+  000f: add-int/2addr v3, v4
+  0010: move-object v4, v1
+  0011: iget-wide v4, v4, Blort.insLong:J
+  0013: long-to-int v4, v4
+  0014: add-int/2addr v3, v4
+  0015: move-object v4, v1
+  0016: iget v4, v4, Blort.insFloat:F
+  0018: float-to-int v4, v4
+  0019: add-int/2addr v3, v4
+  001a: move-object v4, v1
+  001b: iget-wide v4, v4, Blort.insDouble:D
+  001d: double-to-int v4, v4
+  001e: add-int/2addr v3, v4
+  001f: move v2, v3
+  0020: move-object v3, v1
+  0021: iget-boolean v3, v3, Blort.insBoolean:Z
+  0023: if-eqz v3, 002d // +000a
+  0025: move v3, v2
+  0026: if-lez v3, 002d // +0007
+  0028: move-object v3, v1
+  0029: iget-object v3, v3, Blort.insObject:Ljava/lang/Object;
+  002b: move-object v1, v3
+  002c: return-object v1
+  002d: const/4 v3, #null // #0
+  002e: move-object v1, v3
+  002f: goto 002c // -0003
+Blort.test2:(ZILjava/lang/Object;)V:
+regs: 000c; ins: 0004; outs: 0000
+  0000: move-object v1, v8
+  0001: move v2, v9
+  0002: move v3, v10
+  0003: move-object v4, v11
+  0004: move-object v5, v1
+  0005: move v6, v2
+  0006: iput-boolean v6, v5, Blort.insBoolean:Z
+  0008: move-object v5, v1
+  0009: move v6, v3
+  000a: int-to-byte v6, v6
+  000b: iput-byte v6, v5, Blort.insByte:B
+  000d: move-object v5, v1
+  000e: move v6, v3
+  000f: int-to-char v6, v6
+  0010: iput-char v6, v5, Blort.insChar:C
+  0012: move-object v5, v1
+  0013: move v6, v3
+  0014: int-to-short v6, v6
+  0015: iput-short v6, v5, Blort.insShort:S
+  0017: move-object v5, v1
+  0018: move v6, v3
+  0019: iput v6, v5, Blort.insInt:I
+  001b: move-object v5, v1
+  001c: move v6, v3
+  001d: int-to-long v6, v6
+  001e: iput-wide v6, v5, Blort.insLong:J
+  0020: move-object v5, v1
+  0021: move v6, v3
+  0022: int-to-float v6, v6
+  0023: iput v6, v5, Blort.insFloat:F
+  0025: move-object v5, v1
+  0026: move v6, v3
+  0027: int-to-double v6, v6
+  0028: iput-wide v6, v5, Blort.insDouble:D
+  002a: move-object v5, v1
+  002b: move-object v6, v4
+  002c: iput-object v6, v5, Blort.insObject:Ljava/lang/Object;
+  002e: return-void
diff --git a/dx/tests/053-dex-instance-var-access/info.txt b/dx/tests/053-dex-instance-var-access/info.txt
new file mode 100644
index 0000000..4f95797
--- /dev/null
+++ b/dx/tests/053-dex-instance-var-access/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+instance variable access works.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/053-dex-instance-var-access/run b/dx/tests/053-dex-instance-var-access/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/053-dex-instance-var-access/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/054-dex-high16/Blort.class b/dx/tests/054-dex-high16/Blort.class
new file mode 100644
index 0000000..6a14a91
Binary files /dev/null and b/dx/tests/054-dex-high16/Blort.class differ
diff --git a/dx/tests/054-dex-high16/Blort.java b/dx/tests/054-dex-high16/Blort.java
new file mode 100644
index 0000000..9fba972
--- /dev/null
+++ b/dx/tests/054-dex-high16/Blort.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static void sink(int i) {
+        // Do nothing.
+    }
+
+    public static void sink(long l) {
+        // Do nothing.
+    }
+
+    public static void sink(float f) {
+        // Do nothing.
+    }
+
+    public static void sink(double d) {
+        // Do nothing.
+    }
+
+    public static void testInt() {
+        sink(Integer.MIN_VALUE);
+        sink(0x40000000);
+        sink(0x20000000);
+        sink(0x10000000);
+        sink(0x00080000);
+        sink(0x00040000);
+        sink(0x00020000);
+        sink(0x00010000);
+        sink(0x56780000);
+    }
+
+    public static void testLong() {
+        sink(Long.MIN_VALUE);
+        sink(0x4000000000000000L);
+        sink(0x2000000000000000L);
+        sink(0x1000000000000000L);
+        sink(0x0008000000000000L);
+        sink(0x0004000000000000L);
+        sink(0x0002000000000000L);
+        sink(0x0001000000000000L);
+        sink(0x5678000000000000L);
+    }
+
+    public static void testFloat() {
+        sink(Float.NEGATIVE_INFINITY);
+        sink(-0.0f);
+        sink(1.0f);
+        sink(Float.POSITIVE_INFINITY);
+        sink(Float.NaN);
+    }
+
+    public static void testDouble() {
+        sink(Double.NEGATIVE_INFINITY);
+        sink(-0.0);
+        sink(1.0);
+        sink(Double.POSITIVE_INFINITY);
+        sink(Double.NaN);
+    }
+}
diff --git a/dx/tests/054-dex-high16/build b/dx/tests/054-dex-high16/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/054-dex-high16/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/054-dex-high16/expected.txt b/dx/tests/054-dex-high16/expected.txt
new file mode 100644
index 0000000..b9d6cf3
--- /dev/null
+++ b/dx/tests/054-dex-high16/expected.txt
@@ -0,0 +1,68 @@
+Blort.testDouble:()V:
+regs: 0002; ins: 0000; outs: 0002
+  0000: const-wide/high16 v0, #double -Infinity // #fff0000000000000
+  0002: invoke-static {v0, v1}, Blort.sink:(D)V
+  0005: const-wide/high16 v0, #double -0.0 // #8000000000000000
+  0007: invoke-static {v0, v1}, Blort.sink:(D)V
+  000a: const-wide/high16 v0, #double 1.0 // #3ff0000000000000
+  000c: invoke-static {v0, v1}, Blort.sink:(D)V
+  000f: const-wide/high16 v0, #double Infinity // #7ff0000000000000
+  0011: invoke-static {v0, v1}, Blort.sink:(D)V
+  0014: const-wide/high16 v0, #double NaN // #7ff8000000000000
+  0016: invoke-static {v0, v1}, Blort.sink:(D)V
+  0019: return-void
+Blort.testFloat:()V:
+regs: 0001; ins: 0000; outs: 0001
+  0000: const/high16 v0, #float -Infinity // #ff800000
+  0002: invoke-static {v0}, Blort.sink:(F)V
+  0005: const/high16 v0, #float -0.0 // #80000000
+  0007: invoke-static {v0}, Blort.sink:(F)V
+  000a: const/high16 v0, #float 1.0 // #3f800000
+  000c: invoke-static {v0}, Blort.sink:(F)V
+  000f: const/high16 v0, #float Infinity // #7f800000
+  0011: invoke-static {v0}, Blort.sink:(F)V
+  0014: const/high16 v0, #float NaN // #7fc00000
+  0016: invoke-static {v0}, Blort.sink:(F)V
+  0019: return-void
+Blort.testInt:()V:
+regs: 0001; ins: 0000; outs: 0001
+  0000: const/high16 v0, #int -2147483648 // #80000000
+  0002: invoke-static {v0}, Blort.sink:(I)V
+  0005: const/high16 v0, #int 1073741824 // #40000000
+  0007: invoke-static {v0}, Blort.sink:(I)V
+  000a: const/high16 v0, #int 536870912 // #20000000
+  000c: invoke-static {v0}, Blort.sink:(I)V
+  000f: const/high16 v0, #int 268435456 // #10000000
+  0011: invoke-static {v0}, Blort.sink:(I)V
+  0014: const/high16 v0, #int 524288 // #00080000
+  0016: invoke-static {v0}, Blort.sink:(I)V
+  0019: const/high16 v0, #int 262144 // #00040000
+  001b: invoke-static {v0}, Blort.sink:(I)V
+  001e: const/high16 v0, #int 131072 // #00020000
+  0020: invoke-static {v0}, Blort.sink:(I)V
+  0023: const/high16 v0, #int 65536 // #00010000
+  0025: invoke-static {v0}, Blort.sink:(I)V
+  0028: const/high16 v0, #int 1450704896 // #56780000
+  002a: invoke-static {v0}, Blort.sink:(I)V
+  002d: return-void
+Blort.testLong:()V:
+regs: 0002; ins: 0000; outs: 0002
+  0000: const-wide/high16 v0, #long -9223372036854775808 // #8000000000000000
+  0002: invoke-static {v0, v1}, Blort.sink:(J)V
+  0005: const-wide/high16 v0, #long 4611686018427387904 // #4000000000000000
+  0007: invoke-static {v0, v1}, Blort.sink:(J)V
+  000a: const-wide/high16 v0, #long 2305843009213693952 // #2000000000000000
+  000c: invoke-static {v0, v1}, Blort.sink:(J)V
+  000f: const-wide/high16 v0, #long 1152921504606846976 // #1000000000000000
+  0011: invoke-static {v0, v1}, Blort.sink:(J)V
+  0014: const-wide/high16 v0, #long 2251799813685248 // #0008000000000000
+  0016: invoke-static {v0, v1}, Blort.sink:(J)V
+  0019: const-wide/high16 v0, #long 1125899906842624 // #0004000000000000
+  001b: invoke-static {v0, v1}, Blort.sink:(J)V
+  001e: const-wide/high16 v0, #long 562949953421312 // #0002000000000000
+  0020: invoke-static {v0, v1}, Blort.sink:(J)V
+  0023: const-wide/high16 v0, #long 281474976710656 // #0001000000000000
+  0025: invoke-static {v0, v1}, Blort.sink:(J)V
+  0028: const-wide/high16 v0, #long 6230730084467081216 // #5678000000000000
+  002a: invoke-static {v0, v1}, Blort.sink:(J)V
+  002d: return-void
diff --git a/dx/tests/054-dex-high16/info.txt b/dx/tests/054-dex-high16/info.txt
new file mode 100644
index 0000000..ef1fac4
--- /dev/null
+++ b/dx/tests/054-dex-high16/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+"high16" constants get converted properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/054-dex-high16/run b/dx/tests/054-dex-high16/run
new file mode 100644
index 0000000..d5aa18d
--- /dev/null
+++ b/dx/tests/054-dex-high16/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/055-dex-explicit-throw/Blort.class b/dx/tests/055-dex-explicit-throw/Blort.class
new file mode 100644
index 0000000..6230a69
Binary files /dev/null and b/dx/tests/055-dex-explicit-throw/Blort.class differ
diff --git a/dx/tests/055-dex-explicit-throw/Blort.java b/dx/tests/055-dex-explicit-throw/Blort.java
new file mode 100644
index 0000000..e6720d9
--- /dev/null
+++ b/dx/tests/055-dex-explicit-throw/Blort.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    private static RuntimeException theException = new RuntimeException();
+
+    public static void test1() {
+        throw theException;
+    }
+
+    public static int test2() {
+        try {
+            throw theException;
+        } catch (RuntimeException ex) {
+            return 1;
+        }
+    }
+}
diff --git a/dx/tests/055-dex-explicit-throw/build b/dx/tests/055-dex-explicit-throw/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/055-dex-explicit-throw/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/055-dex-explicit-throw/expected.txt b/dx/tests/055-dex-explicit-throw/expected.txt
new file mode 100644
index 0000000..b7e4c33
--- /dev/null
+++ b/dx/tests/055-dex-explicit-throw/expected.txt
@@ -0,0 +1,17 @@
+Blort.test1:()V:
+regs: 0001; ins: 0000; outs: 0000
+  0000: sget-object v0, Blort.theException:Ljava/lang/RuntimeException;
+  0002: throw v0
+Blort.test2:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: sget-object v1, Blort.theException:Ljava/lang/RuntimeException;
+  0002: throw v1
+  0003: move-exception v1
+  0004: move-object v0, v1
+  0005: const/4 v1, #int 1 // #1
+  0006: move v0, v1
+  0007: return v0
+  catches
+    tries:
+      try 0000..0003
+      catch java.lang.RuntimeException -> 0003
diff --git a/dx/tests/055-dex-explicit-throw/info.txt b/dx/tests/055-dex-explicit-throw/info.txt
new file mode 100644
index 0000000..b3b7808
--- /dev/null
+++ b/dx/tests/055-dex-explicit-throw/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+explicit use of "throw" gets converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/055-dex-explicit-throw/run b/dx/tests/055-dex-explicit-throw/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/055-dex-explicit-throw/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/056-dex-call-interface/Blort.class b/dx/tests/056-dex-call-interface/Blort.class
new file mode 100644
index 0000000..dd60662
Binary files /dev/null and b/dx/tests/056-dex-call-interface/Blort.class differ
diff --git a/dx/tests/056-dex-call-interface/Blort.java b/dx/tests/056-dex-call-interface/Blort.java
new file mode 100644
index 0000000..4175f05
--- /dev/null
+++ b/dx/tests/056-dex-call-interface/Blort.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static int test(Zorch z, double d) {
+        z.zorch1();
+        z.zorch2(d);
+        int x = z.zorch3(z);
+        int y = (int) z.zorch4();
+        return x + y;
+    }
+}
diff --git a/dx/tests/056-dex-call-interface/Zorch.class b/dx/tests/056-dex-call-interface/Zorch.class
new file mode 100644
index 0000000..d1387ad
Binary files /dev/null and b/dx/tests/056-dex-call-interface/Zorch.class differ
diff --git a/dx/tests/056-dex-call-interface/Zorch.java b/dx/tests/056-dex-call-interface/Zorch.java
new file mode 100644
index 0000000..03e3762
--- /dev/null
+++ b/dx/tests/056-dex-call-interface/Zorch.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public interface Zorch
+{
+    public void zorch1();
+    public void zorch2(double d);
+    public int zorch3(Object o);
+    public long zorch4();
+}
diff --git a/dx/tests/056-dex-call-interface/build b/dx/tests/056-dex-call-interface/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/056-dex-call-interface/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/056-dex-call-interface/expected.txt b/dx/tests/056-dex-call-interface/expected.txt
new file mode 100644
index 0000000..65b0175
--- /dev/null
+++ b/dx/tests/056-dex-call-interface/expected.txt
@@ -0,0 +1,24 @@
+Blort.test:(LZorch;D)I:
+regs: 000c; ins: 0003; outs: 0003
+  0000: move-object v1, v9
+  0001: move-wide v2, v10
+  0002: move-object v6, v1
+  0003: invoke-interface {v6}, Zorch.zorch1:()V
+  0006: move-object v6, v1
+  0007: move-wide v7, v2
+  0008: invoke-interface {v6, v7, v8}, Zorch.zorch2:(D)V
+  000b: move-object v6, v1
+  000c: move-object v7, v1
+  000d: invoke-interface {v6, v7}, Zorch.zorch3:(Ljava/lang/Object;)I
+  0010: move-result v6
+  0011: move v4, v6
+  0012: move-object v6, v1
+  0013: invoke-interface {v6}, Zorch.zorch4:()J
+  0016: move-result-wide v6
+  0017: long-to-int v6, v6
+  0018: move v5, v6
+  0019: move v6, v4
+  001a: move v7, v5
+  001b: add-int/2addr v6, v7
+  001c: move v1, v6
+  001d: return v1
diff --git a/dx/tests/056-dex-call-interface/info.txt b/dx/tests/056-dex-call-interface/info.txt
new file mode 100644
index 0000000..2f964a2
--- /dev/null
+++ b/dx/tests/056-dex-call-interface/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple cases of interface method invocation work properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/056-dex-call-interface/run b/dx/tests/056-dex-call-interface/run
new file mode 100644
index 0000000..23ced96
--- /dev/null
+++ b/dx/tests/056-dex-call-interface/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test Blort.class
diff --git a/dx/tests/057-dex-call-virtual/Blort.class b/dx/tests/057-dex-call-virtual/Blort.class
new file mode 100644
index 0000000..a555851
Binary files /dev/null and b/dx/tests/057-dex-call-virtual/Blort.class differ
diff --git a/dx/tests/057-dex-call-virtual/Blort.java b/dx/tests/057-dex-call-virtual/Blort.java
new file mode 100644
index 0000000..75ee7d8
--- /dev/null
+++ b/dx/tests/057-dex-call-virtual/Blort.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static int test(Zorch z) {
+        z.zorch1();
+        return z.zorch2(5);
+    }
+}
diff --git a/dx/tests/057-dex-call-virtual/Zorch.class b/dx/tests/057-dex-call-virtual/Zorch.class
new file mode 100644
index 0000000..6241c67
Binary files /dev/null and b/dx/tests/057-dex-call-virtual/Zorch.class differ
diff --git a/dx/tests/057-dex-call-virtual/Zorch.java b/dx/tests/057-dex-call-virtual/Zorch.java
new file mode 100644
index 0000000..867eaed
--- /dev/null
+++ b/dx/tests/057-dex-call-virtual/Zorch.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Zorch
+{
+    public void zorch1() {
+        // This space intentionally left blank.
+    }
+
+    public int zorch2(int x) {
+        return 0;
+    }
+}
diff --git a/dx/tests/057-dex-call-virtual/build b/dx/tests/057-dex-call-virtual/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/057-dex-call-virtual/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/057-dex-call-virtual/expected.txt b/dx/tests/057-dex-call-virtual/expected.txt
new file mode 100644
index 0000000..ea50d35
--- /dev/null
+++ b/dx/tests/057-dex-call-virtual/expected.txt
@@ -0,0 +1,11 @@
+Blort.test:(LZorch;)I:
+regs: 0004; ins: 0001; outs: 0002
+  0000: move-object v0, v3
+  0001: move-object v1, v0
+  0002: invoke-virtual {v1}, Zorch.zorch1:()V
+  0005: move-object v1, v0
+  0006: const/4 v2, #int 5 // #5
+  0007: invoke-virtual {v1, v2}, Zorch.zorch2:(I)I
+  000a: move-result v1
+  000b: move v0, v1
+  000c: return v0
diff --git a/dx/tests/057-dex-call-virtual/info.txt b/dx/tests/057-dex-call-virtual/info.txt
new file mode 100644
index 0000000..452c9cb
--- /dev/null
+++ b/dx/tests/057-dex-call-virtual/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple cases of regular virtual method invocation work properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/057-dex-call-virtual/run b/dx/tests/057-dex-call-virtual/run
new file mode 100644
index 0000000..23ced96
--- /dev/null
+++ b/dx/tests/057-dex-call-virtual/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test Blort.class
diff --git a/dx/tests/058-dex-call-direct/Blort.class b/dx/tests/058-dex-call-direct/Blort.class
new file mode 100644
index 0000000..e805bad
Binary files /dev/null and b/dx/tests/058-dex-call-direct/Blort.class differ
diff --git a/dx/tests/058-dex-call-direct/Blort.java b/dx/tests/058-dex-call-direct/Blort.java
new file mode 100644
index 0000000..6d7fa7f
--- /dev/null
+++ b/dx/tests/058-dex-call-direct/Blort.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static int test(Blort b) {
+        b.zorch1();
+        return b.zorch2(5);
+    }
+
+    private void zorch1() {
+        // This space intentionally left blank.
+    }
+
+    private int zorch2(int x) {
+        return 1;
+    }
+}
diff --git a/dx/tests/058-dex-call-direct/build b/dx/tests/058-dex-call-direct/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/058-dex-call-direct/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/058-dex-call-direct/expected.txt b/dx/tests/058-dex-call-direct/expected.txt
new file mode 100644
index 0000000..11820a3
--- /dev/null
+++ b/dx/tests/058-dex-call-direct/expected.txt
@@ -0,0 +1,11 @@
+Blort.test:(LBlort;)I:
+regs: 0004; ins: 0001; outs: 0002
+  0000: move-object v0, v3
+  0001: move-object v1, v0
+  0002: invoke-direct {v1}, Blort.zorch1:()V
+  0005: move-object v1, v0
+  0006: const/4 v2, #int 5 // #5
+  0007: invoke-direct {v1, v2}, Blort.zorch2:(I)I
+  000a: move-result v1
+  000b: move v0, v1
+  000c: return v0
diff --git a/dx/tests/058-dex-call-direct/info.txt b/dx/tests/058-dex-call-direct/info.txt
new file mode 100644
index 0000000..a22c479
--- /dev/null
+++ b/dx/tests/058-dex-call-direct/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple cases of direct instance method invocation work properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/058-dex-call-direct/run b/dx/tests/058-dex-call-direct/run
new file mode 100644
index 0000000..23ced96
--- /dev/null
+++ b/dx/tests/058-dex-call-direct/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test Blort.class
diff --git a/dx/tests/059-dex-call-super/Blort.class b/dx/tests/059-dex-call-super/Blort.class
new file mode 100644
index 0000000..2813093
Binary files /dev/null and b/dx/tests/059-dex-call-super/Blort.class differ
diff --git a/dx/tests/059-dex-call-super/Blort.java b/dx/tests/059-dex-call-super/Blort.java
new file mode 100644
index 0000000..efb451e
--- /dev/null
+++ b/dx/tests/059-dex-call-super/Blort.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+    extends Zorch
+{
+    public int test1() {
+        super.zorch1();
+        return super.zorch2(5);
+    }
+
+    public void test2() {
+        super.test2();
+    }
+}
diff --git a/dx/tests/059-dex-call-super/Zorch.class b/dx/tests/059-dex-call-super/Zorch.class
new file mode 100644
index 0000000..2d6c958
Binary files /dev/null and b/dx/tests/059-dex-call-super/Zorch.class differ
diff --git a/dx/tests/059-dex-call-super/Zorch.java b/dx/tests/059-dex-call-super/Zorch.java
new file mode 100644
index 0000000..aa668ab
--- /dev/null
+++ b/dx/tests/059-dex-call-super/Zorch.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Zorch
+{
+    public void zorch1() {
+        // This space intentionally left blank.
+    }
+
+    public int zorch2(int x) {
+        return 0;
+    }
+
+    public void test2() {
+        // This space intentionally left blank.
+    }
+}
diff --git a/dx/tests/059-dex-call-super/build b/dx/tests/059-dex-call-super/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/059-dex-call-super/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/059-dex-call-super/expected.txt b/dx/tests/059-dex-call-super/expected.txt
new file mode 100644
index 0000000..8bb3bde
--- /dev/null
+++ b/dx/tests/059-dex-call-super/expected.txt
@@ -0,0 +1,17 @@
+Blort.test1:()I:
+regs: 0004; ins: 0001; outs: 0002
+  0000: move-object v0, v3
+  0001: move-object v1, v0
+  0002: invoke-super {v1}, Zorch.zorch1:()V
+  0005: move-object v1, v0
+  0006: const/4 v2, #int 5 // #5
+  0007: invoke-super {v1, v2}, Zorch.zorch2:(I)I
+  000a: move-result v1
+  000b: move v0, v1
+  000c: return v0
+Blort.test2:()V:
+regs: 0003; ins: 0001; outs: 0001
+  0000: move-object v0, v2
+  0001: move-object v1, v0
+  0002: invoke-super {v1}, Zorch.test2:()V
+  0005: return-void
diff --git a/dx/tests/059-dex-call-super/info.txt b/dx/tests/059-dex-call-super/info.txt
new file mode 100644
index 0000000..ff88814
--- /dev/null
+++ b/dx/tests/059-dex-call-super/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple cases of superclass virtual method invocation work properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/059-dex-call-super/run b/dx/tests/059-dex-call-super/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/059-dex-call-super/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/060-dex-call-static/Blort.class b/dx/tests/060-dex-call-static/Blort.class
new file mode 100644
index 0000000..3fb588e
Binary files /dev/null and b/dx/tests/060-dex-call-static/Blort.class differ
diff --git a/dx/tests/060-dex-call-static/Blort.java b/dx/tests/060-dex-call-static/Blort.java
new file mode 100644
index 0000000..8ad2e27
--- /dev/null
+++ b/dx/tests/060-dex-call-static/Blort.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static int test() {
+        Zorch.zorch1();
+        return Zorch.zorch2(5);
+    }
+}
diff --git a/dx/tests/060-dex-call-static/Zorch.class b/dx/tests/060-dex-call-static/Zorch.class
new file mode 100644
index 0000000..2063c71
Binary files /dev/null and b/dx/tests/060-dex-call-static/Zorch.class differ
diff --git a/dx/tests/060-dex-call-static/Zorch.java b/dx/tests/060-dex-call-static/Zorch.java
new file mode 100644
index 0000000..8ccc448
--- /dev/null
+++ b/dx/tests/060-dex-call-static/Zorch.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Zorch
+{
+    public static void zorch1() {
+        // This space intentionally left blank.
+    }
+
+    public static int zorch2(int x) {
+        return 1;
+    }
+}
diff --git a/dx/tests/060-dex-call-static/build b/dx/tests/060-dex-call-static/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/060-dex-call-static/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/060-dex-call-static/expected.txt b/dx/tests/060-dex-call-static/expected.txt
new file mode 100644
index 0000000..9432989
--- /dev/null
+++ b/dx/tests/060-dex-call-static/expected.txt
@@ -0,0 +1,7 @@
+Blort.test:()I:
+regs: 0001; ins: 0000; outs: 0001
+  0000: invoke-static {}, Zorch.zorch1:()V
+  0003: const/4 v0, #int 5 // #5
+  0004: invoke-static {v0}, Zorch.zorch2:(I)I
+  0007: move-result v0
+  0008: return v0
diff --git a/dx/tests/060-dex-call-static/info.txt b/dx/tests/060-dex-call-static/info.txt
new file mode 100644
index 0000000..1253355
--- /dev/null
+++ b/dx/tests/060-dex-call-static/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple cases of static method invocation work properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/060-dex-call-static/run b/dx/tests/060-dex-call-static/run
new file mode 100644
index 0000000..883a7de
--- /dev/null
+++ b/dx/tests/060-dex-call-static/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none --no-locals \
+    --dump-method=Blort.test Blort.class
diff --git a/dx/tests/061-dex-try-catch/Blort.class b/dx/tests/061-dex-try-catch/Blort.class
new file mode 100644
index 0000000..e0c7a5e
Binary files /dev/null and b/dx/tests/061-dex-try-catch/Blort.class differ
diff --git a/dx/tests/061-dex-try-catch/Blort.java b/dx/tests/061-dex-try-catch/Blort.java
new file mode 100644
index 0000000..903f40e
--- /dev/null
+++ b/dx/tests/061-dex-try-catch/Blort.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static void caught() {
+        // This space intentionally left blank.
+    }
+
+    public static void zorch(int x) {
+        // This space intentionally left blank.
+    }
+
+    public static void test1(int x) {
+        // In this test, the code being try-caught can't possibly throw.
+        try {
+            x = 0;
+        } catch (RuntimeException ex) {
+            caught();
+        }
+    }
+
+    public static void test2(String[] sa) {
+        // In this test, the code being try-caught doesn't contain any
+        // constant pool references.
+        try {
+            int x = sa.length;
+        } catch (RuntimeException ex) {
+            caught();
+        }
+    }
+
+    public static void test3() {
+        // In this test, the code being try-caught contains a constant
+        // pool reference.
+        try {
+            zorch(1);
+        } catch (RuntimeException ex) {
+            caught();
+        }
+    }
+
+    public static void test4(String[] sa) {
+        // In this test, the code being try-caught contains one
+        // throwing instruction that has a constant pool reference and
+        // one that doesn't.
+        try {
+            zorch(sa.length);
+        } catch (RuntimeException ex) {
+            caught();
+        }
+    }
+}
diff --git a/dx/tests/061-dex-try-catch/build b/dx/tests/061-dex-try-catch/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/061-dex-try-catch/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/061-dex-try-catch/expected.txt b/dx/tests/061-dex-try-catch/expected.txt
new file mode 100644
index 0000000..d66f404
--- /dev/null
+++ b/dx/tests/061-dex-try-catch/expected.txt
@@ -0,0 +1,49 @@
+Blort.test1:(I)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: const/4 v2, #int 0 // #0
+  0002: move v0, v2
+  0003: return-void
+Blort.test2:([Ljava/lang/String;)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move-object v0, v3
+  0001: move-object v2, v0
+  0002: array-length v2, v2
+  0003: move v1, v2
+  0004: return-void
+  0005: move-exception v2
+  0006: move-object v1, v2
+  0007: invoke-static {}, Blort.caught:()V
+  000a: goto 0004 // -0006
+  catches
+    tries:
+      try 0002..0003
+      catch java.lang.RuntimeException -> 0005
+Blort.test3:()V:
+regs: 0002; ins: 0000; outs: 0001
+  0000: const/4 v1, #int 1 // #1
+  0001: invoke-static {v1}, Blort.zorch:(I)V
+  0004: return-void
+  0005: move-exception v1
+  0006: move-object v0, v1
+  0007: invoke-static {}, Blort.caught:()V
+  000a: goto 0004 // -0006
+  catches
+    tries:
+      try 0001..0004
+      catch java.lang.RuntimeException -> 0005
+Blort.test4:([Ljava/lang/String;)V:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move-object v0, v3
+  0001: move-object v2, v0
+  0002: array-length v2, v2
+  0003: invoke-static {v2}, Blort.zorch:(I)V
+  0006: return-void
+  0007: move-exception v2
+  0008: move-object v1, v2
+  0009: invoke-static {}, Blort.caught:()V
+  000c: goto 0006 // -0006
+  catches
+    tries:
+      try 0002..0006
+      catch java.lang.RuntimeException -> 0007
diff --git a/dx/tests/061-dex-try-catch/info.txt b/dx/tests/061-dex-try-catch/info.txt
new file mode 100644
index 0000000..409b251
--- /dev/null
+++ b/dx/tests/061-dex-try-catch/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple cases of try-catch work properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/061-dex-try-catch/run b/dx/tests/061-dex-try-catch/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/061-dex-try-catch/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/062-dex-synch-method/Blort.class b/dx/tests/062-dex-synch-method/Blort.class
new file mode 100644
index 0000000..0c158dc
Binary files /dev/null and b/dx/tests/062-dex-synch-method/Blort.class differ
diff --git a/dx/tests/062-dex-synch-method/Blort.java b/dx/tests/062-dex-synch-method/Blort.java
new file mode 100644
index 0000000..4aca417
--- /dev/null
+++ b/dx/tests/062-dex-synch-method/Blort.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public synchronized void testInstance1() {
+        // This space intentionally left blank.
+    }
+
+    public synchronized void testInstance2(Object x) {
+        x.hashCode();
+    }
+
+    public synchronized int testInstance3(int x, int y, int z) {
+        if (x == 1) {
+            return 1;
+        } else {
+            return 2;
+        }
+    }
+
+    public synchronized long testInstance4(long x) {
+        if (x == 1) {
+            return 1;
+        } else {
+            return 2;
+        }
+    }
+
+    public synchronized void testInstance5() {
+        testInstance5();
+    }
+
+    public static synchronized void testStatic1() {
+        // This space intentionally left blank.
+    }
+
+    public static synchronized void testStatic2(Object x) {
+        x.hashCode();
+    }
+
+    public static synchronized int testStatic3(int x, int y, int z) {
+        if (x == 1) {
+            return 1;
+        } else {
+            return 2;
+        }
+    }
+
+    public static synchronized long testStatic4(long x) {
+        if (x == 1) {
+            return 1;
+        } else {
+            return 2;
+        }
+    }
+
+    public static synchronized void testStatic5() {
+        testStatic5();
+    }
+}
diff --git a/dx/tests/062-dex-synch-method/build b/dx/tests/062-dex-synch-method/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/062-dex-synch-method/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/062-dex-synch-method/expected.txt b/dx/tests/062-dex-synch-method/expected.txt
new file mode 100644
index 0000000..99c1cd2
--- /dev/null
+++ b/dx/tests/062-dex-synch-method/expected.txt
@@ -0,0 +1,146 @@
+Blort.testInstance1:()V:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: move-object v1, v2
+  0002: monitor-enter v1
+  0003: monitor-exit v1
+  0004: return-void
+Blort.testInstance2:(Ljava/lang/Object;)V:
+regs: 0006; ins: 0002; outs: 0001
+  0000: move-object v0, v4
+  0001: move-object v1, v5
+  0002: move-object v3, v4
+  0003: monitor-enter v3
+  0004: move-object v2, v1
+  0005: invoke-virtual {v2}, java.lang.Object.hashCode:()I
+  0008: move-result v2
+  0009: monitor-exit v3
+  000a: return-void
+  000b: move-exception v0
+  000c: monitor-exit v3
+  000d: throw v0
+  catches
+    tries:
+      try 0005..0008
+      catch <any> -> 000b
+Blort.testInstance3:(III)I:
+regs: 000b; ins: 0004; outs: 0000
+  0000: move-object v0, v7
+  0001: move v1, v8
+  0002: move v2, v9
+  0003: move v3, v10
+  0004: move-object v6, v7
+  0005: monitor-enter v6
+  0006: move v4, v1
+  0007: const/4 v5, #int 1 // #1
+  0008: if-ne v4, v5, 000e // +0006
+  000a: const/4 v4, #int 1 // #1
+  000b: move v0, v4
+  000c: monitor-exit v6
+  000d: return v0
+  000e: const/4 v4, #int 2 // #2
+  000f: move v0, v4
+  0010: goto 000c // -0004
+Blort.testInstance4:(J)J:
+regs: 000c; ins: 0003; outs: 0000
+  0000: move-object v1, v9
+  0001: move-wide v2, v10
+  0002: move-object v8, v9
+  0003: monitor-enter v8
+  0004: move-wide v4, v2
+  0005: const-wide/16 v6, #long 1 // #0001
+  0007: cmp-long v4, v4, v6
+  0009: if-nez v4, 0010 // +0007
+  000b: const-wide/16 v4, #long 1 // #0001
+  000d: move-wide v1, v4
+  000e: monitor-exit v8
+  000f: return-wide v1
+  0010: const-wide/16 v4, #long 2 // #0002
+  0012: move-wide v1, v4
+  0013: goto 000e // -0005
+Blort.testInstance5:()V:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move-object v0, v3
+  0001: move-object v2, v3
+  0002: monitor-enter v2
+  0003: move-object v1, v0
+  0004: invoke-virtual {v1}, Blort.testInstance5:()V
+  0007: monitor-exit v2
+  0008: return-void
+  0009: move-exception v0
+  000a: monitor-exit v2
+  000b: throw v0
+  catches
+    tries:
+      try 0004..0007
+      catch <any> -> 0009
+Blort.testStatic1:()V:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const-class v1, Blort
+  0002: monitor-enter v1
+  0003: monitor-exit v1
+  0004: return-void
+Blort.testStatic2:(Ljava/lang/Object;)V:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move-object v0, v3
+  0001: const-class v2, Blort
+  0003: monitor-enter v2
+  0004: move-object v1, v0
+  0005: invoke-virtual {v1}, java.lang.Object.hashCode:()I
+  0008: move-result v1
+  0009: monitor-exit v2
+  000a: return-void
+  000b: move-exception v0
+  000c: monitor-exit v2
+  000d: throw v0
+  catches
+    tries:
+      try 0005..0008
+      catch <any> -> 000b
+Blort.testStatic3:(III)I:
+regs: 0009; ins: 0003; outs: 0000
+  0000: move v0, v6
+  0001: move v1, v7
+  0002: move v2, v8
+  0003: const-class v5, Blort
+  0005: monitor-enter v5
+  0006: move v3, v0
+  0007: const/4 v4, #int 1 // #1
+  0008: if-ne v3, v4, 000e // +0006
+  000a: const/4 v3, #int 1 // #1
+  000b: move v0, v3
+  000c: monitor-exit v5
+  000d: return v0
+  000e: const/4 v3, #int 2 // #2
+  000f: move v0, v3
+  0010: goto 000c // -0004
+Blort.testStatic4:(J)J:
+regs: 000a; ins: 0002; outs: 0000
+  0000: move-wide v0, v8
+  0001: const-class v6, Blort
+  0003: monitor-enter v6
+  0004: move-wide v2, v0
+  0005: const-wide/16 v4, #long 1 // #0001
+  0007: cmp-long v2, v2, v4
+  0009: if-nez v2, 0010 // +0007
+  000b: const-wide/16 v2, #long 1 // #0001
+  000d: move-wide v0, v2
+  000e: monitor-exit v6
+  000f: return-wide v0
+  0010: const-wide/16 v2, #long 2 // #0002
+  0012: move-wide v0, v2
+  0013: goto 000e // -0005
+Blort.testStatic5:()V:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const-class v1, Blort
+  0002: monitor-enter v1
+  0003: invoke-static {}, Blort.testStatic5:()V
+  0006: monitor-exit v1
+  0007: return-void
+  0008: move-exception v0
+  0009: monitor-exit v1
+  000a: throw v0
+  catches
+    tries:
+      try 0003..0006
+      catch <any> -> 0008
diff --git a/dx/tests/062-dex-synch-method/info.txt b/dx/tests/062-dex-synch-method/info.txt
new file mode 100644
index 0000000..0e82727
--- /dev/null
+++ b/dx/tests/062-dex-synch-method/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple cases of synchronized methods get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/062-dex-synch-method/run b/dx/tests/062-dex-synch-method/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/062-dex-synch-method/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/063-dex-empty-switch/Blort.class b/dx/tests/063-dex-empty-switch/Blort.class
new file mode 100644
index 0000000..c5d620f
Binary files /dev/null and b/dx/tests/063-dex-empty-switch/Blort.class differ
diff --git a/dx/tests/063-dex-empty-switch/Blort.java b/dx/tests/063-dex-empty-switch/Blort.java
new file mode 100644
index 0000000..f538995
--- /dev/null
+++ b/dx/tests/063-dex-empty-switch/Blort.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public int test1(int x) {
+        switch (x) {
+            default: return 1;
+        }
+    }
+
+    public int test2(int x) {
+        switch (x) {
+            default: x = 1;
+        }
+
+        return x;
+    }
+}
diff --git a/dx/tests/063-dex-empty-switch/build b/dx/tests/063-dex-empty-switch/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/063-dex-empty-switch/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/063-dex-empty-switch/expected.txt b/dx/tests/063-dex-empty-switch/expected.txt
new file mode 100644
index 0000000..e4d1a46
--- /dev/null
+++ b/dx/tests/063-dex-empty-switch/expected.txt
@@ -0,0 +1,18 @@
+Blort.test1:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: const/4 v2, #int 1 // #1
+  0004: move v0, v2
+  0005: return v0
+Blort.test2:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: const/4 v2, #int 1 // #1
+  0004: move v1, v2
+  0005: move v2, v1
+  0006: move v0, v2
+  0007: return v0
diff --git a/dx/tests/063-dex-empty-switch/info.txt b/dx/tests/063-dex-empty-switch/info.txt
new file mode 100644
index 0000000..38f212b
--- /dev/null
+++ b/dx/tests/063-dex-empty-switch/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to see that
+a couple cases of empty (that is, default-only) switch statements
+get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/063-dex-empty-switch/run b/dx/tests/063-dex-empty-switch/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/063-dex-empty-switch/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/064-dex-array-access/Blort.class b/dx/tests/064-dex-array-access/Blort.class
new file mode 100644
index 0000000..e4dbe32
Binary files /dev/null and b/dx/tests/064-dex-array-access/Blort.class differ
diff --git a/dx/tests/064-dex-array-access/Blort.java b/dx/tests/064-dex-array-access/Blort.java
new file mode 100644
index 0000000..fa03ec0
--- /dev/null
+++ b/dx/tests/064-dex-array-access/Blort.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public boolean test01(boolean[] x) {
+        x[0] = true;
+        return x[1];
+    }
+
+    public byte test02(byte[] x) {
+        x[0] = 5;
+        return x[1];
+    }
+
+    public short test03(short[] x) {
+        x[0] = 5;
+        return x[1];
+    }
+
+    public char test04(char[] x) {
+        x[0] = 5;
+        return x[1];
+    }
+
+    public int test05(int[] x) {
+        x[0] = 5;
+        return x[1];
+    }
+
+    public long test06(long[] x) {
+        x[0] = 5;
+        return x[1];
+    }
+
+    public float test07(float[] x) {
+        x[0] = 2.0f;
+        return x[1];
+    }
+
+    public double test08(double[] x) {
+        x[0] = 2.0;
+        return x[1];
+    }
+
+    public Object test09(Object[] x) {
+        x[0] = null;
+        return x[1];
+    }
+
+    public static Object test10(Object[][] x) {
+        x[0][0] = null;
+        return x[1][2];
+    }
+
+    public static int test11(Object x) {
+        int[][][] arr = (int[][][]) x;
+        arr[0][0][0] = 123;
+        return arr[1][2][3];
+    }
+}
diff --git a/dx/tests/064-dex-array-access/build b/dx/tests/064-dex-array-access/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/064-dex-array-access/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/064-dex-array-access/expected.txt b/dx/tests/064-dex-array-access/expected.txt
new file mode 100644
index 0000000..ae251e7
--- /dev/null
+++ b/dx/tests/064-dex-array-access/expected.txt
@@ -0,0 +1,157 @@
+Blort.test01:([Z)Z:
+regs: 0007; ins: 0002; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v1, v6
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const/4 v4, #int 1 // #1
+  0005: aput-boolean v4, v2, v3
+  0007: move-object v2, v1
+  0008: const/4 v3, #int 1 // #1
+  0009: aget-boolean v2, v2, v3
+  000b: move v0, v2
+  000c: return v0
+Blort.test02:([B)B:
+regs: 0007; ins: 0002; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v1, v6
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const/4 v4, #int 5 // #5
+  0005: aput-byte v4, v2, v3
+  0007: move-object v2, v1
+  0008: const/4 v3, #int 1 // #1
+  0009: aget-byte v2, v2, v3
+  000b: move v0, v2
+  000c: return v0
+Blort.test03:([S)S:
+regs: 0007; ins: 0002; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v1, v6
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const/4 v4, #int 5 // #5
+  0005: aput-short v4, v2, v3
+  0007: move-object v2, v1
+  0008: const/4 v3, #int 1 // #1
+  0009: aget-short v2, v2, v3
+  000b: move v0, v2
+  000c: return v0
+Blort.test04:([C)C:
+regs: 0007; ins: 0002; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v1, v6
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const/4 v4, #int 5 // #5
+  0005: aput-char v4, v2, v3
+  0007: move-object v2, v1
+  0008: const/4 v3, #int 1 // #1
+  0009: aget-char v2, v2, v3
+  000b: move v0, v2
+  000c: return v0
+Blort.test05:([I)I:
+regs: 0007; ins: 0002; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v1, v6
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const/4 v4, #int 5 // #5
+  0005: aput v4, v2, v3
+  0007: move-object v2, v1
+  0008: const/4 v3, #int 1 // #1
+  0009: aget v2, v2, v3
+  000b: move v0, v2
+  000c: return v0
+Blort.test06:([J)J:
+regs: 0008; ins: 0002; outs: 0000
+  0000: move-object v0, v6
+  0001: move-object v1, v7
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const-wide/16 v4, #long 5 // #0005
+  0006: aput-wide v4, v2, v3
+  0008: move-object v2, v1
+  0009: const/4 v3, #int 1 // #1
+  000a: aget-wide v2, v2, v3
+  000c: move-wide v0, v2
+  000d: return-wide v0
+Blort.test07:([F)F:
+regs: 0007; ins: 0002; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v1, v6
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const/high16 v4, #float 2.0 // #40000000
+  0006: aput v4, v2, v3
+  0008: move-object v2, v1
+  0009: const/4 v3, #int 1 // #1
+  000a: aget v2, v2, v3
+  000c: move v0, v2
+  000d: return v0
+Blort.test08:([D)D:
+regs: 0008; ins: 0002; outs: 0000
+  0000: move-object v0, v6
+  0001: move-object v1, v7
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const-wide/high16 v4, #double 2.0 // #4000000000000000
+  0006: aput-wide v4, v2, v3
+  0008: move-object v2, v1
+  0009: const/4 v3, #int 1 // #1
+  000a: aget-wide v2, v2, v3
+  000c: move-wide v0, v2
+  000d: return-wide v0
+Blort.test09:([Ljava/lang/Object;)Ljava/lang/Object;:
+regs: 0007; ins: 0002; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v1, v6
+  0002: move-object v2, v1
+  0003: const/4 v3, #int 0 // #0
+  0004: const/4 v4, #null // #0
+  0005: aput-object v4, v2, v3
+  0007: move-object v2, v1
+  0008: const/4 v3, #int 1 // #1
+  0009: aget-object v2, v2, v3
+  000b: move-object v0, v2
+  000c: return-object v0
+Blort.test10:([[Ljava/lang/Object;)Ljava/lang/Object;:
+regs: 0005; ins: 0001; outs: 0000
+  0000: move-object v0, v4
+  0001: move-object v1, v0
+  0002: const/4 v2, #int 0 // #0
+  0003: aget-object v1, v1, v2
+  0005: const/4 v2, #int 0 // #0
+  0006: const/4 v3, #null // #0
+  0007: aput-object v3, v1, v2
+  0009: move-object v1, v0
+  000a: const/4 v2, #int 1 // #1
+  000b: aget-object v1, v1, v2
+  000d: const/4 v2, #int 2 // #2
+  000e: aget-object v1, v1, v2
+  0010: move-object v0, v1
+  0011: return-object v0
+Blort.test11:(Ljava/lang/Object;)I:
+regs: 0006; ins: 0001; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v2, v0
+  0002: check-cast v2, int[][][]
+  0004: check-cast v2, int[][][]
+  0006: move-object v1, v2
+  0007: move-object v2, v1
+  0008: const/4 v3, #int 0 // #0
+  0009: aget-object v2, v2, v3
+  000b: const/4 v3, #int 0 // #0
+  000c: aget-object v2, v2, v3
+  000e: const/4 v3, #int 0 // #0
+  000f: const/16 v4, #int 123 // #007b
+  0011: aput v4, v2, v3
+  0013: move-object v2, v1
+  0014: const/4 v3, #int 1 // #1
+  0015: aget-object v2, v2, v3
+  0017: const/4 v3, #int 2 // #2
+  0018: aget-object v2, v2, v3
+  001a: const/4 v3, #int 3 // #3
+  001b: aget v2, v2, v3
+  001d: move v0, v2
+  001e: return v0
diff --git a/dx/tests/064-dex-array-access/info.txt b/dx/tests/064-dex-array-access/info.txt
new file mode 100644
index 0000000..8f81663
--- /dev/null
+++ b/dx/tests/064-dex-array-access/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a few cases of array access get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/064-dex-array-access/run b/dx/tests/064-dex-array-access/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/064-dex-array-access/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/065-dex-new-array/Blort.class b/dx/tests/065-dex-new-array/Blort.class
new file mode 100644
index 0000000..58a5709
Binary files /dev/null and b/dx/tests/065-dex-new-array/Blort.class differ
diff --git a/dx/tests/065-dex-new-array/Blort.java b/dx/tests/065-dex-new-array/Blort.java
new file mode 100644
index 0000000..7a7eaa4
--- /dev/null
+++ b/dx/tests/065-dex-new-array/Blort.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public boolean[] test1() {
+        return new boolean[1];
+    }
+
+    public byte[] test2() {
+        return new byte[1];
+    }
+
+    public short[] test3() {
+        return new short[1];
+    }
+
+    public char[] test4() {
+        return new char[1];
+    }
+
+    public int[] test5() {
+        return new int[1];
+    }
+
+    public long[] test6() {
+        return new long[1];
+    }
+
+    public float[] test7() {
+        return new float[1];
+    }
+
+    public double[] test8() {
+        return new double[1];
+    }
+
+    public Object[] test9() {
+        return new Object[1];
+    }
+}
diff --git a/dx/tests/065-dex-new-array/build b/dx/tests/065-dex-new-array/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/065-dex-new-array/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/065-dex-new-array/expected.txt b/dx/tests/065-dex-new-array/expected.txt
new file mode 100644
index 0000000..0b26182
--- /dev/null
+++ b/dx/tests/065-dex-new-array/expected.txt
@@ -0,0 +1,63 @@
+Blort.test1:()[Z:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, boolean[]
+  0004: move-object v0, v1
+  0005: return-object v0
+Blort.test2:()[B:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, byte[]
+  0004: move-object v0, v1
+  0005: return-object v0
+Blort.test3:()[S:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, short[]
+  0004: move-object v0, v1
+  0005: return-object v0
+Blort.test4:()[C:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, char[]
+  0004: move-object v0, v1
+  0005: return-object v0
+Blort.test5:()[I:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, int[]
+  0004: move-object v0, v1
+  0005: return-object v0
+Blort.test6:()[J:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, long[]
+  0004: move-object v0, v1
+  0005: return-object v0
+Blort.test7:()[F:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, float[]
+  0004: move-object v0, v1
+  0005: return-object v0
+Blort.test8:()[D:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, double[]
+  0004: move-object v0, v1
+  0005: return-object v0
+Blort.test9:()[Ljava/lang/Object;:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: const/4 v1, #int 1 // #1
+  0002: new-array v1, v1, java.lang.Object[]
+  0004: move-object v0, v1
+  0005: return-object v0
diff --git a/dx/tests/065-dex-new-array/info.txt b/dx/tests/065-dex-new-array/info.txt
new file mode 100644
index 0000000..f4d2cc5
--- /dev/null
+++ b/dx/tests/065-dex-new-array/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a few cases of array construction get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/065-dex-new-array/run b/dx/tests/065-dex-new-array/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/065-dex-new-array/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/066-dex-try-catch-rethrow/Blort.class b/dx/tests/066-dex-try-catch-rethrow/Blort.class
new file mode 100644
index 0000000..26074bd
Binary files /dev/null and b/dx/tests/066-dex-try-catch-rethrow/Blort.class differ
diff --git a/dx/tests/066-dex-try-catch-rethrow/Blort.java b/dx/tests/066-dex-try-catch-rethrow/Blort.java
new file mode 100644
index 0000000..cdb00ea
--- /dev/null
+++ b/dx/tests/066-dex-try-catch-rethrow/Blort.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static Object zorch1(String s) {
+        return null;
+    }
+
+    public static void test1() {
+        try {
+            zorch1("x");
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public static void zorch2(String s) {
+        // This space intentionally left blank.
+    }
+
+    public static void test2() {
+        try {
+            zorch2("x");
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public static int zorch3(String s) {
+        return 0;
+    }
+
+    public static void test3() {
+        try {
+            zorch3("x");
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public static Object zorch4(int x) {
+        return null;
+    }
+
+    public static void test4() {
+        try {
+            zorch4(1);
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public static Object zorch5(int x) {
+        return null;
+    }
+
+    public static Object test5() {
+        try {
+            return zorch5(1);
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+}
diff --git a/dx/tests/066-dex-try-catch-rethrow/build b/dx/tests/066-dex-try-catch-rethrow/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/066-dex-try-catch-rethrow/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/066-dex-try-catch-rethrow/expected.txt b/dx/tests/066-dex-try-catch-rethrow/expected.txt
new file mode 100644
index 0000000..13af56c
--- /dev/null
+++ b/dx/tests/066-dex-try-catch-rethrow/expected.txt
@@ -0,0 +1,95 @@
+Blort.test1:()V:
+regs: 0005; ins: 0000; outs: 0002
+  0000: const-string v1, "x"
+  0002: invoke-static {v1}, Blort.zorch1:(Ljava/lang/String;)Ljava/lang/Object;
+  0005: move-result-object v1
+  0006: return-void
+  0007: move-exception v1
+  0008: move-object v0, v1
+  0009: new-instance v1, java.lang.RuntimeException
+  000b: move-object v4, v1
+  000c: move-object v1, v4
+  000d: move-object v2, v4
+  000e: move-object v3, v0
+  000f: invoke-direct {v2, v3}, java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
+  0012: throw v1
+  catches
+    tries:
+      try 0000..0005
+      catch java.lang.Exception -> 0007
+Blort.test2:()V:
+regs: 0005; ins: 0000; outs: 0002
+  0000: const-string v1, "x"
+  0002: invoke-static {v1}, Blort.zorch2:(Ljava/lang/String;)V
+  0005: return-void
+  0006: move-exception v1
+  0007: move-object v0, v1
+  0008: new-instance v1, java.lang.RuntimeException
+  000a: move-object v4, v1
+  000b: move-object v1, v4
+  000c: move-object v2, v4
+  000d: move-object v3, v0
+  000e: invoke-direct {v2, v3}, java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
+  0011: throw v1
+  catches
+    tries:
+      try 0000..0005
+      catch java.lang.Exception -> 0006
+Blort.test3:()V:
+regs: 0005; ins: 0000; outs: 0002
+  0000: const-string v1, "x"
+  0002: invoke-static {v1}, Blort.zorch3:(Ljava/lang/String;)I
+  0005: move-result v1
+  0006: return-void
+  0007: move-exception v1
+  0008: move-object v0, v1
+  0009: new-instance v1, java.lang.RuntimeException
+  000b: move-object v4, v1
+  000c: move-object v1, v4
+  000d: move-object v2, v4
+  000e: move-object v3, v0
+  000f: invoke-direct {v2, v3}, java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
+  0012: throw v1
+  catches
+    tries:
+      try 0000..0005
+      catch java.lang.Exception -> 0007
+Blort.test4:()V:
+regs: 0005; ins: 0000; outs: 0002
+  0000: const/4 v1, #int 1 // #1
+  0001: invoke-static {v1}, Blort.zorch4:(I)Ljava/lang/Object;
+  0004: move-result-object v1
+  0005: return-void
+  0006: move-exception v1
+  0007: move-object v0, v1
+  0008: new-instance v1, java.lang.RuntimeException
+  000a: move-object v4, v1
+  000b: move-object v1, v4
+  000c: move-object v2, v4
+  000d: move-object v3, v0
+  000e: invoke-direct {v2, v3}, java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
+  0011: throw v1
+  catches
+    tries:
+      try 0001..0004
+      catch java.lang.Exception -> 0006
+Blort.test5:()Ljava/lang/Object;:
+regs: 0005; ins: 0000; outs: 0002
+  0000: const/4 v1, #int 1 // #1
+  0001: invoke-static {v1}, Blort.zorch5:(I)Ljava/lang/Object;
+  0004: move-result-object v1
+  0005: move-object v0, v1
+  0006: return-object v0
+  0007: move-exception v1
+  0008: move-object v0, v1
+  0009: new-instance v1, java.lang.RuntimeException
+  000b: move-object v4, v1
+  000c: move-object v1, v4
+  000d: move-object v2, v4
+  000e: move-object v3, v0
+  000f: invoke-direct {v2, v3}, java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
+  0012: throw v1
+  catches
+    tries:
+      try 0001..0004
+      catch java.lang.Exception -> 0007
diff --git a/dx/tests/066-dex-try-catch-rethrow/info.txt b/dx/tests/066-dex-try-catch-rethrow/info.txt
new file mode 100644
index 0000000..b2696b8
--- /dev/null
+++ b/dx/tests/066-dex-try-catch-rethrow/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which looks at a few cases of
+a try-catch where the exception handler rethrows.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/066-dex-try-catch-rethrow/run b/dx/tests/066-dex-try-catch-rethrow/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/066-dex-try-catch-rethrow/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/067-dex-switch-and-try/Blort.class b/dx/tests/067-dex-switch-and-try/Blort.class
new file mode 100644
index 0000000..5906af9
Binary files /dev/null and b/dx/tests/067-dex-switch-and-try/Blort.class differ
diff --git a/dx/tests/067-dex-switch-and-try/Blort.java b/dx/tests/067-dex-switch-and-try/Blort.java
new file mode 100644
index 0000000..e6435e1
--- /dev/null
+++ b/dx/tests/067-dex-switch-and-try/Blort.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    static public void blort() {
+        // This space intentionally left blank.
+    }
+
+    // This test has a try-catch but the try code can't possibly throw.
+    public int test1(int x) {
+        try {
+            switch (x) {
+                case 1: {
+                    x = 10;
+                    break;
+                }
+                case 2: {
+                    x = 20;
+                    break;
+                }
+            }
+        } catch (RuntimeException ex) {
+            // Ignore it.
+        }
+
+        return x;
+    }
+
+    // This test has a try-catch where the try code can theoretically throw.
+    public int test2(int x) {
+        try {
+            switch (x) {
+                case 1: {
+                    x = 10;
+                    blort();
+                    break;
+                }
+                case 2: {
+                    x = 20;
+                    break;
+                }
+            }
+        } catch (RuntimeException ex) {
+            // Ignore it.
+        }
+
+        return x;
+    }
+
+    // This test has a switch with a case that has a try-catch where
+    // the try code can theoretically throw, but it would be caught
+    // inside the case itself.
+    public int test3(int x) {
+        switch (x) {
+            case 1: {
+                try {
+                    x = 10;
+                    blort();
+                } catch (RuntimeException ex) {
+                    // Ignore it.
+                }
+                break;
+            }
+            case 2: {
+                x = 20;
+                break;
+            }
+        }
+
+        return x;
+    }
+
+    // This test has a try-catch that has a switch with a case that
+    // has a try-catch where the try code can theoretically throw, but
+    // it would be caught inside the case itself, so the outer
+    // exception handler should be considered dead.
+    public int test4(int x) {
+        try {
+            switch (x) {
+                case 1: {
+                    try {
+                        x = 10;
+                        blort();
+                    } catch (RuntimeException ex) {
+                        // Ignore it.
+                    }
+                    break;
+                }
+                case 2: {
+                    x = 20;
+                    break;
+                }
+            }
+        } catch (RuntimeException ex) {
+            return 4;
+        }
+
+        return x;
+    }
+}
diff --git a/dx/tests/067-dex-switch-and-try/build b/dx/tests/067-dex-switch-and-try/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/067-dex-switch-and-try/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/067-dex-switch-and-try/expected.txt b/dx/tests/067-dex-switch-and-try/expected.txt
new file mode 100644
index 0000000..0a101d5
--- /dev/null
+++ b/dx/tests/067-dex-switch-and-try/expected.txt
@@ -0,0 +1,100 @@
+Blort.test1:(I)I:
+regs: 0006; ins: 0002; outs: 0000
+  0000: move-object v0, v4
+  0001: move v1, v5
+  0002: move v3, v1
+  0003: packed-switch v3, 0012 // +000f
+  0006: move v3, v1
+  0007: move v0, v3
+  0008: return v0
+  0009: const/16 v3, #int 10 // #000a
+  000b: move v1, v3
+  000c: goto 0006 // -0006
+  000d: const/16 v3, #int 20 // #0014
+  000f: move v1, v3
+  0010: goto 0006 // -000a
+  0011: nop // spacer
+  0012: packed-switch-payload // for switch @ 0003
+          1: 00000009 // +00000006
+          2: 0000000d // +0000000a
+Blort.test2:(I)I:
+regs: 0006; ins: 0002; outs: 0000
+  0000: move-object v0, v4
+  0001: move v1, v5
+  0002: move v3, v1
+  0003: packed-switch v3, 0018 // +0015
+  0006: move v3, v1
+  0007: move v0, v3
+  0008: return v0
+  0009: const/16 v3, #int 10 // #000a
+  000b: move v1, v3
+  000c: invoke-static {}, Blort.blort:()V
+  000f: goto 0006 // -0009
+  0010: const/16 v3, #int 20 // #0014
+  0012: move v1, v3
+  0013: goto 0006 // -000d
+  0014: move-exception v3
+  0015: move-object v2, v3
+  0016: goto 0006 // -0010
+  0017: nop // spacer
+  0018: packed-switch-payload // for switch @ 0003
+          1: 00000009 // +00000006
+          2: 00000010 // +0000000d
+  catches
+    tries:
+      try 000c..000f
+      catch java.lang.RuntimeException -> 0014
+Blort.test3:(I)I:
+regs: 0006; ins: 0002; outs: 0000
+  0000: move-object v0, v4
+  0001: move v1, v5
+  0002: move v3, v1
+  0003: packed-switch v3, 0018 // +0015
+  0006: move v3, v1
+  0007: move v0, v3
+  0008: return v0
+  0009: const/16 v3, #int 10 // #000a
+  000b: move v1, v3
+  000c: invoke-static {}, Blort.blort:()V
+  000f: goto 0006 // -0009
+  0010: move-exception v3
+  0011: move-object v2, v3
+  0012: goto 0006 // -000c
+  0013: const/16 v3, #int 20 // #0014
+  0015: move v1, v3
+  0016: goto 0006 // -0010
+  0017: nop // spacer
+  0018: packed-switch-payload // for switch @ 0003
+          1: 00000009 // +00000006
+          2: 00000013 // +00000010
+  catches
+    tries:
+      try 000c..000f
+      catch java.lang.RuntimeException -> 0010
+Blort.test4:(I)I:
+regs: 0006; ins: 0002; outs: 0000
+  0000: move-object v0, v4
+  0001: move v1, v5
+  0002: move v3, v1
+  0003: packed-switch v3, 0018 // +0015
+  0006: move v3, v1
+  0007: move v0, v3
+  0008: return v0
+  0009: const/16 v3, #int 10 // #000a
+  000b: move v1, v3
+  000c: invoke-static {}, Blort.blort:()V
+  000f: goto 0006 // -0009
+  0010: move-exception v3
+  0011: move-object v2, v3
+  0012: goto 0006 // -000c
+  0013: const/16 v3, #int 20 // #0014
+  0015: move v1, v3
+  0016: goto 0006 // -0010
+  0017: nop // spacer
+  0018: packed-switch-payload // for switch @ 0003
+          1: 00000009 // +00000006
+          2: 00000013 // +00000010
+  catches
+    tries:
+      try 000c..000f
+      catch java.lang.RuntimeException -> 0010
diff --git a/dx/tests/067-dex-switch-and-try/info.txt b/dx/tests/067-dex-switch-and-try/info.txt
new file mode 100644
index 0000000..68e8117
--- /dev/null
+++ b/dx/tests/067-dex-switch-and-try/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which looks at a couple cases of
+embedding a switch statement in a try-catch and vice versa. This test
+was created specifically because of a bug with exactly this situation.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/067-dex-switch-and-try/run b/dx/tests/067-dex-switch-and-try/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/067-dex-switch-and-try/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/068-dex-infinite-loop/Blort.class b/dx/tests/068-dex-infinite-loop/Blort.class
new file mode 100644
index 0000000..1942f33
Binary files /dev/null and b/dx/tests/068-dex-infinite-loop/Blort.class differ
diff --git a/dx/tests/068-dex-infinite-loop/Blort.java b/dx/tests/068-dex-infinite-loop/Blort.java
new file mode 100644
index 0000000..f026407
--- /dev/null
+++ b/dx/tests/068-dex-infinite-loop/Blort.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static boolean zorch() {
+        return true;
+    }
+
+    public static void test1() {
+        for (;;) {
+            // This space intentionally left blank.
+        }
+    }
+
+    public static void test2() {
+        while (zorch()) {
+            // This space intentionally left blank.
+        }
+    }
+
+    public static void test3() {
+        while (zorch()) {
+            zorch();
+        }
+    }
+
+    public static void test4() {
+        for (;;) {
+            if (zorch()) {
+                break;
+            }
+
+            while (zorch()) {
+                zorch();
+            }
+        }
+    }
+}
diff --git a/dx/tests/068-dex-infinite-loop/build b/dx/tests/068-dex-infinite-loop/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/068-dex-infinite-loop/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/068-dex-infinite-loop/expected.txt b/dx/tests/068-dex-infinite-loop/expected.txt
new file mode 100644
index 0000000..1a84bd9
--- /dev/null
+++ b/dx/tests/068-dex-infinite-loop/expected.txt
@@ -0,0 +1,28 @@
+Blort.test1:()V:
+regs: 0000; ins: 0000; outs: 0000
+  0000: goto/32 0000 // +0000
+Blort.test2:()V:
+regs: 0001; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.zorch:()Z
+  0003: move-result v0
+  0004: if-nez v0, 0000 // -0004
+  0006: return-void
+Blort.test3:()V:
+regs: 0001; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.zorch:()Z
+  0003: move-result v0
+  0004: if-eqz v0, 000a // +0006
+  0006: invoke-static {}, Blort.zorch:()Z
+  0009: goto 0000 // -0009
+  000a: return-void
+Blort.test4:()V:
+regs: 0001; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.zorch:()Z
+  0003: move-result v0
+  0004: if-eqz v0, 0007 // +0003
+  0006: return-void
+  0007: invoke-static {}, Blort.zorch:()Z
+  000a: move-result v0
+  000b: if-eqz v0, 0000 // -000b
+  000d: invoke-static {}, Blort.zorch:()Z
+  0010: goto 0007 // -0009
diff --git a/dx/tests/068-dex-infinite-loop/info.txt b/dx/tests/068-dex-infinite-loop/info.txt
new file mode 100644
index 0000000..358f0a8
--- /dev/null
+++ b/dx/tests/068-dex-infinite-loop/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which makes sure that a couple
+cases of (potentially) infinite loops translate reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/068-dex-infinite-loop/run b/dx/tests/068-dex-infinite-loop/run
new file mode 100644
index 0000000..59ae2a2
--- /dev/null
+++ b/dx/tests/068-dex-infinite-loop/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/069-dex-source-position/Blort.class b/dx/tests/069-dex-source-position/Blort.class
new file mode 100644
index 0000000..34eb6ea
Binary files /dev/null and b/dx/tests/069-dex-source-position/Blort.class differ
diff --git a/dx/tests/069-dex-source-position/Blort.java b/dx/tests/069-dex-source-position/Blort.java
new file mode 100644
index 0000000..8c0c5c0
--- /dev/null
+++ b/dx/tests/069-dex-source-position/Blort.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static int test(int x) {
+        if (x == 0) { // line 6
+            return 1; // line 7
+        } else {
+            try {
+                x = test(x - 1); // line 10
+            } catch (RuntimeException ex) { // line 11
+                return 2; // line 12
+            }
+            x += test(x - 2); // line 14
+            return x; // line 15
+        }
+    }
+}
diff --git a/dx/tests/069-dex-source-position/build b/dx/tests/069-dex-source-position/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/069-dex-source-position/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/069-dex-source-position/expected.txt b/dx/tests/069-dex-source-position/expected.txt
new file mode 100644
index 0000000..cd45497
--- /dev/null
+++ b/dx/tests/069-dex-source-position/expected.txt
@@ -0,0 +1,134 @@
+Blort.test:(I)I:
+regs: 0006; ins: 0001; outs: 0001
+  0000: move v0, v5
+  0001: move v2, v0
+  0002: if-nez v2, 0007 // +0005
+  0004: const/4 v2, #int 1 // #1
+  0005: move v0, v2
+  0006: return v0
+  0007: move v2, v0
+  0008: const/4 v3, #int 1 // #1
+  0009: add-int/lit8 v2, v2, #int -1 // #ff
+  000b: invoke-static {v2}, Blort.test:(I)I
+  000e: move-result v2
+  000f: move v0, v2
+  0010: move v2, v0
+  0011: move v3, v0
+  0012: const/4 v4, #int 2 // #2
+  0013: add-int/lit8 v3, v3, #int -2 // #fe
+  0015: invoke-static {v3}, Blort.test:(I)I
+  0018: move-result v3
+  0019: add-int/2addr v2, v3
+  001a: move v0, v2
+  001b: move v2, v0
+  001c: move v0, v2
+  001d: goto 0006 // -0017
+  001e: move-exception v2
+  001f: move-object v1, v2
+  0020: const/4 v2, #int 2 // #2
+  0021: move v0, v2
+  0022: goto 0006 // -001c
+  catches
+    tries:
+      try 000b..000e
+      catch java.lang.RuntimeException -> 001e
+Blort.test:(I)I:
+regs: 0006; ins: 0001; outs: 0001
+  0000: move v0, v5
+  0001: move v2, v0
+  0002: if-nez v2, 0007 // +0005
+  0004: const/4 v2, #int 1 // #1
+  0005: move v0, v2
+  0006: return v0
+  0007: move v2, v0
+  0008: const/4 v3, #int 1 // #1
+  0009: add-int/lit8 v2, v2, #int -1 // #ff
+  000b: invoke-static {v2}, Blort.test:(I)I
+  000e: move-result v2
+  000f: move v0, v2
+  0010: move v2, v0
+  0011: move v3, v0
+  0012: const/4 v4, #int 2 // #2
+  0013: add-int/lit8 v3, v3, #int -2 // #fe
+  0015: invoke-static {v3}, Blort.test:(I)I
+  0018: move-result v3
+  0019: add-int/2addr v2, v3
+  001a: move v0, v2
+  001b: move v2, v0
+  001c: move v0, v2
+  001d: goto 0006 // -0017
+  001e: move-exception v2
+  001f: move-object v1, v2
+  0020: const/4 v2, #int 2 // #2
+  0021: move v0, v2
+  0022: goto 0006 // -001c
+  catches
+    tries:
+      try 000b..000e
+      catch java.lang.RuntimeException -> 001e
+  debug info
+    line_start: 20
+    parameters_size: 0001
+    parameter <unnamed> v5
+    0000: prologue end
+    0000: line 20
+    0004: line 21
+    0006: line 29
+    line = 24
+    0007: line 24
+    0010: line 28
+    001b: line 29
+    001e: line 25
+    0020: line 26
+    end sequence
+  source file: "Blort.java"
+Blort.test:(I)I:
+regs: 0006; ins: 0001; outs: 0001
+  0000: move v0, v5
+  0001: move v2, v0
+  0002: if-nez v2, 0007 // +0005
+  0004: const/4 v2, #int 1 // #1
+  0005: move v0, v2
+  0006: return v0
+  0007: move v2, v0
+  0008: const/4 v3, #int 1 // #1
+  0009: add-int/lit8 v2, v2, #int -1 // #ff
+  000b: invoke-static {v2}, Blort.test:(I)I
+  000e: move-result v2
+  000f: move v0, v2
+  0010: move v2, v0
+  0011: move v3, v0
+  0012: const/4 v4, #int 2 // #2
+  0013: add-int/lit8 v3, v3, #int -2 // #fe
+  0015: invoke-static {v3}, Blort.test:(I)I
+  0018: move-result v3
+  0019: add-int/2addr v2, v3
+  001a: move v0, v2
+  001b: move v2, v0
+  001c: move v0, v2
+  001d: goto 0006 // -0017
+  001e: move-exception v2
+  001f: move-object v1, v2
+  0020: const/4 v2, #int 2 // #2
+  0021: move v0, v2
+  0022: goto 0006 // -001c
+  catches
+    tries:
+      try 000b..000e
+      catch java.lang.RuntimeException -> 001e
+  debug info
+    line_start: 20
+    parameters_size: 0001
+    parameter <unnamed> v5
+    0000: prologue end
+    0000: line 20
+    0004: line 21
+    0006: line 29
+    line = 24
+    0007: line 24
+    0010: line 28
+    001b: line 29
+    001e: line 25
+    0020: line 26
+    end sequence
+  source file: "Blort.java"
diff --git a/dx/tests/069-dex-source-position/info.txt b/dx/tests/069-dex-source-position/info.txt
new file mode 100644
index 0000000..28c8b51
--- /dev/null
+++ b/dx/tests/069-dex-source-position/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which makes sure that source
+position information is faithfully reproduced (or not, as directed).
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/069-dex-source-position/run b/dx/tests/069-dex-source-position/run
new file mode 100644
index 0000000..aae5d6e
--- /dev/null
+++ b/dx/tests/069-dex-source-position/run
@@ -0,0 +1,22 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
+dx --debug --dex --no-optimize --positions=important --no-locals \
+    --dump-method=Blort.test'*' Blort.class
+dx --debug --dex --no-optimize --positions=lines --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/070-dex-multianewarray/Blort.class b/dx/tests/070-dex-multianewarray/Blort.class
new file mode 100644
index 0000000..f48268f
Binary files /dev/null and b/dx/tests/070-dex-multianewarray/Blort.class differ
diff --git a/dx/tests/070-dex-multianewarray/Blort.java b/dx/tests/070-dex-multianewarray/Blort.java
new file mode 100644
index 0000000..ef812cf
--- /dev/null
+++ b/dx/tests/070-dex-multianewarray/Blort.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static Object test01() {
+        Object[][] x = new Object[2][5];
+        return x;
+    }
+
+    public static Object test02() {
+        Object[][][] x = new Object[4][1][];
+        return x;
+    }
+
+    public static Object test03() {
+        Object[][][] x = new Object[7][2][4];
+        return x;
+    }
+
+    public static Object test04() {
+        Object[][][] x = new Object[3][0][0];
+        return x;
+    }
+
+    public static Object test05() {
+        Object[][][][] x = new Object[1][3][5][7];
+        return x;
+    }
+
+    public static Object test06() {
+        Object[][][][][] x = new Object[8][7][2][3][4];
+        return x;
+    }
+
+    public static Object test07() {
+        Object[][][][][][] x = new Object[8][7][2][3][4][];
+        return x;
+    }
+
+    public static Object test08() {
+        Object[][][][][][][] x = new Object[8][7][2][3][4][][];
+        return x;
+    }
+
+    public static boolean[][] test09() {
+        return new boolean[1][2];
+    }
+
+    public static byte[][] test10() {
+        return new byte[3][4];
+    }
+
+    public static char[][] test11() {
+        return new char[5][6];
+    }
+
+    public static double[][] test12() {
+        return new double[7][8];
+    }
+
+    public static float[][] test13() {
+        return new float[9][1];
+    }
+
+    public static int[][][] test14() {
+        return new int[5][3][2];
+    }
+
+    public static long[][][] test15() {
+        return new long[3][4][7];
+    }
+
+    public static short[][][][] test16() {
+        return new short[5][4][3][2];
+    }
+
+    public static String[][][][][] test17() {
+        return new String[5][4][3][2][1];
+    }
+
+    public static Runnable[][][][][][] test18() {
+        return new Runnable[5][4][3][2][1][8];
+    }
+}
diff --git a/dx/tests/070-dex-multianewarray/build b/dx/tests/070-dex-multianewarray/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/070-dex-multianewarray/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/070-dex-multianewarray/expected.txt b/dx/tests/070-dex-multianewarray/expected.txt
new file mode 100644
index 0000000..9ddbabe
--- /dev/null
+++ b/dx/tests/070-dex-multianewarray/expected.txt
@@ -0,0 +1,246 @@
+Blort.test01:()Ljava/lang/Object;:
+regs: 0003; ins: 0000; outs: 0002
+  0000: const/4 v1, #int 2 // #2
+  0001: const/4 v2, #int 5 // #5
+  0002: filled-new-array {v1, v2}, int[]
+  0005: move-result-object v2
+  0006: const-class v1, java.lang.Object
+  0008: invoke-static {v1, v2}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000b: move-result-object v1
+  000c: check-cast v1, java.lang.Object[][]
+  000e: move-object v0, v1
+  000f: move-object v1, v0
+  0010: move-object v0, v1
+  0011: return-object v0
+Blort.test02:()Ljava/lang/Object;:
+regs: 0003; ins: 0000; outs: 0002
+  0000: const/4 v1, #int 4 // #4
+  0001: const/4 v2, #int 1 // #1
+  0002: filled-new-array {v1, v2}, int[]
+  0005: move-result-object v2
+  0006: const-class v1, java.lang.Object[]
+  0008: invoke-static {v1, v2}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000b: move-result-object v1
+  000c: check-cast v1, java.lang.Object[][][]
+  000e: move-object v0, v1
+  000f: move-object v1, v0
+  0010: move-object v0, v1
+  0011: return-object v0
+Blort.test03:()Ljava/lang/Object;:
+regs: 0004; ins: 0000; outs: 0002
+  0000: const/4 v1, #int 7 // #7
+  0001: const/4 v2, #int 2 // #2
+  0002: const/4 v3, #int 4 // #4
+  0003: filled-new-array {v1, v2, v3}, int[]
+  0006: move-result-object v2
+  0007: const-class v1, java.lang.Object
+  0009: invoke-static {v1, v2}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000c: move-result-object v1
+  000d: check-cast v1, java.lang.Object[][][]
+  000f: move-object v0, v1
+  0010: move-object v1, v0
+  0011: move-object v0, v1
+  0012: return-object v0
+Blort.test04:()Ljava/lang/Object;:
+regs: 0004; ins: 0000; outs: 0002
+  0000: const/4 v1, #int 3 // #3
+  0001: const/4 v2, #int 0 // #0
+  0002: const/4 v3, #int 0 // #0
+  0003: filled-new-array {v1, v2, v3}, int[]
+  0006: move-result-object v2
+  0007: const-class v1, java.lang.Object
+  0009: invoke-static {v1, v2}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000c: move-result-object v1
+  000d: check-cast v1, java.lang.Object[][][]
+  000f: move-object v0, v1
+  0010: move-object v1, v0
+  0011: move-object v0, v1
+  0012: return-object v0
+Blort.test05:()Ljava/lang/Object;:
+regs: 0005; ins: 0000; outs: 0002
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v2, #int 3 // #3
+  0002: const/4 v3, #int 5 // #5
+  0003: const/4 v4, #int 7 // #7
+  0004: filled-new-array {v1, v2, v3, v4}, int[]
+  0007: move-result-object v2
+  0008: const-class v1, java.lang.Object
+  000a: invoke-static {v1, v2}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000d: move-result-object v1
+  000e: check-cast v1, java.lang.Object[][][][]
+  0010: move-object v0, v1
+  0011: move-object v1, v0
+  0012: move-object v0, v1
+  0013: return-object v0
+Blort.test06:()Ljava/lang/Object;:
+regs: 0006; ins: 0000; outs: 0002
+  0000: const/16 v1, #int 8 // #0008
+  0002: const/4 v2, #int 7 // #7
+  0003: const/4 v3, #int 2 // #2
+  0004: const/4 v4, #int 3 // #3
+  0005: const/4 v5, #int 4 // #4
+  0006: filled-new-array {v1, v2, v3, v4, v5}, int[]
+  0009: move-result-object v2
+  000a: const-class v1, java.lang.Object
+  000c: invoke-static {v1, v2}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000f: move-result-object v1
+  0010: check-cast v1, java.lang.Object[][][][][]
+  0012: move-object v0, v1
+  0013: move-object v1, v0
+  0014: move-object v0, v1
+  0015: return-object v0
+Blort.test07:()Ljava/lang/Object;:
+regs: 0006; ins: 0000; outs: 0002
+  0000: const/16 v1, #int 8 // #0008
+  0002: const/4 v2, #int 7 // #7
+  0003: const/4 v3, #int 2 // #2
+  0004: const/4 v4, #int 3 // #3
+  0005: const/4 v5, #int 4 // #4
+  0006: filled-new-array {v1, v2, v3, v4, v5}, int[]
+  0009: move-result-object v2
+  000a: const-class v1, java.lang.Object[]
+  000c: invoke-static {v1, v2}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000f: move-result-object v1
+  0010: check-cast v1, java.lang.Object[][][][][][]
+  0012: move-object v0, v1
+  0013: move-object v1, v0
+  0014: move-object v0, v1
+  0015: return-object v0
+Blort.test08:()Ljava/lang/Object;:
+regs: 0006; ins: 0000; outs: 0002
+  0000: const/16 v1, #int 8 // #0008
+  0002: const/4 v2, #int 7 // #7
+  0003: const/4 v3, #int 2 // #2
+  0004: const/4 v4, #int 3 // #3
+  0005: const/4 v5, #int 4 // #4
+  0006: filled-new-array {v1, v2, v3, v4, v5}, int[]
+  0009: move-result-object v2
+  000a: const-class v1, java.lang.Object[][]
+  000c: invoke-static {v1, v2}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000f: move-result-object v1
+  0010: check-cast v1, java.lang.Object[][][][][][][]
+  0012: move-object v0, v1
+  0013: move-object v1, v0
+  0014: move-object v0, v1
+  0015: return-object v0
+Blort.test09:()[[Z:
+regs: 0002; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 1 // #1
+  0001: const/4 v1, #int 2 // #2
+  0002: filled-new-array {v0, v1}, int[]
+  0005: move-result-object v1
+  0006: sget-object v0, java.lang.Boolean.TYPE:Ljava/lang/Class;
+  0008: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000b: move-result-object v0
+  000c: check-cast v0, boolean[][]
+  000e: return-object v0
+Blort.test10:()[[B:
+regs: 0002; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 3 // #3
+  0001: const/4 v1, #int 4 // #4
+  0002: filled-new-array {v0, v1}, int[]
+  0005: move-result-object v1
+  0006: sget-object v0, java.lang.Byte.TYPE:Ljava/lang/Class;
+  0008: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000b: move-result-object v0
+  000c: check-cast v0, byte[][]
+  000e: return-object v0
+Blort.test11:()[[C:
+regs: 0002; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 5 // #5
+  0001: const/4 v1, #int 6 // #6
+  0002: filled-new-array {v0, v1}, int[]
+  0005: move-result-object v1
+  0006: sget-object v0, java.lang.Character.TYPE:Ljava/lang/Class;
+  0008: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000b: move-result-object v0
+  000c: check-cast v0, char[][]
+  000e: return-object v0
+Blort.test12:()[[D:
+regs: 0002; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 7 // #7
+  0001: const/16 v1, #int 8 // #0008
+  0003: filled-new-array {v0, v1}, int[]
+  0006: move-result-object v1
+  0007: sget-object v0, java.lang.Double.TYPE:Ljava/lang/Class;
+  0009: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000c: move-result-object v0
+  000d: check-cast v0, double[][]
+  000f: return-object v0
+Blort.test13:()[[F:
+regs: 0002; ins: 0000; outs: 0002
+  0000: const/16 v0, #int 9 // #0009
+  0002: const/4 v1, #int 1 // #1
+  0003: filled-new-array {v0, v1}, int[]
+  0006: move-result-object v1
+  0007: sget-object v0, java.lang.Float.TYPE:Ljava/lang/Class;
+  0009: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000c: move-result-object v0
+  000d: check-cast v0, float[][]
+  000f: return-object v0
+Blort.test14:()[[[I:
+regs: 0003; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 5 // #5
+  0001: const/4 v1, #int 3 // #3
+  0002: const/4 v2, #int 2 // #2
+  0003: filled-new-array {v0, v1, v2}, int[]
+  0006: move-result-object v1
+  0007: sget-object v0, java.lang.Integer.TYPE:Ljava/lang/Class;
+  0009: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000c: move-result-object v0
+  000d: check-cast v0, int[][][]
+  000f: return-object v0
+Blort.test15:()[[[J:
+regs: 0003; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 3 // #3
+  0001: const/4 v1, #int 4 // #4
+  0002: const/4 v2, #int 7 // #7
+  0003: filled-new-array {v0, v1, v2}, int[]
+  0006: move-result-object v1
+  0007: sget-object v0, java.lang.Long.TYPE:Ljava/lang/Class;
+  0009: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000c: move-result-object v0
+  000d: check-cast v0, long[][][]
+  000f: return-object v0
+Blort.test16:()[[[[S:
+regs: 0004; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 5 // #5
+  0001: const/4 v1, #int 4 // #4
+  0002: const/4 v2, #int 3 // #3
+  0003: const/4 v3, #int 2 // #2
+  0004: filled-new-array {v0, v1, v2, v3}, int[]
+  0007: move-result-object v1
+  0008: sget-object v0, java.lang.Short.TYPE:Ljava/lang/Class;
+  000a: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000d: move-result-object v0
+  000e: check-cast v0, short[][][][]
+  0010: return-object v0
+Blort.test17:()[[[[[Ljava/lang/String;:
+regs: 0005; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 5 // #5
+  0001: const/4 v1, #int 4 // #4
+  0002: const/4 v2, #int 3 // #3
+  0003: const/4 v3, #int 2 // #2
+  0004: const/4 v4, #int 1 // #1
+  0005: filled-new-array {v0, v1, v2, v3, v4}, int[]
+  0008: move-result-object v1
+  0009: const-class v0, java.lang.String
+  000b: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  000e: move-result-object v0
+  000f: check-cast v0, java.lang.String[][][][][]
+  0011: return-object v0
+Blort.test18:()[[[[[[Ljava/lang/Runnable;:
+regs: 0006; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 5 // #5
+  0001: const/4 v1, #int 4 // #4
+  0002: const/4 v2, #int 3 // #3
+  0003: const/4 v3, #int 2 // #2
+  0004: const/4 v4, #int 1 // #1
+  0005: const/16 v5, #int 8 // #0008
+  0007: filled-new-array/range {v0..v5}, int[]
+  000a: move-result-object v1
+  000b: const-class v0, java.lang.Runnable
+  000d: invoke-static {v0, v1}, java.lang.reflect.Array.newInstance:(Ljava/lang/Class;[I)Ljava/lang/Object;
+  0010: move-result-object v0
+  0011: check-cast v0, java.lang.Runnable[][][][][][]
+  0013: return-object v0
diff --git a/dx/tests/070-dex-multianewarray/info.txt b/dx/tests/070-dex-multianewarray/info.txt
new file mode 100644
index 0000000..1251f0c
--- /dev/null
+++ b/dx/tests/070-dex-multianewarray/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that a few
+cases of multidimensional array construction get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/070-dex-multianewarray/run b/dx/tests/070-dex-multianewarray/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/070-dex-multianewarray/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/071-dex-java-stack-ops/Blort.class b/dx/tests/071-dex-java-stack-ops/Blort.class
new file mode 100644
index 0000000..bd4c18a
Binary files /dev/null and b/dx/tests/071-dex-java-stack-ops/Blort.class differ
diff --git a/dx/tests/071-dex-java-stack-ops/blort.j b/dx/tests/071-dex-java-stack-ops/blort.j
new file mode 100644
index 0000000..848a84e
--- /dev/null
+++ b/dx/tests/071-dex-java-stack-ops/blort.j
@@ -0,0 +1,319 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class Blort
+.super java/lang/Object
+
+; Methods to "consume" an int.
+.method public static consume1(I)V
+.limit stack 0
+.limit locals 1
+    nop
+    return
+.end method
+
+.method public static consume2(I)V
+.limit stack 0
+.limit locals 1
+    nop
+    return
+.end method
+
+.method public static consume3(I)V
+.limit stack 0
+.limit locals 1
+    nop
+    return
+.end method
+
+.method public static consume4(I)V
+.limit stack 0
+.limit locals 1
+    nop
+    return
+.end method
+
+.method public static consume5(I)V
+.limit stack 0
+.limit locals 1
+    nop
+    return
+.end method
+
+.method public static consume6(I)V
+.limit stack 0
+.limit locals 1
+    nop
+    return
+.end method
+
+; Methods to "consume" a long.
+.method public static consume1(J)V
+.limit stack 0
+.limit locals 2
+    nop
+    return
+.end method
+
+.method public static consume2(J)V
+.limit stack 0
+.limit locals 2
+    nop
+    return
+.end method
+
+.method public static consume3(J)V
+.limit stack 0
+.limit locals 2
+    nop
+    return
+.end method
+
+.method public static consume4(J)V
+.limit stack 0
+.limit locals 2
+    nop
+    return
+.end method
+
+; Test of "pop" opcode. This should end up causing a call to consume1(0).
+.method public static test_pop()V
+.limit stack 2
+.limit locals 0
+    iconst_0
+    iconst_1
+    pop          ; A1 -> (empty)
+    invokestatic Blort/consume1(I)V
+    return
+.end method
+
+; Test of "pop2" opcode, form 1. This should end up causing a call
+; to consume1(0).
+.method public static test_pop2_form1()V
+.limit stack 3
+.limit locals 0
+    iconst_0
+    iconst_1
+    iconst_2
+    pop2         ; A1 B1 -> (empty)
+    invokestatic Blort/consume1(I)V
+    return
+.end method
+
+; Test of "pop2" opcode, form 2. This should end up causing a call
+; to consume1(0).
+.method public static test_pop2_form2()V
+.limit stack 3
+.limit locals 0
+    iconst_0
+    lconst_0
+    pop2         ; A2 -> (empty)
+    invokestatic Blort/consume1(I)V
+    return
+.end method
+
+; Test of "dup" opcode. This should end up causing these calls in order:
+; consume1(0), consume2(0).
+.method public static test_dup()V
+.limit stack 2
+.limit locals 0
+    iconst_0
+    dup          ; A1 -> A1 A1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(I)V
+    return
+.end method
+
+; Test of "dup_x1" opcode. This should end up causing these calls in order:
+; consume1(1), consume2(0), consume3(1).
+.method public static test_dup_x1()V
+.limit stack 3
+.limit locals 0
+    iconst_0
+    iconst_1
+    dup_x1       ; A1 B1 -> B1 A1 B1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(I)V
+    invokestatic Blort/consume3(I)V
+    return
+.end method
+
+; Test of "dup_x2" opcode, form 1. This should end up causing these calls
+; in order: consume1(2), consume2(1), consume3(0), consume4(2).
+.method public static test_dup_x2_form1()V
+.limit stack 4
+.limit locals 0
+    iconst_0
+    iconst_1
+    iconst_2
+    dup_x2       ; A1 B1 C1 -> C1 A1 B1 C1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(I)V
+    invokestatic Blort/consume3(I)V
+    invokestatic Blort/consume4(I)V
+    return
+.end method
+
+; Test of "dup_x2" opcode, form 2. This should end up causing these calls
+; in order: consume1(1), consume2(0L), consume3(1).
+.method public static test_dup_x2_form2()V
+.limit stack 4
+.limit locals 0
+    lconst_0
+    iconst_1
+    dup_x2       ; A2 B1 -> B1 A2 B1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(J)V
+    invokestatic Blort/consume3(I)V
+    return
+.end method
+
+; Test of "dup2" opcode, form 1. This should end up causing these calls
+; in order: consume1(1), consume2(0), consume3(1), consume4(0).
+.method public static test_dup2_form1()V
+.limit stack 4
+.limit locals 0
+    iconst_0
+    iconst_1
+    dup2         ; A1 B1 -> A1 B1 A1 B1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(I)V
+    invokestatic Blort/consume3(I)V
+    invokestatic Blort/consume4(I)V
+    return
+.end method
+
+; Test of "dup2" opcode, form 2. This should end up causing these calls
+; in order: consume1(0L), consume2(0L).
+.method public static test_dup2_form2()V
+.limit stack 4
+.limit locals 0
+    lconst_0
+    dup2         ; A2 -> A2 A2
+    invokestatic Blort/consume1(J)V
+    invokestatic Blort/consume2(J)V
+    return
+.end method
+
+; Test of "dup2_x1" opcode, form 1. This should end up causing these calls
+; in order: consume1(1), consume2(2), consume3(0), consume4(1), consume5(2).
+.method public static test_dup2_x1_form1()V
+.limit stack 5
+.limit locals 0
+    iconst_0
+    iconst_1
+    iconst_2
+    dup2_x1      ; A1 B1 C1 -> B1 C1 A1 B1 C1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(I)V
+    invokestatic Blort/consume3(I)V
+    invokestatic Blort/consume4(I)V
+    invokestatic Blort/consume5(I)V
+    return
+.end method
+
+
+; Test of "dup2_x1" opcode, form 2. This should end up causing these calls
+; in order: consume1(1L), consume2(2), consume3(1L).
+.method public static test_dup2_x1_form2()V
+.limit stack 5
+.limit locals 0
+    iconst_0
+    lconst_1
+    dup2_x1      ; A1 B2 -> B2 A1 B2
+    invokestatic Blort/consume1(J)V
+    invokestatic Blort/consume2(I)V
+    invokestatic Blort/consume3(J)V
+    return
+.end method
+
+; Test of "dup2_x2" opcode, form 1. This should end up causing these calls
+; in order: consume1(3), consume2(2), consume3(1), consume4(0), consume5(3),
+; consume6(2).
+.method public static test_dup2_x2_form1()V
+.limit stack 6
+.limit locals 0
+    iconst_0
+    iconst_1
+    iconst_2
+    iconst_3
+    dup2_x2      ; A1 B1 C1 D1 -> C1 D1 A1 B1 C1 D1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(I)V
+    invokestatic Blort/consume3(I)V
+    invokestatic Blort/consume4(I)V
+    invokestatic Blort/consume5(I)V
+    invokestatic Blort/consume6(I)V
+    return
+.end method
+
+; Test of "dup2_x2" opcode, form 2. This should end up causing these calls
+; in order: consume1(2L), consume2(1), consume3(0), consume4(2L).
+.method public static test_dup2_x2_form2()V
+.limit stack 6
+.limit locals 0
+    iconst_0
+    iconst_1
+    ldc2_w 2
+    dup2_x2      ; A1 B1 C2 -> C2 A1 B1 C2
+    invokestatic Blort/consume1(J)V
+    invokestatic Blort/consume2(I)V
+    invokestatic Blort/consume3(I)V
+    invokestatic Blort/consume4(J)V
+    return
+.end method
+
+; Test of "dup2_x2" opcode, form 3. This should end up causing these calls
+; in order: consume1(2), consume2(1), consume3(0L), consume4(2), consume5(1).
+.method public static test_dup2_x2_form3()V
+.limit stack 6
+.limit locals 0
+    lconst_0
+    iconst_1
+    iconst_2
+    dup2_x2      ; A2 B1 C1 -> B1 C1 A2 B1 C1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(I)V
+    invokestatic Blort/consume3(J)V
+    invokestatic Blort/consume4(I)V
+    invokestatic Blort/consume5(I)V
+    return
+.end method
+
+; Test of "dup2_x2" opcode, form 4. This should end up causing these calls
+; in order: consume1(1L), consume2(0L), consume3(1L).
+.method public static test_dup2_x2_form4()V
+.limit stack 6
+.limit locals 0
+    lconst_0
+    lconst_1
+    dup2_x2      ; A2 B2 -> B2 A2 B2
+    invokestatic Blort/consume1(J)V
+    invokestatic Blort/consume2(J)V
+    invokestatic Blort/consume3(J)V
+    return
+.end method
+
+; Test of "swap" opcode. This should end up causing these calls
+; in order: consume1(0), consume2(1).
+.method public static test_swap()V
+.limit stack 2
+.limit locals 0
+    iconst_0
+    iconst_1
+    swap         ; A1 B1 -> B1 A1
+    invokestatic Blort/consume1(I)V
+    invokestatic Blort/consume2(I)V
+    return
+.end method
diff --git a/dx/tests/071-dex-java-stack-ops/build b/dx/tests/071-dex-java-stack-ops/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/071-dex-java-stack-ops/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/071-dex-java-stack-ops/expected.txt b/dx/tests/071-dex-java-stack-ops/expected.txt
new file mode 100644
index 0000000..ab2cdc1
--- /dev/null
+++ b/dx/tests/071-dex-java-stack-ops/expected.txt
@@ -0,0 +1,210 @@
+Blort.test_dup:()V:
+regs: 0003; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: move v2, v0
+  0002: move v0, v2
+  0003: move v1, v2
+  0004: invoke-static {v1}, Blort.consume1:(I)V
+  0007: invoke-static {v0}, Blort.consume2:(I)V
+  000a: return-void
+Blort.test_dup2_form1:()V:
+regs: 0006; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: move v4, v0
+  0003: move v5, v1
+  0004: move v0, v4
+  0005: move v1, v5
+  0006: move v2, v4
+  0007: move v3, v5
+  0008: invoke-static {v3}, Blort.consume1:(I)V
+  000b: invoke-static {v2}, Blort.consume2:(I)V
+  000e: invoke-static {v1}, Blort.consume3:(I)V
+  0011: invoke-static {v0}, Blort.consume4:(I)V
+  0014: return-void
+Blort.test_dup2_form2:()V:
+regs: 0006; ins: 0000; outs: 0002
+  0000: const-wide/16 v0, #long 0 // #0000
+  0002: move-wide v4, v0
+  0003: move-wide v0, v4
+  0004: move-wide v2, v4
+  0005: invoke-static {v2, v3}, Blort.consume1:(J)V
+  0008: invoke-static {v0, v1}, Blort.consume2:(J)V
+  000b: return-void
+Blort.test_dup2_x1_form1:()V:
+regs: 0008; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: const/4 v2, #int 2 // #2
+  0003: move v5, v0
+  0004: move v6, v1
+  0005: move v7, v2
+  0006: move v0, v6
+  0007: move v1, v7
+  0008: move v2, v5
+  0009: move v3, v6
+  000a: move v4, v7
+  000b: invoke-static {v4}, Blort.consume1:(I)V
+  000e: invoke-static {v3}, Blort.consume2:(I)V
+  0011: invoke-static {v2}, Blort.consume3:(I)V
+  0014: invoke-static {v1}, Blort.consume4:(I)V
+  0017: invoke-static {v0}, Blort.consume5:(I)V
+  001a: return-void
+Blort.test_dup2_x1_form2:()V:
+regs: 0008; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 0 // #0
+  0001: const-wide/16 v1, #long 1 // #0001
+  0003: move v5, v0
+  0004: move-wide v6, v1
+  0005: move-wide v0, v6
+  0006: move v2, v5
+  0007: move-wide v3, v6
+  0008: invoke-static {v3, v4}, Blort.consume1:(J)V
+  000b: invoke-static {v2}, Blort.consume2:(I)V
+  000e: invoke-static {v0, v1}, Blort.consume3:(J)V
+  0011: return-void
+Blort.test_dup2_x2_form1:()V:
+regs: 000a; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: const/4 v2, #int 2 // #2
+  0003: const/4 v3, #int 3 // #3
+  0004: move v6, v0
+  0005: move v7, v1
+  0006: move v8, v2
+  0007: move v9, v3
+  0008: move v0, v8
+  0009: move v1, v9
+  000a: move v2, v6
+  000b: move v3, v7
+  000c: move v4, v8
+  000d: move v5, v9
+  000e: invoke-static {v5}, Blort.consume1:(I)V
+  0011: invoke-static {v4}, Blort.consume2:(I)V
+  0014: invoke-static {v3}, Blort.consume3:(I)V
+  0017: invoke-static {v2}, Blort.consume4:(I)V
+  001a: invoke-static {v1}, Blort.consume5:(I)V
+  001d: invoke-static {v0}, Blort.consume6:(I)V
+  0020: return-void
+Blort.test_dup2_x2_form2:()V:
+regs: 000a; ins: 0000; outs: 0002
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: const-wide/16 v2, #long 2 // #0002
+  0004: move v6, v0
+  0005: move v7, v1
+  0006: move-wide v8, v2
+  0007: move-wide v0, v8
+  0008: move v2, v6
+  0009: move v3, v7
+  000a: move-wide v4, v8
+  000b: invoke-static {v4, v5}, Blort.consume1:(J)V
+  000e: invoke-static {v3}, Blort.consume2:(I)V
+  0011: invoke-static {v2}, Blort.consume3:(I)V
+  0014: invoke-static {v0, v1}, Blort.consume4:(J)V
+  0017: return-void
+Blort.test_dup2_x2_form3:()V:
+regs: 000a; ins: 0000; outs: 0002
+  0000: const-wide/16 v0, #long 0 // #0000
+  0002: const/4 v2, #int 1 // #1
+  0003: const/4 v3, #int 2 // #2
+  0004: move-wide v6, v0
+  0005: move v8, v2
+  0006: move v9, v3
+  0007: move v0, v8
+  0008: move v1, v9
+  0009: move-wide v2, v6
+  000a: move v4, v8
+  000b: move v5, v9
+  000c: invoke-static {v5}, Blort.consume1:(I)V
+  000f: invoke-static {v4}, Blort.consume2:(I)V
+  0012: invoke-static {v2, v3}, Blort.consume3:(J)V
+  0015: invoke-static {v1}, Blort.consume4:(I)V
+  0018: invoke-static {v0}, Blort.consume5:(I)V
+  001b: return-void
+Blort.test_dup2_x2_form4:()V:
+regs: 000a; ins: 0000; outs: 0002
+  0000: const-wide/16 v0, #long 0 // #0000
+  0002: const-wide/16 v2, #long 1 // #0001
+  0004: move-wide v6, v0
+  0005: move-wide v8, v2
+  0006: move-wide v0, v8
+  0007: move-wide v2, v6
+  0008: move-wide v4, v8
+  0009: invoke-static {v4, v5}, Blort.consume1:(J)V
+  000c: invoke-static {v2, v3}, Blort.consume2:(J)V
+  000f: invoke-static {v0, v1}, Blort.consume3:(J)V
+  0012: return-void
+Blort.test_dup_x1:()V:
+regs: 0005; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: move v3, v0
+  0003: move v4, v1
+  0004: move v0, v4
+  0005: move v1, v3
+  0006: move v2, v4
+  0007: invoke-static {v2}, Blort.consume1:(I)V
+  000a: invoke-static {v1}, Blort.consume2:(I)V
+  000d: invoke-static {v0}, Blort.consume3:(I)V
+  0010: return-void
+Blort.test_dup_x2_form1:()V:
+regs: 0007; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: const/4 v2, #int 2 // #2
+  0003: move v4, v0
+  0004: move v5, v1
+  0005: move v6, v2
+  0006: move v0, v6
+  0007: move v1, v4
+  0008: move v2, v5
+  0009: move v3, v6
+  000a: invoke-static {v3}, Blort.consume1:(I)V
+  000d: invoke-static {v2}, Blort.consume2:(I)V
+  0010: invoke-static {v1}, Blort.consume3:(I)V
+  0013: invoke-static {v0}, Blort.consume4:(I)V
+  0016: return-void
+Blort.test_dup_x2_form2:()V:
+regs: 0007; ins: 0000; outs: 0002
+  0000: const-wide/16 v0, #long 0 // #0000
+  0002: const/4 v2, #int 1 // #1
+  0003: move-wide v4, v0
+  0004: move v6, v2
+  0005: move v0, v6
+  0006: move-wide v1, v4
+  0007: move v3, v6
+  0008: invoke-static {v3}, Blort.consume1:(I)V
+  000b: invoke-static {v1, v2}, Blort.consume2:(J)V
+  000e: invoke-static {v0}, Blort.consume3:(I)V
+  0011: return-void
+Blort.test_pop:()V:
+regs: 0002; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: invoke-static {v0}, Blort.consume1:(I)V
+  0005: return-void
+Blort.test_pop2_form1:()V:
+regs: 0003; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: const/4 v2, #int 2 // #2
+  0003: invoke-static {v0}, Blort.consume1:(I)V
+  0006: return-void
+Blort.test_pop2_form2:()V:
+regs: 0004; ins: 0000; outs: 0001
+  0000: const/4 v1, #int 0 // #0
+  0001: const-wide/16 v2, #long 0 // #0000
+  0003: invoke-static {v1}, Blort.consume1:(I)V
+  0006: return-void
+Blort.test_swap:()V:
+regs: 0004; ins: 0000; outs: 0001
+  0000: const/4 v0, #int 0 // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: move v2, v0
+  0003: move v3, v1
+  0004: move v0, v3
+  0005: move v1, v2
+  0006: invoke-static {v1}, Blort.consume1:(I)V
+  0009: invoke-static {v0}, Blort.consume2:(I)V
+  000c: return-void
diff --git a/dx/tests/071-dex-java-stack-ops/info.txt b/dx/tests/071-dex-java-stack-ops/info.txt
new file mode 100644
index 0000000..6c5383a
--- /dev/null
+++ b/dx/tests/071-dex-java-stack-ops/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to see that at
+least one case of each of the possible forms of Java stack
+manipulation op translate reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/071-dex-java-stack-ops/run b/dx/tests/071-dex-java-stack-ops/run
new file mode 100644
index 0000000..95de5ba
--- /dev/null
+++ b/dx/tests/071-dex-java-stack-ops/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/072-dex-switch-edge-cases/Blort.class b/dx/tests/072-dex-switch-edge-cases/Blort.class
new file mode 100644
index 0000000..1e1fd5e
Binary files /dev/null and b/dx/tests/072-dex-switch-edge-cases/Blort.class differ
diff --git a/dx/tests/072-dex-switch-edge-cases/Blort.java b/dx/tests/072-dex-switch-edge-cases/Blort.java
new file mode 100644
index 0000000..2d4d107
--- /dev/null
+++ b/dx/tests/072-dex-switch-edge-cases/Blort.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    // Empty switch statement. (Note: This is the same as a default-only
+    // switch statement, since under the covers every switch statement
+    // has a default of some sort.)
+    public int test1(int x) {
+        switch (x) {
+            // This space intentionally left blank.
+        }
+
+        return 0;
+    }
+
+    // Single element.
+    public int test2(int x) {
+        switch (x) {
+            case 0: return 0;
+        }
+
+        return 1;
+    }
+
+    // Single element: Integer.MIN_VALUE.
+    public int test3(int x) {
+        switch (x) {
+            case Integer.MIN_VALUE: return 0;
+        }
+
+        return 1;
+    }
+
+    // Single element: Integer.MAX_VALUE.
+    public int test4(int x) {
+        switch (x) {
+            case Integer.MAX_VALUE: return 0;
+        }
+
+        return 1;
+    }
+
+    // Two elements: 0 and Integer.MIN_VALUE.
+    public int test5(int x) {
+        switch (x) {
+            case 0: return 0;
+            case Integer.MIN_VALUE: return 1;
+        }
+
+        return 2;
+    }
+
+    // Two elements: 0 and Integer.MAX_VALUE.
+    public int test6(int x) {
+        switch (x) {
+            case 0: return 0;
+            case Integer.MAX_VALUE: return 1;
+        }
+
+        return 2;
+    }
+
+    // Two elements: Integer.MIN_VALUE and Integer.MAX_VALUE.
+    public int test7(int x) {
+        switch (x) {
+            case Integer.MIN_VALUE: return 0;
+            case Integer.MAX_VALUE: return 1;
+        }
+
+        return 2;
+    }
+
+    // Two elements: Large enough to be packed but such that 32 bit
+    // threshold calculations could overflow.
+    public int test8(int x) {
+        switch (x) {
+            case 0: return 0;
+            case 0x4cccccc8: return 1;
+        }
+
+        return 2;
+    }
+}
diff --git a/dx/tests/072-dex-switch-edge-cases/build b/dx/tests/072-dex-switch-edge-cases/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/072-dex-switch-edge-cases/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/072-dex-switch-edge-cases/expected.txt b/dx/tests/072-dex-switch-edge-cases/expected.txt
new file mode 100644
index 0000000..38a467a
--- /dev/null
+++ b/dx/tests/072-dex-switch-edge-cases/expected.txt
@@ -0,0 +1,126 @@
+Blort.test1:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: const/4 v2, #int 0 // #0
+  0004: move v0, v2
+  0005: return v0
+Blort.test2:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: packed-switch v2, 000c // +0009
+  0006: const/4 v2, #int 1 // #1
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 0 // #0
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: packed-switch-payload // for switch @ 0003
+          0: 00000009 // +00000006
+Blort.test3:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: packed-switch v2, 000c // +0009
+  0006: const/4 v2, #int 1 // #1
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 0 // #0
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: packed-switch-payload // for switch @ 0003
+          -2147483648: 00000009 // +00000006
+Blort.test4:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: packed-switch v2, 000c // +0009
+  0006: const/4 v2, #int 1 // #1
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 0 // #0
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: packed-switch-payload // for switch @ 0003
+          2147483647: 00000009 // +00000006
+Blort.test5:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: sparse-switch v2, 0010 // +000d
+  0006: const/4 v2, #int 2 // #2
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 0 // #0
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: const/4 v2, #int 1 // #1
+  000d: move v0, v2
+  000e: goto 0008 // -0006
+  000f: nop // spacer
+  0010: sparse-switch-payload // for switch @ 0003
+          -2147483648: 0000000c // +00000009
+          0: 00000009 // +00000006
+Blort.test6:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: sparse-switch v2, 0010 // +000d
+  0006: const/4 v2, #int 2 // #2
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 0 // #0
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: const/4 v2, #int 1 // #1
+  000d: move v0, v2
+  000e: goto 0008 // -0006
+  000f: nop // spacer
+  0010: sparse-switch-payload // for switch @ 0003
+          0: 00000009 // +00000006
+          2147483647: 0000000c // +00000009
+Blort.test7:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: sparse-switch v2, 0010 // +000d
+  0006: const/4 v2, #int 2 // #2
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 0 // #0
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: const/4 v2, #int 1 // #1
+  000d: move v0, v2
+  000e: goto 0008 // -0006
+  000f: nop // spacer
+  0010: sparse-switch-payload // for switch @ 0003
+          -2147483648: 00000009 // +00000006
+          2147483647: 0000000c // +00000009
+Blort.test8:(I)I:
+regs: 0005; ins: 0002; outs: 0000
+  0000: move-object v0, v3
+  0001: move v1, v4
+  0002: move v2, v1
+  0003: sparse-switch v2, 0010 // +000d
+  0006: const/4 v2, #int 2 // #2
+  0007: move v0, v2
+  0008: return v0
+  0009: const/4 v2, #int 0 // #0
+  000a: move v0, v2
+  000b: goto 0008 // -0003
+  000c: const/4 v2, #int 1 // #1
+  000d: move v0, v2
+  000e: goto 0008 // -0006
+  000f: nop // spacer
+  0010: sparse-switch-payload // for switch @ 0003
+          0: 00000009 // +00000006
+          1288490184: 0000000c // +00000009
diff --git a/dx/tests/072-dex-switch-edge-cases/info.txt b/dx/tests/072-dex-switch-edge-cases/info.txt
new file mode 100644
index 0000000..4c7b42c
--- /dev/null
+++ b/dx/tests/072-dex-switch-edge-cases/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+a bunch of switch op edge cases get converted reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/072-dex-switch-edge-cases/run b/dx/tests/072-dex-switch-edge-cases/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/072-dex-switch-edge-cases/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/073-dex-null-array-refs/Blort.class b/dx/tests/073-dex-null-array-refs/Blort.class
new file mode 100644
index 0000000..2226f02
Binary files /dev/null and b/dx/tests/073-dex-null-array-refs/Blort.class differ
diff --git a/dx/tests/073-dex-null-array-refs/Blort.java b/dx/tests/073-dex-null-array-refs/Blort.java
new file mode 100644
index 0000000..e16e0f4
--- /dev/null
+++ b/dx/tests/073-dex-null-array-refs/Blort.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static Object test1() {
+        return ((Object[]) null)[0];
+    }
+
+    public static void test2() {
+        ((Object[]) null)[0] = null;
+    }
+
+    public static int test3() {
+        return ((Object[]) null).length;
+    }
+
+    public static Object test4() {
+        Object[] arr = null;
+        return arr[0];
+    }
+
+    public static void test5() {
+        Object[] arr = null;
+        arr[0] = null;
+    }
+
+    public static int test6() {
+        Object[] arr = null;
+        return arr.length;
+    }
+
+    public static Object test7(Object[] arr) {
+        if (check()) {
+            arr = null;
+        }
+
+        return arr[0];
+    }
+
+    public static void test8(Object[] arr) {
+        if (check()) {
+            arr = null;
+        }
+
+        arr[0] = null;
+    }
+
+    public static int test9(Object[] arr) {
+        if (check()) {
+            arr = null;
+        }
+
+        return arr.length;
+    }
+
+    public static boolean check() {
+        return true;
+    }
+}
diff --git a/dx/tests/073-dex-null-array-refs/build b/dx/tests/073-dex-null-array-refs/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/073-dex-null-array-refs/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/073-dex-null-array-refs/expected.txt b/dx/tests/073-dex-null-array-refs/expected.txt
new file mode 100644
index 0000000..7f3ee21
--- /dev/null
+++ b/dx/tests/073-dex-null-array-refs/expected.txt
@@ -0,0 +1,85 @@
+Blort.test1:()Ljava/lang/Object;:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: check-cast v0, java.lang.Object[]
+  0003: const/4 v1, #int 0 // #0
+  0004: aget-object v0, v0, v1
+  0006: return-object v0
+Blort.test2:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: check-cast v0, java.lang.Object[]
+  0003: const/4 v1, #int 0 // #0
+  0004: const/4 v2, #null // #0
+  0005: aput-object v2, v0, v1
+  0007: return-void
+Blort.test3:()I:
+regs: 0001; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: check-cast v0, java.lang.Object[]
+  0003: array-length v0, v0
+  0004: return v0
+Blort.test4:()Ljava/lang/Object;:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v1, #null // #0
+  0001: move-object v0, v1
+  0002: move-object v1, v0
+  0003: const/4 v2, #int 0 // #0
+  0004: aget-object v1, v1, v2
+  0006: move-object v0, v1
+  0007: return-object v0
+Blort.test5:()V:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v1, #null // #0
+  0001: move-object v0, v1
+  0002: move-object v1, v0
+  0003: const/4 v2, #int 0 // #0
+  0004: const/4 v3, #null // #0
+  0005: aput-object v3, v1, v2
+  0007: return-void
+Blort.test6:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #null // #0
+  0001: move-object v0, v1
+  0002: move-object v1, v0
+  0003: array-length v1, v1
+  0004: move v0, v1
+  0005: return v0
+Blort.test7:([Ljava/lang/Object;)Ljava/lang/Object;:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move-object v0, v3
+  0001: invoke-static {}, Blort.check:()Z
+  0004: move-result v1
+  0005: if-eqz v1, 0009 // +0004
+  0007: const/4 v1, #null // #0
+  0008: move-object v0, v1
+  0009: move-object v1, v0
+  000a: const/4 v2, #int 0 // #0
+  000b: aget-object v1, v1, v2
+  000d: move-object v0, v1
+  000e: return-object v0
+Blort.test8:([Ljava/lang/Object;)V:
+regs: 0005; ins: 0001; outs: 0000
+  0000: move-object v0, v4
+  0001: invoke-static {}, Blort.check:()Z
+  0004: move-result v1
+  0005: if-eqz v1, 0009 // +0004
+  0007: const/4 v1, #null // #0
+  0008: move-object v0, v1
+  0009: move-object v1, v0
+  000a: const/4 v2, #int 0 // #0
+  000b: const/4 v3, #null // #0
+  000c: aput-object v3, v1, v2
+  000e: return-void
+Blort.test9:([Ljava/lang/Object;)I:
+regs: 0003; ins: 0001; outs: 0000
+  0000: move-object v0, v2
+  0001: invoke-static {}, Blort.check:()Z
+  0004: move-result v1
+  0005: if-eqz v1, 0009 // +0004
+  0007: const/4 v1, #null // #0
+  0008: move-object v0, v1
+  0009: move-object v1, v0
+  000a: array-length v1, v1
+  000b: move v0, v1
+  000c: return v0
diff --git a/dx/tests/073-dex-null-array-refs/info.txt b/dx/tests/073-dex-null-array-refs/info.txt
new file mode 100644
index 0000000..ca3b161
--- /dev/null
+++ b/dx/tests/073-dex-null-array-refs/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to see that
+a bunch of cases convert reasonably, where necessarily or possibly
+null array references are used.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/073-dex-null-array-refs/run b/dx/tests/073-dex-null-array-refs/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/073-dex-null-array-refs/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/074-dex-form35c-edge-case/Blort.class b/dx/tests/074-dex-form35c-edge-case/Blort.class
new file mode 100644
index 0000000..cc017bd
Binary files /dev/null and b/dx/tests/074-dex-form35c-edge-case/Blort.class differ
diff --git a/dx/tests/074-dex-form35c-edge-case/Blort.java b/dx/tests/074-dex-form35c-edge-case/Blort.java
new file mode 100644
index 0000000..979263f
--- /dev/null
+++ b/dx/tests/074-dex-form35c-edge-case/Blort.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public void test()
+    {
+        int i1 = 0;
+        int i2 = 0;
+        int i3 = 0;
+        int i4 = 0;
+        int i5 = 0;
+        int i6 = 0;
+        int i7 = 0;
+        int i8 = 0;
+        int i9 = 0;
+        int i10 = 0;
+        int i11 = 0;
+        int i12 = 0;
+        int i13 = 0;
+
+        blort(0);
+    }
+
+    public void blort(long x) {
+        // blank
+    }
+}
diff --git a/dx/tests/074-dex-form35c-edge-case/build b/dx/tests/074-dex-form35c-edge-case/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/074-dex-form35c-edge-case/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/074-dex-form35c-edge-case/expected.txt b/dx/tests/074-dex-form35c-edge-case/expected.txt
new file mode 100644
index 0000000..08a46cd
--- /dev/null
+++ b/dx/tests/074-dex-form35c-edge-case/expected.txt
@@ -0,0 +1,33 @@
+Blort.test:()V:
+regs: 0013; ins: 0001; outs: 0003
+  0000: move-object/from16 v1, v18
+  0002: const/4 v15, #int 0 // #0
+  0003: move v2, v15
+  0004: const/4 v15, #int 0 // #0
+  0005: move v3, v15
+  0006: const/4 v15, #int 0 // #0
+  0007: move v4, v15
+  0008: const/4 v15, #int 0 // #0
+  0009: move v5, v15
+  000a: const/4 v15, #int 0 // #0
+  000b: move v6, v15
+  000c: const/4 v15, #int 0 // #0
+  000d: move v7, v15
+  000e: const/4 v15, #int 0 // #0
+  000f: move v8, v15
+  0010: const/4 v15, #int 0 // #0
+  0011: move v9, v15
+  0012: const/4 v15, #int 0 // #0
+  0013: move v10, v15
+  0014: const/4 v15, #int 0 // #0
+  0015: move v11, v15
+  0016: const/4 v15, #int 0 // #0
+  0017: move v12, v15
+  0018: const/4 v15, #int 0 // #0
+  0019: move v13, v15
+  001a: const/4 v15, #int 0 // #0
+  001b: move v14, v15
+  001c: move-object v15, v1
+  001d: const-wide/16 v16, #long 0 // #0000
+  001f: invoke-virtual/range {v15..v17}, Blort.blort:(J)V
+  0022: return-void
diff --git a/dx/tests/074-dex-form35c-edge-case/info.txt b/dx/tests/074-dex-form35c-edge-case/info.txt
new file mode 100644
index 0000000..51d83bd
--- /dev/null
+++ b/dx/tests/074-dex-form35c-edge-case/info.txt
@@ -0,0 +1,8 @@
+This is a smoke test of dex conversion, which checks to see that
+an edge case of instruction format 35c works, where a reference
+is made to register 15 as a category-2 value, meaning that
+the instruction has to be rewritten to use a different format.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/074-dex-form35c-edge-case/run b/dx/tests/074-dex-form35c-edge-case/run
new file mode 100644
index 0000000..e75f918
--- /dev/null
+++ b/dx/tests/074-dex-form35c-edge-case/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test *.class
diff --git a/dx/tests/075-dex-cat2-value-merge/Blort.class b/dx/tests/075-dex-cat2-value-merge/Blort.class
new file mode 100644
index 0000000..436f33d
Binary files /dev/null and b/dx/tests/075-dex-cat2-value-merge/Blort.class differ
diff --git a/dx/tests/075-dex-cat2-value-merge/Blort.java b/dx/tests/075-dex-cat2-value-merge/Blort.java
new file mode 100644
index 0000000..0aa4c5a
--- /dev/null
+++ b/dx/tests/075-dex-cat2-value-merge/Blort.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static void test(long[] arr)
+    {
+        long x = 0;
+
+        for (;;) {
+            x += arr[0];
+        }
+    }
+}
diff --git a/dx/tests/075-dex-cat2-value-merge/build b/dx/tests/075-dex-cat2-value-merge/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/075-dex-cat2-value-merge/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/075-dex-cat2-value-merge/expected.txt b/dx/tests/075-dex-cat2-value-merge/expected.txt
new file mode 100644
index 0000000..26d2484
--- /dev/null
+++ b/dx/tests/075-dex-cat2-value-merge/expected.txt
@@ -0,0 +1,12 @@
+Blort.test:([J)V:
+regs: 0009; ins: 0001; outs: 0000
+  0000: move-object v1, v8
+  0001: const-wide/16 v4, #long 0 // #0000
+  0003: move-wide v2, v4
+  0004: move-wide v4, v2
+  0005: move-object v6, v1
+  0006: const/4 v7, #int 0 // #0
+  0007: aget-wide v6, v6, v7
+  0009: add-long/2addr v4, v6
+  000a: move-wide v2, v4
+  000b: goto 0004 // -0007
diff --git a/dx/tests/075-dex-cat2-value-merge/info.txt b/dx/tests/075-dex-cat2-value-merge/info.txt
new file mode 100644
index 0000000..de411b8
--- /dev/null
+++ b/dx/tests/075-dex-cat2-value-merge/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to see that
+when a known value of category-2 gets merged during control
+flow analysis, things don't break.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/075-dex-cat2-value-merge/run b/dx/tests/075-dex-cat2-value-merge/run
new file mode 100644
index 0000000..e75f918
--- /dev/null
+++ b/dx/tests/075-dex-cat2-value-merge/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test *.class
diff --git a/dx/tests/076-dex-synch-and-stack/Blort.class b/dx/tests/076-dex-synch-and-stack/Blort.class
new file mode 100644
index 0000000..a34f4d4
Binary files /dev/null and b/dx/tests/076-dex-synch-and-stack/Blort.class differ
diff --git a/dx/tests/076-dex-synch-and-stack/Blort.java b/dx/tests/076-dex-synch-and-stack/Blort.java
new file mode 100644
index 0000000..8a83492
--- /dev/null
+++ b/dx/tests/076-dex-synch-and-stack/Blort.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public synchronized void test() {
+        new Object();
+    }
+}
diff --git a/dx/tests/076-dex-synch-and-stack/build b/dx/tests/076-dex-synch-and-stack/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/076-dex-synch-and-stack/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/076-dex-synch-and-stack/expected.txt b/dx/tests/076-dex-synch-and-stack/expected.txt
new file mode 100644
index 0000000..eba839e
--- /dev/null
+++ b/dx/tests/076-dex-synch-and-stack/expected.txt
@@ -0,0 +1,19 @@
+Blort.test:()V:
+regs: 0006; ins: 0001; outs: 0001
+  0000: move-object v0, v5
+  0001: move-object v3, v5
+  0002: monitor-enter v3
+  0003: new-instance v1, java.lang.Object
+  0005: move-object v4, v1
+  0006: move-object v1, v4
+  0007: move-object v2, v4
+  0008: invoke-direct {v2}, java.lang.Object.<init>:()V
+  000b: monitor-exit v3
+  000c: return-void
+  000d: move-exception v0
+  000e: monitor-exit v3
+  000f: throw v0
+  catches
+    tries:
+      try 0003..000b
+      catch <any> -> 000d
diff --git a/dx/tests/076-dex-synch-and-stack/info.txt b/dx/tests/076-dex-synch-and-stack/info.txt
new file mode 100644
index 0000000..ab5206f
--- /dev/null
+++ b/dx/tests/076-dex-synch-and-stack/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to make sure that
+the synchronized method conversion doesn't interact poorly with stack
+operation unwinding.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/076-dex-synch-and-stack/run b/dx/tests/076-dex-synch-and-stack/run
new file mode 100644
index 0000000..e75f918
--- /dev/null
+++ b/dx/tests/076-dex-synch-and-stack/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test *.class
diff --git a/dx/tests/077-dex-code-alignment/Blort.class b/dx/tests/077-dex-code-alignment/Blort.class
new file mode 100644
index 0000000..1d4137f
Binary files /dev/null and b/dx/tests/077-dex-code-alignment/Blort.class differ
diff --git a/dx/tests/077-dex-code-alignment/Blort.java b/dx/tests/077-dex-code-alignment/Blort.java
new file mode 100644
index 0000000..3ec041a
--- /dev/null
+++ b/dx/tests/077-dex-code-alignment/Blort.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static void justReturn1() {
+        // This space intentionally left blank.
+    }
+
+    public static void justReturn2() {
+        // This space intentionally left blank.
+    }
+}
diff --git a/dx/tests/077-dex-code-alignment/build b/dx/tests/077-dex-code-alignment/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/077-dex-code-alignment/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/077-dex-code-alignment/expected.txt b/dx/tests/077-dex-code-alignment/expected.txt
new file mode 100644
index 0000000..e69de29
diff --git a/dx/tests/077-dex-code-alignment/info.txt b/dx/tests/077-dex-code-alignment/info.txt
new file mode 100644
index 0000000..0dd662b
--- /dev/null
+++ b/dx/tests/077-dex-code-alignment/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to make sure that
+code arrays are 4-byte aligned within a dex file.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/077-dex-code-alignment/run b/dx/tests/077-dex-code-alignment/run
new file mode 100644
index 0000000..d8d9be9
--- /dev/null
+++ b/dx/tests/077-dex-code-alignment/run
@@ -0,0 +1,28 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# The awk script below attempts to filter out everything but the
+# essentials: That methods justReturn1() and justReturn2() contain
+# a single "return-void" code unit, and that there is an empty (0x0000)
+# code unit between the two of them.
+
+dx --debug --dex --positions=none --no-locals --dump-to=- *.class | awk '
+BEGIN { codes = 0; dump = 0; }
+/codes:/ { codes = 1; }
+codes && /justReturn/ { dump = 1; print "method start"; }
+/string_data:/ { codes = 0; dump = 0; }
+dump && /^......: ....     / { print $2; }
+'
diff --git a/dx/tests/078-dex-local-variable-table/Blort.class b/dx/tests/078-dex-local-variable-table/Blort.class
new file mode 100644
index 0000000..e194f7d
Binary files /dev/null and b/dx/tests/078-dex-local-variable-table/Blort.class differ
diff --git a/dx/tests/078-dex-local-variable-table/Blort.java b/dx/tests/078-dex-local-variable-table/Blort.java
new file mode 100644
index 0000000..7291445
--- /dev/null
+++ b/dx/tests/078-dex-local-variable-table/Blort.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static void test01(Object x) {
+        x.hashCode();
+    }
+
+    public static Object test02() {
+        Object[] arr = null;
+        return arr[0];
+    }
+
+    public static String test03(int x) {
+        String foo = null;
+        return foo;
+    }
+
+    public static String test04(int x) {
+        String foo = null;
+        if (x < 0) {
+            foo = "bar";
+        }
+        return foo;
+    }
+
+    public static int test05(Object x) {
+        int[] arr = (int[]) x;
+        arr[0] = 123;
+        return arr[0];
+    }
+
+    public static int test06(int x) {
+        if (x < 10) {
+            int y = 1;
+            return y;
+        } else {
+            int y = 2;
+            return y;
+        }
+    }
+
+    // Test for representation of boolean.
+    public static void test07(boolean x) {
+        boolean y = x;
+    }
+
+    // Test for representation of byte.
+    public static void test08(byte x) {
+        byte y = x;
+    }
+
+    // Test for representation of char.
+    public static void test09(char x) {
+        char y = x;
+    }
+
+    // Test for representation of double.
+    public static void test10(double x) {
+        double y = x;
+    }
+
+    // Test for representation of float.
+    public static void test11(float x) {
+        float y = x;
+    }
+
+    // Test for representation of int.
+    public static void test12(int x) {
+        int y = x;
+    }
+
+    // Test for representation of long.
+    public static void test13(long x) {
+        long y = x;
+    }
+
+    // Test for representation of short.
+    public static void test14(short x) {
+        short y = x;
+    }
+
+    // Test for representation of Object.
+    public static void test15(Object x) {
+        Object y = x;
+    }
+
+    // Test for representation of String (as a token example of a non-Object
+    // reference type).
+    public static void test16(String x) {
+        String y = x;
+    }
+
+    // Test for representation of int[] (as a token example of an array class).
+    public static void test17(int[] x) {
+        int[] y = x;
+    }
+}
diff --git a/dx/tests/078-dex-local-variable-table/build b/dx/tests/078-dex-local-variable-table/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/078-dex-local-variable-table/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/078-dex-local-variable-table/expected.txt b/dx/tests/078-dex-local-variable-table/expected.txt
new file mode 100644
index 0000000..3e5cd69
--- /dev/null
+++ b/dx/tests/078-dex-local-variable-table/expected.txt
@@ -0,0 +1,314 @@
+Blort.test01:(Ljava/lang/Object;)V:
+regs: 0003; ins: 0001; outs: 0001
+  0000: move-object v0, v2
+  0001: move-object v1, v0
+  0002: invoke-virtual {v1}, java.lang.Object.hashCode:()I
+  0005: move-result v1
+  0006: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v2
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x java.lang.Object
+    end sequence
+Blort.test02:()Ljava/lang/Object;:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v1, #null // #0
+  0001: move-object v0, v1
+  0002: move-object v1, v0
+  0003: const/4 v2, #int 0 // #0
+  0004: aget-object v1, v1, v2
+  0006: move-object v0, v1
+  0007: return-object v0
+  debug info
+    line_start: 1
+    parameters_size: 0000
+    0000: prologue end
+    0002: advance pc
+    0002: +local v0 arr java.lang.Object[]
+    0007: advance pc
+    0007: -local v0 arr java.lang.Object[]
+    end sequence
+Blort.test03:(I)Ljava/lang/String;:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: const/4 v2, #null // #0
+  0002: move-object v1, v2
+  0003: move-object v2, v1
+  0004: move-object v0, v2
+  0005: return-object v0
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x int
+    0003: advance pc
+    0003: +local v1 foo java.lang.String
+    0005: advance pc
+    0005: -local v0 x int
+    end sequence
+Blort.test04:(I)Ljava/lang/String;:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: const/4 v2, #null // #0
+  0002: move-object v1, v2
+  0003: move v2, v0
+  0004: if-gez v2, 0009 // +0005
+  0006: const-string v2, "bar"
+  0008: move-object v1, v2
+  0009: move-object v2, v1
+  000a: move-object v0, v2
+  000b: return-object v0
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x int
+    0003: advance pc
+    0003: +local v1 foo java.lang.String
+    000b: advance pc
+    000b: -local v0 x int
+    end sequence
+Blort.test05:(Ljava/lang/Object;)I:
+regs: 0006; ins: 0001; outs: 0000
+  0000: move-object v0, v5
+  0001: move-object v2, v0
+  0002: check-cast v2, int[]
+  0004: check-cast v2, int[]
+  0006: move-object v1, v2
+  0007: move-object v2, v1
+  0008: const/4 v3, #int 0 // #0
+  0009: const/16 v4, #int 123 // #007b
+  000b: aput v4, v2, v3
+  000d: move-object v2, v1
+  000e: const/4 v3, #int 0 // #0
+  000f: aget v2, v2, v3
+  0011: move v0, v2
+  0012: return v0
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v5
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x java.lang.Object
+    0007: advance pc
+    0007: +local v1 arr int[]
+    0012: advance pc
+    0012: -local v0 x java.lang.Object
+    end sequence
+Blort.test06:(I)I:
+regs: 0005; ins: 0001; outs: 0000
+  0000: move v0, v4
+  0001: move v2, v0
+  0002: const/16 v3, #int 10 // #000a
+  0004: if-ge v2, v3, 000b // +0007
+  0006: const/4 v2, #int 1 // #1
+  0007: move v1, v2
+  0008: move v2, v1
+  0009: move v0, v2
+  000a: return v0
+  000b: const/4 v2, #int 2 // #2
+  000c: move v1, v2
+  000d: move v2, v1
+  000e: move v0, v2
+  000f: goto 000a // -0005
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v4
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x int
+    0008: advance pc
+    0008: +local v1 y int
+    000a: advance pc
+    000a: -local v0 x int
+    000b: advance pc
+    000b: -local v1 y int
+    000b: +local restart v0 x int
+    000d: advance pc
+    000d: +local restart v1 y int
+    end sequence
+Blort.test07:(Z)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: move v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x boolean
+    0003: advance pc
+    0003: +local v1 y boolean
+    end sequence
+Blort.test08:(B)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: move v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x byte
+    0003: advance pc
+    0003: +local v1 y byte
+    end sequence
+Blort.test09:(C)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: move v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x char
+    0003: advance pc
+    0003: +local v1 y char
+    end sequence
+Blort.test10:(D)V:
+regs: 0008; ins: 0002; outs: 0000
+  0000: move-wide v0, v6
+  0001: move-wide v4, v0
+  0002: move-wide v2, v4
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v6
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x double
+    0003: advance pc
+    0003: +local v2 y double
+    end sequence
+Blort.test11:(F)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: move v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x float
+    0003: advance pc
+    0003: +local v1 y float
+    end sequence
+Blort.test12:(I)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: move v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x int
+    0003: advance pc
+    0003: +local v1 y int
+    end sequence
+Blort.test13:(J)V:
+regs: 0008; ins: 0002; outs: 0000
+  0000: move-wide v0, v6
+  0001: move-wide v4, v0
+  0002: move-wide v2, v4
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v6
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x long
+    0003: advance pc
+    0003: +local v2 y long
+    end sequence
+Blort.test14:(S)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: move v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x short
+    0003: advance pc
+    0003: +local v1 y short
+    end sequence
+Blort.test15:(Ljava/lang/Object;)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move-object v0, v3
+  0001: move-object v2, v0
+  0002: move-object v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x java.lang.Object
+    0003: advance pc
+    0003: +local v1 y java.lang.Object
+    end sequence
+Blort.test16:(Ljava/lang/String;)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move-object v0, v3
+  0001: move-object v2, v0
+  0002: move-object v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x java.lang.String
+    0003: advance pc
+    0003: +local v1 y java.lang.String
+    end sequence
+Blort.test17:([I)V:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move-object v0, v3
+  0001: move-object v2, v0
+  0002: move-object v1, v2
+  0003: return-void
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v3
+    0000: prologue end
+    0001: advance pc
+    0001: +local v0 x int[]
+    0003: advance pc
+    0003: +local v1 y int[]
+    end sequence
diff --git a/dx/tests/078-dex-local-variable-table/info.txt b/dx/tests/078-dex-local-variable-table/info.txt
new file mode 100644
index 0000000..7834271
--- /dev/null
+++ b/dx/tests/078-dex-local-variable-table/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to make sure that
+local variable tables get emitted properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/078-dex-local-variable-table/run b/dx/tests/078-dex-local-variable-table/run
new file mode 100644
index 0000000..94b0c89
--- /dev/null
+++ b/dx/tests/078-dex-local-variable-table/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --dump-method=Blort.test'*' \
+    *.class
diff --git a/dx/tests/079-dex-local-variable-renumbering/Blort.class b/dx/tests/079-dex-local-variable-renumbering/Blort.class
new file mode 100644
index 0000000..82c4574
Binary files /dev/null and b/dx/tests/079-dex-local-variable-renumbering/Blort.class differ
diff --git a/dx/tests/079-dex-local-variable-renumbering/Blort.java b/dx/tests/079-dex-local-variable-renumbering/Blort.java
new file mode 100644
index 0000000..c8453a2
--- /dev/null
+++ b/dx/tests/079-dex-local-variable-renumbering/Blort.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static int test1(int x) {
+        float f0 = 0.0f;
+        float f1 = 0.0f;
+        float f2 = 0.0f;
+        float f3 = 0.0f;
+        float f4 = 0.0f;
+        float f5 = 0.0f;
+        float f6 = 0.0f;
+        float f7 = 0.0f;
+        float f8 = 0.0f;
+        float f9 = 0.0f;
+        float f10 = 0.0f;
+        float f11 = 0.0f;
+        float f12 = 0.0f;
+        float f13 = 0.0f;
+        float f14 = 0.0f;
+        float f15 = 0.0f;
+        int x16 = x;
+        return -x16;
+    }
+}
diff --git a/dx/tests/079-dex-local-variable-renumbering/build b/dx/tests/079-dex-local-variable-renumbering/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/079-dex-local-variable-renumbering/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/079-dex-local-variable-renumbering/expected.txt b/dx/tests/079-dex-local-variable-renumbering/expected.txt
new file mode 100644
index 0000000..94ba113
--- /dev/null
+++ b/dx/tests/079-dex-local-variable-renumbering/expected.txt
@@ -0,0 +1,87 @@
+Blort.test1:(I)I:
+regs: 0015; ins: 0001; outs: 0000
+  0000: move/from16 v1, v20
+  0002: const/16 v19, #float 0.0 // #0000
+  0004: move/from16 v2, v19
+  0006: const/16 v19, #float 0.0 // #0000
+  0008: move/from16 v3, v19
+  000a: const/16 v19, #float 0.0 // #0000
+  000c: move/from16 v4, v19
+  000e: const/16 v19, #float 0.0 // #0000
+  0010: move/from16 v5, v19
+  0012: const/16 v19, #float 0.0 // #0000
+  0014: move/from16 v6, v19
+  0016: const/16 v19, #float 0.0 // #0000
+  0018: move/from16 v7, v19
+  001a: const/16 v19, #float 0.0 // #0000
+  001c: move/from16 v8, v19
+  001e: const/16 v19, #float 0.0 // #0000
+  0020: move/from16 v9, v19
+  0022: const/16 v19, #float 0.0 // #0000
+  0024: move/from16 v10, v19
+  0026: const/16 v19, #float 0.0 // #0000
+  0028: move/from16 v11, v19
+  002a: const/16 v19, #float 0.0 // #0000
+  002c: move/from16 v12, v19
+  002e: const/16 v19, #float 0.0 // #0000
+  0030: move/from16 v13, v19
+  0032: const/16 v19, #float 0.0 // #0000
+  0034: move/from16 v14, v19
+  0036: const/16 v19, #float 0.0 // #0000
+  0038: move/from16 v15, v19
+  003a: const/16 v19, #float 0.0 // #0000
+  003c: move/from16 v16, v19
+  003e: const/16 v19, #float 0.0 // #0000
+  0040: move/from16 v17, v19
+  0042: move/from16 v19, v1
+  0044: move/from16 v18, v19
+  0046: move/from16 v19, v18
+  0048: move/from16 v0, v19
+  004a: neg-int v0, v0
+  004b: move/from16 v19, v0
+  004d: move/from16 v1, v19
+  004f: return v1
+  debug info
+    line_start: 1
+    parameters_size: 0001
+    parameter <unnamed> v20
+    0000: prologue end
+    0002: advance pc
+    0002: +local v1 x int
+    0006: advance pc
+    0006: +local v2 f0 float
+    000a: advance pc
+    000a: +local v3 f1 float
+    000e: advance pc
+    000e: +local v4 f2 float
+    0012: advance pc
+    0012: +local v5 f3 float
+    0016: advance pc
+    0016: +local v6 f4 float
+    001a: advance pc
+    001a: +local v7 f5 float
+    001e: advance pc
+    001e: +local v8 f6 float
+    0022: advance pc
+    0022: +local v9 f7 float
+    0026: advance pc
+    0026: +local v10 f8 float
+    002a: advance pc
+    002a: +local v11 f9 float
+    002e: advance pc
+    002e: +local v12 f10 float
+    0032: advance pc
+    0032: +local v13 f11 float
+    0036: advance pc
+    0036: +local v14 f12 float
+    003a: advance pc
+    003a: +local v15 f13 float
+    003e: advance pc
+    003e: +local v16 f14 float
+    0042: advance pc
+    0042: +local v17 f15 float
+    0046: advance pc
+    0046: +local v18 x16 int
+    004f: advance pc
+    004f: -local v1 x int
+    end sequence
diff --git a/dx/tests/079-dex-local-variable-renumbering/info.txt b/dx/tests/079-dex-local-variable-renumbering/info.txt
new file mode 100644
index 0000000..249b23f
--- /dev/null
+++ b/dx/tests/079-dex-local-variable-renumbering/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to make sure that
+local variable tables stay in sync when the register set gets renumbered
+to make room for low scratch registers.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/079-dex-local-variable-renumbering/run b/dx/tests/079-dex-local-variable-renumbering/run
new file mode 100644
index 0000000..94b0c89
--- /dev/null
+++ b/dx/tests/079-dex-local-variable-renumbering/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --dump-method=Blort.test'*' \
+    *.class
diff --git a/dx/tests/080-dex-exception-tables/Blort.class b/dx/tests/080-dex-exception-tables/Blort.class
new file mode 100644
index 0000000..bb3b135
Binary files /dev/null and b/dx/tests/080-dex-exception-tables/Blort.class differ
diff --git a/dx/tests/080-dex-exception-tables/Blort.java b/dx/tests/080-dex-exception-tables/Blort.java
new file mode 100644
index 0000000..2143f7f
--- /dev/null
+++ b/dx/tests/080-dex-exception-tables/Blort.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public static void call1() { }
+    public static void call2() { }
+    public static void call3() { }
+    public static void call4() { }
+    public static void call5() { }
+
+    public static int test1() {
+        try {
+            call1();
+            call2();
+        } catch (IndexOutOfBoundsException ex) {
+            return 10;
+        } catch (RuntimeException ex) {
+            return 11;
+        }
+
+        call3();
+        return 12;
+    }
+
+    public static int test2() {
+        try {
+            call1();
+            try {
+                call2();
+            } catch (IndexOutOfBoundsException ex) {
+                return 10;
+            }
+            call3();
+        } catch (RuntimeException ex) {
+            return 11;
+        }
+
+        return 12;
+    }
+
+    public static int test3() {
+        try {
+            call1();
+            try {
+                call2();
+                try {
+                    call3();
+                } catch (NullPointerException ex) {
+                    return 10;
+                }
+                call4();
+            } catch (IndexOutOfBoundsException ex) {
+                return 11;
+            }
+            call5();
+        } catch (RuntimeException ex) {
+            return 12;
+        }
+
+        return 13;
+    }
+
+    public static int test4() {
+        try {
+            call1();
+            try {
+                call2();
+                try {
+                    call3();
+                } catch (NullPointerException ex) {
+                    return 10;
+                }
+            } catch (IndexOutOfBoundsException ex) {
+                return 11;
+            }
+            call5();
+        } catch (RuntimeException ex) {
+            return 12;
+        }
+
+        return 13;
+    }
+
+    public static int test5() {
+        try {
+            call1();
+            try {
+                call2();
+                try {
+                    call3();
+                } catch (NullPointerException ex) {
+                    return 10;
+                }
+            } catch (IndexOutOfBoundsException ex) {
+                return 11;
+            }
+        } catch (RuntimeException ex) {
+            return 12;
+        }
+
+        return 13;
+    }
+
+    public static int test6() {
+        try {
+            try {
+                try {
+                    call1();
+                } catch (NullPointerException ex) {
+                    return 10;
+                }
+                call2();
+            } catch (IndexOutOfBoundsException ex) {
+                return 11;
+            }
+            call3();
+        } catch (RuntimeException ex) {
+            return 12;
+        }
+
+        call4();
+        return 13;
+    }
+
+    public static int test7() {
+        try {
+            call1();
+        } catch (RuntimeException ex) {
+            return 10;
+        }
+
+        try {
+            call2();
+        } catch (RuntimeException ex) {
+            return 11;
+        }
+
+        return 12;
+    }
+
+    public static int test8() {
+        try {
+            call1();
+            call2();
+        } catch (RuntimeException ex) {
+            return 10;
+        }
+
+        try {
+            call3();
+            call4();
+        } catch (RuntimeException ex) {
+            return 11;
+        }
+
+        return 12;
+    }
+
+    public static int test9() {
+        try {
+            call1();
+            try {
+                call2();
+            } catch (IllegalArgumentException ex) {
+                return 10;
+            }
+        } catch (RuntimeException ex) {
+            return 11;
+        }
+
+        try {
+            call3();
+            try {
+                call4();
+            } catch (IllegalArgumentException ex) {
+                return 12;
+            }
+        } catch (RuntimeException ex) {
+            return 13;
+        }
+
+        return 14;
+    }
+
+}
diff --git a/dx/tests/080-dex-exception-tables/build b/dx/tests/080-dex-exception-tables/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/080-dex-exception-tables/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/080-dex-exception-tables/expected.txt b/dx/tests/080-dex-exception-tables/expected.txt
new file mode 100644
index 0000000..4cf43f1
--- /dev/null
+++ b/dx/tests/080-dex-exception-tables/expected.txt
@@ -0,0 +1,286 @@
+Blort.test1:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: invoke-static {}, Blort.call3:()V
+  0009: const/16 v1, #int 12 // #000c
+  000b: move v0, v1
+  000c: return v0
+  000d: move-exception v1
+  000e: move-object v0, v1
+  000f: const/16 v1, #int 10 // #000a
+  0011: move v0, v1
+  0012: goto 000c // -0006
+  0013: move-exception v1
+  0014: move-object v0, v1
+  0015: const/16 v1, #int 11 // #000b
+  0017: move v0, v1
+  0018: goto 000c // -000c
+  catches
+    tries:
+      try 0000..0006
+      catch java.lang.IndexOutOfBoundsException -> 000d,
+        java.lang.RuntimeException -> 0013
+Blort.test2:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: invoke-static {}, Blort.call3:()V
+  0009: const/16 v1, #int 12 // #000c
+  000b: move v0, v1
+  000c: return v0
+  000d: move-exception v1
+  000e: move-object v0, v1
+  000f: const/16 v1, #int 10 // #000a
+  0011: move v0, v1
+  0012: goto 000c // -0006
+  0013: move-exception v1
+  0014: move-object v0, v1
+  0015: const/16 v1, #int 11 // #000b
+  0017: move v0, v1
+  0018: goto 000c // -000c
+  catches
+    tries:
+      try 0000..0003
+      catch java.lang.RuntimeException -> 0013
+      try 0003..0006
+      catch java.lang.IndexOutOfBoundsException -> 000d,
+        java.lang.RuntimeException -> 0013
+      try 0006..0009
+      catch java.lang.RuntimeException -> 0013
+Blort.test3:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: invoke-static {}, Blort.call3:()V
+  0009: invoke-static {}, Blort.call4:()V
+  000c: invoke-static {}, Blort.call5:()V
+  000f: const/16 v1, #int 13 // #000d
+  0011: move v0, v1
+  0012: return v0
+  0013: move-exception v1
+  0014: move-object v0, v1
+  0015: const/16 v1, #int 10 // #000a
+  0017: move v0, v1
+  0018: goto 0012 // -0006
+  0019: move-exception v1
+  001a: move-object v0, v1
+  001b: const/16 v1, #int 11 // #000b
+  001d: move v0, v1
+  001e: goto 0012 // -000c
+  001f: move-exception v1
+  0020: move-object v0, v1
+  0021: const/16 v1, #int 12 // #000c
+  0023: move v0, v1
+  0024: goto 0012 // -0012
+  catches
+    tries:
+      try 0000..0003
+      catch java.lang.RuntimeException -> 001f
+      try 0003..0006
+      catch java.lang.IndexOutOfBoundsException -> 0019,
+        java.lang.RuntimeException -> 001f
+      try 0006..0009
+      catch java.lang.NullPointerException -> 0013,
+        java.lang.IndexOutOfBoundsException -> 0019,
+        java.lang.RuntimeException -> 001f
+      try 0009..000c
+      catch java.lang.IndexOutOfBoundsException -> 0019,
+        java.lang.RuntimeException -> 001f
+      try 000c..000f
+      catch java.lang.RuntimeException -> 001f
+Blort.test4:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: invoke-static {}, Blort.call3:()V
+  0009: invoke-static {}, Blort.call5:()V
+  000c: const/16 v1, #int 13 // #000d
+  000e: move v0, v1
+  000f: return v0
+  0010: move-exception v1
+  0011: move-object v0, v1
+  0012: const/16 v1, #int 10 // #000a
+  0014: move v0, v1
+  0015: goto 000f // -0006
+  0016: move-exception v1
+  0017: move-object v0, v1
+  0018: const/16 v1, #int 11 // #000b
+  001a: move v0, v1
+  001b: goto 000f // -000c
+  001c: move-exception v1
+  001d: move-object v0, v1
+  001e: const/16 v1, #int 12 // #000c
+  0020: move v0, v1
+  0021: goto 000f // -0012
+  catches
+    tries:
+      try 0000..0003
+      catch java.lang.RuntimeException -> 001c
+      try 0003..0006
+      catch java.lang.IndexOutOfBoundsException -> 0016,
+        java.lang.RuntimeException -> 001c
+      try 0006..0009
+      catch java.lang.NullPointerException -> 0010,
+        java.lang.IndexOutOfBoundsException -> 0016,
+        java.lang.RuntimeException -> 001c
+      try 0009..000c
+      catch java.lang.RuntimeException -> 001c
+Blort.test5:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: invoke-static {}, Blort.call3:()V
+  0009: const/16 v1, #int 13 // #000d
+  000b: move v0, v1
+  000c: return v0
+  000d: move-exception v1
+  000e: move-object v0, v1
+  000f: const/16 v1, #int 10 // #000a
+  0011: move v0, v1
+  0012: goto 000c // -0006
+  0013: move-exception v1
+  0014: move-object v0, v1
+  0015: const/16 v1, #int 11 // #000b
+  0017: move v0, v1
+  0018: goto 000c // -000c
+  0019: move-exception v1
+  001a: move-object v0, v1
+  001b: const/16 v1, #int 12 // #000c
+  001d: move v0, v1
+  001e: goto 000c // -0012
+  catches
+    tries:
+      try 0000..0003
+      catch java.lang.RuntimeException -> 0019
+      try 0003..0006
+      catch java.lang.IndexOutOfBoundsException -> 0013,
+        java.lang.RuntimeException -> 0019
+      try 0006..0009
+      catch java.lang.NullPointerException -> 000d,
+        java.lang.IndexOutOfBoundsException -> 0013,
+        java.lang.RuntimeException -> 0019
+Blort.test6:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: invoke-static {}, Blort.call3:()V
+  0009: invoke-static {}, Blort.call4:()V
+  000c: const/16 v1, #int 13 // #000d
+  000e: move v0, v1
+  000f: return v0
+  0010: move-exception v1
+  0011: move-object v0, v1
+  0012: const/16 v1, #int 10 // #000a
+  0014: move v0, v1
+  0015: goto 000f // -0006
+  0016: move-exception v1
+  0017: move-object v0, v1
+  0018: const/16 v1, #int 11 // #000b
+  001a: move v0, v1
+  001b: goto 000f // -000c
+  001c: move-exception v1
+  001d: move-object v0, v1
+  001e: const/16 v1, #int 12 // #000c
+  0020: move v0, v1
+  0021: goto 000f // -0012
+  catches
+    tries:
+      try 0000..0003
+      catch java.lang.NullPointerException -> 0010,
+        java.lang.IndexOutOfBoundsException -> 0016,
+        java.lang.RuntimeException -> 001c
+      try 0003..0006
+      catch java.lang.IndexOutOfBoundsException -> 0016,
+        java.lang.RuntimeException -> 001c
+      try 0006..0009
+      catch java.lang.RuntimeException -> 001c
+Blort.test7:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: const/16 v1, #int 12 // #000c
+  0008: move v0, v1
+  0009: return v0
+  000a: move-exception v1
+  000b: move-object v0, v1
+  000c: const/16 v1, #int 10 // #000a
+  000e: move v0, v1
+  000f: goto 0009 // -0006
+  0010: move-exception v1
+  0011: move-object v0, v1
+  0012: const/16 v1, #int 11 // #000b
+  0014: move v0, v1
+  0015: goto 0009 // -000c
+  catches
+    tries:
+      try 0000..0003
+      catch java.lang.RuntimeException -> 000a
+      try 0003..0006
+      catch java.lang.RuntimeException -> 0010
+Blort.test8:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: invoke-static {}, Blort.call3:()V
+  0009: invoke-static {}, Blort.call4:()V
+  000c: const/16 v1, #int 12 // #000c
+  000e: move v0, v1
+  000f: return v0
+  0010: move-exception v1
+  0011: move-object v0, v1
+  0012: const/16 v1, #int 10 // #000a
+  0014: move v0, v1
+  0015: goto 000f // -0006
+  0016: move-exception v1
+  0017: move-object v0, v1
+  0018: const/16 v1, #int 11 // #000b
+  001a: move v0, v1
+  001b: goto 000f // -000c
+  catches
+    tries:
+      try 0000..0006
+      catch java.lang.RuntimeException -> 0010
+      try 0006..000c
+      catch java.lang.RuntimeException -> 0016
+Blort.test9:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: invoke-static {}, Blort.call1:()V
+  0003: invoke-static {}, Blort.call2:()V
+  0006: invoke-static {}, Blort.call3:()V
+  0009: invoke-static {}, Blort.call4:()V
+  000c: const/16 v1, #int 14 // #000e
+  000e: move v0, v1
+  000f: return v0
+  0010: move-exception v1
+  0011: move-object v0, v1
+  0012: const/16 v1, #int 10 // #000a
+  0014: move v0, v1
+  0015: goto 000f // -0006
+  0016: move-exception v1
+  0017: move-object v0, v1
+  0018: const/16 v1, #int 11 // #000b
+  001a: move v0, v1
+  001b: goto 000f // -000c
+  001c: move-exception v1
+  001d: move-object v0, v1
+  001e: const/16 v1, #int 12 // #000c
+  0020: move v0, v1
+  0021: goto 000f // -0012
+  0022: move-exception v1
+  0023: move-object v0, v1
+  0024: const/16 v1, #int 13 // #000d
+  0026: move v0, v1
+  0027: goto 000f // -0018
+  catches
+    tries:
+      try 0000..0003
+      catch java.lang.RuntimeException -> 0016
+      try 0003..0006
+      catch java.lang.IllegalArgumentException -> 0010,
+        java.lang.RuntimeException -> 0016
+      try 0006..0009
+      catch java.lang.RuntimeException -> 0022
+      try 0009..000c
+      catch java.lang.IllegalArgumentException -> 001c,
+        java.lang.RuntimeException -> 0022
diff --git a/dx/tests/080-dex-exception-tables/info.txt b/dx/tests/080-dex-exception-tables/info.txt
new file mode 100644
index 0000000..99f2cbc
--- /dev/null
+++ b/dx/tests/080-dex-exception-tables/info.txt
@@ -0,0 +1,8 @@
+This is a smoke test of dex conversion, which checks to make sure that
+exception handler tables get built reasonably (combining entries that
+ought to be combined, listing entries in a correct and sensible order,
+etc.).
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/080-dex-exception-tables/run b/dx/tests/080-dex-exception-tables/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/080-dex-exception-tables/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/081-dex-throws-list/Blort.class b/dx/tests/081-dex-throws-list/Blort.class
new file mode 100644
index 0000000..1014876
Binary files /dev/null and b/dx/tests/081-dex-throws-list/Blort.class differ
diff --git a/dx/tests/081-dex-throws-list/Blort.java b/dx/tests/081-dex-throws-list/Blort.java
new file mode 100644
index 0000000..6011c9c
--- /dev/null
+++ b/dx/tests/081-dex-throws-list/Blort.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public int test1()
+            throws RuntimeException {
+        throw new RuntimeException();
+    }
+
+    public int test2()
+            throws Throwable, IllegalArgumentException {
+        throw new IllegalArgumentException();
+    }
+}
diff --git a/dx/tests/081-dex-throws-list/build b/dx/tests/081-dex-throws-list/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/081-dex-throws-list/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/081-dex-throws-list/expected.txt b/dx/tests/081-dex-throws-list/expected.txt
new file mode 100644
index 0000000..1350edf
--- /dev/null
+++ b/dx/tests/081-dex-throws-list/expected.txt
@@ -0,0 +1,4 @@
+Blort.test1:()I:
+    system-annotation dalvik.annotation.Throws {value: {java.lang.RuntimeException}}
+Blort.test2:()I:
+    system-annotation dalvik.annotation.Throws {value: {java.lang.Throwable, java.lang.IllegalArgumentException}}
diff --git a/dx/tests/081-dex-throws-list/info.txt b/dx/tests/081-dex-throws-list/info.txt
new file mode 100644
index 0000000..eb4bdd7
--- /dev/null
+++ b/dx/tests/081-dex-throws-list/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to make sure that
+throws lists (that is, list of declared exceptions on methods) get
+represented reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/081-dex-throws-list/run b/dx/tests/081-dex-throws-list/run
new file mode 100644
index 0000000..c42c1a2
--- /dev/null
+++ b/dx/tests/081-dex-throws-list/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none --no-locals --dump-method=Blort.test'*' \
+    *.class | grep 'Blort\|Throws'
diff --git a/dx/tests/082-dex-throws-list-sharing/Blort.class b/dx/tests/082-dex-throws-list-sharing/Blort.class
new file mode 100644
index 0000000..8257e39
Binary files /dev/null and b/dx/tests/082-dex-throws-list-sharing/Blort.class differ
diff --git a/dx/tests/082-dex-throws-list-sharing/Blort.java b/dx/tests/082-dex-throws-list-sharing/Blort.java
new file mode 100644
index 0000000..31591d0
--- /dev/null
+++ b/dx/tests/082-dex-throws-list-sharing/Blort.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public int test1()
+            throws RuntimeException {
+        throw new RuntimeException();
+    }
+
+    public int test2()
+            throws RuntimeException {
+        throw new RuntimeException();
+    }
+
+    public int test3()
+            throws Error, UnsupportedOperationException {
+        throw new RuntimeException();
+    }
+
+    public int test4()
+            throws Error, UnsupportedOperationException {
+        throw new RuntimeException();
+    }
+}
diff --git a/dx/tests/082-dex-throws-list-sharing/build b/dx/tests/082-dex-throws-list-sharing/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/082-dex-throws-list-sharing/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/082-dex-throws-list-sharing/expected.txt b/dx/tests/082-dex-throws-list-sharing/expected.txt
new file mode 100644
index 0000000..0f33924
--- /dev/null
+++ b/dx/tests/082-dex-throws-list-sharing/expected.txt
@@ -0,0 +1,2 @@
+java.lang.RuntimeException
+java.lang.Error, java.lang.UnsupportedOperationException
diff --git a/dx/tests/082-dex-throws-list-sharing/info.txt b/dx/tests/082-dex-throws-list-sharing/info.txt
new file mode 100644
index 0000000..3b7dca1
--- /dev/null
+++ b/dx/tests/082-dex-throws-list-sharing/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to make sure that
+identical throws lists in different methods get collapsed into a single
+dex file structure.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/082-dex-throws-list-sharing/run b/dx/tests/082-dex-throws-list-sharing/run
new file mode 100644
index 0000000..cbbac66
--- /dev/null
+++ b/dx/tests/082-dex-throws-list-sharing/run
@@ -0,0 +1,19 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none --no-locals --dump-to=- --dump-width=200 \
+    *.class | grep '^[0-9a-f].*value.*Exception' \
+    | sed -e 's/^[^{]*{//g' -e 's/}//g'
diff --git a/dx/tests/083-ssa-phi-placement/Blort.class b/dx/tests/083-ssa-phi-placement/Blort.class
new file mode 100644
index 0000000..c1390ab
Binary files /dev/null and b/dx/tests/083-ssa-phi-placement/Blort.class differ
diff --git a/dx/tests/083-ssa-phi-placement/Blort.java b/dx/tests/083-ssa-phi-placement/Blort.java
new file mode 100644
index 0000000..ed3264d
--- /dev/null
+++ b/dx/tests/083-ssa-phi-placement/Blort.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+
+    public int phiTest() {
+        int i = 1;
+        int j = 1;
+        int k = 0;
+
+        while (k < 100) {
+            if (j < 20) {
+                j = i;
+                k++;
+            } else {
+                j = k;
+                k += 2;
+            }
+        }
+
+        return j;
+    }
+
+    /**
+     * This method uses no registers.
+     */
+    public static void noVars() {
+    }
+
+    /**
+     * This method requires an ordered successor list with
+     * multiple identically-valued entries.
+     */
+    Object fd;
+    public Object getOption(int optID) throws RuntimeException
+    {
+        if (fd == null) {
+            throw new RuntimeException("socket not created");
+        }
+
+        int value = 0;
+        switch (optID)
+        {
+            case 1:
+            case 2:
+                return new Integer(value);
+            case 3:
+            default:
+                return Boolean.valueOf(value != 0);
+        }
+    }
+}
diff --git a/dx/tests/083-ssa-phi-placement/build b/dx/tests/083-ssa-phi-placement/build
new file mode 100644
index 0000000..c7f2e47
--- /dev/null
+++ b/dx/tests/083-ssa-phi-placement/build
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/083-ssa-phi-placement/expected.txt b/dx/tests/083-ssa-phi-placement/expected.txt
new file mode 100644
index 0000000..317f8c4
--- /dev/null
+++ b/dx/tests/083-ssa-phi-placement/expected.txt
@@ -0,0 +1,345 @@
+reading Blort.class...
+method <init> ()V
+first 0007
+block 0000
+  pred 0005
+  live in:{}
+  Blort.java:17@0000: move-object v1:NffffLBlort; <- v0:NffffLBlort;
+  Blort.java:17@0001: Rop{invoke-direct . <- Ljava/lang/Object; call throws <an
+  y>}(java.lang.Object.<init>:()V catch) . <- v1:NffffLBlort;
+  next 0004
+  live out:{}
+block 0004
+  pred 0000
+  live in:{}
+  Blort.java:17@0004: goto . <- .
+  next 0006
+  live out:{}
+block 0005
+  pred 0007
+  live in:{}
+  Blort.java:17@0000: move-param-object(0) v0:NffffLBlort; <- .
+  Blort.java:17@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0006
+  pred 0004
+  live in:{}
+  Blort.java:17@0004: return-void . <- .
+  returns
+  live out:{}
+block 0007
+  live in:{}
+  @????: goto . <- .
+  next 0005
+  live out:{}
+
+method phiTest ()I
+first 0025
+block 0000
+  pred 0023
+  live in:{}
+  Blort.java:21@0000: const-int(1) v4:I=1 <- .
+  Blort.java:21@0001: move-int v1:I=1 <- v4:I=1
+  Blort.java:22@0002: const-int(1) v4:I=1 <- .
+  Blort.java:22@0003: move-int v2:I=1 <- v4:I=1
+  Blort.java:23@0004: const-int(0) v4:I=0 <- .
+  Blort.java:23@0005: move-int v3:I=0 <- v4:I=0
+  Blort.java:23@0005: goto . <- .
+  next 0026
+  live out:{}
+block 0006
+  pred 0026
+  live in:{}
+  Blort.java:25@0006: move-int v4:I <- v3:I
+  Blort.java:25@0007: const-int(100) v5:I=100 <- .
+  Blort.java:25@0009: if-ge-int . <- v4:I v5:I=100
+  next 000c *
+  next 0022
+  live out:{}
+block 000c
+  pred 0006
+  live in:{}
+  Blort.java:26@000c: move-int v4:I <- v2:I
+  Blort.java:26@000d: const-int(20) v5:I=20 <- .
+  Blort.java:26@000f: if-ge-int . <- v4:I v5:I=20
+  next 0012 *
+  next 001a
+  live out:{}
+block 0012
+  pred 000c
+  live in:{}
+  Blort.java:27@0012: move-int v4:I <- v1:I
+  Blort.java:27@0013: move-int v2:I <- v4:I
+  Blort.java:28@0014: add-const-int(1) v3:I <- v3:I
+  Blort.java:28@0017: goto . <- .
+  next 0026
+  live out:{}
+block 001a
+  pred 000c
+  live in:{}
+  Blort.java:30@001a: move-int v4:I <- v3:I
+  Blort.java:30@001b: move-int v2:I <- v4:I
+  Blort.java:31@001c: add-const-int(2) v3:I <- v3:I
+  Blort.java:31@001f: goto . <- .
+  next 0026
+  live out:{}
+block 0022
+  pred 0006
+  live in:{}
+  Blort.java:35@0022: move-int v4:I <- v2:I
+  Blort.java:35@0023: move-int v0:I <- v4:I
+  Blort.java:35@0023: goto . <- .
+  next 0024
+  live out:{}
+block 0023
+  pred 0025
+  live in:{}
+  Blort.java:21@0000: move-param-object(0) v0:LBlort; <- .
+  Blort.java:21@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0024
+  pred 0022
+  live in:{}
+  Blort.java:35@0023: return-int . <- v0:I
+  returns
+  live out:{}
+block 0025
+  live in:{}
+  @????: goto . <- .
+  next 0023
+  live out:{}
+block 0026
+  pred 0000
+  pred 0012
+  pred 001a
+  live in:{}
+  @????: phi v5:V <- .
+  @????: phi v4:V <- .
+  @????: phi v3:V <- .
+  @????: phi v2:V <- .
+  @????: goto . <- .
+  next 0006
+  live out:{}
+
+method noVars ()V
+first 0003
+block 0000
+  pred 0001
+  live in:{}
+  Blort.java:42@0000: goto . <- .
+  next 0002
+  live out:{}
+block 0001
+  pred 0003
+  live in:{}
+  Blort.java:42@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0002
+  pred 0000
+  live in:{}
+  Blort.java:42@0000: return-void . <- .
+  returns
+  live out:{}
+block 0003
+  live in:{}
+  @????: goto . <- .
+  next 0001
+  live out:{}
+
+method getOption (I)Ljava/lang/Object;
+first 0052
+block 0000
+  pred 0046
+  live in:{}
+  Blort.java:51@0000: move-object v3:LBlort; <- v0:LBlort;
+  Blort.java:51@0001: get-field-object(Blort.fd:Ljava/lang/Object; catch) . <- 
+  v3:LBlort;
+  next 004d
+  live out:{}
+block 0004
+  pred 004d
+  live in:{}
+  Blort.java:51@0004: if-nez-object . <- v3:Ljava/lang/Object;
+  next 0007 *
+  next 0011
+  live out:{}
+block 0007
+  pred 0004
+  live in:{}
+  Blort.java:52@0007: new-instance(java.lang.RuntimeException catch) . <- .
+  next 004e
+  live out:{}
+block 000a
+  pred 004e
+  live in:{}
+  Blort.java:52@000a: move-object v6:N0007Ljava/lang/RuntimeException; <- v3:N0
+  007Ljava/lang/RuntimeException;
+  Blort.java:52@000a: move-object v3:N0007Ljava/lang/RuntimeException; <- v6:N0
+  007Ljava/lang/RuntimeException;
+  Blort.java:52@000a: move-object v4:N0007Ljava/lang/RuntimeException; <- v6:N0
+  007Ljava/lang/RuntimeException;
+  Blort.java:52@000b: const-object("socket not created" catch) . <- .
+  next 004f
+  live out:{}
+block 000d
+  pred 004f
+  live in:{}
+  Blort.java:52@000d: Rop{invoke-direct . <- Ljava/lang/RuntimeException; Ljava
+  /lang/String; call throws <any>}(java.lang.RuntimeException.<init>:(Ljava/lan
+  g/String;)V catch) . <- v4:N0007Ljava/lang/RuntimeException; v5:Ljava/lang/St
+  ring;="socket not created"
+  next 0010
+  live out:{}
+block 0010
+  pred 000d
+  live in:{}
+  Blort.java:52@0010: throw(catch) . <- v3:Ljava/lang/RuntimeException;
+  returns
+  live out:{}
+block 0011
+  pred 0004
+  live in:{}
+  Blort.java:55@0011: const-int(0) v3:I=0 <- .
+  Blort.java:55@0012: move-int v2:I=0 <- v3:I=0
+  Blort.java:56@0013: move-int v3:I <- v1:I
+  Blort.java:56@0014: switch({1, 2}) . <- v3:I
+  next 0030
+  next 0030
+  next 0039 *
+  live out:{}
+block 0030
+  pred 0011
+  live in:{}
+  Blort.java:60@0030: new-instance(java.lang.Integer catch) . <- .
+  next 0050
+  live out:{}
+block 0033
+  pred 0050
+  live in:{}
+  Blort.java:60@0033: move-object v6:N0030Ljava/lang/Integer; <- v3:N0030Ljava/
+  lang/Integer;
+  Blort.java:60@0033: move-object v3:N0030Ljava/lang/Integer; <- v6:N0030Ljava/
+  lang/Integer;
+  Blort.java:60@0033: move-object v4:N0030Ljava/lang/Integer; <- v6:N0030Ljava/
+  lang/Integer;
+  Blort.java:60@0034: move-int v5:I <- v2:I
+  Blort.java:60@0035: Rop{invoke-direct . <- Ljava/lang/Integer; I call throws 
+  <any>}(java.lang.Integer.<init>:(I)V catch) . <- v4:N0030Ljava/lang/Integer; 
+  v5:I
+  next 0038
+  live out:{}
+block 0038
+  pred 0033
+  live in:{}
+  Blort.java:60@0038: move-object v0:Ljava/lang/Integer; <- v3:Ljava/lang/Integ
+  er;
+  Blort.java:60@0038: goto . <- .
+  next 0047
+  live out:{}
+block 0039
+  pred 0011
+  live in:{}
+  Blort.java:63@0039: move-int v3:I <- v2:I
+  Blort.java:63@003a: if-eqz-int . <- v3:I
+  next 003d *
+  next 0041
+  live out:{}
+block 003d
+  pred 0039
+  live in:{}
+  Blort.java:63@003d: const-int(1) v3:I=1 <- .
+  Blort.java:63@003e: goto . <- .
+  next 0042
+  live out:{}
+block 0041
+  pred 0039
+  live in:{}
+  Blort.java:63@0041: const-int(0) v3:I=0 <- .
+  Blort.java:63@0041: goto . <- .
+  next 0042
+  live out:{}
+block 0042
+  pred 003d
+  pred 0041
+  live in:{}
+  @????: phi v3:V <- .
+  Blort.java:63@0042: Rop{invoke-static . <- I call throws <any>}(java.lang.Boo
+  lean.valueOf:(Z)Ljava/lang/Boolean; catch) . <- v3:I
+  next 0051
+  live out:{}
+block 0045
+  pred 0051
+  live in:{}
+  Blort.java:63@0045: move-object v0:Ljava/lang/Boolean; <- v3:Ljava/lang/Boole
+  an;
+  Blort.java:63@0045: goto . <- .
+  next 0047
+  live out:{}
+block 0046
+  pred 0052
+  live in:{}
+  Blort.java:51@0000: move-param-object(0) v0:LBlort; <- .
+  Blort.java:51@0000: move-param-int(1) v1:I <- .
+  Blort.java:51@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0047
+  pred 0038
+  pred 0045
+  live in:{}
+  @????: phi v6:V <- .
+  @????: phi v5:V <- .
+  @????: phi v4:V <- .
+  @????: phi v3:V <- .
+  @????: phi v0:V <- .
+  Blort.java:63@0045: return-object . <- v0:Ljava/lang/Object;
+  returns
+  live out:{}
+block 004d
+  pred 0000
+  live in:{}
+  Blort.java:51@0001: Rop{move-result-pseudo Ljava/lang/Object; <- . flows} v3:
+  Ljava/lang/Object; <- .
+  Blort.java:51@0001: goto . <- .
+  next 0004
+  live out:{}
+block 004e
+  pred 0007
+  live in:{}
+  Blort.java:52@0007: Rop{move-result-pseudo N0007Ljava/lang/RuntimeException; 
+  <- . flows} v3:N0007Ljava/lang/RuntimeException; <- .
+  Blort.java:52@0007: goto . <- .
+  next 000a
+  live out:{}
+block 004f
+  pred 000a
+  live in:{}
+  Blort.java:52@000b: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v5:
+  Ljava/lang/String;="socket not created" <- .
+  Blort.java:52@000b: goto . <- .
+  next 000d
+  live out:{}
+block 0050
+  pred 0030
+  live in:{}
+  Blort.java:60@0030: Rop{move-result-pseudo N0030Ljava/lang/Integer; <- . flow
+  s} v3:N0030Ljava/lang/Integer; <- .
+  Blort.java:60@0030: goto . <- .
+  next 0033
+  live out:{}
+block 0051
+  pred 0042
+  live in:{}
+  Blort.java:63@0042: Rop{move-result Ljava/lang/Boolean; <- . flows} v3:Ljava/
+  lang/Boolean; <- .
+  Blort.java:63@0042: goto . <- .
+  next 0045
+  live out:{}
+block 0052
+  live in:{}
+  @????: goto . <- .
+  next 0046
+  live out:{}
diff --git a/dx/tests/083-ssa-phi-placement/info.txt b/dx/tests/083-ssa-phi-placement/info.txt
new file mode 100644
index 0000000..8d4eebf
--- /dev/null
+++ b/dx/tests/083-ssa-phi-placement/info.txt
@@ -0,0 +1,5 @@
+This is a test case for the phi placement algorthim used in the conversion to SSA form.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/083-ssa-phi-placement/run b/dx/tests/083-ssa-phi-placement/run
new file mode 100644
index 0000000..005968f
--- /dev/null
+++ b/dx/tests/083-ssa-phi-placement/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --dump --ssa-blocks --ssa-step=phi-placement Blort.class
diff --git a/dx/tests/084-dex-high-register-moves/Blort.class b/dx/tests/084-dex-high-register-moves/Blort.class
new file mode 100644
index 0000000..e96884e
Binary files /dev/null and b/dx/tests/084-dex-high-register-moves/Blort.class differ
diff --git a/dx/tests/084-dex-high-register-moves/Blort.java b/dx/tests/084-dex-high-register-moves/Blort.java
new file mode 100644
index 0000000..e68ebd8
--- /dev/null
+++ b/dx/tests/084-dex-high-register-moves/Blort.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    private static int i;
+    private static long l;
+    private static Object o;
+
+    public static void test() {
+        int i0 = 0;
+        int i1 = 0;
+        int i2 = 0;
+        int i3 = 0;
+        int i4 = 0;
+        int i5 = 0;
+        int i6 = 0;
+        int i7 = 0;
+        int i8 = 0;
+        int i9 = 0;
+        int i10 = 0;
+        int i11 = 0;
+        int i12 = 0;
+        int i13 = 0;
+        int i14 = 0;
+        int i15 = 0;
+
+        int ix = i;
+        long lx = l;
+        Object ox = o;
+
+        i = -ix;
+        l = -lx;
+        i = (ox instanceof String) ? 0 : 1;
+    }
+}
diff --git a/dx/tests/084-dex-high-register-moves/build b/dx/tests/084-dex-high-register-moves/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/084-dex-high-register-moves/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/084-dex-high-register-moves/expected.txt b/dx/tests/084-dex-high-register-moves/expected.txt
new file mode 100644
index 0000000..33466c4
--- /dev/null
+++ b/dx/tests/084-dex-high-register-moves/expected.txt
@@ -0,0 +1,60 @@
+Blort.test:()V:
+regs: 0018; ins: 0000; outs: 0000
+  0000: const/16 v22, #int 0 // #0000
+  0002: move/from16 v2, v22
+  0004: const/16 v22, #int 0 // #0000
+  0006: move/from16 v3, v22
+  0008: const/16 v22, #int 0 // #0000
+  000a: move/from16 v4, v22
+  000c: const/16 v22, #int 0 // #0000
+  000e: move/from16 v5, v22
+  0010: const/16 v22, #int 0 // #0000
+  0012: move/from16 v6, v22
+  0014: const/16 v22, #int 0 // #0000
+  0016: move/from16 v7, v22
+  0018: const/16 v22, #int 0 // #0000
+  001a: move/from16 v8, v22
+  001c: const/16 v22, #int 0 // #0000
+  001e: move/from16 v9, v22
+  0020: const/16 v22, #int 0 // #0000
+  0022: move/from16 v10, v22
+  0024: const/16 v22, #int 0 // #0000
+  0026: move/from16 v11, v22
+  0028: const/16 v22, #int 0 // #0000
+  002a: move/from16 v12, v22
+  002c: const/16 v22, #int 0 // #0000
+  002e: move/from16 v13, v22
+  0030: const/16 v22, #int 0 // #0000
+  0032: move/from16 v14, v22
+  0034: const/16 v22, #int 0 // #0000
+  0036: move/from16 v15, v22
+  0038: const/16 v22, #int 0 // #0000
+  003a: move/from16 v16, v22
+  003c: const/16 v22, #int 0 // #0000
+  003e: move/from16 v17, v22
+  0040: sget v22, Blort.i:I
+  0042: move/from16 v18, v22
+  0044: sget-wide v22, Blort.l:J
+  0046: move-wide/from16 v19, v22
+  0048: sget-object v22, Blort.o:Ljava/lang/Object;
+  004a: move-object/from16 v21, v22
+  004c: move/from16 v22, v18
+  004e: move/from16 v0, v22
+  0050: neg-int v0, v0
+  0051: move/from16 v22, v0
+  0053: sput v22, Blort.i:I
+  0055: move-wide/from16 v22, v19
+  0057: move-wide/from16 v0, v22
+  0059: neg-long v0, v0
+  005a: move-wide/from16 v22, v0
+  005c: sput-wide v22, Blort.l:J
+  005e: move-object/from16 v22, v21
+  0060: move-object/from16 v0, v22
+  0062: instance-of v0, v0, java.lang.String
+  0064: move/from16 v22, v0
+  0066: if-eqz v22, 006d // +0007
+  0068: const/16 v22, #int 0 // #0000
+  006a: sput v22, Blort.i:I
+  006c: return-void
+  006d: const/16 v22, #int 1 // #0001
+  006f: goto 006a // -0005
diff --git a/dx/tests/084-dex-high-register-moves/info.txt b/dx/tests/084-dex-high-register-moves/info.txt
new file mode 100644
index 0000000..77f0945
--- /dev/null
+++ b/dx/tests/084-dex-high-register-moves/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to make sure that
+high registers are moved to and from low registers with
+type-appropriate instructions.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/084-dex-high-register-moves/run b/dx/tests/084-dex-high-register-moves/run
new file mode 100644
index 0000000..e95bdd1
--- /dev/null
+++ b/dx/tests/084-dex-high-register-moves/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' *.class
diff --git a/dx/tests/085-dex-jsr-ret/blort.class b/dx/tests/085-dex-jsr-ret/blort.class
new file mode 100644
index 0000000..d2a7a45
Binary files /dev/null and b/dx/tests/085-dex-jsr-ret/blort.class differ
diff --git a/dx/tests/085-dex-jsr-ret/blort.j b/dx/tests/085-dex-jsr-ret/blort.j
new file mode 100644
index 0000000..e6a901c
--- /dev/null
+++ b/dx/tests/085-dex-jsr-ret/blort.j
@@ -0,0 +1,57 @@
+; Copyright (C) 2007 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+; Test jsr and jsr_w.
+.method public test_jsr()Ljava/lang/Object;
+    .limit locals 3
+    .limit stack 4
+    aload_0
+    jsr j1
+    aload_0
+    pop
+    ; Call j1 with different locals
+    ldc 10
+    istore_0
+    jsr j1
+    iload_0
+    pop
+    jsr j3
+    areturn
+j1:
+    astore_2
+    jsr_w j2
+    ret 2
+j2:
+    ; a subroutine with two returns and a catch block
+    astore_1
+    dup
+    dup
+    ; Just something that could throw an exception...
+    invokevirtual blort.test_jsr()V
+    ifnonnull j2a
+    ret_w 1
+j2a:
+    ret_w 1
+j3:
+    ; a subroutine that does not return
+    pop
+    areturn
+catchBlock:
+    areturn
+
+.catch java/lang/Throwable from j2 to j2a using catchBlock
+.end method
diff --git a/dx/tests/085-dex-jsr-ret/build b/dx/tests/085-dex-jsr-ret/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/085-dex-jsr-ret/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/085-dex-jsr-ret/expected.txt b/dx/tests/085-dex-jsr-ret/expected.txt
new file mode 100644
index 0000000..e463573
--- /dev/null
+++ b/dx/tests/085-dex-jsr-ret/expected.txt
@@ -0,0 +1,147 @@
+reading blort.class...
+method test_jsr ()Ljava/lang/Object;
+first 002f
+block 0000
+  pred 002f
+  blort.j:@0000: move-object v3:Lblort; <- v0:Lblort;
+  blort.j:@0000: goto . <- .
+  next 0001
+block 0001
+  pred 0000
+  @????: goto . <- .
+  next 0036
+block 0004
+  pred 0038
+  blort.j:@0004: move-object v4:Lblort; <- v0:Lblort;
+  blort.j:@0006: const-int(10) v4:I=10 <- .
+  blort.j:@0008: move-int v0:I=10 <- v4:I=10
+  blort.j:@0008: goto . <- .
+  next 0009
+block 0009
+  pred 0004
+  @????: goto . <- .
+  next 003f
+block 000c
+  pred 0041
+  blort.j:@000c: move-int v4:I <- v0:I
+  blort.j:@000c: goto . <- .
+  next 000e
+block 000e
+  pred 000c
+  @????: goto . <- .
+  next 0048
+block 002f
+  blort.j:@0000: move-param-object(0) v0:Lblort; <- .
+  blort.j:@0000: goto . <- .
+  next 0000
+block 0030
+  pred 003e
+  pred 0047
+  pred 0048
+  blort.j:@002c: return-object . <- v0:Ljava/lang/Object;
+  returns
+block 0036
+  pred 0001
+  blort.j:@0012: goto . <- .
+  next 0037
+block 0037
+  pred 0036
+  @????: goto . <- .
+  next 0039
+block 0038
+  pred 003c
+  pred 003d
+  @????: goto . <- .
+  next 0004
+block 0039
+  pred 0037
+  blort.j:@001b: move-object v7:Lblort; <- v3:Lblort;
+  blort.j:@001b: move-object v3:Lblort; <- v7:Lblort;
+  blort.j:@001b: move-object v4:Lblort; <- v7:Lblort;
+  blort.j:@001c: move-object v7:Lblort; <- v4:Lblort;
+  blort.j:@001c: move-object v4:Lblort; <- v7:Lblort;
+  blort.j:@001c: move-object v5:Lblort; <- v7:Lblort;
+  blort.j:@001d: Rop{invoke-virtual . <- Lblort; call throws <any>}(blort.test_
+  jsr:()V catch java.lang.Throwable) . <- v5:Lblort;
+  next 003a
+  next 003b *
+block 003a
+  pred 0039
+  blort.j:@002d: Rop{move-exception Ljava/lang/Throwable; <- . flows} v3:Ljava/
+  lang/Throwable; <- .
+  blort.j:@002d: goto . <- .
+  next 003e
+block 003b
+  pred 0039
+  blort.j:@0020: if-nez-object . <- v4:Lblort;
+  next 003c *
+  next 003d
+block 003c
+  pred 003b
+  @????: goto . <- .
+  next 0038
+block 003d
+  pred 003b
+  @????: goto . <- .
+  next 0038
+block 003e
+  pred 003a
+  blort.j:@002d: move-object v0:Ljava/lang/Class;=java.lang.Throwable <- v3:Lja
+  va/lang/Class;=java.lang.Throwable
+  blort.j:@002d: goto . <- .
+  next 0030
+block 003f
+  pred 0009
+  blort.j:@0012: goto . <- .
+  next 0040
+block 0040
+  pred 003f
+  @????: goto . <- .
+  next 0042
+block 0041
+  pred 0045
+  pred 0046
+  @????: goto . <- .
+  next 000c
+block 0042
+  pred 0040
+  blort.j:@001b: move-object v7:Lblort; <- v3:Lblort;
+  blort.j:@001b: move-object v3:Lblort; <- v7:Lblort;
+  blort.j:@001b: move-object v4:Lblort; <- v7:Lblort;
+  blort.j:@001c: move-object v7:Lblort; <- v4:Lblort;
+  blort.j:@001c: move-object v4:Lblort; <- v7:Lblort;
+  blort.j:@001c: move-object v5:Lblort; <- v7:Lblort;
+  blort.j:@001d: Rop{invoke-virtual . <- Lblort; call throws <any>}(blort.test_
+  jsr:()V catch java.lang.Throwable) . <- v5:Lblort;
+  next 0043
+  next 0044 *
+block 0043
+  pred 0042
+  blort.j:@002d: Rop{move-exception Ljava/lang/Throwable; <- . flows} v3:Ljava/
+  lang/Throwable; <- .
+  blort.j:@002d: goto . <- .
+  next 0047
+block 0044
+  pred 0042
+  blort.j:@0020: if-nez-object . <- v4:Lblort;
+  next 0045 *
+  next 0046
+block 0045
+  pred 0044
+  @????: goto . <- .
+  next 0041
+block 0046
+  pred 0044
+  @????: goto . <- .
+  next 0041
+block 0047
+  pred 0043
+  blort.j:@002d: move-object v0:Ljava/lang/Class;=java.lang.Throwable <- v3:Lja
+  va/lang/Class;=java.lang.Throwable
+  blort.j:@002d: goto . <- .
+  next 0030
+block 0048
+  pred 000e
+  blort.j:@002c: move-object v0:Lblort; <- v3:Lblort;
+  blort.j:@002c: goto . <- .
+  next 0030
diff --git a/dx/tests/085-dex-jsr-ret/info.txt b/dx/tests/085-dex-jsr-ret/info.txt
new file mode 100644
index 0000000..8e164d6
--- /dev/null
+++ b/dx/tests/085-dex-jsr-ret/info.txt
@@ -0,0 +1 @@
+Tests handling of the Java jsr/jsr_w/ret bytecodes.
diff --git a/dx/tests/085-dex-jsr-ret/run b/dx/tests/085-dex-jsr-ret/run
new file mode 100644
index 0000000..6290267
--- /dev/null
+++ b/dx/tests/085-dex-jsr-ret/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --dump --rop-blocks blort.class
diff --git a/dx/tests/086-ssa-edge-split/Blort.class b/dx/tests/086-ssa-edge-split/Blort.class
new file mode 100644
index 0000000..4bbf9fa
Binary files /dev/null and b/dx/tests/086-ssa-edge-split/Blort.class differ
diff --git a/dx/tests/086-ssa-edge-split/Blort.java b/dx/tests/086-ssa-edge-split/Blort.java
new file mode 100644
index 0000000..d12b3f9
--- /dev/null
+++ b/dx/tests/086-ssa-edge-split/Blort.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    /**
+     * This method requires the edge-splitter to add a node
+     * to get to the finally block, since there are
+     * two exception sources.
+     *
+     */
+    public int edgeSplitPredTest(int x) {
+        int y = 1;
+
+        try {
+            Integer.toString(x);
+            Integer.toString(x);
+            y++;
+        } finally {
+            return y;
+        }
+    }
+
+    /**
+     * just because this should do nothing
+     */
+    void voidFunction() {
+    }
+
+    /**
+     * Current SSA form requires each move-exception block to have
+     * a unique predecessor
+     */
+    void edgeSplitMoveException() {
+        try {
+            hashCode();
+            hashCode();
+        } catch (Throwable tr) {
+        }
+    }
+
+    /**
+     * Presently, any basic block ending in an instruction with
+     * a result needs to have a unique successor. This appies
+     * only to the block between the switch instruction and the return
+     * in this case.
+     */
+    int edgeSplitSuccessor(int x) {
+        int y = 0;
+
+        switch(x) {
+            case 1: y++;
+            break;
+            case 2: y++;
+            break;
+            case 3: y++;
+            break;
+        }
+        return y;
+    }
+}
diff --git a/dx/tests/086-ssa-edge-split/build b/dx/tests/086-ssa-edge-split/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/086-ssa-edge-split/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/086-ssa-edge-split/expected.txt b/dx/tests/086-ssa-edge-split/expected.txt
new file mode 100644
index 0000000..034882f
--- /dev/null
+++ b/dx/tests/086-ssa-edge-split/expected.txt
@@ -0,0 +1,337 @@
+reading Blort.class...
+method <init> ()V
+first 0007
+block 0000
+  pred 0005
+  live in:{}
+  Blort.java:17@0000: move-object v1:NffffLBlort; <- v0:NffffLBlort;
+  Blort.java:17@0001: Rop{invoke-direct . <- Ljava/lang/Object; call throws <any>}(java.lang.Object.<init>:()V catch) . <- v1:NffffLBlort;
+  next 0004
+  live out:{}
+block 0004
+  pred 0000
+  live in:{}
+  Blort.java:17@0004: goto . <- .
+  next 0006
+  live out:{}
+block 0005
+  pred 0007
+  live in:{}
+  Blort.java:17@0000: move-param-object(0) v0:NffffLBlort; <- .
+  Blort.java:17@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0006
+  pred 0004
+  live in:{}
+  Blort.java:17@0004: return-void . <- .
+  returns
+  live out:{}
+block 0007
+  live in:{}
+  @????: goto . <- .
+  next 0005
+  live out:{}
+
+method edgeSplitPredTest (I)I
+first 001c
+block 0000
+  pred 0013
+  live in:{}
+  Blort.java:26@0000: const-int(1) v4:I=1 <- .
+  Blort.java:26@0001: move-int v2:I=1 <- v4:I=1
+  Blort.java:26@0001: goto . <- .
+  next 0002
+  live out:{}
+block 0002
+  pred 0000
+  live in:{}
+  Blort.java:29@0002: move-int v4:I <- v1:I
+  Blort.java:29@0003: Rop{invoke-static . <- I call throws <any>}(java.lang.Integer.toString:(I)Ljava/lang/String; catch java.lang.Object) . <- v4:I
+  next 001d
+  next 001a *
+  live out:{}
+block 0006
+  pred 001a
+  live in:{}
+  Blort.java:30@0007: move-int v4:I <- v1:I
+  Blort.java:30@0008: Rop{invoke-static . <- I call throws <any>}(java.lang.Integer.toString:(I)Ljava/lang/String; catch java.lang.Object) . <- v4:I
+  next 001e
+  next 001b *
+  live out:{}
+block 000b
+  pred 001b
+  live in:{}
+  Blort.java:31@000c: add-const-int(1) v2:I <- v2:I
+  Blort.java:31@000c: goto . <- .
+  next 000f
+  live out:{}
+block 000f
+  pred 000b
+  live in:{}
+  Blort.java:33@000f: move-int v4:I <- v2:I
+  Blort.java:33@0010: move-int v0:I <- v4:I
+  Blort.java:33@0010: goto . <- .
+  next 0014
+  live out:{}
+block 0011
+  pred 0012
+  live in:{}
+  Blort.java:33@0011: move-object v3:Ljava/lang/Class;=java.lang.Object <- v4:Ljava/lang/Class;=java.lang.Object
+  Blort.java:33@0012: move-int v4:I <- v2:I
+  Blort.java:33@0013: move-int v0:I <- v4:I
+  Blort.java:33@0013: goto . <- .
+  next 0014
+  live out:{}
+block 0012
+  pred 001d
+  pred 001e
+  live in:{}
+  Blort.java:33@0011: goto . <- .
+  next 0011
+  live out:{}
+block 0013
+  pred 001c
+  live in:{}
+  Blort.java:26@0000: move-param-object(0) v0:LBlort; <- .
+  Blort.java:26@0000: move-param-int(1) v1:I <- .
+  Blort.java:26@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0014
+  pred 000f
+  pred 0011
+  live in:{}
+  Blort.java:33@0010: return-int . <- v0:I
+  returns
+  live out:{}
+block 001a
+  pred 0002
+  live in:{}
+  Blort.java:29@0003: Rop{move-result Ljava/lang/String; <- . flows} v4:Ljava/lang/String; <- .
+  Blort.java:29@0003: goto . <- .
+  next 0006
+  live out:{}
+block 001b
+  pred 0006
+  live in:{}
+  Blort.java:30@0008: Rop{move-result Ljava/lang/String; <- . flows} v4:Ljava/lang/String; <- .
+  Blort.java:30@0008: goto . <- .
+  next 000b
+  live out:{}
+block 001c
+  live in:{}
+  @????: goto . <- .
+  next 0013
+  live out:{}
+block 001d
+  pred 0002
+  live in:{}
+  Blort.java:33@0011: Rop{move-exception Ljava/lang/Object; <- . flows} v4:Ljava/lang/Object; <- .
+  @????: goto . <- .
+  next 0012
+  live out:{}
+block 001e
+  pred 0006
+  live in:{}
+  Blort.java:33@0011: Rop{move-exception Ljava/lang/Object; <- . flows} v4:Ljava/lang/Object; <- .
+  @????: goto . <- .
+  next 0012
+  live out:{}
+
+method voidFunction ()V
+first 0003
+block 0000
+  pred 0001
+  live in:{}
+  Blort.java:41@0000: goto . <- .
+  next 0002
+  live out:{}
+block 0001
+  pred 0003
+  live in:{}
+  Blort.java:41@0000: move-param-object(0) v0:LBlort; <- .
+  Blort.java:41@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0002
+  pred 0000
+  live in:{}
+  Blort.java:41@0000: return-void . <- .
+  returns
+  live out:{}
+block 0003
+  live in:{}
+  @????: goto . <- .
+  next 0001
+  live out:{}
+
+method edgeSplitMoveException ()V
+first 0019
+block 0000
+  pred 0010
+  live in:{}
+  Blort.java:49@0000: move-object v2:LBlort; <- v0:LBlort;
+  Blort.java:49@0001: Rop{invoke-virtual . <- Ljava/lang/Object; call throws <any>}(java.lang.Object.hashCode:()I catch java.lang.Throwable) . <- v2:LBlort;
+  next 001a
+  next 0017 *
+  live out:{}
+block 0004
+  pred 0017
+  live in:{}
+  Blort.java:50@0005: move-object v2:LBlort; <- v0:LBlort;
+  Blort.java:50@0006: Rop{invoke-virtual . <- Ljava/lang/Object; call throws <any>}(java.lang.Object.hashCode:()I catch java.lang.Throwable) . <- v2:LBlort;
+  next 001b
+  next 0018 *
+  live out:{}
+block 0009
+  pred 0018
+  live in:{}
+  @????: goto . <- .
+  next 000a
+  live out:{}
+block 000a
+  pred 0009
+  live in:{}
+  Blort.java:52@000a: goto . <- .
+  next 000e
+  live out:{}
+block 000d
+  pred 000f
+  live in:{}
+  Blort.java:51@000d: move-object v1:Ljava/lang/Class;=java.lang.Throwable <- v2:Ljava/lang/Class;=java.lang.Throwable
+  Blort.java:51@000d: goto . <- .
+  next 000e
+  live out:{}
+block 000e
+  pred 000a
+  pred 000d
+  live in:{}
+  Blort.java:53@000e: goto . <- .
+  next 0011
+  live out:{}
+block 000f
+  pred 001a
+  pred 001b
+  live in:{}
+  Blort.java:51@000d: goto . <- .
+  next 000d
+  live out:{}
+block 0010
+  pred 0019
+  live in:{}
+  Blort.java:49@0000: move-param-object(0) v0:LBlort; <- .
+  Blort.java:49@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0011
+  pred 000e
+  live in:{}
+  Blort.java:53@000e: return-void . <- .
+  returns
+  live out:{}
+block 0017
+  pred 0000
+  live in:{}
+  Blort.java:49@0001: Rop{move-result I <- . flows} v2:I <- .
+  Blort.java:49@0001: goto . <- .
+  next 0004
+  live out:{}
+block 0018
+  pred 0004
+  live in:{}
+  Blort.java:50@0006: Rop{move-result I <- . flows} v2:I <- .
+  Blort.java:50@0006: goto . <- .
+  next 0009
+  live out:{}
+block 0019
+  live in:{}
+  @????: goto . <- .
+  next 0010
+  live out:{}
+block 001a
+  pred 0000
+  live in:{}
+  Blort.java:51@000d: Rop{move-exception Ljava/lang/Throwable; <- . flows} v2:Ljava/lang/Throwable; <- .
+  @????: goto . <- .
+  next 000f
+  live out:{}
+block 001b
+  pred 0004
+  live in:{}
+  Blort.java:51@000d: Rop{move-exception Ljava/lang/Throwable; <- . flows} v2:Ljava/lang/Throwable; <- .
+  @????: goto . <- .
+  next 000f
+  live out:{}
+
+method edgeSplitSuccessor (I)I
+first 002e
+block 0000
+  pred 002c
+  live in:{}
+  Blort.java:62@0000: const-int(0) v3:I=0 <- .
+  Blort.java:62@0001: move-int v2:I=0 <- v3:I=0
+  Blort.java:64@0002: move-int v3:I <- v1:I
+  Blort.java:64@0003: switch({1, 2, 3}) . <- v3:I
+  next 001c
+  next 0022
+  next 0028
+  next 002f *
+  live out:{}
+block 001c
+  pred 0000
+  live in:{}
+  Blort.java:65@001c: add-const-int(1) v2:I <- v2:I
+  Blort.java:66@001f: goto . <- .
+  next 002b
+  live out:{}
+block 0022
+  pred 0000
+  live in:{}
+  Blort.java:67@0022: add-const-int(1) v2:I <- v2:I
+  Blort.java:68@0025: goto . <- .
+  next 002b
+  live out:{}
+block 0028
+  pred 0000
+  live in:{}
+  Blort.java:69@0028: add-const-int(1) v2:I <- v2:I
+  Blort.java:69@0028: goto . <- .
+  next 002b
+  live out:{}
+block 002b
+  pred 001c
+  pred 0022
+  pred 0028
+  pred 002f
+  live in:{}
+  Blort.java:72@002b: move-int v3:I <- v2:I
+  Blort.java:72@002c: move-int v0:I <- v3:I
+  Blort.java:72@002c: goto . <- .
+  next 002d
+  live out:{}
+block 002c
+  pred 002e
+  live in:{}
+  Blort.java:62@0000: move-param-object(0) v0:LBlort; <- .
+  Blort.java:62@0000: move-param-int(1) v1:I <- .
+  Blort.java:62@0000: goto . <- .
+  next 0000
+  live out:{}
+block 002d
+  pred 002b
+  live in:{}
+  Blort.java:72@002c: return-int . <- v0:I
+  returns
+  live out:{}
+block 002e
+  live in:{}
+  @????: goto . <- .
+  next 002c
+  live out:{}
+block 002f
+  pred 0000
+  live in:{}
+  @????: goto . <- .
+  next 002b
+  live out:{}
diff --git a/dx/tests/086-ssa-edge-split/info.txt b/dx/tests/086-ssa-edge-split/info.txt
new file mode 100644
index 0000000..ff873e8
--- /dev/null
+++ b/dx/tests/086-ssa-edge-split/info.txt
@@ -0,0 +1,5 @@
+This is a test case for the edge-splitting algorthim used in the conversion to SSA form.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/086-ssa-edge-split/run b/dx/tests/086-ssa-edge-split/run
new file mode 100644
index 0000000..3c1ae5c
--- /dev/null
+++ b/dx/tests/086-ssa-edge-split/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --dump --width=1000 --ssa-blocks --ssa-step=edge-split Blort.class
diff --git a/dx/tests/087-ssa-local-vars/Blort.class b/dx/tests/087-ssa-local-vars/Blort.class
new file mode 100644
index 0000000..bdf2fac
Binary files /dev/null and b/dx/tests/087-ssa-local-vars/Blort.class differ
diff --git a/dx/tests/087-ssa-local-vars/Blort.java b/dx/tests/087-ssa-local-vars/Blort.java
new file mode 100644
index 0000000..7ce8a91
--- /dev/null
+++ b/dx/tests/087-ssa-local-vars/Blort.java
@@ -0,0 +1,94 @@
+import java.io.IOException;
+class Blort {
+    private static void arrayCopyTest(int k) {
+        // A local variable assigned from an argument
+        int j = k;
+        // These two locals are defined once and used multiple times
+        String[] stringArray = new String[8];
+        Object[] objectArray = new Object[8];
+        // Should cause another move to be inserted
+        Object anotherOne = objectArray;
+
+        if (anotherOne != null) {
+            System.out.println("foo");
+        }
+
+        // "i" is used in a loop
+        for (int i = 0; i < stringArray.length; i++)
+            stringArray[i] = new String(Integer.toString(i));
+
+        System.out.println("string -> object");
+        System.arraycopy(stringArray, 0, objectArray, 0, stringArray.length);
+        System.out.println("object -> string");
+        System.arraycopy(objectArray, 0, stringArray, 0, stringArray.length);
+        System.out.println("object -> string (modified)");
+        objectArray[4] = new Object();
+        try {
+            System.arraycopy(objectArray, 0, stringArray, 0,stringArray.length);
+        } catch (ArrayStoreException ase) {
+            // "ase" is an unused local which still must be preserved
+            System.out.println("caught ArrayStoreException (expected)");
+        }
+    }
+
+    private void testConstructor() {
+        Blort foo = null;
+        try {
+            foo = new Blort();
+        } catch (Exception ex) {
+        }
+        System.err.println(foo);
+    }
+    /**
+     * Stolen from
+     * java/android/org/apache/http/impl/io/AbstractMessageParser.java
+     * Simplified.
+     *
+     * Checks to see that local variable assignment is preserved through
+     * phi's. The key component here is the assignment of previous = current.
+     */
+    public static void parseHeaderGroup(
+            final Object headGroup,
+            final Object inbuffer,
+            int maxHeaderCount,
+            int maxLineLen)
+        throws  IOException {
+
+        StringBuilder current = null;
+        StringBuilder previous = null;
+        for (;;) {
+            if (current == null) {
+                current = new StringBuilder(64);
+            } else {
+                current.length();
+            }
+            int l = inbuffer.hashCode();
+            if (l == -1 || current.length() < 1) {
+                break;
+            }
+
+            if ((current.charAt(0) == ' ' || current.charAt(0) == '\t') && previous != null) {
+                int i = 0;
+                while (i < current.length()) {
+                    char ch = current.charAt(i);
+                    if (ch != ' ' && ch != '\t') {
+                        break;
+                    }
+                    i++;
+                }
+                if (maxLineLen > 0
+                        && previous.length() + 1 + current.length() - i > maxLineLen) {
+                    throw new IOException("Maximum line length limit exceeded");
+                }
+                previous.append(' ');
+                previous.append(current, i, current.length() - i);
+            } else {
+                previous = current;
+                current = null;
+            }
+            if (maxHeaderCount > 0) {
+                throw new IOException("Maximum header count exceeded");
+            }
+        }
+    }
+}
diff --git a/dx/tests/087-ssa-local-vars/build b/dx/tests/087-ssa-local-vars/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/087-ssa-local-vars/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/087-ssa-local-vars/expected.txt b/dx/tests/087-ssa-local-vars/expected.txt
new file mode 100644
index 0000000..a94144e
--- /dev/null
+++ b/dx/tests/087-ssa-local-vars/expected.txt
@@ -0,0 +1,1266 @@
+reading Blort.class...
+method <init> ()V
+first 0007
+block 0000
+  pred 0005
+  live in:{2}
+  Blort.java:2@0001: Rop{invoke-direct . <- Ljava/lang/Object; call throws <any
+  >}(java.lang.Object.<init>:()V catch) . <- v2:NffffLBlort;
+  next 0004
+  live out:{}
+block 0004
+  pred 0000
+  live in:{}
+  Blort.java:2@0004: goto . <- .
+  next 0006
+  live out:{}
+block 0005
+  pred 0007
+  live in:{}
+  Blort.java:2@0000: move-param-object(0) v2:"this"NffffLBlort; <- .
+  Blort.java:2@0000: goto . <- .
+  next 0000
+  live out:{2}
+block 0006
+  pred 0004
+  live in:{}
+  Blort.java:2@0004: return-void . <- .
+  next 0008
+  live out:{}
+block 0007
+  live in:{}
+  @????: goto . <- .
+  next 0005
+  live out:{}
+block 0008
+  pred 0006
+  live in:{}
+  returns
+  live out:{}
+
+method arrayCopyTest (I)V
+first 00a4
+block 0000
+  pred 008a
+  live in:{12, 62, 63}
+  Blort.java:5@0001: move-int v13:"j"I <- v12:I
+  Blort.java:7@0004: new-array-object(java.lang.String[] catch) . <- v63:I=8
+  next 0091
+  live out:{62, 63}
+block 0007
+  pred 0091
+  live in:{15, 62, 63}
+  @????: mark-local-object . <- v15:"stringArray"[Ljava/lang/String;
+  Blort.java:8@000a: new-array-object(java.lang.Object[] catch) . <- v63:I=8
+  next 0092
+  live out:{15, 62}
+block 000d
+  pred 0092
+  live in:{15, 17, 62}
+  @????: mark-local-object . <- v17:"objectArray"[Ljava/lang/Object;
+  Blort.java:10@000f: move-object v18:"anotherOne"[Ljava/lang/Object; <- v17:[L
+  java/lang/Object;
+  Blort.java:12@0013: if-eqz-object . <- v18:[Ljava/lang/Object;
+  next 0016 *
+  next 00a9
+  live out:{15, 17, 62}
+block 0016
+  pred 000d
+  live in:{15, 17, 62}
+  Blort.java:13@0016: get-static-object(java.lang.System.out:Ljava/io/PrintStre
+  am; catch) . <- .
+  next 0093
+  live out:{15, 17, 62}
+block 0019
+  pred 0093
+  live in:{15, 17, 19, 62}
+  Blort.java:13@0019: const-object("foo" catch) . <- .
+  next 0094
+  live out:{15, 17, 19, 62}
+block 001b
+  pred 0094
+  live in:{15, 17, 19, 20, 62}
+  Blort.java:13@001b: Rop{invoke-virtual . <- Ljava/io/PrintStream; Ljava/lang/
+  String; call throws <any>}(java.io.PrintStream.println:(Ljava/lang/String;)V 
+  catch) . <- v19:Ljava/io/PrintStream; v20:Ljava/lang/String;="foo"
+  next 00a8
+  live out:{15, 17, 62}
+block 001e
+  pred 00a8
+  pred 00a9
+  live in:{15, 17, 62}
+  Blort.java:17@001e: const-int(0) v23:I=0 <- .
+  @????: mark-local-int . <- v23:"i"I
+  Blort.java:17@001f: goto . <- .
+  next 0021
+  live out:{15, 17, 23, 62}
+block 0021
+  pred 001e
+  pred 0038
+  live in:{15, 17, 62}
+  @????: phi v30:"i"I <- v23:"i"I[b=001e] v34:"i"I[b=0038]
+  Blort.java:17@0024: array-length(catch) . <- v15:[Ljava/lang/String;
+  next 0095
+  live out:{15, 17, 30, 62}
+block 0025
+  pred 0095
+  live in:{15, 17, 30, 31, 62}
+  Blort.java:17@0025: if-ge-int . <- v30:I v31:I
+  next 0028 *
+  next 003e
+  live out:{15, 17, 30, 62}
+block 0028
+  pred 0025
+  live in:{15, 17, 30, 62}
+  Blort.java:18@002b: new-instance(java.lang.String catch) . <- .
+  next 0096
+  live out:{15, 17, 30, 62}
+block 002e
+  pred 0096
+  live in:{15, 17, 30, 32, 62}
+  Blort.java:18@0031: Rop{invoke-static . <- I call throws <any>}(java.lang.Int
+  eger.toString:(I)Ljava/lang/String; catch) . <- v30:I
+  next 0097
+  live out:{15, 17, 30, 32, 62}
+block 0034
+  pred 0097
+  live in:{15, 17, 30, 32, 33, 62}
+  Blort.java:18@0034: Rop{invoke-direct . <- Ljava/lang/String; Ljava/lang/Stri
+  ng; call throws <any>}(java.lang.String.<init>:(Ljava/lang/String;)V catch) .
+   <- v32:N002bLjava/lang/String; v33:Ljava/lang/String;
+  next 0037
+  live out:{15, 17, 30, 32, 62}
+block 0037
+  pred 0034
+  live in:{15, 17, 30, 32, 62}
+  Blort.java:18@0037: aput-object(catch) . <- v32:Ljava/lang/String; v15:[Ljava
+  /lang/String; v30:I
+  next 0038
+  live out:{15, 17, 30, 62}
+block 0038
+  pred 0037
+  live in:{15, 17, 30, 62}
+  Blort.java:17@0038: add-const-int(1) v34:"i"I <- v30:I
+  Blort.java:17@003b: goto . <- .
+  next 0021
+  live out:{15, 17, 34, 62}
+block 003e
+  pred 0025
+  live in:{15, 17, 62}
+  Blort.java:20@003e: get-static-object(java.lang.System.out:Ljava/io/PrintStre
+  am; catch) . <- .
+  next 0098
+  live out:{15, 17, 62}
+block 0041
+  pred 0098
+  live in:{15, 17, 35, 62}
+  Blort.java:20@0041: const-object("string -> object" catch) . <- .
+  next 0099
+  live out:{15, 17, 35, 62}
+block 0043
+  pred 0099
+  live in:{15, 17, 35, 36, 62}
+  Blort.java:20@0043: Rop{invoke-virtual . <- Ljava/io/PrintStream; Ljava/lang/
+  String; call throws <any>}(java.io.PrintStream.println:(Ljava/lang/String;)V 
+  catch) . <- v35:Ljava/io/PrintStream; v36:Ljava/lang/String;="string -> objec
+  t"
+  next 0046
+  live out:{15, 17, 62}
+block 0046
+  pred 0043
+  live in:{15, 17, 62}
+  Blort.java:21@004b: array-length(catch) . <- v15:[Ljava/lang/String;
+  next 009a
+  live out:{15, 17, 62}
+block 004c
+  pred 009a
+  live in:{15, 17, 39, 62}
+  Blort.java:21@004c: Rop{invoke-static . <- Ljava/lang/Object; I Ljava/lang/Ob
+  ject; I I call throws <any>}(java.lang.System.arraycopy:(Ljava/lang/Object;IL
+  java/lang/Object;II)V catch) . <- v15:[Ljava/lang/String; v62:I=0 v17:[Ljava/
+  lang/Object; v62:I=0 v39:I
+  next 004f
+  live out:{15, 17, 62}
+block 004f
+  pred 004c
+  live in:{15, 17, 62}
+  Blort.java:22@004f: get-static-object(java.lang.System.out:Ljava/io/PrintStre
+  am; catch) . <- .
+  next 009b
+  live out:{15, 17, 62}
+block 0052
+  pred 009b
+  live in:{15, 17, 40, 62}
+  Blort.java:22@0052: const-object("object -> string" catch) . <- .
+  next 009c
+  live out:{15, 17, 40, 62}
+block 0054
+  pred 009c
+  live in:{15, 17, 40, 41, 62}
+  Blort.java:22@0054: Rop{invoke-virtual . <- Ljava/io/PrintStream; Ljava/lang/
+  String; call throws <any>}(java.io.PrintStream.println:(Ljava/lang/String;)V 
+  catch) . <- v40:Ljava/io/PrintStream; v41:Ljava/lang/String;="object -> strin
+  g"
+  next 0057
+  live out:{15, 17, 62}
+block 0057
+  pred 0054
+  live in:{15, 17, 62}
+  Blort.java:23@005c: array-length(catch) . <- v15:[Ljava/lang/String;
+  next 009d
+  live out:{15, 17, 62}
+block 005d
+  pred 009d
+  live in:{15, 17, 44, 62}
+  Blort.java:23@005d: Rop{invoke-static . <- Ljava/lang/Object; I Ljava/lang/Ob
+  ject; I I call throws <any>}(java.lang.System.arraycopy:(Ljava/lang/Object;IL
+  java/lang/Object;II)V catch) . <- v17:[Ljava/lang/Object; v62:I=0 v15:[Ljava/
+  lang/String; v62:I=0 v44:I
+  next 0060
+  live out:{15, 17}
+block 0060
+  pred 005d
+  live in:{15, 17}
+  Blort.java:24@0060: get-static-object(java.lang.System.out:Ljava/io/PrintStre
+  am; catch) . <- .
+  next 009e
+  live out:{15, 17}
+block 0063
+  pred 009e
+  live in:{15, 17, 45}
+  Blort.java:24@0063: const-object("object -> string (modified)" catch) . <- .
+  next 009f
+  live out:{15, 17, 45}
+block 0065
+  pred 009f
+  live in:{15, 17, 45, 46}
+  Blort.java:24@0065: Rop{invoke-virtual . <- Ljava/io/PrintStream; Ljava/lang/
+  String; call throws <any>}(java.io.PrintStream.println:(Ljava/lang/String;)V 
+  catch) . <- v45:Ljava/io/PrintStream; v46:Ljava/lang/String;="object -> strin
+  g (modified)"
+  next 0068
+  live out:{15, 17}
+block 0068
+  pred 0065
+  live in:{15, 17}
+  Blort.java:25@0069: const-int(4) v47:I=4 <- .
+  Blort.java:25@006a: new-instance(java.lang.Object catch) . <- .
+  next 00a0
+  live out:{15, 17, 47}
+block 006d
+  pred 00a0
+  live in:{15, 17, 47, 48}
+  Blort.java:25@006e: Rop{invoke-direct . <- Ljava/lang/Object; call throws <an
+  y>}(java.lang.Object.<init>:()V catch) . <- v48:N006aLjava/lang/Object;
+  next 0071
+  live out:{15, 17, 47, 48}
+block 0071
+  pred 006d
+  live in:{15, 17, 47, 48}
+  Blort.java:25@0071: aput-object(catch) . <- v48:Ljava/lang/Object; v17:[Ljava
+  /lang/Object; v47:I=4
+  next 0072
+  live out:{15, 17}
+block 0072
+  pred 0071
+  live in:{15, 17}
+  Blort.java:27@0073: const-int(0) v49:I=0 <- .
+  Blort.java:27@0075: const-int(0) v50:I=0 <- .
+  Blort.java:27@0077: array-length(catch java.lang.ArrayStoreException) . <- v1
+  5:[Ljava/lang/String;
+  next 00a5
+  next 00a1 *
+  live out:{15, 17, 49, 50}
+block 0078
+  pred 00a1
+  live in:{15, 17, 49, 50, 51}
+  Blort.java:27@0078: Rop{invoke-static . <- Ljava/lang/Object; I Ljava/lang/Ob
+  ject; I I call throws <any>}(java.lang.System.arraycopy:(Ljava/lang/Object;IL
+  java/lang/Object;II)V catch java.lang.ArrayStoreException) . <- v17:[Ljava/la
+  ng/Object; v49:I=0 v15:[Ljava/lang/String; v50:I=0 v51:I
+  next 00a6
+  next 007b *
+  live out:{}
+block 007b
+  pred 0078
+  live in:{}
+  Blort.java:31@007b: goto . <- .
+  next 0088
+  live out:{}
+block 007e
+  pred 0089
+  live in:{58}
+  @????: mark-local-object . <- v58:"ase"Ljava/lang/ArrayStoreException;
+  Blort.java:30@0080: get-static-object(java.lang.System.out:Ljava/io/PrintStre
+  am; catch) . <- .
+  next 00a2
+  live out:{}
+block 0083
+  pred 00a2
+  live in:{59}
+  Blort.java:30@0083: const-object("caught ArrayStoreException (expected)" catc
+  h) . <- .
+  next 00a3
+  live out:{59}
+block 0085
+  pred 00a3
+  live in:{59, 60}
+  Blort.java:30@0085: Rop{invoke-virtual . <- Ljava/io/PrintStream; Ljava/lang/
+  String; call throws <any>}(java.io.PrintStream.println:(Ljava/lang/String;)V 
+  catch) . <- v59:Ljava/io/PrintStream; v60:Ljava/lang/String;="caught ArraySto
+  reException (expected)"
+  next 00a7
+  live out:{}
+block 0088
+  pred 007b
+  pred 00a7
+  live in:{}
+  Blort.java:32@0088: goto . <- .
+  next 008b
+  live out:{}
+block 0089
+  pred 00a5
+  pred 00a6
+  live in:{}
+  @????: phi v58:Ljava/lang/ArrayStoreException; <- v52:Ljava/lang/ArrayStoreEx
+  ception;[b=00a6] v61:Ljava/lang/ArrayStoreException;[b=00a5]
+  Blort.java:28@007e: goto . <- .
+  next 007e
+  live out:{58}
+block 008a
+  pred 00a4
+  live in:{62, 63}
+  Blort.java:5@0000: move-param-int(0) v12:"k"I <- .
+  Blort.java:5@0000: goto . <- .
+  next 0000
+  live out:{12, 62, 63}
+block 008b
+  pred 0088
+  live in:{}
+  Blort.java:32@0088: return-void . <- .
+  next 00aa
+  live out:{}
+block 0091
+  pred 0000
+  live in:{62, 63}
+  Blort.java:7@0004: Rop{move-result-pseudo [Ljava/lang/String; <- . flows} v15
+  :[Ljava/lang/String; <- .
+  Blort.java:7@0004: goto . <- .
+  next 0007
+  live out:{15, 62, 63}
+block 0092
+  pred 0007
+  live in:{15, 62}
+  Blort.java:8@000a: Rop{move-result-pseudo [Ljava/lang/Object; <- . flows} v17
+  :[Ljava/lang/Object; <- .
+  Blort.java:8@000a: goto . <- .
+  next 000d
+  live out:{15, 17, 62}
+block 0093
+  pred 0016
+  live in:{15, 17, 62}
+  Blort.java:13@0016: Rop{move-result-pseudo Ljava/io/PrintStream; <- . flows} 
+  v19:Ljava/io/PrintStream; <- .
+  Blort.java:13@0016: goto . <- .
+  next 0019
+  live out:{15, 17, 19, 62}
+block 0094
+  pred 0019
+  live in:{15, 17, 19, 62}
+  Blort.java:13@0019: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v20
+  :Ljava/lang/String;="foo" <- .
+  Blort.java:13@0019: goto . <- .
+  next 001b
+  live out:{15, 17, 19, 20, 62}
+block 0095
+  pred 0021
+  live in:{15, 17, 30, 62}
+  Blort.java:17@0024: Rop{move-result-pseudo I <- . flows} v31:I <- .
+  Blort.java:17@0024: goto . <- .
+  next 0025
+  live out:{15, 17, 30, 31, 62}
+block 0096
+  pred 0028
+  live in:{15, 17, 30, 62}
+  Blort.java:18@002b: Rop{move-result-pseudo N002bLjava/lang/String; <- . flows
+  } v32:N002bLjava/lang/String; <- .
+  Blort.java:18@002b: goto . <- .
+  next 002e
+  live out:{15, 17, 30, 32, 62}
+block 0097
+  pred 002e
+  live in:{15, 17, 30, 32, 62}
+  Blort.java:18@0031: Rop{move-result Ljava/lang/String; <- . flows} v33:Ljava/
+  lang/String; <- .
+  Blort.java:18@0031: goto . <- .
+  next 0034
+  live out:{15, 17, 30, 32, 33, 62}
+block 0098
+  pred 003e
+  live in:{15, 17, 62}
+  Blort.java:20@003e: Rop{move-result-pseudo Ljava/io/PrintStream; <- . flows} 
+  v35:Ljava/io/PrintStream; <- .
+  Blort.java:20@003e: goto . <- .
+  next 0041
+  live out:{15, 17, 35, 62}
+block 0099
+  pred 0041
+  live in:{15, 17, 35, 62}
+  Blort.java:20@0041: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v36
+  :Ljava/lang/String;="string -> object" <- .
+  Blort.java:20@0041: goto . <- .
+  next 0043
+  live out:{15, 17, 35, 36, 62}
+block 009a
+  pred 0046
+  live in:{15, 17, 62}
+  Blort.java:21@004b: Rop{move-result-pseudo I <- . flows} v39:I <- .
+  Blort.java:21@004b: goto . <- .
+  next 004c
+  live out:{15, 17, 39, 62}
+block 009b
+  pred 004f
+  live in:{15, 17, 62}
+  Blort.java:22@004f: Rop{move-result-pseudo Ljava/io/PrintStream; <- . flows} 
+  v40:Ljava/io/PrintStream; <- .
+  Blort.java:22@004f: goto . <- .
+  next 0052
+  live out:{15, 17, 40, 62}
+block 009c
+  pred 0052
+  live in:{15, 17, 40, 62}
+  Blort.java:22@0052: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v41
+  :Ljava/lang/String;="object -> string" <- .
+  Blort.java:22@0052: goto . <- .
+  next 0054
+  live out:{15, 17, 40, 41, 62}
+block 009d
+  pred 0057
+  live in:{15, 17, 62}
+  Blort.java:23@005c: Rop{move-result-pseudo I <- . flows} v44:I <- .
+  Blort.java:23@005c: goto . <- .
+  next 005d
+  live out:{15, 17, 44, 62}
+block 009e
+  pred 0060
+  live in:{15, 17}
+  Blort.java:24@0060: Rop{move-result-pseudo Ljava/io/PrintStream; <- . flows} 
+  v45:Ljava/io/PrintStream; <- .
+  Blort.java:24@0060: goto . <- .
+  next 0063
+  live out:{15, 17, 45}
+block 009f
+  pred 0063
+  live in:{15, 17, 45}
+  Blort.java:24@0063: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v46
+  :Ljava/lang/String;="object -> string (modified)" <- .
+  Blort.java:24@0063: goto . <- .
+  next 0065
+  live out:{15, 17, 45, 46}
+block 00a0
+  pred 0068
+  live in:{15, 17, 47}
+  Blort.java:25@006a: Rop{move-result-pseudo N006aLjava/lang/Object; <- . flows
+  } v48:N006aLjava/lang/Object; <- .
+  Blort.java:25@006a: goto . <- .
+  next 006d
+  live out:{15, 17, 47, 48}
+block 00a1
+  pred 0072
+  live in:{15, 17, 49, 50}
+  Blort.java:27@0077: Rop{move-result-pseudo I <- . flows} v51:I <- .
+  Blort.java:27@0077: goto . <- .
+  next 0078
+  live out:{15, 17, 49, 50, 51}
+block 00a2
+  pred 007e
+  live in:{}
+  Blort.java:30@0080: Rop{move-result-pseudo Ljava/io/PrintStream; <- . flows} 
+  v59:Ljava/io/PrintStream; <- .
+  Blort.java:30@0080: goto . <- .
+  next 0083
+  live out:{59}
+block 00a3
+  pred 0083
+  live in:{59}
+  Blort.java:30@0083: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v60
+  :Ljava/lang/String;="caught ArrayStoreException (expected)" <- .
+  Blort.java:30@0083: goto . <- .
+  next 0085
+  live out:{59, 60}
+block 00a4
+  live in:{}
+  @????: const-int(8) v63:I=8 <- .
+  @????: const-int(0) v62:I=0 <- .
+  @????: goto . <- .
+  next 008a
+  live out:{62, 63}
+block 00a5
+  pred 0072
+  live in:{}
+  Blort.java:28@007e: Rop{move-exception Ljava/lang/ArrayStoreException; <- . f
+  lows} v61:Ljava/lang/ArrayStoreException; <- .
+  @????: goto . <- .
+  next 0089
+  live out:{61}
+block 00a6
+  pred 0078
+  live in:{}
+  Blort.java:28@007e: Rop{move-exception Ljava/lang/ArrayStoreException; <- . f
+  lows} v52:Ljava/lang/ArrayStoreException; <- .
+  @????: goto . <- .
+  next 0089
+  live out:{52}
+block 00a7
+  pred 0085
+  live in:{}
+  @????: goto . <- .
+  next 0088
+  live out:{}
+block 00a8
+  pred 001b
+  live in:{15, 17, 62}
+  @????: goto . <- .
+  next 001e
+  live out:{15, 17, 62}
+block 00a9
+  pred 000d
+  live in:{15, 17, 62}
+  @????: goto . <- .
+  next 001e
+  live out:{15, 17, 62}
+block 00aa
+  pred 008b
+  live in:{}
+  returns
+  live out:{}
+
+method testConstructor ()V
+first 0020
+block 0000
+  pred 0017
+  live in:{}
+  Blort.java:35@0000: const-object-nothrow(null) v7:<null>=null <- .
+  @????: mark-local-object . <- v7:"foo"LBlort;
+  Blort.java:35@0001: goto . <- .
+  next 0002
+  live out:{7}
+block 0002
+  pred 0000
+  live in:{7}
+  Blort.java:37@0002: new-instance(Blort catch java.lang.Exception) . <- .
+  next 0021
+  next 001e *
+  live out:{7}
+block 0005
+  pred 001e
+  live in:{7, 8}
+  Blort.java:37@0006: Rop{invoke-direct . <- LBlort; call throws <any>}(Blort.<
+  init>:()V catch java.lang.Exception) . <- v8:N0002LBlort;
+  next 0022
+  next 0009 *
+  live out:{7, 8}
+block 0009
+  pred 0005
+  live in:{8}
+  @????: mark-local-object . <- v8:"foo"LBlort;
+  Blort.java:37@0009: goto . <- .
+  next 000a
+  live out:{8}
+block 000a
+  pred 0009
+  live in:{8}
+  Blort.java:39@000a: goto . <- .
+  next 000e
+  live out:{8}
+block 000d
+  pred 0016
+  live in:{7}
+  Blort.java:38@000d: goto . <- .
+  next 000e
+  live out:{7}
+block 000e
+  pred 000a
+  pred 000d
+  live in:{}
+  @????: phi v14:"foo"LBlort; <- v8:"foo"LBlort;[b=000a] v7:"foo"LBlort;[b=000d
+  ]
+  Blort.java:40@000e: get-static-object(java.lang.System.err:Ljava/io/PrintStre
+  am; catch) . <- .
+  next 001f
+  live out:{14}
+block 0011
+  pred 001f
+  live in:{14, 15}
+  Blort.java:40@0012: Rop{invoke-virtual . <- Ljava/io/PrintStream; Ljava/lang/
+  Object; call throws <any>}(java.io.PrintStream.println:(Ljava/lang/Object;)V 
+  catch) . <- v15:Ljava/io/PrintStream; v14:LBlort;
+  next 0015
+  live out:{}
+block 0015
+  pred 0011
+  live in:{}
+  Blort.java:41@0015: goto . <- .
+  next 0018
+  live out:{}
+block 0016
+  pred 0021
+  pred 0022
+  live in:{7}
+  Blort.java:38@000d: goto . <- .
+  next 000d
+  live out:{7}
+block 0017
+  pred 0020
+  live in:{}
+  Blort.java:35@0000: move-param-object(0) v6:"this"LBlort; <- .
+  Blort.java:35@0000: goto . <- .
+  next 0000
+  live out:{}
+block 0018
+  pred 0015
+  live in:{}
+  Blort.java:41@0015: return-void . <- .
+  next 0023
+  live out:{}
+block 001e
+  pred 0002
+  live in:{7}
+  Blort.java:37@0002: Rop{move-result-pseudo N0002LBlort; <- . flows} v8:N0002L
+  Blort; <- .
+  Blort.java:37@0002: goto . <- .
+  next 0005
+  live out:{7, 8}
+block 001f
+  pred 000e
+  live in:{14}
+  Blort.java:40@000e: Rop{move-result-pseudo Ljava/io/PrintStream; <- . flows} 
+  v15:Ljava/io/PrintStream; <- .
+  Blort.java:40@000e: goto . <- .
+  next 0011
+  live out:{14, 15}
+block 0020
+  live in:{}
+  @????: goto . <- .
+  next 0017
+  live out:{}
+block 0021
+  pred 0002
+  live in:{7}
+  Blort.java:38@000d: Rop{move-exception Ljava/lang/Exception; <- . flows} v19:
+  Ljava/lang/Exception; <- .
+  @????: goto . <- .
+  next 0016
+  live out:{7}
+block 0022
+  pred 0005
+  live in:{7}
+  Blort.java:38@000d: Rop{move-exception Ljava/lang/Exception; <- . flows} v9:L
+  java/lang/Exception; <- .
+  @????: goto . <- .
+  next 0016
+  live out:{7}
+block 0023
+  pred 0018
+  live in:{}
+  returns
+  live out:{}
+
+method parseHeaderGroup (Ljava/lang/Object;Ljava/lang/Object;II)V
+first 00ef
+block 0000
+  pred 00d7
+  live in:{16, 17, 18, 99, 100, 101}
+  Blort.java:57@0000: const-object-nothrow(null) v19:<null>=null <- .
+  @????: mark-local-object . <- v19:"current"Ljava/lang/StringBuilder;
+  Blort.java:58@0003: const-object-nothrow(null) v20:<null>=null <- .
+  @????: mark-local-object . <- v20:"previous"Ljava/lang/StringBuilder;
+  Blort.java:58@0004: goto . <- .
+  next 00f3
+  live out:{16, 17, 18, 19, 20, 99, 100, 101}
+block 0006
+  pred 00f3
+  live in:{16, 17, 18, 30, 31, 99, 100, 101}
+  Blort.java:60@0008: if-nez-object . <- v31:Ljava/lang/StringBuilder;
+  next 000b *
+  next 0019
+  live out:{16, 17, 18, 30, 31, 99, 100, 101}
+block 000b
+  pred 0006
+  live in:{16, 17, 18, 30, 99, 100, 101}
+  Blort.java:61@000b: new-instance(java.lang.StringBuilder catch) . <- .
+  next 00de
+  live out:{16, 17, 18, 30, 99, 100, 101}
+block 000e
+  pred 00de
+  live in:{16, 17, 18, 30, 32, 99, 100, 101}
+  Blort.java:61@000f: const-int(64) v33:I=64 <- .
+  Blort.java:61@0011: Rop{invoke-direct . <- Ljava/lang/StringBuilder; I call t
+  hrows <any>}(java.lang.StringBuilder.<init>:(I)V catch) . <- v32:N000bLjava/l
+  ang/StringBuilder; v33:I=64
+  next 0014
+  live out:{16, 17, 18, 30, 32, 99, 100, 101}
+block 0014
+  pred 000e
+  live in:{16, 17, 18, 30, 32, 99, 100, 101}
+  @????: mark-local-object . <- v32:"current"Ljava/lang/StringBuilder;
+  Blort.java:61@0016: goto . <- .
+  next 001f
+  live out:{16, 17, 18, 30, 32, 99, 100, 101}
+block 0019
+  pred 0006
+  live in:{16, 17, 18, 30, 31, 99, 100, 101}
+  Blort.java:63@001b: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; call th
+  rows <any>}(java.lang.StringBuilder.length:()I catch) . <- v31:Ljava/lang/Str
+  ingBuilder;
+  next 00df
+  live out:{16, 17, 18, 30, 31, 99, 100, 101}
+block 001e
+  pred 00df
+  live in:{16, 17, 18, 30, 31, 99, 100, 101}
+  @????: goto . <- .
+  next 001f
+  live out:{16, 17, 18, 30, 31, 99, 100, 101}
+block 001f
+  pred 0014
+  pred 001e
+  live in:{16, 17, 18, 30, 99, 100, 101}
+  @????: phi v39:"current"Ljava/lang/StringBuilder; <- v32:"current"Ljava/lang/
+  StringBuilder;[b=0014] v31:"current"Ljava/lang/StringBuilder;[b=001e]
+  Blort.java:65@0020: Rop{invoke-virtual . <- Ljava/lang/Object; call throws <a
+  ny>}(java.lang.Object.hashCode:()I catch) . <- v16:Ljava/lang/Object;
+  next 00e0
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 0023
+  pred 00e0
+  live in:{16, 17, 18, 30, 39, 40, 99, 100, 101}
+  @????: mark-local-int . <- v40:"l"I
+  Blort.java:66@0027: const-int(-1) v41:I=-1 <- .
+  Blort.java:66@0028: if-eq-int . <- v40:I v41:I=-1
+  next 002b *
+  next 00fd
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 002b
+  pred 0023
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:66@002d: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; call th
+  rows <any>}(java.lang.StringBuilder.length:()I catch) . <- v39:Ljava/lang/Str
+  ingBuilder;
+  next 00e1
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 0030
+  pred 00e1
+  live in:{16, 17, 18, 30, 39, 42, 99, 100, 101}
+  Blort.java:66@0030: const-int(1) v43:I=1 <- .
+  Blort.java:66@0031: if-ge-int . <- v42:I v43:I=1
+  next 0034 *
+  next 0037
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 0034
+  pred 0030
+  live in:{}
+  Blort.java:67@0034: goto . <- .
+  next 00d6
+  live out:{}
+block 0037
+  pred 0030
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:70@003a: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; I call 
+  throws <any>}(java.lang.StringBuilder.charAt:(I)C catch) . <- v39:Ljava/lang/
+  StringBuilder; v100:I=0
+  next 00e2
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 003d
+  pred 00e2
+  live in:{16, 17, 18, 30, 39, 45, 99, 100, 101}
+  Blort.java:70@003f: if-eq-int . <- v45:I v99:I=32
+  next 0042 *
+  next 00fc
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 0042
+  pred 003d
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:70@0045: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; I call 
+  throws <any>}(java.lang.StringBuilder.charAt:(I)C catch) . <- v39:Ljava/lang/
+  StringBuilder; v100:I=0
+  next 00e3
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 0048
+  pred 00e3
+  live in:{16, 17, 18, 30, 39, 48, 99, 100, 101}
+  Blort.java:70@004a: if-ne-int . <- v48:I v101:I=9
+  next 00fb *
+  next 00fa
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 004d
+  pred 00f2
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:70@004f: if-eqz-object . <- v30:Ljava/lang/StringBuilder;
+  next 0052 *
+  next 00f9
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 0052
+  pred 004d
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:71@0052: const-int(0) v67:I=0 <- .
+  @????: mark-local-int . <- v67:"i"I
+  Blort.java:71@0053: goto . <- .
+  next 0055
+  live out:{16, 17, 18, 30, 39, 67, 99, 100, 101}
+block 0055
+  pred 0052
+  pred 0079
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  @????: phi v71:"i"I <- v67:"i"I[b=0052] v78:"i"I[b=0079]
+  Blort.java:72@0059: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; call th
+  rows <any>}(java.lang.StringBuilder.length:()I catch) . <- v39:Ljava/lang/Str
+  ingBuilder;
+  next 00e4
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 005c
+  pred 00e4
+  live in:{16, 17, 18, 30, 39, 71, 72, 99, 100, 101}
+  Blort.java:72@005c: if-ge-int . <- v71:I v72:I
+  next 005f *
+  next 00f8
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 005f
+  pred 005c
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:73@0063: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; I call 
+  throws <any>}(java.lang.StringBuilder.charAt:(I)C catch) . <- v39:Ljava/lang/
+  StringBuilder; v71:I
+  next 00e5
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 0066
+  pred 00e5
+  live in:{16, 17, 18, 30, 39, 71, 73, 99, 100, 101}
+  @????: mark-local-int . <- v73:"ch"C
+  Blort.java:74@006c: if-eq-int . <- v73:I v99:I=32
+  next 006f *
+  next 00f7
+  live out:{16, 17, 18, 30, 39, 71, 73, 99, 100, 101}
+block 006f
+  pred 0066
+  live in:{16, 17, 18, 30, 39, 71, 73, 99, 100, 101}
+  Blort.java:74@0073: if-eq-int . <- v73:I v101:I=9
+  next 0076 *
+  next 00f6
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 0076
+  pred 006f
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:75@0076: goto . <- .
+  next 00f1
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 0079
+  pred 00f6
+  pred 00f7
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:77@0079: add-const-int(1) v78:"i"I <- v71:I
+  Blort.java:78@007c: goto . <- .
+  next 0055
+  live out:{16, 17, 18, 30, 39, 78, 99, 100, 101}
+block 007f
+  pred 00f1
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:79@0080: if-lez-int . <- v18:I
+  next 0083 *
+  next 00f5
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 0083
+  pred 007f
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:80@0085: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; call th
+  rows <any>}(java.lang.StringBuilder.length:()I catch) . <- v30:Ljava/lang/Str
+  ingBuilder;
+  next 00e6
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 0088
+  pred 00e6
+  live in:{16, 17, 18, 30, 39, 71, 82, 99, 100, 101}
+  Blort.java:80@0089: add-const-int(1) v84:I <- v82:I
+  Blort.java:80@008c: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; call th
+  rows <any>}(java.lang.StringBuilder.length:()I catch) . <- v39:Ljava/lang/Str
+  ingBuilder;
+  next 00e7
+  live out:{16, 17, 18, 30, 39, 71, 84, 99, 100, 101}
+block 008f
+  pred 00e7
+  live in:{16, 17, 18, 30, 39, 71, 84, 85, 99, 100, 101}
+  Blort.java:80@008f: add-int v86:I <- v84:I v85:I
+  Blort.java:80@0092: sub-int v87:I <- v86:I v71:I
+  Blort.java:80@0094: if-le-int . <- v87:I v18:I
+  next 0097 *
+  next 00f4
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 0097
+  pred 008f
+  live in:{}
+  Blort.java:81@0097: new-instance(java.io.IOException catch) . <- .
+  next 00e8
+  live out:{}
+block 009a
+  pred 00e8
+  live in:{88}
+  Blort.java:81@009b: const-object("Maximum line length limit exceeded" catch) 
+  . <- .
+  next 00e9
+  live out:{88}
+block 009d
+  pred 00e9
+  live in:{88, 89}
+  Blort.java:81@009d: Rop{invoke-direct . <- Ljava/io/IOException; Ljava/lang/S
+  tring; call throws <any>}(java.io.IOException.<init>:(Ljava/lang/String;)V ca
+  tch) . <- v88:N0097Ljava/io/IOException; v89:Ljava/lang/String;="Maximum line
+   length limit exceeded"
+  next 00a0
+  live out:{88}
+block 00a0
+  pred 009d
+  live in:{88}
+  Blort.java:81@00a0: throw(catch) . <- v88:Ljava/io/IOException;
+  next 00fe
+  live out:{}
+block 00a1
+  pred 00f4
+  pred 00f5
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:83@00a5: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; I call 
+  throws <any>}(java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder; cat
+  ch) . <- v30:Ljava/lang/StringBuilder; v99:I=32
+  next 00ea
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00a8
+  pred 00ea
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:84@00b1: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; call th
+  rows <any>}(java.lang.StringBuilder.length:()I catch) . <- v39:Ljava/lang/Str
+  ingBuilder;
+  next 00eb
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00b4
+  pred 00eb
+  live in:{16, 17, 18, 30, 39, 71, 94, 99, 100, 101}
+  Blort.java:84@00b6: sub-int v95:I <- v94:I v71:I
+  Blort.java:84@00b7: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/CharSequence; I I call throws <any>}(java.lang.StringBuilder.append:(Ljav
+  a/lang/CharSequence;II)Ljava/lang/StringBuilder; catch) . <- v30:Ljava/lang/S
+  tringBuilder; v39:Ljava/lang/StringBuilder; v71:I v95:I
+  next 00ec
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 00ba
+  pred 00ec
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:85@00bb: goto . <- .
+  next 00f0
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 00be
+  pred 00f9
+  pred 00fa
+  live in:{16, 17, 18, 39, 99, 100, 101}
+  Blort.java:86@00c0: move-object v52:"previous"Ljava/lang/StringBuilder; <- v3
+  9:Ljava/lang/StringBuilder;
+  Blort.java:87@00c2: const-object-nothrow(null) v53:<null>=null <- .
+  @????: mark-local-object . <- v53:"current"Ljava/lang/StringBuilder;
+  Blort.java:87@00c3: goto . <- .
+  next 00f0
+  live out:{16, 17, 18, 52, 53, 99, 100, 101}
+block 00c5
+  pred 00f0
+  live in:{16, 17, 18, 61, 62, 99, 100, 101}
+  Blort.java:89@00c6: if-lez-int . <- v17:I
+  next 00c9 *
+  next 00d3
+  live out:{16, 17, 18, 61, 62, 99, 100, 101}
+block 00c9
+  pred 00c5
+  live in:{}
+  Blort.java:90@00c9: new-instance(java.io.IOException catch) . <- .
+  next 00ed
+  live out:{}
+block 00cc
+  pred 00ed
+  live in:{63}
+  Blort.java:90@00cd: const-object("Maximum header count exceeded" catch) . <- 
+  .
+  next 00ee
+  live out:{63}
+block 00cf
+  pred 00ee
+  live in:{63, 64}
+  Blort.java:90@00cf: Rop{invoke-direct . <- Ljava/io/IOException; Ljava/lang/S
+  tring; call throws <any>}(java.io.IOException.<init>:(Ljava/lang/String;)V ca
+  tch) . <- v63:N00c9Ljava/io/IOException; v64:Ljava/lang/String;="Maximum head
+  er count exceeded"
+  next 00d2
+  live out:{63}
+block 00d2
+  pred 00cf
+  live in:{63}
+  Blort.java:90@00d2: throw(catch) . <- v63:Ljava/io/IOException;
+  next 00fe
+  live out:{}
+block 00d3
+  pred 00c5
+  live in:{16, 17, 18, 61, 62, 99, 100, 101}
+  Blort.java:92@00d3: goto . <- .
+  next 00f3
+  live out:{16, 17, 18, 61, 62, 99, 100, 101}
+block 00d6
+  pred 0034
+  pred 00fd
+  live in:{}
+  Blort.java:93@00d6: goto . <- .
+  next 00d8
+  live out:{}
+block 00d7
+  pred 00ef
+  live in:{99, 100, 101}
+  Blort.java:57@0000: move-param-object(0) v15:"headGroup"Ljava/lang/Object; <-
+   .
+  Blort.java:57@0000: move-param-object(1) v16:"inbuffer"Ljava/lang/Object; <- 
+  .
+  Blort.java:57@0000: move-param-int(2) v17:"maxHeaderCount"I <- .
+  Blort.java:57@0000: move-param-int(3) v18:"maxLineLen"I <- .
+  Blort.java:57@0000: goto . <- .
+  next 0000
+  live out:{16, 17, 18, 99, 100, 101}
+block 00d8
+  pred 00d6
+  live in:{}
+  Blort.java:93@00d6: return-void . <- .
+  next 00fe
+  live out:{}
+block 00de
+  pred 000b
+  live in:{16, 17, 18, 30, 99, 100, 101}
+  Blort.java:61@000b: Rop{move-result-pseudo N000bLjava/lang/StringBuilder; <- 
+  . flows} v32:N000bLjava/lang/StringBuilder; <- .
+  Blort.java:61@000b: goto . <- .
+  next 000e
+  live out:{16, 17, 18, 30, 32, 99, 100, 101}
+block 00df
+  pred 0019
+  live in:{16, 17, 18, 30, 31, 99, 100, 101}
+  Blort.java:63@001b: goto . <- .
+  next 001e
+  live out:{16, 17, 18, 30, 31, 99, 100, 101}
+block 00e0
+  pred 001f
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:65@0020: Rop{move-result I <- . flows} v40:I <- .
+  Blort.java:65@0020: goto . <- .
+  next 0023
+  live out:{16, 17, 18, 30, 39, 40, 99, 100, 101}
+block 00e1
+  pred 002b
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:66@002d: Rop{move-result I <- . flows} v42:I <- .
+  Blort.java:66@002d: goto . <- .
+  next 0030
+  live out:{16, 17, 18, 30, 39, 42, 99, 100, 101}
+block 00e2
+  pred 0037
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:70@003a: Rop{move-result C <- . flows} v45:C <- .
+  Blort.java:70@003a: goto . <- .
+  next 003d
+  live out:{16, 17, 18, 30, 39, 45, 99, 100, 101}
+block 00e3
+  pred 0042
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:70@0045: Rop{move-result C <- . flows} v48:C <- .
+  Blort.java:70@0045: goto . <- .
+  next 0048
+  live out:{16, 17, 18, 30, 39, 48, 99, 100, 101}
+block 00e4
+  pred 0055
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:72@0059: Rop{move-result I <- . flows} v72:I <- .
+  Blort.java:72@0059: goto . <- .
+  next 005c
+  live out:{16, 17, 18, 30, 39, 71, 72, 99, 100, 101}
+block 00e5
+  pred 005f
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:73@0063: Rop{move-result C <- . flows} v73:C <- .
+  Blort.java:73@0063: goto . <- .
+  next 0066
+  live out:{16, 17, 18, 30, 39, 71, 73, 99, 100, 101}
+block 00e6
+  pred 0083
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:80@0085: Rop{move-result I <- . flows} v82:I <- .
+  Blort.java:80@0085: goto . <- .
+  next 0088
+  live out:{16, 17, 18, 30, 39, 71, 82, 99, 100, 101}
+block 00e7
+  pred 0088
+  live in:{16, 17, 18, 30, 39, 71, 84, 99, 100, 101}
+  Blort.java:80@008c: Rop{move-result I <- . flows} v85:I <- .
+  Blort.java:80@008c: goto . <- .
+  next 008f
+  live out:{16, 17, 18, 30, 39, 71, 84, 85, 99, 100, 101}
+block 00e8
+  pred 0097
+  live in:{}
+  Blort.java:81@0097: Rop{move-result-pseudo N0097Ljava/io/IOException; <- . fl
+  ows} v88:N0097Ljava/io/IOException; <- .
+  Blort.java:81@0097: goto . <- .
+  next 009a
+  live out:{88}
+block 00e9
+  pred 009a
+  live in:{88}
+  Blort.java:81@009b: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v89
+  :Ljava/lang/String;="Maximum line length limit exceeded" <- .
+  Blort.java:81@009b: goto . <- .
+  next 009d
+  live out:{88, 89}
+block 00ea
+  pred 00a1
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:83@00a5: goto . <- .
+  next 00a8
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00eb
+  pred 00a8
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  Blort.java:84@00b1: Rop{move-result I <- . flows} v94:I <- .
+  Blort.java:84@00b1: goto . <- .
+  next 00b4
+  live out:{16, 17, 18, 30, 39, 71, 94, 99, 100, 101}
+block 00ec
+  pred 00b4
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  Blort.java:84@00b7: goto . <- .
+  next 00ba
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 00ed
+  pred 00c9
+  live in:{}
+  Blort.java:90@00c9: Rop{move-result-pseudo N00c9Ljava/io/IOException; <- . fl
+  ows} v63:N00c9Ljava/io/IOException; <- .
+  Blort.java:90@00c9: goto . <- .
+  next 00cc
+  live out:{63}
+block 00ee
+  pred 00cc
+  live in:{63}
+  Blort.java:90@00cd: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v64
+  :Ljava/lang/String;="Maximum header count exceeded" <- .
+  Blort.java:90@00cd: goto . <- .
+  next 00cf
+  live out:{63, 64}
+block 00ef
+  live in:{}
+  @????: const-int(9) v101:I=9 <- .
+  @????: const-int(0) v100:I=0 <- .
+  @????: const-int(32) v99:I=32 <- .
+  @????: goto . <- .
+  next 00d7
+  live out:{99, 100, 101}
+block 00f0
+  pred 00ba
+  pred 00be
+  live in:{16, 17, 18, 99, 100, 101}
+  @????: phi v61:"previous"Ljava/lang/StringBuilder; <- v52:"previous"Ljava/lan
+  g/StringBuilder;[b=00be] v30:"previous"Ljava/lang/StringBuilder;[b=00ba]
+  @????: phi v62:"current"Ljava/lang/StringBuilder; <- v53:"current"Ljava/lang/
+  StringBuilder;[b=00be] v39:"current"Ljava/lang/StringBuilder;[b=00ba]
+  @????: goto . <- .
+  next 00c5
+  live out:{16, 17, 18, 61, 62, 99, 100, 101}
+block 00f1
+  pred 0076
+  pred 00f8
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  @????: goto . <- .
+  next 007f
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00f2
+  pred 00fb
+  pred 00fc
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  @????: goto . <- .
+  next 004d
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 00f3
+  pred 0000
+  pred 00d3
+  live in:{16, 17, 18, 99, 100, 101}
+  @????: phi v30:"previous"Ljava/lang/StringBuilder; <- v20:"previous"Ljava/lan
+  g/StringBuilder;[b=0000] v61:"previous"Ljava/lang/StringBuilder;[b=00d3]
+  @????: phi v31:"current"Ljava/lang/StringBuilder; <- v19:"current"Ljava/lang/
+  StringBuilder;[b=0000] v62:"current"Ljava/lang/StringBuilder;[b=00d3]
+  @????: goto . <- .
+  next 0006
+  live out:{16, 17, 18, 30, 31, 99, 100, 101}
+block 00f4
+  pred 008f
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  @????: goto . <- .
+  next 00a1
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00f5
+  pred 007f
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  @????: goto . <- .
+  next 00a1
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00f6
+  pred 006f
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  @????: goto . <- .
+  next 0079
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00f7
+  pred 0066
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  @????: goto . <- .
+  next 0079
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00f8
+  pred 005c
+  live in:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+  @????: goto . <- .
+  next 00f1
+  live out:{16, 17, 18, 30, 39, 71, 99, 100, 101}
+block 00f9
+  pred 004d
+  live in:{16, 17, 18, 39, 99, 100, 101}
+  @????: goto . <- .
+  next 00be
+  live out:{16, 17, 18, 39, 99, 100, 101}
+block 00fa
+  pred 0048
+  live in:{16, 17, 18, 39, 99, 100, 101}
+  @????: goto . <- .
+  next 00be
+  live out:{16, 17, 18, 39, 99, 100, 101}
+block 00fb
+  pred 0048
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  @????: goto . <- .
+  next 00f2
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 00fc
+  pred 003d
+  live in:{16, 17, 18, 30, 39, 99, 100, 101}
+  @????: goto . <- .
+  next 00f2
+  live out:{16, 17, 18, 30, 39, 99, 100, 101}
+block 00fd
+  pred 0023
+  live in:{}
+  @????: goto . <- .
+  next 00d6
+  live out:{}
+block 00fe
+  pred 00a0
+  pred 00d2
+  pred 00d8
+  live in:{}
+  returns
+  live out:{}
diff --git a/dx/tests/087-ssa-local-vars/info.txt b/dx/tests/087-ssa-local-vars/info.txt
new file mode 100644
index 0000000..6e9d675
--- /dev/null
+++ b/dx/tests/087-ssa-local-vars/info.txt
@@ -0,0 +1,5 @@
+This is a test case to ensure proper preservation of local variable information through the register renamer and dead code remover at the beginning of the SSA conversion.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/087-ssa-local-vars/run b/dx/tests/087-ssa-local-vars/run
new file mode 100644
index 0000000..d6d6a2d
--- /dev/null
+++ b/dx/tests/087-ssa-local-vars/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --dump --ssa-blocks Blort.class
diff --git a/dx/tests/088-ssa-combine-blocks/Blort.class b/dx/tests/088-ssa-combine-blocks/Blort.class
new file mode 100644
index 0000000..daac6a3
Binary files /dev/null and b/dx/tests/088-ssa-combine-blocks/Blort.class differ
diff --git a/dx/tests/088-ssa-combine-blocks/Blort.java b/dx/tests/088-ssa-combine-blocks/Blort.java
new file mode 100644
index 0000000..bf49dbe
--- /dev/null
+++ b/dx/tests/088-ssa-combine-blocks/Blort.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    /**
+     * just because this should do nothing
+     */
+    void voidFunction() {
+    }
+
+    /**
+     * Current SSA form requires each move-exception block to have
+     * a unique predecessor
+     */
+    void edgeSplitMoveException() {
+        try {
+            hashCode();
+            hashCode();
+        } catch (Throwable tr) {
+        }
+    }
+
+    /**
+     * An empty infinite loop for the empty goto optimizer
+     */
+    void infiniteLoop() {
+        while (true) {
+        }
+    }
+}
diff --git a/dx/tests/088-ssa-combine-blocks/build b/dx/tests/088-ssa-combine-blocks/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/088-ssa-combine-blocks/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/088-ssa-combine-blocks/expected.txt b/dx/tests/088-ssa-combine-blocks/expected.txt
new file mode 100644
index 0000000..2e748dd
--- /dev/null
+++ b/dx/tests/088-ssa-combine-blocks/expected.txt
@@ -0,0 +1,82 @@
+reading Blort.class...
+method <init> ()V
+first 0007
+block 0000
+  pred 0005
+  Blort.java:17@0001: Rop{invoke-direct . <- Ljava/lang/Object; call throws <any>}(java.lang.Object.<init>:()V catch) . <- v0:NffffLBlort;
+  next 0006
+block 0005
+  pred 0007
+  Blort.java:17@0000: move-param-object(0) v0:NffffLBlort; <- .
+  Blort.java:17@0000: goto . <- .
+  next 0000
+block 0006
+  pred 0000
+  Blort.java:17@0004: return-void . <- .
+  returns
+block 0007
+  @????: goto . <- .
+  next 0005
+
+method voidFunction ()V
+first 0003
+block 0001
+  pred 0003
+  Blort.java:23@0000: move-param-object(0) v0:LBlort; <- .
+  Blort.java:23@0000: goto . <- .
+  next 0002
+block 0002
+  pred 0001
+  Blort.java:23@0000: return-void . <- .
+  returns
+block 0003
+  @????: goto . <- .
+  next 0001
+
+method edgeSplitMoveException ()V
+first 0019
+block 0000
+  pred 0010
+  Blort.java:31@0001: Rop{invoke-virtual . <- Ljava/lang/Object; call throws <any>}(java.lang.Object.hashCode:()I catch java.lang.Throwable) . <- v1:LBlort;
+  next 001a
+  next 0004 *
+block 0004
+  pred 0000
+  Blort.java:32@0006: Rop{invoke-virtual . <- Ljava/lang/Object; call throws <any>}(java.lang.Object.hashCode:()I catch java.lang.Throwable) . <- v1:LBlort;
+  next 001a
+  next 0011 *
+block 0010
+  pred 0019
+  Blort.java:31@0000: move-param-object(0) v1:LBlort; <- .
+  Blort.java:31@0000: goto . <- .
+  next 0000
+block 0011
+  pred 0004
+  pred 001a
+  Blort.java:35@000e: return-void . <- .
+  returns
+block 0019
+  @????: goto . <- .
+  next 0010
+block 001a
+  pred 0000
+  pred 0004
+  Blort.java:33@000d: Rop{move-exception Ljava/lang/Throwable; <- . flows} v0:Ljava/lang/Throwable; <- .
+  @????: goto . <- .
+  next 0011
+
+method infiniteLoop ()V
+first 0002
+block 0000
+  pred 0000
+  pred 0001
+  Blort.java:41@0000: goto . <- .
+  next 0000
+block 0001
+  pred 0002
+  Blort.java:41@0000: move-param-object(0) v0:LBlort; <- .
+  Blort.java:41@0000: goto . <- .
+  next 0000
+block 0002
+  @????: goto . <- .
+  next 0001
diff --git a/dx/tests/088-ssa-combine-blocks/info.txt b/dx/tests/088-ssa-combine-blocks/info.txt
new file mode 100644
index 0000000..603c1c0
--- /dev/null
+++ b/dx/tests/088-ssa-combine-blocks/info.txt
@@ -0,0 +1,5 @@
+This is a test case for the identical-block combining algorithm, which runs after the SSA optimizer to recombine identical blocks (usually exception handlers) created during edge-splitting.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/088-ssa-combine-blocks/run b/dx/tests/088-ssa-combine-blocks/run
new file mode 100644
index 0000000..db567ee
--- /dev/null
+++ b/dx/tests/088-ssa-combine-blocks/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --dump --width=1000 --optimize --rop-blocks Blort.class
diff --git a/dx/tests/089-dex-define-object/Class.java b/dx/tests/089-dex-define-object/Class.java
new file mode 100644
index 0000000..4de5e70
--- /dev/null
+++ b/dx/tests/089-dex-define-object/Class.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package java.lang;
+
+public class Class<T> {
+    // This space intentionally left blank.
+}
diff --git a/dx/tests/089-dex-define-object/Object.java b/dx/tests/089-dex-define-object/Object.java
new file mode 100644
index 0000000..575c736
--- /dev/null
+++ b/dx/tests/089-dex-define-object/Object.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package java.lang;
+
+public class Object {
+    public Object() {
+        // This space intentionally left blank.
+    }
+
+    public boolean equals(Object o) {
+        return true;
+    }
+
+    protected void finalize() {
+        // This space intentionally left blank.
+    }
+
+    public final native Class<? extends Object> getClass();
+    public native int hashCode();
+    public final native void notify();
+    public final native void notifyAll();
+
+    public String toString() {
+        return "blort";
+    }
+
+    public final void wait() {
+        wait(0, 0);
+    }
+
+    public final void wait(long time) {
+        wait(time, 0);
+    }
+
+    public final native void wait(long time, int frac);
+}
diff --git a/dx/tests/089-dex-define-object/String.java b/dx/tests/089-dex-define-object/String.java
new file mode 100644
index 0000000..26e7370
--- /dev/null
+++ b/dx/tests/089-dex-define-object/String.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package java.lang;
+
+public final class String {
+    // This space intentionally left blank.
+}
diff --git a/dx/tests/089-dex-define-object/build b/dx/tests/089-dex-define-object/build
new file mode 100644
index 0000000..fefc827
--- /dev/null
+++ b/dx/tests/089-dex-define-object/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/089-dex-define-object/expected.txt b/dx/tests/089-dex-define-object/expected.txt
new file mode 100644
index 0000000..a1db6a4
--- /dev/null
+++ b/dx/tests/089-dex-define-object/expected.txt
@@ -0,0 +1 @@
+Good!
diff --git a/dx/tests/089-dex-define-object/info.txt b/dx/tests/089-dex-define-object/info.txt
new file mode 100644
index 0000000..e035834
--- /dev/null
+++ b/dx/tests/089-dex-define-object/info.txt
@@ -0,0 +1,4 @@
+This tests that a stripped down definition of the class Object can in
+fact be converted to a dex file. This test ensures that the conversion
+runs without failure, though the contents of the converted file are
+not checked for correctness.
diff --git a/dx/tests/089-dex-define-object/java/lang/Class.class b/dx/tests/089-dex-define-object/java/lang/Class.class
new file mode 100644
index 0000000..2980bae
Binary files /dev/null and b/dx/tests/089-dex-define-object/java/lang/Class.class differ
diff --git a/dx/tests/089-dex-define-object/java/lang/Object.class b/dx/tests/089-dex-define-object/java/lang/Object.class
new file mode 100644
index 0000000..d246b9d
Binary files /dev/null and b/dx/tests/089-dex-define-object/java/lang/Object.class differ
diff --git a/dx/tests/089-dex-define-object/java/lang/String.class b/dx/tests/089-dex-define-object/java/lang/String.class
new file mode 100644
index 0000000..2b807e5
Binary files /dev/null and b/dx/tests/089-dex-define-object/java/lang/String.class differ
diff --git a/dx/tests/089-dex-define-object/run b/dx/tests/089-dex-define-object/run
new file mode 100644
index 0000000..8e9e133
--- /dev/null
+++ b/dx/tests/089-dex-define-object/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --core-library --output=blort.dex */*/*.class
+if [ -r blort.dex ]; then
+    echo Good!
+fi
diff --git a/dx/tests/090-dex-unify-arrays/Blort.class b/dx/tests/090-dex-unify-arrays/Blort.class
new file mode 100644
index 0000000..fe94b44
Binary files /dev/null and b/dx/tests/090-dex-unify-arrays/Blort.class differ
diff --git a/dx/tests/090-dex-unify-arrays/Blort.java b/dx/tests/090-dex-unify-arrays/Blort.java
new file mode 100644
index 0000000..507153e
--- /dev/null
+++ b/dx/tests/090-dex-unify-arrays/Blort.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    /*
+     * Note: The use of the casts after the "?" in the following are
+     * to avoid a bug in some (source code level) compilers.
+     */
+
+    static public Object test1(boolean b) {
+        return (b ? new String[1] : new Integer[1])[0];
+    }
+
+    static public int test2(boolean b) {
+        Object o = b ? (Object) new int[1] : new float[1];
+        return o.hashCode();
+    }
+
+    static public int test3(boolean b) {
+        Object o = b ? (Object) new char[1] : new double[1];
+        return o.hashCode();
+    }
+
+    static public int test4(boolean b) {
+        Object o = b ? (Object) new long[1] : new boolean[1];
+        return o.hashCode();
+    }
+
+    static public int test5(boolean b) {
+        Object o = b ? (Object) new short[1] : new Object[1];
+        return o.hashCode();
+    }
+
+    static public int test6(boolean b) {
+        Object o = b ? (Object) new byte[1] : new boolean[1];
+        return o.hashCode();
+    }
+
+    static public Object test7(boolean b) {
+        return (b ? new String[1] : new int[1][])[0];
+    }
+
+    static public Object[] test8(boolean b) {
+        return (b ? new String[1][] : new int[1][][])[0];
+    }
+}
diff --git a/dx/tests/090-dex-unify-arrays/build b/dx/tests/090-dex-unify-arrays/build
new file mode 100644
index 0000000..fefc827
--- /dev/null
+++ b/dx/tests/090-dex-unify-arrays/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/090-dex-unify-arrays/expected.txt b/dx/tests/090-dex-unify-arrays/expected.txt
new file mode 100644
index 0000000..7a4125f
--- /dev/null
+++ b/dx/tests/090-dex-unify-arrays/expected.txt
@@ -0,0 +1,122 @@
+Blort.test1:(Z)Ljava/lang/Object;:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v1, v0
+  0002: if-eqz v1, 000c // +000a
+  0004: const/4 v1, #int 1 // #1
+  0005: new-array v1, v1, java.lang.String[]
+  0007: const/4 v2, #int 0 // #0
+  0008: aget-object v1, v1, v2
+  000a: move-object v0, v1
+  000b: return-object v0
+  000c: const/4 v1, #int 1 // #1
+  000d: new-array v1, v1, java.lang.Integer[]
+  000f: goto 0007 // -0008
+Blort.test2:(Z)I:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: if-eqz v2, 000f // +000d
+  0004: const/4 v2, #int 1 // #1
+  0005: new-array v2, v2, int[]
+  0007: move-object v1, v2
+  0008: move-object v2, v1
+  0009: invoke-virtual {v2}, java.lang.Object.hashCode:()I
+  000c: move-result v2
+  000d: move v0, v2
+  000e: return v0
+  000f: const/4 v2, #int 1 // #1
+  0010: new-array v2, v2, float[]
+  0012: goto 0007 // -000b
+Blort.test3:(Z)I:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: if-eqz v2, 000f // +000d
+  0004: const/4 v2, #int 1 // #1
+  0005: new-array v2, v2, char[]
+  0007: move-object v1, v2
+  0008: move-object v2, v1
+  0009: invoke-virtual {v2}, java.lang.Object.hashCode:()I
+  000c: move-result v2
+  000d: move v0, v2
+  000e: return v0
+  000f: const/4 v2, #int 1 // #1
+  0010: new-array v2, v2, double[]
+  0012: goto 0007 // -000b
+Blort.test4:(Z)I:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: if-eqz v2, 000f // +000d
+  0004: const/4 v2, #int 1 // #1
+  0005: new-array v2, v2, long[]
+  0007: move-object v1, v2
+  0008: move-object v2, v1
+  0009: invoke-virtual {v2}, java.lang.Object.hashCode:()I
+  000c: move-result v2
+  000d: move v0, v2
+  000e: return v0
+  000f: const/4 v2, #int 1 // #1
+  0010: new-array v2, v2, boolean[]
+  0012: goto 0007 // -000b
+Blort.test5:(Z)I:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: if-eqz v2, 000f // +000d
+  0004: const/4 v2, #int 1 // #1
+  0005: new-array v2, v2, short[]
+  0007: move-object v1, v2
+  0008: move-object v2, v1
+  0009: invoke-virtual {v2}, java.lang.Object.hashCode:()I
+  000c: move-result v2
+  000d: move v0, v2
+  000e: return v0
+  000f: const/4 v2, #int 1 // #1
+  0010: new-array v2, v2, java.lang.Object[]
+  0012: goto 0007 // -000b
+Blort.test6:(Z)I:
+regs: 0004; ins: 0001; outs: 0001
+  0000: move v0, v3
+  0001: move v2, v0
+  0002: if-eqz v2, 000f // +000d
+  0004: const/4 v2, #int 1 // #1
+  0005: new-array v2, v2, byte[]
+  0007: move-object v1, v2
+  0008: move-object v2, v1
+  0009: invoke-virtual {v2}, java.lang.Object.hashCode:()I
+  000c: move-result v2
+  000d: move v0, v2
+  000e: return v0
+  000f: const/4 v2, #int 1 // #1
+  0010: new-array v2, v2, boolean[]
+  0012: goto 0007 // -000b
+Blort.test7:(Z)Ljava/lang/Object;:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v1, v0
+  0002: if-eqz v1, 000c // +000a
+  0004: const/4 v1, #int 1 // #1
+  0005: new-array v1, v1, java.lang.String[]
+  0007: const/4 v2, #int 0 // #0
+  0008: aget-object v1, v1, v2
+  000a: move-object v0, v1
+  000b: return-object v0
+  000c: const/4 v1, #int 1 // #1
+  000d: new-array v1, v1, int[][]
+  000f: goto 0007 // -0008
+Blort.test8:(Z)[Ljava/lang/Object;:
+regs: 0004; ins: 0001; outs: 0000
+  0000: move v0, v3
+  0001: move v1, v0
+  0002: if-eqz v1, 000c // +000a
+  0004: const/4 v1, #int 1 // #1
+  0005: new-array v1, v1, java.lang.String[][]
+  0007: const/4 v2, #int 0 // #0
+  0008: aget-object v1, v1, v2
+  000a: move-object v0, v1
+  000b: return-object v0
+  000c: const/4 v1, #int 1 // #1
+  000d: new-array v1, v1, int[][][]
+  000f: goto 0007 // -0008
diff --git a/dx/tests/090-dex-unify-arrays/info.txt b/dx/tests/090-dex-unify-arrays/info.txt
new file mode 100644
index 0000000..018fd25
--- /dev/null
+++ b/dx/tests/090-dex-unify-arrays/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+array type unification works properly.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/090-dex-unify-arrays/run b/dx/tests/090-dex-unify-arrays/run
new file mode 100644
index 0000000..994377a
--- /dev/null
+++ b/dx/tests/090-dex-unify-arrays/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test'*' Blort.class
diff --git a/dx/tests/091-ssa-const-collector/Blort$Foo.class b/dx/tests/091-ssa-const-collector/Blort$Foo.class
new file mode 100644
index 0000000..89290fb
Binary files /dev/null and b/dx/tests/091-ssa-const-collector/Blort$Foo.class differ
diff --git a/dx/tests/091-ssa-const-collector/Blort.class b/dx/tests/091-ssa-const-collector/Blort.class
new file mode 100644
index 0000000..9a2a996
Binary files /dev/null and b/dx/tests/091-ssa-const-collector/Blort.class differ
diff --git a/dx/tests/091-ssa-const-collector/Blort.java b/dx/tests/091-ssa-const-collector/Blort.java
new file mode 100644
index 0000000..ea99a0d
--- /dev/null
+++ b/dx/tests/091-ssa-const-collector/Blort.java
@@ -0,0 +1,64 @@
+
+class Blort {
+    /** Class constructors for enums use a lot of const's */
+    enum Foo {
+        ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT
+    }
+
+    /** all uses of 10 should be combined except the local assignment */
+    void testNumeric() {
+        int foo = 10;
+
+        for (int i = 0; i < 10; i++){
+            foo += i * 10;
+        }
+
+        for (int i = 0; i < 10; i++){
+            foo += i + 10;
+        }
+    }
+
+    void testStrings() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("foo");
+        sb.append("foo");
+        sb.append("foo");
+        sb.append("foo");
+        sb.append("foo");
+        sb.append("foo");
+    }
+
+    void testCaughtStrings() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("foo");
+        sb.append("foo");
+        sb.append("foo");
+        try {
+            sb.append("foo");
+            sb.append("foo");
+            sb.append("foo");
+        } catch (Throwable tr) {
+            System.out.println("foo");
+        }
+    }
+
+    /** local variables cannot be intermingled */
+    void testLocalVars() {
+        int i = 10;
+        int j = 10;
+        int k = 10;
+        int a = 10;
+        int b = 10;
+        int c = 10;
+
+        i *= 10;
+    }
+
+    void testNull(Object a) {
+        a.equals(null);
+        a.equals(null);
+
+    }
+}
diff --git a/dx/tests/091-ssa-const-collector/build b/dx/tests/091-ssa-const-collector/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/091-ssa-const-collector/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/091-ssa-const-collector/expected.txt b/dx/tests/091-ssa-const-collector/expected.txt
new file mode 100644
index 0000000..d111641
--- /dev/null
+++ b/dx/tests/091-ssa-const-collector/expected.txt
@@ -0,0 +1,454 @@
+reading Blort.class...
+method <init> ()V
+first 0007
+block 0000
+  pred 0005
+  Blort.java:2@0001: Rop{invoke-direct . <- Ljava/lang/Object; call throws <any
+  >}(java.lang.Object.<init>:()V catch) . <- v0:NffffLBlort;
+  next 0006
+block 0005
+  pred 0007
+  Blort.java:2@0000: move-param-object(0) v0:"this"NffffLBlort; <- .
+  Blort.java:2@0000: goto . <- .
+  next 0000
+block 0006
+  pred 0000
+  Blort.java:2@0004: return-void . <- .
+  returns
+block 0007
+  @????: goto . <- .
+  next 0005
+
+method testNumeric ()V
+first 0030
+block 0000
+  pred 002e
+  Blort.java:10@0000: const-int(10) v0:I=10 <- .
+  @????: mark-local-int . <- v0:"foo"I
+  Blort.java:12@0003: const-int(0) v1:I=0 <- .
+  @????: mark-local-int . <- v1:"i"I
+  Blort.java:12@0004: goto . <- .
+  next 0005
+block 0005
+  pred 0000
+  pred 000b
+  Blort.java:12@0008: if-ge-int . <- v1:I v3:I=10
+  next 000b *
+  next 0018
+block 000b
+  pred 0005
+  Blort.java:13@000f: mul-const-int(10) v2:I <- v1:I
+  Blort.java:13@0010: add-int v0:I <- v0:I v2:I
+  @????: mark-local-int . <- v0:"foo"I
+  Blort.java:12@0012: add-const-int(1) v1:"i"I <- v1:I
+  Blort.java:12@0015: goto . <- .
+  next 0005
+block 0018
+  pred 0005
+  Blort.java:16@0018: const-int(0) v1:I=0 <- .
+  @????: mark-local-int . <- v1:"i"I
+  Blort.java:16@0019: goto . <- .
+  next 001a
+block 001a
+  pred 0018
+  pred 0020
+  Blort.java:16@001d: if-ge-int . <- v1:I v3:I=10
+  next 0020 *
+  next 002f
+block 0020
+  pred 001a
+  Blort.java:17@0024: add-const-int(10) v2:I <- v1:I
+  Blort.java:17@0025: add-int v0:I <- v0:I v2:I
+  @????: mark-local-int . <- v0:"foo"I
+  Blort.java:16@0027: add-const-int(1) v1:"i"I <- v1:I
+  Blort.java:16@002a: goto . <- .
+  next 001a
+block 002e
+  pred 0030
+  Blort.java:10@0000: move-param-object(0) v4:"this"LBlort; <- .
+  Blort.java:10@0000: goto . <- .
+  next 0000
+block 002f
+  pred 001a
+  Blort.java:19@002d: return-void . <- .
+  returns
+block 0030
+  @????: const-int(10) v3:I=10 <- .
+  @????: goto . <- .
+  next 002e
+
+method testStrings ()V
+first 0046
+block 0000
+  pred 0032
+  Blort.java:22@0000: new-instance(java.lang.StringBuilder catch) . <- .
+  next 0039
+block 0003
+  pred 0039
+  Blort.java:22@0004: Rop{invoke-direct . <- Ljava/lang/StringBuilder; call thr
+  ows <any>}(java.lang.StringBuilder.<init>:()V catch) . <- v0:N0000Ljava/lang/
+  StringBuilder;
+  next 0007
+block 0007
+  pred 0003
+  @????: mark-local-object . <- v0:"sb"Ljava/lang/StringBuilder;
+  Blort.java:24@0009: const-object("foo" catch) . <- .
+  next 003a
+block 000b
+  pred 003a
+  Blort.java:24@000b: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v1:Lj
+  ava/lang/String;="foo"
+  next 000e
+block 000e
+  pred 000b
+  Blort.java:25@0010: const-object("foo" catch) . <- .
+  next 003c
+block 0012
+  pred 003c
+  Blort.java:25@0012: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v1:Lj
+  ava/lang/String;="foo"
+  next 0015
+block 0015
+  pred 0012
+  Blort.java:26@0017: const-object("foo" catch) . <- .
+  next 003e
+block 0019
+  pred 003e
+  Blort.java:26@0019: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v1:Lj
+  ava/lang/String;="foo"
+  next 001c
+block 001c
+  pred 0019
+  Blort.java:27@001e: const-object("foo" catch) . <- .
+  next 0040
+block 0020
+  pred 0040
+  Blort.java:27@0020: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v1:Lj
+  ava/lang/String;="foo"
+  next 0023
+block 0023
+  pred 0020
+  Blort.java:28@0025: const-object("foo" catch) . <- .
+  next 0042
+block 0027
+  pred 0042
+  Blort.java:28@0027: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v1:Lj
+  ava/lang/String;="foo"
+  next 002a
+block 002a
+  pred 0027
+  Blort.java:29@002c: const-object("foo" catch) . <- .
+  next 0044
+block 002e
+  pred 0044
+  Blort.java:29@002e: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v1:Lj
+  ava/lang/String;="foo"
+  next 0033
+block 0032
+  pred 0046
+  Blort.java:22@0000: move-param-object(0) v2:"this"LBlort; <- .
+  Blort.java:22@0000: goto . <- .
+  next 0000
+block 0033
+  pred 002e
+  Blort.java:30@0032: return-void . <- .
+  returns
+block 0039
+  pred 0000
+  Blort.java:22@0000: Rop{move-result-pseudo N0000Ljava/lang/StringBuilder; <- 
+  . flows} v0:N0000Ljava/lang/StringBuilder; <- .
+  Blort.java:22@0000: goto . <- .
+  next 0003
+block 003a
+  pred 0007
+  Blort.java:24@0009: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v1:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:24@0009: goto . <- .
+  next 000b
+block 003c
+  pred 000e
+  Blort.java:25@0010: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v1:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:25@0010: goto . <- .
+  next 0012
+block 003e
+  pred 0015
+  Blort.java:26@0017: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v1:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:26@0017: goto . <- .
+  next 0019
+block 0040
+  pred 001c
+  Blort.java:27@001e: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v1:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:27@001e: goto . <- .
+  next 0020
+block 0042
+  pred 0023
+  Blort.java:28@0025: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v1:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:28@0025: goto . <- .
+  next 0027
+block 0044
+  pred 002a
+  Blort.java:29@002c: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v1:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:29@002c: goto . <- .
+  next 002e
+block 0046
+  @????: goto . <- .
+  next 0032
+
+method testCaughtStrings ()V
+first 0056
+block 0000
+  pred 0040
+  Blort.java:33@0000: new-instance(java.lang.StringBuilder catch) . <- .
+  next 0047
+block 0003
+  pred 0047
+  Blort.java:33@0004: Rop{invoke-direct . <- Ljava/lang/StringBuilder; call thr
+  ows <any>}(java.lang.StringBuilder.<init>:()V catch) . <- v0:N0000Ljava/lang/
+  StringBuilder;
+  next 0007
+block 0007
+  pred 0003
+  @????: mark-local-object . <- v0:"sb"Ljava/lang/StringBuilder;
+  Blort.java:35@0009: const-object("foo" catch) . <- .
+  next 0048
+block 000b
+  pred 0048
+  Blort.java:35@000b: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v2:Lj
+  ava/lang/String;="foo"
+  next 000e
+block 000e
+  pred 000b
+  Blort.java:36@0010: const-object("foo" catch) . <- .
+  next 004a
+block 0012
+  pred 004a
+  Blort.java:36@0012: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v2:Lj
+  ava/lang/String;="foo"
+  next 0015
+block 0015
+  pred 0012
+  Blort.java:37@0017: const-object("foo" catch) . <- .
+  next 004c
+block 0019
+  pred 004c
+  Blort.java:37@0019: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch) . <- v0:Ljava/lang/StringBuilder; v2:Lj
+  ava/lang/String;="foo"
+  next 001d
+block 001d
+  pred 0019
+  Blort.java:39@001e: const-object("foo" catch java.lang.Throwable) . <- .
+  next 0057
+  next 004e *
+block 0020
+  pred 004e
+  Blort.java:39@0020: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch java.lang.Throwable) . <- v0:Ljava/lang/
+  StringBuilder; v2:Ljava/lang/String;="foo"
+  next 0057
+  next 0023 *
+block 0023
+  pred 0020
+  Blort.java:40@0025: const-object("foo" catch java.lang.Throwable) . <- .
+  next 0057
+  next 0050 *
+block 0027
+  pred 0050
+  Blort.java:40@0027: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch java.lang.Throwable) . <- v0:Ljava/lang/
+  StringBuilder; v2:Ljava/lang/String;="foo"
+  next 0057
+  next 002a *
+block 002a
+  pred 0027
+  Blort.java:41@002c: const-object("foo" catch java.lang.Throwable) . <- .
+  next 0057
+  next 0052 *
+block 002e
+  pred 0052
+  Blort.java:41@002e: Rop{invoke-virtual . <- Ljava/lang/StringBuilder; Ljava/l
+  ang/String; call throws <any>}(java.lang.StringBuilder.append:(Ljava/lang/Str
+  ing;)Ljava/lang/StringBuilder; catch java.lang.Throwable) . <- v0:Ljava/lang/
+  StringBuilder; v2:Ljava/lang/String;="foo"
+  next 0057
+  next 0041 *
+block 0035
+  pred 0057
+  @????: mark-local-object . <- v1:"tr"Ljava/lang/Throwable;
+  Blort.java:43@0036: get-static-object(java.lang.System.out:Ljava/io/PrintStre
+  am; catch) . <- .
+  next 0054
+block 0039
+  pred 0054
+  Blort.java:43@0039: const-object("foo" catch) . <- .
+  next 0055
+block 003b
+  pred 0055
+  Blort.java:43@003b: Rop{invoke-virtual . <- Ljava/io/PrintStream; Ljava/lang/
+  String; call throws <any>}(java.io.PrintStream.println:(Ljava/lang/String;)V 
+  catch) . <- v2:Ljava/io/PrintStream; v3:Ljava/lang/String;="foo"
+  next 0041
+block 0040
+  pred 0056
+  Blort.java:33@0000: move-param-object(0) v4:"this"LBlort; <- .
+  Blort.java:33@0000: goto . <- .
+  next 0000
+block 0041
+  pred 002e
+  pred 003b
+  Blort.java:45@003e: return-void . <- .
+  returns
+block 0047
+  pred 0000
+  Blort.java:33@0000: Rop{move-result-pseudo N0000Ljava/lang/StringBuilder; <- 
+  . flows} v0:N0000Ljava/lang/StringBuilder; <- .
+  Blort.java:33@0000: goto . <- .
+  next 0003
+block 0048
+  pred 0007
+  Blort.java:35@0009: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v2:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:35@0009: goto . <- .
+  next 000b
+block 004a
+  pred 000e
+  Blort.java:36@0010: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v2:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:36@0010: goto . <- .
+  next 0012
+block 004c
+  pred 0015
+  Blort.java:37@0017: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v2:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:37@0017: goto . <- .
+  next 0019
+block 004e
+  pred 001d
+  Blort.java:39@001e: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v2:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:39@001e: goto . <- .
+  next 0020
+block 0050
+  pred 0023
+  Blort.java:40@0025: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v2:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:40@0025: goto . <- .
+  next 0027
+block 0052
+  pred 002a
+  Blort.java:41@002c: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v2:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:41@002c: goto . <- .
+  next 002e
+block 0054
+  pred 0035
+  Blort.java:43@0036: Rop{move-result-pseudo Ljava/io/PrintStream; <- . flows} 
+  v2:Ljava/io/PrintStream; <- .
+  Blort.java:43@0036: goto . <- .
+  next 0039
+block 0055
+  pred 0039
+  Blort.java:43@0039: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v3:
+  Ljava/lang/String;="foo" <- .
+  Blort.java:43@0039: goto . <- .
+  next 003b
+block 0056
+  @????: goto . <- .
+  next 0040
+block 0057
+  pred 001d
+  pred 0020
+  pred 0023
+  pred 0027
+  pred 002a
+  pred 002e
+  Blort.java:42@0035: Rop{move-exception Ljava/lang/Throwable; <- . flows} v1:L
+  java/lang/Throwable; <- .
+  @????: goto . <- .
+  next 0035
+
+method testLocalVars ()V
+first 0003
+block 0000
+  pred 0001
+  Blort.java:49@0000: const-int(10) v3:I=10 <- .
+  @????: mark-local-int . <- v3:"i"I
+  Blort.java:50@0003: const-int(10) v4:I=10 <- .
+  @????: mark-local-int . <- v4:"j"I
+  Blort.java:51@0006: const-int(10) v5:I=10 <- .
+  @????: mark-local-int . <- v5:"k"I
+  Blort.java:52@0009: const-int(10) v0:I=10 <- .
+  @????: mark-local-int . <- v0:"a"I
+  Blort.java:53@000d: const-int(10) v1:I=10 <- .
+  @????: mark-local-int . <- v1:"b"I
+  Blort.java:54@0011: const-int(10) v2:I=10 <- .
+  @????: mark-local-int . <- v2:"c"I
+  Blort.java:56@0018: mul-const-int(10) v3:I=100 <- v3:I
+  @????: mark-local-int . <- v3:"i"I=100
+  Blort.java:57@001a: goto . <- .
+  next 0002
+block 0001
+  pred 0003
+  Blort.java:49@0000: move-param-object(0) v6:"this"LBlort; <- .
+  Blort.java:49@0000: goto . <- .
+  next 0000
+block 0002
+  pred 0000
+  Blort.java:57@001a: return-void . <- .
+  returns
+block 0003
+  @????: goto . <- .
+  next 0001
+
+method testNull (Ljava/lang/Object;)V
+first 0015
+block 0000
+  pred 000c
+  Blort.java:60@0002: Rop{invoke-virtual . <- Ljava/lang/Object; Ljava/lang/Obj
+  ect; call throws <any>}(java.lang.Object.equals:(Ljava/lang/Object;)Z catch) 
+  . <- v2:Ljava/lang/Object; v0:<null>=null
+  next 0005
+block 0005
+  pred 0000
+  Blort.java:61@0008: Rop{invoke-virtual . <- Ljava/lang/Object; Ljava/lang/Obj
+  ect; call throws <any>}(java.lang.Object.equals:(Ljava/lang/Object;)Z catch) 
+  . <- v2:Ljava/lang/Object; v0:<null>=null
+  next 000d
+block 000c
+  pred 0015
+  Blort.java:60@0000: move-param-object(0) v1:"this"LBlort; <- .
+  Blort.java:60@0000: move-param-object(1) v2:"a"Ljava/lang/Object; <- .
+  Blort.java:60@0000: goto . <- .
+  next 0000
+block 000d
+  pred 0005
+  Blort.java:63@000c: return-void . <- .
+  returns
+block 0015
+  @????: const-object-nothrow(null) v0:<null>=null <- .
+  @????: goto . <- .
+  next 000c
diff --git a/dx/tests/091-ssa-const-collector/info.txt b/dx/tests/091-ssa-const-collector/info.txt
new file mode 100644
index 0000000..020d3b3
--- /dev/null
+++ b/dx/tests/091-ssa-const-collector/info.txt
@@ -0,0 +1,5 @@
+This test case tests the "const collector" optimization step.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/091-ssa-const-collector/run b/dx/tests/091-ssa-const-collector/run
new file mode 100644
index 0000000..bbce10a
--- /dev/null
+++ b/dx/tests/091-ssa-const-collector/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+dx --dump --optimize --rop-blocks Blort.class
diff --git a/dx/tests/092-ssa-cfg-edge-cases/Blort.class b/dx/tests/092-ssa-cfg-edge-cases/Blort.class
new file mode 100644
index 0000000..98cf99f
Binary files /dev/null and b/dx/tests/092-ssa-cfg-edge-cases/Blort.class differ
diff --git a/dx/tests/092-ssa-cfg-edge-cases/Blort.java b/dx/tests/092-ssa-cfg-edge-cases/Blort.java
new file mode 100644
index 0000000..8b3602f
--- /dev/null
+++ b/dx/tests/092-ssa-cfg-edge-cases/Blort.java
@@ -0,0 +1,20 @@
+
+class Blort {
+
+    void testMultipleIdenticalSuccessors(int foo) {
+        switch(foo) {
+            case 1:
+            case 2:
+            case 3:
+                System.out.println("foo");
+            break;
+        }
+    }
+
+    void testNoPrimarySuccessor() {
+        try {
+            throw new RuntimeException();
+        } catch (RuntimeException ex){
+        }
+    }
+}
diff --git a/dx/tests/092-ssa-cfg-edge-cases/build b/dx/tests/092-ssa-cfg-edge-cases/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/092-ssa-cfg-edge-cases/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/092-ssa-cfg-edge-cases/expected.txt b/dx/tests/092-ssa-cfg-edge-cases/expected.txt
new file mode 100644
index 0000000..38303e8
--- /dev/null
+++ b/dx/tests/092-ssa-cfg-edge-cases/expected.txt
@@ -0,0 +1,120 @@
+reading Blort.class...
+method <init> ()V
+first 0007
+block 0000
+  pred 0005
+  Blort.java:2@0001: Rop{invoke-direct . <- Ljava/lang/Object; call throws <any
+  >}(java.lang.Object.<init>:()V catch) . <- v0:NffffLBlort;
+  next 0006
+block 0005
+  pred 0007
+  Blort.java:2@0000: move-param-object(0) v0:"this"NffffLBlort; <- .
+  Blort.java:2@0000: goto . <- .
+  next 0000
+block 0006
+  pred 0000
+  Blort.java:2@0004: return-void . <- .
+  returns
+block 0007
+  @????: goto . <- .
+  next 0005
+
+method testMultipleIdenticalSuccessors (I)V
+first 002e
+block 0000
+  pred 0025
+  Blort.java:5@0001: switch({1, 2, 3}) . <- v3:I
+  next 001c
+  next 001c
+  next 001c
+  next 0026 *
+block 001c
+  pred 0000
+  pred 0000
+  pred 0000
+  Blort.java:9@001c: get-static-object(java.lang.System.out:Ljava/io/PrintStrea
+  m; catch) . <- .
+  next 002c
+block 001f
+  pred 002c
+  Blort.java:9@001f: const-object("foo" catch) . <- .
+  next 002d
+block 0021
+  pred 002d
+  Blort.java:9@0021: Rop{invoke-virtual . <- Ljava/io/PrintStream; Ljava/lang/S
+  tring; call throws <any>}(java.io.PrintStream.println:(Ljava/lang/String;)V c
+  atch) . <- v0:Ljava/io/PrintStream; v1:Ljava/lang/String;="foo"
+  next 0026
+block 0025
+  pred 002e
+  Blort.java:5@0000: move-param-object(0) v2:"this"LBlort; <- .
+  Blort.java:5@0000: move-param-int(1) v3:"foo"I <- .
+  Blort.java:5@0000: goto . <- .
+  next 0000
+block 0026
+  pred 0000
+  pred 0021
+  Blort.java:12@0024: return-void . <- .
+  returns
+block 002c
+  pred 001c
+  Blort.java:9@001c: Rop{move-result-pseudo Ljava/io/PrintStream; <- . flows} v
+  0:Ljava/io/PrintStream; <- .
+  Blort.java:9@001c: goto . <- .
+  next 001f
+block 002d
+  pred 001f
+  Blort.java:9@001f: Rop{move-result-pseudo Ljava/lang/String; <- . flows} v1:L
+  java/lang/String;="foo" <- .
+  Blort.java:9@001f: goto . <- .
+  next 0021
+block 002e
+  @????: goto . <- .
+  next 0025
+
+method testNoPrimarySuccessor ()V
+first 0012
+block 0000
+  pred 000a
+  Blort.java:16@0000: new-instance(java.lang.RuntimeException catch java.lang.R
+  untimeException) . <- .
+  next 0013
+  next 0011 *
+block 0003
+  pred 0011
+  Blort.java:16@0004: Rop{invoke-direct . <- Ljava/lang/RuntimeException; call 
+  throws <any>}(java.lang.RuntimeException.<init>:()V catch java.lang.RuntimeEx
+  ception) . <- v0:N0000Ljava/lang/RuntimeException;
+  next 0013
+  next 0007 *
+block 0007
+  pred 0003
+  Blort.java:16@0007: throw(catch java.lang.RuntimeException) . <- v0:Ljava/lan
+  g/RuntimeException;
+  next 0013
+block 000a
+  pred 0012
+  Blort.java:16@0000: move-param-object(0) v1:"this"LBlort; <- .
+  Blort.java:16@0000: goto . <- .
+  next 0000
+block 000b
+  pred 0013
+  Blort.java:19@0009: return-void . <- .
+  returns
+block 0011
+  pred 0000
+  Blort.java:16@0000: Rop{move-result-pseudo N0000Ljava/lang/RuntimeException; 
+  <- . flows} v0:N0000Ljava/lang/RuntimeException; <- .
+  Blort.java:16@0000: goto . <- .
+  next 0003
+block 0012
+  @????: goto . <- .
+  next 000a
+block 0013
+  pred 0000
+  pred 0003
+  pred 0007
+  Blort.java:17@0008: Rop{move-exception Ljava/lang/RuntimeException; <- . flow
+  s} v0:Ljava/lang/RuntimeException; <- .
+  @????: goto . <- .
+  next 000b
diff --git a/dx/tests/092-ssa-cfg-edge-cases/info.txt b/dx/tests/092-ssa-cfg-edge-cases/info.txt
new file mode 100644
index 0000000..7c56302
--- /dev/null
+++ b/dx/tests/092-ssa-cfg-edge-cases/info.txt
@@ -0,0 +1,5 @@
+This test case runs a few odd control flow graphs through the optimizer.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/092-ssa-cfg-edge-cases/run b/dx/tests/092-ssa-cfg-edge-cases/run
new file mode 100644
index 0000000..a7e6f27
--- /dev/null
+++ b/dx/tests/092-ssa-cfg-edge-cases/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --dump --optimize --rop-blocks Blort.class
diff --git a/dx/tests/093-ssa-invoke-range/Blort.class b/dx/tests/093-ssa-invoke-range/Blort.class
new file mode 100644
index 0000000..5d77b07
Binary files /dev/null and b/dx/tests/093-ssa-invoke-range/Blort.class differ
diff --git a/dx/tests/093-ssa-invoke-range/Blort.java b/dx/tests/093-ssa-invoke-range/Blort.java
new file mode 100644
index 0000000..f2bb66c
--- /dev/null
+++ b/dx/tests/093-ssa-invoke-range/Blort.java
@@ -0,0 +1,69 @@
+
+class Blort {
+
+    static void methodThatNeedsInvokeRange
+        (int a, int b, int c, int d, int e, int f) {
+    }
+
+    void testNoLocals() {
+        methodThatNeedsInvokeRange(5, 0, 5, 0, 5, 0);
+    }
+
+    void testMixedLocals() {
+        int src = 6;
+        int dest = 7;
+
+        methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0);
+        methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0);
+    }
+
+    // here the current algorithm partial-overlapping will stumble a bit
+    // The register containing "zero" will be marked as "reserved for locals"
+    // Then the subsequent arraycopy will need a whole new set of 5 registers
+    void testMixedWorseCase() {
+        int src = 6;
+        int dest = 7;
+        int zero = 0;
+
+        methodThatNeedsInvokeRange(src, zero, dest, 1, 5, 0);
+        methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0);
+    }
+
+    void testAllParams(int a, int b, int c, int d, int e, int f) {
+        methodThatNeedsInvokeRange(a, b, c, d, e, f);
+    }
+
+    // this could try to make use of param positions, but doesn't
+    static void testTailParams(int destPos, int length) {
+        int src = 6;
+        int dest = 7;
+
+        methodThatNeedsInvokeRange(src, 0, dest, 0, destPos, length);
+    }
+
+
+    // This presently requires a whole N new registers
+    void testFlip() {
+        int src = 6;
+        int dest = 7;
+
+        methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0);
+        methodThatNeedsInvokeRange(dest, 0, src, 1, 5, 0);
+    }
+
+    // ensure that an attempt to combine registers for a local
+    // with a differing category doesn't mess us up.
+    long testMixedCategory(boolean foo) {
+        if (foo) {
+            int offset = 1;
+            int src = 6;
+            int dest = 7;
+
+            methodThatNeedsInvokeRange(src, 0, dest, offset, 5, 0);
+            return offset;
+        } else {
+            long offset = System.currentTimeMillis();;
+            return offset;
+        }
+    }
+}
diff --git a/dx/tests/093-ssa-invoke-range/build b/dx/tests/093-ssa-invoke-range/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/093-ssa-invoke-range/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/093-ssa-invoke-range/expected.txt b/dx/tests/093-ssa-invoke-range/expected.txt
new file mode 100644
index 0000000..090a05f
--- /dev/null
+++ b/dx/tests/093-ssa-invoke-range/expected.txt
@@ -0,0 +1,300 @@
+reading Blort.class...
+method <init> ()V
+first 0007
+block 0000
+  pred 0005
+  Blort.java:2@0001: Rop{invoke-direct . <- Ljava/lang/Object; call throws <any
+  >}(java.lang.Object.<init>:()V catch) . <- v0:NffffLBlort;
+  next 0006
+block 0005
+  pred 0007
+  Blort.java:2@0000: move-param-object(0) v0:"this"NffffLBlort; <- .
+  Blort.java:2@0000: goto . <- .
+  next 0000
+block 0006
+  pred 0000
+  Blort.java:2@0004: return-void . <- .
+  returns
+block 0007
+  @????: goto . <- .
+  next 0005
+
+method methodThatNeedsInvokeRange (IIIIII)V
+first 0003
+block 0001
+  pred 0003
+  Blort.java:6@0000: move-param-int(0) v0:"a"I <- .
+  Blort.java:6@0000: move-param-int(1) v1:"b"I <- .
+  Blort.java:6@0000: move-param-int(2) v2:"c"I <- .
+  Blort.java:6@0000: move-param-int(3) v3:"d"I <- .
+  Blort.java:6@0000: move-param-int(4) v4:"e"I <- .
+  Blort.java:6@0000: move-param-int(5) v5:"f"I <- .
+  Blort.java:6@0000: goto . <- .
+  next 0002
+block 0002
+  pred 0001
+  Blort.java:6@0000: return-void . <- .
+  returns
+block 0003
+  @????: goto . <- .
+  next 0001
+
+method testNoLocals ()V
+first 000c
+block 0000
+  pred 000a
+  @????: move-int v2:I=5 <- v0:I=5
+  @????: move-int v3:I=0 <- v1:I=0
+  @????: move-int v4:I=5 <- v0:I=5
+  @????: move-int v5:I=0 <- v1:I=0
+  Blort.java:9@0006: Rop{invoke-static . <- I I I I I I call throws <any>}(Blor
+  t.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v0:I=5 v1:I=0 v2:I=5 v3:I=
+  0 v4:I=5 v5:I=0
+  next 000b
+block 000a
+  pred 000c
+  Blort.java:9@0000: move-param-object(0) v6:"this"LBlort; <- .
+  Blort.java:9@0000: goto . <- .
+  next 0000
+block 000b
+  pred 0000
+  Blort.java:10@0009: return-void . <- .
+  returns
+block 000c
+  @????: const-int(5) v0:I=5 <- .
+  @????: const-int(0) v1:I=0 <- .
+  @????: goto . <- .
+  next 000a
+
+method testMixedLocals ()V
+first 001b
+block 0000
+  pred 0019
+  Blort.java:13@0000: const-int(6) v0:I=6 <- .
+  @????: mark-local-int . <- v0:"src"I
+  Blort.java:14@0003: const-int(7) v2:I=7 <- .
+  @????: mark-local-int . <- v2:"dest"I
+  @????: move-int v5:I=0 <- v1:I=0
+  Blort.java:16@000c: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v0:I v1:I=0 v2:I v3:I=1 v
+  4:I=5 v5:I=0
+  next 000f
+block 000f
+  pred 0000
+  @????: move-int v5:I=0 <- v1:I=0
+  Blort.java:17@0015: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v0:I v1:I=0 v2:I v3:I=1 v
+  4:I=5 v5:I=0
+  next 001a
+block 0019
+  pred 001b
+  Blort.java:13@0000: move-param-object(0) v6:"this"LBlort; <- .
+  Blort.java:13@0000: goto . <- .
+  next 0000
+block 001a
+  pred 000f
+  Blort.java:18@0018: return-void . <- .
+  returns
+block 001b
+  @????: const-int(5) v4:I=5 <- .
+  @????: const-int(1) v3:I=1 <- .
+  @????: const-int(0) v1:I=0 <- .
+  @????: goto . <- .
+  next 0019
+
+method testMixedWorseCase ()V
+first 001d
+block 0000
+  pred 001b
+  Blort.java:24@0000: const-int(6) v0:I=6 <- .
+  @????: mark-local-int . <- v0:"src"I
+  Blort.java:25@0003: const-int(7) v2:I=7 <- .
+  @????: mark-local-int . <- v2:"dest"I
+  Blort.java:26@0006: const-int(0) v1:I=0 <- .
+  @????: mark-local-int . <- v1:"zero"I
+  Blort.java:28@000e: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v0:I v1:I v2:I v3:I=1 v4:
+  I=5 v5:I=0
+  next 0011
+block 0011
+  pred 0000
+  @????: move-int v6:I <- v0:I
+  @????: move-int v7:I=0 <- v5:I=0
+  @????: move-int v8:I <- v2:I
+  @????: move-int v9:I=1 <- v3:I=1
+  @????: move-int v10:I=5 <- v4:I=5
+  @????: move-int v11:I=0 <- v5:I=0
+  Blort.java:29@0017: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v6:I v7:I=0 v8:I v9:I=1 v
+  10:I=5 v11:I=0
+  next 001c
+block 001b
+  pred 001d
+  Blort.java:24@0000: move-param-object(0) v12:"this"LBlort; <- .
+  Blort.java:24@0000: goto . <- .
+  next 0000
+block 001c
+  pred 0011
+  Blort.java:30@001a: return-void . <- .
+  returns
+block 001d
+  @????: const-int(5) v4:I=5 <- .
+  @????: const-int(1) v3:I=1 <- .
+  @????: const-int(0) v5:I=0 <- .
+  @????: goto . <- .
+  next 001b
+
+method testAllParams (IIIIII)V
+first 000f
+block 0000
+  pred 000d
+  Blort.java:33@0009: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v1:I v2:I v3:I v4:I v5:I 
+  v6:I
+  next 000e
+block 000d
+  pred 000f
+  Blort.java:33@0000: move-param-object(0) v0:"this"LBlort; <- .
+  Blort.java:33@0000: move-param-int(1) v1:"a"I <- .
+  Blort.java:33@0000: move-param-int(2) v2:"b"I <- .
+  Blort.java:33@0000: move-param-int(3) v3:"c"I <- .
+  Blort.java:33@0000: move-param-int(4) v4:"d"I <- .
+  Blort.java:33@0000: move-param-int(5) v5:"e"I <- .
+  Blort.java:33@0000: move-param-int(6) v6:"f"I <- .
+  Blort.java:33@0000: goto . <- .
+  next 0000
+block 000e
+  pred 0000
+  Blort.java:34@000c: return-void . <- .
+  returns
+block 000f
+  @????: goto . <- .
+  next 000d
+
+method testTailParams (II)V
+first 0012
+block 0000
+  pred 0010
+  Blort.java:38@0000: const-int(6) v0:I=6 <- .
+  @????: mark-local-int . <- v0:"src"I
+  Blort.java:39@0003: const-int(7) v2:I=7 <- .
+  @????: mark-local-int . <- v2:"dest"I
+  @????: move-int v3:I=0 <- v1:I=0
+  @????: move-int v4:I <- v6:I
+  @????: move-int v5:I <- v7:I
+  Blort.java:41@000c: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v0:I v1:I=0 v2:I v3:I=0 v
+  4:I v5:I
+  next 0011
+block 0010
+  pred 0012
+  Blort.java:38@0000: move-param-int(0) v6:"destPos"I <- .
+  Blort.java:38@0000: move-param-int(1) v7:"length"I <- .
+  Blort.java:38@0000: goto . <- .
+  next 0000
+block 0011
+  pred 0000
+  Blort.java:42@000f: return-void . <- .
+  returns
+block 0012
+  @????: const-int(0) v1:I=0 <- .
+  @????: goto . <- .
+  next 0010
+
+method testFlip ()V
+first 001b
+block 0000
+  pred 0019
+  Blort.java:47@0000: const-int(6) v0:I=6 <- .
+  @????: mark-local-int . <- v0:"src"I
+  Blort.java:48@0003: const-int(7) v2:I=7 <- .
+  @????: mark-local-int . <- v2:"dest"I
+  @????: move-int v5:I=0 <- v1:I=0
+  Blort.java:50@000c: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v0:I v1:I=0 v2:I v3:I=1 v
+  4:I=5 v5:I=0
+  next 000f
+block 000f
+  pred 0000
+  @????: move-int v5:I <- v2:I
+  @????: move-int v6:I=0 <- v1:I=0
+  @????: move-int v7:I <- v0:I
+  @????: move-int v8:I=1 <- v3:I=1
+  @????: move-int v9:I=5 <- v4:I=5
+  @????: move-int v10:I=0 <- v1:I=0
+  Blort.java:51@0015: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v5:I v6:I=0 v7:I v8:I=1 v
+  9:I=5 v10:I=0
+  next 001a
+block 0019
+  pred 001b
+  Blort.java:47@0000: move-param-object(0) v11:"this"LBlort; <- .
+  Blort.java:47@0000: goto . <- .
+  next 0000
+block 001a
+  pred 000f
+  Blort.java:52@0018: return-void . <- .
+  returns
+block 001b
+  @????: const-int(5) v4:I=5 <- .
+  @????: const-int(1) v3:I=1 <- .
+  @????: const-int(0) v1:I=0 <- .
+  @????: goto . <- .
+  next 0019
+
+method testMixedCategory (Z)J
+first 0026
+block 0000
+  pred 001e
+  Blort.java:57@0001: if-eqz-int . <- v9:I
+  next 0004 *
+  next 001a
+block 0004
+  pred 0000
+  Blort.java:58@0004: const-int(1) v3:I=1 <- .
+  @????: mark-local-int . <- v3:"offset"I
+  Blort.java:59@0006: const-int(6) v0:I=6 <- .
+  @????: mark-local-int . <- v0:"src"I
+  Blort.java:60@0009: const-int(7) v2:I=7 <- .
+  @????: mark-local-int . <- v2:"dest"I
+  Blort.java:62@0012: const-int(5) v4:I=5 <- .
+  @????: move-int v5:I=0 <- v1:I=0
+  Blort.java:62@0014: Rop{invoke-static . <- I I I I I I call throws <any>}(Blo
+  rt.methodThatNeedsInvokeRange:(IIIIII)V catch) . <- v0:I v1:I=0 v2:I v3:I v4:
+  I=5 v5:I=0
+  next 0017
+block 0017
+  pred 0004
+  Blort.java:63@0018: conv-i2l v6:J <- v3:I
+  Blort.java:63@0019: goto . <- .
+  next 001f
+block 001a
+  pred 0000
+  Blort.java:65@001a: Rop{invoke-static . <- . call throws <any>}(java.lang.Sys
+  tem.currentTimeMillis:()J catch) . <- .
+  next 0025
+block 001d
+  pred 0025
+  @????: mark-local-long . <- v6:"offset"J
+  Blort.java:66@001f: goto . <- .
+  next 001f
+block 001e
+  pred 0026
+  Blort.java:57@0000: move-param-object(0) v8:"this"LBlort; <- .
+  Blort.java:57@0000: move-param-int(1) v9:"foo"Z <- .
+  Blort.java:57@0000: goto . <- .
+  next 0000
+block 001f
+  pred 0017
+  pred 001d
+  Blort.java:66@001f: return-long . <- v6:J
+  returns
+block 0025
+  pred 001a
+  Blort.java:65@001a: Rop{move-result J <- . flows} v6:J <- .
+  Blort.java:65@001a: goto . <- .
+  next 001d
+block 0026
+  @????: const-int(0) v1:I=0 <- .
+  @????: goto . <- .
+  next 001e
diff --git a/dx/tests/093-ssa-invoke-range/info.txt b/dx/tests/093-ssa-invoke-range/info.txt
new file mode 100644
index 0000000..372bed7
--- /dev/null
+++ b/dx/tests/093-ssa-invoke-range/info.txt
@@ -0,0 +1,6 @@
+This test case checks the ability of the register allocator to plan
+for dex's invoke-range instruction.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/093-ssa-invoke-range/run b/dx/tests/093-ssa-invoke-range/run
new file mode 100644
index 0000000..bbce10a
--- /dev/null
+++ b/dx/tests/093-ssa-invoke-range/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+dx --dump --optimize --rop-blocks Blort.class
diff --git a/dx/tests/094-scala-locals/Blort.class b/dx/tests/094-scala-locals/Blort.class
new file mode 100644
index 0000000..aa6ea94
Binary files /dev/null and b/dx/tests/094-scala-locals/Blort.class differ
diff --git a/dx/tests/094-scala-locals/blort.j b/dx/tests/094-scala-locals/blort.j
new file mode 100644
index 0000000..7c711ef
--- /dev/null
+++ b/dx/tests/094-scala-locals/blort.j
@@ -0,0 +1,44 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class Blort
+.super java/lang/Object
+
+.method public static returnint()I
+    .limit stack 1
+    ldc 10
+    ireturn
+.end method
+
+.method public static scalalocals()V
+    .limit locals 5
+    .limit stack 5
+    .var 4 is x I from start to end
+start:
+    invokestatic blort/returnint()I
+    invokestatic blort/returnint()I
+    invokestatic blort/returnint()I
+    invokestatic blort/returnint()I
+    dup
+    istore 4
+    istore 2
+    istore 3
+    istore 1
+    istore 0
+    iload_2
+    istore 4
+    iload_3
+end:
+    return
+.end method
diff --git a/dx/tests/094-scala-locals/build b/dx/tests/094-scala-locals/build
new file mode 100644
index 0000000..2eeaff6
--- /dev/null
+++ b/dx/tests/094-scala-locals/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j >/dev/null
diff --git a/dx/tests/094-scala-locals/expected.txt b/dx/tests/094-scala-locals/expected.txt
new file mode 100644
index 0000000..a75c929
--- /dev/null
+++ b/dx/tests/094-scala-locals/expected.txt
@@ -0,0 +1,85 @@
+reading Blort.class...
+method scalalocals ()V
+first 0018
+block 0000
+  pred 000d
+  live in:{}
+  blort.j:@0000: Rop{invoke-static . <- . call throws <any>}(blort.returnint:()
+  I catch) . <- .
+  next 0014
+  live out:{}
+block 0003
+  pred 0014
+  live in:{}
+  blort.j:@0003: Rop{invoke-static . <- . call throws <any>}(blort.returnint:()
+  I catch) . <- .
+  next 0015
+  live out:{}
+block 0006
+  pred 0015
+  live in:{}
+  blort.j:@0006: Rop{invoke-static . <- . call throws <any>}(blort.returnint:()
+  I catch) . <- .
+  next 0016
+  live out:{}
+block 0009
+  pred 0016
+  live in:{}
+  blort.j:@0009: Rop{invoke-static . <- . call throws <any>}(blort.returnint:()
+  I catch) . <- .
+  next 0017
+  live out:{}
+block 000c
+  pred 0017
+  live in:{14}
+  @????: mark-local-int . <- v14:"x"I
+  blort.j:@001b: goto . <- .
+  next 000e
+  live out:{}
+block 000d
+  pred 0018
+  live in:{}
+  blort.j:@0000: goto . <- .
+  next 0000
+  live out:{}
+block 000e
+  pred 000c
+  live in:{}
+  blort.j:@001b: return-void . <- .
+  next 0019
+  live out:{}
+block 0014
+  pred 0000
+  live in:{}
+  blort.j:@0000: goto . <- .
+  next 0003
+  live out:{}
+block 0015
+  pred 0003
+  live in:{}
+  blort.j:@0003: goto . <- .
+  next 0006
+  live out:{}
+block 0016
+  pred 0006
+  live in:{}
+  blort.j:@0006: goto . <- .
+  next 0009
+  live out:{}
+block 0017
+  pred 0009
+  live in:{}
+  blort.j:@0009: Rop{move-result I <- . flows} v14:I <- .
+  blort.j:@0009: goto . <- .
+  next 000c
+  live out:{14}
+block 0018
+  live in:{}
+  @????: goto . <- .
+  next 000d
+  live out:{}
+block 0019
+  pred 000e
+  live in:{}
+  returns
+  live out:{}
diff --git a/dx/tests/094-scala-locals/info.txt b/dx/tests/094-scala-locals/info.txt
new file mode 100644
index 0000000..cb1a42e
--- /dev/null
+++ b/dx/tests/094-scala-locals/info.txt
@@ -0,0 +1,8 @@
+This is a smoke test of the SSA renamer's local variable preserver.
+It tests a case observed from Scala, wherein a local variable is assigned
+an identical value twice. The correct result should be only a single
+mark-local, with the second assignment eaten by copy-propogation.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/094-scala-locals/run b/dx/tests/094-scala-locals/run
new file mode 100644
index 0000000..9402578
--- /dev/null
+++ b/dx/tests/094-scala-locals/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --ssa-blocks  --method=scalalocals Blort.class
diff --git a/dx/tests/095-dex-const-string-jumbo/Blort.java b/dx/tests/095-dex-const-string-jumbo/Blort.java
new file mode 100644
index 0000000..a0271b5
--- /dev/null
+++ b/dx/tests/095-dex-const-string-jumbo/Blort.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort {
+    static public void consume(String s) {
+        // This space intentionally left blank.
+    }
+
+    public void test() {
+        consume("zorch");
+    }
+}
diff --git a/dx/tests/095-dex-const-string-jumbo/expected.txt b/dx/tests/095-dex-const-string-jumbo/expected.txt
new file mode 100644
index 0000000..a4014d9
--- /dev/null
+++ b/dx/tests/095-dex-const-string-jumbo/expected.txt
@@ -0,0 +1,6 @@
+Blort.test:()V:
+regs: 0003; ins: 0001; outs: 0001
+  0000: move-object v0, v2
+  0001: const-string/jumbo v1, "zorch"
+  0004: invoke-static {v1}, Blort.consume:(Ljava/lang/String;)V
+  0007: return-void
diff --git a/dx/tests/095-dex-const-string-jumbo/info.txt b/dx/tests/095-dex-const-string-jumbo/info.txt
new file mode 100644
index 0000000..c14fd8e
--- /dev/null
+++ b/dx/tests/095-dex-const-string-jumbo/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+const-string/jumbo gets emitted appropriately.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/095-dex-const-string-jumbo/run b/dx/tests/095-dex-const-string-jumbo/run
new file mode 100644
index 0000000..65abd0e
--- /dev/null
+++ b/dx/tests/095-dex-const-string-jumbo/run
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+# Write out files with 32768 total static string declarations, so that
+# the reference to "zorch" in the real test file will be guaranteed to
+# need a jumbo string reference (it sorts last after all the others).
+# Note: Each string reference is stored in a separate static variable,
+# and that variable's name is also represented in the strings, which
+# is why we can just have 32768 and not 65536 declarations.
+
+awk '
+BEGIN {
+    writeFile("Zorch1", 0, 16383);
+    writeFile("Zorch2", 16384, 32767);
+}
+function writeFile(name, start, end) {
+    fileName = name ".java";
+    printf("public class %s {\n", name) > fileName;
+    for (i = start; i <= end; i++) {
+        printf("    static public final String s%d = \"%d\";\n",
+            i, i) > fileName;
+    }
+    printf("}\n") > fileName;
+}'
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Blort.test *.class
diff --git a/dx/tests/096-dex-giant-catch/Blort.class b/dx/tests/096-dex-giant-catch/Blort.class
new file mode 100644
index 0000000..23ad6fb
Binary files /dev/null and b/dx/tests/096-dex-giant-catch/Blort.class differ
diff --git a/dx/tests/096-dex-giant-catch/Blort.java b/dx/tests/096-dex-giant-catch/Blort.java
new file mode 100644
index 0000000..f5f6e8d
--- /dev/null
+++ b/dx/tests/096-dex-giant-catch/Blort.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort {
+    static public void blort(long v1, long v2, long v3, long v4,
+            long v5, long v6, long v7, long v8) {
+        // This space intentionally left blank.
+    }
+}
diff --git a/dx/tests/096-dex-giant-catch/Zorch.class b/dx/tests/096-dex-giant-catch/Zorch.class
new file mode 100644
index 0000000..61136df
Binary files /dev/null and b/dx/tests/096-dex-giant-catch/Zorch.class differ
diff --git a/dx/tests/096-dex-giant-catch/Zorch.java b/dx/tests/096-dex-giant-catch/Zorch.java
new file mode 100644
index 0000000..09a363f
--- /dev/null
+++ b/dx/tests/096-dex-giant-catch/Zorch.java
@@ -0,0 +1,1809 @@
+public class Zorch {
+    static public void test() {
+        try {
+    Blort.blort(1001000000L, 2001000001L, 3001000002L, 4001000003L, 5001000004L, 6001000005L, 7001000006L, 8001000007L);
+    Blort.blort(1001000001L, 2001000002L, 3001000003L, 4001000004L, 5001000005L, 6001000006L, 7001000007L, 8001000008L);
+    Blort.blort(1001000002L, 2001000003L, 3001000004L, 4001000005L, 5001000006L, 6001000007L, 7001000008L, 8001000009L);
+    Blort.blort(1001000003L, 2001000004L, 3001000005L, 4001000006L, 5001000007L, 6001000008L, 7001000009L, 8001000010L);
+    Blort.blort(1001000004L, 2001000005L, 3001000006L, 4001000007L, 5001000008L, 6001000009L, 7001000010L, 8001000011L);
+    Blort.blort(1001000005L, 2001000006L, 3001000007L, 4001000008L, 5001000009L, 6001000010L, 7001000011L, 8001000012L);
+    Blort.blort(1001000006L, 2001000007L, 3001000008L, 4001000009L, 5001000010L, 6001000011L, 7001000012L, 8001000013L);
+    Blort.blort(1001000007L, 2001000008L, 3001000009L, 4001000010L, 5001000011L, 6001000012L, 7001000013L, 8001000014L);
+    Blort.blort(1001000008L, 2001000009L, 3001000010L, 4001000011L, 5001000012L, 6001000013L, 7001000014L, 8001000015L);
+    Blort.blort(1001000009L, 2001000010L, 3001000011L, 4001000012L, 5001000013L, 6001000014L, 7001000015L, 8001000016L);
+    Blort.blort(1001000010L, 2001000011L, 3001000012L, 4001000013L, 5001000014L, 6001000015L, 7001000016L, 8001000017L);
+    Blort.blort(1001000011L, 2001000012L, 3001000013L, 4001000014L, 5001000015L, 6001000016L, 7001000017L, 8001000018L);
+    Blort.blort(1001000012L, 2001000013L, 3001000014L, 4001000015L, 5001000016L, 6001000017L, 7001000018L, 8001000019L);
+    Blort.blort(1001000013L, 2001000014L, 3001000015L, 4001000016L, 5001000017L, 6001000018L, 7001000019L, 8001000020L);
+    Blort.blort(1001000014L, 2001000015L, 3001000016L, 4001000017L, 5001000018L, 6001000019L, 7001000020L, 8001000021L);
+    Blort.blort(1001000015L, 2001000016L, 3001000017L, 4001000018L, 5001000019L, 6001000020L, 7001000021L, 8001000022L);
+    Blort.blort(1001000016L, 2001000017L, 3001000018L, 4001000019L, 5001000020L, 6001000021L, 7001000022L, 8001000023L);
+    Blort.blort(1001000017L, 2001000018L, 3001000019L, 4001000020L, 5001000021L, 6001000022L, 7001000023L, 8001000024L);
+    Blort.blort(1001000018L, 2001000019L, 3001000020L, 4001000021L, 5001000022L, 6001000023L, 7001000024L, 8001000025L);
+    Blort.blort(1001000019L, 2001000020L, 3001000021L, 4001000022L, 5001000023L, 6001000024L, 7001000025L, 8001000026L);
+    Blort.blort(1001000020L, 2001000021L, 3001000022L, 4001000023L, 5001000024L, 6001000025L, 7001000026L, 8001000027L);
+    Blort.blort(1001000021L, 2001000022L, 3001000023L, 4001000024L, 5001000025L, 6001000026L, 7001000027L, 8001000028L);
+    Blort.blort(1001000022L, 2001000023L, 3001000024L, 4001000025L, 5001000026L, 6001000027L, 7001000028L, 8001000029L);
+    Blort.blort(1001000023L, 2001000024L, 3001000025L, 4001000026L, 5001000027L, 6001000028L, 7001000029L, 8001000030L);
+    Blort.blort(1001000024L, 2001000025L, 3001000026L, 4001000027L, 5001000028L, 6001000029L, 7001000030L, 8001000031L);
+    Blort.blort(1001000025L, 2001000026L, 3001000027L, 4001000028L, 5001000029L, 6001000030L, 7001000031L, 8001000032L);
+    Blort.blort(1001000026L, 2001000027L, 3001000028L, 4001000029L, 5001000030L, 6001000031L, 7001000032L, 8001000033L);
+    Blort.blort(1001000027L, 2001000028L, 3001000029L, 4001000030L, 5001000031L, 6001000032L, 7001000033L, 8001000034L);
+    Blort.blort(1001000028L, 2001000029L, 3001000030L, 4001000031L, 5001000032L, 6001000033L, 7001000034L, 8001000035L);
+    Blort.blort(1001000029L, 2001000030L, 3001000031L, 4001000032L, 5001000033L, 6001000034L, 7001000035L, 8001000036L);
+    Blort.blort(1001000030L, 2001000031L, 3001000032L, 4001000033L, 5001000034L, 6001000035L, 7001000036L, 8001000037L);
+    Blort.blort(1001000031L, 2001000032L, 3001000033L, 4001000034L, 5001000035L, 6001000036L, 7001000037L, 8001000038L);
+    Blort.blort(1001000032L, 2001000033L, 3001000034L, 4001000035L, 5001000036L, 6001000037L, 7001000038L, 8001000039L);
+    Blort.blort(1001000033L, 2001000034L, 3001000035L, 4001000036L, 5001000037L, 6001000038L, 7001000039L, 8001000040L);
+    Blort.blort(1001000034L, 2001000035L, 3001000036L, 4001000037L, 5001000038L, 6001000039L, 7001000040L, 8001000041L);
+    Blort.blort(1001000035L, 2001000036L, 3001000037L, 4001000038L, 5001000039L, 6001000040L, 7001000041L, 8001000042L);
+    Blort.blort(1001000036L, 2001000037L, 3001000038L, 4001000039L, 5001000040L, 6001000041L, 7001000042L, 8001000043L);
+    Blort.blort(1001000037L, 2001000038L, 3001000039L, 4001000040L, 5001000041L, 6001000042L, 7001000043L, 8001000044L);
+    Blort.blort(1001000038L, 2001000039L, 3001000040L, 4001000041L, 5001000042L, 6001000043L, 7001000044L, 8001000045L);
+    Blort.blort(1001000039L, 2001000040L, 3001000041L, 4001000042L, 5001000043L, 6001000044L, 7001000045L, 8001000046L);
+    Blort.blort(1001000040L, 2001000041L, 3001000042L, 4001000043L, 5001000044L, 6001000045L, 7001000046L, 8001000047L);
+    Blort.blort(1001000041L, 2001000042L, 3001000043L, 4001000044L, 5001000045L, 6001000046L, 7001000047L, 8001000048L);
+    Blort.blort(1001000042L, 2001000043L, 3001000044L, 4001000045L, 5001000046L, 6001000047L, 7001000048L, 8001000049L);
+    Blort.blort(1001000043L, 2001000044L, 3001000045L, 4001000046L, 5001000047L, 6001000048L, 7001000049L, 8001000050L);
+    Blort.blort(1001000044L, 2001000045L, 3001000046L, 4001000047L, 5001000048L, 6001000049L, 7001000050L, 8001000051L);
+    Blort.blort(1001000045L, 2001000046L, 3001000047L, 4001000048L, 5001000049L, 6001000050L, 7001000051L, 8001000052L);
+    Blort.blort(1001000046L, 2001000047L, 3001000048L, 4001000049L, 5001000050L, 6001000051L, 7001000052L, 8001000053L);
+    Blort.blort(1001000047L, 2001000048L, 3001000049L, 4001000050L, 5001000051L, 6001000052L, 7001000053L, 8001000054L);
+    Blort.blort(1001000048L, 2001000049L, 3001000050L, 4001000051L, 5001000052L, 6001000053L, 7001000054L, 8001000055L);
+    Blort.blort(1001000049L, 2001000050L, 3001000051L, 4001000052L, 5001000053L, 6001000054L, 7001000055L, 8001000056L);
+    Blort.blort(1001000050L, 2001000051L, 3001000052L, 4001000053L, 5001000054L, 6001000055L, 7001000056L, 8001000057L);
+    Blort.blort(1001000051L, 2001000052L, 3001000053L, 4001000054L, 5001000055L, 6001000056L, 7001000057L, 8001000058L);
+    Blort.blort(1001000052L, 2001000053L, 3001000054L, 4001000055L, 5001000056L, 6001000057L, 7001000058L, 8001000059L);
+    Blort.blort(1001000053L, 2001000054L, 3001000055L, 4001000056L, 5001000057L, 6001000058L, 7001000059L, 8001000060L);
+    Blort.blort(1001000054L, 2001000055L, 3001000056L, 4001000057L, 5001000058L, 6001000059L, 7001000060L, 8001000061L);
+    Blort.blort(1001000055L, 2001000056L, 3001000057L, 4001000058L, 5001000059L, 6001000060L, 7001000061L, 8001000062L);
+    Blort.blort(1001000056L, 2001000057L, 3001000058L, 4001000059L, 5001000060L, 6001000061L, 7001000062L, 8001000063L);
+    Blort.blort(1001000057L, 2001000058L, 3001000059L, 4001000060L, 5001000061L, 6001000062L, 7001000063L, 8001000064L);
+    Blort.blort(1001000058L, 2001000059L, 3001000060L, 4001000061L, 5001000062L, 6001000063L, 7001000064L, 8001000065L);
+    Blort.blort(1001000059L, 2001000060L, 3001000061L, 4001000062L, 5001000063L, 6001000064L, 7001000065L, 8001000066L);
+    Blort.blort(1001000060L, 2001000061L, 3001000062L, 4001000063L, 5001000064L, 6001000065L, 7001000066L, 8001000067L);
+    Blort.blort(1001000061L, 2001000062L, 3001000063L, 4001000064L, 5001000065L, 6001000066L, 7001000067L, 8001000068L);
+    Blort.blort(1001000062L, 2001000063L, 3001000064L, 4001000065L, 5001000066L, 6001000067L, 7001000068L, 8001000069L);
+    Blort.blort(1001000063L, 2001000064L, 3001000065L, 4001000066L, 5001000067L, 6001000068L, 7001000069L, 8001000070L);
+    Blort.blort(1001000064L, 2001000065L, 3001000066L, 4001000067L, 5001000068L, 6001000069L, 7001000070L, 8001000071L);
+    Blort.blort(1001000065L, 2001000066L, 3001000067L, 4001000068L, 5001000069L, 6001000070L, 7001000071L, 8001000072L);
+    Blort.blort(1001000066L, 2001000067L, 3001000068L, 4001000069L, 5001000070L, 6001000071L, 7001000072L, 8001000073L);
+    Blort.blort(1001000067L, 2001000068L, 3001000069L, 4001000070L, 5001000071L, 6001000072L, 7001000073L, 8001000074L);
+    Blort.blort(1001000068L, 2001000069L, 3001000070L, 4001000071L, 5001000072L, 6001000073L, 7001000074L, 8001000075L);
+    Blort.blort(1001000069L, 2001000070L, 3001000071L, 4001000072L, 5001000073L, 6001000074L, 7001000075L, 8001000076L);
+    Blort.blort(1001000070L, 2001000071L, 3001000072L, 4001000073L, 5001000074L, 6001000075L, 7001000076L, 8001000077L);
+    Blort.blort(1001000071L, 2001000072L, 3001000073L, 4001000074L, 5001000075L, 6001000076L, 7001000077L, 8001000078L);
+    Blort.blort(1001000072L, 2001000073L, 3001000074L, 4001000075L, 5001000076L, 6001000077L, 7001000078L, 8001000079L);
+    Blort.blort(1001000073L, 2001000074L, 3001000075L, 4001000076L, 5001000077L, 6001000078L, 7001000079L, 8001000080L);
+    Blort.blort(1001000074L, 2001000075L, 3001000076L, 4001000077L, 5001000078L, 6001000079L, 7001000080L, 8001000081L);
+    Blort.blort(1001000075L, 2001000076L, 3001000077L, 4001000078L, 5001000079L, 6001000080L, 7001000081L, 8001000082L);
+    Blort.blort(1001000076L, 2001000077L, 3001000078L, 4001000079L, 5001000080L, 6001000081L, 7001000082L, 8001000083L);
+    Blort.blort(1001000077L, 2001000078L, 3001000079L, 4001000080L, 5001000081L, 6001000082L, 7001000083L, 8001000084L);
+    Blort.blort(1001000078L, 2001000079L, 3001000080L, 4001000081L, 5001000082L, 6001000083L, 7001000084L, 8001000085L);
+    Blort.blort(1001000079L, 2001000080L, 3001000081L, 4001000082L, 5001000083L, 6001000084L, 7001000085L, 8001000086L);
+    Blort.blort(1001000080L, 2001000081L, 3001000082L, 4001000083L, 5001000084L, 6001000085L, 7001000086L, 8001000087L);
+    Blort.blort(1001000081L, 2001000082L, 3001000083L, 4001000084L, 5001000085L, 6001000086L, 7001000087L, 8001000088L);
+    Blort.blort(1001000082L, 2001000083L, 3001000084L, 4001000085L, 5001000086L, 6001000087L, 7001000088L, 8001000089L);
+    Blort.blort(1001000083L, 2001000084L, 3001000085L, 4001000086L, 5001000087L, 6001000088L, 7001000089L, 8001000090L);
+    Blort.blort(1001000084L, 2001000085L, 3001000086L, 4001000087L, 5001000088L, 6001000089L, 7001000090L, 8001000091L);
+    Blort.blort(1001000085L, 2001000086L, 3001000087L, 4001000088L, 5001000089L, 6001000090L, 7001000091L, 8001000092L);
+    Blort.blort(1001000086L, 2001000087L, 3001000088L, 4001000089L, 5001000090L, 6001000091L, 7001000092L, 8001000093L);
+    Blort.blort(1001000087L, 2001000088L, 3001000089L, 4001000090L, 5001000091L, 6001000092L, 7001000093L, 8001000094L);
+    Blort.blort(1001000088L, 2001000089L, 3001000090L, 4001000091L, 5001000092L, 6001000093L, 7001000094L, 8001000095L);
+    Blort.blort(1001000089L, 2001000090L, 3001000091L, 4001000092L, 5001000093L, 6001000094L, 7001000095L, 8001000096L);
+    Blort.blort(1001000090L, 2001000091L, 3001000092L, 4001000093L, 5001000094L, 6001000095L, 7001000096L, 8001000097L);
+    Blort.blort(1001000091L, 2001000092L, 3001000093L, 4001000094L, 5001000095L, 6001000096L, 7001000097L, 8001000098L);
+    Blort.blort(1001000092L, 2001000093L, 3001000094L, 4001000095L, 5001000096L, 6001000097L, 7001000098L, 8001000099L);
+    Blort.blort(1001000093L, 2001000094L, 3001000095L, 4001000096L, 5001000097L, 6001000098L, 7001000099L, 8001000100L);
+    Blort.blort(1001000094L, 2001000095L, 3001000096L, 4001000097L, 5001000098L, 6001000099L, 7001000100L, 8001000101L);
+    Blort.blort(1001000095L, 2001000096L, 3001000097L, 4001000098L, 5001000099L, 6001000100L, 7001000101L, 8001000102L);
+    Blort.blort(1001000096L, 2001000097L, 3001000098L, 4001000099L, 5001000100L, 6001000101L, 7001000102L, 8001000103L);
+    Blort.blort(1001000097L, 2001000098L, 3001000099L, 4001000100L, 5001000101L, 6001000102L, 7001000103L, 8001000104L);
+    Blort.blort(1001000098L, 2001000099L, 3001000100L, 4001000101L, 5001000102L, 6001000103L, 7001000104L, 8001000105L);
+    Blort.blort(1001000099L, 2001000100L, 3001000101L, 4001000102L, 5001000103L, 6001000104L, 7001000105L, 8001000106L);
+    Blort.blort(1001000100L, 2001000101L, 3001000102L, 4001000103L, 5001000104L, 6001000105L, 7001000106L, 8001000107L);
+    Blort.blort(1001000101L, 2001000102L, 3001000103L, 4001000104L, 5001000105L, 6001000106L, 7001000107L, 8001000108L);
+    Blort.blort(1001000102L, 2001000103L, 3001000104L, 4001000105L, 5001000106L, 6001000107L, 7001000108L, 8001000109L);
+    Blort.blort(1001000103L, 2001000104L, 3001000105L, 4001000106L, 5001000107L, 6001000108L, 7001000109L, 8001000110L);
+    Blort.blort(1001000104L, 2001000105L, 3001000106L, 4001000107L, 5001000108L, 6001000109L, 7001000110L, 8001000111L);
+    Blort.blort(1001000105L, 2001000106L, 3001000107L, 4001000108L, 5001000109L, 6001000110L, 7001000111L, 8001000112L);
+    Blort.blort(1001000106L, 2001000107L, 3001000108L, 4001000109L, 5001000110L, 6001000111L, 7001000112L, 8001000113L);
+    Blort.blort(1001000107L, 2001000108L, 3001000109L, 4001000110L, 5001000111L, 6001000112L, 7001000113L, 8001000114L);
+    Blort.blort(1001000108L, 2001000109L, 3001000110L, 4001000111L, 5001000112L, 6001000113L, 7001000114L, 8001000115L);
+    Blort.blort(1001000109L, 2001000110L, 3001000111L, 4001000112L, 5001000113L, 6001000114L, 7001000115L, 8001000116L);
+    Blort.blort(1001000110L, 2001000111L, 3001000112L, 4001000113L, 5001000114L, 6001000115L, 7001000116L, 8001000117L);
+    Blort.blort(1001000111L, 2001000112L, 3001000113L, 4001000114L, 5001000115L, 6001000116L, 7001000117L, 8001000118L);
+    Blort.blort(1001000112L, 2001000113L, 3001000114L, 4001000115L, 5001000116L, 6001000117L, 7001000118L, 8001000119L);
+    Blort.blort(1001000113L, 2001000114L, 3001000115L, 4001000116L, 5001000117L, 6001000118L, 7001000119L, 8001000120L);
+    Blort.blort(1001000114L, 2001000115L, 3001000116L, 4001000117L, 5001000118L, 6001000119L, 7001000120L, 8001000121L);
+    Blort.blort(1001000115L, 2001000116L, 3001000117L, 4001000118L, 5001000119L, 6001000120L, 7001000121L, 8001000122L);
+    Blort.blort(1001000116L, 2001000117L, 3001000118L, 4001000119L, 5001000120L, 6001000121L, 7001000122L, 8001000123L);
+    Blort.blort(1001000117L, 2001000118L, 3001000119L, 4001000120L, 5001000121L, 6001000122L, 7001000123L, 8001000124L);
+    Blort.blort(1001000118L, 2001000119L, 3001000120L, 4001000121L, 5001000122L, 6001000123L, 7001000124L, 8001000125L);
+    Blort.blort(1001000119L, 2001000120L, 3001000121L, 4001000122L, 5001000123L, 6001000124L, 7001000125L, 8001000126L);
+    Blort.blort(1001000120L, 2001000121L, 3001000122L, 4001000123L, 5001000124L, 6001000125L, 7001000126L, 8001000127L);
+    Blort.blort(1001000121L, 2001000122L, 3001000123L, 4001000124L, 5001000125L, 6001000126L, 7001000127L, 8001000128L);
+    Blort.blort(1001000122L, 2001000123L, 3001000124L, 4001000125L, 5001000126L, 6001000127L, 7001000128L, 8001000129L);
+    Blort.blort(1001000123L, 2001000124L, 3001000125L, 4001000126L, 5001000127L, 6001000128L, 7001000129L, 8001000130L);
+    Blort.blort(1001000124L, 2001000125L, 3001000126L, 4001000127L, 5001000128L, 6001000129L, 7001000130L, 8001000131L);
+    Blort.blort(1001000125L, 2001000126L, 3001000127L, 4001000128L, 5001000129L, 6001000130L, 7001000131L, 8001000132L);
+    Blort.blort(1001000126L, 2001000127L, 3001000128L, 4001000129L, 5001000130L, 6001000131L, 7001000132L, 8001000133L);
+    Blort.blort(1001000127L, 2001000128L, 3001000129L, 4001000130L, 5001000131L, 6001000132L, 7001000133L, 8001000134L);
+    Blort.blort(1001000128L, 2001000129L, 3001000130L, 4001000131L, 5001000132L, 6001000133L, 7001000134L, 8001000135L);
+    Blort.blort(1001000129L, 2001000130L, 3001000131L, 4001000132L, 5001000133L, 6001000134L, 7001000135L, 8001000136L);
+    Blort.blort(1001000130L, 2001000131L, 3001000132L, 4001000133L, 5001000134L, 6001000135L, 7001000136L, 8001000137L);
+    Blort.blort(1001000131L, 2001000132L, 3001000133L, 4001000134L, 5001000135L, 6001000136L, 7001000137L, 8001000138L);
+    Blort.blort(1001000132L, 2001000133L, 3001000134L, 4001000135L, 5001000136L, 6001000137L, 7001000138L, 8001000139L);
+    Blort.blort(1001000133L, 2001000134L, 3001000135L, 4001000136L, 5001000137L, 6001000138L, 7001000139L, 8001000140L);
+    Blort.blort(1001000134L, 2001000135L, 3001000136L, 4001000137L, 5001000138L, 6001000139L, 7001000140L, 8001000141L);
+    Blort.blort(1001000135L, 2001000136L, 3001000137L, 4001000138L, 5001000139L, 6001000140L, 7001000141L, 8001000142L);
+    Blort.blort(1001000136L, 2001000137L, 3001000138L, 4001000139L, 5001000140L, 6001000141L, 7001000142L, 8001000143L);
+    Blort.blort(1001000137L, 2001000138L, 3001000139L, 4001000140L, 5001000141L, 6001000142L, 7001000143L, 8001000144L);
+    Blort.blort(1001000138L, 2001000139L, 3001000140L, 4001000141L, 5001000142L, 6001000143L, 7001000144L, 8001000145L);
+    Blort.blort(1001000139L, 2001000140L, 3001000141L, 4001000142L, 5001000143L, 6001000144L, 7001000145L, 8001000146L);
+    Blort.blort(1001000140L, 2001000141L, 3001000142L, 4001000143L, 5001000144L, 6001000145L, 7001000146L, 8001000147L);
+    Blort.blort(1001000141L, 2001000142L, 3001000143L, 4001000144L, 5001000145L, 6001000146L, 7001000147L, 8001000148L);
+    Blort.blort(1001000142L, 2001000143L, 3001000144L, 4001000145L, 5001000146L, 6001000147L, 7001000148L, 8001000149L);
+    Blort.blort(1001000143L, 2001000144L, 3001000145L, 4001000146L, 5001000147L, 6001000148L, 7001000149L, 8001000150L);
+    Blort.blort(1001000144L, 2001000145L, 3001000146L, 4001000147L, 5001000148L, 6001000149L, 7001000150L, 8001000151L);
+    Blort.blort(1001000145L, 2001000146L, 3001000147L, 4001000148L, 5001000149L, 6001000150L, 7001000151L, 8001000152L);
+    Blort.blort(1001000146L, 2001000147L, 3001000148L, 4001000149L, 5001000150L, 6001000151L, 7001000152L, 8001000153L);
+    Blort.blort(1001000147L, 2001000148L, 3001000149L, 4001000150L, 5001000151L, 6001000152L, 7001000153L, 8001000154L);
+    Blort.blort(1001000148L, 2001000149L, 3001000150L, 4001000151L, 5001000152L, 6001000153L, 7001000154L, 8001000155L);
+    Blort.blort(1001000149L, 2001000150L, 3001000151L, 4001000152L, 5001000153L, 6001000154L, 7001000155L, 8001000156L);
+    Blort.blort(1001000150L, 2001000151L, 3001000152L, 4001000153L, 5001000154L, 6001000155L, 7001000156L, 8001000157L);
+    Blort.blort(1001000151L, 2001000152L, 3001000153L, 4001000154L, 5001000155L, 6001000156L, 7001000157L, 8001000158L);
+    Blort.blort(1001000152L, 2001000153L, 3001000154L, 4001000155L, 5001000156L, 6001000157L, 7001000158L, 8001000159L);
+    Blort.blort(1001000153L, 2001000154L, 3001000155L, 4001000156L, 5001000157L, 6001000158L, 7001000159L, 8001000160L);
+    Blort.blort(1001000154L, 2001000155L, 3001000156L, 4001000157L, 5001000158L, 6001000159L, 7001000160L, 8001000161L);
+    Blort.blort(1001000155L, 2001000156L, 3001000157L, 4001000158L, 5001000159L, 6001000160L, 7001000161L, 8001000162L);
+    Blort.blort(1001000156L, 2001000157L, 3001000158L, 4001000159L, 5001000160L, 6001000161L, 7001000162L, 8001000163L);
+    Blort.blort(1001000157L, 2001000158L, 3001000159L, 4001000160L, 5001000161L, 6001000162L, 7001000163L, 8001000164L);
+    Blort.blort(1001000158L, 2001000159L, 3001000160L, 4001000161L, 5001000162L, 6001000163L, 7001000164L, 8001000165L);
+    Blort.blort(1001000159L, 2001000160L, 3001000161L, 4001000162L, 5001000163L, 6001000164L, 7001000165L, 8001000166L);
+    Blort.blort(1001000160L, 2001000161L, 3001000162L, 4001000163L, 5001000164L, 6001000165L, 7001000166L, 8001000167L);
+    Blort.blort(1001000161L, 2001000162L, 3001000163L, 4001000164L, 5001000165L, 6001000166L, 7001000167L, 8001000168L);
+    Blort.blort(1001000162L, 2001000163L, 3001000164L, 4001000165L, 5001000166L, 6001000167L, 7001000168L, 8001000169L);
+    Blort.blort(1001000163L, 2001000164L, 3001000165L, 4001000166L, 5001000167L, 6001000168L, 7001000169L, 8001000170L);
+    Blort.blort(1001000164L, 2001000165L, 3001000166L, 4001000167L, 5001000168L, 6001000169L, 7001000170L, 8001000171L);
+    Blort.blort(1001000165L, 2001000166L, 3001000167L, 4001000168L, 5001000169L, 6001000170L, 7001000171L, 8001000172L);
+    Blort.blort(1001000166L, 2001000167L, 3001000168L, 4001000169L, 5001000170L, 6001000171L, 7001000172L, 8001000173L);
+    Blort.blort(1001000167L, 2001000168L, 3001000169L, 4001000170L, 5001000171L, 6001000172L, 7001000173L, 8001000174L);
+    Blort.blort(1001000168L, 2001000169L, 3001000170L, 4001000171L, 5001000172L, 6001000173L, 7001000174L, 8001000175L);
+    Blort.blort(1001000169L, 2001000170L, 3001000171L, 4001000172L, 5001000173L, 6001000174L, 7001000175L, 8001000176L);
+    Blort.blort(1001000170L, 2001000171L, 3001000172L, 4001000173L, 5001000174L, 6001000175L, 7001000176L, 8001000177L);
+    Blort.blort(1001000171L, 2001000172L, 3001000173L, 4001000174L, 5001000175L, 6001000176L, 7001000177L, 8001000178L);
+    Blort.blort(1001000172L, 2001000173L, 3001000174L, 4001000175L, 5001000176L, 6001000177L, 7001000178L, 8001000179L);
+    Blort.blort(1001000173L, 2001000174L, 3001000175L, 4001000176L, 5001000177L, 6001000178L, 7001000179L, 8001000180L);
+    Blort.blort(1001000174L, 2001000175L, 3001000176L, 4001000177L, 5001000178L, 6001000179L, 7001000180L, 8001000181L);
+    Blort.blort(1001000175L, 2001000176L, 3001000177L, 4001000178L, 5001000179L, 6001000180L, 7001000181L, 8001000182L);
+    Blort.blort(1001000176L, 2001000177L, 3001000178L, 4001000179L, 5001000180L, 6001000181L, 7001000182L, 8001000183L);
+    Blort.blort(1001000177L, 2001000178L, 3001000179L, 4001000180L, 5001000181L, 6001000182L, 7001000183L, 8001000184L);
+    Blort.blort(1001000178L, 2001000179L, 3001000180L, 4001000181L, 5001000182L, 6001000183L, 7001000184L, 8001000185L);
+    Blort.blort(1001000179L, 2001000180L, 3001000181L, 4001000182L, 5001000183L, 6001000184L, 7001000185L, 8001000186L);
+    Blort.blort(1001000180L, 2001000181L, 3001000182L, 4001000183L, 5001000184L, 6001000185L, 7001000186L, 8001000187L);
+    Blort.blort(1001000181L, 2001000182L, 3001000183L, 4001000184L, 5001000185L, 6001000186L, 7001000187L, 8001000188L);
+    Blort.blort(1001000182L, 2001000183L, 3001000184L, 4001000185L, 5001000186L, 6001000187L, 7001000188L, 8001000189L);
+    Blort.blort(1001000183L, 2001000184L, 3001000185L, 4001000186L, 5001000187L, 6001000188L, 7001000189L, 8001000190L);
+    Blort.blort(1001000184L, 2001000185L, 3001000186L, 4001000187L, 5001000188L, 6001000189L, 7001000190L, 8001000191L);
+    Blort.blort(1001000185L, 2001000186L, 3001000187L, 4001000188L, 5001000189L, 6001000190L, 7001000191L, 8001000192L);
+    Blort.blort(1001000186L, 2001000187L, 3001000188L, 4001000189L, 5001000190L, 6001000191L, 7001000192L, 8001000193L);
+    Blort.blort(1001000187L, 2001000188L, 3001000189L, 4001000190L, 5001000191L, 6001000192L, 7001000193L, 8001000194L);
+    Blort.blort(1001000188L, 2001000189L, 3001000190L, 4001000191L, 5001000192L, 6001000193L, 7001000194L, 8001000195L);
+    Blort.blort(1001000189L, 2001000190L, 3001000191L, 4001000192L, 5001000193L, 6001000194L, 7001000195L, 8001000196L);
+    Blort.blort(1001000190L, 2001000191L, 3001000192L, 4001000193L, 5001000194L, 6001000195L, 7001000196L, 8001000197L);
+    Blort.blort(1001000191L, 2001000192L, 3001000193L, 4001000194L, 5001000195L, 6001000196L, 7001000197L, 8001000198L);
+    Blort.blort(1001000192L, 2001000193L, 3001000194L, 4001000195L, 5001000196L, 6001000197L, 7001000198L, 8001000199L);
+    Blort.blort(1001000193L, 2001000194L, 3001000195L, 4001000196L, 5001000197L, 6001000198L, 7001000199L, 8001000200L);
+    Blort.blort(1001000194L, 2001000195L, 3001000196L, 4001000197L, 5001000198L, 6001000199L, 7001000200L, 8001000201L);
+    Blort.blort(1001000195L, 2001000196L, 3001000197L, 4001000198L, 5001000199L, 6001000200L, 7001000201L, 8001000202L);
+    Blort.blort(1001000196L, 2001000197L, 3001000198L, 4001000199L, 5001000200L, 6001000201L, 7001000202L, 8001000203L);
+    Blort.blort(1001000197L, 2001000198L, 3001000199L, 4001000200L, 5001000201L, 6001000202L, 7001000203L, 8001000204L);
+    Blort.blort(1001000198L, 2001000199L, 3001000200L, 4001000201L, 5001000202L, 6001000203L, 7001000204L, 8001000205L);
+    Blort.blort(1001000199L, 2001000200L, 3001000201L, 4001000202L, 5001000203L, 6001000204L, 7001000205L, 8001000206L);
+    Blort.blort(1001000200L, 2001000201L, 3001000202L, 4001000203L, 5001000204L, 6001000205L, 7001000206L, 8001000207L);
+    Blort.blort(1001000201L, 2001000202L, 3001000203L, 4001000204L, 5001000205L, 6001000206L, 7001000207L, 8001000208L);
+    Blort.blort(1001000202L, 2001000203L, 3001000204L, 4001000205L, 5001000206L, 6001000207L, 7001000208L, 8001000209L);
+    Blort.blort(1001000203L, 2001000204L, 3001000205L, 4001000206L, 5001000207L, 6001000208L, 7001000209L, 8001000210L);
+    Blort.blort(1001000204L, 2001000205L, 3001000206L, 4001000207L, 5001000208L, 6001000209L, 7001000210L, 8001000211L);
+    Blort.blort(1001000205L, 2001000206L, 3001000207L, 4001000208L, 5001000209L, 6001000210L, 7001000211L, 8001000212L);
+    Blort.blort(1001000206L, 2001000207L, 3001000208L, 4001000209L, 5001000210L, 6001000211L, 7001000212L, 8001000213L);
+    Blort.blort(1001000207L, 2001000208L, 3001000209L, 4001000210L, 5001000211L, 6001000212L, 7001000213L, 8001000214L);
+    Blort.blort(1001000208L, 2001000209L, 3001000210L, 4001000211L, 5001000212L, 6001000213L, 7001000214L, 8001000215L);
+    Blort.blort(1001000209L, 2001000210L, 3001000211L, 4001000212L, 5001000213L, 6001000214L, 7001000215L, 8001000216L);
+    Blort.blort(1001000210L, 2001000211L, 3001000212L, 4001000213L, 5001000214L, 6001000215L, 7001000216L, 8001000217L);
+    Blort.blort(1001000211L, 2001000212L, 3001000213L, 4001000214L, 5001000215L, 6001000216L, 7001000217L, 8001000218L);
+    Blort.blort(1001000212L, 2001000213L, 3001000214L, 4001000215L, 5001000216L, 6001000217L, 7001000218L, 8001000219L);
+    Blort.blort(1001000213L, 2001000214L, 3001000215L, 4001000216L, 5001000217L, 6001000218L, 7001000219L, 8001000220L);
+    Blort.blort(1001000214L, 2001000215L, 3001000216L, 4001000217L, 5001000218L, 6001000219L, 7001000220L, 8001000221L);
+    Blort.blort(1001000215L, 2001000216L, 3001000217L, 4001000218L, 5001000219L, 6001000220L, 7001000221L, 8001000222L);
+    Blort.blort(1001000216L, 2001000217L, 3001000218L, 4001000219L, 5001000220L, 6001000221L, 7001000222L, 8001000223L);
+    Blort.blort(1001000217L, 2001000218L, 3001000219L, 4001000220L, 5001000221L, 6001000222L, 7001000223L, 8001000224L);
+    Blort.blort(1001000218L, 2001000219L, 3001000220L, 4001000221L, 5001000222L, 6001000223L, 7001000224L, 8001000225L);
+    Blort.blort(1001000219L, 2001000220L, 3001000221L, 4001000222L, 5001000223L, 6001000224L, 7001000225L, 8001000226L);
+    Blort.blort(1001000220L, 2001000221L, 3001000222L, 4001000223L, 5001000224L, 6001000225L, 7001000226L, 8001000227L);
+    Blort.blort(1001000221L, 2001000222L, 3001000223L, 4001000224L, 5001000225L, 6001000226L, 7001000227L, 8001000228L);
+    Blort.blort(1001000222L, 2001000223L, 3001000224L, 4001000225L, 5001000226L, 6001000227L, 7001000228L, 8001000229L);
+    Blort.blort(1001000223L, 2001000224L, 3001000225L, 4001000226L, 5001000227L, 6001000228L, 7001000229L, 8001000230L);
+    Blort.blort(1001000224L, 2001000225L, 3001000226L, 4001000227L, 5001000228L, 6001000229L, 7001000230L, 8001000231L);
+    Blort.blort(1001000225L, 2001000226L, 3001000227L, 4001000228L, 5001000229L, 6001000230L, 7001000231L, 8001000232L);
+    Blort.blort(1001000226L, 2001000227L, 3001000228L, 4001000229L, 5001000230L, 6001000231L, 7001000232L, 8001000233L);
+    Blort.blort(1001000227L, 2001000228L, 3001000229L, 4001000230L, 5001000231L, 6001000232L, 7001000233L, 8001000234L);
+    Blort.blort(1001000228L, 2001000229L, 3001000230L, 4001000231L, 5001000232L, 6001000233L, 7001000234L, 8001000235L);
+    Blort.blort(1001000229L, 2001000230L, 3001000231L, 4001000232L, 5001000233L, 6001000234L, 7001000235L, 8001000236L);
+    Blort.blort(1001000230L, 2001000231L, 3001000232L, 4001000233L, 5001000234L, 6001000235L, 7001000236L, 8001000237L);
+    Blort.blort(1001000231L, 2001000232L, 3001000233L, 4001000234L, 5001000235L, 6001000236L, 7001000237L, 8001000238L);
+    Blort.blort(1001000232L, 2001000233L, 3001000234L, 4001000235L, 5001000236L, 6001000237L, 7001000238L, 8001000239L);
+    Blort.blort(1001000233L, 2001000234L, 3001000235L, 4001000236L, 5001000237L, 6001000238L, 7001000239L, 8001000240L);
+    Blort.blort(1001000234L, 2001000235L, 3001000236L, 4001000237L, 5001000238L, 6001000239L, 7001000240L, 8001000241L);
+    Blort.blort(1001000235L, 2001000236L, 3001000237L, 4001000238L, 5001000239L, 6001000240L, 7001000241L, 8001000242L);
+    Blort.blort(1001000236L, 2001000237L, 3001000238L, 4001000239L, 5001000240L, 6001000241L, 7001000242L, 8001000243L);
+    Blort.blort(1001000237L, 2001000238L, 3001000239L, 4001000240L, 5001000241L, 6001000242L, 7001000243L, 8001000244L);
+    Blort.blort(1001000238L, 2001000239L, 3001000240L, 4001000241L, 5001000242L, 6001000243L, 7001000244L, 8001000245L);
+    Blort.blort(1001000239L, 2001000240L, 3001000241L, 4001000242L, 5001000243L, 6001000244L, 7001000245L, 8001000246L);
+    Blort.blort(1001000240L, 2001000241L, 3001000242L, 4001000243L, 5001000244L, 6001000245L, 7001000246L, 8001000247L);
+    Blort.blort(1001000241L, 2001000242L, 3001000243L, 4001000244L, 5001000245L, 6001000246L, 7001000247L, 8001000248L);
+    Blort.blort(1001000242L, 2001000243L, 3001000244L, 4001000245L, 5001000246L, 6001000247L, 7001000248L, 8001000249L);
+    Blort.blort(1001000243L, 2001000244L, 3001000245L, 4001000246L, 5001000247L, 6001000248L, 7001000249L, 8001000250L);
+    Blort.blort(1001000244L, 2001000245L, 3001000246L, 4001000247L, 5001000248L, 6001000249L, 7001000250L, 8001000251L);
+    Blort.blort(1001000245L, 2001000246L, 3001000247L, 4001000248L, 5001000249L, 6001000250L, 7001000251L, 8001000252L);
+    Blort.blort(1001000246L, 2001000247L, 3001000248L, 4001000249L, 5001000250L, 6001000251L, 7001000252L, 8001000253L);
+    Blort.blort(1001000247L, 2001000248L, 3001000249L, 4001000250L, 5001000251L, 6001000252L, 7001000253L, 8001000254L);
+    Blort.blort(1001000248L, 2001000249L, 3001000250L, 4001000251L, 5001000252L, 6001000253L, 7001000254L, 8001000255L);
+    Blort.blort(1001000249L, 2001000250L, 3001000251L, 4001000252L, 5001000253L, 6001000254L, 7001000255L, 8001000256L);
+    Blort.blort(1001000250L, 2001000251L, 3001000252L, 4001000253L, 5001000254L, 6001000255L, 7001000256L, 8001000257L);
+    Blort.blort(1001000251L, 2001000252L, 3001000253L, 4001000254L, 5001000255L, 6001000256L, 7001000257L, 8001000258L);
+    Blort.blort(1001000252L, 2001000253L, 3001000254L, 4001000255L, 5001000256L, 6001000257L, 7001000258L, 8001000259L);
+    Blort.blort(1001000253L, 2001000254L, 3001000255L, 4001000256L, 5001000257L, 6001000258L, 7001000259L, 8001000260L);
+    Blort.blort(1001000254L, 2001000255L, 3001000256L, 4001000257L, 5001000258L, 6001000259L, 7001000260L, 8001000261L);
+    Blort.blort(1001000255L, 2001000256L, 3001000257L, 4001000258L, 5001000259L, 6001000260L, 7001000261L, 8001000262L);
+    Blort.blort(1001000256L, 2001000257L, 3001000258L, 4001000259L, 5001000260L, 6001000261L, 7001000262L, 8001000263L);
+    Blort.blort(1001000257L, 2001000258L, 3001000259L, 4001000260L, 5001000261L, 6001000262L, 7001000263L, 8001000264L);
+    Blort.blort(1001000258L, 2001000259L, 3001000260L, 4001000261L, 5001000262L, 6001000263L, 7001000264L, 8001000265L);
+    Blort.blort(1001000259L, 2001000260L, 3001000261L, 4001000262L, 5001000263L, 6001000264L, 7001000265L, 8001000266L);
+    Blort.blort(1001000260L, 2001000261L, 3001000262L, 4001000263L, 5001000264L, 6001000265L, 7001000266L, 8001000267L);
+    Blort.blort(1001000261L, 2001000262L, 3001000263L, 4001000264L, 5001000265L, 6001000266L, 7001000267L, 8001000268L);
+    Blort.blort(1001000262L, 2001000263L, 3001000264L, 4001000265L, 5001000266L, 6001000267L, 7001000268L, 8001000269L);
+    Blort.blort(1001000263L, 2001000264L, 3001000265L, 4001000266L, 5001000267L, 6001000268L, 7001000269L, 8001000270L);
+    Blort.blort(1001000264L, 2001000265L, 3001000266L, 4001000267L, 5001000268L, 6001000269L, 7001000270L, 8001000271L);
+    Blort.blort(1001000265L, 2001000266L, 3001000267L, 4001000268L, 5001000269L, 6001000270L, 7001000271L, 8001000272L);
+    Blort.blort(1001000266L, 2001000267L, 3001000268L, 4001000269L, 5001000270L, 6001000271L, 7001000272L, 8001000273L);
+    Blort.blort(1001000267L, 2001000268L, 3001000269L, 4001000270L, 5001000271L, 6001000272L, 7001000273L, 8001000274L);
+    Blort.blort(1001000268L, 2001000269L, 3001000270L, 4001000271L, 5001000272L, 6001000273L, 7001000274L, 8001000275L);
+    Blort.blort(1001000269L, 2001000270L, 3001000271L, 4001000272L, 5001000273L, 6001000274L, 7001000275L, 8001000276L);
+    Blort.blort(1001000270L, 2001000271L, 3001000272L, 4001000273L, 5001000274L, 6001000275L, 7001000276L, 8001000277L);
+    Blort.blort(1001000271L, 2001000272L, 3001000273L, 4001000274L, 5001000275L, 6001000276L, 7001000277L, 8001000278L);
+    Blort.blort(1001000272L, 2001000273L, 3001000274L, 4001000275L, 5001000276L, 6001000277L, 7001000278L, 8001000279L);
+    Blort.blort(1001000273L, 2001000274L, 3001000275L, 4001000276L, 5001000277L, 6001000278L, 7001000279L, 8001000280L);
+    Blort.blort(1001000274L, 2001000275L, 3001000276L, 4001000277L, 5001000278L, 6001000279L, 7001000280L, 8001000281L);
+    Blort.blort(1001000275L, 2001000276L, 3001000277L, 4001000278L, 5001000279L, 6001000280L, 7001000281L, 8001000282L);
+    Blort.blort(1001000276L, 2001000277L, 3001000278L, 4001000279L, 5001000280L, 6001000281L, 7001000282L, 8001000283L);
+    Blort.blort(1001000277L, 2001000278L, 3001000279L, 4001000280L, 5001000281L, 6001000282L, 7001000283L, 8001000284L);
+    Blort.blort(1001000278L, 2001000279L, 3001000280L, 4001000281L, 5001000282L, 6001000283L, 7001000284L, 8001000285L);
+    Blort.blort(1001000279L, 2001000280L, 3001000281L, 4001000282L, 5001000283L, 6001000284L, 7001000285L, 8001000286L);
+    Blort.blort(1001000280L, 2001000281L, 3001000282L, 4001000283L, 5001000284L, 6001000285L, 7001000286L, 8001000287L);
+    Blort.blort(1001000281L, 2001000282L, 3001000283L, 4001000284L, 5001000285L, 6001000286L, 7001000287L, 8001000288L);
+    Blort.blort(1001000282L, 2001000283L, 3001000284L, 4001000285L, 5001000286L, 6001000287L, 7001000288L, 8001000289L);
+    Blort.blort(1001000283L, 2001000284L, 3001000285L, 4001000286L, 5001000287L, 6001000288L, 7001000289L, 8001000290L);
+    Blort.blort(1001000284L, 2001000285L, 3001000286L, 4001000287L, 5001000288L, 6001000289L, 7001000290L, 8001000291L);
+    Blort.blort(1001000285L, 2001000286L, 3001000287L, 4001000288L, 5001000289L, 6001000290L, 7001000291L, 8001000292L);
+    Blort.blort(1001000286L, 2001000287L, 3001000288L, 4001000289L, 5001000290L, 6001000291L, 7001000292L, 8001000293L);
+    Blort.blort(1001000287L, 2001000288L, 3001000289L, 4001000290L, 5001000291L, 6001000292L, 7001000293L, 8001000294L);
+    Blort.blort(1001000288L, 2001000289L, 3001000290L, 4001000291L, 5001000292L, 6001000293L, 7001000294L, 8001000295L);
+    Blort.blort(1001000289L, 2001000290L, 3001000291L, 4001000292L, 5001000293L, 6001000294L, 7001000295L, 8001000296L);
+    Blort.blort(1001000290L, 2001000291L, 3001000292L, 4001000293L, 5001000294L, 6001000295L, 7001000296L, 8001000297L);
+    Blort.blort(1001000291L, 2001000292L, 3001000293L, 4001000294L, 5001000295L, 6001000296L, 7001000297L, 8001000298L);
+    Blort.blort(1001000292L, 2001000293L, 3001000294L, 4001000295L, 5001000296L, 6001000297L, 7001000298L, 8001000299L);
+    Blort.blort(1001000293L, 2001000294L, 3001000295L, 4001000296L, 5001000297L, 6001000298L, 7001000299L, 8001000300L);
+    Blort.blort(1001000294L, 2001000295L, 3001000296L, 4001000297L, 5001000298L, 6001000299L, 7001000300L, 8001000301L);
+    Blort.blort(1001000295L, 2001000296L, 3001000297L, 4001000298L, 5001000299L, 6001000300L, 7001000301L, 8001000302L);
+    Blort.blort(1001000296L, 2001000297L, 3001000298L, 4001000299L, 5001000300L, 6001000301L, 7001000302L, 8001000303L);
+    Blort.blort(1001000297L, 2001000298L, 3001000299L, 4001000300L, 5001000301L, 6001000302L, 7001000303L, 8001000304L);
+    Blort.blort(1001000298L, 2001000299L, 3001000300L, 4001000301L, 5001000302L, 6001000303L, 7001000304L, 8001000305L);
+    Blort.blort(1001000299L, 2001000300L, 3001000301L, 4001000302L, 5001000303L, 6001000304L, 7001000305L, 8001000306L);
+    Blort.blort(1001000300L, 2001000301L, 3001000302L, 4001000303L, 5001000304L, 6001000305L, 7001000306L, 8001000307L);
+    Blort.blort(1001000301L, 2001000302L, 3001000303L, 4001000304L, 5001000305L, 6001000306L, 7001000307L, 8001000308L);
+    Blort.blort(1001000302L, 2001000303L, 3001000304L, 4001000305L, 5001000306L, 6001000307L, 7001000308L, 8001000309L);
+    Blort.blort(1001000303L, 2001000304L, 3001000305L, 4001000306L, 5001000307L, 6001000308L, 7001000309L, 8001000310L);
+    Blort.blort(1001000304L, 2001000305L, 3001000306L, 4001000307L, 5001000308L, 6001000309L, 7001000310L, 8001000311L);
+    Blort.blort(1001000305L, 2001000306L, 3001000307L, 4001000308L, 5001000309L, 6001000310L, 7001000311L, 8001000312L);
+    Blort.blort(1001000306L, 2001000307L, 3001000308L, 4001000309L, 5001000310L, 6001000311L, 7001000312L, 8001000313L);
+    Blort.blort(1001000307L, 2001000308L, 3001000309L, 4001000310L, 5001000311L, 6001000312L, 7001000313L, 8001000314L);
+    Blort.blort(1001000308L, 2001000309L, 3001000310L, 4001000311L, 5001000312L, 6001000313L, 7001000314L, 8001000315L);
+    Blort.blort(1001000309L, 2001000310L, 3001000311L, 4001000312L, 5001000313L, 6001000314L, 7001000315L, 8001000316L);
+    Blort.blort(1001000310L, 2001000311L, 3001000312L, 4001000313L, 5001000314L, 6001000315L, 7001000316L, 8001000317L);
+    Blort.blort(1001000311L, 2001000312L, 3001000313L, 4001000314L, 5001000315L, 6001000316L, 7001000317L, 8001000318L);
+    Blort.blort(1001000312L, 2001000313L, 3001000314L, 4001000315L, 5001000316L, 6001000317L, 7001000318L, 8001000319L);
+    Blort.blort(1001000313L, 2001000314L, 3001000315L, 4001000316L, 5001000317L, 6001000318L, 7001000319L, 8001000320L);
+    Blort.blort(1001000314L, 2001000315L, 3001000316L, 4001000317L, 5001000318L, 6001000319L, 7001000320L, 8001000321L);
+    Blort.blort(1001000315L, 2001000316L, 3001000317L, 4001000318L, 5001000319L, 6001000320L, 7001000321L, 8001000322L);
+    Blort.blort(1001000316L, 2001000317L, 3001000318L, 4001000319L, 5001000320L, 6001000321L, 7001000322L, 8001000323L);
+    Blort.blort(1001000317L, 2001000318L, 3001000319L, 4001000320L, 5001000321L, 6001000322L, 7001000323L, 8001000324L);
+    Blort.blort(1001000318L, 2001000319L, 3001000320L, 4001000321L, 5001000322L, 6001000323L, 7001000324L, 8001000325L);
+    Blort.blort(1001000319L, 2001000320L, 3001000321L, 4001000322L, 5001000323L, 6001000324L, 7001000325L, 8001000326L);
+    Blort.blort(1001000320L, 2001000321L, 3001000322L, 4001000323L, 5001000324L, 6001000325L, 7001000326L, 8001000327L);
+    Blort.blort(1001000321L, 2001000322L, 3001000323L, 4001000324L, 5001000325L, 6001000326L, 7001000327L, 8001000328L);
+    Blort.blort(1001000322L, 2001000323L, 3001000324L, 4001000325L, 5001000326L, 6001000327L, 7001000328L, 8001000329L);
+    Blort.blort(1001000323L, 2001000324L, 3001000325L, 4001000326L, 5001000327L, 6001000328L, 7001000329L, 8001000330L);
+    Blort.blort(1001000324L, 2001000325L, 3001000326L, 4001000327L, 5001000328L, 6001000329L, 7001000330L, 8001000331L);
+    Blort.blort(1001000325L, 2001000326L, 3001000327L, 4001000328L, 5001000329L, 6001000330L, 7001000331L, 8001000332L);
+    Blort.blort(1001000326L, 2001000327L, 3001000328L, 4001000329L, 5001000330L, 6001000331L, 7001000332L, 8001000333L);
+    Blort.blort(1001000327L, 2001000328L, 3001000329L, 4001000330L, 5001000331L, 6001000332L, 7001000333L, 8001000334L);
+    Blort.blort(1001000328L, 2001000329L, 3001000330L, 4001000331L, 5001000332L, 6001000333L, 7001000334L, 8001000335L);
+    Blort.blort(1001000329L, 2001000330L, 3001000331L, 4001000332L, 5001000333L, 6001000334L, 7001000335L, 8001000336L);
+    Blort.blort(1001000330L, 2001000331L, 3001000332L, 4001000333L, 5001000334L, 6001000335L, 7001000336L, 8001000337L);
+    Blort.blort(1001000331L, 2001000332L, 3001000333L, 4001000334L, 5001000335L, 6001000336L, 7001000337L, 8001000338L);
+    Blort.blort(1001000332L, 2001000333L, 3001000334L, 4001000335L, 5001000336L, 6001000337L, 7001000338L, 8001000339L);
+    Blort.blort(1001000333L, 2001000334L, 3001000335L, 4001000336L, 5001000337L, 6001000338L, 7001000339L, 8001000340L);
+    Blort.blort(1001000334L, 2001000335L, 3001000336L, 4001000337L, 5001000338L, 6001000339L, 7001000340L, 8001000341L);
+    Blort.blort(1001000335L, 2001000336L, 3001000337L, 4001000338L, 5001000339L, 6001000340L, 7001000341L, 8001000342L);
+    Blort.blort(1001000336L, 2001000337L, 3001000338L, 4001000339L, 5001000340L, 6001000341L, 7001000342L, 8001000343L);
+    Blort.blort(1001000337L, 2001000338L, 3001000339L, 4001000340L, 5001000341L, 6001000342L, 7001000343L, 8001000344L);
+    Blort.blort(1001000338L, 2001000339L, 3001000340L, 4001000341L, 5001000342L, 6001000343L, 7001000344L, 8001000345L);
+    Blort.blort(1001000339L, 2001000340L, 3001000341L, 4001000342L, 5001000343L, 6001000344L, 7001000345L, 8001000346L);
+    Blort.blort(1001000340L, 2001000341L, 3001000342L, 4001000343L, 5001000344L, 6001000345L, 7001000346L, 8001000347L);
+    Blort.blort(1001000341L, 2001000342L, 3001000343L, 4001000344L, 5001000345L, 6001000346L, 7001000347L, 8001000348L);
+    Blort.blort(1001000342L, 2001000343L, 3001000344L, 4001000345L, 5001000346L, 6001000347L, 7001000348L, 8001000349L);
+    Blort.blort(1001000343L, 2001000344L, 3001000345L, 4001000346L, 5001000347L, 6001000348L, 7001000349L, 8001000350L);
+    Blort.blort(1001000344L, 2001000345L, 3001000346L, 4001000347L, 5001000348L, 6001000349L, 7001000350L, 8001000351L);
+    Blort.blort(1001000345L, 2001000346L, 3001000347L, 4001000348L, 5001000349L, 6001000350L, 7001000351L, 8001000352L);
+    Blort.blort(1001000346L, 2001000347L, 3001000348L, 4001000349L, 5001000350L, 6001000351L, 7001000352L, 8001000353L);
+    Blort.blort(1001000347L, 2001000348L, 3001000349L, 4001000350L, 5001000351L, 6001000352L, 7001000353L, 8001000354L);
+    Blort.blort(1001000348L, 2001000349L, 3001000350L, 4001000351L, 5001000352L, 6001000353L, 7001000354L, 8001000355L);
+    Blort.blort(1001000349L, 2001000350L, 3001000351L, 4001000352L, 5001000353L, 6001000354L, 7001000355L, 8001000356L);
+    Blort.blort(1001000350L, 2001000351L, 3001000352L, 4001000353L, 5001000354L, 6001000355L, 7001000356L, 8001000357L);
+    Blort.blort(1001000351L, 2001000352L, 3001000353L, 4001000354L, 5001000355L, 6001000356L, 7001000357L, 8001000358L);
+    Blort.blort(1001000352L, 2001000353L, 3001000354L, 4001000355L, 5001000356L, 6001000357L, 7001000358L, 8001000359L);
+    Blort.blort(1001000353L, 2001000354L, 3001000355L, 4001000356L, 5001000357L, 6001000358L, 7001000359L, 8001000360L);
+    Blort.blort(1001000354L, 2001000355L, 3001000356L, 4001000357L, 5001000358L, 6001000359L, 7001000360L, 8001000361L);
+    Blort.blort(1001000355L, 2001000356L, 3001000357L, 4001000358L, 5001000359L, 6001000360L, 7001000361L, 8001000362L);
+    Blort.blort(1001000356L, 2001000357L, 3001000358L, 4001000359L, 5001000360L, 6001000361L, 7001000362L, 8001000363L);
+    Blort.blort(1001000357L, 2001000358L, 3001000359L, 4001000360L, 5001000361L, 6001000362L, 7001000363L, 8001000364L);
+    Blort.blort(1001000358L, 2001000359L, 3001000360L, 4001000361L, 5001000362L, 6001000363L, 7001000364L, 8001000365L);
+    Blort.blort(1001000359L, 2001000360L, 3001000361L, 4001000362L, 5001000363L, 6001000364L, 7001000365L, 8001000366L);
+    Blort.blort(1001000360L, 2001000361L, 3001000362L, 4001000363L, 5001000364L, 6001000365L, 7001000366L, 8001000367L);
+    Blort.blort(1001000361L, 2001000362L, 3001000363L, 4001000364L, 5001000365L, 6001000366L, 7001000367L, 8001000368L);
+    Blort.blort(1001000362L, 2001000363L, 3001000364L, 4001000365L, 5001000366L, 6001000367L, 7001000368L, 8001000369L);
+    Blort.blort(1001000363L, 2001000364L, 3001000365L, 4001000366L, 5001000367L, 6001000368L, 7001000369L, 8001000370L);
+    Blort.blort(1001000364L, 2001000365L, 3001000366L, 4001000367L, 5001000368L, 6001000369L, 7001000370L, 8001000371L);
+    Blort.blort(1001000365L, 2001000366L, 3001000367L, 4001000368L, 5001000369L, 6001000370L, 7001000371L, 8001000372L);
+    Blort.blort(1001000366L, 2001000367L, 3001000368L, 4001000369L, 5001000370L, 6001000371L, 7001000372L, 8001000373L);
+    Blort.blort(1001000367L, 2001000368L, 3001000369L, 4001000370L, 5001000371L, 6001000372L, 7001000373L, 8001000374L);
+    Blort.blort(1001000368L, 2001000369L, 3001000370L, 4001000371L, 5001000372L, 6001000373L, 7001000374L, 8001000375L);
+    Blort.blort(1001000369L, 2001000370L, 3001000371L, 4001000372L, 5001000373L, 6001000374L, 7001000375L, 8001000376L);
+    Blort.blort(1001000370L, 2001000371L, 3001000372L, 4001000373L, 5001000374L, 6001000375L, 7001000376L, 8001000377L);
+    Blort.blort(1001000371L, 2001000372L, 3001000373L, 4001000374L, 5001000375L, 6001000376L, 7001000377L, 8001000378L);
+    Blort.blort(1001000372L, 2001000373L, 3001000374L, 4001000375L, 5001000376L, 6001000377L, 7001000378L, 8001000379L);
+    Blort.blort(1001000373L, 2001000374L, 3001000375L, 4001000376L, 5001000377L, 6001000378L, 7001000379L, 8001000380L);
+    Blort.blort(1001000374L, 2001000375L, 3001000376L, 4001000377L, 5001000378L, 6001000379L, 7001000380L, 8001000381L);
+    Blort.blort(1001000375L, 2001000376L, 3001000377L, 4001000378L, 5001000379L, 6001000380L, 7001000381L, 8001000382L);
+    Blort.blort(1001000376L, 2001000377L, 3001000378L, 4001000379L, 5001000380L, 6001000381L, 7001000382L, 8001000383L);
+    Blort.blort(1001000377L, 2001000378L, 3001000379L, 4001000380L, 5001000381L, 6001000382L, 7001000383L, 8001000384L);
+    Blort.blort(1001000378L, 2001000379L, 3001000380L, 4001000381L, 5001000382L, 6001000383L, 7001000384L, 8001000385L);
+    Blort.blort(1001000379L, 2001000380L, 3001000381L, 4001000382L, 5001000383L, 6001000384L, 7001000385L, 8001000386L);
+    Blort.blort(1001000380L, 2001000381L, 3001000382L, 4001000383L, 5001000384L, 6001000385L, 7001000386L, 8001000387L);
+    Blort.blort(1001000381L, 2001000382L, 3001000383L, 4001000384L, 5001000385L, 6001000386L, 7001000387L, 8001000388L);
+    Blort.blort(1001000382L, 2001000383L, 3001000384L, 4001000385L, 5001000386L, 6001000387L, 7001000388L, 8001000389L);
+    Blort.blort(1001000383L, 2001000384L, 3001000385L, 4001000386L, 5001000387L, 6001000388L, 7001000389L, 8001000390L);
+    Blort.blort(1001000384L, 2001000385L, 3001000386L, 4001000387L, 5001000388L, 6001000389L, 7001000390L, 8001000391L);
+    Blort.blort(1001000385L, 2001000386L, 3001000387L, 4001000388L, 5001000389L, 6001000390L, 7001000391L, 8001000392L);
+    Blort.blort(1001000386L, 2001000387L, 3001000388L, 4001000389L, 5001000390L, 6001000391L, 7001000392L, 8001000393L);
+    Blort.blort(1001000387L, 2001000388L, 3001000389L, 4001000390L, 5001000391L, 6001000392L, 7001000393L, 8001000394L);
+    Blort.blort(1001000388L, 2001000389L, 3001000390L, 4001000391L, 5001000392L, 6001000393L, 7001000394L, 8001000395L);
+    Blort.blort(1001000389L, 2001000390L, 3001000391L, 4001000392L, 5001000393L, 6001000394L, 7001000395L, 8001000396L);
+    Blort.blort(1001000390L, 2001000391L, 3001000392L, 4001000393L, 5001000394L, 6001000395L, 7001000396L, 8001000397L);
+    Blort.blort(1001000391L, 2001000392L, 3001000393L, 4001000394L, 5001000395L, 6001000396L, 7001000397L, 8001000398L);
+    Blort.blort(1001000392L, 2001000393L, 3001000394L, 4001000395L, 5001000396L, 6001000397L, 7001000398L, 8001000399L);
+    Blort.blort(1001000393L, 2001000394L, 3001000395L, 4001000396L, 5001000397L, 6001000398L, 7001000399L, 8001000400L);
+    Blort.blort(1001000394L, 2001000395L, 3001000396L, 4001000397L, 5001000398L, 6001000399L, 7001000400L, 8001000401L);
+    Blort.blort(1001000395L, 2001000396L, 3001000397L, 4001000398L, 5001000399L, 6001000400L, 7001000401L, 8001000402L);
+    Blort.blort(1001000396L, 2001000397L, 3001000398L, 4001000399L, 5001000400L, 6001000401L, 7001000402L, 8001000403L);
+    Blort.blort(1001000397L, 2001000398L, 3001000399L, 4001000400L, 5001000401L, 6001000402L, 7001000403L, 8001000404L);
+    Blort.blort(1001000398L, 2001000399L, 3001000400L, 4001000401L, 5001000402L, 6001000403L, 7001000404L, 8001000405L);
+    Blort.blort(1001000399L, 2001000400L, 3001000401L, 4001000402L, 5001000403L, 6001000404L, 7001000405L, 8001000406L);
+    Blort.blort(1001000400L, 2001000401L, 3001000402L, 4001000403L, 5001000404L, 6001000405L, 7001000406L, 8001000407L);
+    Blort.blort(1001000401L, 2001000402L, 3001000403L, 4001000404L, 5001000405L, 6001000406L, 7001000407L, 8001000408L);
+    Blort.blort(1001000402L, 2001000403L, 3001000404L, 4001000405L, 5001000406L, 6001000407L, 7001000408L, 8001000409L);
+    Blort.blort(1001000403L, 2001000404L, 3001000405L, 4001000406L, 5001000407L, 6001000408L, 7001000409L, 8001000410L);
+    Blort.blort(1001000404L, 2001000405L, 3001000406L, 4001000407L, 5001000408L, 6001000409L, 7001000410L, 8001000411L);
+    Blort.blort(1001000405L, 2001000406L, 3001000407L, 4001000408L, 5001000409L, 6001000410L, 7001000411L, 8001000412L);
+    Blort.blort(1001000406L, 2001000407L, 3001000408L, 4001000409L, 5001000410L, 6001000411L, 7001000412L, 8001000413L);
+    Blort.blort(1001000407L, 2001000408L, 3001000409L, 4001000410L, 5001000411L, 6001000412L, 7001000413L, 8001000414L);
+    Blort.blort(1001000408L, 2001000409L, 3001000410L, 4001000411L, 5001000412L, 6001000413L, 7001000414L, 8001000415L);
+    Blort.blort(1001000409L, 2001000410L, 3001000411L, 4001000412L, 5001000413L, 6001000414L, 7001000415L, 8001000416L);
+    Blort.blort(1001000410L, 2001000411L, 3001000412L, 4001000413L, 5001000414L, 6001000415L, 7001000416L, 8001000417L);
+    Blort.blort(1001000411L, 2001000412L, 3001000413L, 4001000414L, 5001000415L, 6001000416L, 7001000417L, 8001000418L);
+    Blort.blort(1001000412L, 2001000413L, 3001000414L, 4001000415L, 5001000416L, 6001000417L, 7001000418L, 8001000419L);
+    Blort.blort(1001000413L, 2001000414L, 3001000415L, 4001000416L, 5001000417L, 6001000418L, 7001000419L, 8001000420L);
+    Blort.blort(1001000414L, 2001000415L, 3001000416L, 4001000417L, 5001000418L, 6001000419L, 7001000420L, 8001000421L);
+    Blort.blort(1001000415L, 2001000416L, 3001000417L, 4001000418L, 5001000419L, 6001000420L, 7001000421L, 8001000422L);
+    Blort.blort(1001000416L, 2001000417L, 3001000418L, 4001000419L, 5001000420L, 6001000421L, 7001000422L, 8001000423L);
+    Blort.blort(1001000417L, 2001000418L, 3001000419L, 4001000420L, 5001000421L, 6001000422L, 7001000423L, 8001000424L);
+    Blort.blort(1001000418L, 2001000419L, 3001000420L, 4001000421L, 5001000422L, 6001000423L, 7001000424L, 8001000425L);
+    Blort.blort(1001000419L, 2001000420L, 3001000421L, 4001000422L, 5001000423L, 6001000424L, 7001000425L, 8001000426L);
+    Blort.blort(1001000420L, 2001000421L, 3001000422L, 4001000423L, 5001000424L, 6001000425L, 7001000426L, 8001000427L);
+    Blort.blort(1001000421L, 2001000422L, 3001000423L, 4001000424L, 5001000425L, 6001000426L, 7001000427L, 8001000428L);
+    Blort.blort(1001000422L, 2001000423L, 3001000424L, 4001000425L, 5001000426L, 6001000427L, 7001000428L, 8001000429L);
+    Blort.blort(1001000423L, 2001000424L, 3001000425L, 4001000426L, 5001000427L, 6001000428L, 7001000429L, 8001000430L);
+    Blort.blort(1001000424L, 2001000425L, 3001000426L, 4001000427L, 5001000428L, 6001000429L, 7001000430L, 8001000431L);
+    Blort.blort(1001000425L, 2001000426L, 3001000427L, 4001000428L, 5001000429L, 6001000430L, 7001000431L, 8001000432L);
+    Blort.blort(1001000426L, 2001000427L, 3001000428L, 4001000429L, 5001000430L, 6001000431L, 7001000432L, 8001000433L);
+    Blort.blort(1001000427L, 2001000428L, 3001000429L, 4001000430L, 5001000431L, 6001000432L, 7001000433L, 8001000434L);
+    Blort.blort(1001000428L, 2001000429L, 3001000430L, 4001000431L, 5001000432L, 6001000433L, 7001000434L, 8001000435L);
+    Blort.blort(1001000429L, 2001000430L, 3001000431L, 4001000432L, 5001000433L, 6001000434L, 7001000435L, 8001000436L);
+    Blort.blort(1001000430L, 2001000431L, 3001000432L, 4001000433L, 5001000434L, 6001000435L, 7001000436L, 8001000437L);
+    Blort.blort(1001000431L, 2001000432L, 3001000433L, 4001000434L, 5001000435L, 6001000436L, 7001000437L, 8001000438L);
+    Blort.blort(1001000432L, 2001000433L, 3001000434L, 4001000435L, 5001000436L, 6001000437L, 7001000438L, 8001000439L);
+    Blort.blort(1001000433L, 2001000434L, 3001000435L, 4001000436L, 5001000437L, 6001000438L, 7001000439L, 8001000440L);
+    Blort.blort(1001000434L, 2001000435L, 3001000436L, 4001000437L, 5001000438L, 6001000439L, 7001000440L, 8001000441L);
+    Blort.blort(1001000435L, 2001000436L, 3001000437L, 4001000438L, 5001000439L, 6001000440L, 7001000441L, 8001000442L);
+    Blort.blort(1001000436L, 2001000437L, 3001000438L, 4001000439L, 5001000440L, 6001000441L, 7001000442L, 8001000443L);
+    Blort.blort(1001000437L, 2001000438L, 3001000439L, 4001000440L, 5001000441L, 6001000442L, 7001000443L, 8001000444L);
+    Blort.blort(1001000438L, 2001000439L, 3001000440L, 4001000441L, 5001000442L, 6001000443L, 7001000444L, 8001000445L);
+    Blort.blort(1001000439L, 2001000440L, 3001000441L, 4001000442L, 5001000443L, 6001000444L, 7001000445L, 8001000446L);
+    Blort.blort(1001000440L, 2001000441L, 3001000442L, 4001000443L, 5001000444L, 6001000445L, 7001000446L, 8001000447L);
+    Blort.blort(1001000441L, 2001000442L, 3001000443L, 4001000444L, 5001000445L, 6001000446L, 7001000447L, 8001000448L);
+    Blort.blort(1001000442L, 2001000443L, 3001000444L, 4001000445L, 5001000446L, 6001000447L, 7001000448L, 8001000449L);
+    Blort.blort(1001000443L, 2001000444L, 3001000445L, 4001000446L, 5001000447L, 6001000448L, 7001000449L, 8001000450L);
+    Blort.blort(1001000444L, 2001000445L, 3001000446L, 4001000447L, 5001000448L, 6001000449L, 7001000450L, 8001000451L);
+    Blort.blort(1001000445L, 2001000446L, 3001000447L, 4001000448L, 5001000449L, 6001000450L, 7001000451L, 8001000452L);
+    Blort.blort(1001000446L, 2001000447L, 3001000448L, 4001000449L, 5001000450L, 6001000451L, 7001000452L, 8001000453L);
+    Blort.blort(1001000447L, 2001000448L, 3001000449L, 4001000450L, 5001000451L, 6001000452L, 7001000453L, 8001000454L);
+    Blort.blort(1001000448L, 2001000449L, 3001000450L, 4001000451L, 5001000452L, 6001000453L, 7001000454L, 8001000455L);
+    Blort.blort(1001000449L, 2001000450L, 3001000451L, 4001000452L, 5001000453L, 6001000454L, 7001000455L, 8001000456L);
+    Blort.blort(1001000450L, 2001000451L, 3001000452L, 4001000453L, 5001000454L, 6001000455L, 7001000456L, 8001000457L);
+    Blort.blort(1001000451L, 2001000452L, 3001000453L, 4001000454L, 5001000455L, 6001000456L, 7001000457L, 8001000458L);
+    Blort.blort(1001000452L, 2001000453L, 3001000454L, 4001000455L, 5001000456L, 6001000457L, 7001000458L, 8001000459L);
+    Blort.blort(1001000453L, 2001000454L, 3001000455L, 4001000456L, 5001000457L, 6001000458L, 7001000459L, 8001000460L);
+    Blort.blort(1001000454L, 2001000455L, 3001000456L, 4001000457L, 5001000458L, 6001000459L, 7001000460L, 8001000461L);
+    Blort.blort(1001000455L, 2001000456L, 3001000457L, 4001000458L, 5001000459L, 6001000460L, 7001000461L, 8001000462L);
+    Blort.blort(1001000456L, 2001000457L, 3001000458L, 4001000459L, 5001000460L, 6001000461L, 7001000462L, 8001000463L);
+    Blort.blort(1001000457L, 2001000458L, 3001000459L, 4001000460L, 5001000461L, 6001000462L, 7001000463L, 8001000464L);
+    Blort.blort(1001000458L, 2001000459L, 3001000460L, 4001000461L, 5001000462L, 6001000463L, 7001000464L, 8001000465L);
+    Blort.blort(1001000459L, 2001000460L, 3001000461L, 4001000462L, 5001000463L, 6001000464L, 7001000465L, 8001000466L);
+    Blort.blort(1001000460L, 2001000461L, 3001000462L, 4001000463L, 5001000464L, 6001000465L, 7001000466L, 8001000467L);
+    Blort.blort(1001000461L, 2001000462L, 3001000463L, 4001000464L, 5001000465L, 6001000466L, 7001000467L, 8001000468L);
+    Blort.blort(1001000462L, 2001000463L, 3001000464L, 4001000465L, 5001000466L, 6001000467L, 7001000468L, 8001000469L);
+    Blort.blort(1001000463L, 2001000464L, 3001000465L, 4001000466L, 5001000467L, 6001000468L, 7001000469L, 8001000470L);
+    Blort.blort(1001000464L, 2001000465L, 3001000466L, 4001000467L, 5001000468L, 6001000469L, 7001000470L, 8001000471L);
+    Blort.blort(1001000465L, 2001000466L, 3001000467L, 4001000468L, 5001000469L, 6001000470L, 7001000471L, 8001000472L);
+    Blort.blort(1001000466L, 2001000467L, 3001000468L, 4001000469L, 5001000470L, 6001000471L, 7001000472L, 8001000473L);
+    Blort.blort(1001000467L, 2001000468L, 3001000469L, 4001000470L, 5001000471L, 6001000472L, 7001000473L, 8001000474L);
+    Blort.blort(1001000468L, 2001000469L, 3001000470L, 4001000471L, 5001000472L, 6001000473L, 7001000474L, 8001000475L);
+    Blort.blort(1001000469L, 2001000470L, 3001000471L, 4001000472L, 5001000473L, 6001000474L, 7001000475L, 8001000476L);
+    Blort.blort(1001000470L, 2001000471L, 3001000472L, 4001000473L, 5001000474L, 6001000475L, 7001000476L, 8001000477L);
+    Blort.blort(1001000471L, 2001000472L, 3001000473L, 4001000474L, 5001000475L, 6001000476L, 7001000477L, 8001000478L);
+    Blort.blort(1001000472L, 2001000473L, 3001000474L, 4001000475L, 5001000476L, 6001000477L, 7001000478L, 8001000479L);
+    Blort.blort(1001000473L, 2001000474L, 3001000475L, 4001000476L, 5001000477L, 6001000478L, 7001000479L, 8001000480L);
+    Blort.blort(1001000474L, 2001000475L, 3001000476L, 4001000477L, 5001000478L, 6001000479L, 7001000480L, 8001000481L);
+    Blort.blort(1001000475L, 2001000476L, 3001000477L, 4001000478L, 5001000479L, 6001000480L, 7001000481L, 8001000482L);
+    Blort.blort(1001000476L, 2001000477L, 3001000478L, 4001000479L, 5001000480L, 6001000481L, 7001000482L, 8001000483L);
+    Blort.blort(1001000477L, 2001000478L, 3001000479L, 4001000480L, 5001000481L, 6001000482L, 7001000483L, 8001000484L);
+    Blort.blort(1001000478L, 2001000479L, 3001000480L, 4001000481L, 5001000482L, 6001000483L, 7001000484L, 8001000485L);
+    Blort.blort(1001000479L, 2001000480L, 3001000481L, 4001000482L, 5001000483L, 6001000484L, 7001000485L, 8001000486L);
+    Blort.blort(1001000480L, 2001000481L, 3001000482L, 4001000483L, 5001000484L, 6001000485L, 7001000486L, 8001000487L);
+    Blort.blort(1001000481L, 2001000482L, 3001000483L, 4001000484L, 5001000485L, 6001000486L, 7001000487L, 8001000488L);
+    Blort.blort(1001000482L, 2001000483L, 3001000484L, 4001000485L, 5001000486L, 6001000487L, 7001000488L, 8001000489L);
+    Blort.blort(1001000483L, 2001000484L, 3001000485L, 4001000486L, 5001000487L, 6001000488L, 7001000489L, 8001000490L);
+    Blort.blort(1001000484L, 2001000485L, 3001000486L, 4001000487L, 5001000488L, 6001000489L, 7001000490L, 8001000491L);
+    Blort.blort(1001000485L, 2001000486L, 3001000487L, 4001000488L, 5001000489L, 6001000490L, 7001000491L, 8001000492L);
+    Blort.blort(1001000486L, 2001000487L, 3001000488L, 4001000489L, 5001000490L, 6001000491L, 7001000492L, 8001000493L);
+    Blort.blort(1001000487L, 2001000488L, 3001000489L, 4001000490L, 5001000491L, 6001000492L, 7001000493L, 8001000494L);
+    Blort.blort(1001000488L, 2001000489L, 3001000490L, 4001000491L, 5001000492L, 6001000493L, 7001000494L, 8001000495L);
+    Blort.blort(1001000489L, 2001000490L, 3001000491L, 4001000492L, 5001000493L, 6001000494L, 7001000495L, 8001000496L);
+    Blort.blort(1001000490L, 2001000491L, 3001000492L, 4001000493L, 5001000494L, 6001000495L, 7001000496L, 8001000497L);
+    Blort.blort(1001000491L, 2001000492L, 3001000493L, 4001000494L, 5001000495L, 6001000496L, 7001000497L, 8001000498L);
+    Blort.blort(1001000492L, 2001000493L, 3001000494L, 4001000495L, 5001000496L, 6001000497L, 7001000498L, 8001000499L);
+    Blort.blort(1001000493L, 2001000494L, 3001000495L, 4001000496L, 5001000497L, 6001000498L, 7001000499L, 8001000500L);
+    Blort.blort(1001000494L, 2001000495L, 3001000496L, 4001000497L, 5001000498L, 6001000499L, 7001000500L, 8001000501L);
+    Blort.blort(1001000495L, 2001000496L, 3001000497L, 4001000498L, 5001000499L, 6001000500L, 7001000501L, 8001000502L);
+    Blort.blort(1001000496L, 2001000497L, 3001000498L, 4001000499L, 5001000500L, 6001000501L, 7001000502L, 8001000503L);
+    Blort.blort(1001000497L, 2001000498L, 3001000499L, 4001000500L, 5001000501L, 6001000502L, 7001000503L, 8001000504L);
+    Blort.blort(1001000498L, 2001000499L, 3001000500L, 4001000501L, 5001000502L, 6001000503L, 7001000504L, 8001000505L);
+    Blort.blort(1001000499L, 2001000500L, 3001000501L, 4001000502L, 5001000503L, 6001000504L, 7001000505L, 8001000506L);
+    Blort.blort(1001000500L, 2001000501L, 3001000502L, 4001000503L, 5001000504L, 6001000505L, 7001000506L, 8001000507L);
+    Blort.blort(1001000501L, 2001000502L, 3001000503L, 4001000504L, 5001000505L, 6001000506L, 7001000507L, 8001000508L);
+    Blort.blort(1001000502L, 2001000503L, 3001000504L, 4001000505L, 5001000506L, 6001000507L, 7001000508L, 8001000509L);
+    Blort.blort(1001000503L, 2001000504L, 3001000505L, 4001000506L, 5001000507L, 6001000508L, 7001000509L, 8001000510L);
+    Blort.blort(1001000504L, 2001000505L, 3001000506L, 4001000507L, 5001000508L, 6001000509L, 7001000510L, 8001000511L);
+    Blort.blort(1001000505L, 2001000506L, 3001000507L, 4001000508L, 5001000509L, 6001000510L, 7001000511L, 8001000512L);
+    Blort.blort(1001000506L, 2001000507L, 3001000508L, 4001000509L, 5001000510L, 6001000511L, 7001000512L, 8001000513L);
+    Blort.blort(1001000507L, 2001000508L, 3001000509L, 4001000510L, 5001000511L, 6001000512L, 7001000513L, 8001000514L);
+    Blort.blort(1001000508L, 2001000509L, 3001000510L, 4001000511L, 5001000512L, 6001000513L, 7001000514L, 8001000515L);
+    Blort.blort(1001000509L, 2001000510L, 3001000511L, 4001000512L, 5001000513L, 6001000514L, 7001000515L, 8001000516L);
+    Blort.blort(1001000510L, 2001000511L, 3001000512L, 4001000513L, 5001000514L, 6001000515L, 7001000516L, 8001000517L);
+    Blort.blort(1001000511L, 2001000512L, 3001000513L, 4001000514L, 5001000515L, 6001000516L, 7001000517L, 8001000518L);
+    Blort.blort(1001000512L, 2001000513L, 3001000514L, 4001000515L, 5001000516L, 6001000517L, 7001000518L, 8001000519L);
+    Blort.blort(1001000513L, 2001000514L, 3001000515L, 4001000516L, 5001000517L, 6001000518L, 7001000519L, 8001000520L);
+    Blort.blort(1001000514L, 2001000515L, 3001000516L, 4001000517L, 5001000518L, 6001000519L, 7001000520L, 8001000521L);
+    Blort.blort(1001000515L, 2001000516L, 3001000517L, 4001000518L, 5001000519L, 6001000520L, 7001000521L, 8001000522L);
+    Blort.blort(1001000516L, 2001000517L, 3001000518L, 4001000519L, 5001000520L, 6001000521L, 7001000522L, 8001000523L);
+    Blort.blort(1001000517L, 2001000518L, 3001000519L, 4001000520L, 5001000521L, 6001000522L, 7001000523L, 8001000524L);
+    Blort.blort(1001000518L, 2001000519L, 3001000520L, 4001000521L, 5001000522L, 6001000523L, 7001000524L, 8001000525L);
+    Blort.blort(1001000519L, 2001000520L, 3001000521L, 4001000522L, 5001000523L, 6001000524L, 7001000525L, 8001000526L);
+    Blort.blort(1001000520L, 2001000521L, 3001000522L, 4001000523L, 5001000524L, 6001000525L, 7001000526L, 8001000527L);
+    Blort.blort(1001000521L, 2001000522L, 3001000523L, 4001000524L, 5001000525L, 6001000526L, 7001000527L, 8001000528L);
+    Blort.blort(1001000522L, 2001000523L, 3001000524L, 4001000525L, 5001000526L, 6001000527L, 7001000528L, 8001000529L);
+    Blort.blort(1001000523L, 2001000524L, 3001000525L, 4001000526L, 5001000527L, 6001000528L, 7001000529L, 8001000530L);
+    Blort.blort(1001000524L, 2001000525L, 3001000526L, 4001000527L, 5001000528L, 6001000529L, 7001000530L, 8001000531L);
+    Blort.blort(1001000525L, 2001000526L, 3001000527L, 4001000528L, 5001000529L, 6001000530L, 7001000531L, 8001000532L);
+    Blort.blort(1001000526L, 2001000527L, 3001000528L, 4001000529L, 5001000530L, 6001000531L, 7001000532L, 8001000533L);
+    Blort.blort(1001000527L, 2001000528L, 3001000529L, 4001000530L, 5001000531L, 6001000532L, 7001000533L, 8001000534L);
+    Blort.blort(1001000528L, 2001000529L, 3001000530L, 4001000531L, 5001000532L, 6001000533L, 7001000534L, 8001000535L);
+    Blort.blort(1001000529L, 2001000530L, 3001000531L, 4001000532L, 5001000533L, 6001000534L, 7001000535L, 8001000536L);
+    Blort.blort(1001000530L, 2001000531L, 3001000532L, 4001000533L, 5001000534L, 6001000535L, 7001000536L, 8001000537L);
+    Blort.blort(1001000531L, 2001000532L, 3001000533L, 4001000534L, 5001000535L, 6001000536L, 7001000537L, 8001000538L);
+    Blort.blort(1001000532L, 2001000533L, 3001000534L, 4001000535L, 5001000536L, 6001000537L, 7001000538L, 8001000539L);
+    Blort.blort(1001000533L, 2001000534L, 3001000535L, 4001000536L, 5001000537L, 6001000538L, 7001000539L, 8001000540L);
+    Blort.blort(1001000534L, 2001000535L, 3001000536L, 4001000537L, 5001000538L, 6001000539L, 7001000540L, 8001000541L);
+    Blort.blort(1001000535L, 2001000536L, 3001000537L, 4001000538L, 5001000539L, 6001000540L, 7001000541L, 8001000542L);
+    Blort.blort(1001000536L, 2001000537L, 3001000538L, 4001000539L, 5001000540L, 6001000541L, 7001000542L, 8001000543L);
+    Blort.blort(1001000537L, 2001000538L, 3001000539L, 4001000540L, 5001000541L, 6001000542L, 7001000543L, 8001000544L);
+    Blort.blort(1001000538L, 2001000539L, 3001000540L, 4001000541L, 5001000542L, 6001000543L, 7001000544L, 8001000545L);
+    Blort.blort(1001000539L, 2001000540L, 3001000541L, 4001000542L, 5001000543L, 6001000544L, 7001000545L, 8001000546L);
+    Blort.blort(1001000540L, 2001000541L, 3001000542L, 4001000543L, 5001000544L, 6001000545L, 7001000546L, 8001000547L);
+    Blort.blort(1001000541L, 2001000542L, 3001000543L, 4001000544L, 5001000545L, 6001000546L, 7001000547L, 8001000548L);
+    Blort.blort(1001000542L, 2001000543L, 3001000544L, 4001000545L, 5001000546L, 6001000547L, 7001000548L, 8001000549L);
+    Blort.blort(1001000543L, 2001000544L, 3001000545L, 4001000546L, 5001000547L, 6001000548L, 7001000549L, 8001000550L);
+    Blort.blort(1001000544L, 2001000545L, 3001000546L, 4001000547L, 5001000548L, 6001000549L, 7001000550L, 8001000551L);
+    Blort.blort(1001000545L, 2001000546L, 3001000547L, 4001000548L, 5001000549L, 6001000550L, 7001000551L, 8001000552L);
+    Blort.blort(1001000546L, 2001000547L, 3001000548L, 4001000549L, 5001000550L, 6001000551L, 7001000552L, 8001000553L);
+    Blort.blort(1001000547L, 2001000548L, 3001000549L, 4001000550L, 5001000551L, 6001000552L, 7001000553L, 8001000554L);
+    Blort.blort(1001000548L, 2001000549L, 3001000550L, 4001000551L, 5001000552L, 6001000553L, 7001000554L, 8001000555L);
+    Blort.blort(1001000549L, 2001000550L, 3001000551L, 4001000552L, 5001000553L, 6001000554L, 7001000555L, 8001000556L);
+    Blort.blort(1001000550L, 2001000551L, 3001000552L, 4001000553L, 5001000554L, 6001000555L, 7001000556L, 8001000557L);
+    Blort.blort(1001000551L, 2001000552L, 3001000553L, 4001000554L, 5001000555L, 6001000556L, 7001000557L, 8001000558L);
+    Blort.blort(1001000552L, 2001000553L, 3001000554L, 4001000555L, 5001000556L, 6001000557L, 7001000558L, 8001000559L);
+    Blort.blort(1001000553L, 2001000554L, 3001000555L, 4001000556L, 5001000557L, 6001000558L, 7001000559L, 8001000560L);
+    Blort.blort(1001000554L, 2001000555L, 3001000556L, 4001000557L, 5001000558L, 6001000559L, 7001000560L, 8001000561L);
+    Blort.blort(1001000555L, 2001000556L, 3001000557L, 4001000558L, 5001000559L, 6001000560L, 7001000561L, 8001000562L);
+    Blort.blort(1001000556L, 2001000557L, 3001000558L, 4001000559L, 5001000560L, 6001000561L, 7001000562L, 8001000563L);
+    Blort.blort(1001000557L, 2001000558L, 3001000559L, 4001000560L, 5001000561L, 6001000562L, 7001000563L, 8001000564L);
+    Blort.blort(1001000558L, 2001000559L, 3001000560L, 4001000561L, 5001000562L, 6001000563L, 7001000564L, 8001000565L);
+    Blort.blort(1001000559L, 2001000560L, 3001000561L, 4001000562L, 5001000563L, 6001000564L, 7001000565L, 8001000566L);
+    Blort.blort(1001000560L, 2001000561L, 3001000562L, 4001000563L, 5001000564L, 6001000565L, 7001000566L, 8001000567L);
+    Blort.blort(1001000561L, 2001000562L, 3001000563L, 4001000564L, 5001000565L, 6001000566L, 7001000567L, 8001000568L);
+    Blort.blort(1001000562L, 2001000563L, 3001000564L, 4001000565L, 5001000566L, 6001000567L, 7001000568L, 8001000569L);
+    Blort.blort(1001000563L, 2001000564L, 3001000565L, 4001000566L, 5001000567L, 6001000568L, 7001000569L, 8001000570L);
+    Blort.blort(1001000564L, 2001000565L, 3001000566L, 4001000567L, 5001000568L, 6001000569L, 7001000570L, 8001000571L);
+    Blort.blort(1001000565L, 2001000566L, 3001000567L, 4001000568L, 5001000569L, 6001000570L, 7001000571L, 8001000572L);
+    Blort.blort(1001000566L, 2001000567L, 3001000568L, 4001000569L, 5001000570L, 6001000571L, 7001000572L, 8001000573L);
+    Blort.blort(1001000567L, 2001000568L, 3001000569L, 4001000570L, 5001000571L, 6001000572L, 7001000573L, 8001000574L);
+    Blort.blort(1001000568L, 2001000569L, 3001000570L, 4001000571L, 5001000572L, 6001000573L, 7001000574L, 8001000575L);
+    Blort.blort(1001000569L, 2001000570L, 3001000571L, 4001000572L, 5001000573L, 6001000574L, 7001000575L, 8001000576L);
+    Blort.blort(1001000570L, 2001000571L, 3001000572L, 4001000573L, 5001000574L, 6001000575L, 7001000576L, 8001000577L);
+    Blort.blort(1001000571L, 2001000572L, 3001000573L, 4001000574L, 5001000575L, 6001000576L, 7001000577L, 8001000578L);
+    Blort.blort(1001000572L, 2001000573L, 3001000574L, 4001000575L, 5001000576L, 6001000577L, 7001000578L, 8001000579L);
+    Blort.blort(1001000573L, 2001000574L, 3001000575L, 4001000576L, 5001000577L, 6001000578L, 7001000579L, 8001000580L);
+    Blort.blort(1001000574L, 2001000575L, 3001000576L, 4001000577L, 5001000578L, 6001000579L, 7001000580L, 8001000581L);
+    Blort.blort(1001000575L, 2001000576L, 3001000577L, 4001000578L, 5001000579L, 6001000580L, 7001000581L, 8001000582L);
+    Blort.blort(1001000576L, 2001000577L, 3001000578L, 4001000579L, 5001000580L, 6001000581L, 7001000582L, 8001000583L);
+    Blort.blort(1001000577L, 2001000578L, 3001000579L, 4001000580L, 5001000581L, 6001000582L, 7001000583L, 8001000584L);
+    Blort.blort(1001000578L, 2001000579L, 3001000580L, 4001000581L, 5001000582L, 6001000583L, 7001000584L, 8001000585L);
+    Blort.blort(1001000579L, 2001000580L, 3001000581L, 4001000582L, 5001000583L, 6001000584L, 7001000585L, 8001000586L);
+    Blort.blort(1001000580L, 2001000581L, 3001000582L, 4001000583L, 5001000584L, 6001000585L, 7001000586L, 8001000587L);
+    Blort.blort(1001000581L, 2001000582L, 3001000583L, 4001000584L, 5001000585L, 6001000586L, 7001000587L, 8001000588L);
+    Blort.blort(1001000582L, 2001000583L, 3001000584L, 4001000585L, 5001000586L, 6001000587L, 7001000588L, 8001000589L);
+    Blort.blort(1001000583L, 2001000584L, 3001000585L, 4001000586L, 5001000587L, 6001000588L, 7001000589L, 8001000590L);
+    Blort.blort(1001000584L, 2001000585L, 3001000586L, 4001000587L, 5001000588L, 6001000589L, 7001000590L, 8001000591L);
+    Blort.blort(1001000585L, 2001000586L, 3001000587L, 4001000588L, 5001000589L, 6001000590L, 7001000591L, 8001000592L);
+    Blort.blort(1001000586L, 2001000587L, 3001000588L, 4001000589L, 5001000590L, 6001000591L, 7001000592L, 8001000593L);
+    Blort.blort(1001000587L, 2001000588L, 3001000589L, 4001000590L, 5001000591L, 6001000592L, 7001000593L, 8001000594L);
+    Blort.blort(1001000588L, 2001000589L, 3001000590L, 4001000591L, 5001000592L, 6001000593L, 7001000594L, 8001000595L);
+    Blort.blort(1001000589L, 2001000590L, 3001000591L, 4001000592L, 5001000593L, 6001000594L, 7001000595L, 8001000596L);
+    Blort.blort(1001000590L, 2001000591L, 3001000592L, 4001000593L, 5001000594L, 6001000595L, 7001000596L, 8001000597L);
+    Blort.blort(1001000591L, 2001000592L, 3001000593L, 4001000594L, 5001000595L, 6001000596L, 7001000597L, 8001000598L);
+    Blort.blort(1001000592L, 2001000593L, 3001000594L, 4001000595L, 5001000596L, 6001000597L, 7001000598L, 8001000599L);
+    Blort.blort(1001000593L, 2001000594L, 3001000595L, 4001000596L, 5001000597L, 6001000598L, 7001000599L, 8001000600L);
+    Blort.blort(1001000594L, 2001000595L, 3001000596L, 4001000597L, 5001000598L, 6001000599L, 7001000600L, 8001000601L);
+    Blort.blort(1001000595L, 2001000596L, 3001000597L, 4001000598L, 5001000599L, 6001000600L, 7001000601L, 8001000602L);
+    Blort.blort(1001000596L, 2001000597L, 3001000598L, 4001000599L, 5001000600L, 6001000601L, 7001000602L, 8001000603L);
+    Blort.blort(1001000597L, 2001000598L, 3001000599L, 4001000600L, 5001000601L, 6001000602L, 7001000603L, 8001000604L);
+    Blort.blort(1001000598L, 2001000599L, 3001000600L, 4001000601L, 5001000602L, 6001000603L, 7001000604L, 8001000605L);
+    Blort.blort(1001000599L, 2001000600L, 3001000601L, 4001000602L, 5001000603L, 6001000604L, 7001000605L, 8001000606L);
+    Blort.blort(1001000600L, 2001000601L, 3001000602L, 4001000603L, 5001000604L, 6001000605L, 7001000606L, 8001000607L);
+    Blort.blort(1001000601L, 2001000602L, 3001000603L, 4001000604L, 5001000605L, 6001000606L, 7001000607L, 8001000608L);
+    Blort.blort(1001000602L, 2001000603L, 3001000604L, 4001000605L, 5001000606L, 6001000607L, 7001000608L, 8001000609L);
+    Blort.blort(1001000603L, 2001000604L, 3001000605L, 4001000606L, 5001000607L, 6001000608L, 7001000609L, 8001000610L);
+    Blort.blort(1001000604L, 2001000605L, 3001000606L, 4001000607L, 5001000608L, 6001000609L, 7001000610L, 8001000611L);
+    Blort.blort(1001000605L, 2001000606L, 3001000607L, 4001000608L, 5001000609L, 6001000610L, 7001000611L, 8001000612L);
+    Blort.blort(1001000606L, 2001000607L, 3001000608L, 4001000609L, 5001000610L, 6001000611L, 7001000612L, 8001000613L);
+    Blort.blort(1001000607L, 2001000608L, 3001000609L, 4001000610L, 5001000611L, 6001000612L, 7001000613L, 8001000614L);
+    Blort.blort(1001000608L, 2001000609L, 3001000610L, 4001000611L, 5001000612L, 6001000613L, 7001000614L, 8001000615L);
+    Blort.blort(1001000609L, 2001000610L, 3001000611L, 4001000612L, 5001000613L, 6001000614L, 7001000615L, 8001000616L);
+    Blort.blort(1001000610L, 2001000611L, 3001000612L, 4001000613L, 5001000614L, 6001000615L, 7001000616L, 8001000617L);
+    Blort.blort(1001000611L, 2001000612L, 3001000613L, 4001000614L, 5001000615L, 6001000616L, 7001000617L, 8001000618L);
+    Blort.blort(1001000612L, 2001000613L, 3001000614L, 4001000615L, 5001000616L, 6001000617L, 7001000618L, 8001000619L);
+    Blort.blort(1001000613L, 2001000614L, 3001000615L, 4001000616L, 5001000617L, 6001000618L, 7001000619L, 8001000620L);
+    Blort.blort(1001000614L, 2001000615L, 3001000616L, 4001000617L, 5001000618L, 6001000619L, 7001000620L, 8001000621L);
+    Blort.blort(1001000615L, 2001000616L, 3001000617L, 4001000618L, 5001000619L, 6001000620L, 7001000621L, 8001000622L);
+    Blort.blort(1001000616L, 2001000617L, 3001000618L, 4001000619L, 5001000620L, 6001000621L, 7001000622L, 8001000623L);
+    Blort.blort(1001000617L, 2001000618L, 3001000619L, 4001000620L, 5001000621L, 6001000622L, 7001000623L, 8001000624L);
+    Blort.blort(1001000618L, 2001000619L, 3001000620L, 4001000621L, 5001000622L, 6001000623L, 7001000624L, 8001000625L);
+    Blort.blort(1001000619L, 2001000620L, 3001000621L, 4001000622L, 5001000623L, 6001000624L, 7001000625L, 8001000626L);
+    Blort.blort(1001000620L, 2001000621L, 3001000622L, 4001000623L, 5001000624L, 6001000625L, 7001000626L, 8001000627L);
+    Blort.blort(1001000621L, 2001000622L, 3001000623L, 4001000624L, 5001000625L, 6001000626L, 7001000627L, 8001000628L);
+    Blort.blort(1001000622L, 2001000623L, 3001000624L, 4001000625L, 5001000626L, 6001000627L, 7001000628L, 8001000629L);
+    Blort.blort(1001000623L, 2001000624L, 3001000625L, 4001000626L, 5001000627L, 6001000628L, 7001000629L, 8001000630L);
+    Blort.blort(1001000624L, 2001000625L, 3001000626L, 4001000627L, 5001000628L, 6001000629L, 7001000630L, 8001000631L);
+    Blort.blort(1001000625L, 2001000626L, 3001000627L, 4001000628L, 5001000629L, 6001000630L, 7001000631L, 8001000632L);
+    Blort.blort(1001000626L, 2001000627L, 3001000628L, 4001000629L, 5001000630L, 6001000631L, 7001000632L, 8001000633L);
+    Blort.blort(1001000627L, 2001000628L, 3001000629L, 4001000630L, 5001000631L, 6001000632L, 7001000633L, 8001000634L);
+    Blort.blort(1001000628L, 2001000629L, 3001000630L, 4001000631L, 5001000632L, 6001000633L, 7001000634L, 8001000635L);
+    Blort.blort(1001000629L, 2001000630L, 3001000631L, 4001000632L, 5001000633L, 6001000634L, 7001000635L, 8001000636L);
+    Blort.blort(1001000630L, 2001000631L, 3001000632L, 4001000633L, 5001000634L, 6001000635L, 7001000636L, 8001000637L);
+    Blort.blort(1001000631L, 2001000632L, 3001000633L, 4001000634L, 5001000635L, 6001000636L, 7001000637L, 8001000638L);
+    Blort.blort(1001000632L, 2001000633L, 3001000634L, 4001000635L, 5001000636L, 6001000637L, 7001000638L, 8001000639L);
+    Blort.blort(1001000633L, 2001000634L, 3001000635L, 4001000636L, 5001000637L, 6001000638L, 7001000639L, 8001000640L);
+    Blort.blort(1001000634L, 2001000635L, 3001000636L, 4001000637L, 5001000638L, 6001000639L, 7001000640L, 8001000641L);
+    Blort.blort(1001000635L, 2001000636L, 3001000637L, 4001000638L, 5001000639L, 6001000640L, 7001000641L, 8001000642L);
+    Blort.blort(1001000636L, 2001000637L, 3001000638L, 4001000639L, 5001000640L, 6001000641L, 7001000642L, 8001000643L);
+    Blort.blort(1001000637L, 2001000638L, 3001000639L, 4001000640L, 5001000641L, 6001000642L, 7001000643L, 8001000644L);
+    Blort.blort(1001000638L, 2001000639L, 3001000640L, 4001000641L, 5001000642L, 6001000643L, 7001000644L, 8001000645L);
+    Blort.blort(1001000639L, 2001000640L, 3001000641L, 4001000642L, 5001000643L, 6001000644L, 7001000645L, 8001000646L);
+    Blort.blort(1001000640L, 2001000641L, 3001000642L, 4001000643L, 5001000644L, 6001000645L, 7001000646L, 8001000647L);
+    Blort.blort(1001000641L, 2001000642L, 3001000643L, 4001000644L, 5001000645L, 6001000646L, 7001000647L, 8001000648L);
+    Blort.blort(1001000642L, 2001000643L, 3001000644L, 4001000645L, 5001000646L, 6001000647L, 7001000648L, 8001000649L);
+    Blort.blort(1001000643L, 2001000644L, 3001000645L, 4001000646L, 5001000647L, 6001000648L, 7001000649L, 8001000650L);
+    Blort.blort(1001000644L, 2001000645L, 3001000646L, 4001000647L, 5001000648L, 6001000649L, 7001000650L, 8001000651L);
+    Blort.blort(1001000645L, 2001000646L, 3001000647L, 4001000648L, 5001000649L, 6001000650L, 7001000651L, 8001000652L);
+    Blort.blort(1001000646L, 2001000647L, 3001000648L, 4001000649L, 5001000650L, 6001000651L, 7001000652L, 8001000653L);
+    Blort.blort(1001000647L, 2001000648L, 3001000649L, 4001000650L, 5001000651L, 6001000652L, 7001000653L, 8001000654L);
+    Blort.blort(1001000648L, 2001000649L, 3001000650L, 4001000651L, 5001000652L, 6001000653L, 7001000654L, 8001000655L);
+    Blort.blort(1001000649L, 2001000650L, 3001000651L, 4001000652L, 5001000653L, 6001000654L, 7001000655L, 8001000656L);
+    Blort.blort(1001000650L, 2001000651L, 3001000652L, 4001000653L, 5001000654L, 6001000655L, 7001000656L, 8001000657L);
+    Blort.blort(1001000651L, 2001000652L, 3001000653L, 4001000654L, 5001000655L, 6001000656L, 7001000657L, 8001000658L);
+    Blort.blort(1001000652L, 2001000653L, 3001000654L, 4001000655L, 5001000656L, 6001000657L, 7001000658L, 8001000659L);
+    Blort.blort(1001000653L, 2001000654L, 3001000655L, 4001000656L, 5001000657L, 6001000658L, 7001000659L, 8001000660L);
+    Blort.blort(1001000654L, 2001000655L, 3001000656L, 4001000657L, 5001000658L, 6001000659L, 7001000660L, 8001000661L);
+    Blort.blort(1001000655L, 2001000656L, 3001000657L, 4001000658L, 5001000659L, 6001000660L, 7001000661L, 8001000662L);
+    Blort.blort(1001000656L, 2001000657L, 3001000658L, 4001000659L, 5001000660L, 6001000661L, 7001000662L, 8001000663L);
+    Blort.blort(1001000657L, 2001000658L, 3001000659L, 4001000660L, 5001000661L, 6001000662L, 7001000663L, 8001000664L);
+    Blort.blort(1001000658L, 2001000659L, 3001000660L, 4001000661L, 5001000662L, 6001000663L, 7001000664L, 8001000665L);
+    Blort.blort(1001000659L, 2001000660L, 3001000661L, 4001000662L, 5001000663L, 6001000664L, 7001000665L, 8001000666L);
+    Blort.blort(1001000660L, 2001000661L, 3001000662L, 4001000663L, 5001000664L, 6001000665L, 7001000666L, 8001000667L);
+    Blort.blort(1001000661L, 2001000662L, 3001000663L, 4001000664L, 5001000665L, 6001000666L, 7001000667L, 8001000668L);
+    Blort.blort(1001000662L, 2001000663L, 3001000664L, 4001000665L, 5001000666L, 6001000667L, 7001000668L, 8001000669L);
+    Blort.blort(1001000663L, 2001000664L, 3001000665L, 4001000666L, 5001000667L, 6001000668L, 7001000669L, 8001000670L);
+    Blort.blort(1001000664L, 2001000665L, 3001000666L, 4001000667L, 5001000668L, 6001000669L, 7001000670L, 8001000671L);
+    Blort.blort(1001000665L, 2001000666L, 3001000667L, 4001000668L, 5001000669L, 6001000670L, 7001000671L, 8001000672L);
+    Blort.blort(1001000666L, 2001000667L, 3001000668L, 4001000669L, 5001000670L, 6001000671L, 7001000672L, 8001000673L);
+    Blort.blort(1001000667L, 2001000668L, 3001000669L, 4001000670L, 5001000671L, 6001000672L, 7001000673L, 8001000674L);
+    Blort.blort(1001000668L, 2001000669L, 3001000670L, 4001000671L, 5001000672L, 6001000673L, 7001000674L, 8001000675L);
+    Blort.blort(1001000669L, 2001000670L, 3001000671L, 4001000672L, 5001000673L, 6001000674L, 7001000675L, 8001000676L);
+    Blort.blort(1001000670L, 2001000671L, 3001000672L, 4001000673L, 5001000674L, 6001000675L, 7001000676L, 8001000677L);
+    Blort.blort(1001000671L, 2001000672L, 3001000673L, 4001000674L, 5001000675L, 6001000676L, 7001000677L, 8001000678L);
+    Blort.blort(1001000672L, 2001000673L, 3001000674L, 4001000675L, 5001000676L, 6001000677L, 7001000678L, 8001000679L);
+    Blort.blort(1001000673L, 2001000674L, 3001000675L, 4001000676L, 5001000677L, 6001000678L, 7001000679L, 8001000680L);
+    Blort.blort(1001000674L, 2001000675L, 3001000676L, 4001000677L, 5001000678L, 6001000679L, 7001000680L, 8001000681L);
+    Blort.blort(1001000675L, 2001000676L, 3001000677L, 4001000678L, 5001000679L, 6001000680L, 7001000681L, 8001000682L);
+    Blort.blort(1001000676L, 2001000677L, 3001000678L, 4001000679L, 5001000680L, 6001000681L, 7001000682L, 8001000683L);
+    Blort.blort(1001000677L, 2001000678L, 3001000679L, 4001000680L, 5001000681L, 6001000682L, 7001000683L, 8001000684L);
+    Blort.blort(1001000678L, 2001000679L, 3001000680L, 4001000681L, 5001000682L, 6001000683L, 7001000684L, 8001000685L);
+    Blort.blort(1001000679L, 2001000680L, 3001000681L, 4001000682L, 5001000683L, 6001000684L, 7001000685L, 8001000686L);
+    Blort.blort(1001000680L, 2001000681L, 3001000682L, 4001000683L, 5001000684L, 6001000685L, 7001000686L, 8001000687L);
+    Blort.blort(1001000681L, 2001000682L, 3001000683L, 4001000684L, 5001000685L, 6001000686L, 7001000687L, 8001000688L);
+    Blort.blort(1001000682L, 2001000683L, 3001000684L, 4001000685L, 5001000686L, 6001000687L, 7001000688L, 8001000689L);
+    Blort.blort(1001000683L, 2001000684L, 3001000685L, 4001000686L, 5001000687L, 6001000688L, 7001000689L, 8001000690L);
+    Blort.blort(1001000684L, 2001000685L, 3001000686L, 4001000687L, 5001000688L, 6001000689L, 7001000690L, 8001000691L);
+    Blort.blort(1001000685L, 2001000686L, 3001000687L, 4001000688L, 5001000689L, 6001000690L, 7001000691L, 8001000692L);
+    Blort.blort(1001000686L, 2001000687L, 3001000688L, 4001000689L, 5001000690L, 6001000691L, 7001000692L, 8001000693L);
+    Blort.blort(1001000687L, 2001000688L, 3001000689L, 4001000690L, 5001000691L, 6001000692L, 7001000693L, 8001000694L);
+    Blort.blort(1001000688L, 2001000689L, 3001000690L, 4001000691L, 5001000692L, 6001000693L, 7001000694L, 8001000695L);
+    Blort.blort(1001000689L, 2001000690L, 3001000691L, 4001000692L, 5001000693L, 6001000694L, 7001000695L, 8001000696L);
+    Blort.blort(1001000690L, 2001000691L, 3001000692L, 4001000693L, 5001000694L, 6001000695L, 7001000696L, 8001000697L);
+    Blort.blort(1001000691L, 2001000692L, 3001000693L, 4001000694L, 5001000695L, 6001000696L, 7001000697L, 8001000698L);
+    Blort.blort(1001000692L, 2001000693L, 3001000694L, 4001000695L, 5001000696L, 6001000697L, 7001000698L, 8001000699L);
+    Blort.blort(1001000693L, 2001000694L, 3001000695L, 4001000696L, 5001000697L, 6001000698L, 7001000699L, 8001000700L);
+    Blort.blort(1001000694L, 2001000695L, 3001000696L, 4001000697L, 5001000698L, 6001000699L, 7001000700L, 8001000701L);
+    Blort.blort(1001000695L, 2001000696L, 3001000697L, 4001000698L, 5001000699L, 6001000700L, 7001000701L, 8001000702L);
+    Blort.blort(1001000696L, 2001000697L, 3001000698L, 4001000699L, 5001000700L, 6001000701L, 7001000702L, 8001000703L);
+    Blort.blort(1001000697L, 2001000698L, 3001000699L, 4001000700L, 5001000701L, 6001000702L, 7001000703L, 8001000704L);
+    Blort.blort(1001000698L, 2001000699L, 3001000700L, 4001000701L, 5001000702L, 6001000703L, 7001000704L, 8001000705L);
+    Blort.blort(1001000699L, 2001000700L, 3001000701L, 4001000702L, 5001000703L, 6001000704L, 7001000705L, 8001000706L);
+    Blort.blort(1001000700L, 2001000701L, 3001000702L, 4001000703L, 5001000704L, 6001000705L, 7001000706L, 8001000707L);
+    Blort.blort(1001000701L, 2001000702L, 3001000703L, 4001000704L, 5001000705L, 6001000706L, 7001000707L, 8001000708L);
+    Blort.blort(1001000702L, 2001000703L, 3001000704L, 4001000705L, 5001000706L, 6001000707L, 7001000708L, 8001000709L);
+    Blort.blort(1001000703L, 2001000704L, 3001000705L, 4001000706L, 5001000707L, 6001000708L, 7001000709L, 8001000710L);
+    Blort.blort(1001000704L, 2001000705L, 3001000706L, 4001000707L, 5001000708L, 6001000709L, 7001000710L, 8001000711L);
+    Blort.blort(1001000705L, 2001000706L, 3001000707L, 4001000708L, 5001000709L, 6001000710L, 7001000711L, 8001000712L);
+    Blort.blort(1001000706L, 2001000707L, 3001000708L, 4001000709L, 5001000710L, 6001000711L, 7001000712L, 8001000713L);
+    Blort.blort(1001000707L, 2001000708L, 3001000709L, 4001000710L, 5001000711L, 6001000712L, 7001000713L, 8001000714L);
+    Blort.blort(1001000708L, 2001000709L, 3001000710L, 4001000711L, 5001000712L, 6001000713L, 7001000714L, 8001000715L);
+    Blort.blort(1001000709L, 2001000710L, 3001000711L, 4001000712L, 5001000713L, 6001000714L, 7001000715L, 8001000716L);
+    Blort.blort(1001000710L, 2001000711L, 3001000712L, 4001000713L, 5001000714L, 6001000715L, 7001000716L, 8001000717L);
+    Blort.blort(1001000711L, 2001000712L, 3001000713L, 4001000714L, 5001000715L, 6001000716L, 7001000717L, 8001000718L);
+    Blort.blort(1001000712L, 2001000713L, 3001000714L, 4001000715L, 5001000716L, 6001000717L, 7001000718L, 8001000719L);
+    Blort.blort(1001000713L, 2001000714L, 3001000715L, 4001000716L, 5001000717L, 6001000718L, 7001000719L, 8001000720L);
+    Blort.blort(1001000714L, 2001000715L, 3001000716L, 4001000717L, 5001000718L, 6001000719L, 7001000720L, 8001000721L);
+    Blort.blort(1001000715L, 2001000716L, 3001000717L, 4001000718L, 5001000719L, 6001000720L, 7001000721L, 8001000722L);
+    Blort.blort(1001000716L, 2001000717L, 3001000718L, 4001000719L, 5001000720L, 6001000721L, 7001000722L, 8001000723L);
+    Blort.blort(1001000717L, 2001000718L, 3001000719L, 4001000720L, 5001000721L, 6001000722L, 7001000723L, 8001000724L);
+    Blort.blort(1001000718L, 2001000719L, 3001000720L, 4001000721L, 5001000722L, 6001000723L, 7001000724L, 8001000725L);
+    Blort.blort(1001000719L, 2001000720L, 3001000721L, 4001000722L, 5001000723L, 6001000724L, 7001000725L, 8001000726L);
+    Blort.blort(1001000720L, 2001000721L, 3001000722L, 4001000723L, 5001000724L, 6001000725L, 7001000726L, 8001000727L);
+    Blort.blort(1001000721L, 2001000722L, 3001000723L, 4001000724L, 5001000725L, 6001000726L, 7001000727L, 8001000728L);
+    Blort.blort(1001000722L, 2001000723L, 3001000724L, 4001000725L, 5001000726L, 6001000727L, 7001000728L, 8001000729L);
+    Blort.blort(1001000723L, 2001000724L, 3001000725L, 4001000726L, 5001000727L, 6001000728L, 7001000729L, 8001000730L);
+    Blort.blort(1001000724L, 2001000725L, 3001000726L, 4001000727L, 5001000728L, 6001000729L, 7001000730L, 8001000731L);
+    Blort.blort(1001000725L, 2001000726L, 3001000727L, 4001000728L, 5001000729L, 6001000730L, 7001000731L, 8001000732L);
+    Blort.blort(1001000726L, 2001000727L, 3001000728L, 4001000729L, 5001000730L, 6001000731L, 7001000732L, 8001000733L);
+    Blort.blort(1001000727L, 2001000728L, 3001000729L, 4001000730L, 5001000731L, 6001000732L, 7001000733L, 8001000734L);
+    Blort.blort(1001000728L, 2001000729L, 3001000730L, 4001000731L, 5001000732L, 6001000733L, 7001000734L, 8001000735L);
+    Blort.blort(1001000729L, 2001000730L, 3001000731L, 4001000732L, 5001000733L, 6001000734L, 7001000735L, 8001000736L);
+    Blort.blort(1001000730L, 2001000731L, 3001000732L, 4001000733L, 5001000734L, 6001000735L, 7001000736L, 8001000737L);
+    Blort.blort(1001000731L, 2001000732L, 3001000733L, 4001000734L, 5001000735L, 6001000736L, 7001000737L, 8001000738L);
+    Blort.blort(1001000732L, 2001000733L, 3001000734L, 4001000735L, 5001000736L, 6001000737L, 7001000738L, 8001000739L);
+    Blort.blort(1001000733L, 2001000734L, 3001000735L, 4001000736L, 5001000737L, 6001000738L, 7001000739L, 8001000740L);
+    Blort.blort(1001000734L, 2001000735L, 3001000736L, 4001000737L, 5001000738L, 6001000739L, 7001000740L, 8001000741L);
+    Blort.blort(1001000735L, 2001000736L, 3001000737L, 4001000738L, 5001000739L, 6001000740L, 7001000741L, 8001000742L);
+    Blort.blort(1001000736L, 2001000737L, 3001000738L, 4001000739L, 5001000740L, 6001000741L, 7001000742L, 8001000743L);
+    Blort.blort(1001000737L, 2001000738L, 3001000739L, 4001000740L, 5001000741L, 6001000742L, 7001000743L, 8001000744L);
+    Blort.blort(1001000738L, 2001000739L, 3001000740L, 4001000741L, 5001000742L, 6001000743L, 7001000744L, 8001000745L);
+    Blort.blort(1001000739L, 2001000740L, 3001000741L, 4001000742L, 5001000743L, 6001000744L, 7001000745L, 8001000746L);
+    Blort.blort(1001000740L, 2001000741L, 3001000742L, 4001000743L, 5001000744L, 6001000745L, 7001000746L, 8001000747L);
+    Blort.blort(1001000741L, 2001000742L, 3001000743L, 4001000744L, 5001000745L, 6001000746L, 7001000747L, 8001000748L);
+    Blort.blort(1001000742L, 2001000743L, 3001000744L, 4001000745L, 5001000746L, 6001000747L, 7001000748L, 8001000749L);
+    Blort.blort(1001000743L, 2001000744L, 3001000745L, 4001000746L, 5001000747L, 6001000748L, 7001000749L, 8001000750L);
+    Blort.blort(1001000744L, 2001000745L, 3001000746L, 4001000747L, 5001000748L, 6001000749L, 7001000750L, 8001000751L);
+    Blort.blort(1001000745L, 2001000746L, 3001000747L, 4001000748L, 5001000749L, 6001000750L, 7001000751L, 8001000752L);
+    Blort.blort(1001000746L, 2001000747L, 3001000748L, 4001000749L, 5001000750L, 6001000751L, 7001000752L, 8001000753L);
+    Blort.blort(1001000747L, 2001000748L, 3001000749L, 4001000750L, 5001000751L, 6001000752L, 7001000753L, 8001000754L);
+    Blort.blort(1001000748L, 2001000749L, 3001000750L, 4001000751L, 5001000752L, 6001000753L, 7001000754L, 8001000755L);
+    Blort.blort(1001000749L, 2001000750L, 3001000751L, 4001000752L, 5001000753L, 6001000754L, 7001000755L, 8001000756L);
+    Blort.blort(1001000750L, 2001000751L, 3001000752L, 4001000753L, 5001000754L, 6001000755L, 7001000756L, 8001000757L);
+    Blort.blort(1001000751L, 2001000752L, 3001000753L, 4001000754L, 5001000755L, 6001000756L, 7001000757L, 8001000758L);
+    Blort.blort(1001000752L, 2001000753L, 3001000754L, 4001000755L, 5001000756L, 6001000757L, 7001000758L, 8001000759L);
+    Blort.blort(1001000753L, 2001000754L, 3001000755L, 4001000756L, 5001000757L, 6001000758L, 7001000759L, 8001000760L);
+    Blort.blort(1001000754L, 2001000755L, 3001000756L, 4001000757L, 5001000758L, 6001000759L, 7001000760L, 8001000761L);
+    Blort.blort(1001000755L, 2001000756L, 3001000757L, 4001000758L, 5001000759L, 6001000760L, 7001000761L, 8001000762L);
+    Blort.blort(1001000756L, 2001000757L, 3001000758L, 4001000759L, 5001000760L, 6001000761L, 7001000762L, 8001000763L);
+    Blort.blort(1001000757L, 2001000758L, 3001000759L, 4001000760L, 5001000761L, 6001000762L, 7001000763L, 8001000764L);
+    Blort.blort(1001000758L, 2001000759L, 3001000760L, 4001000761L, 5001000762L, 6001000763L, 7001000764L, 8001000765L);
+    Blort.blort(1001000759L, 2001000760L, 3001000761L, 4001000762L, 5001000763L, 6001000764L, 7001000765L, 8001000766L);
+    Blort.blort(1001000760L, 2001000761L, 3001000762L, 4001000763L, 5001000764L, 6001000765L, 7001000766L, 8001000767L);
+    Blort.blort(1001000761L, 2001000762L, 3001000763L, 4001000764L, 5001000765L, 6001000766L, 7001000767L, 8001000768L);
+    Blort.blort(1001000762L, 2001000763L, 3001000764L, 4001000765L, 5001000766L, 6001000767L, 7001000768L, 8001000769L);
+    Blort.blort(1001000763L, 2001000764L, 3001000765L, 4001000766L, 5001000767L, 6001000768L, 7001000769L, 8001000770L);
+    Blort.blort(1001000764L, 2001000765L, 3001000766L, 4001000767L, 5001000768L, 6001000769L, 7001000770L, 8001000771L);
+    Blort.blort(1001000765L, 2001000766L, 3001000767L, 4001000768L, 5001000769L, 6001000770L, 7001000771L, 8001000772L);
+    Blort.blort(1001000766L, 2001000767L, 3001000768L, 4001000769L, 5001000770L, 6001000771L, 7001000772L, 8001000773L);
+    Blort.blort(1001000767L, 2001000768L, 3001000769L, 4001000770L, 5001000771L, 6001000772L, 7001000773L, 8001000774L);
+    Blort.blort(1001000768L, 2001000769L, 3001000770L, 4001000771L, 5001000772L, 6001000773L, 7001000774L, 8001000775L);
+    Blort.blort(1001000769L, 2001000770L, 3001000771L, 4001000772L, 5001000773L, 6001000774L, 7001000775L, 8001000776L);
+    Blort.blort(1001000770L, 2001000771L, 3001000772L, 4001000773L, 5001000774L, 6001000775L, 7001000776L, 8001000777L);
+    Blort.blort(1001000771L, 2001000772L, 3001000773L, 4001000774L, 5001000775L, 6001000776L, 7001000777L, 8001000778L);
+    Blort.blort(1001000772L, 2001000773L, 3001000774L, 4001000775L, 5001000776L, 6001000777L, 7001000778L, 8001000779L);
+    Blort.blort(1001000773L, 2001000774L, 3001000775L, 4001000776L, 5001000777L, 6001000778L, 7001000779L, 8001000780L);
+    Blort.blort(1001000774L, 2001000775L, 3001000776L, 4001000777L, 5001000778L, 6001000779L, 7001000780L, 8001000781L);
+    Blort.blort(1001000775L, 2001000776L, 3001000777L, 4001000778L, 5001000779L, 6001000780L, 7001000781L, 8001000782L);
+    Blort.blort(1001000776L, 2001000777L, 3001000778L, 4001000779L, 5001000780L, 6001000781L, 7001000782L, 8001000783L);
+    Blort.blort(1001000777L, 2001000778L, 3001000779L, 4001000780L, 5001000781L, 6001000782L, 7001000783L, 8001000784L);
+    Blort.blort(1001000778L, 2001000779L, 3001000780L, 4001000781L, 5001000782L, 6001000783L, 7001000784L, 8001000785L);
+    Blort.blort(1001000779L, 2001000780L, 3001000781L, 4001000782L, 5001000783L, 6001000784L, 7001000785L, 8001000786L);
+    Blort.blort(1001000780L, 2001000781L, 3001000782L, 4001000783L, 5001000784L, 6001000785L, 7001000786L, 8001000787L);
+    Blort.blort(1001000781L, 2001000782L, 3001000783L, 4001000784L, 5001000785L, 6001000786L, 7001000787L, 8001000788L);
+    Blort.blort(1001000782L, 2001000783L, 3001000784L, 4001000785L, 5001000786L, 6001000787L, 7001000788L, 8001000789L);
+    Blort.blort(1001000783L, 2001000784L, 3001000785L, 4001000786L, 5001000787L, 6001000788L, 7001000789L, 8001000790L);
+    Blort.blort(1001000784L, 2001000785L, 3001000786L, 4001000787L, 5001000788L, 6001000789L, 7001000790L, 8001000791L);
+    Blort.blort(1001000785L, 2001000786L, 3001000787L, 4001000788L, 5001000789L, 6001000790L, 7001000791L, 8001000792L);
+    Blort.blort(1001000786L, 2001000787L, 3001000788L, 4001000789L, 5001000790L, 6001000791L, 7001000792L, 8001000793L);
+    Blort.blort(1001000787L, 2001000788L, 3001000789L, 4001000790L, 5001000791L, 6001000792L, 7001000793L, 8001000794L);
+    Blort.blort(1001000788L, 2001000789L, 3001000790L, 4001000791L, 5001000792L, 6001000793L, 7001000794L, 8001000795L);
+    Blort.blort(1001000789L, 2001000790L, 3001000791L, 4001000792L, 5001000793L, 6001000794L, 7001000795L, 8001000796L);
+    Blort.blort(1001000790L, 2001000791L, 3001000792L, 4001000793L, 5001000794L, 6001000795L, 7001000796L, 8001000797L);
+    Blort.blort(1001000791L, 2001000792L, 3001000793L, 4001000794L, 5001000795L, 6001000796L, 7001000797L, 8001000798L);
+    Blort.blort(1001000792L, 2001000793L, 3001000794L, 4001000795L, 5001000796L, 6001000797L, 7001000798L, 8001000799L);
+    Blort.blort(1001000793L, 2001000794L, 3001000795L, 4001000796L, 5001000797L, 6001000798L, 7001000799L, 8001000800L);
+    Blort.blort(1001000794L, 2001000795L, 3001000796L, 4001000797L, 5001000798L, 6001000799L, 7001000800L, 8001000801L);
+    Blort.blort(1001000795L, 2001000796L, 3001000797L, 4001000798L, 5001000799L, 6001000800L, 7001000801L, 8001000802L);
+    Blort.blort(1001000796L, 2001000797L, 3001000798L, 4001000799L, 5001000800L, 6001000801L, 7001000802L, 8001000803L);
+    Blort.blort(1001000797L, 2001000798L, 3001000799L, 4001000800L, 5001000801L, 6001000802L, 7001000803L, 8001000804L);
+    Blort.blort(1001000798L, 2001000799L, 3001000800L, 4001000801L, 5001000802L, 6001000803L, 7001000804L, 8001000805L);
+    Blort.blort(1001000799L, 2001000800L, 3001000801L, 4001000802L, 5001000803L, 6001000804L, 7001000805L, 8001000806L);
+    Blort.blort(1001000800L, 2001000801L, 3001000802L, 4001000803L, 5001000804L, 6001000805L, 7001000806L, 8001000807L);
+    Blort.blort(1001000801L, 2001000802L, 3001000803L, 4001000804L, 5001000805L, 6001000806L, 7001000807L, 8001000808L);
+    Blort.blort(1001000802L, 2001000803L, 3001000804L, 4001000805L, 5001000806L, 6001000807L, 7001000808L, 8001000809L);
+    Blort.blort(1001000803L, 2001000804L, 3001000805L, 4001000806L, 5001000807L, 6001000808L, 7001000809L, 8001000810L);
+    Blort.blort(1001000804L, 2001000805L, 3001000806L, 4001000807L, 5001000808L, 6001000809L, 7001000810L, 8001000811L);
+    Blort.blort(1001000805L, 2001000806L, 3001000807L, 4001000808L, 5001000809L, 6001000810L, 7001000811L, 8001000812L);
+    Blort.blort(1001000806L, 2001000807L, 3001000808L, 4001000809L, 5001000810L, 6001000811L, 7001000812L, 8001000813L);
+    Blort.blort(1001000807L, 2001000808L, 3001000809L, 4001000810L, 5001000811L, 6001000812L, 7001000813L, 8001000814L);
+    Blort.blort(1001000808L, 2001000809L, 3001000810L, 4001000811L, 5001000812L, 6001000813L, 7001000814L, 8001000815L);
+    Blort.blort(1001000809L, 2001000810L, 3001000811L, 4001000812L, 5001000813L, 6001000814L, 7001000815L, 8001000816L);
+    Blort.blort(1001000810L, 2001000811L, 3001000812L, 4001000813L, 5001000814L, 6001000815L, 7001000816L, 8001000817L);
+    Blort.blort(1001000811L, 2001000812L, 3001000813L, 4001000814L, 5001000815L, 6001000816L, 7001000817L, 8001000818L);
+    Blort.blort(1001000812L, 2001000813L, 3001000814L, 4001000815L, 5001000816L, 6001000817L, 7001000818L, 8001000819L);
+    Blort.blort(1001000813L, 2001000814L, 3001000815L, 4001000816L, 5001000817L, 6001000818L, 7001000819L, 8001000820L);
+    Blort.blort(1001000814L, 2001000815L, 3001000816L, 4001000817L, 5001000818L, 6001000819L, 7001000820L, 8001000821L);
+    Blort.blort(1001000815L, 2001000816L, 3001000817L, 4001000818L, 5001000819L, 6001000820L, 7001000821L, 8001000822L);
+    Blort.blort(1001000816L, 2001000817L, 3001000818L, 4001000819L, 5001000820L, 6001000821L, 7001000822L, 8001000823L);
+    Blort.blort(1001000817L, 2001000818L, 3001000819L, 4001000820L, 5001000821L, 6001000822L, 7001000823L, 8001000824L);
+    Blort.blort(1001000818L, 2001000819L, 3001000820L, 4001000821L, 5001000822L, 6001000823L, 7001000824L, 8001000825L);
+    Blort.blort(1001000819L, 2001000820L, 3001000821L, 4001000822L, 5001000823L, 6001000824L, 7001000825L, 8001000826L);
+    Blort.blort(1001000820L, 2001000821L, 3001000822L, 4001000823L, 5001000824L, 6001000825L, 7001000826L, 8001000827L);
+    Blort.blort(1001000821L, 2001000822L, 3001000823L, 4001000824L, 5001000825L, 6001000826L, 7001000827L, 8001000828L);
+    Blort.blort(1001000822L, 2001000823L, 3001000824L, 4001000825L, 5001000826L, 6001000827L, 7001000828L, 8001000829L);
+    Blort.blort(1001000823L, 2001000824L, 3001000825L, 4001000826L, 5001000827L, 6001000828L, 7001000829L, 8001000830L);
+    Blort.blort(1001000824L, 2001000825L, 3001000826L, 4001000827L, 5001000828L, 6001000829L, 7001000830L, 8001000831L);
+    Blort.blort(1001000825L, 2001000826L, 3001000827L, 4001000828L, 5001000829L, 6001000830L, 7001000831L, 8001000832L);
+    Blort.blort(1001000826L, 2001000827L, 3001000828L, 4001000829L, 5001000830L, 6001000831L, 7001000832L, 8001000833L);
+    Blort.blort(1001000827L, 2001000828L, 3001000829L, 4001000830L, 5001000831L, 6001000832L, 7001000833L, 8001000834L);
+    Blort.blort(1001000828L, 2001000829L, 3001000830L, 4001000831L, 5001000832L, 6001000833L, 7001000834L, 8001000835L);
+    Blort.blort(1001000829L, 2001000830L, 3001000831L, 4001000832L, 5001000833L, 6001000834L, 7001000835L, 8001000836L);
+    Blort.blort(1001000830L, 2001000831L, 3001000832L, 4001000833L, 5001000834L, 6001000835L, 7001000836L, 8001000837L);
+    Blort.blort(1001000831L, 2001000832L, 3001000833L, 4001000834L, 5001000835L, 6001000836L, 7001000837L, 8001000838L);
+    Blort.blort(1001000832L, 2001000833L, 3001000834L, 4001000835L, 5001000836L, 6001000837L, 7001000838L, 8001000839L);
+    Blort.blort(1001000833L, 2001000834L, 3001000835L, 4001000836L, 5001000837L, 6001000838L, 7001000839L, 8001000840L);
+    Blort.blort(1001000834L, 2001000835L, 3001000836L, 4001000837L, 5001000838L, 6001000839L, 7001000840L, 8001000841L);
+    Blort.blort(1001000835L, 2001000836L, 3001000837L, 4001000838L, 5001000839L, 6001000840L, 7001000841L, 8001000842L);
+    Blort.blort(1001000836L, 2001000837L, 3001000838L, 4001000839L, 5001000840L, 6001000841L, 7001000842L, 8001000843L);
+    Blort.blort(1001000837L, 2001000838L, 3001000839L, 4001000840L, 5001000841L, 6001000842L, 7001000843L, 8001000844L);
+    Blort.blort(1001000838L, 2001000839L, 3001000840L, 4001000841L, 5001000842L, 6001000843L, 7001000844L, 8001000845L);
+    Blort.blort(1001000839L, 2001000840L, 3001000841L, 4001000842L, 5001000843L, 6001000844L, 7001000845L, 8001000846L);
+    Blort.blort(1001000840L, 2001000841L, 3001000842L, 4001000843L, 5001000844L, 6001000845L, 7001000846L, 8001000847L);
+    Blort.blort(1001000841L, 2001000842L, 3001000843L, 4001000844L, 5001000845L, 6001000846L, 7001000847L, 8001000848L);
+    Blort.blort(1001000842L, 2001000843L, 3001000844L, 4001000845L, 5001000846L, 6001000847L, 7001000848L, 8001000849L);
+    Blort.blort(1001000843L, 2001000844L, 3001000845L, 4001000846L, 5001000847L, 6001000848L, 7001000849L, 8001000850L);
+    Blort.blort(1001000844L, 2001000845L, 3001000846L, 4001000847L, 5001000848L, 6001000849L, 7001000850L, 8001000851L);
+    Blort.blort(1001000845L, 2001000846L, 3001000847L, 4001000848L, 5001000849L, 6001000850L, 7001000851L, 8001000852L);
+    Blort.blort(1001000846L, 2001000847L, 3001000848L, 4001000849L, 5001000850L, 6001000851L, 7001000852L, 8001000853L);
+    Blort.blort(1001000847L, 2001000848L, 3001000849L, 4001000850L, 5001000851L, 6001000852L, 7001000853L, 8001000854L);
+    Blort.blort(1001000848L, 2001000849L, 3001000850L, 4001000851L, 5001000852L, 6001000853L, 7001000854L, 8001000855L);
+    Blort.blort(1001000849L, 2001000850L, 3001000851L, 4001000852L, 5001000853L, 6001000854L, 7001000855L, 8001000856L);
+    Blort.blort(1001000850L, 2001000851L, 3001000852L, 4001000853L, 5001000854L, 6001000855L, 7001000856L, 8001000857L);
+    Blort.blort(1001000851L, 2001000852L, 3001000853L, 4001000854L, 5001000855L, 6001000856L, 7001000857L, 8001000858L);
+    Blort.blort(1001000852L, 2001000853L, 3001000854L, 4001000855L, 5001000856L, 6001000857L, 7001000858L, 8001000859L);
+    Blort.blort(1001000853L, 2001000854L, 3001000855L, 4001000856L, 5001000857L, 6001000858L, 7001000859L, 8001000860L);
+    Blort.blort(1001000854L, 2001000855L, 3001000856L, 4001000857L, 5001000858L, 6001000859L, 7001000860L, 8001000861L);
+    Blort.blort(1001000855L, 2001000856L, 3001000857L, 4001000858L, 5001000859L, 6001000860L, 7001000861L, 8001000862L);
+    Blort.blort(1001000856L, 2001000857L, 3001000858L, 4001000859L, 5001000860L, 6001000861L, 7001000862L, 8001000863L);
+    Blort.blort(1001000857L, 2001000858L, 3001000859L, 4001000860L, 5001000861L, 6001000862L, 7001000863L, 8001000864L);
+    Blort.blort(1001000858L, 2001000859L, 3001000860L, 4001000861L, 5001000862L, 6001000863L, 7001000864L, 8001000865L);
+    Blort.blort(1001000859L, 2001000860L, 3001000861L, 4001000862L, 5001000863L, 6001000864L, 7001000865L, 8001000866L);
+    Blort.blort(1001000860L, 2001000861L, 3001000862L, 4001000863L, 5001000864L, 6001000865L, 7001000866L, 8001000867L);
+    Blort.blort(1001000861L, 2001000862L, 3001000863L, 4001000864L, 5001000865L, 6001000866L, 7001000867L, 8001000868L);
+    Blort.blort(1001000862L, 2001000863L, 3001000864L, 4001000865L, 5001000866L, 6001000867L, 7001000868L, 8001000869L);
+    Blort.blort(1001000863L, 2001000864L, 3001000865L, 4001000866L, 5001000867L, 6001000868L, 7001000869L, 8001000870L);
+    Blort.blort(1001000864L, 2001000865L, 3001000866L, 4001000867L, 5001000868L, 6001000869L, 7001000870L, 8001000871L);
+    Blort.blort(1001000865L, 2001000866L, 3001000867L, 4001000868L, 5001000869L, 6001000870L, 7001000871L, 8001000872L);
+    Blort.blort(1001000866L, 2001000867L, 3001000868L, 4001000869L, 5001000870L, 6001000871L, 7001000872L, 8001000873L);
+    Blort.blort(1001000867L, 2001000868L, 3001000869L, 4001000870L, 5001000871L, 6001000872L, 7001000873L, 8001000874L);
+    Blort.blort(1001000868L, 2001000869L, 3001000870L, 4001000871L, 5001000872L, 6001000873L, 7001000874L, 8001000875L);
+    Blort.blort(1001000869L, 2001000870L, 3001000871L, 4001000872L, 5001000873L, 6001000874L, 7001000875L, 8001000876L);
+    Blort.blort(1001000870L, 2001000871L, 3001000872L, 4001000873L, 5001000874L, 6001000875L, 7001000876L, 8001000877L);
+    Blort.blort(1001000871L, 2001000872L, 3001000873L, 4001000874L, 5001000875L, 6001000876L, 7001000877L, 8001000878L);
+    Blort.blort(1001000872L, 2001000873L, 3001000874L, 4001000875L, 5001000876L, 6001000877L, 7001000878L, 8001000879L);
+    Blort.blort(1001000873L, 2001000874L, 3001000875L, 4001000876L, 5001000877L, 6001000878L, 7001000879L, 8001000880L);
+    Blort.blort(1001000874L, 2001000875L, 3001000876L, 4001000877L, 5001000878L, 6001000879L, 7001000880L, 8001000881L);
+    Blort.blort(1001000875L, 2001000876L, 3001000877L, 4001000878L, 5001000879L, 6001000880L, 7001000881L, 8001000882L);
+    Blort.blort(1001000876L, 2001000877L, 3001000878L, 4001000879L, 5001000880L, 6001000881L, 7001000882L, 8001000883L);
+    Blort.blort(1001000877L, 2001000878L, 3001000879L, 4001000880L, 5001000881L, 6001000882L, 7001000883L, 8001000884L);
+    Blort.blort(1001000878L, 2001000879L, 3001000880L, 4001000881L, 5001000882L, 6001000883L, 7001000884L, 8001000885L);
+    Blort.blort(1001000879L, 2001000880L, 3001000881L, 4001000882L, 5001000883L, 6001000884L, 7001000885L, 8001000886L);
+    Blort.blort(1001000880L, 2001000881L, 3001000882L, 4001000883L, 5001000884L, 6001000885L, 7001000886L, 8001000887L);
+    Blort.blort(1001000881L, 2001000882L, 3001000883L, 4001000884L, 5001000885L, 6001000886L, 7001000887L, 8001000888L);
+    Blort.blort(1001000882L, 2001000883L, 3001000884L, 4001000885L, 5001000886L, 6001000887L, 7001000888L, 8001000889L);
+    Blort.blort(1001000883L, 2001000884L, 3001000885L, 4001000886L, 5001000887L, 6001000888L, 7001000889L, 8001000890L);
+    Blort.blort(1001000884L, 2001000885L, 3001000886L, 4001000887L, 5001000888L, 6001000889L, 7001000890L, 8001000891L);
+    Blort.blort(1001000885L, 2001000886L, 3001000887L, 4001000888L, 5001000889L, 6001000890L, 7001000891L, 8001000892L);
+    Blort.blort(1001000886L, 2001000887L, 3001000888L, 4001000889L, 5001000890L, 6001000891L, 7001000892L, 8001000893L);
+    Blort.blort(1001000887L, 2001000888L, 3001000889L, 4001000890L, 5001000891L, 6001000892L, 7001000893L, 8001000894L);
+    Blort.blort(1001000888L, 2001000889L, 3001000890L, 4001000891L, 5001000892L, 6001000893L, 7001000894L, 8001000895L);
+    Blort.blort(1001000889L, 2001000890L, 3001000891L, 4001000892L, 5001000893L, 6001000894L, 7001000895L, 8001000896L);
+    Blort.blort(1001000890L, 2001000891L, 3001000892L, 4001000893L, 5001000894L, 6001000895L, 7001000896L, 8001000897L);
+    Blort.blort(1001000891L, 2001000892L, 3001000893L, 4001000894L, 5001000895L, 6001000896L, 7001000897L, 8001000898L);
+    Blort.blort(1001000892L, 2001000893L, 3001000894L, 4001000895L, 5001000896L, 6001000897L, 7001000898L, 8001000899L);
+    Blort.blort(1001000893L, 2001000894L, 3001000895L, 4001000896L, 5001000897L, 6001000898L, 7001000899L, 8001000900L);
+    Blort.blort(1001000894L, 2001000895L, 3001000896L, 4001000897L, 5001000898L, 6001000899L, 7001000900L, 8001000901L);
+    Blort.blort(1001000895L, 2001000896L, 3001000897L, 4001000898L, 5001000899L, 6001000900L, 7001000901L, 8001000902L);
+    Blort.blort(1001000896L, 2001000897L, 3001000898L, 4001000899L, 5001000900L, 6001000901L, 7001000902L, 8001000903L);
+    Blort.blort(1001000897L, 2001000898L, 3001000899L, 4001000900L, 5001000901L, 6001000902L, 7001000903L, 8001000904L);
+    Blort.blort(1001000898L, 2001000899L, 3001000900L, 4001000901L, 5001000902L, 6001000903L, 7001000904L, 8001000905L);
+    Blort.blort(1001000899L, 2001000900L, 3001000901L, 4001000902L, 5001000903L, 6001000904L, 7001000905L, 8001000906L);
+    Blort.blort(1001000900L, 2001000901L, 3001000902L, 4001000903L, 5001000904L, 6001000905L, 7001000906L, 8001000907L);
+    Blort.blort(1001000901L, 2001000902L, 3001000903L, 4001000904L, 5001000905L, 6001000906L, 7001000907L, 8001000908L);
+    Blort.blort(1001000902L, 2001000903L, 3001000904L, 4001000905L, 5001000906L, 6001000907L, 7001000908L, 8001000909L);
+    Blort.blort(1001000903L, 2001000904L, 3001000905L, 4001000906L, 5001000907L, 6001000908L, 7001000909L, 8001000910L);
+    Blort.blort(1001000904L, 2001000905L, 3001000906L, 4001000907L, 5001000908L, 6001000909L, 7001000910L, 8001000911L);
+    Blort.blort(1001000905L, 2001000906L, 3001000907L, 4001000908L, 5001000909L, 6001000910L, 7001000911L, 8001000912L);
+    Blort.blort(1001000906L, 2001000907L, 3001000908L, 4001000909L, 5001000910L, 6001000911L, 7001000912L, 8001000913L);
+    Blort.blort(1001000907L, 2001000908L, 3001000909L, 4001000910L, 5001000911L, 6001000912L, 7001000913L, 8001000914L);
+    Blort.blort(1001000908L, 2001000909L, 3001000910L, 4001000911L, 5001000912L, 6001000913L, 7001000914L, 8001000915L);
+    Blort.blort(1001000909L, 2001000910L, 3001000911L, 4001000912L, 5001000913L, 6001000914L, 7001000915L, 8001000916L);
+    Blort.blort(1001000910L, 2001000911L, 3001000912L, 4001000913L, 5001000914L, 6001000915L, 7001000916L, 8001000917L);
+    Blort.blort(1001000911L, 2001000912L, 3001000913L, 4001000914L, 5001000915L, 6001000916L, 7001000917L, 8001000918L);
+    Blort.blort(1001000912L, 2001000913L, 3001000914L, 4001000915L, 5001000916L, 6001000917L, 7001000918L, 8001000919L);
+    Blort.blort(1001000913L, 2001000914L, 3001000915L, 4001000916L, 5001000917L, 6001000918L, 7001000919L, 8001000920L);
+    Blort.blort(1001000914L, 2001000915L, 3001000916L, 4001000917L, 5001000918L, 6001000919L, 7001000920L, 8001000921L);
+    Blort.blort(1001000915L, 2001000916L, 3001000917L, 4001000918L, 5001000919L, 6001000920L, 7001000921L, 8001000922L);
+    Blort.blort(1001000916L, 2001000917L, 3001000918L, 4001000919L, 5001000920L, 6001000921L, 7001000922L, 8001000923L);
+    Blort.blort(1001000917L, 2001000918L, 3001000919L, 4001000920L, 5001000921L, 6001000922L, 7001000923L, 8001000924L);
+    Blort.blort(1001000918L, 2001000919L, 3001000920L, 4001000921L, 5001000922L, 6001000923L, 7001000924L, 8001000925L);
+    Blort.blort(1001000919L, 2001000920L, 3001000921L, 4001000922L, 5001000923L, 6001000924L, 7001000925L, 8001000926L);
+    Blort.blort(1001000920L, 2001000921L, 3001000922L, 4001000923L, 5001000924L, 6001000925L, 7001000926L, 8001000927L);
+    Blort.blort(1001000921L, 2001000922L, 3001000923L, 4001000924L, 5001000925L, 6001000926L, 7001000927L, 8001000928L);
+    Blort.blort(1001000922L, 2001000923L, 3001000924L, 4001000925L, 5001000926L, 6001000927L, 7001000928L, 8001000929L);
+    Blort.blort(1001000923L, 2001000924L, 3001000925L, 4001000926L, 5001000927L, 6001000928L, 7001000929L, 8001000930L);
+    Blort.blort(1001000924L, 2001000925L, 3001000926L, 4001000927L, 5001000928L, 6001000929L, 7001000930L, 8001000931L);
+    Blort.blort(1001000925L, 2001000926L, 3001000927L, 4001000928L, 5001000929L, 6001000930L, 7001000931L, 8001000932L);
+    Blort.blort(1001000926L, 2001000927L, 3001000928L, 4001000929L, 5001000930L, 6001000931L, 7001000932L, 8001000933L);
+    Blort.blort(1001000927L, 2001000928L, 3001000929L, 4001000930L, 5001000931L, 6001000932L, 7001000933L, 8001000934L);
+    Blort.blort(1001000928L, 2001000929L, 3001000930L, 4001000931L, 5001000932L, 6001000933L, 7001000934L, 8001000935L);
+    Blort.blort(1001000929L, 2001000930L, 3001000931L, 4001000932L, 5001000933L, 6001000934L, 7001000935L, 8001000936L);
+    Blort.blort(1001000930L, 2001000931L, 3001000932L, 4001000933L, 5001000934L, 6001000935L, 7001000936L, 8001000937L);
+    Blort.blort(1001000931L, 2001000932L, 3001000933L, 4001000934L, 5001000935L, 6001000936L, 7001000937L, 8001000938L);
+    Blort.blort(1001000932L, 2001000933L, 3001000934L, 4001000935L, 5001000936L, 6001000937L, 7001000938L, 8001000939L);
+    Blort.blort(1001000933L, 2001000934L, 3001000935L, 4001000936L, 5001000937L, 6001000938L, 7001000939L, 8001000940L);
+    Blort.blort(1001000934L, 2001000935L, 3001000936L, 4001000937L, 5001000938L, 6001000939L, 7001000940L, 8001000941L);
+    Blort.blort(1001000935L, 2001000936L, 3001000937L, 4001000938L, 5001000939L, 6001000940L, 7001000941L, 8001000942L);
+    Blort.blort(1001000936L, 2001000937L, 3001000938L, 4001000939L, 5001000940L, 6001000941L, 7001000942L, 8001000943L);
+    Blort.blort(1001000937L, 2001000938L, 3001000939L, 4001000940L, 5001000941L, 6001000942L, 7001000943L, 8001000944L);
+    Blort.blort(1001000938L, 2001000939L, 3001000940L, 4001000941L, 5001000942L, 6001000943L, 7001000944L, 8001000945L);
+    Blort.blort(1001000939L, 2001000940L, 3001000941L, 4001000942L, 5001000943L, 6001000944L, 7001000945L, 8001000946L);
+    Blort.blort(1001000940L, 2001000941L, 3001000942L, 4001000943L, 5001000944L, 6001000945L, 7001000946L, 8001000947L);
+    Blort.blort(1001000941L, 2001000942L, 3001000943L, 4001000944L, 5001000945L, 6001000946L, 7001000947L, 8001000948L);
+    Blort.blort(1001000942L, 2001000943L, 3001000944L, 4001000945L, 5001000946L, 6001000947L, 7001000948L, 8001000949L);
+    Blort.blort(1001000943L, 2001000944L, 3001000945L, 4001000946L, 5001000947L, 6001000948L, 7001000949L, 8001000950L);
+    Blort.blort(1001000944L, 2001000945L, 3001000946L, 4001000947L, 5001000948L, 6001000949L, 7001000950L, 8001000951L);
+    Blort.blort(1001000945L, 2001000946L, 3001000947L, 4001000948L, 5001000949L, 6001000950L, 7001000951L, 8001000952L);
+    Blort.blort(1001000946L, 2001000947L, 3001000948L, 4001000949L, 5001000950L, 6001000951L, 7001000952L, 8001000953L);
+    Blort.blort(1001000947L, 2001000948L, 3001000949L, 4001000950L, 5001000951L, 6001000952L, 7001000953L, 8001000954L);
+    Blort.blort(1001000948L, 2001000949L, 3001000950L, 4001000951L, 5001000952L, 6001000953L, 7001000954L, 8001000955L);
+    Blort.blort(1001000949L, 2001000950L, 3001000951L, 4001000952L, 5001000953L, 6001000954L, 7001000955L, 8001000956L);
+    Blort.blort(1001000950L, 2001000951L, 3001000952L, 4001000953L, 5001000954L, 6001000955L, 7001000956L, 8001000957L);
+    Blort.blort(1001000951L, 2001000952L, 3001000953L, 4001000954L, 5001000955L, 6001000956L, 7001000957L, 8001000958L);
+    Blort.blort(1001000952L, 2001000953L, 3001000954L, 4001000955L, 5001000956L, 6001000957L, 7001000958L, 8001000959L);
+    Blort.blort(1001000953L, 2001000954L, 3001000955L, 4001000956L, 5001000957L, 6001000958L, 7001000959L, 8001000960L);
+    Blort.blort(1001000954L, 2001000955L, 3001000956L, 4001000957L, 5001000958L, 6001000959L, 7001000960L, 8001000961L);
+    Blort.blort(1001000955L, 2001000956L, 3001000957L, 4001000958L, 5001000959L, 6001000960L, 7001000961L, 8001000962L);
+    Blort.blort(1001000956L, 2001000957L, 3001000958L, 4001000959L, 5001000960L, 6001000961L, 7001000962L, 8001000963L);
+    Blort.blort(1001000957L, 2001000958L, 3001000959L, 4001000960L, 5001000961L, 6001000962L, 7001000963L, 8001000964L);
+    Blort.blort(1001000958L, 2001000959L, 3001000960L, 4001000961L, 5001000962L, 6001000963L, 7001000964L, 8001000965L);
+    Blort.blort(1001000959L, 2001000960L, 3001000961L, 4001000962L, 5001000963L, 6001000964L, 7001000965L, 8001000966L);
+    Blort.blort(1001000960L, 2001000961L, 3001000962L, 4001000963L, 5001000964L, 6001000965L, 7001000966L, 8001000967L);
+    Blort.blort(1001000961L, 2001000962L, 3001000963L, 4001000964L, 5001000965L, 6001000966L, 7001000967L, 8001000968L);
+    Blort.blort(1001000962L, 2001000963L, 3001000964L, 4001000965L, 5001000966L, 6001000967L, 7001000968L, 8001000969L);
+    Blort.blort(1001000963L, 2001000964L, 3001000965L, 4001000966L, 5001000967L, 6001000968L, 7001000969L, 8001000970L);
+    Blort.blort(1001000964L, 2001000965L, 3001000966L, 4001000967L, 5001000968L, 6001000969L, 7001000970L, 8001000971L);
+    Blort.blort(1001000965L, 2001000966L, 3001000967L, 4001000968L, 5001000969L, 6001000970L, 7001000971L, 8001000972L);
+    Blort.blort(1001000966L, 2001000967L, 3001000968L, 4001000969L, 5001000970L, 6001000971L, 7001000972L, 8001000973L);
+    Blort.blort(1001000967L, 2001000968L, 3001000969L, 4001000970L, 5001000971L, 6001000972L, 7001000973L, 8001000974L);
+    Blort.blort(1001000968L, 2001000969L, 3001000970L, 4001000971L, 5001000972L, 6001000973L, 7001000974L, 8001000975L);
+    Blort.blort(1001000969L, 2001000970L, 3001000971L, 4001000972L, 5001000973L, 6001000974L, 7001000975L, 8001000976L);
+    Blort.blort(1001000970L, 2001000971L, 3001000972L, 4001000973L, 5001000974L, 6001000975L, 7001000976L, 8001000977L);
+    Blort.blort(1001000971L, 2001000972L, 3001000973L, 4001000974L, 5001000975L, 6001000976L, 7001000977L, 8001000978L);
+    Blort.blort(1001000972L, 2001000973L, 3001000974L, 4001000975L, 5001000976L, 6001000977L, 7001000978L, 8001000979L);
+    Blort.blort(1001000973L, 2001000974L, 3001000975L, 4001000976L, 5001000977L, 6001000978L, 7001000979L, 8001000980L);
+    Blort.blort(1001000974L, 2001000975L, 3001000976L, 4001000977L, 5001000978L, 6001000979L, 7001000980L, 8001000981L);
+    Blort.blort(1001000975L, 2001000976L, 3001000977L, 4001000978L, 5001000979L, 6001000980L, 7001000981L, 8001000982L);
+    Blort.blort(1001000976L, 2001000977L, 3001000978L, 4001000979L, 5001000980L, 6001000981L, 7001000982L, 8001000983L);
+    Blort.blort(1001000977L, 2001000978L, 3001000979L, 4001000980L, 5001000981L, 6001000982L, 7001000983L, 8001000984L);
+    Blort.blort(1001000978L, 2001000979L, 3001000980L, 4001000981L, 5001000982L, 6001000983L, 7001000984L, 8001000985L);
+    Blort.blort(1001000979L, 2001000980L, 3001000981L, 4001000982L, 5001000983L, 6001000984L, 7001000985L, 8001000986L);
+    Blort.blort(1001000980L, 2001000981L, 3001000982L, 4001000983L, 5001000984L, 6001000985L, 7001000986L, 8001000987L);
+    Blort.blort(1001000981L, 2001000982L, 3001000983L, 4001000984L, 5001000985L, 6001000986L, 7001000987L, 8001000988L);
+    Blort.blort(1001000982L, 2001000983L, 3001000984L, 4001000985L, 5001000986L, 6001000987L, 7001000988L, 8001000989L);
+    Blort.blort(1001000983L, 2001000984L, 3001000985L, 4001000986L, 5001000987L, 6001000988L, 7001000989L, 8001000990L);
+    Blort.blort(1001000984L, 2001000985L, 3001000986L, 4001000987L, 5001000988L, 6001000989L, 7001000990L, 8001000991L);
+    Blort.blort(1001000985L, 2001000986L, 3001000987L, 4001000988L, 5001000989L, 6001000990L, 7001000991L, 8001000992L);
+    Blort.blort(1001000986L, 2001000987L, 3001000988L, 4001000989L, 5001000990L, 6001000991L, 7001000992L, 8001000993L);
+    Blort.blort(1001000987L, 2001000988L, 3001000989L, 4001000990L, 5001000991L, 6001000992L, 7001000993L, 8001000994L);
+    Blort.blort(1001000988L, 2001000989L, 3001000990L, 4001000991L, 5001000992L, 6001000993L, 7001000994L, 8001000995L);
+    Blort.blort(1001000989L, 2001000990L, 3001000991L, 4001000992L, 5001000993L, 6001000994L, 7001000995L, 8001000996L);
+    Blort.blort(1001000990L, 2001000991L, 3001000992L, 4001000993L, 5001000994L, 6001000995L, 7001000996L, 8001000997L);
+    Blort.blort(1001000991L, 2001000992L, 3001000993L, 4001000994L, 5001000995L, 6001000996L, 7001000997L, 8001000998L);
+    Blort.blort(1001000992L, 2001000993L, 3001000994L, 4001000995L, 5001000996L, 6001000997L, 7001000998L, 8001000999L);
+    Blort.blort(1001000993L, 2001000994L, 3001000995L, 4001000996L, 5001000997L, 6001000998L, 7001000999L, 8001001000L);
+    Blort.blort(1001000994L, 2001000995L, 3001000996L, 4001000997L, 5001000998L, 6001000999L, 7001001000L, 8001001001L);
+    Blort.blort(1001000995L, 2001000996L, 3001000997L, 4001000998L, 5001000999L, 6001001000L, 7001001001L, 8001001002L);
+    Blort.blort(1001000996L, 2001000997L, 3001000998L, 4001000999L, 5001001000L, 6001001001L, 7001001002L, 8001001003L);
+    Blort.blort(1001000997L, 2001000998L, 3001000999L, 4001001000L, 5001001001L, 6001001002L, 7001001003L, 8001001004L);
+    Blort.blort(1001000998L, 2001000999L, 3001001000L, 4001001001L, 5001001002L, 6001001003L, 7001001004L, 8001001005L);
+    Blort.blort(1001000999L, 2001001000L, 3001001001L, 4001001002L, 5001001003L, 6001001004L, 7001001005L, 8001001006L);
+    Blort.blort(1001001000L, 2001001001L, 3001001002L, 4001001003L, 5001001004L, 6001001005L, 7001001006L, 8001001007L);
+    Blort.blort(1001001001L, 2001001002L, 3001001003L, 4001001004L, 5001001005L, 6001001006L, 7001001007L, 8001001008L);
+    Blort.blort(1001001002L, 2001001003L, 3001001004L, 4001001005L, 5001001006L, 6001001007L, 7001001008L, 8001001009L);
+    Blort.blort(1001001003L, 2001001004L, 3001001005L, 4001001006L, 5001001007L, 6001001008L, 7001001009L, 8001001010L);
+    Blort.blort(1001001004L, 2001001005L, 3001001006L, 4001001007L, 5001001008L, 6001001009L, 7001001010L, 8001001011L);
+    Blort.blort(1001001005L, 2001001006L, 3001001007L, 4001001008L, 5001001009L, 6001001010L, 7001001011L, 8001001012L);
+    Blort.blort(1001001006L, 2001001007L, 3001001008L, 4001001009L, 5001001010L, 6001001011L, 7001001012L, 8001001013L);
+    Blort.blort(1001001007L, 2001001008L, 3001001009L, 4001001010L, 5001001011L, 6001001012L, 7001001013L, 8001001014L);
+    Blort.blort(1001001008L, 2001001009L, 3001001010L, 4001001011L, 5001001012L, 6001001013L, 7001001014L, 8001001015L);
+    Blort.blort(1001001009L, 2001001010L, 3001001011L, 4001001012L, 5001001013L, 6001001014L, 7001001015L, 8001001016L);
+    Blort.blort(1001001010L, 2001001011L, 3001001012L, 4001001013L, 5001001014L, 6001001015L, 7001001016L, 8001001017L);
+    Blort.blort(1001001011L, 2001001012L, 3001001013L, 4001001014L, 5001001015L, 6001001016L, 7001001017L, 8001001018L);
+    Blort.blort(1001001012L, 2001001013L, 3001001014L, 4001001015L, 5001001016L, 6001001017L, 7001001018L, 8001001019L);
+    Blort.blort(1001001013L, 2001001014L, 3001001015L, 4001001016L, 5001001017L, 6001001018L, 7001001019L, 8001001020L);
+    Blort.blort(1001001014L, 2001001015L, 3001001016L, 4001001017L, 5001001018L, 6001001019L, 7001001020L, 8001001021L);
+    Blort.blort(1001001015L, 2001001016L, 3001001017L, 4001001018L, 5001001019L, 6001001020L, 7001001021L, 8001001022L);
+    Blort.blort(1001001016L, 2001001017L, 3001001018L, 4001001019L, 5001001020L, 6001001021L, 7001001022L, 8001001023L);
+    Blort.blort(1001001017L, 2001001018L, 3001001019L, 4001001020L, 5001001021L, 6001001022L, 7001001023L, 8001001024L);
+    Blort.blort(1001001018L, 2001001019L, 3001001020L, 4001001021L, 5001001022L, 6001001023L, 7001001024L, 8001001025L);
+    Blort.blort(1001001019L, 2001001020L, 3001001021L, 4001001022L, 5001001023L, 6001001024L, 7001001025L, 8001001026L);
+    Blort.blort(1001001020L, 2001001021L, 3001001022L, 4001001023L, 5001001024L, 6001001025L, 7001001026L, 8001001027L);
+    Blort.blort(1001001021L, 2001001022L, 3001001023L, 4001001024L, 5001001025L, 6001001026L, 7001001027L, 8001001028L);
+    Blort.blort(1001001022L, 2001001023L, 3001001024L, 4001001025L, 5001001026L, 6001001027L, 7001001028L, 8001001029L);
+    Blort.blort(1001001023L, 2001001024L, 3001001025L, 4001001026L, 5001001027L, 6001001028L, 7001001029L, 8001001030L);
+    Blort.blort(1001001024L, 2001001025L, 3001001026L, 4001001027L, 5001001028L, 6001001029L, 7001001030L, 8001001031L);
+    Blort.blort(1001001025L, 2001001026L, 3001001027L, 4001001028L, 5001001029L, 6001001030L, 7001001031L, 8001001032L);
+    Blort.blort(1001001026L, 2001001027L, 3001001028L, 4001001029L, 5001001030L, 6001001031L, 7001001032L, 8001001033L);
+    Blort.blort(1001001027L, 2001001028L, 3001001029L, 4001001030L, 5001001031L, 6001001032L, 7001001033L, 8001001034L);
+    Blort.blort(1001001028L, 2001001029L, 3001001030L, 4001001031L, 5001001032L, 6001001033L, 7001001034L, 8001001035L);
+    Blort.blort(1001001029L, 2001001030L, 3001001031L, 4001001032L, 5001001033L, 6001001034L, 7001001035L, 8001001036L);
+    Blort.blort(1001001030L, 2001001031L, 3001001032L, 4001001033L, 5001001034L, 6001001035L, 7001001036L, 8001001037L);
+    Blort.blort(1001001031L, 2001001032L, 3001001033L, 4001001034L, 5001001035L, 6001001036L, 7001001037L, 8001001038L);
+    Blort.blort(1001001032L, 2001001033L, 3001001034L, 4001001035L, 5001001036L, 6001001037L, 7001001038L, 8001001039L);
+    Blort.blort(1001001033L, 2001001034L, 3001001035L, 4001001036L, 5001001037L, 6001001038L, 7001001039L, 8001001040L);
+    Blort.blort(1001001034L, 2001001035L, 3001001036L, 4001001037L, 5001001038L, 6001001039L, 7001001040L, 8001001041L);
+    Blort.blort(1001001035L, 2001001036L, 3001001037L, 4001001038L, 5001001039L, 6001001040L, 7001001041L, 8001001042L);
+    Blort.blort(1001001036L, 2001001037L, 3001001038L, 4001001039L, 5001001040L, 6001001041L, 7001001042L, 8001001043L);
+    Blort.blort(1001001037L, 2001001038L, 3001001039L, 4001001040L, 5001001041L, 6001001042L, 7001001043L, 8001001044L);
+    Blort.blort(1001001038L, 2001001039L, 3001001040L, 4001001041L, 5001001042L, 6001001043L, 7001001044L, 8001001045L);
+    Blort.blort(1001001039L, 2001001040L, 3001001041L, 4001001042L, 5001001043L, 6001001044L, 7001001045L, 8001001046L);
+    Blort.blort(1001001040L, 2001001041L, 3001001042L, 4001001043L, 5001001044L, 6001001045L, 7001001046L, 8001001047L);
+    Blort.blort(1001001041L, 2001001042L, 3001001043L, 4001001044L, 5001001045L, 6001001046L, 7001001047L, 8001001048L);
+    Blort.blort(1001001042L, 2001001043L, 3001001044L, 4001001045L, 5001001046L, 6001001047L, 7001001048L, 8001001049L);
+    Blort.blort(1001001043L, 2001001044L, 3001001045L, 4001001046L, 5001001047L, 6001001048L, 7001001049L, 8001001050L);
+    Blort.blort(1001001044L, 2001001045L, 3001001046L, 4001001047L, 5001001048L, 6001001049L, 7001001050L, 8001001051L);
+    Blort.blort(1001001045L, 2001001046L, 3001001047L, 4001001048L, 5001001049L, 6001001050L, 7001001051L, 8001001052L);
+    Blort.blort(1001001046L, 2001001047L, 3001001048L, 4001001049L, 5001001050L, 6001001051L, 7001001052L, 8001001053L);
+    Blort.blort(1001001047L, 2001001048L, 3001001049L, 4001001050L, 5001001051L, 6001001052L, 7001001053L, 8001001054L);
+    Blort.blort(1001001048L, 2001001049L, 3001001050L, 4001001051L, 5001001052L, 6001001053L, 7001001054L, 8001001055L);
+    Blort.blort(1001001049L, 2001001050L, 3001001051L, 4001001052L, 5001001053L, 6001001054L, 7001001055L, 8001001056L);
+    Blort.blort(1001001050L, 2001001051L, 3001001052L, 4001001053L, 5001001054L, 6001001055L, 7001001056L, 8001001057L);
+    Blort.blort(1001001051L, 2001001052L, 3001001053L, 4001001054L, 5001001055L, 6001001056L, 7001001057L, 8001001058L);
+    Blort.blort(1001001052L, 2001001053L, 3001001054L, 4001001055L, 5001001056L, 6001001057L, 7001001058L, 8001001059L);
+    Blort.blort(1001001053L, 2001001054L, 3001001055L, 4001001056L, 5001001057L, 6001001058L, 7001001059L, 8001001060L);
+    Blort.blort(1001001054L, 2001001055L, 3001001056L, 4001001057L, 5001001058L, 6001001059L, 7001001060L, 8001001061L);
+    Blort.blort(1001001055L, 2001001056L, 3001001057L, 4001001058L, 5001001059L, 6001001060L, 7001001061L, 8001001062L);
+    Blort.blort(1001001056L, 2001001057L, 3001001058L, 4001001059L, 5001001060L, 6001001061L, 7001001062L, 8001001063L);
+    Blort.blort(1001001057L, 2001001058L, 3001001059L, 4001001060L, 5001001061L, 6001001062L, 7001001063L, 8001001064L);
+    Blort.blort(1001001058L, 2001001059L, 3001001060L, 4001001061L, 5001001062L, 6001001063L, 7001001064L, 8001001065L);
+    Blort.blort(1001001059L, 2001001060L, 3001001061L, 4001001062L, 5001001063L, 6001001064L, 7001001065L, 8001001066L);
+    Blort.blort(1001001060L, 2001001061L, 3001001062L, 4001001063L, 5001001064L, 6001001065L, 7001001066L, 8001001067L);
+    Blort.blort(1001001061L, 2001001062L, 3001001063L, 4001001064L, 5001001065L, 6001001066L, 7001001067L, 8001001068L);
+    Blort.blort(1001001062L, 2001001063L, 3001001064L, 4001001065L, 5001001066L, 6001001067L, 7001001068L, 8001001069L);
+    Blort.blort(1001001063L, 2001001064L, 3001001065L, 4001001066L, 5001001067L, 6001001068L, 7001001069L, 8001001070L);
+    Blort.blort(1001001064L, 2001001065L, 3001001066L, 4001001067L, 5001001068L, 6001001069L, 7001001070L, 8001001071L);
+    Blort.blort(1001001065L, 2001001066L, 3001001067L, 4001001068L, 5001001069L, 6001001070L, 7001001071L, 8001001072L);
+    Blort.blort(1001001066L, 2001001067L, 3001001068L, 4001001069L, 5001001070L, 6001001071L, 7001001072L, 8001001073L);
+    Blort.blort(1001001067L, 2001001068L, 3001001069L, 4001001070L, 5001001071L, 6001001072L, 7001001073L, 8001001074L);
+    Blort.blort(1001001068L, 2001001069L, 3001001070L, 4001001071L, 5001001072L, 6001001073L, 7001001074L, 8001001075L);
+    Blort.blort(1001001069L, 2001001070L, 3001001071L, 4001001072L, 5001001073L, 6001001074L, 7001001075L, 8001001076L);
+    Blort.blort(1001001070L, 2001001071L, 3001001072L, 4001001073L, 5001001074L, 6001001075L, 7001001076L, 8001001077L);
+    Blort.blort(1001001071L, 2001001072L, 3001001073L, 4001001074L, 5001001075L, 6001001076L, 7001001077L, 8001001078L);
+    Blort.blort(1001001072L, 2001001073L, 3001001074L, 4001001075L, 5001001076L, 6001001077L, 7001001078L, 8001001079L);
+    Blort.blort(1001001073L, 2001001074L, 3001001075L, 4001001076L, 5001001077L, 6001001078L, 7001001079L, 8001001080L);
+    Blort.blort(1001001074L, 2001001075L, 3001001076L, 4001001077L, 5001001078L, 6001001079L, 7001001080L, 8001001081L);
+    Blort.blort(1001001075L, 2001001076L, 3001001077L, 4001001078L, 5001001079L, 6001001080L, 7001001081L, 8001001082L);
+    Blort.blort(1001001076L, 2001001077L, 3001001078L, 4001001079L, 5001001080L, 6001001081L, 7001001082L, 8001001083L);
+    Blort.blort(1001001077L, 2001001078L, 3001001079L, 4001001080L, 5001001081L, 6001001082L, 7001001083L, 8001001084L);
+    Blort.blort(1001001078L, 2001001079L, 3001001080L, 4001001081L, 5001001082L, 6001001083L, 7001001084L, 8001001085L);
+    Blort.blort(1001001079L, 2001001080L, 3001001081L, 4001001082L, 5001001083L, 6001001084L, 7001001085L, 8001001086L);
+    Blort.blort(1001001080L, 2001001081L, 3001001082L, 4001001083L, 5001001084L, 6001001085L, 7001001086L, 8001001087L);
+    Blort.blort(1001001081L, 2001001082L, 3001001083L, 4001001084L, 5001001085L, 6001001086L, 7001001087L, 8001001088L);
+    Blort.blort(1001001082L, 2001001083L, 3001001084L, 4001001085L, 5001001086L, 6001001087L, 7001001088L, 8001001089L);
+    Blort.blort(1001001083L, 2001001084L, 3001001085L, 4001001086L, 5001001087L, 6001001088L, 7001001089L, 8001001090L);
+    Blort.blort(1001001084L, 2001001085L, 3001001086L, 4001001087L, 5001001088L, 6001001089L, 7001001090L, 8001001091L);
+    Blort.blort(1001001085L, 2001001086L, 3001001087L, 4001001088L, 5001001089L, 6001001090L, 7001001091L, 8001001092L);
+    Blort.blort(1001001086L, 2001001087L, 3001001088L, 4001001089L, 5001001090L, 6001001091L, 7001001092L, 8001001093L);
+    Blort.blort(1001001087L, 2001001088L, 3001001089L, 4001001090L, 5001001091L, 6001001092L, 7001001093L, 8001001094L);
+    Blort.blort(1001001088L, 2001001089L, 3001001090L, 4001001091L, 5001001092L, 6001001093L, 7001001094L, 8001001095L);
+    Blort.blort(1001001089L, 2001001090L, 3001001091L, 4001001092L, 5001001093L, 6001001094L, 7001001095L, 8001001096L);
+    Blort.blort(1001001090L, 2001001091L, 3001001092L, 4001001093L, 5001001094L, 6001001095L, 7001001096L, 8001001097L);
+    Blort.blort(1001001091L, 2001001092L, 3001001093L, 4001001094L, 5001001095L, 6001001096L, 7001001097L, 8001001098L);
+    Blort.blort(1001001092L, 2001001093L, 3001001094L, 4001001095L, 5001001096L, 6001001097L, 7001001098L, 8001001099L);
+    Blort.blort(1001001093L, 2001001094L, 3001001095L, 4001001096L, 5001001097L, 6001001098L, 7001001099L, 8001001100L);
+    Blort.blort(1001001094L, 2001001095L, 3001001096L, 4001001097L, 5001001098L, 6001001099L, 7001001100L, 8001001101L);
+    Blort.blort(1001001095L, 2001001096L, 3001001097L, 4001001098L, 5001001099L, 6001001100L, 7001001101L, 8001001102L);
+    Blort.blort(1001001096L, 2001001097L, 3001001098L, 4001001099L, 5001001100L, 6001001101L, 7001001102L, 8001001103L);
+    Blort.blort(1001001097L, 2001001098L, 3001001099L, 4001001100L, 5001001101L, 6001001102L, 7001001103L, 8001001104L);
+    Blort.blort(1001001098L, 2001001099L, 3001001100L, 4001001101L, 5001001102L, 6001001103L, 7001001104L, 8001001105L);
+    Blort.blort(1001001099L, 2001001100L, 3001001101L, 4001001102L, 5001001103L, 6001001104L, 7001001105L, 8001001106L);
+    Blort.blort(1001001100L, 2001001101L, 3001001102L, 4001001103L, 5001001104L, 6001001105L, 7001001106L, 8001001107L);
+    Blort.blort(1001001101L, 2001001102L, 3001001103L, 4001001104L, 5001001105L, 6001001106L, 7001001107L, 8001001108L);
+    Blort.blort(1001001102L, 2001001103L, 3001001104L, 4001001105L, 5001001106L, 6001001107L, 7001001108L, 8001001109L);
+    Blort.blort(1001001103L, 2001001104L, 3001001105L, 4001001106L, 5001001107L, 6001001108L, 7001001109L, 8001001110L);
+    Blort.blort(1001001104L, 2001001105L, 3001001106L, 4001001107L, 5001001108L, 6001001109L, 7001001110L, 8001001111L);
+    Blort.blort(1001001105L, 2001001106L, 3001001107L, 4001001108L, 5001001109L, 6001001110L, 7001001111L, 8001001112L);
+    Blort.blort(1001001106L, 2001001107L, 3001001108L, 4001001109L, 5001001110L, 6001001111L, 7001001112L, 8001001113L);
+    Blort.blort(1001001107L, 2001001108L, 3001001109L, 4001001110L, 5001001111L, 6001001112L, 7001001113L, 8001001114L);
+    Blort.blort(1001001108L, 2001001109L, 3001001110L, 4001001111L, 5001001112L, 6001001113L, 7001001114L, 8001001115L);
+    Blort.blort(1001001109L, 2001001110L, 3001001111L, 4001001112L, 5001001113L, 6001001114L, 7001001115L, 8001001116L);
+    Blort.blort(1001001110L, 2001001111L, 3001001112L, 4001001113L, 5001001114L, 6001001115L, 7001001116L, 8001001117L);
+    Blort.blort(1001001111L, 2001001112L, 3001001113L, 4001001114L, 5001001115L, 6001001116L, 7001001117L, 8001001118L);
+    Blort.blort(1001001112L, 2001001113L, 3001001114L, 4001001115L, 5001001116L, 6001001117L, 7001001118L, 8001001119L);
+    Blort.blort(1001001113L, 2001001114L, 3001001115L, 4001001116L, 5001001117L, 6001001118L, 7001001119L, 8001001120L);
+    Blort.blort(1001001114L, 2001001115L, 3001001116L, 4001001117L, 5001001118L, 6001001119L, 7001001120L, 8001001121L);
+    Blort.blort(1001001115L, 2001001116L, 3001001117L, 4001001118L, 5001001119L, 6001001120L, 7001001121L, 8001001122L);
+    Blort.blort(1001001116L, 2001001117L, 3001001118L, 4001001119L, 5001001120L, 6001001121L, 7001001122L, 8001001123L);
+    Blort.blort(1001001117L, 2001001118L, 3001001119L, 4001001120L, 5001001121L, 6001001122L, 7001001123L, 8001001124L);
+    Blort.blort(1001001118L, 2001001119L, 3001001120L, 4001001121L, 5001001122L, 6001001123L, 7001001124L, 8001001125L);
+    Blort.blort(1001001119L, 2001001120L, 3001001121L, 4001001122L, 5001001123L, 6001001124L, 7001001125L, 8001001126L);
+    Blort.blort(1001001120L, 2001001121L, 3001001122L, 4001001123L, 5001001124L, 6001001125L, 7001001126L, 8001001127L);
+    Blort.blort(1001001121L, 2001001122L, 3001001123L, 4001001124L, 5001001125L, 6001001126L, 7001001127L, 8001001128L);
+    Blort.blort(1001001122L, 2001001123L, 3001001124L, 4001001125L, 5001001126L, 6001001127L, 7001001128L, 8001001129L);
+    Blort.blort(1001001123L, 2001001124L, 3001001125L, 4001001126L, 5001001127L, 6001001128L, 7001001129L, 8001001130L);
+    Blort.blort(1001001124L, 2001001125L, 3001001126L, 4001001127L, 5001001128L, 6001001129L, 7001001130L, 8001001131L);
+    Blort.blort(1001001125L, 2001001126L, 3001001127L, 4001001128L, 5001001129L, 6001001130L, 7001001131L, 8001001132L);
+    Blort.blort(1001001126L, 2001001127L, 3001001128L, 4001001129L, 5001001130L, 6001001131L, 7001001132L, 8001001133L);
+    Blort.blort(1001001127L, 2001001128L, 3001001129L, 4001001130L, 5001001131L, 6001001132L, 7001001133L, 8001001134L);
+    Blort.blort(1001001128L, 2001001129L, 3001001130L, 4001001131L, 5001001132L, 6001001133L, 7001001134L, 8001001135L);
+    Blort.blort(1001001129L, 2001001130L, 3001001131L, 4001001132L, 5001001133L, 6001001134L, 7001001135L, 8001001136L);
+    Blort.blort(1001001130L, 2001001131L, 3001001132L, 4001001133L, 5001001134L, 6001001135L, 7001001136L, 8001001137L);
+    Blort.blort(1001001131L, 2001001132L, 3001001133L, 4001001134L, 5001001135L, 6001001136L, 7001001137L, 8001001138L);
+    Blort.blort(1001001132L, 2001001133L, 3001001134L, 4001001135L, 5001001136L, 6001001137L, 7001001138L, 8001001139L);
+    Blort.blort(1001001133L, 2001001134L, 3001001135L, 4001001136L, 5001001137L, 6001001138L, 7001001139L, 8001001140L);
+    Blort.blort(1001001134L, 2001001135L, 3001001136L, 4001001137L, 5001001138L, 6001001139L, 7001001140L, 8001001141L);
+    Blort.blort(1001001135L, 2001001136L, 3001001137L, 4001001138L, 5001001139L, 6001001140L, 7001001141L, 8001001142L);
+    Blort.blort(1001001136L, 2001001137L, 3001001138L, 4001001139L, 5001001140L, 6001001141L, 7001001142L, 8001001143L);
+    Blort.blort(1001001137L, 2001001138L, 3001001139L, 4001001140L, 5001001141L, 6001001142L, 7001001143L, 8001001144L);
+    Blort.blort(1001001138L, 2001001139L, 3001001140L, 4001001141L, 5001001142L, 6001001143L, 7001001144L, 8001001145L);
+    Blort.blort(1001001139L, 2001001140L, 3001001141L, 4001001142L, 5001001143L, 6001001144L, 7001001145L, 8001001146L);
+    Blort.blort(1001001140L, 2001001141L, 3001001142L, 4001001143L, 5001001144L, 6001001145L, 7001001146L, 8001001147L);
+    Blort.blort(1001001141L, 2001001142L, 3001001143L, 4001001144L, 5001001145L, 6001001146L, 7001001147L, 8001001148L);
+    Blort.blort(1001001142L, 2001001143L, 3001001144L, 4001001145L, 5001001146L, 6001001147L, 7001001148L, 8001001149L);
+    Blort.blort(1001001143L, 2001001144L, 3001001145L, 4001001146L, 5001001147L, 6001001148L, 7001001149L, 8001001150L);
+    Blort.blort(1001001144L, 2001001145L, 3001001146L, 4001001147L, 5001001148L, 6001001149L, 7001001150L, 8001001151L);
+    Blort.blort(1001001145L, 2001001146L, 3001001147L, 4001001148L, 5001001149L, 6001001150L, 7001001151L, 8001001152L);
+    Blort.blort(1001001146L, 2001001147L, 3001001148L, 4001001149L, 5001001150L, 6001001151L, 7001001152L, 8001001153L);
+    Blort.blort(1001001147L, 2001001148L, 3001001149L, 4001001150L, 5001001151L, 6001001152L, 7001001153L, 8001001154L);
+    Blort.blort(1001001148L, 2001001149L, 3001001150L, 4001001151L, 5001001152L, 6001001153L, 7001001154L, 8001001155L);
+    Blort.blort(1001001149L, 2001001150L, 3001001151L, 4001001152L, 5001001153L, 6001001154L, 7001001155L, 8001001156L);
+    Blort.blort(1001001150L, 2001001151L, 3001001152L, 4001001153L, 5001001154L, 6001001155L, 7001001156L, 8001001157L);
+    Blort.blort(1001001151L, 2001001152L, 3001001153L, 4001001154L, 5001001155L, 6001001156L, 7001001157L, 8001001158L);
+    Blort.blort(1001001152L, 2001001153L, 3001001154L, 4001001155L, 5001001156L, 6001001157L, 7001001158L, 8001001159L);
+    Blort.blort(1001001153L, 2001001154L, 3001001155L, 4001001156L, 5001001157L, 6001001158L, 7001001159L, 8001001160L);
+    Blort.blort(1001001154L, 2001001155L, 3001001156L, 4001001157L, 5001001158L, 6001001159L, 7001001160L, 8001001161L);
+    Blort.blort(1001001155L, 2001001156L, 3001001157L, 4001001158L, 5001001159L, 6001001160L, 7001001161L, 8001001162L);
+    Blort.blort(1001001156L, 2001001157L, 3001001158L, 4001001159L, 5001001160L, 6001001161L, 7001001162L, 8001001163L);
+    Blort.blort(1001001157L, 2001001158L, 3001001159L, 4001001160L, 5001001161L, 6001001162L, 7001001163L, 8001001164L);
+    Blort.blort(1001001158L, 2001001159L, 3001001160L, 4001001161L, 5001001162L, 6001001163L, 7001001164L, 8001001165L);
+    Blort.blort(1001001159L, 2001001160L, 3001001161L, 4001001162L, 5001001163L, 6001001164L, 7001001165L, 8001001166L);
+    Blort.blort(1001001160L, 2001001161L, 3001001162L, 4001001163L, 5001001164L, 6001001165L, 7001001166L, 8001001167L);
+    Blort.blort(1001001161L, 2001001162L, 3001001163L, 4001001164L, 5001001165L, 6001001166L, 7001001167L, 8001001168L);
+    Blort.blort(1001001162L, 2001001163L, 3001001164L, 4001001165L, 5001001166L, 6001001167L, 7001001168L, 8001001169L);
+    Blort.blort(1001001163L, 2001001164L, 3001001165L, 4001001166L, 5001001167L, 6001001168L, 7001001169L, 8001001170L);
+    Blort.blort(1001001164L, 2001001165L, 3001001166L, 4001001167L, 5001001168L, 6001001169L, 7001001170L, 8001001171L);
+    Blort.blort(1001001165L, 2001001166L, 3001001167L, 4001001168L, 5001001169L, 6001001170L, 7001001171L, 8001001172L);
+    Blort.blort(1001001166L, 2001001167L, 3001001168L, 4001001169L, 5001001170L, 6001001171L, 7001001172L, 8001001173L);
+    Blort.blort(1001001167L, 2001001168L, 3001001169L, 4001001170L, 5001001171L, 6001001172L, 7001001173L, 8001001174L);
+    Blort.blort(1001001168L, 2001001169L, 3001001170L, 4001001171L, 5001001172L, 6001001173L, 7001001174L, 8001001175L);
+    Blort.blort(1001001169L, 2001001170L, 3001001171L, 4001001172L, 5001001173L, 6001001174L, 7001001175L, 8001001176L);
+    Blort.blort(1001001170L, 2001001171L, 3001001172L, 4001001173L, 5001001174L, 6001001175L, 7001001176L, 8001001177L);
+    Blort.blort(1001001171L, 2001001172L, 3001001173L, 4001001174L, 5001001175L, 6001001176L, 7001001177L, 8001001178L);
+    Blort.blort(1001001172L, 2001001173L, 3001001174L, 4001001175L, 5001001176L, 6001001177L, 7001001178L, 8001001179L);
+    Blort.blort(1001001173L, 2001001174L, 3001001175L, 4001001176L, 5001001177L, 6001001178L, 7001001179L, 8001001180L);
+    Blort.blort(1001001174L, 2001001175L, 3001001176L, 4001001177L, 5001001178L, 6001001179L, 7001001180L, 8001001181L);
+    Blort.blort(1001001175L, 2001001176L, 3001001177L, 4001001178L, 5001001179L, 6001001180L, 7001001181L, 8001001182L);
+    Blort.blort(1001001176L, 2001001177L, 3001001178L, 4001001179L, 5001001180L, 6001001181L, 7001001182L, 8001001183L);
+    Blort.blort(1001001177L, 2001001178L, 3001001179L, 4001001180L, 5001001181L, 6001001182L, 7001001183L, 8001001184L);
+    Blort.blort(1001001178L, 2001001179L, 3001001180L, 4001001181L, 5001001182L, 6001001183L, 7001001184L, 8001001185L);
+    Blort.blort(1001001179L, 2001001180L, 3001001181L, 4001001182L, 5001001183L, 6001001184L, 7001001185L, 8001001186L);
+    Blort.blort(1001001180L, 2001001181L, 3001001182L, 4001001183L, 5001001184L, 6001001185L, 7001001186L, 8001001187L);
+    Blort.blort(1001001181L, 2001001182L, 3001001183L, 4001001184L, 5001001185L, 6001001186L, 7001001187L, 8001001188L);
+    Blort.blort(1001001182L, 2001001183L, 3001001184L, 4001001185L, 5001001186L, 6001001187L, 7001001188L, 8001001189L);
+    Blort.blort(1001001183L, 2001001184L, 3001001185L, 4001001186L, 5001001187L, 6001001188L, 7001001189L, 8001001190L);
+    Blort.blort(1001001184L, 2001001185L, 3001001186L, 4001001187L, 5001001188L, 6001001189L, 7001001190L, 8001001191L);
+    Blort.blort(1001001185L, 2001001186L, 3001001187L, 4001001188L, 5001001189L, 6001001190L, 7001001191L, 8001001192L);
+    Blort.blort(1001001186L, 2001001187L, 3001001188L, 4001001189L, 5001001190L, 6001001191L, 7001001192L, 8001001193L);
+    Blort.blort(1001001187L, 2001001188L, 3001001189L, 4001001190L, 5001001191L, 6001001192L, 7001001193L, 8001001194L);
+    Blort.blort(1001001188L, 2001001189L, 3001001190L, 4001001191L, 5001001192L, 6001001193L, 7001001194L, 8001001195L);
+    Blort.blort(1001001189L, 2001001190L, 3001001191L, 4001001192L, 5001001193L, 6001001194L, 7001001195L, 8001001196L);
+    Blort.blort(1001001190L, 2001001191L, 3001001192L, 4001001193L, 5001001194L, 6001001195L, 7001001196L, 8001001197L);
+    Blort.blort(1001001191L, 2001001192L, 3001001193L, 4001001194L, 5001001195L, 6001001196L, 7001001197L, 8001001198L);
+    Blort.blort(1001001192L, 2001001193L, 3001001194L, 4001001195L, 5001001196L, 6001001197L, 7001001198L, 8001001199L);
+    Blort.blort(1001001193L, 2001001194L, 3001001195L, 4001001196L, 5001001197L, 6001001198L, 7001001199L, 8001001200L);
+    Blort.blort(1001001194L, 2001001195L, 3001001196L, 4001001197L, 5001001198L, 6001001199L, 7001001200L, 8001001201L);
+    Blort.blort(1001001195L, 2001001196L, 3001001197L, 4001001198L, 5001001199L, 6001001200L, 7001001201L, 8001001202L);
+    Blort.blort(1001001196L, 2001001197L, 3001001198L, 4001001199L, 5001001200L, 6001001201L, 7001001202L, 8001001203L);
+    Blort.blort(1001001197L, 2001001198L, 3001001199L, 4001001200L, 5001001201L, 6001001202L, 7001001203L, 8001001204L);
+    Blort.blort(1001001198L, 2001001199L, 3001001200L, 4001001201L, 5001001202L, 6001001203L, 7001001204L, 8001001205L);
+    Blort.blort(1001001199L, 2001001200L, 3001001201L, 4001001202L, 5001001203L, 6001001204L, 7001001205L, 8001001206L);
+    Blort.blort(1001001200L, 2001001201L, 3001001202L, 4001001203L, 5001001204L, 6001001205L, 7001001206L, 8001001207L);
+    Blort.blort(1001001201L, 2001001202L, 3001001203L, 4001001204L, 5001001205L, 6001001206L, 7001001207L, 8001001208L);
+    Blort.blort(1001001202L, 2001001203L, 3001001204L, 4001001205L, 5001001206L, 6001001207L, 7001001208L, 8001001209L);
+    Blort.blort(1001001203L, 2001001204L, 3001001205L, 4001001206L, 5001001207L, 6001001208L, 7001001209L, 8001001210L);
+    Blort.blort(1001001204L, 2001001205L, 3001001206L, 4001001207L, 5001001208L, 6001001209L, 7001001210L, 8001001211L);
+    Blort.blort(1001001205L, 2001001206L, 3001001207L, 4001001208L, 5001001209L, 6001001210L, 7001001211L, 8001001212L);
+    Blort.blort(1001001206L, 2001001207L, 3001001208L, 4001001209L, 5001001210L, 6001001211L, 7001001212L, 8001001213L);
+    Blort.blort(1001001207L, 2001001208L, 3001001209L, 4001001210L, 5001001211L, 6001001212L, 7001001213L, 8001001214L);
+    Blort.blort(1001001208L, 2001001209L, 3001001210L, 4001001211L, 5001001212L, 6001001213L, 7001001214L, 8001001215L);
+    Blort.blort(1001001209L, 2001001210L, 3001001211L, 4001001212L, 5001001213L, 6001001214L, 7001001215L, 8001001216L);
+    Blort.blort(1001001210L, 2001001211L, 3001001212L, 4001001213L, 5001001214L, 6001001215L, 7001001216L, 8001001217L);
+    Blort.blort(1001001211L, 2001001212L, 3001001213L, 4001001214L, 5001001215L, 6001001216L, 7001001217L, 8001001218L);
+    Blort.blort(1001001212L, 2001001213L, 3001001214L, 4001001215L, 5001001216L, 6001001217L, 7001001218L, 8001001219L);
+    Blort.blort(1001001213L, 2001001214L, 3001001215L, 4001001216L, 5001001217L, 6001001218L, 7001001219L, 8001001220L);
+    Blort.blort(1001001214L, 2001001215L, 3001001216L, 4001001217L, 5001001218L, 6001001219L, 7001001220L, 8001001221L);
+    Blort.blort(1001001215L, 2001001216L, 3001001217L, 4001001218L, 5001001219L, 6001001220L, 7001001221L, 8001001222L);
+    Blort.blort(1001001216L, 2001001217L, 3001001218L, 4001001219L, 5001001220L, 6001001221L, 7001001222L, 8001001223L);
+    Blort.blort(1001001217L, 2001001218L, 3001001219L, 4001001220L, 5001001221L, 6001001222L, 7001001223L, 8001001224L);
+    Blort.blort(1001001218L, 2001001219L, 3001001220L, 4001001221L, 5001001222L, 6001001223L, 7001001224L, 8001001225L);
+    Blort.blort(1001001219L, 2001001220L, 3001001221L, 4001001222L, 5001001223L, 6001001224L, 7001001225L, 8001001226L);
+    Blort.blort(1001001220L, 2001001221L, 3001001222L, 4001001223L, 5001001224L, 6001001225L, 7001001226L, 8001001227L);
+    Blort.blort(1001001221L, 2001001222L, 3001001223L, 4001001224L, 5001001225L, 6001001226L, 7001001227L, 8001001228L);
+    Blort.blort(1001001222L, 2001001223L, 3001001224L, 4001001225L, 5001001226L, 6001001227L, 7001001228L, 8001001229L);
+    Blort.blort(1001001223L, 2001001224L, 3001001225L, 4001001226L, 5001001227L, 6001001228L, 7001001229L, 8001001230L);
+    Blort.blort(1001001224L, 2001001225L, 3001001226L, 4001001227L, 5001001228L, 6001001229L, 7001001230L, 8001001231L);
+    Blort.blort(1001001225L, 2001001226L, 3001001227L, 4001001228L, 5001001229L, 6001001230L, 7001001231L, 8001001232L);
+    Blort.blort(1001001226L, 2001001227L, 3001001228L, 4001001229L, 5001001230L, 6001001231L, 7001001232L, 8001001233L);
+    Blort.blort(1001001227L, 2001001228L, 3001001229L, 4001001230L, 5001001231L, 6001001232L, 7001001233L, 8001001234L);
+    Blort.blort(1001001228L, 2001001229L, 3001001230L, 4001001231L, 5001001232L, 6001001233L, 7001001234L, 8001001235L);
+    Blort.blort(1001001229L, 2001001230L, 3001001231L, 4001001232L, 5001001233L, 6001001234L, 7001001235L, 8001001236L);
+    Blort.blort(1001001230L, 2001001231L, 3001001232L, 4001001233L, 5001001234L, 6001001235L, 7001001236L, 8001001237L);
+    Blort.blort(1001001231L, 2001001232L, 3001001233L, 4001001234L, 5001001235L, 6001001236L, 7001001237L, 8001001238L);
+    Blort.blort(1001001232L, 2001001233L, 3001001234L, 4001001235L, 5001001236L, 6001001237L, 7001001238L, 8001001239L);
+    Blort.blort(1001001233L, 2001001234L, 3001001235L, 4001001236L, 5001001237L, 6001001238L, 7001001239L, 8001001240L);
+    Blort.blort(1001001234L, 2001001235L, 3001001236L, 4001001237L, 5001001238L, 6001001239L, 7001001240L, 8001001241L);
+    Blort.blort(1001001235L, 2001001236L, 3001001237L, 4001001238L, 5001001239L, 6001001240L, 7001001241L, 8001001242L);
+    Blort.blort(1001001236L, 2001001237L, 3001001238L, 4001001239L, 5001001240L, 6001001241L, 7001001242L, 8001001243L);
+    Blort.blort(1001001237L, 2001001238L, 3001001239L, 4001001240L, 5001001241L, 6001001242L, 7001001243L, 8001001244L);
+    Blort.blort(1001001238L, 2001001239L, 3001001240L, 4001001241L, 5001001242L, 6001001243L, 7001001244L, 8001001245L);
+    Blort.blort(1001001239L, 2001001240L, 3001001241L, 4001001242L, 5001001243L, 6001001244L, 7001001245L, 8001001246L);
+    Blort.blort(1001001240L, 2001001241L, 3001001242L, 4001001243L, 5001001244L, 6001001245L, 7001001246L, 8001001247L);
+    Blort.blort(1001001241L, 2001001242L, 3001001243L, 4001001244L, 5001001245L, 6001001246L, 7001001247L, 8001001248L);
+    Blort.blort(1001001242L, 2001001243L, 3001001244L, 4001001245L, 5001001246L, 6001001247L, 7001001248L, 8001001249L);
+    Blort.blort(1001001243L, 2001001244L, 3001001245L, 4001001246L, 5001001247L, 6001001248L, 7001001249L, 8001001250L);
+    Blort.blort(1001001244L, 2001001245L, 3001001246L, 4001001247L, 5001001248L, 6001001249L, 7001001250L, 8001001251L);
+    Blort.blort(1001001245L, 2001001246L, 3001001247L, 4001001248L, 5001001249L, 6001001250L, 7001001251L, 8001001252L);
+    Blort.blort(1001001246L, 2001001247L, 3001001248L, 4001001249L, 5001001250L, 6001001251L, 7001001252L, 8001001253L);
+    Blort.blort(1001001247L, 2001001248L, 3001001249L, 4001001250L, 5001001251L, 6001001252L, 7001001253L, 8001001254L);
+    Blort.blort(1001001248L, 2001001249L, 3001001250L, 4001001251L, 5001001252L, 6001001253L, 7001001254L, 8001001255L);
+    Blort.blort(1001001249L, 2001001250L, 3001001251L, 4001001252L, 5001001253L, 6001001254L, 7001001255L, 8001001256L);
+    Blort.blort(1001001250L, 2001001251L, 3001001252L, 4001001253L, 5001001254L, 6001001255L, 7001001256L, 8001001257L);
+    Blort.blort(1001001251L, 2001001252L, 3001001253L, 4001001254L, 5001001255L, 6001001256L, 7001001257L, 8001001258L);
+    Blort.blort(1001001252L, 2001001253L, 3001001254L, 4001001255L, 5001001256L, 6001001257L, 7001001258L, 8001001259L);
+    Blort.blort(1001001253L, 2001001254L, 3001001255L, 4001001256L, 5001001257L, 6001001258L, 7001001259L, 8001001260L);
+    Blort.blort(1001001254L, 2001001255L, 3001001256L, 4001001257L, 5001001258L, 6001001259L, 7001001260L, 8001001261L);
+    Blort.blort(1001001255L, 2001001256L, 3001001257L, 4001001258L, 5001001259L, 6001001260L, 7001001261L, 8001001262L);
+    Blort.blort(1001001256L, 2001001257L, 3001001258L, 4001001259L, 5001001260L, 6001001261L, 7001001262L, 8001001263L);
+    Blort.blort(1001001257L, 2001001258L, 3001001259L, 4001001260L, 5001001261L, 6001001262L, 7001001263L, 8001001264L);
+    Blort.blort(1001001258L, 2001001259L, 3001001260L, 4001001261L, 5001001262L, 6001001263L, 7001001264L, 8001001265L);
+    Blort.blort(1001001259L, 2001001260L, 3001001261L, 4001001262L, 5001001263L, 6001001264L, 7001001265L, 8001001266L);
+    Blort.blort(1001001260L, 2001001261L, 3001001262L, 4001001263L, 5001001264L, 6001001265L, 7001001266L, 8001001267L);
+    Blort.blort(1001001261L, 2001001262L, 3001001263L, 4001001264L, 5001001265L, 6001001266L, 7001001267L, 8001001268L);
+    Blort.blort(1001001262L, 2001001263L, 3001001264L, 4001001265L, 5001001266L, 6001001267L, 7001001268L, 8001001269L);
+    Blort.blort(1001001263L, 2001001264L, 3001001265L, 4001001266L, 5001001267L, 6001001268L, 7001001269L, 8001001270L);
+    Blort.blort(1001001264L, 2001001265L, 3001001266L, 4001001267L, 5001001268L, 6001001269L, 7001001270L, 8001001271L);
+    Blort.blort(1001001265L, 2001001266L, 3001001267L, 4001001268L, 5001001269L, 6001001270L, 7001001271L, 8001001272L);
+    Blort.blort(1001001266L, 2001001267L, 3001001268L, 4001001269L, 5001001270L, 6001001271L, 7001001272L, 8001001273L);
+    Blort.blort(1001001267L, 2001001268L, 3001001269L, 4001001270L, 5001001271L, 6001001272L, 7001001273L, 8001001274L);
+    Blort.blort(1001001268L, 2001001269L, 3001001270L, 4001001271L, 5001001272L, 6001001273L, 7001001274L, 8001001275L);
+    Blort.blort(1001001269L, 2001001270L, 3001001271L, 4001001272L, 5001001273L, 6001001274L, 7001001275L, 8001001276L);
+    Blort.blort(1001001270L, 2001001271L, 3001001272L, 4001001273L, 5001001274L, 6001001275L, 7001001276L, 8001001277L);
+    Blort.blort(1001001271L, 2001001272L, 3001001273L, 4001001274L, 5001001275L, 6001001276L, 7001001277L, 8001001278L);
+    Blort.blort(1001001272L, 2001001273L, 3001001274L, 4001001275L, 5001001276L, 6001001277L, 7001001278L, 8001001279L);
+    Blort.blort(1001001273L, 2001001274L, 3001001275L, 4001001276L, 5001001277L, 6001001278L, 7001001279L, 8001001280L);
+    Blort.blort(1001001274L, 2001001275L, 3001001276L, 4001001277L, 5001001278L, 6001001279L, 7001001280L, 8001001281L);
+    Blort.blort(1001001275L, 2001001276L, 3001001277L, 4001001278L, 5001001279L, 6001001280L, 7001001281L, 8001001282L);
+    Blort.blort(1001001276L, 2001001277L, 3001001278L, 4001001279L, 5001001280L, 6001001281L, 7001001282L, 8001001283L);
+    Blort.blort(1001001277L, 2001001278L, 3001001279L, 4001001280L, 5001001281L, 6001001282L, 7001001283L, 8001001284L);
+    Blort.blort(1001001278L, 2001001279L, 3001001280L, 4001001281L, 5001001282L, 6001001283L, 7001001284L, 8001001285L);
+    Blort.blort(1001001279L, 2001001280L, 3001001281L, 4001001282L, 5001001283L, 6001001284L, 7001001285L, 8001001286L);
+    Blort.blort(1001001280L, 2001001281L, 3001001282L, 4001001283L, 5001001284L, 6001001285L, 7001001286L, 8001001287L);
+    Blort.blort(1001001281L, 2001001282L, 3001001283L, 4001001284L, 5001001285L, 6001001286L, 7001001287L, 8001001288L);
+    Blort.blort(1001001282L, 2001001283L, 3001001284L, 4001001285L, 5001001286L, 6001001287L, 7001001288L, 8001001289L);
+    Blort.blort(1001001283L, 2001001284L, 3001001285L, 4001001286L, 5001001287L, 6001001288L, 7001001289L, 8001001290L);
+    Blort.blort(1001001284L, 2001001285L, 3001001286L, 4001001287L, 5001001288L, 6001001289L, 7001001290L, 8001001291L);
+    Blort.blort(1001001285L, 2001001286L, 3001001287L, 4001001288L, 5001001289L, 6001001290L, 7001001291L, 8001001292L);
+    Blort.blort(1001001286L, 2001001287L, 3001001288L, 4001001289L, 5001001290L, 6001001291L, 7001001292L, 8001001293L);
+    Blort.blort(1001001287L, 2001001288L, 3001001289L, 4001001290L, 5001001291L, 6001001292L, 7001001293L, 8001001294L);
+    Blort.blort(1001001288L, 2001001289L, 3001001290L, 4001001291L, 5001001292L, 6001001293L, 7001001294L, 8001001295L);
+    Blort.blort(1001001289L, 2001001290L, 3001001291L, 4001001292L, 5001001293L, 6001001294L, 7001001295L, 8001001296L);
+    Blort.blort(1001001290L, 2001001291L, 3001001292L, 4001001293L, 5001001294L, 6001001295L, 7001001296L, 8001001297L);
+    Blort.blort(1001001291L, 2001001292L, 3001001293L, 4001001294L, 5001001295L, 6001001296L, 7001001297L, 8001001298L);
+    Blort.blort(1001001292L, 2001001293L, 3001001294L, 4001001295L, 5001001296L, 6001001297L, 7001001298L, 8001001299L);
+    Blort.blort(1001001293L, 2001001294L, 3001001295L, 4001001296L, 5001001297L, 6001001298L, 7001001299L, 8001001300L);
+    Blort.blort(1001001294L, 2001001295L, 3001001296L, 4001001297L, 5001001298L, 6001001299L, 7001001300L, 8001001301L);
+    Blort.blort(1001001295L, 2001001296L, 3001001297L, 4001001298L, 5001001299L, 6001001300L, 7001001301L, 8001001302L);
+    Blort.blort(1001001296L, 2001001297L, 3001001298L, 4001001299L, 5001001300L, 6001001301L, 7001001302L, 8001001303L);
+    Blort.blort(1001001297L, 2001001298L, 3001001299L, 4001001300L, 5001001301L, 6001001302L, 7001001303L, 8001001304L);
+    Blort.blort(1001001298L, 2001001299L, 3001001300L, 4001001301L, 5001001302L, 6001001303L, 7001001304L, 8001001305L);
+    Blort.blort(1001001299L, 2001001300L, 3001001301L, 4001001302L, 5001001303L, 6001001304L, 7001001305L, 8001001306L);
+    Blort.blort(1001001300L, 2001001301L, 3001001302L, 4001001303L, 5001001304L, 6001001305L, 7001001306L, 8001001307L);
+    Blort.blort(1001001301L, 2001001302L, 3001001303L, 4001001304L, 5001001305L, 6001001306L, 7001001307L, 8001001308L);
+    Blort.blort(1001001302L, 2001001303L, 3001001304L, 4001001305L, 5001001306L, 6001001307L, 7001001308L, 8001001309L);
+    Blort.blort(1001001303L, 2001001304L, 3001001305L, 4001001306L, 5001001307L, 6001001308L, 7001001309L, 8001001310L);
+    Blort.blort(1001001304L, 2001001305L, 3001001306L, 4001001307L, 5001001308L, 6001001309L, 7001001310L, 8001001311L);
+    Blort.blort(1001001305L, 2001001306L, 3001001307L, 4001001308L, 5001001309L, 6001001310L, 7001001311L, 8001001312L);
+    Blort.blort(1001001306L, 2001001307L, 3001001308L, 4001001309L, 5001001310L, 6001001311L, 7001001312L, 8001001313L);
+    Blort.blort(1001001307L, 2001001308L, 3001001309L, 4001001310L, 5001001311L, 6001001312L, 7001001313L, 8001001314L);
+    Blort.blort(1001001308L, 2001001309L, 3001001310L, 4001001311L, 5001001312L, 6001001313L, 7001001314L, 8001001315L);
+    Blort.blort(1001001309L, 2001001310L, 3001001311L, 4001001312L, 5001001313L, 6001001314L, 7001001315L, 8001001316L);
+    Blort.blort(1001001310L, 2001001311L, 3001001312L, 4001001313L, 5001001314L, 6001001315L, 7001001316L, 8001001317L);
+    Blort.blort(1001001311L, 2001001312L, 3001001313L, 4001001314L, 5001001315L, 6001001316L, 7001001317L, 8001001318L);
+    Blort.blort(1001001312L, 2001001313L, 3001001314L, 4001001315L, 5001001316L, 6001001317L, 7001001318L, 8001001319L);
+    Blort.blort(1001001313L, 2001001314L, 3001001315L, 4001001316L, 5001001317L, 6001001318L, 7001001319L, 8001001320L);
+    Blort.blort(1001001314L, 2001001315L, 3001001316L, 4001001317L, 5001001318L, 6001001319L, 7001001320L, 8001001321L);
+    Blort.blort(1001001315L, 2001001316L, 3001001317L, 4001001318L, 5001001319L, 6001001320L, 7001001321L, 8001001322L);
+    Blort.blort(1001001316L, 2001001317L, 3001001318L, 4001001319L, 5001001320L, 6001001321L, 7001001322L, 8001001323L);
+    Blort.blort(1001001317L, 2001001318L, 3001001319L, 4001001320L, 5001001321L, 6001001322L, 7001001323L, 8001001324L);
+    Blort.blort(1001001318L, 2001001319L, 3001001320L, 4001001321L, 5001001322L, 6001001323L, 7001001324L, 8001001325L);
+    Blort.blort(1001001319L, 2001001320L, 3001001321L, 4001001322L, 5001001323L, 6001001324L, 7001001325L, 8001001326L);
+    Blort.blort(1001001320L, 2001001321L, 3001001322L, 4001001323L, 5001001324L, 6001001325L, 7001001326L, 8001001327L);
+    Blort.blort(1001001321L, 2001001322L, 3001001323L, 4001001324L, 5001001325L, 6001001326L, 7001001327L, 8001001328L);
+    Blort.blort(1001001322L, 2001001323L, 3001001324L, 4001001325L, 5001001326L, 6001001327L, 7001001328L, 8001001329L);
+    Blort.blort(1001001323L, 2001001324L, 3001001325L, 4001001326L, 5001001327L, 6001001328L, 7001001329L, 8001001330L);
+    Blort.blort(1001001324L, 2001001325L, 3001001326L, 4001001327L, 5001001328L, 6001001329L, 7001001330L, 8001001331L);
+    Blort.blort(1001001325L, 2001001326L, 3001001327L, 4001001328L, 5001001329L, 6001001330L, 7001001331L, 8001001332L);
+    Blort.blort(1001001326L, 2001001327L, 3001001328L, 4001001329L, 5001001330L, 6001001331L, 7001001332L, 8001001333L);
+    Blort.blort(1001001327L, 2001001328L, 3001001329L, 4001001330L, 5001001331L, 6001001332L, 7001001333L, 8001001334L);
+    Blort.blort(1001001328L, 2001001329L, 3001001330L, 4001001331L, 5001001332L, 6001001333L, 7001001334L, 8001001335L);
+    Blort.blort(1001001329L, 2001001330L, 3001001331L, 4001001332L, 5001001333L, 6001001334L, 7001001335L, 8001001336L);
+    Blort.blort(1001001330L, 2001001331L, 3001001332L, 4001001333L, 5001001334L, 6001001335L, 7001001336L, 8001001337L);
+    Blort.blort(1001001331L, 2001001332L, 3001001333L, 4001001334L, 5001001335L, 6001001336L, 7001001337L, 8001001338L);
+    Blort.blort(1001001332L, 2001001333L, 3001001334L, 4001001335L, 5001001336L, 6001001337L, 7001001338L, 8001001339L);
+    Blort.blort(1001001333L, 2001001334L, 3001001335L, 4001001336L, 5001001337L, 6001001338L, 7001001339L, 8001001340L);
+    Blort.blort(1001001334L, 2001001335L, 3001001336L, 4001001337L, 5001001338L, 6001001339L, 7001001340L, 8001001341L);
+    Blort.blort(1001001335L, 2001001336L, 3001001337L, 4001001338L, 5001001339L, 6001001340L, 7001001341L, 8001001342L);
+    Blort.blort(1001001336L, 2001001337L, 3001001338L, 4001001339L, 5001001340L, 6001001341L, 7001001342L, 8001001343L);
+    Blort.blort(1001001337L, 2001001338L, 3001001339L, 4001001340L, 5001001341L, 6001001342L, 7001001343L, 8001001344L);
+    Blort.blort(1001001338L, 2001001339L, 3001001340L, 4001001341L, 5001001342L, 6001001343L, 7001001344L, 8001001345L);
+    Blort.blort(1001001339L, 2001001340L, 3001001341L, 4001001342L, 5001001343L, 6001001344L, 7001001345L, 8001001346L);
+    Blort.blort(1001001340L, 2001001341L, 3001001342L, 4001001343L, 5001001344L, 6001001345L, 7001001346L, 8001001347L);
+    Blort.blort(1001001341L, 2001001342L, 3001001343L, 4001001344L, 5001001345L, 6001001346L, 7001001347L, 8001001348L);
+    Blort.blort(1001001342L, 2001001343L, 3001001344L, 4001001345L, 5001001346L, 6001001347L, 7001001348L, 8001001349L);
+    Blort.blort(1001001343L, 2001001344L, 3001001345L, 4001001346L, 5001001347L, 6001001348L, 7001001349L, 8001001350L);
+    Blort.blort(1001001344L, 2001001345L, 3001001346L, 4001001347L, 5001001348L, 6001001349L, 7001001350L, 8001001351L);
+    Blort.blort(1001001345L, 2001001346L, 3001001347L, 4001001348L, 5001001349L, 6001001350L, 7001001351L, 8001001352L);
+    Blort.blort(1001001346L, 2001001347L, 3001001348L, 4001001349L, 5001001350L, 6001001351L, 7001001352L, 8001001353L);
+    Blort.blort(1001001347L, 2001001348L, 3001001349L, 4001001350L, 5001001351L, 6001001352L, 7001001353L, 8001001354L);
+    Blort.blort(1001001348L, 2001001349L, 3001001350L, 4001001351L, 5001001352L, 6001001353L, 7001001354L, 8001001355L);
+    Blort.blort(1001001349L, 2001001350L, 3001001351L, 4001001352L, 5001001353L, 6001001354L, 7001001355L, 8001001356L);
+    Blort.blort(1001001350L, 2001001351L, 3001001352L, 4001001353L, 5001001354L, 6001001355L, 7001001356L, 8001001357L);
+    Blort.blort(1001001351L, 2001001352L, 3001001353L, 4001001354L, 5001001355L, 6001001356L, 7001001357L, 8001001358L);
+    Blort.blort(1001001352L, 2001001353L, 3001001354L, 4001001355L, 5001001356L, 6001001357L, 7001001358L, 8001001359L);
+    Blort.blort(1001001353L, 2001001354L, 3001001355L, 4001001356L, 5001001357L, 6001001358L, 7001001359L, 8001001360L);
+    Blort.blort(1001001354L, 2001001355L, 3001001356L, 4001001357L, 5001001358L, 6001001359L, 7001001360L, 8001001361L);
+    Blort.blort(1001001355L, 2001001356L, 3001001357L, 4001001358L, 5001001359L, 6001001360L, 7001001361L, 8001001362L);
+    Blort.blort(1001001356L, 2001001357L, 3001001358L, 4001001359L, 5001001360L, 6001001361L, 7001001362L, 8001001363L);
+    Blort.blort(1001001357L, 2001001358L, 3001001359L, 4001001360L, 5001001361L, 6001001362L, 7001001363L, 8001001364L);
+    Blort.blort(1001001358L, 2001001359L, 3001001360L, 4001001361L, 5001001362L, 6001001363L, 7001001364L, 8001001365L);
+    Blort.blort(1001001359L, 2001001360L, 3001001361L, 4001001362L, 5001001363L, 6001001364L, 7001001365L, 8001001366L);
+    Blort.blort(1001001360L, 2001001361L, 3001001362L, 4001001363L, 5001001364L, 6001001365L, 7001001366L, 8001001367L);
+    Blort.blort(1001001361L, 2001001362L, 3001001363L, 4001001364L, 5001001365L, 6001001366L, 7001001367L, 8001001368L);
+    Blort.blort(1001001362L, 2001001363L, 3001001364L, 4001001365L, 5001001366L, 6001001367L, 7001001368L, 8001001369L);
+    Blort.blort(1001001363L, 2001001364L, 3001001365L, 4001001366L, 5001001367L, 6001001368L, 7001001369L, 8001001370L);
+    Blort.blort(1001001364L, 2001001365L, 3001001366L, 4001001367L, 5001001368L, 6001001369L, 7001001370L, 8001001371L);
+    Blort.blort(1001001365L, 2001001366L, 3001001367L, 4001001368L, 5001001369L, 6001001370L, 7001001371L, 8001001372L);
+    Blort.blort(1001001366L, 2001001367L, 3001001368L, 4001001369L, 5001001370L, 6001001371L, 7001001372L, 8001001373L);
+    Blort.blort(1001001367L, 2001001368L, 3001001369L, 4001001370L, 5001001371L, 6001001372L, 7001001373L, 8001001374L);
+    Blort.blort(1001001368L, 2001001369L, 3001001370L, 4001001371L, 5001001372L, 6001001373L, 7001001374L, 8001001375L);
+    Blort.blort(1001001369L, 2001001370L, 3001001371L, 4001001372L, 5001001373L, 6001001374L, 7001001375L, 8001001376L);
+    Blort.blort(1001001370L, 2001001371L, 3001001372L, 4001001373L, 5001001374L, 6001001375L, 7001001376L, 8001001377L);
+    Blort.blort(1001001371L, 2001001372L, 3001001373L, 4001001374L, 5001001375L, 6001001376L, 7001001377L, 8001001378L);
+    Blort.blort(1001001372L, 2001001373L, 3001001374L, 4001001375L, 5001001376L, 6001001377L, 7001001378L, 8001001379L);
+    Blort.blort(1001001373L, 2001001374L, 3001001375L, 4001001376L, 5001001377L, 6001001378L, 7001001379L, 8001001380L);
+    Blort.blort(1001001374L, 2001001375L, 3001001376L, 4001001377L, 5001001378L, 6001001379L, 7001001380L, 8001001381L);
+    Blort.blort(1001001375L, 2001001376L, 3001001377L, 4001001378L, 5001001379L, 6001001380L, 7001001381L, 8001001382L);
+    Blort.blort(1001001376L, 2001001377L, 3001001378L, 4001001379L, 5001001380L, 6001001381L, 7001001382L, 8001001383L);
+    Blort.blort(1001001377L, 2001001378L, 3001001379L, 4001001380L, 5001001381L, 6001001382L, 7001001383L, 8001001384L);
+    Blort.blort(1001001378L, 2001001379L, 3001001380L, 4001001381L, 5001001382L, 6001001383L, 7001001384L, 8001001385L);
+    Blort.blort(1001001379L, 2001001380L, 3001001381L, 4001001382L, 5001001383L, 6001001384L, 7001001385L, 8001001386L);
+    Blort.blort(1001001380L, 2001001381L, 3001001382L, 4001001383L, 5001001384L, 6001001385L, 7001001386L, 8001001387L);
+    Blort.blort(1001001381L, 2001001382L, 3001001383L, 4001001384L, 5001001385L, 6001001386L, 7001001387L, 8001001388L);
+    Blort.blort(1001001382L, 2001001383L, 3001001384L, 4001001385L, 5001001386L, 6001001387L, 7001001388L, 8001001389L);
+    Blort.blort(1001001383L, 2001001384L, 3001001385L, 4001001386L, 5001001387L, 6001001388L, 7001001389L, 8001001390L);
+    Blort.blort(1001001384L, 2001001385L, 3001001386L, 4001001387L, 5001001388L, 6001001389L, 7001001390L, 8001001391L);
+    Blort.blort(1001001385L, 2001001386L, 3001001387L, 4001001388L, 5001001389L, 6001001390L, 7001001391L, 8001001392L);
+    Blort.blort(1001001386L, 2001001387L, 3001001388L, 4001001389L, 5001001390L, 6001001391L, 7001001392L, 8001001393L);
+    Blort.blort(1001001387L, 2001001388L, 3001001389L, 4001001390L, 5001001391L, 6001001392L, 7001001393L, 8001001394L);
+    Blort.blort(1001001388L, 2001001389L, 3001001390L, 4001001391L, 5001001392L, 6001001393L, 7001001394L, 8001001395L);
+    Blort.blort(1001001389L, 2001001390L, 3001001391L, 4001001392L, 5001001393L, 6001001394L, 7001001395L, 8001001396L);
+    Blort.blort(1001001390L, 2001001391L, 3001001392L, 4001001393L, 5001001394L, 6001001395L, 7001001396L, 8001001397L);
+    Blort.blort(1001001391L, 2001001392L, 3001001393L, 4001001394L, 5001001395L, 6001001396L, 7001001397L, 8001001398L);
+    Blort.blort(1001001392L, 2001001393L, 3001001394L, 4001001395L, 5001001396L, 6001001397L, 7001001398L, 8001001399L);
+    Blort.blort(1001001393L, 2001001394L, 3001001395L, 4001001396L, 5001001397L, 6001001398L, 7001001399L, 8001001400L);
+    Blort.blort(1001001394L, 2001001395L, 3001001396L, 4001001397L, 5001001398L, 6001001399L, 7001001400L, 8001001401L);
+    Blort.blort(1001001395L, 2001001396L, 3001001397L, 4001001398L, 5001001399L, 6001001400L, 7001001401L, 8001001402L);
+    Blort.blort(1001001396L, 2001001397L, 3001001398L, 4001001399L, 5001001400L, 6001001401L, 7001001402L, 8001001403L);
+    Blort.blort(1001001397L, 2001001398L, 3001001399L, 4001001400L, 5001001401L, 6001001402L, 7001001403L, 8001001404L);
+    Blort.blort(1001001398L, 2001001399L, 3001001400L, 4001001401L, 5001001402L, 6001001403L, 7001001404L, 8001001405L);
+    Blort.blort(1001001399L, 2001001400L, 3001001401L, 4001001402L, 5001001403L, 6001001404L, 7001001405L, 8001001406L);
+    Blort.blort(1001001400L, 2001001401L, 3001001402L, 4001001403L, 5001001404L, 6001001405L, 7001001406L, 8001001407L);
+    Blort.blort(1001001401L, 2001001402L, 3001001403L, 4001001404L, 5001001405L, 6001001406L, 7001001407L, 8001001408L);
+    Blort.blort(1001001402L, 2001001403L, 3001001404L, 4001001405L, 5001001406L, 6001001407L, 7001001408L, 8001001409L);
+    Blort.blort(1001001403L, 2001001404L, 3001001405L, 4001001406L, 5001001407L, 6001001408L, 7001001409L, 8001001410L);
+    Blort.blort(1001001404L, 2001001405L, 3001001406L, 4001001407L, 5001001408L, 6001001409L, 7001001410L, 8001001411L);
+    Blort.blort(1001001405L, 2001001406L, 3001001407L, 4001001408L, 5001001409L, 6001001410L, 7001001411L, 8001001412L);
+    Blort.blort(1001001406L, 2001001407L, 3001001408L, 4001001409L, 5001001410L, 6001001411L, 7001001412L, 8001001413L);
+    Blort.blort(1001001407L, 2001001408L, 3001001409L, 4001001410L, 5001001411L, 6001001412L, 7001001413L, 8001001414L);
+    Blort.blort(1001001408L, 2001001409L, 3001001410L, 4001001411L, 5001001412L, 6001001413L, 7001001414L, 8001001415L);
+    Blort.blort(1001001409L, 2001001410L, 3001001411L, 4001001412L, 5001001413L, 6001001414L, 7001001415L, 8001001416L);
+    Blort.blort(1001001410L, 2001001411L, 3001001412L, 4001001413L, 5001001414L, 6001001415L, 7001001416L, 8001001417L);
+    Blort.blort(1001001411L, 2001001412L, 3001001413L, 4001001414L, 5001001415L, 6001001416L, 7001001417L, 8001001418L);
+    Blort.blort(1001001412L, 2001001413L, 3001001414L, 4001001415L, 5001001416L, 6001001417L, 7001001418L, 8001001419L);
+    Blort.blort(1001001413L, 2001001414L, 3001001415L, 4001001416L, 5001001417L, 6001001418L, 7001001419L, 8001001420L);
+    Blort.blort(1001001414L, 2001001415L, 3001001416L, 4001001417L, 5001001418L, 6001001419L, 7001001420L, 8001001421L);
+    Blort.blort(1001001415L, 2001001416L, 3001001417L, 4001001418L, 5001001419L, 6001001420L, 7001001421L, 8001001422L);
+    Blort.blort(1001001416L, 2001001417L, 3001001418L, 4001001419L, 5001001420L, 6001001421L, 7001001422L, 8001001423L);
+    Blort.blort(1001001417L, 2001001418L, 3001001419L, 4001001420L, 5001001421L, 6001001422L, 7001001423L, 8001001424L);
+    Blort.blort(1001001418L, 2001001419L, 3001001420L, 4001001421L, 5001001422L, 6001001423L, 7001001424L, 8001001425L);
+    Blort.blort(1001001419L, 2001001420L, 3001001421L, 4001001422L, 5001001423L, 6001001424L, 7001001425L, 8001001426L);
+    Blort.blort(1001001420L, 2001001421L, 3001001422L, 4001001423L, 5001001424L, 6001001425L, 7001001426L, 8001001427L);
+    Blort.blort(1001001421L, 2001001422L, 3001001423L, 4001001424L, 5001001425L, 6001001426L, 7001001427L, 8001001428L);
+    Blort.blort(1001001422L, 2001001423L, 3001001424L, 4001001425L, 5001001426L, 6001001427L, 7001001428L, 8001001429L);
+    Blort.blort(1001001423L, 2001001424L, 3001001425L, 4001001426L, 5001001427L, 6001001428L, 7001001429L, 8001001430L);
+    Blort.blort(1001001424L, 2001001425L, 3001001426L, 4001001427L, 5001001428L, 6001001429L, 7001001430L, 8001001431L);
+    Blort.blort(1001001425L, 2001001426L, 3001001427L, 4001001428L, 5001001429L, 6001001430L, 7001001431L, 8001001432L);
+    Blort.blort(1001001426L, 2001001427L, 3001001428L, 4001001429L, 5001001430L, 6001001431L, 7001001432L, 8001001433L);
+    Blort.blort(1001001427L, 2001001428L, 3001001429L, 4001001430L, 5001001431L, 6001001432L, 7001001433L, 8001001434L);
+    Blort.blort(1001001428L, 2001001429L, 3001001430L, 4001001431L, 5001001432L, 6001001433L, 7001001434L, 8001001435L);
+    Blort.blort(1001001429L, 2001001430L, 3001001431L, 4001001432L, 5001001433L, 6001001434L, 7001001435L, 8001001436L);
+    Blort.blort(1001001430L, 2001001431L, 3001001432L, 4001001433L, 5001001434L, 6001001435L, 7001001436L, 8001001437L);
+    Blort.blort(1001001431L, 2001001432L, 3001001433L, 4001001434L, 5001001435L, 6001001436L, 7001001437L, 8001001438L);
+    Blort.blort(1001001432L, 2001001433L, 3001001434L, 4001001435L, 5001001436L, 6001001437L, 7001001438L, 8001001439L);
+    Blort.blort(1001001433L, 2001001434L, 3001001435L, 4001001436L, 5001001437L, 6001001438L, 7001001439L, 8001001440L);
+    Blort.blort(1001001434L, 2001001435L, 3001001436L, 4001001437L, 5001001438L, 6001001439L, 7001001440L, 8001001441L);
+    Blort.blort(1001001435L, 2001001436L, 3001001437L, 4001001438L, 5001001439L, 6001001440L, 7001001441L, 8001001442L);
+    Blort.blort(1001001436L, 2001001437L, 3001001438L, 4001001439L, 5001001440L, 6001001441L, 7001001442L, 8001001443L);
+    Blort.blort(1001001437L, 2001001438L, 3001001439L, 4001001440L, 5001001441L, 6001001442L, 7001001443L, 8001001444L);
+    Blort.blort(1001001438L, 2001001439L, 3001001440L, 4001001441L, 5001001442L, 6001001443L, 7001001444L, 8001001445L);
+    Blort.blort(1001001439L, 2001001440L, 3001001441L, 4001001442L, 5001001443L, 6001001444L, 7001001445L, 8001001446L);
+    Blort.blort(1001001440L, 2001001441L, 3001001442L, 4001001443L, 5001001444L, 6001001445L, 7001001446L, 8001001447L);
+    Blort.blort(1001001441L, 2001001442L, 3001001443L, 4001001444L, 5001001445L, 6001001446L, 7001001447L, 8001001448L);
+    Blort.blort(1001001442L, 2001001443L, 3001001444L, 4001001445L, 5001001446L, 6001001447L, 7001001448L, 8001001449L);
+    Blort.blort(1001001443L, 2001001444L, 3001001445L, 4001001446L, 5001001447L, 6001001448L, 7001001449L, 8001001450L);
+    Blort.blort(1001001444L, 2001001445L, 3001001446L, 4001001447L, 5001001448L, 6001001449L, 7001001450L, 8001001451L);
+    Blort.blort(1001001445L, 2001001446L, 3001001447L, 4001001448L, 5001001449L, 6001001450L, 7001001451L, 8001001452L);
+    Blort.blort(1001001446L, 2001001447L, 3001001448L, 4001001449L, 5001001450L, 6001001451L, 7001001452L, 8001001453L);
+    Blort.blort(1001001447L, 2001001448L, 3001001449L, 4001001450L, 5001001451L, 6001001452L, 7001001453L, 8001001454L);
+    Blort.blort(1001001448L, 2001001449L, 3001001450L, 4001001451L, 5001001452L, 6001001453L, 7001001454L, 8001001455L);
+    Blort.blort(1001001449L, 2001001450L, 3001001451L, 4001001452L, 5001001453L, 6001001454L, 7001001455L, 8001001456L);
+    Blort.blort(1001001450L, 2001001451L, 3001001452L, 4001001453L, 5001001454L, 6001001455L, 7001001456L, 8001001457L);
+    Blort.blort(1001001451L, 2001001452L, 3001001453L, 4001001454L, 5001001455L, 6001001456L, 7001001457L, 8001001458L);
+    Blort.blort(1001001452L, 2001001453L, 3001001454L, 4001001455L, 5001001456L, 6001001457L, 7001001458L, 8001001459L);
+    Blort.blort(1001001453L, 2001001454L, 3001001455L, 4001001456L, 5001001457L, 6001001458L, 7001001459L, 8001001460L);
+    Blort.blort(1001001454L, 2001001455L, 3001001456L, 4001001457L, 5001001458L, 6001001459L, 7001001460L, 8001001461L);
+    Blort.blort(1001001455L, 2001001456L, 3001001457L, 4001001458L, 5001001459L, 6001001460L, 7001001461L, 8001001462L);
+    Blort.blort(1001001456L, 2001001457L, 3001001458L, 4001001459L, 5001001460L, 6001001461L, 7001001462L, 8001001463L);
+    Blort.blort(1001001457L, 2001001458L, 3001001459L, 4001001460L, 5001001461L, 6001001462L, 7001001463L, 8001001464L);
+    Blort.blort(1001001458L, 2001001459L, 3001001460L, 4001001461L, 5001001462L, 6001001463L, 7001001464L, 8001001465L);
+    Blort.blort(1001001459L, 2001001460L, 3001001461L, 4001001462L, 5001001463L, 6001001464L, 7001001465L, 8001001466L);
+    Blort.blort(1001001460L, 2001001461L, 3001001462L, 4001001463L, 5001001464L, 6001001465L, 7001001466L, 8001001467L);
+    Blort.blort(1001001461L, 2001001462L, 3001001463L, 4001001464L, 5001001465L, 6001001466L, 7001001467L, 8001001468L);
+    Blort.blort(1001001462L, 2001001463L, 3001001464L, 4001001465L, 5001001466L, 6001001467L, 7001001468L, 8001001469L);
+    Blort.blort(1001001463L, 2001001464L, 3001001465L, 4001001466L, 5001001467L, 6001001468L, 7001001469L, 8001001470L);
+    Blort.blort(1001001464L, 2001001465L, 3001001466L, 4001001467L, 5001001468L, 6001001469L, 7001001470L, 8001001471L);
+    Blort.blort(1001001465L, 2001001466L, 3001001467L, 4001001468L, 5001001469L, 6001001470L, 7001001471L, 8001001472L);
+    Blort.blort(1001001466L, 2001001467L, 3001001468L, 4001001469L, 5001001470L, 6001001471L, 7001001472L, 8001001473L);
+    Blort.blort(1001001467L, 2001001468L, 3001001469L, 4001001470L, 5001001471L, 6001001472L, 7001001473L, 8001001474L);
+    Blort.blort(1001001468L, 2001001469L, 3001001470L, 4001001471L, 5001001472L, 6001001473L, 7001001474L, 8001001475L);
+    Blort.blort(1001001469L, 2001001470L, 3001001471L, 4001001472L, 5001001473L, 6001001474L, 7001001475L, 8001001476L);
+    Blort.blort(1001001470L, 2001001471L, 3001001472L, 4001001473L, 5001001474L, 6001001475L, 7001001476L, 8001001477L);
+    Blort.blort(1001001471L, 2001001472L, 3001001473L, 4001001474L, 5001001475L, 6001001476L, 7001001477L, 8001001478L);
+    Blort.blort(1001001472L, 2001001473L, 3001001474L, 4001001475L, 5001001476L, 6001001477L, 7001001478L, 8001001479L);
+    Blort.blort(1001001473L, 2001001474L, 3001001475L, 4001001476L, 5001001477L, 6001001478L, 7001001479L, 8001001480L);
+    Blort.blort(1001001474L, 2001001475L, 3001001476L, 4001001477L, 5001001478L, 6001001479L, 7001001480L, 8001001481L);
+    Blort.blort(1001001475L, 2001001476L, 3001001477L, 4001001478L, 5001001479L, 6001001480L, 7001001481L, 8001001482L);
+    Blort.blort(1001001476L, 2001001477L, 3001001478L, 4001001479L, 5001001480L, 6001001481L, 7001001482L, 8001001483L);
+    Blort.blort(1001001477L, 2001001478L, 3001001479L, 4001001480L, 5001001481L, 6001001482L, 7001001483L, 8001001484L);
+    Blort.blort(1001001478L, 2001001479L, 3001001480L, 4001001481L, 5001001482L, 6001001483L, 7001001484L, 8001001485L);
+    Blort.blort(1001001479L, 2001001480L, 3001001481L, 4001001482L, 5001001483L, 6001001484L, 7001001485L, 8001001486L);
+    Blort.blort(1001001480L, 2001001481L, 3001001482L, 4001001483L, 5001001484L, 6001001485L, 7001001486L, 8001001487L);
+    Blort.blort(1001001481L, 2001001482L, 3001001483L, 4001001484L, 5001001485L, 6001001486L, 7001001487L, 8001001488L);
+    Blort.blort(1001001482L, 2001001483L, 3001001484L, 4001001485L, 5001001486L, 6001001487L, 7001001488L, 8001001489L);
+    Blort.blort(1001001483L, 2001001484L, 3001001485L, 4001001486L, 5001001487L, 6001001488L, 7001001489L, 8001001490L);
+    Blort.blort(1001001484L, 2001001485L, 3001001486L, 4001001487L, 5001001488L, 6001001489L, 7001001490L, 8001001491L);
+    Blort.blort(1001001485L, 2001001486L, 3001001487L, 4001001488L, 5001001489L, 6001001490L, 7001001491L, 8001001492L);
+    Blort.blort(1001001486L, 2001001487L, 3001001488L, 4001001489L, 5001001490L, 6001001491L, 7001001492L, 8001001493L);
+    Blort.blort(1001001487L, 2001001488L, 3001001489L, 4001001490L, 5001001491L, 6001001492L, 7001001493L, 8001001494L);
+    Blort.blort(1001001488L, 2001001489L, 3001001490L, 4001001491L, 5001001492L, 6001001493L, 7001001494L, 8001001495L);
+    Blort.blort(1001001489L, 2001001490L, 3001001491L, 4001001492L, 5001001493L, 6001001494L, 7001001495L, 8001001496L);
+    Blort.blort(1001001490L, 2001001491L, 3001001492L, 4001001493L, 5001001494L, 6001001495L, 7001001496L, 8001001497L);
+    Blort.blort(1001001491L, 2001001492L, 3001001493L, 4001001494L, 5001001495L, 6001001496L, 7001001497L, 8001001498L);
+    Blort.blort(1001001492L, 2001001493L, 3001001494L, 4001001495L, 5001001496L, 6001001497L, 7001001498L, 8001001499L);
+    Blort.blort(1001001493L, 2001001494L, 3001001495L, 4001001496L, 5001001497L, 6001001498L, 7001001499L, 8001001500L);
+    Blort.blort(1001001494L, 2001001495L, 3001001496L, 4001001497L, 5001001498L, 6001001499L, 7001001500L, 8001001501L);
+    Blort.blort(1001001495L, 2001001496L, 3001001497L, 4001001498L, 5001001499L, 6001001500L, 7001001501L, 8001001502L);
+    Blort.blort(1001001496L, 2001001497L, 3001001498L, 4001001499L, 5001001500L, 6001001501L, 7001001502L, 8001001503L);
+    Blort.blort(1001001497L, 2001001498L, 3001001499L, 4001001500L, 5001001501L, 6001001502L, 7001001503L, 8001001504L);
+    Blort.blort(1001001498L, 2001001499L, 3001001500L, 4001001501L, 5001001502L, 6001001503L, 7001001504L, 8001001505L);
+    Blort.blort(1001001499L, 2001001500L, 3001001501L, 4001001502L, 5001001503L, 6001001504L, 7001001505L, 8001001506L);
+    Blort.blort(1001001500L, 2001001501L, 3001001502L, 4001001503L, 5001001504L, 6001001505L, 7001001506L, 8001001507L);
+    Blort.blort(1001001501L, 2001001502L, 3001001503L, 4001001504L, 5001001505L, 6001001506L, 7001001507L, 8001001508L);
+    Blort.blort(1001001502L, 2001001503L, 3001001504L, 4001001505L, 5001001506L, 6001001507L, 7001001508L, 8001001509L);
+    Blort.blort(1001001503L, 2001001504L, 3001001505L, 4001001506L, 5001001507L, 6001001508L, 7001001509L, 8001001510L);
+    Blort.blort(1001001504L, 2001001505L, 3001001506L, 4001001507L, 5001001508L, 6001001509L, 7001001510L, 8001001511L);
+    Blort.blort(1001001505L, 2001001506L, 3001001507L, 4001001508L, 5001001509L, 6001001510L, 7001001511L, 8001001512L);
+    Blort.blort(1001001506L, 2001001507L, 3001001508L, 4001001509L, 5001001510L, 6001001511L, 7001001512L, 8001001513L);
+    Blort.blort(1001001507L, 2001001508L, 3001001509L, 4001001510L, 5001001511L, 6001001512L, 7001001513L, 8001001514L);
+    Blort.blort(1001001508L, 2001001509L, 3001001510L, 4001001511L, 5001001512L, 6001001513L, 7001001514L, 8001001515L);
+    Blort.blort(1001001509L, 2001001510L, 3001001511L, 4001001512L, 5001001513L, 6001001514L, 7001001515L, 8001001516L);
+    Blort.blort(1001001510L, 2001001511L, 3001001512L, 4001001513L, 5001001514L, 6001001515L, 7001001516L, 8001001517L);
+    Blort.blort(1001001511L, 2001001512L, 3001001513L, 4001001514L, 5001001515L, 6001001516L, 7001001517L, 8001001518L);
+    Blort.blort(1001001512L, 2001001513L, 3001001514L, 4001001515L, 5001001516L, 6001001517L, 7001001518L, 8001001519L);
+    Blort.blort(1001001513L, 2001001514L, 3001001515L, 4001001516L, 5001001517L, 6001001518L, 7001001519L, 8001001520L);
+    Blort.blort(1001001514L, 2001001515L, 3001001516L, 4001001517L, 5001001518L, 6001001519L, 7001001520L, 8001001521L);
+    Blort.blort(1001001515L, 2001001516L, 3001001517L, 4001001518L, 5001001519L, 6001001520L, 7001001521L, 8001001522L);
+    Blort.blort(1001001516L, 2001001517L, 3001001518L, 4001001519L, 5001001520L, 6001001521L, 7001001522L, 8001001523L);
+    Blort.blort(1001001517L, 2001001518L, 3001001519L, 4001001520L, 5001001521L, 6001001522L, 7001001523L, 8001001524L);
+    Blort.blort(1001001518L, 2001001519L, 3001001520L, 4001001521L, 5001001522L, 6001001523L, 7001001524L, 8001001525L);
+    Blort.blort(1001001519L, 2001001520L, 3001001521L, 4001001522L, 5001001523L, 6001001524L, 7001001525L, 8001001526L);
+    Blort.blort(1001001520L, 2001001521L, 3001001522L, 4001001523L, 5001001524L, 6001001525L, 7001001526L, 8001001527L);
+    Blort.blort(1001001521L, 2001001522L, 3001001523L, 4001001524L, 5001001525L, 6001001526L, 7001001527L, 8001001528L);
+    Blort.blort(1001001522L, 2001001523L, 3001001524L, 4001001525L, 5001001526L, 6001001527L, 7001001528L, 8001001529L);
+    Blort.blort(1001001523L, 2001001524L, 3001001525L, 4001001526L, 5001001527L, 6001001528L, 7001001529L, 8001001530L);
+    Blort.blort(1001001524L, 2001001525L, 3001001526L, 4001001527L, 5001001528L, 6001001529L, 7001001530L, 8001001531L);
+    Blort.blort(1001001525L, 2001001526L, 3001001527L, 4001001528L, 5001001529L, 6001001530L, 7001001531L, 8001001532L);
+    Blort.blort(1001001526L, 2001001527L, 3001001528L, 4001001529L, 5001001530L, 6001001531L, 7001001532L, 8001001533L);
+    Blort.blort(1001001527L, 2001001528L, 3001001529L, 4001001530L, 5001001531L, 6001001532L, 7001001533L, 8001001534L);
+    Blort.blort(1001001528L, 2001001529L, 3001001530L, 4001001531L, 5001001532L, 6001001533L, 7001001534L, 8001001535L);
+    Blort.blort(1001001529L, 2001001530L, 3001001531L, 4001001532L, 5001001533L, 6001001534L, 7001001535L, 8001001536L);
+    Blort.blort(1001001530L, 2001001531L, 3001001532L, 4001001533L, 5001001534L, 6001001535L, 7001001536L, 8001001537L);
+    Blort.blort(1001001531L, 2001001532L, 3001001533L, 4001001534L, 5001001535L, 6001001536L, 7001001537L, 8001001538L);
+    Blort.blort(1001001532L, 2001001533L, 3001001534L, 4001001535L, 5001001536L, 6001001537L, 7001001538L, 8001001539L);
+    Blort.blort(1001001533L, 2001001534L, 3001001535L, 4001001536L, 5001001537L, 6001001538L, 7001001539L, 8001001540L);
+    Blort.blort(1001001534L, 2001001535L, 3001001536L, 4001001537L, 5001001538L, 6001001539L, 7001001540L, 8001001541L);
+    Blort.blort(1001001535L, 2001001536L, 3001001537L, 4001001538L, 5001001539L, 6001001540L, 7001001541L, 8001001542L);
+    Blort.blort(1001001536L, 2001001537L, 3001001538L, 4001001539L, 5001001540L, 6001001541L, 7001001542L, 8001001543L);
+    Blort.blort(1001001537L, 2001001538L, 3001001539L, 4001001540L, 5001001541L, 6001001542L, 7001001543L, 8001001544L);
+    Blort.blort(1001001538L, 2001001539L, 3001001540L, 4001001541L, 5001001542L, 6001001543L, 7001001544L, 8001001545L);
+    Blort.blort(1001001539L, 2001001540L, 3001001541L, 4001001542L, 5001001543L, 6001001544L, 7001001545L, 8001001546L);
+    Blort.blort(1001001540L, 2001001541L, 3001001542L, 4001001543L, 5001001544L, 6001001545L, 7001001546L, 8001001547L);
+    Blort.blort(1001001541L, 2001001542L, 3001001543L, 4001001544L, 5001001545L, 6001001546L, 7001001547L, 8001001548L);
+    Blort.blort(1001001542L, 2001001543L, 3001001544L, 4001001545L, 5001001546L, 6001001547L, 7001001548L, 8001001549L);
+    Blort.blort(1001001543L, 2001001544L, 3001001545L, 4001001546L, 5001001547L, 6001001548L, 7001001549L, 8001001550L);
+    Blort.blort(1001001544L, 2001001545L, 3001001546L, 4001001547L, 5001001548L, 6001001549L, 7001001550L, 8001001551L);
+    Blort.blort(1001001545L, 2001001546L, 3001001547L, 4001001548L, 5001001549L, 6001001550L, 7001001551L, 8001001552L);
+    Blort.blort(1001001546L, 2001001547L, 3001001548L, 4001001549L, 5001001550L, 6001001551L, 7001001552L, 8001001553L);
+    Blort.blort(1001001547L, 2001001548L, 3001001549L, 4001001550L, 5001001551L, 6001001552L, 7001001553L, 8001001554L);
+    Blort.blort(1001001548L, 2001001549L, 3001001550L, 4001001551L, 5001001552L, 6001001553L, 7001001554L, 8001001555L);
+    Blort.blort(1001001549L, 2001001550L, 3001001551L, 4001001552L, 5001001553L, 6001001554L, 7001001555L, 8001001556L);
+    Blort.blort(1001001550L, 2001001551L, 3001001552L, 4001001553L, 5001001554L, 6001001555L, 7001001556L, 8001001557L);
+    Blort.blort(1001001551L, 2001001552L, 3001001553L, 4001001554L, 5001001555L, 6001001556L, 7001001557L, 8001001558L);
+    Blort.blort(1001001552L, 2001001553L, 3001001554L, 4001001555L, 5001001556L, 6001001557L, 7001001558L, 8001001559L);
+    Blort.blort(1001001553L, 2001001554L, 3001001555L, 4001001556L, 5001001557L, 6001001558L, 7001001559L, 8001001560L);
+    Blort.blort(1001001554L, 2001001555L, 3001001556L, 4001001557L, 5001001558L, 6001001559L, 7001001560L, 8001001561L);
+    Blort.blort(1001001555L, 2001001556L, 3001001557L, 4001001558L, 5001001559L, 6001001560L, 7001001561L, 8001001562L);
+    Blort.blort(1001001556L, 2001001557L, 3001001558L, 4001001559L, 5001001560L, 6001001561L, 7001001562L, 8001001563L);
+    Blort.blort(1001001557L, 2001001558L, 3001001559L, 4001001560L, 5001001561L, 6001001562L, 7001001563L, 8001001564L);
+    Blort.blort(1001001558L, 2001001559L, 3001001560L, 4001001561L, 5001001562L, 6001001563L, 7001001564L, 8001001565L);
+    Blort.blort(1001001559L, 2001001560L, 3001001561L, 4001001562L, 5001001563L, 6001001564L, 7001001565L, 8001001566L);
+    Blort.blort(1001001560L, 2001001561L, 3001001562L, 4001001563L, 5001001564L, 6001001565L, 7001001566L, 8001001567L);
+    Blort.blort(1001001561L, 2001001562L, 3001001563L, 4001001564L, 5001001565L, 6001001566L, 7001001567L, 8001001568L);
+    Blort.blort(1001001562L, 2001001563L, 3001001564L, 4001001565L, 5001001566L, 6001001567L, 7001001568L, 8001001569L);
+    Blort.blort(1001001563L, 2001001564L, 3001001565L, 4001001566L, 5001001567L, 6001001568L, 7001001569L, 8001001570L);
+    Blort.blort(1001001564L, 2001001565L, 3001001566L, 4001001567L, 5001001568L, 6001001569L, 7001001570L, 8001001571L);
+    Blort.blort(1001001565L, 2001001566L, 3001001567L, 4001001568L, 5001001569L, 6001001570L, 7001001571L, 8001001572L);
+    Blort.blort(1001001566L, 2001001567L, 3001001568L, 4001001569L, 5001001570L, 6001001571L, 7001001572L, 8001001573L);
+    Blort.blort(1001001567L, 2001001568L, 3001001569L, 4001001570L, 5001001571L, 6001001572L, 7001001573L, 8001001574L);
+    Blort.blort(1001001568L, 2001001569L, 3001001570L, 4001001571L, 5001001572L, 6001001573L, 7001001574L, 8001001575L);
+    Blort.blort(1001001569L, 2001001570L, 3001001571L, 4001001572L, 5001001573L, 6001001574L, 7001001575L, 8001001576L);
+    Blort.blort(1001001570L, 2001001571L, 3001001572L, 4001001573L, 5001001574L, 6001001575L, 7001001576L, 8001001577L);
+    Blort.blort(1001001571L, 2001001572L, 3001001573L, 4001001574L, 5001001575L, 6001001576L, 7001001577L, 8001001578L);
+    Blort.blort(1001001572L, 2001001573L, 3001001574L, 4001001575L, 5001001576L, 6001001577L, 7001001578L, 8001001579L);
+    Blort.blort(1001001573L, 2001001574L, 3001001575L, 4001001576L, 5001001577L, 6001001578L, 7001001579L, 8001001580L);
+    Blort.blort(1001001574L, 2001001575L, 3001001576L, 4001001577L, 5001001578L, 6001001579L, 7001001580L, 8001001581L);
+    Blort.blort(1001001575L, 2001001576L, 3001001577L, 4001001578L, 5001001579L, 6001001580L, 7001001581L, 8001001582L);
+    Blort.blort(1001001576L, 2001001577L, 3001001578L, 4001001579L, 5001001580L, 6001001581L, 7001001582L, 8001001583L);
+    Blort.blort(1001001577L, 2001001578L, 3001001579L, 4001001580L, 5001001581L, 6001001582L, 7001001583L, 8001001584L);
+    Blort.blort(1001001578L, 2001001579L, 3001001580L, 4001001581L, 5001001582L, 6001001583L, 7001001584L, 8001001585L);
+    Blort.blort(1001001579L, 2001001580L, 3001001581L, 4001001582L, 5001001583L, 6001001584L, 7001001585L, 8001001586L);
+    Blort.blort(1001001580L, 2001001581L, 3001001582L, 4001001583L, 5001001584L, 6001001585L, 7001001586L, 8001001587L);
+    Blort.blort(1001001581L, 2001001582L, 3001001583L, 4001001584L, 5001001585L, 6001001586L, 7001001587L, 8001001588L);
+    Blort.blort(1001001582L, 2001001583L, 3001001584L, 4001001585L, 5001001586L, 6001001587L, 7001001588L, 8001001589L);
+    Blort.blort(1001001583L, 2001001584L, 3001001585L, 4001001586L, 5001001587L, 6001001588L, 7001001589L, 8001001590L);
+    Blort.blort(1001001584L, 2001001585L, 3001001586L, 4001001587L, 5001001588L, 6001001589L, 7001001590L, 8001001591L);
+    Blort.blort(1001001585L, 2001001586L, 3001001587L, 4001001588L, 5001001589L, 6001001590L, 7001001591L, 8001001592L);
+    Blort.blort(1001001586L, 2001001587L, 3001001588L, 4001001589L, 5001001590L, 6001001591L, 7001001592L, 8001001593L);
+    Blort.blort(1001001587L, 2001001588L, 3001001589L, 4001001590L, 5001001591L, 6001001592L, 7001001593L, 8001001594L);
+    Blort.blort(1001001588L, 2001001589L, 3001001590L, 4001001591L, 5001001592L, 6001001593L, 7001001594L, 8001001595L);
+    Blort.blort(1001001589L, 2001001590L, 3001001591L, 4001001592L, 5001001593L, 6001001594L, 7001001595L, 8001001596L);
+    Blort.blort(1001001590L, 2001001591L, 3001001592L, 4001001593L, 5001001594L, 6001001595L, 7001001596L, 8001001597L);
+    Blort.blort(1001001591L, 2001001592L, 3001001593L, 4001001594L, 5001001595L, 6001001596L, 7001001597L, 8001001598L);
+    Blort.blort(1001001592L, 2001001593L, 3001001594L, 4001001595L, 5001001596L, 6001001597L, 7001001598L, 8001001599L);
+    Blort.blort(1001001593L, 2001001594L, 3001001595L, 4001001596L, 5001001597L, 6001001598L, 7001001599L, 8001001600L);
+    Blort.blort(1001001594L, 2001001595L, 3001001596L, 4001001597L, 5001001598L, 6001001599L, 7001001600L, 8001001601L);
+    Blort.blort(1001001595L, 2001001596L, 3001001597L, 4001001598L, 5001001599L, 6001001600L, 7001001601L, 8001001602L);
+    Blort.blort(1001001596L, 2001001597L, 3001001598L, 4001001599L, 5001001600L, 6001001601L, 7001001602L, 8001001603L);
+    Blort.blort(1001001597L, 2001001598L, 3001001599L, 4001001600L, 5001001601L, 6001001602L, 7001001603L, 8001001604L);
+    Blort.blort(1001001598L, 2001001599L, 3001001600L, 4001001601L, 5001001602L, 6001001603L, 7001001604L, 8001001605L);
+    Blort.blort(1001001599L, 2001001600L, 3001001601L, 4001001602L, 5001001603L, 6001001604L, 7001001605L, 8001001606L);
+    Blort.blort(1001001600L, 2001001601L, 3001001602L, 4001001603L, 5001001604L, 6001001605L, 7001001606L, 8001001607L);
+    Blort.blort(1001001601L, 2001001602L, 3001001603L, 4001001604L, 5001001605L, 6001001606L, 7001001607L, 8001001608L);
+    Blort.blort(1001001602L, 2001001603L, 3001001604L, 4001001605L, 5001001606L, 6001001607L, 7001001608L, 8001001609L);
+    Blort.blort(1001001603L, 2001001604L, 3001001605L, 4001001606L, 5001001607L, 6001001608L, 7001001609L, 8001001610L);
+    Blort.blort(1001001604L, 2001001605L, 3001001606L, 4001001607L, 5001001608L, 6001001609L, 7001001610L, 8001001611L);
+    Blort.blort(1001001605L, 2001001606L, 3001001607L, 4001001608L, 5001001609L, 6001001610L, 7001001611L, 8001001612L);
+    Blort.blort(1001001606L, 2001001607L, 3001001608L, 4001001609L, 5001001610L, 6001001611L, 7001001612L, 8001001613L);
+    Blort.blort(1001001607L, 2001001608L, 3001001609L, 4001001610L, 5001001611L, 6001001612L, 7001001613L, 8001001614L);
+    Blort.blort(1001001608L, 2001001609L, 3001001610L, 4001001611L, 5001001612L, 6001001613L, 7001001614L, 8001001615L);
+    Blort.blort(1001001609L, 2001001610L, 3001001611L, 4001001612L, 5001001613L, 6001001614L, 7001001615L, 8001001616L);
+    Blort.blort(1001001610L, 2001001611L, 3001001612L, 4001001613L, 5001001614L, 6001001615L, 7001001616L, 8001001617L);
+    Blort.blort(1001001611L, 2001001612L, 3001001613L, 4001001614L, 5001001615L, 6001001616L, 7001001617L, 8001001618L);
+    Blort.blort(1001001612L, 2001001613L, 3001001614L, 4001001615L, 5001001616L, 6001001617L, 7001001618L, 8001001619L);
+    Blort.blort(1001001613L, 2001001614L, 3001001615L, 4001001616L, 5001001617L, 6001001618L, 7001001619L, 8001001620L);
+    Blort.blort(1001001614L, 2001001615L, 3001001616L, 4001001617L, 5001001618L, 6001001619L, 7001001620L, 8001001621L);
+    Blort.blort(1001001615L, 2001001616L, 3001001617L, 4001001618L, 5001001619L, 6001001620L, 7001001621L, 8001001622L);
+    Blort.blort(1001001616L, 2001001617L, 3001001618L, 4001001619L, 5001001620L, 6001001621L, 7001001622L, 8001001623L);
+    Blort.blort(1001001617L, 2001001618L, 3001001619L, 4001001620L, 5001001621L, 6001001622L, 7001001623L, 8001001624L);
+    Blort.blort(1001001618L, 2001001619L, 3001001620L, 4001001621L, 5001001622L, 6001001623L, 7001001624L, 8001001625L);
+    Blort.blort(1001001619L, 2001001620L, 3001001621L, 4001001622L, 5001001623L, 6001001624L, 7001001625L, 8001001626L);
+    Blort.blort(1001001620L, 2001001621L, 3001001622L, 4001001623L, 5001001624L, 6001001625L, 7001001626L, 8001001627L);
+    Blort.blort(1001001621L, 2001001622L, 3001001623L, 4001001624L, 5001001625L, 6001001626L, 7001001627L, 8001001628L);
+    Blort.blort(1001001622L, 2001001623L, 3001001624L, 4001001625L, 5001001626L, 6001001627L, 7001001628L, 8001001629L);
+    Blort.blort(1001001623L, 2001001624L, 3001001625L, 4001001626L, 5001001627L, 6001001628L, 7001001629L, 8001001630L);
+    Blort.blort(1001001624L, 2001001625L, 3001001626L, 4001001627L, 5001001628L, 6001001629L, 7001001630L, 8001001631L);
+    Blort.blort(1001001625L, 2001001626L, 3001001627L, 4001001628L, 5001001629L, 6001001630L, 7001001631L, 8001001632L);
+    Blort.blort(1001001626L, 2001001627L, 3001001628L, 4001001629L, 5001001630L, 6001001631L, 7001001632L, 8001001633L);
+    Blort.blort(1001001627L, 2001001628L, 3001001629L, 4001001630L, 5001001631L, 6001001632L, 7001001633L, 8001001634L);
+    Blort.blort(1001001628L, 2001001629L, 3001001630L, 4001001631L, 5001001632L, 6001001633L, 7001001634L, 8001001635L);
+    Blort.blort(1001001629L, 2001001630L, 3001001631L, 4001001632L, 5001001633L, 6001001634L, 7001001635L, 8001001636L);
+    Blort.blort(1001001630L, 2001001631L, 3001001632L, 4001001633L, 5001001634L, 6001001635L, 7001001636L, 8001001637L);
+    Blort.blort(1001001631L, 2001001632L, 3001001633L, 4001001634L, 5001001635L, 6001001636L, 7001001637L, 8001001638L);
+    Blort.blort(1001001632L, 2001001633L, 3001001634L, 4001001635L, 5001001636L, 6001001637L, 7001001638L, 8001001639L);
+    Blort.blort(1001001633L, 2001001634L, 3001001635L, 4001001636L, 5001001637L, 6001001638L, 7001001639L, 8001001640L);
+    Blort.blort(1001001634L, 2001001635L, 3001001636L, 4001001637L, 5001001638L, 6001001639L, 7001001640L, 8001001641L);
+    Blort.blort(1001001635L, 2001001636L, 3001001637L, 4001001638L, 5001001639L, 6001001640L, 7001001641L, 8001001642L);
+    Blort.blort(1001001636L, 2001001637L, 3001001638L, 4001001639L, 5001001640L, 6001001641L, 7001001642L, 8001001643L);
+    Blort.blort(1001001637L, 2001001638L, 3001001639L, 4001001640L, 5001001641L, 6001001642L, 7001001643L, 8001001644L);
+    Blort.blort(1001001638L, 2001001639L, 3001001640L, 4001001641L, 5001001642L, 6001001643L, 7001001644L, 8001001645L);
+    Blort.blort(1001001639L, 2001001640L, 3001001641L, 4001001642L, 5001001643L, 6001001644L, 7001001645L, 8001001646L);
+    Blort.blort(1001001640L, 2001001641L, 3001001642L, 4001001643L, 5001001644L, 6001001645L, 7001001646L, 8001001647L);
+    Blort.blort(1001001641L, 2001001642L, 3001001643L, 4001001644L, 5001001645L, 6001001646L, 7001001647L, 8001001648L);
+    Blort.blort(1001001642L, 2001001643L, 3001001644L, 4001001645L, 5001001646L, 6001001647L, 7001001648L, 8001001649L);
+    Blort.blort(1001001643L, 2001001644L, 3001001645L, 4001001646L, 5001001647L, 6001001648L, 7001001649L, 8001001650L);
+    Blort.blort(1001001644L, 2001001645L, 3001001646L, 4001001647L, 5001001648L, 6001001649L, 7001001650L, 8001001651L);
+    Blort.blort(1001001645L, 2001001646L, 3001001647L, 4001001648L, 5001001649L, 6001001650L, 7001001651L, 8001001652L);
+    Blort.blort(1001001646L, 2001001647L, 3001001648L, 4001001649L, 5001001650L, 6001001651L, 7001001652L, 8001001653L);
+    Blort.blort(1001001647L, 2001001648L, 3001001649L, 4001001650L, 5001001651L, 6001001652L, 7001001653L, 8001001654L);
+    Blort.blort(1001001648L, 2001001649L, 3001001650L, 4001001651L, 5001001652L, 6001001653L, 7001001654L, 8001001655L);
+    Blort.blort(1001001649L, 2001001650L, 3001001651L, 4001001652L, 5001001653L, 6001001654L, 7001001655L, 8001001656L);
+    Blort.blort(1001001650L, 2001001651L, 3001001652L, 4001001653L, 5001001654L, 6001001655L, 7001001656L, 8001001657L);
+    Blort.blort(1001001651L, 2001001652L, 3001001653L, 4001001654L, 5001001655L, 6001001656L, 7001001657L, 8001001658L);
+    Blort.blort(1001001652L, 2001001653L, 3001001654L, 4001001655L, 5001001656L, 6001001657L, 7001001658L, 8001001659L);
+    Blort.blort(1001001653L, 2001001654L, 3001001655L, 4001001656L, 5001001657L, 6001001658L, 7001001659L, 8001001660L);
+    Blort.blort(1001001654L, 2001001655L, 3001001656L, 4001001657L, 5001001658L, 6001001659L, 7001001660L, 8001001661L);
+    Blort.blort(1001001655L, 2001001656L, 3001001657L, 4001001658L, 5001001659L, 6001001660L, 7001001661L, 8001001662L);
+    Blort.blort(1001001656L, 2001001657L, 3001001658L, 4001001659L, 5001001660L, 6001001661L, 7001001662L, 8001001663L);
+    Blort.blort(1001001657L, 2001001658L, 3001001659L, 4001001660L, 5001001661L, 6001001662L, 7001001663L, 8001001664L);
+    Blort.blort(1001001658L, 2001001659L, 3001001660L, 4001001661L, 5001001662L, 6001001663L, 7001001664L, 8001001665L);
+    Blort.blort(1001001659L, 2001001660L, 3001001661L, 4001001662L, 5001001663L, 6001001664L, 7001001665L, 8001001666L);
+    Blort.blort(1001001660L, 2001001661L, 3001001662L, 4001001663L, 5001001664L, 6001001665L, 7001001666L, 8001001667L);
+    Blort.blort(1001001661L, 2001001662L, 3001001663L, 4001001664L, 5001001665L, 6001001666L, 7001001667L, 8001001668L);
+    Blort.blort(1001001662L, 2001001663L, 3001001664L, 4001001665L, 5001001666L, 6001001667L, 7001001668L, 8001001669L);
+    Blort.blort(1001001663L, 2001001664L, 3001001665L, 4001001666L, 5001001667L, 6001001668L, 7001001669L, 8001001670L);
+    Blort.blort(1001001664L, 2001001665L, 3001001666L, 4001001667L, 5001001668L, 6001001669L, 7001001670L, 8001001671L);
+    Blort.blort(1001001665L, 2001001666L, 3001001667L, 4001001668L, 5001001669L, 6001001670L, 7001001671L, 8001001672L);
+    Blort.blort(1001001666L, 2001001667L, 3001001668L, 4001001669L, 5001001670L, 6001001671L, 7001001672L, 8001001673L);
+    Blort.blort(1001001667L, 2001001668L, 3001001669L, 4001001670L, 5001001671L, 6001001672L, 7001001673L, 8001001674L);
+    Blort.blort(1001001668L, 2001001669L, 3001001670L, 4001001671L, 5001001672L, 6001001673L, 7001001674L, 8001001675L);
+    Blort.blort(1001001669L, 2001001670L, 3001001671L, 4001001672L, 5001001673L, 6001001674L, 7001001675L, 8001001676L);
+    Blort.blort(1001001670L, 2001001671L, 3001001672L, 4001001673L, 5001001674L, 6001001675L, 7001001676L, 8001001677L);
+    Blort.blort(1001001671L, 2001001672L, 3001001673L, 4001001674L, 5001001675L, 6001001676L, 7001001677L, 8001001678L);
+    Blort.blort(1001001672L, 2001001673L, 3001001674L, 4001001675L, 5001001676L, 6001001677L, 7001001678L, 8001001679L);
+    Blort.blort(1001001673L, 2001001674L, 3001001675L, 4001001676L, 5001001677L, 6001001678L, 7001001679L, 8001001680L);
+    Blort.blort(1001001674L, 2001001675L, 3001001676L, 4001001677L, 5001001678L, 6001001679L, 7001001680L, 8001001681L);
+    Blort.blort(1001001675L, 2001001676L, 3001001677L, 4001001678L, 5001001679L, 6001001680L, 7001001681L, 8001001682L);
+    Blort.blort(1001001676L, 2001001677L, 3001001678L, 4001001679L, 5001001680L, 6001001681L, 7001001682L, 8001001683L);
+    Blort.blort(1001001677L, 2001001678L, 3001001679L, 4001001680L, 5001001681L, 6001001682L, 7001001683L, 8001001684L);
+    Blort.blort(1001001678L, 2001001679L, 3001001680L, 4001001681L, 5001001682L, 6001001683L, 7001001684L, 8001001685L);
+    Blort.blort(1001001679L, 2001001680L, 3001001681L, 4001001682L, 5001001683L, 6001001684L, 7001001685L, 8001001686L);
+    Blort.blort(1001001680L, 2001001681L, 3001001682L, 4001001683L, 5001001684L, 6001001685L, 7001001686L, 8001001687L);
+    Blort.blort(1001001681L, 2001001682L, 3001001683L, 4001001684L, 5001001685L, 6001001686L, 7001001687L, 8001001688L);
+    Blort.blort(1001001682L, 2001001683L, 3001001684L, 4001001685L, 5001001686L, 6001001687L, 7001001688L, 8001001689L);
+    Blort.blort(1001001683L, 2001001684L, 3001001685L, 4001001686L, 5001001687L, 6001001688L, 7001001689L, 8001001690L);
+    Blort.blort(1001001684L, 2001001685L, 3001001686L, 4001001687L, 5001001688L, 6001001689L, 7001001690L, 8001001691L);
+    Blort.blort(1001001685L, 2001001686L, 3001001687L, 4001001688L, 5001001689L, 6001001690L, 7001001691L, 8001001692L);
+    Blort.blort(1001001686L, 2001001687L, 3001001688L, 4001001689L, 5001001690L, 6001001691L, 7001001692L, 8001001693L);
+    Blort.blort(1001001687L, 2001001688L, 3001001689L, 4001001690L, 5001001691L, 6001001692L, 7001001693L, 8001001694L);
+    Blort.blort(1001001688L, 2001001689L, 3001001690L, 4001001691L, 5001001692L, 6001001693L, 7001001694L, 8001001695L);
+    Blort.blort(1001001689L, 2001001690L, 3001001691L, 4001001692L, 5001001693L, 6001001694L, 7001001695L, 8001001696L);
+    Blort.blort(1001001690L, 2001001691L, 3001001692L, 4001001693L, 5001001694L, 6001001695L, 7001001696L, 8001001697L);
+    Blort.blort(1001001691L, 2001001692L, 3001001693L, 4001001694L, 5001001695L, 6001001696L, 7001001697L, 8001001698L);
+    Blort.blort(1001001692L, 2001001693L, 3001001694L, 4001001695L, 5001001696L, 6001001697L, 7001001698L, 8001001699L);
+    Blort.blort(1001001693L, 2001001694L, 3001001695L, 4001001696L, 5001001697L, 6001001698L, 7001001699L, 8001001700L);
+    Blort.blort(1001001694L, 2001001695L, 3001001696L, 4001001697L, 5001001698L, 6001001699L, 7001001700L, 8001001701L);
+    Blort.blort(1001001695L, 2001001696L, 3001001697L, 4001001698L, 5001001699L, 6001001700L, 7001001701L, 8001001702L);
+    Blort.blort(1001001696L, 2001001697L, 3001001698L, 4001001699L, 5001001700L, 6001001701L, 7001001702L, 8001001703L);
+    Blort.blort(1001001697L, 2001001698L, 3001001699L, 4001001700L, 5001001701L, 6001001702L, 7001001703L, 8001001704L);
+    Blort.blort(1001001698L, 2001001699L, 3001001700L, 4001001701L, 5001001702L, 6001001703L, 7001001704L, 8001001705L);
+    Blort.blort(1001001699L, 2001001700L, 3001001701L, 4001001702L, 5001001703L, 6001001704L, 7001001705L, 8001001706L);
+    Blort.blort(1001001700L, 2001001701L, 3001001702L, 4001001703L, 5001001704L, 6001001705L, 7001001706L, 8001001707L);
+    Blort.blort(1001001701L, 2001001702L, 3001001703L, 4001001704L, 5001001705L, 6001001706L, 7001001707L, 8001001708L);
+    Blort.blort(1001001702L, 2001001703L, 3001001704L, 4001001705L, 5001001706L, 6001001707L, 7001001708L, 8001001709L);
+    Blort.blort(1001001703L, 2001001704L, 3001001705L, 4001001706L, 5001001707L, 6001001708L, 7001001709L, 8001001710L);
+    Blort.blort(1001001704L, 2001001705L, 3001001706L, 4001001707L, 5001001708L, 6001001709L, 7001001710L, 8001001711L);
+    Blort.blort(1001001705L, 2001001706L, 3001001707L, 4001001708L, 5001001709L, 6001001710L, 7001001711L, 8001001712L);
+    Blort.blort(1001001706L, 2001001707L, 3001001708L, 4001001709L, 5001001710L, 6001001711L, 7001001712L, 8001001713L);
+    Blort.blort(1001001707L, 2001001708L, 3001001709L, 4001001710L, 5001001711L, 6001001712L, 7001001713L, 8001001714L);
+    Blort.blort(1001001708L, 2001001709L, 3001001710L, 4001001711L, 5001001712L, 6001001713L, 7001001714L, 8001001715L);
+    Blort.blort(1001001709L, 2001001710L, 3001001711L, 4001001712L, 5001001713L, 6001001714L, 7001001715L, 8001001716L);
+    Blort.blort(1001001710L, 2001001711L, 3001001712L, 4001001713L, 5001001714L, 6001001715L, 7001001716L, 8001001717L);
+    Blort.blort(1001001711L, 2001001712L, 3001001713L, 4001001714L, 5001001715L, 6001001716L, 7001001717L, 8001001718L);
+    Blort.blort(1001001712L, 2001001713L, 3001001714L, 4001001715L, 5001001716L, 6001001717L, 7001001718L, 8001001719L);
+    Blort.blort(1001001713L, 2001001714L, 3001001715L, 4001001716L, 5001001717L, 6001001718L, 7001001719L, 8001001720L);
+    Blort.blort(1001001714L, 2001001715L, 3001001716L, 4001001717L, 5001001718L, 6001001719L, 7001001720L, 8001001721L);
+    Blort.blort(1001001715L, 2001001716L, 3001001717L, 4001001718L, 5001001719L, 6001001720L, 7001001721L, 8001001722L);
+    Blort.blort(1001001716L, 2001001717L, 3001001718L, 4001001719L, 5001001720L, 6001001721L, 7001001722L, 8001001723L);
+    Blort.blort(1001001717L, 2001001718L, 3001001719L, 4001001720L, 5001001721L, 6001001722L, 7001001723L, 8001001724L);
+    Blort.blort(1001001718L, 2001001719L, 3001001720L, 4001001721L, 5001001722L, 6001001723L, 7001001724L, 8001001725L);
+    Blort.blort(1001001719L, 2001001720L, 3001001721L, 4001001722L, 5001001723L, 6001001724L, 7001001725L, 8001001726L);
+    Blort.blort(1001001720L, 2001001721L, 3001001722L, 4001001723L, 5001001724L, 6001001725L, 7001001726L, 8001001727L);
+    Blort.blort(1001001721L, 2001001722L, 3001001723L, 4001001724L, 5001001725L, 6001001726L, 7001001727L, 8001001728L);
+    Blort.blort(1001001722L, 2001001723L, 3001001724L, 4001001725L, 5001001726L, 6001001727L, 7001001728L, 8001001729L);
+    Blort.blort(1001001723L, 2001001724L, 3001001725L, 4001001726L, 5001001727L, 6001001728L, 7001001729L, 8001001730L);
+    Blort.blort(1001001724L, 2001001725L, 3001001726L, 4001001727L, 5001001728L, 6001001729L, 7001001730L, 8001001731L);
+    Blort.blort(1001001725L, 2001001726L, 3001001727L, 4001001728L, 5001001729L, 6001001730L, 7001001731L, 8001001732L);
+    Blort.blort(1001001726L, 2001001727L, 3001001728L, 4001001729L, 5001001730L, 6001001731L, 7001001732L, 8001001733L);
+    Blort.blort(1001001727L, 2001001728L, 3001001729L, 4001001730L, 5001001731L, 6001001732L, 7001001733L, 8001001734L);
+    Blort.blort(1001001728L, 2001001729L, 3001001730L, 4001001731L, 5001001732L, 6001001733L, 7001001734L, 8001001735L);
+    Blort.blort(1001001729L, 2001001730L, 3001001731L, 4001001732L, 5001001733L, 6001001734L, 7001001735L, 8001001736L);
+    Blort.blort(1001001730L, 2001001731L, 3001001732L, 4001001733L, 5001001734L, 6001001735L, 7001001736L, 8001001737L);
+    Blort.blort(1001001731L, 2001001732L, 3001001733L, 4001001734L, 5001001735L, 6001001736L, 7001001737L, 8001001738L);
+    Blort.blort(1001001732L, 2001001733L, 3001001734L, 4001001735L, 5001001736L, 6001001737L, 7001001738L, 8001001739L);
+    Blort.blort(1001001733L, 2001001734L, 3001001735L, 4001001736L, 5001001737L, 6001001738L, 7001001739L, 8001001740L);
+    Blort.blort(1001001734L, 2001001735L, 3001001736L, 4001001737L, 5001001738L, 6001001739L, 7001001740L, 8001001741L);
+    Blort.blort(1001001735L, 2001001736L, 3001001737L, 4001001738L, 5001001739L, 6001001740L, 7001001741L, 8001001742L);
+    Blort.blort(1001001736L, 2001001737L, 3001001738L, 4001001739L, 5001001740L, 6001001741L, 7001001742L, 8001001743L);
+    Blort.blort(1001001737L, 2001001738L, 3001001739L, 4001001740L, 5001001741L, 6001001742L, 7001001743L, 8001001744L);
+    Blort.blort(1001001738L, 2001001739L, 3001001740L, 4001001741L, 5001001742L, 6001001743L, 7001001744L, 8001001745L);
+    Blort.blort(1001001739L, 2001001740L, 3001001741L, 4001001742L, 5001001743L, 6001001744L, 7001001745L, 8001001746L);
+    Blort.blort(1001001740L, 2001001741L, 3001001742L, 4001001743L, 5001001744L, 6001001745L, 7001001746L, 8001001747L);
+    Blort.blort(1001001741L, 2001001742L, 3001001743L, 4001001744L, 5001001745L, 6001001746L, 7001001747L, 8001001748L);
+    Blort.blort(1001001742L, 2001001743L, 3001001744L, 4001001745L, 5001001746L, 6001001747L, 7001001748L, 8001001749L);
+    Blort.blort(1001001743L, 2001001744L, 3001001745L, 4001001746L, 5001001747L, 6001001748L, 7001001749L, 8001001750L);
+    Blort.blort(1001001744L, 2001001745L, 3001001746L, 4001001747L, 5001001748L, 6001001749L, 7001001750L, 8001001751L);
+    Blort.blort(1001001745L, 2001001746L, 3001001747L, 4001001748L, 5001001749L, 6001001750L, 7001001751L, 8001001752L);
+    Blort.blort(1001001746L, 2001001747L, 3001001748L, 4001001749L, 5001001750L, 6001001751L, 7001001752L, 8001001753L);
+    Blort.blort(1001001747L, 2001001748L, 3001001749L, 4001001750L, 5001001751L, 6001001752L, 7001001753L, 8001001754L);
+    Blort.blort(1001001748L, 2001001749L, 3001001750L, 4001001751L, 5001001752L, 6001001753L, 7001001754L, 8001001755L);
+    Blort.blort(1001001749L, 2001001750L, 3001001751L, 4001001752L, 5001001753L, 6001001754L, 7001001755L, 8001001756L);
+    Blort.blort(1001001750L, 2001001751L, 3001001752L, 4001001753L, 5001001754L, 6001001755L, 7001001756L, 8001001757L);
+    Blort.blort(1001001751L, 2001001752L, 3001001753L, 4001001754L, 5001001755L, 6001001756L, 7001001757L, 8001001758L);
+    Blort.blort(1001001752L, 2001001753L, 3001001754L, 4001001755L, 5001001756L, 6001001757L, 7001001758L, 8001001759L);
+    Blort.blort(1001001753L, 2001001754L, 3001001755L, 4001001756L, 5001001757L, 6001001758L, 7001001759L, 8001001760L);
+    Blort.blort(1001001754L, 2001001755L, 3001001756L, 4001001757L, 5001001758L, 6001001759L, 7001001760L, 8001001761L);
+    Blort.blort(1001001755L, 2001001756L, 3001001757L, 4001001758L, 5001001759L, 6001001760L, 7001001761L, 8001001762L);
+    Blort.blort(1001001756L, 2001001757L, 3001001758L, 4001001759L, 5001001760L, 6001001761L, 7001001762L, 8001001763L);
+    Blort.blort(1001001757L, 2001001758L, 3001001759L, 4001001760L, 5001001761L, 6001001762L, 7001001763L, 8001001764L);
+    Blort.blort(1001001758L, 2001001759L, 3001001760L, 4001001761L, 5001001762L, 6001001763L, 7001001764L, 8001001765L);
+    Blort.blort(1001001759L, 2001001760L, 3001001761L, 4001001762L, 5001001763L, 6001001764L, 7001001765L, 8001001766L);
+    Blort.blort(1001001760L, 2001001761L, 3001001762L, 4001001763L, 5001001764L, 6001001765L, 7001001766L, 8001001767L);
+    Blort.blort(1001001761L, 2001001762L, 3001001763L, 4001001764L, 5001001765L, 6001001766L, 7001001767L, 8001001768L);
+    Blort.blort(1001001762L, 2001001763L, 3001001764L, 4001001765L, 5001001766L, 6001001767L, 7001001768L, 8001001769L);
+    Blort.blort(1001001763L, 2001001764L, 3001001765L, 4001001766L, 5001001767L, 6001001768L, 7001001769L, 8001001770L);
+    Blort.blort(1001001764L, 2001001765L, 3001001766L, 4001001767L, 5001001768L, 6001001769L, 7001001770L, 8001001771L);
+    Blort.blort(1001001765L, 2001001766L, 3001001767L, 4001001768L, 5001001769L, 6001001770L, 7001001771L, 8001001772L);
+    Blort.blort(1001001766L, 2001001767L, 3001001768L, 4001001769L, 5001001770L, 6001001771L, 7001001772L, 8001001773L);
+    Blort.blort(1001001767L, 2001001768L, 3001001769L, 4001001770L, 5001001771L, 6001001772L, 7001001773L, 8001001774L);
+    Blort.blort(1001001768L, 2001001769L, 3001001770L, 4001001771L, 5001001772L, 6001001773L, 7001001774L, 8001001775L);
+    Blort.blort(1001001769L, 2001001770L, 3001001771L, 4001001772L, 5001001773L, 6001001774L, 7001001775L, 8001001776L);
+    Blort.blort(1001001770L, 2001001771L, 3001001772L, 4001001773L, 5001001774L, 6001001775L, 7001001776L, 8001001777L);
+    Blort.blort(1001001771L, 2001001772L, 3001001773L, 4001001774L, 5001001775L, 6001001776L, 7001001777L, 8001001778L);
+    Blort.blort(1001001772L, 2001001773L, 3001001774L, 4001001775L, 5001001776L, 6001001777L, 7001001778L, 8001001779L);
+    Blort.blort(1001001773L, 2001001774L, 3001001775L, 4001001776L, 5001001777L, 6001001778L, 7001001779L, 8001001780L);
+    Blort.blort(1001001774L, 2001001775L, 3001001776L, 4001001777L, 5001001778L, 6001001779L, 7001001780L, 8001001781L);
+    Blort.blort(1001001775L, 2001001776L, 3001001777L, 4001001778L, 5001001779L, 6001001780L, 7001001781L, 8001001782L);
+    Blort.blort(1001001776L, 2001001777L, 3001001778L, 4001001779L, 5001001780L, 6001001781L, 7001001782L, 8001001783L);
+    Blort.blort(1001001777L, 2001001778L, 3001001779L, 4001001780L, 5001001781L, 6001001782L, 7001001783L, 8001001784L);
+    Blort.blort(1001001778L, 2001001779L, 3001001780L, 4001001781L, 5001001782L, 6001001783L, 7001001784L, 8001001785L);
+    Blort.blort(1001001779L, 2001001780L, 3001001781L, 4001001782L, 5001001783L, 6001001784L, 7001001785L, 8001001786L);
+    Blort.blort(1001001780L, 2001001781L, 3001001782L, 4001001783L, 5001001784L, 6001001785L, 7001001786L, 8001001787L);
+    Blort.blort(1001001781L, 2001001782L, 3001001783L, 4001001784L, 5001001785L, 6001001786L, 7001001787L, 8001001788L);
+    Blort.blort(1001001782L, 2001001783L, 3001001784L, 4001001785L, 5001001786L, 6001001787L, 7001001788L, 8001001789L);
+    Blort.blort(1001001783L, 2001001784L, 3001001785L, 4001001786L, 5001001787L, 6001001788L, 7001001789L, 8001001790L);
+    Blort.blort(1001001784L, 2001001785L, 3001001786L, 4001001787L, 5001001788L, 6001001789L, 7001001790L, 8001001791L);
+    Blort.blort(1001001785L, 2001001786L, 3001001787L, 4001001788L, 5001001789L, 6001001790L, 7001001791L, 8001001792L);
+    Blort.blort(1001001786L, 2001001787L, 3001001788L, 4001001789L, 5001001790L, 6001001791L, 7001001792L, 8001001793L);
+    Blort.blort(1001001787L, 2001001788L, 3001001789L, 4001001790L, 5001001791L, 6001001792L, 7001001793L, 8001001794L);
+    Blort.blort(1001001788L, 2001001789L, 3001001790L, 4001001791L, 5001001792L, 6001001793L, 7001001794L, 8001001795L);
+    Blort.blort(1001001789L, 2001001790L, 3001001791L, 4001001792L, 5001001793L, 6001001794L, 7001001795L, 8001001796L);
+    Blort.blort(1001001790L, 2001001791L, 3001001792L, 4001001793L, 5001001794L, 6001001795L, 7001001796L, 8001001797L);
+    Blort.blort(1001001791L, 2001001792L, 3001001793L, 4001001794L, 5001001795L, 6001001796L, 7001001797L, 8001001798L);
+    Blort.blort(1001001792L, 2001001793L, 3001001794L, 4001001795L, 5001001796L, 6001001797L, 7001001798L, 8001001799L);
+    Blort.blort(1001001793L, 2001001794L, 3001001795L, 4001001796L, 5001001797L, 6001001798L, 7001001799L, 8001001800L);
+    Blort.blort(1001001794L, 2001001795L, 3001001796L, 4001001797L, 5001001798L, 6001001799L, 7001001800L, 8001001801L);
+    Blort.blort(1001001795L, 2001001796L, 3001001797L, 4001001798L, 5001001799L, 6001001800L, 7001001801L, 8001001802L);
+    Blort.blort(1001001796L, 2001001797L, 3001001798L, 4001001799L, 5001001800L, 6001001801L, 7001001802L, 8001001803L);
+    Blort.blort(1001001797L, 2001001798L, 3001001799L, 4001001800L, 5001001801L, 6001001802L, 7001001803L, 8001001804L);
+    Blort.blort(1001001798L, 2001001799L, 3001001800L, 4001001801L, 5001001802L, 6001001803L, 7001001804L, 8001001805L);
+    Blort.blort(1001001799L, 2001001800L, 3001001801L, 4001001802L, 5001001803L, 6001001804L, 7001001805L, 8001001806L);
+    Blort.blort(1001001800L, 2001001801L, 3001001802L, 4001001803L, 5001001804L, 6001001805L, 7001001806L, 8001001807L);
+        } catch (RuntimeException ex) {
+            throw ex;
+        }
+    }
+}
diff --git a/dx/tests/096-dex-giant-catch/build b/dx/tests/096-dex-giant-catch/build
new file mode 100644
index 0000000..5f29c92
--- /dev/null
+++ b/dx/tests/096-dex-giant-catch/build
@@ -0,0 +1,38 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Write out a file with a really huge catch range.
+
+awk '
+BEGIN {
+    fileName = "Zorch.java";
+    printf("public class Zorch {\n") > fileName;
+    printf("    static public void test() {\n") > fileName;
+    printf("        try {\n") > fileName;
+    for (i = 0; i <= 1800; i++) {
+        d = i + 1000000;
+        printf("    Blort.blort(100%dL, 200%dL, 300%dL, 400%dL, 500%dL, " \
+            "600%dL, 700%dL, 800%dL);\n",
+            d, d + 1, d + 2, d + 3, d + 4, d + 5, d + 6, d + 7) > fileName;
+    }
+    printf("        } catch (RuntimeException ex) {\n") > fileName;
+    printf("            throw ex;\n") > fileName;
+    printf("        }\n") > fileName;
+    printf("    }\n") > fileName;
+    printf("}\n") > fileName;
+}'
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/096-dex-giant-catch/expected.txt b/dx/tests/096-dex-giant-catch/expected.txt
new file mode 100644
index 0000000..e71992e
--- /dev/null
+++ b/dx/tests/096-dex-giant-catch/expected.txt
@@ -0,0 +1,5 @@
+  catches
+      try 0024..00010017
+      catch java.lang.RuntimeException -> 00011260
+      try 0001003b..0001125f
+      catch java.lang.RuntimeException -> 00011260
diff --git a/dx/tests/096-dex-giant-catch/info.txt b/dx/tests/096-dex-giant-catch/info.txt
new file mode 100644
index 0000000..b81ce94
--- /dev/null
+++ b/dx/tests/096-dex-giant-catch/info.txt
@@ -0,0 +1,7 @@
+This is a smoke test of dex conversion, which checks to see that
+very long catch ranges (that cover >= 65536 code units) get emitted
+appropriately.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/096-dex-giant-catch/run b/dx/tests/096-dex-giant-catch/run
new file mode 100644
index 0000000..cdd5331
--- /dev/null
+++ b/dx/tests/096-dex-giant-catch/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Zorch.test Zorch.class | grep 'try\|catch'
diff --git a/dx/tests/097-dex-branch-offset-zero/Blort.class b/dx/tests/097-dex-branch-offset-zero/Blort.class
new file mode 100644
index 0000000..14f00b9
Binary files /dev/null and b/dx/tests/097-dex-branch-offset-zero/Blort.class differ
diff --git a/dx/tests/097-dex-branch-offset-zero/Blort.java b/dx/tests/097-dex-branch-offset-zero/Blort.java
new file mode 100644
index 0000000..5033c8f
--- /dev/null
+++ b/dx/tests/097-dex-branch-offset-zero/Blort.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort
+{
+    public void test1() {
+        for (;;) /*empty*/ ;
+    }
+
+    public void test2(int x) {
+        while (x > 0) /*empty*/ ;
+    }
+
+    public void test3(int x, int y) {
+        while (x < y) /*empty*/ ;
+    }
+}
diff --git a/dx/tests/097-dex-branch-offset-zero/build b/dx/tests/097-dex-branch-offset-zero/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/097-dex-branch-offset-zero/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/097-dex-branch-offset-zero/expected.txt b/dx/tests/097-dex-branch-offset-zero/expected.txt
new file mode 100644
index 0000000..2b021a5
--- /dev/null
+++ b/dx/tests/097-dex-branch-offset-zero/expected.txt
@@ -0,0 +1 @@
+No bad branches found.
diff --git a/dx/tests/097-dex-branch-offset-zero/info.txt b/dx/tests/097-dex-branch-offset-zero/info.txt
new file mode 100644
index 0000000..4bf9502
--- /dev/null
+++ b/dx/tests/097-dex-branch-offset-zero/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to make sure that
+the only non-switch branches to offset 0 happen using the goto/32 opcode.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/097-dex-branch-offset-zero/run b/dx/tests/097-dex-branch-offset-zero/run
new file mode 100644
index 0000000..87b139a
--- /dev/null
+++ b/dx/tests/097-dex-branch-offset-zero/run
@@ -0,0 +1,26 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none --no-locals --dump-method=Blort.test'*' \
+    *.class | grep '[-+][0-9]' | grep -v 'goto/32.*+00*$' | grep '// +00*$'
+
+if [ "$?" = "1" ]; then
+    echo "No bad branches found."
+else
+    # Redo the dx command without filters, to aid with debugging.
+    dx --debug --dex --positions=none --no-locals --dump-method=Blort.test'*' \
+    *.class
+fi
diff --git a/dx/tests/098-dex-jsr-ret-throw/ViewDebug$ViewServer.class b/dx/tests/098-dex-jsr-ret-throw/ViewDebug$ViewServer.class
new file mode 100644
index 0000000..ff992ca
Binary files /dev/null and b/dx/tests/098-dex-jsr-ret-throw/ViewDebug$ViewServer.class differ
diff --git a/dx/tests/098-dex-jsr-ret-throw/expected.txt b/dx/tests/098-dex-jsr-ret-throw/expected.txt
new file mode 100644
index 0000000..a00bf1d
--- /dev/null
+++ b/dx/tests/098-dex-jsr-ret-throw/expected.txt
@@ -0,0 +1,652 @@
+reading ViewDebug$ViewServer.class...
+method run ()V
+first 00b8
+block 0000
+  pred 00b8
+  ViewDebug.java:564@0000: move-object v11:Landroid/view/ViewDebug$ViewServer; 
+  <- v0:Landroid/view/ViewDebug$ViewServer;
+  ViewDebug.java:564@0001: get-field-object(android.view.ViewDebug$ViewServer.m
+  ViewServerSocket:Ljava/net/ServerSocket; catch) . <- v11:Landroid/view/ViewDe
+  bug$ViewServer;
+  next 00bf
+block 0004
+  pred 00bf
+  ViewDebug.java:564@0004: move-object v1:"server"Ljava/net/ServerSocket; <- v1
+  1:Ljava/net/ServerSocket;
+  ViewDebug.java:564@0004: goto . <- .
+  next 0005
+block 0005
+  pred 0004
+  pred 00ad
+  ViewDebug.java:566@0005: Rop{invoke-static . <- . call throws <any>}(java.lan
+  g.Thread.currentThread:()Ljava/lang/Thread; catch) . <- .
+  next 00c0
+block 0008
+  pred 00c0
+  ViewDebug.java:566@0008: move-object v12:Landroid/view/ViewDebug$ViewServer; 
+  <- v0:Landroid/view/ViewDebug$ViewServer;
+  ViewDebug.java:566@0009: get-field-object(android.view.ViewDebug$ViewServer.m
+  Thread:Ljava/lang/Thread; catch) . <- v12:Landroid/view/ViewDebug$ViewServer;
+  next 00c1
+block 000c
+  pred 00c1
+  ViewDebug.java:566@000c: if-ne-object . <- v11:Ljava/lang/Thread; v12:Ljava/l
+  ang/Thread;
+  next 000f *
+  next 00b0
+block 000f
+  pred 000c
+  ViewDebug.java:567@000f: const-object-nothrow(null) v11:<null>=null <- .
+  ViewDebug.java:567@0010: move-object v2:"client"Ljava/net/Socket; <- v11:<nul
+  l>=null
+  ViewDebug.java:567@0010: goto . <- .
+  next 0011
+block 0011
+  pred 000f
+  ViewDebug.java:569@0011: move-object v11:Ljava/net/ServerSocket; <- v1:Ljava/
+  net/ServerSocket;
+  ViewDebug.java:569@0012: Rop{invoke-virtual . <- Ljava/net/ServerSocket; call
+   throws <any>}(java.net.ServerSocket.accept:()Ljava/net/Socket; catch java.io
+  .IOException java.lang.Object) . <- v11:Ljava/net/ServerSocket;
+  next 00b1
+  next 00b2
+  next 00c2 *
+block 0015
+  pred 00c2
+  ViewDebug.java:569@0015: move-object v2:"client"Ljava/net/Socket; <- v11:Ljav
+  a/net/Socket;
+  ViewDebug.java:571@0016: const-object-nothrow(null) v11:<null>=null <- .
+  ViewDebug.java:571@0017: move-object v3:"in"Ljava/io/BufferedReader; <- v11:<
+  null>=null
+  ViewDebug.java:571@0017: goto . <- .
+  next 0018
+block 0018
+  pred 0015
+  ViewDebug.java:573@0018: new-instance(java.io.BufferedReader catch java.lang.
+  Object) . <- .
+  next 00b3
+  next 00c3 *
+block 001b
+  pred 00c3
+  ViewDebug.java:573@001b: move-object v16:N0018Ljava/io/BufferedReader; <- v11
+  :N0018Ljava/io/BufferedReader;
+  ViewDebug.java:573@001b: move-object v11:N0018Ljava/io/BufferedReader; <- v16
+  :N0018Ljava/io/BufferedReader;
+  ViewDebug.java:573@001b: move-object v12:N0018Ljava/io/BufferedReader; <- v16
+  :N0018Ljava/io/BufferedReader;
+  ViewDebug.java:573@001c: new-instance(java.io.InputStreamReader catch java.la
+  ng.Object) . <- .
+  next 00b3
+  next 00c4 *
+block 001f
+  pred 00c4
+  ViewDebug.java:573@001f: move-object v16:N001cLjava/io/InputStreamReader; <- 
+  v13:N001cLjava/io/InputStreamReader;
+  ViewDebug.java:573@001f: move-object v13:N001cLjava/io/InputStreamReader; <- 
+  v16:N001cLjava/io/InputStreamReader;
+  ViewDebug.java:573@001f: move-object v14:N001cLjava/io/InputStreamReader; <- 
+  v16:N001cLjava/io/InputStreamReader;
+  ViewDebug.java:573@0020: move-object v15:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:573@0021: Rop{invoke-virtual . <- Ljava/net/Socket; call throw
+  s <any>}(java.net.Socket.getInputStream:()Ljava/io/InputStream; catch java.la
+  ng.Object) . <- v15:Ljava/net/Socket;
+  next 00b3
+  next 00c5 *
+block 0024
+  pred 00c5
+  ViewDebug.java:573@0024: Rop{invoke-direct . <- Ljava/io/InputStreamReader; L
+  java/io/InputStream; call throws <any>}(java.io.InputStreamReader.<init>:(Lja
+  va/io/InputStream;)V catch java.lang.Object) . <- v14:N001cLjava/io/InputStre
+  amReader; v15:Ljava/io/InputStream;
+  next 00b3
+  next 0027 *
+block 0027
+  pred 0024
+  ViewDebug.java:573@0027: Rop{invoke-direct . <- Ljava/io/BufferedReader; Ljav
+  a/io/Reader; call throws <any>}(java.io.BufferedReader.<init>:(Ljava/io/Reade
+  r;)V catch java.lang.Object) . <- v12:N0018Ljava/io/BufferedReader; v13:Ljava
+  /io/InputStreamReader;
+  next 00b3
+  next 002a *
+block 002a
+  pred 0027
+  ViewDebug.java:573@002a: move-object v3:"in"Ljava/io/BufferedReader; <- v11:L
+  java/io/BufferedReader;
+  ViewDebug.java:574@002b: move-object v11:Ljava/io/BufferedReader; <- v3:Ljava
+  /io/BufferedReader;
+  ViewDebug.java:574@002c: Rop{invoke-virtual . <- Ljava/io/BufferedReader; cal
+  l throws <any>}(java.io.BufferedReader.readLine:()Ljava/lang/String; catch ja
+  va.lang.Object) . <- v11:Ljava/io/BufferedReader;
+  next 00b3
+  next 00c6 *
+block 002f
+  pred 00c6
+  ViewDebug.java:574@002f: move-object v4:"command"Ljava/lang/String; <- v11:Lj
+  ava/lang/String;
+  ViewDebug.java:576@0031: const-object("DUMP" catch java.lang.Object) . <- .
+  next 00b3
+  next 00c7 *
+block 0033
+  pred 00c7
+  ViewDebug.java:576@0033: move-object v12:Ljava/lang/String; <- v4:Ljava/lang/
+  String;
+  ViewDebug.java:576@0035: Rop{invoke-virtual . <- Ljava/lang/String; Ljava/lan
+  g/String; call throws <any>}(java.lang.String.equalsIgnoreCase:(Ljava/lang/St
+  ring;)Z catch java.lang.Object) . <- v11:Ljava/lang/String;="DUMP" v12:Ljava/
+  lang/String;
+  next 00b3
+  next 00c8 *
+block 0038
+  pred 00c8
+  ViewDebug.java:576@0038: if-eqz-int . <- v11:I
+  next 003b *
+  next 0042
+block 003b
+  pred 0038
+  ViewDebug.java:577@003b: move-object v11:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:577@003c: Rop{invoke-static . <- Ljava/net/Socket; call throws
+   <any>}(android.view.ViewDebug$ViewServer.dump:(Ljava/net/Socket;)V catch jav
+  a.lang.Object) . <- v11:Ljava/net/Socket;
+  next 00b3
+  next 003f *
+block 003f
+  pred 003b
+  ViewDebug.java:577@003f: goto . <- .
+  next 005f
+block 0042
+  pred 0038
+  ViewDebug.java:579@0042: move-object v11:Ljava/lang/String; <- v4:Ljava/lang/
+  String;
+  ViewDebug.java:579@0044: const-object(" " catch java.lang.Object) . <- .
+  next 00b3
+  next 00c9 *
+block 0046
+  pred 00c9
+  ViewDebug.java:579@0046: Rop{invoke-virtual . <- Ljava/lang/String; Ljava/lan
+  g/String; call throws <any>}(java.lang.String.split:(Ljava/lang/String;)[Ljav
+  a/lang/String; catch java.lang.Object) . <- v11:Ljava/lang/String; v12:Ljava/
+  lang/String;=" "
+  next 00b3
+  next 00ca *
+block 0049
+  pred 00ca
+  ViewDebug.java:579@0049: move-object v5:"params"[Ljava/lang/String; <- v11:[L
+  java/lang/String;
+  ViewDebug.java:580@004b: const-object("CAPTURE" catch java.lang.Object) . <- 
+  .
+  next 00b3
+  next 00cb *
+block 004d
+  pred 00cb
+  ViewDebug.java:580@004d: move-object v12:[Ljava/lang/String; <- v5:[Ljava/lan
+  g/String;
+  ViewDebug.java:580@004f: const-int(0) v13:I=0 <- .
+  ViewDebug.java:580@0050: aget-object(catch java.lang.Object) . <- v12:[Ljava/
+  lang/String; v13:I=0
+  next 00b3
+  next 00cc *
+block 0051
+  pred 00cc
+  ViewDebug.java:580@0051: Rop{invoke-virtual . <- Ljava/lang/String; Ljava/lan
+  g/String; call throws <any>}(java.lang.String.equalsIgnoreCase:(Ljava/lang/St
+  ring;)Z catch java.lang.Object) . <- v11:Ljava/lang/String;="CAPTURE" v12:Lja
+  va/lang/String;
+  next 00b3
+  next 00cd *
+block 0054
+  pred 00cd
+  ViewDebug.java:580@0054: if-eqz-int . <- v11:I
+  next 0057 *
+  next 005f
+block 0057
+  pred 0054
+  ViewDebug.java:581@0057: move-object v11:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:581@0058: move-object v12:[Ljava/lang/String; <- v5:[Ljava/lan
+  g/String;
+  ViewDebug.java:581@005a: const-int(1) v13:I=1 <- .
+  ViewDebug.java:581@005b: aget-object(catch java.lang.Object) . <- v12:[Ljava/
+  lang/String; v13:I=1
+  next 00b3
+  next 00ce *
+block 005c
+  pred 00ce
+  ViewDebug.java:581@005c: Rop{invoke-static . <- Ljava/net/Socket; Ljava/lang/
+  String; call throws <any>}(android.view.ViewDebug$ViewServer.capture:(Ljava/n
+  et/Socket;Ljava/lang/String;)V catch java.lang.Object) . <- v11:Ljava/net/Soc
+  ket; v12:Ljava/lang/String;
+  next 00b3
+  next 005f *
+block 005f
+  pred 003f
+  pred 0054
+  pred 005c
+  @????: goto . <- .
+  next 00e1
+block 0062
+  pred 00e3
+  ViewDebug.java:589@0062: goto . <- .
+  next 0079
+block 0065
+  pred 00b3
+  ViewDebug.java:586@0065: move-object v6:Ljava/lang/Class;=java.lang.Object <-
+   v11:Ljava/lang/Class;=java.lang.Object
+  ViewDebug.java:586@0065: goto . <- .
+  next 0067
+block 0067
+  pred 0065
+  @????: goto . <- .
+  next 00de
+block 006a
+  pred 00e0
+  ViewDebug.java:586@006a: move-object v11:Ljava/lang/Class;=java.lang.Object <
+  - v6:Ljava/lang/Class;=java.lang.Object
+  ViewDebug.java:586@006c: throw(catch java.io.IOException java.lang.Object) . 
+  <- v11:Ljava/lang/Class;=java.lang.Object
+  next 00b1
+  next 00b2
+block 0079
+  pred 0062
+  @????: goto . <- .
+  next 00e4
+block 007c
+  pred 00e6
+  ViewDebug.java:600@007c: goto . <- .
+  next 00ad
+block 007f
+  pred 00b1
+  ViewDebug.java:590@007f: move-object v3:"e"Ljava/io/IOException; <- v11:Ljava
+  /lang/Class;=java.io.IOException
+  ViewDebug.java:591@0080: const-object("ViewServer" catch java.lang.Object) . 
+  <- .
+  next 00b2
+  next 00cf *
+block 0082
+  pred 00cf
+  ViewDebug.java:591@0082: const-object("Connection error: " catch java.lang.Ob
+  ject) . <- .
+  next 00b2
+  next 00d0 *
+block 0084
+  pred 00d0
+  ViewDebug.java:591@0084: move-object v13:Ljava/io/IOException; <- v3:Ljava/io
+  /IOException;
+  ViewDebug.java:591@0085: Rop{invoke-static . <- Ljava/lang/String; Ljava/lang
+  /String; Ljava/lang/Throwable; call throws <any>}(android.util.Log.w:(Ljava/l
+  ang/String;Ljava/lang/String;Ljava/lang/Throwable;)I catch java.lang.Object) 
+  . <- v11:Ljava/lang/String;="ViewServer" v12:Ljava/lang/String;="Connection e
+  rror: " v13:Ljava/io/IOException;
+  next 00b2
+  next 00d1 *
+block 0088
+  pred 00d1
+  @????: goto . <- .
+  next 0089
+block 0089
+  pred 0088
+  @????: goto . <- .
+  next 00d8
+block 008c
+  pred 00da
+  ViewDebug.java:600@008c: goto . <- .
+  next 00ad
+block 008f
+  pred 00b2
+  ViewDebug.java:593@008f: move-object v8:Ljava/lang/Class;=java.lang.Object <-
+   v11:Ljava/lang/Class;=java.lang.Object
+  ViewDebug.java:593@008f: goto . <- .
+  next 0091
+block 0091
+  pred 008f
+  @????: goto . <- .
+  next 00d2
+block 0094
+  pred 00d4
+  ViewDebug.java:593@0094: move-object v11:Ljava/lang/Class;=java.lang.Object <
+  - v8:Ljava/lang/Class;=java.lang.Object
+  ViewDebug.java:593@0096: throw(catch) . <- v11:Ljava/lang/Class;=java.lang.Ob
+  ject
+  returns
+block 00ad
+  pred 007c
+  pred 008c
+  ViewDebug.java:601@00ad: goto . <- .
+  next 0005
+block 00b0
+  pred 000c
+  ViewDebug.java:602@00b0: goto . <- .
+  next 00b9
+block 00b1
+  pred 0011
+  pred 006a
+  pred 00df
+  pred 00e2
+  ViewDebug.java:590@007f: Rop{move-exception Ljava/io/IOException; <- . flows}
+   v11:Ljava/io/IOException; <- .
+  ViewDebug.java:590@007f: goto . <- .
+  next 007f
+block 00b2
+  pred 0011
+  pred 006a
+  pred 007f
+  pred 0082
+  pred 0084
+  pred 00df
+  pred 00e2
+  ViewDebug.java:593@008f: Rop{move-exception Ljava/lang/Object; <- . flows} v1
+  1:Ljava/lang/Object; <- .
+  ViewDebug.java:593@008f: goto . <- .
+  next 008f
+block 00b3
+  pred 0018
+  pred 001b
+  pred 001f
+  pred 0024
+  pred 0027
+  pred 002a
+  pred 002f
+  pred 0033
+  pred 003b
+  pred 0042
+  pred 0046
+  pred 0049
+  pred 004d
+  pred 0051
+  pred 0057
+  pred 005c
+  ViewDebug.java:586@0065: Rop{move-exception Ljava/lang/Object; <- . flows} v1
+  1:Ljava/lang/Object; <- .
+  ViewDebug.java:586@0065: goto . <- .
+  next 0065
+block 00b8
+  ViewDebug.java:564@0000: move-param-object(0) v0:"this"Landroid/view/ViewDebu
+  g$ViewServer; <- .
+  ViewDebug.java:564@0000: goto . <- .
+  next 0000
+block 00b9
+  pred 00b0
+  ViewDebug.java:602@00b0: return-void . <- .
+  returns
+block 00bf
+  pred 0000
+  ViewDebug.java:564@0001: Rop{move-result-pseudo Ljava/net/ServerSocket; <- . 
+  flows} v11:Ljava/net/ServerSocket; <- .
+  ViewDebug.java:564@0001: goto . <- .
+  next 0004
+block 00c0
+  pred 0005
+  ViewDebug.java:566@0005: Rop{move-result Ljava/lang/Thread; <- . flows} v11:L
+  java/lang/Thread; <- .
+  ViewDebug.java:566@0005: goto . <- .
+  next 0008
+block 00c1
+  pred 0008
+  ViewDebug.java:566@0009: Rop{move-result-pseudo Ljava/lang/Thread; <- . flows
+  } v12:Ljava/lang/Thread; <- .
+  ViewDebug.java:566@0009: goto . <- .
+  next 000c
+block 00c2
+  pred 0011
+  ViewDebug.java:569@0012: Rop{move-result Ljava/net/Socket; <- . flows} v11:Lj
+  ava/net/Socket; <- .
+  ViewDebug.java:569@0012: goto . <- .
+  next 0015
+block 00c3
+  pred 0018
+  ViewDebug.java:573@0018: Rop{move-result-pseudo N0018Ljava/io/BufferedReader;
+   <- . flows} v11:N0018Ljava/io/BufferedReader; <- .
+  ViewDebug.java:573@0018: goto . <- .
+  next 001b
+block 00c4
+  pred 001b
+  ViewDebug.java:573@001c: Rop{move-result-pseudo N001cLjava/io/InputStreamRead
+  er; <- . flows} v13:N001cLjava/io/InputStreamReader; <- .
+  ViewDebug.java:573@001c: goto . <- .
+  next 001f
+block 00c5
+  pred 001f
+  ViewDebug.java:573@0021: Rop{move-result Ljava/io/InputStream; <- . flows} v1
+  5:Ljava/io/InputStream; <- .
+  ViewDebug.java:573@0021: goto . <- .
+  next 0024
+block 00c6
+  pred 002a
+  ViewDebug.java:574@002c: Rop{move-result Ljava/lang/String; <- . flows} v11:L
+  java/lang/String; <- .
+  ViewDebug.java:574@002c: goto . <- .
+  next 002f
+block 00c7
+  pred 002f
+  ViewDebug.java:576@0031: Rop{move-result-pseudo Ljava/lang/String; <- . flows
+  } v11:Ljava/lang/String;="DUMP" <- .
+  ViewDebug.java:576@0031: goto . <- .
+  next 0033
+block 00c8
+  pred 0033
+  ViewDebug.java:576@0035: Rop{move-result Z <- . flows} v11:Z <- .
+  ViewDebug.java:576@0035: goto . <- .
+  next 0038
+block 00c9
+  pred 0042
+  ViewDebug.java:579@0044: Rop{move-result-pseudo Ljava/lang/String; <- . flows
+  } v12:Ljava/lang/String;=" " <- .
+  ViewDebug.java:579@0044: goto . <- .
+  next 0046
+block 00ca
+  pred 0046
+  ViewDebug.java:579@0046: Rop{move-result [Ljava/lang/String; <- . flows} v11:
+  [Ljava/lang/String; <- .
+  ViewDebug.java:579@0046: goto . <- .
+  next 0049
+block 00cb
+  pred 0049
+  ViewDebug.java:580@004b: Rop{move-result-pseudo Ljava/lang/String; <- . flows
+  } v11:Ljava/lang/String;="CAPTURE" <- .
+  ViewDebug.java:580@004b: goto . <- .
+  next 004d
+block 00cc
+  pred 004d
+  ViewDebug.java:580@0050: Rop{move-result-pseudo Ljava/lang/String; <- . flows
+  } v12:Ljava/lang/String; <- .
+  ViewDebug.java:580@0050: goto . <- .
+  next 0051
+block 00cd
+  pred 0051
+  ViewDebug.java:580@0051: Rop{move-result Z <- . flows} v11:Z <- .
+  ViewDebug.java:580@0051: goto . <- .
+  next 0054
+block 00ce
+  pred 0057
+  ViewDebug.java:581@005b: Rop{move-result-pseudo Ljava/lang/String; <- . flows
+  } v12:Ljava/lang/String; <- .
+  ViewDebug.java:581@005b: goto . <- .
+  next 005c
+block 00cf
+  pred 007f
+  ViewDebug.java:591@0080: Rop{move-result-pseudo Ljava/lang/String; <- . flows
+  } v11:Ljava/lang/String;="ViewServer" <- .
+  ViewDebug.java:591@0080: goto . <- .
+  next 0082
+block 00d0
+  pred 0082
+  ViewDebug.java:591@0082: Rop{move-result-pseudo Ljava/lang/String; <- . flows
+  } v12:Ljava/lang/String;="Connection error: " <- .
+  ViewDebug.java:591@0082: goto . <- .
+  next 0084
+block 00d1
+  pred 0084
+  ViewDebug.java:591@0085: Rop{move-result I <- . flows} v11:I <- .
+  ViewDebug.java:591@0085: goto . <- .
+  next 0088
+block 00d2
+  pred 0091
+  ViewDebug.java:593@0099: move-object v11:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:593@009a: if-eqz-object . <- v11:Ljava/net/Socket;
+  next 00d3 *
+  next 00d4
+block 00d3
+  pred 00d2
+  ViewDebug.java:595@009d: move-object v11:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:595@009e: Rop{invoke-virtual . <- Ljava/net/Socket; call throw
+  s <any>}(java.net.Socket.close:()V catch java.io.IOException) . <- v11:Ljava/
+  net/Socket;
+  next 00d5
+  next 00d6 *
+block 00d4
+  pred 00d2
+  pred 00d6
+  pred 00d7
+  @????: goto . <- .
+  next 0094
+block 00d5
+  pred 00d3
+  ViewDebug.java:596@00a4: Rop{move-exception Ljava/io/IOException; <- . flows}
+   v11:Ljava/io/IOException; <- .
+  ViewDebug.java:596@00a4: goto . <- .
+  next 00d7
+block 00d6
+  pred 00d3
+  ViewDebug.java:598@00a1: goto . <- .
+  next 00d4
+block 00d7
+  pred 00d5
+  ViewDebug.java:596@00a4: move-object v10:"e"Ljava/io/IOException; <- v11:Ljav
+  a/lang/Class;=java.io.IOException
+  ViewDebug.java:597@00a6: move-object v11:Ljava/io/IOException; <- v10:Ljava/i
+  o/IOException;
+  ViewDebug.java:597@00a8: Rop{invoke-virtual . <- Ljava/io/IOException; call t
+  hrows <any>}(java.io.IOException.printStackTrace:()V catch) . <- v11:Ljava/io
+  /IOException;
+  next 00d4
+block 00d8
+  pred 0089
+  ViewDebug.java:593@0099: move-object v11:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:593@009a: if-eqz-object . <- v11:Ljava/net/Socket;
+  next 00d9 *
+  next 00da
+block 00d9
+  pred 00d8
+  ViewDebug.java:595@009d: move-object v11:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:595@009e: Rop{invoke-virtual . <- Ljava/net/Socket; call throw
+  s <any>}(java.net.Socket.close:()V catch java.io.IOException) . <- v11:Ljava/
+  net/Socket;
+  next 00db
+  next 00dc *
+block 00da
+  pred 00d8
+  pred 00dc
+  pred 00dd
+  @????: goto . <- .
+  next 008c
+block 00db
+  pred 00d9
+  ViewDebug.java:596@00a4: Rop{move-exception Ljava/io/IOException; <- . flows}
+   v11:Ljava/io/IOException; <- .
+  ViewDebug.java:596@00a4: goto . <- .
+  next 00dd
+block 00dc
+  pred 00d9
+  ViewDebug.java:598@00a1: goto . <- .
+  next 00da
+block 00dd
+  pred 00db
+  ViewDebug.java:596@00a4: move-object v10:"e"Ljava/io/IOException; <- v11:Ljav
+  a/lang/Class;=java.io.IOException
+  ViewDebug.java:597@00a6: move-object v11:Ljava/io/IOException; <- v10:Ljava/i
+  o/IOException;
+  ViewDebug.java:597@00a8: Rop{invoke-virtual . <- Ljava/io/IOException; call t
+  hrows <any>}(java.io.IOException.printStackTrace:()V catch) . <- v11:Ljava/io
+  /IOException;
+  next 00da
+block 00de
+  pred 0067
+  ViewDebug.java:586@006f: move-object v11:Ljava/io/BufferedReader; <- v3:Ljava
+  /io/BufferedReader;
+  ViewDebug.java:586@0070: if-eqz-object . <- v11:Ljava/io/BufferedReader;
+  next 00df *
+  next 00e0
+block 00df
+  pred 00de
+  ViewDebug.java:587@0073: move-object v11:Ljava/io/BufferedReader; <- v3:Ljava
+  /io/BufferedReader;
+  ViewDebug.java:587@0074: Rop{invoke-virtual . <- Ljava/io/BufferedReader; cal
+  l throws <any>}(java.io.BufferedReader.close:()V catch java.io.IOException ja
+  va.lang.Object) . <- v11:Ljava/io/BufferedReader;
+  next 00b1
+  next 00b2
+  next 00e0 *
+block 00e0
+  pred 00de
+  pred 00df
+  @????: goto . <- .
+  next 006a
+block 00e1
+  pred 005f
+  ViewDebug.java:586@006f: move-object v11:Ljava/io/BufferedReader; <- v3:Ljava
+  /io/BufferedReader;
+  ViewDebug.java:586@0070: if-eqz-object . <- v11:Ljava/io/BufferedReader;
+  next 00e2 *
+  next 00e3
+block 00e2
+  pred 00e1
+  ViewDebug.java:587@0073: move-object v11:Ljava/io/BufferedReader; <- v3:Ljava
+  /io/BufferedReader;
+  ViewDebug.java:587@0074: Rop{invoke-virtual . <- Ljava/io/BufferedReader; cal
+  l throws <any>}(java.io.BufferedReader.close:()V catch java.io.IOException ja
+  va.lang.Object) . <- v11:Ljava/io/BufferedReader;
+  next 00b1
+  next 00b2
+  next 00e3 *
+block 00e3
+  pred 00e1
+  pred 00e2
+  @????: goto . <- .
+  next 0062
+block 00e4
+  pred 0079
+  ViewDebug.java:593@0099: move-object v11:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:593@009a: if-eqz-object . <- v11:Ljava/net/Socket;
+  next 00e5 *
+  next 00e6
+block 00e5
+  pred 00e4
+  ViewDebug.java:595@009d: move-object v11:Ljava/net/Socket; <- v2:Ljava/net/So
+  cket;
+  ViewDebug.java:595@009e: Rop{invoke-virtual . <- Ljava/net/Socket; call throw
+  s <any>}(java.net.Socket.close:()V catch java.io.IOException) . <- v11:Ljava/
+  net/Socket;
+  next 00e7
+  next 00e8 *
+block 00e6
+  pred 00e4
+  pred 00e8
+  pred 00e9
+  @????: goto . <- .
+  next 007c
+block 00e7
+  pred 00e5
+  ViewDebug.java:596@00a4: Rop{move-exception Ljava/io/IOException; <- . flows}
+   v11:Ljava/io/IOException; <- .
+  ViewDebug.java:596@00a4: goto . <- .
+  next 00e9
+block 00e8
+  pred 00e5
+  ViewDebug.java:598@00a1: goto . <- .
+  next 00e6
+block 00e9
+  pred 00e7
+  ViewDebug.java:596@00a4: move-object v10:"e"Ljava/io/IOException; <- v11:Ljav
+  a/lang/Class;=java.io.IOException
+  ViewDebug.java:597@00a6: move-object v11:Ljava/io/IOException; <- v10:Ljava/i
+  o/IOException;
+  ViewDebug.java:597@00a8: Rop{invoke-virtual . <- Ljava/io/IOException; call t
+  hrows <any>}(java.io.IOException.printStackTrace:()V catch) . <- v11:Ljava/io
+  /IOException;
+  next 00e6
diff --git a/dx/tests/098-dex-jsr-ret-throw/info.txt b/dx/tests/098-dex-jsr-ret-throw/info.txt
new file mode 100644
index 0000000..9dcd39d
--- /dev/null
+++ b/dx/tests/098-dex-jsr-ret-throw/info.txt
@@ -0,0 +1,4 @@
+The enclosed class file was generated with javac version 1.5.0_13-b05. 
+It contains an example of a subroutine being exited by a "throw" instruction in 
+such a way that it caused the frame merge and subroutine inliner
+algorithms to not converge. This was bug #1137450.
diff --git a/dx/tests/098-dex-jsr-ret-throw/run b/dx/tests/098-dex-jsr-ret-throw/run
new file mode 100755
index 0000000..dfc7b89
--- /dev/null
+++ b/dx/tests/098-dex-jsr-ret-throw/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dump --method=run --rop-blocks 'ViewDebug$ViewServer.class'
diff --git a/dx/tests/099-dex-core-library-error/Blort.java b/dx/tests/099-dex-core-library-error/Blort.java
new file mode 100644
index 0000000..6f619d7
--- /dev/null
+++ b/dx/tests/099-dex-core-library-error/Blort.java
@@ -0,0 +1,5 @@
+package java.blort;
+
+public class Blort {
+    // This space intentionally left blank.
+}
diff --git a/dx/tests/099-dex-core-library-error/Muffins.java b/dx/tests/099-dex-core-library-error/Muffins.java
new file mode 100644
index 0000000..7ee4c4c
--- /dev/null
+++ b/dx/tests/099-dex-core-library-error/Muffins.java
@@ -0,0 +1,5 @@
+package javax.net;
+
+public class Muffins {
+    // This space intentionally left blank.
+}
diff --git a/dx/tests/099-dex-core-library-error/Zorch.java b/dx/tests/099-dex-core-library-error/Zorch.java
new file mode 100644
index 0000000..57c311f
--- /dev/null
+++ b/dx/tests/099-dex-core-library-error/Zorch.java
@@ -0,0 +1,5 @@
+package javax.zorch;
+
+public class Zorch {
+    // This space intentionally left blank.
+}
diff --git a/dx/tests/099-dex-core-library-error/build b/dx/tests/099-dex-core-library-error/build
new file mode 100644
index 0000000..fefc827
--- /dev/null
+++ b/dx/tests/099-dex-core-library-error/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/099-dex-core-library-error/expected.txt b/dx/tests/099-dex-core-library-error/expected.txt
new file mode 100644
index 0000000..d9c405b
--- /dev/null
+++ b/dx/tests/099-dex-core-library-error/expected.txt
@@ -0,0 +1,5 @@
+exit code: 1
+exit code: 1
+exit code: 0
+Found zorch.dex
+Done
diff --git a/dx/tests/099-dex-core-library-error/info.txt b/dx/tests/099-dex-core-library-error/info.txt
new file mode 100644
index 0000000..3a62267
--- /dev/null
+++ b/dx/tests/099-dex-core-library-error/info.txt
@@ -0,0 +1,3 @@
+This tests that attempts to define core classes fail and that
+an attempt to define a legal javax.* class succeeds. (Only *some*
+javax packages are considered to be off-limits.)
diff --git a/dx/tests/099-dex-core-library-error/java/blort/Blort.class b/dx/tests/099-dex-core-library-error/java/blort/Blort.class
new file mode 100644
index 0000000..0206e69
Binary files /dev/null and b/dx/tests/099-dex-core-library-error/java/blort/Blort.class differ
diff --git a/dx/tests/099-dex-core-library-error/javax/net/Muffins.class b/dx/tests/099-dex-core-library-error/javax/net/Muffins.class
new file mode 100644
index 0000000..c05fa05
Binary files /dev/null and b/dx/tests/099-dex-core-library-error/javax/net/Muffins.class differ
diff --git a/dx/tests/099-dex-core-library-error/javax/zorch/Zorch.class b/dx/tests/099-dex-core-library-error/javax/zorch/Zorch.class
new file mode 100644
index 0000000..ce30b5b
Binary files /dev/null and b/dx/tests/099-dex-core-library-error/javax/zorch/Zorch.class differ
diff --git a/dx/tests/099-dex-core-library-error/run b/dx/tests/099-dex-core-library-error/run
new file mode 100644
index 0000000..6cd347a
--- /dev/null
+++ b/dx/tests/099-dex-core-library-error/run
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --output=blort.dex java/blort/Blort.class >/dev/null 2>&1
+echo "exit code: $?"
+if [ -r blort.dex ]; then
+    echo Found blort.dex
+fi
+
+dx --debug --dex --output=muffins.dex javax/net/Muffins.class >/dev/null 2>&1
+echo "exit code: $?"
+if [ -r muffins.dex ]; then
+    echo Found muffins.dex
+fi
+
+dx --debug --dex --output=zorch.dex javax/zorch/Zorch.class >/dev/null 2>&1
+echo "exit code: $?"
+if [ -r zorch.dex ]; then
+    echo Found zorch.dex
+fi
+
+echo Done
diff --git a/dx/tests/100-local-mismatch/Blort1.class b/dx/tests/100-local-mismatch/Blort1.class
new file mode 100644
index 0000000..48aabf9
Binary files /dev/null and b/dx/tests/100-local-mismatch/Blort1.class differ
diff --git a/dx/tests/100-local-mismatch/Blort1.j b/dx/tests/100-local-mismatch/Blort1.j
new file mode 100644
index 0000000..327557e
--- /dev/null
+++ b/dx/tests/100-local-mismatch/Blort1.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class Blort1
+.super java/lang/Object
+
+.method public static basicTypeMismatch1()V
+    .limit locals 1
+    .limit stack 1
+    .var 0 is x Ljava/lang/Object; from start to end
+    bipush 1
+    istore_0
+start:
+    nop
+end:
+    return
+.end method
diff --git a/dx/tests/100-local-mismatch/Blort2.class b/dx/tests/100-local-mismatch/Blort2.class
new file mode 100644
index 0000000..38cb0c3
Binary files /dev/null and b/dx/tests/100-local-mismatch/Blort2.class differ
diff --git a/dx/tests/100-local-mismatch/Blort2.j b/dx/tests/100-local-mismatch/Blort2.j
new file mode 100644
index 0000000..6fc79cc
--- /dev/null
+++ b/dx/tests/100-local-mismatch/Blort2.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class Blort2
+.super java/lang/Object
+
+.method public static basicTypeMismatch2()V
+    .limit locals 1
+    .limit stack 1
+    .var 0 is x I from start to end
+    aconst_null
+    astore_0
+start:
+    nop
+end:
+    return
+.end method
diff --git a/dx/tests/100-local-mismatch/Blort3.class b/dx/tests/100-local-mismatch/Blort3.class
new file mode 100644
index 0000000..7a70f52
Binary files /dev/null and b/dx/tests/100-local-mismatch/Blort3.class differ
diff --git a/dx/tests/100-local-mismatch/Blort3.j b/dx/tests/100-local-mismatch/Blort3.j
new file mode 100644
index 0000000..0fdcb89
--- /dev/null
+++ b/dx/tests/100-local-mismatch/Blort3.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class Blort3
+.super java/lang/Object
+
+.method public static arrayMismatch1()V
+    .limit locals 1
+    .limit stack 1
+    .var 0 is x [B from start to end
+    bipush 1
+    istore_0
+start:
+    nop
+end:
+    return
+.end method
diff --git a/dx/tests/100-local-mismatch/Blort4.class b/dx/tests/100-local-mismatch/Blort4.class
new file mode 100644
index 0000000..85750e1
Binary files /dev/null and b/dx/tests/100-local-mismatch/Blort4.class differ
diff --git a/dx/tests/100-local-mismatch/Blort4.j b/dx/tests/100-local-mismatch/Blort4.j
new file mode 100644
index 0000000..1ef207d
--- /dev/null
+++ b/dx/tests/100-local-mismatch/Blort4.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class Blort4
+.super java/lang/Object
+
+.method public static arrayMismatch2()V
+    .limit locals 1
+    .limit stack 1
+    .var 0 is x [Ljava/lang/Object; from start to end
+    ldc "hello"
+    astore_0
+start:
+    nop
+end:
+    return
+.end method
diff --git a/dx/tests/100-local-mismatch/build b/dx/tests/100-local-mismatch/build
new file mode 100644
index 0000000..0afa305
--- /dev/null
+++ b/dx/tests/100-local-mismatch/build
@@ -0,0 +1,22 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+for i in Blort*.j; do
+  o=${i%.j}.class
+  if [[ ! -f $o ]]; then
+    jasmin -d . $i >/dev/null
+  fi
+done
diff --git a/dx/tests/100-local-mismatch/expected.txt b/dx/tests/100-local-mismatch/expected.txt
new file mode 100644
index 0000000..0f77225
--- /dev/null
+++ b/dx/tests/100-local-mismatch/expected.txt
@@ -0,0 +1,9 @@
+TEST 1
+local variable type mismatch: attempt to set or access a value of type int using a local variable of type java.lang.Object. This is symptomatic of .class transformation tools that ignore local variable information.
+TEST 2
+local variable type mismatch: attempt to set or access a value of type java.lang.Object using a local variable of type int. This is symptomatic of .class transformation tools that ignore local variable information.
+TEST 3
+local variable type mismatch: attempt to set or access a value of type int using a local variable of type byte[]. This is symptomatic of .class transformation tools that ignore local variable information.
+TEST 4
+local variable type mismatch: attempt to set or access a value of type java.lang.String using a local variable of type java.lang.Object[]. This is symptomatic of .class transformation tools that ignore local variable information.
+DONE
diff --git a/dx/tests/100-local-mismatch/info.txt b/dx/tests/100-local-mismatch/info.txt
new file mode 100644
index 0000000..89b6e10
--- /dev/null
+++ b/dx/tests/100-local-mismatch/info.txt
@@ -0,0 +1,3 @@
+This is a smoke test that makes sure that dx complains when a local
+variable table entry fundamentally disagrees with an instruction that
+accesses that local.
diff --git a/dx/tests/100-local-mismatch/run b/dx/tests/100-local-mismatch/run
new file mode 100644
index 0000000..a2281e1
--- /dev/null
+++ b/dx/tests/100-local-mismatch/run
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+echo "TEST 1"
+dx --dex Blort1.class 2>&1 | grep mismatch
+
+echo "TEST 2"
+dx --dex Blort2.class 2>&1 | grep mismatch
+
+echo "TEST 3"
+dx --dex Blort3.class 2>&1 | grep mismatch
+
+echo "TEST 4"
+dx --dex Blort4.class 2>&1 | grep mismatch
+
+echo "DONE"
diff --git a/dx/tests/101-verify-wide-math/build b/dx/tests/101-verify-wide-math/build
new file mode 100644
index 0000000..1004884
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/build
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+set -e
+
+function oneop()
+{
+  jasmin -d . op_$1.j
+}
+
+oneop d2f
+oneop d2i
+oneop d2l
+oneop dadd
+oneop dcmpg
+oneop dcmpl
+oneop ddiv
+oneop dmul
+oneop dneg
+oneop drem
+oneop dsub
+oneop l2d
+oneop l2f
+oneop l2i
+oneop ladd
+oneop land
+oneop lcmp
+oneop ldiv
+oneop lmul
+oneop lneg
+oneop lor
+oneop lrem
+oneop lshl
+oneop lshr
+oneop lsub
+oneop lushr
+oneop lxor
diff --git a/dx/tests/101-verify-wide-math/expected.txt b/dx/tests/101-verify-wide-math/expected.txt
new file mode 100644
index 0000000..c3be34a
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/expected.txt
@@ -0,0 +1,27 @@
+d2f: expected failure occurred
+d2i: expected failure occurred
+d2l: expected failure occurred
+dadd: expected failure occurred
+dcmpg: expected failure occurred
+dcmpl: expected failure occurred
+ddiv: expected failure occurred
+dmul: expected failure occurred
+dneg: expected failure occurred
+drem: expected failure occurred
+dsub: expected failure occurred
+l2d: expected failure occurred
+l2f: expected failure occurred
+l2i: expected failure occurred
+ladd: expected failure occurred
+land: expected failure occurred
+lcmp: expected failure occurred
+ldiv: expected failure occurred
+lmul: expected failure occurred
+lneg: expected failure occurred
+lor: expected failure occurred
+lrem: expected failure occurred
+lshl: expected failure occurred
+lshr: expected failure occurred
+lsub: expected failure occurred
+lushr: expected failure occurred
+lxor: expected failure occurred
diff --git a/dx/tests/101-verify-wide-math/info.txt b/dx/tests/101-verify-wide-math/info.txt
new file mode 100644
index 0000000..6ec551d
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/info.txt
@@ -0,0 +1,3 @@
+This tests that wide-taking (category-2) "calculation" opcodes (math
+ops, comparisons, etc.) verify that their arguments are actually of
+the appropriate types.
diff --git a/dx/tests/101-verify-wide-math/op_d2f.class b/dx/tests/101-verify-wide-math/op_d2f.class
new file mode 100644
index 0000000..35a0bf3
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_d2f.class differ
diff --git a/dx/tests/101-verify-wide-math/op_d2f.j b/dx/tests/101-verify-wide-math/op_d2f.j
new file mode 100644
index 0000000..65a3c9d
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_d2f.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_d2f
+.super java/lang/Object
+
+.method public static test(II)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    d2f
+    freturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_d2i.class b/dx/tests/101-verify-wide-math/op_d2i.class
new file mode 100644
index 0000000..a802985
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_d2i.class differ
diff --git a/dx/tests/101-verify-wide-math/op_d2i.j b/dx/tests/101-verify-wide-math/op_d2i.j
new file mode 100644
index 0000000..6e8976c
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_d2i.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_d2i
+.super java/lang/Object
+
+.method public static test(II)I
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    d2i
+    ireturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_d2l.class b/dx/tests/101-verify-wide-math/op_d2l.class
new file mode 100644
index 0000000..7a6f273
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_d2l.class differ
diff --git a/dx/tests/101-verify-wide-math/op_d2l.j b/dx/tests/101-verify-wide-math/op_d2l.j
new file mode 100644
index 0000000..f8e24c9
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_d2l.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_d2l
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    d2l
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_dadd.class b/dx/tests/101-verify-wide-math/op_dadd.class
new file mode 100644
index 0000000..7a0f275
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_dadd.class differ
diff --git a/dx/tests/101-verify-wide-math/op_dadd.j b/dx/tests/101-verify-wide-math/op_dadd.j
new file mode 100644
index 0000000..232c541
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_dadd.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dadd
+.super java/lang/Object
+
+.method public static test(II)D
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    dadd
+    dreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_dcmpg.class b/dx/tests/101-verify-wide-math/op_dcmpg.class
new file mode 100644
index 0000000..40851a2
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_dcmpg.class differ
diff --git a/dx/tests/101-verify-wide-math/op_dcmpg.j b/dx/tests/101-verify-wide-math/op_dcmpg.j
new file mode 100644
index 0000000..cd1b151
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_dcmpg.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dcmpg
+.super java/lang/Object
+
+.method public static test(II)I
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    dcmpg
+    ireturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_dcmpl.class b/dx/tests/101-verify-wide-math/op_dcmpl.class
new file mode 100644
index 0000000..6707175
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_dcmpl.class differ
diff --git a/dx/tests/101-verify-wide-math/op_dcmpl.j b/dx/tests/101-verify-wide-math/op_dcmpl.j
new file mode 100644
index 0000000..dd54c52
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_dcmpl.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dcmpl
+.super java/lang/Object
+
+.method public static test(II)I
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    dcmpl
+    ireturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_ddiv.class b/dx/tests/101-verify-wide-math/op_ddiv.class
new file mode 100644
index 0000000..13bd711
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_ddiv.class differ
diff --git a/dx/tests/101-verify-wide-math/op_ddiv.j b/dx/tests/101-verify-wide-math/op_ddiv.j
new file mode 100644
index 0000000..b9ee329
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_ddiv.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ddiv
+.super java/lang/Object
+
+.method public static test(II)D
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    ddiv
+    dreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_dmul.class b/dx/tests/101-verify-wide-math/op_dmul.class
new file mode 100644
index 0000000..e1339b4
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_dmul.class differ
diff --git a/dx/tests/101-verify-wide-math/op_dmul.j b/dx/tests/101-verify-wide-math/op_dmul.j
new file mode 100644
index 0000000..f915e79
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_dmul.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dmul
+.super java/lang/Object
+
+.method public static test(II)D
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    dmul
+    dreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_dneg.class b/dx/tests/101-verify-wide-math/op_dneg.class
new file mode 100644
index 0000000..ee6e311
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_dneg.class differ
diff --git a/dx/tests/101-verify-wide-math/op_dneg.j b/dx/tests/101-verify-wide-math/op_dneg.j
new file mode 100644
index 0000000..98fd9df
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_dneg.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dneg
+.super java/lang/Object
+
+.method public static test(II)D
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    dneg
+    dreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_drem.class b/dx/tests/101-verify-wide-math/op_drem.class
new file mode 100644
index 0000000..382a30b
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_drem.class differ
diff --git a/dx/tests/101-verify-wide-math/op_drem.j b/dx/tests/101-verify-wide-math/op_drem.j
new file mode 100644
index 0000000..c0fca65
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_drem.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_drem
+.super java/lang/Object
+
+.method public static test(II)D
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    drem
+    dreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_dsub.class b/dx/tests/101-verify-wide-math/op_dsub.class
new file mode 100644
index 0000000..fec24de
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_dsub.class differ
diff --git a/dx/tests/101-verify-wide-math/op_dsub.j b/dx/tests/101-verify-wide-math/op_dsub.j
new file mode 100644
index 0000000..e04f505
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_dsub.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dsub
+.super java/lang/Object
+
+.method public static test(II)D
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    dsub
+    dreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_l2d.class b/dx/tests/101-verify-wide-math/op_l2d.class
new file mode 100644
index 0000000..38af0c5
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_l2d.class differ
diff --git a/dx/tests/101-verify-wide-math/op_l2d.j b/dx/tests/101-verify-wide-math/op_l2d.j
new file mode 100644
index 0000000..d4ac0a8
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_l2d.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_l2d
+.super java/lang/Object
+
+.method public static test(I)D
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    l2d
+    dreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_l2f.class b/dx/tests/101-verify-wide-math/op_l2f.class
new file mode 100644
index 0000000..8647e30
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_l2f.class differ
diff --git a/dx/tests/101-verify-wide-math/op_l2f.j b/dx/tests/101-verify-wide-math/op_l2f.j
new file mode 100644
index 0000000..2dbe9d2
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_l2f.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_l2f
+.super java/lang/Object
+
+.method public static test(I)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    l2f
+    freturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_l2i.class b/dx/tests/101-verify-wide-math/op_l2i.class
new file mode 100644
index 0000000..ea1f45c
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_l2i.class differ
diff --git a/dx/tests/101-verify-wide-math/op_l2i.j b/dx/tests/101-verify-wide-math/op_l2i.j
new file mode 100644
index 0000000..1b4e68a
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_l2i.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_l2i
+.super java/lang/Object
+
+.method public static test(I)I
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    l2i
+    ireturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_ladd.class b/dx/tests/101-verify-wide-math/op_ladd.class
new file mode 100644
index 0000000..1fa989e
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_ladd.class differ
diff --git a/dx/tests/101-verify-wide-math/op_ladd.j b/dx/tests/101-verify-wide-math/op_ladd.j
new file mode 100644
index 0000000..1dbb6f8
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_ladd.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ladd
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    ladd
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_land.class b/dx/tests/101-verify-wide-math/op_land.class
new file mode 100644
index 0000000..a12f504
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_land.class differ
diff --git a/dx/tests/101-verify-wide-math/op_land.j b/dx/tests/101-verify-wide-math/op_land.j
new file mode 100644
index 0000000..e8a55bb
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_land.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_land
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    land
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lcmp.class b/dx/tests/101-verify-wide-math/op_lcmp.class
new file mode 100644
index 0000000..123121b
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lcmp.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lcmp.j b/dx/tests/101-verify-wide-math/op_lcmp.j
new file mode 100644
index 0000000..b651c9c
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lcmp.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lcmp
+.super java/lang/Object
+
+.method public static test(II)I
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lcmp
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_ldiv.class b/dx/tests/101-verify-wide-math/op_ldiv.class
new file mode 100644
index 0000000..69d3e38
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_ldiv.class differ
diff --git a/dx/tests/101-verify-wide-math/op_ldiv.j b/dx/tests/101-verify-wide-math/op_ldiv.j
new file mode 100644
index 0000000..677daa2
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_ldiv.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ldiv
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    ldiv
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lmul.class b/dx/tests/101-verify-wide-math/op_lmul.class
new file mode 100644
index 0000000..8b1ca0f
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lmul.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lmul.j b/dx/tests/101-verify-wide-math/op_lmul.j
new file mode 100644
index 0000000..074d67c
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lmul.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lmul
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lmul
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lneg.class b/dx/tests/101-verify-wide-math/op_lneg.class
new file mode 100644
index 0000000..f090003
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lneg.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lneg.j b/dx/tests/101-verify-wide-math/op_lneg.j
new file mode 100644
index 0000000..18d5780
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lneg.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lneg
+.super java/lang/Object
+
+.method public static test(I)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    lneg
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lor.class b/dx/tests/101-verify-wide-math/op_lor.class
new file mode 100644
index 0000000..2d6aa09
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lor.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lor.j b/dx/tests/101-verify-wide-math/op_lor.j
new file mode 100644
index 0000000..267ff1f
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lor.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lor
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lor
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lrem.class b/dx/tests/101-verify-wide-math/op_lrem.class
new file mode 100644
index 0000000..55419eb
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lrem.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lrem.j b/dx/tests/101-verify-wide-math/op_lrem.j
new file mode 100644
index 0000000..5e0df6e
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lrem.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lrem
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lrem
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lshl.class b/dx/tests/101-verify-wide-math/op_lshl.class
new file mode 100644
index 0000000..d3363aa
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lshl.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lshl.j b/dx/tests/101-verify-wide-math/op_lshl.j
new file mode 100644
index 0000000..bc16ea5
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lshl.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lshl
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lshl
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lshr.class b/dx/tests/101-verify-wide-math/op_lshr.class
new file mode 100644
index 0000000..16e0592
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lshr.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lshr.j b/dx/tests/101-verify-wide-math/op_lshr.j
new file mode 100644
index 0000000..b93fb2f
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lshr.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lshr
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lshr
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lsub.class b/dx/tests/101-verify-wide-math/op_lsub.class
new file mode 100644
index 0000000..8fe84fa
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lsub.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lsub.j b/dx/tests/101-verify-wide-math/op_lsub.j
new file mode 100644
index 0000000..823d899
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lsub.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lsub
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lsub
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lushr.class b/dx/tests/101-verify-wide-math/op_lushr.class
new file mode 100644
index 0000000..87625a2
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lushr.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lushr.j b/dx/tests/101-verify-wide-math/op_lushr.j
new file mode 100644
index 0000000..aa9feb2
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lushr.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lushr
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lushr
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/op_lxor.class b/dx/tests/101-verify-wide-math/op_lxor.class
new file mode 100644
index 0000000..602596e
Binary files /dev/null and b/dx/tests/101-verify-wide-math/op_lxor.class differ
diff --git a/dx/tests/101-verify-wide-math/op_lxor.j b/dx/tests/101-verify-wide-math/op_lxor.j
new file mode 100644
index 0000000..3897c96
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/op_lxor.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lxor
+.super java/lang/Object
+
+.method public static test(II)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    lxor
+    lreturn
+.end method
diff --git a/dx/tests/101-verify-wide-math/run b/dx/tests/101-verify-wide-math/run
new file mode 100644
index 0000000..c3ec75d
--- /dev/null
+++ b/dx/tests/101-verify-wide-math/run
@@ -0,0 +1,53 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    dx --debug --dex op_"$1".class >/dev/null 2>&1
+    if [ "$?" = "0" ]; then
+        dx --debug --dex --dump-method="op_$1.test*" op_"$1".class
+    else
+        echo "$1: expected failure occurred"
+    fi
+}
+
+oneop d2f
+oneop d2i
+oneop d2l
+oneop dadd
+oneop dcmpg
+oneop dcmpl
+oneop ddiv
+oneop dmul
+oneop dneg
+oneop drem
+oneop dsub
+oneop l2d
+oneop l2f
+oneop l2i
+oneop ladd
+oneop land
+oneop lcmp
+oneop ldiv
+oneop lmul
+oneop lneg
+oneop lor
+oneop lrem
+oneop lshl
+oneop lshr
+oneop lsub
+oneop lushr
+oneop lxor
diff --git a/dx/tests/102-verify-nonwide-math/build b/dx/tests/102-verify-nonwide-math/build
new file mode 100644
index 0000000..b036d02
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/build
@@ -0,0 +1,45 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    jasmin -d . op_"$1".j
+}
+
+oneop f2d
+oneop f2i
+oneop f2l
+oneop fadd
+oneop fdiv
+oneop fmul
+oneop fneg
+oneop frem
+oneop fsub
+oneop i2d
+oneop i2f
+oneop i2l
+oneop iadd
+oneop iand
+oneop idiv
+oneop imul
+oneop ineg
+oneop ior
+oneop irem
+oneop ishl
+oneop ishr
+oneop isub
+oneop iushr
+oneop ixor
diff --git a/dx/tests/102-verify-nonwide-math/expected.txt b/dx/tests/102-verify-nonwide-math/expected.txt
new file mode 100644
index 0000000..77f12c0
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/expected.txt
@@ -0,0 +1,24 @@
+f2d: expected failure occurred
+f2i: expected failure occurred
+f2l: expected failure occurred
+fadd: expected failure occurred
+fdiv: expected failure occurred
+fmul: expected failure occurred
+fneg: expected failure occurred
+frem: expected failure occurred
+fsub: expected failure occurred
+i2d: expected failure occurred
+i2f: expected failure occurred
+i2l: expected failure occurred
+iadd: expected failure occurred
+iand: expected failure occurred
+idiv: expected failure occurred
+imul: expected failure occurred
+ineg: expected failure occurred
+ior: expected failure occurred
+irem: expected failure occurred
+ishl: expected failure occurred
+ishr: expected failure occurred
+isub: expected failure occurred
+iushr: expected failure occurred
+ixor: expected failure occurred
diff --git a/dx/tests/102-verify-nonwide-math/info.txt b/dx/tests/102-verify-nonwide-math/info.txt
new file mode 100644
index 0000000..10e52ba
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/info.txt
@@ -0,0 +1,3 @@
+This tests that non-wide-taking (category-1) "calculation" opcodes (math
+ops, comparisons, etc.) to verify that their arguments are actually of
+the appropriate types.
diff --git a/dx/tests/102-verify-nonwide-math/op_f2d.class b/dx/tests/102-verify-nonwide-math/op_f2d.class
new file mode 100644
index 0000000..ef025e8
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_f2d.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_f2d.j b/dx/tests/102-verify-nonwide-math/op_f2d.j
new file mode 100644
index 0000000..75e8917
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_f2d.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_f2d
+.super java/lang/Object
+
+.method public static test(I)D
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    f2d
+    dreturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_f2i.class b/dx/tests/102-verify-nonwide-math/op_f2i.class
new file mode 100644
index 0000000..726ff0f
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_f2i.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_f2i.j b/dx/tests/102-verify-nonwide-math/op_f2i.j
new file mode 100644
index 0000000..2d36af7
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_f2i.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_f2i
+.super java/lang/Object
+
+.method public static test(I)I
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    f2i
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_f2l.class b/dx/tests/102-verify-nonwide-math/op_f2l.class
new file mode 100644
index 0000000..16f596b
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_f2l.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_f2l.j b/dx/tests/102-verify-nonwide-math/op_f2l.j
new file mode 100644
index 0000000..fae9e21
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_f2l.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_f2l
+.super java/lang/Object
+
+.method public static test(I)J
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    f2l
+    lreturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_fadd.class b/dx/tests/102-verify-nonwide-math/op_fadd.class
new file mode 100644
index 0000000..79c1bc5
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_fadd.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_fadd.j b/dx/tests/102-verify-nonwide-math/op_fadd.j
new file mode 100644
index 0000000..dc3743f
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_fadd.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fadd
+.super java/lang/Object
+
+.method public static test(II)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    fadd
+    freturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_fdiv.class b/dx/tests/102-verify-nonwide-math/op_fdiv.class
new file mode 100644
index 0000000..8f109b8
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_fdiv.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_fdiv.j b/dx/tests/102-verify-nonwide-math/op_fdiv.j
new file mode 100644
index 0000000..8609be2
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_fdiv.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fdiv
+.super java/lang/Object
+
+.method public static test(II)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    fdiv
+    freturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_fmul.class b/dx/tests/102-verify-nonwide-math/op_fmul.class
new file mode 100644
index 0000000..a97474d
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_fmul.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_fmul.j b/dx/tests/102-verify-nonwide-math/op_fmul.j
new file mode 100644
index 0000000..fe4661c
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_fmul.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fmul
+.super java/lang/Object
+
+.method public static test(II)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    fmul
+    freturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_fneg.class b/dx/tests/102-verify-nonwide-math/op_fneg.class
new file mode 100644
index 0000000..a68e619
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_fneg.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_fneg.j b/dx/tests/102-verify-nonwide-math/op_fneg.j
new file mode 100644
index 0000000..34898bd
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_fneg.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fneg
+.super java/lang/Object
+
+.method public static test(II)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    fneg
+    freturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_frem.class b/dx/tests/102-verify-nonwide-math/op_frem.class
new file mode 100644
index 0000000..f385a32
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_frem.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_frem.j b/dx/tests/102-verify-nonwide-math/op_frem.j
new file mode 100644
index 0000000..17f4602
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_frem.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_frem
+.super java/lang/Object
+
+.method public static test(II)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    frem
+    freturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_fsub.class b/dx/tests/102-verify-nonwide-math/op_fsub.class
new file mode 100644
index 0000000..a3fa1ef
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_fsub.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_fsub.j b/dx/tests/102-verify-nonwide-math/op_fsub.j
new file mode 100644
index 0000000..692f4f8
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_fsub.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fsub
+.super java/lang/Object
+
+.method public static test(II)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    iload_1
+    fsub
+    freturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_i2d.class b/dx/tests/102-verify-nonwide-math/op_i2d.class
new file mode 100644
index 0000000..13e367c
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_i2d.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_i2d.j b/dx/tests/102-verify-nonwide-math/op_i2d.j
new file mode 100644
index 0000000..6c73dbe
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_i2d.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_i2d
+.super java/lang/Object
+
+.method public static test(FF)D
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    i2d
+    dreturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_i2f.class b/dx/tests/102-verify-nonwide-math/op_i2f.class
new file mode 100644
index 0000000..3fe9f05
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_i2f.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_i2f.j b/dx/tests/102-verify-nonwide-math/op_i2f.j
new file mode 100644
index 0000000..cee0b84
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_i2f.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_i2f
+.super java/lang/Object
+
+.method public static test(FF)F
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    i2f
+    freturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_i2l.class b/dx/tests/102-verify-nonwide-math/op_i2l.class
new file mode 100644
index 0000000..a393579
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_i2l.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_i2l.j b/dx/tests/102-verify-nonwide-math/op_i2l.j
new file mode 100644
index 0000000..d6f2daa
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_i2l.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_i2l
+.super java/lang/Object
+
+.method public static test(FF)J
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    i2l
+    lreturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_iadd.class b/dx/tests/102-verify-nonwide-math/op_iadd.class
new file mode 100644
index 0000000..daf3bcc
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_iadd.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_iadd.j b/dx/tests/102-verify-nonwide-math/op_iadd.j
new file mode 100644
index 0000000..e3d92e3
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_iadd.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_iadd
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    iadd
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_iand.class b/dx/tests/102-verify-nonwide-math/op_iand.class
new file mode 100644
index 0000000..535e3ec
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_iand.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_iand.j b/dx/tests/102-verify-nonwide-math/op_iand.j
new file mode 100644
index 0000000..063738c
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_iand.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_iand
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    iand
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_idiv.class b/dx/tests/102-verify-nonwide-math/op_idiv.class
new file mode 100644
index 0000000..3ab7a01
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_idiv.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_idiv.j b/dx/tests/102-verify-nonwide-math/op_idiv.j
new file mode 100644
index 0000000..2e3e3a3
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_idiv.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_idiv
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    idiv
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_imul.class b/dx/tests/102-verify-nonwide-math/op_imul.class
new file mode 100644
index 0000000..a358bb6
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_imul.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_imul.j b/dx/tests/102-verify-nonwide-math/op_imul.j
new file mode 100644
index 0000000..7f4f612
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_imul.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_imul
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    imul
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_ineg.class b/dx/tests/102-verify-nonwide-math/op_ineg.class
new file mode 100644
index 0000000..12b805e
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_ineg.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_ineg.j b/dx/tests/102-verify-nonwide-math/op_ineg.j
new file mode 100644
index 0000000..68fcb8c
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_ineg.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ineg
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    ineg
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_ior.class b/dx/tests/102-verify-nonwide-math/op_ior.class
new file mode 100644
index 0000000..5118dbb
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_ior.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_ior.j b/dx/tests/102-verify-nonwide-math/op_ior.j
new file mode 100644
index 0000000..c8c3a4b
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_ior.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ior
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    ior
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_irem.class b/dx/tests/102-verify-nonwide-math/op_irem.class
new file mode 100644
index 0000000..3eef77d
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_irem.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_irem.j b/dx/tests/102-verify-nonwide-math/op_irem.j
new file mode 100644
index 0000000..b22f1fd
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_irem.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_irem
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    irem
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_ishl.class b/dx/tests/102-verify-nonwide-math/op_ishl.class
new file mode 100644
index 0000000..203aa1a
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_ishl.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_ishl.j b/dx/tests/102-verify-nonwide-math/op_ishl.j
new file mode 100644
index 0000000..e617182
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_ishl.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ishl
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    ishl
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_ishr.class b/dx/tests/102-verify-nonwide-math/op_ishr.class
new file mode 100644
index 0000000..820f358
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_ishr.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_ishr.j b/dx/tests/102-verify-nonwide-math/op_ishr.j
new file mode 100644
index 0000000..64eba11
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_ishr.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ishr
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    ishr
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_isub.class b/dx/tests/102-verify-nonwide-math/op_isub.class
new file mode 100644
index 0000000..e61b5a0
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_isub.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_isub.j b/dx/tests/102-verify-nonwide-math/op_isub.j
new file mode 100644
index 0000000..ee789b0
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_isub.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_isub
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    isub
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_iushr.class b/dx/tests/102-verify-nonwide-math/op_iushr.class
new file mode 100644
index 0000000..7e1aaa5
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_iushr.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_iushr.j b/dx/tests/102-verify-nonwide-math/op_iushr.j
new file mode 100644
index 0000000..73c34f1
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_iushr.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_iushr
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    iushr
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/op_ixor.class b/dx/tests/102-verify-nonwide-math/op_ixor.class
new file mode 100644
index 0000000..6708e86
Binary files /dev/null and b/dx/tests/102-verify-nonwide-math/op_ixor.class differ
diff --git a/dx/tests/102-verify-nonwide-math/op_ixor.j b/dx/tests/102-verify-nonwide-math/op_ixor.j
new file mode 100644
index 0000000..68f095b
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/op_ixor.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ixor
+.super java/lang/Object
+
+.method public static test(FF)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    ixor
+    ireturn
+.end method
diff --git a/dx/tests/102-verify-nonwide-math/run b/dx/tests/102-verify-nonwide-math/run
new file mode 100644
index 0000000..e065b52
--- /dev/null
+++ b/dx/tests/102-verify-nonwide-math/run
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    dx --debug --dex op_"$1".class >/dev/null 2>&1
+    if [ "$?" = "0" ]; then
+        dx --debug --dex --dump-method="op_$1.test*" op_"$1".class
+    else
+        echo "$1: expected failure occurred"
+    fi
+}
+
+oneop f2d
+oneop f2i
+oneop f2l
+oneop fadd
+oneop fdiv
+oneop fmul
+oneop fneg
+oneop frem
+oneop fsub
+oneop i2d
+oneop i2f
+oneop i2l
+oneop iadd
+oneop iand
+oneop idiv
+oneop imul
+oneop ineg
+oneop ior
+oneop irem
+oneop ishl
+oneop ishr
+oneop isub
+oneop iushr
+oneop ixor
diff --git a/dx/tests/103-verify-branch-ops/build b/dx/tests/103-verify-branch-ops/build
new file mode 100644
index 0000000..4d70265
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/build
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+set -e
+
+function oneop()
+{
+    jasmin -d . op_"$1".j
+}
+
+oneop if_acmpeq
+oneop if_acmpne
+oneop if_icmpeq
+oneop if_icmpge
+oneop if_icmpgt
+oneop if_icmple
+oneop if_icmplt
+oneop if_icmpne
+oneop ifeq
+oneop ifge
+oneop ifgt
+oneop ifle
+oneop iflt
+oneop ifne
+oneop ifnonnull
+oneop ifnull
+oneop lookupswitch
+oneop tableswitch
diff --git a/dx/tests/103-verify-branch-ops/expected.txt b/dx/tests/103-verify-branch-ops/expected.txt
new file mode 100644
index 0000000..5df250b
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/expected.txt
@@ -0,0 +1,18 @@
+if_acmpeq: expected failure occurred
+if_acmpne: expected failure occurred
+if_icmpeq: expected failure occurred
+if_icmpge: expected failure occurred
+if_icmpgt: expected failure occurred
+if_icmple: expected failure occurred
+if_icmplt: expected failure occurred
+if_icmpne: expected failure occurred
+ifeq: expected failure occurred
+ifge: expected failure occurred
+ifgt: expected failure occurred
+ifle: expected failure occurred
+iflt: expected failure occurred
+ifne: expected failure occurred
+ifnonnull: expected failure occurred
+ifnull: expected failure occurred
+lookupswitch: expected failure occurred
+tableswitch: expected failure occurred
diff --git a/dx/tests/103-verify-branch-ops/info.txt b/dx/tests/103-verify-branch-ops/info.txt
new file mode 100644
index 0000000..8705e83
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/info.txt
@@ -0,0 +1,2 @@
+This tests branch opcodes to verify that their arguments are actually of
+the appropriate types.
diff --git a/dx/tests/103-verify-branch-ops/op_if_acmpeq.class b/dx/tests/103-verify-branch-ops/op_if_acmpeq.class
new file mode 100644
index 0000000..e7cecb4
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_if_acmpeq.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_if_acmpeq.j b/dx/tests/103-verify-branch-ops/op_if_acmpeq.j
new file mode 100644
index 0000000..4339200
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_if_acmpeq.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_if_acmpeq
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    if_acmpeq blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_if_acmpne.class b/dx/tests/103-verify-branch-ops/op_if_acmpne.class
new file mode 100644
index 0000000..590d686
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_if_acmpne.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_if_acmpne.j b/dx/tests/103-verify-branch-ops/op_if_acmpne.j
new file mode 100644
index 0000000..57a317b
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_if_acmpne.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_if_acmpne
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    if_acmpne blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmpeq.class b/dx/tests/103-verify-branch-ops/op_if_icmpeq.class
new file mode 100644
index 0000000..6b2b361
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_if_icmpeq.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmpeq.j b/dx/tests/103-verify-branch-ops/op_if_icmpeq.j
new file mode 100644
index 0000000..1f141bc
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_if_icmpeq.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_if_icmpeq
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    if_icmpeq blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmpge.class b/dx/tests/103-verify-branch-ops/op_if_icmpge.class
new file mode 100644
index 0000000..e7bd4b5
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_if_icmpge.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmpge.j b/dx/tests/103-verify-branch-ops/op_if_icmpge.j
new file mode 100644
index 0000000..6ae2e3f
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_if_icmpge.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_if_icmpge
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    if_icmpge blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmpgt.class b/dx/tests/103-verify-branch-ops/op_if_icmpgt.class
new file mode 100644
index 0000000..6abed7b
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_if_icmpgt.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmpgt.j b/dx/tests/103-verify-branch-ops/op_if_icmpgt.j
new file mode 100644
index 0000000..4e67282
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_if_icmpgt.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_if_icmpgt
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    if_icmpgt blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmple.class b/dx/tests/103-verify-branch-ops/op_if_icmple.class
new file mode 100644
index 0000000..f17fd37
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_if_icmple.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmple.j b/dx/tests/103-verify-branch-ops/op_if_icmple.j
new file mode 100644
index 0000000..3511800
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_if_icmple.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_if_icmple
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    if_icmple blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmplt.class b/dx/tests/103-verify-branch-ops/op_if_icmplt.class
new file mode 100644
index 0000000..0ab077c
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_if_icmplt.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmplt.j b/dx/tests/103-verify-branch-ops/op_if_icmplt.j
new file mode 100644
index 0000000..89527f5
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_if_icmplt.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_if_icmplt
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    if_icmplt blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmpne.class b/dx/tests/103-verify-branch-ops/op_if_icmpne.class
new file mode 100644
index 0000000..a2be7f4
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_if_icmpne.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_if_icmpne.j b/dx/tests/103-verify-branch-ops/op_if_icmpne.j
new file mode 100644
index 0000000..a94faee
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_if_icmpne.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_if_icmpne
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    fload_1
+    if_icmpne blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_ifeq.class b/dx/tests/103-verify-branch-ops/op_ifeq.class
new file mode 100644
index 0000000..24c2279
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_ifeq.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_ifeq.j b/dx/tests/103-verify-branch-ops/op_ifeq.j
new file mode 100644
index 0000000..620e1c9
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_ifeq.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ifeq
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    ifeq blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_ifge.class b/dx/tests/103-verify-branch-ops/op_ifge.class
new file mode 100644
index 0000000..d853fd7
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_ifge.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_ifge.j b/dx/tests/103-verify-branch-ops/op_ifge.j
new file mode 100644
index 0000000..c46b176
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_ifge.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ifge
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    ifge blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_ifgt.class b/dx/tests/103-verify-branch-ops/op_ifgt.class
new file mode 100644
index 0000000..5fe3ed0
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_ifgt.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_ifgt.j b/dx/tests/103-verify-branch-ops/op_ifgt.j
new file mode 100644
index 0000000..8165038
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_ifgt.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ifgt
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    ifgt blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_ifle.class b/dx/tests/103-verify-branch-ops/op_ifle.class
new file mode 100644
index 0000000..2f5565e
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_ifle.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_ifle.j b/dx/tests/103-verify-branch-ops/op_ifle.j
new file mode 100644
index 0000000..758943f
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_ifle.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ifle
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    ifle blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_iflt.class b/dx/tests/103-verify-branch-ops/op_iflt.class
new file mode 100644
index 0000000..b8be084
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_iflt.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_iflt.j b/dx/tests/103-verify-branch-ops/op_iflt.j
new file mode 100644
index 0000000..5091355
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_iflt.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_iflt
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    iflt blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_ifne.class b/dx/tests/103-verify-branch-ops/op_ifne.class
new file mode 100644
index 0000000..46af46f
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_ifne.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_ifne.j b/dx/tests/103-verify-branch-ops/op_ifne.j
new file mode 100644
index 0000000..bb2dadc
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_ifne.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ifne
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    ifne blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_ifnonnull.class b/dx/tests/103-verify-branch-ops/op_ifnonnull.class
new file mode 100644
index 0000000..673a87d
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_ifnonnull.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_ifnonnull.j b/dx/tests/103-verify-branch-ops/op_ifnonnull.j
new file mode 100644
index 0000000..f2422f0
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_ifnonnull.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ifnonnull
+.super java/lang/Object
+
+.method public static test(IF)V
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    ifnonnull blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_ifnull.class b/dx/tests/103-verify-branch-ops/op_ifnull.class
new file mode 100644
index 0000000..f727705
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_ifnull.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_ifnull.j b/dx/tests/103-verify-branch-ops/op_ifnull.j
new file mode 100644
index 0000000..c253b09
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_ifnull.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ifnull
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    ifnull blort
+    nop
+blort:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_lookupswitch.class b/dx/tests/103-verify-branch-ops/op_lookupswitch.class
new file mode 100644
index 0000000..096af90
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_lookupswitch.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_lookupswitch.j b/dx/tests/103-verify-branch-ops/op_lookupswitch.j
new file mode 100644
index 0000000..21fe8f7
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_lookupswitch.j
@@ -0,0 +1,33 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lookupswitch
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    lookupswitch
+        0x05: t1
+        0x10: t2
+        default: t3
+t1:
+    nop
+t2:
+    nop
+t3:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/op_tableswitch.class b/dx/tests/103-verify-branch-ops/op_tableswitch.class
new file mode 100644
index 0000000..c9d013f
Binary files /dev/null and b/dx/tests/103-verify-branch-ops/op_tableswitch.class differ
diff --git a/dx/tests/103-verify-branch-ops/op_tableswitch.j b/dx/tests/103-verify-branch-ops/op_tableswitch.j
new file mode 100644
index 0000000..657feff
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/op_tableswitch.j
@@ -0,0 +1,33 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_tableswitch
+.super java/lang/Object
+
+.method public static test(FF)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    tableswitch 0x10
+        t1
+        t2
+        default: t3
+t1:
+    nop
+t2:
+    nop
+t3:
+    return
+.end method
diff --git a/dx/tests/103-verify-branch-ops/run b/dx/tests/103-verify-branch-ops/run
new file mode 100644
index 0000000..1f3d880
--- /dev/null
+++ b/dx/tests/103-verify-branch-ops/run
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    dx --debug --dex op_"$1".class >/dev/null 2>&1
+    if [ "$?" = "0" ]; then
+        dx --debug --dex --dump-method="op_$1.test*" op_"$1".class
+    else
+        echo "$1: expected failure occurred"
+    fi
+}
+
+oneop if_acmpeq
+oneop if_acmpne
+oneop if_icmpeq
+oneop if_icmpge
+oneop if_icmpgt
+oneop if_icmple
+oneop if_icmplt
+oneop if_icmpne
+oneop ifeq
+oneop ifge
+oneop ifgt
+oneop ifle
+oneop iflt
+oneop ifne
+oneop ifnonnull
+oneop ifnull
+oneop lookupswitch
+oneop tableswitch
diff --git a/dx/tests/104-verify-return-ops/build b/dx/tests/104-verify-return-ops/build
new file mode 100644
index 0000000..96bb302
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/build
@@ -0,0 +1,32 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    jasmin -d . op_"$1".j
+}
+
+oneop areturn
+oneop dreturn
+oneop freturn
+oneop ireturn
+oneop lreturn
+oneop sig_areturn
+oneop sig_dreturn
+oneop sig_freturn
+oneop sig_ireturn
+oneop sig_lreturn
+oneop sig_return
diff --git a/dx/tests/104-verify-return-ops/expected.txt b/dx/tests/104-verify-return-ops/expected.txt
new file mode 100644
index 0000000..8217994
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/expected.txt
@@ -0,0 +1,11 @@
+areturn: expected failure occurred
+dreturn: expected failure occurred
+freturn: expected failure occurred
+ireturn: expected failure occurred
+lreturn: expected failure occurred
+sig_areturn: expected failure occurred
+sig_dreturn: expected failure occurred
+sig_freturn: expected failure occurred
+sig_ireturn: expected failure occurred
+sig_lreturn: expected failure occurred
+sig_return: expected failure occurred
diff --git a/dx/tests/104-verify-return-ops/info.txt b/dx/tests/104-verify-return-ops/info.txt
new file mode 100644
index 0000000..1f5e634
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/info.txt
@@ -0,0 +1,2 @@
+This tests that return opcodes verify that their arguments are actually of
+the appropriate types and that the opcode matches the method signature.
diff --git a/dx/tests/104-verify-return-ops/op_areturn.class b/dx/tests/104-verify-return-ops/op_areturn.class
new file mode 100644
index 0000000..0757173
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_areturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_areturn.j b/dx/tests/104-verify-return-ops/op_areturn.j
new file mode 100644
index 0000000..0b25088
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_areturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_areturn
+.super java/lang/Object
+
+.method public static test(F)Ljava/lang/Object;
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    areturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_dreturn.class b/dx/tests/104-verify-return-ops/op_dreturn.class
new file mode 100644
index 0000000..1f192ae
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_dreturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_dreturn.j b/dx/tests/104-verify-return-ops/op_dreturn.j
new file mode 100644
index 0000000..1075fe1
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_dreturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dreturn
+.super java/lang/Object
+
+.method public static test(F)D
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    dreturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_freturn.class b/dx/tests/104-verify-return-ops/op_freturn.class
new file mode 100644
index 0000000..d9c5a92
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_freturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_freturn.j b/dx/tests/104-verify-return-ops/op_freturn.j
new file mode 100644
index 0000000..6586ce6
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_freturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_freturn
+.super java/lang/Object
+
+.method public static test(I)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    freturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_ireturn.class b/dx/tests/104-verify-return-ops/op_ireturn.class
new file mode 100644
index 0000000..6d1d49a
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_ireturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_ireturn.j b/dx/tests/104-verify-return-ops/op_ireturn.j
new file mode 100644
index 0000000..e93dda8
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_ireturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_ireturn
+.super java/lang/Object
+
+.method public static test(F)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    ireturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_lreturn.class b/dx/tests/104-verify-return-ops/op_lreturn.class
new file mode 100644
index 0000000..a4483ed
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_lreturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_lreturn.j b/dx/tests/104-verify-return-ops/op_lreturn.j
new file mode 100644
index 0000000..349f353
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_lreturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lreturn
+.super java/lang/Object
+
+.method public static test(F)J
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    lreturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_sig_areturn.class b/dx/tests/104-verify-return-ops/op_sig_areturn.class
new file mode 100644
index 0000000..482ad80
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_sig_areturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_sig_areturn.j b/dx/tests/104-verify-return-ops/op_sig_areturn.j
new file mode 100644
index 0000000..f1ea1b4
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_sig_areturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_sig_areturn
+.super java/lang/Object
+
+.method public static test(I)F
+    .limit locals 2
+    .limit stack 3
+
+    aconst_null
+    areturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_sig_dreturn.class b/dx/tests/104-verify-return-ops/op_sig_dreturn.class
new file mode 100644
index 0000000..737b588
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_sig_dreturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_sig_dreturn.j b/dx/tests/104-verify-return-ops/op_sig_dreturn.j
new file mode 100644
index 0000000..fa6fcd2
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_sig_dreturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_sig_dreturn
+.super java/lang/Object
+
+.method public static test(D)F
+    .limit locals 2
+    .limit stack 3
+
+    dload_0
+    dreturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_sig_freturn.class b/dx/tests/104-verify-return-ops/op_sig_freturn.class
new file mode 100644
index 0000000..2b9cebf
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_sig_freturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_sig_freturn.j b/dx/tests/104-verify-return-ops/op_sig_freturn.j
new file mode 100644
index 0000000..be5dea8
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_sig_freturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_sig_freturn
+.super java/lang/Object
+
+.method public static test(F)I
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    freturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_sig_ireturn.class b/dx/tests/104-verify-return-ops/op_sig_ireturn.class
new file mode 100644
index 0000000..f8581da
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_sig_ireturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_sig_ireturn.j b/dx/tests/104-verify-return-ops/op_sig_ireturn.j
new file mode 100644
index 0000000..ab3aa40
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_sig_ireturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_sig_ireturn
+.super java/lang/Object
+
+.method public static test(I)F
+    .limit locals 2
+    .limit stack 3
+
+    iload_0
+    ireturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_sig_lreturn.class b/dx/tests/104-verify-return-ops/op_sig_lreturn.class
new file mode 100644
index 0000000..9f5ac6e
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_sig_lreturn.class differ
diff --git a/dx/tests/104-verify-return-ops/op_sig_lreturn.j b/dx/tests/104-verify-return-ops/op_sig_lreturn.j
new file mode 100644
index 0000000..e5a121d
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_sig_lreturn.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_sig_lreturn
+.super java/lang/Object
+
+.method public static test(J)F
+    .limit locals 2
+    .limit stack 3
+
+    lload_0
+    lreturn
+.end method
diff --git a/dx/tests/104-verify-return-ops/op_sig_return.class b/dx/tests/104-verify-return-ops/op_sig_return.class
new file mode 100644
index 0000000..e0a6ba5
Binary files /dev/null and b/dx/tests/104-verify-return-ops/op_sig_return.class differ
diff --git a/dx/tests/104-verify-return-ops/op_sig_return.j b/dx/tests/104-verify-return-ops/op_sig_return.j
new file mode 100644
index 0000000..26c0678
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/op_sig_return.j
@@ -0,0 +1,23 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_sig_return
+.super java/lang/Object
+
+.method public static test(I)F
+    .limit locals 2
+    .limit stack 3
+
+    return
+.end method
diff --git a/dx/tests/104-verify-return-ops/run b/dx/tests/104-verify-return-ops/run
new file mode 100644
index 0000000..56f743a
--- /dev/null
+++ b/dx/tests/104-verify-return-ops/run
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    dx --debug --dex op_"$1".class >/dev/null 2>&1
+    if [ "$?" = "0" ]; then
+        dx --debug --dex --dump-method="op_$1.test*" op_"$1".class
+    else
+        echo "$1: expected failure occurred"
+    fi
+}
+
+oneop areturn
+oneop dreturn
+oneop freturn
+oneop ireturn
+oneop lreturn
+oneop sig_areturn
+oneop sig_dreturn
+oneop sig_freturn
+oneop sig_ireturn
+oneop sig_lreturn
+oneop sig_return
diff --git a/dx/tests/105-verify-load-store-ops/build b/dx/tests/105-verify-load-store-ops/build
new file mode 100644
index 0000000..97c40d4
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/build
@@ -0,0 +1,63 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    jasmin -d . op_"$1".j
+}
+
+oneop aaload
+oneop aastore
+oneop aastore2 # second aastore test
+oneop astore
+oneop astore_0
+oneop astore_1
+oneop astore_2
+oneop astore_3
+oneop baload
+oneop bastore
+oneop caload
+oneop castore
+oneop daload
+oneop dastore
+oneop dstore
+oneop dstore_0
+oneop dstore_1
+oneop dstore_2
+oneop dstore_3
+oneop faload
+oneop fastore
+oneop fstore
+oneop fstore_0
+oneop fstore_1
+oneop fstore_2
+oneop fstore_3
+oneop iaload
+oneop iastore
+oneop istore
+oneop istore_0
+oneop istore_1
+oneop istore_2
+oneop istore_3
+oneop laload
+oneop lastore
+oneop lstore
+oneop lstore_0
+oneop lstore_1
+oneop lstore_2
+oneop lstore_3
+oneop saload
+oneop sastore
diff --git a/dx/tests/105-verify-load-store-ops/expected.txt b/dx/tests/105-verify-load-store-ops/expected.txt
new file mode 100644
index 0000000..ef29e24
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/expected.txt
@@ -0,0 +1,42 @@
+aaload: expected failure occurred
+aastore: expected failure occurred
+aastore2: expected failure occurred
+astore: expected failure occurred
+astore_0: expected failure occurred
+astore_1: expected failure occurred
+astore_2: expected failure occurred
+astore_3: expected failure occurred
+baload: expected failure occurred
+bastore: expected failure occurred
+caload: expected failure occurred
+castore: expected failure occurred
+daload: expected failure occurred
+dastore: expected failure occurred
+dstore: expected failure occurred
+dstore_0: expected failure occurred
+dstore_1: expected failure occurred
+dstore_2: expected failure occurred
+dstore_3: expected failure occurred
+faload: expected failure occurred
+fastore: expected failure occurred
+fstore: expected failure occurred
+fstore_0: expected failure occurred
+fstore_1: expected failure occurred
+fstore_2: expected failure occurred
+fstore_3: expected failure occurred
+iaload: expected failure occurred
+iastore: expected failure occurred
+istore: expected failure occurred
+istore_0: expected failure occurred
+istore_1: expected failure occurred
+istore_2: expected failure occurred
+istore_3: expected failure occurred
+laload: expected failure occurred
+lastore: expected failure occurred
+lstore: expected failure occurred
+lstore_0: expected failure occurred
+lstore_1: expected failure occurred
+lstore_2: expected failure occurred
+lstore_3: expected failure occurred
+saload: expected failure occurred
+sastore: expected failure occurred
diff --git a/dx/tests/105-verify-load-store-ops/info.txt b/dx/tests/105-verify-load-store-ops/info.txt
new file mode 100644
index 0000000..a3a41d6
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/info.txt
@@ -0,0 +1,2 @@
+This tests that load and store opcodes verify that their arguments are
+actually of the appropriate types.
diff --git a/dx/tests/105-verify-load-store-ops/op_aaload.class b/dx/tests/105-verify-load-store-ops/op_aaload.class
new file mode 100644
index 0000000..a6a5cb6
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_aaload.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_aaload.j b/dx/tests/105-verify-load-store-ops/op_aaload.j
new file mode 100644
index 0000000..f77827e
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_aaload.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_aaload
+.super java/lang/Object
+
+.method public static test([F)V
+    .limit locals 2
+    .limit stack 3
+
+    aload_0
+    iconst_0
+    aaload
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_aastore.class b/dx/tests/105-verify-load-store-ops/op_aastore.class
new file mode 100644
index 0000000..14a0521
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_aastore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_aastore.j b/dx/tests/105-verify-load-store-ops/op_aastore.j
new file mode 100644
index 0000000..58e1576
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_aastore.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_aastore
+.super java/lang/Object
+
+.method public static test([I)V
+    .limit locals 2
+    .limit stack 4
+
+    aload_0
+    iconst_0
+    aconst_null
+    aastore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_aastore2.class b/dx/tests/105-verify-load-store-ops/op_aastore2.class
new file mode 100644
index 0000000..e57b1c7
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_aastore2.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_aastore2.j b/dx/tests/105-verify-load-store-ops/op_aastore2.j
new file mode 100644
index 0000000..0083800
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_aastore2.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2010 The Android Open Source Project
+;
+; 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.
+
+.class op_aastore2
+.super java/lang/Object
+
+.method public static test([I)V
+    .limit locals 2
+    .limit stack 4
+
+    aload_0
+    iconst_0
+    iconst_0
+    aastore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_astore.class b/dx/tests/105-verify-load-store-ops/op_astore.class
new file mode 100644
index 0000000..4316b72
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_astore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_astore.j b/dx/tests/105-verify-load-store-ops/op_astore.j
new file mode 100644
index 0000000..25131bf
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_astore.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_astore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    astore 5
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_astore_0.class b/dx/tests/105-verify-load-store-ops/op_astore_0.class
new file mode 100644
index 0000000..515d6ff
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_astore_0.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_astore_0.j b/dx/tests/105-verify-load-store-ops/op_astore_0.j
new file mode 100644
index 0000000..b509c12
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_astore_0.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_astore_0
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    astore_0
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_astore_1.class b/dx/tests/105-verify-load-store-ops/op_astore_1.class
new file mode 100644
index 0000000..d46f0ee
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_astore_1.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_astore_1.j b/dx/tests/105-verify-load-store-ops/op_astore_1.j
new file mode 100644
index 0000000..a6c1043
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_astore_1.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_astore_1
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    astore_1
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_astore_2.class b/dx/tests/105-verify-load-store-ops/op_astore_2.class
new file mode 100644
index 0000000..7f677e5
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_astore_2.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_astore_2.j b/dx/tests/105-verify-load-store-ops/op_astore_2.j
new file mode 100644
index 0000000..cb84ee8
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_astore_2.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_astore_2
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    astore_2
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_astore_3.class b/dx/tests/105-verify-load-store-ops/op_astore_3.class
new file mode 100644
index 0000000..9233809
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_astore_3.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_astore_3.j b/dx/tests/105-verify-load-store-ops/op_astore_3.j
new file mode 100644
index 0000000..c716ba2
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_astore_3.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_astore_3
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    astore_3
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_baload.class b/dx/tests/105-verify-load-store-ops/op_baload.class
new file mode 100644
index 0000000..3217eae
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_baload.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_baload.j b/dx/tests/105-verify-load-store-ops/op_baload.j
new file mode 100644
index 0000000..cfcaf74
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_baload.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_baload
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    iconst_0
+    baload
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_bastore.class b/dx/tests/105-verify-load-store-ops/op_bastore.class
new file mode 100644
index 0000000..ae78d4d
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_bastore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_bastore.j b/dx/tests/105-verify-load-store-ops/op_bastore.j
new file mode 100644
index 0000000..587fcd3
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_bastore.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_bastore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 4
+
+    fload_0
+    iconst_0
+    iconst_0
+    bastore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_caload.class b/dx/tests/105-verify-load-store-ops/op_caload.class
new file mode 100644
index 0000000..adc104a
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_caload.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_caload.j b/dx/tests/105-verify-load-store-ops/op_caload.j
new file mode 100644
index 0000000..ceaf09f
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_caload.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_caload
+.super java/lang/Object
+
+.method public static test(D)V
+    .limit locals 2
+    .limit stack 3
+
+    dload_0
+    iconst_0
+    caload
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_castore.class b/dx/tests/105-verify-load-store-ops/op_castore.class
new file mode 100644
index 0000000..5a062ab
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_castore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_castore.j b/dx/tests/105-verify-load-store-ops/op_castore.j
new file mode 100644
index 0000000..5bd493e
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_castore.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_castore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 4
+
+    fload_0
+    iconst_0
+    iconst_0
+    castore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_daload.class b/dx/tests/105-verify-load-store-ops/op_daload.class
new file mode 100644
index 0000000..a290ace
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_daload.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_daload.j b/dx/tests/105-verify-load-store-ops/op_daload.j
new file mode 100644
index 0000000..895d6be
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_daload.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_daload
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    iconst_0
+    daload
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_dastore.class b/dx/tests/105-verify-load-store-ops/op_dastore.class
new file mode 100644
index 0000000..f0b54c8
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_dastore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_dastore.j b/dx/tests/105-verify-load-store-ops/op_dastore.j
new file mode 100644
index 0000000..b102f79
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_dastore.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dastore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 4
+
+    fload_0
+    iconst_0
+    dconst_0
+    dastore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore.class b/dx/tests/105-verify-load-store-ops/op_dstore.class
new file mode 100644
index 0000000..6508e81
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_dstore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore.j b/dx/tests/105-verify-load-store-ops/op_dstore.j
new file mode 100644
index 0000000..d656a84
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_dstore.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dstore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    dstore 5
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore_0.class b/dx/tests/105-verify-load-store-ops/op_dstore_0.class
new file mode 100644
index 0000000..60b961c
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_dstore_0.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore_0.j b/dx/tests/105-verify-load-store-ops/op_dstore_0.j
new file mode 100644
index 0000000..cb3da3a
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_dstore_0.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dstore_0
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    dstore_0
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore_1.class b/dx/tests/105-verify-load-store-ops/op_dstore_1.class
new file mode 100644
index 0000000..bf2674c
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_dstore_1.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore_1.j b/dx/tests/105-verify-load-store-ops/op_dstore_1.j
new file mode 100644
index 0000000..45fcf9b
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_dstore_1.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dstore_1
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    dstore_1
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore_2.class b/dx/tests/105-verify-load-store-ops/op_dstore_2.class
new file mode 100644
index 0000000..c01885d
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_dstore_2.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore_2.j b/dx/tests/105-verify-load-store-ops/op_dstore_2.j
new file mode 100644
index 0000000..7c167d4
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_dstore_2.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dstore_2
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    dstore_2
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore_3.class b/dx/tests/105-verify-load-store-ops/op_dstore_3.class
new file mode 100644
index 0000000..7357fc6
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_dstore_3.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_dstore_3.j b/dx/tests/105-verify-load-store-ops/op_dstore_3.j
new file mode 100644
index 0000000..17222e0
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_dstore_3.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dstore_3
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    dstore_3
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_faload.class b/dx/tests/105-verify-load-store-ops/op_faload.class
new file mode 100644
index 0000000..b054589
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_faload.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_faload.j b/dx/tests/105-verify-load-store-ops/op_faload.j
new file mode 100644
index 0000000..1c17a8e
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_faload.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_faload
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    iconst_0
+    faload
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_fastore.class b/dx/tests/105-verify-load-store-ops/op_fastore.class
new file mode 100644
index 0000000..8215a44
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_fastore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_fastore.j b/dx/tests/105-verify-load-store-ops/op_fastore.j
new file mode 100644
index 0000000..799555e
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_fastore.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fastore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 4
+
+    fload_0
+    iconst_0
+    fconst_0
+    fastore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore.class b/dx/tests/105-verify-load-store-ops/op_fstore.class
new file mode 100644
index 0000000..ce742f1
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_fstore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore.j b/dx/tests/105-verify-load-store-ops/op_fstore.j
new file mode 100644
index 0000000..5c61ebe
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_fstore.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fstore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    iconst_0
+    fstore 5
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore_0.class b/dx/tests/105-verify-load-store-ops/op_fstore_0.class
new file mode 100644
index 0000000..27cfba4
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_fstore_0.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore_0.j b/dx/tests/105-verify-load-store-ops/op_fstore_0.j
new file mode 100644
index 0000000..d3033e9
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_fstore_0.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fstore_0
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    iconst_0
+    fstore_0
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore_1.class b/dx/tests/105-verify-load-store-ops/op_fstore_1.class
new file mode 100644
index 0000000..dadb800
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_fstore_1.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore_1.j b/dx/tests/105-verify-load-store-ops/op_fstore_1.j
new file mode 100644
index 0000000..0abca8f
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_fstore_1.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fstore_1
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    iconst_0
+    fstore_1
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore_2.class b/dx/tests/105-verify-load-store-ops/op_fstore_2.class
new file mode 100644
index 0000000..4ad7a24
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_fstore_2.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore_2.j b/dx/tests/105-verify-load-store-ops/op_fstore_2.j
new file mode 100644
index 0000000..5cd1ebc
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_fstore_2.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fstore_2
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    iconst_0
+    fstore_2
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore_3.class b/dx/tests/105-verify-load-store-ops/op_fstore_3.class
new file mode 100644
index 0000000..e8c9ec7
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_fstore_3.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_fstore_3.j b/dx/tests/105-verify-load-store-ops/op_fstore_3.j
new file mode 100644
index 0000000..a232307
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_fstore_3.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_fstore_3
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    iconst_0
+    fstore_3
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_iaload.class b/dx/tests/105-verify-load-store-ops/op_iaload.class
new file mode 100644
index 0000000..7dc26a4
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_iaload.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_iaload.j b/dx/tests/105-verify-load-store-ops/op_iaload.j
new file mode 100644
index 0000000..3face08
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_iaload.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_iaload
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    iconst_0
+    iaload
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_iastore.class b/dx/tests/105-verify-load-store-ops/op_iastore.class
new file mode 100644
index 0000000..e78c7a5
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_iastore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_iastore.j b/dx/tests/105-verify-load-store-ops/op_iastore.j
new file mode 100644
index 0000000..d090e37
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_iastore.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_iastore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 4
+
+    fload_0
+    iconst_0
+    iconst_0
+    iastore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_istore.class b/dx/tests/105-verify-load-store-ops/op_istore.class
new file mode 100644
index 0000000..0a14831
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_istore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_istore.j b/dx/tests/105-verify-load-store-ops/op_istore.j
new file mode 100644
index 0000000..138d709
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_istore.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_istore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    istore 5
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_istore_0.class b/dx/tests/105-verify-load-store-ops/op_istore_0.class
new file mode 100644
index 0000000..ba9f73f
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_istore_0.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_istore_0.j b/dx/tests/105-verify-load-store-ops/op_istore_0.j
new file mode 100644
index 0000000..2644c3d
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_istore_0.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_istore_0
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    istore_0
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_istore_1.class b/dx/tests/105-verify-load-store-ops/op_istore_1.class
new file mode 100644
index 0000000..1f02735
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_istore_1.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_istore_1.j b/dx/tests/105-verify-load-store-ops/op_istore_1.j
new file mode 100644
index 0000000..03534ee
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_istore_1.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_istore_1
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    istore_1
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_istore_2.class b/dx/tests/105-verify-load-store-ops/op_istore_2.class
new file mode 100644
index 0000000..649af42
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_istore_2.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_istore_2.j b/dx/tests/105-verify-load-store-ops/op_istore_2.j
new file mode 100644
index 0000000..e1a80b3
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_istore_2.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_istore_2
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    istore_2
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_istore_3.class b/dx/tests/105-verify-load-store-ops/op_istore_3.class
new file mode 100644
index 0000000..a344a60
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_istore_3.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_istore_3.j b/dx/tests/105-verify-load-store-ops/op_istore_3.j
new file mode 100644
index 0000000..43c226f
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_istore_3.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_istore_3
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    istore_3
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_laload.class b/dx/tests/105-verify-load-store-ops/op_laload.class
new file mode 100644
index 0000000..f19ca90
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_laload.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_laload.j b/dx/tests/105-verify-load-store-ops/op_laload.j
new file mode 100644
index 0000000..3143604
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_laload.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_laload
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    iconst_0
+    laload
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_lastore.class b/dx/tests/105-verify-load-store-ops/op_lastore.class
new file mode 100644
index 0000000..b94e3c4
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_lastore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_lastore.j b/dx/tests/105-verify-load-store-ops/op_lastore.j
new file mode 100644
index 0000000..b7ea069
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_lastore.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lastore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 4
+
+    fload_0
+    iconst_0
+    lconst_0
+    lastore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore.class b/dx/tests/105-verify-load-store-ops/op_lstore.class
new file mode 100644
index 0000000..0aafe53
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_lstore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore.j b/dx/tests/105-verify-load-store-ops/op_lstore.j
new file mode 100644
index 0000000..fde6974
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_lstore.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lstore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    lstore 5
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore_0.class b/dx/tests/105-verify-load-store-ops/op_lstore_0.class
new file mode 100644
index 0000000..97a6780
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_lstore_0.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore_0.j b/dx/tests/105-verify-load-store-ops/op_lstore_0.j
new file mode 100644
index 0000000..e98eab4
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_lstore_0.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lstore_0
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    lstore_0
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore_1.class b/dx/tests/105-verify-load-store-ops/op_lstore_1.class
new file mode 100644
index 0000000..44de3ed
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_lstore_1.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore_1.j b/dx/tests/105-verify-load-store-ops/op_lstore_1.j
new file mode 100644
index 0000000..0e2291a
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_lstore_1.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lstore_1
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    lstore_1
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore_2.class b/dx/tests/105-verify-load-store-ops/op_lstore_2.class
new file mode 100644
index 0000000..86f5cfe
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_lstore_2.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore_2.j b/dx/tests/105-verify-load-store-ops/op_lstore_2.j
new file mode 100644
index 0000000..a84702d
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_lstore_2.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lstore_2
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    dconst_0
+    lstore_2
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore_3.class b/dx/tests/105-verify-load-store-ops/op_lstore_3.class
new file mode 100644
index 0000000..021abf4
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_lstore_3.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_lstore_3.j b/dx/tests/105-verify-load-store-ops/op_lstore_3.j
new file mode 100644
index 0000000..c35ace8
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_lstore_3.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_lstore_3
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 6
+    .limit stack 4
+
+    fconst_0
+    lstore_3
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_saload.class b/dx/tests/105-verify-load-store-ops/op_saload.class
new file mode 100644
index 0000000..cd5f1ed
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_saload.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_saload.j b/dx/tests/105-verify-load-store-ops/op_saload.j
new file mode 100644
index 0000000..4a80939
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_saload.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_saload
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 3
+
+    fload_0
+    iconst_0
+    saload
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/op_sastore.class b/dx/tests/105-verify-load-store-ops/op_sastore.class
new file mode 100644
index 0000000..d6db165
Binary files /dev/null and b/dx/tests/105-verify-load-store-ops/op_sastore.class differ
diff --git a/dx/tests/105-verify-load-store-ops/op_sastore.j b/dx/tests/105-verify-load-store-ops/op_sastore.j
new file mode 100644
index 0000000..c97dd66
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/op_sastore.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_sastore
+.super java/lang/Object
+
+.method public static test(F)V
+    .limit locals 2
+    .limit stack 4
+
+    fload_0
+    iconst_0
+    iconst_0
+    sastore
+    return
+.end method
diff --git a/dx/tests/105-verify-load-store-ops/run b/dx/tests/105-verify-load-store-ops/run
new file mode 100644
index 0000000..e29a677
--- /dev/null
+++ b/dx/tests/105-verify-load-store-ops/run
@@ -0,0 +1,68 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    dx --debug --dex op_"$1".class >/dev/null 2>&1
+    if [ "$?" = "0" ]; then
+        dx --debug --dex --dump-method="op_$1.test*" op_"$1".class
+    else
+        echo "$1: expected failure occurred"
+    fi
+}
+
+oneop aaload
+oneop aastore
+oneop aastore2 # second aastore test
+oneop astore
+oneop astore_0
+oneop astore_1
+oneop astore_2
+oneop astore_3
+oneop baload
+oneop bastore
+oneop caload
+oneop castore
+oneop daload
+oneop dastore
+oneop dstore
+oneop dstore_0
+oneop dstore_1
+oneop dstore_2
+oneop dstore_3
+oneop faload
+oneop fastore
+oneop fstore
+oneop fstore_0
+oneop fstore_1
+oneop fstore_2
+oneop fstore_3
+oneop iaload
+oneop iastore
+oneop istore
+oneop istore_0
+oneop istore_1
+oneop istore_2
+oneop istore_3
+oneop laload
+oneop lastore
+oneop lstore
+oneop lstore_0
+oneop lstore_1
+oneop lstore_2
+oneop lstore_3
+oneop saload
+oneop sastore
diff --git a/dx/tests/106-verify-object-ops/build b/dx/tests/106-verify-object-ops/build
new file mode 100644
index 0000000..a2b7221
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/build
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    jasmin -d . op_"$1".j
+}
+
+oneop anewarray
+oneop arraylength
+oneop athrow
+oneop checkcast
+oneop getfield
+oneop instanceof
+oneop invokeinterface
+oneop invokespecial
+oneop invokestatic
+oneop invokevirtual
+oneop monitorenter
+oneop monitorexit
+oneop multianewarray
+oneop newarray
+oneop putfield
+oneop putstatic
diff --git a/dx/tests/106-verify-object-ops/expected.txt b/dx/tests/106-verify-object-ops/expected.txt
new file mode 100644
index 0000000..46eff2a
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/expected.txt
@@ -0,0 +1,16 @@
+anewarray: expected failure occurred
+arraylength: expected failure occurred
+athrow: expected failure occurred
+checkcast: expected failure occurred
+getfield: expected failure occurred
+instanceof: expected failure occurred
+invokeinterface: expected failure occurred
+invokespecial: expected failure occurred
+invokestatic: expected failure occurred
+invokevirtual: expected failure occurred
+monitorenter: expected failure occurred
+monitorexit: expected failure occurred
+multianewarray: expected failure occurred
+newarray: expected failure occurred
+putfield: expected failure occurred
+putstatic: expected failure occurred
diff --git a/dx/tests/106-verify-object-ops/info.txt b/dx/tests/106-verify-object-ops/info.txt
new file mode 100644
index 0000000..85295d7
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/info.txt
@@ -0,0 +1,2 @@
+This tests that the various "objecty" opcodes verify that their
+arguments are actually of the appropriate types.
diff --git a/dx/tests/106-verify-object-ops/op_anewarray.class b/dx/tests/106-verify-object-ops/op_anewarray.class
new file mode 100644
index 0000000..0bdab10
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_anewarray.class differ
diff --git a/dx/tests/106-verify-object-ops/op_anewarray.j b/dx/tests/106-verify-object-ops/op_anewarray.j
new file mode 100644
index 0000000..348acbd
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_anewarray.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_anewarray
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    anewarray java/lang/Object
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_arraylength.class b/dx/tests/106-verify-object-ops/op_arraylength.class
new file mode 100644
index 0000000..4507e87
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_arraylength.class differ
diff --git a/dx/tests/106-verify-object-ops/op_arraylength.j b/dx/tests/106-verify-object-ops/op_arraylength.j
new file mode 100644
index 0000000..df5af82
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_arraylength.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_arraylength
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    arraylength
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_athrow.class b/dx/tests/106-verify-object-ops/op_athrow.class
new file mode 100644
index 0000000..c452d15
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_athrow.class differ
diff --git a/dx/tests/106-verify-object-ops/op_athrow.j b/dx/tests/106-verify-object-ops/op_athrow.j
new file mode 100644
index 0000000..a5a5be3
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_athrow.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_athrow
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    athrow
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_checkcast.class b/dx/tests/106-verify-object-ops/op_checkcast.class
new file mode 100644
index 0000000..10485b7
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_checkcast.class differ
diff --git a/dx/tests/106-verify-object-ops/op_checkcast.j b/dx/tests/106-verify-object-ops/op_checkcast.j
new file mode 100644
index 0000000..d921ec4
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_checkcast.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_checkcast
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    checkcast java/lang/Object
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_getfield.class b/dx/tests/106-verify-object-ops/op_getfield.class
new file mode 100644
index 0000000..f6c2f56
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_getfield.class differ
diff --git a/dx/tests/106-verify-object-ops/op_getfield.j b/dx/tests/106-verify-object-ops/op_getfield.j
new file mode 100644
index 0000000..4d5f782
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_getfield.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_getfield
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    getfield blort/x I
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_instanceof.class b/dx/tests/106-verify-object-ops/op_instanceof.class
new file mode 100644
index 0000000..aa73dfb
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_instanceof.class differ
diff --git a/dx/tests/106-verify-object-ops/op_instanceof.j b/dx/tests/106-verify-object-ops/op_instanceof.j
new file mode 100644
index 0000000..8a938f5
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_instanceof.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_instanceof
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    instanceof java/lang/Object
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_invokeinterface.class b/dx/tests/106-verify-object-ops/op_invokeinterface.class
new file mode 100644
index 0000000..171cf90
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_invokeinterface.class differ
diff --git a/dx/tests/106-verify-object-ops/op_invokeinterface.j b/dx/tests/106-verify-object-ops/op_invokeinterface.j
new file mode 100644
index 0000000..2f1528f
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_invokeinterface.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_invokeinterface
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    invokeinterface blort/x()V 1
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_invokespecial.class b/dx/tests/106-verify-object-ops/op_invokespecial.class
new file mode 100644
index 0000000..bc98da1
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_invokespecial.class differ
diff --git a/dx/tests/106-verify-object-ops/op_invokespecial.j b/dx/tests/106-verify-object-ops/op_invokespecial.j
new file mode 100644
index 0000000..87baffc
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_invokespecial.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_invokespecial
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    invokespecial blort/x()V
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_invokestatic.class b/dx/tests/106-verify-object-ops/op_invokestatic.class
new file mode 100644
index 0000000..e035038
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_invokestatic.class differ
diff --git a/dx/tests/106-verify-object-ops/op_invokestatic.j b/dx/tests/106-verify-object-ops/op_invokestatic.j
new file mode 100644
index 0000000..80247bd
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_invokestatic.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_invokestatic
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    invokestatic blort/x(I)V
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_invokevirtual.class b/dx/tests/106-verify-object-ops/op_invokevirtual.class
new file mode 100644
index 0000000..f54b675
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_invokevirtual.class differ
diff --git a/dx/tests/106-verify-object-ops/op_invokevirtual.j b/dx/tests/106-verify-object-ops/op_invokevirtual.j
new file mode 100644
index 0000000..d7ba9b5
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_invokevirtual.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_invokevirtual
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    invokevirtual blort/x()V
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_monitorenter.class b/dx/tests/106-verify-object-ops/op_monitorenter.class
new file mode 100644
index 0000000..d67d49f
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_monitorenter.class differ
diff --git a/dx/tests/106-verify-object-ops/op_monitorenter.j b/dx/tests/106-verify-object-ops/op_monitorenter.j
new file mode 100644
index 0000000..95e23d8
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_monitorenter.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_monitorenter
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    monitorenter
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_monitorexit.class b/dx/tests/106-verify-object-ops/op_monitorexit.class
new file mode 100644
index 0000000..6079280
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_monitorexit.class differ
diff --git a/dx/tests/106-verify-object-ops/op_monitorexit.j b/dx/tests/106-verify-object-ops/op_monitorexit.j
new file mode 100644
index 0000000..50e5fe2
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_monitorexit.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_monitorexit
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    monitorexit
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_multianewarray.class b/dx/tests/106-verify-object-ops/op_multianewarray.class
new file mode 100644
index 0000000..67bb865
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_multianewarray.class differ
diff --git a/dx/tests/106-verify-object-ops/op_multianewarray.j b/dx/tests/106-verify-object-ops/op_multianewarray.j
new file mode 100644
index 0000000..d02f474
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_multianewarray.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_multianewarray
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    iconst_0
+    multianewarray [[[I 2
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_newarray.class b/dx/tests/106-verify-object-ops/op_newarray.class
new file mode 100644
index 0000000..e29d662
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_newarray.class differ
diff --git a/dx/tests/106-verify-object-ops/op_newarray.j b/dx/tests/106-verify-object-ops/op_newarray.j
new file mode 100644
index 0000000..16ab256
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_newarray.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_newarray
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    newarray short
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_putfield.class b/dx/tests/106-verify-object-ops/op_putfield.class
new file mode 100644
index 0000000..5cc418d
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_putfield.class differ
diff --git a/dx/tests/106-verify-object-ops/op_putfield.j b/dx/tests/106-verify-object-ops/op_putfield.j
new file mode 100644
index 0000000..eb33fc9
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_putfield.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_putfield
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    iconst_0
+    putfield blort/x I
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/op_putstatic.class b/dx/tests/106-verify-object-ops/op_putstatic.class
new file mode 100644
index 0000000..47834fc
Binary files /dev/null and b/dx/tests/106-verify-object-ops/op_putstatic.class differ
diff --git a/dx/tests/106-verify-object-ops/op_putstatic.j b/dx/tests/106-verify-object-ops/op_putstatic.j
new file mode 100644
index 0000000..221f08b
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/op_putstatic.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_putstatic
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 3
+
+    fconst_0
+    putstatic blort/x I
+    return
+.end method
diff --git a/dx/tests/106-verify-object-ops/run b/dx/tests/106-verify-object-ops/run
new file mode 100644
index 0000000..39534d4
--- /dev/null
+++ b/dx/tests/106-verify-object-ops/run
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    dx --debug --dex op_"$1".class >/dev/null 2>&1
+    if [ "$?" = "0" ]; then
+        dx --debug --dex --dump-method="op_$1.test*" op_"$1".class
+    else
+        echo "$1: expected failure occurred"
+    fi
+}
+
+oneop anewarray
+oneop arraylength
+oneop athrow
+oneop checkcast
+oneop getfield
+oneop instanceof
+oneop invokeinterface
+oneop invokespecial
+oneop invokestatic
+oneop invokevirtual
+oneop monitorenter
+oneop monitorexit
+oneop multianewarray
+oneop newarray
+oneop putfield
+oneop putstatic
diff --git a/dx/tests/107-verify-stack-ops/build b/dx/tests/107-verify-stack-ops/build
new file mode 100644
index 0000000..d2d5639
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/build
@@ -0,0 +1,40 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+set -e
+
+function oneop()
+{
+    jasmin -d . op_"$1".j
+}
+
+oneop dup
+oneop dup_x1_case1
+oneop dup_x1_case2
+oneop dup_x2_case1
+oneop dup_x2_case2
+oneop dup_x2_case3
+oneop dup2
+oneop dup2_x1_case1
+oneop dup2_x1_case2
+oneop dup2_x1_case3
+oneop dup2_x2_case1
+oneop dup2_x2_case2
+oneop dup2_x2_case3
+oneop pop
+oneop pop2
+oneop swap_case1
+oneop swap_case2
diff --git a/dx/tests/107-verify-stack-ops/expected.txt b/dx/tests/107-verify-stack-ops/expected.txt
new file mode 100644
index 0000000..d4a81b6
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/expected.txt
@@ -0,0 +1,17 @@
+dup: expected failure occurred
+dup_x1_case1: expected failure occurred
+dup_x1_case2: expected failure occurred
+dup_x2_case1: expected failure occurred
+dup_x2_case2: expected failure occurred
+dup_x2_case3: expected failure occurred
+dup2: expected failure occurred
+dup2_x1_case1: expected failure occurred
+dup2_x1_case2: expected failure occurred
+dup2_x1_case3: expected failure occurred
+dup2_x2_case1: expected failure occurred
+dup2_x2_case2: expected failure occurred
+dup2_x2_case3: expected failure occurred
+pop: expected failure occurred
+pop2: expected failure occurred
+swap_case1: expected failure occurred
+swap_case2: expected failure occurred
diff --git a/dx/tests/107-verify-stack-ops/info.txt b/dx/tests/107-verify-stack-ops/info.txt
new file mode 100644
index 0000000..c489ace
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/info.txt
@@ -0,0 +1,2 @@
+This tests that the various stack manipulation opcodes verify that their
+arguments are actually of the appropriate categories.
diff --git a/dx/tests/107-verify-stack-ops/op_dup.class b/dx/tests/107-verify-stack-ops/op_dup.class
new file mode 100644
index 0000000..5e28779
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup.j b/dx/tests/107-verify-stack-ops/op_dup.j
new file mode 100644
index 0000000..6c9ebc2
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    dup
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup2.class b/dx/tests/107-verify-stack-ops/op_dup2.class
new file mode 100644
index 0000000..7ac2b26
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup2.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup2.j b/dx/tests/107-verify-stack-ops/op_dup2.j
new file mode 100644
index 0000000..d17ce20
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup2.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup2
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    iconst_0
+    dup2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_case1.j b/dx/tests/107-verify-stack-ops/op_dup2_case1.j
new file mode 100644
index 0000000..7b014f7
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup2_case1.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup2_case1
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    iconst_0
+    dup2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x1_case1.class b/dx/tests/107-verify-stack-ops/op_dup2_x1_case1.class
new file mode 100644
index 0000000..7cefe18
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup2_x1_case1.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x1_case1.j b/dx/tests/107-verify-stack-ops/op_dup2_x1_case1.j
new file mode 100644
index 0000000..26667f0
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup2_x1_case1.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup2_x1_case1
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 8
+
+    dconst_0
+    iconst_0
+    iconst_0
+    dup2_x1
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x1_case2.class b/dx/tests/107-verify-stack-ops/op_dup2_x1_case2.class
new file mode 100644
index 0000000..e3c9632
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup2_x1_case2.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x1_case2.j b/dx/tests/107-verify-stack-ops/op_dup2_x1_case2.j
new file mode 100644
index 0000000..35e97c4
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup2_x1_case2.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup2_x1_case2
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 8
+
+    iconst_0
+    dconst_0
+    iconst_0
+    dup2_x1
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x1_case3.class b/dx/tests/107-verify-stack-ops/op_dup2_x1_case3.class
new file mode 100644
index 0000000..1a03b8c
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup2_x1_case3.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x1_case3.j b/dx/tests/107-verify-stack-ops/op_dup2_x1_case3.j
new file mode 100644
index 0000000..d15ccc3
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup2_x1_case3.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup2_x1_case3
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 8
+
+    iconst_0
+    dconst_0
+    dconst_0
+    dup2_x1
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x2_case1.class b/dx/tests/107-verify-stack-ops/op_dup2_x2_case1.class
new file mode 100644
index 0000000..a14d9b3
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup2_x2_case1.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x2_case1.j b/dx/tests/107-verify-stack-ops/op_dup2_x2_case1.j
new file mode 100644
index 0000000..e2538a0
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup2_x2_case1.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup2_x2_case1
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 8
+
+    dconst_0
+    iconst_0
+    iconst_0
+    iconst_0
+    dup2_x2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x2_case2.class b/dx/tests/107-verify-stack-ops/op_dup2_x2_case2.class
new file mode 100644
index 0000000..d01b428
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup2_x2_case2.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x2_case2.j b/dx/tests/107-verify-stack-ops/op_dup2_x2_case2.j
new file mode 100644
index 0000000..1e2645c
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup2_x2_case2.j
@@ -0,0 +1,28 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup2_x2_case2
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 8
+
+    iconst_0
+    iconst_0
+    dconst_0
+    iconst_0
+    dup2_x2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x2_case3.class b/dx/tests/107-verify-stack-ops/op_dup2_x2_case3.class
new file mode 100644
index 0000000..0076965
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup2_x2_case3.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup2_x2_case3.j b/dx/tests/107-verify-stack-ops/op_dup2_x2_case3.j
new file mode 100644
index 0000000..dad31e5
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup2_x2_case3.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup2_x2_case3
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 8
+
+    dconst_0
+    iconst_0
+    dconst_0
+    dup2_x2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x1_case1.class b/dx/tests/107-verify-stack-ops/op_dup_x1_case1.class
new file mode 100644
index 0000000..4abdc2d
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup_x1_case1.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x1_case1.j b/dx/tests/107-verify-stack-ops/op_dup_x1_case1.j
new file mode 100644
index 0000000..037b0f8
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup_x1_case1.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup_x1_case1
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    iconst_0
+    dconst_0
+    dup_x1
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x1_case2.class b/dx/tests/107-verify-stack-ops/op_dup_x1_case2.class
new file mode 100644
index 0000000..3f9bd3e
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup_x1_case2.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x1_case2.j b/dx/tests/107-verify-stack-ops/op_dup_x1_case2.j
new file mode 100644
index 0000000..fa52b16
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup_x1_case2.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup_x1_case2
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    iconst_0
+    dup_x1
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x2_case1.class b/dx/tests/107-verify-stack-ops/op_dup_x2_case1.class
new file mode 100644
index 0000000..8cb8f9d
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup_x2_case1.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x2_case1.j b/dx/tests/107-verify-stack-ops/op_dup_x2_case1.j
new file mode 100644
index 0000000..7c4e89c
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup_x2_case1.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup_x2_case1
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    iconst_0
+    iconst_0
+    dup_x2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x2_case2.class b/dx/tests/107-verify-stack-ops/op_dup_x2_case2.class
new file mode 100644
index 0000000..5ae36ef
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup_x2_case2.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x2_case2.j b/dx/tests/107-verify-stack-ops/op_dup_x2_case2.j
new file mode 100644
index 0000000..c4aa545
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup_x2_case2.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup_x2_case2
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    iconst_0
+    iconst_0
+    dconst_0
+    dup_x2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x2_case3.class b/dx/tests/107-verify-stack-ops/op_dup_x2_case3.class
new file mode 100644
index 0000000..a14f0f2
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_dup_x2_case3.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_dup_x2_case3.j b/dx/tests/107-verify-stack-ops/op_dup_x2_case3.j
new file mode 100644
index 0000000..f920d8c
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_dup_x2_case3.j
@@ -0,0 +1,27 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_dup_x2_case3
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    iconst_0
+    dconst_0
+    dconst_0
+    dup_x2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_pop.class b/dx/tests/107-verify-stack-ops/op_pop.class
new file mode 100644
index 0000000..2a607ec
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_pop.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_pop.j b/dx/tests/107-verify-stack-ops/op_pop.j
new file mode 100644
index 0000000..1b74e2c
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_pop.j
@@ -0,0 +1,25 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_pop
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    pop
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_pop2.class b/dx/tests/107-verify-stack-ops/op_pop2.class
new file mode 100644
index 0000000..9a7d850
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_pop2.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_pop2.j b/dx/tests/107-verify-stack-ops/op_pop2.j
new file mode 100644
index 0000000..ef2d122
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_pop2.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_pop2
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    iconst_0
+    pop2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_pop2_case2.j b/dx/tests/107-verify-stack-ops/op_pop2_case2.j
new file mode 100644
index 0000000..f9d6ea3
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_pop2_case2.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_pop2_case2
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    iconst_0
+    pop2
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_swap_case1.class b/dx/tests/107-verify-stack-ops/op_swap_case1.class
new file mode 100644
index 0000000..c808a36
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_swap_case1.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_swap_case1.j b/dx/tests/107-verify-stack-ops/op_swap_case1.j
new file mode 100644
index 0000000..f6b4ab7
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_swap_case1.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_swap_case1
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    dconst_0
+    iconst_0
+    swap
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/op_swap_case2.class b/dx/tests/107-verify-stack-ops/op_swap_case2.class
new file mode 100644
index 0000000..ad42c29
Binary files /dev/null and b/dx/tests/107-verify-stack-ops/op_swap_case2.class differ
diff --git a/dx/tests/107-verify-stack-ops/op_swap_case2.j b/dx/tests/107-verify-stack-ops/op_swap_case2.j
new file mode 100644
index 0000000..6e0fcba
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/op_swap_case2.j
@@ -0,0 +1,26 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class op_swap_case2
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 2
+    .limit stack 6
+
+    iconst_0
+    dconst_0
+    swap
+    return
+.end method
diff --git a/dx/tests/107-verify-stack-ops/run b/dx/tests/107-verify-stack-ops/run
new file mode 100644
index 0000000..be46f0d
--- /dev/null
+++ b/dx/tests/107-verify-stack-ops/run
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+function oneop()
+{
+    dx --debug --dex op_"$1".class >/dev/null 2>&1
+    if [ "$?" = "0" ]; then
+        dx --debug --dex --dump-method="op_$1.test*" op_"$1".class
+    else
+        echo "$1: expected failure occurred"
+    fi
+}
+
+oneop dup
+oneop dup_x1_case1
+oneop dup_x1_case2
+oneop dup_x2_case1
+oneop dup_x2_case2
+oneop dup_x2_case3
+oneop dup2
+oneop dup2_x1_case1
+oneop dup2_x1_case2
+oneop dup2_x1_case3
+oneop dup2_x2_case1
+oneop dup2_x2_case2
+oneop dup2_x2_case3
+oneop pop
+oneop pop2
+oneop swap_case1
+oneop swap_case2
diff --git a/dx/tests/108-string-annotation/Blort.class b/dx/tests/108-string-annotation/Blort.class
new file mode 100644
index 0000000..1a5a0c2
Binary files /dev/null and b/dx/tests/108-string-annotation/Blort.class differ
diff --git a/dx/tests/108-string-annotation/Blort.java b/dx/tests/108-string-annotation/Blort.java
new file mode 100644
index 0000000..9bb52e4
--- /dev/null
+++ b/dx/tests/108-string-annotation/Blort.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort {
+    @Frotz(name = "grue")
+    public static void testSingle() {
+        // This space intentionally left blank.
+    }
+
+    @Fizmo(names = "gruesome")
+    public static void testArray1() {
+        // This space intentionally left blank.
+    }
+
+    @Fizmo(names = {"awful", "awesome"})
+    public static void testArray2() {
+        // This space intentionally left blank.
+    }
+}
diff --git a/dx/tests/108-string-annotation/Fizmo.class b/dx/tests/108-string-annotation/Fizmo.class
new file mode 100644
index 0000000..338ce3b
Binary files /dev/null and b/dx/tests/108-string-annotation/Fizmo.class differ
diff --git a/dx/tests/108-string-annotation/Fizmo.java b/dx/tests/108-string-annotation/Fizmo.java
new file mode 100644
index 0000000..a20bba0
--- /dev/null
+++ b/dx/tests/108-string-annotation/Fizmo.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public @interface Fizmo {
+    String[] names();
+}
diff --git a/dx/tests/108-string-annotation/Frotz.class b/dx/tests/108-string-annotation/Frotz.class
new file mode 100644
index 0000000..d76d1d0
Binary files /dev/null and b/dx/tests/108-string-annotation/Frotz.class differ
diff --git a/dx/tests/108-string-annotation/Frotz.java b/dx/tests/108-string-annotation/Frotz.java
new file mode 100644
index 0000000..3ad5426
--- /dev/null
+++ b/dx/tests/108-string-annotation/Frotz.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public @interface Frotz {
+    String name();
+}
diff --git a/dx/tests/108-string-annotation/build b/dx/tests/108-string-annotation/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/108-string-annotation/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/108-string-annotation/expected.txt b/dx/tests/108-string-annotation/expected.txt
new file mode 100644
index 0000000..a4c4af4
--- /dev/null
+++ b/dx/tests/108-string-annotation/expected.txt
@@ -0,0 +1,12 @@
+
+  elements[0]:
+    name
+    value: utf8 grue
+
+  elements[0]:
+    names
+    value: array {gruesome}
+
+  elements[0]:
+    names
+    value: array {awful, awesome}
diff --git a/dx/tests/108-string-annotation/info.txt b/dx/tests/108-string-annotation/info.txt
new file mode 100644
index 0000000..6c85834
--- /dev/null
+++ b/dx/tests/108-string-annotation/info.txt
@@ -0,0 +1,6 @@
+This is a smoke test of dex conversion, which checks to see that
+string annotations get represented reasonably.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/108-string-annotation/run b/dx/tests/108-string-annotation/run
new file mode 100644
index 0000000..cf13258
--- /dev/null
+++ b/dx/tests/108-string-annotation/run
@@ -0,0 +1,46 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-to=- *.class | cut -f 2 -d '|' | awk '
+
+BEGIN {
+    dumping = 0;
+}
+
+/annotation$/ {
+    dumping = 1;
+    printf("\n");
+    next;
+}
+
+/^[ ]*$/ {
+    dumping = 0;
+    next;
+}
+
+dumping && /^  elements/ {
+    print;
+}
+
+dumping && /^    name_idx/ {
+    printf("    %s\n", $4);
+}
+
+dumping && /^    value/ {
+    print;
+}
+'
diff --git a/dx/tests/109-int-branch/blort.class b/dx/tests/109-int-branch/blort.class
new file mode 100644
index 0000000..e55843e
Binary files /dev/null and b/dx/tests/109-int-branch/blort.class differ
diff --git a/dx/tests/109-int-branch/blort.j b/dx/tests/109-int-branch/blort.j
new file mode 100644
index 0000000..8517177
--- /dev/null
+++ b/dx/tests/109-int-branch/blort.j
@@ -0,0 +1,99 @@
+; Copyright (C) 2008 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public static test1(ZBCSI[I)V
+    .limit locals 6
+    .limit stack 3
+
+    iload_0
+    iload_1
+    if_icmpeq zorch
+
+    iload_2
+    iload_3
+    if_icmpne zorch
+
+    iload 4
+    aload 5
+    iconst_0
+    iaload
+    if_icmplt zorch
+
+    aload 5
+    iconst_0
+    iaload
+    iload_0
+    if_icmpgt zorch
+
+    iload 4
+    iload_1
+    if_icmpge zorch
+
+    nop
+
+zorch:
+    return
+.end method
+
+.method public static test2(I)Ljava/lang/Object;
+    .limit locals 2
+    .limit stack 3
+
+    aconst_null
+    astore 1
+
+    aload_1
+    iconst_0
+    iaload
+    iload_0
+    if_icmpge zorch
+
+    nop
+
+zorch:
+    aconst_null
+    areturn
+.end method
+
+.method public static test3(I[I)Ljava/lang/Object;
+    .limit locals 3
+    .limit stack 3
+
+    aconst_null
+    astore 2
+
+frotz:
+    aload_2
+    ifnonnull fizmo
+
+    aload_1
+    astore_2
+    goto frotz
+
+fizmo:
+    aload_2
+    iconst_0
+    iaload
+    iload_0
+    if_icmpge zorch
+
+    nop
+
+zorch:
+    aconst_null
+    areturn
+.end method
diff --git a/dx/tests/109-int-branch/build b/dx/tests/109-int-branch/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/109-int-branch/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/109-int-branch/expected.txt b/dx/tests/109-int-branch/expected.txt
new file mode 100644
index 0000000..a279c5b
--- /dev/null
+++ b/dx/tests/109-int-branch/expected.txt
@@ -0,0 +1,66 @@
+blort.test1:(ZBCSI[I)V:
+regs: 000f; ins: 0006; outs: 0000
+  0000: move v0, v9
+  0001: move v1, v10
+  0002: move v2, v11
+  0003: move v3, v12
+  0004: move v4, v13
+  0005: move-object v5, v14
+  0006: move v6, v0
+  0007: move v7, v1
+  0008: if-eq v6, v7, 0021 // +0019
+  000a: move v6, v2
+  000b: move v7, v3
+  000c: if-ne v6, v7, 0021 // +0015
+  000e: move v6, v4
+  000f: move-object v7, v5
+  0010: const/4 v8, #int 0 // #0
+  0011: aget v7, v7, v8
+  0013: if-lt v6, v7, 0021 // +000e
+  0015: move-object v6, v5
+  0016: const/4 v7, #int 0 // #0
+  0017: aget v6, v6, v7
+  0019: move v7, v0
+  001a: if-gt v6, v7, 0021 // +0007
+  001c: move v6, v4
+  001d: move v7, v1
+  001e: if-ge v6, v7, 0021 // +0003
+  0020: nop
+  0021: return-void
+  source file: "blort.j"
+blort.test2:(I)Ljava/lang/Object;:
+regs: 0005; ins: 0001; outs: 0000
+  0000: move v0, v4
+  0001: const/4 v2, #null // #0
+  0002: move-object v1, v2
+  0003: move-object v2, v1
+  0004: const/4 v3, #int 0 // #0
+  0005: aget v2, v2, v3
+  0007: move v3, v0
+  0008: if-ge v2, v3, 000b // +0003
+  000a: nop
+  000b: const/4 v2, #null // #0
+  000c: move-object v0, v2
+  000d: return-object v0
+  source file: "blort.j"
+blort.test3:(I[I)Ljava/lang/Object;:
+regs: 0007; ins: 0002; outs: 0000
+  0000: move v0, v5
+  0001: move-object v1, v6
+  0002: const/4 v3, #null // #0
+  0003: move-object v2, v3
+  0004: move-object v3, v2
+  0005: if-nez v3, 000a // +0005
+  0007: move-object v3, v1
+  0008: move-object v2, v3
+  0009: goto 0004 // -0005
+  000a: move-object v3, v2
+  000b: const/4 v4, #int 0 // #0
+  000c: aget v3, v3, v4
+  000e: move v4, v0
+  000f: if-ge v3, v4, 0012 // +0003
+  0011: nop
+  0012: const/4 v3, #null // #0
+  0013: move-object v0, v3
+  0014: return-object v0
+  source file: "blort.j"
diff --git a/dx/tests/109-int-branch/info.txt b/dx/tests/109-int-branch/info.txt
new file mode 100644
index 0000000..e650a12
--- /dev/null
+++ b/dx/tests/109-int-branch/info.txt
@@ -0,0 +1,6 @@
+This tests that an int branch with valid arguments is properly translated.
+(Regression test.)
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/109-int-branch/run b/dx/tests/109-int-branch/run
new file mode 100644
index 0000000..b8d13fc
--- /dev/null
+++ b/dx/tests/109-int-branch/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --dump-method="blort.test*" blort.class
diff --git a/dx/tests/110-dex-preserve-this/Blort.class b/dx/tests/110-dex-preserve-this/Blort.class
new file mode 100644
index 0000000..c2d7784
Binary files /dev/null and b/dx/tests/110-dex-preserve-this/Blort.class differ
diff --git a/dx/tests/110-dex-preserve-this/Blort.java b/dx/tests/110-dex-preserve-this/Blort.java
new file mode 100644
index 0000000..e2965b3
--- /dev/null
+++ b/dx/tests/110-dex-preserve-this/Blort.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort {
+    public int test() {
+        Object z = "";
+        Number t = new Integer(3);
+        if (z instanceof Integer) {
+            return 3;
+        }
+        return ((Integer) t);
+    }
+}
diff --git a/dx/tests/110-dex-preserve-this/build b/dx/tests/110-dex-preserve-this/build
new file mode 100644
index 0000000..4c76400
--- /dev/null
+++ b/dx/tests/110-dex-preserve-this/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/110-dex-preserve-this/expected.txt b/dx/tests/110-dex-preserve-this/expected.txt
new file mode 100644
index 0000000..e91d4bf
--- /dev/null
+++ b/dx/tests/110-dex-preserve-this/expected.txt
@@ -0,0 +1 @@
+this: v4
diff --git a/dx/tests/110-dex-preserve-this/info.txt b/dx/tests/110-dex-preserve-this/info.txt
new file mode 100644
index 0000000..913c196
--- /dev/null
+++ b/dx/tests/110-dex-preserve-this/info.txt
@@ -0,0 +1,10 @@
+This is a smoke test of dex conversion, which checks to see that a
+"this" argument is never reused for a temporary. (Background: Popular
+debuggers will get confused if "this" is reused, and it arguably
+should be the case that the target object of an instance method being
+executed ought never be gc'ed anyway, and overwriting "this" could in
+fact cause that to happen.)
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/110-dex-preserve-this/run b/dx/tests/110-dex-preserve-this/run
new file mode 100644
index 0000000..f047172
--- /dev/null
+++ b/dx/tests/110-dex-preserve-this/run
@@ -0,0 +1,40 @@
+#!/bin/bash
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none \
+    --dump-to=dump.txt --dump-method="Blort.test" Blort.class
+
+cat dump.txt | awk '
+BEGIN {
+    thisReg = "BOGUS";
+}
+# Find the number of registers; in this case the last register is "this".
+/^regs:/ {
+    regs = substr($2, 4, 1);
+    thisReg = "v" (regs - 1);
+    printf("this: %s\n", thisReg);
+}
+# Output any lines that mention the "this" register.
+{
+    count = split($0, words, /,? */);
+    for (i = 1; i <= count; i++) {
+        if (words[i] == thisReg) {
+            printf("%s\n", $0);
+            break;
+        }
+    }
+}
+'
diff --git a/dx/tests/111-use-null-as-array/Blort.class b/dx/tests/111-use-null-as-array/Blort.class
new file mode 100644
index 0000000..e0e7533
Binary files /dev/null and b/dx/tests/111-use-null-as-array/Blort.class differ
diff --git a/dx/tests/111-use-null-as-array/Blort.java b/dx/tests/111-use-null-as-array/Blort.java
new file mode 100644
index 0000000..79d2b4f
--- /dev/null
+++ b/dx/tests/111-use-null-as-array/Blort.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort {
+    public static boolean test_getBooleanArray() {
+        boolean[] arr = null;
+        return arr[1];
+    }
+
+    public static byte test_getByteArray() {
+        byte[] arr = null;
+        return arr[2];
+    }
+
+    public static char test_getCharArray() {
+        char[] arr = null;
+        return arr[3];
+    }
+
+    public static double test_getDoubleArray() {
+        double[] arr = null;
+        return arr[4];
+    }
+
+    public static float test_getFloatArray() {
+        float[] arr = null;
+        return arr[5];
+    }
+
+    public static int test_getIntArray() {
+        int[] arr = null;
+        return arr[6];
+    }
+
+    public static long test_getLongArray() {
+        long[] arr = null;
+        return arr[7];
+    }
+
+    public static Object test_getObjectArray() {
+        Object[] arr = null;
+        return arr[8];
+    }
+
+    public static short test_getShortArray() {
+        short[] arr = null;
+        return arr[9];
+    }
+
+    public static void test_setBooleanArray() {
+        boolean[] arr = null;
+        arr[1] = true;
+    }
+
+    public static void test_setByteArray() {
+        byte[] arr = null;
+        arr[2] = (byte) 3;
+    }
+
+    public static void test_setCharArray() {
+        char[] arr = null;
+        arr[4] = (char) 5;
+    }
+
+    public static void test_setDoubleArray() {
+        double[] arr = null;
+        arr[6] = 7.0F;
+    }
+
+    public static void test_setFloatArray() {
+        float[] arr = null;
+        arr[8] = 9.0F;
+    }
+
+    public static void test_setIntArray() {
+        int[] arr = null;
+        arr[10] = 11;
+    }
+
+    public static void test_setLongArray() {
+        long[] arr = null;
+        arr[12] = 13;
+    }
+
+    public static void test_setObjectArray() {
+        Object[] arr = null;
+        arr[14] = "blort";
+    }
+
+    public static void test_setShortArray() {
+        short[] arr = null;
+        arr[15] = (short) 16;
+    }
+}
diff --git a/dx/tests/111-use-null-as-array/build b/dx/tests/111-use-null-as-array/build
new file mode 100644
index 0000000..efe4558
--- /dev/null
+++ b/dx/tests/111-use-null-as-array/build
@@ -0,0 +1,21 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+set -e
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
+bash multidimensional.sh > multidimensional.j
+jasmin -d . multidimensional.j >/dev/null
diff --git a/dx/tests/111-use-null-as-array/expected.txt b/dx/tests/111-use-null-as-array/expected.txt
new file mode 100644
index 0000000..cbb49ea
--- /dev/null
+++ b/dx/tests/111-use-null-as-array/expected.txt
@@ -0,0 +1,250 @@
+Blort.test_getBooleanArray:()Z:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: aget-byte v0, v0, v1
+  0004: return v0
+Blort.test_getByteArray:()B:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 2 // #2
+  0002: aget-byte v0, v0, v1
+  0004: return v0
+Blort.test_getCharArray:()C:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 3 // #3
+  0002: aget-char v0, v0, v1
+  0004: return v0
+Blort.test_getDoubleArray:()D:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 4 // #4
+  0002: aget-wide v0, v0, v1
+  0004: return-wide v0
+Blort.test_getFloatArray:()F:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 5 // #5
+  0002: aget v0, v0, v1
+  0004: return v0
+Blort.test_getIntArray:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 6 // #6
+  0002: aget v0, v0, v1
+  0004: return v0
+Blort.test_getLongArray:()J:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 7 // #7
+  0002: aget-wide v0, v0, v1
+  0004: return-wide v0
+Blort.test_getObjectArray:()Ljava/lang/Object;:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/16 v1, #int 8 // #0008
+  0003: aget-object v0, v0, v1
+  0005: return-object v0
+Blort.test_getShortArray:()S:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/16 v1, #int 9 // #0009
+  0003: aget-short v0, v0, v1
+  0005: return v0
+Blort.test_setBooleanArray:()V:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aput v1, v0, v1
+  0004: return-void
+Blort.test_setByteArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 2 // #2
+  0002: const/4 v2, #int 3 // #3
+  0003: aput v2, v0, v1
+  0005: return-void
+Blort.test_setCharArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 4 // #4
+  0002: const/4 v2, #int 5 // #5
+  0003: aput v2, v0, v1
+  0005: return-void
+Blort.test_setDoubleArray:()V:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/4 v1, #int 6 // #6
+  0002: const-wide/high16 v2, #double 7.0 // #401c000000000000
+  0004: aput-wide v2, v0, v1
+  0006: return-void
+Blort.test_setFloatArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/16 v1, #int 8 // #0008
+  0003: const/high16 v2, #float 9.0 // #41100000
+  0005: aput v2, v0, v1
+  0007: return-void
+Blort.test_setIntArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/16 v1, #int 10 // #000a
+  0003: const/16 v2, #int 11 // #000b
+  0005: aput v2, v0, v1
+  0007: return-void
+Blort.test_setLongArray:()V:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/16 v1, #int 12 // #000c
+  0003: const-wide/16 v2, #long 13 // #000d
+  0005: aput-wide v2, v0, v1
+  0007: return-void
+Blort.test_setObjectArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/16 v1, #int 14 // #000e
+  0003: const-string v2, "blort"
+  0005: aput-object v2, v0, v1
+  0007: return-void
+Blort.test_setShortArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v0, #null // #0
+  0001: const/16 v1, #int 15 // #000f
+  0003: const/16 v2, #int 16 // #0010
+  0005: aput v2, v0, v1
+  0007: return-void
+multidimensional.test_getBooleanArray:()Z:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget-byte v0, v0, v1
+  0006: return v0
+multidimensional.test_getByteArray:()B:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget-byte v0, v0, v1
+  0006: return v0
+multidimensional.test_getCharArray:()C:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget-char v0, v0, v1
+  0006: return v0
+multidimensional.test_getDoubleArray:()D:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget-wide v0, v0, v1
+  0006: return-wide v0
+multidimensional.test_getFloatArray:()F:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget v0, v0, v1
+  0006: return v0
+multidimensional.test_getIntArray:()I:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget v0, v0, v1
+  0006: return v0
+multidimensional.test_getLongArray:()J:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget-wide v0, v0, v1
+  0006: return-wide v0
+multidimensional.test_getObjectArray:()Ljava/lang/Object;:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget-object v0, v0, v1
+  0006: return-object v0
+multidimensional.test_getShortArray:()S:
+regs: 0002; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: aget-short v0, v0, v1
+  0006: return v0
+multidimensional.test_setBooleanArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v2, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v2
+  0004: const/4 v1, #int 0 // #0
+  0005: aput v1, v0, v2
+  0007: return-void
+multidimensional.test_setByteArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v2, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v2
+  0004: const/4 v1, #int 0 // #0
+  0005: aput v1, v0, v2
+  0007: return-void
+multidimensional.test_setCharArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v2, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v2
+  0004: const/4 v1, #int 0 // #0
+  0005: aput v1, v0, v2
+  0007: return-void
+multidimensional.test_setDoubleArray:()V:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: const-wide/16 v2, #double 0.0 // #0000
+  0006: aput-wide v2, v0, v1
+  0008: return-void
+multidimensional.test_setFloatArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v2, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v2
+  0004: const/4 v1, #float 0.0 // #0
+  0005: aput v1, v0, v2
+  0007: return-void
+multidimensional.test_setIntArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v2, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v2
+  0004: const/4 v1, #int 0 // #0
+  0005: aput v1, v0, v2
+  0007: return-void
+multidimensional.test_setLongArray:()V:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v1, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v1
+  0004: const-wide/16 v2, #long 0 // #0000
+  0006: aput-wide v2, v0, v1
+  0008: return-void
+multidimensional.test_setObjectArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v2, #null // #0
+  0001: const/4 v1, #int 1 // #1
+  0002: aget-object v0, v2, v1
+  0004: aput-object v2, v0, v1
+  0006: return-void
+multidimensional.test_setShortArray:()V:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/4 v2, #int 1 // #1
+  0001: const/4 v0, #null // #0
+  0002: aget-object v0, v0, v2
+  0004: const/4 v1, #int 0 // #0
+  0005: aput v1, v0, v2
+  0007: return-void
diff --git a/dx/tests/111-use-null-as-array/info.txt b/dx/tests/111-use-null-as-array/info.txt
new file mode 100644
index 0000000..624386d
--- /dev/null
+++ b/dx/tests/111-use-null-as-array/info.txt
@@ -0,0 +1,18 @@
+This is a smoke test of dex conversion, which checks to see that uses
+of a known-null in contexts that require a specific type end up getting
+converted to the type in question. When executed, this sort of code
+will inevitably throw a NullPointerException, but if the opcode weren't
+correct, they would instead incorrectly fail verification.
+
+If you inspect the expected output of this test, you will see that
+there are some surprising instructions in there, such as using
+aget-byte for what was a boolean[] in the source code. In these cases,
+the resulting output is still correct (passes verification and will
+throw a NullPointerException if ever executed). However, it happens
+that during translation there simply wasn't enough information to
+recover the "true" original meaning at the level of actual opcode
+selection.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/111-use-null-as-array/multidimensional.class b/dx/tests/111-use-null-as-array/multidimensional.class
new file mode 100644
index 0000000..2cdc817
Binary files /dev/null and b/dx/tests/111-use-null-as-array/multidimensional.class differ
diff --git a/dx/tests/111-use-null-as-array/multidimensional.j b/dx/tests/111-use-null-as-array/multidimensional.j
new file mode 100644
index 0000000..ecaae62
--- /dev/null
+++ b/dx/tests/111-use-null-as-array/multidimensional.j
@@ -0,0 +1,364 @@
+
+.class multidimensional
+.super java/lang/Object
+
+
+; Output from some versions of javac on:
+; public static Object test_getObjectArray() {
+;     Object[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getObjectArray()Ljava/lang/Object;
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    aaload
+    areturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setObjectArray() {
+;     Object[][] array = null;
+;     array[1][1] = null;
+; }
+.method public static test_setObjectArray()V
+    .limit locals 1
+    .limit stack 3
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    aconst_null
+    aastore
+    return
+.end method
+
+
+; Output from some versions of javac on:
+; public static boolean test_getBooleanArray() {
+;     boolean[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getBooleanArray()Z
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    baload
+    ireturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setBooleanArray() {
+;     boolean[][] array = null;
+;     array[1][1] = false;
+; }
+.method public static test_setBooleanArray()V
+    .limit locals 1
+    .limit stack 3
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    iconst_0
+    bastore
+    return
+.end method
+
+
+; Output from some versions of javac on:
+; public static byte test_getByteArray() {
+;     byte[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getByteArray()B
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    baload
+    ireturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setByteArray() {
+;     byte[][] array = null;
+;     array[1][1] = 0;
+; }
+.method public static test_setByteArray()V
+    .limit locals 1
+    .limit stack 3
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    iconst_0
+    bastore
+    return
+.end method
+
+
+; Output from some versions of javac on:
+; public static char test_getCharArray() {
+;     char[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getCharArray()C
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    caload
+    ireturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setCharArray() {
+;     char[][] array = null;
+;     array[1][1] = 0;
+; }
+.method public static test_setCharArray()V
+    .limit locals 1
+    .limit stack 3
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    iconst_0
+    castore
+    return
+.end method
+
+
+; Output from some versions of javac on:
+; public static short test_getShortArray() {
+;     short[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getShortArray()S
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    saload
+    ireturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setShortArray() {
+;     short[][] array = null;
+;     array[1][1] = 0;
+; }
+.method public static test_setShortArray()V
+    .limit locals 1
+    .limit stack 3
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    iconst_0
+    sastore
+    return
+.end method
+
+
+; Output from some versions of javac on:
+; public static int test_getIntArray() {
+;     int[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getIntArray()I
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    iaload
+    ireturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setIntArray() {
+;     int[][] array = null;
+;     array[1][1] = 0;
+; }
+.method public static test_setIntArray()V
+    .limit locals 1
+    .limit stack 3
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    iconst_0
+    iastore
+    return
+.end method
+
+
+; Output from some versions of javac on:
+; public static long test_getLongArray() {
+;     long[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getLongArray()J
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    laload
+    lreturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setLongArray() {
+;     long[][] array = null;
+;     array[1][1] = 0;
+; }
+.method public static test_setLongArray()V
+    .limit locals 1
+    .limit stack 4
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    lconst_0
+    lastore
+    return
+.end method
+
+
+; Output from some versions of javac on:
+; public static float test_getFloatArray() {
+;     float[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getFloatArray()F
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    faload
+    freturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setFloatArray() {
+;     float[][] array = null;
+;     array[1][1] = 0;
+; }
+.method public static test_setFloatArray()V
+    .limit locals 1
+    .limit stack 3
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    fconst_0
+    fastore
+    return
+.end method
+
+
+; Output from some versions of javac on:
+; public static double test_getDoubleArray() {
+;     double[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_getDoubleArray()D
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    daload
+    dreturn
+.end method
+
+; Output from some versions of javac on:
+; public static void test_setDoubleArray() {
+;     double[][] array = null;
+;     array[1][1] = 0;
+; }
+.method public static test_setDoubleArray()V
+    .limit locals 1
+    .limit stack 4
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    dconst_0
+    dastore
+    return
+.end method
+
diff --git a/dx/tests/111-use-null-as-array/multidimensional.sh b/dx/tests/111-use-null-as-array/multidimensional.sh
new file mode 100644
index 0000000..d1afede
--- /dev/null
+++ b/dx/tests/111-use-null-as-array/multidimensional.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+#
+# Copyright (C) 2015 The Android Open Source Project
+#
+# 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.
+
+echo '
+.class multidimensional
+.super java/lang/Object
+'
+
+function onetype() {
+local typename=$1
+local stacksize=$2
+local defaultvalue=$3
+local descriptor=$4
+local defaultload=$5
+local loadstoreprefix=$6
+local returnprefix=${7:-$loadstoreprefix}
+echo "
+; Output from some versions of javac on:
+; public static $typename test_get${typename^}Array() {
+;     $typename[][] array = null;
+;     return array[1][1];
+; }
+.method public static test_get${typename^}Array()$descriptor
+    .limit locals 1
+    .limit stack 2
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    ${loadstoreprefix}aload
+    ${returnprefix}return
+.end method
+
+; Output from some versions of javac on:
+; public static void test_set${typename^}Array() {
+;     $typename[][] array = null;
+;     array[1][1] = $defaultvalue;
+; }
+.method public static test_set${typename^}Array()V
+    .limit locals 1
+    .limit stack $((stacksize+2))
+
+    aconst_null
+    astore_0
+    aload_0
+    iconst_1
+    aaload
+    iconst_1
+    $defaultload
+    ${loadstoreprefix}astore
+    return
+.end method
+"
+}
+
+onetype Object 1 null 'Ljava/lang/Object;' aconst_null a
+onetype boolean 1 false Z iconst_0 b i
+onetype byte 1 0 B iconst_0 b i
+onetype char 1 0 C iconst_0 c i
+onetype short 1 0 S iconst_0 s i
+onetype int 1 0 I iconst_0 i
+onetype long 2 0 J lconst_0 l
+onetype float 1 0 F fconst_0 f
+onetype double 2 0 D dconst_0 d
diff --git a/dx/tests/111-use-null-as-array/run b/dx/tests/111-use-null-as-array/run
new file mode 100644
index 0000000..04d3b3e
--- /dev/null
+++ b/dx/tests/111-use-null-as-array/run
@@ -0,0 +1,21 @@
+#!/bin/bash
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --positions=none --no-locals \
+    --dump-to=- --dump-method="Blort.test*" Blort.class
+
+dx --debug --dex --positions=none --no-locals \
+    --dump-to=- --dump-method="multidimensional.*" multidimensional.class
diff --git a/dx/tests/112-dex-return-jsr-result/blort.class b/dx/tests/112-dex-return-jsr-result/blort.class
new file mode 100644
index 0000000..4b1a9f7
Binary files /dev/null and b/dx/tests/112-dex-return-jsr-result/blort.class differ
diff --git a/dx/tests/112-dex-return-jsr-result/blort.j b/dx/tests/112-dex-return-jsr-result/blort.j
new file mode 100644
index 0000000..6f6cddb
--- /dev/null
+++ b/dx/tests/112-dex-return-jsr-result/blort.j
@@ -0,0 +1,41 @@
+; Copyright (C) 2010 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public static zorch(ZLjava/lang/Object;)Ljava/lang/Object;
+    .limit locals 3
+    .limit stack 1
+
+    iload_0
+    ifeq thenBlock
+    jsr subroutine
+    goto endBlock
+
+thenBlock:
+    jsr subroutine
+    goto endBlock
+
+subroutine:
+    astore_2
+    aload_1
+    invokestatic java/lang/String/valueOf(Ljava/lang/Object;)Ljava/lang/String;
+    astore_1
+    ret 2
+
+endBlock:
+    aload_1
+    areturn
+.end method
diff --git a/dx/tests/112-dex-return-jsr-result/build b/dx/tests/112-dex-return-jsr-result/build
new file mode 100644
index 0000000..0011a23
--- /dev/null
+++ b/dx/tests/112-dex-return-jsr-result/build
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# The awk fun here tries to cull out all but the salient bits. The aim
+# is to check to see that there are two invoke-static instructions, each
+# followed directly by a move-result-object.
+
+set -e
+
+jasmin -d . blort.j
diff --git a/dx/tests/112-dex-return-jsr-result/expected.txt b/dx/tests/112-dex-return-jsr-result/expected.txt
new file mode 100644
index 0000000..5c29447
--- /dev/null
+++ b/dx/tests/112-dex-return-jsr-result/expected.txt
@@ -0,0 +1 @@
+total invokes: 2
diff --git a/dx/tests/112-dex-return-jsr-result/info.txt b/dx/tests/112-dex-return-jsr-result/info.txt
new file mode 100644
index 0000000..289ebb2
--- /dev/null
+++ b/dx/tests/112-dex-return-jsr-result/info.txt
@@ -0,0 +1,6 @@
+This test checks to make sure a result returned more-or-less directly
+from a jsr subroutine ends up being represented appropriately.
+
+In particular, this is a regression test for a bug which caused a
+goto instruction to be interposed between an invoke instruction and
+its associated move-result.
diff --git a/dx/tests/112-dex-return-jsr-result/run b/dx/tests/112-dex-return-jsr-result/run
new file mode 100644
index 0000000..eee68fb
--- /dev/null
+++ b/dx/tests/112-dex-return-jsr-result/run
@@ -0,0 +1,62 @@
+#!/bin/bash
+#
+# Copyright (C) 2010 The Android Open Source Project
+#
+# 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.
+
+# The awk fun here tries to cull out all but the salient bits. The aim
+# is to check to see that there are two invoke-static instructions, each
+# followed directly by a move-result-object.
+
+dx --debug --dex --dump-to=- --dump-method=blort.zorch --dump-width=200 \
+    blort.class | awk '
+
+BEGIN {
+    invokeAt = -1;
+    moveAt = -1;
+    invokeCount = 0;
+    failed = 0;
+}
+
+# Note: This has to be done before the test clause below.
+/move-result-object/ {
+    moveAt = NR;
+}
+
+(invokeAt > 0) {
+    if (moveAt != (invokeAt + 1)) {
+        failed = 1;
+    }
+    invokeAt = -1;
+    moveAt = -1;
+}
+
+# Note: This has to be done after the test clause above.
+/invoke-static/ {
+    invokeAt = NR;
+    invokeCount++;
+}
+
+END {
+    printf("total invokes: %d\n", invokeCount);
+    if (failed) {
+        exit 1;
+    }
+}
+'
+
+if [ "$?" = "1" ]; then
+    # The test failed. Be helpful and print the entire method body.
+    dx --debug --dex --dump-to=- --dump-method=blort.zorch --dump-width=200 \
+        blort.class
+fi
diff --git a/dx/tests/113-old-style-inner-class/Blort$1.class b/dx/tests/113-old-style-inner-class/Blort$1.class
new file mode 100644
index 0000000..49ca390
Binary files /dev/null and b/dx/tests/113-old-style-inner-class/Blort$1.class differ
diff --git a/dx/tests/113-old-style-inner-class/Blort$2.class b/dx/tests/113-old-style-inner-class/Blort$2.class
new file mode 100644
index 0000000..f9a82ad
Binary files /dev/null and b/dx/tests/113-old-style-inner-class/Blort$2.class differ
diff --git a/dx/tests/113-old-style-inner-class/Blort.class b/dx/tests/113-old-style-inner-class/Blort.class
new file mode 100644
index 0000000..fc29563
Binary files /dev/null and b/dx/tests/113-old-style-inner-class/Blort.class differ
diff --git a/dx/tests/113-old-style-inner-class/Blort.java b/dx/tests/113-old-style-inner-class/Blort.java
new file mode 100644
index 0000000..89b1ba0
--- /dev/null
+++ b/dx/tests/113-old-style-inner-class/Blort.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Blort {
+    public static Runnable theRunnable = new Runnable() {
+            public void run() { }
+        };
+
+    public Runnable create() {
+        return new Runnable() {
+                public void run() { }
+            };
+    }
+}
diff --git a/dx/tests/113-old-style-inner-class/build b/dx/tests/113-old-style-inner-class/build
new file mode 100644
index 0000000..b9701f1
--- /dev/null
+++ b/dx/tests/113-old-style-inner-class/build
@@ -0,0 +1,19 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# We compile for a 1.4 target to suppress the use of EnclosingMethod
+# attributes. Java 9 does not support this target.
+${JAVAC} -source 1.4 -target 1.4 -d . *.java &> /dev/null
diff --git a/dx/tests/113-old-style-inner-class/expected.txt b/dx/tests/113-old-style-inner-class/expected.txt
new file mode 100644
index 0000000..d58d6db
--- /dev/null
+++ b/dx/tests/113-old-style-inner-class/expected.txt
@@ -0,0 +1,2 @@
+warning:
+warning:
diff --git a/dx/tests/113-old-style-inner-class/info.txt b/dx/tests/113-old-style-inner-class/info.txt
new file mode 100644
index 0000000..91b3aad
--- /dev/null
+++ b/dx/tests/113-old-style-inner-class/info.txt
@@ -0,0 +1,3 @@
+This is a smoke test of dex conversion, which makes sure that
+converstion of old-style anonymous inner classes (whose representation
+is information-lossy) causes a warning to be issued.
diff --git a/dx/tests/113-old-style-inner-class/run b/dx/tests/113-old-style-inner-class/run
new file mode 100644
index 0000000..350244d
--- /dev/null
+++ b/dx/tests/113-old-style-inner-class/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2010 The Android Open Source Project
+#
+# 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.
+
+# We expect there to be two warning lines, one for each of the inner classes.
+dx --debug --dex *.class 2>&1 | awk '/^warning:/ { print $1 }'
diff --git a/dx/tests/114-value-propagation/blort.class b/dx/tests/114-value-propagation/blort.class
new file mode 100644
index 0000000..f4286e2
Binary files /dev/null and b/dx/tests/114-value-propagation/blort.class differ
diff --git a/dx/tests/114-value-propagation/blort.j b/dx/tests/114-value-propagation/blort.j
new file mode 100644
index 0000000..2cc8f5b
--- /dev/null
+++ b/dx/tests/114-value-propagation/blort.j
@@ -0,0 +1,24 @@
+; Copyright (C) 2010 The Android Open Source Project
+;
+; 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.
+
+.class blort
+.super java/lang/Object
+
+.method public static test()V
+    .limit locals 1
+    .limit stack 1
+    ldc 99
+    istore_0
+    return
+.end method
diff --git a/dx/tests/114-value-propagation/build b/dx/tests/114-value-propagation/build
new file mode 100644
index 0000000..23dd783
--- /dev/null
+++ b/dx/tests/114-value-propagation/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jasmin -d . blort.j
diff --git a/dx/tests/114-value-propagation/expected.txt b/dx/tests/114-value-propagation/expected.txt
new file mode 100644
index 0000000..d8c9494
--- /dev/null
+++ b/dx/tests/114-value-propagation/expected.txt
@@ -0,0 +1,2 @@
+  blort.j:@0000: const-int(99) v1:I=99 <- .
+  blort.j:@0002: move-int v0:I=99 <- v1:I=99
diff --git a/dx/tests/114-value-propagation/info.txt b/dx/tests/114-value-propagation/info.txt
new file mode 100644
index 0000000..2ff498d
--- /dev/null
+++ b/dx/tests/114-value-propagation/info.txt
@@ -0,0 +1,2 @@
+Tests propagation of constant values, specifically when going from a
+stack location to a local variable. (regression test)
diff --git a/dx/tests/114-value-propagation/run b/dx/tests/114-value-propagation/run
new file mode 100644
index 0000000..1de4594
--- /dev/null
+++ b/dx/tests/114-value-propagation/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2010 The Android Open Source Project
+#
+# 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.
+
+dx --dump --rop-blocks blort.class | grep 'const\|move'
diff --git a/dx/tests/115-merge/build b/dx/tests/115-merge/build
new file mode 100644
index 0000000..5375a88
--- /dev/null
+++ b/dx/tests/115-merge/build
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+junitjar=$progdir/../framework/junit-host.jar
+junitdex=$progdir/../framework/junit-hostdex.jar
+
+for i in "$dxjar" "$junitjar" "$junitdex"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+${javac} -source 1.7 -target 1.7 -cp $dxjar:$junitjar `find . -name "*.java"`
+if [ $? != 0 ]; then
+    echo Failed java compilation.
+    exit 1
+fi
diff --git a/dx/tests/115-merge/com/android/dx/merge/DexMergeTest.java b/dx/tests/115-merge/com/android/dx/merge/DexMergeTest.java
new file mode 100644
index 0000000..148ea5a
--- /dev/null
+++ b/dx/tests/115-merge/com/android/dx/merge/DexMergeTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+import com.android.dex.Dex;
+import com.android.dx.command.dexer.DxContext;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+import junit.framework.TestCase;
+
+/**
+ * Test that DexMerge works by merging dex files, and then loading them into
+ * the current VM.
+ */
+public final class DexMergeTest extends TestCase {
+
+    public void testFillArrayData() throws Exception {
+        ClassLoader loader = mergeAndLoad(
+                "/testdata/Basic.dex",
+                "/testdata/FillArrayData.dex");
+
+        Class<?> basic = loader.loadClass("testdata.Basic");
+        assertEquals(1, basic.getDeclaredMethods().length);
+
+        Class<?> fillArrayData = loader.loadClass("testdata.FillArrayData");
+        assertTrue(Arrays.equals(
+                new byte[] { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, -112, -23, 121 },
+                (byte[]) fillArrayData.getMethod("newByteArray").invoke(null)));
+        assertTrue(Arrays.equals(
+                new char[]{0xFFFF, 0x4321, 0xABCD, 0, 'a', 'b', 'c'},
+                (char[]) fillArrayData.getMethod("newCharArray").invoke(null)));
+        assertTrue(Arrays.equals(
+                new long[]{4660046610375530309L, 7540113804746346429L, -6246583658587674878L},
+                (long[]) fillArrayData.getMethod("newLongArray").invoke(null)));
+    }
+
+    public void testTryCatchFinally() throws Exception {
+        ClassLoader loader = mergeAndLoad(
+                "/testdata/Basic.dex",
+                "/testdata/TryCatchFinally.dex");
+
+        Class<?> basic = loader.loadClass("testdata.Basic");
+        assertEquals(1, basic.getDeclaredMethods().length);
+
+        Class<?> tryCatchFinally = loader.loadClass("testdata.TryCatchFinally");
+        tryCatchFinally.getDeclaredMethod("method").invoke(null);
+    }
+
+    public void testStaticValues() throws Exception {
+        ClassLoader loader = mergeAndLoad(
+                "/testdata/Basic.dex",
+                "/testdata/StaticValues.dex");
+
+        Class<?> basic = loader.loadClass("testdata.Basic");
+        assertEquals(1, basic.getDeclaredMethods().length);
+
+        Class<?> staticValues = loader.loadClass("testdata.StaticValues");
+        assertEquals((byte) 1, staticValues.getField("a").get(null));
+        assertEquals((short) 2, staticValues.getField("b").get(null));
+        assertEquals('C', staticValues.getField("c").get(null));
+        assertEquals(0xabcd1234, staticValues.getField("d").get(null));
+        assertEquals(4660046610375530309L,staticValues.getField("e").get(null));
+        assertEquals(0.5f, staticValues.getField("f").get(null));
+        assertEquals(-0.25, staticValues.getField("g").get(null));
+        assertEquals("this is a String", staticValues.getField("h").get(null));
+        assertEquals(String.class, staticValues.getField("i").get(null));
+        assertEquals("[0, 1]", Arrays.toString((int[]) staticValues.getField("j").get(null)));
+        assertEquals(null, staticValues.getField("k").get(null));
+        assertEquals(true, staticValues.getField("l").get(null));
+        assertEquals(false, staticValues.getField("m").get(null));
+    }
+
+    public void testAnnotations() throws Exception {
+        ClassLoader loader = mergeAndLoad(
+                "/testdata/Basic.dex",
+                "/testdata/Annotated.dex");
+
+        Class<?> basic = loader.loadClass("testdata.Basic");
+        assertEquals(1, basic.getDeclaredMethods().length);
+
+        Class<?> annotated = loader.loadClass("testdata.Annotated");
+        Method method = annotated.getMethod("method", String.class, String.class);
+        Field field = annotated.getField("field");
+
+        @SuppressWarnings("unchecked")
+        Class<? extends Annotation> marker
+                = (Class<? extends Annotation>) loader.loadClass("testdata.Annotated$Marker");
+
+        assertEquals("@testdata.Annotated$Marker(a=on class, b=[A, B, C], "
+                + "c=@testdata.Annotated$Nested(e=E1, f=1695938256, g=7264081114510713000), "
+                + "d=[@testdata.Annotated$Nested(e=E2, f=1695938256, g=7264081114510713000)])",
+                annotated.getAnnotation(marker).toString());
+        assertEquals("@testdata.Annotated$Marker(a=on method, b=[], "
+                + "c=@testdata.Annotated$Nested(e=, f=0, g=0), d=[])",
+                method.getAnnotation(marker).toString());
+        assertEquals("@testdata.Annotated$Marker(a=on field, b=[], "
+                + "c=@testdata.Annotated$Nested(e=, f=0, g=0), d=[])",
+                field.getAnnotation(marker).toString());
+        assertEquals("@testdata.Annotated$Marker(a=on parameter, b=[], "
+                        + "c=@testdata.Annotated$Nested(e=, f=0, g=0), d=[])",
+                method.getParameterAnnotations()[1][0].toString());
+    }
+
+    /**
+     * Merging dex files uses pessimistic sizes that naturally leave gaps in the
+     * output files. If those gaps grow too large, the merger is supposed to
+     * compact the result. This exercises that by repeatedly merging a dex with
+     * itself.
+     */
+    public void testMergedOutputSizeIsBounded() throws Exception {
+        /*
+         * At the time this test was written, the output would grow ~25% with
+         * each merge. Setting a low 1KiB ceiling on the maximum size caused
+         * the file to be compacted every four merges.
+         */
+        int steps = 100;
+        int compactWasteThreshold = 1024;
+
+        Dex dexA = resourceToDexBuffer("/testdata/Basic.dex");
+        Dex dexB = resourceToDexBuffer("/testdata/TryCatchFinally.dex");
+        Dex merged = new DexMerger(new Dex[]{dexA, dexB}, CollisionPolicy.KEEP_FIRST,
+                                   new DxContext()).merge();
+
+        int maxLength = 0;
+        for (int i = 0; i < steps; i++) {
+            DexMerger dexMerger = new DexMerger(new Dex[]{dexA, merged},
+                                                CollisionPolicy.KEEP_FIRST, new DxContext());
+            dexMerger.setCompactWasteThreshold(compactWasteThreshold);
+            merged = dexMerger.merge();
+            maxLength = Math.max(maxLength, merged.getLength());
+        }
+
+        int maxExpectedLength = dexA.getLength() + dexB.getLength() + compactWasteThreshold;
+        assertTrue(maxLength + " < " + maxExpectedLength, maxLength < maxExpectedLength);
+    }
+
+    public ClassLoader mergeAndLoad(String dexAResource, String dexBResource) throws Exception {
+        Dex dexA = resourceToDexBuffer(dexAResource);
+        Dex dexB = resourceToDexBuffer(dexBResource);
+        Dex merged = new DexMerger(new Dex[]{dexA, dexB}, CollisionPolicy.KEEP_FIRST,
+                                   new DxContext()).merge();
+        File mergedDex = File.createTempFile("DexMergeTest", ".classes.dex");
+        merged.writeTo(mergedDex);
+        File mergedJar = dexToJar(mergedDex);
+        // simplify the javac classpath by not depending directly on 'dalvik.system' classes
+        return (ClassLoader) Class.forName("dalvik.system.PathClassLoader")
+                .getConstructor(String.class, ClassLoader.class)
+                .newInstance(mergedJar.getPath(), getClass().getClassLoader());
+    }
+
+    private Dex resourceToDexBuffer(String resource) throws IOException {
+        return new Dex(getClass().getResourceAsStream(resource));
+    }
+
+    private File dexToJar(File dex) throws IOException {
+        File result = File.createTempFile("DexMergeTest", ".jar");
+        result.deleteOnExit();
+        JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(result));
+        jarOut.putNextEntry(new JarEntry("classes.dex"));
+        copy(new FileInputStream(dex), jarOut);
+        jarOut.closeEntry();
+        jarOut.close();
+        return result;
+    }
+
+    private void copy(InputStream in, OutputStream out) throws IOException {
+        byte[] buffer = new byte[1024];
+        int count;
+        while ((count = in.read(buffer)) != -1) {
+            out.write(buffer, 0, count);
+        }
+        in.close();
+    }
+}
diff --git a/dx/tests/115-merge/expected.txt b/dx/tests/115-merge/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/115-merge/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/115-merge/info.txt b/dx/tests/115-merge/info.txt
new file mode 100644
index 0000000..c1fa2e4
--- /dev/null
+++ b/dx/tests/115-merge/info.txt
@@ -0,0 +1,6 @@
+Merges two dex files into one and then loads the result.
+
+Because it loads the merged dex files, this JUnit test only works on a dalvikvm.
+The run script requires vogar, so you must have vogar on your $PATH to run this
+test. You'll also need a device or host VM for vogar to attach to.
+
diff --git a/dx/tests/115-merge/run b/dx/tests/115-merge/run
new file mode 100644
index 0000000..88253b5
--- /dev/null
+++ b/dx/tests/115-merge/run
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+junitjar=$progdir/../framework/junit-host.jar
+junitdex=$progdir/../framework/junit-hostdex.jar
+
+dx --dex --output=test.jar com/android/dx/merge/* $dxjar
+
+# Build a resource .jar containing the .dex files to merge
+dx --dex --output=testdata/Annotated.dex testdata/Annotated*
+dx --dex --output=testdata/Basic.dex testdata/Basic*
+dx --dex --output=testdata/FillArrayData.dex testdata/FillArrayData*
+dx --dex --output=testdata/StaticValues.dex testdata/StaticValues*
+dx --dex --output=testdata/TryCatchFinally.dex testdata/TryCatchFinally*
+jar cfM resources.jar testdata/*.dex
+
+art -classpath test.jar:$junitdex:resources.jar \
+  junit.textui.TestRunner com.android.dx.merge.DexMergeTest > unit-out.txt 2>&1
+
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/115-merge/testdata/Annotated.java b/dx/tests/115-merge/testdata/Annotated.java
new file mode 100644
index 0000000..2e893f2
--- /dev/null
+++ b/dx/tests/115-merge/testdata/Annotated.java
@@ -0,0 +1,31 @@
+package testdata;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Annotated.Marker(a = "on class", b = {"A", "B", "C" },
+        c = @Annotated.Nested(e="E1", f=1695938256, g=7264081114510713000L),
+        d = { @Annotated.Nested(e="E2", f=1695938256, g=7264081114510713000L) })
+public class Annotated {
+
+    @Annotated.Marker(a="on field")
+    public String field;
+
+    @Annotated.Marker(a="on method")
+    public void method(String a, @Annotated.Marker(a="on parameter") String b) {}
+
+    @Retention(RetentionPolicy.RUNTIME)
+    public @interface Marker {
+        String a() default "";
+        String[] b() default {};
+        Nested c() default @Nested;
+        Nested[] d() default {};
+    }
+
+    @Retention(RetentionPolicy.RUNTIME)
+    public @interface Nested {
+        String e() default "";
+        int f() default 0;
+        long g() default 0L;
+    }
+}
diff --git a/dx/tests/115-merge/testdata/Basic.java b/dx/tests/115-merge/testdata/Basic.java
new file mode 100644
index 0000000..01a1635
--- /dev/null
+++ b/dx/tests/115-merge/testdata/Basic.java
@@ -0,0 +1,10 @@
+package testdata;
+
+public class Basic {
+
+    String field = "this is a field";
+
+    String method() {
+        return "this is a method result";
+    }
+}
diff --git a/dx/tests/115-merge/testdata/FillArrayData.java b/dx/tests/115-merge/testdata/FillArrayData.java
new file mode 100644
index 0000000..0ece934
--- /dev/null
+++ b/dx/tests/115-merge/testdata/FillArrayData.java
@@ -0,0 +1,16 @@
+package testdata;
+
+public class FillArrayData {
+
+    public static byte[] newByteArray() {
+        return new byte[] { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, -112, -23, 121 };
+    }
+
+    public static char[] newCharArray() {
+        return new char[] { 0xFFFF, 0x4321, 0xABCD, 0, 'a', 'b', 'c' };
+    }
+
+    public static long[] newLongArray() {
+        return new long[] { 4660046610375530309L, 7540113804746346429L, -6246583658587674878L };
+    }
+}
diff --git a/dx/tests/115-merge/testdata/StaticValues.java b/dx/tests/115-merge/testdata/StaticValues.java
new file mode 100644
index 0000000..1a8648f
--- /dev/null
+++ b/dx/tests/115-merge/testdata/StaticValues.java
@@ -0,0 +1,17 @@
+package testdata;
+
+public class StaticValues {
+    public static final byte a = 1;
+    public static final short b = 2;
+    public static final char c = 'C';
+    public static final int d = 0xabcd1234;
+    public static final long e = 4660046610375530309L;
+    public static final float f = 0.5f;
+    public static final double g = -0.25;
+    public static final String h = "this is a String";
+    public static final Class<?> i = String.class;
+    public static final int[] j = { 0, 1 };
+    public static final String k = null;
+    public static final boolean l = true;
+    public static final boolean m = false;
+}
diff --git a/dx/tests/115-merge/testdata/TryCatchFinally.java b/dx/tests/115-merge/testdata/TryCatchFinally.java
new file mode 100644
index 0000000..4f3769e
--- /dev/null
+++ b/dx/tests/115-merge/testdata/TryCatchFinally.java
@@ -0,0 +1,26 @@
+package testdata;
+
+public class TryCatchFinally {
+
+    public static void method() {
+        int count = 0;
+        try {
+            if (true) {
+                throw new NullPointerException();
+            }
+            throw new AssertionError();
+        } catch (IllegalStateException e) {
+            throw new AssertionError();
+        } catch (NullPointerException expected) {
+            count++;
+        } catch (RuntimeException e) {
+            throw new AssertionError();
+        } finally {
+            count++;
+        }
+
+        if (count != 2) {
+            throw new AssertionError();
+        }
+    }
+}
diff --git a/dx/tests/116-leb128/build b/dx/tests/116-leb128/build
new file mode 100644
index 0000000..fe15d1f
--- /dev/null
+++ b/dx/tests/116-leb128/build
@@ -0,0 +1,30 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+junitjar=$progdir/../framework/junit-host.jar
+
+for i in "$dxjar" "$junitjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+${JAVAC} -cp $dxjar:$junitjar -source 1.7 -target 1.7 `find . -name "*.java"`
diff --git a/dx/tests/116-leb128/com/android/dx/util/Leb128UtilsTest.class b/dx/tests/116-leb128/com/android/dx/util/Leb128UtilsTest.class
new file mode 100644
index 0000000..a367d0e
Binary files /dev/null and b/dx/tests/116-leb128/com/android/dx/util/Leb128UtilsTest.class differ
diff --git a/dx/tests/116-leb128/com/android/dx/util/Leb128UtilsTest.java b/dx/tests/116-leb128/com/android/dx/util/Leb128UtilsTest.java
new file mode 100644
index 0000000..13d0cb8
--- /dev/null
+++ b/dx/tests/116-leb128/com/android/dx/util/Leb128UtilsTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import com.android.dex.util.ByteArrayByteInput;
+import com.android.dex.Leb128;
+import java.io.IOException;
+import java.util.Arrays;
+import junit.framework.TestCase;
+
+public final class Leb128UtilsTest extends TestCase {
+
+    public void testDecodeUnsignedLeb() throws IOException {
+        assertEquals(0, Leb128.readUnsignedLeb128(new ByteArrayByteInput((byte) 0)));
+        assertEquals(1, Leb128.readUnsignedLeb128(new ByteArrayByteInput((byte) 1)));
+        assertEquals(127, Leb128.readUnsignedLeb128(new ByteArrayByteInput((byte) 0x7f)));
+        assertEquals(16256, Leb128.readUnsignedLeb128(
+                new ByteArrayByteInput((byte) 0x80, (byte) 0x7f)));
+    }
+
+    public void testEncodeUnsignedLeb() throws IOException {
+        assertEquals(new byte[] { 0 }, encodeUnsignedLeb(0));
+        assertEquals(new byte[] { 1 }, encodeUnsignedLeb(1));
+        assertEquals(new byte[] { 0x7f }, encodeUnsignedLeb(127));
+        assertEquals(new byte[] { (byte) 0x80, 0x7f }, encodeUnsignedLeb(16256));
+        assertEquals(new byte[] { (byte) 0xb4, 0x07 }, encodeUnsignedLeb(0x3b4));
+        assertEquals(new byte[] { (byte) 0x8c, 0x08 }, encodeUnsignedLeb(0x40c));
+        assertEquals(new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, 0xf },
+                encodeUnsignedLeb(0xffffffff));
+    }
+
+    public void testDecodeSignedLeb() throws IOException {
+        assertEquals(0, Leb128.readSignedLeb128(new ByteArrayByteInput((byte) 0)));
+        assertEquals(1, Leb128.readSignedLeb128(new ByteArrayByteInput((byte) 1)));
+        assertEquals(-1, Leb128.readSignedLeb128(new ByteArrayByteInput((byte) 0x7f)));
+        assertEquals(0x3c, Leb128.readSignedLeb128(new ByteArrayByteInput((byte) 0x3c)));
+        assertEquals(-128, Leb128.readSignedLeb128(
+                new ByteArrayByteInput((byte) 0x80, (byte) 0x7f)));
+    }
+
+    public void testEncodeSignedLeb() throws IOException {
+        assertEquals(new byte[] { 0 }, encodeSignedLeb(0));
+        assertEquals(new byte[] { 1 }, encodeSignedLeb(1));
+        assertEquals(new byte[] { 0x7f }, encodeSignedLeb(-1));
+        assertEquals(new byte[] { (byte) 0x80, 0x7f }, encodeSignedLeb(-128));
+    }
+
+    private byte[] encodeSignedLeb(int value) {
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(5);
+        Leb128.writeSignedLeb128(out, value);
+        return out.toByteArray();
+    }
+
+    private byte[] encodeUnsignedLeb(int value) {
+        ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(5);
+        Leb128.writeUnsignedLeb128(out, value);
+        return out.toByteArray();
+    }
+
+    private void assertEquals(byte[] expected, byte[] actual) {
+        assertTrue(Arrays.toString(actual), Arrays.equals(expected, actual));
+    }
+}
diff --git a/dx/tests/116-leb128/expected.txt b/dx/tests/116-leb128/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/116-leb128/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/116-leb128/info.txt b/dx/tests/116-leb128/info.txt
new file mode 100644
index 0000000..1603ec3
--- /dev/null
+++ b/dx/tests/116-leb128/info.txt
@@ -0,0 +1,5 @@
+Performs little endian operations.
+
+The run script requires vogar, so you must have vogar on your $PATH to run this
+test. You'll also need a device or host VM for vogar to attach to.
+
diff --git a/dx/tests/116-leb128/run b/dx/tests/116-leb128/run
new file mode 100644
index 0000000..12b2f69
--- /dev/null
+++ b/dx/tests/116-leb128/run
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+junitjar=$progdir/../framework/junit-host.jar
+
+for i in "$dxjar" "$junitjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+${JAVA} -classpath $dxjar:$junitjar:. junit.textui.TestRunner com.android.dx.util.Leb128UtilsTest > unit-out.txt 2>&1
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/117-modified-utf8/build b/dx/tests/117-modified-utf8/build
new file mode 100644
index 0000000..c80dea3
--- /dev/null
+++ b/dx/tests/117-modified-utf8/build
@@ -0,0 +1,30 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+junitjar=$progdir/../framework/junit-host.jar
+
+for i in "$dxjar" "$junitjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+javac -cp $dxjar:$junitjar `find . -name "*.java"`
diff --git a/dx/tests/117-modified-utf8/com/android/dx/util/Mutf8Test.class b/dx/tests/117-modified-utf8/com/android/dx/util/Mutf8Test.class
new file mode 100644
index 0000000..5bffaf6
Binary files /dev/null and b/dx/tests/117-modified-utf8/com/android/dx/util/Mutf8Test.class differ
diff --git a/dx/tests/117-modified-utf8/com/android/dx/util/Mutf8Test.java b/dx/tests/117-modified-utf8/com/android/dx/util/Mutf8Test.java
new file mode 100644
index 0000000..db92a96
--- /dev/null
+++ b/dx/tests/117-modified-utf8/com/android/dx/util/Mutf8Test.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.util;
+
+import com.android.dex.util.ByteArrayByteInput;
+import com.android.dex.util.ByteInput;
+import com.android.dex.Mutf8;
+import java.io.IOException;
+import java.util.Arrays;
+import junit.framework.TestCase;
+
+public final class Mutf8Test extends TestCase {
+
+    public void testDecode() throws IOException {
+        ByteInput in = new ByteArrayByteInput(
+                new byte[] { 'A', 'B', 'C', (byte) 0xc0, (byte) 0x80, 0, 'E' });
+        assertEquals('A', in.readByte());
+        assertEquals("BC\u0000", Mutf8.decode(in, new char[3]));
+        assertEquals('E', in.readByte());
+    }
+
+    public void testEncode() throws IOException {
+        assertEquals(Arrays.toString(new byte[] { 'B', 'C', (byte) 0xc0, (byte) 0x80 }),
+                Arrays.toString(Mutf8.encode("BC\u0000")));
+    }
+}
diff --git a/dx/tests/117-modified-utf8/expected.txt b/dx/tests/117-modified-utf8/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/117-modified-utf8/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/117-modified-utf8/info.txt b/dx/tests/117-modified-utf8/info.txt
new file mode 100644
index 0000000..df11d98
--- /dev/null
+++ b/dx/tests/117-modified-utf8/info.txt
@@ -0,0 +1,5 @@
+Performs modified UTF-8 operations.
+
+The run script requires vogar, so you must have vogar on your $PATH to run this
+test. You'll also need a device or host VM for vogar to attach to.
+
diff --git a/dx/tests/117-modified-utf8/run b/dx/tests/117-modified-utf8/run
new file mode 100644
index 0000000..db9b7c5
--- /dev/null
+++ b/dx/tests/117-modified-utf8/run
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+junitjar=$progdir/../framework/junit-host.jar
+
+for i in "$dxjar" "$junitjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+${JAVA} -classpath $dxjar:$junitjar:. junit.textui.TestRunner com.android.dx.util.Mutf8Test > unit-out.txt 2>&1
+
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/118-find-usages/Foo$MyList.class b/dx/tests/118-find-usages/Foo$MyList.class
new file mode 100644
index 0000000..10b5e56
Binary files /dev/null and b/dx/tests/118-find-usages/Foo$MyList.class differ
diff --git a/dx/tests/118-find-usages/Foo.class b/dx/tests/118-find-usages/Foo.class
new file mode 100644
index 0000000..297fd40
Binary files /dev/null and b/dx/tests/118-find-usages/Foo.class differ
diff --git a/dx/tests/118-find-usages/Foo.java b/dx/tests/118-find-usages/Foo.java
new file mode 100644
index 0000000..d5dc0bd
--- /dev/null
+++ b/dx/tests/118-find-usages/Foo.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+import java.io.Reader;
+import java.io.StreamTokenizer;
+import java.util.AbstractList;
+import java.util.ArrayList;
+
+public final class Foo {
+
+    public void writeStreamTokenizerNval() {
+        new StreamTokenizer((Reader) null).nval = 5;
+    }
+
+    public double readStreamTokenizerNval() {
+        return new StreamTokenizer((Reader) null).nval;
+    }
+
+    public void callStringValueOf() {
+        String.valueOf(5);
+    }
+
+    public void callIntegerValueOf() {
+        Integer.valueOf("5");
+    }
+
+    public void callArrayListRemoveIndex() {
+        new ArrayList<String>().remove(5);
+    }
+
+    public void callArrayListRemoveValue() {
+        new ArrayList<String>().remove("5");
+    }
+
+    static class MyList<T> extends AbstractList<T> {
+        @Override public T get(int index) {
+            return null;
+        }
+        @Override public int size() {
+            return 0;
+        }
+        @Override public boolean remove(Object o) {
+            return false;
+        }
+    }
+}
diff --git a/dx/tests/118-find-usages/build b/dx/tests/118-find-usages/build
new file mode 100644
index 0000000..bb08371
--- /dev/null
+++ b/dx/tests/118-find-usages/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
diff --git a/dx/tests/118-find-usages/expected.txt b/dx/tests/118-find-usages/expected.txt
new file mode 100644
index 0000000..9b11110
--- /dev/null
+++ b/dx/tests/118-find-usages/expected.txt
@@ -0,0 +1,9 @@
+StreamTokenizer.nval
+LFoo;.readStreamTokenizerNval: field reference D.nval (iget-wide)
+LFoo;.writeStreamTokenizerNval: field reference D.nval (iput-wide)
+ArrayList.remove()
+LFoo;.callArrayListRemoveIndex: method reference Ljava/util/ArrayList;.remove(I) (invoke-virtual)
+LFoo;.callArrayListRemoveValue: method reference Ljava/util/ArrayList;.remove(Ljava/lang/Object;) (invoke-virtual)
+Collection.remove()
+String.valueOf()
+LFoo;.callStringValueOf: method reference Ljava/lang/String;.valueOf(I) (invoke-static)
diff --git a/dx/tests/118-find-usages/info.txt b/dx/tests/118-find-usages/info.txt
new file mode 100644
index 0000000..2a4e8a6
--- /dev/null
+++ b/dx/tests/118-find-usages/info.txt
@@ -0,0 +1,3 @@
+Creates a .dex file and runs find usages on it to find references and declarations.
+
+The expected output assumes this bug has not yet been fixed: http://b/3366285
\ No newline at end of file
diff --git a/dx/tests/118-find-usages/run b/dx/tests/118-find-usages/run
new file mode 100644
index 0000000..c0cada3
--- /dev/null
+++ b/dx/tests/118-find-usages/run
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# Copyright (C) 2011 The Android Open Source Project
+#
+# 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.
+
+dx --output=foo.dex --dex *.class
+
+echo "StreamTokenizer.nval"
+dx --find-usages foo.dex "Ljava/io/StreamTokenizer;" nval
+
+echo "ArrayList.remove()"
+dx --find-usages foo.dex "Ljava/util/ArrayList;" remove
+
+echo "Collection.remove()"
+dx --find-usages foo.dex "Ljava/util/Collection;" remove
+
+echo "String.valueOf()"
+dx --find-usages foo.dex "Ljava/lang/String;" valueOf
diff --git a/dx/tests/119-merge-conflict/build b/dx/tests/119-merge-conflict/build
new file mode 100644
index 0000000..f603ce2
--- /dev/null
+++ b/dx/tests/119-merge-conflict/build
@@ -0,0 +1,30 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+junitjar=$progdir/../framework/junit-host.jar
+
+for i in "$dxjar" "$junitjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+${JAVAC} -cp $dxjar:$junitjar `find . -name "*.java"`
diff --git a/dx/tests/119-merge-conflict/com/android/dx/merge/MergeConflictTest.java b/dx/tests/119-merge-conflict/com/android/dx/merge/MergeConflictTest.java
new file mode 100644
index 0000000..c0713e9
--- /dev/null
+++ b/dx/tests/119-merge-conflict/com/android/dx/merge/MergeConflictTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+import com.android.dex.Dex;
+import com.android.dex.DexException;
+import java.io.IOException;
+import junit.framework.TestCase;
+
+public final class MergeConflictTest extends TestCase {
+
+    public void testMergeConflict() throws IOException {
+        Dex a = resourceToDexBuffer("/testdata/A.dex");
+        Dex b = resourceToDexBuffer("/testdata/B.dex");
+
+        // a and b don't overlap; this should succeed
+        Dex ab = new DexMerger(new Dex[]{a, b}, CollisionPolicy.FAIL).merge();
+
+        // a and ab overlap; this should fail
+        DexMerger dexMerger = new DexMerger(new Dex[]{a, ab}, CollisionPolicy.FAIL);
+        try {
+            dexMerger.merge();
+            fail();
+        } catch (DexException expected) {
+            assertEquals("Multiple dex files define Ltestdata/A;", expected.getMessage());
+        }
+    }
+
+    private Dex resourceToDexBuffer(String resource) throws IOException {
+        return new Dex(getClass().getResourceAsStream(resource));
+    }
+}
diff --git a/dx/tests/119-merge-conflict/expected.txt b/dx/tests/119-merge-conflict/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/119-merge-conflict/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/119-merge-conflict/info.txt b/dx/tests/119-merge-conflict/info.txt
new file mode 100644
index 0000000..012187a
--- /dev/null
+++ b/dx/tests/119-merge-conflict/info.txt
@@ -0,0 +1,5 @@
+Merges dex files with and without conflicts.
+
+The run script requires vogar, so you must have vogar on your $PATH to run this
+test. You'll also need a device or host VM for vogar to attach to.
+
diff --git a/dx/tests/119-merge-conflict/run b/dx/tests/119-merge-conflict/run
new file mode 100644
index 0000000..87e0c1d
--- /dev/null
+++ b/dx/tests/119-merge-conflict/run
@@ -0,0 +1,45 @@
+#!/bin/bash
+#
+# Copyright (C) 2011 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+junitjar=$progdir/../framework/junit-host.jar
+junitdex=$progdir/../framework/junit-hostdex.jar
+
+for i in "$dxjar" "$junitjar" "$junitdex"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+dx --dex --output=test.jar com/android/dx/merge/* $dxjar
+
+# Build a resource .jar containing the .dex files to merge
+dx --dex --output=testdata/A.dex testdata/A.class
+dx --dex --output=testdata/B.dex testdata/B.class
+jar cfM resources.jar testdata/*.dex
+
+art -classpath test.jar:$junitdex:resources.jar \
+  junit.textui.TestRunner com.android.dx.merge.MergeConflictTest > unit-out.txt 2>&1
+
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/119-merge-conflict/testdata/A.java b/dx/tests/119-merge-conflict/testdata/A.java
new file mode 100644
index 0000000..8ff8341
--- /dev/null
+++ b/dx/tests/119-merge-conflict/testdata/A.java
@@ -0,0 +1,7 @@
+package testdata;
+
+public class A {
+    String hello() {
+        return "hello from A";
+    }
+}
diff --git a/dx/tests/119-merge-conflict/testdata/B.java b/dx/tests/119-merge-conflict/testdata/B.java
new file mode 100644
index 0000000..cadd96f
--- /dev/null
+++ b/dx/tests/119-merge-conflict/testdata/B.java
@@ -0,0 +1,7 @@
+package testdata;
+
+public class B {
+    public static void main(String[] args) {
+        System.out.println(new A().hello());
+    }
+}
diff --git a/dx/tests/121-sccp/Blort.debug.class b/dx/tests/121-sccp/Blort.debug.class
new file mode 100644
index 0000000..1ac7cfc
Binary files /dev/null and b/dx/tests/121-sccp/Blort.debug.class differ
diff --git a/dx/tests/121-sccp/Blort.java b/dx/tests/121-sccp/Blort.java
new file mode 100644
index 0000000..31e7d8e
--- /dev/null
+++ b/dx/tests/121-sccp/Blort.java
@@ -0,0 +1,164 @@
+class Blort {
+
+    // Test integers
+    public static int testIntAddSub() {
+        int a, b, c, d;
+        a = 3;
+        b = 5 - a;
+        while (true) {
+            c = a + b;
+            d = 5;
+            a = d - b;
+            if (c <= d) {
+                c = d + 1;
+            } else {
+                return c;
+            }
+            b = 2;
+        }
+    }
+
+    public static int testIntMult() {
+        int a = 6;
+        int b = 9 - a;
+        int c = b * 4;
+
+        if (c > 10) {
+            c = c - 10;
+        }
+        return c * 2;
+    }
+
+    public static int testIntDiv() {
+        int a = 30;
+        int b = 9 - a / 5;
+        int c = b * 4;
+
+        if (c > 10) {
+            c = c - 10;
+        }
+        return c * (60 / a);
+    }
+
+    public static int testIntMod() {
+        int a = 5;
+        int b = a % 3;
+        int c = a % 0;
+        return b + c;
+    }
+
+    public static int testIntPhi() {
+        int a = 37;
+        int b = 3;
+        int c = (b == 0) ? 0 : (a / b);
+        return c;
+    }
+
+    // Test floats
+    public static float testFloatAddSub() {
+        float a, b, c, d;
+        a = 3;
+        b = 5 - a;
+        while (true) {
+            c = a + b;
+            d = 5;
+            a = d - b;
+            if (c <= d) {
+                c = d + 1;
+            } else {
+                return c;
+            }
+            b = 2;
+        }
+    }
+
+    public static float testFloatMult() {
+        float a = 6;
+        float b = 9 - a;
+        float c = b * 4;
+
+        if (c > 10) {
+            c = c - 10;
+        }
+        return c * 2;
+    }
+
+    public static float testFloatDiv() {
+        float a = 30;
+        float b = 9 - a / 5;
+        float c = b * 4;
+
+        if (c > 10) {
+            c = c - 10;
+        }
+        return c * (60 / a);
+    }
+
+    public static float testFloatMod() {
+        float a = 5;
+        float b = a % 3;
+        float c = a % 0;
+        return b + c;
+    }
+
+    public static float testFloatPhi() {
+        float a = 37;
+        float b = 3;
+        float c = (b == 0) ? 0 : (a / b);
+        return c;
+    }
+
+    // Test doubles
+    public static double testDoubleAddSub() {
+        double a, b, c, d;
+        a = 3;
+        b = 5 - a;
+        while (true) {
+            c = a + b;
+            d = 5;
+            a = d - b;
+            if (c <= d) {
+                c = d + 1;
+            } else {
+                return c;
+            }
+            b = 2;
+        }
+    }
+
+    public static double testDoubleMult() {
+        double a = 6;
+        double b = 9 - a;
+        double c = b * 4;
+
+        if (c > 10) {
+            c = c - 10;
+        }
+        return c * 2;
+    }
+
+    public static double testDoubleDiv() {
+        double a = 30;
+        double b = 9 - a / 5;
+        double c = b * 4;
+
+        if (c > 10) {
+            c = c - 10;
+        }
+        return c * (60 / a);
+    }
+
+    public static double testDoubleMod() {
+        double a = 5;
+        double b = a % 3;
+        double c = a % 0;
+        return b + c;
+    }
+
+    public static double testDoublePhi() {
+        double a = 37;
+        double b = 3;
+        double c = (b == 0) ? 0 : (a / b);
+        return c;
+    }
+}
diff --git a/dx/tests/121-sccp/Blort.nodebug.class b/dx/tests/121-sccp/Blort.nodebug.class
new file mode 100644
index 0000000..ba83fde
Binary files /dev/null and b/dx/tests/121-sccp/Blort.nodebug.class differ
diff --git a/dx/tests/121-sccp/build b/dx/tests/121-sccp/build
new file mode 100644
index 0000000..ba98b94
--- /dev/null
+++ b/dx/tests/121-sccp/build
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
+mv Blort.class Blort.nodebug.class
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
+mv Blort.class Blort.debug.class
diff --git a/dx/tests/121-sccp/expected.txt b/dx/tests/121-sccp/expected.txt
new file mode 100644
index 0000000..afc02c7
--- /dev/null
+++ b/dx/tests/121-sccp/expected.txt
@@ -0,0 +1,715 @@
+Blort.testDoubleAddSub:()D:
+regs: 0008; ins: 0000; outs: 0000
+  0000: const-wide/high16 v6, #double 5.0 // #4014000000000000
+  0002: const-wide/high16 v2, #double 3.0 // #4008000000000000
+  0004: sub-double v0, v6, v2
+  0006: add-double v4, v2, v0
+  0008: sub-double v2, v6, v0
+  000a: cmpg-double v0, v4, v6
+  000c: if-gtz v0, 0014 // +0008
+  000e: const-wide/high16 v0, #double 1.0 // #3ff0000000000000
+  0010: add-double/2addr v0, v6
+  0011: const-wide/high16 v0, #double 2.0 // #4000000000000000
+  0013: goto 0006 // -000d
+  0014: return-wide v4
+  debug info
+    line_start: 114
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 114
+    0004: line 115
+    0006: line 117
+    0008: line 119
+    000a: line 120
+    000e: line 121
+    0011: line 125
+    0014: line 123
+    end sequence
+  source file: "Blort.java"
+Blort.testDoubleDiv:()D:
+regs: 0008; ins: 0000; outs: 0000
+  0000: const-wide/high16 v6, #double 10.0 // #4024000000000000
+  0002: const-wide/high16 v2, #double 30.0 // #403e000000000000
+  0004: const-wide/high16 v0, #double 9.0 // #4022000000000000
+  0006: const-wide/high16 v4, #double 5.0 // #4014000000000000
+  0008: div-double v4, v2, v4
+  000a: sub-double/2addr v0, v4
+  000b: const-wide/high16 v4, #double 4.0 // #4010000000000000
+  000d: mul-double/2addr v0, v4
+  000e: cmpl-double v4, v0, v6
+  0010: if-lez v4, 0013 // +0003
+  0012: sub-double/2addr v0, v6
+  0013: const-wide/high16 v4, #double 60.0 // #404e000000000000
+  0015: div-double v2, v4, v2
+  0017: mul-double/2addr v0, v2
+  0018: return-wide v0
+  debug info
+    line_start: 141
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 141
+    0004: line 142
+    000b: line 143
+    000e: line 145
+    0012: line 146
+    0013: line 148
+    end sequence
+  source file: "Blort.java"
+Blort.testDoubleMod:()D:
+regs: 0006; ins: 0000; outs: 0000
+  0000: const-wide/high16 v0, #double 5.0 // #4014000000000000
+  0002: const-wide/high16 v2, #double 3.0 // #4008000000000000
+  0004: rem-double v2, v0, v2
+  0006: const-wide/16 v4, #double 0.0 // #0000
+  0008: rem-double/2addr v0, v4
+  0009: add-double/2addr v0, v2
+  000a: return-wide v0
+  debug info
+    line_start: 152
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 152
+    0002: line 153
+    0006: line 154
+    0009: line 155
+    end sequence
+  source file: "Blort.java"
+Blort.testDoubleMult:()D:
+regs: 0006; ins: 0000; outs: 0000
+  0000: const-wide/high16 v4, #double 10.0 // #4024000000000000
+  0002: const-wide/high16 v0, #double 6.0 // #4018000000000000
+  0004: const-wide/high16 v2, #double 9.0 // #4022000000000000
+  0006: sub-double v0, v2, v0
+  0008: const-wide/high16 v2, #double 4.0 // #4010000000000000
+  000a: mul-double/2addr v0, v2
+  000b: cmpl-double v2, v0, v4
+  000d: if-lez v2, 0010 // +0003
+  000f: sub-double/2addr v0, v4
+  0010: const-wide/high16 v2, #double 2.0 // #4000000000000000
+  0012: mul-double/2addr v0, v2
+  0013: return-wide v0
+  debug info
+    line_start: 130
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 130
+    0004: line 131
+    0008: line 132
+    000b: line 134
+    000f: line 135
+    0010: line 137
+    end sequence
+  source file: "Blort.java"
+Blort.testDoublePhi:()D:
+regs: 0007; ins: 0000; outs: 0000
+  0000: const-wide/16 v0, #double 0.0 // #0000
+  0002: const-wide v2, #double 37.0 // #4042800000000000
+  0007: const-wide/high16 v4, #double 3.0 // #4008000000000000
+  0009: cmpl-double v6, v4, v0
+  000b: if-nez v6, 000e // +0003
+  000d: return-wide v0
+  000e: div-double v0, v2, v4
+  0010: goto 000d // -0003
+  debug info
+    line_start: 159
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 159
+    0007: line 160
+    0009: line 161
+    000d: line 162
+    000e: line 161
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatAddSub:()F:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/high16 v3, #float 5.0 // #40a00000
+  0002: const/high16 v1, #float 3.0 // #40400000
+  0004: sub-float v0, v3, v1
+  0006: add-float v2, v1, v0
+  0008: sub-float v1, v3, v0
+  000a: cmpg-float v0, v2, v3
+  000c: if-gtz v0, 0014 // +0008
+  000e: const/high16 v0, #float 1.0 // #3f800000
+  0010: add-float/2addr v0, v3
+  0011: const/high16 v0, #float 2.0 // #40000000
+  0013: goto 0006 // -000d
+  0014: return v2
+  debug info
+    line_start: 60
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 60
+    0004: line 61
+    0006: line 63
+    0008: line 65
+    000a: line 66
+    000e: line 67
+    0011: line 71
+    0014: line 69
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatDiv:()F:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/high16 v3, #float 10.0 // #41200000
+  0002: const/high16 v1, #float 30.0 // #41f00000
+  0004: const/high16 v0, #float 9.0 // #41100000
+  0006: const/high16 v2, #float 5.0 // #40a00000
+  0008: div-float v2, v1, v2
+  000a: sub-float/2addr v0, v2
+  000b: const/high16 v2, #float 4.0 // #40800000
+  000d: mul-float/2addr v0, v2
+  000e: cmpl-float v2, v0, v3
+  0010: if-lez v2, 0013 // +0003
+  0012: sub-float/2addr v0, v3
+  0013: const/high16 v2, #float 60.0 // #42700000
+  0015: div-float v1, v2, v1
+  0017: mul-float/2addr v0, v1
+  0018: return v0
+  debug info
+    line_start: 87
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 87
+    0004: line 88
+    000b: line 89
+    000e: line 91
+    0012: line 92
+    0013: line 94
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatMod:()F:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/high16 v0, #float 5.0 // #40a00000
+  0002: const/high16 v1, #float 3.0 // #40400000
+  0004: rem-float v1, v0, v1
+  0006: const/4 v2, #float 0.0 // #0
+  0007: rem-float/2addr v0, v2
+  0008: add-float/2addr v0, v1
+  0009: return v0
+  debug info
+    line_start: 98
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 98
+    0002: line 99
+    0006: line 100
+    0008: line 101
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatMult:()F:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/high16 v2, #float 10.0 // #41200000
+  0002: const/high16 v0, #float 6.0 // #40c00000
+  0004: const/high16 v1, #float 9.0 // #41100000
+  0006: sub-float v0, v1, v0
+  0008: const/high16 v1, #float 4.0 // #40800000
+  000a: mul-float/2addr v0, v1
+  000b: cmpl-float v1, v0, v2
+  000d: if-lez v1, 0010 // +0003
+  000f: sub-float/2addr v0, v2
+  0010: const/high16 v1, #float 2.0 // #40000000
+  0012: mul-float/2addr v0, v1
+  0013: return v0
+  debug info
+    line_start: 76
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 76
+    0004: line 77
+    0008: line 78
+    000b: line 80
+    000f: line 81
+    0010: line 83
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatPhi:()F:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v0, #float 0.0 // #0
+  0001: const/high16 v1, #float 37.0 // #42140000
+  0003: const/high16 v2, #float 3.0 // #40400000
+  0005: cmpl-float v3, v2, v0
+  0007: if-nez v3, 000a // +0003
+  0009: return v0
+  000a: div-float v0, v1, v2
+  000c: goto 0009 // -0003
+  debug info
+    line_start: 105
+    parameters_size: 0000
+    0000: prologue end
+    0001: line 105
+    0003: line 106
+    0005: line 107
+    0009: line 108
+    000a: line 107
+    end sequence
+  source file: "Blort.java"
+Blort.testIntAddSub:()I:
+regs: 0000; ins: 0000; outs: 0000
+  0000: goto/32 0000 // +0000
+  debug info
+    line_start: 17
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 17
+    end sequence
+  source file: "Blort.java"
+Blort.testIntDiv:()I:
+regs: 0001; ins: 0000; outs: 0000
+  0000: const/4 v0, #int 4 // #4
+  0001: return v0
+  debug info
+    line_start: 40
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 40
+    end sequence
+  source file: "Blort.java"
+Blort.testIntMod:()I:
+regs: 0001; ins: 0000; outs: 0000
+  0000: const/4 v0, #int 5 // #5
+  0001: rem-int/lit8 v0, v0, #int 0 // #00
+  0003: add-int/lit8 v0, v0, #int 2 // #02
+  0005: return v0
+  debug info
+    line_start: 44
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 44
+    0001: line 46
+    0003: line 47
+    end sequence
+  source file: "Blort.java"
+Blort.testIntMult:()I:
+regs: 0001; ins: 0000; outs: 0000
+  0000: const/4 v0, #int 4 // #4
+  0001: return v0
+  debug info
+    line_start: 29
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 29
+    end sequence
+  source file: "Blort.java"
+Blort.testIntPhi:()I:
+regs: 0001; ins: 0000; outs: 0000
+  0000: const/16 v0, #int 12 // #000c
+  0002: return v0
+  debug info
+    line_start: 53
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 53
+    0002: line 54
+    end sequence
+  source file: "Blort.java"
+Blort.testDoubleAddSub:()D:
+regs: 000a; ins: 0000; outs: 0000
+  0000: const-wide/high16 v0, #double 3.0 // #4008000000000000
+  0002: const-wide/high16 v8, #double 5.0 // #4014000000000000
+  0004: sub-double v2, v8, v0
+  0006: add-double v4, v0, v2
+  0008: const-wide/high16 v6, #double 5.0 // #4014000000000000
+  000a: sub-double v0, v6, v2
+  000c: cmpg-double v8, v4, v6
+  000e: if-gtz v8, 0017 // +0009
+  0010: const-wide/high16 v8, #double 1.0 // #3ff0000000000000
+  0012: add-double v4, v6, v8
+  0014: const-wide/high16 v2, #double 2.0 // #4000000000000000
+  0016: goto 0006 // -0010
+  0017: return-wide v4
+  debug info
+    line_start: 114
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 114
+    0002: line 115
+    0002: +local v0 a double
+    0006: line 117
+    0006: +local v2 b double
+    0008: line 118
+    0008: +local v4 c double
+    000a: line 119
+    000a: +local v6 d double
+    000c: line 120
+    0010: line 121
+    0014: line 125
+    0017: line 123
+    end sequence
+  source file: "Blort.java"
+Blort.testDoubleDiv:()D:
+regs: 000c; ins: 0000; outs: 0000
+  0000: const-wide/high16 v10, #double 10.0 // #4024000000000000
+  0002: const-wide/high16 v0, #double 30.0 // #403e000000000000
+  0004: const-wide/high16 v6, #double 9.0 // #4022000000000000
+  0006: const-wide/high16 v8, #double 5.0 // #4014000000000000
+  0008: div-double v8, v0, v8
+  000a: sub-double v2, v6, v8
+  000c: const-wide/high16 v6, #double 4.0 // #4010000000000000
+  000e: mul-double v4, v2, v6
+  0010: cmpl-double v6, v4, v10
+  0012: if-lez v6, 0015 // +0003
+  0014: sub-double/2addr v4, v10
+  0015: const-wide/high16 v6, #double 60.0 // #404e000000000000
+  0017: div-double/2addr v6, v0
+  0018: mul-double/2addr v6, v4
+  0019: return-wide v6
+  debug info
+    line_start: 141
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 141
+    0004: line 142
+    0004: +local v0 a double
+    000c: line 143
+    000c: +local v2 b double
+    0010: line 145
+    0010: +local v4 c double
+    0014: line 146
+    0015: line 148
+    end sequence
+  source file: "Blort.java"
+Blort.testDoubleMod:()D:
+regs: 0008; ins: 0000; outs: 0000
+  0000: const-wide/high16 v0, #double 5.0 // #4014000000000000
+  0002: const-wide/high16 v6, #double 3.0 // #4008000000000000
+  0004: rem-double v2, v0, v6
+  0006: const-wide/16 v6, #double 0.0 // #0000
+  0008: rem-double v4, v0, v6
+  000a: add-double v6, v2, v4
+  000c: return-wide v6
+  debug info
+    line_start: 152
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 152
+    0002: line 153
+    0002: +local v0 a double
+    0006: line 154
+    0006: +local v2 b double
+    000a: line 155
+    000a: +local v4 c double
+    end sequence
+  source file: "Blort.java"
+Blort.testDoubleMult:()D:
+regs: 000a; ins: 0000; outs: 0000
+  0000: const-wide/high16 v8, #double 10.0 // #4024000000000000
+  0002: const-wide/high16 v0, #double 6.0 // #4018000000000000
+  0004: const-wide/high16 v6, #double 9.0 // #4022000000000000
+  0006: sub-double v2, v6, v0
+  0008: const-wide/high16 v6, #double 4.0 // #4010000000000000
+  000a: mul-double v4, v2, v6
+  000c: cmpl-double v6, v4, v8
+  000e: if-lez v6, 0011 // +0003
+  0010: sub-double/2addr v4, v8
+  0011: const-wide/high16 v6, #double 2.0 // #4000000000000000
+  0013: mul-double/2addr v6, v4
+  0014: return-wide v6
+  debug info
+    line_start: 130
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 130
+    0004: line 131
+    0004: +local v0 a double
+    0008: line 132
+    0008: +local v2 b double
+    000c: line 134
+    000c: +local v4 c double
+    0010: line 135
+    0011: line 137
+    end sequence
+  source file: "Blort.java"
+Blort.testDoublePhi:()D:
+regs: 0007; ins: 0000; outs: 0000
+  0000: const-wide/16 v4, #double 0.0 // #0000
+  0002: const-wide v0, #double 37.0 // #4042800000000000
+  0007: const-wide/high16 v2, #double 3.0 // #4008000000000000
+  0009: cmpl-double v6, v2, v4
+  000b: if-nez v6, 000e // +0003
+  000d: return-wide v4
+  000e: div-double v4, v0, v2
+  0010: goto 000d // -0003
+  debug info
+    line_start: 159
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 159
+    0007: line 160
+    0007: +local v0 a double
+    0009: line 161
+    0009: +local v2 b double
+    000d: line 162
+    000d: +local v4 c double
+    000e: line 161
+    000e: -local v4 c double
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatAddSub:()F:
+regs: 0005; ins: 0000; outs: 0000
+  0000: const/high16 v0, #float 3.0 // #40400000
+  0002: const/high16 v4, #float 5.0 // #40a00000
+  0004: sub-float v1, v4, v0
+  0006: add-float v2, v0, v1
+  0008: const/high16 v3, #float 5.0 // #40a00000
+  000a: sub-float v0, v3, v1
+  000c: cmpg-float v4, v2, v3
+  000e: if-gtz v4, 0017 // +0009
+  0010: const/high16 v4, #float 1.0 // #3f800000
+  0012: add-float v2, v3, v4
+  0014: const/high16 v1, #float 2.0 // #40000000
+  0016: goto 0006 // -0010
+  0017: return v2
+  debug info
+    line_start: 60
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 60
+    0002: line 61
+    0002: +local v0 a float
+    0006: line 63
+    0006: +local v1 b float
+    0008: line 64
+    0008: +local v2 c float
+    000a: line 65
+    000a: +local v3 d float
+    000c: line 66
+    0010: line 67
+    0014: line 71
+    0017: line 69
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatDiv:()F:
+regs: 0006; ins: 0000; outs: 0000
+  0000: const/high16 v5, #float 10.0 // #41200000
+  0002: const/high16 v0, #float 30.0 // #41f00000
+  0004: const/high16 v3, #float 9.0 // #41100000
+  0006: const/high16 v4, #float 5.0 // #40a00000
+  0008: div-float v4, v0, v4
+  000a: sub-float v1, v3, v4
+  000c: const/high16 v3, #float 4.0 // #40800000
+  000e: mul-float v2, v1, v3
+  0010: cmpl-float v3, v2, v5
+  0012: if-lez v3, 0015 // +0003
+  0014: sub-float/2addr v2, v5
+  0015: const/high16 v3, #float 60.0 // #42700000
+  0017: div-float/2addr v3, v0
+  0018: mul-float/2addr v3, v2
+  0019: return v3
+  debug info
+    line_start: 87
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 87
+    0004: line 88
+    0004: +local v0 a float
+    000c: line 89
+    000c: +local v1 b float
+    0010: line 91
+    0010: +local v2 c float
+    0014: line 92
+    0015: line 94
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatMod:()F:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/high16 v0, #float 5.0 // #40a00000
+  0002: const/high16 v3, #float 3.0 // #40400000
+  0004: rem-float v1, v0, v3
+  0006: const/4 v3, #float 0.0 // #0
+  0007: rem-float v2, v0, v3
+  0009: add-float v3, v1, v2
+  000b: return v3
+  debug info
+    line_start: 98
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 98
+    0002: line 99
+    0002: +local v0 a float
+    0006: line 100
+    0006: +local v1 b float
+    0009: line 101
+    0009: +local v2 c float
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatMult:()F:
+regs: 0005; ins: 0000; outs: 0000
+  0000: const/high16 v4, #float 10.0 // #41200000
+  0002: const/high16 v0, #float 6.0 // #40c00000
+  0004: const/high16 v3, #float 9.0 // #41100000
+  0006: sub-float v1, v3, v0
+  0008: const/high16 v3, #float 4.0 // #40800000
+  000a: mul-float v2, v1, v3
+  000c: cmpl-float v3, v2, v4
+  000e: if-lez v3, 0011 // +0003
+  0010: sub-float/2addr v2, v4
+  0011: const/high16 v3, #float 2.0 // #40000000
+  0013: mul-float/2addr v3, v2
+  0014: return v3
+  debug info
+    line_start: 76
+    parameters_size: 0000
+    0000: prologue end
+    0002: line 76
+    0004: line 77
+    0004: +local v0 a float
+    0008: line 78
+    0008: +local v1 b float
+    000c: line 80
+    000c: +local v2 c float
+    0010: line 81
+    0011: line 83
+    end sequence
+  source file: "Blort.java"
+Blort.testFloatPhi:()F:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v2, #float 0.0 // #0
+  0001: const/high16 v0, #float 37.0 // #42140000
+  0003: const/high16 v1, #float 3.0 // #40400000
+  0005: cmpl-float v3, v1, v2
+  0007: if-nez v3, 000a // +0003
+  0009: return v2
+  000a: div-float v2, v0, v1
+  000c: goto 0009 // -0003
+  debug info
+    line_start: 105
+    parameters_size: 0000
+    0000: prologue end
+    0001: line 105
+    0003: line 106
+    0003: +local v0 a float
+    0005: line 107
+    0005: +local v1 b float
+    0009: line 108
+    0009: +local v2 c float
+    000a: line 107
+    000a: -local v2 c float
+    end sequence
+  source file: "Blort.java"
+Blort.testIntAddSub:()I:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v0, #int 3 // #3
+  0001: rsub-int/lit8 v1, v0, #int 5 // #05
+  0003: add-int/lit8 v2, v0, #int 2 // #02
+  0005: const/4 v3, #int 5 // #5
+  0006: add-int/lit8 v0, v3, #int -2 // #fe
+  0008: if-gt v2, v3, 000e // +0006
+  000a: add-int/lit8 v2, v3, #int 1 // #01
+  000c: const/4 v1, #int 2 // #2
+  000d: goto 0003 // -000a
+  000e: return v2
+  debug info
+    line_start: 6
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 6
+    0001: line 7
+    0001: +local v0 a int
+    0003: line 9
+    0003: +local v1 b int
+    0005: line 10
+    0005: +local v2 c int
+    0006: line 11
+    0006: +local v3 d int
+    0008: line 12
+    000a: line 13
+    000c: line 17
+    000e: line 15
+    end sequence
+  source file: "Blort.java"
+Blort.testIntDiv:()I:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/16 v0, #int 30 // #001e
+  0002: const/4 v3, #int 6 // #6
+  0003: rsub-int/lit8 v1, v3, #int 9 // #09
+  0005: mul-int/lit8 v2, v1, #int 4 // #04
+  0007: const/16 v3, #int 10 // #000a
+  0009: if-le v2, v3, 000d // +0004
+  000b: add-int/lit8 v2, v2, #int -10 // #f6
+  000d: mul-int/lit8 v3, v2, #int 2 // #02
+  000f: return v3
+  debug info
+    line_start: 33
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 33
+    0002: line 34
+    0002: +local v0 a int
+    0005: line 35
+    0005: +local v1 b int
+    0007: line 37
+    0007: +local v2 c int
+    000b: line 38
+    000d: line 40
+    end sequence
+  source file: "Blort.java"
+Blort.testIntMod:()I:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v0, #int 5 // #5
+  0001: rem-int/lit8 v1, v0, #int 3 // #03
+  0003: rem-int/lit8 v2, v0, #int 0 // #00
+  0005: add-int/lit8 v3, v2, #int 2 // #02
+  0007: return v3
+  debug info
+    line_start: 44
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 44
+    0001: line 45
+    0001: +local v0 a int
+    0003: line 46
+    0003: +local v1 b int
+    0005: line 47
+    0005: +local v2 c int
+    end sequence
+  source file: "Blort.java"
+Blort.testIntMult:()I:
+regs: 0004; ins: 0000; outs: 0000
+  0000: const/4 v0, #int 6 // #6
+  0001: rsub-int/lit8 v1, v0, #int 9 // #09
+  0003: mul-int/lit8 v2, v1, #int 4 // #04
+  0005: const/16 v3, #int 10 // #000a
+  0007: if-le v2, v3, 000b // +0004
+  0009: add-int/lit8 v2, v2, #int -10 // #f6
+  000b: mul-int/lit8 v3, v2, #int 2 // #02
+  000d: return v3
+  debug info
+    line_start: 22
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 22
+    0001: line 23
+    0001: +local v0 a int
+    0003: line 24
+    0003: +local v1 b int
+    0005: line 26
+    0005: +local v2 c int
+    0009: line 27
+    000b: line 29
+    end sequence
+  source file: "Blort.java"
+Blort.testIntPhi:()I:
+regs: 0003; ins: 0000; outs: 0000
+  0000: const/16 v0, #int 37 // #0025
+  0002: const/4 v1, #int 3 // #3
+  0003: if-nez v1, 0007 // +0004
+  0005: const/4 v2, #int 0 // #0
+  0006: return v2
+  0007: const/16 v2, #int 12 // #000c
+  0009: goto 0006 // -0003
+  debug info
+    line_start: 51
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 51
+    0002: line 52
+    0002: +local v0 a int
+    0003: line 53
+    0003: +local v1 b int
+    0006: line 54
+    0006: +local v2 c int
+    0007: line 53
+    0007: -local v2 c int
+    end sequence
+  source file: "Blort.java"
diff --git a/dx/tests/121-sccp/info.txt b/dx/tests/121-sccp/info.txt
new file mode 100644
index 0000000..76e6bcd
--- /dev/null
+++ b/dx/tests/121-sccp/info.txt
@@ -0,0 +1,6 @@
+This tests various aspects of the SCCP pass for correctness, and to
+ensure there aren't any regressions.
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/121-sccp/run b/dx/tests/121-sccp/run
new file mode 100644
index 0000000..087207f
--- /dev/null
+++ b/dx/tests/121-sccp/run
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+cp Blort.nodebug.class Blort.class
+dx --debug --dex --dump-method=Blort.test'*' Blort.class
+
+cp Blort.debug.class Blort.class
+dx --debug --dex --dump-method=Blort.test'*' Blort.class
+
+rm Blort.class
diff --git a/dx/tests/122-switch-with-high-register/Blort.debug.class b/dx/tests/122-switch-with-high-register/Blort.debug.class
new file mode 100644
index 0000000..44f38cc
Binary files /dev/null and b/dx/tests/122-switch-with-high-register/Blort.debug.class differ
diff --git a/dx/tests/122-switch-with-high-register/Blort.java b/dx/tests/122-switch-with-high-register/Blort.java
new file mode 100644
index 0000000..c0fb1d0
--- /dev/null
+++ b/dx/tests/122-switch-with-high-register/Blort.java
@@ -0,0 +1,30 @@
+class Blort {
+
+    public static int switchWithHighRegister(
+            int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, int param9, int param10, int param11, int param12, int param13, int param14, int param15, int param16, int param17, int param18, int param19, int param20, int param21, int param22, int param23, int param24, int param25, int param26, int param27, int param28, int param29, int param30, int param31, int param32, int param33, int param34, int param35, int param36, int param37, int param38, int param39, int param40, int param41, int param42, int param43, int param44, int param45, int param46, int param47, int param48, int param49, int param50, int param51, int param52, int param53, int param54, int param55, int param56, int param57, int param58, int param59, int param60, int param61, int param62, int param63, int param64, int param65, int param66, int param67, int param68, int param69, int param70, int param71, int param72, int param73, int param74, int param75, int param76, int param77, int param78, int param79, int param80, int param81, int param82, int param83, int param84, int param85, int param86, int param87, int param88, int param89, int param90, int param91, int param92, int param93, int param94, int param95, int param96, int param97, int param98, int param99, int param100, int param101, int param102, int param103, int param104, int param105, int param106, int param107, int param108, int param109, int param110, int param111, int param112, int param113, int param114, int param115, int param116, int param117, int param118, int param119, int param120, int param121, int param122, int param123, int param124, int param125, int param126, int param127, int param128, int param129, int param130, int param131, int param132, int param133, int param134, int param135, int param136, int param137, int param138, int param139, int param140, int param141, int param142, int param143, int param144, int param145, int param146, int param147, int param148, int param149, int param150, int param151, int param152, int param153, int param154, int param155, int param156, int param157, int param158, int param159, int param160, int param161, int param162, int param163, int param164, int param165, int param166, int param167, int param168, int param169, int param170, int param171, int param172, int param173, int param174, int param175, int param176, int param177, int param178, int param179, int param180, int param181, int param182, int param183, int param184, int param185, int param186, int param187, int param188, int param189, int param190, int param191, int param192, int param193, int param194, int param195, int param196, int param197, int param198, int param199, int param200, int param201, int param202, int param203, int param204, int param205, int param206, int param207, int param208, int param209, int param210, int param211, int param212, int param213, int param214, int param215, int param216, int param217, int param218, int param219, int param220, int param221, int param222, int param223, int param224, int param225, int param226, int param227, int param228, int param229, int param230, int param231, int param232, int param233, int param234, int param235, int param236, int param237, int param238, int param239, int param240, int param241, int param242, int param243, int param244, int param245, int param246, int param247, int param248, int param249, int param250, int param251, int param252, int param253, int param254,
+            int param255) {
+
+        // this should add a new non-parameter register, and force the register
+        // for param255 over v255
+        int i=1;
+
+        // make sure that it can't re-use one of the parameter registers for i
+        System.out.println(Integer.toString(i+param1+param2+param3+param4+param5+param6+param7+param8+param9+param10+param11+param12+param13+param14+param15+param16+param17+param18+param19+param20+param21+param22+param23+param24+param25+param26+param27+param28+param29+param30+param31+param32+param33+param34+param35+param36+param37+param38+param39+param40+param41+param42+param43+param44+param45+param46+param47+param48+param49+param50+param51+param52+param53+param54+param55+param56+param57+param58+param59+param60+param61+param62+param63+param64+param65+param66+param67+param68+param69+param70+param71+param72+param73+param74+param75+param76+param77+param78+param79+param80+param81+param82+param83+param84+param85+param86+param87+param88+param89+param90+param91+param92+param93+param94+param95+param96+param97+param98+param99+param100+param101+param102+param103+param104+param105+param106+param107+param108+param109+param110+param111+param112+param113+param114+param115+param116+param117+param118+param119+param120+param121+param122+param123+param124+param125+param126+param127+param128+param129+param130+param131+param132+param133+param134+param135+param136+param137+param138+param139+param140+param141+param142+param143+param144+param145+param146+param147+param148+param149+param150+param151+param152+param153+param154+param155+param156+param157+param158+param159+param160+param161+param162+param163+param164+param165+param166+param167+param168+param169+param170+param171+param172+param173+param174+param175+param176+param177+param178+param179+param180+param181+param182+param183+param184+param185+param186+param187+param188+param189+param190+param191+param192+param193+param194+param195+param196+param197+param198+param199+param200+param201+param202+param203+param204+param205+param206+param207+param208+param209+param210+param211+param212+param213+param214+param215+param216+param217+param218+param219+param220+param221+param222+param223+param224+param225+param226+param227+param228+param229+param230+param231+param232+param233+param234+param235+param236+param237+param238+param239+param240+param241+param242+param243+param244+param245+param246+param247+param248+param249+param250+param251+param252+param253+param254));
+
+        // the register for param255 should be greater than v255, forcing dx
+        // to generate a move instruction to move it to a lower register
+        switch (param255) {
+            case 0:
+                return 0;
+            case 1:
+                return 1;
+            case 2:
+                return 2;
+            case 3:
+                return 3;
+            case 4:
+                return 4;
+        }
+        return -1;
+    }
+}
diff --git a/dx/tests/122-switch-with-high-register/Blort.nodebug.class b/dx/tests/122-switch-with-high-register/Blort.nodebug.class
new file mode 100644
index 0000000..8ddc309
Binary files /dev/null and b/dx/tests/122-switch-with-high-register/Blort.nodebug.class differ
diff --git a/dx/tests/122-switch-with-high-register/build b/dx/tests/122-switch-with-high-register/build
new file mode 100644
index 0000000..ba98b94
--- /dev/null
+++ b/dx/tests/122-switch-with-high-register/build
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -d . *.java
+mv Blort.class Blort.nodebug.class
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -g -d . *.java
+mv Blort.class Blort.debug.class
diff --git a/dx/tests/122-switch-with-high-register/expected.txt b/dx/tests/122-switch-with-high-register/expected.txt
new file mode 100644
index 0000000..7f09421
--- /dev/null
+++ b/dx/tests/122-switch-with-high-register/expected.txt
@@ -0,0 +1,1117 @@
+Blort.switchWithHighRegister:(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)I:
+regs: 0102; ins: 00ff; outs: 0002
+  0000: const/4 v1, #int 1 // #1
+  0001: sget-object v2, java.lang.System.out:Ljava/io/PrintStream;
+  0003: add-int/2addr v1, v3
+  0004: add-int/2addr v1, v4
+  0005: add-int/2addr v1, v5
+  0006: add-int/2addr v1, v6
+  0007: add-int/2addr v1, v7
+  0008: add-int/2addr v1, v8
+  0009: add-int/2addr v1, v9
+  000a: add-int/2addr v1, v10
+  000b: add-int/2addr v1, v11
+  000c: add-int/2addr v1, v12
+  000d: add-int/2addr v1, v13
+  000e: add-int/2addr v1, v14
+  000f: add-int/2addr v1, v15
+  0010: add-int v1, v1, v16
+  0012: add-int v1, v1, v17
+  0014: add-int v1, v1, v18
+  0016: add-int v1, v1, v19
+  0018: add-int v1, v1, v20
+  001a: add-int v1, v1, v21
+  001c: add-int v1, v1, v22
+  001e: add-int v1, v1, v23
+  0020: add-int v1, v1, v24
+  0022: add-int v1, v1, v25
+  0024: add-int v1, v1, v26
+  0026: add-int v1, v1, v27
+  0028: add-int v1, v1, v28
+  002a: add-int v1, v1, v29
+  002c: add-int v1, v1, v30
+  002e: add-int v1, v1, v31
+  0030: add-int v1, v1, v32
+  0032: add-int v1, v1, v33
+  0034: add-int v1, v1, v34
+  0036: add-int v1, v1, v35
+  0038: add-int v1, v1, v36
+  003a: add-int v1, v1, v37
+  003c: add-int v1, v1, v38
+  003e: add-int v1, v1, v39
+  0040: add-int v1, v1, v40
+  0042: add-int v1, v1, v41
+  0044: add-int v1, v1, v42
+  0046: add-int v1, v1, v43
+  0048: add-int v1, v1, v44
+  004a: add-int v1, v1, v45
+  004c: add-int v1, v1, v46
+  004e: add-int v1, v1, v47
+  0050: add-int v1, v1, v48
+  0052: add-int v1, v1, v49
+  0054: add-int v1, v1, v50
+  0056: add-int v1, v1, v51
+  0058: add-int v1, v1, v52
+  005a: add-int v1, v1, v53
+  005c: add-int v1, v1, v54
+  005e: add-int v1, v1, v55
+  0060: add-int v1, v1, v56
+  0062: add-int v1, v1, v57
+  0064: add-int v1, v1, v58
+  0066: add-int v1, v1, v59
+  0068: add-int v1, v1, v60
+  006a: add-int v1, v1, v61
+  006c: add-int v1, v1, v62
+  006e: add-int v1, v1, v63
+  0070: add-int v1, v1, v64
+  0072: add-int v1, v1, v65
+  0074: add-int v1, v1, v66
+  0076: add-int v1, v1, v67
+  0078: add-int v1, v1, v68
+  007a: add-int v1, v1, v69
+  007c: add-int v1, v1, v70
+  007e: add-int v1, v1, v71
+  0080: add-int v1, v1, v72
+  0082: add-int v1, v1, v73
+  0084: add-int v1, v1, v74
+  0086: add-int v1, v1, v75
+  0088: add-int v1, v1, v76
+  008a: add-int v1, v1, v77
+  008c: add-int v1, v1, v78
+  008e: add-int v1, v1, v79
+  0090: add-int v1, v1, v80
+  0092: add-int v1, v1, v81
+  0094: add-int v1, v1, v82
+  0096: add-int v1, v1, v83
+  0098: add-int v1, v1, v84
+  009a: add-int v1, v1, v85
+  009c: add-int v1, v1, v86
+  009e: add-int v1, v1, v87
+  00a0: add-int v1, v1, v88
+  00a2: add-int v1, v1, v89
+  00a4: add-int v1, v1, v90
+  00a6: add-int v1, v1, v91
+  00a8: add-int v1, v1, v92
+  00aa: add-int v1, v1, v93
+  00ac: add-int v1, v1, v94
+  00ae: add-int v1, v1, v95
+  00b0: add-int v1, v1, v96
+  00b2: add-int v1, v1, v97
+  00b4: add-int v1, v1, v98
+  00b6: add-int v1, v1, v99
+  00b8: add-int v1, v1, v100
+  00ba: add-int v1, v1, v101
+  00bc: add-int v1, v1, v102
+  00be: add-int v1, v1, v103
+  00c0: add-int v1, v1, v104
+  00c2: add-int v1, v1, v105
+  00c4: add-int v1, v1, v106
+  00c6: add-int v1, v1, v107
+  00c8: add-int v1, v1, v108
+  00ca: add-int v1, v1, v109
+  00cc: add-int v1, v1, v110
+  00ce: add-int v1, v1, v111
+  00d0: add-int v1, v1, v112
+  00d2: add-int v1, v1, v113
+  00d4: add-int v1, v1, v114
+  00d6: add-int v1, v1, v115
+  00d8: add-int v1, v1, v116
+  00da: add-int v1, v1, v117
+  00dc: add-int v1, v1, v118
+  00de: add-int v1, v1, v119
+  00e0: add-int v1, v1, v120
+  00e2: add-int v1, v1, v121
+  00e4: add-int v1, v1, v122
+  00e6: add-int v1, v1, v123
+  00e8: add-int v1, v1, v124
+  00ea: add-int v1, v1, v125
+  00ec: add-int v1, v1, v126
+  00ee: add-int v1, v1, v127
+  00f0: add-int v1, v1, v128
+  00f2: add-int v1, v1, v129
+  00f4: add-int v1, v1, v130
+  00f6: add-int v1, v1, v131
+  00f8: add-int v1, v1, v132
+  00fa: add-int v1, v1, v133
+  00fc: add-int v1, v1, v134
+  00fe: add-int v1, v1, v135
+  0100: add-int v1, v1, v136
+  0102: add-int v1, v1, v137
+  0104: add-int v1, v1, v138
+  0106: add-int v1, v1, v139
+  0108: add-int v1, v1, v140
+  010a: add-int v1, v1, v141
+  010c: add-int v1, v1, v142
+  010e: add-int v1, v1, v143
+  0110: add-int v1, v1, v144
+  0112: add-int v1, v1, v145
+  0114: add-int v1, v1, v146
+  0116: add-int v1, v1, v147
+  0118: add-int v1, v1, v148
+  011a: add-int v1, v1, v149
+  011c: add-int v1, v1, v150
+  011e: add-int v1, v1, v151
+  0120: add-int v1, v1, v152
+  0122: add-int v1, v1, v153
+  0124: add-int v1, v1, v154
+  0126: add-int v1, v1, v155
+  0128: add-int v1, v1, v156
+  012a: add-int v1, v1, v157
+  012c: add-int v1, v1, v158
+  012e: add-int v1, v1, v159
+  0130: add-int v1, v1, v160
+  0132: add-int v1, v1, v161
+  0134: add-int v1, v1, v162
+  0136: add-int v1, v1, v163
+  0138: add-int v1, v1, v164
+  013a: add-int v1, v1, v165
+  013c: add-int v1, v1, v166
+  013e: add-int v1, v1, v167
+  0140: add-int v1, v1, v168
+  0142: add-int v1, v1, v169
+  0144: add-int v1, v1, v170
+  0146: add-int v1, v1, v171
+  0148: add-int v1, v1, v172
+  014a: add-int v1, v1, v173
+  014c: add-int v1, v1, v174
+  014e: add-int v1, v1, v175
+  0150: add-int v1, v1, v176
+  0152: add-int v1, v1, v177
+  0154: add-int v1, v1, v178
+  0156: add-int v1, v1, v179
+  0158: add-int v1, v1, v180
+  015a: add-int v1, v1, v181
+  015c: add-int v1, v1, v182
+  015e: add-int v1, v1, v183
+  0160: add-int v1, v1, v184
+  0162: add-int v1, v1, v185
+  0164: add-int v1, v1, v186
+  0166: add-int v1, v1, v187
+  0168: add-int v1, v1, v188
+  016a: add-int v1, v1, v189
+  016c: add-int v1, v1, v190
+  016e: add-int v1, v1, v191
+  0170: add-int v1, v1, v192
+  0172: add-int v1, v1, v193
+  0174: add-int v1, v1, v194
+  0176: add-int v1, v1, v195
+  0178: add-int v1, v1, v196
+  017a: add-int v1, v1, v197
+  017c: add-int v1, v1, v198
+  017e: add-int v1, v1, v199
+  0180: add-int v1, v1, v200
+  0182: add-int v1, v1, v201
+  0184: add-int v1, v1, v202
+  0186: add-int v1, v1, v203
+  0188: add-int v1, v1, v204
+  018a: add-int v1, v1, v205
+  018c: add-int v1, v1, v206
+  018e: add-int v1, v1, v207
+  0190: add-int v1, v1, v208
+  0192: add-int v1, v1, v209
+  0194: add-int v1, v1, v210
+  0196: add-int v1, v1, v211
+  0198: add-int v1, v1, v212
+  019a: add-int v1, v1, v213
+  019c: add-int v1, v1, v214
+  019e: add-int v1, v1, v215
+  01a0: add-int v1, v1, v216
+  01a2: add-int v1, v1, v217
+  01a4: add-int v1, v1, v218
+  01a6: add-int v1, v1, v219
+  01a8: add-int v1, v1, v220
+  01aa: add-int v1, v1, v221
+  01ac: add-int v1, v1, v222
+  01ae: add-int v1, v1, v223
+  01b0: add-int v1, v1, v224
+  01b2: add-int v1, v1, v225
+  01b4: add-int v1, v1, v226
+  01b6: add-int v1, v1, v227
+  01b8: add-int v1, v1, v228
+  01ba: add-int v1, v1, v229
+  01bc: add-int v1, v1, v230
+  01be: add-int v1, v1, v231
+  01c0: add-int v1, v1, v232
+  01c2: add-int v1, v1, v233
+  01c4: add-int v1, v1, v234
+  01c6: add-int v1, v1, v235
+  01c8: add-int v1, v1, v236
+  01ca: add-int v1, v1, v237
+  01cc: add-int v1, v1, v238
+  01ce: add-int v1, v1, v239
+  01d0: add-int v1, v1, v240
+  01d2: add-int v1, v1, v241
+  01d4: add-int v1, v1, v242
+  01d6: add-int v1, v1, v243
+  01d8: add-int v1, v1, v244
+  01da: add-int v1, v1, v245
+  01dc: add-int v1, v1, v246
+  01de: add-int v1, v1, v247
+  01e0: add-int v1, v1, v248
+  01e2: add-int v1, v1, v249
+  01e4: add-int v1, v1, v250
+  01e6: add-int v1, v1, v251
+  01e8: add-int v1, v1, v252
+  01ea: add-int v1, v1, v253
+  01ec: add-int v1, v1, v254
+  01ee: add-int v1, v1, v255
+  01f0: move/from16 v0, v256
+  01f2: add-int/2addr v1, v0
+  01f3: invoke-static {v1}, java.lang.Integer.toString:(I)Ljava/lang/String;
+  01f6: move-result-object v1
+  01f7: invoke-virtual {v2, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V
+  01fa: move/from16 v0, v257
+  01fc: packed-switch v0, 020c // +0010
+  01ff: const/4 v1, #int -1 // #f
+  0200: return v1
+  0201: const/4 v1, #int 0 // #0
+  0202: goto 0200 // -0002
+  0203: const/4 v1, #int 1 // #1
+  0204: goto 0200 // -0004
+  0205: const/4 v1, #int 2 // #2
+  0206: goto 0200 // -0006
+  0207: const/4 v1, #int 3 // #3
+  0208: goto 0200 // -0008
+  0209: const/4 v1, #int 4 // #4
+  020a: goto 0200 // -000a
+  020b: nop // spacer
+  020c: packed-switch-payload // for switch @ 01fc
+          0: 00000201 // +00000005
+          1: 00000203 // +00000007
+          2: 00000205 // +00000009
+          3: 00000207 // +0000000b
+          4: 00000209 // +0000000d
+  debug info
+    line_start: 9
+    parameters_size: 00ff
+    parameter <unnamed> v3
+    parameter <unnamed> v4
+    parameter <unnamed> v5
+    parameter <unnamed> v6
+    parameter <unnamed> v7
+    parameter <unnamed> v8
+    parameter <unnamed> v9
+    parameter <unnamed> v10
+    parameter <unnamed> v11
+    parameter <unnamed> v12
+    parameter <unnamed> v13
+    parameter <unnamed> v14
+    parameter <unnamed> v15
+    parameter <unnamed> v16
+    parameter <unnamed> v17
+    parameter <unnamed> v18
+    parameter <unnamed> v19
+    parameter <unnamed> v20
+    parameter <unnamed> v21
+    parameter <unnamed> v22
+    parameter <unnamed> v23
+    parameter <unnamed> v24
+    parameter <unnamed> v25
+    parameter <unnamed> v26
+    parameter <unnamed> v27
+    parameter <unnamed> v28
+    parameter <unnamed> v29
+    parameter <unnamed> v30
+    parameter <unnamed> v31
+    parameter <unnamed> v32
+    parameter <unnamed> v33
+    parameter <unnamed> v34
+    parameter <unnamed> v35
+    parameter <unnamed> v36
+    parameter <unnamed> v37
+    parameter <unnamed> v38
+    parameter <unnamed> v39
+    parameter <unnamed> v40
+    parameter <unnamed> v41
+    parameter <unnamed> v42
+    parameter <unnamed> v43
+    parameter <unnamed> v44
+    parameter <unnamed> v45
+    parameter <unnamed> v46
+    parameter <unnamed> v47
+    parameter <unnamed> v48
+    parameter <unnamed> v49
+    parameter <unnamed> v50
+    parameter <unnamed> v51
+    parameter <unnamed> v52
+    parameter <unnamed> v53
+    parameter <unnamed> v54
+    parameter <unnamed> v55
+    parameter <unnamed> v56
+    parameter <unnamed> v57
+    parameter <unnamed> v58
+    parameter <unnamed> v59
+    parameter <unnamed> v60
+    parameter <unnamed> v61
+    parameter <unnamed> v62
+    parameter <unnamed> v63
+    parameter <unnamed> v64
+    parameter <unnamed> v65
+    parameter <unnamed> v66
+    parameter <unnamed> v67
+    parameter <unnamed> v68
+    parameter <unnamed> v69
+    parameter <unnamed> v70
+    parameter <unnamed> v71
+    parameter <unnamed> v72
+    parameter <unnamed> v73
+    parameter <unnamed> v74
+    parameter <unnamed> v75
+    parameter <unnamed> v76
+    parameter <unnamed> v77
+    parameter <unnamed> v78
+    parameter <unnamed> v79
+    parameter <unnamed> v80
+    parameter <unnamed> v81
+    parameter <unnamed> v82
+    parameter <unnamed> v83
+    parameter <unnamed> v84
+    parameter <unnamed> v85
+    parameter <unnamed> v86
+    parameter <unnamed> v87
+    parameter <unnamed> v88
+    parameter <unnamed> v89
+    parameter <unnamed> v90
+    parameter <unnamed> v91
+    parameter <unnamed> v92
+    parameter <unnamed> v93
+    parameter <unnamed> v94
+    parameter <unnamed> v95
+    parameter <unnamed> v96
+    parameter <unnamed> v97
+    parameter <unnamed> v98
+    parameter <unnamed> v99
+    parameter <unnamed> v100
+    parameter <unnamed> v101
+    parameter <unnamed> v102
+    parameter <unnamed> v103
+    parameter <unnamed> v104
+    parameter <unnamed> v105
+    parameter <unnamed> v106
+    parameter <unnamed> v107
+    parameter <unnamed> v108
+    parameter <unnamed> v109
+    parameter <unnamed> v110
+    parameter <unnamed> v111
+    parameter <unnamed> v112
+    parameter <unnamed> v113
+    parameter <unnamed> v114
+    parameter <unnamed> v115
+    parameter <unnamed> v116
+    parameter <unnamed> v117
+    parameter <unnamed> v118
+    parameter <unnamed> v119
+    parameter <unnamed> v120
+    parameter <unnamed> v121
+    parameter <unnamed> v122
+    parameter <unnamed> v123
+    parameter <unnamed> v124
+    parameter <unnamed> v125
+    parameter <unnamed> v126
+    parameter <unnamed> v127
+    parameter <unnamed> v128
+    parameter <unnamed> v129
+    parameter <unnamed> v130
+    parameter <unnamed> v131
+    parameter <unnamed> v132
+    parameter <unnamed> v133
+    parameter <unnamed> v134
+    parameter <unnamed> v135
+    parameter <unnamed> v136
+    parameter <unnamed> v137
+    parameter <unnamed> v138
+    parameter <unnamed> v139
+    parameter <unnamed> v140
+    parameter <unnamed> v141
+    parameter <unnamed> v142
+    parameter <unnamed> v143
+    parameter <unnamed> v144
+    parameter <unnamed> v145
+    parameter <unnamed> v146
+    parameter <unnamed> v147
+    parameter <unnamed> v148
+    parameter <unnamed> v149
+    parameter <unnamed> v150
+    parameter <unnamed> v151
+    parameter <unnamed> v152
+    parameter <unnamed> v153
+    parameter <unnamed> v154
+    parameter <unnamed> v155
+    parameter <unnamed> v156
+    parameter <unnamed> v157
+    parameter <unnamed> v158
+    parameter <unnamed> v159
+    parameter <unnamed> v160
+    parameter <unnamed> v161
+    parameter <unnamed> v162
+    parameter <unnamed> v163
+    parameter <unnamed> v164
+    parameter <unnamed> v165
+    parameter <unnamed> v166
+    parameter <unnamed> v167
+    parameter <unnamed> v168
+    parameter <unnamed> v169
+    parameter <unnamed> v170
+    parameter <unnamed> v171
+    parameter <unnamed> v172
+    parameter <unnamed> v173
+    parameter <unnamed> v174
+    parameter <unnamed> v175
+    parameter <unnamed> v176
+    parameter <unnamed> v177
+    parameter <unnamed> v178
+    parameter <unnamed> v179
+    parameter <unnamed> v180
+    parameter <unnamed> v181
+    parameter <unnamed> v182
+    parameter <unnamed> v183
+    parameter <unnamed> v184
+    parameter <unnamed> v185
+    parameter <unnamed> v186
+    parameter <unnamed> v187
+    parameter <unnamed> v188
+    parameter <unnamed> v189
+    parameter <unnamed> v190
+    parameter <unnamed> v191
+    parameter <unnamed> v192
+    parameter <unnamed> v193
+    parameter <unnamed> v194
+    parameter <unnamed> v195
+    parameter <unnamed> v196
+    parameter <unnamed> v197
+    parameter <unnamed> v198
+    parameter <unnamed> v199
+    parameter <unnamed> v200
+    parameter <unnamed> v201
+    parameter <unnamed> v202
+    parameter <unnamed> v203
+    parameter <unnamed> v204
+    parameter <unnamed> v205
+    parameter <unnamed> v206
+    parameter <unnamed> v207
+    parameter <unnamed> v208
+    parameter <unnamed> v209
+    parameter <unnamed> v210
+    parameter <unnamed> v211
+    parameter <unnamed> v212
+    parameter <unnamed> v213
+    parameter <unnamed> v214
+    parameter <unnamed> v215
+    parameter <unnamed> v216
+    parameter <unnamed> v217
+    parameter <unnamed> v218
+    parameter <unnamed> v219
+    parameter <unnamed> v220
+    parameter <unnamed> v221
+    parameter <unnamed> v222
+    parameter <unnamed> v223
+    parameter <unnamed> v224
+    parameter <unnamed> v225
+    parameter <unnamed> v226
+    parameter <unnamed> v227
+    parameter <unnamed> v228
+    parameter <unnamed> v229
+    parameter <unnamed> v230
+    parameter <unnamed> v231
+    parameter <unnamed> v232
+    parameter <unnamed> v233
+    parameter <unnamed> v234
+    parameter <unnamed> v235
+    parameter <unnamed> v236
+    parameter <unnamed> v237
+    parameter <unnamed> v238
+    parameter <unnamed> v239
+    parameter <unnamed> v240
+    parameter <unnamed> v241
+    parameter <unnamed> v242
+    parameter <unnamed> v243
+    parameter <unnamed> v244
+    parameter <unnamed> v245
+    parameter <unnamed> v246
+    parameter <unnamed> v247
+    parameter <unnamed> v248
+    parameter <unnamed> v249
+    parameter <unnamed> v250
+    parameter <unnamed> v251
+    parameter <unnamed> v252
+    parameter <unnamed> v253
+    parameter <unnamed> v254
+    parameter <unnamed> v255
+    parameter <unnamed> v256
+    parameter <unnamed> v257
+    0000: prologue end
+    0000: line 9
+    0001: line 12
+    01fa: advance pc
+    01fa: line 16
+    line = 28
+    01ff: line 28
+    line = 18
+    0201: line 18
+    0203: line 20
+    0205: line 22
+    0207: line 24
+    0209: line 26
+    line = 16
+    020b: line 16
+    end sequence
+  source file: "Blort.java"
+Blort.switchWithHighRegister:(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)I:
+regs: 0103; ins: 00ff; outs: 0002
+  0000: const/4 v1, #int 1 // #1
+  0001: sget-object v2, java.lang.System.out:Ljava/io/PrintStream;
+  0003: add-int v3, v1, v4
+  0005: add-int/2addr v3, v5
+  0006: add-int/2addr v3, v6
+  0007: add-int/2addr v3, v7
+  0008: add-int/2addr v3, v8
+  0009: add-int/2addr v3, v9
+  000a: add-int/2addr v3, v10
+  000b: add-int/2addr v3, v11
+  000c: add-int/2addr v3, v12
+  000d: add-int/2addr v3, v13
+  000e: add-int/2addr v3, v14
+  000f: add-int/2addr v3, v15
+  0010: add-int v3, v3, v16
+  0012: add-int v3, v3, v17
+  0014: add-int v3, v3, v18
+  0016: add-int v3, v3, v19
+  0018: add-int v3, v3, v20
+  001a: add-int v3, v3, v21
+  001c: add-int v3, v3, v22
+  001e: add-int v3, v3, v23
+  0020: add-int v3, v3, v24
+  0022: add-int v3, v3, v25
+  0024: add-int v3, v3, v26
+  0026: add-int v3, v3, v27
+  0028: add-int v3, v3, v28
+  002a: add-int v3, v3, v29
+  002c: add-int v3, v3, v30
+  002e: add-int v3, v3, v31
+  0030: add-int v3, v3, v32
+  0032: add-int v3, v3, v33
+  0034: add-int v3, v3, v34
+  0036: add-int v3, v3, v35
+  0038: add-int v3, v3, v36
+  003a: add-int v3, v3, v37
+  003c: add-int v3, v3, v38
+  003e: add-int v3, v3, v39
+  0040: add-int v3, v3, v40
+  0042: add-int v3, v3, v41
+  0044: add-int v3, v3, v42
+  0046: add-int v3, v3, v43
+  0048: add-int v3, v3, v44
+  004a: add-int v3, v3, v45
+  004c: add-int v3, v3, v46
+  004e: add-int v3, v3, v47
+  0050: add-int v3, v3, v48
+  0052: add-int v3, v3, v49
+  0054: add-int v3, v3, v50
+  0056: add-int v3, v3, v51
+  0058: add-int v3, v3, v52
+  005a: add-int v3, v3, v53
+  005c: add-int v3, v3, v54
+  005e: add-int v3, v3, v55
+  0060: add-int v3, v3, v56
+  0062: add-int v3, v3, v57
+  0064: add-int v3, v3, v58
+  0066: add-int v3, v3, v59
+  0068: add-int v3, v3, v60
+  006a: add-int v3, v3, v61
+  006c: add-int v3, v3, v62
+  006e: add-int v3, v3, v63
+  0070: add-int v3, v3, v64
+  0072: add-int v3, v3, v65
+  0074: add-int v3, v3, v66
+  0076: add-int v3, v3, v67
+  0078: add-int v3, v3, v68
+  007a: add-int v3, v3, v69
+  007c: add-int v3, v3, v70
+  007e: add-int v3, v3, v71
+  0080: add-int v3, v3, v72
+  0082: add-int v3, v3, v73
+  0084: add-int v3, v3, v74
+  0086: add-int v3, v3, v75
+  0088: add-int v3, v3, v76
+  008a: add-int v3, v3, v77
+  008c: add-int v3, v3, v78
+  008e: add-int v3, v3, v79
+  0090: add-int v3, v3, v80
+  0092: add-int v3, v3, v81
+  0094: add-int v3, v3, v82
+  0096: add-int v3, v3, v83
+  0098: add-int v3, v3, v84
+  009a: add-int v3, v3, v85
+  009c: add-int v3, v3, v86
+  009e: add-int v3, v3, v87
+  00a0: add-int v3, v3, v88
+  00a2: add-int v3, v3, v89
+  00a4: add-int v3, v3, v90
+  00a6: add-int v3, v3, v91
+  00a8: add-int v3, v3, v92
+  00aa: add-int v3, v3, v93
+  00ac: add-int v3, v3, v94
+  00ae: add-int v3, v3, v95
+  00b0: add-int v3, v3, v96
+  00b2: add-int v3, v3, v97
+  00b4: add-int v3, v3, v98
+  00b6: add-int v3, v3, v99
+  00b8: add-int v3, v3, v100
+  00ba: add-int v3, v3, v101
+  00bc: add-int v3, v3, v102
+  00be: add-int v3, v3, v103
+  00c0: add-int v3, v3, v104
+  00c2: add-int v3, v3, v105
+  00c4: add-int v3, v3, v106
+  00c6: add-int v3, v3, v107
+  00c8: add-int v3, v3, v108
+  00ca: add-int v3, v3, v109
+  00cc: add-int v3, v3, v110
+  00ce: add-int v3, v3, v111
+  00d0: add-int v3, v3, v112
+  00d2: add-int v3, v3, v113
+  00d4: add-int v3, v3, v114
+  00d6: add-int v3, v3, v115
+  00d8: add-int v3, v3, v116
+  00da: add-int v3, v3, v117
+  00dc: add-int v3, v3, v118
+  00de: add-int v3, v3, v119
+  00e0: add-int v3, v3, v120
+  00e2: add-int v3, v3, v121
+  00e4: add-int v3, v3, v122
+  00e6: add-int v3, v3, v123
+  00e8: add-int v3, v3, v124
+  00ea: add-int v3, v3, v125
+  00ec: add-int v3, v3, v126
+  00ee: add-int v3, v3, v127
+  00f0: add-int v3, v3, v128
+  00f2: add-int v3, v3, v129
+  00f4: add-int v3, v3, v130
+  00f6: add-int v3, v3, v131
+  00f8: add-int v3, v3, v132
+  00fa: add-int v3, v3, v133
+  00fc: add-int v3, v3, v134
+  00fe: add-int v3, v3, v135
+  0100: add-int v3, v3, v136
+  0102: add-int v3, v3, v137
+  0104: add-int v3, v3, v138
+  0106: add-int v3, v3, v139
+  0108: add-int v3, v3, v140
+  010a: add-int v3, v3, v141
+  010c: add-int v3, v3, v142
+  010e: add-int v3, v3, v143
+  0110: add-int v3, v3, v144
+  0112: add-int v3, v3, v145
+  0114: add-int v3, v3, v146
+  0116: add-int v3, v3, v147
+  0118: add-int v3, v3, v148
+  011a: add-int v3, v3, v149
+  011c: add-int v3, v3, v150
+  011e: add-int v3, v3, v151
+  0120: add-int v3, v3, v152
+  0122: add-int v3, v3, v153
+  0124: add-int v3, v3, v154
+  0126: add-int v3, v3, v155
+  0128: add-int v3, v3, v156
+  012a: add-int v3, v3, v157
+  012c: add-int v3, v3, v158
+  012e: add-int v3, v3, v159
+  0130: add-int v3, v3, v160
+  0132: add-int v3, v3, v161
+  0134: add-int v3, v3, v162
+  0136: add-int v3, v3, v163
+  0138: add-int v3, v3, v164
+  013a: add-int v3, v3, v165
+  013c: add-int v3, v3, v166
+  013e: add-int v3, v3, v167
+  0140: add-int v3, v3, v168
+  0142: add-int v3, v3, v169
+  0144: add-int v3, v3, v170
+  0146: add-int v3, v3, v171
+  0148: add-int v3, v3, v172
+  014a: add-int v3, v3, v173
+  014c: add-int v3, v3, v174
+  014e: add-int v3, v3, v175
+  0150: add-int v3, v3, v176
+  0152: add-int v3, v3, v177
+  0154: add-int v3, v3, v178
+  0156: add-int v3, v3, v179
+  0158: add-int v3, v3, v180
+  015a: add-int v3, v3, v181
+  015c: add-int v3, v3, v182
+  015e: add-int v3, v3, v183
+  0160: add-int v3, v3, v184
+  0162: add-int v3, v3, v185
+  0164: add-int v3, v3, v186
+  0166: add-int v3, v3, v187
+  0168: add-int v3, v3, v188
+  016a: add-int v3, v3, v189
+  016c: add-int v3, v3, v190
+  016e: add-int v3, v3, v191
+  0170: add-int v3, v3, v192
+  0172: add-int v3, v3, v193
+  0174: add-int v3, v3, v194
+  0176: add-int v3, v3, v195
+  0178: add-int v3, v3, v196
+  017a: add-int v3, v3, v197
+  017c: add-int v3, v3, v198
+  017e: add-int v3, v3, v199
+  0180: add-int v3, v3, v200
+  0182: add-int v3, v3, v201
+  0184: add-int v3, v3, v202
+  0186: add-int v3, v3, v203
+  0188: add-int v3, v3, v204
+  018a: add-int v3, v3, v205
+  018c: add-int v3, v3, v206
+  018e: add-int v3, v3, v207
+  0190: add-int v3, v3, v208
+  0192: add-int v3, v3, v209
+  0194: add-int v3, v3, v210
+  0196: add-int v3, v3, v211
+  0198: add-int v3, v3, v212
+  019a: add-int v3, v3, v213
+  019c: add-int v3, v3, v214
+  019e: add-int v3, v3, v215
+  01a0: add-int v3, v3, v216
+  01a2: add-int v3, v3, v217
+  01a4: add-int v3, v3, v218
+  01a6: add-int v3, v3, v219
+  01a8: add-int v3, v3, v220
+  01aa: add-int v3, v3, v221
+  01ac: add-int v3, v3, v222
+  01ae: add-int v3, v3, v223
+  01b0: add-int v3, v3, v224
+  01b2: add-int v3, v3, v225
+  01b4: add-int v3, v3, v226
+  01b6: add-int v3, v3, v227
+  01b8: add-int v3, v3, v228
+  01ba: add-int v3, v3, v229
+  01bc: add-int v3, v3, v230
+  01be: add-int v3, v3, v231
+  01c0: add-int v3, v3, v232
+  01c2: add-int v3, v3, v233
+  01c4: add-int v3, v3, v234
+  01c6: add-int v3, v3, v235
+  01c8: add-int v3, v3, v236
+  01ca: add-int v3, v3, v237
+  01cc: add-int v3, v3, v238
+  01ce: add-int v3, v3, v239
+  01d0: add-int v3, v3, v240
+  01d2: add-int v3, v3, v241
+  01d4: add-int v3, v3, v242
+  01d6: add-int v3, v3, v243
+  01d8: add-int v3, v3, v244
+  01da: add-int v3, v3, v245
+  01dc: add-int v3, v3, v246
+  01de: add-int v3, v3, v247
+  01e0: add-int v3, v3, v248
+  01e2: add-int v3, v3, v249
+  01e4: add-int v3, v3, v250
+  01e6: add-int v3, v3, v251
+  01e8: add-int v3, v3, v252
+  01ea: add-int v3, v3, v253
+  01ec: add-int v3, v3, v254
+  01ee: add-int v3, v3, v255
+  01f0: move/from16 v0, v256
+  01f2: add-int/2addr v3, v0
+  01f3: move/from16 v0, v257
+  01f5: add-int/2addr v3, v0
+  01f6: invoke-static {v3}, java.lang.Integer.toString:(I)Ljava/lang/String;
+  01f9: move-result-object v3
+  01fa: invoke-virtual {v2, v3}, java.io.PrintStream.println:(Ljava/lang/String;)V
+  01fd: move/from16 v0, v258
+  01ff: packed-switch v0, 020e // +000f
+  0202: const/4 v2, #int -1 // #f
+  0203: return v2
+  0204: const/4 v2, #int 0 // #0
+  0205: goto 0203 // -0002
+  0206: const/4 v2, #int 1 // #1
+  0207: goto 0203 // -0004
+  0208: const/4 v2, #int 2 // #2
+  0209: goto 0203 // -0006
+  020a: const/4 v2, #int 3 // #3
+  020b: goto 0203 // -0008
+  020c: const/4 v2, #int 4 // #4
+  020d: goto 0203 // -000a
+  020e: packed-switch-payload // for switch @ 01ff
+          0: 00000204 // +00000005
+          1: 00000206 // +00000007
+          2: 00000208 // +00000009
+          3: 0000020a // +0000000b
+          4: 0000020c // +0000000d
+  debug info
+    line_start: 9
+    parameters_size: 00ff
+    parameter param1 v4
+    parameter param2 v5
+    parameter param3 v6
+    parameter param4 v7
+    parameter param5 v8
+    parameter param6 v9
+    parameter param7 v10
+    parameter param8 v11
+    parameter param9 v12
+    parameter param10 v13
+    parameter param11 v14
+    parameter param12 v15
+    parameter param13 v16
+    parameter param14 v17
+    parameter param15 v18
+    parameter param16 v19
+    parameter param17 v20
+    parameter param18 v21
+    parameter param19 v22
+    parameter param20 v23
+    parameter param21 v24
+    parameter param22 v25
+    parameter param23 v26
+    parameter param24 v27
+    parameter param25 v28
+    parameter param26 v29
+    parameter param27 v30
+    parameter param28 v31
+    parameter param29 v32
+    parameter param30 v33
+    parameter param31 v34
+    parameter param32 v35
+    parameter param33 v36
+    parameter param34 v37
+    parameter param35 v38
+    parameter param36 v39
+    parameter param37 v40
+    parameter param38 v41
+    parameter param39 v42
+    parameter param40 v43
+    parameter param41 v44
+    parameter param42 v45
+    parameter param43 v46
+    parameter param44 v47
+    parameter param45 v48
+    parameter param46 v49
+    parameter param47 v50
+    parameter param48 v51
+    parameter param49 v52
+    parameter param50 v53
+    parameter param51 v54
+    parameter param52 v55
+    parameter param53 v56
+    parameter param54 v57
+    parameter param55 v58
+    parameter param56 v59
+    parameter param57 v60
+    parameter param58 v61
+    parameter param59 v62
+    parameter param60 v63
+    parameter param61 v64
+    parameter param62 v65
+    parameter param63 v66
+    parameter param64 v67
+    parameter param65 v68
+    parameter param66 v69
+    parameter param67 v70
+    parameter param68 v71
+    parameter param69 v72
+    parameter param70 v73
+    parameter param71 v74
+    parameter param72 v75
+    parameter param73 v76
+    parameter param74 v77
+    parameter param75 v78
+    parameter param76 v79
+    parameter param77 v80
+    parameter param78 v81
+    parameter param79 v82
+    parameter param80 v83
+    parameter param81 v84
+    parameter param82 v85
+    parameter param83 v86
+    parameter param84 v87
+    parameter param85 v88
+    parameter param86 v89
+    parameter param87 v90
+    parameter param88 v91
+    parameter param89 v92
+    parameter param90 v93
+    parameter param91 v94
+    parameter param92 v95
+    parameter param93 v96
+    parameter param94 v97
+    parameter param95 v98
+    parameter param96 v99
+    parameter param97 v100
+    parameter param98 v101
+    parameter param99 v102
+    parameter param100 v103
+    parameter param101 v104
+    parameter param102 v105
+    parameter param103 v106
+    parameter param104 v107
+    parameter param105 v108
+    parameter param106 v109
+    parameter param107 v110
+    parameter param108 v111
+    parameter param109 v112
+    parameter param110 v113
+    parameter param111 v114
+    parameter param112 v115
+    parameter param113 v116
+    parameter param114 v117
+    parameter param115 v118
+    parameter param116 v119
+    parameter param117 v120
+    parameter param118 v121
+    parameter param119 v122
+    parameter param120 v123
+    parameter param121 v124
+    parameter param122 v125
+    parameter param123 v126
+    parameter param124 v127
+    parameter param125 v128
+    parameter param126 v129
+    parameter param127 v130
+    parameter param128 v131
+    parameter param129 v132
+    parameter param130 v133
+    parameter param131 v134
+    parameter param132 v135
+    parameter param133 v136
+    parameter param134 v137
+    parameter param135 v138
+    parameter param136 v139
+    parameter param137 v140
+    parameter param138 v141
+    parameter param139 v142
+    parameter param140 v143
+    parameter param141 v144
+    parameter param142 v145
+    parameter param143 v146
+    parameter param144 v147
+    parameter param145 v148
+    parameter param146 v149
+    parameter param147 v150
+    parameter param148 v151
+    parameter param149 v152
+    parameter param150 v153
+    parameter param151 v154
+    parameter param152 v155
+    parameter param153 v156
+    parameter param154 v157
+    parameter param155 v158
+    parameter param156 v159
+    parameter param157 v160
+    parameter param158 v161
+    parameter param159 v162
+    parameter param160 v163
+    parameter param161 v164
+    parameter param162 v165
+    parameter param163 v166
+    parameter param164 v167
+    parameter param165 v168
+    parameter param166 v169
+    parameter param167 v170
+    parameter param168 v171
+    parameter param169 v172
+    parameter param170 v173
+    parameter param171 v174
+    parameter param172 v175
+    parameter param173 v176
+    parameter param174 v177
+    parameter param175 v178
+    parameter param176 v179
+    parameter param177 v180
+    parameter param178 v181
+    parameter param179 v182
+    parameter param180 v183
+    parameter param181 v184
+    parameter param182 v185
+    parameter param183 v186
+    parameter param184 v187
+    parameter param185 v188
+    parameter param186 v189
+    parameter param187 v190
+    parameter param188 v191
+    parameter param189 v192
+    parameter param190 v193
+    parameter param191 v194
+    parameter param192 v195
+    parameter param193 v196
+    parameter param194 v197
+    parameter param195 v198
+    parameter param196 v199
+    parameter param197 v200
+    parameter param198 v201
+    parameter param199 v202
+    parameter param200 v203
+    parameter param201 v204
+    parameter param202 v205
+    parameter param203 v206
+    parameter param204 v207
+    parameter param205 v208
+    parameter param206 v209
+    parameter param207 v210
+    parameter param208 v211
+    parameter param209 v212
+    parameter param210 v213
+    parameter param211 v214
+    parameter param212 v215
+    parameter param213 v216
+    parameter param214 v217
+    parameter param215 v218
+    parameter param216 v219
+    parameter param217 v220
+    parameter param218 v221
+    parameter param219 v222
+    parameter param220 v223
+    parameter param221 v224
+    parameter param222 v225
+    parameter param223 v226
+    parameter param224 v227
+    parameter param225 v228
+    parameter param226 v229
+    parameter param227 v230
+    parameter param228 v231
+    parameter param229 v232
+    parameter param230 v233
+    parameter param231 v234
+    parameter param232 v235
+    parameter param233 v236
+    parameter param234 v237
+    parameter param235 v238
+    parameter param236 v239
+    parameter param237 v240
+    parameter param238 v241
+    parameter param239 v242
+    parameter param240 v243
+    parameter param241 v244
+    parameter param242 v245
+    parameter param243 v246
+    parameter param244 v247
+    parameter param245 v248
+    parameter param246 v249
+    parameter param247 v250
+    parameter param248 v251
+    parameter param249 v252
+    parameter param250 v253
+    parameter param251 v254
+    parameter param252 v255
+    parameter param253 v256
+    parameter param254 v257
+    parameter param255 v258
+    0000: prologue end
+    0000: line 9
+    0001: line 12
+    0001: +local v1 i int
+    01fd: advance pc
+    01fd: line 16
+    line = 28
+    0202: line 28
+    line = 18
+    0204: line 18
+    0206: line 20
+    0208: line 22
+    020a: line 24
+    020c: line 26
+    line = 16
+    020e: line 16
+    end sequence
+  source file: "Blort.java"
diff --git a/dx/tests/122-switch-with-high-register/info.txt b/dx/tests/122-switch-with-high-register/info.txt
new file mode 100644
index 0000000..ca2a795
--- /dev/null
+++ b/dx/tests/122-switch-with-high-register/info.txt
@@ -0,0 +1,6 @@
+This test ensures that dx correctly handles switches on data in a high
+register (>v255)
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/122-switch-with-high-register/run b/dx/tests/122-switch-with-high-register/run
new file mode 100644
index 0000000..b525c5c
--- /dev/null
+++ b/dx/tests/122-switch-with-high-register/run
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+cp Blort.nodebug.class Blort.class
+dx --debug --dex --dump-method=Blort.switchWithHighRegister Blort.class
+
+cp Blort.debug.class Blort.class
+dx --debug --dex --dump-method=Blort.switchWithHighRegister Blort.class
+
+rm Blort.class
diff --git a/dx/tests/123-dex-transform-invalid-virtual-to-direct/Zorch.class b/dx/tests/123-dex-transform-invalid-virtual-to-direct/Zorch.class
new file mode 100644
index 0000000..cd60b9a
Binary files /dev/null and b/dx/tests/123-dex-transform-invalid-virtual-to-direct/Zorch.class differ
diff --git a/dx/tests/123-dex-transform-invalid-virtual-to-direct/Zorch.java b/dx/tests/123-dex-transform-invalid-virtual-to-direct/Zorch.java
new file mode 100644
index 0000000..a163cb0
--- /dev/null
+++ b/dx/tests/123-dex-transform-invalid-virtual-to-direct/Zorch.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class Zorch
+{
+    public void zorch1() {
+        zorch2(0);
+    }
+
+    private int zorch2(int x) {
+        return 0;
+    }
+}
diff --git a/dx/tests/123-dex-transform-invalid-virtual-to-direct/expected.txt b/dx/tests/123-dex-transform-invalid-virtual-to-direct/expected.txt
new file mode 100644
index 0000000..8c39333
--- /dev/null
+++ b/dx/tests/123-dex-transform-invalid-virtual-to-direct/expected.txt
@@ -0,0 +1,8 @@
+Zorch.zorch1:()V:
+regs: 0004; ins: 0001; outs: 0002
+  0000: move-object v0, v3
+  0001: move-object v1, v0
+  0002: const/4 v2, #int 0 // #0
+  0003: invoke-direct {v1, v2}, Zorch.zorch2:(I)I
+  0006: move-result v1
+  0007: return-void
diff --git a/dx/tests/123-dex-transform-invalid-virtual-to-direct/info.txt b/dx/tests/123-dex-transform-invalid-virtual-to-direct/info.txt
new file mode 100644
index 0000000..4b882cf
--- /dev/null
+++ b/dx/tests/123-dex-transform-invalid-virtual-to-direct/info.txt
@@ -0,0 +1,10 @@
+This test checks that we convert invoke-virtual calls to private
+methods with invoke-direct calls.
+
+The Zorch.class file is manually created by compiling Zorch.java
+with java6 and manually editing the file to replace the opcode at
+position 0xE9 with 0xB6 (invokevirtual) instead of 0xB7 (invokespecial).
+
+This test compares emitted code against a known-good (via eyeballing)
+version, so it is possible for this test to spuriously fail if other
+aspects of conversion end up altering the output in innocuous ways.
diff --git a/dx/tests/123-dex-transform-invalid-virtual-to-direct/run b/dx/tests/123-dex-transform-invalid-virtual-to-direct/run
new file mode 100644
index 0000000..71ff62f
--- /dev/null
+++ b/dx/tests/123-dex-transform-invalid-virtual-to-direct/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2014 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex --no-optimize --positions=none --no-locals \
+    --dump-method=Zorch.zorch1 Zorch.class
diff --git a/dx/tests/124-multidex-option-no-overflow/expected.txt b/dx/tests/124-multidex-option-no-overflow/expected.txt
new file mode 100644
index 0000000..0f97895
--- /dev/null
+++ b/dx/tests/124-multidex-option-no-overflow/expected.txt
@@ -0,0 +1 @@
+classes.dex
diff --git a/dx/tests/124-multidex-option-no-overflow/info.txt b/dx/tests/124-multidex-option-no-overflow/info.txt
new file mode 100644
index 0000000..8dd11b2
--- /dev/null
+++ b/dx/tests/124-multidex-option-no-overflow/info.txt
@@ -0,0 +1,2 @@
+Test that dx generates one dex file when the dex index do not exceed limits and --multi-dex option
+is given.
diff --git a/dx/tests/124-multidex-option-no-overflow/run b/dx/tests/124-multidex-option-no-overflow/run
new file mode 100644
index 0000000..b10ae6b
--- /dev/null
+++ b/dx/tests/124-multidex-option-no-overflow/run
@@ -0,0 +1,54 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+# Stop if something fails.
+set -e
+
+JAVAC_SOURCE=1.6
+JAVAC_TARGET=1.6
+
+# Write out files with many static fields, instance fields, and methods but
+# not exceeding the dex format's limits.
+mkdir src
+awk '
+BEGIN {
+    writeFileField("FillerStatic", "static public int staticInt");
+    writeFileField("FillerField", "public int fieldInt");
+    writeFileMethod("FillerMethod");
+}
+function writeFileField(name, type) {
+    fileName = "src/" name ".java";
+    printf("public class %s {\n", name) > fileName;
+    for (i = 1; i <= 21000; i++) {
+        printf("    %s%d;\n", type, i) > fileName;
+    }
+    printf("}\n") > fileName;
+}
+function writeFileMethod(name) {
+    fileName = "src/" name ".java";
+    printf("public class %s {\n", name) > fileName;
+    for (i = 1; i <= 32000; i++) {
+      printf("    public void meth%d() { }\n", i) > fileName;
+    }
+    printf("}\n") > fileName;
+}'
+
+mkdir classes
+${JAVAC} -Xlint:-options -source ${JAVAC_SOURCE} -target ${JAVAC_TARGET} -d classes `find src -name '*.java'`
+mkdir out
+dx -JXmx1024m --dex --no-optimize --multi-dex --output=out classes
+ls -1F out
+
diff --git a/dx/tests/125-main-dex-list/build b/dx/tests/125-main-dex-list/build
new file mode 100644
index 0000000..9fdb298
--- /dev/null
+++ b/dx/tests/125-main-dex-list/build
@@ -0,0 +1,22 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+JAVAC_SOURCE=1.6
+JAVAC_TARGET=1.6
+
+${JAVAC} -source ${JAVAC_SOURCE} -target ${JAVAC_TARGET} `find com -name "*.java"`
+mkdir classes
+${JAVAC} -source ${JAVAC_SOURCE} -target ${JAVAC_TARGET} -d classes `find testdata -name '*.java'`
diff --git a/dx/tests/125-main-dex-list/classes/testdata/InMainDex.class b/dx/tests/125-main-dex-list/classes/testdata/InMainDex.class
new file mode 100644
index 0000000..e9a47e1
Binary files /dev/null and b/dx/tests/125-main-dex-list/classes/testdata/InMainDex.class differ
diff --git a/dx/tests/125-main-dex-list/classes/testdata/InSecondaryDex.class b/dx/tests/125-main-dex-list/classes/testdata/InSecondaryDex.class
new file mode 100644
index 0000000..d73a558
Binary files /dev/null and b/dx/tests/125-main-dex-list/classes/testdata/InSecondaryDex.class differ
diff --git a/dx/tests/125-main-dex-list/com/android/dx/multidex/MainDexListTest.class b/dx/tests/125-main-dex-list/com/android/dx/multidex/MainDexListTest.class
new file mode 100644
index 0000000..1b109d7
Binary files /dev/null and b/dx/tests/125-main-dex-list/com/android/dx/multidex/MainDexListTest.class differ
diff --git a/dx/tests/125-main-dex-list/com/android/dx/multidex/MainDexListTest.java b/dx/tests/125-main-dex-list/com/android/dx/multidex/MainDexListTest.java
new file mode 100644
index 0000000..20c410b
--- /dev/null
+++ b/dx/tests/125-main-dex-list/com/android/dx/multidex/MainDexListTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.multidex;
+
+/**
+ * Test that DexMerge works by merging dex files, and then loading them into
+ * the current VM.
+ */
+public final class MainDexListTest {
+
+    public static void main(String[] args) throws Exception {
+        // simplify the javac classpath by not depending directly on 'dalvik.system' classes
+        ClassLoader mainLoader = (ClassLoader) Class.forName("dalvik.system.PathClassLoader")
+                .getConstructor(String.class, ClassLoader.class)
+                .newInstance("out/classes.dex", MainDexListTest.class.getClassLoader());
+        ClassLoader secondaryLoader = (ClassLoader) Class.forName("dalvik.system.PathClassLoader")
+                .getConstructor(String.class, ClassLoader.class)
+                .newInstance("out/classes2.dex", MainDexListTest.class.getClassLoader());
+
+        mainLoader.loadClass("testdata.InMainDex");
+        secondaryLoader.loadClass("testdata.InSecondaryDex");
+       try {
+           secondaryLoader.loadClass("testdata.InMainDex");
+           throw new AssertionError();
+       } catch (ClassNotFoundException e) {
+           // expected
+       }
+       try {
+           mainLoader.loadClass("testdata.InSecondaryDex");
+           throw new AssertionError();
+       } catch (ClassNotFoundException e) {
+           // expected
+       }
+
+    }
+
+}
diff --git a/dx/tests/125-main-dex-list/expected.txt b/dx/tests/125-main-dex-list/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/125-main-dex-list/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/125-main-dex-list/info.txt b/dx/tests/125-main-dex-list/info.txt
new file mode 100644
index 0000000..3407a24
--- /dev/null
+++ b/dx/tests/125-main-dex-list/info.txt
@@ -0,0 +1,2 @@
+Instruct dx to build 2 dex files with specified classes in each dex file. Then run a test on
+dalvikvm loading the 2 dex files and checking the classes they contain.
diff --git a/dx/tests/125-main-dex-list/main.list b/dx/tests/125-main-dex-list/main.list
new file mode 100644
index 0000000..14705af
--- /dev/null
+++ b/dx/tests/125-main-dex-list/main.list
@@ -0,0 +1 @@
+testdata/InMainDex.class
\ No newline at end of file
diff --git a/dx/tests/125-main-dex-list/run b/dx/tests/125-main-dex-list/run
new file mode 100644
index 0000000..2627253
--- /dev/null
+++ b/dx/tests/125-main-dex-list/run
@@ -0,0 +1,27 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+dx --dex --output=test.jar com/android/dx/multidex/*
+mkdir out
+dx -JXmx1024m --dex --no-optimize --multi-dex --main-dex-list=main.list --minimal-main-dex --output=out classes
+
+art -classpath test.jar com.android.dx.multidex.MainDexListTest > unit-out.txt 2>&1
+
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/125-main-dex-list/testdata/InMainDex.java b/dx/tests/125-main-dex-list/testdata/InMainDex.java
new file mode 100644
index 0000000..46527e1
--- /dev/null
+++ b/dx/tests/125-main-dex-list/testdata/InMainDex.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+package testdata;
+
+public class InMainDex {
+
+}
diff --git a/dx/tests/125-main-dex-list/testdata/InSecondaryDex.java b/dx/tests/125-main-dex-list/testdata/InSecondaryDex.java
new file mode 100644
index 0000000..01d28d5
--- /dev/null
+++ b/dx/tests/125-main-dex-list/testdata/InSecondaryDex.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+package testdata;
+
+public class InSecondaryDex {
+
+}
diff --git a/dx/tests/126-main-dex-list-one-dex/build b/dx/tests/126-main-dex-list-one-dex/build
new file mode 100644
index 0000000..3208e94
--- /dev/null
+++ b/dx/tests/126-main-dex-list-one-dex/build
@@ -0,0 +1,24 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+
+JAVAC_SOURCE=1.6
+JAVAC_TARGET=1.6
+
+mkdir classes
+${JAVAC} -source ${JAVAC_SOURCE} -target ${JAVAC_TARGET} -d classes `find testdata -name '*.java'`
diff --git a/dx/tests/126-main-dex-list-one-dex/classes/testdata/InMainDex.class b/dx/tests/126-main-dex-list-one-dex/classes/testdata/InMainDex.class
new file mode 100644
index 0000000..e9a47e1
Binary files /dev/null and b/dx/tests/126-main-dex-list-one-dex/classes/testdata/InMainDex.class differ
diff --git a/dx/tests/126-main-dex-list-one-dex/classes/testdata/InSecondaryDex.class b/dx/tests/126-main-dex-list-one-dex/classes/testdata/InSecondaryDex.class
new file mode 100644
index 0000000..d73a558
Binary files /dev/null and b/dx/tests/126-main-dex-list-one-dex/classes/testdata/InSecondaryDex.class differ
diff --git a/dx/tests/126-main-dex-list-one-dex/expected.txt b/dx/tests/126-main-dex-list-one-dex/expected.txt
new file mode 100644
index 0000000..0f97895
--- /dev/null
+++ b/dx/tests/126-main-dex-list-one-dex/expected.txt
@@ -0,0 +1 @@
+classes.dex
diff --git a/dx/tests/126-main-dex-list-one-dex/info.txt b/dx/tests/126-main-dex-list-one-dex/info.txt
new file mode 100644
index 0000000..de8b57a
--- /dev/null
+++ b/dx/tests/126-main-dex-list-one-dex/info.txt
@@ -0,0 +1,2 @@
+Run dx with both options --multi-dex --main-dex-list, verify that only one dex is generated when
+indices do not overflow.
\ No newline at end of file
diff --git a/dx/tests/126-main-dex-list-one-dex/main.list b/dx/tests/126-main-dex-list-one-dex/main.list
new file mode 100644
index 0000000..14705af
--- /dev/null
+++ b/dx/tests/126-main-dex-list-one-dex/main.list
@@ -0,0 +1 @@
+testdata/InMainDex.class
\ No newline at end of file
diff --git a/dx/tests/126-main-dex-list-one-dex/run b/dx/tests/126-main-dex-list-one-dex/run
new file mode 100644
index 0000000..3b9db77
--- /dev/null
+++ b/dx/tests/126-main-dex-list-one-dex/run
@@ -0,0 +1,19 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+mkdir out
+dx -JXmx1024m --dex --no-optimize --multi-dex --main-dex-list=main.list --output=out classes
+ls -1F out
diff --git a/dx/tests/126-main-dex-list-one-dex/testdata/InMainDex.java b/dx/tests/126-main-dex-list-one-dex/testdata/InMainDex.java
new file mode 100644
index 0000000..46527e1
--- /dev/null
+++ b/dx/tests/126-main-dex-list-one-dex/testdata/InMainDex.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+package testdata;
+
+public class InMainDex {
+
+}
diff --git a/dx/tests/126-main-dex-list-one-dex/testdata/InSecondaryDex.java b/dx/tests/126-main-dex-list-one-dex/testdata/InSecondaryDex.java
new file mode 100644
index 0000000..01d28d5
--- /dev/null
+++ b/dx/tests/126-main-dex-list-one-dex/testdata/InSecondaryDex.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+package testdata;
+
+public class InSecondaryDex {
+
+}
diff --git a/dx/tests/127-merge-stress/build b/dx/tests/127-merge-stress/build
new file mode 100755
index 0000000..2f09205
--- /dev/null
+++ b/dx/tests/127-merge-stress/build
@@ -0,0 +1,33 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# NB This test is likely to be flakey. It attempts to merge random
+# DEX files from the Android build tree.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+
+for i in "$dxjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+# Compile and run java merging test
+$JAVAC -Xlint:-options -source 1.7 -target 1.7 -cp $dxjar -d . com/android/dx/merge/MergeTest.java || exit 1
diff --git a/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest$MergeTask.class b/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest$MergeTask.class
new file mode 100644
index 0000000..d779f42
Binary files /dev/null and b/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest$MergeTask.class differ
diff --git a/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest.class b/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest.class
new file mode 100644
index 0000000..8790e97
Binary files /dev/null and b/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest.class differ
diff --git a/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest.java b/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest.java
new file mode 100644
index 0000000..381a44e
--- /dev/null
+++ b/dx/tests/127-merge-stress/com/android/dx/merge/MergeTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dx.merge;
+
+import com.android.dex.Dex;
+import com.android.dex.DexIndexOverflowException;
+import com.android.dx.command.dexer.DxContext;
+
+import java.io.File;
+import java.io.IOException;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.Arrays;
+import java.util.Random;
+import java.util.HashSet;
+
+/**
+ * This test tries to merge given dex files at random, a first pass at 2 by 2, followed by
+ * a second pass doing multi-way merges.
+ */
+public class MergeTest {
+
+  private static final int NUMBER_OF_TRIES = 1000;
+
+  private static final int WORKER_THREADS = 4;
+
+  private static final ExecutorService executor = Executors.newFixedThreadPool(WORKER_THREADS);
+
+  // Helper task to concurrently run merge tests.
+  static class MergeTask implements Runnable {
+    private final DexMerger dexMerger;
+    private final String[] dexFiles;
+
+    MergeTask(String[] dexFiles, Dex[] dexesToMerge) throws IOException {
+      this.dexMerger = new DexMerger(dexesToMerge, CollisionPolicy.KEEP_FIRST, new DxContext());
+      this.dexFiles = dexFiles;
+    }
+
+    public void run() {
+      try {
+        dexMerger.merge();
+      } catch (DexIndexOverflowException e) {
+        // ignore index overflow
+      } catch (Throwable t) {
+        System.err.println("Exception processing DEX files: " + t);
+        System.err.println("Problem merging those dexes: " + Arrays.toString(dexFiles));
+        System.exit(1);
+      }
+    }
+  }
+
+  public static void main(String[] args) throws Throwable {
+    Random random = new Random();
+    HashSet<Integer> seen = new HashSet<>();
+    for (int pass = 0; pass < 2; pass++) {
+      for (int i = 0; i < NUMBER_OF_TRIES; i++) {
+        // On the first pass only do 2-way merges, then do from 3 to 10 way merges
+        // but not more to avoid dex index overflow.
+        int numDex = pass == 0 ? 2 : random.nextInt(8) + 3;
+        numDex = Math.min(numDex, args.length);
+        String[] fileNames = new String[numDex];
+        for (int j = 0; j < numDex; ++j) {
+          int fileIndex = random.nextInt(args.length);
+          fileNames[j] = args[fileIndex];
+        }
+
+        if (!seen.add(fileNames.hashCode())) {
+          // Skip, already seen set of file names with the same hash.
+          continue;
+        }
+
+        Dex[] dexesToMerge = new Dex[numDex];
+        for (int j = 0; j < numDex; ++j) {
+          try {
+            dexesToMerge[j] = new Dex(new File(fileNames[j]));
+          } catch (IOException e) {
+            System.err.println("Error opening " + fileNames[j]);
+            System.err.println(e);
+            System.exit(1);
+          }
+        }
+        executor.execute(new MergeTask(fileNames, dexesToMerge));
+      }
+    }
+    executor.shutdown();
+    executor.awaitTermination(8, TimeUnit.HOURS);
+  }
+}
diff --git a/dx/tests/127-merge-stress/expected.txt b/dx/tests/127-merge-stress/expected.txt
new file mode 100644
index 0000000..e69de29
diff --git a/dx/tests/127-merge-stress/info.txt b/dx/tests/127-merge-stress/info.txt
new file mode 100644
index 0000000..61c1e25
--- /dev/null
+++ b/dx/tests/127-merge-stress/info.txt
@@ -0,0 +1 @@
+This test tries to merge dex files it finds in the android tree at random, 2 by 2.
diff --git a/dx/tests/127-merge-stress/run b/dx/tests/127-merge-stress/run
new file mode 100755
index 0000000..ccb055b
--- /dev/null
+++ b/dx/tests/127-merge-stress/run
@@ -0,0 +1,72 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+# NB This test is likely to be flakey. It attempts to merge random
+# DEX files from the Android build tree.
+
+# Find dx.jar from dx in the android dev tree
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+
+for i in "$dxjar"; do
+    if [ ! -r $i ]; then
+        echo Missing dependency $i. Build dx-tests.
+        exit 1
+    fi
+done
+
+# Find all files that could contain dex bytecode.
+candidates=`find "$ANDROID_BUILD_TOP/out" -name '*.dex' -o -name '*.jar' -o -name '*.apk'`
+validdexes=()
+checksums=()
+for dex in $candidates; do
+  if [[ "$dex" = *"core"* ]]; then
+    # Ignoring core files as hit limits of merging capability.
+    continue
+  fi
+
+  # Filter out jar files and apks that do not unzip or contain a
+  # classes.dex file. DexMerger assumes file contents based on the
+  # file extension. Android build names some DEX files with a .jar
+  # extension and this raises an exception in DexMerger as it fails
+  # to unzip them.
+  if [[ "$dex" == *"jar" || "$dex" == *"apk" ]]; then
+    unzip -l "$dex" 2>&1 | grep -q -m 1 classes.dex
+    if [[ $? != 0 ]]; then
+      continue
+    fi
+  fi
+
+  # Skip duplicate files
+  checksum=`shasum "$dex" | sed -e 's/ .*//' -e 's/^/_/'`
+  if [[ "$checksums[$checksum]" == "$checksum" ]]; then
+    continue
+  fi
+  checksums[$checksum]=$checksum
+
+  dexdump -c $dex >/dev/null 2>&1
+  if [ $? -eq 0 ]; then
+    validdexes+=("$dex")
+  fi
+done
+
+if [ ${#validdexes[@]} -eq 0 ]; then
+  echo No valid DEX files found.
+  exit 1
+fi
+
+${JAVA} -cp .:$dxjar -ea -esa com.android.dx.merge.MergeTest "${validdexes[@]}" > /dev/null
diff --git a/dx/tests/128-multidex-option-overflow/build b/dx/tests/128-multidex-option-overflow/build
new file mode 100644
index 0000000..5ebef68
--- /dev/null
+++ b/dx/tests/128-multidex-option-overflow/build
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Stop if something fails.
+set -e
+
+JAVAC_SOURCE=1.6
+JAVAC_TARGET=1.6
+
+# Write out files with 65500 total static fields, instance fields, and methods
+# to exceed the dex format's limits.
+mkdir src
+awk '
+BEGIN {
+    writeFileField("FillerStatic", "static public int staticInt");
+    writeFileField("FillerField", "public int fieldInt");
+    writeFileMethod("FillerMethod");
+}
+function writeFileField(name, type) {
+    fileName = "src/" name ".java";
+    printf("public class %s {\n", name) > fileName;
+    for (i = 1; i <= 65500; i++) {
+        printf("    %s%d;\n", type, i) > fileName;
+    }
+    printf("}\n") > fileName;
+}
+function writeFileMethod(name) {
+    fileName = "src/" name ".java";
+    printf("public class %s {\n", name) > fileName;
+    for (i = 1; i <= 65500; i++) {
+      printf("    public void meth%d() { }\n", i) > fileName;
+    }
+    printf("}\n") > fileName;
+}'
+
+mkdir classes
+${JAVAC} -source ${JAVAC_SOURCE} -target ${JAVAC_TARGET} -d classes `find src -name '*.java'`
diff --git a/dx/tests/128-multidex-option-overflow/classes/FillerField.class b/dx/tests/128-multidex-option-overflow/classes/FillerField.class
new file mode 100644
index 0000000..5f2f64e
Binary files /dev/null and b/dx/tests/128-multidex-option-overflow/classes/FillerField.class differ
diff --git a/dx/tests/128-multidex-option-overflow/classes/FillerMethod.class b/dx/tests/128-multidex-option-overflow/classes/FillerMethod.class
new file mode 100644
index 0000000..b86cd41
Binary files /dev/null and b/dx/tests/128-multidex-option-overflow/classes/FillerMethod.class differ
diff --git a/dx/tests/128-multidex-option-overflow/classes/FillerStatic.class b/dx/tests/128-multidex-option-overflow/classes/FillerStatic.class
new file mode 100644
index 0000000..e09bdcc
Binary files /dev/null and b/dx/tests/128-multidex-option-overflow/classes/FillerStatic.class differ
diff --git a/dx/tests/128-multidex-option-overflow/expected.txt b/dx/tests/128-multidex-option-overflow/expected.txt
new file mode 100644
index 0000000..3d7a649
--- /dev/null
+++ b/dx/tests/128-multidex-option-overflow/expected.txt
@@ -0,0 +1,3 @@
+classes2.dex
+classes3.dex
+classes.dex
diff --git a/dx/tests/128-multidex-option-overflow/info.txt b/dx/tests/128-multidex-option-overflow/info.txt
new file mode 100644
index 0000000..4c212d6
--- /dev/null
+++ b/dx/tests/128-multidex-option-overflow/info.txt
@@ -0,0 +1,2 @@
+Test that dx generates several dex files when the application exceeds more
+than 65536 fields and --multi-dex option is given.
diff --git a/dx/tests/128-multidex-option-overflow/run b/dx/tests/128-multidex-option-overflow/run
new file mode 100644
index 0000000..af3bf50
--- /dev/null
+++ b/dx/tests/128-multidex-option-overflow/run
@@ -0,0 +1,22 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+# Stop if something fails.
+set -e
+
+mkdir out
+dx -JXmx1024m --dex --no-optimize --multi-dex --output=out classes
+ls -1F out
diff --git a/dx/tests/128-multidex-option-overflow/src/FillerField.java b/dx/tests/128-multidex-option-overflow/src/FillerField.java
new file mode 100644
index 0000000..50f9fa9
--- /dev/null
+++ b/dx/tests/128-multidex-option-overflow/src/FillerField.java
@@ -0,0 +1,65502 @@
+public class FillerField {
+    public int fieldInt1;
+    public int fieldInt2;
+    public int fieldInt3;
+    public int fieldInt4;
+    public int fieldInt5;
+    public int fieldInt6;
+    public int fieldInt7;
+    public int fieldInt8;
+    public int fieldInt9;
+    public int fieldInt10;
+    public int fieldInt11;
+    public int fieldInt12;
+    public int fieldInt13;
+    public int fieldInt14;
+    public int fieldInt15;
+    public int fieldInt16;
+    public int fieldInt17;
+    public int fieldInt18;
+    public int fieldInt19;
+    public int fieldInt20;
+    public int fieldInt21;
+    public int fieldInt22;
+    public int fieldInt23;
+    public int fieldInt24;
+    public int fieldInt25;
+    public int fieldInt26;
+    public int fieldInt27;
+    public int fieldInt28;
+    public int fieldInt29;
+    public int fieldInt30;
+    public int fieldInt31;
+    public int fieldInt32;
+    public int fieldInt33;
+    public int fieldInt34;
+    public int fieldInt35;
+    public int fieldInt36;
+    public int fieldInt37;
+    public int fieldInt38;
+    public int fieldInt39;
+    public int fieldInt40;
+    public int fieldInt41;
+    public int fieldInt42;
+    public int fieldInt43;
+    public int fieldInt44;
+    public int fieldInt45;
+    public int fieldInt46;
+    public int fieldInt47;
+    public int fieldInt48;
+    public int fieldInt49;
+    public int fieldInt50;
+    public int fieldInt51;
+    public int fieldInt52;
+    public int fieldInt53;
+    public int fieldInt54;
+    public int fieldInt55;
+    public int fieldInt56;
+    public int fieldInt57;
+    public int fieldInt58;
+    public int fieldInt59;
+    public int fieldInt60;
+    public int fieldInt61;
+    public int fieldInt62;
+    public int fieldInt63;
+    public int fieldInt64;
+    public int fieldInt65;
+    public int fieldInt66;
+    public int fieldInt67;
+    public int fieldInt68;
+    public int fieldInt69;
+    public int fieldInt70;
+    public int fieldInt71;
+    public int fieldInt72;
+    public int fieldInt73;
+    public int fieldInt74;
+    public int fieldInt75;
+    public int fieldInt76;
+    public int fieldInt77;
+    public int fieldInt78;
+    public int fieldInt79;
+    public int fieldInt80;
+    public int fieldInt81;
+    public int fieldInt82;
+    public int fieldInt83;
+    public int fieldInt84;
+    public int fieldInt85;
+    public int fieldInt86;
+    public int fieldInt87;
+    public int fieldInt88;
+    public int fieldInt89;
+    public int fieldInt90;
+    public int fieldInt91;
+    public int fieldInt92;
+    public int fieldInt93;
+    public int fieldInt94;
+    public int fieldInt95;
+    public int fieldInt96;
+    public int fieldInt97;
+    public int fieldInt98;
+    public int fieldInt99;
+    public int fieldInt100;
+    public int fieldInt101;
+    public int fieldInt102;
+    public int fieldInt103;
+    public int fieldInt104;
+    public int fieldInt105;
+    public int fieldInt106;
+    public int fieldInt107;
+    public int fieldInt108;
+    public int fieldInt109;
+    public int fieldInt110;
+    public int fieldInt111;
+    public int fieldInt112;
+    public int fieldInt113;
+    public int fieldInt114;
+    public int fieldInt115;
+    public int fieldInt116;
+    public int fieldInt117;
+    public int fieldInt118;
+    public int fieldInt119;
+    public int fieldInt120;
+    public int fieldInt121;
+    public int fieldInt122;
+    public int fieldInt123;
+    public int fieldInt124;
+    public int fieldInt125;
+    public int fieldInt126;
+    public int fieldInt127;
+    public int fieldInt128;
+    public int fieldInt129;
+    public int fieldInt130;
+    public int fieldInt131;
+    public int fieldInt132;
+    public int fieldInt133;
+    public int fieldInt134;
+    public int fieldInt135;
+    public int fieldInt136;
+    public int fieldInt137;
+    public int fieldInt138;
+    public int fieldInt139;
+    public int fieldInt140;
+    public int fieldInt141;
+    public int fieldInt142;
+    public int fieldInt143;
+    public int fieldInt144;
+    public int fieldInt145;
+    public int fieldInt146;
+    public int fieldInt147;
+    public int fieldInt148;
+    public int fieldInt149;
+    public int fieldInt150;
+    public int fieldInt151;
+    public int fieldInt152;
+    public int fieldInt153;
+    public int fieldInt154;
+    public int fieldInt155;
+    public int fieldInt156;
+    public int fieldInt157;
+    public int fieldInt158;
+    public int fieldInt159;
+    public int fieldInt160;
+    public int fieldInt161;
+    public int fieldInt162;
+    public int fieldInt163;
+    public int fieldInt164;
+    public int fieldInt165;
+    public int fieldInt166;
+    public int fieldInt167;
+    public int fieldInt168;
+    public int fieldInt169;
+    public int fieldInt170;
+    public int fieldInt171;
+    public int fieldInt172;
+    public int fieldInt173;
+    public int fieldInt174;
+    public int fieldInt175;
+    public int fieldInt176;
+    public int fieldInt177;
+    public int fieldInt178;
+    public int fieldInt179;
+    public int fieldInt180;
+    public int fieldInt181;
+    public int fieldInt182;
+    public int fieldInt183;
+    public int fieldInt184;
+    public int fieldInt185;
+    public int fieldInt186;
+    public int fieldInt187;
+    public int fieldInt188;
+    public int fieldInt189;
+    public int fieldInt190;
+    public int fieldInt191;
+    public int fieldInt192;
+    public int fieldInt193;
+    public int fieldInt194;
+    public int fieldInt195;
+    public int fieldInt196;
+    public int fieldInt197;
+    public int fieldInt198;
+    public int fieldInt199;
+    public int fieldInt200;
+    public int fieldInt201;
+    public int fieldInt202;
+    public int fieldInt203;
+    public int fieldInt204;
+    public int fieldInt205;
+    public int fieldInt206;
+    public int fieldInt207;
+    public int fieldInt208;
+    public int fieldInt209;
+    public int fieldInt210;
+    public int fieldInt211;
+    public int fieldInt212;
+    public int fieldInt213;
+    public int fieldInt214;
+    public int fieldInt215;
+    public int fieldInt216;
+    public int fieldInt217;
+    public int fieldInt218;
+    public int fieldInt219;
+    public int fieldInt220;
+    public int fieldInt221;
+    public int fieldInt222;
+    public int fieldInt223;
+    public int fieldInt224;
+    public int fieldInt225;
+    public int fieldInt226;
+    public int fieldInt227;
+    public int fieldInt228;
+    public int fieldInt229;
+    public int fieldInt230;
+    public int fieldInt231;
+    public int fieldInt232;
+    public int fieldInt233;
+    public int fieldInt234;
+    public int fieldInt235;
+    public int fieldInt236;
+    public int fieldInt237;
+    public int fieldInt238;
+    public int fieldInt239;
+    public int fieldInt240;
+    public int fieldInt241;
+    public int fieldInt242;
+    public int fieldInt243;
+    public int fieldInt244;
+    public int fieldInt245;
+    public int fieldInt246;
+    public int fieldInt247;
+    public int fieldInt248;
+    public int fieldInt249;
+    public int fieldInt250;
+    public int fieldInt251;
+    public int fieldInt252;
+    public int fieldInt253;
+    public int fieldInt254;
+    public int fieldInt255;
+    public int fieldInt256;
+    public int fieldInt257;
+    public int fieldInt258;
+    public int fieldInt259;
+    public int fieldInt260;
+    public int fieldInt261;
+    public int fieldInt262;
+    public int fieldInt263;
+    public int fieldInt264;
+    public int fieldInt265;
+    public int fieldInt266;
+    public int fieldInt267;
+    public int fieldInt268;
+    public int fieldInt269;
+    public int fieldInt270;
+    public int fieldInt271;
+    public int fieldInt272;
+    public int fieldInt273;
+    public int fieldInt274;
+    public int fieldInt275;
+    public int fieldInt276;
+    public int fieldInt277;
+    public int fieldInt278;
+    public int fieldInt279;
+    public int fieldInt280;
+    public int fieldInt281;
+    public int fieldInt282;
+    public int fieldInt283;
+    public int fieldInt284;
+    public int fieldInt285;
+    public int fieldInt286;
+    public int fieldInt287;
+    public int fieldInt288;
+    public int fieldInt289;
+    public int fieldInt290;
+    public int fieldInt291;
+    public int fieldInt292;
+    public int fieldInt293;
+    public int fieldInt294;
+    public int fieldInt295;
+    public int fieldInt296;
+    public int fieldInt297;
+    public int fieldInt298;
+    public int fieldInt299;
+    public int fieldInt300;
+    public int fieldInt301;
+    public int fieldInt302;
+    public int fieldInt303;
+    public int fieldInt304;
+    public int fieldInt305;
+    public int fieldInt306;
+    public int fieldInt307;
+    public int fieldInt308;
+    public int fieldInt309;
+    public int fieldInt310;
+    public int fieldInt311;
+    public int fieldInt312;
+    public int fieldInt313;
+    public int fieldInt314;
+    public int fieldInt315;
+    public int fieldInt316;
+    public int fieldInt317;
+    public int fieldInt318;
+    public int fieldInt319;
+    public int fieldInt320;
+    public int fieldInt321;
+    public int fieldInt322;
+    public int fieldInt323;
+    public int fieldInt324;
+    public int fieldInt325;
+    public int fieldInt326;
+    public int fieldInt327;
+    public int fieldInt328;
+    public int fieldInt329;
+    public int fieldInt330;
+    public int fieldInt331;
+    public int fieldInt332;
+    public int fieldInt333;
+    public int fieldInt334;
+    public int fieldInt335;
+    public int fieldInt336;
+    public int fieldInt337;
+    public int fieldInt338;
+    public int fieldInt339;
+    public int fieldInt340;
+    public int fieldInt341;
+    public int fieldInt342;
+    public int fieldInt343;
+    public int fieldInt344;
+    public int fieldInt345;
+    public int fieldInt346;
+    public int fieldInt347;
+    public int fieldInt348;
+    public int fieldInt349;
+    public int fieldInt350;
+    public int fieldInt351;
+    public int fieldInt352;
+    public int fieldInt353;
+    public int fieldInt354;
+    public int fieldInt355;
+    public int fieldInt356;
+    public int fieldInt357;
+    public int fieldInt358;
+    public int fieldInt359;
+    public int fieldInt360;
+    public int fieldInt361;
+    public int fieldInt362;
+    public int fieldInt363;
+    public int fieldInt364;
+    public int fieldInt365;
+    public int fieldInt366;
+    public int fieldInt367;
+    public int fieldInt368;
+    public int fieldInt369;
+    public int fieldInt370;
+    public int fieldInt371;
+    public int fieldInt372;
+    public int fieldInt373;
+    public int fieldInt374;
+    public int fieldInt375;
+    public int fieldInt376;
+    public int fieldInt377;
+    public int fieldInt378;
+    public int fieldInt379;
+    public int fieldInt380;
+    public int fieldInt381;
+    public int fieldInt382;
+    public int fieldInt383;
+    public int fieldInt384;
+    public int fieldInt385;
+    public int fieldInt386;
+    public int fieldInt387;
+    public int fieldInt388;
+    public int fieldInt389;
+    public int fieldInt390;
+    public int fieldInt391;
+    public int fieldInt392;
+    public int fieldInt393;
+    public int fieldInt394;
+    public int fieldInt395;
+    public int fieldInt396;
+    public int fieldInt397;
+    public int fieldInt398;
+    public int fieldInt399;
+    public int fieldInt400;
+    public int fieldInt401;
+    public int fieldInt402;
+    public int fieldInt403;
+    public int fieldInt404;
+    public int fieldInt405;
+    public int fieldInt406;
+    public int fieldInt407;
+    public int fieldInt408;
+    public int fieldInt409;
+    public int fieldInt410;
+    public int fieldInt411;
+    public int fieldInt412;
+    public int fieldInt413;
+    public int fieldInt414;
+    public int fieldInt415;
+    public int fieldInt416;
+    public int fieldInt417;
+    public int fieldInt418;
+    public int fieldInt419;
+    public int fieldInt420;
+    public int fieldInt421;
+    public int fieldInt422;
+    public int fieldInt423;
+    public int fieldInt424;
+    public int fieldInt425;
+    public int fieldInt426;
+    public int fieldInt427;
+    public int fieldInt428;
+    public int fieldInt429;
+    public int fieldInt430;
+    public int fieldInt431;
+    public int fieldInt432;
+    public int fieldInt433;
+    public int fieldInt434;
+    public int fieldInt435;
+    public int fieldInt436;
+    public int fieldInt437;
+    public int fieldInt438;
+    public int fieldInt439;
+    public int fieldInt440;
+    public int fieldInt441;
+    public int fieldInt442;
+    public int fieldInt443;
+    public int fieldInt444;
+    public int fieldInt445;
+    public int fieldInt446;
+    public int fieldInt447;
+    public int fieldInt448;
+    public int fieldInt449;
+    public int fieldInt450;
+    public int fieldInt451;
+    public int fieldInt452;
+    public int fieldInt453;
+    public int fieldInt454;
+    public int fieldInt455;
+    public int fieldInt456;
+    public int fieldInt457;
+    public int fieldInt458;
+    public int fieldInt459;
+    public int fieldInt460;
+    public int fieldInt461;
+    public int fieldInt462;
+    public int fieldInt463;
+    public int fieldInt464;
+    public int fieldInt465;
+    public int fieldInt466;
+    public int fieldInt467;
+    public int fieldInt468;
+    public int fieldInt469;
+    public int fieldInt470;
+    public int fieldInt471;
+    public int fieldInt472;
+    public int fieldInt473;
+    public int fieldInt474;
+    public int fieldInt475;
+    public int fieldInt476;
+    public int fieldInt477;
+    public int fieldInt478;
+    public int fieldInt479;
+    public int fieldInt480;
+    public int fieldInt481;
+    public int fieldInt482;
+    public int fieldInt483;
+    public int fieldInt484;
+    public int fieldInt485;
+    public int fieldInt486;
+    public int fieldInt487;
+    public int fieldInt488;
+    public int fieldInt489;
+    public int fieldInt490;
+    public int fieldInt491;
+    public int fieldInt492;
+    public int fieldInt493;
+    public int fieldInt494;
+    public int fieldInt495;
+    public int fieldInt496;
+    public int fieldInt497;
+    public int fieldInt498;
+    public int fieldInt499;
+    public int fieldInt500;
+    public int fieldInt501;
+    public int fieldInt502;
+    public int fieldInt503;
+    public int fieldInt504;
+    public int fieldInt505;
+    public int fieldInt506;
+    public int fieldInt507;
+    public int fieldInt508;
+    public int fieldInt509;
+    public int fieldInt510;
+    public int fieldInt511;
+    public int fieldInt512;
+    public int fieldInt513;
+    public int fieldInt514;
+    public int fieldInt515;
+    public int fieldInt516;
+    public int fieldInt517;
+    public int fieldInt518;
+    public int fieldInt519;
+    public int fieldInt520;
+    public int fieldInt521;
+    public int fieldInt522;
+    public int fieldInt523;
+    public int fieldInt524;
+    public int fieldInt525;
+    public int fieldInt526;
+    public int fieldInt527;
+    public int fieldInt528;
+    public int fieldInt529;
+    public int fieldInt530;
+    public int fieldInt531;
+    public int fieldInt532;
+    public int fieldInt533;
+    public int fieldInt534;
+    public int fieldInt535;
+    public int fieldInt536;
+    public int fieldInt537;
+    public int fieldInt538;
+    public int fieldInt539;
+    public int fieldInt540;
+    public int fieldInt541;
+    public int fieldInt542;
+    public int fieldInt543;
+    public int fieldInt544;
+    public int fieldInt545;
+    public int fieldInt546;
+    public int fieldInt547;
+    public int fieldInt548;
+    public int fieldInt549;
+    public int fieldInt550;
+    public int fieldInt551;
+    public int fieldInt552;
+    public int fieldInt553;
+    public int fieldInt554;
+    public int fieldInt555;
+    public int fieldInt556;
+    public int fieldInt557;
+    public int fieldInt558;
+    public int fieldInt559;
+    public int fieldInt560;
+    public int fieldInt561;
+    public int fieldInt562;
+    public int fieldInt563;
+    public int fieldInt564;
+    public int fieldInt565;
+    public int fieldInt566;
+    public int fieldInt567;
+    public int fieldInt568;
+    public int fieldInt569;
+    public int fieldInt570;
+    public int fieldInt571;
+    public int fieldInt572;
+    public int fieldInt573;
+    public int fieldInt574;
+    public int fieldInt575;
+    public int fieldInt576;
+    public int fieldInt577;
+    public int fieldInt578;
+    public int fieldInt579;
+    public int fieldInt580;
+    public int fieldInt581;
+    public int fieldInt582;
+    public int fieldInt583;
+    public int fieldInt584;
+    public int fieldInt585;
+    public int fieldInt586;
+    public int fieldInt587;
+    public int fieldInt588;
+    public int fieldInt589;
+    public int fieldInt590;
+    public int fieldInt591;
+    public int fieldInt592;
+    public int fieldInt593;
+    public int fieldInt594;
+    public int fieldInt595;
+    public int fieldInt596;
+    public int fieldInt597;
+    public int fieldInt598;
+    public int fieldInt599;
+    public int fieldInt600;
+    public int fieldInt601;
+    public int fieldInt602;
+    public int fieldInt603;
+    public int fieldInt604;
+    public int fieldInt605;
+    public int fieldInt606;
+    public int fieldInt607;
+    public int fieldInt608;
+    public int fieldInt609;
+    public int fieldInt610;
+    public int fieldInt611;
+    public int fieldInt612;
+    public int fieldInt613;
+    public int fieldInt614;
+    public int fieldInt615;
+    public int fieldInt616;
+    public int fieldInt617;
+    public int fieldInt618;
+    public int fieldInt619;
+    public int fieldInt620;
+    public int fieldInt621;
+    public int fieldInt622;
+    public int fieldInt623;
+    public int fieldInt624;
+    public int fieldInt625;
+    public int fieldInt626;
+    public int fieldInt627;
+    public int fieldInt628;
+    public int fieldInt629;
+    public int fieldInt630;
+    public int fieldInt631;
+    public int fieldInt632;
+    public int fieldInt633;
+    public int fieldInt634;
+    public int fieldInt635;
+    public int fieldInt636;
+    public int fieldInt637;
+    public int fieldInt638;
+    public int fieldInt639;
+    public int fieldInt640;
+    public int fieldInt641;
+    public int fieldInt642;
+    public int fieldInt643;
+    public int fieldInt644;
+    public int fieldInt645;
+    public int fieldInt646;
+    public int fieldInt647;
+    public int fieldInt648;
+    public int fieldInt649;
+    public int fieldInt650;
+    public int fieldInt651;
+    public int fieldInt652;
+    public int fieldInt653;
+    public int fieldInt654;
+    public int fieldInt655;
+    public int fieldInt656;
+    public int fieldInt657;
+    public int fieldInt658;
+    public int fieldInt659;
+    public int fieldInt660;
+    public int fieldInt661;
+    public int fieldInt662;
+    public int fieldInt663;
+    public int fieldInt664;
+    public int fieldInt665;
+    public int fieldInt666;
+    public int fieldInt667;
+    public int fieldInt668;
+    public int fieldInt669;
+    public int fieldInt670;
+    public int fieldInt671;
+    public int fieldInt672;
+    public int fieldInt673;
+    public int fieldInt674;
+    public int fieldInt675;
+    public int fieldInt676;
+    public int fieldInt677;
+    public int fieldInt678;
+    public int fieldInt679;
+    public int fieldInt680;
+    public int fieldInt681;
+    public int fieldInt682;
+    public int fieldInt683;
+    public int fieldInt684;
+    public int fieldInt685;
+    public int fieldInt686;
+    public int fieldInt687;
+    public int fieldInt688;
+    public int fieldInt689;
+    public int fieldInt690;
+    public int fieldInt691;
+    public int fieldInt692;
+    public int fieldInt693;
+    public int fieldInt694;
+    public int fieldInt695;
+    public int fieldInt696;
+    public int fieldInt697;
+    public int fieldInt698;
+    public int fieldInt699;
+    public int fieldInt700;
+    public int fieldInt701;
+    public int fieldInt702;
+    public int fieldInt703;
+    public int fieldInt704;
+    public int fieldInt705;
+    public int fieldInt706;
+    public int fieldInt707;
+    public int fieldInt708;
+    public int fieldInt709;
+    public int fieldInt710;
+    public int fieldInt711;
+    public int fieldInt712;
+    public int fieldInt713;
+    public int fieldInt714;
+    public int fieldInt715;
+    public int fieldInt716;
+    public int fieldInt717;
+    public int fieldInt718;
+    public int fieldInt719;
+    public int fieldInt720;
+    public int fieldInt721;
+    public int fieldInt722;
+    public int fieldInt723;
+    public int fieldInt724;
+    public int fieldInt725;
+    public int fieldInt726;
+    public int fieldInt727;
+    public int fieldInt728;
+    public int fieldInt729;
+    public int fieldInt730;
+    public int fieldInt731;
+    public int fieldInt732;
+    public int fieldInt733;
+    public int fieldInt734;
+    public int fieldInt735;
+    public int fieldInt736;
+    public int fieldInt737;
+    public int fieldInt738;
+    public int fieldInt739;
+    public int fieldInt740;
+    public int fieldInt741;
+    public int fieldInt742;
+    public int fieldInt743;
+    public int fieldInt744;
+    public int fieldInt745;
+    public int fieldInt746;
+    public int fieldInt747;
+    public int fieldInt748;
+    public int fieldInt749;
+    public int fieldInt750;
+    public int fieldInt751;
+    public int fieldInt752;
+    public int fieldInt753;
+    public int fieldInt754;
+    public int fieldInt755;
+    public int fieldInt756;
+    public int fieldInt757;
+    public int fieldInt758;
+    public int fieldInt759;
+    public int fieldInt760;
+    public int fieldInt761;
+    public int fieldInt762;
+    public int fieldInt763;
+    public int fieldInt764;
+    public int fieldInt765;
+    public int fieldInt766;
+    public int fieldInt767;
+    public int fieldInt768;
+    public int fieldInt769;
+    public int fieldInt770;
+    public int fieldInt771;
+    public int fieldInt772;
+    public int fieldInt773;
+    public int fieldInt774;
+    public int fieldInt775;
+    public int fieldInt776;
+    public int fieldInt777;
+    public int fieldInt778;
+    public int fieldInt779;
+    public int fieldInt780;
+    public int fieldInt781;
+    public int fieldInt782;
+    public int fieldInt783;
+    public int fieldInt784;
+    public int fieldInt785;
+    public int fieldInt786;
+    public int fieldInt787;
+    public int fieldInt788;
+    public int fieldInt789;
+    public int fieldInt790;
+    public int fieldInt791;
+    public int fieldInt792;
+    public int fieldInt793;
+    public int fieldInt794;
+    public int fieldInt795;
+    public int fieldInt796;
+    public int fieldInt797;
+    public int fieldInt798;
+    public int fieldInt799;
+    public int fieldInt800;
+    public int fieldInt801;
+    public int fieldInt802;
+    public int fieldInt803;
+    public int fieldInt804;
+    public int fieldInt805;
+    public int fieldInt806;
+    public int fieldInt807;
+    public int fieldInt808;
+    public int fieldInt809;
+    public int fieldInt810;
+    public int fieldInt811;
+    public int fieldInt812;
+    public int fieldInt813;
+    public int fieldInt814;
+    public int fieldInt815;
+    public int fieldInt816;
+    public int fieldInt817;
+    public int fieldInt818;
+    public int fieldInt819;
+    public int fieldInt820;
+    public int fieldInt821;
+    public int fieldInt822;
+    public int fieldInt823;
+    public int fieldInt824;
+    public int fieldInt825;
+    public int fieldInt826;
+    public int fieldInt827;
+    public int fieldInt828;
+    public int fieldInt829;
+    public int fieldInt830;
+    public int fieldInt831;
+    public int fieldInt832;
+    public int fieldInt833;
+    public int fieldInt834;
+    public int fieldInt835;
+    public int fieldInt836;
+    public int fieldInt837;
+    public int fieldInt838;
+    public int fieldInt839;
+    public int fieldInt840;
+    public int fieldInt841;
+    public int fieldInt842;
+    public int fieldInt843;
+    public int fieldInt844;
+    public int fieldInt845;
+    public int fieldInt846;
+    public int fieldInt847;
+    public int fieldInt848;
+    public int fieldInt849;
+    public int fieldInt850;
+    public int fieldInt851;
+    public int fieldInt852;
+    public int fieldInt853;
+    public int fieldInt854;
+    public int fieldInt855;
+    public int fieldInt856;
+    public int fieldInt857;
+    public int fieldInt858;
+    public int fieldInt859;
+    public int fieldInt860;
+    public int fieldInt861;
+    public int fieldInt862;
+    public int fieldInt863;
+    public int fieldInt864;
+    public int fieldInt865;
+    public int fieldInt866;
+    public int fieldInt867;
+    public int fieldInt868;
+    public int fieldInt869;
+    public int fieldInt870;
+    public int fieldInt871;
+    public int fieldInt872;
+    public int fieldInt873;
+    public int fieldInt874;
+    public int fieldInt875;
+    public int fieldInt876;
+    public int fieldInt877;
+    public int fieldInt878;
+    public int fieldInt879;
+    public int fieldInt880;
+    public int fieldInt881;
+    public int fieldInt882;
+    public int fieldInt883;
+    public int fieldInt884;
+    public int fieldInt885;
+    public int fieldInt886;
+    public int fieldInt887;
+    public int fieldInt888;
+    public int fieldInt889;
+    public int fieldInt890;
+    public int fieldInt891;
+    public int fieldInt892;
+    public int fieldInt893;
+    public int fieldInt894;
+    public int fieldInt895;
+    public int fieldInt896;
+    public int fieldInt897;
+    public int fieldInt898;
+    public int fieldInt899;
+    public int fieldInt900;
+    public int fieldInt901;
+    public int fieldInt902;
+    public int fieldInt903;
+    public int fieldInt904;
+    public int fieldInt905;
+    public int fieldInt906;
+    public int fieldInt907;
+    public int fieldInt908;
+    public int fieldInt909;
+    public int fieldInt910;
+    public int fieldInt911;
+    public int fieldInt912;
+    public int fieldInt913;
+    public int fieldInt914;
+    public int fieldInt915;
+    public int fieldInt916;
+    public int fieldInt917;
+    public int fieldInt918;
+    public int fieldInt919;
+    public int fieldInt920;
+    public int fieldInt921;
+    public int fieldInt922;
+    public int fieldInt923;
+    public int fieldInt924;
+    public int fieldInt925;
+    public int fieldInt926;
+    public int fieldInt927;
+    public int fieldInt928;
+    public int fieldInt929;
+    public int fieldInt930;
+    public int fieldInt931;
+    public int fieldInt932;
+    public int fieldInt933;
+    public int fieldInt934;
+    public int fieldInt935;
+    public int fieldInt936;
+    public int fieldInt937;
+    public int fieldInt938;
+    public int fieldInt939;
+    public int fieldInt940;
+    public int fieldInt941;
+    public int fieldInt942;
+    public int fieldInt943;
+    public int fieldInt944;
+    public int fieldInt945;
+    public int fieldInt946;
+    public int fieldInt947;
+    public int fieldInt948;
+    public int fieldInt949;
+    public int fieldInt950;
+    public int fieldInt951;
+    public int fieldInt952;
+    public int fieldInt953;
+    public int fieldInt954;
+    public int fieldInt955;
+    public int fieldInt956;
+    public int fieldInt957;
+    public int fieldInt958;
+    public int fieldInt959;
+    public int fieldInt960;
+    public int fieldInt961;
+    public int fieldInt962;
+    public int fieldInt963;
+    public int fieldInt964;
+    public int fieldInt965;
+    public int fieldInt966;
+    public int fieldInt967;
+    public int fieldInt968;
+    public int fieldInt969;
+    public int fieldInt970;
+    public int fieldInt971;
+    public int fieldInt972;
+    public int fieldInt973;
+    public int fieldInt974;
+    public int fieldInt975;
+    public int fieldInt976;
+    public int fieldInt977;
+    public int fieldInt978;
+    public int fieldInt979;
+    public int fieldInt980;
+    public int fieldInt981;
+    public int fieldInt982;
+    public int fieldInt983;
+    public int fieldInt984;
+    public int fieldInt985;
+    public int fieldInt986;
+    public int fieldInt987;
+    public int fieldInt988;
+    public int fieldInt989;
+    public int fieldInt990;
+    public int fieldInt991;
+    public int fieldInt992;
+    public int fieldInt993;
+    public int fieldInt994;
+    public int fieldInt995;
+    public int fieldInt996;
+    public int fieldInt997;
+    public int fieldInt998;
+    public int fieldInt999;
+    public int fieldInt1000;
+    public int fieldInt1001;
+    public int fieldInt1002;
+    public int fieldInt1003;
+    public int fieldInt1004;
+    public int fieldInt1005;
+    public int fieldInt1006;
+    public int fieldInt1007;
+    public int fieldInt1008;
+    public int fieldInt1009;
+    public int fieldInt1010;
+    public int fieldInt1011;
+    public int fieldInt1012;
+    public int fieldInt1013;
+    public int fieldInt1014;
+    public int fieldInt1015;
+    public int fieldInt1016;
+    public int fieldInt1017;
+    public int fieldInt1018;
+    public int fieldInt1019;
+    public int fieldInt1020;
+    public int fieldInt1021;
+    public int fieldInt1022;
+    public int fieldInt1023;
+    public int fieldInt1024;
+    public int fieldInt1025;
+    public int fieldInt1026;
+    public int fieldInt1027;
+    public int fieldInt1028;
+    public int fieldInt1029;
+    public int fieldInt1030;
+    public int fieldInt1031;
+    public int fieldInt1032;
+    public int fieldInt1033;
+    public int fieldInt1034;
+    public int fieldInt1035;
+    public int fieldInt1036;
+    public int fieldInt1037;
+    public int fieldInt1038;
+    public int fieldInt1039;
+    public int fieldInt1040;
+    public int fieldInt1041;
+    public int fieldInt1042;
+    public int fieldInt1043;
+    public int fieldInt1044;
+    public int fieldInt1045;
+    public int fieldInt1046;
+    public int fieldInt1047;
+    public int fieldInt1048;
+    public int fieldInt1049;
+    public int fieldInt1050;
+    public int fieldInt1051;
+    public int fieldInt1052;
+    public int fieldInt1053;
+    public int fieldInt1054;
+    public int fieldInt1055;
+    public int fieldInt1056;
+    public int fieldInt1057;
+    public int fieldInt1058;
+    public int fieldInt1059;
+    public int fieldInt1060;
+    public int fieldInt1061;
+    public int fieldInt1062;
+    public int fieldInt1063;
+    public int fieldInt1064;
+    public int fieldInt1065;
+    public int fieldInt1066;
+    public int fieldInt1067;
+    public int fieldInt1068;
+    public int fieldInt1069;
+    public int fieldInt1070;
+    public int fieldInt1071;
+    public int fieldInt1072;
+    public int fieldInt1073;
+    public int fieldInt1074;
+    public int fieldInt1075;
+    public int fieldInt1076;
+    public int fieldInt1077;
+    public int fieldInt1078;
+    public int fieldInt1079;
+    public int fieldInt1080;
+    public int fieldInt1081;
+    public int fieldInt1082;
+    public int fieldInt1083;
+    public int fieldInt1084;
+    public int fieldInt1085;
+    public int fieldInt1086;
+    public int fieldInt1087;
+    public int fieldInt1088;
+    public int fieldInt1089;
+    public int fieldInt1090;
+    public int fieldInt1091;
+    public int fieldInt1092;
+    public int fieldInt1093;
+    public int fieldInt1094;
+    public int fieldInt1095;
+    public int fieldInt1096;
+    public int fieldInt1097;
+    public int fieldInt1098;
+    public int fieldInt1099;
+    public int fieldInt1100;
+    public int fieldInt1101;
+    public int fieldInt1102;
+    public int fieldInt1103;
+    public int fieldInt1104;
+    public int fieldInt1105;
+    public int fieldInt1106;
+    public int fieldInt1107;
+    public int fieldInt1108;
+    public int fieldInt1109;
+    public int fieldInt1110;
+    public int fieldInt1111;
+    public int fieldInt1112;
+    public int fieldInt1113;
+    public int fieldInt1114;
+    public int fieldInt1115;
+    public int fieldInt1116;
+    public int fieldInt1117;
+    public int fieldInt1118;
+    public int fieldInt1119;
+    public int fieldInt1120;
+    public int fieldInt1121;
+    public int fieldInt1122;
+    public int fieldInt1123;
+    public int fieldInt1124;
+    public int fieldInt1125;
+    public int fieldInt1126;
+    public int fieldInt1127;
+    public int fieldInt1128;
+    public int fieldInt1129;
+    public int fieldInt1130;
+    public int fieldInt1131;
+    public int fieldInt1132;
+    public int fieldInt1133;
+    public int fieldInt1134;
+    public int fieldInt1135;
+    public int fieldInt1136;
+    public int fieldInt1137;
+    public int fieldInt1138;
+    public int fieldInt1139;
+    public int fieldInt1140;
+    public int fieldInt1141;
+    public int fieldInt1142;
+    public int fieldInt1143;
+    public int fieldInt1144;
+    public int fieldInt1145;
+    public int fieldInt1146;
+    public int fieldInt1147;
+    public int fieldInt1148;
+    public int fieldInt1149;
+    public int fieldInt1150;
+    public int fieldInt1151;
+    public int fieldInt1152;
+    public int fieldInt1153;
+    public int fieldInt1154;
+    public int fieldInt1155;
+    public int fieldInt1156;
+    public int fieldInt1157;
+    public int fieldInt1158;
+    public int fieldInt1159;
+    public int fieldInt1160;
+    public int fieldInt1161;
+    public int fieldInt1162;
+    public int fieldInt1163;
+    public int fieldInt1164;
+    public int fieldInt1165;
+    public int fieldInt1166;
+    public int fieldInt1167;
+    public int fieldInt1168;
+    public int fieldInt1169;
+    public int fieldInt1170;
+    public int fieldInt1171;
+    public int fieldInt1172;
+    public int fieldInt1173;
+    public int fieldInt1174;
+    public int fieldInt1175;
+    public int fieldInt1176;
+    public int fieldInt1177;
+    public int fieldInt1178;
+    public int fieldInt1179;
+    public int fieldInt1180;
+    public int fieldInt1181;
+    public int fieldInt1182;
+    public int fieldInt1183;
+    public int fieldInt1184;
+    public int fieldInt1185;
+    public int fieldInt1186;
+    public int fieldInt1187;
+    public int fieldInt1188;
+    public int fieldInt1189;
+    public int fieldInt1190;
+    public int fieldInt1191;
+    public int fieldInt1192;
+    public int fieldInt1193;
+    public int fieldInt1194;
+    public int fieldInt1195;
+    public int fieldInt1196;
+    public int fieldInt1197;
+    public int fieldInt1198;
+    public int fieldInt1199;
+    public int fieldInt1200;
+    public int fieldInt1201;
+    public int fieldInt1202;
+    public int fieldInt1203;
+    public int fieldInt1204;
+    public int fieldInt1205;
+    public int fieldInt1206;
+    public int fieldInt1207;
+    public int fieldInt1208;
+    public int fieldInt1209;
+    public int fieldInt1210;
+    public int fieldInt1211;
+    public int fieldInt1212;
+    public int fieldInt1213;
+    public int fieldInt1214;
+    public int fieldInt1215;
+    public int fieldInt1216;
+    public int fieldInt1217;
+    public int fieldInt1218;
+    public int fieldInt1219;
+    public int fieldInt1220;
+    public int fieldInt1221;
+    public int fieldInt1222;
+    public int fieldInt1223;
+    public int fieldInt1224;
+    public int fieldInt1225;
+    public int fieldInt1226;
+    public int fieldInt1227;
+    public int fieldInt1228;
+    public int fieldInt1229;
+    public int fieldInt1230;
+    public int fieldInt1231;
+    public int fieldInt1232;
+    public int fieldInt1233;
+    public int fieldInt1234;
+    public int fieldInt1235;
+    public int fieldInt1236;
+    public int fieldInt1237;
+    public int fieldInt1238;
+    public int fieldInt1239;
+    public int fieldInt1240;
+    public int fieldInt1241;
+    public int fieldInt1242;
+    public int fieldInt1243;
+    public int fieldInt1244;
+    public int fieldInt1245;
+    public int fieldInt1246;
+    public int fieldInt1247;
+    public int fieldInt1248;
+    public int fieldInt1249;
+    public int fieldInt1250;
+    public int fieldInt1251;
+    public int fieldInt1252;
+    public int fieldInt1253;
+    public int fieldInt1254;
+    public int fieldInt1255;
+    public int fieldInt1256;
+    public int fieldInt1257;
+    public int fieldInt1258;
+    public int fieldInt1259;
+    public int fieldInt1260;
+    public int fieldInt1261;
+    public int fieldInt1262;
+    public int fieldInt1263;
+    public int fieldInt1264;
+    public int fieldInt1265;
+    public int fieldInt1266;
+    public int fieldInt1267;
+    public int fieldInt1268;
+    public int fieldInt1269;
+    public int fieldInt1270;
+    public int fieldInt1271;
+    public int fieldInt1272;
+    public int fieldInt1273;
+    public int fieldInt1274;
+    public int fieldInt1275;
+    public int fieldInt1276;
+    public int fieldInt1277;
+    public int fieldInt1278;
+    public int fieldInt1279;
+    public int fieldInt1280;
+    public int fieldInt1281;
+    public int fieldInt1282;
+    public int fieldInt1283;
+    public int fieldInt1284;
+    public int fieldInt1285;
+    public int fieldInt1286;
+    public int fieldInt1287;
+    public int fieldInt1288;
+    public int fieldInt1289;
+    public int fieldInt1290;
+    public int fieldInt1291;
+    public int fieldInt1292;
+    public int fieldInt1293;
+    public int fieldInt1294;
+    public int fieldInt1295;
+    public int fieldInt1296;
+    public int fieldInt1297;
+    public int fieldInt1298;
+    public int fieldInt1299;
+    public int fieldInt1300;
+    public int fieldInt1301;
+    public int fieldInt1302;
+    public int fieldInt1303;
+    public int fieldInt1304;
+    public int fieldInt1305;
+    public int fieldInt1306;
+    public int fieldInt1307;
+    public int fieldInt1308;
+    public int fieldInt1309;
+    public int fieldInt1310;
+    public int fieldInt1311;
+    public int fieldInt1312;
+    public int fieldInt1313;
+    public int fieldInt1314;
+    public int fieldInt1315;
+    public int fieldInt1316;
+    public int fieldInt1317;
+    public int fieldInt1318;
+    public int fieldInt1319;
+    public int fieldInt1320;
+    public int fieldInt1321;
+    public int fieldInt1322;
+    public int fieldInt1323;
+    public int fieldInt1324;
+    public int fieldInt1325;
+    public int fieldInt1326;
+    public int fieldInt1327;
+    public int fieldInt1328;
+    public int fieldInt1329;
+    public int fieldInt1330;
+    public int fieldInt1331;
+    public int fieldInt1332;
+    public int fieldInt1333;
+    public int fieldInt1334;
+    public int fieldInt1335;
+    public int fieldInt1336;
+    public int fieldInt1337;
+    public int fieldInt1338;
+    public int fieldInt1339;
+    public int fieldInt1340;
+    public int fieldInt1341;
+    public int fieldInt1342;
+    public int fieldInt1343;
+    public int fieldInt1344;
+    public int fieldInt1345;
+    public int fieldInt1346;
+    public int fieldInt1347;
+    public int fieldInt1348;
+    public int fieldInt1349;
+    public int fieldInt1350;
+    public int fieldInt1351;
+    public int fieldInt1352;
+    public int fieldInt1353;
+    public int fieldInt1354;
+    public int fieldInt1355;
+    public int fieldInt1356;
+    public int fieldInt1357;
+    public int fieldInt1358;
+    public int fieldInt1359;
+    public int fieldInt1360;
+    public int fieldInt1361;
+    public int fieldInt1362;
+    public int fieldInt1363;
+    public int fieldInt1364;
+    public int fieldInt1365;
+    public int fieldInt1366;
+    public int fieldInt1367;
+    public int fieldInt1368;
+    public int fieldInt1369;
+    public int fieldInt1370;
+    public int fieldInt1371;
+    public int fieldInt1372;
+    public int fieldInt1373;
+    public int fieldInt1374;
+    public int fieldInt1375;
+    public int fieldInt1376;
+    public int fieldInt1377;
+    public int fieldInt1378;
+    public int fieldInt1379;
+    public int fieldInt1380;
+    public int fieldInt1381;
+    public int fieldInt1382;
+    public int fieldInt1383;
+    public int fieldInt1384;
+    public int fieldInt1385;
+    public int fieldInt1386;
+    public int fieldInt1387;
+    public int fieldInt1388;
+    public int fieldInt1389;
+    public int fieldInt1390;
+    public int fieldInt1391;
+    public int fieldInt1392;
+    public int fieldInt1393;
+    public int fieldInt1394;
+    public int fieldInt1395;
+    public int fieldInt1396;
+    public int fieldInt1397;
+    public int fieldInt1398;
+    public int fieldInt1399;
+    public int fieldInt1400;
+    public int fieldInt1401;
+    public int fieldInt1402;
+    public int fieldInt1403;
+    public int fieldInt1404;
+    public int fieldInt1405;
+    public int fieldInt1406;
+    public int fieldInt1407;
+    public int fieldInt1408;
+    public int fieldInt1409;
+    public int fieldInt1410;
+    public int fieldInt1411;
+    public int fieldInt1412;
+    public int fieldInt1413;
+    public int fieldInt1414;
+    public int fieldInt1415;
+    public int fieldInt1416;
+    public int fieldInt1417;
+    public int fieldInt1418;
+    public int fieldInt1419;
+    public int fieldInt1420;
+    public int fieldInt1421;
+    public int fieldInt1422;
+    public int fieldInt1423;
+    public int fieldInt1424;
+    public int fieldInt1425;
+    public int fieldInt1426;
+    public int fieldInt1427;
+    public int fieldInt1428;
+    public int fieldInt1429;
+    public int fieldInt1430;
+    public int fieldInt1431;
+    public int fieldInt1432;
+    public int fieldInt1433;
+    public int fieldInt1434;
+    public int fieldInt1435;
+    public int fieldInt1436;
+    public int fieldInt1437;
+    public int fieldInt1438;
+    public int fieldInt1439;
+    public int fieldInt1440;
+    public int fieldInt1441;
+    public int fieldInt1442;
+    public int fieldInt1443;
+    public int fieldInt1444;
+    public int fieldInt1445;
+    public int fieldInt1446;
+    public int fieldInt1447;
+    public int fieldInt1448;
+    public int fieldInt1449;
+    public int fieldInt1450;
+    public int fieldInt1451;
+    public int fieldInt1452;
+    public int fieldInt1453;
+    public int fieldInt1454;
+    public int fieldInt1455;
+    public int fieldInt1456;
+    public int fieldInt1457;
+    public int fieldInt1458;
+    public int fieldInt1459;
+    public int fieldInt1460;
+    public int fieldInt1461;
+    public int fieldInt1462;
+    public int fieldInt1463;
+    public int fieldInt1464;
+    public int fieldInt1465;
+    public int fieldInt1466;
+    public int fieldInt1467;
+    public int fieldInt1468;
+    public int fieldInt1469;
+    public int fieldInt1470;
+    public int fieldInt1471;
+    public int fieldInt1472;
+    public int fieldInt1473;
+    public int fieldInt1474;
+    public int fieldInt1475;
+    public int fieldInt1476;
+    public int fieldInt1477;
+    public int fieldInt1478;
+    public int fieldInt1479;
+    public int fieldInt1480;
+    public int fieldInt1481;
+    public int fieldInt1482;
+    public int fieldInt1483;
+    public int fieldInt1484;
+    public int fieldInt1485;
+    public int fieldInt1486;
+    public int fieldInt1487;
+    public int fieldInt1488;
+    public int fieldInt1489;
+    public int fieldInt1490;
+    public int fieldInt1491;
+    public int fieldInt1492;
+    public int fieldInt1493;
+    public int fieldInt1494;
+    public int fieldInt1495;
+    public int fieldInt1496;
+    public int fieldInt1497;
+    public int fieldInt1498;
+    public int fieldInt1499;
+    public int fieldInt1500;
+    public int fieldInt1501;
+    public int fieldInt1502;
+    public int fieldInt1503;
+    public int fieldInt1504;
+    public int fieldInt1505;
+    public int fieldInt1506;
+    public int fieldInt1507;
+    public int fieldInt1508;
+    public int fieldInt1509;
+    public int fieldInt1510;
+    public int fieldInt1511;
+    public int fieldInt1512;
+    public int fieldInt1513;
+    public int fieldInt1514;
+    public int fieldInt1515;
+    public int fieldInt1516;
+    public int fieldInt1517;
+    public int fieldInt1518;
+    public int fieldInt1519;
+    public int fieldInt1520;
+    public int fieldInt1521;
+    public int fieldInt1522;
+    public int fieldInt1523;
+    public int fieldInt1524;
+    public int fieldInt1525;
+    public int fieldInt1526;
+    public int fieldInt1527;
+    public int fieldInt1528;
+    public int fieldInt1529;
+    public int fieldInt1530;
+    public int fieldInt1531;
+    public int fieldInt1532;
+    public int fieldInt1533;
+    public int fieldInt1534;
+    public int fieldInt1535;
+    public int fieldInt1536;
+    public int fieldInt1537;
+    public int fieldInt1538;
+    public int fieldInt1539;
+    public int fieldInt1540;
+    public int fieldInt1541;
+    public int fieldInt1542;
+    public int fieldInt1543;
+    public int fieldInt1544;
+    public int fieldInt1545;
+    public int fieldInt1546;
+    public int fieldInt1547;
+    public int fieldInt1548;
+    public int fieldInt1549;
+    public int fieldInt1550;
+    public int fieldInt1551;
+    public int fieldInt1552;
+    public int fieldInt1553;
+    public int fieldInt1554;
+    public int fieldInt1555;
+    public int fieldInt1556;
+    public int fieldInt1557;
+    public int fieldInt1558;
+    public int fieldInt1559;
+    public int fieldInt1560;
+    public int fieldInt1561;
+    public int fieldInt1562;
+    public int fieldInt1563;
+    public int fieldInt1564;
+    public int fieldInt1565;
+    public int fieldInt1566;
+    public int fieldInt1567;
+    public int fieldInt1568;
+    public int fieldInt1569;
+    public int fieldInt1570;
+    public int fieldInt1571;
+    public int fieldInt1572;
+    public int fieldInt1573;
+    public int fieldInt1574;
+    public int fieldInt1575;
+    public int fieldInt1576;
+    public int fieldInt1577;
+    public int fieldInt1578;
+    public int fieldInt1579;
+    public int fieldInt1580;
+    public int fieldInt1581;
+    public int fieldInt1582;
+    public int fieldInt1583;
+    public int fieldInt1584;
+    public int fieldInt1585;
+    public int fieldInt1586;
+    public int fieldInt1587;
+    public int fieldInt1588;
+    public int fieldInt1589;
+    public int fieldInt1590;
+    public int fieldInt1591;
+    public int fieldInt1592;
+    public int fieldInt1593;
+    public int fieldInt1594;
+    public int fieldInt1595;
+    public int fieldInt1596;
+    public int fieldInt1597;
+    public int fieldInt1598;
+    public int fieldInt1599;
+    public int fieldInt1600;
+    public int fieldInt1601;
+    public int fieldInt1602;
+    public int fieldInt1603;
+    public int fieldInt1604;
+    public int fieldInt1605;
+    public int fieldInt1606;
+    public int fieldInt1607;
+    public int fieldInt1608;
+    public int fieldInt1609;
+    public int fieldInt1610;
+    public int fieldInt1611;
+    public int fieldInt1612;
+    public int fieldInt1613;
+    public int fieldInt1614;
+    public int fieldInt1615;
+    public int fieldInt1616;
+    public int fieldInt1617;
+    public int fieldInt1618;
+    public int fieldInt1619;
+    public int fieldInt1620;
+    public int fieldInt1621;
+    public int fieldInt1622;
+    public int fieldInt1623;
+    public int fieldInt1624;
+    public int fieldInt1625;
+    public int fieldInt1626;
+    public int fieldInt1627;
+    public int fieldInt1628;
+    public int fieldInt1629;
+    public int fieldInt1630;
+    public int fieldInt1631;
+    public int fieldInt1632;
+    public int fieldInt1633;
+    public int fieldInt1634;
+    public int fieldInt1635;
+    public int fieldInt1636;
+    public int fieldInt1637;
+    public int fieldInt1638;
+    public int fieldInt1639;
+    public int fieldInt1640;
+    public int fieldInt1641;
+    public int fieldInt1642;
+    public int fieldInt1643;
+    public int fieldInt1644;
+    public int fieldInt1645;
+    public int fieldInt1646;
+    public int fieldInt1647;
+    public int fieldInt1648;
+    public int fieldInt1649;
+    public int fieldInt1650;
+    public int fieldInt1651;
+    public int fieldInt1652;
+    public int fieldInt1653;
+    public int fieldInt1654;
+    public int fieldInt1655;
+    public int fieldInt1656;
+    public int fieldInt1657;
+    public int fieldInt1658;
+    public int fieldInt1659;
+    public int fieldInt1660;
+    public int fieldInt1661;
+    public int fieldInt1662;
+    public int fieldInt1663;
+    public int fieldInt1664;
+    public int fieldInt1665;
+    public int fieldInt1666;
+    public int fieldInt1667;
+    public int fieldInt1668;
+    public int fieldInt1669;
+    public int fieldInt1670;
+    public int fieldInt1671;
+    public int fieldInt1672;
+    public int fieldInt1673;
+    public int fieldInt1674;
+    public int fieldInt1675;
+    public int fieldInt1676;
+    public int fieldInt1677;
+    public int fieldInt1678;
+    public int fieldInt1679;
+    public int fieldInt1680;
+    public int fieldInt1681;
+    public int fieldInt1682;
+    public int fieldInt1683;
+    public int fieldInt1684;
+    public int fieldInt1685;
+    public int fieldInt1686;
+    public int fieldInt1687;
+    public int fieldInt1688;
+    public int fieldInt1689;
+    public int fieldInt1690;
+    public int fieldInt1691;
+    public int fieldInt1692;
+    public int fieldInt1693;
+    public int fieldInt1694;
+    public int fieldInt1695;
+    public int fieldInt1696;
+    public int fieldInt1697;
+    public int fieldInt1698;
+    public int fieldInt1699;
+    public int fieldInt1700;
+    public int fieldInt1701;
+    public int fieldInt1702;
+    public int fieldInt1703;
+    public int fieldInt1704;
+    public int fieldInt1705;
+    public int fieldInt1706;
+    public int fieldInt1707;
+    public int fieldInt1708;
+    public int fieldInt1709;
+    public int fieldInt1710;
+    public int fieldInt1711;
+    public int fieldInt1712;
+    public int fieldInt1713;
+    public int fieldInt1714;
+    public int fieldInt1715;
+    public int fieldInt1716;
+    public int fieldInt1717;
+    public int fieldInt1718;
+    public int fieldInt1719;
+    public int fieldInt1720;
+    public int fieldInt1721;
+    public int fieldInt1722;
+    public int fieldInt1723;
+    public int fieldInt1724;
+    public int fieldInt1725;
+    public int fieldInt1726;
+    public int fieldInt1727;
+    public int fieldInt1728;
+    public int fieldInt1729;
+    public int fieldInt1730;
+    public int fieldInt1731;
+    public int fieldInt1732;
+    public int fieldInt1733;
+    public int fieldInt1734;
+    public int fieldInt1735;
+    public int fieldInt1736;
+    public int fieldInt1737;
+    public int fieldInt1738;
+    public int fieldInt1739;
+    public int fieldInt1740;
+    public int fieldInt1741;
+    public int fieldInt1742;
+    public int fieldInt1743;
+    public int fieldInt1744;
+    public int fieldInt1745;
+    public int fieldInt1746;
+    public int fieldInt1747;
+    public int fieldInt1748;
+    public int fieldInt1749;
+    public int fieldInt1750;
+    public int fieldInt1751;
+    public int fieldInt1752;
+    public int fieldInt1753;
+    public int fieldInt1754;
+    public int fieldInt1755;
+    public int fieldInt1756;
+    public int fieldInt1757;
+    public int fieldInt1758;
+    public int fieldInt1759;
+    public int fieldInt1760;
+    public int fieldInt1761;
+    public int fieldInt1762;
+    public int fieldInt1763;
+    public int fieldInt1764;
+    public int fieldInt1765;
+    public int fieldInt1766;
+    public int fieldInt1767;
+    public int fieldInt1768;
+    public int fieldInt1769;
+    public int fieldInt1770;
+    public int fieldInt1771;
+    public int fieldInt1772;
+    public int fieldInt1773;
+    public int fieldInt1774;
+    public int fieldInt1775;
+    public int fieldInt1776;
+    public int fieldInt1777;
+    public int fieldInt1778;
+    public int fieldInt1779;
+    public int fieldInt1780;
+    public int fieldInt1781;
+    public int fieldInt1782;
+    public int fieldInt1783;
+    public int fieldInt1784;
+    public int fieldInt1785;
+    public int fieldInt1786;
+    public int fieldInt1787;
+    public int fieldInt1788;
+    public int fieldInt1789;
+    public int fieldInt1790;
+    public int fieldInt1791;
+    public int fieldInt1792;
+    public int fieldInt1793;
+    public int fieldInt1794;
+    public int fieldInt1795;
+    public int fieldInt1796;
+    public int fieldInt1797;
+    public int fieldInt1798;
+    public int fieldInt1799;
+    public int fieldInt1800;
+    public int fieldInt1801;
+    public int fieldInt1802;
+    public int fieldInt1803;
+    public int fieldInt1804;
+    public int fieldInt1805;
+    public int fieldInt1806;
+    public int fieldInt1807;
+    public int fieldInt1808;
+    public int fieldInt1809;
+    public int fieldInt1810;
+    public int fieldInt1811;
+    public int fieldInt1812;
+    public int fieldInt1813;
+    public int fieldInt1814;
+    public int fieldInt1815;
+    public int fieldInt1816;
+    public int fieldInt1817;
+    public int fieldInt1818;
+    public int fieldInt1819;
+    public int fieldInt1820;
+    public int fieldInt1821;
+    public int fieldInt1822;
+    public int fieldInt1823;
+    public int fieldInt1824;
+    public int fieldInt1825;
+    public int fieldInt1826;
+    public int fieldInt1827;
+    public int fieldInt1828;
+    public int fieldInt1829;
+    public int fieldInt1830;
+    public int fieldInt1831;
+    public int fieldInt1832;
+    public int fieldInt1833;
+    public int fieldInt1834;
+    public int fieldInt1835;
+    public int fieldInt1836;
+    public int fieldInt1837;
+    public int fieldInt1838;
+    public int fieldInt1839;
+    public int fieldInt1840;
+    public int fieldInt1841;
+    public int fieldInt1842;
+    public int fieldInt1843;
+    public int fieldInt1844;
+    public int fieldInt1845;
+    public int fieldInt1846;
+    public int fieldInt1847;
+    public int fieldInt1848;
+    public int fieldInt1849;
+    public int fieldInt1850;
+    public int fieldInt1851;
+    public int fieldInt1852;
+    public int fieldInt1853;
+    public int fieldInt1854;
+    public int fieldInt1855;
+    public int fieldInt1856;
+    public int fieldInt1857;
+    public int fieldInt1858;
+    public int fieldInt1859;
+    public int fieldInt1860;
+    public int fieldInt1861;
+    public int fieldInt1862;
+    public int fieldInt1863;
+    public int fieldInt1864;
+    public int fieldInt1865;
+    public int fieldInt1866;
+    public int fieldInt1867;
+    public int fieldInt1868;
+    public int fieldInt1869;
+    public int fieldInt1870;
+    public int fieldInt1871;
+    public int fieldInt1872;
+    public int fieldInt1873;
+    public int fieldInt1874;
+    public int fieldInt1875;
+    public int fieldInt1876;
+    public int fieldInt1877;
+    public int fieldInt1878;
+    public int fieldInt1879;
+    public int fieldInt1880;
+    public int fieldInt1881;
+    public int fieldInt1882;
+    public int fieldInt1883;
+    public int fieldInt1884;
+    public int fieldInt1885;
+    public int fieldInt1886;
+    public int fieldInt1887;
+    public int fieldInt1888;
+    public int fieldInt1889;
+    public int fieldInt1890;
+    public int fieldInt1891;
+    public int fieldInt1892;
+    public int fieldInt1893;
+    public int fieldInt1894;
+    public int fieldInt1895;
+    public int fieldInt1896;
+    public int fieldInt1897;
+    public int fieldInt1898;
+    public int fieldInt1899;
+    public int fieldInt1900;
+    public int fieldInt1901;
+    public int fieldInt1902;
+    public int fieldInt1903;
+    public int fieldInt1904;
+    public int fieldInt1905;
+    public int fieldInt1906;
+    public int fieldInt1907;
+    public int fieldInt1908;
+    public int fieldInt1909;
+    public int fieldInt1910;
+    public int fieldInt1911;
+    public int fieldInt1912;
+    public int fieldInt1913;
+    public int fieldInt1914;
+    public int fieldInt1915;
+    public int fieldInt1916;
+    public int fieldInt1917;
+    public int fieldInt1918;
+    public int fieldInt1919;
+    public int fieldInt1920;
+    public int fieldInt1921;
+    public int fieldInt1922;
+    public int fieldInt1923;
+    public int fieldInt1924;
+    public int fieldInt1925;
+    public int fieldInt1926;
+    public int fieldInt1927;
+    public int fieldInt1928;
+    public int fieldInt1929;
+    public int fieldInt1930;
+    public int fieldInt1931;
+    public int fieldInt1932;
+    public int fieldInt1933;
+    public int fieldInt1934;
+    public int fieldInt1935;
+    public int fieldInt1936;
+    public int fieldInt1937;
+    public int fieldInt1938;
+    public int fieldInt1939;
+    public int fieldInt1940;
+    public int fieldInt1941;
+    public int fieldInt1942;
+    public int fieldInt1943;
+    public int fieldInt1944;
+    public int fieldInt1945;
+    public int fieldInt1946;
+    public int fieldInt1947;
+    public int fieldInt1948;
+    public int fieldInt1949;
+    public int fieldInt1950;
+    public int fieldInt1951;
+    public int fieldInt1952;
+    public int fieldInt1953;
+    public int fieldInt1954;
+    public int fieldInt1955;
+    public int fieldInt1956;
+    public int fieldInt1957;
+    public int fieldInt1958;
+    public int fieldInt1959;
+    public int fieldInt1960;
+    public int fieldInt1961;
+    public int fieldInt1962;
+    public int fieldInt1963;
+    public int fieldInt1964;
+    public int fieldInt1965;
+    public int fieldInt1966;
+    public int fieldInt1967;
+    public int fieldInt1968;
+    public int fieldInt1969;
+    public int fieldInt1970;
+    public int fieldInt1971;
+    public int fieldInt1972;
+    public int fieldInt1973;
+    public int fieldInt1974;
+    public int fieldInt1975;
+    public int fieldInt1976;
+    public int fieldInt1977;
+    public int fieldInt1978;
+    public int fieldInt1979;
+    public int fieldInt1980;
+    public int fieldInt1981;
+    public int fieldInt1982;
+    public int fieldInt1983;
+    public int fieldInt1984;
+    public int fieldInt1985;
+    public int fieldInt1986;
+    public int fieldInt1987;
+    public int fieldInt1988;
+    public int fieldInt1989;
+    public int fieldInt1990;
+    public int fieldInt1991;
+    public int fieldInt1992;
+    public int fieldInt1993;
+    public int fieldInt1994;
+    public int fieldInt1995;
+    public int fieldInt1996;
+    public int fieldInt1997;
+    public int fieldInt1998;
+    public int fieldInt1999;
+    public int fieldInt2000;
+    public int fieldInt2001;
+    public int fieldInt2002;
+    public int fieldInt2003;
+    public int fieldInt2004;
+    public int fieldInt2005;
+    public int fieldInt2006;
+    public int fieldInt2007;
+    public int fieldInt2008;
+    public int fieldInt2009;
+    public int fieldInt2010;
+    public int fieldInt2011;
+    public int fieldInt2012;
+    public int fieldInt2013;
+    public int fieldInt2014;
+    public int fieldInt2015;
+    public int fieldInt2016;
+    public int fieldInt2017;
+    public int fieldInt2018;
+    public int fieldInt2019;
+    public int fieldInt2020;
+    public int fieldInt2021;
+    public int fieldInt2022;
+    public int fieldInt2023;
+    public int fieldInt2024;
+    public int fieldInt2025;
+    public int fieldInt2026;
+    public int fieldInt2027;
+    public int fieldInt2028;
+    public int fieldInt2029;
+    public int fieldInt2030;
+    public int fieldInt2031;
+    public int fieldInt2032;
+    public int fieldInt2033;
+    public int fieldInt2034;
+    public int fieldInt2035;
+    public int fieldInt2036;
+    public int fieldInt2037;
+    public int fieldInt2038;
+    public int fieldInt2039;
+    public int fieldInt2040;
+    public int fieldInt2041;
+    public int fieldInt2042;
+    public int fieldInt2043;
+    public int fieldInt2044;
+    public int fieldInt2045;
+    public int fieldInt2046;
+    public int fieldInt2047;
+    public int fieldInt2048;
+    public int fieldInt2049;
+    public int fieldInt2050;
+    public int fieldInt2051;
+    public int fieldInt2052;
+    public int fieldInt2053;
+    public int fieldInt2054;
+    public int fieldInt2055;
+    public int fieldInt2056;
+    public int fieldInt2057;
+    public int fieldInt2058;
+    public int fieldInt2059;
+    public int fieldInt2060;
+    public int fieldInt2061;
+    public int fieldInt2062;
+    public int fieldInt2063;
+    public int fieldInt2064;
+    public int fieldInt2065;
+    public int fieldInt2066;
+    public int fieldInt2067;
+    public int fieldInt2068;
+    public int fieldInt2069;
+    public int fieldInt2070;
+    public int fieldInt2071;
+    public int fieldInt2072;
+    public int fieldInt2073;
+    public int fieldInt2074;
+    public int fieldInt2075;
+    public int fieldInt2076;
+    public int fieldInt2077;
+    public int fieldInt2078;
+    public int fieldInt2079;
+    public int fieldInt2080;
+    public int fieldInt2081;
+    public int fieldInt2082;
+    public int fieldInt2083;
+    public int fieldInt2084;
+    public int fieldInt2085;
+    public int fieldInt2086;
+    public int fieldInt2087;
+    public int fieldInt2088;
+    public int fieldInt2089;
+    public int fieldInt2090;
+    public int fieldInt2091;
+    public int fieldInt2092;
+    public int fieldInt2093;
+    public int fieldInt2094;
+    public int fieldInt2095;
+    public int fieldInt2096;
+    public int fieldInt2097;
+    public int fieldInt2098;
+    public int fieldInt2099;
+    public int fieldInt2100;
+    public int fieldInt2101;
+    public int fieldInt2102;
+    public int fieldInt2103;
+    public int fieldInt2104;
+    public int fieldInt2105;
+    public int fieldInt2106;
+    public int fieldInt2107;
+    public int fieldInt2108;
+    public int fieldInt2109;
+    public int fieldInt2110;
+    public int fieldInt2111;
+    public int fieldInt2112;
+    public int fieldInt2113;
+    public int fieldInt2114;
+    public int fieldInt2115;
+    public int fieldInt2116;
+    public int fieldInt2117;
+    public int fieldInt2118;
+    public int fieldInt2119;
+    public int fieldInt2120;
+    public int fieldInt2121;
+    public int fieldInt2122;
+    public int fieldInt2123;
+    public int fieldInt2124;
+    public int fieldInt2125;
+    public int fieldInt2126;
+    public int fieldInt2127;
+    public int fieldInt2128;
+    public int fieldInt2129;
+    public int fieldInt2130;
+    public int fieldInt2131;
+    public int fieldInt2132;
+    public int fieldInt2133;
+    public int fieldInt2134;
+    public int fieldInt2135;
+    public int fieldInt2136;
+    public int fieldInt2137;
+    public int fieldInt2138;
+    public int fieldInt2139;
+    public int fieldInt2140;
+    public int fieldInt2141;
+    public int fieldInt2142;
+    public int fieldInt2143;
+    public int fieldInt2144;
+    public int fieldInt2145;
+    public int fieldInt2146;
+    public int fieldInt2147;
+    public int fieldInt2148;
+    public int fieldInt2149;
+    public int fieldInt2150;
+    public int fieldInt2151;
+    public int fieldInt2152;
+    public int fieldInt2153;
+    public int fieldInt2154;
+    public int fieldInt2155;
+    public int fieldInt2156;
+    public int fieldInt2157;
+    public int fieldInt2158;
+    public int fieldInt2159;
+    public int fieldInt2160;
+    public int fieldInt2161;
+    public int fieldInt2162;
+    public int fieldInt2163;
+    public int fieldInt2164;
+    public int fieldInt2165;
+    public int fieldInt2166;
+    public int fieldInt2167;
+    public int fieldInt2168;
+    public int fieldInt2169;
+    public int fieldInt2170;
+    public int fieldInt2171;
+    public int fieldInt2172;
+    public int fieldInt2173;
+    public int fieldInt2174;
+    public int fieldInt2175;
+    public int fieldInt2176;
+    public int fieldInt2177;
+    public int fieldInt2178;
+    public int fieldInt2179;
+    public int fieldInt2180;
+    public int fieldInt2181;
+    public int fieldInt2182;
+    public int fieldInt2183;
+    public int fieldInt2184;
+    public int fieldInt2185;
+    public int fieldInt2186;
+    public int fieldInt2187;
+    public int fieldInt2188;
+    public int fieldInt2189;
+    public int fieldInt2190;
+    public int fieldInt2191;
+    public int fieldInt2192;
+    public int fieldInt2193;
+    public int fieldInt2194;
+    public int fieldInt2195;
+    public int fieldInt2196;
+    public int fieldInt2197;
+    public int fieldInt2198;
+    public int fieldInt2199;
+    public int fieldInt2200;
+    public int fieldInt2201;
+    public int fieldInt2202;
+    public int fieldInt2203;
+    public int fieldInt2204;
+    public int fieldInt2205;
+    public int fieldInt2206;
+    public int fieldInt2207;
+    public int fieldInt2208;
+    public int fieldInt2209;
+    public int fieldInt2210;
+    public int fieldInt2211;
+    public int fieldInt2212;
+    public int fieldInt2213;
+    public int fieldInt2214;
+    public int fieldInt2215;
+    public int fieldInt2216;
+    public int fieldInt2217;
+    public int fieldInt2218;
+    public int fieldInt2219;
+    public int fieldInt2220;
+    public int fieldInt2221;
+    public int fieldInt2222;
+    public int fieldInt2223;
+    public int fieldInt2224;
+    public int fieldInt2225;
+    public int fieldInt2226;
+    public int fieldInt2227;
+    public int fieldInt2228;
+    public int fieldInt2229;
+    public int fieldInt2230;
+    public int fieldInt2231;
+    public int fieldInt2232;
+    public int fieldInt2233;
+    public int fieldInt2234;
+    public int fieldInt2235;
+    public int fieldInt2236;
+    public int fieldInt2237;
+    public int fieldInt2238;
+    public int fieldInt2239;
+    public int fieldInt2240;
+    public int fieldInt2241;
+    public int fieldInt2242;
+    public int fieldInt2243;
+    public int fieldInt2244;
+    public int fieldInt2245;
+    public int fieldInt2246;
+    public int fieldInt2247;
+    public int fieldInt2248;
+    public int fieldInt2249;
+    public int fieldInt2250;
+    public int fieldInt2251;
+    public int fieldInt2252;
+    public int fieldInt2253;
+    public int fieldInt2254;
+    public int fieldInt2255;
+    public int fieldInt2256;
+    public int fieldInt2257;
+    public int fieldInt2258;
+    public int fieldInt2259;
+    public int fieldInt2260;
+    public int fieldInt2261;
+    public int fieldInt2262;
+    public int fieldInt2263;
+    public int fieldInt2264;
+    public int fieldInt2265;
+    public int fieldInt2266;
+    public int fieldInt2267;
+    public int fieldInt2268;
+    public int fieldInt2269;
+    public int fieldInt2270;
+    public int fieldInt2271;
+    public int fieldInt2272;
+    public int fieldInt2273;
+    public int fieldInt2274;
+    public int fieldInt2275;
+    public int fieldInt2276;
+    public int fieldInt2277;
+    public int fieldInt2278;
+    public int fieldInt2279;
+    public int fieldInt2280;
+    public int fieldInt2281;
+    public int fieldInt2282;
+    public int fieldInt2283;
+    public int fieldInt2284;
+    public int fieldInt2285;
+    public int fieldInt2286;
+    public int fieldInt2287;
+    public int fieldInt2288;
+    public int fieldInt2289;
+    public int fieldInt2290;
+    public int fieldInt2291;
+    public int fieldInt2292;
+    public int fieldInt2293;
+    public int fieldInt2294;
+    public int fieldInt2295;
+    public int fieldInt2296;
+    public int fieldInt2297;
+    public int fieldInt2298;
+    public int fieldInt2299;
+    public int fieldInt2300;
+    public int fieldInt2301;
+    public int fieldInt2302;
+    public int fieldInt2303;
+    public int fieldInt2304;
+    public int fieldInt2305;
+    public int fieldInt2306;
+    public int fieldInt2307;
+    public int fieldInt2308;
+    public int fieldInt2309;
+    public int fieldInt2310;
+    public int fieldInt2311;
+    public int fieldInt2312;
+    public int fieldInt2313;
+    public int fieldInt2314;
+    public int fieldInt2315;
+    public int fieldInt2316;
+    public int fieldInt2317;
+    public int fieldInt2318;
+    public int fieldInt2319;
+    public int fieldInt2320;
+    public int fieldInt2321;
+    public int fieldInt2322;
+    public int fieldInt2323;
+    public int fieldInt2324;
+    public int fieldInt2325;
+    public int fieldInt2326;
+    public int fieldInt2327;
+    public int fieldInt2328;
+    public int fieldInt2329;
+    public int fieldInt2330;
+    public int fieldInt2331;
+    public int fieldInt2332;
+    public int fieldInt2333;
+    public int fieldInt2334;
+    public int fieldInt2335;
+    public int fieldInt2336;
+    public int fieldInt2337;
+    public int fieldInt2338;
+    public int fieldInt2339;
+    public int fieldInt2340;
+    public int fieldInt2341;
+    public int fieldInt2342;
+    public int fieldInt2343;
+    public int fieldInt2344;
+    public int fieldInt2345;
+    public int fieldInt2346;
+    public int fieldInt2347;
+    public int fieldInt2348;
+    public int fieldInt2349;
+    public int fieldInt2350;
+    public int fieldInt2351;
+    public int fieldInt2352;
+    public int fieldInt2353;
+    public int fieldInt2354;
+    public int fieldInt2355;
+    public int fieldInt2356;
+    public int fieldInt2357;
+    public int fieldInt2358;
+    public int fieldInt2359;
+    public int fieldInt2360;
+    public int fieldInt2361;
+    public int fieldInt2362;
+    public int fieldInt2363;
+    public int fieldInt2364;
+    public int fieldInt2365;
+    public int fieldInt2366;
+    public int fieldInt2367;
+    public int fieldInt2368;
+    public int fieldInt2369;
+    public int fieldInt2370;
+    public int fieldInt2371;
+    public int fieldInt2372;
+    public int fieldInt2373;
+    public int fieldInt2374;
+    public int fieldInt2375;
+    public int fieldInt2376;
+    public int fieldInt2377;
+    public int fieldInt2378;
+    public int fieldInt2379;
+    public int fieldInt2380;
+    public int fieldInt2381;
+    public int fieldInt2382;
+    public int fieldInt2383;
+    public int fieldInt2384;
+    public int fieldInt2385;
+    public int fieldInt2386;
+    public int fieldInt2387;
+    public int fieldInt2388;
+    public int fieldInt2389;
+    public int fieldInt2390;
+    public int fieldInt2391;
+    public int fieldInt2392;
+    public int fieldInt2393;
+    public int fieldInt2394;
+    public int fieldInt2395;
+    public int fieldInt2396;
+    public int fieldInt2397;
+    public int fieldInt2398;
+    public int fieldInt2399;
+    public int fieldInt2400;
+    public int fieldInt2401;
+    public int fieldInt2402;
+    public int fieldInt2403;
+    public int fieldInt2404;
+    public int fieldInt2405;
+    public int fieldInt2406;
+    public int fieldInt2407;
+    public int fieldInt2408;
+    public int fieldInt2409;
+    public int fieldInt2410;
+    public int fieldInt2411;
+    public int fieldInt2412;
+    public int fieldInt2413;
+    public int fieldInt2414;
+    public int fieldInt2415;
+    public int fieldInt2416;
+    public int fieldInt2417;
+    public int fieldInt2418;
+    public int fieldInt2419;
+    public int fieldInt2420;
+    public int fieldInt2421;
+    public int fieldInt2422;
+    public int fieldInt2423;
+    public int fieldInt2424;
+    public int fieldInt2425;
+    public int fieldInt2426;
+    public int fieldInt2427;
+    public int fieldInt2428;
+    public int fieldInt2429;
+    public int fieldInt2430;
+    public int fieldInt2431;
+    public int fieldInt2432;
+    public int fieldInt2433;
+    public int fieldInt2434;
+    public int fieldInt2435;
+    public int fieldInt2436;
+    public int fieldInt2437;
+    public int fieldInt2438;
+    public int fieldInt2439;
+    public int fieldInt2440;
+    public int fieldInt2441;
+    public int fieldInt2442;
+    public int fieldInt2443;
+    public int fieldInt2444;
+    public int fieldInt2445;
+    public int fieldInt2446;
+    public int fieldInt2447;
+    public int fieldInt2448;
+    public int fieldInt2449;
+    public int fieldInt2450;
+    public int fieldInt2451;
+    public int fieldInt2452;
+    public int fieldInt2453;
+    public int fieldInt2454;
+    public int fieldInt2455;
+    public int fieldInt2456;
+    public int fieldInt2457;
+    public int fieldInt2458;
+    public int fieldInt2459;
+    public int fieldInt2460;
+    public int fieldInt2461;
+    public int fieldInt2462;
+    public int fieldInt2463;
+    public int fieldInt2464;
+    public int fieldInt2465;
+    public int fieldInt2466;
+    public int fieldInt2467;
+    public int fieldInt2468;
+    public int fieldInt2469;
+    public int fieldInt2470;
+    public int fieldInt2471;
+    public int fieldInt2472;
+    public int fieldInt2473;
+    public int fieldInt2474;
+    public int fieldInt2475;
+    public int fieldInt2476;
+    public int fieldInt2477;
+    public int fieldInt2478;
+    public int fieldInt2479;
+    public int fieldInt2480;
+    public int fieldInt2481;
+    public int fieldInt2482;
+    public int fieldInt2483;
+    public int fieldInt2484;
+    public int fieldInt2485;
+    public int fieldInt2486;
+    public int fieldInt2487;
+    public int fieldInt2488;
+    public int fieldInt2489;
+    public int fieldInt2490;
+    public int fieldInt2491;
+    public int fieldInt2492;
+    public int fieldInt2493;
+    public int fieldInt2494;
+    public int fieldInt2495;
+    public int fieldInt2496;
+    public int fieldInt2497;
+    public int fieldInt2498;
+    public int fieldInt2499;
+    public int fieldInt2500;
+    public int fieldInt2501;
+    public int fieldInt2502;
+    public int fieldInt2503;
+    public int fieldInt2504;
+    public int fieldInt2505;
+    public int fieldInt2506;
+    public int fieldInt2507;
+    public int fieldInt2508;
+    public int fieldInt2509;
+    public int fieldInt2510;
+    public int fieldInt2511;
+    public int fieldInt2512;
+    public int fieldInt2513;
+    public int fieldInt2514;
+    public int fieldInt2515;
+    public int fieldInt2516;
+    public int fieldInt2517;
+    public int fieldInt2518;
+    public int fieldInt2519;
+    public int fieldInt2520;
+    public int fieldInt2521;
+    public int fieldInt2522;
+    public int fieldInt2523;
+    public int fieldInt2524;
+    public int fieldInt2525;
+    public int fieldInt2526;
+    public int fieldInt2527;
+    public int fieldInt2528;
+    public int fieldInt2529;
+    public int fieldInt2530;
+    public int fieldInt2531;
+    public int fieldInt2532;
+    public int fieldInt2533;
+    public int fieldInt2534;
+    public int fieldInt2535;
+    public int fieldInt2536;
+    public int fieldInt2537;
+    public int fieldInt2538;
+    public int fieldInt2539;
+    public int fieldInt2540;
+    public int fieldInt2541;
+    public int fieldInt2542;
+    public int fieldInt2543;
+    public int fieldInt2544;
+    public int fieldInt2545;
+    public int fieldInt2546;
+    public int fieldInt2547;
+    public int fieldInt2548;
+    public int fieldInt2549;
+    public int fieldInt2550;
+    public int fieldInt2551;
+    public int fieldInt2552;
+    public int fieldInt2553;
+    public int fieldInt2554;
+    public int fieldInt2555;
+    public int fieldInt2556;
+    public int fieldInt2557;
+    public int fieldInt2558;
+    public int fieldInt2559;
+    public int fieldInt2560;
+    public int fieldInt2561;
+    public int fieldInt2562;
+    public int fieldInt2563;
+    public int fieldInt2564;
+    public int fieldInt2565;
+    public int fieldInt2566;
+    public int fieldInt2567;
+    public int fieldInt2568;
+    public int fieldInt2569;
+    public int fieldInt2570;
+    public int fieldInt2571;
+    public int fieldInt2572;
+    public int fieldInt2573;
+    public int fieldInt2574;
+    public int fieldInt2575;
+    public int fieldInt2576;
+    public int fieldInt2577;
+    public int fieldInt2578;
+    public int fieldInt2579;
+    public int fieldInt2580;
+    public int fieldInt2581;
+    public int fieldInt2582;
+    public int fieldInt2583;
+    public int fieldInt2584;
+    public int fieldInt2585;
+    public int fieldInt2586;
+    public int fieldInt2587;
+    public int fieldInt2588;
+    public int fieldInt2589;
+    public int fieldInt2590;
+    public int fieldInt2591;
+    public int fieldInt2592;
+    public int fieldInt2593;
+    public int fieldInt2594;
+    public int fieldInt2595;
+    public int fieldInt2596;
+    public int fieldInt2597;
+    public int fieldInt2598;
+    public int fieldInt2599;
+    public int fieldInt2600;
+    public int fieldInt2601;
+    public int fieldInt2602;
+    public int fieldInt2603;
+    public int fieldInt2604;
+    public int fieldInt2605;
+    public int fieldInt2606;
+    public int fieldInt2607;
+    public int fieldInt2608;
+    public int fieldInt2609;
+    public int fieldInt2610;
+    public int fieldInt2611;
+    public int fieldInt2612;
+    public int fieldInt2613;
+    public int fieldInt2614;
+    public int fieldInt2615;
+    public int fieldInt2616;
+    public int fieldInt2617;
+    public int fieldInt2618;
+    public int fieldInt2619;
+    public int fieldInt2620;
+    public int fieldInt2621;
+    public int fieldInt2622;
+    public int fieldInt2623;
+    public int fieldInt2624;
+    public int fieldInt2625;
+    public int fieldInt2626;
+    public int fieldInt2627;
+    public int fieldInt2628;
+    public int fieldInt2629;
+    public int fieldInt2630;
+    public int fieldInt2631;
+    public int fieldInt2632;
+    public int fieldInt2633;
+    public int fieldInt2634;
+    public int fieldInt2635;
+    public int fieldInt2636;
+    public int fieldInt2637;
+    public int fieldInt2638;
+    public int fieldInt2639;
+    public int fieldInt2640;
+    public int fieldInt2641;
+    public int fieldInt2642;
+    public int fieldInt2643;
+    public int fieldInt2644;
+    public int fieldInt2645;
+    public int fieldInt2646;
+    public int fieldInt2647;
+    public int fieldInt2648;
+    public int fieldInt2649;
+    public int fieldInt2650;
+    public int fieldInt2651;
+    public int fieldInt2652;
+    public int fieldInt2653;
+    public int fieldInt2654;
+    public int fieldInt2655;
+    public int fieldInt2656;
+    public int fieldInt2657;
+    public int fieldInt2658;
+    public int fieldInt2659;
+    public int fieldInt2660;
+    public int fieldInt2661;
+    public int fieldInt2662;
+    public int fieldInt2663;
+    public int fieldInt2664;
+    public int fieldInt2665;
+    public int fieldInt2666;
+    public int fieldInt2667;
+    public int fieldInt2668;
+    public int fieldInt2669;
+    public int fieldInt2670;
+    public int fieldInt2671;
+    public int fieldInt2672;
+    public int fieldInt2673;
+    public int fieldInt2674;
+    public int fieldInt2675;
+    public int fieldInt2676;
+    public int fieldInt2677;
+    public int fieldInt2678;
+    public int fieldInt2679;
+    public int fieldInt2680;
+    public int fieldInt2681;
+    public int fieldInt2682;
+    public int fieldInt2683;
+    public int fieldInt2684;
+    public int fieldInt2685;
+    public int fieldInt2686;
+    public int fieldInt2687;
+    public int fieldInt2688;
+    public int fieldInt2689;
+    public int fieldInt2690;
+    public int fieldInt2691;
+    public int fieldInt2692;
+    public int fieldInt2693;
+    public int fieldInt2694;
+    public int fieldInt2695;
+    public int fieldInt2696;
+    public int fieldInt2697;
+    public int fieldInt2698;
+    public int fieldInt2699;
+    public int fieldInt2700;
+    public int fieldInt2701;
+    public int fieldInt2702;
+    public int fieldInt2703;
+    public int fieldInt2704;
+    public int fieldInt2705;
+    public int fieldInt2706;
+    public int fieldInt2707;
+    public int fieldInt2708;
+    public int fieldInt2709;
+    public int fieldInt2710;
+    public int fieldInt2711;
+    public int fieldInt2712;
+    public int fieldInt2713;
+    public int fieldInt2714;
+    public int fieldInt2715;
+    public int fieldInt2716;
+    public int fieldInt2717;
+    public int fieldInt2718;
+    public int fieldInt2719;
+    public int fieldInt2720;
+    public int fieldInt2721;
+    public int fieldInt2722;
+    public int fieldInt2723;
+    public int fieldInt2724;
+    public int fieldInt2725;
+    public int fieldInt2726;
+    public int fieldInt2727;
+    public int fieldInt2728;
+    public int fieldInt2729;
+    public int fieldInt2730;
+    public int fieldInt2731;
+    public int fieldInt2732;
+    public int fieldInt2733;
+    public int fieldInt2734;
+    public int fieldInt2735;
+    public int fieldInt2736;
+    public int fieldInt2737;
+    public int fieldInt2738;
+    public int fieldInt2739;
+    public int fieldInt2740;
+    public int fieldInt2741;
+    public int fieldInt2742;
+    public int fieldInt2743;
+    public int fieldInt2744;
+    public int fieldInt2745;
+    public int fieldInt2746;
+    public int fieldInt2747;
+    public int fieldInt2748;
+    public int fieldInt2749;
+    public int fieldInt2750;
+    public int fieldInt2751;
+    public int fieldInt2752;
+    public int fieldInt2753;
+    public int fieldInt2754;
+    public int fieldInt2755;
+    public int fieldInt2756;
+    public int fieldInt2757;
+    public int fieldInt2758;
+    public int fieldInt2759;
+    public int fieldInt2760;
+    public int fieldInt2761;
+    public int fieldInt2762;
+    public int fieldInt2763;
+    public int fieldInt2764;
+    public int fieldInt2765;
+    public int fieldInt2766;
+    public int fieldInt2767;
+    public int fieldInt2768;
+    public int fieldInt2769;
+    public int fieldInt2770;
+    public int fieldInt2771;
+    public int fieldInt2772;
+    public int fieldInt2773;
+    public int fieldInt2774;
+    public int fieldInt2775;
+    public int fieldInt2776;
+    public int fieldInt2777;
+    public int fieldInt2778;
+    public int fieldInt2779;
+    public int fieldInt2780;
+    public int fieldInt2781;
+    public int fieldInt2782;
+    public int fieldInt2783;
+    public int fieldInt2784;
+    public int fieldInt2785;
+    public int fieldInt2786;
+    public int fieldInt2787;
+    public int fieldInt2788;
+    public int fieldInt2789;
+    public int fieldInt2790;
+    public int fieldInt2791;
+    public int fieldInt2792;
+    public int fieldInt2793;
+    public int fieldInt2794;
+    public int fieldInt2795;
+    public int fieldInt2796;
+    public int fieldInt2797;
+    public int fieldInt2798;
+    public int fieldInt2799;
+    public int fieldInt2800;
+    public int fieldInt2801;
+    public int fieldInt2802;
+    public int fieldInt2803;
+    public int fieldInt2804;
+    public int fieldInt2805;
+    public int fieldInt2806;
+    public int fieldInt2807;
+    public int fieldInt2808;
+    public int fieldInt2809;
+    public int fieldInt2810;
+    public int fieldInt2811;
+    public int fieldInt2812;
+    public int fieldInt2813;
+    public int fieldInt2814;
+    public int fieldInt2815;
+    public int fieldInt2816;
+    public int fieldInt2817;
+    public int fieldInt2818;
+    public int fieldInt2819;
+    public int fieldInt2820;
+    public int fieldInt2821;
+    public int fieldInt2822;
+    public int fieldInt2823;
+    public int fieldInt2824;
+    public int fieldInt2825;
+    public int fieldInt2826;
+    public int fieldInt2827;
+    public int fieldInt2828;
+    public int fieldInt2829;
+    public int fieldInt2830;
+    public int fieldInt2831;
+    public int fieldInt2832;
+    public int fieldInt2833;
+    public int fieldInt2834;
+    public int fieldInt2835;
+    public int fieldInt2836;
+    public int fieldInt2837;
+    public int fieldInt2838;
+    public int fieldInt2839;
+    public int fieldInt2840;
+    public int fieldInt2841;
+    public int fieldInt2842;
+    public int fieldInt2843;
+    public int fieldInt2844;
+    public int fieldInt2845;
+    public int fieldInt2846;
+    public int fieldInt2847;
+    public int fieldInt2848;
+    public int fieldInt2849;
+    public int fieldInt2850;
+    public int fieldInt2851;
+    public int fieldInt2852;
+    public int fieldInt2853;
+    public int fieldInt2854;
+    public int fieldInt2855;
+    public int fieldInt2856;
+    public int fieldInt2857;
+    public int fieldInt2858;
+    public int fieldInt2859;
+    public int fieldInt2860;
+    public int fieldInt2861;
+    public int fieldInt2862;
+    public int fieldInt2863;
+    public int fieldInt2864;
+    public int fieldInt2865;
+    public int fieldInt2866;
+    public int fieldInt2867;
+    public int fieldInt2868;
+    public int fieldInt2869;
+    public int fieldInt2870;
+    public int fieldInt2871;
+    public int fieldInt2872;
+    public int fieldInt2873;
+    public int fieldInt2874;
+    public int fieldInt2875;
+    public int fieldInt2876;
+    public int fieldInt2877;
+    public int fieldInt2878;
+    public int fieldInt2879;
+    public int fieldInt2880;
+    public int fieldInt2881;
+    public int fieldInt2882;
+    public int fieldInt2883;
+    public int fieldInt2884;
+    public int fieldInt2885;
+    public int fieldInt2886;
+    public int fieldInt2887;
+    public int fieldInt2888;
+    public int fieldInt2889;
+    public int fieldInt2890;
+    public int fieldInt2891;
+    public int fieldInt2892;
+    public int fieldInt2893;
+    public int fieldInt2894;
+    public int fieldInt2895;
+    public int fieldInt2896;
+    public int fieldInt2897;
+    public int fieldInt2898;
+    public int fieldInt2899;
+    public int fieldInt2900;
+    public int fieldInt2901;
+    public int fieldInt2902;
+    public int fieldInt2903;
+    public int fieldInt2904;
+    public int fieldInt2905;
+    public int fieldInt2906;
+    public int fieldInt2907;
+    public int fieldInt2908;
+    public int fieldInt2909;
+    public int fieldInt2910;
+    public int fieldInt2911;
+    public int fieldInt2912;
+    public int fieldInt2913;
+    public int fieldInt2914;
+    public int fieldInt2915;
+    public int fieldInt2916;
+    public int fieldInt2917;
+    public int fieldInt2918;
+    public int fieldInt2919;
+    public int fieldInt2920;
+    public int fieldInt2921;
+    public int fieldInt2922;
+    public int fieldInt2923;
+    public int fieldInt2924;
+    public int fieldInt2925;
+    public int fieldInt2926;
+    public int fieldInt2927;
+    public int fieldInt2928;
+    public int fieldInt2929;
+    public int fieldInt2930;
+    public int fieldInt2931;
+    public int fieldInt2932;
+    public int fieldInt2933;
+    public int fieldInt2934;
+    public int fieldInt2935;
+    public int fieldInt2936;
+    public int fieldInt2937;
+    public int fieldInt2938;
+    public int fieldInt2939;
+    public int fieldInt2940;
+    public int fieldInt2941;
+    public int fieldInt2942;
+    public int fieldInt2943;
+    public int fieldInt2944;
+    public int fieldInt2945;
+    public int fieldInt2946;
+    public int fieldInt2947;
+    public int fieldInt2948;
+    public int fieldInt2949;
+    public int fieldInt2950;
+    public int fieldInt2951;
+    public int fieldInt2952;
+    public int fieldInt2953;
+    public int fieldInt2954;
+    public int fieldInt2955;
+    public int fieldInt2956;
+    public int fieldInt2957;
+    public int fieldInt2958;
+    public int fieldInt2959;
+    public int fieldInt2960;
+    public int fieldInt2961;
+    public int fieldInt2962;
+    public int fieldInt2963;
+    public int fieldInt2964;
+    public int fieldInt2965;
+    public int fieldInt2966;
+    public int fieldInt2967;
+    public int fieldInt2968;
+    public int fieldInt2969;
+    public int fieldInt2970;
+    public int fieldInt2971;
+    public int fieldInt2972;
+    public int fieldInt2973;
+    public int fieldInt2974;
+    public int fieldInt2975;
+    public int fieldInt2976;
+    public int fieldInt2977;
+    public int fieldInt2978;
+    public int fieldInt2979;
+    public int fieldInt2980;
+    public int fieldInt2981;
+    public int fieldInt2982;
+    public int fieldInt2983;
+    public int fieldInt2984;
+    public int fieldInt2985;
+    public int fieldInt2986;
+    public int fieldInt2987;
+    public int fieldInt2988;
+    public int fieldInt2989;
+    public int fieldInt2990;
+    public int fieldInt2991;
+    public int fieldInt2992;
+    public int fieldInt2993;
+    public int fieldInt2994;
+    public int fieldInt2995;
+    public int fieldInt2996;
+    public int fieldInt2997;
+    public int fieldInt2998;
+    public int fieldInt2999;
+    public int fieldInt3000;
+    public int fieldInt3001;
+    public int fieldInt3002;
+    public int fieldInt3003;
+    public int fieldInt3004;
+    public int fieldInt3005;
+    public int fieldInt3006;
+    public int fieldInt3007;
+    public int fieldInt3008;
+    public int fieldInt3009;
+    public int fieldInt3010;
+    public int fieldInt3011;
+    public int fieldInt3012;
+    public int fieldInt3013;
+    public int fieldInt3014;
+    public int fieldInt3015;
+    public int fieldInt3016;
+    public int fieldInt3017;
+    public int fieldInt3018;
+    public int fieldInt3019;
+    public int fieldInt3020;
+    public int fieldInt3021;
+    public int fieldInt3022;
+    public int fieldInt3023;
+    public int fieldInt3024;
+    public int fieldInt3025;
+    public int fieldInt3026;
+    public int fieldInt3027;
+    public int fieldInt3028;
+    public int fieldInt3029;
+    public int fieldInt3030;
+    public int fieldInt3031;
+    public int fieldInt3032;
+    public int fieldInt3033;
+    public int fieldInt3034;
+    public int fieldInt3035;
+    public int fieldInt3036;
+    public int fieldInt3037;
+    public int fieldInt3038;
+    public int fieldInt3039;
+    public int fieldInt3040;
+    public int fieldInt3041;
+    public int fieldInt3042;
+    public int fieldInt3043;
+    public int fieldInt3044;
+    public int fieldInt3045;
+    public int fieldInt3046;
+    public int fieldInt3047;
+    public int fieldInt3048;
+    public int fieldInt3049;
+    public int fieldInt3050;
+    public int fieldInt3051;
+    public int fieldInt3052;
+    public int fieldInt3053;
+    public int fieldInt3054;
+    public int fieldInt3055;
+    public int fieldInt3056;
+    public int fieldInt3057;
+    public int fieldInt3058;
+    public int fieldInt3059;
+    public int fieldInt3060;
+    public int fieldInt3061;
+    public int fieldInt3062;
+    public int fieldInt3063;
+    public int fieldInt3064;
+    public int fieldInt3065;
+    public int fieldInt3066;
+    public int fieldInt3067;
+    public int fieldInt3068;
+    public int fieldInt3069;
+    public int fieldInt3070;
+    public int fieldInt3071;
+    public int fieldInt3072;
+    public int fieldInt3073;
+    public int fieldInt3074;
+    public int fieldInt3075;
+    public int fieldInt3076;
+    public int fieldInt3077;
+    public int fieldInt3078;
+    public int fieldInt3079;
+    public int fieldInt3080;
+    public int fieldInt3081;
+    public int fieldInt3082;
+    public int fieldInt3083;
+    public int fieldInt3084;
+    public int fieldInt3085;
+    public int fieldInt3086;
+    public int fieldInt3087;
+    public int fieldInt3088;
+    public int fieldInt3089;
+    public int fieldInt3090;
+    public int fieldInt3091;
+    public int fieldInt3092;
+    public int fieldInt3093;
+    public int fieldInt3094;
+    public int fieldInt3095;
+    public int fieldInt3096;
+    public int fieldInt3097;
+    public int fieldInt3098;
+    public int fieldInt3099;
+    public int fieldInt3100;
+    public int fieldInt3101;
+    public int fieldInt3102;
+    public int fieldInt3103;
+    public int fieldInt3104;
+    public int fieldInt3105;
+    public int fieldInt3106;
+    public int fieldInt3107;
+    public int fieldInt3108;
+    public int fieldInt3109;
+    public int fieldInt3110;
+    public int fieldInt3111;
+    public int fieldInt3112;
+    public int fieldInt3113;
+    public int fieldInt3114;
+    public int fieldInt3115;
+    public int fieldInt3116;
+    public int fieldInt3117;
+    public int fieldInt3118;
+    public int fieldInt3119;
+    public int fieldInt3120;
+    public int fieldInt3121;
+    public int fieldInt3122;
+    public int fieldInt3123;
+    public int fieldInt3124;
+    public int fieldInt3125;
+    public int fieldInt3126;
+    public int fieldInt3127;
+    public int fieldInt3128;
+    public int fieldInt3129;
+    public int fieldInt3130;
+    public int fieldInt3131;
+    public int fieldInt3132;
+    public int fieldInt3133;
+    public int fieldInt3134;
+    public int fieldInt3135;
+    public int fieldInt3136;
+    public int fieldInt3137;
+    public int fieldInt3138;
+    public int fieldInt3139;
+    public int fieldInt3140;
+    public int fieldInt3141;
+    public int fieldInt3142;
+    public int fieldInt3143;
+    public int fieldInt3144;
+    public int fieldInt3145;
+    public int fieldInt3146;
+    public int fieldInt3147;
+    public int fieldInt3148;
+    public int fieldInt3149;
+    public int fieldInt3150;
+    public int fieldInt3151;
+    public int fieldInt3152;
+    public int fieldInt3153;
+    public int fieldInt3154;
+    public int fieldInt3155;
+    public int fieldInt3156;
+    public int fieldInt3157;
+    public int fieldInt3158;
+    public int fieldInt3159;
+    public int fieldInt3160;
+    public int fieldInt3161;
+    public int fieldInt3162;
+    public int fieldInt3163;
+    public int fieldInt3164;
+    public int fieldInt3165;
+    public int fieldInt3166;
+    public int fieldInt3167;
+    public int fieldInt3168;
+    public int fieldInt3169;
+    public int fieldInt3170;
+    public int fieldInt3171;
+    public int fieldInt3172;
+    public int fieldInt3173;
+    public int fieldInt3174;
+    public int fieldInt3175;
+    public int fieldInt3176;
+    public int fieldInt3177;
+    public int fieldInt3178;
+    public int fieldInt3179;
+    public int fieldInt3180;
+    public int fieldInt3181;
+    public int fieldInt3182;
+    public int fieldInt3183;
+    public int fieldInt3184;
+    public int fieldInt3185;
+    public int fieldInt3186;
+    public int fieldInt3187;
+    public int fieldInt3188;
+    public int fieldInt3189;
+    public int fieldInt3190;
+    public int fieldInt3191;
+    public int fieldInt3192;
+    public int fieldInt3193;
+    public int fieldInt3194;
+    public int fieldInt3195;
+    public int fieldInt3196;
+    public int fieldInt3197;
+    public int fieldInt3198;
+    public int fieldInt3199;
+    public int fieldInt3200;
+    public int fieldInt3201;
+    public int fieldInt3202;
+    public int fieldInt3203;
+    public int fieldInt3204;
+    public int fieldInt3205;
+    public int fieldInt3206;
+    public int fieldInt3207;
+    public int fieldInt3208;
+    public int fieldInt3209;
+    public int fieldInt3210;
+    public int fieldInt3211;
+    public int fieldInt3212;
+    public int fieldInt3213;
+    public int fieldInt3214;
+    public int fieldInt3215;
+    public int fieldInt3216;
+    public int fieldInt3217;
+    public int fieldInt3218;
+    public int fieldInt3219;
+    public int fieldInt3220;
+    public int fieldInt3221;
+    public int fieldInt3222;
+    public int fieldInt3223;
+    public int fieldInt3224;
+    public int fieldInt3225;
+    public int fieldInt3226;
+    public int fieldInt3227;
+    public int fieldInt3228;
+    public int fieldInt3229;
+    public int fieldInt3230;
+    public int fieldInt3231;
+    public int fieldInt3232;
+    public int fieldInt3233;
+    public int fieldInt3234;
+    public int fieldInt3235;
+    public int fieldInt3236;
+    public int fieldInt3237;
+    public int fieldInt3238;
+    public int fieldInt3239;
+    public int fieldInt3240;
+    public int fieldInt3241;
+    public int fieldInt3242;
+    public int fieldInt3243;
+    public int fieldInt3244;
+    public int fieldInt3245;
+    public int fieldInt3246;
+    public int fieldInt3247;
+    public int fieldInt3248;
+    public int fieldInt3249;
+    public int fieldInt3250;
+    public int fieldInt3251;
+    public int fieldInt3252;
+    public int fieldInt3253;
+    public int fieldInt3254;
+    public int fieldInt3255;
+    public int fieldInt3256;
+    public int fieldInt3257;
+    public int fieldInt3258;
+    public int fieldInt3259;
+    public int fieldInt3260;
+    public int fieldInt3261;
+    public int fieldInt3262;
+    public int fieldInt3263;
+    public int fieldInt3264;
+    public int fieldInt3265;
+    public int fieldInt3266;
+    public int fieldInt3267;
+    public int fieldInt3268;
+    public int fieldInt3269;
+    public int fieldInt3270;
+    public int fieldInt3271;
+    public int fieldInt3272;
+    public int fieldInt3273;
+    public int fieldInt3274;
+    public int fieldInt3275;
+    public int fieldInt3276;
+    public int fieldInt3277;
+    public int fieldInt3278;
+    public int fieldInt3279;
+    public int fieldInt3280;
+    public int fieldInt3281;
+    public int fieldInt3282;
+    public int fieldInt3283;
+    public int fieldInt3284;
+    public int fieldInt3285;
+    public int fieldInt3286;
+    public int fieldInt3287;
+    public int fieldInt3288;
+    public int fieldInt3289;
+    public int fieldInt3290;
+    public int fieldInt3291;
+    public int fieldInt3292;
+    public int fieldInt3293;
+    public int fieldInt3294;
+    public int fieldInt3295;
+    public int fieldInt3296;
+    public int fieldInt3297;
+    public int fieldInt3298;
+    public int fieldInt3299;
+    public int fieldInt3300;
+    public int fieldInt3301;
+    public int fieldInt3302;
+    public int fieldInt3303;
+    public int fieldInt3304;
+    public int fieldInt3305;
+    public int fieldInt3306;
+    public int fieldInt3307;
+    public int fieldInt3308;
+    public int fieldInt3309;
+    public int fieldInt3310;
+    public int fieldInt3311;
+    public int fieldInt3312;
+    public int fieldInt3313;
+    public int fieldInt3314;
+    public int fieldInt3315;
+    public int fieldInt3316;
+    public int fieldInt3317;
+    public int fieldInt3318;
+    public int fieldInt3319;
+    public int fieldInt3320;
+    public int fieldInt3321;
+    public int fieldInt3322;
+    public int fieldInt3323;
+    public int fieldInt3324;
+    public int fieldInt3325;
+    public int fieldInt3326;
+    public int fieldInt3327;
+    public int fieldInt3328;
+    public int fieldInt3329;
+    public int fieldInt3330;
+    public int fieldInt3331;
+    public int fieldInt3332;
+    public int fieldInt3333;
+    public int fieldInt3334;
+    public int fieldInt3335;
+    public int fieldInt3336;
+    public int fieldInt3337;
+    public int fieldInt3338;
+    public int fieldInt3339;
+    public int fieldInt3340;
+    public int fieldInt3341;
+    public int fieldInt3342;
+    public int fieldInt3343;
+    public int fieldInt3344;
+    public int fieldInt3345;
+    public int fieldInt3346;
+    public int fieldInt3347;
+    public int fieldInt3348;
+    public int fieldInt3349;
+    public int fieldInt3350;
+    public int fieldInt3351;
+    public int fieldInt3352;
+    public int fieldInt3353;
+    public int fieldInt3354;
+    public int fieldInt3355;
+    public int fieldInt3356;
+    public int fieldInt3357;
+    public int fieldInt3358;
+    public int fieldInt3359;
+    public int fieldInt3360;
+    public int fieldInt3361;
+    public int fieldInt3362;
+    public int fieldInt3363;
+    public int fieldInt3364;
+    public int fieldInt3365;
+    public int fieldInt3366;
+    public int fieldInt3367;
+    public int fieldInt3368;
+    public int fieldInt3369;
+    public int fieldInt3370;
+    public int fieldInt3371;
+    public int fieldInt3372;
+    public int fieldInt3373;
+    public int fieldInt3374;
+    public int fieldInt3375;
+    public int fieldInt3376;
+    public int fieldInt3377;
+    public int fieldInt3378;
+    public int fieldInt3379;
+    public int fieldInt3380;
+    public int fieldInt3381;
+    public int fieldInt3382;
+    public int fieldInt3383;
+    public int fieldInt3384;
+    public int fieldInt3385;
+    public int fieldInt3386;
+    public int fieldInt3387;
+    public int fieldInt3388;
+    public int fieldInt3389;
+    public int fieldInt3390;
+    public int fieldInt3391;
+    public int fieldInt3392;
+    public int fieldInt3393;
+    public int fieldInt3394;
+    public int fieldInt3395;
+    public int fieldInt3396;
+    public int fieldInt3397;
+    public int fieldInt3398;
+    public int fieldInt3399;
+    public int fieldInt3400;
+    public int fieldInt3401;
+    public int fieldInt3402;
+    public int fieldInt3403;
+    public int fieldInt3404;
+    public int fieldInt3405;
+    public int fieldInt3406;
+    public int fieldInt3407;
+    public int fieldInt3408;
+    public int fieldInt3409;
+    public int fieldInt3410;
+    public int fieldInt3411;
+    public int fieldInt3412;
+    public int fieldInt3413;
+    public int fieldInt3414;
+    public int fieldInt3415;
+    public int fieldInt3416;
+    public int fieldInt3417;
+    public int fieldInt3418;
+    public int fieldInt3419;
+    public int fieldInt3420;
+    public int fieldInt3421;
+    public int fieldInt3422;
+    public int fieldInt3423;
+    public int fieldInt3424;
+    public int fieldInt3425;
+    public int fieldInt3426;
+    public int fieldInt3427;
+    public int fieldInt3428;
+    public int fieldInt3429;
+    public int fieldInt3430;
+    public int fieldInt3431;
+    public int fieldInt3432;
+    public int fieldInt3433;
+    public int fieldInt3434;
+    public int fieldInt3435;
+    public int fieldInt3436;
+    public int fieldInt3437;
+    public int fieldInt3438;
+    public int fieldInt3439;
+    public int fieldInt3440;
+    public int fieldInt3441;
+    public int fieldInt3442;
+    public int fieldInt3443;
+    public int fieldInt3444;
+    public int fieldInt3445;
+    public int fieldInt3446;
+    public int fieldInt3447;
+    public int fieldInt3448;
+    public int fieldInt3449;
+    public int fieldInt3450;
+    public int fieldInt3451;
+    public int fieldInt3452;
+    public int fieldInt3453;
+    public int fieldInt3454;
+    public int fieldInt3455;
+    public int fieldInt3456;
+    public int fieldInt3457;
+    public int fieldInt3458;
+    public int fieldInt3459;
+    public int fieldInt3460;
+    public int fieldInt3461;
+    public int fieldInt3462;
+    public int fieldInt3463;
+    public int fieldInt3464;
+    public int fieldInt3465;
+    public int fieldInt3466;
+    public int fieldInt3467;
+    public int fieldInt3468;
+    public int fieldInt3469;
+    public int fieldInt3470;
+    public int fieldInt3471;
+    public int fieldInt3472;
+    public int fieldInt3473;
+    public int fieldInt3474;
+    public int fieldInt3475;
+    public int fieldInt3476;
+    public int fieldInt3477;
+    public int fieldInt3478;
+    public int fieldInt3479;
+    public int fieldInt3480;
+    public int fieldInt3481;
+    public int fieldInt3482;
+    public int fieldInt3483;
+    public int fieldInt3484;
+    public int fieldInt3485;
+    public int fieldInt3486;
+    public int fieldInt3487;
+    public int fieldInt3488;
+    public int fieldInt3489;
+    public int fieldInt3490;
+    public int fieldInt3491;
+    public int fieldInt3492;
+    public int fieldInt3493;
+    public int fieldInt3494;
+    public int fieldInt3495;
+    public int fieldInt3496;
+    public int fieldInt3497;
+    public int fieldInt3498;
+    public int fieldInt3499;
+    public int fieldInt3500;
+    public int fieldInt3501;
+    public int fieldInt3502;
+    public int fieldInt3503;
+    public int fieldInt3504;
+    public int fieldInt3505;
+    public int fieldInt3506;
+    public int fieldInt3507;
+    public int fieldInt3508;
+    public int fieldInt3509;
+    public int fieldInt3510;
+    public int fieldInt3511;
+    public int fieldInt3512;
+    public int fieldInt3513;
+    public int fieldInt3514;
+    public int fieldInt3515;
+    public int fieldInt3516;
+    public int fieldInt3517;
+    public int fieldInt3518;
+    public int fieldInt3519;
+    public int fieldInt3520;
+    public int fieldInt3521;
+    public int fieldInt3522;
+    public int fieldInt3523;
+    public int fieldInt3524;
+    public int fieldInt3525;
+    public int fieldInt3526;
+    public int fieldInt3527;
+    public int fieldInt3528;
+    public int fieldInt3529;
+    public int fieldInt3530;
+    public int fieldInt3531;
+    public int fieldInt3532;
+    public int fieldInt3533;
+    public int fieldInt3534;
+    public int fieldInt3535;
+    public int fieldInt3536;
+    public int fieldInt3537;
+    public int fieldInt3538;
+    public int fieldInt3539;
+    public int fieldInt3540;
+    public int fieldInt3541;
+    public int fieldInt3542;
+    public int fieldInt3543;
+    public int fieldInt3544;
+    public int fieldInt3545;
+    public int fieldInt3546;
+    public int fieldInt3547;
+    public int fieldInt3548;
+    public int fieldInt3549;
+    public int fieldInt3550;
+    public int fieldInt3551;
+    public int fieldInt3552;
+    public int fieldInt3553;
+    public int fieldInt3554;
+    public int fieldInt3555;
+    public int fieldInt3556;
+    public int fieldInt3557;
+    public int fieldInt3558;
+    public int fieldInt3559;
+    public int fieldInt3560;
+    public int fieldInt3561;
+    public int fieldInt3562;
+    public int fieldInt3563;
+    public int fieldInt3564;
+    public int fieldInt3565;
+    public int fieldInt3566;
+    public int fieldInt3567;
+    public int fieldInt3568;
+    public int fieldInt3569;
+    public int fieldInt3570;
+    public int fieldInt3571;
+    public int fieldInt3572;
+    public int fieldInt3573;
+    public int fieldInt3574;
+    public int fieldInt3575;
+    public int fieldInt3576;
+    public int fieldInt3577;
+    public int fieldInt3578;
+    public int fieldInt3579;
+    public int fieldInt3580;
+    public int fieldInt3581;
+    public int fieldInt3582;
+    public int fieldInt3583;
+    public int fieldInt3584;
+    public int fieldInt3585;
+    public int fieldInt3586;
+    public int fieldInt3587;
+    public int fieldInt3588;
+    public int fieldInt3589;
+    public int fieldInt3590;
+    public int fieldInt3591;
+    public int fieldInt3592;
+    public int fieldInt3593;
+    public int fieldInt3594;
+    public int fieldInt3595;
+    public int fieldInt3596;
+    public int fieldInt3597;
+    public int fieldInt3598;
+    public int fieldInt3599;
+    public int fieldInt3600;
+    public int fieldInt3601;
+    public int fieldInt3602;
+    public int fieldInt3603;
+    public int fieldInt3604;
+    public int fieldInt3605;
+    public int fieldInt3606;
+    public int fieldInt3607;
+    public int fieldInt3608;
+    public int fieldInt3609;
+    public int fieldInt3610;
+    public int fieldInt3611;
+    public int fieldInt3612;
+    public int fieldInt3613;
+    public int fieldInt3614;
+    public int fieldInt3615;
+    public int fieldInt3616;
+    public int fieldInt3617;
+    public int fieldInt3618;
+    public int fieldInt3619;
+    public int fieldInt3620;
+    public int fieldInt3621;
+    public int fieldInt3622;
+    public int fieldInt3623;
+    public int fieldInt3624;
+    public int fieldInt3625;
+    public int fieldInt3626;
+    public int fieldInt3627;
+    public int fieldInt3628;
+    public int fieldInt3629;
+    public int fieldInt3630;
+    public int fieldInt3631;
+    public int fieldInt3632;
+    public int fieldInt3633;
+    public int fieldInt3634;
+    public int fieldInt3635;
+    public int fieldInt3636;
+    public int fieldInt3637;
+    public int fieldInt3638;
+    public int fieldInt3639;
+    public int fieldInt3640;
+    public int fieldInt3641;
+    public int fieldInt3642;
+    public int fieldInt3643;
+    public int fieldInt3644;
+    public int fieldInt3645;
+    public int fieldInt3646;
+    public int fieldInt3647;
+    public int fieldInt3648;
+    public int fieldInt3649;
+    public int fieldInt3650;
+    public int fieldInt3651;
+    public int fieldInt3652;
+    public int fieldInt3653;
+    public int fieldInt3654;
+    public int fieldInt3655;
+    public int fieldInt3656;
+    public int fieldInt3657;
+    public int fieldInt3658;
+    public int fieldInt3659;
+    public int fieldInt3660;
+    public int fieldInt3661;
+    public int fieldInt3662;
+    public int fieldInt3663;
+    public int fieldInt3664;
+    public int fieldInt3665;
+    public int fieldInt3666;
+    public int fieldInt3667;
+    public int fieldInt3668;
+    public int fieldInt3669;
+    public int fieldInt3670;
+    public int fieldInt3671;
+    public int fieldInt3672;
+    public int fieldInt3673;
+    public int fieldInt3674;
+    public int fieldInt3675;
+    public int fieldInt3676;
+    public int fieldInt3677;
+    public int fieldInt3678;
+    public int fieldInt3679;
+    public int fieldInt3680;
+    public int fieldInt3681;
+    public int fieldInt3682;
+    public int fieldInt3683;
+    public int fieldInt3684;
+    public int fieldInt3685;
+    public int fieldInt3686;
+    public int fieldInt3687;
+    public int fieldInt3688;
+    public int fieldInt3689;
+    public int fieldInt3690;
+    public int fieldInt3691;
+    public int fieldInt3692;
+    public int fieldInt3693;
+    public int fieldInt3694;
+    public int fieldInt3695;
+    public int fieldInt3696;
+    public int fieldInt3697;
+    public int fieldInt3698;
+    public int fieldInt3699;
+    public int fieldInt3700;
+    public int fieldInt3701;
+    public int fieldInt3702;
+    public int fieldInt3703;
+    public int fieldInt3704;
+    public int fieldInt3705;
+    public int fieldInt3706;
+    public int fieldInt3707;
+    public int fieldInt3708;
+    public int fieldInt3709;
+    public int fieldInt3710;
+    public int fieldInt3711;
+    public int fieldInt3712;
+    public int fieldInt3713;
+    public int fieldInt3714;
+    public int fieldInt3715;
+    public int fieldInt3716;
+    public int fieldInt3717;
+    public int fieldInt3718;
+    public int fieldInt3719;
+    public int fieldInt3720;
+    public int fieldInt3721;
+    public int fieldInt3722;
+    public int fieldInt3723;
+    public int fieldInt3724;
+    public int fieldInt3725;
+    public int fieldInt3726;
+    public int fieldInt3727;
+    public int fieldInt3728;
+    public int fieldInt3729;
+    public int fieldInt3730;
+    public int fieldInt3731;
+    public int fieldInt3732;
+    public int fieldInt3733;
+    public int fieldInt3734;
+    public int fieldInt3735;
+    public int fieldInt3736;
+    public int fieldInt3737;
+    public int fieldInt3738;
+    public int fieldInt3739;
+    public int fieldInt3740;
+    public int fieldInt3741;
+    public int fieldInt3742;
+    public int fieldInt3743;
+    public int fieldInt3744;
+    public int fieldInt3745;
+    public int fieldInt3746;
+    public int fieldInt3747;
+    public int fieldInt3748;
+    public int fieldInt3749;
+    public int fieldInt3750;
+    public int fieldInt3751;
+    public int fieldInt3752;
+    public int fieldInt3753;
+    public int fieldInt3754;
+    public int fieldInt3755;
+    public int fieldInt3756;
+    public int fieldInt3757;
+    public int fieldInt3758;
+    public int fieldInt3759;
+    public int fieldInt3760;
+    public int fieldInt3761;
+    public int fieldInt3762;
+    public int fieldInt3763;
+    public int fieldInt3764;
+    public int fieldInt3765;
+    public int fieldInt3766;
+    public int fieldInt3767;
+    public int fieldInt3768;
+    public int fieldInt3769;
+    public int fieldInt3770;
+    public int fieldInt3771;
+    public int fieldInt3772;
+    public int fieldInt3773;
+    public int fieldInt3774;
+    public int fieldInt3775;
+    public int fieldInt3776;
+    public int fieldInt3777;
+    public int fieldInt3778;
+    public int fieldInt3779;
+    public int fieldInt3780;
+    public int fieldInt3781;
+    public int fieldInt3782;
+    public int fieldInt3783;
+    public int fieldInt3784;
+    public int fieldInt3785;
+    public int fieldInt3786;
+    public int fieldInt3787;
+    public int fieldInt3788;
+    public int fieldInt3789;
+    public int fieldInt3790;
+    public int fieldInt3791;
+    public int fieldInt3792;
+    public int fieldInt3793;
+    public int fieldInt3794;
+    public int fieldInt3795;
+    public int fieldInt3796;
+    public int fieldInt3797;
+    public int fieldInt3798;
+    public int fieldInt3799;
+    public int fieldInt3800;
+    public int fieldInt3801;
+    public int fieldInt3802;
+    public int fieldInt3803;
+    public int fieldInt3804;
+    public int fieldInt3805;
+    public int fieldInt3806;
+    public int fieldInt3807;
+    public int fieldInt3808;
+    public int fieldInt3809;
+    public int fieldInt3810;
+    public int fieldInt3811;
+    public int fieldInt3812;
+    public int fieldInt3813;
+    public int fieldInt3814;
+    public int fieldInt3815;
+    public int fieldInt3816;
+    public int fieldInt3817;
+    public int fieldInt3818;
+    public int fieldInt3819;
+    public int fieldInt3820;
+    public int fieldInt3821;
+    public int fieldInt3822;
+    public int fieldInt3823;
+    public int fieldInt3824;
+    public int fieldInt3825;
+    public int fieldInt3826;
+    public int fieldInt3827;
+    public int fieldInt3828;
+    public int fieldInt3829;
+    public int fieldInt3830;
+    public int fieldInt3831;
+    public int fieldInt3832;
+    public int fieldInt3833;
+    public int fieldInt3834;
+    public int fieldInt3835;
+    public int fieldInt3836;
+    public int fieldInt3837;
+    public int fieldInt3838;
+    public int fieldInt3839;
+    public int fieldInt3840;
+    public int fieldInt3841;
+    public int fieldInt3842;
+    public int fieldInt3843;
+    public int fieldInt3844;
+    public int fieldInt3845;
+    public int fieldInt3846;
+    public int fieldInt3847;
+    public int fieldInt3848;
+    public int fieldInt3849;
+    public int fieldInt3850;
+    public int fieldInt3851;
+    public int fieldInt3852;
+    public int fieldInt3853;
+    public int fieldInt3854;
+    public int fieldInt3855;
+    public int fieldInt3856;
+    public int fieldInt3857;
+    public int fieldInt3858;
+    public int fieldInt3859;
+    public int fieldInt3860;
+    public int fieldInt3861;
+    public int fieldInt3862;
+    public int fieldInt3863;
+    public int fieldInt3864;
+    public int fieldInt3865;
+    public int fieldInt3866;
+    public int fieldInt3867;
+    public int fieldInt3868;
+    public int fieldInt3869;
+    public int fieldInt3870;
+    public int fieldInt3871;
+    public int fieldInt3872;
+    public int fieldInt3873;
+    public int fieldInt3874;
+    public int fieldInt3875;
+    public int fieldInt3876;
+    public int fieldInt3877;
+    public int fieldInt3878;
+    public int fieldInt3879;
+    public int fieldInt3880;
+    public int fieldInt3881;
+    public int fieldInt3882;
+    public int fieldInt3883;
+    public int fieldInt3884;
+    public int fieldInt3885;
+    public int fieldInt3886;
+    public int fieldInt3887;
+    public int fieldInt3888;
+    public int fieldInt3889;
+    public int fieldInt3890;
+    public int fieldInt3891;
+    public int fieldInt3892;
+    public int fieldInt3893;
+    public int fieldInt3894;
+    public int fieldInt3895;
+    public int fieldInt3896;
+    public int fieldInt3897;
+    public int fieldInt3898;
+    public int fieldInt3899;
+    public int fieldInt3900;
+    public int fieldInt3901;
+    public int fieldInt3902;
+    public int fieldInt3903;
+    public int fieldInt3904;
+    public int fieldInt3905;
+    public int fieldInt3906;
+    public int fieldInt3907;
+    public int fieldInt3908;
+    public int fieldInt3909;
+    public int fieldInt3910;
+    public int fieldInt3911;
+    public int fieldInt3912;
+    public int fieldInt3913;
+    public int fieldInt3914;
+    public int fieldInt3915;
+    public int fieldInt3916;
+    public int fieldInt3917;
+    public int fieldInt3918;
+    public int fieldInt3919;
+    public int fieldInt3920;
+    public int fieldInt3921;
+    public int fieldInt3922;
+    public int fieldInt3923;
+    public int fieldInt3924;
+    public int fieldInt3925;
+    public int fieldInt3926;
+    public int fieldInt3927;
+    public int fieldInt3928;
+    public int fieldInt3929;
+    public int fieldInt3930;
+    public int fieldInt3931;
+    public int fieldInt3932;
+    public int fieldInt3933;
+    public int fieldInt3934;
+    public int fieldInt3935;
+    public int fieldInt3936;
+    public int fieldInt3937;
+    public int fieldInt3938;
+    public int fieldInt3939;
+    public int fieldInt3940;
+    public int fieldInt3941;
+    public int fieldInt3942;
+    public int fieldInt3943;
+    public int fieldInt3944;
+    public int fieldInt3945;
+    public int fieldInt3946;
+    public int fieldInt3947;
+    public int fieldInt3948;
+    public int fieldInt3949;
+    public int fieldInt3950;
+    public int fieldInt3951;
+    public int fieldInt3952;
+    public int fieldInt3953;
+    public int fieldInt3954;
+    public int fieldInt3955;
+    public int fieldInt3956;
+    public int fieldInt3957;
+    public int fieldInt3958;
+    public int fieldInt3959;
+    public int fieldInt3960;
+    public int fieldInt3961;
+    public int fieldInt3962;
+    public int fieldInt3963;
+    public int fieldInt3964;
+    public int fieldInt3965;
+    public int fieldInt3966;
+    public int fieldInt3967;
+    public int fieldInt3968;
+    public int fieldInt3969;
+    public int fieldInt3970;
+    public int fieldInt3971;
+    public int fieldInt3972;
+    public int fieldInt3973;
+    public int fieldInt3974;
+    public int fieldInt3975;
+    public int fieldInt3976;
+    public int fieldInt3977;
+    public int fieldInt3978;
+    public int fieldInt3979;
+    public int fieldInt3980;
+    public int fieldInt3981;
+    public int fieldInt3982;
+    public int fieldInt3983;
+    public int fieldInt3984;
+    public int fieldInt3985;
+    public int fieldInt3986;
+    public int fieldInt3987;
+    public int fieldInt3988;
+    public int fieldInt3989;
+    public int fieldInt3990;
+    public int fieldInt3991;
+    public int fieldInt3992;
+    public int fieldInt3993;
+    public int fieldInt3994;
+    public int fieldInt3995;
+    public int fieldInt3996;
+    public int fieldInt3997;
+    public int fieldInt3998;
+    public int fieldInt3999;
+    public int fieldInt4000;
+    public int fieldInt4001;
+    public int fieldInt4002;
+    public int fieldInt4003;
+    public int fieldInt4004;
+    public int fieldInt4005;
+    public int fieldInt4006;
+    public int fieldInt4007;
+    public int fieldInt4008;
+    public int fieldInt4009;
+    public int fieldInt4010;
+    public int fieldInt4011;
+    public int fieldInt4012;
+    public int fieldInt4013;
+    public int fieldInt4014;
+    public int fieldInt4015;
+    public int fieldInt4016;
+    public int fieldInt4017;
+    public int fieldInt4018;
+    public int fieldInt4019;
+    public int fieldInt4020;
+    public int fieldInt4021;
+    public int fieldInt4022;
+    public int fieldInt4023;
+    public int fieldInt4024;
+    public int fieldInt4025;
+    public int fieldInt4026;
+    public int fieldInt4027;
+    public int fieldInt4028;
+    public int fieldInt4029;
+    public int fieldInt4030;
+    public int fieldInt4031;
+    public int fieldInt4032;
+    public int fieldInt4033;
+    public int fieldInt4034;
+    public int fieldInt4035;
+    public int fieldInt4036;
+    public int fieldInt4037;
+    public int fieldInt4038;
+    public int fieldInt4039;
+    public int fieldInt4040;
+    public int fieldInt4041;
+    public int fieldInt4042;
+    public int fieldInt4043;
+    public int fieldInt4044;
+    public int fieldInt4045;
+    public int fieldInt4046;
+    public int fieldInt4047;
+    public int fieldInt4048;
+    public int fieldInt4049;
+    public int fieldInt4050;
+    public int fieldInt4051;
+    public int fieldInt4052;
+    public int fieldInt4053;
+    public int fieldInt4054;
+    public int fieldInt4055;
+    public int fieldInt4056;
+    public int fieldInt4057;
+    public int fieldInt4058;
+    public int fieldInt4059;
+    public int fieldInt4060;
+    public int fieldInt4061;
+    public int fieldInt4062;
+    public int fieldInt4063;
+    public int fieldInt4064;
+    public int fieldInt4065;
+    public int fieldInt4066;
+    public int fieldInt4067;
+    public int fieldInt4068;
+    public int fieldInt4069;
+    public int fieldInt4070;
+    public int fieldInt4071;
+    public int fieldInt4072;
+    public int fieldInt4073;
+    public int fieldInt4074;
+    public int fieldInt4075;
+    public int fieldInt4076;
+    public int fieldInt4077;
+    public int fieldInt4078;
+    public int fieldInt4079;
+    public int fieldInt4080;
+    public int fieldInt4081;
+    public int fieldInt4082;
+    public int fieldInt4083;
+    public int fieldInt4084;
+    public int fieldInt4085;
+    public int fieldInt4086;
+    public int fieldInt4087;
+    public int fieldInt4088;
+    public int fieldInt4089;
+    public int fieldInt4090;
+    public int fieldInt4091;
+    public int fieldInt4092;
+    public int fieldInt4093;
+    public int fieldInt4094;
+    public int fieldInt4095;
+    public int fieldInt4096;
+    public int fieldInt4097;
+    public int fieldInt4098;
+    public int fieldInt4099;
+    public int fieldInt4100;
+    public int fieldInt4101;
+    public int fieldInt4102;
+    public int fieldInt4103;
+    public int fieldInt4104;
+    public int fieldInt4105;
+    public int fieldInt4106;
+    public int fieldInt4107;
+    public int fieldInt4108;
+    public int fieldInt4109;
+    public int fieldInt4110;
+    public int fieldInt4111;
+    public int fieldInt4112;
+    public int fieldInt4113;
+    public int fieldInt4114;
+    public int fieldInt4115;
+    public int fieldInt4116;
+    public int fieldInt4117;
+    public int fieldInt4118;
+    public int fieldInt4119;
+    public int fieldInt4120;
+    public int fieldInt4121;
+    public int fieldInt4122;
+    public int fieldInt4123;
+    public int fieldInt4124;
+    public int fieldInt4125;
+    public int fieldInt4126;
+    public int fieldInt4127;
+    public int fieldInt4128;
+    public int fieldInt4129;
+    public int fieldInt4130;
+    public int fieldInt4131;
+    public int fieldInt4132;
+    public int fieldInt4133;
+    public int fieldInt4134;
+    public int fieldInt4135;
+    public int fieldInt4136;
+    public int fieldInt4137;
+    public int fieldInt4138;
+    public int fieldInt4139;
+    public int fieldInt4140;
+    public int fieldInt4141;
+    public int fieldInt4142;
+    public int fieldInt4143;
+    public int fieldInt4144;
+    public int fieldInt4145;
+    public int fieldInt4146;
+    public int fieldInt4147;
+    public int fieldInt4148;
+    public int fieldInt4149;
+    public int fieldInt4150;
+    public int fieldInt4151;
+    public int fieldInt4152;
+    public int fieldInt4153;
+    public int fieldInt4154;
+    public int fieldInt4155;
+    public int fieldInt4156;
+    public int fieldInt4157;
+    public int fieldInt4158;
+    public int fieldInt4159;
+    public int fieldInt4160;
+    public int fieldInt4161;
+    public int fieldInt4162;
+    public int fieldInt4163;
+    public int fieldInt4164;
+    public int fieldInt4165;
+    public int fieldInt4166;
+    public int fieldInt4167;
+    public int fieldInt4168;
+    public int fieldInt4169;
+    public int fieldInt4170;
+    public int fieldInt4171;
+    public int fieldInt4172;
+    public int fieldInt4173;
+    public int fieldInt4174;
+    public int fieldInt4175;
+    public int fieldInt4176;
+    public int fieldInt4177;
+    public int fieldInt4178;
+    public int fieldInt4179;
+    public int fieldInt4180;
+    public int fieldInt4181;
+    public int fieldInt4182;
+    public int fieldInt4183;
+    public int fieldInt4184;
+    public int fieldInt4185;
+    public int fieldInt4186;
+    public int fieldInt4187;
+    public int fieldInt4188;
+    public int fieldInt4189;
+    public int fieldInt4190;
+    public int fieldInt4191;
+    public int fieldInt4192;
+    public int fieldInt4193;
+    public int fieldInt4194;
+    public int fieldInt4195;
+    public int fieldInt4196;
+    public int fieldInt4197;
+    public int fieldInt4198;
+    public int fieldInt4199;
+    public int fieldInt4200;
+    public int fieldInt4201;
+    public int fieldInt4202;
+    public int fieldInt4203;
+    public int fieldInt4204;
+    public int fieldInt4205;
+    public int fieldInt4206;
+    public int fieldInt4207;
+    public int fieldInt4208;
+    public int fieldInt4209;
+    public int fieldInt4210;
+    public int fieldInt4211;
+    public int fieldInt4212;
+    public int fieldInt4213;
+    public int fieldInt4214;
+    public int fieldInt4215;
+    public int fieldInt4216;
+    public int fieldInt4217;
+    public int fieldInt4218;
+    public int fieldInt4219;
+    public int fieldInt4220;
+    public int fieldInt4221;
+    public int fieldInt4222;
+    public int fieldInt4223;
+    public int fieldInt4224;
+    public int fieldInt4225;
+    public int fieldInt4226;
+    public int fieldInt4227;
+    public int fieldInt4228;
+    public int fieldInt4229;
+    public int fieldInt4230;
+    public int fieldInt4231;
+    public int fieldInt4232;
+    public int fieldInt4233;
+    public int fieldInt4234;
+    public int fieldInt4235;
+    public int fieldInt4236;
+    public int fieldInt4237;
+    public int fieldInt4238;
+    public int fieldInt4239;
+    public int fieldInt4240;
+    public int fieldInt4241;
+    public int fieldInt4242;
+    public int fieldInt4243;
+    public int fieldInt4244;
+    public int fieldInt4245;
+    public int fieldInt4246;
+    public int fieldInt4247;
+    public int fieldInt4248;
+    public int fieldInt4249;
+    public int fieldInt4250;
+    public int fieldInt4251;
+    public int fieldInt4252;
+    public int fieldInt4253;
+    public int fieldInt4254;
+    public int fieldInt4255;
+    public int fieldInt4256;
+    public int fieldInt4257;
+    public int fieldInt4258;
+    public int fieldInt4259;
+    public int fieldInt4260;
+    public int fieldInt4261;
+    public int fieldInt4262;
+    public int fieldInt4263;
+    public int fieldInt4264;
+    public int fieldInt4265;
+    public int fieldInt4266;
+    public int fieldInt4267;
+    public int fieldInt4268;
+    public int fieldInt4269;
+    public int fieldInt4270;
+    public int fieldInt4271;
+    public int fieldInt4272;
+    public int fieldInt4273;
+    public int fieldInt4274;
+    public int fieldInt4275;
+    public int fieldInt4276;
+    public int fieldInt4277;
+    public int fieldInt4278;
+    public int fieldInt4279;
+    public int fieldInt4280;
+    public int fieldInt4281;
+    public int fieldInt4282;
+    public int fieldInt4283;
+    public int fieldInt4284;
+    public int fieldInt4285;
+    public int fieldInt4286;
+    public int fieldInt4287;
+    public int fieldInt4288;
+    public int fieldInt4289;
+    public int fieldInt4290;
+    public int fieldInt4291;
+    public int fieldInt4292;
+    public int fieldInt4293;
+    public int fieldInt4294;
+    public int fieldInt4295;
+    public int fieldInt4296;
+    public int fieldInt4297;
+    public int fieldInt4298;
+    public int fieldInt4299;
+    public int fieldInt4300;
+    public int fieldInt4301;
+    public int fieldInt4302;
+    public int fieldInt4303;
+    public int fieldInt4304;
+    public int fieldInt4305;
+    public int fieldInt4306;
+    public int fieldInt4307;
+    public int fieldInt4308;
+    public int fieldInt4309;
+    public int fieldInt4310;
+    public int fieldInt4311;
+    public int fieldInt4312;
+    public int fieldInt4313;
+    public int fieldInt4314;
+    public int fieldInt4315;
+    public int fieldInt4316;
+    public int fieldInt4317;
+    public int fieldInt4318;
+    public int fieldInt4319;
+    public int fieldInt4320;
+    public int fieldInt4321;
+    public int fieldInt4322;
+    public int fieldInt4323;
+    public int fieldInt4324;
+    public int fieldInt4325;
+    public int fieldInt4326;
+    public int fieldInt4327;
+    public int fieldInt4328;
+    public int fieldInt4329;
+    public int fieldInt4330;
+    public int fieldInt4331;
+    public int fieldInt4332;
+    public int fieldInt4333;
+    public int fieldInt4334;
+    public int fieldInt4335;
+    public int fieldInt4336;
+    public int fieldInt4337;
+    public int fieldInt4338;
+    public int fieldInt4339;
+    public int fieldInt4340;
+    public int fieldInt4341;
+    public int fieldInt4342;
+    public int fieldInt4343;
+    public int fieldInt4344;
+    public int fieldInt4345;
+    public int fieldInt4346;
+    public int fieldInt4347;
+    public int fieldInt4348;
+    public int fieldInt4349;
+    public int fieldInt4350;
+    public int fieldInt4351;
+    public int fieldInt4352;
+    public int fieldInt4353;
+    public int fieldInt4354;
+    public int fieldInt4355;
+    public int fieldInt4356;
+    public int fieldInt4357;
+    public int fieldInt4358;
+    public int fieldInt4359;
+    public int fieldInt4360;
+    public int fieldInt4361;
+    public int fieldInt4362;
+    public int fieldInt4363;
+    public int fieldInt4364;
+    public int fieldInt4365;
+    public int fieldInt4366;
+    public int fieldInt4367;
+    public int fieldInt4368;
+    public int fieldInt4369;
+    public int fieldInt4370;
+    public int fieldInt4371;
+    public int fieldInt4372;
+    public int fieldInt4373;
+    public int fieldInt4374;
+    public int fieldInt4375;
+    public int fieldInt4376;
+    public int fieldInt4377;
+    public int fieldInt4378;
+    public int fieldInt4379;
+    public int fieldInt4380;
+    public int fieldInt4381;
+    public int fieldInt4382;
+    public int fieldInt4383;
+    public int fieldInt4384;
+    public int fieldInt4385;
+    public int fieldInt4386;
+    public int fieldInt4387;
+    public int fieldInt4388;
+    public int fieldInt4389;
+    public int fieldInt4390;
+    public int fieldInt4391;
+    public int fieldInt4392;
+    public int fieldInt4393;
+    public int fieldInt4394;
+    public int fieldInt4395;
+    public int fieldInt4396;
+    public int fieldInt4397;
+    public int fieldInt4398;
+    public int fieldInt4399;
+    public int fieldInt4400;
+    public int fieldInt4401;
+    public int fieldInt4402;
+    public int fieldInt4403;
+    public int fieldInt4404;
+    public int fieldInt4405;
+    public int fieldInt4406;
+    public int fieldInt4407;
+    public int fieldInt4408;
+    public int fieldInt4409;
+    public int fieldInt4410;
+    public int fieldInt4411;
+    public int fieldInt4412;
+    public int fieldInt4413;
+    public int fieldInt4414;
+    public int fieldInt4415;
+    public int fieldInt4416;
+    public int fieldInt4417;
+    public int fieldInt4418;
+    public int fieldInt4419;
+    public int fieldInt4420;
+    public int fieldInt4421;
+    public int fieldInt4422;
+    public int fieldInt4423;
+    public int fieldInt4424;
+    public int fieldInt4425;
+    public int fieldInt4426;
+    public int fieldInt4427;
+    public int fieldInt4428;
+    public int fieldInt4429;
+    public int fieldInt4430;
+    public int fieldInt4431;
+    public int fieldInt4432;
+    public int fieldInt4433;
+    public int fieldInt4434;
+    public int fieldInt4435;
+    public int fieldInt4436;
+    public int fieldInt4437;
+    public int fieldInt4438;
+    public int fieldInt4439;
+    public int fieldInt4440;
+    public int fieldInt4441;
+    public int fieldInt4442;
+    public int fieldInt4443;
+    public int fieldInt4444;
+    public int fieldInt4445;
+    public int fieldInt4446;
+    public int fieldInt4447;
+    public int fieldInt4448;
+    public int fieldInt4449;
+    public int fieldInt4450;
+    public int fieldInt4451;
+    public int fieldInt4452;
+    public int fieldInt4453;
+    public int fieldInt4454;
+    public int fieldInt4455;
+    public int fieldInt4456;
+    public int fieldInt4457;
+    public int fieldInt4458;
+    public int fieldInt4459;
+    public int fieldInt4460;
+    public int fieldInt4461;
+    public int fieldInt4462;
+    public int fieldInt4463;
+    public int fieldInt4464;
+    public int fieldInt4465;
+    public int fieldInt4466;
+    public int fieldInt4467;
+    public int fieldInt4468;
+    public int fieldInt4469;
+    public int fieldInt4470;
+    public int fieldInt4471;
+    public int fieldInt4472;
+    public int fieldInt4473;
+    public int fieldInt4474;
+    public int fieldInt4475;
+    public int fieldInt4476;
+    public int fieldInt4477;
+    public int fieldInt4478;
+    public int fieldInt4479;
+    public int fieldInt4480;
+    public int fieldInt4481;
+    public int fieldInt4482;
+    public int fieldInt4483;
+    public int fieldInt4484;
+    public int fieldInt4485;
+    public int fieldInt4486;
+    public int fieldInt4487;
+    public int fieldInt4488;
+    public int fieldInt4489;
+    public int fieldInt4490;
+    public int fieldInt4491;
+    public int fieldInt4492;
+    public int fieldInt4493;
+    public int fieldInt4494;
+    public int fieldInt4495;
+    public int fieldInt4496;
+    public int fieldInt4497;
+    public int fieldInt4498;
+    public int fieldInt4499;
+    public int fieldInt4500;
+    public int fieldInt4501;
+    public int fieldInt4502;
+    public int fieldInt4503;
+    public int fieldInt4504;
+    public int fieldInt4505;
+    public int fieldInt4506;
+    public int fieldInt4507;
+    public int fieldInt4508;
+    public int fieldInt4509;
+    public int fieldInt4510;
+    public int fieldInt4511;
+    public int fieldInt4512;
+    public int fieldInt4513;
+    public int fieldInt4514;
+    public int fieldInt4515;
+    public int fieldInt4516;
+    public int fieldInt4517;
+    public int fieldInt4518;
+    public int fieldInt4519;
+    public int fieldInt4520;
+    public int fieldInt4521;
+    public int fieldInt4522;
+    public int fieldInt4523;
+    public int fieldInt4524;
+    public int fieldInt4525;
+    public int fieldInt4526;
+    public int fieldInt4527;
+    public int fieldInt4528;
+    public int fieldInt4529;
+    public int fieldInt4530;
+    public int fieldInt4531;
+    public int fieldInt4532;
+    public int fieldInt4533;
+    public int fieldInt4534;
+    public int fieldInt4535;
+    public int fieldInt4536;
+    public int fieldInt4537;
+    public int fieldInt4538;
+    public int fieldInt4539;
+    public int fieldInt4540;
+    public int fieldInt4541;
+    public int fieldInt4542;
+    public int fieldInt4543;
+    public int fieldInt4544;
+    public int fieldInt4545;
+    public int fieldInt4546;
+    public int fieldInt4547;
+    public int fieldInt4548;
+    public int fieldInt4549;
+    public int fieldInt4550;
+    public int fieldInt4551;
+    public int fieldInt4552;
+    public int fieldInt4553;
+    public int fieldInt4554;
+    public int fieldInt4555;
+    public int fieldInt4556;
+    public int fieldInt4557;
+    public int fieldInt4558;
+    public int fieldInt4559;
+    public int fieldInt4560;
+    public int fieldInt4561;
+    public int fieldInt4562;
+    public int fieldInt4563;
+    public int fieldInt4564;
+    public int fieldInt4565;
+    public int fieldInt4566;
+    public int fieldInt4567;
+    public int fieldInt4568;
+    public int fieldInt4569;
+    public int fieldInt4570;
+    public int fieldInt4571;
+    public int fieldInt4572;
+    public int fieldInt4573;
+    public int fieldInt4574;
+    public int fieldInt4575;
+    public int fieldInt4576;
+    public int fieldInt4577;
+    public int fieldInt4578;
+    public int fieldInt4579;
+    public int fieldInt4580;
+    public int fieldInt4581;
+    public int fieldInt4582;
+    public int fieldInt4583;
+    public int fieldInt4584;
+    public int fieldInt4585;
+    public int fieldInt4586;
+    public int fieldInt4587;
+    public int fieldInt4588;
+    public int fieldInt4589;
+    public int fieldInt4590;
+    public int fieldInt4591;
+    public int fieldInt4592;
+    public int fieldInt4593;
+    public int fieldInt4594;
+    public int fieldInt4595;
+    public int fieldInt4596;
+    public int fieldInt4597;
+    public int fieldInt4598;
+    public int fieldInt4599;
+    public int fieldInt4600;
+    public int fieldInt4601;
+    public int fieldInt4602;
+    public int fieldInt4603;
+    public int fieldInt4604;
+    public int fieldInt4605;
+    public int fieldInt4606;
+    public int fieldInt4607;
+    public int fieldInt4608;
+    public int fieldInt4609;
+    public int fieldInt4610;
+    public int fieldInt4611;
+    public int fieldInt4612;
+    public int fieldInt4613;
+    public int fieldInt4614;
+    public int fieldInt4615;
+    public int fieldInt4616;
+    public int fieldInt4617;
+    public int fieldInt4618;
+    public int fieldInt4619;
+    public int fieldInt4620;
+    public int fieldInt4621;
+    public int fieldInt4622;
+    public int fieldInt4623;
+    public int fieldInt4624;
+    public int fieldInt4625;
+    public int fieldInt4626;
+    public int fieldInt4627;
+    public int fieldInt4628;
+    public int fieldInt4629;
+    public int fieldInt4630;
+    public int fieldInt4631;
+    public int fieldInt4632;
+    public int fieldInt4633;
+    public int fieldInt4634;
+    public int fieldInt4635;
+    public int fieldInt4636;
+    public int fieldInt4637;
+    public int fieldInt4638;
+    public int fieldInt4639;
+    public int fieldInt4640;
+    public int fieldInt4641;
+    public int fieldInt4642;
+    public int fieldInt4643;
+    public int fieldInt4644;
+    public int fieldInt4645;
+    public int fieldInt4646;
+    public int fieldInt4647;
+    public int fieldInt4648;
+    public int fieldInt4649;
+    public int fieldInt4650;
+    public int fieldInt4651;
+    public int fieldInt4652;
+    public int fieldInt4653;
+    public int fieldInt4654;
+    public int fieldInt4655;
+    public int fieldInt4656;
+    public int fieldInt4657;
+    public int fieldInt4658;
+    public int fieldInt4659;
+    public int fieldInt4660;
+    public int fieldInt4661;
+    public int fieldInt4662;
+    public int fieldInt4663;
+    public int fieldInt4664;
+    public int fieldInt4665;
+    public int fieldInt4666;
+    public int fieldInt4667;
+    public int fieldInt4668;
+    public int fieldInt4669;
+    public int fieldInt4670;
+    public int fieldInt4671;
+    public int fieldInt4672;
+    public int fieldInt4673;
+    public int fieldInt4674;
+    public int fieldInt4675;
+    public int fieldInt4676;
+    public int fieldInt4677;
+    public int fieldInt4678;
+    public int fieldInt4679;
+    public int fieldInt4680;
+    public int fieldInt4681;
+    public int fieldInt4682;
+    public int fieldInt4683;
+    public int fieldInt4684;
+    public int fieldInt4685;
+    public int fieldInt4686;
+    public int fieldInt4687;
+    public int fieldInt4688;
+    public int fieldInt4689;
+    public int fieldInt4690;
+    public int fieldInt4691;
+    public int fieldInt4692;
+    public int fieldInt4693;
+    public int fieldInt4694;
+    public int fieldInt4695;
+    public int fieldInt4696;
+    public int fieldInt4697;
+    public int fieldInt4698;
+    public int fieldInt4699;
+    public int fieldInt4700;
+    public int fieldInt4701;
+    public int fieldInt4702;
+    public int fieldInt4703;
+    public int fieldInt4704;
+    public int fieldInt4705;
+    public int fieldInt4706;
+    public int fieldInt4707;
+    public int fieldInt4708;
+    public int fieldInt4709;
+    public int fieldInt4710;
+    public int fieldInt4711;
+    public int fieldInt4712;
+    public int fieldInt4713;
+    public int fieldInt4714;
+    public int fieldInt4715;
+    public int fieldInt4716;
+    public int fieldInt4717;
+    public int fieldInt4718;
+    public int fieldInt4719;
+    public int fieldInt4720;
+    public int fieldInt4721;
+    public int fieldInt4722;
+    public int fieldInt4723;
+    public int fieldInt4724;
+    public int fieldInt4725;
+    public int fieldInt4726;
+    public int fieldInt4727;
+    public int fieldInt4728;
+    public int fieldInt4729;
+    public int fieldInt4730;
+    public int fieldInt4731;
+    public int fieldInt4732;
+    public int fieldInt4733;
+    public int fieldInt4734;
+    public int fieldInt4735;
+    public int fieldInt4736;
+    public int fieldInt4737;
+    public int fieldInt4738;
+    public int fieldInt4739;
+    public int fieldInt4740;
+    public int fieldInt4741;
+    public int fieldInt4742;
+    public int fieldInt4743;
+    public int fieldInt4744;
+    public int fieldInt4745;
+    public int fieldInt4746;
+    public int fieldInt4747;
+    public int fieldInt4748;
+    public int fieldInt4749;
+    public int fieldInt4750;
+    public int fieldInt4751;
+    public int fieldInt4752;
+    public int fieldInt4753;
+    public int fieldInt4754;
+    public int fieldInt4755;
+    public int fieldInt4756;
+    public int fieldInt4757;
+    public int fieldInt4758;
+    public int fieldInt4759;
+    public int fieldInt4760;
+    public int fieldInt4761;
+    public int fieldInt4762;
+    public int fieldInt4763;
+    public int fieldInt4764;
+    public int fieldInt4765;
+    public int fieldInt4766;
+    public int fieldInt4767;
+    public int fieldInt4768;
+    public int fieldInt4769;
+    public int fieldInt4770;
+    public int fieldInt4771;
+    public int fieldInt4772;
+    public int fieldInt4773;
+    public int fieldInt4774;
+    public int fieldInt4775;
+    public int fieldInt4776;
+    public int fieldInt4777;
+    public int fieldInt4778;
+    public int fieldInt4779;
+    public int fieldInt4780;
+    public int fieldInt4781;
+    public int fieldInt4782;
+    public int fieldInt4783;
+    public int fieldInt4784;
+    public int fieldInt4785;
+    public int fieldInt4786;
+    public int fieldInt4787;
+    public int fieldInt4788;
+    public int fieldInt4789;
+    public int fieldInt4790;
+    public int fieldInt4791;
+    public int fieldInt4792;
+    public int fieldInt4793;
+    public int fieldInt4794;
+    public int fieldInt4795;
+    public int fieldInt4796;
+    public int fieldInt4797;
+    public int fieldInt4798;
+    public int fieldInt4799;
+    public int fieldInt4800;
+    public int fieldInt4801;
+    public int fieldInt4802;
+    public int fieldInt4803;
+    public int fieldInt4804;
+    public int fieldInt4805;
+    public int fieldInt4806;
+    public int fieldInt4807;
+    public int fieldInt4808;
+    public int fieldInt4809;
+    public int fieldInt4810;
+    public int fieldInt4811;
+    public int fieldInt4812;
+    public int fieldInt4813;
+    public int fieldInt4814;
+    public int fieldInt4815;
+    public int fieldInt4816;
+    public int fieldInt4817;
+    public int fieldInt4818;
+    public int fieldInt4819;
+    public int fieldInt4820;
+    public int fieldInt4821;
+    public int fieldInt4822;
+    public int fieldInt4823;
+    public int fieldInt4824;
+    public int fieldInt4825;
+    public int fieldInt4826;
+    public int fieldInt4827;
+    public int fieldInt4828;
+    public int fieldInt4829;
+    public int fieldInt4830;
+    public int fieldInt4831;
+    public int fieldInt4832;
+    public int fieldInt4833;
+    public int fieldInt4834;
+    public int fieldInt4835;
+    public int fieldInt4836;
+    public int fieldInt4837;
+    public int fieldInt4838;
+    public int fieldInt4839;
+    public int fieldInt4840;
+    public int fieldInt4841;
+    public int fieldInt4842;
+    public int fieldInt4843;
+    public int fieldInt4844;
+    public int fieldInt4845;
+    public int fieldInt4846;
+    public int fieldInt4847;
+    public int fieldInt4848;
+    public int fieldInt4849;
+    public int fieldInt4850;
+    public int fieldInt4851;
+    public int fieldInt4852;
+    public int fieldInt4853;
+    public int fieldInt4854;
+    public int fieldInt4855;
+    public int fieldInt4856;
+    public int fieldInt4857;
+    public int fieldInt4858;
+    public int fieldInt4859;
+    public int fieldInt4860;
+    public int fieldInt4861;
+    public int fieldInt4862;
+    public int fieldInt4863;
+    public int fieldInt4864;
+    public int fieldInt4865;
+    public int fieldInt4866;
+    public int fieldInt4867;
+    public int fieldInt4868;
+    public int fieldInt4869;
+    public int fieldInt4870;
+    public int fieldInt4871;
+    public int fieldInt4872;
+    public int fieldInt4873;
+    public int fieldInt4874;
+    public int fieldInt4875;
+    public int fieldInt4876;
+    public int fieldInt4877;
+    public int fieldInt4878;
+    public int fieldInt4879;
+    public int fieldInt4880;
+    public int fieldInt4881;
+    public int fieldInt4882;
+    public int fieldInt4883;
+    public int fieldInt4884;
+    public int fieldInt4885;
+    public int fieldInt4886;
+    public int fieldInt4887;
+    public int fieldInt4888;
+    public int fieldInt4889;
+    public int fieldInt4890;
+    public int fieldInt4891;
+    public int fieldInt4892;
+    public int fieldInt4893;
+    public int fieldInt4894;
+    public int fieldInt4895;
+    public int fieldInt4896;
+    public int fieldInt4897;
+    public int fieldInt4898;
+    public int fieldInt4899;
+    public int fieldInt4900;
+    public int fieldInt4901;
+    public int fieldInt4902;
+    public int fieldInt4903;
+    public int fieldInt4904;
+    public int fieldInt4905;
+    public int fieldInt4906;
+    public int fieldInt4907;
+    public int fieldInt4908;
+    public int fieldInt4909;
+    public int fieldInt4910;
+    public int fieldInt4911;
+    public int fieldInt4912;
+    public int fieldInt4913;
+    public int fieldInt4914;
+    public int fieldInt4915;
+    public int fieldInt4916;
+    public int fieldInt4917;
+    public int fieldInt4918;
+    public int fieldInt4919;
+    public int fieldInt4920;
+    public int fieldInt4921;
+    public int fieldInt4922;
+    public int fieldInt4923;
+    public int fieldInt4924;
+    public int fieldInt4925;
+    public int fieldInt4926;
+    public int fieldInt4927;
+    public int fieldInt4928;
+    public int fieldInt4929;
+    public int fieldInt4930;
+    public int fieldInt4931;
+    public int fieldInt4932;
+    public int fieldInt4933;
+    public int fieldInt4934;
+    public int fieldInt4935;
+    public int fieldInt4936;
+    public int fieldInt4937;
+    public int fieldInt4938;
+    public int fieldInt4939;
+    public int fieldInt4940;
+    public int fieldInt4941;
+    public int fieldInt4942;
+    public int fieldInt4943;
+    public int fieldInt4944;
+    public int fieldInt4945;
+    public int fieldInt4946;
+    public int fieldInt4947;
+    public int fieldInt4948;
+    public int fieldInt4949;
+    public int fieldInt4950;
+    public int fieldInt4951;
+    public int fieldInt4952;
+    public int fieldInt4953;
+    public int fieldInt4954;
+    public int fieldInt4955;
+    public int fieldInt4956;
+    public int fieldInt4957;
+    public int fieldInt4958;
+    public int fieldInt4959;
+    public int fieldInt4960;
+    public int fieldInt4961;
+    public int fieldInt4962;
+    public int fieldInt4963;
+    public int fieldInt4964;
+    public int fieldInt4965;
+    public int fieldInt4966;
+    public int fieldInt4967;
+    public int fieldInt4968;
+    public int fieldInt4969;
+    public int fieldInt4970;
+    public int fieldInt4971;
+    public int fieldInt4972;
+    public int fieldInt4973;
+    public int fieldInt4974;
+    public int fieldInt4975;
+    public int fieldInt4976;
+    public int fieldInt4977;
+    public int fieldInt4978;
+    public int fieldInt4979;
+    public int fieldInt4980;
+    public int fieldInt4981;
+    public int fieldInt4982;
+    public int fieldInt4983;
+    public int fieldInt4984;
+    public int fieldInt4985;
+    public int fieldInt4986;
+    public int fieldInt4987;
+    public int fieldInt4988;
+    public int fieldInt4989;
+    public int fieldInt4990;
+    public int fieldInt4991;
+    public int fieldInt4992;
+    public int fieldInt4993;
+    public int fieldInt4994;
+    public int fieldInt4995;
+    public int fieldInt4996;
+    public int fieldInt4997;
+    public int fieldInt4998;
+    public int fieldInt4999;
+    public int fieldInt5000;
+    public int fieldInt5001;
+    public int fieldInt5002;
+    public int fieldInt5003;
+    public int fieldInt5004;
+    public int fieldInt5005;
+    public int fieldInt5006;
+    public int fieldInt5007;
+    public int fieldInt5008;
+    public int fieldInt5009;
+    public int fieldInt5010;
+    public int fieldInt5011;
+    public int fieldInt5012;
+    public int fieldInt5013;
+    public int fieldInt5014;
+    public int fieldInt5015;
+    public int fieldInt5016;
+    public int fieldInt5017;
+    public int fieldInt5018;
+    public int fieldInt5019;
+    public int fieldInt5020;
+    public int fieldInt5021;
+    public int fieldInt5022;
+    public int fieldInt5023;
+    public int fieldInt5024;
+    public int fieldInt5025;
+    public int fieldInt5026;
+    public int fieldInt5027;
+    public int fieldInt5028;
+    public int fieldInt5029;
+    public int fieldInt5030;
+    public int fieldInt5031;
+    public int fieldInt5032;
+    public int fieldInt5033;
+    public int fieldInt5034;
+    public int fieldInt5035;
+    public int fieldInt5036;
+    public int fieldInt5037;
+    public int fieldInt5038;
+    public int fieldInt5039;
+    public int fieldInt5040;
+    public int fieldInt5041;
+    public int fieldInt5042;
+    public int fieldInt5043;
+    public int fieldInt5044;
+    public int fieldInt5045;
+    public int fieldInt5046;
+    public int fieldInt5047;
+    public int fieldInt5048;
+    public int fieldInt5049;
+    public int fieldInt5050;
+    public int fieldInt5051;
+    public int fieldInt5052;
+    public int fieldInt5053;
+    public int fieldInt5054;
+    public int fieldInt5055;
+    public int fieldInt5056;
+    public int fieldInt5057;
+    public int fieldInt5058;
+    public int fieldInt5059;
+    public int fieldInt5060;
+    public int fieldInt5061;
+    public int fieldInt5062;
+    public int fieldInt5063;
+    public int fieldInt5064;
+    public int fieldInt5065;
+    public int fieldInt5066;
+    public int fieldInt5067;
+    public int fieldInt5068;
+    public int fieldInt5069;
+    public int fieldInt5070;
+    public int fieldInt5071;
+    public int fieldInt5072;
+    public int fieldInt5073;
+    public int fieldInt5074;
+    public int fieldInt5075;
+    public int fieldInt5076;
+    public int fieldInt5077;
+    public int fieldInt5078;
+    public int fieldInt5079;
+    public int fieldInt5080;
+    public int fieldInt5081;
+    public int fieldInt5082;
+    public int fieldInt5083;
+    public int fieldInt5084;
+    public int fieldInt5085;
+    public int fieldInt5086;
+    public int fieldInt5087;
+    public int fieldInt5088;
+    public int fieldInt5089;
+    public int fieldInt5090;
+    public int fieldInt5091;
+    public int fieldInt5092;
+    public int fieldInt5093;
+    public int fieldInt5094;
+    public int fieldInt5095;
+    public int fieldInt5096;
+    public int fieldInt5097;
+    public int fieldInt5098;
+    public int fieldInt5099;
+    public int fieldInt5100;
+    public int fieldInt5101;
+    public int fieldInt5102;
+    public int fieldInt5103;
+    public int fieldInt5104;
+    public int fieldInt5105;
+    public int fieldInt5106;
+    public int fieldInt5107;
+    public int fieldInt5108;
+    public int fieldInt5109;
+    public int fieldInt5110;
+    public int fieldInt5111;
+    public int fieldInt5112;
+    public int fieldInt5113;
+    public int fieldInt5114;
+    public int fieldInt5115;
+    public int fieldInt5116;
+    public int fieldInt5117;
+    public int fieldInt5118;
+    public int fieldInt5119;
+    public int fieldInt5120;
+    public int fieldInt5121;
+    public int fieldInt5122;
+    public int fieldInt5123;
+    public int fieldInt5124;
+    public int fieldInt5125;
+    public int fieldInt5126;
+    public int fieldInt5127;
+    public int fieldInt5128;
+    public int fieldInt5129;
+    public int fieldInt5130;
+    public int fieldInt5131;
+    public int fieldInt5132;
+    public int fieldInt5133;
+    public int fieldInt5134;
+    public int fieldInt5135;
+    public int fieldInt5136;
+    public int fieldInt5137;
+    public int fieldInt5138;
+    public int fieldInt5139;
+    public int fieldInt5140;
+    public int fieldInt5141;
+    public int fieldInt5142;
+    public int fieldInt5143;
+    public int fieldInt5144;
+    public int fieldInt5145;
+    public int fieldInt5146;
+    public int fieldInt5147;
+    public int fieldInt5148;
+    public int fieldInt5149;
+    public int fieldInt5150;
+    public int fieldInt5151;
+    public int fieldInt5152;
+    public int fieldInt5153;
+    public int fieldInt5154;
+    public int fieldInt5155;
+    public int fieldInt5156;
+    public int fieldInt5157;
+    public int fieldInt5158;
+    public int fieldInt5159;
+    public int fieldInt5160;
+    public int fieldInt5161;
+    public int fieldInt5162;
+    public int fieldInt5163;
+    public int fieldInt5164;
+    public int fieldInt5165;
+    public int fieldInt5166;
+    public int fieldInt5167;
+    public int fieldInt5168;
+    public int fieldInt5169;
+    public int fieldInt5170;
+    public int fieldInt5171;
+    public int fieldInt5172;
+    public int fieldInt5173;
+    public int fieldInt5174;
+    public int fieldInt5175;
+    public int fieldInt5176;
+    public int fieldInt5177;
+    public int fieldInt5178;
+    public int fieldInt5179;
+    public int fieldInt5180;
+    public int fieldInt5181;
+    public int fieldInt5182;
+    public int fieldInt5183;
+    public int fieldInt5184;
+    public int fieldInt5185;
+    public int fieldInt5186;
+    public int fieldInt5187;
+    public int fieldInt5188;
+    public int fieldInt5189;
+    public int fieldInt5190;
+    public int fieldInt5191;
+    public int fieldInt5192;
+    public int fieldInt5193;
+    public int fieldInt5194;
+    public int fieldInt5195;
+    public int fieldInt5196;
+    public int fieldInt5197;
+    public int fieldInt5198;
+    public int fieldInt5199;
+    public int fieldInt5200;
+    public int fieldInt5201;
+    public int fieldInt5202;
+    public int fieldInt5203;
+    public int fieldInt5204;
+    public int fieldInt5205;
+    public int fieldInt5206;
+    public int fieldInt5207;
+    public int fieldInt5208;
+    public int fieldInt5209;
+    public int fieldInt5210;
+    public int fieldInt5211;
+    public int fieldInt5212;
+    public int fieldInt5213;
+    public int fieldInt5214;
+    public int fieldInt5215;
+    public int fieldInt5216;
+    public int fieldInt5217;
+    public int fieldInt5218;
+    public int fieldInt5219;
+    public int fieldInt5220;
+    public int fieldInt5221;
+    public int fieldInt5222;
+    public int fieldInt5223;
+    public int fieldInt5224;
+    public int fieldInt5225;
+    public int fieldInt5226;
+    public int fieldInt5227;
+    public int fieldInt5228;
+    public int fieldInt5229;
+    public int fieldInt5230;
+    public int fieldInt5231;
+    public int fieldInt5232;
+    public int fieldInt5233;
+    public int fieldInt5234;
+    public int fieldInt5235;
+    public int fieldInt5236;
+    public int fieldInt5237;
+    public int fieldInt5238;
+    public int fieldInt5239;
+    public int fieldInt5240;
+    public int fieldInt5241;
+    public int fieldInt5242;
+    public int fieldInt5243;
+    public int fieldInt5244;
+    public int fieldInt5245;
+    public int fieldInt5246;
+    public int fieldInt5247;
+    public int fieldInt5248;
+    public int fieldInt5249;
+    public int fieldInt5250;
+    public int fieldInt5251;
+    public int fieldInt5252;
+    public int fieldInt5253;
+    public int fieldInt5254;
+    public int fieldInt5255;
+    public int fieldInt5256;
+    public int fieldInt5257;
+    public int fieldInt5258;
+    public int fieldInt5259;
+    public int fieldInt5260;
+    public int fieldInt5261;
+    public int fieldInt5262;
+    public int fieldInt5263;
+    public int fieldInt5264;
+    public int fieldInt5265;
+    public int fieldInt5266;
+    public int fieldInt5267;
+    public int fieldInt5268;
+    public int fieldInt5269;
+    public int fieldInt5270;
+    public int fieldInt5271;
+    public int fieldInt5272;
+    public int fieldInt5273;
+    public int fieldInt5274;
+    public int fieldInt5275;
+    public int fieldInt5276;
+    public int fieldInt5277;
+    public int fieldInt5278;
+    public int fieldInt5279;
+    public int fieldInt5280;
+    public int fieldInt5281;
+    public int fieldInt5282;
+    public int fieldInt5283;
+    public int fieldInt5284;
+    public int fieldInt5285;
+    public int fieldInt5286;
+    public int fieldInt5287;
+    public int fieldInt5288;
+    public int fieldInt5289;
+    public int fieldInt5290;
+    public int fieldInt5291;
+    public int fieldInt5292;
+    public int fieldInt5293;
+    public int fieldInt5294;
+    public int fieldInt5295;
+    public int fieldInt5296;
+    public int fieldInt5297;
+    public int fieldInt5298;
+    public int fieldInt5299;
+    public int fieldInt5300;
+    public int fieldInt5301;
+    public int fieldInt5302;
+    public int fieldInt5303;
+    public int fieldInt5304;
+    public int fieldInt5305;
+    public int fieldInt5306;
+    public int fieldInt5307;
+    public int fieldInt5308;
+    public int fieldInt5309;
+    public int fieldInt5310;
+    public int fieldInt5311;
+    public int fieldInt5312;
+    public int fieldInt5313;
+    public int fieldInt5314;
+    public int fieldInt5315;
+    public int fieldInt5316;
+    public int fieldInt5317;
+    public int fieldInt5318;
+    public int fieldInt5319;
+    public int fieldInt5320;
+    public int fieldInt5321;
+    public int fieldInt5322;
+    public int fieldInt5323;
+    public int fieldInt5324;
+    public int fieldInt5325;
+    public int fieldInt5326;
+    public int fieldInt5327;
+    public int fieldInt5328;
+    public int fieldInt5329;
+    public int fieldInt5330;
+    public int fieldInt5331;
+    public int fieldInt5332;
+    public int fieldInt5333;
+    public int fieldInt5334;
+    public int fieldInt5335;
+    public int fieldInt5336;
+    public int fieldInt5337;
+    public int fieldInt5338;
+    public int fieldInt5339;
+    public int fieldInt5340;
+    public int fieldInt5341;
+    public int fieldInt5342;
+    public int fieldInt5343;
+    public int fieldInt5344;
+    public int fieldInt5345;
+    public int fieldInt5346;
+    public int fieldInt5347;
+    public int fieldInt5348;
+    public int fieldInt5349;
+    public int fieldInt5350;
+    public int fieldInt5351;
+    public int fieldInt5352;
+    public int fieldInt5353;
+    public int fieldInt5354;
+    public int fieldInt5355;
+    public int fieldInt5356;
+    public int fieldInt5357;
+    public int fieldInt5358;
+    public int fieldInt5359;
+    public int fieldInt5360;
+    public int fieldInt5361;
+    public int fieldInt5362;
+    public int fieldInt5363;
+    public int fieldInt5364;
+    public int fieldInt5365;
+    public int fieldInt5366;
+    public int fieldInt5367;
+    public int fieldInt5368;
+    public int fieldInt5369;
+    public int fieldInt5370;
+    public int fieldInt5371;
+    public int fieldInt5372;
+    public int fieldInt5373;
+    public int fieldInt5374;
+    public int fieldInt5375;
+    public int fieldInt5376;
+    public int fieldInt5377;
+    public int fieldInt5378;
+    public int fieldInt5379;
+    public int fieldInt5380;
+    public int fieldInt5381;
+    public int fieldInt5382;
+    public int fieldInt5383;
+    public int fieldInt5384;
+    public int fieldInt5385;
+    public int fieldInt5386;
+    public int fieldInt5387;
+    public int fieldInt5388;
+    public int fieldInt5389;
+    public int fieldInt5390;
+    public int fieldInt5391;
+    public int fieldInt5392;
+    public int fieldInt5393;
+    public int fieldInt5394;
+    public int fieldInt5395;
+    public int fieldInt5396;
+    public int fieldInt5397;
+    public int fieldInt5398;
+    public int fieldInt5399;
+    public int fieldInt5400;
+    public int fieldInt5401;
+    public int fieldInt5402;
+    public int fieldInt5403;
+    public int fieldInt5404;
+    public int fieldInt5405;
+    public int fieldInt5406;
+    public int fieldInt5407;
+    public int fieldInt5408;
+    public int fieldInt5409;
+    public int fieldInt5410;
+    public int fieldInt5411;
+    public int fieldInt5412;
+    public int fieldInt5413;
+    public int fieldInt5414;
+    public int fieldInt5415;
+    public int fieldInt5416;
+    public int fieldInt5417;
+    public int fieldInt5418;
+    public int fieldInt5419;
+    public int fieldInt5420;
+    public int fieldInt5421;
+    public int fieldInt5422;
+    public int fieldInt5423;
+    public int fieldInt5424;
+    public int fieldInt5425;
+    public int fieldInt5426;
+    public int fieldInt5427;
+    public int fieldInt5428;
+    public int fieldInt5429;
+    public int fieldInt5430;
+    public int fieldInt5431;
+    public int fieldInt5432;
+    public int fieldInt5433;
+    public int fieldInt5434;
+    public int fieldInt5435;
+    public int fieldInt5436;
+    public int fieldInt5437;
+    public int fieldInt5438;
+    public int fieldInt5439;
+    public int fieldInt5440;
+    public int fieldInt5441;
+    public int fieldInt5442;
+    public int fieldInt5443;
+    public int fieldInt5444;
+    public int fieldInt5445;
+    public int fieldInt5446;
+    public int fieldInt5447;
+    public int fieldInt5448;
+    public int fieldInt5449;
+    public int fieldInt5450;
+    public int fieldInt5451;
+    public int fieldInt5452;
+    public int fieldInt5453;
+    public int fieldInt5454;
+    public int fieldInt5455;
+    public int fieldInt5456;
+    public int fieldInt5457;
+    public int fieldInt5458;
+    public int fieldInt5459;
+    public int fieldInt5460;
+    public int fieldInt5461;
+    public int fieldInt5462;
+    public int fieldInt5463;
+    public int fieldInt5464;
+    public int fieldInt5465;
+    public int fieldInt5466;
+    public int fieldInt5467;
+    public int fieldInt5468;
+    public int fieldInt5469;
+    public int fieldInt5470;
+    public int fieldInt5471;
+    public int fieldInt5472;
+    public int fieldInt5473;
+    public int fieldInt5474;
+    public int fieldInt5475;
+    public int fieldInt5476;
+    public int fieldInt5477;
+    public int fieldInt5478;
+    public int fieldInt5479;
+    public int fieldInt5480;
+    public int fieldInt5481;
+    public int fieldInt5482;
+    public int fieldInt5483;
+    public int fieldInt5484;
+    public int fieldInt5485;
+    public int fieldInt5486;
+    public int fieldInt5487;
+    public int fieldInt5488;
+    public int fieldInt5489;
+    public int fieldInt5490;
+    public int fieldInt5491;
+    public int fieldInt5492;
+    public int fieldInt5493;
+    public int fieldInt5494;
+    public int fieldInt5495;
+    public int fieldInt5496;
+    public int fieldInt5497;
+    public int fieldInt5498;
+    public int fieldInt5499;
+    public int fieldInt5500;
+    public int fieldInt5501;
+    public int fieldInt5502;
+    public int fieldInt5503;
+    public int fieldInt5504;
+    public int fieldInt5505;
+    public int fieldInt5506;
+    public int fieldInt5507;
+    public int fieldInt5508;
+    public int fieldInt5509;
+    public int fieldInt5510;
+    public int fieldInt5511;
+    public int fieldInt5512;
+    public int fieldInt5513;
+    public int fieldInt5514;
+    public int fieldInt5515;
+    public int fieldInt5516;
+    public int fieldInt5517;
+    public int fieldInt5518;
+    public int fieldInt5519;
+    public int fieldInt5520;
+    public int fieldInt5521;
+    public int fieldInt5522;
+    public int fieldInt5523;
+    public int fieldInt5524;
+    public int fieldInt5525;
+    public int fieldInt5526;
+    public int fieldInt5527;
+    public int fieldInt5528;
+    public int fieldInt5529;
+    public int fieldInt5530;
+    public int fieldInt5531;
+    public int fieldInt5532;
+    public int fieldInt5533;
+    public int fieldInt5534;
+    public int fieldInt5535;
+    public int fieldInt5536;
+    public int fieldInt5537;
+    public int fieldInt5538;
+    public int fieldInt5539;
+    public int fieldInt5540;
+    public int fieldInt5541;
+    public int fieldInt5542;
+    public int fieldInt5543;
+    public int fieldInt5544;
+    public int fieldInt5545;
+    public int fieldInt5546;
+    public int fieldInt5547;
+    public int fieldInt5548;
+    public int fieldInt5549;
+    public int fieldInt5550;
+    public int fieldInt5551;
+    public int fieldInt5552;
+    public int fieldInt5553;
+    public int fieldInt5554;
+    public int fieldInt5555;
+    public int fieldInt5556;
+    public int fieldInt5557;
+    public int fieldInt5558;
+    public int fieldInt5559;
+    public int fieldInt5560;
+    public int fieldInt5561;
+    public int fieldInt5562;
+    public int fieldInt5563;
+    public int fieldInt5564;
+    public int fieldInt5565;
+    public int fieldInt5566;
+    public int fieldInt5567;
+    public int fieldInt5568;
+    public int fieldInt5569;
+    public int fieldInt5570;
+    public int fieldInt5571;
+    public int fieldInt5572;
+    public int fieldInt5573;
+    public int fieldInt5574;
+    public int fieldInt5575;
+    public int fieldInt5576;
+    public int fieldInt5577;
+    public int fieldInt5578;
+    public int fieldInt5579;
+    public int fieldInt5580;
+    public int fieldInt5581;
+    public int fieldInt5582;
+    public int fieldInt5583;
+    public int fieldInt5584;
+    public int fieldInt5585;
+    public int fieldInt5586;
+    public int fieldInt5587;
+    public int fieldInt5588;
+    public int fieldInt5589;
+    public int fieldInt5590;
+    public int fieldInt5591;
+    public int fieldInt5592;
+    public int fieldInt5593;
+    public int fieldInt5594;
+    public int fieldInt5595;
+    public int fieldInt5596;
+    public int fieldInt5597;
+    public int fieldInt5598;
+    public int fieldInt5599;
+    public int fieldInt5600;
+    public int fieldInt5601;
+    public int fieldInt5602;
+    public int fieldInt5603;
+    public int fieldInt5604;
+    public int fieldInt5605;
+    public int fieldInt5606;
+    public int fieldInt5607;
+    public int fieldInt5608;
+    public int fieldInt5609;
+    public int fieldInt5610;
+    public int fieldInt5611;
+    public int fieldInt5612;
+    public int fieldInt5613;
+    public int fieldInt5614;
+    public int fieldInt5615;
+    public int fieldInt5616;
+    public int fieldInt5617;
+    public int fieldInt5618;
+    public int fieldInt5619;
+    public int fieldInt5620;
+    public int fieldInt5621;
+    public int fieldInt5622;
+    public int fieldInt5623;
+    public int fieldInt5624;
+    public int fieldInt5625;
+    public int fieldInt5626;
+    public int fieldInt5627;
+    public int fieldInt5628;
+    public int fieldInt5629;
+    public int fieldInt5630;
+    public int fieldInt5631;
+    public int fieldInt5632;
+    public int fieldInt5633;
+    public int fieldInt5634;
+    public int fieldInt5635;
+    public int fieldInt5636;
+    public int fieldInt5637;
+    public int fieldInt5638;
+    public int fieldInt5639;
+    public int fieldInt5640;
+    public int fieldInt5641;
+    public int fieldInt5642;
+    public int fieldInt5643;
+    public int fieldInt5644;
+    public int fieldInt5645;
+    public int fieldInt5646;
+    public int fieldInt5647;
+    public int fieldInt5648;
+    public int fieldInt5649;
+    public int fieldInt5650;
+    public int fieldInt5651;
+    public int fieldInt5652;
+    public int fieldInt5653;
+    public int fieldInt5654;
+    public int fieldInt5655;
+    public int fieldInt5656;
+    public int fieldInt5657;
+    public int fieldInt5658;
+    public int fieldInt5659;
+    public int fieldInt5660;
+    public int fieldInt5661;
+    public int fieldInt5662;
+    public int fieldInt5663;
+    public int fieldInt5664;
+    public int fieldInt5665;
+    public int fieldInt5666;
+    public int fieldInt5667;
+    public int fieldInt5668;
+    public int fieldInt5669;
+    public int fieldInt5670;
+    public int fieldInt5671;
+    public int fieldInt5672;
+    public int fieldInt5673;
+    public int fieldInt5674;
+    public int fieldInt5675;
+    public int fieldInt5676;
+    public int fieldInt5677;
+    public int fieldInt5678;
+    public int fieldInt5679;
+    public int fieldInt5680;
+    public int fieldInt5681;
+    public int fieldInt5682;
+    public int fieldInt5683;
+    public int fieldInt5684;
+    public int fieldInt5685;
+    public int fieldInt5686;
+    public int fieldInt5687;
+    public int fieldInt5688;
+    public int fieldInt5689;
+    public int fieldInt5690;
+    public int fieldInt5691;
+    public int fieldInt5692;
+    public int fieldInt5693;
+    public int fieldInt5694;
+    public int fieldInt5695;
+    public int fieldInt5696;
+    public int fieldInt5697;
+    public int fieldInt5698;
+    public int fieldInt5699;
+    public int fieldInt5700;
+    public int fieldInt5701;
+    public int fieldInt5702;
+    public int fieldInt5703;
+    public int fieldInt5704;
+    public int fieldInt5705;
+    public int fieldInt5706;
+    public int fieldInt5707;
+    public int fieldInt5708;
+    public int fieldInt5709;
+    public int fieldInt5710;
+    public int fieldInt5711;
+    public int fieldInt5712;
+    public int fieldInt5713;
+    public int fieldInt5714;
+    public int fieldInt5715;
+    public int fieldInt5716;
+    public int fieldInt5717;
+    public int fieldInt5718;
+    public int fieldInt5719;
+    public int fieldInt5720;
+    public int fieldInt5721;
+    public int fieldInt5722;
+    public int fieldInt5723;
+    public int fieldInt5724;
+    public int fieldInt5725;
+    public int fieldInt5726;
+    public int fieldInt5727;
+    public int fieldInt5728;
+    public int fieldInt5729;
+    public int fieldInt5730;
+    public int fieldInt5731;
+    public int fieldInt5732;
+    public int fieldInt5733;
+    public int fieldInt5734;
+    public int fieldInt5735;
+    public int fieldInt5736;
+    public int fieldInt5737;
+    public int fieldInt5738;
+    public int fieldInt5739;
+    public int fieldInt5740;
+    public int fieldInt5741;
+    public int fieldInt5742;
+    public int fieldInt5743;
+    public int fieldInt5744;
+    public int fieldInt5745;
+    public int fieldInt5746;
+    public int fieldInt5747;
+    public int fieldInt5748;
+    public int fieldInt5749;
+    public int fieldInt5750;
+    public int fieldInt5751;
+    public int fieldInt5752;
+    public int fieldInt5753;
+    public int fieldInt5754;
+    public int fieldInt5755;
+    public int fieldInt5756;
+    public int fieldInt5757;
+    public int fieldInt5758;
+    public int fieldInt5759;
+    public int fieldInt5760;
+    public int fieldInt5761;
+    public int fieldInt5762;
+    public int fieldInt5763;
+    public int fieldInt5764;
+    public int fieldInt5765;
+    public int fieldInt5766;
+    public int fieldInt5767;
+    public int fieldInt5768;
+    public int fieldInt5769;
+    public int fieldInt5770;
+    public int fieldInt5771;
+    public int fieldInt5772;
+    public int fieldInt5773;
+    public int fieldInt5774;
+    public int fieldInt5775;
+    public int fieldInt5776;
+    public int fieldInt5777;
+    public int fieldInt5778;
+    public int fieldInt5779;
+    public int fieldInt5780;
+    public int fieldInt5781;
+    public int fieldInt5782;
+    public int fieldInt5783;
+    public int fieldInt5784;
+    public int fieldInt5785;
+    public int fieldInt5786;
+    public int fieldInt5787;
+    public int fieldInt5788;
+    public int fieldInt5789;
+    public int fieldInt5790;
+    public int fieldInt5791;
+    public int fieldInt5792;
+    public int fieldInt5793;
+    public int fieldInt5794;
+    public int fieldInt5795;
+    public int fieldInt5796;
+    public int fieldInt5797;
+    public int fieldInt5798;
+    public int fieldInt5799;
+    public int fieldInt5800;
+    public int fieldInt5801;
+    public int fieldInt5802;
+    public int fieldInt5803;
+    public int fieldInt5804;
+    public int fieldInt5805;
+    public int fieldInt5806;
+    public int fieldInt5807;
+    public int fieldInt5808;
+    public int fieldInt5809;
+    public int fieldInt5810;
+    public int fieldInt5811;
+    public int fieldInt5812;
+    public int fieldInt5813;
+    public int fieldInt5814;
+    public int fieldInt5815;
+    public int fieldInt5816;
+    public int fieldInt5817;
+    public int fieldInt5818;
+    public int fieldInt5819;
+    public int fieldInt5820;
+    public int fieldInt5821;
+    public int fieldInt5822;
+    public int fieldInt5823;
+    public int fieldInt5824;
+    public int fieldInt5825;
+    public int fieldInt5826;
+    public int fieldInt5827;
+    public int fieldInt5828;
+    public int fieldInt5829;
+    public int fieldInt5830;
+    public int fieldInt5831;
+    public int fieldInt5832;
+    public int fieldInt5833;
+    public int fieldInt5834;
+    public int fieldInt5835;
+    public int fieldInt5836;
+    public int fieldInt5837;
+    public int fieldInt5838;
+    public int fieldInt5839;
+    public int fieldInt5840;
+    public int fieldInt5841;
+    public int fieldInt5842;
+    public int fieldInt5843;
+    public int fieldInt5844;
+    public int fieldInt5845;
+    public int fieldInt5846;
+    public int fieldInt5847;
+    public int fieldInt5848;
+    public int fieldInt5849;
+    public int fieldInt5850;
+    public int fieldInt5851;
+    public int fieldInt5852;
+    public int fieldInt5853;
+    public int fieldInt5854;
+    public int fieldInt5855;
+    public int fieldInt5856;
+    public int fieldInt5857;
+    public int fieldInt5858;
+    public int fieldInt5859;
+    public int fieldInt5860;
+    public int fieldInt5861;
+    public int fieldInt5862;
+    public int fieldInt5863;
+    public int fieldInt5864;
+    public int fieldInt5865;
+    public int fieldInt5866;
+    public int fieldInt5867;
+    public int fieldInt5868;
+    public int fieldInt5869;
+    public int fieldInt5870;
+    public int fieldInt5871;
+    public int fieldInt5872;
+    public int fieldInt5873;
+    public int fieldInt5874;
+    public int fieldInt5875;
+    public int fieldInt5876;
+    public int fieldInt5877;
+    public int fieldInt5878;
+    public int fieldInt5879;
+    public int fieldInt5880;
+    public int fieldInt5881;
+    public int fieldInt5882;
+    public int fieldInt5883;
+    public int fieldInt5884;
+    public int fieldInt5885;
+    public int fieldInt5886;
+    public int fieldInt5887;
+    public int fieldInt5888;
+    public int fieldInt5889;
+    public int fieldInt5890;
+    public int fieldInt5891;
+    public int fieldInt5892;
+    public int fieldInt5893;
+    public int fieldInt5894;
+    public int fieldInt5895;
+    public int fieldInt5896;
+    public int fieldInt5897;
+    public int fieldInt5898;
+    public int fieldInt5899;
+    public int fieldInt5900;
+    public int fieldInt5901;
+    public int fieldInt5902;
+    public int fieldInt5903;
+    public int fieldInt5904;
+    public int fieldInt5905;
+    public int fieldInt5906;
+    public int fieldInt5907;
+    public int fieldInt5908;
+    public int fieldInt5909;
+    public int fieldInt5910;
+    public int fieldInt5911;
+    public int fieldInt5912;
+    public int fieldInt5913;
+    public int fieldInt5914;
+    public int fieldInt5915;
+    public int fieldInt5916;
+    public int fieldInt5917;
+    public int fieldInt5918;
+    public int fieldInt5919;
+    public int fieldInt5920;
+    public int fieldInt5921;
+    public int fieldInt5922;
+    public int fieldInt5923;
+    public int fieldInt5924;
+    public int fieldInt5925;
+    public int fieldInt5926;
+    public int fieldInt5927;
+    public int fieldInt5928;
+    public int fieldInt5929;
+    public int fieldInt5930;
+    public int fieldInt5931;
+    public int fieldInt5932;
+    public int fieldInt5933;
+    public int fieldInt5934;
+    public int fieldInt5935;
+    public int fieldInt5936;
+    public int fieldInt5937;
+    public int fieldInt5938;
+    public int fieldInt5939;
+    public int fieldInt5940;
+    public int fieldInt5941;
+    public int fieldInt5942;
+    public int fieldInt5943;
+    public int fieldInt5944;
+    public int fieldInt5945;
+    public int fieldInt5946;
+    public int fieldInt5947;
+    public int fieldInt5948;
+    public int fieldInt5949;
+    public int fieldInt5950;
+    public int fieldInt5951;
+    public int fieldInt5952;
+    public int fieldInt5953;
+    public int fieldInt5954;
+    public int fieldInt5955;
+    public int fieldInt5956;
+    public int fieldInt5957;
+    public int fieldInt5958;
+    public int fieldInt5959;
+    public int fieldInt5960;
+    public int fieldInt5961;
+    public int fieldInt5962;
+    public int fieldInt5963;
+    public int fieldInt5964;
+    public int fieldInt5965;
+    public int fieldInt5966;
+    public int fieldInt5967;
+    public int fieldInt5968;
+    public int fieldInt5969;
+    public int fieldInt5970;
+    public int fieldInt5971;
+    public int fieldInt5972;
+    public int fieldInt5973;
+    public int fieldInt5974;
+    public int fieldInt5975;
+    public int fieldInt5976;
+    public int fieldInt5977;
+    public int fieldInt5978;
+    public int fieldInt5979;
+    public int fieldInt5980;
+    public int fieldInt5981;
+    public int fieldInt5982;
+    public int fieldInt5983;
+    public int fieldInt5984;
+    public int fieldInt5985;
+    public int fieldInt5986;
+    public int fieldInt5987;
+    public int fieldInt5988;
+    public int fieldInt5989;
+    public int fieldInt5990;
+    public int fieldInt5991;
+    public int fieldInt5992;
+    public int fieldInt5993;
+    public int fieldInt5994;
+    public int fieldInt5995;
+    public int fieldInt5996;
+    public int fieldInt5997;
+    public int fieldInt5998;
+    public int fieldInt5999;
+    public int fieldInt6000;
+    public int fieldInt6001;
+    public int fieldInt6002;
+    public int fieldInt6003;
+    public int fieldInt6004;
+    public int fieldInt6005;
+    public int fieldInt6006;
+    public int fieldInt6007;
+    public int fieldInt6008;
+    public int fieldInt6009;
+    public int fieldInt6010;
+    public int fieldInt6011;
+    public int fieldInt6012;
+    public int fieldInt6013;
+    public int fieldInt6014;
+    public int fieldInt6015;
+    public int fieldInt6016;
+    public int fieldInt6017;
+    public int fieldInt6018;
+    public int fieldInt6019;
+    public int fieldInt6020;
+    public int fieldInt6021;
+    public int fieldInt6022;
+    public int fieldInt6023;
+    public int fieldInt6024;
+    public int fieldInt6025;
+    public int fieldInt6026;
+    public int fieldInt6027;
+    public int fieldInt6028;
+    public int fieldInt6029;
+    public int fieldInt6030;
+    public int fieldInt6031;
+    public int fieldInt6032;
+    public int fieldInt6033;
+    public int fieldInt6034;
+    public int fieldInt6035;
+    public int fieldInt6036;
+    public int fieldInt6037;
+    public int fieldInt6038;
+    public int fieldInt6039;
+    public int fieldInt6040;
+    public int fieldInt6041;
+    public int fieldInt6042;
+    public int fieldInt6043;
+    public int fieldInt6044;
+    public int fieldInt6045;
+    public int fieldInt6046;
+    public int fieldInt6047;
+    public int fieldInt6048;
+    public int fieldInt6049;
+    public int fieldInt6050;
+    public int fieldInt6051;
+    public int fieldInt6052;
+    public int fieldInt6053;
+    public int fieldInt6054;
+    public int fieldInt6055;
+    public int fieldInt6056;
+    public int fieldInt6057;
+    public int fieldInt6058;
+    public int fieldInt6059;
+    public int fieldInt6060;
+    public int fieldInt6061;
+    public int fieldInt6062;
+    public int fieldInt6063;
+    public int fieldInt6064;
+    public int fieldInt6065;
+    public int fieldInt6066;
+    public int fieldInt6067;
+    public int fieldInt6068;
+    public int fieldInt6069;
+    public int fieldInt6070;
+    public int fieldInt6071;
+    public int fieldInt6072;
+    public int fieldInt6073;
+    public int fieldInt6074;
+    public int fieldInt6075;
+    public int fieldInt6076;
+    public int fieldInt6077;
+    public int fieldInt6078;
+    public int fieldInt6079;
+    public int fieldInt6080;
+    public int fieldInt6081;
+    public int fieldInt6082;
+    public int fieldInt6083;
+    public int fieldInt6084;
+    public int fieldInt6085;
+    public int fieldInt6086;
+    public int fieldInt6087;
+    public int fieldInt6088;
+    public int fieldInt6089;
+    public int fieldInt6090;
+    public int fieldInt6091;
+    public int fieldInt6092;
+    public int fieldInt6093;
+    public int fieldInt6094;
+    public int fieldInt6095;
+    public int fieldInt6096;
+    public int fieldInt6097;
+    public int fieldInt6098;
+    public int fieldInt6099;
+    public int fieldInt6100;
+    public int fieldInt6101;
+    public int fieldInt6102;
+    public int fieldInt6103;
+    public int fieldInt6104;
+    public int fieldInt6105;
+    public int fieldInt6106;
+    public int fieldInt6107;
+    public int fieldInt6108;
+    public int fieldInt6109;
+    public int fieldInt6110;
+    public int fieldInt6111;
+    public int fieldInt6112;
+    public int fieldInt6113;
+    public int fieldInt6114;
+    public int fieldInt6115;
+    public int fieldInt6116;
+    public int fieldInt6117;
+    public int fieldInt6118;
+    public int fieldInt6119;
+    public int fieldInt6120;
+    public int fieldInt6121;
+    public int fieldInt6122;
+    public int fieldInt6123;
+    public int fieldInt6124;
+    public int fieldInt6125;
+    public int fieldInt6126;
+    public int fieldInt6127;
+    public int fieldInt6128;
+    public int fieldInt6129;
+    public int fieldInt6130;
+    public int fieldInt6131;
+    public int fieldInt6132;
+    public int fieldInt6133;
+    public int fieldInt6134;
+    public int fieldInt6135;
+    public int fieldInt6136;
+    public int fieldInt6137;
+    public int fieldInt6138;
+    public int fieldInt6139;
+    public int fieldInt6140;
+    public int fieldInt6141;
+    public int fieldInt6142;
+    public int fieldInt6143;
+    public int fieldInt6144;
+    public int fieldInt6145;
+    public int fieldInt6146;
+    public int fieldInt6147;
+    public int fieldInt6148;
+    public int fieldInt6149;
+    public int fieldInt6150;
+    public int fieldInt6151;
+    public int fieldInt6152;
+    public int fieldInt6153;
+    public int fieldInt6154;
+    public int fieldInt6155;
+    public int fieldInt6156;
+    public int fieldInt6157;
+    public int fieldInt6158;
+    public int fieldInt6159;
+    public int fieldInt6160;
+    public int fieldInt6161;
+    public int fieldInt6162;
+    public int fieldInt6163;
+    public int fieldInt6164;
+    public int fieldInt6165;
+    public int fieldInt6166;
+    public int fieldInt6167;
+    public int fieldInt6168;
+    public int fieldInt6169;
+    public int fieldInt6170;
+    public int fieldInt6171;
+    public int fieldInt6172;
+    public int fieldInt6173;
+    public int fieldInt6174;
+    public int fieldInt6175;
+    public int fieldInt6176;
+    public int fieldInt6177;
+    public int fieldInt6178;
+    public int fieldInt6179;
+    public int fieldInt6180;
+    public int fieldInt6181;
+    public int fieldInt6182;
+    public int fieldInt6183;
+    public int fieldInt6184;
+    public int fieldInt6185;
+    public int fieldInt6186;
+    public int fieldInt6187;
+    public int fieldInt6188;
+    public int fieldInt6189;
+    public int fieldInt6190;
+    public int fieldInt6191;
+    public int fieldInt6192;
+    public int fieldInt6193;
+    public int fieldInt6194;
+    public int fieldInt6195;
+    public int fieldInt6196;
+    public int fieldInt6197;
+    public int fieldInt6198;
+    public int fieldInt6199;
+    public int fieldInt6200;
+    public int fieldInt6201;
+    public int fieldInt6202;
+    public int fieldInt6203;
+    public int fieldInt6204;
+    public int fieldInt6205;
+    public int fieldInt6206;
+    public int fieldInt6207;
+    public int fieldInt6208;
+    public int fieldInt6209;
+    public int fieldInt6210;
+    public int fieldInt6211;
+    public int fieldInt6212;
+    public int fieldInt6213;
+    public int fieldInt6214;
+    public int fieldInt6215;
+    public int fieldInt6216;
+    public int fieldInt6217;
+    public int fieldInt6218;
+    public int fieldInt6219;
+    public int fieldInt6220;
+    public int fieldInt6221;
+    public int fieldInt6222;
+    public int fieldInt6223;
+    public int fieldInt6224;
+    public int fieldInt6225;
+    public int fieldInt6226;
+    public int fieldInt6227;
+    public int fieldInt6228;
+    public int fieldInt6229;
+    public int fieldInt6230;
+    public int fieldInt6231;
+    public int fieldInt6232;
+    public int fieldInt6233;
+    public int fieldInt6234;
+    public int fieldInt6235;
+    public int fieldInt6236;
+    public int fieldInt6237;
+    public int fieldInt6238;
+    public int fieldInt6239;
+    public int fieldInt6240;
+    public int fieldInt6241;
+    public int fieldInt6242;
+    public int fieldInt6243;
+    public int fieldInt6244;
+    public int fieldInt6245;
+    public int fieldInt6246;
+    public int fieldInt6247;
+    public int fieldInt6248;
+    public int fieldInt6249;
+    public int fieldInt6250;
+    public int fieldInt6251;
+    public int fieldInt6252;
+    public int fieldInt6253;
+    public int fieldInt6254;
+    public int fieldInt6255;
+    public int fieldInt6256;
+    public int fieldInt6257;
+    public int fieldInt6258;
+    public int fieldInt6259;
+    public int fieldInt6260;
+    public int fieldInt6261;
+    public int fieldInt6262;
+    public int fieldInt6263;
+    public int fieldInt6264;
+    public int fieldInt6265;
+    public int fieldInt6266;
+    public int fieldInt6267;
+    public int fieldInt6268;
+    public int fieldInt6269;
+    public int fieldInt6270;
+    public int fieldInt6271;
+    public int fieldInt6272;
+    public int fieldInt6273;
+    public int fieldInt6274;
+    public int fieldInt6275;
+    public int fieldInt6276;
+    public int fieldInt6277;
+    public int fieldInt6278;
+    public int fieldInt6279;
+    public int fieldInt6280;
+    public int fieldInt6281;
+    public int fieldInt6282;
+    public int fieldInt6283;
+    public int fieldInt6284;
+    public int fieldInt6285;
+    public int fieldInt6286;
+    public int fieldInt6287;
+    public int fieldInt6288;
+    public int fieldInt6289;
+    public int fieldInt6290;
+    public int fieldInt6291;
+    public int fieldInt6292;
+    public int fieldInt6293;
+    public int fieldInt6294;
+    public int fieldInt6295;
+    public int fieldInt6296;
+    public int fieldInt6297;
+    public int fieldInt6298;
+    public int fieldInt6299;
+    public int fieldInt6300;
+    public int fieldInt6301;
+    public int fieldInt6302;
+    public int fieldInt6303;
+    public int fieldInt6304;
+    public int fieldInt6305;
+    public int fieldInt6306;
+    public int fieldInt6307;
+    public int fieldInt6308;
+    public int fieldInt6309;
+    public int fieldInt6310;
+    public int fieldInt6311;
+    public int fieldInt6312;
+    public int fieldInt6313;
+    public int fieldInt6314;
+    public int fieldInt6315;
+    public int fieldInt6316;
+    public int fieldInt6317;
+    public int fieldInt6318;
+    public int fieldInt6319;
+    public int fieldInt6320;
+    public int fieldInt6321;
+    public int fieldInt6322;
+    public int fieldInt6323;
+    public int fieldInt6324;
+    public int fieldInt6325;
+    public int fieldInt6326;
+    public int fieldInt6327;
+    public int fieldInt6328;
+    public int fieldInt6329;
+    public int fieldInt6330;
+    public int fieldInt6331;
+    public int fieldInt6332;
+    public int fieldInt6333;
+    public int fieldInt6334;
+    public int fieldInt6335;
+    public int fieldInt6336;
+    public int fieldInt6337;
+    public int fieldInt6338;
+    public int fieldInt6339;
+    public int fieldInt6340;
+    public int fieldInt6341;
+    public int fieldInt6342;
+    public int fieldInt6343;
+    public int fieldInt6344;
+    public int fieldInt6345;
+    public int fieldInt6346;
+    public int fieldInt6347;
+    public int fieldInt6348;
+    public int fieldInt6349;
+    public int fieldInt6350;
+    public int fieldInt6351;
+    public int fieldInt6352;
+    public int fieldInt6353;
+    public int fieldInt6354;
+    public int fieldInt6355;
+    public int fieldInt6356;
+    public int fieldInt6357;
+    public int fieldInt6358;
+    public int fieldInt6359;
+    public int fieldInt6360;
+    public int fieldInt6361;
+    public int fieldInt6362;
+    public int fieldInt6363;
+    public int fieldInt6364;
+    public int fieldInt6365;
+    public int fieldInt6366;
+    public int fieldInt6367;
+    public int fieldInt6368;
+    public int fieldInt6369;
+    public int fieldInt6370;
+    public int fieldInt6371;
+    public int fieldInt6372;
+    public int fieldInt6373;
+    public int fieldInt6374;
+    public int fieldInt6375;
+    public int fieldInt6376;
+    public int fieldInt6377;
+    public int fieldInt6378;
+    public int fieldInt6379;
+    public int fieldInt6380;
+    public int fieldInt6381;
+    public int fieldInt6382;
+    public int fieldInt6383;
+    public int fieldInt6384;
+    public int fieldInt6385;
+    public int fieldInt6386;
+    public int fieldInt6387;
+    public int fieldInt6388;
+    public int fieldInt6389;
+    public int fieldInt6390;
+    public int fieldInt6391;
+    public int fieldInt6392;
+    public int fieldInt6393;
+    public int fieldInt6394;
+    public int fieldInt6395;
+    public int fieldInt6396;
+    public int fieldInt6397;
+    public int fieldInt6398;
+    public int fieldInt6399;
+    public int fieldInt6400;
+    public int fieldInt6401;
+    public int fieldInt6402;
+    public int fieldInt6403;
+    public int fieldInt6404;
+    public int fieldInt6405;
+    public int fieldInt6406;
+    public int fieldInt6407;
+    public int fieldInt6408;
+    public int fieldInt6409;
+    public int fieldInt6410;
+    public int fieldInt6411;
+    public int fieldInt6412;
+    public int fieldInt6413;
+    public int fieldInt6414;
+    public int fieldInt6415;
+    public int fieldInt6416;
+    public int fieldInt6417;
+    public int fieldInt6418;
+    public int fieldInt6419;
+    public int fieldInt6420;
+    public int fieldInt6421;
+    public int fieldInt6422;
+    public int fieldInt6423;
+    public int fieldInt6424;
+    public int fieldInt6425;
+    public int fieldInt6426;
+    public int fieldInt6427;
+    public int fieldInt6428;
+    public int fieldInt6429;
+    public int fieldInt6430;
+    public int fieldInt6431;
+    public int fieldInt6432;
+    public int fieldInt6433;
+    public int fieldInt6434;
+    public int fieldInt6435;
+    public int fieldInt6436;
+    public int fieldInt6437;
+    public int fieldInt6438;
+    public int fieldInt6439;
+    public int fieldInt6440;
+    public int fieldInt6441;
+    public int fieldInt6442;
+    public int fieldInt6443;
+    public int fieldInt6444;
+    public int fieldInt6445;
+    public int fieldInt6446;
+    public int fieldInt6447;
+    public int fieldInt6448;
+    public int fieldInt6449;
+    public int fieldInt6450;
+    public int fieldInt6451;
+    public int fieldInt6452;
+    public int fieldInt6453;
+    public int fieldInt6454;
+    public int fieldInt6455;
+    public int fieldInt6456;
+    public int fieldInt6457;
+    public int fieldInt6458;
+    public int fieldInt6459;
+    public int fieldInt6460;
+    public int fieldInt6461;
+    public int fieldInt6462;
+    public int fieldInt6463;
+    public int fieldInt6464;
+    public int fieldInt6465;
+    public int fieldInt6466;
+    public int fieldInt6467;
+    public int fieldInt6468;
+    public int fieldInt6469;
+    public int fieldInt6470;
+    public int fieldInt6471;
+    public int fieldInt6472;
+    public int fieldInt6473;
+    public int fieldInt6474;
+    public int fieldInt6475;
+    public int fieldInt6476;
+    public int fieldInt6477;
+    public int fieldInt6478;
+    public int fieldInt6479;
+    public int fieldInt6480;
+    public int fieldInt6481;
+    public int fieldInt6482;
+    public int fieldInt6483;
+    public int fieldInt6484;
+    public int fieldInt6485;
+    public int fieldInt6486;
+    public int fieldInt6487;
+    public int fieldInt6488;
+    public int fieldInt6489;
+    public int fieldInt6490;
+    public int fieldInt6491;
+    public int fieldInt6492;
+    public int fieldInt6493;
+    public int fieldInt6494;
+    public int fieldInt6495;
+    public int fieldInt6496;
+    public int fieldInt6497;
+    public int fieldInt6498;
+    public int fieldInt6499;
+    public int fieldInt6500;
+    public int fieldInt6501;
+    public int fieldInt6502;
+    public int fieldInt6503;
+    public int fieldInt6504;
+    public int fieldInt6505;
+    public int fieldInt6506;
+    public int fieldInt6507;
+    public int fieldInt6508;
+    public int fieldInt6509;
+    public int fieldInt6510;
+    public int fieldInt6511;
+    public int fieldInt6512;
+    public int fieldInt6513;
+    public int fieldInt6514;
+    public int fieldInt6515;
+    public int fieldInt6516;
+    public int fieldInt6517;
+    public int fieldInt6518;
+    public int fieldInt6519;
+    public int fieldInt6520;
+    public int fieldInt6521;
+    public int fieldInt6522;
+    public int fieldInt6523;
+    public int fieldInt6524;
+    public int fieldInt6525;
+    public int fieldInt6526;
+    public int fieldInt6527;
+    public int fieldInt6528;
+    public int fieldInt6529;
+    public int fieldInt6530;
+    public int fieldInt6531;
+    public int fieldInt6532;
+    public int fieldInt6533;
+    public int fieldInt6534;
+    public int fieldInt6535;
+    public int fieldInt6536;
+    public int fieldInt6537;
+    public int fieldInt6538;
+    public int fieldInt6539;
+    public int fieldInt6540;
+    public int fieldInt6541;
+    public int fieldInt6542;
+    public int fieldInt6543;
+    public int fieldInt6544;
+    public int fieldInt6545;
+    public int fieldInt6546;
+    public int fieldInt6547;
+    public int fieldInt6548;
+    public int fieldInt6549;
+    public int fieldInt6550;
+    public int fieldInt6551;
+    public int fieldInt6552;
+    public int fieldInt6553;
+    public int fieldInt6554;
+    public int fieldInt6555;
+    public int fieldInt6556;
+    public int fieldInt6557;
+    public int fieldInt6558;
+    public int fieldInt6559;
+    public int fieldInt6560;
+    public int fieldInt6561;
+    public int fieldInt6562;
+    public int fieldInt6563;
+    public int fieldInt6564;
+    public int fieldInt6565;
+    public int fieldInt6566;
+    public int fieldInt6567;
+    public int fieldInt6568;
+    public int fieldInt6569;
+    public int fieldInt6570;
+    public int fieldInt6571;
+    public int fieldInt6572;
+    public int fieldInt6573;
+    public int fieldInt6574;
+    public int fieldInt6575;
+    public int fieldInt6576;
+    public int fieldInt6577;
+    public int fieldInt6578;
+    public int fieldInt6579;
+    public int fieldInt6580;
+    public int fieldInt6581;
+    public int fieldInt6582;
+    public int fieldInt6583;
+    public int fieldInt6584;
+    public int fieldInt6585;
+    public int fieldInt6586;
+    public int fieldInt6587;
+    public int fieldInt6588;
+    public int fieldInt6589;
+    public int fieldInt6590;
+    public int fieldInt6591;
+    public int fieldInt6592;
+    public int fieldInt6593;
+    public int fieldInt6594;
+    public int fieldInt6595;
+    public int fieldInt6596;
+    public int fieldInt6597;
+    public int fieldInt6598;
+    public int fieldInt6599;
+    public int fieldInt6600;
+    public int fieldInt6601;
+    public int fieldInt6602;
+    public int fieldInt6603;
+    public int fieldInt6604;
+    public int fieldInt6605;
+    public int fieldInt6606;
+    public int fieldInt6607;
+    public int fieldInt6608;
+    public int fieldInt6609;
+    public int fieldInt6610;
+    public int fieldInt6611;
+    public int fieldInt6612;
+    public int fieldInt6613;
+    public int fieldInt6614;
+    public int fieldInt6615;
+    public int fieldInt6616;
+    public int fieldInt6617;
+    public int fieldInt6618;
+    public int fieldInt6619;
+    public int fieldInt6620;
+    public int fieldInt6621;
+    public int fieldInt6622;
+    public int fieldInt6623;
+    public int fieldInt6624;
+    public int fieldInt6625;
+    public int fieldInt6626;
+    public int fieldInt6627;
+    public int fieldInt6628;
+    public int fieldInt6629;
+    public int fieldInt6630;
+    public int fieldInt6631;
+    public int fieldInt6632;
+    public int fieldInt6633;
+    public int fieldInt6634;
+    public int fieldInt6635;
+    public int fieldInt6636;
+    public int fieldInt6637;
+    public int fieldInt6638;
+    public int fieldInt6639;
+    public int fieldInt6640;
+    public int fieldInt6641;
+    public int fieldInt6642;
+    public int fieldInt6643;
+    public int fieldInt6644;
+    public int fieldInt6645;
+    public int fieldInt6646;
+    public int fieldInt6647;
+    public int fieldInt6648;
+    public int fieldInt6649;
+    public int fieldInt6650;
+    public int fieldInt6651;
+    public int fieldInt6652;
+    public int fieldInt6653;
+    public int fieldInt6654;
+    public int fieldInt6655;
+    public int fieldInt6656;
+    public int fieldInt6657;
+    public int fieldInt6658;
+    public int fieldInt6659;
+    public int fieldInt6660;
+    public int fieldInt6661;
+    public int fieldInt6662;
+    public int fieldInt6663;
+    public int fieldInt6664;
+    public int fieldInt6665;
+    public int fieldInt6666;
+    public int fieldInt6667;
+    public int fieldInt6668;
+    public int fieldInt6669;
+    public int fieldInt6670;
+    public int fieldInt6671;
+    public int fieldInt6672;
+    public int fieldInt6673;
+    public int fieldInt6674;
+    public int fieldInt6675;
+    public int fieldInt6676;
+    public int fieldInt6677;
+    public int fieldInt6678;
+    public int fieldInt6679;
+    public int fieldInt6680;
+    public int fieldInt6681;
+    public int fieldInt6682;
+    public int fieldInt6683;
+    public int fieldInt6684;
+    public int fieldInt6685;
+    public int fieldInt6686;
+    public int fieldInt6687;
+    public int fieldInt6688;
+    public int fieldInt6689;
+    public int fieldInt6690;
+    public int fieldInt6691;
+    public int fieldInt6692;
+    public int fieldInt6693;
+    public int fieldInt6694;
+    public int fieldInt6695;
+    public int fieldInt6696;
+    public int fieldInt6697;
+    public int fieldInt6698;
+    public int fieldInt6699;
+    public int fieldInt6700;
+    public int fieldInt6701;
+    public int fieldInt6702;
+    public int fieldInt6703;
+    public int fieldInt6704;
+    public int fieldInt6705;
+    public int fieldInt6706;
+    public int fieldInt6707;
+    public int fieldInt6708;
+    public int fieldInt6709;
+    public int fieldInt6710;
+    public int fieldInt6711;
+    public int fieldInt6712;
+    public int fieldInt6713;
+    public int fieldInt6714;
+    public int fieldInt6715;
+    public int fieldInt6716;
+    public int fieldInt6717;
+    public int fieldInt6718;
+    public int fieldInt6719;
+    public int fieldInt6720;
+    public int fieldInt6721;
+    public int fieldInt6722;
+    public int fieldInt6723;
+    public int fieldInt6724;
+    public int fieldInt6725;
+    public int fieldInt6726;
+    public int fieldInt6727;
+    public int fieldInt6728;
+    public int fieldInt6729;
+    public int fieldInt6730;
+    public int fieldInt6731;
+    public int fieldInt6732;
+    public int fieldInt6733;
+    public int fieldInt6734;
+    public int fieldInt6735;
+    public int fieldInt6736;
+    public int fieldInt6737;
+    public int fieldInt6738;
+    public int fieldInt6739;
+    public int fieldInt6740;
+    public int fieldInt6741;
+    public int fieldInt6742;
+    public int fieldInt6743;
+    public int fieldInt6744;
+    public int fieldInt6745;
+    public int fieldInt6746;
+    public int fieldInt6747;
+    public int fieldInt6748;
+    public int fieldInt6749;
+    public int fieldInt6750;
+    public int fieldInt6751;
+    public int fieldInt6752;
+    public int fieldInt6753;
+    public int fieldInt6754;
+    public int fieldInt6755;
+    public int fieldInt6756;
+    public int fieldInt6757;
+    public int fieldInt6758;
+    public int fieldInt6759;
+    public int fieldInt6760;
+    public int fieldInt6761;
+    public int fieldInt6762;
+    public int fieldInt6763;
+    public int fieldInt6764;
+    public int fieldInt6765;
+    public int fieldInt6766;
+    public int fieldInt6767;
+    public int fieldInt6768;
+    public int fieldInt6769;
+    public int fieldInt6770;
+    public int fieldInt6771;
+    public int fieldInt6772;
+    public int fieldInt6773;
+    public int fieldInt6774;
+    public int fieldInt6775;
+    public int fieldInt6776;
+    public int fieldInt6777;
+    public int fieldInt6778;
+    public int fieldInt6779;
+    public int fieldInt6780;
+    public int fieldInt6781;
+    public int fieldInt6782;
+    public int fieldInt6783;
+    public int fieldInt6784;
+    public int fieldInt6785;
+    public int fieldInt6786;
+    public int fieldInt6787;
+    public int fieldInt6788;
+    public int fieldInt6789;
+    public int fieldInt6790;
+    public int fieldInt6791;
+    public int fieldInt6792;
+    public int fieldInt6793;
+    public int fieldInt6794;
+    public int fieldInt6795;
+    public int fieldInt6796;
+    public int fieldInt6797;
+    public int fieldInt6798;
+    public int fieldInt6799;
+    public int fieldInt6800;
+    public int fieldInt6801;
+    public int fieldInt6802;
+    public int fieldInt6803;
+    public int fieldInt6804;
+    public int fieldInt6805;
+    public int fieldInt6806;
+    public int fieldInt6807;
+    public int fieldInt6808;
+    public int fieldInt6809;
+    public int fieldInt6810;
+    public int fieldInt6811;
+    public int fieldInt6812;
+    public int fieldInt6813;
+    public int fieldInt6814;
+    public int fieldInt6815;
+    public int fieldInt6816;
+    public int fieldInt6817;
+    public int fieldInt6818;
+    public int fieldInt6819;
+    public int fieldInt6820;
+    public int fieldInt6821;
+    public int fieldInt6822;
+    public int fieldInt6823;
+    public int fieldInt6824;
+    public int fieldInt6825;
+    public int fieldInt6826;
+    public int fieldInt6827;
+    public int fieldInt6828;
+    public int fieldInt6829;
+    public int fieldInt6830;
+    public int fieldInt6831;
+    public int fieldInt6832;
+    public int fieldInt6833;
+    public int fieldInt6834;
+    public int fieldInt6835;
+    public int fieldInt6836;
+    public int fieldInt6837;
+    public int fieldInt6838;
+    public int fieldInt6839;
+    public int fieldInt6840;
+    public int fieldInt6841;
+    public int fieldInt6842;
+    public int fieldInt6843;
+    public int fieldInt6844;
+    public int fieldInt6845;
+    public int fieldInt6846;
+    public int fieldInt6847;
+    public int fieldInt6848;
+    public int fieldInt6849;
+    public int fieldInt6850;
+    public int fieldInt6851;
+    public int fieldInt6852;
+    public int fieldInt6853;
+    public int fieldInt6854;
+    public int fieldInt6855;
+    public int fieldInt6856;
+    public int fieldInt6857;
+    public int fieldInt6858;
+    public int fieldInt6859;
+    public int fieldInt6860;
+    public int fieldInt6861;
+    public int fieldInt6862;
+    public int fieldInt6863;
+    public int fieldInt6864;
+    public int fieldInt6865;
+    public int fieldInt6866;
+    public int fieldInt6867;
+    public int fieldInt6868;
+    public int fieldInt6869;
+    public int fieldInt6870;
+    public int fieldInt6871;
+    public int fieldInt6872;
+    public int fieldInt6873;
+    public int fieldInt6874;
+    public int fieldInt6875;
+    public int fieldInt6876;
+    public int fieldInt6877;
+    public int fieldInt6878;
+    public int fieldInt6879;
+    public int fieldInt6880;
+    public int fieldInt6881;
+    public int fieldInt6882;
+    public int fieldInt6883;
+    public int fieldInt6884;
+    public int fieldInt6885;
+    public int fieldInt6886;
+    public int fieldInt6887;
+    public int fieldInt6888;
+    public int fieldInt6889;
+    public int fieldInt6890;
+    public int fieldInt6891;
+    public int fieldInt6892;
+    public int fieldInt6893;
+    public int fieldInt6894;
+    public int fieldInt6895;
+    public int fieldInt6896;
+    public int fieldInt6897;
+    public int fieldInt6898;
+    public int fieldInt6899;
+    public int fieldInt6900;
+    public int fieldInt6901;
+    public int fieldInt6902;
+    public int fieldInt6903;
+    public int fieldInt6904;
+    public int fieldInt6905;
+    public int fieldInt6906;
+    public int fieldInt6907;
+    public int fieldInt6908;
+    public int fieldInt6909;
+    public int fieldInt6910;
+    public int fieldInt6911;
+    public int fieldInt6912;
+    public int fieldInt6913;
+    public int fieldInt6914;
+    public int fieldInt6915;
+    public int fieldInt6916;
+    public int fieldInt6917;
+    public int fieldInt6918;
+    public int fieldInt6919;
+    public int fieldInt6920;
+    public int fieldInt6921;
+    public int fieldInt6922;
+    public int fieldInt6923;
+    public int fieldInt6924;
+    public int fieldInt6925;
+    public int fieldInt6926;
+    public int fieldInt6927;
+    public int fieldInt6928;
+    public int fieldInt6929;
+    public int fieldInt6930;
+    public int fieldInt6931;
+    public int fieldInt6932;
+    public int fieldInt6933;
+    public int fieldInt6934;
+    public int fieldInt6935;
+    public int fieldInt6936;
+    public int fieldInt6937;
+    public int fieldInt6938;
+    public int fieldInt6939;
+    public int fieldInt6940;
+    public int fieldInt6941;
+    public int fieldInt6942;
+    public int fieldInt6943;
+    public int fieldInt6944;
+    public int fieldInt6945;
+    public int fieldInt6946;
+    public int fieldInt6947;
+    public int fieldInt6948;
+    public int fieldInt6949;
+    public int fieldInt6950;
+    public int fieldInt6951;
+    public int fieldInt6952;
+    public int fieldInt6953;
+    public int fieldInt6954;
+    public int fieldInt6955;
+    public int fieldInt6956;
+    public int fieldInt6957;
+    public int fieldInt6958;
+    public int fieldInt6959;
+    public int fieldInt6960;
+    public int fieldInt6961;
+    public int fieldInt6962;
+    public int fieldInt6963;
+    public int fieldInt6964;
+    public int fieldInt6965;
+    public int fieldInt6966;
+    public int fieldInt6967;
+    public int fieldInt6968;
+    public int fieldInt6969;
+    public int fieldInt6970;
+    public int fieldInt6971;
+    public int fieldInt6972;
+    public int fieldInt6973;
+    public int fieldInt6974;
+    public int fieldInt6975;
+    public int fieldInt6976;
+    public int fieldInt6977;
+    public int fieldInt6978;
+    public int fieldInt6979;
+    public int fieldInt6980;
+    public int fieldInt6981;
+    public int fieldInt6982;
+    public int fieldInt6983;
+    public int fieldInt6984;
+    public int fieldInt6985;
+    public int fieldInt6986;
+    public int fieldInt6987;
+    public int fieldInt6988;
+    public int fieldInt6989;
+    public int fieldInt6990;
+    public int fieldInt6991;
+    public int fieldInt6992;
+    public int fieldInt6993;
+    public int fieldInt6994;
+    public int fieldInt6995;
+    public int fieldInt6996;
+    public int fieldInt6997;
+    public int fieldInt6998;
+    public int fieldInt6999;
+    public int fieldInt7000;
+    public int fieldInt7001;
+    public int fieldInt7002;
+    public int fieldInt7003;
+    public int fieldInt7004;
+    public int fieldInt7005;
+    public int fieldInt7006;
+    public int fieldInt7007;
+    public int fieldInt7008;
+    public int fieldInt7009;
+    public int fieldInt7010;
+    public int fieldInt7011;
+    public int fieldInt7012;
+    public int fieldInt7013;
+    public int fieldInt7014;
+    public int fieldInt7015;
+    public int fieldInt7016;
+    public int fieldInt7017;
+    public int fieldInt7018;
+    public int fieldInt7019;
+    public int fieldInt7020;
+    public int fieldInt7021;
+    public int fieldInt7022;
+    public int fieldInt7023;
+    public int fieldInt7024;
+    public int fieldInt7025;
+    public int fieldInt7026;
+    public int fieldInt7027;
+    public int fieldInt7028;
+    public int fieldInt7029;
+    public int fieldInt7030;
+    public int fieldInt7031;
+    public int fieldInt7032;
+    public int fieldInt7033;
+    public int fieldInt7034;
+    public int fieldInt7035;
+    public int fieldInt7036;
+    public int fieldInt7037;
+    public int fieldInt7038;
+    public int fieldInt7039;
+    public int fieldInt7040;
+    public int fieldInt7041;
+    public int fieldInt7042;
+    public int fieldInt7043;
+    public int fieldInt7044;
+    public int fieldInt7045;
+    public int fieldInt7046;
+    public int fieldInt7047;
+    public int fieldInt7048;
+    public int fieldInt7049;
+    public int fieldInt7050;
+    public int fieldInt7051;
+    public int fieldInt7052;
+    public int fieldInt7053;
+    public int fieldInt7054;
+    public int fieldInt7055;
+    public int fieldInt7056;
+    public int fieldInt7057;
+    public int fieldInt7058;
+    public int fieldInt7059;
+    public int fieldInt7060;
+    public int fieldInt7061;
+    public int fieldInt7062;
+    public int fieldInt7063;
+    public int fieldInt7064;
+    public int fieldInt7065;
+    public int fieldInt7066;
+    public int fieldInt7067;
+    public int fieldInt7068;
+    public int fieldInt7069;
+    public int fieldInt7070;
+    public int fieldInt7071;
+    public int fieldInt7072;
+    public int fieldInt7073;
+    public int fieldInt7074;
+    public int fieldInt7075;
+    public int fieldInt7076;
+    public int fieldInt7077;
+    public int fieldInt7078;
+    public int fieldInt7079;
+    public int fieldInt7080;
+    public int fieldInt7081;
+    public int fieldInt7082;
+    public int fieldInt7083;
+    public int fieldInt7084;
+    public int fieldInt7085;
+    public int fieldInt7086;
+    public int fieldInt7087;
+    public int fieldInt7088;
+    public int fieldInt7089;
+    public int fieldInt7090;
+    public int fieldInt7091;
+    public int fieldInt7092;
+    public int fieldInt7093;
+    public int fieldInt7094;
+    public int fieldInt7095;
+    public int fieldInt7096;
+    public int fieldInt7097;
+    public int fieldInt7098;
+    public int fieldInt7099;
+    public int fieldInt7100;
+    public int fieldInt7101;
+    public int fieldInt7102;
+    public int fieldInt7103;
+    public int fieldInt7104;
+    public int fieldInt7105;
+    public int fieldInt7106;
+    public int fieldInt7107;
+    public int fieldInt7108;
+    public int fieldInt7109;
+    public int fieldInt7110;
+    public int fieldInt7111;
+    public int fieldInt7112;
+    public int fieldInt7113;
+    public int fieldInt7114;
+    public int fieldInt7115;
+    public int fieldInt7116;
+    public int fieldInt7117;
+    public int fieldInt7118;
+    public int fieldInt7119;
+    public int fieldInt7120;
+    public int fieldInt7121;
+    public int fieldInt7122;
+    public int fieldInt7123;
+    public int fieldInt7124;
+    public int fieldInt7125;
+    public int fieldInt7126;
+    public int fieldInt7127;
+    public int fieldInt7128;
+    public int fieldInt7129;
+    public int fieldInt7130;
+    public int fieldInt7131;
+    public int fieldInt7132;
+    public int fieldInt7133;
+    public int fieldInt7134;
+    public int fieldInt7135;
+    public int fieldInt7136;
+    public int fieldInt7137;
+    public int fieldInt7138;
+    public int fieldInt7139;
+    public int fieldInt7140;
+    public int fieldInt7141;
+    public int fieldInt7142;
+    public int fieldInt7143;
+    public int fieldInt7144;
+    public int fieldInt7145;
+    public int fieldInt7146;
+    public int fieldInt7147;
+    public int fieldInt7148;
+    public int fieldInt7149;
+    public int fieldInt7150;
+    public int fieldInt7151;
+    public int fieldInt7152;
+    public int fieldInt7153;
+    public int fieldInt7154;
+    public int fieldInt7155;
+    public int fieldInt7156;
+    public int fieldInt7157;
+    public int fieldInt7158;
+    public int fieldInt7159;
+    public int fieldInt7160;
+    public int fieldInt7161;
+    public int fieldInt7162;
+    public int fieldInt7163;
+    public int fieldInt7164;
+    public int fieldInt7165;
+    public int fieldInt7166;
+    public int fieldInt7167;
+    public int fieldInt7168;
+    public int fieldInt7169;
+    public int fieldInt7170;
+    public int fieldInt7171;
+    public int fieldInt7172;
+    public int fieldInt7173;
+    public int fieldInt7174;
+    public int fieldInt7175;
+    public int fieldInt7176;
+    public int fieldInt7177;
+    public int fieldInt7178;
+    public int fieldInt7179;
+    public int fieldInt7180;
+    public int fieldInt7181;
+    public int fieldInt7182;
+    public int fieldInt7183;
+    public int fieldInt7184;
+    public int fieldInt7185;
+    public int fieldInt7186;
+    public int fieldInt7187;
+    public int fieldInt7188;
+    public int fieldInt7189;
+    public int fieldInt7190;
+    public int fieldInt7191;
+    public int fieldInt7192;
+    public int fieldInt7193;
+    public int fieldInt7194;
+    public int fieldInt7195;
+    public int fieldInt7196;
+    public int fieldInt7197;
+    public int fieldInt7198;
+    public int fieldInt7199;
+    public int fieldInt7200;
+    public int fieldInt7201;
+    public int fieldInt7202;
+    public int fieldInt7203;
+    public int fieldInt7204;
+    public int fieldInt7205;
+    public int fieldInt7206;
+    public int fieldInt7207;
+    public int fieldInt7208;
+    public int fieldInt7209;
+    public int fieldInt7210;
+    public int fieldInt7211;
+    public int fieldInt7212;
+    public int fieldInt7213;
+    public int fieldInt7214;
+    public int fieldInt7215;
+    public int fieldInt7216;
+    public int fieldInt7217;
+    public int fieldInt7218;
+    public int fieldInt7219;
+    public int fieldInt7220;
+    public int fieldInt7221;
+    public int fieldInt7222;
+    public int fieldInt7223;
+    public int fieldInt7224;
+    public int fieldInt7225;
+    public int fieldInt7226;
+    public int fieldInt7227;
+    public int fieldInt7228;
+    public int fieldInt7229;
+    public int fieldInt7230;
+    public int fieldInt7231;
+    public int fieldInt7232;
+    public int fieldInt7233;
+    public int fieldInt7234;
+    public int fieldInt7235;
+    public int fieldInt7236;
+    public int fieldInt7237;
+    public int fieldInt7238;
+    public int fieldInt7239;
+    public int fieldInt7240;
+    public int fieldInt7241;
+    public int fieldInt7242;
+    public int fieldInt7243;
+    public int fieldInt7244;
+    public int fieldInt7245;
+    public int fieldInt7246;
+    public int fieldInt7247;
+    public int fieldInt7248;
+    public int fieldInt7249;
+    public int fieldInt7250;
+    public int fieldInt7251;
+    public int fieldInt7252;
+    public int fieldInt7253;
+    public int fieldInt7254;
+    public int fieldInt7255;
+    public int fieldInt7256;
+    public int fieldInt7257;
+    public int fieldInt7258;
+    public int fieldInt7259;
+    public int fieldInt7260;
+    public int fieldInt7261;
+    public int fieldInt7262;
+    public int fieldInt7263;
+    public int fieldInt7264;
+    public int fieldInt7265;
+    public int fieldInt7266;
+    public int fieldInt7267;
+    public int fieldInt7268;
+    public int fieldInt7269;
+    public int fieldInt7270;
+    public int fieldInt7271;
+    public int fieldInt7272;
+    public int fieldInt7273;
+    public int fieldInt7274;
+    public int fieldInt7275;
+    public int fieldInt7276;
+    public int fieldInt7277;
+    public int fieldInt7278;
+    public int fieldInt7279;
+    public int fieldInt7280;
+    public int fieldInt7281;
+    public int fieldInt7282;
+    public int fieldInt7283;
+    public int fieldInt7284;
+    public int fieldInt7285;
+    public int fieldInt7286;
+    public int fieldInt7287;
+    public int fieldInt7288;
+    public int fieldInt7289;
+    public int fieldInt7290;
+    public int fieldInt7291;
+    public int fieldInt7292;
+    public int fieldInt7293;
+    public int fieldInt7294;
+    public int fieldInt7295;
+    public int fieldInt7296;
+    public int fieldInt7297;
+    public int fieldInt7298;
+    public int fieldInt7299;
+    public int fieldInt7300;
+    public int fieldInt7301;
+    public int fieldInt7302;
+    public int fieldInt7303;
+    public int fieldInt7304;
+    public int fieldInt7305;
+    public int fieldInt7306;
+    public int fieldInt7307;
+    public int fieldInt7308;
+    public int fieldInt7309;
+    public int fieldInt7310;
+    public int fieldInt7311;
+    public int fieldInt7312;
+    public int fieldInt7313;
+    public int fieldInt7314;
+    public int fieldInt7315;
+    public int fieldInt7316;
+    public int fieldInt7317;
+    public int fieldInt7318;
+    public int fieldInt7319;
+    public int fieldInt7320;
+    public int fieldInt7321;
+    public int fieldInt7322;
+    public int fieldInt7323;
+    public int fieldInt7324;
+    public int fieldInt7325;
+    public int fieldInt7326;
+    public int fieldInt7327;
+    public int fieldInt7328;
+    public int fieldInt7329;
+    public int fieldInt7330;
+    public int fieldInt7331;
+    public int fieldInt7332;
+    public int fieldInt7333;
+    public int fieldInt7334;
+    public int fieldInt7335;
+    public int fieldInt7336;
+    public int fieldInt7337;
+    public int fieldInt7338;
+    public int fieldInt7339;
+    public int fieldInt7340;
+    public int fieldInt7341;
+    public int fieldInt7342;
+    public int fieldInt7343;
+    public int fieldInt7344;
+    public int fieldInt7345;
+    public int fieldInt7346;
+    public int fieldInt7347;
+    public int fieldInt7348;
+    public int fieldInt7349;
+    public int fieldInt7350;
+    public int fieldInt7351;
+    public int fieldInt7352;
+    public int fieldInt7353;
+    public int fieldInt7354;
+    public int fieldInt7355;
+    public int fieldInt7356;
+    public int fieldInt7357;
+    public int fieldInt7358;
+    public int fieldInt7359;
+    public int fieldInt7360;
+    public int fieldInt7361;
+    public int fieldInt7362;
+    public int fieldInt7363;
+    public int fieldInt7364;
+    public int fieldInt7365;
+    public int fieldInt7366;
+    public int fieldInt7367;
+    public int fieldInt7368;
+    public int fieldInt7369;
+    public int fieldInt7370;
+    public int fieldInt7371;
+    public int fieldInt7372;
+    public int fieldInt7373;
+    public int fieldInt7374;
+    public int fieldInt7375;
+    public int fieldInt7376;
+    public int fieldInt7377;
+    public int fieldInt7378;
+    public int fieldInt7379;
+    public int fieldInt7380;
+    public int fieldInt7381;
+    public int fieldInt7382;
+    public int fieldInt7383;
+    public int fieldInt7384;
+    public int fieldInt7385;
+    public int fieldInt7386;
+    public int fieldInt7387;
+    public int fieldInt7388;
+    public int fieldInt7389;
+    public int fieldInt7390;
+    public int fieldInt7391;
+    public int fieldInt7392;
+    public int fieldInt7393;
+    public int fieldInt7394;
+    public int fieldInt7395;
+    public int fieldInt7396;
+    public int fieldInt7397;
+    public int fieldInt7398;
+    public int fieldInt7399;
+    public int fieldInt7400;
+    public int fieldInt7401;
+    public int fieldInt7402;
+    public int fieldInt7403;
+    public int fieldInt7404;
+    public int fieldInt7405;
+    public int fieldInt7406;
+    public int fieldInt7407;
+    public int fieldInt7408;
+    public int fieldInt7409;
+    public int fieldInt7410;
+    public int fieldInt7411;
+    public int fieldInt7412;
+    public int fieldInt7413;
+    public int fieldInt7414;
+    public int fieldInt7415;
+    public int fieldInt7416;
+    public int fieldInt7417;
+    public int fieldInt7418;
+    public int fieldInt7419;
+    public int fieldInt7420;
+    public int fieldInt7421;
+    public int fieldInt7422;
+    public int fieldInt7423;
+    public int fieldInt7424;
+    public int fieldInt7425;
+    public int fieldInt7426;
+    public int fieldInt7427;
+    public int fieldInt7428;
+    public int fieldInt7429;
+    public int fieldInt7430;
+    public int fieldInt7431;
+    public int fieldInt7432;
+    public int fieldInt7433;
+    public int fieldInt7434;
+    public int fieldInt7435;
+    public int fieldInt7436;
+    public int fieldInt7437;
+    public int fieldInt7438;
+    public int fieldInt7439;
+    public int fieldInt7440;
+    public int fieldInt7441;
+    public int fieldInt7442;
+    public int fieldInt7443;
+    public int fieldInt7444;
+    public int fieldInt7445;
+    public int fieldInt7446;
+    public int fieldInt7447;
+    public int fieldInt7448;
+    public int fieldInt7449;
+    public int fieldInt7450;
+    public int fieldInt7451;
+    public int fieldInt7452;
+    public int fieldInt7453;
+    public int fieldInt7454;
+    public int fieldInt7455;
+    public int fieldInt7456;
+    public int fieldInt7457;
+    public int fieldInt7458;
+    public int fieldInt7459;
+    public int fieldInt7460;
+    public int fieldInt7461;
+    public int fieldInt7462;
+    public int fieldInt7463;
+    public int fieldInt7464;
+    public int fieldInt7465;
+    public int fieldInt7466;
+    public int fieldInt7467;
+    public int fieldInt7468;
+    public int fieldInt7469;
+    public int fieldInt7470;
+    public int fieldInt7471;
+    public int fieldInt7472;
+    public int fieldInt7473;
+    public int fieldInt7474;
+    public int fieldInt7475;
+    public int fieldInt7476;
+    public int fieldInt7477;
+    public int fieldInt7478;
+    public int fieldInt7479;
+    public int fieldInt7480;
+    public int fieldInt7481;
+    public int fieldInt7482;
+    public int fieldInt7483;
+    public int fieldInt7484;
+    public int fieldInt7485;
+    public int fieldInt7486;
+    public int fieldInt7487;
+    public int fieldInt7488;
+    public int fieldInt7489;
+    public int fieldInt7490;
+    public int fieldInt7491;
+    public int fieldInt7492;
+    public int fieldInt7493;
+    public int fieldInt7494;
+    public int fieldInt7495;
+    public int fieldInt7496;
+    public int fieldInt7497;
+    public int fieldInt7498;
+    public int fieldInt7499;
+    public int fieldInt7500;
+    public int fieldInt7501;
+    public int fieldInt7502;
+    public int fieldInt7503;
+    public int fieldInt7504;
+    public int fieldInt7505;
+    public int fieldInt7506;
+    public int fieldInt7507;
+    public int fieldInt7508;
+    public int fieldInt7509;
+    public int fieldInt7510;
+    public int fieldInt7511;
+    public int fieldInt7512;
+    public int fieldInt7513;
+    public int fieldInt7514;
+    public int fieldInt7515;
+    public int fieldInt7516;
+    public int fieldInt7517;
+    public int fieldInt7518;
+    public int fieldInt7519;
+    public int fieldInt7520;
+    public int fieldInt7521;
+    public int fieldInt7522;
+    public int fieldInt7523;
+    public int fieldInt7524;
+    public int fieldInt7525;
+    public int fieldInt7526;
+    public int fieldInt7527;
+    public int fieldInt7528;
+    public int fieldInt7529;
+    public int fieldInt7530;
+    public int fieldInt7531;
+    public int fieldInt7532;
+    public int fieldInt7533;
+    public int fieldInt7534;
+    public int fieldInt7535;
+    public int fieldInt7536;
+    public int fieldInt7537;
+    public int fieldInt7538;
+    public int fieldInt7539;
+    public int fieldInt7540;
+    public int fieldInt7541;
+    public int fieldInt7542;
+    public int fieldInt7543;
+    public int fieldInt7544;
+    public int fieldInt7545;
+    public int fieldInt7546;
+    public int fieldInt7547;
+    public int fieldInt7548;
+    public int fieldInt7549;
+    public int fieldInt7550;
+    public int fieldInt7551;
+    public int fieldInt7552;
+    public int fieldInt7553;
+    public int fieldInt7554;
+    public int fieldInt7555;
+    public int fieldInt7556;
+    public int fieldInt7557;
+    public int fieldInt7558;
+    public int fieldInt7559;
+    public int fieldInt7560;
+    public int fieldInt7561;
+    public int fieldInt7562;
+    public int fieldInt7563;
+    public int fieldInt7564;
+    public int fieldInt7565;
+    public int fieldInt7566;
+    public int fieldInt7567;
+    public int fieldInt7568;
+    public int fieldInt7569;
+    public int fieldInt7570;
+    public int fieldInt7571;
+    public int fieldInt7572;
+    public int fieldInt7573;
+    public int fieldInt7574;
+    public int fieldInt7575;
+    public int fieldInt7576;
+    public int fieldInt7577;
+    public int fieldInt7578;
+    public int fieldInt7579;
+    public int fieldInt7580;
+    public int fieldInt7581;
+    public int fieldInt7582;
+    public int fieldInt7583;
+    public int fieldInt7584;
+    public int fieldInt7585;
+    public int fieldInt7586;
+    public int fieldInt7587;
+    public int fieldInt7588;
+    public int fieldInt7589;
+    public int fieldInt7590;
+    public int fieldInt7591;
+    public int fieldInt7592;
+    public int fieldInt7593;
+    public int fieldInt7594;
+    public int fieldInt7595;
+    public int fieldInt7596;
+    public int fieldInt7597;
+    public int fieldInt7598;
+    public int fieldInt7599;
+    public int fieldInt7600;
+    public int fieldInt7601;
+    public int fieldInt7602;
+    public int fieldInt7603;
+    public int fieldInt7604;
+    public int fieldInt7605;
+    public int fieldInt7606;
+    public int fieldInt7607;
+    public int fieldInt7608;
+    public int fieldInt7609;
+    public int fieldInt7610;
+    public int fieldInt7611;
+    public int fieldInt7612;
+    public int fieldInt7613;
+    public int fieldInt7614;
+    public int fieldInt7615;
+    public int fieldInt7616;
+    public int fieldInt7617;
+    public int fieldInt7618;
+    public int fieldInt7619;
+    public int fieldInt7620;
+    public int fieldInt7621;
+    public int fieldInt7622;
+    public int fieldInt7623;
+    public int fieldInt7624;
+    public int fieldInt7625;
+    public int fieldInt7626;
+    public int fieldInt7627;
+    public int fieldInt7628;
+    public int fieldInt7629;
+    public int fieldInt7630;
+    public int fieldInt7631;
+    public int fieldInt7632;
+    public int fieldInt7633;
+    public int fieldInt7634;
+    public int fieldInt7635;
+    public int fieldInt7636;
+    public int fieldInt7637;
+    public int fieldInt7638;
+    public int fieldInt7639;
+    public int fieldInt7640;
+    public int fieldInt7641;
+    public int fieldInt7642;
+    public int fieldInt7643;
+    public int fieldInt7644;
+    public int fieldInt7645;
+    public int fieldInt7646;
+    public int fieldInt7647;
+    public int fieldInt7648;
+    public int fieldInt7649;
+    public int fieldInt7650;
+    public int fieldInt7651;
+    public int fieldInt7652;
+    public int fieldInt7653;
+    public int fieldInt7654;
+    public int fieldInt7655;
+    public int fieldInt7656;
+    public int fieldInt7657;
+    public int fieldInt7658;
+    public int fieldInt7659;
+    public int fieldInt7660;
+    public int fieldInt7661;
+    public int fieldInt7662;
+    public int fieldInt7663;
+    public int fieldInt7664;
+    public int fieldInt7665;
+    public int fieldInt7666;
+    public int fieldInt7667;
+    public int fieldInt7668;
+    public int fieldInt7669;
+    public int fieldInt7670;
+    public int fieldInt7671;
+    public int fieldInt7672;
+    public int fieldInt7673;
+    public int fieldInt7674;
+    public int fieldInt7675;
+    public int fieldInt7676;
+    public int fieldInt7677;
+    public int fieldInt7678;
+    public int fieldInt7679;
+    public int fieldInt7680;
+    public int fieldInt7681;
+    public int fieldInt7682;
+    public int fieldInt7683;
+    public int fieldInt7684;
+    public int fieldInt7685;
+    public int fieldInt7686;
+    public int fieldInt7687;
+    public int fieldInt7688;
+    public int fieldInt7689;
+    public int fieldInt7690;
+    public int fieldInt7691;
+    public int fieldInt7692;
+    public int fieldInt7693;
+    public int fieldInt7694;
+    public int fieldInt7695;
+    public int fieldInt7696;
+    public int fieldInt7697;
+    public int fieldInt7698;
+    public int fieldInt7699;
+    public int fieldInt7700;
+    public int fieldInt7701;
+    public int fieldInt7702;
+    public int fieldInt7703;
+    public int fieldInt7704;
+    public int fieldInt7705;
+    public int fieldInt7706;
+    public int fieldInt7707;
+    public int fieldInt7708;
+    public int fieldInt7709;
+    public int fieldInt7710;
+    public int fieldInt7711;
+    public int fieldInt7712;
+    public int fieldInt7713;
+    public int fieldInt7714;
+    public int fieldInt7715;
+    public int fieldInt7716;
+    public int fieldInt7717;
+    public int fieldInt7718;
+    public int fieldInt7719;
+    public int fieldInt7720;
+    public int fieldInt7721;
+    public int fieldInt7722;
+    public int fieldInt7723;
+    public int fieldInt7724;
+    public int fieldInt7725;
+    public int fieldInt7726;
+    public int fieldInt7727;
+    public int fieldInt7728;
+    public int fieldInt7729;
+    public int fieldInt7730;
+    public int fieldInt7731;
+    public int fieldInt7732;
+    public int fieldInt7733;
+    public int fieldInt7734;
+    public int fieldInt7735;
+    public int fieldInt7736;
+    public int fieldInt7737;
+    public int fieldInt7738;
+    public int fieldInt7739;
+    public int fieldInt7740;
+    public int fieldInt7741;
+    public int fieldInt7742;
+    public int fieldInt7743;
+    public int fieldInt7744;
+    public int fieldInt7745;
+    public int fieldInt7746;
+    public int fieldInt7747;
+    public int fieldInt7748;
+    public int fieldInt7749;
+    public int fieldInt7750;
+    public int fieldInt7751;
+    public int fieldInt7752;
+    public int fieldInt7753;
+    public int fieldInt7754;
+    public int fieldInt7755;
+    public int fieldInt7756;
+    public int fieldInt7757;
+    public int fieldInt7758;
+    public int fieldInt7759;
+    public int fieldInt7760;
+    public int fieldInt7761;
+    public int fieldInt7762;
+    public int fieldInt7763;
+    public int fieldInt7764;
+    public int fieldInt7765;
+    public int fieldInt7766;
+    public int fieldInt7767;
+    public int fieldInt7768;
+    public int fieldInt7769;
+    public int fieldInt7770;
+    public int fieldInt7771;
+    public int fieldInt7772;
+    public int fieldInt7773;
+    public int fieldInt7774;
+    public int fieldInt7775;
+    public int fieldInt7776;
+    public int fieldInt7777;
+    public int fieldInt7778;
+    public int fieldInt7779;
+    public int fieldInt7780;
+    public int fieldInt7781;
+    public int fieldInt7782;
+    public int fieldInt7783;
+    public int fieldInt7784;
+    public int fieldInt7785;
+    public int fieldInt7786;
+    public int fieldInt7787;
+    public int fieldInt7788;
+    public int fieldInt7789;
+    public int fieldInt7790;
+    public int fieldInt7791;
+    public int fieldInt7792;
+    public int fieldInt7793;
+    public int fieldInt7794;
+    public int fieldInt7795;
+    public int fieldInt7796;
+    public int fieldInt7797;
+    public int fieldInt7798;
+    public int fieldInt7799;
+    public int fieldInt7800;
+    public int fieldInt7801;
+    public int fieldInt7802;
+    public int fieldInt7803;
+    public int fieldInt7804;
+    public int fieldInt7805;
+    public int fieldInt7806;
+    public int fieldInt7807;
+    public int fieldInt7808;
+    public int fieldInt7809;
+    public int fieldInt7810;
+    public int fieldInt7811;
+    public int fieldInt7812;
+    public int fieldInt7813;
+    public int fieldInt7814;
+    public int fieldInt7815;
+    public int fieldInt7816;
+    public int fieldInt7817;
+    public int fieldInt7818;
+    public int fieldInt7819;
+    public int fieldInt7820;
+    public int fieldInt7821;
+    public int fieldInt7822;
+    public int fieldInt7823;
+    public int fieldInt7824;
+    public int fieldInt7825;
+    public int fieldInt7826;
+    public int fieldInt7827;
+    public int fieldInt7828;
+    public int fieldInt7829;
+    public int fieldInt7830;
+    public int fieldInt7831;
+    public int fieldInt7832;
+    public int fieldInt7833;
+    public int fieldInt7834;
+    public int fieldInt7835;
+    public int fieldInt7836;
+    public int fieldInt7837;
+    public int fieldInt7838;
+    public int fieldInt7839;
+    public int fieldInt7840;
+    public int fieldInt7841;
+    public int fieldInt7842;
+    public int fieldInt7843;
+    public int fieldInt7844;
+    public int fieldInt7845;
+    public int fieldInt7846;
+    public int fieldInt7847;
+    public int fieldInt7848;
+    public int fieldInt7849;
+    public int fieldInt7850;
+    public int fieldInt7851;
+    public int fieldInt7852;
+    public int fieldInt7853;
+    public int fieldInt7854;
+    public int fieldInt7855;
+    public int fieldInt7856;
+    public int fieldInt7857;
+    public int fieldInt7858;
+    public int fieldInt7859;
+    public int fieldInt7860;
+    public int fieldInt7861;
+    public int fieldInt7862;
+    public int fieldInt7863;
+    public int fieldInt7864;
+    public int fieldInt7865;
+    public int fieldInt7866;
+    public int fieldInt7867;
+    public int fieldInt7868;
+    public int fieldInt7869;
+    public int fieldInt7870;
+    public int fieldInt7871;
+    public int fieldInt7872;
+    public int fieldInt7873;
+    public int fieldInt7874;
+    public int fieldInt7875;
+    public int fieldInt7876;
+    public int fieldInt7877;
+    public int fieldInt7878;
+    public int fieldInt7879;
+    public int fieldInt7880;
+    public int fieldInt7881;
+    public int fieldInt7882;
+    public int fieldInt7883;
+    public int fieldInt7884;
+    public int fieldInt7885;
+    public int fieldInt7886;
+    public int fieldInt7887;
+    public int fieldInt7888;
+    public int fieldInt7889;
+    public int fieldInt7890;
+    public int fieldInt7891;
+    public int fieldInt7892;
+    public int fieldInt7893;
+    public int fieldInt7894;
+    public int fieldInt7895;
+    public int fieldInt7896;
+    public int fieldInt7897;
+    public int fieldInt7898;
+    public int fieldInt7899;
+    public int fieldInt7900;
+    public int fieldInt7901;
+    public int fieldInt7902;
+    public int fieldInt7903;
+    public int fieldInt7904;
+    public int fieldInt7905;
+    public int fieldInt7906;
+    public int fieldInt7907;
+    public int fieldInt7908;
+    public int fieldInt7909;
+    public int fieldInt7910;
+    public int fieldInt7911;
+    public int fieldInt7912;
+    public int fieldInt7913;
+    public int fieldInt7914;
+    public int fieldInt7915;
+    public int fieldInt7916;
+    public int fieldInt7917;
+    public int fieldInt7918;
+    public int fieldInt7919;
+    public int fieldInt7920;
+    public int fieldInt7921;
+    public int fieldInt7922;
+    public int fieldInt7923;
+    public int fieldInt7924;
+    public int fieldInt7925;
+    public int fieldInt7926;
+    public int fieldInt7927;
+    public int fieldInt7928;
+    public int fieldInt7929;
+    public int fieldInt7930;
+    public int fieldInt7931;
+    public int fieldInt7932;
+    public int fieldInt7933;
+    public int fieldInt7934;
+    public int fieldInt7935;
+    public int fieldInt7936;
+    public int fieldInt7937;
+    public int fieldInt7938;
+    public int fieldInt7939;
+    public int fieldInt7940;
+    public int fieldInt7941;
+    public int fieldInt7942;
+    public int fieldInt7943;
+    public int fieldInt7944;
+    public int fieldInt7945;
+    public int fieldInt7946;
+    public int fieldInt7947;
+    public int fieldInt7948;
+    public int fieldInt7949;
+    public int fieldInt7950;
+    public int fieldInt7951;
+    public int fieldInt7952;
+    public int fieldInt7953;
+    public int fieldInt7954;
+    public int fieldInt7955;
+    public int fieldInt7956;
+    public int fieldInt7957;
+    public int fieldInt7958;
+    public int fieldInt7959;
+    public int fieldInt7960;
+    public int fieldInt7961;
+    public int fieldInt7962;
+    public int fieldInt7963;
+    public int fieldInt7964;
+    public int fieldInt7965;
+    public int fieldInt7966;
+    public int fieldInt7967;
+    public int fieldInt7968;
+    public int fieldInt7969;
+    public int fieldInt7970;
+    public int fieldInt7971;
+    public int fieldInt7972;
+    public int fieldInt7973;
+    public int fieldInt7974;
+    public int fieldInt7975;
+    public int fieldInt7976;
+    public int fieldInt7977;
+    public int fieldInt7978;
+    public int fieldInt7979;
+    public int fieldInt7980;
+    public int fieldInt7981;
+    public int fieldInt7982;
+    public int fieldInt7983;
+    public int fieldInt7984;
+    public int fieldInt7985;
+    public int fieldInt7986;
+    public int fieldInt7987;
+    public int fieldInt7988;
+    public int fieldInt7989;
+    public int fieldInt7990;
+    public int fieldInt7991;
+    public int fieldInt7992;
+    public int fieldInt7993;
+    public int fieldInt7994;
+    public int fieldInt7995;
+    public int fieldInt7996;
+    public int fieldInt7997;
+    public int fieldInt7998;
+    public int fieldInt7999;
+    public int fieldInt8000;
+    public int fieldInt8001;
+    public int fieldInt8002;
+    public int fieldInt8003;
+    public int fieldInt8004;
+    public int fieldInt8005;
+    public int fieldInt8006;
+    public int fieldInt8007;
+    public int fieldInt8008;
+    public int fieldInt8009;
+    public int fieldInt8010;
+    public int fieldInt8011;
+    public int fieldInt8012;
+    public int fieldInt8013;
+    public int fieldInt8014;
+    public int fieldInt8015;
+    public int fieldInt8016;
+    public int fieldInt8017;
+    public int fieldInt8018;
+    public int fieldInt8019;
+    public int fieldInt8020;
+    public int fieldInt8021;
+    public int fieldInt8022;
+    public int fieldInt8023;
+    public int fieldInt8024;
+    public int fieldInt8025;
+    public int fieldInt8026;
+    public int fieldInt8027;
+    public int fieldInt8028;
+    public int fieldInt8029;
+    public int fieldInt8030;
+    public int fieldInt8031;
+    public int fieldInt8032;
+    public int fieldInt8033;
+    public int fieldInt8034;
+    public int fieldInt8035;
+    public int fieldInt8036;
+    public int fieldInt8037;
+    public int fieldInt8038;
+    public int fieldInt8039;
+    public int fieldInt8040;
+    public int fieldInt8041;
+    public int fieldInt8042;
+    public int fieldInt8043;
+    public int fieldInt8044;
+    public int fieldInt8045;
+    public int fieldInt8046;
+    public int fieldInt8047;
+    public int fieldInt8048;
+    public int fieldInt8049;
+    public int fieldInt8050;
+    public int fieldInt8051;
+    public int fieldInt8052;
+    public int fieldInt8053;
+    public int fieldInt8054;
+    public int fieldInt8055;
+    public int fieldInt8056;
+    public int fieldInt8057;
+    public int fieldInt8058;
+    public int fieldInt8059;
+    public int fieldInt8060;
+    public int fieldInt8061;
+    public int fieldInt8062;
+    public int fieldInt8063;
+    public int fieldInt8064;
+    public int fieldInt8065;
+    public int fieldInt8066;
+    public int fieldInt8067;
+    public int fieldInt8068;
+    public int fieldInt8069;
+    public int fieldInt8070;
+    public int fieldInt8071;
+    public int fieldInt8072;
+    public int fieldInt8073;
+    public int fieldInt8074;
+    public int fieldInt8075;
+    public int fieldInt8076;
+    public int fieldInt8077;
+    public int fieldInt8078;
+    public int fieldInt8079;
+    public int fieldInt8080;
+    public int fieldInt8081;
+    public int fieldInt8082;
+    public int fieldInt8083;
+    public int fieldInt8084;
+    public int fieldInt8085;
+    public int fieldInt8086;
+    public int fieldInt8087;
+    public int fieldInt8088;
+    public int fieldInt8089;
+    public int fieldInt8090;
+    public int fieldInt8091;
+    public int fieldInt8092;
+    public int fieldInt8093;
+    public int fieldInt8094;
+    public int fieldInt8095;
+    public int fieldInt8096;
+    public int fieldInt8097;
+    public int fieldInt8098;
+    public int fieldInt8099;
+    public int fieldInt8100;
+    public int fieldInt8101;
+    public int fieldInt8102;
+    public int fieldInt8103;
+    public int fieldInt8104;
+    public int fieldInt8105;
+    public int fieldInt8106;
+    public int fieldInt8107;
+    public int fieldInt8108;
+    public int fieldInt8109;
+    public int fieldInt8110;
+    public int fieldInt8111;
+    public int fieldInt8112;
+    public int fieldInt8113;
+    public int fieldInt8114;
+    public int fieldInt8115;
+    public int fieldInt8116;
+    public int fieldInt8117;
+    public int fieldInt8118;
+    public int fieldInt8119;
+    public int fieldInt8120;
+    public int fieldInt8121;
+    public int fieldInt8122;
+    public int fieldInt8123;
+    public int fieldInt8124;
+    public int fieldInt8125;
+    public int fieldInt8126;
+    public int fieldInt8127;
+    public int fieldInt8128;
+    public int fieldInt8129;
+    public int fieldInt8130;
+    public int fieldInt8131;
+    public int fieldInt8132;
+    public int fieldInt8133;
+    public int fieldInt8134;
+    public int fieldInt8135;
+    public int fieldInt8136;
+    public int fieldInt8137;
+    public int fieldInt8138;
+    public int fieldInt8139;
+    public int fieldInt8140;
+    public int fieldInt8141;
+    public int fieldInt8142;
+    public int fieldInt8143;
+    public int fieldInt8144;
+    public int fieldInt8145;
+    public int fieldInt8146;
+    public int fieldInt8147;
+    public int fieldInt8148;
+    public int fieldInt8149;
+    public int fieldInt8150;
+    public int fieldInt8151;
+    public int fieldInt8152;
+    public int fieldInt8153;
+    public int fieldInt8154;
+    public int fieldInt8155;
+    public int fieldInt8156;
+    public int fieldInt8157;
+    public int fieldInt8158;
+    public int fieldInt8159;
+    public int fieldInt8160;
+    public int fieldInt8161;
+    public int fieldInt8162;
+    public int fieldInt8163;
+    public int fieldInt8164;
+    public int fieldInt8165;
+    public int fieldInt8166;
+    public int fieldInt8167;
+    public int fieldInt8168;
+    public int fieldInt8169;
+    public int fieldInt8170;
+    public int fieldInt8171;
+    public int fieldInt8172;
+    public int fieldInt8173;
+    public int fieldInt8174;
+    public int fieldInt8175;
+    public int fieldInt8176;
+    public int fieldInt8177;
+    public int fieldInt8178;
+    public int fieldInt8179;
+    public int fieldInt8180;
+    public int fieldInt8181;
+    public int fieldInt8182;
+    public int fieldInt8183;
+    public int fieldInt8184;
+    public int fieldInt8185;
+    public int fieldInt8186;
+    public int fieldInt8187;
+    public int fieldInt8188;
+    public int fieldInt8189;
+    public int fieldInt8190;
+    public int fieldInt8191;
+    public int fieldInt8192;
+    public int fieldInt8193;
+    public int fieldInt8194;
+    public int fieldInt8195;
+    public int fieldInt8196;
+    public int fieldInt8197;
+    public int fieldInt8198;
+    public int fieldInt8199;
+    public int fieldInt8200;
+    public int fieldInt8201;
+    public int fieldInt8202;
+    public int fieldInt8203;
+    public int fieldInt8204;
+    public int fieldInt8205;
+    public int fieldInt8206;
+    public int fieldInt8207;
+    public int fieldInt8208;
+    public int fieldInt8209;
+    public int fieldInt8210;
+    public int fieldInt8211;
+    public int fieldInt8212;
+    public int fieldInt8213;
+    public int fieldInt8214;
+    public int fieldInt8215;
+    public int fieldInt8216;
+    public int fieldInt8217;
+    public int fieldInt8218;
+    public int fieldInt8219;
+    public int fieldInt8220;
+    public int fieldInt8221;
+    public int fieldInt8222;
+    public int fieldInt8223;
+    public int fieldInt8224;
+    public int fieldInt8225;
+    public int fieldInt8226;
+    public int fieldInt8227;
+    public int fieldInt8228;
+    public int fieldInt8229;
+    public int fieldInt8230;
+    public int fieldInt8231;
+    public int fieldInt8232;
+    public int fieldInt8233;
+    public int fieldInt8234;
+    public int fieldInt8235;
+    public int fieldInt8236;
+    public int fieldInt8237;
+    public int fieldInt8238;
+    public int fieldInt8239;
+    public int fieldInt8240;
+    public int fieldInt8241;
+    public int fieldInt8242;
+    public int fieldInt8243;
+    public int fieldInt8244;
+    public int fieldInt8245;
+    public int fieldInt8246;
+    public int fieldInt8247;
+    public int fieldInt8248;
+    public int fieldInt8249;
+    public int fieldInt8250;
+    public int fieldInt8251;
+    public int fieldInt8252;
+    public int fieldInt8253;
+    public int fieldInt8254;
+    public int fieldInt8255;
+    public int fieldInt8256;
+    public int fieldInt8257;
+    public int fieldInt8258;
+    public int fieldInt8259;
+    public int fieldInt8260;
+    public int fieldInt8261;
+    public int fieldInt8262;
+    public int fieldInt8263;
+    public int fieldInt8264;
+    public int fieldInt8265;
+    public int fieldInt8266;
+    public int fieldInt8267;
+    public int fieldInt8268;
+    public int fieldInt8269;
+    public int fieldInt8270;
+    public int fieldInt8271;
+    public int fieldInt8272;
+    public int fieldInt8273;
+    public int fieldInt8274;
+    public int fieldInt8275;
+    public int fieldInt8276;
+    public int fieldInt8277;
+    public int fieldInt8278;
+    public int fieldInt8279;
+    public int fieldInt8280;
+    public int fieldInt8281;
+    public int fieldInt8282;
+    public int fieldInt8283;
+    public int fieldInt8284;
+    public int fieldInt8285;
+    public int fieldInt8286;
+    public int fieldInt8287;
+    public int fieldInt8288;
+    public int fieldInt8289;
+    public int fieldInt8290;
+    public int fieldInt8291;
+    public int fieldInt8292;
+    public int fieldInt8293;
+    public int fieldInt8294;
+    public int fieldInt8295;
+    public int fieldInt8296;
+    public int fieldInt8297;
+    public int fieldInt8298;
+    public int fieldInt8299;
+    public int fieldInt8300;
+    public int fieldInt8301;
+    public int fieldInt8302;
+    public int fieldInt8303;
+    public int fieldInt8304;
+    public int fieldInt8305;
+    public int fieldInt8306;
+    public int fieldInt8307;
+    public int fieldInt8308;
+    public int fieldInt8309;
+    public int fieldInt8310;
+    public int fieldInt8311;
+    public int fieldInt8312;
+    public int fieldInt8313;
+    public int fieldInt8314;
+    public int fieldInt8315;
+    public int fieldInt8316;
+    public int fieldInt8317;
+    public int fieldInt8318;
+    public int fieldInt8319;
+    public int fieldInt8320;
+    public int fieldInt8321;
+    public int fieldInt8322;
+    public int fieldInt8323;
+    public int fieldInt8324;
+    public int fieldInt8325;
+    public int fieldInt8326;
+    public int fieldInt8327;
+    public int fieldInt8328;
+    public int fieldInt8329;
+    public int fieldInt8330;
+    public int fieldInt8331;
+    public int fieldInt8332;
+    public int fieldInt8333;
+    public int fieldInt8334;
+    public int fieldInt8335;
+    public int fieldInt8336;
+    public int fieldInt8337;
+    public int fieldInt8338;
+    public int fieldInt8339;
+    public int fieldInt8340;
+    public int fieldInt8341;
+    public int fieldInt8342;
+    public int fieldInt8343;
+    public int fieldInt8344;
+    public int fieldInt8345;
+    public int fieldInt8346;
+    public int fieldInt8347;
+    public int fieldInt8348;
+    public int fieldInt8349;
+    public int fieldInt8350;
+    public int fieldInt8351;
+    public int fieldInt8352;
+    public int fieldInt8353;
+    public int fieldInt8354;
+    public int fieldInt8355;
+    public int fieldInt8356;
+    public int fieldInt8357;
+    public int fieldInt8358;
+    public int fieldInt8359;
+    public int fieldInt8360;
+    public int fieldInt8361;
+    public int fieldInt8362;
+    public int fieldInt8363;
+    public int fieldInt8364;
+    public int fieldInt8365;
+    public int fieldInt8366;
+    public int fieldInt8367;
+    public int fieldInt8368;
+    public int fieldInt8369;
+    public int fieldInt8370;
+    public int fieldInt8371;
+    public int fieldInt8372;
+    public int fieldInt8373;
+    public int fieldInt8374;
+    public int fieldInt8375;
+    public int fieldInt8376;
+    public int fieldInt8377;
+    public int fieldInt8378;
+    public int fieldInt8379;
+    public int fieldInt8380;
+    public int fieldInt8381;
+    public int fieldInt8382;
+    public int fieldInt8383;
+    public int fieldInt8384;
+    public int fieldInt8385;
+    public int fieldInt8386;
+    public int fieldInt8387;
+    public int fieldInt8388;
+    public int fieldInt8389;
+    public int fieldInt8390;
+    public int fieldInt8391;
+    public int fieldInt8392;
+    public int fieldInt8393;
+    public int fieldInt8394;
+    public int fieldInt8395;
+    public int fieldInt8396;
+    public int fieldInt8397;
+    public int fieldInt8398;
+    public int fieldInt8399;
+    public int fieldInt8400;
+    public int fieldInt8401;
+    public int fieldInt8402;
+    public int fieldInt8403;
+    public int fieldInt8404;
+    public int fieldInt8405;
+    public int fieldInt8406;
+    public int fieldInt8407;
+    public int fieldInt8408;
+    public int fieldInt8409;
+    public int fieldInt8410;
+    public int fieldInt8411;
+    public int fieldInt8412;
+    public int fieldInt8413;
+    public int fieldInt8414;
+    public int fieldInt8415;
+    public int fieldInt8416;
+    public int fieldInt8417;
+    public int fieldInt8418;
+    public int fieldInt8419;
+    public int fieldInt8420;
+    public int fieldInt8421;
+    public int fieldInt8422;
+    public int fieldInt8423;
+    public int fieldInt8424;
+    public int fieldInt8425;
+    public int fieldInt8426;
+    public int fieldInt8427;
+    public int fieldInt8428;
+    public int fieldInt8429;
+    public int fieldInt8430;
+    public int fieldInt8431;
+    public int fieldInt8432;
+    public int fieldInt8433;
+    public int fieldInt8434;
+    public int fieldInt8435;
+    public int fieldInt8436;
+    public int fieldInt8437;
+    public int fieldInt8438;
+    public int fieldInt8439;
+    public int fieldInt8440;
+    public int fieldInt8441;
+    public int fieldInt8442;
+    public int fieldInt8443;
+    public int fieldInt8444;
+    public int fieldInt8445;
+    public int fieldInt8446;
+    public int fieldInt8447;
+    public int fieldInt8448;
+    public int fieldInt8449;
+    public int fieldInt8450;
+    public int fieldInt8451;
+    public int fieldInt8452;
+    public int fieldInt8453;
+    public int fieldInt8454;
+    public int fieldInt8455;
+    public int fieldInt8456;
+    public int fieldInt8457;
+    public int fieldInt8458;
+    public int fieldInt8459;
+    public int fieldInt8460;
+    public int fieldInt8461;
+    public int fieldInt8462;
+    public int fieldInt8463;
+    public int fieldInt8464;
+    public int fieldInt8465;
+    public int fieldInt8466;
+    public int fieldInt8467;
+    public int fieldInt8468;
+    public int fieldInt8469;
+    public int fieldInt8470;
+    public int fieldInt8471;
+    public int fieldInt8472;
+    public int fieldInt8473;
+    public int fieldInt8474;
+    public int fieldInt8475;
+    public int fieldInt8476;
+    public int fieldInt8477;
+    public int fieldInt8478;
+    public int fieldInt8479;
+    public int fieldInt8480;
+    public int fieldInt8481;
+    public int fieldInt8482;
+    public int fieldInt8483;
+    public int fieldInt8484;
+    public int fieldInt8485;
+    public int fieldInt8486;
+    public int fieldInt8487;
+    public int fieldInt8488;
+    public int fieldInt8489;
+    public int fieldInt8490;
+    public int fieldInt8491;
+    public int fieldInt8492;
+    public int fieldInt8493;
+    public int fieldInt8494;
+    public int fieldInt8495;
+    public int fieldInt8496;
+    public int fieldInt8497;
+    public int fieldInt8498;
+    public int fieldInt8499;
+    public int fieldInt8500;
+    public int fieldInt8501;
+    public int fieldInt8502;
+    public int fieldInt8503;
+    public int fieldInt8504;
+    public int fieldInt8505;
+    public int fieldInt8506;
+    public int fieldInt8507;
+    public int fieldInt8508;
+    public int fieldInt8509;
+    public int fieldInt8510;
+    public int fieldInt8511;
+    public int fieldInt8512;
+    public int fieldInt8513;
+    public int fieldInt8514;
+    public int fieldInt8515;
+    public int fieldInt8516;
+    public int fieldInt8517;
+    public int fieldInt8518;
+    public int fieldInt8519;
+    public int fieldInt8520;
+    public int fieldInt8521;
+    public int fieldInt8522;
+    public int fieldInt8523;
+    public int fieldInt8524;
+    public int fieldInt8525;
+    public int fieldInt8526;
+    public int fieldInt8527;
+    public int fieldInt8528;
+    public int fieldInt8529;
+    public int fieldInt8530;
+    public int fieldInt8531;
+    public int fieldInt8532;
+    public int fieldInt8533;
+    public int fieldInt8534;
+    public int fieldInt8535;
+    public int fieldInt8536;
+    public int fieldInt8537;
+    public int fieldInt8538;
+    public int fieldInt8539;
+    public int fieldInt8540;
+    public int fieldInt8541;
+    public int fieldInt8542;
+    public int fieldInt8543;
+    public int fieldInt8544;
+    public int fieldInt8545;
+    public int fieldInt8546;
+    public int fieldInt8547;
+    public int fieldInt8548;
+    public int fieldInt8549;
+    public int fieldInt8550;
+    public int fieldInt8551;
+    public int fieldInt8552;
+    public int fieldInt8553;
+    public int fieldInt8554;
+    public int fieldInt8555;
+    public int fieldInt8556;
+    public int fieldInt8557;
+    public int fieldInt8558;
+    public int fieldInt8559;
+    public int fieldInt8560;
+    public int fieldInt8561;
+    public int fieldInt8562;
+    public int fieldInt8563;
+    public int fieldInt8564;
+    public int fieldInt8565;
+    public int fieldInt8566;
+    public int fieldInt8567;
+    public int fieldInt8568;
+    public int fieldInt8569;
+    public int fieldInt8570;
+    public int fieldInt8571;
+    public int fieldInt8572;
+    public int fieldInt8573;
+    public int fieldInt8574;
+    public int fieldInt8575;
+    public int fieldInt8576;
+    public int fieldInt8577;
+    public int fieldInt8578;
+    public int fieldInt8579;
+    public int fieldInt8580;
+    public int fieldInt8581;
+    public int fieldInt8582;
+    public int fieldInt8583;
+    public int fieldInt8584;
+    public int fieldInt8585;
+    public int fieldInt8586;
+    public int fieldInt8587;
+    public int fieldInt8588;
+    public int fieldInt8589;
+    public int fieldInt8590;
+    public int fieldInt8591;
+    public int fieldInt8592;
+    public int fieldInt8593;
+    public int fieldInt8594;
+    public int fieldInt8595;
+    public int fieldInt8596;
+    public int fieldInt8597;
+    public int fieldInt8598;
+    public int fieldInt8599;
+    public int fieldInt8600;
+    public int fieldInt8601;
+    public int fieldInt8602;
+    public int fieldInt8603;
+    public int fieldInt8604;
+    public int fieldInt8605;
+    public int fieldInt8606;
+    public int fieldInt8607;
+    public int fieldInt8608;
+    public int fieldInt8609;
+    public int fieldInt8610;
+    public int fieldInt8611;
+    public int fieldInt8612;
+    public int fieldInt8613;
+    public int fieldInt8614;
+    public int fieldInt8615;
+    public int fieldInt8616;
+    public int fieldInt8617;
+    public int fieldInt8618;
+    public int fieldInt8619;
+    public int fieldInt8620;
+    public int fieldInt8621;
+    public int fieldInt8622;
+    public int fieldInt8623;
+    public int fieldInt8624;
+    public int fieldInt8625;
+    public int fieldInt8626;
+    public int fieldInt8627;
+    public int fieldInt8628;
+    public int fieldInt8629;
+    public int fieldInt8630;
+    public int fieldInt8631;
+    public int fieldInt8632;
+    public int fieldInt8633;
+    public int fieldInt8634;
+    public int fieldInt8635;
+    public int fieldInt8636;
+    public int fieldInt8637;
+    public int fieldInt8638;
+    public int fieldInt8639;
+    public int fieldInt8640;
+    public int fieldInt8641;
+    public int fieldInt8642;
+    public int fieldInt8643;
+    public int fieldInt8644;
+    public int fieldInt8645;
+    public int fieldInt8646;
+    public int fieldInt8647;
+    public int fieldInt8648;
+    public int fieldInt8649;
+    public int fieldInt8650;
+    public int fieldInt8651;
+    public int fieldInt8652;
+    public int fieldInt8653;
+    public int fieldInt8654;
+    public int fieldInt8655;
+    public int fieldInt8656;
+    public int fieldInt8657;
+    public int fieldInt8658;
+    public int fieldInt8659;
+    public int fieldInt8660;
+    public int fieldInt8661;
+    public int fieldInt8662;
+    public int fieldInt8663;
+    public int fieldInt8664;
+    public int fieldInt8665;
+    public int fieldInt8666;
+    public int fieldInt8667;
+    public int fieldInt8668;
+    public int fieldInt8669;
+    public int fieldInt8670;
+    public int fieldInt8671;
+    public int fieldInt8672;
+    public int fieldInt8673;
+    public int fieldInt8674;
+    public int fieldInt8675;
+    public int fieldInt8676;
+    public int fieldInt8677;
+    public int fieldInt8678;
+    public int fieldInt8679;
+    public int fieldInt8680;
+    public int fieldInt8681;
+    public int fieldInt8682;
+    public int fieldInt8683;
+    public int fieldInt8684;
+    public int fieldInt8685;
+    public int fieldInt8686;
+    public int fieldInt8687;
+    public int fieldInt8688;
+    public int fieldInt8689;
+    public int fieldInt8690;
+    public int fieldInt8691;
+    public int fieldInt8692;
+    public int fieldInt8693;
+    public int fieldInt8694;
+    public int fieldInt8695;
+    public int fieldInt8696;
+    public int fieldInt8697;
+    public int fieldInt8698;
+    public int fieldInt8699;
+    public int fieldInt8700;
+    public int fieldInt8701;
+    public int fieldInt8702;
+    public int fieldInt8703;
+    public int fieldInt8704;
+    public int fieldInt8705;
+    public int fieldInt8706;
+    public int fieldInt8707;
+    public int fieldInt8708;
+    public int fieldInt8709;
+    public int fieldInt8710;
+    public int fieldInt8711;
+    public int fieldInt8712;
+    public int fieldInt8713;
+    public int fieldInt8714;
+    public int fieldInt8715;
+    public int fieldInt8716;
+    public int fieldInt8717;
+    public int fieldInt8718;
+    public int fieldInt8719;
+    public int fieldInt8720;
+    public int fieldInt8721;
+    public int fieldInt8722;
+    public int fieldInt8723;
+    public int fieldInt8724;
+    public int fieldInt8725;
+    public int fieldInt8726;
+    public int fieldInt8727;
+    public int fieldInt8728;
+    public int fieldInt8729;
+    public int fieldInt8730;
+    public int fieldInt8731;
+    public int fieldInt8732;
+    public int fieldInt8733;
+    public int fieldInt8734;
+    public int fieldInt8735;
+    public int fieldInt8736;
+    public int fieldInt8737;
+    public int fieldInt8738;
+    public int fieldInt8739;
+    public int fieldInt8740;
+    public int fieldInt8741;
+    public int fieldInt8742;
+    public int fieldInt8743;
+    public int fieldInt8744;
+    public int fieldInt8745;
+    public int fieldInt8746;
+    public int fieldInt8747;
+    public int fieldInt8748;
+    public int fieldInt8749;
+    public int fieldInt8750;
+    public int fieldInt8751;
+    public int fieldInt8752;
+    public int fieldInt8753;
+    public int fieldInt8754;
+    public int fieldInt8755;
+    public int fieldInt8756;
+    public int fieldInt8757;
+    public int fieldInt8758;
+    public int fieldInt8759;
+    public int fieldInt8760;
+    public int fieldInt8761;
+    public int fieldInt8762;
+    public int fieldInt8763;
+    public int fieldInt8764;
+    public int fieldInt8765;
+    public int fieldInt8766;
+    public int fieldInt8767;
+    public int fieldInt8768;
+    public int fieldInt8769;
+    public int fieldInt8770;
+    public int fieldInt8771;
+    public int fieldInt8772;
+    public int fieldInt8773;
+    public int fieldInt8774;
+    public int fieldInt8775;
+    public int fieldInt8776;
+    public int fieldInt8777;
+    public int fieldInt8778;
+    public int fieldInt8779;
+    public int fieldInt8780;
+    public int fieldInt8781;
+    public int fieldInt8782;
+    public int fieldInt8783;
+    public int fieldInt8784;
+    public int fieldInt8785;
+    public int fieldInt8786;
+    public int fieldInt8787;
+    public int fieldInt8788;
+    public int fieldInt8789;
+    public int fieldInt8790;
+    public int fieldInt8791;
+    public int fieldInt8792;
+    public int fieldInt8793;
+    public int fieldInt8794;
+    public int fieldInt8795;
+    public int fieldInt8796;
+    public int fieldInt8797;
+    public int fieldInt8798;
+    public int fieldInt8799;
+    public int fieldInt8800;
+    public int fieldInt8801;
+    public int fieldInt8802;
+    public int fieldInt8803;
+    public int fieldInt8804;
+    public int fieldInt8805;
+    public int fieldInt8806;
+    public int fieldInt8807;
+    public int fieldInt8808;
+    public int fieldInt8809;
+    public int fieldInt8810;
+    public int fieldInt8811;
+    public int fieldInt8812;
+    public int fieldInt8813;
+    public int fieldInt8814;
+    public int fieldInt8815;
+    public int fieldInt8816;
+    public int fieldInt8817;
+    public int fieldInt8818;
+    public int fieldInt8819;
+    public int fieldInt8820;
+    public int fieldInt8821;
+    public int fieldInt8822;
+    public int fieldInt8823;
+    public int fieldInt8824;
+    public int fieldInt8825;
+    public int fieldInt8826;
+    public int fieldInt8827;
+    public int fieldInt8828;
+    public int fieldInt8829;
+    public int fieldInt8830;
+    public int fieldInt8831;
+    public int fieldInt8832;
+    public int fieldInt8833;
+    public int fieldInt8834;
+    public int fieldInt8835;
+    public int fieldInt8836;
+    public int fieldInt8837;
+    public int fieldInt8838;
+    public int fieldInt8839;
+    public int fieldInt8840;
+    public int fieldInt8841;
+    public int fieldInt8842;
+    public int fieldInt8843;
+    public int fieldInt8844;
+    public int fieldInt8845;
+    public int fieldInt8846;
+    public int fieldInt8847;
+    public int fieldInt8848;
+    public int fieldInt8849;
+    public int fieldInt8850;
+    public int fieldInt8851;
+    public int fieldInt8852;
+    public int fieldInt8853;
+    public int fieldInt8854;
+    public int fieldInt8855;
+    public int fieldInt8856;
+    public int fieldInt8857;
+    public int fieldInt8858;
+    public int fieldInt8859;
+    public int fieldInt8860;
+    public int fieldInt8861;
+    public int fieldInt8862;
+    public int fieldInt8863;
+    public int fieldInt8864;
+    public int fieldInt8865;
+    public int fieldInt8866;
+    public int fieldInt8867;
+    public int fieldInt8868;
+    public int fieldInt8869;
+    public int fieldInt8870;
+    public int fieldInt8871;
+    public int fieldInt8872;
+    public int fieldInt8873;
+    public int fieldInt8874;
+    public int fieldInt8875;
+    public int fieldInt8876;
+    public int fieldInt8877;
+    public int fieldInt8878;
+    public int fieldInt8879;
+    public int fieldInt8880;
+    public int fieldInt8881;
+    public int fieldInt8882;
+    public int fieldInt8883;
+    public int fieldInt8884;
+    public int fieldInt8885;
+    public int fieldInt8886;
+    public int fieldInt8887;
+    public int fieldInt8888;
+    public int fieldInt8889;
+    public int fieldInt8890;
+    public int fieldInt8891;
+    public int fieldInt8892;
+    public int fieldInt8893;
+    public int fieldInt8894;
+    public int fieldInt8895;
+    public int fieldInt8896;
+    public int fieldInt8897;
+    public int fieldInt8898;
+    public int fieldInt8899;
+    public int fieldInt8900;
+    public int fieldInt8901;
+    public int fieldInt8902;
+    public int fieldInt8903;
+    public int fieldInt8904;
+    public int fieldInt8905;
+    public int fieldInt8906;
+    public int fieldInt8907;
+    public int fieldInt8908;
+    public int fieldInt8909;
+    public int fieldInt8910;
+    public int fieldInt8911;
+    public int fieldInt8912;
+    public int fieldInt8913;
+    public int fieldInt8914;
+    public int fieldInt8915;
+    public int fieldInt8916;
+    public int fieldInt8917;
+    public int fieldInt8918;
+    public int fieldInt8919;
+    public int fieldInt8920;
+    public int fieldInt8921;
+    public int fieldInt8922;
+    public int fieldInt8923;
+    public int fieldInt8924;
+    public int fieldInt8925;
+    public int fieldInt8926;
+    public int fieldInt8927;
+    public int fieldInt8928;
+    public int fieldInt8929;
+    public int fieldInt8930;
+    public int fieldInt8931;
+    public int fieldInt8932;
+    public int fieldInt8933;
+    public int fieldInt8934;
+    public int fieldInt8935;
+    public int fieldInt8936;
+    public int fieldInt8937;
+    public int fieldInt8938;
+    public int fieldInt8939;
+    public int fieldInt8940;
+    public int fieldInt8941;
+    public int fieldInt8942;
+    public int fieldInt8943;
+    public int fieldInt8944;
+    public int fieldInt8945;
+    public int fieldInt8946;
+    public int fieldInt8947;
+    public int fieldInt8948;
+    public int fieldInt8949;
+    public int fieldInt8950;
+    public int fieldInt8951;
+    public int fieldInt8952;
+    public int fieldInt8953;
+    public int fieldInt8954;
+    public int fieldInt8955;
+    public int fieldInt8956;
+    public int fieldInt8957;
+    public int fieldInt8958;
+    public int fieldInt8959;
+    public int fieldInt8960;
+    public int fieldInt8961;
+    public int fieldInt8962;
+    public int fieldInt8963;
+    public int fieldInt8964;
+    public int fieldInt8965;
+    public int fieldInt8966;
+    public int fieldInt8967;
+    public int fieldInt8968;
+    public int fieldInt8969;
+    public int fieldInt8970;
+    public int fieldInt8971;
+    public int fieldInt8972;
+    public int fieldInt8973;
+    public int fieldInt8974;
+    public int fieldInt8975;
+    public int fieldInt8976;
+    public int fieldInt8977;
+    public int fieldInt8978;
+    public int fieldInt8979;
+    public int fieldInt8980;
+    public int fieldInt8981;
+    public int fieldInt8982;
+    public int fieldInt8983;
+    public int fieldInt8984;
+    public int fieldInt8985;
+    public int fieldInt8986;
+    public int fieldInt8987;
+    public int fieldInt8988;
+    public int fieldInt8989;
+    public int fieldInt8990;
+    public int fieldInt8991;
+    public int fieldInt8992;
+    public int fieldInt8993;
+    public int fieldInt8994;
+    public int fieldInt8995;
+    public int fieldInt8996;
+    public int fieldInt8997;
+    public int fieldInt8998;
+    public int fieldInt8999;
+    public int fieldInt9000;
+    public int fieldInt9001;
+    public int fieldInt9002;
+    public int fieldInt9003;
+    public int fieldInt9004;
+    public int fieldInt9005;
+    public int fieldInt9006;
+    public int fieldInt9007;
+    public int fieldInt9008;
+    public int fieldInt9009;
+    public int fieldInt9010;
+    public int fieldInt9011;
+    public int fieldInt9012;
+    public int fieldInt9013;
+    public int fieldInt9014;
+    public int fieldInt9015;
+    public int fieldInt9016;
+    public int fieldInt9017;
+    public int fieldInt9018;
+    public int fieldInt9019;
+    public int fieldInt9020;
+    public int fieldInt9021;
+    public int fieldInt9022;
+    public int fieldInt9023;
+    public int fieldInt9024;
+    public int fieldInt9025;
+    public int fieldInt9026;
+    public int fieldInt9027;
+    public int fieldInt9028;
+    public int fieldInt9029;
+    public int fieldInt9030;
+    public int fieldInt9031;
+    public int fieldInt9032;
+    public int fieldInt9033;
+    public int fieldInt9034;
+    public int fieldInt9035;
+    public int fieldInt9036;
+    public int fieldInt9037;
+    public int fieldInt9038;
+    public int fieldInt9039;
+    public int fieldInt9040;
+    public int fieldInt9041;
+    public int fieldInt9042;
+    public int fieldInt9043;
+    public int fieldInt9044;
+    public int fieldInt9045;
+    public int fieldInt9046;
+    public int fieldInt9047;
+    public int fieldInt9048;
+    public int fieldInt9049;
+    public int fieldInt9050;
+    public int fieldInt9051;
+    public int fieldInt9052;
+    public int fieldInt9053;
+    public int fieldInt9054;
+    public int fieldInt9055;
+    public int fieldInt9056;
+    public int fieldInt9057;
+    public int fieldInt9058;
+    public int fieldInt9059;
+    public int fieldInt9060;
+    public int fieldInt9061;
+    public int fieldInt9062;
+    public int fieldInt9063;
+    public int fieldInt9064;
+    public int fieldInt9065;
+    public int fieldInt9066;
+    public int fieldInt9067;
+    public int fieldInt9068;
+    public int fieldInt9069;
+    public int fieldInt9070;
+    public int fieldInt9071;
+    public int fieldInt9072;
+    public int fieldInt9073;
+    public int fieldInt9074;
+    public int fieldInt9075;
+    public int fieldInt9076;
+    public int fieldInt9077;
+    public int fieldInt9078;
+    public int fieldInt9079;
+    public int fieldInt9080;
+    public int fieldInt9081;
+    public int fieldInt9082;
+    public int fieldInt9083;
+    public int fieldInt9084;
+    public int fieldInt9085;
+    public int fieldInt9086;
+    public int fieldInt9087;
+    public int fieldInt9088;
+    public int fieldInt9089;
+    public int fieldInt9090;
+    public int fieldInt9091;
+    public int fieldInt9092;
+    public int fieldInt9093;
+    public int fieldInt9094;
+    public int fieldInt9095;
+    public int fieldInt9096;
+    public int fieldInt9097;
+    public int fieldInt9098;
+    public int fieldInt9099;
+    public int fieldInt9100;
+    public int fieldInt9101;
+    public int fieldInt9102;
+    public int fieldInt9103;
+    public int fieldInt9104;
+    public int fieldInt9105;
+    public int fieldInt9106;
+    public int fieldInt9107;
+    public int fieldInt9108;
+    public int fieldInt9109;
+    public int fieldInt9110;
+    public int fieldInt9111;
+    public int fieldInt9112;
+    public int fieldInt9113;
+    public int fieldInt9114;
+    public int fieldInt9115;
+    public int fieldInt9116;
+    public int fieldInt9117;
+    public int fieldInt9118;
+    public int fieldInt9119;
+    public int fieldInt9120;
+    public int fieldInt9121;
+    public int fieldInt9122;
+    public int fieldInt9123;
+    public int fieldInt9124;
+    public int fieldInt9125;
+    public int fieldInt9126;
+    public int fieldInt9127;
+    public int fieldInt9128;
+    public int fieldInt9129;
+    public int fieldInt9130;
+    public int fieldInt9131;
+    public int fieldInt9132;
+    public int fieldInt9133;
+    public int fieldInt9134;
+    public int fieldInt9135;
+    public int fieldInt9136;
+    public int fieldInt9137;
+    public int fieldInt9138;
+    public int fieldInt9139;
+    public int fieldInt9140;
+    public int fieldInt9141;
+    public int fieldInt9142;
+    public int fieldInt9143;
+    public int fieldInt9144;
+    public int fieldInt9145;
+    public int fieldInt9146;
+    public int fieldInt9147;
+    public int fieldInt9148;
+    public int fieldInt9149;
+    public int fieldInt9150;
+    public int fieldInt9151;
+    public int fieldInt9152;
+    public int fieldInt9153;
+    public int fieldInt9154;
+    public int fieldInt9155;
+    public int fieldInt9156;
+    public int fieldInt9157;
+    public int fieldInt9158;
+    public int fieldInt9159;
+    public int fieldInt9160;
+    public int fieldInt9161;
+    public int fieldInt9162;
+    public int fieldInt9163;
+    public int fieldInt9164;
+    public int fieldInt9165;
+    public int fieldInt9166;
+    public int fieldInt9167;
+    public int fieldInt9168;
+    public int fieldInt9169;
+    public int fieldInt9170;
+    public int fieldInt9171;
+    public int fieldInt9172;
+    public int fieldInt9173;
+    public int fieldInt9174;
+    public int fieldInt9175;
+    public int fieldInt9176;
+    public int fieldInt9177;
+    public int fieldInt9178;
+    public int fieldInt9179;
+    public int fieldInt9180;
+    public int fieldInt9181;
+    public int fieldInt9182;
+    public int fieldInt9183;
+    public int fieldInt9184;
+    public int fieldInt9185;
+    public int fieldInt9186;
+    public int fieldInt9187;
+    public int fieldInt9188;
+    public int fieldInt9189;
+    public int fieldInt9190;
+    public int fieldInt9191;
+    public int fieldInt9192;
+    public int fieldInt9193;
+    public int fieldInt9194;
+    public int fieldInt9195;
+    public int fieldInt9196;
+    public int fieldInt9197;
+    public int fieldInt9198;
+    public int fieldInt9199;
+    public int fieldInt9200;
+    public int fieldInt9201;
+    public int fieldInt9202;
+    public int fieldInt9203;
+    public int fieldInt9204;
+    public int fieldInt9205;
+    public int fieldInt9206;
+    public int fieldInt9207;
+    public int fieldInt9208;
+    public int fieldInt9209;
+    public int fieldInt9210;
+    public int fieldInt9211;
+    public int fieldInt9212;
+    public int fieldInt9213;
+    public int fieldInt9214;
+    public int fieldInt9215;
+    public int fieldInt9216;
+    public int fieldInt9217;
+    public int fieldInt9218;
+    public int fieldInt9219;
+    public int fieldInt9220;
+    public int fieldInt9221;
+    public int fieldInt9222;
+    public int fieldInt9223;
+    public int fieldInt9224;
+    public int fieldInt9225;
+    public int fieldInt9226;
+    public int fieldInt9227;
+    public int fieldInt9228;
+    public int fieldInt9229;
+    public int fieldInt9230;
+    public int fieldInt9231;
+    public int fieldInt9232;
+    public int fieldInt9233;
+    public int fieldInt9234;
+    public int fieldInt9235;
+    public int fieldInt9236;
+    public int fieldInt9237;
+    public int fieldInt9238;
+    public int fieldInt9239;
+    public int fieldInt9240;
+    public int fieldInt9241;
+    public int fieldInt9242;
+    public int fieldInt9243;
+    public int fieldInt9244;
+    public int fieldInt9245;
+    public int fieldInt9246;
+    public int fieldInt9247;
+    public int fieldInt9248;
+    public int fieldInt9249;
+    public int fieldInt9250;
+    public int fieldInt9251;
+    public int fieldInt9252;
+    public int fieldInt9253;
+    public int fieldInt9254;
+    public int fieldInt9255;
+    public int fieldInt9256;
+    public int fieldInt9257;
+    public int fieldInt9258;
+    public int fieldInt9259;
+    public int fieldInt9260;
+    public int fieldInt9261;
+    public int fieldInt9262;
+    public int fieldInt9263;
+    public int fieldInt9264;
+    public int fieldInt9265;
+    public int fieldInt9266;
+    public int fieldInt9267;
+    public int fieldInt9268;
+    public int fieldInt9269;
+    public int fieldInt9270;
+    public int fieldInt9271;
+    public int fieldInt9272;
+    public int fieldInt9273;
+    public int fieldInt9274;
+    public int fieldInt9275;
+    public int fieldInt9276;
+    public int fieldInt9277;
+    public int fieldInt9278;
+    public int fieldInt9279;
+    public int fieldInt9280;
+    public int fieldInt9281;
+    public int fieldInt9282;
+    public int fieldInt9283;
+    public int fieldInt9284;
+    public int fieldInt9285;
+    public int fieldInt9286;
+    public int fieldInt9287;
+    public int fieldInt9288;
+    public int fieldInt9289;
+    public int fieldInt9290;
+    public int fieldInt9291;
+    public int fieldInt9292;
+    public int fieldInt9293;
+    public int fieldInt9294;
+    public int fieldInt9295;
+    public int fieldInt9296;
+    public int fieldInt9297;
+    public int fieldInt9298;
+    public int fieldInt9299;
+    public int fieldInt9300;
+    public int fieldInt9301;
+    public int fieldInt9302;
+    public int fieldInt9303;
+    public int fieldInt9304;
+    public int fieldInt9305;
+    public int fieldInt9306;
+    public int fieldInt9307;
+    public int fieldInt9308;
+    public int fieldInt9309;
+    public int fieldInt9310;
+    public int fieldInt9311;
+    public int fieldInt9312;
+    public int fieldInt9313;
+    public int fieldInt9314;
+    public int fieldInt9315;
+    public int fieldInt9316;
+    public int fieldInt9317;
+    public int fieldInt9318;
+    public int fieldInt9319;
+    public int fieldInt9320;
+    public int fieldInt9321;
+    public int fieldInt9322;
+    public int fieldInt9323;
+    public int fieldInt9324;
+    public int fieldInt9325;
+    public int fieldInt9326;
+    public int fieldInt9327;
+    public int fieldInt9328;
+    public int fieldInt9329;
+    public int fieldInt9330;
+    public int fieldInt9331;
+    public int fieldInt9332;
+    public int fieldInt9333;
+    public int fieldInt9334;
+    public int fieldInt9335;
+    public int fieldInt9336;
+    public int fieldInt9337;
+    public int fieldInt9338;
+    public int fieldInt9339;
+    public int fieldInt9340;
+    public int fieldInt9341;
+    public int fieldInt9342;
+    public int fieldInt9343;
+    public int fieldInt9344;
+    public int fieldInt9345;
+    public int fieldInt9346;
+    public int fieldInt9347;
+    public int fieldInt9348;
+    public int fieldInt9349;
+    public int fieldInt9350;
+    public int fieldInt9351;
+    public int fieldInt9352;
+    public int fieldInt9353;
+    public int fieldInt9354;
+    public int fieldInt9355;
+    public int fieldInt9356;
+    public int fieldInt9357;
+    public int fieldInt9358;
+    public int fieldInt9359;
+    public int fieldInt9360;
+    public int fieldInt9361;
+    public int fieldInt9362;
+    public int fieldInt9363;
+    public int fieldInt9364;
+    public int fieldInt9365;
+    public int fieldInt9366;
+    public int fieldInt9367;
+    public int fieldInt9368;
+    public int fieldInt9369;
+    public int fieldInt9370;
+    public int fieldInt9371;
+    public int fieldInt9372;
+    public int fieldInt9373;
+    public int fieldInt9374;
+    public int fieldInt9375;
+    public int fieldInt9376;
+    public int fieldInt9377;
+    public int fieldInt9378;
+    public int fieldInt9379;
+    public int fieldInt9380;
+    public int fieldInt9381;
+    public int fieldInt9382;
+    public int fieldInt9383;
+    public int fieldInt9384;
+    public int fieldInt9385;
+    public int fieldInt9386;
+    public int fieldInt9387;
+    public int fieldInt9388;
+    public int fieldInt9389;
+    public int fieldInt9390;
+    public int fieldInt9391;
+    public int fieldInt9392;
+    public int fieldInt9393;
+    public int fieldInt9394;
+    public int fieldInt9395;
+    public int fieldInt9396;
+    public int fieldInt9397;
+    public int fieldInt9398;
+    public int fieldInt9399;
+    public int fieldInt9400;
+    public int fieldInt9401;
+    public int fieldInt9402;
+    public int fieldInt9403;
+    public int fieldInt9404;
+    public int fieldInt9405;
+    public int fieldInt9406;
+    public int fieldInt9407;
+    public int fieldInt9408;
+    public int fieldInt9409;
+    public int fieldInt9410;
+    public int fieldInt9411;
+    public int fieldInt9412;
+    public int fieldInt9413;
+    public int fieldInt9414;
+    public int fieldInt9415;
+    public int fieldInt9416;
+    public int fieldInt9417;
+    public int fieldInt9418;
+    public int fieldInt9419;
+    public int fieldInt9420;
+    public int fieldInt9421;
+    public int fieldInt9422;
+    public int fieldInt9423;
+    public int fieldInt9424;
+    public int fieldInt9425;
+    public int fieldInt9426;
+    public int fieldInt9427;
+    public int fieldInt9428;
+    public int fieldInt9429;
+    public int fieldInt9430;
+    public int fieldInt9431;
+    public int fieldInt9432;
+    public int fieldInt9433;
+    public int fieldInt9434;
+    public int fieldInt9435;
+    public int fieldInt9436;
+    public int fieldInt9437;
+    public int fieldInt9438;
+    public int fieldInt9439;
+    public int fieldInt9440;
+    public int fieldInt9441;
+    public int fieldInt9442;
+    public int fieldInt9443;
+    public int fieldInt9444;
+    public int fieldInt9445;
+    public int fieldInt9446;
+    public int fieldInt9447;
+    public int fieldInt9448;
+    public int fieldInt9449;
+    public int fieldInt9450;
+    public int fieldInt9451;
+    public int fieldInt9452;
+    public int fieldInt9453;
+    public int fieldInt9454;
+    public int fieldInt9455;
+    public int fieldInt9456;
+    public int fieldInt9457;
+    public int fieldInt9458;
+    public int fieldInt9459;
+    public int fieldInt9460;
+    public int fieldInt9461;
+    public int fieldInt9462;
+    public int fieldInt9463;
+    public int fieldInt9464;
+    public int fieldInt9465;
+    public int fieldInt9466;
+    public int fieldInt9467;
+    public int fieldInt9468;
+    public int fieldInt9469;
+    public int fieldInt9470;
+    public int fieldInt9471;
+    public int fieldInt9472;
+    public int fieldInt9473;
+    public int fieldInt9474;
+    public int fieldInt9475;
+    public int fieldInt9476;
+    public int fieldInt9477;
+    public int fieldInt9478;
+    public int fieldInt9479;
+    public int fieldInt9480;
+    public int fieldInt9481;
+    public int fieldInt9482;
+    public int fieldInt9483;
+    public int fieldInt9484;
+    public int fieldInt9485;
+    public int fieldInt9486;
+    public int fieldInt9487;
+    public int fieldInt9488;
+    public int fieldInt9489;
+    public int fieldInt9490;
+    public int fieldInt9491;
+    public int fieldInt9492;
+    public int fieldInt9493;
+    public int fieldInt9494;
+    public int fieldInt9495;
+    public int fieldInt9496;
+    public int fieldInt9497;
+    public int fieldInt9498;
+    public int fieldInt9499;
+    public int fieldInt9500;
+    public int fieldInt9501;
+    public int fieldInt9502;
+    public int fieldInt9503;
+    public int fieldInt9504;
+    public int fieldInt9505;
+    public int fieldInt9506;
+    public int fieldInt9507;
+    public int fieldInt9508;
+    public int fieldInt9509;
+    public int fieldInt9510;
+    public int fieldInt9511;
+    public int fieldInt9512;
+    public int fieldInt9513;
+    public int fieldInt9514;
+    public int fieldInt9515;
+    public int fieldInt9516;
+    public int fieldInt9517;
+    public int fieldInt9518;
+    public int fieldInt9519;
+    public int fieldInt9520;
+    public int fieldInt9521;
+    public int fieldInt9522;
+    public int fieldInt9523;
+    public int fieldInt9524;
+    public int fieldInt9525;
+    public int fieldInt9526;
+    public int fieldInt9527;
+    public int fieldInt9528;
+    public int fieldInt9529;
+    public int fieldInt9530;
+    public int fieldInt9531;
+    public int fieldInt9532;
+    public int fieldInt9533;
+    public int fieldInt9534;
+    public int fieldInt9535;
+    public int fieldInt9536;
+    public int fieldInt9537;
+    public int fieldInt9538;
+    public int fieldInt9539;
+    public int fieldInt9540;
+    public int fieldInt9541;
+    public int fieldInt9542;
+    public int fieldInt9543;
+    public int fieldInt9544;
+    public int fieldInt9545;
+    public int fieldInt9546;
+    public int fieldInt9547;
+    public int fieldInt9548;
+    public int fieldInt9549;
+    public int fieldInt9550;
+    public int fieldInt9551;
+    public int fieldInt9552;
+    public int fieldInt9553;
+    public int fieldInt9554;
+    public int fieldInt9555;
+    public int fieldInt9556;
+    public int fieldInt9557;
+    public int fieldInt9558;
+    public int fieldInt9559;
+    public int fieldInt9560;
+    public int fieldInt9561;
+    public int fieldInt9562;
+    public int fieldInt9563;
+    public int fieldInt9564;
+    public int fieldInt9565;
+    public int fieldInt9566;
+    public int fieldInt9567;
+    public int fieldInt9568;
+    public int fieldInt9569;
+    public int fieldInt9570;
+    public int fieldInt9571;
+    public int fieldInt9572;
+    public int fieldInt9573;
+    public int fieldInt9574;
+    public int fieldInt9575;
+    public int fieldInt9576;
+    public int fieldInt9577;
+    public int fieldInt9578;
+    public int fieldInt9579;
+    public int fieldInt9580;
+    public int fieldInt9581;
+    public int fieldInt9582;
+    public int fieldInt9583;
+    public int fieldInt9584;
+    public int fieldInt9585;
+    public int fieldInt9586;
+    public int fieldInt9587;
+    public int fieldInt9588;
+    public int fieldInt9589;
+    public int fieldInt9590;
+    public int fieldInt9591;
+    public int fieldInt9592;
+    public int fieldInt9593;
+    public int fieldInt9594;
+    public int fieldInt9595;
+    public int fieldInt9596;
+    public int fieldInt9597;
+    public int fieldInt9598;
+    public int fieldInt9599;
+    public int fieldInt9600;
+    public int fieldInt9601;
+    public int fieldInt9602;
+    public int fieldInt9603;
+    public int fieldInt9604;
+    public int fieldInt9605;
+    public int fieldInt9606;
+    public int fieldInt9607;
+    public int fieldInt9608;
+    public int fieldInt9609;
+    public int fieldInt9610;
+    public int fieldInt9611;
+    public int fieldInt9612;
+    public int fieldInt9613;
+    public int fieldInt9614;
+    public int fieldInt9615;
+    public int fieldInt9616;
+    public int fieldInt9617;
+    public int fieldInt9618;
+    public int fieldInt9619;
+    public int fieldInt9620;
+    public int fieldInt9621;
+    public int fieldInt9622;
+    public int fieldInt9623;
+    public int fieldInt9624;
+    public int fieldInt9625;
+    public int fieldInt9626;
+    public int fieldInt9627;
+    public int fieldInt9628;
+    public int fieldInt9629;
+    public int fieldInt9630;
+    public int fieldInt9631;
+    public int fieldInt9632;
+    public int fieldInt9633;
+    public int fieldInt9634;
+    public int fieldInt9635;
+    public int fieldInt9636;
+    public int fieldInt9637;
+    public int fieldInt9638;
+    public int fieldInt9639;
+    public int fieldInt9640;
+    public int fieldInt9641;
+    public int fieldInt9642;
+    public int fieldInt9643;
+    public int fieldInt9644;
+    public int fieldInt9645;
+    public int fieldInt9646;
+    public int fieldInt9647;
+    public int fieldInt9648;
+    public int fieldInt9649;
+    public int fieldInt9650;
+    public int fieldInt9651;
+    public int fieldInt9652;
+    public int fieldInt9653;
+    public int fieldInt9654;
+    public int fieldInt9655;
+    public int fieldInt9656;
+    public int fieldInt9657;
+    public int fieldInt9658;
+    public int fieldInt9659;
+    public int fieldInt9660;
+    public int fieldInt9661;
+    public int fieldInt9662;
+    public int fieldInt9663;
+    public int fieldInt9664;
+    public int fieldInt9665;
+    public int fieldInt9666;
+    public int fieldInt9667;
+    public int fieldInt9668;
+    public int fieldInt9669;
+    public int fieldInt9670;
+    public int fieldInt9671;
+    public int fieldInt9672;
+    public int fieldInt9673;
+    public int fieldInt9674;
+    public int fieldInt9675;
+    public int fieldInt9676;
+    public int fieldInt9677;
+    public int fieldInt9678;
+    public int fieldInt9679;
+    public int fieldInt9680;
+    public int fieldInt9681;
+    public int fieldInt9682;
+    public int fieldInt9683;
+    public int fieldInt9684;
+    public int fieldInt9685;
+    public int fieldInt9686;
+    public int fieldInt9687;
+    public int fieldInt9688;
+    public int fieldInt9689;
+    public int fieldInt9690;
+    public int fieldInt9691;
+    public int fieldInt9692;
+    public int fieldInt9693;
+    public int fieldInt9694;
+    public int fieldInt9695;
+    public int fieldInt9696;
+    public int fieldInt9697;
+    public int fieldInt9698;
+    public int fieldInt9699;
+    public int fieldInt9700;
+    public int fieldInt9701;
+    public int fieldInt9702;
+    public int fieldInt9703;
+    public int fieldInt9704;
+    public int fieldInt9705;
+    public int fieldInt9706;
+    public int fieldInt9707;
+    public int fieldInt9708;
+    public int fieldInt9709;
+    public int fieldInt9710;
+    public int fieldInt9711;
+    public int fieldInt9712;
+    public int fieldInt9713;
+    public int fieldInt9714;
+    public int fieldInt9715;
+    public int fieldInt9716;
+    public int fieldInt9717;
+    public int fieldInt9718;
+    public int fieldInt9719;
+    public int fieldInt9720;
+    public int fieldInt9721;
+    public int fieldInt9722;
+    public int fieldInt9723;
+    public int fieldInt9724;
+    public int fieldInt9725;
+    public int fieldInt9726;
+    public int fieldInt9727;
+    public int fieldInt9728;
+    public int fieldInt9729;
+    public int fieldInt9730;
+    public int fieldInt9731;
+    public int fieldInt9732;
+    public int fieldInt9733;
+    public int fieldInt9734;
+    public int fieldInt9735;
+    public int fieldInt9736;
+    public int fieldInt9737;
+    public int fieldInt9738;
+    public int fieldInt9739;
+    public int fieldInt9740;
+    public int fieldInt9741;
+    public int fieldInt9742;
+    public int fieldInt9743;
+    public int fieldInt9744;
+    public int fieldInt9745;
+    public int fieldInt9746;
+    public int fieldInt9747;
+    public int fieldInt9748;
+    public int fieldInt9749;
+    public int fieldInt9750;
+    public int fieldInt9751;
+    public int fieldInt9752;
+    public int fieldInt9753;
+    public int fieldInt9754;
+    public int fieldInt9755;
+    public int fieldInt9756;
+    public int fieldInt9757;
+    public int fieldInt9758;
+    public int fieldInt9759;
+    public int fieldInt9760;
+    public int fieldInt9761;
+    public int fieldInt9762;
+    public int fieldInt9763;
+    public int fieldInt9764;
+    public int fieldInt9765;
+    public int fieldInt9766;
+    public int fieldInt9767;
+    public int fieldInt9768;
+    public int fieldInt9769;
+    public int fieldInt9770;
+    public int fieldInt9771;
+    public int fieldInt9772;
+    public int fieldInt9773;
+    public int fieldInt9774;
+    public int fieldInt9775;
+    public int fieldInt9776;
+    public int fieldInt9777;
+    public int fieldInt9778;
+    public int fieldInt9779;
+    public int fieldInt9780;
+    public int fieldInt9781;
+    public int fieldInt9782;
+    public int fieldInt9783;
+    public int fieldInt9784;
+    public int fieldInt9785;
+    public int fieldInt9786;
+    public int fieldInt9787;
+    public int fieldInt9788;
+    public int fieldInt9789;
+    public int fieldInt9790;
+    public int fieldInt9791;
+    public int fieldInt9792;
+    public int fieldInt9793;
+    public int fieldInt9794;
+    public int fieldInt9795;
+    public int fieldInt9796;
+    public int fieldInt9797;
+    public int fieldInt9798;
+    public int fieldInt9799;
+    public int fieldInt9800;
+    public int fieldInt9801;
+    public int fieldInt9802;
+    public int fieldInt9803;
+    public int fieldInt9804;
+    public int fieldInt9805;
+    public int fieldInt9806;
+    public int fieldInt9807;
+    public int fieldInt9808;
+    public int fieldInt9809;
+    public int fieldInt9810;
+    public int fieldInt9811;
+    public int fieldInt9812;
+    public int fieldInt9813;
+    public int fieldInt9814;
+    public int fieldInt9815;
+    public int fieldInt9816;
+    public int fieldInt9817;
+    public int fieldInt9818;
+    public int fieldInt9819;
+    public int fieldInt9820;
+    public int fieldInt9821;
+    public int fieldInt9822;
+    public int fieldInt9823;
+    public int fieldInt9824;
+    public int fieldInt9825;
+    public int fieldInt9826;
+    public int fieldInt9827;
+    public int fieldInt9828;
+    public int fieldInt9829;
+    public int fieldInt9830;
+    public int fieldInt9831;
+    public int fieldInt9832;
+    public int fieldInt9833;
+    public int fieldInt9834;
+    public int fieldInt9835;
+    public int fieldInt9836;
+    public int fieldInt9837;
+    public int fieldInt9838;
+    public int fieldInt9839;
+    public int fieldInt9840;
+    public int fieldInt9841;
+    public int fieldInt9842;
+    public int fieldInt9843;
+    public int fieldInt9844;
+    public int fieldInt9845;
+    public int fieldInt9846;
+    public int fieldInt9847;
+    public int fieldInt9848;
+    public int fieldInt9849;
+    public int fieldInt9850;
+    public int fieldInt9851;
+    public int fieldInt9852;
+    public int fieldInt9853;
+    public int fieldInt9854;
+    public int fieldInt9855;
+    public int fieldInt9856;
+    public int fieldInt9857;
+    public int fieldInt9858;
+    public int fieldInt9859;
+    public int fieldInt9860;
+    public int fieldInt9861;
+    public int fieldInt9862;
+    public int fieldInt9863;
+    public int fieldInt9864;
+    public int fieldInt9865;
+    public int fieldInt9866;
+    public int fieldInt9867;
+    public int fieldInt9868;
+    public int fieldInt9869;
+    public int fieldInt9870;
+    public int fieldInt9871;
+    public int fieldInt9872;
+    public int fieldInt9873;
+    public int fieldInt9874;
+    public int fieldInt9875;
+    public int fieldInt9876;
+    public int fieldInt9877;
+    public int fieldInt9878;
+    public int fieldInt9879;
+    public int fieldInt9880;
+    public int fieldInt9881;
+    public int fieldInt9882;
+    public int fieldInt9883;
+    public int fieldInt9884;
+    public int fieldInt9885;
+    public int fieldInt9886;
+    public int fieldInt9887;
+    public int fieldInt9888;
+    public int fieldInt9889;
+    public int fieldInt9890;
+    public int fieldInt9891;
+    public int fieldInt9892;
+    public int fieldInt9893;
+    public int fieldInt9894;
+    public int fieldInt9895;
+    public int fieldInt9896;
+    public int fieldInt9897;
+    public int fieldInt9898;
+    public int fieldInt9899;
+    public int fieldInt9900;
+    public int fieldInt9901;
+    public int fieldInt9902;
+    public int fieldInt9903;
+    public int fieldInt9904;
+    public int fieldInt9905;
+    public int fieldInt9906;
+    public int fieldInt9907;
+    public int fieldInt9908;
+    public int fieldInt9909;
+    public int fieldInt9910;
+    public int fieldInt9911;
+    public int fieldInt9912;
+    public int fieldInt9913;
+    public int fieldInt9914;
+    public int fieldInt9915;
+    public int fieldInt9916;
+    public int fieldInt9917;
+    public int fieldInt9918;
+    public int fieldInt9919;
+    public int fieldInt9920;
+    public int fieldInt9921;
+    public int fieldInt9922;
+    public int fieldInt9923;
+    public int fieldInt9924;
+    public int fieldInt9925;
+    public int fieldInt9926;
+    public int fieldInt9927;
+    public int fieldInt9928;
+    public int fieldInt9929;
+    public int fieldInt9930;
+    public int fieldInt9931;
+    public int fieldInt9932;
+    public int fieldInt9933;
+    public int fieldInt9934;
+    public int fieldInt9935;
+    public int fieldInt9936;
+    public int fieldInt9937;
+    public int fieldInt9938;
+    public int fieldInt9939;
+    public int fieldInt9940;
+    public int fieldInt9941;
+    public int fieldInt9942;
+    public int fieldInt9943;
+    public int fieldInt9944;
+    public int fieldInt9945;
+    public int fieldInt9946;
+    public int fieldInt9947;
+    public int fieldInt9948;
+    public int fieldInt9949;
+    public int fieldInt9950;
+    public int fieldInt9951;
+    public int fieldInt9952;
+    public int fieldInt9953;
+    public int fieldInt9954;
+    public int fieldInt9955;
+    public int fieldInt9956;
+    public int fieldInt9957;
+    public int fieldInt9958;
+    public int fieldInt9959;
+    public int fieldInt9960;
+    public int fieldInt9961;
+    public int fieldInt9962;
+    public int fieldInt9963;
+    public int fieldInt9964;
+    public int fieldInt9965;
+    public int fieldInt9966;
+    public int fieldInt9967;
+    public int fieldInt9968;
+    public int fieldInt9969;
+    public int fieldInt9970;
+    public int fieldInt9971;
+    public int fieldInt9972;
+    public int fieldInt9973;
+    public int fieldInt9974;
+    public int fieldInt9975;
+    public int fieldInt9976;
+    public int fieldInt9977;
+    public int fieldInt9978;
+    public int fieldInt9979;
+    public int fieldInt9980;
+    public int fieldInt9981;
+    public int fieldInt9982;
+    public int fieldInt9983;
+    public int fieldInt9984;
+    public int fieldInt9985;
+    public int fieldInt9986;
+    public int fieldInt9987;
+    public int fieldInt9988;
+    public int fieldInt9989;
+    public int fieldInt9990;
+    public int fieldInt9991;
+    public int fieldInt9992;
+    public int fieldInt9993;
+    public int fieldInt9994;
+    public int fieldInt9995;
+    public int fieldInt9996;
+    public int fieldInt9997;
+    public int fieldInt9998;
+    public int fieldInt9999;
+    public int fieldInt10000;
+    public int fieldInt10001;
+    public int fieldInt10002;
+    public int fieldInt10003;
+    public int fieldInt10004;
+    public int fieldInt10005;
+    public int fieldInt10006;
+    public int fieldInt10007;
+    public int fieldInt10008;
+    public int fieldInt10009;
+    public int fieldInt10010;
+    public int fieldInt10011;
+    public int fieldInt10012;
+    public int fieldInt10013;
+    public int fieldInt10014;
+    public int fieldInt10015;
+    public int fieldInt10016;
+    public int fieldInt10017;
+    public int fieldInt10018;
+    public int fieldInt10019;
+    public int fieldInt10020;
+    public int fieldInt10021;
+    public int fieldInt10022;
+    public int fieldInt10023;
+    public int fieldInt10024;
+    public int fieldInt10025;
+    public int fieldInt10026;
+    public int fieldInt10027;
+    public int fieldInt10028;
+    public int fieldInt10029;
+    public int fieldInt10030;
+    public int fieldInt10031;
+    public int fieldInt10032;
+    public int fieldInt10033;
+    public int fieldInt10034;
+    public int fieldInt10035;
+    public int fieldInt10036;
+    public int fieldInt10037;
+    public int fieldInt10038;
+    public int fieldInt10039;
+    public int fieldInt10040;
+    public int fieldInt10041;
+    public int fieldInt10042;
+    public int fieldInt10043;
+    public int fieldInt10044;
+    public int fieldInt10045;
+    public int fieldInt10046;
+    public int fieldInt10047;
+    public int fieldInt10048;
+    public int fieldInt10049;
+    public int fieldInt10050;
+    public int fieldInt10051;
+    public int fieldInt10052;
+    public int fieldInt10053;
+    public int fieldInt10054;
+    public int fieldInt10055;
+    public int fieldInt10056;
+    public int fieldInt10057;
+    public int fieldInt10058;
+    public int fieldInt10059;
+    public int fieldInt10060;
+    public int fieldInt10061;
+    public int fieldInt10062;
+    public int fieldInt10063;
+    public int fieldInt10064;
+    public int fieldInt10065;
+    public int fieldInt10066;
+    public int fieldInt10067;
+    public int fieldInt10068;
+    public int fieldInt10069;
+    public int fieldInt10070;
+    public int fieldInt10071;
+    public int fieldInt10072;
+    public int fieldInt10073;
+    public int fieldInt10074;
+    public int fieldInt10075;
+    public int fieldInt10076;
+    public int fieldInt10077;
+    public int fieldInt10078;
+    public int fieldInt10079;
+    public int fieldInt10080;
+    public int fieldInt10081;
+    public int fieldInt10082;
+    public int fieldInt10083;
+    public int fieldInt10084;
+    public int fieldInt10085;
+    public int fieldInt10086;
+    public int fieldInt10087;
+    public int fieldInt10088;
+    public int fieldInt10089;
+    public int fieldInt10090;
+    public int fieldInt10091;
+    public int fieldInt10092;
+    public int fieldInt10093;
+    public int fieldInt10094;
+    public int fieldInt10095;
+    public int fieldInt10096;
+    public int fieldInt10097;
+    public int fieldInt10098;
+    public int fieldInt10099;
+    public int fieldInt10100;
+    public int fieldInt10101;
+    public int fieldInt10102;
+    public int fieldInt10103;
+    public int fieldInt10104;
+    public int fieldInt10105;
+    public int fieldInt10106;
+    public int fieldInt10107;
+    public int fieldInt10108;
+    public int fieldInt10109;
+    public int fieldInt10110;
+    public int fieldInt10111;
+    public int fieldInt10112;
+    public int fieldInt10113;
+    public int fieldInt10114;
+    public int fieldInt10115;
+    public int fieldInt10116;
+    public int fieldInt10117;
+    public int fieldInt10118;
+    public int fieldInt10119;
+    public int fieldInt10120;
+    public int fieldInt10121;
+    public int fieldInt10122;
+    public int fieldInt10123;
+    public int fieldInt10124;
+    public int fieldInt10125;
+    public int fieldInt10126;
+    public int fieldInt10127;
+    public int fieldInt10128;
+    public int fieldInt10129;
+    public int fieldInt10130;
+    public int fieldInt10131;
+    public int fieldInt10132;
+    public int fieldInt10133;
+    public int fieldInt10134;
+    public int fieldInt10135;
+    public int fieldInt10136;
+    public int fieldInt10137;
+    public int fieldInt10138;
+    public int fieldInt10139;
+    public int fieldInt10140;
+    public int fieldInt10141;
+    public int fieldInt10142;
+    public int fieldInt10143;
+    public int fieldInt10144;
+    public int fieldInt10145;
+    public int fieldInt10146;
+    public int fieldInt10147;
+    public int fieldInt10148;
+    public int fieldInt10149;
+    public int fieldInt10150;
+    public int fieldInt10151;
+    public int fieldInt10152;
+    public int fieldInt10153;
+    public int fieldInt10154;
+    public int fieldInt10155;
+    public int fieldInt10156;
+    public int fieldInt10157;
+    public int fieldInt10158;
+    public int fieldInt10159;
+    public int fieldInt10160;
+    public int fieldInt10161;
+    public int fieldInt10162;
+    public int fieldInt10163;
+    public int fieldInt10164;
+    public int fieldInt10165;
+    public int fieldInt10166;
+    public int fieldInt10167;
+    public int fieldInt10168;
+    public int fieldInt10169;
+    public int fieldInt10170;
+    public int fieldInt10171;
+    public int fieldInt10172;
+    public int fieldInt10173;
+    public int fieldInt10174;
+    public int fieldInt10175;
+    public int fieldInt10176;
+    public int fieldInt10177;
+    public int fieldInt10178;
+    public int fieldInt10179;
+    public int fieldInt10180;
+    public int fieldInt10181;
+    public int fieldInt10182;
+    public int fieldInt10183;
+    public int fieldInt10184;
+    public int fieldInt10185;
+    public int fieldInt10186;
+    public int fieldInt10187;
+    public int fieldInt10188;
+    public int fieldInt10189;
+    public int fieldInt10190;
+    public int fieldInt10191;
+    public int fieldInt10192;
+    public int fieldInt10193;
+    public int fieldInt10194;
+    public int fieldInt10195;
+    public int fieldInt10196;
+    public int fieldInt10197;
+    public int fieldInt10198;
+    public int fieldInt10199;
+    public int fieldInt10200;
+    public int fieldInt10201;
+    public int fieldInt10202;
+    public int fieldInt10203;
+    public int fieldInt10204;
+    public int fieldInt10205;
+    public int fieldInt10206;
+    public int fieldInt10207;
+    public int fieldInt10208;
+    public int fieldInt10209;
+    public int fieldInt10210;
+    public int fieldInt10211;
+    public int fieldInt10212;
+    public int fieldInt10213;
+    public int fieldInt10214;
+    public int fieldInt10215;
+    public int fieldInt10216;
+    public int fieldInt10217;
+    public int fieldInt10218;
+    public int fieldInt10219;
+    public int fieldInt10220;
+    public int fieldInt10221;
+    public int fieldInt10222;
+    public int fieldInt10223;
+    public int fieldInt10224;
+    public int fieldInt10225;
+    public int fieldInt10226;
+    public int fieldInt10227;
+    public int fieldInt10228;
+    public int fieldInt10229;
+    public int fieldInt10230;
+    public int fieldInt10231;
+    public int fieldInt10232;
+    public int fieldInt10233;
+    public int fieldInt10234;
+    public int fieldInt10235;
+    public int fieldInt10236;
+    public int fieldInt10237;
+    public int fieldInt10238;
+    public int fieldInt10239;
+    public int fieldInt10240;
+    public int fieldInt10241;
+    public int fieldInt10242;
+    public int fieldInt10243;
+    public int fieldInt10244;
+    public int fieldInt10245;
+    public int fieldInt10246;
+    public int fieldInt10247;
+    public int fieldInt10248;
+    public int fieldInt10249;
+    public int fieldInt10250;
+    public int fieldInt10251;
+    public int fieldInt10252;
+    public int fieldInt10253;
+    public int fieldInt10254;
+    public int fieldInt10255;
+    public int fieldInt10256;
+    public int fieldInt10257;
+    public int fieldInt10258;
+    public int fieldInt10259;
+    public int fieldInt10260;
+    public int fieldInt10261;
+    public int fieldInt10262;
+    public int fieldInt10263;
+    public int fieldInt10264;
+    public int fieldInt10265;
+    public int fieldInt10266;
+    public int fieldInt10267;
+    public int fieldInt10268;
+    public int fieldInt10269;
+    public int fieldInt10270;
+    public int fieldInt10271;
+    public int fieldInt10272;
+    public int fieldInt10273;
+    public int fieldInt10274;
+    public int fieldInt10275;
+    public int fieldInt10276;
+    public int fieldInt10277;
+    public int fieldInt10278;
+    public int fieldInt10279;
+    public int fieldInt10280;
+    public int fieldInt10281;
+    public int fieldInt10282;
+    public int fieldInt10283;
+    public int fieldInt10284;
+    public int fieldInt10285;
+    public int fieldInt10286;
+    public int fieldInt10287;
+    public int fieldInt10288;
+    public int fieldInt10289;
+    public int fieldInt10290;
+    public int fieldInt10291;
+    public int fieldInt10292;
+    public int fieldInt10293;
+    public int fieldInt10294;
+    public int fieldInt10295;
+    public int fieldInt10296;
+    public int fieldInt10297;
+    public int fieldInt10298;
+    public int fieldInt10299;
+    public int fieldInt10300;
+    public int fieldInt10301;
+    public int fieldInt10302;
+    public int fieldInt10303;
+    public int fieldInt10304;
+    public int fieldInt10305;
+    public int fieldInt10306;
+    public int fieldInt10307;
+    public int fieldInt10308;
+    public int fieldInt10309;
+    public int fieldInt10310;
+    public int fieldInt10311;
+    public int fieldInt10312;
+    public int fieldInt10313;
+    public int fieldInt10314;
+    public int fieldInt10315;
+    public int fieldInt10316;
+    public int fieldInt10317;
+    public int fieldInt10318;
+    public int fieldInt10319;
+    public int fieldInt10320;
+    public int fieldInt10321;
+    public int fieldInt10322;
+    public int fieldInt10323;
+    public int fieldInt10324;
+    public int fieldInt10325;
+    public int fieldInt10326;
+    public int fieldInt10327;
+    public int fieldInt10328;
+    public int fieldInt10329;
+    public int fieldInt10330;
+    public int fieldInt10331;
+    public int fieldInt10332;
+    public int fieldInt10333;
+    public int fieldInt10334;
+    public int fieldInt10335;
+    public int fieldInt10336;
+    public int fieldInt10337;
+    public int fieldInt10338;
+    public int fieldInt10339;
+    public int fieldInt10340;
+    public int fieldInt10341;
+    public int fieldInt10342;
+    public int fieldInt10343;
+    public int fieldInt10344;
+    public int fieldInt10345;
+    public int fieldInt10346;
+    public int fieldInt10347;
+    public int fieldInt10348;
+    public int fieldInt10349;
+    public int fieldInt10350;
+    public int fieldInt10351;
+    public int fieldInt10352;
+    public int fieldInt10353;
+    public int fieldInt10354;
+    public int fieldInt10355;
+    public int fieldInt10356;
+    public int fieldInt10357;
+    public int fieldInt10358;
+    public int fieldInt10359;
+    public int fieldInt10360;
+    public int fieldInt10361;
+    public int fieldInt10362;
+    public int fieldInt10363;
+    public int fieldInt10364;
+    public int fieldInt10365;
+    public int fieldInt10366;
+    public int fieldInt10367;
+    public int fieldInt10368;
+    public int fieldInt10369;
+    public int fieldInt10370;
+    public int fieldInt10371;
+    public int fieldInt10372;
+    public int fieldInt10373;
+    public int fieldInt10374;
+    public int fieldInt10375;
+    public int fieldInt10376;
+    public int fieldInt10377;
+    public int fieldInt10378;
+    public int fieldInt10379;
+    public int fieldInt10380;
+    public int fieldInt10381;
+    public int fieldInt10382;
+    public int fieldInt10383;
+    public int fieldInt10384;
+    public int fieldInt10385;
+    public int fieldInt10386;
+    public int fieldInt10387;
+    public int fieldInt10388;
+    public int fieldInt10389;
+    public int fieldInt10390;
+    public int fieldInt10391;
+    public int fieldInt10392;
+    public int fieldInt10393;
+    public int fieldInt10394;
+    public int fieldInt10395;
+    public int fieldInt10396;
+    public int fieldInt10397;
+    public int fieldInt10398;
+    public int fieldInt10399;
+    public int fieldInt10400;
+    public int fieldInt10401;
+    public int fieldInt10402;
+    public int fieldInt10403;
+    public int fieldInt10404;
+    public int fieldInt10405;
+    public int fieldInt10406;
+    public int fieldInt10407;
+    public int fieldInt10408;
+    public int fieldInt10409;
+    public int fieldInt10410;
+    public int fieldInt10411;
+    public int fieldInt10412;
+    public int fieldInt10413;
+    public int fieldInt10414;
+    public int fieldInt10415;
+    public int fieldInt10416;
+    public int fieldInt10417;
+    public int fieldInt10418;
+    public int fieldInt10419;
+    public int fieldInt10420;
+    public int fieldInt10421;
+    public int fieldInt10422;
+    public int fieldInt10423;
+    public int fieldInt10424;
+    public int fieldInt10425;
+    public int fieldInt10426;
+    public int fieldInt10427;
+    public int fieldInt10428;
+    public int fieldInt10429;
+    public int fieldInt10430;
+    public int fieldInt10431;
+    public int fieldInt10432;
+    public int fieldInt10433;
+    public int fieldInt10434;
+    public int fieldInt10435;
+    public int fieldInt10436;
+    public int fieldInt10437;
+    public int fieldInt10438;
+    public int fieldInt10439;
+    public int fieldInt10440;
+    public int fieldInt10441;
+    public int fieldInt10442;
+    public int fieldInt10443;
+    public int fieldInt10444;
+    public int fieldInt10445;
+    public int fieldInt10446;
+    public int fieldInt10447;
+    public int fieldInt10448;
+    public int fieldInt10449;
+    public int fieldInt10450;
+    public int fieldInt10451;
+    public int fieldInt10452;
+    public int fieldInt10453;
+    public int fieldInt10454;
+    public int fieldInt10455;
+    public int fieldInt10456;
+    public int fieldInt10457;
+    public int fieldInt10458;
+    public int fieldInt10459;
+    public int fieldInt10460;
+    public int fieldInt10461;
+    public int fieldInt10462;
+    public int fieldInt10463;
+    public int fieldInt10464;
+    public int fieldInt10465;
+    public int fieldInt10466;
+    public int fieldInt10467;
+    public int fieldInt10468;
+    public int fieldInt10469;
+    public int fieldInt10470;
+    public int fieldInt10471;
+    public int fieldInt10472;
+    public int fieldInt10473;
+    public int fieldInt10474;
+    public int fieldInt10475;
+    public int fieldInt10476;
+    public int fieldInt10477;
+    public int fieldInt10478;
+    public int fieldInt10479;
+    public int fieldInt10480;
+    public int fieldInt10481;
+    public int fieldInt10482;
+    public int fieldInt10483;
+    public int fieldInt10484;
+    public int fieldInt10485;
+    public int fieldInt10486;
+    public int fieldInt10487;
+    public int fieldInt10488;
+    public int fieldInt10489;
+    public int fieldInt10490;
+    public int fieldInt10491;
+    public int fieldInt10492;
+    public int fieldInt10493;
+    public int fieldInt10494;
+    public int fieldInt10495;
+    public int fieldInt10496;
+    public int fieldInt10497;
+    public int fieldInt10498;
+    public int fieldInt10499;
+    public int fieldInt10500;
+    public int fieldInt10501;
+    public int fieldInt10502;
+    public int fieldInt10503;
+    public int fieldInt10504;
+    public int fieldInt10505;
+    public int fieldInt10506;
+    public int fieldInt10507;
+    public int fieldInt10508;
+    public int fieldInt10509;
+    public int fieldInt10510;
+    public int fieldInt10511;
+    public int fieldInt10512;
+    public int fieldInt10513;
+    public int fieldInt10514;
+    public int fieldInt10515;
+    public int fieldInt10516;
+    public int fieldInt10517;
+    public int fieldInt10518;
+    public int fieldInt10519;
+    public int fieldInt10520;
+    public int fieldInt10521;
+    public int fieldInt10522;
+    public int fieldInt10523;
+    public int fieldInt10524;
+    public int fieldInt10525;
+    public int fieldInt10526;
+    public int fieldInt10527;
+    public int fieldInt10528;
+    public int fieldInt10529;
+    public int fieldInt10530;
+    public int fieldInt10531;
+    public int fieldInt10532;
+    public int fieldInt10533;
+    public int fieldInt10534;
+    public int fieldInt10535;
+    public int fieldInt10536;
+    public int fieldInt10537;
+    public int fieldInt10538;
+    public int fieldInt10539;
+    public int fieldInt10540;
+    public int fieldInt10541;
+    public int fieldInt10542;
+    public int fieldInt10543;
+    public int fieldInt10544;
+    public int fieldInt10545;
+    public int fieldInt10546;
+    public int fieldInt10547;
+    public int fieldInt10548;
+    public int fieldInt10549;
+    public int fieldInt10550;
+    public int fieldInt10551;
+    public int fieldInt10552;
+    public int fieldInt10553;
+    public int fieldInt10554;
+    public int fieldInt10555;
+    public int fieldInt10556;
+    public int fieldInt10557;
+    public int fieldInt10558;
+    public int fieldInt10559;
+    public int fieldInt10560;
+    public int fieldInt10561;
+    public int fieldInt10562;
+    public int fieldInt10563;
+    public int fieldInt10564;
+    public int fieldInt10565;
+    public int fieldInt10566;
+    public int fieldInt10567;
+    public int fieldInt10568;
+    public int fieldInt10569;
+    public int fieldInt10570;
+    public int fieldInt10571;
+    public int fieldInt10572;
+    public int fieldInt10573;
+    public int fieldInt10574;
+    public int fieldInt10575;
+    public int fieldInt10576;
+    public int fieldInt10577;
+    public int fieldInt10578;
+    public int fieldInt10579;
+    public int fieldInt10580;
+    public int fieldInt10581;
+    public int fieldInt10582;
+    public int fieldInt10583;
+    public int fieldInt10584;
+    public int fieldInt10585;
+    public int fieldInt10586;
+    public int fieldInt10587;
+    public int fieldInt10588;
+    public int fieldInt10589;
+    public int fieldInt10590;
+    public int fieldInt10591;
+    public int fieldInt10592;
+    public int fieldInt10593;
+    public int fieldInt10594;
+    public int fieldInt10595;
+    public int fieldInt10596;
+    public int fieldInt10597;
+    public int fieldInt10598;
+    public int fieldInt10599;
+    public int fieldInt10600;
+    public int fieldInt10601;
+    public int fieldInt10602;
+    public int fieldInt10603;
+    public int fieldInt10604;
+    public int fieldInt10605;
+    public int fieldInt10606;
+    public int fieldInt10607;
+    public int fieldInt10608;
+    public int fieldInt10609;
+    public int fieldInt10610;
+    public int fieldInt10611;
+    public int fieldInt10612;
+    public int fieldInt10613;
+    public int fieldInt10614;
+    public int fieldInt10615;
+    public int fieldInt10616;
+    public int fieldInt10617;
+    public int fieldInt10618;
+    public int fieldInt10619;
+    public int fieldInt10620;
+    public int fieldInt10621;
+    public int fieldInt10622;
+    public int fieldInt10623;
+    public int fieldInt10624;
+    public int fieldInt10625;
+    public int fieldInt10626;
+    public int fieldInt10627;
+    public int fieldInt10628;
+    public int fieldInt10629;
+    public int fieldInt10630;
+    public int fieldInt10631;
+    public int fieldInt10632;
+    public int fieldInt10633;
+    public int fieldInt10634;
+    public int fieldInt10635;
+    public int fieldInt10636;
+    public int fieldInt10637;
+    public int fieldInt10638;
+    public int fieldInt10639;
+    public int fieldInt10640;
+    public int fieldInt10641;
+    public int fieldInt10642;
+    public int fieldInt10643;
+    public int fieldInt10644;
+    public int fieldInt10645;
+    public int fieldInt10646;
+    public int fieldInt10647;
+    public int fieldInt10648;
+    public int fieldInt10649;
+    public int fieldInt10650;
+    public int fieldInt10651;
+    public int fieldInt10652;
+    public int fieldInt10653;
+    public int fieldInt10654;
+    public int fieldInt10655;
+    public int fieldInt10656;
+    public int fieldInt10657;
+    public int fieldInt10658;
+    public int fieldInt10659;
+    public int fieldInt10660;
+    public int fieldInt10661;
+    public int fieldInt10662;
+    public int fieldInt10663;
+    public int fieldInt10664;
+    public int fieldInt10665;
+    public int fieldInt10666;
+    public int fieldInt10667;
+    public int fieldInt10668;
+    public int fieldInt10669;
+    public int fieldInt10670;
+    public int fieldInt10671;
+    public int fieldInt10672;
+    public int fieldInt10673;
+    public int fieldInt10674;
+    public int fieldInt10675;
+    public int fieldInt10676;
+    public int fieldInt10677;
+    public int fieldInt10678;
+    public int fieldInt10679;
+    public int fieldInt10680;
+    public int fieldInt10681;
+    public int fieldInt10682;
+    public int fieldInt10683;
+    public int fieldInt10684;
+    public int fieldInt10685;
+    public int fieldInt10686;
+    public int fieldInt10687;
+    public int fieldInt10688;
+    public int fieldInt10689;
+    public int fieldInt10690;
+    public int fieldInt10691;
+    public int fieldInt10692;
+    public int fieldInt10693;
+    public int fieldInt10694;
+    public int fieldInt10695;
+    public int fieldInt10696;
+    public int fieldInt10697;
+    public int fieldInt10698;
+    public int fieldInt10699;
+    public int fieldInt10700;
+    public int fieldInt10701;
+    public int fieldInt10702;
+    public int fieldInt10703;
+    public int fieldInt10704;
+    public int fieldInt10705;
+    public int fieldInt10706;
+    public int fieldInt10707;
+    public int fieldInt10708;
+    public int fieldInt10709;
+    public int fieldInt10710;
+    public int fieldInt10711;
+    public int fieldInt10712;
+    public int fieldInt10713;
+    public int fieldInt10714;
+    public int fieldInt10715;
+    public int fieldInt10716;
+    public int fieldInt10717;
+    public int fieldInt10718;
+    public int fieldInt10719;
+    public int fieldInt10720;
+    public int fieldInt10721;
+    public int fieldInt10722;
+    public int fieldInt10723;
+    public int fieldInt10724;
+    public int fieldInt10725;
+    public int fieldInt10726;
+    public int fieldInt10727;
+    public int fieldInt10728;
+    public int fieldInt10729;
+    public int fieldInt10730;
+    public int fieldInt10731;
+    public int fieldInt10732;
+    public int fieldInt10733;
+    public int fieldInt10734;
+    public int fieldInt10735;
+    public int fieldInt10736;
+    public int fieldInt10737;
+    public int fieldInt10738;
+    public int fieldInt10739;
+    public int fieldInt10740;
+    public int fieldInt10741;
+    public int fieldInt10742;
+    public int fieldInt10743;
+    public int fieldInt10744;
+    public int fieldInt10745;
+    public int fieldInt10746;
+    public int fieldInt10747;
+    public int fieldInt10748;
+    public int fieldInt10749;
+    public int fieldInt10750;
+    public int fieldInt10751;
+    public int fieldInt10752;
+    public int fieldInt10753;
+    public int fieldInt10754;
+    public int fieldInt10755;
+    public int fieldInt10756;
+    public int fieldInt10757;
+    public int fieldInt10758;
+    public int fieldInt10759;
+    public int fieldInt10760;
+    public int fieldInt10761;
+    public int fieldInt10762;
+    public int fieldInt10763;
+    public int fieldInt10764;
+    public int fieldInt10765;
+    public int fieldInt10766;
+    public int fieldInt10767;
+    public int fieldInt10768;
+    public int fieldInt10769;
+    public int fieldInt10770;
+    public int fieldInt10771;
+    public int fieldInt10772;
+    public int fieldInt10773;
+    public int fieldInt10774;
+    public int fieldInt10775;
+    public int fieldInt10776;
+    public int fieldInt10777;
+    public int fieldInt10778;
+    public int fieldInt10779;
+    public int fieldInt10780;
+    public int fieldInt10781;
+    public int fieldInt10782;
+    public int fieldInt10783;
+    public int fieldInt10784;
+    public int fieldInt10785;
+    public int fieldInt10786;
+    public int fieldInt10787;
+    public int fieldInt10788;
+    public int fieldInt10789;
+    public int fieldInt10790;
+    public int fieldInt10791;
+    public int fieldInt10792;
+    public int fieldInt10793;
+    public int fieldInt10794;
+    public int fieldInt10795;
+    public int fieldInt10796;
+    public int fieldInt10797;
+    public int fieldInt10798;
+    public int fieldInt10799;
+    public int fieldInt10800;
+    public int fieldInt10801;
+    public int fieldInt10802;
+    public int fieldInt10803;
+    public int fieldInt10804;
+    public int fieldInt10805;
+    public int fieldInt10806;
+    public int fieldInt10807;
+    public int fieldInt10808;
+    public int fieldInt10809;
+    public int fieldInt10810;
+    public int fieldInt10811;
+    public int fieldInt10812;
+    public int fieldInt10813;
+    public int fieldInt10814;
+    public int fieldInt10815;
+    public int fieldInt10816;
+    public int fieldInt10817;
+    public int fieldInt10818;
+    public int fieldInt10819;
+    public int fieldInt10820;
+    public int fieldInt10821;
+    public int fieldInt10822;
+    public int fieldInt10823;
+    public int fieldInt10824;
+    public int fieldInt10825;
+    public int fieldInt10826;
+    public int fieldInt10827;
+    public int fieldInt10828;
+    public int fieldInt10829;
+    public int fieldInt10830;
+    public int fieldInt10831;
+    public int fieldInt10832;
+    public int fieldInt10833;
+    public int fieldInt10834;
+    public int fieldInt10835;
+    public int fieldInt10836;
+    public int fieldInt10837;
+    public int fieldInt10838;
+    public int fieldInt10839;
+    public int fieldInt10840;
+    public int fieldInt10841;
+    public int fieldInt10842;
+    public int fieldInt10843;
+    public int fieldInt10844;
+    public int fieldInt10845;
+    public int fieldInt10846;
+    public int fieldInt10847;
+    public int fieldInt10848;
+    public int fieldInt10849;
+    public int fieldInt10850;
+    public int fieldInt10851;
+    public int fieldInt10852;
+    public int fieldInt10853;
+    public int fieldInt10854;
+    public int fieldInt10855;
+    public int fieldInt10856;
+    public int fieldInt10857;
+    public int fieldInt10858;
+    public int fieldInt10859;
+    public int fieldInt10860;
+    public int fieldInt10861;
+    public int fieldInt10862;
+    public int fieldInt10863;
+    public int fieldInt10864;
+    public int fieldInt10865;
+    public int fieldInt10866;
+    public int fieldInt10867;
+    public int fieldInt10868;
+    public int fieldInt10869;
+    public int fieldInt10870;
+    public int fieldInt10871;
+    public int fieldInt10872;
+    public int fieldInt10873;
+    public int fieldInt10874;
+    public int fieldInt10875;
+    public int fieldInt10876;
+    public int fieldInt10877;
+    public int fieldInt10878;
+    public int fieldInt10879;
+    public int fieldInt10880;
+    public int fieldInt10881;
+    public int fieldInt10882;
+    public int fieldInt10883;
+    public int fieldInt10884;
+    public int fieldInt10885;
+    public int fieldInt10886;
+    public int fieldInt10887;
+    public int fieldInt10888;
+    public int fieldInt10889;
+    public int fieldInt10890;
+    public int fieldInt10891;
+    public int fieldInt10892;
+    public int fieldInt10893;
+    public int fieldInt10894;
+    public int fieldInt10895;
+    public int fieldInt10896;
+    public int fieldInt10897;
+    public int fieldInt10898;
+    public int fieldInt10899;
+    public int fieldInt10900;
+    public int fieldInt10901;
+    public int fieldInt10902;
+    public int fieldInt10903;
+    public int fieldInt10904;
+    public int fieldInt10905;
+    public int fieldInt10906;
+    public int fieldInt10907;
+    public int fieldInt10908;
+    public int fieldInt10909;
+    public int fieldInt10910;
+    public int fieldInt10911;
+    public int fieldInt10912;
+    public int fieldInt10913;
+    public int fieldInt10914;
+    public int fieldInt10915;
+    public int fieldInt10916;
+    public int fieldInt10917;
+    public int fieldInt10918;
+    public int fieldInt10919;
+    public int fieldInt10920;
+    public int fieldInt10921;
+    public int fieldInt10922;
+    public int fieldInt10923;
+    public int fieldInt10924;
+    public int fieldInt10925;
+    public int fieldInt10926;
+    public int fieldInt10927;
+    public int fieldInt10928;
+    public int fieldInt10929;
+    public int fieldInt10930;
+    public int fieldInt10931;
+    public int fieldInt10932;
+    public int fieldInt10933;
+    public int fieldInt10934;
+    public int fieldInt10935;
+    public int fieldInt10936;
+    public int fieldInt10937;
+    public int fieldInt10938;
+    public int fieldInt10939;
+    public int fieldInt10940;
+    public int fieldInt10941;
+    public int fieldInt10942;
+    public int fieldInt10943;
+    public int fieldInt10944;
+    public int fieldInt10945;
+    public int fieldInt10946;
+    public int fieldInt10947;
+    public int fieldInt10948;
+    public int fieldInt10949;
+    public int fieldInt10950;
+    public int fieldInt10951;
+    public int fieldInt10952;
+    public int fieldInt10953;
+    public int fieldInt10954;
+    public int fieldInt10955;
+    public int fieldInt10956;
+    public int fieldInt10957;
+    public int fieldInt10958;
+    public int fieldInt10959;
+    public int fieldInt10960;
+    public int fieldInt10961;
+    public int fieldInt10962;
+    public int fieldInt10963;
+    public int fieldInt10964;
+    public int fieldInt10965;
+    public int fieldInt10966;
+    public int fieldInt10967;
+    public int fieldInt10968;
+    public int fieldInt10969;
+    public int fieldInt10970;
+    public int fieldInt10971;
+    public int fieldInt10972;
+    public int fieldInt10973;
+    public int fieldInt10974;
+    public int fieldInt10975;
+    public int fieldInt10976;
+    public int fieldInt10977;
+    public int fieldInt10978;
+    public int fieldInt10979;
+    public int fieldInt10980;
+    public int fieldInt10981;
+    public int fieldInt10982;
+    public int fieldInt10983;
+    public int fieldInt10984;
+    public int fieldInt10985;
+    public int fieldInt10986;
+    public int fieldInt10987;
+    public int fieldInt10988;
+    public int fieldInt10989;
+    public int fieldInt10990;
+    public int fieldInt10991;
+    public int fieldInt10992;
+    public int fieldInt10993;
+    public int fieldInt10994;
+    public int fieldInt10995;
+    public int fieldInt10996;
+    public int fieldInt10997;
+    public int fieldInt10998;
+    public int fieldInt10999;
+    public int fieldInt11000;
+    public int fieldInt11001;
+    public int fieldInt11002;
+    public int fieldInt11003;
+    public int fieldInt11004;
+    public int fieldInt11005;
+    public int fieldInt11006;
+    public int fieldInt11007;
+    public int fieldInt11008;
+    public int fieldInt11009;
+    public int fieldInt11010;
+    public int fieldInt11011;
+    public int fieldInt11012;
+    public int fieldInt11013;
+    public int fieldInt11014;
+    public int fieldInt11015;
+    public int fieldInt11016;
+    public int fieldInt11017;
+    public int fieldInt11018;
+    public int fieldInt11019;
+    public int fieldInt11020;
+    public int fieldInt11021;
+    public int fieldInt11022;
+    public int fieldInt11023;
+    public int fieldInt11024;
+    public int fieldInt11025;
+    public int fieldInt11026;
+    public int fieldInt11027;
+    public int fieldInt11028;
+    public int fieldInt11029;
+    public int fieldInt11030;
+    public int fieldInt11031;
+    public int fieldInt11032;
+    public int fieldInt11033;
+    public int fieldInt11034;
+    public int fieldInt11035;
+    public int fieldInt11036;
+    public int fieldInt11037;
+    public int fieldInt11038;
+    public int fieldInt11039;
+    public int fieldInt11040;
+    public int fieldInt11041;
+    public int fieldInt11042;
+    public int fieldInt11043;
+    public int fieldInt11044;
+    public int fieldInt11045;
+    public int fieldInt11046;
+    public int fieldInt11047;
+    public int fieldInt11048;
+    public int fieldInt11049;
+    public int fieldInt11050;
+    public int fieldInt11051;
+    public int fieldInt11052;
+    public int fieldInt11053;
+    public int fieldInt11054;
+    public int fieldInt11055;
+    public int fieldInt11056;
+    public int fieldInt11057;
+    public int fieldInt11058;
+    public int fieldInt11059;
+    public int fieldInt11060;
+    public int fieldInt11061;
+    public int fieldInt11062;
+    public int fieldInt11063;
+    public int fieldInt11064;
+    public int fieldInt11065;
+    public int fieldInt11066;
+    public int fieldInt11067;
+    public int fieldInt11068;
+    public int fieldInt11069;
+    public int fieldInt11070;
+    public int fieldInt11071;
+    public int fieldInt11072;
+    public int fieldInt11073;
+    public int fieldInt11074;
+    public int fieldInt11075;
+    public int fieldInt11076;
+    public int fieldInt11077;
+    public int fieldInt11078;
+    public int fieldInt11079;
+    public int fieldInt11080;
+    public int fieldInt11081;
+    public int fieldInt11082;
+    public int fieldInt11083;
+    public int fieldInt11084;
+    public int fieldInt11085;
+    public int fieldInt11086;
+    public int fieldInt11087;
+    public int fieldInt11088;
+    public int fieldInt11089;
+    public int fieldInt11090;
+    public int fieldInt11091;
+    public int fieldInt11092;
+    public int fieldInt11093;
+    public int fieldInt11094;
+    public int fieldInt11095;
+    public int fieldInt11096;
+    public int fieldInt11097;
+    public int fieldInt11098;
+    public int fieldInt11099;
+    public int fieldInt11100;
+    public int fieldInt11101;
+    public int fieldInt11102;
+    public int fieldInt11103;
+    public int fieldInt11104;
+    public int fieldInt11105;
+    public int fieldInt11106;
+    public int fieldInt11107;
+    public int fieldInt11108;
+    public int fieldInt11109;
+    public int fieldInt11110;
+    public int fieldInt11111;
+    public int fieldInt11112;
+    public int fieldInt11113;
+    public int fieldInt11114;
+    public int fieldInt11115;
+    public int fieldInt11116;
+    public int fieldInt11117;
+    public int fieldInt11118;
+    public int fieldInt11119;
+    public int fieldInt11120;
+    public int fieldInt11121;
+    public int fieldInt11122;
+    public int fieldInt11123;
+    public int fieldInt11124;
+    public int fieldInt11125;
+    public int fieldInt11126;
+    public int fieldInt11127;
+    public int fieldInt11128;
+    public int fieldInt11129;
+    public int fieldInt11130;
+    public int fieldInt11131;
+    public int fieldInt11132;
+    public int fieldInt11133;
+    public int fieldInt11134;
+    public int fieldInt11135;
+    public int fieldInt11136;
+    public int fieldInt11137;
+    public int fieldInt11138;
+    public int fieldInt11139;
+    public int fieldInt11140;
+    public int fieldInt11141;
+    public int fieldInt11142;
+    public int fieldInt11143;
+    public int fieldInt11144;
+    public int fieldInt11145;
+    public int fieldInt11146;
+    public int fieldInt11147;
+    public int fieldInt11148;
+    public int fieldInt11149;
+    public int fieldInt11150;
+    public int fieldInt11151;
+    public int fieldInt11152;
+    public int fieldInt11153;
+    public int fieldInt11154;
+    public int fieldInt11155;
+    public int fieldInt11156;
+    public int fieldInt11157;
+    public int fieldInt11158;
+    public int fieldInt11159;
+    public int fieldInt11160;
+    public int fieldInt11161;
+    public int fieldInt11162;
+    public int fieldInt11163;
+    public int fieldInt11164;
+    public int fieldInt11165;
+    public int fieldInt11166;
+    public int fieldInt11167;
+    public int fieldInt11168;
+    public int fieldInt11169;
+    public int fieldInt11170;
+    public int fieldInt11171;
+    public int fieldInt11172;
+    public int fieldInt11173;
+    public int fieldInt11174;
+    public int fieldInt11175;
+    public int fieldInt11176;
+    public int fieldInt11177;
+    public int fieldInt11178;
+    public int fieldInt11179;
+    public int fieldInt11180;
+    public int fieldInt11181;
+    public int fieldInt11182;
+    public int fieldInt11183;
+    public int fieldInt11184;
+    public int fieldInt11185;
+    public int fieldInt11186;
+    public int fieldInt11187;
+    public int fieldInt11188;
+    public int fieldInt11189;
+    public int fieldInt11190;
+    public int fieldInt11191;
+    public int fieldInt11192;
+    public int fieldInt11193;
+    public int fieldInt11194;
+    public int fieldInt11195;
+    public int fieldInt11196;
+    public int fieldInt11197;
+    public int fieldInt11198;
+    public int fieldInt11199;
+    public int fieldInt11200;
+    public int fieldInt11201;
+    public int fieldInt11202;
+    public int fieldInt11203;
+    public int fieldInt11204;
+    public int fieldInt11205;
+    public int fieldInt11206;
+    public int fieldInt11207;
+    public int fieldInt11208;
+    public int fieldInt11209;
+    public int fieldInt11210;
+    public int fieldInt11211;
+    public int fieldInt11212;
+    public int fieldInt11213;
+    public int fieldInt11214;
+    public int fieldInt11215;
+    public int fieldInt11216;
+    public int fieldInt11217;
+    public int fieldInt11218;
+    public int fieldInt11219;
+    public int fieldInt11220;
+    public int fieldInt11221;
+    public int fieldInt11222;
+    public int fieldInt11223;
+    public int fieldInt11224;
+    public int fieldInt11225;
+    public int fieldInt11226;
+    public int fieldInt11227;
+    public int fieldInt11228;
+    public int fieldInt11229;
+    public int fieldInt11230;
+    public int fieldInt11231;
+    public int fieldInt11232;
+    public int fieldInt11233;
+    public int fieldInt11234;
+    public int fieldInt11235;
+    public int fieldInt11236;
+    public int fieldInt11237;
+    public int fieldInt11238;
+    public int fieldInt11239;
+    public int fieldInt11240;
+    public int fieldInt11241;
+    public int fieldInt11242;
+    public int fieldInt11243;
+    public int fieldInt11244;
+    public int fieldInt11245;
+    public int fieldInt11246;
+    public int fieldInt11247;
+    public int fieldInt11248;
+    public int fieldInt11249;
+    public int fieldInt11250;
+    public int fieldInt11251;
+    public int fieldInt11252;
+    public int fieldInt11253;
+    public int fieldInt11254;
+    public int fieldInt11255;
+    public int fieldInt11256;
+    public int fieldInt11257;
+    public int fieldInt11258;
+    public int fieldInt11259;
+    public int fieldInt11260;
+    public int fieldInt11261;
+    public int fieldInt11262;
+    public int fieldInt11263;
+    public int fieldInt11264;
+    public int fieldInt11265;
+    public int fieldInt11266;
+    public int fieldInt11267;
+    public int fieldInt11268;
+    public int fieldInt11269;
+    public int fieldInt11270;
+    public int fieldInt11271;
+    public int fieldInt11272;
+    public int fieldInt11273;
+    public int fieldInt11274;
+    public int fieldInt11275;
+    public int fieldInt11276;
+    public int fieldInt11277;
+    public int fieldInt11278;
+    public int fieldInt11279;
+    public int fieldInt11280;
+    public int fieldInt11281;
+    public int fieldInt11282;
+    public int fieldInt11283;
+    public int fieldInt11284;
+    public int fieldInt11285;
+    public int fieldInt11286;
+    public int fieldInt11287;
+    public int fieldInt11288;
+    public int fieldInt11289;
+    public int fieldInt11290;
+    public int fieldInt11291;
+    public int fieldInt11292;
+    public int fieldInt11293;
+    public int fieldInt11294;
+    public int fieldInt11295;
+    public int fieldInt11296;
+    public int fieldInt11297;
+    public int fieldInt11298;
+    public int fieldInt11299;
+    public int fieldInt11300;
+    public int fieldInt11301;
+    public int fieldInt11302;
+    public int fieldInt11303;
+    public int fieldInt11304;
+    public int fieldInt11305;
+    public int fieldInt11306;
+    public int fieldInt11307;
+    public int fieldInt11308;
+    public int fieldInt11309;
+    public int fieldInt11310;
+    public int fieldInt11311;
+    public int fieldInt11312;
+    public int fieldInt11313;
+    public int fieldInt11314;
+    public int fieldInt11315;
+    public int fieldInt11316;
+    public int fieldInt11317;
+    public int fieldInt11318;
+    public int fieldInt11319;
+    public int fieldInt11320;
+    public int fieldInt11321;
+    public int fieldInt11322;
+    public int fieldInt11323;
+    public int fieldInt11324;
+    public int fieldInt11325;
+    public int fieldInt11326;
+    public int fieldInt11327;
+    public int fieldInt11328;
+    public int fieldInt11329;
+    public int fieldInt11330;
+    public int fieldInt11331;
+    public int fieldInt11332;
+    public int fieldInt11333;
+    public int fieldInt11334;
+    public int fieldInt11335;
+    public int fieldInt11336;
+    public int fieldInt11337;
+    public int fieldInt11338;
+    public int fieldInt11339;
+    public int fieldInt11340;
+    public int fieldInt11341;
+    public int fieldInt11342;
+    public int fieldInt11343;
+    public int fieldInt11344;
+    public int fieldInt11345;
+    public int fieldInt11346;
+    public int fieldInt11347;
+    public int fieldInt11348;
+    public int fieldInt11349;
+    public int fieldInt11350;
+    public int fieldInt11351;
+    public int fieldInt11352;
+    public int fieldInt11353;
+    public int fieldInt11354;
+    public int fieldInt11355;
+    public int fieldInt11356;
+    public int fieldInt11357;
+    public int fieldInt11358;
+    public int fieldInt11359;
+    public int fieldInt11360;
+    public int fieldInt11361;
+    public int fieldInt11362;
+    public int fieldInt11363;
+    public int fieldInt11364;
+    public int fieldInt11365;
+    public int fieldInt11366;
+    public int fieldInt11367;
+    public int fieldInt11368;
+    public int fieldInt11369;
+    public int fieldInt11370;
+    public int fieldInt11371;
+    public int fieldInt11372;
+    public int fieldInt11373;
+    public int fieldInt11374;
+    public int fieldInt11375;
+    public int fieldInt11376;
+    public int fieldInt11377;
+    public int fieldInt11378;
+    public int fieldInt11379;
+    public int fieldInt11380;
+    public int fieldInt11381;
+    public int fieldInt11382;
+    public int fieldInt11383;
+    public int fieldInt11384;
+    public int fieldInt11385;
+    public int fieldInt11386;
+    public int fieldInt11387;
+    public int fieldInt11388;
+    public int fieldInt11389;
+    public int fieldInt11390;
+    public int fieldInt11391;
+    public int fieldInt11392;
+    public int fieldInt11393;
+    public int fieldInt11394;
+    public int fieldInt11395;
+    public int fieldInt11396;
+    public int fieldInt11397;
+    public int fieldInt11398;
+    public int fieldInt11399;
+    public int fieldInt11400;
+    public int fieldInt11401;
+    public int fieldInt11402;
+    public int fieldInt11403;
+    public int fieldInt11404;
+    public int fieldInt11405;
+    public int fieldInt11406;
+    public int fieldInt11407;
+    public int fieldInt11408;
+    public int fieldInt11409;
+    public int fieldInt11410;
+    public int fieldInt11411;
+    public int fieldInt11412;
+    public int fieldInt11413;
+    public int fieldInt11414;
+    public int fieldInt11415;
+    public int fieldInt11416;
+    public int fieldInt11417;
+    public int fieldInt11418;
+    public int fieldInt11419;
+    public int fieldInt11420;
+    public int fieldInt11421;
+    public int fieldInt11422;
+    public int fieldInt11423;
+    public int fieldInt11424;
+    public int fieldInt11425;
+    public int fieldInt11426;
+    public int fieldInt11427;
+    public int fieldInt11428;
+    public int fieldInt11429;
+    public int fieldInt11430;
+    public int fieldInt11431;
+    public int fieldInt11432;
+    public int fieldInt11433;
+    public int fieldInt11434;
+    public int fieldInt11435;
+    public int fieldInt11436;
+    public int fieldInt11437;
+    public int fieldInt11438;
+    public int fieldInt11439;
+    public int fieldInt11440;
+    public int fieldInt11441;
+    public int fieldInt11442;
+    public int fieldInt11443;
+    public int fieldInt11444;
+    public int fieldInt11445;
+    public int fieldInt11446;
+    public int fieldInt11447;
+    public int fieldInt11448;
+    public int fieldInt11449;
+    public int fieldInt11450;
+    public int fieldInt11451;
+    public int fieldInt11452;
+    public int fieldInt11453;
+    public int fieldInt11454;
+    public int fieldInt11455;
+    public int fieldInt11456;
+    public int fieldInt11457;
+    public int fieldInt11458;
+    public int fieldInt11459;
+    public int fieldInt11460;
+    public int fieldInt11461;
+    public int fieldInt11462;
+    public int fieldInt11463;
+    public int fieldInt11464;
+    public int fieldInt11465;
+    public int fieldInt11466;
+    public int fieldInt11467;
+    public int fieldInt11468;
+    public int fieldInt11469;
+    public int fieldInt11470;
+    public int fieldInt11471;
+    public int fieldInt11472;
+    public int fieldInt11473;
+    public int fieldInt11474;
+    public int fieldInt11475;
+    public int fieldInt11476;
+    public int fieldInt11477;
+    public int fieldInt11478;
+    public int fieldInt11479;
+    public int fieldInt11480;
+    public int fieldInt11481;
+    public int fieldInt11482;
+    public int fieldInt11483;
+    public int fieldInt11484;
+    public int fieldInt11485;
+    public int fieldInt11486;
+    public int fieldInt11487;
+    public int fieldInt11488;
+    public int fieldInt11489;
+    public int fieldInt11490;
+    public int fieldInt11491;
+    public int fieldInt11492;
+    public int fieldInt11493;
+    public int fieldInt11494;
+    public int fieldInt11495;
+    public int fieldInt11496;
+    public int fieldInt11497;
+    public int fieldInt11498;
+    public int fieldInt11499;
+    public int fieldInt11500;
+    public int fieldInt11501;
+    public int fieldInt11502;
+    public int fieldInt11503;
+    public int fieldInt11504;
+    public int fieldInt11505;
+    public int fieldInt11506;
+    public int fieldInt11507;
+    public int fieldInt11508;
+    public int fieldInt11509;
+    public int fieldInt11510;
+    public int fieldInt11511;
+    public int fieldInt11512;
+    public int fieldInt11513;
+    public int fieldInt11514;
+    public int fieldInt11515;
+    public int fieldInt11516;
+    public int fieldInt11517;
+    public int fieldInt11518;
+    public int fieldInt11519;
+    public int fieldInt11520;
+    public int fieldInt11521;
+    public int fieldInt11522;
+    public int fieldInt11523;
+    public int fieldInt11524;
+    public int fieldInt11525;
+    public int fieldInt11526;
+    public int fieldInt11527;
+    public int fieldInt11528;
+    public int fieldInt11529;
+    public int fieldInt11530;
+    public int fieldInt11531;
+    public int fieldInt11532;
+    public int fieldInt11533;
+    public int fieldInt11534;
+    public int fieldInt11535;
+    public int fieldInt11536;
+    public int fieldInt11537;
+    public int fieldInt11538;
+    public int fieldInt11539;
+    public int fieldInt11540;
+    public int fieldInt11541;
+    public int fieldInt11542;
+    public int fieldInt11543;
+    public int fieldInt11544;
+    public int fieldInt11545;
+    public int fieldInt11546;
+    public int fieldInt11547;
+    public int fieldInt11548;
+    public int fieldInt11549;
+    public int fieldInt11550;
+    public int fieldInt11551;
+    public int fieldInt11552;
+    public int fieldInt11553;
+    public int fieldInt11554;
+    public int fieldInt11555;
+    public int fieldInt11556;
+    public int fieldInt11557;
+    public int fieldInt11558;
+    public int fieldInt11559;
+    public int fieldInt11560;
+    public int fieldInt11561;
+    public int fieldInt11562;
+    public int fieldInt11563;
+    public int fieldInt11564;
+    public int fieldInt11565;
+    public int fieldInt11566;
+    public int fieldInt11567;
+    public int fieldInt11568;
+    public int fieldInt11569;
+    public int fieldInt11570;
+    public int fieldInt11571;
+    public int fieldInt11572;
+    public int fieldInt11573;
+    public int fieldInt11574;
+    public int fieldInt11575;
+    public int fieldInt11576;
+    public int fieldInt11577;
+    public int fieldInt11578;
+    public int fieldInt11579;
+    public int fieldInt11580;
+    public int fieldInt11581;
+    public int fieldInt11582;
+    public int fieldInt11583;
+    public int fieldInt11584;
+    public int fieldInt11585;
+    public int fieldInt11586;
+    public int fieldInt11587;
+    public int fieldInt11588;
+    public int fieldInt11589;
+    public int fieldInt11590;
+    public int fieldInt11591;
+    public int fieldInt11592;
+    public int fieldInt11593;
+    public int fieldInt11594;
+    public int fieldInt11595;
+    public int fieldInt11596;
+    public int fieldInt11597;
+    public int fieldInt11598;
+    public int fieldInt11599;
+    public int fieldInt11600;
+    public int fieldInt11601;
+    public int fieldInt11602;
+    public int fieldInt11603;
+    public int fieldInt11604;
+    public int fieldInt11605;
+    public int fieldInt11606;
+    public int fieldInt11607;
+    public int fieldInt11608;
+    public int fieldInt11609;
+    public int fieldInt11610;
+    public int fieldInt11611;
+    public int fieldInt11612;
+    public int fieldInt11613;
+    public int fieldInt11614;
+    public int fieldInt11615;
+    public int fieldInt11616;
+    public int fieldInt11617;
+    public int fieldInt11618;
+    public int fieldInt11619;
+    public int fieldInt11620;
+    public int fieldInt11621;
+    public int fieldInt11622;
+    public int fieldInt11623;
+    public int fieldInt11624;
+    public int fieldInt11625;
+    public int fieldInt11626;
+    public int fieldInt11627;
+    public int fieldInt11628;
+    public int fieldInt11629;
+    public int fieldInt11630;
+    public int fieldInt11631;
+    public int fieldInt11632;
+    public int fieldInt11633;
+    public int fieldInt11634;
+    public int fieldInt11635;
+    public int fieldInt11636;
+    public int fieldInt11637;
+    public int fieldInt11638;
+    public int fieldInt11639;
+    public int fieldInt11640;
+    public int fieldInt11641;
+    public int fieldInt11642;
+    public int fieldInt11643;
+    public int fieldInt11644;
+    public int fieldInt11645;
+    public int fieldInt11646;
+    public int fieldInt11647;
+    public int fieldInt11648;
+    public int fieldInt11649;
+    public int fieldInt11650;
+    public int fieldInt11651;
+    public int fieldInt11652;
+    public int fieldInt11653;
+    public int fieldInt11654;
+    public int fieldInt11655;
+    public int fieldInt11656;
+    public int fieldInt11657;
+    public int fieldInt11658;
+    public int fieldInt11659;
+    public int fieldInt11660;
+    public int fieldInt11661;
+    public int fieldInt11662;
+    public int fieldInt11663;
+    public int fieldInt11664;
+    public int fieldInt11665;
+    public int fieldInt11666;
+    public int fieldInt11667;
+    public int fieldInt11668;
+    public int fieldInt11669;
+    public int fieldInt11670;
+    public int fieldInt11671;
+    public int fieldInt11672;
+    public int fieldInt11673;
+    public int fieldInt11674;
+    public int fieldInt11675;
+    public int fieldInt11676;
+    public int fieldInt11677;
+    public int fieldInt11678;
+    public int fieldInt11679;
+    public int fieldInt11680;
+    public int fieldInt11681;
+    public int fieldInt11682;
+    public int fieldInt11683;
+    public int fieldInt11684;
+    public int fieldInt11685;
+    public int fieldInt11686;
+    public int fieldInt11687;
+    public int fieldInt11688;
+    public int fieldInt11689;
+    public int fieldInt11690;
+    public int fieldInt11691;
+    public int fieldInt11692;
+    public int fieldInt11693;
+    public int fieldInt11694;
+    public int fieldInt11695;
+    public int fieldInt11696;
+    public int fieldInt11697;
+    public int fieldInt11698;
+    public int fieldInt11699;
+    public int fieldInt11700;
+    public int fieldInt11701;
+    public int fieldInt11702;
+    public int fieldInt11703;
+    public int fieldInt11704;
+    public int fieldInt11705;
+    public int fieldInt11706;
+    public int fieldInt11707;
+    public int fieldInt11708;
+    public int fieldInt11709;
+    public int fieldInt11710;
+    public int fieldInt11711;
+    public int fieldInt11712;
+    public int fieldInt11713;
+    public int fieldInt11714;
+    public int fieldInt11715;
+    public int fieldInt11716;
+    public int fieldInt11717;
+    public int fieldInt11718;
+    public int fieldInt11719;
+    public int fieldInt11720;
+    public int fieldInt11721;
+    public int fieldInt11722;
+    public int fieldInt11723;
+    public int fieldInt11724;
+    public int fieldInt11725;
+    public int fieldInt11726;
+    public int fieldInt11727;
+    public int fieldInt11728;
+    public int fieldInt11729;
+    public int fieldInt11730;
+    public int fieldInt11731;
+    public int fieldInt11732;
+    public int fieldInt11733;
+    public int fieldInt11734;
+    public int fieldInt11735;
+    public int fieldInt11736;
+    public int fieldInt11737;
+    public int fieldInt11738;
+    public int fieldInt11739;
+    public int fieldInt11740;
+    public int fieldInt11741;
+    public int fieldInt11742;
+    public int fieldInt11743;
+    public int fieldInt11744;
+    public int fieldInt11745;
+    public int fieldInt11746;
+    public int fieldInt11747;
+    public int fieldInt11748;
+    public int fieldInt11749;
+    public int fieldInt11750;
+    public int fieldInt11751;
+    public int fieldInt11752;
+    public int fieldInt11753;
+    public int fieldInt11754;
+    public int fieldInt11755;
+    public int fieldInt11756;
+    public int fieldInt11757;
+    public int fieldInt11758;
+    public int fieldInt11759;
+    public int fieldInt11760;
+    public int fieldInt11761;
+    public int fieldInt11762;
+    public int fieldInt11763;
+    public int fieldInt11764;
+    public int fieldInt11765;
+    public int fieldInt11766;
+    public int fieldInt11767;
+    public int fieldInt11768;
+    public int fieldInt11769;
+    public int fieldInt11770;
+    public int fieldInt11771;
+    public int fieldInt11772;
+    public int fieldInt11773;
+    public int fieldInt11774;
+    public int fieldInt11775;
+    public int fieldInt11776;
+    public int fieldInt11777;
+    public int fieldInt11778;
+    public int fieldInt11779;
+    public int fieldInt11780;
+    public int fieldInt11781;
+    public int fieldInt11782;
+    public int fieldInt11783;
+    public int fieldInt11784;
+    public int fieldInt11785;
+    public int fieldInt11786;
+    public int fieldInt11787;
+    public int fieldInt11788;
+    public int fieldInt11789;
+    public int fieldInt11790;
+    public int fieldInt11791;
+    public int fieldInt11792;
+    public int fieldInt11793;
+    public int fieldInt11794;
+    public int fieldInt11795;
+    public int fieldInt11796;
+    public int fieldInt11797;
+    public int fieldInt11798;
+    public int fieldInt11799;
+    public int fieldInt11800;
+    public int fieldInt11801;
+    public int fieldInt11802;
+    public int fieldInt11803;
+    public int fieldInt11804;
+    public int fieldInt11805;
+    public int fieldInt11806;
+    public int fieldInt11807;
+    public int fieldInt11808;
+    public int fieldInt11809;
+    public int fieldInt11810;
+    public int fieldInt11811;
+    public int fieldInt11812;
+    public int fieldInt11813;
+    public int fieldInt11814;
+    public int fieldInt11815;
+    public int fieldInt11816;
+    public int fieldInt11817;
+    public int fieldInt11818;
+    public int fieldInt11819;
+    public int fieldInt11820;
+    public int fieldInt11821;
+    public int fieldInt11822;
+    public int fieldInt11823;
+    public int fieldInt11824;
+    public int fieldInt11825;
+    public int fieldInt11826;
+    public int fieldInt11827;
+    public int fieldInt11828;
+    public int fieldInt11829;
+    public int fieldInt11830;
+    public int fieldInt11831;
+    public int fieldInt11832;
+    public int fieldInt11833;
+    public int fieldInt11834;
+    public int fieldInt11835;
+    public int fieldInt11836;
+    public int fieldInt11837;
+    public int fieldInt11838;
+    public int fieldInt11839;
+    public int fieldInt11840;
+    public int fieldInt11841;
+    public int fieldInt11842;
+    public int fieldInt11843;
+    public int fieldInt11844;
+    public int fieldInt11845;
+    public int fieldInt11846;
+    public int fieldInt11847;
+    public int fieldInt11848;
+    public int fieldInt11849;
+    public int fieldInt11850;
+    public int fieldInt11851;
+    public int fieldInt11852;
+    public int fieldInt11853;
+    public int fieldInt11854;
+    public int fieldInt11855;
+    public int fieldInt11856;
+    public int fieldInt11857;
+    public int fieldInt11858;
+    public int fieldInt11859;
+    public int fieldInt11860;
+    public int fieldInt11861;
+    public int fieldInt11862;
+    public int fieldInt11863;
+    public int fieldInt11864;
+    public int fieldInt11865;
+    public int fieldInt11866;
+    public int fieldInt11867;
+    public int fieldInt11868;
+    public int fieldInt11869;
+    public int fieldInt11870;
+    public int fieldInt11871;
+    public int fieldInt11872;
+    public int fieldInt11873;
+    public int fieldInt11874;
+    public int fieldInt11875;
+    public int fieldInt11876;
+    public int fieldInt11877;
+    public int fieldInt11878;
+    public int fieldInt11879;
+    public int fieldInt11880;
+    public int fieldInt11881;
+    public int fieldInt11882;
+    public int fieldInt11883;
+    public int fieldInt11884;
+    public int fieldInt11885;
+    public int fieldInt11886;
+    public int fieldInt11887;
+    public int fieldInt11888;
+    public int fieldInt11889;
+    public int fieldInt11890;
+    public int fieldInt11891;
+    public int fieldInt11892;
+    public int fieldInt11893;
+    public int fieldInt11894;
+    public int fieldInt11895;
+    public int fieldInt11896;
+    public int fieldInt11897;
+    public int fieldInt11898;
+    public int fieldInt11899;
+    public int fieldInt11900;
+    public int fieldInt11901;
+    public int fieldInt11902;
+    public int fieldInt11903;
+    public int fieldInt11904;
+    public int fieldInt11905;
+    public int fieldInt11906;
+    public int fieldInt11907;
+    public int fieldInt11908;
+    public int fieldInt11909;
+    public int fieldInt11910;
+    public int fieldInt11911;
+    public int fieldInt11912;
+    public int fieldInt11913;
+    public int fieldInt11914;
+    public int fieldInt11915;
+    public int fieldInt11916;
+    public int fieldInt11917;
+    public int fieldInt11918;
+    public int fieldInt11919;
+    public int fieldInt11920;
+    public int fieldInt11921;
+    public int fieldInt11922;
+    public int fieldInt11923;
+    public int fieldInt11924;
+    public int fieldInt11925;
+    public int fieldInt11926;
+    public int fieldInt11927;
+    public int fieldInt11928;
+    public int fieldInt11929;
+    public int fieldInt11930;
+    public int fieldInt11931;
+    public int fieldInt11932;
+    public int fieldInt11933;
+    public int fieldInt11934;
+    public int fieldInt11935;
+    public int fieldInt11936;
+    public int fieldInt11937;
+    public int fieldInt11938;
+    public int fieldInt11939;
+    public int fieldInt11940;
+    public int fieldInt11941;
+    public int fieldInt11942;
+    public int fieldInt11943;
+    public int fieldInt11944;
+    public int fieldInt11945;
+    public int fieldInt11946;
+    public int fieldInt11947;
+    public int fieldInt11948;
+    public int fieldInt11949;
+    public int fieldInt11950;
+    public int fieldInt11951;
+    public int fieldInt11952;
+    public int fieldInt11953;
+    public int fieldInt11954;
+    public int fieldInt11955;
+    public int fieldInt11956;
+    public int fieldInt11957;
+    public int fieldInt11958;
+    public int fieldInt11959;
+    public int fieldInt11960;
+    public int fieldInt11961;
+    public int fieldInt11962;
+    public int fieldInt11963;
+    public int fieldInt11964;
+    public int fieldInt11965;
+    public int fieldInt11966;
+    public int fieldInt11967;
+    public int fieldInt11968;
+    public int fieldInt11969;
+    public int fieldInt11970;
+    public int fieldInt11971;
+    public int fieldInt11972;
+    public int fieldInt11973;
+    public int fieldInt11974;
+    public int fieldInt11975;
+    public int fieldInt11976;
+    public int fieldInt11977;
+    public int fieldInt11978;
+    public int fieldInt11979;
+    public int fieldInt11980;
+    public int fieldInt11981;
+    public int fieldInt11982;
+    public int fieldInt11983;
+    public int fieldInt11984;
+    public int fieldInt11985;
+    public int fieldInt11986;
+    public int fieldInt11987;
+    public int fieldInt11988;
+    public int fieldInt11989;
+    public int fieldInt11990;
+    public int fieldInt11991;
+    public int fieldInt11992;
+    public int fieldInt11993;
+    public int fieldInt11994;
+    public int fieldInt11995;
+    public int fieldInt11996;
+    public int fieldInt11997;
+    public int fieldInt11998;
+    public int fieldInt11999;
+    public int fieldInt12000;
+    public int fieldInt12001;
+    public int fieldInt12002;
+    public int fieldInt12003;
+    public int fieldInt12004;
+    public int fieldInt12005;
+    public int fieldInt12006;
+    public int fieldInt12007;
+    public int fieldInt12008;
+    public int fieldInt12009;
+    public int fieldInt12010;
+    public int fieldInt12011;
+    public int fieldInt12012;
+    public int fieldInt12013;
+    public int fieldInt12014;
+    public int fieldInt12015;
+    public int fieldInt12016;
+    public int fieldInt12017;
+    public int fieldInt12018;
+    public int fieldInt12019;
+    public int fieldInt12020;
+    public int fieldInt12021;
+    public int fieldInt12022;
+    public int fieldInt12023;
+    public int fieldInt12024;
+    public int fieldInt12025;
+    public int fieldInt12026;
+    public int fieldInt12027;
+    public int fieldInt12028;
+    public int fieldInt12029;
+    public int fieldInt12030;
+    public int fieldInt12031;
+    public int fieldInt12032;
+    public int fieldInt12033;
+    public int fieldInt12034;
+    public int fieldInt12035;
+    public int fieldInt12036;
+    public int fieldInt12037;
+    public int fieldInt12038;
+    public int fieldInt12039;
+    public int fieldInt12040;
+    public int fieldInt12041;
+    public int fieldInt12042;
+    public int fieldInt12043;
+    public int fieldInt12044;
+    public int fieldInt12045;
+    public int fieldInt12046;
+    public int fieldInt12047;
+    public int fieldInt12048;
+    public int fieldInt12049;
+    public int fieldInt12050;
+    public int fieldInt12051;
+    public int fieldInt12052;
+    public int fieldInt12053;
+    public int fieldInt12054;
+    public int fieldInt12055;
+    public int fieldInt12056;
+    public int fieldInt12057;
+    public int fieldInt12058;
+    public int fieldInt12059;
+    public int fieldInt12060;
+    public int fieldInt12061;
+    public int fieldInt12062;
+    public int fieldInt12063;
+    public int fieldInt12064;
+    public int fieldInt12065;
+    public int fieldInt12066;
+    public int fieldInt12067;
+    public int fieldInt12068;
+    public int fieldInt12069;
+    public int fieldInt12070;
+    public int fieldInt12071;
+    public int fieldInt12072;
+    public int fieldInt12073;
+    public int fieldInt12074;
+    public int fieldInt12075;
+    public int fieldInt12076;
+    public int fieldInt12077;
+    public int fieldInt12078;
+    public int fieldInt12079;
+    public int fieldInt12080;
+    public int fieldInt12081;
+    public int fieldInt12082;
+    public int fieldInt12083;
+    public int fieldInt12084;
+    public int fieldInt12085;
+    public int fieldInt12086;
+    public int fieldInt12087;
+    public int fieldInt12088;
+    public int fieldInt12089;
+    public int fieldInt12090;
+    public int fieldInt12091;
+    public int fieldInt12092;
+    public int fieldInt12093;
+    public int fieldInt12094;
+    public int fieldInt12095;
+    public int fieldInt12096;
+    public int fieldInt12097;
+    public int fieldInt12098;
+    public int fieldInt12099;
+    public int fieldInt12100;
+    public int fieldInt12101;
+    public int fieldInt12102;
+    public int fieldInt12103;
+    public int fieldInt12104;
+    public int fieldInt12105;
+    public int fieldInt12106;
+    public int fieldInt12107;
+    public int fieldInt12108;
+    public int fieldInt12109;
+    public int fieldInt12110;
+    public int fieldInt12111;
+    public int fieldInt12112;
+    public int fieldInt12113;
+    public int fieldInt12114;
+    public int fieldInt12115;
+    public int fieldInt12116;
+    public int fieldInt12117;
+    public int fieldInt12118;
+    public int fieldInt12119;
+    public int fieldInt12120;
+    public int fieldInt12121;
+    public int fieldInt12122;
+    public int fieldInt12123;
+    public int fieldInt12124;
+    public int fieldInt12125;
+    public int fieldInt12126;
+    public int fieldInt12127;
+    public int fieldInt12128;
+    public int fieldInt12129;
+    public int fieldInt12130;
+    public int fieldInt12131;
+    public int fieldInt12132;
+    public int fieldInt12133;
+    public int fieldInt12134;
+    public int fieldInt12135;
+    public int fieldInt12136;
+    public int fieldInt12137;
+    public int fieldInt12138;
+    public int fieldInt12139;
+    public int fieldInt12140;
+    public int fieldInt12141;
+    public int fieldInt12142;
+    public int fieldInt12143;
+    public int fieldInt12144;
+    public int fieldInt12145;
+    public int fieldInt12146;
+    public int fieldInt12147;
+    public int fieldInt12148;
+    public int fieldInt12149;
+    public int fieldInt12150;
+    public int fieldInt12151;
+    public int fieldInt12152;
+    public int fieldInt12153;
+    public int fieldInt12154;
+    public int fieldInt12155;
+    public int fieldInt12156;
+    public int fieldInt12157;
+    public int fieldInt12158;
+    public int fieldInt12159;
+    public int fieldInt12160;
+    public int fieldInt12161;
+    public int fieldInt12162;
+    public int fieldInt12163;
+    public int fieldInt12164;
+    public int fieldInt12165;
+    public int fieldInt12166;
+    public int fieldInt12167;
+    public int fieldInt12168;
+    public int fieldInt12169;
+    public int fieldInt12170;
+    public int fieldInt12171;
+    public int fieldInt12172;
+    public int fieldInt12173;
+    public int fieldInt12174;
+    public int fieldInt12175;
+    public int fieldInt12176;
+    public int fieldInt12177;
+    public int fieldInt12178;
+    public int fieldInt12179;
+    public int fieldInt12180;
+    public int fieldInt12181;
+    public int fieldInt12182;
+    public int fieldInt12183;
+    public int fieldInt12184;
+    public int fieldInt12185;
+    public int fieldInt12186;
+    public int fieldInt12187;
+    public int fieldInt12188;
+    public int fieldInt12189;
+    public int fieldInt12190;
+    public int fieldInt12191;
+    public int fieldInt12192;
+    public int fieldInt12193;
+    public int fieldInt12194;
+    public int fieldInt12195;
+    public int fieldInt12196;
+    public int fieldInt12197;
+    public int fieldInt12198;
+    public int fieldInt12199;
+    public int fieldInt12200;
+    public int fieldInt12201;
+    public int fieldInt12202;
+    public int fieldInt12203;
+    public int fieldInt12204;
+    public int fieldInt12205;
+    public int fieldInt12206;
+    public int fieldInt12207;
+    public int fieldInt12208;
+    public int fieldInt12209;
+    public int fieldInt12210;
+    public int fieldInt12211;
+    public int fieldInt12212;
+    public int fieldInt12213;
+    public int fieldInt12214;
+    public int fieldInt12215;
+    public int fieldInt12216;
+    public int fieldInt12217;
+    public int fieldInt12218;
+    public int fieldInt12219;
+    public int fieldInt12220;
+    public int fieldInt12221;
+    public int fieldInt12222;
+    public int fieldInt12223;
+    public int fieldInt12224;
+    public int fieldInt12225;
+    public int fieldInt12226;
+    public int fieldInt12227;
+    public int fieldInt12228;
+    public int fieldInt12229;
+    public int fieldInt12230;
+    public int fieldInt12231;
+    public int fieldInt12232;
+    public int fieldInt12233;
+    public int fieldInt12234;
+    public int fieldInt12235;
+    public int fieldInt12236;
+    public int fieldInt12237;
+    public int fieldInt12238;
+    public int fieldInt12239;
+    public int fieldInt12240;
+    public int fieldInt12241;
+    public int fieldInt12242;
+    public int fieldInt12243;
+    public int fieldInt12244;
+    public int fieldInt12245;
+    public int fieldInt12246;
+    public int fieldInt12247;
+    public int fieldInt12248;
+    public int fieldInt12249;
+    public int fieldInt12250;
+    public int fieldInt12251;
+    public int fieldInt12252;
+    public int fieldInt12253;
+    public int fieldInt12254;
+    public int fieldInt12255;
+    public int fieldInt12256;
+    public int fieldInt12257;
+    public int fieldInt12258;
+    public int fieldInt12259;
+    public int fieldInt12260;
+    public int fieldInt12261;
+    public int fieldInt12262;
+    public int fieldInt12263;
+    public int fieldInt12264;
+    public int fieldInt12265;
+    public int fieldInt12266;
+    public int fieldInt12267;
+    public int fieldInt12268;
+    public int fieldInt12269;
+    public int fieldInt12270;
+    public int fieldInt12271;
+    public int fieldInt12272;
+    public int fieldInt12273;
+    public int fieldInt12274;
+    public int fieldInt12275;
+    public int fieldInt12276;
+    public int fieldInt12277;
+    public int fieldInt12278;
+    public int fieldInt12279;
+    public int fieldInt12280;
+    public int fieldInt12281;
+    public int fieldInt12282;
+    public int fieldInt12283;
+    public int fieldInt12284;
+    public int fieldInt12285;
+    public int fieldInt12286;
+    public int fieldInt12287;
+    public int fieldInt12288;
+    public int fieldInt12289;
+    public int fieldInt12290;
+    public int fieldInt12291;
+    public int fieldInt12292;
+    public int fieldInt12293;
+    public int fieldInt12294;
+    public int fieldInt12295;
+    public int fieldInt12296;
+    public int fieldInt12297;
+    public int fieldInt12298;
+    public int fieldInt12299;
+    public int fieldInt12300;
+    public int fieldInt12301;
+    public int fieldInt12302;
+    public int fieldInt12303;
+    public int fieldInt12304;
+    public int fieldInt12305;
+    public int fieldInt12306;
+    public int fieldInt12307;
+    public int fieldInt12308;
+    public int fieldInt12309;
+    public int fieldInt12310;
+    public int fieldInt12311;
+    public int fieldInt12312;
+    public int fieldInt12313;
+    public int fieldInt12314;
+    public int fieldInt12315;
+    public int fieldInt12316;
+    public int fieldInt12317;
+    public int fieldInt12318;
+    public int fieldInt12319;
+    public int fieldInt12320;
+    public int fieldInt12321;
+    public int fieldInt12322;
+    public int fieldInt12323;
+    public int fieldInt12324;
+    public int fieldInt12325;
+    public int fieldInt12326;
+    public int fieldInt12327;
+    public int fieldInt12328;
+    public int fieldInt12329;
+    public int fieldInt12330;
+    public int fieldInt12331;
+    public int fieldInt12332;
+    public int fieldInt12333;
+    public int fieldInt12334;
+    public int fieldInt12335;
+    public int fieldInt12336;
+    public int fieldInt12337;
+    public int fieldInt12338;
+    public int fieldInt12339;
+    public int fieldInt12340;
+    public int fieldInt12341;
+    public int fieldInt12342;
+    public int fieldInt12343;
+    public int fieldInt12344;
+    public int fieldInt12345;
+    public int fieldInt12346;
+    public int fieldInt12347;
+    public int fieldInt12348;
+    public int fieldInt12349;
+    public int fieldInt12350;
+    public int fieldInt12351;
+    public int fieldInt12352;
+    public int fieldInt12353;
+    public int fieldInt12354;
+    public int fieldInt12355;
+    public int fieldInt12356;
+    public int fieldInt12357;
+    public int fieldInt12358;
+    public int fieldInt12359;
+    public int fieldInt12360;
+    public int fieldInt12361;
+    public int fieldInt12362;
+    public int fieldInt12363;
+    public int fieldInt12364;
+    public int fieldInt12365;
+    public int fieldInt12366;
+    public int fieldInt12367;
+    public int fieldInt12368;
+    public int fieldInt12369;
+    public int fieldInt12370;
+    public int fieldInt12371;
+    public int fieldInt12372;
+    public int fieldInt12373;
+    public int fieldInt12374;
+    public int fieldInt12375;
+    public int fieldInt12376;
+    public int fieldInt12377;
+    public int fieldInt12378;
+    public int fieldInt12379;
+    public int fieldInt12380;
+    public int fieldInt12381;
+    public int fieldInt12382;
+    public int fieldInt12383;
+    public int fieldInt12384;
+    public int fieldInt12385;
+    public int fieldInt12386;
+    public int fieldInt12387;
+    public int fieldInt12388;
+    public int fieldInt12389;
+    public int fieldInt12390;
+    public int fieldInt12391;
+    public int fieldInt12392;
+    public int fieldInt12393;
+    public int fieldInt12394;
+    public int fieldInt12395;
+    public int fieldInt12396;
+    public int fieldInt12397;
+    public int fieldInt12398;
+    public int fieldInt12399;
+    public int fieldInt12400;
+    public int fieldInt12401;
+    public int fieldInt12402;
+    public int fieldInt12403;
+    public int fieldInt12404;
+    public int fieldInt12405;
+    public int fieldInt12406;
+    public int fieldInt12407;
+    public int fieldInt12408;
+    public int fieldInt12409;
+    public int fieldInt12410;
+    public int fieldInt12411;
+    public int fieldInt12412;
+    public int fieldInt12413;
+    public int fieldInt12414;
+    public int fieldInt12415;
+    public int fieldInt12416;
+    public int fieldInt12417;
+    public int fieldInt12418;
+    public int fieldInt12419;
+    public int fieldInt12420;
+    public int fieldInt12421;
+    public int fieldInt12422;
+    public int fieldInt12423;
+    public int fieldInt12424;
+    public int fieldInt12425;
+    public int fieldInt12426;
+    public int fieldInt12427;
+    public int fieldInt12428;
+    public int fieldInt12429;
+    public int fieldInt12430;
+    public int fieldInt12431;
+    public int fieldInt12432;
+    public int fieldInt12433;
+    public int fieldInt12434;
+    public int fieldInt12435;
+    public int fieldInt12436;
+    public int fieldInt12437;
+    public int fieldInt12438;
+    public int fieldInt12439;
+    public int fieldInt12440;
+    public int fieldInt12441;
+    public int fieldInt12442;
+    public int fieldInt12443;
+    public int fieldInt12444;
+    public int fieldInt12445;
+    public int fieldInt12446;
+    public int fieldInt12447;
+    public int fieldInt12448;
+    public int fieldInt12449;
+    public int fieldInt12450;
+    public int fieldInt12451;
+    public int fieldInt12452;
+    public int fieldInt12453;
+    public int fieldInt12454;
+    public int fieldInt12455;
+    public int fieldInt12456;
+    public int fieldInt12457;
+    public int fieldInt12458;
+    public int fieldInt12459;
+    public int fieldInt12460;
+    public int fieldInt12461;
+    public int fieldInt12462;
+    public int fieldInt12463;
+    public int fieldInt12464;
+    public int fieldInt12465;
+    public int fieldInt12466;
+    public int fieldInt12467;
+    public int fieldInt12468;
+    public int fieldInt12469;
+    public int fieldInt12470;
+    public int fieldInt12471;
+    public int fieldInt12472;
+    public int fieldInt12473;
+    public int fieldInt12474;
+    public int fieldInt12475;
+    public int fieldInt12476;
+    public int fieldInt12477;
+    public int fieldInt12478;
+    public int fieldInt12479;
+    public int fieldInt12480;
+    public int fieldInt12481;
+    public int fieldInt12482;
+    public int fieldInt12483;
+    public int fieldInt12484;
+    public int fieldInt12485;
+    public int fieldInt12486;
+    public int fieldInt12487;
+    public int fieldInt12488;
+    public int fieldInt12489;
+    public int fieldInt12490;
+    public int fieldInt12491;
+    public int fieldInt12492;
+    public int fieldInt12493;
+    public int fieldInt12494;
+    public int fieldInt12495;
+    public int fieldInt12496;
+    public int fieldInt12497;
+    public int fieldInt12498;
+    public int fieldInt12499;
+    public int fieldInt12500;
+    public int fieldInt12501;
+    public int fieldInt12502;
+    public int fieldInt12503;
+    public int fieldInt12504;
+    public int fieldInt12505;
+    public int fieldInt12506;
+    public int fieldInt12507;
+    public int fieldInt12508;
+    public int fieldInt12509;
+    public int fieldInt12510;
+    public int fieldInt12511;
+    public int fieldInt12512;
+    public int fieldInt12513;
+    public int fieldInt12514;
+    public int fieldInt12515;
+    public int fieldInt12516;
+    public int fieldInt12517;
+    public int fieldInt12518;
+    public int fieldInt12519;
+    public int fieldInt12520;
+    public int fieldInt12521;
+    public int fieldInt12522;
+    public int fieldInt12523;
+    public int fieldInt12524;
+    public int fieldInt12525;
+    public int fieldInt12526;
+    public int fieldInt12527;
+    public int fieldInt12528;
+    public int fieldInt12529;
+    public int fieldInt12530;
+    public int fieldInt12531;
+    public int fieldInt12532;
+    public int fieldInt12533;
+    public int fieldInt12534;
+    public int fieldInt12535;
+    public int fieldInt12536;
+    public int fieldInt12537;
+    public int fieldInt12538;
+    public int fieldInt12539;
+    public int fieldInt12540;
+    public int fieldInt12541;
+    public int fieldInt12542;
+    public int fieldInt12543;
+    public int fieldInt12544;
+    public int fieldInt12545;
+    public int fieldInt12546;
+    public int fieldInt12547;
+    public int fieldInt12548;
+    public int fieldInt12549;
+    public int fieldInt12550;
+    public int fieldInt12551;
+    public int fieldInt12552;
+    public int fieldInt12553;
+    public int fieldInt12554;
+    public int fieldInt12555;
+    public int fieldInt12556;
+    public int fieldInt12557;
+    public int fieldInt12558;
+    public int fieldInt12559;
+    public int fieldInt12560;
+    public int fieldInt12561;
+    public int fieldInt12562;
+    public int fieldInt12563;
+    public int fieldInt12564;
+    public int fieldInt12565;
+    public int fieldInt12566;
+    public int fieldInt12567;
+    public int fieldInt12568;
+    public int fieldInt12569;
+    public int fieldInt12570;
+    public int fieldInt12571;
+    public int fieldInt12572;
+    public int fieldInt12573;
+    public int fieldInt12574;
+    public int fieldInt12575;
+    public int fieldInt12576;
+    public int fieldInt12577;
+    public int fieldInt12578;
+    public int fieldInt12579;
+    public int fieldInt12580;
+    public int fieldInt12581;
+    public int fieldInt12582;
+    public int fieldInt12583;
+    public int fieldInt12584;
+    public int fieldInt12585;
+    public int fieldInt12586;
+    public int fieldInt12587;
+    public int fieldInt12588;
+    public int fieldInt12589;
+    public int fieldInt12590;
+    public int fieldInt12591;
+    public int fieldInt12592;
+    public int fieldInt12593;
+    public int fieldInt12594;
+    public int fieldInt12595;
+    public int fieldInt12596;
+    public int fieldInt12597;
+    public int fieldInt12598;
+    public int fieldInt12599;
+    public int fieldInt12600;
+    public int fieldInt12601;
+    public int fieldInt12602;
+    public int fieldInt12603;
+    public int fieldInt12604;
+    public int fieldInt12605;
+    public int fieldInt12606;
+    public int fieldInt12607;
+    public int fieldInt12608;
+    public int fieldInt12609;
+    public int fieldInt12610;
+    public int fieldInt12611;
+    public int fieldInt12612;
+    public int fieldInt12613;
+    public int fieldInt12614;
+    public int fieldInt12615;
+    public int fieldInt12616;
+    public int fieldInt12617;
+    public int fieldInt12618;
+    public int fieldInt12619;
+    public int fieldInt12620;
+    public int fieldInt12621;
+    public int fieldInt12622;
+    public int fieldInt12623;
+    public int fieldInt12624;
+    public int fieldInt12625;
+    public int fieldInt12626;
+    public int fieldInt12627;
+    public int fieldInt12628;
+    public int fieldInt12629;
+    public int fieldInt12630;
+    public int fieldInt12631;
+    public int fieldInt12632;
+    public int fieldInt12633;
+    public int fieldInt12634;
+    public int fieldInt12635;
+    public int fieldInt12636;
+    public int fieldInt12637;
+    public int fieldInt12638;
+    public int fieldInt12639;
+    public int fieldInt12640;
+    public int fieldInt12641;
+    public int fieldInt12642;
+    public int fieldInt12643;
+    public int fieldInt12644;
+    public int fieldInt12645;
+    public int fieldInt12646;
+    public int fieldInt12647;
+    public int fieldInt12648;
+    public int fieldInt12649;
+    public int fieldInt12650;
+    public int fieldInt12651;
+    public int fieldInt12652;
+    public int fieldInt12653;
+    public int fieldInt12654;
+    public int fieldInt12655;
+    public int fieldInt12656;
+    public int fieldInt12657;
+    public int fieldInt12658;
+    public int fieldInt12659;
+    public int fieldInt12660;
+    public int fieldInt12661;
+    public int fieldInt12662;
+    public int fieldInt12663;
+    public int fieldInt12664;
+    public int fieldInt12665;
+    public int fieldInt12666;
+    public int fieldInt12667;
+    public int fieldInt12668;
+    public int fieldInt12669;
+    public int fieldInt12670;
+    public int fieldInt12671;
+    public int fieldInt12672;
+    public int fieldInt12673;
+    public int fieldInt12674;
+    public int fieldInt12675;
+    public int fieldInt12676;
+    public int fieldInt12677;
+    public int fieldInt12678;
+    public int fieldInt12679;
+    public int fieldInt12680;
+    public int fieldInt12681;
+    public int fieldInt12682;
+    public int fieldInt12683;
+    public int fieldInt12684;
+    public int fieldInt12685;
+    public int fieldInt12686;
+    public int fieldInt12687;
+    public int fieldInt12688;
+    public int fieldInt12689;
+    public int fieldInt12690;
+    public int fieldInt12691;
+    public int fieldInt12692;
+    public int fieldInt12693;
+    public int fieldInt12694;
+    public int fieldInt12695;
+    public int fieldInt12696;
+    public int fieldInt12697;
+    public int fieldInt12698;
+    public int fieldInt12699;
+    public int fieldInt12700;
+    public int fieldInt12701;
+    public int fieldInt12702;
+    public int fieldInt12703;
+    public int fieldInt12704;
+    public int fieldInt12705;
+    public int fieldInt12706;
+    public int fieldInt12707;
+    public int fieldInt12708;
+    public int fieldInt12709;
+    public int fieldInt12710;
+    public int fieldInt12711;
+    public int fieldInt12712;
+    public int fieldInt12713;
+    public int fieldInt12714;
+    public int fieldInt12715;
+    public int fieldInt12716;
+    public int fieldInt12717;
+    public int fieldInt12718;
+    public int fieldInt12719;
+    public int fieldInt12720;
+    public int fieldInt12721;
+    public int fieldInt12722;
+    public int fieldInt12723;
+    public int fieldInt12724;
+    public int fieldInt12725;
+    public int fieldInt12726;
+    public int fieldInt12727;
+    public int fieldInt12728;
+    public int fieldInt12729;
+    public int fieldInt12730;
+    public int fieldInt12731;
+    public int fieldInt12732;
+    public int fieldInt12733;
+    public int fieldInt12734;
+    public int fieldInt12735;
+    public int fieldInt12736;
+    public int fieldInt12737;
+    public int fieldInt12738;
+    public int fieldInt12739;
+    public int fieldInt12740;
+    public int fieldInt12741;
+    public int fieldInt12742;
+    public int fieldInt12743;
+    public int fieldInt12744;
+    public int fieldInt12745;
+    public int fieldInt12746;
+    public int fieldInt12747;
+    public int fieldInt12748;
+    public int fieldInt12749;
+    public int fieldInt12750;
+    public int fieldInt12751;
+    public int fieldInt12752;
+    public int fieldInt12753;
+    public int fieldInt12754;
+    public int fieldInt12755;
+    public int fieldInt12756;
+    public int fieldInt12757;
+    public int fieldInt12758;
+    public int fieldInt12759;
+    public int fieldInt12760;
+    public int fieldInt12761;
+    public int fieldInt12762;
+    public int fieldInt12763;
+    public int fieldInt12764;
+    public int fieldInt12765;
+    public int fieldInt12766;
+    public int fieldInt12767;
+    public int fieldInt12768;
+    public int fieldInt12769;
+    public int fieldInt12770;
+    public int fieldInt12771;
+    public int fieldInt12772;
+    public int fieldInt12773;
+    public int fieldInt12774;
+    public int fieldInt12775;
+    public int fieldInt12776;
+    public int fieldInt12777;
+    public int fieldInt12778;
+    public int fieldInt12779;
+    public int fieldInt12780;
+    public int fieldInt12781;
+    public int fieldInt12782;
+    public int fieldInt12783;
+    public int fieldInt12784;
+    public int fieldInt12785;
+    public int fieldInt12786;
+    public int fieldInt12787;
+    public int fieldInt12788;
+    public int fieldInt12789;
+    public int fieldInt12790;
+    public int fieldInt12791;
+    public int fieldInt12792;
+    public int fieldInt12793;
+    public int fieldInt12794;
+    public int fieldInt12795;
+    public int fieldInt12796;
+    public int fieldInt12797;
+    public int fieldInt12798;
+    public int fieldInt12799;
+    public int fieldInt12800;
+    public int fieldInt12801;
+    public int fieldInt12802;
+    public int fieldInt12803;
+    public int fieldInt12804;
+    public int fieldInt12805;
+    public int fieldInt12806;
+    public int fieldInt12807;
+    public int fieldInt12808;
+    public int fieldInt12809;
+    public int fieldInt12810;
+    public int fieldInt12811;
+    public int fieldInt12812;
+    public int fieldInt12813;
+    public int fieldInt12814;
+    public int fieldInt12815;
+    public int fieldInt12816;
+    public int fieldInt12817;
+    public int fieldInt12818;
+    public int fieldInt12819;
+    public int fieldInt12820;
+    public int fieldInt12821;
+    public int fieldInt12822;
+    public int fieldInt12823;
+    public int fieldInt12824;
+    public int fieldInt12825;
+    public int fieldInt12826;
+    public int fieldInt12827;
+    public int fieldInt12828;
+    public int fieldInt12829;
+    public int fieldInt12830;
+    public int fieldInt12831;
+    public int fieldInt12832;
+    public int fieldInt12833;
+    public int fieldInt12834;
+    public int fieldInt12835;
+    public int fieldInt12836;
+    public int fieldInt12837;
+    public int fieldInt12838;
+    public int fieldInt12839;
+    public int fieldInt12840;
+    public int fieldInt12841;
+    public int fieldInt12842;
+    public int fieldInt12843;
+    public int fieldInt12844;
+    public int fieldInt12845;
+    public int fieldInt12846;
+    public int fieldInt12847;
+    public int fieldInt12848;
+    public int fieldInt12849;
+    public int fieldInt12850;
+    public int fieldInt12851;
+    public int fieldInt12852;
+    public int fieldInt12853;
+    public int fieldInt12854;
+    public int fieldInt12855;
+    public int fieldInt12856;
+    public int fieldInt12857;
+    public int fieldInt12858;
+    public int fieldInt12859;
+    public int fieldInt12860;
+    public int fieldInt12861;
+    public int fieldInt12862;
+    public int fieldInt12863;
+    public int fieldInt12864;
+    public int fieldInt12865;
+    public int fieldInt12866;
+    public int fieldInt12867;
+    public int fieldInt12868;
+    public int fieldInt12869;
+    public int fieldInt12870;
+    public int fieldInt12871;
+    public int fieldInt12872;
+    public int fieldInt12873;
+    public int fieldInt12874;
+    public int fieldInt12875;
+    public int fieldInt12876;
+    public int fieldInt12877;
+    public int fieldInt12878;
+    public int fieldInt12879;
+    public int fieldInt12880;
+    public int fieldInt12881;
+    public int fieldInt12882;
+    public int fieldInt12883;
+    public int fieldInt12884;
+    public int fieldInt12885;
+    public int fieldInt12886;
+    public int fieldInt12887;
+    public int fieldInt12888;
+    public int fieldInt12889;
+    public int fieldInt12890;
+    public int fieldInt12891;
+    public int fieldInt12892;
+    public int fieldInt12893;
+    public int fieldInt12894;
+    public int fieldInt12895;
+    public int fieldInt12896;
+    public int fieldInt12897;
+    public int fieldInt12898;
+    public int fieldInt12899;
+    public int fieldInt12900;
+    public int fieldInt12901;
+    public int fieldInt12902;
+    public int fieldInt12903;
+    public int fieldInt12904;
+    public int fieldInt12905;
+    public int fieldInt12906;
+    public int fieldInt12907;
+    public int fieldInt12908;
+    public int fieldInt12909;
+    public int fieldInt12910;
+    public int fieldInt12911;
+    public int fieldInt12912;
+    public int fieldInt12913;
+    public int fieldInt12914;
+    public int fieldInt12915;
+    public int fieldInt12916;
+    public int fieldInt12917;
+    public int fieldInt12918;
+    public int fieldInt12919;
+    public int fieldInt12920;
+    public int fieldInt12921;
+    public int fieldInt12922;
+    public int fieldInt12923;
+    public int fieldInt12924;
+    public int fieldInt12925;
+    public int fieldInt12926;
+    public int fieldInt12927;
+    public int fieldInt12928;
+    public int fieldInt12929;
+    public int fieldInt12930;
+    public int fieldInt12931;
+    public int fieldInt12932;
+    public int fieldInt12933;
+    public int fieldInt12934;
+    public int fieldInt12935;
+    public int fieldInt12936;
+    public int fieldInt12937;
+    public int fieldInt12938;
+    public int fieldInt12939;
+    public int fieldInt12940;
+    public int fieldInt12941;
+    public int fieldInt12942;
+    public int fieldInt12943;
+    public int fieldInt12944;
+    public int fieldInt12945;
+    public int fieldInt12946;
+    public int fieldInt12947;
+    public int fieldInt12948;
+    public int fieldInt12949;
+    public int fieldInt12950;
+    public int fieldInt12951;
+    public int fieldInt12952;
+    public int fieldInt12953;
+    public int fieldInt12954;
+    public int fieldInt12955;
+    public int fieldInt12956;
+    public int fieldInt12957;
+    public int fieldInt12958;
+    public int fieldInt12959;
+    public int fieldInt12960;
+    public int fieldInt12961;
+    public int fieldInt12962;
+    public int fieldInt12963;
+    public int fieldInt12964;
+    public int fieldInt12965;
+    public int fieldInt12966;
+    public int fieldInt12967;
+    public int fieldInt12968;
+    public int fieldInt12969;
+    public int fieldInt12970;
+    public int fieldInt12971;
+    public int fieldInt12972;
+    public int fieldInt12973;
+    public int fieldInt12974;
+    public int fieldInt12975;
+    public int fieldInt12976;
+    public int fieldInt12977;
+    public int fieldInt12978;
+    public int fieldInt12979;
+    public int fieldInt12980;
+    public int fieldInt12981;
+    public int fieldInt12982;
+    public int fieldInt12983;
+    public int fieldInt12984;
+    public int fieldInt12985;
+    public int fieldInt12986;
+    public int fieldInt12987;
+    public int fieldInt12988;
+    public int fieldInt12989;
+    public int fieldInt12990;
+    public int fieldInt12991;
+    public int fieldInt12992;
+    public int fieldInt12993;
+    public int fieldInt12994;
+    public int fieldInt12995;
+    public int fieldInt12996;
+    public int fieldInt12997;
+    public int fieldInt12998;
+    public int fieldInt12999;
+    public int fieldInt13000;
+    public int fieldInt13001;
+    public int fieldInt13002;
+    public int fieldInt13003;
+    public int fieldInt13004;
+    public int fieldInt13005;
+    public int fieldInt13006;
+    public int fieldInt13007;
+    public int fieldInt13008;
+    public int fieldInt13009;
+    public int fieldInt13010;
+    public int fieldInt13011;
+    public int fieldInt13012;
+    public int fieldInt13013;
+    public int fieldInt13014;
+    public int fieldInt13015;
+    public int fieldInt13016;
+    public int fieldInt13017;
+    public int fieldInt13018;
+    public int fieldInt13019;
+    public int fieldInt13020;
+    public int fieldInt13021;
+    public int fieldInt13022;
+    public int fieldInt13023;
+    public int fieldInt13024;
+    public int fieldInt13025;
+    public int fieldInt13026;
+    public int fieldInt13027;
+    public int fieldInt13028;
+    public int fieldInt13029;
+    public int fieldInt13030;
+    public int fieldInt13031;
+    public int fieldInt13032;
+    public int fieldInt13033;
+    public int fieldInt13034;
+    public int fieldInt13035;
+    public int fieldInt13036;
+    public int fieldInt13037;
+    public int fieldInt13038;
+    public int fieldInt13039;
+    public int fieldInt13040;
+    public int fieldInt13041;
+    public int fieldInt13042;
+    public int fieldInt13043;
+    public int fieldInt13044;
+    public int fieldInt13045;
+    public int fieldInt13046;
+    public int fieldInt13047;
+    public int fieldInt13048;
+    public int fieldInt13049;
+    public int fieldInt13050;
+    public int fieldInt13051;
+    public int fieldInt13052;
+    public int fieldInt13053;
+    public int fieldInt13054;
+    public int fieldInt13055;
+    public int fieldInt13056;
+    public int fieldInt13057;
+    public int fieldInt13058;
+    public int fieldInt13059;
+    public int fieldInt13060;
+    public int fieldInt13061;
+    public int fieldInt13062;
+    public int fieldInt13063;
+    public int fieldInt13064;
+    public int fieldInt13065;
+    public int fieldInt13066;
+    public int fieldInt13067;
+    public int fieldInt13068;
+    public int fieldInt13069;
+    public int fieldInt13070;
+    public int fieldInt13071;
+    public int fieldInt13072;
+    public int fieldInt13073;
+    public int fieldInt13074;
+    public int fieldInt13075;
+    public int fieldInt13076;
+    public int fieldInt13077;
+    public int fieldInt13078;
+    public int fieldInt13079;
+    public int fieldInt13080;
+    public int fieldInt13081;
+    public int fieldInt13082;
+    public int fieldInt13083;
+    public int fieldInt13084;
+    public int fieldInt13085;
+    public int fieldInt13086;
+    public int fieldInt13087;
+    public int fieldInt13088;
+    public int fieldInt13089;
+    public int fieldInt13090;
+    public int fieldInt13091;
+    public int fieldInt13092;
+    public int fieldInt13093;
+    public int fieldInt13094;
+    public int fieldInt13095;
+    public int fieldInt13096;
+    public int fieldInt13097;
+    public int fieldInt13098;
+    public int fieldInt13099;
+    public int fieldInt13100;
+    public int fieldInt13101;
+    public int fieldInt13102;
+    public int fieldInt13103;
+    public int fieldInt13104;
+    public int fieldInt13105;
+    public int fieldInt13106;
+    public int fieldInt13107;
+    public int fieldInt13108;
+    public int fieldInt13109;
+    public int fieldInt13110;
+    public int fieldInt13111;
+    public int fieldInt13112;
+    public int fieldInt13113;
+    public int fieldInt13114;
+    public int fieldInt13115;
+    public int fieldInt13116;
+    public int fieldInt13117;
+    public int fieldInt13118;
+    public int fieldInt13119;
+    public int fieldInt13120;
+    public int fieldInt13121;
+    public int fieldInt13122;
+    public int fieldInt13123;
+    public int fieldInt13124;
+    public int fieldInt13125;
+    public int fieldInt13126;
+    public int fieldInt13127;
+    public int fieldInt13128;
+    public int fieldInt13129;
+    public int fieldInt13130;
+    public int fieldInt13131;
+    public int fieldInt13132;
+    public int fieldInt13133;
+    public int fieldInt13134;
+    public int fieldInt13135;
+    public int fieldInt13136;
+    public int fieldInt13137;
+    public int fieldInt13138;
+    public int fieldInt13139;
+    public int fieldInt13140;
+    public int fieldInt13141;
+    public int fieldInt13142;
+    public int fieldInt13143;
+    public int fieldInt13144;
+    public int fieldInt13145;
+    public int fieldInt13146;
+    public int fieldInt13147;
+    public int fieldInt13148;
+    public int fieldInt13149;
+    public int fieldInt13150;
+    public int fieldInt13151;
+    public int fieldInt13152;
+    public int fieldInt13153;
+    public int fieldInt13154;
+    public int fieldInt13155;
+    public int fieldInt13156;
+    public int fieldInt13157;
+    public int fieldInt13158;
+    public int fieldInt13159;
+    public int fieldInt13160;
+    public int fieldInt13161;
+    public int fieldInt13162;
+    public int fieldInt13163;
+    public int fieldInt13164;
+    public int fieldInt13165;
+    public int fieldInt13166;
+    public int fieldInt13167;
+    public int fieldInt13168;
+    public int fieldInt13169;
+    public int fieldInt13170;
+    public int fieldInt13171;
+    public int fieldInt13172;
+    public int fieldInt13173;
+    public int fieldInt13174;
+    public int fieldInt13175;
+    public int fieldInt13176;
+    public int fieldInt13177;
+    public int fieldInt13178;
+    public int fieldInt13179;
+    public int fieldInt13180;
+    public int fieldInt13181;
+    public int fieldInt13182;
+    public int fieldInt13183;
+    public int fieldInt13184;
+    public int fieldInt13185;
+    public int fieldInt13186;
+    public int fieldInt13187;
+    public int fieldInt13188;
+    public int fieldInt13189;
+    public int fieldInt13190;
+    public int fieldInt13191;
+    public int fieldInt13192;
+    public int fieldInt13193;
+    public int fieldInt13194;
+    public int fieldInt13195;
+    public int fieldInt13196;
+    public int fieldInt13197;
+    public int fieldInt13198;
+    public int fieldInt13199;
+    public int fieldInt13200;
+    public int fieldInt13201;
+    public int fieldInt13202;
+    public int fieldInt13203;
+    public int fieldInt13204;
+    public int fieldInt13205;
+    public int fieldInt13206;
+    public int fieldInt13207;
+    public int fieldInt13208;
+    public int fieldInt13209;
+    public int fieldInt13210;
+    public int fieldInt13211;
+    public int fieldInt13212;
+    public int fieldInt13213;
+    public int fieldInt13214;
+    public int fieldInt13215;
+    public int fieldInt13216;
+    public int fieldInt13217;
+    public int fieldInt13218;
+    public int fieldInt13219;
+    public int fieldInt13220;
+    public int fieldInt13221;
+    public int fieldInt13222;
+    public int fieldInt13223;
+    public int fieldInt13224;
+    public int fieldInt13225;
+    public int fieldInt13226;
+    public int fieldInt13227;
+    public int fieldInt13228;
+    public int fieldInt13229;
+    public int fieldInt13230;
+    public int fieldInt13231;
+    public int fieldInt13232;
+    public int fieldInt13233;
+    public int fieldInt13234;
+    public int fieldInt13235;
+    public int fieldInt13236;
+    public int fieldInt13237;
+    public int fieldInt13238;
+    public int fieldInt13239;
+    public int fieldInt13240;
+    public int fieldInt13241;
+    public int fieldInt13242;
+    public int fieldInt13243;
+    public int fieldInt13244;
+    public int fieldInt13245;
+    public int fieldInt13246;
+    public int fieldInt13247;
+    public int fieldInt13248;
+    public int fieldInt13249;
+    public int fieldInt13250;
+    public int fieldInt13251;
+    public int fieldInt13252;
+    public int fieldInt13253;
+    public int fieldInt13254;
+    public int fieldInt13255;
+    public int fieldInt13256;
+    public int fieldInt13257;
+    public int fieldInt13258;
+    public int fieldInt13259;
+    public int fieldInt13260;
+    public int fieldInt13261;
+    public int fieldInt13262;
+    public int fieldInt13263;
+    public int fieldInt13264;
+    public int fieldInt13265;
+    public int fieldInt13266;
+    public int fieldInt13267;
+    public int fieldInt13268;
+    public int fieldInt13269;
+    public int fieldInt13270;
+    public int fieldInt13271;
+    public int fieldInt13272;
+    public int fieldInt13273;
+    public int fieldInt13274;
+    public int fieldInt13275;
+    public int fieldInt13276;
+    public int fieldInt13277;
+    public int fieldInt13278;
+    public int fieldInt13279;
+    public int fieldInt13280;
+    public int fieldInt13281;
+    public int fieldInt13282;
+    public int fieldInt13283;
+    public int fieldInt13284;
+    public int fieldInt13285;
+    public int fieldInt13286;
+    public int fieldInt13287;
+    public int fieldInt13288;
+    public int fieldInt13289;
+    public int fieldInt13290;
+    public int fieldInt13291;
+    public int fieldInt13292;
+    public int fieldInt13293;
+    public int fieldInt13294;
+    public int fieldInt13295;
+    public int fieldInt13296;
+    public int fieldInt13297;
+    public int fieldInt13298;
+    public int fieldInt13299;
+    public int fieldInt13300;
+    public int fieldInt13301;
+    public int fieldInt13302;
+    public int fieldInt13303;
+    public int fieldInt13304;
+    public int fieldInt13305;
+    public int fieldInt13306;
+    public int fieldInt13307;
+    public int fieldInt13308;
+    public int fieldInt13309;
+    public int fieldInt13310;
+    public int fieldInt13311;
+    public int fieldInt13312;
+    public int fieldInt13313;
+    public int fieldInt13314;
+    public int fieldInt13315;
+    public int fieldInt13316;
+    public int fieldInt13317;
+    public int fieldInt13318;
+    public int fieldInt13319;
+    public int fieldInt13320;
+    public int fieldInt13321;
+    public int fieldInt13322;
+    public int fieldInt13323;
+    public int fieldInt13324;
+    public int fieldInt13325;
+    public int fieldInt13326;
+    public int fieldInt13327;
+    public int fieldInt13328;
+    public int fieldInt13329;
+    public int fieldInt13330;
+    public int fieldInt13331;
+    public int fieldInt13332;
+    public int fieldInt13333;
+    public int fieldInt13334;
+    public int fieldInt13335;
+    public int fieldInt13336;
+    public int fieldInt13337;
+    public int fieldInt13338;
+    public int fieldInt13339;
+    public int fieldInt13340;
+    public int fieldInt13341;
+    public int fieldInt13342;
+    public int fieldInt13343;
+    public int fieldInt13344;
+    public int fieldInt13345;
+    public int fieldInt13346;
+    public int fieldInt13347;
+    public int fieldInt13348;
+    public int fieldInt13349;
+    public int fieldInt13350;
+    public int fieldInt13351;
+    public int fieldInt13352;
+    public int fieldInt13353;
+    public int fieldInt13354;
+    public int fieldInt13355;
+    public int fieldInt13356;
+    public int fieldInt13357;
+    public int fieldInt13358;
+    public int fieldInt13359;
+    public int fieldInt13360;
+    public int fieldInt13361;
+    public int fieldInt13362;
+    public int fieldInt13363;
+    public int fieldInt13364;
+    public int fieldInt13365;
+    public int fieldInt13366;
+    public int fieldInt13367;
+    public int fieldInt13368;
+    public int fieldInt13369;
+    public int fieldInt13370;
+    public int fieldInt13371;
+    public int fieldInt13372;
+    public int fieldInt13373;
+    public int fieldInt13374;
+    public int fieldInt13375;
+    public int fieldInt13376;
+    public int fieldInt13377;
+    public int fieldInt13378;
+    public int fieldInt13379;
+    public int fieldInt13380;
+    public int fieldInt13381;
+    public int fieldInt13382;
+    public int fieldInt13383;
+    public int fieldInt13384;
+    public int fieldInt13385;
+    public int fieldInt13386;
+    public int fieldInt13387;
+    public int fieldInt13388;
+    public int fieldInt13389;
+    public int fieldInt13390;
+    public int fieldInt13391;
+    public int fieldInt13392;
+    public int fieldInt13393;
+    public int fieldInt13394;
+    public int fieldInt13395;
+    public int fieldInt13396;
+    public int fieldInt13397;
+    public int fieldInt13398;
+    public int fieldInt13399;
+    public int fieldInt13400;
+    public int fieldInt13401;
+    public int fieldInt13402;
+    public int fieldInt13403;
+    public int fieldInt13404;
+    public int fieldInt13405;
+    public int fieldInt13406;
+    public int fieldInt13407;
+    public int fieldInt13408;
+    public int fieldInt13409;
+    public int fieldInt13410;
+    public int fieldInt13411;
+    public int fieldInt13412;
+    public int fieldInt13413;
+    public int fieldInt13414;
+    public int fieldInt13415;
+    public int fieldInt13416;
+    public int fieldInt13417;
+    public int fieldInt13418;
+    public int fieldInt13419;
+    public int fieldInt13420;
+    public int fieldInt13421;
+    public int fieldInt13422;
+    public int fieldInt13423;
+    public int fieldInt13424;
+    public int fieldInt13425;
+    public int fieldInt13426;
+    public int fieldInt13427;
+    public int fieldInt13428;
+    public int fieldInt13429;
+    public int fieldInt13430;
+    public int fieldInt13431;
+    public int fieldInt13432;
+    public int fieldInt13433;
+    public int fieldInt13434;
+    public int fieldInt13435;
+    public int fieldInt13436;
+    public int fieldInt13437;
+    public int fieldInt13438;
+    public int fieldInt13439;
+    public int fieldInt13440;
+    public int fieldInt13441;
+    public int fieldInt13442;
+    public int fieldInt13443;
+    public int fieldInt13444;
+    public int fieldInt13445;
+    public int fieldInt13446;
+    public int fieldInt13447;
+    public int fieldInt13448;
+    public int fieldInt13449;
+    public int fieldInt13450;
+    public int fieldInt13451;
+    public int fieldInt13452;
+    public int fieldInt13453;
+    public int fieldInt13454;
+    public int fieldInt13455;
+    public int fieldInt13456;
+    public int fieldInt13457;
+    public int fieldInt13458;
+    public int fieldInt13459;
+    public int fieldInt13460;
+    public int fieldInt13461;
+    public int fieldInt13462;
+    public int fieldInt13463;
+    public int fieldInt13464;
+    public int fieldInt13465;
+    public int fieldInt13466;
+    public int fieldInt13467;
+    public int fieldInt13468;
+    public int fieldInt13469;
+    public int fieldInt13470;
+    public int fieldInt13471;
+    public int fieldInt13472;
+    public int fieldInt13473;
+    public int fieldInt13474;
+    public int fieldInt13475;
+    public int fieldInt13476;
+    public int fieldInt13477;
+    public int fieldInt13478;
+    public int fieldInt13479;
+    public int fieldInt13480;
+    public int fieldInt13481;
+    public int fieldInt13482;
+    public int fieldInt13483;
+    public int fieldInt13484;
+    public int fieldInt13485;
+    public int fieldInt13486;
+    public int fieldInt13487;
+    public int fieldInt13488;
+    public int fieldInt13489;
+    public int fieldInt13490;
+    public int fieldInt13491;
+    public int fieldInt13492;
+    public int fieldInt13493;
+    public int fieldInt13494;
+    public int fieldInt13495;
+    public int fieldInt13496;
+    public int fieldInt13497;
+    public int fieldInt13498;
+    public int fieldInt13499;
+    public int fieldInt13500;
+    public int fieldInt13501;
+    public int fieldInt13502;
+    public int fieldInt13503;
+    public int fieldInt13504;
+    public int fieldInt13505;
+    public int fieldInt13506;
+    public int fieldInt13507;
+    public int fieldInt13508;
+    public int fieldInt13509;
+    public int fieldInt13510;
+    public int fieldInt13511;
+    public int fieldInt13512;
+    public int fieldInt13513;
+    public int fieldInt13514;
+    public int fieldInt13515;
+    public int fieldInt13516;
+    public int fieldInt13517;
+    public int fieldInt13518;
+    public int fieldInt13519;
+    public int fieldInt13520;
+    public int fieldInt13521;
+    public int fieldInt13522;
+    public int fieldInt13523;
+    public int fieldInt13524;
+    public int fieldInt13525;
+    public int fieldInt13526;
+    public int fieldInt13527;
+    public int fieldInt13528;
+    public int fieldInt13529;
+    public int fieldInt13530;
+    public int fieldInt13531;
+    public int fieldInt13532;
+    public int fieldInt13533;
+    public int fieldInt13534;
+    public int fieldInt13535;
+    public int fieldInt13536;
+    public int fieldInt13537;
+    public int fieldInt13538;
+    public int fieldInt13539;
+    public int fieldInt13540;
+    public int fieldInt13541;
+    public int fieldInt13542;
+    public int fieldInt13543;
+    public int fieldInt13544;
+    public int fieldInt13545;
+    public int fieldInt13546;
+    public int fieldInt13547;
+    public int fieldInt13548;
+    public int fieldInt13549;
+    public int fieldInt13550;
+    public int fieldInt13551;
+    public int fieldInt13552;
+    public int fieldInt13553;
+    public int fieldInt13554;
+    public int fieldInt13555;
+    public int fieldInt13556;
+    public int fieldInt13557;
+    public int fieldInt13558;
+    public int fieldInt13559;
+    public int fieldInt13560;
+    public int fieldInt13561;
+    public int fieldInt13562;
+    public int fieldInt13563;
+    public int fieldInt13564;
+    public int fieldInt13565;
+    public int fieldInt13566;
+    public int fieldInt13567;
+    public int fieldInt13568;
+    public int fieldInt13569;
+    public int fieldInt13570;
+    public int fieldInt13571;
+    public int fieldInt13572;
+    public int fieldInt13573;
+    public int fieldInt13574;
+    public int fieldInt13575;
+    public int fieldInt13576;
+    public int fieldInt13577;
+    public int fieldInt13578;
+    public int fieldInt13579;
+    public int fieldInt13580;
+    public int fieldInt13581;
+    public int fieldInt13582;
+    public int fieldInt13583;
+    public int fieldInt13584;
+    public int fieldInt13585;
+    public int fieldInt13586;
+    public int fieldInt13587;
+    public int fieldInt13588;
+    public int fieldInt13589;
+    public int fieldInt13590;
+    public int fieldInt13591;
+    public int fieldInt13592;
+    public int fieldInt13593;
+    public int fieldInt13594;
+    public int fieldInt13595;
+    public int fieldInt13596;
+    public int fieldInt13597;
+    public int fieldInt13598;
+    public int fieldInt13599;
+    public int fieldInt13600;
+    public int fieldInt13601;
+    public int fieldInt13602;
+    public int fieldInt13603;
+    public int fieldInt13604;
+    public int fieldInt13605;
+    public int fieldInt13606;
+    public int fieldInt13607;
+    public int fieldInt13608;
+    public int fieldInt13609;
+    public int fieldInt13610;
+    public int fieldInt13611;
+    public int fieldInt13612;
+    public int fieldInt13613;
+    public int fieldInt13614;
+    public int fieldInt13615;
+    public int fieldInt13616;
+    public int fieldInt13617;
+    public int fieldInt13618;
+    public int fieldInt13619;
+    public int fieldInt13620;
+    public int fieldInt13621;
+    public int fieldInt13622;
+    public int fieldInt13623;
+    public int fieldInt13624;
+    public int fieldInt13625;
+    public int fieldInt13626;
+    public int fieldInt13627;
+    public int fieldInt13628;
+    public int fieldInt13629;
+    public int fieldInt13630;
+    public int fieldInt13631;
+    public int fieldInt13632;
+    public int fieldInt13633;
+    public int fieldInt13634;
+    public int fieldInt13635;
+    public int fieldInt13636;
+    public int fieldInt13637;
+    public int fieldInt13638;
+    public int fieldInt13639;
+    public int fieldInt13640;
+    public int fieldInt13641;
+    public int fieldInt13642;
+    public int fieldInt13643;
+    public int fieldInt13644;
+    public int fieldInt13645;
+    public int fieldInt13646;
+    public int fieldInt13647;
+    public int fieldInt13648;
+    public int fieldInt13649;
+    public int fieldInt13650;
+    public int fieldInt13651;
+    public int fieldInt13652;
+    public int fieldInt13653;
+    public int fieldInt13654;
+    public int fieldInt13655;
+    public int fieldInt13656;
+    public int fieldInt13657;
+    public int fieldInt13658;
+    public int fieldInt13659;
+    public int fieldInt13660;
+    public int fieldInt13661;
+    public int fieldInt13662;
+    public int fieldInt13663;
+    public int fieldInt13664;
+    public int fieldInt13665;
+    public int fieldInt13666;
+    public int fieldInt13667;
+    public int fieldInt13668;
+    public int fieldInt13669;
+    public int fieldInt13670;
+    public int fieldInt13671;
+    public int fieldInt13672;
+    public int fieldInt13673;
+    public int fieldInt13674;
+    public int fieldInt13675;
+    public int fieldInt13676;
+    public int fieldInt13677;
+    public int fieldInt13678;
+    public int fieldInt13679;
+    public int fieldInt13680;
+    public int fieldInt13681;
+    public int fieldInt13682;
+    public int fieldInt13683;
+    public int fieldInt13684;
+    public int fieldInt13685;
+    public int fieldInt13686;
+    public int fieldInt13687;
+    public int fieldInt13688;
+    public int fieldInt13689;
+    public int fieldInt13690;
+    public int fieldInt13691;
+    public int fieldInt13692;
+    public int fieldInt13693;
+    public int fieldInt13694;
+    public int fieldInt13695;
+    public int fieldInt13696;
+    public int fieldInt13697;
+    public int fieldInt13698;
+    public int fieldInt13699;
+    public int fieldInt13700;
+    public int fieldInt13701;
+    public int fieldInt13702;
+    public int fieldInt13703;
+    public int fieldInt13704;
+    public int fieldInt13705;
+    public int fieldInt13706;
+    public int fieldInt13707;
+    public int fieldInt13708;
+    public int fieldInt13709;
+    public int fieldInt13710;
+    public int fieldInt13711;
+    public int fieldInt13712;
+    public int fieldInt13713;
+    public int fieldInt13714;
+    public int fieldInt13715;
+    public int fieldInt13716;
+    public int fieldInt13717;
+    public int fieldInt13718;
+    public int fieldInt13719;
+    public int fieldInt13720;
+    public int fieldInt13721;
+    public int fieldInt13722;
+    public int fieldInt13723;
+    public int fieldInt13724;
+    public int fieldInt13725;
+    public int fieldInt13726;
+    public int fieldInt13727;
+    public int fieldInt13728;
+    public int fieldInt13729;
+    public int fieldInt13730;
+    public int fieldInt13731;
+    public int fieldInt13732;
+    public int fieldInt13733;
+    public int fieldInt13734;
+    public int fieldInt13735;
+    public int fieldInt13736;
+    public int fieldInt13737;
+    public int fieldInt13738;
+    public int fieldInt13739;
+    public int fieldInt13740;
+    public int fieldInt13741;
+    public int fieldInt13742;
+    public int fieldInt13743;
+    public int fieldInt13744;
+    public int fieldInt13745;
+    public int fieldInt13746;
+    public int fieldInt13747;
+    public int fieldInt13748;
+    public int fieldInt13749;
+    public int fieldInt13750;
+    public int fieldInt13751;
+    public int fieldInt13752;
+    public int fieldInt13753;
+    public int fieldInt13754;
+    public int fieldInt13755;
+    public int fieldInt13756;
+    public int fieldInt13757;
+    public int fieldInt13758;
+    public int fieldInt13759;
+    public int fieldInt13760;
+    public int fieldInt13761;
+    public int fieldInt13762;
+    public int fieldInt13763;
+    public int fieldInt13764;
+    public int fieldInt13765;
+    public int fieldInt13766;
+    public int fieldInt13767;
+    public int fieldInt13768;
+    public int fieldInt13769;
+    public int fieldInt13770;
+    public int fieldInt13771;
+    public int fieldInt13772;
+    public int fieldInt13773;
+    public int fieldInt13774;
+    public int fieldInt13775;
+    public int fieldInt13776;
+    public int fieldInt13777;
+    public int fieldInt13778;
+    public int fieldInt13779;
+    public int fieldInt13780;
+    public int fieldInt13781;
+    public int fieldInt13782;
+    public int fieldInt13783;
+    public int fieldInt13784;
+    public int fieldInt13785;
+    public int fieldInt13786;
+    public int fieldInt13787;
+    public int fieldInt13788;
+    public int fieldInt13789;
+    public int fieldInt13790;
+    public int fieldInt13791;
+    public int fieldInt13792;
+    public int fieldInt13793;
+    public int fieldInt13794;
+    public int fieldInt13795;
+    public int fieldInt13796;
+    public int fieldInt13797;
+    public int fieldInt13798;
+    public int fieldInt13799;
+    public int fieldInt13800;
+    public int fieldInt13801;
+    public int fieldInt13802;
+    public int fieldInt13803;
+    public int fieldInt13804;
+    public int fieldInt13805;
+    public int fieldInt13806;
+    public int fieldInt13807;
+    public int fieldInt13808;
+    public int fieldInt13809;
+    public int fieldInt13810;
+    public int fieldInt13811;
+    public int fieldInt13812;
+    public int fieldInt13813;
+    public int fieldInt13814;
+    public int fieldInt13815;
+    public int fieldInt13816;
+    public int fieldInt13817;
+    public int fieldInt13818;
+    public int fieldInt13819;
+    public int fieldInt13820;
+    public int fieldInt13821;
+    public int fieldInt13822;
+    public int fieldInt13823;
+    public int fieldInt13824;
+    public int fieldInt13825;
+    public int fieldInt13826;
+    public int fieldInt13827;
+    public int fieldInt13828;
+    public int fieldInt13829;
+    public int fieldInt13830;
+    public int fieldInt13831;
+    public int fieldInt13832;
+    public int fieldInt13833;
+    public int fieldInt13834;
+    public int fieldInt13835;
+    public int fieldInt13836;
+    public int fieldInt13837;
+    public int fieldInt13838;
+    public int fieldInt13839;
+    public int fieldInt13840;
+    public int fieldInt13841;
+    public int fieldInt13842;
+    public int fieldInt13843;
+    public int fieldInt13844;
+    public int fieldInt13845;
+    public int fieldInt13846;
+    public int fieldInt13847;
+    public int fieldInt13848;
+    public int fieldInt13849;
+    public int fieldInt13850;
+    public int fieldInt13851;
+    public int fieldInt13852;
+    public int fieldInt13853;
+    public int fieldInt13854;
+    public int fieldInt13855;
+    public int fieldInt13856;
+    public int fieldInt13857;
+    public int fieldInt13858;
+    public int fieldInt13859;
+    public int fieldInt13860;
+    public int fieldInt13861;
+    public int fieldInt13862;
+    public int fieldInt13863;
+    public int fieldInt13864;
+    public int fieldInt13865;
+    public int fieldInt13866;
+    public int fieldInt13867;
+    public int fieldInt13868;
+    public int fieldInt13869;
+    public int fieldInt13870;
+    public int fieldInt13871;
+    public int fieldInt13872;
+    public int fieldInt13873;
+    public int fieldInt13874;
+    public int fieldInt13875;
+    public int fieldInt13876;
+    public int fieldInt13877;
+    public int fieldInt13878;
+    public int fieldInt13879;
+    public int fieldInt13880;
+    public int fieldInt13881;
+    public int fieldInt13882;
+    public int fieldInt13883;
+    public int fieldInt13884;
+    public int fieldInt13885;
+    public int fieldInt13886;
+    public int fieldInt13887;
+    public int fieldInt13888;
+    public int fieldInt13889;
+    public int fieldInt13890;
+    public int fieldInt13891;
+    public int fieldInt13892;
+    public int fieldInt13893;
+    public int fieldInt13894;
+    public int fieldInt13895;
+    public int fieldInt13896;
+    public int fieldInt13897;
+    public int fieldInt13898;
+    public int fieldInt13899;
+    public int fieldInt13900;
+    public int fieldInt13901;
+    public int fieldInt13902;
+    public int fieldInt13903;
+    public int fieldInt13904;
+    public int fieldInt13905;
+    public int fieldInt13906;
+    public int fieldInt13907;
+    public int fieldInt13908;
+    public int fieldInt13909;
+    public int fieldInt13910;
+    public int fieldInt13911;
+    public int fieldInt13912;
+    public int fieldInt13913;
+    public int fieldInt13914;
+    public int fieldInt13915;
+    public int fieldInt13916;
+    public int fieldInt13917;
+    public int fieldInt13918;
+    public int fieldInt13919;
+    public int fieldInt13920;
+    public int fieldInt13921;
+    public int fieldInt13922;
+    public int fieldInt13923;
+    public int fieldInt13924;
+    public int fieldInt13925;
+    public int fieldInt13926;
+    public int fieldInt13927;
+    public int fieldInt13928;
+    public int fieldInt13929;
+    public int fieldInt13930;
+    public int fieldInt13931;
+    public int fieldInt13932;
+    public int fieldInt13933;
+    public int fieldInt13934;
+    public int fieldInt13935;
+    public int fieldInt13936;
+    public int fieldInt13937;
+    public int fieldInt13938;
+    public int fieldInt13939;
+    public int fieldInt13940;
+    public int fieldInt13941;
+    public int fieldInt13942;
+    public int fieldInt13943;
+    public int fieldInt13944;
+    public int fieldInt13945;
+    public int fieldInt13946;
+    public int fieldInt13947;
+    public int fieldInt13948;
+    public int fieldInt13949;
+    public int fieldInt13950;
+    public int fieldInt13951;
+    public int fieldInt13952;
+    public int fieldInt13953;
+    public int fieldInt13954;
+    public int fieldInt13955;
+    public int fieldInt13956;
+    public int fieldInt13957;
+    public int fieldInt13958;
+    public int fieldInt13959;
+    public int fieldInt13960;
+    public int fieldInt13961;
+    public int fieldInt13962;
+    public int fieldInt13963;
+    public int fieldInt13964;
+    public int fieldInt13965;
+    public int fieldInt13966;
+    public int fieldInt13967;
+    public int fieldInt13968;
+    public int fieldInt13969;
+    public int fieldInt13970;
+    public int fieldInt13971;
+    public int fieldInt13972;
+    public int fieldInt13973;
+    public int fieldInt13974;
+    public int fieldInt13975;
+    public int fieldInt13976;
+    public int fieldInt13977;
+    public int fieldInt13978;
+    public int fieldInt13979;
+    public int fieldInt13980;
+    public int fieldInt13981;
+    public int fieldInt13982;
+    public int fieldInt13983;
+    public int fieldInt13984;
+    public int fieldInt13985;
+    public int fieldInt13986;
+    public int fieldInt13987;
+    public int fieldInt13988;
+    public int fieldInt13989;
+    public int fieldInt13990;
+    public int fieldInt13991;
+    public int fieldInt13992;
+    public int fieldInt13993;
+    public int fieldInt13994;
+    public int fieldInt13995;
+    public int fieldInt13996;
+    public int fieldInt13997;
+    public int fieldInt13998;
+    public int fieldInt13999;
+    public int fieldInt14000;
+    public int fieldInt14001;
+    public int fieldInt14002;
+    public int fieldInt14003;
+    public int fieldInt14004;
+    public int fieldInt14005;
+    public int fieldInt14006;
+    public int fieldInt14007;
+    public int fieldInt14008;
+    public int fieldInt14009;
+    public int fieldInt14010;
+    public int fieldInt14011;
+    public int fieldInt14012;
+    public int fieldInt14013;
+    public int fieldInt14014;
+    public int fieldInt14015;
+    public int fieldInt14016;
+    public int fieldInt14017;
+    public int fieldInt14018;
+    public int fieldInt14019;
+    public int fieldInt14020;
+    public int fieldInt14021;
+    public int fieldInt14022;
+    public int fieldInt14023;
+    public int fieldInt14024;
+    public int fieldInt14025;
+    public int fieldInt14026;
+    public int fieldInt14027;
+    public int fieldInt14028;
+    public int fieldInt14029;
+    public int fieldInt14030;
+    public int fieldInt14031;
+    public int fieldInt14032;
+    public int fieldInt14033;
+    public int fieldInt14034;
+    public int fieldInt14035;
+    public int fieldInt14036;
+    public int fieldInt14037;
+    public int fieldInt14038;
+    public int fieldInt14039;
+    public int fieldInt14040;
+    public int fieldInt14041;
+    public int fieldInt14042;
+    public int fieldInt14043;
+    public int fieldInt14044;
+    public int fieldInt14045;
+    public int fieldInt14046;
+    public int fieldInt14047;
+    public int fieldInt14048;
+    public int fieldInt14049;
+    public int fieldInt14050;
+    public int fieldInt14051;
+    public int fieldInt14052;
+    public int fieldInt14053;
+    public int fieldInt14054;
+    public int fieldInt14055;
+    public int fieldInt14056;
+    public int fieldInt14057;
+    public int fieldInt14058;
+    public int fieldInt14059;
+    public int fieldInt14060;
+    public int fieldInt14061;
+    public int fieldInt14062;
+    public int fieldInt14063;
+    public int fieldInt14064;
+    public int fieldInt14065;
+    public int fieldInt14066;
+    public int fieldInt14067;
+    public int fieldInt14068;
+    public int fieldInt14069;
+    public int fieldInt14070;
+    public int fieldInt14071;
+    public int fieldInt14072;
+    public int fieldInt14073;
+    public int fieldInt14074;
+    public int fieldInt14075;
+    public int fieldInt14076;
+    public int fieldInt14077;
+    public int fieldInt14078;
+    public int fieldInt14079;
+    public int fieldInt14080;
+    public int fieldInt14081;
+    public int fieldInt14082;
+    public int fieldInt14083;
+    public int fieldInt14084;
+    public int fieldInt14085;
+    public int fieldInt14086;
+    public int fieldInt14087;
+    public int fieldInt14088;
+    public int fieldInt14089;
+    public int fieldInt14090;
+    public int fieldInt14091;
+    public int fieldInt14092;
+    public int fieldInt14093;
+    public int fieldInt14094;
+    public int fieldInt14095;
+    public int fieldInt14096;
+    public int fieldInt14097;
+    public int fieldInt14098;
+    public int fieldInt14099;
+    public int fieldInt14100;
+    public int fieldInt14101;
+    public int fieldInt14102;
+    public int fieldInt14103;
+    public int fieldInt14104;
+    public int fieldInt14105;
+    public int fieldInt14106;
+    public int fieldInt14107;
+    public int fieldInt14108;
+    public int fieldInt14109;
+    public int fieldInt14110;
+    public int fieldInt14111;
+    public int fieldInt14112;
+    public int fieldInt14113;
+    public int fieldInt14114;
+    public int fieldInt14115;
+    public int fieldInt14116;
+    public int fieldInt14117;
+    public int fieldInt14118;
+    public int fieldInt14119;
+    public int fieldInt14120;
+    public int fieldInt14121;
+    public int fieldInt14122;
+    public int fieldInt14123;
+    public int fieldInt14124;
+    public int fieldInt14125;
+    public int fieldInt14126;
+    public int fieldInt14127;
+    public int fieldInt14128;
+    public int fieldInt14129;
+    public int fieldInt14130;
+    public int fieldInt14131;
+    public int fieldInt14132;
+    public int fieldInt14133;
+    public int fieldInt14134;
+    public int fieldInt14135;
+    public int fieldInt14136;
+    public int fieldInt14137;
+    public int fieldInt14138;
+    public int fieldInt14139;
+    public int fieldInt14140;
+    public int fieldInt14141;
+    public int fieldInt14142;
+    public int fieldInt14143;
+    public int fieldInt14144;
+    public int fieldInt14145;
+    public int fieldInt14146;
+    public int fieldInt14147;
+    public int fieldInt14148;
+    public int fieldInt14149;
+    public int fieldInt14150;
+    public int fieldInt14151;
+    public int fieldInt14152;
+    public int fieldInt14153;
+    public int fieldInt14154;
+    public int fieldInt14155;
+    public int fieldInt14156;
+    public int fieldInt14157;
+    public int fieldInt14158;
+    public int fieldInt14159;
+    public int fieldInt14160;
+    public int fieldInt14161;
+    public int fieldInt14162;
+    public int fieldInt14163;
+    public int fieldInt14164;
+    public int fieldInt14165;
+    public int fieldInt14166;
+    public int fieldInt14167;
+    public int fieldInt14168;
+    public int fieldInt14169;
+    public int fieldInt14170;
+    public int fieldInt14171;
+    public int fieldInt14172;
+    public int fieldInt14173;
+    public int fieldInt14174;
+    public int fieldInt14175;
+    public int fieldInt14176;
+    public int fieldInt14177;
+    public int fieldInt14178;
+    public int fieldInt14179;
+    public int fieldInt14180;
+    public int fieldInt14181;
+    public int fieldInt14182;
+    public int fieldInt14183;
+    public int fieldInt14184;
+    public int fieldInt14185;
+    public int fieldInt14186;
+    public int fieldInt14187;
+    public int fieldInt14188;
+    public int fieldInt14189;
+    public int fieldInt14190;
+    public int fieldInt14191;
+    public int fieldInt14192;
+    public int fieldInt14193;
+    public int fieldInt14194;
+    public int fieldInt14195;
+    public int fieldInt14196;
+    public int fieldInt14197;
+    public int fieldInt14198;
+    public int fieldInt14199;
+    public int fieldInt14200;
+    public int fieldInt14201;
+    public int fieldInt14202;
+    public int fieldInt14203;
+    public int fieldInt14204;
+    public int fieldInt14205;
+    public int fieldInt14206;
+    public int fieldInt14207;
+    public int fieldInt14208;
+    public int fieldInt14209;
+    public int fieldInt14210;
+    public int fieldInt14211;
+    public int fieldInt14212;
+    public int fieldInt14213;
+    public int fieldInt14214;
+    public int fieldInt14215;
+    public int fieldInt14216;
+    public int fieldInt14217;
+    public int fieldInt14218;
+    public int fieldInt14219;
+    public int fieldInt14220;
+    public int fieldInt14221;
+    public int fieldInt14222;
+    public int fieldInt14223;
+    public int fieldInt14224;
+    public int fieldInt14225;
+    public int fieldInt14226;
+    public int fieldInt14227;
+    public int fieldInt14228;
+    public int fieldInt14229;
+    public int fieldInt14230;
+    public int fieldInt14231;
+    public int fieldInt14232;
+    public int fieldInt14233;
+    public int fieldInt14234;
+    public int fieldInt14235;
+    public int fieldInt14236;
+    public int fieldInt14237;
+    public int fieldInt14238;
+    public int fieldInt14239;
+    public int fieldInt14240;
+    public int fieldInt14241;
+    public int fieldInt14242;
+    public int fieldInt14243;
+    public int fieldInt14244;
+    public int fieldInt14245;
+    public int fieldInt14246;
+    public int fieldInt14247;
+    public int fieldInt14248;
+    public int fieldInt14249;
+    public int fieldInt14250;
+    public int fieldInt14251;
+    public int fieldInt14252;
+    public int fieldInt14253;
+    public int fieldInt14254;
+    public int fieldInt14255;
+    public int fieldInt14256;
+    public int fieldInt14257;
+    public int fieldInt14258;
+    public int fieldInt14259;
+    public int fieldInt14260;
+    public int fieldInt14261;
+    public int fieldInt14262;
+    public int fieldInt14263;
+    public int fieldInt14264;
+    public int fieldInt14265;
+    public int fieldInt14266;
+    public int fieldInt14267;
+    public int fieldInt14268;
+    public int fieldInt14269;
+    public int fieldInt14270;
+    public int fieldInt14271;
+    public int fieldInt14272;
+    public int fieldInt14273;
+    public int fieldInt14274;
+    public int fieldInt14275;
+    public int fieldInt14276;
+    public int fieldInt14277;
+    public int fieldInt14278;
+    public int fieldInt14279;
+    public int fieldInt14280;
+    public int fieldInt14281;
+    public int fieldInt14282;
+    public int fieldInt14283;
+    public int fieldInt14284;
+    public int fieldInt14285;
+    public int fieldInt14286;
+    public int fieldInt14287;
+    public int fieldInt14288;
+    public int fieldInt14289;
+    public int fieldInt14290;
+    public int fieldInt14291;
+    public int fieldInt14292;
+    public int fieldInt14293;
+    public int fieldInt14294;
+    public int fieldInt14295;
+    public int fieldInt14296;
+    public int fieldInt14297;
+    public int fieldInt14298;
+    public int fieldInt14299;
+    public int fieldInt14300;
+    public int fieldInt14301;
+    public int fieldInt14302;
+    public int fieldInt14303;
+    public int fieldInt14304;
+    public int fieldInt14305;
+    public int fieldInt14306;
+    public int fieldInt14307;
+    public int fieldInt14308;
+    public int fieldInt14309;
+    public int fieldInt14310;
+    public int fieldInt14311;
+    public int fieldInt14312;
+    public int fieldInt14313;
+    public int fieldInt14314;
+    public int fieldInt14315;
+    public int fieldInt14316;
+    public int fieldInt14317;
+    public int fieldInt14318;
+    public int fieldInt14319;
+    public int fieldInt14320;
+    public int fieldInt14321;
+    public int fieldInt14322;
+    public int fieldInt14323;
+    public int fieldInt14324;
+    public int fieldInt14325;
+    public int fieldInt14326;
+    public int fieldInt14327;
+    public int fieldInt14328;
+    public int fieldInt14329;
+    public int fieldInt14330;
+    public int fieldInt14331;
+    public int fieldInt14332;
+    public int fieldInt14333;
+    public int fieldInt14334;
+    public int fieldInt14335;
+    public int fieldInt14336;
+    public int fieldInt14337;
+    public int fieldInt14338;
+    public int fieldInt14339;
+    public int fieldInt14340;
+    public int fieldInt14341;
+    public int fieldInt14342;
+    public int fieldInt14343;
+    public int fieldInt14344;
+    public int fieldInt14345;
+    public int fieldInt14346;
+    public int fieldInt14347;
+    public int fieldInt14348;
+    public int fieldInt14349;
+    public int fieldInt14350;
+    public int fieldInt14351;
+    public int fieldInt14352;
+    public int fieldInt14353;
+    public int fieldInt14354;
+    public int fieldInt14355;
+    public int fieldInt14356;
+    public int fieldInt14357;
+    public int fieldInt14358;
+    public int fieldInt14359;
+    public int fieldInt14360;
+    public int fieldInt14361;
+    public int fieldInt14362;
+    public int fieldInt14363;
+    public int fieldInt14364;
+    public int fieldInt14365;
+    public int fieldInt14366;
+    public int fieldInt14367;
+    public int fieldInt14368;
+    public int fieldInt14369;
+    public int fieldInt14370;
+    public int fieldInt14371;
+    public int fieldInt14372;
+    public int fieldInt14373;
+    public int fieldInt14374;
+    public int fieldInt14375;
+    public int fieldInt14376;
+    public int fieldInt14377;
+    public int fieldInt14378;
+    public int fieldInt14379;
+    public int fieldInt14380;
+    public int fieldInt14381;
+    public int fieldInt14382;
+    public int fieldInt14383;
+    public int fieldInt14384;
+    public int fieldInt14385;
+    public int fieldInt14386;
+    public int fieldInt14387;
+    public int fieldInt14388;
+    public int fieldInt14389;
+    public int fieldInt14390;
+    public int fieldInt14391;
+    public int fieldInt14392;
+    public int fieldInt14393;
+    public int fieldInt14394;
+    public int fieldInt14395;
+    public int fieldInt14396;
+    public int fieldInt14397;
+    public int fieldInt14398;
+    public int fieldInt14399;
+    public int fieldInt14400;
+    public int fieldInt14401;
+    public int fieldInt14402;
+    public int fieldInt14403;
+    public int fieldInt14404;
+    public int fieldInt14405;
+    public int fieldInt14406;
+    public int fieldInt14407;
+    public int fieldInt14408;
+    public int fieldInt14409;
+    public int fieldInt14410;
+    public int fieldInt14411;
+    public int fieldInt14412;
+    public int fieldInt14413;
+    public int fieldInt14414;
+    public int fieldInt14415;
+    public int fieldInt14416;
+    public int fieldInt14417;
+    public int fieldInt14418;
+    public int fieldInt14419;
+    public int fieldInt14420;
+    public int fieldInt14421;
+    public int fieldInt14422;
+    public int fieldInt14423;
+    public int fieldInt14424;
+    public int fieldInt14425;
+    public int fieldInt14426;
+    public int fieldInt14427;
+    public int fieldInt14428;
+    public int fieldInt14429;
+    public int fieldInt14430;
+    public int fieldInt14431;
+    public int fieldInt14432;
+    public int fieldInt14433;
+    public int fieldInt14434;
+    public int fieldInt14435;
+    public int fieldInt14436;
+    public int fieldInt14437;
+    public int fieldInt14438;
+    public int fieldInt14439;
+    public int fieldInt14440;
+    public int fieldInt14441;
+    public int fieldInt14442;
+    public int fieldInt14443;
+    public int fieldInt14444;
+    public int fieldInt14445;
+    public int fieldInt14446;
+    public int fieldInt14447;
+    public int fieldInt14448;
+    public int fieldInt14449;
+    public int fieldInt14450;
+    public int fieldInt14451;
+    public int fieldInt14452;
+    public int fieldInt14453;
+    public int fieldInt14454;
+    public int fieldInt14455;
+    public int fieldInt14456;
+    public int fieldInt14457;
+    public int fieldInt14458;
+    public int fieldInt14459;
+    public int fieldInt14460;
+    public int fieldInt14461;
+    public int fieldInt14462;
+    public int fieldInt14463;
+    public int fieldInt14464;
+    public int fieldInt14465;
+    public int fieldInt14466;
+    public int fieldInt14467;
+    public int fieldInt14468;
+    public int fieldInt14469;
+    public int fieldInt14470;
+    public int fieldInt14471;
+    public int fieldInt14472;
+    public int fieldInt14473;
+    public int fieldInt14474;
+    public int fieldInt14475;
+    public int fieldInt14476;
+    public int fieldInt14477;
+    public int fieldInt14478;
+    public int fieldInt14479;
+    public int fieldInt14480;
+    public int fieldInt14481;
+    public int fieldInt14482;
+    public int fieldInt14483;
+    public int fieldInt14484;
+    public int fieldInt14485;
+    public int fieldInt14486;
+    public int fieldInt14487;
+    public int fieldInt14488;
+    public int fieldInt14489;
+    public int fieldInt14490;
+    public int fieldInt14491;
+    public int fieldInt14492;
+    public int fieldInt14493;
+    public int fieldInt14494;
+    public int fieldInt14495;
+    public int fieldInt14496;
+    public int fieldInt14497;
+    public int fieldInt14498;
+    public int fieldInt14499;
+    public int fieldInt14500;
+    public int fieldInt14501;
+    public int fieldInt14502;
+    public int fieldInt14503;
+    public int fieldInt14504;
+    public int fieldInt14505;
+    public int fieldInt14506;
+    public int fieldInt14507;
+    public int fieldInt14508;
+    public int fieldInt14509;
+    public int fieldInt14510;
+    public int fieldInt14511;
+    public int fieldInt14512;
+    public int fieldInt14513;
+    public int fieldInt14514;
+    public int fieldInt14515;
+    public int fieldInt14516;
+    public int fieldInt14517;
+    public int fieldInt14518;
+    public int fieldInt14519;
+    public int fieldInt14520;
+    public int fieldInt14521;
+    public int fieldInt14522;
+    public int fieldInt14523;
+    public int fieldInt14524;
+    public int fieldInt14525;
+    public int fieldInt14526;
+    public int fieldInt14527;
+    public int fieldInt14528;
+    public int fieldInt14529;
+    public int fieldInt14530;
+    public int fieldInt14531;
+    public int fieldInt14532;
+    public int fieldInt14533;
+    public int fieldInt14534;
+    public int fieldInt14535;
+    public int fieldInt14536;
+    public int fieldInt14537;
+    public int fieldInt14538;
+    public int fieldInt14539;
+    public int fieldInt14540;
+    public int fieldInt14541;
+    public int fieldInt14542;
+    public int fieldInt14543;
+    public int fieldInt14544;
+    public int fieldInt14545;
+    public int fieldInt14546;
+    public int fieldInt14547;
+    public int fieldInt14548;
+    public int fieldInt14549;
+    public int fieldInt14550;
+    public int fieldInt14551;
+    public int fieldInt14552;
+    public int fieldInt14553;
+    public int fieldInt14554;
+    public int fieldInt14555;
+    public int fieldInt14556;
+    public int fieldInt14557;
+    public int fieldInt14558;
+    public int fieldInt14559;
+    public int fieldInt14560;
+    public int fieldInt14561;
+    public int fieldInt14562;
+    public int fieldInt14563;
+    public int fieldInt14564;
+    public int fieldInt14565;
+    public int fieldInt14566;
+    public int fieldInt14567;
+    public int fieldInt14568;
+    public int fieldInt14569;
+    public int fieldInt14570;
+    public int fieldInt14571;
+    public int fieldInt14572;
+    public int fieldInt14573;
+    public int fieldInt14574;
+    public int fieldInt14575;
+    public int fieldInt14576;
+    public int fieldInt14577;
+    public int fieldInt14578;
+    public int fieldInt14579;
+    public int fieldInt14580;
+    public int fieldInt14581;
+    public int fieldInt14582;
+    public int fieldInt14583;
+    public int fieldInt14584;
+    public int fieldInt14585;
+    public int fieldInt14586;
+    public int fieldInt14587;
+    public int fieldInt14588;
+    public int fieldInt14589;
+    public int fieldInt14590;
+    public int fieldInt14591;
+    public int fieldInt14592;
+    public int fieldInt14593;
+    public int fieldInt14594;
+    public int fieldInt14595;
+    public int fieldInt14596;
+    public int fieldInt14597;
+    public int fieldInt14598;
+    public int fieldInt14599;
+    public int fieldInt14600;
+    public int fieldInt14601;
+    public int fieldInt14602;
+    public int fieldInt14603;
+    public int fieldInt14604;
+    public int fieldInt14605;
+    public int fieldInt14606;
+    public int fieldInt14607;
+    public int fieldInt14608;
+    public int fieldInt14609;
+    public int fieldInt14610;
+    public int fieldInt14611;
+    public int fieldInt14612;
+    public int fieldInt14613;
+    public int fieldInt14614;
+    public int fieldInt14615;
+    public int fieldInt14616;
+    public int fieldInt14617;
+    public int fieldInt14618;
+    public int fieldInt14619;
+    public int fieldInt14620;
+    public int fieldInt14621;
+    public int fieldInt14622;
+    public int fieldInt14623;
+    public int fieldInt14624;
+    public int fieldInt14625;
+    public int fieldInt14626;
+    public int fieldInt14627;
+    public int fieldInt14628;
+    public int fieldInt14629;
+    public int fieldInt14630;
+    public int fieldInt14631;
+    public int fieldInt14632;
+    public int fieldInt14633;
+    public int fieldInt14634;
+    public int fieldInt14635;
+    public int fieldInt14636;
+    public int fieldInt14637;
+    public int fieldInt14638;
+    public int fieldInt14639;
+    public int fieldInt14640;
+    public int fieldInt14641;
+    public int fieldInt14642;
+    public int fieldInt14643;
+    public int fieldInt14644;
+    public int fieldInt14645;
+    public int fieldInt14646;
+    public int fieldInt14647;
+    public int fieldInt14648;
+    public int fieldInt14649;
+    public int fieldInt14650;
+    public int fieldInt14651;
+    public int fieldInt14652;
+    public int fieldInt14653;
+    public int fieldInt14654;
+    public int fieldInt14655;
+    public int fieldInt14656;
+    public int fieldInt14657;
+    public int fieldInt14658;
+    public int fieldInt14659;
+    public int fieldInt14660;
+    public int fieldInt14661;
+    public int fieldInt14662;
+    public int fieldInt14663;
+    public int fieldInt14664;
+    public int fieldInt14665;
+    public int fieldInt14666;
+    public int fieldInt14667;
+    public int fieldInt14668;
+    public int fieldInt14669;
+    public int fieldInt14670;
+    public int fieldInt14671;
+    public int fieldInt14672;
+    public int fieldInt14673;
+    public int fieldInt14674;
+    public int fieldInt14675;
+    public int fieldInt14676;
+    public int fieldInt14677;
+    public int fieldInt14678;
+    public int fieldInt14679;
+    public int fieldInt14680;
+    public int fieldInt14681;
+    public int fieldInt14682;
+    public int fieldInt14683;
+    public int fieldInt14684;
+    public int fieldInt14685;
+    public int fieldInt14686;
+    public int fieldInt14687;
+    public int fieldInt14688;
+    public int fieldInt14689;
+    public int fieldInt14690;
+    public int fieldInt14691;
+    public int fieldInt14692;
+    public int fieldInt14693;
+    public int fieldInt14694;
+    public int fieldInt14695;
+    public int fieldInt14696;
+    public int fieldInt14697;
+    public int fieldInt14698;
+    public int fieldInt14699;
+    public int fieldInt14700;
+    public int fieldInt14701;
+    public int fieldInt14702;
+    public int fieldInt14703;
+    public int fieldInt14704;
+    public int fieldInt14705;
+    public int fieldInt14706;
+    public int fieldInt14707;
+    public int fieldInt14708;
+    public int fieldInt14709;
+    public int fieldInt14710;
+    public int fieldInt14711;
+    public int fieldInt14712;
+    public int fieldInt14713;
+    public int fieldInt14714;
+    public int fieldInt14715;
+    public int fieldInt14716;
+    public int fieldInt14717;
+    public int fieldInt14718;
+    public int fieldInt14719;
+    public int fieldInt14720;
+    public int fieldInt14721;
+    public int fieldInt14722;
+    public int fieldInt14723;
+    public int fieldInt14724;
+    public int fieldInt14725;
+    public int fieldInt14726;
+    public int fieldInt14727;
+    public int fieldInt14728;
+    public int fieldInt14729;
+    public int fieldInt14730;
+    public int fieldInt14731;
+    public int fieldInt14732;
+    public int fieldInt14733;
+    public int fieldInt14734;
+    public int fieldInt14735;
+    public int fieldInt14736;
+    public int fieldInt14737;
+    public int fieldInt14738;
+    public int fieldInt14739;
+    public int fieldInt14740;
+    public int fieldInt14741;
+    public int fieldInt14742;
+    public int fieldInt14743;
+    public int fieldInt14744;
+    public int fieldInt14745;
+    public int fieldInt14746;
+    public int fieldInt14747;
+    public int fieldInt14748;
+    public int fieldInt14749;
+    public int fieldInt14750;
+    public int fieldInt14751;
+    public int fieldInt14752;
+    public int fieldInt14753;
+    public int fieldInt14754;
+    public int fieldInt14755;
+    public int fieldInt14756;
+    public int fieldInt14757;
+    public int fieldInt14758;
+    public int fieldInt14759;
+    public int fieldInt14760;
+    public int fieldInt14761;
+    public int fieldInt14762;
+    public int fieldInt14763;
+    public int fieldInt14764;
+    public int fieldInt14765;
+    public int fieldInt14766;
+    public int fieldInt14767;
+    public int fieldInt14768;
+    public int fieldInt14769;
+    public int fieldInt14770;
+    public int fieldInt14771;
+    public int fieldInt14772;
+    public int fieldInt14773;
+    public int fieldInt14774;
+    public int fieldInt14775;
+    public int fieldInt14776;
+    public int fieldInt14777;
+    public int fieldInt14778;
+    public int fieldInt14779;
+    public int fieldInt14780;
+    public int fieldInt14781;
+    public int fieldInt14782;
+    public int fieldInt14783;
+    public int fieldInt14784;
+    public int fieldInt14785;
+    public int fieldInt14786;
+    public int fieldInt14787;
+    public int fieldInt14788;
+    public int fieldInt14789;
+    public int fieldInt14790;
+    public int fieldInt14791;
+    public int fieldInt14792;
+    public int fieldInt14793;
+    public int fieldInt14794;
+    public int fieldInt14795;
+    public int fieldInt14796;
+    public int fieldInt14797;
+    public int fieldInt14798;
+    public int fieldInt14799;
+    public int fieldInt14800;
+    public int fieldInt14801;
+    public int fieldInt14802;
+    public int fieldInt14803;
+    public int fieldInt14804;
+    public int fieldInt14805;
+    public int fieldInt14806;
+    public int fieldInt14807;
+    public int fieldInt14808;
+    public int fieldInt14809;
+    public int fieldInt14810;
+    public int fieldInt14811;
+    public int fieldInt14812;
+    public int fieldInt14813;
+    public int fieldInt14814;
+    public int fieldInt14815;
+    public int fieldInt14816;
+    public int fieldInt14817;
+    public int fieldInt14818;
+    public int fieldInt14819;
+    public int fieldInt14820;
+    public int fieldInt14821;
+    public int fieldInt14822;
+    public int fieldInt14823;
+    public int fieldInt14824;
+    public int fieldInt14825;
+    public int fieldInt14826;
+    public int fieldInt14827;
+    public int fieldInt14828;
+    public int fieldInt14829;
+    public int fieldInt14830;
+    public int fieldInt14831;
+    public int fieldInt14832;
+    public int fieldInt14833;
+    public int fieldInt14834;
+    public int fieldInt14835;
+    public int fieldInt14836;
+    public int fieldInt14837;
+    public int fieldInt14838;
+    public int fieldInt14839;
+    public int fieldInt14840;
+    public int fieldInt14841;
+    public int fieldInt14842;
+    public int fieldInt14843;
+    public int fieldInt14844;
+    public int fieldInt14845;
+    public int fieldInt14846;
+    public int fieldInt14847;
+    public int fieldInt14848;
+    public int fieldInt14849;
+    public int fieldInt14850;
+    public int fieldInt14851;
+    public int fieldInt14852;
+    public int fieldInt14853;
+    public int fieldInt14854;
+    public int fieldInt14855;
+    public int fieldInt14856;
+    public int fieldInt14857;
+    public int fieldInt14858;
+    public int fieldInt14859;
+    public int fieldInt14860;
+    public int fieldInt14861;
+    public int fieldInt14862;
+    public int fieldInt14863;
+    public int fieldInt14864;
+    public int fieldInt14865;
+    public int fieldInt14866;
+    public int fieldInt14867;
+    public int fieldInt14868;
+    public int fieldInt14869;
+    public int fieldInt14870;
+    public int fieldInt14871;
+    public int fieldInt14872;
+    public int fieldInt14873;
+    public int fieldInt14874;
+    public int fieldInt14875;
+    public int fieldInt14876;
+    public int fieldInt14877;
+    public int fieldInt14878;
+    public int fieldInt14879;
+    public int fieldInt14880;
+    public int fieldInt14881;
+    public int fieldInt14882;
+    public int fieldInt14883;
+    public int fieldInt14884;
+    public int fieldInt14885;
+    public int fieldInt14886;
+    public int fieldInt14887;
+    public int fieldInt14888;
+    public int fieldInt14889;
+    public int fieldInt14890;
+    public int fieldInt14891;
+    public int fieldInt14892;
+    public int fieldInt14893;
+    public int fieldInt14894;
+    public int fieldInt14895;
+    public int fieldInt14896;
+    public int fieldInt14897;
+    public int fieldInt14898;
+    public int fieldInt14899;
+    public int fieldInt14900;
+    public int fieldInt14901;
+    public int fieldInt14902;
+    public int fieldInt14903;
+    public int fieldInt14904;
+    public int fieldInt14905;
+    public int fieldInt14906;
+    public int fieldInt14907;
+    public int fieldInt14908;
+    public int fieldInt14909;
+    public int fieldInt14910;
+    public int fieldInt14911;
+    public int fieldInt14912;
+    public int fieldInt14913;
+    public int fieldInt14914;
+    public int fieldInt14915;
+    public int fieldInt14916;
+    public int fieldInt14917;
+    public int fieldInt14918;
+    public int fieldInt14919;
+    public int fieldInt14920;
+    public int fieldInt14921;
+    public int fieldInt14922;
+    public int fieldInt14923;
+    public int fieldInt14924;
+    public int fieldInt14925;
+    public int fieldInt14926;
+    public int fieldInt14927;
+    public int fieldInt14928;
+    public int fieldInt14929;
+    public int fieldInt14930;
+    public int fieldInt14931;
+    public int fieldInt14932;
+    public int fieldInt14933;
+    public int fieldInt14934;
+    public int fieldInt14935;
+    public int fieldInt14936;
+    public int fieldInt14937;
+    public int fieldInt14938;
+    public int fieldInt14939;
+    public int fieldInt14940;
+    public int fieldInt14941;
+    public int fieldInt14942;
+    public int fieldInt14943;
+    public int fieldInt14944;
+    public int fieldInt14945;
+    public int fieldInt14946;
+    public int fieldInt14947;
+    public int fieldInt14948;
+    public int fieldInt14949;
+    public int fieldInt14950;
+    public int fieldInt14951;
+    public int fieldInt14952;
+    public int fieldInt14953;
+    public int fieldInt14954;
+    public int fieldInt14955;
+    public int fieldInt14956;
+    public int fieldInt14957;
+    public int fieldInt14958;
+    public int fieldInt14959;
+    public int fieldInt14960;
+    public int fieldInt14961;
+    public int fieldInt14962;
+    public int fieldInt14963;
+    public int fieldInt14964;
+    public int fieldInt14965;
+    public int fieldInt14966;
+    public int fieldInt14967;
+    public int fieldInt14968;
+    public int fieldInt14969;
+    public int fieldInt14970;
+    public int fieldInt14971;
+    public int fieldInt14972;
+    public int fieldInt14973;
+    public int fieldInt14974;
+    public int fieldInt14975;
+    public int fieldInt14976;
+    public int fieldInt14977;
+    public int fieldInt14978;
+    public int fieldInt14979;
+    public int fieldInt14980;
+    public int fieldInt14981;
+    public int fieldInt14982;
+    public int fieldInt14983;
+    public int fieldInt14984;
+    public int fieldInt14985;
+    public int fieldInt14986;
+    public int fieldInt14987;
+    public int fieldInt14988;
+    public int fieldInt14989;
+    public int fieldInt14990;
+    public int fieldInt14991;
+    public int fieldInt14992;
+    public int fieldInt14993;
+    public int fieldInt14994;
+    public int fieldInt14995;
+    public int fieldInt14996;
+    public int fieldInt14997;
+    public int fieldInt14998;
+    public int fieldInt14999;
+    public int fieldInt15000;
+    public int fieldInt15001;
+    public int fieldInt15002;
+    public int fieldInt15003;
+    public int fieldInt15004;
+    public int fieldInt15005;
+    public int fieldInt15006;
+    public int fieldInt15007;
+    public int fieldInt15008;
+    public int fieldInt15009;
+    public int fieldInt15010;
+    public int fieldInt15011;
+    public int fieldInt15012;
+    public int fieldInt15013;
+    public int fieldInt15014;
+    public int fieldInt15015;
+    public int fieldInt15016;
+    public int fieldInt15017;
+    public int fieldInt15018;
+    public int fieldInt15019;
+    public int fieldInt15020;
+    public int fieldInt15021;
+    public int fieldInt15022;
+    public int fieldInt15023;
+    public int fieldInt15024;
+    public int fieldInt15025;
+    public int fieldInt15026;
+    public int fieldInt15027;
+    public int fieldInt15028;
+    public int fieldInt15029;
+    public int fieldInt15030;
+    public int fieldInt15031;
+    public int fieldInt15032;
+    public int fieldInt15033;
+    public int fieldInt15034;
+    public int fieldInt15035;
+    public int fieldInt15036;
+    public int fieldInt15037;
+    public int fieldInt15038;
+    public int fieldInt15039;
+    public int fieldInt15040;
+    public int fieldInt15041;
+    public int fieldInt15042;
+    public int fieldInt15043;
+    public int fieldInt15044;
+    public int fieldInt15045;
+    public int fieldInt15046;
+    public int fieldInt15047;
+    public int fieldInt15048;
+    public int fieldInt15049;
+    public int fieldInt15050;
+    public int fieldInt15051;
+    public int fieldInt15052;
+    public int fieldInt15053;
+    public int fieldInt15054;
+    public int fieldInt15055;
+    public int fieldInt15056;
+    public int fieldInt15057;
+    public int fieldInt15058;
+    public int fieldInt15059;
+    public int fieldInt15060;
+    public int fieldInt15061;
+    public int fieldInt15062;
+    public int fieldInt15063;
+    public int fieldInt15064;
+    public int fieldInt15065;
+    public int fieldInt15066;
+    public int fieldInt15067;
+    public int fieldInt15068;
+    public int fieldInt15069;
+    public int fieldInt15070;
+    public int fieldInt15071;
+    public int fieldInt15072;
+    public int fieldInt15073;
+    public int fieldInt15074;
+    public int fieldInt15075;
+    public int fieldInt15076;
+    public int fieldInt15077;
+    public int fieldInt15078;
+    public int fieldInt15079;
+    public int fieldInt15080;
+    public int fieldInt15081;
+    public int fieldInt15082;
+    public int fieldInt15083;
+    public int fieldInt15084;
+    public int fieldInt15085;
+    public int fieldInt15086;
+    public int fieldInt15087;
+    public int fieldInt15088;
+    public int fieldInt15089;
+    public int fieldInt15090;
+    public int fieldInt15091;
+    public int fieldInt15092;
+    public int fieldInt15093;
+    public int fieldInt15094;
+    public int fieldInt15095;
+    public int fieldInt15096;
+    public int fieldInt15097;
+    public int fieldInt15098;
+    public int fieldInt15099;
+    public int fieldInt15100;
+    public int fieldInt15101;
+    public int fieldInt15102;
+    public int fieldInt15103;
+    public int fieldInt15104;
+    public int fieldInt15105;
+    public int fieldInt15106;
+    public int fieldInt15107;
+    public int fieldInt15108;
+    public int fieldInt15109;
+    public int fieldInt15110;
+    public int fieldInt15111;
+    public int fieldInt15112;
+    public int fieldInt15113;
+    public int fieldInt15114;
+    public int fieldInt15115;
+    public int fieldInt15116;
+    public int fieldInt15117;
+    public int fieldInt15118;
+    public int fieldInt15119;
+    public int fieldInt15120;
+    public int fieldInt15121;
+    public int fieldInt15122;
+    public int fieldInt15123;
+    public int fieldInt15124;
+    public int fieldInt15125;
+    public int fieldInt15126;
+    public int fieldInt15127;
+    public int fieldInt15128;
+    public int fieldInt15129;
+    public int fieldInt15130;
+    public int fieldInt15131;
+    public int fieldInt15132;
+    public int fieldInt15133;
+    public int fieldInt15134;
+    public int fieldInt15135;
+    public int fieldInt15136;
+    public int fieldInt15137;
+    public int fieldInt15138;
+    public int fieldInt15139;
+    public int fieldInt15140;
+    public int fieldInt15141;
+    public int fieldInt15142;
+    public int fieldInt15143;
+    public int fieldInt15144;
+    public int fieldInt15145;
+    public int fieldInt15146;
+    public int fieldInt15147;
+    public int fieldInt15148;
+    public int fieldInt15149;
+    public int fieldInt15150;
+    public int fieldInt15151;
+    public int fieldInt15152;
+    public int fieldInt15153;
+    public int fieldInt15154;
+    public int fieldInt15155;
+    public int fieldInt15156;
+    public int fieldInt15157;
+    public int fieldInt15158;
+    public int fieldInt15159;
+    public int fieldInt15160;
+    public int fieldInt15161;
+    public int fieldInt15162;
+    public int fieldInt15163;
+    public int fieldInt15164;
+    public int fieldInt15165;
+    public int fieldInt15166;
+    public int fieldInt15167;
+    public int fieldInt15168;
+    public int fieldInt15169;
+    public int fieldInt15170;
+    public int fieldInt15171;
+    public int fieldInt15172;
+    public int fieldInt15173;
+    public int fieldInt15174;
+    public int fieldInt15175;
+    public int fieldInt15176;
+    public int fieldInt15177;
+    public int fieldInt15178;
+    public int fieldInt15179;
+    public int fieldInt15180;
+    public int fieldInt15181;
+    public int fieldInt15182;
+    public int fieldInt15183;
+    public int fieldInt15184;
+    public int fieldInt15185;
+    public int fieldInt15186;
+    public int fieldInt15187;
+    public int fieldInt15188;
+    public int fieldInt15189;
+    public int fieldInt15190;
+    public int fieldInt15191;
+    public int fieldInt15192;
+    public int fieldInt15193;
+    public int fieldInt15194;
+    public int fieldInt15195;
+    public int fieldInt15196;
+    public int fieldInt15197;
+    public int fieldInt15198;
+    public int fieldInt15199;
+    public int fieldInt15200;
+    public int fieldInt15201;
+    public int fieldInt15202;
+    public int fieldInt15203;
+    public int fieldInt15204;
+    public int fieldInt15205;
+    public int fieldInt15206;
+    public int fieldInt15207;
+    public int fieldInt15208;
+    public int fieldInt15209;
+    public int fieldInt15210;
+    public int fieldInt15211;
+    public int fieldInt15212;
+    public int fieldInt15213;
+    public int fieldInt15214;
+    public int fieldInt15215;
+    public int fieldInt15216;
+    public int fieldInt15217;
+    public int fieldInt15218;
+    public int fieldInt15219;
+    public int fieldInt15220;
+    public int fieldInt15221;
+    public int fieldInt15222;
+    public int fieldInt15223;
+    public int fieldInt15224;
+    public int fieldInt15225;
+    public int fieldInt15226;
+    public int fieldInt15227;
+    public int fieldInt15228;
+    public int fieldInt15229;
+    public int fieldInt15230;
+    public int fieldInt15231;
+    public int fieldInt15232;
+    public int fieldInt15233;
+    public int fieldInt15234;
+    public int fieldInt15235;
+    public int fieldInt15236;
+    public int fieldInt15237;
+    public int fieldInt15238;
+    public int fieldInt15239;
+    public int fieldInt15240;
+    public int fieldInt15241;
+    public int fieldInt15242;
+    public int fieldInt15243;
+    public int fieldInt15244;
+    public int fieldInt15245;
+    public int fieldInt15246;
+    public int fieldInt15247;
+    public int fieldInt15248;
+    public int fieldInt15249;
+    public int fieldInt15250;
+    public int fieldInt15251;
+    public int fieldInt15252;
+    public int fieldInt15253;
+    public int fieldInt15254;
+    public int fieldInt15255;
+    public int fieldInt15256;
+    public int fieldInt15257;
+    public int fieldInt15258;
+    public int fieldInt15259;
+    public int fieldInt15260;
+    public int fieldInt15261;
+    public int fieldInt15262;
+    public int fieldInt15263;
+    public int fieldInt15264;
+    public int fieldInt15265;
+    public int fieldInt15266;
+    public int fieldInt15267;
+    public int fieldInt15268;
+    public int fieldInt15269;
+    public int fieldInt15270;
+    public int fieldInt15271;
+    public int fieldInt15272;
+    public int fieldInt15273;
+    public int fieldInt15274;
+    public int fieldInt15275;
+    public int fieldInt15276;
+    public int fieldInt15277;
+    public int fieldInt15278;
+    public int fieldInt15279;
+    public int fieldInt15280;
+    public int fieldInt15281;
+    public int fieldInt15282;
+    public int fieldInt15283;
+    public int fieldInt15284;
+    public int fieldInt15285;
+    public int fieldInt15286;
+    public int fieldInt15287;
+    public int fieldInt15288;
+    public int fieldInt15289;
+    public int fieldInt15290;
+    public int fieldInt15291;
+    public int fieldInt15292;
+    public int fieldInt15293;
+    public int fieldInt15294;
+    public int fieldInt15295;
+    public int fieldInt15296;
+    public int fieldInt15297;
+    public int fieldInt15298;
+    public int fieldInt15299;
+    public int fieldInt15300;
+    public int fieldInt15301;
+    public int fieldInt15302;
+    public int fieldInt15303;
+    public int fieldInt15304;
+    public int fieldInt15305;
+    public int fieldInt15306;
+    public int fieldInt15307;
+    public int fieldInt15308;
+    public int fieldInt15309;
+    public int fieldInt15310;
+    public int fieldInt15311;
+    public int fieldInt15312;
+    public int fieldInt15313;
+    public int fieldInt15314;
+    public int fieldInt15315;
+    public int fieldInt15316;
+    public int fieldInt15317;
+    public int fieldInt15318;
+    public int fieldInt15319;
+    public int fieldInt15320;
+    public int fieldInt15321;
+    public int fieldInt15322;
+    public int fieldInt15323;
+    public int fieldInt15324;
+    public int fieldInt15325;
+    public int fieldInt15326;
+    public int fieldInt15327;
+    public int fieldInt15328;
+    public int fieldInt15329;
+    public int fieldInt15330;
+    public int fieldInt15331;
+    public int fieldInt15332;
+    public int fieldInt15333;
+    public int fieldInt15334;
+    public int fieldInt15335;
+    public int fieldInt15336;
+    public int fieldInt15337;
+    public int fieldInt15338;
+    public int fieldInt15339;
+    public int fieldInt15340;
+    public int fieldInt15341;
+    public int fieldInt15342;
+    public int fieldInt15343;
+    public int fieldInt15344;
+    public int fieldInt15345;
+    public int fieldInt15346;
+    public int fieldInt15347;
+    public int fieldInt15348;
+    public int fieldInt15349;
+    public int fieldInt15350;
+    public int fieldInt15351;
+    public int fieldInt15352;
+    public int fieldInt15353;
+    public int fieldInt15354;
+    public int fieldInt15355;
+    public int fieldInt15356;
+    public int fieldInt15357;
+    public int fieldInt15358;
+    public int fieldInt15359;
+    public int fieldInt15360;
+    public int fieldInt15361;
+    public int fieldInt15362;
+    public int fieldInt15363;
+    public int fieldInt15364;
+    public int fieldInt15365;
+    public int fieldInt15366;
+    public int fieldInt15367;
+    public int fieldInt15368;
+    public int fieldInt15369;
+    public int fieldInt15370;
+    public int fieldInt15371;
+    public int fieldInt15372;
+    public int fieldInt15373;
+    public int fieldInt15374;
+    public int fieldInt15375;
+    public int fieldInt15376;
+    public int fieldInt15377;
+    public int fieldInt15378;
+    public int fieldInt15379;
+    public int fieldInt15380;
+    public int fieldInt15381;
+    public int fieldInt15382;
+    public int fieldInt15383;
+    public int fieldInt15384;
+    public int fieldInt15385;
+    public int fieldInt15386;
+    public int fieldInt15387;
+    public int fieldInt15388;
+    public int fieldInt15389;
+    public int fieldInt15390;
+    public int fieldInt15391;
+    public int fieldInt15392;
+    public int fieldInt15393;
+    public int fieldInt15394;
+    public int fieldInt15395;
+    public int fieldInt15396;
+    public int fieldInt15397;
+    public int fieldInt15398;
+    public int fieldInt15399;
+    public int fieldInt15400;
+    public int fieldInt15401;
+    public int fieldInt15402;
+    public int fieldInt15403;
+    public int fieldInt15404;
+    public int fieldInt15405;
+    public int fieldInt15406;
+    public int fieldInt15407;
+    public int fieldInt15408;
+    public int fieldInt15409;
+    public int fieldInt15410;
+    public int fieldInt15411;
+    public int fieldInt15412;
+    public int fieldInt15413;
+    public int fieldInt15414;
+    public int fieldInt15415;
+    public int fieldInt15416;
+    public int fieldInt15417;
+    public int fieldInt15418;
+    public int fieldInt15419;
+    public int fieldInt15420;
+    public int fieldInt15421;
+    public int fieldInt15422;
+    public int fieldInt15423;
+    public int fieldInt15424;
+    public int fieldInt15425;
+    public int fieldInt15426;
+    public int fieldInt15427;
+    public int fieldInt15428;
+    public int fieldInt15429;
+    public int fieldInt15430;
+    public int fieldInt15431;
+    public int fieldInt15432;
+    public int fieldInt15433;
+    public int fieldInt15434;
+    public int fieldInt15435;
+    public int fieldInt15436;
+    public int fieldInt15437;
+    public int fieldInt15438;
+    public int fieldInt15439;
+    public int fieldInt15440;
+    public int fieldInt15441;
+    public int fieldInt15442;
+    public int fieldInt15443;
+    public int fieldInt15444;
+    public int fieldInt15445;
+    public int fieldInt15446;
+    public int fieldInt15447;
+    public int fieldInt15448;
+    public int fieldInt15449;
+    public int fieldInt15450;
+    public int fieldInt15451;
+    public int fieldInt15452;
+    public int fieldInt15453;
+    public int fieldInt15454;
+    public int fieldInt15455;
+    public int fieldInt15456;
+    public int fieldInt15457;
+    public int fieldInt15458;
+    public int fieldInt15459;
+    public int fieldInt15460;
+    public int fieldInt15461;
+    public int fieldInt15462;
+    public int fieldInt15463;
+    public int fieldInt15464;
+    public int fieldInt15465;
+    public int fieldInt15466;
+    public int fieldInt15467;
+    public int fieldInt15468;
+    public int fieldInt15469;
+    public int fieldInt15470;
+    public int fieldInt15471;
+    public int fieldInt15472;
+    public int fieldInt15473;
+    public int fieldInt15474;
+    public int fieldInt15475;
+    public int fieldInt15476;
+    public int fieldInt15477;
+    public int fieldInt15478;
+    public int fieldInt15479;
+    public int fieldInt15480;
+    public int fieldInt15481;
+    public int fieldInt15482;
+    public int fieldInt15483;
+    public int fieldInt15484;
+    public int fieldInt15485;
+    public int fieldInt15486;
+    public int fieldInt15487;
+    public int fieldInt15488;
+    public int fieldInt15489;
+    public int fieldInt15490;
+    public int fieldInt15491;
+    public int fieldInt15492;
+    public int fieldInt15493;
+    public int fieldInt15494;
+    public int fieldInt15495;
+    public int fieldInt15496;
+    public int fieldInt15497;
+    public int fieldInt15498;
+    public int fieldInt15499;
+    public int fieldInt15500;
+    public int fieldInt15501;
+    public int fieldInt15502;
+    public int fieldInt15503;
+    public int fieldInt15504;
+    public int fieldInt15505;
+    public int fieldInt15506;
+    public int fieldInt15507;
+    public int fieldInt15508;
+    public int fieldInt15509;
+    public int fieldInt15510;
+    public int fieldInt15511;
+    public int fieldInt15512;
+    public int fieldInt15513;
+    public int fieldInt15514;
+    public int fieldInt15515;
+    public int fieldInt15516;
+    public int fieldInt15517;
+    public int fieldInt15518;
+    public int fieldInt15519;
+    public int fieldInt15520;
+    public int fieldInt15521;
+    public int fieldInt15522;
+    public int fieldInt15523;
+    public int fieldInt15524;
+    public int fieldInt15525;
+    public int fieldInt15526;
+    public int fieldInt15527;
+    public int fieldInt15528;
+    public int fieldInt15529;
+    public int fieldInt15530;
+    public int fieldInt15531;
+    public int fieldInt15532;
+    public int fieldInt15533;
+    public int fieldInt15534;
+    public int fieldInt15535;
+    public int fieldInt15536;
+    public int fieldInt15537;
+    public int fieldInt15538;
+    public int fieldInt15539;
+    public int fieldInt15540;
+    public int fieldInt15541;
+    public int fieldInt15542;
+    public int fieldInt15543;
+    public int fieldInt15544;
+    public int fieldInt15545;
+    public int fieldInt15546;
+    public int fieldInt15547;
+    public int fieldInt15548;
+    public int fieldInt15549;
+    public int fieldInt15550;
+    public int fieldInt15551;
+    public int fieldInt15552;
+    public int fieldInt15553;
+    public int fieldInt15554;
+    public int fieldInt15555;
+    public int fieldInt15556;
+    public int fieldInt15557;
+    public int fieldInt15558;
+    public int fieldInt15559;
+    public int fieldInt15560;
+    public int fieldInt15561;
+    public int fieldInt15562;
+    public int fieldInt15563;
+    public int fieldInt15564;
+    public int fieldInt15565;
+    public int fieldInt15566;
+    public int fieldInt15567;
+    public int fieldInt15568;
+    public int fieldInt15569;
+    public int fieldInt15570;
+    public int fieldInt15571;
+    public int fieldInt15572;
+    public int fieldInt15573;
+    public int fieldInt15574;
+    public int fieldInt15575;
+    public int fieldInt15576;
+    public int fieldInt15577;
+    public int fieldInt15578;
+    public int fieldInt15579;
+    public int fieldInt15580;
+    public int fieldInt15581;
+    public int fieldInt15582;
+    public int fieldInt15583;
+    public int fieldInt15584;
+    public int fieldInt15585;
+    public int fieldInt15586;
+    public int fieldInt15587;
+    public int fieldInt15588;
+    public int fieldInt15589;
+    public int fieldInt15590;
+    public int fieldInt15591;
+    public int fieldInt15592;
+    public int fieldInt15593;
+    public int fieldInt15594;
+    public int fieldInt15595;
+    public int fieldInt15596;
+    public int fieldInt15597;
+    public int fieldInt15598;
+    public int fieldInt15599;
+    public int fieldInt15600;
+    public int fieldInt15601;
+    public int fieldInt15602;
+    public int fieldInt15603;
+    public int fieldInt15604;
+    public int fieldInt15605;
+    public int fieldInt15606;
+    public int fieldInt15607;
+    public int fieldInt15608;
+    public int fieldInt15609;
+    public int fieldInt15610;
+    public int fieldInt15611;
+    public int fieldInt15612;
+    public int fieldInt15613;
+    public int fieldInt15614;
+    public int fieldInt15615;
+    public int fieldInt15616;
+    public int fieldInt15617;
+    public int fieldInt15618;
+    public int fieldInt15619;
+    public int fieldInt15620;
+    public int fieldInt15621;
+    public int fieldInt15622;
+    public int fieldInt15623;
+    public int fieldInt15624;
+    public int fieldInt15625;
+    public int fieldInt15626;
+    public int fieldInt15627;
+    public int fieldInt15628;
+    public int fieldInt15629;
+    public int fieldInt15630;
+    public int fieldInt15631;
+    public int fieldInt15632;
+    public int fieldInt15633;
+    public int fieldInt15634;
+    public int fieldInt15635;
+    public int fieldInt15636;
+    public int fieldInt15637;
+    public int fieldInt15638;
+    public int fieldInt15639;
+    public int fieldInt15640;
+    public int fieldInt15641;
+    public int fieldInt15642;
+    public int fieldInt15643;
+    public int fieldInt15644;
+    public int fieldInt15645;
+    public int fieldInt15646;
+    public int fieldInt15647;
+    public int fieldInt15648;
+    public int fieldInt15649;
+    public int fieldInt15650;
+    public int fieldInt15651;
+    public int fieldInt15652;
+    public int fieldInt15653;
+    public int fieldInt15654;
+    public int fieldInt15655;
+    public int fieldInt15656;
+    public int fieldInt15657;
+    public int fieldInt15658;
+    public int fieldInt15659;
+    public int fieldInt15660;
+    public int fieldInt15661;
+    public int fieldInt15662;
+    public int fieldInt15663;
+    public int fieldInt15664;
+    public int fieldInt15665;
+    public int fieldInt15666;
+    public int fieldInt15667;
+    public int fieldInt15668;
+    public int fieldInt15669;
+    public int fieldInt15670;
+    public int fieldInt15671;
+    public int fieldInt15672;
+    public int fieldInt15673;
+    public int fieldInt15674;
+    public int fieldInt15675;
+    public int fieldInt15676;
+    public int fieldInt15677;
+    public int fieldInt15678;
+    public int fieldInt15679;
+    public int fieldInt15680;
+    public int fieldInt15681;
+    public int fieldInt15682;
+    public int fieldInt15683;
+    public int fieldInt15684;
+    public int fieldInt15685;
+    public int fieldInt15686;
+    public int fieldInt15687;
+    public int fieldInt15688;
+    public int fieldInt15689;
+    public int fieldInt15690;
+    public int fieldInt15691;
+    public int fieldInt15692;
+    public int fieldInt15693;
+    public int fieldInt15694;
+    public int fieldInt15695;
+    public int fieldInt15696;
+    public int fieldInt15697;
+    public int fieldInt15698;
+    public int fieldInt15699;
+    public int fieldInt15700;
+    public int fieldInt15701;
+    public int fieldInt15702;
+    public int fieldInt15703;
+    public int fieldInt15704;
+    public int fieldInt15705;
+    public int fieldInt15706;
+    public int fieldInt15707;
+    public int fieldInt15708;
+    public int fieldInt15709;
+    public int fieldInt15710;
+    public int fieldInt15711;
+    public int fieldInt15712;
+    public int fieldInt15713;
+    public int fieldInt15714;
+    public int fieldInt15715;
+    public int fieldInt15716;
+    public int fieldInt15717;
+    public int fieldInt15718;
+    public int fieldInt15719;
+    public int fieldInt15720;
+    public int fieldInt15721;
+    public int fieldInt15722;
+    public int fieldInt15723;
+    public int fieldInt15724;
+    public int fieldInt15725;
+    public int fieldInt15726;
+    public int fieldInt15727;
+    public int fieldInt15728;
+    public int fieldInt15729;
+    public int fieldInt15730;
+    public int fieldInt15731;
+    public int fieldInt15732;
+    public int fieldInt15733;
+    public int fieldInt15734;
+    public int fieldInt15735;
+    public int fieldInt15736;
+    public int fieldInt15737;
+    public int fieldInt15738;
+    public int fieldInt15739;
+    public int fieldInt15740;
+    public int fieldInt15741;
+    public int fieldInt15742;
+    public int fieldInt15743;
+    public int fieldInt15744;
+    public int fieldInt15745;
+    public int fieldInt15746;
+    public int fieldInt15747;
+    public int fieldInt15748;
+    public int fieldInt15749;
+    public int fieldInt15750;
+    public int fieldInt15751;
+    public int fieldInt15752;
+    public int fieldInt15753;
+    public int fieldInt15754;
+    public int fieldInt15755;
+    public int fieldInt15756;
+    public int fieldInt15757;
+    public int fieldInt15758;
+    public int fieldInt15759;
+    public int fieldInt15760;
+    public int fieldInt15761;
+    public int fieldInt15762;
+    public int fieldInt15763;
+    public int fieldInt15764;
+    public int fieldInt15765;
+    public int fieldInt15766;
+    public int fieldInt15767;
+    public int fieldInt15768;
+    public int fieldInt15769;
+    public int fieldInt15770;
+    public int fieldInt15771;
+    public int fieldInt15772;
+    public int fieldInt15773;
+    public int fieldInt15774;
+    public int fieldInt15775;
+    public int fieldInt15776;
+    public int fieldInt15777;
+    public int fieldInt15778;
+    public int fieldInt15779;
+    public int fieldInt15780;
+    public int fieldInt15781;
+    public int fieldInt15782;
+    public int fieldInt15783;
+    public int fieldInt15784;
+    public int fieldInt15785;
+    public int fieldInt15786;
+    public int fieldInt15787;
+    public int fieldInt15788;
+    public int fieldInt15789;
+    public int fieldInt15790;
+    public int fieldInt15791;
+    public int fieldInt15792;
+    public int fieldInt15793;
+    public int fieldInt15794;
+    public int fieldInt15795;
+    public int fieldInt15796;
+    public int fieldInt15797;
+    public int fieldInt15798;
+    public int fieldInt15799;
+    public int fieldInt15800;
+    public int fieldInt15801;
+    public int fieldInt15802;
+    public int fieldInt15803;
+    public int fieldInt15804;
+    public int fieldInt15805;
+    public int fieldInt15806;
+    public int fieldInt15807;
+    public int fieldInt15808;
+    public int fieldInt15809;
+    public int fieldInt15810;
+    public int fieldInt15811;
+    public int fieldInt15812;
+    public int fieldInt15813;
+    public int fieldInt15814;
+    public int fieldInt15815;
+    public int fieldInt15816;
+    public int fieldInt15817;
+    public int fieldInt15818;
+    public int fieldInt15819;
+    public int fieldInt15820;
+    public int fieldInt15821;
+    public int fieldInt15822;
+    public int fieldInt15823;
+    public int fieldInt15824;
+    public int fieldInt15825;
+    public int fieldInt15826;
+    public int fieldInt15827;
+    public int fieldInt15828;
+    public int fieldInt15829;
+    public int fieldInt15830;
+    public int fieldInt15831;
+    public int fieldInt15832;
+    public int fieldInt15833;
+    public int fieldInt15834;
+    public int fieldInt15835;
+    public int fieldInt15836;
+    public int fieldInt15837;
+    public int fieldInt15838;
+    public int fieldInt15839;
+    public int fieldInt15840;
+    public int fieldInt15841;
+    public int fieldInt15842;
+    public int fieldInt15843;
+    public int fieldInt15844;
+    public int fieldInt15845;
+    public int fieldInt15846;
+    public int fieldInt15847;
+    public int fieldInt15848;
+    public int fieldInt15849;
+    public int fieldInt15850;
+    public int fieldInt15851;
+    public int fieldInt15852;
+    public int fieldInt15853;
+    public int fieldInt15854;
+    public int fieldInt15855;
+    public int fieldInt15856;
+    public int fieldInt15857;
+    public int fieldInt15858;
+    public int fieldInt15859;
+    public int fieldInt15860;
+    public int fieldInt15861;
+    public int fieldInt15862;
+    public int fieldInt15863;
+    public int fieldInt15864;
+    public int fieldInt15865;
+    public int fieldInt15866;
+    public int fieldInt15867;
+    public int fieldInt15868;
+    public int fieldInt15869;
+    public int fieldInt15870;
+    public int fieldInt15871;
+    public int fieldInt15872;
+    public int fieldInt15873;
+    public int fieldInt15874;
+    public int fieldInt15875;
+    public int fieldInt15876;
+    public int fieldInt15877;
+    public int fieldInt15878;
+    public int fieldInt15879;
+    public int fieldInt15880;
+    public int fieldInt15881;
+    public int fieldInt15882;
+    public int fieldInt15883;
+    public int fieldInt15884;
+    public int fieldInt15885;
+    public int fieldInt15886;
+    public int fieldInt15887;
+    public int fieldInt15888;
+    public int fieldInt15889;
+    public int fieldInt15890;
+    public int fieldInt15891;
+    public int fieldInt15892;
+    public int fieldInt15893;
+    public int fieldInt15894;
+    public int fieldInt15895;
+    public int fieldInt15896;
+    public int fieldInt15897;
+    public int fieldInt15898;
+    public int fieldInt15899;
+    public int fieldInt15900;
+    public int fieldInt15901;
+    public int fieldInt15902;
+    public int fieldInt15903;
+    public int fieldInt15904;
+    public int fieldInt15905;
+    public int fieldInt15906;
+    public int fieldInt15907;
+    public int fieldInt15908;
+    public int fieldInt15909;
+    public int fieldInt15910;
+    public int fieldInt15911;
+    public int fieldInt15912;
+    public int fieldInt15913;
+    public int fieldInt15914;
+    public int fieldInt15915;
+    public int fieldInt15916;
+    public int fieldInt15917;
+    public int fieldInt15918;
+    public int fieldInt15919;
+    public int fieldInt15920;
+    public int fieldInt15921;
+    public int fieldInt15922;
+    public int fieldInt15923;
+    public int fieldInt15924;
+    public int fieldInt15925;
+    public int fieldInt15926;
+    public int fieldInt15927;
+    public int fieldInt15928;
+    public int fieldInt15929;
+    public int fieldInt15930;
+    public int fieldInt15931;
+    public int fieldInt15932;
+    public int fieldInt15933;
+    public int fieldInt15934;
+    public int fieldInt15935;
+    public int fieldInt15936;
+    public int fieldInt15937;
+    public int fieldInt15938;
+    public int fieldInt15939;
+    public int fieldInt15940;
+    public int fieldInt15941;
+    public int fieldInt15942;
+    public int fieldInt15943;
+    public int fieldInt15944;
+    public int fieldInt15945;
+    public int fieldInt15946;
+    public int fieldInt15947;
+    public int fieldInt15948;
+    public int fieldInt15949;
+    public int fieldInt15950;
+    public int fieldInt15951;
+    public int fieldInt15952;
+    public int fieldInt15953;
+    public int fieldInt15954;
+    public int fieldInt15955;
+    public int fieldInt15956;
+    public int fieldInt15957;
+    public int fieldInt15958;
+    public int fieldInt15959;
+    public int fieldInt15960;
+    public int fieldInt15961;
+    public int fieldInt15962;
+    public int fieldInt15963;
+    public int fieldInt15964;
+    public int fieldInt15965;
+    public int fieldInt15966;
+    public int fieldInt15967;
+    public int fieldInt15968;
+    public int fieldInt15969;
+    public int fieldInt15970;
+    public int fieldInt15971;
+    public int fieldInt15972;
+    public int fieldInt15973;
+    public int fieldInt15974;
+    public int fieldInt15975;
+    public int fieldInt15976;
+    public int fieldInt15977;
+    public int fieldInt15978;
+    public int fieldInt15979;
+    public int fieldInt15980;
+    public int fieldInt15981;
+    public int fieldInt15982;
+    public int fieldInt15983;
+    public int fieldInt15984;
+    public int fieldInt15985;
+    public int fieldInt15986;
+    public int fieldInt15987;
+    public int fieldInt15988;
+    public int fieldInt15989;
+    public int fieldInt15990;
+    public int fieldInt15991;
+    public int fieldInt15992;
+    public int fieldInt15993;
+    public int fieldInt15994;
+    public int fieldInt15995;
+    public int fieldInt15996;
+    public int fieldInt15997;
+    public int fieldInt15998;
+    public int fieldInt15999;
+    public int fieldInt16000;
+    public int fieldInt16001;
+    public int fieldInt16002;
+    public int fieldInt16003;
+    public int fieldInt16004;
+    public int fieldInt16005;
+    public int fieldInt16006;
+    public int fieldInt16007;
+    public int fieldInt16008;
+    public int fieldInt16009;
+    public int fieldInt16010;
+    public int fieldInt16011;
+    public int fieldInt16012;
+    public int fieldInt16013;
+    public int fieldInt16014;
+    public int fieldInt16015;
+    public int fieldInt16016;
+    public int fieldInt16017;
+    public int fieldInt16018;
+    public int fieldInt16019;
+    public int fieldInt16020;
+    public int fieldInt16021;
+    public int fieldInt16022;
+    public int fieldInt16023;
+    public int fieldInt16024;
+    public int fieldInt16025;
+    public int fieldInt16026;
+    public int fieldInt16027;
+    public int fieldInt16028;
+    public int fieldInt16029;
+    public int fieldInt16030;
+    public int fieldInt16031;
+    public int fieldInt16032;
+    public int fieldInt16033;
+    public int fieldInt16034;
+    public int fieldInt16035;
+    public int fieldInt16036;
+    public int fieldInt16037;
+    public int fieldInt16038;
+    public int fieldInt16039;
+    public int fieldInt16040;
+    public int fieldInt16041;
+    public int fieldInt16042;
+    public int fieldInt16043;
+    public int fieldInt16044;
+    public int fieldInt16045;
+    public int fieldInt16046;
+    public int fieldInt16047;
+    public int fieldInt16048;
+    public int fieldInt16049;
+    public int fieldInt16050;
+    public int fieldInt16051;
+    public int fieldInt16052;
+    public int fieldInt16053;
+    public int fieldInt16054;
+    public int fieldInt16055;
+    public int fieldInt16056;
+    public int fieldInt16057;
+    public int fieldInt16058;
+    public int fieldInt16059;
+    public int fieldInt16060;
+    public int fieldInt16061;
+    public int fieldInt16062;
+    public int fieldInt16063;
+    public int fieldInt16064;
+    public int fieldInt16065;
+    public int fieldInt16066;
+    public int fieldInt16067;
+    public int fieldInt16068;
+    public int fieldInt16069;
+    public int fieldInt16070;
+    public int fieldInt16071;
+    public int fieldInt16072;
+    public int fieldInt16073;
+    public int fieldInt16074;
+    public int fieldInt16075;
+    public int fieldInt16076;
+    public int fieldInt16077;
+    public int fieldInt16078;
+    public int fieldInt16079;
+    public int fieldInt16080;
+    public int fieldInt16081;
+    public int fieldInt16082;
+    public int fieldInt16083;
+    public int fieldInt16084;
+    public int fieldInt16085;
+    public int fieldInt16086;
+    public int fieldInt16087;
+    public int fieldInt16088;
+    public int fieldInt16089;
+    public int fieldInt16090;
+    public int fieldInt16091;
+    public int fieldInt16092;
+    public int fieldInt16093;
+    public int fieldInt16094;
+    public int fieldInt16095;
+    public int fieldInt16096;
+    public int fieldInt16097;
+    public int fieldInt16098;
+    public int fieldInt16099;
+    public int fieldInt16100;
+    public int fieldInt16101;
+    public int fieldInt16102;
+    public int fieldInt16103;
+    public int fieldInt16104;
+    public int fieldInt16105;
+    public int fieldInt16106;
+    public int fieldInt16107;
+    public int fieldInt16108;
+    public int fieldInt16109;
+    public int fieldInt16110;
+    public int fieldInt16111;
+    public int fieldInt16112;
+    public int fieldInt16113;
+    public int fieldInt16114;
+    public int fieldInt16115;
+    public int fieldInt16116;
+    public int fieldInt16117;
+    public int fieldInt16118;
+    public int fieldInt16119;
+    public int fieldInt16120;
+    public int fieldInt16121;
+    public int fieldInt16122;
+    public int fieldInt16123;
+    public int fieldInt16124;
+    public int fieldInt16125;
+    public int fieldInt16126;
+    public int fieldInt16127;
+    public int fieldInt16128;
+    public int fieldInt16129;
+    public int fieldInt16130;
+    public int fieldInt16131;
+    public int fieldInt16132;
+    public int fieldInt16133;
+    public int fieldInt16134;
+    public int fieldInt16135;
+    public int fieldInt16136;
+    public int fieldInt16137;
+    public int fieldInt16138;
+    public int fieldInt16139;
+    public int fieldInt16140;
+    public int fieldInt16141;
+    public int fieldInt16142;
+    public int fieldInt16143;
+    public int fieldInt16144;
+    public int fieldInt16145;
+    public int fieldInt16146;
+    public int fieldInt16147;
+    public int fieldInt16148;
+    public int fieldInt16149;
+    public int fieldInt16150;
+    public int fieldInt16151;
+    public int fieldInt16152;
+    public int fieldInt16153;
+    public int fieldInt16154;
+    public int fieldInt16155;
+    public int fieldInt16156;
+    public int fieldInt16157;
+    public int fieldInt16158;
+    public int fieldInt16159;
+    public int fieldInt16160;
+    public int fieldInt16161;
+    public int fieldInt16162;
+    public int fieldInt16163;
+    public int fieldInt16164;
+    public int fieldInt16165;
+    public int fieldInt16166;
+    public int fieldInt16167;
+    public int fieldInt16168;
+    public int fieldInt16169;
+    public int fieldInt16170;
+    public int fieldInt16171;
+    public int fieldInt16172;
+    public int fieldInt16173;
+    public int fieldInt16174;
+    public int fieldInt16175;
+    public int fieldInt16176;
+    public int fieldInt16177;
+    public int fieldInt16178;
+    public int fieldInt16179;
+    public int fieldInt16180;
+    public int fieldInt16181;
+    public int fieldInt16182;
+    public int fieldInt16183;
+    public int fieldInt16184;
+    public int fieldInt16185;
+    public int fieldInt16186;
+    public int fieldInt16187;
+    public int fieldInt16188;
+    public int fieldInt16189;
+    public int fieldInt16190;
+    public int fieldInt16191;
+    public int fieldInt16192;
+    public int fieldInt16193;
+    public int fieldInt16194;
+    public int fieldInt16195;
+    public int fieldInt16196;
+    public int fieldInt16197;
+    public int fieldInt16198;
+    public int fieldInt16199;
+    public int fieldInt16200;
+    public int fieldInt16201;
+    public int fieldInt16202;
+    public int fieldInt16203;
+    public int fieldInt16204;
+    public int fieldInt16205;
+    public int fieldInt16206;
+    public int fieldInt16207;
+    public int fieldInt16208;
+    public int fieldInt16209;
+    public int fieldInt16210;
+    public int fieldInt16211;
+    public int fieldInt16212;
+    public int fieldInt16213;
+    public int fieldInt16214;
+    public int fieldInt16215;
+    public int fieldInt16216;
+    public int fieldInt16217;
+    public int fieldInt16218;
+    public int fieldInt16219;
+    public int fieldInt16220;
+    public int fieldInt16221;
+    public int fieldInt16222;
+    public int fieldInt16223;
+    public int fieldInt16224;
+    public int fieldInt16225;
+    public int fieldInt16226;
+    public int fieldInt16227;
+    public int fieldInt16228;
+    public int fieldInt16229;
+    public int fieldInt16230;
+    public int fieldInt16231;
+    public int fieldInt16232;
+    public int fieldInt16233;
+    public int fieldInt16234;
+    public int fieldInt16235;
+    public int fieldInt16236;
+    public int fieldInt16237;
+    public int fieldInt16238;
+    public int fieldInt16239;
+    public int fieldInt16240;
+    public int fieldInt16241;
+    public int fieldInt16242;
+    public int fieldInt16243;
+    public int fieldInt16244;
+    public int fieldInt16245;
+    public int fieldInt16246;
+    public int fieldInt16247;
+    public int fieldInt16248;
+    public int fieldInt16249;
+    public int fieldInt16250;
+    public int fieldInt16251;
+    public int fieldInt16252;
+    public int fieldInt16253;
+    public int fieldInt16254;
+    public int fieldInt16255;
+    public int fieldInt16256;
+    public int fieldInt16257;
+    public int fieldInt16258;
+    public int fieldInt16259;
+    public int fieldInt16260;
+    public int fieldInt16261;
+    public int fieldInt16262;
+    public int fieldInt16263;
+    public int fieldInt16264;
+    public int fieldInt16265;
+    public int fieldInt16266;
+    public int fieldInt16267;
+    public int fieldInt16268;
+    public int fieldInt16269;
+    public int fieldInt16270;
+    public int fieldInt16271;
+    public int fieldInt16272;
+    public int fieldInt16273;
+    public int fieldInt16274;
+    public int fieldInt16275;
+    public int fieldInt16276;
+    public int fieldInt16277;
+    public int fieldInt16278;
+    public int fieldInt16279;
+    public int fieldInt16280;
+    public int fieldInt16281;
+    public int fieldInt16282;
+    public int fieldInt16283;
+    public int fieldInt16284;
+    public int fieldInt16285;
+    public int fieldInt16286;
+    public int fieldInt16287;
+    public int fieldInt16288;
+    public int fieldInt16289;
+    public int fieldInt16290;
+    public int fieldInt16291;
+    public int fieldInt16292;
+    public int fieldInt16293;
+    public int fieldInt16294;
+    public int fieldInt16295;
+    public int fieldInt16296;
+    public int fieldInt16297;
+    public int fieldInt16298;
+    public int fieldInt16299;
+    public int fieldInt16300;
+    public int fieldInt16301;
+    public int fieldInt16302;
+    public int fieldInt16303;
+    public int fieldInt16304;
+    public int fieldInt16305;
+    public int fieldInt16306;
+    public int fieldInt16307;
+    public int fieldInt16308;
+    public int fieldInt16309;
+    public int fieldInt16310;
+    public int fieldInt16311;
+    public int fieldInt16312;
+    public int fieldInt16313;
+    public int fieldInt16314;
+    public int fieldInt16315;
+    public int fieldInt16316;
+    public int fieldInt16317;
+    public int fieldInt16318;
+    public int fieldInt16319;
+    public int fieldInt16320;
+    public int fieldInt16321;
+    public int fieldInt16322;
+    public int fieldInt16323;
+    public int fieldInt16324;
+    public int fieldInt16325;
+    public int fieldInt16326;
+    public int fieldInt16327;
+    public int fieldInt16328;
+    public int fieldInt16329;
+    public int fieldInt16330;
+    public int fieldInt16331;
+    public int fieldInt16332;
+    public int fieldInt16333;
+    public int fieldInt16334;
+    public int fieldInt16335;
+    public int fieldInt16336;
+    public int fieldInt16337;
+    public int fieldInt16338;
+    public int fieldInt16339;
+    public int fieldInt16340;
+    public int fieldInt16341;
+    public int fieldInt16342;
+    public int fieldInt16343;
+    public int fieldInt16344;
+    public int fieldInt16345;
+    public int fieldInt16346;
+    public int fieldInt16347;
+    public int fieldInt16348;
+    public int fieldInt16349;
+    public int fieldInt16350;
+    public int fieldInt16351;
+    public int fieldInt16352;
+    public int fieldInt16353;
+    public int fieldInt16354;
+    public int fieldInt16355;
+    public int fieldInt16356;
+    public int fieldInt16357;
+    public int fieldInt16358;
+    public int fieldInt16359;
+    public int fieldInt16360;
+    public int fieldInt16361;
+    public int fieldInt16362;
+    public int fieldInt16363;
+    public int fieldInt16364;
+    public int fieldInt16365;
+    public int fieldInt16366;
+    public int fieldInt16367;
+    public int fieldInt16368;
+    public int fieldInt16369;
+    public int fieldInt16370;
+    public int fieldInt16371;
+    public int fieldInt16372;
+    public int fieldInt16373;
+    public int fieldInt16374;
+    public int fieldInt16375;
+    public int fieldInt16376;
+    public int fieldInt16377;
+    public int fieldInt16378;
+    public int fieldInt16379;
+    public int fieldInt16380;
+    public int fieldInt16381;
+    public int fieldInt16382;
+    public int fieldInt16383;
+    public int fieldInt16384;
+    public int fieldInt16385;
+    public int fieldInt16386;
+    public int fieldInt16387;
+    public int fieldInt16388;
+    public int fieldInt16389;
+    public int fieldInt16390;
+    public int fieldInt16391;
+    public int fieldInt16392;
+    public int fieldInt16393;
+    public int fieldInt16394;
+    public int fieldInt16395;
+    public int fieldInt16396;
+    public int fieldInt16397;
+    public int fieldInt16398;
+    public int fieldInt16399;
+    public int fieldInt16400;
+    public int fieldInt16401;
+    public int fieldInt16402;
+    public int fieldInt16403;
+    public int fieldInt16404;
+    public int fieldInt16405;
+    public int fieldInt16406;
+    public int fieldInt16407;
+    public int fieldInt16408;
+    public int fieldInt16409;
+    public int fieldInt16410;
+    public int fieldInt16411;
+    public int fieldInt16412;
+    public int fieldInt16413;
+    public int fieldInt16414;
+    public int fieldInt16415;
+    public int fieldInt16416;
+    public int fieldInt16417;
+    public int fieldInt16418;
+    public int fieldInt16419;
+    public int fieldInt16420;
+    public int fieldInt16421;
+    public int fieldInt16422;
+    public int fieldInt16423;
+    public int fieldInt16424;
+    public int fieldInt16425;
+    public int fieldInt16426;
+    public int fieldInt16427;
+    public int fieldInt16428;
+    public int fieldInt16429;
+    public int fieldInt16430;
+    public int fieldInt16431;
+    public int fieldInt16432;
+    public int fieldInt16433;
+    public int fieldInt16434;
+    public int fieldInt16435;
+    public int fieldInt16436;
+    public int fieldInt16437;
+    public int fieldInt16438;
+    public int fieldInt16439;
+    public int fieldInt16440;
+    public int fieldInt16441;
+    public int fieldInt16442;
+    public int fieldInt16443;
+    public int fieldInt16444;
+    public int fieldInt16445;
+    public int fieldInt16446;
+    public int fieldInt16447;
+    public int fieldInt16448;
+    public int fieldInt16449;
+    public int fieldInt16450;
+    public int fieldInt16451;
+    public int fieldInt16452;
+    public int fieldInt16453;
+    public int fieldInt16454;
+    public int fieldInt16455;
+    public int fieldInt16456;
+    public int fieldInt16457;
+    public int fieldInt16458;
+    public int fieldInt16459;
+    public int fieldInt16460;
+    public int fieldInt16461;
+    public int fieldInt16462;
+    public int fieldInt16463;
+    public int fieldInt16464;
+    public int fieldInt16465;
+    public int fieldInt16466;
+    public int fieldInt16467;
+    public int fieldInt16468;
+    public int fieldInt16469;
+    public int fieldInt16470;
+    public int fieldInt16471;
+    public int fieldInt16472;
+    public int fieldInt16473;
+    public int fieldInt16474;
+    public int fieldInt16475;
+    public int fieldInt16476;
+    public int fieldInt16477;
+    public int fieldInt16478;
+    public int fieldInt16479;
+    public int fieldInt16480;
+    public int fieldInt16481;
+    public int fieldInt16482;
+    public int fieldInt16483;
+    public int fieldInt16484;
+    public int fieldInt16485;
+    public int fieldInt16486;
+    public int fieldInt16487;
+    public int fieldInt16488;
+    public int fieldInt16489;
+    public int fieldInt16490;
+    public int fieldInt16491;
+    public int fieldInt16492;
+    public int fieldInt16493;
+    public int fieldInt16494;
+    public int fieldInt16495;
+    public int fieldInt16496;
+    public int fieldInt16497;
+    public int fieldInt16498;
+    public int fieldInt16499;
+    public int fieldInt16500;
+    public int fieldInt16501;
+    public int fieldInt16502;
+    public int fieldInt16503;
+    public int fieldInt16504;
+    public int fieldInt16505;
+    public int fieldInt16506;
+    public int fieldInt16507;
+    public int fieldInt16508;
+    public int fieldInt16509;
+    public int fieldInt16510;
+    public int fieldInt16511;
+    public int fieldInt16512;
+    public int fieldInt16513;
+    public int fieldInt16514;
+    public int fieldInt16515;
+    public int fieldInt16516;
+    public int fieldInt16517;
+    public int fieldInt16518;
+    public int fieldInt16519;
+    public int fieldInt16520;
+    public int fieldInt16521;
+    public int fieldInt16522;
+    public int fieldInt16523;
+    public int fieldInt16524;
+    public int fieldInt16525;
+    public int fieldInt16526;
+    public int fieldInt16527;
+    public int fieldInt16528;
+    public int fieldInt16529;
+    public int fieldInt16530;
+    public int fieldInt16531;
+    public int fieldInt16532;
+    public int fieldInt16533;
+    public int fieldInt16534;
+    public int fieldInt16535;
+    public int fieldInt16536;
+    public int fieldInt16537;
+    public int fieldInt16538;
+    public int fieldInt16539;
+    public int fieldInt16540;
+    public int fieldInt16541;
+    public int fieldInt16542;
+    public int fieldInt16543;
+    public int fieldInt16544;
+    public int fieldInt16545;
+    public int fieldInt16546;
+    public int fieldInt16547;
+    public int fieldInt16548;
+    public int fieldInt16549;
+    public int fieldInt16550;
+    public int fieldInt16551;
+    public int fieldInt16552;
+    public int fieldInt16553;
+    public int fieldInt16554;
+    public int fieldInt16555;
+    public int fieldInt16556;
+    public int fieldInt16557;
+    public int fieldInt16558;
+    public int fieldInt16559;
+    public int fieldInt16560;
+    public int fieldInt16561;
+    public int fieldInt16562;
+    public int fieldInt16563;
+    public int fieldInt16564;
+    public int fieldInt16565;
+    public int fieldInt16566;
+    public int fieldInt16567;
+    public int fieldInt16568;
+    public int fieldInt16569;
+    public int fieldInt16570;
+    public int fieldInt16571;
+    public int fieldInt16572;
+    public int fieldInt16573;
+    public int fieldInt16574;
+    public int fieldInt16575;
+    public int fieldInt16576;
+    public int fieldInt16577;
+    public int fieldInt16578;
+    public int fieldInt16579;
+    public int fieldInt16580;
+    public int fieldInt16581;
+    public int fieldInt16582;
+    public int fieldInt16583;
+    public int fieldInt16584;
+    public int fieldInt16585;
+    public int fieldInt16586;
+    public int fieldInt16587;
+    public int fieldInt16588;
+    public int fieldInt16589;
+    public int fieldInt16590;
+    public int fieldInt16591;
+    public int fieldInt16592;
+    public int fieldInt16593;
+    public int fieldInt16594;
+    public int fieldInt16595;
+    public int fieldInt16596;
+    public int fieldInt16597;
+    public int fieldInt16598;
+    public int fieldInt16599;
+    public int fieldInt16600;
+    public int fieldInt16601;
+    public int fieldInt16602;
+    public int fieldInt16603;
+    public int fieldInt16604;
+    public int fieldInt16605;
+    public int fieldInt16606;
+    public int fieldInt16607;
+    public int fieldInt16608;
+    public int fieldInt16609;
+    public int fieldInt16610;
+    public int fieldInt16611;
+    public int fieldInt16612;
+    public int fieldInt16613;
+    public int fieldInt16614;
+    public int fieldInt16615;
+    public int fieldInt16616;
+    public int fieldInt16617;
+    public int fieldInt16618;
+    public int fieldInt16619;
+    public int fieldInt16620;
+    public int fieldInt16621;
+    public int fieldInt16622;
+    public int fieldInt16623;
+    public int fieldInt16624;
+    public int fieldInt16625;
+    public int fieldInt16626;
+    public int fieldInt16627;
+    public int fieldInt16628;
+    public int fieldInt16629;
+    public int fieldInt16630;
+    public int fieldInt16631;
+    public int fieldInt16632;
+    public int fieldInt16633;
+    public int fieldInt16634;
+    public int fieldInt16635;
+    public int fieldInt16636;
+    public int fieldInt16637;
+    public int fieldInt16638;
+    public int fieldInt16639;
+    public int fieldInt16640;
+    public int fieldInt16641;
+    public int fieldInt16642;
+    public int fieldInt16643;
+    public int fieldInt16644;
+    public int fieldInt16645;
+    public int fieldInt16646;
+    public int fieldInt16647;
+    public int fieldInt16648;
+    public int fieldInt16649;
+    public int fieldInt16650;
+    public int fieldInt16651;
+    public int fieldInt16652;
+    public int fieldInt16653;
+    public int fieldInt16654;
+    public int fieldInt16655;
+    public int fieldInt16656;
+    public int fieldInt16657;
+    public int fieldInt16658;
+    public int fieldInt16659;
+    public int fieldInt16660;
+    public int fieldInt16661;
+    public int fieldInt16662;
+    public int fieldInt16663;
+    public int fieldInt16664;
+    public int fieldInt16665;
+    public int fieldInt16666;
+    public int fieldInt16667;
+    public int fieldInt16668;
+    public int fieldInt16669;
+    public int fieldInt16670;
+    public int fieldInt16671;
+    public int fieldInt16672;
+    public int fieldInt16673;
+    public int fieldInt16674;
+    public int fieldInt16675;
+    public int fieldInt16676;
+    public int fieldInt16677;
+    public int fieldInt16678;
+    public int fieldInt16679;
+    public int fieldInt16680;
+    public int fieldInt16681;
+    public int fieldInt16682;
+    public int fieldInt16683;
+    public int fieldInt16684;
+    public int fieldInt16685;
+    public int fieldInt16686;
+    public int fieldInt16687;
+    public int fieldInt16688;
+    public int fieldInt16689;
+    public int fieldInt16690;
+    public int fieldInt16691;
+    public int fieldInt16692;
+    public int fieldInt16693;
+    public int fieldInt16694;
+    public int fieldInt16695;
+    public int fieldInt16696;
+    public int fieldInt16697;
+    public int fieldInt16698;
+    public int fieldInt16699;
+    public int fieldInt16700;
+    public int fieldInt16701;
+    public int fieldInt16702;
+    public int fieldInt16703;
+    public int fieldInt16704;
+    public int fieldInt16705;
+    public int fieldInt16706;
+    public int fieldInt16707;
+    public int fieldInt16708;
+    public int fieldInt16709;
+    public int fieldInt16710;
+    public int fieldInt16711;
+    public int fieldInt16712;
+    public int fieldInt16713;
+    public int fieldInt16714;
+    public int fieldInt16715;
+    public int fieldInt16716;
+    public int fieldInt16717;
+    public int fieldInt16718;
+    public int fieldInt16719;
+    public int fieldInt16720;
+    public int fieldInt16721;
+    public int fieldInt16722;
+    public int fieldInt16723;
+    public int fieldInt16724;
+    public int fieldInt16725;
+    public int fieldInt16726;
+    public int fieldInt16727;
+    public int fieldInt16728;
+    public int fieldInt16729;
+    public int fieldInt16730;
+    public int fieldInt16731;
+    public int fieldInt16732;
+    public int fieldInt16733;
+    public int fieldInt16734;
+    public int fieldInt16735;
+    public int fieldInt16736;
+    public int fieldInt16737;
+    public int fieldInt16738;
+    public int fieldInt16739;
+    public int fieldInt16740;
+    public int fieldInt16741;
+    public int fieldInt16742;
+    public int fieldInt16743;
+    public int fieldInt16744;
+    public int fieldInt16745;
+    public int fieldInt16746;
+    public int fieldInt16747;
+    public int fieldInt16748;
+    public int fieldInt16749;
+    public int fieldInt16750;
+    public int fieldInt16751;
+    public int fieldInt16752;
+    public int fieldInt16753;
+    public int fieldInt16754;
+    public int fieldInt16755;
+    public int fieldInt16756;
+    public int fieldInt16757;
+    public int fieldInt16758;
+    public int fieldInt16759;
+    public int fieldInt16760;
+    public int fieldInt16761;
+    public int fieldInt16762;
+    public int fieldInt16763;
+    public int fieldInt16764;
+    public int fieldInt16765;
+    public int fieldInt16766;
+    public int fieldInt16767;
+    public int fieldInt16768;
+    public int fieldInt16769;
+    public int fieldInt16770;
+    public int fieldInt16771;
+    public int fieldInt16772;
+    public int fieldInt16773;
+    public int fieldInt16774;
+    public int fieldInt16775;
+    public int fieldInt16776;
+    public int fieldInt16777;
+    public int fieldInt16778;
+    public int fieldInt16779;
+    public int fieldInt16780;
+    public int fieldInt16781;
+    public int fieldInt16782;
+    public int fieldInt16783;
+    public int fieldInt16784;
+    public int fieldInt16785;
+    public int fieldInt16786;
+    public int fieldInt16787;
+    public int fieldInt16788;
+    public int fieldInt16789;
+    public int fieldInt16790;
+    public int fieldInt16791;
+    public int fieldInt16792;
+    public int fieldInt16793;
+    public int fieldInt16794;
+    public int fieldInt16795;
+    public int fieldInt16796;
+    public int fieldInt16797;
+    public int fieldInt16798;
+    public int fieldInt16799;
+    public int fieldInt16800;
+    public int fieldInt16801;
+    public int fieldInt16802;
+    public int fieldInt16803;
+    public int fieldInt16804;
+    public int fieldInt16805;
+    public int fieldInt16806;
+    public int fieldInt16807;
+    public int fieldInt16808;
+    public int fieldInt16809;
+    public int fieldInt16810;
+    public int fieldInt16811;
+    public int fieldInt16812;
+    public int fieldInt16813;
+    public int fieldInt16814;
+    public int fieldInt16815;
+    public int fieldInt16816;
+    public int fieldInt16817;
+    public int fieldInt16818;
+    public int fieldInt16819;
+    public int fieldInt16820;
+    public int fieldInt16821;
+    public int fieldInt16822;
+    public int fieldInt16823;
+    public int fieldInt16824;
+    public int fieldInt16825;
+    public int fieldInt16826;
+    public int fieldInt16827;
+    public int fieldInt16828;
+    public int fieldInt16829;
+    public int fieldInt16830;
+    public int fieldInt16831;
+    public int fieldInt16832;
+    public int fieldInt16833;
+    public int fieldInt16834;
+    public int fieldInt16835;
+    public int fieldInt16836;
+    public int fieldInt16837;
+    public int fieldInt16838;
+    public int fieldInt16839;
+    public int fieldInt16840;
+    public int fieldInt16841;
+    public int fieldInt16842;
+    public int fieldInt16843;
+    public int fieldInt16844;
+    public int fieldInt16845;
+    public int fieldInt16846;
+    public int fieldInt16847;
+    public int fieldInt16848;
+    public int fieldInt16849;
+    public int fieldInt16850;
+    public int fieldInt16851;
+    public int fieldInt16852;
+    public int fieldInt16853;
+    public int fieldInt16854;
+    public int fieldInt16855;
+    public int fieldInt16856;
+    public int fieldInt16857;
+    public int fieldInt16858;
+    public int fieldInt16859;
+    public int fieldInt16860;
+    public int fieldInt16861;
+    public int fieldInt16862;
+    public int fieldInt16863;
+    public int fieldInt16864;
+    public int fieldInt16865;
+    public int fieldInt16866;
+    public int fieldInt16867;
+    public int fieldInt16868;
+    public int fieldInt16869;
+    public int fieldInt16870;
+    public int fieldInt16871;
+    public int fieldInt16872;
+    public int fieldInt16873;
+    public int fieldInt16874;
+    public int fieldInt16875;
+    public int fieldInt16876;
+    public int fieldInt16877;
+    public int fieldInt16878;
+    public int fieldInt16879;
+    public int fieldInt16880;
+    public int fieldInt16881;
+    public int fieldInt16882;
+    public int fieldInt16883;
+    public int fieldInt16884;
+    public int fieldInt16885;
+    public int fieldInt16886;
+    public int fieldInt16887;
+    public int fieldInt16888;
+    public int fieldInt16889;
+    public int fieldInt16890;
+    public int fieldInt16891;
+    public int fieldInt16892;
+    public int fieldInt16893;
+    public int fieldInt16894;
+    public int fieldInt16895;
+    public int fieldInt16896;
+    public int fieldInt16897;
+    public int fieldInt16898;
+    public int fieldInt16899;
+    public int fieldInt16900;
+    public int fieldInt16901;
+    public int fieldInt16902;
+    public int fieldInt16903;
+    public int fieldInt16904;
+    public int fieldInt16905;
+    public int fieldInt16906;
+    public int fieldInt16907;
+    public int fieldInt16908;
+    public int fieldInt16909;
+    public int fieldInt16910;
+    public int fieldInt16911;
+    public int fieldInt16912;
+    public int fieldInt16913;
+    public int fieldInt16914;
+    public int fieldInt16915;
+    public int fieldInt16916;
+    public int fieldInt16917;
+    public int fieldInt16918;
+    public int fieldInt16919;
+    public int fieldInt16920;
+    public int fieldInt16921;
+    public int fieldInt16922;
+    public int fieldInt16923;
+    public int fieldInt16924;
+    public int fieldInt16925;
+    public int fieldInt16926;
+    public int fieldInt16927;
+    public int fieldInt16928;
+    public int fieldInt16929;
+    public int fieldInt16930;
+    public int fieldInt16931;
+    public int fieldInt16932;
+    public int fieldInt16933;
+    public int fieldInt16934;
+    public int fieldInt16935;
+    public int fieldInt16936;
+    public int fieldInt16937;
+    public int fieldInt16938;
+    public int fieldInt16939;
+    public int fieldInt16940;
+    public int fieldInt16941;
+    public int fieldInt16942;
+    public int fieldInt16943;
+    public int fieldInt16944;
+    public int fieldInt16945;
+    public int fieldInt16946;
+    public int fieldInt16947;
+    public int fieldInt16948;
+    public int fieldInt16949;
+    public int fieldInt16950;
+    public int fieldInt16951;
+    public int fieldInt16952;
+    public int fieldInt16953;
+    public int fieldInt16954;
+    public int fieldInt16955;
+    public int fieldInt16956;
+    public int fieldInt16957;
+    public int fieldInt16958;
+    public int fieldInt16959;
+    public int fieldInt16960;
+    public int fieldInt16961;
+    public int fieldInt16962;
+    public int fieldInt16963;
+    public int fieldInt16964;
+    public int fieldInt16965;
+    public int fieldInt16966;
+    public int fieldInt16967;
+    public int fieldInt16968;
+    public int fieldInt16969;
+    public int fieldInt16970;
+    public int fieldInt16971;
+    public int fieldInt16972;
+    public int fieldInt16973;
+    public int fieldInt16974;
+    public int fieldInt16975;
+    public int fieldInt16976;
+    public int fieldInt16977;
+    public int fieldInt16978;
+    public int fieldInt16979;
+    public int fieldInt16980;
+    public int fieldInt16981;
+    public int fieldInt16982;
+    public int fieldInt16983;
+    public int fieldInt16984;
+    public int fieldInt16985;
+    public int fieldInt16986;
+    public int fieldInt16987;
+    public int fieldInt16988;
+    public int fieldInt16989;
+    public int fieldInt16990;
+    public int fieldInt16991;
+    public int fieldInt16992;
+    public int fieldInt16993;
+    public int fieldInt16994;
+    public int fieldInt16995;
+    public int fieldInt16996;
+    public int fieldInt16997;
+    public int fieldInt16998;
+    public int fieldInt16999;
+    public int fieldInt17000;
+    public int fieldInt17001;
+    public int fieldInt17002;
+    public int fieldInt17003;
+    public int fieldInt17004;
+    public int fieldInt17005;
+    public int fieldInt17006;
+    public int fieldInt17007;
+    public int fieldInt17008;
+    public int fieldInt17009;
+    public int fieldInt17010;
+    public int fieldInt17011;
+    public int fieldInt17012;
+    public int fieldInt17013;
+    public int fieldInt17014;
+    public int fieldInt17015;
+    public int fieldInt17016;
+    public int fieldInt17017;
+    public int fieldInt17018;
+    public int fieldInt17019;
+    public int fieldInt17020;
+    public int fieldInt17021;
+    public int fieldInt17022;
+    public int fieldInt17023;
+    public int fieldInt17024;
+    public int fieldInt17025;
+    public int fieldInt17026;
+    public int fieldInt17027;
+    public int fieldInt17028;
+    public int fieldInt17029;
+    public int fieldInt17030;
+    public int fieldInt17031;
+    public int fieldInt17032;
+    public int fieldInt17033;
+    public int fieldInt17034;
+    public int fieldInt17035;
+    public int fieldInt17036;
+    public int fieldInt17037;
+    public int fieldInt17038;
+    public int fieldInt17039;
+    public int fieldInt17040;
+    public int fieldInt17041;
+    public int fieldInt17042;
+    public int fieldInt17043;
+    public int fieldInt17044;
+    public int fieldInt17045;
+    public int fieldInt17046;
+    public int fieldInt17047;
+    public int fieldInt17048;
+    public int fieldInt17049;
+    public int fieldInt17050;
+    public int fieldInt17051;
+    public int fieldInt17052;
+    public int fieldInt17053;
+    public int fieldInt17054;
+    public int fieldInt17055;
+    public int fieldInt17056;
+    public int fieldInt17057;
+    public int fieldInt17058;
+    public int fieldInt17059;
+    public int fieldInt17060;
+    public int fieldInt17061;
+    public int fieldInt17062;
+    public int fieldInt17063;
+    public int fieldInt17064;
+    public int fieldInt17065;
+    public int fieldInt17066;
+    public int fieldInt17067;
+    public int fieldInt17068;
+    public int fieldInt17069;
+    public int fieldInt17070;
+    public int fieldInt17071;
+    public int fieldInt17072;
+    public int fieldInt17073;
+    public int fieldInt17074;
+    public int fieldInt17075;
+    public int fieldInt17076;
+    public int fieldInt17077;
+    public int fieldInt17078;
+    public int fieldInt17079;
+    public int fieldInt17080;
+    public int fieldInt17081;
+    public int fieldInt17082;
+    public int fieldInt17083;
+    public int fieldInt17084;
+    public int fieldInt17085;
+    public int fieldInt17086;
+    public int fieldInt17087;
+    public int fieldInt17088;
+    public int fieldInt17089;
+    public int fieldInt17090;
+    public int fieldInt17091;
+    public int fieldInt17092;
+    public int fieldInt17093;
+    public int fieldInt17094;
+    public int fieldInt17095;
+    public int fieldInt17096;
+    public int fieldInt17097;
+    public int fieldInt17098;
+    public int fieldInt17099;
+    public int fieldInt17100;
+    public int fieldInt17101;
+    public int fieldInt17102;
+    public int fieldInt17103;
+    public int fieldInt17104;
+    public int fieldInt17105;
+    public int fieldInt17106;
+    public int fieldInt17107;
+    public int fieldInt17108;
+    public int fieldInt17109;
+    public int fieldInt17110;
+    public int fieldInt17111;
+    public int fieldInt17112;
+    public int fieldInt17113;
+    public int fieldInt17114;
+    public int fieldInt17115;
+    public int fieldInt17116;
+    public int fieldInt17117;
+    public int fieldInt17118;
+    public int fieldInt17119;
+    public int fieldInt17120;
+    public int fieldInt17121;
+    public int fieldInt17122;
+    public int fieldInt17123;
+    public int fieldInt17124;
+    public int fieldInt17125;
+    public int fieldInt17126;
+    public int fieldInt17127;
+    public int fieldInt17128;
+    public int fieldInt17129;
+    public int fieldInt17130;
+    public int fieldInt17131;
+    public int fieldInt17132;
+    public int fieldInt17133;
+    public int fieldInt17134;
+    public int fieldInt17135;
+    public int fieldInt17136;
+    public int fieldInt17137;
+    public int fieldInt17138;
+    public int fieldInt17139;
+    public int fieldInt17140;
+    public int fieldInt17141;
+    public int fieldInt17142;
+    public int fieldInt17143;
+    public int fieldInt17144;
+    public int fieldInt17145;
+    public int fieldInt17146;
+    public int fieldInt17147;
+    public int fieldInt17148;
+    public int fieldInt17149;
+    public int fieldInt17150;
+    public int fieldInt17151;
+    public int fieldInt17152;
+    public int fieldInt17153;
+    public int fieldInt17154;
+    public int fieldInt17155;
+    public int fieldInt17156;
+    public int fieldInt17157;
+    public int fieldInt17158;
+    public int fieldInt17159;
+    public int fieldInt17160;
+    public int fieldInt17161;
+    public int fieldInt17162;
+    public int fieldInt17163;
+    public int fieldInt17164;
+    public int fieldInt17165;
+    public int fieldInt17166;
+    public int fieldInt17167;
+    public int fieldInt17168;
+    public int fieldInt17169;
+    public int fieldInt17170;
+    public int fieldInt17171;
+    public int fieldInt17172;
+    public int fieldInt17173;
+    public int fieldInt17174;
+    public int fieldInt17175;
+    public int fieldInt17176;
+    public int fieldInt17177;
+    public int fieldInt17178;
+    public int fieldInt17179;
+    public int fieldInt17180;
+    public int fieldInt17181;
+    public int fieldInt17182;
+    public int fieldInt17183;
+    public int fieldInt17184;
+    public int fieldInt17185;
+    public int fieldInt17186;
+    public int fieldInt17187;
+    public int fieldInt17188;
+    public int fieldInt17189;
+    public int fieldInt17190;
+    public int fieldInt17191;
+    public int fieldInt17192;
+    public int fieldInt17193;
+    public int fieldInt17194;
+    public int fieldInt17195;
+    public int fieldInt17196;
+    public int fieldInt17197;
+    public int fieldInt17198;
+    public int fieldInt17199;
+    public int fieldInt17200;
+    public int fieldInt17201;
+    public int fieldInt17202;
+    public int fieldInt17203;
+    public int fieldInt17204;
+    public int fieldInt17205;
+    public int fieldInt17206;
+    public int fieldInt17207;
+    public int fieldInt17208;
+    public int fieldInt17209;
+    public int fieldInt17210;
+    public int fieldInt17211;
+    public int fieldInt17212;
+    public int fieldInt17213;
+    public int fieldInt17214;
+    public int fieldInt17215;
+    public int fieldInt17216;
+    public int fieldInt17217;
+    public int fieldInt17218;
+    public int fieldInt17219;
+    public int fieldInt17220;
+    public int fieldInt17221;
+    public int fieldInt17222;
+    public int fieldInt17223;
+    public int fieldInt17224;
+    public int fieldInt17225;
+    public int fieldInt17226;
+    public int fieldInt17227;
+    public int fieldInt17228;
+    public int fieldInt17229;
+    public int fieldInt17230;
+    public int fieldInt17231;
+    public int fieldInt17232;
+    public int fieldInt17233;
+    public int fieldInt17234;
+    public int fieldInt17235;
+    public int fieldInt17236;
+    public int fieldInt17237;
+    public int fieldInt17238;
+    public int fieldInt17239;
+    public int fieldInt17240;
+    public int fieldInt17241;
+    public int fieldInt17242;
+    public int fieldInt17243;
+    public int fieldInt17244;
+    public int fieldInt17245;
+    public int fieldInt17246;
+    public int fieldInt17247;
+    public int fieldInt17248;
+    public int fieldInt17249;
+    public int fieldInt17250;
+    public int fieldInt17251;
+    public int fieldInt17252;
+    public int fieldInt17253;
+    public int fieldInt17254;
+    public int fieldInt17255;
+    public int fieldInt17256;
+    public int fieldInt17257;
+    public int fieldInt17258;
+    public int fieldInt17259;
+    public int fieldInt17260;
+    public int fieldInt17261;
+    public int fieldInt17262;
+    public int fieldInt17263;
+    public int fieldInt17264;
+    public int fieldInt17265;
+    public int fieldInt17266;
+    public int fieldInt17267;
+    public int fieldInt17268;
+    public int fieldInt17269;
+    public int fieldInt17270;
+    public int fieldInt17271;
+    public int fieldInt17272;
+    public int fieldInt17273;
+    public int fieldInt17274;
+    public int fieldInt17275;
+    public int fieldInt17276;
+    public int fieldInt17277;
+    public int fieldInt17278;
+    public int fieldInt17279;
+    public int fieldInt17280;
+    public int fieldInt17281;
+    public int fieldInt17282;
+    public int fieldInt17283;
+    public int fieldInt17284;
+    public int fieldInt17285;
+    public int fieldInt17286;
+    public int fieldInt17287;
+    public int fieldInt17288;
+    public int fieldInt17289;
+    public int fieldInt17290;
+    public int fieldInt17291;
+    public int fieldInt17292;
+    public int fieldInt17293;
+    public int fieldInt17294;
+    public int fieldInt17295;
+    public int fieldInt17296;
+    public int fieldInt17297;
+    public int fieldInt17298;
+    public int fieldInt17299;
+    public int fieldInt17300;
+    public int fieldInt17301;
+    public int fieldInt17302;
+    public int fieldInt17303;
+    public int fieldInt17304;
+    public int fieldInt17305;
+    public int fieldInt17306;
+    public int fieldInt17307;
+    public int fieldInt17308;
+    public int fieldInt17309;
+    public int fieldInt17310;
+    public int fieldInt17311;
+    public int fieldInt17312;
+    public int fieldInt17313;
+    public int fieldInt17314;
+    public int fieldInt17315;
+    public int fieldInt17316;
+    public int fieldInt17317;
+    public int fieldInt17318;
+    public int fieldInt17319;
+    public int fieldInt17320;
+    public int fieldInt17321;
+    public int fieldInt17322;
+    public int fieldInt17323;
+    public int fieldInt17324;
+    public int fieldInt17325;
+    public int fieldInt17326;
+    public int fieldInt17327;
+    public int fieldInt17328;
+    public int fieldInt17329;
+    public int fieldInt17330;
+    public int fieldInt17331;
+    public int fieldInt17332;
+    public int fieldInt17333;
+    public int fieldInt17334;
+    public int fieldInt17335;
+    public int fieldInt17336;
+    public int fieldInt17337;
+    public int fieldInt17338;
+    public int fieldInt17339;
+    public int fieldInt17340;
+    public int fieldInt17341;
+    public int fieldInt17342;
+    public int fieldInt17343;
+    public int fieldInt17344;
+    public int fieldInt17345;
+    public int fieldInt17346;
+    public int fieldInt17347;
+    public int fieldInt17348;
+    public int fieldInt17349;
+    public int fieldInt17350;
+    public int fieldInt17351;
+    public int fieldInt17352;
+    public int fieldInt17353;
+    public int fieldInt17354;
+    public int fieldInt17355;
+    public int fieldInt17356;
+    public int fieldInt17357;
+    public int fieldInt17358;
+    public int fieldInt17359;
+    public int fieldInt17360;
+    public int fieldInt17361;
+    public int fieldInt17362;
+    public int fieldInt17363;
+    public int fieldInt17364;
+    public int fieldInt17365;
+    public int fieldInt17366;
+    public int fieldInt17367;
+    public int fieldInt17368;
+    public int fieldInt17369;
+    public int fieldInt17370;
+    public int fieldInt17371;
+    public int fieldInt17372;
+    public int fieldInt17373;
+    public int fieldInt17374;
+    public int fieldInt17375;
+    public int fieldInt17376;
+    public int fieldInt17377;
+    public int fieldInt17378;
+    public int fieldInt17379;
+    public int fieldInt17380;
+    public int fieldInt17381;
+    public int fieldInt17382;
+    public int fieldInt17383;
+    public int fieldInt17384;
+    public int fieldInt17385;
+    public int fieldInt17386;
+    public int fieldInt17387;
+    public int fieldInt17388;
+    public int fieldInt17389;
+    public int fieldInt17390;
+    public int fieldInt17391;
+    public int fieldInt17392;
+    public int fieldInt17393;
+    public int fieldInt17394;
+    public int fieldInt17395;
+    public int fieldInt17396;
+    public int fieldInt17397;
+    public int fieldInt17398;
+    public int fieldInt17399;
+    public int fieldInt17400;
+    public int fieldInt17401;
+    public int fieldInt17402;
+    public int fieldInt17403;
+    public int fieldInt17404;
+    public int fieldInt17405;
+    public int fieldInt17406;
+    public int fieldInt17407;
+    public int fieldInt17408;
+    public int fieldInt17409;
+    public int fieldInt17410;
+    public int fieldInt17411;
+    public int fieldInt17412;
+    public int fieldInt17413;
+    public int fieldInt17414;
+    public int fieldInt17415;
+    public int fieldInt17416;
+    public int fieldInt17417;
+    public int fieldInt17418;
+    public int fieldInt17419;
+    public int fieldInt17420;
+    public int fieldInt17421;
+    public int fieldInt17422;
+    public int fieldInt17423;
+    public int fieldInt17424;
+    public int fieldInt17425;
+    public int fieldInt17426;
+    public int fieldInt17427;
+    public int fieldInt17428;
+    public int fieldInt17429;
+    public int fieldInt17430;
+    public int fieldInt17431;
+    public int fieldInt17432;
+    public int fieldInt17433;
+    public int fieldInt17434;
+    public int fieldInt17435;
+    public int fieldInt17436;
+    public int fieldInt17437;
+    public int fieldInt17438;
+    public int fieldInt17439;
+    public int fieldInt17440;
+    public int fieldInt17441;
+    public int fieldInt17442;
+    public int fieldInt17443;
+    public int fieldInt17444;
+    public int fieldInt17445;
+    public int fieldInt17446;
+    public int fieldInt17447;
+    public int fieldInt17448;
+    public int fieldInt17449;
+    public int fieldInt17450;
+    public int fieldInt17451;
+    public int fieldInt17452;
+    public int fieldInt17453;
+    public int fieldInt17454;
+    public int fieldInt17455;
+    public int fieldInt17456;
+    public int fieldInt17457;
+    public int fieldInt17458;
+    public int fieldInt17459;
+    public int fieldInt17460;
+    public int fieldInt17461;
+    public int fieldInt17462;
+    public int fieldInt17463;
+    public int fieldInt17464;
+    public int fieldInt17465;
+    public int fieldInt17466;
+    public int fieldInt17467;
+    public int fieldInt17468;
+    public int fieldInt17469;
+    public int fieldInt17470;
+    public int fieldInt17471;
+    public int fieldInt17472;
+    public int fieldInt17473;
+    public int fieldInt17474;
+    public int fieldInt17475;
+    public int fieldInt17476;
+    public int fieldInt17477;
+    public int fieldInt17478;
+    public int fieldInt17479;
+    public int fieldInt17480;
+    public int fieldInt17481;
+    public int fieldInt17482;
+    public int fieldInt17483;
+    public int fieldInt17484;
+    public int fieldInt17485;
+    public int fieldInt17486;
+    public int fieldInt17487;
+    public int fieldInt17488;
+    public int fieldInt17489;
+    public int fieldInt17490;
+    public int fieldInt17491;
+    public int fieldInt17492;
+    public int fieldInt17493;
+    public int fieldInt17494;
+    public int fieldInt17495;
+    public int fieldInt17496;
+    public int fieldInt17497;
+    public int fieldInt17498;
+    public int fieldInt17499;
+    public int fieldInt17500;
+    public int fieldInt17501;
+    public int fieldInt17502;
+    public int fieldInt17503;
+    public int fieldInt17504;
+    public int fieldInt17505;
+    public int fieldInt17506;
+    public int fieldInt17507;
+    public int fieldInt17508;
+    public int fieldInt17509;
+    public int fieldInt17510;
+    public int fieldInt17511;
+    public int fieldInt17512;
+    public int fieldInt17513;
+    public int fieldInt17514;
+    public int fieldInt17515;
+    public int fieldInt17516;
+    public int fieldInt17517;
+    public int fieldInt17518;
+    public int fieldInt17519;
+    public int fieldInt17520;
+    public int fieldInt17521;
+    public int fieldInt17522;
+    public int fieldInt17523;
+    public int fieldInt17524;
+    public int fieldInt17525;
+    public int fieldInt17526;
+    public int fieldInt17527;
+    public int fieldInt17528;
+    public int fieldInt17529;
+    public int fieldInt17530;
+    public int fieldInt17531;
+    public int fieldInt17532;
+    public int fieldInt17533;
+    public int fieldInt17534;
+    public int fieldInt17535;
+    public int fieldInt17536;
+    public int fieldInt17537;
+    public int fieldInt17538;
+    public int fieldInt17539;
+    public int fieldInt17540;
+    public int fieldInt17541;
+    public int fieldInt17542;
+    public int fieldInt17543;
+    public int fieldInt17544;
+    public int fieldInt17545;
+    public int fieldInt17546;
+    public int fieldInt17547;
+    public int fieldInt17548;
+    public int fieldInt17549;
+    public int fieldInt17550;
+    public int fieldInt17551;
+    public int fieldInt17552;
+    public int fieldInt17553;
+    public int fieldInt17554;
+    public int fieldInt17555;
+    public int fieldInt17556;
+    public int fieldInt17557;
+    public int fieldInt17558;
+    public int fieldInt17559;
+    public int fieldInt17560;
+    public int fieldInt17561;
+    public int fieldInt17562;
+    public int fieldInt17563;
+    public int fieldInt17564;
+    public int fieldInt17565;
+    public int fieldInt17566;
+    public int fieldInt17567;
+    public int fieldInt17568;
+    public int fieldInt17569;
+    public int fieldInt17570;
+    public int fieldInt17571;
+    public int fieldInt17572;
+    public int fieldInt17573;
+    public int fieldInt17574;
+    public int fieldInt17575;
+    public int fieldInt17576;
+    public int fieldInt17577;
+    public int fieldInt17578;
+    public int fieldInt17579;
+    public int fieldInt17580;
+    public int fieldInt17581;
+    public int fieldInt17582;
+    public int fieldInt17583;
+    public int fieldInt17584;
+    public int fieldInt17585;
+    public int fieldInt17586;
+    public int fieldInt17587;
+    public int fieldInt17588;
+    public int fieldInt17589;
+    public int fieldInt17590;
+    public int fieldInt17591;
+    public int fieldInt17592;
+    public int fieldInt17593;
+    public int fieldInt17594;
+    public int fieldInt17595;
+    public int fieldInt17596;
+    public int fieldInt17597;
+    public int fieldInt17598;
+    public int fieldInt17599;
+    public int fieldInt17600;
+    public int fieldInt17601;
+    public int fieldInt17602;
+    public int fieldInt17603;
+    public int fieldInt17604;
+    public int fieldInt17605;
+    public int fieldInt17606;
+    public int fieldInt17607;
+    public int fieldInt17608;
+    public int fieldInt17609;
+    public int fieldInt17610;
+    public int fieldInt17611;
+    public int fieldInt17612;
+    public int fieldInt17613;
+    public int fieldInt17614;
+    public int fieldInt17615;
+    public int fieldInt17616;
+    public int fieldInt17617;
+    public int fieldInt17618;
+    public int fieldInt17619;
+    public int fieldInt17620;
+    public int fieldInt17621;
+    public int fieldInt17622;
+    public int fieldInt17623;
+    public int fieldInt17624;
+    public int fieldInt17625;
+    public int fieldInt17626;
+    public int fieldInt17627;
+    public int fieldInt17628;
+    public int fieldInt17629;
+    public int fieldInt17630;
+    public int fieldInt17631;
+    public int fieldInt17632;
+    public int fieldInt17633;
+    public int fieldInt17634;
+    public int fieldInt17635;
+    public int fieldInt17636;
+    public int fieldInt17637;
+    public int fieldInt17638;
+    public int fieldInt17639;
+    public int fieldInt17640;
+    public int fieldInt17641;
+    public int fieldInt17642;
+    public int fieldInt17643;
+    public int fieldInt17644;
+    public int fieldInt17645;
+    public int fieldInt17646;
+    public int fieldInt17647;
+    public int fieldInt17648;
+    public int fieldInt17649;
+    public int fieldInt17650;
+    public int fieldInt17651;
+    public int fieldInt17652;
+    public int fieldInt17653;
+    public int fieldInt17654;
+    public int fieldInt17655;
+    public int fieldInt17656;
+    public int fieldInt17657;
+    public int fieldInt17658;
+    public int fieldInt17659;
+    public int fieldInt17660;
+    public int fieldInt17661;
+    public int fieldInt17662;
+    public int fieldInt17663;
+    public int fieldInt17664;
+    public int fieldInt17665;
+    public int fieldInt17666;
+    public int fieldInt17667;
+    public int fieldInt17668;
+    public int fieldInt17669;
+    public int fieldInt17670;
+    public int fieldInt17671;
+    public int fieldInt17672;
+    public int fieldInt17673;
+    public int fieldInt17674;
+    public int fieldInt17675;
+    public int fieldInt17676;
+    public int fieldInt17677;
+    public int fieldInt17678;
+    public int fieldInt17679;
+    public int fieldInt17680;
+    public int fieldInt17681;
+    public int fieldInt17682;
+    public int fieldInt17683;
+    public int fieldInt17684;
+    public int fieldInt17685;
+    public int fieldInt17686;
+    public int fieldInt17687;
+    public int fieldInt17688;
+    public int fieldInt17689;
+    public int fieldInt17690;
+    public int fieldInt17691;
+    public int fieldInt17692;
+    public int fieldInt17693;
+    public int fieldInt17694;
+    public int fieldInt17695;
+    public int fieldInt17696;
+    public int fieldInt17697;
+    public int fieldInt17698;
+    public int fieldInt17699;
+    public int fieldInt17700;
+    public int fieldInt17701;
+    public int fieldInt17702;
+    public int fieldInt17703;
+    public int fieldInt17704;
+    public int fieldInt17705;
+    public int fieldInt17706;
+    public int fieldInt17707;
+    public int fieldInt17708;
+    public int fieldInt17709;
+    public int fieldInt17710;
+    public int fieldInt17711;
+    public int fieldInt17712;
+    public int fieldInt17713;
+    public int fieldInt17714;
+    public int fieldInt17715;
+    public int fieldInt17716;
+    public int fieldInt17717;
+    public int fieldInt17718;
+    public int fieldInt17719;
+    public int fieldInt17720;
+    public int fieldInt17721;
+    public int fieldInt17722;
+    public int fieldInt17723;
+    public int fieldInt17724;
+    public int fieldInt17725;
+    public int fieldInt17726;
+    public int fieldInt17727;
+    public int fieldInt17728;
+    public int fieldInt17729;
+    public int fieldInt17730;
+    public int fieldInt17731;
+    public int fieldInt17732;
+    public int fieldInt17733;
+    public int fieldInt17734;
+    public int fieldInt17735;
+    public int fieldInt17736;
+    public int fieldInt17737;
+    public int fieldInt17738;
+    public int fieldInt17739;
+    public int fieldInt17740;
+    public int fieldInt17741;
+    public int fieldInt17742;
+    public int fieldInt17743;
+    public int fieldInt17744;
+    public int fieldInt17745;
+    public int fieldInt17746;
+    public int fieldInt17747;
+    public int fieldInt17748;
+    public int fieldInt17749;
+    public int fieldInt17750;
+    public int fieldInt17751;
+    public int fieldInt17752;
+    public int fieldInt17753;
+    public int fieldInt17754;
+    public int fieldInt17755;
+    public int fieldInt17756;
+    public int fieldInt17757;
+    public int fieldInt17758;
+    public int fieldInt17759;
+    public int fieldInt17760;
+    public int fieldInt17761;
+    public int fieldInt17762;
+    public int fieldInt17763;
+    public int fieldInt17764;
+    public int fieldInt17765;
+    public int fieldInt17766;
+    public int fieldInt17767;
+    public int fieldInt17768;
+    public int fieldInt17769;
+    public int fieldInt17770;
+    public int fieldInt17771;
+    public int fieldInt17772;
+    public int fieldInt17773;
+    public int fieldInt17774;
+    public int fieldInt17775;
+    public int fieldInt17776;
+    public int fieldInt17777;
+    public int fieldInt17778;
+    public int fieldInt17779;
+    public int fieldInt17780;
+    public int fieldInt17781;
+    public int fieldInt17782;
+    public int fieldInt17783;
+    public int fieldInt17784;
+    public int fieldInt17785;
+    public int fieldInt17786;
+    public int fieldInt17787;
+    public int fieldInt17788;
+    public int fieldInt17789;
+    public int fieldInt17790;
+    public int fieldInt17791;
+    public int fieldInt17792;
+    public int fieldInt17793;
+    public int fieldInt17794;
+    public int fieldInt17795;
+    public int fieldInt17796;
+    public int fieldInt17797;
+    public int fieldInt17798;
+    public int fieldInt17799;
+    public int fieldInt17800;
+    public int fieldInt17801;
+    public int fieldInt17802;
+    public int fieldInt17803;
+    public int fieldInt17804;
+    public int fieldInt17805;
+    public int fieldInt17806;
+    public int fieldInt17807;
+    public int fieldInt17808;
+    public int fieldInt17809;
+    public int fieldInt17810;
+    public int fieldInt17811;
+    public int fieldInt17812;
+    public int fieldInt17813;
+    public int fieldInt17814;
+    public int fieldInt17815;
+    public int fieldInt17816;
+    public int fieldInt17817;
+    public int fieldInt17818;
+    public int fieldInt17819;
+    public int fieldInt17820;
+    public int fieldInt17821;
+    public int fieldInt17822;
+    public int fieldInt17823;
+    public int fieldInt17824;
+    public int fieldInt17825;
+    public int fieldInt17826;
+    public int fieldInt17827;
+    public int fieldInt17828;
+    public int fieldInt17829;
+    public int fieldInt17830;
+    public int fieldInt17831;
+    public int fieldInt17832;
+    public int fieldInt17833;
+    public int fieldInt17834;
+    public int fieldInt17835;
+    public int fieldInt17836;
+    public int fieldInt17837;
+    public int fieldInt17838;
+    public int fieldInt17839;
+    public int fieldInt17840;
+    public int fieldInt17841;
+    public int fieldInt17842;
+    public int fieldInt17843;
+    public int fieldInt17844;
+    public int fieldInt17845;
+    public int fieldInt17846;
+    public int fieldInt17847;
+    public int fieldInt17848;
+    public int fieldInt17849;
+    public int fieldInt17850;
+    public int fieldInt17851;
+    public int fieldInt17852;
+    public int fieldInt17853;
+    public int fieldInt17854;
+    public int fieldInt17855;
+    public int fieldInt17856;
+    public int fieldInt17857;
+    public int fieldInt17858;
+    public int fieldInt17859;
+    public int fieldInt17860;
+    public int fieldInt17861;
+    public int fieldInt17862;
+    public int fieldInt17863;
+    public int fieldInt17864;
+    public int fieldInt17865;
+    public int fieldInt17866;
+    public int fieldInt17867;
+    public int fieldInt17868;
+    public int fieldInt17869;
+    public int fieldInt17870;
+    public int fieldInt17871;
+    public int fieldInt17872;
+    public int fieldInt17873;
+    public int fieldInt17874;
+    public int fieldInt17875;
+    public int fieldInt17876;
+    public int fieldInt17877;
+    public int fieldInt17878;
+    public int fieldInt17879;
+    public int fieldInt17880;
+    public int fieldInt17881;
+    public int fieldInt17882;
+    public int fieldInt17883;
+    public int fieldInt17884;
+    public int fieldInt17885;
+    public int fieldInt17886;
+    public int fieldInt17887;
+    public int fieldInt17888;
+    public int fieldInt17889;
+    public int fieldInt17890;
+    public int fieldInt17891;
+    public int fieldInt17892;
+    public int fieldInt17893;
+    public int fieldInt17894;
+    public int fieldInt17895;
+    public int fieldInt17896;
+    public int fieldInt17897;
+    public int fieldInt17898;
+    public int fieldInt17899;
+    public int fieldInt17900;
+    public int fieldInt17901;
+    public int fieldInt17902;
+    public int fieldInt17903;
+    public int fieldInt17904;
+    public int fieldInt17905;
+    public int fieldInt17906;
+    public int fieldInt17907;
+    public int fieldInt17908;
+    public int fieldInt17909;
+    public int fieldInt17910;
+    public int fieldInt17911;
+    public int fieldInt17912;
+    public int fieldInt17913;
+    public int fieldInt17914;
+    public int fieldInt17915;
+    public int fieldInt17916;
+    public int fieldInt17917;
+    public int fieldInt17918;
+    public int fieldInt17919;
+    public int fieldInt17920;
+    public int fieldInt17921;
+    public int fieldInt17922;
+    public int fieldInt17923;
+    public int fieldInt17924;
+    public int fieldInt17925;
+    public int fieldInt17926;
+    public int fieldInt17927;
+    public int fieldInt17928;
+    public int fieldInt17929;
+    public int fieldInt17930;
+    public int fieldInt17931;
+    public int fieldInt17932;
+    public int fieldInt17933;
+    public int fieldInt17934;
+    public int fieldInt17935;
+    public int fieldInt17936;
+    public int fieldInt17937;
+    public int fieldInt17938;
+    public int fieldInt17939;
+    public int fieldInt17940;
+    public int fieldInt17941;
+    public int fieldInt17942;
+    public int fieldInt17943;
+    public int fieldInt17944;
+    public int fieldInt17945;
+    public int fieldInt17946;
+    public int fieldInt17947;
+    public int fieldInt17948;
+    public int fieldInt17949;
+    public int fieldInt17950;
+    public int fieldInt17951;
+    public int fieldInt17952;
+    public int fieldInt17953;
+    public int fieldInt17954;
+    public int fieldInt17955;
+    public int fieldInt17956;
+    public int fieldInt17957;
+    public int fieldInt17958;
+    public int fieldInt17959;
+    public int fieldInt17960;
+    public int fieldInt17961;
+    public int fieldInt17962;
+    public int fieldInt17963;
+    public int fieldInt17964;
+    public int fieldInt17965;
+    public int fieldInt17966;
+    public int fieldInt17967;
+    public int fieldInt17968;
+    public int fieldInt17969;
+    public int fieldInt17970;
+    public int fieldInt17971;
+    public int fieldInt17972;
+    public int fieldInt17973;
+    public int fieldInt17974;
+    public int fieldInt17975;
+    public int fieldInt17976;
+    public int fieldInt17977;
+    public int fieldInt17978;
+    public int fieldInt17979;
+    public int fieldInt17980;
+    public int fieldInt17981;
+    public int fieldInt17982;
+    public int fieldInt17983;
+    public int fieldInt17984;
+    public int fieldInt17985;
+    public int fieldInt17986;
+    public int fieldInt17987;
+    public int fieldInt17988;
+    public int fieldInt17989;
+    public int fieldInt17990;
+    public int fieldInt17991;
+    public int fieldInt17992;
+    public int fieldInt17993;
+    public int fieldInt17994;
+    public int fieldInt17995;
+    public int fieldInt17996;
+    public int fieldInt17997;
+    public int fieldInt17998;
+    public int fieldInt17999;
+    public int fieldInt18000;
+    public int fieldInt18001;
+    public int fieldInt18002;
+    public int fieldInt18003;
+    public int fieldInt18004;
+    public int fieldInt18005;
+    public int fieldInt18006;
+    public int fieldInt18007;
+    public int fieldInt18008;
+    public int fieldInt18009;
+    public int fieldInt18010;
+    public int fieldInt18011;
+    public int fieldInt18012;
+    public int fieldInt18013;
+    public int fieldInt18014;
+    public int fieldInt18015;
+    public int fieldInt18016;
+    public int fieldInt18017;
+    public int fieldInt18018;
+    public int fieldInt18019;
+    public int fieldInt18020;
+    public int fieldInt18021;
+    public int fieldInt18022;
+    public int fieldInt18023;
+    public int fieldInt18024;
+    public int fieldInt18025;
+    public int fieldInt18026;
+    public int fieldInt18027;
+    public int fieldInt18028;
+    public int fieldInt18029;
+    public int fieldInt18030;
+    public int fieldInt18031;
+    public int fieldInt18032;
+    public int fieldInt18033;
+    public int fieldInt18034;
+    public int fieldInt18035;
+    public int fieldInt18036;
+    public int fieldInt18037;
+    public int fieldInt18038;
+    public int fieldInt18039;
+    public int fieldInt18040;
+    public int fieldInt18041;
+    public int fieldInt18042;
+    public int fieldInt18043;
+    public int fieldInt18044;
+    public int fieldInt18045;
+    public int fieldInt18046;
+    public int fieldInt18047;
+    public int fieldInt18048;
+    public int fieldInt18049;
+    public int fieldInt18050;
+    public int fieldInt18051;
+    public int fieldInt18052;
+    public int fieldInt18053;
+    public int fieldInt18054;
+    public int fieldInt18055;
+    public int fieldInt18056;
+    public int fieldInt18057;
+    public int fieldInt18058;
+    public int fieldInt18059;
+    public int fieldInt18060;
+    public int fieldInt18061;
+    public int fieldInt18062;
+    public int fieldInt18063;
+    public int fieldInt18064;
+    public int fieldInt18065;
+    public int fieldInt18066;
+    public int fieldInt18067;
+    public int fieldInt18068;
+    public int fieldInt18069;
+    public int fieldInt18070;
+    public int fieldInt18071;
+    public int fieldInt18072;
+    public int fieldInt18073;
+    public int fieldInt18074;
+    public int fieldInt18075;
+    public int fieldInt18076;
+    public int fieldInt18077;
+    public int fieldInt18078;
+    public int fieldInt18079;
+    public int fieldInt18080;
+    public int fieldInt18081;
+    public int fieldInt18082;
+    public int fieldInt18083;
+    public int fieldInt18084;
+    public int fieldInt18085;
+    public int fieldInt18086;
+    public int fieldInt18087;
+    public int fieldInt18088;
+    public int fieldInt18089;
+    public int fieldInt18090;
+    public int fieldInt18091;
+    public int fieldInt18092;
+    public int fieldInt18093;
+    public int fieldInt18094;
+    public int fieldInt18095;
+    public int fieldInt18096;
+    public int fieldInt18097;
+    public int fieldInt18098;
+    public int fieldInt18099;
+    public int fieldInt18100;
+    public int fieldInt18101;
+    public int fieldInt18102;
+    public int fieldInt18103;
+    public int fieldInt18104;
+    public int fieldInt18105;
+    public int fieldInt18106;
+    public int fieldInt18107;
+    public int fieldInt18108;
+    public int fieldInt18109;
+    public int fieldInt18110;
+    public int fieldInt18111;
+    public int fieldInt18112;
+    public int fieldInt18113;
+    public int fieldInt18114;
+    public int fieldInt18115;
+    public int fieldInt18116;
+    public int fieldInt18117;
+    public int fieldInt18118;
+    public int fieldInt18119;
+    public int fieldInt18120;
+    public int fieldInt18121;
+    public int fieldInt18122;
+    public int fieldInt18123;
+    public int fieldInt18124;
+    public int fieldInt18125;
+    public int fieldInt18126;
+    public int fieldInt18127;
+    public int fieldInt18128;
+    public int fieldInt18129;
+    public int fieldInt18130;
+    public int fieldInt18131;
+    public int fieldInt18132;
+    public int fieldInt18133;
+    public int fieldInt18134;
+    public int fieldInt18135;
+    public int fieldInt18136;
+    public int fieldInt18137;
+    public int fieldInt18138;
+    public int fieldInt18139;
+    public int fieldInt18140;
+    public int fieldInt18141;
+    public int fieldInt18142;
+    public int fieldInt18143;
+    public int fieldInt18144;
+    public int fieldInt18145;
+    public int fieldInt18146;
+    public int fieldInt18147;
+    public int fieldInt18148;
+    public int fieldInt18149;
+    public int fieldInt18150;
+    public int fieldInt18151;
+    public int fieldInt18152;
+    public int fieldInt18153;
+    public int fieldInt18154;
+    public int fieldInt18155;
+    public int fieldInt18156;
+    public int fieldInt18157;
+    public int fieldInt18158;
+    public int fieldInt18159;
+    public int fieldInt18160;
+    public int fieldInt18161;
+    public int fieldInt18162;
+    public int fieldInt18163;
+    public int fieldInt18164;
+    public int fieldInt18165;
+    public int fieldInt18166;
+    public int fieldInt18167;
+    public int fieldInt18168;
+    public int fieldInt18169;
+    public int fieldInt18170;
+    public int fieldInt18171;
+    public int fieldInt18172;
+    public int fieldInt18173;
+    public int fieldInt18174;
+    public int fieldInt18175;
+    public int fieldInt18176;
+    public int fieldInt18177;
+    public int fieldInt18178;
+    public int fieldInt18179;
+    public int fieldInt18180;
+    public int fieldInt18181;
+    public int fieldInt18182;
+    public int fieldInt18183;
+    public int fieldInt18184;
+    public int fieldInt18185;
+    public int fieldInt18186;
+    public int fieldInt18187;
+    public int fieldInt18188;
+    public int fieldInt18189;
+    public int fieldInt18190;
+    public int fieldInt18191;
+    public int fieldInt18192;
+    public int fieldInt18193;
+    public int fieldInt18194;
+    public int fieldInt18195;
+    public int fieldInt18196;
+    public int fieldInt18197;
+    public int fieldInt18198;
+    public int fieldInt18199;
+    public int fieldInt18200;
+    public int fieldInt18201;
+    public int fieldInt18202;
+    public int fieldInt18203;
+    public int fieldInt18204;
+    public int fieldInt18205;
+    public int fieldInt18206;
+    public int fieldInt18207;
+    public int fieldInt18208;
+    public int fieldInt18209;
+    public int fieldInt18210;
+    public int fieldInt18211;
+    public int fieldInt18212;
+    public int fieldInt18213;
+    public int fieldInt18214;
+    public int fieldInt18215;
+    public int fieldInt18216;
+    public int fieldInt18217;
+    public int fieldInt18218;
+    public int fieldInt18219;
+    public int fieldInt18220;
+    public int fieldInt18221;
+    public int fieldInt18222;
+    public int fieldInt18223;
+    public int fieldInt18224;
+    public int fieldInt18225;
+    public int fieldInt18226;
+    public int fieldInt18227;
+    public int fieldInt18228;
+    public int fieldInt18229;
+    public int fieldInt18230;
+    public int fieldInt18231;
+    public int fieldInt18232;
+    public int fieldInt18233;
+    public int fieldInt18234;
+    public int fieldInt18235;
+    public int fieldInt18236;
+    public int fieldInt18237;
+    public int fieldInt18238;
+    public int fieldInt18239;
+    public int fieldInt18240;
+    public int fieldInt18241;
+    public int fieldInt18242;
+    public int fieldInt18243;
+    public int fieldInt18244;
+    public int fieldInt18245;
+    public int fieldInt18246;
+    public int fieldInt18247;
+    public int fieldInt18248;
+    public int fieldInt18249;
+    public int fieldInt18250;
+    public int fieldInt18251;
+    public int fieldInt18252;
+    public int fieldInt18253;
+    public int fieldInt18254;
+    public int fieldInt18255;
+    public int fieldInt18256;
+    public int fieldInt18257;
+    public int fieldInt18258;
+    public int fieldInt18259;
+    public int fieldInt18260;
+    public int fieldInt18261;
+    public int fieldInt18262;
+    public int fieldInt18263;
+    public int fieldInt18264;
+    public int fieldInt18265;
+    public int fieldInt18266;
+    public int fieldInt18267;
+    public int fieldInt18268;
+    public int fieldInt18269;
+    public int fieldInt18270;
+    public int fieldInt18271;
+    public int fieldInt18272;
+    public int fieldInt18273;
+    public int fieldInt18274;
+    public int fieldInt18275;
+    public int fieldInt18276;
+    public int fieldInt18277;
+    public int fieldInt18278;
+    public int fieldInt18279;
+    public int fieldInt18280;
+    public int fieldInt18281;
+    public int fieldInt18282;
+    public int fieldInt18283;
+    public int fieldInt18284;
+    public int fieldInt18285;
+    public int fieldInt18286;
+    public int fieldInt18287;
+    public int fieldInt18288;
+    public int fieldInt18289;
+    public int fieldInt18290;
+    public int fieldInt18291;
+    public int fieldInt18292;
+    public int fieldInt18293;
+    public int fieldInt18294;
+    public int fieldInt18295;
+    public int fieldInt18296;
+    public int fieldInt18297;
+    public int fieldInt18298;
+    public int fieldInt18299;
+    public int fieldInt18300;
+    public int fieldInt18301;
+    public int fieldInt18302;
+    public int fieldInt18303;
+    public int fieldInt18304;
+    public int fieldInt18305;
+    public int fieldInt18306;
+    public int fieldInt18307;
+    public int fieldInt18308;
+    public int fieldInt18309;
+    public int fieldInt18310;
+    public int fieldInt18311;
+    public int fieldInt18312;
+    public int fieldInt18313;
+    public int fieldInt18314;
+    public int fieldInt18315;
+    public int fieldInt18316;
+    public int fieldInt18317;
+    public int fieldInt18318;
+    public int fieldInt18319;
+    public int fieldInt18320;
+    public int fieldInt18321;
+    public int fieldInt18322;
+    public int fieldInt18323;
+    public int fieldInt18324;
+    public int fieldInt18325;
+    public int fieldInt18326;
+    public int fieldInt18327;
+    public int fieldInt18328;
+    public int fieldInt18329;
+    public int fieldInt18330;
+    public int fieldInt18331;
+    public int fieldInt18332;
+    public int fieldInt18333;
+    public int fieldInt18334;
+    public int fieldInt18335;
+    public int fieldInt18336;
+    public int fieldInt18337;
+    public int fieldInt18338;
+    public int fieldInt18339;
+    public int fieldInt18340;
+    public int fieldInt18341;
+    public int fieldInt18342;
+    public int fieldInt18343;
+    public int fieldInt18344;
+    public int fieldInt18345;
+    public int fieldInt18346;
+    public int fieldInt18347;
+    public int fieldInt18348;
+    public int fieldInt18349;
+    public int fieldInt18350;
+    public int fieldInt18351;
+    public int fieldInt18352;
+    public int fieldInt18353;
+    public int fieldInt18354;
+    public int fieldInt18355;
+    public int fieldInt18356;
+    public int fieldInt18357;
+    public int fieldInt18358;
+    public int fieldInt18359;
+    public int fieldInt18360;
+    public int fieldInt18361;
+    public int fieldInt18362;
+    public int fieldInt18363;
+    public int fieldInt18364;
+    public int fieldInt18365;
+    public int fieldInt18366;
+    public int fieldInt18367;
+    public int fieldInt18368;
+    public int fieldInt18369;
+    public int fieldInt18370;
+    public int fieldInt18371;
+    public int fieldInt18372;
+    public int fieldInt18373;
+    public int fieldInt18374;
+    public int fieldInt18375;
+    public int fieldInt18376;
+    public int fieldInt18377;
+    public int fieldInt18378;
+    public int fieldInt18379;
+    public int fieldInt18380;
+    public int fieldInt18381;
+    public int fieldInt18382;
+    public int fieldInt18383;
+    public int fieldInt18384;
+    public int fieldInt18385;
+    public int fieldInt18386;
+    public int fieldInt18387;
+    public int fieldInt18388;
+    public int fieldInt18389;
+    public int fieldInt18390;
+    public int fieldInt18391;
+    public int fieldInt18392;
+    public int fieldInt18393;
+    public int fieldInt18394;
+    public int fieldInt18395;
+    public int fieldInt18396;
+    public int fieldInt18397;
+    public int fieldInt18398;
+    public int fieldInt18399;
+    public int fieldInt18400;
+    public int fieldInt18401;
+    public int fieldInt18402;
+    public int fieldInt18403;
+    public int fieldInt18404;
+    public int fieldInt18405;
+    public int fieldInt18406;
+    public int fieldInt18407;
+    public int fieldInt18408;
+    public int fieldInt18409;
+    public int fieldInt18410;
+    public int fieldInt18411;
+    public int fieldInt18412;
+    public int fieldInt18413;
+    public int fieldInt18414;
+    public int fieldInt18415;
+    public int fieldInt18416;
+    public int fieldInt18417;
+    public int fieldInt18418;
+    public int fieldInt18419;
+    public int fieldInt18420;
+    public int fieldInt18421;
+    public int fieldInt18422;
+    public int fieldInt18423;
+    public int fieldInt18424;
+    public int fieldInt18425;
+    public int fieldInt18426;
+    public int fieldInt18427;
+    public int fieldInt18428;
+    public int fieldInt18429;
+    public int fieldInt18430;
+    public int fieldInt18431;
+    public int fieldInt18432;
+    public int fieldInt18433;
+    public int fieldInt18434;
+    public int fieldInt18435;
+    public int fieldInt18436;
+    public int fieldInt18437;
+    public int fieldInt18438;
+    public int fieldInt18439;
+    public int fieldInt18440;
+    public int fieldInt18441;
+    public int fieldInt18442;
+    public int fieldInt18443;
+    public int fieldInt18444;
+    public int fieldInt18445;
+    public int fieldInt18446;
+    public int fieldInt18447;
+    public int fieldInt18448;
+    public int fieldInt18449;
+    public int fieldInt18450;
+    public int fieldInt18451;
+    public int fieldInt18452;
+    public int fieldInt18453;
+    public int fieldInt18454;
+    public int fieldInt18455;
+    public int fieldInt18456;
+    public int fieldInt18457;
+    public int fieldInt18458;
+    public int fieldInt18459;
+    public int fieldInt18460;
+    public int fieldInt18461;
+    public int fieldInt18462;
+    public int fieldInt18463;
+    public int fieldInt18464;
+    public int fieldInt18465;
+    public int fieldInt18466;
+    public int fieldInt18467;
+    public int fieldInt18468;
+    public int fieldInt18469;
+    public int fieldInt18470;
+    public int fieldInt18471;
+    public int fieldInt18472;
+    public int fieldInt18473;
+    public int fieldInt18474;
+    public int fieldInt18475;
+    public int fieldInt18476;
+    public int fieldInt18477;
+    public int fieldInt18478;
+    public int fieldInt18479;
+    public int fieldInt18480;
+    public int fieldInt18481;
+    public int fieldInt18482;
+    public int fieldInt18483;
+    public int fieldInt18484;
+    public int fieldInt18485;
+    public int fieldInt18486;
+    public int fieldInt18487;
+    public int fieldInt18488;
+    public int fieldInt18489;
+    public int fieldInt18490;
+    public int fieldInt18491;
+    public int fieldInt18492;
+    public int fieldInt18493;
+    public int fieldInt18494;
+    public int fieldInt18495;
+    public int fieldInt18496;
+    public int fieldInt18497;
+    public int fieldInt18498;
+    public int fieldInt18499;
+    public int fieldInt18500;
+    public int fieldInt18501;
+    public int fieldInt18502;
+    public int fieldInt18503;
+    public int fieldInt18504;
+    public int fieldInt18505;
+    public int fieldInt18506;
+    public int fieldInt18507;
+    public int fieldInt18508;
+    public int fieldInt18509;
+    public int fieldInt18510;
+    public int fieldInt18511;
+    public int fieldInt18512;
+    public int fieldInt18513;
+    public int fieldInt18514;
+    public int fieldInt18515;
+    public int fieldInt18516;
+    public int fieldInt18517;
+    public int fieldInt18518;
+    public int fieldInt18519;
+    public int fieldInt18520;
+    public int fieldInt18521;
+    public int fieldInt18522;
+    public int fieldInt18523;
+    public int fieldInt18524;
+    public int fieldInt18525;
+    public int fieldInt18526;
+    public int fieldInt18527;
+    public int fieldInt18528;
+    public int fieldInt18529;
+    public int fieldInt18530;
+    public int fieldInt18531;
+    public int fieldInt18532;
+    public int fieldInt18533;
+    public int fieldInt18534;
+    public int fieldInt18535;
+    public int fieldInt18536;
+    public int fieldInt18537;
+    public int fieldInt18538;
+    public int fieldInt18539;
+    public int fieldInt18540;
+    public int fieldInt18541;
+    public int fieldInt18542;
+    public int fieldInt18543;
+    public int fieldInt18544;
+    public int fieldInt18545;
+    public int fieldInt18546;
+    public int fieldInt18547;
+    public int fieldInt18548;
+    public int fieldInt18549;
+    public int fieldInt18550;
+    public int fieldInt18551;
+    public int fieldInt18552;
+    public int fieldInt18553;
+    public int fieldInt18554;
+    public int fieldInt18555;
+    public int fieldInt18556;
+    public int fieldInt18557;
+    public int fieldInt18558;
+    public int fieldInt18559;
+    public int fieldInt18560;
+    public int fieldInt18561;
+    public int fieldInt18562;
+    public int fieldInt18563;
+    public int fieldInt18564;
+    public int fieldInt18565;
+    public int fieldInt18566;
+    public int fieldInt18567;
+    public int fieldInt18568;
+    public int fieldInt18569;
+    public int fieldInt18570;
+    public int fieldInt18571;
+    public int fieldInt18572;
+    public int fieldInt18573;
+    public int fieldInt18574;
+    public int fieldInt18575;
+    public int fieldInt18576;
+    public int fieldInt18577;
+    public int fieldInt18578;
+    public int fieldInt18579;
+    public int fieldInt18580;
+    public int fieldInt18581;
+    public int fieldInt18582;
+    public int fieldInt18583;
+    public int fieldInt18584;
+    public int fieldInt18585;
+    public int fieldInt18586;
+    public int fieldInt18587;
+    public int fieldInt18588;
+    public int fieldInt18589;
+    public int fieldInt18590;
+    public int fieldInt18591;
+    public int fieldInt18592;
+    public int fieldInt18593;
+    public int fieldInt18594;
+    public int fieldInt18595;
+    public int fieldInt18596;
+    public int fieldInt18597;
+    public int fieldInt18598;
+    public int fieldInt18599;
+    public int fieldInt18600;
+    public int fieldInt18601;
+    public int fieldInt18602;
+    public int fieldInt18603;
+    public int fieldInt18604;
+    public int fieldInt18605;
+    public int fieldInt18606;
+    public int fieldInt18607;
+    public int fieldInt18608;
+    public int fieldInt18609;
+    public int fieldInt18610;
+    public int fieldInt18611;
+    public int fieldInt18612;
+    public int fieldInt18613;
+    public int fieldInt18614;
+    public int fieldInt18615;
+    public int fieldInt18616;
+    public int fieldInt18617;
+    public int fieldInt18618;
+    public int fieldInt18619;
+    public int fieldInt18620;
+    public int fieldInt18621;
+    public int fieldInt18622;
+    public int fieldInt18623;
+    public int fieldInt18624;
+    public int fieldInt18625;
+    public int fieldInt18626;
+    public int fieldInt18627;
+    public int fieldInt18628;
+    public int fieldInt18629;
+    public int fieldInt18630;
+    public int fieldInt18631;
+    public int fieldInt18632;
+    public int fieldInt18633;
+    public int fieldInt18634;
+    public int fieldInt18635;
+    public int fieldInt18636;
+    public int fieldInt18637;
+    public int fieldInt18638;
+    public int fieldInt18639;
+    public int fieldInt18640;
+    public int fieldInt18641;
+    public int fieldInt18642;
+    public int fieldInt18643;
+    public int fieldInt18644;
+    public int fieldInt18645;
+    public int fieldInt18646;
+    public int fieldInt18647;
+    public int fieldInt18648;
+    public int fieldInt18649;
+    public int fieldInt18650;
+    public int fieldInt18651;
+    public int fieldInt18652;
+    public int fieldInt18653;
+    public int fieldInt18654;
+    public int fieldInt18655;
+    public int fieldInt18656;
+    public int fieldInt18657;
+    public int fieldInt18658;
+    public int fieldInt18659;
+    public int fieldInt18660;
+    public int fieldInt18661;
+    public int fieldInt18662;
+    public int fieldInt18663;
+    public int fieldInt18664;
+    public int fieldInt18665;
+    public int fieldInt18666;
+    public int fieldInt18667;
+    public int fieldInt18668;
+    public int fieldInt18669;
+    public int fieldInt18670;
+    public int fieldInt18671;
+    public int fieldInt18672;
+    public int fieldInt18673;
+    public int fieldInt18674;
+    public int fieldInt18675;
+    public int fieldInt18676;
+    public int fieldInt18677;
+    public int fieldInt18678;
+    public int fieldInt18679;
+    public int fieldInt18680;
+    public int fieldInt18681;
+    public int fieldInt18682;
+    public int fieldInt18683;
+    public int fieldInt18684;
+    public int fieldInt18685;
+    public int fieldInt18686;
+    public int fieldInt18687;
+    public int fieldInt18688;
+    public int fieldInt18689;
+    public int fieldInt18690;
+    public int fieldInt18691;
+    public int fieldInt18692;
+    public int fieldInt18693;
+    public int fieldInt18694;
+    public int fieldInt18695;
+    public int fieldInt18696;
+    public int fieldInt18697;
+    public int fieldInt18698;
+    public int fieldInt18699;
+    public int fieldInt18700;
+    public int fieldInt18701;
+    public int fieldInt18702;
+    public int fieldInt18703;
+    public int fieldInt18704;
+    public int fieldInt18705;
+    public int fieldInt18706;
+    public int fieldInt18707;
+    public int fieldInt18708;
+    public int fieldInt18709;
+    public int fieldInt18710;
+    public int fieldInt18711;
+    public int fieldInt18712;
+    public int fieldInt18713;
+    public int fieldInt18714;
+    public int fieldInt18715;
+    public int fieldInt18716;
+    public int fieldInt18717;
+    public int fieldInt18718;
+    public int fieldInt18719;
+    public int fieldInt18720;
+    public int fieldInt18721;
+    public int fieldInt18722;
+    public int fieldInt18723;
+    public int fieldInt18724;
+    public int fieldInt18725;
+    public int fieldInt18726;
+    public int fieldInt18727;
+    public int fieldInt18728;
+    public int fieldInt18729;
+    public int fieldInt18730;
+    public int fieldInt18731;
+    public int fieldInt18732;
+    public int fieldInt18733;
+    public int fieldInt18734;
+    public int fieldInt18735;
+    public int fieldInt18736;
+    public int fieldInt18737;
+    public int fieldInt18738;
+    public int fieldInt18739;
+    public int fieldInt18740;
+    public int fieldInt18741;
+    public int fieldInt18742;
+    public int fieldInt18743;
+    public int fieldInt18744;
+    public int fieldInt18745;
+    public int fieldInt18746;
+    public int fieldInt18747;
+    public int fieldInt18748;
+    public int fieldInt18749;
+    public int fieldInt18750;
+    public int fieldInt18751;
+    public int fieldInt18752;
+    public int fieldInt18753;
+    public int fieldInt18754;
+    public int fieldInt18755;
+    public int fieldInt18756;
+    public int fieldInt18757;
+    public int fieldInt18758;
+    public int fieldInt18759;
+    public int fieldInt18760;
+    public int fieldInt18761;
+    public int fieldInt18762;
+    public int fieldInt18763;
+    public int fieldInt18764;
+    public int fieldInt18765;
+    public int fieldInt18766;
+    public int fieldInt18767;
+    public int fieldInt18768;
+    public int fieldInt18769;
+    public int fieldInt18770;
+    public int fieldInt18771;
+    public int fieldInt18772;
+    public int fieldInt18773;
+    public int fieldInt18774;
+    public int fieldInt18775;
+    public int fieldInt18776;
+    public int fieldInt18777;
+    public int fieldInt18778;
+    public int fieldInt18779;
+    public int fieldInt18780;
+    public int fieldInt18781;
+    public int fieldInt18782;
+    public int fieldInt18783;
+    public int fieldInt18784;
+    public int fieldInt18785;
+    public int fieldInt18786;
+    public int fieldInt18787;
+    public int fieldInt18788;
+    public int fieldInt18789;
+    public int fieldInt18790;
+    public int fieldInt18791;
+    public int fieldInt18792;
+    public int fieldInt18793;
+    public int fieldInt18794;
+    public int fieldInt18795;
+    public int fieldInt18796;
+    public int fieldInt18797;
+    public int fieldInt18798;
+    public int fieldInt18799;
+    public int fieldInt18800;
+    public int fieldInt18801;
+    public int fieldInt18802;
+    public int fieldInt18803;
+    public int fieldInt18804;
+    public int fieldInt18805;
+    public int fieldInt18806;
+    public int fieldInt18807;
+    public int fieldInt18808;
+    public int fieldInt18809;
+    public int fieldInt18810;
+    public int fieldInt18811;
+    public int fieldInt18812;
+    public int fieldInt18813;
+    public int fieldInt18814;
+    public int fieldInt18815;
+    public int fieldInt18816;
+    public int fieldInt18817;
+    public int fieldInt18818;
+    public int fieldInt18819;
+    public int fieldInt18820;
+    public int fieldInt18821;
+    public int fieldInt18822;
+    public int fieldInt18823;
+    public int fieldInt18824;
+    public int fieldInt18825;
+    public int fieldInt18826;
+    public int fieldInt18827;
+    public int fieldInt18828;
+    public int fieldInt18829;
+    public int fieldInt18830;
+    public int fieldInt18831;
+    public int fieldInt18832;
+    public int fieldInt18833;
+    public int fieldInt18834;
+    public int fieldInt18835;
+    public int fieldInt18836;
+    public int fieldInt18837;
+    public int fieldInt18838;
+    public int fieldInt18839;
+    public int fieldInt18840;
+    public int fieldInt18841;
+    public int fieldInt18842;
+    public int fieldInt18843;
+    public int fieldInt18844;
+    public int fieldInt18845;
+    public int fieldInt18846;
+    public int fieldInt18847;
+    public int fieldInt18848;
+    public int fieldInt18849;
+    public int fieldInt18850;
+    public int fieldInt18851;
+    public int fieldInt18852;
+    public int fieldInt18853;
+    public int fieldInt18854;
+    public int fieldInt18855;
+    public int fieldInt18856;
+    public int fieldInt18857;
+    public int fieldInt18858;
+    public int fieldInt18859;
+    public int fieldInt18860;
+    public int fieldInt18861;
+    public int fieldInt18862;
+    public int fieldInt18863;
+    public int fieldInt18864;
+    public int fieldInt18865;
+    public int fieldInt18866;
+    public int fieldInt18867;
+    public int fieldInt18868;
+    public int fieldInt18869;
+    public int fieldInt18870;
+    public int fieldInt18871;
+    public int fieldInt18872;
+    public int fieldInt18873;
+    public int fieldInt18874;
+    public int fieldInt18875;
+    public int fieldInt18876;
+    public int fieldInt18877;
+    public int fieldInt18878;
+    public int fieldInt18879;
+    public int fieldInt18880;
+    public int fieldInt18881;
+    public int fieldInt18882;
+    public int fieldInt18883;
+    public int fieldInt18884;
+    public int fieldInt18885;
+    public int fieldInt18886;
+    public int fieldInt18887;
+    public int fieldInt18888;
+    public int fieldInt18889;
+    public int fieldInt18890;
+    public int fieldInt18891;
+    public int fieldInt18892;
+    public int fieldInt18893;
+    public int fieldInt18894;
+    public int fieldInt18895;
+    public int fieldInt18896;
+    public int fieldInt18897;
+    public int fieldInt18898;
+    public int fieldInt18899;
+    public int fieldInt18900;
+    public int fieldInt18901;
+    public int fieldInt18902;
+    public int fieldInt18903;
+    public int fieldInt18904;
+    public int fieldInt18905;
+    public int fieldInt18906;
+    public int fieldInt18907;
+    public int fieldInt18908;
+    public int fieldInt18909;
+    public int fieldInt18910;
+    public int fieldInt18911;
+    public int fieldInt18912;
+    public int fieldInt18913;
+    public int fieldInt18914;
+    public int fieldInt18915;
+    public int fieldInt18916;
+    public int fieldInt18917;
+    public int fieldInt18918;
+    public int fieldInt18919;
+    public int fieldInt18920;
+    public int fieldInt18921;
+    public int fieldInt18922;
+    public int fieldInt18923;
+    public int fieldInt18924;
+    public int fieldInt18925;
+    public int fieldInt18926;
+    public int fieldInt18927;
+    public int fieldInt18928;
+    public int fieldInt18929;
+    public int fieldInt18930;
+    public int fieldInt18931;
+    public int fieldInt18932;
+    public int fieldInt18933;
+    public int fieldInt18934;
+    public int fieldInt18935;
+    public int fieldInt18936;
+    public int fieldInt18937;
+    public int fieldInt18938;
+    public int fieldInt18939;
+    public int fieldInt18940;
+    public int fieldInt18941;
+    public int fieldInt18942;
+    public int fieldInt18943;
+    public int fieldInt18944;
+    public int fieldInt18945;
+    public int fieldInt18946;
+    public int fieldInt18947;
+    public int fieldInt18948;
+    public int fieldInt18949;
+    public int fieldInt18950;
+    public int fieldInt18951;
+    public int fieldInt18952;
+    public int fieldInt18953;
+    public int fieldInt18954;
+    public int fieldInt18955;
+    public int fieldInt18956;
+    public int fieldInt18957;
+    public int fieldInt18958;
+    public int fieldInt18959;
+    public int fieldInt18960;
+    public int fieldInt18961;
+    public int fieldInt18962;
+    public int fieldInt18963;
+    public int fieldInt18964;
+    public int fieldInt18965;
+    public int fieldInt18966;
+    public int fieldInt18967;
+    public int fieldInt18968;
+    public int fieldInt18969;
+    public int fieldInt18970;
+    public int fieldInt18971;
+    public int fieldInt18972;
+    public int fieldInt18973;
+    public int fieldInt18974;
+    public int fieldInt18975;
+    public int fieldInt18976;
+    public int fieldInt18977;
+    public int fieldInt18978;
+    public int fieldInt18979;
+    public int fieldInt18980;
+    public int fieldInt18981;
+    public int fieldInt18982;
+    public int fieldInt18983;
+    public int fieldInt18984;
+    public int fieldInt18985;
+    public int fieldInt18986;
+    public int fieldInt18987;
+    public int fieldInt18988;
+    public int fieldInt18989;
+    public int fieldInt18990;
+    public int fieldInt18991;
+    public int fieldInt18992;
+    public int fieldInt18993;
+    public int fieldInt18994;
+    public int fieldInt18995;
+    public int fieldInt18996;
+    public int fieldInt18997;
+    public int fieldInt18998;
+    public int fieldInt18999;
+    public int fieldInt19000;
+    public int fieldInt19001;
+    public int fieldInt19002;
+    public int fieldInt19003;
+    public int fieldInt19004;
+    public int fieldInt19005;
+    public int fieldInt19006;
+    public int fieldInt19007;
+    public int fieldInt19008;
+    public int fieldInt19009;
+    public int fieldInt19010;
+    public int fieldInt19011;
+    public int fieldInt19012;
+    public int fieldInt19013;
+    public int fieldInt19014;
+    public int fieldInt19015;
+    public int fieldInt19016;
+    public int fieldInt19017;
+    public int fieldInt19018;
+    public int fieldInt19019;
+    public int fieldInt19020;
+    public int fieldInt19021;
+    public int fieldInt19022;
+    public int fieldInt19023;
+    public int fieldInt19024;
+    public int fieldInt19025;
+    public int fieldInt19026;
+    public int fieldInt19027;
+    public int fieldInt19028;
+    public int fieldInt19029;
+    public int fieldInt19030;
+    public int fieldInt19031;
+    public int fieldInt19032;
+    public int fieldInt19033;
+    public int fieldInt19034;
+    public int fieldInt19035;
+    public int fieldInt19036;
+    public int fieldInt19037;
+    public int fieldInt19038;
+    public int fieldInt19039;
+    public int fieldInt19040;
+    public int fieldInt19041;
+    public int fieldInt19042;
+    public int fieldInt19043;
+    public int fieldInt19044;
+    public int fieldInt19045;
+    public int fieldInt19046;
+    public int fieldInt19047;
+    public int fieldInt19048;
+    public int fieldInt19049;
+    public int fieldInt19050;
+    public int fieldInt19051;
+    public int fieldInt19052;
+    public int fieldInt19053;
+    public int fieldInt19054;
+    public int fieldInt19055;
+    public int fieldInt19056;
+    public int fieldInt19057;
+    public int fieldInt19058;
+    public int fieldInt19059;
+    public int fieldInt19060;
+    public int fieldInt19061;
+    public int fieldInt19062;
+    public int fieldInt19063;
+    public int fieldInt19064;
+    public int fieldInt19065;
+    public int fieldInt19066;
+    public int fieldInt19067;
+    public int fieldInt19068;
+    public int fieldInt19069;
+    public int fieldInt19070;
+    public int fieldInt19071;
+    public int fieldInt19072;
+    public int fieldInt19073;
+    public int fieldInt19074;
+    public int fieldInt19075;
+    public int fieldInt19076;
+    public int fieldInt19077;
+    public int fieldInt19078;
+    public int fieldInt19079;
+    public int fieldInt19080;
+    public int fieldInt19081;
+    public int fieldInt19082;
+    public int fieldInt19083;
+    public int fieldInt19084;
+    public int fieldInt19085;
+    public int fieldInt19086;
+    public int fieldInt19087;
+    public int fieldInt19088;
+    public int fieldInt19089;
+    public int fieldInt19090;
+    public int fieldInt19091;
+    public int fieldInt19092;
+    public int fieldInt19093;
+    public int fieldInt19094;
+    public int fieldInt19095;
+    public int fieldInt19096;
+    public int fieldInt19097;
+    public int fieldInt19098;
+    public int fieldInt19099;
+    public int fieldInt19100;
+    public int fieldInt19101;
+    public int fieldInt19102;
+    public int fieldInt19103;
+    public int fieldInt19104;
+    public int fieldInt19105;
+    public int fieldInt19106;
+    public int fieldInt19107;
+    public int fieldInt19108;
+    public int fieldInt19109;
+    public int fieldInt19110;
+    public int fieldInt19111;
+    public int fieldInt19112;
+    public int fieldInt19113;
+    public int fieldInt19114;
+    public int fieldInt19115;
+    public int fieldInt19116;
+    public int fieldInt19117;
+    public int fieldInt19118;
+    public int fieldInt19119;
+    public int fieldInt19120;
+    public int fieldInt19121;
+    public int fieldInt19122;
+    public int fieldInt19123;
+    public int fieldInt19124;
+    public int fieldInt19125;
+    public int fieldInt19126;
+    public int fieldInt19127;
+    public int fieldInt19128;
+    public int fieldInt19129;
+    public int fieldInt19130;
+    public int fieldInt19131;
+    public int fieldInt19132;
+    public int fieldInt19133;
+    public int fieldInt19134;
+    public int fieldInt19135;
+    public int fieldInt19136;
+    public int fieldInt19137;
+    public int fieldInt19138;
+    public int fieldInt19139;
+    public int fieldInt19140;
+    public int fieldInt19141;
+    public int fieldInt19142;
+    public int fieldInt19143;
+    public int fieldInt19144;
+    public int fieldInt19145;
+    public int fieldInt19146;
+    public int fieldInt19147;
+    public int fieldInt19148;
+    public int fieldInt19149;
+    public int fieldInt19150;
+    public int fieldInt19151;
+    public int fieldInt19152;
+    public int fieldInt19153;
+    public int fieldInt19154;
+    public int fieldInt19155;
+    public int fieldInt19156;
+    public int fieldInt19157;
+    public int fieldInt19158;
+    public int fieldInt19159;
+    public int fieldInt19160;
+    public int fieldInt19161;
+    public int fieldInt19162;
+    public int fieldInt19163;
+    public int fieldInt19164;
+    public int fieldInt19165;
+    public int fieldInt19166;
+    public int fieldInt19167;
+    public int fieldInt19168;
+    public int fieldInt19169;
+    public int fieldInt19170;
+    public int fieldInt19171;
+    public int fieldInt19172;
+    public int fieldInt19173;
+    public int fieldInt19174;
+    public int fieldInt19175;
+    public int fieldInt19176;
+    public int fieldInt19177;
+    public int fieldInt19178;
+    public int fieldInt19179;
+    public int fieldInt19180;
+    public int fieldInt19181;
+    public int fieldInt19182;
+    public int fieldInt19183;
+    public int fieldInt19184;
+    public int fieldInt19185;
+    public int fieldInt19186;
+    public int fieldInt19187;
+    public int fieldInt19188;
+    public int fieldInt19189;
+    public int fieldInt19190;
+    public int fieldInt19191;
+    public int fieldInt19192;
+    public int fieldInt19193;
+    public int fieldInt19194;
+    public int fieldInt19195;
+    public int fieldInt19196;
+    public int fieldInt19197;
+    public int fieldInt19198;
+    public int fieldInt19199;
+    public int fieldInt19200;
+    public int fieldInt19201;
+    public int fieldInt19202;
+    public int fieldInt19203;
+    public int fieldInt19204;
+    public int fieldInt19205;
+    public int fieldInt19206;
+    public int fieldInt19207;
+    public int fieldInt19208;
+    public int fieldInt19209;
+    public int fieldInt19210;
+    public int fieldInt19211;
+    public int fieldInt19212;
+    public int fieldInt19213;
+    public int fieldInt19214;
+    public int fieldInt19215;
+    public int fieldInt19216;
+    public int fieldInt19217;
+    public int fieldInt19218;
+    public int fieldInt19219;
+    public int fieldInt19220;
+    public int fieldInt19221;
+    public int fieldInt19222;
+    public int fieldInt19223;
+    public int fieldInt19224;
+    public int fieldInt19225;
+    public int fieldInt19226;
+    public int fieldInt19227;
+    public int fieldInt19228;
+    public int fieldInt19229;
+    public int fieldInt19230;
+    public int fieldInt19231;
+    public int fieldInt19232;
+    public int fieldInt19233;
+    public int fieldInt19234;
+    public int fieldInt19235;
+    public int fieldInt19236;
+    public int fieldInt19237;
+    public int fieldInt19238;
+    public int fieldInt19239;
+    public int fieldInt19240;
+    public int fieldInt19241;
+    public int fieldInt19242;
+    public int fieldInt19243;
+    public int fieldInt19244;
+    public int fieldInt19245;
+    public int fieldInt19246;
+    public int fieldInt19247;
+    public int fieldInt19248;
+    public int fieldInt19249;
+    public int fieldInt19250;
+    public int fieldInt19251;
+    public int fieldInt19252;
+    public int fieldInt19253;
+    public int fieldInt19254;
+    public int fieldInt19255;
+    public int fieldInt19256;
+    public int fieldInt19257;
+    public int fieldInt19258;
+    public int fieldInt19259;
+    public int fieldInt19260;
+    public int fieldInt19261;
+    public int fieldInt19262;
+    public int fieldInt19263;
+    public int fieldInt19264;
+    public int fieldInt19265;
+    public int fieldInt19266;
+    public int fieldInt19267;
+    public int fieldInt19268;
+    public int fieldInt19269;
+    public int fieldInt19270;
+    public int fieldInt19271;
+    public int fieldInt19272;
+    public int fieldInt19273;
+    public int fieldInt19274;
+    public int fieldInt19275;
+    public int fieldInt19276;
+    public int fieldInt19277;
+    public int fieldInt19278;
+    public int fieldInt19279;
+    public int fieldInt19280;
+    public int fieldInt19281;
+    public int fieldInt19282;
+    public int fieldInt19283;
+    public int fieldInt19284;
+    public int fieldInt19285;
+    public int fieldInt19286;
+    public int fieldInt19287;
+    public int fieldInt19288;
+    public int fieldInt19289;
+    public int fieldInt19290;
+    public int fieldInt19291;
+    public int fieldInt19292;
+    public int fieldInt19293;
+    public int fieldInt19294;
+    public int fieldInt19295;
+    public int fieldInt19296;
+    public int fieldInt19297;
+    public int fieldInt19298;
+    public int fieldInt19299;
+    public int fieldInt19300;
+    public int fieldInt19301;
+    public int fieldInt19302;
+    public int fieldInt19303;
+    public int fieldInt19304;
+    public int fieldInt19305;
+    public int fieldInt19306;
+    public int fieldInt19307;
+    public int fieldInt19308;
+    public int fieldInt19309;
+    public int fieldInt19310;
+    public int fieldInt19311;
+    public int fieldInt19312;
+    public int fieldInt19313;
+    public int fieldInt19314;
+    public int fieldInt19315;
+    public int fieldInt19316;
+    public int fieldInt19317;
+    public int fieldInt19318;
+    public int fieldInt19319;
+    public int fieldInt19320;
+    public int fieldInt19321;
+    public int fieldInt19322;
+    public int fieldInt19323;
+    public int fieldInt19324;
+    public int fieldInt19325;
+    public int fieldInt19326;
+    public int fieldInt19327;
+    public int fieldInt19328;
+    public int fieldInt19329;
+    public int fieldInt19330;
+    public int fieldInt19331;
+    public int fieldInt19332;
+    public int fieldInt19333;
+    public int fieldInt19334;
+    public int fieldInt19335;
+    public int fieldInt19336;
+    public int fieldInt19337;
+    public int fieldInt19338;
+    public int fieldInt19339;
+    public int fieldInt19340;
+    public int fieldInt19341;
+    public int fieldInt19342;
+    public int fieldInt19343;
+    public int fieldInt19344;
+    public int fieldInt19345;
+    public int fieldInt19346;
+    public int fieldInt19347;
+    public int fieldInt19348;
+    public int fieldInt19349;
+    public int fieldInt19350;
+    public int fieldInt19351;
+    public int fieldInt19352;
+    public int fieldInt19353;
+    public int fieldInt19354;
+    public int fieldInt19355;
+    public int fieldInt19356;
+    public int fieldInt19357;
+    public int fieldInt19358;
+    public int fieldInt19359;
+    public int fieldInt19360;
+    public int fieldInt19361;
+    public int fieldInt19362;
+    public int fieldInt19363;
+    public int fieldInt19364;
+    public int fieldInt19365;
+    public int fieldInt19366;
+    public int fieldInt19367;
+    public int fieldInt19368;
+    public int fieldInt19369;
+    public int fieldInt19370;
+    public int fieldInt19371;
+    public int fieldInt19372;
+    public int fieldInt19373;
+    public int fieldInt19374;
+    public int fieldInt19375;
+    public int fieldInt19376;
+    public int fieldInt19377;
+    public int fieldInt19378;
+    public int fieldInt19379;
+    public int fieldInt19380;
+    public int fieldInt19381;
+    public int fieldInt19382;
+    public int fieldInt19383;
+    public int fieldInt19384;
+    public int fieldInt19385;
+    public int fieldInt19386;
+    public int fieldInt19387;
+    public int fieldInt19388;
+    public int fieldInt19389;
+    public int fieldInt19390;
+    public int fieldInt19391;
+    public int fieldInt19392;
+    public int fieldInt19393;
+    public int fieldInt19394;
+    public int fieldInt19395;
+    public int fieldInt19396;
+    public int fieldInt19397;
+    public int fieldInt19398;
+    public int fieldInt19399;
+    public int fieldInt19400;
+    public int fieldInt19401;
+    public int fieldInt19402;
+    public int fieldInt19403;
+    public int fieldInt19404;
+    public int fieldInt19405;
+    public int fieldInt19406;
+    public int fieldInt19407;
+    public int fieldInt19408;
+    public int fieldInt19409;
+    public int fieldInt19410;
+    public int fieldInt19411;
+    public int fieldInt19412;
+    public int fieldInt19413;
+    public int fieldInt19414;
+    public int fieldInt19415;
+    public int fieldInt19416;
+    public int fieldInt19417;
+    public int fieldInt19418;
+    public int fieldInt19419;
+    public int fieldInt19420;
+    public int fieldInt19421;
+    public int fieldInt19422;
+    public int fieldInt19423;
+    public int fieldInt19424;
+    public int fieldInt19425;
+    public int fieldInt19426;
+    public int fieldInt19427;
+    public int fieldInt19428;
+    public int fieldInt19429;
+    public int fieldInt19430;
+    public int fieldInt19431;
+    public int fieldInt19432;
+    public int fieldInt19433;
+    public int fieldInt19434;
+    public int fieldInt19435;
+    public int fieldInt19436;
+    public int fieldInt19437;
+    public int fieldInt19438;
+    public int fieldInt19439;
+    public int fieldInt19440;
+    public int fieldInt19441;
+    public int fieldInt19442;
+    public int fieldInt19443;
+    public int fieldInt19444;
+    public int fieldInt19445;
+    public int fieldInt19446;
+    public int fieldInt19447;
+    public int fieldInt19448;
+    public int fieldInt19449;
+    public int fieldInt19450;
+    public int fieldInt19451;
+    public int fieldInt19452;
+    public int fieldInt19453;
+    public int fieldInt19454;
+    public int fieldInt19455;
+    public int fieldInt19456;
+    public int fieldInt19457;
+    public int fieldInt19458;
+    public int fieldInt19459;
+    public int fieldInt19460;
+    public int fieldInt19461;
+    public int fieldInt19462;
+    public int fieldInt19463;
+    public int fieldInt19464;
+    public int fieldInt19465;
+    public int fieldInt19466;
+    public int fieldInt19467;
+    public int fieldInt19468;
+    public int fieldInt19469;
+    public int fieldInt19470;
+    public int fieldInt19471;
+    public int fieldInt19472;
+    public int fieldInt19473;
+    public int fieldInt19474;
+    public int fieldInt19475;
+    public int fieldInt19476;
+    public int fieldInt19477;
+    public int fieldInt19478;
+    public int fieldInt19479;
+    public int fieldInt19480;
+    public int fieldInt19481;
+    public int fieldInt19482;
+    public int fieldInt19483;
+    public int fieldInt19484;
+    public int fieldInt19485;
+    public int fieldInt19486;
+    public int fieldInt19487;
+    public int fieldInt19488;
+    public int fieldInt19489;
+    public int fieldInt19490;
+    public int fieldInt19491;
+    public int fieldInt19492;
+    public int fieldInt19493;
+    public int fieldInt19494;
+    public int fieldInt19495;
+    public int fieldInt19496;
+    public int fieldInt19497;
+    public int fieldInt19498;
+    public int fieldInt19499;
+    public int fieldInt19500;
+    public int fieldInt19501;
+    public int fieldInt19502;
+    public int fieldInt19503;
+    public int fieldInt19504;
+    public int fieldInt19505;
+    public int fieldInt19506;
+    public int fieldInt19507;
+    public int fieldInt19508;
+    public int fieldInt19509;
+    public int fieldInt19510;
+    public int fieldInt19511;
+    public int fieldInt19512;
+    public int fieldInt19513;
+    public int fieldInt19514;
+    public int fieldInt19515;
+    public int fieldInt19516;
+    public int fieldInt19517;
+    public int fieldInt19518;
+    public int fieldInt19519;
+    public int fieldInt19520;
+    public int fieldInt19521;
+    public int fieldInt19522;
+    public int fieldInt19523;
+    public int fieldInt19524;
+    public int fieldInt19525;
+    public int fieldInt19526;
+    public int fieldInt19527;
+    public int fieldInt19528;
+    public int fieldInt19529;
+    public int fieldInt19530;
+    public int fieldInt19531;
+    public int fieldInt19532;
+    public int fieldInt19533;
+    public int fieldInt19534;
+    public int fieldInt19535;
+    public int fieldInt19536;
+    public int fieldInt19537;
+    public int fieldInt19538;
+    public int fieldInt19539;
+    public int fieldInt19540;
+    public int fieldInt19541;
+    public int fieldInt19542;
+    public int fieldInt19543;
+    public int fieldInt19544;
+    public int fieldInt19545;
+    public int fieldInt19546;
+    public int fieldInt19547;
+    public int fieldInt19548;
+    public int fieldInt19549;
+    public int fieldInt19550;
+    public int fieldInt19551;
+    public int fieldInt19552;
+    public int fieldInt19553;
+    public int fieldInt19554;
+    public int fieldInt19555;
+    public int fieldInt19556;
+    public int fieldInt19557;
+    public int fieldInt19558;
+    public int fieldInt19559;
+    public int fieldInt19560;
+    public int fieldInt19561;
+    public int fieldInt19562;
+    public int fieldInt19563;
+    public int fieldInt19564;
+    public int fieldInt19565;
+    public int fieldInt19566;
+    public int fieldInt19567;
+    public int fieldInt19568;
+    public int fieldInt19569;
+    public int fieldInt19570;
+    public int fieldInt19571;
+    public int fieldInt19572;
+    public int fieldInt19573;
+    public int fieldInt19574;
+    public int fieldInt19575;
+    public int fieldInt19576;
+    public int fieldInt19577;
+    public int fieldInt19578;
+    public int fieldInt19579;
+    public int fieldInt19580;
+    public int fieldInt19581;
+    public int fieldInt19582;
+    public int fieldInt19583;
+    public int fieldInt19584;
+    public int fieldInt19585;
+    public int fieldInt19586;
+    public int fieldInt19587;
+    public int fieldInt19588;
+    public int fieldInt19589;
+    public int fieldInt19590;
+    public int fieldInt19591;
+    public int fieldInt19592;
+    public int fieldInt19593;
+    public int fieldInt19594;
+    public int fieldInt19595;
+    public int fieldInt19596;
+    public int fieldInt19597;
+    public int fieldInt19598;
+    public int fieldInt19599;
+    public int fieldInt19600;
+    public int fieldInt19601;
+    public int fieldInt19602;
+    public int fieldInt19603;
+    public int fieldInt19604;
+    public int fieldInt19605;
+    public int fieldInt19606;
+    public int fieldInt19607;
+    public int fieldInt19608;
+    public int fieldInt19609;
+    public int fieldInt19610;
+    public int fieldInt19611;
+    public int fieldInt19612;
+    public int fieldInt19613;
+    public int fieldInt19614;
+    public int fieldInt19615;
+    public int fieldInt19616;
+    public int fieldInt19617;
+    public int fieldInt19618;
+    public int fieldInt19619;
+    public int fieldInt19620;
+    public int fieldInt19621;
+    public int fieldInt19622;
+    public int fieldInt19623;
+    public int fieldInt19624;
+    public int fieldInt19625;
+    public int fieldInt19626;
+    public int fieldInt19627;
+    public int fieldInt19628;
+    public int fieldInt19629;
+    public int fieldInt19630;
+    public int fieldInt19631;
+    public int fieldInt19632;
+    public int fieldInt19633;
+    public int fieldInt19634;
+    public int fieldInt19635;
+    public int fieldInt19636;
+    public int fieldInt19637;
+    public int fieldInt19638;
+    public int fieldInt19639;
+    public int fieldInt19640;
+    public int fieldInt19641;
+    public int fieldInt19642;
+    public int fieldInt19643;
+    public int fieldInt19644;
+    public int fieldInt19645;
+    public int fieldInt19646;
+    public int fieldInt19647;
+    public int fieldInt19648;
+    public int fieldInt19649;
+    public int fieldInt19650;
+    public int fieldInt19651;
+    public int fieldInt19652;
+    public int fieldInt19653;
+    public int fieldInt19654;
+    public int fieldInt19655;
+    public int fieldInt19656;
+    public int fieldInt19657;
+    public int fieldInt19658;
+    public int fieldInt19659;
+    public int fieldInt19660;
+    public int fieldInt19661;
+    public int fieldInt19662;
+    public int fieldInt19663;
+    public int fieldInt19664;
+    public int fieldInt19665;
+    public int fieldInt19666;
+    public int fieldInt19667;
+    public int fieldInt19668;
+    public int fieldInt19669;
+    public int fieldInt19670;
+    public int fieldInt19671;
+    public int fieldInt19672;
+    public int fieldInt19673;
+    public int fieldInt19674;
+    public int fieldInt19675;
+    public int fieldInt19676;
+    public int fieldInt19677;
+    public int fieldInt19678;
+    public int fieldInt19679;
+    public int fieldInt19680;
+    public int fieldInt19681;
+    public int fieldInt19682;
+    public int fieldInt19683;
+    public int fieldInt19684;
+    public int fieldInt19685;
+    public int fieldInt19686;
+    public int fieldInt19687;
+    public int fieldInt19688;
+    public int fieldInt19689;
+    public int fieldInt19690;
+    public int fieldInt19691;
+    public int fieldInt19692;
+    public int fieldInt19693;
+    public int fieldInt19694;
+    public int fieldInt19695;
+    public int fieldInt19696;
+    public int fieldInt19697;
+    public int fieldInt19698;
+    public int fieldInt19699;
+    public int fieldInt19700;
+    public int fieldInt19701;
+    public int fieldInt19702;
+    public int fieldInt19703;
+    public int fieldInt19704;
+    public int fieldInt19705;
+    public int fieldInt19706;
+    public int fieldInt19707;
+    public int fieldInt19708;
+    public int fieldInt19709;
+    public int fieldInt19710;
+    public int fieldInt19711;
+    public int fieldInt19712;
+    public int fieldInt19713;
+    public int fieldInt19714;
+    public int fieldInt19715;
+    public int fieldInt19716;
+    public int fieldInt19717;
+    public int fieldInt19718;
+    public int fieldInt19719;
+    public int fieldInt19720;
+    public int fieldInt19721;
+    public int fieldInt19722;
+    public int fieldInt19723;
+    public int fieldInt19724;
+    public int fieldInt19725;
+    public int fieldInt19726;
+    public int fieldInt19727;
+    public int fieldInt19728;
+    public int fieldInt19729;
+    public int fieldInt19730;
+    public int fieldInt19731;
+    public int fieldInt19732;
+    public int fieldInt19733;
+    public int fieldInt19734;
+    public int fieldInt19735;
+    public int fieldInt19736;
+    public int fieldInt19737;
+    public int fieldInt19738;
+    public int fieldInt19739;
+    public int fieldInt19740;
+    public int fieldInt19741;
+    public int fieldInt19742;
+    public int fieldInt19743;
+    public int fieldInt19744;
+    public int fieldInt19745;
+    public int fieldInt19746;
+    public int fieldInt19747;
+    public int fieldInt19748;
+    public int fieldInt19749;
+    public int fieldInt19750;
+    public int fieldInt19751;
+    public int fieldInt19752;
+    public int fieldInt19753;
+    public int fieldInt19754;
+    public int fieldInt19755;
+    public int fieldInt19756;
+    public int fieldInt19757;
+    public int fieldInt19758;
+    public int fieldInt19759;
+    public int fieldInt19760;
+    public int fieldInt19761;
+    public int fieldInt19762;
+    public int fieldInt19763;
+    public int fieldInt19764;
+    public int fieldInt19765;
+    public int fieldInt19766;
+    public int fieldInt19767;
+    public int fieldInt19768;
+    public int fieldInt19769;
+    public int fieldInt19770;
+    public int fieldInt19771;
+    public int fieldInt19772;
+    public int fieldInt19773;
+    public int fieldInt19774;
+    public int fieldInt19775;
+    public int fieldInt19776;
+    public int fieldInt19777;
+    public int fieldInt19778;
+    public int fieldInt19779;
+    public int fieldInt19780;
+    public int fieldInt19781;
+    public int fieldInt19782;
+    public int fieldInt19783;
+    public int fieldInt19784;
+    public int fieldInt19785;
+    public int fieldInt19786;
+    public int fieldInt19787;
+    public int fieldInt19788;
+    public int fieldInt19789;
+    public int fieldInt19790;
+    public int fieldInt19791;
+    public int fieldInt19792;
+    public int fieldInt19793;
+    public int fieldInt19794;
+    public int fieldInt19795;
+    public int fieldInt19796;
+    public int fieldInt19797;
+    public int fieldInt19798;
+    public int fieldInt19799;
+    public int fieldInt19800;
+    public int fieldInt19801;
+    public int fieldInt19802;
+    public int fieldInt19803;
+    public int fieldInt19804;
+    public int fieldInt19805;
+    public int fieldInt19806;
+    public int fieldInt19807;
+    public int fieldInt19808;
+    public int fieldInt19809;
+    public int fieldInt19810;
+    public int fieldInt19811;
+    public int fieldInt19812;
+    public int fieldInt19813;
+    public int fieldInt19814;
+    public int fieldInt19815;
+    public int fieldInt19816;
+    public int fieldInt19817;
+    public int fieldInt19818;
+    public int fieldInt19819;
+    public int fieldInt19820;
+    public int fieldInt19821;
+    public int fieldInt19822;
+    public int fieldInt19823;
+    public int fieldInt19824;
+    public int fieldInt19825;
+    public int fieldInt19826;
+    public int fieldInt19827;
+    public int fieldInt19828;
+    public int fieldInt19829;
+    public int fieldInt19830;
+    public int fieldInt19831;
+    public int fieldInt19832;
+    public int fieldInt19833;
+    public int fieldInt19834;
+    public int fieldInt19835;
+    public int fieldInt19836;
+    public int fieldInt19837;
+    public int fieldInt19838;
+    public int fieldInt19839;
+    public int fieldInt19840;
+    public int fieldInt19841;
+    public int fieldInt19842;
+    public int fieldInt19843;
+    public int fieldInt19844;
+    public int fieldInt19845;
+    public int fieldInt19846;
+    public int fieldInt19847;
+    public int fieldInt19848;
+    public int fieldInt19849;
+    public int fieldInt19850;
+    public int fieldInt19851;
+    public int fieldInt19852;
+    public int fieldInt19853;
+    public int fieldInt19854;
+    public int fieldInt19855;
+    public int fieldInt19856;
+    public int fieldInt19857;
+    public int fieldInt19858;
+    public int fieldInt19859;
+    public int fieldInt19860;
+    public int fieldInt19861;
+    public int fieldInt19862;
+    public int fieldInt19863;
+    public int fieldInt19864;
+    public int fieldInt19865;
+    public int fieldInt19866;
+    public int fieldInt19867;
+    public int fieldInt19868;
+    public int fieldInt19869;
+    public int fieldInt19870;
+    public int fieldInt19871;
+    public int fieldInt19872;
+    public int fieldInt19873;
+    public int fieldInt19874;
+    public int fieldInt19875;
+    public int fieldInt19876;
+    public int fieldInt19877;
+    public int fieldInt19878;
+    public int fieldInt19879;
+    public int fieldInt19880;
+    public int fieldInt19881;
+    public int fieldInt19882;
+    public int fieldInt19883;
+    public int fieldInt19884;
+    public int fieldInt19885;
+    public int fieldInt19886;
+    public int fieldInt19887;
+    public int fieldInt19888;
+    public int fieldInt19889;
+    public int fieldInt19890;
+    public int fieldInt19891;
+    public int fieldInt19892;
+    public int fieldInt19893;
+    public int fieldInt19894;
+    public int fieldInt19895;
+    public int fieldInt19896;
+    public int fieldInt19897;
+    public int fieldInt19898;
+    public int fieldInt19899;
+    public int fieldInt19900;
+    public int fieldInt19901;
+    public int fieldInt19902;
+    public int fieldInt19903;
+    public int fieldInt19904;
+    public int fieldInt19905;
+    public int fieldInt19906;
+    public int fieldInt19907;
+    public int fieldInt19908;
+    public int fieldInt19909;
+    public int fieldInt19910;
+    public int fieldInt19911;
+    public int fieldInt19912;
+    public int fieldInt19913;
+    public int fieldInt19914;
+    public int fieldInt19915;
+    public int fieldInt19916;
+    public int fieldInt19917;
+    public int fieldInt19918;
+    public int fieldInt19919;
+    public int fieldInt19920;
+    public int fieldInt19921;
+    public int fieldInt19922;
+    public int fieldInt19923;
+    public int fieldInt19924;
+    public int fieldInt19925;
+    public int fieldInt19926;
+    public int fieldInt19927;
+    public int fieldInt19928;
+    public int fieldInt19929;
+    public int fieldInt19930;
+    public int fieldInt19931;
+    public int fieldInt19932;
+    public int fieldInt19933;
+    public int fieldInt19934;
+    public int fieldInt19935;
+    public int fieldInt19936;
+    public int fieldInt19937;
+    public int fieldInt19938;
+    public int fieldInt19939;
+    public int fieldInt19940;
+    public int fieldInt19941;
+    public int fieldInt19942;
+    public int fieldInt19943;
+    public int fieldInt19944;
+    public int fieldInt19945;
+    public int fieldInt19946;
+    public int fieldInt19947;
+    public int fieldInt19948;
+    public int fieldInt19949;
+    public int fieldInt19950;
+    public int fieldInt19951;
+    public int fieldInt19952;
+    public int fieldInt19953;
+    public int fieldInt19954;
+    public int fieldInt19955;
+    public int fieldInt19956;
+    public int fieldInt19957;
+    public int fieldInt19958;
+    public int fieldInt19959;
+    public int fieldInt19960;
+    public int fieldInt19961;
+    public int fieldInt19962;
+    public int fieldInt19963;
+    public int fieldInt19964;
+    public int fieldInt19965;
+    public int fieldInt19966;
+    public int fieldInt19967;
+    public int fieldInt19968;
+    public int fieldInt19969;
+    public int fieldInt19970;
+    public int fieldInt19971;
+    public int fieldInt19972;
+    public int fieldInt19973;
+    public int fieldInt19974;
+    public int fieldInt19975;
+    public int fieldInt19976;
+    public int fieldInt19977;
+    public int fieldInt19978;
+    public int fieldInt19979;
+    public int fieldInt19980;
+    public int fieldInt19981;
+    public int fieldInt19982;
+    public int fieldInt19983;
+    public int fieldInt19984;
+    public int fieldInt19985;
+    public int fieldInt19986;
+    public int fieldInt19987;
+    public int fieldInt19988;
+    public int fieldInt19989;
+    public int fieldInt19990;
+    public int fieldInt19991;
+    public int fieldInt19992;
+    public int fieldInt19993;
+    public int fieldInt19994;
+    public int fieldInt19995;
+    public int fieldInt19996;
+    public int fieldInt19997;
+    public int fieldInt19998;
+    public int fieldInt19999;
+    public int fieldInt20000;
+    public int fieldInt20001;
+    public int fieldInt20002;
+    public int fieldInt20003;
+    public int fieldInt20004;
+    public int fieldInt20005;
+    public int fieldInt20006;
+    public int fieldInt20007;
+    public int fieldInt20008;
+    public int fieldInt20009;
+    public int fieldInt20010;
+    public int fieldInt20011;
+    public int fieldInt20012;
+    public int fieldInt20013;
+    public int fieldInt20014;
+    public int fieldInt20015;
+    public int fieldInt20016;
+    public int fieldInt20017;
+    public int fieldInt20018;
+    public int fieldInt20019;
+    public int fieldInt20020;
+    public int fieldInt20021;
+    public int fieldInt20022;
+    public int fieldInt20023;
+    public int fieldInt20024;
+    public int fieldInt20025;
+    public int fieldInt20026;
+    public int fieldInt20027;
+    public int fieldInt20028;
+    public int fieldInt20029;
+    public int fieldInt20030;
+    public int fieldInt20031;
+    public int fieldInt20032;
+    public int fieldInt20033;
+    public int fieldInt20034;
+    public int fieldInt20035;
+    public int fieldInt20036;
+    public int fieldInt20037;
+    public int fieldInt20038;
+    public int fieldInt20039;
+    public int fieldInt20040;
+    public int fieldInt20041;
+    public int fieldInt20042;
+    public int fieldInt20043;
+    public int fieldInt20044;
+    public int fieldInt20045;
+    public int fieldInt20046;
+    public int fieldInt20047;
+    public int fieldInt20048;
+    public int fieldInt20049;
+    public int fieldInt20050;
+    public int fieldInt20051;
+    public int fieldInt20052;
+    public int fieldInt20053;
+    public int fieldInt20054;
+    public int fieldInt20055;
+    public int fieldInt20056;
+    public int fieldInt20057;
+    public int fieldInt20058;
+    public int fieldInt20059;
+    public int fieldInt20060;
+    public int fieldInt20061;
+    public int fieldInt20062;
+    public int fieldInt20063;
+    public int fieldInt20064;
+    public int fieldInt20065;
+    public int fieldInt20066;
+    public int fieldInt20067;
+    public int fieldInt20068;
+    public int fieldInt20069;
+    public int fieldInt20070;
+    public int fieldInt20071;
+    public int fieldInt20072;
+    public int fieldInt20073;
+    public int fieldInt20074;
+    public int fieldInt20075;
+    public int fieldInt20076;
+    public int fieldInt20077;
+    public int fieldInt20078;
+    public int fieldInt20079;
+    public int fieldInt20080;
+    public int fieldInt20081;
+    public int fieldInt20082;
+    public int fieldInt20083;
+    public int fieldInt20084;
+    public int fieldInt20085;
+    public int fieldInt20086;
+    public int fieldInt20087;
+    public int fieldInt20088;
+    public int fieldInt20089;
+    public int fieldInt20090;
+    public int fieldInt20091;
+    public int fieldInt20092;
+    public int fieldInt20093;
+    public int fieldInt20094;
+    public int fieldInt20095;
+    public int fieldInt20096;
+    public int fieldInt20097;
+    public int fieldInt20098;
+    public int fieldInt20099;
+    public int fieldInt20100;
+    public int fieldInt20101;
+    public int fieldInt20102;
+    public int fieldInt20103;
+    public int fieldInt20104;
+    public int fieldInt20105;
+    public int fieldInt20106;
+    public int fieldInt20107;
+    public int fieldInt20108;
+    public int fieldInt20109;
+    public int fieldInt20110;
+    public int fieldInt20111;
+    public int fieldInt20112;
+    public int fieldInt20113;
+    public int fieldInt20114;
+    public int fieldInt20115;
+    public int fieldInt20116;
+    public int fieldInt20117;
+    public int fieldInt20118;
+    public int fieldInt20119;
+    public int fieldInt20120;
+    public int fieldInt20121;
+    public int fieldInt20122;
+    public int fieldInt20123;
+    public int fieldInt20124;
+    public int fieldInt20125;
+    public int fieldInt20126;
+    public int fieldInt20127;
+    public int fieldInt20128;
+    public int fieldInt20129;
+    public int fieldInt20130;
+    public int fieldInt20131;
+    public int fieldInt20132;
+    public int fieldInt20133;
+    public int fieldInt20134;
+    public int fieldInt20135;
+    public int fieldInt20136;
+    public int fieldInt20137;
+    public int fieldInt20138;
+    public int fieldInt20139;
+    public int fieldInt20140;
+    public int fieldInt20141;
+    public int fieldInt20142;
+    public int fieldInt20143;
+    public int fieldInt20144;
+    public int fieldInt20145;
+    public int fieldInt20146;
+    public int fieldInt20147;
+    public int fieldInt20148;
+    public int fieldInt20149;
+    public int fieldInt20150;
+    public int fieldInt20151;
+    public int fieldInt20152;
+    public int fieldInt20153;
+    public int fieldInt20154;
+    public int fieldInt20155;
+    public int fieldInt20156;
+    public int fieldInt20157;
+    public int fieldInt20158;
+    public int fieldInt20159;
+    public int fieldInt20160;
+    public int fieldInt20161;
+    public int fieldInt20162;
+    public int fieldInt20163;
+    public int fieldInt20164;
+    public int fieldInt20165;
+    public int fieldInt20166;
+    public int fieldInt20167;
+    public int fieldInt20168;
+    public int fieldInt20169;
+    public int fieldInt20170;
+    public int fieldInt20171;
+    public int fieldInt20172;
+    public int fieldInt20173;
+    public int fieldInt20174;
+    public int fieldInt20175;
+    public int fieldInt20176;
+    public int fieldInt20177;
+    public int fieldInt20178;
+    public int fieldInt20179;
+    public int fieldInt20180;
+    public int fieldInt20181;
+    public int fieldInt20182;
+    public int fieldInt20183;
+    public int fieldInt20184;
+    public int fieldInt20185;
+    public int fieldInt20186;
+    public int fieldInt20187;
+    public int fieldInt20188;
+    public int fieldInt20189;
+    public int fieldInt20190;
+    public int fieldInt20191;
+    public int fieldInt20192;
+    public int fieldInt20193;
+    public int fieldInt20194;
+    public int fieldInt20195;
+    public int fieldInt20196;
+    public int fieldInt20197;
+    public int fieldInt20198;
+    public int fieldInt20199;
+    public int fieldInt20200;
+    public int fieldInt20201;
+    public int fieldInt20202;
+    public int fieldInt20203;
+    public int fieldInt20204;
+    public int fieldInt20205;
+    public int fieldInt20206;
+    public int fieldInt20207;
+    public int fieldInt20208;
+    public int fieldInt20209;
+    public int fieldInt20210;
+    public int fieldInt20211;
+    public int fieldInt20212;
+    public int fieldInt20213;
+    public int fieldInt20214;
+    public int fieldInt20215;
+    public int fieldInt20216;
+    public int fieldInt20217;
+    public int fieldInt20218;
+    public int fieldInt20219;
+    public int fieldInt20220;
+    public int fieldInt20221;
+    public int fieldInt20222;
+    public int fieldInt20223;
+    public int fieldInt20224;
+    public int fieldInt20225;
+    public int fieldInt20226;
+    public int fieldInt20227;
+    public int fieldInt20228;
+    public int fieldInt20229;
+    public int fieldInt20230;
+    public int fieldInt20231;
+    public int fieldInt20232;
+    public int fieldInt20233;
+    public int fieldInt20234;
+    public int fieldInt20235;
+    public int fieldInt20236;
+    public int fieldInt20237;
+    public int fieldInt20238;
+    public int fieldInt20239;
+    public int fieldInt20240;
+    public int fieldInt20241;
+    public int fieldInt20242;
+    public int fieldInt20243;
+    public int fieldInt20244;
+    public int fieldInt20245;
+    public int fieldInt20246;
+    public int fieldInt20247;
+    public int fieldInt20248;
+    public int fieldInt20249;
+    public int fieldInt20250;
+    public int fieldInt20251;
+    public int fieldInt20252;
+    public int fieldInt20253;
+    public int fieldInt20254;
+    public int fieldInt20255;
+    public int fieldInt20256;
+    public int fieldInt20257;
+    public int fieldInt20258;
+    public int fieldInt20259;
+    public int fieldInt20260;
+    public int fieldInt20261;
+    public int fieldInt20262;
+    public int fieldInt20263;
+    public int fieldInt20264;
+    public int fieldInt20265;
+    public int fieldInt20266;
+    public int fieldInt20267;
+    public int fieldInt20268;
+    public int fieldInt20269;
+    public int fieldInt20270;
+    public int fieldInt20271;
+    public int fieldInt20272;
+    public int fieldInt20273;
+    public int fieldInt20274;
+    public int fieldInt20275;
+    public int fieldInt20276;
+    public int fieldInt20277;
+    public int fieldInt20278;
+    public int fieldInt20279;
+    public int fieldInt20280;
+    public int fieldInt20281;
+    public int fieldInt20282;
+    public int fieldInt20283;
+    public int fieldInt20284;
+    public int fieldInt20285;
+    public int fieldInt20286;
+    public int fieldInt20287;
+    public int fieldInt20288;
+    public int fieldInt20289;
+    public int fieldInt20290;
+    public int fieldInt20291;
+    public int fieldInt20292;
+    public int fieldInt20293;
+    public int fieldInt20294;
+    public int fieldInt20295;
+    public int fieldInt20296;
+    public int fieldInt20297;
+    public int fieldInt20298;
+    public int fieldInt20299;
+    public int fieldInt20300;
+    public int fieldInt20301;
+    public int fieldInt20302;
+    public int fieldInt20303;
+    public int fieldInt20304;
+    public int fieldInt20305;
+    public int fieldInt20306;
+    public int fieldInt20307;
+    public int fieldInt20308;
+    public int fieldInt20309;
+    public int fieldInt20310;
+    public int fieldInt20311;
+    public int fieldInt20312;
+    public int fieldInt20313;
+    public int fieldInt20314;
+    public int fieldInt20315;
+    public int fieldInt20316;
+    public int fieldInt20317;
+    public int fieldInt20318;
+    public int fieldInt20319;
+    public int fieldInt20320;
+    public int fieldInt20321;
+    public int fieldInt20322;
+    public int fieldInt20323;
+    public int fieldInt20324;
+    public int fieldInt20325;
+    public int fieldInt20326;
+    public int fieldInt20327;
+    public int fieldInt20328;
+    public int fieldInt20329;
+    public int fieldInt20330;
+    public int fieldInt20331;
+    public int fieldInt20332;
+    public int fieldInt20333;
+    public int fieldInt20334;
+    public int fieldInt20335;
+    public int fieldInt20336;
+    public int fieldInt20337;
+    public int fieldInt20338;
+    public int fieldInt20339;
+    public int fieldInt20340;
+    public int fieldInt20341;
+    public int fieldInt20342;
+    public int fieldInt20343;
+    public int fieldInt20344;
+    public int fieldInt20345;
+    public int fieldInt20346;
+    public int fieldInt20347;
+    public int fieldInt20348;
+    public int fieldInt20349;
+    public int fieldInt20350;
+    public int fieldInt20351;
+    public int fieldInt20352;
+    public int fieldInt20353;
+    public int fieldInt20354;
+    public int fieldInt20355;
+    public int fieldInt20356;
+    public int fieldInt20357;
+    public int fieldInt20358;
+    public int fieldInt20359;
+    public int fieldInt20360;
+    public int fieldInt20361;
+    public int fieldInt20362;
+    public int fieldInt20363;
+    public int fieldInt20364;
+    public int fieldInt20365;
+    public int fieldInt20366;
+    public int fieldInt20367;
+    public int fieldInt20368;
+    public int fieldInt20369;
+    public int fieldInt20370;
+    public int fieldInt20371;
+    public int fieldInt20372;
+    public int fieldInt20373;
+    public int fieldInt20374;
+    public int fieldInt20375;
+    public int fieldInt20376;
+    public int fieldInt20377;
+    public int fieldInt20378;
+    public int fieldInt20379;
+    public int fieldInt20380;
+    public int fieldInt20381;
+    public int fieldInt20382;
+    public int fieldInt20383;
+    public int fieldInt20384;
+    public int fieldInt20385;
+    public int fieldInt20386;
+    public int fieldInt20387;
+    public int fieldInt20388;
+    public int fieldInt20389;
+    public int fieldInt20390;
+    public int fieldInt20391;
+    public int fieldInt20392;
+    public int fieldInt20393;
+    public int fieldInt20394;
+    public int fieldInt20395;
+    public int fieldInt20396;
+    public int fieldInt20397;
+    public int fieldInt20398;
+    public int fieldInt20399;
+    public int fieldInt20400;
+    public int fieldInt20401;
+    public int fieldInt20402;
+    public int fieldInt20403;
+    public int fieldInt20404;
+    public int fieldInt20405;
+    public int fieldInt20406;
+    public int fieldInt20407;
+    public int fieldInt20408;
+    public int fieldInt20409;
+    public int fieldInt20410;
+    public int fieldInt20411;
+    public int fieldInt20412;
+    public int fieldInt20413;
+    public int fieldInt20414;
+    public int fieldInt20415;
+    public int fieldInt20416;
+    public int fieldInt20417;
+    public int fieldInt20418;
+    public int fieldInt20419;
+    public int fieldInt20420;
+    public int fieldInt20421;
+    public int fieldInt20422;
+    public int fieldInt20423;
+    public int fieldInt20424;
+    public int fieldInt20425;
+    public int fieldInt20426;
+    public int fieldInt20427;
+    public int fieldInt20428;
+    public int fieldInt20429;
+    public int fieldInt20430;
+    public int fieldInt20431;
+    public int fieldInt20432;
+    public int fieldInt20433;
+    public int fieldInt20434;
+    public int fieldInt20435;
+    public int fieldInt20436;
+    public int fieldInt20437;
+    public int fieldInt20438;
+    public int fieldInt20439;
+    public int fieldInt20440;
+    public int fieldInt20441;
+    public int fieldInt20442;
+    public int fieldInt20443;
+    public int fieldInt20444;
+    public int fieldInt20445;
+    public int fieldInt20446;
+    public int fieldInt20447;
+    public int fieldInt20448;
+    public int fieldInt20449;
+    public int fieldInt20450;
+    public int fieldInt20451;
+    public int fieldInt20452;
+    public int fieldInt20453;
+    public int fieldInt20454;
+    public int fieldInt20455;
+    public int fieldInt20456;
+    public int fieldInt20457;
+    public int fieldInt20458;
+    public int fieldInt20459;
+    public int fieldInt20460;
+    public int fieldInt20461;
+    public int fieldInt20462;
+    public int fieldInt20463;
+    public int fieldInt20464;
+    public int fieldInt20465;
+    public int fieldInt20466;
+    public int fieldInt20467;
+    public int fieldInt20468;
+    public int fieldInt20469;
+    public int fieldInt20470;
+    public int fieldInt20471;
+    public int fieldInt20472;
+    public int fieldInt20473;
+    public int fieldInt20474;
+    public int fieldInt20475;
+    public int fieldInt20476;
+    public int fieldInt20477;
+    public int fieldInt20478;
+    public int fieldInt20479;
+    public int fieldInt20480;
+    public int fieldInt20481;
+    public int fieldInt20482;
+    public int fieldInt20483;
+    public int fieldInt20484;
+    public int fieldInt20485;
+    public int fieldInt20486;
+    public int fieldInt20487;
+    public int fieldInt20488;
+    public int fieldInt20489;
+    public int fieldInt20490;
+    public int fieldInt20491;
+    public int fieldInt20492;
+    public int fieldInt20493;
+    public int fieldInt20494;
+    public int fieldInt20495;
+    public int fieldInt20496;
+    public int fieldInt20497;
+    public int fieldInt20498;
+    public int fieldInt20499;
+    public int fieldInt20500;
+    public int fieldInt20501;
+    public int fieldInt20502;
+    public int fieldInt20503;
+    public int fieldInt20504;
+    public int fieldInt20505;
+    public int fieldInt20506;
+    public int fieldInt20507;
+    public int fieldInt20508;
+    public int fieldInt20509;
+    public int fieldInt20510;
+    public int fieldInt20511;
+    public int fieldInt20512;
+    public int fieldInt20513;
+    public int fieldInt20514;
+    public int fieldInt20515;
+    public int fieldInt20516;
+    public int fieldInt20517;
+    public int fieldInt20518;
+    public int fieldInt20519;
+    public int fieldInt20520;
+    public int fieldInt20521;
+    public int fieldInt20522;
+    public int fieldInt20523;
+    public int fieldInt20524;
+    public int fieldInt20525;
+    public int fieldInt20526;
+    public int fieldInt20527;
+    public int fieldInt20528;
+    public int fieldInt20529;
+    public int fieldInt20530;
+    public int fieldInt20531;
+    public int fieldInt20532;
+    public int fieldInt20533;
+    public int fieldInt20534;
+    public int fieldInt20535;
+    public int fieldInt20536;
+    public int fieldInt20537;
+    public int fieldInt20538;
+    public int fieldInt20539;
+    public int fieldInt20540;
+    public int fieldInt20541;
+    public int fieldInt20542;
+    public int fieldInt20543;
+    public int fieldInt20544;
+    public int fieldInt20545;
+    public int fieldInt20546;
+    public int fieldInt20547;
+    public int fieldInt20548;
+    public int fieldInt20549;
+    public int fieldInt20550;
+    public int fieldInt20551;
+    public int fieldInt20552;
+    public int fieldInt20553;
+    public int fieldInt20554;
+    public int fieldInt20555;
+    public int fieldInt20556;
+    public int fieldInt20557;
+    public int fieldInt20558;
+    public int fieldInt20559;
+    public int fieldInt20560;
+    public int fieldInt20561;
+    public int fieldInt20562;
+    public int fieldInt20563;
+    public int fieldInt20564;
+    public int fieldInt20565;
+    public int fieldInt20566;
+    public int fieldInt20567;
+    public int fieldInt20568;
+    public int fieldInt20569;
+    public int fieldInt20570;
+    public int fieldInt20571;
+    public int fieldInt20572;
+    public int fieldInt20573;
+    public int fieldInt20574;
+    public int fieldInt20575;
+    public int fieldInt20576;
+    public int fieldInt20577;
+    public int fieldInt20578;
+    public int fieldInt20579;
+    public int fieldInt20580;
+    public int fieldInt20581;
+    public int fieldInt20582;
+    public int fieldInt20583;
+    public int fieldInt20584;
+    public int fieldInt20585;
+    public int fieldInt20586;
+    public int fieldInt20587;
+    public int fieldInt20588;
+    public int fieldInt20589;
+    public int fieldInt20590;
+    public int fieldInt20591;
+    public int fieldInt20592;
+    public int fieldInt20593;
+    public int fieldInt20594;
+    public int fieldInt20595;
+    public int fieldInt20596;
+    public int fieldInt20597;
+    public int fieldInt20598;
+    public int fieldInt20599;
+    public int fieldInt20600;
+    public int fieldInt20601;
+    public int fieldInt20602;
+    public int fieldInt20603;
+    public int fieldInt20604;
+    public int fieldInt20605;
+    public int fieldInt20606;
+    public int fieldInt20607;
+    public int fieldInt20608;
+    public int fieldInt20609;
+    public int fieldInt20610;
+    public int fieldInt20611;
+    public int fieldInt20612;
+    public int fieldInt20613;
+    public int fieldInt20614;
+    public int fieldInt20615;
+    public int fieldInt20616;
+    public int fieldInt20617;
+    public int fieldInt20618;
+    public int fieldInt20619;
+    public int fieldInt20620;
+    public int fieldInt20621;
+    public int fieldInt20622;
+    public int fieldInt20623;
+    public int fieldInt20624;
+    public int fieldInt20625;
+    public int fieldInt20626;
+    public int fieldInt20627;
+    public int fieldInt20628;
+    public int fieldInt20629;
+    public int fieldInt20630;
+    public int fieldInt20631;
+    public int fieldInt20632;
+    public int fieldInt20633;
+    public int fieldInt20634;
+    public int fieldInt20635;
+    public int fieldInt20636;
+    public int fieldInt20637;
+    public int fieldInt20638;
+    public int fieldInt20639;
+    public int fieldInt20640;
+    public int fieldInt20641;
+    public int fieldInt20642;
+    public int fieldInt20643;
+    public int fieldInt20644;
+    public int fieldInt20645;
+    public int fieldInt20646;
+    public int fieldInt20647;
+    public int fieldInt20648;
+    public int fieldInt20649;
+    public int fieldInt20650;
+    public int fieldInt20651;
+    public int fieldInt20652;
+    public int fieldInt20653;
+    public int fieldInt20654;
+    public int fieldInt20655;
+    public int fieldInt20656;
+    public int fieldInt20657;
+    public int fieldInt20658;
+    public int fieldInt20659;
+    public int fieldInt20660;
+    public int fieldInt20661;
+    public int fieldInt20662;
+    public int fieldInt20663;
+    public int fieldInt20664;
+    public int fieldInt20665;
+    public int fieldInt20666;
+    public int fieldInt20667;
+    public int fieldInt20668;
+    public int fieldInt20669;
+    public int fieldInt20670;
+    public int fieldInt20671;
+    public int fieldInt20672;
+    public int fieldInt20673;
+    public int fieldInt20674;
+    public int fieldInt20675;
+    public int fieldInt20676;
+    public int fieldInt20677;
+    public int fieldInt20678;
+    public int fieldInt20679;
+    public int fieldInt20680;
+    public int fieldInt20681;
+    public int fieldInt20682;
+    public int fieldInt20683;
+    public int fieldInt20684;
+    public int fieldInt20685;
+    public int fieldInt20686;
+    public int fieldInt20687;
+    public int fieldInt20688;
+    public int fieldInt20689;
+    public int fieldInt20690;
+    public int fieldInt20691;
+    public int fieldInt20692;
+    public int fieldInt20693;
+    public int fieldInt20694;
+    public int fieldInt20695;
+    public int fieldInt20696;
+    public int fieldInt20697;
+    public int fieldInt20698;
+    public int fieldInt20699;
+    public int fieldInt20700;
+    public int fieldInt20701;
+    public int fieldInt20702;
+    public int fieldInt20703;
+    public int fieldInt20704;
+    public int fieldInt20705;
+    public int fieldInt20706;
+    public int fieldInt20707;
+    public int fieldInt20708;
+    public int fieldInt20709;
+    public int fieldInt20710;
+    public int fieldInt20711;
+    public int fieldInt20712;
+    public int fieldInt20713;
+    public int fieldInt20714;
+    public int fieldInt20715;
+    public int fieldInt20716;
+    public int fieldInt20717;
+    public int fieldInt20718;
+    public int fieldInt20719;
+    public int fieldInt20720;
+    public int fieldInt20721;
+    public int fieldInt20722;
+    public int fieldInt20723;
+    public int fieldInt20724;
+    public int fieldInt20725;
+    public int fieldInt20726;
+    public int fieldInt20727;
+    public int fieldInt20728;
+    public int fieldInt20729;
+    public int fieldInt20730;
+    public int fieldInt20731;
+    public int fieldInt20732;
+    public int fieldInt20733;
+    public int fieldInt20734;
+    public int fieldInt20735;
+    public int fieldInt20736;
+    public int fieldInt20737;
+    public int fieldInt20738;
+    public int fieldInt20739;
+    public int fieldInt20740;
+    public int fieldInt20741;
+    public int fieldInt20742;
+    public int fieldInt20743;
+    public int fieldInt20744;
+    public int fieldInt20745;
+    public int fieldInt20746;
+    public int fieldInt20747;
+    public int fieldInt20748;
+    public int fieldInt20749;
+    public int fieldInt20750;
+    public int fieldInt20751;
+    public int fieldInt20752;
+    public int fieldInt20753;
+    public int fieldInt20754;
+    public int fieldInt20755;
+    public int fieldInt20756;
+    public int fieldInt20757;
+    public int fieldInt20758;
+    public int fieldInt20759;
+    public int fieldInt20760;
+    public int fieldInt20761;
+    public int fieldInt20762;
+    public int fieldInt20763;
+    public int fieldInt20764;
+    public int fieldInt20765;
+    public int fieldInt20766;
+    public int fieldInt20767;
+    public int fieldInt20768;
+    public int fieldInt20769;
+    public int fieldInt20770;
+    public int fieldInt20771;
+    public int fieldInt20772;
+    public int fieldInt20773;
+    public int fieldInt20774;
+    public int fieldInt20775;
+    public int fieldInt20776;
+    public int fieldInt20777;
+    public int fieldInt20778;
+    public int fieldInt20779;
+    public int fieldInt20780;
+    public int fieldInt20781;
+    public int fieldInt20782;
+    public int fieldInt20783;
+    public int fieldInt20784;
+    public int fieldInt20785;
+    public int fieldInt20786;
+    public int fieldInt20787;
+    public int fieldInt20788;
+    public int fieldInt20789;
+    public int fieldInt20790;
+    public int fieldInt20791;
+    public int fieldInt20792;
+    public int fieldInt20793;
+    public int fieldInt20794;
+    public int fieldInt20795;
+    public int fieldInt20796;
+    public int fieldInt20797;
+    public int fieldInt20798;
+    public int fieldInt20799;
+    public int fieldInt20800;
+    public int fieldInt20801;
+    public int fieldInt20802;
+    public int fieldInt20803;
+    public int fieldInt20804;
+    public int fieldInt20805;
+    public int fieldInt20806;
+    public int fieldInt20807;
+    public int fieldInt20808;
+    public int fieldInt20809;
+    public int fieldInt20810;
+    public int fieldInt20811;
+    public int fieldInt20812;
+    public int fieldInt20813;
+    public int fieldInt20814;
+    public int fieldInt20815;
+    public int fieldInt20816;
+    public int fieldInt20817;
+    public int fieldInt20818;
+    public int fieldInt20819;
+    public int fieldInt20820;
+    public int fieldInt20821;
+    public int fieldInt20822;
+    public int fieldInt20823;
+    public int fieldInt20824;
+    public int fieldInt20825;
+    public int fieldInt20826;
+    public int fieldInt20827;
+    public int fieldInt20828;
+    public int fieldInt20829;
+    public int fieldInt20830;
+    public int fieldInt20831;
+    public int fieldInt20832;
+    public int fieldInt20833;
+    public int fieldInt20834;
+    public int fieldInt20835;
+    public int fieldInt20836;
+    public int fieldInt20837;
+    public int fieldInt20838;
+    public int fieldInt20839;
+    public int fieldInt20840;
+    public int fieldInt20841;
+    public int fieldInt20842;
+    public int fieldInt20843;
+    public int fieldInt20844;
+    public int fieldInt20845;
+    public int fieldInt20846;
+    public int fieldInt20847;
+    public int fieldInt20848;
+    public int fieldInt20849;
+    public int fieldInt20850;
+    public int fieldInt20851;
+    public int fieldInt20852;
+    public int fieldInt20853;
+    public int fieldInt20854;
+    public int fieldInt20855;
+    public int fieldInt20856;
+    public int fieldInt20857;
+    public int fieldInt20858;
+    public int fieldInt20859;
+    public int fieldInt20860;
+    public int fieldInt20861;
+    public int fieldInt20862;
+    public int fieldInt20863;
+    public int fieldInt20864;
+    public int fieldInt20865;
+    public int fieldInt20866;
+    public int fieldInt20867;
+    public int fieldInt20868;
+    public int fieldInt20869;
+    public int fieldInt20870;
+    public int fieldInt20871;
+    public int fieldInt20872;
+    public int fieldInt20873;
+    public int fieldInt20874;
+    public int fieldInt20875;
+    public int fieldInt20876;
+    public int fieldInt20877;
+    public int fieldInt20878;
+    public int fieldInt20879;
+    public int fieldInt20880;
+    public int fieldInt20881;
+    public int fieldInt20882;
+    public int fieldInt20883;
+    public int fieldInt20884;
+    public int fieldInt20885;
+    public int fieldInt20886;
+    public int fieldInt20887;
+    public int fieldInt20888;
+    public int fieldInt20889;
+    public int fieldInt20890;
+    public int fieldInt20891;
+    public int fieldInt20892;
+    public int fieldInt20893;
+    public int fieldInt20894;
+    public int fieldInt20895;
+    public int fieldInt20896;
+    public int fieldInt20897;
+    public int fieldInt20898;
+    public int fieldInt20899;
+    public int fieldInt20900;
+    public int fieldInt20901;
+    public int fieldInt20902;
+    public int fieldInt20903;
+    public int fieldInt20904;
+    public int fieldInt20905;
+    public int fieldInt20906;
+    public int fieldInt20907;
+    public int fieldInt20908;
+    public int fieldInt20909;
+    public int fieldInt20910;
+    public int fieldInt20911;
+    public int fieldInt20912;
+    public int fieldInt20913;
+    public int fieldInt20914;
+    public int fieldInt20915;
+    public int fieldInt20916;
+    public int fieldInt20917;
+    public int fieldInt20918;
+    public int fieldInt20919;
+    public int fieldInt20920;
+    public int fieldInt20921;
+    public int fieldInt20922;
+    public int fieldInt20923;
+    public int fieldInt20924;
+    public int fieldInt20925;
+    public int fieldInt20926;
+    public int fieldInt20927;
+    public int fieldInt20928;
+    public int fieldInt20929;
+    public int fieldInt20930;
+    public int fieldInt20931;
+    public int fieldInt20932;
+    public int fieldInt20933;
+    public int fieldInt20934;
+    public int fieldInt20935;
+    public int fieldInt20936;
+    public int fieldInt20937;
+    public int fieldInt20938;
+    public int fieldInt20939;
+    public int fieldInt20940;
+    public int fieldInt20941;
+    public int fieldInt20942;
+    public int fieldInt20943;
+    public int fieldInt20944;
+    public int fieldInt20945;
+    public int fieldInt20946;
+    public int fieldInt20947;
+    public int fieldInt20948;
+    public int fieldInt20949;
+    public int fieldInt20950;
+    public int fieldInt20951;
+    public int fieldInt20952;
+    public int fieldInt20953;
+    public int fieldInt20954;
+    public int fieldInt20955;
+    public int fieldInt20956;
+    public int fieldInt20957;
+    public int fieldInt20958;
+    public int fieldInt20959;
+    public int fieldInt20960;
+    public int fieldInt20961;
+    public int fieldInt20962;
+    public int fieldInt20963;
+    public int fieldInt20964;
+    public int fieldInt20965;
+    public int fieldInt20966;
+    public int fieldInt20967;
+    public int fieldInt20968;
+    public int fieldInt20969;
+    public int fieldInt20970;
+    public int fieldInt20971;
+    public int fieldInt20972;
+    public int fieldInt20973;
+    public int fieldInt20974;
+    public int fieldInt20975;
+    public int fieldInt20976;
+    public int fieldInt20977;
+    public int fieldInt20978;
+    public int fieldInt20979;
+    public int fieldInt20980;
+    public int fieldInt20981;
+    public int fieldInt20982;
+    public int fieldInt20983;
+    public int fieldInt20984;
+    public int fieldInt20985;
+    public int fieldInt20986;
+    public int fieldInt20987;
+    public int fieldInt20988;
+    public int fieldInt20989;
+    public int fieldInt20990;
+    public int fieldInt20991;
+    public int fieldInt20992;
+    public int fieldInt20993;
+    public int fieldInt20994;
+    public int fieldInt20995;
+    public int fieldInt20996;
+    public int fieldInt20997;
+    public int fieldInt20998;
+    public int fieldInt20999;
+    public int fieldInt21000;
+    public int fieldInt21001;
+    public int fieldInt21002;
+    public int fieldInt21003;
+    public int fieldInt21004;
+    public int fieldInt21005;
+    public int fieldInt21006;
+    public int fieldInt21007;
+    public int fieldInt21008;
+    public int fieldInt21009;
+    public int fieldInt21010;
+    public int fieldInt21011;
+    public int fieldInt21012;
+    public int fieldInt21013;
+    public int fieldInt21014;
+    public int fieldInt21015;
+    public int fieldInt21016;
+    public int fieldInt21017;
+    public int fieldInt21018;
+    public int fieldInt21019;
+    public int fieldInt21020;
+    public int fieldInt21021;
+    public int fieldInt21022;
+    public int fieldInt21023;
+    public int fieldInt21024;
+    public int fieldInt21025;
+    public int fieldInt21026;
+    public int fieldInt21027;
+    public int fieldInt21028;
+    public int fieldInt21029;
+    public int fieldInt21030;
+    public int fieldInt21031;
+    public int fieldInt21032;
+    public int fieldInt21033;
+    public int fieldInt21034;
+    public int fieldInt21035;
+    public int fieldInt21036;
+    public int fieldInt21037;
+    public int fieldInt21038;
+    public int fieldInt21039;
+    public int fieldInt21040;
+    public int fieldInt21041;
+    public int fieldInt21042;
+    public int fieldInt21043;
+    public int fieldInt21044;
+    public int fieldInt21045;
+    public int fieldInt21046;
+    public int fieldInt21047;
+    public int fieldInt21048;
+    public int fieldInt21049;
+    public int fieldInt21050;
+    public int fieldInt21051;
+    public int fieldInt21052;
+    public int fieldInt21053;
+    public int fieldInt21054;
+    public int fieldInt21055;
+    public int fieldInt21056;
+    public int fieldInt21057;
+    public int fieldInt21058;
+    public int fieldInt21059;
+    public int fieldInt21060;
+    public int fieldInt21061;
+    public int fieldInt21062;
+    public int fieldInt21063;
+    public int fieldInt21064;
+    public int fieldInt21065;
+    public int fieldInt21066;
+    public int fieldInt21067;
+    public int fieldInt21068;
+    public int fieldInt21069;
+    public int fieldInt21070;
+    public int fieldInt21071;
+    public int fieldInt21072;
+    public int fieldInt21073;
+    public int fieldInt21074;
+    public int fieldInt21075;
+    public int fieldInt21076;
+    public int fieldInt21077;
+    public int fieldInt21078;
+    public int fieldInt21079;
+    public int fieldInt21080;
+    public int fieldInt21081;
+    public int fieldInt21082;
+    public int fieldInt21083;
+    public int fieldInt21084;
+    public int fieldInt21085;
+    public int fieldInt21086;
+    public int fieldInt21087;
+    public int fieldInt21088;
+    public int fieldInt21089;
+    public int fieldInt21090;
+    public int fieldInt21091;
+    public int fieldInt21092;
+    public int fieldInt21093;
+    public int fieldInt21094;
+    public int fieldInt21095;
+    public int fieldInt21096;
+    public int fieldInt21097;
+    public int fieldInt21098;
+    public int fieldInt21099;
+    public int fieldInt21100;
+    public int fieldInt21101;
+    public int fieldInt21102;
+    public int fieldInt21103;
+    public int fieldInt21104;
+    public int fieldInt21105;
+    public int fieldInt21106;
+    public int fieldInt21107;
+    public int fieldInt21108;
+    public int fieldInt21109;
+    public int fieldInt21110;
+    public int fieldInt21111;
+    public int fieldInt21112;
+    public int fieldInt21113;
+    public int fieldInt21114;
+    public int fieldInt21115;
+    public int fieldInt21116;
+    public int fieldInt21117;
+    public int fieldInt21118;
+    public int fieldInt21119;
+    public int fieldInt21120;
+    public int fieldInt21121;
+    public int fieldInt21122;
+    public int fieldInt21123;
+    public int fieldInt21124;
+    public int fieldInt21125;
+    public int fieldInt21126;
+    public int fieldInt21127;
+    public int fieldInt21128;
+    public int fieldInt21129;
+    public int fieldInt21130;
+    public int fieldInt21131;
+    public int fieldInt21132;
+    public int fieldInt21133;
+    public int fieldInt21134;
+    public int fieldInt21135;
+    public int fieldInt21136;
+    public int fieldInt21137;
+    public int fieldInt21138;
+    public int fieldInt21139;
+    public int fieldInt21140;
+    public int fieldInt21141;
+    public int fieldInt21142;
+    public int fieldInt21143;
+    public int fieldInt21144;
+    public int fieldInt21145;
+    public int fieldInt21146;
+    public int fieldInt21147;
+    public int fieldInt21148;
+    public int fieldInt21149;
+    public int fieldInt21150;
+    public int fieldInt21151;
+    public int fieldInt21152;
+    public int fieldInt21153;
+    public int fieldInt21154;
+    public int fieldInt21155;
+    public int fieldInt21156;
+    public int fieldInt21157;
+    public int fieldInt21158;
+    public int fieldInt21159;
+    public int fieldInt21160;
+    public int fieldInt21161;
+    public int fieldInt21162;
+    public int fieldInt21163;
+    public int fieldInt21164;
+    public int fieldInt21165;
+    public int fieldInt21166;
+    public int fieldInt21167;
+    public int fieldInt21168;
+    public int fieldInt21169;
+    public int fieldInt21170;
+    public int fieldInt21171;
+    public int fieldInt21172;
+    public int fieldInt21173;
+    public int fieldInt21174;
+    public int fieldInt21175;
+    public int fieldInt21176;
+    public int fieldInt21177;
+    public int fieldInt21178;
+    public int fieldInt21179;
+    public int fieldInt21180;
+    public int fieldInt21181;
+    public int fieldInt21182;
+    public int fieldInt21183;
+    public int fieldInt21184;
+    public int fieldInt21185;
+    public int fieldInt21186;
+    public int fieldInt21187;
+    public int fieldInt21188;
+    public int fieldInt21189;
+    public int fieldInt21190;
+    public int fieldInt21191;
+    public int fieldInt21192;
+    public int fieldInt21193;
+    public int fieldInt21194;
+    public int fieldInt21195;
+    public int fieldInt21196;
+    public int fieldInt21197;
+    public int fieldInt21198;
+    public int fieldInt21199;
+    public int fieldInt21200;
+    public int fieldInt21201;
+    public int fieldInt21202;
+    public int fieldInt21203;
+    public int fieldInt21204;
+    public int fieldInt21205;
+    public int fieldInt21206;
+    public int fieldInt21207;
+    public int fieldInt21208;
+    public int fieldInt21209;
+    public int fieldInt21210;
+    public int fieldInt21211;
+    public int fieldInt21212;
+    public int fieldInt21213;
+    public int fieldInt21214;
+    public int fieldInt21215;
+    public int fieldInt21216;
+    public int fieldInt21217;
+    public int fieldInt21218;
+    public int fieldInt21219;
+    public int fieldInt21220;
+    public int fieldInt21221;
+    public int fieldInt21222;
+    public int fieldInt21223;
+    public int fieldInt21224;
+    public int fieldInt21225;
+    public int fieldInt21226;
+    public int fieldInt21227;
+    public int fieldInt21228;
+    public int fieldInt21229;
+    public int fieldInt21230;
+    public int fieldInt21231;
+    public int fieldInt21232;
+    public int fieldInt21233;
+    public int fieldInt21234;
+    public int fieldInt21235;
+    public int fieldInt21236;
+    public int fieldInt21237;
+    public int fieldInt21238;
+    public int fieldInt21239;
+    public int fieldInt21240;
+    public int fieldInt21241;
+    public int fieldInt21242;
+    public int fieldInt21243;
+    public int fieldInt21244;
+    public int fieldInt21245;
+    public int fieldInt21246;
+    public int fieldInt21247;
+    public int fieldInt21248;
+    public int fieldInt21249;
+    public int fieldInt21250;
+    public int fieldInt21251;
+    public int fieldInt21252;
+    public int fieldInt21253;
+    public int fieldInt21254;
+    public int fieldInt21255;
+    public int fieldInt21256;
+    public int fieldInt21257;
+    public int fieldInt21258;
+    public int fieldInt21259;
+    public int fieldInt21260;
+    public int fieldInt21261;
+    public int fieldInt21262;
+    public int fieldInt21263;
+    public int fieldInt21264;
+    public int fieldInt21265;
+    public int fieldInt21266;
+    public int fieldInt21267;
+    public int fieldInt21268;
+    public int fieldInt21269;
+    public int fieldInt21270;
+    public int fieldInt21271;
+    public int fieldInt21272;
+    public int fieldInt21273;
+    public int fieldInt21274;
+    public int fieldInt21275;
+    public int fieldInt21276;
+    public int fieldInt21277;
+    public int fieldInt21278;
+    public int fieldInt21279;
+    public int fieldInt21280;
+    public int fieldInt21281;
+    public int fieldInt21282;
+    public int fieldInt21283;
+    public int fieldInt21284;
+    public int fieldInt21285;
+    public int fieldInt21286;
+    public int fieldInt21287;
+    public int fieldInt21288;
+    public int fieldInt21289;
+    public int fieldInt21290;
+    public int fieldInt21291;
+    public int fieldInt21292;
+    public int fieldInt21293;
+    public int fieldInt21294;
+    public int fieldInt21295;
+    public int fieldInt21296;
+    public int fieldInt21297;
+    public int fieldInt21298;
+    public int fieldInt21299;
+    public int fieldInt21300;
+    public int fieldInt21301;
+    public int fieldInt21302;
+    public int fieldInt21303;
+    public int fieldInt21304;
+    public int fieldInt21305;
+    public int fieldInt21306;
+    public int fieldInt21307;
+    public int fieldInt21308;
+    public int fieldInt21309;
+    public int fieldInt21310;
+    public int fieldInt21311;
+    public int fieldInt21312;
+    public int fieldInt21313;
+    public int fieldInt21314;
+    public int fieldInt21315;
+    public int fieldInt21316;
+    public int fieldInt21317;
+    public int fieldInt21318;
+    public int fieldInt21319;
+    public int fieldInt21320;
+    public int fieldInt21321;
+    public int fieldInt21322;
+    public int fieldInt21323;
+    public int fieldInt21324;
+    public int fieldInt21325;
+    public int fieldInt21326;
+    public int fieldInt21327;
+    public int fieldInt21328;
+    public int fieldInt21329;
+    public int fieldInt21330;
+    public int fieldInt21331;
+    public int fieldInt21332;
+    public int fieldInt21333;
+    public int fieldInt21334;
+    public int fieldInt21335;
+    public int fieldInt21336;
+    public int fieldInt21337;
+    public int fieldInt21338;
+    public int fieldInt21339;
+    public int fieldInt21340;
+    public int fieldInt21341;
+    public int fieldInt21342;
+    public int fieldInt21343;
+    public int fieldInt21344;
+    public int fieldInt21345;
+    public int fieldInt21346;
+    public int fieldInt21347;
+    public int fieldInt21348;
+    public int fieldInt21349;
+    public int fieldInt21350;
+    public int fieldInt21351;
+    public int fieldInt21352;
+    public int fieldInt21353;
+    public int fieldInt21354;
+    public int fieldInt21355;
+    public int fieldInt21356;
+    public int fieldInt21357;
+    public int fieldInt21358;
+    public int fieldInt21359;
+    public int fieldInt21360;
+    public int fieldInt21361;
+    public int fieldInt21362;
+    public int fieldInt21363;
+    public int fieldInt21364;
+    public int fieldInt21365;
+    public int fieldInt21366;
+    public int fieldInt21367;
+    public int fieldInt21368;
+    public int fieldInt21369;
+    public int fieldInt21370;
+    public int fieldInt21371;
+    public int fieldInt21372;
+    public int fieldInt21373;
+    public int fieldInt21374;
+    public int fieldInt21375;
+    public int fieldInt21376;
+    public int fieldInt21377;
+    public int fieldInt21378;
+    public int fieldInt21379;
+    public int fieldInt21380;
+    public int fieldInt21381;
+    public int fieldInt21382;
+    public int fieldInt21383;
+    public int fieldInt21384;
+    public int fieldInt21385;
+    public int fieldInt21386;
+    public int fieldInt21387;
+    public int fieldInt21388;
+    public int fieldInt21389;
+    public int fieldInt21390;
+    public int fieldInt21391;
+    public int fieldInt21392;
+    public int fieldInt21393;
+    public int fieldInt21394;
+    public int fieldInt21395;
+    public int fieldInt21396;
+    public int fieldInt21397;
+    public int fieldInt21398;
+    public int fieldInt21399;
+    public int fieldInt21400;
+    public int fieldInt21401;
+    public int fieldInt21402;
+    public int fieldInt21403;
+    public int fieldInt21404;
+    public int fieldInt21405;
+    public int fieldInt21406;
+    public int fieldInt21407;
+    public int fieldInt21408;
+    public int fieldInt21409;
+    public int fieldInt21410;
+    public int fieldInt21411;
+    public int fieldInt21412;
+    public int fieldInt21413;
+    public int fieldInt21414;
+    public int fieldInt21415;
+    public int fieldInt21416;
+    public int fieldInt21417;
+    public int fieldInt21418;
+    public int fieldInt21419;
+    public int fieldInt21420;
+    public int fieldInt21421;
+    public int fieldInt21422;
+    public int fieldInt21423;
+    public int fieldInt21424;
+    public int fieldInt21425;
+    public int fieldInt21426;
+    public int fieldInt21427;
+    public int fieldInt21428;
+    public int fieldInt21429;
+    public int fieldInt21430;
+    public int fieldInt21431;
+    public int fieldInt21432;
+    public int fieldInt21433;
+    public int fieldInt21434;
+    public int fieldInt21435;
+    public int fieldInt21436;
+    public int fieldInt21437;
+    public int fieldInt21438;
+    public int fieldInt21439;
+    public int fieldInt21440;
+    public int fieldInt21441;
+    public int fieldInt21442;
+    public int fieldInt21443;
+    public int fieldInt21444;
+    public int fieldInt21445;
+    public int fieldInt21446;
+    public int fieldInt21447;
+    public int fieldInt21448;
+    public int fieldInt21449;
+    public int fieldInt21450;
+    public int fieldInt21451;
+    public int fieldInt21452;
+    public int fieldInt21453;
+    public int fieldInt21454;
+    public int fieldInt21455;
+    public int fieldInt21456;
+    public int fieldInt21457;
+    public int fieldInt21458;
+    public int fieldInt21459;
+    public int fieldInt21460;
+    public int fieldInt21461;
+    public int fieldInt21462;
+    public int fieldInt21463;
+    public int fieldInt21464;
+    public int fieldInt21465;
+    public int fieldInt21466;
+    public int fieldInt21467;
+    public int fieldInt21468;
+    public int fieldInt21469;
+    public int fieldInt21470;
+    public int fieldInt21471;
+    public int fieldInt21472;
+    public int fieldInt21473;
+    public int fieldInt21474;
+    public int fieldInt21475;
+    public int fieldInt21476;
+    public int fieldInt21477;
+    public int fieldInt21478;
+    public int fieldInt21479;
+    public int fieldInt21480;
+    public int fieldInt21481;
+    public int fieldInt21482;
+    public int fieldInt21483;
+    public int fieldInt21484;
+    public int fieldInt21485;
+    public int fieldInt21486;
+    public int fieldInt21487;
+    public int fieldInt21488;
+    public int fieldInt21489;
+    public int fieldInt21490;
+    public int fieldInt21491;
+    public int fieldInt21492;
+    public int fieldInt21493;
+    public int fieldInt21494;
+    public int fieldInt21495;
+    public int fieldInt21496;
+    public int fieldInt21497;
+    public int fieldInt21498;
+    public int fieldInt21499;
+    public int fieldInt21500;
+    public int fieldInt21501;
+    public int fieldInt21502;
+    public int fieldInt21503;
+    public int fieldInt21504;
+    public int fieldInt21505;
+    public int fieldInt21506;
+    public int fieldInt21507;
+    public int fieldInt21508;
+    public int fieldInt21509;
+    public int fieldInt21510;
+    public int fieldInt21511;
+    public int fieldInt21512;
+    public int fieldInt21513;
+    public int fieldInt21514;
+    public int fieldInt21515;
+    public int fieldInt21516;
+    public int fieldInt21517;
+    public int fieldInt21518;
+    public int fieldInt21519;
+    public int fieldInt21520;
+    public int fieldInt21521;
+    public int fieldInt21522;
+    public int fieldInt21523;
+    public int fieldInt21524;
+    public int fieldInt21525;
+    public int fieldInt21526;
+    public int fieldInt21527;
+    public int fieldInt21528;
+    public int fieldInt21529;
+    public int fieldInt21530;
+    public int fieldInt21531;
+    public int fieldInt21532;
+    public int fieldInt21533;
+    public int fieldInt21534;
+    public int fieldInt21535;
+    public int fieldInt21536;
+    public int fieldInt21537;
+    public int fieldInt21538;
+    public int fieldInt21539;
+    public int fieldInt21540;
+    public int fieldInt21541;
+    public int fieldInt21542;
+    public int fieldInt21543;
+    public int fieldInt21544;
+    public int fieldInt21545;
+    public int fieldInt21546;
+    public int fieldInt21547;
+    public int fieldInt21548;
+    public int fieldInt21549;
+    public int fieldInt21550;
+    public int fieldInt21551;
+    public int fieldInt21552;
+    public int fieldInt21553;
+    public int fieldInt21554;
+    public int fieldInt21555;
+    public int fieldInt21556;
+    public int fieldInt21557;
+    public int fieldInt21558;
+    public int fieldInt21559;
+    public int fieldInt21560;
+    public int fieldInt21561;
+    public int fieldInt21562;
+    public int fieldInt21563;
+    public int fieldInt21564;
+    public int fieldInt21565;
+    public int fieldInt21566;
+    public int fieldInt21567;
+    public int fieldInt21568;
+    public int fieldInt21569;
+    public int fieldInt21570;
+    public int fieldInt21571;
+    public int fieldInt21572;
+    public int fieldInt21573;
+    public int fieldInt21574;
+    public int fieldInt21575;
+    public int fieldInt21576;
+    public int fieldInt21577;
+    public int fieldInt21578;
+    public int fieldInt21579;
+    public int fieldInt21580;
+    public int fieldInt21581;
+    public int fieldInt21582;
+    public int fieldInt21583;
+    public int fieldInt21584;
+    public int fieldInt21585;
+    public int fieldInt21586;
+    public int fieldInt21587;
+    public int fieldInt21588;
+    public int fieldInt21589;
+    public int fieldInt21590;
+    public int fieldInt21591;
+    public int fieldInt21592;
+    public int fieldInt21593;
+    public int fieldInt21594;
+    public int fieldInt21595;
+    public int fieldInt21596;
+    public int fieldInt21597;
+    public int fieldInt21598;
+    public int fieldInt21599;
+    public int fieldInt21600;
+    public int fieldInt21601;
+    public int fieldInt21602;
+    public int fieldInt21603;
+    public int fieldInt21604;
+    public int fieldInt21605;
+    public int fieldInt21606;
+    public int fieldInt21607;
+    public int fieldInt21608;
+    public int fieldInt21609;
+    public int fieldInt21610;
+    public int fieldInt21611;
+    public int fieldInt21612;
+    public int fieldInt21613;
+    public int fieldInt21614;
+    public int fieldInt21615;
+    public int fieldInt21616;
+    public int fieldInt21617;
+    public int fieldInt21618;
+    public int fieldInt21619;
+    public int fieldInt21620;
+    public int fieldInt21621;
+    public int fieldInt21622;
+    public int fieldInt21623;
+    public int fieldInt21624;
+    public int fieldInt21625;
+    public int fieldInt21626;
+    public int fieldInt21627;
+    public int fieldInt21628;
+    public int fieldInt21629;
+    public int fieldInt21630;
+    public int fieldInt21631;
+    public int fieldInt21632;
+    public int fieldInt21633;
+    public int fieldInt21634;
+    public int fieldInt21635;
+    public int fieldInt21636;
+    public int fieldInt21637;
+    public int fieldInt21638;
+    public int fieldInt21639;
+    public int fieldInt21640;
+    public int fieldInt21641;
+    public int fieldInt21642;
+    public int fieldInt21643;
+    public int fieldInt21644;
+    public int fieldInt21645;
+    public int fieldInt21646;
+    public int fieldInt21647;
+    public int fieldInt21648;
+    public int fieldInt21649;
+    public int fieldInt21650;
+    public int fieldInt21651;
+    public int fieldInt21652;
+    public int fieldInt21653;
+    public int fieldInt21654;
+    public int fieldInt21655;
+    public int fieldInt21656;
+    public int fieldInt21657;
+    public int fieldInt21658;
+    public int fieldInt21659;
+    public int fieldInt21660;
+    public int fieldInt21661;
+    public int fieldInt21662;
+    public int fieldInt21663;
+    public int fieldInt21664;
+    public int fieldInt21665;
+    public int fieldInt21666;
+    public int fieldInt21667;
+    public int fieldInt21668;
+    public int fieldInt21669;
+    public int fieldInt21670;
+    public int fieldInt21671;
+    public int fieldInt21672;
+    public int fieldInt21673;
+    public int fieldInt21674;
+    public int fieldInt21675;
+    public int fieldInt21676;
+    public int fieldInt21677;
+    public int fieldInt21678;
+    public int fieldInt21679;
+    public int fieldInt21680;
+    public int fieldInt21681;
+    public int fieldInt21682;
+    public int fieldInt21683;
+    public int fieldInt21684;
+    public int fieldInt21685;
+    public int fieldInt21686;
+    public int fieldInt21687;
+    public int fieldInt21688;
+    public int fieldInt21689;
+    public int fieldInt21690;
+    public int fieldInt21691;
+    public int fieldInt21692;
+    public int fieldInt21693;
+    public int fieldInt21694;
+    public int fieldInt21695;
+    public int fieldInt21696;
+    public int fieldInt21697;
+    public int fieldInt21698;
+    public int fieldInt21699;
+    public int fieldInt21700;
+    public int fieldInt21701;
+    public int fieldInt21702;
+    public int fieldInt21703;
+    public int fieldInt21704;
+    public int fieldInt21705;
+    public int fieldInt21706;
+    public int fieldInt21707;
+    public int fieldInt21708;
+    public int fieldInt21709;
+    public int fieldInt21710;
+    public int fieldInt21711;
+    public int fieldInt21712;
+    public int fieldInt21713;
+    public int fieldInt21714;
+    public int fieldInt21715;
+    public int fieldInt21716;
+    public int fieldInt21717;
+    public int fieldInt21718;
+    public int fieldInt21719;
+    public int fieldInt21720;
+    public int fieldInt21721;
+    public int fieldInt21722;
+    public int fieldInt21723;
+    public int fieldInt21724;
+    public int fieldInt21725;
+    public int fieldInt21726;
+    public int fieldInt21727;
+    public int fieldInt21728;
+    public int fieldInt21729;
+    public int fieldInt21730;
+    public int fieldInt21731;
+    public int fieldInt21732;
+    public int fieldInt21733;
+    public int fieldInt21734;
+    public int fieldInt21735;
+    public int fieldInt21736;
+    public int fieldInt21737;
+    public int fieldInt21738;
+    public int fieldInt21739;
+    public int fieldInt21740;
+    public int fieldInt21741;
+    public int fieldInt21742;
+    public int fieldInt21743;
+    public int fieldInt21744;
+    public int fieldInt21745;
+    public int fieldInt21746;
+    public int fieldInt21747;
+    public int fieldInt21748;
+    public int fieldInt21749;
+    public int fieldInt21750;
+    public int fieldInt21751;
+    public int fieldInt21752;
+    public int fieldInt21753;
+    public int fieldInt21754;
+    public int fieldInt21755;
+    public int fieldInt21756;
+    public int fieldInt21757;
+    public int fieldInt21758;
+    public int fieldInt21759;
+    public int fieldInt21760;
+    public int fieldInt21761;
+    public int fieldInt21762;
+    public int fieldInt21763;
+    public int fieldInt21764;
+    public int fieldInt21765;
+    public int fieldInt21766;
+    public int fieldInt21767;
+    public int fieldInt21768;
+    public int fieldInt21769;
+    public int fieldInt21770;
+    public int fieldInt21771;
+    public int fieldInt21772;
+    public int fieldInt21773;
+    public int fieldInt21774;
+    public int fieldInt21775;
+    public int fieldInt21776;
+    public int fieldInt21777;
+    public int fieldInt21778;
+    public int fieldInt21779;
+    public int fieldInt21780;
+    public int fieldInt21781;
+    public int fieldInt21782;
+    public int fieldInt21783;
+    public int fieldInt21784;
+    public int fieldInt21785;
+    public int fieldInt21786;
+    public int fieldInt21787;
+    public int fieldInt21788;
+    public int fieldInt21789;
+    public int fieldInt21790;
+    public int fieldInt21791;
+    public int fieldInt21792;
+    public int fieldInt21793;
+    public int fieldInt21794;
+    public int fieldInt21795;
+    public int fieldInt21796;
+    public int fieldInt21797;
+    public int fieldInt21798;
+    public int fieldInt21799;
+    public int fieldInt21800;
+    public int fieldInt21801;
+    public int fieldInt21802;
+    public int fieldInt21803;
+    public int fieldInt21804;
+    public int fieldInt21805;
+    public int fieldInt21806;
+    public int fieldInt21807;
+    public int fieldInt21808;
+    public int fieldInt21809;
+    public int fieldInt21810;
+    public int fieldInt21811;
+    public int fieldInt21812;
+    public int fieldInt21813;
+    public int fieldInt21814;
+    public int fieldInt21815;
+    public int fieldInt21816;
+    public int fieldInt21817;
+    public int fieldInt21818;
+    public int fieldInt21819;
+    public int fieldInt21820;
+    public int fieldInt21821;
+    public int fieldInt21822;
+    public int fieldInt21823;
+    public int fieldInt21824;
+    public int fieldInt21825;
+    public int fieldInt21826;
+    public int fieldInt21827;
+    public int fieldInt21828;
+    public int fieldInt21829;
+    public int fieldInt21830;
+    public int fieldInt21831;
+    public int fieldInt21832;
+    public int fieldInt21833;
+    public int fieldInt21834;
+    public int fieldInt21835;
+    public int fieldInt21836;
+    public int fieldInt21837;
+    public int fieldInt21838;
+    public int fieldInt21839;
+    public int fieldInt21840;
+    public int fieldInt21841;
+    public int fieldInt21842;
+    public int fieldInt21843;
+    public int fieldInt21844;
+    public int fieldInt21845;
+    public int fieldInt21846;
+    public int fieldInt21847;
+    public int fieldInt21848;
+    public int fieldInt21849;
+    public int fieldInt21850;
+    public int fieldInt21851;
+    public int fieldInt21852;
+    public int fieldInt21853;
+    public int fieldInt21854;
+    public int fieldInt21855;
+    public int fieldInt21856;
+    public int fieldInt21857;
+    public int fieldInt21858;
+    public int fieldInt21859;
+    public int fieldInt21860;
+    public int fieldInt21861;
+    public int fieldInt21862;
+    public int fieldInt21863;
+    public int fieldInt21864;
+    public int fieldInt21865;
+    public int fieldInt21866;
+    public int fieldInt21867;
+    public int fieldInt21868;
+    public int fieldInt21869;
+    public int fieldInt21870;
+    public int fieldInt21871;
+    public int fieldInt21872;
+    public int fieldInt21873;
+    public int fieldInt21874;
+    public int fieldInt21875;
+    public int fieldInt21876;
+    public int fieldInt21877;
+    public int fieldInt21878;
+    public int fieldInt21879;
+    public int fieldInt21880;
+    public int fieldInt21881;
+    public int fieldInt21882;
+    public int fieldInt21883;
+    public int fieldInt21884;
+    public int fieldInt21885;
+    public int fieldInt21886;
+    public int fieldInt21887;
+    public int fieldInt21888;
+    public int fieldInt21889;
+    public int fieldInt21890;
+    public int fieldInt21891;
+    public int fieldInt21892;
+    public int fieldInt21893;
+    public int fieldInt21894;
+    public int fieldInt21895;
+    public int fieldInt21896;
+    public int fieldInt21897;
+    public int fieldInt21898;
+    public int fieldInt21899;
+    public int fieldInt21900;
+    public int fieldInt21901;
+    public int fieldInt21902;
+    public int fieldInt21903;
+    public int fieldInt21904;
+    public int fieldInt21905;
+    public int fieldInt21906;
+    public int fieldInt21907;
+    public int fieldInt21908;
+    public int fieldInt21909;
+    public int fieldInt21910;
+    public int fieldInt21911;
+    public int fieldInt21912;
+    public int fieldInt21913;
+    public int fieldInt21914;
+    public int fieldInt21915;
+    public int fieldInt21916;
+    public int fieldInt21917;
+    public int fieldInt21918;
+    public int fieldInt21919;
+    public int fieldInt21920;
+    public int fieldInt21921;
+    public int fieldInt21922;
+    public int fieldInt21923;
+    public int fieldInt21924;
+    public int fieldInt21925;
+    public int fieldInt21926;
+    public int fieldInt21927;
+    public int fieldInt21928;
+    public int fieldInt21929;
+    public int fieldInt21930;
+    public int fieldInt21931;
+    public int fieldInt21932;
+    public int fieldInt21933;
+    public int fieldInt21934;
+    public int fieldInt21935;
+    public int fieldInt21936;
+    public int fieldInt21937;
+    public int fieldInt21938;
+    public int fieldInt21939;
+    public int fieldInt21940;
+    public int fieldInt21941;
+    public int fieldInt21942;
+    public int fieldInt21943;
+    public int fieldInt21944;
+    public int fieldInt21945;
+    public int fieldInt21946;
+    public int fieldInt21947;
+    public int fieldInt21948;
+    public int fieldInt21949;
+    public int fieldInt21950;
+    public int fieldInt21951;
+    public int fieldInt21952;
+    public int fieldInt21953;
+    public int fieldInt21954;
+    public int fieldInt21955;
+    public int fieldInt21956;
+    public int fieldInt21957;
+    public int fieldInt21958;
+    public int fieldInt21959;
+    public int fieldInt21960;
+    public int fieldInt21961;
+    public int fieldInt21962;
+    public int fieldInt21963;
+    public int fieldInt21964;
+    public int fieldInt21965;
+    public int fieldInt21966;
+    public int fieldInt21967;
+    public int fieldInt21968;
+    public int fieldInt21969;
+    public int fieldInt21970;
+    public int fieldInt21971;
+    public int fieldInt21972;
+    public int fieldInt21973;
+    public int fieldInt21974;
+    public int fieldInt21975;
+    public int fieldInt21976;
+    public int fieldInt21977;
+    public int fieldInt21978;
+    public int fieldInt21979;
+    public int fieldInt21980;
+    public int fieldInt21981;
+    public int fieldInt21982;
+    public int fieldInt21983;
+    public int fieldInt21984;
+    public int fieldInt21985;
+    public int fieldInt21986;
+    public int fieldInt21987;
+    public int fieldInt21988;
+    public int fieldInt21989;
+    public int fieldInt21990;
+    public int fieldInt21991;
+    public int fieldInt21992;
+    public int fieldInt21993;
+    public int fieldInt21994;
+    public int fieldInt21995;
+    public int fieldInt21996;
+    public int fieldInt21997;
+    public int fieldInt21998;
+    public int fieldInt21999;
+    public int fieldInt22000;
+    public int fieldInt22001;
+    public int fieldInt22002;
+    public int fieldInt22003;
+    public int fieldInt22004;
+    public int fieldInt22005;
+    public int fieldInt22006;
+    public int fieldInt22007;
+    public int fieldInt22008;
+    public int fieldInt22009;
+    public int fieldInt22010;
+    public int fieldInt22011;
+    public int fieldInt22012;
+    public int fieldInt22013;
+    public int fieldInt22014;
+    public int fieldInt22015;
+    public int fieldInt22016;
+    public int fieldInt22017;
+    public int fieldInt22018;
+    public int fieldInt22019;
+    public int fieldInt22020;
+    public int fieldInt22021;
+    public int fieldInt22022;
+    public int fieldInt22023;
+    public int fieldInt22024;
+    public int fieldInt22025;
+    public int fieldInt22026;
+    public int fieldInt22027;
+    public int fieldInt22028;
+    public int fieldInt22029;
+    public int fieldInt22030;
+    public int fieldInt22031;
+    public int fieldInt22032;
+    public int fieldInt22033;
+    public int fieldInt22034;
+    public int fieldInt22035;
+    public int fieldInt22036;
+    public int fieldInt22037;
+    public int fieldInt22038;
+    public int fieldInt22039;
+    public int fieldInt22040;
+    public int fieldInt22041;
+    public int fieldInt22042;
+    public int fieldInt22043;
+    public int fieldInt22044;
+    public int fieldInt22045;
+    public int fieldInt22046;
+    public int fieldInt22047;
+    public int fieldInt22048;
+    public int fieldInt22049;
+    public int fieldInt22050;
+    public int fieldInt22051;
+    public int fieldInt22052;
+    public int fieldInt22053;
+    public int fieldInt22054;
+    public int fieldInt22055;
+    public int fieldInt22056;
+    public int fieldInt22057;
+    public int fieldInt22058;
+    public int fieldInt22059;
+    public int fieldInt22060;
+    public int fieldInt22061;
+    public int fieldInt22062;
+    public int fieldInt22063;
+    public int fieldInt22064;
+    public int fieldInt22065;
+    public int fieldInt22066;
+    public int fieldInt22067;
+    public int fieldInt22068;
+    public int fieldInt22069;
+    public int fieldInt22070;
+    public int fieldInt22071;
+    public int fieldInt22072;
+    public int fieldInt22073;
+    public int fieldInt22074;
+    public int fieldInt22075;
+    public int fieldInt22076;
+    public int fieldInt22077;
+    public int fieldInt22078;
+    public int fieldInt22079;
+    public int fieldInt22080;
+    public int fieldInt22081;
+    public int fieldInt22082;
+    public int fieldInt22083;
+    public int fieldInt22084;
+    public int fieldInt22085;
+    public int fieldInt22086;
+    public int fieldInt22087;
+    public int fieldInt22088;
+    public int fieldInt22089;
+    public int fieldInt22090;
+    public int fieldInt22091;
+    public int fieldInt22092;
+    public int fieldInt22093;
+    public int fieldInt22094;
+    public int fieldInt22095;
+    public int fieldInt22096;
+    public int fieldInt22097;
+    public int fieldInt22098;
+    public int fieldInt22099;
+    public int fieldInt22100;
+    public int fieldInt22101;
+    public int fieldInt22102;
+    public int fieldInt22103;
+    public int fieldInt22104;
+    public int fieldInt22105;
+    public int fieldInt22106;
+    public int fieldInt22107;
+    public int fieldInt22108;
+    public int fieldInt22109;
+    public int fieldInt22110;
+    public int fieldInt22111;
+    public int fieldInt22112;
+    public int fieldInt22113;
+    public int fieldInt22114;
+    public int fieldInt22115;
+    public int fieldInt22116;
+    public int fieldInt22117;
+    public int fieldInt22118;
+    public int fieldInt22119;
+    public int fieldInt22120;
+    public int fieldInt22121;
+    public int fieldInt22122;
+    public int fieldInt22123;
+    public int fieldInt22124;
+    public int fieldInt22125;
+    public int fieldInt22126;
+    public int fieldInt22127;
+    public int fieldInt22128;
+    public int fieldInt22129;
+    public int fieldInt22130;
+    public int fieldInt22131;
+    public int fieldInt22132;
+    public int fieldInt22133;
+    public int fieldInt22134;
+    public int fieldInt22135;
+    public int fieldInt22136;
+    public int fieldInt22137;
+    public int fieldInt22138;
+    public int fieldInt22139;
+    public int fieldInt22140;
+    public int fieldInt22141;
+    public int fieldInt22142;
+    public int fieldInt22143;
+    public int fieldInt22144;
+    public int fieldInt22145;
+    public int fieldInt22146;
+    public int fieldInt22147;
+    public int fieldInt22148;
+    public int fieldInt22149;
+    public int fieldInt22150;
+    public int fieldInt22151;
+    public int fieldInt22152;
+    public int fieldInt22153;
+    public int fieldInt22154;
+    public int fieldInt22155;
+    public int fieldInt22156;
+    public int fieldInt22157;
+    public int fieldInt22158;
+    public int fieldInt22159;
+    public int fieldInt22160;
+    public int fieldInt22161;
+    public int fieldInt22162;
+    public int fieldInt22163;
+    public int fieldInt22164;
+    public int fieldInt22165;
+    public int fieldInt22166;
+    public int fieldInt22167;
+    public int fieldInt22168;
+    public int fieldInt22169;
+    public int fieldInt22170;
+    public int fieldInt22171;
+    public int fieldInt22172;
+    public int fieldInt22173;
+    public int fieldInt22174;
+    public int fieldInt22175;
+    public int fieldInt22176;
+    public int fieldInt22177;
+    public int fieldInt22178;
+    public int fieldInt22179;
+    public int fieldInt22180;
+    public int fieldInt22181;
+    public int fieldInt22182;
+    public int fieldInt22183;
+    public int fieldInt22184;
+    public int fieldInt22185;
+    public int fieldInt22186;
+    public int fieldInt22187;
+    public int fieldInt22188;
+    public int fieldInt22189;
+    public int fieldInt22190;
+    public int fieldInt22191;
+    public int fieldInt22192;
+    public int fieldInt22193;
+    public int fieldInt22194;
+    public int fieldInt22195;
+    public int fieldInt22196;
+    public int fieldInt22197;
+    public int fieldInt22198;
+    public int fieldInt22199;
+    public int fieldInt22200;
+    public int fieldInt22201;
+    public int fieldInt22202;
+    public int fieldInt22203;
+    public int fieldInt22204;
+    public int fieldInt22205;
+    public int fieldInt22206;
+    public int fieldInt22207;
+    public int fieldInt22208;
+    public int fieldInt22209;
+    public int fieldInt22210;
+    public int fieldInt22211;
+    public int fieldInt22212;
+    public int fieldInt22213;
+    public int fieldInt22214;
+    public int fieldInt22215;
+    public int fieldInt22216;
+    public int fieldInt22217;
+    public int fieldInt22218;
+    public int fieldInt22219;
+    public int fieldInt22220;
+    public int fieldInt22221;
+    public int fieldInt22222;
+    public int fieldInt22223;
+    public int fieldInt22224;
+    public int fieldInt22225;
+    public int fieldInt22226;
+    public int fieldInt22227;
+    public int fieldInt22228;
+    public int fieldInt22229;
+    public int fieldInt22230;
+    public int fieldInt22231;
+    public int fieldInt22232;
+    public int fieldInt22233;
+    public int fieldInt22234;
+    public int fieldInt22235;
+    public int fieldInt22236;
+    public int fieldInt22237;
+    public int fieldInt22238;
+    public int fieldInt22239;
+    public int fieldInt22240;
+    public int fieldInt22241;
+    public int fieldInt22242;
+    public int fieldInt22243;
+    public int fieldInt22244;
+    public int fieldInt22245;
+    public int fieldInt22246;
+    public int fieldInt22247;
+    public int fieldInt22248;
+    public int fieldInt22249;
+    public int fieldInt22250;
+    public int fieldInt22251;
+    public int fieldInt22252;
+    public int fieldInt22253;
+    public int fieldInt22254;
+    public int fieldInt22255;
+    public int fieldInt22256;
+    public int fieldInt22257;
+    public int fieldInt22258;
+    public int fieldInt22259;
+    public int fieldInt22260;
+    public int fieldInt22261;
+    public int fieldInt22262;
+    public int fieldInt22263;
+    public int fieldInt22264;
+    public int fieldInt22265;
+    public int fieldInt22266;
+    public int fieldInt22267;
+    public int fieldInt22268;
+    public int fieldInt22269;
+    public int fieldInt22270;
+    public int fieldInt22271;
+    public int fieldInt22272;
+    public int fieldInt22273;
+    public int fieldInt22274;
+    public int fieldInt22275;
+    public int fieldInt22276;
+    public int fieldInt22277;
+    public int fieldInt22278;
+    public int fieldInt22279;
+    public int fieldInt22280;
+    public int fieldInt22281;
+    public int fieldInt22282;
+    public int fieldInt22283;
+    public int fieldInt22284;
+    public int fieldInt22285;
+    public int fieldInt22286;
+    public int fieldInt22287;
+    public int fieldInt22288;
+    public int fieldInt22289;
+    public int fieldInt22290;
+    public int fieldInt22291;
+    public int fieldInt22292;
+    public int fieldInt22293;
+    public int fieldInt22294;
+    public int fieldInt22295;
+    public int fieldInt22296;
+    public int fieldInt22297;
+    public int fieldInt22298;
+    public int fieldInt22299;
+    public int fieldInt22300;
+    public int fieldInt22301;
+    public int fieldInt22302;
+    public int fieldInt22303;
+    public int fieldInt22304;
+    public int fieldInt22305;
+    public int fieldInt22306;
+    public int fieldInt22307;
+    public int fieldInt22308;
+    public int fieldInt22309;
+    public int fieldInt22310;
+    public int fieldInt22311;
+    public int fieldInt22312;
+    public int fieldInt22313;
+    public int fieldInt22314;
+    public int fieldInt22315;
+    public int fieldInt22316;
+    public int fieldInt22317;
+    public int fieldInt22318;
+    public int fieldInt22319;
+    public int fieldInt22320;
+    public int fieldInt22321;
+    public int fieldInt22322;
+    public int fieldInt22323;
+    public int fieldInt22324;
+    public int fieldInt22325;
+    public int fieldInt22326;
+    public int fieldInt22327;
+    public int fieldInt22328;
+    public int fieldInt22329;
+    public int fieldInt22330;
+    public int fieldInt22331;
+    public int fieldInt22332;
+    public int fieldInt22333;
+    public int fieldInt22334;
+    public int fieldInt22335;
+    public int fieldInt22336;
+    public int fieldInt22337;
+    public int fieldInt22338;
+    public int fieldInt22339;
+    public int fieldInt22340;
+    public int fieldInt22341;
+    public int fieldInt22342;
+    public int fieldInt22343;
+    public int fieldInt22344;
+    public int fieldInt22345;
+    public int fieldInt22346;
+    public int fieldInt22347;
+    public int fieldInt22348;
+    public int fieldInt22349;
+    public int fieldInt22350;
+    public int fieldInt22351;
+    public int fieldInt22352;
+    public int fieldInt22353;
+    public int fieldInt22354;
+    public int fieldInt22355;
+    public int fieldInt22356;
+    public int fieldInt22357;
+    public int fieldInt22358;
+    public int fieldInt22359;
+    public int fieldInt22360;
+    public int fieldInt22361;
+    public int fieldInt22362;
+    public int fieldInt22363;
+    public int fieldInt22364;
+    public int fieldInt22365;
+    public int fieldInt22366;
+    public int fieldInt22367;
+    public int fieldInt22368;
+    public int fieldInt22369;
+    public int fieldInt22370;
+    public int fieldInt22371;
+    public int fieldInt22372;
+    public int fieldInt22373;
+    public int fieldInt22374;
+    public int fieldInt22375;
+    public int fieldInt22376;
+    public int fieldInt22377;
+    public int fieldInt22378;
+    public int fieldInt22379;
+    public int fieldInt22380;
+    public int fieldInt22381;
+    public int fieldInt22382;
+    public int fieldInt22383;
+    public int fieldInt22384;
+    public int fieldInt22385;
+    public int fieldInt22386;
+    public int fieldInt22387;
+    public int fieldInt22388;
+    public int fieldInt22389;
+    public int fieldInt22390;
+    public int fieldInt22391;
+    public int fieldInt22392;
+    public int fieldInt22393;
+    public int fieldInt22394;
+    public int fieldInt22395;
+    public int fieldInt22396;
+    public int fieldInt22397;
+    public int fieldInt22398;
+    public int fieldInt22399;
+    public int fieldInt22400;
+    public int fieldInt22401;
+    public int fieldInt22402;
+    public int fieldInt22403;
+    public int fieldInt22404;
+    public int fieldInt22405;
+    public int fieldInt22406;
+    public int fieldInt22407;
+    public int fieldInt22408;
+    public int fieldInt22409;
+    public int fieldInt22410;
+    public int fieldInt22411;
+    public int fieldInt22412;
+    public int fieldInt22413;
+    public int fieldInt22414;
+    public int fieldInt22415;
+    public int fieldInt22416;
+    public int fieldInt22417;
+    public int fieldInt22418;
+    public int fieldInt22419;
+    public int fieldInt22420;
+    public int fieldInt22421;
+    public int fieldInt22422;
+    public int fieldInt22423;
+    public int fieldInt22424;
+    public int fieldInt22425;
+    public int fieldInt22426;
+    public int fieldInt22427;
+    public int fieldInt22428;
+    public int fieldInt22429;
+    public int fieldInt22430;
+    public int fieldInt22431;
+    public int fieldInt22432;
+    public int fieldInt22433;
+    public int fieldInt22434;
+    public int fieldInt22435;
+    public int fieldInt22436;
+    public int fieldInt22437;
+    public int fieldInt22438;
+    public int fieldInt22439;
+    public int fieldInt22440;
+    public int fieldInt22441;
+    public int fieldInt22442;
+    public int fieldInt22443;
+    public int fieldInt22444;
+    public int fieldInt22445;
+    public int fieldInt22446;
+    public int fieldInt22447;
+    public int fieldInt22448;
+    public int fieldInt22449;
+    public int fieldInt22450;
+    public int fieldInt22451;
+    public int fieldInt22452;
+    public int fieldInt22453;
+    public int fieldInt22454;
+    public int fieldInt22455;
+    public int fieldInt22456;
+    public int fieldInt22457;
+    public int fieldInt22458;
+    public int fieldInt22459;
+    public int fieldInt22460;
+    public int fieldInt22461;
+    public int fieldInt22462;
+    public int fieldInt22463;
+    public int fieldInt22464;
+    public int fieldInt22465;
+    public int fieldInt22466;
+    public int fieldInt22467;
+    public int fieldInt22468;
+    public int fieldInt22469;
+    public int fieldInt22470;
+    public int fieldInt22471;
+    public int fieldInt22472;
+    public int fieldInt22473;
+    public int fieldInt22474;
+    public int fieldInt22475;
+    public int fieldInt22476;
+    public int fieldInt22477;
+    public int fieldInt22478;
+    public int fieldInt22479;
+    public int fieldInt22480;
+    public int fieldInt22481;
+    public int fieldInt22482;
+    public int fieldInt22483;
+    public int fieldInt22484;
+    public int fieldInt22485;
+    public int fieldInt22486;
+    public int fieldInt22487;
+    public int fieldInt22488;
+    public int fieldInt22489;
+    public int fieldInt22490;
+    public int fieldInt22491;
+    public int fieldInt22492;
+    public int fieldInt22493;
+    public int fieldInt22494;
+    public int fieldInt22495;
+    public int fieldInt22496;
+    public int fieldInt22497;
+    public int fieldInt22498;
+    public int fieldInt22499;
+    public int fieldInt22500;
+    public int fieldInt22501;
+    public int fieldInt22502;
+    public int fieldInt22503;
+    public int fieldInt22504;
+    public int fieldInt22505;
+    public int fieldInt22506;
+    public int fieldInt22507;
+    public int fieldInt22508;
+    public int fieldInt22509;
+    public int fieldInt22510;
+    public int fieldInt22511;
+    public int fieldInt22512;
+    public int fieldInt22513;
+    public int fieldInt22514;
+    public int fieldInt22515;
+    public int fieldInt22516;
+    public int fieldInt22517;
+    public int fieldInt22518;
+    public int fieldInt22519;
+    public int fieldInt22520;
+    public int fieldInt22521;
+    public int fieldInt22522;
+    public int fieldInt22523;
+    public int fieldInt22524;
+    public int fieldInt22525;
+    public int fieldInt22526;
+    public int fieldInt22527;
+    public int fieldInt22528;
+    public int fieldInt22529;
+    public int fieldInt22530;
+    public int fieldInt22531;
+    public int fieldInt22532;
+    public int fieldInt22533;
+    public int fieldInt22534;
+    public int fieldInt22535;
+    public int fieldInt22536;
+    public int fieldInt22537;
+    public int fieldInt22538;
+    public int fieldInt22539;
+    public int fieldInt22540;
+    public int fieldInt22541;
+    public int fieldInt22542;
+    public int fieldInt22543;
+    public int fieldInt22544;
+    public int fieldInt22545;
+    public int fieldInt22546;
+    public int fieldInt22547;
+    public int fieldInt22548;
+    public int fieldInt22549;
+    public int fieldInt22550;
+    public int fieldInt22551;
+    public int fieldInt22552;
+    public int fieldInt22553;
+    public int fieldInt22554;
+    public int fieldInt22555;
+    public int fieldInt22556;
+    public int fieldInt22557;
+    public int fieldInt22558;
+    public int fieldInt22559;
+    public int fieldInt22560;
+    public int fieldInt22561;
+    public int fieldInt22562;
+    public int fieldInt22563;
+    public int fieldInt22564;
+    public int fieldInt22565;
+    public int fieldInt22566;
+    public int fieldInt22567;
+    public int fieldInt22568;
+    public int fieldInt22569;
+    public int fieldInt22570;
+    public int fieldInt22571;
+    public int fieldInt22572;
+    public int fieldInt22573;
+    public int fieldInt22574;
+    public int fieldInt22575;
+    public int fieldInt22576;
+    public int fieldInt22577;
+    public int fieldInt22578;
+    public int fieldInt22579;
+    public int fieldInt22580;
+    public int fieldInt22581;
+    public int fieldInt22582;
+    public int fieldInt22583;
+    public int fieldInt22584;
+    public int fieldInt22585;
+    public int fieldInt22586;
+    public int fieldInt22587;
+    public int fieldInt22588;
+    public int fieldInt22589;
+    public int fieldInt22590;
+    public int fieldInt22591;
+    public int fieldInt22592;
+    public int fieldInt22593;
+    public int fieldInt22594;
+    public int fieldInt22595;
+    public int fieldInt22596;
+    public int fieldInt22597;
+    public int fieldInt22598;
+    public int fieldInt22599;
+    public int fieldInt22600;
+    public int fieldInt22601;
+    public int fieldInt22602;
+    public int fieldInt22603;
+    public int fieldInt22604;
+    public int fieldInt22605;
+    public int fieldInt22606;
+    public int fieldInt22607;
+    public int fieldInt22608;
+    public int fieldInt22609;
+    public int fieldInt22610;
+    public int fieldInt22611;
+    public int fieldInt22612;
+    public int fieldInt22613;
+    public int fieldInt22614;
+    public int fieldInt22615;
+    public int fieldInt22616;
+    public int fieldInt22617;
+    public int fieldInt22618;
+    public int fieldInt22619;
+    public int fieldInt22620;
+    public int fieldInt22621;
+    public int fieldInt22622;
+    public int fieldInt22623;
+    public int fieldInt22624;
+    public int fieldInt22625;
+    public int fieldInt22626;
+    public int fieldInt22627;
+    public int fieldInt22628;
+    public int fieldInt22629;
+    public int fieldInt22630;
+    public int fieldInt22631;
+    public int fieldInt22632;
+    public int fieldInt22633;
+    public int fieldInt22634;
+    public int fieldInt22635;
+    public int fieldInt22636;
+    public int fieldInt22637;
+    public int fieldInt22638;
+    public int fieldInt22639;
+    public int fieldInt22640;
+    public int fieldInt22641;
+    public int fieldInt22642;
+    public int fieldInt22643;
+    public int fieldInt22644;
+    public int fieldInt22645;
+    public int fieldInt22646;
+    public int fieldInt22647;
+    public int fieldInt22648;
+    public int fieldInt22649;
+    public int fieldInt22650;
+    public int fieldInt22651;
+    public int fieldInt22652;
+    public int fieldInt22653;
+    public int fieldInt22654;
+    public int fieldInt22655;
+    public int fieldInt22656;
+    public int fieldInt22657;
+    public int fieldInt22658;
+    public int fieldInt22659;
+    public int fieldInt22660;
+    public int fieldInt22661;
+    public int fieldInt22662;
+    public int fieldInt22663;
+    public int fieldInt22664;
+    public int fieldInt22665;
+    public int fieldInt22666;
+    public int fieldInt22667;
+    public int fieldInt22668;
+    public int fieldInt22669;
+    public int fieldInt22670;
+    public int fieldInt22671;
+    public int fieldInt22672;
+    public int fieldInt22673;
+    public int fieldInt22674;
+    public int fieldInt22675;
+    public int fieldInt22676;
+    public int fieldInt22677;
+    public int fieldInt22678;
+    public int fieldInt22679;
+    public int fieldInt22680;
+    public int fieldInt22681;
+    public int fieldInt22682;
+    public int fieldInt22683;
+    public int fieldInt22684;
+    public int fieldInt22685;
+    public int fieldInt22686;
+    public int fieldInt22687;
+    public int fieldInt22688;
+    public int fieldInt22689;
+    public int fieldInt22690;
+    public int fieldInt22691;
+    public int fieldInt22692;
+    public int fieldInt22693;
+    public int fieldInt22694;
+    public int fieldInt22695;
+    public int fieldInt22696;
+    public int fieldInt22697;
+    public int fieldInt22698;
+    public int fieldInt22699;
+    public int fieldInt22700;
+    public int fieldInt22701;
+    public int fieldInt22702;
+    public int fieldInt22703;
+    public int fieldInt22704;
+    public int fieldInt22705;
+    public int fieldInt22706;
+    public int fieldInt22707;
+    public int fieldInt22708;
+    public int fieldInt22709;
+    public int fieldInt22710;
+    public int fieldInt22711;
+    public int fieldInt22712;
+    public int fieldInt22713;
+    public int fieldInt22714;
+    public int fieldInt22715;
+    public int fieldInt22716;
+    public int fieldInt22717;
+    public int fieldInt22718;
+    public int fieldInt22719;
+    public int fieldInt22720;
+    public int fieldInt22721;
+    public int fieldInt22722;
+    public int fieldInt22723;
+    public int fieldInt22724;
+    public int fieldInt22725;
+    public int fieldInt22726;
+    public int fieldInt22727;
+    public int fieldInt22728;
+    public int fieldInt22729;
+    public int fieldInt22730;
+    public int fieldInt22731;
+    public int fieldInt22732;
+    public int fieldInt22733;
+    public int fieldInt22734;
+    public int fieldInt22735;
+    public int fieldInt22736;
+    public int fieldInt22737;
+    public int fieldInt22738;
+    public int fieldInt22739;
+    public int fieldInt22740;
+    public int fieldInt22741;
+    public int fieldInt22742;
+    public int fieldInt22743;
+    public int fieldInt22744;
+    public int fieldInt22745;
+    public int fieldInt22746;
+    public int fieldInt22747;
+    public int fieldInt22748;
+    public int fieldInt22749;
+    public int fieldInt22750;
+    public int fieldInt22751;
+    public int fieldInt22752;
+    public int fieldInt22753;
+    public int fieldInt22754;
+    public int fieldInt22755;
+    public int fieldInt22756;
+    public int fieldInt22757;
+    public int fieldInt22758;
+    public int fieldInt22759;
+    public int fieldInt22760;
+    public int fieldInt22761;
+    public int fieldInt22762;
+    public int fieldInt22763;
+    public int fieldInt22764;
+    public int fieldInt22765;
+    public int fieldInt22766;
+    public int fieldInt22767;
+    public int fieldInt22768;
+    public int fieldInt22769;
+    public int fieldInt22770;
+    public int fieldInt22771;
+    public int fieldInt22772;
+    public int fieldInt22773;
+    public int fieldInt22774;
+    public int fieldInt22775;
+    public int fieldInt22776;
+    public int fieldInt22777;
+    public int fieldInt22778;
+    public int fieldInt22779;
+    public int fieldInt22780;
+    public int fieldInt22781;
+    public int fieldInt22782;
+    public int fieldInt22783;
+    public int fieldInt22784;
+    public int fieldInt22785;
+    public int fieldInt22786;
+    public int fieldInt22787;
+    public int fieldInt22788;
+    public int fieldInt22789;
+    public int fieldInt22790;
+    public int fieldInt22791;
+    public int fieldInt22792;
+    public int fieldInt22793;
+    public int fieldInt22794;
+    public int fieldInt22795;
+    public int fieldInt22796;
+    public int fieldInt22797;
+    public int fieldInt22798;
+    public int fieldInt22799;
+    public int fieldInt22800;
+    public int fieldInt22801;
+    public int fieldInt22802;
+    public int fieldInt22803;
+    public int fieldInt22804;
+    public int fieldInt22805;
+    public int fieldInt22806;
+    public int fieldInt22807;
+    public int fieldInt22808;
+    public int fieldInt22809;
+    public int fieldInt22810;
+    public int fieldInt22811;
+    public int fieldInt22812;
+    public int fieldInt22813;
+    public int fieldInt22814;
+    public int fieldInt22815;
+    public int fieldInt22816;
+    public int fieldInt22817;
+    public int fieldInt22818;
+    public int fieldInt22819;
+    public int fieldInt22820;
+    public int fieldInt22821;
+    public int fieldInt22822;
+    public int fieldInt22823;
+    public int fieldInt22824;
+    public int fieldInt22825;
+    public int fieldInt22826;
+    public int fieldInt22827;
+    public int fieldInt22828;
+    public int fieldInt22829;
+    public int fieldInt22830;
+    public int fieldInt22831;
+    public int fieldInt22832;
+    public int fieldInt22833;
+    public int fieldInt22834;
+    public int fieldInt22835;
+    public int fieldInt22836;
+    public int fieldInt22837;
+    public int fieldInt22838;
+    public int fieldInt22839;
+    public int fieldInt22840;
+    public int fieldInt22841;
+    public int fieldInt22842;
+    public int fieldInt22843;
+    public int fieldInt22844;
+    public int fieldInt22845;
+    public int fieldInt22846;
+    public int fieldInt22847;
+    public int fieldInt22848;
+    public int fieldInt22849;
+    public int fieldInt22850;
+    public int fieldInt22851;
+    public int fieldInt22852;
+    public int fieldInt22853;
+    public int fieldInt22854;
+    public int fieldInt22855;
+    public int fieldInt22856;
+    public int fieldInt22857;
+    public int fieldInt22858;
+    public int fieldInt22859;
+    public int fieldInt22860;
+    public int fieldInt22861;
+    public int fieldInt22862;
+    public int fieldInt22863;
+    public int fieldInt22864;
+    public int fieldInt22865;
+    public int fieldInt22866;
+    public int fieldInt22867;
+    public int fieldInt22868;
+    public int fieldInt22869;
+    public int fieldInt22870;
+    public int fieldInt22871;
+    public int fieldInt22872;
+    public int fieldInt22873;
+    public int fieldInt22874;
+    public int fieldInt22875;
+    public int fieldInt22876;
+    public int fieldInt22877;
+    public int fieldInt22878;
+    public int fieldInt22879;
+    public int fieldInt22880;
+    public int fieldInt22881;
+    public int fieldInt22882;
+    public int fieldInt22883;
+    public int fieldInt22884;
+    public int fieldInt22885;
+    public int fieldInt22886;
+    public int fieldInt22887;
+    public int fieldInt22888;
+    public int fieldInt22889;
+    public int fieldInt22890;
+    public int fieldInt22891;
+    public int fieldInt22892;
+    public int fieldInt22893;
+    public int fieldInt22894;
+    public int fieldInt22895;
+    public int fieldInt22896;
+    public int fieldInt22897;
+    public int fieldInt22898;
+    public int fieldInt22899;
+    public int fieldInt22900;
+    public int fieldInt22901;
+    public int fieldInt22902;
+    public int fieldInt22903;
+    public int fieldInt22904;
+    public int fieldInt22905;
+    public int fieldInt22906;
+    public int fieldInt22907;
+    public int fieldInt22908;
+    public int fieldInt22909;
+    public int fieldInt22910;
+    public int fieldInt22911;
+    public int fieldInt22912;
+    public int fieldInt22913;
+    public int fieldInt22914;
+    public int fieldInt22915;
+    public int fieldInt22916;
+    public int fieldInt22917;
+    public int fieldInt22918;
+    public int fieldInt22919;
+    public int fieldInt22920;
+    public int fieldInt22921;
+    public int fieldInt22922;
+    public int fieldInt22923;
+    public int fieldInt22924;
+    public int fieldInt22925;
+    public int fieldInt22926;
+    public int fieldInt22927;
+    public int fieldInt22928;
+    public int fieldInt22929;
+    public int fieldInt22930;
+    public int fieldInt22931;
+    public int fieldInt22932;
+    public int fieldInt22933;
+    public int fieldInt22934;
+    public int fieldInt22935;
+    public int fieldInt22936;
+    public int fieldInt22937;
+    public int fieldInt22938;
+    public int fieldInt22939;
+    public int fieldInt22940;
+    public int fieldInt22941;
+    public int fieldInt22942;
+    public int fieldInt22943;
+    public int fieldInt22944;
+    public int fieldInt22945;
+    public int fieldInt22946;
+    public int fieldInt22947;
+    public int fieldInt22948;
+    public int fieldInt22949;
+    public int fieldInt22950;
+    public int fieldInt22951;
+    public int fieldInt22952;
+    public int fieldInt22953;
+    public int fieldInt22954;
+    public int fieldInt22955;
+    public int fieldInt22956;
+    public int fieldInt22957;
+    public int fieldInt22958;
+    public int fieldInt22959;
+    public int fieldInt22960;
+    public int fieldInt22961;
+    public int fieldInt22962;
+    public int fieldInt22963;
+    public int fieldInt22964;
+    public int fieldInt22965;
+    public int fieldInt22966;
+    public int fieldInt22967;
+    public int fieldInt22968;
+    public int fieldInt22969;
+    public int fieldInt22970;
+    public int fieldInt22971;
+    public int fieldInt22972;
+    public int fieldInt22973;
+    public int fieldInt22974;
+    public int fieldInt22975;
+    public int fieldInt22976;
+    public int fieldInt22977;
+    public int fieldInt22978;
+    public int fieldInt22979;
+    public int fieldInt22980;
+    public int fieldInt22981;
+    public int fieldInt22982;
+    public int fieldInt22983;
+    public int fieldInt22984;
+    public int fieldInt22985;
+    public int fieldInt22986;
+    public int fieldInt22987;
+    public int fieldInt22988;
+    public int fieldInt22989;
+    public int fieldInt22990;
+    public int fieldInt22991;
+    public int fieldInt22992;
+    public int fieldInt22993;
+    public int fieldInt22994;
+    public int fieldInt22995;
+    public int fieldInt22996;
+    public int fieldInt22997;
+    public int fieldInt22998;
+    public int fieldInt22999;
+    public int fieldInt23000;
+    public int fieldInt23001;
+    public int fieldInt23002;
+    public int fieldInt23003;
+    public int fieldInt23004;
+    public int fieldInt23005;
+    public int fieldInt23006;
+    public int fieldInt23007;
+    public int fieldInt23008;
+    public int fieldInt23009;
+    public int fieldInt23010;
+    public int fieldInt23011;
+    public int fieldInt23012;
+    public int fieldInt23013;
+    public int fieldInt23014;
+    public int fieldInt23015;
+    public int fieldInt23016;
+    public int fieldInt23017;
+    public int fieldInt23018;
+    public int fieldInt23019;
+    public int fieldInt23020;
+    public int fieldInt23021;
+    public int fieldInt23022;
+    public int fieldInt23023;
+    public int fieldInt23024;
+    public int fieldInt23025;
+    public int fieldInt23026;
+    public int fieldInt23027;
+    public int fieldInt23028;
+    public int fieldInt23029;
+    public int fieldInt23030;
+    public int fieldInt23031;
+    public int fieldInt23032;
+    public int fieldInt23033;
+    public int fieldInt23034;
+    public int fieldInt23035;
+    public int fieldInt23036;
+    public int fieldInt23037;
+    public int fieldInt23038;
+    public int fieldInt23039;
+    public int fieldInt23040;
+    public int fieldInt23041;
+    public int fieldInt23042;
+    public int fieldInt23043;
+    public int fieldInt23044;
+    public int fieldInt23045;
+    public int fieldInt23046;
+    public int fieldInt23047;
+    public int fieldInt23048;
+    public int fieldInt23049;
+    public int fieldInt23050;
+    public int fieldInt23051;
+    public int fieldInt23052;
+    public int fieldInt23053;
+    public int fieldInt23054;
+    public int fieldInt23055;
+    public int fieldInt23056;
+    public int fieldInt23057;
+    public int fieldInt23058;
+    public int fieldInt23059;
+    public int fieldInt23060;
+    public int fieldInt23061;
+    public int fieldInt23062;
+    public int fieldInt23063;
+    public int fieldInt23064;
+    public int fieldInt23065;
+    public int fieldInt23066;
+    public int fieldInt23067;
+    public int fieldInt23068;
+    public int fieldInt23069;
+    public int fieldInt23070;
+    public int fieldInt23071;
+    public int fieldInt23072;
+    public int fieldInt23073;
+    public int fieldInt23074;
+    public int fieldInt23075;
+    public int fieldInt23076;
+    public int fieldInt23077;
+    public int fieldInt23078;
+    public int fieldInt23079;
+    public int fieldInt23080;
+    public int fieldInt23081;
+    public int fieldInt23082;
+    public int fieldInt23083;
+    public int fieldInt23084;
+    public int fieldInt23085;
+    public int fieldInt23086;
+    public int fieldInt23087;
+    public int fieldInt23088;
+    public int fieldInt23089;
+    public int fieldInt23090;
+    public int fieldInt23091;
+    public int fieldInt23092;
+    public int fieldInt23093;
+    public int fieldInt23094;
+    public int fieldInt23095;
+    public int fieldInt23096;
+    public int fieldInt23097;
+    public int fieldInt23098;
+    public int fieldInt23099;
+    public int fieldInt23100;
+    public int fieldInt23101;
+    public int fieldInt23102;
+    public int fieldInt23103;
+    public int fieldInt23104;
+    public int fieldInt23105;
+    public int fieldInt23106;
+    public int fieldInt23107;
+    public int fieldInt23108;
+    public int fieldInt23109;
+    public int fieldInt23110;
+    public int fieldInt23111;
+    public int fieldInt23112;
+    public int fieldInt23113;
+    public int fieldInt23114;
+    public int fieldInt23115;
+    public int fieldInt23116;
+    public int fieldInt23117;
+    public int fieldInt23118;
+    public int fieldInt23119;
+    public int fieldInt23120;
+    public int fieldInt23121;
+    public int fieldInt23122;
+    public int fieldInt23123;
+    public int fieldInt23124;
+    public int fieldInt23125;
+    public int fieldInt23126;
+    public int fieldInt23127;
+    public int fieldInt23128;
+    public int fieldInt23129;
+    public int fieldInt23130;
+    public int fieldInt23131;
+    public int fieldInt23132;
+    public int fieldInt23133;
+    public int fieldInt23134;
+    public int fieldInt23135;
+    public int fieldInt23136;
+    public int fieldInt23137;
+    public int fieldInt23138;
+    public int fieldInt23139;
+    public int fieldInt23140;
+    public int fieldInt23141;
+    public int fieldInt23142;
+    public int fieldInt23143;
+    public int fieldInt23144;
+    public int fieldInt23145;
+    public int fieldInt23146;
+    public int fieldInt23147;
+    public int fieldInt23148;
+    public int fieldInt23149;
+    public int fieldInt23150;
+    public int fieldInt23151;
+    public int fieldInt23152;
+    public int fieldInt23153;
+    public int fieldInt23154;
+    public int fieldInt23155;
+    public int fieldInt23156;
+    public int fieldInt23157;
+    public int fieldInt23158;
+    public int fieldInt23159;
+    public int fieldInt23160;
+    public int fieldInt23161;
+    public int fieldInt23162;
+    public int fieldInt23163;
+    public int fieldInt23164;
+    public int fieldInt23165;
+    public int fieldInt23166;
+    public int fieldInt23167;
+    public int fieldInt23168;
+    public int fieldInt23169;
+    public int fieldInt23170;
+    public int fieldInt23171;
+    public int fieldInt23172;
+    public int fieldInt23173;
+    public int fieldInt23174;
+    public int fieldInt23175;
+    public int fieldInt23176;
+    public int fieldInt23177;
+    public int fieldInt23178;
+    public int fieldInt23179;
+    public int fieldInt23180;
+    public int fieldInt23181;
+    public int fieldInt23182;
+    public int fieldInt23183;
+    public int fieldInt23184;
+    public int fieldInt23185;
+    public int fieldInt23186;
+    public int fieldInt23187;
+    public int fieldInt23188;
+    public int fieldInt23189;
+    public int fieldInt23190;
+    public int fieldInt23191;
+    public int fieldInt23192;
+    public int fieldInt23193;
+    public int fieldInt23194;
+    public int fieldInt23195;
+    public int fieldInt23196;
+    public int fieldInt23197;
+    public int fieldInt23198;
+    public int fieldInt23199;
+    public int fieldInt23200;
+    public int fieldInt23201;
+    public int fieldInt23202;
+    public int fieldInt23203;
+    public int fieldInt23204;
+    public int fieldInt23205;
+    public int fieldInt23206;
+    public int fieldInt23207;
+    public int fieldInt23208;
+    public int fieldInt23209;
+    public int fieldInt23210;
+    public int fieldInt23211;
+    public int fieldInt23212;
+    public int fieldInt23213;
+    public int fieldInt23214;
+    public int fieldInt23215;
+    public int fieldInt23216;
+    public int fieldInt23217;
+    public int fieldInt23218;
+    public int fieldInt23219;
+    public int fieldInt23220;
+    public int fieldInt23221;
+    public int fieldInt23222;
+    public int fieldInt23223;
+    public int fieldInt23224;
+    public int fieldInt23225;
+    public int fieldInt23226;
+    public int fieldInt23227;
+    public int fieldInt23228;
+    public int fieldInt23229;
+    public int fieldInt23230;
+    public int fieldInt23231;
+    public int fieldInt23232;
+    public int fieldInt23233;
+    public int fieldInt23234;
+    public int fieldInt23235;
+    public int fieldInt23236;
+    public int fieldInt23237;
+    public int fieldInt23238;
+    public int fieldInt23239;
+    public int fieldInt23240;
+    public int fieldInt23241;
+    public int fieldInt23242;
+    public int fieldInt23243;
+    public int fieldInt23244;
+    public int fieldInt23245;
+    public int fieldInt23246;
+    public int fieldInt23247;
+    public int fieldInt23248;
+    public int fieldInt23249;
+    public int fieldInt23250;
+    public int fieldInt23251;
+    public int fieldInt23252;
+    public int fieldInt23253;
+    public int fieldInt23254;
+    public int fieldInt23255;
+    public int fieldInt23256;
+    public int fieldInt23257;
+    public int fieldInt23258;
+    public int fieldInt23259;
+    public int fieldInt23260;
+    public int fieldInt23261;
+    public int fieldInt23262;
+    public int fieldInt23263;
+    public int fieldInt23264;
+    public int fieldInt23265;
+    public int fieldInt23266;
+    public int fieldInt23267;
+    public int fieldInt23268;
+    public int fieldInt23269;
+    public int fieldInt23270;
+    public int fieldInt23271;
+    public int fieldInt23272;
+    public int fieldInt23273;
+    public int fieldInt23274;
+    public int fieldInt23275;
+    public int fieldInt23276;
+    public int fieldInt23277;
+    public int fieldInt23278;
+    public int fieldInt23279;
+    public int fieldInt23280;
+    public int fieldInt23281;
+    public int fieldInt23282;
+    public int fieldInt23283;
+    public int fieldInt23284;
+    public int fieldInt23285;
+    public int fieldInt23286;
+    public int fieldInt23287;
+    public int fieldInt23288;
+    public int fieldInt23289;
+    public int fieldInt23290;
+    public int fieldInt23291;
+    public int fieldInt23292;
+    public int fieldInt23293;
+    public int fieldInt23294;
+    public int fieldInt23295;
+    public int fieldInt23296;
+    public int fieldInt23297;
+    public int fieldInt23298;
+    public int fieldInt23299;
+    public int fieldInt23300;
+    public int fieldInt23301;
+    public int fieldInt23302;
+    public int fieldInt23303;
+    public int fieldInt23304;
+    public int fieldInt23305;
+    public int fieldInt23306;
+    public int fieldInt23307;
+    public int fieldInt23308;
+    public int fieldInt23309;
+    public int fieldInt23310;
+    public int fieldInt23311;
+    public int fieldInt23312;
+    public int fieldInt23313;
+    public int fieldInt23314;
+    public int fieldInt23315;
+    public int fieldInt23316;
+    public int fieldInt23317;
+    public int fieldInt23318;
+    public int fieldInt23319;
+    public int fieldInt23320;
+    public int fieldInt23321;
+    public int fieldInt23322;
+    public int fieldInt23323;
+    public int fieldInt23324;
+    public int fieldInt23325;
+    public int fieldInt23326;
+    public int fieldInt23327;
+    public int fieldInt23328;
+    public int fieldInt23329;
+    public int fieldInt23330;
+    public int fieldInt23331;
+    public int fieldInt23332;
+    public int fieldInt23333;
+    public int fieldInt23334;
+    public int fieldInt23335;
+    public int fieldInt23336;
+    public int fieldInt23337;
+    public int fieldInt23338;
+    public int fieldInt23339;
+    public int fieldInt23340;
+    public int fieldInt23341;
+    public int fieldInt23342;
+    public int fieldInt23343;
+    public int fieldInt23344;
+    public int fieldInt23345;
+    public int fieldInt23346;
+    public int fieldInt23347;
+    public int fieldInt23348;
+    public int fieldInt23349;
+    public int fieldInt23350;
+    public int fieldInt23351;
+    public int fieldInt23352;
+    public int fieldInt23353;
+    public int fieldInt23354;
+    public int fieldInt23355;
+    public int fieldInt23356;
+    public int fieldInt23357;
+    public int fieldInt23358;
+    public int fieldInt23359;
+    public int fieldInt23360;
+    public int fieldInt23361;
+    public int fieldInt23362;
+    public int fieldInt23363;
+    public int fieldInt23364;
+    public int fieldInt23365;
+    public int fieldInt23366;
+    public int fieldInt23367;
+    public int fieldInt23368;
+    public int fieldInt23369;
+    public int fieldInt23370;
+    public int fieldInt23371;
+    public int fieldInt23372;
+    public int fieldInt23373;
+    public int fieldInt23374;
+    public int fieldInt23375;
+    public int fieldInt23376;
+    public int fieldInt23377;
+    public int fieldInt23378;
+    public int fieldInt23379;
+    public int fieldInt23380;
+    public int fieldInt23381;
+    public int fieldInt23382;
+    public int fieldInt23383;
+    public int fieldInt23384;
+    public int fieldInt23385;
+    public int fieldInt23386;
+    public int fieldInt23387;
+    public int fieldInt23388;
+    public int fieldInt23389;
+    public int fieldInt23390;
+    public int fieldInt23391;
+    public int fieldInt23392;
+    public int fieldInt23393;
+    public int fieldInt23394;
+    public int fieldInt23395;
+    public int fieldInt23396;
+    public int fieldInt23397;
+    public int fieldInt23398;
+    public int fieldInt23399;
+    public int fieldInt23400;
+    public int fieldInt23401;
+    public int fieldInt23402;
+    public int fieldInt23403;
+    public int fieldInt23404;
+    public int fieldInt23405;
+    public int fieldInt23406;
+    public int fieldInt23407;
+    public int fieldInt23408;
+    public int fieldInt23409;
+    public int fieldInt23410;
+    public int fieldInt23411;
+    public int fieldInt23412;
+    public int fieldInt23413;
+    public int fieldInt23414;
+    public int fieldInt23415;
+    public int fieldInt23416;
+    public int fieldInt23417;
+    public int fieldInt23418;
+    public int fieldInt23419;
+    public int fieldInt23420;
+    public int fieldInt23421;
+    public int fieldInt23422;
+    public int fieldInt23423;
+    public int fieldInt23424;
+    public int fieldInt23425;
+    public int fieldInt23426;
+    public int fieldInt23427;
+    public int fieldInt23428;
+    public int fieldInt23429;
+    public int fieldInt23430;
+    public int fieldInt23431;
+    public int fieldInt23432;
+    public int fieldInt23433;
+    public int fieldInt23434;
+    public int fieldInt23435;
+    public int fieldInt23436;
+    public int fieldInt23437;
+    public int fieldInt23438;
+    public int fieldInt23439;
+    public int fieldInt23440;
+    public int fieldInt23441;
+    public int fieldInt23442;
+    public int fieldInt23443;
+    public int fieldInt23444;
+    public int fieldInt23445;
+    public int fieldInt23446;
+    public int fieldInt23447;
+    public int fieldInt23448;
+    public int fieldInt23449;
+    public int fieldInt23450;
+    public int fieldInt23451;
+    public int fieldInt23452;
+    public int fieldInt23453;
+    public int fieldInt23454;
+    public int fieldInt23455;
+    public int fieldInt23456;
+    public int fieldInt23457;
+    public int fieldInt23458;
+    public int fieldInt23459;
+    public int fieldInt23460;
+    public int fieldInt23461;
+    public int fieldInt23462;
+    public int fieldInt23463;
+    public int fieldInt23464;
+    public int fieldInt23465;
+    public int fieldInt23466;
+    public int fieldInt23467;
+    public int fieldInt23468;
+    public int fieldInt23469;
+    public int fieldInt23470;
+    public int fieldInt23471;
+    public int fieldInt23472;
+    public int fieldInt23473;
+    public int fieldInt23474;
+    public int fieldInt23475;
+    public int fieldInt23476;
+    public int fieldInt23477;
+    public int fieldInt23478;
+    public int fieldInt23479;
+    public int fieldInt23480;
+    public int fieldInt23481;
+    public int fieldInt23482;
+    public int fieldInt23483;
+    public int fieldInt23484;
+    public int fieldInt23485;
+    public int fieldInt23486;
+    public int fieldInt23487;
+    public int fieldInt23488;
+    public int fieldInt23489;
+    public int fieldInt23490;
+    public int fieldInt23491;
+    public int fieldInt23492;
+    public int fieldInt23493;
+    public int fieldInt23494;
+    public int fieldInt23495;
+    public int fieldInt23496;
+    public int fieldInt23497;
+    public int fieldInt23498;
+    public int fieldInt23499;
+    public int fieldInt23500;
+    public int fieldInt23501;
+    public int fieldInt23502;
+    public int fieldInt23503;
+    public int fieldInt23504;
+    public int fieldInt23505;
+    public int fieldInt23506;
+    public int fieldInt23507;
+    public int fieldInt23508;
+    public int fieldInt23509;
+    public int fieldInt23510;
+    public int fieldInt23511;
+    public int fieldInt23512;
+    public int fieldInt23513;
+    public int fieldInt23514;
+    public int fieldInt23515;
+    public int fieldInt23516;
+    public int fieldInt23517;
+    public int fieldInt23518;
+    public int fieldInt23519;
+    public int fieldInt23520;
+    public int fieldInt23521;
+    public int fieldInt23522;
+    public int fieldInt23523;
+    public int fieldInt23524;
+    public int fieldInt23525;
+    public int fieldInt23526;
+    public int fieldInt23527;
+    public int fieldInt23528;
+    public int fieldInt23529;
+    public int fieldInt23530;
+    public int fieldInt23531;
+    public int fieldInt23532;
+    public int fieldInt23533;
+    public int fieldInt23534;
+    public int fieldInt23535;
+    public int fieldInt23536;
+    public int fieldInt23537;
+    public int fieldInt23538;
+    public int fieldInt23539;
+    public int fieldInt23540;
+    public int fieldInt23541;
+    public int fieldInt23542;
+    public int fieldInt23543;
+    public int fieldInt23544;
+    public int fieldInt23545;
+    public int fieldInt23546;
+    public int fieldInt23547;
+    public int fieldInt23548;
+    public int fieldInt23549;
+    public int fieldInt23550;
+    public int fieldInt23551;
+    public int fieldInt23552;
+    public int fieldInt23553;
+    public int fieldInt23554;
+    public int fieldInt23555;
+    public int fieldInt23556;
+    public int fieldInt23557;
+    public int fieldInt23558;
+    public int fieldInt23559;
+    public int fieldInt23560;
+    public int fieldInt23561;
+    public int fieldInt23562;
+    public int fieldInt23563;
+    public int fieldInt23564;
+    public int fieldInt23565;
+    public int fieldInt23566;
+    public int fieldInt23567;
+    public int fieldInt23568;
+    public int fieldInt23569;
+    public int fieldInt23570;
+    public int fieldInt23571;
+    public int fieldInt23572;
+    public int fieldInt23573;
+    public int fieldInt23574;
+    public int fieldInt23575;
+    public int fieldInt23576;
+    public int fieldInt23577;
+    public int fieldInt23578;
+    public int fieldInt23579;
+    public int fieldInt23580;
+    public int fieldInt23581;
+    public int fieldInt23582;
+    public int fieldInt23583;
+    public int fieldInt23584;
+    public int fieldInt23585;
+    public int fieldInt23586;
+    public int fieldInt23587;
+    public int fieldInt23588;
+    public int fieldInt23589;
+    public int fieldInt23590;
+    public int fieldInt23591;
+    public int fieldInt23592;
+    public int fieldInt23593;
+    public int fieldInt23594;
+    public int fieldInt23595;
+    public int fieldInt23596;
+    public int fieldInt23597;
+    public int fieldInt23598;
+    public int fieldInt23599;
+    public int fieldInt23600;
+    public int fieldInt23601;
+    public int fieldInt23602;
+    public int fieldInt23603;
+    public int fieldInt23604;
+    public int fieldInt23605;
+    public int fieldInt23606;
+    public int fieldInt23607;
+    public int fieldInt23608;
+    public int fieldInt23609;
+    public int fieldInt23610;
+    public int fieldInt23611;
+    public int fieldInt23612;
+    public int fieldInt23613;
+    public int fieldInt23614;
+    public int fieldInt23615;
+    public int fieldInt23616;
+    public int fieldInt23617;
+    public int fieldInt23618;
+    public int fieldInt23619;
+    public int fieldInt23620;
+    public int fieldInt23621;
+    public int fieldInt23622;
+    public int fieldInt23623;
+    public int fieldInt23624;
+    public int fieldInt23625;
+    public int fieldInt23626;
+    public int fieldInt23627;
+    public int fieldInt23628;
+    public int fieldInt23629;
+    public int fieldInt23630;
+    public int fieldInt23631;
+    public int fieldInt23632;
+    public int fieldInt23633;
+    public int fieldInt23634;
+    public int fieldInt23635;
+    public int fieldInt23636;
+    public int fieldInt23637;
+    public int fieldInt23638;
+    public int fieldInt23639;
+    public int fieldInt23640;
+    public int fieldInt23641;
+    public int fieldInt23642;
+    public int fieldInt23643;
+    public int fieldInt23644;
+    public int fieldInt23645;
+    public int fieldInt23646;
+    public int fieldInt23647;
+    public int fieldInt23648;
+    public int fieldInt23649;
+    public int fieldInt23650;
+    public int fieldInt23651;
+    public int fieldInt23652;
+    public int fieldInt23653;
+    public int fieldInt23654;
+    public int fieldInt23655;
+    public int fieldInt23656;
+    public int fieldInt23657;
+    public int fieldInt23658;
+    public int fieldInt23659;
+    public int fieldInt23660;
+    public int fieldInt23661;
+    public int fieldInt23662;
+    public int fieldInt23663;
+    public int fieldInt23664;
+    public int fieldInt23665;
+    public int fieldInt23666;
+    public int fieldInt23667;
+    public int fieldInt23668;
+    public int fieldInt23669;
+    public int fieldInt23670;
+    public int fieldInt23671;
+    public int fieldInt23672;
+    public int fieldInt23673;
+    public int fieldInt23674;
+    public int fieldInt23675;
+    public int fieldInt23676;
+    public int fieldInt23677;
+    public int fieldInt23678;
+    public int fieldInt23679;
+    public int fieldInt23680;
+    public int fieldInt23681;
+    public int fieldInt23682;
+    public int fieldInt23683;
+    public int fieldInt23684;
+    public int fieldInt23685;
+    public int fieldInt23686;
+    public int fieldInt23687;
+    public int fieldInt23688;
+    public int fieldInt23689;
+    public int fieldInt23690;
+    public int fieldInt23691;
+    public int fieldInt23692;
+    public int fieldInt23693;
+    public int fieldInt23694;
+    public int fieldInt23695;
+    public int fieldInt23696;
+    public int fieldInt23697;
+    public int fieldInt23698;
+    public int fieldInt23699;
+    public int fieldInt23700;
+    public int fieldInt23701;
+    public int fieldInt23702;
+    public int fieldInt23703;
+    public int fieldInt23704;
+    public int fieldInt23705;
+    public int fieldInt23706;
+    public int fieldInt23707;
+    public int fieldInt23708;
+    public int fieldInt23709;
+    public int fieldInt23710;
+    public int fieldInt23711;
+    public int fieldInt23712;
+    public int fieldInt23713;
+    public int fieldInt23714;
+    public int fieldInt23715;
+    public int fieldInt23716;
+    public int fieldInt23717;
+    public int fieldInt23718;
+    public int fieldInt23719;
+    public int fieldInt23720;
+    public int fieldInt23721;
+    public int fieldInt23722;
+    public int fieldInt23723;
+    public int fieldInt23724;
+    public int fieldInt23725;
+    public int fieldInt23726;
+    public int fieldInt23727;
+    public int fieldInt23728;
+    public int fieldInt23729;
+    public int fieldInt23730;
+    public int fieldInt23731;
+    public int fieldInt23732;
+    public int fieldInt23733;
+    public int fieldInt23734;
+    public int fieldInt23735;
+    public int fieldInt23736;
+    public int fieldInt23737;
+    public int fieldInt23738;
+    public int fieldInt23739;
+    public int fieldInt23740;
+    public int fieldInt23741;
+    public int fieldInt23742;
+    public int fieldInt23743;
+    public int fieldInt23744;
+    public int fieldInt23745;
+    public int fieldInt23746;
+    public int fieldInt23747;
+    public int fieldInt23748;
+    public int fieldInt23749;
+    public int fieldInt23750;
+    public int fieldInt23751;
+    public int fieldInt23752;
+    public int fieldInt23753;
+    public int fieldInt23754;
+    public int fieldInt23755;
+    public int fieldInt23756;
+    public int fieldInt23757;
+    public int fieldInt23758;
+    public int fieldInt23759;
+    public int fieldInt23760;
+    public int fieldInt23761;
+    public int fieldInt23762;
+    public int fieldInt23763;
+    public int fieldInt23764;
+    public int fieldInt23765;
+    public int fieldInt23766;
+    public int fieldInt23767;
+    public int fieldInt23768;
+    public int fieldInt23769;
+    public int fieldInt23770;
+    public int fieldInt23771;
+    public int fieldInt23772;
+    public int fieldInt23773;
+    public int fieldInt23774;
+    public int fieldInt23775;
+    public int fieldInt23776;
+    public int fieldInt23777;
+    public int fieldInt23778;
+    public int fieldInt23779;
+    public int fieldInt23780;
+    public int fieldInt23781;
+    public int fieldInt23782;
+    public int fieldInt23783;
+    public int fieldInt23784;
+    public int fieldInt23785;
+    public int fieldInt23786;
+    public int fieldInt23787;
+    public int fieldInt23788;
+    public int fieldInt23789;
+    public int fieldInt23790;
+    public int fieldInt23791;
+    public int fieldInt23792;
+    public int fieldInt23793;
+    public int fieldInt23794;
+    public int fieldInt23795;
+    public int fieldInt23796;
+    public int fieldInt23797;
+    public int fieldInt23798;
+    public int fieldInt23799;
+    public int fieldInt23800;
+    public int fieldInt23801;
+    public int fieldInt23802;
+    public int fieldInt23803;
+    public int fieldInt23804;
+    public int fieldInt23805;
+    public int fieldInt23806;
+    public int fieldInt23807;
+    public int fieldInt23808;
+    public int fieldInt23809;
+    public int fieldInt23810;
+    public int fieldInt23811;
+    public int fieldInt23812;
+    public int fieldInt23813;
+    public int fieldInt23814;
+    public int fieldInt23815;
+    public int fieldInt23816;
+    public int fieldInt23817;
+    public int fieldInt23818;
+    public int fieldInt23819;
+    public int fieldInt23820;
+    public int fieldInt23821;
+    public int fieldInt23822;
+    public int fieldInt23823;
+    public int fieldInt23824;
+    public int fieldInt23825;
+    public int fieldInt23826;
+    public int fieldInt23827;
+    public int fieldInt23828;
+    public int fieldInt23829;
+    public int fieldInt23830;
+    public int fieldInt23831;
+    public int fieldInt23832;
+    public int fieldInt23833;
+    public int fieldInt23834;
+    public int fieldInt23835;
+    public int fieldInt23836;
+    public int fieldInt23837;
+    public int fieldInt23838;
+    public int fieldInt23839;
+    public int fieldInt23840;
+    public int fieldInt23841;
+    public int fieldInt23842;
+    public int fieldInt23843;
+    public int fieldInt23844;
+    public int fieldInt23845;
+    public int fieldInt23846;
+    public int fieldInt23847;
+    public int fieldInt23848;
+    public int fieldInt23849;
+    public int fieldInt23850;
+    public int fieldInt23851;
+    public int fieldInt23852;
+    public int fieldInt23853;
+    public int fieldInt23854;
+    public int fieldInt23855;
+    public int fieldInt23856;
+    public int fieldInt23857;
+    public int fieldInt23858;
+    public int fieldInt23859;
+    public int fieldInt23860;
+    public int fieldInt23861;
+    public int fieldInt23862;
+    public int fieldInt23863;
+    public int fieldInt23864;
+    public int fieldInt23865;
+    public int fieldInt23866;
+    public int fieldInt23867;
+    public int fieldInt23868;
+    public int fieldInt23869;
+    public int fieldInt23870;
+    public int fieldInt23871;
+    public int fieldInt23872;
+    public int fieldInt23873;
+    public int fieldInt23874;
+    public int fieldInt23875;
+    public int fieldInt23876;
+    public int fieldInt23877;
+    public int fieldInt23878;
+    public int fieldInt23879;
+    public int fieldInt23880;
+    public int fieldInt23881;
+    public int fieldInt23882;
+    public int fieldInt23883;
+    public int fieldInt23884;
+    public int fieldInt23885;
+    public int fieldInt23886;
+    public int fieldInt23887;
+    public int fieldInt23888;
+    public int fieldInt23889;
+    public int fieldInt23890;
+    public int fieldInt23891;
+    public int fieldInt23892;
+    public int fieldInt23893;
+    public int fieldInt23894;
+    public int fieldInt23895;
+    public int fieldInt23896;
+    public int fieldInt23897;
+    public int fieldInt23898;
+    public int fieldInt23899;
+    public int fieldInt23900;
+    public int fieldInt23901;
+    public int fieldInt23902;
+    public int fieldInt23903;
+    public int fieldInt23904;
+    public int fieldInt23905;
+    public int fieldInt23906;
+    public int fieldInt23907;
+    public int fieldInt23908;
+    public int fieldInt23909;
+    public int fieldInt23910;
+    public int fieldInt23911;
+    public int fieldInt23912;
+    public int fieldInt23913;
+    public int fieldInt23914;
+    public int fieldInt23915;
+    public int fieldInt23916;
+    public int fieldInt23917;
+    public int fieldInt23918;
+    public int fieldInt23919;
+    public int fieldInt23920;
+    public int fieldInt23921;
+    public int fieldInt23922;
+    public int fieldInt23923;
+    public int fieldInt23924;
+    public int fieldInt23925;
+    public int fieldInt23926;
+    public int fieldInt23927;
+    public int fieldInt23928;
+    public int fieldInt23929;
+    public int fieldInt23930;
+    public int fieldInt23931;
+    public int fieldInt23932;
+    public int fieldInt23933;
+    public int fieldInt23934;
+    public int fieldInt23935;
+    public int fieldInt23936;
+    public int fieldInt23937;
+    public int fieldInt23938;
+    public int fieldInt23939;
+    public int fieldInt23940;
+    public int fieldInt23941;
+    public int fieldInt23942;
+    public int fieldInt23943;
+    public int fieldInt23944;
+    public int fieldInt23945;
+    public int fieldInt23946;
+    public int fieldInt23947;
+    public int fieldInt23948;
+    public int fieldInt23949;
+    public int fieldInt23950;
+    public int fieldInt23951;
+    public int fieldInt23952;
+    public int fieldInt23953;
+    public int fieldInt23954;
+    public int fieldInt23955;
+    public int fieldInt23956;
+    public int fieldInt23957;
+    public int fieldInt23958;
+    public int fieldInt23959;
+    public int fieldInt23960;
+    public int fieldInt23961;
+    public int fieldInt23962;
+    public int fieldInt23963;
+    public int fieldInt23964;
+    public int fieldInt23965;
+    public int fieldInt23966;
+    public int fieldInt23967;
+    public int fieldInt23968;
+    public int fieldInt23969;
+    public int fieldInt23970;
+    public int fieldInt23971;
+    public int fieldInt23972;
+    public int fieldInt23973;
+    public int fieldInt23974;
+    public int fieldInt23975;
+    public int fieldInt23976;
+    public int fieldInt23977;
+    public int fieldInt23978;
+    public int fieldInt23979;
+    public int fieldInt23980;
+    public int fieldInt23981;
+    public int fieldInt23982;
+    public int fieldInt23983;
+    public int fieldInt23984;
+    public int fieldInt23985;
+    public int fieldInt23986;
+    public int fieldInt23987;
+    public int fieldInt23988;
+    public int fieldInt23989;
+    public int fieldInt23990;
+    public int fieldInt23991;
+    public int fieldInt23992;
+    public int fieldInt23993;
+    public int fieldInt23994;
+    public int fieldInt23995;
+    public int fieldInt23996;
+    public int fieldInt23997;
+    public int fieldInt23998;
+    public int fieldInt23999;
+    public int fieldInt24000;
+    public int fieldInt24001;
+    public int fieldInt24002;
+    public int fieldInt24003;
+    public int fieldInt24004;
+    public int fieldInt24005;
+    public int fieldInt24006;
+    public int fieldInt24007;
+    public int fieldInt24008;
+    public int fieldInt24009;
+    public int fieldInt24010;
+    public int fieldInt24011;
+    public int fieldInt24012;
+    public int fieldInt24013;
+    public int fieldInt24014;
+    public int fieldInt24015;
+    public int fieldInt24016;
+    public int fieldInt24017;
+    public int fieldInt24018;
+    public int fieldInt24019;
+    public int fieldInt24020;
+    public int fieldInt24021;
+    public int fieldInt24022;
+    public int fieldInt24023;
+    public int fieldInt24024;
+    public int fieldInt24025;
+    public int fieldInt24026;
+    public int fieldInt24027;
+    public int fieldInt24028;
+    public int fieldInt24029;
+    public int fieldInt24030;
+    public int fieldInt24031;
+    public int fieldInt24032;
+    public int fieldInt24033;
+    public int fieldInt24034;
+    public int fieldInt24035;
+    public int fieldInt24036;
+    public int fieldInt24037;
+    public int fieldInt24038;
+    public int fieldInt24039;
+    public int fieldInt24040;
+    public int fieldInt24041;
+    public int fieldInt24042;
+    public int fieldInt24043;
+    public int fieldInt24044;
+    public int fieldInt24045;
+    public int fieldInt24046;
+    public int fieldInt24047;
+    public int fieldInt24048;
+    public int fieldInt24049;
+    public int fieldInt24050;
+    public int fieldInt24051;
+    public int fieldInt24052;
+    public int fieldInt24053;
+    public int fieldInt24054;
+    public int fieldInt24055;
+    public int fieldInt24056;
+    public int fieldInt24057;
+    public int fieldInt24058;
+    public int fieldInt24059;
+    public int fieldInt24060;
+    public int fieldInt24061;
+    public int fieldInt24062;
+    public int fieldInt24063;
+    public int fieldInt24064;
+    public int fieldInt24065;
+    public int fieldInt24066;
+    public int fieldInt24067;
+    public int fieldInt24068;
+    public int fieldInt24069;
+    public int fieldInt24070;
+    public int fieldInt24071;
+    public int fieldInt24072;
+    public int fieldInt24073;
+    public int fieldInt24074;
+    public int fieldInt24075;
+    public int fieldInt24076;
+    public int fieldInt24077;
+    public int fieldInt24078;
+    public int fieldInt24079;
+    public int fieldInt24080;
+    public int fieldInt24081;
+    public int fieldInt24082;
+    public int fieldInt24083;
+    public int fieldInt24084;
+    public int fieldInt24085;
+    public int fieldInt24086;
+    public int fieldInt24087;
+    public int fieldInt24088;
+    public int fieldInt24089;
+    public int fieldInt24090;
+    public int fieldInt24091;
+    public int fieldInt24092;
+    public int fieldInt24093;
+    public int fieldInt24094;
+    public int fieldInt24095;
+    public int fieldInt24096;
+    public int fieldInt24097;
+    public int fieldInt24098;
+    public int fieldInt24099;
+    public int fieldInt24100;
+    public int fieldInt24101;
+    public int fieldInt24102;
+    public int fieldInt24103;
+    public int fieldInt24104;
+    public int fieldInt24105;
+    public int fieldInt24106;
+    public int fieldInt24107;
+    public int fieldInt24108;
+    public int fieldInt24109;
+    public int fieldInt24110;
+    public int fieldInt24111;
+    public int fieldInt24112;
+    public int fieldInt24113;
+    public int fieldInt24114;
+    public int fieldInt24115;
+    public int fieldInt24116;
+    public int fieldInt24117;
+    public int fieldInt24118;
+    public int fieldInt24119;
+    public int fieldInt24120;
+    public int fieldInt24121;
+    public int fieldInt24122;
+    public int fieldInt24123;
+    public int fieldInt24124;
+    public int fieldInt24125;
+    public int fieldInt24126;
+    public int fieldInt24127;
+    public int fieldInt24128;
+    public int fieldInt24129;
+    public int fieldInt24130;
+    public int fieldInt24131;
+    public int fieldInt24132;
+    public int fieldInt24133;
+    public int fieldInt24134;
+    public int fieldInt24135;
+    public int fieldInt24136;
+    public int fieldInt24137;
+    public int fieldInt24138;
+    public int fieldInt24139;
+    public int fieldInt24140;
+    public int fieldInt24141;
+    public int fieldInt24142;
+    public int fieldInt24143;
+    public int fieldInt24144;
+    public int fieldInt24145;
+    public int fieldInt24146;
+    public int fieldInt24147;
+    public int fieldInt24148;
+    public int fieldInt24149;
+    public int fieldInt24150;
+    public int fieldInt24151;
+    public int fieldInt24152;
+    public int fieldInt24153;
+    public int fieldInt24154;
+    public int fieldInt24155;
+    public int fieldInt24156;
+    public int fieldInt24157;
+    public int fieldInt24158;
+    public int fieldInt24159;
+    public int fieldInt24160;
+    public int fieldInt24161;
+    public int fieldInt24162;
+    public int fieldInt24163;
+    public int fieldInt24164;
+    public int fieldInt24165;
+    public int fieldInt24166;
+    public int fieldInt24167;
+    public int fieldInt24168;
+    public int fieldInt24169;
+    public int fieldInt24170;
+    public int fieldInt24171;
+    public int fieldInt24172;
+    public int fieldInt24173;
+    public int fieldInt24174;
+    public int fieldInt24175;
+    public int fieldInt24176;
+    public int fieldInt24177;
+    public int fieldInt24178;
+    public int fieldInt24179;
+    public int fieldInt24180;
+    public int fieldInt24181;
+    public int fieldInt24182;
+    public int fieldInt24183;
+    public int fieldInt24184;
+    public int fieldInt24185;
+    public int fieldInt24186;
+    public int fieldInt24187;
+    public int fieldInt24188;
+    public int fieldInt24189;
+    public int fieldInt24190;
+    public int fieldInt24191;
+    public int fieldInt24192;
+    public int fieldInt24193;
+    public int fieldInt24194;
+    public int fieldInt24195;
+    public int fieldInt24196;
+    public int fieldInt24197;
+    public int fieldInt24198;
+    public int fieldInt24199;
+    public int fieldInt24200;
+    public int fieldInt24201;
+    public int fieldInt24202;
+    public int fieldInt24203;
+    public int fieldInt24204;
+    public int fieldInt24205;
+    public int fieldInt24206;
+    public int fieldInt24207;
+    public int fieldInt24208;
+    public int fieldInt24209;
+    public int fieldInt24210;
+    public int fieldInt24211;
+    public int fieldInt24212;
+    public int fieldInt24213;
+    public int fieldInt24214;
+    public int fieldInt24215;
+    public int fieldInt24216;
+    public int fieldInt24217;
+    public int fieldInt24218;
+    public int fieldInt24219;
+    public int fieldInt24220;
+    public int fieldInt24221;
+    public int fieldInt24222;
+    public int fieldInt24223;
+    public int fieldInt24224;
+    public int fieldInt24225;
+    public int fieldInt24226;
+    public int fieldInt24227;
+    public int fieldInt24228;
+    public int fieldInt24229;
+    public int fieldInt24230;
+    public int fieldInt24231;
+    public int fieldInt24232;
+    public int fieldInt24233;
+    public int fieldInt24234;
+    public int fieldInt24235;
+    public int fieldInt24236;
+    public int fieldInt24237;
+    public int fieldInt24238;
+    public int fieldInt24239;
+    public int fieldInt24240;
+    public int fieldInt24241;
+    public int fieldInt24242;
+    public int fieldInt24243;
+    public int fieldInt24244;
+    public int fieldInt24245;
+    public int fieldInt24246;
+    public int fieldInt24247;
+    public int fieldInt24248;
+    public int fieldInt24249;
+    public int fieldInt24250;
+    public int fieldInt24251;
+    public int fieldInt24252;
+    public int fieldInt24253;
+    public int fieldInt24254;
+    public int fieldInt24255;
+    public int fieldInt24256;
+    public int fieldInt24257;
+    public int fieldInt24258;
+    public int fieldInt24259;
+    public int fieldInt24260;
+    public int fieldInt24261;
+    public int fieldInt24262;
+    public int fieldInt24263;
+    public int fieldInt24264;
+    public int fieldInt24265;
+    public int fieldInt24266;
+    public int fieldInt24267;
+    public int fieldInt24268;
+    public int fieldInt24269;
+    public int fieldInt24270;
+    public int fieldInt24271;
+    public int fieldInt24272;
+    public int fieldInt24273;
+    public int fieldInt24274;
+    public int fieldInt24275;
+    public int fieldInt24276;
+    public int fieldInt24277;
+    public int fieldInt24278;
+    public int fieldInt24279;
+    public int fieldInt24280;
+    public int fieldInt24281;
+    public int fieldInt24282;
+    public int fieldInt24283;
+    public int fieldInt24284;
+    public int fieldInt24285;
+    public int fieldInt24286;
+    public int fieldInt24287;
+    public int fieldInt24288;
+    public int fieldInt24289;
+    public int fieldInt24290;
+    public int fieldInt24291;
+    public int fieldInt24292;
+    public int fieldInt24293;
+    public int fieldInt24294;
+    public int fieldInt24295;
+    public int fieldInt24296;
+    public int fieldInt24297;
+    public int fieldInt24298;
+    public int fieldInt24299;
+    public int fieldInt24300;
+    public int fieldInt24301;
+    public int fieldInt24302;
+    public int fieldInt24303;
+    public int fieldInt24304;
+    public int fieldInt24305;
+    public int fieldInt24306;
+    public int fieldInt24307;
+    public int fieldInt24308;
+    public int fieldInt24309;
+    public int fieldInt24310;
+    public int fieldInt24311;
+    public int fieldInt24312;
+    public int fieldInt24313;
+    public int fieldInt24314;
+    public int fieldInt24315;
+    public int fieldInt24316;
+    public int fieldInt24317;
+    public int fieldInt24318;
+    public int fieldInt24319;
+    public int fieldInt24320;
+    public int fieldInt24321;
+    public int fieldInt24322;
+    public int fieldInt24323;
+    public int fieldInt24324;
+    public int fieldInt24325;
+    public int fieldInt24326;
+    public int fieldInt24327;
+    public int fieldInt24328;
+    public int fieldInt24329;
+    public int fieldInt24330;
+    public int fieldInt24331;
+    public int fieldInt24332;
+    public int fieldInt24333;
+    public int fieldInt24334;
+    public int fieldInt24335;
+    public int fieldInt24336;
+    public int fieldInt24337;
+    public int fieldInt24338;
+    public int fieldInt24339;
+    public int fieldInt24340;
+    public int fieldInt24341;
+    public int fieldInt24342;
+    public int fieldInt24343;
+    public int fieldInt24344;
+    public int fieldInt24345;
+    public int fieldInt24346;
+    public int fieldInt24347;
+    public int fieldInt24348;
+    public int fieldInt24349;
+    public int fieldInt24350;
+    public int fieldInt24351;
+    public int fieldInt24352;
+    public int fieldInt24353;
+    public int fieldInt24354;
+    public int fieldInt24355;
+    public int fieldInt24356;
+    public int fieldInt24357;
+    public int fieldInt24358;
+    public int fieldInt24359;
+    public int fieldInt24360;
+    public int fieldInt24361;
+    public int fieldInt24362;
+    public int fieldInt24363;
+    public int fieldInt24364;
+    public int fieldInt24365;
+    public int fieldInt24366;
+    public int fieldInt24367;
+    public int fieldInt24368;
+    public int fieldInt24369;
+    public int fieldInt24370;
+    public int fieldInt24371;
+    public int fieldInt24372;
+    public int fieldInt24373;
+    public int fieldInt24374;
+    public int fieldInt24375;
+    public int fieldInt24376;
+    public int fieldInt24377;
+    public int fieldInt24378;
+    public int fieldInt24379;
+    public int fieldInt24380;
+    public int fieldInt24381;
+    public int fieldInt24382;
+    public int fieldInt24383;
+    public int fieldInt24384;
+    public int fieldInt24385;
+    public int fieldInt24386;
+    public int fieldInt24387;
+    public int fieldInt24388;
+    public int fieldInt24389;
+    public int fieldInt24390;
+    public int fieldInt24391;
+    public int fieldInt24392;
+    public int fieldInt24393;
+    public int fieldInt24394;
+    public int fieldInt24395;
+    public int fieldInt24396;
+    public int fieldInt24397;
+    public int fieldInt24398;
+    public int fieldInt24399;
+    public int fieldInt24400;
+    public int fieldInt24401;
+    public int fieldInt24402;
+    public int fieldInt24403;
+    public int fieldInt24404;
+    public int fieldInt24405;
+    public int fieldInt24406;
+    public int fieldInt24407;
+    public int fieldInt24408;
+    public int fieldInt24409;
+    public int fieldInt24410;
+    public int fieldInt24411;
+    public int fieldInt24412;
+    public int fieldInt24413;
+    public int fieldInt24414;
+    public int fieldInt24415;
+    public int fieldInt24416;
+    public int fieldInt24417;
+    public int fieldInt24418;
+    public int fieldInt24419;
+    public int fieldInt24420;
+    public int fieldInt24421;
+    public int fieldInt24422;
+    public int fieldInt24423;
+    public int fieldInt24424;
+    public int fieldInt24425;
+    public int fieldInt24426;
+    public int fieldInt24427;
+    public int fieldInt24428;
+    public int fieldInt24429;
+    public int fieldInt24430;
+    public int fieldInt24431;
+    public int fieldInt24432;
+    public int fieldInt24433;
+    public int fieldInt24434;
+    public int fieldInt24435;
+    public int fieldInt24436;
+    public int fieldInt24437;
+    public int fieldInt24438;
+    public int fieldInt24439;
+    public int fieldInt24440;
+    public int fieldInt24441;
+    public int fieldInt24442;
+    public int fieldInt24443;
+    public int fieldInt24444;
+    public int fieldInt24445;
+    public int fieldInt24446;
+    public int fieldInt24447;
+    public int fieldInt24448;
+    public int fieldInt24449;
+    public int fieldInt24450;
+    public int fieldInt24451;
+    public int fieldInt24452;
+    public int fieldInt24453;
+    public int fieldInt24454;
+    public int fieldInt24455;
+    public int fieldInt24456;
+    public int fieldInt24457;
+    public int fieldInt24458;
+    public int fieldInt24459;
+    public int fieldInt24460;
+    public int fieldInt24461;
+    public int fieldInt24462;
+    public int fieldInt24463;
+    public int fieldInt24464;
+    public int fieldInt24465;
+    public int fieldInt24466;
+    public int fieldInt24467;
+    public int fieldInt24468;
+    public int fieldInt24469;
+    public int fieldInt24470;
+    public int fieldInt24471;
+    public int fieldInt24472;
+    public int fieldInt24473;
+    public int fieldInt24474;
+    public int fieldInt24475;
+    public int fieldInt24476;
+    public int fieldInt24477;
+    public int fieldInt24478;
+    public int fieldInt24479;
+    public int fieldInt24480;
+    public int fieldInt24481;
+    public int fieldInt24482;
+    public int fieldInt24483;
+    public int fieldInt24484;
+    public int fieldInt24485;
+    public int fieldInt24486;
+    public int fieldInt24487;
+    public int fieldInt24488;
+    public int fieldInt24489;
+    public int fieldInt24490;
+    public int fieldInt24491;
+    public int fieldInt24492;
+    public int fieldInt24493;
+    public int fieldInt24494;
+    public int fieldInt24495;
+    public int fieldInt24496;
+    public int fieldInt24497;
+    public int fieldInt24498;
+    public int fieldInt24499;
+    public int fieldInt24500;
+    public int fieldInt24501;
+    public int fieldInt24502;
+    public int fieldInt24503;
+    public int fieldInt24504;
+    public int fieldInt24505;
+    public int fieldInt24506;
+    public int fieldInt24507;
+    public int fieldInt24508;
+    public int fieldInt24509;
+    public int fieldInt24510;
+    public int fieldInt24511;
+    public int fieldInt24512;
+    public int fieldInt24513;
+    public int fieldInt24514;
+    public int fieldInt24515;
+    public int fieldInt24516;
+    public int fieldInt24517;
+    public int fieldInt24518;
+    public int fieldInt24519;
+    public int fieldInt24520;
+    public int fieldInt24521;
+    public int fieldInt24522;
+    public int fieldInt24523;
+    public int fieldInt24524;
+    public int fieldInt24525;
+    public int fieldInt24526;
+    public int fieldInt24527;
+    public int fieldInt24528;
+    public int fieldInt24529;
+    public int fieldInt24530;
+    public int fieldInt24531;
+    public int fieldInt24532;
+    public int fieldInt24533;
+    public int fieldInt24534;
+    public int fieldInt24535;
+    public int fieldInt24536;
+    public int fieldInt24537;
+    public int fieldInt24538;
+    public int fieldInt24539;
+    public int fieldInt24540;
+    public int fieldInt24541;
+    public int fieldInt24542;
+    public int fieldInt24543;
+    public int fieldInt24544;
+    public int fieldInt24545;
+    public int fieldInt24546;
+    public int fieldInt24547;
+    public int fieldInt24548;
+    public int fieldInt24549;
+    public int fieldInt24550;
+    public int fieldInt24551;
+    public int fieldInt24552;
+    public int fieldInt24553;
+    public int fieldInt24554;
+    public int fieldInt24555;
+    public int fieldInt24556;
+    public int fieldInt24557;
+    public int fieldInt24558;
+    public int fieldInt24559;
+    public int fieldInt24560;
+    public int fieldInt24561;
+    public int fieldInt24562;
+    public int fieldInt24563;
+    public int fieldInt24564;
+    public int fieldInt24565;
+    public int fieldInt24566;
+    public int fieldInt24567;
+    public int fieldInt24568;
+    public int fieldInt24569;
+    public int fieldInt24570;
+    public int fieldInt24571;
+    public int fieldInt24572;
+    public int fieldInt24573;
+    public int fieldInt24574;
+    public int fieldInt24575;
+    public int fieldInt24576;
+    public int fieldInt24577;
+    public int fieldInt24578;
+    public int fieldInt24579;
+    public int fieldInt24580;
+    public int fieldInt24581;
+    public int fieldInt24582;
+    public int fieldInt24583;
+    public int fieldInt24584;
+    public int fieldInt24585;
+    public int fieldInt24586;
+    public int fieldInt24587;
+    public int fieldInt24588;
+    public int fieldInt24589;
+    public int fieldInt24590;
+    public int fieldInt24591;
+    public int fieldInt24592;
+    public int fieldInt24593;
+    public int fieldInt24594;
+    public int fieldInt24595;
+    public int fieldInt24596;
+    public int fieldInt24597;
+    public int fieldInt24598;
+    public int fieldInt24599;
+    public int fieldInt24600;
+    public int fieldInt24601;
+    public int fieldInt24602;
+    public int fieldInt24603;
+    public int fieldInt24604;
+    public int fieldInt24605;
+    public int fieldInt24606;
+    public int fieldInt24607;
+    public int fieldInt24608;
+    public int fieldInt24609;
+    public int fieldInt24610;
+    public int fieldInt24611;
+    public int fieldInt24612;
+    public int fieldInt24613;
+    public int fieldInt24614;
+    public int fieldInt24615;
+    public int fieldInt24616;
+    public int fieldInt24617;
+    public int fieldInt24618;
+    public int fieldInt24619;
+    public int fieldInt24620;
+    public int fieldInt24621;
+    public int fieldInt24622;
+    public int fieldInt24623;
+    public int fieldInt24624;
+    public int fieldInt24625;
+    public int fieldInt24626;
+    public int fieldInt24627;
+    public int fieldInt24628;
+    public int fieldInt24629;
+    public int fieldInt24630;
+    public int fieldInt24631;
+    public int fieldInt24632;
+    public int fieldInt24633;
+    public int fieldInt24634;
+    public int fieldInt24635;
+    public int fieldInt24636;
+    public int fieldInt24637;
+    public int fieldInt24638;
+    public int fieldInt24639;
+    public int fieldInt24640;
+    public int fieldInt24641;
+    public int fieldInt24642;
+    public int fieldInt24643;
+    public int fieldInt24644;
+    public int fieldInt24645;
+    public int fieldInt24646;
+    public int fieldInt24647;
+    public int fieldInt24648;
+    public int fieldInt24649;
+    public int fieldInt24650;
+    public int fieldInt24651;
+    public int fieldInt24652;
+    public int fieldInt24653;
+    public int fieldInt24654;
+    public int fieldInt24655;
+    public int fieldInt24656;
+    public int fieldInt24657;
+    public int fieldInt24658;
+    public int fieldInt24659;
+    public int fieldInt24660;
+    public int fieldInt24661;
+    public int fieldInt24662;
+    public int fieldInt24663;
+    public int fieldInt24664;
+    public int fieldInt24665;
+    public int fieldInt24666;
+    public int fieldInt24667;
+    public int fieldInt24668;
+    public int fieldInt24669;
+    public int fieldInt24670;
+    public int fieldInt24671;
+    public int fieldInt24672;
+    public int fieldInt24673;
+    public int fieldInt24674;
+    public int fieldInt24675;
+    public int fieldInt24676;
+    public int fieldInt24677;
+    public int fieldInt24678;
+    public int fieldInt24679;
+    public int fieldInt24680;
+    public int fieldInt24681;
+    public int fieldInt24682;
+    public int fieldInt24683;
+    public int fieldInt24684;
+    public int fieldInt24685;
+    public int fieldInt24686;
+    public int fieldInt24687;
+    public int fieldInt24688;
+    public int fieldInt24689;
+    public int fieldInt24690;
+    public int fieldInt24691;
+    public int fieldInt24692;
+    public int fieldInt24693;
+    public int fieldInt24694;
+    public int fieldInt24695;
+    public int fieldInt24696;
+    public int fieldInt24697;
+    public int fieldInt24698;
+    public int fieldInt24699;
+    public int fieldInt24700;
+    public int fieldInt24701;
+    public int fieldInt24702;
+    public int fieldInt24703;
+    public int fieldInt24704;
+    public int fieldInt24705;
+    public int fieldInt24706;
+    public int fieldInt24707;
+    public int fieldInt24708;
+    public int fieldInt24709;
+    public int fieldInt24710;
+    public int fieldInt24711;
+    public int fieldInt24712;
+    public int fieldInt24713;
+    public int fieldInt24714;
+    public int fieldInt24715;
+    public int fieldInt24716;
+    public int fieldInt24717;
+    public int fieldInt24718;
+    public int fieldInt24719;
+    public int fieldInt24720;
+    public int fieldInt24721;
+    public int fieldInt24722;
+    public int fieldInt24723;
+    public int fieldInt24724;
+    public int fieldInt24725;
+    public int fieldInt24726;
+    public int fieldInt24727;
+    public int fieldInt24728;
+    public int fieldInt24729;
+    public int fieldInt24730;
+    public int fieldInt24731;
+    public int fieldInt24732;
+    public int fieldInt24733;
+    public int fieldInt24734;
+    public int fieldInt24735;
+    public int fieldInt24736;
+    public int fieldInt24737;
+    public int fieldInt24738;
+    public int fieldInt24739;
+    public int fieldInt24740;
+    public int fieldInt24741;
+    public int fieldInt24742;
+    public int fieldInt24743;
+    public int fieldInt24744;
+    public int fieldInt24745;
+    public int fieldInt24746;
+    public int fieldInt24747;
+    public int fieldInt24748;
+    public int fieldInt24749;
+    public int fieldInt24750;
+    public int fieldInt24751;
+    public int fieldInt24752;
+    public int fieldInt24753;
+    public int fieldInt24754;
+    public int fieldInt24755;
+    public int fieldInt24756;
+    public int fieldInt24757;
+    public int fieldInt24758;
+    public int fieldInt24759;
+    public int fieldInt24760;
+    public int fieldInt24761;
+    public int fieldInt24762;
+    public int fieldInt24763;
+    public int fieldInt24764;
+    public int fieldInt24765;
+    public int fieldInt24766;
+    public int fieldInt24767;
+    public int fieldInt24768;
+    public int fieldInt24769;
+    public int fieldInt24770;
+    public int fieldInt24771;
+    public int fieldInt24772;
+    public int fieldInt24773;
+    public int fieldInt24774;
+    public int fieldInt24775;
+    public int fieldInt24776;
+    public int fieldInt24777;
+    public int fieldInt24778;
+    public int fieldInt24779;
+    public int fieldInt24780;
+    public int fieldInt24781;
+    public int fieldInt24782;
+    public int fieldInt24783;
+    public int fieldInt24784;
+    public int fieldInt24785;
+    public int fieldInt24786;
+    public int fieldInt24787;
+    public int fieldInt24788;
+    public int fieldInt24789;
+    public int fieldInt24790;
+    public int fieldInt24791;
+    public int fieldInt24792;
+    public int fieldInt24793;
+    public int fieldInt24794;
+    public int fieldInt24795;
+    public int fieldInt24796;
+    public int fieldInt24797;
+    public int fieldInt24798;
+    public int fieldInt24799;
+    public int fieldInt24800;
+    public int fieldInt24801;
+    public int fieldInt24802;
+    public int fieldInt24803;
+    public int fieldInt24804;
+    public int fieldInt24805;
+    public int fieldInt24806;
+    public int fieldInt24807;
+    public int fieldInt24808;
+    public int fieldInt24809;
+    public int fieldInt24810;
+    public int fieldInt24811;
+    public int fieldInt24812;
+    public int fieldInt24813;
+    public int fieldInt24814;
+    public int fieldInt24815;
+    public int fieldInt24816;
+    public int fieldInt24817;
+    public int fieldInt24818;
+    public int fieldInt24819;
+    public int fieldInt24820;
+    public int fieldInt24821;
+    public int fieldInt24822;
+    public int fieldInt24823;
+    public int fieldInt24824;
+    public int fieldInt24825;
+    public int fieldInt24826;
+    public int fieldInt24827;
+    public int fieldInt24828;
+    public int fieldInt24829;
+    public int fieldInt24830;
+    public int fieldInt24831;
+    public int fieldInt24832;
+    public int fieldInt24833;
+    public int fieldInt24834;
+    public int fieldInt24835;
+    public int fieldInt24836;
+    public int fieldInt24837;
+    public int fieldInt24838;
+    public int fieldInt24839;
+    public int fieldInt24840;
+    public int fieldInt24841;
+    public int fieldInt24842;
+    public int fieldInt24843;
+    public int fieldInt24844;
+    public int fieldInt24845;
+    public int fieldInt24846;
+    public int fieldInt24847;
+    public int fieldInt24848;
+    public int fieldInt24849;
+    public int fieldInt24850;
+    public int fieldInt24851;
+    public int fieldInt24852;
+    public int fieldInt24853;
+    public int fieldInt24854;
+    public int fieldInt24855;
+    public int fieldInt24856;
+    public int fieldInt24857;
+    public int fieldInt24858;
+    public int fieldInt24859;
+    public int fieldInt24860;
+    public int fieldInt24861;
+    public int fieldInt24862;
+    public int fieldInt24863;
+    public int fieldInt24864;
+    public int fieldInt24865;
+    public int fieldInt24866;
+    public int fieldInt24867;
+    public int fieldInt24868;
+    public int fieldInt24869;
+    public int fieldInt24870;
+    public int fieldInt24871;
+    public int fieldInt24872;
+    public int fieldInt24873;
+    public int fieldInt24874;
+    public int fieldInt24875;
+    public int fieldInt24876;
+    public int fieldInt24877;
+    public int fieldInt24878;
+    public int fieldInt24879;
+    public int fieldInt24880;
+    public int fieldInt24881;
+    public int fieldInt24882;
+    public int fieldInt24883;
+    public int fieldInt24884;
+    public int fieldInt24885;
+    public int fieldInt24886;
+    public int fieldInt24887;
+    public int fieldInt24888;
+    public int fieldInt24889;
+    public int fieldInt24890;
+    public int fieldInt24891;
+    public int fieldInt24892;
+    public int fieldInt24893;
+    public int fieldInt24894;
+    public int fieldInt24895;
+    public int fieldInt24896;
+    public int fieldInt24897;
+    public int fieldInt24898;
+    public int fieldInt24899;
+    public int fieldInt24900;
+    public int fieldInt24901;
+    public int fieldInt24902;
+    public int fieldInt24903;
+    public int fieldInt24904;
+    public int fieldInt24905;
+    public int fieldInt24906;
+    public int fieldInt24907;
+    public int fieldInt24908;
+    public int fieldInt24909;
+    public int fieldInt24910;
+    public int fieldInt24911;
+    public int fieldInt24912;
+    public int fieldInt24913;
+    public int fieldInt24914;
+    public int fieldInt24915;
+    public int fieldInt24916;
+    public int fieldInt24917;
+    public int fieldInt24918;
+    public int fieldInt24919;
+    public int fieldInt24920;
+    public int fieldInt24921;
+    public int fieldInt24922;
+    public int fieldInt24923;
+    public int fieldInt24924;
+    public int fieldInt24925;
+    public int fieldInt24926;
+    public int fieldInt24927;
+    public int fieldInt24928;
+    public int fieldInt24929;
+    public int fieldInt24930;
+    public int fieldInt24931;
+    public int fieldInt24932;
+    public int fieldInt24933;
+    public int fieldInt24934;
+    public int fieldInt24935;
+    public int fieldInt24936;
+    public int fieldInt24937;
+    public int fieldInt24938;
+    public int fieldInt24939;
+    public int fieldInt24940;
+    public int fieldInt24941;
+    public int fieldInt24942;
+    public int fieldInt24943;
+    public int fieldInt24944;
+    public int fieldInt24945;
+    public int fieldInt24946;
+    public int fieldInt24947;
+    public int fieldInt24948;
+    public int fieldInt24949;
+    public int fieldInt24950;
+    public int fieldInt24951;
+    public int fieldInt24952;
+    public int fieldInt24953;
+    public int fieldInt24954;
+    public int fieldInt24955;
+    public int fieldInt24956;
+    public int fieldInt24957;
+    public int fieldInt24958;
+    public int fieldInt24959;
+    public int fieldInt24960;
+    public int fieldInt24961;
+    public int fieldInt24962;
+    public int fieldInt24963;
+    public int fieldInt24964;
+    public int fieldInt24965;
+    public int fieldInt24966;
+    public int fieldInt24967;
+    public int fieldInt24968;
+    public int fieldInt24969;
+    public int fieldInt24970;
+    public int fieldInt24971;
+    public int fieldInt24972;
+    public int fieldInt24973;
+    public int fieldInt24974;
+    public int fieldInt24975;
+    public int fieldInt24976;
+    public int fieldInt24977;
+    public int fieldInt24978;
+    public int fieldInt24979;
+    public int fieldInt24980;
+    public int fieldInt24981;
+    public int fieldInt24982;
+    public int fieldInt24983;
+    public int fieldInt24984;
+    public int fieldInt24985;
+    public int fieldInt24986;
+    public int fieldInt24987;
+    public int fieldInt24988;
+    public int fieldInt24989;
+    public int fieldInt24990;
+    public int fieldInt24991;
+    public int fieldInt24992;
+    public int fieldInt24993;
+    public int fieldInt24994;
+    public int fieldInt24995;
+    public int fieldInt24996;
+    public int fieldInt24997;
+    public int fieldInt24998;
+    public int fieldInt24999;
+    public int fieldInt25000;
+    public int fieldInt25001;
+    public int fieldInt25002;
+    public int fieldInt25003;
+    public int fieldInt25004;
+    public int fieldInt25005;
+    public int fieldInt25006;
+    public int fieldInt25007;
+    public int fieldInt25008;
+    public int fieldInt25009;
+    public int fieldInt25010;
+    public int fieldInt25011;
+    public int fieldInt25012;
+    public int fieldInt25013;
+    public int fieldInt25014;
+    public int fieldInt25015;
+    public int fieldInt25016;
+    public int fieldInt25017;
+    public int fieldInt25018;
+    public int fieldInt25019;
+    public int fieldInt25020;
+    public int fieldInt25021;
+    public int fieldInt25022;
+    public int fieldInt25023;
+    public int fieldInt25024;
+    public int fieldInt25025;
+    public int fieldInt25026;
+    public int fieldInt25027;
+    public int fieldInt25028;
+    public int fieldInt25029;
+    public int fieldInt25030;
+    public int fieldInt25031;
+    public int fieldInt25032;
+    public int fieldInt25033;
+    public int fieldInt25034;
+    public int fieldInt25035;
+    public int fieldInt25036;
+    public int fieldInt25037;
+    public int fieldInt25038;
+    public int fieldInt25039;
+    public int fieldInt25040;
+    public int fieldInt25041;
+    public int fieldInt25042;
+    public int fieldInt25043;
+    public int fieldInt25044;
+    public int fieldInt25045;
+    public int fieldInt25046;
+    public int fieldInt25047;
+    public int fieldInt25048;
+    public int fieldInt25049;
+    public int fieldInt25050;
+    public int fieldInt25051;
+    public int fieldInt25052;
+    public int fieldInt25053;
+    public int fieldInt25054;
+    public int fieldInt25055;
+    public int fieldInt25056;
+    public int fieldInt25057;
+    public int fieldInt25058;
+    public int fieldInt25059;
+    public int fieldInt25060;
+    public int fieldInt25061;
+    public int fieldInt25062;
+    public int fieldInt25063;
+    public int fieldInt25064;
+    public int fieldInt25065;
+    public int fieldInt25066;
+    public int fieldInt25067;
+    public int fieldInt25068;
+    public int fieldInt25069;
+    public int fieldInt25070;
+    public int fieldInt25071;
+    public int fieldInt25072;
+    public int fieldInt25073;
+    public int fieldInt25074;
+    public int fieldInt25075;
+    public int fieldInt25076;
+    public int fieldInt25077;
+    public int fieldInt25078;
+    public int fieldInt25079;
+    public int fieldInt25080;
+    public int fieldInt25081;
+    public int fieldInt25082;
+    public int fieldInt25083;
+    public int fieldInt25084;
+    public int fieldInt25085;
+    public int fieldInt25086;
+    public int fieldInt25087;
+    public int fieldInt25088;
+    public int fieldInt25089;
+    public int fieldInt25090;
+    public int fieldInt25091;
+    public int fieldInt25092;
+    public int fieldInt25093;
+    public int fieldInt25094;
+    public int fieldInt25095;
+    public int fieldInt25096;
+    public int fieldInt25097;
+    public int fieldInt25098;
+    public int fieldInt25099;
+    public int fieldInt25100;
+    public int fieldInt25101;
+    public int fieldInt25102;
+    public int fieldInt25103;
+    public int fieldInt25104;
+    public int fieldInt25105;
+    public int fieldInt25106;
+    public int fieldInt25107;
+    public int fieldInt25108;
+    public int fieldInt25109;
+    public int fieldInt25110;
+    public int fieldInt25111;
+    public int fieldInt25112;
+    public int fieldInt25113;
+    public int fieldInt25114;
+    public int fieldInt25115;
+    public int fieldInt25116;
+    public int fieldInt25117;
+    public int fieldInt25118;
+    public int fieldInt25119;
+    public int fieldInt25120;
+    public int fieldInt25121;
+    public int fieldInt25122;
+    public int fieldInt25123;
+    public int fieldInt25124;
+    public int fieldInt25125;
+    public int fieldInt25126;
+    public int fieldInt25127;
+    public int fieldInt25128;
+    public int fieldInt25129;
+    public int fieldInt25130;
+    public int fieldInt25131;
+    public int fieldInt25132;
+    public int fieldInt25133;
+    public int fieldInt25134;
+    public int fieldInt25135;
+    public int fieldInt25136;
+    public int fieldInt25137;
+    public int fieldInt25138;
+    public int fieldInt25139;
+    public int fieldInt25140;
+    public int fieldInt25141;
+    public int fieldInt25142;
+    public int fieldInt25143;
+    public int fieldInt25144;
+    public int fieldInt25145;
+    public int fieldInt25146;
+    public int fieldInt25147;
+    public int fieldInt25148;
+    public int fieldInt25149;
+    public int fieldInt25150;
+    public int fieldInt25151;
+    public int fieldInt25152;
+    public int fieldInt25153;
+    public int fieldInt25154;
+    public int fieldInt25155;
+    public int fieldInt25156;
+    public int fieldInt25157;
+    public int fieldInt25158;
+    public int fieldInt25159;
+    public int fieldInt25160;
+    public int fieldInt25161;
+    public int fieldInt25162;
+    public int fieldInt25163;
+    public int fieldInt25164;
+    public int fieldInt25165;
+    public int fieldInt25166;
+    public int fieldInt25167;
+    public int fieldInt25168;
+    public int fieldInt25169;
+    public int fieldInt25170;
+    public int fieldInt25171;
+    public int fieldInt25172;
+    public int fieldInt25173;
+    public int fieldInt25174;
+    public int fieldInt25175;
+    public int fieldInt25176;
+    public int fieldInt25177;
+    public int fieldInt25178;
+    public int fieldInt25179;
+    public int fieldInt25180;
+    public int fieldInt25181;
+    public int fieldInt25182;
+    public int fieldInt25183;
+    public int fieldInt25184;
+    public int fieldInt25185;
+    public int fieldInt25186;
+    public int fieldInt25187;
+    public int fieldInt25188;
+    public int fieldInt25189;
+    public int fieldInt25190;
+    public int fieldInt25191;
+    public int fieldInt25192;
+    public int fieldInt25193;
+    public int fieldInt25194;
+    public int fieldInt25195;
+    public int fieldInt25196;
+    public int fieldInt25197;
+    public int fieldInt25198;
+    public int fieldInt25199;
+    public int fieldInt25200;
+    public int fieldInt25201;
+    public int fieldInt25202;
+    public int fieldInt25203;
+    public int fieldInt25204;
+    public int fieldInt25205;
+    public int fieldInt25206;
+    public int fieldInt25207;
+    public int fieldInt25208;
+    public int fieldInt25209;
+    public int fieldInt25210;
+    public int fieldInt25211;
+    public int fieldInt25212;
+    public int fieldInt25213;
+    public int fieldInt25214;
+    public int fieldInt25215;
+    public int fieldInt25216;
+    public int fieldInt25217;
+    public int fieldInt25218;
+    public int fieldInt25219;
+    public int fieldInt25220;
+    public int fieldInt25221;
+    public int fieldInt25222;
+    public int fieldInt25223;
+    public int fieldInt25224;
+    public int fieldInt25225;
+    public int fieldInt25226;
+    public int fieldInt25227;
+    public int fieldInt25228;
+    public int fieldInt25229;
+    public int fieldInt25230;
+    public int fieldInt25231;
+    public int fieldInt25232;
+    public int fieldInt25233;
+    public int fieldInt25234;
+    public int fieldInt25235;
+    public int fieldInt25236;
+    public int fieldInt25237;
+    public int fieldInt25238;
+    public int fieldInt25239;
+    public int fieldInt25240;
+    public int fieldInt25241;
+    public int fieldInt25242;
+    public int fieldInt25243;
+    public int fieldInt25244;
+    public int fieldInt25245;
+    public int fieldInt25246;
+    public int fieldInt25247;
+    public int fieldInt25248;
+    public int fieldInt25249;
+    public int fieldInt25250;
+    public int fieldInt25251;
+    public int fieldInt25252;
+    public int fieldInt25253;
+    public int fieldInt25254;
+    public int fieldInt25255;
+    public int fieldInt25256;
+    public int fieldInt25257;
+    public int fieldInt25258;
+    public int fieldInt25259;
+    public int fieldInt25260;
+    public int fieldInt25261;
+    public int fieldInt25262;
+    public int fieldInt25263;
+    public int fieldInt25264;
+    public int fieldInt25265;
+    public int fieldInt25266;
+    public int fieldInt25267;
+    public int fieldInt25268;
+    public int fieldInt25269;
+    public int fieldInt25270;
+    public int fieldInt25271;
+    public int fieldInt25272;
+    public int fieldInt25273;
+    public int fieldInt25274;
+    public int fieldInt25275;
+    public int fieldInt25276;
+    public int fieldInt25277;
+    public int fieldInt25278;
+    public int fieldInt25279;
+    public int fieldInt25280;
+    public int fieldInt25281;
+    public int fieldInt25282;
+    public int fieldInt25283;
+    public int fieldInt25284;
+    public int fieldInt25285;
+    public int fieldInt25286;
+    public int fieldInt25287;
+    public int fieldInt25288;
+    public int fieldInt25289;
+    public int fieldInt25290;
+    public int fieldInt25291;
+    public int fieldInt25292;
+    public int fieldInt25293;
+    public int fieldInt25294;
+    public int fieldInt25295;
+    public int fieldInt25296;
+    public int fieldInt25297;
+    public int fieldInt25298;
+    public int fieldInt25299;
+    public int fieldInt25300;
+    public int fieldInt25301;
+    public int fieldInt25302;
+    public int fieldInt25303;
+    public int fieldInt25304;
+    public int fieldInt25305;
+    public int fieldInt25306;
+    public int fieldInt25307;
+    public int fieldInt25308;
+    public int fieldInt25309;
+    public int fieldInt25310;
+    public int fieldInt25311;
+    public int fieldInt25312;
+    public int fieldInt25313;
+    public int fieldInt25314;
+    public int fieldInt25315;
+    public int fieldInt25316;
+    public int fieldInt25317;
+    public int fieldInt25318;
+    public int fieldInt25319;
+    public int fieldInt25320;
+    public int fieldInt25321;
+    public int fieldInt25322;
+    public int fieldInt25323;
+    public int fieldInt25324;
+    public int fieldInt25325;
+    public int fieldInt25326;
+    public int fieldInt25327;
+    public int fieldInt25328;
+    public int fieldInt25329;
+    public int fieldInt25330;
+    public int fieldInt25331;
+    public int fieldInt25332;
+    public int fieldInt25333;
+    public int fieldInt25334;
+    public int fieldInt25335;
+    public int fieldInt25336;
+    public int fieldInt25337;
+    public int fieldInt25338;
+    public int fieldInt25339;
+    public int fieldInt25340;
+    public int fieldInt25341;
+    public int fieldInt25342;
+    public int fieldInt25343;
+    public int fieldInt25344;
+    public int fieldInt25345;
+    public int fieldInt25346;
+    public int fieldInt25347;
+    public int fieldInt25348;
+    public int fieldInt25349;
+    public int fieldInt25350;
+    public int fieldInt25351;
+    public int fieldInt25352;
+    public int fieldInt25353;
+    public int fieldInt25354;
+    public int fieldInt25355;
+    public int fieldInt25356;
+    public int fieldInt25357;
+    public int fieldInt25358;
+    public int fieldInt25359;
+    public int fieldInt25360;
+    public int fieldInt25361;
+    public int fieldInt25362;
+    public int fieldInt25363;
+    public int fieldInt25364;
+    public int fieldInt25365;
+    public int fieldInt25366;
+    public int fieldInt25367;
+    public int fieldInt25368;
+    public int fieldInt25369;
+    public int fieldInt25370;
+    public int fieldInt25371;
+    public int fieldInt25372;
+    public int fieldInt25373;
+    public int fieldInt25374;
+    public int fieldInt25375;
+    public int fieldInt25376;
+    public int fieldInt25377;
+    public int fieldInt25378;
+    public int fieldInt25379;
+    public int fieldInt25380;
+    public int fieldInt25381;
+    public int fieldInt25382;
+    public int fieldInt25383;
+    public int fieldInt25384;
+    public int fieldInt25385;
+    public int fieldInt25386;
+    public int fieldInt25387;
+    public int fieldInt25388;
+    public int fieldInt25389;
+    public int fieldInt25390;
+    public int fieldInt25391;
+    public int fieldInt25392;
+    public int fieldInt25393;
+    public int fieldInt25394;
+    public int fieldInt25395;
+    public int fieldInt25396;
+    public int fieldInt25397;
+    public int fieldInt25398;
+    public int fieldInt25399;
+    public int fieldInt25400;
+    public int fieldInt25401;
+    public int fieldInt25402;
+    public int fieldInt25403;
+    public int fieldInt25404;
+    public int fieldInt25405;
+    public int fieldInt25406;
+    public int fieldInt25407;
+    public int fieldInt25408;
+    public int fieldInt25409;
+    public int fieldInt25410;
+    public int fieldInt25411;
+    public int fieldInt25412;
+    public int fieldInt25413;
+    public int fieldInt25414;
+    public int fieldInt25415;
+    public int fieldInt25416;
+    public int fieldInt25417;
+    public int fieldInt25418;
+    public int fieldInt25419;
+    public int fieldInt25420;
+    public int fieldInt25421;
+    public int fieldInt25422;
+    public int fieldInt25423;
+    public int fieldInt25424;
+    public int fieldInt25425;
+    public int fieldInt25426;
+    public int fieldInt25427;
+    public int fieldInt25428;
+    public int fieldInt25429;
+    public int fieldInt25430;
+    public int fieldInt25431;
+    public int fieldInt25432;
+    public int fieldInt25433;
+    public int fieldInt25434;
+    public int fieldInt25435;
+    public int fieldInt25436;
+    public int fieldInt25437;
+    public int fieldInt25438;
+    public int fieldInt25439;
+    public int fieldInt25440;
+    public int fieldInt25441;
+    public int fieldInt25442;
+    public int fieldInt25443;
+    public int fieldInt25444;
+    public int fieldInt25445;
+    public int fieldInt25446;
+    public int fieldInt25447;
+    public int fieldInt25448;
+    public int fieldInt25449;
+    public int fieldInt25450;
+    public int fieldInt25451;
+    public int fieldInt25452;
+    public int fieldInt25453;
+    public int fieldInt25454;
+    public int fieldInt25455;
+    public int fieldInt25456;
+    public int fieldInt25457;
+    public int fieldInt25458;
+    public int fieldInt25459;
+    public int fieldInt25460;
+    public int fieldInt25461;
+    public int fieldInt25462;
+    public int fieldInt25463;
+    public int fieldInt25464;
+    public int fieldInt25465;
+    public int fieldInt25466;
+    public int fieldInt25467;
+    public int fieldInt25468;
+    public int fieldInt25469;
+    public int fieldInt25470;
+    public int fieldInt25471;
+    public int fieldInt25472;
+    public int fieldInt25473;
+    public int fieldInt25474;
+    public int fieldInt25475;
+    public int fieldInt25476;
+    public int fieldInt25477;
+    public int fieldInt25478;
+    public int fieldInt25479;
+    public int fieldInt25480;
+    public int fieldInt25481;
+    public int fieldInt25482;
+    public int fieldInt25483;
+    public int fieldInt25484;
+    public int fieldInt25485;
+    public int fieldInt25486;
+    public int fieldInt25487;
+    public int fieldInt25488;
+    public int fieldInt25489;
+    public int fieldInt25490;
+    public int fieldInt25491;
+    public int fieldInt25492;
+    public int fieldInt25493;
+    public int fieldInt25494;
+    public int fieldInt25495;
+    public int fieldInt25496;
+    public int fieldInt25497;
+    public int fieldInt25498;
+    public int fieldInt25499;
+    public int fieldInt25500;
+    public int fieldInt25501;
+    public int fieldInt25502;
+    public int fieldInt25503;
+    public int fieldInt25504;
+    public int fieldInt25505;
+    public int fieldInt25506;
+    public int fieldInt25507;
+    public int fieldInt25508;
+    public int fieldInt25509;
+    public int fieldInt25510;
+    public int fieldInt25511;
+    public int fieldInt25512;
+    public int fieldInt25513;
+    public int fieldInt25514;
+    public int fieldInt25515;
+    public int fieldInt25516;
+    public int fieldInt25517;
+    public int fieldInt25518;
+    public int fieldInt25519;
+    public int fieldInt25520;
+    public int fieldInt25521;
+    public int fieldInt25522;
+    public int fieldInt25523;
+    public int fieldInt25524;
+    public int fieldInt25525;
+    public int fieldInt25526;
+    public int fieldInt25527;
+    public int fieldInt25528;
+    public int fieldInt25529;
+    public int fieldInt25530;
+    public int fieldInt25531;
+    public int fieldInt25532;
+    public int fieldInt25533;
+    public int fieldInt25534;
+    public int fieldInt25535;
+    public int fieldInt25536;
+    public int fieldInt25537;
+    public int fieldInt25538;
+    public int fieldInt25539;
+    public int fieldInt25540;
+    public int fieldInt25541;
+    public int fieldInt25542;
+    public int fieldInt25543;
+    public int fieldInt25544;
+    public int fieldInt25545;
+    public int fieldInt25546;
+    public int fieldInt25547;
+    public int fieldInt25548;
+    public int fieldInt25549;
+    public int fieldInt25550;
+    public int fieldInt25551;
+    public int fieldInt25552;
+    public int fieldInt25553;
+    public int fieldInt25554;
+    public int fieldInt25555;
+    public int fieldInt25556;
+    public int fieldInt25557;
+    public int fieldInt25558;
+    public int fieldInt25559;
+    public int fieldInt25560;
+    public int fieldInt25561;
+    public int fieldInt25562;
+    public int fieldInt25563;
+    public int fieldInt25564;
+    public int fieldInt25565;
+    public int fieldInt25566;
+    public int fieldInt25567;
+    public int fieldInt25568;
+    public int fieldInt25569;
+    public int fieldInt25570;
+    public int fieldInt25571;
+    public int fieldInt25572;
+    public int fieldInt25573;
+    public int fieldInt25574;
+    public int fieldInt25575;
+    public int fieldInt25576;
+    public int fieldInt25577;
+    public int fieldInt25578;
+    public int fieldInt25579;
+    public int fieldInt25580;
+    public int fieldInt25581;
+    public int fieldInt25582;
+    public int fieldInt25583;
+    public int fieldInt25584;
+    public int fieldInt25585;
+    public int fieldInt25586;
+    public int fieldInt25587;
+    public int fieldInt25588;
+    public int fieldInt25589;
+    public int fieldInt25590;
+    public int fieldInt25591;
+    public int fieldInt25592;
+    public int fieldInt25593;
+    public int fieldInt25594;
+    public int fieldInt25595;
+    public int fieldInt25596;
+    public int fieldInt25597;
+    public int fieldInt25598;
+    public int fieldInt25599;
+    public int fieldInt25600;
+    public int fieldInt25601;
+    public int fieldInt25602;
+    public int fieldInt25603;
+    public int fieldInt25604;
+    public int fieldInt25605;
+    public int fieldInt25606;
+    public int fieldInt25607;
+    public int fieldInt25608;
+    public int fieldInt25609;
+    public int fieldInt25610;
+    public int fieldInt25611;
+    public int fieldInt25612;
+    public int fieldInt25613;
+    public int fieldInt25614;
+    public int fieldInt25615;
+    public int fieldInt25616;
+    public int fieldInt25617;
+    public int fieldInt25618;
+    public int fieldInt25619;
+    public int fieldInt25620;
+    public int fieldInt25621;
+    public int fieldInt25622;
+    public int fieldInt25623;
+    public int fieldInt25624;
+    public int fieldInt25625;
+    public int fieldInt25626;
+    public int fieldInt25627;
+    public int fieldInt25628;
+    public int fieldInt25629;
+    public int fieldInt25630;
+    public int fieldInt25631;
+    public int fieldInt25632;
+    public int fieldInt25633;
+    public int fieldInt25634;
+    public int fieldInt25635;
+    public int fieldInt25636;
+    public int fieldInt25637;
+    public int fieldInt25638;
+    public int fieldInt25639;
+    public int fieldInt25640;
+    public int fieldInt25641;
+    public int fieldInt25642;
+    public int fieldInt25643;
+    public int fieldInt25644;
+    public int fieldInt25645;
+    public int fieldInt25646;
+    public int fieldInt25647;
+    public int fieldInt25648;
+    public int fieldInt25649;
+    public int fieldInt25650;
+    public int fieldInt25651;
+    public int fieldInt25652;
+    public int fieldInt25653;
+    public int fieldInt25654;
+    public int fieldInt25655;
+    public int fieldInt25656;
+    public int fieldInt25657;
+    public int fieldInt25658;
+    public int fieldInt25659;
+    public int fieldInt25660;
+    public int fieldInt25661;
+    public int fieldInt25662;
+    public int fieldInt25663;
+    public int fieldInt25664;
+    public int fieldInt25665;
+    public int fieldInt25666;
+    public int fieldInt25667;
+    public int fieldInt25668;
+    public int fieldInt25669;
+    public int fieldInt25670;
+    public int fieldInt25671;
+    public int fieldInt25672;
+    public int fieldInt25673;
+    public int fieldInt25674;
+    public int fieldInt25675;
+    public int fieldInt25676;
+    public int fieldInt25677;
+    public int fieldInt25678;
+    public int fieldInt25679;
+    public int fieldInt25680;
+    public int fieldInt25681;
+    public int fieldInt25682;
+    public int fieldInt25683;
+    public int fieldInt25684;
+    public int fieldInt25685;
+    public int fieldInt25686;
+    public int fieldInt25687;
+    public int fieldInt25688;
+    public int fieldInt25689;
+    public int fieldInt25690;
+    public int fieldInt25691;
+    public int fieldInt25692;
+    public int fieldInt25693;
+    public int fieldInt25694;
+    public int fieldInt25695;
+    public int fieldInt25696;
+    public int fieldInt25697;
+    public int fieldInt25698;
+    public int fieldInt25699;
+    public int fieldInt25700;
+    public int fieldInt25701;
+    public int fieldInt25702;
+    public int fieldInt25703;
+    public int fieldInt25704;
+    public int fieldInt25705;
+    public int fieldInt25706;
+    public int fieldInt25707;
+    public int fieldInt25708;
+    public int fieldInt25709;
+    public int fieldInt25710;
+    public int fieldInt25711;
+    public int fieldInt25712;
+    public int fieldInt25713;
+    public int fieldInt25714;
+    public int fieldInt25715;
+    public int fieldInt25716;
+    public int fieldInt25717;
+    public int fieldInt25718;
+    public int fieldInt25719;
+    public int fieldInt25720;
+    public int fieldInt25721;
+    public int fieldInt25722;
+    public int fieldInt25723;
+    public int fieldInt25724;
+    public int fieldInt25725;
+    public int fieldInt25726;
+    public int fieldInt25727;
+    public int fieldInt25728;
+    public int fieldInt25729;
+    public int fieldInt25730;
+    public int fieldInt25731;
+    public int fieldInt25732;
+    public int fieldInt25733;
+    public int fieldInt25734;
+    public int fieldInt25735;
+    public int fieldInt25736;
+    public int fieldInt25737;
+    public int fieldInt25738;
+    public int fieldInt25739;
+    public int fieldInt25740;
+    public int fieldInt25741;
+    public int fieldInt25742;
+    public int fieldInt25743;
+    public int fieldInt25744;
+    public int fieldInt25745;
+    public int fieldInt25746;
+    public int fieldInt25747;
+    public int fieldInt25748;
+    public int fieldInt25749;
+    public int fieldInt25750;
+    public int fieldInt25751;
+    public int fieldInt25752;
+    public int fieldInt25753;
+    public int fieldInt25754;
+    public int fieldInt25755;
+    public int fieldInt25756;
+    public int fieldInt25757;
+    public int fieldInt25758;
+    public int fieldInt25759;
+    public int fieldInt25760;
+    public int fieldInt25761;
+    public int fieldInt25762;
+    public int fieldInt25763;
+    public int fieldInt25764;
+    public int fieldInt25765;
+    public int fieldInt25766;
+    public int fieldInt25767;
+    public int fieldInt25768;
+    public int fieldInt25769;
+    public int fieldInt25770;
+    public int fieldInt25771;
+    public int fieldInt25772;
+    public int fieldInt25773;
+    public int fieldInt25774;
+    public int fieldInt25775;
+    public int fieldInt25776;
+    public int fieldInt25777;
+    public int fieldInt25778;
+    public int fieldInt25779;
+    public int fieldInt25780;
+    public int fieldInt25781;
+    public int fieldInt25782;
+    public int fieldInt25783;
+    public int fieldInt25784;
+    public int fieldInt25785;
+    public int fieldInt25786;
+    public int fieldInt25787;
+    public int fieldInt25788;
+    public int fieldInt25789;
+    public int fieldInt25790;
+    public int fieldInt25791;
+    public int fieldInt25792;
+    public int fieldInt25793;
+    public int fieldInt25794;
+    public int fieldInt25795;
+    public int fieldInt25796;
+    public int fieldInt25797;
+    public int fieldInt25798;
+    public int fieldInt25799;
+    public int fieldInt25800;
+    public int fieldInt25801;
+    public int fieldInt25802;
+    public int fieldInt25803;
+    public int fieldInt25804;
+    public int fieldInt25805;
+    public int fieldInt25806;
+    public int fieldInt25807;
+    public int fieldInt25808;
+    public int fieldInt25809;
+    public int fieldInt25810;
+    public int fieldInt25811;
+    public int fieldInt25812;
+    public int fieldInt25813;
+    public int fieldInt25814;
+    public int fieldInt25815;
+    public int fieldInt25816;
+    public int fieldInt25817;
+    public int fieldInt25818;
+    public int fieldInt25819;
+    public int fieldInt25820;
+    public int fieldInt25821;
+    public int fieldInt25822;
+    public int fieldInt25823;
+    public int fieldInt25824;
+    public int fieldInt25825;
+    public int fieldInt25826;
+    public int fieldInt25827;
+    public int fieldInt25828;
+    public int fieldInt25829;
+    public int fieldInt25830;
+    public int fieldInt25831;
+    public int fieldInt25832;
+    public int fieldInt25833;
+    public int fieldInt25834;
+    public int fieldInt25835;
+    public int fieldInt25836;
+    public int fieldInt25837;
+    public int fieldInt25838;
+    public int fieldInt25839;
+    public int fieldInt25840;
+    public int fieldInt25841;
+    public int fieldInt25842;
+    public int fieldInt25843;
+    public int fieldInt25844;
+    public int fieldInt25845;
+    public int fieldInt25846;
+    public int fieldInt25847;
+    public int fieldInt25848;
+    public int fieldInt25849;
+    public int fieldInt25850;
+    public int fieldInt25851;
+    public int fieldInt25852;
+    public int fieldInt25853;
+    public int fieldInt25854;
+    public int fieldInt25855;
+    public int fieldInt25856;
+    public int fieldInt25857;
+    public int fieldInt25858;
+    public int fieldInt25859;
+    public int fieldInt25860;
+    public int fieldInt25861;
+    public int fieldInt25862;
+    public int fieldInt25863;
+    public int fieldInt25864;
+    public int fieldInt25865;
+    public int fieldInt25866;
+    public int fieldInt25867;
+    public int fieldInt25868;
+    public int fieldInt25869;
+    public int fieldInt25870;
+    public int fieldInt25871;
+    public int fieldInt25872;
+    public int fieldInt25873;
+    public int fieldInt25874;
+    public int fieldInt25875;
+    public int fieldInt25876;
+    public int fieldInt25877;
+    public int fieldInt25878;
+    public int fieldInt25879;
+    public int fieldInt25880;
+    public int fieldInt25881;
+    public int fieldInt25882;
+    public int fieldInt25883;
+    public int fieldInt25884;
+    public int fieldInt25885;
+    public int fieldInt25886;
+    public int fieldInt25887;
+    public int fieldInt25888;
+    public int fieldInt25889;
+    public int fieldInt25890;
+    public int fieldInt25891;
+    public int fieldInt25892;
+    public int fieldInt25893;
+    public int fieldInt25894;
+    public int fieldInt25895;
+    public int fieldInt25896;
+    public int fieldInt25897;
+    public int fieldInt25898;
+    public int fieldInt25899;
+    public int fieldInt25900;
+    public int fieldInt25901;
+    public int fieldInt25902;
+    public int fieldInt25903;
+    public int fieldInt25904;
+    public int fieldInt25905;
+    public int fieldInt25906;
+    public int fieldInt25907;
+    public int fieldInt25908;
+    public int fieldInt25909;
+    public int fieldInt25910;
+    public int fieldInt25911;
+    public int fieldInt25912;
+    public int fieldInt25913;
+    public int fieldInt25914;
+    public int fieldInt25915;
+    public int fieldInt25916;
+    public int fieldInt25917;
+    public int fieldInt25918;
+    public int fieldInt25919;
+    public int fieldInt25920;
+    public int fieldInt25921;
+    public int fieldInt25922;
+    public int fieldInt25923;
+    public int fieldInt25924;
+    public int fieldInt25925;
+    public int fieldInt25926;
+    public int fieldInt25927;
+    public int fieldInt25928;
+    public int fieldInt25929;
+    public int fieldInt25930;
+    public int fieldInt25931;
+    public int fieldInt25932;
+    public int fieldInt25933;
+    public int fieldInt25934;
+    public int fieldInt25935;
+    public int fieldInt25936;
+    public int fieldInt25937;
+    public int fieldInt25938;
+    public int fieldInt25939;
+    public int fieldInt25940;
+    public int fieldInt25941;
+    public int fieldInt25942;
+    public int fieldInt25943;
+    public int fieldInt25944;
+    public int fieldInt25945;
+    public int fieldInt25946;
+    public int fieldInt25947;
+    public int fieldInt25948;
+    public int fieldInt25949;
+    public int fieldInt25950;
+    public int fieldInt25951;
+    public int fieldInt25952;
+    public int fieldInt25953;
+    public int fieldInt25954;
+    public int fieldInt25955;
+    public int fieldInt25956;
+    public int fieldInt25957;
+    public int fieldInt25958;
+    public int fieldInt25959;
+    public int fieldInt25960;
+    public int fieldInt25961;
+    public int fieldInt25962;
+    public int fieldInt25963;
+    public int fieldInt25964;
+    public int fieldInt25965;
+    public int fieldInt25966;
+    public int fieldInt25967;
+    public int fieldInt25968;
+    public int fieldInt25969;
+    public int fieldInt25970;
+    public int fieldInt25971;
+    public int fieldInt25972;
+    public int fieldInt25973;
+    public int fieldInt25974;
+    public int fieldInt25975;
+    public int fieldInt25976;
+    public int fieldInt25977;
+    public int fieldInt25978;
+    public int fieldInt25979;
+    public int fieldInt25980;
+    public int fieldInt25981;
+    public int fieldInt25982;
+    public int fieldInt25983;
+    public int fieldInt25984;
+    public int fieldInt25985;
+    public int fieldInt25986;
+    public int fieldInt25987;
+    public int fieldInt25988;
+    public int fieldInt25989;
+    public int fieldInt25990;
+    public int fieldInt25991;
+    public int fieldInt25992;
+    public int fieldInt25993;
+    public int fieldInt25994;
+    public int fieldInt25995;
+    public int fieldInt25996;
+    public int fieldInt25997;
+    public int fieldInt25998;
+    public int fieldInt25999;
+    public int fieldInt26000;
+    public int fieldInt26001;
+    public int fieldInt26002;
+    public int fieldInt26003;
+    public int fieldInt26004;
+    public int fieldInt26005;
+    public int fieldInt26006;
+    public int fieldInt26007;
+    public int fieldInt26008;
+    public int fieldInt26009;
+    public int fieldInt26010;
+    public int fieldInt26011;
+    public int fieldInt26012;
+    public int fieldInt26013;
+    public int fieldInt26014;
+    public int fieldInt26015;
+    public int fieldInt26016;
+    public int fieldInt26017;
+    public int fieldInt26018;
+    public int fieldInt26019;
+    public int fieldInt26020;
+    public int fieldInt26021;
+    public int fieldInt26022;
+    public int fieldInt26023;
+    public int fieldInt26024;
+    public int fieldInt26025;
+    public int fieldInt26026;
+    public int fieldInt26027;
+    public int fieldInt26028;
+    public int fieldInt26029;
+    public int fieldInt26030;
+    public int fieldInt26031;
+    public int fieldInt26032;
+    public int fieldInt26033;
+    public int fieldInt26034;
+    public int fieldInt26035;
+    public int fieldInt26036;
+    public int fieldInt26037;
+    public int fieldInt26038;
+    public int fieldInt26039;
+    public int fieldInt26040;
+    public int fieldInt26041;
+    public int fieldInt26042;
+    public int fieldInt26043;
+    public int fieldInt26044;
+    public int fieldInt26045;
+    public int fieldInt26046;
+    public int fieldInt26047;
+    public int fieldInt26048;
+    public int fieldInt26049;
+    public int fieldInt26050;
+    public int fieldInt26051;
+    public int fieldInt26052;
+    public int fieldInt26053;
+    public int fieldInt26054;
+    public int fieldInt26055;
+    public int fieldInt26056;
+    public int fieldInt26057;
+    public int fieldInt26058;
+    public int fieldInt26059;
+    public int fieldInt26060;
+    public int fieldInt26061;
+    public int fieldInt26062;
+    public int fieldInt26063;
+    public int fieldInt26064;
+    public int fieldInt26065;
+    public int fieldInt26066;
+    public int fieldInt26067;
+    public int fieldInt26068;
+    public int fieldInt26069;
+    public int fieldInt26070;
+    public int fieldInt26071;
+    public int fieldInt26072;
+    public int fieldInt26073;
+    public int fieldInt26074;
+    public int fieldInt26075;
+    public int fieldInt26076;
+    public int fieldInt26077;
+    public int fieldInt26078;
+    public int fieldInt26079;
+    public int fieldInt26080;
+    public int fieldInt26081;
+    public int fieldInt26082;
+    public int fieldInt26083;
+    public int fieldInt26084;
+    public int fieldInt26085;
+    public int fieldInt26086;
+    public int fieldInt26087;
+    public int fieldInt26088;
+    public int fieldInt26089;
+    public int fieldInt26090;
+    public int fieldInt26091;
+    public int fieldInt26092;
+    public int fieldInt26093;
+    public int fieldInt26094;
+    public int fieldInt26095;
+    public int fieldInt26096;
+    public int fieldInt26097;
+    public int fieldInt26098;
+    public int fieldInt26099;
+    public int fieldInt26100;
+    public int fieldInt26101;
+    public int fieldInt26102;
+    public int fieldInt26103;
+    public int fieldInt26104;
+    public int fieldInt26105;
+    public int fieldInt26106;
+    public int fieldInt26107;
+    public int fieldInt26108;
+    public int fieldInt26109;
+    public int fieldInt26110;
+    public int fieldInt26111;
+    public int fieldInt26112;
+    public int fieldInt26113;
+    public int fieldInt26114;
+    public int fieldInt26115;
+    public int fieldInt26116;
+    public int fieldInt26117;
+    public int fieldInt26118;
+    public int fieldInt26119;
+    public int fieldInt26120;
+    public int fieldInt26121;
+    public int fieldInt26122;
+    public int fieldInt26123;
+    public int fieldInt26124;
+    public int fieldInt26125;
+    public int fieldInt26126;
+    public int fieldInt26127;
+    public int fieldInt26128;
+    public int fieldInt26129;
+    public int fieldInt26130;
+    public int fieldInt26131;
+    public int fieldInt26132;
+    public int fieldInt26133;
+    public int fieldInt26134;
+    public int fieldInt26135;
+    public int fieldInt26136;
+    public int fieldInt26137;
+    public int fieldInt26138;
+    public int fieldInt26139;
+    public int fieldInt26140;
+    public int fieldInt26141;
+    public int fieldInt26142;
+    public int fieldInt26143;
+    public int fieldInt26144;
+    public int fieldInt26145;
+    public int fieldInt26146;
+    public int fieldInt26147;
+    public int fieldInt26148;
+    public int fieldInt26149;
+    public int fieldInt26150;
+    public int fieldInt26151;
+    public int fieldInt26152;
+    public int fieldInt26153;
+    public int fieldInt26154;
+    public int fieldInt26155;
+    public int fieldInt26156;
+    public int fieldInt26157;
+    public int fieldInt26158;
+    public int fieldInt26159;
+    public int fieldInt26160;
+    public int fieldInt26161;
+    public int fieldInt26162;
+    public int fieldInt26163;
+    public int fieldInt26164;
+    public int fieldInt26165;
+    public int fieldInt26166;
+    public int fieldInt26167;
+    public int fieldInt26168;
+    public int fieldInt26169;
+    public int fieldInt26170;
+    public int fieldInt26171;
+    public int fieldInt26172;
+    public int fieldInt26173;
+    public int fieldInt26174;
+    public int fieldInt26175;
+    public int fieldInt26176;
+    public int fieldInt26177;
+    public int fieldInt26178;
+    public int fieldInt26179;
+    public int fieldInt26180;
+    public int fieldInt26181;
+    public int fieldInt26182;
+    public int fieldInt26183;
+    public int fieldInt26184;
+    public int fieldInt26185;
+    public int fieldInt26186;
+    public int fieldInt26187;
+    public int fieldInt26188;
+    public int fieldInt26189;
+    public int fieldInt26190;
+    public int fieldInt26191;
+    public int fieldInt26192;
+    public int fieldInt26193;
+    public int fieldInt26194;
+    public int fieldInt26195;
+    public int fieldInt26196;
+    public int fieldInt26197;
+    public int fieldInt26198;
+    public int fieldInt26199;
+    public int fieldInt26200;
+    public int fieldInt26201;
+    public int fieldInt26202;
+    public int fieldInt26203;
+    public int fieldInt26204;
+    public int fieldInt26205;
+    public int fieldInt26206;
+    public int fieldInt26207;
+    public int fieldInt26208;
+    public int fieldInt26209;
+    public int fieldInt26210;
+    public int fieldInt26211;
+    public int fieldInt26212;
+    public int fieldInt26213;
+    public int fieldInt26214;
+    public int fieldInt26215;
+    public int fieldInt26216;
+    public int fieldInt26217;
+    public int fieldInt26218;
+    public int fieldInt26219;
+    public int fieldInt26220;
+    public int fieldInt26221;
+    public int fieldInt26222;
+    public int fieldInt26223;
+    public int fieldInt26224;
+    public int fieldInt26225;
+    public int fieldInt26226;
+    public int fieldInt26227;
+    public int fieldInt26228;
+    public int fieldInt26229;
+    public int fieldInt26230;
+    public int fieldInt26231;
+    public int fieldInt26232;
+    public int fieldInt26233;
+    public int fieldInt26234;
+    public int fieldInt26235;
+    public int fieldInt26236;
+    public int fieldInt26237;
+    public int fieldInt26238;
+    public int fieldInt26239;
+    public int fieldInt26240;
+    public int fieldInt26241;
+    public int fieldInt26242;
+    public int fieldInt26243;
+    public int fieldInt26244;
+    public int fieldInt26245;
+    public int fieldInt26246;
+    public int fieldInt26247;
+    public int fieldInt26248;
+    public int fieldInt26249;
+    public int fieldInt26250;
+    public int fieldInt26251;
+    public int fieldInt26252;
+    public int fieldInt26253;
+    public int fieldInt26254;
+    public int fieldInt26255;
+    public int fieldInt26256;
+    public int fieldInt26257;
+    public int fieldInt26258;
+    public int fieldInt26259;
+    public int fieldInt26260;
+    public int fieldInt26261;
+    public int fieldInt26262;
+    public int fieldInt26263;
+    public int fieldInt26264;
+    public int fieldInt26265;
+    public int fieldInt26266;
+    public int fieldInt26267;
+    public int fieldInt26268;
+    public int fieldInt26269;
+    public int fieldInt26270;
+    public int fieldInt26271;
+    public int fieldInt26272;
+    public int fieldInt26273;
+    public int fieldInt26274;
+    public int fieldInt26275;
+    public int fieldInt26276;
+    public int fieldInt26277;
+    public int fieldInt26278;
+    public int fieldInt26279;
+    public int fieldInt26280;
+    public int fieldInt26281;
+    public int fieldInt26282;
+    public int fieldInt26283;
+    public int fieldInt26284;
+    public int fieldInt26285;
+    public int fieldInt26286;
+    public int fieldInt26287;
+    public int fieldInt26288;
+    public int fieldInt26289;
+    public int fieldInt26290;
+    public int fieldInt26291;
+    public int fieldInt26292;
+    public int fieldInt26293;
+    public int fieldInt26294;
+    public int fieldInt26295;
+    public int fieldInt26296;
+    public int fieldInt26297;
+    public int fieldInt26298;
+    public int fieldInt26299;
+    public int fieldInt26300;
+    public int fieldInt26301;
+    public int fieldInt26302;
+    public int fieldInt26303;
+    public int fieldInt26304;
+    public int fieldInt26305;
+    public int fieldInt26306;
+    public int fieldInt26307;
+    public int fieldInt26308;
+    public int fieldInt26309;
+    public int fieldInt26310;
+    public int fieldInt26311;
+    public int fieldInt26312;
+    public int fieldInt26313;
+    public int fieldInt26314;
+    public int fieldInt26315;
+    public int fieldInt26316;
+    public int fieldInt26317;
+    public int fieldInt26318;
+    public int fieldInt26319;
+    public int fieldInt26320;
+    public int fieldInt26321;
+    public int fieldInt26322;
+    public int fieldInt26323;
+    public int fieldInt26324;
+    public int fieldInt26325;
+    public int fieldInt26326;
+    public int fieldInt26327;
+    public int fieldInt26328;
+    public int fieldInt26329;
+    public int fieldInt26330;
+    public int fieldInt26331;
+    public int fieldInt26332;
+    public int fieldInt26333;
+    public int fieldInt26334;
+    public int fieldInt26335;
+    public int fieldInt26336;
+    public int fieldInt26337;
+    public int fieldInt26338;
+    public int fieldInt26339;
+    public int fieldInt26340;
+    public int fieldInt26341;
+    public int fieldInt26342;
+    public int fieldInt26343;
+    public int fieldInt26344;
+    public int fieldInt26345;
+    public int fieldInt26346;
+    public int fieldInt26347;
+    public int fieldInt26348;
+    public int fieldInt26349;
+    public int fieldInt26350;
+    public int fieldInt26351;
+    public int fieldInt26352;
+    public int fieldInt26353;
+    public int fieldInt26354;
+    public int fieldInt26355;
+    public int fieldInt26356;
+    public int fieldInt26357;
+    public int fieldInt26358;
+    public int fieldInt26359;
+    public int fieldInt26360;
+    public int fieldInt26361;
+    public int fieldInt26362;
+    public int fieldInt26363;
+    public int fieldInt26364;
+    public int fieldInt26365;
+    public int fieldInt26366;
+    public int fieldInt26367;
+    public int fieldInt26368;
+    public int fieldInt26369;
+    public int fieldInt26370;
+    public int fieldInt26371;
+    public int fieldInt26372;
+    public int fieldInt26373;
+    public int fieldInt26374;
+    public int fieldInt26375;
+    public int fieldInt26376;
+    public int fieldInt26377;
+    public int fieldInt26378;
+    public int fieldInt26379;
+    public int fieldInt26380;
+    public int fieldInt26381;
+    public int fieldInt26382;
+    public int fieldInt26383;
+    public int fieldInt26384;
+    public int fieldInt26385;
+    public int fieldInt26386;
+    public int fieldInt26387;
+    public int fieldInt26388;
+    public int fieldInt26389;
+    public int fieldInt26390;
+    public int fieldInt26391;
+    public int fieldInt26392;
+    public int fieldInt26393;
+    public int fieldInt26394;
+    public int fieldInt26395;
+    public int fieldInt26396;
+    public int fieldInt26397;
+    public int fieldInt26398;
+    public int fieldInt26399;
+    public int fieldInt26400;
+    public int fieldInt26401;
+    public int fieldInt26402;
+    public int fieldInt26403;
+    public int fieldInt26404;
+    public int fieldInt26405;
+    public int fieldInt26406;
+    public int fieldInt26407;
+    public int fieldInt26408;
+    public int fieldInt26409;
+    public int fieldInt26410;
+    public int fieldInt26411;
+    public int fieldInt26412;
+    public int fieldInt26413;
+    public int fieldInt26414;
+    public int fieldInt26415;
+    public int fieldInt26416;
+    public int fieldInt26417;
+    public int fieldInt26418;
+    public int fieldInt26419;
+    public int fieldInt26420;
+    public int fieldInt26421;
+    public int fieldInt26422;
+    public int fieldInt26423;
+    public int fieldInt26424;
+    public int fieldInt26425;
+    public int fieldInt26426;
+    public int fieldInt26427;
+    public int fieldInt26428;
+    public int fieldInt26429;
+    public int fieldInt26430;
+    public int fieldInt26431;
+    public int fieldInt26432;
+    public int fieldInt26433;
+    public int fieldInt26434;
+    public int fieldInt26435;
+    public int fieldInt26436;
+    public int fieldInt26437;
+    public int fieldInt26438;
+    public int fieldInt26439;
+    public int fieldInt26440;
+    public int fieldInt26441;
+    public int fieldInt26442;
+    public int fieldInt26443;
+    public int fieldInt26444;
+    public int fieldInt26445;
+    public int fieldInt26446;
+    public int fieldInt26447;
+    public int fieldInt26448;
+    public int fieldInt26449;
+    public int fieldInt26450;
+    public int fieldInt26451;
+    public int fieldInt26452;
+    public int fieldInt26453;
+    public int fieldInt26454;
+    public int fieldInt26455;
+    public int fieldInt26456;
+    public int fieldInt26457;
+    public int fieldInt26458;
+    public int fieldInt26459;
+    public int fieldInt26460;
+    public int fieldInt26461;
+    public int fieldInt26462;
+    public int fieldInt26463;
+    public int fieldInt26464;
+    public int fieldInt26465;
+    public int fieldInt26466;
+    public int fieldInt26467;
+    public int fieldInt26468;
+    public int fieldInt26469;
+    public int fieldInt26470;
+    public int fieldInt26471;
+    public int fieldInt26472;
+    public int fieldInt26473;
+    public int fieldInt26474;
+    public int fieldInt26475;
+    public int fieldInt26476;
+    public int fieldInt26477;
+    public int fieldInt26478;
+    public int fieldInt26479;
+    public int fieldInt26480;
+    public int fieldInt26481;
+    public int fieldInt26482;
+    public int fieldInt26483;
+    public int fieldInt26484;
+    public int fieldInt26485;
+    public int fieldInt26486;
+    public int fieldInt26487;
+    public int fieldInt26488;
+    public int fieldInt26489;
+    public int fieldInt26490;
+    public int fieldInt26491;
+    public int fieldInt26492;
+    public int fieldInt26493;
+    public int fieldInt26494;
+    public int fieldInt26495;
+    public int fieldInt26496;
+    public int fieldInt26497;
+    public int fieldInt26498;
+    public int fieldInt26499;
+    public int fieldInt26500;
+    public int fieldInt26501;
+    public int fieldInt26502;
+    public int fieldInt26503;
+    public int fieldInt26504;
+    public int fieldInt26505;
+    public int fieldInt26506;
+    public int fieldInt26507;
+    public int fieldInt26508;
+    public int fieldInt26509;
+    public int fieldInt26510;
+    public int fieldInt26511;
+    public int fieldInt26512;
+    public int fieldInt26513;
+    public int fieldInt26514;
+    public int fieldInt26515;
+    public int fieldInt26516;
+    public int fieldInt26517;
+    public int fieldInt26518;
+    public int fieldInt26519;
+    public int fieldInt26520;
+    public int fieldInt26521;
+    public int fieldInt26522;
+    public int fieldInt26523;
+    public int fieldInt26524;
+    public int fieldInt26525;
+    public int fieldInt26526;
+    public int fieldInt26527;
+    public int fieldInt26528;
+    public int fieldInt26529;
+    public int fieldInt26530;
+    public int fieldInt26531;
+    public int fieldInt26532;
+    public int fieldInt26533;
+    public int fieldInt26534;
+    public int fieldInt26535;
+    public int fieldInt26536;
+    public int fieldInt26537;
+    public int fieldInt26538;
+    public int fieldInt26539;
+    public int fieldInt26540;
+    public int fieldInt26541;
+    public int fieldInt26542;
+    public int fieldInt26543;
+    public int fieldInt26544;
+    public int fieldInt26545;
+    public int fieldInt26546;
+    public int fieldInt26547;
+    public int fieldInt26548;
+    public int fieldInt26549;
+    public int fieldInt26550;
+    public int fieldInt26551;
+    public int fieldInt26552;
+    public int fieldInt26553;
+    public int fieldInt26554;
+    public int fieldInt26555;
+    public int fieldInt26556;
+    public int fieldInt26557;
+    public int fieldInt26558;
+    public int fieldInt26559;
+    public int fieldInt26560;
+    public int fieldInt26561;
+    public int fieldInt26562;
+    public int fieldInt26563;
+    public int fieldInt26564;
+    public int fieldInt26565;
+    public int fieldInt26566;
+    public int fieldInt26567;
+    public int fieldInt26568;
+    public int fieldInt26569;
+    public int fieldInt26570;
+    public int fieldInt26571;
+    public int fieldInt26572;
+    public int fieldInt26573;
+    public int fieldInt26574;
+    public int fieldInt26575;
+    public int fieldInt26576;
+    public int fieldInt26577;
+    public int fieldInt26578;
+    public int fieldInt26579;
+    public int fieldInt26580;
+    public int fieldInt26581;
+    public int fieldInt26582;
+    public int fieldInt26583;
+    public int fieldInt26584;
+    public int fieldInt26585;
+    public int fieldInt26586;
+    public int fieldInt26587;
+    public int fieldInt26588;
+    public int fieldInt26589;
+    public int fieldInt26590;
+    public int fieldInt26591;
+    public int fieldInt26592;
+    public int fieldInt26593;
+    public int fieldInt26594;
+    public int fieldInt26595;
+    public int fieldInt26596;
+    public int fieldInt26597;
+    public int fieldInt26598;
+    public int fieldInt26599;
+    public int fieldInt26600;
+    public int fieldInt26601;
+    public int fieldInt26602;
+    public int fieldInt26603;
+    public int fieldInt26604;
+    public int fieldInt26605;
+    public int fieldInt26606;
+    public int fieldInt26607;
+    public int fieldInt26608;
+    public int fieldInt26609;
+    public int fieldInt26610;
+    public int fieldInt26611;
+    public int fieldInt26612;
+    public int fieldInt26613;
+    public int fieldInt26614;
+    public int fieldInt26615;
+    public int fieldInt26616;
+    public int fieldInt26617;
+    public int fieldInt26618;
+    public int fieldInt26619;
+    public int fieldInt26620;
+    public int fieldInt26621;
+    public int fieldInt26622;
+    public int fieldInt26623;
+    public int fieldInt26624;
+    public int fieldInt26625;
+    public int fieldInt26626;
+    public int fieldInt26627;
+    public int fieldInt26628;
+    public int fieldInt26629;
+    public int fieldInt26630;
+    public int fieldInt26631;
+    public int fieldInt26632;
+    public int fieldInt26633;
+    public int fieldInt26634;
+    public int fieldInt26635;
+    public int fieldInt26636;
+    public int fieldInt26637;
+    public int fieldInt26638;
+    public int fieldInt26639;
+    public int fieldInt26640;
+    public int fieldInt26641;
+    public int fieldInt26642;
+    public int fieldInt26643;
+    public int fieldInt26644;
+    public int fieldInt26645;
+    public int fieldInt26646;
+    public int fieldInt26647;
+    public int fieldInt26648;
+    public int fieldInt26649;
+    public int fieldInt26650;
+    public int fieldInt26651;
+    public int fieldInt26652;
+    public int fieldInt26653;
+    public int fieldInt26654;
+    public int fieldInt26655;
+    public int fieldInt26656;
+    public int fieldInt26657;
+    public int fieldInt26658;
+    public int fieldInt26659;
+    public int fieldInt26660;
+    public int fieldInt26661;
+    public int fieldInt26662;
+    public int fieldInt26663;
+    public int fieldInt26664;
+    public int fieldInt26665;
+    public int fieldInt26666;
+    public int fieldInt26667;
+    public int fieldInt26668;
+    public int fieldInt26669;
+    public int fieldInt26670;
+    public int fieldInt26671;
+    public int fieldInt26672;
+    public int fieldInt26673;
+    public int fieldInt26674;
+    public int fieldInt26675;
+    public int fieldInt26676;
+    public int fieldInt26677;
+    public int fieldInt26678;
+    public int fieldInt26679;
+    public int fieldInt26680;
+    public int fieldInt26681;
+    public int fieldInt26682;
+    public int fieldInt26683;
+    public int fieldInt26684;
+    public int fieldInt26685;
+    public int fieldInt26686;
+    public int fieldInt26687;
+    public int fieldInt26688;
+    public int fieldInt26689;
+    public int fieldInt26690;
+    public int fieldInt26691;
+    public int fieldInt26692;
+    public int fieldInt26693;
+    public int fieldInt26694;
+    public int fieldInt26695;
+    public int fieldInt26696;
+    public int fieldInt26697;
+    public int fieldInt26698;
+    public int fieldInt26699;
+    public int fieldInt26700;
+    public int fieldInt26701;
+    public int fieldInt26702;
+    public int fieldInt26703;
+    public int fieldInt26704;
+    public int fieldInt26705;
+    public int fieldInt26706;
+    public int fieldInt26707;
+    public int fieldInt26708;
+    public int fieldInt26709;
+    public int fieldInt26710;
+    public int fieldInt26711;
+    public int fieldInt26712;
+    public int fieldInt26713;
+    public int fieldInt26714;
+    public int fieldInt26715;
+    public int fieldInt26716;
+    public int fieldInt26717;
+    public int fieldInt26718;
+    public int fieldInt26719;
+    public int fieldInt26720;
+    public int fieldInt26721;
+    public int fieldInt26722;
+    public int fieldInt26723;
+    public int fieldInt26724;
+    public int fieldInt26725;
+    public int fieldInt26726;
+    public int fieldInt26727;
+    public int fieldInt26728;
+    public int fieldInt26729;
+    public int fieldInt26730;
+    public int fieldInt26731;
+    public int fieldInt26732;
+    public int fieldInt26733;
+    public int fieldInt26734;
+    public int fieldInt26735;
+    public int fieldInt26736;
+    public int fieldInt26737;
+    public int fieldInt26738;
+    public int fieldInt26739;
+    public int fieldInt26740;
+    public int fieldInt26741;
+    public int fieldInt26742;
+    public int fieldInt26743;
+    public int fieldInt26744;
+    public int fieldInt26745;
+    public int fieldInt26746;
+    public int fieldInt26747;
+    public int fieldInt26748;
+    public int fieldInt26749;
+    public int fieldInt26750;
+    public int fieldInt26751;
+    public int fieldInt26752;
+    public int fieldInt26753;
+    public int fieldInt26754;
+    public int fieldInt26755;
+    public int fieldInt26756;
+    public int fieldInt26757;
+    public int fieldInt26758;
+    public int fieldInt26759;
+    public int fieldInt26760;
+    public int fieldInt26761;
+    public int fieldInt26762;
+    public int fieldInt26763;
+    public int fieldInt26764;
+    public int fieldInt26765;
+    public int fieldInt26766;
+    public int fieldInt26767;
+    public int fieldInt26768;
+    public int fieldInt26769;
+    public int fieldInt26770;
+    public int fieldInt26771;
+    public int fieldInt26772;
+    public int fieldInt26773;
+    public int fieldInt26774;
+    public int fieldInt26775;
+    public int fieldInt26776;
+    public int fieldInt26777;
+    public int fieldInt26778;
+    public int fieldInt26779;
+    public int fieldInt26780;
+    public int fieldInt26781;
+    public int fieldInt26782;
+    public int fieldInt26783;
+    public int fieldInt26784;
+    public int fieldInt26785;
+    public int fieldInt26786;
+    public int fieldInt26787;
+    public int fieldInt26788;
+    public int fieldInt26789;
+    public int fieldInt26790;
+    public int fieldInt26791;
+    public int fieldInt26792;
+    public int fieldInt26793;
+    public int fieldInt26794;
+    public int fieldInt26795;
+    public int fieldInt26796;
+    public int fieldInt26797;
+    public int fieldInt26798;
+    public int fieldInt26799;
+    public int fieldInt26800;
+    public int fieldInt26801;
+    public int fieldInt26802;
+    public int fieldInt26803;
+    public int fieldInt26804;
+    public int fieldInt26805;
+    public int fieldInt26806;
+    public int fieldInt26807;
+    public int fieldInt26808;
+    public int fieldInt26809;
+    public int fieldInt26810;
+    public int fieldInt26811;
+    public int fieldInt26812;
+    public int fieldInt26813;
+    public int fieldInt26814;
+    public int fieldInt26815;
+    public int fieldInt26816;
+    public int fieldInt26817;
+    public int fieldInt26818;
+    public int fieldInt26819;
+    public int fieldInt26820;
+    public int fieldInt26821;
+    public int fieldInt26822;
+    public int fieldInt26823;
+    public int fieldInt26824;
+    public int fieldInt26825;
+    public int fieldInt26826;
+    public int fieldInt26827;
+    public int fieldInt26828;
+    public int fieldInt26829;
+    public int fieldInt26830;
+    public int fieldInt26831;
+    public int fieldInt26832;
+    public int fieldInt26833;
+    public int fieldInt26834;
+    public int fieldInt26835;
+    public int fieldInt26836;
+    public int fieldInt26837;
+    public int fieldInt26838;
+    public int fieldInt26839;
+    public int fieldInt26840;
+    public int fieldInt26841;
+    public int fieldInt26842;
+    public int fieldInt26843;
+    public int fieldInt26844;
+    public int fieldInt26845;
+    public int fieldInt26846;
+    public int fieldInt26847;
+    public int fieldInt26848;
+    public int fieldInt26849;
+    public int fieldInt26850;
+    public int fieldInt26851;
+    public int fieldInt26852;
+    public int fieldInt26853;
+    public int fieldInt26854;
+    public int fieldInt26855;
+    public int fieldInt26856;
+    public int fieldInt26857;
+    public int fieldInt26858;
+    public int fieldInt26859;
+    public int fieldInt26860;
+    public int fieldInt26861;
+    public int fieldInt26862;
+    public int fieldInt26863;
+    public int fieldInt26864;
+    public int fieldInt26865;
+    public int fieldInt26866;
+    public int fieldInt26867;
+    public int fieldInt26868;
+    public int fieldInt26869;
+    public int fieldInt26870;
+    public int fieldInt26871;
+    public int fieldInt26872;
+    public int fieldInt26873;
+    public int fieldInt26874;
+    public int fieldInt26875;
+    public int fieldInt26876;
+    public int fieldInt26877;
+    public int fieldInt26878;
+    public int fieldInt26879;
+    public int fieldInt26880;
+    public int fieldInt26881;
+    public int fieldInt26882;
+    public int fieldInt26883;
+    public int fieldInt26884;
+    public int fieldInt26885;
+    public int fieldInt26886;
+    public int fieldInt26887;
+    public int fieldInt26888;
+    public int fieldInt26889;
+    public int fieldInt26890;
+    public int fieldInt26891;
+    public int fieldInt26892;
+    public int fieldInt26893;
+    public int fieldInt26894;
+    public int fieldInt26895;
+    public int fieldInt26896;
+    public int fieldInt26897;
+    public int fieldInt26898;
+    public int fieldInt26899;
+    public int fieldInt26900;
+    public int fieldInt26901;
+    public int fieldInt26902;
+    public int fieldInt26903;
+    public int fieldInt26904;
+    public int fieldInt26905;
+    public int fieldInt26906;
+    public int fieldInt26907;
+    public int fieldInt26908;
+    public int fieldInt26909;
+    public int fieldInt26910;
+    public int fieldInt26911;
+    public int fieldInt26912;
+    public int fieldInt26913;
+    public int fieldInt26914;
+    public int fieldInt26915;
+    public int fieldInt26916;
+    public int fieldInt26917;
+    public int fieldInt26918;
+    public int fieldInt26919;
+    public int fieldInt26920;
+    public int fieldInt26921;
+    public int fieldInt26922;
+    public int fieldInt26923;
+    public int fieldInt26924;
+    public int fieldInt26925;
+    public int fieldInt26926;
+    public int fieldInt26927;
+    public int fieldInt26928;
+    public int fieldInt26929;
+    public int fieldInt26930;
+    public int fieldInt26931;
+    public int fieldInt26932;
+    public int fieldInt26933;
+    public int fieldInt26934;
+    public int fieldInt26935;
+    public int fieldInt26936;
+    public int fieldInt26937;
+    public int fieldInt26938;
+    public int fieldInt26939;
+    public int fieldInt26940;
+    public int fieldInt26941;
+    public int fieldInt26942;
+    public int fieldInt26943;
+    public int fieldInt26944;
+    public int fieldInt26945;
+    public int fieldInt26946;
+    public int fieldInt26947;
+    public int fieldInt26948;
+    public int fieldInt26949;
+    public int fieldInt26950;
+    public int fieldInt26951;
+    public int fieldInt26952;
+    public int fieldInt26953;
+    public int fieldInt26954;
+    public int fieldInt26955;
+    public int fieldInt26956;
+    public int fieldInt26957;
+    public int fieldInt26958;
+    public int fieldInt26959;
+    public int fieldInt26960;
+    public int fieldInt26961;
+    public int fieldInt26962;
+    public int fieldInt26963;
+    public int fieldInt26964;
+    public int fieldInt26965;
+    public int fieldInt26966;
+    public int fieldInt26967;
+    public int fieldInt26968;
+    public int fieldInt26969;
+    public int fieldInt26970;
+    public int fieldInt26971;
+    public int fieldInt26972;
+    public int fieldInt26973;
+    public int fieldInt26974;
+    public int fieldInt26975;
+    public int fieldInt26976;
+    public int fieldInt26977;
+    public int fieldInt26978;
+    public int fieldInt26979;
+    public int fieldInt26980;
+    public int fieldInt26981;
+    public int fieldInt26982;
+    public int fieldInt26983;
+    public int fieldInt26984;
+    public int fieldInt26985;
+    public int fieldInt26986;
+    public int fieldInt26987;
+    public int fieldInt26988;
+    public int fieldInt26989;
+    public int fieldInt26990;
+    public int fieldInt26991;
+    public int fieldInt26992;
+    public int fieldInt26993;
+    public int fieldInt26994;
+    public int fieldInt26995;
+    public int fieldInt26996;
+    public int fieldInt26997;
+    public int fieldInt26998;
+    public int fieldInt26999;
+    public int fieldInt27000;
+    public int fieldInt27001;
+    public int fieldInt27002;
+    public int fieldInt27003;
+    public int fieldInt27004;
+    public int fieldInt27005;
+    public int fieldInt27006;
+    public int fieldInt27007;
+    public int fieldInt27008;
+    public int fieldInt27009;
+    public int fieldInt27010;
+    public int fieldInt27011;
+    public int fieldInt27012;
+    public int fieldInt27013;
+    public int fieldInt27014;
+    public int fieldInt27015;
+    public int fieldInt27016;
+    public int fieldInt27017;
+    public int fieldInt27018;
+    public int fieldInt27019;
+    public int fieldInt27020;
+    public int fieldInt27021;
+    public int fieldInt27022;
+    public int fieldInt27023;
+    public int fieldInt27024;
+    public int fieldInt27025;
+    public int fieldInt27026;
+    public int fieldInt27027;
+    public int fieldInt27028;
+    public int fieldInt27029;
+    public int fieldInt27030;
+    public int fieldInt27031;
+    public int fieldInt27032;
+    public int fieldInt27033;
+    public int fieldInt27034;
+    public int fieldInt27035;
+    public int fieldInt27036;
+    public int fieldInt27037;
+    public int fieldInt27038;
+    public int fieldInt27039;
+    public int fieldInt27040;
+    public int fieldInt27041;
+    public int fieldInt27042;
+    public int fieldInt27043;
+    public int fieldInt27044;
+    public int fieldInt27045;
+    public int fieldInt27046;
+    public int fieldInt27047;
+    public int fieldInt27048;
+    public int fieldInt27049;
+    public int fieldInt27050;
+    public int fieldInt27051;
+    public int fieldInt27052;
+    public int fieldInt27053;
+    public int fieldInt27054;
+    public int fieldInt27055;
+    public int fieldInt27056;
+    public int fieldInt27057;
+    public int fieldInt27058;
+    public int fieldInt27059;
+    public int fieldInt27060;
+    public int fieldInt27061;
+    public int fieldInt27062;
+    public int fieldInt27063;
+    public int fieldInt27064;
+    public int fieldInt27065;
+    public int fieldInt27066;
+    public int fieldInt27067;
+    public int fieldInt27068;
+    public int fieldInt27069;
+    public int fieldInt27070;
+    public int fieldInt27071;
+    public int fieldInt27072;
+    public int fieldInt27073;
+    public int fieldInt27074;
+    public int fieldInt27075;
+    public int fieldInt27076;
+    public int fieldInt27077;
+    public int fieldInt27078;
+    public int fieldInt27079;
+    public int fieldInt27080;
+    public int fieldInt27081;
+    public int fieldInt27082;
+    public int fieldInt27083;
+    public int fieldInt27084;
+    public int fieldInt27085;
+    public int fieldInt27086;
+    public int fieldInt27087;
+    public int fieldInt27088;
+    public int fieldInt27089;
+    public int fieldInt27090;
+    public int fieldInt27091;
+    public int fieldInt27092;
+    public int fieldInt27093;
+    public int fieldInt27094;
+    public int fieldInt27095;
+    public int fieldInt27096;
+    public int fieldInt27097;
+    public int fieldInt27098;
+    public int fieldInt27099;
+    public int fieldInt27100;
+    public int fieldInt27101;
+    public int fieldInt27102;
+    public int fieldInt27103;
+    public int fieldInt27104;
+    public int fieldInt27105;
+    public int fieldInt27106;
+    public int fieldInt27107;
+    public int fieldInt27108;
+    public int fieldInt27109;
+    public int fieldInt27110;
+    public int fieldInt27111;
+    public int fieldInt27112;
+    public int fieldInt27113;
+    public int fieldInt27114;
+    public int fieldInt27115;
+    public int fieldInt27116;
+    public int fieldInt27117;
+    public int fieldInt27118;
+    public int fieldInt27119;
+    public int fieldInt27120;
+    public int fieldInt27121;
+    public int fieldInt27122;
+    public int fieldInt27123;
+    public int fieldInt27124;
+    public int fieldInt27125;
+    public int fieldInt27126;
+    public int fieldInt27127;
+    public int fieldInt27128;
+    public int fieldInt27129;
+    public int fieldInt27130;
+    public int fieldInt27131;
+    public int fieldInt27132;
+    public int fieldInt27133;
+    public int fieldInt27134;
+    public int fieldInt27135;
+    public int fieldInt27136;
+    public int fieldInt27137;
+    public int fieldInt27138;
+    public int fieldInt27139;
+    public int fieldInt27140;
+    public int fieldInt27141;
+    public int fieldInt27142;
+    public int fieldInt27143;
+    public int fieldInt27144;
+    public int fieldInt27145;
+    public int fieldInt27146;
+    public int fieldInt27147;
+    public int fieldInt27148;
+    public int fieldInt27149;
+    public int fieldInt27150;
+    public int fieldInt27151;
+    public int fieldInt27152;
+    public int fieldInt27153;
+    public int fieldInt27154;
+    public int fieldInt27155;
+    public int fieldInt27156;
+    public int fieldInt27157;
+    public int fieldInt27158;
+    public int fieldInt27159;
+    public int fieldInt27160;
+    public int fieldInt27161;
+    public int fieldInt27162;
+    public int fieldInt27163;
+    public int fieldInt27164;
+    public int fieldInt27165;
+    public int fieldInt27166;
+    public int fieldInt27167;
+    public int fieldInt27168;
+    public int fieldInt27169;
+    public int fieldInt27170;
+    public int fieldInt27171;
+    public int fieldInt27172;
+    public int fieldInt27173;
+    public int fieldInt27174;
+    public int fieldInt27175;
+    public int fieldInt27176;
+    public int fieldInt27177;
+    public int fieldInt27178;
+    public int fieldInt27179;
+    public int fieldInt27180;
+    public int fieldInt27181;
+    public int fieldInt27182;
+    public int fieldInt27183;
+    public int fieldInt27184;
+    public int fieldInt27185;
+    public int fieldInt27186;
+    public int fieldInt27187;
+    public int fieldInt27188;
+    public int fieldInt27189;
+    public int fieldInt27190;
+    public int fieldInt27191;
+    public int fieldInt27192;
+    public int fieldInt27193;
+    public int fieldInt27194;
+    public int fieldInt27195;
+    public int fieldInt27196;
+    public int fieldInt27197;
+    public int fieldInt27198;
+    public int fieldInt27199;
+    public int fieldInt27200;
+    public int fieldInt27201;
+    public int fieldInt27202;
+    public int fieldInt27203;
+    public int fieldInt27204;
+    public int fieldInt27205;
+    public int fieldInt27206;
+    public int fieldInt27207;
+    public int fieldInt27208;
+    public int fieldInt27209;
+    public int fieldInt27210;
+    public int fieldInt27211;
+    public int fieldInt27212;
+    public int fieldInt27213;
+    public int fieldInt27214;
+    public int fieldInt27215;
+    public int fieldInt27216;
+    public int fieldInt27217;
+    public int fieldInt27218;
+    public int fieldInt27219;
+    public int fieldInt27220;
+    public int fieldInt27221;
+    public int fieldInt27222;
+    public int fieldInt27223;
+    public int fieldInt27224;
+    public int fieldInt27225;
+    public int fieldInt27226;
+    public int fieldInt27227;
+    public int fieldInt27228;
+    public int fieldInt27229;
+    public int fieldInt27230;
+    public int fieldInt27231;
+    public int fieldInt27232;
+    public int fieldInt27233;
+    public int fieldInt27234;
+    public int fieldInt27235;
+    public int fieldInt27236;
+    public int fieldInt27237;
+    public int fieldInt27238;
+    public int fieldInt27239;
+    public int fieldInt27240;
+    public int fieldInt27241;
+    public int fieldInt27242;
+    public int fieldInt27243;
+    public int fieldInt27244;
+    public int fieldInt27245;
+    public int fieldInt27246;
+    public int fieldInt27247;
+    public int fieldInt27248;
+    public int fieldInt27249;
+    public int fieldInt27250;
+    public int fieldInt27251;
+    public int fieldInt27252;
+    public int fieldInt27253;
+    public int fieldInt27254;
+    public int fieldInt27255;
+    public int fieldInt27256;
+    public int fieldInt27257;
+    public int fieldInt27258;
+    public int fieldInt27259;
+    public int fieldInt27260;
+    public int fieldInt27261;
+    public int fieldInt27262;
+    public int fieldInt27263;
+    public int fieldInt27264;
+    public int fieldInt27265;
+    public int fieldInt27266;
+    public int fieldInt27267;
+    public int fieldInt27268;
+    public int fieldInt27269;
+    public int fieldInt27270;
+    public int fieldInt27271;
+    public int fieldInt27272;
+    public int fieldInt27273;
+    public int fieldInt27274;
+    public int fieldInt27275;
+    public int fieldInt27276;
+    public int fieldInt27277;
+    public int fieldInt27278;
+    public int fieldInt27279;
+    public int fieldInt27280;
+    public int fieldInt27281;
+    public int fieldInt27282;
+    public int fieldInt27283;
+    public int fieldInt27284;
+    public int fieldInt27285;
+    public int fieldInt27286;
+    public int fieldInt27287;
+    public int fieldInt27288;
+    public int fieldInt27289;
+    public int fieldInt27290;
+    public int fieldInt27291;
+    public int fieldInt27292;
+    public int fieldInt27293;
+    public int fieldInt27294;
+    public int fieldInt27295;
+    public int fieldInt27296;
+    public int fieldInt27297;
+    public int fieldInt27298;
+    public int fieldInt27299;
+    public int fieldInt27300;
+    public int fieldInt27301;
+    public int fieldInt27302;
+    public int fieldInt27303;
+    public int fieldInt27304;
+    public int fieldInt27305;
+    public int fieldInt27306;
+    public int fieldInt27307;
+    public int fieldInt27308;
+    public int fieldInt27309;
+    public int fieldInt27310;
+    public int fieldInt27311;
+    public int fieldInt27312;
+    public int fieldInt27313;
+    public int fieldInt27314;
+    public int fieldInt27315;
+    public int fieldInt27316;
+    public int fieldInt27317;
+    public int fieldInt27318;
+    public int fieldInt27319;
+    public int fieldInt27320;
+    public int fieldInt27321;
+    public int fieldInt27322;
+    public int fieldInt27323;
+    public int fieldInt27324;
+    public int fieldInt27325;
+    public int fieldInt27326;
+    public int fieldInt27327;
+    public int fieldInt27328;
+    public int fieldInt27329;
+    public int fieldInt27330;
+    public int fieldInt27331;
+    public int fieldInt27332;
+    public int fieldInt27333;
+    public int fieldInt27334;
+    public int fieldInt27335;
+    public int fieldInt27336;
+    public int fieldInt27337;
+    public int fieldInt27338;
+    public int fieldInt27339;
+    public int fieldInt27340;
+    public int fieldInt27341;
+    public int fieldInt27342;
+    public int fieldInt27343;
+    public int fieldInt27344;
+    public int fieldInt27345;
+    public int fieldInt27346;
+    public int fieldInt27347;
+    public int fieldInt27348;
+    public int fieldInt27349;
+    public int fieldInt27350;
+    public int fieldInt27351;
+    public int fieldInt27352;
+    public int fieldInt27353;
+    public int fieldInt27354;
+    public int fieldInt27355;
+    public int fieldInt27356;
+    public int fieldInt27357;
+    public int fieldInt27358;
+    public int fieldInt27359;
+    public int fieldInt27360;
+    public int fieldInt27361;
+    public int fieldInt27362;
+    public int fieldInt27363;
+    public int fieldInt27364;
+    public int fieldInt27365;
+    public int fieldInt27366;
+    public int fieldInt27367;
+    public int fieldInt27368;
+    public int fieldInt27369;
+    public int fieldInt27370;
+    public int fieldInt27371;
+    public int fieldInt27372;
+    public int fieldInt27373;
+    public int fieldInt27374;
+    public int fieldInt27375;
+    public int fieldInt27376;
+    public int fieldInt27377;
+    public int fieldInt27378;
+    public int fieldInt27379;
+    public int fieldInt27380;
+    public int fieldInt27381;
+    public int fieldInt27382;
+    public int fieldInt27383;
+    public int fieldInt27384;
+    public int fieldInt27385;
+    public int fieldInt27386;
+    public int fieldInt27387;
+    public int fieldInt27388;
+    public int fieldInt27389;
+    public int fieldInt27390;
+    public int fieldInt27391;
+    public int fieldInt27392;
+    public int fieldInt27393;
+    public int fieldInt27394;
+    public int fieldInt27395;
+    public int fieldInt27396;
+    public int fieldInt27397;
+    public int fieldInt27398;
+    public int fieldInt27399;
+    public int fieldInt27400;
+    public int fieldInt27401;
+    public int fieldInt27402;
+    public int fieldInt27403;
+    public int fieldInt27404;
+    public int fieldInt27405;
+    public int fieldInt27406;
+    public int fieldInt27407;
+    public int fieldInt27408;
+    public int fieldInt27409;
+    public int fieldInt27410;
+    public int fieldInt27411;
+    public int fieldInt27412;
+    public int fieldInt27413;
+    public int fieldInt27414;
+    public int fieldInt27415;
+    public int fieldInt27416;
+    public int fieldInt27417;
+    public int fieldInt27418;
+    public int fieldInt27419;
+    public int fieldInt27420;
+    public int fieldInt27421;
+    public int fieldInt27422;
+    public int fieldInt27423;
+    public int fieldInt27424;
+    public int fieldInt27425;
+    public int fieldInt27426;
+    public int fieldInt27427;
+    public int fieldInt27428;
+    public int fieldInt27429;
+    public int fieldInt27430;
+    public int fieldInt27431;
+    public int fieldInt27432;
+    public int fieldInt27433;
+    public int fieldInt27434;
+    public int fieldInt27435;
+    public int fieldInt27436;
+    public int fieldInt27437;
+    public int fieldInt27438;
+    public int fieldInt27439;
+    public int fieldInt27440;
+    public int fieldInt27441;
+    public int fieldInt27442;
+    public int fieldInt27443;
+    public int fieldInt27444;
+    public int fieldInt27445;
+    public int fieldInt27446;
+    public int fieldInt27447;
+    public int fieldInt27448;
+    public int fieldInt27449;
+    public int fieldInt27450;
+    public int fieldInt27451;
+    public int fieldInt27452;
+    public int fieldInt27453;
+    public int fieldInt27454;
+    public int fieldInt27455;
+    public int fieldInt27456;
+    public int fieldInt27457;
+    public int fieldInt27458;
+    public int fieldInt27459;
+    public int fieldInt27460;
+    public int fieldInt27461;
+    public int fieldInt27462;
+    public int fieldInt27463;
+    public int fieldInt27464;
+    public int fieldInt27465;
+    public int fieldInt27466;
+    public int fieldInt27467;
+    public int fieldInt27468;
+    public int fieldInt27469;
+    public int fieldInt27470;
+    public int fieldInt27471;
+    public int fieldInt27472;
+    public int fieldInt27473;
+    public int fieldInt27474;
+    public int fieldInt27475;
+    public int fieldInt27476;
+    public int fieldInt27477;
+    public int fieldInt27478;
+    public int fieldInt27479;
+    public int fieldInt27480;
+    public int fieldInt27481;
+    public int fieldInt27482;
+    public int fieldInt27483;
+    public int fieldInt27484;
+    public int fieldInt27485;
+    public int fieldInt27486;
+    public int fieldInt27487;
+    public int fieldInt27488;
+    public int fieldInt27489;
+    public int fieldInt27490;
+    public int fieldInt27491;
+    public int fieldInt27492;
+    public int fieldInt27493;
+    public int fieldInt27494;
+    public int fieldInt27495;
+    public int fieldInt27496;
+    public int fieldInt27497;
+    public int fieldInt27498;
+    public int fieldInt27499;
+    public int fieldInt27500;
+    public int fieldInt27501;
+    public int fieldInt27502;
+    public int fieldInt27503;
+    public int fieldInt27504;
+    public int fieldInt27505;
+    public int fieldInt27506;
+    public int fieldInt27507;
+    public int fieldInt27508;
+    public int fieldInt27509;
+    public int fieldInt27510;
+    public int fieldInt27511;
+    public int fieldInt27512;
+    public int fieldInt27513;
+    public int fieldInt27514;
+    public int fieldInt27515;
+    public int fieldInt27516;
+    public int fieldInt27517;
+    public int fieldInt27518;
+    public int fieldInt27519;
+    public int fieldInt27520;
+    public int fieldInt27521;
+    public int fieldInt27522;
+    public int fieldInt27523;
+    public int fieldInt27524;
+    public int fieldInt27525;
+    public int fieldInt27526;
+    public int fieldInt27527;
+    public int fieldInt27528;
+    public int fieldInt27529;
+    public int fieldInt27530;
+    public int fieldInt27531;
+    public int fieldInt27532;
+    public int fieldInt27533;
+    public int fieldInt27534;
+    public int fieldInt27535;
+    public int fieldInt27536;
+    public int fieldInt27537;
+    public int fieldInt27538;
+    public int fieldInt27539;
+    public int fieldInt27540;
+    public int fieldInt27541;
+    public int fieldInt27542;
+    public int fieldInt27543;
+    public int fieldInt27544;
+    public int fieldInt27545;
+    public int fieldInt27546;
+    public int fieldInt27547;
+    public int fieldInt27548;
+    public int fieldInt27549;
+    public int fieldInt27550;
+    public int fieldInt27551;
+    public int fieldInt27552;
+    public int fieldInt27553;
+    public int fieldInt27554;
+    public int fieldInt27555;
+    public int fieldInt27556;
+    public int fieldInt27557;
+    public int fieldInt27558;
+    public int fieldInt27559;
+    public int fieldInt27560;
+    public int fieldInt27561;
+    public int fieldInt27562;
+    public int fieldInt27563;
+    public int fieldInt27564;
+    public int fieldInt27565;
+    public int fieldInt27566;
+    public int fieldInt27567;
+    public int fieldInt27568;
+    public int fieldInt27569;
+    public int fieldInt27570;
+    public int fieldInt27571;
+    public int fieldInt27572;
+    public int fieldInt27573;
+    public int fieldInt27574;
+    public int fieldInt27575;
+    public int fieldInt27576;
+    public int fieldInt27577;
+    public int fieldInt27578;
+    public int fieldInt27579;
+    public int fieldInt27580;
+    public int fieldInt27581;
+    public int fieldInt27582;
+    public int fieldInt27583;
+    public int fieldInt27584;
+    public int fieldInt27585;
+    public int fieldInt27586;
+    public int fieldInt27587;
+    public int fieldInt27588;
+    public int fieldInt27589;
+    public int fieldInt27590;
+    public int fieldInt27591;
+    public int fieldInt27592;
+    public int fieldInt27593;
+    public int fieldInt27594;
+    public int fieldInt27595;
+    public int fieldInt27596;
+    public int fieldInt27597;
+    public int fieldInt27598;
+    public int fieldInt27599;
+    public int fieldInt27600;
+    public int fieldInt27601;
+    public int fieldInt27602;
+    public int fieldInt27603;
+    public int fieldInt27604;
+    public int fieldInt27605;
+    public int fieldInt27606;
+    public int fieldInt27607;
+    public int fieldInt27608;
+    public int fieldInt27609;
+    public int fieldInt27610;
+    public int fieldInt27611;
+    public int fieldInt27612;
+    public int fieldInt27613;
+    public int fieldInt27614;
+    public int fieldInt27615;
+    public int fieldInt27616;
+    public int fieldInt27617;
+    public int fieldInt27618;
+    public int fieldInt27619;
+    public int fieldInt27620;
+    public int fieldInt27621;
+    public int fieldInt27622;
+    public int fieldInt27623;
+    public int fieldInt27624;
+    public int fieldInt27625;
+    public int fieldInt27626;
+    public int fieldInt27627;
+    public int fieldInt27628;
+    public int fieldInt27629;
+    public int fieldInt27630;
+    public int fieldInt27631;
+    public int fieldInt27632;
+    public int fieldInt27633;
+    public int fieldInt27634;
+    public int fieldInt27635;
+    public int fieldInt27636;
+    public int fieldInt27637;
+    public int fieldInt27638;
+    public int fieldInt27639;
+    public int fieldInt27640;
+    public int fieldInt27641;
+    public int fieldInt27642;
+    public int fieldInt27643;
+    public int fieldInt27644;
+    public int fieldInt27645;
+    public int fieldInt27646;
+    public int fieldInt27647;
+    public int fieldInt27648;
+    public int fieldInt27649;
+    public int fieldInt27650;
+    public int fieldInt27651;
+    public int fieldInt27652;
+    public int fieldInt27653;
+    public int fieldInt27654;
+    public int fieldInt27655;
+    public int fieldInt27656;
+    public int fieldInt27657;
+    public int fieldInt27658;
+    public int fieldInt27659;
+    public int fieldInt27660;
+    public int fieldInt27661;
+    public int fieldInt27662;
+    public int fieldInt27663;
+    public int fieldInt27664;
+    public int fieldInt27665;
+    public int fieldInt27666;
+    public int fieldInt27667;
+    public int fieldInt27668;
+    public int fieldInt27669;
+    public int fieldInt27670;
+    public int fieldInt27671;
+    public int fieldInt27672;
+    public int fieldInt27673;
+    public int fieldInt27674;
+    public int fieldInt27675;
+    public int fieldInt27676;
+    public int fieldInt27677;
+    public int fieldInt27678;
+    public int fieldInt27679;
+    public int fieldInt27680;
+    public int fieldInt27681;
+    public int fieldInt27682;
+    public int fieldInt27683;
+    public int fieldInt27684;
+    public int fieldInt27685;
+    public int fieldInt27686;
+    public int fieldInt27687;
+    public int fieldInt27688;
+    public int fieldInt27689;
+    public int fieldInt27690;
+    public int fieldInt27691;
+    public int fieldInt27692;
+    public int fieldInt27693;
+    public int fieldInt27694;
+    public int fieldInt27695;
+    public int fieldInt27696;
+    public int fieldInt27697;
+    public int fieldInt27698;
+    public int fieldInt27699;
+    public int fieldInt27700;
+    public int fieldInt27701;
+    public int fieldInt27702;
+    public int fieldInt27703;
+    public int fieldInt27704;
+    public int fieldInt27705;
+    public int fieldInt27706;
+    public int fieldInt27707;
+    public int fieldInt27708;
+    public int fieldInt27709;
+    public int fieldInt27710;
+    public int fieldInt27711;
+    public int fieldInt27712;
+    public int fieldInt27713;
+    public int fieldInt27714;
+    public int fieldInt27715;
+    public int fieldInt27716;
+    public int fieldInt27717;
+    public int fieldInt27718;
+    public int fieldInt27719;
+    public int fieldInt27720;
+    public int fieldInt27721;
+    public int fieldInt27722;
+    public int fieldInt27723;
+    public int fieldInt27724;
+    public int fieldInt27725;
+    public int fieldInt27726;
+    public int fieldInt27727;
+    public int fieldInt27728;
+    public int fieldInt27729;
+    public int fieldInt27730;
+    public int fieldInt27731;
+    public int fieldInt27732;
+    public int fieldInt27733;
+    public int fieldInt27734;
+    public int fieldInt27735;
+    public int fieldInt27736;
+    public int fieldInt27737;
+    public int fieldInt27738;
+    public int fieldInt27739;
+    public int fieldInt27740;
+    public int fieldInt27741;
+    public int fieldInt27742;
+    public int fieldInt27743;
+    public int fieldInt27744;
+    public int fieldInt27745;
+    public int fieldInt27746;
+    public int fieldInt27747;
+    public int fieldInt27748;
+    public int fieldInt27749;
+    public int fieldInt27750;
+    public int fieldInt27751;
+    public int fieldInt27752;
+    public int fieldInt27753;
+    public int fieldInt27754;
+    public int fieldInt27755;
+    public int fieldInt27756;
+    public int fieldInt27757;
+    public int fieldInt27758;
+    public int fieldInt27759;
+    public int fieldInt27760;
+    public int fieldInt27761;
+    public int fieldInt27762;
+    public int fieldInt27763;
+    public int fieldInt27764;
+    public int fieldInt27765;
+    public int fieldInt27766;
+    public int fieldInt27767;
+    public int fieldInt27768;
+    public int fieldInt27769;
+    public int fieldInt27770;
+    public int fieldInt27771;
+    public int fieldInt27772;
+    public int fieldInt27773;
+    public int fieldInt27774;
+    public int fieldInt27775;
+    public int fieldInt27776;
+    public int fieldInt27777;
+    public int fieldInt27778;
+    public int fieldInt27779;
+    public int fieldInt27780;
+    public int fieldInt27781;
+    public int fieldInt27782;
+    public int fieldInt27783;
+    public int fieldInt27784;
+    public int fieldInt27785;
+    public int fieldInt27786;
+    public int fieldInt27787;
+    public int fieldInt27788;
+    public int fieldInt27789;
+    public int fieldInt27790;
+    public int fieldInt27791;
+    public int fieldInt27792;
+    public int fieldInt27793;
+    public int fieldInt27794;
+    public int fieldInt27795;
+    public int fieldInt27796;
+    public int fieldInt27797;
+    public int fieldInt27798;
+    public int fieldInt27799;
+    public int fieldInt27800;
+    public int fieldInt27801;
+    public int fieldInt27802;
+    public int fieldInt27803;
+    public int fieldInt27804;
+    public int fieldInt27805;
+    public int fieldInt27806;
+    public int fieldInt27807;
+    public int fieldInt27808;
+    public int fieldInt27809;
+    public int fieldInt27810;
+    public int fieldInt27811;
+    public int fieldInt27812;
+    public int fieldInt27813;
+    public int fieldInt27814;
+    public int fieldInt27815;
+    public int fieldInt27816;
+    public int fieldInt27817;
+    public int fieldInt27818;
+    public int fieldInt27819;
+    public int fieldInt27820;
+    public int fieldInt27821;
+    public int fieldInt27822;
+    public int fieldInt27823;
+    public int fieldInt27824;
+    public int fieldInt27825;
+    public int fieldInt27826;
+    public int fieldInt27827;
+    public int fieldInt27828;
+    public int fieldInt27829;
+    public int fieldInt27830;
+    public int fieldInt27831;
+    public int fieldInt27832;
+    public int fieldInt27833;
+    public int fieldInt27834;
+    public int fieldInt27835;
+    public int fieldInt27836;
+    public int fieldInt27837;
+    public int fieldInt27838;
+    public int fieldInt27839;
+    public int fieldInt27840;
+    public int fieldInt27841;
+    public int fieldInt27842;
+    public int fieldInt27843;
+    public int fieldInt27844;
+    public int fieldInt27845;
+    public int fieldInt27846;
+    public int fieldInt27847;
+    public int fieldInt27848;
+    public int fieldInt27849;
+    public int fieldInt27850;
+    public int fieldInt27851;
+    public int fieldInt27852;
+    public int fieldInt27853;
+    public int fieldInt27854;
+    public int fieldInt27855;
+    public int fieldInt27856;
+    public int fieldInt27857;
+    public int fieldInt27858;
+    public int fieldInt27859;
+    public int fieldInt27860;
+    public int fieldInt27861;
+    public int fieldInt27862;
+    public int fieldInt27863;
+    public int fieldInt27864;
+    public int fieldInt27865;
+    public int fieldInt27866;
+    public int fieldInt27867;
+    public int fieldInt27868;
+    public int fieldInt27869;
+    public int fieldInt27870;
+    public int fieldInt27871;
+    public int fieldInt27872;
+    public int fieldInt27873;
+    public int fieldInt27874;
+    public int fieldInt27875;
+    public int fieldInt27876;
+    public int fieldInt27877;
+    public int fieldInt27878;
+    public int fieldInt27879;
+    public int fieldInt27880;
+    public int fieldInt27881;
+    public int fieldInt27882;
+    public int fieldInt27883;
+    public int fieldInt27884;
+    public int fieldInt27885;
+    public int fieldInt27886;
+    public int fieldInt27887;
+    public int fieldInt27888;
+    public int fieldInt27889;
+    public int fieldInt27890;
+    public int fieldInt27891;
+    public int fieldInt27892;
+    public int fieldInt27893;
+    public int fieldInt27894;
+    public int fieldInt27895;
+    public int fieldInt27896;
+    public int fieldInt27897;
+    public int fieldInt27898;
+    public int fieldInt27899;
+    public int fieldInt27900;
+    public int fieldInt27901;
+    public int fieldInt27902;
+    public int fieldInt27903;
+    public int fieldInt27904;
+    public int fieldInt27905;
+    public int fieldInt27906;
+    public int fieldInt27907;
+    public int fieldInt27908;
+    public int fieldInt27909;
+    public int fieldInt27910;
+    public int fieldInt27911;
+    public int fieldInt27912;
+    public int fieldInt27913;
+    public int fieldInt27914;
+    public int fieldInt27915;
+    public int fieldInt27916;
+    public int fieldInt27917;
+    public int fieldInt27918;
+    public int fieldInt27919;
+    public int fieldInt27920;
+    public int fieldInt27921;
+    public int fieldInt27922;
+    public int fieldInt27923;
+    public int fieldInt27924;
+    public int fieldInt27925;
+    public int fieldInt27926;
+    public int fieldInt27927;
+    public int fieldInt27928;
+    public int fieldInt27929;
+    public int fieldInt27930;
+    public int fieldInt27931;
+    public int fieldInt27932;
+    public int fieldInt27933;
+    public int fieldInt27934;
+    public int fieldInt27935;
+    public int fieldInt27936;
+    public int fieldInt27937;
+    public int fieldInt27938;
+    public int fieldInt27939;
+    public int fieldInt27940;
+    public int fieldInt27941;
+    public int fieldInt27942;
+    public int fieldInt27943;
+    public int fieldInt27944;
+    public int fieldInt27945;
+    public int fieldInt27946;
+    public int fieldInt27947;
+    public int fieldInt27948;
+    public int fieldInt27949;
+    public int fieldInt27950;
+    public int fieldInt27951;
+    public int fieldInt27952;
+    public int fieldInt27953;
+    public int fieldInt27954;
+    public int fieldInt27955;
+    public int fieldInt27956;
+    public int fieldInt27957;
+    public int fieldInt27958;
+    public int fieldInt27959;
+    public int fieldInt27960;
+    public int fieldInt27961;
+    public int fieldInt27962;
+    public int fieldInt27963;
+    public int fieldInt27964;
+    public int fieldInt27965;
+    public int fieldInt27966;
+    public int fieldInt27967;
+    public int fieldInt27968;
+    public int fieldInt27969;
+    public int fieldInt27970;
+    public int fieldInt27971;
+    public int fieldInt27972;
+    public int fieldInt27973;
+    public int fieldInt27974;
+    public int fieldInt27975;
+    public int fieldInt27976;
+    public int fieldInt27977;
+    public int fieldInt27978;
+    public int fieldInt27979;
+    public int fieldInt27980;
+    public int fieldInt27981;
+    public int fieldInt27982;
+    public int fieldInt27983;
+    public int fieldInt27984;
+    public int fieldInt27985;
+    public int fieldInt27986;
+    public int fieldInt27987;
+    public int fieldInt27988;
+    public int fieldInt27989;
+    public int fieldInt27990;
+    public int fieldInt27991;
+    public int fieldInt27992;
+    public int fieldInt27993;
+    public int fieldInt27994;
+    public int fieldInt27995;
+    public int fieldInt27996;
+    public int fieldInt27997;
+    public int fieldInt27998;
+    public int fieldInt27999;
+    public int fieldInt28000;
+    public int fieldInt28001;
+    public int fieldInt28002;
+    public int fieldInt28003;
+    public int fieldInt28004;
+    public int fieldInt28005;
+    public int fieldInt28006;
+    public int fieldInt28007;
+    public int fieldInt28008;
+    public int fieldInt28009;
+    public int fieldInt28010;
+    public int fieldInt28011;
+    public int fieldInt28012;
+    public int fieldInt28013;
+    public int fieldInt28014;
+    public int fieldInt28015;
+    public int fieldInt28016;
+    public int fieldInt28017;
+    public int fieldInt28018;
+    public int fieldInt28019;
+    public int fieldInt28020;
+    public int fieldInt28021;
+    public int fieldInt28022;
+    public int fieldInt28023;
+    public int fieldInt28024;
+    public int fieldInt28025;
+    public int fieldInt28026;
+    public int fieldInt28027;
+    public int fieldInt28028;
+    public int fieldInt28029;
+    public int fieldInt28030;
+    public int fieldInt28031;
+    public int fieldInt28032;
+    public int fieldInt28033;
+    public int fieldInt28034;
+    public int fieldInt28035;
+    public int fieldInt28036;
+    public int fieldInt28037;
+    public int fieldInt28038;
+    public int fieldInt28039;
+    public int fieldInt28040;
+    public int fieldInt28041;
+    public int fieldInt28042;
+    public int fieldInt28043;
+    public int fieldInt28044;
+    public int fieldInt28045;
+    public int fieldInt28046;
+    public int fieldInt28047;
+    public int fieldInt28048;
+    public int fieldInt28049;
+    public int fieldInt28050;
+    public int fieldInt28051;
+    public int fieldInt28052;
+    public int fieldInt28053;
+    public int fieldInt28054;
+    public int fieldInt28055;
+    public int fieldInt28056;
+    public int fieldInt28057;
+    public int fieldInt28058;
+    public int fieldInt28059;
+    public int fieldInt28060;
+    public int fieldInt28061;
+    public int fieldInt28062;
+    public int fieldInt28063;
+    public int fieldInt28064;
+    public int fieldInt28065;
+    public int fieldInt28066;
+    public int fieldInt28067;
+    public int fieldInt28068;
+    public int fieldInt28069;
+    public int fieldInt28070;
+    public int fieldInt28071;
+    public int fieldInt28072;
+    public int fieldInt28073;
+    public int fieldInt28074;
+    public int fieldInt28075;
+    public int fieldInt28076;
+    public int fieldInt28077;
+    public int fieldInt28078;
+    public int fieldInt28079;
+    public int fieldInt28080;
+    public int fieldInt28081;
+    public int fieldInt28082;
+    public int fieldInt28083;
+    public int fieldInt28084;
+    public int fieldInt28085;
+    public int fieldInt28086;
+    public int fieldInt28087;
+    public int fieldInt28088;
+    public int fieldInt28089;
+    public int fieldInt28090;
+    public int fieldInt28091;
+    public int fieldInt28092;
+    public int fieldInt28093;
+    public int fieldInt28094;
+    public int fieldInt28095;
+    public int fieldInt28096;
+    public int fieldInt28097;
+    public int fieldInt28098;
+    public int fieldInt28099;
+    public int fieldInt28100;
+    public int fieldInt28101;
+    public int fieldInt28102;
+    public int fieldInt28103;
+    public int fieldInt28104;
+    public int fieldInt28105;
+    public int fieldInt28106;
+    public int fieldInt28107;
+    public int fieldInt28108;
+    public int fieldInt28109;
+    public int fieldInt28110;
+    public int fieldInt28111;
+    public int fieldInt28112;
+    public int fieldInt28113;
+    public int fieldInt28114;
+    public int fieldInt28115;
+    public int fieldInt28116;
+    public int fieldInt28117;
+    public int fieldInt28118;
+    public int fieldInt28119;
+    public int fieldInt28120;
+    public int fieldInt28121;
+    public int fieldInt28122;
+    public int fieldInt28123;
+    public int fieldInt28124;
+    public int fieldInt28125;
+    public int fieldInt28126;
+    public int fieldInt28127;
+    public int fieldInt28128;
+    public int fieldInt28129;
+    public int fieldInt28130;
+    public int fieldInt28131;
+    public int fieldInt28132;
+    public int fieldInt28133;
+    public int fieldInt28134;
+    public int fieldInt28135;
+    public int fieldInt28136;
+    public int fieldInt28137;
+    public int fieldInt28138;
+    public int fieldInt28139;
+    public int fieldInt28140;
+    public int fieldInt28141;
+    public int fieldInt28142;
+    public int fieldInt28143;
+    public int fieldInt28144;
+    public int fieldInt28145;
+    public int fieldInt28146;
+    public int fieldInt28147;
+    public int fieldInt28148;
+    public int fieldInt28149;
+    public int fieldInt28150;
+    public int fieldInt28151;
+    public int fieldInt28152;
+    public int fieldInt28153;
+    public int fieldInt28154;
+    public int fieldInt28155;
+    public int fieldInt28156;
+    public int fieldInt28157;
+    public int fieldInt28158;
+    public int fieldInt28159;
+    public int fieldInt28160;
+    public int fieldInt28161;
+    public int fieldInt28162;
+    public int fieldInt28163;
+    public int fieldInt28164;
+    public int fieldInt28165;
+    public int fieldInt28166;
+    public int fieldInt28167;
+    public int fieldInt28168;
+    public int fieldInt28169;
+    public int fieldInt28170;
+    public int fieldInt28171;
+    public int fieldInt28172;
+    public int fieldInt28173;
+    public int fieldInt28174;
+    public int fieldInt28175;
+    public int fieldInt28176;
+    public int fieldInt28177;
+    public int fieldInt28178;
+    public int fieldInt28179;
+    public int fieldInt28180;
+    public int fieldInt28181;
+    public int fieldInt28182;
+    public int fieldInt28183;
+    public int fieldInt28184;
+    public int fieldInt28185;
+    public int fieldInt28186;
+    public int fieldInt28187;
+    public int fieldInt28188;
+    public int fieldInt28189;
+    public int fieldInt28190;
+    public int fieldInt28191;
+    public int fieldInt28192;
+    public int fieldInt28193;
+    public int fieldInt28194;
+    public int fieldInt28195;
+    public int fieldInt28196;
+    public int fieldInt28197;
+    public int fieldInt28198;
+    public int fieldInt28199;
+    public int fieldInt28200;
+    public int fieldInt28201;
+    public int fieldInt28202;
+    public int fieldInt28203;
+    public int fieldInt28204;
+    public int fieldInt28205;
+    public int fieldInt28206;
+    public int fieldInt28207;
+    public int fieldInt28208;
+    public int fieldInt28209;
+    public int fieldInt28210;
+    public int fieldInt28211;
+    public int fieldInt28212;
+    public int fieldInt28213;
+    public int fieldInt28214;
+    public int fieldInt28215;
+    public int fieldInt28216;
+    public int fieldInt28217;
+    public int fieldInt28218;
+    public int fieldInt28219;
+    public int fieldInt28220;
+    public int fieldInt28221;
+    public int fieldInt28222;
+    public int fieldInt28223;
+    public int fieldInt28224;
+    public int fieldInt28225;
+    public int fieldInt28226;
+    public int fieldInt28227;
+    public int fieldInt28228;
+    public int fieldInt28229;
+    public int fieldInt28230;
+    public int fieldInt28231;
+    public int fieldInt28232;
+    public int fieldInt28233;
+    public int fieldInt28234;
+    public int fieldInt28235;
+    public int fieldInt28236;
+    public int fieldInt28237;
+    public int fieldInt28238;
+    public int fieldInt28239;
+    public int fieldInt28240;
+    public int fieldInt28241;
+    public int fieldInt28242;
+    public int fieldInt28243;
+    public int fieldInt28244;
+    public int fieldInt28245;
+    public int fieldInt28246;
+    public int fieldInt28247;
+    public int fieldInt28248;
+    public int fieldInt28249;
+    public int fieldInt28250;
+    public int fieldInt28251;
+    public int fieldInt28252;
+    public int fieldInt28253;
+    public int fieldInt28254;
+    public int fieldInt28255;
+    public int fieldInt28256;
+    public int fieldInt28257;
+    public int fieldInt28258;
+    public int fieldInt28259;
+    public int fieldInt28260;
+    public int fieldInt28261;
+    public int fieldInt28262;
+    public int fieldInt28263;
+    public int fieldInt28264;
+    public int fieldInt28265;
+    public int fieldInt28266;
+    public int fieldInt28267;
+    public int fieldInt28268;
+    public int fieldInt28269;
+    public int fieldInt28270;
+    public int fieldInt28271;
+    public int fieldInt28272;
+    public int fieldInt28273;
+    public int fieldInt28274;
+    public int fieldInt28275;
+    public int fieldInt28276;
+    public int fieldInt28277;
+    public int fieldInt28278;
+    public int fieldInt28279;
+    public int fieldInt28280;
+    public int fieldInt28281;
+    public int fieldInt28282;
+    public int fieldInt28283;
+    public int fieldInt28284;
+    public int fieldInt28285;
+    public int fieldInt28286;
+    public int fieldInt28287;
+    public int fieldInt28288;
+    public int fieldInt28289;
+    public int fieldInt28290;
+    public int fieldInt28291;
+    public int fieldInt28292;
+    public int fieldInt28293;
+    public int fieldInt28294;
+    public int fieldInt28295;
+    public int fieldInt28296;
+    public int fieldInt28297;
+    public int fieldInt28298;
+    public int fieldInt28299;
+    public int fieldInt28300;
+    public int fieldInt28301;
+    public int fieldInt28302;
+    public int fieldInt28303;
+    public int fieldInt28304;
+    public int fieldInt28305;
+    public int fieldInt28306;
+    public int fieldInt28307;
+    public int fieldInt28308;
+    public int fieldInt28309;
+    public int fieldInt28310;
+    public int fieldInt28311;
+    public int fieldInt28312;
+    public int fieldInt28313;
+    public int fieldInt28314;
+    public int fieldInt28315;
+    public int fieldInt28316;
+    public int fieldInt28317;
+    public int fieldInt28318;
+    public int fieldInt28319;
+    public int fieldInt28320;
+    public int fieldInt28321;
+    public int fieldInt28322;
+    public int fieldInt28323;
+    public int fieldInt28324;
+    public int fieldInt28325;
+    public int fieldInt28326;
+    public int fieldInt28327;
+    public int fieldInt28328;
+    public int fieldInt28329;
+    public int fieldInt28330;
+    public int fieldInt28331;
+    public int fieldInt28332;
+    public int fieldInt28333;
+    public int fieldInt28334;
+    public int fieldInt28335;
+    public int fieldInt28336;
+    public int fieldInt28337;
+    public int fieldInt28338;
+    public int fieldInt28339;
+    public int fieldInt28340;
+    public int fieldInt28341;
+    public int fieldInt28342;
+    public int fieldInt28343;
+    public int fieldInt28344;
+    public int fieldInt28345;
+    public int fieldInt28346;
+    public int fieldInt28347;
+    public int fieldInt28348;
+    public int fieldInt28349;
+    public int fieldInt28350;
+    public int fieldInt28351;
+    public int fieldInt28352;
+    public int fieldInt28353;
+    public int fieldInt28354;
+    public int fieldInt28355;
+    public int fieldInt28356;
+    public int fieldInt28357;
+    public int fieldInt28358;
+    public int fieldInt28359;
+    public int fieldInt28360;
+    public int fieldInt28361;
+    public int fieldInt28362;
+    public int fieldInt28363;
+    public int fieldInt28364;
+    public int fieldInt28365;
+    public int fieldInt28366;
+    public int fieldInt28367;
+    public int fieldInt28368;
+    public int fieldInt28369;
+    public int fieldInt28370;
+    public int fieldInt28371;
+    public int fieldInt28372;
+    public int fieldInt28373;
+    public int fieldInt28374;
+    public int fieldInt28375;
+    public int fieldInt28376;
+    public int fieldInt28377;
+    public int fieldInt28378;
+    public int fieldInt28379;
+    public int fieldInt28380;
+    public int fieldInt28381;
+    public int fieldInt28382;
+    public int fieldInt28383;
+    public int fieldInt28384;
+    public int fieldInt28385;
+    public int fieldInt28386;
+    public int fieldInt28387;
+    public int fieldInt28388;
+    public int fieldInt28389;
+    public int fieldInt28390;
+    public int fieldInt28391;
+    public int fieldInt28392;
+    public int fieldInt28393;
+    public int fieldInt28394;
+    public int fieldInt28395;
+    public int fieldInt28396;
+    public int fieldInt28397;
+    public int fieldInt28398;
+    public int fieldInt28399;
+    public int fieldInt28400;
+    public int fieldInt28401;
+    public int fieldInt28402;
+    public int fieldInt28403;
+    public int fieldInt28404;
+    public int fieldInt28405;
+    public int fieldInt28406;
+    public int fieldInt28407;
+    public int fieldInt28408;
+    public int fieldInt28409;
+    public int fieldInt28410;
+    public int fieldInt28411;
+    public int fieldInt28412;
+    public int fieldInt28413;
+    public int fieldInt28414;
+    public int fieldInt28415;
+    public int fieldInt28416;
+    public int fieldInt28417;
+    public int fieldInt28418;
+    public int fieldInt28419;
+    public int fieldInt28420;
+    public int fieldInt28421;
+    public int fieldInt28422;
+    public int fieldInt28423;
+    public int fieldInt28424;
+    public int fieldInt28425;
+    public int fieldInt28426;
+    public int fieldInt28427;
+    public int fieldInt28428;
+    public int fieldInt28429;
+    public int fieldInt28430;
+    public int fieldInt28431;
+    public int fieldInt28432;
+    public int fieldInt28433;
+    public int fieldInt28434;
+    public int fieldInt28435;
+    public int fieldInt28436;
+    public int fieldInt28437;
+    public int fieldInt28438;
+    public int fieldInt28439;
+    public int fieldInt28440;
+    public int fieldInt28441;
+    public int fieldInt28442;
+    public int fieldInt28443;
+    public int fieldInt28444;
+    public int fieldInt28445;
+    public int fieldInt28446;
+    public int fieldInt28447;
+    public int fieldInt28448;
+    public int fieldInt28449;
+    public int fieldInt28450;
+    public int fieldInt28451;
+    public int fieldInt28452;
+    public int fieldInt28453;
+    public int fieldInt28454;
+    public int fieldInt28455;
+    public int fieldInt28456;
+    public int fieldInt28457;
+    public int fieldInt28458;
+    public int fieldInt28459;
+    public int fieldInt28460;
+    public int fieldInt28461;
+    public int fieldInt28462;
+    public int fieldInt28463;
+    public int fieldInt28464;
+    public int fieldInt28465;
+    public int fieldInt28466;
+    public int fieldInt28467;
+    public int fieldInt28468;
+    public int fieldInt28469;
+    public int fieldInt28470;
+    public int fieldInt28471;
+    public int fieldInt28472;
+    public int fieldInt28473;
+    public int fieldInt28474;
+    public int fieldInt28475;
+    public int fieldInt28476;
+    public int fieldInt28477;
+    public int fieldInt28478;
+    public int fieldInt28479;
+    public int fieldInt28480;
+    public int fieldInt28481;
+    public int fieldInt28482;
+    public int fieldInt28483;
+    public int fieldInt28484;
+    public int fieldInt28485;
+    public int fieldInt28486;
+    public int fieldInt28487;
+    public int fieldInt28488;
+    public int fieldInt28489;
+    public int fieldInt28490;
+    public int fieldInt28491;
+    public int fieldInt28492;
+    public int fieldInt28493;
+    public int fieldInt28494;
+    public int fieldInt28495;
+    public int fieldInt28496;
+    public int fieldInt28497;
+    public int fieldInt28498;
+    public int fieldInt28499;
+    public int fieldInt28500;
+    public int fieldInt28501;
+    public int fieldInt28502;
+    public int fieldInt28503;
+    public int fieldInt28504;
+    public int fieldInt28505;
+    public int fieldInt28506;
+    public int fieldInt28507;
+    public int fieldInt28508;
+    public int fieldInt28509;
+    public int fieldInt28510;
+    public int fieldInt28511;
+    public int fieldInt28512;
+    public int fieldInt28513;
+    public int fieldInt28514;
+    public int fieldInt28515;
+    public int fieldInt28516;
+    public int fieldInt28517;
+    public int fieldInt28518;
+    public int fieldInt28519;
+    public int fieldInt28520;
+    public int fieldInt28521;
+    public int fieldInt28522;
+    public int fieldInt28523;
+    public int fieldInt28524;
+    public int fieldInt28525;
+    public int fieldInt28526;
+    public int fieldInt28527;
+    public int fieldInt28528;
+    public int fieldInt28529;
+    public int fieldInt28530;
+    public int fieldInt28531;
+    public int fieldInt28532;
+    public int fieldInt28533;
+    public int fieldInt28534;
+    public int fieldInt28535;
+    public int fieldInt28536;
+    public int fieldInt28537;
+    public int fieldInt28538;
+    public int fieldInt28539;
+    public int fieldInt28540;
+    public int fieldInt28541;
+    public int fieldInt28542;
+    public int fieldInt28543;
+    public int fieldInt28544;
+    public int fieldInt28545;
+    public int fieldInt28546;
+    public int fieldInt28547;
+    public int fieldInt28548;
+    public int fieldInt28549;
+    public int fieldInt28550;
+    public int fieldInt28551;
+    public int fieldInt28552;
+    public int fieldInt28553;
+    public int fieldInt28554;
+    public int fieldInt28555;
+    public int fieldInt28556;
+    public int fieldInt28557;
+    public int fieldInt28558;
+    public int fieldInt28559;
+    public int fieldInt28560;
+    public int fieldInt28561;
+    public int fieldInt28562;
+    public int fieldInt28563;
+    public int fieldInt28564;
+    public int fieldInt28565;
+    public int fieldInt28566;
+    public int fieldInt28567;
+    public int fieldInt28568;
+    public int fieldInt28569;
+    public int fieldInt28570;
+    public int fieldInt28571;
+    public int fieldInt28572;
+    public int fieldInt28573;
+    public int fieldInt28574;
+    public int fieldInt28575;
+    public int fieldInt28576;
+    public int fieldInt28577;
+    public int fieldInt28578;
+    public int fieldInt28579;
+    public int fieldInt28580;
+    public int fieldInt28581;
+    public int fieldInt28582;
+    public int fieldInt28583;
+    public int fieldInt28584;
+    public int fieldInt28585;
+    public int fieldInt28586;
+    public int fieldInt28587;
+    public int fieldInt28588;
+    public int fieldInt28589;
+    public int fieldInt28590;
+    public int fieldInt28591;
+    public int fieldInt28592;
+    public int fieldInt28593;
+    public int fieldInt28594;
+    public int fieldInt28595;
+    public int fieldInt28596;
+    public int fieldInt28597;
+    public int fieldInt28598;
+    public int fieldInt28599;
+    public int fieldInt28600;
+    public int fieldInt28601;
+    public int fieldInt28602;
+    public int fieldInt28603;
+    public int fieldInt28604;
+    public int fieldInt28605;
+    public int fieldInt28606;
+    public int fieldInt28607;
+    public int fieldInt28608;
+    public int fieldInt28609;
+    public int fieldInt28610;
+    public int fieldInt28611;
+    public int fieldInt28612;
+    public int fieldInt28613;
+    public int fieldInt28614;
+    public int fieldInt28615;
+    public int fieldInt28616;
+    public int fieldInt28617;
+    public int fieldInt28618;
+    public int fieldInt28619;
+    public int fieldInt28620;
+    public int fieldInt28621;
+    public int fieldInt28622;
+    public int fieldInt28623;
+    public int fieldInt28624;
+    public int fieldInt28625;
+    public int fieldInt28626;
+    public int fieldInt28627;
+    public int fieldInt28628;
+    public int fieldInt28629;
+    public int fieldInt28630;
+    public int fieldInt28631;
+    public int fieldInt28632;
+    public int fieldInt28633;
+    public int fieldInt28634;
+    public int fieldInt28635;
+    public int fieldInt28636;
+    public int fieldInt28637;
+    public int fieldInt28638;
+    public int fieldInt28639;
+    public int fieldInt28640;
+    public int fieldInt28641;
+    public int fieldInt28642;
+    public int fieldInt28643;
+    public int fieldInt28644;
+    public int fieldInt28645;
+    public int fieldInt28646;
+    public int fieldInt28647;
+    public int fieldInt28648;
+    public int fieldInt28649;
+    public int fieldInt28650;
+    public int fieldInt28651;
+    public int fieldInt28652;
+    public int fieldInt28653;
+    public int fieldInt28654;
+    public int fieldInt28655;
+    public int fieldInt28656;
+    public int fieldInt28657;
+    public int fieldInt28658;
+    public int fieldInt28659;
+    public int fieldInt28660;
+    public int fieldInt28661;
+    public int fieldInt28662;
+    public int fieldInt28663;
+    public int fieldInt28664;
+    public int fieldInt28665;
+    public int fieldInt28666;
+    public int fieldInt28667;
+    public int fieldInt28668;
+    public int fieldInt28669;
+    public int fieldInt28670;
+    public int fieldInt28671;
+    public int fieldInt28672;
+    public int fieldInt28673;
+    public int fieldInt28674;
+    public int fieldInt28675;
+    public int fieldInt28676;
+    public int fieldInt28677;
+    public int fieldInt28678;
+    public int fieldInt28679;
+    public int fieldInt28680;
+    public int fieldInt28681;
+    public int fieldInt28682;
+    public int fieldInt28683;
+    public int fieldInt28684;
+    public int fieldInt28685;
+    public int fieldInt28686;
+    public int fieldInt28687;
+    public int fieldInt28688;
+    public int fieldInt28689;
+    public int fieldInt28690;
+    public int fieldInt28691;
+    public int fieldInt28692;
+    public int fieldInt28693;
+    public int fieldInt28694;
+    public int fieldInt28695;
+    public int fieldInt28696;
+    public int fieldInt28697;
+    public int fieldInt28698;
+    public int fieldInt28699;
+    public int fieldInt28700;
+    public int fieldInt28701;
+    public int fieldInt28702;
+    public int fieldInt28703;
+    public int fieldInt28704;
+    public int fieldInt28705;
+    public int fieldInt28706;
+    public int fieldInt28707;
+    public int fieldInt28708;
+    public int fieldInt28709;
+    public int fieldInt28710;
+    public int fieldInt28711;
+    public int fieldInt28712;
+    public int fieldInt28713;
+    public int fieldInt28714;
+    public int fieldInt28715;
+    public int fieldInt28716;
+    public int fieldInt28717;
+    public int fieldInt28718;
+    public int fieldInt28719;
+    public int fieldInt28720;
+    public int fieldInt28721;
+    public int fieldInt28722;
+    public int fieldInt28723;
+    public int fieldInt28724;
+    public int fieldInt28725;
+    public int fieldInt28726;
+    public int fieldInt28727;
+    public int fieldInt28728;
+    public int fieldInt28729;
+    public int fieldInt28730;
+    public int fieldInt28731;
+    public int fieldInt28732;
+    public int fieldInt28733;
+    public int fieldInt28734;
+    public int fieldInt28735;
+    public int fieldInt28736;
+    public int fieldInt28737;
+    public int fieldInt28738;
+    public int fieldInt28739;
+    public int fieldInt28740;
+    public int fieldInt28741;
+    public int fieldInt28742;
+    public int fieldInt28743;
+    public int fieldInt28744;
+    public int fieldInt28745;
+    public int fieldInt28746;
+    public int fieldInt28747;
+    public int fieldInt28748;
+    public int fieldInt28749;
+    public int fieldInt28750;
+    public int fieldInt28751;
+    public int fieldInt28752;
+    public int fieldInt28753;
+    public int fieldInt28754;
+    public int fieldInt28755;
+    public int fieldInt28756;
+    public int fieldInt28757;
+    public int fieldInt28758;
+    public int fieldInt28759;
+    public int fieldInt28760;
+    public int fieldInt28761;
+    public int fieldInt28762;
+    public int fieldInt28763;
+    public int fieldInt28764;
+    public int fieldInt28765;
+    public int fieldInt28766;
+    public int fieldInt28767;
+    public int fieldInt28768;
+    public int fieldInt28769;
+    public int fieldInt28770;
+    public int fieldInt28771;
+    public int fieldInt28772;
+    public int fieldInt28773;
+    public int fieldInt28774;
+    public int fieldInt28775;
+    public int fieldInt28776;
+    public int fieldInt28777;
+    public int fieldInt28778;
+    public int fieldInt28779;
+    public int fieldInt28780;
+    public int fieldInt28781;
+    public int fieldInt28782;
+    public int fieldInt28783;
+    public int fieldInt28784;
+    public int fieldInt28785;
+    public int fieldInt28786;
+    public int fieldInt28787;
+    public int fieldInt28788;
+    public int fieldInt28789;
+    public int fieldInt28790;
+    public int fieldInt28791;
+    public int fieldInt28792;
+    public int fieldInt28793;
+    public int fieldInt28794;
+    public int fieldInt28795;
+    public int fieldInt28796;
+    public int fieldInt28797;
+    public int fieldInt28798;
+    public int fieldInt28799;
+    public int fieldInt28800;
+    public int fieldInt28801;
+    public int fieldInt28802;
+    public int fieldInt28803;
+    public int fieldInt28804;
+    public int fieldInt28805;
+    public int fieldInt28806;
+    public int fieldInt28807;
+    public int fieldInt28808;
+    public int fieldInt28809;
+    public int fieldInt28810;
+    public int fieldInt28811;
+    public int fieldInt28812;
+    public int fieldInt28813;
+    public int fieldInt28814;
+    public int fieldInt28815;
+    public int fieldInt28816;
+    public int fieldInt28817;
+    public int fieldInt28818;
+    public int fieldInt28819;
+    public int fieldInt28820;
+    public int fieldInt28821;
+    public int fieldInt28822;
+    public int fieldInt28823;
+    public int fieldInt28824;
+    public int fieldInt28825;
+    public int fieldInt28826;
+    public int fieldInt28827;
+    public int fieldInt28828;
+    public int fieldInt28829;
+    public int fieldInt28830;
+    public int fieldInt28831;
+    public int fieldInt28832;
+    public int fieldInt28833;
+    public int fieldInt28834;
+    public int fieldInt28835;
+    public int fieldInt28836;
+    public int fieldInt28837;
+    public int fieldInt28838;
+    public int fieldInt28839;
+    public int fieldInt28840;
+    public int fieldInt28841;
+    public int fieldInt28842;
+    public int fieldInt28843;
+    public int fieldInt28844;
+    public int fieldInt28845;
+    public int fieldInt28846;
+    public int fieldInt28847;
+    public int fieldInt28848;
+    public int fieldInt28849;
+    public int fieldInt28850;
+    public int fieldInt28851;
+    public int fieldInt28852;
+    public int fieldInt28853;
+    public int fieldInt28854;
+    public int fieldInt28855;
+    public int fieldInt28856;
+    public int fieldInt28857;
+    public int fieldInt28858;
+    public int fieldInt28859;
+    public int fieldInt28860;
+    public int fieldInt28861;
+    public int fieldInt28862;
+    public int fieldInt28863;
+    public int fieldInt28864;
+    public int fieldInt28865;
+    public int fieldInt28866;
+    public int fieldInt28867;
+    public int fieldInt28868;
+    public int fieldInt28869;
+    public int fieldInt28870;
+    public int fieldInt28871;
+    public int fieldInt28872;
+    public int fieldInt28873;
+    public int fieldInt28874;
+    public int fieldInt28875;
+    public int fieldInt28876;
+    public int fieldInt28877;
+    public int fieldInt28878;
+    public int fieldInt28879;
+    public int fieldInt28880;
+    public int fieldInt28881;
+    public int fieldInt28882;
+    public int fieldInt28883;
+    public int fieldInt28884;
+    public int fieldInt28885;
+    public int fieldInt28886;
+    public int fieldInt28887;
+    public int fieldInt28888;
+    public int fieldInt28889;
+    public int fieldInt28890;
+    public int fieldInt28891;
+    public int fieldInt28892;
+    public int fieldInt28893;
+    public int fieldInt28894;
+    public int fieldInt28895;
+    public int fieldInt28896;
+    public int fieldInt28897;
+    public int fieldInt28898;
+    public int fieldInt28899;
+    public int fieldInt28900;
+    public int fieldInt28901;
+    public int fieldInt28902;
+    public int fieldInt28903;
+    public int fieldInt28904;
+    public int fieldInt28905;
+    public int fieldInt28906;
+    public int fieldInt28907;
+    public int fieldInt28908;
+    public int fieldInt28909;
+    public int fieldInt28910;
+    public int fieldInt28911;
+    public int fieldInt28912;
+    public int fieldInt28913;
+    public int fieldInt28914;
+    public int fieldInt28915;
+    public int fieldInt28916;
+    public int fieldInt28917;
+    public int fieldInt28918;
+    public int fieldInt28919;
+    public int fieldInt28920;
+    public int fieldInt28921;
+    public int fieldInt28922;
+    public int fieldInt28923;
+    public int fieldInt28924;
+    public int fieldInt28925;
+    public int fieldInt28926;
+    public int fieldInt28927;
+    public int fieldInt28928;
+    public int fieldInt28929;
+    public int fieldInt28930;
+    public int fieldInt28931;
+    public int fieldInt28932;
+    public int fieldInt28933;
+    public int fieldInt28934;
+    public int fieldInt28935;
+    public int fieldInt28936;
+    public int fieldInt28937;
+    public int fieldInt28938;
+    public int fieldInt28939;
+    public int fieldInt28940;
+    public int fieldInt28941;
+    public int fieldInt28942;
+    public int fieldInt28943;
+    public int fieldInt28944;
+    public int fieldInt28945;
+    public int fieldInt28946;
+    public int fieldInt28947;
+    public int fieldInt28948;
+    public int fieldInt28949;
+    public int fieldInt28950;
+    public int fieldInt28951;
+    public int fieldInt28952;
+    public int fieldInt28953;
+    public int fieldInt28954;
+    public int fieldInt28955;
+    public int fieldInt28956;
+    public int fieldInt28957;
+    public int fieldInt28958;
+    public int fieldInt28959;
+    public int fieldInt28960;
+    public int fieldInt28961;
+    public int fieldInt28962;
+    public int fieldInt28963;
+    public int fieldInt28964;
+    public int fieldInt28965;
+    public int fieldInt28966;
+    public int fieldInt28967;
+    public int fieldInt28968;
+    public int fieldInt28969;
+    public int fieldInt28970;
+    public int fieldInt28971;
+    public int fieldInt28972;
+    public int fieldInt28973;
+    public int fieldInt28974;
+    public int fieldInt28975;
+    public int fieldInt28976;
+    public int fieldInt28977;
+    public int fieldInt28978;
+    public int fieldInt28979;
+    public int fieldInt28980;
+    public int fieldInt28981;
+    public int fieldInt28982;
+    public int fieldInt28983;
+    public int fieldInt28984;
+    public int fieldInt28985;
+    public int fieldInt28986;
+    public int fieldInt28987;
+    public int fieldInt28988;
+    public int fieldInt28989;
+    public int fieldInt28990;
+    public int fieldInt28991;
+    public int fieldInt28992;
+    public int fieldInt28993;
+    public int fieldInt28994;
+    public int fieldInt28995;
+    public int fieldInt28996;
+    public int fieldInt28997;
+    public int fieldInt28998;
+    public int fieldInt28999;
+    public int fieldInt29000;
+    public int fieldInt29001;
+    public int fieldInt29002;
+    public int fieldInt29003;
+    public int fieldInt29004;
+    public int fieldInt29005;
+    public int fieldInt29006;
+    public int fieldInt29007;
+    public int fieldInt29008;
+    public int fieldInt29009;
+    public int fieldInt29010;
+    public int fieldInt29011;
+    public int fieldInt29012;
+    public int fieldInt29013;
+    public int fieldInt29014;
+    public int fieldInt29015;
+    public int fieldInt29016;
+    public int fieldInt29017;
+    public int fieldInt29018;
+    public int fieldInt29019;
+    public int fieldInt29020;
+    public int fieldInt29021;
+    public int fieldInt29022;
+    public int fieldInt29023;
+    public int fieldInt29024;
+    public int fieldInt29025;
+    public int fieldInt29026;
+    public int fieldInt29027;
+    public int fieldInt29028;
+    public int fieldInt29029;
+    public int fieldInt29030;
+    public int fieldInt29031;
+    public int fieldInt29032;
+    public int fieldInt29033;
+    public int fieldInt29034;
+    public int fieldInt29035;
+    public int fieldInt29036;
+    public int fieldInt29037;
+    public int fieldInt29038;
+    public int fieldInt29039;
+    public int fieldInt29040;
+    public int fieldInt29041;
+    public int fieldInt29042;
+    public int fieldInt29043;
+    public int fieldInt29044;
+    public int fieldInt29045;
+    public int fieldInt29046;
+    public int fieldInt29047;
+    public int fieldInt29048;
+    public int fieldInt29049;
+    public int fieldInt29050;
+    public int fieldInt29051;
+    public int fieldInt29052;
+    public int fieldInt29053;
+    public int fieldInt29054;
+    public int fieldInt29055;
+    public int fieldInt29056;
+    public int fieldInt29057;
+    public int fieldInt29058;
+    public int fieldInt29059;
+    public int fieldInt29060;
+    public int fieldInt29061;
+    public int fieldInt29062;
+    public int fieldInt29063;
+    public int fieldInt29064;
+    public int fieldInt29065;
+    public int fieldInt29066;
+    public int fieldInt29067;
+    public int fieldInt29068;
+    public int fieldInt29069;
+    public int fieldInt29070;
+    public int fieldInt29071;
+    public int fieldInt29072;
+    public int fieldInt29073;
+    public int fieldInt29074;
+    public int fieldInt29075;
+    public int fieldInt29076;
+    public int fieldInt29077;
+    public int fieldInt29078;
+    public int fieldInt29079;
+    public int fieldInt29080;
+    public int fieldInt29081;
+    public int fieldInt29082;
+    public int fieldInt29083;
+    public int fieldInt29084;
+    public int fieldInt29085;
+    public int fieldInt29086;
+    public int fieldInt29087;
+    public int fieldInt29088;
+    public int fieldInt29089;
+    public int fieldInt29090;
+    public int fieldInt29091;
+    public int fieldInt29092;
+    public int fieldInt29093;
+    public int fieldInt29094;
+    public int fieldInt29095;
+    public int fieldInt29096;
+    public int fieldInt29097;
+    public int fieldInt29098;
+    public int fieldInt29099;
+    public int fieldInt29100;
+    public int fieldInt29101;
+    public int fieldInt29102;
+    public int fieldInt29103;
+    public int fieldInt29104;
+    public int fieldInt29105;
+    public int fieldInt29106;
+    public int fieldInt29107;
+    public int fieldInt29108;
+    public int fieldInt29109;
+    public int fieldInt29110;
+    public int fieldInt29111;
+    public int fieldInt29112;
+    public int fieldInt29113;
+    public int fieldInt29114;
+    public int fieldInt29115;
+    public int fieldInt29116;
+    public int fieldInt29117;
+    public int fieldInt29118;
+    public int fieldInt29119;
+    public int fieldInt29120;
+    public int fieldInt29121;
+    public int fieldInt29122;
+    public int fieldInt29123;
+    public int fieldInt29124;
+    public int fieldInt29125;
+    public int fieldInt29126;
+    public int fieldInt29127;
+    public int fieldInt29128;
+    public int fieldInt29129;
+    public int fieldInt29130;
+    public int fieldInt29131;
+    public int fieldInt29132;
+    public int fieldInt29133;
+    public int fieldInt29134;
+    public int fieldInt29135;
+    public int fieldInt29136;
+    public int fieldInt29137;
+    public int fieldInt29138;
+    public int fieldInt29139;
+    public int fieldInt29140;
+    public int fieldInt29141;
+    public int fieldInt29142;
+    public int fieldInt29143;
+    public int fieldInt29144;
+    public int fieldInt29145;
+    public int fieldInt29146;
+    public int fieldInt29147;
+    public int fieldInt29148;
+    public int fieldInt29149;
+    public int fieldInt29150;
+    public int fieldInt29151;
+    public int fieldInt29152;
+    public int fieldInt29153;
+    public int fieldInt29154;
+    public int fieldInt29155;
+    public int fieldInt29156;
+    public int fieldInt29157;
+    public int fieldInt29158;
+    public int fieldInt29159;
+    public int fieldInt29160;
+    public int fieldInt29161;
+    public int fieldInt29162;
+    public int fieldInt29163;
+    public int fieldInt29164;
+    public int fieldInt29165;
+    public int fieldInt29166;
+    public int fieldInt29167;
+    public int fieldInt29168;
+    public int fieldInt29169;
+    public int fieldInt29170;
+    public int fieldInt29171;
+    public int fieldInt29172;
+    public int fieldInt29173;
+    public int fieldInt29174;
+    public int fieldInt29175;
+    public int fieldInt29176;
+    public int fieldInt29177;
+    public int fieldInt29178;
+    public int fieldInt29179;
+    public int fieldInt29180;
+    public int fieldInt29181;
+    public int fieldInt29182;
+    public int fieldInt29183;
+    public int fieldInt29184;
+    public int fieldInt29185;
+    public int fieldInt29186;
+    public int fieldInt29187;
+    public int fieldInt29188;
+    public int fieldInt29189;
+    public int fieldInt29190;
+    public int fieldInt29191;
+    public int fieldInt29192;
+    public int fieldInt29193;
+    public int fieldInt29194;
+    public int fieldInt29195;
+    public int fieldInt29196;
+    public int fieldInt29197;
+    public int fieldInt29198;
+    public int fieldInt29199;
+    public int fieldInt29200;
+    public int fieldInt29201;
+    public int fieldInt29202;
+    public int fieldInt29203;
+    public int fieldInt29204;
+    public int fieldInt29205;
+    public int fieldInt29206;
+    public int fieldInt29207;
+    public int fieldInt29208;
+    public int fieldInt29209;
+    public int fieldInt29210;
+    public int fieldInt29211;
+    public int fieldInt29212;
+    public int fieldInt29213;
+    public int fieldInt29214;
+    public int fieldInt29215;
+    public int fieldInt29216;
+    public int fieldInt29217;
+    public int fieldInt29218;
+    public int fieldInt29219;
+    public int fieldInt29220;
+    public int fieldInt29221;
+    public int fieldInt29222;
+    public int fieldInt29223;
+    public int fieldInt29224;
+    public int fieldInt29225;
+    public int fieldInt29226;
+    public int fieldInt29227;
+    public int fieldInt29228;
+    public int fieldInt29229;
+    public int fieldInt29230;
+    public int fieldInt29231;
+    public int fieldInt29232;
+    public int fieldInt29233;
+    public int fieldInt29234;
+    public int fieldInt29235;
+    public int fieldInt29236;
+    public int fieldInt29237;
+    public int fieldInt29238;
+    public int fieldInt29239;
+    public int fieldInt29240;
+    public int fieldInt29241;
+    public int fieldInt29242;
+    public int fieldInt29243;
+    public int fieldInt29244;
+    public int fieldInt29245;
+    public int fieldInt29246;
+    public int fieldInt29247;
+    public int fieldInt29248;
+    public int fieldInt29249;
+    public int fieldInt29250;
+    public int fieldInt29251;
+    public int fieldInt29252;
+    public int fieldInt29253;
+    public int fieldInt29254;
+    public int fieldInt29255;
+    public int fieldInt29256;
+    public int fieldInt29257;
+    public int fieldInt29258;
+    public int fieldInt29259;
+    public int fieldInt29260;
+    public int fieldInt29261;
+    public int fieldInt29262;
+    public int fieldInt29263;
+    public int fieldInt29264;
+    public int fieldInt29265;
+    public int fieldInt29266;
+    public int fieldInt29267;
+    public int fieldInt29268;
+    public int fieldInt29269;
+    public int fieldInt29270;
+    public int fieldInt29271;
+    public int fieldInt29272;
+    public int fieldInt29273;
+    public int fieldInt29274;
+    public int fieldInt29275;
+    public int fieldInt29276;
+    public int fieldInt29277;
+    public int fieldInt29278;
+    public int fieldInt29279;
+    public int fieldInt29280;
+    public int fieldInt29281;
+    public int fieldInt29282;
+    public int fieldInt29283;
+    public int fieldInt29284;
+    public int fieldInt29285;
+    public int fieldInt29286;
+    public int fieldInt29287;
+    public int fieldInt29288;
+    public int fieldInt29289;
+    public int fieldInt29290;
+    public int fieldInt29291;
+    public int fieldInt29292;
+    public int fieldInt29293;
+    public int fieldInt29294;
+    public int fieldInt29295;
+    public int fieldInt29296;
+    public int fieldInt29297;
+    public int fieldInt29298;
+    public int fieldInt29299;
+    public int fieldInt29300;
+    public int fieldInt29301;
+    public int fieldInt29302;
+    public int fieldInt29303;
+    public int fieldInt29304;
+    public int fieldInt29305;
+    public int fieldInt29306;
+    public int fieldInt29307;
+    public int fieldInt29308;
+    public int fieldInt29309;
+    public int fieldInt29310;
+    public int fieldInt29311;
+    public int fieldInt29312;
+    public int fieldInt29313;
+    public int fieldInt29314;
+    public int fieldInt29315;
+    public int fieldInt29316;
+    public int fieldInt29317;
+    public int fieldInt29318;
+    public int fieldInt29319;
+    public int fieldInt29320;
+    public int fieldInt29321;
+    public int fieldInt29322;
+    public int fieldInt29323;
+    public int fieldInt29324;
+    public int fieldInt29325;
+    public int fieldInt29326;
+    public int fieldInt29327;
+    public int fieldInt29328;
+    public int fieldInt29329;
+    public int fieldInt29330;
+    public int fieldInt29331;
+    public int fieldInt29332;
+    public int fieldInt29333;
+    public int fieldInt29334;
+    public int fieldInt29335;
+    public int fieldInt29336;
+    public int fieldInt29337;
+    public int fieldInt29338;
+    public int fieldInt29339;
+    public int fieldInt29340;
+    public int fieldInt29341;
+    public int fieldInt29342;
+    public int fieldInt29343;
+    public int fieldInt29344;
+    public int fieldInt29345;
+    public int fieldInt29346;
+    public int fieldInt29347;
+    public int fieldInt29348;
+    public int fieldInt29349;
+    public int fieldInt29350;
+    public int fieldInt29351;
+    public int fieldInt29352;
+    public int fieldInt29353;
+    public int fieldInt29354;
+    public int fieldInt29355;
+    public int fieldInt29356;
+    public int fieldInt29357;
+    public int fieldInt29358;
+    public int fieldInt29359;
+    public int fieldInt29360;
+    public int fieldInt29361;
+    public int fieldInt29362;
+    public int fieldInt29363;
+    public int fieldInt29364;
+    public int fieldInt29365;
+    public int fieldInt29366;
+    public int fieldInt29367;
+    public int fieldInt29368;
+    public int fieldInt29369;
+    public int fieldInt29370;
+    public int fieldInt29371;
+    public int fieldInt29372;
+    public int fieldInt29373;
+    public int fieldInt29374;
+    public int fieldInt29375;
+    public int fieldInt29376;
+    public int fieldInt29377;
+    public int fieldInt29378;
+    public int fieldInt29379;
+    public int fieldInt29380;
+    public int fieldInt29381;
+    public int fieldInt29382;
+    public int fieldInt29383;
+    public int fieldInt29384;
+    public int fieldInt29385;
+    public int fieldInt29386;
+    public int fieldInt29387;
+    public int fieldInt29388;
+    public int fieldInt29389;
+    public int fieldInt29390;
+    public int fieldInt29391;
+    public int fieldInt29392;
+    public int fieldInt29393;
+    public int fieldInt29394;
+    public int fieldInt29395;
+    public int fieldInt29396;
+    public int fieldInt29397;
+    public int fieldInt29398;
+    public int fieldInt29399;
+    public int fieldInt29400;
+    public int fieldInt29401;
+    public int fieldInt29402;
+    public int fieldInt29403;
+    public int fieldInt29404;
+    public int fieldInt29405;
+    public int fieldInt29406;
+    public int fieldInt29407;
+    public int fieldInt29408;
+    public int fieldInt29409;
+    public int fieldInt29410;
+    public int fieldInt29411;
+    public int fieldInt29412;
+    public int fieldInt29413;
+    public int fieldInt29414;
+    public int fieldInt29415;
+    public int fieldInt29416;
+    public int fieldInt29417;
+    public int fieldInt29418;
+    public int fieldInt29419;
+    public int fieldInt29420;
+    public int fieldInt29421;
+    public int fieldInt29422;
+    public int fieldInt29423;
+    public int fieldInt29424;
+    public int fieldInt29425;
+    public int fieldInt29426;
+    public int fieldInt29427;
+    public int fieldInt29428;
+    public int fieldInt29429;
+    public int fieldInt29430;
+    public int fieldInt29431;
+    public int fieldInt29432;
+    public int fieldInt29433;
+    public int fieldInt29434;
+    public int fieldInt29435;
+    public int fieldInt29436;
+    public int fieldInt29437;
+    public int fieldInt29438;
+    public int fieldInt29439;
+    public int fieldInt29440;
+    public int fieldInt29441;
+    public int fieldInt29442;
+    public int fieldInt29443;
+    public int fieldInt29444;
+    public int fieldInt29445;
+    public int fieldInt29446;
+    public int fieldInt29447;
+    public int fieldInt29448;
+    public int fieldInt29449;
+    public int fieldInt29450;
+    public int fieldInt29451;
+    public int fieldInt29452;
+    public int fieldInt29453;
+    public int fieldInt29454;
+    public int fieldInt29455;
+    public int fieldInt29456;
+    public int fieldInt29457;
+    public int fieldInt29458;
+    public int fieldInt29459;
+    public int fieldInt29460;
+    public int fieldInt29461;
+    public int fieldInt29462;
+    public int fieldInt29463;
+    public int fieldInt29464;
+    public int fieldInt29465;
+    public int fieldInt29466;
+    public int fieldInt29467;
+    public int fieldInt29468;
+    public int fieldInt29469;
+    public int fieldInt29470;
+    public int fieldInt29471;
+    public int fieldInt29472;
+    public int fieldInt29473;
+    public int fieldInt29474;
+    public int fieldInt29475;
+    public int fieldInt29476;
+    public int fieldInt29477;
+    public int fieldInt29478;
+    public int fieldInt29479;
+    public int fieldInt29480;
+    public int fieldInt29481;
+    public int fieldInt29482;
+    public int fieldInt29483;
+    public int fieldInt29484;
+    public int fieldInt29485;
+    public int fieldInt29486;
+    public int fieldInt29487;
+    public int fieldInt29488;
+    public int fieldInt29489;
+    public int fieldInt29490;
+    public int fieldInt29491;
+    public int fieldInt29492;
+    public int fieldInt29493;
+    public int fieldInt29494;
+    public int fieldInt29495;
+    public int fieldInt29496;
+    public int fieldInt29497;
+    public int fieldInt29498;
+    public int fieldInt29499;
+    public int fieldInt29500;
+    public int fieldInt29501;
+    public int fieldInt29502;
+    public int fieldInt29503;
+    public int fieldInt29504;
+    public int fieldInt29505;
+    public int fieldInt29506;
+    public int fieldInt29507;
+    public int fieldInt29508;
+    public int fieldInt29509;
+    public int fieldInt29510;
+    public int fieldInt29511;
+    public int fieldInt29512;
+    public int fieldInt29513;
+    public int fieldInt29514;
+    public int fieldInt29515;
+    public int fieldInt29516;
+    public int fieldInt29517;
+    public int fieldInt29518;
+    public int fieldInt29519;
+    public int fieldInt29520;
+    public int fieldInt29521;
+    public int fieldInt29522;
+    public int fieldInt29523;
+    public int fieldInt29524;
+    public int fieldInt29525;
+    public int fieldInt29526;
+    public int fieldInt29527;
+    public int fieldInt29528;
+    public int fieldInt29529;
+    public int fieldInt29530;
+    public int fieldInt29531;
+    public int fieldInt29532;
+    public int fieldInt29533;
+    public int fieldInt29534;
+    public int fieldInt29535;
+    public int fieldInt29536;
+    public int fieldInt29537;
+    public int fieldInt29538;
+    public int fieldInt29539;
+    public int fieldInt29540;
+    public int fieldInt29541;
+    public int fieldInt29542;
+    public int fieldInt29543;
+    public int fieldInt29544;
+    public int fieldInt29545;
+    public int fieldInt29546;
+    public int fieldInt29547;
+    public int fieldInt29548;
+    public int fieldInt29549;
+    public int fieldInt29550;
+    public int fieldInt29551;
+    public int fieldInt29552;
+    public int fieldInt29553;
+    public int fieldInt29554;
+    public int fieldInt29555;
+    public int fieldInt29556;
+    public int fieldInt29557;
+    public int fieldInt29558;
+    public int fieldInt29559;
+    public int fieldInt29560;
+    public int fieldInt29561;
+    public int fieldInt29562;
+    public int fieldInt29563;
+    public int fieldInt29564;
+    public int fieldInt29565;
+    public int fieldInt29566;
+    public int fieldInt29567;
+    public int fieldInt29568;
+    public int fieldInt29569;
+    public int fieldInt29570;
+    public int fieldInt29571;
+    public int fieldInt29572;
+    public int fieldInt29573;
+    public int fieldInt29574;
+    public int fieldInt29575;
+    public int fieldInt29576;
+    public int fieldInt29577;
+    public int fieldInt29578;
+    public int fieldInt29579;
+    public int fieldInt29580;
+    public int fieldInt29581;
+    public int fieldInt29582;
+    public int fieldInt29583;
+    public int fieldInt29584;
+    public int fieldInt29585;
+    public int fieldInt29586;
+    public int fieldInt29587;
+    public int fieldInt29588;
+    public int fieldInt29589;
+    public int fieldInt29590;
+    public int fieldInt29591;
+    public int fieldInt29592;
+    public int fieldInt29593;
+    public int fieldInt29594;
+    public int fieldInt29595;
+    public int fieldInt29596;
+    public int fieldInt29597;
+    public int fieldInt29598;
+    public int fieldInt29599;
+    public int fieldInt29600;
+    public int fieldInt29601;
+    public int fieldInt29602;
+    public int fieldInt29603;
+    public int fieldInt29604;
+    public int fieldInt29605;
+    public int fieldInt29606;
+    public int fieldInt29607;
+    public int fieldInt29608;
+    public int fieldInt29609;
+    public int fieldInt29610;
+    public int fieldInt29611;
+    public int fieldInt29612;
+    public int fieldInt29613;
+    public int fieldInt29614;
+    public int fieldInt29615;
+    public int fieldInt29616;
+    public int fieldInt29617;
+    public int fieldInt29618;
+    public int fieldInt29619;
+    public int fieldInt29620;
+    public int fieldInt29621;
+    public int fieldInt29622;
+    public int fieldInt29623;
+    public int fieldInt29624;
+    public int fieldInt29625;
+    public int fieldInt29626;
+    public int fieldInt29627;
+    public int fieldInt29628;
+    public int fieldInt29629;
+    public int fieldInt29630;
+    public int fieldInt29631;
+    public int fieldInt29632;
+    public int fieldInt29633;
+    public int fieldInt29634;
+    public int fieldInt29635;
+    public int fieldInt29636;
+    public int fieldInt29637;
+    public int fieldInt29638;
+    public int fieldInt29639;
+    public int fieldInt29640;
+    public int fieldInt29641;
+    public int fieldInt29642;
+    public int fieldInt29643;
+    public int fieldInt29644;
+    public int fieldInt29645;
+    public int fieldInt29646;
+    public int fieldInt29647;
+    public int fieldInt29648;
+    public int fieldInt29649;
+    public int fieldInt29650;
+    public int fieldInt29651;
+    public int fieldInt29652;
+    public int fieldInt29653;
+    public int fieldInt29654;
+    public int fieldInt29655;
+    public int fieldInt29656;
+    public int fieldInt29657;
+    public int fieldInt29658;
+    public int fieldInt29659;
+    public int fieldInt29660;
+    public int fieldInt29661;
+    public int fieldInt29662;
+    public int fieldInt29663;
+    public int fieldInt29664;
+    public int fieldInt29665;
+    public int fieldInt29666;
+    public int fieldInt29667;
+    public int fieldInt29668;
+    public int fieldInt29669;
+    public int fieldInt29670;
+    public int fieldInt29671;
+    public int fieldInt29672;
+    public int fieldInt29673;
+    public int fieldInt29674;
+    public int fieldInt29675;
+    public int fieldInt29676;
+    public int fieldInt29677;
+    public int fieldInt29678;
+    public int fieldInt29679;
+    public int fieldInt29680;
+    public int fieldInt29681;
+    public int fieldInt29682;
+    public int fieldInt29683;
+    public int fieldInt29684;
+    public int fieldInt29685;
+    public int fieldInt29686;
+    public int fieldInt29687;
+    public int fieldInt29688;
+    public int fieldInt29689;
+    public int fieldInt29690;
+    public int fieldInt29691;
+    public int fieldInt29692;
+    public int fieldInt29693;
+    public int fieldInt29694;
+    public int fieldInt29695;
+    public int fieldInt29696;
+    public int fieldInt29697;
+    public int fieldInt29698;
+    public int fieldInt29699;
+    public int fieldInt29700;
+    public int fieldInt29701;
+    public int fieldInt29702;
+    public int fieldInt29703;
+    public int fieldInt29704;
+    public int fieldInt29705;
+    public int fieldInt29706;
+    public int fieldInt29707;
+    public int fieldInt29708;
+    public int fieldInt29709;
+    public int fieldInt29710;
+    public int fieldInt29711;
+    public int fieldInt29712;
+    public int fieldInt29713;
+    public int fieldInt29714;
+    public int fieldInt29715;
+    public int fieldInt29716;
+    public int fieldInt29717;
+    public int fieldInt29718;
+    public int fieldInt29719;
+    public int fieldInt29720;
+    public int fieldInt29721;
+    public int fieldInt29722;
+    public int fieldInt29723;
+    public int fieldInt29724;
+    public int fieldInt29725;
+    public int fieldInt29726;
+    public int fieldInt29727;
+    public int fieldInt29728;
+    public int fieldInt29729;
+    public int fieldInt29730;
+    public int fieldInt29731;
+    public int fieldInt29732;
+    public int fieldInt29733;
+    public int fieldInt29734;
+    public int fieldInt29735;
+    public int fieldInt29736;
+    public int fieldInt29737;
+    public int fieldInt29738;
+    public int fieldInt29739;
+    public int fieldInt29740;
+    public int fieldInt29741;
+    public int fieldInt29742;
+    public int fieldInt29743;
+    public int fieldInt29744;
+    public int fieldInt29745;
+    public int fieldInt29746;
+    public int fieldInt29747;
+    public int fieldInt29748;
+    public int fieldInt29749;
+    public int fieldInt29750;
+    public int fieldInt29751;
+    public int fieldInt29752;
+    public int fieldInt29753;
+    public int fieldInt29754;
+    public int fieldInt29755;
+    public int fieldInt29756;
+    public int fieldInt29757;
+    public int fieldInt29758;
+    public int fieldInt29759;
+    public int fieldInt29760;
+    public int fieldInt29761;
+    public int fieldInt29762;
+    public int fieldInt29763;
+    public int fieldInt29764;
+    public int fieldInt29765;
+    public int fieldInt29766;
+    public int fieldInt29767;
+    public int fieldInt29768;
+    public int fieldInt29769;
+    public int fieldInt29770;
+    public int fieldInt29771;
+    public int fieldInt29772;
+    public int fieldInt29773;
+    public int fieldInt29774;
+    public int fieldInt29775;
+    public int fieldInt29776;
+    public int fieldInt29777;
+    public int fieldInt29778;
+    public int fieldInt29779;
+    public int fieldInt29780;
+    public int fieldInt29781;
+    public int fieldInt29782;
+    public int fieldInt29783;
+    public int fieldInt29784;
+    public int fieldInt29785;
+    public int fieldInt29786;
+    public int fieldInt29787;
+    public int fieldInt29788;
+    public int fieldInt29789;
+    public int fieldInt29790;
+    public int fieldInt29791;
+    public int fieldInt29792;
+    public int fieldInt29793;
+    public int fieldInt29794;
+    public int fieldInt29795;
+    public int fieldInt29796;
+    public int fieldInt29797;
+    public int fieldInt29798;
+    public int fieldInt29799;
+    public int fieldInt29800;
+    public int fieldInt29801;
+    public int fieldInt29802;
+    public int fieldInt29803;
+    public int fieldInt29804;
+    public int fieldInt29805;
+    public int fieldInt29806;
+    public int fieldInt29807;
+    public int fieldInt29808;
+    public int fieldInt29809;
+    public int fieldInt29810;
+    public int fieldInt29811;
+    public int fieldInt29812;
+    public int fieldInt29813;
+    public int fieldInt29814;
+    public int fieldInt29815;
+    public int fieldInt29816;
+    public int fieldInt29817;
+    public int fieldInt29818;
+    public int fieldInt29819;
+    public int fieldInt29820;
+    public int fieldInt29821;
+    public int fieldInt29822;
+    public int fieldInt29823;
+    public int fieldInt29824;
+    public int fieldInt29825;
+    public int fieldInt29826;
+    public int fieldInt29827;
+    public int fieldInt29828;
+    public int fieldInt29829;
+    public int fieldInt29830;
+    public int fieldInt29831;
+    public int fieldInt29832;
+    public int fieldInt29833;
+    public int fieldInt29834;
+    public int fieldInt29835;
+    public int fieldInt29836;
+    public int fieldInt29837;
+    public int fieldInt29838;
+    public int fieldInt29839;
+    public int fieldInt29840;
+    public int fieldInt29841;
+    public int fieldInt29842;
+    public int fieldInt29843;
+    public int fieldInt29844;
+    public int fieldInt29845;
+    public int fieldInt29846;
+    public int fieldInt29847;
+    public int fieldInt29848;
+    public int fieldInt29849;
+    public int fieldInt29850;
+    public int fieldInt29851;
+    public int fieldInt29852;
+    public int fieldInt29853;
+    public int fieldInt29854;
+    public int fieldInt29855;
+    public int fieldInt29856;
+    public int fieldInt29857;
+    public int fieldInt29858;
+    public int fieldInt29859;
+    public int fieldInt29860;
+    public int fieldInt29861;
+    public int fieldInt29862;
+    public int fieldInt29863;
+    public int fieldInt29864;
+    public int fieldInt29865;
+    public int fieldInt29866;
+    public int fieldInt29867;
+    public int fieldInt29868;
+    public int fieldInt29869;
+    public int fieldInt29870;
+    public int fieldInt29871;
+    public int fieldInt29872;
+    public int fieldInt29873;
+    public int fieldInt29874;
+    public int fieldInt29875;
+    public int fieldInt29876;
+    public int fieldInt29877;
+    public int fieldInt29878;
+    public int fieldInt29879;
+    public int fieldInt29880;
+    public int fieldInt29881;
+    public int fieldInt29882;
+    public int fieldInt29883;
+    public int fieldInt29884;
+    public int fieldInt29885;
+    public int fieldInt29886;
+    public int fieldInt29887;
+    public int fieldInt29888;
+    public int fieldInt29889;
+    public int fieldInt29890;
+    public int fieldInt29891;
+    public int fieldInt29892;
+    public int fieldInt29893;
+    public int fieldInt29894;
+    public int fieldInt29895;
+    public int fieldInt29896;
+    public int fieldInt29897;
+    public int fieldInt29898;
+    public int fieldInt29899;
+    public int fieldInt29900;
+    public int fieldInt29901;
+    public int fieldInt29902;
+    public int fieldInt29903;
+    public int fieldInt29904;
+    public int fieldInt29905;
+    public int fieldInt29906;
+    public int fieldInt29907;
+    public int fieldInt29908;
+    public int fieldInt29909;
+    public int fieldInt29910;
+    public int fieldInt29911;
+    public int fieldInt29912;
+    public int fieldInt29913;
+    public int fieldInt29914;
+    public int fieldInt29915;
+    public int fieldInt29916;
+    public int fieldInt29917;
+    public int fieldInt29918;
+    public int fieldInt29919;
+    public int fieldInt29920;
+    public int fieldInt29921;
+    public int fieldInt29922;
+    public int fieldInt29923;
+    public int fieldInt29924;
+    public int fieldInt29925;
+    public int fieldInt29926;
+    public int fieldInt29927;
+    public int fieldInt29928;
+    public int fieldInt29929;
+    public int fieldInt29930;
+    public int fieldInt29931;
+    public int fieldInt29932;
+    public int fieldInt29933;
+    public int fieldInt29934;
+    public int fieldInt29935;
+    public int fieldInt29936;
+    public int fieldInt29937;
+    public int fieldInt29938;
+    public int fieldInt29939;
+    public int fieldInt29940;
+    public int fieldInt29941;
+    public int fieldInt29942;
+    public int fieldInt29943;
+    public int fieldInt29944;
+    public int fieldInt29945;
+    public int fieldInt29946;
+    public int fieldInt29947;
+    public int fieldInt29948;
+    public int fieldInt29949;
+    public int fieldInt29950;
+    public int fieldInt29951;
+    public int fieldInt29952;
+    public int fieldInt29953;
+    public int fieldInt29954;
+    public int fieldInt29955;
+    public int fieldInt29956;
+    public int fieldInt29957;
+    public int fieldInt29958;
+    public int fieldInt29959;
+    public int fieldInt29960;
+    public int fieldInt29961;
+    public int fieldInt29962;
+    public int fieldInt29963;
+    public int fieldInt29964;
+    public int fieldInt29965;
+    public int fieldInt29966;
+    public int fieldInt29967;
+    public int fieldInt29968;
+    public int fieldInt29969;
+    public int fieldInt29970;
+    public int fieldInt29971;
+    public int fieldInt29972;
+    public int fieldInt29973;
+    public int fieldInt29974;
+    public int fieldInt29975;
+    public int fieldInt29976;
+    public int fieldInt29977;
+    public int fieldInt29978;
+    public int fieldInt29979;
+    public int fieldInt29980;
+    public int fieldInt29981;
+    public int fieldInt29982;
+    public int fieldInt29983;
+    public int fieldInt29984;
+    public int fieldInt29985;
+    public int fieldInt29986;
+    public int fieldInt29987;
+    public int fieldInt29988;
+    public int fieldInt29989;
+    public int fieldInt29990;
+    public int fieldInt29991;
+    public int fieldInt29992;
+    public int fieldInt29993;
+    public int fieldInt29994;
+    public int fieldInt29995;
+    public int fieldInt29996;
+    public int fieldInt29997;
+    public int fieldInt29998;
+    public int fieldInt29999;
+    public int fieldInt30000;
+    public int fieldInt30001;
+    public int fieldInt30002;
+    public int fieldInt30003;
+    public int fieldInt30004;
+    public int fieldInt30005;
+    public int fieldInt30006;
+    public int fieldInt30007;
+    public int fieldInt30008;
+    public int fieldInt30009;
+    public int fieldInt30010;
+    public int fieldInt30011;
+    public int fieldInt30012;
+    public int fieldInt30013;
+    public int fieldInt30014;
+    public int fieldInt30015;
+    public int fieldInt30016;
+    public int fieldInt30017;
+    public int fieldInt30018;
+    public int fieldInt30019;
+    public int fieldInt30020;
+    public int fieldInt30021;
+    public int fieldInt30022;
+    public int fieldInt30023;
+    public int fieldInt30024;
+    public int fieldInt30025;
+    public int fieldInt30026;
+    public int fieldInt30027;
+    public int fieldInt30028;
+    public int fieldInt30029;
+    public int fieldInt30030;
+    public int fieldInt30031;
+    public int fieldInt30032;
+    public int fieldInt30033;
+    public int fieldInt30034;
+    public int fieldInt30035;
+    public int fieldInt30036;
+    public int fieldInt30037;
+    public int fieldInt30038;
+    public int fieldInt30039;
+    public int fieldInt30040;
+    public int fieldInt30041;
+    public int fieldInt30042;
+    public int fieldInt30043;
+    public int fieldInt30044;
+    public int fieldInt30045;
+    public int fieldInt30046;
+    public int fieldInt30047;
+    public int fieldInt30048;
+    public int fieldInt30049;
+    public int fieldInt30050;
+    public int fieldInt30051;
+    public int fieldInt30052;
+    public int fieldInt30053;
+    public int fieldInt30054;
+    public int fieldInt30055;
+    public int fieldInt30056;
+    public int fieldInt30057;
+    public int fieldInt30058;
+    public int fieldInt30059;
+    public int fieldInt30060;
+    public int fieldInt30061;
+    public int fieldInt30062;
+    public int fieldInt30063;
+    public int fieldInt30064;
+    public int fieldInt30065;
+    public int fieldInt30066;
+    public int fieldInt30067;
+    public int fieldInt30068;
+    public int fieldInt30069;
+    public int fieldInt30070;
+    public int fieldInt30071;
+    public int fieldInt30072;
+    public int fieldInt30073;
+    public int fieldInt30074;
+    public int fieldInt30075;
+    public int fieldInt30076;
+    public int fieldInt30077;
+    public int fieldInt30078;
+    public int fieldInt30079;
+    public int fieldInt30080;
+    public int fieldInt30081;
+    public int fieldInt30082;
+    public int fieldInt30083;
+    public int fieldInt30084;
+    public int fieldInt30085;
+    public int fieldInt30086;
+    public int fieldInt30087;
+    public int fieldInt30088;
+    public int fieldInt30089;
+    public int fieldInt30090;
+    public int fieldInt30091;
+    public int fieldInt30092;
+    public int fieldInt30093;
+    public int fieldInt30094;
+    public int fieldInt30095;
+    public int fieldInt30096;
+    public int fieldInt30097;
+    public int fieldInt30098;
+    public int fieldInt30099;
+    public int fieldInt30100;
+    public int fieldInt30101;
+    public int fieldInt30102;
+    public int fieldInt30103;
+    public int fieldInt30104;
+    public int fieldInt30105;
+    public int fieldInt30106;
+    public int fieldInt30107;
+    public int fieldInt30108;
+    public int fieldInt30109;
+    public int fieldInt30110;
+    public int fieldInt30111;
+    public int fieldInt30112;
+    public int fieldInt30113;
+    public int fieldInt30114;
+    public int fieldInt30115;
+    public int fieldInt30116;
+    public int fieldInt30117;
+    public int fieldInt30118;
+    public int fieldInt30119;
+    public int fieldInt30120;
+    public int fieldInt30121;
+    public int fieldInt30122;
+    public int fieldInt30123;
+    public int fieldInt30124;
+    public int fieldInt30125;
+    public int fieldInt30126;
+    public int fieldInt30127;
+    public int fieldInt30128;
+    public int fieldInt30129;
+    public int fieldInt30130;
+    public int fieldInt30131;
+    public int fieldInt30132;
+    public int fieldInt30133;
+    public int fieldInt30134;
+    public int fieldInt30135;
+    public int fieldInt30136;
+    public int fieldInt30137;
+    public int fieldInt30138;
+    public int fieldInt30139;
+    public int fieldInt30140;
+    public int fieldInt30141;
+    public int fieldInt30142;
+    public int fieldInt30143;
+    public int fieldInt30144;
+    public int fieldInt30145;
+    public int fieldInt30146;
+    public int fieldInt30147;
+    public int fieldInt30148;
+    public int fieldInt30149;
+    public int fieldInt30150;
+    public int fieldInt30151;
+    public int fieldInt30152;
+    public int fieldInt30153;
+    public int fieldInt30154;
+    public int fieldInt30155;
+    public int fieldInt30156;
+    public int fieldInt30157;
+    public int fieldInt30158;
+    public int fieldInt30159;
+    public int fieldInt30160;
+    public int fieldInt30161;
+    public int fieldInt30162;
+    public int fieldInt30163;
+    public int fieldInt30164;
+    public int fieldInt30165;
+    public int fieldInt30166;
+    public int fieldInt30167;
+    public int fieldInt30168;
+    public int fieldInt30169;
+    public int fieldInt30170;
+    public int fieldInt30171;
+    public int fieldInt30172;
+    public int fieldInt30173;
+    public int fieldInt30174;
+    public int fieldInt30175;
+    public int fieldInt30176;
+    public int fieldInt30177;
+    public int fieldInt30178;
+    public int fieldInt30179;
+    public int fieldInt30180;
+    public int fieldInt30181;
+    public int fieldInt30182;
+    public int fieldInt30183;
+    public int fieldInt30184;
+    public int fieldInt30185;
+    public int fieldInt30186;
+    public int fieldInt30187;
+    public int fieldInt30188;
+    public int fieldInt30189;
+    public int fieldInt30190;
+    public int fieldInt30191;
+    public int fieldInt30192;
+    public int fieldInt30193;
+    public int fieldInt30194;
+    public int fieldInt30195;
+    public int fieldInt30196;
+    public int fieldInt30197;
+    public int fieldInt30198;
+    public int fieldInt30199;
+    public int fieldInt30200;
+    public int fieldInt30201;
+    public int fieldInt30202;
+    public int fieldInt30203;
+    public int fieldInt30204;
+    public int fieldInt30205;
+    public int fieldInt30206;
+    public int fieldInt30207;
+    public int fieldInt30208;
+    public int fieldInt30209;
+    public int fieldInt30210;
+    public int fieldInt30211;
+    public int fieldInt30212;
+    public int fieldInt30213;
+    public int fieldInt30214;
+    public int fieldInt30215;
+    public int fieldInt30216;
+    public int fieldInt30217;
+    public int fieldInt30218;
+    public int fieldInt30219;
+    public int fieldInt30220;
+    public int fieldInt30221;
+    public int fieldInt30222;
+    public int fieldInt30223;
+    public int fieldInt30224;
+    public int fieldInt30225;
+    public int fieldInt30226;
+    public int fieldInt30227;
+    public int fieldInt30228;
+    public int fieldInt30229;
+    public int fieldInt30230;
+    public int fieldInt30231;
+    public int fieldInt30232;
+    public int fieldInt30233;
+    public int fieldInt30234;
+    public int fieldInt30235;
+    public int fieldInt30236;
+    public int fieldInt30237;
+    public int fieldInt30238;
+    public int fieldInt30239;
+    public int fieldInt30240;
+    public int fieldInt30241;
+    public int fieldInt30242;
+    public int fieldInt30243;
+    public int fieldInt30244;
+    public int fieldInt30245;
+    public int fieldInt30246;
+    public int fieldInt30247;
+    public int fieldInt30248;
+    public int fieldInt30249;
+    public int fieldInt30250;
+    public int fieldInt30251;
+    public int fieldInt30252;
+    public int fieldInt30253;
+    public int fieldInt30254;
+    public int fieldInt30255;
+    public int fieldInt30256;
+    public int fieldInt30257;
+    public int fieldInt30258;
+    public int fieldInt30259;
+    public int fieldInt30260;
+    public int fieldInt30261;
+    public int fieldInt30262;
+    public int fieldInt30263;
+    public int fieldInt30264;
+    public int fieldInt30265;
+    public int fieldInt30266;
+    public int fieldInt30267;
+    public int fieldInt30268;
+    public int fieldInt30269;
+    public int fieldInt30270;
+    public int fieldInt30271;
+    public int fieldInt30272;
+    public int fieldInt30273;
+    public int fieldInt30274;
+    public int fieldInt30275;
+    public int fieldInt30276;
+    public int fieldInt30277;
+    public int fieldInt30278;
+    public int fieldInt30279;
+    public int fieldInt30280;
+    public int fieldInt30281;
+    public int fieldInt30282;
+    public int fieldInt30283;
+    public int fieldInt30284;
+    public int fieldInt30285;
+    public int fieldInt30286;
+    public int fieldInt30287;
+    public int fieldInt30288;
+    public int fieldInt30289;
+    public int fieldInt30290;
+    public int fieldInt30291;
+    public int fieldInt30292;
+    public int fieldInt30293;
+    public int fieldInt30294;
+    public int fieldInt30295;
+    public int fieldInt30296;
+    public int fieldInt30297;
+    public int fieldInt30298;
+    public int fieldInt30299;
+    public int fieldInt30300;
+    public int fieldInt30301;
+    public int fieldInt30302;
+    public int fieldInt30303;
+    public int fieldInt30304;
+    public int fieldInt30305;
+    public int fieldInt30306;
+    public int fieldInt30307;
+    public int fieldInt30308;
+    public int fieldInt30309;
+    public int fieldInt30310;
+    public int fieldInt30311;
+    public int fieldInt30312;
+    public int fieldInt30313;
+    public int fieldInt30314;
+    public int fieldInt30315;
+    public int fieldInt30316;
+    public int fieldInt30317;
+    public int fieldInt30318;
+    public int fieldInt30319;
+    public int fieldInt30320;
+    public int fieldInt30321;
+    public int fieldInt30322;
+    public int fieldInt30323;
+    public int fieldInt30324;
+    public int fieldInt30325;
+    public int fieldInt30326;
+    public int fieldInt30327;
+    public int fieldInt30328;
+    public int fieldInt30329;
+    public int fieldInt30330;
+    public int fieldInt30331;
+    public int fieldInt30332;
+    public int fieldInt30333;
+    public int fieldInt30334;
+    public int fieldInt30335;
+    public int fieldInt30336;
+    public int fieldInt30337;
+    public int fieldInt30338;
+    public int fieldInt30339;
+    public int fieldInt30340;
+    public int fieldInt30341;
+    public int fieldInt30342;
+    public int fieldInt30343;
+    public int fieldInt30344;
+    public int fieldInt30345;
+    public int fieldInt30346;
+    public int fieldInt30347;
+    public int fieldInt30348;
+    public int fieldInt30349;
+    public int fieldInt30350;
+    public int fieldInt30351;
+    public int fieldInt30352;
+    public int fieldInt30353;
+    public int fieldInt30354;
+    public int fieldInt30355;
+    public int fieldInt30356;
+    public int fieldInt30357;
+    public int fieldInt30358;
+    public int fieldInt30359;
+    public int fieldInt30360;
+    public int fieldInt30361;
+    public int fieldInt30362;
+    public int fieldInt30363;
+    public int fieldInt30364;
+    public int fieldInt30365;
+    public int fieldInt30366;
+    public int fieldInt30367;
+    public int fieldInt30368;
+    public int fieldInt30369;
+    public int fieldInt30370;
+    public int fieldInt30371;
+    public int fieldInt30372;
+    public int fieldInt30373;
+    public int fieldInt30374;
+    public int fieldInt30375;
+    public int fieldInt30376;
+    public int fieldInt30377;
+    public int fieldInt30378;
+    public int fieldInt30379;
+    public int fieldInt30380;
+    public int fieldInt30381;
+    public int fieldInt30382;
+    public int fieldInt30383;
+    public int fieldInt30384;
+    public int fieldInt30385;
+    public int fieldInt30386;
+    public int fieldInt30387;
+    public int fieldInt30388;
+    public int fieldInt30389;
+    public int fieldInt30390;
+    public int fieldInt30391;
+    public int fieldInt30392;
+    public int fieldInt30393;
+    public int fieldInt30394;
+    public int fieldInt30395;
+    public int fieldInt30396;
+    public int fieldInt30397;
+    public int fieldInt30398;
+    public int fieldInt30399;
+    public int fieldInt30400;
+    public int fieldInt30401;
+    public int fieldInt30402;
+    public int fieldInt30403;
+    public int fieldInt30404;
+    public int fieldInt30405;
+    public int fieldInt30406;
+    public int fieldInt30407;
+    public int fieldInt30408;
+    public int fieldInt30409;
+    public int fieldInt30410;
+    public int fieldInt30411;
+    public int fieldInt30412;
+    public int fieldInt30413;
+    public int fieldInt30414;
+    public int fieldInt30415;
+    public int fieldInt30416;
+    public int fieldInt30417;
+    public int fieldInt30418;
+    public int fieldInt30419;
+    public int fieldInt30420;
+    public int fieldInt30421;
+    public int fieldInt30422;
+    public int fieldInt30423;
+    public int fieldInt30424;
+    public int fieldInt30425;
+    public int fieldInt30426;
+    public int fieldInt30427;
+    public int fieldInt30428;
+    public int fieldInt30429;
+    public int fieldInt30430;
+    public int fieldInt30431;
+    public int fieldInt30432;
+    public int fieldInt30433;
+    public int fieldInt30434;
+    public int fieldInt30435;
+    public int fieldInt30436;
+    public int fieldInt30437;
+    public int fieldInt30438;
+    public int fieldInt30439;
+    public int fieldInt30440;
+    public int fieldInt30441;
+    public int fieldInt30442;
+    public int fieldInt30443;
+    public int fieldInt30444;
+    public int fieldInt30445;
+    public int fieldInt30446;
+    public int fieldInt30447;
+    public int fieldInt30448;
+    public int fieldInt30449;
+    public int fieldInt30450;
+    public int fieldInt30451;
+    public int fieldInt30452;
+    public int fieldInt30453;
+    public int fieldInt30454;
+    public int fieldInt30455;
+    public int fieldInt30456;
+    public int fieldInt30457;
+    public int fieldInt30458;
+    public int fieldInt30459;
+    public int fieldInt30460;
+    public int fieldInt30461;
+    public int fieldInt30462;
+    public int fieldInt30463;
+    public int fieldInt30464;
+    public int fieldInt30465;
+    public int fieldInt30466;
+    public int fieldInt30467;
+    public int fieldInt30468;
+    public int fieldInt30469;
+    public int fieldInt30470;
+    public int fieldInt30471;
+    public int fieldInt30472;
+    public int fieldInt30473;
+    public int fieldInt30474;
+    public int fieldInt30475;
+    public int fieldInt30476;
+    public int fieldInt30477;
+    public int fieldInt30478;
+    public int fieldInt30479;
+    public int fieldInt30480;
+    public int fieldInt30481;
+    public int fieldInt30482;
+    public int fieldInt30483;
+    public int fieldInt30484;
+    public int fieldInt30485;
+    public int fieldInt30486;
+    public int fieldInt30487;
+    public int fieldInt30488;
+    public int fieldInt30489;
+    public int fieldInt30490;
+    public int fieldInt30491;
+    public int fieldInt30492;
+    public int fieldInt30493;
+    public int fieldInt30494;
+    public int fieldInt30495;
+    public int fieldInt30496;
+    public int fieldInt30497;
+    public int fieldInt30498;
+    public int fieldInt30499;
+    public int fieldInt30500;
+    public int fieldInt30501;
+    public int fieldInt30502;
+    public int fieldInt30503;
+    public int fieldInt30504;
+    public int fieldInt30505;
+    public int fieldInt30506;
+    public int fieldInt30507;
+    public int fieldInt30508;
+    public int fieldInt30509;
+    public int fieldInt30510;
+    public int fieldInt30511;
+    public int fieldInt30512;
+    public int fieldInt30513;
+    public int fieldInt30514;
+    public int fieldInt30515;
+    public int fieldInt30516;
+    public int fieldInt30517;
+    public int fieldInt30518;
+    public int fieldInt30519;
+    public int fieldInt30520;
+    public int fieldInt30521;
+    public int fieldInt30522;
+    public int fieldInt30523;
+    public int fieldInt30524;
+    public int fieldInt30525;
+    public int fieldInt30526;
+    public int fieldInt30527;
+    public int fieldInt30528;
+    public int fieldInt30529;
+    public int fieldInt30530;
+    public int fieldInt30531;
+    public int fieldInt30532;
+    public int fieldInt30533;
+    public int fieldInt30534;
+    public int fieldInt30535;
+    public int fieldInt30536;
+    public int fieldInt30537;
+    public int fieldInt30538;
+    public int fieldInt30539;
+    public int fieldInt30540;
+    public int fieldInt30541;
+    public int fieldInt30542;
+    public int fieldInt30543;
+    public int fieldInt30544;
+    public int fieldInt30545;
+    public int fieldInt30546;
+    public int fieldInt30547;
+    public int fieldInt30548;
+    public int fieldInt30549;
+    public int fieldInt30550;
+    public int fieldInt30551;
+    public int fieldInt30552;
+    public int fieldInt30553;
+    public int fieldInt30554;
+    public int fieldInt30555;
+    public int fieldInt30556;
+    public int fieldInt30557;
+    public int fieldInt30558;
+    public int fieldInt30559;
+    public int fieldInt30560;
+    public int fieldInt30561;
+    public int fieldInt30562;
+    public int fieldInt30563;
+    public int fieldInt30564;
+    public int fieldInt30565;
+    public int fieldInt30566;
+    public int fieldInt30567;
+    public int fieldInt30568;
+    public int fieldInt30569;
+    public int fieldInt30570;
+    public int fieldInt30571;
+    public int fieldInt30572;
+    public int fieldInt30573;
+    public int fieldInt30574;
+    public int fieldInt30575;
+    public int fieldInt30576;
+    public int fieldInt30577;
+    public int fieldInt30578;
+    public int fieldInt30579;
+    public int fieldInt30580;
+    public int fieldInt30581;
+    public int fieldInt30582;
+    public int fieldInt30583;
+    public int fieldInt30584;
+    public int fieldInt30585;
+    public int fieldInt30586;
+    public int fieldInt30587;
+    public int fieldInt30588;
+    public int fieldInt30589;
+    public int fieldInt30590;
+    public int fieldInt30591;
+    public int fieldInt30592;
+    public int fieldInt30593;
+    public int fieldInt30594;
+    public int fieldInt30595;
+    public int fieldInt30596;
+    public int fieldInt30597;
+    public int fieldInt30598;
+    public int fieldInt30599;
+    public int fieldInt30600;
+    public int fieldInt30601;
+    public int fieldInt30602;
+    public int fieldInt30603;
+    public int fieldInt30604;
+    public int fieldInt30605;
+    public int fieldInt30606;
+    public int fieldInt30607;
+    public int fieldInt30608;
+    public int fieldInt30609;
+    public int fieldInt30610;
+    public int fieldInt30611;
+    public int fieldInt30612;
+    public int fieldInt30613;
+    public int fieldInt30614;
+    public int fieldInt30615;
+    public int fieldInt30616;
+    public int fieldInt30617;
+    public int fieldInt30618;
+    public int fieldInt30619;
+    public int fieldInt30620;
+    public int fieldInt30621;
+    public int fieldInt30622;
+    public int fieldInt30623;
+    public int fieldInt30624;
+    public int fieldInt30625;
+    public int fieldInt30626;
+    public int fieldInt30627;
+    public int fieldInt30628;
+    public int fieldInt30629;
+    public int fieldInt30630;
+    public int fieldInt30631;
+    public int fieldInt30632;
+    public int fieldInt30633;
+    public int fieldInt30634;
+    public int fieldInt30635;
+    public int fieldInt30636;
+    public int fieldInt30637;
+    public int fieldInt30638;
+    public int fieldInt30639;
+    public int fieldInt30640;
+    public int fieldInt30641;
+    public int fieldInt30642;
+    public int fieldInt30643;
+    public int fieldInt30644;
+    public int fieldInt30645;
+    public int fieldInt30646;
+    public int fieldInt30647;
+    public int fieldInt30648;
+    public int fieldInt30649;
+    public int fieldInt30650;
+    public int fieldInt30651;
+    public int fieldInt30652;
+    public int fieldInt30653;
+    public int fieldInt30654;
+    public int fieldInt30655;
+    public int fieldInt30656;
+    public int fieldInt30657;
+    public int fieldInt30658;
+    public int fieldInt30659;
+    public int fieldInt30660;
+    public int fieldInt30661;
+    public int fieldInt30662;
+    public int fieldInt30663;
+    public int fieldInt30664;
+    public int fieldInt30665;
+    public int fieldInt30666;
+    public int fieldInt30667;
+    public int fieldInt30668;
+    public int fieldInt30669;
+    public int fieldInt30670;
+    public int fieldInt30671;
+    public int fieldInt30672;
+    public int fieldInt30673;
+    public int fieldInt30674;
+    public int fieldInt30675;
+    public int fieldInt30676;
+    public int fieldInt30677;
+    public int fieldInt30678;
+    public int fieldInt30679;
+    public int fieldInt30680;
+    public int fieldInt30681;
+    public int fieldInt30682;
+    public int fieldInt30683;
+    public int fieldInt30684;
+    public int fieldInt30685;
+    public int fieldInt30686;
+    public int fieldInt30687;
+    public int fieldInt30688;
+    public int fieldInt30689;
+    public int fieldInt30690;
+    public int fieldInt30691;
+    public int fieldInt30692;
+    public int fieldInt30693;
+    public int fieldInt30694;
+    public int fieldInt30695;
+    public int fieldInt30696;
+    public int fieldInt30697;
+    public int fieldInt30698;
+    public int fieldInt30699;
+    public int fieldInt30700;
+    public int fieldInt30701;
+    public int fieldInt30702;
+    public int fieldInt30703;
+    public int fieldInt30704;
+    public int fieldInt30705;
+    public int fieldInt30706;
+    public int fieldInt30707;
+    public int fieldInt30708;
+    public int fieldInt30709;
+    public int fieldInt30710;
+    public int fieldInt30711;
+    public int fieldInt30712;
+    public int fieldInt30713;
+    public int fieldInt30714;
+    public int fieldInt30715;
+    public int fieldInt30716;
+    public int fieldInt30717;
+    public int fieldInt30718;
+    public int fieldInt30719;
+    public int fieldInt30720;
+    public int fieldInt30721;
+    public int fieldInt30722;
+    public int fieldInt30723;
+    public int fieldInt30724;
+    public int fieldInt30725;
+    public int fieldInt30726;
+    public int fieldInt30727;
+    public int fieldInt30728;
+    public int fieldInt30729;
+    public int fieldInt30730;
+    public int fieldInt30731;
+    public int fieldInt30732;
+    public int fieldInt30733;
+    public int fieldInt30734;
+    public int fieldInt30735;
+    public int fieldInt30736;
+    public int fieldInt30737;
+    public int fieldInt30738;
+    public int fieldInt30739;
+    public int fieldInt30740;
+    public int fieldInt30741;
+    public int fieldInt30742;
+    public int fieldInt30743;
+    public int fieldInt30744;
+    public int fieldInt30745;
+    public int fieldInt30746;
+    public int fieldInt30747;
+    public int fieldInt30748;
+    public int fieldInt30749;
+    public int fieldInt30750;
+    public int fieldInt30751;
+    public int fieldInt30752;
+    public int fieldInt30753;
+    public int fieldInt30754;
+    public int fieldInt30755;
+    public int fieldInt30756;
+    public int fieldInt30757;
+    public int fieldInt30758;
+    public int fieldInt30759;
+    public int fieldInt30760;
+    public int fieldInt30761;
+    public int fieldInt30762;
+    public int fieldInt30763;
+    public int fieldInt30764;
+    public int fieldInt30765;
+    public int fieldInt30766;
+    public int fieldInt30767;
+    public int fieldInt30768;
+    public int fieldInt30769;
+    public int fieldInt30770;
+    public int fieldInt30771;
+    public int fieldInt30772;
+    public int fieldInt30773;
+    public int fieldInt30774;
+    public int fieldInt30775;
+    public int fieldInt30776;
+    public int fieldInt30777;
+    public int fieldInt30778;
+    public int fieldInt30779;
+    public int fieldInt30780;
+    public int fieldInt30781;
+    public int fieldInt30782;
+    public int fieldInt30783;
+    public int fieldInt30784;
+    public int fieldInt30785;
+    public int fieldInt30786;
+    public int fieldInt30787;
+    public int fieldInt30788;
+    public int fieldInt30789;
+    public int fieldInt30790;
+    public int fieldInt30791;
+    public int fieldInt30792;
+    public int fieldInt30793;
+    public int fieldInt30794;
+    public int fieldInt30795;
+    public int fieldInt30796;
+    public int fieldInt30797;
+    public int fieldInt30798;
+    public int fieldInt30799;
+    public int fieldInt30800;
+    public int fieldInt30801;
+    public int fieldInt30802;
+    public int fieldInt30803;
+    public int fieldInt30804;
+    public int fieldInt30805;
+    public int fieldInt30806;
+    public int fieldInt30807;
+    public int fieldInt30808;
+    public int fieldInt30809;
+    public int fieldInt30810;
+    public int fieldInt30811;
+    public int fieldInt30812;
+    public int fieldInt30813;
+    public int fieldInt30814;
+    public int fieldInt30815;
+    public int fieldInt30816;
+    public int fieldInt30817;
+    public int fieldInt30818;
+    public int fieldInt30819;
+    public int fieldInt30820;
+    public int fieldInt30821;
+    public int fieldInt30822;
+    public int fieldInt30823;
+    public int fieldInt30824;
+    public int fieldInt30825;
+    public int fieldInt30826;
+    public int fieldInt30827;
+    public int fieldInt30828;
+    public int fieldInt30829;
+    public int fieldInt30830;
+    public int fieldInt30831;
+    public int fieldInt30832;
+    public int fieldInt30833;
+    public int fieldInt30834;
+    public int fieldInt30835;
+    public int fieldInt30836;
+    public int fieldInt30837;
+    public int fieldInt30838;
+    public int fieldInt30839;
+    public int fieldInt30840;
+    public int fieldInt30841;
+    public int fieldInt30842;
+    public int fieldInt30843;
+    public int fieldInt30844;
+    public int fieldInt30845;
+    public int fieldInt30846;
+    public int fieldInt30847;
+    public int fieldInt30848;
+    public int fieldInt30849;
+    public int fieldInt30850;
+    public int fieldInt30851;
+    public int fieldInt30852;
+    public int fieldInt30853;
+    public int fieldInt30854;
+    public int fieldInt30855;
+    public int fieldInt30856;
+    public int fieldInt30857;
+    public int fieldInt30858;
+    public int fieldInt30859;
+    public int fieldInt30860;
+    public int fieldInt30861;
+    public int fieldInt30862;
+    public int fieldInt30863;
+    public int fieldInt30864;
+    public int fieldInt30865;
+    public int fieldInt30866;
+    public int fieldInt30867;
+    public int fieldInt30868;
+    public int fieldInt30869;
+    public int fieldInt30870;
+    public int fieldInt30871;
+    public int fieldInt30872;
+    public int fieldInt30873;
+    public int fieldInt30874;
+    public int fieldInt30875;
+    public int fieldInt30876;
+    public int fieldInt30877;
+    public int fieldInt30878;
+    public int fieldInt30879;
+    public int fieldInt30880;
+    public int fieldInt30881;
+    public int fieldInt30882;
+    public int fieldInt30883;
+    public int fieldInt30884;
+    public int fieldInt30885;
+    public int fieldInt30886;
+    public int fieldInt30887;
+    public int fieldInt30888;
+    public int fieldInt30889;
+    public int fieldInt30890;
+    public int fieldInt30891;
+    public int fieldInt30892;
+    public int fieldInt30893;
+    public int fieldInt30894;
+    public int fieldInt30895;
+    public int fieldInt30896;
+    public int fieldInt30897;
+    public int fieldInt30898;
+    public int fieldInt30899;
+    public int fieldInt30900;
+    public int fieldInt30901;
+    public int fieldInt30902;
+    public int fieldInt30903;
+    public int fieldInt30904;
+    public int fieldInt30905;
+    public int fieldInt30906;
+    public int fieldInt30907;
+    public int fieldInt30908;
+    public int fieldInt30909;
+    public int fieldInt30910;
+    public int fieldInt30911;
+    public int fieldInt30912;
+    public int fieldInt30913;
+    public int fieldInt30914;
+    public int fieldInt30915;
+    public int fieldInt30916;
+    public int fieldInt30917;
+    public int fieldInt30918;
+    public int fieldInt30919;
+    public int fieldInt30920;
+    public int fieldInt30921;
+    public int fieldInt30922;
+    public int fieldInt30923;
+    public int fieldInt30924;
+    public int fieldInt30925;
+    public int fieldInt30926;
+    public int fieldInt30927;
+    public int fieldInt30928;
+    public int fieldInt30929;
+    public int fieldInt30930;
+    public int fieldInt30931;
+    public int fieldInt30932;
+    public int fieldInt30933;
+    public int fieldInt30934;
+    public int fieldInt30935;
+    public int fieldInt30936;
+    public int fieldInt30937;
+    public int fieldInt30938;
+    public int fieldInt30939;
+    public int fieldInt30940;
+    public int fieldInt30941;
+    public int fieldInt30942;
+    public int fieldInt30943;
+    public int fieldInt30944;
+    public int fieldInt30945;
+    public int fieldInt30946;
+    public int fieldInt30947;
+    public int fieldInt30948;
+    public int fieldInt30949;
+    public int fieldInt30950;
+    public int fieldInt30951;
+    public int fieldInt30952;
+    public int fieldInt30953;
+    public int fieldInt30954;
+    public int fieldInt30955;
+    public int fieldInt30956;
+    public int fieldInt30957;
+    public int fieldInt30958;
+    public int fieldInt30959;
+    public int fieldInt30960;
+    public int fieldInt30961;
+    public int fieldInt30962;
+    public int fieldInt30963;
+    public int fieldInt30964;
+    public int fieldInt30965;
+    public int fieldInt30966;
+    public int fieldInt30967;
+    public int fieldInt30968;
+    public int fieldInt30969;
+    public int fieldInt30970;
+    public int fieldInt30971;
+    public int fieldInt30972;
+    public int fieldInt30973;
+    public int fieldInt30974;
+    public int fieldInt30975;
+    public int fieldInt30976;
+    public int fieldInt30977;
+    public int fieldInt30978;
+    public int fieldInt30979;
+    public int fieldInt30980;
+    public int fieldInt30981;
+    public int fieldInt30982;
+    public int fieldInt30983;
+    public int fieldInt30984;
+    public int fieldInt30985;
+    public int fieldInt30986;
+    public int fieldInt30987;
+    public int fieldInt30988;
+    public int fieldInt30989;
+    public int fieldInt30990;
+    public int fieldInt30991;
+    public int fieldInt30992;
+    public int fieldInt30993;
+    public int fieldInt30994;
+    public int fieldInt30995;
+    public int fieldInt30996;
+    public int fieldInt30997;
+    public int fieldInt30998;
+    public int fieldInt30999;
+    public int fieldInt31000;
+    public int fieldInt31001;
+    public int fieldInt31002;
+    public int fieldInt31003;
+    public int fieldInt31004;
+    public int fieldInt31005;
+    public int fieldInt31006;
+    public int fieldInt31007;
+    public int fieldInt31008;
+    public int fieldInt31009;
+    public int fieldInt31010;
+    public int fieldInt31011;
+    public int fieldInt31012;
+    public int fieldInt31013;
+    public int fieldInt31014;
+    public int fieldInt31015;
+    public int fieldInt31016;
+    public int fieldInt31017;
+    public int fieldInt31018;
+    public int fieldInt31019;
+    public int fieldInt31020;
+    public int fieldInt31021;
+    public int fieldInt31022;
+    public int fieldInt31023;
+    public int fieldInt31024;
+    public int fieldInt31025;
+    public int fieldInt31026;
+    public int fieldInt31027;
+    public int fieldInt31028;
+    public int fieldInt31029;
+    public int fieldInt31030;
+    public int fieldInt31031;
+    public int fieldInt31032;
+    public int fieldInt31033;
+    public int fieldInt31034;
+    public int fieldInt31035;
+    public int fieldInt31036;
+    public int fieldInt31037;
+    public int fieldInt31038;
+    public int fieldInt31039;
+    public int fieldInt31040;
+    public int fieldInt31041;
+    public int fieldInt31042;
+    public int fieldInt31043;
+    public int fieldInt31044;
+    public int fieldInt31045;
+    public int fieldInt31046;
+    public int fieldInt31047;
+    public int fieldInt31048;
+    public int fieldInt31049;
+    public int fieldInt31050;
+    public int fieldInt31051;
+    public int fieldInt31052;
+    public int fieldInt31053;
+    public int fieldInt31054;
+    public int fieldInt31055;
+    public int fieldInt31056;
+    public int fieldInt31057;
+    public int fieldInt31058;
+    public int fieldInt31059;
+    public int fieldInt31060;
+    public int fieldInt31061;
+    public int fieldInt31062;
+    public int fieldInt31063;
+    public int fieldInt31064;
+    public int fieldInt31065;
+    public int fieldInt31066;
+    public int fieldInt31067;
+    public int fieldInt31068;
+    public int fieldInt31069;
+    public int fieldInt31070;
+    public int fieldInt31071;
+    public int fieldInt31072;
+    public int fieldInt31073;
+    public int fieldInt31074;
+    public int fieldInt31075;
+    public int fieldInt31076;
+    public int fieldInt31077;
+    public int fieldInt31078;
+    public int fieldInt31079;
+    public int fieldInt31080;
+    public int fieldInt31081;
+    public int fieldInt31082;
+    public int fieldInt31083;
+    public int fieldInt31084;
+    public int fieldInt31085;
+    public int fieldInt31086;
+    public int fieldInt31087;
+    public int fieldInt31088;
+    public int fieldInt31089;
+    public int fieldInt31090;
+    public int fieldInt31091;
+    public int fieldInt31092;
+    public int fieldInt31093;
+    public int fieldInt31094;
+    public int fieldInt31095;
+    public int fieldInt31096;
+    public int fieldInt31097;
+    public int fieldInt31098;
+    public int fieldInt31099;
+    public int fieldInt31100;
+    public int fieldInt31101;
+    public int fieldInt31102;
+    public int fieldInt31103;
+    public int fieldInt31104;
+    public int fieldInt31105;
+    public int fieldInt31106;
+    public int fieldInt31107;
+    public int fieldInt31108;
+    public int fieldInt31109;
+    public int fieldInt31110;
+    public int fieldInt31111;
+    public int fieldInt31112;
+    public int fieldInt31113;
+    public int fieldInt31114;
+    public int fieldInt31115;
+    public int fieldInt31116;
+    public int fieldInt31117;
+    public int fieldInt31118;
+    public int fieldInt31119;
+    public int fieldInt31120;
+    public int fieldInt31121;
+    public int fieldInt31122;
+    public int fieldInt31123;
+    public int fieldInt31124;
+    public int fieldInt31125;
+    public int fieldInt31126;
+    public int fieldInt31127;
+    public int fieldInt31128;
+    public int fieldInt31129;
+    public int fieldInt31130;
+    public int fieldInt31131;
+    public int fieldInt31132;
+    public int fieldInt31133;
+    public int fieldInt31134;
+    public int fieldInt31135;
+    public int fieldInt31136;
+    public int fieldInt31137;
+    public int fieldInt31138;
+    public int fieldInt31139;
+    public int fieldInt31140;
+    public int fieldInt31141;
+    public int fieldInt31142;
+    public int fieldInt31143;
+    public int fieldInt31144;
+    public int fieldInt31145;
+    public int fieldInt31146;
+    public int fieldInt31147;
+    public int fieldInt31148;
+    public int fieldInt31149;
+    public int fieldInt31150;
+    public int fieldInt31151;
+    public int fieldInt31152;
+    public int fieldInt31153;
+    public int fieldInt31154;
+    public int fieldInt31155;
+    public int fieldInt31156;
+    public int fieldInt31157;
+    public int fieldInt31158;
+    public int fieldInt31159;
+    public int fieldInt31160;
+    public int fieldInt31161;
+    public int fieldInt31162;
+    public int fieldInt31163;
+    public int fieldInt31164;
+    public int fieldInt31165;
+    public int fieldInt31166;
+    public int fieldInt31167;
+    public int fieldInt31168;
+    public int fieldInt31169;
+    public int fieldInt31170;
+    public int fieldInt31171;
+    public int fieldInt31172;
+    public int fieldInt31173;
+    public int fieldInt31174;
+    public int fieldInt31175;
+    public int fieldInt31176;
+    public int fieldInt31177;
+    public int fieldInt31178;
+    public int fieldInt31179;
+    public int fieldInt31180;
+    public int fieldInt31181;
+    public int fieldInt31182;
+    public int fieldInt31183;
+    public int fieldInt31184;
+    public int fieldInt31185;
+    public int fieldInt31186;
+    public int fieldInt31187;
+    public int fieldInt31188;
+    public int fieldInt31189;
+    public int fieldInt31190;
+    public int fieldInt31191;
+    public int fieldInt31192;
+    public int fieldInt31193;
+    public int fieldInt31194;
+    public int fieldInt31195;
+    public int fieldInt31196;
+    public int fieldInt31197;
+    public int fieldInt31198;
+    public int fieldInt31199;
+    public int fieldInt31200;
+    public int fieldInt31201;
+    public int fieldInt31202;
+    public int fieldInt31203;
+    public int fieldInt31204;
+    public int fieldInt31205;
+    public int fieldInt31206;
+    public int fieldInt31207;
+    public int fieldInt31208;
+    public int fieldInt31209;
+    public int fieldInt31210;
+    public int fieldInt31211;
+    public int fieldInt31212;
+    public int fieldInt31213;
+    public int fieldInt31214;
+    public int fieldInt31215;
+    public int fieldInt31216;
+    public int fieldInt31217;
+    public int fieldInt31218;
+    public int fieldInt31219;
+    public int fieldInt31220;
+    public int fieldInt31221;
+    public int fieldInt31222;
+    public int fieldInt31223;
+    public int fieldInt31224;
+    public int fieldInt31225;
+    public int fieldInt31226;
+    public int fieldInt31227;
+    public int fieldInt31228;
+    public int fieldInt31229;
+    public int fieldInt31230;
+    public int fieldInt31231;
+    public int fieldInt31232;
+    public int fieldInt31233;
+    public int fieldInt31234;
+    public int fieldInt31235;
+    public int fieldInt31236;
+    public int fieldInt31237;
+    public int fieldInt31238;
+    public int fieldInt31239;
+    public int fieldInt31240;
+    public int fieldInt31241;
+    public int fieldInt31242;
+    public int fieldInt31243;
+    public int fieldInt31244;
+    public int fieldInt31245;
+    public int fieldInt31246;
+    public int fieldInt31247;
+    public int fieldInt31248;
+    public int fieldInt31249;
+    public int fieldInt31250;
+    public int fieldInt31251;
+    public int fieldInt31252;
+    public int fieldInt31253;
+    public int fieldInt31254;
+    public int fieldInt31255;
+    public int fieldInt31256;
+    public int fieldInt31257;
+    public int fieldInt31258;
+    public int fieldInt31259;
+    public int fieldInt31260;
+    public int fieldInt31261;
+    public int fieldInt31262;
+    public int fieldInt31263;
+    public int fieldInt31264;
+    public int fieldInt31265;
+    public int fieldInt31266;
+    public int fieldInt31267;
+    public int fieldInt31268;
+    public int fieldInt31269;
+    public int fieldInt31270;
+    public int fieldInt31271;
+    public int fieldInt31272;
+    public int fieldInt31273;
+    public int fieldInt31274;
+    public int fieldInt31275;
+    public int fieldInt31276;
+    public int fieldInt31277;
+    public int fieldInt31278;
+    public int fieldInt31279;
+    public int fieldInt31280;
+    public int fieldInt31281;
+    public int fieldInt31282;
+    public int fieldInt31283;
+    public int fieldInt31284;
+    public int fieldInt31285;
+    public int fieldInt31286;
+    public int fieldInt31287;
+    public int fieldInt31288;
+    public int fieldInt31289;
+    public int fieldInt31290;
+    public int fieldInt31291;
+    public int fieldInt31292;
+    public int fieldInt31293;
+    public int fieldInt31294;
+    public int fieldInt31295;
+    public int fieldInt31296;
+    public int fieldInt31297;
+    public int fieldInt31298;
+    public int fieldInt31299;
+    public int fieldInt31300;
+    public int fieldInt31301;
+    public int fieldInt31302;
+    public int fieldInt31303;
+    public int fieldInt31304;
+    public int fieldInt31305;
+    public int fieldInt31306;
+    public int fieldInt31307;
+    public int fieldInt31308;
+    public int fieldInt31309;
+    public int fieldInt31310;
+    public int fieldInt31311;
+    public int fieldInt31312;
+    public int fieldInt31313;
+    public int fieldInt31314;
+    public int fieldInt31315;
+    public int fieldInt31316;
+    public int fieldInt31317;
+    public int fieldInt31318;
+    public int fieldInt31319;
+    public int fieldInt31320;
+    public int fieldInt31321;
+    public int fieldInt31322;
+    public int fieldInt31323;
+    public int fieldInt31324;
+    public int fieldInt31325;
+    public int fieldInt31326;
+    public int fieldInt31327;
+    public int fieldInt31328;
+    public int fieldInt31329;
+    public int fieldInt31330;
+    public int fieldInt31331;
+    public int fieldInt31332;
+    public int fieldInt31333;
+    public int fieldInt31334;
+    public int fieldInt31335;
+    public int fieldInt31336;
+    public int fieldInt31337;
+    public int fieldInt31338;
+    public int fieldInt31339;
+    public int fieldInt31340;
+    public int fieldInt31341;
+    public int fieldInt31342;
+    public int fieldInt31343;
+    public int fieldInt31344;
+    public int fieldInt31345;
+    public int fieldInt31346;
+    public int fieldInt31347;
+    public int fieldInt31348;
+    public int fieldInt31349;
+    public int fieldInt31350;
+    public int fieldInt31351;
+    public int fieldInt31352;
+    public int fieldInt31353;
+    public int fieldInt31354;
+    public int fieldInt31355;
+    public int fieldInt31356;
+    public int fieldInt31357;
+    public int fieldInt31358;
+    public int fieldInt31359;
+    public int fieldInt31360;
+    public int fieldInt31361;
+    public int fieldInt31362;
+    public int fieldInt31363;
+    public int fieldInt31364;
+    public int fieldInt31365;
+    public int fieldInt31366;
+    public int fieldInt31367;
+    public int fieldInt31368;
+    public int fieldInt31369;
+    public int fieldInt31370;
+    public int fieldInt31371;
+    public int fieldInt31372;
+    public int fieldInt31373;
+    public int fieldInt31374;
+    public int fieldInt31375;
+    public int fieldInt31376;
+    public int fieldInt31377;
+    public int fieldInt31378;
+    public int fieldInt31379;
+    public int fieldInt31380;
+    public int fieldInt31381;
+    public int fieldInt31382;
+    public int fieldInt31383;
+    public int fieldInt31384;
+    public int fieldInt31385;
+    public int fieldInt31386;
+    public int fieldInt31387;
+    public int fieldInt31388;
+    public int fieldInt31389;
+    public int fieldInt31390;
+    public int fieldInt31391;
+    public int fieldInt31392;
+    public int fieldInt31393;
+    public int fieldInt31394;
+    public int fieldInt31395;
+    public int fieldInt31396;
+    public int fieldInt31397;
+    public int fieldInt31398;
+    public int fieldInt31399;
+    public int fieldInt31400;
+    public int fieldInt31401;
+    public int fieldInt31402;
+    public int fieldInt31403;
+    public int fieldInt31404;
+    public int fieldInt31405;
+    public int fieldInt31406;
+    public int fieldInt31407;
+    public int fieldInt31408;
+    public int fieldInt31409;
+    public int fieldInt31410;
+    public int fieldInt31411;
+    public int fieldInt31412;
+    public int fieldInt31413;
+    public int fieldInt31414;
+    public int fieldInt31415;
+    public int fieldInt31416;
+    public int fieldInt31417;
+    public int fieldInt31418;
+    public int fieldInt31419;
+    public int fieldInt31420;
+    public int fieldInt31421;
+    public int fieldInt31422;
+    public int fieldInt31423;
+    public int fieldInt31424;
+    public int fieldInt31425;
+    public int fieldInt31426;
+    public int fieldInt31427;
+    public int fieldInt31428;
+    public int fieldInt31429;
+    public int fieldInt31430;
+    public int fieldInt31431;
+    public int fieldInt31432;
+    public int fieldInt31433;
+    public int fieldInt31434;
+    public int fieldInt31435;
+    public int fieldInt31436;
+    public int fieldInt31437;
+    public int fieldInt31438;
+    public int fieldInt31439;
+    public int fieldInt31440;
+    public int fieldInt31441;
+    public int fieldInt31442;
+    public int fieldInt31443;
+    public int fieldInt31444;
+    public int fieldInt31445;
+    public int fieldInt31446;
+    public int fieldInt31447;
+    public int fieldInt31448;
+    public int fieldInt31449;
+    public int fieldInt31450;
+    public int fieldInt31451;
+    public int fieldInt31452;
+    public int fieldInt31453;
+    public int fieldInt31454;
+    public int fieldInt31455;
+    public int fieldInt31456;
+    public int fieldInt31457;
+    public int fieldInt31458;
+    public int fieldInt31459;
+    public int fieldInt31460;
+    public int fieldInt31461;
+    public int fieldInt31462;
+    public int fieldInt31463;
+    public int fieldInt31464;
+    public int fieldInt31465;
+    public int fieldInt31466;
+    public int fieldInt31467;
+    public int fieldInt31468;
+    public int fieldInt31469;
+    public int fieldInt31470;
+    public int fieldInt31471;
+    public int fieldInt31472;
+    public int fieldInt31473;
+    public int fieldInt31474;
+    public int fieldInt31475;
+    public int fieldInt31476;
+    public int fieldInt31477;
+    public int fieldInt31478;
+    public int fieldInt31479;
+    public int fieldInt31480;
+    public int fieldInt31481;
+    public int fieldInt31482;
+    public int fieldInt31483;
+    public int fieldInt31484;
+    public int fieldInt31485;
+    public int fieldInt31486;
+    public int fieldInt31487;
+    public int fieldInt31488;
+    public int fieldInt31489;
+    public int fieldInt31490;
+    public int fieldInt31491;
+    public int fieldInt31492;
+    public int fieldInt31493;
+    public int fieldInt31494;
+    public int fieldInt31495;
+    public int fieldInt31496;
+    public int fieldInt31497;
+    public int fieldInt31498;
+    public int fieldInt31499;
+    public int fieldInt31500;
+    public int fieldInt31501;
+    public int fieldInt31502;
+    public int fieldInt31503;
+    public int fieldInt31504;
+    public int fieldInt31505;
+    public int fieldInt31506;
+    public int fieldInt31507;
+    public int fieldInt31508;
+    public int fieldInt31509;
+    public int fieldInt31510;
+    public int fieldInt31511;
+    public int fieldInt31512;
+    public int fieldInt31513;
+    public int fieldInt31514;
+    public int fieldInt31515;
+    public int fieldInt31516;
+    public int fieldInt31517;
+    public int fieldInt31518;
+    public int fieldInt31519;
+    public int fieldInt31520;
+    public int fieldInt31521;
+    public int fieldInt31522;
+    public int fieldInt31523;
+    public int fieldInt31524;
+    public int fieldInt31525;
+    public int fieldInt31526;
+    public int fieldInt31527;
+    public int fieldInt31528;
+    public int fieldInt31529;
+    public int fieldInt31530;
+    public int fieldInt31531;
+    public int fieldInt31532;
+    public int fieldInt31533;
+    public int fieldInt31534;
+    public int fieldInt31535;
+    public int fieldInt31536;
+    public int fieldInt31537;
+    public int fieldInt31538;
+    public int fieldInt31539;
+    public int fieldInt31540;
+    public int fieldInt31541;
+    public int fieldInt31542;
+    public int fieldInt31543;
+    public int fieldInt31544;
+    public int fieldInt31545;
+    public int fieldInt31546;
+    public int fieldInt31547;
+    public int fieldInt31548;
+    public int fieldInt31549;
+    public int fieldInt31550;
+    public int fieldInt31551;
+    public int fieldInt31552;
+    public int fieldInt31553;
+    public int fieldInt31554;
+    public int fieldInt31555;
+    public int fieldInt31556;
+    public int fieldInt31557;
+    public int fieldInt31558;
+    public int fieldInt31559;
+    public int fieldInt31560;
+    public int fieldInt31561;
+    public int fieldInt31562;
+    public int fieldInt31563;
+    public int fieldInt31564;
+    public int fieldInt31565;
+    public int fieldInt31566;
+    public int fieldInt31567;
+    public int fieldInt31568;
+    public int fieldInt31569;
+    public int fieldInt31570;
+    public int fieldInt31571;
+    public int fieldInt31572;
+    public int fieldInt31573;
+    public int fieldInt31574;
+    public int fieldInt31575;
+    public int fieldInt31576;
+    public int fieldInt31577;
+    public int fieldInt31578;
+    public int fieldInt31579;
+    public int fieldInt31580;
+    public int fieldInt31581;
+    public int fieldInt31582;
+    public int fieldInt31583;
+    public int fieldInt31584;
+    public int fieldInt31585;
+    public int fieldInt31586;
+    public int fieldInt31587;
+    public int fieldInt31588;
+    public int fieldInt31589;
+    public int fieldInt31590;
+    public int fieldInt31591;
+    public int fieldInt31592;
+    public int fieldInt31593;
+    public int fieldInt31594;
+    public int fieldInt31595;
+    public int fieldInt31596;
+    public int fieldInt31597;
+    public int fieldInt31598;
+    public int fieldInt31599;
+    public int fieldInt31600;
+    public int fieldInt31601;
+    public int fieldInt31602;
+    public int fieldInt31603;
+    public int fieldInt31604;
+    public int fieldInt31605;
+    public int fieldInt31606;
+    public int fieldInt31607;
+    public int fieldInt31608;
+    public int fieldInt31609;
+    public int fieldInt31610;
+    public int fieldInt31611;
+    public int fieldInt31612;
+    public int fieldInt31613;
+    public int fieldInt31614;
+    public int fieldInt31615;
+    public int fieldInt31616;
+    public int fieldInt31617;
+    public int fieldInt31618;
+    public int fieldInt31619;
+    public int fieldInt31620;
+    public int fieldInt31621;
+    public int fieldInt31622;
+    public int fieldInt31623;
+    public int fieldInt31624;
+    public int fieldInt31625;
+    public int fieldInt31626;
+    public int fieldInt31627;
+    public int fieldInt31628;
+    public int fieldInt31629;
+    public int fieldInt31630;
+    public int fieldInt31631;
+    public int fieldInt31632;
+    public int fieldInt31633;
+    public int fieldInt31634;
+    public int fieldInt31635;
+    public int fieldInt31636;
+    public int fieldInt31637;
+    public int fieldInt31638;
+    public int fieldInt31639;
+    public int fieldInt31640;
+    public int fieldInt31641;
+    public int fieldInt31642;
+    public int fieldInt31643;
+    public int fieldInt31644;
+    public int fieldInt31645;
+    public int fieldInt31646;
+    public int fieldInt31647;
+    public int fieldInt31648;
+    public int fieldInt31649;
+    public int fieldInt31650;
+    public int fieldInt31651;
+    public int fieldInt31652;
+    public int fieldInt31653;
+    public int fieldInt31654;
+    public int fieldInt31655;
+    public int fieldInt31656;
+    public int fieldInt31657;
+    public int fieldInt31658;
+    public int fieldInt31659;
+    public int fieldInt31660;
+    public int fieldInt31661;
+    public int fieldInt31662;
+    public int fieldInt31663;
+    public int fieldInt31664;
+    public int fieldInt31665;
+    public int fieldInt31666;
+    public int fieldInt31667;
+    public int fieldInt31668;
+    public int fieldInt31669;
+    public int fieldInt31670;
+    public int fieldInt31671;
+    public int fieldInt31672;
+    public int fieldInt31673;
+    public int fieldInt31674;
+    public int fieldInt31675;
+    public int fieldInt31676;
+    public int fieldInt31677;
+    public int fieldInt31678;
+    public int fieldInt31679;
+    public int fieldInt31680;
+    public int fieldInt31681;
+    public int fieldInt31682;
+    public int fieldInt31683;
+    public int fieldInt31684;
+    public int fieldInt31685;
+    public int fieldInt31686;
+    public int fieldInt31687;
+    public int fieldInt31688;
+    public int fieldInt31689;
+    public int fieldInt31690;
+    public int fieldInt31691;
+    public int fieldInt31692;
+    public int fieldInt31693;
+    public int fieldInt31694;
+    public int fieldInt31695;
+    public int fieldInt31696;
+    public int fieldInt31697;
+    public int fieldInt31698;
+    public int fieldInt31699;
+    public int fieldInt31700;
+    public int fieldInt31701;
+    public int fieldInt31702;
+    public int fieldInt31703;
+    public int fieldInt31704;
+    public int fieldInt31705;
+    public int fieldInt31706;
+    public int fieldInt31707;
+    public int fieldInt31708;
+    public int fieldInt31709;
+    public int fieldInt31710;
+    public int fieldInt31711;
+    public int fieldInt31712;
+    public int fieldInt31713;
+    public int fieldInt31714;
+    public int fieldInt31715;
+    public int fieldInt31716;
+    public int fieldInt31717;
+    public int fieldInt31718;
+    public int fieldInt31719;
+    public int fieldInt31720;
+    public int fieldInt31721;
+    public int fieldInt31722;
+    public int fieldInt31723;
+    public int fieldInt31724;
+    public int fieldInt31725;
+    public int fieldInt31726;
+    public int fieldInt31727;
+    public int fieldInt31728;
+    public int fieldInt31729;
+    public int fieldInt31730;
+    public int fieldInt31731;
+    public int fieldInt31732;
+    public int fieldInt31733;
+    public int fieldInt31734;
+    public int fieldInt31735;
+    public int fieldInt31736;
+    public int fieldInt31737;
+    public int fieldInt31738;
+    public int fieldInt31739;
+    public int fieldInt31740;
+    public int fieldInt31741;
+    public int fieldInt31742;
+    public int fieldInt31743;
+    public int fieldInt31744;
+    public int fieldInt31745;
+    public int fieldInt31746;
+    public int fieldInt31747;
+    public int fieldInt31748;
+    public int fieldInt31749;
+    public int fieldInt31750;
+    public int fieldInt31751;
+    public int fieldInt31752;
+    public int fieldInt31753;
+    public int fieldInt31754;
+    public int fieldInt31755;
+    public int fieldInt31756;
+    public int fieldInt31757;
+    public int fieldInt31758;
+    public int fieldInt31759;
+    public int fieldInt31760;
+    public int fieldInt31761;
+    public int fieldInt31762;
+    public int fieldInt31763;
+    public int fieldInt31764;
+    public int fieldInt31765;
+    public int fieldInt31766;
+    public int fieldInt31767;
+    public int fieldInt31768;
+    public int fieldInt31769;
+    public int fieldInt31770;
+    public int fieldInt31771;
+    public int fieldInt31772;
+    public int fieldInt31773;
+    public int fieldInt31774;
+    public int fieldInt31775;
+    public int fieldInt31776;
+    public int fieldInt31777;
+    public int fieldInt31778;
+    public int fieldInt31779;
+    public int fieldInt31780;
+    public int fieldInt31781;
+    public int fieldInt31782;
+    public int fieldInt31783;
+    public int fieldInt31784;
+    public int fieldInt31785;
+    public int fieldInt31786;
+    public int fieldInt31787;
+    public int fieldInt31788;
+    public int fieldInt31789;
+    public int fieldInt31790;
+    public int fieldInt31791;
+    public int fieldInt31792;
+    public int fieldInt31793;
+    public int fieldInt31794;
+    public int fieldInt31795;
+    public int fieldInt31796;
+    public int fieldInt31797;
+    public int fieldInt31798;
+    public int fieldInt31799;
+    public int fieldInt31800;
+    public int fieldInt31801;
+    public int fieldInt31802;
+    public int fieldInt31803;
+    public int fieldInt31804;
+    public int fieldInt31805;
+    public int fieldInt31806;
+    public int fieldInt31807;
+    public int fieldInt31808;
+    public int fieldInt31809;
+    public int fieldInt31810;
+    public int fieldInt31811;
+    public int fieldInt31812;
+    public int fieldInt31813;
+    public int fieldInt31814;
+    public int fieldInt31815;
+    public int fieldInt31816;
+    public int fieldInt31817;
+    public int fieldInt31818;
+    public int fieldInt31819;
+    public int fieldInt31820;
+    public int fieldInt31821;
+    public int fieldInt31822;
+    public int fieldInt31823;
+    public int fieldInt31824;
+    public int fieldInt31825;
+    public int fieldInt31826;
+    public int fieldInt31827;
+    public int fieldInt31828;
+    public int fieldInt31829;
+    public int fieldInt31830;
+    public int fieldInt31831;
+    public int fieldInt31832;
+    public int fieldInt31833;
+    public int fieldInt31834;
+    public int fieldInt31835;
+    public int fieldInt31836;
+    public int fieldInt31837;
+    public int fieldInt31838;
+    public int fieldInt31839;
+    public int fieldInt31840;
+    public int fieldInt31841;
+    public int fieldInt31842;
+    public int fieldInt31843;
+    public int fieldInt31844;
+    public int fieldInt31845;
+    public int fieldInt31846;
+    public int fieldInt31847;
+    public int fieldInt31848;
+    public int fieldInt31849;
+    public int fieldInt31850;
+    public int fieldInt31851;
+    public int fieldInt31852;
+    public int fieldInt31853;
+    public int fieldInt31854;
+    public int fieldInt31855;
+    public int fieldInt31856;
+    public int fieldInt31857;
+    public int fieldInt31858;
+    public int fieldInt31859;
+    public int fieldInt31860;
+    public int fieldInt31861;
+    public int fieldInt31862;
+    public int fieldInt31863;
+    public int fieldInt31864;
+    public int fieldInt31865;
+    public int fieldInt31866;
+    public int fieldInt31867;
+    public int fieldInt31868;
+    public int fieldInt31869;
+    public int fieldInt31870;
+    public int fieldInt31871;
+    public int fieldInt31872;
+    public int fieldInt31873;
+    public int fieldInt31874;
+    public int fieldInt31875;
+    public int fieldInt31876;
+    public int fieldInt31877;
+    public int fieldInt31878;
+    public int fieldInt31879;
+    public int fieldInt31880;
+    public int fieldInt31881;
+    public int fieldInt31882;
+    public int fieldInt31883;
+    public int fieldInt31884;
+    public int fieldInt31885;
+    public int fieldInt31886;
+    public int fieldInt31887;
+    public int fieldInt31888;
+    public int fieldInt31889;
+    public int fieldInt31890;
+    public int fieldInt31891;
+    public int fieldInt31892;
+    public int fieldInt31893;
+    public int fieldInt31894;
+    public int fieldInt31895;
+    public int fieldInt31896;
+    public int fieldInt31897;
+    public int fieldInt31898;
+    public int fieldInt31899;
+    public int fieldInt31900;
+    public int fieldInt31901;
+    public int fieldInt31902;
+    public int fieldInt31903;
+    public int fieldInt31904;
+    public int fieldInt31905;
+    public int fieldInt31906;
+    public int fieldInt31907;
+    public int fieldInt31908;
+    public int fieldInt31909;
+    public int fieldInt31910;
+    public int fieldInt31911;
+    public int fieldInt31912;
+    public int fieldInt31913;
+    public int fieldInt31914;
+    public int fieldInt31915;
+    public int fieldInt31916;
+    public int fieldInt31917;
+    public int fieldInt31918;
+    public int fieldInt31919;
+    public int fieldInt31920;
+    public int fieldInt31921;
+    public int fieldInt31922;
+    public int fieldInt31923;
+    public int fieldInt31924;
+    public int fieldInt31925;
+    public int fieldInt31926;
+    public int fieldInt31927;
+    public int fieldInt31928;
+    public int fieldInt31929;
+    public int fieldInt31930;
+    public int fieldInt31931;
+    public int fieldInt31932;
+    public int fieldInt31933;
+    public int fieldInt31934;
+    public int fieldInt31935;
+    public int fieldInt31936;
+    public int fieldInt31937;
+    public int fieldInt31938;
+    public int fieldInt31939;
+    public int fieldInt31940;
+    public int fieldInt31941;
+    public int fieldInt31942;
+    public int fieldInt31943;
+    public int fieldInt31944;
+    public int fieldInt31945;
+    public int fieldInt31946;
+    public int fieldInt31947;
+    public int fieldInt31948;
+    public int fieldInt31949;
+    public int fieldInt31950;
+    public int fieldInt31951;
+    public int fieldInt31952;
+    public int fieldInt31953;
+    public int fieldInt31954;
+    public int fieldInt31955;
+    public int fieldInt31956;
+    public int fieldInt31957;
+    public int fieldInt31958;
+    public int fieldInt31959;
+    public int fieldInt31960;
+    public int fieldInt31961;
+    public int fieldInt31962;
+    public int fieldInt31963;
+    public int fieldInt31964;
+    public int fieldInt31965;
+    public int fieldInt31966;
+    public int fieldInt31967;
+    public int fieldInt31968;
+    public int fieldInt31969;
+    public int fieldInt31970;
+    public int fieldInt31971;
+    public int fieldInt31972;
+    public int fieldInt31973;
+    public int fieldInt31974;
+    public int fieldInt31975;
+    public int fieldInt31976;
+    public int fieldInt31977;
+    public int fieldInt31978;
+    public int fieldInt31979;
+    public int fieldInt31980;
+    public int fieldInt31981;
+    public int fieldInt31982;
+    public int fieldInt31983;
+    public int fieldInt31984;
+    public int fieldInt31985;
+    public int fieldInt31986;
+    public int fieldInt31987;
+    public int fieldInt31988;
+    public int fieldInt31989;
+    public int fieldInt31990;
+    public int fieldInt31991;
+    public int fieldInt31992;
+    public int fieldInt31993;
+    public int fieldInt31994;
+    public int fieldInt31995;
+    public int fieldInt31996;
+    public int fieldInt31997;
+    public int fieldInt31998;
+    public int fieldInt31999;
+    public int fieldInt32000;
+    public int fieldInt32001;
+    public int fieldInt32002;
+    public int fieldInt32003;
+    public int fieldInt32004;
+    public int fieldInt32005;
+    public int fieldInt32006;
+    public int fieldInt32007;
+    public int fieldInt32008;
+    public int fieldInt32009;
+    public int fieldInt32010;
+    public int fieldInt32011;
+    public int fieldInt32012;
+    public int fieldInt32013;
+    public int fieldInt32014;
+    public int fieldInt32015;
+    public int fieldInt32016;
+    public int fieldInt32017;
+    public int fieldInt32018;
+    public int fieldInt32019;
+    public int fieldInt32020;
+    public int fieldInt32021;
+    public int fieldInt32022;
+    public int fieldInt32023;
+    public int fieldInt32024;
+    public int fieldInt32025;
+    public int fieldInt32026;
+    public int fieldInt32027;
+    public int fieldInt32028;
+    public int fieldInt32029;
+    public int fieldInt32030;
+    public int fieldInt32031;
+    public int fieldInt32032;
+    public int fieldInt32033;
+    public int fieldInt32034;
+    public int fieldInt32035;
+    public int fieldInt32036;
+    public int fieldInt32037;
+    public int fieldInt32038;
+    public int fieldInt32039;
+    public int fieldInt32040;
+    public int fieldInt32041;
+    public int fieldInt32042;
+    public int fieldInt32043;
+    public int fieldInt32044;
+    public int fieldInt32045;
+    public int fieldInt32046;
+    public int fieldInt32047;
+    public int fieldInt32048;
+    public int fieldInt32049;
+    public int fieldInt32050;
+    public int fieldInt32051;
+    public int fieldInt32052;
+    public int fieldInt32053;
+    public int fieldInt32054;
+    public int fieldInt32055;
+    public int fieldInt32056;
+    public int fieldInt32057;
+    public int fieldInt32058;
+    public int fieldInt32059;
+    public int fieldInt32060;
+    public int fieldInt32061;
+    public int fieldInt32062;
+    public int fieldInt32063;
+    public int fieldInt32064;
+    public int fieldInt32065;
+    public int fieldInt32066;
+    public int fieldInt32067;
+    public int fieldInt32068;
+    public int fieldInt32069;
+    public int fieldInt32070;
+    public int fieldInt32071;
+    public int fieldInt32072;
+    public int fieldInt32073;
+    public int fieldInt32074;
+    public int fieldInt32075;
+    public int fieldInt32076;
+    public int fieldInt32077;
+    public int fieldInt32078;
+    public int fieldInt32079;
+    public int fieldInt32080;
+    public int fieldInt32081;
+    public int fieldInt32082;
+    public int fieldInt32083;
+    public int fieldInt32084;
+    public int fieldInt32085;
+    public int fieldInt32086;
+    public int fieldInt32087;
+    public int fieldInt32088;
+    public int fieldInt32089;
+    public int fieldInt32090;
+    public int fieldInt32091;
+    public int fieldInt32092;
+    public int fieldInt32093;
+    public int fieldInt32094;
+    public int fieldInt32095;
+    public int fieldInt32096;
+    public int fieldInt32097;
+    public int fieldInt32098;
+    public int fieldInt32099;
+    public int fieldInt32100;
+    public int fieldInt32101;
+    public int fieldInt32102;
+    public int fieldInt32103;
+    public int fieldInt32104;
+    public int fieldInt32105;
+    public int fieldInt32106;
+    public int fieldInt32107;
+    public int fieldInt32108;
+    public int fieldInt32109;
+    public int fieldInt32110;
+    public int fieldInt32111;
+    public int fieldInt32112;
+    public int fieldInt32113;
+    public int fieldInt32114;
+    public int fieldInt32115;
+    public int fieldInt32116;
+    public int fieldInt32117;
+    public int fieldInt32118;
+    public int fieldInt32119;
+    public int fieldInt32120;
+    public int fieldInt32121;
+    public int fieldInt32122;
+    public int fieldInt32123;
+    public int fieldInt32124;
+    public int fieldInt32125;
+    public int fieldInt32126;
+    public int fieldInt32127;
+    public int fieldInt32128;
+    public int fieldInt32129;
+    public int fieldInt32130;
+    public int fieldInt32131;
+    public int fieldInt32132;
+    public int fieldInt32133;
+    public int fieldInt32134;
+    public int fieldInt32135;
+    public int fieldInt32136;
+    public int fieldInt32137;
+    public int fieldInt32138;
+    public int fieldInt32139;
+    public int fieldInt32140;
+    public int fieldInt32141;
+    public int fieldInt32142;
+    public int fieldInt32143;
+    public int fieldInt32144;
+    public int fieldInt32145;
+    public int fieldInt32146;
+    public int fieldInt32147;
+    public int fieldInt32148;
+    public int fieldInt32149;
+    public int fieldInt32150;
+    public int fieldInt32151;
+    public int fieldInt32152;
+    public int fieldInt32153;
+    public int fieldInt32154;
+    public int fieldInt32155;
+    public int fieldInt32156;
+    public int fieldInt32157;
+    public int fieldInt32158;
+    public int fieldInt32159;
+    public int fieldInt32160;
+    public int fieldInt32161;
+    public int fieldInt32162;
+    public int fieldInt32163;
+    public int fieldInt32164;
+    public int fieldInt32165;
+    public int fieldInt32166;
+    public int fieldInt32167;
+    public int fieldInt32168;
+    public int fieldInt32169;
+    public int fieldInt32170;
+    public int fieldInt32171;
+    public int fieldInt32172;
+    public int fieldInt32173;
+    public int fieldInt32174;
+    public int fieldInt32175;
+    public int fieldInt32176;
+    public int fieldInt32177;
+    public int fieldInt32178;
+    public int fieldInt32179;
+    public int fieldInt32180;
+    public int fieldInt32181;
+    public int fieldInt32182;
+    public int fieldInt32183;
+    public int fieldInt32184;
+    public int fieldInt32185;
+    public int fieldInt32186;
+    public int fieldInt32187;
+    public int fieldInt32188;
+    public int fieldInt32189;
+    public int fieldInt32190;
+    public int fieldInt32191;
+    public int fieldInt32192;
+    public int fieldInt32193;
+    public int fieldInt32194;
+    public int fieldInt32195;
+    public int fieldInt32196;
+    public int fieldInt32197;
+    public int fieldInt32198;
+    public int fieldInt32199;
+    public int fieldInt32200;
+    public int fieldInt32201;
+    public int fieldInt32202;
+    public int fieldInt32203;
+    public int fieldInt32204;
+    public int fieldInt32205;
+    public int fieldInt32206;
+    public int fieldInt32207;
+    public int fieldInt32208;
+    public int fieldInt32209;
+    public int fieldInt32210;
+    public int fieldInt32211;
+    public int fieldInt32212;
+    public int fieldInt32213;
+    public int fieldInt32214;
+    public int fieldInt32215;
+    public int fieldInt32216;
+    public int fieldInt32217;
+    public int fieldInt32218;
+    public int fieldInt32219;
+    public int fieldInt32220;
+    public int fieldInt32221;
+    public int fieldInt32222;
+    public int fieldInt32223;
+    public int fieldInt32224;
+    public int fieldInt32225;
+    public int fieldInt32226;
+    public int fieldInt32227;
+    public int fieldInt32228;
+    public int fieldInt32229;
+    public int fieldInt32230;
+    public int fieldInt32231;
+    public int fieldInt32232;
+    public int fieldInt32233;
+    public int fieldInt32234;
+    public int fieldInt32235;
+    public int fieldInt32236;
+    public int fieldInt32237;
+    public int fieldInt32238;
+    public int fieldInt32239;
+    public int fieldInt32240;
+    public int fieldInt32241;
+    public int fieldInt32242;
+    public int fieldInt32243;
+    public int fieldInt32244;
+    public int fieldInt32245;
+    public int fieldInt32246;
+    public int fieldInt32247;
+    public int fieldInt32248;
+    public int fieldInt32249;
+    public int fieldInt32250;
+    public int fieldInt32251;
+    public int fieldInt32252;
+    public int fieldInt32253;
+    public int fieldInt32254;
+    public int fieldInt32255;
+    public int fieldInt32256;
+    public int fieldInt32257;
+    public int fieldInt32258;
+    public int fieldInt32259;
+    public int fieldInt32260;
+    public int fieldInt32261;
+    public int fieldInt32262;
+    public int fieldInt32263;
+    public int fieldInt32264;
+    public int fieldInt32265;
+    public int fieldInt32266;
+    public int fieldInt32267;
+    public int fieldInt32268;
+    public int fieldInt32269;
+    public int fieldInt32270;
+    public int fieldInt32271;
+    public int fieldInt32272;
+    public int fieldInt32273;
+    public int fieldInt32274;
+    public int fieldInt32275;
+    public int fieldInt32276;
+    public int fieldInt32277;
+    public int fieldInt32278;
+    public int fieldInt32279;
+    public int fieldInt32280;
+    public int fieldInt32281;
+    public int fieldInt32282;
+    public int fieldInt32283;
+    public int fieldInt32284;
+    public int fieldInt32285;
+    public int fieldInt32286;
+    public int fieldInt32287;
+    public int fieldInt32288;
+    public int fieldInt32289;
+    public int fieldInt32290;
+    public int fieldInt32291;
+    public int fieldInt32292;
+    public int fieldInt32293;
+    public int fieldInt32294;
+    public int fieldInt32295;
+    public int fieldInt32296;
+    public int fieldInt32297;
+    public int fieldInt32298;
+    public int fieldInt32299;
+    public int fieldInt32300;
+    public int fieldInt32301;
+    public int fieldInt32302;
+    public int fieldInt32303;
+    public int fieldInt32304;
+    public int fieldInt32305;
+    public int fieldInt32306;
+    public int fieldInt32307;
+    public int fieldInt32308;
+    public int fieldInt32309;
+    public int fieldInt32310;
+    public int fieldInt32311;
+    public int fieldInt32312;
+    public int fieldInt32313;
+    public int fieldInt32314;
+    public int fieldInt32315;
+    public int fieldInt32316;
+    public int fieldInt32317;
+    public int fieldInt32318;
+    public int fieldInt32319;
+    public int fieldInt32320;
+    public int fieldInt32321;
+    public int fieldInt32322;
+    public int fieldInt32323;
+    public int fieldInt32324;
+    public int fieldInt32325;
+    public int fieldInt32326;
+    public int fieldInt32327;
+    public int fieldInt32328;
+    public int fieldInt32329;
+    public int fieldInt32330;
+    public int fieldInt32331;
+    public int fieldInt32332;
+    public int fieldInt32333;
+    public int fieldInt32334;
+    public int fieldInt32335;
+    public int fieldInt32336;
+    public int fieldInt32337;
+    public int fieldInt32338;
+    public int fieldInt32339;
+    public int fieldInt32340;
+    public int fieldInt32341;
+    public int fieldInt32342;
+    public int fieldInt32343;
+    public int fieldInt32344;
+    public int fieldInt32345;
+    public int fieldInt32346;
+    public int fieldInt32347;
+    public int fieldInt32348;
+    public int fieldInt32349;
+    public int fieldInt32350;
+    public int fieldInt32351;
+    public int fieldInt32352;
+    public int fieldInt32353;
+    public int fieldInt32354;
+    public int fieldInt32355;
+    public int fieldInt32356;
+    public int fieldInt32357;
+    public int fieldInt32358;
+    public int fieldInt32359;
+    public int fieldInt32360;
+    public int fieldInt32361;
+    public int fieldInt32362;
+    public int fieldInt32363;
+    public int fieldInt32364;
+    public int fieldInt32365;
+    public int fieldInt32366;
+    public int fieldInt32367;
+    public int fieldInt32368;
+    public int fieldInt32369;
+    public int fieldInt32370;
+    public int fieldInt32371;
+    public int fieldInt32372;
+    public int fieldInt32373;
+    public int fieldInt32374;
+    public int fieldInt32375;
+    public int fieldInt32376;
+    public int fieldInt32377;
+    public int fieldInt32378;
+    public int fieldInt32379;
+    public int fieldInt32380;
+    public int fieldInt32381;
+    public int fieldInt32382;
+    public int fieldInt32383;
+    public int fieldInt32384;
+    public int fieldInt32385;
+    public int fieldInt32386;
+    public int fieldInt32387;
+    public int fieldInt32388;
+    public int fieldInt32389;
+    public int fieldInt32390;
+    public int fieldInt32391;
+    public int fieldInt32392;
+    public int fieldInt32393;
+    public int fieldInt32394;
+    public int fieldInt32395;
+    public int fieldInt32396;
+    public int fieldInt32397;
+    public int fieldInt32398;
+    public int fieldInt32399;
+    public int fieldInt32400;
+    public int fieldInt32401;
+    public int fieldInt32402;
+    public int fieldInt32403;
+    public int fieldInt32404;
+    public int fieldInt32405;
+    public int fieldInt32406;
+    public int fieldInt32407;
+    public int fieldInt32408;
+    public int fieldInt32409;
+    public int fieldInt32410;
+    public int fieldInt32411;
+    public int fieldInt32412;
+    public int fieldInt32413;
+    public int fieldInt32414;
+    public int fieldInt32415;
+    public int fieldInt32416;
+    public int fieldInt32417;
+    public int fieldInt32418;
+    public int fieldInt32419;
+    public int fieldInt32420;
+    public int fieldInt32421;
+    public int fieldInt32422;
+    public int fieldInt32423;
+    public int fieldInt32424;
+    public int fieldInt32425;
+    public int fieldInt32426;
+    public int fieldInt32427;
+    public int fieldInt32428;
+    public int fieldInt32429;
+    public int fieldInt32430;
+    public int fieldInt32431;
+    public int fieldInt32432;
+    public int fieldInt32433;
+    public int fieldInt32434;
+    public int fieldInt32435;
+    public int fieldInt32436;
+    public int fieldInt32437;
+    public int fieldInt32438;
+    public int fieldInt32439;
+    public int fieldInt32440;
+    public int fieldInt32441;
+    public int fieldInt32442;
+    public int fieldInt32443;
+    public int fieldInt32444;
+    public int fieldInt32445;
+    public int fieldInt32446;
+    public int fieldInt32447;
+    public int fieldInt32448;
+    public int fieldInt32449;
+    public int fieldInt32450;
+    public int fieldInt32451;
+    public int fieldInt32452;
+    public int fieldInt32453;
+    public int fieldInt32454;
+    public int fieldInt32455;
+    public int fieldInt32456;
+    public int fieldInt32457;
+    public int fieldInt32458;
+    public int fieldInt32459;
+    public int fieldInt32460;
+    public int fieldInt32461;
+    public int fieldInt32462;
+    public int fieldInt32463;
+    public int fieldInt32464;
+    public int fieldInt32465;
+    public int fieldInt32466;
+    public int fieldInt32467;
+    public int fieldInt32468;
+    public int fieldInt32469;
+    public int fieldInt32470;
+    public int fieldInt32471;
+    public int fieldInt32472;
+    public int fieldInt32473;
+    public int fieldInt32474;
+    public int fieldInt32475;
+    public int fieldInt32476;
+    public int fieldInt32477;
+    public int fieldInt32478;
+    public int fieldInt32479;
+    public int fieldInt32480;
+    public int fieldInt32481;
+    public int fieldInt32482;
+    public int fieldInt32483;
+    public int fieldInt32484;
+    public int fieldInt32485;
+    public int fieldInt32486;
+    public int fieldInt32487;
+    public int fieldInt32488;
+    public int fieldInt32489;
+    public int fieldInt32490;
+    public int fieldInt32491;
+    public int fieldInt32492;
+    public int fieldInt32493;
+    public int fieldInt32494;
+    public int fieldInt32495;
+    public int fieldInt32496;
+    public int fieldInt32497;
+    public int fieldInt32498;
+    public int fieldInt32499;
+    public int fieldInt32500;
+    public int fieldInt32501;
+    public int fieldInt32502;
+    public int fieldInt32503;
+    public int fieldInt32504;
+    public int fieldInt32505;
+    public int fieldInt32506;
+    public int fieldInt32507;
+    public int fieldInt32508;
+    public int fieldInt32509;
+    public int fieldInt32510;
+    public int fieldInt32511;
+    public int fieldInt32512;
+    public int fieldInt32513;
+    public int fieldInt32514;
+    public int fieldInt32515;
+    public int fieldInt32516;
+    public int fieldInt32517;
+    public int fieldInt32518;
+    public int fieldInt32519;
+    public int fieldInt32520;
+    public int fieldInt32521;
+    public int fieldInt32522;
+    public int fieldInt32523;
+    public int fieldInt32524;
+    public int fieldInt32525;
+    public int fieldInt32526;
+    public int fieldInt32527;
+    public int fieldInt32528;
+    public int fieldInt32529;
+    public int fieldInt32530;
+    public int fieldInt32531;
+    public int fieldInt32532;
+    public int fieldInt32533;
+    public int fieldInt32534;
+    public int fieldInt32535;
+    public int fieldInt32536;
+    public int fieldInt32537;
+    public int fieldInt32538;
+    public int fieldInt32539;
+    public int fieldInt32540;
+    public int fieldInt32541;
+    public int fieldInt32542;
+    public int fieldInt32543;
+    public int fieldInt32544;
+    public int fieldInt32545;
+    public int fieldInt32546;
+    public int fieldInt32547;
+    public int fieldInt32548;
+    public int fieldInt32549;
+    public int fieldInt32550;
+    public int fieldInt32551;
+    public int fieldInt32552;
+    public int fieldInt32553;
+    public int fieldInt32554;
+    public int fieldInt32555;
+    public int fieldInt32556;
+    public int fieldInt32557;
+    public int fieldInt32558;
+    public int fieldInt32559;
+    public int fieldInt32560;
+    public int fieldInt32561;
+    public int fieldInt32562;
+    public int fieldInt32563;
+    public int fieldInt32564;
+    public int fieldInt32565;
+    public int fieldInt32566;
+    public int fieldInt32567;
+    public int fieldInt32568;
+    public int fieldInt32569;
+    public int fieldInt32570;
+    public int fieldInt32571;
+    public int fieldInt32572;
+    public int fieldInt32573;
+    public int fieldInt32574;
+    public int fieldInt32575;
+    public int fieldInt32576;
+    public int fieldInt32577;
+    public int fieldInt32578;
+    public int fieldInt32579;
+    public int fieldInt32580;
+    public int fieldInt32581;
+    public int fieldInt32582;
+    public int fieldInt32583;
+    public int fieldInt32584;
+    public int fieldInt32585;
+    public int fieldInt32586;
+    public int fieldInt32587;
+    public int fieldInt32588;
+    public int fieldInt32589;
+    public int fieldInt32590;
+    public int fieldInt32591;
+    public int fieldInt32592;
+    public int fieldInt32593;
+    public int fieldInt32594;
+    public int fieldInt32595;
+    public int fieldInt32596;
+    public int fieldInt32597;
+    public int fieldInt32598;
+    public int fieldInt32599;
+    public int fieldInt32600;
+    public int fieldInt32601;
+    public int fieldInt32602;
+    public int fieldInt32603;
+    public int fieldInt32604;
+    public int fieldInt32605;
+    public int fieldInt32606;
+    public int fieldInt32607;
+    public int fieldInt32608;
+    public int fieldInt32609;
+    public int fieldInt32610;
+    public int fieldInt32611;
+    public int fieldInt32612;
+    public int fieldInt32613;
+    public int fieldInt32614;
+    public int fieldInt32615;
+    public int fieldInt32616;
+    public int fieldInt32617;
+    public int fieldInt32618;
+    public int fieldInt32619;
+    public int fieldInt32620;
+    public int fieldInt32621;
+    public int fieldInt32622;
+    public int fieldInt32623;
+    public int fieldInt32624;
+    public int fieldInt32625;
+    public int fieldInt32626;
+    public int fieldInt32627;
+    public int fieldInt32628;
+    public int fieldInt32629;
+    public int fieldInt32630;
+    public int fieldInt32631;
+    public int fieldInt32632;
+    public int fieldInt32633;
+    public int fieldInt32634;
+    public int fieldInt32635;
+    public int fieldInt32636;
+    public int fieldInt32637;
+    public int fieldInt32638;
+    public int fieldInt32639;
+    public int fieldInt32640;
+    public int fieldInt32641;
+    public int fieldInt32642;
+    public int fieldInt32643;
+    public int fieldInt32644;
+    public int fieldInt32645;
+    public int fieldInt32646;
+    public int fieldInt32647;
+    public int fieldInt32648;
+    public int fieldInt32649;
+    public int fieldInt32650;
+    public int fieldInt32651;
+    public int fieldInt32652;
+    public int fieldInt32653;
+    public int fieldInt32654;
+    public int fieldInt32655;
+    public int fieldInt32656;
+    public int fieldInt32657;
+    public int fieldInt32658;
+    public int fieldInt32659;
+    public int fieldInt32660;
+    public int fieldInt32661;
+    public int fieldInt32662;
+    public int fieldInt32663;
+    public int fieldInt32664;
+    public int fieldInt32665;
+    public int fieldInt32666;
+    public int fieldInt32667;
+    public int fieldInt32668;
+    public int fieldInt32669;
+    public int fieldInt32670;
+    public int fieldInt32671;
+    public int fieldInt32672;
+    public int fieldInt32673;
+    public int fieldInt32674;
+    public int fieldInt32675;
+    public int fieldInt32676;
+    public int fieldInt32677;
+    public int fieldInt32678;
+    public int fieldInt32679;
+    public int fieldInt32680;
+    public int fieldInt32681;
+    public int fieldInt32682;
+    public int fieldInt32683;
+    public int fieldInt32684;
+    public int fieldInt32685;
+    public int fieldInt32686;
+    public int fieldInt32687;
+    public int fieldInt32688;
+    public int fieldInt32689;
+    public int fieldInt32690;
+    public int fieldInt32691;
+    public int fieldInt32692;
+    public int fieldInt32693;
+    public int fieldInt32694;
+    public int fieldInt32695;
+    public int fieldInt32696;
+    public int fieldInt32697;
+    public int fieldInt32698;
+    public int fieldInt32699;
+    public int fieldInt32700;
+    public int fieldInt32701;
+    public int fieldInt32702;
+    public int fieldInt32703;
+    public int fieldInt32704;
+    public int fieldInt32705;
+    public int fieldInt32706;
+    public int fieldInt32707;
+    public int fieldInt32708;
+    public int fieldInt32709;
+    public int fieldInt32710;
+    public int fieldInt32711;
+    public int fieldInt32712;
+    public int fieldInt32713;
+    public int fieldInt32714;
+    public int fieldInt32715;
+    public int fieldInt32716;
+    public int fieldInt32717;
+    public int fieldInt32718;
+    public int fieldInt32719;
+    public int fieldInt32720;
+    public int fieldInt32721;
+    public int fieldInt32722;
+    public int fieldInt32723;
+    public int fieldInt32724;
+    public int fieldInt32725;
+    public int fieldInt32726;
+    public int fieldInt32727;
+    public int fieldInt32728;
+    public int fieldInt32729;
+    public int fieldInt32730;
+    public int fieldInt32731;
+    public int fieldInt32732;
+    public int fieldInt32733;
+    public int fieldInt32734;
+    public int fieldInt32735;
+    public int fieldInt32736;
+    public int fieldInt32737;
+    public int fieldInt32738;
+    public int fieldInt32739;
+    public int fieldInt32740;
+    public int fieldInt32741;
+    public int fieldInt32742;
+    public int fieldInt32743;
+    public int fieldInt32744;
+    public int fieldInt32745;
+    public int fieldInt32746;
+    public int fieldInt32747;
+    public int fieldInt32748;
+    public int fieldInt32749;
+    public int fieldInt32750;
+    public int fieldInt32751;
+    public int fieldInt32752;
+    public int fieldInt32753;
+    public int fieldInt32754;
+    public int fieldInt32755;
+    public int fieldInt32756;
+    public int fieldInt32757;
+    public int fieldInt32758;
+    public int fieldInt32759;
+    public int fieldInt32760;
+    public int fieldInt32761;
+    public int fieldInt32762;
+    public int fieldInt32763;
+    public int fieldInt32764;
+    public int fieldInt32765;
+    public int fieldInt32766;
+    public int fieldInt32767;
+    public int fieldInt32768;
+    public int fieldInt32769;
+    public int fieldInt32770;
+    public int fieldInt32771;
+    public int fieldInt32772;
+    public int fieldInt32773;
+    public int fieldInt32774;
+    public int fieldInt32775;
+    public int fieldInt32776;
+    public int fieldInt32777;
+    public int fieldInt32778;
+    public int fieldInt32779;
+    public int fieldInt32780;
+    public int fieldInt32781;
+    public int fieldInt32782;
+    public int fieldInt32783;
+    public int fieldInt32784;
+    public int fieldInt32785;
+    public int fieldInt32786;
+    public int fieldInt32787;
+    public int fieldInt32788;
+    public int fieldInt32789;
+    public int fieldInt32790;
+    public int fieldInt32791;
+    public int fieldInt32792;
+    public int fieldInt32793;
+    public int fieldInt32794;
+    public int fieldInt32795;
+    public int fieldInt32796;
+    public int fieldInt32797;
+    public int fieldInt32798;
+    public int fieldInt32799;
+    public int fieldInt32800;
+    public int fieldInt32801;
+    public int fieldInt32802;
+    public int fieldInt32803;
+    public int fieldInt32804;
+    public int fieldInt32805;
+    public int fieldInt32806;
+    public int fieldInt32807;
+    public int fieldInt32808;
+    public int fieldInt32809;
+    public int fieldInt32810;
+    public int fieldInt32811;
+    public int fieldInt32812;
+    public int fieldInt32813;
+    public int fieldInt32814;
+    public int fieldInt32815;
+    public int fieldInt32816;
+    public int fieldInt32817;
+    public int fieldInt32818;
+    public int fieldInt32819;
+    public int fieldInt32820;
+    public int fieldInt32821;
+    public int fieldInt32822;
+    public int fieldInt32823;
+    public int fieldInt32824;
+    public int fieldInt32825;
+    public int fieldInt32826;
+    public int fieldInt32827;
+    public int fieldInt32828;
+    public int fieldInt32829;
+    public int fieldInt32830;
+    public int fieldInt32831;
+    public int fieldInt32832;
+    public int fieldInt32833;
+    public int fieldInt32834;
+    public int fieldInt32835;
+    public int fieldInt32836;
+    public int fieldInt32837;
+    public int fieldInt32838;
+    public int fieldInt32839;
+    public int fieldInt32840;
+    public int fieldInt32841;
+    public int fieldInt32842;
+    public int fieldInt32843;
+    public int fieldInt32844;
+    public int fieldInt32845;
+    public int fieldInt32846;
+    public int fieldInt32847;
+    public int fieldInt32848;
+    public int fieldInt32849;
+    public int fieldInt32850;
+    public int fieldInt32851;
+    public int fieldInt32852;
+    public int fieldInt32853;
+    public int fieldInt32854;
+    public int fieldInt32855;
+    public int fieldInt32856;
+    public int fieldInt32857;
+    public int fieldInt32858;
+    public int fieldInt32859;
+    public int fieldInt32860;
+    public int fieldInt32861;
+    public int fieldInt32862;
+    public int fieldInt32863;
+    public int fieldInt32864;
+    public int fieldInt32865;
+    public int fieldInt32866;
+    public int fieldInt32867;
+    public int fieldInt32868;
+    public int fieldInt32869;
+    public int fieldInt32870;
+    public int fieldInt32871;
+    public int fieldInt32872;
+    public int fieldInt32873;
+    public int fieldInt32874;
+    public int fieldInt32875;
+    public int fieldInt32876;
+    public int fieldInt32877;
+    public int fieldInt32878;
+    public int fieldInt32879;
+    public int fieldInt32880;
+    public int fieldInt32881;
+    public int fieldInt32882;
+    public int fieldInt32883;
+    public int fieldInt32884;
+    public int fieldInt32885;
+    public int fieldInt32886;
+    public int fieldInt32887;
+    public int fieldInt32888;
+    public int fieldInt32889;
+    public int fieldInt32890;
+    public int fieldInt32891;
+    public int fieldInt32892;
+    public int fieldInt32893;
+    public int fieldInt32894;
+    public int fieldInt32895;
+    public int fieldInt32896;
+    public int fieldInt32897;
+    public int fieldInt32898;
+    public int fieldInt32899;
+    public int fieldInt32900;
+    public int fieldInt32901;
+    public int fieldInt32902;
+    public int fieldInt32903;
+    public int fieldInt32904;
+    public int fieldInt32905;
+    public int fieldInt32906;
+    public int fieldInt32907;
+    public int fieldInt32908;
+    public int fieldInt32909;
+    public int fieldInt32910;
+    public int fieldInt32911;
+    public int fieldInt32912;
+    public int fieldInt32913;
+    public int fieldInt32914;
+    public int fieldInt32915;
+    public int fieldInt32916;
+    public int fieldInt32917;
+    public int fieldInt32918;
+    public int fieldInt32919;
+    public int fieldInt32920;
+    public int fieldInt32921;
+    public int fieldInt32922;
+    public int fieldInt32923;
+    public int fieldInt32924;
+    public int fieldInt32925;
+    public int fieldInt32926;
+    public int fieldInt32927;
+    public int fieldInt32928;
+    public int fieldInt32929;
+    public int fieldInt32930;
+    public int fieldInt32931;
+    public int fieldInt32932;
+    public int fieldInt32933;
+    public int fieldInt32934;
+    public int fieldInt32935;
+    public int fieldInt32936;
+    public int fieldInt32937;
+    public int fieldInt32938;
+    public int fieldInt32939;
+    public int fieldInt32940;
+    public int fieldInt32941;
+    public int fieldInt32942;
+    public int fieldInt32943;
+    public int fieldInt32944;
+    public int fieldInt32945;
+    public int fieldInt32946;
+    public int fieldInt32947;
+    public int fieldInt32948;
+    public int fieldInt32949;
+    public int fieldInt32950;
+    public int fieldInt32951;
+    public int fieldInt32952;
+    public int fieldInt32953;
+    public int fieldInt32954;
+    public int fieldInt32955;
+    public int fieldInt32956;
+    public int fieldInt32957;
+    public int fieldInt32958;
+    public int fieldInt32959;
+    public int fieldInt32960;
+    public int fieldInt32961;
+    public int fieldInt32962;
+    public int fieldInt32963;
+    public int fieldInt32964;
+    public int fieldInt32965;
+    public int fieldInt32966;
+    public int fieldInt32967;
+    public int fieldInt32968;
+    public int fieldInt32969;
+    public int fieldInt32970;
+    public int fieldInt32971;
+    public int fieldInt32972;
+    public int fieldInt32973;
+    public int fieldInt32974;
+    public int fieldInt32975;
+    public int fieldInt32976;
+    public int fieldInt32977;
+    public int fieldInt32978;
+    public int fieldInt32979;
+    public int fieldInt32980;
+    public int fieldInt32981;
+    public int fieldInt32982;
+    public int fieldInt32983;
+    public int fieldInt32984;
+    public int fieldInt32985;
+    public int fieldInt32986;
+    public int fieldInt32987;
+    public int fieldInt32988;
+    public int fieldInt32989;
+    public int fieldInt32990;
+    public int fieldInt32991;
+    public int fieldInt32992;
+    public int fieldInt32993;
+    public int fieldInt32994;
+    public int fieldInt32995;
+    public int fieldInt32996;
+    public int fieldInt32997;
+    public int fieldInt32998;
+    public int fieldInt32999;
+    public int fieldInt33000;
+    public int fieldInt33001;
+    public int fieldInt33002;
+    public int fieldInt33003;
+    public int fieldInt33004;
+    public int fieldInt33005;
+    public int fieldInt33006;
+    public int fieldInt33007;
+    public int fieldInt33008;
+    public int fieldInt33009;
+    public int fieldInt33010;
+    public int fieldInt33011;
+    public int fieldInt33012;
+    public int fieldInt33013;
+    public int fieldInt33014;
+    public int fieldInt33015;
+    public int fieldInt33016;
+    public int fieldInt33017;
+    public int fieldInt33018;
+    public int fieldInt33019;
+    public int fieldInt33020;
+    public int fieldInt33021;
+    public int fieldInt33022;
+    public int fieldInt33023;
+    public int fieldInt33024;
+    public int fieldInt33025;
+    public int fieldInt33026;
+    public int fieldInt33027;
+    public int fieldInt33028;
+    public int fieldInt33029;
+    public int fieldInt33030;
+    public int fieldInt33031;
+    public int fieldInt33032;
+    public int fieldInt33033;
+    public int fieldInt33034;
+    public int fieldInt33035;
+    public int fieldInt33036;
+    public int fieldInt33037;
+    public int fieldInt33038;
+    public int fieldInt33039;
+    public int fieldInt33040;
+    public int fieldInt33041;
+    public int fieldInt33042;
+    public int fieldInt33043;
+    public int fieldInt33044;
+    public int fieldInt33045;
+    public int fieldInt33046;
+    public int fieldInt33047;
+    public int fieldInt33048;
+    public int fieldInt33049;
+    public int fieldInt33050;
+    public int fieldInt33051;
+    public int fieldInt33052;
+    public int fieldInt33053;
+    public int fieldInt33054;
+    public int fieldInt33055;
+    public int fieldInt33056;
+    public int fieldInt33057;
+    public int fieldInt33058;
+    public int fieldInt33059;
+    public int fieldInt33060;
+    public int fieldInt33061;
+    public int fieldInt33062;
+    public int fieldInt33063;
+    public int fieldInt33064;
+    public int fieldInt33065;
+    public int fieldInt33066;
+    public int fieldInt33067;
+    public int fieldInt33068;
+    public int fieldInt33069;
+    public int fieldInt33070;
+    public int fieldInt33071;
+    public int fieldInt33072;
+    public int fieldInt33073;
+    public int fieldInt33074;
+    public int fieldInt33075;
+    public int fieldInt33076;
+    public int fieldInt33077;
+    public int fieldInt33078;
+    public int fieldInt33079;
+    public int fieldInt33080;
+    public int fieldInt33081;
+    public int fieldInt33082;
+    public int fieldInt33083;
+    public int fieldInt33084;
+    public int fieldInt33085;
+    public int fieldInt33086;
+    public int fieldInt33087;
+    public int fieldInt33088;
+    public int fieldInt33089;
+    public int fieldInt33090;
+    public int fieldInt33091;
+    public int fieldInt33092;
+    public int fieldInt33093;
+    public int fieldInt33094;
+    public int fieldInt33095;
+    public int fieldInt33096;
+    public int fieldInt33097;
+    public int fieldInt33098;
+    public int fieldInt33099;
+    public int fieldInt33100;
+    public int fieldInt33101;
+    public int fieldInt33102;
+    public int fieldInt33103;
+    public int fieldInt33104;
+    public int fieldInt33105;
+    public int fieldInt33106;
+    public int fieldInt33107;
+    public int fieldInt33108;
+    public int fieldInt33109;
+    public int fieldInt33110;
+    public int fieldInt33111;
+    public int fieldInt33112;
+    public int fieldInt33113;
+    public int fieldInt33114;
+    public int fieldInt33115;
+    public int fieldInt33116;
+    public int fieldInt33117;
+    public int fieldInt33118;
+    public int fieldInt33119;
+    public int fieldInt33120;
+    public int fieldInt33121;
+    public int fieldInt33122;
+    public int fieldInt33123;
+    public int fieldInt33124;
+    public int fieldInt33125;
+    public int fieldInt33126;
+    public int fieldInt33127;
+    public int fieldInt33128;
+    public int fieldInt33129;
+    public int fieldInt33130;
+    public int fieldInt33131;
+    public int fieldInt33132;
+    public int fieldInt33133;
+    public int fieldInt33134;
+    public int fieldInt33135;
+    public int fieldInt33136;
+    public int fieldInt33137;
+    public int fieldInt33138;
+    public int fieldInt33139;
+    public int fieldInt33140;
+    public int fieldInt33141;
+    public int fieldInt33142;
+    public int fieldInt33143;
+    public int fieldInt33144;
+    public int fieldInt33145;
+    public int fieldInt33146;
+    public int fieldInt33147;
+    public int fieldInt33148;
+    public int fieldInt33149;
+    public int fieldInt33150;
+    public int fieldInt33151;
+    public int fieldInt33152;
+    public int fieldInt33153;
+    public int fieldInt33154;
+    public int fieldInt33155;
+    public int fieldInt33156;
+    public int fieldInt33157;
+    public int fieldInt33158;
+    public int fieldInt33159;
+    public int fieldInt33160;
+    public int fieldInt33161;
+    public int fieldInt33162;
+    public int fieldInt33163;
+    public int fieldInt33164;
+    public int fieldInt33165;
+    public int fieldInt33166;
+    public int fieldInt33167;
+    public int fieldInt33168;
+    public int fieldInt33169;
+    public int fieldInt33170;
+    public int fieldInt33171;
+    public int fieldInt33172;
+    public int fieldInt33173;
+    public int fieldInt33174;
+    public int fieldInt33175;
+    public int fieldInt33176;
+    public int fieldInt33177;
+    public int fieldInt33178;
+    public int fieldInt33179;
+    public int fieldInt33180;
+    public int fieldInt33181;
+    public int fieldInt33182;
+    public int fieldInt33183;
+    public int fieldInt33184;
+    public int fieldInt33185;
+    public int fieldInt33186;
+    public int fieldInt33187;
+    public int fieldInt33188;
+    public int fieldInt33189;
+    public int fieldInt33190;
+    public int fieldInt33191;
+    public int fieldInt33192;
+    public int fieldInt33193;
+    public int fieldInt33194;
+    public int fieldInt33195;
+    public int fieldInt33196;
+    public int fieldInt33197;
+    public int fieldInt33198;
+    public int fieldInt33199;
+    public int fieldInt33200;
+    public int fieldInt33201;
+    public int fieldInt33202;
+    public int fieldInt33203;
+    public int fieldInt33204;
+    public int fieldInt33205;
+    public int fieldInt33206;
+    public int fieldInt33207;
+    public int fieldInt33208;
+    public int fieldInt33209;
+    public int fieldInt33210;
+    public int fieldInt33211;
+    public int fieldInt33212;
+    public int fieldInt33213;
+    public int fieldInt33214;
+    public int fieldInt33215;
+    public int fieldInt33216;
+    public int fieldInt33217;
+    public int fieldInt33218;
+    public int fieldInt33219;
+    public int fieldInt33220;
+    public int fieldInt33221;
+    public int fieldInt33222;
+    public int fieldInt33223;
+    public int fieldInt33224;
+    public int fieldInt33225;
+    public int fieldInt33226;
+    public int fieldInt33227;
+    public int fieldInt33228;
+    public int fieldInt33229;
+    public int fieldInt33230;
+    public int fieldInt33231;
+    public int fieldInt33232;
+    public int fieldInt33233;
+    public int fieldInt33234;
+    public int fieldInt33235;
+    public int fieldInt33236;
+    public int fieldInt33237;
+    public int fieldInt33238;
+    public int fieldInt33239;
+    public int fieldInt33240;
+    public int fieldInt33241;
+    public int fieldInt33242;
+    public int fieldInt33243;
+    public int fieldInt33244;
+    public int fieldInt33245;
+    public int fieldInt33246;
+    public int fieldInt33247;
+    public int fieldInt33248;
+    public int fieldInt33249;
+    public int fieldInt33250;
+    public int fieldInt33251;
+    public int fieldInt33252;
+    public int fieldInt33253;
+    public int fieldInt33254;
+    public int fieldInt33255;
+    public int fieldInt33256;
+    public int fieldInt33257;
+    public int fieldInt33258;
+    public int fieldInt33259;
+    public int fieldInt33260;
+    public int fieldInt33261;
+    public int fieldInt33262;
+    public int fieldInt33263;
+    public int fieldInt33264;
+    public int fieldInt33265;
+    public int fieldInt33266;
+    public int fieldInt33267;
+    public int fieldInt33268;
+    public int fieldInt33269;
+    public int fieldInt33270;
+    public int fieldInt33271;
+    public int fieldInt33272;
+    public int fieldInt33273;
+    public int fieldInt33274;
+    public int fieldInt33275;
+    public int fieldInt33276;
+    public int fieldInt33277;
+    public int fieldInt33278;
+    public int fieldInt33279;
+    public int fieldInt33280;
+    public int fieldInt33281;
+    public int fieldInt33282;
+    public int fieldInt33283;
+    public int fieldInt33284;
+    public int fieldInt33285;
+    public int fieldInt33286;
+    public int fieldInt33287;
+    public int fieldInt33288;
+    public int fieldInt33289;
+    public int fieldInt33290;
+    public int fieldInt33291;
+    public int fieldInt33292;
+    public int fieldInt33293;
+    public int fieldInt33294;
+    public int fieldInt33295;
+    public int fieldInt33296;
+    public int fieldInt33297;
+    public int fieldInt33298;
+    public int fieldInt33299;
+    public int fieldInt33300;
+    public int fieldInt33301;
+    public int fieldInt33302;
+    public int fieldInt33303;
+    public int fieldInt33304;
+    public int fieldInt33305;
+    public int fieldInt33306;
+    public int fieldInt33307;
+    public int fieldInt33308;
+    public int fieldInt33309;
+    public int fieldInt33310;
+    public int fieldInt33311;
+    public int fieldInt33312;
+    public int fieldInt33313;
+    public int fieldInt33314;
+    public int fieldInt33315;
+    public int fieldInt33316;
+    public int fieldInt33317;
+    public int fieldInt33318;
+    public int fieldInt33319;
+    public int fieldInt33320;
+    public int fieldInt33321;
+    public int fieldInt33322;
+    public int fieldInt33323;
+    public int fieldInt33324;
+    public int fieldInt33325;
+    public int fieldInt33326;
+    public int fieldInt33327;
+    public int fieldInt33328;
+    public int fieldInt33329;
+    public int fieldInt33330;
+    public int fieldInt33331;
+    public int fieldInt33332;
+    public int fieldInt33333;
+    public int fieldInt33334;
+    public int fieldInt33335;
+    public int fieldInt33336;
+    public int fieldInt33337;
+    public int fieldInt33338;
+    public int fieldInt33339;
+    public int fieldInt33340;
+    public int fieldInt33341;
+    public int fieldInt33342;
+    public int fieldInt33343;
+    public int fieldInt33344;
+    public int fieldInt33345;
+    public int fieldInt33346;
+    public int fieldInt33347;
+    public int fieldInt33348;
+    public int fieldInt33349;
+    public int fieldInt33350;
+    public int fieldInt33351;
+    public int fieldInt33352;
+    public int fieldInt33353;
+    public int fieldInt33354;
+    public int fieldInt33355;
+    public int fieldInt33356;
+    public int fieldInt33357;
+    public int fieldInt33358;
+    public int fieldInt33359;
+    public int fieldInt33360;
+    public int fieldInt33361;
+    public int fieldInt33362;
+    public int fieldInt33363;
+    public int fieldInt33364;
+    public int fieldInt33365;
+    public int fieldInt33366;
+    public int fieldInt33367;
+    public int fieldInt33368;
+    public int fieldInt33369;
+    public int fieldInt33370;
+    public int fieldInt33371;
+    public int fieldInt33372;
+    public int fieldInt33373;
+    public int fieldInt33374;
+    public int fieldInt33375;
+    public int fieldInt33376;
+    public int fieldInt33377;
+    public int fieldInt33378;
+    public int fieldInt33379;
+    public int fieldInt33380;
+    public int fieldInt33381;
+    public int fieldInt33382;
+    public int fieldInt33383;
+    public int fieldInt33384;
+    public int fieldInt33385;
+    public int fieldInt33386;
+    public int fieldInt33387;
+    public int fieldInt33388;
+    public int fieldInt33389;
+    public int fieldInt33390;
+    public int fieldInt33391;
+    public int fieldInt33392;
+    public int fieldInt33393;
+    public int fieldInt33394;
+    public int fieldInt33395;
+    public int fieldInt33396;
+    public int fieldInt33397;
+    public int fieldInt33398;
+    public int fieldInt33399;
+    public int fieldInt33400;
+    public int fieldInt33401;
+    public int fieldInt33402;
+    public int fieldInt33403;
+    public int fieldInt33404;
+    public int fieldInt33405;
+    public int fieldInt33406;
+    public int fieldInt33407;
+    public int fieldInt33408;
+    public int fieldInt33409;
+    public int fieldInt33410;
+    public int fieldInt33411;
+    public int fieldInt33412;
+    public int fieldInt33413;
+    public int fieldInt33414;
+    public int fieldInt33415;
+    public int fieldInt33416;
+    public int fieldInt33417;
+    public int fieldInt33418;
+    public int fieldInt33419;
+    public int fieldInt33420;
+    public int fieldInt33421;
+    public int fieldInt33422;
+    public int fieldInt33423;
+    public int fieldInt33424;
+    public int fieldInt33425;
+    public int fieldInt33426;
+    public int fieldInt33427;
+    public int fieldInt33428;
+    public int fieldInt33429;
+    public int fieldInt33430;
+    public int fieldInt33431;
+    public int fieldInt33432;
+    public int fieldInt33433;
+    public int fieldInt33434;
+    public int fieldInt33435;
+    public int fieldInt33436;
+    public int fieldInt33437;
+    public int fieldInt33438;
+    public int fieldInt33439;
+    public int fieldInt33440;
+    public int fieldInt33441;
+    public int fieldInt33442;
+    public int fieldInt33443;
+    public int fieldInt33444;
+    public int fieldInt33445;
+    public int fieldInt33446;
+    public int fieldInt33447;
+    public int fieldInt33448;
+    public int fieldInt33449;
+    public int fieldInt33450;
+    public int fieldInt33451;
+    public int fieldInt33452;
+    public int fieldInt33453;
+    public int fieldInt33454;
+    public int fieldInt33455;
+    public int fieldInt33456;
+    public int fieldInt33457;
+    public int fieldInt33458;
+    public int fieldInt33459;
+    public int fieldInt33460;
+    public int fieldInt33461;
+    public int fieldInt33462;
+    public int fieldInt33463;
+    public int fieldInt33464;
+    public int fieldInt33465;
+    public int fieldInt33466;
+    public int fieldInt33467;
+    public int fieldInt33468;
+    public int fieldInt33469;
+    public int fieldInt33470;
+    public int fieldInt33471;
+    public int fieldInt33472;
+    public int fieldInt33473;
+    public int fieldInt33474;
+    public int fieldInt33475;
+    public int fieldInt33476;
+    public int fieldInt33477;
+    public int fieldInt33478;
+    public int fieldInt33479;
+    public int fieldInt33480;
+    public int fieldInt33481;
+    public int fieldInt33482;
+    public int fieldInt33483;
+    public int fieldInt33484;
+    public int fieldInt33485;
+    public int fieldInt33486;
+    public int fieldInt33487;
+    public int fieldInt33488;
+    public int fieldInt33489;
+    public int fieldInt33490;
+    public int fieldInt33491;
+    public int fieldInt33492;
+    public int fieldInt33493;
+    public int fieldInt33494;
+    public int fieldInt33495;
+    public int fieldInt33496;
+    public int fieldInt33497;
+    public int fieldInt33498;
+    public int fieldInt33499;
+    public int fieldInt33500;
+    public int fieldInt33501;
+    public int fieldInt33502;
+    public int fieldInt33503;
+    public int fieldInt33504;
+    public int fieldInt33505;
+    public int fieldInt33506;
+    public int fieldInt33507;
+    public int fieldInt33508;
+    public int fieldInt33509;
+    public int fieldInt33510;
+    public int fieldInt33511;
+    public int fieldInt33512;
+    public int fieldInt33513;
+    public int fieldInt33514;
+    public int fieldInt33515;
+    public int fieldInt33516;
+    public int fieldInt33517;
+    public int fieldInt33518;
+    public int fieldInt33519;
+    public int fieldInt33520;
+    public int fieldInt33521;
+    public int fieldInt33522;
+    public int fieldInt33523;
+    public int fieldInt33524;
+    public int fieldInt33525;
+    public int fieldInt33526;
+    public int fieldInt33527;
+    public int fieldInt33528;
+    public int fieldInt33529;
+    public int fieldInt33530;
+    public int fieldInt33531;
+    public int fieldInt33532;
+    public int fieldInt33533;
+    public int fieldInt33534;
+    public int fieldInt33535;
+    public int fieldInt33536;
+    public int fieldInt33537;
+    public int fieldInt33538;
+    public int fieldInt33539;
+    public int fieldInt33540;
+    public int fieldInt33541;
+    public int fieldInt33542;
+    public int fieldInt33543;
+    public int fieldInt33544;
+    public int fieldInt33545;
+    public int fieldInt33546;
+    public int fieldInt33547;
+    public int fieldInt33548;
+    public int fieldInt33549;
+    public int fieldInt33550;
+    public int fieldInt33551;
+    public int fieldInt33552;
+    public int fieldInt33553;
+    public int fieldInt33554;
+    public int fieldInt33555;
+    public int fieldInt33556;
+    public int fieldInt33557;
+    public int fieldInt33558;
+    public int fieldInt33559;
+    public int fieldInt33560;
+    public int fieldInt33561;
+    public int fieldInt33562;
+    public int fieldInt33563;
+    public int fieldInt33564;
+    public int fieldInt33565;
+    public int fieldInt33566;
+    public int fieldInt33567;
+    public int fieldInt33568;
+    public int fieldInt33569;
+    public int fieldInt33570;
+    public int fieldInt33571;
+    public int fieldInt33572;
+    public int fieldInt33573;
+    public int fieldInt33574;
+    public int fieldInt33575;
+    public int fieldInt33576;
+    public int fieldInt33577;
+    public int fieldInt33578;
+    public int fieldInt33579;
+    public int fieldInt33580;
+    public int fieldInt33581;
+    public int fieldInt33582;
+    public int fieldInt33583;
+    public int fieldInt33584;
+    public int fieldInt33585;
+    public int fieldInt33586;
+    public int fieldInt33587;
+    public int fieldInt33588;
+    public int fieldInt33589;
+    public int fieldInt33590;
+    public int fieldInt33591;
+    public int fieldInt33592;
+    public int fieldInt33593;
+    public int fieldInt33594;
+    public int fieldInt33595;
+    public int fieldInt33596;
+    public int fieldInt33597;
+    public int fieldInt33598;
+    public int fieldInt33599;
+    public int fieldInt33600;
+    public int fieldInt33601;
+    public int fieldInt33602;
+    public int fieldInt33603;
+    public int fieldInt33604;
+    public int fieldInt33605;
+    public int fieldInt33606;
+    public int fieldInt33607;
+    public int fieldInt33608;
+    public int fieldInt33609;
+    public int fieldInt33610;
+    public int fieldInt33611;
+    public int fieldInt33612;
+    public int fieldInt33613;
+    public int fieldInt33614;
+    public int fieldInt33615;
+    public int fieldInt33616;
+    public int fieldInt33617;
+    public int fieldInt33618;
+    public int fieldInt33619;
+    public int fieldInt33620;
+    public int fieldInt33621;
+    public int fieldInt33622;
+    public int fieldInt33623;
+    public int fieldInt33624;
+    public int fieldInt33625;
+    public int fieldInt33626;
+    public int fieldInt33627;
+    public int fieldInt33628;
+    public int fieldInt33629;
+    public int fieldInt33630;
+    public int fieldInt33631;
+    public int fieldInt33632;
+    public int fieldInt33633;
+    public int fieldInt33634;
+    public int fieldInt33635;
+    public int fieldInt33636;
+    public int fieldInt33637;
+    public int fieldInt33638;
+    public int fieldInt33639;
+    public int fieldInt33640;
+    public int fieldInt33641;
+    public int fieldInt33642;
+    public int fieldInt33643;
+    public int fieldInt33644;
+    public int fieldInt33645;
+    public int fieldInt33646;
+    public int fieldInt33647;
+    public int fieldInt33648;
+    public int fieldInt33649;
+    public int fieldInt33650;
+    public int fieldInt33651;
+    public int fieldInt33652;
+    public int fieldInt33653;
+    public int fieldInt33654;
+    public int fieldInt33655;
+    public int fieldInt33656;
+    public int fieldInt33657;
+    public int fieldInt33658;
+    public int fieldInt33659;
+    public int fieldInt33660;
+    public int fieldInt33661;
+    public int fieldInt33662;
+    public int fieldInt33663;
+    public int fieldInt33664;
+    public int fieldInt33665;
+    public int fieldInt33666;
+    public int fieldInt33667;
+    public int fieldInt33668;
+    public int fieldInt33669;
+    public int fieldInt33670;
+    public int fieldInt33671;
+    public int fieldInt33672;
+    public int fieldInt33673;
+    public int fieldInt33674;
+    public int fieldInt33675;
+    public int fieldInt33676;
+    public int fieldInt33677;
+    public int fieldInt33678;
+    public int fieldInt33679;
+    public int fieldInt33680;
+    public int fieldInt33681;
+    public int fieldInt33682;
+    public int fieldInt33683;
+    public int fieldInt33684;
+    public int fieldInt33685;
+    public int fieldInt33686;
+    public int fieldInt33687;
+    public int fieldInt33688;
+    public int fieldInt33689;
+    public int fieldInt33690;
+    public int fieldInt33691;
+    public int fieldInt33692;
+    public int fieldInt33693;
+    public int fieldInt33694;
+    public int fieldInt33695;
+    public int fieldInt33696;
+    public int fieldInt33697;
+    public int fieldInt33698;
+    public int fieldInt33699;
+    public int fieldInt33700;
+    public int fieldInt33701;
+    public int fieldInt33702;
+    public int fieldInt33703;
+    public int fieldInt33704;
+    public int fieldInt33705;
+    public int fieldInt33706;
+    public int fieldInt33707;
+    public int fieldInt33708;
+    public int fieldInt33709;
+    public int fieldInt33710;
+    public int fieldInt33711;
+    public int fieldInt33712;
+    public int fieldInt33713;
+    public int fieldInt33714;
+    public int fieldInt33715;
+    public int fieldInt33716;
+    public int fieldInt33717;
+    public int fieldInt33718;
+    public int fieldInt33719;
+    public int fieldInt33720;
+    public int fieldInt33721;
+    public int fieldInt33722;
+    public int fieldInt33723;
+    public int fieldInt33724;
+    public int fieldInt33725;
+    public int fieldInt33726;
+    public int fieldInt33727;
+    public int fieldInt33728;
+    public int fieldInt33729;
+    public int fieldInt33730;
+    public int fieldInt33731;
+    public int fieldInt33732;
+    public int fieldInt33733;
+    public int fieldInt33734;
+    public int fieldInt33735;
+    public int fieldInt33736;
+    public int fieldInt33737;
+    public int fieldInt33738;
+    public int fieldInt33739;
+    public int fieldInt33740;
+    public int fieldInt33741;
+    public int fieldInt33742;
+    public int fieldInt33743;
+    public int fieldInt33744;
+    public int fieldInt33745;
+    public int fieldInt33746;
+    public int fieldInt33747;
+    public int fieldInt33748;
+    public int fieldInt33749;
+    public int fieldInt33750;
+    public int fieldInt33751;
+    public int fieldInt33752;
+    public int fieldInt33753;
+    public int fieldInt33754;
+    public int fieldInt33755;
+    public int fieldInt33756;
+    public int fieldInt33757;
+    public int fieldInt33758;
+    public int fieldInt33759;
+    public int fieldInt33760;
+    public int fieldInt33761;
+    public int fieldInt33762;
+    public int fieldInt33763;
+    public int fieldInt33764;
+    public int fieldInt33765;
+    public int fieldInt33766;
+    public int fieldInt33767;
+    public int fieldInt33768;
+    public int fieldInt33769;
+    public int fieldInt33770;
+    public int fieldInt33771;
+    public int fieldInt33772;
+    public int fieldInt33773;
+    public int fieldInt33774;
+    public int fieldInt33775;
+    public int fieldInt33776;
+    public int fieldInt33777;
+    public int fieldInt33778;
+    public int fieldInt33779;
+    public int fieldInt33780;
+    public int fieldInt33781;
+    public int fieldInt33782;
+    public int fieldInt33783;
+    public int fieldInt33784;
+    public int fieldInt33785;
+    public int fieldInt33786;
+    public int fieldInt33787;
+    public int fieldInt33788;
+    public int fieldInt33789;
+    public int fieldInt33790;
+    public int fieldInt33791;
+    public int fieldInt33792;
+    public int fieldInt33793;
+    public int fieldInt33794;
+    public int fieldInt33795;
+    public int fieldInt33796;
+    public int fieldInt33797;
+    public int fieldInt33798;
+    public int fieldInt33799;
+    public int fieldInt33800;
+    public int fieldInt33801;
+    public int fieldInt33802;
+    public int fieldInt33803;
+    public int fieldInt33804;
+    public int fieldInt33805;
+    public int fieldInt33806;
+    public int fieldInt33807;
+    public int fieldInt33808;
+    public int fieldInt33809;
+    public int fieldInt33810;
+    public int fieldInt33811;
+    public int fieldInt33812;
+    public int fieldInt33813;
+    public int fieldInt33814;
+    public int fieldInt33815;
+    public int fieldInt33816;
+    public int fieldInt33817;
+    public int fieldInt33818;
+    public int fieldInt33819;
+    public int fieldInt33820;
+    public int fieldInt33821;
+    public int fieldInt33822;
+    public int fieldInt33823;
+    public int fieldInt33824;
+    public int fieldInt33825;
+    public int fieldInt33826;
+    public int fieldInt33827;
+    public int fieldInt33828;
+    public int fieldInt33829;
+    public int fieldInt33830;
+    public int fieldInt33831;
+    public int fieldInt33832;
+    public int fieldInt33833;
+    public int fieldInt33834;
+    public int fieldInt33835;
+    public int fieldInt33836;
+    public int fieldInt33837;
+    public int fieldInt33838;
+    public int fieldInt33839;
+    public int fieldInt33840;
+    public int fieldInt33841;
+    public int fieldInt33842;
+    public int fieldInt33843;
+    public int fieldInt33844;
+    public int fieldInt33845;
+    public int fieldInt33846;
+    public int fieldInt33847;
+    public int fieldInt33848;
+    public int fieldInt33849;
+    public int fieldInt33850;
+    public int fieldInt33851;
+    public int fieldInt33852;
+    public int fieldInt33853;
+    public int fieldInt33854;
+    public int fieldInt33855;
+    public int fieldInt33856;
+    public int fieldInt33857;
+    public int fieldInt33858;
+    public int fieldInt33859;
+    public int fieldInt33860;
+    public int fieldInt33861;
+    public int fieldInt33862;
+    public int fieldInt33863;
+    public int fieldInt33864;
+    public int fieldInt33865;
+    public int fieldInt33866;
+    public int fieldInt33867;
+    public int fieldInt33868;
+    public int fieldInt33869;
+    public int fieldInt33870;
+    public int fieldInt33871;
+    public int fieldInt33872;
+    public int fieldInt33873;
+    public int fieldInt33874;
+    public int fieldInt33875;
+    public int fieldInt33876;
+    public int fieldInt33877;
+    public int fieldInt33878;
+    public int fieldInt33879;
+    public int fieldInt33880;
+    public int fieldInt33881;
+    public int fieldInt33882;
+    public int fieldInt33883;
+    public int fieldInt33884;
+    public int fieldInt33885;
+    public int fieldInt33886;
+    public int fieldInt33887;
+    public int fieldInt33888;
+    public int fieldInt33889;
+    public int fieldInt33890;
+    public int fieldInt33891;
+    public int fieldInt33892;
+    public int fieldInt33893;
+    public int fieldInt33894;
+    public int fieldInt33895;
+    public int fieldInt33896;
+    public int fieldInt33897;
+    public int fieldInt33898;
+    public int fieldInt33899;
+    public int fieldInt33900;
+    public int fieldInt33901;
+    public int fieldInt33902;
+    public int fieldInt33903;
+    public int fieldInt33904;
+    public int fieldInt33905;
+    public int fieldInt33906;
+    public int fieldInt33907;
+    public int fieldInt33908;
+    public int fieldInt33909;
+    public int fieldInt33910;
+    public int fieldInt33911;
+    public int fieldInt33912;
+    public int fieldInt33913;
+    public int fieldInt33914;
+    public int fieldInt33915;
+    public int fieldInt33916;
+    public int fieldInt33917;
+    public int fieldInt33918;
+    public int fieldInt33919;
+    public int fieldInt33920;
+    public int fieldInt33921;
+    public int fieldInt33922;
+    public int fieldInt33923;
+    public int fieldInt33924;
+    public int fieldInt33925;
+    public int fieldInt33926;
+    public int fieldInt33927;
+    public int fieldInt33928;
+    public int fieldInt33929;
+    public int fieldInt33930;
+    public int fieldInt33931;
+    public int fieldInt33932;
+    public int fieldInt33933;
+    public int fieldInt33934;
+    public int fieldInt33935;
+    public int fieldInt33936;
+    public int fieldInt33937;
+    public int fieldInt33938;
+    public int fieldInt33939;
+    public int fieldInt33940;
+    public int fieldInt33941;
+    public int fieldInt33942;
+    public int fieldInt33943;
+    public int fieldInt33944;
+    public int fieldInt33945;
+    public int fieldInt33946;
+    public int fieldInt33947;
+    public int fieldInt33948;
+    public int fieldInt33949;
+    public int fieldInt33950;
+    public int fieldInt33951;
+    public int fieldInt33952;
+    public int fieldInt33953;
+    public int fieldInt33954;
+    public int fieldInt33955;
+    public int fieldInt33956;
+    public int fieldInt33957;
+    public int fieldInt33958;
+    public int fieldInt33959;
+    public int fieldInt33960;
+    public int fieldInt33961;
+    public int fieldInt33962;
+    public int fieldInt33963;
+    public int fieldInt33964;
+    public int fieldInt33965;
+    public int fieldInt33966;
+    public int fieldInt33967;
+    public int fieldInt33968;
+    public int fieldInt33969;
+    public int fieldInt33970;
+    public int fieldInt33971;
+    public int fieldInt33972;
+    public int fieldInt33973;
+    public int fieldInt33974;
+    public int fieldInt33975;
+    public int fieldInt33976;
+    public int fieldInt33977;
+    public int fieldInt33978;
+    public int fieldInt33979;
+    public int fieldInt33980;
+    public int fieldInt33981;
+    public int fieldInt33982;
+    public int fieldInt33983;
+    public int fieldInt33984;
+    public int fieldInt33985;
+    public int fieldInt33986;
+    public int fieldInt33987;
+    public int fieldInt33988;
+    public int fieldInt33989;
+    public int fieldInt33990;
+    public int fieldInt33991;
+    public int fieldInt33992;
+    public int fieldInt33993;
+    public int fieldInt33994;
+    public int fieldInt33995;
+    public int fieldInt33996;
+    public int fieldInt33997;
+    public int fieldInt33998;
+    public int fieldInt33999;
+    public int fieldInt34000;
+    public int fieldInt34001;
+    public int fieldInt34002;
+    public int fieldInt34003;
+    public int fieldInt34004;
+    public int fieldInt34005;
+    public int fieldInt34006;
+    public int fieldInt34007;
+    public int fieldInt34008;
+    public int fieldInt34009;
+    public int fieldInt34010;
+    public int fieldInt34011;
+    public int fieldInt34012;
+    public int fieldInt34013;
+    public int fieldInt34014;
+    public int fieldInt34015;
+    public int fieldInt34016;
+    public int fieldInt34017;
+    public int fieldInt34018;
+    public int fieldInt34019;
+    public int fieldInt34020;
+    public int fieldInt34021;
+    public int fieldInt34022;
+    public int fieldInt34023;
+    public int fieldInt34024;
+    public int fieldInt34025;
+    public int fieldInt34026;
+    public int fieldInt34027;
+    public int fieldInt34028;
+    public int fieldInt34029;
+    public int fieldInt34030;
+    public int fieldInt34031;
+    public int fieldInt34032;
+    public int fieldInt34033;
+    public int fieldInt34034;
+    public int fieldInt34035;
+    public int fieldInt34036;
+    public int fieldInt34037;
+    public int fieldInt34038;
+    public int fieldInt34039;
+    public int fieldInt34040;
+    public int fieldInt34041;
+    public int fieldInt34042;
+    public int fieldInt34043;
+    public int fieldInt34044;
+    public int fieldInt34045;
+    public int fieldInt34046;
+    public int fieldInt34047;
+    public int fieldInt34048;
+    public int fieldInt34049;
+    public int fieldInt34050;
+    public int fieldInt34051;
+    public int fieldInt34052;
+    public int fieldInt34053;
+    public int fieldInt34054;
+    public int fieldInt34055;
+    public int fieldInt34056;
+    public int fieldInt34057;
+    public int fieldInt34058;
+    public int fieldInt34059;
+    public int fieldInt34060;
+    public int fieldInt34061;
+    public int fieldInt34062;
+    public int fieldInt34063;
+    public int fieldInt34064;
+    public int fieldInt34065;
+    public int fieldInt34066;
+    public int fieldInt34067;
+    public int fieldInt34068;
+    public int fieldInt34069;
+    public int fieldInt34070;
+    public int fieldInt34071;
+    public int fieldInt34072;
+    public int fieldInt34073;
+    public int fieldInt34074;
+    public int fieldInt34075;
+    public int fieldInt34076;
+    public int fieldInt34077;
+    public int fieldInt34078;
+    public int fieldInt34079;
+    public int fieldInt34080;
+    public int fieldInt34081;
+    public int fieldInt34082;
+    public int fieldInt34083;
+    public int fieldInt34084;
+    public int fieldInt34085;
+    public int fieldInt34086;
+    public int fieldInt34087;
+    public int fieldInt34088;
+    public int fieldInt34089;
+    public int fieldInt34090;
+    public int fieldInt34091;
+    public int fieldInt34092;
+    public int fieldInt34093;
+    public int fieldInt34094;
+    public int fieldInt34095;
+    public int fieldInt34096;
+    public int fieldInt34097;
+    public int fieldInt34098;
+    public int fieldInt34099;
+    public int fieldInt34100;
+    public int fieldInt34101;
+    public int fieldInt34102;
+    public int fieldInt34103;
+    public int fieldInt34104;
+    public int fieldInt34105;
+    public int fieldInt34106;
+    public int fieldInt34107;
+    public int fieldInt34108;
+    public int fieldInt34109;
+    public int fieldInt34110;
+    public int fieldInt34111;
+    public int fieldInt34112;
+    public int fieldInt34113;
+    public int fieldInt34114;
+    public int fieldInt34115;
+    public int fieldInt34116;
+    public int fieldInt34117;
+    public int fieldInt34118;
+    public int fieldInt34119;
+    public int fieldInt34120;
+    public int fieldInt34121;
+    public int fieldInt34122;
+    public int fieldInt34123;
+    public int fieldInt34124;
+    public int fieldInt34125;
+    public int fieldInt34126;
+    public int fieldInt34127;
+    public int fieldInt34128;
+    public int fieldInt34129;
+    public int fieldInt34130;
+    public int fieldInt34131;
+    public int fieldInt34132;
+    public int fieldInt34133;
+    public int fieldInt34134;
+    public int fieldInt34135;
+    public int fieldInt34136;
+    public int fieldInt34137;
+    public int fieldInt34138;
+    public int fieldInt34139;
+    public int fieldInt34140;
+    public int fieldInt34141;
+    public int fieldInt34142;
+    public int fieldInt34143;
+    public int fieldInt34144;
+    public int fieldInt34145;
+    public int fieldInt34146;
+    public int fieldInt34147;
+    public int fieldInt34148;
+    public int fieldInt34149;
+    public int fieldInt34150;
+    public int fieldInt34151;
+    public int fieldInt34152;
+    public int fieldInt34153;
+    public int fieldInt34154;
+    public int fieldInt34155;
+    public int fieldInt34156;
+    public int fieldInt34157;
+    public int fieldInt34158;
+    public int fieldInt34159;
+    public int fieldInt34160;
+    public int fieldInt34161;
+    public int fieldInt34162;
+    public int fieldInt34163;
+    public int fieldInt34164;
+    public int fieldInt34165;
+    public int fieldInt34166;
+    public int fieldInt34167;
+    public int fieldInt34168;
+    public int fieldInt34169;
+    public int fieldInt34170;
+    public int fieldInt34171;
+    public int fieldInt34172;
+    public int fieldInt34173;
+    public int fieldInt34174;
+    public int fieldInt34175;
+    public int fieldInt34176;
+    public int fieldInt34177;
+    public int fieldInt34178;
+    public int fieldInt34179;
+    public int fieldInt34180;
+    public int fieldInt34181;
+    public int fieldInt34182;
+    public int fieldInt34183;
+    public int fieldInt34184;
+    public int fieldInt34185;
+    public int fieldInt34186;
+    public int fieldInt34187;
+    public int fieldInt34188;
+    public int fieldInt34189;
+    public int fieldInt34190;
+    public int fieldInt34191;
+    public int fieldInt34192;
+    public int fieldInt34193;
+    public int fieldInt34194;
+    public int fieldInt34195;
+    public int fieldInt34196;
+    public int fieldInt34197;
+    public int fieldInt34198;
+    public int fieldInt34199;
+    public int fieldInt34200;
+    public int fieldInt34201;
+    public int fieldInt34202;
+    public int fieldInt34203;
+    public int fieldInt34204;
+    public int fieldInt34205;
+    public int fieldInt34206;
+    public int fieldInt34207;
+    public int fieldInt34208;
+    public int fieldInt34209;
+    public int fieldInt34210;
+    public int fieldInt34211;
+    public int fieldInt34212;
+    public int fieldInt34213;
+    public int fieldInt34214;
+    public int fieldInt34215;
+    public int fieldInt34216;
+    public int fieldInt34217;
+    public int fieldInt34218;
+    public int fieldInt34219;
+    public int fieldInt34220;
+    public int fieldInt34221;
+    public int fieldInt34222;
+    public int fieldInt34223;
+    public int fieldInt34224;
+    public int fieldInt34225;
+    public int fieldInt34226;
+    public int fieldInt34227;
+    public int fieldInt34228;
+    public int fieldInt34229;
+    public int fieldInt34230;
+    public int fieldInt34231;
+    public int fieldInt34232;
+    public int fieldInt34233;
+    public int fieldInt34234;
+    public int fieldInt34235;
+    public int fieldInt34236;
+    public int fieldInt34237;
+    public int fieldInt34238;
+    public int fieldInt34239;
+    public int fieldInt34240;
+    public int fieldInt34241;
+    public int fieldInt34242;
+    public int fieldInt34243;
+    public int fieldInt34244;
+    public int fieldInt34245;
+    public int fieldInt34246;
+    public int fieldInt34247;
+    public int fieldInt34248;
+    public int fieldInt34249;
+    public int fieldInt34250;
+    public int fieldInt34251;
+    public int fieldInt34252;
+    public int fieldInt34253;
+    public int fieldInt34254;
+    public int fieldInt34255;
+    public int fieldInt34256;
+    public int fieldInt34257;
+    public int fieldInt34258;
+    public int fieldInt34259;
+    public int fieldInt34260;
+    public int fieldInt34261;
+    public int fieldInt34262;
+    public int fieldInt34263;
+    public int fieldInt34264;
+    public int fieldInt34265;
+    public int fieldInt34266;
+    public int fieldInt34267;
+    public int fieldInt34268;
+    public int fieldInt34269;
+    public int fieldInt34270;
+    public int fieldInt34271;
+    public int fieldInt34272;
+    public int fieldInt34273;
+    public int fieldInt34274;
+    public int fieldInt34275;
+    public int fieldInt34276;
+    public int fieldInt34277;
+    public int fieldInt34278;
+    public int fieldInt34279;
+    public int fieldInt34280;
+    public int fieldInt34281;
+    public int fieldInt34282;
+    public int fieldInt34283;
+    public int fieldInt34284;
+    public int fieldInt34285;
+    public int fieldInt34286;
+    public int fieldInt34287;
+    public int fieldInt34288;
+    public int fieldInt34289;
+    public int fieldInt34290;
+    public int fieldInt34291;
+    public int fieldInt34292;
+    public int fieldInt34293;
+    public int fieldInt34294;
+    public int fieldInt34295;
+    public int fieldInt34296;
+    public int fieldInt34297;
+    public int fieldInt34298;
+    public int fieldInt34299;
+    public int fieldInt34300;
+    public int fieldInt34301;
+    public int fieldInt34302;
+    public int fieldInt34303;
+    public int fieldInt34304;
+    public int fieldInt34305;
+    public int fieldInt34306;
+    public int fieldInt34307;
+    public int fieldInt34308;
+    public int fieldInt34309;
+    public int fieldInt34310;
+    public int fieldInt34311;
+    public int fieldInt34312;
+    public int fieldInt34313;
+    public int fieldInt34314;
+    public int fieldInt34315;
+    public int fieldInt34316;
+    public int fieldInt34317;
+    public int fieldInt34318;
+    public int fieldInt34319;
+    public int fieldInt34320;
+    public int fieldInt34321;
+    public int fieldInt34322;
+    public int fieldInt34323;
+    public int fieldInt34324;
+    public int fieldInt34325;
+    public int fieldInt34326;
+    public int fieldInt34327;
+    public int fieldInt34328;
+    public int fieldInt34329;
+    public int fieldInt34330;
+    public int fieldInt34331;
+    public int fieldInt34332;
+    public int fieldInt34333;
+    public int fieldInt34334;
+    public int fieldInt34335;
+    public int fieldInt34336;
+    public int fieldInt34337;
+    public int fieldInt34338;
+    public int fieldInt34339;
+    public int fieldInt34340;
+    public int fieldInt34341;
+    public int fieldInt34342;
+    public int fieldInt34343;
+    public int fieldInt34344;
+    public int fieldInt34345;
+    public int fieldInt34346;
+    public int fieldInt34347;
+    public int fieldInt34348;
+    public int fieldInt34349;
+    public int fieldInt34350;
+    public int fieldInt34351;
+    public int fieldInt34352;
+    public int fieldInt34353;
+    public int fieldInt34354;
+    public int fieldInt34355;
+    public int fieldInt34356;
+    public int fieldInt34357;
+    public int fieldInt34358;
+    public int fieldInt34359;
+    public int fieldInt34360;
+    public int fieldInt34361;
+    public int fieldInt34362;
+    public int fieldInt34363;
+    public int fieldInt34364;
+    public int fieldInt34365;
+    public int fieldInt34366;
+    public int fieldInt34367;
+    public int fieldInt34368;
+    public int fieldInt34369;
+    public int fieldInt34370;
+    public int fieldInt34371;
+    public int fieldInt34372;
+    public int fieldInt34373;
+    public int fieldInt34374;
+    public int fieldInt34375;
+    public int fieldInt34376;
+    public int fieldInt34377;
+    public int fieldInt34378;
+    public int fieldInt34379;
+    public int fieldInt34380;
+    public int fieldInt34381;
+    public int fieldInt34382;
+    public int fieldInt34383;
+    public int fieldInt34384;
+    public int fieldInt34385;
+    public int fieldInt34386;
+    public int fieldInt34387;
+    public int fieldInt34388;
+    public int fieldInt34389;
+    public int fieldInt34390;
+    public int fieldInt34391;
+    public int fieldInt34392;
+    public int fieldInt34393;
+    public int fieldInt34394;
+    public int fieldInt34395;
+    public int fieldInt34396;
+    public int fieldInt34397;
+    public int fieldInt34398;
+    public int fieldInt34399;
+    public int fieldInt34400;
+    public int fieldInt34401;
+    public int fieldInt34402;
+    public int fieldInt34403;
+    public int fieldInt34404;
+    public int fieldInt34405;
+    public int fieldInt34406;
+    public int fieldInt34407;
+    public int fieldInt34408;
+    public int fieldInt34409;
+    public int fieldInt34410;
+    public int fieldInt34411;
+    public int fieldInt34412;
+    public int fieldInt34413;
+    public int fieldInt34414;
+    public int fieldInt34415;
+    public int fieldInt34416;
+    public int fieldInt34417;
+    public int fieldInt34418;
+    public int fieldInt34419;
+    public int fieldInt34420;
+    public int fieldInt34421;
+    public int fieldInt34422;
+    public int fieldInt34423;
+    public int fieldInt34424;
+    public int fieldInt34425;
+    public int fieldInt34426;
+    public int fieldInt34427;
+    public int fieldInt34428;
+    public int fieldInt34429;
+    public int fieldInt34430;
+    public int fieldInt34431;
+    public int fieldInt34432;
+    public int fieldInt34433;
+    public int fieldInt34434;
+    public int fieldInt34435;
+    public int fieldInt34436;
+    public int fieldInt34437;
+    public int fieldInt34438;
+    public int fieldInt34439;
+    public int fieldInt34440;
+    public int fieldInt34441;
+    public int fieldInt34442;
+    public int fieldInt34443;
+    public int fieldInt34444;
+    public int fieldInt34445;
+    public int fieldInt34446;
+    public int fieldInt34447;
+    public int fieldInt34448;
+    public int fieldInt34449;
+    public int fieldInt34450;
+    public int fieldInt34451;
+    public int fieldInt34452;
+    public int fieldInt34453;
+    public int fieldInt34454;
+    public int fieldInt34455;
+    public int fieldInt34456;
+    public int fieldInt34457;
+    public int fieldInt34458;
+    public int fieldInt34459;
+    public int fieldInt34460;
+    public int fieldInt34461;
+    public int fieldInt34462;
+    public int fieldInt34463;
+    public int fieldInt34464;
+    public int fieldInt34465;
+    public int fieldInt34466;
+    public int fieldInt34467;
+    public int fieldInt34468;
+    public int fieldInt34469;
+    public int fieldInt34470;
+    public int fieldInt34471;
+    public int fieldInt34472;
+    public int fieldInt34473;
+    public int fieldInt34474;
+    public int fieldInt34475;
+    public int fieldInt34476;
+    public int fieldInt34477;
+    public int fieldInt34478;
+    public int fieldInt34479;
+    public int fieldInt34480;
+    public int fieldInt34481;
+    public int fieldInt34482;
+    public int fieldInt34483;
+    public int fieldInt34484;
+    public int fieldInt34485;
+    public int fieldInt34486;
+    public int fieldInt34487;
+    public int fieldInt34488;
+    public int fieldInt34489;
+    public int fieldInt34490;
+    public int fieldInt34491;
+    public int fieldInt34492;
+    public int fieldInt34493;
+    public int fieldInt34494;
+    public int fieldInt34495;
+    public int fieldInt34496;
+    public int fieldInt34497;
+    public int fieldInt34498;
+    public int fieldInt34499;
+    public int fieldInt34500;
+    public int fieldInt34501;
+    public int fieldInt34502;
+    public int fieldInt34503;
+    public int fieldInt34504;
+    public int fieldInt34505;
+    public int fieldInt34506;
+    public int fieldInt34507;
+    public int fieldInt34508;
+    public int fieldInt34509;
+    public int fieldInt34510;
+    public int fieldInt34511;
+    public int fieldInt34512;
+    public int fieldInt34513;
+    public int fieldInt34514;
+    public int fieldInt34515;
+    public int fieldInt34516;
+    public int fieldInt34517;
+    public int fieldInt34518;
+    public int fieldInt34519;
+    public int fieldInt34520;
+    public int fieldInt34521;
+    public int fieldInt34522;
+    public int fieldInt34523;
+    public int fieldInt34524;
+    public int fieldInt34525;
+    public int fieldInt34526;
+    public int fieldInt34527;
+    public int fieldInt34528;
+    public int fieldInt34529;
+    public int fieldInt34530;
+    public int fieldInt34531;
+    public int fieldInt34532;
+    public int fieldInt34533;
+    public int fieldInt34534;
+    public int fieldInt34535;
+    public int fieldInt34536;
+    public int fieldInt34537;
+    public int fieldInt34538;
+    public int fieldInt34539;
+    public int fieldInt34540;
+    public int fieldInt34541;
+    public int fieldInt34542;
+    public int fieldInt34543;
+    public int fieldInt34544;
+    public int fieldInt34545;
+    public int fieldInt34546;
+    public int fieldInt34547;
+    public int fieldInt34548;
+    public int fieldInt34549;
+    public int fieldInt34550;
+    public int fieldInt34551;
+    public int fieldInt34552;
+    public int fieldInt34553;
+    public int fieldInt34554;
+    public int fieldInt34555;
+    public int fieldInt34556;
+    public int fieldInt34557;
+    public int fieldInt34558;
+    public int fieldInt34559;
+    public int fieldInt34560;
+    public int fieldInt34561;
+    public int fieldInt34562;
+    public int fieldInt34563;
+    public int fieldInt34564;
+    public int fieldInt34565;
+    public int fieldInt34566;
+    public int fieldInt34567;
+    public int fieldInt34568;
+    public int fieldInt34569;
+    public int fieldInt34570;
+    public int fieldInt34571;
+    public int fieldInt34572;
+    public int fieldInt34573;
+    public int fieldInt34574;
+    public int fieldInt34575;
+    public int fieldInt34576;
+    public int fieldInt34577;
+    public int fieldInt34578;
+    public int fieldInt34579;
+    public int fieldInt34580;
+    public int fieldInt34581;
+    public int fieldInt34582;
+    public int fieldInt34583;
+    public int fieldInt34584;
+    public int fieldInt34585;
+    public int fieldInt34586;
+    public int fieldInt34587;
+    public int fieldInt34588;
+    public int fieldInt34589;
+    public int fieldInt34590;
+    public int fieldInt34591;
+    public int fieldInt34592;
+    public int fieldInt34593;
+    public int fieldInt34594;
+    public int fieldInt34595;
+    public int fieldInt34596;
+    public int fieldInt34597;
+    public int fieldInt34598;
+    public int fieldInt34599;
+    public int fieldInt34600;
+    public int fieldInt34601;
+    public int fieldInt34602;
+    public int fieldInt34603;
+    public int fieldInt34604;
+    public int fieldInt34605;
+    public int fieldInt34606;
+    public int fieldInt34607;
+    public int fieldInt34608;
+    public int fieldInt34609;
+    public int fieldInt34610;
+    public int fieldInt34611;
+    public int fieldInt34612;
+    public int fieldInt34613;
+    public int fieldInt34614;
+    public int fieldInt34615;
+    public int fieldInt34616;
+    public int fieldInt34617;
+    public int fieldInt34618;
+    public int fieldInt34619;
+    public int fieldInt34620;
+    public int fieldInt34621;
+    public int fieldInt34622;
+    public int fieldInt34623;
+    public int fieldInt34624;
+    public int fieldInt34625;
+    public int fieldInt34626;
+    public int fieldInt34627;
+    public int fieldInt34628;
+    public int fieldInt34629;
+    public int fieldInt34630;
+    public int fieldInt34631;
+    public int fieldInt34632;
+    public int fieldInt34633;
+    public int fieldInt34634;
+    public int fieldInt34635;
+    public int fieldInt34636;
+    public int fieldInt34637;
+    public int fieldInt34638;
+    public int fieldInt34639;
+    public int fieldInt34640;
+    public int fieldInt34641;
+    public int fieldInt34642;
+    public int fieldInt34643;
+    public int fieldInt34644;
+    public int fieldInt34645;
+    public int fieldInt34646;
+    public int fieldInt34647;
+    public int fieldInt34648;
+    public int fieldInt34649;
+    public int fieldInt34650;
+    public int fieldInt34651;
+    public int fieldInt34652;
+    public int fieldInt34653;
+    public int fieldInt34654;
+    public int fieldInt34655;
+    public int fieldInt34656;
+    public int fieldInt34657;
+    public int fieldInt34658;
+    public int fieldInt34659;
+    public int fieldInt34660;
+    public int fieldInt34661;
+    public int fieldInt34662;
+    public int fieldInt34663;
+    public int fieldInt34664;
+    public int fieldInt34665;
+    public int fieldInt34666;
+    public int fieldInt34667;
+    public int fieldInt34668;
+    public int fieldInt34669;
+    public int fieldInt34670;
+    public int fieldInt34671;
+    public int fieldInt34672;
+    public int fieldInt34673;
+    public int fieldInt34674;
+    public int fieldInt34675;
+    public int fieldInt34676;
+    public int fieldInt34677;
+    public int fieldInt34678;
+    public int fieldInt34679;
+    public int fieldInt34680;
+    public int fieldInt34681;
+    public int fieldInt34682;
+    public int fieldInt34683;
+    public int fieldInt34684;
+    public int fieldInt34685;
+    public int fieldInt34686;
+    public int fieldInt34687;
+    public int fieldInt34688;
+    public int fieldInt34689;
+    public int fieldInt34690;
+    public int fieldInt34691;
+    public int fieldInt34692;
+    public int fieldInt34693;
+    public int fieldInt34694;
+    public int fieldInt34695;
+    public int fieldInt34696;
+    public int fieldInt34697;
+    public int fieldInt34698;
+    public int fieldInt34699;
+    public int fieldInt34700;
+    public int fieldInt34701;
+    public int fieldInt34702;
+    public int fieldInt34703;
+    public int fieldInt34704;
+    public int fieldInt34705;
+    public int fieldInt34706;
+    public int fieldInt34707;
+    public int fieldInt34708;
+    public int fieldInt34709;
+    public int fieldInt34710;
+    public int fieldInt34711;
+    public int fieldInt34712;
+    public int fieldInt34713;
+    public int fieldInt34714;
+    public int fieldInt34715;
+    public int fieldInt34716;
+    public int fieldInt34717;
+    public int fieldInt34718;
+    public int fieldInt34719;
+    public int fieldInt34720;
+    public int fieldInt34721;
+    public int fieldInt34722;
+    public int fieldInt34723;
+    public int fieldInt34724;
+    public int fieldInt34725;
+    public int fieldInt34726;
+    public int fieldInt34727;
+    public int fieldInt34728;
+    public int fieldInt34729;
+    public int fieldInt34730;
+    public int fieldInt34731;
+    public int fieldInt34732;
+    public int fieldInt34733;
+    public int fieldInt34734;
+    public int fieldInt34735;
+    public int fieldInt34736;
+    public int fieldInt34737;
+    public int fieldInt34738;
+    public int fieldInt34739;
+    public int fieldInt34740;
+    public int fieldInt34741;
+    public int fieldInt34742;
+    public int fieldInt34743;
+    public int fieldInt34744;
+    public int fieldInt34745;
+    public int fieldInt34746;
+    public int fieldInt34747;
+    public int fieldInt34748;
+    public int fieldInt34749;
+    public int fieldInt34750;
+    public int fieldInt34751;
+    public int fieldInt34752;
+    public int fieldInt34753;
+    public int fieldInt34754;
+    public int fieldInt34755;
+    public int fieldInt34756;
+    public int fieldInt34757;
+    public int fieldInt34758;
+    public int fieldInt34759;
+    public int fieldInt34760;
+    public int fieldInt34761;
+    public int fieldInt34762;
+    public int fieldInt34763;
+    public int fieldInt34764;
+    public int fieldInt34765;
+    public int fieldInt34766;
+    public int fieldInt34767;
+    public int fieldInt34768;
+    public int fieldInt34769;
+    public int fieldInt34770;
+    public int fieldInt34771;
+    public int fieldInt34772;
+    public int fieldInt34773;
+    public int fieldInt34774;
+    public int fieldInt34775;
+    public int fieldInt34776;
+    public int fieldInt34777;
+    public int fieldInt34778;
+    public int fieldInt34779;
+    public int fieldInt34780;
+    public int fieldInt34781;
+    public int fieldInt34782;
+    public int fieldInt34783;
+    public int fieldInt34784;
+    public int fieldInt34785;
+    public int fieldInt34786;
+    public int fieldInt34787;
+    public int fieldInt34788;
+    public int fieldInt34789;
+    public int fieldInt34790;
+    public int fieldInt34791;
+    public int fieldInt34792;
+    public int fieldInt34793;
+    public int fieldInt34794;
+    public int fieldInt34795;
+    public int fieldInt34796;
+    public int fieldInt34797;
+    public int fieldInt34798;
+    public int fieldInt34799;
+    public int fieldInt34800;
+    public int fieldInt34801;
+    public int fieldInt34802;
+    public int fieldInt34803;
+    public int fieldInt34804;
+    public int fieldInt34805;
+    public int fieldInt34806;
+    public int fieldInt34807;
+    public int fieldInt34808;
+    public int fieldInt34809;
+    public int fieldInt34810;
+    public int fieldInt34811;
+    public int fieldInt34812;
+    public int fieldInt34813;
+    public int fieldInt34814;
+    public int fieldInt34815;
+    public int fieldInt34816;
+    public int fieldInt34817;
+    public int fieldInt34818;
+    public int fieldInt34819;
+    public int fieldInt34820;
+    public int fieldInt34821;
+    public int fieldInt34822;
+    public int fieldInt34823;
+    public int fieldInt34824;
+    public int fieldInt34825;
+    public int fieldInt34826;
+    public int fieldInt34827;
+    public int fieldInt34828;
+    public int fieldInt34829;
+    public int fieldInt34830;
+    public int fieldInt34831;
+    public int fieldInt34832;
+    public int fieldInt34833;
+    public int fieldInt34834;
+    public int fieldInt34835;
+    public int fieldInt34836;
+    public int fieldInt34837;
+    public int fieldInt34838;
+    public int fieldInt34839;
+    public int fieldInt34840;
+    public int fieldInt34841;
+    public int fieldInt34842;
+    public int fieldInt34843;
+    public int fieldInt34844;
+    public int fieldInt34845;
+    public int fieldInt34846;
+    public int fieldInt34847;
+    public int fieldInt34848;
+    public int fieldInt34849;
+    public int fieldInt34850;
+    public int fieldInt34851;
+    public int fieldInt34852;
+    public int fieldInt34853;
+    public int fieldInt34854;
+    public int fieldInt34855;
+    public int fieldInt34856;
+    public int fieldInt34857;
+    public int fieldInt34858;
+    public int fieldInt34859;
+    public int fieldInt34860;
+    public int fieldInt34861;
+    public int fieldInt34862;
+    public int fieldInt34863;
+    public int fieldInt34864;
+    public int fieldInt34865;
+    public int fieldInt34866;
+    public int fieldInt34867;
+    public int fieldInt34868;
+    public int fieldInt34869;
+    public int fieldInt34870;
+    public int fieldInt34871;
+    public int fieldInt34872;
+    public int fieldInt34873;
+    public int fieldInt34874;
+    public int fieldInt34875;
+    public int fieldInt34876;
+    public int fieldInt34877;
+    public int fieldInt34878;
+    public int fieldInt34879;
+    public int fieldInt34880;
+    public int fieldInt34881;
+    public int fieldInt34882;
+    public int fieldInt34883;
+    public int fieldInt34884;
+    public int fieldInt34885;
+    public int fieldInt34886;
+    public int fieldInt34887;
+    public int fieldInt34888;
+    public int fieldInt34889;
+    public int fieldInt34890;
+    public int fieldInt34891;
+    public int fieldInt34892;
+    public int fieldInt34893;
+    public int fieldInt34894;
+    public int fieldInt34895;
+    public int fieldInt34896;
+    public int fieldInt34897;
+    public int fieldInt34898;
+    public int fieldInt34899;
+    public int fieldInt34900;
+    public int fieldInt34901;
+    public int fieldInt34902;
+    public int fieldInt34903;
+    public int fieldInt34904;
+    public int fieldInt34905;
+    public int fieldInt34906;
+    public int fieldInt34907;
+    public int fieldInt34908;
+    public int fieldInt34909;
+    public int fieldInt34910;
+    public int fieldInt34911;
+    public int fieldInt34912;
+    public int fieldInt34913;
+    public int fieldInt34914;
+    public int fieldInt34915;
+    public int fieldInt34916;
+    public int fieldInt34917;
+    public int fieldInt34918;
+    public int fieldInt34919;
+    public int fieldInt34920;
+    public int fieldInt34921;
+    public int fieldInt34922;
+    public int fieldInt34923;
+    public int fieldInt34924;
+    public int fieldInt34925;
+    public int fieldInt34926;
+    public int fieldInt34927;
+    public int fieldInt34928;
+    public int fieldInt34929;
+    public int fieldInt34930;
+    public int fieldInt34931;
+    public int fieldInt34932;
+    public int fieldInt34933;
+    public int fieldInt34934;
+    public int fieldInt34935;
+    public int fieldInt34936;
+    public int fieldInt34937;
+    public int fieldInt34938;
+    public int fieldInt34939;
+    public int fieldInt34940;
+    public int fieldInt34941;
+    public int fieldInt34942;
+    public int fieldInt34943;
+    public int fieldInt34944;
+    public int fieldInt34945;
+    public int fieldInt34946;
+    public int fieldInt34947;
+    public int fieldInt34948;
+    public int fieldInt34949;
+    public int fieldInt34950;
+    public int fieldInt34951;
+    public int fieldInt34952;
+    public int fieldInt34953;
+    public int fieldInt34954;
+    public int fieldInt34955;
+    public int fieldInt34956;
+    public int fieldInt34957;
+    public int fieldInt34958;
+    public int fieldInt34959;
+    public int fieldInt34960;
+    public int fieldInt34961;
+    public int fieldInt34962;
+    public int fieldInt34963;
+    public int fieldInt34964;
+    public int fieldInt34965;
+    public int fieldInt34966;
+    public int fieldInt34967;
+    public int fieldInt34968;
+    public int fieldInt34969;
+    public int fieldInt34970;
+    public int fieldInt34971;
+    public int fieldInt34972;
+    public int fieldInt34973;
+    public int fieldInt34974;
+    public int fieldInt34975;
+    public int fieldInt34976;
+    public int fieldInt34977;
+    public int fieldInt34978;
+    public int fieldInt34979;
+    public int fieldInt34980;
+    public int fieldInt34981;
+    public int fieldInt34982;
+    public int fieldInt34983;
+    public int fieldInt34984;
+    public int fieldInt34985;
+    public int fieldInt34986;
+    public int fieldInt34987;
+    public int fieldInt34988;
+    public int fieldInt34989;
+    public int fieldInt34990;
+    public int fieldInt34991;
+    public int fieldInt34992;
+    public int fieldInt34993;
+    public int fieldInt34994;
+    public int fieldInt34995;
+    public int fieldInt34996;
+    public int fieldInt34997;
+    public int fieldInt34998;
+    public int fieldInt34999;
+    public int fieldInt35000;
+    public int fieldInt35001;
+    public int fieldInt35002;
+    public int fieldInt35003;
+    public int fieldInt35004;
+    public int fieldInt35005;
+    public int fieldInt35006;
+    public int fieldInt35007;
+    public int fieldInt35008;
+    public int fieldInt35009;
+    public int fieldInt35010;
+    public int fieldInt35011;
+    public int fieldInt35012;
+    public int fieldInt35013;
+    public int fieldInt35014;
+    public int fieldInt35015;
+    public int fieldInt35016;
+    public int fieldInt35017;
+    public int fieldInt35018;
+    public int fieldInt35019;
+    public int fieldInt35020;
+    public int fieldInt35021;
+    public int fieldInt35022;
+    public int fieldInt35023;
+    public int fieldInt35024;
+    public int fieldInt35025;
+    public int fieldInt35026;
+    public int fieldInt35027;
+    public int fieldInt35028;
+    public int fieldInt35029;
+    public int fieldInt35030;
+    public int fieldInt35031;
+    public int fieldInt35032;
+    public int fieldInt35033;
+    public int fieldInt35034;
+    public int fieldInt35035;
+    public int fieldInt35036;
+    public int fieldInt35037;
+    public int fieldInt35038;
+    public int fieldInt35039;
+    public int fieldInt35040;
+    public int fieldInt35041;
+    public int fieldInt35042;
+    public int fieldInt35043;
+    public int fieldInt35044;
+    public int fieldInt35045;
+    public int fieldInt35046;
+    public int fieldInt35047;
+    public int fieldInt35048;
+    public int fieldInt35049;
+    public int fieldInt35050;
+    public int fieldInt35051;
+    public int fieldInt35052;
+    public int fieldInt35053;
+    public int fieldInt35054;
+    public int fieldInt35055;
+    public int fieldInt35056;
+    public int fieldInt35057;
+    public int fieldInt35058;
+    public int fieldInt35059;
+    public int fieldInt35060;
+    public int fieldInt35061;
+    public int fieldInt35062;
+    public int fieldInt35063;
+    public int fieldInt35064;
+    public int fieldInt35065;
+    public int fieldInt35066;
+    public int fieldInt35067;
+    public int fieldInt35068;
+    public int fieldInt35069;
+    public int fieldInt35070;
+    public int fieldInt35071;
+    public int fieldInt35072;
+    public int fieldInt35073;
+    public int fieldInt35074;
+    public int fieldInt35075;
+    public int fieldInt35076;
+    public int fieldInt35077;
+    public int fieldInt35078;
+    public int fieldInt35079;
+    public int fieldInt35080;
+    public int fieldInt35081;
+    public int fieldInt35082;
+    public int fieldInt35083;
+    public int fieldInt35084;
+    public int fieldInt35085;
+    public int fieldInt35086;
+    public int fieldInt35087;
+    public int fieldInt35088;
+    public int fieldInt35089;
+    public int fieldInt35090;
+    public int fieldInt35091;
+    public int fieldInt35092;
+    public int fieldInt35093;
+    public int fieldInt35094;
+    public int fieldInt35095;
+    public int fieldInt35096;
+    public int fieldInt35097;
+    public int fieldInt35098;
+    public int fieldInt35099;
+    public int fieldInt35100;
+    public int fieldInt35101;
+    public int fieldInt35102;
+    public int fieldInt35103;
+    public int fieldInt35104;
+    public int fieldInt35105;
+    public int fieldInt35106;
+    public int fieldInt35107;
+    public int fieldInt35108;
+    public int fieldInt35109;
+    public int fieldInt35110;
+    public int fieldInt35111;
+    public int fieldInt35112;
+    public int fieldInt35113;
+    public int fieldInt35114;
+    public int fieldInt35115;
+    public int fieldInt35116;
+    public int fieldInt35117;
+    public int fieldInt35118;
+    public int fieldInt35119;
+    public int fieldInt35120;
+    public int fieldInt35121;
+    public int fieldInt35122;
+    public int fieldInt35123;
+    public int fieldInt35124;
+    public int fieldInt35125;
+    public int fieldInt35126;
+    public int fieldInt35127;
+    public int fieldInt35128;
+    public int fieldInt35129;
+    public int fieldInt35130;
+    public int fieldInt35131;
+    public int fieldInt35132;
+    public int fieldInt35133;
+    public int fieldInt35134;
+    public int fieldInt35135;
+    public int fieldInt35136;
+    public int fieldInt35137;
+    public int fieldInt35138;
+    public int fieldInt35139;
+    public int fieldInt35140;
+    public int fieldInt35141;
+    public int fieldInt35142;
+    public int fieldInt35143;
+    public int fieldInt35144;
+    public int fieldInt35145;
+    public int fieldInt35146;
+    public int fieldInt35147;
+    public int fieldInt35148;
+    public int fieldInt35149;
+    public int fieldInt35150;
+    public int fieldInt35151;
+    public int fieldInt35152;
+    public int fieldInt35153;
+    public int fieldInt35154;
+    public int fieldInt35155;
+    public int fieldInt35156;
+    public int fieldInt35157;
+    public int fieldInt35158;
+    public int fieldInt35159;
+    public int fieldInt35160;
+    public int fieldInt35161;
+    public int fieldInt35162;
+    public int fieldInt35163;
+    public int fieldInt35164;
+    public int fieldInt35165;
+    public int fieldInt35166;
+    public int fieldInt35167;
+    public int fieldInt35168;
+    public int fieldInt35169;
+    public int fieldInt35170;
+    public int fieldInt35171;
+    public int fieldInt35172;
+    public int fieldInt35173;
+    public int fieldInt35174;
+    public int fieldInt35175;
+    public int fieldInt35176;
+    public int fieldInt35177;
+    public int fieldInt35178;
+    public int fieldInt35179;
+    public int fieldInt35180;
+    public int fieldInt35181;
+    public int fieldInt35182;
+    public int fieldInt35183;
+    public int fieldInt35184;
+    public int fieldInt35185;
+    public int fieldInt35186;
+    public int fieldInt35187;
+    public int fieldInt35188;
+    public int fieldInt35189;
+    public int fieldInt35190;
+    public int fieldInt35191;
+    public int fieldInt35192;
+    public int fieldInt35193;
+    public int fieldInt35194;
+    public int fieldInt35195;
+    public int fieldInt35196;
+    public int fieldInt35197;
+    public int fieldInt35198;
+    public int fieldInt35199;
+    public int fieldInt35200;
+    public int fieldInt35201;
+    public int fieldInt35202;
+    public int fieldInt35203;
+    public int fieldInt35204;
+    public int fieldInt35205;
+    public int fieldInt35206;
+    public int fieldInt35207;
+    public int fieldInt35208;
+    public int fieldInt35209;
+    public int fieldInt35210;
+    public int fieldInt35211;
+    public int fieldInt35212;
+    public int fieldInt35213;
+    public int fieldInt35214;
+    public int fieldInt35215;
+    public int fieldInt35216;
+    public int fieldInt35217;
+    public int fieldInt35218;
+    public int fieldInt35219;
+    public int fieldInt35220;
+    public int fieldInt35221;
+    public int fieldInt35222;
+    public int fieldInt35223;
+    public int fieldInt35224;
+    public int fieldInt35225;
+    public int fieldInt35226;
+    public int fieldInt35227;
+    public int fieldInt35228;
+    public int fieldInt35229;
+    public int fieldInt35230;
+    public int fieldInt35231;
+    public int fieldInt35232;
+    public int fieldInt35233;
+    public int fieldInt35234;
+    public int fieldInt35235;
+    public int fieldInt35236;
+    public int fieldInt35237;
+    public int fieldInt35238;
+    public int fieldInt35239;
+    public int fieldInt35240;
+    public int fieldInt35241;
+    public int fieldInt35242;
+    public int fieldInt35243;
+    public int fieldInt35244;
+    public int fieldInt35245;
+    public int fieldInt35246;
+    public int fieldInt35247;
+    public int fieldInt35248;
+    public int fieldInt35249;
+    public int fieldInt35250;
+    public int fieldInt35251;
+    public int fieldInt35252;
+    public int fieldInt35253;
+    public int fieldInt35254;
+    public int fieldInt35255;
+    public int fieldInt35256;
+    public int fieldInt35257;
+    public int fieldInt35258;
+    public int fieldInt35259;
+    public int fieldInt35260;
+    public int fieldInt35261;
+    public int fieldInt35262;
+    public int fieldInt35263;
+    public int fieldInt35264;
+    public int fieldInt35265;
+    public int fieldInt35266;
+    public int fieldInt35267;
+    public int fieldInt35268;
+    public int fieldInt35269;
+    public int fieldInt35270;
+    public int fieldInt35271;
+    public int fieldInt35272;
+    public int fieldInt35273;
+    public int fieldInt35274;
+    public int fieldInt35275;
+    public int fieldInt35276;
+    public int fieldInt35277;
+    public int fieldInt35278;
+    public int fieldInt35279;
+    public int fieldInt35280;
+    public int fieldInt35281;
+    public int fieldInt35282;
+    public int fieldInt35283;
+    public int fieldInt35284;
+    public int fieldInt35285;
+    public int fieldInt35286;
+    public int fieldInt35287;
+    public int fieldInt35288;
+    public int fieldInt35289;
+    public int fieldInt35290;
+    public int fieldInt35291;
+    public int fieldInt35292;
+    public int fieldInt35293;
+    public int fieldInt35294;
+    public int fieldInt35295;
+    public int fieldInt35296;
+    public int fieldInt35297;
+    public int fieldInt35298;
+    public int fieldInt35299;
+    public int fieldInt35300;
+    public int fieldInt35301;
+    public int fieldInt35302;
+    public int fieldInt35303;
+    public int fieldInt35304;
+    public int fieldInt35305;
+    public int fieldInt35306;
+    public int fieldInt35307;
+    public int fieldInt35308;
+    public int fieldInt35309;
+    public int fieldInt35310;
+    public int fieldInt35311;
+    public int fieldInt35312;
+    public int fieldInt35313;
+    public int fieldInt35314;
+    public int fieldInt35315;
+    public int fieldInt35316;
+    public int fieldInt35317;
+    public int fieldInt35318;
+    public int fieldInt35319;
+    public int fieldInt35320;
+    public int fieldInt35321;
+    public int fieldInt35322;
+    public int fieldInt35323;
+    public int fieldInt35324;
+    public int fieldInt35325;
+    public int fieldInt35326;
+    public int fieldInt35327;
+    public int fieldInt35328;
+    public int fieldInt35329;
+    public int fieldInt35330;
+    public int fieldInt35331;
+    public int fieldInt35332;
+    public int fieldInt35333;
+    public int fieldInt35334;
+    public int fieldInt35335;
+    public int fieldInt35336;
+    public int fieldInt35337;
+    public int fieldInt35338;
+    public int fieldInt35339;
+    public int fieldInt35340;
+    public int fieldInt35341;
+    public int fieldInt35342;
+    public int fieldInt35343;
+    public int fieldInt35344;
+    public int fieldInt35345;
+    public int fieldInt35346;
+    public int fieldInt35347;
+    public int fieldInt35348;
+    public int fieldInt35349;
+    public int fieldInt35350;
+    public int fieldInt35351;
+    public int fieldInt35352;
+    public int fieldInt35353;
+    public int fieldInt35354;
+    public int fieldInt35355;
+    public int fieldInt35356;
+    public int fieldInt35357;
+    public int fieldInt35358;
+    public int fieldInt35359;
+    public int fieldInt35360;
+    public int fieldInt35361;
+    public int fieldInt35362;
+    public int fieldInt35363;
+    public int fieldInt35364;
+    public int fieldInt35365;
+    public int fieldInt35366;
+    public int fieldInt35367;
+    public int fieldInt35368;
+    public int fieldInt35369;
+    public int fieldInt35370;
+    public int fieldInt35371;
+    public int fieldInt35372;
+    public int fieldInt35373;
+    public int fieldInt35374;
+    public int fieldInt35375;
+    public int fieldInt35376;
+    public int fieldInt35377;
+    public int fieldInt35378;
+    public int fieldInt35379;
+    public int fieldInt35380;
+    public int fieldInt35381;
+    public int fieldInt35382;
+    public int fieldInt35383;
+    public int fieldInt35384;
+    public int fieldInt35385;
+    public int fieldInt35386;
+    public int fieldInt35387;
+    public int fieldInt35388;
+    public int fieldInt35389;
+    public int fieldInt35390;
+    public int fieldInt35391;
+    public int fieldInt35392;
+    public int fieldInt35393;
+    public int fieldInt35394;
+    public int fieldInt35395;
+    public int fieldInt35396;
+    public int fieldInt35397;
+    public int fieldInt35398;
+    public int fieldInt35399;
+    public int fieldInt35400;
+    public int fieldInt35401;
+    public int fieldInt35402;
+    public int fieldInt35403;
+    public int fieldInt35404;
+    public int fieldInt35405;
+    public int fieldInt35406;
+    public int fieldInt35407;
+    public int fieldInt35408;
+    public int fieldInt35409;
+    public int fieldInt35410;
+    public int fieldInt35411;
+    public int fieldInt35412;
+    public int fieldInt35413;
+    public int fieldInt35414;
+    public int fieldInt35415;
+    public int fieldInt35416;
+    public int fieldInt35417;
+    public int fieldInt35418;
+    public int fieldInt35419;
+    public int fieldInt35420;
+    public int fieldInt35421;
+    public int fieldInt35422;
+    public int fieldInt35423;
+    public int fieldInt35424;
+    public int fieldInt35425;
+    public int fieldInt35426;
+    public int fieldInt35427;
+    public int fieldInt35428;
+    public int fieldInt35429;
+    public int fieldInt35430;
+    public int fieldInt35431;
+    public int fieldInt35432;
+    public int fieldInt35433;
+    public int fieldInt35434;
+    public int fieldInt35435;
+    public int fieldInt35436;
+    public int fieldInt35437;
+    public int fieldInt35438;
+    public int fieldInt35439;
+    public int fieldInt35440;
+    public int fieldInt35441;
+    public int fieldInt35442;
+    public int fieldInt35443;
+    public int fieldInt35444;
+    public int fieldInt35445;
+    public int fieldInt35446;
+    public int fieldInt35447;
+    public int fieldInt35448;
+    public int fieldInt35449;
+    public int fieldInt35450;
+    public int fieldInt35451;
+    public int fieldInt35452;
+    public int fieldInt35453;
+    public int fieldInt35454;
+    public int fieldInt35455;
+    public int fieldInt35456;
+    public int fieldInt35457;
+    public int fieldInt35458;
+    public int fieldInt35459;
+    public int fieldInt35460;
+    public int fieldInt35461;
+    public int fieldInt35462;
+    public int fieldInt35463;
+    public int fieldInt35464;
+    public int fieldInt35465;
+    public int fieldInt35466;
+    public int fieldInt35467;
+    public int fieldInt35468;
+    public int fieldInt35469;
+    public int fieldInt35470;
+    public int fieldInt35471;
+    public int fieldInt35472;
+    public int fieldInt35473;
+    public int fieldInt35474;
+    public int fieldInt35475;
+    public int fieldInt35476;
+    public int fieldInt35477;
+    public int fieldInt35478;
+    public int fieldInt35479;
+    public int fieldInt35480;
+    public int fieldInt35481;
+    public int fieldInt35482;
+    public int fieldInt35483;
+    public int fieldInt35484;
+    public int fieldInt35485;
+    public int fieldInt35486;
+    public int fieldInt35487;
+    public int fieldInt35488;
+    public int fieldInt35489;
+    public int fieldInt35490;
+    public int fieldInt35491;
+    public int fieldInt35492;
+    public int fieldInt35493;
+    public int fieldInt35494;
+    public int fieldInt35495;
+    public int fieldInt35496;
+    public int fieldInt35497;
+    public int fieldInt35498;
+    public int fieldInt35499;
+    public int fieldInt35500;
+    public int fieldInt35501;
+    public int fieldInt35502;
+    public int fieldInt35503;
+    public int fieldInt35504;
+    public int fieldInt35505;
+    public int fieldInt35506;
+    public int fieldInt35507;
+    public int fieldInt35508;
+    public int fieldInt35509;
+    public int fieldInt35510;
+    public int fieldInt35511;
+    public int fieldInt35512;
+    public int fieldInt35513;
+    public int fieldInt35514;
+    public int fieldInt35515;
+    public int fieldInt35516;
+    public int fieldInt35517;
+    public int fieldInt35518;
+    public int fieldInt35519;
+    public int fieldInt35520;
+    public int fieldInt35521;
+    public int fieldInt35522;
+    public int fieldInt35523;
+    public int fieldInt35524;
+    public int fieldInt35525;
+    public int fieldInt35526;
+    public int fieldInt35527;
+    public int fieldInt35528;
+    public int fieldInt35529;
+    public int fieldInt35530;
+    public int fieldInt35531;
+    public int fieldInt35532;
+    public int fieldInt35533;
+    public int fieldInt35534;
+    public int fieldInt35535;
+    public int fieldInt35536;
+    public int fieldInt35537;
+    public int fieldInt35538;
+    public int fieldInt35539;
+    public int fieldInt35540;
+    public int fieldInt35541;
+    public int fieldInt35542;
+    public int fieldInt35543;
+    public int fieldInt35544;
+    public int fieldInt35545;
+    public int fieldInt35546;
+    public int fieldInt35547;
+    public int fieldInt35548;
+    public int fieldInt35549;
+    public int fieldInt35550;
+    public int fieldInt35551;
+    public int fieldInt35552;
+    public int fieldInt35553;
+    public int fieldInt35554;
+    public int fieldInt35555;
+    public int fieldInt35556;
+    public int fieldInt35557;
+    public int fieldInt35558;
+    public int fieldInt35559;
+    public int fieldInt35560;
+    public int fieldInt35561;
+    public int fieldInt35562;
+    public int fieldInt35563;
+    public int fieldInt35564;
+    public int fieldInt35565;
+    public int fieldInt35566;
+    public int fieldInt35567;
+    public int fieldInt35568;
+    public int fieldInt35569;
+    public int fieldInt35570;
+    public int fieldInt35571;
+    public int fieldInt35572;
+    public int fieldInt35573;
+    public int fieldInt35574;
+    public int fieldInt35575;
+    public int fieldInt35576;
+    public int fieldInt35577;
+    public int fieldInt35578;
+    public int fieldInt35579;
+    public int fieldInt35580;
+    public int fieldInt35581;
+    public int fieldInt35582;
+    public int fieldInt35583;
+    public int fieldInt35584;
+    public int fieldInt35585;
+    public int fieldInt35586;
+    public int fieldInt35587;
+    public int fieldInt35588;
+    public int fieldInt35589;
+    public int fieldInt35590;
+    public int fieldInt35591;
+    public int fieldInt35592;
+    public int fieldInt35593;
+    public int fieldInt35594;
+    public int fieldInt35595;
+    public int fieldInt35596;
+    public int fieldInt35597;
+    public int fieldInt35598;
+    public int fieldInt35599;
+    public int fieldInt35600;
+    public int fieldInt35601;
+    public int fieldInt35602;
+    public int fieldInt35603;
+    public int fieldInt35604;
+    public int fieldInt35605;
+    public int fieldInt35606;
+    public int fieldInt35607;
+    public int fieldInt35608;
+    public int fieldInt35609;
+    public int fieldInt35610;
+    public int fieldInt35611;
+    public int fieldInt35612;
+    public int fieldInt35613;
+    public int fieldInt35614;
+    public int fieldInt35615;
+    public int fieldInt35616;
+    public int fieldInt35617;
+    public int fieldInt35618;
+    public int fieldInt35619;
+    public int fieldInt35620;
+    public int fieldInt35621;
+    public int fieldInt35622;
+    public int fieldInt35623;
+    public int fieldInt35624;
+    public int fieldInt35625;
+    public int fieldInt35626;
+    public int fieldInt35627;
+    public int fieldInt35628;
+    public int fieldInt35629;
+    public int fieldInt35630;
+    public int fieldInt35631;
+    public int fieldInt35632;
+    public int fieldInt35633;
+    public int fieldInt35634;
+    public int fieldInt35635;
+    public int fieldInt35636;
+    public int fieldInt35637;
+    public int fieldInt35638;
+    public int fieldInt35639;
+    public int fieldInt35640;
+    public int fieldInt35641;
+    public int fieldInt35642;
+    public int fieldInt35643;
+    public int fieldInt35644;
+    public int fieldInt35645;
+    public int fieldInt35646;
+    public int fieldInt35647;
+    public int fieldInt35648;
+    public int fieldInt35649;
+    public int fieldInt35650;
+    public int fieldInt35651;
+    public int fieldInt35652;
+    public int fieldInt35653;
+    public int fieldInt35654;
+    public int fieldInt35655;
+    public int fieldInt35656;
+    public int fieldInt35657;
+    public int fieldInt35658;
+    public int fieldInt35659;
+    public int fieldInt35660;
+    public int fieldInt35661;
+    public int fieldInt35662;
+    public int fieldInt35663;
+    public int fieldInt35664;
+    public int fieldInt35665;
+    public int fieldInt35666;
+    public int fieldInt35667;
+    public int fieldInt35668;
+    public int fieldInt35669;
+    public int fieldInt35670;
+    public int fieldInt35671;
+    public int fieldInt35672;
+    public int fieldInt35673;
+    public int fieldInt35674;
+    public int fieldInt35675;
+    public int fieldInt35676;
+    public int fieldInt35677;
+    public int fieldInt35678;
+    public int fieldInt35679;
+    public int fieldInt35680;
+    public int fieldInt35681;
+    public int fieldInt35682;
+    public int fieldInt35683;
+    public int fieldInt35684;
+    public int fieldInt35685;
+    public int fieldInt35686;
+    public int fieldInt35687;
+    public int fieldInt35688;
+    public int fieldInt35689;
+    public int fieldInt35690;
+    public int fieldInt35691;
+    public int fieldInt35692;
+    public int fieldInt35693;
+    public int fieldInt35694;
+    public int fieldInt35695;
+    public int fieldInt35696;
+    public int fieldInt35697;
+    public int fieldInt35698;
+    public int fieldInt35699;
+    public int fieldInt35700;
+    public int fieldInt35701;
+    public int fieldInt35702;
+    public int fieldInt35703;
+    public int fieldInt35704;
+    public int fieldInt35705;
+    public int fieldInt35706;
+    public int fieldInt35707;
+    public int fieldInt35708;
+    public int fieldInt35709;
+    public int fieldInt35710;
+    public int fieldInt35711;
+    public int fieldInt35712;
+    public int fieldInt35713;
+    public int fieldInt35714;
+    public int fieldInt35715;
+    public int fieldInt35716;
+    public int fieldInt35717;
+    public int fieldInt35718;
+    public int fieldInt35719;
+    public int fieldInt35720;
+    public int fieldInt35721;
+    public int fieldInt35722;
+    public int fieldInt35723;
+    public int fieldInt35724;
+    public int fieldInt35725;
+    public int fieldInt35726;
+    public int fieldInt35727;
+    public int fieldInt35728;
+    public int fieldInt35729;
+    public int fieldInt35730;
+    public int fieldInt35731;
+    public int fieldInt35732;
+    public int fieldInt35733;
+    public int fieldInt35734;
+    public int fieldInt35735;
+    public int fieldInt35736;
+    public int fieldInt35737;
+    public int fieldInt35738;
+    public int fieldInt35739;
+    public int fieldInt35740;
+    public int fieldInt35741;
+    public int fieldInt35742;
+    public int fieldInt35743;
+    public int fieldInt35744;
+    public int fieldInt35745;
+    public int fieldInt35746;
+    public int fieldInt35747;
+    public int fieldInt35748;
+    public int fieldInt35749;
+    public int fieldInt35750;
+    public int fieldInt35751;
+    public int fieldInt35752;
+    public int fieldInt35753;
+    public int fieldInt35754;
+    public int fieldInt35755;
+    public int fieldInt35756;
+    public int fieldInt35757;
+    public int fieldInt35758;
+    public int fieldInt35759;
+    public int fieldInt35760;
+    public int fieldInt35761;
+    public int fieldInt35762;
+    public int fieldInt35763;
+    public int fieldInt35764;
+    public int fieldInt35765;
+    public int fieldInt35766;
+    public int fieldInt35767;
+    public int fieldInt35768;
+    public int fieldInt35769;
+    public int fieldInt35770;
+    public int fieldInt35771;
+    public int fieldInt35772;
+    public int fieldInt35773;
+    public int fieldInt35774;
+    public int fieldInt35775;
+    public int fieldInt35776;
+    public int fieldInt35777;
+    public int fieldInt35778;
+    public int fieldInt35779;
+    public int fieldInt35780;
+    public int fieldInt35781;
+    public int fieldInt35782;
+    public int fieldInt35783;
+    public int fieldInt35784;
+    public int fieldInt35785;
+    public int fieldInt35786;
+    public int fieldInt35787;
+    public int fieldInt35788;
+    public int fieldInt35789;
+    public int fieldInt35790;
+    public int fieldInt35791;
+    public int fieldInt35792;
+    public int fieldInt35793;
+    public int fieldInt35794;
+    public int fieldInt35795;
+    public int fieldInt35796;
+    public int fieldInt35797;
+    public int fieldInt35798;
+    public int fieldInt35799;
+    public int fieldInt35800;
+    public int fieldInt35801;
+    public int fieldInt35802;
+    public int fieldInt35803;
+    public int fieldInt35804;
+    public int fieldInt35805;
+    public int fieldInt35806;
+    public int fieldInt35807;
+    public int fieldInt35808;
+    public int fieldInt35809;
+    public int fieldInt35810;
+    public int fieldInt35811;
+    public int fieldInt35812;
+    public int fieldInt35813;
+    public int fieldInt35814;
+    public int fieldInt35815;
+    public int fieldInt35816;
+    public int fieldInt35817;
+    public int fieldInt35818;
+    public int fieldInt35819;
+    public int fieldInt35820;
+    public int fieldInt35821;
+    public int fieldInt35822;
+    public int fieldInt35823;
+    public int fieldInt35824;
+    public int fieldInt35825;
+    public int fieldInt35826;
+    public int fieldInt35827;
+    public int fieldInt35828;
+    public int fieldInt35829;
+    public int fieldInt35830;
+    public int fieldInt35831;
+    public int fieldInt35832;
+    public int fieldInt35833;
+    public int fieldInt35834;
+    public int fieldInt35835;
+    public int fieldInt35836;
+    public int fieldInt35837;
+    public int fieldInt35838;
+    public int fieldInt35839;
+    public int fieldInt35840;
+    public int fieldInt35841;
+    public int fieldInt35842;
+    public int fieldInt35843;
+    public int fieldInt35844;
+    public int fieldInt35845;
+    public int fieldInt35846;
+    public int fieldInt35847;
+    public int fieldInt35848;
+    public int fieldInt35849;
+    public int fieldInt35850;
+    public int fieldInt35851;
+    public int fieldInt35852;
+    public int fieldInt35853;
+    public int fieldInt35854;
+    public int fieldInt35855;
+    public int fieldInt35856;
+    public int fieldInt35857;
+    public int fieldInt35858;
+    public int fieldInt35859;
+    public int fieldInt35860;
+    public int fieldInt35861;
+    public int fieldInt35862;
+    public int fieldInt35863;
+    public int fieldInt35864;
+    public int fieldInt35865;
+    public int fieldInt35866;
+    public int fieldInt35867;
+    public int fieldInt35868;
+    public int fieldInt35869;
+    public int fieldInt35870;
+    public int fieldInt35871;
+    public int fieldInt35872;
+    public int fieldInt35873;
+    public int fieldInt35874;
+    public int fieldInt35875;
+    public int fieldInt35876;
+    public int fieldInt35877;
+    public int fieldInt35878;
+    public int fieldInt35879;
+    public int fieldInt35880;
+    public int fieldInt35881;
+    public int fieldInt35882;
+    public int fieldInt35883;
+    public int fieldInt35884;
+    public int fieldInt35885;
+    public int fieldInt35886;
+    public int fieldInt35887;
+    public int fieldInt35888;
+    public int fieldInt35889;
+    public int fieldInt35890;
+    public int fieldInt35891;
+    public int fieldInt35892;
+    public int fieldInt35893;
+    public int fieldInt35894;
+    public int fieldInt35895;
+    public int fieldInt35896;
+    public int fieldInt35897;
+    public int fieldInt35898;
+    public int fieldInt35899;
+    public int fieldInt35900;
+    public int fieldInt35901;
+    public int fieldInt35902;
+    public int fieldInt35903;
+    public int fieldInt35904;
+    public int fieldInt35905;
+    public int fieldInt35906;
+    public int fieldInt35907;
+    public int fieldInt35908;
+    public int fieldInt35909;
+    public int fieldInt35910;
+    public int fieldInt35911;
+    public int fieldInt35912;
+    public int fieldInt35913;
+    public int fieldInt35914;
+    public int fieldInt35915;
+    public int fieldInt35916;
+    public int fieldInt35917;
+    public int fieldInt35918;
+    public int fieldInt35919;
+    public int fieldInt35920;
+    public int fieldInt35921;
+    public int fieldInt35922;
+    public int fieldInt35923;
+    public int fieldInt35924;
+    public int fieldInt35925;
+    public int fieldInt35926;
+    public int fieldInt35927;
+    public int fieldInt35928;
+    public int fieldInt35929;
+    public int fieldInt35930;
+    public int fieldInt35931;
+    public int fieldInt35932;
+    public int fieldInt35933;
+    public int fieldInt35934;
+    public int fieldInt35935;
+    public int fieldInt35936;
+    public int fieldInt35937;
+    public int fieldInt35938;
+    public int fieldInt35939;
+    public int fieldInt35940;
+    public int fieldInt35941;
+    public int fieldInt35942;
+    public int fieldInt35943;
+    public int fieldInt35944;
+    public int fieldInt35945;
+    public int fieldInt35946;
+    public int fieldInt35947;
+    public int fieldInt35948;
+    public int fieldInt35949;
+    public int fieldInt35950;
+    public int fieldInt35951;
+    public int fieldInt35952;
+    public int fieldInt35953;
+    public int fieldInt35954;
+    public int fieldInt35955;
+    public int fieldInt35956;
+    public int fieldInt35957;
+    public int fieldInt35958;
+    public int fieldInt35959;
+    public int fieldInt35960;
+    public int fieldInt35961;
+    public int fieldInt35962;
+    public int fieldInt35963;
+    public int fieldInt35964;
+    public int fieldInt35965;
+    public int fieldInt35966;
+    public int fieldInt35967;
+    public int fieldInt35968;
+    public int fieldInt35969;
+    public int fieldInt35970;
+    public int fieldInt35971;
+    public int fieldInt35972;
+    public int fieldInt35973;
+    public int fieldInt35974;
+    public int fieldInt35975;
+    public int fieldInt35976;
+    public int fieldInt35977;
+    public int fieldInt35978;
+    public int fieldInt35979;
+    public int fieldInt35980;
+    public int fieldInt35981;
+    public int fieldInt35982;
+    public int fieldInt35983;
+    public int fieldInt35984;
+    public int fieldInt35985;
+    public int fieldInt35986;
+    public int fieldInt35987;
+    public int fieldInt35988;
+    public int fieldInt35989;
+    public int fieldInt35990;
+    public int fieldInt35991;
+    public int fieldInt35992;
+    public int fieldInt35993;
+    public int fieldInt35994;
+    public int fieldInt35995;
+    public int fieldInt35996;
+    public int fieldInt35997;
+    public int fieldInt35998;
+    public int fieldInt35999;
+    public int fieldInt36000;
+    public int fieldInt36001;
+    public int fieldInt36002;
+    public int fieldInt36003;
+    public int fieldInt36004;
+    public int fieldInt36005;
+    public int fieldInt36006;
+    public int fieldInt36007;
+    public int fieldInt36008;
+    public int fieldInt36009;
+    public int fieldInt36010;
+    public int fieldInt36011;
+    public int fieldInt36012;
+    public int fieldInt36013;
+    public int fieldInt36014;
+    public int fieldInt36015;
+    public int fieldInt36016;
+    public int fieldInt36017;
+    public int fieldInt36018;
+    public int fieldInt36019;
+    public int fieldInt36020;
+    public int fieldInt36021;
+    public int fieldInt36022;
+    public int fieldInt36023;
+    public int fieldInt36024;
+    public int fieldInt36025;
+    public int fieldInt36026;
+    public int fieldInt36027;
+    public int fieldInt36028;
+    public int fieldInt36029;
+    public int fieldInt36030;
+    public int fieldInt36031;
+    public int fieldInt36032;
+    public int fieldInt36033;
+    public int fieldInt36034;
+    public int fieldInt36035;
+    public int fieldInt36036;
+    public int fieldInt36037;
+    public int fieldInt36038;
+    public int fieldInt36039;
+    public int fieldInt36040;
+    public int fieldInt36041;
+    public int fieldInt36042;
+    public int fieldInt36043;
+    public int fieldInt36044;
+    public int fieldInt36045;
+    public int fieldInt36046;
+    public int fieldInt36047;
+    public int fieldInt36048;
+    public int fieldInt36049;
+    public int fieldInt36050;
+    public int fieldInt36051;
+    public int fieldInt36052;
+    public int fieldInt36053;
+    public int fieldInt36054;
+    public int fieldInt36055;
+    public int fieldInt36056;
+    public int fieldInt36057;
+    public int fieldInt36058;
+    public int fieldInt36059;
+    public int fieldInt36060;
+    public int fieldInt36061;
+    public int fieldInt36062;
+    public int fieldInt36063;
+    public int fieldInt36064;
+    public int fieldInt36065;
+    public int fieldInt36066;
+    public int fieldInt36067;
+    public int fieldInt36068;
+    public int fieldInt36069;
+    public int fieldInt36070;
+    public int fieldInt36071;
+    public int fieldInt36072;
+    public int fieldInt36073;
+    public int fieldInt36074;
+    public int fieldInt36075;
+    public int fieldInt36076;
+    public int fieldInt36077;
+    public int fieldInt36078;
+    public int fieldInt36079;
+    public int fieldInt36080;
+    public int fieldInt36081;
+    public int fieldInt36082;
+    public int fieldInt36083;
+    public int fieldInt36084;
+    public int fieldInt36085;
+    public int fieldInt36086;
+    public int fieldInt36087;
+    public int fieldInt36088;
+    public int fieldInt36089;
+    public int fieldInt36090;
+    public int fieldInt36091;
+    public int fieldInt36092;
+    public int fieldInt36093;
+    public int fieldInt36094;
+    public int fieldInt36095;
+    public int fieldInt36096;
+    public int fieldInt36097;
+    public int fieldInt36098;
+    public int fieldInt36099;
+    public int fieldInt36100;
+    public int fieldInt36101;
+    public int fieldInt36102;
+    public int fieldInt36103;
+    public int fieldInt36104;
+    public int fieldInt36105;
+    public int fieldInt36106;
+    public int fieldInt36107;
+    public int fieldInt36108;
+    public int fieldInt36109;
+    public int fieldInt36110;
+    public int fieldInt36111;
+    public int fieldInt36112;
+    public int fieldInt36113;
+    public int fieldInt36114;
+    public int fieldInt36115;
+    public int fieldInt36116;
+    public int fieldInt36117;
+    public int fieldInt36118;
+    public int fieldInt36119;
+    public int fieldInt36120;
+    public int fieldInt36121;
+    public int fieldInt36122;
+    public int fieldInt36123;
+    public int fieldInt36124;
+    public int fieldInt36125;
+    public int fieldInt36126;
+    public int fieldInt36127;
+    public int fieldInt36128;
+    public int fieldInt36129;
+    public int fieldInt36130;
+    public int fieldInt36131;
+    public int fieldInt36132;
+    public int fieldInt36133;
+    public int fieldInt36134;
+    public int fieldInt36135;
+    public int fieldInt36136;
+    public int fieldInt36137;
+    public int fieldInt36138;
+    public int fieldInt36139;
+    public int fieldInt36140;
+    public int fieldInt36141;
+    public int fieldInt36142;
+    public int fieldInt36143;
+    public int fieldInt36144;
+    public int fieldInt36145;
+    public int fieldInt36146;
+    public int fieldInt36147;
+    public int fieldInt36148;
+    public int fieldInt36149;
+    public int fieldInt36150;
+    public int fieldInt36151;
+    public int fieldInt36152;
+    public int fieldInt36153;
+    public int fieldInt36154;
+    public int fieldInt36155;
+    public int fieldInt36156;
+    public int fieldInt36157;
+    public int fieldInt36158;
+    public int fieldInt36159;
+    public int fieldInt36160;
+    public int fieldInt36161;
+    public int fieldInt36162;
+    public int fieldInt36163;
+    public int fieldInt36164;
+    public int fieldInt36165;
+    public int fieldInt36166;
+    public int fieldInt36167;
+    public int fieldInt36168;
+    public int fieldInt36169;
+    public int fieldInt36170;
+    public int fieldInt36171;
+    public int fieldInt36172;
+    public int fieldInt36173;
+    public int fieldInt36174;
+    public int fieldInt36175;
+    public int fieldInt36176;
+    public int fieldInt36177;
+    public int fieldInt36178;
+    public int fieldInt36179;
+    public int fieldInt36180;
+    public int fieldInt36181;
+    public int fieldInt36182;
+    public int fieldInt36183;
+    public int fieldInt36184;
+    public int fieldInt36185;
+    public int fieldInt36186;
+    public int fieldInt36187;
+    public int fieldInt36188;
+    public int fieldInt36189;
+    public int fieldInt36190;
+    public int fieldInt36191;
+    public int fieldInt36192;
+    public int fieldInt36193;
+    public int fieldInt36194;
+    public int fieldInt36195;
+    public int fieldInt36196;
+    public int fieldInt36197;
+    public int fieldInt36198;
+    public int fieldInt36199;
+    public int fieldInt36200;
+    public int fieldInt36201;
+    public int fieldInt36202;
+    public int fieldInt36203;
+    public int fieldInt36204;
+    public int fieldInt36205;
+    public int fieldInt36206;
+    public int fieldInt36207;
+    public int fieldInt36208;
+    public int fieldInt36209;
+    public int fieldInt36210;
+    public int fieldInt36211;
+    public int fieldInt36212;
+    public int fieldInt36213;
+    public int fieldInt36214;
+    public int fieldInt36215;
+    public int fieldInt36216;
+    public int fieldInt36217;
+    public int fieldInt36218;
+    public int fieldInt36219;
+    public int fieldInt36220;
+    public int fieldInt36221;
+    public int fieldInt36222;
+    public int fieldInt36223;
+    public int fieldInt36224;
+    public int fieldInt36225;
+    public int fieldInt36226;
+    public int fieldInt36227;
+    public int fieldInt36228;
+    public int fieldInt36229;
+    public int fieldInt36230;
+    public int fieldInt36231;
+    public int fieldInt36232;
+    public int fieldInt36233;
+    public int fieldInt36234;
+    public int fieldInt36235;
+    public int fieldInt36236;
+    public int fieldInt36237;
+    public int fieldInt36238;
+    public int fieldInt36239;
+    public int fieldInt36240;
+    public int fieldInt36241;
+    public int fieldInt36242;
+    public int fieldInt36243;
+    public int fieldInt36244;
+    public int fieldInt36245;
+    public int fieldInt36246;
+    public int fieldInt36247;
+    public int fieldInt36248;
+    public int fieldInt36249;
+    public int fieldInt36250;
+    public int fieldInt36251;
+    public int fieldInt36252;
+    public int fieldInt36253;
+    public int fieldInt36254;
+    public int fieldInt36255;
+    public int fieldInt36256;
+    public int fieldInt36257;
+    public int fieldInt36258;
+    public int fieldInt36259;
+    public int fieldInt36260;
+    public int fieldInt36261;
+    public int fieldInt36262;
+    public int fieldInt36263;
+    public int fieldInt36264;
+    public int fieldInt36265;
+    public int fieldInt36266;
+    public int fieldInt36267;
+    public int fieldInt36268;
+    public int fieldInt36269;
+    public int fieldInt36270;
+    public int fieldInt36271;
+    public int fieldInt36272;
+    public int fieldInt36273;
+    public int fieldInt36274;
+    public int fieldInt36275;
+    public int fieldInt36276;
+    public int fieldInt36277;
+    public int fieldInt36278;
+    public int fieldInt36279;
+    public int fieldInt36280;
+    public int fieldInt36281;
+    public int fieldInt36282;
+    public int fieldInt36283;
+    public int fieldInt36284;
+    public int fieldInt36285;
+    public int fieldInt36286;
+    public int fieldInt36287;
+    public int fieldInt36288;
+    public int fieldInt36289;
+    public int fieldInt36290;
+    public int fieldInt36291;
+    public int fieldInt36292;
+    public int fieldInt36293;
+    public int fieldInt36294;
+    public int fieldInt36295;
+    public int fieldInt36296;
+    public int fieldInt36297;
+    public int fieldInt36298;
+    public int fieldInt36299;
+    public int fieldInt36300;
+    public int fieldInt36301;
+    public int fieldInt36302;
+    public int fieldInt36303;
+    public int fieldInt36304;
+    public int fieldInt36305;
+    public int fieldInt36306;
+    public int fieldInt36307;
+    public int fieldInt36308;
+    public int fieldInt36309;
+    public int fieldInt36310;
+    public int fieldInt36311;
+    public int fieldInt36312;
+    public int fieldInt36313;
+    public int fieldInt36314;
+    public int fieldInt36315;
+    public int fieldInt36316;
+    public int fieldInt36317;
+    public int fieldInt36318;
+    public int fieldInt36319;
+    public int fieldInt36320;
+    public int fieldInt36321;
+    public int fieldInt36322;
+    public int fieldInt36323;
+    public int fieldInt36324;
+    public int fieldInt36325;
+    public int fieldInt36326;
+    public int fieldInt36327;
+    public int fieldInt36328;
+    public int fieldInt36329;
+    public int fieldInt36330;
+    public int fieldInt36331;
+    public int fieldInt36332;
+    public int fieldInt36333;
+    public int fieldInt36334;
+    public int fieldInt36335;
+    public int fieldInt36336;
+    public int fieldInt36337;
+    public int fieldInt36338;
+    public int fieldInt36339;
+    public int fieldInt36340;
+    public int fieldInt36341;
+    public int fieldInt36342;
+    public int fieldInt36343;
+    public int fieldInt36344;
+    public int fieldInt36345;
+    public int fieldInt36346;
+    public int fieldInt36347;
+    public int fieldInt36348;
+    public int fieldInt36349;
+    public int fieldInt36350;
+    public int fieldInt36351;
+    public int fieldInt36352;
+    public int fieldInt36353;
+    public int fieldInt36354;
+    public int fieldInt36355;
+    public int fieldInt36356;
+    public int fieldInt36357;
+    public int fieldInt36358;
+    public int fieldInt36359;
+    public int fieldInt36360;
+    public int fieldInt36361;
+    public int fieldInt36362;
+    public int fieldInt36363;
+    public int fieldInt36364;
+    public int fieldInt36365;
+    public int fieldInt36366;
+    public int fieldInt36367;
+    public int fieldInt36368;
+    public int fieldInt36369;
+    public int fieldInt36370;
+    public int fieldInt36371;
+    public int fieldInt36372;
+    public int fieldInt36373;
+    public int fieldInt36374;
+    public int fieldInt36375;
+    public int fieldInt36376;
+    public int fieldInt36377;
+    public int fieldInt36378;
+    public int fieldInt36379;
+    public int fieldInt36380;
+    public int fieldInt36381;
+    public int fieldInt36382;
+    public int fieldInt36383;
+    public int fieldInt36384;
+    public int fieldInt36385;
+    public int fieldInt36386;
+    public int fieldInt36387;
+    public int fieldInt36388;
+    public int fieldInt36389;
+    public int fieldInt36390;
+    public int fieldInt36391;
+    public int fieldInt36392;
+    public int fieldInt36393;
+    public int fieldInt36394;
+    public int fieldInt36395;
+    public int fieldInt36396;
+    public int fieldInt36397;
+    public int fieldInt36398;
+    public int fieldInt36399;
+    public int fieldInt36400;
+    public int fieldInt36401;
+    public int fieldInt36402;
+    public int fieldInt36403;
+    public int fieldInt36404;
+    public int fieldInt36405;
+    public int fieldInt36406;
+    public int fieldInt36407;
+    public int fieldInt36408;
+    public int fieldInt36409;
+    public int fieldInt36410;
+    public int fieldInt36411;
+    public int fieldInt36412;
+    public int fieldInt36413;
+    public int fieldInt36414;
+    public int fieldInt36415;
+    public int fieldInt36416;
+    public int fieldInt36417;
+    public int fieldInt36418;
+    public int fieldInt36419;
+    public int fieldInt36420;
+    public int fieldInt36421;
+    public int fieldInt36422;
+    public int fieldInt36423;
+    public int fieldInt36424;
+    public int fieldInt36425;
+    public int fieldInt36426;
+    public int fieldInt36427;
+    public int fieldInt36428;
+    public int fieldInt36429;
+    public int fieldInt36430;
+    public int fieldInt36431;
+    public int fieldInt36432;
+    public int fieldInt36433;
+    public int fieldInt36434;
+    public int fieldInt36435;
+    public int fieldInt36436;
+    public int fieldInt36437;
+    public int fieldInt36438;
+    public int fieldInt36439;
+    public int fieldInt36440;
+    public int fieldInt36441;
+    public int fieldInt36442;
+    public int fieldInt36443;
+    public int fieldInt36444;
+    public int fieldInt36445;
+    public int fieldInt36446;
+    public int fieldInt36447;
+    public int fieldInt36448;
+    public int fieldInt36449;
+    public int fieldInt36450;
+    public int fieldInt36451;
+    public int fieldInt36452;
+    public int fieldInt36453;
+    public int fieldInt36454;
+    public int fieldInt36455;
+    public int fieldInt36456;
+    public int fieldInt36457;
+    public int fieldInt36458;
+    public int fieldInt36459;
+    public int fieldInt36460;
+    public int fieldInt36461;
+    public int fieldInt36462;
+    public int fieldInt36463;
+    public int fieldInt36464;
+    public int fieldInt36465;
+    public int fieldInt36466;
+    public int fieldInt36467;
+    public int fieldInt36468;
+    public int fieldInt36469;
+    public int fieldInt36470;
+    public int fieldInt36471;
+    public int fieldInt36472;
+    public int fieldInt36473;
+    public int fieldInt36474;
+    public int fieldInt36475;
+    public int fieldInt36476;
+    public int fieldInt36477;
+    public int fieldInt36478;
+    public int fieldInt36479;
+    public int fieldInt36480;
+    public int fieldInt36481;
+    public int fieldInt36482;
+    public int fieldInt36483;
+    public int fieldInt36484;
+    public int fieldInt36485;
+    public int fieldInt36486;
+    public int fieldInt36487;
+    public int fieldInt36488;
+    public int fieldInt36489;
+    public int fieldInt36490;
+    public int fieldInt36491;
+    public int fieldInt36492;
+    public int fieldInt36493;
+    public int fieldInt36494;
+    public int fieldInt36495;
+    public int fieldInt36496;
+    public int fieldInt36497;
+    public int fieldInt36498;
+    public int fieldInt36499;
+    public int fieldInt36500;
+    public int fieldInt36501;
+    public int fieldInt36502;
+    public int fieldInt36503;
+    public int fieldInt36504;
+    public int fieldInt36505;
+    public int fieldInt36506;
+    public int fieldInt36507;
+    public int fieldInt36508;
+    public int fieldInt36509;
+    public int fieldInt36510;
+    public int fieldInt36511;
+    public int fieldInt36512;
+    public int fieldInt36513;
+    public int fieldInt36514;
+    public int fieldInt36515;
+    public int fieldInt36516;
+    public int fieldInt36517;
+    public int fieldInt36518;
+    public int fieldInt36519;
+    public int fieldInt36520;
+    public int fieldInt36521;
+    public int fieldInt36522;
+    public int fieldInt36523;
+    public int fieldInt36524;
+    public int fieldInt36525;
+    public int fieldInt36526;
+    public int fieldInt36527;
+    public int fieldInt36528;
+    public int fieldInt36529;
+    public int fieldInt36530;
+    public int fieldInt36531;
+    public int fieldInt36532;
+    public int fieldInt36533;
+    public int fieldInt36534;
+    public int fieldInt36535;
+    public int fieldInt36536;
+    public int fieldInt36537;
+    public int fieldInt36538;
+    public int fieldInt36539;
+    public int fieldInt36540;
+    public int fieldInt36541;
+    public int fieldInt36542;
+    public int fieldInt36543;
+    public int fieldInt36544;
+    public int fieldInt36545;
+    public int fieldInt36546;
+    public int fieldInt36547;
+    public int fieldInt36548;
+    public int fieldInt36549;
+    public int fieldInt36550;
+    public int fieldInt36551;
+    public int fieldInt36552;
+    public int fieldInt36553;
+    public int fieldInt36554;
+    public int fieldInt36555;
+    public int fieldInt36556;
+    public int fieldInt36557;
+    public int fieldInt36558;
+    public int fieldInt36559;
+    public int fieldInt36560;
+    public int fieldInt36561;
+    public int fieldInt36562;
+    public int fieldInt36563;
+    public int fieldInt36564;
+    public int fieldInt36565;
+    public int fieldInt36566;
+    public int fieldInt36567;
+    public int fieldInt36568;
+    public int fieldInt36569;
+    public int fieldInt36570;
+    public int fieldInt36571;
+    public int fieldInt36572;
+    public int fieldInt36573;
+    public int fieldInt36574;
+    public int fieldInt36575;
+    public int fieldInt36576;
+    public int fieldInt36577;
+    public int fieldInt36578;
+    public int fieldInt36579;
+    public int fieldInt36580;
+    public int fieldInt36581;
+    public int fieldInt36582;
+    public int fieldInt36583;
+    public int fieldInt36584;
+    public int fieldInt36585;
+    public int fieldInt36586;
+    public int fieldInt36587;
+    public int fieldInt36588;
+    public int fieldInt36589;
+    public int fieldInt36590;
+    public int fieldInt36591;
+    public int fieldInt36592;
+    public int fieldInt36593;
+    public int fieldInt36594;
+    public int fieldInt36595;
+    public int fieldInt36596;
+    public int fieldInt36597;
+    public int fieldInt36598;
+    public int fieldInt36599;
+    public int fieldInt36600;
+    public int fieldInt36601;
+    public int fieldInt36602;
+    public int fieldInt36603;
+    public int fieldInt36604;
+    public int fieldInt36605;
+    public int fieldInt36606;
+    public int fieldInt36607;
+    public int fieldInt36608;
+    public int fieldInt36609;
+    public int fieldInt36610;
+    public int fieldInt36611;
+    public int fieldInt36612;
+    public int fieldInt36613;
+    public int fieldInt36614;
+    public int fieldInt36615;
+    public int fieldInt36616;
+    public int fieldInt36617;
+    public int fieldInt36618;
+    public int fieldInt36619;
+    public int fieldInt36620;
+    public int fieldInt36621;
+    public int fieldInt36622;
+    public int fieldInt36623;
+    public int fieldInt36624;
+    public int fieldInt36625;
+    public int fieldInt36626;
+    public int fieldInt36627;
+    public int fieldInt36628;
+    public int fieldInt36629;
+    public int fieldInt36630;
+    public int fieldInt36631;
+    public int fieldInt36632;
+    public int fieldInt36633;
+    public int fieldInt36634;
+    public int fieldInt36635;
+    public int fieldInt36636;
+    public int fieldInt36637;
+    public int fieldInt36638;
+    public int fieldInt36639;
+    public int fieldInt36640;
+    public int fieldInt36641;
+    public int fieldInt36642;
+    public int fieldInt36643;
+    public int fieldInt36644;
+    public int fieldInt36645;
+    public int fieldInt36646;
+    public int fieldInt36647;
+    public int fieldInt36648;
+    public int fieldInt36649;
+    public int fieldInt36650;
+    public int fieldInt36651;
+    public int fieldInt36652;
+    public int fieldInt36653;
+    public int fieldInt36654;
+    public int fieldInt36655;
+    public int fieldInt36656;
+    public int fieldInt36657;
+    public int fieldInt36658;
+    public int fieldInt36659;
+    public int fieldInt36660;
+    public int fieldInt36661;
+    public int fieldInt36662;
+    public int fieldInt36663;
+    public int fieldInt36664;
+    public int fieldInt36665;
+    public int fieldInt36666;
+    public int fieldInt36667;
+    public int fieldInt36668;
+    public int fieldInt36669;
+    public int fieldInt36670;
+    public int fieldInt36671;
+    public int fieldInt36672;
+    public int fieldInt36673;
+    public int fieldInt36674;
+    public int fieldInt36675;
+    public int fieldInt36676;
+    public int fieldInt36677;
+    public int fieldInt36678;
+    public int fieldInt36679;
+    public int fieldInt36680;
+    public int fieldInt36681;
+    public int fieldInt36682;
+    public int fieldInt36683;
+    public int fieldInt36684;
+    public int fieldInt36685;
+    public int fieldInt36686;
+    public int fieldInt36687;
+    public int fieldInt36688;
+    public int fieldInt36689;
+    public int fieldInt36690;
+    public int fieldInt36691;
+    public int fieldInt36692;
+    public int fieldInt36693;
+    public int fieldInt36694;
+    public int fieldInt36695;
+    public int fieldInt36696;
+    public int fieldInt36697;
+    public int fieldInt36698;
+    public int fieldInt36699;
+    public int fieldInt36700;
+    public int fieldInt36701;
+    public int fieldInt36702;
+    public int fieldInt36703;
+    public int fieldInt36704;
+    public int fieldInt36705;
+    public int fieldInt36706;
+    public int fieldInt36707;
+    public int fieldInt36708;
+    public int fieldInt36709;
+    public int fieldInt36710;
+    public int fieldInt36711;
+    public int fieldInt36712;
+    public int fieldInt36713;
+    public int fieldInt36714;
+    public int fieldInt36715;
+    public int fieldInt36716;
+    public int fieldInt36717;
+    public int fieldInt36718;
+    public int fieldInt36719;
+    public int fieldInt36720;
+    public int fieldInt36721;
+    public int fieldInt36722;
+    public int fieldInt36723;
+    public int fieldInt36724;
+    public int fieldInt36725;
+    public int fieldInt36726;
+    public int fieldInt36727;
+    public int fieldInt36728;
+    public int fieldInt36729;
+    public int fieldInt36730;
+    public int fieldInt36731;
+    public int fieldInt36732;
+    public int fieldInt36733;
+    public int fieldInt36734;
+    public int fieldInt36735;
+    public int fieldInt36736;
+    public int fieldInt36737;
+    public int fieldInt36738;
+    public int fieldInt36739;
+    public int fieldInt36740;
+    public int fieldInt36741;
+    public int fieldInt36742;
+    public int fieldInt36743;
+    public int fieldInt36744;
+    public int fieldInt36745;
+    public int fieldInt36746;
+    public int fieldInt36747;
+    public int fieldInt36748;
+    public int fieldInt36749;
+    public int fieldInt36750;
+    public int fieldInt36751;
+    public int fieldInt36752;
+    public int fieldInt36753;
+    public int fieldInt36754;
+    public int fieldInt36755;
+    public int fieldInt36756;
+    public int fieldInt36757;
+    public int fieldInt36758;
+    public int fieldInt36759;
+    public int fieldInt36760;
+    public int fieldInt36761;
+    public int fieldInt36762;
+    public int fieldInt36763;
+    public int fieldInt36764;
+    public int fieldInt36765;
+    public int fieldInt36766;
+    public int fieldInt36767;
+    public int fieldInt36768;
+    public int fieldInt36769;
+    public int fieldInt36770;
+    public int fieldInt36771;
+    public int fieldInt36772;
+    public int fieldInt36773;
+    public int fieldInt36774;
+    public int fieldInt36775;
+    public int fieldInt36776;
+    public int fieldInt36777;
+    public int fieldInt36778;
+    public int fieldInt36779;
+    public int fieldInt36780;
+    public int fieldInt36781;
+    public int fieldInt36782;
+    public int fieldInt36783;
+    public int fieldInt36784;
+    public int fieldInt36785;
+    public int fieldInt36786;
+    public int fieldInt36787;
+    public int fieldInt36788;
+    public int fieldInt36789;
+    public int fieldInt36790;
+    public int fieldInt36791;
+    public int fieldInt36792;
+    public int fieldInt36793;
+    public int fieldInt36794;
+    public int fieldInt36795;
+    public int fieldInt36796;
+    public int fieldInt36797;
+    public int fieldInt36798;
+    public int fieldInt36799;
+    public int fieldInt36800;
+    public int fieldInt36801;
+    public int fieldInt36802;
+    public int fieldInt36803;
+    public int fieldInt36804;
+    public int fieldInt36805;
+    public int fieldInt36806;
+    public int fieldInt36807;
+    public int fieldInt36808;
+    public int fieldInt36809;
+    public int fieldInt36810;
+    public int fieldInt36811;
+    public int fieldInt36812;
+    public int fieldInt36813;
+    public int fieldInt36814;
+    public int fieldInt36815;
+    public int fieldInt36816;
+    public int fieldInt36817;
+    public int fieldInt36818;
+    public int fieldInt36819;
+    public int fieldInt36820;
+    public int fieldInt36821;
+    public int fieldInt36822;
+    public int fieldInt36823;
+    public int fieldInt36824;
+    public int fieldInt36825;
+    public int fieldInt36826;
+    public int fieldInt36827;
+    public int fieldInt36828;
+    public int fieldInt36829;
+    public int fieldInt36830;
+    public int fieldInt36831;
+    public int fieldInt36832;
+    public int fieldInt36833;
+    public int fieldInt36834;
+    public int fieldInt36835;
+    public int fieldInt36836;
+    public int fieldInt36837;
+    public int fieldInt36838;
+    public int fieldInt36839;
+    public int fieldInt36840;
+    public int fieldInt36841;
+    public int fieldInt36842;
+    public int fieldInt36843;
+    public int fieldInt36844;
+    public int fieldInt36845;
+    public int fieldInt36846;
+    public int fieldInt36847;
+    public int fieldInt36848;
+    public int fieldInt36849;
+    public int fieldInt36850;
+    public int fieldInt36851;
+    public int fieldInt36852;
+    public int fieldInt36853;
+    public int fieldInt36854;
+    public int fieldInt36855;
+    public int fieldInt36856;
+    public int fieldInt36857;
+    public int fieldInt36858;
+    public int fieldInt36859;
+    public int fieldInt36860;
+    public int fieldInt36861;
+    public int fieldInt36862;
+    public int fieldInt36863;
+    public int fieldInt36864;
+    public int fieldInt36865;
+    public int fieldInt36866;
+    public int fieldInt36867;
+    public int fieldInt36868;
+    public int fieldInt36869;
+    public int fieldInt36870;
+    public int fieldInt36871;
+    public int fieldInt36872;
+    public int fieldInt36873;
+    public int fieldInt36874;
+    public int fieldInt36875;
+    public int fieldInt36876;
+    public int fieldInt36877;
+    public int fieldInt36878;
+    public int fieldInt36879;
+    public int fieldInt36880;
+    public int fieldInt36881;
+    public int fieldInt36882;
+    public int fieldInt36883;
+    public int fieldInt36884;
+    public int fieldInt36885;
+    public int fieldInt36886;
+    public int fieldInt36887;
+    public int fieldInt36888;
+    public int fieldInt36889;
+    public int fieldInt36890;
+    public int fieldInt36891;
+    public int fieldInt36892;
+    public int fieldInt36893;
+    public int fieldInt36894;
+    public int fieldInt36895;
+    public int fieldInt36896;
+    public int fieldInt36897;
+    public int fieldInt36898;
+    public int fieldInt36899;
+    public int fieldInt36900;
+    public int fieldInt36901;
+    public int fieldInt36902;
+    public int fieldInt36903;
+    public int fieldInt36904;
+    public int fieldInt36905;
+    public int fieldInt36906;
+    public int fieldInt36907;
+    public int fieldInt36908;
+    public int fieldInt36909;
+    public int fieldInt36910;
+    public int fieldInt36911;
+    public int fieldInt36912;
+    public int fieldInt36913;
+    public int fieldInt36914;
+    public int fieldInt36915;
+    public int fieldInt36916;
+    public int fieldInt36917;
+    public int fieldInt36918;
+    public int fieldInt36919;
+    public int fieldInt36920;
+    public int fieldInt36921;
+    public int fieldInt36922;
+    public int fieldInt36923;
+    public int fieldInt36924;
+    public int fieldInt36925;
+    public int fieldInt36926;
+    public int fieldInt36927;
+    public int fieldInt36928;
+    public int fieldInt36929;
+    public int fieldInt36930;
+    public int fieldInt36931;
+    public int fieldInt36932;
+    public int fieldInt36933;
+    public int fieldInt36934;
+    public int fieldInt36935;
+    public int fieldInt36936;
+    public int fieldInt36937;
+    public int fieldInt36938;
+    public int fieldInt36939;
+    public int fieldInt36940;
+    public int fieldInt36941;
+    public int fieldInt36942;
+    public int fieldInt36943;
+    public int fieldInt36944;
+    public int fieldInt36945;
+    public int fieldInt36946;
+    public int fieldInt36947;
+    public int fieldInt36948;
+    public int fieldInt36949;
+    public int fieldInt36950;
+    public int fieldInt36951;
+    public int fieldInt36952;
+    public int fieldInt36953;
+    public int fieldInt36954;
+    public int fieldInt36955;
+    public int fieldInt36956;
+    public int fieldInt36957;
+    public int fieldInt36958;
+    public int fieldInt36959;
+    public int fieldInt36960;
+    public int fieldInt36961;
+    public int fieldInt36962;
+    public int fieldInt36963;
+    public int fieldInt36964;
+    public int fieldInt36965;
+    public int fieldInt36966;
+    public int fieldInt36967;
+    public int fieldInt36968;
+    public int fieldInt36969;
+    public int fieldInt36970;
+    public int fieldInt36971;
+    public int fieldInt36972;
+    public int fieldInt36973;
+    public int fieldInt36974;
+    public int fieldInt36975;
+    public int fieldInt36976;
+    public int fieldInt36977;
+    public int fieldInt36978;
+    public int fieldInt36979;
+    public int fieldInt36980;
+    public int fieldInt36981;
+    public int fieldInt36982;
+    public int fieldInt36983;
+    public int fieldInt36984;
+    public int fieldInt36985;
+    public int fieldInt36986;
+    public int fieldInt36987;
+    public int fieldInt36988;
+    public int fieldInt36989;
+    public int fieldInt36990;
+    public int fieldInt36991;
+    public int fieldInt36992;
+    public int fieldInt36993;
+    public int fieldInt36994;
+    public int fieldInt36995;
+    public int fieldInt36996;
+    public int fieldInt36997;
+    public int fieldInt36998;
+    public int fieldInt36999;
+    public int fieldInt37000;
+    public int fieldInt37001;
+    public int fieldInt37002;
+    public int fieldInt37003;
+    public int fieldInt37004;
+    public int fieldInt37005;
+    public int fieldInt37006;
+    public int fieldInt37007;
+    public int fieldInt37008;
+    public int fieldInt37009;
+    public int fieldInt37010;
+    public int fieldInt37011;
+    public int fieldInt37012;
+    public int fieldInt37013;
+    public int fieldInt37014;
+    public int fieldInt37015;
+    public int fieldInt37016;
+    public int fieldInt37017;
+    public int fieldInt37018;
+    public int fieldInt37019;
+    public int fieldInt37020;
+    public int fieldInt37021;
+    public int fieldInt37022;
+    public int fieldInt37023;
+    public int fieldInt37024;
+    public int fieldInt37025;
+    public int fieldInt37026;
+    public int fieldInt37027;
+    public int fieldInt37028;
+    public int fieldInt37029;
+    public int fieldInt37030;
+    public int fieldInt37031;
+    public int fieldInt37032;
+    public int fieldInt37033;
+    public int fieldInt37034;
+    public int fieldInt37035;
+    public int fieldInt37036;
+    public int fieldInt37037;
+    public int fieldInt37038;
+    public int fieldInt37039;
+    public int fieldInt37040;
+    public int fieldInt37041;
+    public int fieldInt37042;
+    public int fieldInt37043;
+    public int fieldInt37044;
+    public int fieldInt37045;
+    public int fieldInt37046;
+    public int fieldInt37047;
+    public int fieldInt37048;
+    public int fieldInt37049;
+    public int fieldInt37050;
+    public int fieldInt37051;
+    public int fieldInt37052;
+    public int fieldInt37053;
+    public int fieldInt37054;
+    public int fieldInt37055;
+    public int fieldInt37056;
+    public int fieldInt37057;
+    public int fieldInt37058;
+    public int fieldInt37059;
+    public int fieldInt37060;
+    public int fieldInt37061;
+    public int fieldInt37062;
+    public int fieldInt37063;
+    public int fieldInt37064;
+    public int fieldInt37065;
+    public int fieldInt37066;
+    public int fieldInt37067;
+    public int fieldInt37068;
+    public int fieldInt37069;
+    public int fieldInt37070;
+    public int fieldInt37071;
+    public int fieldInt37072;
+    public int fieldInt37073;
+    public int fieldInt37074;
+    public int fieldInt37075;
+    public int fieldInt37076;
+    public int fieldInt37077;
+    public int fieldInt37078;
+    public int fieldInt37079;
+    public int fieldInt37080;
+    public int fieldInt37081;
+    public int fieldInt37082;
+    public int fieldInt37083;
+    public int fieldInt37084;
+    public int fieldInt37085;
+    public int fieldInt37086;
+    public int fieldInt37087;
+    public int fieldInt37088;
+    public int fieldInt37089;
+    public int fieldInt37090;
+    public int fieldInt37091;
+    public int fieldInt37092;
+    public int fieldInt37093;
+    public int fieldInt37094;
+    public int fieldInt37095;
+    public int fieldInt37096;
+    public int fieldInt37097;
+    public int fieldInt37098;
+    public int fieldInt37099;
+    public int fieldInt37100;
+    public int fieldInt37101;
+    public int fieldInt37102;
+    public int fieldInt37103;
+    public int fieldInt37104;
+    public int fieldInt37105;
+    public int fieldInt37106;
+    public int fieldInt37107;
+    public int fieldInt37108;
+    public int fieldInt37109;
+    public int fieldInt37110;
+    public int fieldInt37111;
+    public int fieldInt37112;
+    public int fieldInt37113;
+    public int fieldInt37114;
+    public int fieldInt37115;
+    public int fieldInt37116;
+    public int fieldInt37117;
+    public int fieldInt37118;
+    public int fieldInt37119;
+    public int fieldInt37120;
+    public int fieldInt37121;
+    public int fieldInt37122;
+    public int fieldInt37123;
+    public int fieldInt37124;
+    public int fieldInt37125;
+    public int fieldInt37126;
+    public int fieldInt37127;
+    public int fieldInt37128;
+    public int fieldInt37129;
+    public int fieldInt37130;
+    public int fieldInt37131;
+    public int fieldInt37132;
+    public int fieldInt37133;
+    public int fieldInt37134;
+    public int fieldInt37135;
+    public int fieldInt37136;
+    public int fieldInt37137;
+    public int fieldInt37138;
+    public int fieldInt37139;
+    public int fieldInt37140;
+    public int fieldInt37141;
+    public int fieldInt37142;
+    public int fieldInt37143;
+    public int fieldInt37144;
+    public int fieldInt37145;
+    public int fieldInt37146;
+    public int fieldInt37147;
+    public int fieldInt37148;
+    public int fieldInt37149;
+    public int fieldInt37150;
+    public int fieldInt37151;
+    public int fieldInt37152;
+    public int fieldInt37153;
+    public int fieldInt37154;
+    public int fieldInt37155;
+    public int fieldInt37156;
+    public int fieldInt37157;
+    public int fieldInt37158;
+    public int fieldInt37159;
+    public int fieldInt37160;
+    public int fieldInt37161;
+    public int fieldInt37162;
+    public int fieldInt37163;
+    public int fieldInt37164;
+    public int fieldInt37165;
+    public int fieldInt37166;
+    public int fieldInt37167;
+    public int fieldInt37168;
+    public int fieldInt37169;
+    public int fieldInt37170;
+    public int fieldInt37171;
+    public int fieldInt37172;
+    public int fieldInt37173;
+    public int fieldInt37174;
+    public int fieldInt37175;
+    public int fieldInt37176;
+    public int fieldInt37177;
+    public int fieldInt37178;
+    public int fieldInt37179;
+    public int fieldInt37180;
+    public int fieldInt37181;
+    public int fieldInt37182;
+    public int fieldInt37183;
+    public int fieldInt37184;
+    public int fieldInt37185;
+    public int fieldInt37186;
+    public int fieldInt37187;
+    public int fieldInt37188;
+    public int fieldInt37189;
+    public int fieldInt37190;
+    public int fieldInt37191;
+    public int fieldInt37192;
+    public int fieldInt37193;
+    public int fieldInt37194;
+    public int fieldInt37195;
+    public int fieldInt37196;
+    public int fieldInt37197;
+    public int fieldInt37198;
+    public int fieldInt37199;
+    public int fieldInt37200;
+    public int fieldInt37201;
+    public int fieldInt37202;
+    public int fieldInt37203;
+    public int fieldInt37204;
+    public int fieldInt37205;
+    public int fieldInt37206;
+    public int fieldInt37207;
+    public int fieldInt37208;
+    public int fieldInt37209;
+    public int fieldInt37210;
+    public int fieldInt37211;
+    public int fieldInt37212;
+    public int fieldInt37213;
+    public int fieldInt37214;
+    public int fieldInt37215;
+    public int fieldInt37216;
+    public int fieldInt37217;
+    public int fieldInt37218;
+    public int fieldInt37219;
+    public int fieldInt37220;
+    public int fieldInt37221;
+    public int fieldInt37222;
+    public int fieldInt37223;
+    public int fieldInt37224;
+    public int fieldInt37225;
+    public int fieldInt37226;
+    public int fieldInt37227;
+    public int fieldInt37228;
+    public int fieldInt37229;
+    public int fieldInt37230;
+    public int fieldInt37231;
+    public int fieldInt37232;
+    public int fieldInt37233;
+    public int fieldInt37234;
+    public int fieldInt37235;
+    public int fieldInt37236;
+    public int fieldInt37237;
+    public int fieldInt37238;
+    public int fieldInt37239;
+    public int fieldInt37240;
+    public int fieldInt37241;
+    public int fieldInt37242;
+    public int fieldInt37243;
+    public int fieldInt37244;
+    public int fieldInt37245;
+    public int fieldInt37246;
+    public int fieldInt37247;
+    public int fieldInt37248;
+    public int fieldInt37249;
+    public int fieldInt37250;
+    public int fieldInt37251;
+    public int fieldInt37252;
+    public int fieldInt37253;
+    public int fieldInt37254;
+    public int fieldInt37255;
+    public int fieldInt37256;
+    public int fieldInt37257;
+    public int fieldInt37258;
+    public int fieldInt37259;
+    public int fieldInt37260;
+    public int fieldInt37261;
+    public int fieldInt37262;
+    public int fieldInt37263;
+    public int fieldInt37264;
+    public int fieldInt37265;
+    public int fieldInt37266;
+    public int fieldInt37267;
+    public int fieldInt37268;
+    public int fieldInt37269;
+    public int fieldInt37270;
+    public int fieldInt37271;
+    public int fieldInt37272;
+    public int fieldInt37273;
+    public int fieldInt37274;
+    public int fieldInt37275;
+    public int fieldInt37276;
+    public int fieldInt37277;
+    public int fieldInt37278;
+    public int fieldInt37279;
+    public int fieldInt37280;
+    public int fieldInt37281;
+    public int fieldInt37282;
+    public int fieldInt37283;
+    public int fieldInt37284;
+    public int fieldInt37285;
+    public int fieldInt37286;
+    public int fieldInt37287;
+    public int fieldInt37288;
+    public int fieldInt37289;
+    public int fieldInt37290;
+    public int fieldInt37291;
+    public int fieldInt37292;
+    public int fieldInt37293;
+    public int fieldInt37294;
+    public int fieldInt37295;
+    public int fieldInt37296;
+    public int fieldInt37297;
+    public int fieldInt37298;
+    public int fieldInt37299;
+    public int fieldInt37300;
+    public int fieldInt37301;
+    public int fieldInt37302;
+    public int fieldInt37303;
+    public int fieldInt37304;
+    public int fieldInt37305;
+    public int fieldInt37306;
+    public int fieldInt37307;
+    public int fieldInt37308;
+    public int fieldInt37309;
+    public int fieldInt37310;
+    public int fieldInt37311;
+    public int fieldInt37312;
+    public int fieldInt37313;
+    public int fieldInt37314;
+    public int fieldInt37315;
+    public int fieldInt37316;
+    public int fieldInt37317;
+    public int fieldInt37318;
+    public int fieldInt37319;
+    public int fieldInt37320;
+    public int fieldInt37321;
+    public int fieldInt37322;
+    public int fieldInt37323;
+    public int fieldInt37324;
+    public int fieldInt37325;
+    public int fieldInt37326;
+    public int fieldInt37327;
+    public int fieldInt37328;
+    public int fieldInt37329;
+    public int fieldInt37330;
+    public int fieldInt37331;
+    public int fieldInt37332;
+    public int fieldInt37333;
+    public int fieldInt37334;
+    public int fieldInt37335;
+    public int fieldInt37336;
+    public int fieldInt37337;
+    public int fieldInt37338;
+    public int fieldInt37339;
+    public int fieldInt37340;
+    public int fieldInt37341;
+    public int fieldInt37342;
+    public int fieldInt37343;
+    public int fieldInt37344;
+    public int fieldInt37345;
+    public int fieldInt37346;
+    public int fieldInt37347;
+    public int fieldInt37348;
+    public int fieldInt37349;
+    public int fieldInt37350;
+    public int fieldInt37351;
+    public int fieldInt37352;
+    public int fieldInt37353;
+    public int fieldInt37354;
+    public int fieldInt37355;
+    public int fieldInt37356;
+    public int fieldInt37357;
+    public int fieldInt37358;
+    public int fieldInt37359;
+    public int fieldInt37360;
+    public int fieldInt37361;
+    public int fieldInt37362;
+    public int fieldInt37363;
+    public int fieldInt37364;
+    public int fieldInt37365;
+    public int fieldInt37366;
+    public int fieldInt37367;
+    public int fieldInt37368;
+    public int fieldInt37369;
+    public int fieldInt37370;
+    public int fieldInt37371;
+    public int fieldInt37372;
+    public int fieldInt37373;
+    public int fieldInt37374;
+    public int fieldInt37375;
+    public int fieldInt37376;
+    public int fieldInt37377;
+    public int fieldInt37378;
+    public int fieldInt37379;
+    public int fieldInt37380;
+    public int fieldInt37381;
+    public int fieldInt37382;
+    public int fieldInt37383;
+    public int fieldInt37384;
+    public int fieldInt37385;
+    public int fieldInt37386;
+    public int fieldInt37387;
+    public int fieldInt37388;
+    public int fieldInt37389;
+    public int fieldInt37390;
+    public int fieldInt37391;
+    public int fieldInt37392;
+    public int fieldInt37393;
+    public int fieldInt37394;
+    public int fieldInt37395;
+    public int fieldInt37396;
+    public int fieldInt37397;
+    public int fieldInt37398;
+    public int fieldInt37399;
+    public int fieldInt37400;
+    public int fieldInt37401;
+    public int fieldInt37402;
+    public int fieldInt37403;
+    public int fieldInt37404;
+    public int fieldInt37405;
+    public int fieldInt37406;
+    public int fieldInt37407;
+    public int fieldInt37408;
+    public int fieldInt37409;
+    public int fieldInt37410;
+    public int fieldInt37411;
+    public int fieldInt37412;
+    public int fieldInt37413;
+    public int fieldInt37414;
+    public int fieldInt37415;
+    public int fieldInt37416;
+    public int fieldInt37417;
+    public int fieldInt37418;
+    public int fieldInt37419;
+    public int fieldInt37420;
+    public int fieldInt37421;
+    public int fieldInt37422;
+    public int fieldInt37423;
+    public int fieldInt37424;
+    public int fieldInt37425;
+    public int fieldInt37426;
+    public int fieldInt37427;
+    public int fieldInt37428;
+    public int fieldInt37429;
+    public int fieldInt37430;
+    public int fieldInt37431;
+    public int fieldInt37432;
+    public int fieldInt37433;
+    public int fieldInt37434;
+    public int fieldInt37435;
+    public int fieldInt37436;
+    public int fieldInt37437;
+    public int fieldInt37438;
+    public int fieldInt37439;
+    public int fieldInt37440;
+    public int fieldInt37441;
+    public int fieldInt37442;
+    public int fieldInt37443;
+    public int fieldInt37444;
+    public int fieldInt37445;
+    public int fieldInt37446;
+    public int fieldInt37447;
+    public int fieldInt37448;
+    public int fieldInt37449;
+    public int fieldInt37450;
+    public int fieldInt37451;
+    public int fieldInt37452;
+    public int fieldInt37453;
+    public int fieldInt37454;
+    public int fieldInt37455;
+    public int fieldInt37456;
+    public int fieldInt37457;
+    public int fieldInt37458;
+    public int fieldInt37459;
+    public int fieldInt37460;
+    public int fieldInt37461;
+    public int fieldInt37462;
+    public int fieldInt37463;
+    public int fieldInt37464;
+    public int fieldInt37465;
+    public int fieldInt37466;
+    public int fieldInt37467;
+    public int fieldInt37468;
+    public int fieldInt37469;
+    public int fieldInt37470;
+    public int fieldInt37471;
+    public int fieldInt37472;
+    public int fieldInt37473;
+    public int fieldInt37474;
+    public int fieldInt37475;
+    public int fieldInt37476;
+    public int fieldInt37477;
+    public int fieldInt37478;
+    public int fieldInt37479;
+    public int fieldInt37480;
+    public int fieldInt37481;
+    public int fieldInt37482;
+    public int fieldInt37483;
+    public int fieldInt37484;
+    public int fieldInt37485;
+    public int fieldInt37486;
+    public int fieldInt37487;
+    public int fieldInt37488;
+    public int fieldInt37489;
+    public int fieldInt37490;
+    public int fieldInt37491;
+    public int fieldInt37492;
+    public int fieldInt37493;
+    public int fieldInt37494;
+    public int fieldInt37495;
+    public int fieldInt37496;
+    public int fieldInt37497;
+    public int fieldInt37498;
+    public int fieldInt37499;
+    public int fieldInt37500;
+    public int fieldInt37501;
+    public int fieldInt37502;
+    public int fieldInt37503;
+    public int fieldInt37504;
+    public int fieldInt37505;
+    public int fieldInt37506;
+    public int fieldInt37507;
+    public int fieldInt37508;
+    public int fieldInt37509;
+    public int fieldInt37510;
+    public int fieldInt37511;
+    public int fieldInt37512;
+    public int fieldInt37513;
+    public int fieldInt37514;
+    public int fieldInt37515;
+    public int fieldInt37516;
+    public int fieldInt37517;
+    public int fieldInt37518;
+    public int fieldInt37519;
+    public int fieldInt37520;
+    public int fieldInt37521;
+    public int fieldInt37522;
+    public int fieldInt37523;
+    public int fieldInt37524;
+    public int fieldInt37525;
+    public int fieldInt37526;
+    public int fieldInt37527;
+    public int fieldInt37528;
+    public int fieldInt37529;
+    public int fieldInt37530;
+    public int fieldInt37531;
+    public int fieldInt37532;
+    public int fieldInt37533;
+    public int fieldInt37534;
+    public int fieldInt37535;
+    public int fieldInt37536;
+    public int fieldInt37537;
+    public int fieldInt37538;
+    public int fieldInt37539;
+    public int fieldInt37540;
+    public int fieldInt37541;
+    public int fieldInt37542;
+    public int fieldInt37543;
+    public int fieldInt37544;
+    public int fieldInt37545;
+    public int fieldInt37546;
+    public int fieldInt37547;
+    public int fieldInt37548;
+    public int fieldInt37549;
+    public int fieldInt37550;
+    public int fieldInt37551;
+    public int fieldInt37552;
+    public int fieldInt37553;
+    public int fieldInt37554;
+    public int fieldInt37555;
+    public int fieldInt37556;
+    public int fieldInt37557;
+    public int fieldInt37558;
+    public int fieldInt37559;
+    public int fieldInt37560;
+    public int fieldInt37561;
+    public int fieldInt37562;
+    public int fieldInt37563;
+    public int fieldInt37564;
+    public int fieldInt37565;
+    public int fieldInt37566;
+    public int fieldInt37567;
+    public int fieldInt37568;
+    public int fieldInt37569;
+    public int fieldInt37570;
+    public int fieldInt37571;
+    public int fieldInt37572;
+    public int fieldInt37573;
+    public int fieldInt37574;
+    public int fieldInt37575;
+    public int fieldInt37576;
+    public int fieldInt37577;
+    public int fieldInt37578;
+    public int fieldInt37579;
+    public int fieldInt37580;
+    public int fieldInt37581;
+    public int fieldInt37582;
+    public int fieldInt37583;
+    public int fieldInt37584;
+    public int fieldInt37585;
+    public int fieldInt37586;
+    public int fieldInt37587;
+    public int fieldInt37588;
+    public int fieldInt37589;
+    public int fieldInt37590;
+    public int fieldInt37591;
+    public int fieldInt37592;
+    public int fieldInt37593;
+    public int fieldInt37594;
+    public int fieldInt37595;
+    public int fieldInt37596;
+    public int fieldInt37597;
+    public int fieldInt37598;
+    public int fieldInt37599;
+    public int fieldInt37600;
+    public int fieldInt37601;
+    public int fieldInt37602;
+    public int fieldInt37603;
+    public int fieldInt37604;
+    public int fieldInt37605;
+    public int fieldInt37606;
+    public int fieldInt37607;
+    public int fieldInt37608;
+    public int fieldInt37609;
+    public int fieldInt37610;
+    public int fieldInt37611;
+    public int fieldInt37612;
+    public int fieldInt37613;
+    public int fieldInt37614;
+    public int fieldInt37615;
+    public int fieldInt37616;
+    public int fieldInt37617;
+    public int fieldInt37618;
+    public int fieldInt37619;
+    public int fieldInt37620;
+    public int fieldInt37621;
+    public int fieldInt37622;
+    public int fieldInt37623;
+    public int fieldInt37624;
+    public int fieldInt37625;
+    public int fieldInt37626;
+    public int fieldInt37627;
+    public int fieldInt37628;
+    public int fieldInt37629;
+    public int fieldInt37630;
+    public int fieldInt37631;
+    public int fieldInt37632;
+    public int fieldInt37633;
+    public int fieldInt37634;
+    public int fieldInt37635;
+    public int fieldInt37636;
+    public int fieldInt37637;
+    public int fieldInt37638;
+    public int fieldInt37639;
+    public int fieldInt37640;
+    public int fieldInt37641;
+    public int fieldInt37642;
+    public int fieldInt37643;
+    public int fieldInt37644;
+    public int fieldInt37645;
+    public int fieldInt37646;
+    public int fieldInt37647;
+    public int fieldInt37648;
+    public int fieldInt37649;
+    public int fieldInt37650;
+    public int fieldInt37651;
+    public int fieldInt37652;
+    public int fieldInt37653;
+    public int fieldInt37654;
+    public int fieldInt37655;
+    public int fieldInt37656;
+    public int fieldInt37657;
+    public int fieldInt37658;
+    public int fieldInt37659;
+    public int fieldInt37660;
+    public int fieldInt37661;
+    public int fieldInt37662;
+    public int fieldInt37663;
+    public int fieldInt37664;
+    public int fieldInt37665;
+    public int fieldInt37666;
+    public int fieldInt37667;
+    public int fieldInt37668;
+    public int fieldInt37669;
+    public int fieldInt37670;
+    public int fieldInt37671;
+    public int fieldInt37672;
+    public int fieldInt37673;
+    public int fieldInt37674;
+    public int fieldInt37675;
+    public int fieldInt37676;
+    public int fieldInt37677;
+    public int fieldInt37678;
+    public int fieldInt37679;
+    public int fieldInt37680;
+    public int fieldInt37681;
+    public int fieldInt37682;
+    public int fieldInt37683;
+    public int fieldInt37684;
+    public int fieldInt37685;
+    public int fieldInt37686;
+    public int fieldInt37687;
+    public int fieldInt37688;
+    public int fieldInt37689;
+    public int fieldInt37690;
+    public int fieldInt37691;
+    public int fieldInt37692;
+    public int fieldInt37693;
+    public int fieldInt37694;
+    public int fieldInt37695;
+    public int fieldInt37696;
+    public int fieldInt37697;
+    public int fieldInt37698;
+    public int fieldInt37699;
+    public int fieldInt37700;
+    public int fieldInt37701;
+    public int fieldInt37702;
+    public int fieldInt37703;
+    public int fieldInt37704;
+    public int fieldInt37705;
+    public int fieldInt37706;
+    public int fieldInt37707;
+    public int fieldInt37708;
+    public int fieldInt37709;
+    public int fieldInt37710;
+    public int fieldInt37711;
+    public int fieldInt37712;
+    public int fieldInt37713;
+    public int fieldInt37714;
+    public int fieldInt37715;
+    public int fieldInt37716;
+    public int fieldInt37717;
+    public int fieldInt37718;
+    public int fieldInt37719;
+    public int fieldInt37720;
+    public int fieldInt37721;
+    public int fieldInt37722;
+    public int fieldInt37723;
+    public int fieldInt37724;
+    public int fieldInt37725;
+    public int fieldInt37726;
+    public int fieldInt37727;
+    public int fieldInt37728;
+    public int fieldInt37729;
+    public int fieldInt37730;
+    public int fieldInt37731;
+    public int fieldInt37732;
+    public int fieldInt37733;
+    public int fieldInt37734;
+    public int fieldInt37735;
+    public int fieldInt37736;
+    public int fieldInt37737;
+    public int fieldInt37738;
+    public int fieldInt37739;
+    public int fieldInt37740;
+    public int fieldInt37741;
+    public int fieldInt37742;
+    public int fieldInt37743;
+    public int fieldInt37744;
+    public int fieldInt37745;
+    public int fieldInt37746;
+    public int fieldInt37747;
+    public int fieldInt37748;
+    public int fieldInt37749;
+    public int fieldInt37750;
+    public int fieldInt37751;
+    public int fieldInt37752;
+    public int fieldInt37753;
+    public int fieldInt37754;
+    public int fieldInt37755;
+    public int fieldInt37756;
+    public int fieldInt37757;
+    public int fieldInt37758;
+    public int fieldInt37759;
+    public int fieldInt37760;
+    public int fieldInt37761;
+    public int fieldInt37762;
+    public int fieldInt37763;
+    public int fieldInt37764;
+    public int fieldInt37765;
+    public int fieldInt37766;
+    public int fieldInt37767;
+    public int fieldInt37768;
+    public int fieldInt37769;
+    public int fieldInt37770;
+    public int fieldInt37771;
+    public int fieldInt37772;
+    public int fieldInt37773;
+    public int fieldInt37774;
+    public int fieldInt37775;
+    public int fieldInt37776;
+    public int fieldInt37777;
+    public int fieldInt37778;
+    public int fieldInt37779;
+    public int fieldInt37780;
+    public int fieldInt37781;
+    public int fieldInt37782;
+    public int fieldInt37783;
+    public int fieldInt37784;
+    public int fieldInt37785;
+    public int fieldInt37786;
+    public int fieldInt37787;
+    public int fieldInt37788;
+    public int fieldInt37789;
+    public int fieldInt37790;
+    public int fieldInt37791;
+    public int fieldInt37792;
+    public int fieldInt37793;
+    public int fieldInt37794;
+    public int fieldInt37795;
+    public int fieldInt37796;
+    public int fieldInt37797;
+    public int fieldInt37798;
+    public int fieldInt37799;
+    public int fieldInt37800;
+    public int fieldInt37801;
+    public int fieldInt37802;
+    public int fieldInt37803;
+    public int fieldInt37804;
+    public int fieldInt37805;
+    public int fieldInt37806;
+    public int fieldInt37807;
+    public int fieldInt37808;
+    public int fieldInt37809;
+    public int fieldInt37810;
+    public int fieldInt37811;
+    public int fieldInt37812;
+    public int fieldInt37813;
+    public int fieldInt37814;
+    public int fieldInt37815;
+    public int fieldInt37816;
+    public int fieldInt37817;
+    public int fieldInt37818;
+    public int fieldInt37819;
+    public int fieldInt37820;
+    public int fieldInt37821;
+    public int fieldInt37822;
+    public int fieldInt37823;
+    public int fieldInt37824;
+    public int fieldInt37825;
+    public int fieldInt37826;
+    public int fieldInt37827;
+    public int fieldInt37828;
+    public int fieldInt37829;
+    public int fieldInt37830;
+    public int fieldInt37831;
+    public int fieldInt37832;
+    public int fieldInt37833;
+    public int fieldInt37834;
+    public int fieldInt37835;
+    public int fieldInt37836;
+    public int fieldInt37837;
+    public int fieldInt37838;
+    public int fieldInt37839;
+    public int fieldInt37840;
+    public int fieldInt37841;
+    public int fieldInt37842;
+    public int fieldInt37843;
+    public int fieldInt37844;
+    public int fieldInt37845;
+    public int fieldInt37846;
+    public int fieldInt37847;
+    public int fieldInt37848;
+    public int fieldInt37849;
+    public int fieldInt37850;
+    public int fieldInt37851;
+    public int fieldInt37852;
+    public int fieldInt37853;
+    public int fieldInt37854;
+    public int fieldInt37855;
+    public int fieldInt37856;
+    public int fieldInt37857;
+    public int fieldInt37858;
+    public int fieldInt37859;
+    public int fieldInt37860;
+    public int fieldInt37861;
+    public int fieldInt37862;
+    public int fieldInt37863;
+    public int fieldInt37864;
+    public int fieldInt37865;
+    public int fieldInt37866;
+    public int fieldInt37867;
+    public int fieldInt37868;
+    public int fieldInt37869;
+    public int fieldInt37870;
+    public int fieldInt37871;
+    public int fieldInt37872;
+    public int fieldInt37873;
+    public int fieldInt37874;
+    public int fieldInt37875;
+    public int fieldInt37876;
+    public int fieldInt37877;
+    public int fieldInt37878;
+    public int fieldInt37879;
+    public int fieldInt37880;
+    public int fieldInt37881;
+    public int fieldInt37882;
+    public int fieldInt37883;
+    public int fieldInt37884;
+    public int fieldInt37885;
+    public int fieldInt37886;
+    public int fieldInt37887;
+    public int fieldInt37888;
+    public int fieldInt37889;
+    public int fieldInt37890;
+    public int fieldInt37891;
+    public int fieldInt37892;
+    public int fieldInt37893;
+    public int fieldInt37894;
+    public int fieldInt37895;
+    public int fieldInt37896;
+    public int fieldInt37897;
+    public int fieldInt37898;
+    public int fieldInt37899;
+    public int fieldInt37900;
+    public int fieldInt37901;
+    public int fieldInt37902;
+    public int fieldInt37903;
+    public int fieldInt37904;
+    public int fieldInt37905;
+    public int fieldInt37906;
+    public int fieldInt37907;
+    public int fieldInt37908;
+    public int fieldInt37909;
+    public int fieldInt37910;
+    public int fieldInt37911;
+    public int fieldInt37912;
+    public int fieldInt37913;
+    public int fieldInt37914;
+    public int fieldInt37915;
+    public int fieldInt37916;
+    public int fieldInt37917;
+    public int fieldInt37918;
+    public int fieldInt37919;
+    public int fieldInt37920;
+    public int fieldInt37921;
+    public int fieldInt37922;
+    public int fieldInt37923;
+    public int fieldInt37924;
+    public int fieldInt37925;
+    public int fieldInt37926;
+    public int fieldInt37927;
+    public int fieldInt37928;
+    public int fieldInt37929;
+    public int fieldInt37930;
+    public int fieldInt37931;
+    public int fieldInt37932;
+    public int fieldInt37933;
+    public int fieldInt37934;
+    public int fieldInt37935;
+    public int fieldInt37936;
+    public int fieldInt37937;
+    public int fieldInt37938;
+    public int fieldInt37939;
+    public int fieldInt37940;
+    public int fieldInt37941;
+    public int fieldInt37942;
+    public int fieldInt37943;
+    public int fieldInt37944;
+    public int fieldInt37945;
+    public int fieldInt37946;
+    public int fieldInt37947;
+    public int fieldInt37948;
+    public int fieldInt37949;
+    public int fieldInt37950;
+    public int fieldInt37951;
+    public int fieldInt37952;
+    public int fieldInt37953;
+    public int fieldInt37954;
+    public int fieldInt37955;
+    public int fieldInt37956;
+    public int fieldInt37957;
+    public int fieldInt37958;
+    public int fieldInt37959;
+    public int fieldInt37960;
+    public int fieldInt37961;
+    public int fieldInt37962;
+    public int fieldInt37963;
+    public int fieldInt37964;
+    public int fieldInt37965;
+    public int fieldInt37966;
+    public int fieldInt37967;
+    public int fieldInt37968;
+    public int fieldInt37969;
+    public int fieldInt37970;
+    public int fieldInt37971;
+    public int fieldInt37972;
+    public int fieldInt37973;
+    public int fieldInt37974;
+    public int fieldInt37975;
+    public int fieldInt37976;
+    public int fieldInt37977;
+    public int fieldInt37978;
+    public int fieldInt37979;
+    public int fieldInt37980;
+    public int fieldInt37981;
+    public int fieldInt37982;
+    public int fieldInt37983;
+    public int fieldInt37984;
+    public int fieldInt37985;
+    public int fieldInt37986;
+    public int fieldInt37987;
+    public int fieldInt37988;
+    public int fieldInt37989;
+    public int fieldInt37990;
+    public int fieldInt37991;
+    public int fieldInt37992;
+    public int fieldInt37993;
+    public int fieldInt37994;
+    public int fieldInt37995;
+    public int fieldInt37996;
+    public int fieldInt37997;
+    public int fieldInt37998;
+    public int fieldInt37999;
+    public int fieldInt38000;
+    public int fieldInt38001;
+    public int fieldInt38002;
+    public int fieldInt38003;
+    public int fieldInt38004;
+    public int fieldInt38005;
+    public int fieldInt38006;
+    public int fieldInt38007;
+    public int fieldInt38008;
+    public int fieldInt38009;
+    public int fieldInt38010;
+    public int fieldInt38011;
+    public int fieldInt38012;
+    public int fieldInt38013;
+    public int fieldInt38014;
+    public int fieldInt38015;
+    public int fieldInt38016;
+    public int fieldInt38017;
+    public int fieldInt38018;
+    public int fieldInt38019;
+    public int fieldInt38020;
+    public int fieldInt38021;
+    public int fieldInt38022;
+    public int fieldInt38023;
+    public int fieldInt38024;
+    public int fieldInt38025;
+    public int fieldInt38026;
+    public int fieldInt38027;
+    public int fieldInt38028;
+    public int fieldInt38029;
+    public int fieldInt38030;
+    public int fieldInt38031;
+    public int fieldInt38032;
+    public int fieldInt38033;
+    public int fieldInt38034;
+    public int fieldInt38035;
+    public int fieldInt38036;
+    public int fieldInt38037;
+    public int fieldInt38038;
+    public int fieldInt38039;
+    public int fieldInt38040;
+    public int fieldInt38041;
+    public int fieldInt38042;
+    public int fieldInt38043;
+    public int fieldInt38044;
+    public int fieldInt38045;
+    public int fieldInt38046;
+    public int fieldInt38047;
+    public int fieldInt38048;
+    public int fieldInt38049;
+    public int fieldInt38050;
+    public int fieldInt38051;
+    public int fieldInt38052;
+    public int fieldInt38053;
+    public int fieldInt38054;
+    public int fieldInt38055;
+    public int fieldInt38056;
+    public int fieldInt38057;
+    public int fieldInt38058;
+    public int fieldInt38059;
+    public int fieldInt38060;
+    public int fieldInt38061;
+    public int fieldInt38062;
+    public int fieldInt38063;
+    public int fieldInt38064;
+    public int fieldInt38065;
+    public int fieldInt38066;
+    public int fieldInt38067;
+    public int fieldInt38068;
+    public int fieldInt38069;
+    public int fieldInt38070;
+    public int fieldInt38071;
+    public int fieldInt38072;
+    public int fieldInt38073;
+    public int fieldInt38074;
+    public int fieldInt38075;
+    public int fieldInt38076;
+    public int fieldInt38077;
+    public int fieldInt38078;
+    public int fieldInt38079;
+    public int fieldInt38080;
+    public int fieldInt38081;
+    public int fieldInt38082;
+    public int fieldInt38083;
+    public int fieldInt38084;
+    public int fieldInt38085;
+    public int fieldInt38086;
+    public int fieldInt38087;
+    public int fieldInt38088;
+    public int fieldInt38089;
+    public int fieldInt38090;
+    public int fieldInt38091;
+    public int fieldInt38092;
+    public int fieldInt38093;
+    public int fieldInt38094;
+    public int fieldInt38095;
+    public int fieldInt38096;
+    public int fieldInt38097;
+    public int fieldInt38098;
+    public int fieldInt38099;
+    public int fieldInt38100;
+    public int fieldInt38101;
+    public int fieldInt38102;
+    public int fieldInt38103;
+    public int fieldInt38104;
+    public int fieldInt38105;
+    public int fieldInt38106;
+    public int fieldInt38107;
+    public int fieldInt38108;
+    public int fieldInt38109;
+    public int fieldInt38110;
+    public int fieldInt38111;
+    public int fieldInt38112;
+    public int fieldInt38113;
+    public int fieldInt38114;
+    public int fieldInt38115;
+    public int fieldInt38116;
+    public int fieldInt38117;
+    public int fieldInt38118;
+    public int fieldInt38119;
+    public int fieldInt38120;
+    public int fieldInt38121;
+    public int fieldInt38122;
+    public int fieldInt38123;
+    public int fieldInt38124;
+    public int fieldInt38125;
+    public int fieldInt38126;
+    public int fieldInt38127;
+    public int fieldInt38128;
+    public int fieldInt38129;
+    public int fieldInt38130;
+    public int fieldInt38131;
+    public int fieldInt38132;
+    public int fieldInt38133;
+    public int fieldInt38134;
+    public int fieldInt38135;
+    public int fieldInt38136;
+    public int fieldInt38137;
+    public int fieldInt38138;
+    public int fieldInt38139;
+    public int fieldInt38140;
+    public int fieldInt38141;
+    public int fieldInt38142;
+    public int fieldInt38143;
+    public int fieldInt38144;
+    public int fieldInt38145;
+    public int fieldInt38146;
+    public int fieldInt38147;
+    public int fieldInt38148;
+    public int fieldInt38149;
+    public int fieldInt38150;
+    public int fieldInt38151;
+    public int fieldInt38152;
+    public int fieldInt38153;
+    public int fieldInt38154;
+    public int fieldInt38155;
+    public int fieldInt38156;
+    public int fieldInt38157;
+    public int fieldInt38158;
+    public int fieldInt38159;
+    public int fieldInt38160;
+    public int fieldInt38161;
+    public int fieldInt38162;
+    public int fieldInt38163;
+    public int fieldInt38164;
+    public int fieldInt38165;
+    public int fieldInt38166;
+    public int fieldInt38167;
+    public int fieldInt38168;
+    public int fieldInt38169;
+    public int fieldInt38170;
+    public int fieldInt38171;
+    public int fieldInt38172;
+    public int fieldInt38173;
+    public int fieldInt38174;
+    public int fieldInt38175;
+    public int fieldInt38176;
+    public int fieldInt38177;
+    public int fieldInt38178;
+    public int fieldInt38179;
+    public int fieldInt38180;
+    public int fieldInt38181;
+    public int fieldInt38182;
+    public int fieldInt38183;
+    public int fieldInt38184;
+    public int fieldInt38185;
+    public int fieldInt38186;
+    public int fieldInt38187;
+    public int fieldInt38188;
+    public int fieldInt38189;
+    public int fieldInt38190;
+    public int fieldInt38191;
+    public int fieldInt38192;
+    public int fieldInt38193;
+    public int fieldInt38194;
+    public int fieldInt38195;
+    public int fieldInt38196;
+    public int fieldInt38197;
+    public int fieldInt38198;
+    public int fieldInt38199;
+    public int fieldInt38200;
+    public int fieldInt38201;
+    public int fieldInt38202;
+    public int fieldInt38203;
+    public int fieldInt38204;
+    public int fieldInt38205;
+    public int fieldInt38206;
+    public int fieldInt38207;
+    public int fieldInt38208;
+    public int fieldInt38209;
+    public int fieldInt38210;
+    public int fieldInt38211;
+    public int fieldInt38212;
+    public int fieldInt38213;
+    public int fieldInt38214;
+    public int fieldInt38215;
+    public int fieldInt38216;
+    public int fieldInt38217;
+    public int fieldInt38218;
+    public int fieldInt38219;
+    public int fieldInt38220;
+    public int fieldInt38221;
+    public int fieldInt38222;
+    public int fieldInt38223;
+    public int fieldInt38224;
+    public int fieldInt38225;
+    public int fieldInt38226;
+    public int fieldInt38227;
+    public int fieldInt38228;
+    public int fieldInt38229;
+    public int fieldInt38230;
+    public int fieldInt38231;
+    public int fieldInt38232;
+    public int fieldInt38233;
+    public int fieldInt38234;
+    public int fieldInt38235;
+    public int fieldInt38236;
+    public int fieldInt38237;
+    public int fieldInt38238;
+    public int fieldInt38239;
+    public int fieldInt38240;
+    public int fieldInt38241;
+    public int fieldInt38242;
+    public int fieldInt38243;
+    public int fieldInt38244;
+    public int fieldInt38245;
+    public int fieldInt38246;
+    public int fieldInt38247;
+    public int fieldInt38248;
+    public int fieldInt38249;
+    public int fieldInt38250;
+    public int fieldInt38251;
+    public int fieldInt38252;
+    public int fieldInt38253;
+    public int fieldInt38254;
+    public int fieldInt38255;
+    public int fieldInt38256;
+    public int fieldInt38257;
+    public int fieldInt38258;
+    public int fieldInt38259;
+    public int fieldInt38260;
+    public int fieldInt38261;
+    public int fieldInt38262;
+    public int fieldInt38263;
+    public int fieldInt38264;
+    public int fieldInt38265;
+    public int fieldInt38266;
+    public int fieldInt38267;
+    public int fieldInt38268;
+    public int fieldInt38269;
+    public int fieldInt38270;
+    public int fieldInt38271;
+    public int fieldInt38272;
+    public int fieldInt38273;
+    public int fieldInt38274;
+    public int fieldInt38275;
+    public int fieldInt38276;
+    public int fieldInt38277;
+    public int fieldInt38278;
+    public int fieldInt38279;
+    public int fieldInt38280;
+    public int fieldInt38281;
+    public int fieldInt38282;
+    public int fieldInt38283;
+    public int fieldInt38284;
+    public int fieldInt38285;
+    public int fieldInt38286;
+    public int fieldInt38287;
+    public int fieldInt38288;
+    public int fieldInt38289;
+    public int fieldInt38290;
+    public int fieldInt38291;
+    public int fieldInt38292;
+    public int fieldInt38293;
+    public int fieldInt38294;
+    public int fieldInt38295;
+    public int fieldInt38296;
+    public int fieldInt38297;
+    public int fieldInt38298;
+    public int fieldInt38299;
+    public int fieldInt38300;
+    public int fieldInt38301;
+    public int fieldInt38302;
+    public int fieldInt38303;
+    public int fieldInt38304;
+    public int fieldInt38305;
+    public int fieldInt38306;
+    public int fieldInt38307;
+    public int fieldInt38308;
+    public int fieldInt38309;
+    public int fieldInt38310;
+    public int fieldInt38311;
+    public int fieldInt38312;
+    public int fieldInt38313;
+    public int fieldInt38314;
+    public int fieldInt38315;
+    public int fieldInt38316;
+    public int fieldInt38317;
+    public int fieldInt38318;
+    public int fieldInt38319;
+    public int fieldInt38320;
+    public int fieldInt38321;
+    public int fieldInt38322;
+    public int fieldInt38323;
+    public int fieldInt38324;
+    public int fieldInt38325;
+    public int fieldInt38326;
+    public int fieldInt38327;
+    public int fieldInt38328;
+    public int fieldInt38329;
+    public int fieldInt38330;
+    public int fieldInt38331;
+    public int fieldInt38332;
+    public int fieldInt38333;
+    public int fieldInt38334;
+    public int fieldInt38335;
+    public int fieldInt38336;
+    public int fieldInt38337;
+    public int fieldInt38338;
+    public int fieldInt38339;
+    public int fieldInt38340;
+    public int fieldInt38341;
+    public int fieldInt38342;
+    public int fieldInt38343;
+    public int fieldInt38344;
+    public int fieldInt38345;
+    public int fieldInt38346;
+    public int fieldInt38347;
+    public int fieldInt38348;
+    public int fieldInt38349;
+    public int fieldInt38350;
+    public int fieldInt38351;
+    public int fieldInt38352;
+    public int fieldInt38353;
+    public int fieldInt38354;
+    public int fieldInt38355;
+    public int fieldInt38356;
+    public int fieldInt38357;
+    public int fieldInt38358;
+    public int fieldInt38359;
+    public int fieldInt38360;
+    public int fieldInt38361;
+    public int fieldInt38362;
+    public int fieldInt38363;
+    public int fieldInt38364;
+    public int fieldInt38365;
+    public int fieldInt38366;
+    public int fieldInt38367;
+    public int fieldInt38368;
+    public int fieldInt38369;
+    public int fieldInt38370;
+    public int fieldInt38371;
+    public int fieldInt38372;
+    public int fieldInt38373;
+    public int fieldInt38374;
+    public int fieldInt38375;
+    public int fieldInt38376;
+    public int fieldInt38377;
+    public int fieldInt38378;
+    public int fieldInt38379;
+    public int fieldInt38380;
+    public int fieldInt38381;
+    public int fieldInt38382;
+    public int fieldInt38383;
+    public int fieldInt38384;
+    public int fieldInt38385;
+    public int fieldInt38386;
+    public int fieldInt38387;
+    public int fieldInt38388;
+    public int fieldInt38389;
+    public int fieldInt38390;
+    public int fieldInt38391;
+    public int fieldInt38392;
+    public int fieldInt38393;
+    public int fieldInt38394;
+    public int fieldInt38395;
+    public int fieldInt38396;
+    public int fieldInt38397;
+    public int fieldInt38398;
+    public int fieldInt38399;
+    public int fieldInt38400;
+    public int fieldInt38401;
+    public int fieldInt38402;
+    public int fieldInt38403;
+    public int fieldInt38404;
+    public int fieldInt38405;
+    public int fieldInt38406;
+    public int fieldInt38407;
+    public int fieldInt38408;
+    public int fieldInt38409;
+    public int fieldInt38410;
+    public int fieldInt38411;
+    public int fieldInt38412;
+    public int fieldInt38413;
+    public int fieldInt38414;
+    public int fieldInt38415;
+    public int fieldInt38416;
+    public int fieldInt38417;
+    public int fieldInt38418;
+    public int fieldInt38419;
+    public int fieldInt38420;
+    public int fieldInt38421;
+    public int fieldInt38422;
+    public int fieldInt38423;
+    public int fieldInt38424;
+    public int fieldInt38425;
+    public int fieldInt38426;
+    public int fieldInt38427;
+    public int fieldInt38428;
+    public int fieldInt38429;
+    public int fieldInt38430;
+    public int fieldInt38431;
+    public int fieldInt38432;
+    public int fieldInt38433;
+    public int fieldInt38434;
+    public int fieldInt38435;
+    public int fieldInt38436;
+    public int fieldInt38437;
+    public int fieldInt38438;
+    public int fieldInt38439;
+    public int fieldInt38440;
+    public int fieldInt38441;
+    public int fieldInt38442;
+    public int fieldInt38443;
+    public int fieldInt38444;
+    public int fieldInt38445;
+    public int fieldInt38446;
+    public int fieldInt38447;
+    public int fieldInt38448;
+    public int fieldInt38449;
+    public int fieldInt38450;
+    public int fieldInt38451;
+    public int fieldInt38452;
+    public int fieldInt38453;
+    public int fieldInt38454;
+    public int fieldInt38455;
+    public int fieldInt38456;
+    public int fieldInt38457;
+    public int fieldInt38458;
+    public int fieldInt38459;
+    public int fieldInt38460;
+    public int fieldInt38461;
+    public int fieldInt38462;
+    public int fieldInt38463;
+    public int fieldInt38464;
+    public int fieldInt38465;
+    public int fieldInt38466;
+    public int fieldInt38467;
+    public int fieldInt38468;
+    public int fieldInt38469;
+    public int fieldInt38470;
+    public int fieldInt38471;
+    public int fieldInt38472;
+    public int fieldInt38473;
+    public int fieldInt38474;
+    public int fieldInt38475;
+    public int fieldInt38476;
+    public int fieldInt38477;
+    public int fieldInt38478;
+    public int fieldInt38479;
+    public int fieldInt38480;
+    public int fieldInt38481;
+    public int fieldInt38482;
+    public int fieldInt38483;
+    public int fieldInt38484;
+    public int fieldInt38485;
+    public int fieldInt38486;
+    public int fieldInt38487;
+    public int fieldInt38488;
+    public int fieldInt38489;
+    public int fieldInt38490;
+    public int fieldInt38491;
+    public int fieldInt38492;
+    public int fieldInt38493;
+    public int fieldInt38494;
+    public int fieldInt38495;
+    public int fieldInt38496;
+    public int fieldInt38497;
+    public int fieldInt38498;
+    public int fieldInt38499;
+    public int fieldInt38500;
+    public int fieldInt38501;
+    public int fieldInt38502;
+    public int fieldInt38503;
+    public int fieldInt38504;
+    public int fieldInt38505;
+    public int fieldInt38506;
+    public int fieldInt38507;
+    public int fieldInt38508;
+    public int fieldInt38509;
+    public int fieldInt38510;
+    public int fieldInt38511;
+    public int fieldInt38512;
+    public int fieldInt38513;
+    public int fieldInt38514;
+    public int fieldInt38515;
+    public int fieldInt38516;
+    public int fieldInt38517;
+    public int fieldInt38518;
+    public int fieldInt38519;
+    public int fieldInt38520;
+    public int fieldInt38521;
+    public int fieldInt38522;
+    public int fieldInt38523;
+    public int fieldInt38524;
+    public int fieldInt38525;
+    public int fieldInt38526;
+    public int fieldInt38527;
+    public int fieldInt38528;
+    public int fieldInt38529;
+    public int fieldInt38530;
+    public int fieldInt38531;
+    public int fieldInt38532;
+    public int fieldInt38533;
+    public int fieldInt38534;
+    public int fieldInt38535;
+    public int fieldInt38536;
+    public int fieldInt38537;
+    public int fieldInt38538;
+    public int fieldInt38539;
+    public int fieldInt38540;
+    public int fieldInt38541;
+    public int fieldInt38542;
+    public int fieldInt38543;
+    public int fieldInt38544;
+    public int fieldInt38545;
+    public int fieldInt38546;
+    public int fieldInt38547;
+    public int fieldInt38548;
+    public int fieldInt38549;
+    public int fieldInt38550;
+    public int fieldInt38551;
+    public int fieldInt38552;
+    public int fieldInt38553;
+    public int fieldInt38554;
+    public int fieldInt38555;
+    public int fieldInt38556;
+    public int fieldInt38557;
+    public int fieldInt38558;
+    public int fieldInt38559;
+    public int fieldInt38560;
+    public int fieldInt38561;
+    public int fieldInt38562;
+    public int fieldInt38563;
+    public int fieldInt38564;
+    public int fieldInt38565;
+    public int fieldInt38566;
+    public int fieldInt38567;
+    public int fieldInt38568;
+    public int fieldInt38569;
+    public int fieldInt38570;
+    public int fieldInt38571;
+    public int fieldInt38572;
+    public int fieldInt38573;
+    public int fieldInt38574;
+    public int fieldInt38575;
+    public int fieldInt38576;
+    public int fieldInt38577;
+    public int fieldInt38578;
+    public int fieldInt38579;
+    public int fieldInt38580;
+    public int fieldInt38581;
+    public int fieldInt38582;
+    public int fieldInt38583;
+    public int fieldInt38584;
+    public int fieldInt38585;
+    public int fieldInt38586;
+    public int fieldInt38587;
+    public int fieldInt38588;
+    public int fieldInt38589;
+    public int fieldInt38590;
+    public int fieldInt38591;
+    public int fieldInt38592;
+    public int fieldInt38593;
+    public int fieldInt38594;
+    public int fieldInt38595;
+    public int fieldInt38596;
+    public int fieldInt38597;
+    public int fieldInt38598;
+    public int fieldInt38599;
+    public int fieldInt38600;
+    public int fieldInt38601;
+    public int fieldInt38602;
+    public int fieldInt38603;
+    public int fieldInt38604;
+    public int fieldInt38605;
+    public int fieldInt38606;
+    public int fieldInt38607;
+    public int fieldInt38608;
+    public int fieldInt38609;
+    public int fieldInt38610;
+    public int fieldInt38611;
+    public int fieldInt38612;
+    public int fieldInt38613;
+    public int fieldInt38614;
+    public int fieldInt38615;
+    public int fieldInt38616;
+    public int fieldInt38617;
+    public int fieldInt38618;
+    public int fieldInt38619;
+    public int fieldInt38620;
+    public int fieldInt38621;
+    public int fieldInt38622;
+    public int fieldInt38623;
+    public int fieldInt38624;
+    public int fieldInt38625;
+    public int fieldInt38626;
+    public int fieldInt38627;
+    public int fieldInt38628;
+    public int fieldInt38629;
+    public int fieldInt38630;
+    public int fieldInt38631;
+    public int fieldInt38632;
+    public int fieldInt38633;
+    public int fieldInt38634;
+    public int fieldInt38635;
+    public int fieldInt38636;
+    public int fieldInt38637;
+    public int fieldInt38638;
+    public int fieldInt38639;
+    public int fieldInt38640;
+    public int fieldInt38641;
+    public int fieldInt38642;
+    public int fieldInt38643;
+    public int fieldInt38644;
+    public int fieldInt38645;
+    public int fieldInt38646;
+    public int fieldInt38647;
+    public int fieldInt38648;
+    public int fieldInt38649;
+    public int fieldInt38650;
+    public int fieldInt38651;
+    public int fieldInt38652;
+    public int fieldInt38653;
+    public int fieldInt38654;
+    public int fieldInt38655;
+    public int fieldInt38656;
+    public int fieldInt38657;
+    public int fieldInt38658;
+    public int fieldInt38659;
+    public int fieldInt38660;
+    public int fieldInt38661;
+    public int fieldInt38662;
+    public int fieldInt38663;
+    public int fieldInt38664;
+    public int fieldInt38665;
+    public int fieldInt38666;
+    public int fieldInt38667;
+    public int fieldInt38668;
+    public int fieldInt38669;
+    public int fieldInt38670;
+    public int fieldInt38671;
+    public int fieldInt38672;
+    public int fieldInt38673;
+    public int fieldInt38674;
+    public int fieldInt38675;
+    public int fieldInt38676;
+    public int fieldInt38677;
+    public int fieldInt38678;
+    public int fieldInt38679;
+    public int fieldInt38680;
+    public int fieldInt38681;
+    public int fieldInt38682;
+    public int fieldInt38683;
+    public int fieldInt38684;
+    public int fieldInt38685;
+    public int fieldInt38686;
+    public int fieldInt38687;
+    public int fieldInt38688;
+    public int fieldInt38689;
+    public int fieldInt38690;
+    public int fieldInt38691;
+    public int fieldInt38692;
+    public int fieldInt38693;
+    public int fieldInt38694;
+    public int fieldInt38695;
+    public int fieldInt38696;
+    public int fieldInt38697;
+    public int fieldInt38698;
+    public int fieldInt38699;
+    public int fieldInt38700;
+    public int fieldInt38701;
+    public int fieldInt38702;
+    public int fieldInt38703;
+    public int fieldInt38704;
+    public int fieldInt38705;
+    public int fieldInt38706;
+    public int fieldInt38707;
+    public int fieldInt38708;
+    public int fieldInt38709;
+    public int fieldInt38710;
+    public int fieldInt38711;
+    public int fieldInt38712;
+    public int fieldInt38713;
+    public int fieldInt38714;
+    public int fieldInt38715;
+    public int fieldInt38716;
+    public int fieldInt38717;
+    public int fieldInt38718;
+    public int fieldInt38719;
+    public int fieldInt38720;
+    public int fieldInt38721;
+    public int fieldInt38722;
+    public int fieldInt38723;
+    public int fieldInt38724;
+    public int fieldInt38725;
+    public int fieldInt38726;
+    public int fieldInt38727;
+    public int fieldInt38728;
+    public int fieldInt38729;
+    public int fieldInt38730;
+    public int fieldInt38731;
+    public int fieldInt38732;
+    public int fieldInt38733;
+    public int fieldInt38734;
+    public int fieldInt38735;
+    public int fieldInt38736;
+    public int fieldInt38737;
+    public int fieldInt38738;
+    public int fieldInt38739;
+    public int fieldInt38740;
+    public int fieldInt38741;
+    public int fieldInt38742;
+    public int fieldInt38743;
+    public int fieldInt38744;
+    public int fieldInt38745;
+    public int fieldInt38746;
+    public int fieldInt38747;
+    public int fieldInt38748;
+    public int fieldInt38749;
+    public int fieldInt38750;
+    public int fieldInt38751;
+    public int fieldInt38752;
+    public int fieldInt38753;
+    public int fieldInt38754;
+    public int fieldInt38755;
+    public int fieldInt38756;
+    public int fieldInt38757;
+    public int fieldInt38758;
+    public int fieldInt38759;
+    public int fieldInt38760;
+    public int fieldInt38761;
+    public int fieldInt38762;
+    public int fieldInt38763;
+    public int fieldInt38764;
+    public int fieldInt38765;
+    public int fieldInt38766;
+    public int fieldInt38767;
+    public int fieldInt38768;
+    public int fieldInt38769;
+    public int fieldInt38770;
+    public int fieldInt38771;
+    public int fieldInt38772;
+    public int fieldInt38773;
+    public int fieldInt38774;
+    public int fieldInt38775;
+    public int fieldInt38776;
+    public int fieldInt38777;
+    public int fieldInt38778;
+    public int fieldInt38779;
+    public int fieldInt38780;
+    public int fieldInt38781;
+    public int fieldInt38782;
+    public int fieldInt38783;
+    public int fieldInt38784;
+    public int fieldInt38785;
+    public int fieldInt38786;
+    public int fieldInt38787;
+    public int fieldInt38788;
+    public int fieldInt38789;
+    public int fieldInt38790;
+    public int fieldInt38791;
+    public int fieldInt38792;
+    public int fieldInt38793;
+    public int fieldInt38794;
+    public int fieldInt38795;
+    public int fieldInt38796;
+    public int fieldInt38797;
+    public int fieldInt38798;
+    public int fieldInt38799;
+    public int fieldInt38800;
+    public int fieldInt38801;
+    public int fieldInt38802;
+    public int fieldInt38803;
+    public int fieldInt38804;
+    public int fieldInt38805;
+    public int fieldInt38806;
+    public int fieldInt38807;
+    public int fieldInt38808;
+    public int fieldInt38809;
+    public int fieldInt38810;
+    public int fieldInt38811;
+    public int fieldInt38812;
+    public int fieldInt38813;
+    public int fieldInt38814;
+    public int fieldInt38815;
+    public int fieldInt38816;
+    public int fieldInt38817;
+    public int fieldInt38818;
+    public int fieldInt38819;
+    public int fieldInt38820;
+    public int fieldInt38821;
+    public int fieldInt38822;
+    public int fieldInt38823;
+    public int fieldInt38824;
+    public int fieldInt38825;
+    public int fieldInt38826;
+    public int fieldInt38827;
+    public int fieldInt38828;
+    public int fieldInt38829;
+    public int fieldInt38830;
+    public int fieldInt38831;
+    public int fieldInt38832;
+    public int fieldInt38833;
+    public int fieldInt38834;
+    public int fieldInt38835;
+    public int fieldInt38836;
+    public int fieldInt38837;
+    public int fieldInt38838;
+    public int fieldInt38839;
+    public int fieldInt38840;
+    public int fieldInt38841;
+    public int fieldInt38842;
+    public int fieldInt38843;
+    public int fieldInt38844;
+    public int fieldInt38845;
+    public int fieldInt38846;
+    public int fieldInt38847;
+    public int fieldInt38848;
+    public int fieldInt38849;
+    public int fieldInt38850;
+    public int fieldInt38851;
+    public int fieldInt38852;
+    public int fieldInt38853;
+    public int fieldInt38854;
+    public int fieldInt38855;
+    public int fieldInt38856;
+    public int fieldInt38857;
+    public int fieldInt38858;
+    public int fieldInt38859;
+    public int fieldInt38860;
+    public int fieldInt38861;
+    public int fieldInt38862;
+    public int fieldInt38863;
+    public int fieldInt38864;
+    public int fieldInt38865;
+    public int fieldInt38866;
+    public int fieldInt38867;
+    public int fieldInt38868;
+    public int fieldInt38869;
+    public int fieldInt38870;
+    public int fieldInt38871;
+    public int fieldInt38872;
+    public int fieldInt38873;
+    public int fieldInt38874;
+    public int fieldInt38875;
+    public int fieldInt38876;
+    public int fieldInt38877;
+    public int fieldInt38878;
+    public int fieldInt38879;
+    public int fieldInt38880;
+    public int fieldInt38881;
+    public int fieldInt38882;
+    public int fieldInt38883;
+    public int fieldInt38884;
+    public int fieldInt38885;
+    public int fieldInt38886;
+    public int fieldInt38887;
+    public int fieldInt38888;
+    public int fieldInt38889;
+    public int fieldInt38890;
+    public int fieldInt38891;
+    public int fieldInt38892;
+    public int fieldInt38893;
+    public int fieldInt38894;
+    public int fieldInt38895;
+    public int fieldInt38896;
+    public int fieldInt38897;
+    public int fieldInt38898;
+    public int fieldInt38899;
+    public int fieldInt38900;
+    public int fieldInt38901;
+    public int fieldInt38902;
+    public int fieldInt38903;
+    public int fieldInt38904;
+    public int fieldInt38905;
+    public int fieldInt38906;
+    public int fieldInt38907;
+    public int fieldInt38908;
+    public int fieldInt38909;
+    public int fieldInt38910;
+    public int fieldInt38911;
+    public int fieldInt38912;
+    public int fieldInt38913;
+    public int fieldInt38914;
+    public int fieldInt38915;
+    public int fieldInt38916;
+    public int fieldInt38917;
+    public int fieldInt38918;
+    public int fieldInt38919;
+    public int fieldInt38920;
+    public int fieldInt38921;
+    public int fieldInt38922;
+    public int fieldInt38923;
+    public int fieldInt38924;
+    public int fieldInt38925;
+    public int fieldInt38926;
+    public int fieldInt38927;
+    public int fieldInt38928;
+    public int fieldInt38929;
+    public int fieldInt38930;
+    public int fieldInt38931;
+    public int fieldInt38932;
+    public int fieldInt38933;
+    public int fieldInt38934;
+    public int fieldInt38935;
+    public int fieldInt38936;
+    public int fieldInt38937;
+    public int fieldInt38938;
+    public int fieldInt38939;
+    public int fieldInt38940;
+    public int fieldInt38941;
+    public int fieldInt38942;
+    public int fieldInt38943;
+    public int fieldInt38944;
+    public int fieldInt38945;
+    public int fieldInt38946;
+    public int fieldInt38947;
+    public int fieldInt38948;
+    public int fieldInt38949;
+    public int fieldInt38950;
+    public int fieldInt38951;
+    public int fieldInt38952;
+    public int fieldInt38953;
+    public int fieldInt38954;
+    public int fieldInt38955;
+    public int fieldInt38956;
+    public int fieldInt38957;
+    public int fieldInt38958;
+    public int fieldInt38959;
+    public int fieldInt38960;
+    public int fieldInt38961;
+    public int fieldInt38962;
+    public int fieldInt38963;
+    public int fieldInt38964;
+    public int fieldInt38965;
+    public int fieldInt38966;
+    public int fieldInt38967;
+    public int fieldInt38968;
+    public int fieldInt38969;
+    public int fieldInt38970;
+    public int fieldInt38971;
+    public int fieldInt38972;
+    public int fieldInt38973;
+    public int fieldInt38974;
+    public int fieldInt38975;
+    public int fieldInt38976;
+    public int fieldInt38977;
+    public int fieldInt38978;
+    public int fieldInt38979;
+    public int fieldInt38980;
+    public int fieldInt38981;
+    public int fieldInt38982;
+    public int fieldInt38983;
+    public int fieldInt38984;
+    public int fieldInt38985;
+    public int fieldInt38986;
+    public int fieldInt38987;
+    public int fieldInt38988;
+    public int fieldInt38989;
+    public int fieldInt38990;
+    public int fieldInt38991;
+    public int fieldInt38992;
+    public int fieldInt38993;
+    public int fieldInt38994;
+    public int fieldInt38995;
+    public int fieldInt38996;
+    public int fieldInt38997;
+    public int fieldInt38998;
+    public int fieldInt38999;
+    public int fieldInt39000;
+    public int fieldInt39001;
+    public int fieldInt39002;
+    public int fieldInt39003;
+    public int fieldInt39004;
+    public int fieldInt39005;
+    public int fieldInt39006;
+    public int fieldInt39007;
+    public int fieldInt39008;
+    public int fieldInt39009;
+    public int fieldInt39010;
+    public int fieldInt39011;
+    public int fieldInt39012;
+    public int fieldInt39013;
+    public int fieldInt39014;
+    public int fieldInt39015;
+    public int fieldInt39016;
+    public int fieldInt39017;
+    public int fieldInt39018;
+    public int fieldInt39019;
+    public int fieldInt39020;
+    public int fieldInt39021;
+    public int fieldInt39022;
+    public int fieldInt39023;
+    public int fieldInt39024;
+    public int fieldInt39025;
+    public int fieldInt39026;
+    public int fieldInt39027;
+    public int fieldInt39028;
+    public int fieldInt39029;
+    public int fieldInt39030;
+    public int fieldInt39031;
+    public int fieldInt39032;
+    public int fieldInt39033;
+    public int fieldInt39034;
+    public int fieldInt39035;
+    public int fieldInt39036;
+    public int fieldInt39037;
+    public int fieldInt39038;
+    public int fieldInt39039;
+    public int fieldInt39040;
+    public int fieldInt39041;
+    public int fieldInt39042;
+    public int fieldInt39043;
+    public int fieldInt39044;
+    public int fieldInt39045;
+    public int fieldInt39046;
+    public int fieldInt39047;
+    public int fieldInt39048;
+    public int fieldInt39049;
+    public int fieldInt39050;
+    public int fieldInt39051;
+    public int fieldInt39052;
+    public int fieldInt39053;
+    public int fieldInt39054;
+    public int fieldInt39055;
+    public int fieldInt39056;
+    public int fieldInt39057;
+    public int fieldInt39058;
+    public int fieldInt39059;
+    public int fieldInt39060;
+    public int fieldInt39061;
+    public int fieldInt39062;
+    public int fieldInt39063;
+    public int fieldInt39064;
+    public int fieldInt39065;
+    public int fieldInt39066;
+    public int fieldInt39067;
+    public int fieldInt39068;
+    public int fieldInt39069;
+    public int fieldInt39070;
+    public int fieldInt39071;
+    public int fieldInt39072;
+    public int fieldInt39073;
+    public int fieldInt39074;
+    public int fieldInt39075;
+    public int fieldInt39076;
+    public int fieldInt39077;
+    public int fieldInt39078;
+    public int fieldInt39079;
+    public int fieldInt39080;
+    public int fieldInt39081;
+    public int fieldInt39082;
+    public int fieldInt39083;
+    public int fieldInt39084;
+    public int fieldInt39085;
+    public int fieldInt39086;
+    public int fieldInt39087;
+    public int fieldInt39088;
+    public int fieldInt39089;
+    public int fieldInt39090;
+    public int fieldInt39091;
+    public int fieldInt39092;
+    public int fieldInt39093;
+    public int fieldInt39094;
+    public int fieldInt39095;
+    public int fieldInt39096;
+    public int fieldInt39097;
+    public int fieldInt39098;
+    public int fieldInt39099;
+    public int fieldInt39100;
+    public int fieldInt39101;
+    public int fieldInt39102;
+    public int fieldInt39103;
+    public int fieldInt39104;
+    public int fieldInt39105;
+    public int fieldInt39106;
+    public int fieldInt39107;
+    public int fieldInt39108;
+    public int fieldInt39109;
+    public int fieldInt39110;
+    public int fieldInt39111;
+    public int fieldInt39112;
+    public int fieldInt39113;
+    public int fieldInt39114;
+    public int fieldInt39115;
+    public int fieldInt39116;
+    public int fieldInt39117;
+    public int fieldInt39118;
+    public int fieldInt39119;
+    public int fieldInt39120;
+    public int fieldInt39121;
+    public int fieldInt39122;
+    public int fieldInt39123;
+    public int fieldInt39124;
+    public int fieldInt39125;
+    public int fieldInt39126;
+    public int fieldInt39127;
+    public int fieldInt39128;
+    public int fieldInt39129;
+    public int fieldInt39130;
+    public int fieldInt39131;
+    public int fieldInt39132;
+    public int fieldInt39133;
+    public int fieldInt39134;
+    public int fieldInt39135;
+    public int fieldInt39136;
+    public int fieldInt39137;
+    public int fieldInt39138;
+    public int fieldInt39139;
+    public int fieldInt39140;
+    public int fieldInt39141;
+    public int fieldInt39142;
+    public int fieldInt39143;
+    public int fieldInt39144;
+    public int fieldInt39145;
+    public int fieldInt39146;
+    public int fieldInt39147;
+    public int fieldInt39148;
+    public int fieldInt39149;
+    public int fieldInt39150;
+    public int fieldInt39151;
+    public int fieldInt39152;
+    public int fieldInt39153;
+    public int fieldInt39154;
+    public int fieldInt39155;
+    public int fieldInt39156;
+    public int fieldInt39157;
+    public int fieldInt39158;
+    public int fieldInt39159;
+    public int fieldInt39160;
+    public int fieldInt39161;
+    public int fieldInt39162;
+    public int fieldInt39163;
+    public int fieldInt39164;
+    public int fieldInt39165;
+    public int fieldInt39166;
+    public int fieldInt39167;
+    public int fieldInt39168;
+    public int fieldInt39169;
+    public int fieldInt39170;
+    public int fieldInt39171;
+    public int fieldInt39172;
+    public int fieldInt39173;
+    public int fieldInt39174;
+    public int fieldInt39175;
+    public int fieldInt39176;
+    public int fieldInt39177;
+    public int fieldInt39178;
+    public int fieldInt39179;
+    public int fieldInt39180;
+    public int fieldInt39181;
+    public int fieldInt39182;
+    public int fieldInt39183;
+    public int fieldInt39184;
+    public int fieldInt39185;
+    public int fieldInt39186;
+    public int fieldInt39187;
+    public int fieldInt39188;
+    public int fieldInt39189;
+    public int fieldInt39190;
+    public int fieldInt39191;
+    public int fieldInt39192;
+    public int fieldInt39193;
+    public int fieldInt39194;
+    public int fieldInt39195;
+    public int fieldInt39196;
+    public int fieldInt39197;
+    public int fieldInt39198;
+    public int fieldInt39199;
+    public int fieldInt39200;
+    public int fieldInt39201;
+    public int fieldInt39202;
+    public int fieldInt39203;
+    public int fieldInt39204;
+    public int fieldInt39205;
+    public int fieldInt39206;
+    public int fieldInt39207;
+    public int fieldInt39208;
+    public int fieldInt39209;
+    public int fieldInt39210;
+    public int fieldInt39211;
+    public int fieldInt39212;
+    public int fieldInt39213;
+    public int fieldInt39214;
+    public int fieldInt39215;
+    public int fieldInt39216;
+    public int fieldInt39217;
+    public int fieldInt39218;
+    public int fieldInt39219;
+    public int fieldInt39220;
+    public int fieldInt39221;
+    public int fieldInt39222;
+    public int fieldInt39223;
+    public int fieldInt39224;
+    public int fieldInt39225;
+    public int fieldInt39226;
+    public int fieldInt39227;
+    public int fieldInt39228;
+    public int fieldInt39229;
+    public int fieldInt39230;
+    public int fieldInt39231;
+    public int fieldInt39232;
+    public int fieldInt39233;
+    public int fieldInt39234;
+    public int fieldInt39235;
+    public int fieldInt39236;
+    public int fieldInt39237;
+    public int fieldInt39238;
+    public int fieldInt39239;
+    public int fieldInt39240;
+    public int fieldInt39241;
+    public int fieldInt39242;
+    public int fieldInt39243;
+    public int fieldInt39244;
+    public int fieldInt39245;
+    public int fieldInt39246;
+    public int fieldInt39247;
+    public int fieldInt39248;
+    public int fieldInt39249;
+    public int fieldInt39250;
+    public int fieldInt39251;
+    public int fieldInt39252;
+    public int fieldInt39253;
+    public int fieldInt39254;
+    public int fieldInt39255;
+    public int fieldInt39256;
+    public int fieldInt39257;
+    public int fieldInt39258;
+    public int fieldInt39259;
+    public int fieldInt39260;
+    public int fieldInt39261;
+    public int fieldInt39262;
+    public int fieldInt39263;
+    public int fieldInt39264;
+    public int fieldInt39265;
+    public int fieldInt39266;
+    public int fieldInt39267;
+    public int fieldInt39268;
+    public int fieldInt39269;
+    public int fieldInt39270;
+    public int fieldInt39271;
+    public int fieldInt39272;
+    public int fieldInt39273;
+    public int fieldInt39274;
+    public int fieldInt39275;
+    public int fieldInt39276;
+    public int fieldInt39277;
+    public int fieldInt39278;
+    public int fieldInt39279;
+    public int fieldInt39280;
+    public int fieldInt39281;
+    public int fieldInt39282;
+    public int fieldInt39283;
+    public int fieldInt39284;
+    public int fieldInt39285;
+    public int fieldInt39286;
+    public int fieldInt39287;
+    public int fieldInt39288;
+    public int fieldInt39289;
+    public int fieldInt39290;
+    public int fieldInt39291;
+    public int fieldInt39292;
+    public int fieldInt39293;
+    public int fieldInt39294;
+    public int fieldInt39295;
+    public int fieldInt39296;
+    public int fieldInt39297;
+    public int fieldInt39298;
+    public int fieldInt39299;
+    public int fieldInt39300;
+    public int fieldInt39301;
+    public int fieldInt39302;
+    public int fieldInt39303;
+    public int fieldInt39304;
+    public int fieldInt39305;
+    public int fieldInt39306;
+    public int fieldInt39307;
+    public int fieldInt39308;
+    public int fieldInt39309;
+    public int fieldInt39310;
+    public int fieldInt39311;
+    public int fieldInt39312;
+    public int fieldInt39313;
+    public int fieldInt39314;
+    public int fieldInt39315;
+    public int fieldInt39316;
+    public int fieldInt39317;
+    public int fieldInt39318;
+    public int fieldInt39319;
+    public int fieldInt39320;
+    public int fieldInt39321;
+    public int fieldInt39322;
+    public int fieldInt39323;
+    public int fieldInt39324;
+    public int fieldInt39325;
+    public int fieldInt39326;
+    public int fieldInt39327;
+    public int fieldInt39328;
+    public int fieldInt39329;
+    public int fieldInt39330;
+    public int fieldInt39331;
+    public int fieldInt39332;
+    public int fieldInt39333;
+    public int fieldInt39334;
+    public int fieldInt39335;
+    public int fieldInt39336;
+    public int fieldInt39337;
+    public int fieldInt39338;
+    public int fieldInt39339;
+    public int fieldInt39340;
+    public int fieldInt39341;
+    public int fieldInt39342;
+    public int fieldInt39343;
+    public int fieldInt39344;
+    public int fieldInt39345;
+    public int fieldInt39346;
+    public int fieldInt39347;
+    public int fieldInt39348;
+    public int fieldInt39349;
+    public int fieldInt39350;
+    public int fieldInt39351;
+    public int fieldInt39352;
+    public int fieldInt39353;
+    public int fieldInt39354;
+    public int fieldInt39355;
+    public int fieldInt39356;
+    public int fieldInt39357;
+    public int fieldInt39358;
+    public int fieldInt39359;
+    public int fieldInt39360;
+    public int fieldInt39361;
+    public int fieldInt39362;
+    public int fieldInt39363;
+    public int fieldInt39364;
+    public int fieldInt39365;
+    public int fieldInt39366;
+    public int fieldInt39367;
+    public int fieldInt39368;
+    public int fieldInt39369;
+    public int fieldInt39370;
+    public int fieldInt39371;
+    public int fieldInt39372;
+    public int fieldInt39373;
+    public int fieldInt39374;
+    public int fieldInt39375;
+    public int fieldInt39376;
+    public int fieldInt39377;
+    public int fieldInt39378;
+    public int fieldInt39379;
+    public int fieldInt39380;
+    public int fieldInt39381;
+    public int fieldInt39382;
+    public int fieldInt39383;
+    public int fieldInt39384;
+    public int fieldInt39385;
+    public int fieldInt39386;
+    public int fieldInt39387;
+    public int fieldInt39388;
+    public int fieldInt39389;
+    public int fieldInt39390;
+    public int fieldInt39391;
+    public int fieldInt39392;
+    public int fieldInt39393;
+    public int fieldInt39394;
+    public int fieldInt39395;
+    public int fieldInt39396;
+    public int fieldInt39397;
+    public int fieldInt39398;
+    public int fieldInt39399;
+    public int fieldInt39400;
+    public int fieldInt39401;
+    public int fieldInt39402;
+    public int fieldInt39403;
+    public int fieldInt39404;
+    public int fieldInt39405;
+    public int fieldInt39406;
+    public int fieldInt39407;
+    public int fieldInt39408;
+    public int fieldInt39409;
+    public int fieldInt39410;
+    public int fieldInt39411;
+    public int fieldInt39412;
+    public int fieldInt39413;
+    public int fieldInt39414;
+    public int fieldInt39415;
+    public int fieldInt39416;
+    public int fieldInt39417;
+    public int fieldInt39418;
+    public int fieldInt39419;
+    public int fieldInt39420;
+    public int fieldInt39421;
+    public int fieldInt39422;
+    public int fieldInt39423;
+    public int fieldInt39424;
+    public int fieldInt39425;
+    public int fieldInt39426;
+    public int fieldInt39427;
+    public int fieldInt39428;
+    public int fieldInt39429;
+    public int fieldInt39430;
+    public int fieldInt39431;
+    public int fieldInt39432;
+    public int fieldInt39433;
+    public int fieldInt39434;
+    public int fieldInt39435;
+    public int fieldInt39436;
+    public int fieldInt39437;
+    public int fieldInt39438;
+    public int fieldInt39439;
+    public int fieldInt39440;
+    public int fieldInt39441;
+    public int fieldInt39442;
+    public int fieldInt39443;
+    public int fieldInt39444;
+    public int fieldInt39445;
+    public int fieldInt39446;
+    public int fieldInt39447;
+    public int fieldInt39448;
+    public int fieldInt39449;
+    public int fieldInt39450;
+    public int fieldInt39451;
+    public int fieldInt39452;
+    public int fieldInt39453;
+    public int fieldInt39454;
+    public int fieldInt39455;
+    public int fieldInt39456;
+    public int fieldInt39457;
+    public int fieldInt39458;
+    public int fieldInt39459;
+    public int fieldInt39460;
+    public int fieldInt39461;
+    public int fieldInt39462;
+    public int fieldInt39463;
+    public int fieldInt39464;
+    public int fieldInt39465;
+    public int fieldInt39466;
+    public int fieldInt39467;
+    public int fieldInt39468;
+    public int fieldInt39469;
+    public int fieldInt39470;
+    public int fieldInt39471;
+    public int fieldInt39472;
+    public int fieldInt39473;
+    public int fieldInt39474;
+    public int fieldInt39475;
+    public int fieldInt39476;
+    public int fieldInt39477;
+    public int fieldInt39478;
+    public int fieldInt39479;
+    public int fieldInt39480;
+    public int fieldInt39481;
+    public int fieldInt39482;
+    public int fieldInt39483;
+    public int fieldInt39484;
+    public int fieldInt39485;
+    public int fieldInt39486;
+    public int fieldInt39487;
+    public int fieldInt39488;
+    public int fieldInt39489;
+    public int fieldInt39490;
+    public int fieldInt39491;
+    public int fieldInt39492;
+    public int fieldInt39493;
+    public int fieldInt39494;
+    public int fieldInt39495;
+    public int fieldInt39496;
+    public int fieldInt39497;
+    public int fieldInt39498;
+    public int fieldInt39499;
+    public int fieldInt39500;
+    public int fieldInt39501;
+    public int fieldInt39502;
+    public int fieldInt39503;
+    public int fieldInt39504;
+    public int fieldInt39505;
+    public int fieldInt39506;
+    public int fieldInt39507;
+    public int fieldInt39508;
+    public int fieldInt39509;
+    public int fieldInt39510;
+    public int fieldInt39511;
+    public int fieldInt39512;
+    public int fieldInt39513;
+    public int fieldInt39514;
+    public int fieldInt39515;
+    public int fieldInt39516;
+    public int fieldInt39517;
+    public int fieldInt39518;
+    public int fieldInt39519;
+    public int fieldInt39520;
+    public int fieldInt39521;
+    public int fieldInt39522;
+    public int fieldInt39523;
+    public int fieldInt39524;
+    public int fieldInt39525;
+    public int fieldInt39526;
+    public int fieldInt39527;
+    public int fieldInt39528;
+    public int fieldInt39529;
+    public int fieldInt39530;
+    public int fieldInt39531;
+    public int fieldInt39532;
+    public int fieldInt39533;
+    public int fieldInt39534;
+    public int fieldInt39535;
+    public int fieldInt39536;
+    public int fieldInt39537;
+    public int fieldInt39538;
+    public int fieldInt39539;
+    public int fieldInt39540;
+    public int fieldInt39541;
+    public int fieldInt39542;
+    public int fieldInt39543;
+    public int fieldInt39544;
+    public int fieldInt39545;
+    public int fieldInt39546;
+    public int fieldInt39547;
+    public int fieldInt39548;
+    public int fieldInt39549;
+    public int fieldInt39550;
+    public int fieldInt39551;
+    public int fieldInt39552;
+    public int fieldInt39553;
+    public int fieldInt39554;
+    public int fieldInt39555;
+    public int fieldInt39556;
+    public int fieldInt39557;
+    public int fieldInt39558;
+    public int fieldInt39559;
+    public int fieldInt39560;
+    public int fieldInt39561;
+    public int fieldInt39562;
+    public int fieldInt39563;
+    public int fieldInt39564;
+    public int fieldInt39565;
+    public int fieldInt39566;
+    public int fieldInt39567;
+    public int fieldInt39568;
+    public int fieldInt39569;
+    public int fieldInt39570;
+    public int fieldInt39571;
+    public int fieldInt39572;
+    public int fieldInt39573;
+    public int fieldInt39574;
+    public int fieldInt39575;
+    public int fieldInt39576;
+    public int fieldInt39577;
+    public int fieldInt39578;
+    public int fieldInt39579;
+    public int fieldInt39580;
+    public int fieldInt39581;
+    public int fieldInt39582;
+    public int fieldInt39583;
+    public int fieldInt39584;
+    public int fieldInt39585;
+    public int fieldInt39586;
+    public int fieldInt39587;
+    public int fieldInt39588;
+    public int fieldInt39589;
+    public int fieldInt39590;
+    public int fieldInt39591;
+    public int fieldInt39592;
+    public int fieldInt39593;
+    public int fieldInt39594;
+    public int fieldInt39595;
+    public int fieldInt39596;
+    public int fieldInt39597;
+    public int fieldInt39598;
+    public int fieldInt39599;
+    public int fieldInt39600;
+    public int fieldInt39601;
+    public int fieldInt39602;
+    public int fieldInt39603;
+    public int fieldInt39604;
+    public int fieldInt39605;
+    public int fieldInt39606;
+    public int fieldInt39607;
+    public int fieldInt39608;
+    public int fieldInt39609;
+    public int fieldInt39610;
+    public int fieldInt39611;
+    public int fieldInt39612;
+    public int fieldInt39613;
+    public int fieldInt39614;
+    public int fieldInt39615;
+    public int fieldInt39616;
+    public int fieldInt39617;
+    public int fieldInt39618;
+    public int fieldInt39619;
+    public int fieldInt39620;
+    public int fieldInt39621;
+    public int fieldInt39622;
+    public int fieldInt39623;
+    public int fieldInt39624;
+    public int fieldInt39625;
+    public int fieldInt39626;
+    public int fieldInt39627;
+    public int fieldInt39628;
+    public int fieldInt39629;
+    public int fieldInt39630;
+    public int fieldInt39631;
+    public int fieldInt39632;
+    public int fieldInt39633;
+    public int fieldInt39634;
+    public int fieldInt39635;
+    public int fieldInt39636;
+    public int fieldInt39637;
+    public int fieldInt39638;
+    public int fieldInt39639;
+    public int fieldInt39640;
+    public int fieldInt39641;
+    public int fieldInt39642;
+    public int fieldInt39643;
+    public int fieldInt39644;
+    public int fieldInt39645;
+    public int fieldInt39646;
+    public int fieldInt39647;
+    public int fieldInt39648;
+    public int fieldInt39649;
+    public int fieldInt39650;
+    public int fieldInt39651;
+    public int fieldInt39652;
+    public int fieldInt39653;
+    public int fieldInt39654;
+    public int fieldInt39655;
+    public int fieldInt39656;
+    public int fieldInt39657;
+    public int fieldInt39658;
+    public int fieldInt39659;
+    public int fieldInt39660;
+    public int fieldInt39661;
+    public int fieldInt39662;
+    public int fieldInt39663;
+    public int fieldInt39664;
+    public int fieldInt39665;
+    public int fieldInt39666;
+    public int fieldInt39667;
+    public int fieldInt39668;
+    public int fieldInt39669;
+    public int fieldInt39670;
+    public int fieldInt39671;
+    public int fieldInt39672;
+    public int fieldInt39673;
+    public int fieldInt39674;
+    public int fieldInt39675;
+    public int fieldInt39676;
+    public int fieldInt39677;
+    public int fieldInt39678;
+    public int fieldInt39679;
+    public int fieldInt39680;
+    public int fieldInt39681;
+    public int fieldInt39682;
+    public int fieldInt39683;
+    public int fieldInt39684;
+    public int fieldInt39685;
+    public int fieldInt39686;
+    public int fieldInt39687;
+    public int fieldInt39688;
+    public int fieldInt39689;
+    public int fieldInt39690;
+    public int fieldInt39691;
+    public int fieldInt39692;
+    public int fieldInt39693;
+    public int fieldInt39694;
+    public int fieldInt39695;
+    public int fieldInt39696;
+    public int fieldInt39697;
+    public int fieldInt39698;
+    public int fieldInt39699;
+    public int fieldInt39700;
+    public int fieldInt39701;
+    public int fieldInt39702;
+    public int fieldInt39703;
+    public int fieldInt39704;
+    public int fieldInt39705;
+    public int fieldInt39706;
+    public int fieldInt39707;
+    public int fieldInt39708;
+    public int fieldInt39709;
+    public int fieldInt39710;
+    public int fieldInt39711;
+    public int fieldInt39712;
+    public int fieldInt39713;
+    public int fieldInt39714;
+    public int fieldInt39715;
+    public int fieldInt39716;
+    public int fieldInt39717;
+    public int fieldInt39718;
+    public int fieldInt39719;
+    public int fieldInt39720;
+    public int fieldInt39721;
+    public int fieldInt39722;
+    public int fieldInt39723;
+    public int fieldInt39724;
+    public int fieldInt39725;
+    public int fieldInt39726;
+    public int fieldInt39727;
+    public int fieldInt39728;
+    public int fieldInt39729;
+    public int fieldInt39730;
+    public int fieldInt39731;
+    public int fieldInt39732;
+    public int fieldInt39733;
+    public int fieldInt39734;
+    public int fieldInt39735;
+    public int fieldInt39736;
+    public int fieldInt39737;
+    public int fieldInt39738;
+    public int fieldInt39739;
+    public int fieldInt39740;
+    public int fieldInt39741;
+    public int fieldInt39742;
+    public int fieldInt39743;
+    public int fieldInt39744;
+    public int fieldInt39745;
+    public int fieldInt39746;
+    public int fieldInt39747;
+    public int fieldInt39748;
+    public int fieldInt39749;
+    public int fieldInt39750;
+    public int fieldInt39751;
+    public int fieldInt39752;
+    public int fieldInt39753;
+    public int fieldInt39754;
+    public int fieldInt39755;
+    public int fieldInt39756;
+    public int fieldInt39757;
+    public int fieldInt39758;
+    public int fieldInt39759;
+    public int fieldInt39760;
+    public int fieldInt39761;
+    public int fieldInt39762;
+    public int fieldInt39763;
+    public int fieldInt39764;
+    public int fieldInt39765;
+    public int fieldInt39766;
+    public int fieldInt39767;
+    public int fieldInt39768;
+    public int fieldInt39769;
+    public int fieldInt39770;
+    public int fieldInt39771;
+    public int fieldInt39772;
+    public int fieldInt39773;
+    public int fieldInt39774;
+    public int fieldInt39775;
+    public int fieldInt39776;
+    public int fieldInt39777;
+    public int fieldInt39778;
+    public int fieldInt39779;
+    public int fieldInt39780;
+    public int fieldInt39781;
+    public int fieldInt39782;
+    public int fieldInt39783;
+    public int fieldInt39784;
+    public int fieldInt39785;
+    public int fieldInt39786;
+    public int fieldInt39787;
+    public int fieldInt39788;
+    public int fieldInt39789;
+    public int fieldInt39790;
+    public int fieldInt39791;
+    public int fieldInt39792;
+    public int fieldInt39793;
+    public int fieldInt39794;
+    public int fieldInt39795;
+    public int fieldInt39796;
+    public int fieldInt39797;
+    public int fieldInt39798;
+    public int fieldInt39799;
+    public int fieldInt39800;
+    public int fieldInt39801;
+    public int fieldInt39802;
+    public int fieldInt39803;
+    public int fieldInt39804;
+    public int fieldInt39805;
+    public int fieldInt39806;
+    public int fieldInt39807;
+    public int fieldInt39808;
+    public int fieldInt39809;
+    public int fieldInt39810;
+    public int fieldInt39811;
+    public int fieldInt39812;
+    public int fieldInt39813;
+    public int fieldInt39814;
+    public int fieldInt39815;
+    public int fieldInt39816;
+    public int fieldInt39817;
+    public int fieldInt39818;
+    public int fieldInt39819;
+    public int fieldInt39820;
+    public int fieldInt39821;
+    public int fieldInt39822;
+    public int fieldInt39823;
+    public int fieldInt39824;
+    public int fieldInt39825;
+    public int fieldInt39826;
+    public int fieldInt39827;
+    public int fieldInt39828;
+    public int fieldInt39829;
+    public int fieldInt39830;
+    public int fieldInt39831;
+    public int fieldInt39832;
+    public int fieldInt39833;
+    public int fieldInt39834;
+    public int fieldInt39835;
+    public int fieldInt39836;
+    public int fieldInt39837;
+    public int fieldInt39838;
+    public int fieldInt39839;
+    public int fieldInt39840;
+    public int fieldInt39841;
+    public int fieldInt39842;
+    public int fieldInt39843;
+    public int fieldInt39844;
+    public int fieldInt39845;
+    public int fieldInt39846;
+    public int fieldInt39847;
+    public int fieldInt39848;
+    public int fieldInt39849;
+    public int fieldInt39850;
+    public int fieldInt39851;
+    public int fieldInt39852;
+    public int fieldInt39853;
+    public int fieldInt39854;
+    public int fieldInt39855;
+    public int fieldInt39856;
+    public int fieldInt39857;
+    public int fieldInt39858;
+    public int fieldInt39859;
+    public int fieldInt39860;
+    public int fieldInt39861;
+    public int fieldInt39862;
+    public int fieldInt39863;
+    public int fieldInt39864;
+    public int fieldInt39865;
+    public int fieldInt39866;
+    public int fieldInt39867;
+    public int fieldInt39868;
+    public int fieldInt39869;
+    public int fieldInt39870;
+    public int fieldInt39871;
+    public int fieldInt39872;
+    public int fieldInt39873;
+    public int fieldInt39874;
+    public int fieldInt39875;
+    public int fieldInt39876;
+    public int fieldInt39877;
+    public int fieldInt39878;
+    public int fieldInt39879;
+    public int fieldInt39880;
+    public int fieldInt39881;
+    public int fieldInt39882;
+    public int fieldInt39883;
+    public int fieldInt39884;
+    public int fieldInt39885;
+    public int fieldInt39886;
+    public int fieldInt39887;
+    public int fieldInt39888;
+    public int fieldInt39889;
+    public int fieldInt39890;
+    public int fieldInt39891;
+    public int fieldInt39892;
+    public int fieldInt39893;
+    public int fieldInt39894;
+    public int fieldInt39895;
+    public int fieldInt39896;
+    public int fieldInt39897;
+    public int fieldInt39898;
+    public int fieldInt39899;
+    public int fieldInt39900;
+    public int fieldInt39901;
+    public int fieldInt39902;
+    public int fieldInt39903;
+    public int fieldInt39904;
+    public int fieldInt39905;
+    public int fieldInt39906;
+    public int fieldInt39907;
+    public int fieldInt39908;
+    public int fieldInt39909;
+    public int fieldInt39910;
+    public int fieldInt39911;
+    public int fieldInt39912;
+    public int fieldInt39913;
+    public int fieldInt39914;
+    public int fieldInt39915;
+    public int fieldInt39916;
+    public int fieldInt39917;
+    public int fieldInt39918;
+    public int fieldInt39919;
+    public int fieldInt39920;
+    public int fieldInt39921;
+    public int fieldInt39922;
+    public int fieldInt39923;
+    public int fieldInt39924;
+    public int fieldInt39925;
+    public int fieldInt39926;
+    public int fieldInt39927;
+    public int fieldInt39928;
+    public int fieldInt39929;
+    public int fieldInt39930;
+    public int fieldInt39931;
+    public int fieldInt39932;
+    public int fieldInt39933;
+    public int fieldInt39934;
+    public int fieldInt39935;
+    public int fieldInt39936;
+    public int fieldInt39937;
+    public int fieldInt39938;
+    public int fieldInt39939;
+    public int fieldInt39940;
+    public int fieldInt39941;
+    public int fieldInt39942;
+    public int fieldInt39943;
+    public int fieldInt39944;
+    public int fieldInt39945;
+    public int fieldInt39946;
+    public int fieldInt39947;
+    public int fieldInt39948;
+    public int fieldInt39949;
+    public int fieldInt39950;
+    public int fieldInt39951;
+    public int fieldInt39952;
+    public int fieldInt39953;
+    public int fieldInt39954;
+    public int fieldInt39955;
+    public int fieldInt39956;
+    public int fieldInt39957;
+    public int fieldInt39958;
+    public int fieldInt39959;
+    public int fieldInt39960;
+    public int fieldInt39961;
+    public int fieldInt39962;
+    public int fieldInt39963;
+    public int fieldInt39964;
+    public int fieldInt39965;
+    public int fieldInt39966;
+    public int fieldInt39967;
+    public int fieldInt39968;
+    public int fieldInt39969;
+    public int fieldInt39970;
+    public int fieldInt39971;
+    public int fieldInt39972;
+    public int fieldInt39973;
+    public int fieldInt39974;
+    public int fieldInt39975;
+    public int fieldInt39976;
+    public int fieldInt39977;
+    public int fieldInt39978;
+    public int fieldInt39979;
+    public int fieldInt39980;
+    public int fieldInt39981;
+    public int fieldInt39982;
+    public int fieldInt39983;
+    public int fieldInt39984;
+    public int fieldInt39985;
+    public int fieldInt39986;
+    public int fieldInt39987;
+    public int fieldInt39988;
+    public int fieldInt39989;
+    public int fieldInt39990;
+    public int fieldInt39991;
+    public int fieldInt39992;
+    public int fieldInt39993;
+    public int fieldInt39994;
+    public int fieldInt39995;
+    public int fieldInt39996;
+    public int fieldInt39997;
+    public int fieldInt39998;
+    public int fieldInt39999;
+    public int fieldInt40000;
+    public int fieldInt40001;
+    public int fieldInt40002;
+    public int fieldInt40003;
+    public int fieldInt40004;
+    public int fieldInt40005;
+    public int fieldInt40006;
+    public int fieldInt40007;
+    public int fieldInt40008;
+    public int fieldInt40009;
+    public int fieldInt40010;
+    public int fieldInt40011;
+    public int fieldInt40012;
+    public int fieldInt40013;
+    public int fieldInt40014;
+    public int fieldInt40015;
+    public int fieldInt40016;
+    public int fieldInt40017;
+    public int fieldInt40018;
+    public int fieldInt40019;
+    public int fieldInt40020;
+    public int fieldInt40021;
+    public int fieldInt40022;
+    public int fieldInt40023;
+    public int fieldInt40024;
+    public int fieldInt40025;
+    public int fieldInt40026;
+    public int fieldInt40027;
+    public int fieldInt40028;
+    public int fieldInt40029;
+    public int fieldInt40030;
+    public int fieldInt40031;
+    public int fieldInt40032;
+    public int fieldInt40033;
+    public int fieldInt40034;
+    public int fieldInt40035;
+    public int fieldInt40036;
+    public int fieldInt40037;
+    public int fieldInt40038;
+    public int fieldInt40039;
+    public int fieldInt40040;
+    public int fieldInt40041;
+    public int fieldInt40042;
+    public int fieldInt40043;
+    public int fieldInt40044;
+    public int fieldInt40045;
+    public int fieldInt40046;
+    public int fieldInt40047;
+    public int fieldInt40048;
+    public int fieldInt40049;
+    public int fieldInt40050;
+    public int fieldInt40051;
+    public int fieldInt40052;
+    public int fieldInt40053;
+    public int fieldInt40054;
+    public int fieldInt40055;
+    public int fieldInt40056;
+    public int fieldInt40057;
+    public int fieldInt40058;
+    public int fieldInt40059;
+    public int fieldInt40060;
+    public int fieldInt40061;
+    public int fieldInt40062;
+    public int fieldInt40063;
+    public int fieldInt40064;
+    public int fieldInt40065;
+    public int fieldInt40066;
+    public int fieldInt40067;
+    public int fieldInt40068;
+    public int fieldInt40069;
+    public int fieldInt40070;
+    public int fieldInt40071;
+    public int fieldInt40072;
+    public int fieldInt40073;
+    public int fieldInt40074;
+    public int fieldInt40075;
+    public int fieldInt40076;
+    public int fieldInt40077;
+    public int fieldInt40078;
+    public int fieldInt40079;
+    public int fieldInt40080;
+    public int fieldInt40081;
+    public int fieldInt40082;
+    public int fieldInt40083;
+    public int fieldInt40084;
+    public int fieldInt40085;
+    public int fieldInt40086;
+    public int fieldInt40087;
+    public int fieldInt40088;
+    public int fieldInt40089;
+    public int fieldInt40090;
+    public int fieldInt40091;
+    public int fieldInt40092;
+    public int fieldInt40093;
+    public int fieldInt40094;
+    public int fieldInt40095;
+    public int fieldInt40096;
+    public int fieldInt40097;
+    public int fieldInt40098;
+    public int fieldInt40099;
+    public int fieldInt40100;
+    public int fieldInt40101;
+    public int fieldInt40102;
+    public int fieldInt40103;
+    public int fieldInt40104;
+    public int fieldInt40105;
+    public int fieldInt40106;
+    public int fieldInt40107;
+    public int fieldInt40108;
+    public int fieldInt40109;
+    public int fieldInt40110;
+    public int fieldInt40111;
+    public int fieldInt40112;
+    public int fieldInt40113;
+    public int fieldInt40114;
+    public int fieldInt40115;
+    public int fieldInt40116;
+    public int fieldInt40117;
+    public int fieldInt40118;
+    public int fieldInt40119;
+    public int fieldInt40120;
+    public int fieldInt40121;
+    public int fieldInt40122;
+    public int fieldInt40123;
+    public int fieldInt40124;
+    public int fieldInt40125;
+    public int fieldInt40126;
+    public int fieldInt40127;
+    public int fieldInt40128;
+    public int fieldInt40129;
+    public int fieldInt40130;
+    public int fieldInt40131;
+    public int fieldInt40132;
+    public int fieldInt40133;
+    public int fieldInt40134;
+    public int fieldInt40135;
+    public int fieldInt40136;
+    public int fieldInt40137;
+    public int fieldInt40138;
+    public int fieldInt40139;
+    public int fieldInt40140;
+    public int fieldInt40141;
+    public int fieldInt40142;
+    public int fieldInt40143;
+    public int fieldInt40144;
+    public int fieldInt40145;
+    public int fieldInt40146;
+    public int fieldInt40147;
+    public int fieldInt40148;
+    public int fieldInt40149;
+    public int fieldInt40150;
+    public int fieldInt40151;
+    public int fieldInt40152;
+    public int fieldInt40153;
+    public int fieldInt40154;
+    public int fieldInt40155;
+    public int fieldInt40156;
+    public int fieldInt40157;
+    public int fieldInt40158;
+    public int fieldInt40159;
+    public int fieldInt40160;
+    public int fieldInt40161;
+    public int fieldInt40162;
+    public int fieldInt40163;
+    public int fieldInt40164;
+    public int fieldInt40165;
+    public int fieldInt40166;
+    public int fieldInt40167;
+    public int fieldInt40168;
+    public int fieldInt40169;
+    public int fieldInt40170;
+    public int fieldInt40171;
+    public int fieldInt40172;
+    public int fieldInt40173;
+    public int fieldInt40174;
+    public int fieldInt40175;
+    public int fieldInt40176;
+    public int fieldInt40177;
+    public int fieldInt40178;
+    public int fieldInt40179;
+    public int fieldInt40180;
+    public int fieldInt40181;
+    public int fieldInt40182;
+    public int fieldInt40183;
+    public int fieldInt40184;
+    public int fieldInt40185;
+    public int fieldInt40186;
+    public int fieldInt40187;
+    public int fieldInt40188;
+    public int fieldInt40189;
+    public int fieldInt40190;
+    public int fieldInt40191;
+    public int fieldInt40192;
+    public int fieldInt40193;
+    public int fieldInt40194;
+    public int fieldInt40195;
+    public int fieldInt40196;
+    public int fieldInt40197;
+    public int fieldInt40198;
+    public int fieldInt40199;
+    public int fieldInt40200;
+    public int fieldInt40201;
+    public int fieldInt40202;
+    public int fieldInt40203;
+    public int fieldInt40204;
+    public int fieldInt40205;
+    public int fieldInt40206;
+    public int fieldInt40207;
+    public int fieldInt40208;
+    public int fieldInt40209;
+    public int fieldInt40210;
+    public int fieldInt40211;
+    public int fieldInt40212;
+    public int fieldInt40213;
+    public int fieldInt40214;
+    public int fieldInt40215;
+    public int fieldInt40216;
+    public int fieldInt40217;
+    public int fieldInt40218;
+    public int fieldInt40219;
+    public int fieldInt40220;
+    public int fieldInt40221;
+    public int fieldInt40222;
+    public int fieldInt40223;
+    public int fieldInt40224;
+    public int fieldInt40225;
+    public int fieldInt40226;
+    public int fieldInt40227;
+    public int fieldInt40228;
+    public int fieldInt40229;
+    public int fieldInt40230;
+    public int fieldInt40231;
+    public int fieldInt40232;
+    public int fieldInt40233;
+    public int fieldInt40234;
+    public int fieldInt40235;
+    public int fieldInt40236;
+    public int fieldInt40237;
+    public int fieldInt40238;
+    public int fieldInt40239;
+    public int fieldInt40240;
+    public int fieldInt40241;
+    public int fieldInt40242;
+    public int fieldInt40243;
+    public int fieldInt40244;
+    public int fieldInt40245;
+    public int fieldInt40246;
+    public int fieldInt40247;
+    public int fieldInt40248;
+    public int fieldInt40249;
+    public int fieldInt40250;
+    public int fieldInt40251;
+    public int fieldInt40252;
+    public int fieldInt40253;
+    public int fieldInt40254;
+    public int fieldInt40255;
+    public int fieldInt40256;
+    public int fieldInt40257;
+    public int fieldInt40258;
+    public int fieldInt40259;
+    public int fieldInt40260;
+    public int fieldInt40261;
+    public int fieldInt40262;
+    public int fieldInt40263;
+    public int fieldInt40264;
+    public int fieldInt40265;
+    public int fieldInt40266;
+    public int fieldInt40267;
+    public int fieldInt40268;
+    public int fieldInt40269;
+    public int fieldInt40270;
+    public int fieldInt40271;
+    public int fieldInt40272;
+    public int fieldInt40273;
+    public int fieldInt40274;
+    public int fieldInt40275;
+    public int fieldInt40276;
+    public int fieldInt40277;
+    public int fieldInt40278;
+    public int fieldInt40279;
+    public int fieldInt40280;
+    public int fieldInt40281;
+    public int fieldInt40282;
+    public int fieldInt40283;
+    public int fieldInt40284;
+    public int fieldInt40285;
+    public int fieldInt40286;
+    public int fieldInt40287;
+    public int fieldInt40288;
+    public int fieldInt40289;
+    public int fieldInt40290;
+    public int fieldInt40291;
+    public int fieldInt40292;
+    public int fieldInt40293;
+    public int fieldInt40294;
+    public int fieldInt40295;
+    public int fieldInt40296;
+    public int fieldInt40297;
+    public int fieldInt40298;
+    public int fieldInt40299;
+    public int fieldInt40300;
+    public int fieldInt40301;
+    public int fieldInt40302;
+    public int fieldInt40303;
+    public int fieldInt40304;
+    public int fieldInt40305;
+    public int fieldInt40306;
+    public int fieldInt40307;
+    public int fieldInt40308;
+    public int fieldInt40309;
+    public int fieldInt40310;
+    public int fieldInt40311;
+    public int fieldInt40312;
+    public int fieldInt40313;
+    public int fieldInt40314;
+    public int fieldInt40315;
+    public int fieldInt40316;
+    public int fieldInt40317;
+    public int fieldInt40318;
+    public int fieldInt40319;
+    public int fieldInt40320;
+    public int fieldInt40321;
+    public int fieldInt40322;
+    public int fieldInt40323;
+    public int fieldInt40324;
+    public int fieldInt40325;
+    public int fieldInt40326;
+    public int fieldInt40327;
+    public int fieldInt40328;
+    public int fieldInt40329;
+    public int fieldInt40330;
+    public int fieldInt40331;
+    public int fieldInt40332;
+    public int fieldInt40333;
+    public int fieldInt40334;
+    public int fieldInt40335;
+    public int fieldInt40336;
+    public int fieldInt40337;
+    public int fieldInt40338;
+    public int fieldInt40339;
+    public int fieldInt40340;
+    public int fieldInt40341;
+    public int fieldInt40342;
+    public int fieldInt40343;
+    public int fieldInt40344;
+    public int fieldInt40345;
+    public int fieldInt40346;
+    public int fieldInt40347;
+    public int fieldInt40348;
+    public int fieldInt40349;
+    public int fieldInt40350;
+    public int fieldInt40351;
+    public int fieldInt40352;
+    public int fieldInt40353;
+    public int fieldInt40354;
+    public int fieldInt40355;
+    public int fieldInt40356;
+    public int fieldInt40357;
+    public int fieldInt40358;
+    public int fieldInt40359;
+    public int fieldInt40360;
+    public int fieldInt40361;
+    public int fieldInt40362;
+    public int fieldInt40363;
+    public int fieldInt40364;
+    public int fieldInt40365;
+    public int fieldInt40366;
+    public int fieldInt40367;
+    public int fieldInt40368;
+    public int fieldInt40369;
+    public int fieldInt40370;
+    public int fieldInt40371;
+    public int fieldInt40372;
+    public int fieldInt40373;
+    public int fieldInt40374;
+    public int fieldInt40375;
+    public int fieldInt40376;
+    public int fieldInt40377;
+    public int fieldInt40378;
+    public int fieldInt40379;
+    public int fieldInt40380;
+    public int fieldInt40381;
+    public int fieldInt40382;
+    public int fieldInt40383;
+    public int fieldInt40384;
+    public int fieldInt40385;
+    public int fieldInt40386;
+    public int fieldInt40387;
+    public int fieldInt40388;
+    public int fieldInt40389;
+    public int fieldInt40390;
+    public int fieldInt40391;
+    public int fieldInt40392;
+    public int fieldInt40393;
+    public int fieldInt40394;
+    public int fieldInt40395;
+    public int fieldInt40396;
+    public int fieldInt40397;
+    public int fieldInt40398;
+    public int fieldInt40399;
+    public int fieldInt40400;
+    public int fieldInt40401;
+    public int fieldInt40402;
+    public int fieldInt40403;
+    public int fieldInt40404;
+    public int fieldInt40405;
+    public int fieldInt40406;
+    public int fieldInt40407;
+    public int fieldInt40408;
+    public int fieldInt40409;
+    public int fieldInt40410;
+    public int fieldInt40411;
+    public int fieldInt40412;
+    public int fieldInt40413;
+    public int fieldInt40414;
+    public int fieldInt40415;
+    public int fieldInt40416;
+    public int fieldInt40417;
+    public int fieldInt40418;
+    public int fieldInt40419;
+    public int fieldInt40420;
+    public int fieldInt40421;
+    public int fieldInt40422;
+    public int fieldInt40423;
+    public int fieldInt40424;
+    public int fieldInt40425;
+    public int fieldInt40426;
+    public int fieldInt40427;
+    public int fieldInt40428;
+    public int fieldInt40429;
+    public int fieldInt40430;
+    public int fieldInt40431;
+    public int fieldInt40432;
+    public int fieldInt40433;
+    public int fieldInt40434;
+    public int fieldInt40435;
+    public int fieldInt40436;
+    public int fieldInt40437;
+    public int fieldInt40438;
+    public int fieldInt40439;
+    public int fieldInt40440;
+    public int fieldInt40441;
+    public int fieldInt40442;
+    public int fieldInt40443;
+    public int fieldInt40444;
+    public int fieldInt40445;
+    public int fieldInt40446;
+    public int fieldInt40447;
+    public int fieldInt40448;
+    public int fieldInt40449;
+    public int fieldInt40450;
+    public int fieldInt40451;
+    public int fieldInt40452;
+    public int fieldInt40453;
+    public int fieldInt40454;
+    public int fieldInt40455;
+    public int fieldInt40456;
+    public int fieldInt40457;
+    public int fieldInt40458;
+    public int fieldInt40459;
+    public int fieldInt40460;
+    public int fieldInt40461;
+    public int fieldInt40462;
+    public int fieldInt40463;
+    public int fieldInt40464;
+    public int fieldInt40465;
+    public int fieldInt40466;
+    public int fieldInt40467;
+    public int fieldInt40468;
+    public int fieldInt40469;
+    public int fieldInt40470;
+    public int fieldInt40471;
+    public int fieldInt40472;
+    public int fieldInt40473;
+    public int fieldInt40474;
+    public int fieldInt40475;
+    public int fieldInt40476;
+    public int fieldInt40477;
+    public int fieldInt40478;
+    public int fieldInt40479;
+    public int fieldInt40480;
+    public int fieldInt40481;
+    public int fieldInt40482;
+    public int fieldInt40483;
+    public int fieldInt40484;
+    public int fieldInt40485;
+    public int fieldInt40486;
+    public int fieldInt40487;
+    public int fieldInt40488;
+    public int fieldInt40489;
+    public int fieldInt40490;
+    public int fieldInt40491;
+    public int fieldInt40492;
+    public int fieldInt40493;
+    public int fieldInt40494;
+    public int fieldInt40495;
+    public int fieldInt40496;
+    public int fieldInt40497;
+    public int fieldInt40498;
+    public int fieldInt40499;
+    public int fieldInt40500;
+    public int fieldInt40501;
+    public int fieldInt40502;
+    public int fieldInt40503;
+    public int fieldInt40504;
+    public int fieldInt40505;
+    public int fieldInt40506;
+    public int fieldInt40507;
+    public int fieldInt40508;
+    public int fieldInt40509;
+    public int fieldInt40510;
+    public int fieldInt40511;
+    public int fieldInt40512;
+    public int fieldInt40513;
+    public int fieldInt40514;
+    public int fieldInt40515;
+    public int fieldInt40516;
+    public int fieldInt40517;
+    public int fieldInt40518;
+    public int fieldInt40519;
+    public int fieldInt40520;
+    public int fieldInt40521;
+    public int fieldInt40522;
+    public int fieldInt40523;
+    public int fieldInt40524;
+    public int fieldInt40525;
+    public int fieldInt40526;
+    public int fieldInt40527;
+    public int fieldInt40528;
+    public int fieldInt40529;
+    public int fieldInt40530;
+    public int fieldInt40531;
+    public int fieldInt40532;
+    public int fieldInt40533;
+    public int fieldInt40534;
+    public int fieldInt40535;
+    public int fieldInt40536;
+    public int fieldInt40537;
+    public int fieldInt40538;
+    public int fieldInt40539;
+    public int fieldInt40540;
+    public int fieldInt40541;
+    public int fieldInt40542;
+    public int fieldInt40543;
+    public int fieldInt40544;
+    public int fieldInt40545;
+    public int fieldInt40546;
+    public int fieldInt40547;
+    public int fieldInt40548;
+    public int fieldInt40549;
+    public int fieldInt40550;
+    public int fieldInt40551;
+    public int fieldInt40552;
+    public int fieldInt40553;
+    public int fieldInt40554;
+    public int fieldInt40555;
+    public int fieldInt40556;
+    public int fieldInt40557;
+    public int fieldInt40558;
+    public int fieldInt40559;
+    public int fieldInt40560;
+    public int fieldInt40561;
+    public int fieldInt40562;
+    public int fieldInt40563;
+    public int fieldInt40564;
+    public int fieldInt40565;
+    public int fieldInt40566;
+    public int fieldInt40567;
+    public int fieldInt40568;
+    public int fieldInt40569;
+    public int fieldInt40570;
+    public int fieldInt40571;
+    public int fieldInt40572;
+    public int fieldInt40573;
+    public int fieldInt40574;
+    public int fieldInt40575;
+    public int fieldInt40576;
+    public int fieldInt40577;
+    public int fieldInt40578;
+    public int fieldInt40579;
+    public int fieldInt40580;
+    public int fieldInt40581;
+    public int fieldInt40582;
+    public int fieldInt40583;
+    public int fieldInt40584;
+    public int fieldInt40585;
+    public int fieldInt40586;
+    public int fieldInt40587;
+    public int fieldInt40588;
+    public int fieldInt40589;
+    public int fieldInt40590;
+    public int fieldInt40591;
+    public int fieldInt40592;
+    public int fieldInt40593;
+    public int fieldInt40594;
+    public int fieldInt40595;
+    public int fieldInt40596;
+    public int fieldInt40597;
+    public int fieldInt40598;
+    public int fieldInt40599;
+    public int fieldInt40600;
+    public int fieldInt40601;
+    public int fieldInt40602;
+    public int fieldInt40603;
+    public int fieldInt40604;
+    public int fieldInt40605;
+    public int fieldInt40606;
+    public int fieldInt40607;
+    public int fieldInt40608;
+    public int fieldInt40609;
+    public int fieldInt40610;
+    public int fieldInt40611;
+    public int fieldInt40612;
+    public int fieldInt40613;
+    public int fieldInt40614;
+    public int fieldInt40615;
+    public int fieldInt40616;
+    public int fieldInt40617;
+    public int fieldInt40618;
+    public int fieldInt40619;
+    public int fieldInt40620;
+    public int fieldInt40621;
+    public int fieldInt40622;
+    public int fieldInt40623;
+    public int fieldInt40624;
+    public int fieldInt40625;
+    public int fieldInt40626;
+    public int fieldInt40627;
+    public int fieldInt40628;
+    public int fieldInt40629;
+    public int fieldInt40630;
+    public int fieldInt40631;
+    public int fieldInt40632;
+    public int fieldInt40633;
+    public int fieldInt40634;
+    public int fieldInt40635;
+    public int fieldInt40636;
+    public int fieldInt40637;
+    public int fieldInt40638;
+    public int fieldInt40639;
+    public int fieldInt40640;
+    public int fieldInt40641;
+    public int fieldInt40642;
+    public int fieldInt40643;
+    public int fieldInt40644;
+    public int fieldInt40645;
+    public int fieldInt40646;
+    public int fieldInt40647;
+    public int fieldInt40648;
+    public int fieldInt40649;
+    public int fieldInt40650;
+    public int fieldInt40651;
+    public int fieldInt40652;
+    public int fieldInt40653;
+    public int fieldInt40654;
+    public int fieldInt40655;
+    public int fieldInt40656;
+    public int fieldInt40657;
+    public int fieldInt40658;
+    public int fieldInt40659;
+    public int fieldInt40660;
+    public int fieldInt40661;
+    public int fieldInt40662;
+    public int fieldInt40663;
+    public int fieldInt40664;
+    public int fieldInt40665;
+    public int fieldInt40666;
+    public int fieldInt40667;
+    public int fieldInt40668;
+    public int fieldInt40669;
+    public int fieldInt40670;
+    public int fieldInt40671;
+    public int fieldInt40672;
+    public int fieldInt40673;
+    public int fieldInt40674;
+    public int fieldInt40675;
+    public int fieldInt40676;
+    public int fieldInt40677;
+    public int fieldInt40678;
+    public int fieldInt40679;
+    public int fieldInt40680;
+    public int fieldInt40681;
+    public int fieldInt40682;
+    public int fieldInt40683;
+    public int fieldInt40684;
+    public int fieldInt40685;
+    public int fieldInt40686;
+    public int fieldInt40687;
+    public int fieldInt40688;
+    public int fieldInt40689;
+    public int fieldInt40690;
+    public int fieldInt40691;
+    public int fieldInt40692;
+    public int fieldInt40693;
+    public int fieldInt40694;
+    public int fieldInt40695;
+    public int fieldInt40696;
+    public int fieldInt40697;
+    public int fieldInt40698;
+    public int fieldInt40699;
+    public int fieldInt40700;
+    public int fieldInt40701;
+    public int fieldInt40702;
+    public int fieldInt40703;
+    public int fieldInt40704;
+    public int fieldInt40705;
+    public int fieldInt40706;
+    public int fieldInt40707;
+    public int fieldInt40708;
+    public int fieldInt40709;
+    public int fieldInt40710;
+    public int fieldInt40711;
+    public int fieldInt40712;
+    public int fieldInt40713;
+    public int fieldInt40714;
+    public int fieldInt40715;
+    public int fieldInt40716;
+    public int fieldInt40717;
+    public int fieldInt40718;
+    public int fieldInt40719;
+    public int fieldInt40720;
+    public int fieldInt40721;
+    public int fieldInt40722;
+    public int fieldInt40723;
+    public int fieldInt40724;
+    public int fieldInt40725;
+    public int fieldInt40726;
+    public int fieldInt40727;
+    public int fieldInt40728;
+    public int fieldInt40729;
+    public int fieldInt40730;
+    public int fieldInt40731;
+    public int fieldInt40732;
+    public int fieldInt40733;
+    public int fieldInt40734;
+    public int fieldInt40735;
+    public int fieldInt40736;
+    public int fieldInt40737;
+    public int fieldInt40738;
+    public int fieldInt40739;
+    public int fieldInt40740;
+    public int fieldInt40741;
+    public int fieldInt40742;
+    public int fieldInt40743;
+    public int fieldInt40744;
+    public int fieldInt40745;
+    public int fieldInt40746;
+    public int fieldInt40747;
+    public int fieldInt40748;
+    public int fieldInt40749;
+    public int fieldInt40750;
+    public int fieldInt40751;
+    public int fieldInt40752;
+    public int fieldInt40753;
+    public int fieldInt40754;
+    public int fieldInt40755;
+    public int fieldInt40756;
+    public int fieldInt40757;
+    public int fieldInt40758;
+    public int fieldInt40759;
+    public int fieldInt40760;
+    public int fieldInt40761;
+    public int fieldInt40762;
+    public int fieldInt40763;
+    public int fieldInt40764;
+    public int fieldInt40765;
+    public int fieldInt40766;
+    public int fieldInt40767;
+    public int fieldInt40768;
+    public int fieldInt40769;
+    public int fieldInt40770;
+    public int fieldInt40771;
+    public int fieldInt40772;
+    public int fieldInt40773;
+    public int fieldInt40774;
+    public int fieldInt40775;
+    public int fieldInt40776;
+    public int fieldInt40777;
+    public int fieldInt40778;
+    public int fieldInt40779;
+    public int fieldInt40780;
+    public int fieldInt40781;
+    public int fieldInt40782;
+    public int fieldInt40783;
+    public int fieldInt40784;
+    public int fieldInt40785;
+    public int fieldInt40786;
+    public int fieldInt40787;
+    public int fieldInt40788;
+    public int fieldInt40789;
+    public int fieldInt40790;
+    public int fieldInt40791;
+    public int fieldInt40792;
+    public int fieldInt40793;
+    public int fieldInt40794;
+    public int fieldInt40795;
+    public int fieldInt40796;
+    public int fieldInt40797;
+    public int fieldInt40798;
+    public int fieldInt40799;
+    public int fieldInt40800;
+    public int fieldInt40801;
+    public int fieldInt40802;
+    public int fieldInt40803;
+    public int fieldInt40804;
+    public int fieldInt40805;
+    public int fieldInt40806;
+    public int fieldInt40807;
+    public int fieldInt40808;
+    public int fieldInt40809;
+    public int fieldInt40810;
+    public int fieldInt40811;
+    public int fieldInt40812;
+    public int fieldInt40813;
+    public int fieldInt40814;
+    public int fieldInt40815;
+    public int fieldInt40816;
+    public int fieldInt40817;
+    public int fieldInt40818;
+    public int fieldInt40819;
+    public int fieldInt40820;
+    public int fieldInt40821;
+    public int fieldInt40822;
+    public int fieldInt40823;
+    public int fieldInt40824;
+    public int fieldInt40825;
+    public int fieldInt40826;
+    public int fieldInt40827;
+    public int fieldInt40828;
+    public int fieldInt40829;
+    public int fieldInt40830;
+    public int fieldInt40831;
+    public int fieldInt40832;
+    public int fieldInt40833;
+    public int fieldInt40834;
+    public int fieldInt40835;
+    public int fieldInt40836;
+    public int fieldInt40837;
+    public int fieldInt40838;
+    public int fieldInt40839;
+    public int fieldInt40840;
+    public int fieldInt40841;
+    public int fieldInt40842;
+    public int fieldInt40843;
+    public int fieldInt40844;
+    public int fieldInt40845;
+    public int fieldInt40846;
+    public int fieldInt40847;
+    public int fieldInt40848;
+    public int fieldInt40849;
+    public int fieldInt40850;
+    public int fieldInt40851;
+    public int fieldInt40852;
+    public int fieldInt40853;
+    public int fieldInt40854;
+    public int fieldInt40855;
+    public int fieldInt40856;
+    public int fieldInt40857;
+    public int fieldInt40858;
+    public int fieldInt40859;
+    public int fieldInt40860;
+    public int fieldInt40861;
+    public int fieldInt40862;
+    public int fieldInt40863;
+    public int fieldInt40864;
+    public int fieldInt40865;
+    public int fieldInt40866;
+    public int fieldInt40867;
+    public int fieldInt40868;
+    public int fieldInt40869;
+    public int fieldInt40870;
+    public int fieldInt40871;
+    public int fieldInt40872;
+    public int fieldInt40873;
+    public int fieldInt40874;
+    public int fieldInt40875;
+    public int fieldInt40876;
+    public int fieldInt40877;
+    public int fieldInt40878;
+    public int fieldInt40879;
+    public int fieldInt40880;
+    public int fieldInt40881;
+    public int fieldInt40882;
+    public int fieldInt40883;
+    public int fieldInt40884;
+    public int fieldInt40885;
+    public int fieldInt40886;
+    public int fieldInt40887;
+    public int fieldInt40888;
+    public int fieldInt40889;
+    public int fieldInt40890;
+    public int fieldInt40891;
+    public int fieldInt40892;
+    public int fieldInt40893;
+    public int fieldInt40894;
+    public int fieldInt40895;
+    public int fieldInt40896;
+    public int fieldInt40897;
+    public int fieldInt40898;
+    public int fieldInt40899;
+    public int fieldInt40900;
+    public int fieldInt40901;
+    public int fieldInt40902;
+    public int fieldInt40903;
+    public int fieldInt40904;
+    public int fieldInt40905;
+    public int fieldInt40906;
+    public int fieldInt40907;
+    public int fieldInt40908;
+    public int fieldInt40909;
+    public int fieldInt40910;
+    public int fieldInt40911;
+    public int fieldInt40912;
+    public int fieldInt40913;
+    public int fieldInt40914;
+    public int fieldInt40915;
+    public int fieldInt40916;
+    public int fieldInt40917;
+    public int fieldInt40918;
+    public int fieldInt40919;
+    public int fieldInt40920;
+    public int fieldInt40921;
+    public int fieldInt40922;
+    public int fieldInt40923;
+    public int fieldInt40924;
+    public int fieldInt40925;
+    public int fieldInt40926;
+    public int fieldInt40927;
+    public int fieldInt40928;
+    public int fieldInt40929;
+    public int fieldInt40930;
+    public int fieldInt40931;
+    public int fieldInt40932;
+    public int fieldInt40933;
+    public int fieldInt40934;
+    public int fieldInt40935;
+    public int fieldInt40936;
+    public int fieldInt40937;
+    public int fieldInt40938;
+    public int fieldInt40939;
+    public int fieldInt40940;
+    public int fieldInt40941;
+    public int fieldInt40942;
+    public int fieldInt40943;
+    public int fieldInt40944;
+    public int fieldInt40945;
+    public int fieldInt40946;
+    public int fieldInt40947;
+    public int fieldInt40948;
+    public int fieldInt40949;
+    public int fieldInt40950;
+    public int fieldInt40951;
+    public int fieldInt40952;
+    public int fieldInt40953;
+    public int fieldInt40954;
+    public int fieldInt40955;
+    public int fieldInt40956;
+    public int fieldInt40957;
+    public int fieldInt40958;
+    public int fieldInt40959;
+    public int fieldInt40960;
+    public int fieldInt40961;
+    public int fieldInt40962;
+    public int fieldInt40963;
+    public int fieldInt40964;
+    public int fieldInt40965;
+    public int fieldInt40966;
+    public int fieldInt40967;
+    public int fieldInt40968;
+    public int fieldInt40969;
+    public int fieldInt40970;
+    public int fieldInt40971;
+    public int fieldInt40972;
+    public int fieldInt40973;
+    public int fieldInt40974;
+    public int fieldInt40975;
+    public int fieldInt40976;
+    public int fieldInt40977;
+    public int fieldInt40978;
+    public int fieldInt40979;
+    public int fieldInt40980;
+    public int fieldInt40981;
+    public int fieldInt40982;
+    public int fieldInt40983;
+    public int fieldInt40984;
+    public int fieldInt40985;
+    public int fieldInt40986;
+    public int fieldInt40987;
+    public int fieldInt40988;
+    public int fieldInt40989;
+    public int fieldInt40990;
+    public int fieldInt40991;
+    public int fieldInt40992;
+    public int fieldInt40993;
+    public int fieldInt40994;
+    public int fieldInt40995;
+    public int fieldInt40996;
+    public int fieldInt40997;
+    public int fieldInt40998;
+    public int fieldInt40999;
+    public int fieldInt41000;
+    public int fieldInt41001;
+    public int fieldInt41002;
+    public int fieldInt41003;
+    public int fieldInt41004;
+    public int fieldInt41005;
+    public int fieldInt41006;
+    public int fieldInt41007;
+    public int fieldInt41008;
+    public int fieldInt41009;
+    public int fieldInt41010;
+    public int fieldInt41011;
+    public int fieldInt41012;
+    public int fieldInt41013;
+    public int fieldInt41014;
+    public int fieldInt41015;
+    public int fieldInt41016;
+    public int fieldInt41017;
+    public int fieldInt41018;
+    public int fieldInt41019;
+    public int fieldInt41020;
+    public int fieldInt41021;
+    public int fieldInt41022;
+    public int fieldInt41023;
+    public int fieldInt41024;
+    public int fieldInt41025;
+    public int fieldInt41026;
+    public int fieldInt41027;
+    public int fieldInt41028;
+    public int fieldInt41029;
+    public int fieldInt41030;
+    public int fieldInt41031;
+    public int fieldInt41032;
+    public int fieldInt41033;
+    public int fieldInt41034;
+    public int fieldInt41035;
+    public int fieldInt41036;
+    public int fieldInt41037;
+    public int fieldInt41038;
+    public int fieldInt41039;
+    public int fieldInt41040;
+    public int fieldInt41041;
+    public int fieldInt41042;
+    public int fieldInt41043;
+    public int fieldInt41044;
+    public int fieldInt41045;
+    public int fieldInt41046;
+    public int fieldInt41047;
+    public int fieldInt41048;
+    public int fieldInt41049;
+    public int fieldInt41050;
+    public int fieldInt41051;
+    public int fieldInt41052;
+    public int fieldInt41053;
+    public int fieldInt41054;
+    public int fieldInt41055;
+    public int fieldInt41056;
+    public int fieldInt41057;
+    public int fieldInt41058;
+    public int fieldInt41059;
+    public int fieldInt41060;
+    public int fieldInt41061;
+    public int fieldInt41062;
+    public int fieldInt41063;
+    public int fieldInt41064;
+    public int fieldInt41065;
+    public int fieldInt41066;
+    public int fieldInt41067;
+    public int fieldInt41068;
+    public int fieldInt41069;
+    public int fieldInt41070;
+    public int fieldInt41071;
+    public int fieldInt41072;
+    public int fieldInt41073;
+    public int fieldInt41074;
+    public int fieldInt41075;
+    public int fieldInt41076;
+    public int fieldInt41077;
+    public int fieldInt41078;
+    public int fieldInt41079;
+    public int fieldInt41080;
+    public int fieldInt41081;
+    public int fieldInt41082;
+    public int fieldInt41083;
+    public int fieldInt41084;
+    public int fieldInt41085;
+    public int fieldInt41086;
+    public int fieldInt41087;
+    public int fieldInt41088;
+    public int fieldInt41089;
+    public int fieldInt41090;
+    public int fieldInt41091;
+    public int fieldInt41092;
+    public int fieldInt41093;
+    public int fieldInt41094;
+    public int fieldInt41095;
+    public int fieldInt41096;
+    public int fieldInt41097;
+    public int fieldInt41098;
+    public int fieldInt41099;
+    public int fieldInt41100;
+    public int fieldInt41101;
+    public int fieldInt41102;
+    public int fieldInt41103;
+    public int fieldInt41104;
+    public int fieldInt41105;
+    public int fieldInt41106;
+    public int fieldInt41107;
+    public int fieldInt41108;
+    public int fieldInt41109;
+    public int fieldInt41110;
+    public int fieldInt41111;
+    public int fieldInt41112;
+    public int fieldInt41113;
+    public int fieldInt41114;
+    public int fieldInt41115;
+    public int fieldInt41116;
+    public int fieldInt41117;
+    public int fieldInt41118;
+    public int fieldInt41119;
+    public int fieldInt41120;
+    public int fieldInt41121;
+    public int fieldInt41122;
+    public int fieldInt41123;
+    public int fieldInt41124;
+    public int fieldInt41125;
+    public int fieldInt41126;
+    public int fieldInt41127;
+    public int fieldInt41128;
+    public int fieldInt41129;
+    public int fieldInt41130;
+    public int fieldInt41131;
+    public int fieldInt41132;
+    public int fieldInt41133;
+    public int fieldInt41134;
+    public int fieldInt41135;
+    public int fieldInt41136;
+    public int fieldInt41137;
+    public int fieldInt41138;
+    public int fieldInt41139;
+    public int fieldInt41140;
+    public int fieldInt41141;
+    public int fieldInt41142;
+    public int fieldInt41143;
+    public int fieldInt41144;
+    public int fieldInt41145;
+    public int fieldInt41146;
+    public int fieldInt41147;
+    public int fieldInt41148;
+    public int fieldInt41149;
+    public int fieldInt41150;
+    public int fieldInt41151;
+    public int fieldInt41152;
+    public int fieldInt41153;
+    public int fieldInt41154;
+    public int fieldInt41155;
+    public int fieldInt41156;
+    public int fieldInt41157;
+    public int fieldInt41158;
+    public int fieldInt41159;
+    public int fieldInt41160;
+    public int fieldInt41161;
+    public int fieldInt41162;
+    public int fieldInt41163;
+    public int fieldInt41164;
+    public int fieldInt41165;
+    public int fieldInt41166;
+    public int fieldInt41167;
+    public int fieldInt41168;
+    public int fieldInt41169;
+    public int fieldInt41170;
+    public int fieldInt41171;
+    public int fieldInt41172;
+    public int fieldInt41173;
+    public int fieldInt41174;
+    public int fieldInt41175;
+    public int fieldInt41176;
+    public int fieldInt41177;
+    public int fieldInt41178;
+    public int fieldInt41179;
+    public int fieldInt41180;
+    public int fieldInt41181;
+    public int fieldInt41182;
+    public int fieldInt41183;
+    public int fieldInt41184;
+    public int fieldInt41185;
+    public int fieldInt41186;
+    public int fieldInt41187;
+    public int fieldInt41188;
+    public int fieldInt41189;
+    public int fieldInt41190;
+    public int fieldInt41191;
+    public int fieldInt41192;
+    public int fieldInt41193;
+    public int fieldInt41194;
+    public int fieldInt41195;
+    public int fieldInt41196;
+    public int fieldInt41197;
+    public int fieldInt41198;
+    public int fieldInt41199;
+    public int fieldInt41200;
+    public int fieldInt41201;
+    public int fieldInt41202;
+    public int fieldInt41203;
+    public int fieldInt41204;
+    public int fieldInt41205;
+    public int fieldInt41206;
+    public int fieldInt41207;
+    public int fieldInt41208;
+    public int fieldInt41209;
+    public int fieldInt41210;
+    public int fieldInt41211;
+    public int fieldInt41212;
+    public int fieldInt41213;
+    public int fieldInt41214;
+    public int fieldInt41215;
+    public int fieldInt41216;
+    public int fieldInt41217;
+    public int fieldInt41218;
+    public int fieldInt41219;
+    public int fieldInt41220;
+    public int fieldInt41221;
+    public int fieldInt41222;
+    public int fieldInt41223;
+    public int fieldInt41224;
+    public int fieldInt41225;
+    public int fieldInt41226;
+    public int fieldInt41227;
+    public int fieldInt41228;
+    public int fieldInt41229;
+    public int fieldInt41230;
+    public int fieldInt41231;
+    public int fieldInt41232;
+    public int fieldInt41233;
+    public int fieldInt41234;
+    public int fieldInt41235;
+    public int fieldInt41236;
+    public int fieldInt41237;
+    public int fieldInt41238;
+    public int fieldInt41239;
+    public int fieldInt41240;
+    public int fieldInt41241;
+    public int fieldInt41242;
+    public int fieldInt41243;
+    public int fieldInt41244;
+    public int fieldInt41245;
+    public int fieldInt41246;
+    public int fieldInt41247;
+    public int fieldInt41248;
+    public int fieldInt41249;
+    public int fieldInt41250;
+    public int fieldInt41251;
+    public int fieldInt41252;
+    public int fieldInt41253;
+    public int fieldInt41254;
+    public int fieldInt41255;
+    public int fieldInt41256;
+    public int fieldInt41257;
+    public int fieldInt41258;
+    public int fieldInt41259;
+    public int fieldInt41260;
+    public int fieldInt41261;
+    public int fieldInt41262;
+    public int fieldInt41263;
+    public int fieldInt41264;
+    public int fieldInt41265;
+    public int fieldInt41266;
+    public int fieldInt41267;
+    public int fieldInt41268;
+    public int fieldInt41269;
+    public int fieldInt41270;
+    public int fieldInt41271;
+    public int fieldInt41272;
+    public int fieldInt41273;
+    public int fieldInt41274;
+    public int fieldInt41275;
+    public int fieldInt41276;
+    public int fieldInt41277;
+    public int fieldInt41278;
+    public int fieldInt41279;
+    public int fieldInt41280;
+    public int fieldInt41281;
+    public int fieldInt41282;
+    public int fieldInt41283;
+    public int fieldInt41284;
+    public int fieldInt41285;
+    public int fieldInt41286;
+    public int fieldInt41287;
+    public int fieldInt41288;
+    public int fieldInt41289;
+    public int fieldInt41290;
+    public int fieldInt41291;
+    public int fieldInt41292;
+    public int fieldInt41293;
+    public int fieldInt41294;
+    public int fieldInt41295;
+    public int fieldInt41296;
+    public int fieldInt41297;
+    public int fieldInt41298;
+    public int fieldInt41299;
+    public int fieldInt41300;
+    public int fieldInt41301;
+    public int fieldInt41302;
+    public int fieldInt41303;
+    public int fieldInt41304;
+    public int fieldInt41305;
+    public int fieldInt41306;
+    public int fieldInt41307;
+    public int fieldInt41308;
+    public int fieldInt41309;
+    public int fieldInt41310;
+    public int fieldInt41311;
+    public int fieldInt41312;
+    public int fieldInt41313;
+    public int fieldInt41314;
+    public int fieldInt41315;
+    public int fieldInt41316;
+    public int fieldInt41317;
+    public int fieldInt41318;
+    public int fieldInt41319;
+    public int fieldInt41320;
+    public int fieldInt41321;
+    public int fieldInt41322;
+    public int fieldInt41323;
+    public int fieldInt41324;
+    public int fieldInt41325;
+    public int fieldInt41326;
+    public int fieldInt41327;
+    public int fieldInt41328;
+    public int fieldInt41329;
+    public int fieldInt41330;
+    public int fieldInt41331;
+    public int fieldInt41332;
+    public int fieldInt41333;
+    public int fieldInt41334;
+    public int fieldInt41335;
+    public int fieldInt41336;
+    public int fieldInt41337;
+    public int fieldInt41338;
+    public int fieldInt41339;
+    public int fieldInt41340;
+    public int fieldInt41341;
+    public int fieldInt41342;
+    public int fieldInt41343;
+    public int fieldInt41344;
+    public int fieldInt41345;
+    public int fieldInt41346;
+    public int fieldInt41347;
+    public int fieldInt41348;
+    public int fieldInt41349;
+    public int fieldInt41350;
+    public int fieldInt41351;
+    public int fieldInt41352;
+    public int fieldInt41353;
+    public int fieldInt41354;
+    public int fieldInt41355;
+    public int fieldInt41356;
+    public int fieldInt41357;
+    public int fieldInt41358;
+    public int fieldInt41359;
+    public int fieldInt41360;
+    public int fieldInt41361;
+    public int fieldInt41362;
+    public int fieldInt41363;
+    public int fieldInt41364;
+    public int fieldInt41365;
+    public int fieldInt41366;
+    public int fieldInt41367;
+    public int fieldInt41368;
+    public int fieldInt41369;
+    public int fieldInt41370;
+    public int fieldInt41371;
+    public int fieldInt41372;
+    public int fieldInt41373;
+    public int fieldInt41374;
+    public int fieldInt41375;
+    public int fieldInt41376;
+    public int fieldInt41377;
+    public int fieldInt41378;
+    public int fieldInt41379;
+    public int fieldInt41380;
+    public int fieldInt41381;
+    public int fieldInt41382;
+    public int fieldInt41383;
+    public int fieldInt41384;
+    public int fieldInt41385;
+    public int fieldInt41386;
+    public int fieldInt41387;
+    public int fieldInt41388;
+    public int fieldInt41389;
+    public int fieldInt41390;
+    public int fieldInt41391;
+    public int fieldInt41392;
+    public int fieldInt41393;
+    public int fieldInt41394;
+    public int fieldInt41395;
+    public int fieldInt41396;
+    public int fieldInt41397;
+    public int fieldInt41398;
+    public int fieldInt41399;
+    public int fieldInt41400;
+    public int fieldInt41401;
+    public int fieldInt41402;
+    public int fieldInt41403;
+    public int fieldInt41404;
+    public int fieldInt41405;
+    public int fieldInt41406;
+    public int fieldInt41407;
+    public int fieldInt41408;
+    public int fieldInt41409;
+    public int fieldInt41410;
+    public int fieldInt41411;
+    public int fieldInt41412;
+    public int fieldInt41413;
+    public int fieldInt41414;
+    public int fieldInt41415;
+    public int fieldInt41416;
+    public int fieldInt41417;
+    public int fieldInt41418;
+    public int fieldInt41419;
+    public int fieldInt41420;
+    public int fieldInt41421;
+    public int fieldInt41422;
+    public int fieldInt41423;
+    public int fieldInt41424;
+    public int fieldInt41425;
+    public int fieldInt41426;
+    public int fieldInt41427;
+    public int fieldInt41428;
+    public int fieldInt41429;
+    public int fieldInt41430;
+    public int fieldInt41431;
+    public int fieldInt41432;
+    public int fieldInt41433;
+    public int fieldInt41434;
+    public int fieldInt41435;
+    public int fieldInt41436;
+    public int fieldInt41437;
+    public int fieldInt41438;
+    public int fieldInt41439;
+    public int fieldInt41440;
+    public int fieldInt41441;
+    public int fieldInt41442;
+    public int fieldInt41443;
+    public int fieldInt41444;
+    public int fieldInt41445;
+    public int fieldInt41446;
+    public int fieldInt41447;
+    public int fieldInt41448;
+    public int fieldInt41449;
+    public int fieldInt41450;
+    public int fieldInt41451;
+    public int fieldInt41452;
+    public int fieldInt41453;
+    public int fieldInt41454;
+    public int fieldInt41455;
+    public int fieldInt41456;
+    public int fieldInt41457;
+    public int fieldInt41458;
+    public int fieldInt41459;
+    public int fieldInt41460;
+    public int fieldInt41461;
+    public int fieldInt41462;
+    public int fieldInt41463;
+    public int fieldInt41464;
+    public int fieldInt41465;
+    public int fieldInt41466;
+    public int fieldInt41467;
+    public int fieldInt41468;
+    public int fieldInt41469;
+    public int fieldInt41470;
+    public int fieldInt41471;
+    public int fieldInt41472;
+    public int fieldInt41473;
+    public int fieldInt41474;
+    public int fieldInt41475;
+    public int fieldInt41476;
+    public int fieldInt41477;
+    public int fieldInt41478;
+    public int fieldInt41479;
+    public int fieldInt41480;
+    public int fieldInt41481;
+    public int fieldInt41482;
+    public int fieldInt41483;
+    public int fieldInt41484;
+    public int fieldInt41485;
+    public int fieldInt41486;
+    public int fieldInt41487;
+    public int fieldInt41488;
+    public int fieldInt41489;
+    public int fieldInt41490;
+    public int fieldInt41491;
+    public int fieldInt41492;
+    public int fieldInt41493;
+    public int fieldInt41494;
+    public int fieldInt41495;
+    public int fieldInt41496;
+    public int fieldInt41497;
+    public int fieldInt41498;
+    public int fieldInt41499;
+    public int fieldInt41500;
+    public int fieldInt41501;
+    public int fieldInt41502;
+    public int fieldInt41503;
+    public int fieldInt41504;
+    public int fieldInt41505;
+    public int fieldInt41506;
+    public int fieldInt41507;
+    public int fieldInt41508;
+    public int fieldInt41509;
+    public int fieldInt41510;
+    public int fieldInt41511;
+    public int fieldInt41512;
+    public int fieldInt41513;
+    public int fieldInt41514;
+    public int fieldInt41515;
+    public int fieldInt41516;
+    public int fieldInt41517;
+    public int fieldInt41518;
+    public int fieldInt41519;
+    public int fieldInt41520;
+    public int fieldInt41521;
+    public int fieldInt41522;
+    public int fieldInt41523;
+    public int fieldInt41524;
+    public int fieldInt41525;
+    public int fieldInt41526;
+    public int fieldInt41527;
+    public int fieldInt41528;
+    public int fieldInt41529;
+    public int fieldInt41530;
+    public int fieldInt41531;
+    public int fieldInt41532;
+    public int fieldInt41533;
+    public int fieldInt41534;
+    public int fieldInt41535;
+    public int fieldInt41536;
+    public int fieldInt41537;
+    public int fieldInt41538;
+    public int fieldInt41539;
+    public int fieldInt41540;
+    public int fieldInt41541;
+    public int fieldInt41542;
+    public int fieldInt41543;
+    public int fieldInt41544;
+    public int fieldInt41545;
+    public int fieldInt41546;
+    public int fieldInt41547;
+    public int fieldInt41548;
+    public int fieldInt41549;
+    public int fieldInt41550;
+    public int fieldInt41551;
+    public int fieldInt41552;
+    public int fieldInt41553;
+    public int fieldInt41554;
+    public int fieldInt41555;
+    public int fieldInt41556;
+    public int fieldInt41557;
+    public int fieldInt41558;
+    public int fieldInt41559;
+    public int fieldInt41560;
+    public int fieldInt41561;
+    public int fieldInt41562;
+    public int fieldInt41563;
+    public int fieldInt41564;
+    public int fieldInt41565;
+    public int fieldInt41566;
+    public int fieldInt41567;
+    public int fieldInt41568;
+    public int fieldInt41569;
+    public int fieldInt41570;
+    public int fieldInt41571;
+    public int fieldInt41572;
+    public int fieldInt41573;
+    public int fieldInt41574;
+    public int fieldInt41575;
+    public int fieldInt41576;
+    public int fieldInt41577;
+    public int fieldInt41578;
+    public int fieldInt41579;
+    public int fieldInt41580;
+    public int fieldInt41581;
+    public int fieldInt41582;
+    public int fieldInt41583;
+    public int fieldInt41584;
+    public int fieldInt41585;
+    public int fieldInt41586;
+    public int fieldInt41587;
+    public int fieldInt41588;
+    public int fieldInt41589;
+    public int fieldInt41590;
+    public int fieldInt41591;
+    public int fieldInt41592;
+    public int fieldInt41593;
+    public int fieldInt41594;
+    public int fieldInt41595;
+    public int fieldInt41596;
+    public int fieldInt41597;
+    public int fieldInt41598;
+    public int fieldInt41599;
+    public int fieldInt41600;
+    public int fieldInt41601;
+    public int fieldInt41602;
+    public int fieldInt41603;
+    public int fieldInt41604;
+    public int fieldInt41605;
+    public int fieldInt41606;
+    public int fieldInt41607;
+    public int fieldInt41608;
+    public int fieldInt41609;
+    public int fieldInt41610;
+    public int fieldInt41611;
+    public int fieldInt41612;
+    public int fieldInt41613;
+    public int fieldInt41614;
+    public int fieldInt41615;
+    public int fieldInt41616;
+    public int fieldInt41617;
+    public int fieldInt41618;
+    public int fieldInt41619;
+    public int fieldInt41620;
+    public int fieldInt41621;
+    public int fieldInt41622;
+    public int fieldInt41623;
+    public int fieldInt41624;
+    public int fieldInt41625;
+    public int fieldInt41626;
+    public int fieldInt41627;
+    public int fieldInt41628;
+    public int fieldInt41629;
+    public int fieldInt41630;
+    public int fieldInt41631;
+    public int fieldInt41632;
+    public int fieldInt41633;
+    public int fieldInt41634;
+    public int fieldInt41635;
+    public int fieldInt41636;
+    public int fieldInt41637;
+    public int fieldInt41638;
+    public int fieldInt41639;
+    public int fieldInt41640;
+    public int fieldInt41641;
+    public int fieldInt41642;
+    public int fieldInt41643;
+    public int fieldInt41644;
+    public int fieldInt41645;
+    public int fieldInt41646;
+    public int fieldInt41647;
+    public int fieldInt41648;
+    public int fieldInt41649;
+    public int fieldInt41650;
+    public int fieldInt41651;
+    public int fieldInt41652;
+    public int fieldInt41653;
+    public int fieldInt41654;
+    public int fieldInt41655;
+    public int fieldInt41656;
+    public int fieldInt41657;
+    public int fieldInt41658;
+    public int fieldInt41659;
+    public int fieldInt41660;
+    public int fieldInt41661;
+    public int fieldInt41662;
+    public int fieldInt41663;
+    public int fieldInt41664;
+    public int fieldInt41665;
+    public int fieldInt41666;
+    public int fieldInt41667;
+    public int fieldInt41668;
+    public int fieldInt41669;
+    public int fieldInt41670;
+    public int fieldInt41671;
+    public int fieldInt41672;
+    public int fieldInt41673;
+    public int fieldInt41674;
+    public int fieldInt41675;
+    public int fieldInt41676;
+    public int fieldInt41677;
+    public int fieldInt41678;
+    public int fieldInt41679;
+    public int fieldInt41680;
+    public int fieldInt41681;
+    public int fieldInt41682;
+    public int fieldInt41683;
+    public int fieldInt41684;
+    public int fieldInt41685;
+    public int fieldInt41686;
+    public int fieldInt41687;
+    public int fieldInt41688;
+    public int fieldInt41689;
+    public int fieldInt41690;
+    public int fieldInt41691;
+    public int fieldInt41692;
+    public int fieldInt41693;
+    public int fieldInt41694;
+    public int fieldInt41695;
+    public int fieldInt41696;
+    public int fieldInt41697;
+    public int fieldInt41698;
+    public int fieldInt41699;
+    public int fieldInt41700;
+    public int fieldInt41701;
+    public int fieldInt41702;
+    public int fieldInt41703;
+    public int fieldInt41704;
+    public int fieldInt41705;
+    public int fieldInt41706;
+    public int fieldInt41707;
+    public int fieldInt41708;
+    public int fieldInt41709;
+    public int fieldInt41710;
+    public int fieldInt41711;
+    public int fieldInt41712;
+    public int fieldInt41713;
+    public int fieldInt41714;
+    public int fieldInt41715;
+    public int fieldInt41716;
+    public int fieldInt41717;
+    public int fieldInt41718;
+    public int fieldInt41719;
+    public int fieldInt41720;
+    public int fieldInt41721;
+    public int fieldInt41722;
+    public int fieldInt41723;
+    public int fieldInt41724;
+    public int fieldInt41725;
+    public int fieldInt41726;
+    public int fieldInt41727;
+    public int fieldInt41728;
+    public int fieldInt41729;
+    public int fieldInt41730;
+    public int fieldInt41731;
+    public int fieldInt41732;
+    public int fieldInt41733;
+    public int fieldInt41734;
+    public int fieldInt41735;
+    public int fieldInt41736;
+    public int fieldInt41737;
+    public int fieldInt41738;
+    public int fieldInt41739;
+    public int fieldInt41740;
+    public int fieldInt41741;
+    public int fieldInt41742;
+    public int fieldInt41743;
+    public int fieldInt41744;
+    public int fieldInt41745;
+    public int fieldInt41746;
+    public int fieldInt41747;
+    public int fieldInt41748;
+    public int fieldInt41749;
+    public int fieldInt41750;
+    public int fieldInt41751;
+    public int fieldInt41752;
+    public int fieldInt41753;
+    public int fieldInt41754;
+    public int fieldInt41755;
+    public int fieldInt41756;
+    public int fieldInt41757;
+    public int fieldInt41758;
+    public int fieldInt41759;
+    public int fieldInt41760;
+    public int fieldInt41761;
+    public int fieldInt41762;
+    public int fieldInt41763;
+    public int fieldInt41764;
+    public int fieldInt41765;
+    public int fieldInt41766;
+    public int fieldInt41767;
+    public int fieldInt41768;
+    public int fieldInt41769;
+    public int fieldInt41770;
+    public int fieldInt41771;
+    public int fieldInt41772;
+    public int fieldInt41773;
+    public int fieldInt41774;
+    public int fieldInt41775;
+    public int fieldInt41776;
+    public int fieldInt41777;
+    public int fieldInt41778;
+    public int fieldInt41779;
+    public int fieldInt41780;
+    public int fieldInt41781;
+    public int fieldInt41782;
+    public int fieldInt41783;
+    public int fieldInt41784;
+    public int fieldInt41785;
+    public int fieldInt41786;
+    public int fieldInt41787;
+    public int fieldInt41788;
+    public int fieldInt41789;
+    public int fieldInt41790;
+    public int fieldInt41791;
+    public int fieldInt41792;
+    public int fieldInt41793;
+    public int fieldInt41794;
+    public int fieldInt41795;
+    public int fieldInt41796;
+    public int fieldInt41797;
+    public int fieldInt41798;
+    public int fieldInt41799;
+    public int fieldInt41800;
+    public int fieldInt41801;
+    public int fieldInt41802;
+    public int fieldInt41803;
+    public int fieldInt41804;
+    public int fieldInt41805;
+    public int fieldInt41806;
+    public int fieldInt41807;
+    public int fieldInt41808;
+    public int fieldInt41809;
+    public int fieldInt41810;
+    public int fieldInt41811;
+    public int fieldInt41812;
+    public int fieldInt41813;
+    public int fieldInt41814;
+    public int fieldInt41815;
+    public int fieldInt41816;
+    public int fieldInt41817;
+    public int fieldInt41818;
+    public int fieldInt41819;
+    public int fieldInt41820;
+    public int fieldInt41821;
+    public int fieldInt41822;
+    public int fieldInt41823;
+    public int fieldInt41824;
+    public int fieldInt41825;
+    public int fieldInt41826;
+    public int fieldInt41827;
+    public int fieldInt41828;
+    public int fieldInt41829;
+    public int fieldInt41830;
+    public int fieldInt41831;
+    public int fieldInt41832;
+    public int fieldInt41833;
+    public int fieldInt41834;
+    public int fieldInt41835;
+    public int fieldInt41836;
+    public int fieldInt41837;
+    public int fieldInt41838;
+    public int fieldInt41839;
+    public int fieldInt41840;
+    public int fieldInt41841;
+    public int fieldInt41842;
+    public int fieldInt41843;
+    public int fieldInt41844;
+    public int fieldInt41845;
+    public int fieldInt41846;
+    public int fieldInt41847;
+    public int fieldInt41848;
+    public int fieldInt41849;
+    public int fieldInt41850;
+    public int fieldInt41851;
+    public int fieldInt41852;
+    public int fieldInt41853;
+    public int fieldInt41854;
+    public int fieldInt41855;
+    public int fieldInt41856;
+    public int fieldInt41857;
+    public int fieldInt41858;
+    public int fieldInt41859;
+    public int fieldInt41860;
+    public int fieldInt41861;
+    public int fieldInt41862;
+    public int fieldInt41863;
+    public int fieldInt41864;
+    public int fieldInt41865;
+    public int fieldInt41866;
+    public int fieldInt41867;
+    public int fieldInt41868;
+    public int fieldInt41869;
+    public int fieldInt41870;
+    public int fieldInt41871;
+    public int fieldInt41872;
+    public int fieldInt41873;
+    public int fieldInt41874;
+    public int fieldInt41875;
+    public int fieldInt41876;
+    public int fieldInt41877;
+    public int fieldInt41878;
+    public int fieldInt41879;
+    public int fieldInt41880;
+    public int fieldInt41881;
+    public int fieldInt41882;
+    public int fieldInt41883;
+    public int fieldInt41884;
+    public int fieldInt41885;
+    public int fieldInt41886;
+    public int fieldInt41887;
+    public int fieldInt41888;
+    public int fieldInt41889;
+    public int fieldInt41890;
+    public int fieldInt41891;
+    public int fieldInt41892;
+    public int fieldInt41893;
+    public int fieldInt41894;
+    public int fieldInt41895;
+    public int fieldInt41896;
+    public int fieldInt41897;
+    public int fieldInt41898;
+    public int fieldInt41899;
+    public int fieldInt41900;
+    public int fieldInt41901;
+    public int fieldInt41902;
+    public int fieldInt41903;
+    public int fieldInt41904;
+    public int fieldInt41905;
+    public int fieldInt41906;
+    public int fieldInt41907;
+    public int fieldInt41908;
+    public int fieldInt41909;
+    public int fieldInt41910;
+    public int fieldInt41911;
+    public int fieldInt41912;
+    public int fieldInt41913;
+    public int fieldInt41914;
+    public int fieldInt41915;
+    public int fieldInt41916;
+    public int fieldInt41917;
+    public int fieldInt41918;
+    public int fieldInt41919;
+    public int fieldInt41920;
+    public int fieldInt41921;
+    public int fieldInt41922;
+    public int fieldInt41923;
+    public int fieldInt41924;
+    public int fieldInt41925;
+    public int fieldInt41926;
+    public int fieldInt41927;
+    public int fieldInt41928;
+    public int fieldInt41929;
+    public int fieldInt41930;
+    public int fieldInt41931;
+    public int fieldInt41932;
+    public int fieldInt41933;
+    public int fieldInt41934;
+    public int fieldInt41935;
+    public int fieldInt41936;
+    public int fieldInt41937;
+    public int fieldInt41938;
+    public int fieldInt41939;
+    public int fieldInt41940;
+    public int fieldInt41941;
+    public int fieldInt41942;
+    public int fieldInt41943;
+    public int fieldInt41944;
+    public int fieldInt41945;
+    public int fieldInt41946;
+    public int fieldInt41947;
+    public int fieldInt41948;
+    public int fieldInt41949;
+    public int fieldInt41950;
+    public int fieldInt41951;
+    public int fieldInt41952;
+    public int fieldInt41953;
+    public int fieldInt41954;
+    public int fieldInt41955;
+    public int fieldInt41956;
+    public int fieldInt41957;
+    public int fieldInt41958;
+    public int fieldInt41959;
+    public int fieldInt41960;
+    public int fieldInt41961;
+    public int fieldInt41962;
+    public int fieldInt41963;
+    public int fieldInt41964;
+    public int fieldInt41965;
+    public int fieldInt41966;
+    public int fieldInt41967;
+    public int fieldInt41968;
+    public int fieldInt41969;
+    public int fieldInt41970;
+    public int fieldInt41971;
+    public int fieldInt41972;
+    public int fieldInt41973;
+    public int fieldInt41974;
+    public int fieldInt41975;
+    public int fieldInt41976;
+    public int fieldInt41977;
+    public int fieldInt41978;
+    public int fieldInt41979;
+    public int fieldInt41980;
+    public int fieldInt41981;
+    public int fieldInt41982;
+    public int fieldInt41983;
+    public int fieldInt41984;
+    public int fieldInt41985;
+    public int fieldInt41986;
+    public int fieldInt41987;
+    public int fieldInt41988;
+    public int fieldInt41989;
+    public int fieldInt41990;
+    public int fieldInt41991;
+    public int fieldInt41992;
+    public int fieldInt41993;
+    public int fieldInt41994;
+    public int fieldInt41995;
+    public int fieldInt41996;
+    public int fieldInt41997;
+    public int fieldInt41998;
+    public int fieldInt41999;
+    public int fieldInt42000;
+    public int fieldInt42001;
+    public int fieldInt42002;
+    public int fieldInt42003;
+    public int fieldInt42004;
+    public int fieldInt42005;
+    public int fieldInt42006;
+    public int fieldInt42007;
+    public int fieldInt42008;
+    public int fieldInt42009;
+    public int fieldInt42010;
+    public int fieldInt42011;
+    public int fieldInt42012;
+    public int fieldInt42013;
+    public int fieldInt42014;
+    public int fieldInt42015;
+    public int fieldInt42016;
+    public int fieldInt42017;
+    public int fieldInt42018;
+    public int fieldInt42019;
+    public int fieldInt42020;
+    public int fieldInt42021;
+    public int fieldInt42022;
+    public int fieldInt42023;
+    public int fieldInt42024;
+    public int fieldInt42025;
+    public int fieldInt42026;
+    public int fieldInt42027;
+    public int fieldInt42028;
+    public int fieldInt42029;
+    public int fieldInt42030;
+    public int fieldInt42031;
+    public int fieldInt42032;
+    public int fieldInt42033;
+    public int fieldInt42034;
+    public int fieldInt42035;
+    public int fieldInt42036;
+    public int fieldInt42037;
+    public int fieldInt42038;
+    public int fieldInt42039;
+    public int fieldInt42040;
+    public int fieldInt42041;
+    public int fieldInt42042;
+    public int fieldInt42043;
+    public int fieldInt42044;
+    public int fieldInt42045;
+    public int fieldInt42046;
+    public int fieldInt42047;
+    public int fieldInt42048;
+    public int fieldInt42049;
+    public int fieldInt42050;
+    public int fieldInt42051;
+    public int fieldInt42052;
+    public int fieldInt42053;
+    public int fieldInt42054;
+    public int fieldInt42055;
+    public int fieldInt42056;
+    public int fieldInt42057;
+    public int fieldInt42058;
+    public int fieldInt42059;
+    public int fieldInt42060;
+    public int fieldInt42061;
+    public int fieldInt42062;
+    public int fieldInt42063;
+    public int fieldInt42064;
+    public int fieldInt42065;
+    public int fieldInt42066;
+    public int fieldInt42067;
+    public int fieldInt42068;
+    public int fieldInt42069;
+    public int fieldInt42070;
+    public int fieldInt42071;
+    public int fieldInt42072;
+    public int fieldInt42073;
+    public int fieldInt42074;
+    public int fieldInt42075;
+    public int fieldInt42076;
+    public int fieldInt42077;
+    public int fieldInt42078;
+    public int fieldInt42079;
+    public int fieldInt42080;
+    public int fieldInt42081;
+    public int fieldInt42082;
+    public int fieldInt42083;
+    public int fieldInt42084;
+    public int fieldInt42085;
+    public int fieldInt42086;
+    public int fieldInt42087;
+    public int fieldInt42088;
+    public int fieldInt42089;
+    public int fieldInt42090;
+    public int fieldInt42091;
+    public int fieldInt42092;
+    public int fieldInt42093;
+    public int fieldInt42094;
+    public int fieldInt42095;
+    public int fieldInt42096;
+    public int fieldInt42097;
+    public int fieldInt42098;
+    public int fieldInt42099;
+    public int fieldInt42100;
+    public int fieldInt42101;
+    public int fieldInt42102;
+    public int fieldInt42103;
+    public int fieldInt42104;
+    public int fieldInt42105;
+    public int fieldInt42106;
+    public int fieldInt42107;
+    public int fieldInt42108;
+    public int fieldInt42109;
+    public int fieldInt42110;
+    public int fieldInt42111;
+    public int fieldInt42112;
+    public int fieldInt42113;
+    public int fieldInt42114;
+    public int fieldInt42115;
+    public int fieldInt42116;
+    public int fieldInt42117;
+    public int fieldInt42118;
+    public int fieldInt42119;
+    public int fieldInt42120;
+    public int fieldInt42121;
+    public int fieldInt42122;
+    public int fieldInt42123;
+    public int fieldInt42124;
+    public int fieldInt42125;
+    public int fieldInt42126;
+    public int fieldInt42127;
+    public int fieldInt42128;
+    public int fieldInt42129;
+    public int fieldInt42130;
+    public int fieldInt42131;
+    public int fieldInt42132;
+    public int fieldInt42133;
+    public int fieldInt42134;
+    public int fieldInt42135;
+    public int fieldInt42136;
+    public int fieldInt42137;
+    public int fieldInt42138;
+    public int fieldInt42139;
+    public int fieldInt42140;
+    public int fieldInt42141;
+    public int fieldInt42142;
+    public int fieldInt42143;
+    public int fieldInt42144;
+    public int fieldInt42145;
+    public int fieldInt42146;
+    public int fieldInt42147;
+    public int fieldInt42148;
+    public int fieldInt42149;
+    public int fieldInt42150;
+    public int fieldInt42151;
+    public int fieldInt42152;
+    public int fieldInt42153;
+    public int fieldInt42154;
+    public int fieldInt42155;
+    public int fieldInt42156;
+    public int fieldInt42157;
+    public int fieldInt42158;
+    public int fieldInt42159;
+    public int fieldInt42160;
+    public int fieldInt42161;
+    public int fieldInt42162;
+    public int fieldInt42163;
+    public int fieldInt42164;
+    public int fieldInt42165;
+    public int fieldInt42166;
+    public int fieldInt42167;
+    public int fieldInt42168;
+    public int fieldInt42169;
+    public int fieldInt42170;
+    public int fieldInt42171;
+    public int fieldInt42172;
+    public int fieldInt42173;
+    public int fieldInt42174;
+    public int fieldInt42175;
+    public int fieldInt42176;
+    public int fieldInt42177;
+    public int fieldInt42178;
+    public int fieldInt42179;
+    public int fieldInt42180;
+    public int fieldInt42181;
+    public int fieldInt42182;
+    public int fieldInt42183;
+    public int fieldInt42184;
+    public int fieldInt42185;
+    public int fieldInt42186;
+    public int fieldInt42187;
+    public int fieldInt42188;
+    public int fieldInt42189;
+    public int fieldInt42190;
+    public int fieldInt42191;
+    public int fieldInt42192;
+    public int fieldInt42193;
+    public int fieldInt42194;
+    public int fieldInt42195;
+    public int fieldInt42196;
+    public int fieldInt42197;
+    public int fieldInt42198;
+    public int fieldInt42199;
+    public int fieldInt42200;
+    public int fieldInt42201;
+    public int fieldInt42202;
+    public int fieldInt42203;
+    public int fieldInt42204;
+    public int fieldInt42205;
+    public int fieldInt42206;
+    public int fieldInt42207;
+    public int fieldInt42208;
+    public int fieldInt42209;
+    public int fieldInt42210;
+    public int fieldInt42211;
+    public int fieldInt42212;
+    public int fieldInt42213;
+    public int fieldInt42214;
+    public int fieldInt42215;
+    public int fieldInt42216;
+    public int fieldInt42217;
+    public int fieldInt42218;
+    public int fieldInt42219;
+    public int fieldInt42220;
+    public int fieldInt42221;
+    public int fieldInt42222;
+    public int fieldInt42223;
+    public int fieldInt42224;
+    public int fieldInt42225;
+    public int fieldInt42226;
+    public int fieldInt42227;
+    public int fieldInt42228;
+    public int fieldInt42229;
+    public int fieldInt42230;
+    public int fieldInt42231;
+    public int fieldInt42232;
+    public int fieldInt42233;
+    public int fieldInt42234;
+    public int fieldInt42235;
+    public int fieldInt42236;
+    public int fieldInt42237;
+    public int fieldInt42238;
+    public int fieldInt42239;
+    public int fieldInt42240;
+    public int fieldInt42241;
+    public int fieldInt42242;
+    public int fieldInt42243;
+    public int fieldInt42244;
+    public int fieldInt42245;
+    public int fieldInt42246;
+    public int fieldInt42247;
+    public int fieldInt42248;
+    public int fieldInt42249;
+    public int fieldInt42250;
+    public int fieldInt42251;
+    public int fieldInt42252;
+    public int fieldInt42253;
+    public int fieldInt42254;
+    public int fieldInt42255;
+    public int fieldInt42256;
+    public int fieldInt42257;
+    public int fieldInt42258;
+    public int fieldInt42259;
+    public int fieldInt42260;
+    public int fieldInt42261;
+    public int fieldInt42262;
+    public int fieldInt42263;
+    public int fieldInt42264;
+    public int fieldInt42265;
+    public int fieldInt42266;
+    public int fieldInt42267;
+    public int fieldInt42268;
+    public int fieldInt42269;
+    public int fieldInt42270;
+    public int fieldInt42271;
+    public int fieldInt42272;
+    public int fieldInt42273;
+    public int fieldInt42274;
+    public int fieldInt42275;
+    public int fieldInt42276;
+    public int fieldInt42277;
+    public int fieldInt42278;
+    public int fieldInt42279;
+    public int fieldInt42280;
+    public int fieldInt42281;
+    public int fieldInt42282;
+    public int fieldInt42283;
+    public int fieldInt42284;
+    public int fieldInt42285;
+    public int fieldInt42286;
+    public int fieldInt42287;
+    public int fieldInt42288;
+    public int fieldInt42289;
+    public int fieldInt42290;
+    public int fieldInt42291;
+    public int fieldInt42292;
+    public int fieldInt42293;
+    public int fieldInt42294;
+    public int fieldInt42295;
+    public int fieldInt42296;
+    public int fieldInt42297;
+    public int fieldInt42298;
+    public int fieldInt42299;
+    public int fieldInt42300;
+    public int fieldInt42301;
+    public int fieldInt42302;
+    public int fieldInt42303;
+    public int fieldInt42304;
+    public int fieldInt42305;
+    public int fieldInt42306;
+    public int fieldInt42307;
+    public int fieldInt42308;
+    public int fieldInt42309;
+    public int fieldInt42310;
+    public int fieldInt42311;
+    public int fieldInt42312;
+    public int fieldInt42313;
+    public int fieldInt42314;
+    public int fieldInt42315;
+    public int fieldInt42316;
+    public int fieldInt42317;
+    public int fieldInt42318;
+    public int fieldInt42319;
+    public int fieldInt42320;
+    public int fieldInt42321;
+    public int fieldInt42322;
+    public int fieldInt42323;
+    public int fieldInt42324;
+    public int fieldInt42325;
+    public int fieldInt42326;
+    public int fieldInt42327;
+    public int fieldInt42328;
+    public int fieldInt42329;
+    public int fieldInt42330;
+    public int fieldInt42331;
+    public int fieldInt42332;
+    public int fieldInt42333;
+    public int fieldInt42334;
+    public int fieldInt42335;
+    public int fieldInt42336;
+    public int fieldInt42337;
+    public int fieldInt42338;
+    public int fieldInt42339;
+    public int fieldInt42340;
+    public int fieldInt42341;
+    public int fieldInt42342;
+    public int fieldInt42343;
+    public int fieldInt42344;
+    public int fieldInt42345;
+    public int fieldInt42346;
+    public int fieldInt42347;
+    public int fieldInt42348;
+    public int fieldInt42349;
+    public int fieldInt42350;
+    public int fieldInt42351;
+    public int fieldInt42352;
+    public int fieldInt42353;
+    public int fieldInt42354;
+    public int fieldInt42355;
+    public int fieldInt42356;
+    public int fieldInt42357;
+    public int fieldInt42358;
+    public int fieldInt42359;
+    public int fieldInt42360;
+    public int fieldInt42361;
+    public int fieldInt42362;
+    public int fieldInt42363;
+    public int fieldInt42364;
+    public int fieldInt42365;
+    public int fieldInt42366;
+    public int fieldInt42367;
+    public int fieldInt42368;
+    public int fieldInt42369;
+    public int fieldInt42370;
+    public int fieldInt42371;
+    public int fieldInt42372;
+    public int fieldInt42373;
+    public int fieldInt42374;
+    public int fieldInt42375;
+    public int fieldInt42376;
+    public int fieldInt42377;
+    public int fieldInt42378;
+    public int fieldInt42379;
+    public int fieldInt42380;
+    public int fieldInt42381;
+    public int fieldInt42382;
+    public int fieldInt42383;
+    public int fieldInt42384;
+    public int fieldInt42385;
+    public int fieldInt42386;
+    public int fieldInt42387;
+    public int fieldInt42388;
+    public int fieldInt42389;
+    public int fieldInt42390;
+    public int fieldInt42391;
+    public int fieldInt42392;
+    public int fieldInt42393;
+    public int fieldInt42394;
+    public int fieldInt42395;
+    public int fieldInt42396;
+    public int fieldInt42397;
+    public int fieldInt42398;
+    public int fieldInt42399;
+    public int fieldInt42400;
+    public int fieldInt42401;
+    public int fieldInt42402;
+    public int fieldInt42403;
+    public int fieldInt42404;
+    public int fieldInt42405;
+    public int fieldInt42406;
+    public int fieldInt42407;
+    public int fieldInt42408;
+    public int fieldInt42409;
+    public int fieldInt42410;
+    public int fieldInt42411;
+    public int fieldInt42412;
+    public int fieldInt42413;
+    public int fieldInt42414;
+    public int fieldInt42415;
+    public int fieldInt42416;
+    public int fieldInt42417;
+    public int fieldInt42418;
+    public int fieldInt42419;
+    public int fieldInt42420;
+    public int fieldInt42421;
+    public int fieldInt42422;
+    public int fieldInt42423;
+    public int fieldInt42424;
+    public int fieldInt42425;
+    public int fieldInt42426;
+    public int fieldInt42427;
+    public int fieldInt42428;
+    public int fieldInt42429;
+    public int fieldInt42430;
+    public int fieldInt42431;
+    public int fieldInt42432;
+    public int fieldInt42433;
+    public int fieldInt42434;
+    public int fieldInt42435;
+    public int fieldInt42436;
+    public int fieldInt42437;
+    public int fieldInt42438;
+    public int fieldInt42439;
+    public int fieldInt42440;
+    public int fieldInt42441;
+    public int fieldInt42442;
+    public int fieldInt42443;
+    public int fieldInt42444;
+    public int fieldInt42445;
+    public int fieldInt42446;
+    public int fieldInt42447;
+    public int fieldInt42448;
+    public int fieldInt42449;
+    public int fieldInt42450;
+    public int fieldInt42451;
+    public int fieldInt42452;
+    public int fieldInt42453;
+    public int fieldInt42454;
+    public int fieldInt42455;
+    public int fieldInt42456;
+    public int fieldInt42457;
+    public int fieldInt42458;
+    public int fieldInt42459;
+    public int fieldInt42460;
+    public int fieldInt42461;
+    public int fieldInt42462;
+    public int fieldInt42463;
+    public int fieldInt42464;
+    public int fieldInt42465;
+    public int fieldInt42466;
+    public int fieldInt42467;
+    public int fieldInt42468;
+    public int fieldInt42469;
+    public int fieldInt42470;
+    public int fieldInt42471;
+    public int fieldInt42472;
+    public int fieldInt42473;
+    public int fieldInt42474;
+    public int fieldInt42475;
+    public int fieldInt42476;
+    public int fieldInt42477;
+    public int fieldInt42478;
+    public int fieldInt42479;
+    public int fieldInt42480;
+    public int fieldInt42481;
+    public int fieldInt42482;
+    public int fieldInt42483;
+    public int fieldInt42484;
+    public int fieldInt42485;
+    public int fieldInt42486;
+    public int fieldInt42487;
+    public int fieldInt42488;
+    public int fieldInt42489;
+    public int fieldInt42490;
+    public int fieldInt42491;
+    public int fieldInt42492;
+    public int fieldInt42493;
+    public int fieldInt42494;
+    public int fieldInt42495;
+    public int fieldInt42496;
+    public int fieldInt42497;
+    public int fieldInt42498;
+    public int fieldInt42499;
+    public int fieldInt42500;
+    public int fieldInt42501;
+    public int fieldInt42502;
+    public int fieldInt42503;
+    public int fieldInt42504;
+    public int fieldInt42505;
+    public int fieldInt42506;
+    public int fieldInt42507;
+    public int fieldInt42508;
+    public int fieldInt42509;
+    public int fieldInt42510;
+    public int fieldInt42511;
+    public int fieldInt42512;
+    public int fieldInt42513;
+    public int fieldInt42514;
+    public int fieldInt42515;
+    public int fieldInt42516;
+    public int fieldInt42517;
+    public int fieldInt42518;
+    public int fieldInt42519;
+    public int fieldInt42520;
+    public int fieldInt42521;
+    public int fieldInt42522;
+    public int fieldInt42523;
+    public int fieldInt42524;
+    public int fieldInt42525;
+    public int fieldInt42526;
+    public int fieldInt42527;
+    public int fieldInt42528;
+    public int fieldInt42529;
+    public int fieldInt42530;
+    public int fieldInt42531;
+    public int fieldInt42532;
+    public int fieldInt42533;
+    public int fieldInt42534;
+    public int fieldInt42535;
+    public int fieldInt42536;
+    public int fieldInt42537;
+    public int fieldInt42538;
+    public int fieldInt42539;
+    public int fieldInt42540;
+    public int fieldInt42541;
+    public int fieldInt42542;
+    public int fieldInt42543;
+    public int fieldInt42544;
+    public int fieldInt42545;
+    public int fieldInt42546;
+    public int fieldInt42547;
+    public int fieldInt42548;
+    public int fieldInt42549;
+    public int fieldInt42550;
+    public int fieldInt42551;
+    public int fieldInt42552;
+    public int fieldInt42553;
+    public int fieldInt42554;
+    public int fieldInt42555;
+    public int fieldInt42556;
+    public int fieldInt42557;
+    public int fieldInt42558;
+    public int fieldInt42559;
+    public int fieldInt42560;
+    public int fieldInt42561;
+    public int fieldInt42562;
+    public int fieldInt42563;
+    public int fieldInt42564;
+    public int fieldInt42565;
+    public int fieldInt42566;
+    public int fieldInt42567;
+    public int fieldInt42568;
+    public int fieldInt42569;
+    public int fieldInt42570;
+    public int fieldInt42571;
+    public int fieldInt42572;
+    public int fieldInt42573;
+    public int fieldInt42574;
+    public int fieldInt42575;
+    public int fieldInt42576;
+    public int fieldInt42577;
+    public int fieldInt42578;
+    public int fieldInt42579;
+    public int fieldInt42580;
+    public int fieldInt42581;
+    public int fieldInt42582;
+    public int fieldInt42583;
+    public int fieldInt42584;
+    public int fieldInt42585;
+    public int fieldInt42586;
+    public int fieldInt42587;
+    public int fieldInt42588;
+    public int fieldInt42589;
+    public int fieldInt42590;
+    public int fieldInt42591;
+    public int fieldInt42592;
+    public int fieldInt42593;
+    public int fieldInt42594;
+    public int fieldInt42595;
+    public int fieldInt42596;
+    public int fieldInt42597;
+    public int fieldInt42598;
+    public int fieldInt42599;
+    public int fieldInt42600;
+    public int fieldInt42601;
+    public int fieldInt42602;
+    public int fieldInt42603;
+    public int fieldInt42604;
+    public int fieldInt42605;
+    public int fieldInt42606;
+    public int fieldInt42607;
+    public int fieldInt42608;
+    public int fieldInt42609;
+    public int fieldInt42610;
+    public int fieldInt42611;
+    public int fieldInt42612;
+    public int fieldInt42613;
+    public int fieldInt42614;
+    public int fieldInt42615;
+    public int fieldInt42616;
+    public int fieldInt42617;
+    public int fieldInt42618;
+    public int fieldInt42619;
+    public int fieldInt42620;
+    public int fieldInt42621;
+    public int fieldInt42622;
+    public int fieldInt42623;
+    public int fieldInt42624;
+    public int fieldInt42625;
+    public int fieldInt42626;
+    public int fieldInt42627;
+    public int fieldInt42628;
+    public int fieldInt42629;
+    public int fieldInt42630;
+    public int fieldInt42631;
+    public int fieldInt42632;
+    public int fieldInt42633;
+    public int fieldInt42634;
+    public int fieldInt42635;
+    public int fieldInt42636;
+    public int fieldInt42637;
+    public int fieldInt42638;
+    public int fieldInt42639;
+    public int fieldInt42640;
+    public int fieldInt42641;
+    public int fieldInt42642;
+    public int fieldInt42643;
+    public int fieldInt42644;
+    public int fieldInt42645;
+    public int fieldInt42646;
+    public int fieldInt42647;
+    public int fieldInt42648;
+    public int fieldInt42649;
+    public int fieldInt42650;
+    public int fieldInt42651;
+    public int fieldInt42652;
+    public int fieldInt42653;
+    public int fieldInt42654;
+    public int fieldInt42655;
+    public int fieldInt42656;
+    public int fieldInt42657;
+    public int fieldInt42658;
+    public int fieldInt42659;
+    public int fieldInt42660;
+    public int fieldInt42661;
+    public int fieldInt42662;
+    public int fieldInt42663;
+    public int fieldInt42664;
+    public int fieldInt42665;
+    public int fieldInt42666;
+    public int fieldInt42667;
+    public int fieldInt42668;
+    public int fieldInt42669;
+    public int fieldInt42670;
+    public int fieldInt42671;
+    public int fieldInt42672;
+    public int fieldInt42673;
+    public int fieldInt42674;
+    public int fieldInt42675;
+    public int fieldInt42676;
+    public int fieldInt42677;
+    public int fieldInt42678;
+    public int fieldInt42679;
+    public int fieldInt42680;
+    public int fieldInt42681;
+    public int fieldInt42682;
+    public int fieldInt42683;
+    public int fieldInt42684;
+    public int fieldInt42685;
+    public int fieldInt42686;
+    public int fieldInt42687;
+    public int fieldInt42688;
+    public int fieldInt42689;
+    public int fieldInt42690;
+    public int fieldInt42691;
+    public int fieldInt42692;
+    public int fieldInt42693;
+    public int fieldInt42694;
+    public int fieldInt42695;
+    public int fieldInt42696;
+    public int fieldInt42697;
+    public int fieldInt42698;
+    public int fieldInt42699;
+    public int fieldInt42700;
+    public int fieldInt42701;
+    public int fieldInt42702;
+    public int fieldInt42703;
+    public int fieldInt42704;
+    public int fieldInt42705;
+    public int fieldInt42706;
+    public int fieldInt42707;
+    public int fieldInt42708;
+    public int fieldInt42709;
+    public int fieldInt42710;
+    public int fieldInt42711;
+    public int fieldInt42712;
+    public int fieldInt42713;
+    public int fieldInt42714;
+    public int fieldInt42715;
+    public int fieldInt42716;
+    public int fieldInt42717;
+    public int fieldInt42718;
+    public int fieldInt42719;
+    public int fieldInt42720;
+    public int fieldInt42721;
+    public int fieldInt42722;
+    public int fieldInt42723;
+    public int fieldInt42724;
+    public int fieldInt42725;
+    public int fieldInt42726;
+    public int fieldInt42727;
+    public int fieldInt42728;
+    public int fieldInt42729;
+    public int fieldInt42730;
+    public int fieldInt42731;
+    public int fieldInt42732;
+    public int fieldInt42733;
+    public int fieldInt42734;
+    public int fieldInt42735;
+    public int fieldInt42736;
+    public int fieldInt42737;
+    public int fieldInt42738;
+    public int fieldInt42739;
+    public int fieldInt42740;
+    public int fieldInt42741;
+    public int fieldInt42742;
+    public int fieldInt42743;
+    public int fieldInt42744;
+    public int fieldInt42745;
+    public int fieldInt42746;
+    public int fieldInt42747;
+    public int fieldInt42748;
+    public int fieldInt42749;
+    public int fieldInt42750;
+    public int fieldInt42751;
+    public int fieldInt42752;
+    public int fieldInt42753;
+    public int fieldInt42754;
+    public int fieldInt42755;
+    public int fieldInt42756;
+    public int fieldInt42757;
+    public int fieldInt42758;
+    public int fieldInt42759;
+    public int fieldInt42760;
+    public int fieldInt42761;
+    public int fieldInt42762;
+    public int fieldInt42763;
+    public int fieldInt42764;
+    public int fieldInt42765;
+    public int fieldInt42766;
+    public int fieldInt42767;
+    public int fieldInt42768;
+    public int fieldInt42769;
+    public int fieldInt42770;
+    public int fieldInt42771;
+    public int fieldInt42772;
+    public int fieldInt42773;
+    public int fieldInt42774;
+    public int fieldInt42775;
+    public int fieldInt42776;
+    public int fieldInt42777;
+    public int fieldInt42778;
+    public int fieldInt42779;
+    public int fieldInt42780;
+    public int fieldInt42781;
+    public int fieldInt42782;
+    public int fieldInt42783;
+    public int fieldInt42784;
+    public int fieldInt42785;
+    public int fieldInt42786;
+    public int fieldInt42787;
+    public int fieldInt42788;
+    public int fieldInt42789;
+    public int fieldInt42790;
+    public int fieldInt42791;
+    public int fieldInt42792;
+    public int fieldInt42793;
+    public int fieldInt42794;
+    public int fieldInt42795;
+    public int fieldInt42796;
+    public int fieldInt42797;
+    public int fieldInt42798;
+    public int fieldInt42799;
+    public int fieldInt42800;
+    public int fieldInt42801;
+    public int fieldInt42802;
+    public int fieldInt42803;
+    public int fieldInt42804;
+    public int fieldInt42805;
+    public int fieldInt42806;
+    public int fieldInt42807;
+    public int fieldInt42808;
+    public int fieldInt42809;
+    public int fieldInt42810;
+    public int fieldInt42811;
+    public int fieldInt42812;
+    public int fieldInt42813;
+    public int fieldInt42814;
+    public int fieldInt42815;
+    public int fieldInt42816;
+    public int fieldInt42817;
+    public int fieldInt42818;
+    public int fieldInt42819;
+    public int fieldInt42820;
+    public int fieldInt42821;
+    public int fieldInt42822;
+    public int fieldInt42823;
+    public int fieldInt42824;
+    public int fieldInt42825;
+    public int fieldInt42826;
+    public int fieldInt42827;
+    public int fieldInt42828;
+    public int fieldInt42829;
+    public int fieldInt42830;
+    public int fieldInt42831;
+    public int fieldInt42832;
+    public int fieldInt42833;
+    public int fieldInt42834;
+    public int fieldInt42835;
+    public int fieldInt42836;
+    public int fieldInt42837;
+    public int fieldInt42838;
+    public int fieldInt42839;
+    public int fieldInt42840;
+    public int fieldInt42841;
+    public int fieldInt42842;
+    public int fieldInt42843;
+    public int fieldInt42844;
+    public int fieldInt42845;
+    public int fieldInt42846;
+    public int fieldInt42847;
+    public int fieldInt42848;
+    public int fieldInt42849;
+    public int fieldInt42850;
+    public int fieldInt42851;
+    public int fieldInt42852;
+    public int fieldInt42853;
+    public int fieldInt42854;
+    public int fieldInt42855;
+    public int fieldInt42856;
+    public int fieldInt42857;
+    public int fieldInt42858;
+    public int fieldInt42859;
+    public int fieldInt42860;
+    public int fieldInt42861;
+    public int fieldInt42862;
+    public int fieldInt42863;
+    public int fieldInt42864;
+    public int fieldInt42865;
+    public int fieldInt42866;
+    public int fieldInt42867;
+    public int fieldInt42868;
+    public int fieldInt42869;
+    public int fieldInt42870;
+    public int fieldInt42871;
+    public int fieldInt42872;
+    public int fieldInt42873;
+    public int fieldInt42874;
+    public int fieldInt42875;
+    public int fieldInt42876;
+    public int fieldInt42877;
+    public int fieldInt42878;
+    public int fieldInt42879;
+    public int fieldInt42880;
+    public int fieldInt42881;
+    public int fieldInt42882;
+    public int fieldInt42883;
+    public int fieldInt42884;
+    public int fieldInt42885;
+    public int fieldInt42886;
+    public int fieldInt42887;
+    public int fieldInt42888;
+    public int fieldInt42889;
+    public int fieldInt42890;
+    public int fieldInt42891;
+    public int fieldInt42892;
+    public int fieldInt42893;
+    public int fieldInt42894;
+    public int fieldInt42895;
+    public int fieldInt42896;
+    public int fieldInt42897;
+    public int fieldInt42898;
+    public int fieldInt42899;
+    public int fieldInt42900;
+    public int fieldInt42901;
+    public int fieldInt42902;
+    public int fieldInt42903;
+    public int fieldInt42904;
+    public int fieldInt42905;
+    public int fieldInt42906;
+    public int fieldInt42907;
+    public int fieldInt42908;
+    public int fieldInt42909;
+    public int fieldInt42910;
+    public int fieldInt42911;
+    public int fieldInt42912;
+    public int fieldInt42913;
+    public int fieldInt42914;
+    public int fieldInt42915;
+    public int fieldInt42916;
+    public int fieldInt42917;
+    public int fieldInt42918;
+    public int fieldInt42919;
+    public int fieldInt42920;
+    public int fieldInt42921;
+    public int fieldInt42922;
+    public int fieldInt42923;
+    public int fieldInt42924;
+    public int fieldInt42925;
+    public int fieldInt42926;
+    public int fieldInt42927;
+    public int fieldInt42928;
+    public int fieldInt42929;
+    public int fieldInt42930;
+    public int fieldInt42931;
+    public int fieldInt42932;
+    public int fieldInt42933;
+    public int fieldInt42934;
+    public int fieldInt42935;
+    public int fieldInt42936;
+    public int fieldInt42937;
+    public int fieldInt42938;
+    public int fieldInt42939;
+    public int fieldInt42940;
+    public int fieldInt42941;
+    public int fieldInt42942;
+    public int fieldInt42943;
+    public int fieldInt42944;
+    public int fieldInt42945;
+    public int fieldInt42946;
+    public int fieldInt42947;
+    public int fieldInt42948;
+    public int fieldInt42949;
+    public int fieldInt42950;
+    public int fieldInt42951;
+    public int fieldInt42952;
+    public int fieldInt42953;
+    public int fieldInt42954;
+    public int fieldInt42955;
+    public int fieldInt42956;
+    public int fieldInt42957;
+    public int fieldInt42958;
+    public int fieldInt42959;
+    public int fieldInt42960;
+    public int fieldInt42961;
+    public int fieldInt42962;
+    public int fieldInt42963;
+    public int fieldInt42964;
+    public int fieldInt42965;
+    public int fieldInt42966;
+    public int fieldInt42967;
+    public int fieldInt42968;
+    public int fieldInt42969;
+    public int fieldInt42970;
+    public int fieldInt42971;
+    public int fieldInt42972;
+    public int fieldInt42973;
+    public int fieldInt42974;
+    public int fieldInt42975;
+    public int fieldInt42976;
+    public int fieldInt42977;
+    public int fieldInt42978;
+    public int fieldInt42979;
+    public int fieldInt42980;
+    public int fieldInt42981;
+    public int fieldInt42982;
+    public int fieldInt42983;
+    public int fieldInt42984;
+    public int fieldInt42985;
+    public int fieldInt42986;
+    public int fieldInt42987;
+    public int fieldInt42988;
+    public int fieldInt42989;
+    public int fieldInt42990;
+    public int fieldInt42991;
+    public int fieldInt42992;
+    public int fieldInt42993;
+    public int fieldInt42994;
+    public int fieldInt42995;
+    public int fieldInt42996;
+    public int fieldInt42997;
+    public int fieldInt42998;
+    public int fieldInt42999;
+    public int fieldInt43000;
+    public int fieldInt43001;
+    public int fieldInt43002;
+    public int fieldInt43003;
+    public int fieldInt43004;
+    public int fieldInt43005;
+    public int fieldInt43006;
+    public int fieldInt43007;
+    public int fieldInt43008;
+    public int fieldInt43009;
+    public int fieldInt43010;
+    public int fieldInt43011;
+    public int fieldInt43012;
+    public int fieldInt43013;
+    public int fieldInt43014;
+    public int fieldInt43015;
+    public int fieldInt43016;
+    public int fieldInt43017;
+    public int fieldInt43018;
+    public int fieldInt43019;
+    public int fieldInt43020;
+    public int fieldInt43021;
+    public int fieldInt43022;
+    public int fieldInt43023;
+    public int fieldInt43024;
+    public int fieldInt43025;
+    public int fieldInt43026;
+    public int fieldInt43027;
+    public int fieldInt43028;
+    public int fieldInt43029;
+    public int fieldInt43030;
+    public int fieldInt43031;
+    public int fieldInt43032;
+    public int fieldInt43033;
+    public int fieldInt43034;
+    public int fieldInt43035;
+    public int fieldInt43036;
+    public int fieldInt43037;
+    public int fieldInt43038;
+    public int fieldInt43039;
+    public int fieldInt43040;
+    public int fieldInt43041;
+    public int fieldInt43042;
+    public int fieldInt43043;
+    public int fieldInt43044;
+    public int fieldInt43045;
+    public int fieldInt43046;
+    public int fieldInt43047;
+    public int fieldInt43048;
+    public int fieldInt43049;
+    public int fieldInt43050;
+    public int fieldInt43051;
+    public int fieldInt43052;
+    public int fieldInt43053;
+    public int fieldInt43054;
+    public int fieldInt43055;
+    public int fieldInt43056;
+    public int fieldInt43057;
+    public int fieldInt43058;
+    public int fieldInt43059;
+    public int fieldInt43060;
+    public int fieldInt43061;
+    public int fieldInt43062;
+    public int fieldInt43063;
+    public int fieldInt43064;
+    public int fieldInt43065;
+    public int fieldInt43066;
+    public int fieldInt43067;
+    public int fieldInt43068;
+    public int fieldInt43069;
+    public int fieldInt43070;
+    public int fieldInt43071;
+    public int fieldInt43072;
+    public int fieldInt43073;
+    public int fieldInt43074;
+    public int fieldInt43075;
+    public int fieldInt43076;
+    public int fieldInt43077;
+    public int fieldInt43078;
+    public int fieldInt43079;
+    public int fieldInt43080;
+    public int fieldInt43081;
+    public int fieldInt43082;
+    public int fieldInt43083;
+    public int fieldInt43084;
+    public int fieldInt43085;
+    public int fieldInt43086;
+    public int fieldInt43087;
+    public int fieldInt43088;
+    public int fieldInt43089;
+    public int fieldInt43090;
+    public int fieldInt43091;
+    public int fieldInt43092;
+    public int fieldInt43093;
+    public int fieldInt43094;
+    public int fieldInt43095;
+    public int fieldInt43096;
+    public int fieldInt43097;
+    public int fieldInt43098;
+    public int fieldInt43099;
+    public int fieldInt43100;
+    public int fieldInt43101;
+    public int fieldInt43102;
+    public int fieldInt43103;
+    public int fieldInt43104;
+    public int fieldInt43105;
+    public int fieldInt43106;
+    public int fieldInt43107;
+    public int fieldInt43108;
+    public int fieldInt43109;
+    public int fieldInt43110;
+    public int fieldInt43111;
+    public int fieldInt43112;
+    public int fieldInt43113;
+    public int fieldInt43114;
+    public int fieldInt43115;
+    public int fieldInt43116;
+    public int fieldInt43117;
+    public int fieldInt43118;
+    public int fieldInt43119;
+    public int fieldInt43120;
+    public int fieldInt43121;
+    public int fieldInt43122;
+    public int fieldInt43123;
+    public int fieldInt43124;
+    public int fieldInt43125;
+    public int fieldInt43126;
+    public int fieldInt43127;
+    public int fieldInt43128;
+    public int fieldInt43129;
+    public int fieldInt43130;
+    public int fieldInt43131;
+    public int fieldInt43132;
+    public int fieldInt43133;
+    public int fieldInt43134;
+    public int fieldInt43135;
+    public int fieldInt43136;
+    public int fieldInt43137;
+    public int fieldInt43138;
+    public int fieldInt43139;
+    public int fieldInt43140;
+    public int fieldInt43141;
+    public int fieldInt43142;
+    public int fieldInt43143;
+    public int fieldInt43144;
+    public int fieldInt43145;
+    public int fieldInt43146;
+    public int fieldInt43147;
+    public int fieldInt43148;
+    public int fieldInt43149;
+    public int fieldInt43150;
+    public int fieldInt43151;
+    public int fieldInt43152;
+    public int fieldInt43153;
+    public int fieldInt43154;
+    public int fieldInt43155;
+    public int fieldInt43156;
+    public int fieldInt43157;
+    public int fieldInt43158;
+    public int fieldInt43159;
+    public int fieldInt43160;
+    public int fieldInt43161;
+    public int fieldInt43162;
+    public int fieldInt43163;
+    public int fieldInt43164;
+    public int fieldInt43165;
+    public int fieldInt43166;
+    public int fieldInt43167;
+    public int fieldInt43168;
+    public int fieldInt43169;
+    public int fieldInt43170;
+    public int fieldInt43171;
+    public int fieldInt43172;
+    public int fieldInt43173;
+    public int fieldInt43174;
+    public int fieldInt43175;
+    public int fieldInt43176;
+    public int fieldInt43177;
+    public int fieldInt43178;
+    public int fieldInt43179;
+    public int fieldInt43180;
+    public int fieldInt43181;
+    public int fieldInt43182;
+    public int fieldInt43183;
+    public int fieldInt43184;
+    public int fieldInt43185;
+    public int fieldInt43186;
+    public int fieldInt43187;
+    public int fieldInt43188;
+    public int fieldInt43189;
+    public int fieldInt43190;
+    public int fieldInt43191;
+    public int fieldInt43192;
+    public int fieldInt43193;
+    public int fieldInt43194;
+    public int fieldInt43195;
+    public int fieldInt43196;
+    public int fieldInt43197;
+    public int fieldInt43198;
+    public int fieldInt43199;
+    public int fieldInt43200;
+    public int fieldInt43201;
+    public int fieldInt43202;
+    public int fieldInt43203;
+    public int fieldInt43204;
+    public int fieldInt43205;
+    public int fieldInt43206;
+    public int fieldInt43207;
+    public int fieldInt43208;
+    public int fieldInt43209;
+    public int fieldInt43210;
+    public int fieldInt43211;
+    public int fieldInt43212;
+    public int fieldInt43213;
+    public int fieldInt43214;
+    public int fieldInt43215;
+    public int fieldInt43216;
+    public int fieldInt43217;
+    public int fieldInt43218;
+    public int fieldInt43219;
+    public int fieldInt43220;
+    public int fieldInt43221;
+    public int fieldInt43222;
+    public int fieldInt43223;
+    public int fieldInt43224;
+    public int fieldInt43225;
+    public int fieldInt43226;
+    public int fieldInt43227;
+    public int fieldInt43228;
+    public int fieldInt43229;
+    public int fieldInt43230;
+    public int fieldInt43231;
+    public int fieldInt43232;
+    public int fieldInt43233;
+    public int fieldInt43234;
+    public int fieldInt43235;
+    public int fieldInt43236;
+    public int fieldInt43237;
+    public int fieldInt43238;
+    public int fieldInt43239;
+    public int fieldInt43240;
+    public int fieldInt43241;
+    public int fieldInt43242;
+    public int fieldInt43243;
+    public int fieldInt43244;
+    public int fieldInt43245;
+    public int fieldInt43246;
+    public int fieldInt43247;
+    public int fieldInt43248;
+    public int fieldInt43249;
+    public int fieldInt43250;
+    public int fieldInt43251;
+    public int fieldInt43252;
+    public int fieldInt43253;
+    public int fieldInt43254;
+    public int fieldInt43255;
+    public int fieldInt43256;
+    public int fieldInt43257;
+    public int fieldInt43258;
+    public int fieldInt43259;
+    public int fieldInt43260;
+    public int fieldInt43261;
+    public int fieldInt43262;
+    public int fieldInt43263;
+    public int fieldInt43264;
+    public int fieldInt43265;
+    public int fieldInt43266;
+    public int fieldInt43267;
+    public int fieldInt43268;
+    public int fieldInt43269;
+    public int fieldInt43270;
+    public int fieldInt43271;
+    public int fieldInt43272;
+    public int fieldInt43273;
+    public int fieldInt43274;
+    public int fieldInt43275;
+    public int fieldInt43276;
+    public int fieldInt43277;
+    public int fieldInt43278;
+    public int fieldInt43279;
+    public int fieldInt43280;
+    public int fieldInt43281;
+    public int fieldInt43282;
+    public int fieldInt43283;
+    public int fieldInt43284;
+    public int fieldInt43285;
+    public int fieldInt43286;
+    public int fieldInt43287;
+    public int fieldInt43288;
+    public int fieldInt43289;
+    public int fieldInt43290;
+    public int fieldInt43291;
+    public int fieldInt43292;
+    public int fieldInt43293;
+    public int fieldInt43294;
+    public int fieldInt43295;
+    public int fieldInt43296;
+    public int fieldInt43297;
+    public int fieldInt43298;
+    public int fieldInt43299;
+    public int fieldInt43300;
+    public int fieldInt43301;
+    public int fieldInt43302;
+    public int fieldInt43303;
+    public int fieldInt43304;
+    public int fieldInt43305;
+    public int fieldInt43306;
+    public int fieldInt43307;
+    public int fieldInt43308;
+    public int fieldInt43309;
+    public int fieldInt43310;
+    public int fieldInt43311;
+    public int fieldInt43312;
+    public int fieldInt43313;
+    public int fieldInt43314;
+    public int fieldInt43315;
+    public int fieldInt43316;
+    public int fieldInt43317;
+    public int fieldInt43318;
+    public int fieldInt43319;
+    public int fieldInt43320;
+    public int fieldInt43321;
+    public int fieldInt43322;
+    public int fieldInt43323;
+    public int fieldInt43324;
+    public int fieldInt43325;
+    public int fieldInt43326;
+    public int fieldInt43327;
+    public int fieldInt43328;
+    public int fieldInt43329;
+    public int fieldInt43330;
+    public int fieldInt43331;
+    public int fieldInt43332;
+    public int fieldInt43333;
+    public int fieldInt43334;
+    public int fieldInt43335;
+    public int fieldInt43336;
+    public int fieldInt43337;
+    public int fieldInt43338;
+    public int fieldInt43339;
+    public int fieldInt43340;
+    public int fieldInt43341;
+    public int fieldInt43342;
+    public int fieldInt43343;
+    public int fieldInt43344;
+    public int fieldInt43345;
+    public int fieldInt43346;
+    public int fieldInt43347;
+    public int fieldInt43348;
+    public int fieldInt43349;
+    public int fieldInt43350;
+    public int fieldInt43351;
+    public int fieldInt43352;
+    public int fieldInt43353;
+    public int fieldInt43354;
+    public int fieldInt43355;
+    public int fieldInt43356;
+    public int fieldInt43357;
+    public int fieldInt43358;
+    public int fieldInt43359;
+    public int fieldInt43360;
+    public int fieldInt43361;
+    public int fieldInt43362;
+    public int fieldInt43363;
+    public int fieldInt43364;
+    public int fieldInt43365;
+    public int fieldInt43366;
+    public int fieldInt43367;
+    public int fieldInt43368;
+    public int fieldInt43369;
+    public int fieldInt43370;
+    public int fieldInt43371;
+    public int fieldInt43372;
+    public int fieldInt43373;
+    public int fieldInt43374;
+    public int fieldInt43375;
+    public int fieldInt43376;
+    public int fieldInt43377;
+    public int fieldInt43378;
+    public int fieldInt43379;
+    public int fieldInt43380;
+    public int fieldInt43381;
+    public int fieldInt43382;
+    public int fieldInt43383;
+    public int fieldInt43384;
+    public int fieldInt43385;
+    public int fieldInt43386;
+    public int fieldInt43387;
+    public int fieldInt43388;
+    public int fieldInt43389;
+    public int fieldInt43390;
+    public int fieldInt43391;
+    public int fieldInt43392;
+    public int fieldInt43393;
+    public int fieldInt43394;
+    public int fieldInt43395;
+    public int fieldInt43396;
+    public int fieldInt43397;
+    public int fieldInt43398;
+    public int fieldInt43399;
+    public int fieldInt43400;
+    public int fieldInt43401;
+    public int fieldInt43402;
+    public int fieldInt43403;
+    public int fieldInt43404;
+    public int fieldInt43405;
+    public int fieldInt43406;
+    public int fieldInt43407;
+    public int fieldInt43408;
+    public int fieldInt43409;
+    public int fieldInt43410;
+    public int fieldInt43411;
+    public int fieldInt43412;
+    public int fieldInt43413;
+    public int fieldInt43414;
+    public int fieldInt43415;
+    public int fieldInt43416;
+    public int fieldInt43417;
+    public int fieldInt43418;
+    public int fieldInt43419;
+    public int fieldInt43420;
+    public int fieldInt43421;
+    public int fieldInt43422;
+    public int fieldInt43423;
+    public int fieldInt43424;
+    public int fieldInt43425;
+    public int fieldInt43426;
+    public int fieldInt43427;
+    public int fieldInt43428;
+    public int fieldInt43429;
+    public int fieldInt43430;
+    public int fieldInt43431;
+    public int fieldInt43432;
+    public int fieldInt43433;
+    public int fieldInt43434;
+    public int fieldInt43435;
+    public int fieldInt43436;
+    public int fieldInt43437;
+    public int fieldInt43438;
+    public int fieldInt43439;
+    public int fieldInt43440;
+    public int fieldInt43441;
+    public int fieldInt43442;
+    public int fieldInt43443;
+    public int fieldInt43444;
+    public int fieldInt43445;
+    public int fieldInt43446;
+    public int fieldInt43447;
+    public int fieldInt43448;
+    public int fieldInt43449;
+    public int fieldInt43450;
+    public int fieldInt43451;
+    public int fieldInt43452;
+    public int fieldInt43453;
+    public int fieldInt43454;
+    public int fieldInt43455;
+    public int fieldInt43456;
+    public int fieldInt43457;
+    public int fieldInt43458;
+    public int fieldInt43459;
+    public int fieldInt43460;
+    public int fieldInt43461;
+    public int fieldInt43462;
+    public int fieldInt43463;
+    public int fieldInt43464;
+    public int fieldInt43465;
+    public int fieldInt43466;
+    public int fieldInt43467;
+    public int fieldInt43468;
+    public int fieldInt43469;
+    public int fieldInt43470;
+    public int fieldInt43471;
+    public int fieldInt43472;
+    public int fieldInt43473;
+    public int fieldInt43474;
+    public int fieldInt43475;
+    public int fieldInt43476;
+    public int fieldInt43477;
+    public int fieldInt43478;
+    public int fieldInt43479;
+    public int fieldInt43480;
+    public int fieldInt43481;
+    public int fieldInt43482;
+    public int fieldInt43483;
+    public int fieldInt43484;
+    public int fieldInt43485;
+    public int fieldInt43486;
+    public int fieldInt43487;
+    public int fieldInt43488;
+    public int fieldInt43489;
+    public int fieldInt43490;
+    public int fieldInt43491;
+    public int fieldInt43492;
+    public int fieldInt43493;
+    public int fieldInt43494;
+    public int fieldInt43495;
+    public int fieldInt43496;
+    public int fieldInt43497;
+    public int fieldInt43498;
+    public int fieldInt43499;
+    public int fieldInt43500;
+    public int fieldInt43501;
+    public int fieldInt43502;
+    public int fieldInt43503;
+    public int fieldInt43504;
+    public int fieldInt43505;
+    public int fieldInt43506;
+    public int fieldInt43507;
+    public int fieldInt43508;
+    public int fieldInt43509;
+    public int fieldInt43510;
+    public int fieldInt43511;
+    public int fieldInt43512;
+    public int fieldInt43513;
+    public int fieldInt43514;
+    public int fieldInt43515;
+    public int fieldInt43516;
+    public int fieldInt43517;
+    public int fieldInt43518;
+    public int fieldInt43519;
+    public int fieldInt43520;
+    public int fieldInt43521;
+    public int fieldInt43522;
+    public int fieldInt43523;
+    public int fieldInt43524;
+    public int fieldInt43525;
+    public int fieldInt43526;
+    public int fieldInt43527;
+    public int fieldInt43528;
+    public int fieldInt43529;
+    public int fieldInt43530;
+    public int fieldInt43531;
+    public int fieldInt43532;
+    public int fieldInt43533;
+    public int fieldInt43534;
+    public int fieldInt43535;
+    public int fieldInt43536;
+    public int fieldInt43537;
+    public int fieldInt43538;
+    public int fieldInt43539;
+    public int fieldInt43540;
+    public int fieldInt43541;
+    public int fieldInt43542;
+    public int fieldInt43543;
+    public int fieldInt43544;
+    public int fieldInt43545;
+    public int fieldInt43546;
+    public int fieldInt43547;
+    public int fieldInt43548;
+    public int fieldInt43549;
+    public int fieldInt43550;
+    public int fieldInt43551;
+    public int fieldInt43552;
+    public int fieldInt43553;
+    public int fieldInt43554;
+    public int fieldInt43555;
+    public int fieldInt43556;
+    public int fieldInt43557;
+    public int fieldInt43558;
+    public int fieldInt43559;
+    public int fieldInt43560;
+    public int fieldInt43561;
+    public int fieldInt43562;
+    public int fieldInt43563;
+    public int fieldInt43564;
+    public int fieldInt43565;
+    public int fieldInt43566;
+    public int fieldInt43567;
+    public int fieldInt43568;
+    public int fieldInt43569;
+    public int fieldInt43570;
+    public int fieldInt43571;
+    public int fieldInt43572;
+    public int fieldInt43573;
+    public int fieldInt43574;
+    public int fieldInt43575;
+    public int fieldInt43576;
+    public int fieldInt43577;
+    public int fieldInt43578;
+    public int fieldInt43579;
+    public int fieldInt43580;
+    public int fieldInt43581;
+    public int fieldInt43582;
+    public int fieldInt43583;
+    public int fieldInt43584;
+    public int fieldInt43585;
+    public int fieldInt43586;
+    public int fieldInt43587;
+    public int fieldInt43588;
+    public int fieldInt43589;
+    public int fieldInt43590;
+    public int fieldInt43591;
+    public int fieldInt43592;
+    public int fieldInt43593;
+    public int fieldInt43594;
+    public int fieldInt43595;
+    public int fieldInt43596;
+    public int fieldInt43597;
+    public int fieldInt43598;
+    public int fieldInt43599;
+    public int fieldInt43600;
+    public int fieldInt43601;
+    public int fieldInt43602;
+    public int fieldInt43603;
+    public int fieldInt43604;
+    public int fieldInt43605;
+    public int fieldInt43606;
+    public int fieldInt43607;
+    public int fieldInt43608;
+    public int fieldInt43609;
+    public int fieldInt43610;
+    public int fieldInt43611;
+    public int fieldInt43612;
+    public int fieldInt43613;
+    public int fieldInt43614;
+    public int fieldInt43615;
+    public int fieldInt43616;
+    public int fieldInt43617;
+    public int fieldInt43618;
+    public int fieldInt43619;
+    public int fieldInt43620;
+    public int fieldInt43621;
+    public int fieldInt43622;
+    public int fieldInt43623;
+    public int fieldInt43624;
+    public int fieldInt43625;
+    public int fieldInt43626;
+    public int fieldInt43627;
+    public int fieldInt43628;
+    public int fieldInt43629;
+    public int fieldInt43630;
+    public int fieldInt43631;
+    public int fieldInt43632;
+    public int fieldInt43633;
+    public int fieldInt43634;
+    public int fieldInt43635;
+    public int fieldInt43636;
+    public int fieldInt43637;
+    public int fieldInt43638;
+    public int fieldInt43639;
+    public int fieldInt43640;
+    public int fieldInt43641;
+    public int fieldInt43642;
+    public int fieldInt43643;
+    public int fieldInt43644;
+    public int fieldInt43645;
+    public int fieldInt43646;
+    public int fieldInt43647;
+    public int fieldInt43648;
+    public int fieldInt43649;
+    public int fieldInt43650;
+    public int fieldInt43651;
+    public int fieldInt43652;
+    public int fieldInt43653;
+    public int fieldInt43654;
+    public int fieldInt43655;
+    public int fieldInt43656;
+    public int fieldInt43657;
+    public int fieldInt43658;
+    public int fieldInt43659;
+    public int fieldInt43660;
+    public int fieldInt43661;
+    public int fieldInt43662;
+    public int fieldInt43663;
+    public int fieldInt43664;
+    public int fieldInt43665;
+    public int fieldInt43666;
+    public int fieldInt43667;
+    public int fieldInt43668;
+    public int fieldInt43669;
+    public int fieldInt43670;
+    public int fieldInt43671;
+    public int fieldInt43672;
+    public int fieldInt43673;
+    public int fieldInt43674;
+    public int fieldInt43675;
+    public int fieldInt43676;
+    public int fieldInt43677;
+    public int fieldInt43678;
+    public int fieldInt43679;
+    public int fieldInt43680;
+    public int fieldInt43681;
+    public int fieldInt43682;
+    public int fieldInt43683;
+    public int fieldInt43684;
+    public int fieldInt43685;
+    public int fieldInt43686;
+    public int fieldInt43687;
+    public int fieldInt43688;
+    public int fieldInt43689;
+    public int fieldInt43690;
+    public int fieldInt43691;
+    public int fieldInt43692;
+    public int fieldInt43693;
+    public int fieldInt43694;
+    public int fieldInt43695;
+    public int fieldInt43696;
+    public int fieldInt43697;
+    public int fieldInt43698;
+    public int fieldInt43699;
+    public int fieldInt43700;
+    public int fieldInt43701;
+    public int fieldInt43702;
+    public int fieldInt43703;
+    public int fieldInt43704;
+    public int fieldInt43705;
+    public int fieldInt43706;
+    public int fieldInt43707;
+    public int fieldInt43708;
+    public int fieldInt43709;
+    public int fieldInt43710;
+    public int fieldInt43711;
+    public int fieldInt43712;
+    public int fieldInt43713;
+    public int fieldInt43714;
+    public int fieldInt43715;
+    public int fieldInt43716;
+    public int fieldInt43717;
+    public int fieldInt43718;
+    public int fieldInt43719;
+    public int fieldInt43720;
+    public int fieldInt43721;
+    public int fieldInt43722;
+    public int fieldInt43723;
+    public int fieldInt43724;
+    public int fieldInt43725;
+    public int fieldInt43726;
+    public int fieldInt43727;
+    public int fieldInt43728;
+    public int fieldInt43729;
+    public int fieldInt43730;
+    public int fieldInt43731;
+    public int fieldInt43732;
+    public int fieldInt43733;
+    public int fieldInt43734;
+    public int fieldInt43735;
+    public int fieldInt43736;
+    public int fieldInt43737;
+    public int fieldInt43738;
+    public int fieldInt43739;
+    public int fieldInt43740;
+    public int fieldInt43741;
+    public int fieldInt43742;
+    public int fieldInt43743;
+    public int fieldInt43744;
+    public int fieldInt43745;
+    public int fieldInt43746;
+    public int fieldInt43747;
+    public int fieldInt43748;
+    public int fieldInt43749;
+    public int fieldInt43750;
+    public int fieldInt43751;
+    public int fieldInt43752;
+    public int fieldInt43753;
+    public int fieldInt43754;
+    public int fieldInt43755;
+    public int fieldInt43756;
+    public int fieldInt43757;
+    public int fieldInt43758;
+    public int fieldInt43759;
+    public int fieldInt43760;
+    public int fieldInt43761;
+    public int fieldInt43762;
+    public int fieldInt43763;
+    public int fieldInt43764;
+    public int fieldInt43765;
+    public int fieldInt43766;
+    public int fieldInt43767;
+    public int fieldInt43768;
+    public int fieldInt43769;
+    public int fieldInt43770;
+    public int fieldInt43771;
+    public int fieldInt43772;
+    public int fieldInt43773;
+    public int fieldInt43774;
+    public int fieldInt43775;
+    public int fieldInt43776;
+    public int fieldInt43777;
+    public int fieldInt43778;
+    public int fieldInt43779;
+    public int fieldInt43780;
+    public int fieldInt43781;
+    public int fieldInt43782;
+    public int fieldInt43783;
+    public int fieldInt43784;
+    public int fieldInt43785;
+    public int fieldInt43786;
+    public int fieldInt43787;
+    public int fieldInt43788;
+    public int fieldInt43789;
+    public int fieldInt43790;
+    public int fieldInt43791;
+    public int fieldInt43792;
+    public int fieldInt43793;
+    public int fieldInt43794;
+    public int fieldInt43795;
+    public int fieldInt43796;
+    public int fieldInt43797;
+    public int fieldInt43798;
+    public int fieldInt43799;
+    public int fieldInt43800;
+    public int fieldInt43801;
+    public int fieldInt43802;
+    public int fieldInt43803;
+    public int fieldInt43804;
+    public int fieldInt43805;
+    public int fieldInt43806;
+    public int fieldInt43807;
+    public int fieldInt43808;
+    public int fieldInt43809;
+    public int fieldInt43810;
+    public int fieldInt43811;
+    public int fieldInt43812;
+    public int fieldInt43813;
+    public int fieldInt43814;
+    public int fieldInt43815;
+    public int fieldInt43816;
+    public int fieldInt43817;
+    public int fieldInt43818;
+    public int fieldInt43819;
+    public int fieldInt43820;
+    public int fieldInt43821;
+    public int fieldInt43822;
+    public int fieldInt43823;
+    public int fieldInt43824;
+    public int fieldInt43825;
+    public int fieldInt43826;
+    public int fieldInt43827;
+    public int fieldInt43828;
+    public int fieldInt43829;
+    public int fieldInt43830;
+    public int fieldInt43831;
+    public int fieldInt43832;
+    public int fieldInt43833;
+    public int fieldInt43834;
+    public int fieldInt43835;
+    public int fieldInt43836;
+    public int fieldInt43837;
+    public int fieldInt43838;
+    public int fieldInt43839;
+    public int fieldInt43840;
+    public int fieldInt43841;
+    public int fieldInt43842;
+    public int fieldInt43843;
+    public int fieldInt43844;
+    public int fieldInt43845;
+    public int fieldInt43846;
+    public int fieldInt43847;
+    public int fieldInt43848;
+    public int fieldInt43849;
+    public int fieldInt43850;
+    public int fieldInt43851;
+    public int fieldInt43852;
+    public int fieldInt43853;
+    public int fieldInt43854;
+    public int fieldInt43855;
+    public int fieldInt43856;
+    public int fieldInt43857;
+    public int fieldInt43858;
+    public int fieldInt43859;
+    public int fieldInt43860;
+    public int fieldInt43861;
+    public int fieldInt43862;
+    public int fieldInt43863;
+    public int fieldInt43864;
+    public int fieldInt43865;
+    public int fieldInt43866;
+    public int fieldInt43867;
+    public int fieldInt43868;
+    public int fieldInt43869;
+    public int fieldInt43870;
+    public int fieldInt43871;
+    public int fieldInt43872;
+    public int fieldInt43873;
+    public int fieldInt43874;
+    public int fieldInt43875;
+    public int fieldInt43876;
+    public int fieldInt43877;
+    public int fieldInt43878;
+    public int fieldInt43879;
+    public int fieldInt43880;
+    public int fieldInt43881;
+    public int fieldInt43882;
+    public int fieldInt43883;
+    public int fieldInt43884;
+    public int fieldInt43885;
+    public int fieldInt43886;
+    public int fieldInt43887;
+    public int fieldInt43888;
+    public int fieldInt43889;
+    public int fieldInt43890;
+    public int fieldInt43891;
+    public int fieldInt43892;
+    public int fieldInt43893;
+    public int fieldInt43894;
+    public int fieldInt43895;
+    public int fieldInt43896;
+    public int fieldInt43897;
+    public int fieldInt43898;
+    public int fieldInt43899;
+    public int fieldInt43900;
+    public int fieldInt43901;
+    public int fieldInt43902;
+    public int fieldInt43903;
+    public int fieldInt43904;
+    public int fieldInt43905;
+    public int fieldInt43906;
+    public int fieldInt43907;
+    public int fieldInt43908;
+    public int fieldInt43909;
+    public int fieldInt43910;
+    public int fieldInt43911;
+    public int fieldInt43912;
+    public int fieldInt43913;
+    public int fieldInt43914;
+    public int fieldInt43915;
+    public int fieldInt43916;
+    public int fieldInt43917;
+    public int fieldInt43918;
+    public int fieldInt43919;
+    public int fieldInt43920;
+    public int fieldInt43921;
+    public int fieldInt43922;
+    public int fieldInt43923;
+    public int fieldInt43924;
+    public int fieldInt43925;
+    public int fieldInt43926;
+    public int fieldInt43927;
+    public int fieldInt43928;
+    public int fieldInt43929;
+    public int fieldInt43930;
+    public int fieldInt43931;
+    public int fieldInt43932;
+    public int fieldInt43933;
+    public int fieldInt43934;
+    public int fieldInt43935;
+    public int fieldInt43936;
+    public int fieldInt43937;
+    public int fieldInt43938;
+    public int fieldInt43939;
+    public int fieldInt43940;
+    public int fieldInt43941;
+    public int fieldInt43942;
+    public int fieldInt43943;
+    public int fieldInt43944;
+    public int fieldInt43945;
+    public int fieldInt43946;
+    public int fieldInt43947;
+    public int fieldInt43948;
+    public int fieldInt43949;
+    public int fieldInt43950;
+    public int fieldInt43951;
+    public int fieldInt43952;
+    public int fieldInt43953;
+    public int fieldInt43954;
+    public int fieldInt43955;
+    public int fieldInt43956;
+    public int fieldInt43957;
+    public int fieldInt43958;
+    public int fieldInt43959;
+    public int fieldInt43960;
+    public int fieldInt43961;
+    public int fieldInt43962;
+    public int fieldInt43963;
+    public int fieldInt43964;
+    public int fieldInt43965;
+    public int fieldInt43966;
+    public int fieldInt43967;
+    public int fieldInt43968;
+    public int fieldInt43969;
+    public int fieldInt43970;
+    public int fieldInt43971;
+    public int fieldInt43972;
+    public int fieldInt43973;
+    public int fieldInt43974;
+    public int fieldInt43975;
+    public int fieldInt43976;
+    public int fieldInt43977;
+    public int fieldInt43978;
+    public int fieldInt43979;
+    public int fieldInt43980;
+    public int fieldInt43981;
+    public int fieldInt43982;
+    public int fieldInt43983;
+    public int fieldInt43984;
+    public int fieldInt43985;
+    public int fieldInt43986;
+    public int fieldInt43987;
+    public int fieldInt43988;
+    public int fieldInt43989;
+    public int fieldInt43990;
+    public int fieldInt43991;
+    public int fieldInt43992;
+    public int fieldInt43993;
+    public int fieldInt43994;
+    public int fieldInt43995;
+    public int fieldInt43996;
+    public int fieldInt43997;
+    public int fieldInt43998;
+    public int fieldInt43999;
+    public int fieldInt44000;
+    public int fieldInt44001;
+    public int fieldInt44002;
+    public int fieldInt44003;
+    public int fieldInt44004;
+    public int fieldInt44005;
+    public int fieldInt44006;
+    public int fieldInt44007;
+    public int fieldInt44008;
+    public int fieldInt44009;
+    public int fieldInt44010;
+    public int fieldInt44011;
+    public int fieldInt44012;
+    public int fieldInt44013;
+    public int fieldInt44014;
+    public int fieldInt44015;
+    public int fieldInt44016;
+    public int fieldInt44017;
+    public int fieldInt44018;
+    public int fieldInt44019;
+    public int fieldInt44020;
+    public int fieldInt44021;
+    public int fieldInt44022;
+    public int fieldInt44023;
+    public int fieldInt44024;
+    public int fieldInt44025;
+    public int fieldInt44026;
+    public int fieldInt44027;
+    public int fieldInt44028;
+    public int fieldInt44029;
+    public int fieldInt44030;
+    public int fieldInt44031;
+    public int fieldInt44032;
+    public int fieldInt44033;
+    public int fieldInt44034;
+    public int fieldInt44035;
+    public int fieldInt44036;
+    public int fieldInt44037;
+    public int fieldInt44038;
+    public int fieldInt44039;
+    public int fieldInt44040;
+    public int fieldInt44041;
+    public int fieldInt44042;
+    public int fieldInt44043;
+    public int fieldInt44044;
+    public int fieldInt44045;
+    public int fieldInt44046;
+    public int fieldInt44047;
+    public int fieldInt44048;
+    public int fieldInt44049;
+    public int fieldInt44050;
+    public int fieldInt44051;
+    public int fieldInt44052;
+    public int fieldInt44053;
+    public int fieldInt44054;
+    public int fieldInt44055;
+    public int fieldInt44056;
+    public int fieldInt44057;
+    public int fieldInt44058;
+    public int fieldInt44059;
+    public int fieldInt44060;
+    public int fieldInt44061;
+    public int fieldInt44062;
+    public int fieldInt44063;
+    public int fieldInt44064;
+    public int fieldInt44065;
+    public int fieldInt44066;
+    public int fieldInt44067;
+    public int fieldInt44068;
+    public int fieldInt44069;
+    public int fieldInt44070;
+    public int fieldInt44071;
+    public int fieldInt44072;
+    public int fieldInt44073;
+    public int fieldInt44074;
+    public int fieldInt44075;
+    public int fieldInt44076;
+    public int fieldInt44077;
+    public int fieldInt44078;
+    public int fieldInt44079;
+    public int fieldInt44080;
+    public int fieldInt44081;
+    public int fieldInt44082;
+    public int fieldInt44083;
+    public int fieldInt44084;
+    public int fieldInt44085;
+    public int fieldInt44086;
+    public int fieldInt44087;
+    public int fieldInt44088;
+    public int fieldInt44089;
+    public int fieldInt44090;
+    public int fieldInt44091;
+    public int fieldInt44092;
+    public int fieldInt44093;
+    public int fieldInt44094;
+    public int fieldInt44095;
+    public int fieldInt44096;
+    public int fieldInt44097;
+    public int fieldInt44098;
+    public int fieldInt44099;
+    public int fieldInt44100;
+    public int fieldInt44101;
+    public int fieldInt44102;
+    public int fieldInt44103;
+    public int fieldInt44104;
+    public int fieldInt44105;
+    public int fieldInt44106;
+    public int fieldInt44107;
+    public int fieldInt44108;
+    public int fieldInt44109;
+    public int fieldInt44110;
+    public int fieldInt44111;
+    public int fieldInt44112;
+    public int fieldInt44113;
+    public int fieldInt44114;
+    public int fieldInt44115;
+    public int fieldInt44116;
+    public int fieldInt44117;
+    public int fieldInt44118;
+    public int fieldInt44119;
+    public int fieldInt44120;
+    public int fieldInt44121;
+    public int fieldInt44122;
+    public int fieldInt44123;
+    public int fieldInt44124;
+    public int fieldInt44125;
+    public int fieldInt44126;
+    public int fieldInt44127;
+    public int fieldInt44128;
+    public int fieldInt44129;
+    public int fieldInt44130;
+    public int fieldInt44131;
+    public int fieldInt44132;
+    public int fieldInt44133;
+    public int fieldInt44134;
+    public int fieldInt44135;
+    public int fieldInt44136;
+    public int fieldInt44137;
+    public int fieldInt44138;
+    public int fieldInt44139;
+    public int fieldInt44140;
+    public int fieldInt44141;
+    public int fieldInt44142;
+    public int fieldInt44143;
+    public int fieldInt44144;
+    public int fieldInt44145;
+    public int fieldInt44146;
+    public int fieldInt44147;
+    public int fieldInt44148;
+    public int fieldInt44149;
+    public int fieldInt44150;
+    public int fieldInt44151;
+    public int fieldInt44152;
+    public int fieldInt44153;
+    public int fieldInt44154;
+    public int fieldInt44155;
+    public int fieldInt44156;
+    public int fieldInt44157;
+    public int fieldInt44158;
+    public int fieldInt44159;
+    public int fieldInt44160;
+    public int fieldInt44161;
+    public int fieldInt44162;
+    public int fieldInt44163;
+    public int fieldInt44164;
+    public int fieldInt44165;
+    public int fieldInt44166;
+    public int fieldInt44167;
+    public int fieldInt44168;
+    public int fieldInt44169;
+    public int fieldInt44170;
+    public int fieldInt44171;
+    public int fieldInt44172;
+    public int fieldInt44173;
+    public int fieldInt44174;
+    public int fieldInt44175;
+    public int fieldInt44176;
+    public int fieldInt44177;
+    public int fieldInt44178;
+    public int fieldInt44179;
+    public int fieldInt44180;
+    public int fieldInt44181;
+    public int fieldInt44182;
+    public int fieldInt44183;
+    public int fieldInt44184;
+    public int fieldInt44185;
+    public int fieldInt44186;
+    public int fieldInt44187;
+    public int fieldInt44188;
+    public int fieldInt44189;
+    public int fieldInt44190;
+    public int fieldInt44191;
+    public int fieldInt44192;
+    public int fieldInt44193;
+    public int fieldInt44194;
+    public int fieldInt44195;
+    public int fieldInt44196;
+    public int fieldInt44197;
+    public int fieldInt44198;
+    public int fieldInt44199;
+    public int fieldInt44200;
+    public int fieldInt44201;
+    public int fieldInt44202;
+    public int fieldInt44203;
+    public int fieldInt44204;
+    public int fieldInt44205;
+    public int fieldInt44206;
+    public int fieldInt44207;
+    public int fieldInt44208;
+    public int fieldInt44209;
+    public int fieldInt44210;
+    public int fieldInt44211;
+    public int fieldInt44212;
+    public int fieldInt44213;
+    public int fieldInt44214;
+    public int fieldInt44215;
+    public int fieldInt44216;
+    public int fieldInt44217;
+    public int fieldInt44218;
+    public int fieldInt44219;
+    public int fieldInt44220;
+    public int fieldInt44221;
+    public int fieldInt44222;
+    public int fieldInt44223;
+    public int fieldInt44224;
+    public int fieldInt44225;
+    public int fieldInt44226;
+    public int fieldInt44227;
+    public int fieldInt44228;
+    public int fieldInt44229;
+    public int fieldInt44230;
+    public int fieldInt44231;
+    public int fieldInt44232;
+    public int fieldInt44233;
+    public int fieldInt44234;
+    public int fieldInt44235;
+    public int fieldInt44236;
+    public int fieldInt44237;
+    public int fieldInt44238;
+    public int fieldInt44239;
+    public int fieldInt44240;
+    public int fieldInt44241;
+    public int fieldInt44242;
+    public int fieldInt44243;
+    public int fieldInt44244;
+    public int fieldInt44245;
+    public int fieldInt44246;
+    public int fieldInt44247;
+    public int fieldInt44248;
+    public int fieldInt44249;
+    public int fieldInt44250;
+    public int fieldInt44251;
+    public int fieldInt44252;
+    public int fieldInt44253;
+    public int fieldInt44254;
+    public int fieldInt44255;
+    public int fieldInt44256;
+    public int fieldInt44257;
+    public int fieldInt44258;
+    public int fieldInt44259;
+    public int fieldInt44260;
+    public int fieldInt44261;
+    public int fieldInt44262;
+    public int fieldInt44263;
+    public int fieldInt44264;
+    public int fieldInt44265;
+    public int fieldInt44266;
+    public int fieldInt44267;
+    public int fieldInt44268;
+    public int fieldInt44269;
+    public int fieldInt44270;
+    public int fieldInt44271;
+    public int fieldInt44272;
+    public int fieldInt44273;
+    public int fieldInt44274;
+    public int fieldInt44275;
+    public int fieldInt44276;
+    public int fieldInt44277;
+    public int fieldInt44278;
+    public int fieldInt44279;
+    public int fieldInt44280;
+    public int fieldInt44281;
+    public int fieldInt44282;
+    public int fieldInt44283;
+    public int fieldInt44284;
+    public int fieldInt44285;
+    public int fieldInt44286;
+    public int fieldInt44287;
+    public int fieldInt44288;
+    public int fieldInt44289;
+    public int fieldInt44290;
+    public int fieldInt44291;
+    public int fieldInt44292;
+    public int fieldInt44293;
+    public int fieldInt44294;
+    public int fieldInt44295;
+    public int fieldInt44296;
+    public int fieldInt44297;
+    public int fieldInt44298;
+    public int fieldInt44299;
+    public int fieldInt44300;
+    public int fieldInt44301;
+    public int fieldInt44302;
+    public int fieldInt44303;
+    public int fieldInt44304;
+    public int fieldInt44305;
+    public int fieldInt44306;
+    public int fieldInt44307;
+    public int fieldInt44308;
+    public int fieldInt44309;
+    public int fieldInt44310;
+    public int fieldInt44311;
+    public int fieldInt44312;
+    public int fieldInt44313;
+    public int fieldInt44314;
+    public int fieldInt44315;
+    public int fieldInt44316;
+    public int fieldInt44317;
+    public int fieldInt44318;
+    public int fieldInt44319;
+    public int fieldInt44320;
+    public int fieldInt44321;
+    public int fieldInt44322;
+    public int fieldInt44323;
+    public int fieldInt44324;
+    public int fieldInt44325;
+    public int fieldInt44326;
+    public int fieldInt44327;
+    public int fieldInt44328;
+    public int fieldInt44329;
+    public int fieldInt44330;
+    public int fieldInt44331;
+    public int fieldInt44332;
+    public int fieldInt44333;
+    public int fieldInt44334;
+    public int fieldInt44335;
+    public int fieldInt44336;
+    public int fieldInt44337;
+    public int fieldInt44338;
+    public int fieldInt44339;
+    public int fieldInt44340;
+    public int fieldInt44341;
+    public int fieldInt44342;
+    public int fieldInt44343;
+    public int fieldInt44344;
+    public int fieldInt44345;
+    public int fieldInt44346;
+    public int fieldInt44347;
+    public int fieldInt44348;
+    public int fieldInt44349;
+    public int fieldInt44350;
+    public int fieldInt44351;
+    public int fieldInt44352;
+    public int fieldInt44353;
+    public int fieldInt44354;
+    public int fieldInt44355;
+    public int fieldInt44356;
+    public int fieldInt44357;
+    public int fieldInt44358;
+    public int fieldInt44359;
+    public int fieldInt44360;
+    public int fieldInt44361;
+    public int fieldInt44362;
+    public int fieldInt44363;
+    public int fieldInt44364;
+    public int fieldInt44365;
+    public int fieldInt44366;
+    public int fieldInt44367;
+    public int fieldInt44368;
+    public int fieldInt44369;
+    public int fieldInt44370;
+    public int fieldInt44371;
+    public int fieldInt44372;
+    public int fieldInt44373;
+    public int fieldInt44374;
+    public int fieldInt44375;
+    public int fieldInt44376;
+    public int fieldInt44377;
+    public int fieldInt44378;
+    public int fieldInt44379;
+    public int fieldInt44380;
+    public int fieldInt44381;
+    public int fieldInt44382;
+    public int fieldInt44383;
+    public int fieldInt44384;
+    public int fieldInt44385;
+    public int fieldInt44386;
+    public int fieldInt44387;
+    public int fieldInt44388;
+    public int fieldInt44389;
+    public int fieldInt44390;
+    public int fieldInt44391;
+    public int fieldInt44392;
+    public int fieldInt44393;
+    public int fieldInt44394;
+    public int fieldInt44395;
+    public int fieldInt44396;
+    public int fieldInt44397;
+    public int fieldInt44398;
+    public int fieldInt44399;
+    public int fieldInt44400;
+    public int fieldInt44401;
+    public int fieldInt44402;
+    public int fieldInt44403;
+    public int fieldInt44404;
+    public int fieldInt44405;
+    public int fieldInt44406;
+    public int fieldInt44407;
+    public int fieldInt44408;
+    public int fieldInt44409;
+    public int fieldInt44410;
+    public int fieldInt44411;
+    public int fieldInt44412;
+    public int fieldInt44413;
+    public int fieldInt44414;
+    public int fieldInt44415;
+    public int fieldInt44416;
+    public int fieldInt44417;
+    public int fieldInt44418;
+    public int fieldInt44419;
+    public int fieldInt44420;
+    public int fieldInt44421;
+    public int fieldInt44422;
+    public int fieldInt44423;
+    public int fieldInt44424;
+    public int fieldInt44425;
+    public int fieldInt44426;
+    public int fieldInt44427;
+    public int fieldInt44428;
+    public int fieldInt44429;
+    public int fieldInt44430;
+    public int fieldInt44431;
+    public int fieldInt44432;
+    public int fieldInt44433;
+    public int fieldInt44434;
+    public int fieldInt44435;
+    public int fieldInt44436;
+    public int fieldInt44437;
+    public int fieldInt44438;
+    public int fieldInt44439;
+    public int fieldInt44440;
+    public int fieldInt44441;
+    public int fieldInt44442;
+    public int fieldInt44443;
+    public int fieldInt44444;
+    public int fieldInt44445;
+    public int fieldInt44446;
+    public int fieldInt44447;
+    public int fieldInt44448;
+    public int fieldInt44449;
+    public int fieldInt44450;
+    public int fieldInt44451;
+    public int fieldInt44452;
+    public int fieldInt44453;
+    public int fieldInt44454;
+    public int fieldInt44455;
+    public int fieldInt44456;
+    public int fieldInt44457;
+    public int fieldInt44458;
+    public int fieldInt44459;
+    public int fieldInt44460;
+    public int fieldInt44461;
+    public int fieldInt44462;
+    public int fieldInt44463;
+    public int fieldInt44464;
+    public int fieldInt44465;
+    public int fieldInt44466;
+    public int fieldInt44467;
+    public int fieldInt44468;
+    public int fieldInt44469;
+    public int fieldInt44470;
+    public int fieldInt44471;
+    public int fieldInt44472;
+    public int fieldInt44473;
+    public int fieldInt44474;
+    public int fieldInt44475;
+    public int fieldInt44476;
+    public int fieldInt44477;
+    public int fieldInt44478;
+    public int fieldInt44479;
+    public int fieldInt44480;
+    public int fieldInt44481;
+    public int fieldInt44482;
+    public int fieldInt44483;
+    public int fieldInt44484;
+    public int fieldInt44485;
+    public int fieldInt44486;
+    public int fieldInt44487;
+    public int fieldInt44488;
+    public int fieldInt44489;
+    public int fieldInt44490;
+    public int fieldInt44491;
+    public int fieldInt44492;
+    public int fieldInt44493;
+    public int fieldInt44494;
+    public int fieldInt44495;
+    public int fieldInt44496;
+    public int fieldInt44497;
+    public int fieldInt44498;
+    public int fieldInt44499;
+    public int fieldInt44500;
+    public int fieldInt44501;
+    public int fieldInt44502;
+    public int fieldInt44503;
+    public int fieldInt44504;
+    public int fieldInt44505;
+    public int fieldInt44506;
+    public int fieldInt44507;
+    public int fieldInt44508;
+    public int fieldInt44509;
+    public int fieldInt44510;
+    public int fieldInt44511;
+    public int fieldInt44512;
+    public int fieldInt44513;
+    public int fieldInt44514;
+    public int fieldInt44515;
+    public int fieldInt44516;
+    public int fieldInt44517;
+    public int fieldInt44518;
+    public int fieldInt44519;
+    public int fieldInt44520;
+    public int fieldInt44521;
+    public int fieldInt44522;
+    public int fieldInt44523;
+    public int fieldInt44524;
+    public int fieldInt44525;
+    public int fieldInt44526;
+    public int fieldInt44527;
+    public int fieldInt44528;
+    public int fieldInt44529;
+    public int fieldInt44530;
+    public int fieldInt44531;
+    public int fieldInt44532;
+    public int fieldInt44533;
+    public int fieldInt44534;
+    public int fieldInt44535;
+    public int fieldInt44536;
+    public int fieldInt44537;
+    public int fieldInt44538;
+    public int fieldInt44539;
+    public int fieldInt44540;
+    public int fieldInt44541;
+    public int fieldInt44542;
+    public int fieldInt44543;
+    public int fieldInt44544;
+    public int fieldInt44545;
+    public int fieldInt44546;
+    public int fieldInt44547;
+    public int fieldInt44548;
+    public int fieldInt44549;
+    public int fieldInt44550;
+    public int fieldInt44551;
+    public int fieldInt44552;
+    public int fieldInt44553;
+    public int fieldInt44554;
+    public int fieldInt44555;
+    public int fieldInt44556;
+    public int fieldInt44557;
+    public int fieldInt44558;
+    public int fieldInt44559;
+    public int fieldInt44560;
+    public int fieldInt44561;
+    public int fieldInt44562;
+    public int fieldInt44563;
+    public int fieldInt44564;
+    public int fieldInt44565;
+    public int fieldInt44566;
+    public int fieldInt44567;
+    public int fieldInt44568;
+    public int fieldInt44569;
+    public int fieldInt44570;
+    public int fieldInt44571;
+    public int fieldInt44572;
+    public int fieldInt44573;
+    public int fieldInt44574;
+    public int fieldInt44575;
+    public int fieldInt44576;
+    public int fieldInt44577;
+    public int fieldInt44578;
+    public int fieldInt44579;
+    public int fieldInt44580;
+    public int fieldInt44581;
+    public int fieldInt44582;
+    public int fieldInt44583;
+    public int fieldInt44584;
+    public int fieldInt44585;
+    public int fieldInt44586;
+    public int fieldInt44587;
+    public int fieldInt44588;
+    public int fieldInt44589;
+    public int fieldInt44590;
+    public int fieldInt44591;
+    public int fieldInt44592;
+    public int fieldInt44593;
+    public int fieldInt44594;
+    public int fieldInt44595;
+    public int fieldInt44596;
+    public int fieldInt44597;
+    public int fieldInt44598;
+    public int fieldInt44599;
+    public int fieldInt44600;
+    public int fieldInt44601;
+    public int fieldInt44602;
+    public int fieldInt44603;
+    public int fieldInt44604;
+    public int fieldInt44605;
+    public int fieldInt44606;
+    public int fieldInt44607;
+    public int fieldInt44608;
+    public int fieldInt44609;
+    public int fieldInt44610;
+    public int fieldInt44611;
+    public int fieldInt44612;
+    public int fieldInt44613;
+    public int fieldInt44614;
+    public int fieldInt44615;
+    public int fieldInt44616;
+    public int fieldInt44617;
+    public int fieldInt44618;
+    public int fieldInt44619;
+    public int fieldInt44620;
+    public int fieldInt44621;
+    public int fieldInt44622;
+    public int fieldInt44623;
+    public int fieldInt44624;
+    public int fieldInt44625;
+    public int fieldInt44626;
+    public int fieldInt44627;
+    public int fieldInt44628;
+    public int fieldInt44629;
+    public int fieldInt44630;
+    public int fieldInt44631;
+    public int fieldInt44632;
+    public int fieldInt44633;
+    public int fieldInt44634;
+    public int fieldInt44635;
+    public int fieldInt44636;
+    public int fieldInt44637;
+    public int fieldInt44638;
+    public int fieldInt44639;
+    public int fieldInt44640;
+    public int fieldInt44641;
+    public int fieldInt44642;
+    public int fieldInt44643;
+    public int fieldInt44644;
+    public int fieldInt44645;
+    public int fieldInt44646;
+    public int fieldInt44647;
+    public int fieldInt44648;
+    public int fieldInt44649;
+    public int fieldInt44650;
+    public int fieldInt44651;
+    public int fieldInt44652;
+    public int fieldInt44653;
+    public int fieldInt44654;
+    public int fieldInt44655;
+    public int fieldInt44656;
+    public int fieldInt44657;
+    public int fieldInt44658;
+    public int fieldInt44659;
+    public int fieldInt44660;
+    public int fieldInt44661;
+    public int fieldInt44662;
+    public int fieldInt44663;
+    public int fieldInt44664;
+    public int fieldInt44665;
+    public int fieldInt44666;
+    public int fieldInt44667;
+    public int fieldInt44668;
+    public int fieldInt44669;
+    public int fieldInt44670;
+    public int fieldInt44671;
+    public int fieldInt44672;
+    public int fieldInt44673;
+    public int fieldInt44674;
+    public int fieldInt44675;
+    public int fieldInt44676;
+    public int fieldInt44677;
+    public int fieldInt44678;
+    public int fieldInt44679;
+    public int fieldInt44680;
+    public int fieldInt44681;
+    public int fieldInt44682;
+    public int fieldInt44683;
+    public int fieldInt44684;
+    public int fieldInt44685;
+    public int fieldInt44686;
+    public int fieldInt44687;
+    public int fieldInt44688;
+    public int fieldInt44689;
+    public int fieldInt44690;
+    public int fieldInt44691;
+    public int fieldInt44692;
+    public int fieldInt44693;
+    public int fieldInt44694;
+    public int fieldInt44695;
+    public int fieldInt44696;
+    public int fieldInt44697;
+    public int fieldInt44698;
+    public int fieldInt44699;
+    public int fieldInt44700;
+    public int fieldInt44701;
+    public int fieldInt44702;
+    public int fieldInt44703;
+    public int fieldInt44704;
+    public int fieldInt44705;
+    public int fieldInt44706;
+    public int fieldInt44707;
+    public int fieldInt44708;
+    public int fieldInt44709;
+    public int fieldInt44710;
+    public int fieldInt44711;
+    public int fieldInt44712;
+    public int fieldInt44713;
+    public int fieldInt44714;
+    public int fieldInt44715;
+    public int fieldInt44716;
+    public int fieldInt44717;
+    public int fieldInt44718;
+    public int fieldInt44719;
+    public int fieldInt44720;
+    public int fieldInt44721;
+    public int fieldInt44722;
+    public int fieldInt44723;
+    public int fieldInt44724;
+    public int fieldInt44725;
+    public int fieldInt44726;
+    public int fieldInt44727;
+    public int fieldInt44728;
+    public int fieldInt44729;
+    public int fieldInt44730;
+    public int fieldInt44731;
+    public int fieldInt44732;
+    public int fieldInt44733;
+    public int fieldInt44734;
+    public int fieldInt44735;
+    public int fieldInt44736;
+    public int fieldInt44737;
+    public int fieldInt44738;
+    public int fieldInt44739;
+    public int fieldInt44740;
+    public int fieldInt44741;
+    public int fieldInt44742;
+    public int fieldInt44743;
+    public int fieldInt44744;
+    public int fieldInt44745;
+    public int fieldInt44746;
+    public int fieldInt44747;
+    public int fieldInt44748;
+    public int fieldInt44749;
+    public int fieldInt44750;
+    public int fieldInt44751;
+    public int fieldInt44752;
+    public int fieldInt44753;
+    public int fieldInt44754;
+    public int fieldInt44755;
+    public int fieldInt44756;
+    public int fieldInt44757;
+    public int fieldInt44758;
+    public int fieldInt44759;
+    public int fieldInt44760;
+    public int fieldInt44761;
+    public int fieldInt44762;
+    public int fieldInt44763;
+    public int fieldInt44764;
+    public int fieldInt44765;
+    public int fieldInt44766;
+    public int fieldInt44767;
+    public int fieldInt44768;
+    public int fieldInt44769;
+    public int fieldInt44770;
+    public int fieldInt44771;
+    public int fieldInt44772;
+    public int fieldInt44773;
+    public int fieldInt44774;
+    public int fieldInt44775;
+    public int fieldInt44776;
+    public int fieldInt44777;
+    public int fieldInt44778;
+    public int fieldInt44779;
+    public int fieldInt44780;
+    public int fieldInt44781;
+    public int fieldInt44782;
+    public int fieldInt44783;
+    public int fieldInt44784;
+    public int fieldInt44785;
+    public int fieldInt44786;
+    public int fieldInt44787;
+    public int fieldInt44788;
+    public int fieldInt44789;
+    public int fieldInt44790;
+    public int fieldInt44791;
+    public int fieldInt44792;
+    public int fieldInt44793;
+    public int fieldInt44794;
+    public int fieldInt44795;
+    public int fieldInt44796;
+    public int fieldInt44797;
+    public int fieldInt44798;
+    public int fieldInt44799;
+    public int fieldInt44800;
+    public int fieldInt44801;
+    public int fieldInt44802;
+    public int fieldInt44803;
+    public int fieldInt44804;
+    public int fieldInt44805;
+    public int fieldInt44806;
+    public int fieldInt44807;
+    public int fieldInt44808;
+    public int fieldInt44809;
+    public int fieldInt44810;
+    public int fieldInt44811;
+    public int fieldInt44812;
+    public int fieldInt44813;
+    public int fieldInt44814;
+    public int fieldInt44815;
+    public int fieldInt44816;
+    public int fieldInt44817;
+    public int fieldInt44818;
+    public int fieldInt44819;
+    public int fieldInt44820;
+    public int fieldInt44821;
+    public int fieldInt44822;
+    public int fieldInt44823;
+    public int fieldInt44824;
+    public int fieldInt44825;
+    public int fieldInt44826;
+    public int fieldInt44827;
+    public int fieldInt44828;
+    public int fieldInt44829;
+    public int fieldInt44830;
+    public int fieldInt44831;
+    public int fieldInt44832;
+    public int fieldInt44833;
+    public int fieldInt44834;
+    public int fieldInt44835;
+    public int fieldInt44836;
+    public int fieldInt44837;
+    public int fieldInt44838;
+    public int fieldInt44839;
+    public int fieldInt44840;
+    public int fieldInt44841;
+    public int fieldInt44842;
+    public int fieldInt44843;
+    public int fieldInt44844;
+    public int fieldInt44845;
+    public int fieldInt44846;
+    public int fieldInt44847;
+    public int fieldInt44848;
+    public int fieldInt44849;
+    public int fieldInt44850;
+    public int fieldInt44851;
+    public int fieldInt44852;
+    public int fieldInt44853;
+    public int fieldInt44854;
+    public int fieldInt44855;
+    public int fieldInt44856;
+    public int fieldInt44857;
+    public int fieldInt44858;
+    public int fieldInt44859;
+    public int fieldInt44860;
+    public int fieldInt44861;
+    public int fieldInt44862;
+    public int fieldInt44863;
+    public int fieldInt44864;
+    public int fieldInt44865;
+    public int fieldInt44866;
+    public int fieldInt44867;
+    public int fieldInt44868;
+    public int fieldInt44869;
+    public int fieldInt44870;
+    public int fieldInt44871;
+    public int fieldInt44872;
+    public int fieldInt44873;
+    public int fieldInt44874;
+    public int fieldInt44875;
+    public int fieldInt44876;
+    public int fieldInt44877;
+    public int fieldInt44878;
+    public int fieldInt44879;
+    public int fieldInt44880;
+    public int fieldInt44881;
+    public int fieldInt44882;
+    public int fieldInt44883;
+    public int fieldInt44884;
+    public int fieldInt44885;
+    public int fieldInt44886;
+    public int fieldInt44887;
+    public int fieldInt44888;
+    public int fieldInt44889;
+    public int fieldInt44890;
+    public int fieldInt44891;
+    public int fieldInt44892;
+    public int fieldInt44893;
+    public int fieldInt44894;
+    public int fieldInt44895;
+    public int fieldInt44896;
+    public int fieldInt44897;
+    public int fieldInt44898;
+    public int fieldInt44899;
+    public int fieldInt44900;
+    public int fieldInt44901;
+    public int fieldInt44902;
+    public int fieldInt44903;
+    public int fieldInt44904;
+    public int fieldInt44905;
+    public int fieldInt44906;
+    public int fieldInt44907;
+    public int fieldInt44908;
+    public int fieldInt44909;
+    public int fieldInt44910;
+    public int fieldInt44911;
+    public int fieldInt44912;
+    public int fieldInt44913;
+    public int fieldInt44914;
+    public int fieldInt44915;
+    public int fieldInt44916;
+    public int fieldInt44917;
+    public int fieldInt44918;
+    public int fieldInt44919;
+    public int fieldInt44920;
+    public int fieldInt44921;
+    public int fieldInt44922;
+    public int fieldInt44923;
+    public int fieldInt44924;
+    public int fieldInt44925;
+    public int fieldInt44926;
+    public int fieldInt44927;
+    public int fieldInt44928;
+    public int fieldInt44929;
+    public int fieldInt44930;
+    public int fieldInt44931;
+    public int fieldInt44932;
+    public int fieldInt44933;
+    public int fieldInt44934;
+    public int fieldInt44935;
+    public int fieldInt44936;
+    public int fieldInt44937;
+    public int fieldInt44938;
+    public int fieldInt44939;
+    public int fieldInt44940;
+    public int fieldInt44941;
+    public int fieldInt44942;
+    public int fieldInt44943;
+    public int fieldInt44944;
+    public int fieldInt44945;
+    public int fieldInt44946;
+    public int fieldInt44947;
+    public int fieldInt44948;
+    public int fieldInt44949;
+    public int fieldInt44950;
+    public int fieldInt44951;
+    public int fieldInt44952;
+    public int fieldInt44953;
+    public int fieldInt44954;
+    public int fieldInt44955;
+    public int fieldInt44956;
+    public int fieldInt44957;
+    public int fieldInt44958;
+    public int fieldInt44959;
+    public int fieldInt44960;
+    public int fieldInt44961;
+    public int fieldInt44962;
+    public int fieldInt44963;
+    public int fieldInt44964;
+    public int fieldInt44965;
+    public int fieldInt44966;
+    public int fieldInt44967;
+    public int fieldInt44968;
+    public int fieldInt44969;
+    public int fieldInt44970;
+    public int fieldInt44971;
+    public int fieldInt44972;
+    public int fieldInt44973;
+    public int fieldInt44974;
+    public int fieldInt44975;
+    public int fieldInt44976;
+    public int fieldInt44977;
+    public int fieldInt44978;
+    public int fieldInt44979;
+    public int fieldInt44980;
+    public int fieldInt44981;
+    public int fieldInt44982;
+    public int fieldInt44983;
+    public int fieldInt44984;
+    public int fieldInt44985;
+    public int fieldInt44986;
+    public int fieldInt44987;
+    public int fieldInt44988;
+    public int fieldInt44989;
+    public int fieldInt44990;
+    public int fieldInt44991;
+    public int fieldInt44992;
+    public int fieldInt44993;
+    public int fieldInt44994;
+    public int fieldInt44995;
+    public int fieldInt44996;
+    public int fieldInt44997;
+    public int fieldInt44998;
+    public int fieldInt44999;
+    public int fieldInt45000;
+    public int fieldInt45001;
+    public int fieldInt45002;
+    public int fieldInt45003;
+    public int fieldInt45004;
+    public int fieldInt45005;
+    public int fieldInt45006;
+    public int fieldInt45007;
+    public int fieldInt45008;
+    public int fieldInt45009;
+    public int fieldInt45010;
+    public int fieldInt45011;
+    public int fieldInt45012;
+    public int fieldInt45013;
+    public int fieldInt45014;
+    public int fieldInt45015;
+    public int fieldInt45016;
+    public int fieldInt45017;
+    public int fieldInt45018;
+    public int fieldInt45019;
+    public int fieldInt45020;
+    public int fieldInt45021;
+    public int fieldInt45022;
+    public int fieldInt45023;
+    public int fieldInt45024;
+    public int fieldInt45025;
+    public int fieldInt45026;
+    public int fieldInt45027;
+    public int fieldInt45028;
+    public int fieldInt45029;
+    public int fieldInt45030;
+    public int fieldInt45031;
+    public int fieldInt45032;
+    public int fieldInt45033;
+    public int fieldInt45034;
+    public int fieldInt45035;
+    public int fieldInt45036;
+    public int fieldInt45037;
+    public int fieldInt45038;
+    public int fieldInt45039;
+    public int fieldInt45040;
+    public int fieldInt45041;
+    public int fieldInt45042;
+    public int fieldInt45043;
+    public int fieldInt45044;
+    public int fieldInt45045;
+    public int fieldInt45046;
+    public int fieldInt45047;
+    public int fieldInt45048;
+    public int fieldInt45049;
+    public int fieldInt45050;
+    public int fieldInt45051;
+    public int fieldInt45052;
+    public int fieldInt45053;
+    public int fieldInt45054;
+    public int fieldInt45055;
+    public int fieldInt45056;
+    public int fieldInt45057;
+    public int fieldInt45058;
+    public int fieldInt45059;
+    public int fieldInt45060;
+    public int fieldInt45061;
+    public int fieldInt45062;
+    public int fieldInt45063;
+    public int fieldInt45064;
+    public int fieldInt45065;
+    public int fieldInt45066;
+    public int fieldInt45067;
+    public int fieldInt45068;
+    public int fieldInt45069;
+    public int fieldInt45070;
+    public int fieldInt45071;
+    public int fieldInt45072;
+    public int fieldInt45073;
+    public int fieldInt45074;
+    public int fieldInt45075;
+    public int fieldInt45076;
+    public int fieldInt45077;
+    public int fieldInt45078;
+    public int fieldInt45079;
+    public int fieldInt45080;
+    public int fieldInt45081;
+    public int fieldInt45082;
+    public int fieldInt45083;
+    public int fieldInt45084;
+    public int fieldInt45085;
+    public int fieldInt45086;
+    public int fieldInt45087;
+    public int fieldInt45088;
+    public int fieldInt45089;
+    public int fieldInt45090;
+    public int fieldInt45091;
+    public int fieldInt45092;
+    public int fieldInt45093;
+    public int fieldInt45094;
+    public int fieldInt45095;
+    public int fieldInt45096;
+    public int fieldInt45097;
+    public int fieldInt45098;
+    public int fieldInt45099;
+    public int fieldInt45100;
+    public int fieldInt45101;
+    public int fieldInt45102;
+    public int fieldInt45103;
+    public int fieldInt45104;
+    public int fieldInt45105;
+    public int fieldInt45106;
+    public int fieldInt45107;
+    public int fieldInt45108;
+    public int fieldInt45109;
+    public int fieldInt45110;
+    public int fieldInt45111;
+    public int fieldInt45112;
+    public int fieldInt45113;
+    public int fieldInt45114;
+    public int fieldInt45115;
+    public int fieldInt45116;
+    public int fieldInt45117;
+    public int fieldInt45118;
+    public int fieldInt45119;
+    public int fieldInt45120;
+    public int fieldInt45121;
+    public int fieldInt45122;
+    public int fieldInt45123;
+    public int fieldInt45124;
+    public int fieldInt45125;
+    public int fieldInt45126;
+    public int fieldInt45127;
+    public int fieldInt45128;
+    public int fieldInt45129;
+    public int fieldInt45130;
+    public int fieldInt45131;
+    public int fieldInt45132;
+    public int fieldInt45133;
+    public int fieldInt45134;
+    public int fieldInt45135;
+    public int fieldInt45136;
+    public int fieldInt45137;
+    public int fieldInt45138;
+    public int fieldInt45139;
+    public int fieldInt45140;
+    public int fieldInt45141;
+    public int fieldInt45142;
+    public int fieldInt45143;
+    public int fieldInt45144;
+    public int fieldInt45145;
+    public int fieldInt45146;
+    public int fieldInt45147;
+    public int fieldInt45148;
+    public int fieldInt45149;
+    public int fieldInt45150;
+    public int fieldInt45151;
+    public int fieldInt45152;
+    public int fieldInt45153;
+    public int fieldInt45154;
+    public int fieldInt45155;
+    public int fieldInt45156;
+    public int fieldInt45157;
+    public int fieldInt45158;
+    public int fieldInt45159;
+    public int fieldInt45160;
+    public int fieldInt45161;
+    public int fieldInt45162;
+    public int fieldInt45163;
+    public int fieldInt45164;
+    public int fieldInt45165;
+    public int fieldInt45166;
+    public int fieldInt45167;
+    public int fieldInt45168;
+    public int fieldInt45169;
+    public int fieldInt45170;
+    public int fieldInt45171;
+    public int fieldInt45172;
+    public int fieldInt45173;
+    public int fieldInt45174;
+    public int fieldInt45175;
+    public int fieldInt45176;
+    public int fieldInt45177;
+    public int fieldInt45178;
+    public int fieldInt45179;
+    public int fieldInt45180;
+    public int fieldInt45181;
+    public int fieldInt45182;
+    public int fieldInt45183;
+    public int fieldInt45184;
+    public int fieldInt45185;
+    public int fieldInt45186;
+    public int fieldInt45187;
+    public int fieldInt45188;
+    public int fieldInt45189;
+    public int fieldInt45190;
+    public int fieldInt45191;
+    public int fieldInt45192;
+    public int fieldInt45193;
+    public int fieldInt45194;
+    public int fieldInt45195;
+    public int fieldInt45196;
+    public int fieldInt45197;
+    public int fieldInt45198;
+    public int fieldInt45199;
+    public int fieldInt45200;
+    public int fieldInt45201;
+    public int fieldInt45202;
+    public int fieldInt45203;
+    public int fieldInt45204;
+    public int fieldInt45205;
+    public int fieldInt45206;
+    public int fieldInt45207;
+    public int fieldInt45208;
+    public int fieldInt45209;
+    public int fieldInt45210;
+    public int fieldInt45211;
+    public int fieldInt45212;
+    public int fieldInt45213;
+    public int fieldInt45214;
+    public int fieldInt45215;
+    public int fieldInt45216;
+    public int fieldInt45217;
+    public int fieldInt45218;
+    public int fieldInt45219;
+    public int fieldInt45220;
+    public int fieldInt45221;
+    public int fieldInt45222;
+    public int fieldInt45223;
+    public int fieldInt45224;
+    public int fieldInt45225;
+    public int fieldInt45226;
+    public int fieldInt45227;
+    public int fieldInt45228;
+    public int fieldInt45229;
+    public int fieldInt45230;
+    public int fieldInt45231;
+    public int fieldInt45232;
+    public int fieldInt45233;
+    public int fieldInt45234;
+    public int fieldInt45235;
+    public int fieldInt45236;
+    public int fieldInt45237;
+    public int fieldInt45238;
+    public int fieldInt45239;
+    public int fieldInt45240;
+    public int fieldInt45241;
+    public int fieldInt45242;
+    public int fieldInt45243;
+    public int fieldInt45244;
+    public int fieldInt45245;
+    public int fieldInt45246;
+    public int fieldInt45247;
+    public int fieldInt45248;
+    public int fieldInt45249;
+    public int fieldInt45250;
+    public int fieldInt45251;
+    public int fieldInt45252;
+    public int fieldInt45253;
+    public int fieldInt45254;
+    public int fieldInt45255;
+    public int fieldInt45256;
+    public int fieldInt45257;
+    public int fieldInt45258;
+    public int fieldInt45259;
+    public int fieldInt45260;
+    public int fieldInt45261;
+    public int fieldInt45262;
+    public int fieldInt45263;
+    public int fieldInt45264;
+    public int fieldInt45265;
+    public int fieldInt45266;
+    public int fieldInt45267;
+    public int fieldInt45268;
+    public int fieldInt45269;
+    public int fieldInt45270;
+    public int fieldInt45271;
+    public int fieldInt45272;
+    public int fieldInt45273;
+    public int fieldInt45274;
+    public int fieldInt45275;
+    public int fieldInt45276;
+    public int fieldInt45277;
+    public int fieldInt45278;
+    public int fieldInt45279;
+    public int fieldInt45280;
+    public int fieldInt45281;
+    public int fieldInt45282;
+    public int fieldInt45283;
+    public int fieldInt45284;
+    public int fieldInt45285;
+    public int fieldInt45286;
+    public int fieldInt45287;
+    public int fieldInt45288;
+    public int fieldInt45289;
+    public int fieldInt45290;
+    public int fieldInt45291;
+    public int fieldInt45292;
+    public int fieldInt45293;
+    public int fieldInt45294;
+    public int fieldInt45295;
+    public int fieldInt45296;
+    public int fieldInt45297;
+    public int fieldInt45298;
+    public int fieldInt45299;
+    public int fieldInt45300;
+    public int fieldInt45301;
+    public int fieldInt45302;
+    public int fieldInt45303;
+    public int fieldInt45304;
+    public int fieldInt45305;
+    public int fieldInt45306;
+    public int fieldInt45307;
+    public int fieldInt45308;
+    public int fieldInt45309;
+    public int fieldInt45310;
+    public int fieldInt45311;
+    public int fieldInt45312;
+    public int fieldInt45313;
+    public int fieldInt45314;
+    public int fieldInt45315;
+    public int fieldInt45316;
+    public int fieldInt45317;
+    public int fieldInt45318;
+    public int fieldInt45319;
+    public int fieldInt45320;
+    public int fieldInt45321;
+    public int fieldInt45322;
+    public int fieldInt45323;
+    public int fieldInt45324;
+    public int fieldInt45325;
+    public int fieldInt45326;
+    public int fieldInt45327;
+    public int fieldInt45328;
+    public int fieldInt45329;
+    public int fieldInt45330;
+    public int fieldInt45331;
+    public int fieldInt45332;
+    public int fieldInt45333;
+    public int fieldInt45334;
+    public int fieldInt45335;
+    public int fieldInt45336;
+    public int fieldInt45337;
+    public int fieldInt45338;
+    public int fieldInt45339;
+    public int fieldInt45340;
+    public int fieldInt45341;
+    public int fieldInt45342;
+    public int fieldInt45343;
+    public int fieldInt45344;
+    public int fieldInt45345;
+    public int fieldInt45346;
+    public int fieldInt45347;
+    public int fieldInt45348;
+    public int fieldInt45349;
+    public int fieldInt45350;
+    public int fieldInt45351;
+    public int fieldInt45352;
+    public int fieldInt45353;
+    public int fieldInt45354;
+    public int fieldInt45355;
+    public int fieldInt45356;
+    public int fieldInt45357;
+    public int fieldInt45358;
+    public int fieldInt45359;
+    public int fieldInt45360;
+    public int fieldInt45361;
+    public int fieldInt45362;
+    public int fieldInt45363;
+    public int fieldInt45364;
+    public int fieldInt45365;
+    public int fieldInt45366;
+    public int fieldInt45367;
+    public int fieldInt45368;
+    public int fieldInt45369;
+    public int fieldInt45370;
+    public int fieldInt45371;
+    public int fieldInt45372;
+    public int fieldInt45373;
+    public int fieldInt45374;
+    public int fieldInt45375;
+    public int fieldInt45376;
+    public int fieldInt45377;
+    public int fieldInt45378;
+    public int fieldInt45379;
+    public int fieldInt45380;
+    public int fieldInt45381;
+    public int fieldInt45382;
+    public int fieldInt45383;
+    public int fieldInt45384;
+    public int fieldInt45385;
+    public int fieldInt45386;
+    public int fieldInt45387;
+    public int fieldInt45388;
+    public int fieldInt45389;
+    public int fieldInt45390;
+    public int fieldInt45391;
+    public int fieldInt45392;
+    public int fieldInt45393;
+    public int fieldInt45394;
+    public int fieldInt45395;
+    public int fieldInt45396;
+    public int fieldInt45397;
+    public int fieldInt45398;
+    public int fieldInt45399;
+    public int fieldInt45400;
+    public int fieldInt45401;
+    public int fieldInt45402;
+    public int fieldInt45403;
+    public int fieldInt45404;
+    public int fieldInt45405;
+    public int fieldInt45406;
+    public int fieldInt45407;
+    public int fieldInt45408;
+    public int fieldInt45409;
+    public int fieldInt45410;
+    public int fieldInt45411;
+    public int fieldInt45412;
+    public int fieldInt45413;
+    public int fieldInt45414;
+    public int fieldInt45415;
+    public int fieldInt45416;
+    public int fieldInt45417;
+    public int fieldInt45418;
+    public int fieldInt45419;
+    public int fieldInt45420;
+    public int fieldInt45421;
+    public int fieldInt45422;
+    public int fieldInt45423;
+    public int fieldInt45424;
+    public int fieldInt45425;
+    public int fieldInt45426;
+    public int fieldInt45427;
+    public int fieldInt45428;
+    public int fieldInt45429;
+    public int fieldInt45430;
+    public int fieldInt45431;
+    public int fieldInt45432;
+    public int fieldInt45433;
+    public int fieldInt45434;
+    public int fieldInt45435;
+    public int fieldInt45436;
+    public int fieldInt45437;
+    public int fieldInt45438;
+    public int fieldInt45439;
+    public int fieldInt45440;
+    public int fieldInt45441;
+    public int fieldInt45442;
+    public int fieldInt45443;
+    public int fieldInt45444;
+    public int fieldInt45445;
+    public int fieldInt45446;
+    public int fieldInt45447;
+    public int fieldInt45448;
+    public int fieldInt45449;
+    public int fieldInt45450;
+    public int fieldInt45451;
+    public int fieldInt45452;
+    public int fieldInt45453;
+    public int fieldInt45454;
+    public int fieldInt45455;
+    public int fieldInt45456;
+    public int fieldInt45457;
+    public int fieldInt45458;
+    public int fieldInt45459;
+    public int fieldInt45460;
+    public int fieldInt45461;
+    public int fieldInt45462;
+    public int fieldInt45463;
+    public int fieldInt45464;
+    public int fieldInt45465;
+    public int fieldInt45466;
+    public int fieldInt45467;
+    public int fieldInt45468;
+    public int fieldInt45469;
+    public int fieldInt45470;
+    public int fieldInt45471;
+    public int fieldInt45472;
+    public int fieldInt45473;
+    public int fieldInt45474;
+    public int fieldInt45475;
+    public int fieldInt45476;
+    public int fieldInt45477;
+    public int fieldInt45478;
+    public int fieldInt45479;
+    public int fieldInt45480;
+    public int fieldInt45481;
+    public int fieldInt45482;
+    public int fieldInt45483;
+    public int fieldInt45484;
+    public int fieldInt45485;
+    public int fieldInt45486;
+    public int fieldInt45487;
+    public int fieldInt45488;
+    public int fieldInt45489;
+    public int fieldInt45490;
+    public int fieldInt45491;
+    public int fieldInt45492;
+    public int fieldInt45493;
+    public int fieldInt45494;
+    public int fieldInt45495;
+    public int fieldInt45496;
+    public int fieldInt45497;
+    public int fieldInt45498;
+    public int fieldInt45499;
+    public int fieldInt45500;
+    public int fieldInt45501;
+    public int fieldInt45502;
+    public int fieldInt45503;
+    public int fieldInt45504;
+    public int fieldInt45505;
+    public int fieldInt45506;
+    public int fieldInt45507;
+    public int fieldInt45508;
+    public int fieldInt45509;
+    public int fieldInt45510;
+    public int fieldInt45511;
+    public int fieldInt45512;
+    public int fieldInt45513;
+    public int fieldInt45514;
+    public int fieldInt45515;
+    public int fieldInt45516;
+    public int fieldInt45517;
+    public int fieldInt45518;
+    public int fieldInt45519;
+    public int fieldInt45520;
+    public int fieldInt45521;
+    public int fieldInt45522;
+    public int fieldInt45523;
+    public int fieldInt45524;
+    public int fieldInt45525;
+    public int fieldInt45526;
+    public int fieldInt45527;
+    public int fieldInt45528;
+    public int fieldInt45529;
+    public int fieldInt45530;
+    public int fieldInt45531;
+    public int fieldInt45532;
+    public int fieldInt45533;
+    public int fieldInt45534;
+    public int fieldInt45535;
+    public int fieldInt45536;
+    public int fieldInt45537;
+    public int fieldInt45538;
+    public int fieldInt45539;
+    public int fieldInt45540;
+    public int fieldInt45541;
+    public int fieldInt45542;
+    public int fieldInt45543;
+    public int fieldInt45544;
+    public int fieldInt45545;
+    public int fieldInt45546;
+    public int fieldInt45547;
+    public int fieldInt45548;
+    public int fieldInt45549;
+    public int fieldInt45550;
+    public int fieldInt45551;
+    public int fieldInt45552;
+    public int fieldInt45553;
+    public int fieldInt45554;
+    public int fieldInt45555;
+    public int fieldInt45556;
+    public int fieldInt45557;
+    public int fieldInt45558;
+    public int fieldInt45559;
+    public int fieldInt45560;
+    public int fieldInt45561;
+    public int fieldInt45562;
+    public int fieldInt45563;
+    public int fieldInt45564;
+    public int fieldInt45565;
+    public int fieldInt45566;
+    public int fieldInt45567;
+    public int fieldInt45568;
+    public int fieldInt45569;
+    public int fieldInt45570;
+    public int fieldInt45571;
+    public int fieldInt45572;
+    public int fieldInt45573;
+    public int fieldInt45574;
+    public int fieldInt45575;
+    public int fieldInt45576;
+    public int fieldInt45577;
+    public int fieldInt45578;
+    public int fieldInt45579;
+    public int fieldInt45580;
+    public int fieldInt45581;
+    public int fieldInt45582;
+    public int fieldInt45583;
+    public int fieldInt45584;
+    public int fieldInt45585;
+    public int fieldInt45586;
+    public int fieldInt45587;
+    public int fieldInt45588;
+    public int fieldInt45589;
+    public int fieldInt45590;
+    public int fieldInt45591;
+    public int fieldInt45592;
+    public int fieldInt45593;
+    public int fieldInt45594;
+    public int fieldInt45595;
+    public int fieldInt45596;
+    public int fieldInt45597;
+    public int fieldInt45598;
+    public int fieldInt45599;
+    public int fieldInt45600;
+    public int fieldInt45601;
+    public int fieldInt45602;
+    public int fieldInt45603;
+    public int fieldInt45604;
+    public int fieldInt45605;
+    public int fieldInt45606;
+    public int fieldInt45607;
+    public int fieldInt45608;
+    public int fieldInt45609;
+    public int fieldInt45610;
+    public int fieldInt45611;
+    public int fieldInt45612;
+    public int fieldInt45613;
+    public int fieldInt45614;
+    public int fieldInt45615;
+    public int fieldInt45616;
+    public int fieldInt45617;
+    public int fieldInt45618;
+    public int fieldInt45619;
+    public int fieldInt45620;
+    public int fieldInt45621;
+    public int fieldInt45622;
+    public int fieldInt45623;
+    public int fieldInt45624;
+    public int fieldInt45625;
+    public int fieldInt45626;
+    public int fieldInt45627;
+    public int fieldInt45628;
+    public int fieldInt45629;
+    public int fieldInt45630;
+    public int fieldInt45631;
+    public int fieldInt45632;
+    public int fieldInt45633;
+    public int fieldInt45634;
+    public int fieldInt45635;
+    public int fieldInt45636;
+    public int fieldInt45637;
+    public int fieldInt45638;
+    public int fieldInt45639;
+    public int fieldInt45640;
+    public int fieldInt45641;
+    public int fieldInt45642;
+    public int fieldInt45643;
+    public int fieldInt45644;
+    public int fieldInt45645;
+    public int fieldInt45646;
+    public int fieldInt45647;
+    public int fieldInt45648;
+    public int fieldInt45649;
+    public int fieldInt45650;
+    public int fieldInt45651;
+    public int fieldInt45652;
+    public int fieldInt45653;
+    public int fieldInt45654;
+    public int fieldInt45655;
+    public int fieldInt45656;
+    public int fieldInt45657;
+    public int fieldInt45658;
+    public int fieldInt45659;
+    public int fieldInt45660;
+    public int fieldInt45661;
+    public int fieldInt45662;
+    public int fieldInt45663;
+    public int fieldInt45664;
+    public int fieldInt45665;
+    public int fieldInt45666;
+    public int fieldInt45667;
+    public int fieldInt45668;
+    public int fieldInt45669;
+    public int fieldInt45670;
+    public int fieldInt45671;
+    public int fieldInt45672;
+    public int fieldInt45673;
+    public int fieldInt45674;
+    public int fieldInt45675;
+    public int fieldInt45676;
+    public int fieldInt45677;
+    public int fieldInt45678;
+    public int fieldInt45679;
+    public int fieldInt45680;
+    public int fieldInt45681;
+    public int fieldInt45682;
+    public int fieldInt45683;
+    public int fieldInt45684;
+    public int fieldInt45685;
+    public int fieldInt45686;
+    public int fieldInt45687;
+    public int fieldInt45688;
+    public int fieldInt45689;
+    public int fieldInt45690;
+    public int fieldInt45691;
+    public int fieldInt45692;
+    public int fieldInt45693;
+    public int fieldInt45694;
+    public int fieldInt45695;
+    public int fieldInt45696;
+    public int fieldInt45697;
+    public int fieldInt45698;
+    public int fieldInt45699;
+    public int fieldInt45700;
+    public int fieldInt45701;
+    public int fieldInt45702;
+    public int fieldInt45703;
+    public int fieldInt45704;
+    public int fieldInt45705;
+    public int fieldInt45706;
+    public int fieldInt45707;
+    public int fieldInt45708;
+    public int fieldInt45709;
+    public int fieldInt45710;
+    public int fieldInt45711;
+    public int fieldInt45712;
+    public int fieldInt45713;
+    public int fieldInt45714;
+    public int fieldInt45715;
+    public int fieldInt45716;
+    public int fieldInt45717;
+    public int fieldInt45718;
+    public int fieldInt45719;
+    public int fieldInt45720;
+    public int fieldInt45721;
+    public int fieldInt45722;
+    public int fieldInt45723;
+    public int fieldInt45724;
+    public int fieldInt45725;
+    public int fieldInt45726;
+    public int fieldInt45727;
+    public int fieldInt45728;
+    public int fieldInt45729;
+    public int fieldInt45730;
+    public int fieldInt45731;
+    public int fieldInt45732;
+    public int fieldInt45733;
+    public int fieldInt45734;
+    public int fieldInt45735;
+    public int fieldInt45736;
+    public int fieldInt45737;
+    public int fieldInt45738;
+    public int fieldInt45739;
+    public int fieldInt45740;
+    public int fieldInt45741;
+    public int fieldInt45742;
+    public int fieldInt45743;
+    public int fieldInt45744;
+    public int fieldInt45745;
+    public int fieldInt45746;
+    public int fieldInt45747;
+    public int fieldInt45748;
+    public int fieldInt45749;
+    public int fieldInt45750;
+    public int fieldInt45751;
+    public int fieldInt45752;
+    public int fieldInt45753;
+    public int fieldInt45754;
+    public int fieldInt45755;
+    public int fieldInt45756;
+    public int fieldInt45757;
+    public int fieldInt45758;
+    public int fieldInt45759;
+    public int fieldInt45760;
+    public int fieldInt45761;
+    public int fieldInt45762;
+    public int fieldInt45763;
+    public int fieldInt45764;
+    public int fieldInt45765;
+    public int fieldInt45766;
+    public int fieldInt45767;
+    public int fieldInt45768;
+    public int fieldInt45769;
+    public int fieldInt45770;
+    public int fieldInt45771;
+    public int fieldInt45772;
+    public int fieldInt45773;
+    public int fieldInt45774;
+    public int fieldInt45775;
+    public int fieldInt45776;
+    public int fieldInt45777;
+    public int fieldInt45778;
+    public int fieldInt45779;
+    public int fieldInt45780;
+    public int fieldInt45781;
+    public int fieldInt45782;
+    public int fieldInt45783;
+    public int fieldInt45784;
+    public int fieldInt45785;
+    public int fieldInt45786;
+    public int fieldInt45787;
+    public int fieldInt45788;
+    public int fieldInt45789;
+    public int fieldInt45790;
+    public int fieldInt45791;
+    public int fieldInt45792;
+    public int fieldInt45793;
+    public int fieldInt45794;
+    public int fieldInt45795;
+    public int fieldInt45796;
+    public int fieldInt45797;
+    public int fieldInt45798;
+    public int fieldInt45799;
+    public int fieldInt45800;
+    public int fieldInt45801;
+    public int fieldInt45802;
+    public int fieldInt45803;
+    public int fieldInt45804;
+    public int fieldInt45805;
+    public int fieldInt45806;
+    public int fieldInt45807;
+    public int fieldInt45808;
+    public int fieldInt45809;
+    public int fieldInt45810;
+    public int fieldInt45811;
+    public int fieldInt45812;
+    public int fieldInt45813;
+    public int fieldInt45814;
+    public int fieldInt45815;
+    public int fieldInt45816;
+    public int fieldInt45817;
+    public int fieldInt45818;
+    public int fieldInt45819;
+    public int fieldInt45820;
+    public int fieldInt45821;
+    public int fieldInt45822;
+    public int fieldInt45823;
+    public int fieldInt45824;
+    public int fieldInt45825;
+    public int fieldInt45826;
+    public int fieldInt45827;
+    public int fieldInt45828;
+    public int fieldInt45829;
+    public int fieldInt45830;
+    public int fieldInt45831;
+    public int fieldInt45832;
+    public int fieldInt45833;
+    public int fieldInt45834;
+    public int fieldInt45835;
+    public int fieldInt45836;
+    public int fieldInt45837;
+    public int fieldInt45838;
+    public int fieldInt45839;
+    public int fieldInt45840;
+    public int fieldInt45841;
+    public int fieldInt45842;
+    public int fieldInt45843;
+    public int fieldInt45844;
+    public int fieldInt45845;
+    public int fieldInt45846;
+    public int fieldInt45847;
+    public int fieldInt45848;
+    public int fieldInt45849;
+    public int fieldInt45850;
+    public int fieldInt45851;
+    public int fieldInt45852;
+    public int fieldInt45853;
+    public int fieldInt45854;
+    public int fieldInt45855;
+    public int fieldInt45856;
+    public int fieldInt45857;
+    public int fieldInt45858;
+    public int fieldInt45859;
+    public int fieldInt45860;
+    public int fieldInt45861;
+    public int fieldInt45862;
+    public int fieldInt45863;
+    public int fieldInt45864;
+    public int fieldInt45865;
+    public int fieldInt45866;
+    public int fieldInt45867;
+    public int fieldInt45868;
+    public int fieldInt45869;
+    public int fieldInt45870;
+    public int fieldInt45871;
+    public int fieldInt45872;
+    public int fieldInt45873;
+    public int fieldInt45874;
+    public int fieldInt45875;
+    public int fieldInt45876;
+    public int fieldInt45877;
+    public int fieldInt45878;
+    public int fieldInt45879;
+    public int fieldInt45880;
+    public int fieldInt45881;
+    public int fieldInt45882;
+    public int fieldInt45883;
+    public int fieldInt45884;
+    public int fieldInt45885;
+    public int fieldInt45886;
+    public int fieldInt45887;
+    public int fieldInt45888;
+    public int fieldInt45889;
+    public int fieldInt45890;
+    public int fieldInt45891;
+    public int fieldInt45892;
+    public int fieldInt45893;
+    public int fieldInt45894;
+    public int fieldInt45895;
+    public int fieldInt45896;
+    public int fieldInt45897;
+    public int fieldInt45898;
+    public int fieldInt45899;
+    public int fieldInt45900;
+    public int fieldInt45901;
+    public int fieldInt45902;
+    public int fieldInt45903;
+    public int fieldInt45904;
+    public int fieldInt45905;
+    public int fieldInt45906;
+    public int fieldInt45907;
+    public int fieldInt45908;
+    public int fieldInt45909;
+    public int fieldInt45910;
+    public int fieldInt45911;
+    public int fieldInt45912;
+    public int fieldInt45913;
+    public int fieldInt45914;
+    public int fieldInt45915;
+    public int fieldInt45916;
+    public int fieldInt45917;
+    public int fieldInt45918;
+    public int fieldInt45919;
+    public int fieldInt45920;
+    public int fieldInt45921;
+    public int fieldInt45922;
+    public int fieldInt45923;
+    public int fieldInt45924;
+    public int fieldInt45925;
+    public int fieldInt45926;
+    public int fieldInt45927;
+    public int fieldInt45928;
+    public int fieldInt45929;
+    public int fieldInt45930;
+    public int fieldInt45931;
+    public int fieldInt45932;
+    public int fieldInt45933;
+    public int fieldInt45934;
+    public int fieldInt45935;
+    public int fieldInt45936;
+    public int fieldInt45937;
+    public int fieldInt45938;
+    public int fieldInt45939;
+    public int fieldInt45940;
+    public int fieldInt45941;
+    public int fieldInt45942;
+    public int fieldInt45943;
+    public int fieldInt45944;
+    public int fieldInt45945;
+    public int fieldInt45946;
+    public int fieldInt45947;
+    public int fieldInt45948;
+    public int fieldInt45949;
+    public int fieldInt45950;
+    public int fieldInt45951;
+    public int fieldInt45952;
+    public int fieldInt45953;
+    public int fieldInt45954;
+    public int fieldInt45955;
+    public int fieldInt45956;
+    public int fieldInt45957;
+    public int fieldInt45958;
+    public int fieldInt45959;
+    public int fieldInt45960;
+    public int fieldInt45961;
+    public int fieldInt45962;
+    public int fieldInt45963;
+    public int fieldInt45964;
+    public int fieldInt45965;
+    public int fieldInt45966;
+    public int fieldInt45967;
+    public int fieldInt45968;
+    public int fieldInt45969;
+    public int fieldInt45970;
+    public int fieldInt45971;
+    public int fieldInt45972;
+    public int fieldInt45973;
+    public int fieldInt45974;
+    public int fieldInt45975;
+    public int fieldInt45976;
+    public int fieldInt45977;
+    public int fieldInt45978;
+    public int fieldInt45979;
+    public int fieldInt45980;
+    public int fieldInt45981;
+    public int fieldInt45982;
+    public int fieldInt45983;
+    public int fieldInt45984;
+    public int fieldInt45985;
+    public int fieldInt45986;
+    public int fieldInt45987;
+    public int fieldInt45988;
+    public int fieldInt45989;
+    public int fieldInt45990;
+    public int fieldInt45991;
+    public int fieldInt45992;
+    public int fieldInt45993;
+    public int fieldInt45994;
+    public int fieldInt45995;
+    public int fieldInt45996;
+    public int fieldInt45997;
+    public int fieldInt45998;
+    public int fieldInt45999;
+    public int fieldInt46000;
+    public int fieldInt46001;
+    public int fieldInt46002;
+    public int fieldInt46003;
+    public int fieldInt46004;
+    public int fieldInt46005;
+    public int fieldInt46006;
+    public int fieldInt46007;
+    public int fieldInt46008;
+    public int fieldInt46009;
+    public int fieldInt46010;
+    public int fieldInt46011;
+    public int fieldInt46012;
+    public int fieldInt46013;
+    public int fieldInt46014;
+    public int fieldInt46015;
+    public int fieldInt46016;
+    public int fieldInt46017;
+    public int fieldInt46018;
+    public int fieldInt46019;
+    public int fieldInt46020;
+    public int fieldInt46021;
+    public int fieldInt46022;
+    public int fieldInt46023;
+    public int fieldInt46024;
+    public int fieldInt46025;
+    public int fieldInt46026;
+    public int fieldInt46027;
+    public int fieldInt46028;
+    public int fieldInt46029;
+    public int fieldInt46030;
+    public int fieldInt46031;
+    public int fieldInt46032;
+    public int fieldInt46033;
+    public int fieldInt46034;
+    public int fieldInt46035;
+    public int fieldInt46036;
+    public int fieldInt46037;
+    public int fieldInt46038;
+    public int fieldInt46039;
+    public int fieldInt46040;
+    public int fieldInt46041;
+    public int fieldInt46042;
+    public int fieldInt46043;
+    public int fieldInt46044;
+    public int fieldInt46045;
+    public int fieldInt46046;
+    public int fieldInt46047;
+    public int fieldInt46048;
+    public int fieldInt46049;
+    public int fieldInt46050;
+    public int fieldInt46051;
+    public int fieldInt46052;
+    public int fieldInt46053;
+    public int fieldInt46054;
+    public int fieldInt46055;
+    public int fieldInt46056;
+    public int fieldInt46057;
+    public int fieldInt46058;
+    public int fieldInt46059;
+    public int fieldInt46060;
+    public int fieldInt46061;
+    public int fieldInt46062;
+    public int fieldInt46063;
+    public int fieldInt46064;
+    public int fieldInt46065;
+    public int fieldInt46066;
+    public int fieldInt46067;
+    public int fieldInt46068;
+    public int fieldInt46069;
+    public int fieldInt46070;
+    public int fieldInt46071;
+    public int fieldInt46072;
+    public int fieldInt46073;
+    public int fieldInt46074;
+    public int fieldInt46075;
+    public int fieldInt46076;
+    public int fieldInt46077;
+    public int fieldInt46078;
+    public int fieldInt46079;
+    public int fieldInt46080;
+    public int fieldInt46081;
+    public int fieldInt46082;
+    public int fieldInt46083;
+    public int fieldInt46084;
+    public int fieldInt46085;
+    public int fieldInt46086;
+    public int fieldInt46087;
+    public int fieldInt46088;
+    public int fieldInt46089;
+    public int fieldInt46090;
+    public int fieldInt46091;
+    public int fieldInt46092;
+    public int fieldInt46093;
+    public int fieldInt46094;
+    public int fieldInt46095;
+    public int fieldInt46096;
+    public int fieldInt46097;
+    public int fieldInt46098;
+    public int fieldInt46099;
+    public int fieldInt46100;
+    public int fieldInt46101;
+    public int fieldInt46102;
+    public int fieldInt46103;
+    public int fieldInt46104;
+    public int fieldInt46105;
+    public int fieldInt46106;
+    public int fieldInt46107;
+    public int fieldInt46108;
+    public int fieldInt46109;
+    public int fieldInt46110;
+    public int fieldInt46111;
+    public int fieldInt46112;
+    public int fieldInt46113;
+    public int fieldInt46114;
+    public int fieldInt46115;
+    public int fieldInt46116;
+    public int fieldInt46117;
+    public int fieldInt46118;
+    public int fieldInt46119;
+    public int fieldInt46120;
+    public int fieldInt46121;
+    public int fieldInt46122;
+    public int fieldInt46123;
+    public int fieldInt46124;
+    public int fieldInt46125;
+    public int fieldInt46126;
+    public int fieldInt46127;
+    public int fieldInt46128;
+    public int fieldInt46129;
+    public int fieldInt46130;
+    public int fieldInt46131;
+    public int fieldInt46132;
+    public int fieldInt46133;
+    public int fieldInt46134;
+    public int fieldInt46135;
+    public int fieldInt46136;
+    public int fieldInt46137;
+    public int fieldInt46138;
+    public int fieldInt46139;
+    public int fieldInt46140;
+    public int fieldInt46141;
+    public int fieldInt46142;
+    public int fieldInt46143;
+    public int fieldInt46144;
+    public int fieldInt46145;
+    public int fieldInt46146;
+    public int fieldInt46147;
+    public int fieldInt46148;
+    public int fieldInt46149;
+    public int fieldInt46150;
+    public int fieldInt46151;
+    public int fieldInt46152;
+    public int fieldInt46153;
+    public int fieldInt46154;
+    public int fieldInt46155;
+    public int fieldInt46156;
+    public int fieldInt46157;
+    public int fieldInt46158;
+    public int fieldInt46159;
+    public int fieldInt46160;
+    public int fieldInt46161;
+    public int fieldInt46162;
+    public int fieldInt46163;
+    public int fieldInt46164;
+    public int fieldInt46165;
+    public int fieldInt46166;
+    public int fieldInt46167;
+    public int fieldInt46168;
+    public int fieldInt46169;
+    public int fieldInt46170;
+    public int fieldInt46171;
+    public int fieldInt46172;
+    public int fieldInt46173;
+    public int fieldInt46174;
+    public int fieldInt46175;
+    public int fieldInt46176;
+    public int fieldInt46177;
+    public int fieldInt46178;
+    public int fieldInt46179;
+    public int fieldInt46180;
+    public int fieldInt46181;
+    public int fieldInt46182;
+    public int fieldInt46183;
+    public int fieldInt46184;
+    public int fieldInt46185;
+    public int fieldInt46186;
+    public int fieldInt46187;
+    public int fieldInt46188;
+    public int fieldInt46189;
+    public int fieldInt46190;
+    public int fieldInt46191;
+    public int fieldInt46192;
+    public int fieldInt46193;
+    public int fieldInt46194;
+    public int fieldInt46195;
+    public int fieldInt46196;
+    public int fieldInt46197;
+    public int fieldInt46198;
+    public int fieldInt46199;
+    public int fieldInt46200;
+    public int fieldInt46201;
+    public int fieldInt46202;
+    public int fieldInt46203;
+    public int fieldInt46204;
+    public int fieldInt46205;
+    public int fieldInt46206;
+    public int fieldInt46207;
+    public int fieldInt46208;
+    public int fieldInt46209;
+    public int fieldInt46210;
+    public int fieldInt46211;
+    public int fieldInt46212;
+    public int fieldInt46213;
+    public int fieldInt46214;
+    public int fieldInt46215;
+    public int fieldInt46216;
+    public int fieldInt46217;
+    public int fieldInt46218;
+    public int fieldInt46219;
+    public int fieldInt46220;
+    public int fieldInt46221;
+    public int fieldInt46222;
+    public int fieldInt46223;
+    public int fieldInt46224;
+    public int fieldInt46225;
+    public int fieldInt46226;
+    public int fieldInt46227;
+    public int fieldInt46228;
+    public int fieldInt46229;
+    public int fieldInt46230;
+    public int fieldInt46231;
+    public int fieldInt46232;
+    public int fieldInt46233;
+    public int fieldInt46234;
+    public int fieldInt46235;
+    public int fieldInt46236;
+    public int fieldInt46237;
+    public int fieldInt46238;
+    public int fieldInt46239;
+    public int fieldInt46240;
+    public int fieldInt46241;
+    public int fieldInt46242;
+    public int fieldInt46243;
+    public int fieldInt46244;
+    public int fieldInt46245;
+    public int fieldInt46246;
+    public int fieldInt46247;
+    public int fieldInt46248;
+    public int fieldInt46249;
+    public int fieldInt46250;
+    public int fieldInt46251;
+    public int fieldInt46252;
+    public int fieldInt46253;
+    public int fieldInt46254;
+    public int fieldInt46255;
+    public int fieldInt46256;
+    public int fieldInt46257;
+    public int fieldInt46258;
+    public int fieldInt46259;
+    public int fieldInt46260;
+    public int fieldInt46261;
+    public int fieldInt46262;
+    public int fieldInt46263;
+    public int fieldInt46264;
+    public int fieldInt46265;
+    public int fieldInt46266;
+    public int fieldInt46267;
+    public int fieldInt46268;
+    public int fieldInt46269;
+    public int fieldInt46270;
+    public int fieldInt46271;
+    public int fieldInt46272;
+    public int fieldInt46273;
+    public int fieldInt46274;
+    public int fieldInt46275;
+    public int fieldInt46276;
+    public int fieldInt46277;
+    public int fieldInt46278;
+    public int fieldInt46279;
+    public int fieldInt46280;
+    public int fieldInt46281;
+    public int fieldInt46282;
+    public int fieldInt46283;
+    public int fieldInt46284;
+    public int fieldInt46285;
+    public int fieldInt46286;
+    public int fieldInt46287;
+    public int fieldInt46288;
+    public int fieldInt46289;
+    public int fieldInt46290;
+    public int fieldInt46291;
+    public int fieldInt46292;
+    public int fieldInt46293;
+    public int fieldInt46294;
+    public int fieldInt46295;
+    public int fieldInt46296;
+    public int fieldInt46297;
+    public int fieldInt46298;
+    public int fieldInt46299;
+    public int fieldInt46300;
+    public int fieldInt46301;
+    public int fieldInt46302;
+    public int fieldInt46303;
+    public int fieldInt46304;
+    public int fieldInt46305;
+    public int fieldInt46306;
+    public int fieldInt46307;
+    public int fieldInt46308;
+    public int fieldInt46309;
+    public int fieldInt46310;
+    public int fieldInt46311;
+    public int fieldInt46312;
+    public int fieldInt46313;
+    public int fieldInt46314;
+    public int fieldInt46315;
+    public int fieldInt46316;
+    public int fieldInt46317;
+    public int fieldInt46318;
+    public int fieldInt46319;
+    public int fieldInt46320;
+    public int fieldInt46321;
+    public int fieldInt46322;
+    public int fieldInt46323;
+    public int fieldInt46324;
+    public int fieldInt46325;
+    public int fieldInt46326;
+    public int fieldInt46327;
+    public int fieldInt46328;
+    public int fieldInt46329;
+    public int fieldInt46330;
+    public int fieldInt46331;
+    public int fieldInt46332;
+    public int fieldInt46333;
+    public int fieldInt46334;
+    public int fieldInt46335;
+    public int fieldInt46336;
+    public int fieldInt46337;
+    public int fieldInt46338;
+    public int fieldInt46339;
+    public int fieldInt46340;
+    public int fieldInt46341;
+    public int fieldInt46342;
+    public int fieldInt46343;
+    public int fieldInt46344;
+    public int fieldInt46345;
+    public int fieldInt46346;
+    public int fieldInt46347;
+    public int fieldInt46348;
+    public int fieldInt46349;
+    public int fieldInt46350;
+    public int fieldInt46351;
+    public int fieldInt46352;
+    public int fieldInt46353;
+    public int fieldInt46354;
+    public int fieldInt46355;
+    public int fieldInt46356;
+    public int fieldInt46357;
+    public int fieldInt46358;
+    public int fieldInt46359;
+    public int fieldInt46360;
+    public int fieldInt46361;
+    public int fieldInt46362;
+    public int fieldInt46363;
+    public int fieldInt46364;
+    public int fieldInt46365;
+    public int fieldInt46366;
+    public int fieldInt46367;
+    public int fieldInt46368;
+    public int fieldInt46369;
+    public int fieldInt46370;
+    public int fieldInt46371;
+    public int fieldInt46372;
+    public int fieldInt46373;
+    public int fieldInt46374;
+    public int fieldInt46375;
+    public int fieldInt46376;
+    public int fieldInt46377;
+    public int fieldInt46378;
+    public int fieldInt46379;
+    public int fieldInt46380;
+    public int fieldInt46381;
+    public int fieldInt46382;
+    public int fieldInt46383;
+    public int fieldInt46384;
+    public int fieldInt46385;
+    public int fieldInt46386;
+    public int fieldInt46387;
+    public int fieldInt46388;
+    public int fieldInt46389;
+    public int fieldInt46390;
+    public int fieldInt46391;
+    public int fieldInt46392;
+    public int fieldInt46393;
+    public int fieldInt46394;
+    public int fieldInt46395;
+    public int fieldInt46396;
+    public int fieldInt46397;
+    public int fieldInt46398;
+    public int fieldInt46399;
+    public int fieldInt46400;
+    public int fieldInt46401;
+    public int fieldInt46402;
+    public int fieldInt46403;
+    public int fieldInt46404;
+    public int fieldInt46405;
+    public int fieldInt46406;
+    public int fieldInt46407;
+    public int fieldInt46408;
+    public int fieldInt46409;
+    public int fieldInt46410;
+    public int fieldInt46411;
+    public int fieldInt46412;
+    public int fieldInt46413;
+    public int fieldInt46414;
+    public int fieldInt46415;
+    public int fieldInt46416;
+    public int fieldInt46417;
+    public int fieldInt46418;
+    public int fieldInt46419;
+    public int fieldInt46420;
+    public int fieldInt46421;
+    public int fieldInt46422;
+    public int fieldInt46423;
+    public int fieldInt46424;
+    public int fieldInt46425;
+    public int fieldInt46426;
+    public int fieldInt46427;
+    public int fieldInt46428;
+    public int fieldInt46429;
+    public int fieldInt46430;
+    public int fieldInt46431;
+    public int fieldInt46432;
+    public int fieldInt46433;
+    public int fieldInt46434;
+    public int fieldInt46435;
+    public int fieldInt46436;
+    public int fieldInt46437;
+    public int fieldInt46438;
+    public int fieldInt46439;
+    public int fieldInt46440;
+    public int fieldInt46441;
+    public int fieldInt46442;
+    public int fieldInt46443;
+    public int fieldInt46444;
+    public int fieldInt46445;
+    public int fieldInt46446;
+    public int fieldInt46447;
+    public int fieldInt46448;
+    public int fieldInt46449;
+    public int fieldInt46450;
+    public int fieldInt46451;
+    public int fieldInt46452;
+    public int fieldInt46453;
+    public int fieldInt46454;
+    public int fieldInt46455;
+    public int fieldInt46456;
+    public int fieldInt46457;
+    public int fieldInt46458;
+    public int fieldInt46459;
+    public int fieldInt46460;
+    public int fieldInt46461;
+    public int fieldInt46462;
+    public int fieldInt46463;
+    public int fieldInt46464;
+    public int fieldInt46465;
+    public int fieldInt46466;
+    public int fieldInt46467;
+    public int fieldInt46468;
+    public int fieldInt46469;
+    public int fieldInt46470;
+    public int fieldInt46471;
+    public int fieldInt46472;
+    public int fieldInt46473;
+    public int fieldInt46474;
+    public int fieldInt46475;
+    public int fieldInt46476;
+    public int fieldInt46477;
+    public int fieldInt46478;
+    public int fieldInt46479;
+    public int fieldInt46480;
+    public int fieldInt46481;
+    public int fieldInt46482;
+    public int fieldInt46483;
+    public int fieldInt46484;
+    public int fieldInt46485;
+    public int fieldInt46486;
+    public int fieldInt46487;
+    public int fieldInt46488;
+    public int fieldInt46489;
+    public int fieldInt46490;
+    public int fieldInt46491;
+    public int fieldInt46492;
+    public int fieldInt46493;
+    public int fieldInt46494;
+    public int fieldInt46495;
+    public int fieldInt46496;
+    public int fieldInt46497;
+    public int fieldInt46498;
+    public int fieldInt46499;
+    public int fieldInt46500;
+    public int fieldInt46501;
+    public int fieldInt46502;
+    public int fieldInt46503;
+    public int fieldInt46504;
+    public int fieldInt46505;
+    public int fieldInt46506;
+    public int fieldInt46507;
+    public int fieldInt46508;
+    public int fieldInt46509;
+    public int fieldInt46510;
+    public int fieldInt46511;
+    public int fieldInt46512;
+    public int fieldInt46513;
+    public int fieldInt46514;
+    public int fieldInt46515;
+    public int fieldInt46516;
+    public int fieldInt46517;
+    public int fieldInt46518;
+    public int fieldInt46519;
+    public int fieldInt46520;
+    public int fieldInt46521;
+    public int fieldInt46522;
+    public int fieldInt46523;
+    public int fieldInt46524;
+    public int fieldInt46525;
+    public int fieldInt46526;
+    public int fieldInt46527;
+    public int fieldInt46528;
+    public int fieldInt46529;
+    public int fieldInt46530;
+    public int fieldInt46531;
+    public int fieldInt46532;
+    public int fieldInt46533;
+    public int fieldInt46534;
+    public int fieldInt46535;
+    public int fieldInt46536;
+    public int fieldInt46537;
+    public int fieldInt46538;
+    public int fieldInt46539;
+    public int fieldInt46540;
+    public int fieldInt46541;
+    public int fieldInt46542;
+    public int fieldInt46543;
+    public int fieldInt46544;
+    public int fieldInt46545;
+    public int fieldInt46546;
+    public int fieldInt46547;
+    public int fieldInt46548;
+    public int fieldInt46549;
+    public int fieldInt46550;
+    public int fieldInt46551;
+    public int fieldInt46552;
+    public int fieldInt46553;
+    public int fieldInt46554;
+    public int fieldInt46555;
+    public int fieldInt46556;
+    public int fieldInt46557;
+    public int fieldInt46558;
+    public int fieldInt46559;
+    public int fieldInt46560;
+    public int fieldInt46561;
+    public int fieldInt46562;
+    public int fieldInt46563;
+    public int fieldInt46564;
+    public int fieldInt46565;
+    public int fieldInt46566;
+    public int fieldInt46567;
+    public int fieldInt46568;
+    public int fieldInt46569;
+    public int fieldInt46570;
+    public int fieldInt46571;
+    public int fieldInt46572;
+    public int fieldInt46573;
+    public int fieldInt46574;
+    public int fieldInt46575;
+    public int fieldInt46576;
+    public int fieldInt46577;
+    public int fieldInt46578;
+    public int fieldInt46579;
+    public int fieldInt46580;
+    public int fieldInt46581;
+    public int fieldInt46582;
+    public int fieldInt46583;
+    public int fieldInt46584;
+    public int fieldInt46585;
+    public int fieldInt46586;
+    public int fieldInt46587;
+    public int fieldInt46588;
+    public int fieldInt46589;
+    public int fieldInt46590;
+    public int fieldInt46591;
+    public int fieldInt46592;
+    public int fieldInt46593;
+    public int fieldInt46594;
+    public int fieldInt46595;
+    public int fieldInt46596;
+    public int fieldInt46597;
+    public int fieldInt46598;
+    public int fieldInt46599;
+    public int fieldInt46600;
+    public int fieldInt46601;
+    public int fieldInt46602;
+    public int fieldInt46603;
+    public int fieldInt46604;
+    public int fieldInt46605;
+    public int fieldInt46606;
+    public int fieldInt46607;
+    public int fieldInt46608;
+    public int fieldInt46609;
+    public int fieldInt46610;
+    public int fieldInt46611;
+    public int fieldInt46612;
+    public int fieldInt46613;
+    public int fieldInt46614;
+    public int fieldInt46615;
+    public int fieldInt46616;
+    public int fieldInt46617;
+    public int fieldInt46618;
+    public int fieldInt46619;
+    public int fieldInt46620;
+    public int fieldInt46621;
+    public int fieldInt46622;
+    public int fieldInt46623;
+    public int fieldInt46624;
+    public int fieldInt46625;
+    public int fieldInt46626;
+    public int fieldInt46627;
+    public int fieldInt46628;
+    public int fieldInt46629;
+    public int fieldInt46630;
+    public int fieldInt46631;
+    public int fieldInt46632;
+    public int fieldInt46633;
+    public int fieldInt46634;
+    public int fieldInt46635;
+    public int fieldInt46636;
+    public int fieldInt46637;
+    public int fieldInt46638;
+    public int fieldInt46639;
+    public int fieldInt46640;
+    public int fieldInt46641;
+    public int fieldInt46642;
+    public int fieldInt46643;
+    public int fieldInt46644;
+    public int fieldInt46645;
+    public int fieldInt46646;
+    public int fieldInt46647;
+    public int fieldInt46648;
+    public int fieldInt46649;
+    public int fieldInt46650;
+    public int fieldInt46651;
+    public int fieldInt46652;
+    public int fieldInt46653;
+    public int fieldInt46654;
+    public int fieldInt46655;
+    public int fieldInt46656;
+    public int fieldInt46657;
+    public int fieldInt46658;
+    public int fieldInt46659;
+    public int fieldInt46660;
+    public int fieldInt46661;
+    public int fieldInt46662;
+    public int fieldInt46663;
+    public int fieldInt46664;
+    public int fieldInt46665;
+    public int fieldInt46666;
+    public int fieldInt46667;
+    public int fieldInt46668;
+    public int fieldInt46669;
+    public int fieldInt46670;
+    public int fieldInt46671;
+    public int fieldInt46672;
+    public int fieldInt46673;
+    public int fieldInt46674;
+    public int fieldInt46675;
+    public int fieldInt46676;
+    public int fieldInt46677;
+    public int fieldInt46678;
+    public int fieldInt46679;
+    public int fieldInt46680;
+    public int fieldInt46681;
+    public int fieldInt46682;
+    public int fieldInt46683;
+    public int fieldInt46684;
+    public int fieldInt46685;
+    public int fieldInt46686;
+    public int fieldInt46687;
+    public int fieldInt46688;
+    public int fieldInt46689;
+    public int fieldInt46690;
+    public int fieldInt46691;
+    public int fieldInt46692;
+    public int fieldInt46693;
+    public int fieldInt46694;
+    public int fieldInt46695;
+    public int fieldInt46696;
+    public int fieldInt46697;
+    public int fieldInt46698;
+    public int fieldInt46699;
+    public int fieldInt46700;
+    public int fieldInt46701;
+    public int fieldInt46702;
+    public int fieldInt46703;
+    public int fieldInt46704;
+    public int fieldInt46705;
+    public int fieldInt46706;
+    public int fieldInt46707;
+    public int fieldInt46708;
+    public int fieldInt46709;
+    public int fieldInt46710;
+    public int fieldInt46711;
+    public int fieldInt46712;
+    public int fieldInt46713;
+    public int fieldInt46714;
+    public int fieldInt46715;
+    public int fieldInt46716;
+    public int fieldInt46717;
+    public int fieldInt46718;
+    public int fieldInt46719;
+    public int fieldInt46720;
+    public int fieldInt46721;
+    public int fieldInt46722;
+    public int fieldInt46723;
+    public int fieldInt46724;
+    public int fieldInt46725;
+    public int fieldInt46726;
+    public int fieldInt46727;
+    public int fieldInt46728;
+    public int fieldInt46729;
+    public int fieldInt46730;
+    public int fieldInt46731;
+    public int fieldInt46732;
+    public int fieldInt46733;
+    public int fieldInt46734;
+    public int fieldInt46735;
+    public int fieldInt46736;
+    public int fieldInt46737;
+    public int fieldInt46738;
+    public int fieldInt46739;
+    public int fieldInt46740;
+    public int fieldInt46741;
+    public int fieldInt46742;
+    public int fieldInt46743;
+    public int fieldInt46744;
+    public int fieldInt46745;
+    public int fieldInt46746;
+    public int fieldInt46747;
+    public int fieldInt46748;
+    public int fieldInt46749;
+    public int fieldInt46750;
+    public int fieldInt46751;
+    public int fieldInt46752;
+    public int fieldInt46753;
+    public int fieldInt46754;
+    public int fieldInt46755;
+    public int fieldInt46756;
+    public int fieldInt46757;
+    public int fieldInt46758;
+    public int fieldInt46759;
+    public int fieldInt46760;
+    public int fieldInt46761;
+    public int fieldInt46762;
+    public int fieldInt46763;
+    public int fieldInt46764;
+    public int fieldInt46765;
+    public int fieldInt46766;
+    public int fieldInt46767;
+    public int fieldInt46768;
+    public int fieldInt46769;
+    public int fieldInt46770;
+    public int fieldInt46771;
+    public int fieldInt46772;
+    public int fieldInt46773;
+    public int fieldInt46774;
+    public int fieldInt46775;
+    public int fieldInt46776;
+    public int fieldInt46777;
+    public int fieldInt46778;
+    public int fieldInt46779;
+    public int fieldInt46780;
+    public int fieldInt46781;
+    public int fieldInt46782;
+    public int fieldInt46783;
+    public int fieldInt46784;
+    public int fieldInt46785;
+    public int fieldInt46786;
+    public int fieldInt46787;
+    public int fieldInt46788;
+    public int fieldInt46789;
+    public int fieldInt46790;
+    public int fieldInt46791;
+    public int fieldInt46792;
+    public int fieldInt46793;
+    public int fieldInt46794;
+    public int fieldInt46795;
+    public int fieldInt46796;
+    public int fieldInt46797;
+    public int fieldInt46798;
+    public int fieldInt46799;
+    public int fieldInt46800;
+    public int fieldInt46801;
+    public int fieldInt46802;
+    public int fieldInt46803;
+    public int fieldInt46804;
+    public int fieldInt46805;
+    public int fieldInt46806;
+    public int fieldInt46807;
+    public int fieldInt46808;
+    public int fieldInt46809;
+    public int fieldInt46810;
+    public int fieldInt46811;
+    public int fieldInt46812;
+    public int fieldInt46813;
+    public int fieldInt46814;
+    public int fieldInt46815;
+    public int fieldInt46816;
+    public int fieldInt46817;
+    public int fieldInt46818;
+    public int fieldInt46819;
+    public int fieldInt46820;
+    public int fieldInt46821;
+    public int fieldInt46822;
+    public int fieldInt46823;
+    public int fieldInt46824;
+    public int fieldInt46825;
+    public int fieldInt46826;
+    public int fieldInt46827;
+    public int fieldInt46828;
+    public int fieldInt46829;
+    public int fieldInt46830;
+    public int fieldInt46831;
+    public int fieldInt46832;
+    public int fieldInt46833;
+    public int fieldInt46834;
+    public int fieldInt46835;
+    public int fieldInt46836;
+    public int fieldInt46837;
+    public int fieldInt46838;
+    public int fieldInt46839;
+    public int fieldInt46840;
+    public int fieldInt46841;
+    public int fieldInt46842;
+    public int fieldInt46843;
+    public int fieldInt46844;
+    public int fieldInt46845;
+    public int fieldInt46846;
+    public int fieldInt46847;
+    public int fieldInt46848;
+    public int fieldInt46849;
+    public int fieldInt46850;
+    public int fieldInt46851;
+    public int fieldInt46852;
+    public int fieldInt46853;
+    public int fieldInt46854;
+    public int fieldInt46855;
+    public int fieldInt46856;
+    public int fieldInt46857;
+    public int fieldInt46858;
+    public int fieldInt46859;
+    public int fieldInt46860;
+    public int fieldInt46861;
+    public int fieldInt46862;
+    public int fieldInt46863;
+    public int fieldInt46864;
+    public int fieldInt46865;
+    public int fieldInt46866;
+    public int fieldInt46867;
+    public int fieldInt46868;
+    public int fieldInt46869;
+    public int fieldInt46870;
+    public int fieldInt46871;
+    public int fieldInt46872;
+    public int fieldInt46873;
+    public int fieldInt46874;
+    public int fieldInt46875;
+    public int fieldInt46876;
+    public int fieldInt46877;
+    public int fieldInt46878;
+    public int fieldInt46879;
+    public int fieldInt46880;
+    public int fieldInt46881;
+    public int fieldInt46882;
+    public int fieldInt46883;
+    public int fieldInt46884;
+    public int fieldInt46885;
+    public int fieldInt46886;
+    public int fieldInt46887;
+    public int fieldInt46888;
+    public int fieldInt46889;
+    public int fieldInt46890;
+    public int fieldInt46891;
+    public int fieldInt46892;
+    public int fieldInt46893;
+    public int fieldInt46894;
+    public int fieldInt46895;
+    public int fieldInt46896;
+    public int fieldInt46897;
+    public int fieldInt46898;
+    public int fieldInt46899;
+    public int fieldInt46900;
+    public int fieldInt46901;
+    public int fieldInt46902;
+    public int fieldInt46903;
+    public int fieldInt46904;
+    public int fieldInt46905;
+    public int fieldInt46906;
+    public int fieldInt46907;
+    public int fieldInt46908;
+    public int fieldInt46909;
+    public int fieldInt46910;
+    public int fieldInt46911;
+    public int fieldInt46912;
+    public int fieldInt46913;
+    public int fieldInt46914;
+    public int fieldInt46915;
+    public int fieldInt46916;
+    public int fieldInt46917;
+    public int fieldInt46918;
+    public int fieldInt46919;
+    public int fieldInt46920;
+    public int fieldInt46921;
+    public int fieldInt46922;
+    public int fieldInt46923;
+    public int fieldInt46924;
+    public int fieldInt46925;
+    public int fieldInt46926;
+    public int fieldInt46927;
+    public int fieldInt46928;
+    public int fieldInt46929;
+    public int fieldInt46930;
+    public int fieldInt46931;
+    public int fieldInt46932;
+    public int fieldInt46933;
+    public int fieldInt46934;
+    public int fieldInt46935;
+    public int fieldInt46936;
+    public int fieldInt46937;
+    public int fieldInt46938;
+    public int fieldInt46939;
+    public int fieldInt46940;
+    public int fieldInt46941;
+    public int fieldInt46942;
+    public int fieldInt46943;
+    public int fieldInt46944;
+    public int fieldInt46945;
+    public int fieldInt46946;
+    public int fieldInt46947;
+    public int fieldInt46948;
+    public int fieldInt46949;
+    public int fieldInt46950;
+    public int fieldInt46951;
+    public int fieldInt46952;
+    public int fieldInt46953;
+    public int fieldInt46954;
+    public int fieldInt46955;
+    public int fieldInt46956;
+    public int fieldInt46957;
+    public int fieldInt46958;
+    public int fieldInt46959;
+    public int fieldInt46960;
+    public int fieldInt46961;
+    public int fieldInt46962;
+    public int fieldInt46963;
+    public int fieldInt46964;
+    public int fieldInt46965;
+    public int fieldInt46966;
+    public int fieldInt46967;
+    public int fieldInt46968;
+    public int fieldInt46969;
+    public int fieldInt46970;
+    public int fieldInt46971;
+    public int fieldInt46972;
+    public int fieldInt46973;
+    public int fieldInt46974;
+    public int fieldInt46975;
+    public int fieldInt46976;
+    public int fieldInt46977;
+    public int fieldInt46978;
+    public int fieldInt46979;
+    public int fieldInt46980;
+    public int fieldInt46981;
+    public int fieldInt46982;
+    public int fieldInt46983;
+    public int fieldInt46984;
+    public int fieldInt46985;
+    public int fieldInt46986;
+    public int fieldInt46987;
+    public int fieldInt46988;
+    public int fieldInt46989;
+    public int fieldInt46990;
+    public int fieldInt46991;
+    public int fieldInt46992;
+    public int fieldInt46993;
+    public int fieldInt46994;
+    public int fieldInt46995;
+    public int fieldInt46996;
+    public int fieldInt46997;
+    public int fieldInt46998;
+    public int fieldInt46999;
+    public int fieldInt47000;
+    public int fieldInt47001;
+    public int fieldInt47002;
+    public int fieldInt47003;
+    public int fieldInt47004;
+    public int fieldInt47005;
+    public int fieldInt47006;
+    public int fieldInt47007;
+    public int fieldInt47008;
+    public int fieldInt47009;
+    public int fieldInt47010;
+    public int fieldInt47011;
+    public int fieldInt47012;
+    public int fieldInt47013;
+    public int fieldInt47014;
+    public int fieldInt47015;
+    public int fieldInt47016;
+    public int fieldInt47017;
+    public int fieldInt47018;
+    public int fieldInt47019;
+    public int fieldInt47020;
+    public int fieldInt47021;
+    public int fieldInt47022;
+    public int fieldInt47023;
+    public int fieldInt47024;
+    public int fieldInt47025;
+    public int fieldInt47026;
+    public int fieldInt47027;
+    public int fieldInt47028;
+    public int fieldInt47029;
+    public int fieldInt47030;
+    public int fieldInt47031;
+    public int fieldInt47032;
+    public int fieldInt47033;
+    public int fieldInt47034;
+    public int fieldInt47035;
+    public int fieldInt47036;
+    public int fieldInt47037;
+    public int fieldInt47038;
+    public int fieldInt47039;
+    public int fieldInt47040;
+    public int fieldInt47041;
+    public int fieldInt47042;
+    public int fieldInt47043;
+    public int fieldInt47044;
+    public int fieldInt47045;
+    public int fieldInt47046;
+    public int fieldInt47047;
+    public int fieldInt47048;
+    public int fieldInt47049;
+    public int fieldInt47050;
+    public int fieldInt47051;
+    public int fieldInt47052;
+    public int fieldInt47053;
+    public int fieldInt47054;
+    public int fieldInt47055;
+    public int fieldInt47056;
+    public int fieldInt47057;
+    public int fieldInt47058;
+    public int fieldInt47059;
+    public int fieldInt47060;
+    public int fieldInt47061;
+    public int fieldInt47062;
+    public int fieldInt47063;
+    public int fieldInt47064;
+    public int fieldInt47065;
+    public int fieldInt47066;
+    public int fieldInt47067;
+    public int fieldInt47068;
+    public int fieldInt47069;
+    public int fieldInt47070;
+    public int fieldInt47071;
+    public int fieldInt47072;
+    public int fieldInt47073;
+    public int fieldInt47074;
+    public int fieldInt47075;
+    public int fieldInt47076;
+    public int fieldInt47077;
+    public int fieldInt47078;
+    public int fieldInt47079;
+    public int fieldInt47080;
+    public int fieldInt47081;
+    public int fieldInt47082;
+    public int fieldInt47083;
+    public int fieldInt47084;
+    public int fieldInt47085;
+    public int fieldInt47086;
+    public int fieldInt47087;
+    public int fieldInt47088;
+    public int fieldInt47089;
+    public int fieldInt47090;
+    public int fieldInt47091;
+    public int fieldInt47092;
+    public int fieldInt47093;
+    public int fieldInt47094;
+    public int fieldInt47095;
+    public int fieldInt47096;
+    public int fieldInt47097;
+    public int fieldInt47098;
+    public int fieldInt47099;
+    public int fieldInt47100;
+    public int fieldInt47101;
+    public int fieldInt47102;
+    public int fieldInt47103;
+    public int fieldInt47104;
+    public int fieldInt47105;
+    public int fieldInt47106;
+    public int fieldInt47107;
+    public int fieldInt47108;
+    public int fieldInt47109;
+    public int fieldInt47110;
+    public int fieldInt47111;
+    public int fieldInt47112;
+    public int fieldInt47113;
+    public int fieldInt47114;
+    public int fieldInt47115;
+    public int fieldInt47116;
+    public int fieldInt47117;
+    public int fieldInt47118;
+    public int fieldInt47119;
+    public int fieldInt47120;
+    public int fieldInt47121;
+    public int fieldInt47122;
+    public int fieldInt47123;
+    public int fieldInt47124;
+    public int fieldInt47125;
+    public int fieldInt47126;
+    public int fieldInt47127;
+    public int fieldInt47128;
+    public int fieldInt47129;
+    public int fieldInt47130;
+    public int fieldInt47131;
+    public int fieldInt47132;
+    public int fieldInt47133;
+    public int fieldInt47134;
+    public int fieldInt47135;
+    public int fieldInt47136;
+    public int fieldInt47137;
+    public int fieldInt47138;
+    public int fieldInt47139;
+    public int fieldInt47140;
+    public int fieldInt47141;
+    public int fieldInt47142;
+    public int fieldInt47143;
+    public int fieldInt47144;
+    public int fieldInt47145;
+    public int fieldInt47146;
+    public int fieldInt47147;
+    public int fieldInt47148;
+    public int fieldInt47149;
+    public int fieldInt47150;
+    public int fieldInt47151;
+    public int fieldInt47152;
+    public int fieldInt47153;
+    public int fieldInt47154;
+    public int fieldInt47155;
+    public int fieldInt47156;
+    public int fieldInt47157;
+    public int fieldInt47158;
+    public int fieldInt47159;
+    public int fieldInt47160;
+    public int fieldInt47161;
+    public int fieldInt47162;
+    public int fieldInt47163;
+    public int fieldInt47164;
+    public int fieldInt47165;
+    public int fieldInt47166;
+    public int fieldInt47167;
+    public int fieldInt47168;
+    public int fieldInt47169;
+    public int fieldInt47170;
+    public int fieldInt47171;
+    public int fieldInt47172;
+    public int fieldInt47173;
+    public int fieldInt47174;
+    public int fieldInt47175;
+    public int fieldInt47176;
+    public int fieldInt47177;
+    public int fieldInt47178;
+    public int fieldInt47179;
+    public int fieldInt47180;
+    public int fieldInt47181;
+    public int fieldInt47182;
+    public int fieldInt47183;
+    public int fieldInt47184;
+    public int fieldInt47185;
+    public int fieldInt47186;
+    public int fieldInt47187;
+    public int fieldInt47188;
+    public int fieldInt47189;
+    public int fieldInt47190;
+    public int fieldInt47191;
+    public int fieldInt47192;
+    public int fieldInt47193;
+    public int fieldInt47194;
+    public int fieldInt47195;
+    public int fieldInt47196;
+    public int fieldInt47197;
+    public int fieldInt47198;
+    public int fieldInt47199;
+    public int fieldInt47200;
+    public int fieldInt47201;
+    public int fieldInt47202;
+    public int fieldInt47203;
+    public int fieldInt47204;
+    public int fieldInt47205;
+    public int fieldInt47206;
+    public int fieldInt47207;
+    public int fieldInt47208;
+    public int fieldInt47209;
+    public int fieldInt47210;
+    public int fieldInt47211;
+    public int fieldInt47212;
+    public int fieldInt47213;
+    public int fieldInt47214;
+    public int fieldInt47215;
+    public int fieldInt47216;
+    public int fieldInt47217;
+    public int fieldInt47218;
+    public int fieldInt47219;
+    public int fieldInt47220;
+    public int fieldInt47221;
+    public int fieldInt47222;
+    public int fieldInt47223;
+    public int fieldInt47224;
+    public int fieldInt47225;
+    public int fieldInt47226;
+    public int fieldInt47227;
+    public int fieldInt47228;
+    public int fieldInt47229;
+    public int fieldInt47230;
+    public int fieldInt47231;
+    public int fieldInt47232;
+    public int fieldInt47233;
+    public int fieldInt47234;
+    public int fieldInt47235;
+    public int fieldInt47236;
+    public int fieldInt47237;
+    public int fieldInt47238;
+    public int fieldInt47239;
+    public int fieldInt47240;
+    public int fieldInt47241;
+    public int fieldInt47242;
+    public int fieldInt47243;
+    public int fieldInt47244;
+    public int fieldInt47245;
+    public int fieldInt47246;
+    public int fieldInt47247;
+    public int fieldInt47248;
+    public int fieldInt47249;
+    public int fieldInt47250;
+    public int fieldInt47251;
+    public int fieldInt47252;
+    public int fieldInt47253;
+    public int fieldInt47254;
+    public int fieldInt47255;
+    public int fieldInt47256;
+    public int fieldInt47257;
+    public int fieldInt47258;
+    public int fieldInt47259;
+    public int fieldInt47260;
+    public int fieldInt47261;
+    public int fieldInt47262;
+    public int fieldInt47263;
+    public int fieldInt47264;
+    public int fieldInt47265;
+    public int fieldInt47266;
+    public int fieldInt47267;
+    public int fieldInt47268;
+    public int fieldInt47269;
+    public int fieldInt47270;
+    public int fieldInt47271;
+    public int fieldInt47272;
+    public int fieldInt47273;
+    public int fieldInt47274;
+    public int fieldInt47275;
+    public int fieldInt47276;
+    public int fieldInt47277;
+    public int fieldInt47278;
+    public int fieldInt47279;
+    public int fieldInt47280;
+    public int fieldInt47281;
+    public int fieldInt47282;
+    public int fieldInt47283;
+    public int fieldInt47284;
+    public int fieldInt47285;
+    public int fieldInt47286;
+    public int fieldInt47287;
+    public int fieldInt47288;
+    public int fieldInt47289;
+    public int fieldInt47290;
+    public int fieldInt47291;
+    public int fieldInt47292;
+    public int fieldInt47293;
+    public int fieldInt47294;
+    public int fieldInt47295;
+    public int fieldInt47296;
+    public int fieldInt47297;
+    public int fieldInt47298;
+    public int fieldInt47299;
+    public int fieldInt47300;
+    public int fieldInt47301;
+    public int fieldInt47302;
+    public int fieldInt47303;
+    public int fieldInt47304;
+    public int fieldInt47305;
+    public int fieldInt47306;
+    public int fieldInt47307;
+    public int fieldInt47308;
+    public int fieldInt47309;
+    public int fieldInt47310;
+    public int fieldInt47311;
+    public int fieldInt47312;
+    public int fieldInt47313;
+    public int fieldInt47314;
+    public int fieldInt47315;
+    public int fieldInt47316;
+    public int fieldInt47317;
+    public int fieldInt47318;
+    public int fieldInt47319;
+    public int fieldInt47320;
+    public int fieldInt47321;
+    public int fieldInt47322;
+    public int fieldInt47323;
+    public int fieldInt47324;
+    public int fieldInt47325;
+    public int fieldInt47326;
+    public int fieldInt47327;
+    public int fieldInt47328;
+    public int fieldInt47329;
+    public int fieldInt47330;
+    public int fieldInt47331;
+    public int fieldInt47332;
+    public int fieldInt47333;
+    public int fieldInt47334;
+    public int fieldInt47335;
+    public int fieldInt47336;
+    public int fieldInt47337;
+    public int fieldInt47338;
+    public int fieldInt47339;
+    public int fieldInt47340;
+    public int fieldInt47341;
+    public int fieldInt47342;
+    public int fieldInt47343;
+    public int fieldInt47344;
+    public int fieldInt47345;
+    public int fieldInt47346;
+    public int fieldInt47347;
+    public int fieldInt47348;
+    public int fieldInt47349;
+    public int fieldInt47350;
+    public int fieldInt47351;
+    public int fieldInt47352;
+    public int fieldInt47353;
+    public int fieldInt47354;
+    public int fieldInt47355;
+    public int fieldInt47356;
+    public int fieldInt47357;
+    public int fieldInt47358;
+    public int fieldInt47359;
+    public int fieldInt47360;
+    public int fieldInt47361;
+    public int fieldInt47362;
+    public int fieldInt47363;
+    public int fieldInt47364;
+    public int fieldInt47365;
+    public int fieldInt47366;
+    public int fieldInt47367;
+    public int fieldInt47368;
+    public int fieldInt47369;
+    public int fieldInt47370;
+    public int fieldInt47371;
+    public int fieldInt47372;
+    public int fieldInt47373;
+    public int fieldInt47374;
+    public int fieldInt47375;
+    public int fieldInt47376;
+    public int fieldInt47377;
+    public int fieldInt47378;
+    public int fieldInt47379;
+    public int fieldInt47380;
+    public int fieldInt47381;
+    public int fieldInt47382;
+    public int fieldInt47383;
+    public int fieldInt47384;
+    public int fieldInt47385;
+    public int fieldInt47386;
+    public int fieldInt47387;
+    public int fieldInt47388;
+    public int fieldInt47389;
+    public int fieldInt47390;
+    public int fieldInt47391;
+    public int fieldInt47392;
+    public int fieldInt47393;
+    public int fieldInt47394;
+    public int fieldInt47395;
+    public int fieldInt47396;
+    public int fieldInt47397;
+    public int fieldInt47398;
+    public int fieldInt47399;
+    public int fieldInt47400;
+    public int fieldInt47401;
+    public int fieldInt47402;
+    public int fieldInt47403;
+    public int fieldInt47404;
+    public int fieldInt47405;
+    public int fieldInt47406;
+    public int fieldInt47407;
+    public int fieldInt47408;
+    public int fieldInt47409;
+    public int fieldInt47410;
+    public int fieldInt47411;
+    public int fieldInt47412;
+    public int fieldInt47413;
+    public int fieldInt47414;
+    public int fieldInt47415;
+    public int fieldInt47416;
+    public int fieldInt47417;
+    public int fieldInt47418;
+    public int fieldInt47419;
+    public int fieldInt47420;
+    public int fieldInt47421;
+    public int fieldInt47422;
+    public int fieldInt47423;
+    public int fieldInt47424;
+    public int fieldInt47425;
+    public int fieldInt47426;
+    public int fieldInt47427;
+    public int fieldInt47428;
+    public int fieldInt47429;
+    public int fieldInt47430;
+    public int fieldInt47431;
+    public int fieldInt47432;
+    public int fieldInt47433;
+    public int fieldInt47434;
+    public int fieldInt47435;
+    public int fieldInt47436;
+    public int fieldInt47437;
+    public int fieldInt47438;
+    public int fieldInt47439;
+    public int fieldInt47440;
+    public int fieldInt47441;
+    public int fieldInt47442;
+    public int fieldInt47443;
+    public int fieldInt47444;
+    public int fieldInt47445;
+    public int fieldInt47446;
+    public int fieldInt47447;
+    public int fieldInt47448;
+    public int fieldInt47449;
+    public int fieldInt47450;
+    public int fieldInt47451;
+    public int fieldInt47452;
+    public int fieldInt47453;
+    public int fieldInt47454;
+    public int fieldInt47455;
+    public int fieldInt47456;
+    public int fieldInt47457;
+    public int fieldInt47458;
+    public int fieldInt47459;
+    public int fieldInt47460;
+    public int fieldInt47461;
+    public int fieldInt47462;
+    public int fieldInt47463;
+    public int fieldInt47464;
+    public int fieldInt47465;
+    public int fieldInt47466;
+    public int fieldInt47467;
+    public int fieldInt47468;
+    public int fieldInt47469;
+    public int fieldInt47470;
+    public int fieldInt47471;
+    public int fieldInt47472;
+    public int fieldInt47473;
+    public int fieldInt47474;
+    public int fieldInt47475;
+    public int fieldInt47476;
+    public int fieldInt47477;
+    public int fieldInt47478;
+    public int fieldInt47479;
+    public int fieldInt47480;
+    public int fieldInt47481;
+    public int fieldInt47482;
+    public int fieldInt47483;
+    public int fieldInt47484;
+    public int fieldInt47485;
+    public int fieldInt47486;
+    public int fieldInt47487;
+    public int fieldInt47488;
+    public int fieldInt47489;
+    public int fieldInt47490;
+    public int fieldInt47491;
+    public int fieldInt47492;
+    public int fieldInt47493;
+    public int fieldInt47494;
+    public int fieldInt47495;
+    public int fieldInt47496;
+    public int fieldInt47497;
+    public int fieldInt47498;
+    public int fieldInt47499;
+    public int fieldInt47500;
+    public int fieldInt47501;
+    public int fieldInt47502;
+    public int fieldInt47503;
+    public int fieldInt47504;
+    public int fieldInt47505;
+    public int fieldInt47506;
+    public int fieldInt47507;
+    public int fieldInt47508;
+    public int fieldInt47509;
+    public int fieldInt47510;
+    public int fieldInt47511;
+    public int fieldInt47512;
+    public int fieldInt47513;
+    public int fieldInt47514;
+    public int fieldInt47515;
+    public int fieldInt47516;
+    public int fieldInt47517;
+    public int fieldInt47518;
+    public int fieldInt47519;
+    public int fieldInt47520;
+    public int fieldInt47521;
+    public int fieldInt47522;
+    public int fieldInt47523;
+    public int fieldInt47524;
+    public int fieldInt47525;
+    public int fieldInt47526;
+    public int fieldInt47527;
+    public int fieldInt47528;
+    public int fieldInt47529;
+    public int fieldInt47530;
+    public int fieldInt47531;
+    public int fieldInt47532;
+    public int fieldInt47533;
+    public int fieldInt47534;
+    public int fieldInt47535;
+    public int fieldInt47536;
+    public int fieldInt47537;
+    public int fieldInt47538;
+    public int fieldInt47539;
+    public int fieldInt47540;
+    public int fieldInt47541;
+    public int fieldInt47542;
+    public int fieldInt47543;
+    public int fieldInt47544;
+    public int fieldInt47545;
+    public int fieldInt47546;
+    public int fieldInt47547;
+    public int fieldInt47548;
+    public int fieldInt47549;
+    public int fieldInt47550;
+    public int fieldInt47551;
+    public int fieldInt47552;
+    public int fieldInt47553;
+    public int fieldInt47554;
+    public int fieldInt47555;
+    public int fieldInt47556;
+    public int fieldInt47557;
+    public int fieldInt47558;
+    public int fieldInt47559;
+    public int fieldInt47560;
+    public int fieldInt47561;
+    public int fieldInt47562;
+    public int fieldInt47563;
+    public int fieldInt47564;
+    public int fieldInt47565;
+    public int fieldInt47566;
+    public int fieldInt47567;
+    public int fieldInt47568;
+    public int fieldInt47569;
+    public int fieldInt47570;
+    public int fieldInt47571;
+    public int fieldInt47572;
+    public int fieldInt47573;
+    public int fieldInt47574;
+    public int fieldInt47575;
+    public int fieldInt47576;
+    public int fieldInt47577;
+    public int fieldInt47578;
+    public int fieldInt47579;
+    public int fieldInt47580;
+    public int fieldInt47581;
+    public int fieldInt47582;
+    public int fieldInt47583;
+    public int fieldInt47584;
+    public int fieldInt47585;
+    public int fieldInt47586;
+    public int fieldInt47587;
+    public int fieldInt47588;
+    public int fieldInt47589;
+    public int fieldInt47590;
+    public int fieldInt47591;
+    public int fieldInt47592;
+    public int fieldInt47593;
+    public int fieldInt47594;
+    public int fieldInt47595;
+    public int fieldInt47596;
+    public int fieldInt47597;
+    public int fieldInt47598;
+    public int fieldInt47599;
+    public int fieldInt47600;
+    public int fieldInt47601;
+    public int fieldInt47602;
+    public int fieldInt47603;
+    public int fieldInt47604;
+    public int fieldInt47605;
+    public int fieldInt47606;
+    public int fieldInt47607;
+    public int fieldInt47608;
+    public int fieldInt47609;
+    public int fieldInt47610;
+    public int fieldInt47611;
+    public int fieldInt47612;
+    public int fieldInt47613;
+    public int fieldInt47614;
+    public int fieldInt47615;
+    public int fieldInt47616;
+    public int fieldInt47617;
+    public int fieldInt47618;
+    public int fieldInt47619;
+    public int fieldInt47620;
+    public int fieldInt47621;
+    public int fieldInt47622;
+    public int fieldInt47623;
+    public int fieldInt47624;
+    public int fieldInt47625;
+    public int fieldInt47626;
+    public int fieldInt47627;
+    public int fieldInt47628;
+    public int fieldInt47629;
+    public int fieldInt47630;
+    public int fieldInt47631;
+    public int fieldInt47632;
+    public int fieldInt47633;
+    public int fieldInt47634;
+    public int fieldInt47635;
+    public int fieldInt47636;
+    public int fieldInt47637;
+    public int fieldInt47638;
+    public int fieldInt47639;
+    public int fieldInt47640;
+    public int fieldInt47641;
+    public int fieldInt47642;
+    public int fieldInt47643;
+    public int fieldInt47644;
+    public int fieldInt47645;
+    public int fieldInt47646;
+    public int fieldInt47647;
+    public int fieldInt47648;
+    public int fieldInt47649;
+    public int fieldInt47650;
+    public int fieldInt47651;
+    public int fieldInt47652;
+    public int fieldInt47653;
+    public int fieldInt47654;
+    public int fieldInt47655;
+    public int fieldInt47656;
+    public int fieldInt47657;
+    public int fieldInt47658;
+    public int fieldInt47659;
+    public int fieldInt47660;
+    public int fieldInt47661;
+    public int fieldInt47662;
+    public int fieldInt47663;
+    public int fieldInt47664;
+    public int fieldInt47665;
+    public int fieldInt47666;
+    public int fieldInt47667;
+    public int fieldInt47668;
+    public int fieldInt47669;
+    public int fieldInt47670;
+    public int fieldInt47671;
+    public int fieldInt47672;
+    public int fieldInt47673;
+    public int fieldInt47674;
+    public int fieldInt47675;
+    public int fieldInt47676;
+    public int fieldInt47677;
+    public int fieldInt47678;
+    public int fieldInt47679;
+    public int fieldInt47680;
+    public int fieldInt47681;
+    public int fieldInt47682;
+    public int fieldInt47683;
+    public int fieldInt47684;
+    public int fieldInt47685;
+    public int fieldInt47686;
+    public int fieldInt47687;
+    public int fieldInt47688;
+    public int fieldInt47689;
+    public int fieldInt47690;
+    public int fieldInt47691;
+    public int fieldInt47692;
+    public int fieldInt47693;
+    public int fieldInt47694;
+    public int fieldInt47695;
+    public int fieldInt47696;
+    public int fieldInt47697;
+    public int fieldInt47698;
+    public int fieldInt47699;
+    public int fieldInt47700;
+    public int fieldInt47701;
+    public int fieldInt47702;
+    public int fieldInt47703;
+    public int fieldInt47704;
+    public int fieldInt47705;
+    public int fieldInt47706;
+    public int fieldInt47707;
+    public int fieldInt47708;
+    public int fieldInt47709;
+    public int fieldInt47710;
+    public int fieldInt47711;
+    public int fieldInt47712;
+    public int fieldInt47713;
+    public int fieldInt47714;
+    public int fieldInt47715;
+    public int fieldInt47716;
+    public int fieldInt47717;
+    public int fieldInt47718;
+    public int fieldInt47719;
+    public int fieldInt47720;
+    public int fieldInt47721;
+    public int fieldInt47722;
+    public int fieldInt47723;
+    public int fieldInt47724;
+    public int fieldInt47725;
+    public int fieldInt47726;
+    public int fieldInt47727;
+    public int fieldInt47728;
+    public int fieldInt47729;
+    public int fieldInt47730;
+    public int fieldInt47731;
+    public int fieldInt47732;
+    public int fieldInt47733;
+    public int fieldInt47734;
+    public int fieldInt47735;
+    public int fieldInt47736;
+    public int fieldInt47737;
+    public int fieldInt47738;
+    public int fieldInt47739;
+    public int fieldInt47740;
+    public int fieldInt47741;
+    public int fieldInt47742;
+    public int fieldInt47743;
+    public int fieldInt47744;
+    public int fieldInt47745;
+    public int fieldInt47746;
+    public int fieldInt47747;
+    public int fieldInt47748;
+    public int fieldInt47749;
+    public int fieldInt47750;
+    public int fieldInt47751;
+    public int fieldInt47752;
+    public int fieldInt47753;
+    public int fieldInt47754;
+    public int fieldInt47755;
+    public int fieldInt47756;
+    public int fieldInt47757;
+    public int fieldInt47758;
+    public int fieldInt47759;
+    public int fieldInt47760;
+    public int fieldInt47761;
+    public int fieldInt47762;
+    public int fieldInt47763;
+    public int fieldInt47764;
+    public int fieldInt47765;
+    public int fieldInt47766;
+    public int fieldInt47767;
+    public int fieldInt47768;
+    public int fieldInt47769;
+    public int fieldInt47770;
+    public int fieldInt47771;
+    public int fieldInt47772;
+    public int fieldInt47773;
+    public int fieldInt47774;
+    public int fieldInt47775;
+    public int fieldInt47776;
+    public int fieldInt47777;
+    public int fieldInt47778;
+    public int fieldInt47779;
+    public int fieldInt47780;
+    public int fieldInt47781;
+    public int fieldInt47782;
+    public int fieldInt47783;
+    public int fieldInt47784;
+    public int fieldInt47785;
+    public int fieldInt47786;
+    public int fieldInt47787;
+    public int fieldInt47788;
+    public int fieldInt47789;
+    public int fieldInt47790;
+    public int fieldInt47791;
+    public int fieldInt47792;
+    public int fieldInt47793;
+    public int fieldInt47794;
+    public int fieldInt47795;
+    public int fieldInt47796;
+    public int fieldInt47797;
+    public int fieldInt47798;
+    public int fieldInt47799;
+    public int fieldInt47800;
+    public int fieldInt47801;
+    public int fieldInt47802;
+    public int fieldInt47803;
+    public int fieldInt47804;
+    public int fieldInt47805;
+    public int fieldInt47806;
+    public int fieldInt47807;
+    public int fieldInt47808;
+    public int fieldInt47809;
+    public int fieldInt47810;
+    public int fieldInt47811;
+    public int fieldInt47812;
+    public int fieldInt47813;
+    public int fieldInt47814;
+    public int fieldInt47815;
+    public int fieldInt47816;
+    public int fieldInt47817;
+    public int fieldInt47818;
+    public int fieldInt47819;
+    public int fieldInt47820;
+    public int fieldInt47821;
+    public int fieldInt47822;
+    public int fieldInt47823;
+    public int fieldInt47824;
+    public int fieldInt47825;
+    public int fieldInt47826;
+    public int fieldInt47827;
+    public int fieldInt47828;
+    public int fieldInt47829;
+    public int fieldInt47830;
+    public int fieldInt47831;
+    public int fieldInt47832;
+    public int fieldInt47833;
+    public int fieldInt47834;
+    public int fieldInt47835;
+    public int fieldInt47836;
+    public int fieldInt47837;
+    public int fieldInt47838;
+    public int fieldInt47839;
+    public int fieldInt47840;
+    public int fieldInt47841;
+    public int fieldInt47842;
+    public int fieldInt47843;
+    public int fieldInt47844;
+    public int fieldInt47845;
+    public int fieldInt47846;
+    public int fieldInt47847;
+    public int fieldInt47848;
+    public int fieldInt47849;
+    public int fieldInt47850;
+    public int fieldInt47851;
+    public int fieldInt47852;
+    public int fieldInt47853;
+    public int fieldInt47854;
+    public int fieldInt47855;
+    public int fieldInt47856;
+    public int fieldInt47857;
+    public int fieldInt47858;
+    public int fieldInt47859;
+    public int fieldInt47860;
+    public int fieldInt47861;
+    public int fieldInt47862;
+    public int fieldInt47863;
+    public int fieldInt47864;
+    public int fieldInt47865;
+    public int fieldInt47866;
+    public int fieldInt47867;
+    public int fieldInt47868;
+    public int fieldInt47869;
+    public int fieldInt47870;
+    public int fieldInt47871;
+    public int fieldInt47872;
+    public int fieldInt47873;
+    public int fieldInt47874;
+    public int fieldInt47875;
+    public int fieldInt47876;
+    public int fieldInt47877;
+    public int fieldInt47878;
+    public int fieldInt47879;
+    public int fieldInt47880;
+    public int fieldInt47881;
+    public int fieldInt47882;
+    public int fieldInt47883;
+    public int fieldInt47884;
+    public int fieldInt47885;
+    public int fieldInt47886;
+    public int fieldInt47887;
+    public int fieldInt47888;
+    public int fieldInt47889;
+    public int fieldInt47890;
+    public int fieldInt47891;
+    public int fieldInt47892;
+    public int fieldInt47893;
+    public int fieldInt47894;
+    public int fieldInt47895;
+    public int fieldInt47896;
+    public int fieldInt47897;
+    public int fieldInt47898;
+    public int fieldInt47899;
+    public int fieldInt47900;
+    public int fieldInt47901;
+    public int fieldInt47902;
+    public int fieldInt47903;
+    public int fieldInt47904;
+    public int fieldInt47905;
+    public int fieldInt47906;
+    public int fieldInt47907;
+    public int fieldInt47908;
+    public int fieldInt47909;
+    public int fieldInt47910;
+    public int fieldInt47911;
+    public int fieldInt47912;
+    public int fieldInt47913;
+    public int fieldInt47914;
+    public int fieldInt47915;
+    public int fieldInt47916;
+    public int fieldInt47917;
+    public int fieldInt47918;
+    public int fieldInt47919;
+    public int fieldInt47920;
+    public int fieldInt47921;
+    public int fieldInt47922;
+    public int fieldInt47923;
+    public int fieldInt47924;
+    public int fieldInt47925;
+    public int fieldInt47926;
+    public int fieldInt47927;
+    public int fieldInt47928;
+    public int fieldInt47929;
+    public int fieldInt47930;
+    public int fieldInt47931;
+    public int fieldInt47932;
+    public int fieldInt47933;
+    public int fieldInt47934;
+    public int fieldInt47935;
+    public int fieldInt47936;
+    public int fieldInt47937;
+    public int fieldInt47938;
+    public int fieldInt47939;
+    public int fieldInt47940;
+    public int fieldInt47941;
+    public int fieldInt47942;
+    public int fieldInt47943;
+    public int fieldInt47944;
+    public int fieldInt47945;
+    public int fieldInt47946;
+    public int fieldInt47947;
+    public int fieldInt47948;
+    public int fieldInt47949;
+    public int fieldInt47950;
+    public int fieldInt47951;
+    public int fieldInt47952;
+    public int fieldInt47953;
+    public int fieldInt47954;
+    public int fieldInt47955;
+    public int fieldInt47956;
+    public int fieldInt47957;
+    public int fieldInt47958;
+    public int fieldInt47959;
+    public int fieldInt47960;
+    public int fieldInt47961;
+    public int fieldInt47962;
+    public int fieldInt47963;
+    public int fieldInt47964;
+    public int fieldInt47965;
+    public int fieldInt47966;
+    public int fieldInt47967;
+    public int fieldInt47968;
+    public int fieldInt47969;
+    public int fieldInt47970;
+    public int fieldInt47971;
+    public int fieldInt47972;
+    public int fieldInt47973;
+    public int fieldInt47974;
+    public int fieldInt47975;
+    public int fieldInt47976;
+    public int fieldInt47977;
+    public int fieldInt47978;
+    public int fieldInt47979;
+    public int fieldInt47980;
+    public int fieldInt47981;
+    public int fieldInt47982;
+    public int fieldInt47983;
+    public int fieldInt47984;
+    public int fieldInt47985;
+    public int fieldInt47986;
+    public int fieldInt47987;
+    public int fieldInt47988;
+    public int fieldInt47989;
+    public int fieldInt47990;
+    public int fieldInt47991;
+    public int fieldInt47992;
+    public int fieldInt47993;
+    public int fieldInt47994;
+    public int fieldInt47995;
+    public int fieldInt47996;
+    public int fieldInt47997;
+    public int fieldInt47998;
+    public int fieldInt47999;
+    public int fieldInt48000;
+    public int fieldInt48001;
+    public int fieldInt48002;
+    public int fieldInt48003;
+    public int fieldInt48004;
+    public int fieldInt48005;
+    public int fieldInt48006;
+    public int fieldInt48007;
+    public int fieldInt48008;
+    public int fieldInt48009;
+    public int fieldInt48010;
+    public int fieldInt48011;
+    public int fieldInt48012;
+    public int fieldInt48013;
+    public int fieldInt48014;
+    public int fieldInt48015;
+    public int fieldInt48016;
+    public int fieldInt48017;
+    public int fieldInt48018;
+    public int fieldInt48019;
+    public int fieldInt48020;
+    public int fieldInt48021;
+    public int fieldInt48022;
+    public int fieldInt48023;
+    public int fieldInt48024;
+    public int fieldInt48025;
+    public int fieldInt48026;
+    public int fieldInt48027;
+    public int fieldInt48028;
+    public int fieldInt48029;
+    public int fieldInt48030;
+    public int fieldInt48031;
+    public int fieldInt48032;
+    public int fieldInt48033;
+    public int fieldInt48034;
+    public int fieldInt48035;
+    public int fieldInt48036;
+    public int fieldInt48037;
+    public int fieldInt48038;
+    public int fieldInt48039;
+    public int fieldInt48040;
+    public int fieldInt48041;
+    public int fieldInt48042;
+    public int fieldInt48043;
+    public int fieldInt48044;
+    public int fieldInt48045;
+    public int fieldInt48046;
+    public int fieldInt48047;
+    public int fieldInt48048;
+    public int fieldInt48049;
+    public int fieldInt48050;
+    public int fieldInt48051;
+    public int fieldInt48052;
+    public int fieldInt48053;
+    public int fieldInt48054;
+    public int fieldInt48055;
+    public int fieldInt48056;
+    public int fieldInt48057;
+    public int fieldInt48058;
+    public int fieldInt48059;
+    public int fieldInt48060;
+    public int fieldInt48061;
+    public int fieldInt48062;
+    public int fieldInt48063;
+    public int fieldInt48064;
+    public int fieldInt48065;
+    public int fieldInt48066;
+    public int fieldInt48067;
+    public int fieldInt48068;
+    public int fieldInt48069;
+    public int fieldInt48070;
+    public int fieldInt48071;
+    public int fieldInt48072;
+    public int fieldInt48073;
+    public int fieldInt48074;
+    public int fieldInt48075;
+    public int fieldInt48076;
+    public int fieldInt48077;
+    public int fieldInt48078;
+    public int fieldInt48079;
+    public int fieldInt48080;
+    public int fieldInt48081;
+    public int fieldInt48082;
+    public int fieldInt48083;
+    public int fieldInt48084;
+    public int fieldInt48085;
+    public int fieldInt48086;
+    public int fieldInt48087;
+    public int fieldInt48088;
+    public int fieldInt48089;
+    public int fieldInt48090;
+    public int fieldInt48091;
+    public int fieldInt48092;
+    public int fieldInt48093;
+    public int fieldInt48094;
+    public int fieldInt48095;
+    public int fieldInt48096;
+    public int fieldInt48097;
+    public int fieldInt48098;
+    public int fieldInt48099;
+    public int fieldInt48100;
+    public int fieldInt48101;
+    public int fieldInt48102;
+    public int fieldInt48103;
+    public int fieldInt48104;
+    public int fieldInt48105;
+    public int fieldInt48106;
+    public int fieldInt48107;
+    public int fieldInt48108;
+    public int fieldInt48109;
+    public int fieldInt48110;
+    public int fieldInt48111;
+    public int fieldInt48112;
+    public int fieldInt48113;
+    public int fieldInt48114;
+    public int fieldInt48115;
+    public int fieldInt48116;
+    public int fieldInt48117;
+    public int fieldInt48118;
+    public int fieldInt48119;
+    public int fieldInt48120;
+    public int fieldInt48121;
+    public int fieldInt48122;
+    public int fieldInt48123;
+    public int fieldInt48124;
+    public int fieldInt48125;
+    public int fieldInt48126;
+    public int fieldInt48127;
+    public int fieldInt48128;
+    public int fieldInt48129;
+    public int fieldInt48130;
+    public int fieldInt48131;
+    public int fieldInt48132;
+    public int fieldInt48133;
+    public int fieldInt48134;
+    public int fieldInt48135;
+    public int fieldInt48136;
+    public int fieldInt48137;
+    public int fieldInt48138;
+    public int fieldInt48139;
+    public int fieldInt48140;
+    public int fieldInt48141;
+    public int fieldInt48142;
+    public int fieldInt48143;
+    public int fieldInt48144;
+    public int fieldInt48145;
+    public int fieldInt48146;
+    public int fieldInt48147;
+    public int fieldInt48148;
+    public int fieldInt48149;
+    public int fieldInt48150;
+    public int fieldInt48151;
+    public int fieldInt48152;
+    public int fieldInt48153;
+    public int fieldInt48154;
+    public int fieldInt48155;
+    public int fieldInt48156;
+    public int fieldInt48157;
+    public int fieldInt48158;
+    public int fieldInt48159;
+    public int fieldInt48160;
+    public int fieldInt48161;
+    public int fieldInt48162;
+    public int fieldInt48163;
+    public int fieldInt48164;
+    public int fieldInt48165;
+    public int fieldInt48166;
+    public int fieldInt48167;
+    public int fieldInt48168;
+    public int fieldInt48169;
+    public int fieldInt48170;
+    public int fieldInt48171;
+    public int fieldInt48172;
+    public int fieldInt48173;
+    public int fieldInt48174;
+    public int fieldInt48175;
+    public int fieldInt48176;
+    public int fieldInt48177;
+    public int fieldInt48178;
+    public int fieldInt48179;
+    public int fieldInt48180;
+    public int fieldInt48181;
+    public int fieldInt48182;
+    public int fieldInt48183;
+    public int fieldInt48184;
+    public int fieldInt48185;
+    public int fieldInt48186;
+    public int fieldInt48187;
+    public int fieldInt48188;
+    public int fieldInt48189;
+    public int fieldInt48190;
+    public int fieldInt48191;
+    public int fieldInt48192;
+    public int fieldInt48193;
+    public int fieldInt48194;
+    public int fieldInt48195;
+    public int fieldInt48196;
+    public int fieldInt48197;
+    public int fieldInt48198;
+    public int fieldInt48199;
+    public int fieldInt48200;
+    public int fieldInt48201;
+    public int fieldInt48202;
+    public int fieldInt48203;
+    public int fieldInt48204;
+    public int fieldInt48205;
+    public int fieldInt48206;
+    public int fieldInt48207;
+    public int fieldInt48208;
+    public int fieldInt48209;
+    public int fieldInt48210;
+    public int fieldInt48211;
+    public int fieldInt48212;
+    public int fieldInt48213;
+    public int fieldInt48214;
+    public int fieldInt48215;
+    public int fieldInt48216;
+    public int fieldInt48217;
+    public int fieldInt48218;
+    public int fieldInt48219;
+    public int fieldInt48220;
+    public int fieldInt48221;
+    public int fieldInt48222;
+    public int fieldInt48223;
+    public int fieldInt48224;
+    public int fieldInt48225;
+    public int fieldInt48226;
+    public int fieldInt48227;
+    public int fieldInt48228;
+    public int fieldInt48229;
+    public int fieldInt48230;
+    public int fieldInt48231;
+    public int fieldInt48232;
+    public int fieldInt48233;
+    public int fieldInt48234;
+    public int fieldInt48235;
+    public int fieldInt48236;
+    public int fieldInt48237;
+    public int fieldInt48238;
+    public int fieldInt48239;
+    public int fieldInt48240;
+    public int fieldInt48241;
+    public int fieldInt48242;
+    public int fieldInt48243;
+    public int fieldInt48244;
+    public int fieldInt48245;
+    public int fieldInt48246;
+    public int fieldInt48247;
+    public int fieldInt48248;
+    public int fieldInt48249;
+    public int fieldInt48250;
+    public int fieldInt48251;
+    public int fieldInt48252;
+    public int fieldInt48253;
+    public int fieldInt48254;
+    public int fieldInt48255;
+    public int fieldInt48256;
+    public int fieldInt48257;
+    public int fieldInt48258;
+    public int fieldInt48259;
+    public int fieldInt48260;
+    public int fieldInt48261;
+    public int fieldInt48262;
+    public int fieldInt48263;
+    public int fieldInt48264;
+    public int fieldInt48265;
+    public int fieldInt48266;
+    public int fieldInt48267;
+    public int fieldInt48268;
+    public int fieldInt48269;
+    public int fieldInt48270;
+    public int fieldInt48271;
+    public int fieldInt48272;
+    public int fieldInt48273;
+    public int fieldInt48274;
+    public int fieldInt48275;
+    public int fieldInt48276;
+    public int fieldInt48277;
+    public int fieldInt48278;
+    public int fieldInt48279;
+    public int fieldInt48280;
+    public int fieldInt48281;
+    public int fieldInt48282;
+    public int fieldInt48283;
+    public int fieldInt48284;
+    public int fieldInt48285;
+    public int fieldInt48286;
+    public int fieldInt48287;
+    public int fieldInt48288;
+    public int fieldInt48289;
+    public int fieldInt48290;
+    public int fieldInt48291;
+    public int fieldInt48292;
+    public int fieldInt48293;
+    public int fieldInt48294;
+    public int fieldInt48295;
+    public int fieldInt48296;
+    public int fieldInt48297;
+    public int fieldInt48298;
+    public int fieldInt48299;
+    public int fieldInt48300;
+    public int fieldInt48301;
+    public int fieldInt48302;
+    public int fieldInt48303;
+    public int fieldInt48304;
+    public int fieldInt48305;
+    public int fieldInt48306;
+    public int fieldInt48307;
+    public int fieldInt48308;
+    public int fieldInt48309;
+    public int fieldInt48310;
+    public int fieldInt48311;
+    public int fieldInt48312;
+    public int fieldInt48313;
+    public int fieldInt48314;
+    public int fieldInt48315;
+    public int fieldInt48316;
+    public int fieldInt48317;
+    public int fieldInt48318;
+    public int fieldInt48319;
+    public int fieldInt48320;
+    public int fieldInt48321;
+    public int fieldInt48322;
+    public int fieldInt48323;
+    public int fieldInt48324;
+    public int fieldInt48325;
+    public int fieldInt48326;
+    public int fieldInt48327;
+    public int fieldInt48328;
+    public int fieldInt48329;
+    public int fieldInt48330;
+    public int fieldInt48331;
+    public int fieldInt48332;
+    public int fieldInt48333;
+    public int fieldInt48334;
+    public int fieldInt48335;
+    public int fieldInt48336;
+    public int fieldInt48337;
+    public int fieldInt48338;
+    public int fieldInt48339;
+    public int fieldInt48340;
+    public int fieldInt48341;
+    public int fieldInt48342;
+    public int fieldInt48343;
+    public int fieldInt48344;
+    public int fieldInt48345;
+    public int fieldInt48346;
+    public int fieldInt48347;
+    public int fieldInt48348;
+    public int fieldInt48349;
+    public int fieldInt48350;
+    public int fieldInt48351;
+    public int fieldInt48352;
+    public int fieldInt48353;
+    public int fieldInt48354;
+    public int fieldInt48355;
+    public int fieldInt48356;
+    public int fieldInt48357;
+    public int fieldInt48358;
+    public int fieldInt48359;
+    public int fieldInt48360;
+    public int fieldInt48361;
+    public int fieldInt48362;
+    public int fieldInt48363;
+    public int fieldInt48364;
+    public int fieldInt48365;
+    public int fieldInt48366;
+    public int fieldInt48367;
+    public int fieldInt48368;
+    public int fieldInt48369;
+    public int fieldInt48370;
+    public int fieldInt48371;
+    public int fieldInt48372;
+    public int fieldInt48373;
+    public int fieldInt48374;
+    public int fieldInt48375;
+    public int fieldInt48376;
+    public int fieldInt48377;
+    public int fieldInt48378;
+    public int fieldInt48379;
+    public int fieldInt48380;
+    public int fieldInt48381;
+    public int fieldInt48382;
+    public int fieldInt48383;
+    public int fieldInt48384;
+    public int fieldInt48385;
+    public int fieldInt48386;
+    public int fieldInt48387;
+    public int fieldInt48388;
+    public int fieldInt48389;
+    public int fieldInt48390;
+    public int fieldInt48391;
+    public int fieldInt48392;
+    public int fieldInt48393;
+    public int fieldInt48394;
+    public int fieldInt48395;
+    public int fieldInt48396;
+    public int fieldInt48397;
+    public int fieldInt48398;
+    public int fieldInt48399;
+    public int fieldInt48400;
+    public int fieldInt48401;
+    public int fieldInt48402;
+    public int fieldInt48403;
+    public int fieldInt48404;
+    public int fieldInt48405;
+    public int fieldInt48406;
+    public int fieldInt48407;
+    public int fieldInt48408;
+    public int fieldInt48409;
+    public int fieldInt48410;
+    public int fieldInt48411;
+    public int fieldInt48412;
+    public int fieldInt48413;
+    public int fieldInt48414;
+    public int fieldInt48415;
+    public int fieldInt48416;
+    public int fieldInt48417;
+    public int fieldInt48418;
+    public int fieldInt48419;
+    public int fieldInt48420;
+    public int fieldInt48421;
+    public int fieldInt48422;
+    public int fieldInt48423;
+    public int fieldInt48424;
+    public int fieldInt48425;
+    public int fieldInt48426;
+    public int fieldInt48427;
+    public int fieldInt48428;
+    public int fieldInt48429;
+    public int fieldInt48430;
+    public int fieldInt48431;
+    public int fieldInt48432;
+    public int fieldInt48433;
+    public int fieldInt48434;
+    public int fieldInt48435;
+    public int fieldInt48436;
+    public int fieldInt48437;
+    public int fieldInt48438;
+    public int fieldInt48439;
+    public int fieldInt48440;
+    public int fieldInt48441;
+    public int fieldInt48442;
+    public int fieldInt48443;
+    public int fieldInt48444;
+    public int fieldInt48445;
+    public int fieldInt48446;
+    public int fieldInt48447;
+    public int fieldInt48448;
+    public int fieldInt48449;
+    public int fieldInt48450;
+    public int fieldInt48451;
+    public int fieldInt48452;
+    public int fieldInt48453;
+    public int fieldInt48454;
+    public int fieldInt48455;
+    public int fieldInt48456;
+    public int fieldInt48457;
+    public int fieldInt48458;
+    public int fieldInt48459;
+    public int fieldInt48460;
+    public int fieldInt48461;
+    public int fieldInt48462;
+    public int fieldInt48463;
+    public int fieldInt48464;
+    public int fieldInt48465;
+    public int fieldInt48466;
+    public int fieldInt48467;
+    public int fieldInt48468;
+    public int fieldInt48469;
+    public int fieldInt48470;
+    public int fieldInt48471;
+    public int fieldInt48472;
+    public int fieldInt48473;
+    public int fieldInt48474;
+    public int fieldInt48475;
+    public int fieldInt48476;
+    public int fieldInt48477;
+    public int fieldInt48478;
+    public int fieldInt48479;
+    public int fieldInt48480;
+    public int fieldInt48481;
+    public int fieldInt48482;
+    public int fieldInt48483;
+    public int fieldInt48484;
+    public int fieldInt48485;
+    public int fieldInt48486;
+    public int fieldInt48487;
+    public int fieldInt48488;
+    public int fieldInt48489;
+    public int fieldInt48490;
+    public int fieldInt48491;
+    public int fieldInt48492;
+    public int fieldInt48493;
+    public int fieldInt48494;
+    public int fieldInt48495;
+    public int fieldInt48496;
+    public int fieldInt48497;
+    public int fieldInt48498;
+    public int fieldInt48499;
+    public int fieldInt48500;
+    public int fieldInt48501;
+    public int fieldInt48502;
+    public int fieldInt48503;
+    public int fieldInt48504;
+    public int fieldInt48505;
+    public int fieldInt48506;
+    public int fieldInt48507;
+    public int fieldInt48508;
+    public int fieldInt48509;
+    public int fieldInt48510;
+    public int fieldInt48511;
+    public int fieldInt48512;
+    public int fieldInt48513;
+    public int fieldInt48514;
+    public int fieldInt48515;
+    public int fieldInt48516;
+    public int fieldInt48517;
+    public int fieldInt48518;
+    public int fieldInt48519;
+    public int fieldInt48520;
+    public int fieldInt48521;
+    public int fieldInt48522;
+    public int fieldInt48523;
+    public int fieldInt48524;
+    public int fieldInt48525;
+    public int fieldInt48526;
+    public int fieldInt48527;
+    public int fieldInt48528;
+    public int fieldInt48529;
+    public int fieldInt48530;
+    public int fieldInt48531;
+    public int fieldInt48532;
+    public int fieldInt48533;
+    public int fieldInt48534;
+    public int fieldInt48535;
+    public int fieldInt48536;
+    public int fieldInt48537;
+    public int fieldInt48538;
+    public int fieldInt48539;
+    public int fieldInt48540;
+    public int fieldInt48541;
+    public int fieldInt48542;
+    public int fieldInt48543;
+    public int fieldInt48544;
+    public int fieldInt48545;
+    public int fieldInt48546;
+    public int fieldInt48547;
+    public int fieldInt48548;
+    public int fieldInt48549;
+    public int fieldInt48550;
+    public int fieldInt48551;
+    public int fieldInt48552;
+    public int fieldInt48553;
+    public int fieldInt48554;
+    public int fieldInt48555;
+    public int fieldInt48556;
+    public int fieldInt48557;
+    public int fieldInt48558;
+    public int fieldInt48559;
+    public int fieldInt48560;
+    public int fieldInt48561;
+    public int fieldInt48562;
+    public int fieldInt48563;
+    public int fieldInt48564;
+    public int fieldInt48565;
+    public int fieldInt48566;
+    public int fieldInt48567;
+    public int fieldInt48568;
+    public int fieldInt48569;
+    public int fieldInt48570;
+    public int fieldInt48571;
+    public int fieldInt48572;
+    public int fieldInt48573;
+    public int fieldInt48574;
+    public int fieldInt48575;
+    public int fieldInt48576;
+    public int fieldInt48577;
+    public int fieldInt48578;
+    public int fieldInt48579;
+    public int fieldInt48580;
+    public int fieldInt48581;
+    public int fieldInt48582;
+    public int fieldInt48583;
+    public int fieldInt48584;
+    public int fieldInt48585;
+    public int fieldInt48586;
+    public int fieldInt48587;
+    public int fieldInt48588;
+    public int fieldInt48589;
+    public int fieldInt48590;
+    public int fieldInt48591;
+    public int fieldInt48592;
+    public int fieldInt48593;
+    public int fieldInt48594;
+    public int fieldInt48595;
+    public int fieldInt48596;
+    public int fieldInt48597;
+    public int fieldInt48598;
+    public int fieldInt48599;
+    public int fieldInt48600;
+    public int fieldInt48601;
+    public int fieldInt48602;
+    public int fieldInt48603;
+    public int fieldInt48604;
+    public int fieldInt48605;
+    public int fieldInt48606;
+    public int fieldInt48607;
+    public int fieldInt48608;
+    public int fieldInt48609;
+    public int fieldInt48610;
+    public int fieldInt48611;
+    public int fieldInt48612;
+    public int fieldInt48613;
+    public int fieldInt48614;
+    public int fieldInt48615;
+    public int fieldInt48616;
+    public int fieldInt48617;
+    public int fieldInt48618;
+    public int fieldInt48619;
+    public int fieldInt48620;
+    public int fieldInt48621;
+    public int fieldInt48622;
+    public int fieldInt48623;
+    public int fieldInt48624;
+    public int fieldInt48625;
+    public int fieldInt48626;
+    public int fieldInt48627;
+    public int fieldInt48628;
+    public int fieldInt48629;
+    public int fieldInt48630;
+    public int fieldInt48631;
+    public int fieldInt48632;
+    public int fieldInt48633;
+    public int fieldInt48634;
+    public int fieldInt48635;
+    public int fieldInt48636;
+    public int fieldInt48637;
+    public int fieldInt48638;
+    public int fieldInt48639;
+    public int fieldInt48640;
+    public int fieldInt48641;
+    public int fieldInt48642;
+    public int fieldInt48643;
+    public int fieldInt48644;
+    public int fieldInt48645;
+    public int fieldInt48646;
+    public int fieldInt48647;
+    public int fieldInt48648;
+    public int fieldInt48649;
+    public int fieldInt48650;
+    public int fieldInt48651;
+    public int fieldInt48652;
+    public int fieldInt48653;
+    public int fieldInt48654;
+    public int fieldInt48655;
+    public int fieldInt48656;
+    public int fieldInt48657;
+    public int fieldInt48658;
+    public int fieldInt48659;
+    public int fieldInt48660;
+    public int fieldInt48661;
+    public int fieldInt48662;
+    public int fieldInt48663;
+    public int fieldInt48664;
+    public int fieldInt48665;
+    public int fieldInt48666;
+    public int fieldInt48667;
+    public int fieldInt48668;
+    public int fieldInt48669;
+    public int fieldInt48670;
+    public int fieldInt48671;
+    public int fieldInt48672;
+    public int fieldInt48673;
+    public int fieldInt48674;
+    public int fieldInt48675;
+    public int fieldInt48676;
+    public int fieldInt48677;
+    public int fieldInt48678;
+    public int fieldInt48679;
+    public int fieldInt48680;
+    public int fieldInt48681;
+    public int fieldInt48682;
+    public int fieldInt48683;
+    public int fieldInt48684;
+    public int fieldInt48685;
+    public int fieldInt48686;
+    public int fieldInt48687;
+    public int fieldInt48688;
+    public int fieldInt48689;
+    public int fieldInt48690;
+    public int fieldInt48691;
+    public int fieldInt48692;
+    public int fieldInt48693;
+    public int fieldInt48694;
+    public int fieldInt48695;
+    public int fieldInt48696;
+    public int fieldInt48697;
+    public int fieldInt48698;
+    public int fieldInt48699;
+    public int fieldInt48700;
+    public int fieldInt48701;
+    public int fieldInt48702;
+    public int fieldInt48703;
+    public int fieldInt48704;
+    public int fieldInt48705;
+    public int fieldInt48706;
+    public int fieldInt48707;
+    public int fieldInt48708;
+    public int fieldInt48709;
+    public int fieldInt48710;
+    public int fieldInt48711;
+    public int fieldInt48712;
+    public int fieldInt48713;
+    public int fieldInt48714;
+    public int fieldInt48715;
+    public int fieldInt48716;
+    public int fieldInt48717;
+    public int fieldInt48718;
+    public int fieldInt48719;
+    public int fieldInt48720;
+    public int fieldInt48721;
+    public int fieldInt48722;
+    public int fieldInt48723;
+    public int fieldInt48724;
+    public int fieldInt48725;
+    public int fieldInt48726;
+    public int fieldInt48727;
+    public int fieldInt48728;
+    public int fieldInt48729;
+    public int fieldInt48730;
+    public int fieldInt48731;
+    public int fieldInt48732;
+    public int fieldInt48733;
+    public int fieldInt48734;
+    public int fieldInt48735;
+    public int fieldInt48736;
+    public int fieldInt48737;
+    public int fieldInt48738;
+    public int fieldInt48739;
+    public int fieldInt48740;
+    public int fieldInt48741;
+    public int fieldInt48742;
+    public int fieldInt48743;
+    public int fieldInt48744;
+    public int fieldInt48745;
+    public int fieldInt48746;
+    public int fieldInt48747;
+    public int fieldInt48748;
+    public int fieldInt48749;
+    public int fieldInt48750;
+    public int fieldInt48751;
+    public int fieldInt48752;
+    public int fieldInt48753;
+    public int fieldInt48754;
+    public int fieldInt48755;
+    public int fieldInt48756;
+    public int fieldInt48757;
+    public int fieldInt48758;
+    public int fieldInt48759;
+    public int fieldInt48760;
+    public int fieldInt48761;
+    public int fieldInt48762;
+    public int fieldInt48763;
+    public int fieldInt48764;
+    public int fieldInt48765;
+    public int fieldInt48766;
+    public int fieldInt48767;
+    public int fieldInt48768;
+    public int fieldInt48769;
+    public int fieldInt48770;
+    public int fieldInt48771;
+    public int fieldInt48772;
+    public int fieldInt48773;
+    public int fieldInt48774;
+    public int fieldInt48775;
+    public int fieldInt48776;
+    public int fieldInt48777;
+    public int fieldInt48778;
+    public int fieldInt48779;
+    public int fieldInt48780;
+    public int fieldInt48781;
+    public int fieldInt48782;
+    public int fieldInt48783;
+    public int fieldInt48784;
+    public int fieldInt48785;
+    public int fieldInt48786;
+    public int fieldInt48787;
+    public int fieldInt48788;
+    public int fieldInt48789;
+    public int fieldInt48790;
+    public int fieldInt48791;
+    public int fieldInt48792;
+    public int fieldInt48793;
+    public int fieldInt48794;
+    public int fieldInt48795;
+    public int fieldInt48796;
+    public int fieldInt48797;
+    public int fieldInt48798;
+    public int fieldInt48799;
+    public int fieldInt48800;
+    public int fieldInt48801;
+    public int fieldInt48802;
+    public int fieldInt48803;
+    public int fieldInt48804;
+    public int fieldInt48805;
+    public int fieldInt48806;
+    public int fieldInt48807;
+    public int fieldInt48808;
+    public int fieldInt48809;
+    public int fieldInt48810;
+    public int fieldInt48811;
+    public int fieldInt48812;
+    public int fieldInt48813;
+    public int fieldInt48814;
+    public int fieldInt48815;
+    public int fieldInt48816;
+    public int fieldInt48817;
+    public int fieldInt48818;
+    public int fieldInt48819;
+    public int fieldInt48820;
+    public int fieldInt48821;
+    public int fieldInt48822;
+    public int fieldInt48823;
+    public int fieldInt48824;
+    public int fieldInt48825;
+    public int fieldInt48826;
+    public int fieldInt48827;
+    public int fieldInt48828;
+    public int fieldInt48829;
+    public int fieldInt48830;
+    public int fieldInt48831;
+    public int fieldInt48832;
+    public int fieldInt48833;
+    public int fieldInt48834;
+    public int fieldInt48835;
+    public int fieldInt48836;
+    public int fieldInt48837;
+    public int fieldInt48838;
+    public int fieldInt48839;
+    public int fieldInt48840;
+    public int fieldInt48841;
+    public int fieldInt48842;
+    public int fieldInt48843;
+    public int fieldInt48844;
+    public int fieldInt48845;
+    public int fieldInt48846;
+    public int fieldInt48847;
+    public int fieldInt48848;
+    public int fieldInt48849;
+    public int fieldInt48850;
+    public int fieldInt48851;
+    public int fieldInt48852;
+    public int fieldInt48853;
+    public int fieldInt48854;
+    public int fieldInt48855;
+    public int fieldInt48856;
+    public int fieldInt48857;
+    public int fieldInt48858;
+    public int fieldInt48859;
+    public int fieldInt48860;
+    public int fieldInt48861;
+    public int fieldInt48862;
+    public int fieldInt48863;
+    public int fieldInt48864;
+    public int fieldInt48865;
+    public int fieldInt48866;
+    public int fieldInt48867;
+    public int fieldInt48868;
+    public int fieldInt48869;
+    public int fieldInt48870;
+    public int fieldInt48871;
+    public int fieldInt48872;
+    public int fieldInt48873;
+    public int fieldInt48874;
+    public int fieldInt48875;
+    public int fieldInt48876;
+    public int fieldInt48877;
+    public int fieldInt48878;
+    public int fieldInt48879;
+    public int fieldInt48880;
+    public int fieldInt48881;
+    public int fieldInt48882;
+    public int fieldInt48883;
+    public int fieldInt48884;
+    public int fieldInt48885;
+    public int fieldInt48886;
+    public int fieldInt48887;
+    public int fieldInt48888;
+    public int fieldInt48889;
+    public int fieldInt48890;
+    public int fieldInt48891;
+    public int fieldInt48892;
+    public int fieldInt48893;
+    public int fieldInt48894;
+    public int fieldInt48895;
+    public int fieldInt48896;
+    public int fieldInt48897;
+    public int fieldInt48898;
+    public int fieldInt48899;
+    public int fieldInt48900;
+    public int fieldInt48901;
+    public int fieldInt48902;
+    public int fieldInt48903;
+    public int fieldInt48904;
+    public int fieldInt48905;
+    public int fieldInt48906;
+    public int fieldInt48907;
+    public int fieldInt48908;
+    public int fieldInt48909;
+    public int fieldInt48910;
+    public int fieldInt48911;
+    public int fieldInt48912;
+    public int fieldInt48913;
+    public int fieldInt48914;
+    public int fieldInt48915;
+    public int fieldInt48916;
+    public int fieldInt48917;
+    public int fieldInt48918;
+    public int fieldInt48919;
+    public int fieldInt48920;
+    public int fieldInt48921;
+    public int fieldInt48922;
+    public int fieldInt48923;
+    public int fieldInt48924;
+    public int fieldInt48925;
+    public int fieldInt48926;
+    public int fieldInt48927;
+    public int fieldInt48928;
+    public int fieldInt48929;
+    public int fieldInt48930;
+    public int fieldInt48931;
+    public int fieldInt48932;
+    public int fieldInt48933;
+    public int fieldInt48934;
+    public int fieldInt48935;
+    public int fieldInt48936;
+    public int fieldInt48937;
+    public int fieldInt48938;
+    public int fieldInt48939;
+    public int fieldInt48940;
+    public int fieldInt48941;
+    public int fieldInt48942;
+    public int fieldInt48943;
+    public int fieldInt48944;
+    public int fieldInt48945;
+    public int fieldInt48946;
+    public int fieldInt48947;
+    public int fieldInt48948;
+    public int fieldInt48949;
+    public int fieldInt48950;
+    public int fieldInt48951;
+    public int fieldInt48952;
+    public int fieldInt48953;
+    public int fieldInt48954;
+    public int fieldInt48955;
+    public int fieldInt48956;
+    public int fieldInt48957;
+    public int fieldInt48958;
+    public int fieldInt48959;
+    public int fieldInt48960;
+    public int fieldInt48961;
+    public int fieldInt48962;
+    public int fieldInt48963;
+    public int fieldInt48964;
+    public int fieldInt48965;
+    public int fieldInt48966;
+    public int fieldInt48967;
+    public int fieldInt48968;
+    public int fieldInt48969;
+    public int fieldInt48970;
+    public int fieldInt48971;
+    public int fieldInt48972;
+    public int fieldInt48973;
+    public int fieldInt48974;
+    public int fieldInt48975;
+    public int fieldInt48976;
+    public int fieldInt48977;
+    public int fieldInt48978;
+    public int fieldInt48979;
+    public int fieldInt48980;
+    public int fieldInt48981;
+    public int fieldInt48982;
+    public int fieldInt48983;
+    public int fieldInt48984;
+    public int fieldInt48985;
+    public int fieldInt48986;
+    public int fieldInt48987;
+    public int fieldInt48988;
+    public int fieldInt48989;
+    public int fieldInt48990;
+    public int fieldInt48991;
+    public int fieldInt48992;
+    public int fieldInt48993;
+    public int fieldInt48994;
+    public int fieldInt48995;
+    public int fieldInt48996;
+    public int fieldInt48997;
+    public int fieldInt48998;
+    public int fieldInt48999;
+    public int fieldInt49000;
+    public int fieldInt49001;
+    public int fieldInt49002;
+    public int fieldInt49003;
+    public int fieldInt49004;
+    public int fieldInt49005;
+    public int fieldInt49006;
+    public int fieldInt49007;
+    public int fieldInt49008;
+    public int fieldInt49009;
+    public int fieldInt49010;
+    public int fieldInt49011;
+    public int fieldInt49012;
+    public int fieldInt49013;
+    public int fieldInt49014;
+    public int fieldInt49015;
+    public int fieldInt49016;
+    public int fieldInt49017;
+    public int fieldInt49018;
+    public int fieldInt49019;
+    public int fieldInt49020;
+    public int fieldInt49021;
+    public int fieldInt49022;
+    public int fieldInt49023;
+    public int fieldInt49024;
+    public int fieldInt49025;
+    public int fieldInt49026;
+    public int fieldInt49027;
+    public int fieldInt49028;
+    public int fieldInt49029;
+    public int fieldInt49030;
+    public int fieldInt49031;
+    public int fieldInt49032;
+    public int fieldInt49033;
+    public int fieldInt49034;
+    public int fieldInt49035;
+    public int fieldInt49036;
+    public int fieldInt49037;
+    public int fieldInt49038;
+    public int fieldInt49039;
+    public int fieldInt49040;
+    public int fieldInt49041;
+    public int fieldInt49042;
+    public int fieldInt49043;
+    public int fieldInt49044;
+    public int fieldInt49045;
+    public int fieldInt49046;
+    public int fieldInt49047;
+    public int fieldInt49048;
+    public int fieldInt49049;
+    public int fieldInt49050;
+    public int fieldInt49051;
+    public int fieldInt49052;
+    public int fieldInt49053;
+    public int fieldInt49054;
+    public int fieldInt49055;
+    public int fieldInt49056;
+    public int fieldInt49057;
+    public int fieldInt49058;
+    public int fieldInt49059;
+    public int fieldInt49060;
+    public int fieldInt49061;
+    public int fieldInt49062;
+    public int fieldInt49063;
+    public int fieldInt49064;
+    public int fieldInt49065;
+    public int fieldInt49066;
+    public int fieldInt49067;
+    public int fieldInt49068;
+    public int fieldInt49069;
+    public int fieldInt49070;
+    public int fieldInt49071;
+    public int fieldInt49072;
+    public int fieldInt49073;
+    public int fieldInt49074;
+    public int fieldInt49075;
+    public int fieldInt49076;
+    public int fieldInt49077;
+    public int fieldInt49078;
+    public int fieldInt49079;
+    public int fieldInt49080;
+    public int fieldInt49081;
+    public int fieldInt49082;
+    public int fieldInt49083;
+    public int fieldInt49084;
+    public int fieldInt49085;
+    public int fieldInt49086;
+    public int fieldInt49087;
+    public int fieldInt49088;
+    public int fieldInt49089;
+    public int fieldInt49090;
+    public int fieldInt49091;
+    public int fieldInt49092;
+    public int fieldInt49093;
+    public int fieldInt49094;
+    public int fieldInt49095;
+    public int fieldInt49096;
+    public int fieldInt49097;
+    public int fieldInt49098;
+    public int fieldInt49099;
+    public int fieldInt49100;
+    public int fieldInt49101;
+    public int fieldInt49102;
+    public int fieldInt49103;
+    public int fieldInt49104;
+    public int fieldInt49105;
+    public int fieldInt49106;
+    public int fieldInt49107;
+    public int fieldInt49108;
+    public int fieldInt49109;
+    public int fieldInt49110;
+    public int fieldInt49111;
+    public int fieldInt49112;
+    public int fieldInt49113;
+    public int fieldInt49114;
+    public int fieldInt49115;
+    public int fieldInt49116;
+    public int fieldInt49117;
+    public int fieldInt49118;
+    public int fieldInt49119;
+    public int fieldInt49120;
+    public int fieldInt49121;
+    public int fieldInt49122;
+    public int fieldInt49123;
+    public int fieldInt49124;
+    public int fieldInt49125;
+    public int fieldInt49126;
+    public int fieldInt49127;
+    public int fieldInt49128;
+    public int fieldInt49129;
+    public int fieldInt49130;
+    public int fieldInt49131;
+    public int fieldInt49132;
+    public int fieldInt49133;
+    public int fieldInt49134;
+    public int fieldInt49135;
+    public int fieldInt49136;
+    public int fieldInt49137;
+    public int fieldInt49138;
+    public int fieldInt49139;
+    public int fieldInt49140;
+    public int fieldInt49141;
+    public int fieldInt49142;
+    public int fieldInt49143;
+    public int fieldInt49144;
+    public int fieldInt49145;
+    public int fieldInt49146;
+    public int fieldInt49147;
+    public int fieldInt49148;
+    public int fieldInt49149;
+    public int fieldInt49150;
+    public int fieldInt49151;
+    public int fieldInt49152;
+    public int fieldInt49153;
+    public int fieldInt49154;
+    public int fieldInt49155;
+    public int fieldInt49156;
+    public int fieldInt49157;
+    public int fieldInt49158;
+    public int fieldInt49159;
+    public int fieldInt49160;
+    public int fieldInt49161;
+    public int fieldInt49162;
+    public int fieldInt49163;
+    public int fieldInt49164;
+    public int fieldInt49165;
+    public int fieldInt49166;
+    public int fieldInt49167;
+    public int fieldInt49168;
+    public int fieldInt49169;
+    public int fieldInt49170;
+    public int fieldInt49171;
+    public int fieldInt49172;
+    public int fieldInt49173;
+    public int fieldInt49174;
+    public int fieldInt49175;
+    public int fieldInt49176;
+    public int fieldInt49177;
+    public int fieldInt49178;
+    public int fieldInt49179;
+    public int fieldInt49180;
+    public int fieldInt49181;
+    public int fieldInt49182;
+    public int fieldInt49183;
+    public int fieldInt49184;
+    public int fieldInt49185;
+    public int fieldInt49186;
+    public int fieldInt49187;
+    public int fieldInt49188;
+    public int fieldInt49189;
+    public int fieldInt49190;
+    public int fieldInt49191;
+    public int fieldInt49192;
+    public int fieldInt49193;
+    public int fieldInt49194;
+    public int fieldInt49195;
+    public int fieldInt49196;
+    public int fieldInt49197;
+    public int fieldInt49198;
+    public int fieldInt49199;
+    public int fieldInt49200;
+    public int fieldInt49201;
+    public int fieldInt49202;
+    public int fieldInt49203;
+    public int fieldInt49204;
+    public int fieldInt49205;
+    public int fieldInt49206;
+    public int fieldInt49207;
+    public int fieldInt49208;
+    public int fieldInt49209;
+    public int fieldInt49210;
+    public int fieldInt49211;
+    public int fieldInt49212;
+    public int fieldInt49213;
+    public int fieldInt49214;
+    public int fieldInt49215;
+    public int fieldInt49216;
+    public int fieldInt49217;
+    public int fieldInt49218;
+    public int fieldInt49219;
+    public int fieldInt49220;
+    public int fieldInt49221;
+    public int fieldInt49222;
+    public int fieldInt49223;
+    public int fieldInt49224;
+    public int fieldInt49225;
+    public int fieldInt49226;
+    public int fieldInt49227;
+    public int fieldInt49228;
+    public int fieldInt49229;
+    public int fieldInt49230;
+    public int fieldInt49231;
+    public int fieldInt49232;
+    public int fieldInt49233;
+    public int fieldInt49234;
+    public int fieldInt49235;
+    public int fieldInt49236;
+    public int fieldInt49237;
+    public int fieldInt49238;
+    public int fieldInt49239;
+    public int fieldInt49240;
+    public int fieldInt49241;
+    public int fieldInt49242;
+    public int fieldInt49243;
+    public int fieldInt49244;
+    public int fieldInt49245;
+    public int fieldInt49246;
+    public int fieldInt49247;
+    public int fieldInt49248;
+    public int fieldInt49249;
+    public int fieldInt49250;
+    public int fieldInt49251;
+    public int fieldInt49252;
+    public int fieldInt49253;
+    public int fieldInt49254;
+    public int fieldInt49255;
+    public int fieldInt49256;
+    public int fieldInt49257;
+    public int fieldInt49258;
+    public int fieldInt49259;
+    public int fieldInt49260;
+    public int fieldInt49261;
+    public int fieldInt49262;
+    public int fieldInt49263;
+    public int fieldInt49264;
+    public int fieldInt49265;
+    public int fieldInt49266;
+    public int fieldInt49267;
+    public int fieldInt49268;
+    public int fieldInt49269;
+    public int fieldInt49270;
+    public int fieldInt49271;
+    public int fieldInt49272;
+    public int fieldInt49273;
+    public int fieldInt49274;
+    public int fieldInt49275;
+    public int fieldInt49276;
+    public int fieldInt49277;
+    public int fieldInt49278;
+    public int fieldInt49279;
+    public int fieldInt49280;
+    public int fieldInt49281;
+    public int fieldInt49282;
+    public int fieldInt49283;
+    public int fieldInt49284;
+    public int fieldInt49285;
+    public int fieldInt49286;
+    public int fieldInt49287;
+    public int fieldInt49288;
+    public int fieldInt49289;
+    public int fieldInt49290;
+    public int fieldInt49291;
+    public int fieldInt49292;
+    public int fieldInt49293;
+    public int fieldInt49294;
+    public int fieldInt49295;
+    public int fieldInt49296;
+    public int fieldInt49297;
+    public int fieldInt49298;
+    public int fieldInt49299;
+    public int fieldInt49300;
+    public int fieldInt49301;
+    public int fieldInt49302;
+    public int fieldInt49303;
+    public int fieldInt49304;
+    public int fieldInt49305;
+    public int fieldInt49306;
+    public int fieldInt49307;
+    public int fieldInt49308;
+    public int fieldInt49309;
+    public int fieldInt49310;
+    public int fieldInt49311;
+    public int fieldInt49312;
+    public int fieldInt49313;
+    public int fieldInt49314;
+    public int fieldInt49315;
+    public int fieldInt49316;
+    public int fieldInt49317;
+    public int fieldInt49318;
+    public int fieldInt49319;
+    public int fieldInt49320;
+    public int fieldInt49321;
+    public int fieldInt49322;
+    public int fieldInt49323;
+    public int fieldInt49324;
+    public int fieldInt49325;
+    public int fieldInt49326;
+    public int fieldInt49327;
+    public int fieldInt49328;
+    public int fieldInt49329;
+    public int fieldInt49330;
+    public int fieldInt49331;
+    public int fieldInt49332;
+    public int fieldInt49333;
+    public int fieldInt49334;
+    public int fieldInt49335;
+    public int fieldInt49336;
+    public int fieldInt49337;
+    public int fieldInt49338;
+    public int fieldInt49339;
+    public int fieldInt49340;
+    public int fieldInt49341;
+    public int fieldInt49342;
+    public int fieldInt49343;
+    public int fieldInt49344;
+    public int fieldInt49345;
+    public int fieldInt49346;
+    public int fieldInt49347;
+    public int fieldInt49348;
+    public int fieldInt49349;
+    public int fieldInt49350;
+    public int fieldInt49351;
+    public int fieldInt49352;
+    public int fieldInt49353;
+    public int fieldInt49354;
+    public int fieldInt49355;
+    public int fieldInt49356;
+    public int fieldInt49357;
+    public int fieldInt49358;
+    public int fieldInt49359;
+    public int fieldInt49360;
+    public int fieldInt49361;
+    public int fieldInt49362;
+    public int fieldInt49363;
+    public int fieldInt49364;
+    public int fieldInt49365;
+    public int fieldInt49366;
+    public int fieldInt49367;
+    public int fieldInt49368;
+    public int fieldInt49369;
+    public int fieldInt49370;
+    public int fieldInt49371;
+    public int fieldInt49372;
+    public int fieldInt49373;
+    public int fieldInt49374;
+    public int fieldInt49375;
+    public int fieldInt49376;
+    public int fieldInt49377;
+    public int fieldInt49378;
+    public int fieldInt49379;
+    public int fieldInt49380;
+    public int fieldInt49381;
+    public int fieldInt49382;
+    public int fieldInt49383;
+    public int fieldInt49384;
+    public int fieldInt49385;
+    public int fieldInt49386;
+    public int fieldInt49387;
+    public int fieldInt49388;
+    public int fieldInt49389;
+    public int fieldInt49390;
+    public int fieldInt49391;
+    public int fieldInt49392;
+    public int fieldInt49393;
+    public int fieldInt49394;
+    public int fieldInt49395;
+    public int fieldInt49396;
+    public int fieldInt49397;
+    public int fieldInt49398;
+    public int fieldInt49399;
+    public int fieldInt49400;
+    public int fieldInt49401;
+    public int fieldInt49402;
+    public int fieldInt49403;
+    public int fieldInt49404;
+    public int fieldInt49405;
+    public int fieldInt49406;
+    public int fieldInt49407;
+    public int fieldInt49408;
+    public int fieldInt49409;
+    public int fieldInt49410;
+    public int fieldInt49411;
+    public int fieldInt49412;
+    public int fieldInt49413;
+    public int fieldInt49414;
+    public int fieldInt49415;
+    public int fieldInt49416;
+    public int fieldInt49417;
+    public int fieldInt49418;
+    public int fieldInt49419;
+    public int fieldInt49420;
+    public int fieldInt49421;
+    public int fieldInt49422;
+    public int fieldInt49423;
+    public int fieldInt49424;
+    public int fieldInt49425;
+    public int fieldInt49426;
+    public int fieldInt49427;
+    public int fieldInt49428;
+    public int fieldInt49429;
+    public int fieldInt49430;
+    public int fieldInt49431;
+    public int fieldInt49432;
+    public int fieldInt49433;
+    public int fieldInt49434;
+    public int fieldInt49435;
+    public int fieldInt49436;
+    public int fieldInt49437;
+    public int fieldInt49438;
+    public int fieldInt49439;
+    public int fieldInt49440;
+    public int fieldInt49441;
+    public int fieldInt49442;
+    public int fieldInt49443;
+    public int fieldInt49444;
+    public int fieldInt49445;
+    public int fieldInt49446;
+    public int fieldInt49447;
+    public int fieldInt49448;
+    public int fieldInt49449;
+    public int fieldInt49450;
+    public int fieldInt49451;
+    public int fieldInt49452;
+    public int fieldInt49453;
+    public int fieldInt49454;
+    public int fieldInt49455;
+    public int fieldInt49456;
+    public int fieldInt49457;
+    public int fieldInt49458;
+    public int fieldInt49459;
+    public int fieldInt49460;
+    public int fieldInt49461;
+    public int fieldInt49462;
+    public int fieldInt49463;
+    public int fieldInt49464;
+    public int fieldInt49465;
+    public int fieldInt49466;
+    public int fieldInt49467;
+    public int fieldInt49468;
+    public int fieldInt49469;
+    public int fieldInt49470;
+    public int fieldInt49471;
+    public int fieldInt49472;
+    public int fieldInt49473;
+    public int fieldInt49474;
+    public int fieldInt49475;
+    public int fieldInt49476;
+    public int fieldInt49477;
+    public int fieldInt49478;
+    public int fieldInt49479;
+    public int fieldInt49480;
+    public int fieldInt49481;
+    public int fieldInt49482;
+    public int fieldInt49483;
+    public int fieldInt49484;
+    public int fieldInt49485;
+    public int fieldInt49486;
+    public int fieldInt49487;
+    public int fieldInt49488;
+    public int fieldInt49489;
+    public int fieldInt49490;
+    public int fieldInt49491;
+    public int fieldInt49492;
+    public int fieldInt49493;
+    public int fieldInt49494;
+    public int fieldInt49495;
+    public int fieldInt49496;
+    public int fieldInt49497;
+    public int fieldInt49498;
+    public int fieldInt49499;
+    public int fieldInt49500;
+    public int fieldInt49501;
+    public int fieldInt49502;
+    public int fieldInt49503;
+    public int fieldInt49504;
+    public int fieldInt49505;
+    public int fieldInt49506;
+    public int fieldInt49507;
+    public int fieldInt49508;
+    public int fieldInt49509;
+    public int fieldInt49510;
+    public int fieldInt49511;
+    public int fieldInt49512;
+    public int fieldInt49513;
+    public int fieldInt49514;
+    public int fieldInt49515;
+    public int fieldInt49516;
+    public int fieldInt49517;
+    public int fieldInt49518;
+    public int fieldInt49519;
+    public int fieldInt49520;
+    public int fieldInt49521;
+    public int fieldInt49522;
+    public int fieldInt49523;
+    public int fieldInt49524;
+    public int fieldInt49525;
+    public int fieldInt49526;
+    public int fieldInt49527;
+    public int fieldInt49528;
+    public int fieldInt49529;
+    public int fieldInt49530;
+    public int fieldInt49531;
+    public int fieldInt49532;
+    public int fieldInt49533;
+    public int fieldInt49534;
+    public int fieldInt49535;
+    public int fieldInt49536;
+    public int fieldInt49537;
+    public int fieldInt49538;
+    public int fieldInt49539;
+    public int fieldInt49540;
+    public int fieldInt49541;
+    public int fieldInt49542;
+    public int fieldInt49543;
+    public int fieldInt49544;
+    public int fieldInt49545;
+    public int fieldInt49546;
+    public int fieldInt49547;
+    public int fieldInt49548;
+    public int fieldInt49549;
+    public int fieldInt49550;
+    public int fieldInt49551;
+    public int fieldInt49552;
+    public int fieldInt49553;
+    public int fieldInt49554;
+    public int fieldInt49555;
+    public int fieldInt49556;
+    public int fieldInt49557;
+    public int fieldInt49558;
+    public int fieldInt49559;
+    public int fieldInt49560;
+    public int fieldInt49561;
+    public int fieldInt49562;
+    public int fieldInt49563;
+    public int fieldInt49564;
+    public int fieldInt49565;
+    public int fieldInt49566;
+    public int fieldInt49567;
+    public int fieldInt49568;
+    public int fieldInt49569;
+    public int fieldInt49570;
+    public int fieldInt49571;
+    public int fieldInt49572;
+    public int fieldInt49573;
+    public int fieldInt49574;
+    public int fieldInt49575;
+    public int fieldInt49576;
+    public int fieldInt49577;
+    public int fieldInt49578;
+    public int fieldInt49579;
+    public int fieldInt49580;
+    public int fieldInt49581;
+    public int fieldInt49582;
+    public int fieldInt49583;
+    public int fieldInt49584;
+    public int fieldInt49585;
+    public int fieldInt49586;
+    public int fieldInt49587;
+    public int fieldInt49588;
+    public int fieldInt49589;
+    public int fieldInt49590;
+    public int fieldInt49591;
+    public int fieldInt49592;
+    public int fieldInt49593;
+    public int fieldInt49594;
+    public int fieldInt49595;
+    public int fieldInt49596;
+    public int fieldInt49597;
+    public int fieldInt49598;
+    public int fieldInt49599;
+    public int fieldInt49600;
+    public int fieldInt49601;
+    public int fieldInt49602;
+    public int fieldInt49603;
+    public int fieldInt49604;
+    public int fieldInt49605;
+    public int fieldInt49606;
+    public int fieldInt49607;
+    public int fieldInt49608;
+    public int fieldInt49609;
+    public int fieldInt49610;
+    public int fieldInt49611;
+    public int fieldInt49612;
+    public int fieldInt49613;
+    public int fieldInt49614;
+    public int fieldInt49615;
+    public int fieldInt49616;
+    public int fieldInt49617;
+    public int fieldInt49618;
+    public int fieldInt49619;
+    public int fieldInt49620;
+    public int fieldInt49621;
+    public int fieldInt49622;
+    public int fieldInt49623;
+    public int fieldInt49624;
+    public int fieldInt49625;
+    public int fieldInt49626;
+    public int fieldInt49627;
+    public int fieldInt49628;
+    public int fieldInt49629;
+    public int fieldInt49630;
+    public int fieldInt49631;
+    public int fieldInt49632;
+    public int fieldInt49633;
+    public int fieldInt49634;
+    public int fieldInt49635;
+    public int fieldInt49636;
+    public int fieldInt49637;
+    public int fieldInt49638;
+    public int fieldInt49639;
+    public int fieldInt49640;
+    public int fieldInt49641;
+    public int fieldInt49642;
+    public int fieldInt49643;
+    public int fieldInt49644;
+    public int fieldInt49645;
+    public int fieldInt49646;
+    public int fieldInt49647;
+    public int fieldInt49648;
+    public int fieldInt49649;
+    public int fieldInt49650;
+    public int fieldInt49651;
+    public int fieldInt49652;
+    public int fieldInt49653;
+    public int fieldInt49654;
+    public int fieldInt49655;
+    public int fieldInt49656;
+    public int fieldInt49657;
+    public int fieldInt49658;
+    public int fieldInt49659;
+    public int fieldInt49660;
+    public int fieldInt49661;
+    public int fieldInt49662;
+    public int fieldInt49663;
+    public int fieldInt49664;
+    public int fieldInt49665;
+    public int fieldInt49666;
+    public int fieldInt49667;
+    public int fieldInt49668;
+    public int fieldInt49669;
+    public int fieldInt49670;
+    public int fieldInt49671;
+    public int fieldInt49672;
+    public int fieldInt49673;
+    public int fieldInt49674;
+    public int fieldInt49675;
+    public int fieldInt49676;
+    public int fieldInt49677;
+    public int fieldInt49678;
+    public int fieldInt49679;
+    public int fieldInt49680;
+    public int fieldInt49681;
+    public int fieldInt49682;
+    public int fieldInt49683;
+    public int fieldInt49684;
+    public int fieldInt49685;
+    public int fieldInt49686;
+    public int fieldInt49687;
+    public int fieldInt49688;
+    public int fieldInt49689;
+    public int fieldInt49690;
+    public int fieldInt49691;
+    public int fieldInt49692;
+    public int fieldInt49693;
+    public int fieldInt49694;
+    public int fieldInt49695;
+    public int fieldInt49696;
+    public int fieldInt49697;
+    public int fieldInt49698;
+    public int fieldInt49699;
+    public int fieldInt49700;
+    public int fieldInt49701;
+    public int fieldInt49702;
+    public int fieldInt49703;
+    public int fieldInt49704;
+    public int fieldInt49705;
+    public int fieldInt49706;
+    public int fieldInt49707;
+    public int fieldInt49708;
+    public int fieldInt49709;
+    public int fieldInt49710;
+    public int fieldInt49711;
+    public int fieldInt49712;
+    public int fieldInt49713;
+    public int fieldInt49714;
+    public int fieldInt49715;
+    public int fieldInt49716;
+    public int fieldInt49717;
+    public int fieldInt49718;
+    public int fieldInt49719;
+    public int fieldInt49720;
+    public int fieldInt49721;
+    public int fieldInt49722;
+    public int fieldInt49723;
+    public int fieldInt49724;
+    public int fieldInt49725;
+    public int fieldInt49726;
+    public int fieldInt49727;
+    public int fieldInt49728;
+    public int fieldInt49729;
+    public int fieldInt49730;
+    public int fieldInt49731;
+    public int fieldInt49732;
+    public int fieldInt49733;
+    public int fieldInt49734;
+    public int fieldInt49735;
+    public int fieldInt49736;
+    public int fieldInt49737;
+    public int fieldInt49738;
+    public int fieldInt49739;
+    public int fieldInt49740;
+    public int fieldInt49741;
+    public int fieldInt49742;
+    public int fieldInt49743;
+    public int fieldInt49744;
+    public int fieldInt49745;
+    public int fieldInt49746;
+    public int fieldInt49747;
+    public int fieldInt49748;
+    public int fieldInt49749;
+    public int fieldInt49750;
+    public int fieldInt49751;
+    public int fieldInt49752;
+    public int fieldInt49753;
+    public int fieldInt49754;
+    public int fieldInt49755;
+    public int fieldInt49756;
+    public int fieldInt49757;
+    public int fieldInt49758;
+    public int fieldInt49759;
+    public int fieldInt49760;
+    public int fieldInt49761;
+    public int fieldInt49762;
+    public int fieldInt49763;
+    public int fieldInt49764;
+    public int fieldInt49765;
+    public int fieldInt49766;
+    public int fieldInt49767;
+    public int fieldInt49768;
+    public int fieldInt49769;
+    public int fieldInt49770;
+    public int fieldInt49771;
+    public int fieldInt49772;
+    public int fieldInt49773;
+    public int fieldInt49774;
+    public int fieldInt49775;
+    public int fieldInt49776;
+    public int fieldInt49777;
+    public int fieldInt49778;
+    public int fieldInt49779;
+    public int fieldInt49780;
+    public int fieldInt49781;
+    public int fieldInt49782;
+    public int fieldInt49783;
+    public int fieldInt49784;
+    public int fieldInt49785;
+    public int fieldInt49786;
+    public int fieldInt49787;
+    public int fieldInt49788;
+    public int fieldInt49789;
+    public int fieldInt49790;
+    public int fieldInt49791;
+    public int fieldInt49792;
+    public int fieldInt49793;
+    public int fieldInt49794;
+    public int fieldInt49795;
+    public int fieldInt49796;
+    public int fieldInt49797;
+    public int fieldInt49798;
+    public int fieldInt49799;
+    public int fieldInt49800;
+    public int fieldInt49801;
+    public int fieldInt49802;
+    public int fieldInt49803;
+    public int fieldInt49804;
+    public int fieldInt49805;
+    public int fieldInt49806;
+    public int fieldInt49807;
+    public int fieldInt49808;
+    public int fieldInt49809;
+    public int fieldInt49810;
+    public int fieldInt49811;
+    public int fieldInt49812;
+    public int fieldInt49813;
+    public int fieldInt49814;
+    public int fieldInt49815;
+    public int fieldInt49816;
+    public int fieldInt49817;
+    public int fieldInt49818;
+    public int fieldInt49819;
+    public int fieldInt49820;
+    public int fieldInt49821;
+    public int fieldInt49822;
+    public int fieldInt49823;
+    public int fieldInt49824;
+    public int fieldInt49825;
+    public int fieldInt49826;
+    public int fieldInt49827;
+    public int fieldInt49828;
+    public int fieldInt49829;
+    public int fieldInt49830;
+    public int fieldInt49831;
+    public int fieldInt49832;
+    public int fieldInt49833;
+    public int fieldInt49834;
+    public int fieldInt49835;
+    public int fieldInt49836;
+    public int fieldInt49837;
+    public int fieldInt49838;
+    public int fieldInt49839;
+    public int fieldInt49840;
+    public int fieldInt49841;
+    public int fieldInt49842;
+    public int fieldInt49843;
+    public int fieldInt49844;
+    public int fieldInt49845;
+    public int fieldInt49846;
+    public int fieldInt49847;
+    public int fieldInt49848;
+    public int fieldInt49849;
+    public int fieldInt49850;
+    public int fieldInt49851;
+    public int fieldInt49852;
+    public int fieldInt49853;
+    public int fieldInt49854;
+    public int fieldInt49855;
+    public int fieldInt49856;
+    public int fieldInt49857;
+    public int fieldInt49858;
+    public int fieldInt49859;
+    public int fieldInt49860;
+    public int fieldInt49861;
+    public int fieldInt49862;
+    public int fieldInt49863;
+    public int fieldInt49864;
+    public int fieldInt49865;
+    public int fieldInt49866;
+    public int fieldInt49867;
+    public int fieldInt49868;
+    public int fieldInt49869;
+    public int fieldInt49870;
+    public int fieldInt49871;
+    public int fieldInt49872;
+    public int fieldInt49873;
+    public int fieldInt49874;
+    public int fieldInt49875;
+    public int fieldInt49876;
+    public int fieldInt49877;
+    public int fieldInt49878;
+    public int fieldInt49879;
+    public int fieldInt49880;
+    public int fieldInt49881;
+    public int fieldInt49882;
+    public int fieldInt49883;
+    public int fieldInt49884;
+    public int fieldInt49885;
+    public int fieldInt49886;
+    public int fieldInt49887;
+    public int fieldInt49888;
+    public int fieldInt49889;
+    public int fieldInt49890;
+    public int fieldInt49891;
+    public int fieldInt49892;
+    public int fieldInt49893;
+    public int fieldInt49894;
+    public int fieldInt49895;
+    public int fieldInt49896;
+    public int fieldInt49897;
+    public int fieldInt49898;
+    public int fieldInt49899;
+    public int fieldInt49900;
+    public int fieldInt49901;
+    public int fieldInt49902;
+    public int fieldInt49903;
+    public int fieldInt49904;
+    public int fieldInt49905;
+    public int fieldInt49906;
+    public int fieldInt49907;
+    public int fieldInt49908;
+    public int fieldInt49909;
+    public int fieldInt49910;
+    public int fieldInt49911;
+    public int fieldInt49912;
+    public int fieldInt49913;
+    public int fieldInt49914;
+    public int fieldInt49915;
+    public int fieldInt49916;
+    public int fieldInt49917;
+    public int fieldInt49918;
+    public int fieldInt49919;
+    public int fieldInt49920;
+    public int fieldInt49921;
+    public int fieldInt49922;
+    public int fieldInt49923;
+    public int fieldInt49924;
+    public int fieldInt49925;
+    public int fieldInt49926;
+    public int fieldInt49927;
+    public int fieldInt49928;
+    public int fieldInt49929;
+    public int fieldInt49930;
+    public int fieldInt49931;
+    public int fieldInt49932;
+    public int fieldInt49933;
+    public int fieldInt49934;
+    public int fieldInt49935;
+    public int fieldInt49936;
+    public int fieldInt49937;
+    public int fieldInt49938;
+    public int fieldInt49939;
+    public int fieldInt49940;
+    public int fieldInt49941;
+    public int fieldInt49942;
+    public int fieldInt49943;
+    public int fieldInt49944;
+    public int fieldInt49945;
+    public int fieldInt49946;
+    public int fieldInt49947;
+    public int fieldInt49948;
+    public int fieldInt49949;
+    public int fieldInt49950;
+    public int fieldInt49951;
+    public int fieldInt49952;
+    public int fieldInt49953;
+    public int fieldInt49954;
+    public int fieldInt49955;
+    public int fieldInt49956;
+    public int fieldInt49957;
+    public int fieldInt49958;
+    public int fieldInt49959;
+    public int fieldInt49960;
+    public int fieldInt49961;
+    public int fieldInt49962;
+    public int fieldInt49963;
+    public int fieldInt49964;
+    public int fieldInt49965;
+    public int fieldInt49966;
+    public int fieldInt49967;
+    public int fieldInt49968;
+    public int fieldInt49969;
+    public int fieldInt49970;
+    public int fieldInt49971;
+    public int fieldInt49972;
+    public int fieldInt49973;
+    public int fieldInt49974;
+    public int fieldInt49975;
+    public int fieldInt49976;
+    public int fieldInt49977;
+    public int fieldInt49978;
+    public int fieldInt49979;
+    public int fieldInt49980;
+    public int fieldInt49981;
+    public int fieldInt49982;
+    public int fieldInt49983;
+    public int fieldInt49984;
+    public int fieldInt49985;
+    public int fieldInt49986;
+    public int fieldInt49987;
+    public int fieldInt49988;
+    public int fieldInt49989;
+    public int fieldInt49990;
+    public int fieldInt49991;
+    public int fieldInt49992;
+    public int fieldInt49993;
+    public int fieldInt49994;
+    public int fieldInt49995;
+    public int fieldInt49996;
+    public int fieldInt49997;
+    public int fieldInt49998;
+    public int fieldInt49999;
+    public int fieldInt50000;
+    public int fieldInt50001;
+    public int fieldInt50002;
+    public int fieldInt50003;
+    public int fieldInt50004;
+    public int fieldInt50005;
+    public int fieldInt50006;
+    public int fieldInt50007;
+    public int fieldInt50008;
+    public int fieldInt50009;
+    public int fieldInt50010;
+    public int fieldInt50011;
+    public int fieldInt50012;
+    public int fieldInt50013;
+    public int fieldInt50014;
+    public int fieldInt50015;
+    public int fieldInt50016;
+    public int fieldInt50017;
+    public int fieldInt50018;
+    public int fieldInt50019;
+    public int fieldInt50020;
+    public int fieldInt50021;
+    public int fieldInt50022;
+    public int fieldInt50023;
+    public int fieldInt50024;
+    public int fieldInt50025;
+    public int fieldInt50026;
+    public int fieldInt50027;
+    public int fieldInt50028;
+    public int fieldInt50029;
+    public int fieldInt50030;
+    public int fieldInt50031;
+    public int fieldInt50032;
+    public int fieldInt50033;
+    public int fieldInt50034;
+    public int fieldInt50035;
+    public int fieldInt50036;
+    public int fieldInt50037;
+    public int fieldInt50038;
+    public int fieldInt50039;
+    public int fieldInt50040;
+    public int fieldInt50041;
+    public int fieldInt50042;
+    public int fieldInt50043;
+    public int fieldInt50044;
+    public int fieldInt50045;
+    public int fieldInt50046;
+    public int fieldInt50047;
+    public int fieldInt50048;
+    public int fieldInt50049;
+    public int fieldInt50050;
+    public int fieldInt50051;
+    public int fieldInt50052;
+    public int fieldInt50053;
+    public int fieldInt50054;
+    public int fieldInt50055;
+    public int fieldInt50056;
+    public int fieldInt50057;
+    public int fieldInt50058;
+    public int fieldInt50059;
+    public int fieldInt50060;
+    public int fieldInt50061;
+    public int fieldInt50062;
+    public int fieldInt50063;
+    public int fieldInt50064;
+    public int fieldInt50065;
+    public int fieldInt50066;
+    public int fieldInt50067;
+    public int fieldInt50068;
+    public int fieldInt50069;
+    public int fieldInt50070;
+    public int fieldInt50071;
+    public int fieldInt50072;
+    public int fieldInt50073;
+    public int fieldInt50074;
+    public int fieldInt50075;
+    public int fieldInt50076;
+    public int fieldInt50077;
+    public int fieldInt50078;
+    public int fieldInt50079;
+    public int fieldInt50080;
+    public int fieldInt50081;
+    public int fieldInt50082;
+    public int fieldInt50083;
+    public int fieldInt50084;
+    public int fieldInt50085;
+    public int fieldInt50086;
+    public int fieldInt50087;
+    public int fieldInt50088;
+    public int fieldInt50089;
+    public int fieldInt50090;
+    public int fieldInt50091;
+    public int fieldInt50092;
+    public int fieldInt50093;
+    public int fieldInt50094;
+    public int fieldInt50095;
+    public int fieldInt50096;
+    public int fieldInt50097;
+    public int fieldInt50098;
+    public int fieldInt50099;
+    public int fieldInt50100;
+    public int fieldInt50101;
+    public int fieldInt50102;
+    public int fieldInt50103;
+    public int fieldInt50104;
+    public int fieldInt50105;
+    public int fieldInt50106;
+    public int fieldInt50107;
+    public int fieldInt50108;
+    public int fieldInt50109;
+    public int fieldInt50110;
+    public int fieldInt50111;
+    public int fieldInt50112;
+    public int fieldInt50113;
+    public int fieldInt50114;
+    public int fieldInt50115;
+    public int fieldInt50116;
+    public int fieldInt50117;
+    public int fieldInt50118;
+    public int fieldInt50119;
+    public int fieldInt50120;
+    public int fieldInt50121;
+    public int fieldInt50122;
+    public int fieldInt50123;
+    public int fieldInt50124;
+    public int fieldInt50125;
+    public int fieldInt50126;
+    public int fieldInt50127;
+    public int fieldInt50128;
+    public int fieldInt50129;
+    public int fieldInt50130;
+    public int fieldInt50131;
+    public int fieldInt50132;
+    public int fieldInt50133;
+    public int fieldInt50134;
+    public int fieldInt50135;
+    public int fieldInt50136;
+    public int fieldInt50137;
+    public int fieldInt50138;
+    public int fieldInt50139;
+    public int fieldInt50140;
+    public int fieldInt50141;
+    public int fieldInt50142;
+    public int fieldInt50143;
+    public int fieldInt50144;
+    public int fieldInt50145;
+    public int fieldInt50146;
+    public int fieldInt50147;
+    public int fieldInt50148;
+    public int fieldInt50149;
+    public int fieldInt50150;
+    public int fieldInt50151;
+    public int fieldInt50152;
+    public int fieldInt50153;
+    public int fieldInt50154;
+    public int fieldInt50155;
+    public int fieldInt50156;
+    public int fieldInt50157;
+    public int fieldInt50158;
+    public int fieldInt50159;
+    public int fieldInt50160;
+    public int fieldInt50161;
+    public int fieldInt50162;
+    public int fieldInt50163;
+    public int fieldInt50164;
+    public int fieldInt50165;
+    public int fieldInt50166;
+    public int fieldInt50167;
+    public int fieldInt50168;
+    public int fieldInt50169;
+    public int fieldInt50170;
+    public int fieldInt50171;
+    public int fieldInt50172;
+    public int fieldInt50173;
+    public int fieldInt50174;
+    public int fieldInt50175;
+    public int fieldInt50176;
+    public int fieldInt50177;
+    public int fieldInt50178;
+    public int fieldInt50179;
+    public int fieldInt50180;
+    public int fieldInt50181;
+    public int fieldInt50182;
+    public int fieldInt50183;
+    public int fieldInt50184;
+    public int fieldInt50185;
+    public int fieldInt50186;
+    public int fieldInt50187;
+    public int fieldInt50188;
+    public int fieldInt50189;
+    public int fieldInt50190;
+    public int fieldInt50191;
+    public int fieldInt50192;
+    public int fieldInt50193;
+    public int fieldInt50194;
+    public int fieldInt50195;
+    public int fieldInt50196;
+    public int fieldInt50197;
+    public int fieldInt50198;
+    public int fieldInt50199;
+    public int fieldInt50200;
+    public int fieldInt50201;
+    public int fieldInt50202;
+    public int fieldInt50203;
+    public int fieldInt50204;
+    public int fieldInt50205;
+    public int fieldInt50206;
+    public int fieldInt50207;
+    public int fieldInt50208;
+    public int fieldInt50209;
+    public int fieldInt50210;
+    public int fieldInt50211;
+    public int fieldInt50212;
+    public int fieldInt50213;
+    public int fieldInt50214;
+    public int fieldInt50215;
+    public int fieldInt50216;
+    public int fieldInt50217;
+    public int fieldInt50218;
+    public int fieldInt50219;
+    public int fieldInt50220;
+    public int fieldInt50221;
+    public int fieldInt50222;
+    public int fieldInt50223;
+    public int fieldInt50224;
+    public int fieldInt50225;
+    public int fieldInt50226;
+    public int fieldInt50227;
+    public int fieldInt50228;
+    public int fieldInt50229;
+    public int fieldInt50230;
+    public int fieldInt50231;
+    public int fieldInt50232;
+    public int fieldInt50233;
+    public int fieldInt50234;
+    public int fieldInt50235;
+    public int fieldInt50236;
+    public int fieldInt50237;
+    public int fieldInt50238;
+    public int fieldInt50239;
+    public int fieldInt50240;
+    public int fieldInt50241;
+    public int fieldInt50242;
+    public int fieldInt50243;
+    public int fieldInt50244;
+    public int fieldInt50245;
+    public int fieldInt50246;
+    public int fieldInt50247;
+    public int fieldInt50248;
+    public int fieldInt50249;
+    public int fieldInt50250;
+    public int fieldInt50251;
+    public int fieldInt50252;
+    public int fieldInt50253;
+    public int fieldInt50254;
+    public int fieldInt50255;
+    public int fieldInt50256;
+    public int fieldInt50257;
+    public int fieldInt50258;
+    public int fieldInt50259;
+    public int fieldInt50260;
+    public int fieldInt50261;
+    public int fieldInt50262;
+    public int fieldInt50263;
+    public int fieldInt50264;
+    public int fieldInt50265;
+    public int fieldInt50266;
+    public int fieldInt50267;
+    public int fieldInt50268;
+    public int fieldInt50269;
+    public int fieldInt50270;
+    public int fieldInt50271;
+    public int fieldInt50272;
+    public int fieldInt50273;
+    public int fieldInt50274;
+    public int fieldInt50275;
+    public int fieldInt50276;
+    public int fieldInt50277;
+    public int fieldInt50278;
+    public int fieldInt50279;
+    public int fieldInt50280;
+    public int fieldInt50281;
+    public int fieldInt50282;
+    public int fieldInt50283;
+    public int fieldInt50284;
+    public int fieldInt50285;
+    public int fieldInt50286;
+    public int fieldInt50287;
+    public int fieldInt50288;
+    public int fieldInt50289;
+    public int fieldInt50290;
+    public int fieldInt50291;
+    public int fieldInt50292;
+    public int fieldInt50293;
+    public int fieldInt50294;
+    public int fieldInt50295;
+    public int fieldInt50296;
+    public int fieldInt50297;
+    public int fieldInt50298;
+    public int fieldInt50299;
+    public int fieldInt50300;
+    public int fieldInt50301;
+    public int fieldInt50302;
+    public int fieldInt50303;
+    public int fieldInt50304;
+    public int fieldInt50305;
+    public int fieldInt50306;
+    public int fieldInt50307;
+    public int fieldInt50308;
+    public int fieldInt50309;
+    public int fieldInt50310;
+    public int fieldInt50311;
+    public int fieldInt50312;
+    public int fieldInt50313;
+    public int fieldInt50314;
+    public int fieldInt50315;
+    public int fieldInt50316;
+    public int fieldInt50317;
+    public int fieldInt50318;
+    public int fieldInt50319;
+    public int fieldInt50320;
+    public int fieldInt50321;
+    public int fieldInt50322;
+    public int fieldInt50323;
+    public int fieldInt50324;
+    public int fieldInt50325;
+    public int fieldInt50326;
+    public int fieldInt50327;
+    public int fieldInt50328;
+    public int fieldInt50329;
+    public int fieldInt50330;
+    public int fieldInt50331;
+    public int fieldInt50332;
+    public int fieldInt50333;
+    public int fieldInt50334;
+    public int fieldInt50335;
+    public int fieldInt50336;
+    public int fieldInt50337;
+    public int fieldInt50338;
+    public int fieldInt50339;
+    public int fieldInt50340;
+    public int fieldInt50341;
+    public int fieldInt50342;
+    public int fieldInt50343;
+    public int fieldInt50344;
+    public int fieldInt50345;
+    public int fieldInt50346;
+    public int fieldInt50347;
+    public int fieldInt50348;
+    public int fieldInt50349;
+    public int fieldInt50350;
+    public int fieldInt50351;
+    public int fieldInt50352;
+    public int fieldInt50353;
+    public int fieldInt50354;
+    public int fieldInt50355;
+    public int fieldInt50356;
+    public int fieldInt50357;
+    public int fieldInt50358;
+    public int fieldInt50359;
+    public int fieldInt50360;
+    public int fieldInt50361;
+    public int fieldInt50362;
+    public int fieldInt50363;
+    public int fieldInt50364;
+    public int fieldInt50365;
+    public int fieldInt50366;
+    public int fieldInt50367;
+    public int fieldInt50368;
+    public int fieldInt50369;
+    public int fieldInt50370;
+    public int fieldInt50371;
+    public int fieldInt50372;
+    public int fieldInt50373;
+    public int fieldInt50374;
+    public int fieldInt50375;
+    public int fieldInt50376;
+    public int fieldInt50377;
+    public int fieldInt50378;
+    public int fieldInt50379;
+    public int fieldInt50380;
+    public int fieldInt50381;
+    public int fieldInt50382;
+    public int fieldInt50383;
+    public int fieldInt50384;
+    public int fieldInt50385;
+    public int fieldInt50386;
+    public int fieldInt50387;
+    public int fieldInt50388;
+    public int fieldInt50389;
+    public int fieldInt50390;
+    public int fieldInt50391;
+    public int fieldInt50392;
+    public int fieldInt50393;
+    public int fieldInt50394;
+    public int fieldInt50395;
+    public int fieldInt50396;
+    public int fieldInt50397;
+    public int fieldInt50398;
+    public int fieldInt50399;
+    public int fieldInt50400;
+    public int fieldInt50401;
+    public int fieldInt50402;
+    public int fieldInt50403;
+    public int fieldInt50404;
+    public int fieldInt50405;
+    public int fieldInt50406;
+    public int fieldInt50407;
+    public int fieldInt50408;
+    public int fieldInt50409;
+    public int fieldInt50410;
+    public int fieldInt50411;
+    public int fieldInt50412;
+    public int fieldInt50413;
+    public int fieldInt50414;
+    public int fieldInt50415;
+    public int fieldInt50416;
+    public int fieldInt50417;
+    public int fieldInt50418;
+    public int fieldInt50419;
+    public int fieldInt50420;
+    public int fieldInt50421;
+    public int fieldInt50422;
+    public int fieldInt50423;
+    public int fieldInt50424;
+    public int fieldInt50425;
+    public int fieldInt50426;
+    public int fieldInt50427;
+    public int fieldInt50428;
+    public int fieldInt50429;
+    public int fieldInt50430;
+    public int fieldInt50431;
+    public int fieldInt50432;
+    public int fieldInt50433;
+    public int fieldInt50434;
+    public int fieldInt50435;
+    public int fieldInt50436;
+    public int fieldInt50437;
+    public int fieldInt50438;
+    public int fieldInt50439;
+    public int fieldInt50440;
+    public int fieldInt50441;
+    public int fieldInt50442;
+    public int fieldInt50443;
+    public int fieldInt50444;
+    public int fieldInt50445;
+    public int fieldInt50446;
+    public int fieldInt50447;
+    public int fieldInt50448;
+    public int fieldInt50449;
+    public int fieldInt50450;
+    public int fieldInt50451;
+    public int fieldInt50452;
+    public int fieldInt50453;
+    public int fieldInt50454;
+    public int fieldInt50455;
+    public int fieldInt50456;
+    public int fieldInt50457;
+    public int fieldInt50458;
+    public int fieldInt50459;
+    public int fieldInt50460;
+    public int fieldInt50461;
+    public int fieldInt50462;
+    public int fieldInt50463;
+    public int fieldInt50464;
+    public int fieldInt50465;
+    public int fieldInt50466;
+    public int fieldInt50467;
+    public int fieldInt50468;
+    public int fieldInt50469;
+    public int fieldInt50470;
+    public int fieldInt50471;
+    public int fieldInt50472;
+    public int fieldInt50473;
+    public int fieldInt50474;
+    public int fieldInt50475;
+    public int fieldInt50476;
+    public int fieldInt50477;
+    public int fieldInt50478;
+    public int fieldInt50479;
+    public int fieldInt50480;
+    public int fieldInt50481;
+    public int fieldInt50482;
+    public int fieldInt50483;
+    public int fieldInt50484;
+    public int fieldInt50485;
+    public int fieldInt50486;
+    public int fieldInt50487;
+    public int fieldInt50488;
+    public int fieldInt50489;
+    public int fieldInt50490;
+    public int fieldInt50491;
+    public int fieldInt50492;
+    public int fieldInt50493;
+    public int fieldInt50494;
+    public int fieldInt50495;
+    public int fieldInt50496;
+    public int fieldInt50497;
+    public int fieldInt50498;
+    public int fieldInt50499;
+    public int fieldInt50500;
+    public int fieldInt50501;
+    public int fieldInt50502;
+    public int fieldInt50503;
+    public int fieldInt50504;
+    public int fieldInt50505;
+    public int fieldInt50506;
+    public int fieldInt50507;
+    public int fieldInt50508;
+    public int fieldInt50509;
+    public int fieldInt50510;
+    public int fieldInt50511;
+    public int fieldInt50512;
+    public int fieldInt50513;
+    public int fieldInt50514;
+    public int fieldInt50515;
+    public int fieldInt50516;
+    public int fieldInt50517;
+    public int fieldInt50518;
+    public int fieldInt50519;
+    public int fieldInt50520;
+    public int fieldInt50521;
+    public int fieldInt50522;
+    public int fieldInt50523;
+    public int fieldInt50524;
+    public int fieldInt50525;
+    public int fieldInt50526;
+    public int fieldInt50527;
+    public int fieldInt50528;
+    public int fieldInt50529;
+    public int fieldInt50530;
+    public int fieldInt50531;
+    public int fieldInt50532;
+    public int fieldInt50533;
+    public int fieldInt50534;
+    public int fieldInt50535;
+    public int fieldInt50536;
+    public int fieldInt50537;
+    public int fieldInt50538;
+    public int fieldInt50539;
+    public int fieldInt50540;
+    public int fieldInt50541;
+    public int fieldInt50542;
+    public int fieldInt50543;
+    public int fieldInt50544;
+    public int fieldInt50545;
+    public int fieldInt50546;
+    public int fieldInt50547;
+    public int fieldInt50548;
+    public int fieldInt50549;
+    public int fieldInt50550;
+    public int fieldInt50551;
+    public int fieldInt50552;
+    public int fieldInt50553;
+    public int fieldInt50554;
+    public int fieldInt50555;
+    public int fieldInt50556;
+    public int fieldInt50557;
+    public int fieldInt50558;
+    public int fieldInt50559;
+    public int fieldInt50560;
+    public int fieldInt50561;
+    public int fieldInt50562;
+    public int fieldInt50563;
+    public int fieldInt50564;
+    public int fieldInt50565;
+    public int fieldInt50566;
+    public int fieldInt50567;
+    public int fieldInt50568;
+    public int fieldInt50569;
+    public int fieldInt50570;
+    public int fieldInt50571;
+    public int fieldInt50572;
+    public int fieldInt50573;
+    public int fieldInt50574;
+    public int fieldInt50575;
+    public int fieldInt50576;
+    public int fieldInt50577;
+    public int fieldInt50578;
+    public int fieldInt50579;
+    public int fieldInt50580;
+    public int fieldInt50581;
+    public int fieldInt50582;
+    public int fieldInt50583;
+    public int fieldInt50584;
+    public int fieldInt50585;
+    public int fieldInt50586;
+    public int fieldInt50587;
+    public int fieldInt50588;
+    public int fieldInt50589;
+    public int fieldInt50590;
+    public int fieldInt50591;
+    public int fieldInt50592;
+    public int fieldInt50593;
+    public int fieldInt50594;
+    public int fieldInt50595;
+    public int fieldInt50596;
+    public int fieldInt50597;
+    public int fieldInt50598;
+    public int fieldInt50599;
+    public int fieldInt50600;
+    public int fieldInt50601;
+    public int fieldInt50602;
+    public int fieldInt50603;
+    public int fieldInt50604;
+    public int fieldInt50605;
+    public int fieldInt50606;
+    public int fieldInt50607;
+    public int fieldInt50608;
+    public int fieldInt50609;
+    public int fieldInt50610;
+    public int fieldInt50611;
+    public int fieldInt50612;
+    public int fieldInt50613;
+    public int fieldInt50614;
+    public int fieldInt50615;
+    public int fieldInt50616;
+    public int fieldInt50617;
+    public int fieldInt50618;
+    public int fieldInt50619;
+    public int fieldInt50620;
+    public int fieldInt50621;
+    public int fieldInt50622;
+    public int fieldInt50623;
+    public int fieldInt50624;
+    public int fieldInt50625;
+    public int fieldInt50626;
+    public int fieldInt50627;
+    public int fieldInt50628;
+    public int fieldInt50629;
+    public int fieldInt50630;
+    public int fieldInt50631;
+    public int fieldInt50632;
+    public int fieldInt50633;
+    public int fieldInt50634;
+    public int fieldInt50635;
+    public int fieldInt50636;
+    public int fieldInt50637;
+    public int fieldInt50638;
+    public int fieldInt50639;
+    public int fieldInt50640;
+    public int fieldInt50641;
+    public int fieldInt50642;
+    public int fieldInt50643;
+    public int fieldInt50644;
+    public int fieldInt50645;
+    public int fieldInt50646;
+    public int fieldInt50647;
+    public int fieldInt50648;
+    public int fieldInt50649;
+    public int fieldInt50650;
+    public int fieldInt50651;
+    public int fieldInt50652;
+    public int fieldInt50653;
+    public int fieldInt50654;
+    public int fieldInt50655;
+    public int fieldInt50656;
+    public int fieldInt50657;
+    public int fieldInt50658;
+    public int fieldInt50659;
+    public int fieldInt50660;
+    public int fieldInt50661;
+    public int fieldInt50662;
+    public int fieldInt50663;
+    public int fieldInt50664;
+    public int fieldInt50665;
+    public int fieldInt50666;
+    public int fieldInt50667;
+    public int fieldInt50668;
+    public int fieldInt50669;
+    public int fieldInt50670;
+    public int fieldInt50671;
+    public int fieldInt50672;
+    public int fieldInt50673;
+    public int fieldInt50674;
+    public int fieldInt50675;
+    public int fieldInt50676;
+    public int fieldInt50677;
+    public int fieldInt50678;
+    public int fieldInt50679;
+    public int fieldInt50680;
+    public int fieldInt50681;
+    public int fieldInt50682;
+    public int fieldInt50683;
+    public int fieldInt50684;
+    public int fieldInt50685;
+    public int fieldInt50686;
+    public int fieldInt50687;
+    public int fieldInt50688;
+    public int fieldInt50689;
+    public int fieldInt50690;
+    public int fieldInt50691;
+    public int fieldInt50692;
+    public int fieldInt50693;
+    public int fieldInt50694;
+    public int fieldInt50695;
+    public int fieldInt50696;
+    public int fieldInt50697;
+    public int fieldInt50698;
+    public int fieldInt50699;
+    public int fieldInt50700;
+    public int fieldInt50701;
+    public int fieldInt50702;
+    public int fieldInt50703;
+    public int fieldInt50704;
+    public int fieldInt50705;
+    public int fieldInt50706;
+    public int fieldInt50707;
+    public int fieldInt50708;
+    public int fieldInt50709;
+    public int fieldInt50710;
+    public int fieldInt50711;
+    public int fieldInt50712;
+    public int fieldInt50713;
+    public int fieldInt50714;
+    public int fieldInt50715;
+    public int fieldInt50716;
+    public int fieldInt50717;
+    public int fieldInt50718;
+    public int fieldInt50719;
+    public int fieldInt50720;
+    public int fieldInt50721;
+    public int fieldInt50722;
+    public int fieldInt50723;
+    public int fieldInt50724;
+    public int fieldInt50725;
+    public int fieldInt50726;
+    public int fieldInt50727;
+    public int fieldInt50728;
+    public int fieldInt50729;
+    public int fieldInt50730;
+    public int fieldInt50731;
+    public int fieldInt50732;
+    public int fieldInt50733;
+    public int fieldInt50734;
+    public int fieldInt50735;
+    public int fieldInt50736;
+    public int fieldInt50737;
+    public int fieldInt50738;
+    public int fieldInt50739;
+    public int fieldInt50740;
+    public int fieldInt50741;
+    public int fieldInt50742;
+    public int fieldInt50743;
+    public int fieldInt50744;
+    public int fieldInt50745;
+    public int fieldInt50746;
+    public int fieldInt50747;
+    public int fieldInt50748;
+    public int fieldInt50749;
+    public int fieldInt50750;
+    public int fieldInt50751;
+    public int fieldInt50752;
+    public int fieldInt50753;
+    public int fieldInt50754;
+    public int fieldInt50755;
+    public int fieldInt50756;
+    public int fieldInt50757;
+    public int fieldInt50758;
+    public int fieldInt50759;
+    public int fieldInt50760;
+    public int fieldInt50761;
+    public int fieldInt50762;
+    public int fieldInt50763;
+    public int fieldInt50764;
+    public int fieldInt50765;
+    public int fieldInt50766;
+    public int fieldInt50767;
+    public int fieldInt50768;
+    public int fieldInt50769;
+    public int fieldInt50770;
+    public int fieldInt50771;
+    public int fieldInt50772;
+    public int fieldInt50773;
+    public int fieldInt50774;
+    public int fieldInt50775;
+    public int fieldInt50776;
+    public int fieldInt50777;
+    public int fieldInt50778;
+    public int fieldInt50779;
+    public int fieldInt50780;
+    public int fieldInt50781;
+    public int fieldInt50782;
+    public int fieldInt50783;
+    public int fieldInt50784;
+    public int fieldInt50785;
+    public int fieldInt50786;
+    public int fieldInt50787;
+    public int fieldInt50788;
+    public int fieldInt50789;
+    public int fieldInt50790;
+    public int fieldInt50791;
+    public int fieldInt50792;
+    public int fieldInt50793;
+    public int fieldInt50794;
+    public int fieldInt50795;
+    public int fieldInt50796;
+    public int fieldInt50797;
+    public int fieldInt50798;
+    public int fieldInt50799;
+    public int fieldInt50800;
+    public int fieldInt50801;
+    public int fieldInt50802;
+    public int fieldInt50803;
+    public int fieldInt50804;
+    public int fieldInt50805;
+    public int fieldInt50806;
+    public int fieldInt50807;
+    public int fieldInt50808;
+    public int fieldInt50809;
+    public int fieldInt50810;
+    public int fieldInt50811;
+    public int fieldInt50812;
+    public int fieldInt50813;
+    public int fieldInt50814;
+    public int fieldInt50815;
+    public int fieldInt50816;
+    public int fieldInt50817;
+    public int fieldInt50818;
+    public int fieldInt50819;
+    public int fieldInt50820;
+    public int fieldInt50821;
+    public int fieldInt50822;
+    public int fieldInt50823;
+    public int fieldInt50824;
+    public int fieldInt50825;
+    public int fieldInt50826;
+    public int fieldInt50827;
+    public int fieldInt50828;
+    public int fieldInt50829;
+    public int fieldInt50830;
+    public int fieldInt50831;
+    public int fieldInt50832;
+    public int fieldInt50833;
+    public int fieldInt50834;
+    public int fieldInt50835;
+    public int fieldInt50836;
+    public int fieldInt50837;
+    public int fieldInt50838;
+    public int fieldInt50839;
+    public int fieldInt50840;
+    public int fieldInt50841;
+    public int fieldInt50842;
+    public int fieldInt50843;
+    public int fieldInt50844;
+    public int fieldInt50845;
+    public int fieldInt50846;
+    public int fieldInt50847;
+    public int fieldInt50848;
+    public int fieldInt50849;
+    public int fieldInt50850;
+    public int fieldInt50851;
+    public int fieldInt50852;
+    public int fieldInt50853;
+    public int fieldInt50854;
+    public int fieldInt50855;
+    public int fieldInt50856;
+    public int fieldInt50857;
+    public int fieldInt50858;
+    public int fieldInt50859;
+    public int fieldInt50860;
+    public int fieldInt50861;
+    public int fieldInt50862;
+    public int fieldInt50863;
+    public int fieldInt50864;
+    public int fieldInt50865;
+    public int fieldInt50866;
+    public int fieldInt50867;
+    public int fieldInt50868;
+    public int fieldInt50869;
+    public int fieldInt50870;
+    public int fieldInt50871;
+    public int fieldInt50872;
+    public int fieldInt50873;
+    public int fieldInt50874;
+    public int fieldInt50875;
+    public int fieldInt50876;
+    public int fieldInt50877;
+    public int fieldInt50878;
+    public int fieldInt50879;
+    public int fieldInt50880;
+    public int fieldInt50881;
+    public int fieldInt50882;
+    public int fieldInt50883;
+    public int fieldInt50884;
+    public int fieldInt50885;
+    public int fieldInt50886;
+    public int fieldInt50887;
+    public int fieldInt50888;
+    public int fieldInt50889;
+    public int fieldInt50890;
+    public int fieldInt50891;
+    public int fieldInt50892;
+    public int fieldInt50893;
+    public int fieldInt50894;
+    public int fieldInt50895;
+    public int fieldInt50896;
+    public int fieldInt50897;
+    public int fieldInt50898;
+    public int fieldInt50899;
+    public int fieldInt50900;
+    public int fieldInt50901;
+    public int fieldInt50902;
+    public int fieldInt50903;
+    public int fieldInt50904;
+    public int fieldInt50905;
+    public int fieldInt50906;
+    public int fieldInt50907;
+    public int fieldInt50908;
+    public int fieldInt50909;
+    public int fieldInt50910;
+    public int fieldInt50911;
+    public int fieldInt50912;
+    public int fieldInt50913;
+    public int fieldInt50914;
+    public int fieldInt50915;
+    public int fieldInt50916;
+    public int fieldInt50917;
+    public int fieldInt50918;
+    public int fieldInt50919;
+    public int fieldInt50920;
+    public int fieldInt50921;
+    public int fieldInt50922;
+    public int fieldInt50923;
+    public int fieldInt50924;
+    public int fieldInt50925;
+    public int fieldInt50926;
+    public int fieldInt50927;
+    public int fieldInt50928;
+    public int fieldInt50929;
+    public int fieldInt50930;
+    public int fieldInt50931;
+    public int fieldInt50932;
+    public int fieldInt50933;
+    public int fieldInt50934;
+    public int fieldInt50935;
+    public int fieldInt50936;
+    public int fieldInt50937;
+    public int fieldInt50938;
+    public int fieldInt50939;
+    public int fieldInt50940;
+    public int fieldInt50941;
+    public int fieldInt50942;
+    public int fieldInt50943;
+    public int fieldInt50944;
+    public int fieldInt50945;
+    public int fieldInt50946;
+    public int fieldInt50947;
+    public int fieldInt50948;
+    public int fieldInt50949;
+    public int fieldInt50950;
+    public int fieldInt50951;
+    public int fieldInt50952;
+    public int fieldInt50953;
+    public int fieldInt50954;
+    public int fieldInt50955;
+    public int fieldInt50956;
+    public int fieldInt50957;
+    public int fieldInt50958;
+    public int fieldInt50959;
+    public int fieldInt50960;
+    public int fieldInt50961;
+    public int fieldInt50962;
+    public int fieldInt50963;
+    public int fieldInt50964;
+    public int fieldInt50965;
+    public int fieldInt50966;
+    public int fieldInt50967;
+    public int fieldInt50968;
+    public int fieldInt50969;
+    public int fieldInt50970;
+    public int fieldInt50971;
+    public int fieldInt50972;
+    public int fieldInt50973;
+    public int fieldInt50974;
+    public int fieldInt50975;
+    public int fieldInt50976;
+    public int fieldInt50977;
+    public int fieldInt50978;
+    public int fieldInt50979;
+    public int fieldInt50980;
+    public int fieldInt50981;
+    public int fieldInt50982;
+    public int fieldInt50983;
+    public int fieldInt50984;
+    public int fieldInt50985;
+    public int fieldInt50986;
+    public int fieldInt50987;
+    public int fieldInt50988;
+    public int fieldInt50989;
+    public int fieldInt50990;
+    public int fieldInt50991;
+    public int fieldInt50992;
+    public int fieldInt50993;
+    public int fieldInt50994;
+    public int fieldInt50995;
+    public int fieldInt50996;
+    public int fieldInt50997;
+    public int fieldInt50998;
+    public int fieldInt50999;
+    public int fieldInt51000;
+    public int fieldInt51001;
+    public int fieldInt51002;
+    public int fieldInt51003;
+    public int fieldInt51004;
+    public int fieldInt51005;
+    public int fieldInt51006;
+    public int fieldInt51007;
+    public int fieldInt51008;
+    public int fieldInt51009;
+    public int fieldInt51010;
+    public int fieldInt51011;
+    public int fieldInt51012;
+    public int fieldInt51013;
+    public int fieldInt51014;
+    public int fieldInt51015;
+    public int fieldInt51016;
+    public int fieldInt51017;
+    public int fieldInt51018;
+    public int fieldInt51019;
+    public int fieldInt51020;
+    public int fieldInt51021;
+    public int fieldInt51022;
+    public int fieldInt51023;
+    public int fieldInt51024;
+    public int fieldInt51025;
+    public int fieldInt51026;
+    public int fieldInt51027;
+    public int fieldInt51028;
+    public int fieldInt51029;
+    public int fieldInt51030;
+    public int fieldInt51031;
+    public int fieldInt51032;
+    public int fieldInt51033;
+    public int fieldInt51034;
+    public int fieldInt51035;
+    public int fieldInt51036;
+    public int fieldInt51037;
+    public int fieldInt51038;
+    public int fieldInt51039;
+    public int fieldInt51040;
+    public int fieldInt51041;
+    public int fieldInt51042;
+    public int fieldInt51043;
+    public int fieldInt51044;
+    public int fieldInt51045;
+    public int fieldInt51046;
+    public int fieldInt51047;
+    public int fieldInt51048;
+    public int fieldInt51049;
+    public int fieldInt51050;
+    public int fieldInt51051;
+    public int fieldInt51052;
+    public int fieldInt51053;
+    public int fieldInt51054;
+    public int fieldInt51055;
+    public int fieldInt51056;
+    public int fieldInt51057;
+    public int fieldInt51058;
+    public int fieldInt51059;
+    public int fieldInt51060;
+    public int fieldInt51061;
+    public int fieldInt51062;
+    public int fieldInt51063;
+    public int fieldInt51064;
+    public int fieldInt51065;
+    public int fieldInt51066;
+    public int fieldInt51067;
+    public int fieldInt51068;
+    public int fieldInt51069;
+    public int fieldInt51070;
+    public int fieldInt51071;
+    public int fieldInt51072;
+    public int fieldInt51073;
+    public int fieldInt51074;
+    public int fieldInt51075;
+    public int fieldInt51076;
+    public int fieldInt51077;
+    public int fieldInt51078;
+    public int fieldInt51079;
+    public int fieldInt51080;
+    public int fieldInt51081;
+    public int fieldInt51082;
+    public int fieldInt51083;
+    public int fieldInt51084;
+    public int fieldInt51085;
+    public int fieldInt51086;
+    public int fieldInt51087;
+    public int fieldInt51088;
+    public int fieldInt51089;
+    public int fieldInt51090;
+    public int fieldInt51091;
+    public int fieldInt51092;
+    public int fieldInt51093;
+    public int fieldInt51094;
+    public int fieldInt51095;
+    public int fieldInt51096;
+    public int fieldInt51097;
+    public int fieldInt51098;
+    public int fieldInt51099;
+    public int fieldInt51100;
+    public int fieldInt51101;
+    public int fieldInt51102;
+    public int fieldInt51103;
+    public int fieldInt51104;
+    public int fieldInt51105;
+    public int fieldInt51106;
+    public int fieldInt51107;
+    public int fieldInt51108;
+    public int fieldInt51109;
+    public int fieldInt51110;
+    public int fieldInt51111;
+    public int fieldInt51112;
+    public int fieldInt51113;
+    public int fieldInt51114;
+    public int fieldInt51115;
+    public int fieldInt51116;
+    public int fieldInt51117;
+    public int fieldInt51118;
+    public int fieldInt51119;
+    public int fieldInt51120;
+    public int fieldInt51121;
+    public int fieldInt51122;
+    public int fieldInt51123;
+    public int fieldInt51124;
+    public int fieldInt51125;
+    public int fieldInt51126;
+    public int fieldInt51127;
+    public int fieldInt51128;
+    public int fieldInt51129;
+    public int fieldInt51130;
+    public int fieldInt51131;
+    public int fieldInt51132;
+    public int fieldInt51133;
+    public int fieldInt51134;
+    public int fieldInt51135;
+    public int fieldInt51136;
+    public int fieldInt51137;
+    public int fieldInt51138;
+    public int fieldInt51139;
+    public int fieldInt51140;
+    public int fieldInt51141;
+    public int fieldInt51142;
+    public int fieldInt51143;
+    public int fieldInt51144;
+    public int fieldInt51145;
+    public int fieldInt51146;
+    public int fieldInt51147;
+    public int fieldInt51148;
+    public int fieldInt51149;
+    public int fieldInt51150;
+    public int fieldInt51151;
+    public int fieldInt51152;
+    public int fieldInt51153;
+    public int fieldInt51154;
+    public int fieldInt51155;
+    public int fieldInt51156;
+    public int fieldInt51157;
+    public int fieldInt51158;
+    public int fieldInt51159;
+    public int fieldInt51160;
+    public int fieldInt51161;
+    public int fieldInt51162;
+    public int fieldInt51163;
+    public int fieldInt51164;
+    public int fieldInt51165;
+    public int fieldInt51166;
+    public int fieldInt51167;
+    public int fieldInt51168;
+    public int fieldInt51169;
+    public int fieldInt51170;
+    public int fieldInt51171;
+    public int fieldInt51172;
+    public int fieldInt51173;
+    public int fieldInt51174;
+    public int fieldInt51175;
+    public int fieldInt51176;
+    public int fieldInt51177;
+    public int fieldInt51178;
+    public int fieldInt51179;
+    public int fieldInt51180;
+    public int fieldInt51181;
+    public int fieldInt51182;
+    public int fieldInt51183;
+    public int fieldInt51184;
+    public int fieldInt51185;
+    public int fieldInt51186;
+    public int fieldInt51187;
+    public int fieldInt51188;
+    public int fieldInt51189;
+    public int fieldInt51190;
+    public int fieldInt51191;
+    public int fieldInt51192;
+    public int fieldInt51193;
+    public int fieldInt51194;
+    public int fieldInt51195;
+    public int fieldInt51196;
+    public int fieldInt51197;
+    public int fieldInt51198;
+    public int fieldInt51199;
+    public int fieldInt51200;
+    public int fieldInt51201;
+    public int fieldInt51202;
+    public int fieldInt51203;
+    public int fieldInt51204;
+    public int fieldInt51205;
+    public int fieldInt51206;
+    public int fieldInt51207;
+    public int fieldInt51208;
+    public int fieldInt51209;
+    public int fieldInt51210;
+    public int fieldInt51211;
+    public int fieldInt51212;
+    public int fieldInt51213;
+    public int fieldInt51214;
+    public int fieldInt51215;
+    public int fieldInt51216;
+    public int fieldInt51217;
+    public int fieldInt51218;
+    public int fieldInt51219;
+    public int fieldInt51220;
+    public int fieldInt51221;
+    public int fieldInt51222;
+    public int fieldInt51223;
+    public int fieldInt51224;
+    public int fieldInt51225;
+    public int fieldInt51226;
+    public int fieldInt51227;
+    public int fieldInt51228;
+    public int fieldInt51229;
+    public int fieldInt51230;
+    public int fieldInt51231;
+    public int fieldInt51232;
+    public int fieldInt51233;
+    public int fieldInt51234;
+    public int fieldInt51235;
+    public int fieldInt51236;
+    public int fieldInt51237;
+    public int fieldInt51238;
+    public int fieldInt51239;
+    public int fieldInt51240;
+    public int fieldInt51241;
+    public int fieldInt51242;
+    public int fieldInt51243;
+    public int fieldInt51244;
+    public int fieldInt51245;
+    public int fieldInt51246;
+    public int fieldInt51247;
+    public int fieldInt51248;
+    public int fieldInt51249;
+    public int fieldInt51250;
+    public int fieldInt51251;
+    public int fieldInt51252;
+    public int fieldInt51253;
+    public int fieldInt51254;
+    public int fieldInt51255;
+    public int fieldInt51256;
+    public int fieldInt51257;
+    public int fieldInt51258;
+    public int fieldInt51259;
+    public int fieldInt51260;
+    public int fieldInt51261;
+    public int fieldInt51262;
+    public int fieldInt51263;
+    public int fieldInt51264;
+    public int fieldInt51265;
+    public int fieldInt51266;
+    public int fieldInt51267;
+    public int fieldInt51268;
+    public int fieldInt51269;
+    public int fieldInt51270;
+    public int fieldInt51271;
+    public int fieldInt51272;
+    public int fieldInt51273;
+    public int fieldInt51274;
+    public int fieldInt51275;
+    public int fieldInt51276;
+    public int fieldInt51277;
+    public int fieldInt51278;
+    public int fieldInt51279;
+    public int fieldInt51280;
+    public int fieldInt51281;
+    public int fieldInt51282;
+    public int fieldInt51283;
+    public int fieldInt51284;
+    public int fieldInt51285;
+    public int fieldInt51286;
+    public int fieldInt51287;
+    public int fieldInt51288;
+    public int fieldInt51289;
+    public int fieldInt51290;
+    public int fieldInt51291;
+    public int fieldInt51292;
+    public int fieldInt51293;
+    public int fieldInt51294;
+    public int fieldInt51295;
+    public int fieldInt51296;
+    public int fieldInt51297;
+    public int fieldInt51298;
+    public int fieldInt51299;
+    public int fieldInt51300;
+    public int fieldInt51301;
+    public int fieldInt51302;
+    public int fieldInt51303;
+    public int fieldInt51304;
+    public int fieldInt51305;
+    public int fieldInt51306;
+    public int fieldInt51307;
+    public int fieldInt51308;
+    public int fieldInt51309;
+    public int fieldInt51310;
+    public int fieldInt51311;
+    public int fieldInt51312;
+    public int fieldInt51313;
+    public int fieldInt51314;
+    public int fieldInt51315;
+    public int fieldInt51316;
+    public int fieldInt51317;
+    public int fieldInt51318;
+    public int fieldInt51319;
+    public int fieldInt51320;
+    public int fieldInt51321;
+    public int fieldInt51322;
+    public int fieldInt51323;
+    public int fieldInt51324;
+    public int fieldInt51325;
+    public int fieldInt51326;
+    public int fieldInt51327;
+    public int fieldInt51328;
+    public int fieldInt51329;
+    public int fieldInt51330;
+    public int fieldInt51331;
+    public int fieldInt51332;
+    public int fieldInt51333;
+    public int fieldInt51334;
+    public int fieldInt51335;
+    public int fieldInt51336;
+    public int fieldInt51337;
+    public int fieldInt51338;
+    public int fieldInt51339;
+    public int fieldInt51340;
+    public int fieldInt51341;
+    public int fieldInt51342;
+    public int fieldInt51343;
+    public int fieldInt51344;
+    public int fieldInt51345;
+    public int fieldInt51346;
+    public int fieldInt51347;
+    public int fieldInt51348;
+    public int fieldInt51349;
+    public int fieldInt51350;
+    public int fieldInt51351;
+    public int fieldInt51352;
+    public int fieldInt51353;
+    public int fieldInt51354;
+    public int fieldInt51355;
+    public int fieldInt51356;
+    public int fieldInt51357;
+    public int fieldInt51358;
+    public int fieldInt51359;
+    public int fieldInt51360;
+    public int fieldInt51361;
+    public int fieldInt51362;
+    public int fieldInt51363;
+    public int fieldInt51364;
+    public int fieldInt51365;
+    public int fieldInt51366;
+    public int fieldInt51367;
+    public int fieldInt51368;
+    public int fieldInt51369;
+    public int fieldInt51370;
+    public int fieldInt51371;
+    public int fieldInt51372;
+    public int fieldInt51373;
+    public int fieldInt51374;
+    public int fieldInt51375;
+    public int fieldInt51376;
+    public int fieldInt51377;
+    public int fieldInt51378;
+    public int fieldInt51379;
+    public int fieldInt51380;
+    public int fieldInt51381;
+    public int fieldInt51382;
+    public int fieldInt51383;
+    public int fieldInt51384;
+    public int fieldInt51385;
+    public int fieldInt51386;
+    public int fieldInt51387;
+    public int fieldInt51388;
+    public int fieldInt51389;
+    public int fieldInt51390;
+    public int fieldInt51391;
+    public int fieldInt51392;
+    public int fieldInt51393;
+    public int fieldInt51394;
+    public int fieldInt51395;
+    public int fieldInt51396;
+    public int fieldInt51397;
+    public int fieldInt51398;
+    public int fieldInt51399;
+    public int fieldInt51400;
+    public int fieldInt51401;
+    public int fieldInt51402;
+    public int fieldInt51403;
+    public int fieldInt51404;
+    public int fieldInt51405;
+    public int fieldInt51406;
+    public int fieldInt51407;
+    public int fieldInt51408;
+    public int fieldInt51409;
+    public int fieldInt51410;
+    public int fieldInt51411;
+    public int fieldInt51412;
+    public int fieldInt51413;
+    public int fieldInt51414;
+    public int fieldInt51415;
+    public int fieldInt51416;
+    public int fieldInt51417;
+    public int fieldInt51418;
+    public int fieldInt51419;
+    public int fieldInt51420;
+    public int fieldInt51421;
+    public int fieldInt51422;
+    public int fieldInt51423;
+    public int fieldInt51424;
+    public int fieldInt51425;
+    public int fieldInt51426;
+    public int fieldInt51427;
+    public int fieldInt51428;
+    public int fieldInt51429;
+    public int fieldInt51430;
+    public int fieldInt51431;
+    public int fieldInt51432;
+    public int fieldInt51433;
+    public int fieldInt51434;
+    public int fieldInt51435;
+    public int fieldInt51436;
+    public int fieldInt51437;
+    public int fieldInt51438;
+    public int fieldInt51439;
+    public int fieldInt51440;
+    public int fieldInt51441;
+    public int fieldInt51442;
+    public int fieldInt51443;
+    public int fieldInt51444;
+    public int fieldInt51445;
+    public int fieldInt51446;
+    public int fieldInt51447;
+    public int fieldInt51448;
+    public int fieldInt51449;
+    public int fieldInt51450;
+    public int fieldInt51451;
+    public int fieldInt51452;
+    public int fieldInt51453;
+    public int fieldInt51454;
+    public int fieldInt51455;
+    public int fieldInt51456;
+    public int fieldInt51457;
+    public int fieldInt51458;
+    public int fieldInt51459;
+    public int fieldInt51460;
+    public int fieldInt51461;
+    public int fieldInt51462;
+    public int fieldInt51463;
+    public int fieldInt51464;
+    public int fieldInt51465;
+    public int fieldInt51466;
+    public int fieldInt51467;
+    public int fieldInt51468;
+    public int fieldInt51469;
+    public int fieldInt51470;
+    public int fieldInt51471;
+    public int fieldInt51472;
+    public int fieldInt51473;
+    public int fieldInt51474;
+    public int fieldInt51475;
+    public int fieldInt51476;
+    public int fieldInt51477;
+    public int fieldInt51478;
+    public int fieldInt51479;
+    public int fieldInt51480;
+    public int fieldInt51481;
+    public int fieldInt51482;
+    public int fieldInt51483;
+    public int fieldInt51484;
+    public int fieldInt51485;
+    public int fieldInt51486;
+    public int fieldInt51487;
+    public int fieldInt51488;
+    public int fieldInt51489;
+    public int fieldInt51490;
+    public int fieldInt51491;
+    public int fieldInt51492;
+    public int fieldInt51493;
+    public int fieldInt51494;
+    public int fieldInt51495;
+    public int fieldInt51496;
+    public int fieldInt51497;
+    public int fieldInt51498;
+    public int fieldInt51499;
+    public int fieldInt51500;
+    public int fieldInt51501;
+    public int fieldInt51502;
+    public int fieldInt51503;
+    public int fieldInt51504;
+    public int fieldInt51505;
+    public int fieldInt51506;
+    public int fieldInt51507;
+    public int fieldInt51508;
+    public int fieldInt51509;
+    public int fieldInt51510;
+    public int fieldInt51511;
+    public int fieldInt51512;
+    public int fieldInt51513;
+    public int fieldInt51514;
+    public int fieldInt51515;
+    public int fieldInt51516;
+    public int fieldInt51517;
+    public int fieldInt51518;
+    public int fieldInt51519;
+    public int fieldInt51520;
+    public int fieldInt51521;
+    public int fieldInt51522;
+    public int fieldInt51523;
+    public int fieldInt51524;
+    public int fieldInt51525;
+    public int fieldInt51526;
+    public int fieldInt51527;
+    public int fieldInt51528;
+    public int fieldInt51529;
+    public int fieldInt51530;
+    public int fieldInt51531;
+    public int fieldInt51532;
+    public int fieldInt51533;
+    public int fieldInt51534;
+    public int fieldInt51535;
+    public int fieldInt51536;
+    public int fieldInt51537;
+    public int fieldInt51538;
+    public int fieldInt51539;
+    public int fieldInt51540;
+    public int fieldInt51541;
+    public int fieldInt51542;
+    public int fieldInt51543;
+    public int fieldInt51544;
+    public int fieldInt51545;
+    public int fieldInt51546;
+    public int fieldInt51547;
+    public int fieldInt51548;
+    public int fieldInt51549;
+    public int fieldInt51550;
+    public int fieldInt51551;
+    public int fieldInt51552;
+    public int fieldInt51553;
+    public int fieldInt51554;
+    public int fieldInt51555;
+    public int fieldInt51556;
+    public int fieldInt51557;
+    public int fieldInt51558;
+    public int fieldInt51559;
+    public int fieldInt51560;
+    public int fieldInt51561;
+    public int fieldInt51562;
+    public int fieldInt51563;
+    public int fieldInt51564;
+    public int fieldInt51565;
+    public int fieldInt51566;
+    public int fieldInt51567;
+    public int fieldInt51568;
+    public int fieldInt51569;
+    public int fieldInt51570;
+    public int fieldInt51571;
+    public int fieldInt51572;
+    public int fieldInt51573;
+    public int fieldInt51574;
+    public int fieldInt51575;
+    public int fieldInt51576;
+    public int fieldInt51577;
+    public int fieldInt51578;
+    public int fieldInt51579;
+    public int fieldInt51580;
+    public int fieldInt51581;
+    public int fieldInt51582;
+    public int fieldInt51583;
+    public int fieldInt51584;
+    public int fieldInt51585;
+    public int fieldInt51586;
+    public int fieldInt51587;
+    public int fieldInt51588;
+    public int fieldInt51589;
+    public int fieldInt51590;
+    public int fieldInt51591;
+    public int fieldInt51592;
+    public int fieldInt51593;
+    public int fieldInt51594;
+    public int fieldInt51595;
+    public int fieldInt51596;
+    public int fieldInt51597;
+    public int fieldInt51598;
+    public int fieldInt51599;
+    public int fieldInt51600;
+    public int fieldInt51601;
+    public int fieldInt51602;
+    public int fieldInt51603;
+    public int fieldInt51604;
+    public int fieldInt51605;
+    public int fieldInt51606;
+    public int fieldInt51607;
+    public int fieldInt51608;
+    public int fieldInt51609;
+    public int fieldInt51610;
+    public int fieldInt51611;
+    public int fieldInt51612;
+    public int fieldInt51613;
+    public int fieldInt51614;
+    public int fieldInt51615;
+    public int fieldInt51616;
+    public int fieldInt51617;
+    public int fieldInt51618;
+    public int fieldInt51619;
+    public int fieldInt51620;
+    public int fieldInt51621;
+    public int fieldInt51622;
+    public int fieldInt51623;
+    public int fieldInt51624;
+    public int fieldInt51625;
+    public int fieldInt51626;
+    public int fieldInt51627;
+    public int fieldInt51628;
+    public int fieldInt51629;
+    public int fieldInt51630;
+    public int fieldInt51631;
+    public int fieldInt51632;
+    public int fieldInt51633;
+    public int fieldInt51634;
+    public int fieldInt51635;
+    public int fieldInt51636;
+    public int fieldInt51637;
+    public int fieldInt51638;
+    public int fieldInt51639;
+    public int fieldInt51640;
+    public int fieldInt51641;
+    public int fieldInt51642;
+    public int fieldInt51643;
+    public int fieldInt51644;
+    public int fieldInt51645;
+    public int fieldInt51646;
+    public int fieldInt51647;
+    public int fieldInt51648;
+    public int fieldInt51649;
+    public int fieldInt51650;
+    public int fieldInt51651;
+    public int fieldInt51652;
+    public int fieldInt51653;
+    public int fieldInt51654;
+    public int fieldInt51655;
+    public int fieldInt51656;
+    public int fieldInt51657;
+    public int fieldInt51658;
+    public int fieldInt51659;
+    public int fieldInt51660;
+    public int fieldInt51661;
+    public int fieldInt51662;
+    public int fieldInt51663;
+    public int fieldInt51664;
+    public int fieldInt51665;
+    public int fieldInt51666;
+    public int fieldInt51667;
+    public int fieldInt51668;
+    public int fieldInt51669;
+    public int fieldInt51670;
+    public int fieldInt51671;
+    public int fieldInt51672;
+    public int fieldInt51673;
+    public int fieldInt51674;
+    public int fieldInt51675;
+    public int fieldInt51676;
+    public int fieldInt51677;
+    public int fieldInt51678;
+    public int fieldInt51679;
+    public int fieldInt51680;
+    public int fieldInt51681;
+    public int fieldInt51682;
+    public int fieldInt51683;
+    public int fieldInt51684;
+    public int fieldInt51685;
+    public int fieldInt51686;
+    public int fieldInt51687;
+    public int fieldInt51688;
+    public int fieldInt51689;
+    public int fieldInt51690;
+    public int fieldInt51691;
+    public int fieldInt51692;
+    public int fieldInt51693;
+    public int fieldInt51694;
+    public int fieldInt51695;
+    public int fieldInt51696;
+    public int fieldInt51697;
+    public int fieldInt51698;
+    public int fieldInt51699;
+    public int fieldInt51700;
+    public int fieldInt51701;
+    public int fieldInt51702;
+    public int fieldInt51703;
+    public int fieldInt51704;
+    public int fieldInt51705;
+    public int fieldInt51706;
+    public int fieldInt51707;
+    public int fieldInt51708;
+    public int fieldInt51709;
+    public int fieldInt51710;
+    public int fieldInt51711;
+    public int fieldInt51712;
+    public int fieldInt51713;
+    public int fieldInt51714;
+    public int fieldInt51715;
+    public int fieldInt51716;
+    public int fieldInt51717;
+    public int fieldInt51718;
+    public int fieldInt51719;
+    public int fieldInt51720;
+    public int fieldInt51721;
+    public int fieldInt51722;
+    public int fieldInt51723;
+    public int fieldInt51724;
+    public int fieldInt51725;
+    public int fieldInt51726;
+    public int fieldInt51727;
+    public int fieldInt51728;
+    public int fieldInt51729;
+    public int fieldInt51730;
+    public int fieldInt51731;
+    public int fieldInt51732;
+    public int fieldInt51733;
+    public int fieldInt51734;
+    public int fieldInt51735;
+    public int fieldInt51736;
+    public int fieldInt51737;
+    public int fieldInt51738;
+    public int fieldInt51739;
+    public int fieldInt51740;
+    public int fieldInt51741;
+    public int fieldInt51742;
+    public int fieldInt51743;
+    public int fieldInt51744;
+    public int fieldInt51745;
+    public int fieldInt51746;
+    public int fieldInt51747;
+    public int fieldInt51748;
+    public int fieldInt51749;
+    public int fieldInt51750;
+    public int fieldInt51751;
+    public int fieldInt51752;
+    public int fieldInt51753;
+    public int fieldInt51754;
+    public int fieldInt51755;
+    public int fieldInt51756;
+    public int fieldInt51757;
+    public int fieldInt51758;
+    public int fieldInt51759;
+    public int fieldInt51760;
+    public int fieldInt51761;
+    public int fieldInt51762;
+    public int fieldInt51763;
+    public int fieldInt51764;
+    public int fieldInt51765;
+    public int fieldInt51766;
+    public int fieldInt51767;
+    public int fieldInt51768;
+    public int fieldInt51769;
+    public int fieldInt51770;
+    public int fieldInt51771;
+    public int fieldInt51772;
+    public int fieldInt51773;
+    public int fieldInt51774;
+    public int fieldInt51775;
+    public int fieldInt51776;
+    public int fieldInt51777;
+    public int fieldInt51778;
+    public int fieldInt51779;
+    public int fieldInt51780;
+    public int fieldInt51781;
+    public int fieldInt51782;
+    public int fieldInt51783;
+    public int fieldInt51784;
+    public int fieldInt51785;
+    public int fieldInt51786;
+    public int fieldInt51787;
+    public int fieldInt51788;
+    public int fieldInt51789;
+    public int fieldInt51790;
+    public int fieldInt51791;
+    public int fieldInt51792;
+    public int fieldInt51793;
+    public int fieldInt51794;
+    public int fieldInt51795;
+    public int fieldInt51796;
+    public int fieldInt51797;
+    public int fieldInt51798;
+    public int fieldInt51799;
+    public int fieldInt51800;
+    public int fieldInt51801;
+    public int fieldInt51802;
+    public int fieldInt51803;
+    public int fieldInt51804;
+    public int fieldInt51805;
+    public int fieldInt51806;
+    public int fieldInt51807;
+    public int fieldInt51808;
+    public int fieldInt51809;
+    public int fieldInt51810;
+    public int fieldInt51811;
+    public int fieldInt51812;
+    public int fieldInt51813;
+    public int fieldInt51814;
+    public int fieldInt51815;
+    public int fieldInt51816;
+    public int fieldInt51817;
+    public int fieldInt51818;
+    public int fieldInt51819;
+    public int fieldInt51820;
+    public int fieldInt51821;
+    public int fieldInt51822;
+    public int fieldInt51823;
+    public int fieldInt51824;
+    public int fieldInt51825;
+    public int fieldInt51826;
+    public int fieldInt51827;
+    public int fieldInt51828;
+    public int fieldInt51829;
+    public int fieldInt51830;
+    public int fieldInt51831;
+    public int fieldInt51832;
+    public int fieldInt51833;
+    public int fieldInt51834;
+    public int fieldInt51835;
+    public int fieldInt51836;
+    public int fieldInt51837;
+    public int fieldInt51838;
+    public int fieldInt51839;
+    public int fieldInt51840;
+    public int fieldInt51841;
+    public int fieldInt51842;
+    public int fieldInt51843;
+    public int fieldInt51844;
+    public int fieldInt51845;
+    public int fieldInt51846;
+    public int fieldInt51847;
+    public int fieldInt51848;
+    public int fieldInt51849;
+    public int fieldInt51850;
+    public int fieldInt51851;
+    public int fieldInt51852;
+    public int fieldInt51853;
+    public int fieldInt51854;
+    public int fieldInt51855;
+    public int fieldInt51856;
+    public int fieldInt51857;
+    public int fieldInt51858;
+    public int fieldInt51859;
+    public int fieldInt51860;
+    public int fieldInt51861;
+    public int fieldInt51862;
+    public int fieldInt51863;
+    public int fieldInt51864;
+    public int fieldInt51865;
+    public int fieldInt51866;
+    public int fieldInt51867;
+    public int fieldInt51868;
+    public int fieldInt51869;
+    public int fieldInt51870;
+    public int fieldInt51871;
+    public int fieldInt51872;
+    public int fieldInt51873;
+    public int fieldInt51874;
+    public int fieldInt51875;
+    public int fieldInt51876;
+    public int fieldInt51877;
+    public int fieldInt51878;
+    public int fieldInt51879;
+    public int fieldInt51880;
+    public int fieldInt51881;
+    public int fieldInt51882;
+    public int fieldInt51883;
+    public int fieldInt51884;
+    public int fieldInt51885;
+    public int fieldInt51886;
+    public int fieldInt51887;
+    public int fieldInt51888;
+    public int fieldInt51889;
+    public int fieldInt51890;
+    public int fieldInt51891;
+    public int fieldInt51892;
+    public int fieldInt51893;
+    public int fieldInt51894;
+    public int fieldInt51895;
+    public int fieldInt51896;
+    public int fieldInt51897;
+    public int fieldInt51898;
+    public int fieldInt51899;
+    public int fieldInt51900;
+    public int fieldInt51901;
+    public int fieldInt51902;
+    public int fieldInt51903;
+    public int fieldInt51904;
+    public int fieldInt51905;
+    public int fieldInt51906;
+    public int fieldInt51907;
+    public int fieldInt51908;
+    public int fieldInt51909;
+    public int fieldInt51910;
+    public int fieldInt51911;
+    public int fieldInt51912;
+    public int fieldInt51913;
+    public int fieldInt51914;
+    public int fieldInt51915;
+    public int fieldInt51916;
+    public int fieldInt51917;
+    public int fieldInt51918;
+    public int fieldInt51919;
+    public int fieldInt51920;
+    public int fieldInt51921;
+    public int fieldInt51922;
+    public int fieldInt51923;
+    public int fieldInt51924;
+    public int fieldInt51925;
+    public int fieldInt51926;
+    public int fieldInt51927;
+    public int fieldInt51928;
+    public int fieldInt51929;
+    public int fieldInt51930;
+    public int fieldInt51931;
+    public int fieldInt51932;
+    public int fieldInt51933;
+    public int fieldInt51934;
+    public int fieldInt51935;
+    public int fieldInt51936;
+    public int fieldInt51937;
+    public int fieldInt51938;
+    public int fieldInt51939;
+    public int fieldInt51940;
+    public int fieldInt51941;
+    public int fieldInt51942;
+    public int fieldInt51943;
+    public int fieldInt51944;
+    public int fieldInt51945;
+    public int fieldInt51946;
+    public int fieldInt51947;
+    public int fieldInt51948;
+    public int fieldInt51949;
+    public int fieldInt51950;
+    public int fieldInt51951;
+    public int fieldInt51952;
+    public int fieldInt51953;
+    public int fieldInt51954;
+    public int fieldInt51955;
+    public int fieldInt51956;
+    public int fieldInt51957;
+    public int fieldInt51958;
+    public int fieldInt51959;
+    public int fieldInt51960;
+    public int fieldInt51961;
+    public int fieldInt51962;
+    public int fieldInt51963;
+    public int fieldInt51964;
+    public int fieldInt51965;
+    public int fieldInt51966;
+    public int fieldInt51967;
+    public int fieldInt51968;
+    public int fieldInt51969;
+    public int fieldInt51970;
+    public int fieldInt51971;
+    public int fieldInt51972;
+    public int fieldInt51973;
+    public int fieldInt51974;
+    public int fieldInt51975;
+    public int fieldInt51976;
+    public int fieldInt51977;
+    public int fieldInt51978;
+    public int fieldInt51979;
+    public int fieldInt51980;
+    public int fieldInt51981;
+    public int fieldInt51982;
+    public int fieldInt51983;
+    public int fieldInt51984;
+    public int fieldInt51985;
+    public int fieldInt51986;
+    public int fieldInt51987;
+    public int fieldInt51988;
+    public int fieldInt51989;
+    public int fieldInt51990;
+    public int fieldInt51991;
+    public int fieldInt51992;
+    public int fieldInt51993;
+    public int fieldInt51994;
+    public int fieldInt51995;
+    public int fieldInt51996;
+    public int fieldInt51997;
+    public int fieldInt51998;
+    public int fieldInt51999;
+    public int fieldInt52000;
+    public int fieldInt52001;
+    public int fieldInt52002;
+    public int fieldInt52003;
+    public int fieldInt52004;
+    public int fieldInt52005;
+    public int fieldInt52006;
+    public int fieldInt52007;
+    public int fieldInt52008;
+    public int fieldInt52009;
+    public int fieldInt52010;
+    public int fieldInt52011;
+    public int fieldInt52012;
+    public int fieldInt52013;
+    public int fieldInt52014;
+    public int fieldInt52015;
+    public int fieldInt52016;
+    public int fieldInt52017;
+    public int fieldInt52018;
+    public int fieldInt52019;
+    public int fieldInt52020;
+    public int fieldInt52021;
+    public int fieldInt52022;
+    public int fieldInt52023;
+    public int fieldInt52024;
+    public int fieldInt52025;
+    public int fieldInt52026;
+    public int fieldInt52027;
+    public int fieldInt52028;
+    public int fieldInt52029;
+    public int fieldInt52030;
+    public int fieldInt52031;
+    public int fieldInt52032;
+    public int fieldInt52033;
+    public int fieldInt52034;
+    public int fieldInt52035;
+    public int fieldInt52036;
+    public int fieldInt52037;
+    public int fieldInt52038;
+    public int fieldInt52039;
+    public int fieldInt52040;
+    public int fieldInt52041;
+    public int fieldInt52042;
+    public int fieldInt52043;
+    public int fieldInt52044;
+    public int fieldInt52045;
+    public int fieldInt52046;
+    public int fieldInt52047;
+    public int fieldInt52048;
+    public int fieldInt52049;
+    public int fieldInt52050;
+    public int fieldInt52051;
+    public int fieldInt52052;
+    public int fieldInt52053;
+    public int fieldInt52054;
+    public int fieldInt52055;
+    public int fieldInt52056;
+    public int fieldInt52057;
+    public int fieldInt52058;
+    public int fieldInt52059;
+    public int fieldInt52060;
+    public int fieldInt52061;
+    public int fieldInt52062;
+    public int fieldInt52063;
+    public int fieldInt52064;
+    public int fieldInt52065;
+    public int fieldInt52066;
+    public int fieldInt52067;
+    public int fieldInt52068;
+    public int fieldInt52069;
+    public int fieldInt52070;
+    public int fieldInt52071;
+    public int fieldInt52072;
+    public int fieldInt52073;
+    public int fieldInt52074;
+    public int fieldInt52075;
+    public int fieldInt52076;
+    public int fieldInt52077;
+    public int fieldInt52078;
+    public int fieldInt52079;
+    public int fieldInt52080;
+    public int fieldInt52081;
+    public int fieldInt52082;
+    public int fieldInt52083;
+    public int fieldInt52084;
+    public int fieldInt52085;
+    public int fieldInt52086;
+    public int fieldInt52087;
+    public int fieldInt52088;
+    public int fieldInt52089;
+    public int fieldInt52090;
+    public int fieldInt52091;
+    public int fieldInt52092;
+    public int fieldInt52093;
+    public int fieldInt52094;
+    public int fieldInt52095;
+    public int fieldInt52096;
+    public int fieldInt52097;
+    public int fieldInt52098;
+    public int fieldInt52099;
+    public int fieldInt52100;
+    public int fieldInt52101;
+    public int fieldInt52102;
+    public int fieldInt52103;
+    public int fieldInt52104;
+    public int fieldInt52105;
+    public int fieldInt52106;
+    public int fieldInt52107;
+    public int fieldInt52108;
+    public int fieldInt52109;
+    public int fieldInt52110;
+    public int fieldInt52111;
+    public int fieldInt52112;
+    public int fieldInt52113;
+    public int fieldInt52114;
+    public int fieldInt52115;
+    public int fieldInt52116;
+    public int fieldInt52117;
+    public int fieldInt52118;
+    public int fieldInt52119;
+    public int fieldInt52120;
+    public int fieldInt52121;
+    public int fieldInt52122;
+    public int fieldInt52123;
+    public int fieldInt52124;
+    public int fieldInt52125;
+    public int fieldInt52126;
+    public int fieldInt52127;
+    public int fieldInt52128;
+    public int fieldInt52129;
+    public int fieldInt52130;
+    public int fieldInt52131;
+    public int fieldInt52132;
+    public int fieldInt52133;
+    public int fieldInt52134;
+    public int fieldInt52135;
+    public int fieldInt52136;
+    public int fieldInt52137;
+    public int fieldInt52138;
+    public int fieldInt52139;
+    public int fieldInt52140;
+    public int fieldInt52141;
+    public int fieldInt52142;
+    public int fieldInt52143;
+    public int fieldInt52144;
+    public int fieldInt52145;
+    public int fieldInt52146;
+    public int fieldInt52147;
+    public int fieldInt52148;
+    public int fieldInt52149;
+    public int fieldInt52150;
+    public int fieldInt52151;
+    public int fieldInt52152;
+    public int fieldInt52153;
+    public int fieldInt52154;
+    public int fieldInt52155;
+    public int fieldInt52156;
+    public int fieldInt52157;
+    public int fieldInt52158;
+    public int fieldInt52159;
+    public int fieldInt52160;
+    public int fieldInt52161;
+    public int fieldInt52162;
+    public int fieldInt52163;
+    public int fieldInt52164;
+    public int fieldInt52165;
+    public int fieldInt52166;
+    public int fieldInt52167;
+    public int fieldInt52168;
+    public int fieldInt52169;
+    public int fieldInt52170;
+    public int fieldInt52171;
+    public int fieldInt52172;
+    public int fieldInt52173;
+    public int fieldInt52174;
+    public int fieldInt52175;
+    public int fieldInt52176;
+    public int fieldInt52177;
+    public int fieldInt52178;
+    public int fieldInt52179;
+    public int fieldInt52180;
+    public int fieldInt52181;
+    public int fieldInt52182;
+    public int fieldInt52183;
+    public int fieldInt52184;
+    public int fieldInt52185;
+    public int fieldInt52186;
+    public int fieldInt52187;
+    public int fieldInt52188;
+    public int fieldInt52189;
+    public int fieldInt52190;
+    public int fieldInt52191;
+    public int fieldInt52192;
+    public int fieldInt52193;
+    public int fieldInt52194;
+    public int fieldInt52195;
+    public int fieldInt52196;
+    public int fieldInt52197;
+    public int fieldInt52198;
+    public int fieldInt52199;
+    public int fieldInt52200;
+    public int fieldInt52201;
+    public int fieldInt52202;
+    public int fieldInt52203;
+    public int fieldInt52204;
+    public int fieldInt52205;
+    public int fieldInt52206;
+    public int fieldInt52207;
+    public int fieldInt52208;
+    public int fieldInt52209;
+    public int fieldInt52210;
+    public int fieldInt52211;
+    public int fieldInt52212;
+    public int fieldInt52213;
+    public int fieldInt52214;
+    public int fieldInt52215;
+    public int fieldInt52216;
+    public int fieldInt52217;
+    public int fieldInt52218;
+    public int fieldInt52219;
+    public int fieldInt52220;
+    public int fieldInt52221;
+    public int fieldInt52222;
+    public int fieldInt52223;
+    public int fieldInt52224;
+    public int fieldInt52225;
+    public int fieldInt52226;
+    public int fieldInt52227;
+    public int fieldInt52228;
+    public int fieldInt52229;
+    public int fieldInt52230;
+    public int fieldInt52231;
+    public int fieldInt52232;
+    public int fieldInt52233;
+    public int fieldInt52234;
+    public int fieldInt52235;
+    public int fieldInt52236;
+    public int fieldInt52237;
+    public int fieldInt52238;
+    public int fieldInt52239;
+    public int fieldInt52240;
+    public int fieldInt52241;
+    public int fieldInt52242;
+    public int fieldInt52243;
+    public int fieldInt52244;
+    public int fieldInt52245;
+    public int fieldInt52246;
+    public int fieldInt52247;
+    public int fieldInt52248;
+    public int fieldInt52249;
+    public int fieldInt52250;
+    public int fieldInt52251;
+    public int fieldInt52252;
+    public int fieldInt52253;
+    public int fieldInt52254;
+    public int fieldInt52255;
+    public int fieldInt52256;
+    public int fieldInt52257;
+    public int fieldInt52258;
+    public int fieldInt52259;
+    public int fieldInt52260;
+    public int fieldInt52261;
+    public int fieldInt52262;
+    public int fieldInt52263;
+    public int fieldInt52264;
+    public int fieldInt52265;
+    public int fieldInt52266;
+    public int fieldInt52267;
+    public int fieldInt52268;
+    public int fieldInt52269;
+    public int fieldInt52270;
+    public int fieldInt52271;
+    public int fieldInt52272;
+    public int fieldInt52273;
+    public int fieldInt52274;
+    public int fieldInt52275;
+    public int fieldInt52276;
+    public int fieldInt52277;
+    public int fieldInt52278;
+    public int fieldInt52279;
+    public int fieldInt52280;
+    public int fieldInt52281;
+    public int fieldInt52282;
+    public int fieldInt52283;
+    public int fieldInt52284;
+    public int fieldInt52285;
+    public int fieldInt52286;
+    public int fieldInt52287;
+    public int fieldInt52288;
+    public int fieldInt52289;
+    public int fieldInt52290;
+    public int fieldInt52291;
+    public int fieldInt52292;
+    public int fieldInt52293;
+    public int fieldInt52294;
+    public int fieldInt52295;
+    public int fieldInt52296;
+    public int fieldInt52297;
+    public int fieldInt52298;
+    public int fieldInt52299;
+    public int fieldInt52300;
+    public int fieldInt52301;
+    public int fieldInt52302;
+    public int fieldInt52303;
+    public int fieldInt52304;
+    public int fieldInt52305;
+    public int fieldInt52306;
+    public int fieldInt52307;
+    public int fieldInt52308;
+    public int fieldInt52309;
+    public int fieldInt52310;
+    public int fieldInt52311;
+    public int fieldInt52312;
+    public int fieldInt52313;
+    public int fieldInt52314;
+    public int fieldInt52315;
+    public int fieldInt52316;
+    public int fieldInt52317;
+    public int fieldInt52318;
+    public int fieldInt52319;
+    public int fieldInt52320;
+    public int fieldInt52321;
+    public int fieldInt52322;
+    public int fieldInt52323;
+    public int fieldInt52324;
+    public int fieldInt52325;
+    public int fieldInt52326;
+    public int fieldInt52327;
+    public int fieldInt52328;
+    public int fieldInt52329;
+    public int fieldInt52330;
+    public int fieldInt52331;
+    public int fieldInt52332;
+    public int fieldInt52333;
+    public int fieldInt52334;
+    public int fieldInt52335;
+    public int fieldInt52336;
+    public int fieldInt52337;
+    public int fieldInt52338;
+    public int fieldInt52339;
+    public int fieldInt52340;
+    public int fieldInt52341;
+    public int fieldInt52342;
+    public int fieldInt52343;
+    public int fieldInt52344;
+    public int fieldInt52345;
+    public int fieldInt52346;
+    public int fieldInt52347;
+    public int fieldInt52348;
+    public int fieldInt52349;
+    public int fieldInt52350;
+    public int fieldInt52351;
+    public int fieldInt52352;
+    public int fieldInt52353;
+    public int fieldInt52354;
+    public int fieldInt52355;
+    public int fieldInt52356;
+    public int fieldInt52357;
+    public int fieldInt52358;
+    public int fieldInt52359;
+    public int fieldInt52360;
+    public int fieldInt52361;
+    public int fieldInt52362;
+    public int fieldInt52363;
+    public int fieldInt52364;
+    public int fieldInt52365;
+    public int fieldInt52366;
+    public int fieldInt52367;
+    public int fieldInt52368;
+    public int fieldInt52369;
+    public int fieldInt52370;
+    public int fieldInt52371;
+    public int fieldInt52372;
+    public int fieldInt52373;
+    public int fieldInt52374;
+    public int fieldInt52375;
+    public int fieldInt52376;
+    public int fieldInt52377;
+    public int fieldInt52378;
+    public int fieldInt52379;
+    public int fieldInt52380;
+    public int fieldInt52381;
+    public int fieldInt52382;
+    public int fieldInt52383;
+    public int fieldInt52384;
+    public int fieldInt52385;
+    public int fieldInt52386;
+    public int fieldInt52387;
+    public int fieldInt52388;
+    public int fieldInt52389;
+    public int fieldInt52390;
+    public int fieldInt52391;
+    public int fieldInt52392;
+    public int fieldInt52393;
+    public int fieldInt52394;
+    public int fieldInt52395;
+    public int fieldInt52396;
+    public int fieldInt52397;
+    public int fieldInt52398;
+    public int fieldInt52399;
+    public int fieldInt52400;
+    public int fieldInt52401;
+    public int fieldInt52402;
+    public int fieldInt52403;
+    public int fieldInt52404;
+    public int fieldInt52405;
+    public int fieldInt52406;
+    public int fieldInt52407;
+    public int fieldInt52408;
+    public int fieldInt52409;
+    public int fieldInt52410;
+    public int fieldInt52411;
+    public int fieldInt52412;
+    public int fieldInt52413;
+    public int fieldInt52414;
+    public int fieldInt52415;
+    public int fieldInt52416;
+    public int fieldInt52417;
+    public int fieldInt52418;
+    public int fieldInt52419;
+    public int fieldInt52420;
+    public int fieldInt52421;
+    public int fieldInt52422;
+    public int fieldInt52423;
+    public int fieldInt52424;
+    public int fieldInt52425;
+    public int fieldInt52426;
+    public int fieldInt52427;
+    public int fieldInt52428;
+    public int fieldInt52429;
+    public int fieldInt52430;
+    public int fieldInt52431;
+    public int fieldInt52432;
+    public int fieldInt52433;
+    public int fieldInt52434;
+    public int fieldInt52435;
+    public int fieldInt52436;
+    public int fieldInt52437;
+    public int fieldInt52438;
+    public int fieldInt52439;
+    public int fieldInt52440;
+    public int fieldInt52441;
+    public int fieldInt52442;
+    public int fieldInt52443;
+    public int fieldInt52444;
+    public int fieldInt52445;
+    public int fieldInt52446;
+    public int fieldInt52447;
+    public int fieldInt52448;
+    public int fieldInt52449;
+    public int fieldInt52450;
+    public int fieldInt52451;
+    public int fieldInt52452;
+    public int fieldInt52453;
+    public int fieldInt52454;
+    public int fieldInt52455;
+    public int fieldInt52456;
+    public int fieldInt52457;
+    public int fieldInt52458;
+    public int fieldInt52459;
+    public int fieldInt52460;
+    public int fieldInt52461;
+    public int fieldInt52462;
+    public int fieldInt52463;
+    public int fieldInt52464;
+    public int fieldInt52465;
+    public int fieldInt52466;
+    public int fieldInt52467;
+    public int fieldInt52468;
+    public int fieldInt52469;
+    public int fieldInt52470;
+    public int fieldInt52471;
+    public int fieldInt52472;
+    public int fieldInt52473;
+    public int fieldInt52474;
+    public int fieldInt52475;
+    public int fieldInt52476;
+    public int fieldInt52477;
+    public int fieldInt52478;
+    public int fieldInt52479;
+    public int fieldInt52480;
+    public int fieldInt52481;
+    public int fieldInt52482;
+    public int fieldInt52483;
+    public int fieldInt52484;
+    public int fieldInt52485;
+    public int fieldInt52486;
+    public int fieldInt52487;
+    public int fieldInt52488;
+    public int fieldInt52489;
+    public int fieldInt52490;
+    public int fieldInt52491;
+    public int fieldInt52492;
+    public int fieldInt52493;
+    public int fieldInt52494;
+    public int fieldInt52495;
+    public int fieldInt52496;
+    public int fieldInt52497;
+    public int fieldInt52498;
+    public int fieldInt52499;
+    public int fieldInt52500;
+    public int fieldInt52501;
+    public int fieldInt52502;
+    public int fieldInt52503;
+    public int fieldInt52504;
+    public int fieldInt52505;
+    public int fieldInt52506;
+    public int fieldInt52507;
+    public int fieldInt52508;
+    public int fieldInt52509;
+    public int fieldInt52510;
+    public int fieldInt52511;
+    public int fieldInt52512;
+    public int fieldInt52513;
+    public int fieldInt52514;
+    public int fieldInt52515;
+    public int fieldInt52516;
+    public int fieldInt52517;
+    public int fieldInt52518;
+    public int fieldInt52519;
+    public int fieldInt52520;
+    public int fieldInt52521;
+    public int fieldInt52522;
+    public int fieldInt52523;
+    public int fieldInt52524;
+    public int fieldInt52525;
+    public int fieldInt52526;
+    public int fieldInt52527;
+    public int fieldInt52528;
+    public int fieldInt52529;
+    public int fieldInt52530;
+    public int fieldInt52531;
+    public int fieldInt52532;
+    public int fieldInt52533;
+    public int fieldInt52534;
+    public int fieldInt52535;
+    public int fieldInt52536;
+    public int fieldInt52537;
+    public int fieldInt52538;
+    public int fieldInt52539;
+    public int fieldInt52540;
+    public int fieldInt52541;
+    public int fieldInt52542;
+    public int fieldInt52543;
+    public int fieldInt52544;
+    public int fieldInt52545;
+    public int fieldInt52546;
+    public int fieldInt52547;
+    public int fieldInt52548;
+    public int fieldInt52549;
+    public int fieldInt52550;
+    public int fieldInt52551;
+    public int fieldInt52552;
+    public int fieldInt52553;
+    public int fieldInt52554;
+    public int fieldInt52555;
+    public int fieldInt52556;
+    public int fieldInt52557;
+    public int fieldInt52558;
+    public int fieldInt52559;
+    public int fieldInt52560;
+    public int fieldInt52561;
+    public int fieldInt52562;
+    public int fieldInt52563;
+    public int fieldInt52564;
+    public int fieldInt52565;
+    public int fieldInt52566;
+    public int fieldInt52567;
+    public int fieldInt52568;
+    public int fieldInt52569;
+    public int fieldInt52570;
+    public int fieldInt52571;
+    public int fieldInt52572;
+    public int fieldInt52573;
+    public int fieldInt52574;
+    public int fieldInt52575;
+    public int fieldInt52576;
+    public int fieldInt52577;
+    public int fieldInt52578;
+    public int fieldInt52579;
+    public int fieldInt52580;
+    public int fieldInt52581;
+    public int fieldInt52582;
+    public int fieldInt52583;
+    public int fieldInt52584;
+    public int fieldInt52585;
+    public int fieldInt52586;
+    public int fieldInt52587;
+    public int fieldInt52588;
+    public int fieldInt52589;
+    public int fieldInt52590;
+    public int fieldInt52591;
+    public int fieldInt52592;
+    public int fieldInt52593;
+    public int fieldInt52594;
+    public int fieldInt52595;
+    public int fieldInt52596;
+    public int fieldInt52597;
+    public int fieldInt52598;
+    public int fieldInt52599;
+    public int fieldInt52600;
+    public int fieldInt52601;
+    public int fieldInt52602;
+    public int fieldInt52603;
+    public int fieldInt52604;
+    public int fieldInt52605;
+    public int fieldInt52606;
+    public int fieldInt52607;
+    public int fieldInt52608;
+    public int fieldInt52609;
+    public int fieldInt52610;
+    public int fieldInt52611;
+    public int fieldInt52612;
+    public int fieldInt52613;
+    public int fieldInt52614;
+    public int fieldInt52615;
+    public int fieldInt52616;
+    public int fieldInt52617;
+    public int fieldInt52618;
+    public int fieldInt52619;
+    public int fieldInt52620;
+    public int fieldInt52621;
+    public int fieldInt52622;
+    public int fieldInt52623;
+    public int fieldInt52624;
+    public int fieldInt52625;
+    public int fieldInt52626;
+    public int fieldInt52627;
+    public int fieldInt52628;
+    public int fieldInt52629;
+    public int fieldInt52630;
+    public int fieldInt52631;
+    public int fieldInt52632;
+    public int fieldInt52633;
+    public int fieldInt52634;
+    public int fieldInt52635;
+    public int fieldInt52636;
+    public int fieldInt52637;
+    public int fieldInt52638;
+    public int fieldInt52639;
+    public int fieldInt52640;
+    public int fieldInt52641;
+    public int fieldInt52642;
+    public int fieldInt52643;
+    public int fieldInt52644;
+    public int fieldInt52645;
+    public int fieldInt52646;
+    public int fieldInt52647;
+    public int fieldInt52648;
+    public int fieldInt52649;
+    public int fieldInt52650;
+    public int fieldInt52651;
+    public int fieldInt52652;
+    public int fieldInt52653;
+    public int fieldInt52654;
+    public int fieldInt52655;
+    public int fieldInt52656;
+    public int fieldInt52657;
+    public int fieldInt52658;
+    public int fieldInt52659;
+    public int fieldInt52660;
+    public int fieldInt52661;
+    public int fieldInt52662;
+    public int fieldInt52663;
+    public int fieldInt52664;
+    public int fieldInt52665;
+    public int fieldInt52666;
+    public int fieldInt52667;
+    public int fieldInt52668;
+    public int fieldInt52669;
+    public int fieldInt52670;
+    public int fieldInt52671;
+    public int fieldInt52672;
+    public int fieldInt52673;
+    public int fieldInt52674;
+    public int fieldInt52675;
+    public int fieldInt52676;
+    public int fieldInt52677;
+    public int fieldInt52678;
+    public int fieldInt52679;
+    public int fieldInt52680;
+    public int fieldInt52681;
+    public int fieldInt52682;
+    public int fieldInt52683;
+    public int fieldInt52684;
+    public int fieldInt52685;
+    public int fieldInt52686;
+    public int fieldInt52687;
+    public int fieldInt52688;
+    public int fieldInt52689;
+    public int fieldInt52690;
+    public int fieldInt52691;
+    public int fieldInt52692;
+    public int fieldInt52693;
+    public int fieldInt52694;
+    public int fieldInt52695;
+    public int fieldInt52696;
+    public int fieldInt52697;
+    public int fieldInt52698;
+    public int fieldInt52699;
+    public int fieldInt52700;
+    public int fieldInt52701;
+    public int fieldInt52702;
+    public int fieldInt52703;
+    public int fieldInt52704;
+    public int fieldInt52705;
+    public int fieldInt52706;
+    public int fieldInt52707;
+    public int fieldInt52708;
+    public int fieldInt52709;
+    public int fieldInt52710;
+    public int fieldInt52711;
+    public int fieldInt52712;
+    public int fieldInt52713;
+    public int fieldInt52714;
+    public int fieldInt52715;
+    public int fieldInt52716;
+    public int fieldInt52717;
+    public int fieldInt52718;
+    public int fieldInt52719;
+    public int fieldInt52720;
+    public int fieldInt52721;
+    public int fieldInt52722;
+    public int fieldInt52723;
+    public int fieldInt52724;
+    public int fieldInt52725;
+    public int fieldInt52726;
+    public int fieldInt52727;
+    public int fieldInt52728;
+    public int fieldInt52729;
+    public int fieldInt52730;
+    public int fieldInt52731;
+    public int fieldInt52732;
+    public int fieldInt52733;
+    public int fieldInt52734;
+    public int fieldInt52735;
+    public int fieldInt52736;
+    public int fieldInt52737;
+    public int fieldInt52738;
+    public int fieldInt52739;
+    public int fieldInt52740;
+    public int fieldInt52741;
+    public int fieldInt52742;
+    public int fieldInt52743;
+    public int fieldInt52744;
+    public int fieldInt52745;
+    public int fieldInt52746;
+    public int fieldInt52747;
+    public int fieldInt52748;
+    public int fieldInt52749;
+    public int fieldInt52750;
+    public int fieldInt52751;
+    public int fieldInt52752;
+    public int fieldInt52753;
+    public int fieldInt52754;
+    public int fieldInt52755;
+    public int fieldInt52756;
+    public int fieldInt52757;
+    public int fieldInt52758;
+    public int fieldInt52759;
+    public int fieldInt52760;
+    public int fieldInt52761;
+    public int fieldInt52762;
+    public int fieldInt52763;
+    public int fieldInt52764;
+    public int fieldInt52765;
+    public int fieldInt52766;
+    public int fieldInt52767;
+    public int fieldInt52768;
+    public int fieldInt52769;
+    public int fieldInt52770;
+    public int fieldInt52771;
+    public int fieldInt52772;
+    public int fieldInt52773;
+    public int fieldInt52774;
+    public int fieldInt52775;
+    public int fieldInt52776;
+    public int fieldInt52777;
+    public int fieldInt52778;
+    public int fieldInt52779;
+    public int fieldInt52780;
+    public int fieldInt52781;
+    public int fieldInt52782;
+    public int fieldInt52783;
+    public int fieldInt52784;
+    public int fieldInt52785;
+    public int fieldInt52786;
+    public int fieldInt52787;
+    public int fieldInt52788;
+    public int fieldInt52789;
+    public int fieldInt52790;
+    public int fieldInt52791;
+    public int fieldInt52792;
+    public int fieldInt52793;
+    public int fieldInt52794;
+    public int fieldInt52795;
+    public int fieldInt52796;
+    public int fieldInt52797;
+    public int fieldInt52798;
+    public int fieldInt52799;
+    public int fieldInt52800;
+    public int fieldInt52801;
+    public int fieldInt52802;
+    public int fieldInt52803;
+    public int fieldInt52804;
+    public int fieldInt52805;
+    public int fieldInt52806;
+    public int fieldInt52807;
+    public int fieldInt52808;
+    public int fieldInt52809;
+    public int fieldInt52810;
+    public int fieldInt52811;
+    public int fieldInt52812;
+    public int fieldInt52813;
+    public int fieldInt52814;
+    public int fieldInt52815;
+    public int fieldInt52816;
+    public int fieldInt52817;
+    public int fieldInt52818;
+    public int fieldInt52819;
+    public int fieldInt52820;
+    public int fieldInt52821;
+    public int fieldInt52822;
+    public int fieldInt52823;
+    public int fieldInt52824;
+    public int fieldInt52825;
+    public int fieldInt52826;
+    public int fieldInt52827;
+    public int fieldInt52828;
+    public int fieldInt52829;
+    public int fieldInt52830;
+    public int fieldInt52831;
+    public int fieldInt52832;
+    public int fieldInt52833;
+    public int fieldInt52834;
+    public int fieldInt52835;
+    public int fieldInt52836;
+    public int fieldInt52837;
+    public int fieldInt52838;
+    public int fieldInt52839;
+    public int fieldInt52840;
+    public int fieldInt52841;
+    public int fieldInt52842;
+    public int fieldInt52843;
+    public int fieldInt52844;
+    public int fieldInt52845;
+    public int fieldInt52846;
+    public int fieldInt52847;
+    public int fieldInt52848;
+    public int fieldInt52849;
+    public int fieldInt52850;
+    public int fieldInt52851;
+    public int fieldInt52852;
+    public int fieldInt52853;
+    public int fieldInt52854;
+    public int fieldInt52855;
+    public int fieldInt52856;
+    public int fieldInt52857;
+    public int fieldInt52858;
+    public int fieldInt52859;
+    public int fieldInt52860;
+    public int fieldInt52861;
+    public int fieldInt52862;
+    public int fieldInt52863;
+    public int fieldInt52864;
+    public int fieldInt52865;
+    public int fieldInt52866;
+    public int fieldInt52867;
+    public int fieldInt52868;
+    public int fieldInt52869;
+    public int fieldInt52870;
+    public int fieldInt52871;
+    public int fieldInt52872;
+    public int fieldInt52873;
+    public int fieldInt52874;
+    public int fieldInt52875;
+    public int fieldInt52876;
+    public int fieldInt52877;
+    public int fieldInt52878;
+    public int fieldInt52879;
+    public int fieldInt52880;
+    public int fieldInt52881;
+    public int fieldInt52882;
+    public int fieldInt52883;
+    public int fieldInt52884;
+    public int fieldInt52885;
+    public int fieldInt52886;
+    public int fieldInt52887;
+    public int fieldInt52888;
+    public int fieldInt52889;
+    public int fieldInt52890;
+    public int fieldInt52891;
+    public int fieldInt52892;
+    public int fieldInt52893;
+    public int fieldInt52894;
+    public int fieldInt52895;
+    public int fieldInt52896;
+    public int fieldInt52897;
+    public int fieldInt52898;
+    public int fieldInt52899;
+    public int fieldInt52900;
+    public int fieldInt52901;
+    public int fieldInt52902;
+    public int fieldInt52903;
+    public int fieldInt52904;
+    public int fieldInt52905;
+    public int fieldInt52906;
+    public int fieldInt52907;
+    public int fieldInt52908;
+    public int fieldInt52909;
+    public int fieldInt52910;
+    public int fieldInt52911;
+    public int fieldInt52912;
+    public int fieldInt52913;
+    public int fieldInt52914;
+    public int fieldInt52915;
+    public int fieldInt52916;
+    public int fieldInt52917;
+    public int fieldInt52918;
+    public int fieldInt52919;
+    public int fieldInt52920;
+    public int fieldInt52921;
+    public int fieldInt52922;
+    public int fieldInt52923;
+    public int fieldInt52924;
+    public int fieldInt52925;
+    public int fieldInt52926;
+    public int fieldInt52927;
+    public int fieldInt52928;
+    public int fieldInt52929;
+    public int fieldInt52930;
+    public int fieldInt52931;
+    public int fieldInt52932;
+    public int fieldInt52933;
+    public int fieldInt52934;
+    public int fieldInt52935;
+    public int fieldInt52936;
+    public int fieldInt52937;
+    public int fieldInt52938;
+    public int fieldInt52939;
+    public int fieldInt52940;
+    public int fieldInt52941;
+    public int fieldInt52942;
+    public int fieldInt52943;
+    public int fieldInt52944;
+    public int fieldInt52945;
+    public int fieldInt52946;
+    public int fieldInt52947;
+    public int fieldInt52948;
+    public int fieldInt52949;
+    public int fieldInt52950;
+    public int fieldInt52951;
+    public int fieldInt52952;
+    public int fieldInt52953;
+    public int fieldInt52954;
+    public int fieldInt52955;
+    public int fieldInt52956;
+    public int fieldInt52957;
+    public int fieldInt52958;
+    public int fieldInt52959;
+    public int fieldInt52960;
+    public int fieldInt52961;
+    public int fieldInt52962;
+    public int fieldInt52963;
+    public int fieldInt52964;
+    public int fieldInt52965;
+    public int fieldInt52966;
+    public int fieldInt52967;
+    public int fieldInt52968;
+    public int fieldInt52969;
+    public int fieldInt52970;
+    public int fieldInt52971;
+    public int fieldInt52972;
+    public int fieldInt52973;
+    public int fieldInt52974;
+    public int fieldInt52975;
+    public int fieldInt52976;
+    public int fieldInt52977;
+    public int fieldInt52978;
+    public int fieldInt52979;
+    public int fieldInt52980;
+    public int fieldInt52981;
+    public int fieldInt52982;
+    public int fieldInt52983;
+    public int fieldInt52984;
+    public int fieldInt52985;
+    public int fieldInt52986;
+    public int fieldInt52987;
+    public int fieldInt52988;
+    public int fieldInt52989;
+    public int fieldInt52990;
+    public int fieldInt52991;
+    public int fieldInt52992;
+    public int fieldInt52993;
+    public int fieldInt52994;
+    public int fieldInt52995;
+    public int fieldInt52996;
+    public int fieldInt52997;
+    public int fieldInt52998;
+    public int fieldInt52999;
+    public int fieldInt53000;
+    public int fieldInt53001;
+    public int fieldInt53002;
+    public int fieldInt53003;
+    public int fieldInt53004;
+    public int fieldInt53005;
+    public int fieldInt53006;
+    public int fieldInt53007;
+    public int fieldInt53008;
+    public int fieldInt53009;
+    public int fieldInt53010;
+    public int fieldInt53011;
+    public int fieldInt53012;
+    public int fieldInt53013;
+    public int fieldInt53014;
+    public int fieldInt53015;
+    public int fieldInt53016;
+    public int fieldInt53017;
+    public int fieldInt53018;
+    public int fieldInt53019;
+    public int fieldInt53020;
+    public int fieldInt53021;
+    public int fieldInt53022;
+    public int fieldInt53023;
+    public int fieldInt53024;
+    public int fieldInt53025;
+    public int fieldInt53026;
+    public int fieldInt53027;
+    public int fieldInt53028;
+    public int fieldInt53029;
+    public int fieldInt53030;
+    public int fieldInt53031;
+    public int fieldInt53032;
+    public int fieldInt53033;
+    public int fieldInt53034;
+    public int fieldInt53035;
+    public int fieldInt53036;
+    public int fieldInt53037;
+    public int fieldInt53038;
+    public int fieldInt53039;
+    public int fieldInt53040;
+    public int fieldInt53041;
+    public int fieldInt53042;
+    public int fieldInt53043;
+    public int fieldInt53044;
+    public int fieldInt53045;
+    public int fieldInt53046;
+    public int fieldInt53047;
+    public int fieldInt53048;
+    public int fieldInt53049;
+    public int fieldInt53050;
+    public int fieldInt53051;
+    public int fieldInt53052;
+    public int fieldInt53053;
+    public int fieldInt53054;
+    public int fieldInt53055;
+    public int fieldInt53056;
+    public int fieldInt53057;
+    public int fieldInt53058;
+    public int fieldInt53059;
+    public int fieldInt53060;
+    public int fieldInt53061;
+    public int fieldInt53062;
+    public int fieldInt53063;
+    public int fieldInt53064;
+    public int fieldInt53065;
+    public int fieldInt53066;
+    public int fieldInt53067;
+    public int fieldInt53068;
+    public int fieldInt53069;
+    public int fieldInt53070;
+    public int fieldInt53071;
+    public int fieldInt53072;
+    public int fieldInt53073;
+    public int fieldInt53074;
+    public int fieldInt53075;
+    public int fieldInt53076;
+    public int fieldInt53077;
+    public int fieldInt53078;
+    public int fieldInt53079;
+    public int fieldInt53080;
+    public int fieldInt53081;
+    public int fieldInt53082;
+    public int fieldInt53083;
+    public int fieldInt53084;
+    public int fieldInt53085;
+    public int fieldInt53086;
+    public int fieldInt53087;
+    public int fieldInt53088;
+    public int fieldInt53089;
+    public int fieldInt53090;
+    public int fieldInt53091;
+    public int fieldInt53092;
+    public int fieldInt53093;
+    public int fieldInt53094;
+    public int fieldInt53095;
+    public int fieldInt53096;
+    public int fieldInt53097;
+    public int fieldInt53098;
+    public int fieldInt53099;
+    public int fieldInt53100;
+    public int fieldInt53101;
+    public int fieldInt53102;
+    public int fieldInt53103;
+    public int fieldInt53104;
+    public int fieldInt53105;
+    public int fieldInt53106;
+    public int fieldInt53107;
+    public int fieldInt53108;
+    public int fieldInt53109;
+    public int fieldInt53110;
+    public int fieldInt53111;
+    public int fieldInt53112;
+    public int fieldInt53113;
+    public int fieldInt53114;
+    public int fieldInt53115;
+    public int fieldInt53116;
+    public int fieldInt53117;
+    public int fieldInt53118;
+    public int fieldInt53119;
+    public int fieldInt53120;
+    public int fieldInt53121;
+    public int fieldInt53122;
+    public int fieldInt53123;
+    public int fieldInt53124;
+    public int fieldInt53125;
+    public int fieldInt53126;
+    public int fieldInt53127;
+    public int fieldInt53128;
+    public int fieldInt53129;
+    public int fieldInt53130;
+    public int fieldInt53131;
+    public int fieldInt53132;
+    public int fieldInt53133;
+    public int fieldInt53134;
+    public int fieldInt53135;
+    public int fieldInt53136;
+    public int fieldInt53137;
+    public int fieldInt53138;
+    public int fieldInt53139;
+    public int fieldInt53140;
+    public int fieldInt53141;
+    public int fieldInt53142;
+    public int fieldInt53143;
+    public int fieldInt53144;
+    public int fieldInt53145;
+    public int fieldInt53146;
+    public int fieldInt53147;
+    public int fieldInt53148;
+    public int fieldInt53149;
+    public int fieldInt53150;
+    public int fieldInt53151;
+    public int fieldInt53152;
+    public int fieldInt53153;
+    public int fieldInt53154;
+    public int fieldInt53155;
+    public int fieldInt53156;
+    public int fieldInt53157;
+    public int fieldInt53158;
+    public int fieldInt53159;
+    public int fieldInt53160;
+    public int fieldInt53161;
+    public int fieldInt53162;
+    public int fieldInt53163;
+    public int fieldInt53164;
+    public int fieldInt53165;
+    public int fieldInt53166;
+    public int fieldInt53167;
+    public int fieldInt53168;
+    public int fieldInt53169;
+    public int fieldInt53170;
+    public int fieldInt53171;
+    public int fieldInt53172;
+    public int fieldInt53173;
+    public int fieldInt53174;
+    public int fieldInt53175;
+    public int fieldInt53176;
+    public int fieldInt53177;
+    public int fieldInt53178;
+    public int fieldInt53179;
+    public int fieldInt53180;
+    public int fieldInt53181;
+    public int fieldInt53182;
+    public int fieldInt53183;
+    public int fieldInt53184;
+    public int fieldInt53185;
+    public int fieldInt53186;
+    public int fieldInt53187;
+    public int fieldInt53188;
+    public int fieldInt53189;
+    public int fieldInt53190;
+    public int fieldInt53191;
+    public int fieldInt53192;
+    public int fieldInt53193;
+    public int fieldInt53194;
+    public int fieldInt53195;
+    public int fieldInt53196;
+    public int fieldInt53197;
+    public int fieldInt53198;
+    public int fieldInt53199;
+    public int fieldInt53200;
+    public int fieldInt53201;
+    public int fieldInt53202;
+    public int fieldInt53203;
+    public int fieldInt53204;
+    public int fieldInt53205;
+    public int fieldInt53206;
+    public int fieldInt53207;
+    public int fieldInt53208;
+    public int fieldInt53209;
+    public int fieldInt53210;
+    public int fieldInt53211;
+    public int fieldInt53212;
+    public int fieldInt53213;
+    public int fieldInt53214;
+    public int fieldInt53215;
+    public int fieldInt53216;
+    public int fieldInt53217;
+    public int fieldInt53218;
+    public int fieldInt53219;
+    public int fieldInt53220;
+    public int fieldInt53221;
+    public int fieldInt53222;
+    public int fieldInt53223;
+    public int fieldInt53224;
+    public int fieldInt53225;
+    public int fieldInt53226;
+    public int fieldInt53227;
+    public int fieldInt53228;
+    public int fieldInt53229;
+    public int fieldInt53230;
+    public int fieldInt53231;
+    public int fieldInt53232;
+    public int fieldInt53233;
+    public int fieldInt53234;
+    public int fieldInt53235;
+    public int fieldInt53236;
+    public int fieldInt53237;
+    public int fieldInt53238;
+    public int fieldInt53239;
+    public int fieldInt53240;
+    public int fieldInt53241;
+    public int fieldInt53242;
+    public int fieldInt53243;
+    public int fieldInt53244;
+    public int fieldInt53245;
+    public int fieldInt53246;
+    public int fieldInt53247;
+    public int fieldInt53248;
+    public int fieldInt53249;
+    public int fieldInt53250;
+    public int fieldInt53251;
+    public int fieldInt53252;
+    public int fieldInt53253;
+    public int fieldInt53254;
+    public int fieldInt53255;
+    public int fieldInt53256;
+    public int fieldInt53257;
+    public int fieldInt53258;
+    public int fieldInt53259;
+    public int fieldInt53260;
+    public int fieldInt53261;
+    public int fieldInt53262;
+    public int fieldInt53263;
+    public int fieldInt53264;
+    public int fieldInt53265;
+    public int fieldInt53266;
+    public int fieldInt53267;
+    public int fieldInt53268;
+    public int fieldInt53269;
+    public int fieldInt53270;
+    public int fieldInt53271;
+    public int fieldInt53272;
+    public int fieldInt53273;
+    public int fieldInt53274;
+    public int fieldInt53275;
+    public int fieldInt53276;
+    public int fieldInt53277;
+    public int fieldInt53278;
+    public int fieldInt53279;
+    public int fieldInt53280;
+    public int fieldInt53281;
+    public int fieldInt53282;
+    public int fieldInt53283;
+    public int fieldInt53284;
+    public int fieldInt53285;
+    public int fieldInt53286;
+    public int fieldInt53287;
+    public int fieldInt53288;
+    public int fieldInt53289;
+    public int fieldInt53290;
+    public int fieldInt53291;
+    public int fieldInt53292;
+    public int fieldInt53293;
+    public int fieldInt53294;
+    public int fieldInt53295;
+    public int fieldInt53296;
+    public int fieldInt53297;
+    public int fieldInt53298;
+    public int fieldInt53299;
+    public int fieldInt53300;
+    public int fieldInt53301;
+    public int fieldInt53302;
+    public int fieldInt53303;
+    public int fieldInt53304;
+    public int fieldInt53305;
+    public int fieldInt53306;
+    public int fieldInt53307;
+    public int fieldInt53308;
+    public int fieldInt53309;
+    public int fieldInt53310;
+    public int fieldInt53311;
+    public int fieldInt53312;
+    public int fieldInt53313;
+    public int fieldInt53314;
+    public int fieldInt53315;
+    public int fieldInt53316;
+    public int fieldInt53317;
+    public int fieldInt53318;
+    public int fieldInt53319;
+    public int fieldInt53320;
+    public int fieldInt53321;
+    public int fieldInt53322;
+    public int fieldInt53323;
+    public int fieldInt53324;
+    public int fieldInt53325;
+    public int fieldInt53326;
+    public int fieldInt53327;
+    public int fieldInt53328;
+    public int fieldInt53329;
+    public int fieldInt53330;
+    public int fieldInt53331;
+    public int fieldInt53332;
+    public int fieldInt53333;
+    public int fieldInt53334;
+    public int fieldInt53335;
+    public int fieldInt53336;
+    public int fieldInt53337;
+    public int fieldInt53338;
+    public int fieldInt53339;
+    public int fieldInt53340;
+    public int fieldInt53341;
+    public int fieldInt53342;
+    public int fieldInt53343;
+    public int fieldInt53344;
+    public int fieldInt53345;
+    public int fieldInt53346;
+    public int fieldInt53347;
+    public int fieldInt53348;
+    public int fieldInt53349;
+    public int fieldInt53350;
+    public int fieldInt53351;
+    public int fieldInt53352;
+    public int fieldInt53353;
+    public int fieldInt53354;
+    public int fieldInt53355;
+    public int fieldInt53356;
+    public int fieldInt53357;
+    public int fieldInt53358;
+    public int fieldInt53359;
+    public int fieldInt53360;
+    public int fieldInt53361;
+    public int fieldInt53362;
+    public int fieldInt53363;
+    public int fieldInt53364;
+    public int fieldInt53365;
+    public int fieldInt53366;
+    public int fieldInt53367;
+    public int fieldInt53368;
+    public int fieldInt53369;
+    public int fieldInt53370;
+    public int fieldInt53371;
+    public int fieldInt53372;
+    public int fieldInt53373;
+    public int fieldInt53374;
+    public int fieldInt53375;
+    public int fieldInt53376;
+    public int fieldInt53377;
+    public int fieldInt53378;
+    public int fieldInt53379;
+    public int fieldInt53380;
+    public int fieldInt53381;
+    public int fieldInt53382;
+    public int fieldInt53383;
+    public int fieldInt53384;
+    public int fieldInt53385;
+    public int fieldInt53386;
+    public int fieldInt53387;
+    public int fieldInt53388;
+    public int fieldInt53389;
+    public int fieldInt53390;
+    public int fieldInt53391;
+    public int fieldInt53392;
+    public int fieldInt53393;
+    public int fieldInt53394;
+    public int fieldInt53395;
+    public int fieldInt53396;
+    public int fieldInt53397;
+    public int fieldInt53398;
+    public int fieldInt53399;
+    public int fieldInt53400;
+    public int fieldInt53401;
+    public int fieldInt53402;
+    public int fieldInt53403;
+    public int fieldInt53404;
+    public int fieldInt53405;
+    public int fieldInt53406;
+    public int fieldInt53407;
+    public int fieldInt53408;
+    public int fieldInt53409;
+    public int fieldInt53410;
+    public int fieldInt53411;
+    public int fieldInt53412;
+    public int fieldInt53413;
+    public int fieldInt53414;
+    public int fieldInt53415;
+    public int fieldInt53416;
+    public int fieldInt53417;
+    public int fieldInt53418;
+    public int fieldInt53419;
+    public int fieldInt53420;
+    public int fieldInt53421;
+    public int fieldInt53422;
+    public int fieldInt53423;
+    public int fieldInt53424;
+    public int fieldInt53425;
+    public int fieldInt53426;
+    public int fieldInt53427;
+    public int fieldInt53428;
+    public int fieldInt53429;
+    public int fieldInt53430;
+    public int fieldInt53431;
+    public int fieldInt53432;
+    public int fieldInt53433;
+    public int fieldInt53434;
+    public int fieldInt53435;
+    public int fieldInt53436;
+    public int fieldInt53437;
+    public int fieldInt53438;
+    public int fieldInt53439;
+    public int fieldInt53440;
+    public int fieldInt53441;
+    public int fieldInt53442;
+    public int fieldInt53443;
+    public int fieldInt53444;
+    public int fieldInt53445;
+    public int fieldInt53446;
+    public int fieldInt53447;
+    public int fieldInt53448;
+    public int fieldInt53449;
+    public int fieldInt53450;
+    public int fieldInt53451;
+    public int fieldInt53452;
+    public int fieldInt53453;
+    public int fieldInt53454;
+    public int fieldInt53455;
+    public int fieldInt53456;
+    public int fieldInt53457;
+    public int fieldInt53458;
+    public int fieldInt53459;
+    public int fieldInt53460;
+    public int fieldInt53461;
+    public int fieldInt53462;
+    public int fieldInt53463;
+    public int fieldInt53464;
+    public int fieldInt53465;
+    public int fieldInt53466;
+    public int fieldInt53467;
+    public int fieldInt53468;
+    public int fieldInt53469;
+    public int fieldInt53470;
+    public int fieldInt53471;
+    public int fieldInt53472;
+    public int fieldInt53473;
+    public int fieldInt53474;
+    public int fieldInt53475;
+    public int fieldInt53476;
+    public int fieldInt53477;
+    public int fieldInt53478;
+    public int fieldInt53479;
+    public int fieldInt53480;
+    public int fieldInt53481;
+    public int fieldInt53482;
+    public int fieldInt53483;
+    public int fieldInt53484;
+    public int fieldInt53485;
+    public int fieldInt53486;
+    public int fieldInt53487;
+    public int fieldInt53488;
+    public int fieldInt53489;
+    public int fieldInt53490;
+    public int fieldInt53491;
+    public int fieldInt53492;
+    public int fieldInt53493;
+    public int fieldInt53494;
+    public int fieldInt53495;
+    public int fieldInt53496;
+    public int fieldInt53497;
+    public int fieldInt53498;
+    public int fieldInt53499;
+    public int fieldInt53500;
+    public int fieldInt53501;
+    public int fieldInt53502;
+    public int fieldInt53503;
+    public int fieldInt53504;
+    public int fieldInt53505;
+    public int fieldInt53506;
+    public int fieldInt53507;
+    public int fieldInt53508;
+    public int fieldInt53509;
+    public int fieldInt53510;
+    public int fieldInt53511;
+    public int fieldInt53512;
+    public int fieldInt53513;
+    public int fieldInt53514;
+    public int fieldInt53515;
+    public int fieldInt53516;
+    public int fieldInt53517;
+    public int fieldInt53518;
+    public int fieldInt53519;
+    public int fieldInt53520;
+    public int fieldInt53521;
+    public int fieldInt53522;
+    public int fieldInt53523;
+    public int fieldInt53524;
+    public int fieldInt53525;
+    public int fieldInt53526;
+    public int fieldInt53527;
+    public int fieldInt53528;
+    public int fieldInt53529;
+    public int fieldInt53530;
+    public int fieldInt53531;
+    public int fieldInt53532;
+    public int fieldInt53533;
+    public int fieldInt53534;
+    public int fieldInt53535;
+    public int fieldInt53536;
+    public int fieldInt53537;
+    public int fieldInt53538;
+    public int fieldInt53539;
+    public int fieldInt53540;
+    public int fieldInt53541;
+    public int fieldInt53542;
+    public int fieldInt53543;
+    public int fieldInt53544;
+    public int fieldInt53545;
+    public int fieldInt53546;
+    public int fieldInt53547;
+    public int fieldInt53548;
+    public int fieldInt53549;
+    public int fieldInt53550;
+    public int fieldInt53551;
+    public int fieldInt53552;
+    public int fieldInt53553;
+    public int fieldInt53554;
+    public int fieldInt53555;
+    public int fieldInt53556;
+    public int fieldInt53557;
+    public int fieldInt53558;
+    public int fieldInt53559;
+    public int fieldInt53560;
+    public int fieldInt53561;
+    public int fieldInt53562;
+    public int fieldInt53563;
+    public int fieldInt53564;
+    public int fieldInt53565;
+    public int fieldInt53566;
+    public int fieldInt53567;
+    public int fieldInt53568;
+    public int fieldInt53569;
+    public int fieldInt53570;
+    public int fieldInt53571;
+    public int fieldInt53572;
+    public int fieldInt53573;
+    public int fieldInt53574;
+    public int fieldInt53575;
+    public int fieldInt53576;
+    public int fieldInt53577;
+    public int fieldInt53578;
+    public int fieldInt53579;
+    public int fieldInt53580;
+    public int fieldInt53581;
+    public int fieldInt53582;
+    public int fieldInt53583;
+    public int fieldInt53584;
+    public int fieldInt53585;
+    public int fieldInt53586;
+    public int fieldInt53587;
+    public int fieldInt53588;
+    public int fieldInt53589;
+    public int fieldInt53590;
+    public int fieldInt53591;
+    public int fieldInt53592;
+    public int fieldInt53593;
+    public int fieldInt53594;
+    public int fieldInt53595;
+    public int fieldInt53596;
+    public int fieldInt53597;
+    public int fieldInt53598;
+    public int fieldInt53599;
+    public int fieldInt53600;
+    public int fieldInt53601;
+    public int fieldInt53602;
+    public int fieldInt53603;
+    public int fieldInt53604;
+    public int fieldInt53605;
+    public int fieldInt53606;
+    public int fieldInt53607;
+    public int fieldInt53608;
+    public int fieldInt53609;
+    public int fieldInt53610;
+    public int fieldInt53611;
+    public int fieldInt53612;
+    public int fieldInt53613;
+    public int fieldInt53614;
+    public int fieldInt53615;
+    public int fieldInt53616;
+    public int fieldInt53617;
+    public int fieldInt53618;
+    public int fieldInt53619;
+    public int fieldInt53620;
+    public int fieldInt53621;
+    public int fieldInt53622;
+    public int fieldInt53623;
+    public int fieldInt53624;
+    public int fieldInt53625;
+    public int fieldInt53626;
+    public int fieldInt53627;
+    public int fieldInt53628;
+    public int fieldInt53629;
+    public int fieldInt53630;
+    public int fieldInt53631;
+    public int fieldInt53632;
+    public int fieldInt53633;
+    public int fieldInt53634;
+    public int fieldInt53635;
+    public int fieldInt53636;
+    public int fieldInt53637;
+    public int fieldInt53638;
+    public int fieldInt53639;
+    public int fieldInt53640;
+    public int fieldInt53641;
+    public int fieldInt53642;
+    public int fieldInt53643;
+    public int fieldInt53644;
+    public int fieldInt53645;
+    public int fieldInt53646;
+    public int fieldInt53647;
+    public int fieldInt53648;
+    public int fieldInt53649;
+    public int fieldInt53650;
+    public int fieldInt53651;
+    public int fieldInt53652;
+    public int fieldInt53653;
+    public int fieldInt53654;
+    public int fieldInt53655;
+    public int fieldInt53656;
+    public int fieldInt53657;
+    public int fieldInt53658;
+    public int fieldInt53659;
+    public int fieldInt53660;
+    public int fieldInt53661;
+    public int fieldInt53662;
+    public int fieldInt53663;
+    public int fieldInt53664;
+    public int fieldInt53665;
+    public int fieldInt53666;
+    public int fieldInt53667;
+    public int fieldInt53668;
+    public int fieldInt53669;
+    public int fieldInt53670;
+    public int fieldInt53671;
+    public int fieldInt53672;
+    public int fieldInt53673;
+    public int fieldInt53674;
+    public int fieldInt53675;
+    public int fieldInt53676;
+    public int fieldInt53677;
+    public int fieldInt53678;
+    public int fieldInt53679;
+    public int fieldInt53680;
+    public int fieldInt53681;
+    public int fieldInt53682;
+    public int fieldInt53683;
+    public int fieldInt53684;
+    public int fieldInt53685;
+    public int fieldInt53686;
+    public int fieldInt53687;
+    public int fieldInt53688;
+    public int fieldInt53689;
+    public int fieldInt53690;
+    public int fieldInt53691;
+    public int fieldInt53692;
+    public int fieldInt53693;
+    public int fieldInt53694;
+    public int fieldInt53695;
+    public int fieldInt53696;
+    public int fieldInt53697;
+    public int fieldInt53698;
+    public int fieldInt53699;
+    public int fieldInt53700;
+    public int fieldInt53701;
+    public int fieldInt53702;
+    public int fieldInt53703;
+    public int fieldInt53704;
+    public int fieldInt53705;
+    public int fieldInt53706;
+    public int fieldInt53707;
+    public int fieldInt53708;
+    public int fieldInt53709;
+    public int fieldInt53710;
+    public int fieldInt53711;
+    public int fieldInt53712;
+    public int fieldInt53713;
+    public int fieldInt53714;
+    public int fieldInt53715;
+    public int fieldInt53716;
+    public int fieldInt53717;
+    public int fieldInt53718;
+    public int fieldInt53719;
+    public int fieldInt53720;
+    public int fieldInt53721;
+    public int fieldInt53722;
+    public int fieldInt53723;
+    public int fieldInt53724;
+    public int fieldInt53725;
+    public int fieldInt53726;
+    public int fieldInt53727;
+    public int fieldInt53728;
+    public int fieldInt53729;
+    public int fieldInt53730;
+    public int fieldInt53731;
+    public int fieldInt53732;
+    public int fieldInt53733;
+    public int fieldInt53734;
+    public int fieldInt53735;
+    public int fieldInt53736;
+    public int fieldInt53737;
+    public int fieldInt53738;
+    public int fieldInt53739;
+    public int fieldInt53740;
+    public int fieldInt53741;
+    public int fieldInt53742;
+    public int fieldInt53743;
+    public int fieldInt53744;
+    public int fieldInt53745;
+    public int fieldInt53746;
+    public int fieldInt53747;
+    public int fieldInt53748;
+    public int fieldInt53749;
+    public int fieldInt53750;
+    public int fieldInt53751;
+    public int fieldInt53752;
+    public int fieldInt53753;
+    public int fieldInt53754;
+    public int fieldInt53755;
+    public int fieldInt53756;
+    public int fieldInt53757;
+    public int fieldInt53758;
+    public int fieldInt53759;
+    public int fieldInt53760;
+    public int fieldInt53761;
+    public int fieldInt53762;
+    public int fieldInt53763;
+    public int fieldInt53764;
+    public int fieldInt53765;
+    public int fieldInt53766;
+    public int fieldInt53767;
+    public int fieldInt53768;
+    public int fieldInt53769;
+    public int fieldInt53770;
+    public int fieldInt53771;
+    public int fieldInt53772;
+    public int fieldInt53773;
+    public int fieldInt53774;
+    public int fieldInt53775;
+    public int fieldInt53776;
+    public int fieldInt53777;
+    public int fieldInt53778;
+    public int fieldInt53779;
+    public int fieldInt53780;
+    public int fieldInt53781;
+    public int fieldInt53782;
+    public int fieldInt53783;
+    public int fieldInt53784;
+    public int fieldInt53785;
+    public int fieldInt53786;
+    public int fieldInt53787;
+    public int fieldInt53788;
+    public int fieldInt53789;
+    public int fieldInt53790;
+    public int fieldInt53791;
+    public int fieldInt53792;
+    public int fieldInt53793;
+    public int fieldInt53794;
+    public int fieldInt53795;
+    public int fieldInt53796;
+    public int fieldInt53797;
+    public int fieldInt53798;
+    public int fieldInt53799;
+    public int fieldInt53800;
+    public int fieldInt53801;
+    public int fieldInt53802;
+    public int fieldInt53803;
+    public int fieldInt53804;
+    public int fieldInt53805;
+    public int fieldInt53806;
+    public int fieldInt53807;
+    public int fieldInt53808;
+    public int fieldInt53809;
+    public int fieldInt53810;
+    public int fieldInt53811;
+    public int fieldInt53812;
+    public int fieldInt53813;
+    public int fieldInt53814;
+    public int fieldInt53815;
+    public int fieldInt53816;
+    public int fieldInt53817;
+    public int fieldInt53818;
+    public int fieldInt53819;
+    public int fieldInt53820;
+    public int fieldInt53821;
+    public int fieldInt53822;
+    public int fieldInt53823;
+    public int fieldInt53824;
+    public int fieldInt53825;
+    public int fieldInt53826;
+    public int fieldInt53827;
+    public int fieldInt53828;
+    public int fieldInt53829;
+    public int fieldInt53830;
+    public int fieldInt53831;
+    public int fieldInt53832;
+    public int fieldInt53833;
+    public int fieldInt53834;
+    public int fieldInt53835;
+    public int fieldInt53836;
+    public int fieldInt53837;
+    public int fieldInt53838;
+    public int fieldInt53839;
+    public int fieldInt53840;
+    public int fieldInt53841;
+    public int fieldInt53842;
+    public int fieldInt53843;
+    public int fieldInt53844;
+    public int fieldInt53845;
+    public int fieldInt53846;
+    public int fieldInt53847;
+    public int fieldInt53848;
+    public int fieldInt53849;
+    public int fieldInt53850;
+    public int fieldInt53851;
+    public int fieldInt53852;
+    public int fieldInt53853;
+    public int fieldInt53854;
+    public int fieldInt53855;
+    public int fieldInt53856;
+    public int fieldInt53857;
+    public int fieldInt53858;
+    public int fieldInt53859;
+    public int fieldInt53860;
+    public int fieldInt53861;
+    public int fieldInt53862;
+    public int fieldInt53863;
+    public int fieldInt53864;
+    public int fieldInt53865;
+    public int fieldInt53866;
+    public int fieldInt53867;
+    public int fieldInt53868;
+    public int fieldInt53869;
+    public int fieldInt53870;
+    public int fieldInt53871;
+    public int fieldInt53872;
+    public int fieldInt53873;
+    public int fieldInt53874;
+    public int fieldInt53875;
+    public int fieldInt53876;
+    public int fieldInt53877;
+    public int fieldInt53878;
+    public int fieldInt53879;
+    public int fieldInt53880;
+    public int fieldInt53881;
+    public int fieldInt53882;
+    public int fieldInt53883;
+    public int fieldInt53884;
+    public int fieldInt53885;
+    public int fieldInt53886;
+    public int fieldInt53887;
+    public int fieldInt53888;
+    public int fieldInt53889;
+    public int fieldInt53890;
+    public int fieldInt53891;
+    public int fieldInt53892;
+    public int fieldInt53893;
+    public int fieldInt53894;
+    public int fieldInt53895;
+    public int fieldInt53896;
+    public int fieldInt53897;
+    public int fieldInt53898;
+    public int fieldInt53899;
+    public int fieldInt53900;
+    public int fieldInt53901;
+    public int fieldInt53902;
+    public int fieldInt53903;
+    public int fieldInt53904;
+    public int fieldInt53905;
+    public int fieldInt53906;
+    public int fieldInt53907;
+    public int fieldInt53908;
+    public int fieldInt53909;
+    public int fieldInt53910;
+    public int fieldInt53911;
+    public int fieldInt53912;
+    public int fieldInt53913;
+    public int fieldInt53914;
+    public int fieldInt53915;
+    public int fieldInt53916;
+    public int fieldInt53917;
+    public int fieldInt53918;
+    public int fieldInt53919;
+    public int fieldInt53920;
+    public int fieldInt53921;
+    public int fieldInt53922;
+    public int fieldInt53923;
+    public int fieldInt53924;
+    public int fieldInt53925;
+    public int fieldInt53926;
+    public int fieldInt53927;
+    public int fieldInt53928;
+    public int fieldInt53929;
+    public int fieldInt53930;
+    public int fieldInt53931;
+    public int fieldInt53932;
+    public int fieldInt53933;
+    public int fieldInt53934;
+    public int fieldInt53935;
+    public int fieldInt53936;
+    public int fieldInt53937;
+    public int fieldInt53938;
+    public int fieldInt53939;
+    public int fieldInt53940;
+    public int fieldInt53941;
+    public int fieldInt53942;
+    public int fieldInt53943;
+    public int fieldInt53944;
+    public int fieldInt53945;
+    public int fieldInt53946;
+    public int fieldInt53947;
+    public int fieldInt53948;
+    public int fieldInt53949;
+    public int fieldInt53950;
+    public int fieldInt53951;
+    public int fieldInt53952;
+    public int fieldInt53953;
+    public int fieldInt53954;
+    public int fieldInt53955;
+    public int fieldInt53956;
+    public int fieldInt53957;
+    public int fieldInt53958;
+    public int fieldInt53959;
+    public int fieldInt53960;
+    public int fieldInt53961;
+    public int fieldInt53962;
+    public int fieldInt53963;
+    public int fieldInt53964;
+    public int fieldInt53965;
+    public int fieldInt53966;
+    public int fieldInt53967;
+    public int fieldInt53968;
+    public int fieldInt53969;
+    public int fieldInt53970;
+    public int fieldInt53971;
+    public int fieldInt53972;
+    public int fieldInt53973;
+    public int fieldInt53974;
+    public int fieldInt53975;
+    public int fieldInt53976;
+    public int fieldInt53977;
+    public int fieldInt53978;
+    public int fieldInt53979;
+    public int fieldInt53980;
+    public int fieldInt53981;
+    public int fieldInt53982;
+    public int fieldInt53983;
+    public int fieldInt53984;
+    public int fieldInt53985;
+    public int fieldInt53986;
+    public int fieldInt53987;
+    public int fieldInt53988;
+    public int fieldInt53989;
+    public int fieldInt53990;
+    public int fieldInt53991;
+    public int fieldInt53992;
+    public int fieldInt53993;
+    public int fieldInt53994;
+    public int fieldInt53995;
+    public int fieldInt53996;
+    public int fieldInt53997;
+    public int fieldInt53998;
+    public int fieldInt53999;
+    public int fieldInt54000;
+    public int fieldInt54001;
+    public int fieldInt54002;
+    public int fieldInt54003;
+    public int fieldInt54004;
+    public int fieldInt54005;
+    public int fieldInt54006;
+    public int fieldInt54007;
+    public int fieldInt54008;
+    public int fieldInt54009;
+    public int fieldInt54010;
+    public int fieldInt54011;
+    public int fieldInt54012;
+    public int fieldInt54013;
+    public int fieldInt54014;
+    public int fieldInt54015;
+    public int fieldInt54016;
+    public int fieldInt54017;
+    public int fieldInt54018;
+    public int fieldInt54019;
+    public int fieldInt54020;
+    public int fieldInt54021;
+    public int fieldInt54022;
+    public int fieldInt54023;
+    public int fieldInt54024;
+    public int fieldInt54025;
+    public int fieldInt54026;
+    public int fieldInt54027;
+    public int fieldInt54028;
+    public int fieldInt54029;
+    public int fieldInt54030;
+    public int fieldInt54031;
+    public int fieldInt54032;
+    public int fieldInt54033;
+    public int fieldInt54034;
+    public int fieldInt54035;
+    public int fieldInt54036;
+    public int fieldInt54037;
+    public int fieldInt54038;
+    public int fieldInt54039;
+    public int fieldInt54040;
+    public int fieldInt54041;
+    public int fieldInt54042;
+    public int fieldInt54043;
+    public int fieldInt54044;
+    public int fieldInt54045;
+    public int fieldInt54046;
+    public int fieldInt54047;
+    public int fieldInt54048;
+    public int fieldInt54049;
+    public int fieldInt54050;
+    public int fieldInt54051;
+    public int fieldInt54052;
+    public int fieldInt54053;
+    public int fieldInt54054;
+    public int fieldInt54055;
+    public int fieldInt54056;
+    public int fieldInt54057;
+    public int fieldInt54058;
+    public int fieldInt54059;
+    public int fieldInt54060;
+    public int fieldInt54061;
+    public int fieldInt54062;
+    public int fieldInt54063;
+    public int fieldInt54064;
+    public int fieldInt54065;
+    public int fieldInt54066;
+    public int fieldInt54067;
+    public int fieldInt54068;
+    public int fieldInt54069;
+    public int fieldInt54070;
+    public int fieldInt54071;
+    public int fieldInt54072;
+    public int fieldInt54073;
+    public int fieldInt54074;
+    public int fieldInt54075;
+    public int fieldInt54076;
+    public int fieldInt54077;
+    public int fieldInt54078;
+    public int fieldInt54079;
+    public int fieldInt54080;
+    public int fieldInt54081;
+    public int fieldInt54082;
+    public int fieldInt54083;
+    public int fieldInt54084;
+    public int fieldInt54085;
+    public int fieldInt54086;
+    public int fieldInt54087;
+    public int fieldInt54088;
+    public int fieldInt54089;
+    public int fieldInt54090;
+    public int fieldInt54091;
+    public int fieldInt54092;
+    public int fieldInt54093;
+    public int fieldInt54094;
+    public int fieldInt54095;
+    public int fieldInt54096;
+    public int fieldInt54097;
+    public int fieldInt54098;
+    public int fieldInt54099;
+    public int fieldInt54100;
+    public int fieldInt54101;
+    public int fieldInt54102;
+    public int fieldInt54103;
+    public int fieldInt54104;
+    public int fieldInt54105;
+    public int fieldInt54106;
+    public int fieldInt54107;
+    public int fieldInt54108;
+    public int fieldInt54109;
+    public int fieldInt54110;
+    public int fieldInt54111;
+    public int fieldInt54112;
+    public int fieldInt54113;
+    public int fieldInt54114;
+    public int fieldInt54115;
+    public int fieldInt54116;
+    public int fieldInt54117;
+    public int fieldInt54118;
+    public int fieldInt54119;
+    public int fieldInt54120;
+    public int fieldInt54121;
+    public int fieldInt54122;
+    public int fieldInt54123;
+    public int fieldInt54124;
+    public int fieldInt54125;
+    public int fieldInt54126;
+    public int fieldInt54127;
+    public int fieldInt54128;
+    public int fieldInt54129;
+    public int fieldInt54130;
+    public int fieldInt54131;
+    public int fieldInt54132;
+    public int fieldInt54133;
+    public int fieldInt54134;
+    public int fieldInt54135;
+    public int fieldInt54136;
+    public int fieldInt54137;
+    public int fieldInt54138;
+    public int fieldInt54139;
+    public int fieldInt54140;
+    public int fieldInt54141;
+    public int fieldInt54142;
+    public int fieldInt54143;
+    public int fieldInt54144;
+    public int fieldInt54145;
+    public int fieldInt54146;
+    public int fieldInt54147;
+    public int fieldInt54148;
+    public int fieldInt54149;
+    public int fieldInt54150;
+    public int fieldInt54151;
+    public int fieldInt54152;
+    public int fieldInt54153;
+    public int fieldInt54154;
+    public int fieldInt54155;
+    public int fieldInt54156;
+    public int fieldInt54157;
+    public int fieldInt54158;
+    public int fieldInt54159;
+    public int fieldInt54160;
+    public int fieldInt54161;
+    public int fieldInt54162;
+    public int fieldInt54163;
+    public int fieldInt54164;
+    public int fieldInt54165;
+    public int fieldInt54166;
+    public int fieldInt54167;
+    public int fieldInt54168;
+    public int fieldInt54169;
+    public int fieldInt54170;
+    public int fieldInt54171;
+    public int fieldInt54172;
+    public int fieldInt54173;
+    public int fieldInt54174;
+    public int fieldInt54175;
+    public int fieldInt54176;
+    public int fieldInt54177;
+    public int fieldInt54178;
+    public int fieldInt54179;
+    public int fieldInt54180;
+    public int fieldInt54181;
+    public int fieldInt54182;
+    public int fieldInt54183;
+    public int fieldInt54184;
+    public int fieldInt54185;
+    public int fieldInt54186;
+    public int fieldInt54187;
+    public int fieldInt54188;
+    public int fieldInt54189;
+    public int fieldInt54190;
+    public int fieldInt54191;
+    public int fieldInt54192;
+    public int fieldInt54193;
+    public int fieldInt54194;
+    public int fieldInt54195;
+    public int fieldInt54196;
+    public int fieldInt54197;
+    public int fieldInt54198;
+    public int fieldInt54199;
+    public int fieldInt54200;
+    public int fieldInt54201;
+    public int fieldInt54202;
+    public int fieldInt54203;
+    public int fieldInt54204;
+    public int fieldInt54205;
+    public int fieldInt54206;
+    public int fieldInt54207;
+    public int fieldInt54208;
+    public int fieldInt54209;
+    public int fieldInt54210;
+    public int fieldInt54211;
+    public int fieldInt54212;
+    public int fieldInt54213;
+    public int fieldInt54214;
+    public int fieldInt54215;
+    public int fieldInt54216;
+    public int fieldInt54217;
+    public int fieldInt54218;
+    public int fieldInt54219;
+    public int fieldInt54220;
+    public int fieldInt54221;
+    public int fieldInt54222;
+    public int fieldInt54223;
+    public int fieldInt54224;
+    public int fieldInt54225;
+    public int fieldInt54226;
+    public int fieldInt54227;
+    public int fieldInt54228;
+    public int fieldInt54229;
+    public int fieldInt54230;
+    public int fieldInt54231;
+    public int fieldInt54232;
+    public int fieldInt54233;
+    public int fieldInt54234;
+    public int fieldInt54235;
+    public int fieldInt54236;
+    public int fieldInt54237;
+    public int fieldInt54238;
+    public int fieldInt54239;
+    public int fieldInt54240;
+    public int fieldInt54241;
+    public int fieldInt54242;
+    public int fieldInt54243;
+    public int fieldInt54244;
+    public int fieldInt54245;
+    public int fieldInt54246;
+    public int fieldInt54247;
+    public int fieldInt54248;
+    public int fieldInt54249;
+    public int fieldInt54250;
+    public int fieldInt54251;
+    public int fieldInt54252;
+    public int fieldInt54253;
+    public int fieldInt54254;
+    public int fieldInt54255;
+    public int fieldInt54256;
+    public int fieldInt54257;
+    public int fieldInt54258;
+    public int fieldInt54259;
+    public int fieldInt54260;
+    public int fieldInt54261;
+    public int fieldInt54262;
+    public int fieldInt54263;
+    public int fieldInt54264;
+    public int fieldInt54265;
+    public int fieldInt54266;
+    public int fieldInt54267;
+    public int fieldInt54268;
+    public int fieldInt54269;
+    public int fieldInt54270;
+    public int fieldInt54271;
+    public int fieldInt54272;
+    public int fieldInt54273;
+    public int fieldInt54274;
+    public int fieldInt54275;
+    public int fieldInt54276;
+    public int fieldInt54277;
+    public int fieldInt54278;
+    public int fieldInt54279;
+    public int fieldInt54280;
+    public int fieldInt54281;
+    public int fieldInt54282;
+    public int fieldInt54283;
+    public int fieldInt54284;
+    public int fieldInt54285;
+    public int fieldInt54286;
+    public int fieldInt54287;
+    public int fieldInt54288;
+    public int fieldInt54289;
+    public int fieldInt54290;
+    public int fieldInt54291;
+    public int fieldInt54292;
+    public int fieldInt54293;
+    public int fieldInt54294;
+    public int fieldInt54295;
+    public int fieldInt54296;
+    public int fieldInt54297;
+    public int fieldInt54298;
+    public int fieldInt54299;
+    public int fieldInt54300;
+    public int fieldInt54301;
+    public int fieldInt54302;
+    public int fieldInt54303;
+    public int fieldInt54304;
+    public int fieldInt54305;
+    public int fieldInt54306;
+    public int fieldInt54307;
+    public int fieldInt54308;
+    public int fieldInt54309;
+    public int fieldInt54310;
+    public int fieldInt54311;
+    public int fieldInt54312;
+    public int fieldInt54313;
+    public int fieldInt54314;
+    public int fieldInt54315;
+    public int fieldInt54316;
+    public int fieldInt54317;
+    public int fieldInt54318;
+    public int fieldInt54319;
+    public int fieldInt54320;
+    public int fieldInt54321;
+    public int fieldInt54322;
+    public int fieldInt54323;
+    public int fieldInt54324;
+    public int fieldInt54325;
+    public int fieldInt54326;
+    public int fieldInt54327;
+    public int fieldInt54328;
+    public int fieldInt54329;
+    public int fieldInt54330;
+    public int fieldInt54331;
+    public int fieldInt54332;
+    public int fieldInt54333;
+    public int fieldInt54334;
+    public int fieldInt54335;
+    public int fieldInt54336;
+    public int fieldInt54337;
+    public int fieldInt54338;
+    public int fieldInt54339;
+    public int fieldInt54340;
+    public int fieldInt54341;
+    public int fieldInt54342;
+    public int fieldInt54343;
+    public int fieldInt54344;
+    public int fieldInt54345;
+    public int fieldInt54346;
+    public int fieldInt54347;
+    public int fieldInt54348;
+    public int fieldInt54349;
+    public int fieldInt54350;
+    public int fieldInt54351;
+    public int fieldInt54352;
+    public int fieldInt54353;
+    public int fieldInt54354;
+    public int fieldInt54355;
+    public int fieldInt54356;
+    public int fieldInt54357;
+    public int fieldInt54358;
+    public int fieldInt54359;
+    public int fieldInt54360;
+    public int fieldInt54361;
+    public int fieldInt54362;
+    public int fieldInt54363;
+    public int fieldInt54364;
+    public int fieldInt54365;
+    public int fieldInt54366;
+    public int fieldInt54367;
+    public int fieldInt54368;
+    public int fieldInt54369;
+    public int fieldInt54370;
+    public int fieldInt54371;
+    public int fieldInt54372;
+    public int fieldInt54373;
+    public int fieldInt54374;
+    public int fieldInt54375;
+    public int fieldInt54376;
+    public int fieldInt54377;
+    public int fieldInt54378;
+    public int fieldInt54379;
+    public int fieldInt54380;
+    public int fieldInt54381;
+    public int fieldInt54382;
+    public int fieldInt54383;
+    public int fieldInt54384;
+    public int fieldInt54385;
+    public int fieldInt54386;
+    public int fieldInt54387;
+    public int fieldInt54388;
+    public int fieldInt54389;
+    public int fieldInt54390;
+    public int fieldInt54391;
+    public int fieldInt54392;
+    public int fieldInt54393;
+    public int fieldInt54394;
+    public int fieldInt54395;
+    public int fieldInt54396;
+    public int fieldInt54397;
+    public int fieldInt54398;
+    public int fieldInt54399;
+    public int fieldInt54400;
+    public int fieldInt54401;
+    public int fieldInt54402;
+    public int fieldInt54403;
+    public int fieldInt54404;
+    public int fieldInt54405;
+    public int fieldInt54406;
+    public int fieldInt54407;
+    public int fieldInt54408;
+    public int fieldInt54409;
+    public int fieldInt54410;
+    public int fieldInt54411;
+    public int fieldInt54412;
+    public int fieldInt54413;
+    public int fieldInt54414;
+    public int fieldInt54415;
+    public int fieldInt54416;
+    public int fieldInt54417;
+    public int fieldInt54418;
+    public int fieldInt54419;
+    public int fieldInt54420;
+    public int fieldInt54421;
+    public int fieldInt54422;
+    public int fieldInt54423;
+    public int fieldInt54424;
+    public int fieldInt54425;
+    public int fieldInt54426;
+    public int fieldInt54427;
+    public int fieldInt54428;
+    public int fieldInt54429;
+    public int fieldInt54430;
+    public int fieldInt54431;
+    public int fieldInt54432;
+    public int fieldInt54433;
+    public int fieldInt54434;
+    public int fieldInt54435;
+    public int fieldInt54436;
+    public int fieldInt54437;
+    public int fieldInt54438;
+    public int fieldInt54439;
+    public int fieldInt54440;
+    public int fieldInt54441;
+    public int fieldInt54442;
+    public int fieldInt54443;
+    public int fieldInt54444;
+    public int fieldInt54445;
+    public int fieldInt54446;
+    public int fieldInt54447;
+    public int fieldInt54448;
+    public int fieldInt54449;
+    public int fieldInt54450;
+    public int fieldInt54451;
+    public int fieldInt54452;
+    public int fieldInt54453;
+    public int fieldInt54454;
+    public int fieldInt54455;
+    public int fieldInt54456;
+    public int fieldInt54457;
+    public int fieldInt54458;
+    public int fieldInt54459;
+    public int fieldInt54460;
+    public int fieldInt54461;
+    public int fieldInt54462;
+    public int fieldInt54463;
+    public int fieldInt54464;
+    public int fieldInt54465;
+    public int fieldInt54466;
+    public int fieldInt54467;
+    public int fieldInt54468;
+    public int fieldInt54469;
+    public int fieldInt54470;
+    public int fieldInt54471;
+    public int fieldInt54472;
+    public int fieldInt54473;
+    public int fieldInt54474;
+    public int fieldInt54475;
+    public int fieldInt54476;
+    public int fieldInt54477;
+    public int fieldInt54478;
+    public int fieldInt54479;
+    public int fieldInt54480;
+    public int fieldInt54481;
+    public int fieldInt54482;
+    public int fieldInt54483;
+    public int fieldInt54484;
+    public int fieldInt54485;
+    public int fieldInt54486;
+    public int fieldInt54487;
+    public int fieldInt54488;
+    public int fieldInt54489;
+    public int fieldInt54490;
+    public int fieldInt54491;
+    public int fieldInt54492;
+    public int fieldInt54493;
+    public int fieldInt54494;
+    public int fieldInt54495;
+    public int fieldInt54496;
+    public int fieldInt54497;
+    public int fieldInt54498;
+    public int fieldInt54499;
+    public int fieldInt54500;
+    public int fieldInt54501;
+    public int fieldInt54502;
+    public int fieldInt54503;
+    public int fieldInt54504;
+    public int fieldInt54505;
+    public int fieldInt54506;
+    public int fieldInt54507;
+    public int fieldInt54508;
+    public int fieldInt54509;
+    public int fieldInt54510;
+    public int fieldInt54511;
+    public int fieldInt54512;
+    public int fieldInt54513;
+    public int fieldInt54514;
+    public int fieldInt54515;
+    public int fieldInt54516;
+    public int fieldInt54517;
+    public int fieldInt54518;
+    public int fieldInt54519;
+    public int fieldInt54520;
+    public int fieldInt54521;
+    public int fieldInt54522;
+    public int fieldInt54523;
+    public int fieldInt54524;
+    public int fieldInt54525;
+    public int fieldInt54526;
+    public int fieldInt54527;
+    public int fieldInt54528;
+    public int fieldInt54529;
+    public int fieldInt54530;
+    public int fieldInt54531;
+    public int fieldInt54532;
+    public int fieldInt54533;
+    public int fieldInt54534;
+    public int fieldInt54535;
+    public int fieldInt54536;
+    public int fieldInt54537;
+    public int fieldInt54538;
+    public int fieldInt54539;
+    public int fieldInt54540;
+    public int fieldInt54541;
+    public int fieldInt54542;
+    public int fieldInt54543;
+    public int fieldInt54544;
+    public int fieldInt54545;
+    public int fieldInt54546;
+    public int fieldInt54547;
+    public int fieldInt54548;
+    public int fieldInt54549;
+    public int fieldInt54550;
+    public int fieldInt54551;
+    public int fieldInt54552;
+    public int fieldInt54553;
+    public int fieldInt54554;
+    public int fieldInt54555;
+    public int fieldInt54556;
+    public int fieldInt54557;
+    public int fieldInt54558;
+    public int fieldInt54559;
+    public int fieldInt54560;
+    public int fieldInt54561;
+    public int fieldInt54562;
+    public int fieldInt54563;
+    public int fieldInt54564;
+    public int fieldInt54565;
+    public int fieldInt54566;
+    public int fieldInt54567;
+    public int fieldInt54568;
+    public int fieldInt54569;
+    public int fieldInt54570;
+    public int fieldInt54571;
+    public int fieldInt54572;
+    public int fieldInt54573;
+    public int fieldInt54574;
+    public int fieldInt54575;
+    public int fieldInt54576;
+    public int fieldInt54577;
+    public int fieldInt54578;
+    public int fieldInt54579;
+    public int fieldInt54580;
+    public int fieldInt54581;
+    public int fieldInt54582;
+    public int fieldInt54583;
+    public int fieldInt54584;
+    public int fieldInt54585;
+    public int fieldInt54586;
+    public int fieldInt54587;
+    public int fieldInt54588;
+    public int fieldInt54589;
+    public int fieldInt54590;
+    public int fieldInt54591;
+    public int fieldInt54592;
+    public int fieldInt54593;
+    public int fieldInt54594;
+    public int fieldInt54595;
+    public int fieldInt54596;
+    public int fieldInt54597;
+    public int fieldInt54598;
+    public int fieldInt54599;
+    public int fieldInt54600;
+    public int fieldInt54601;
+    public int fieldInt54602;
+    public int fieldInt54603;
+    public int fieldInt54604;
+    public int fieldInt54605;
+    public int fieldInt54606;
+    public int fieldInt54607;
+    public int fieldInt54608;
+    public int fieldInt54609;
+    public int fieldInt54610;
+    public int fieldInt54611;
+    public int fieldInt54612;
+    public int fieldInt54613;
+    public int fieldInt54614;
+    public int fieldInt54615;
+    public int fieldInt54616;
+    public int fieldInt54617;
+    public int fieldInt54618;
+    public int fieldInt54619;
+    public int fieldInt54620;
+    public int fieldInt54621;
+    public int fieldInt54622;
+    public int fieldInt54623;
+    public int fieldInt54624;
+    public int fieldInt54625;
+    public int fieldInt54626;
+    public int fieldInt54627;
+    public int fieldInt54628;
+    public int fieldInt54629;
+    public int fieldInt54630;
+    public int fieldInt54631;
+    public int fieldInt54632;
+    public int fieldInt54633;
+    public int fieldInt54634;
+    public int fieldInt54635;
+    public int fieldInt54636;
+    public int fieldInt54637;
+    public int fieldInt54638;
+    public int fieldInt54639;
+    public int fieldInt54640;
+    public int fieldInt54641;
+    public int fieldInt54642;
+    public int fieldInt54643;
+    public int fieldInt54644;
+    public int fieldInt54645;
+    public int fieldInt54646;
+    public int fieldInt54647;
+    public int fieldInt54648;
+    public int fieldInt54649;
+    public int fieldInt54650;
+    public int fieldInt54651;
+    public int fieldInt54652;
+    public int fieldInt54653;
+    public int fieldInt54654;
+    public int fieldInt54655;
+    public int fieldInt54656;
+    public int fieldInt54657;
+    public int fieldInt54658;
+    public int fieldInt54659;
+    public int fieldInt54660;
+    public int fieldInt54661;
+    public int fieldInt54662;
+    public int fieldInt54663;
+    public int fieldInt54664;
+    public int fieldInt54665;
+    public int fieldInt54666;
+    public int fieldInt54667;
+    public int fieldInt54668;
+    public int fieldInt54669;
+    public int fieldInt54670;
+    public int fieldInt54671;
+    public int fieldInt54672;
+    public int fieldInt54673;
+    public int fieldInt54674;
+    public int fieldInt54675;
+    public int fieldInt54676;
+    public int fieldInt54677;
+    public int fieldInt54678;
+    public int fieldInt54679;
+    public int fieldInt54680;
+    public int fieldInt54681;
+    public int fieldInt54682;
+    public int fieldInt54683;
+    public int fieldInt54684;
+    public int fieldInt54685;
+    public int fieldInt54686;
+    public int fieldInt54687;
+    public int fieldInt54688;
+    public int fieldInt54689;
+    public int fieldInt54690;
+    public int fieldInt54691;
+    public int fieldInt54692;
+    public int fieldInt54693;
+    public int fieldInt54694;
+    public int fieldInt54695;
+    public int fieldInt54696;
+    public int fieldInt54697;
+    public int fieldInt54698;
+    public int fieldInt54699;
+    public int fieldInt54700;
+    public int fieldInt54701;
+    public int fieldInt54702;
+    public int fieldInt54703;
+    public int fieldInt54704;
+    public int fieldInt54705;
+    public int fieldInt54706;
+    public int fieldInt54707;
+    public int fieldInt54708;
+    public int fieldInt54709;
+    public int fieldInt54710;
+    public int fieldInt54711;
+    public int fieldInt54712;
+    public int fieldInt54713;
+    public int fieldInt54714;
+    public int fieldInt54715;
+    public int fieldInt54716;
+    public int fieldInt54717;
+    public int fieldInt54718;
+    public int fieldInt54719;
+    public int fieldInt54720;
+    public int fieldInt54721;
+    public int fieldInt54722;
+    public int fieldInt54723;
+    public int fieldInt54724;
+    public int fieldInt54725;
+    public int fieldInt54726;
+    public int fieldInt54727;
+    public int fieldInt54728;
+    public int fieldInt54729;
+    public int fieldInt54730;
+    public int fieldInt54731;
+    public int fieldInt54732;
+    public int fieldInt54733;
+    public int fieldInt54734;
+    public int fieldInt54735;
+    public int fieldInt54736;
+    public int fieldInt54737;
+    public int fieldInt54738;
+    public int fieldInt54739;
+    public int fieldInt54740;
+    public int fieldInt54741;
+    public int fieldInt54742;
+    public int fieldInt54743;
+    public int fieldInt54744;
+    public int fieldInt54745;
+    public int fieldInt54746;
+    public int fieldInt54747;
+    public int fieldInt54748;
+    public int fieldInt54749;
+    public int fieldInt54750;
+    public int fieldInt54751;
+    public int fieldInt54752;
+    public int fieldInt54753;
+    public int fieldInt54754;
+    public int fieldInt54755;
+    public int fieldInt54756;
+    public int fieldInt54757;
+    public int fieldInt54758;
+    public int fieldInt54759;
+    public int fieldInt54760;
+    public int fieldInt54761;
+    public int fieldInt54762;
+    public int fieldInt54763;
+    public int fieldInt54764;
+    public int fieldInt54765;
+    public int fieldInt54766;
+    public int fieldInt54767;
+    public int fieldInt54768;
+    public int fieldInt54769;
+    public int fieldInt54770;
+    public int fieldInt54771;
+    public int fieldInt54772;
+    public int fieldInt54773;
+    public int fieldInt54774;
+    public int fieldInt54775;
+    public int fieldInt54776;
+    public int fieldInt54777;
+    public int fieldInt54778;
+    public int fieldInt54779;
+    public int fieldInt54780;
+    public int fieldInt54781;
+    public int fieldInt54782;
+    public int fieldInt54783;
+    public int fieldInt54784;
+    public int fieldInt54785;
+    public int fieldInt54786;
+    public int fieldInt54787;
+    public int fieldInt54788;
+    public int fieldInt54789;
+    public int fieldInt54790;
+    public int fieldInt54791;
+    public int fieldInt54792;
+    public int fieldInt54793;
+    public int fieldInt54794;
+    public int fieldInt54795;
+    public int fieldInt54796;
+    public int fieldInt54797;
+    public int fieldInt54798;
+    public int fieldInt54799;
+    public int fieldInt54800;
+    public int fieldInt54801;
+    public int fieldInt54802;
+    public int fieldInt54803;
+    public int fieldInt54804;
+    public int fieldInt54805;
+    public int fieldInt54806;
+    public int fieldInt54807;
+    public int fieldInt54808;
+    public int fieldInt54809;
+    public int fieldInt54810;
+    public int fieldInt54811;
+    public int fieldInt54812;
+    public int fieldInt54813;
+    public int fieldInt54814;
+    public int fieldInt54815;
+    public int fieldInt54816;
+    public int fieldInt54817;
+    public int fieldInt54818;
+    public int fieldInt54819;
+    public int fieldInt54820;
+    public int fieldInt54821;
+    public int fieldInt54822;
+    public int fieldInt54823;
+    public int fieldInt54824;
+    public int fieldInt54825;
+    public int fieldInt54826;
+    public int fieldInt54827;
+    public int fieldInt54828;
+    public int fieldInt54829;
+    public int fieldInt54830;
+    public int fieldInt54831;
+    public int fieldInt54832;
+    public int fieldInt54833;
+    public int fieldInt54834;
+    public int fieldInt54835;
+    public int fieldInt54836;
+    public int fieldInt54837;
+    public int fieldInt54838;
+    public int fieldInt54839;
+    public int fieldInt54840;
+    public int fieldInt54841;
+    public int fieldInt54842;
+    public int fieldInt54843;
+    public int fieldInt54844;
+    public int fieldInt54845;
+    public int fieldInt54846;
+    public int fieldInt54847;
+    public int fieldInt54848;
+    public int fieldInt54849;
+    public int fieldInt54850;
+    public int fieldInt54851;
+    public int fieldInt54852;
+    public int fieldInt54853;
+    public int fieldInt54854;
+    public int fieldInt54855;
+    public int fieldInt54856;
+    public int fieldInt54857;
+    public int fieldInt54858;
+    public int fieldInt54859;
+    public int fieldInt54860;
+    public int fieldInt54861;
+    public int fieldInt54862;
+    public int fieldInt54863;
+    public int fieldInt54864;
+    public int fieldInt54865;
+    public int fieldInt54866;
+    public int fieldInt54867;
+    public int fieldInt54868;
+    public int fieldInt54869;
+    public int fieldInt54870;
+    public int fieldInt54871;
+    public int fieldInt54872;
+    public int fieldInt54873;
+    public int fieldInt54874;
+    public int fieldInt54875;
+    public int fieldInt54876;
+    public int fieldInt54877;
+    public int fieldInt54878;
+    public int fieldInt54879;
+    public int fieldInt54880;
+    public int fieldInt54881;
+    public int fieldInt54882;
+    public int fieldInt54883;
+    public int fieldInt54884;
+    public int fieldInt54885;
+    public int fieldInt54886;
+    public int fieldInt54887;
+    public int fieldInt54888;
+    public int fieldInt54889;
+    public int fieldInt54890;
+    public int fieldInt54891;
+    public int fieldInt54892;
+    public int fieldInt54893;
+    public int fieldInt54894;
+    public int fieldInt54895;
+    public int fieldInt54896;
+    public int fieldInt54897;
+    public int fieldInt54898;
+    public int fieldInt54899;
+    public int fieldInt54900;
+    public int fieldInt54901;
+    public int fieldInt54902;
+    public int fieldInt54903;
+    public int fieldInt54904;
+    public int fieldInt54905;
+    public int fieldInt54906;
+    public int fieldInt54907;
+    public int fieldInt54908;
+    public int fieldInt54909;
+    public int fieldInt54910;
+    public int fieldInt54911;
+    public int fieldInt54912;
+    public int fieldInt54913;
+    public int fieldInt54914;
+    public int fieldInt54915;
+    public int fieldInt54916;
+    public int fieldInt54917;
+    public int fieldInt54918;
+    public int fieldInt54919;
+    public int fieldInt54920;
+    public int fieldInt54921;
+    public int fieldInt54922;
+    public int fieldInt54923;
+    public int fieldInt54924;
+    public int fieldInt54925;
+    public int fieldInt54926;
+    public int fieldInt54927;
+    public int fieldInt54928;
+    public int fieldInt54929;
+    public int fieldInt54930;
+    public int fieldInt54931;
+    public int fieldInt54932;
+    public int fieldInt54933;
+    public int fieldInt54934;
+    public int fieldInt54935;
+    public int fieldInt54936;
+    public int fieldInt54937;
+    public int fieldInt54938;
+    public int fieldInt54939;
+    public int fieldInt54940;
+    public int fieldInt54941;
+    public int fieldInt54942;
+    public int fieldInt54943;
+    public int fieldInt54944;
+    public int fieldInt54945;
+    public int fieldInt54946;
+    public int fieldInt54947;
+    public int fieldInt54948;
+    public int fieldInt54949;
+    public int fieldInt54950;
+    public int fieldInt54951;
+    public int fieldInt54952;
+    public int fieldInt54953;
+    public int fieldInt54954;
+    public int fieldInt54955;
+    public int fieldInt54956;
+    public int fieldInt54957;
+    public int fieldInt54958;
+    public int fieldInt54959;
+    public int fieldInt54960;
+    public int fieldInt54961;
+    public int fieldInt54962;
+    public int fieldInt54963;
+    public int fieldInt54964;
+    public int fieldInt54965;
+    public int fieldInt54966;
+    public int fieldInt54967;
+    public int fieldInt54968;
+    public int fieldInt54969;
+    public int fieldInt54970;
+    public int fieldInt54971;
+    public int fieldInt54972;
+    public int fieldInt54973;
+    public int fieldInt54974;
+    public int fieldInt54975;
+    public int fieldInt54976;
+    public int fieldInt54977;
+    public int fieldInt54978;
+    public int fieldInt54979;
+    public int fieldInt54980;
+    public int fieldInt54981;
+    public int fieldInt54982;
+    public int fieldInt54983;
+    public int fieldInt54984;
+    public int fieldInt54985;
+    public int fieldInt54986;
+    public int fieldInt54987;
+    public int fieldInt54988;
+    public int fieldInt54989;
+    public int fieldInt54990;
+    public int fieldInt54991;
+    public int fieldInt54992;
+    public int fieldInt54993;
+    public int fieldInt54994;
+    public int fieldInt54995;
+    public int fieldInt54996;
+    public int fieldInt54997;
+    public int fieldInt54998;
+    public int fieldInt54999;
+    public int fieldInt55000;
+    public int fieldInt55001;
+    public int fieldInt55002;
+    public int fieldInt55003;
+    public int fieldInt55004;
+    public int fieldInt55005;
+    public int fieldInt55006;
+    public int fieldInt55007;
+    public int fieldInt55008;
+    public int fieldInt55009;
+    public int fieldInt55010;
+    public int fieldInt55011;
+    public int fieldInt55012;
+    public int fieldInt55013;
+    public int fieldInt55014;
+    public int fieldInt55015;
+    public int fieldInt55016;
+    public int fieldInt55017;
+    public int fieldInt55018;
+    public int fieldInt55019;
+    public int fieldInt55020;
+    public int fieldInt55021;
+    public int fieldInt55022;
+    public int fieldInt55023;
+    public int fieldInt55024;
+    public int fieldInt55025;
+    public int fieldInt55026;
+    public int fieldInt55027;
+    public int fieldInt55028;
+    public int fieldInt55029;
+    public int fieldInt55030;
+    public int fieldInt55031;
+    public int fieldInt55032;
+    public int fieldInt55033;
+    public int fieldInt55034;
+    public int fieldInt55035;
+    public int fieldInt55036;
+    public int fieldInt55037;
+    public int fieldInt55038;
+    public int fieldInt55039;
+    public int fieldInt55040;
+    public int fieldInt55041;
+    public int fieldInt55042;
+    public int fieldInt55043;
+    public int fieldInt55044;
+    public int fieldInt55045;
+    public int fieldInt55046;
+    public int fieldInt55047;
+    public int fieldInt55048;
+    public int fieldInt55049;
+    public int fieldInt55050;
+    public int fieldInt55051;
+    public int fieldInt55052;
+    public int fieldInt55053;
+    public int fieldInt55054;
+    public int fieldInt55055;
+    public int fieldInt55056;
+    public int fieldInt55057;
+    public int fieldInt55058;
+    public int fieldInt55059;
+    public int fieldInt55060;
+    public int fieldInt55061;
+    public int fieldInt55062;
+    public int fieldInt55063;
+    public int fieldInt55064;
+    public int fieldInt55065;
+    public int fieldInt55066;
+    public int fieldInt55067;
+    public int fieldInt55068;
+    public int fieldInt55069;
+    public int fieldInt55070;
+    public int fieldInt55071;
+    public int fieldInt55072;
+    public int fieldInt55073;
+    public int fieldInt55074;
+    public int fieldInt55075;
+    public int fieldInt55076;
+    public int fieldInt55077;
+    public int fieldInt55078;
+    public int fieldInt55079;
+    public int fieldInt55080;
+    public int fieldInt55081;
+    public int fieldInt55082;
+    public int fieldInt55083;
+    public int fieldInt55084;
+    public int fieldInt55085;
+    public int fieldInt55086;
+    public int fieldInt55087;
+    public int fieldInt55088;
+    public int fieldInt55089;
+    public int fieldInt55090;
+    public int fieldInt55091;
+    public int fieldInt55092;
+    public int fieldInt55093;
+    public int fieldInt55094;
+    public int fieldInt55095;
+    public int fieldInt55096;
+    public int fieldInt55097;
+    public int fieldInt55098;
+    public int fieldInt55099;
+    public int fieldInt55100;
+    public int fieldInt55101;
+    public int fieldInt55102;
+    public int fieldInt55103;
+    public int fieldInt55104;
+    public int fieldInt55105;
+    public int fieldInt55106;
+    public int fieldInt55107;
+    public int fieldInt55108;
+    public int fieldInt55109;
+    public int fieldInt55110;
+    public int fieldInt55111;
+    public int fieldInt55112;
+    public int fieldInt55113;
+    public int fieldInt55114;
+    public int fieldInt55115;
+    public int fieldInt55116;
+    public int fieldInt55117;
+    public int fieldInt55118;
+    public int fieldInt55119;
+    public int fieldInt55120;
+    public int fieldInt55121;
+    public int fieldInt55122;
+    public int fieldInt55123;
+    public int fieldInt55124;
+    public int fieldInt55125;
+    public int fieldInt55126;
+    public int fieldInt55127;
+    public int fieldInt55128;
+    public int fieldInt55129;
+    public int fieldInt55130;
+    public int fieldInt55131;
+    public int fieldInt55132;
+    public int fieldInt55133;
+    public int fieldInt55134;
+    public int fieldInt55135;
+    public int fieldInt55136;
+    public int fieldInt55137;
+    public int fieldInt55138;
+    public int fieldInt55139;
+    public int fieldInt55140;
+    public int fieldInt55141;
+    public int fieldInt55142;
+    public int fieldInt55143;
+    public int fieldInt55144;
+    public int fieldInt55145;
+    public int fieldInt55146;
+    public int fieldInt55147;
+    public int fieldInt55148;
+    public int fieldInt55149;
+    public int fieldInt55150;
+    public int fieldInt55151;
+    public int fieldInt55152;
+    public int fieldInt55153;
+    public int fieldInt55154;
+    public int fieldInt55155;
+    public int fieldInt55156;
+    public int fieldInt55157;
+    public int fieldInt55158;
+    public int fieldInt55159;
+    public int fieldInt55160;
+    public int fieldInt55161;
+    public int fieldInt55162;
+    public int fieldInt55163;
+    public int fieldInt55164;
+    public int fieldInt55165;
+    public int fieldInt55166;
+    public int fieldInt55167;
+    public int fieldInt55168;
+    public int fieldInt55169;
+    public int fieldInt55170;
+    public int fieldInt55171;
+    public int fieldInt55172;
+    public int fieldInt55173;
+    public int fieldInt55174;
+    public int fieldInt55175;
+    public int fieldInt55176;
+    public int fieldInt55177;
+    public int fieldInt55178;
+    public int fieldInt55179;
+    public int fieldInt55180;
+    public int fieldInt55181;
+    public int fieldInt55182;
+    public int fieldInt55183;
+    public int fieldInt55184;
+    public int fieldInt55185;
+    public int fieldInt55186;
+    public int fieldInt55187;
+    public int fieldInt55188;
+    public int fieldInt55189;
+    public int fieldInt55190;
+    public int fieldInt55191;
+    public int fieldInt55192;
+    public int fieldInt55193;
+    public int fieldInt55194;
+    public int fieldInt55195;
+    public int fieldInt55196;
+    public int fieldInt55197;
+    public int fieldInt55198;
+    public int fieldInt55199;
+    public int fieldInt55200;
+    public int fieldInt55201;
+    public int fieldInt55202;
+    public int fieldInt55203;
+    public int fieldInt55204;
+    public int fieldInt55205;
+    public int fieldInt55206;
+    public int fieldInt55207;
+    public int fieldInt55208;
+    public int fieldInt55209;
+    public int fieldInt55210;
+    public int fieldInt55211;
+    public int fieldInt55212;
+    public int fieldInt55213;
+    public int fieldInt55214;
+    public int fieldInt55215;
+    public int fieldInt55216;
+    public int fieldInt55217;
+    public int fieldInt55218;
+    public int fieldInt55219;
+    public int fieldInt55220;
+    public int fieldInt55221;
+    public int fieldInt55222;
+    public int fieldInt55223;
+    public int fieldInt55224;
+    public int fieldInt55225;
+    public int fieldInt55226;
+    public int fieldInt55227;
+    public int fieldInt55228;
+    public int fieldInt55229;
+    public int fieldInt55230;
+    public int fieldInt55231;
+    public int fieldInt55232;
+    public int fieldInt55233;
+    public int fieldInt55234;
+    public int fieldInt55235;
+    public int fieldInt55236;
+    public int fieldInt55237;
+    public int fieldInt55238;
+    public int fieldInt55239;
+    public int fieldInt55240;
+    public int fieldInt55241;
+    public int fieldInt55242;
+    public int fieldInt55243;
+    public int fieldInt55244;
+    public int fieldInt55245;
+    public int fieldInt55246;
+    public int fieldInt55247;
+    public int fieldInt55248;
+    public int fieldInt55249;
+    public int fieldInt55250;
+    public int fieldInt55251;
+    public int fieldInt55252;
+    public int fieldInt55253;
+    public int fieldInt55254;
+    public int fieldInt55255;
+    public int fieldInt55256;
+    public int fieldInt55257;
+    public int fieldInt55258;
+    public int fieldInt55259;
+    public int fieldInt55260;
+    public int fieldInt55261;
+    public int fieldInt55262;
+    public int fieldInt55263;
+    public int fieldInt55264;
+    public int fieldInt55265;
+    public int fieldInt55266;
+    public int fieldInt55267;
+    public int fieldInt55268;
+    public int fieldInt55269;
+    public int fieldInt55270;
+    public int fieldInt55271;
+    public int fieldInt55272;
+    public int fieldInt55273;
+    public int fieldInt55274;
+    public int fieldInt55275;
+    public int fieldInt55276;
+    public int fieldInt55277;
+    public int fieldInt55278;
+    public int fieldInt55279;
+    public int fieldInt55280;
+    public int fieldInt55281;
+    public int fieldInt55282;
+    public int fieldInt55283;
+    public int fieldInt55284;
+    public int fieldInt55285;
+    public int fieldInt55286;
+    public int fieldInt55287;
+    public int fieldInt55288;
+    public int fieldInt55289;
+    public int fieldInt55290;
+    public int fieldInt55291;
+    public int fieldInt55292;
+    public int fieldInt55293;
+    public int fieldInt55294;
+    public int fieldInt55295;
+    public int fieldInt55296;
+    public int fieldInt55297;
+    public int fieldInt55298;
+    public int fieldInt55299;
+    public int fieldInt55300;
+    public int fieldInt55301;
+    public int fieldInt55302;
+    public int fieldInt55303;
+    public int fieldInt55304;
+    public int fieldInt55305;
+    public int fieldInt55306;
+    public int fieldInt55307;
+    public int fieldInt55308;
+    public int fieldInt55309;
+    public int fieldInt55310;
+    public int fieldInt55311;
+    public int fieldInt55312;
+    public int fieldInt55313;
+    public int fieldInt55314;
+    public int fieldInt55315;
+    public int fieldInt55316;
+    public int fieldInt55317;
+    public int fieldInt55318;
+    public int fieldInt55319;
+    public int fieldInt55320;
+    public int fieldInt55321;
+    public int fieldInt55322;
+    public int fieldInt55323;
+    public int fieldInt55324;
+    public int fieldInt55325;
+    public int fieldInt55326;
+    public int fieldInt55327;
+    public int fieldInt55328;
+    public int fieldInt55329;
+    public int fieldInt55330;
+    public int fieldInt55331;
+    public int fieldInt55332;
+    public int fieldInt55333;
+    public int fieldInt55334;
+    public int fieldInt55335;
+    public int fieldInt55336;
+    public int fieldInt55337;
+    public int fieldInt55338;
+    public int fieldInt55339;
+    public int fieldInt55340;
+    public int fieldInt55341;
+    public int fieldInt55342;
+    public int fieldInt55343;
+    public int fieldInt55344;
+    public int fieldInt55345;
+    public int fieldInt55346;
+    public int fieldInt55347;
+    public int fieldInt55348;
+    public int fieldInt55349;
+    public int fieldInt55350;
+    public int fieldInt55351;
+    public int fieldInt55352;
+    public int fieldInt55353;
+    public int fieldInt55354;
+    public int fieldInt55355;
+    public int fieldInt55356;
+    public int fieldInt55357;
+    public int fieldInt55358;
+    public int fieldInt55359;
+    public int fieldInt55360;
+    public int fieldInt55361;
+    public int fieldInt55362;
+    public int fieldInt55363;
+    public int fieldInt55364;
+    public int fieldInt55365;
+    public int fieldInt55366;
+    public int fieldInt55367;
+    public int fieldInt55368;
+    public int fieldInt55369;
+    public int fieldInt55370;
+    public int fieldInt55371;
+    public int fieldInt55372;
+    public int fieldInt55373;
+    public int fieldInt55374;
+    public int fieldInt55375;
+    public int fieldInt55376;
+    public int fieldInt55377;
+    public int fieldInt55378;
+    public int fieldInt55379;
+    public int fieldInt55380;
+    public int fieldInt55381;
+    public int fieldInt55382;
+    public int fieldInt55383;
+    public int fieldInt55384;
+    public int fieldInt55385;
+    public int fieldInt55386;
+    public int fieldInt55387;
+    public int fieldInt55388;
+    public int fieldInt55389;
+    public int fieldInt55390;
+    public int fieldInt55391;
+    public int fieldInt55392;
+    public int fieldInt55393;
+    public int fieldInt55394;
+    public int fieldInt55395;
+    public int fieldInt55396;
+    public int fieldInt55397;
+    public int fieldInt55398;
+    public int fieldInt55399;
+    public int fieldInt55400;
+    public int fieldInt55401;
+    public int fieldInt55402;
+    public int fieldInt55403;
+    public int fieldInt55404;
+    public int fieldInt55405;
+    public int fieldInt55406;
+    public int fieldInt55407;
+    public int fieldInt55408;
+    public int fieldInt55409;
+    public int fieldInt55410;
+    public int fieldInt55411;
+    public int fieldInt55412;
+    public int fieldInt55413;
+    public int fieldInt55414;
+    public int fieldInt55415;
+    public int fieldInt55416;
+    public int fieldInt55417;
+    public int fieldInt55418;
+    public int fieldInt55419;
+    public int fieldInt55420;
+    public int fieldInt55421;
+    public int fieldInt55422;
+    public int fieldInt55423;
+    public int fieldInt55424;
+    public int fieldInt55425;
+    public int fieldInt55426;
+    public int fieldInt55427;
+    public int fieldInt55428;
+    public int fieldInt55429;
+    public int fieldInt55430;
+    public int fieldInt55431;
+    public int fieldInt55432;
+    public int fieldInt55433;
+    public int fieldInt55434;
+    public int fieldInt55435;
+    public int fieldInt55436;
+    public int fieldInt55437;
+    public int fieldInt55438;
+    public int fieldInt55439;
+    public int fieldInt55440;
+    public int fieldInt55441;
+    public int fieldInt55442;
+    public int fieldInt55443;
+    public int fieldInt55444;
+    public int fieldInt55445;
+    public int fieldInt55446;
+    public int fieldInt55447;
+    public int fieldInt55448;
+    public int fieldInt55449;
+    public int fieldInt55450;
+    public int fieldInt55451;
+    public int fieldInt55452;
+    public int fieldInt55453;
+    public int fieldInt55454;
+    public int fieldInt55455;
+    public int fieldInt55456;
+    public int fieldInt55457;
+    public int fieldInt55458;
+    public int fieldInt55459;
+    public int fieldInt55460;
+    public int fieldInt55461;
+    public int fieldInt55462;
+    public int fieldInt55463;
+    public int fieldInt55464;
+    public int fieldInt55465;
+    public int fieldInt55466;
+    public int fieldInt55467;
+    public int fieldInt55468;
+    public int fieldInt55469;
+    public int fieldInt55470;
+    public int fieldInt55471;
+    public int fieldInt55472;
+    public int fieldInt55473;
+    public int fieldInt55474;
+    public int fieldInt55475;
+    public int fieldInt55476;
+    public int fieldInt55477;
+    public int fieldInt55478;
+    public int fieldInt55479;
+    public int fieldInt55480;
+    public int fieldInt55481;
+    public int fieldInt55482;
+    public int fieldInt55483;
+    public int fieldInt55484;
+    public int fieldInt55485;
+    public int fieldInt55486;
+    public int fieldInt55487;
+    public int fieldInt55488;
+    public int fieldInt55489;
+    public int fieldInt55490;
+    public int fieldInt55491;
+    public int fieldInt55492;
+    public int fieldInt55493;
+    public int fieldInt55494;
+    public int fieldInt55495;
+    public int fieldInt55496;
+    public int fieldInt55497;
+    public int fieldInt55498;
+    public int fieldInt55499;
+    public int fieldInt55500;
+    public int fieldInt55501;
+    public int fieldInt55502;
+    public int fieldInt55503;
+    public int fieldInt55504;
+    public int fieldInt55505;
+    public int fieldInt55506;
+    public int fieldInt55507;
+    public int fieldInt55508;
+    public int fieldInt55509;
+    public int fieldInt55510;
+    public int fieldInt55511;
+    public int fieldInt55512;
+    public int fieldInt55513;
+    public int fieldInt55514;
+    public int fieldInt55515;
+    public int fieldInt55516;
+    public int fieldInt55517;
+    public int fieldInt55518;
+    public int fieldInt55519;
+    public int fieldInt55520;
+    public int fieldInt55521;
+    public int fieldInt55522;
+    public int fieldInt55523;
+    public int fieldInt55524;
+    public int fieldInt55525;
+    public int fieldInt55526;
+    public int fieldInt55527;
+    public int fieldInt55528;
+    public int fieldInt55529;
+    public int fieldInt55530;
+    public int fieldInt55531;
+    public int fieldInt55532;
+    public int fieldInt55533;
+    public int fieldInt55534;
+    public int fieldInt55535;
+    public int fieldInt55536;
+    public int fieldInt55537;
+    public int fieldInt55538;
+    public int fieldInt55539;
+    public int fieldInt55540;
+    public int fieldInt55541;
+    public int fieldInt55542;
+    public int fieldInt55543;
+    public int fieldInt55544;
+    public int fieldInt55545;
+    public int fieldInt55546;
+    public int fieldInt55547;
+    public int fieldInt55548;
+    public int fieldInt55549;
+    public int fieldInt55550;
+    public int fieldInt55551;
+    public int fieldInt55552;
+    public int fieldInt55553;
+    public int fieldInt55554;
+    public int fieldInt55555;
+    public int fieldInt55556;
+    public int fieldInt55557;
+    public int fieldInt55558;
+    public int fieldInt55559;
+    public int fieldInt55560;
+    public int fieldInt55561;
+    public int fieldInt55562;
+    public int fieldInt55563;
+    public int fieldInt55564;
+    public int fieldInt55565;
+    public int fieldInt55566;
+    public int fieldInt55567;
+    public int fieldInt55568;
+    public int fieldInt55569;
+    public int fieldInt55570;
+    public int fieldInt55571;
+    public int fieldInt55572;
+    public int fieldInt55573;
+    public int fieldInt55574;
+    public int fieldInt55575;
+    public int fieldInt55576;
+    public int fieldInt55577;
+    public int fieldInt55578;
+    public int fieldInt55579;
+    public int fieldInt55580;
+    public int fieldInt55581;
+    public int fieldInt55582;
+    public int fieldInt55583;
+    public int fieldInt55584;
+    public int fieldInt55585;
+    public int fieldInt55586;
+    public int fieldInt55587;
+    public int fieldInt55588;
+    public int fieldInt55589;
+    public int fieldInt55590;
+    public int fieldInt55591;
+    public int fieldInt55592;
+    public int fieldInt55593;
+    public int fieldInt55594;
+    public int fieldInt55595;
+    public int fieldInt55596;
+    public int fieldInt55597;
+    public int fieldInt55598;
+    public int fieldInt55599;
+    public int fieldInt55600;
+    public int fieldInt55601;
+    public int fieldInt55602;
+    public int fieldInt55603;
+    public int fieldInt55604;
+    public int fieldInt55605;
+    public int fieldInt55606;
+    public int fieldInt55607;
+    public int fieldInt55608;
+    public int fieldInt55609;
+    public int fieldInt55610;
+    public int fieldInt55611;
+    public int fieldInt55612;
+    public int fieldInt55613;
+    public int fieldInt55614;
+    public int fieldInt55615;
+    public int fieldInt55616;
+    public int fieldInt55617;
+    public int fieldInt55618;
+    public int fieldInt55619;
+    public int fieldInt55620;
+    public int fieldInt55621;
+    public int fieldInt55622;
+    public int fieldInt55623;
+    public int fieldInt55624;
+    public int fieldInt55625;
+    public int fieldInt55626;
+    public int fieldInt55627;
+    public int fieldInt55628;
+    public int fieldInt55629;
+    public int fieldInt55630;
+    public int fieldInt55631;
+    public int fieldInt55632;
+    public int fieldInt55633;
+    public int fieldInt55634;
+    public int fieldInt55635;
+    public int fieldInt55636;
+    public int fieldInt55637;
+    public int fieldInt55638;
+    public int fieldInt55639;
+    public int fieldInt55640;
+    public int fieldInt55641;
+    public int fieldInt55642;
+    public int fieldInt55643;
+    public int fieldInt55644;
+    public int fieldInt55645;
+    public int fieldInt55646;
+    public int fieldInt55647;
+    public int fieldInt55648;
+    public int fieldInt55649;
+    public int fieldInt55650;
+    public int fieldInt55651;
+    public int fieldInt55652;
+    public int fieldInt55653;
+    public int fieldInt55654;
+    public int fieldInt55655;
+    public int fieldInt55656;
+    public int fieldInt55657;
+    public int fieldInt55658;
+    public int fieldInt55659;
+    public int fieldInt55660;
+    public int fieldInt55661;
+    public int fieldInt55662;
+    public int fieldInt55663;
+    public int fieldInt55664;
+    public int fieldInt55665;
+    public int fieldInt55666;
+    public int fieldInt55667;
+    public int fieldInt55668;
+    public int fieldInt55669;
+    public int fieldInt55670;
+    public int fieldInt55671;
+    public int fieldInt55672;
+    public int fieldInt55673;
+    public int fieldInt55674;
+    public int fieldInt55675;
+    public int fieldInt55676;
+    public int fieldInt55677;
+    public int fieldInt55678;
+    public int fieldInt55679;
+    public int fieldInt55680;
+    public int fieldInt55681;
+    public int fieldInt55682;
+    public int fieldInt55683;
+    public int fieldInt55684;
+    public int fieldInt55685;
+    public int fieldInt55686;
+    public int fieldInt55687;
+    public int fieldInt55688;
+    public int fieldInt55689;
+    public int fieldInt55690;
+    public int fieldInt55691;
+    public int fieldInt55692;
+    public int fieldInt55693;
+    public int fieldInt55694;
+    public int fieldInt55695;
+    public int fieldInt55696;
+    public int fieldInt55697;
+    public int fieldInt55698;
+    public int fieldInt55699;
+    public int fieldInt55700;
+    public int fieldInt55701;
+    public int fieldInt55702;
+    public int fieldInt55703;
+    public int fieldInt55704;
+    public int fieldInt55705;
+    public int fieldInt55706;
+    public int fieldInt55707;
+    public int fieldInt55708;
+    public int fieldInt55709;
+    public int fieldInt55710;
+    public int fieldInt55711;
+    public int fieldInt55712;
+    public int fieldInt55713;
+    public int fieldInt55714;
+    public int fieldInt55715;
+    public int fieldInt55716;
+    public int fieldInt55717;
+    public int fieldInt55718;
+    public int fieldInt55719;
+    public int fieldInt55720;
+    public int fieldInt55721;
+    public int fieldInt55722;
+    public int fieldInt55723;
+    public int fieldInt55724;
+    public int fieldInt55725;
+    public int fieldInt55726;
+    public int fieldInt55727;
+    public int fieldInt55728;
+    public int fieldInt55729;
+    public int fieldInt55730;
+    public int fieldInt55731;
+    public int fieldInt55732;
+    public int fieldInt55733;
+    public int fieldInt55734;
+    public int fieldInt55735;
+    public int fieldInt55736;
+    public int fieldInt55737;
+    public int fieldInt55738;
+    public int fieldInt55739;
+    public int fieldInt55740;
+    public int fieldInt55741;
+    public int fieldInt55742;
+    public int fieldInt55743;
+    public int fieldInt55744;
+    public int fieldInt55745;
+    public int fieldInt55746;
+    public int fieldInt55747;
+    public int fieldInt55748;
+    public int fieldInt55749;
+    public int fieldInt55750;
+    public int fieldInt55751;
+    public int fieldInt55752;
+    public int fieldInt55753;
+    public int fieldInt55754;
+    public int fieldInt55755;
+    public int fieldInt55756;
+    public int fieldInt55757;
+    public int fieldInt55758;
+    public int fieldInt55759;
+    public int fieldInt55760;
+    public int fieldInt55761;
+    public int fieldInt55762;
+    public int fieldInt55763;
+    public int fieldInt55764;
+    public int fieldInt55765;
+    public int fieldInt55766;
+    public int fieldInt55767;
+    public int fieldInt55768;
+    public int fieldInt55769;
+    public int fieldInt55770;
+    public int fieldInt55771;
+    public int fieldInt55772;
+    public int fieldInt55773;
+    public int fieldInt55774;
+    public int fieldInt55775;
+    public int fieldInt55776;
+    public int fieldInt55777;
+    public int fieldInt55778;
+    public int fieldInt55779;
+    public int fieldInt55780;
+    public int fieldInt55781;
+    public int fieldInt55782;
+    public int fieldInt55783;
+    public int fieldInt55784;
+    public int fieldInt55785;
+    public int fieldInt55786;
+    public int fieldInt55787;
+    public int fieldInt55788;
+    public int fieldInt55789;
+    public int fieldInt55790;
+    public int fieldInt55791;
+    public int fieldInt55792;
+    public int fieldInt55793;
+    public int fieldInt55794;
+    public int fieldInt55795;
+    public int fieldInt55796;
+    public int fieldInt55797;
+    public int fieldInt55798;
+    public int fieldInt55799;
+    public int fieldInt55800;
+    public int fieldInt55801;
+    public int fieldInt55802;
+    public int fieldInt55803;
+    public int fieldInt55804;
+    public int fieldInt55805;
+    public int fieldInt55806;
+    public int fieldInt55807;
+    public int fieldInt55808;
+    public int fieldInt55809;
+    public int fieldInt55810;
+    public int fieldInt55811;
+    public int fieldInt55812;
+    public int fieldInt55813;
+    public int fieldInt55814;
+    public int fieldInt55815;
+    public int fieldInt55816;
+    public int fieldInt55817;
+    public int fieldInt55818;
+    public int fieldInt55819;
+    public int fieldInt55820;
+    public int fieldInt55821;
+    public int fieldInt55822;
+    public int fieldInt55823;
+    public int fieldInt55824;
+    public int fieldInt55825;
+    public int fieldInt55826;
+    public int fieldInt55827;
+    public int fieldInt55828;
+    public int fieldInt55829;
+    public int fieldInt55830;
+    public int fieldInt55831;
+    public int fieldInt55832;
+    public int fieldInt55833;
+    public int fieldInt55834;
+    public int fieldInt55835;
+    public int fieldInt55836;
+    public int fieldInt55837;
+    public int fieldInt55838;
+    public int fieldInt55839;
+    public int fieldInt55840;
+    public int fieldInt55841;
+    public int fieldInt55842;
+    public int fieldInt55843;
+    public int fieldInt55844;
+    public int fieldInt55845;
+    public int fieldInt55846;
+    public int fieldInt55847;
+    public int fieldInt55848;
+    public int fieldInt55849;
+    public int fieldInt55850;
+    public int fieldInt55851;
+    public int fieldInt55852;
+    public int fieldInt55853;
+    public int fieldInt55854;
+    public int fieldInt55855;
+    public int fieldInt55856;
+    public int fieldInt55857;
+    public int fieldInt55858;
+    public int fieldInt55859;
+    public int fieldInt55860;
+    public int fieldInt55861;
+    public int fieldInt55862;
+    public int fieldInt55863;
+    public int fieldInt55864;
+    public int fieldInt55865;
+    public int fieldInt55866;
+    public int fieldInt55867;
+    public int fieldInt55868;
+    public int fieldInt55869;
+    public int fieldInt55870;
+    public int fieldInt55871;
+    public int fieldInt55872;
+    public int fieldInt55873;
+    public int fieldInt55874;
+    public int fieldInt55875;
+    public int fieldInt55876;
+    public int fieldInt55877;
+    public int fieldInt55878;
+    public int fieldInt55879;
+    public int fieldInt55880;
+    public int fieldInt55881;
+    public int fieldInt55882;
+    public int fieldInt55883;
+    public int fieldInt55884;
+    public int fieldInt55885;
+    public int fieldInt55886;
+    public int fieldInt55887;
+    public int fieldInt55888;
+    public int fieldInt55889;
+    public int fieldInt55890;
+    public int fieldInt55891;
+    public int fieldInt55892;
+    public int fieldInt55893;
+    public int fieldInt55894;
+    public int fieldInt55895;
+    public int fieldInt55896;
+    public int fieldInt55897;
+    public int fieldInt55898;
+    public int fieldInt55899;
+    public int fieldInt55900;
+    public int fieldInt55901;
+    public int fieldInt55902;
+    public int fieldInt55903;
+    public int fieldInt55904;
+    public int fieldInt55905;
+    public int fieldInt55906;
+    public int fieldInt55907;
+    public int fieldInt55908;
+    public int fieldInt55909;
+    public int fieldInt55910;
+    public int fieldInt55911;
+    public int fieldInt55912;
+    public int fieldInt55913;
+    public int fieldInt55914;
+    public int fieldInt55915;
+    public int fieldInt55916;
+    public int fieldInt55917;
+    public int fieldInt55918;
+    public int fieldInt55919;
+    public int fieldInt55920;
+    public int fieldInt55921;
+    public int fieldInt55922;
+    public int fieldInt55923;
+    public int fieldInt55924;
+    public int fieldInt55925;
+    public int fieldInt55926;
+    public int fieldInt55927;
+    public int fieldInt55928;
+    public int fieldInt55929;
+    public int fieldInt55930;
+    public int fieldInt55931;
+    public int fieldInt55932;
+    public int fieldInt55933;
+    public int fieldInt55934;
+    public int fieldInt55935;
+    public int fieldInt55936;
+    public int fieldInt55937;
+    public int fieldInt55938;
+    public int fieldInt55939;
+    public int fieldInt55940;
+    public int fieldInt55941;
+    public int fieldInt55942;
+    public int fieldInt55943;
+    public int fieldInt55944;
+    public int fieldInt55945;
+    public int fieldInt55946;
+    public int fieldInt55947;
+    public int fieldInt55948;
+    public int fieldInt55949;
+    public int fieldInt55950;
+    public int fieldInt55951;
+    public int fieldInt55952;
+    public int fieldInt55953;
+    public int fieldInt55954;
+    public int fieldInt55955;
+    public int fieldInt55956;
+    public int fieldInt55957;
+    public int fieldInt55958;
+    public int fieldInt55959;
+    public int fieldInt55960;
+    public int fieldInt55961;
+    public int fieldInt55962;
+    public int fieldInt55963;
+    public int fieldInt55964;
+    public int fieldInt55965;
+    public int fieldInt55966;
+    public int fieldInt55967;
+    public int fieldInt55968;
+    public int fieldInt55969;
+    public int fieldInt55970;
+    public int fieldInt55971;
+    public int fieldInt55972;
+    public int fieldInt55973;
+    public int fieldInt55974;
+    public int fieldInt55975;
+    public int fieldInt55976;
+    public int fieldInt55977;
+    public int fieldInt55978;
+    public int fieldInt55979;
+    public int fieldInt55980;
+    public int fieldInt55981;
+    public int fieldInt55982;
+    public int fieldInt55983;
+    public int fieldInt55984;
+    public int fieldInt55985;
+    public int fieldInt55986;
+    public int fieldInt55987;
+    public int fieldInt55988;
+    public int fieldInt55989;
+    public int fieldInt55990;
+    public int fieldInt55991;
+    public int fieldInt55992;
+    public int fieldInt55993;
+    public int fieldInt55994;
+    public int fieldInt55995;
+    public int fieldInt55996;
+    public int fieldInt55997;
+    public int fieldInt55998;
+    public int fieldInt55999;
+    public int fieldInt56000;
+    public int fieldInt56001;
+    public int fieldInt56002;
+    public int fieldInt56003;
+    public int fieldInt56004;
+    public int fieldInt56005;
+    public int fieldInt56006;
+    public int fieldInt56007;
+    public int fieldInt56008;
+    public int fieldInt56009;
+    public int fieldInt56010;
+    public int fieldInt56011;
+    public int fieldInt56012;
+    public int fieldInt56013;
+    public int fieldInt56014;
+    public int fieldInt56015;
+    public int fieldInt56016;
+    public int fieldInt56017;
+    public int fieldInt56018;
+    public int fieldInt56019;
+    public int fieldInt56020;
+    public int fieldInt56021;
+    public int fieldInt56022;
+    public int fieldInt56023;
+    public int fieldInt56024;
+    public int fieldInt56025;
+    public int fieldInt56026;
+    public int fieldInt56027;
+    public int fieldInt56028;
+    public int fieldInt56029;
+    public int fieldInt56030;
+    public int fieldInt56031;
+    public int fieldInt56032;
+    public int fieldInt56033;
+    public int fieldInt56034;
+    public int fieldInt56035;
+    public int fieldInt56036;
+    public int fieldInt56037;
+    public int fieldInt56038;
+    public int fieldInt56039;
+    public int fieldInt56040;
+    public int fieldInt56041;
+    public int fieldInt56042;
+    public int fieldInt56043;
+    public int fieldInt56044;
+    public int fieldInt56045;
+    public int fieldInt56046;
+    public int fieldInt56047;
+    public int fieldInt56048;
+    public int fieldInt56049;
+    public int fieldInt56050;
+    public int fieldInt56051;
+    public int fieldInt56052;
+    public int fieldInt56053;
+    public int fieldInt56054;
+    public int fieldInt56055;
+    public int fieldInt56056;
+    public int fieldInt56057;
+    public int fieldInt56058;
+    public int fieldInt56059;
+    public int fieldInt56060;
+    public int fieldInt56061;
+    public int fieldInt56062;
+    public int fieldInt56063;
+    public int fieldInt56064;
+    public int fieldInt56065;
+    public int fieldInt56066;
+    public int fieldInt56067;
+    public int fieldInt56068;
+    public int fieldInt56069;
+    public int fieldInt56070;
+    public int fieldInt56071;
+    public int fieldInt56072;
+    public int fieldInt56073;
+    public int fieldInt56074;
+    public int fieldInt56075;
+    public int fieldInt56076;
+    public int fieldInt56077;
+    public int fieldInt56078;
+    public int fieldInt56079;
+    public int fieldInt56080;
+    public int fieldInt56081;
+    public int fieldInt56082;
+    public int fieldInt56083;
+    public int fieldInt56084;
+    public int fieldInt56085;
+    public int fieldInt56086;
+    public int fieldInt56087;
+    public int fieldInt56088;
+    public int fieldInt56089;
+    public int fieldInt56090;
+    public int fieldInt56091;
+    public int fieldInt56092;
+    public int fieldInt56093;
+    public int fieldInt56094;
+    public int fieldInt56095;
+    public int fieldInt56096;
+    public int fieldInt56097;
+    public int fieldInt56098;
+    public int fieldInt56099;
+    public int fieldInt56100;
+    public int fieldInt56101;
+    public int fieldInt56102;
+    public int fieldInt56103;
+    public int fieldInt56104;
+    public int fieldInt56105;
+    public int fieldInt56106;
+    public int fieldInt56107;
+    public int fieldInt56108;
+    public int fieldInt56109;
+    public int fieldInt56110;
+    public int fieldInt56111;
+    public int fieldInt56112;
+    public int fieldInt56113;
+    public int fieldInt56114;
+    public int fieldInt56115;
+    public int fieldInt56116;
+    public int fieldInt56117;
+    public int fieldInt56118;
+    public int fieldInt56119;
+    public int fieldInt56120;
+    public int fieldInt56121;
+    public int fieldInt56122;
+    public int fieldInt56123;
+    public int fieldInt56124;
+    public int fieldInt56125;
+    public int fieldInt56126;
+    public int fieldInt56127;
+    public int fieldInt56128;
+    public int fieldInt56129;
+    public int fieldInt56130;
+    public int fieldInt56131;
+    public int fieldInt56132;
+    public int fieldInt56133;
+    public int fieldInt56134;
+    public int fieldInt56135;
+    public int fieldInt56136;
+    public int fieldInt56137;
+    public int fieldInt56138;
+    public int fieldInt56139;
+    public int fieldInt56140;
+    public int fieldInt56141;
+    public int fieldInt56142;
+    public int fieldInt56143;
+    public int fieldInt56144;
+    public int fieldInt56145;
+    public int fieldInt56146;
+    public int fieldInt56147;
+    public int fieldInt56148;
+    public int fieldInt56149;
+    public int fieldInt56150;
+    public int fieldInt56151;
+    public int fieldInt56152;
+    public int fieldInt56153;
+    public int fieldInt56154;
+    public int fieldInt56155;
+    public int fieldInt56156;
+    public int fieldInt56157;
+    public int fieldInt56158;
+    public int fieldInt56159;
+    public int fieldInt56160;
+    public int fieldInt56161;
+    public int fieldInt56162;
+    public int fieldInt56163;
+    public int fieldInt56164;
+    public int fieldInt56165;
+    public int fieldInt56166;
+    public int fieldInt56167;
+    public int fieldInt56168;
+    public int fieldInt56169;
+    public int fieldInt56170;
+    public int fieldInt56171;
+    public int fieldInt56172;
+    public int fieldInt56173;
+    public int fieldInt56174;
+    public int fieldInt56175;
+    public int fieldInt56176;
+    public int fieldInt56177;
+    public int fieldInt56178;
+    public int fieldInt56179;
+    public int fieldInt56180;
+    public int fieldInt56181;
+    public int fieldInt56182;
+    public int fieldInt56183;
+    public int fieldInt56184;
+    public int fieldInt56185;
+    public int fieldInt56186;
+    public int fieldInt56187;
+    public int fieldInt56188;
+    public int fieldInt56189;
+    public int fieldInt56190;
+    public int fieldInt56191;
+    public int fieldInt56192;
+    public int fieldInt56193;
+    public int fieldInt56194;
+    public int fieldInt56195;
+    public int fieldInt56196;
+    public int fieldInt56197;
+    public int fieldInt56198;
+    public int fieldInt56199;
+    public int fieldInt56200;
+    public int fieldInt56201;
+    public int fieldInt56202;
+    public int fieldInt56203;
+    public int fieldInt56204;
+    public int fieldInt56205;
+    public int fieldInt56206;
+    public int fieldInt56207;
+    public int fieldInt56208;
+    public int fieldInt56209;
+    public int fieldInt56210;
+    public int fieldInt56211;
+    public int fieldInt56212;
+    public int fieldInt56213;
+    public int fieldInt56214;
+    public int fieldInt56215;
+    public int fieldInt56216;
+    public int fieldInt56217;
+    public int fieldInt56218;
+    public int fieldInt56219;
+    public int fieldInt56220;
+    public int fieldInt56221;
+    public int fieldInt56222;
+    public int fieldInt56223;
+    public int fieldInt56224;
+    public int fieldInt56225;
+    public int fieldInt56226;
+    public int fieldInt56227;
+    public int fieldInt56228;
+    public int fieldInt56229;
+    public int fieldInt56230;
+    public int fieldInt56231;
+    public int fieldInt56232;
+    public int fieldInt56233;
+    public int fieldInt56234;
+    public int fieldInt56235;
+    public int fieldInt56236;
+    public int fieldInt56237;
+    public int fieldInt56238;
+    public int fieldInt56239;
+    public int fieldInt56240;
+    public int fieldInt56241;
+    public int fieldInt56242;
+    public int fieldInt56243;
+    public int fieldInt56244;
+    public int fieldInt56245;
+    public int fieldInt56246;
+    public int fieldInt56247;
+    public int fieldInt56248;
+    public int fieldInt56249;
+    public int fieldInt56250;
+    public int fieldInt56251;
+    public int fieldInt56252;
+    public int fieldInt56253;
+    public int fieldInt56254;
+    public int fieldInt56255;
+    public int fieldInt56256;
+    public int fieldInt56257;
+    public int fieldInt56258;
+    public int fieldInt56259;
+    public int fieldInt56260;
+    public int fieldInt56261;
+    public int fieldInt56262;
+    public int fieldInt56263;
+    public int fieldInt56264;
+    public int fieldInt56265;
+    public int fieldInt56266;
+    public int fieldInt56267;
+    public int fieldInt56268;
+    public int fieldInt56269;
+    public int fieldInt56270;
+    public int fieldInt56271;
+    public int fieldInt56272;
+    public int fieldInt56273;
+    public int fieldInt56274;
+    public int fieldInt56275;
+    public int fieldInt56276;
+    public int fieldInt56277;
+    public int fieldInt56278;
+    public int fieldInt56279;
+    public int fieldInt56280;
+    public int fieldInt56281;
+    public int fieldInt56282;
+    public int fieldInt56283;
+    public int fieldInt56284;
+    public int fieldInt56285;
+    public int fieldInt56286;
+    public int fieldInt56287;
+    public int fieldInt56288;
+    public int fieldInt56289;
+    public int fieldInt56290;
+    public int fieldInt56291;
+    public int fieldInt56292;
+    public int fieldInt56293;
+    public int fieldInt56294;
+    public int fieldInt56295;
+    public int fieldInt56296;
+    public int fieldInt56297;
+    public int fieldInt56298;
+    public int fieldInt56299;
+    public int fieldInt56300;
+    public int fieldInt56301;
+    public int fieldInt56302;
+    public int fieldInt56303;
+    public int fieldInt56304;
+    public int fieldInt56305;
+    public int fieldInt56306;
+    public int fieldInt56307;
+    public int fieldInt56308;
+    public int fieldInt56309;
+    public int fieldInt56310;
+    public int fieldInt56311;
+    public int fieldInt56312;
+    public int fieldInt56313;
+    public int fieldInt56314;
+    public int fieldInt56315;
+    public int fieldInt56316;
+    public int fieldInt56317;
+    public int fieldInt56318;
+    public int fieldInt56319;
+    public int fieldInt56320;
+    public int fieldInt56321;
+    public int fieldInt56322;
+    public int fieldInt56323;
+    public int fieldInt56324;
+    public int fieldInt56325;
+    public int fieldInt56326;
+    public int fieldInt56327;
+    public int fieldInt56328;
+    public int fieldInt56329;
+    public int fieldInt56330;
+    public int fieldInt56331;
+    public int fieldInt56332;
+    public int fieldInt56333;
+    public int fieldInt56334;
+    public int fieldInt56335;
+    public int fieldInt56336;
+    public int fieldInt56337;
+    public int fieldInt56338;
+    public int fieldInt56339;
+    public int fieldInt56340;
+    public int fieldInt56341;
+    public int fieldInt56342;
+    public int fieldInt56343;
+    public int fieldInt56344;
+    public int fieldInt56345;
+    public int fieldInt56346;
+    public int fieldInt56347;
+    public int fieldInt56348;
+    public int fieldInt56349;
+    public int fieldInt56350;
+    public int fieldInt56351;
+    public int fieldInt56352;
+    public int fieldInt56353;
+    public int fieldInt56354;
+    public int fieldInt56355;
+    public int fieldInt56356;
+    public int fieldInt56357;
+    public int fieldInt56358;
+    public int fieldInt56359;
+    public int fieldInt56360;
+    public int fieldInt56361;
+    public int fieldInt56362;
+    public int fieldInt56363;
+    public int fieldInt56364;
+    public int fieldInt56365;
+    public int fieldInt56366;
+    public int fieldInt56367;
+    public int fieldInt56368;
+    public int fieldInt56369;
+    public int fieldInt56370;
+    public int fieldInt56371;
+    public int fieldInt56372;
+    public int fieldInt56373;
+    public int fieldInt56374;
+    public int fieldInt56375;
+    public int fieldInt56376;
+    public int fieldInt56377;
+    public int fieldInt56378;
+    public int fieldInt56379;
+    public int fieldInt56380;
+    public int fieldInt56381;
+    public int fieldInt56382;
+    public int fieldInt56383;
+    public int fieldInt56384;
+    public int fieldInt56385;
+    public int fieldInt56386;
+    public int fieldInt56387;
+    public int fieldInt56388;
+    public int fieldInt56389;
+    public int fieldInt56390;
+    public int fieldInt56391;
+    public int fieldInt56392;
+    public int fieldInt56393;
+    public int fieldInt56394;
+    public int fieldInt56395;
+    public int fieldInt56396;
+    public int fieldInt56397;
+    public int fieldInt56398;
+    public int fieldInt56399;
+    public int fieldInt56400;
+    public int fieldInt56401;
+    public int fieldInt56402;
+    public int fieldInt56403;
+    public int fieldInt56404;
+    public int fieldInt56405;
+    public int fieldInt56406;
+    public int fieldInt56407;
+    public int fieldInt56408;
+    public int fieldInt56409;
+    public int fieldInt56410;
+    public int fieldInt56411;
+    public int fieldInt56412;
+    public int fieldInt56413;
+    public int fieldInt56414;
+    public int fieldInt56415;
+    public int fieldInt56416;
+    public int fieldInt56417;
+    public int fieldInt56418;
+    public int fieldInt56419;
+    public int fieldInt56420;
+    public int fieldInt56421;
+    public int fieldInt56422;
+    public int fieldInt56423;
+    public int fieldInt56424;
+    public int fieldInt56425;
+    public int fieldInt56426;
+    public int fieldInt56427;
+    public int fieldInt56428;
+    public int fieldInt56429;
+    public int fieldInt56430;
+    public int fieldInt56431;
+    public int fieldInt56432;
+    public int fieldInt56433;
+    public int fieldInt56434;
+    public int fieldInt56435;
+    public int fieldInt56436;
+    public int fieldInt56437;
+    public int fieldInt56438;
+    public int fieldInt56439;
+    public int fieldInt56440;
+    public int fieldInt56441;
+    public int fieldInt56442;
+    public int fieldInt56443;
+    public int fieldInt56444;
+    public int fieldInt56445;
+    public int fieldInt56446;
+    public int fieldInt56447;
+    public int fieldInt56448;
+    public int fieldInt56449;
+    public int fieldInt56450;
+    public int fieldInt56451;
+    public int fieldInt56452;
+    public int fieldInt56453;
+    public int fieldInt56454;
+    public int fieldInt56455;
+    public int fieldInt56456;
+    public int fieldInt56457;
+    public int fieldInt56458;
+    public int fieldInt56459;
+    public int fieldInt56460;
+    public int fieldInt56461;
+    public int fieldInt56462;
+    public int fieldInt56463;
+    public int fieldInt56464;
+    public int fieldInt56465;
+    public int fieldInt56466;
+    public int fieldInt56467;
+    public int fieldInt56468;
+    public int fieldInt56469;
+    public int fieldInt56470;
+    public int fieldInt56471;
+    public int fieldInt56472;
+    public int fieldInt56473;
+    public int fieldInt56474;
+    public int fieldInt56475;
+    public int fieldInt56476;
+    public int fieldInt56477;
+    public int fieldInt56478;
+    public int fieldInt56479;
+    public int fieldInt56480;
+    public int fieldInt56481;
+    public int fieldInt56482;
+    public int fieldInt56483;
+    public int fieldInt56484;
+    public int fieldInt56485;
+    public int fieldInt56486;
+    public int fieldInt56487;
+    public int fieldInt56488;
+    public int fieldInt56489;
+    public int fieldInt56490;
+    public int fieldInt56491;
+    public int fieldInt56492;
+    public int fieldInt56493;
+    public int fieldInt56494;
+    public int fieldInt56495;
+    public int fieldInt56496;
+    public int fieldInt56497;
+    public int fieldInt56498;
+    public int fieldInt56499;
+    public int fieldInt56500;
+    public int fieldInt56501;
+    public int fieldInt56502;
+    public int fieldInt56503;
+    public int fieldInt56504;
+    public int fieldInt56505;
+    public int fieldInt56506;
+    public int fieldInt56507;
+    public int fieldInt56508;
+    public int fieldInt56509;
+    public int fieldInt56510;
+    public int fieldInt56511;
+    public int fieldInt56512;
+    public int fieldInt56513;
+    public int fieldInt56514;
+    public int fieldInt56515;
+    public int fieldInt56516;
+    public int fieldInt56517;
+    public int fieldInt56518;
+    public int fieldInt56519;
+    public int fieldInt56520;
+    public int fieldInt56521;
+    public int fieldInt56522;
+    public int fieldInt56523;
+    public int fieldInt56524;
+    public int fieldInt56525;
+    public int fieldInt56526;
+    public int fieldInt56527;
+    public int fieldInt56528;
+    public int fieldInt56529;
+    public int fieldInt56530;
+    public int fieldInt56531;
+    public int fieldInt56532;
+    public int fieldInt56533;
+    public int fieldInt56534;
+    public int fieldInt56535;
+    public int fieldInt56536;
+    public int fieldInt56537;
+    public int fieldInt56538;
+    public int fieldInt56539;
+    public int fieldInt56540;
+    public int fieldInt56541;
+    public int fieldInt56542;
+    public int fieldInt56543;
+    public int fieldInt56544;
+    public int fieldInt56545;
+    public int fieldInt56546;
+    public int fieldInt56547;
+    public int fieldInt56548;
+    public int fieldInt56549;
+    public int fieldInt56550;
+    public int fieldInt56551;
+    public int fieldInt56552;
+    public int fieldInt56553;
+    public int fieldInt56554;
+    public int fieldInt56555;
+    public int fieldInt56556;
+    public int fieldInt56557;
+    public int fieldInt56558;
+    public int fieldInt56559;
+    public int fieldInt56560;
+    public int fieldInt56561;
+    public int fieldInt56562;
+    public int fieldInt56563;
+    public int fieldInt56564;
+    public int fieldInt56565;
+    public int fieldInt56566;
+    public int fieldInt56567;
+    public int fieldInt56568;
+    public int fieldInt56569;
+    public int fieldInt56570;
+    public int fieldInt56571;
+    public int fieldInt56572;
+    public int fieldInt56573;
+    public int fieldInt56574;
+    public int fieldInt56575;
+    public int fieldInt56576;
+    public int fieldInt56577;
+    public int fieldInt56578;
+    public int fieldInt56579;
+    public int fieldInt56580;
+    public int fieldInt56581;
+    public int fieldInt56582;
+    public int fieldInt56583;
+    public int fieldInt56584;
+    public int fieldInt56585;
+    public int fieldInt56586;
+    public int fieldInt56587;
+    public int fieldInt56588;
+    public int fieldInt56589;
+    public int fieldInt56590;
+    public int fieldInt56591;
+    public int fieldInt56592;
+    public int fieldInt56593;
+    public int fieldInt56594;
+    public int fieldInt56595;
+    public int fieldInt56596;
+    public int fieldInt56597;
+    public int fieldInt56598;
+    public int fieldInt56599;
+    public int fieldInt56600;
+    public int fieldInt56601;
+    public int fieldInt56602;
+    public int fieldInt56603;
+    public int fieldInt56604;
+    public int fieldInt56605;
+    public int fieldInt56606;
+    public int fieldInt56607;
+    public int fieldInt56608;
+    public int fieldInt56609;
+    public int fieldInt56610;
+    public int fieldInt56611;
+    public int fieldInt56612;
+    public int fieldInt56613;
+    public int fieldInt56614;
+    public int fieldInt56615;
+    public int fieldInt56616;
+    public int fieldInt56617;
+    public int fieldInt56618;
+    public int fieldInt56619;
+    public int fieldInt56620;
+    public int fieldInt56621;
+    public int fieldInt56622;
+    public int fieldInt56623;
+    public int fieldInt56624;
+    public int fieldInt56625;
+    public int fieldInt56626;
+    public int fieldInt56627;
+    public int fieldInt56628;
+    public int fieldInt56629;
+    public int fieldInt56630;
+    public int fieldInt56631;
+    public int fieldInt56632;
+    public int fieldInt56633;
+    public int fieldInt56634;
+    public int fieldInt56635;
+    public int fieldInt56636;
+    public int fieldInt56637;
+    public int fieldInt56638;
+    public int fieldInt56639;
+    public int fieldInt56640;
+    public int fieldInt56641;
+    public int fieldInt56642;
+    public int fieldInt56643;
+    public int fieldInt56644;
+    public int fieldInt56645;
+    public int fieldInt56646;
+    public int fieldInt56647;
+    public int fieldInt56648;
+    public int fieldInt56649;
+    public int fieldInt56650;
+    public int fieldInt56651;
+    public int fieldInt56652;
+    public int fieldInt56653;
+    public int fieldInt56654;
+    public int fieldInt56655;
+    public int fieldInt56656;
+    public int fieldInt56657;
+    public int fieldInt56658;
+    public int fieldInt56659;
+    public int fieldInt56660;
+    public int fieldInt56661;
+    public int fieldInt56662;
+    public int fieldInt56663;
+    public int fieldInt56664;
+    public int fieldInt56665;
+    public int fieldInt56666;
+    public int fieldInt56667;
+    public int fieldInt56668;
+    public int fieldInt56669;
+    public int fieldInt56670;
+    public int fieldInt56671;
+    public int fieldInt56672;
+    public int fieldInt56673;
+    public int fieldInt56674;
+    public int fieldInt56675;
+    public int fieldInt56676;
+    public int fieldInt56677;
+    public int fieldInt56678;
+    public int fieldInt56679;
+    public int fieldInt56680;
+    public int fieldInt56681;
+    public int fieldInt56682;
+    public int fieldInt56683;
+    public int fieldInt56684;
+    public int fieldInt56685;
+    public int fieldInt56686;
+    public int fieldInt56687;
+    public int fieldInt56688;
+    public int fieldInt56689;
+    public int fieldInt56690;
+    public int fieldInt56691;
+    public int fieldInt56692;
+    public int fieldInt56693;
+    public int fieldInt56694;
+    public int fieldInt56695;
+    public int fieldInt56696;
+    public int fieldInt56697;
+    public int fieldInt56698;
+    public int fieldInt56699;
+    public int fieldInt56700;
+    public int fieldInt56701;
+    public int fieldInt56702;
+    public int fieldInt56703;
+    public int fieldInt56704;
+    public int fieldInt56705;
+    public int fieldInt56706;
+    public int fieldInt56707;
+    public int fieldInt56708;
+    public int fieldInt56709;
+    public int fieldInt56710;
+    public int fieldInt56711;
+    public int fieldInt56712;
+    public int fieldInt56713;
+    public int fieldInt56714;
+    public int fieldInt56715;
+    public int fieldInt56716;
+    public int fieldInt56717;
+    public int fieldInt56718;
+    public int fieldInt56719;
+    public int fieldInt56720;
+    public int fieldInt56721;
+    public int fieldInt56722;
+    public int fieldInt56723;
+    public int fieldInt56724;
+    public int fieldInt56725;
+    public int fieldInt56726;
+    public int fieldInt56727;
+    public int fieldInt56728;
+    public int fieldInt56729;
+    public int fieldInt56730;
+    public int fieldInt56731;
+    public int fieldInt56732;
+    public int fieldInt56733;
+    public int fieldInt56734;
+    public int fieldInt56735;
+    public int fieldInt56736;
+    public int fieldInt56737;
+    public int fieldInt56738;
+    public int fieldInt56739;
+    public int fieldInt56740;
+    public int fieldInt56741;
+    public int fieldInt56742;
+    public int fieldInt56743;
+    public int fieldInt56744;
+    public int fieldInt56745;
+    public int fieldInt56746;
+    public int fieldInt56747;
+    public int fieldInt56748;
+    public int fieldInt56749;
+    public int fieldInt56750;
+    public int fieldInt56751;
+    public int fieldInt56752;
+    public int fieldInt56753;
+    public int fieldInt56754;
+    public int fieldInt56755;
+    public int fieldInt56756;
+    public int fieldInt56757;
+    public int fieldInt56758;
+    public int fieldInt56759;
+    public int fieldInt56760;
+    public int fieldInt56761;
+    public int fieldInt56762;
+    public int fieldInt56763;
+    public int fieldInt56764;
+    public int fieldInt56765;
+    public int fieldInt56766;
+    public int fieldInt56767;
+    public int fieldInt56768;
+    public int fieldInt56769;
+    public int fieldInt56770;
+    public int fieldInt56771;
+    public int fieldInt56772;
+    public int fieldInt56773;
+    public int fieldInt56774;
+    public int fieldInt56775;
+    public int fieldInt56776;
+    public int fieldInt56777;
+    public int fieldInt56778;
+    public int fieldInt56779;
+    public int fieldInt56780;
+    public int fieldInt56781;
+    public int fieldInt56782;
+    public int fieldInt56783;
+    public int fieldInt56784;
+    public int fieldInt56785;
+    public int fieldInt56786;
+    public int fieldInt56787;
+    public int fieldInt56788;
+    public int fieldInt56789;
+    public int fieldInt56790;
+    public int fieldInt56791;
+    public int fieldInt56792;
+    public int fieldInt56793;
+    public int fieldInt56794;
+    public int fieldInt56795;
+    public int fieldInt56796;
+    public int fieldInt56797;
+    public int fieldInt56798;
+    public int fieldInt56799;
+    public int fieldInt56800;
+    public int fieldInt56801;
+    public int fieldInt56802;
+    public int fieldInt56803;
+    public int fieldInt56804;
+    public int fieldInt56805;
+    public int fieldInt56806;
+    public int fieldInt56807;
+    public int fieldInt56808;
+    public int fieldInt56809;
+    public int fieldInt56810;
+    public int fieldInt56811;
+    public int fieldInt56812;
+    public int fieldInt56813;
+    public int fieldInt56814;
+    public int fieldInt56815;
+    public int fieldInt56816;
+    public int fieldInt56817;
+    public int fieldInt56818;
+    public int fieldInt56819;
+    public int fieldInt56820;
+    public int fieldInt56821;
+    public int fieldInt56822;
+    public int fieldInt56823;
+    public int fieldInt56824;
+    public int fieldInt56825;
+    public int fieldInt56826;
+    public int fieldInt56827;
+    public int fieldInt56828;
+    public int fieldInt56829;
+    public int fieldInt56830;
+    public int fieldInt56831;
+    public int fieldInt56832;
+    public int fieldInt56833;
+    public int fieldInt56834;
+    public int fieldInt56835;
+    public int fieldInt56836;
+    public int fieldInt56837;
+    public int fieldInt56838;
+    public int fieldInt56839;
+    public int fieldInt56840;
+    public int fieldInt56841;
+    public int fieldInt56842;
+    public int fieldInt56843;
+    public int fieldInt56844;
+    public int fieldInt56845;
+    public int fieldInt56846;
+    public int fieldInt56847;
+    public int fieldInt56848;
+    public int fieldInt56849;
+    public int fieldInt56850;
+    public int fieldInt56851;
+    public int fieldInt56852;
+    public int fieldInt56853;
+    public int fieldInt56854;
+    public int fieldInt56855;
+    public int fieldInt56856;
+    public int fieldInt56857;
+    public int fieldInt56858;
+    public int fieldInt56859;
+    public int fieldInt56860;
+    public int fieldInt56861;
+    public int fieldInt56862;
+    public int fieldInt56863;
+    public int fieldInt56864;
+    public int fieldInt56865;
+    public int fieldInt56866;
+    public int fieldInt56867;
+    public int fieldInt56868;
+    public int fieldInt56869;
+    public int fieldInt56870;
+    public int fieldInt56871;
+    public int fieldInt56872;
+    public int fieldInt56873;
+    public int fieldInt56874;
+    public int fieldInt56875;
+    public int fieldInt56876;
+    public int fieldInt56877;
+    public int fieldInt56878;
+    public int fieldInt56879;
+    public int fieldInt56880;
+    public int fieldInt56881;
+    public int fieldInt56882;
+    public int fieldInt56883;
+    public int fieldInt56884;
+    public int fieldInt56885;
+    public int fieldInt56886;
+    public int fieldInt56887;
+    public int fieldInt56888;
+    public int fieldInt56889;
+    public int fieldInt56890;
+    public int fieldInt56891;
+    public int fieldInt56892;
+    public int fieldInt56893;
+    public int fieldInt56894;
+    public int fieldInt56895;
+    public int fieldInt56896;
+    public int fieldInt56897;
+    public int fieldInt56898;
+    public int fieldInt56899;
+    public int fieldInt56900;
+    public int fieldInt56901;
+    public int fieldInt56902;
+    public int fieldInt56903;
+    public int fieldInt56904;
+    public int fieldInt56905;
+    public int fieldInt56906;
+    public int fieldInt56907;
+    public int fieldInt56908;
+    public int fieldInt56909;
+    public int fieldInt56910;
+    public int fieldInt56911;
+    public int fieldInt56912;
+    public int fieldInt56913;
+    public int fieldInt56914;
+    public int fieldInt56915;
+    public int fieldInt56916;
+    public int fieldInt56917;
+    public int fieldInt56918;
+    public int fieldInt56919;
+    public int fieldInt56920;
+    public int fieldInt56921;
+    public int fieldInt56922;
+    public int fieldInt56923;
+    public int fieldInt56924;
+    public int fieldInt56925;
+    public int fieldInt56926;
+    public int fieldInt56927;
+    public int fieldInt56928;
+    public int fieldInt56929;
+    public int fieldInt56930;
+    public int fieldInt56931;
+    public int fieldInt56932;
+    public int fieldInt56933;
+    public int fieldInt56934;
+    public int fieldInt56935;
+    public int fieldInt56936;
+    public int fieldInt56937;
+    public int fieldInt56938;
+    public int fieldInt56939;
+    public int fieldInt56940;
+    public int fieldInt56941;
+    public int fieldInt56942;
+    public int fieldInt56943;
+    public int fieldInt56944;
+    public int fieldInt56945;
+    public int fieldInt56946;
+    public int fieldInt56947;
+    public int fieldInt56948;
+    public int fieldInt56949;
+    public int fieldInt56950;
+    public int fieldInt56951;
+    public int fieldInt56952;
+    public int fieldInt56953;
+    public int fieldInt56954;
+    public int fieldInt56955;
+    public int fieldInt56956;
+    public int fieldInt56957;
+    public int fieldInt56958;
+    public int fieldInt56959;
+    public int fieldInt56960;
+    public int fieldInt56961;
+    public int fieldInt56962;
+    public int fieldInt56963;
+    public int fieldInt56964;
+    public int fieldInt56965;
+    public int fieldInt56966;
+    public int fieldInt56967;
+    public int fieldInt56968;
+    public int fieldInt56969;
+    public int fieldInt56970;
+    public int fieldInt56971;
+    public int fieldInt56972;
+    public int fieldInt56973;
+    public int fieldInt56974;
+    public int fieldInt56975;
+    public int fieldInt56976;
+    public int fieldInt56977;
+    public int fieldInt56978;
+    public int fieldInt56979;
+    public int fieldInt56980;
+    public int fieldInt56981;
+    public int fieldInt56982;
+    public int fieldInt56983;
+    public int fieldInt56984;
+    public int fieldInt56985;
+    public int fieldInt56986;
+    public int fieldInt56987;
+    public int fieldInt56988;
+    public int fieldInt56989;
+    public int fieldInt56990;
+    public int fieldInt56991;
+    public int fieldInt56992;
+    public int fieldInt56993;
+    public int fieldInt56994;
+    public int fieldInt56995;
+    public int fieldInt56996;
+    public int fieldInt56997;
+    public int fieldInt56998;
+    public int fieldInt56999;
+    public int fieldInt57000;
+    public int fieldInt57001;
+    public int fieldInt57002;
+    public int fieldInt57003;
+    public int fieldInt57004;
+    public int fieldInt57005;
+    public int fieldInt57006;
+    public int fieldInt57007;
+    public int fieldInt57008;
+    public int fieldInt57009;
+    public int fieldInt57010;
+    public int fieldInt57011;
+    public int fieldInt57012;
+    public int fieldInt57013;
+    public int fieldInt57014;
+    public int fieldInt57015;
+    public int fieldInt57016;
+    public int fieldInt57017;
+    public int fieldInt57018;
+    public int fieldInt57019;
+    public int fieldInt57020;
+    public int fieldInt57021;
+    public int fieldInt57022;
+    public int fieldInt57023;
+    public int fieldInt57024;
+    public int fieldInt57025;
+    public int fieldInt57026;
+    public int fieldInt57027;
+    public int fieldInt57028;
+    public int fieldInt57029;
+    public int fieldInt57030;
+    public int fieldInt57031;
+    public int fieldInt57032;
+    public int fieldInt57033;
+    public int fieldInt57034;
+    public int fieldInt57035;
+    public int fieldInt57036;
+    public int fieldInt57037;
+    public int fieldInt57038;
+    public int fieldInt57039;
+    public int fieldInt57040;
+    public int fieldInt57041;
+    public int fieldInt57042;
+    public int fieldInt57043;
+    public int fieldInt57044;
+    public int fieldInt57045;
+    public int fieldInt57046;
+    public int fieldInt57047;
+    public int fieldInt57048;
+    public int fieldInt57049;
+    public int fieldInt57050;
+    public int fieldInt57051;
+    public int fieldInt57052;
+    public int fieldInt57053;
+    public int fieldInt57054;
+    public int fieldInt57055;
+    public int fieldInt57056;
+    public int fieldInt57057;
+    public int fieldInt57058;
+    public int fieldInt57059;
+    public int fieldInt57060;
+    public int fieldInt57061;
+    public int fieldInt57062;
+    public int fieldInt57063;
+    public int fieldInt57064;
+    public int fieldInt57065;
+    public int fieldInt57066;
+    public int fieldInt57067;
+    public int fieldInt57068;
+    public int fieldInt57069;
+    public int fieldInt57070;
+    public int fieldInt57071;
+    public int fieldInt57072;
+    public int fieldInt57073;
+    public int fieldInt57074;
+    public int fieldInt57075;
+    public int fieldInt57076;
+    public int fieldInt57077;
+    public int fieldInt57078;
+    public int fieldInt57079;
+    public int fieldInt57080;
+    public int fieldInt57081;
+    public int fieldInt57082;
+    public int fieldInt57083;
+    public int fieldInt57084;
+    public int fieldInt57085;
+    public int fieldInt57086;
+    public int fieldInt57087;
+    public int fieldInt57088;
+    public int fieldInt57089;
+    public int fieldInt57090;
+    public int fieldInt57091;
+    public int fieldInt57092;
+    public int fieldInt57093;
+    public int fieldInt57094;
+    public int fieldInt57095;
+    public int fieldInt57096;
+    public int fieldInt57097;
+    public int fieldInt57098;
+    public int fieldInt57099;
+    public int fieldInt57100;
+    public int fieldInt57101;
+    public int fieldInt57102;
+    public int fieldInt57103;
+    public int fieldInt57104;
+    public int fieldInt57105;
+    public int fieldInt57106;
+    public int fieldInt57107;
+    public int fieldInt57108;
+    public int fieldInt57109;
+    public int fieldInt57110;
+    public int fieldInt57111;
+    public int fieldInt57112;
+    public int fieldInt57113;
+    public int fieldInt57114;
+    public int fieldInt57115;
+    public int fieldInt57116;
+    public int fieldInt57117;
+    public int fieldInt57118;
+    public int fieldInt57119;
+    public int fieldInt57120;
+    public int fieldInt57121;
+    public int fieldInt57122;
+    public int fieldInt57123;
+    public int fieldInt57124;
+    public int fieldInt57125;
+    public int fieldInt57126;
+    public int fieldInt57127;
+    public int fieldInt57128;
+    public int fieldInt57129;
+    public int fieldInt57130;
+    public int fieldInt57131;
+    public int fieldInt57132;
+    public int fieldInt57133;
+    public int fieldInt57134;
+    public int fieldInt57135;
+    public int fieldInt57136;
+    public int fieldInt57137;
+    public int fieldInt57138;
+    public int fieldInt57139;
+    public int fieldInt57140;
+    public int fieldInt57141;
+    public int fieldInt57142;
+    public int fieldInt57143;
+    public int fieldInt57144;
+    public int fieldInt57145;
+    public int fieldInt57146;
+    public int fieldInt57147;
+    public int fieldInt57148;
+    public int fieldInt57149;
+    public int fieldInt57150;
+    public int fieldInt57151;
+    public int fieldInt57152;
+    public int fieldInt57153;
+    public int fieldInt57154;
+    public int fieldInt57155;
+    public int fieldInt57156;
+    public int fieldInt57157;
+    public int fieldInt57158;
+    public int fieldInt57159;
+    public int fieldInt57160;
+    public int fieldInt57161;
+    public int fieldInt57162;
+    public int fieldInt57163;
+    public int fieldInt57164;
+    public int fieldInt57165;
+    public int fieldInt57166;
+    public int fieldInt57167;
+    public int fieldInt57168;
+    public int fieldInt57169;
+    public int fieldInt57170;
+    public int fieldInt57171;
+    public int fieldInt57172;
+    public int fieldInt57173;
+    public int fieldInt57174;
+    public int fieldInt57175;
+    public int fieldInt57176;
+    public int fieldInt57177;
+    public int fieldInt57178;
+    public int fieldInt57179;
+    public int fieldInt57180;
+    public int fieldInt57181;
+    public int fieldInt57182;
+    public int fieldInt57183;
+    public int fieldInt57184;
+    public int fieldInt57185;
+    public int fieldInt57186;
+    public int fieldInt57187;
+    public int fieldInt57188;
+    public int fieldInt57189;
+    public int fieldInt57190;
+    public int fieldInt57191;
+    public int fieldInt57192;
+    public int fieldInt57193;
+    public int fieldInt57194;
+    public int fieldInt57195;
+    public int fieldInt57196;
+    public int fieldInt57197;
+    public int fieldInt57198;
+    public int fieldInt57199;
+    public int fieldInt57200;
+    public int fieldInt57201;
+    public int fieldInt57202;
+    public int fieldInt57203;
+    public int fieldInt57204;
+    public int fieldInt57205;
+    public int fieldInt57206;
+    public int fieldInt57207;
+    public int fieldInt57208;
+    public int fieldInt57209;
+    public int fieldInt57210;
+    public int fieldInt57211;
+    public int fieldInt57212;
+    public int fieldInt57213;
+    public int fieldInt57214;
+    public int fieldInt57215;
+    public int fieldInt57216;
+    public int fieldInt57217;
+    public int fieldInt57218;
+    public int fieldInt57219;
+    public int fieldInt57220;
+    public int fieldInt57221;
+    public int fieldInt57222;
+    public int fieldInt57223;
+    public int fieldInt57224;
+    public int fieldInt57225;
+    public int fieldInt57226;
+    public int fieldInt57227;
+    public int fieldInt57228;
+    public int fieldInt57229;
+    public int fieldInt57230;
+    public int fieldInt57231;
+    public int fieldInt57232;
+    public int fieldInt57233;
+    public int fieldInt57234;
+    public int fieldInt57235;
+    public int fieldInt57236;
+    public int fieldInt57237;
+    public int fieldInt57238;
+    public int fieldInt57239;
+    public int fieldInt57240;
+    public int fieldInt57241;
+    public int fieldInt57242;
+    public int fieldInt57243;
+    public int fieldInt57244;
+    public int fieldInt57245;
+    public int fieldInt57246;
+    public int fieldInt57247;
+    public int fieldInt57248;
+    public int fieldInt57249;
+    public int fieldInt57250;
+    public int fieldInt57251;
+    public int fieldInt57252;
+    public int fieldInt57253;
+    public int fieldInt57254;
+    public int fieldInt57255;
+    public int fieldInt57256;
+    public int fieldInt57257;
+    public int fieldInt57258;
+    public int fieldInt57259;
+    public int fieldInt57260;
+    public int fieldInt57261;
+    public int fieldInt57262;
+    public int fieldInt57263;
+    public int fieldInt57264;
+    public int fieldInt57265;
+    public int fieldInt57266;
+    public int fieldInt57267;
+    public int fieldInt57268;
+    public int fieldInt57269;
+    public int fieldInt57270;
+    public int fieldInt57271;
+    public int fieldInt57272;
+    public int fieldInt57273;
+    public int fieldInt57274;
+    public int fieldInt57275;
+    public int fieldInt57276;
+    public int fieldInt57277;
+    public int fieldInt57278;
+    public int fieldInt57279;
+    public int fieldInt57280;
+    public int fieldInt57281;
+    public int fieldInt57282;
+    public int fieldInt57283;
+    public int fieldInt57284;
+    public int fieldInt57285;
+    public int fieldInt57286;
+    public int fieldInt57287;
+    public int fieldInt57288;
+    public int fieldInt57289;
+    public int fieldInt57290;
+    public int fieldInt57291;
+    public int fieldInt57292;
+    public int fieldInt57293;
+    public int fieldInt57294;
+    public int fieldInt57295;
+    public int fieldInt57296;
+    public int fieldInt57297;
+    public int fieldInt57298;
+    public int fieldInt57299;
+    public int fieldInt57300;
+    public int fieldInt57301;
+    public int fieldInt57302;
+    public int fieldInt57303;
+    public int fieldInt57304;
+    public int fieldInt57305;
+    public int fieldInt57306;
+    public int fieldInt57307;
+    public int fieldInt57308;
+    public int fieldInt57309;
+    public int fieldInt57310;
+    public int fieldInt57311;
+    public int fieldInt57312;
+    public int fieldInt57313;
+    public int fieldInt57314;
+    public int fieldInt57315;
+    public int fieldInt57316;
+    public int fieldInt57317;
+    public int fieldInt57318;
+    public int fieldInt57319;
+    public int fieldInt57320;
+    public int fieldInt57321;
+    public int fieldInt57322;
+    public int fieldInt57323;
+    public int fieldInt57324;
+    public int fieldInt57325;
+    public int fieldInt57326;
+    public int fieldInt57327;
+    public int fieldInt57328;
+    public int fieldInt57329;
+    public int fieldInt57330;
+    public int fieldInt57331;
+    public int fieldInt57332;
+    public int fieldInt57333;
+    public int fieldInt57334;
+    public int fieldInt57335;
+    public int fieldInt57336;
+    public int fieldInt57337;
+    public int fieldInt57338;
+    public int fieldInt57339;
+    public int fieldInt57340;
+    public int fieldInt57341;
+    public int fieldInt57342;
+    public int fieldInt57343;
+    public int fieldInt57344;
+    public int fieldInt57345;
+    public int fieldInt57346;
+    public int fieldInt57347;
+    public int fieldInt57348;
+    public int fieldInt57349;
+    public int fieldInt57350;
+    public int fieldInt57351;
+    public int fieldInt57352;
+    public int fieldInt57353;
+    public int fieldInt57354;
+    public int fieldInt57355;
+    public int fieldInt57356;
+    public int fieldInt57357;
+    public int fieldInt57358;
+    public int fieldInt57359;
+    public int fieldInt57360;
+    public int fieldInt57361;
+    public int fieldInt57362;
+    public int fieldInt57363;
+    public int fieldInt57364;
+    public int fieldInt57365;
+    public int fieldInt57366;
+    public int fieldInt57367;
+    public int fieldInt57368;
+    public int fieldInt57369;
+    public int fieldInt57370;
+    public int fieldInt57371;
+    public int fieldInt57372;
+    public int fieldInt57373;
+    public int fieldInt57374;
+    public int fieldInt57375;
+    public int fieldInt57376;
+    public int fieldInt57377;
+    public int fieldInt57378;
+    public int fieldInt57379;
+    public int fieldInt57380;
+    public int fieldInt57381;
+    public int fieldInt57382;
+    public int fieldInt57383;
+    public int fieldInt57384;
+    public int fieldInt57385;
+    public int fieldInt57386;
+    public int fieldInt57387;
+    public int fieldInt57388;
+    public int fieldInt57389;
+    public int fieldInt57390;
+    public int fieldInt57391;
+    public int fieldInt57392;
+    public int fieldInt57393;
+    public int fieldInt57394;
+    public int fieldInt57395;
+    public int fieldInt57396;
+    public int fieldInt57397;
+    public int fieldInt57398;
+    public int fieldInt57399;
+    public int fieldInt57400;
+    public int fieldInt57401;
+    public int fieldInt57402;
+    public int fieldInt57403;
+    public int fieldInt57404;
+    public int fieldInt57405;
+    public int fieldInt57406;
+    public int fieldInt57407;
+    public int fieldInt57408;
+    public int fieldInt57409;
+    public int fieldInt57410;
+    public int fieldInt57411;
+    public int fieldInt57412;
+    public int fieldInt57413;
+    public int fieldInt57414;
+    public int fieldInt57415;
+    public int fieldInt57416;
+    public int fieldInt57417;
+    public int fieldInt57418;
+    public int fieldInt57419;
+    public int fieldInt57420;
+    public int fieldInt57421;
+    public int fieldInt57422;
+    public int fieldInt57423;
+    public int fieldInt57424;
+    public int fieldInt57425;
+    public int fieldInt57426;
+    public int fieldInt57427;
+    public int fieldInt57428;
+    public int fieldInt57429;
+    public int fieldInt57430;
+    public int fieldInt57431;
+    public int fieldInt57432;
+    public int fieldInt57433;
+    public int fieldInt57434;
+    public int fieldInt57435;
+    public int fieldInt57436;
+    public int fieldInt57437;
+    public int fieldInt57438;
+    public int fieldInt57439;
+    public int fieldInt57440;
+    public int fieldInt57441;
+    public int fieldInt57442;
+    public int fieldInt57443;
+    public int fieldInt57444;
+    public int fieldInt57445;
+    public int fieldInt57446;
+    public int fieldInt57447;
+    public int fieldInt57448;
+    public int fieldInt57449;
+    public int fieldInt57450;
+    public int fieldInt57451;
+    public int fieldInt57452;
+    public int fieldInt57453;
+    public int fieldInt57454;
+    public int fieldInt57455;
+    public int fieldInt57456;
+    public int fieldInt57457;
+    public int fieldInt57458;
+    public int fieldInt57459;
+    public int fieldInt57460;
+    public int fieldInt57461;
+    public int fieldInt57462;
+    public int fieldInt57463;
+    public int fieldInt57464;
+    public int fieldInt57465;
+    public int fieldInt57466;
+    public int fieldInt57467;
+    public int fieldInt57468;
+    public int fieldInt57469;
+    public int fieldInt57470;
+    public int fieldInt57471;
+    public int fieldInt57472;
+    public int fieldInt57473;
+    public int fieldInt57474;
+    public int fieldInt57475;
+    public int fieldInt57476;
+    public int fieldInt57477;
+    public int fieldInt57478;
+    public int fieldInt57479;
+    public int fieldInt57480;
+    public int fieldInt57481;
+    public int fieldInt57482;
+    public int fieldInt57483;
+    public int fieldInt57484;
+    public int fieldInt57485;
+    public int fieldInt57486;
+    public int fieldInt57487;
+    public int fieldInt57488;
+    public int fieldInt57489;
+    public int fieldInt57490;
+    public int fieldInt57491;
+    public int fieldInt57492;
+    public int fieldInt57493;
+    public int fieldInt57494;
+    public int fieldInt57495;
+    public int fieldInt57496;
+    public int fieldInt57497;
+    public int fieldInt57498;
+    public int fieldInt57499;
+    public int fieldInt57500;
+    public int fieldInt57501;
+    public int fieldInt57502;
+    public int fieldInt57503;
+    public int fieldInt57504;
+    public int fieldInt57505;
+    public int fieldInt57506;
+    public int fieldInt57507;
+    public int fieldInt57508;
+    public int fieldInt57509;
+    public int fieldInt57510;
+    public int fieldInt57511;
+    public int fieldInt57512;
+    public int fieldInt57513;
+    public int fieldInt57514;
+    public int fieldInt57515;
+    public int fieldInt57516;
+    public int fieldInt57517;
+    public int fieldInt57518;
+    public int fieldInt57519;
+    public int fieldInt57520;
+    public int fieldInt57521;
+    public int fieldInt57522;
+    public int fieldInt57523;
+    public int fieldInt57524;
+    public int fieldInt57525;
+    public int fieldInt57526;
+    public int fieldInt57527;
+    public int fieldInt57528;
+    public int fieldInt57529;
+    public int fieldInt57530;
+    public int fieldInt57531;
+    public int fieldInt57532;
+    public int fieldInt57533;
+    public int fieldInt57534;
+    public int fieldInt57535;
+    public int fieldInt57536;
+    public int fieldInt57537;
+    public int fieldInt57538;
+    public int fieldInt57539;
+    public int fieldInt57540;
+    public int fieldInt57541;
+    public int fieldInt57542;
+    public int fieldInt57543;
+    public int fieldInt57544;
+    public int fieldInt57545;
+    public int fieldInt57546;
+    public int fieldInt57547;
+    public int fieldInt57548;
+    public int fieldInt57549;
+    public int fieldInt57550;
+    public int fieldInt57551;
+    public int fieldInt57552;
+    public int fieldInt57553;
+    public int fieldInt57554;
+    public int fieldInt57555;
+    public int fieldInt57556;
+    public int fieldInt57557;
+    public int fieldInt57558;
+    public int fieldInt57559;
+    public int fieldInt57560;
+    public int fieldInt57561;
+    public int fieldInt57562;
+    public int fieldInt57563;
+    public int fieldInt57564;
+    public int fieldInt57565;
+    public int fieldInt57566;
+    public int fieldInt57567;
+    public int fieldInt57568;
+    public int fieldInt57569;
+    public int fieldInt57570;
+    public int fieldInt57571;
+    public int fieldInt57572;
+    public int fieldInt57573;
+    public int fieldInt57574;
+    public int fieldInt57575;
+    public int fieldInt57576;
+    public int fieldInt57577;
+    public int fieldInt57578;
+    public int fieldInt57579;
+    public int fieldInt57580;
+    public int fieldInt57581;
+    public int fieldInt57582;
+    public int fieldInt57583;
+    public int fieldInt57584;
+    public int fieldInt57585;
+    public int fieldInt57586;
+    public int fieldInt57587;
+    public int fieldInt57588;
+    public int fieldInt57589;
+    public int fieldInt57590;
+    public int fieldInt57591;
+    public int fieldInt57592;
+    public int fieldInt57593;
+    public int fieldInt57594;
+    public int fieldInt57595;
+    public int fieldInt57596;
+    public int fieldInt57597;
+    public int fieldInt57598;
+    public int fieldInt57599;
+    public int fieldInt57600;
+    public int fieldInt57601;
+    public int fieldInt57602;
+    public int fieldInt57603;
+    public int fieldInt57604;
+    public int fieldInt57605;
+    public int fieldInt57606;
+    public int fieldInt57607;
+    public int fieldInt57608;
+    public int fieldInt57609;
+    public int fieldInt57610;
+    public int fieldInt57611;
+    public int fieldInt57612;
+    public int fieldInt57613;
+    public int fieldInt57614;
+    public int fieldInt57615;
+    public int fieldInt57616;
+    public int fieldInt57617;
+    public int fieldInt57618;
+    public int fieldInt57619;
+    public int fieldInt57620;
+    public int fieldInt57621;
+    public int fieldInt57622;
+    public int fieldInt57623;
+    public int fieldInt57624;
+    public int fieldInt57625;
+    public int fieldInt57626;
+    public int fieldInt57627;
+    public int fieldInt57628;
+    public int fieldInt57629;
+    public int fieldInt57630;
+    public int fieldInt57631;
+    public int fieldInt57632;
+    public int fieldInt57633;
+    public int fieldInt57634;
+    public int fieldInt57635;
+    public int fieldInt57636;
+    public int fieldInt57637;
+    public int fieldInt57638;
+    public int fieldInt57639;
+    public int fieldInt57640;
+    public int fieldInt57641;
+    public int fieldInt57642;
+    public int fieldInt57643;
+    public int fieldInt57644;
+    public int fieldInt57645;
+    public int fieldInt57646;
+    public int fieldInt57647;
+    public int fieldInt57648;
+    public int fieldInt57649;
+    public int fieldInt57650;
+    public int fieldInt57651;
+    public int fieldInt57652;
+    public int fieldInt57653;
+    public int fieldInt57654;
+    public int fieldInt57655;
+    public int fieldInt57656;
+    public int fieldInt57657;
+    public int fieldInt57658;
+    public int fieldInt57659;
+    public int fieldInt57660;
+    public int fieldInt57661;
+    public int fieldInt57662;
+    public int fieldInt57663;
+    public int fieldInt57664;
+    public int fieldInt57665;
+    public int fieldInt57666;
+    public int fieldInt57667;
+    public int fieldInt57668;
+    public int fieldInt57669;
+    public int fieldInt57670;
+    public int fieldInt57671;
+    public int fieldInt57672;
+    public int fieldInt57673;
+    public int fieldInt57674;
+    public int fieldInt57675;
+    public int fieldInt57676;
+    public int fieldInt57677;
+    public int fieldInt57678;
+    public int fieldInt57679;
+    public int fieldInt57680;
+    public int fieldInt57681;
+    public int fieldInt57682;
+    public int fieldInt57683;
+    public int fieldInt57684;
+    public int fieldInt57685;
+    public int fieldInt57686;
+    public int fieldInt57687;
+    public int fieldInt57688;
+    public int fieldInt57689;
+    public int fieldInt57690;
+    public int fieldInt57691;
+    public int fieldInt57692;
+    public int fieldInt57693;
+    public int fieldInt57694;
+    public int fieldInt57695;
+    public int fieldInt57696;
+    public int fieldInt57697;
+    public int fieldInt57698;
+    public int fieldInt57699;
+    public int fieldInt57700;
+    public int fieldInt57701;
+    public int fieldInt57702;
+    public int fieldInt57703;
+    public int fieldInt57704;
+    public int fieldInt57705;
+    public int fieldInt57706;
+    public int fieldInt57707;
+    public int fieldInt57708;
+    public int fieldInt57709;
+    public int fieldInt57710;
+    public int fieldInt57711;
+    public int fieldInt57712;
+    public int fieldInt57713;
+    public int fieldInt57714;
+    public int fieldInt57715;
+    public int fieldInt57716;
+    public int fieldInt57717;
+    public int fieldInt57718;
+    public int fieldInt57719;
+    public int fieldInt57720;
+    public int fieldInt57721;
+    public int fieldInt57722;
+    public int fieldInt57723;
+    public int fieldInt57724;
+    public int fieldInt57725;
+    public int fieldInt57726;
+    public int fieldInt57727;
+    public int fieldInt57728;
+    public int fieldInt57729;
+    public int fieldInt57730;
+    public int fieldInt57731;
+    public int fieldInt57732;
+    public int fieldInt57733;
+    public int fieldInt57734;
+    public int fieldInt57735;
+    public int fieldInt57736;
+    public int fieldInt57737;
+    public int fieldInt57738;
+    public int fieldInt57739;
+    public int fieldInt57740;
+    public int fieldInt57741;
+    public int fieldInt57742;
+    public int fieldInt57743;
+    public int fieldInt57744;
+    public int fieldInt57745;
+    public int fieldInt57746;
+    public int fieldInt57747;
+    public int fieldInt57748;
+    public int fieldInt57749;
+    public int fieldInt57750;
+    public int fieldInt57751;
+    public int fieldInt57752;
+    public int fieldInt57753;
+    public int fieldInt57754;
+    public int fieldInt57755;
+    public int fieldInt57756;
+    public int fieldInt57757;
+    public int fieldInt57758;
+    public int fieldInt57759;
+    public int fieldInt57760;
+    public int fieldInt57761;
+    public int fieldInt57762;
+    public int fieldInt57763;
+    public int fieldInt57764;
+    public int fieldInt57765;
+    public int fieldInt57766;
+    public int fieldInt57767;
+    public int fieldInt57768;
+    public int fieldInt57769;
+    public int fieldInt57770;
+    public int fieldInt57771;
+    public int fieldInt57772;
+    public int fieldInt57773;
+    public int fieldInt57774;
+    public int fieldInt57775;
+    public int fieldInt57776;
+    public int fieldInt57777;
+    public int fieldInt57778;
+    public int fieldInt57779;
+    public int fieldInt57780;
+    public int fieldInt57781;
+    public int fieldInt57782;
+    public int fieldInt57783;
+    public int fieldInt57784;
+    public int fieldInt57785;
+    public int fieldInt57786;
+    public int fieldInt57787;
+    public int fieldInt57788;
+    public int fieldInt57789;
+    public int fieldInt57790;
+    public int fieldInt57791;
+    public int fieldInt57792;
+    public int fieldInt57793;
+    public int fieldInt57794;
+    public int fieldInt57795;
+    public int fieldInt57796;
+    public int fieldInt57797;
+    public int fieldInt57798;
+    public int fieldInt57799;
+    public int fieldInt57800;
+    public int fieldInt57801;
+    public int fieldInt57802;
+    public int fieldInt57803;
+    public int fieldInt57804;
+    public int fieldInt57805;
+    public int fieldInt57806;
+    public int fieldInt57807;
+    public int fieldInt57808;
+    public int fieldInt57809;
+    public int fieldInt57810;
+    public int fieldInt57811;
+    public int fieldInt57812;
+    public int fieldInt57813;
+    public int fieldInt57814;
+    public int fieldInt57815;
+    public int fieldInt57816;
+    public int fieldInt57817;
+    public int fieldInt57818;
+    public int fieldInt57819;
+    public int fieldInt57820;
+    public int fieldInt57821;
+    public int fieldInt57822;
+    public int fieldInt57823;
+    public int fieldInt57824;
+    public int fieldInt57825;
+    public int fieldInt57826;
+    public int fieldInt57827;
+    public int fieldInt57828;
+    public int fieldInt57829;
+    public int fieldInt57830;
+    public int fieldInt57831;
+    public int fieldInt57832;
+    public int fieldInt57833;
+    public int fieldInt57834;
+    public int fieldInt57835;
+    public int fieldInt57836;
+    public int fieldInt57837;
+    public int fieldInt57838;
+    public int fieldInt57839;
+    public int fieldInt57840;
+    public int fieldInt57841;
+    public int fieldInt57842;
+    public int fieldInt57843;
+    public int fieldInt57844;
+    public int fieldInt57845;
+    public int fieldInt57846;
+    public int fieldInt57847;
+    public int fieldInt57848;
+    public int fieldInt57849;
+    public int fieldInt57850;
+    public int fieldInt57851;
+    public int fieldInt57852;
+    public int fieldInt57853;
+    public int fieldInt57854;
+    public int fieldInt57855;
+    public int fieldInt57856;
+    public int fieldInt57857;
+    public int fieldInt57858;
+    public int fieldInt57859;
+    public int fieldInt57860;
+    public int fieldInt57861;
+    public int fieldInt57862;
+    public int fieldInt57863;
+    public int fieldInt57864;
+    public int fieldInt57865;
+    public int fieldInt57866;
+    public int fieldInt57867;
+    public int fieldInt57868;
+    public int fieldInt57869;
+    public int fieldInt57870;
+    public int fieldInt57871;
+    public int fieldInt57872;
+    public int fieldInt57873;
+    public int fieldInt57874;
+    public int fieldInt57875;
+    public int fieldInt57876;
+    public int fieldInt57877;
+    public int fieldInt57878;
+    public int fieldInt57879;
+    public int fieldInt57880;
+    public int fieldInt57881;
+    public int fieldInt57882;
+    public int fieldInt57883;
+    public int fieldInt57884;
+    public int fieldInt57885;
+    public int fieldInt57886;
+    public int fieldInt57887;
+    public int fieldInt57888;
+    public int fieldInt57889;
+    public int fieldInt57890;
+    public int fieldInt57891;
+    public int fieldInt57892;
+    public int fieldInt57893;
+    public int fieldInt57894;
+    public int fieldInt57895;
+    public int fieldInt57896;
+    public int fieldInt57897;
+    public int fieldInt57898;
+    public int fieldInt57899;
+    public int fieldInt57900;
+    public int fieldInt57901;
+    public int fieldInt57902;
+    public int fieldInt57903;
+    public int fieldInt57904;
+    public int fieldInt57905;
+    public int fieldInt57906;
+    public int fieldInt57907;
+    public int fieldInt57908;
+    public int fieldInt57909;
+    public int fieldInt57910;
+    public int fieldInt57911;
+    public int fieldInt57912;
+    public int fieldInt57913;
+    public int fieldInt57914;
+    public int fieldInt57915;
+    public int fieldInt57916;
+    public int fieldInt57917;
+    public int fieldInt57918;
+    public int fieldInt57919;
+    public int fieldInt57920;
+    public int fieldInt57921;
+    public int fieldInt57922;
+    public int fieldInt57923;
+    public int fieldInt57924;
+    public int fieldInt57925;
+    public int fieldInt57926;
+    public int fieldInt57927;
+    public int fieldInt57928;
+    public int fieldInt57929;
+    public int fieldInt57930;
+    public int fieldInt57931;
+    public int fieldInt57932;
+    public int fieldInt57933;
+    public int fieldInt57934;
+    public int fieldInt57935;
+    public int fieldInt57936;
+    public int fieldInt57937;
+    public int fieldInt57938;
+    public int fieldInt57939;
+    public int fieldInt57940;
+    public int fieldInt57941;
+    public int fieldInt57942;
+    public int fieldInt57943;
+    public int fieldInt57944;
+    public int fieldInt57945;
+    public int fieldInt57946;
+    public int fieldInt57947;
+    public int fieldInt57948;
+    public int fieldInt57949;
+    public int fieldInt57950;
+    public int fieldInt57951;
+    public int fieldInt57952;
+    public int fieldInt57953;
+    public int fieldInt57954;
+    public int fieldInt57955;
+    public int fieldInt57956;
+    public int fieldInt57957;
+    public int fieldInt57958;
+    public int fieldInt57959;
+    public int fieldInt57960;
+    public int fieldInt57961;
+    public int fieldInt57962;
+    public int fieldInt57963;
+    public int fieldInt57964;
+    public int fieldInt57965;
+    public int fieldInt57966;
+    public int fieldInt57967;
+    public int fieldInt57968;
+    public int fieldInt57969;
+    public int fieldInt57970;
+    public int fieldInt57971;
+    public int fieldInt57972;
+    public int fieldInt57973;
+    public int fieldInt57974;
+    public int fieldInt57975;
+    public int fieldInt57976;
+    public int fieldInt57977;
+    public int fieldInt57978;
+    public int fieldInt57979;
+    public int fieldInt57980;
+    public int fieldInt57981;
+    public int fieldInt57982;
+    public int fieldInt57983;
+    public int fieldInt57984;
+    public int fieldInt57985;
+    public int fieldInt57986;
+    public int fieldInt57987;
+    public int fieldInt57988;
+    public int fieldInt57989;
+    public int fieldInt57990;
+    public int fieldInt57991;
+    public int fieldInt57992;
+    public int fieldInt57993;
+    public int fieldInt57994;
+    public int fieldInt57995;
+    public int fieldInt57996;
+    public int fieldInt57997;
+    public int fieldInt57998;
+    public int fieldInt57999;
+    public int fieldInt58000;
+    public int fieldInt58001;
+    public int fieldInt58002;
+    public int fieldInt58003;
+    public int fieldInt58004;
+    public int fieldInt58005;
+    public int fieldInt58006;
+    public int fieldInt58007;
+    public int fieldInt58008;
+    public int fieldInt58009;
+    public int fieldInt58010;
+    public int fieldInt58011;
+    public int fieldInt58012;
+    public int fieldInt58013;
+    public int fieldInt58014;
+    public int fieldInt58015;
+    public int fieldInt58016;
+    public int fieldInt58017;
+    public int fieldInt58018;
+    public int fieldInt58019;
+    public int fieldInt58020;
+    public int fieldInt58021;
+    public int fieldInt58022;
+    public int fieldInt58023;
+    public int fieldInt58024;
+    public int fieldInt58025;
+    public int fieldInt58026;
+    public int fieldInt58027;
+    public int fieldInt58028;
+    public int fieldInt58029;
+    public int fieldInt58030;
+    public int fieldInt58031;
+    public int fieldInt58032;
+    public int fieldInt58033;
+    public int fieldInt58034;
+    public int fieldInt58035;
+    public int fieldInt58036;
+    public int fieldInt58037;
+    public int fieldInt58038;
+    public int fieldInt58039;
+    public int fieldInt58040;
+    public int fieldInt58041;
+    public int fieldInt58042;
+    public int fieldInt58043;
+    public int fieldInt58044;
+    public int fieldInt58045;
+    public int fieldInt58046;
+    public int fieldInt58047;
+    public int fieldInt58048;
+    public int fieldInt58049;
+    public int fieldInt58050;
+    public int fieldInt58051;
+    public int fieldInt58052;
+    public int fieldInt58053;
+    public int fieldInt58054;
+    public int fieldInt58055;
+    public int fieldInt58056;
+    public int fieldInt58057;
+    public int fieldInt58058;
+    public int fieldInt58059;
+    public int fieldInt58060;
+    public int fieldInt58061;
+    public int fieldInt58062;
+    public int fieldInt58063;
+    public int fieldInt58064;
+    public int fieldInt58065;
+    public int fieldInt58066;
+    public int fieldInt58067;
+    public int fieldInt58068;
+    public int fieldInt58069;
+    public int fieldInt58070;
+    public int fieldInt58071;
+    public int fieldInt58072;
+    public int fieldInt58073;
+    public int fieldInt58074;
+    public int fieldInt58075;
+    public int fieldInt58076;
+    public int fieldInt58077;
+    public int fieldInt58078;
+    public int fieldInt58079;
+    public int fieldInt58080;
+    public int fieldInt58081;
+    public int fieldInt58082;
+    public int fieldInt58083;
+    public int fieldInt58084;
+    public int fieldInt58085;
+    public int fieldInt58086;
+    public int fieldInt58087;
+    public int fieldInt58088;
+    public int fieldInt58089;
+    public int fieldInt58090;
+    public int fieldInt58091;
+    public int fieldInt58092;
+    public int fieldInt58093;
+    public int fieldInt58094;
+    public int fieldInt58095;
+    public int fieldInt58096;
+    public int fieldInt58097;
+    public int fieldInt58098;
+    public int fieldInt58099;
+    public int fieldInt58100;
+    public int fieldInt58101;
+    public int fieldInt58102;
+    public int fieldInt58103;
+    public int fieldInt58104;
+    public int fieldInt58105;
+    public int fieldInt58106;
+    public int fieldInt58107;
+    public int fieldInt58108;
+    public int fieldInt58109;
+    public int fieldInt58110;
+    public int fieldInt58111;
+    public int fieldInt58112;
+    public int fieldInt58113;
+    public int fieldInt58114;
+    public int fieldInt58115;
+    public int fieldInt58116;
+    public int fieldInt58117;
+    public int fieldInt58118;
+    public int fieldInt58119;
+    public int fieldInt58120;
+    public int fieldInt58121;
+    public int fieldInt58122;
+    public int fieldInt58123;
+    public int fieldInt58124;
+    public int fieldInt58125;
+    public int fieldInt58126;
+    public int fieldInt58127;
+    public int fieldInt58128;
+    public int fieldInt58129;
+    public int fieldInt58130;
+    public int fieldInt58131;
+    public int fieldInt58132;
+    public int fieldInt58133;
+    public int fieldInt58134;
+    public int fieldInt58135;
+    public int fieldInt58136;
+    public int fieldInt58137;
+    public int fieldInt58138;
+    public int fieldInt58139;
+    public int fieldInt58140;
+    public int fieldInt58141;
+    public int fieldInt58142;
+    public int fieldInt58143;
+    public int fieldInt58144;
+    public int fieldInt58145;
+    public int fieldInt58146;
+    public int fieldInt58147;
+    public int fieldInt58148;
+    public int fieldInt58149;
+    public int fieldInt58150;
+    public int fieldInt58151;
+    public int fieldInt58152;
+    public int fieldInt58153;
+    public int fieldInt58154;
+    public int fieldInt58155;
+    public int fieldInt58156;
+    public int fieldInt58157;
+    public int fieldInt58158;
+    public int fieldInt58159;
+    public int fieldInt58160;
+    public int fieldInt58161;
+    public int fieldInt58162;
+    public int fieldInt58163;
+    public int fieldInt58164;
+    public int fieldInt58165;
+    public int fieldInt58166;
+    public int fieldInt58167;
+    public int fieldInt58168;
+    public int fieldInt58169;
+    public int fieldInt58170;
+    public int fieldInt58171;
+    public int fieldInt58172;
+    public int fieldInt58173;
+    public int fieldInt58174;
+    public int fieldInt58175;
+    public int fieldInt58176;
+    public int fieldInt58177;
+    public int fieldInt58178;
+    public int fieldInt58179;
+    public int fieldInt58180;
+    public int fieldInt58181;
+    public int fieldInt58182;
+    public int fieldInt58183;
+    public int fieldInt58184;
+    public int fieldInt58185;
+    public int fieldInt58186;
+    public int fieldInt58187;
+    public int fieldInt58188;
+    public int fieldInt58189;
+    public int fieldInt58190;
+    public int fieldInt58191;
+    public int fieldInt58192;
+    public int fieldInt58193;
+    public int fieldInt58194;
+    public int fieldInt58195;
+    public int fieldInt58196;
+    public int fieldInt58197;
+    public int fieldInt58198;
+    public int fieldInt58199;
+    public int fieldInt58200;
+    public int fieldInt58201;
+    public int fieldInt58202;
+    public int fieldInt58203;
+    public int fieldInt58204;
+    public int fieldInt58205;
+    public int fieldInt58206;
+    public int fieldInt58207;
+    public int fieldInt58208;
+    public int fieldInt58209;
+    public int fieldInt58210;
+    public int fieldInt58211;
+    public int fieldInt58212;
+    public int fieldInt58213;
+    public int fieldInt58214;
+    public int fieldInt58215;
+    public int fieldInt58216;
+    public int fieldInt58217;
+    public int fieldInt58218;
+    public int fieldInt58219;
+    public int fieldInt58220;
+    public int fieldInt58221;
+    public int fieldInt58222;
+    public int fieldInt58223;
+    public int fieldInt58224;
+    public int fieldInt58225;
+    public int fieldInt58226;
+    public int fieldInt58227;
+    public int fieldInt58228;
+    public int fieldInt58229;
+    public int fieldInt58230;
+    public int fieldInt58231;
+    public int fieldInt58232;
+    public int fieldInt58233;
+    public int fieldInt58234;
+    public int fieldInt58235;
+    public int fieldInt58236;
+    public int fieldInt58237;
+    public int fieldInt58238;
+    public int fieldInt58239;
+    public int fieldInt58240;
+    public int fieldInt58241;
+    public int fieldInt58242;
+    public int fieldInt58243;
+    public int fieldInt58244;
+    public int fieldInt58245;
+    public int fieldInt58246;
+    public int fieldInt58247;
+    public int fieldInt58248;
+    public int fieldInt58249;
+    public int fieldInt58250;
+    public int fieldInt58251;
+    public int fieldInt58252;
+    public int fieldInt58253;
+    public int fieldInt58254;
+    public int fieldInt58255;
+    public int fieldInt58256;
+    public int fieldInt58257;
+    public int fieldInt58258;
+    public int fieldInt58259;
+    public int fieldInt58260;
+    public int fieldInt58261;
+    public int fieldInt58262;
+    public int fieldInt58263;
+    public int fieldInt58264;
+    public int fieldInt58265;
+    public int fieldInt58266;
+    public int fieldInt58267;
+    public int fieldInt58268;
+    public int fieldInt58269;
+    public int fieldInt58270;
+    public int fieldInt58271;
+    public int fieldInt58272;
+    public int fieldInt58273;
+    public int fieldInt58274;
+    public int fieldInt58275;
+    public int fieldInt58276;
+    public int fieldInt58277;
+    public int fieldInt58278;
+    public int fieldInt58279;
+    public int fieldInt58280;
+    public int fieldInt58281;
+    public int fieldInt58282;
+    public int fieldInt58283;
+    public int fieldInt58284;
+    public int fieldInt58285;
+    public int fieldInt58286;
+    public int fieldInt58287;
+    public int fieldInt58288;
+    public int fieldInt58289;
+    public int fieldInt58290;
+    public int fieldInt58291;
+    public int fieldInt58292;
+    public int fieldInt58293;
+    public int fieldInt58294;
+    public int fieldInt58295;
+    public int fieldInt58296;
+    public int fieldInt58297;
+    public int fieldInt58298;
+    public int fieldInt58299;
+    public int fieldInt58300;
+    public int fieldInt58301;
+    public int fieldInt58302;
+    public int fieldInt58303;
+    public int fieldInt58304;
+    public int fieldInt58305;
+    public int fieldInt58306;
+    public int fieldInt58307;
+    public int fieldInt58308;
+    public int fieldInt58309;
+    public int fieldInt58310;
+    public int fieldInt58311;
+    public int fieldInt58312;
+    public int fieldInt58313;
+    public int fieldInt58314;
+    public int fieldInt58315;
+    public int fieldInt58316;
+    public int fieldInt58317;
+    public int fieldInt58318;
+    public int fieldInt58319;
+    public int fieldInt58320;
+    public int fieldInt58321;
+    public int fieldInt58322;
+    public int fieldInt58323;
+    public int fieldInt58324;
+    public int fieldInt58325;
+    public int fieldInt58326;
+    public int fieldInt58327;
+    public int fieldInt58328;
+    public int fieldInt58329;
+    public int fieldInt58330;
+    public int fieldInt58331;
+    public int fieldInt58332;
+    public int fieldInt58333;
+    public int fieldInt58334;
+    public int fieldInt58335;
+    public int fieldInt58336;
+    public int fieldInt58337;
+    public int fieldInt58338;
+    public int fieldInt58339;
+    public int fieldInt58340;
+    public int fieldInt58341;
+    public int fieldInt58342;
+    public int fieldInt58343;
+    public int fieldInt58344;
+    public int fieldInt58345;
+    public int fieldInt58346;
+    public int fieldInt58347;
+    public int fieldInt58348;
+    public int fieldInt58349;
+    public int fieldInt58350;
+    public int fieldInt58351;
+    public int fieldInt58352;
+    public int fieldInt58353;
+    public int fieldInt58354;
+    public int fieldInt58355;
+    public int fieldInt58356;
+    public int fieldInt58357;
+    public int fieldInt58358;
+    public int fieldInt58359;
+    public int fieldInt58360;
+    public int fieldInt58361;
+    public int fieldInt58362;
+    public int fieldInt58363;
+    public int fieldInt58364;
+    public int fieldInt58365;
+    public int fieldInt58366;
+    public int fieldInt58367;
+    public int fieldInt58368;
+    public int fieldInt58369;
+    public int fieldInt58370;
+    public int fieldInt58371;
+    public int fieldInt58372;
+    public int fieldInt58373;
+    public int fieldInt58374;
+    public int fieldInt58375;
+    public int fieldInt58376;
+    public int fieldInt58377;
+    public int fieldInt58378;
+    public int fieldInt58379;
+    public int fieldInt58380;
+    public int fieldInt58381;
+    public int fieldInt58382;
+    public int fieldInt58383;
+    public int fieldInt58384;
+    public int fieldInt58385;
+    public int fieldInt58386;
+    public int fieldInt58387;
+    public int fieldInt58388;
+    public int fieldInt58389;
+    public int fieldInt58390;
+    public int fieldInt58391;
+    public int fieldInt58392;
+    public int fieldInt58393;
+    public int fieldInt58394;
+    public int fieldInt58395;
+    public int fieldInt58396;
+    public int fieldInt58397;
+    public int fieldInt58398;
+    public int fieldInt58399;
+    public int fieldInt58400;
+    public int fieldInt58401;
+    public int fieldInt58402;
+    public int fieldInt58403;
+    public int fieldInt58404;
+    public int fieldInt58405;
+    public int fieldInt58406;
+    public int fieldInt58407;
+    public int fieldInt58408;
+    public int fieldInt58409;
+    public int fieldInt58410;
+    public int fieldInt58411;
+    public int fieldInt58412;
+    public int fieldInt58413;
+    public int fieldInt58414;
+    public int fieldInt58415;
+    public int fieldInt58416;
+    public int fieldInt58417;
+    public int fieldInt58418;
+    public int fieldInt58419;
+    public int fieldInt58420;
+    public int fieldInt58421;
+    public int fieldInt58422;
+    public int fieldInt58423;
+    public int fieldInt58424;
+    public int fieldInt58425;
+    public int fieldInt58426;
+    public int fieldInt58427;
+    public int fieldInt58428;
+    public int fieldInt58429;
+    public int fieldInt58430;
+    public int fieldInt58431;
+    public int fieldInt58432;
+    public int fieldInt58433;
+    public int fieldInt58434;
+    public int fieldInt58435;
+    public int fieldInt58436;
+    public int fieldInt58437;
+    public int fieldInt58438;
+    public int fieldInt58439;
+    public int fieldInt58440;
+    public int fieldInt58441;
+    public int fieldInt58442;
+    public int fieldInt58443;
+    public int fieldInt58444;
+    public int fieldInt58445;
+    public int fieldInt58446;
+    public int fieldInt58447;
+    public int fieldInt58448;
+    public int fieldInt58449;
+    public int fieldInt58450;
+    public int fieldInt58451;
+    public int fieldInt58452;
+    public int fieldInt58453;
+    public int fieldInt58454;
+    public int fieldInt58455;
+    public int fieldInt58456;
+    public int fieldInt58457;
+    public int fieldInt58458;
+    public int fieldInt58459;
+    public int fieldInt58460;
+    public int fieldInt58461;
+    public int fieldInt58462;
+    public int fieldInt58463;
+    public int fieldInt58464;
+    public int fieldInt58465;
+    public int fieldInt58466;
+    public int fieldInt58467;
+    public int fieldInt58468;
+    public int fieldInt58469;
+    public int fieldInt58470;
+    public int fieldInt58471;
+    public int fieldInt58472;
+    public int fieldInt58473;
+    public int fieldInt58474;
+    public int fieldInt58475;
+    public int fieldInt58476;
+    public int fieldInt58477;
+    public int fieldInt58478;
+    public int fieldInt58479;
+    public int fieldInt58480;
+    public int fieldInt58481;
+    public int fieldInt58482;
+    public int fieldInt58483;
+    public int fieldInt58484;
+    public int fieldInt58485;
+    public int fieldInt58486;
+    public int fieldInt58487;
+    public int fieldInt58488;
+    public int fieldInt58489;
+    public int fieldInt58490;
+    public int fieldInt58491;
+    public int fieldInt58492;
+    public int fieldInt58493;
+    public int fieldInt58494;
+    public int fieldInt58495;
+    public int fieldInt58496;
+    public int fieldInt58497;
+    public int fieldInt58498;
+    public int fieldInt58499;
+    public int fieldInt58500;
+    public int fieldInt58501;
+    public int fieldInt58502;
+    public int fieldInt58503;
+    public int fieldInt58504;
+    public int fieldInt58505;
+    public int fieldInt58506;
+    public int fieldInt58507;
+    public int fieldInt58508;
+    public int fieldInt58509;
+    public int fieldInt58510;
+    public int fieldInt58511;
+    public int fieldInt58512;
+    public int fieldInt58513;
+    public int fieldInt58514;
+    public int fieldInt58515;
+    public int fieldInt58516;
+    public int fieldInt58517;
+    public int fieldInt58518;
+    public int fieldInt58519;
+    public int fieldInt58520;
+    public int fieldInt58521;
+    public int fieldInt58522;
+    public int fieldInt58523;
+    public int fieldInt58524;
+    public int fieldInt58525;
+    public int fieldInt58526;
+    public int fieldInt58527;
+    public int fieldInt58528;
+    public int fieldInt58529;
+    public int fieldInt58530;
+    public int fieldInt58531;
+    public int fieldInt58532;
+    public int fieldInt58533;
+    public int fieldInt58534;
+    public int fieldInt58535;
+    public int fieldInt58536;
+    public int fieldInt58537;
+    public int fieldInt58538;
+    public int fieldInt58539;
+    public int fieldInt58540;
+    public int fieldInt58541;
+    public int fieldInt58542;
+    public int fieldInt58543;
+    public int fieldInt58544;
+    public int fieldInt58545;
+    public int fieldInt58546;
+    public int fieldInt58547;
+    public int fieldInt58548;
+    public int fieldInt58549;
+    public int fieldInt58550;
+    public int fieldInt58551;
+    public int fieldInt58552;
+    public int fieldInt58553;
+    public int fieldInt58554;
+    public int fieldInt58555;
+    public int fieldInt58556;
+    public int fieldInt58557;
+    public int fieldInt58558;
+    public int fieldInt58559;
+    public int fieldInt58560;
+    public int fieldInt58561;
+    public int fieldInt58562;
+    public int fieldInt58563;
+    public int fieldInt58564;
+    public int fieldInt58565;
+    public int fieldInt58566;
+    public int fieldInt58567;
+    public int fieldInt58568;
+    public int fieldInt58569;
+    public int fieldInt58570;
+    public int fieldInt58571;
+    public int fieldInt58572;
+    public int fieldInt58573;
+    public int fieldInt58574;
+    public int fieldInt58575;
+    public int fieldInt58576;
+    public int fieldInt58577;
+    public int fieldInt58578;
+    public int fieldInt58579;
+    public int fieldInt58580;
+    public int fieldInt58581;
+    public int fieldInt58582;
+    public int fieldInt58583;
+    public int fieldInt58584;
+    public int fieldInt58585;
+    public int fieldInt58586;
+    public int fieldInt58587;
+    public int fieldInt58588;
+    public int fieldInt58589;
+    public int fieldInt58590;
+    public int fieldInt58591;
+    public int fieldInt58592;
+    public int fieldInt58593;
+    public int fieldInt58594;
+    public int fieldInt58595;
+    public int fieldInt58596;
+    public int fieldInt58597;
+    public int fieldInt58598;
+    public int fieldInt58599;
+    public int fieldInt58600;
+    public int fieldInt58601;
+    public int fieldInt58602;
+    public int fieldInt58603;
+    public int fieldInt58604;
+    public int fieldInt58605;
+    public int fieldInt58606;
+    public int fieldInt58607;
+    public int fieldInt58608;
+    public int fieldInt58609;
+    public int fieldInt58610;
+    public int fieldInt58611;
+    public int fieldInt58612;
+    public int fieldInt58613;
+    public int fieldInt58614;
+    public int fieldInt58615;
+    public int fieldInt58616;
+    public int fieldInt58617;
+    public int fieldInt58618;
+    public int fieldInt58619;
+    public int fieldInt58620;
+    public int fieldInt58621;
+    public int fieldInt58622;
+    public int fieldInt58623;
+    public int fieldInt58624;
+    public int fieldInt58625;
+    public int fieldInt58626;
+    public int fieldInt58627;
+    public int fieldInt58628;
+    public int fieldInt58629;
+    public int fieldInt58630;
+    public int fieldInt58631;
+    public int fieldInt58632;
+    public int fieldInt58633;
+    public int fieldInt58634;
+    public int fieldInt58635;
+    public int fieldInt58636;
+    public int fieldInt58637;
+    public int fieldInt58638;
+    public int fieldInt58639;
+    public int fieldInt58640;
+    public int fieldInt58641;
+    public int fieldInt58642;
+    public int fieldInt58643;
+    public int fieldInt58644;
+    public int fieldInt58645;
+    public int fieldInt58646;
+    public int fieldInt58647;
+    public int fieldInt58648;
+    public int fieldInt58649;
+    public int fieldInt58650;
+    public int fieldInt58651;
+    public int fieldInt58652;
+    public int fieldInt58653;
+    public int fieldInt58654;
+    public int fieldInt58655;
+    public int fieldInt58656;
+    public int fieldInt58657;
+    public int fieldInt58658;
+    public int fieldInt58659;
+    public int fieldInt58660;
+    public int fieldInt58661;
+    public int fieldInt58662;
+    public int fieldInt58663;
+    public int fieldInt58664;
+    public int fieldInt58665;
+    public int fieldInt58666;
+    public int fieldInt58667;
+    public int fieldInt58668;
+    public int fieldInt58669;
+    public int fieldInt58670;
+    public int fieldInt58671;
+    public int fieldInt58672;
+    public int fieldInt58673;
+    public int fieldInt58674;
+    public int fieldInt58675;
+    public int fieldInt58676;
+    public int fieldInt58677;
+    public int fieldInt58678;
+    public int fieldInt58679;
+    public int fieldInt58680;
+    public int fieldInt58681;
+    public int fieldInt58682;
+    public int fieldInt58683;
+    public int fieldInt58684;
+    public int fieldInt58685;
+    public int fieldInt58686;
+    public int fieldInt58687;
+    public int fieldInt58688;
+    public int fieldInt58689;
+    public int fieldInt58690;
+    public int fieldInt58691;
+    public int fieldInt58692;
+    public int fieldInt58693;
+    public int fieldInt58694;
+    public int fieldInt58695;
+    public int fieldInt58696;
+    public int fieldInt58697;
+    public int fieldInt58698;
+    public int fieldInt58699;
+    public int fieldInt58700;
+    public int fieldInt58701;
+    public int fieldInt58702;
+    public int fieldInt58703;
+    public int fieldInt58704;
+    public int fieldInt58705;
+    public int fieldInt58706;
+    public int fieldInt58707;
+    public int fieldInt58708;
+    public int fieldInt58709;
+    public int fieldInt58710;
+    public int fieldInt58711;
+    public int fieldInt58712;
+    public int fieldInt58713;
+    public int fieldInt58714;
+    public int fieldInt58715;
+    public int fieldInt58716;
+    public int fieldInt58717;
+    public int fieldInt58718;
+    public int fieldInt58719;
+    public int fieldInt58720;
+    public int fieldInt58721;
+    public int fieldInt58722;
+    public int fieldInt58723;
+    public int fieldInt58724;
+    public int fieldInt58725;
+    public int fieldInt58726;
+    public int fieldInt58727;
+    public int fieldInt58728;
+    public int fieldInt58729;
+    public int fieldInt58730;
+    public int fieldInt58731;
+    public int fieldInt58732;
+    public int fieldInt58733;
+    public int fieldInt58734;
+    public int fieldInt58735;
+    public int fieldInt58736;
+    public int fieldInt58737;
+    public int fieldInt58738;
+    public int fieldInt58739;
+    public int fieldInt58740;
+    public int fieldInt58741;
+    public int fieldInt58742;
+    public int fieldInt58743;
+    public int fieldInt58744;
+    public int fieldInt58745;
+    public int fieldInt58746;
+    public int fieldInt58747;
+    public int fieldInt58748;
+    public int fieldInt58749;
+    public int fieldInt58750;
+    public int fieldInt58751;
+    public int fieldInt58752;
+    public int fieldInt58753;
+    public int fieldInt58754;
+    public int fieldInt58755;
+    public int fieldInt58756;
+    public int fieldInt58757;
+    public int fieldInt58758;
+    public int fieldInt58759;
+    public int fieldInt58760;
+    public int fieldInt58761;
+    public int fieldInt58762;
+    public int fieldInt58763;
+    public int fieldInt58764;
+    public int fieldInt58765;
+    public int fieldInt58766;
+    public int fieldInt58767;
+    public int fieldInt58768;
+    public int fieldInt58769;
+    public int fieldInt58770;
+    public int fieldInt58771;
+    public int fieldInt58772;
+    public int fieldInt58773;
+    public int fieldInt58774;
+    public int fieldInt58775;
+    public int fieldInt58776;
+    public int fieldInt58777;
+    public int fieldInt58778;
+    public int fieldInt58779;
+    public int fieldInt58780;
+    public int fieldInt58781;
+    public int fieldInt58782;
+    public int fieldInt58783;
+    public int fieldInt58784;
+    public int fieldInt58785;
+    public int fieldInt58786;
+    public int fieldInt58787;
+    public int fieldInt58788;
+    public int fieldInt58789;
+    public int fieldInt58790;
+    public int fieldInt58791;
+    public int fieldInt58792;
+    public int fieldInt58793;
+    public int fieldInt58794;
+    public int fieldInt58795;
+    public int fieldInt58796;
+    public int fieldInt58797;
+    public int fieldInt58798;
+    public int fieldInt58799;
+    public int fieldInt58800;
+    public int fieldInt58801;
+    public int fieldInt58802;
+    public int fieldInt58803;
+    public int fieldInt58804;
+    public int fieldInt58805;
+    public int fieldInt58806;
+    public int fieldInt58807;
+    public int fieldInt58808;
+    public int fieldInt58809;
+    public int fieldInt58810;
+    public int fieldInt58811;
+    public int fieldInt58812;
+    public int fieldInt58813;
+    public int fieldInt58814;
+    public int fieldInt58815;
+    public int fieldInt58816;
+    public int fieldInt58817;
+    public int fieldInt58818;
+    public int fieldInt58819;
+    public int fieldInt58820;
+    public int fieldInt58821;
+    public int fieldInt58822;
+    public int fieldInt58823;
+    public int fieldInt58824;
+    public int fieldInt58825;
+    public int fieldInt58826;
+    public int fieldInt58827;
+    public int fieldInt58828;
+    public int fieldInt58829;
+    public int fieldInt58830;
+    public int fieldInt58831;
+    public int fieldInt58832;
+    public int fieldInt58833;
+    public int fieldInt58834;
+    public int fieldInt58835;
+    public int fieldInt58836;
+    public int fieldInt58837;
+    public int fieldInt58838;
+    public int fieldInt58839;
+    public int fieldInt58840;
+    public int fieldInt58841;
+    public int fieldInt58842;
+    public int fieldInt58843;
+    public int fieldInt58844;
+    public int fieldInt58845;
+    public int fieldInt58846;
+    public int fieldInt58847;
+    public int fieldInt58848;
+    public int fieldInt58849;
+    public int fieldInt58850;
+    public int fieldInt58851;
+    public int fieldInt58852;
+    public int fieldInt58853;
+    public int fieldInt58854;
+    public int fieldInt58855;
+    public int fieldInt58856;
+    public int fieldInt58857;
+    public int fieldInt58858;
+    public int fieldInt58859;
+    public int fieldInt58860;
+    public int fieldInt58861;
+    public int fieldInt58862;
+    public int fieldInt58863;
+    public int fieldInt58864;
+    public int fieldInt58865;
+    public int fieldInt58866;
+    public int fieldInt58867;
+    public int fieldInt58868;
+    public int fieldInt58869;
+    public int fieldInt58870;
+    public int fieldInt58871;
+    public int fieldInt58872;
+    public int fieldInt58873;
+    public int fieldInt58874;
+    public int fieldInt58875;
+    public int fieldInt58876;
+    public int fieldInt58877;
+    public int fieldInt58878;
+    public int fieldInt58879;
+    public int fieldInt58880;
+    public int fieldInt58881;
+    public int fieldInt58882;
+    public int fieldInt58883;
+    public int fieldInt58884;
+    public int fieldInt58885;
+    public int fieldInt58886;
+    public int fieldInt58887;
+    public int fieldInt58888;
+    public int fieldInt58889;
+    public int fieldInt58890;
+    public int fieldInt58891;
+    public int fieldInt58892;
+    public int fieldInt58893;
+    public int fieldInt58894;
+    public int fieldInt58895;
+    public int fieldInt58896;
+    public int fieldInt58897;
+    public int fieldInt58898;
+    public int fieldInt58899;
+    public int fieldInt58900;
+    public int fieldInt58901;
+    public int fieldInt58902;
+    public int fieldInt58903;
+    public int fieldInt58904;
+    public int fieldInt58905;
+    public int fieldInt58906;
+    public int fieldInt58907;
+    public int fieldInt58908;
+    public int fieldInt58909;
+    public int fieldInt58910;
+    public int fieldInt58911;
+    public int fieldInt58912;
+    public int fieldInt58913;
+    public int fieldInt58914;
+    public int fieldInt58915;
+    public int fieldInt58916;
+    public int fieldInt58917;
+    public int fieldInt58918;
+    public int fieldInt58919;
+    public int fieldInt58920;
+    public int fieldInt58921;
+    public int fieldInt58922;
+    public int fieldInt58923;
+    public int fieldInt58924;
+    public int fieldInt58925;
+    public int fieldInt58926;
+    public int fieldInt58927;
+    public int fieldInt58928;
+    public int fieldInt58929;
+    public int fieldInt58930;
+    public int fieldInt58931;
+    public int fieldInt58932;
+    public int fieldInt58933;
+    public int fieldInt58934;
+    public int fieldInt58935;
+    public int fieldInt58936;
+    public int fieldInt58937;
+    public int fieldInt58938;
+    public int fieldInt58939;
+    public int fieldInt58940;
+    public int fieldInt58941;
+    public int fieldInt58942;
+    public int fieldInt58943;
+    public int fieldInt58944;
+    public int fieldInt58945;
+    public int fieldInt58946;
+    public int fieldInt58947;
+    public int fieldInt58948;
+    public int fieldInt58949;
+    public int fieldInt58950;
+    public int fieldInt58951;
+    public int fieldInt58952;
+    public int fieldInt58953;
+    public int fieldInt58954;
+    public int fieldInt58955;
+    public int fieldInt58956;
+    public int fieldInt58957;
+    public int fieldInt58958;
+    public int fieldInt58959;
+    public int fieldInt58960;
+    public int fieldInt58961;
+    public int fieldInt58962;
+    public int fieldInt58963;
+    public int fieldInt58964;
+    public int fieldInt58965;
+    public int fieldInt58966;
+    public int fieldInt58967;
+    public int fieldInt58968;
+    public int fieldInt58969;
+    public int fieldInt58970;
+    public int fieldInt58971;
+    public int fieldInt58972;
+    public int fieldInt58973;
+    public int fieldInt58974;
+    public int fieldInt58975;
+    public int fieldInt58976;
+    public int fieldInt58977;
+    public int fieldInt58978;
+    public int fieldInt58979;
+    public int fieldInt58980;
+    public int fieldInt58981;
+    public int fieldInt58982;
+    public int fieldInt58983;
+    public int fieldInt58984;
+    public int fieldInt58985;
+    public int fieldInt58986;
+    public int fieldInt58987;
+    public int fieldInt58988;
+    public int fieldInt58989;
+    public int fieldInt58990;
+    public int fieldInt58991;
+    public int fieldInt58992;
+    public int fieldInt58993;
+    public int fieldInt58994;
+    public int fieldInt58995;
+    public int fieldInt58996;
+    public int fieldInt58997;
+    public int fieldInt58998;
+    public int fieldInt58999;
+    public int fieldInt59000;
+    public int fieldInt59001;
+    public int fieldInt59002;
+    public int fieldInt59003;
+    public int fieldInt59004;
+    public int fieldInt59005;
+    public int fieldInt59006;
+    public int fieldInt59007;
+    public int fieldInt59008;
+    public int fieldInt59009;
+    public int fieldInt59010;
+    public int fieldInt59011;
+    public int fieldInt59012;
+    public int fieldInt59013;
+    public int fieldInt59014;
+    public int fieldInt59015;
+    public int fieldInt59016;
+    public int fieldInt59017;
+    public int fieldInt59018;
+    public int fieldInt59019;
+    public int fieldInt59020;
+    public int fieldInt59021;
+    public int fieldInt59022;
+    public int fieldInt59023;
+    public int fieldInt59024;
+    public int fieldInt59025;
+    public int fieldInt59026;
+    public int fieldInt59027;
+    public int fieldInt59028;
+    public int fieldInt59029;
+    public int fieldInt59030;
+    public int fieldInt59031;
+    public int fieldInt59032;
+    public int fieldInt59033;
+    public int fieldInt59034;
+    public int fieldInt59035;
+    public int fieldInt59036;
+    public int fieldInt59037;
+    public int fieldInt59038;
+    public int fieldInt59039;
+    public int fieldInt59040;
+    public int fieldInt59041;
+    public int fieldInt59042;
+    public int fieldInt59043;
+    public int fieldInt59044;
+    public int fieldInt59045;
+    public int fieldInt59046;
+    public int fieldInt59047;
+    public int fieldInt59048;
+    public int fieldInt59049;
+    public int fieldInt59050;
+    public int fieldInt59051;
+    public int fieldInt59052;
+    public int fieldInt59053;
+    public int fieldInt59054;
+    public int fieldInt59055;
+    public int fieldInt59056;
+    public int fieldInt59057;
+    public int fieldInt59058;
+    public int fieldInt59059;
+    public int fieldInt59060;
+    public int fieldInt59061;
+    public int fieldInt59062;
+    public int fieldInt59063;
+    public int fieldInt59064;
+    public int fieldInt59065;
+    public int fieldInt59066;
+    public int fieldInt59067;
+    public int fieldInt59068;
+    public int fieldInt59069;
+    public int fieldInt59070;
+    public int fieldInt59071;
+    public int fieldInt59072;
+    public int fieldInt59073;
+    public int fieldInt59074;
+    public int fieldInt59075;
+    public int fieldInt59076;
+    public int fieldInt59077;
+    public int fieldInt59078;
+    public int fieldInt59079;
+    public int fieldInt59080;
+    public int fieldInt59081;
+    public int fieldInt59082;
+    public int fieldInt59083;
+    public int fieldInt59084;
+    public int fieldInt59085;
+    public int fieldInt59086;
+    public int fieldInt59087;
+    public int fieldInt59088;
+    public int fieldInt59089;
+    public int fieldInt59090;
+    public int fieldInt59091;
+    public int fieldInt59092;
+    public int fieldInt59093;
+    public int fieldInt59094;
+    public int fieldInt59095;
+    public int fieldInt59096;
+    public int fieldInt59097;
+    public int fieldInt59098;
+    public int fieldInt59099;
+    public int fieldInt59100;
+    public int fieldInt59101;
+    public int fieldInt59102;
+    public int fieldInt59103;
+    public int fieldInt59104;
+    public int fieldInt59105;
+    public int fieldInt59106;
+    public int fieldInt59107;
+    public int fieldInt59108;
+    public int fieldInt59109;
+    public int fieldInt59110;
+    public int fieldInt59111;
+    public int fieldInt59112;
+    public int fieldInt59113;
+    public int fieldInt59114;
+    public int fieldInt59115;
+    public int fieldInt59116;
+    public int fieldInt59117;
+    public int fieldInt59118;
+    public int fieldInt59119;
+    public int fieldInt59120;
+    public int fieldInt59121;
+    public int fieldInt59122;
+    public int fieldInt59123;
+    public int fieldInt59124;
+    public int fieldInt59125;
+    public int fieldInt59126;
+    public int fieldInt59127;
+    public int fieldInt59128;
+    public int fieldInt59129;
+    public int fieldInt59130;
+    public int fieldInt59131;
+    public int fieldInt59132;
+    public int fieldInt59133;
+    public int fieldInt59134;
+    public int fieldInt59135;
+    public int fieldInt59136;
+    public int fieldInt59137;
+    public int fieldInt59138;
+    public int fieldInt59139;
+    public int fieldInt59140;
+    public int fieldInt59141;
+    public int fieldInt59142;
+    public int fieldInt59143;
+    public int fieldInt59144;
+    public int fieldInt59145;
+    public int fieldInt59146;
+    public int fieldInt59147;
+    public int fieldInt59148;
+    public int fieldInt59149;
+    public int fieldInt59150;
+    public int fieldInt59151;
+    public int fieldInt59152;
+    public int fieldInt59153;
+    public int fieldInt59154;
+    public int fieldInt59155;
+    public int fieldInt59156;
+    public int fieldInt59157;
+    public int fieldInt59158;
+    public int fieldInt59159;
+    public int fieldInt59160;
+    public int fieldInt59161;
+    public int fieldInt59162;
+    public int fieldInt59163;
+    public int fieldInt59164;
+    public int fieldInt59165;
+    public int fieldInt59166;
+    public int fieldInt59167;
+    public int fieldInt59168;
+    public int fieldInt59169;
+    public int fieldInt59170;
+    public int fieldInt59171;
+    public int fieldInt59172;
+    public int fieldInt59173;
+    public int fieldInt59174;
+    public int fieldInt59175;
+    public int fieldInt59176;
+    public int fieldInt59177;
+    public int fieldInt59178;
+    public int fieldInt59179;
+    public int fieldInt59180;
+    public int fieldInt59181;
+    public int fieldInt59182;
+    public int fieldInt59183;
+    public int fieldInt59184;
+    public int fieldInt59185;
+    public int fieldInt59186;
+    public int fieldInt59187;
+    public int fieldInt59188;
+    public int fieldInt59189;
+    public int fieldInt59190;
+    public int fieldInt59191;
+    public int fieldInt59192;
+    public int fieldInt59193;
+    public int fieldInt59194;
+    public int fieldInt59195;
+    public int fieldInt59196;
+    public int fieldInt59197;
+    public int fieldInt59198;
+    public int fieldInt59199;
+    public int fieldInt59200;
+    public int fieldInt59201;
+    public int fieldInt59202;
+    public int fieldInt59203;
+    public int fieldInt59204;
+    public int fieldInt59205;
+    public int fieldInt59206;
+    public int fieldInt59207;
+    public int fieldInt59208;
+    public int fieldInt59209;
+    public int fieldInt59210;
+    public int fieldInt59211;
+    public int fieldInt59212;
+    public int fieldInt59213;
+    public int fieldInt59214;
+    public int fieldInt59215;
+    public int fieldInt59216;
+    public int fieldInt59217;
+    public int fieldInt59218;
+    public int fieldInt59219;
+    public int fieldInt59220;
+    public int fieldInt59221;
+    public int fieldInt59222;
+    public int fieldInt59223;
+    public int fieldInt59224;
+    public int fieldInt59225;
+    public int fieldInt59226;
+    public int fieldInt59227;
+    public int fieldInt59228;
+    public int fieldInt59229;
+    public int fieldInt59230;
+    public int fieldInt59231;
+    public int fieldInt59232;
+    public int fieldInt59233;
+    public int fieldInt59234;
+    public int fieldInt59235;
+    public int fieldInt59236;
+    public int fieldInt59237;
+    public int fieldInt59238;
+    public int fieldInt59239;
+    public int fieldInt59240;
+    public int fieldInt59241;
+    public int fieldInt59242;
+    public int fieldInt59243;
+    public int fieldInt59244;
+    public int fieldInt59245;
+    public int fieldInt59246;
+    public int fieldInt59247;
+    public int fieldInt59248;
+    public int fieldInt59249;
+    public int fieldInt59250;
+    public int fieldInt59251;
+    public int fieldInt59252;
+    public int fieldInt59253;
+    public int fieldInt59254;
+    public int fieldInt59255;
+    public int fieldInt59256;
+    public int fieldInt59257;
+    public int fieldInt59258;
+    public int fieldInt59259;
+    public int fieldInt59260;
+    public int fieldInt59261;
+    public int fieldInt59262;
+    public int fieldInt59263;
+    public int fieldInt59264;
+    public int fieldInt59265;
+    public int fieldInt59266;
+    public int fieldInt59267;
+    public int fieldInt59268;
+    public int fieldInt59269;
+    public int fieldInt59270;
+    public int fieldInt59271;
+    public int fieldInt59272;
+    public int fieldInt59273;
+    public int fieldInt59274;
+    public int fieldInt59275;
+    public int fieldInt59276;
+    public int fieldInt59277;
+    public int fieldInt59278;
+    public int fieldInt59279;
+    public int fieldInt59280;
+    public int fieldInt59281;
+    public int fieldInt59282;
+    public int fieldInt59283;
+    public int fieldInt59284;
+    public int fieldInt59285;
+    public int fieldInt59286;
+    public int fieldInt59287;
+    public int fieldInt59288;
+    public int fieldInt59289;
+    public int fieldInt59290;
+    public int fieldInt59291;
+    public int fieldInt59292;
+    public int fieldInt59293;
+    public int fieldInt59294;
+    public int fieldInt59295;
+    public int fieldInt59296;
+    public int fieldInt59297;
+    public int fieldInt59298;
+    public int fieldInt59299;
+    public int fieldInt59300;
+    public int fieldInt59301;
+    public int fieldInt59302;
+    public int fieldInt59303;
+    public int fieldInt59304;
+    public int fieldInt59305;
+    public int fieldInt59306;
+    public int fieldInt59307;
+    public int fieldInt59308;
+    public int fieldInt59309;
+    public int fieldInt59310;
+    public int fieldInt59311;
+    public int fieldInt59312;
+    public int fieldInt59313;
+    public int fieldInt59314;
+    public int fieldInt59315;
+    public int fieldInt59316;
+    public int fieldInt59317;
+    public int fieldInt59318;
+    public int fieldInt59319;
+    public int fieldInt59320;
+    public int fieldInt59321;
+    public int fieldInt59322;
+    public int fieldInt59323;
+    public int fieldInt59324;
+    public int fieldInt59325;
+    public int fieldInt59326;
+    public int fieldInt59327;
+    public int fieldInt59328;
+    public int fieldInt59329;
+    public int fieldInt59330;
+    public int fieldInt59331;
+    public int fieldInt59332;
+    public int fieldInt59333;
+    public int fieldInt59334;
+    public int fieldInt59335;
+    public int fieldInt59336;
+    public int fieldInt59337;
+    public int fieldInt59338;
+    public int fieldInt59339;
+    public int fieldInt59340;
+    public int fieldInt59341;
+    public int fieldInt59342;
+    public int fieldInt59343;
+    public int fieldInt59344;
+    public int fieldInt59345;
+    public int fieldInt59346;
+    public int fieldInt59347;
+    public int fieldInt59348;
+    public int fieldInt59349;
+    public int fieldInt59350;
+    public int fieldInt59351;
+    public int fieldInt59352;
+    public int fieldInt59353;
+    public int fieldInt59354;
+    public int fieldInt59355;
+    public int fieldInt59356;
+    public int fieldInt59357;
+    public int fieldInt59358;
+    public int fieldInt59359;
+    public int fieldInt59360;
+    public int fieldInt59361;
+    public int fieldInt59362;
+    public int fieldInt59363;
+    public int fieldInt59364;
+    public int fieldInt59365;
+    public int fieldInt59366;
+    public int fieldInt59367;
+    public int fieldInt59368;
+    public int fieldInt59369;
+    public int fieldInt59370;
+    public int fieldInt59371;
+    public int fieldInt59372;
+    public int fieldInt59373;
+    public int fieldInt59374;
+    public int fieldInt59375;
+    public int fieldInt59376;
+    public int fieldInt59377;
+    public int fieldInt59378;
+    public int fieldInt59379;
+    public int fieldInt59380;
+    public int fieldInt59381;
+    public int fieldInt59382;
+    public int fieldInt59383;
+    public int fieldInt59384;
+    public int fieldInt59385;
+    public int fieldInt59386;
+    public int fieldInt59387;
+    public int fieldInt59388;
+    public int fieldInt59389;
+    public int fieldInt59390;
+    public int fieldInt59391;
+    public int fieldInt59392;
+    public int fieldInt59393;
+    public int fieldInt59394;
+    public int fieldInt59395;
+    public int fieldInt59396;
+    public int fieldInt59397;
+    public int fieldInt59398;
+    public int fieldInt59399;
+    public int fieldInt59400;
+    public int fieldInt59401;
+    public int fieldInt59402;
+    public int fieldInt59403;
+    public int fieldInt59404;
+    public int fieldInt59405;
+    public int fieldInt59406;
+    public int fieldInt59407;
+    public int fieldInt59408;
+    public int fieldInt59409;
+    public int fieldInt59410;
+    public int fieldInt59411;
+    public int fieldInt59412;
+    public int fieldInt59413;
+    public int fieldInt59414;
+    public int fieldInt59415;
+    public int fieldInt59416;
+    public int fieldInt59417;
+    public int fieldInt59418;
+    public int fieldInt59419;
+    public int fieldInt59420;
+    public int fieldInt59421;
+    public int fieldInt59422;
+    public int fieldInt59423;
+    public int fieldInt59424;
+    public int fieldInt59425;
+    public int fieldInt59426;
+    public int fieldInt59427;
+    public int fieldInt59428;
+    public int fieldInt59429;
+    public int fieldInt59430;
+    public int fieldInt59431;
+    public int fieldInt59432;
+    public int fieldInt59433;
+    public int fieldInt59434;
+    public int fieldInt59435;
+    public int fieldInt59436;
+    public int fieldInt59437;
+    public int fieldInt59438;
+    public int fieldInt59439;
+    public int fieldInt59440;
+    public int fieldInt59441;
+    public int fieldInt59442;
+    public int fieldInt59443;
+    public int fieldInt59444;
+    public int fieldInt59445;
+    public int fieldInt59446;
+    public int fieldInt59447;
+    public int fieldInt59448;
+    public int fieldInt59449;
+    public int fieldInt59450;
+    public int fieldInt59451;
+    public int fieldInt59452;
+    public int fieldInt59453;
+    public int fieldInt59454;
+    public int fieldInt59455;
+    public int fieldInt59456;
+    public int fieldInt59457;
+    public int fieldInt59458;
+    public int fieldInt59459;
+    public int fieldInt59460;
+    public int fieldInt59461;
+    public int fieldInt59462;
+    public int fieldInt59463;
+    public int fieldInt59464;
+    public int fieldInt59465;
+    public int fieldInt59466;
+    public int fieldInt59467;
+    public int fieldInt59468;
+    public int fieldInt59469;
+    public int fieldInt59470;
+    public int fieldInt59471;
+    public int fieldInt59472;
+    public int fieldInt59473;
+    public int fieldInt59474;
+    public int fieldInt59475;
+    public int fieldInt59476;
+    public int fieldInt59477;
+    public int fieldInt59478;
+    public int fieldInt59479;
+    public int fieldInt59480;
+    public int fieldInt59481;
+    public int fieldInt59482;
+    public int fieldInt59483;
+    public int fieldInt59484;
+    public int fieldInt59485;
+    public int fieldInt59486;
+    public int fieldInt59487;
+    public int fieldInt59488;
+    public int fieldInt59489;
+    public int fieldInt59490;
+    public int fieldInt59491;
+    public int fieldInt59492;
+    public int fieldInt59493;
+    public int fieldInt59494;
+    public int fieldInt59495;
+    public int fieldInt59496;
+    public int fieldInt59497;
+    public int fieldInt59498;
+    public int fieldInt59499;
+    public int fieldInt59500;
+    public int fieldInt59501;
+    public int fieldInt59502;
+    public int fieldInt59503;
+    public int fieldInt59504;
+    public int fieldInt59505;
+    public int fieldInt59506;
+    public int fieldInt59507;
+    public int fieldInt59508;
+    public int fieldInt59509;
+    public int fieldInt59510;
+    public int fieldInt59511;
+    public int fieldInt59512;
+    public int fieldInt59513;
+    public int fieldInt59514;
+    public int fieldInt59515;
+    public int fieldInt59516;
+    public int fieldInt59517;
+    public int fieldInt59518;
+    public int fieldInt59519;
+    public int fieldInt59520;
+    public int fieldInt59521;
+    public int fieldInt59522;
+    public int fieldInt59523;
+    public int fieldInt59524;
+    public int fieldInt59525;
+    public int fieldInt59526;
+    public int fieldInt59527;
+    public int fieldInt59528;
+    public int fieldInt59529;
+    public int fieldInt59530;
+    public int fieldInt59531;
+    public int fieldInt59532;
+    public int fieldInt59533;
+    public int fieldInt59534;
+    public int fieldInt59535;
+    public int fieldInt59536;
+    public int fieldInt59537;
+    public int fieldInt59538;
+    public int fieldInt59539;
+    public int fieldInt59540;
+    public int fieldInt59541;
+    public int fieldInt59542;
+    public int fieldInt59543;
+    public int fieldInt59544;
+    public int fieldInt59545;
+    public int fieldInt59546;
+    public int fieldInt59547;
+    public int fieldInt59548;
+    public int fieldInt59549;
+    public int fieldInt59550;
+    public int fieldInt59551;
+    public int fieldInt59552;
+    public int fieldInt59553;
+    public int fieldInt59554;
+    public int fieldInt59555;
+    public int fieldInt59556;
+    public int fieldInt59557;
+    public int fieldInt59558;
+    public int fieldInt59559;
+    public int fieldInt59560;
+    public int fieldInt59561;
+    public int fieldInt59562;
+    public int fieldInt59563;
+    public int fieldInt59564;
+    public int fieldInt59565;
+    public int fieldInt59566;
+    public int fieldInt59567;
+    public int fieldInt59568;
+    public int fieldInt59569;
+    public int fieldInt59570;
+    public int fieldInt59571;
+    public int fieldInt59572;
+    public int fieldInt59573;
+    public int fieldInt59574;
+    public int fieldInt59575;
+    public int fieldInt59576;
+    public int fieldInt59577;
+    public int fieldInt59578;
+    public int fieldInt59579;
+    public int fieldInt59580;
+    public int fieldInt59581;
+    public int fieldInt59582;
+    public int fieldInt59583;
+    public int fieldInt59584;
+    public int fieldInt59585;
+    public int fieldInt59586;
+    public int fieldInt59587;
+    public int fieldInt59588;
+    public int fieldInt59589;
+    public int fieldInt59590;
+    public int fieldInt59591;
+    public int fieldInt59592;
+    public int fieldInt59593;
+    public int fieldInt59594;
+    public int fieldInt59595;
+    public int fieldInt59596;
+    public int fieldInt59597;
+    public int fieldInt59598;
+    public int fieldInt59599;
+    public int fieldInt59600;
+    public int fieldInt59601;
+    public int fieldInt59602;
+    public int fieldInt59603;
+    public int fieldInt59604;
+    public int fieldInt59605;
+    public int fieldInt59606;
+    public int fieldInt59607;
+    public int fieldInt59608;
+    public int fieldInt59609;
+    public int fieldInt59610;
+    public int fieldInt59611;
+    public int fieldInt59612;
+    public int fieldInt59613;
+    public int fieldInt59614;
+    public int fieldInt59615;
+    public int fieldInt59616;
+    public int fieldInt59617;
+    public int fieldInt59618;
+    public int fieldInt59619;
+    public int fieldInt59620;
+    public int fieldInt59621;
+    public int fieldInt59622;
+    public int fieldInt59623;
+    public int fieldInt59624;
+    public int fieldInt59625;
+    public int fieldInt59626;
+    public int fieldInt59627;
+    public int fieldInt59628;
+    public int fieldInt59629;
+    public int fieldInt59630;
+    public int fieldInt59631;
+    public int fieldInt59632;
+    public int fieldInt59633;
+    public int fieldInt59634;
+    public int fieldInt59635;
+    public int fieldInt59636;
+    public int fieldInt59637;
+    public int fieldInt59638;
+    public int fieldInt59639;
+    public int fieldInt59640;
+    public int fieldInt59641;
+    public int fieldInt59642;
+    public int fieldInt59643;
+    public int fieldInt59644;
+    public int fieldInt59645;
+    public int fieldInt59646;
+    public int fieldInt59647;
+    public int fieldInt59648;
+    public int fieldInt59649;
+    public int fieldInt59650;
+    public int fieldInt59651;
+    public int fieldInt59652;
+    public int fieldInt59653;
+    public int fieldInt59654;
+    public int fieldInt59655;
+    public int fieldInt59656;
+    public int fieldInt59657;
+    public int fieldInt59658;
+    public int fieldInt59659;
+    public int fieldInt59660;
+    public int fieldInt59661;
+    public int fieldInt59662;
+    public int fieldInt59663;
+    public int fieldInt59664;
+    public int fieldInt59665;
+    public int fieldInt59666;
+    public int fieldInt59667;
+    public int fieldInt59668;
+    public int fieldInt59669;
+    public int fieldInt59670;
+    public int fieldInt59671;
+    public int fieldInt59672;
+    public int fieldInt59673;
+    public int fieldInt59674;
+    public int fieldInt59675;
+    public int fieldInt59676;
+    public int fieldInt59677;
+    public int fieldInt59678;
+    public int fieldInt59679;
+    public int fieldInt59680;
+    public int fieldInt59681;
+    public int fieldInt59682;
+    public int fieldInt59683;
+    public int fieldInt59684;
+    public int fieldInt59685;
+    public int fieldInt59686;
+    public int fieldInt59687;
+    public int fieldInt59688;
+    public int fieldInt59689;
+    public int fieldInt59690;
+    public int fieldInt59691;
+    public int fieldInt59692;
+    public int fieldInt59693;
+    public int fieldInt59694;
+    public int fieldInt59695;
+    public int fieldInt59696;
+    public int fieldInt59697;
+    public int fieldInt59698;
+    public int fieldInt59699;
+    public int fieldInt59700;
+    public int fieldInt59701;
+    public int fieldInt59702;
+    public int fieldInt59703;
+    public int fieldInt59704;
+    public int fieldInt59705;
+    public int fieldInt59706;
+    public int fieldInt59707;
+    public int fieldInt59708;
+    public int fieldInt59709;
+    public int fieldInt59710;
+    public int fieldInt59711;
+    public int fieldInt59712;
+    public int fieldInt59713;
+    public int fieldInt59714;
+    public int fieldInt59715;
+    public int fieldInt59716;
+    public int fieldInt59717;
+    public int fieldInt59718;
+    public int fieldInt59719;
+    public int fieldInt59720;
+    public int fieldInt59721;
+    public int fieldInt59722;
+    public int fieldInt59723;
+    public int fieldInt59724;
+    public int fieldInt59725;
+    public int fieldInt59726;
+    public int fieldInt59727;
+    public int fieldInt59728;
+    public int fieldInt59729;
+    public int fieldInt59730;
+    public int fieldInt59731;
+    public int fieldInt59732;
+    public int fieldInt59733;
+    public int fieldInt59734;
+    public int fieldInt59735;
+    public int fieldInt59736;
+    public int fieldInt59737;
+    public int fieldInt59738;
+    public int fieldInt59739;
+    public int fieldInt59740;
+    public int fieldInt59741;
+    public int fieldInt59742;
+    public int fieldInt59743;
+    public int fieldInt59744;
+    public int fieldInt59745;
+    public int fieldInt59746;
+    public int fieldInt59747;
+    public int fieldInt59748;
+    public int fieldInt59749;
+    public int fieldInt59750;
+    public int fieldInt59751;
+    public int fieldInt59752;
+    public int fieldInt59753;
+    public int fieldInt59754;
+    public int fieldInt59755;
+    public int fieldInt59756;
+    public int fieldInt59757;
+    public int fieldInt59758;
+    public int fieldInt59759;
+    public int fieldInt59760;
+    public int fieldInt59761;
+    public int fieldInt59762;
+    public int fieldInt59763;
+    public int fieldInt59764;
+    public int fieldInt59765;
+    public int fieldInt59766;
+    public int fieldInt59767;
+    public int fieldInt59768;
+    public int fieldInt59769;
+    public int fieldInt59770;
+    public int fieldInt59771;
+    public int fieldInt59772;
+    public int fieldInt59773;
+    public int fieldInt59774;
+    public int fieldInt59775;
+    public int fieldInt59776;
+    public int fieldInt59777;
+    public int fieldInt59778;
+    public int fieldInt59779;
+    public int fieldInt59780;
+    public int fieldInt59781;
+    public int fieldInt59782;
+    public int fieldInt59783;
+    public int fieldInt59784;
+    public int fieldInt59785;
+    public int fieldInt59786;
+    public int fieldInt59787;
+    public int fieldInt59788;
+    public int fieldInt59789;
+    public int fieldInt59790;
+    public int fieldInt59791;
+    public int fieldInt59792;
+    public int fieldInt59793;
+    public int fieldInt59794;
+    public int fieldInt59795;
+    public int fieldInt59796;
+    public int fieldInt59797;
+    public int fieldInt59798;
+    public int fieldInt59799;
+    public int fieldInt59800;
+    public int fieldInt59801;
+    public int fieldInt59802;
+    public int fieldInt59803;
+    public int fieldInt59804;
+    public int fieldInt59805;
+    public int fieldInt59806;
+    public int fieldInt59807;
+    public int fieldInt59808;
+    public int fieldInt59809;
+    public int fieldInt59810;
+    public int fieldInt59811;
+    public int fieldInt59812;
+    public int fieldInt59813;
+    public int fieldInt59814;
+    public int fieldInt59815;
+    public int fieldInt59816;
+    public int fieldInt59817;
+    public int fieldInt59818;
+    public int fieldInt59819;
+    public int fieldInt59820;
+    public int fieldInt59821;
+    public int fieldInt59822;
+    public int fieldInt59823;
+    public int fieldInt59824;
+    public int fieldInt59825;
+    public int fieldInt59826;
+    public int fieldInt59827;
+    public int fieldInt59828;
+    public int fieldInt59829;
+    public int fieldInt59830;
+    public int fieldInt59831;
+    public int fieldInt59832;
+    public int fieldInt59833;
+    public int fieldInt59834;
+    public int fieldInt59835;
+    public int fieldInt59836;
+    public int fieldInt59837;
+    public int fieldInt59838;
+    public int fieldInt59839;
+    public int fieldInt59840;
+    public int fieldInt59841;
+    public int fieldInt59842;
+    public int fieldInt59843;
+    public int fieldInt59844;
+    public int fieldInt59845;
+    public int fieldInt59846;
+    public int fieldInt59847;
+    public int fieldInt59848;
+    public int fieldInt59849;
+    public int fieldInt59850;
+    public int fieldInt59851;
+    public int fieldInt59852;
+    public int fieldInt59853;
+    public int fieldInt59854;
+    public int fieldInt59855;
+    public int fieldInt59856;
+    public int fieldInt59857;
+    public int fieldInt59858;
+    public int fieldInt59859;
+    public int fieldInt59860;
+    public int fieldInt59861;
+    public int fieldInt59862;
+    public int fieldInt59863;
+    public int fieldInt59864;
+    public int fieldInt59865;
+    public int fieldInt59866;
+    public int fieldInt59867;
+    public int fieldInt59868;
+    public int fieldInt59869;
+    public int fieldInt59870;
+    public int fieldInt59871;
+    public int fieldInt59872;
+    public int fieldInt59873;
+    public int fieldInt59874;
+    public int fieldInt59875;
+    public int fieldInt59876;
+    public int fieldInt59877;
+    public int fieldInt59878;
+    public int fieldInt59879;
+    public int fieldInt59880;
+    public int fieldInt59881;
+    public int fieldInt59882;
+    public int fieldInt59883;
+    public int fieldInt59884;
+    public int fieldInt59885;
+    public int fieldInt59886;
+    public int fieldInt59887;
+    public int fieldInt59888;
+    public int fieldInt59889;
+    public int fieldInt59890;
+    public int fieldInt59891;
+    public int fieldInt59892;
+    public int fieldInt59893;
+    public int fieldInt59894;
+    public int fieldInt59895;
+    public int fieldInt59896;
+    public int fieldInt59897;
+    public int fieldInt59898;
+    public int fieldInt59899;
+    public int fieldInt59900;
+    public int fieldInt59901;
+    public int fieldInt59902;
+    public int fieldInt59903;
+    public int fieldInt59904;
+    public int fieldInt59905;
+    public int fieldInt59906;
+    public int fieldInt59907;
+    public int fieldInt59908;
+    public int fieldInt59909;
+    public int fieldInt59910;
+    public int fieldInt59911;
+    public int fieldInt59912;
+    public int fieldInt59913;
+    public int fieldInt59914;
+    public int fieldInt59915;
+    public int fieldInt59916;
+    public int fieldInt59917;
+    public int fieldInt59918;
+    public int fieldInt59919;
+    public int fieldInt59920;
+    public int fieldInt59921;
+    public int fieldInt59922;
+    public int fieldInt59923;
+    public int fieldInt59924;
+    public int fieldInt59925;
+    public int fieldInt59926;
+    public int fieldInt59927;
+    public int fieldInt59928;
+    public int fieldInt59929;
+    public int fieldInt59930;
+    public int fieldInt59931;
+    public int fieldInt59932;
+    public int fieldInt59933;
+    public int fieldInt59934;
+    public int fieldInt59935;
+    public int fieldInt59936;
+    public int fieldInt59937;
+    public int fieldInt59938;
+    public int fieldInt59939;
+    public int fieldInt59940;
+    public int fieldInt59941;
+    public int fieldInt59942;
+    public int fieldInt59943;
+    public int fieldInt59944;
+    public int fieldInt59945;
+    public int fieldInt59946;
+    public int fieldInt59947;
+    public int fieldInt59948;
+    public int fieldInt59949;
+    public int fieldInt59950;
+    public int fieldInt59951;
+    public int fieldInt59952;
+    public int fieldInt59953;
+    public int fieldInt59954;
+    public int fieldInt59955;
+    public int fieldInt59956;
+    public int fieldInt59957;
+    public int fieldInt59958;
+    public int fieldInt59959;
+    public int fieldInt59960;
+    public int fieldInt59961;
+    public int fieldInt59962;
+    public int fieldInt59963;
+    public int fieldInt59964;
+    public int fieldInt59965;
+    public int fieldInt59966;
+    public int fieldInt59967;
+    public int fieldInt59968;
+    public int fieldInt59969;
+    public int fieldInt59970;
+    public int fieldInt59971;
+    public int fieldInt59972;
+    public int fieldInt59973;
+    public int fieldInt59974;
+    public int fieldInt59975;
+    public int fieldInt59976;
+    public int fieldInt59977;
+    public int fieldInt59978;
+    public int fieldInt59979;
+    public int fieldInt59980;
+    public int fieldInt59981;
+    public int fieldInt59982;
+    public int fieldInt59983;
+    public int fieldInt59984;
+    public int fieldInt59985;
+    public int fieldInt59986;
+    public int fieldInt59987;
+    public int fieldInt59988;
+    public int fieldInt59989;
+    public int fieldInt59990;
+    public int fieldInt59991;
+    public int fieldInt59992;
+    public int fieldInt59993;
+    public int fieldInt59994;
+    public int fieldInt59995;
+    public int fieldInt59996;
+    public int fieldInt59997;
+    public int fieldInt59998;
+    public int fieldInt59999;
+    public int fieldInt60000;
+    public int fieldInt60001;
+    public int fieldInt60002;
+    public int fieldInt60003;
+    public int fieldInt60004;
+    public int fieldInt60005;
+    public int fieldInt60006;
+    public int fieldInt60007;
+    public int fieldInt60008;
+    public int fieldInt60009;
+    public int fieldInt60010;
+    public int fieldInt60011;
+    public int fieldInt60012;
+    public int fieldInt60013;
+    public int fieldInt60014;
+    public int fieldInt60015;
+    public int fieldInt60016;
+    public int fieldInt60017;
+    public int fieldInt60018;
+    public int fieldInt60019;
+    public int fieldInt60020;
+    public int fieldInt60021;
+    public int fieldInt60022;
+    public int fieldInt60023;
+    public int fieldInt60024;
+    public int fieldInt60025;
+    public int fieldInt60026;
+    public int fieldInt60027;
+    public int fieldInt60028;
+    public int fieldInt60029;
+    public int fieldInt60030;
+    public int fieldInt60031;
+    public int fieldInt60032;
+    public int fieldInt60033;
+    public int fieldInt60034;
+    public int fieldInt60035;
+    public int fieldInt60036;
+    public int fieldInt60037;
+    public int fieldInt60038;
+    public int fieldInt60039;
+    public int fieldInt60040;
+    public int fieldInt60041;
+    public int fieldInt60042;
+    public int fieldInt60043;
+    public int fieldInt60044;
+    public int fieldInt60045;
+    public int fieldInt60046;
+    public int fieldInt60047;
+    public int fieldInt60048;
+    public int fieldInt60049;
+    public int fieldInt60050;
+    public int fieldInt60051;
+    public int fieldInt60052;
+    public int fieldInt60053;
+    public int fieldInt60054;
+    public int fieldInt60055;
+    public int fieldInt60056;
+    public int fieldInt60057;
+    public int fieldInt60058;
+    public int fieldInt60059;
+    public int fieldInt60060;
+    public int fieldInt60061;
+    public int fieldInt60062;
+    public int fieldInt60063;
+    public int fieldInt60064;
+    public int fieldInt60065;
+    public int fieldInt60066;
+    public int fieldInt60067;
+    public int fieldInt60068;
+    public int fieldInt60069;
+    public int fieldInt60070;
+    public int fieldInt60071;
+    public int fieldInt60072;
+    public int fieldInt60073;
+    public int fieldInt60074;
+    public int fieldInt60075;
+    public int fieldInt60076;
+    public int fieldInt60077;
+    public int fieldInt60078;
+    public int fieldInt60079;
+    public int fieldInt60080;
+    public int fieldInt60081;
+    public int fieldInt60082;
+    public int fieldInt60083;
+    public int fieldInt60084;
+    public int fieldInt60085;
+    public int fieldInt60086;
+    public int fieldInt60087;
+    public int fieldInt60088;
+    public int fieldInt60089;
+    public int fieldInt60090;
+    public int fieldInt60091;
+    public int fieldInt60092;
+    public int fieldInt60093;
+    public int fieldInt60094;
+    public int fieldInt60095;
+    public int fieldInt60096;
+    public int fieldInt60097;
+    public int fieldInt60098;
+    public int fieldInt60099;
+    public int fieldInt60100;
+    public int fieldInt60101;
+    public int fieldInt60102;
+    public int fieldInt60103;
+    public int fieldInt60104;
+    public int fieldInt60105;
+    public int fieldInt60106;
+    public int fieldInt60107;
+    public int fieldInt60108;
+    public int fieldInt60109;
+    public int fieldInt60110;
+    public int fieldInt60111;
+    public int fieldInt60112;
+    public int fieldInt60113;
+    public int fieldInt60114;
+    public int fieldInt60115;
+    public int fieldInt60116;
+    public int fieldInt60117;
+    public int fieldInt60118;
+    public int fieldInt60119;
+    public int fieldInt60120;
+    public int fieldInt60121;
+    public int fieldInt60122;
+    public int fieldInt60123;
+    public int fieldInt60124;
+    public int fieldInt60125;
+    public int fieldInt60126;
+    public int fieldInt60127;
+    public int fieldInt60128;
+    public int fieldInt60129;
+    public int fieldInt60130;
+    public int fieldInt60131;
+    public int fieldInt60132;
+    public int fieldInt60133;
+    public int fieldInt60134;
+    public int fieldInt60135;
+    public int fieldInt60136;
+    public int fieldInt60137;
+    public int fieldInt60138;
+    public int fieldInt60139;
+    public int fieldInt60140;
+    public int fieldInt60141;
+    public int fieldInt60142;
+    public int fieldInt60143;
+    public int fieldInt60144;
+    public int fieldInt60145;
+    public int fieldInt60146;
+    public int fieldInt60147;
+    public int fieldInt60148;
+    public int fieldInt60149;
+    public int fieldInt60150;
+    public int fieldInt60151;
+    public int fieldInt60152;
+    public int fieldInt60153;
+    public int fieldInt60154;
+    public int fieldInt60155;
+    public int fieldInt60156;
+    public int fieldInt60157;
+    public int fieldInt60158;
+    public int fieldInt60159;
+    public int fieldInt60160;
+    public int fieldInt60161;
+    public int fieldInt60162;
+    public int fieldInt60163;
+    public int fieldInt60164;
+    public int fieldInt60165;
+    public int fieldInt60166;
+    public int fieldInt60167;
+    public int fieldInt60168;
+    public int fieldInt60169;
+    public int fieldInt60170;
+    public int fieldInt60171;
+    public int fieldInt60172;
+    public int fieldInt60173;
+    public int fieldInt60174;
+    public int fieldInt60175;
+    public int fieldInt60176;
+    public int fieldInt60177;
+    public int fieldInt60178;
+    public int fieldInt60179;
+    public int fieldInt60180;
+    public int fieldInt60181;
+    public int fieldInt60182;
+    public int fieldInt60183;
+    public int fieldInt60184;
+    public int fieldInt60185;
+    public int fieldInt60186;
+    public int fieldInt60187;
+    public int fieldInt60188;
+    public int fieldInt60189;
+    public int fieldInt60190;
+    public int fieldInt60191;
+    public int fieldInt60192;
+    public int fieldInt60193;
+    public int fieldInt60194;
+    public int fieldInt60195;
+    public int fieldInt60196;
+    public int fieldInt60197;
+    public int fieldInt60198;
+    public int fieldInt60199;
+    public int fieldInt60200;
+    public int fieldInt60201;
+    public int fieldInt60202;
+    public int fieldInt60203;
+    public int fieldInt60204;
+    public int fieldInt60205;
+    public int fieldInt60206;
+    public int fieldInt60207;
+    public int fieldInt60208;
+    public int fieldInt60209;
+    public int fieldInt60210;
+    public int fieldInt60211;
+    public int fieldInt60212;
+    public int fieldInt60213;
+    public int fieldInt60214;
+    public int fieldInt60215;
+    public int fieldInt60216;
+    public int fieldInt60217;
+    public int fieldInt60218;
+    public int fieldInt60219;
+    public int fieldInt60220;
+    public int fieldInt60221;
+    public int fieldInt60222;
+    public int fieldInt60223;
+    public int fieldInt60224;
+    public int fieldInt60225;
+    public int fieldInt60226;
+    public int fieldInt60227;
+    public int fieldInt60228;
+    public int fieldInt60229;
+    public int fieldInt60230;
+    public int fieldInt60231;
+    public int fieldInt60232;
+    public int fieldInt60233;
+    public int fieldInt60234;
+    public int fieldInt60235;
+    public int fieldInt60236;
+    public int fieldInt60237;
+    public int fieldInt60238;
+    public int fieldInt60239;
+    public int fieldInt60240;
+    public int fieldInt60241;
+    public int fieldInt60242;
+    public int fieldInt60243;
+    public int fieldInt60244;
+    public int fieldInt60245;
+    public int fieldInt60246;
+    public int fieldInt60247;
+    public int fieldInt60248;
+    public int fieldInt60249;
+    public int fieldInt60250;
+    public int fieldInt60251;
+    public int fieldInt60252;
+    public int fieldInt60253;
+    public int fieldInt60254;
+    public int fieldInt60255;
+    public int fieldInt60256;
+    public int fieldInt60257;
+    public int fieldInt60258;
+    public int fieldInt60259;
+    public int fieldInt60260;
+    public int fieldInt60261;
+    public int fieldInt60262;
+    public int fieldInt60263;
+    public int fieldInt60264;
+    public int fieldInt60265;
+    public int fieldInt60266;
+    public int fieldInt60267;
+    public int fieldInt60268;
+    public int fieldInt60269;
+    public int fieldInt60270;
+    public int fieldInt60271;
+    public int fieldInt60272;
+    public int fieldInt60273;
+    public int fieldInt60274;
+    public int fieldInt60275;
+    public int fieldInt60276;
+    public int fieldInt60277;
+    public int fieldInt60278;
+    public int fieldInt60279;
+    public int fieldInt60280;
+    public int fieldInt60281;
+    public int fieldInt60282;
+    public int fieldInt60283;
+    public int fieldInt60284;
+    public int fieldInt60285;
+    public int fieldInt60286;
+    public int fieldInt60287;
+    public int fieldInt60288;
+    public int fieldInt60289;
+    public int fieldInt60290;
+    public int fieldInt60291;
+    public int fieldInt60292;
+    public int fieldInt60293;
+    public int fieldInt60294;
+    public int fieldInt60295;
+    public int fieldInt60296;
+    public int fieldInt60297;
+    public int fieldInt60298;
+    public int fieldInt60299;
+    public int fieldInt60300;
+    public int fieldInt60301;
+    public int fieldInt60302;
+    public int fieldInt60303;
+    public int fieldInt60304;
+    public int fieldInt60305;
+    public int fieldInt60306;
+    public int fieldInt60307;
+    public int fieldInt60308;
+    public int fieldInt60309;
+    public int fieldInt60310;
+    public int fieldInt60311;
+    public int fieldInt60312;
+    public int fieldInt60313;
+    public int fieldInt60314;
+    public int fieldInt60315;
+    public int fieldInt60316;
+    public int fieldInt60317;
+    public int fieldInt60318;
+    public int fieldInt60319;
+    public int fieldInt60320;
+    public int fieldInt60321;
+    public int fieldInt60322;
+    public int fieldInt60323;
+    public int fieldInt60324;
+    public int fieldInt60325;
+    public int fieldInt60326;
+    public int fieldInt60327;
+    public int fieldInt60328;
+    public int fieldInt60329;
+    public int fieldInt60330;
+    public int fieldInt60331;
+    public int fieldInt60332;
+    public int fieldInt60333;
+    public int fieldInt60334;
+    public int fieldInt60335;
+    public int fieldInt60336;
+    public int fieldInt60337;
+    public int fieldInt60338;
+    public int fieldInt60339;
+    public int fieldInt60340;
+    public int fieldInt60341;
+    public int fieldInt60342;
+    public int fieldInt60343;
+    public int fieldInt60344;
+    public int fieldInt60345;
+    public int fieldInt60346;
+    public int fieldInt60347;
+    public int fieldInt60348;
+    public int fieldInt60349;
+    public int fieldInt60350;
+    public int fieldInt60351;
+    public int fieldInt60352;
+    public int fieldInt60353;
+    public int fieldInt60354;
+    public int fieldInt60355;
+    public int fieldInt60356;
+    public int fieldInt60357;
+    public int fieldInt60358;
+    public int fieldInt60359;
+    public int fieldInt60360;
+    public int fieldInt60361;
+    public int fieldInt60362;
+    public int fieldInt60363;
+    public int fieldInt60364;
+    public int fieldInt60365;
+    public int fieldInt60366;
+    public int fieldInt60367;
+    public int fieldInt60368;
+    public int fieldInt60369;
+    public int fieldInt60370;
+    public int fieldInt60371;
+    public int fieldInt60372;
+    public int fieldInt60373;
+    public int fieldInt60374;
+    public int fieldInt60375;
+    public int fieldInt60376;
+    public int fieldInt60377;
+    public int fieldInt60378;
+    public int fieldInt60379;
+    public int fieldInt60380;
+    public int fieldInt60381;
+    public int fieldInt60382;
+    public int fieldInt60383;
+    public int fieldInt60384;
+    public int fieldInt60385;
+    public int fieldInt60386;
+    public int fieldInt60387;
+    public int fieldInt60388;
+    public int fieldInt60389;
+    public int fieldInt60390;
+    public int fieldInt60391;
+    public int fieldInt60392;
+    public int fieldInt60393;
+    public int fieldInt60394;
+    public int fieldInt60395;
+    public int fieldInt60396;
+    public int fieldInt60397;
+    public int fieldInt60398;
+    public int fieldInt60399;
+    public int fieldInt60400;
+    public int fieldInt60401;
+    public int fieldInt60402;
+    public int fieldInt60403;
+    public int fieldInt60404;
+    public int fieldInt60405;
+    public int fieldInt60406;
+    public int fieldInt60407;
+    public int fieldInt60408;
+    public int fieldInt60409;
+    public int fieldInt60410;
+    public int fieldInt60411;
+    public int fieldInt60412;
+    public int fieldInt60413;
+    public int fieldInt60414;
+    public int fieldInt60415;
+    public int fieldInt60416;
+    public int fieldInt60417;
+    public int fieldInt60418;
+    public int fieldInt60419;
+    public int fieldInt60420;
+    public int fieldInt60421;
+    public int fieldInt60422;
+    public int fieldInt60423;
+    public int fieldInt60424;
+    public int fieldInt60425;
+    public int fieldInt60426;
+    public int fieldInt60427;
+    public int fieldInt60428;
+    public int fieldInt60429;
+    public int fieldInt60430;
+    public int fieldInt60431;
+    public int fieldInt60432;
+    public int fieldInt60433;
+    public int fieldInt60434;
+    public int fieldInt60435;
+    public int fieldInt60436;
+    public int fieldInt60437;
+    public int fieldInt60438;
+    public int fieldInt60439;
+    public int fieldInt60440;
+    public int fieldInt60441;
+    public int fieldInt60442;
+    public int fieldInt60443;
+    public int fieldInt60444;
+    public int fieldInt60445;
+    public int fieldInt60446;
+    public int fieldInt60447;
+    public int fieldInt60448;
+    public int fieldInt60449;
+    public int fieldInt60450;
+    public int fieldInt60451;
+    public int fieldInt60452;
+    public int fieldInt60453;
+    public int fieldInt60454;
+    public int fieldInt60455;
+    public int fieldInt60456;
+    public int fieldInt60457;
+    public int fieldInt60458;
+    public int fieldInt60459;
+    public int fieldInt60460;
+    public int fieldInt60461;
+    public int fieldInt60462;
+    public int fieldInt60463;
+    public int fieldInt60464;
+    public int fieldInt60465;
+    public int fieldInt60466;
+    public int fieldInt60467;
+    public int fieldInt60468;
+    public int fieldInt60469;
+    public int fieldInt60470;
+    public int fieldInt60471;
+    public int fieldInt60472;
+    public int fieldInt60473;
+    public int fieldInt60474;
+    public int fieldInt60475;
+    public int fieldInt60476;
+    public int fieldInt60477;
+    public int fieldInt60478;
+    public int fieldInt60479;
+    public int fieldInt60480;
+    public int fieldInt60481;
+    public int fieldInt60482;
+    public int fieldInt60483;
+    public int fieldInt60484;
+    public int fieldInt60485;
+    public int fieldInt60486;
+    public int fieldInt60487;
+    public int fieldInt60488;
+    public int fieldInt60489;
+    public int fieldInt60490;
+    public int fieldInt60491;
+    public int fieldInt60492;
+    public int fieldInt60493;
+    public int fieldInt60494;
+    public int fieldInt60495;
+    public int fieldInt60496;
+    public int fieldInt60497;
+    public int fieldInt60498;
+    public int fieldInt60499;
+    public int fieldInt60500;
+    public int fieldInt60501;
+    public int fieldInt60502;
+    public int fieldInt60503;
+    public int fieldInt60504;
+    public int fieldInt60505;
+    public int fieldInt60506;
+    public int fieldInt60507;
+    public int fieldInt60508;
+    public int fieldInt60509;
+    public int fieldInt60510;
+    public int fieldInt60511;
+    public int fieldInt60512;
+    public int fieldInt60513;
+    public int fieldInt60514;
+    public int fieldInt60515;
+    public int fieldInt60516;
+    public int fieldInt60517;
+    public int fieldInt60518;
+    public int fieldInt60519;
+    public int fieldInt60520;
+    public int fieldInt60521;
+    public int fieldInt60522;
+    public int fieldInt60523;
+    public int fieldInt60524;
+    public int fieldInt60525;
+    public int fieldInt60526;
+    public int fieldInt60527;
+    public int fieldInt60528;
+    public int fieldInt60529;
+    public int fieldInt60530;
+    public int fieldInt60531;
+    public int fieldInt60532;
+    public int fieldInt60533;
+    public int fieldInt60534;
+    public int fieldInt60535;
+    public int fieldInt60536;
+    public int fieldInt60537;
+    public int fieldInt60538;
+    public int fieldInt60539;
+    public int fieldInt60540;
+    public int fieldInt60541;
+    public int fieldInt60542;
+    public int fieldInt60543;
+    public int fieldInt60544;
+    public int fieldInt60545;
+    public int fieldInt60546;
+    public int fieldInt60547;
+    public int fieldInt60548;
+    public int fieldInt60549;
+    public int fieldInt60550;
+    public int fieldInt60551;
+    public int fieldInt60552;
+    public int fieldInt60553;
+    public int fieldInt60554;
+    public int fieldInt60555;
+    public int fieldInt60556;
+    public int fieldInt60557;
+    public int fieldInt60558;
+    public int fieldInt60559;
+    public int fieldInt60560;
+    public int fieldInt60561;
+    public int fieldInt60562;
+    public int fieldInt60563;
+    public int fieldInt60564;
+    public int fieldInt60565;
+    public int fieldInt60566;
+    public int fieldInt60567;
+    public int fieldInt60568;
+    public int fieldInt60569;
+    public int fieldInt60570;
+    public int fieldInt60571;
+    public int fieldInt60572;
+    public int fieldInt60573;
+    public int fieldInt60574;
+    public int fieldInt60575;
+    public int fieldInt60576;
+    public int fieldInt60577;
+    public int fieldInt60578;
+    public int fieldInt60579;
+    public int fieldInt60580;
+    public int fieldInt60581;
+    public int fieldInt60582;
+    public int fieldInt60583;
+    public int fieldInt60584;
+    public int fieldInt60585;
+    public int fieldInt60586;
+    public int fieldInt60587;
+    public int fieldInt60588;
+    public int fieldInt60589;
+    public int fieldInt60590;
+    public int fieldInt60591;
+    public int fieldInt60592;
+    public int fieldInt60593;
+    public int fieldInt60594;
+    public int fieldInt60595;
+    public int fieldInt60596;
+    public int fieldInt60597;
+    public int fieldInt60598;
+    public int fieldInt60599;
+    public int fieldInt60600;
+    public int fieldInt60601;
+    public int fieldInt60602;
+    public int fieldInt60603;
+    public int fieldInt60604;
+    public int fieldInt60605;
+    public int fieldInt60606;
+    public int fieldInt60607;
+    public int fieldInt60608;
+    public int fieldInt60609;
+    public int fieldInt60610;
+    public int fieldInt60611;
+    public int fieldInt60612;
+    public int fieldInt60613;
+    public int fieldInt60614;
+    public int fieldInt60615;
+    public int fieldInt60616;
+    public int fieldInt60617;
+    public int fieldInt60618;
+    public int fieldInt60619;
+    public int fieldInt60620;
+    public int fieldInt60621;
+    public int fieldInt60622;
+    public int fieldInt60623;
+    public int fieldInt60624;
+    public int fieldInt60625;
+    public int fieldInt60626;
+    public int fieldInt60627;
+    public int fieldInt60628;
+    public int fieldInt60629;
+    public int fieldInt60630;
+    public int fieldInt60631;
+    public int fieldInt60632;
+    public int fieldInt60633;
+    public int fieldInt60634;
+    public int fieldInt60635;
+    public int fieldInt60636;
+    public int fieldInt60637;
+    public int fieldInt60638;
+    public int fieldInt60639;
+    public int fieldInt60640;
+    public int fieldInt60641;
+    public int fieldInt60642;
+    public int fieldInt60643;
+    public int fieldInt60644;
+    public int fieldInt60645;
+    public int fieldInt60646;
+    public int fieldInt60647;
+    public int fieldInt60648;
+    public int fieldInt60649;
+    public int fieldInt60650;
+    public int fieldInt60651;
+    public int fieldInt60652;
+    public int fieldInt60653;
+    public int fieldInt60654;
+    public int fieldInt60655;
+    public int fieldInt60656;
+    public int fieldInt60657;
+    public int fieldInt60658;
+    public int fieldInt60659;
+    public int fieldInt60660;
+    public int fieldInt60661;
+    public int fieldInt60662;
+    public int fieldInt60663;
+    public int fieldInt60664;
+    public int fieldInt60665;
+    public int fieldInt60666;
+    public int fieldInt60667;
+    public int fieldInt60668;
+    public int fieldInt60669;
+    public int fieldInt60670;
+    public int fieldInt60671;
+    public int fieldInt60672;
+    public int fieldInt60673;
+    public int fieldInt60674;
+    public int fieldInt60675;
+    public int fieldInt60676;
+    public int fieldInt60677;
+    public int fieldInt60678;
+    public int fieldInt60679;
+    public int fieldInt60680;
+    public int fieldInt60681;
+    public int fieldInt60682;
+    public int fieldInt60683;
+    public int fieldInt60684;
+    public int fieldInt60685;
+    public int fieldInt60686;
+    public int fieldInt60687;
+    public int fieldInt60688;
+    public int fieldInt60689;
+    public int fieldInt60690;
+    public int fieldInt60691;
+    public int fieldInt60692;
+    public int fieldInt60693;
+    public int fieldInt60694;
+    public int fieldInt60695;
+    public int fieldInt60696;
+    public int fieldInt60697;
+    public int fieldInt60698;
+    public int fieldInt60699;
+    public int fieldInt60700;
+    public int fieldInt60701;
+    public int fieldInt60702;
+    public int fieldInt60703;
+    public int fieldInt60704;
+    public int fieldInt60705;
+    public int fieldInt60706;
+    public int fieldInt60707;
+    public int fieldInt60708;
+    public int fieldInt60709;
+    public int fieldInt60710;
+    public int fieldInt60711;
+    public int fieldInt60712;
+    public int fieldInt60713;
+    public int fieldInt60714;
+    public int fieldInt60715;
+    public int fieldInt60716;
+    public int fieldInt60717;
+    public int fieldInt60718;
+    public int fieldInt60719;
+    public int fieldInt60720;
+    public int fieldInt60721;
+    public int fieldInt60722;
+    public int fieldInt60723;
+    public int fieldInt60724;
+    public int fieldInt60725;
+    public int fieldInt60726;
+    public int fieldInt60727;
+    public int fieldInt60728;
+    public int fieldInt60729;
+    public int fieldInt60730;
+    public int fieldInt60731;
+    public int fieldInt60732;
+    public int fieldInt60733;
+    public int fieldInt60734;
+    public int fieldInt60735;
+    public int fieldInt60736;
+    public int fieldInt60737;
+    public int fieldInt60738;
+    public int fieldInt60739;
+    public int fieldInt60740;
+    public int fieldInt60741;
+    public int fieldInt60742;
+    public int fieldInt60743;
+    public int fieldInt60744;
+    public int fieldInt60745;
+    public int fieldInt60746;
+    public int fieldInt60747;
+    public int fieldInt60748;
+    public int fieldInt60749;
+    public int fieldInt60750;
+    public int fieldInt60751;
+    public int fieldInt60752;
+    public int fieldInt60753;
+    public int fieldInt60754;
+    public int fieldInt60755;
+    public int fieldInt60756;
+    public int fieldInt60757;
+    public int fieldInt60758;
+    public int fieldInt60759;
+    public int fieldInt60760;
+    public int fieldInt60761;
+    public int fieldInt60762;
+    public int fieldInt60763;
+    public int fieldInt60764;
+    public int fieldInt60765;
+    public int fieldInt60766;
+    public int fieldInt60767;
+    public int fieldInt60768;
+    public int fieldInt60769;
+    public int fieldInt60770;
+    public int fieldInt60771;
+    public int fieldInt60772;
+    public int fieldInt60773;
+    public int fieldInt60774;
+    public int fieldInt60775;
+    public int fieldInt60776;
+    public int fieldInt60777;
+    public int fieldInt60778;
+    public int fieldInt60779;
+    public int fieldInt60780;
+    public int fieldInt60781;
+    public int fieldInt60782;
+    public int fieldInt60783;
+    public int fieldInt60784;
+    public int fieldInt60785;
+    public int fieldInt60786;
+    public int fieldInt60787;
+    public int fieldInt60788;
+    public int fieldInt60789;
+    public int fieldInt60790;
+    public int fieldInt60791;
+    public int fieldInt60792;
+    public int fieldInt60793;
+    public int fieldInt60794;
+    public int fieldInt60795;
+    public int fieldInt60796;
+    public int fieldInt60797;
+    public int fieldInt60798;
+    public int fieldInt60799;
+    public int fieldInt60800;
+    public int fieldInt60801;
+    public int fieldInt60802;
+    public int fieldInt60803;
+    public int fieldInt60804;
+    public int fieldInt60805;
+    public int fieldInt60806;
+    public int fieldInt60807;
+    public int fieldInt60808;
+    public int fieldInt60809;
+    public int fieldInt60810;
+    public int fieldInt60811;
+    public int fieldInt60812;
+    public int fieldInt60813;
+    public int fieldInt60814;
+    public int fieldInt60815;
+    public int fieldInt60816;
+    public int fieldInt60817;
+    public int fieldInt60818;
+    public int fieldInt60819;
+    public int fieldInt60820;
+    public int fieldInt60821;
+    public int fieldInt60822;
+    public int fieldInt60823;
+    public int fieldInt60824;
+    public int fieldInt60825;
+    public int fieldInt60826;
+    public int fieldInt60827;
+    public int fieldInt60828;
+    public int fieldInt60829;
+    public int fieldInt60830;
+    public int fieldInt60831;
+    public int fieldInt60832;
+    public int fieldInt60833;
+    public int fieldInt60834;
+    public int fieldInt60835;
+    public int fieldInt60836;
+    public int fieldInt60837;
+    public int fieldInt60838;
+    public int fieldInt60839;
+    public int fieldInt60840;
+    public int fieldInt60841;
+    public int fieldInt60842;
+    public int fieldInt60843;
+    public int fieldInt60844;
+    public int fieldInt60845;
+    public int fieldInt60846;
+    public int fieldInt60847;
+    public int fieldInt60848;
+    public int fieldInt60849;
+    public int fieldInt60850;
+    public int fieldInt60851;
+    public int fieldInt60852;
+    public int fieldInt60853;
+    public int fieldInt60854;
+    public int fieldInt60855;
+    public int fieldInt60856;
+    public int fieldInt60857;
+    public int fieldInt60858;
+    public int fieldInt60859;
+    public int fieldInt60860;
+    public int fieldInt60861;
+    public int fieldInt60862;
+    public int fieldInt60863;
+    public int fieldInt60864;
+    public int fieldInt60865;
+    public int fieldInt60866;
+    public int fieldInt60867;
+    public int fieldInt60868;
+    public int fieldInt60869;
+    public int fieldInt60870;
+    public int fieldInt60871;
+    public int fieldInt60872;
+    public int fieldInt60873;
+    public int fieldInt60874;
+    public int fieldInt60875;
+    public int fieldInt60876;
+    public int fieldInt60877;
+    public int fieldInt60878;
+    public int fieldInt60879;
+    public int fieldInt60880;
+    public int fieldInt60881;
+    public int fieldInt60882;
+    public int fieldInt60883;
+    public int fieldInt60884;
+    public int fieldInt60885;
+    public int fieldInt60886;
+    public int fieldInt60887;
+    public int fieldInt60888;
+    public int fieldInt60889;
+    public int fieldInt60890;
+    public int fieldInt60891;
+    public int fieldInt60892;
+    public int fieldInt60893;
+    public int fieldInt60894;
+    public int fieldInt60895;
+    public int fieldInt60896;
+    public int fieldInt60897;
+    public int fieldInt60898;
+    public int fieldInt60899;
+    public int fieldInt60900;
+    public int fieldInt60901;
+    public int fieldInt60902;
+    public int fieldInt60903;
+    public int fieldInt60904;
+    public int fieldInt60905;
+    public int fieldInt60906;
+    public int fieldInt60907;
+    public int fieldInt60908;
+    public int fieldInt60909;
+    public int fieldInt60910;
+    public int fieldInt60911;
+    public int fieldInt60912;
+    public int fieldInt60913;
+    public int fieldInt60914;
+    public int fieldInt60915;
+    public int fieldInt60916;
+    public int fieldInt60917;
+    public int fieldInt60918;
+    public int fieldInt60919;
+    public int fieldInt60920;
+    public int fieldInt60921;
+    public int fieldInt60922;
+    public int fieldInt60923;
+    public int fieldInt60924;
+    public int fieldInt60925;
+    public int fieldInt60926;
+    public int fieldInt60927;
+    public int fieldInt60928;
+    public int fieldInt60929;
+    public int fieldInt60930;
+    public int fieldInt60931;
+    public int fieldInt60932;
+    public int fieldInt60933;
+    public int fieldInt60934;
+    public int fieldInt60935;
+    public int fieldInt60936;
+    public int fieldInt60937;
+    public int fieldInt60938;
+    public int fieldInt60939;
+    public int fieldInt60940;
+    public int fieldInt60941;
+    public int fieldInt60942;
+    public int fieldInt60943;
+    public int fieldInt60944;
+    public int fieldInt60945;
+    public int fieldInt60946;
+    public int fieldInt60947;
+    public int fieldInt60948;
+    public int fieldInt60949;
+    public int fieldInt60950;
+    public int fieldInt60951;
+    public int fieldInt60952;
+    public int fieldInt60953;
+    public int fieldInt60954;
+    public int fieldInt60955;
+    public int fieldInt60956;
+    public int fieldInt60957;
+    public int fieldInt60958;
+    public int fieldInt60959;
+    public int fieldInt60960;
+    public int fieldInt60961;
+    public int fieldInt60962;
+    public int fieldInt60963;
+    public int fieldInt60964;
+    public int fieldInt60965;
+    public int fieldInt60966;
+    public int fieldInt60967;
+    public int fieldInt60968;
+    public int fieldInt60969;
+    public int fieldInt60970;
+    public int fieldInt60971;
+    public int fieldInt60972;
+    public int fieldInt60973;
+    public int fieldInt60974;
+    public int fieldInt60975;
+    public int fieldInt60976;
+    public int fieldInt60977;
+    public int fieldInt60978;
+    public int fieldInt60979;
+    public int fieldInt60980;
+    public int fieldInt60981;
+    public int fieldInt60982;
+    public int fieldInt60983;
+    public int fieldInt60984;
+    public int fieldInt60985;
+    public int fieldInt60986;
+    public int fieldInt60987;
+    public int fieldInt60988;
+    public int fieldInt60989;
+    public int fieldInt60990;
+    public int fieldInt60991;
+    public int fieldInt60992;
+    public int fieldInt60993;
+    public int fieldInt60994;
+    public int fieldInt60995;
+    public int fieldInt60996;
+    public int fieldInt60997;
+    public int fieldInt60998;
+    public int fieldInt60999;
+    public int fieldInt61000;
+    public int fieldInt61001;
+    public int fieldInt61002;
+    public int fieldInt61003;
+    public int fieldInt61004;
+    public int fieldInt61005;
+    public int fieldInt61006;
+    public int fieldInt61007;
+    public int fieldInt61008;
+    public int fieldInt61009;
+    public int fieldInt61010;
+    public int fieldInt61011;
+    public int fieldInt61012;
+    public int fieldInt61013;
+    public int fieldInt61014;
+    public int fieldInt61015;
+    public int fieldInt61016;
+    public int fieldInt61017;
+    public int fieldInt61018;
+    public int fieldInt61019;
+    public int fieldInt61020;
+    public int fieldInt61021;
+    public int fieldInt61022;
+    public int fieldInt61023;
+    public int fieldInt61024;
+    public int fieldInt61025;
+    public int fieldInt61026;
+    public int fieldInt61027;
+    public int fieldInt61028;
+    public int fieldInt61029;
+    public int fieldInt61030;
+    public int fieldInt61031;
+    public int fieldInt61032;
+    public int fieldInt61033;
+    public int fieldInt61034;
+    public int fieldInt61035;
+    public int fieldInt61036;
+    public int fieldInt61037;
+    public int fieldInt61038;
+    public int fieldInt61039;
+    public int fieldInt61040;
+    public int fieldInt61041;
+    public int fieldInt61042;
+    public int fieldInt61043;
+    public int fieldInt61044;
+    public int fieldInt61045;
+    public int fieldInt61046;
+    public int fieldInt61047;
+    public int fieldInt61048;
+    public int fieldInt61049;
+    public int fieldInt61050;
+    public int fieldInt61051;
+    public int fieldInt61052;
+    public int fieldInt61053;
+    public int fieldInt61054;
+    public int fieldInt61055;
+    public int fieldInt61056;
+    public int fieldInt61057;
+    public int fieldInt61058;
+    public int fieldInt61059;
+    public int fieldInt61060;
+    public int fieldInt61061;
+    public int fieldInt61062;
+    public int fieldInt61063;
+    public int fieldInt61064;
+    public int fieldInt61065;
+    public int fieldInt61066;
+    public int fieldInt61067;
+    public int fieldInt61068;
+    public int fieldInt61069;
+    public int fieldInt61070;
+    public int fieldInt61071;
+    public int fieldInt61072;
+    public int fieldInt61073;
+    public int fieldInt61074;
+    public int fieldInt61075;
+    public int fieldInt61076;
+    public int fieldInt61077;
+    public int fieldInt61078;
+    public int fieldInt61079;
+    public int fieldInt61080;
+    public int fieldInt61081;
+    public int fieldInt61082;
+    public int fieldInt61083;
+    public int fieldInt61084;
+    public int fieldInt61085;
+    public int fieldInt61086;
+    public int fieldInt61087;
+    public int fieldInt61088;
+    public int fieldInt61089;
+    public int fieldInt61090;
+    public int fieldInt61091;
+    public int fieldInt61092;
+    public int fieldInt61093;
+    public int fieldInt61094;
+    public int fieldInt61095;
+    public int fieldInt61096;
+    public int fieldInt61097;
+    public int fieldInt61098;
+    public int fieldInt61099;
+    public int fieldInt61100;
+    public int fieldInt61101;
+    public int fieldInt61102;
+    public int fieldInt61103;
+    public int fieldInt61104;
+    public int fieldInt61105;
+    public int fieldInt61106;
+    public int fieldInt61107;
+    public int fieldInt61108;
+    public int fieldInt61109;
+    public int fieldInt61110;
+    public int fieldInt61111;
+    public int fieldInt61112;
+    public int fieldInt61113;
+    public int fieldInt61114;
+    public int fieldInt61115;
+    public int fieldInt61116;
+    public int fieldInt61117;
+    public int fieldInt61118;
+    public int fieldInt61119;
+    public int fieldInt61120;
+    public int fieldInt61121;
+    public int fieldInt61122;
+    public int fieldInt61123;
+    public int fieldInt61124;
+    public int fieldInt61125;
+    public int fieldInt61126;
+    public int fieldInt61127;
+    public int fieldInt61128;
+    public int fieldInt61129;
+    public int fieldInt61130;
+    public int fieldInt61131;
+    public int fieldInt61132;
+    public int fieldInt61133;
+    public int fieldInt61134;
+    public int fieldInt61135;
+    public int fieldInt61136;
+    public int fieldInt61137;
+    public int fieldInt61138;
+    public int fieldInt61139;
+    public int fieldInt61140;
+    public int fieldInt61141;
+    public int fieldInt61142;
+    public int fieldInt61143;
+    public int fieldInt61144;
+    public int fieldInt61145;
+    public int fieldInt61146;
+    public int fieldInt61147;
+    public int fieldInt61148;
+    public int fieldInt61149;
+    public int fieldInt61150;
+    public int fieldInt61151;
+    public int fieldInt61152;
+    public int fieldInt61153;
+    public int fieldInt61154;
+    public int fieldInt61155;
+    public int fieldInt61156;
+    public int fieldInt61157;
+    public int fieldInt61158;
+    public int fieldInt61159;
+    public int fieldInt61160;
+    public int fieldInt61161;
+    public int fieldInt61162;
+    public int fieldInt61163;
+    public int fieldInt61164;
+    public int fieldInt61165;
+    public int fieldInt61166;
+    public int fieldInt61167;
+    public int fieldInt61168;
+    public int fieldInt61169;
+    public int fieldInt61170;
+    public int fieldInt61171;
+    public int fieldInt61172;
+    public int fieldInt61173;
+    public int fieldInt61174;
+    public int fieldInt61175;
+    public int fieldInt61176;
+    public int fieldInt61177;
+    public int fieldInt61178;
+    public int fieldInt61179;
+    public int fieldInt61180;
+    public int fieldInt61181;
+    public int fieldInt61182;
+    public int fieldInt61183;
+    public int fieldInt61184;
+    public int fieldInt61185;
+    public int fieldInt61186;
+    public int fieldInt61187;
+    public int fieldInt61188;
+    public int fieldInt61189;
+    public int fieldInt61190;
+    public int fieldInt61191;
+    public int fieldInt61192;
+    public int fieldInt61193;
+    public int fieldInt61194;
+    public int fieldInt61195;
+    public int fieldInt61196;
+    public int fieldInt61197;
+    public int fieldInt61198;
+    public int fieldInt61199;
+    public int fieldInt61200;
+    public int fieldInt61201;
+    public int fieldInt61202;
+    public int fieldInt61203;
+    public int fieldInt61204;
+    public int fieldInt61205;
+    public int fieldInt61206;
+    public int fieldInt61207;
+    public int fieldInt61208;
+    public int fieldInt61209;
+    public int fieldInt61210;
+    public int fieldInt61211;
+    public int fieldInt61212;
+    public int fieldInt61213;
+    public int fieldInt61214;
+    public int fieldInt61215;
+    public int fieldInt61216;
+    public int fieldInt61217;
+    public int fieldInt61218;
+    public int fieldInt61219;
+    public int fieldInt61220;
+    public int fieldInt61221;
+    public int fieldInt61222;
+    public int fieldInt61223;
+    public int fieldInt61224;
+    public int fieldInt61225;
+    public int fieldInt61226;
+    public int fieldInt61227;
+    public int fieldInt61228;
+    public int fieldInt61229;
+    public int fieldInt61230;
+    public int fieldInt61231;
+    public int fieldInt61232;
+    public int fieldInt61233;
+    public int fieldInt61234;
+    public int fieldInt61235;
+    public int fieldInt61236;
+    public int fieldInt61237;
+    public int fieldInt61238;
+    public int fieldInt61239;
+    public int fieldInt61240;
+    public int fieldInt61241;
+    public int fieldInt61242;
+    public int fieldInt61243;
+    public int fieldInt61244;
+    public int fieldInt61245;
+    public int fieldInt61246;
+    public int fieldInt61247;
+    public int fieldInt61248;
+    public int fieldInt61249;
+    public int fieldInt61250;
+    public int fieldInt61251;
+    public int fieldInt61252;
+    public int fieldInt61253;
+    public int fieldInt61254;
+    public int fieldInt61255;
+    public int fieldInt61256;
+    public int fieldInt61257;
+    public int fieldInt61258;
+    public int fieldInt61259;
+    public int fieldInt61260;
+    public int fieldInt61261;
+    public int fieldInt61262;
+    public int fieldInt61263;
+    public int fieldInt61264;
+    public int fieldInt61265;
+    public int fieldInt61266;
+    public int fieldInt61267;
+    public int fieldInt61268;
+    public int fieldInt61269;
+    public int fieldInt61270;
+    public int fieldInt61271;
+    public int fieldInt61272;
+    public int fieldInt61273;
+    public int fieldInt61274;
+    public int fieldInt61275;
+    public int fieldInt61276;
+    public int fieldInt61277;
+    public int fieldInt61278;
+    public int fieldInt61279;
+    public int fieldInt61280;
+    public int fieldInt61281;
+    public int fieldInt61282;
+    public int fieldInt61283;
+    public int fieldInt61284;
+    public int fieldInt61285;
+    public int fieldInt61286;
+    public int fieldInt61287;
+    public int fieldInt61288;
+    public int fieldInt61289;
+    public int fieldInt61290;
+    public int fieldInt61291;
+    public int fieldInt61292;
+    public int fieldInt61293;
+    public int fieldInt61294;
+    public int fieldInt61295;
+    public int fieldInt61296;
+    public int fieldInt61297;
+    public int fieldInt61298;
+    public int fieldInt61299;
+    public int fieldInt61300;
+    public int fieldInt61301;
+    public int fieldInt61302;
+    public int fieldInt61303;
+    public int fieldInt61304;
+    public int fieldInt61305;
+    public int fieldInt61306;
+    public int fieldInt61307;
+    public int fieldInt61308;
+    public int fieldInt61309;
+    public int fieldInt61310;
+    public int fieldInt61311;
+    public int fieldInt61312;
+    public int fieldInt61313;
+    public int fieldInt61314;
+    public int fieldInt61315;
+    public int fieldInt61316;
+    public int fieldInt61317;
+    public int fieldInt61318;
+    public int fieldInt61319;
+    public int fieldInt61320;
+    public int fieldInt61321;
+    public int fieldInt61322;
+    public int fieldInt61323;
+    public int fieldInt61324;
+    public int fieldInt61325;
+    public int fieldInt61326;
+    public int fieldInt61327;
+    public int fieldInt61328;
+    public int fieldInt61329;
+    public int fieldInt61330;
+    public int fieldInt61331;
+    public int fieldInt61332;
+    public int fieldInt61333;
+    public int fieldInt61334;
+    public int fieldInt61335;
+    public int fieldInt61336;
+    public int fieldInt61337;
+    public int fieldInt61338;
+    public int fieldInt61339;
+    public int fieldInt61340;
+    public int fieldInt61341;
+    public int fieldInt61342;
+    public int fieldInt61343;
+    public int fieldInt61344;
+    public int fieldInt61345;
+    public int fieldInt61346;
+    public int fieldInt61347;
+    public int fieldInt61348;
+    public int fieldInt61349;
+    public int fieldInt61350;
+    public int fieldInt61351;
+    public int fieldInt61352;
+    public int fieldInt61353;
+    public int fieldInt61354;
+    public int fieldInt61355;
+    public int fieldInt61356;
+    public int fieldInt61357;
+    public int fieldInt61358;
+    public int fieldInt61359;
+    public int fieldInt61360;
+    public int fieldInt61361;
+    public int fieldInt61362;
+    public int fieldInt61363;
+    public int fieldInt61364;
+    public int fieldInt61365;
+    public int fieldInt61366;
+    public int fieldInt61367;
+    public int fieldInt61368;
+    public int fieldInt61369;
+    public int fieldInt61370;
+    public int fieldInt61371;
+    public int fieldInt61372;
+    public int fieldInt61373;
+    public int fieldInt61374;
+    public int fieldInt61375;
+    public int fieldInt61376;
+    public int fieldInt61377;
+    public int fieldInt61378;
+    public int fieldInt61379;
+    public int fieldInt61380;
+    public int fieldInt61381;
+    public int fieldInt61382;
+    public int fieldInt61383;
+    public int fieldInt61384;
+    public int fieldInt61385;
+    public int fieldInt61386;
+    public int fieldInt61387;
+    public int fieldInt61388;
+    public int fieldInt61389;
+    public int fieldInt61390;
+    public int fieldInt61391;
+    public int fieldInt61392;
+    public int fieldInt61393;
+    public int fieldInt61394;
+    public int fieldInt61395;
+    public int fieldInt61396;
+    public int fieldInt61397;
+    public int fieldInt61398;
+    public int fieldInt61399;
+    public int fieldInt61400;
+    public int fieldInt61401;
+    public int fieldInt61402;
+    public int fieldInt61403;
+    public int fieldInt61404;
+    public int fieldInt61405;
+    public int fieldInt61406;
+    public int fieldInt61407;
+    public int fieldInt61408;
+    public int fieldInt61409;
+    public int fieldInt61410;
+    public int fieldInt61411;
+    public int fieldInt61412;
+    public int fieldInt61413;
+    public int fieldInt61414;
+    public int fieldInt61415;
+    public int fieldInt61416;
+    public int fieldInt61417;
+    public int fieldInt61418;
+    public int fieldInt61419;
+    public int fieldInt61420;
+    public int fieldInt61421;
+    public int fieldInt61422;
+    public int fieldInt61423;
+    public int fieldInt61424;
+    public int fieldInt61425;
+    public int fieldInt61426;
+    public int fieldInt61427;
+    public int fieldInt61428;
+    public int fieldInt61429;
+    public int fieldInt61430;
+    public int fieldInt61431;
+    public int fieldInt61432;
+    public int fieldInt61433;
+    public int fieldInt61434;
+    public int fieldInt61435;
+    public int fieldInt61436;
+    public int fieldInt61437;
+    public int fieldInt61438;
+    public int fieldInt61439;
+    public int fieldInt61440;
+    public int fieldInt61441;
+    public int fieldInt61442;
+    public int fieldInt61443;
+    public int fieldInt61444;
+    public int fieldInt61445;
+    public int fieldInt61446;
+    public int fieldInt61447;
+    public int fieldInt61448;
+    public int fieldInt61449;
+    public int fieldInt61450;
+    public int fieldInt61451;
+    public int fieldInt61452;
+    public int fieldInt61453;
+    public int fieldInt61454;
+    public int fieldInt61455;
+    public int fieldInt61456;
+    public int fieldInt61457;
+    public int fieldInt61458;
+    public int fieldInt61459;
+    public int fieldInt61460;
+    public int fieldInt61461;
+    public int fieldInt61462;
+    public int fieldInt61463;
+    public int fieldInt61464;
+    public int fieldInt61465;
+    public int fieldInt61466;
+    public int fieldInt61467;
+    public int fieldInt61468;
+    public int fieldInt61469;
+    public int fieldInt61470;
+    public int fieldInt61471;
+    public int fieldInt61472;
+    public int fieldInt61473;
+    public int fieldInt61474;
+    public int fieldInt61475;
+    public int fieldInt61476;
+    public int fieldInt61477;
+    public int fieldInt61478;
+    public int fieldInt61479;
+    public int fieldInt61480;
+    public int fieldInt61481;
+    public int fieldInt61482;
+    public int fieldInt61483;
+    public int fieldInt61484;
+    public int fieldInt61485;
+    public int fieldInt61486;
+    public int fieldInt61487;
+    public int fieldInt61488;
+    public int fieldInt61489;
+    public int fieldInt61490;
+    public int fieldInt61491;
+    public int fieldInt61492;
+    public int fieldInt61493;
+    public int fieldInt61494;
+    public int fieldInt61495;
+    public int fieldInt61496;
+    public int fieldInt61497;
+    public int fieldInt61498;
+    public int fieldInt61499;
+    public int fieldInt61500;
+    public int fieldInt61501;
+    public int fieldInt61502;
+    public int fieldInt61503;
+    public int fieldInt61504;
+    public int fieldInt61505;
+    public int fieldInt61506;
+    public int fieldInt61507;
+    public int fieldInt61508;
+    public int fieldInt61509;
+    public int fieldInt61510;
+    public int fieldInt61511;
+    public int fieldInt61512;
+    public int fieldInt61513;
+    public int fieldInt61514;
+    public int fieldInt61515;
+    public int fieldInt61516;
+    public int fieldInt61517;
+    public int fieldInt61518;
+    public int fieldInt61519;
+    public int fieldInt61520;
+    public int fieldInt61521;
+    public int fieldInt61522;
+    public int fieldInt61523;
+    public int fieldInt61524;
+    public int fieldInt61525;
+    public int fieldInt61526;
+    public int fieldInt61527;
+    public int fieldInt61528;
+    public int fieldInt61529;
+    public int fieldInt61530;
+    public int fieldInt61531;
+    public int fieldInt61532;
+    public int fieldInt61533;
+    public int fieldInt61534;
+    public int fieldInt61535;
+    public int fieldInt61536;
+    public int fieldInt61537;
+    public int fieldInt61538;
+    public int fieldInt61539;
+    public int fieldInt61540;
+    public int fieldInt61541;
+    public int fieldInt61542;
+    public int fieldInt61543;
+    public int fieldInt61544;
+    public int fieldInt61545;
+    public int fieldInt61546;
+    public int fieldInt61547;
+    public int fieldInt61548;
+    public int fieldInt61549;
+    public int fieldInt61550;
+    public int fieldInt61551;
+    public int fieldInt61552;
+    public int fieldInt61553;
+    public int fieldInt61554;
+    public int fieldInt61555;
+    public int fieldInt61556;
+    public int fieldInt61557;
+    public int fieldInt61558;
+    public int fieldInt61559;
+    public int fieldInt61560;
+    public int fieldInt61561;
+    public int fieldInt61562;
+    public int fieldInt61563;
+    public int fieldInt61564;
+    public int fieldInt61565;
+    public int fieldInt61566;
+    public int fieldInt61567;
+    public int fieldInt61568;
+    public int fieldInt61569;
+    public int fieldInt61570;
+    public int fieldInt61571;
+    public int fieldInt61572;
+    public int fieldInt61573;
+    public int fieldInt61574;
+    public int fieldInt61575;
+    public int fieldInt61576;
+    public int fieldInt61577;
+    public int fieldInt61578;
+    public int fieldInt61579;
+    public int fieldInt61580;
+    public int fieldInt61581;
+    public int fieldInt61582;
+    public int fieldInt61583;
+    public int fieldInt61584;
+    public int fieldInt61585;
+    public int fieldInt61586;
+    public int fieldInt61587;
+    public int fieldInt61588;
+    public int fieldInt61589;
+    public int fieldInt61590;
+    public int fieldInt61591;
+    public int fieldInt61592;
+    public int fieldInt61593;
+    public int fieldInt61594;
+    public int fieldInt61595;
+    public int fieldInt61596;
+    public int fieldInt61597;
+    public int fieldInt61598;
+    public int fieldInt61599;
+    public int fieldInt61600;
+    public int fieldInt61601;
+    public int fieldInt61602;
+    public int fieldInt61603;
+    public int fieldInt61604;
+    public int fieldInt61605;
+    public int fieldInt61606;
+    public int fieldInt61607;
+    public int fieldInt61608;
+    public int fieldInt61609;
+    public int fieldInt61610;
+    public int fieldInt61611;
+    public int fieldInt61612;
+    public int fieldInt61613;
+    public int fieldInt61614;
+    public int fieldInt61615;
+    public int fieldInt61616;
+    public int fieldInt61617;
+    public int fieldInt61618;
+    public int fieldInt61619;
+    public int fieldInt61620;
+    public int fieldInt61621;
+    public int fieldInt61622;
+    public int fieldInt61623;
+    public int fieldInt61624;
+    public int fieldInt61625;
+    public int fieldInt61626;
+    public int fieldInt61627;
+    public int fieldInt61628;
+    public int fieldInt61629;
+    public int fieldInt61630;
+    public int fieldInt61631;
+    public int fieldInt61632;
+    public int fieldInt61633;
+    public int fieldInt61634;
+    public int fieldInt61635;
+    public int fieldInt61636;
+    public int fieldInt61637;
+    public int fieldInt61638;
+    public int fieldInt61639;
+    public int fieldInt61640;
+    public int fieldInt61641;
+    public int fieldInt61642;
+    public int fieldInt61643;
+    public int fieldInt61644;
+    public int fieldInt61645;
+    public int fieldInt61646;
+    public int fieldInt61647;
+    public int fieldInt61648;
+    public int fieldInt61649;
+    public int fieldInt61650;
+    public int fieldInt61651;
+    public int fieldInt61652;
+    public int fieldInt61653;
+    public int fieldInt61654;
+    public int fieldInt61655;
+    public int fieldInt61656;
+    public int fieldInt61657;
+    public int fieldInt61658;
+    public int fieldInt61659;
+    public int fieldInt61660;
+    public int fieldInt61661;
+    public int fieldInt61662;
+    public int fieldInt61663;
+    public int fieldInt61664;
+    public int fieldInt61665;
+    public int fieldInt61666;
+    public int fieldInt61667;
+    public int fieldInt61668;
+    public int fieldInt61669;
+    public int fieldInt61670;
+    public int fieldInt61671;
+    public int fieldInt61672;
+    public int fieldInt61673;
+    public int fieldInt61674;
+    public int fieldInt61675;
+    public int fieldInt61676;
+    public int fieldInt61677;
+    public int fieldInt61678;
+    public int fieldInt61679;
+    public int fieldInt61680;
+    public int fieldInt61681;
+    public int fieldInt61682;
+    public int fieldInt61683;
+    public int fieldInt61684;
+    public int fieldInt61685;
+    public int fieldInt61686;
+    public int fieldInt61687;
+    public int fieldInt61688;
+    public int fieldInt61689;
+    public int fieldInt61690;
+    public int fieldInt61691;
+    public int fieldInt61692;
+    public int fieldInt61693;
+    public int fieldInt61694;
+    public int fieldInt61695;
+    public int fieldInt61696;
+    public int fieldInt61697;
+    public int fieldInt61698;
+    public int fieldInt61699;
+    public int fieldInt61700;
+    public int fieldInt61701;
+    public int fieldInt61702;
+    public int fieldInt61703;
+    public int fieldInt61704;
+    public int fieldInt61705;
+    public int fieldInt61706;
+    public int fieldInt61707;
+    public int fieldInt61708;
+    public int fieldInt61709;
+    public int fieldInt61710;
+    public int fieldInt61711;
+    public int fieldInt61712;
+    public int fieldInt61713;
+    public int fieldInt61714;
+    public int fieldInt61715;
+    public int fieldInt61716;
+    public int fieldInt61717;
+    public int fieldInt61718;
+    public int fieldInt61719;
+    public int fieldInt61720;
+    public int fieldInt61721;
+    public int fieldInt61722;
+    public int fieldInt61723;
+    public int fieldInt61724;
+    public int fieldInt61725;
+    public int fieldInt61726;
+    public int fieldInt61727;
+    public int fieldInt61728;
+    public int fieldInt61729;
+    public int fieldInt61730;
+    public int fieldInt61731;
+    public int fieldInt61732;
+    public int fieldInt61733;
+    public int fieldInt61734;
+    public int fieldInt61735;
+    public int fieldInt61736;
+    public int fieldInt61737;
+    public int fieldInt61738;
+    public int fieldInt61739;
+    public int fieldInt61740;
+    public int fieldInt61741;
+    public int fieldInt61742;
+    public int fieldInt61743;
+    public int fieldInt61744;
+    public int fieldInt61745;
+    public int fieldInt61746;
+    public int fieldInt61747;
+    public int fieldInt61748;
+    public int fieldInt61749;
+    public int fieldInt61750;
+    public int fieldInt61751;
+    public int fieldInt61752;
+    public int fieldInt61753;
+    public int fieldInt61754;
+    public int fieldInt61755;
+    public int fieldInt61756;
+    public int fieldInt61757;
+    public int fieldInt61758;
+    public int fieldInt61759;
+    public int fieldInt61760;
+    public int fieldInt61761;
+    public int fieldInt61762;
+    public int fieldInt61763;
+    public int fieldInt61764;
+    public int fieldInt61765;
+    public int fieldInt61766;
+    public int fieldInt61767;
+    public int fieldInt61768;
+    public int fieldInt61769;
+    public int fieldInt61770;
+    public int fieldInt61771;
+    public int fieldInt61772;
+    public int fieldInt61773;
+    public int fieldInt61774;
+    public int fieldInt61775;
+    public int fieldInt61776;
+    public int fieldInt61777;
+    public int fieldInt61778;
+    public int fieldInt61779;
+    public int fieldInt61780;
+    public int fieldInt61781;
+    public int fieldInt61782;
+    public int fieldInt61783;
+    public int fieldInt61784;
+    public int fieldInt61785;
+    public int fieldInt61786;
+    public int fieldInt61787;
+    public int fieldInt61788;
+    public int fieldInt61789;
+    public int fieldInt61790;
+    public int fieldInt61791;
+    public int fieldInt61792;
+    public int fieldInt61793;
+    public int fieldInt61794;
+    public int fieldInt61795;
+    public int fieldInt61796;
+    public int fieldInt61797;
+    public int fieldInt61798;
+    public int fieldInt61799;
+    public int fieldInt61800;
+    public int fieldInt61801;
+    public int fieldInt61802;
+    public int fieldInt61803;
+    public int fieldInt61804;
+    public int fieldInt61805;
+    public int fieldInt61806;
+    public int fieldInt61807;
+    public int fieldInt61808;
+    public int fieldInt61809;
+    public int fieldInt61810;
+    public int fieldInt61811;
+    public int fieldInt61812;
+    public int fieldInt61813;
+    public int fieldInt61814;
+    public int fieldInt61815;
+    public int fieldInt61816;
+    public int fieldInt61817;
+    public int fieldInt61818;
+    public int fieldInt61819;
+    public int fieldInt61820;
+    public int fieldInt61821;
+    public int fieldInt61822;
+    public int fieldInt61823;
+    public int fieldInt61824;
+    public int fieldInt61825;
+    public int fieldInt61826;
+    public int fieldInt61827;
+    public int fieldInt61828;
+    public int fieldInt61829;
+    public int fieldInt61830;
+    public int fieldInt61831;
+    public int fieldInt61832;
+    public int fieldInt61833;
+    public int fieldInt61834;
+    public int fieldInt61835;
+    public int fieldInt61836;
+    public int fieldInt61837;
+    public int fieldInt61838;
+    public int fieldInt61839;
+    public int fieldInt61840;
+    public int fieldInt61841;
+    public int fieldInt61842;
+    public int fieldInt61843;
+    public int fieldInt61844;
+    public int fieldInt61845;
+    public int fieldInt61846;
+    public int fieldInt61847;
+    public int fieldInt61848;
+    public int fieldInt61849;
+    public int fieldInt61850;
+    public int fieldInt61851;
+    public int fieldInt61852;
+    public int fieldInt61853;
+    public int fieldInt61854;
+    public int fieldInt61855;
+    public int fieldInt61856;
+    public int fieldInt61857;
+    public int fieldInt61858;
+    public int fieldInt61859;
+    public int fieldInt61860;
+    public int fieldInt61861;
+    public int fieldInt61862;
+    public int fieldInt61863;
+    public int fieldInt61864;
+    public int fieldInt61865;
+    public int fieldInt61866;
+    public int fieldInt61867;
+    public int fieldInt61868;
+    public int fieldInt61869;
+    public int fieldInt61870;
+    public int fieldInt61871;
+    public int fieldInt61872;
+    public int fieldInt61873;
+    public int fieldInt61874;
+    public int fieldInt61875;
+    public int fieldInt61876;
+    public int fieldInt61877;
+    public int fieldInt61878;
+    public int fieldInt61879;
+    public int fieldInt61880;
+    public int fieldInt61881;
+    public int fieldInt61882;
+    public int fieldInt61883;
+    public int fieldInt61884;
+    public int fieldInt61885;
+    public int fieldInt61886;
+    public int fieldInt61887;
+    public int fieldInt61888;
+    public int fieldInt61889;
+    public int fieldInt61890;
+    public int fieldInt61891;
+    public int fieldInt61892;
+    public int fieldInt61893;
+    public int fieldInt61894;
+    public int fieldInt61895;
+    public int fieldInt61896;
+    public int fieldInt61897;
+    public int fieldInt61898;
+    public int fieldInt61899;
+    public int fieldInt61900;
+    public int fieldInt61901;
+    public int fieldInt61902;
+    public int fieldInt61903;
+    public int fieldInt61904;
+    public int fieldInt61905;
+    public int fieldInt61906;
+    public int fieldInt61907;
+    public int fieldInt61908;
+    public int fieldInt61909;
+    public int fieldInt61910;
+    public int fieldInt61911;
+    public int fieldInt61912;
+    public int fieldInt61913;
+    public int fieldInt61914;
+    public int fieldInt61915;
+    public int fieldInt61916;
+    public int fieldInt61917;
+    public int fieldInt61918;
+    public int fieldInt61919;
+    public int fieldInt61920;
+    public int fieldInt61921;
+    public int fieldInt61922;
+    public int fieldInt61923;
+    public int fieldInt61924;
+    public int fieldInt61925;
+    public int fieldInt61926;
+    public int fieldInt61927;
+    public int fieldInt61928;
+    public int fieldInt61929;
+    public int fieldInt61930;
+    public int fieldInt61931;
+    public int fieldInt61932;
+    public int fieldInt61933;
+    public int fieldInt61934;
+    public int fieldInt61935;
+    public int fieldInt61936;
+    public int fieldInt61937;
+    public int fieldInt61938;
+    public int fieldInt61939;
+    public int fieldInt61940;
+    public int fieldInt61941;
+    public int fieldInt61942;
+    public int fieldInt61943;
+    public int fieldInt61944;
+    public int fieldInt61945;
+    public int fieldInt61946;
+    public int fieldInt61947;
+    public int fieldInt61948;
+    public int fieldInt61949;
+    public int fieldInt61950;
+    public int fieldInt61951;
+    public int fieldInt61952;
+    public int fieldInt61953;
+    public int fieldInt61954;
+    public int fieldInt61955;
+    public int fieldInt61956;
+    public int fieldInt61957;
+    public int fieldInt61958;
+    public int fieldInt61959;
+    public int fieldInt61960;
+    public int fieldInt61961;
+    public int fieldInt61962;
+    public int fieldInt61963;
+    public int fieldInt61964;
+    public int fieldInt61965;
+    public int fieldInt61966;
+    public int fieldInt61967;
+    public int fieldInt61968;
+    public int fieldInt61969;
+    public int fieldInt61970;
+    public int fieldInt61971;
+    public int fieldInt61972;
+    public int fieldInt61973;
+    public int fieldInt61974;
+    public int fieldInt61975;
+    public int fieldInt61976;
+    public int fieldInt61977;
+    public int fieldInt61978;
+    public int fieldInt61979;
+    public int fieldInt61980;
+    public int fieldInt61981;
+    public int fieldInt61982;
+    public int fieldInt61983;
+    public int fieldInt61984;
+    public int fieldInt61985;
+    public int fieldInt61986;
+    public int fieldInt61987;
+    public int fieldInt61988;
+    public int fieldInt61989;
+    public int fieldInt61990;
+    public int fieldInt61991;
+    public int fieldInt61992;
+    public int fieldInt61993;
+    public int fieldInt61994;
+    public int fieldInt61995;
+    public int fieldInt61996;
+    public int fieldInt61997;
+    public int fieldInt61998;
+    public int fieldInt61999;
+    public int fieldInt62000;
+    public int fieldInt62001;
+    public int fieldInt62002;
+    public int fieldInt62003;
+    public int fieldInt62004;
+    public int fieldInt62005;
+    public int fieldInt62006;
+    public int fieldInt62007;
+    public int fieldInt62008;
+    public int fieldInt62009;
+    public int fieldInt62010;
+    public int fieldInt62011;
+    public int fieldInt62012;
+    public int fieldInt62013;
+    public int fieldInt62014;
+    public int fieldInt62015;
+    public int fieldInt62016;
+    public int fieldInt62017;
+    public int fieldInt62018;
+    public int fieldInt62019;
+    public int fieldInt62020;
+    public int fieldInt62021;
+    public int fieldInt62022;
+    public int fieldInt62023;
+    public int fieldInt62024;
+    public int fieldInt62025;
+    public int fieldInt62026;
+    public int fieldInt62027;
+    public int fieldInt62028;
+    public int fieldInt62029;
+    public int fieldInt62030;
+    public int fieldInt62031;
+    public int fieldInt62032;
+    public int fieldInt62033;
+    public int fieldInt62034;
+    public int fieldInt62035;
+    public int fieldInt62036;
+    public int fieldInt62037;
+    public int fieldInt62038;
+    public int fieldInt62039;
+    public int fieldInt62040;
+    public int fieldInt62041;
+    public int fieldInt62042;
+    public int fieldInt62043;
+    public int fieldInt62044;
+    public int fieldInt62045;
+    public int fieldInt62046;
+    public int fieldInt62047;
+    public int fieldInt62048;
+    public int fieldInt62049;
+    public int fieldInt62050;
+    public int fieldInt62051;
+    public int fieldInt62052;
+    public int fieldInt62053;
+    public int fieldInt62054;
+    public int fieldInt62055;
+    public int fieldInt62056;
+    public int fieldInt62057;
+    public int fieldInt62058;
+    public int fieldInt62059;
+    public int fieldInt62060;
+    public int fieldInt62061;
+    public int fieldInt62062;
+    public int fieldInt62063;
+    public int fieldInt62064;
+    public int fieldInt62065;
+    public int fieldInt62066;
+    public int fieldInt62067;
+    public int fieldInt62068;
+    public int fieldInt62069;
+    public int fieldInt62070;
+    public int fieldInt62071;
+    public int fieldInt62072;
+    public int fieldInt62073;
+    public int fieldInt62074;
+    public int fieldInt62075;
+    public int fieldInt62076;
+    public int fieldInt62077;
+    public int fieldInt62078;
+    public int fieldInt62079;
+    public int fieldInt62080;
+    public int fieldInt62081;
+    public int fieldInt62082;
+    public int fieldInt62083;
+    public int fieldInt62084;
+    public int fieldInt62085;
+    public int fieldInt62086;
+    public int fieldInt62087;
+    public int fieldInt62088;
+    public int fieldInt62089;
+    public int fieldInt62090;
+    public int fieldInt62091;
+    public int fieldInt62092;
+    public int fieldInt62093;
+    public int fieldInt62094;
+    public int fieldInt62095;
+    public int fieldInt62096;
+    public int fieldInt62097;
+    public int fieldInt62098;
+    public int fieldInt62099;
+    public int fieldInt62100;
+    public int fieldInt62101;
+    public int fieldInt62102;
+    public int fieldInt62103;
+    public int fieldInt62104;
+    public int fieldInt62105;
+    public int fieldInt62106;
+    public int fieldInt62107;
+    public int fieldInt62108;
+    public int fieldInt62109;
+    public int fieldInt62110;
+    public int fieldInt62111;
+    public int fieldInt62112;
+    public int fieldInt62113;
+    public int fieldInt62114;
+    public int fieldInt62115;
+    public int fieldInt62116;
+    public int fieldInt62117;
+    public int fieldInt62118;
+    public int fieldInt62119;
+    public int fieldInt62120;
+    public int fieldInt62121;
+    public int fieldInt62122;
+    public int fieldInt62123;
+    public int fieldInt62124;
+    public int fieldInt62125;
+    public int fieldInt62126;
+    public int fieldInt62127;
+    public int fieldInt62128;
+    public int fieldInt62129;
+    public int fieldInt62130;
+    public int fieldInt62131;
+    public int fieldInt62132;
+    public int fieldInt62133;
+    public int fieldInt62134;
+    public int fieldInt62135;
+    public int fieldInt62136;
+    public int fieldInt62137;
+    public int fieldInt62138;
+    public int fieldInt62139;
+    public int fieldInt62140;
+    public int fieldInt62141;
+    public int fieldInt62142;
+    public int fieldInt62143;
+    public int fieldInt62144;
+    public int fieldInt62145;
+    public int fieldInt62146;
+    public int fieldInt62147;
+    public int fieldInt62148;
+    public int fieldInt62149;
+    public int fieldInt62150;
+    public int fieldInt62151;
+    public int fieldInt62152;
+    public int fieldInt62153;
+    public int fieldInt62154;
+    public int fieldInt62155;
+    public int fieldInt62156;
+    public int fieldInt62157;
+    public int fieldInt62158;
+    public int fieldInt62159;
+    public int fieldInt62160;
+    public int fieldInt62161;
+    public int fieldInt62162;
+    public int fieldInt62163;
+    public int fieldInt62164;
+    public int fieldInt62165;
+    public int fieldInt62166;
+    public int fieldInt62167;
+    public int fieldInt62168;
+    public int fieldInt62169;
+    public int fieldInt62170;
+    public int fieldInt62171;
+    public int fieldInt62172;
+    public int fieldInt62173;
+    public int fieldInt62174;
+    public int fieldInt62175;
+    public int fieldInt62176;
+    public int fieldInt62177;
+    public int fieldInt62178;
+    public int fieldInt62179;
+    public int fieldInt62180;
+    public int fieldInt62181;
+    public int fieldInt62182;
+    public int fieldInt62183;
+    public int fieldInt62184;
+    public int fieldInt62185;
+    public int fieldInt62186;
+    public int fieldInt62187;
+    public int fieldInt62188;
+    public int fieldInt62189;
+    public int fieldInt62190;
+    public int fieldInt62191;
+    public int fieldInt62192;
+    public int fieldInt62193;
+    public int fieldInt62194;
+    public int fieldInt62195;
+    public int fieldInt62196;
+    public int fieldInt62197;
+    public int fieldInt62198;
+    public int fieldInt62199;
+    public int fieldInt62200;
+    public int fieldInt62201;
+    public int fieldInt62202;
+    public int fieldInt62203;
+    public int fieldInt62204;
+    public int fieldInt62205;
+    public int fieldInt62206;
+    public int fieldInt62207;
+    public int fieldInt62208;
+    public int fieldInt62209;
+    public int fieldInt62210;
+    public int fieldInt62211;
+    public int fieldInt62212;
+    public int fieldInt62213;
+    public int fieldInt62214;
+    public int fieldInt62215;
+    public int fieldInt62216;
+    public int fieldInt62217;
+    public int fieldInt62218;
+    public int fieldInt62219;
+    public int fieldInt62220;
+    public int fieldInt62221;
+    public int fieldInt62222;
+    public int fieldInt62223;
+    public int fieldInt62224;
+    public int fieldInt62225;
+    public int fieldInt62226;
+    public int fieldInt62227;
+    public int fieldInt62228;
+    public int fieldInt62229;
+    public int fieldInt62230;
+    public int fieldInt62231;
+    public int fieldInt62232;
+    public int fieldInt62233;
+    public int fieldInt62234;
+    public int fieldInt62235;
+    public int fieldInt62236;
+    public int fieldInt62237;
+    public int fieldInt62238;
+    public int fieldInt62239;
+    public int fieldInt62240;
+    public int fieldInt62241;
+    public int fieldInt62242;
+    public int fieldInt62243;
+    public int fieldInt62244;
+    public int fieldInt62245;
+    public int fieldInt62246;
+    public int fieldInt62247;
+    public int fieldInt62248;
+    public int fieldInt62249;
+    public int fieldInt62250;
+    public int fieldInt62251;
+    public int fieldInt62252;
+    public int fieldInt62253;
+    public int fieldInt62254;
+    public int fieldInt62255;
+    public int fieldInt62256;
+    public int fieldInt62257;
+    public int fieldInt62258;
+    public int fieldInt62259;
+    public int fieldInt62260;
+    public int fieldInt62261;
+    public int fieldInt62262;
+    public int fieldInt62263;
+    public int fieldInt62264;
+    public int fieldInt62265;
+    public int fieldInt62266;
+    public int fieldInt62267;
+    public int fieldInt62268;
+    public int fieldInt62269;
+    public int fieldInt62270;
+    public int fieldInt62271;
+    public int fieldInt62272;
+    public int fieldInt62273;
+    public int fieldInt62274;
+    public int fieldInt62275;
+    public int fieldInt62276;
+    public int fieldInt62277;
+    public int fieldInt62278;
+    public int fieldInt62279;
+    public int fieldInt62280;
+    public int fieldInt62281;
+    public int fieldInt62282;
+    public int fieldInt62283;
+    public int fieldInt62284;
+    public int fieldInt62285;
+    public int fieldInt62286;
+    public int fieldInt62287;
+    public int fieldInt62288;
+    public int fieldInt62289;
+    public int fieldInt62290;
+    public int fieldInt62291;
+    public int fieldInt62292;
+    public int fieldInt62293;
+    public int fieldInt62294;
+    public int fieldInt62295;
+    public int fieldInt62296;
+    public int fieldInt62297;
+    public int fieldInt62298;
+    public int fieldInt62299;
+    public int fieldInt62300;
+    public int fieldInt62301;
+    public int fieldInt62302;
+    public int fieldInt62303;
+    public int fieldInt62304;
+    public int fieldInt62305;
+    public int fieldInt62306;
+    public int fieldInt62307;
+    public int fieldInt62308;
+    public int fieldInt62309;
+    public int fieldInt62310;
+    public int fieldInt62311;
+    public int fieldInt62312;
+    public int fieldInt62313;
+    public int fieldInt62314;
+    public int fieldInt62315;
+    public int fieldInt62316;
+    public int fieldInt62317;
+    public int fieldInt62318;
+    public int fieldInt62319;
+    public int fieldInt62320;
+    public int fieldInt62321;
+    public int fieldInt62322;
+    public int fieldInt62323;
+    public int fieldInt62324;
+    public int fieldInt62325;
+    public int fieldInt62326;
+    public int fieldInt62327;
+    public int fieldInt62328;
+    public int fieldInt62329;
+    public int fieldInt62330;
+    public int fieldInt62331;
+    public int fieldInt62332;
+    public int fieldInt62333;
+    public int fieldInt62334;
+    public int fieldInt62335;
+    public int fieldInt62336;
+    public int fieldInt62337;
+    public int fieldInt62338;
+    public int fieldInt62339;
+    public int fieldInt62340;
+    public int fieldInt62341;
+    public int fieldInt62342;
+    public int fieldInt62343;
+    public int fieldInt62344;
+    public int fieldInt62345;
+    public int fieldInt62346;
+    public int fieldInt62347;
+    public int fieldInt62348;
+    public int fieldInt62349;
+    public int fieldInt62350;
+    public int fieldInt62351;
+    public int fieldInt62352;
+    public int fieldInt62353;
+    public int fieldInt62354;
+    public int fieldInt62355;
+    public int fieldInt62356;
+    public int fieldInt62357;
+    public int fieldInt62358;
+    public int fieldInt62359;
+    public int fieldInt62360;
+    public int fieldInt62361;
+    public int fieldInt62362;
+    public int fieldInt62363;
+    public int fieldInt62364;
+    public int fieldInt62365;
+    public int fieldInt62366;
+    public int fieldInt62367;
+    public int fieldInt62368;
+    public int fieldInt62369;
+    public int fieldInt62370;
+    public int fieldInt62371;
+    public int fieldInt62372;
+    public int fieldInt62373;
+    public int fieldInt62374;
+    public int fieldInt62375;
+    public int fieldInt62376;
+    public int fieldInt62377;
+    public int fieldInt62378;
+    public int fieldInt62379;
+    public int fieldInt62380;
+    public int fieldInt62381;
+    public int fieldInt62382;
+    public int fieldInt62383;
+    public int fieldInt62384;
+    public int fieldInt62385;
+    public int fieldInt62386;
+    public int fieldInt62387;
+    public int fieldInt62388;
+    public int fieldInt62389;
+    public int fieldInt62390;
+    public int fieldInt62391;
+    public int fieldInt62392;
+    public int fieldInt62393;
+    public int fieldInt62394;
+    public int fieldInt62395;
+    public int fieldInt62396;
+    public int fieldInt62397;
+    public int fieldInt62398;
+    public int fieldInt62399;
+    public int fieldInt62400;
+    public int fieldInt62401;
+    public int fieldInt62402;
+    public int fieldInt62403;
+    public int fieldInt62404;
+    public int fieldInt62405;
+    public int fieldInt62406;
+    public int fieldInt62407;
+    public int fieldInt62408;
+    public int fieldInt62409;
+    public int fieldInt62410;
+    public int fieldInt62411;
+    public int fieldInt62412;
+    public int fieldInt62413;
+    public int fieldInt62414;
+    public int fieldInt62415;
+    public int fieldInt62416;
+    public int fieldInt62417;
+    public int fieldInt62418;
+    public int fieldInt62419;
+    public int fieldInt62420;
+    public int fieldInt62421;
+    public int fieldInt62422;
+    public int fieldInt62423;
+    public int fieldInt62424;
+    public int fieldInt62425;
+    public int fieldInt62426;
+    public int fieldInt62427;
+    public int fieldInt62428;
+    public int fieldInt62429;
+    public int fieldInt62430;
+    public int fieldInt62431;
+    public int fieldInt62432;
+    public int fieldInt62433;
+    public int fieldInt62434;
+    public int fieldInt62435;
+    public int fieldInt62436;
+    public int fieldInt62437;
+    public int fieldInt62438;
+    public int fieldInt62439;
+    public int fieldInt62440;
+    public int fieldInt62441;
+    public int fieldInt62442;
+    public int fieldInt62443;
+    public int fieldInt62444;
+    public int fieldInt62445;
+    public int fieldInt62446;
+    public int fieldInt62447;
+    public int fieldInt62448;
+    public int fieldInt62449;
+    public int fieldInt62450;
+    public int fieldInt62451;
+    public int fieldInt62452;
+    public int fieldInt62453;
+    public int fieldInt62454;
+    public int fieldInt62455;
+    public int fieldInt62456;
+    public int fieldInt62457;
+    public int fieldInt62458;
+    public int fieldInt62459;
+    public int fieldInt62460;
+    public int fieldInt62461;
+    public int fieldInt62462;
+    public int fieldInt62463;
+    public int fieldInt62464;
+    public int fieldInt62465;
+    public int fieldInt62466;
+    public int fieldInt62467;
+    public int fieldInt62468;
+    public int fieldInt62469;
+    public int fieldInt62470;
+    public int fieldInt62471;
+    public int fieldInt62472;
+    public int fieldInt62473;
+    public int fieldInt62474;
+    public int fieldInt62475;
+    public int fieldInt62476;
+    public int fieldInt62477;
+    public int fieldInt62478;
+    public int fieldInt62479;
+    public int fieldInt62480;
+    public int fieldInt62481;
+    public int fieldInt62482;
+    public int fieldInt62483;
+    public int fieldInt62484;
+    public int fieldInt62485;
+    public int fieldInt62486;
+    public int fieldInt62487;
+    public int fieldInt62488;
+    public int fieldInt62489;
+    public int fieldInt62490;
+    public int fieldInt62491;
+    public int fieldInt62492;
+    public int fieldInt62493;
+    public int fieldInt62494;
+    public int fieldInt62495;
+    public int fieldInt62496;
+    public int fieldInt62497;
+    public int fieldInt62498;
+    public int fieldInt62499;
+    public int fieldInt62500;
+    public int fieldInt62501;
+    public int fieldInt62502;
+    public int fieldInt62503;
+    public int fieldInt62504;
+    public int fieldInt62505;
+    public int fieldInt62506;
+    public int fieldInt62507;
+    public int fieldInt62508;
+    public int fieldInt62509;
+    public int fieldInt62510;
+    public int fieldInt62511;
+    public int fieldInt62512;
+    public int fieldInt62513;
+    public int fieldInt62514;
+    public int fieldInt62515;
+    public int fieldInt62516;
+    public int fieldInt62517;
+    public int fieldInt62518;
+    public int fieldInt62519;
+    public int fieldInt62520;
+    public int fieldInt62521;
+    public int fieldInt62522;
+    public int fieldInt62523;
+    public int fieldInt62524;
+    public int fieldInt62525;
+    public int fieldInt62526;
+    public int fieldInt62527;
+    public int fieldInt62528;
+    public int fieldInt62529;
+    public int fieldInt62530;
+    public int fieldInt62531;
+    public int fieldInt62532;
+    public int fieldInt62533;
+    public int fieldInt62534;
+    public int fieldInt62535;
+    public int fieldInt62536;
+    public int fieldInt62537;
+    public int fieldInt62538;
+    public int fieldInt62539;
+    public int fieldInt62540;
+    public int fieldInt62541;
+    public int fieldInt62542;
+    public int fieldInt62543;
+    public int fieldInt62544;
+    public int fieldInt62545;
+    public int fieldInt62546;
+    public int fieldInt62547;
+    public int fieldInt62548;
+    public int fieldInt62549;
+    public int fieldInt62550;
+    public int fieldInt62551;
+    public int fieldInt62552;
+    public int fieldInt62553;
+    public int fieldInt62554;
+    public int fieldInt62555;
+    public int fieldInt62556;
+    public int fieldInt62557;
+    public int fieldInt62558;
+    public int fieldInt62559;
+    public int fieldInt62560;
+    public int fieldInt62561;
+    public int fieldInt62562;
+    public int fieldInt62563;
+    public int fieldInt62564;
+    public int fieldInt62565;
+    public int fieldInt62566;
+    public int fieldInt62567;
+    public int fieldInt62568;
+    public int fieldInt62569;
+    public int fieldInt62570;
+    public int fieldInt62571;
+    public int fieldInt62572;
+    public int fieldInt62573;
+    public int fieldInt62574;
+    public int fieldInt62575;
+    public int fieldInt62576;
+    public int fieldInt62577;
+    public int fieldInt62578;
+    public int fieldInt62579;
+    public int fieldInt62580;
+    public int fieldInt62581;
+    public int fieldInt62582;
+    public int fieldInt62583;
+    public int fieldInt62584;
+    public int fieldInt62585;
+    public int fieldInt62586;
+    public int fieldInt62587;
+    public int fieldInt62588;
+    public int fieldInt62589;
+    public int fieldInt62590;
+    public int fieldInt62591;
+    public int fieldInt62592;
+    public int fieldInt62593;
+    public int fieldInt62594;
+    public int fieldInt62595;
+    public int fieldInt62596;
+    public int fieldInt62597;
+    public int fieldInt62598;
+    public int fieldInt62599;
+    public int fieldInt62600;
+    public int fieldInt62601;
+    public int fieldInt62602;
+    public int fieldInt62603;
+    public int fieldInt62604;
+    public int fieldInt62605;
+    public int fieldInt62606;
+    public int fieldInt62607;
+    public int fieldInt62608;
+    public int fieldInt62609;
+    public int fieldInt62610;
+    public int fieldInt62611;
+    public int fieldInt62612;
+    public int fieldInt62613;
+    public int fieldInt62614;
+    public int fieldInt62615;
+    public int fieldInt62616;
+    public int fieldInt62617;
+    public int fieldInt62618;
+    public int fieldInt62619;
+    public int fieldInt62620;
+    public int fieldInt62621;
+    public int fieldInt62622;
+    public int fieldInt62623;
+    public int fieldInt62624;
+    public int fieldInt62625;
+    public int fieldInt62626;
+    public int fieldInt62627;
+    public int fieldInt62628;
+    public int fieldInt62629;
+    public int fieldInt62630;
+    public int fieldInt62631;
+    public int fieldInt62632;
+    public int fieldInt62633;
+    public int fieldInt62634;
+    public int fieldInt62635;
+    public int fieldInt62636;
+    public int fieldInt62637;
+    public int fieldInt62638;
+    public int fieldInt62639;
+    public int fieldInt62640;
+    public int fieldInt62641;
+    public int fieldInt62642;
+    public int fieldInt62643;
+    public int fieldInt62644;
+    public int fieldInt62645;
+    public int fieldInt62646;
+    public int fieldInt62647;
+    public int fieldInt62648;
+    public int fieldInt62649;
+    public int fieldInt62650;
+    public int fieldInt62651;
+    public int fieldInt62652;
+    public int fieldInt62653;
+    public int fieldInt62654;
+    public int fieldInt62655;
+    public int fieldInt62656;
+    public int fieldInt62657;
+    public int fieldInt62658;
+    public int fieldInt62659;
+    public int fieldInt62660;
+    public int fieldInt62661;
+    public int fieldInt62662;
+    public int fieldInt62663;
+    public int fieldInt62664;
+    public int fieldInt62665;
+    public int fieldInt62666;
+    public int fieldInt62667;
+    public int fieldInt62668;
+    public int fieldInt62669;
+    public int fieldInt62670;
+    public int fieldInt62671;
+    public int fieldInt62672;
+    public int fieldInt62673;
+    public int fieldInt62674;
+    public int fieldInt62675;
+    public int fieldInt62676;
+    public int fieldInt62677;
+    public int fieldInt62678;
+    public int fieldInt62679;
+    public int fieldInt62680;
+    public int fieldInt62681;
+    public int fieldInt62682;
+    public int fieldInt62683;
+    public int fieldInt62684;
+    public int fieldInt62685;
+    public int fieldInt62686;
+    public int fieldInt62687;
+    public int fieldInt62688;
+    public int fieldInt62689;
+    public int fieldInt62690;
+    public int fieldInt62691;
+    public int fieldInt62692;
+    public int fieldInt62693;
+    public int fieldInt62694;
+    public int fieldInt62695;
+    public int fieldInt62696;
+    public int fieldInt62697;
+    public int fieldInt62698;
+    public int fieldInt62699;
+    public int fieldInt62700;
+    public int fieldInt62701;
+    public int fieldInt62702;
+    public int fieldInt62703;
+    public int fieldInt62704;
+    public int fieldInt62705;
+    public int fieldInt62706;
+    public int fieldInt62707;
+    public int fieldInt62708;
+    public int fieldInt62709;
+    public int fieldInt62710;
+    public int fieldInt62711;
+    public int fieldInt62712;
+    public int fieldInt62713;
+    public int fieldInt62714;
+    public int fieldInt62715;
+    public int fieldInt62716;
+    public int fieldInt62717;
+    public int fieldInt62718;
+    public int fieldInt62719;
+    public int fieldInt62720;
+    public int fieldInt62721;
+    public int fieldInt62722;
+    public int fieldInt62723;
+    public int fieldInt62724;
+    public int fieldInt62725;
+    public int fieldInt62726;
+    public int fieldInt62727;
+    public int fieldInt62728;
+    public int fieldInt62729;
+    public int fieldInt62730;
+    public int fieldInt62731;
+    public int fieldInt62732;
+    public int fieldInt62733;
+    public int fieldInt62734;
+    public int fieldInt62735;
+    public int fieldInt62736;
+    public int fieldInt62737;
+    public int fieldInt62738;
+    public int fieldInt62739;
+    public int fieldInt62740;
+    public int fieldInt62741;
+    public int fieldInt62742;
+    public int fieldInt62743;
+    public int fieldInt62744;
+    public int fieldInt62745;
+    public int fieldInt62746;
+    public int fieldInt62747;
+    public int fieldInt62748;
+    public int fieldInt62749;
+    public int fieldInt62750;
+    public int fieldInt62751;
+    public int fieldInt62752;
+    public int fieldInt62753;
+    public int fieldInt62754;
+    public int fieldInt62755;
+    public int fieldInt62756;
+    public int fieldInt62757;
+    public int fieldInt62758;
+    public int fieldInt62759;
+    public int fieldInt62760;
+    public int fieldInt62761;
+    public int fieldInt62762;
+    public int fieldInt62763;
+    public int fieldInt62764;
+    public int fieldInt62765;
+    public int fieldInt62766;
+    public int fieldInt62767;
+    public int fieldInt62768;
+    public int fieldInt62769;
+    public int fieldInt62770;
+    public int fieldInt62771;
+    public int fieldInt62772;
+    public int fieldInt62773;
+    public int fieldInt62774;
+    public int fieldInt62775;
+    public int fieldInt62776;
+    public int fieldInt62777;
+    public int fieldInt62778;
+    public int fieldInt62779;
+    public int fieldInt62780;
+    public int fieldInt62781;
+    public int fieldInt62782;
+    public int fieldInt62783;
+    public int fieldInt62784;
+    public int fieldInt62785;
+    public int fieldInt62786;
+    public int fieldInt62787;
+    public int fieldInt62788;
+    public int fieldInt62789;
+    public int fieldInt62790;
+    public int fieldInt62791;
+    public int fieldInt62792;
+    public int fieldInt62793;
+    public int fieldInt62794;
+    public int fieldInt62795;
+    public int fieldInt62796;
+    public int fieldInt62797;
+    public int fieldInt62798;
+    public int fieldInt62799;
+    public int fieldInt62800;
+    public int fieldInt62801;
+    public int fieldInt62802;
+    public int fieldInt62803;
+    public int fieldInt62804;
+    public int fieldInt62805;
+    public int fieldInt62806;
+    public int fieldInt62807;
+    public int fieldInt62808;
+    public int fieldInt62809;
+    public int fieldInt62810;
+    public int fieldInt62811;
+    public int fieldInt62812;
+    public int fieldInt62813;
+    public int fieldInt62814;
+    public int fieldInt62815;
+    public int fieldInt62816;
+    public int fieldInt62817;
+    public int fieldInt62818;
+    public int fieldInt62819;
+    public int fieldInt62820;
+    public int fieldInt62821;
+    public int fieldInt62822;
+    public int fieldInt62823;
+    public int fieldInt62824;
+    public int fieldInt62825;
+    public int fieldInt62826;
+    public int fieldInt62827;
+    public int fieldInt62828;
+    public int fieldInt62829;
+    public int fieldInt62830;
+    public int fieldInt62831;
+    public int fieldInt62832;
+    public int fieldInt62833;
+    public int fieldInt62834;
+    public int fieldInt62835;
+    public int fieldInt62836;
+    public int fieldInt62837;
+    public int fieldInt62838;
+    public int fieldInt62839;
+    public int fieldInt62840;
+    public int fieldInt62841;
+    public int fieldInt62842;
+    public int fieldInt62843;
+    public int fieldInt62844;
+    public int fieldInt62845;
+    public int fieldInt62846;
+    public int fieldInt62847;
+    public int fieldInt62848;
+    public int fieldInt62849;
+    public int fieldInt62850;
+    public int fieldInt62851;
+    public int fieldInt62852;
+    public int fieldInt62853;
+    public int fieldInt62854;
+    public int fieldInt62855;
+    public int fieldInt62856;
+    public int fieldInt62857;
+    public int fieldInt62858;
+    public int fieldInt62859;
+    public int fieldInt62860;
+    public int fieldInt62861;
+    public int fieldInt62862;
+    public int fieldInt62863;
+    public int fieldInt62864;
+    public int fieldInt62865;
+    public int fieldInt62866;
+    public int fieldInt62867;
+    public int fieldInt62868;
+    public int fieldInt62869;
+    public int fieldInt62870;
+    public int fieldInt62871;
+    public int fieldInt62872;
+    public int fieldInt62873;
+    public int fieldInt62874;
+    public int fieldInt62875;
+    public int fieldInt62876;
+    public int fieldInt62877;
+    public int fieldInt62878;
+    public int fieldInt62879;
+    public int fieldInt62880;
+    public int fieldInt62881;
+    public int fieldInt62882;
+    public int fieldInt62883;
+    public int fieldInt62884;
+    public int fieldInt62885;
+    public int fieldInt62886;
+    public int fieldInt62887;
+    public int fieldInt62888;
+    public int fieldInt62889;
+    public int fieldInt62890;
+    public int fieldInt62891;
+    public int fieldInt62892;
+    public int fieldInt62893;
+    public int fieldInt62894;
+    public int fieldInt62895;
+    public int fieldInt62896;
+    public int fieldInt62897;
+    public int fieldInt62898;
+    public int fieldInt62899;
+    public int fieldInt62900;
+    public int fieldInt62901;
+    public int fieldInt62902;
+    public int fieldInt62903;
+    public int fieldInt62904;
+    public int fieldInt62905;
+    public int fieldInt62906;
+    public int fieldInt62907;
+    public int fieldInt62908;
+    public int fieldInt62909;
+    public int fieldInt62910;
+    public int fieldInt62911;
+    public int fieldInt62912;
+    public int fieldInt62913;
+    public int fieldInt62914;
+    public int fieldInt62915;
+    public int fieldInt62916;
+    public int fieldInt62917;
+    public int fieldInt62918;
+    public int fieldInt62919;
+    public int fieldInt62920;
+    public int fieldInt62921;
+    public int fieldInt62922;
+    public int fieldInt62923;
+    public int fieldInt62924;
+    public int fieldInt62925;
+    public int fieldInt62926;
+    public int fieldInt62927;
+    public int fieldInt62928;
+    public int fieldInt62929;
+    public int fieldInt62930;
+    public int fieldInt62931;
+    public int fieldInt62932;
+    public int fieldInt62933;
+    public int fieldInt62934;
+    public int fieldInt62935;
+    public int fieldInt62936;
+    public int fieldInt62937;
+    public int fieldInt62938;
+    public int fieldInt62939;
+    public int fieldInt62940;
+    public int fieldInt62941;
+    public int fieldInt62942;
+    public int fieldInt62943;
+    public int fieldInt62944;
+    public int fieldInt62945;
+    public int fieldInt62946;
+    public int fieldInt62947;
+    public int fieldInt62948;
+    public int fieldInt62949;
+    public int fieldInt62950;
+    public int fieldInt62951;
+    public int fieldInt62952;
+    public int fieldInt62953;
+    public int fieldInt62954;
+    public int fieldInt62955;
+    public int fieldInt62956;
+    public int fieldInt62957;
+    public int fieldInt62958;
+    public int fieldInt62959;
+    public int fieldInt62960;
+    public int fieldInt62961;
+    public int fieldInt62962;
+    public int fieldInt62963;
+    public int fieldInt62964;
+    public int fieldInt62965;
+    public int fieldInt62966;
+    public int fieldInt62967;
+    public int fieldInt62968;
+    public int fieldInt62969;
+    public int fieldInt62970;
+    public int fieldInt62971;
+    public int fieldInt62972;
+    public int fieldInt62973;
+    public int fieldInt62974;
+    public int fieldInt62975;
+    public int fieldInt62976;
+    public int fieldInt62977;
+    public int fieldInt62978;
+    public int fieldInt62979;
+    public int fieldInt62980;
+    public int fieldInt62981;
+    public int fieldInt62982;
+    public int fieldInt62983;
+    public int fieldInt62984;
+    public int fieldInt62985;
+    public int fieldInt62986;
+    public int fieldInt62987;
+    public int fieldInt62988;
+    public int fieldInt62989;
+    public int fieldInt62990;
+    public int fieldInt62991;
+    public int fieldInt62992;
+    public int fieldInt62993;
+    public int fieldInt62994;
+    public int fieldInt62995;
+    public int fieldInt62996;
+    public int fieldInt62997;
+    public int fieldInt62998;
+    public int fieldInt62999;
+    public int fieldInt63000;
+    public int fieldInt63001;
+    public int fieldInt63002;
+    public int fieldInt63003;
+    public int fieldInt63004;
+    public int fieldInt63005;
+    public int fieldInt63006;
+    public int fieldInt63007;
+    public int fieldInt63008;
+    public int fieldInt63009;
+    public int fieldInt63010;
+    public int fieldInt63011;
+    public int fieldInt63012;
+    public int fieldInt63013;
+    public int fieldInt63014;
+    public int fieldInt63015;
+    public int fieldInt63016;
+    public int fieldInt63017;
+    public int fieldInt63018;
+    public int fieldInt63019;
+    public int fieldInt63020;
+    public int fieldInt63021;
+    public int fieldInt63022;
+    public int fieldInt63023;
+    public int fieldInt63024;
+    public int fieldInt63025;
+    public int fieldInt63026;
+    public int fieldInt63027;
+    public int fieldInt63028;
+    public int fieldInt63029;
+    public int fieldInt63030;
+    public int fieldInt63031;
+    public int fieldInt63032;
+    public int fieldInt63033;
+    public int fieldInt63034;
+    public int fieldInt63035;
+    public int fieldInt63036;
+    public int fieldInt63037;
+    public int fieldInt63038;
+    public int fieldInt63039;
+    public int fieldInt63040;
+    public int fieldInt63041;
+    public int fieldInt63042;
+    public int fieldInt63043;
+    public int fieldInt63044;
+    public int fieldInt63045;
+    public int fieldInt63046;
+    public int fieldInt63047;
+    public int fieldInt63048;
+    public int fieldInt63049;
+    public int fieldInt63050;
+    public int fieldInt63051;
+    public int fieldInt63052;
+    public int fieldInt63053;
+    public int fieldInt63054;
+    public int fieldInt63055;
+    public int fieldInt63056;
+    public int fieldInt63057;
+    public int fieldInt63058;
+    public int fieldInt63059;
+    public int fieldInt63060;
+    public int fieldInt63061;
+    public int fieldInt63062;
+    public int fieldInt63063;
+    public int fieldInt63064;
+    public int fieldInt63065;
+    public int fieldInt63066;
+    public int fieldInt63067;
+    public int fieldInt63068;
+    public int fieldInt63069;
+    public int fieldInt63070;
+    public int fieldInt63071;
+    public int fieldInt63072;
+    public int fieldInt63073;
+    public int fieldInt63074;
+    public int fieldInt63075;
+    public int fieldInt63076;
+    public int fieldInt63077;
+    public int fieldInt63078;
+    public int fieldInt63079;
+    public int fieldInt63080;
+    public int fieldInt63081;
+    public int fieldInt63082;
+    public int fieldInt63083;
+    public int fieldInt63084;
+    public int fieldInt63085;
+    public int fieldInt63086;
+    public int fieldInt63087;
+    public int fieldInt63088;
+    public int fieldInt63089;
+    public int fieldInt63090;
+    public int fieldInt63091;
+    public int fieldInt63092;
+    public int fieldInt63093;
+    public int fieldInt63094;
+    public int fieldInt63095;
+    public int fieldInt63096;
+    public int fieldInt63097;
+    public int fieldInt63098;
+    public int fieldInt63099;
+    public int fieldInt63100;
+    public int fieldInt63101;
+    public int fieldInt63102;
+    public int fieldInt63103;
+    public int fieldInt63104;
+    public int fieldInt63105;
+    public int fieldInt63106;
+    public int fieldInt63107;
+    public int fieldInt63108;
+    public int fieldInt63109;
+    public int fieldInt63110;
+    public int fieldInt63111;
+    public int fieldInt63112;
+    public int fieldInt63113;
+    public int fieldInt63114;
+    public int fieldInt63115;
+    public int fieldInt63116;
+    public int fieldInt63117;
+    public int fieldInt63118;
+    public int fieldInt63119;
+    public int fieldInt63120;
+    public int fieldInt63121;
+    public int fieldInt63122;
+    public int fieldInt63123;
+    public int fieldInt63124;
+    public int fieldInt63125;
+    public int fieldInt63126;
+    public int fieldInt63127;
+    public int fieldInt63128;
+    public int fieldInt63129;
+    public int fieldInt63130;
+    public int fieldInt63131;
+    public int fieldInt63132;
+    public int fieldInt63133;
+    public int fieldInt63134;
+    public int fieldInt63135;
+    public int fieldInt63136;
+    public int fieldInt63137;
+    public int fieldInt63138;
+    public int fieldInt63139;
+    public int fieldInt63140;
+    public int fieldInt63141;
+    public int fieldInt63142;
+    public int fieldInt63143;
+    public int fieldInt63144;
+    public int fieldInt63145;
+    public int fieldInt63146;
+    public int fieldInt63147;
+    public int fieldInt63148;
+    public int fieldInt63149;
+    public int fieldInt63150;
+    public int fieldInt63151;
+    public int fieldInt63152;
+    public int fieldInt63153;
+    public int fieldInt63154;
+    public int fieldInt63155;
+    public int fieldInt63156;
+    public int fieldInt63157;
+    public int fieldInt63158;
+    public int fieldInt63159;
+    public int fieldInt63160;
+    public int fieldInt63161;
+    public int fieldInt63162;
+    public int fieldInt63163;
+    public int fieldInt63164;
+    public int fieldInt63165;
+    public int fieldInt63166;
+    public int fieldInt63167;
+    public int fieldInt63168;
+    public int fieldInt63169;
+    public int fieldInt63170;
+    public int fieldInt63171;
+    public int fieldInt63172;
+    public int fieldInt63173;
+    public int fieldInt63174;
+    public int fieldInt63175;
+    public int fieldInt63176;
+    public int fieldInt63177;
+    public int fieldInt63178;
+    public int fieldInt63179;
+    public int fieldInt63180;
+    public int fieldInt63181;
+    public int fieldInt63182;
+    public int fieldInt63183;
+    public int fieldInt63184;
+    public int fieldInt63185;
+    public int fieldInt63186;
+    public int fieldInt63187;
+    public int fieldInt63188;
+    public int fieldInt63189;
+    public int fieldInt63190;
+    public int fieldInt63191;
+    public int fieldInt63192;
+    public int fieldInt63193;
+    public int fieldInt63194;
+    public int fieldInt63195;
+    public int fieldInt63196;
+    public int fieldInt63197;
+    public int fieldInt63198;
+    public int fieldInt63199;
+    public int fieldInt63200;
+    public int fieldInt63201;
+    public int fieldInt63202;
+    public int fieldInt63203;
+    public int fieldInt63204;
+    public int fieldInt63205;
+    public int fieldInt63206;
+    public int fieldInt63207;
+    public int fieldInt63208;
+    public int fieldInt63209;
+    public int fieldInt63210;
+    public int fieldInt63211;
+    public int fieldInt63212;
+    public int fieldInt63213;
+    public int fieldInt63214;
+    public int fieldInt63215;
+    public int fieldInt63216;
+    public int fieldInt63217;
+    public int fieldInt63218;
+    public int fieldInt63219;
+    public int fieldInt63220;
+    public int fieldInt63221;
+    public int fieldInt63222;
+    public int fieldInt63223;
+    public int fieldInt63224;
+    public int fieldInt63225;
+    public int fieldInt63226;
+    public int fieldInt63227;
+    public int fieldInt63228;
+    public int fieldInt63229;
+    public int fieldInt63230;
+    public int fieldInt63231;
+    public int fieldInt63232;
+    public int fieldInt63233;
+    public int fieldInt63234;
+    public int fieldInt63235;
+    public int fieldInt63236;
+    public int fieldInt63237;
+    public int fieldInt63238;
+    public int fieldInt63239;
+    public int fieldInt63240;
+    public int fieldInt63241;
+    public int fieldInt63242;
+    public int fieldInt63243;
+    public int fieldInt63244;
+    public int fieldInt63245;
+    public int fieldInt63246;
+    public int fieldInt63247;
+    public int fieldInt63248;
+    public int fieldInt63249;
+    public int fieldInt63250;
+    public int fieldInt63251;
+    public int fieldInt63252;
+    public int fieldInt63253;
+    public int fieldInt63254;
+    public int fieldInt63255;
+    public int fieldInt63256;
+    public int fieldInt63257;
+    public int fieldInt63258;
+    public int fieldInt63259;
+    public int fieldInt63260;
+    public int fieldInt63261;
+    public int fieldInt63262;
+    public int fieldInt63263;
+    public int fieldInt63264;
+    public int fieldInt63265;
+    public int fieldInt63266;
+    public int fieldInt63267;
+    public int fieldInt63268;
+    public int fieldInt63269;
+    public int fieldInt63270;
+    public int fieldInt63271;
+    public int fieldInt63272;
+    public int fieldInt63273;
+    public int fieldInt63274;
+    public int fieldInt63275;
+    public int fieldInt63276;
+    public int fieldInt63277;
+    public int fieldInt63278;
+    public int fieldInt63279;
+    public int fieldInt63280;
+    public int fieldInt63281;
+    public int fieldInt63282;
+    public int fieldInt63283;
+    public int fieldInt63284;
+    public int fieldInt63285;
+    public int fieldInt63286;
+    public int fieldInt63287;
+    public int fieldInt63288;
+    public int fieldInt63289;
+    public int fieldInt63290;
+    public int fieldInt63291;
+    public int fieldInt63292;
+    public int fieldInt63293;
+    public int fieldInt63294;
+    public int fieldInt63295;
+    public int fieldInt63296;
+    public int fieldInt63297;
+    public int fieldInt63298;
+    public int fieldInt63299;
+    public int fieldInt63300;
+    public int fieldInt63301;
+    public int fieldInt63302;
+    public int fieldInt63303;
+    public int fieldInt63304;
+    public int fieldInt63305;
+    public int fieldInt63306;
+    public int fieldInt63307;
+    public int fieldInt63308;
+    public int fieldInt63309;
+    public int fieldInt63310;
+    public int fieldInt63311;
+    public int fieldInt63312;
+    public int fieldInt63313;
+    public int fieldInt63314;
+    public int fieldInt63315;
+    public int fieldInt63316;
+    public int fieldInt63317;
+    public int fieldInt63318;
+    public int fieldInt63319;
+    public int fieldInt63320;
+    public int fieldInt63321;
+    public int fieldInt63322;
+    public int fieldInt63323;
+    public int fieldInt63324;
+    public int fieldInt63325;
+    public int fieldInt63326;
+    public int fieldInt63327;
+    public int fieldInt63328;
+    public int fieldInt63329;
+    public int fieldInt63330;
+    public int fieldInt63331;
+    public int fieldInt63332;
+    public int fieldInt63333;
+    public int fieldInt63334;
+    public int fieldInt63335;
+    public int fieldInt63336;
+    public int fieldInt63337;
+    public int fieldInt63338;
+    public int fieldInt63339;
+    public int fieldInt63340;
+    public int fieldInt63341;
+    public int fieldInt63342;
+    public int fieldInt63343;
+    public int fieldInt63344;
+    public int fieldInt63345;
+    public int fieldInt63346;
+    public int fieldInt63347;
+    public int fieldInt63348;
+    public int fieldInt63349;
+    public int fieldInt63350;
+    public int fieldInt63351;
+    public int fieldInt63352;
+    public int fieldInt63353;
+    public int fieldInt63354;
+    public int fieldInt63355;
+    public int fieldInt63356;
+    public int fieldInt63357;
+    public int fieldInt63358;
+    public int fieldInt63359;
+    public int fieldInt63360;
+    public int fieldInt63361;
+    public int fieldInt63362;
+    public int fieldInt63363;
+    public int fieldInt63364;
+    public int fieldInt63365;
+    public int fieldInt63366;
+    public int fieldInt63367;
+    public int fieldInt63368;
+    public int fieldInt63369;
+    public int fieldInt63370;
+    public int fieldInt63371;
+    public int fieldInt63372;
+    public int fieldInt63373;
+    public int fieldInt63374;
+    public int fieldInt63375;
+    public int fieldInt63376;
+    public int fieldInt63377;
+    public int fieldInt63378;
+    public int fieldInt63379;
+    public int fieldInt63380;
+    public int fieldInt63381;
+    public int fieldInt63382;
+    public int fieldInt63383;
+    public int fieldInt63384;
+    public int fieldInt63385;
+    public int fieldInt63386;
+    public int fieldInt63387;
+    public int fieldInt63388;
+    public int fieldInt63389;
+    public int fieldInt63390;
+    public int fieldInt63391;
+    public int fieldInt63392;
+    public int fieldInt63393;
+    public int fieldInt63394;
+    public int fieldInt63395;
+    public int fieldInt63396;
+    public int fieldInt63397;
+    public int fieldInt63398;
+    public int fieldInt63399;
+    public int fieldInt63400;
+    public int fieldInt63401;
+    public int fieldInt63402;
+    public int fieldInt63403;
+    public int fieldInt63404;
+    public int fieldInt63405;
+    public int fieldInt63406;
+    public int fieldInt63407;
+    public int fieldInt63408;
+    public int fieldInt63409;
+    public int fieldInt63410;
+    public int fieldInt63411;
+    public int fieldInt63412;
+    public int fieldInt63413;
+    public int fieldInt63414;
+    public int fieldInt63415;
+    public int fieldInt63416;
+    public int fieldInt63417;
+    public int fieldInt63418;
+    public int fieldInt63419;
+    public int fieldInt63420;
+    public int fieldInt63421;
+    public int fieldInt63422;
+    public int fieldInt63423;
+    public int fieldInt63424;
+    public int fieldInt63425;
+    public int fieldInt63426;
+    public int fieldInt63427;
+    public int fieldInt63428;
+    public int fieldInt63429;
+    public int fieldInt63430;
+    public int fieldInt63431;
+    public int fieldInt63432;
+    public int fieldInt63433;
+    public int fieldInt63434;
+    public int fieldInt63435;
+    public int fieldInt63436;
+    public int fieldInt63437;
+    public int fieldInt63438;
+    public int fieldInt63439;
+    public int fieldInt63440;
+    public int fieldInt63441;
+    public int fieldInt63442;
+    public int fieldInt63443;
+    public int fieldInt63444;
+    public int fieldInt63445;
+    public int fieldInt63446;
+    public int fieldInt63447;
+    public int fieldInt63448;
+    public int fieldInt63449;
+    public int fieldInt63450;
+    public int fieldInt63451;
+    public int fieldInt63452;
+    public int fieldInt63453;
+    public int fieldInt63454;
+    public int fieldInt63455;
+    public int fieldInt63456;
+    public int fieldInt63457;
+    public int fieldInt63458;
+    public int fieldInt63459;
+    public int fieldInt63460;
+    public int fieldInt63461;
+    public int fieldInt63462;
+    public int fieldInt63463;
+    public int fieldInt63464;
+    public int fieldInt63465;
+    public int fieldInt63466;
+    public int fieldInt63467;
+    public int fieldInt63468;
+    public int fieldInt63469;
+    public int fieldInt63470;
+    public int fieldInt63471;
+    public int fieldInt63472;
+    public int fieldInt63473;
+    public int fieldInt63474;
+    public int fieldInt63475;
+    public int fieldInt63476;
+    public int fieldInt63477;
+    public int fieldInt63478;
+    public int fieldInt63479;
+    public int fieldInt63480;
+    public int fieldInt63481;
+    public int fieldInt63482;
+    public int fieldInt63483;
+    public int fieldInt63484;
+    public int fieldInt63485;
+    public int fieldInt63486;
+    public int fieldInt63487;
+    public int fieldInt63488;
+    public int fieldInt63489;
+    public int fieldInt63490;
+    public int fieldInt63491;
+    public int fieldInt63492;
+    public int fieldInt63493;
+    public int fieldInt63494;
+    public int fieldInt63495;
+    public int fieldInt63496;
+    public int fieldInt63497;
+    public int fieldInt63498;
+    public int fieldInt63499;
+    public int fieldInt63500;
+    public int fieldInt63501;
+    public int fieldInt63502;
+    public int fieldInt63503;
+    public int fieldInt63504;
+    public int fieldInt63505;
+    public int fieldInt63506;
+    public int fieldInt63507;
+    public int fieldInt63508;
+    public int fieldInt63509;
+    public int fieldInt63510;
+    public int fieldInt63511;
+    public int fieldInt63512;
+    public int fieldInt63513;
+    public int fieldInt63514;
+    public int fieldInt63515;
+    public int fieldInt63516;
+    public int fieldInt63517;
+    public int fieldInt63518;
+    public int fieldInt63519;
+    public int fieldInt63520;
+    public int fieldInt63521;
+    public int fieldInt63522;
+    public int fieldInt63523;
+    public int fieldInt63524;
+    public int fieldInt63525;
+    public int fieldInt63526;
+    public int fieldInt63527;
+    public int fieldInt63528;
+    public int fieldInt63529;
+    public int fieldInt63530;
+    public int fieldInt63531;
+    public int fieldInt63532;
+    public int fieldInt63533;
+    public int fieldInt63534;
+    public int fieldInt63535;
+    public int fieldInt63536;
+    public int fieldInt63537;
+    public int fieldInt63538;
+    public int fieldInt63539;
+    public int fieldInt63540;
+    public int fieldInt63541;
+    public int fieldInt63542;
+    public int fieldInt63543;
+    public int fieldInt63544;
+    public int fieldInt63545;
+    public int fieldInt63546;
+    public int fieldInt63547;
+    public int fieldInt63548;
+    public int fieldInt63549;
+    public int fieldInt63550;
+    public int fieldInt63551;
+    public int fieldInt63552;
+    public int fieldInt63553;
+    public int fieldInt63554;
+    public int fieldInt63555;
+    public int fieldInt63556;
+    public int fieldInt63557;
+    public int fieldInt63558;
+    public int fieldInt63559;
+    public int fieldInt63560;
+    public int fieldInt63561;
+    public int fieldInt63562;
+    public int fieldInt63563;
+    public int fieldInt63564;
+    public int fieldInt63565;
+    public int fieldInt63566;
+    public int fieldInt63567;
+    public int fieldInt63568;
+    public int fieldInt63569;
+    public int fieldInt63570;
+    public int fieldInt63571;
+    public int fieldInt63572;
+    public int fieldInt63573;
+    public int fieldInt63574;
+    public int fieldInt63575;
+    public int fieldInt63576;
+    public int fieldInt63577;
+    public int fieldInt63578;
+    public int fieldInt63579;
+    public int fieldInt63580;
+    public int fieldInt63581;
+    public int fieldInt63582;
+    public int fieldInt63583;
+    public int fieldInt63584;
+    public int fieldInt63585;
+    public int fieldInt63586;
+    public int fieldInt63587;
+    public int fieldInt63588;
+    public int fieldInt63589;
+    public int fieldInt63590;
+    public int fieldInt63591;
+    public int fieldInt63592;
+    public int fieldInt63593;
+    public int fieldInt63594;
+    public int fieldInt63595;
+    public int fieldInt63596;
+    public int fieldInt63597;
+    public int fieldInt63598;
+    public int fieldInt63599;
+    public int fieldInt63600;
+    public int fieldInt63601;
+    public int fieldInt63602;
+    public int fieldInt63603;
+    public int fieldInt63604;
+    public int fieldInt63605;
+    public int fieldInt63606;
+    public int fieldInt63607;
+    public int fieldInt63608;
+    public int fieldInt63609;
+    public int fieldInt63610;
+    public int fieldInt63611;
+    public int fieldInt63612;
+    public int fieldInt63613;
+    public int fieldInt63614;
+    public int fieldInt63615;
+    public int fieldInt63616;
+    public int fieldInt63617;
+    public int fieldInt63618;
+    public int fieldInt63619;
+    public int fieldInt63620;
+    public int fieldInt63621;
+    public int fieldInt63622;
+    public int fieldInt63623;
+    public int fieldInt63624;
+    public int fieldInt63625;
+    public int fieldInt63626;
+    public int fieldInt63627;
+    public int fieldInt63628;
+    public int fieldInt63629;
+    public int fieldInt63630;
+    public int fieldInt63631;
+    public int fieldInt63632;
+    public int fieldInt63633;
+    public int fieldInt63634;
+    public int fieldInt63635;
+    public int fieldInt63636;
+    public int fieldInt63637;
+    public int fieldInt63638;
+    public int fieldInt63639;
+    public int fieldInt63640;
+    public int fieldInt63641;
+    public int fieldInt63642;
+    public int fieldInt63643;
+    public int fieldInt63644;
+    public int fieldInt63645;
+    public int fieldInt63646;
+    public int fieldInt63647;
+    public int fieldInt63648;
+    public int fieldInt63649;
+    public int fieldInt63650;
+    public int fieldInt63651;
+    public int fieldInt63652;
+    public int fieldInt63653;
+    public int fieldInt63654;
+    public int fieldInt63655;
+    public int fieldInt63656;
+    public int fieldInt63657;
+    public int fieldInt63658;
+    public int fieldInt63659;
+    public int fieldInt63660;
+    public int fieldInt63661;
+    public int fieldInt63662;
+    public int fieldInt63663;
+    public int fieldInt63664;
+    public int fieldInt63665;
+    public int fieldInt63666;
+    public int fieldInt63667;
+    public int fieldInt63668;
+    public int fieldInt63669;
+    public int fieldInt63670;
+    public int fieldInt63671;
+    public int fieldInt63672;
+    public int fieldInt63673;
+    public int fieldInt63674;
+    public int fieldInt63675;
+    public int fieldInt63676;
+    public int fieldInt63677;
+    public int fieldInt63678;
+    public int fieldInt63679;
+    public int fieldInt63680;
+    public int fieldInt63681;
+    public int fieldInt63682;
+    public int fieldInt63683;
+    public int fieldInt63684;
+    public int fieldInt63685;
+    public int fieldInt63686;
+    public int fieldInt63687;
+    public int fieldInt63688;
+    public int fieldInt63689;
+    public int fieldInt63690;
+    public int fieldInt63691;
+    public int fieldInt63692;
+    public int fieldInt63693;
+    public int fieldInt63694;
+    public int fieldInt63695;
+    public int fieldInt63696;
+    public int fieldInt63697;
+    public int fieldInt63698;
+    public int fieldInt63699;
+    public int fieldInt63700;
+    public int fieldInt63701;
+    public int fieldInt63702;
+    public int fieldInt63703;
+    public int fieldInt63704;
+    public int fieldInt63705;
+    public int fieldInt63706;
+    public int fieldInt63707;
+    public int fieldInt63708;
+    public int fieldInt63709;
+    public int fieldInt63710;
+    public int fieldInt63711;
+    public int fieldInt63712;
+    public int fieldInt63713;
+    public int fieldInt63714;
+    public int fieldInt63715;
+    public int fieldInt63716;
+    public int fieldInt63717;
+    public int fieldInt63718;
+    public int fieldInt63719;
+    public int fieldInt63720;
+    public int fieldInt63721;
+    public int fieldInt63722;
+    public int fieldInt63723;
+    public int fieldInt63724;
+    public int fieldInt63725;
+    public int fieldInt63726;
+    public int fieldInt63727;
+    public int fieldInt63728;
+    public int fieldInt63729;
+    public int fieldInt63730;
+    public int fieldInt63731;
+    public int fieldInt63732;
+    public int fieldInt63733;
+    public int fieldInt63734;
+    public int fieldInt63735;
+    public int fieldInt63736;
+    public int fieldInt63737;
+    public int fieldInt63738;
+    public int fieldInt63739;
+    public int fieldInt63740;
+    public int fieldInt63741;
+    public int fieldInt63742;
+    public int fieldInt63743;
+    public int fieldInt63744;
+    public int fieldInt63745;
+    public int fieldInt63746;
+    public int fieldInt63747;
+    public int fieldInt63748;
+    public int fieldInt63749;
+    public int fieldInt63750;
+    public int fieldInt63751;
+    public int fieldInt63752;
+    public int fieldInt63753;
+    public int fieldInt63754;
+    public int fieldInt63755;
+    public int fieldInt63756;
+    public int fieldInt63757;
+    public int fieldInt63758;
+    public int fieldInt63759;
+    public int fieldInt63760;
+    public int fieldInt63761;
+    public int fieldInt63762;
+    public int fieldInt63763;
+    public int fieldInt63764;
+    public int fieldInt63765;
+    public int fieldInt63766;
+    public int fieldInt63767;
+    public int fieldInt63768;
+    public int fieldInt63769;
+    public int fieldInt63770;
+    public int fieldInt63771;
+    public int fieldInt63772;
+    public int fieldInt63773;
+    public int fieldInt63774;
+    public int fieldInt63775;
+    public int fieldInt63776;
+    public int fieldInt63777;
+    public int fieldInt63778;
+    public int fieldInt63779;
+    public int fieldInt63780;
+    public int fieldInt63781;
+    public int fieldInt63782;
+    public int fieldInt63783;
+    public int fieldInt63784;
+    public int fieldInt63785;
+    public int fieldInt63786;
+    public int fieldInt63787;
+    public int fieldInt63788;
+    public int fieldInt63789;
+    public int fieldInt63790;
+    public int fieldInt63791;
+    public int fieldInt63792;
+    public int fieldInt63793;
+    public int fieldInt63794;
+    public int fieldInt63795;
+    public int fieldInt63796;
+    public int fieldInt63797;
+    public int fieldInt63798;
+    public int fieldInt63799;
+    public int fieldInt63800;
+    public int fieldInt63801;
+    public int fieldInt63802;
+    public int fieldInt63803;
+    public int fieldInt63804;
+    public int fieldInt63805;
+    public int fieldInt63806;
+    public int fieldInt63807;
+    public int fieldInt63808;
+    public int fieldInt63809;
+    public int fieldInt63810;
+    public int fieldInt63811;
+    public int fieldInt63812;
+    public int fieldInt63813;
+    public int fieldInt63814;
+    public int fieldInt63815;
+    public int fieldInt63816;
+    public int fieldInt63817;
+    public int fieldInt63818;
+    public int fieldInt63819;
+    public int fieldInt63820;
+    public int fieldInt63821;
+    public int fieldInt63822;
+    public int fieldInt63823;
+    public int fieldInt63824;
+    public int fieldInt63825;
+    public int fieldInt63826;
+    public int fieldInt63827;
+    public int fieldInt63828;
+    public int fieldInt63829;
+    public int fieldInt63830;
+    public int fieldInt63831;
+    public int fieldInt63832;
+    public int fieldInt63833;
+    public int fieldInt63834;
+    public int fieldInt63835;
+    public int fieldInt63836;
+    public int fieldInt63837;
+    public int fieldInt63838;
+    public int fieldInt63839;
+    public int fieldInt63840;
+    public int fieldInt63841;
+    public int fieldInt63842;
+    public int fieldInt63843;
+    public int fieldInt63844;
+    public int fieldInt63845;
+    public int fieldInt63846;
+    public int fieldInt63847;
+    public int fieldInt63848;
+    public int fieldInt63849;
+    public int fieldInt63850;
+    public int fieldInt63851;
+    public int fieldInt63852;
+    public int fieldInt63853;
+    public int fieldInt63854;
+    public int fieldInt63855;
+    public int fieldInt63856;
+    public int fieldInt63857;
+    public int fieldInt63858;
+    public int fieldInt63859;
+    public int fieldInt63860;
+    public int fieldInt63861;
+    public int fieldInt63862;
+    public int fieldInt63863;
+    public int fieldInt63864;
+    public int fieldInt63865;
+    public int fieldInt63866;
+    public int fieldInt63867;
+    public int fieldInt63868;
+    public int fieldInt63869;
+    public int fieldInt63870;
+    public int fieldInt63871;
+    public int fieldInt63872;
+    public int fieldInt63873;
+    public int fieldInt63874;
+    public int fieldInt63875;
+    public int fieldInt63876;
+    public int fieldInt63877;
+    public int fieldInt63878;
+    public int fieldInt63879;
+    public int fieldInt63880;
+    public int fieldInt63881;
+    public int fieldInt63882;
+    public int fieldInt63883;
+    public int fieldInt63884;
+    public int fieldInt63885;
+    public int fieldInt63886;
+    public int fieldInt63887;
+    public int fieldInt63888;
+    public int fieldInt63889;
+    public int fieldInt63890;
+    public int fieldInt63891;
+    public int fieldInt63892;
+    public int fieldInt63893;
+    public int fieldInt63894;
+    public int fieldInt63895;
+    public int fieldInt63896;
+    public int fieldInt63897;
+    public int fieldInt63898;
+    public int fieldInt63899;
+    public int fieldInt63900;
+    public int fieldInt63901;
+    public int fieldInt63902;
+    public int fieldInt63903;
+    public int fieldInt63904;
+    public int fieldInt63905;
+    public int fieldInt63906;
+    public int fieldInt63907;
+    public int fieldInt63908;
+    public int fieldInt63909;
+    public int fieldInt63910;
+    public int fieldInt63911;
+    public int fieldInt63912;
+    public int fieldInt63913;
+    public int fieldInt63914;
+    public int fieldInt63915;
+    public int fieldInt63916;
+    public int fieldInt63917;
+    public int fieldInt63918;
+    public int fieldInt63919;
+    public int fieldInt63920;
+    public int fieldInt63921;
+    public int fieldInt63922;
+    public int fieldInt63923;
+    public int fieldInt63924;
+    public int fieldInt63925;
+    public int fieldInt63926;
+    public int fieldInt63927;
+    public int fieldInt63928;
+    public int fieldInt63929;
+    public int fieldInt63930;
+    public int fieldInt63931;
+    public int fieldInt63932;
+    public int fieldInt63933;
+    public int fieldInt63934;
+    public int fieldInt63935;
+    public int fieldInt63936;
+    public int fieldInt63937;
+    public int fieldInt63938;
+    public int fieldInt63939;
+    public int fieldInt63940;
+    public int fieldInt63941;
+    public int fieldInt63942;
+    public int fieldInt63943;
+    public int fieldInt63944;
+    public int fieldInt63945;
+    public int fieldInt63946;
+    public int fieldInt63947;
+    public int fieldInt63948;
+    public int fieldInt63949;
+    public int fieldInt63950;
+    public int fieldInt63951;
+    public int fieldInt63952;
+    public int fieldInt63953;
+    public int fieldInt63954;
+    public int fieldInt63955;
+    public int fieldInt63956;
+    public int fieldInt63957;
+    public int fieldInt63958;
+    public int fieldInt63959;
+    public int fieldInt63960;
+    public int fieldInt63961;
+    public int fieldInt63962;
+    public int fieldInt63963;
+    public int fieldInt63964;
+    public int fieldInt63965;
+    public int fieldInt63966;
+    public int fieldInt63967;
+    public int fieldInt63968;
+    public int fieldInt63969;
+    public int fieldInt63970;
+    public int fieldInt63971;
+    public int fieldInt63972;
+    public int fieldInt63973;
+    public int fieldInt63974;
+    public int fieldInt63975;
+    public int fieldInt63976;
+    public int fieldInt63977;
+    public int fieldInt63978;
+    public int fieldInt63979;
+    public int fieldInt63980;
+    public int fieldInt63981;
+    public int fieldInt63982;
+    public int fieldInt63983;
+    public int fieldInt63984;
+    public int fieldInt63985;
+    public int fieldInt63986;
+    public int fieldInt63987;
+    public int fieldInt63988;
+    public int fieldInt63989;
+    public int fieldInt63990;
+    public int fieldInt63991;
+    public int fieldInt63992;
+    public int fieldInt63993;
+    public int fieldInt63994;
+    public int fieldInt63995;
+    public int fieldInt63996;
+    public int fieldInt63997;
+    public int fieldInt63998;
+    public int fieldInt63999;
+    public int fieldInt64000;
+    public int fieldInt64001;
+    public int fieldInt64002;
+    public int fieldInt64003;
+    public int fieldInt64004;
+    public int fieldInt64005;
+    public int fieldInt64006;
+    public int fieldInt64007;
+    public int fieldInt64008;
+    public int fieldInt64009;
+    public int fieldInt64010;
+    public int fieldInt64011;
+    public int fieldInt64012;
+    public int fieldInt64013;
+    public int fieldInt64014;
+    public int fieldInt64015;
+    public int fieldInt64016;
+    public int fieldInt64017;
+    public int fieldInt64018;
+    public int fieldInt64019;
+    public int fieldInt64020;
+    public int fieldInt64021;
+    public int fieldInt64022;
+    public int fieldInt64023;
+    public int fieldInt64024;
+    public int fieldInt64025;
+    public int fieldInt64026;
+    public int fieldInt64027;
+    public int fieldInt64028;
+    public int fieldInt64029;
+    public int fieldInt64030;
+    public int fieldInt64031;
+    public int fieldInt64032;
+    public int fieldInt64033;
+    public int fieldInt64034;
+    public int fieldInt64035;
+    public int fieldInt64036;
+    public int fieldInt64037;
+    public int fieldInt64038;
+    public int fieldInt64039;
+    public int fieldInt64040;
+    public int fieldInt64041;
+    public int fieldInt64042;
+    public int fieldInt64043;
+    public int fieldInt64044;
+    public int fieldInt64045;
+    public int fieldInt64046;
+    public int fieldInt64047;
+    public int fieldInt64048;
+    public int fieldInt64049;
+    public int fieldInt64050;
+    public int fieldInt64051;
+    public int fieldInt64052;
+    public int fieldInt64053;
+    public int fieldInt64054;
+    public int fieldInt64055;
+    public int fieldInt64056;
+    public int fieldInt64057;
+    public int fieldInt64058;
+    public int fieldInt64059;
+    public int fieldInt64060;
+    public int fieldInt64061;
+    public int fieldInt64062;
+    public int fieldInt64063;
+    public int fieldInt64064;
+    public int fieldInt64065;
+    public int fieldInt64066;
+    public int fieldInt64067;
+    public int fieldInt64068;
+    public int fieldInt64069;
+    public int fieldInt64070;
+    public int fieldInt64071;
+    public int fieldInt64072;
+    public int fieldInt64073;
+    public int fieldInt64074;
+    public int fieldInt64075;
+    public int fieldInt64076;
+    public int fieldInt64077;
+    public int fieldInt64078;
+    public int fieldInt64079;
+    public int fieldInt64080;
+    public int fieldInt64081;
+    public int fieldInt64082;
+    public int fieldInt64083;
+    public int fieldInt64084;
+    public int fieldInt64085;
+    public int fieldInt64086;
+    public int fieldInt64087;
+    public int fieldInt64088;
+    public int fieldInt64089;
+    public int fieldInt64090;
+    public int fieldInt64091;
+    public int fieldInt64092;
+    public int fieldInt64093;
+    public int fieldInt64094;
+    public int fieldInt64095;
+    public int fieldInt64096;
+    public int fieldInt64097;
+    public int fieldInt64098;
+    public int fieldInt64099;
+    public int fieldInt64100;
+    public int fieldInt64101;
+    public int fieldInt64102;
+    public int fieldInt64103;
+    public int fieldInt64104;
+    public int fieldInt64105;
+    public int fieldInt64106;
+    public int fieldInt64107;
+    public int fieldInt64108;
+    public int fieldInt64109;
+    public int fieldInt64110;
+    public int fieldInt64111;
+    public int fieldInt64112;
+    public int fieldInt64113;
+    public int fieldInt64114;
+    public int fieldInt64115;
+    public int fieldInt64116;
+    public int fieldInt64117;
+    public int fieldInt64118;
+    public int fieldInt64119;
+    public int fieldInt64120;
+    public int fieldInt64121;
+    public int fieldInt64122;
+    public int fieldInt64123;
+    public int fieldInt64124;
+    public int fieldInt64125;
+    public int fieldInt64126;
+    public int fieldInt64127;
+    public int fieldInt64128;
+    public int fieldInt64129;
+    public int fieldInt64130;
+    public int fieldInt64131;
+    public int fieldInt64132;
+    public int fieldInt64133;
+    public int fieldInt64134;
+    public int fieldInt64135;
+    public int fieldInt64136;
+    public int fieldInt64137;
+    public int fieldInt64138;
+    public int fieldInt64139;
+    public int fieldInt64140;
+    public int fieldInt64141;
+    public int fieldInt64142;
+    public int fieldInt64143;
+    public int fieldInt64144;
+    public int fieldInt64145;
+    public int fieldInt64146;
+    public int fieldInt64147;
+    public int fieldInt64148;
+    public int fieldInt64149;
+    public int fieldInt64150;
+    public int fieldInt64151;
+    public int fieldInt64152;
+    public int fieldInt64153;
+    public int fieldInt64154;
+    public int fieldInt64155;
+    public int fieldInt64156;
+    public int fieldInt64157;
+    public int fieldInt64158;
+    public int fieldInt64159;
+    public int fieldInt64160;
+    public int fieldInt64161;
+    public int fieldInt64162;
+    public int fieldInt64163;
+    public int fieldInt64164;
+    public int fieldInt64165;
+    public int fieldInt64166;
+    public int fieldInt64167;
+    public int fieldInt64168;
+    public int fieldInt64169;
+    public int fieldInt64170;
+    public int fieldInt64171;
+    public int fieldInt64172;
+    public int fieldInt64173;
+    public int fieldInt64174;
+    public int fieldInt64175;
+    public int fieldInt64176;
+    public int fieldInt64177;
+    public int fieldInt64178;
+    public int fieldInt64179;
+    public int fieldInt64180;
+    public int fieldInt64181;
+    public int fieldInt64182;
+    public int fieldInt64183;
+    public int fieldInt64184;
+    public int fieldInt64185;
+    public int fieldInt64186;
+    public int fieldInt64187;
+    public int fieldInt64188;
+    public int fieldInt64189;
+    public int fieldInt64190;
+    public int fieldInt64191;
+    public int fieldInt64192;
+    public int fieldInt64193;
+    public int fieldInt64194;
+    public int fieldInt64195;
+    public int fieldInt64196;
+    public int fieldInt64197;
+    public int fieldInt64198;
+    public int fieldInt64199;
+    public int fieldInt64200;
+    public int fieldInt64201;
+    public int fieldInt64202;
+    public int fieldInt64203;
+    public int fieldInt64204;
+    public int fieldInt64205;
+    public int fieldInt64206;
+    public int fieldInt64207;
+    public int fieldInt64208;
+    public int fieldInt64209;
+    public int fieldInt64210;
+    public int fieldInt64211;
+    public int fieldInt64212;
+    public int fieldInt64213;
+    public int fieldInt64214;
+    public int fieldInt64215;
+    public int fieldInt64216;
+    public int fieldInt64217;
+    public int fieldInt64218;
+    public int fieldInt64219;
+    public int fieldInt64220;
+    public int fieldInt64221;
+    public int fieldInt64222;
+    public int fieldInt64223;
+    public int fieldInt64224;
+    public int fieldInt64225;
+    public int fieldInt64226;
+    public int fieldInt64227;
+    public int fieldInt64228;
+    public int fieldInt64229;
+    public int fieldInt64230;
+    public int fieldInt64231;
+    public int fieldInt64232;
+    public int fieldInt64233;
+    public int fieldInt64234;
+    public int fieldInt64235;
+    public int fieldInt64236;
+    public int fieldInt64237;
+    public int fieldInt64238;
+    public int fieldInt64239;
+    public int fieldInt64240;
+    public int fieldInt64241;
+    public int fieldInt64242;
+    public int fieldInt64243;
+    public int fieldInt64244;
+    public int fieldInt64245;
+    public int fieldInt64246;
+    public int fieldInt64247;
+    public int fieldInt64248;
+    public int fieldInt64249;
+    public int fieldInt64250;
+    public int fieldInt64251;
+    public int fieldInt64252;
+    public int fieldInt64253;
+    public int fieldInt64254;
+    public int fieldInt64255;
+    public int fieldInt64256;
+    public int fieldInt64257;
+    public int fieldInt64258;
+    public int fieldInt64259;
+    public int fieldInt64260;
+    public int fieldInt64261;
+    public int fieldInt64262;
+    public int fieldInt64263;
+    public int fieldInt64264;
+    public int fieldInt64265;
+    public int fieldInt64266;
+    public int fieldInt64267;
+    public int fieldInt64268;
+    public int fieldInt64269;
+    public int fieldInt64270;
+    public int fieldInt64271;
+    public int fieldInt64272;
+    public int fieldInt64273;
+    public int fieldInt64274;
+    public int fieldInt64275;
+    public int fieldInt64276;
+    public int fieldInt64277;
+    public int fieldInt64278;
+    public int fieldInt64279;
+    public int fieldInt64280;
+    public int fieldInt64281;
+    public int fieldInt64282;
+    public int fieldInt64283;
+    public int fieldInt64284;
+    public int fieldInt64285;
+    public int fieldInt64286;
+    public int fieldInt64287;
+    public int fieldInt64288;
+    public int fieldInt64289;
+    public int fieldInt64290;
+    public int fieldInt64291;
+    public int fieldInt64292;
+    public int fieldInt64293;
+    public int fieldInt64294;
+    public int fieldInt64295;
+    public int fieldInt64296;
+    public int fieldInt64297;
+    public int fieldInt64298;
+    public int fieldInt64299;
+    public int fieldInt64300;
+    public int fieldInt64301;
+    public int fieldInt64302;
+    public int fieldInt64303;
+    public int fieldInt64304;
+    public int fieldInt64305;
+    public int fieldInt64306;
+    public int fieldInt64307;
+    public int fieldInt64308;
+    public int fieldInt64309;
+    public int fieldInt64310;
+    public int fieldInt64311;
+    public int fieldInt64312;
+    public int fieldInt64313;
+    public int fieldInt64314;
+    public int fieldInt64315;
+    public int fieldInt64316;
+    public int fieldInt64317;
+    public int fieldInt64318;
+    public int fieldInt64319;
+    public int fieldInt64320;
+    public int fieldInt64321;
+    public int fieldInt64322;
+    public int fieldInt64323;
+    public int fieldInt64324;
+    public int fieldInt64325;
+    public int fieldInt64326;
+    public int fieldInt64327;
+    public int fieldInt64328;
+    public int fieldInt64329;
+    public int fieldInt64330;
+    public int fieldInt64331;
+    public int fieldInt64332;
+    public int fieldInt64333;
+    public int fieldInt64334;
+    public int fieldInt64335;
+    public int fieldInt64336;
+    public int fieldInt64337;
+    public int fieldInt64338;
+    public int fieldInt64339;
+    public int fieldInt64340;
+    public int fieldInt64341;
+    public int fieldInt64342;
+    public int fieldInt64343;
+    public int fieldInt64344;
+    public int fieldInt64345;
+    public int fieldInt64346;
+    public int fieldInt64347;
+    public int fieldInt64348;
+    public int fieldInt64349;
+    public int fieldInt64350;
+    public int fieldInt64351;
+    public int fieldInt64352;
+    public int fieldInt64353;
+    public int fieldInt64354;
+    public int fieldInt64355;
+    public int fieldInt64356;
+    public int fieldInt64357;
+    public int fieldInt64358;
+    public int fieldInt64359;
+    public int fieldInt64360;
+    public int fieldInt64361;
+    public int fieldInt64362;
+    public int fieldInt64363;
+    public int fieldInt64364;
+    public int fieldInt64365;
+    public int fieldInt64366;
+    public int fieldInt64367;
+    public int fieldInt64368;
+    public int fieldInt64369;
+    public int fieldInt64370;
+    public int fieldInt64371;
+    public int fieldInt64372;
+    public int fieldInt64373;
+    public int fieldInt64374;
+    public int fieldInt64375;
+    public int fieldInt64376;
+    public int fieldInt64377;
+    public int fieldInt64378;
+    public int fieldInt64379;
+    public int fieldInt64380;
+    public int fieldInt64381;
+    public int fieldInt64382;
+    public int fieldInt64383;
+    public int fieldInt64384;
+    public int fieldInt64385;
+    public int fieldInt64386;
+    public int fieldInt64387;
+    public int fieldInt64388;
+    public int fieldInt64389;
+    public int fieldInt64390;
+    public int fieldInt64391;
+    public int fieldInt64392;
+    public int fieldInt64393;
+    public int fieldInt64394;
+    public int fieldInt64395;
+    public int fieldInt64396;
+    public int fieldInt64397;
+    public int fieldInt64398;
+    public int fieldInt64399;
+    public int fieldInt64400;
+    public int fieldInt64401;
+    public int fieldInt64402;
+    public int fieldInt64403;
+    public int fieldInt64404;
+    public int fieldInt64405;
+    public int fieldInt64406;
+    public int fieldInt64407;
+    public int fieldInt64408;
+    public int fieldInt64409;
+    public int fieldInt64410;
+    public int fieldInt64411;
+    public int fieldInt64412;
+    public int fieldInt64413;
+    public int fieldInt64414;
+    public int fieldInt64415;
+    public int fieldInt64416;
+    public int fieldInt64417;
+    public int fieldInt64418;
+    public int fieldInt64419;
+    public int fieldInt64420;
+    public int fieldInt64421;
+    public int fieldInt64422;
+    public int fieldInt64423;
+    public int fieldInt64424;
+    public int fieldInt64425;
+    public int fieldInt64426;
+    public int fieldInt64427;
+    public int fieldInt64428;
+    public int fieldInt64429;
+    public int fieldInt64430;
+    public int fieldInt64431;
+    public int fieldInt64432;
+    public int fieldInt64433;
+    public int fieldInt64434;
+    public int fieldInt64435;
+    public int fieldInt64436;
+    public int fieldInt64437;
+    public int fieldInt64438;
+    public int fieldInt64439;
+    public int fieldInt64440;
+    public int fieldInt64441;
+    public int fieldInt64442;
+    public int fieldInt64443;
+    public int fieldInt64444;
+    public int fieldInt64445;
+    public int fieldInt64446;
+    public int fieldInt64447;
+    public int fieldInt64448;
+    public int fieldInt64449;
+    public int fieldInt64450;
+    public int fieldInt64451;
+    public int fieldInt64452;
+    public int fieldInt64453;
+    public int fieldInt64454;
+    public int fieldInt64455;
+    public int fieldInt64456;
+    public int fieldInt64457;
+    public int fieldInt64458;
+    public int fieldInt64459;
+    public int fieldInt64460;
+    public int fieldInt64461;
+    public int fieldInt64462;
+    public int fieldInt64463;
+    public int fieldInt64464;
+    public int fieldInt64465;
+    public int fieldInt64466;
+    public int fieldInt64467;
+    public int fieldInt64468;
+    public int fieldInt64469;
+    public int fieldInt64470;
+    public int fieldInt64471;
+    public int fieldInt64472;
+    public int fieldInt64473;
+    public int fieldInt64474;
+    public int fieldInt64475;
+    public int fieldInt64476;
+    public int fieldInt64477;
+    public int fieldInt64478;
+    public int fieldInt64479;
+    public int fieldInt64480;
+    public int fieldInt64481;
+    public int fieldInt64482;
+    public int fieldInt64483;
+    public int fieldInt64484;
+    public int fieldInt64485;
+    public int fieldInt64486;
+    public int fieldInt64487;
+    public int fieldInt64488;
+    public int fieldInt64489;
+    public int fieldInt64490;
+    public int fieldInt64491;
+    public int fieldInt64492;
+    public int fieldInt64493;
+    public int fieldInt64494;
+    public int fieldInt64495;
+    public int fieldInt64496;
+    public int fieldInt64497;
+    public int fieldInt64498;
+    public int fieldInt64499;
+    public int fieldInt64500;
+    public int fieldInt64501;
+    public int fieldInt64502;
+    public int fieldInt64503;
+    public int fieldInt64504;
+    public int fieldInt64505;
+    public int fieldInt64506;
+    public int fieldInt64507;
+    public int fieldInt64508;
+    public int fieldInt64509;
+    public int fieldInt64510;
+    public int fieldInt64511;
+    public int fieldInt64512;
+    public int fieldInt64513;
+    public int fieldInt64514;
+    public int fieldInt64515;
+    public int fieldInt64516;
+    public int fieldInt64517;
+    public int fieldInt64518;
+    public int fieldInt64519;
+    public int fieldInt64520;
+    public int fieldInt64521;
+    public int fieldInt64522;
+    public int fieldInt64523;
+    public int fieldInt64524;
+    public int fieldInt64525;
+    public int fieldInt64526;
+    public int fieldInt64527;
+    public int fieldInt64528;
+    public int fieldInt64529;
+    public int fieldInt64530;
+    public int fieldInt64531;
+    public int fieldInt64532;
+    public int fieldInt64533;
+    public int fieldInt64534;
+    public int fieldInt64535;
+    public int fieldInt64536;
+    public int fieldInt64537;
+    public int fieldInt64538;
+    public int fieldInt64539;
+    public int fieldInt64540;
+    public int fieldInt64541;
+    public int fieldInt64542;
+    public int fieldInt64543;
+    public int fieldInt64544;
+    public int fieldInt64545;
+    public int fieldInt64546;
+    public int fieldInt64547;
+    public int fieldInt64548;
+    public int fieldInt64549;
+    public int fieldInt64550;
+    public int fieldInt64551;
+    public int fieldInt64552;
+    public int fieldInt64553;
+    public int fieldInt64554;
+    public int fieldInt64555;
+    public int fieldInt64556;
+    public int fieldInt64557;
+    public int fieldInt64558;
+    public int fieldInt64559;
+    public int fieldInt64560;
+    public int fieldInt64561;
+    public int fieldInt64562;
+    public int fieldInt64563;
+    public int fieldInt64564;
+    public int fieldInt64565;
+    public int fieldInt64566;
+    public int fieldInt64567;
+    public int fieldInt64568;
+    public int fieldInt64569;
+    public int fieldInt64570;
+    public int fieldInt64571;
+    public int fieldInt64572;
+    public int fieldInt64573;
+    public int fieldInt64574;
+    public int fieldInt64575;
+    public int fieldInt64576;
+    public int fieldInt64577;
+    public int fieldInt64578;
+    public int fieldInt64579;
+    public int fieldInt64580;
+    public int fieldInt64581;
+    public int fieldInt64582;
+    public int fieldInt64583;
+    public int fieldInt64584;
+    public int fieldInt64585;
+    public int fieldInt64586;
+    public int fieldInt64587;
+    public int fieldInt64588;
+    public int fieldInt64589;
+    public int fieldInt64590;
+    public int fieldInt64591;
+    public int fieldInt64592;
+    public int fieldInt64593;
+    public int fieldInt64594;
+    public int fieldInt64595;
+    public int fieldInt64596;
+    public int fieldInt64597;
+    public int fieldInt64598;
+    public int fieldInt64599;
+    public int fieldInt64600;
+    public int fieldInt64601;
+    public int fieldInt64602;
+    public int fieldInt64603;
+    public int fieldInt64604;
+    public int fieldInt64605;
+    public int fieldInt64606;
+    public int fieldInt64607;
+    public int fieldInt64608;
+    public int fieldInt64609;
+    public int fieldInt64610;
+    public int fieldInt64611;
+    public int fieldInt64612;
+    public int fieldInt64613;
+    public int fieldInt64614;
+    public int fieldInt64615;
+    public int fieldInt64616;
+    public int fieldInt64617;
+    public int fieldInt64618;
+    public int fieldInt64619;
+    public int fieldInt64620;
+    public int fieldInt64621;
+    public int fieldInt64622;
+    public int fieldInt64623;
+    public int fieldInt64624;
+    public int fieldInt64625;
+    public int fieldInt64626;
+    public int fieldInt64627;
+    public int fieldInt64628;
+    public int fieldInt64629;
+    public int fieldInt64630;
+    public int fieldInt64631;
+    public int fieldInt64632;
+    public int fieldInt64633;
+    public int fieldInt64634;
+    public int fieldInt64635;
+    public int fieldInt64636;
+    public int fieldInt64637;
+    public int fieldInt64638;
+    public int fieldInt64639;
+    public int fieldInt64640;
+    public int fieldInt64641;
+    public int fieldInt64642;
+    public int fieldInt64643;
+    public int fieldInt64644;
+    public int fieldInt64645;
+    public int fieldInt64646;
+    public int fieldInt64647;
+    public int fieldInt64648;
+    public int fieldInt64649;
+    public int fieldInt64650;
+    public int fieldInt64651;
+    public int fieldInt64652;
+    public int fieldInt64653;
+    public int fieldInt64654;
+    public int fieldInt64655;
+    public int fieldInt64656;
+    public int fieldInt64657;
+    public int fieldInt64658;
+    public int fieldInt64659;
+    public int fieldInt64660;
+    public int fieldInt64661;
+    public int fieldInt64662;
+    public int fieldInt64663;
+    public int fieldInt64664;
+    public int fieldInt64665;
+    public int fieldInt64666;
+    public int fieldInt64667;
+    public int fieldInt64668;
+    public int fieldInt64669;
+    public int fieldInt64670;
+    public int fieldInt64671;
+    public int fieldInt64672;
+    public int fieldInt64673;
+    public int fieldInt64674;
+    public int fieldInt64675;
+    public int fieldInt64676;
+    public int fieldInt64677;
+    public int fieldInt64678;
+    public int fieldInt64679;
+    public int fieldInt64680;
+    public int fieldInt64681;
+    public int fieldInt64682;
+    public int fieldInt64683;
+    public int fieldInt64684;
+    public int fieldInt64685;
+    public int fieldInt64686;
+    public int fieldInt64687;
+    public int fieldInt64688;
+    public int fieldInt64689;
+    public int fieldInt64690;
+    public int fieldInt64691;
+    public int fieldInt64692;
+    public int fieldInt64693;
+    public int fieldInt64694;
+    public int fieldInt64695;
+    public int fieldInt64696;
+    public int fieldInt64697;
+    public int fieldInt64698;
+    public int fieldInt64699;
+    public int fieldInt64700;
+    public int fieldInt64701;
+    public int fieldInt64702;
+    public int fieldInt64703;
+    public int fieldInt64704;
+    public int fieldInt64705;
+    public int fieldInt64706;
+    public int fieldInt64707;
+    public int fieldInt64708;
+    public int fieldInt64709;
+    public int fieldInt64710;
+    public int fieldInt64711;
+    public int fieldInt64712;
+    public int fieldInt64713;
+    public int fieldInt64714;
+    public int fieldInt64715;
+    public int fieldInt64716;
+    public int fieldInt64717;
+    public int fieldInt64718;
+    public int fieldInt64719;
+    public int fieldInt64720;
+    public int fieldInt64721;
+    public int fieldInt64722;
+    public int fieldInt64723;
+    public int fieldInt64724;
+    public int fieldInt64725;
+    public int fieldInt64726;
+    public int fieldInt64727;
+    public int fieldInt64728;
+    public int fieldInt64729;
+    public int fieldInt64730;
+    public int fieldInt64731;
+    public int fieldInt64732;
+    public int fieldInt64733;
+    public int fieldInt64734;
+    public int fieldInt64735;
+    public int fieldInt64736;
+    public int fieldInt64737;
+    public int fieldInt64738;
+    public int fieldInt64739;
+    public int fieldInt64740;
+    public int fieldInt64741;
+    public int fieldInt64742;
+    public int fieldInt64743;
+    public int fieldInt64744;
+    public int fieldInt64745;
+    public int fieldInt64746;
+    public int fieldInt64747;
+    public int fieldInt64748;
+    public int fieldInt64749;
+    public int fieldInt64750;
+    public int fieldInt64751;
+    public int fieldInt64752;
+    public int fieldInt64753;
+    public int fieldInt64754;
+    public int fieldInt64755;
+    public int fieldInt64756;
+    public int fieldInt64757;
+    public int fieldInt64758;
+    public int fieldInt64759;
+    public int fieldInt64760;
+    public int fieldInt64761;
+    public int fieldInt64762;
+    public int fieldInt64763;
+    public int fieldInt64764;
+    public int fieldInt64765;
+    public int fieldInt64766;
+    public int fieldInt64767;
+    public int fieldInt64768;
+    public int fieldInt64769;
+    public int fieldInt64770;
+    public int fieldInt64771;
+    public int fieldInt64772;
+    public int fieldInt64773;
+    public int fieldInt64774;
+    public int fieldInt64775;
+    public int fieldInt64776;
+    public int fieldInt64777;
+    public int fieldInt64778;
+    public int fieldInt64779;
+    public int fieldInt64780;
+    public int fieldInt64781;
+    public int fieldInt64782;
+    public int fieldInt64783;
+    public int fieldInt64784;
+    public int fieldInt64785;
+    public int fieldInt64786;
+    public int fieldInt64787;
+    public int fieldInt64788;
+    public int fieldInt64789;
+    public int fieldInt64790;
+    public int fieldInt64791;
+    public int fieldInt64792;
+    public int fieldInt64793;
+    public int fieldInt64794;
+    public int fieldInt64795;
+    public int fieldInt64796;
+    public int fieldInt64797;
+    public int fieldInt64798;
+    public int fieldInt64799;
+    public int fieldInt64800;
+    public int fieldInt64801;
+    public int fieldInt64802;
+    public int fieldInt64803;
+    public int fieldInt64804;
+    public int fieldInt64805;
+    public int fieldInt64806;
+    public int fieldInt64807;
+    public int fieldInt64808;
+    public int fieldInt64809;
+    public int fieldInt64810;
+    public int fieldInt64811;
+    public int fieldInt64812;
+    public int fieldInt64813;
+    public int fieldInt64814;
+    public int fieldInt64815;
+    public int fieldInt64816;
+    public int fieldInt64817;
+    public int fieldInt64818;
+    public int fieldInt64819;
+    public int fieldInt64820;
+    public int fieldInt64821;
+    public int fieldInt64822;
+    public int fieldInt64823;
+    public int fieldInt64824;
+    public int fieldInt64825;
+    public int fieldInt64826;
+    public int fieldInt64827;
+    public int fieldInt64828;
+    public int fieldInt64829;
+    public int fieldInt64830;
+    public int fieldInt64831;
+    public int fieldInt64832;
+    public int fieldInt64833;
+    public int fieldInt64834;
+    public int fieldInt64835;
+    public int fieldInt64836;
+    public int fieldInt64837;
+    public int fieldInt64838;
+    public int fieldInt64839;
+    public int fieldInt64840;
+    public int fieldInt64841;
+    public int fieldInt64842;
+    public int fieldInt64843;
+    public int fieldInt64844;
+    public int fieldInt64845;
+    public int fieldInt64846;
+    public int fieldInt64847;
+    public int fieldInt64848;
+    public int fieldInt64849;
+    public int fieldInt64850;
+    public int fieldInt64851;
+    public int fieldInt64852;
+    public int fieldInt64853;
+    public int fieldInt64854;
+    public int fieldInt64855;
+    public int fieldInt64856;
+    public int fieldInt64857;
+    public int fieldInt64858;
+    public int fieldInt64859;
+    public int fieldInt64860;
+    public int fieldInt64861;
+    public int fieldInt64862;
+    public int fieldInt64863;
+    public int fieldInt64864;
+    public int fieldInt64865;
+    public int fieldInt64866;
+    public int fieldInt64867;
+    public int fieldInt64868;
+    public int fieldInt64869;
+    public int fieldInt64870;
+    public int fieldInt64871;
+    public int fieldInt64872;
+    public int fieldInt64873;
+    public int fieldInt64874;
+    public int fieldInt64875;
+    public int fieldInt64876;
+    public int fieldInt64877;
+    public int fieldInt64878;
+    public int fieldInt64879;
+    public int fieldInt64880;
+    public int fieldInt64881;
+    public int fieldInt64882;
+    public int fieldInt64883;
+    public int fieldInt64884;
+    public int fieldInt64885;
+    public int fieldInt64886;
+    public int fieldInt64887;
+    public int fieldInt64888;
+    public int fieldInt64889;
+    public int fieldInt64890;
+    public int fieldInt64891;
+    public int fieldInt64892;
+    public int fieldInt64893;
+    public int fieldInt64894;
+    public int fieldInt64895;
+    public int fieldInt64896;
+    public int fieldInt64897;
+    public int fieldInt64898;
+    public int fieldInt64899;
+    public int fieldInt64900;
+    public int fieldInt64901;
+    public int fieldInt64902;
+    public int fieldInt64903;
+    public int fieldInt64904;
+    public int fieldInt64905;
+    public int fieldInt64906;
+    public int fieldInt64907;
+    public int fieldInt64908;
+    public int fieldInt64909;
+    public int fieldInt64910;
+    public int fieldInt64911;
+    public int fieldInt64912;
+    public int fieldInt64913;
+    public int fieldInt64914;
+    public int fieldInt64915;
+    public int fieldInt64916;
+    public int fieldInt64917;
+    public int fieldInt64918;
+    public int fieldInt64919;
+    public int fieldInt64920;
+    public int fieldInt64921;
+    public int fieldInt64922;
+    public int fieldInt64923;
+    public int fieldInt64924;
+    public int fieldInt64925;
+    public int fieldInt64926;
+    public int fieldInt64927;
+    public int fieldInt64928;
+    public int fieldInt64929;
+    public int fieldInt64930;
+    public int fieldInt64931;
+    public int fieldInt64932;
+    public int fieldInt64933;
+    public int fieldInt64934;
+    public int fieldInt64935;
+    public int fieldInt64936;
+    public int fieldInt64937;
+    public int fieldInt64938;
+    public int fieldInt64939;
+    public int fieldInt64940;
+    public int fieldInt64941;
+    public int fieldInt64942;
+    public int fieldInt64943;
+    public int fieldInt64944;
+    public int fieldInt64945;
+    public int fieldInt64946;
+    public int fieldInt64947;
+    public int fieldInt64948;
+    public int fieldInt64949;
+    public int fieldInt64950;
+    public int fieldInt64951;
+    public int fieldInt64952;
+    public int fieldInt64953;
+    public int fieldInt64954;
+    public int fieldInt64955;
+    public int fieldInt64956;
+    public int fieldInt64957;
+    public int fieldInt64958;
+    public int fieldInt64959;
+    public int fieldInt64960;
+    public int fieldInt64961;
+    public int fieldInt64962;
+    public int fieldInt64963;
+    public int fieldInt64964;
+    public int fieldInt64965;
+    public int fieldInt64966;
+    public int fieldInt64967;
+    public int fieldInt64968;
+    public int fieldInt64969;
+    public int fieldInt64970;
+    public int fieldInt64971;
+    public int fieldInt64972;
+    public int fieldInt64973;
+    public int fieldInt64974;
+    public int fieldInt64975;
+    public int fieldInt64976;
+    public int fieldInt64977;
+    public int fieldInt64978;
+    public int fieldInt64979;
+    public int fieldInt64980;
+    public int fieldInt64981;
+    public int fieldInt64982;
+    public int fieldInt64983;
+    public int fieldInt64984;
+    public int fieldInt64985;
+    public int fieldInt64986;
+    public int fieldInt64987;
+    public int fieldInt64988;
+    public int fieldInt64989;
+    public int fieldInt64990;
+    public int fieldInt64991;
+    public int fieldInt64992;
+    public int fieldInt64993;
+    public int fieldInt64994;
+    public int fieldInt64995;
+    public int fieldInt64996;
+    public int fieldInt64997;
+    public int fieldInt64998;
+    public int fieldInt64999;
+    public int fieldInt65000;
+    public int fieldInt65001;
+    public int fieldInt65002;
+    public int fieldInt65003;
+    public int fieldInt65004;
+    public int fieldInt65005;
+    public int fieldInt65006;
+    public int fieldInt65007;
+    public int fieldInt65008;
+    public int fieldInt65009;
+    public int fieldInt65010;
+    public int fieldInt65011;
+    public int fieldInt65012;
+    public int fieldInt65013;
+    public int fieldInt65014;
+    public int fieldInt65015;
+    public int fieldInt65016;
+    public int fieldInt65017;
+    public int fieldInt65018;
+    public int fieldInt65019;
+    public int fieldInt65020;
+    public int fieldInt65021;
+    public int fieldInt65022;
+    public int fieldInt65023;
+    public int fieldInt65024;
+    public int fieldInt65025;
+    public int fieldInt65026;
+    public int fieldInt65027;
+    public int fieldInt65028;
+    public int fieldInt65029;
+    public int fieldInt65030;
+    public int fieldInt65031;
+    public int fieldInt65032;
+    public int fieldInt65033;
+    public int fieldInt65034;
+    public int fieldInt65035;
+    public int fieldInt65036;
+    public int fieldInt65037;
+    public int fieldInt65038;
+    public int fieldInt65039;
+    public int fieldInt65040;
+    public int fieldInt65041;
+    public int fieldInt65042;
+    public int fieldInt65043;
+    public int fieldInt65044;
+    public int fieldInt65045;
+    public int fieldInt65046;
+    public int fieldInt65047;
+    public int fieldInt65048;
+    public int fieldInt65049;
+    public int fieldInt65050;
+    public int fieldInt65051;
+    public int fieldInt65052;
+    public int fieldInt65053;
+    public int fieldInt65054;
+    public int fieldInt65055;
+    public int fieldInt65056;
+    public int fieldInt65057;
+    public int fieldInt65058;
+    public int fieldInt65059;
+    public int fieldInt65060;
+    public int fieldInt65061;
+    public int fieldInt65062;
+    public int fieldInt65063;
+    public int fieldInt65064;
+    public int fieldInt65065;
+    public int fieldInt65066;
+    public int fieldInt65067;
+    public int fieldInt65068;
+    public int fieldInt65069;
+    public int fieldInt65070;
+    public int fieldInt65071;
+    public int fieldInt65072;
+    public int fieldInt65073;
+    public int fieldInt65074;
+    public int fieldInt65075;
+    public int fieldInt65076;
+    public int fieldInt65077;
+    public int fieldInt65078;
+    public int fieldInt65079;
+    public int fieldInt65080;
+    public int fieldInt65081;
+    public int fieldInt65082;
+    public int fieldInt65083;
+    public int fieldInt65084;
+    public int fieldInt65085;
+    public int fieldInt65086;
+    public int fieldInt65087;
+    public int fieldInt65088;
+    public int fieldInt65089;
+    public int fieldInt65090;
+    public int fieldInt65091;
+    public int fieldInt65092;
+    public int fieldInt65093;
+    public int fieldInt65094;
+    public int fieldInt65095;
+    public int fieldInt65096;
+    public int fieldInt65097;
+    public int fieldInt65098;
+    public int fieldInt65099;
+    public int fieldInt65100;
+    public int fieldInt65101;
+    public int fieldInt65102;
+    public int fieldInt65103;
+    public int fieldInt65104;
+    public int fieldInt65105;
+    public int fieldInt65106;
+    public int fieldInt65107;
+    public int fieldInt65108;
+    public int fieldInt65109;
+    public int fieldInt65110;
+    public int fieldInt65111;
+    public int fieldInt65112;
+    public int fieldInt65113;
+    public int fieldInt65114;
+    public int fieldInt65115;
+    public int fieldInt65116;
+    public int fieldInt65117;
+    public int fieldInt65118;
+    public int fieldInt65119;
+    public int fieldInt65120;
+    public int fieldInt65121;
+    public int fieldInt65122;
+    public int fieldInt65123;
+    public int fieldInt65124;
+    public int fieldInt65125;
+    public int fieldInt65126;
+    public int fieldInt65127;
+    public int fieldInt65128;
+    public int fieldInt65129;
+    public int fieldInt65130;
+    public int fieldInt65131;
+    public int fieldInt65132;
+    public int fieldInt65133;
+    public int fieldInt65134;
+    public int fieldInt65135;
+    public int fieldInt65136;
+    public int fieldInt65137;
+    public int fieldInt65138;
+    public int fieldInt65139;
+    public int fieldInt65140;
+    public int fieldInt65141;
+    public int fieldInt65142;
+    public int fieldInt65143;
+    public int fieldInt65144;
+    public int fieldInt65145;
+    public int fieldInt65146;
+    public int fieldInt65147;
+    public int fieldInt65148;
+    public int fieldInt65149;
+    public int fieldInt65150;
+    public int fieldInt65151;
+    public int fieldInt65152;
+    public int fieldInt65153;
+    public int fieldInt65154;
+    public int fieldInt65155;
+    public int fieldInt65156;
+    public int fieldInt65157;
+    public int fieldInt65158;
+    public int fieldInt65159;
+    public int fieldInt65160;
+    public int fieldInt65161;
+    public int fieldInt65162;
+    public int fieldInt65163;
+    public int fieldInt65164;
+    public int fieldInt65165;
+    public int fieldInt65166;
+    public int fieldInt65167;
+    public int fieldInt65168;
+    public int fieldInt65169;
+    public int fieldInt65170;
+    public int fieldInt65171;
+    public int fieldInt65172;
+    public int fieldInt65173;
+    public int fieldInt65174;
+    public int fieldInt65175;
+    public int fieldInt65176;
+    public int fieldInt65177;
+    public int fieldInt65178;
+    public int fieldInt65179;
+    public int fieldInt65180;
+    public int fieldInt65181;
+    public int fieldInt65182;
+    public int fieldInt65183;
+    public int fieldInt65184;
+    public int fieldInt65185;
+    public int fieldInt65186;
+    public int fieldInt65187;
+    public int fieldInt65188;
+    public int fieldInt65189;
+    public int fieldInt65190;
+    public int fieldInt65191;
+    public int fieldInt65192;
+    public int fieldInt65193;
+    public int fieldInt65194;
+    public int fieldInt65195;
+    public int fieldInt65196;
+    public int fieldInt65197;
+    public int fieldInt65198;
+    public int fieldInt65199;
+    public int fieldInt65200;
+    public int fieldInt65201;
+    public int fieldInt65202;
+    public int fieldInt65203;
+    public int fieldInt65204;
+    public int fieldInt65205;
+    public int fieldInt65206;
+    public int fieldInt65207;
+    public int fieldInt65208;
+    public int fieldInt65209;
+    public int fieldInt65210;
+    public int fieldInt65211;
+    public int fieldInt65212;
+    public int fieldInt65213;
+    public int fieldInt65214;
+    public int fieldInt65215;
+    public int fieldInt65216;
+    public int fieldInt65217;
+    public int fieldInt65218;
+    public int fieldInt65219;
+    public int fieldInt65220;
+    public int fieldInt65221;
+    public int fieldInt65222;
+    public int fieldInt65223;
+    public int fieldInt65224;
+    public int fieldInt65225;
+    public int fieldInt65226;
+    public int fieldInt65227;
+    public int fieldInt65228;
+    public int fieldInt65229;
+    public int fieldInt65230;
+    public int fieldInt65231;
+    public int fieldInt65232;
+    public int fieldInt65233;
+    public int fieldInt65234;
+    public int fieldInt65235;
+    public int fieldInt65236;
+    public int fieldInt65237;
+    public int fieldInt65238;
+    public int fieldInt65239;
+    public int fieldInt65240;
+    public int fieldInt65241;
+    public int fieldInt65242;
+    public int fieldInt65243;
+    public int fieldInt65244;
+    public int fieldInt65245;
+    public int fieldInt65246;
+    public int fieldInt65247;
+    public int fieldInt65248;
+    public int fieldInt65249;
+    public int fieldInt65250;
+    public int fieldInt65251;
+    public int fieldInt65252;
+    public int fieldInt65253;
+    public int fieldInt65254;
+    public int fieldInt65255;
+    public int fieldInt65256;
+    public int fieldInt65257;
+    public int fieldInt65258;
+    public int fieldInt65259;
+    public int fieldInt65260;
+    public int fieldInt65261;
+    public int fieldInt65262;
+    public int fieldInt65263;
+    public int fieldInt65264;
+    public int fieldInt65265;
+    public int fieldInt65266;
+    public int fieldInt65267;
+    public int fieldInt65268;
+    public int fieldInt65269;
+    public int fieldInt65270;
+    public int fieldInt65271;
+    public int fieldInt65272;
+    public int fieldInt65273;
+    public int fieldInt65274;
+    public int fieldInt65275;
+    public int fieldInt65276;
+    public int fieldInt65277;
+    public int fieldInt65278;
+    public int fieldInt65279;
+    public int fieldInt65280;
+    public int fieldInt65281;
+    public int fieldInt65282;
+    public int fieldInt65283;
+    public int fieldInt65284;
+    public int fieldInt65285;
+    public int fieldInt65286;
+    public int fieldInt65287;
+    public int fieldInt65288;
+    public int fieldInt65289;
+    public int fieldInt65290;
+    public int fieldInt65291;
+    public int fieldInt65292;
+    public int fieldInt65293;
+    public int fieldInt65294;
+    public int fieldInt65295;
+    public int fieldInt65296;
+    public int fieldInt65297;
+    public int fieldInt65298;
+    public int fieldInt65299;
+    public int fieldInt65300;
+    public int fieldInt65301;
+    public int fieldInt65302;
+    public int fieldInt65303;
+    public int fieldInt65304;
+    public int fieldInt65305;
+    public int fieldInt65306;
+    public int fieldInt65307;
+    public int fieldInt65308;
+    public int fieldInt65309;
+    public int fieldInt65310;
+    public int fieldInt65311;
+    public int fieldInt65312;
+    public int fieldInt65313;
+    public int fieldInt65314;
+    public int fieldInt65315;
+    public int fieldInt65316;
+    public int fieldInt65317;
+    public int fieldInt65318;
+    public int fieldInt65319;
+    public int fieldInt65320;
+    public int fieldInt65321;
+    public int fieldInt65322;
+    public int fieldInt65323;
+    public int fieldInt65324;
+    public int fieldInt65325;
+    public int fieldInt65326;
+    public int fieldInt65327;
+    public int fieldInt65328;
+    public int fieldInt65329;
+    public int fieldInt65330;
+    public int fieldInt65331;
+    public int fieldInt65332;
+    public int fieldInt65333;
+    public int fieldInt65334;
+    public int fieldInt65335;
+    public int fieldInt65336;
+    public int fieldInt65337;
+    public int fieldInt65338;
+    public int fieldInt65339;
+    public int fieldInt65340;
+    public int fieldInt65341;
+    public int fieldInt65342;
+    public int fieldInt65343;
+    public int fieldInt65344;
+    public int fieldInt65345;
+    public int fieldInt65346;
+    public int fieldInt65347;
+    public int fieldInt65348;
+    public int fieldInt65349;
+    public int fieldInt65350;
+    public int fieldInt65351;
+    public int fieldInt65352;
+    public int fieldInt65353;
+    public int fieldInt65354;
+    public int fieldInt65355;
+    public int fieldInt65356;
+    public int fieldInt65357;
+    public int fieldInt65358;
+    public int fieldInt65359;
+    public int fieldInt65360;
+    public int fieldInt65361;
+    public int fieldInt65362;
+    public int fieldInt65363;
+    public int fieldInt65364;
+    public int fieldInt65365;
+    public int fieldInt65366;
+    public int fieldInt65367;
+    public int fieldInt65368;
+    public int fieldInt65369;
+    public int fieldInt65370;
+    public int fieldInt65371;
+    public int fieldInt65372;
+    public int fieldInt65373;
+    public int fieldInt65374;
+    public int fieldInt65375;
+    public int fieldInt65376;
+    public int fieldInt65377;
+    public int fieldInt65378;
+    public int fieldInt65379;
+    public int fieldInt65380;
+    public int fieldInt65381;
+    public int fieldInt65382;
+    public int fieldInt65383;
+    public int fieldInt65384;
+    public int fieldInt65385;
+    public int fieldInt65386;
+    public int fieldInt65387;
+    public int fieldInt65388;
+    public int fieldInt65389;
+    public int fieldInt65390;
+    public int fieldInt65391;
+    public int fieldInt65392;
+    public int fieldInt65393;
+    public int fieldInt65394;
+    public int fieldInt65395;
+    public int fieldInt65396;
+    public int fieldInt65397;
+    public int fieldInt65398;
+    public int fieldInt65399;
+    public int fieldInt65400;
+    public int fieldInt65401;
+    public int fieldInt65402;
+    public int fieldInt65403;
+    public int fieldInt65404;
+    public int fieldInt65405;
+    public int fieldInt65406;
+    public int fieldInt65407;
+    public int fieldInt65408;
+    public int fieldInt65409;
+    public int fieldInt65410;
+    public int fieldInt65411;
+    public int fieldInt65412;
+    public int fieldInt65413;
+    public int fieldInt65414;
+    public int fieldInt65415;
+    public int fieldInt65416;
+    public int fieldInt65417;
+    public int fieldInt65418;
+    public int fieldInt65419;
+    public int fieldInt65420;
+    public int fieldInt65421;
+    public int fieldInt65422;
+    public int fieldInt65423;
+    public int fieldInt65424;
+    public int fieldInt65425;
+    public int fieldInt65426;
+    public int fieldInt65427;
+    public int fieldInt65428;
+    public int fieldInt65429;
+    public int fieldInt65430;
+    public int fieldInt65431;
+    public int fieldInt65432;
+    public int fieldInt65433;
+    public int fieldInt65434;
+    public int fieldInt65435;
+    public int fieldInt65436;
+    public int fieldInt65437;
+    public int fieldInt65438;
+    public int fieldInt65439;
+    public int fieldInt65440;
+    public int fieldInt65441;
+    public int fieldInt65442;
+    public int fieldInt65443;
+    public int fieldInt65444;
+    public int fieldInt65445;
+    public int fieldInt65446;
+    public int fieldInt65447;
+    public int fieldInt65448;
+    public int fieldInt65449;
+    public int fieldInt65450;
+    public int fieldInt65451;
+    public int fieldInt65452;
+    public int fieldInt65453;
+    public int fieldInt65454;
+    public int fieldInt65455;
+    public int fieldInt65456;
+    public int fieldInt65457;
+    public int fieldInt65458;
+    public int fieldInt65459;
+    public int fieldInt65460;
+    public int fieldInt65461;
+    public int fieldInt65462;
+    public int fieldInt65463;
+    public int fieldInt65464;
+    public int fieldInt65465;
+    public int fieldInt65466;
+    public int fieldInt65467;
+    public int fieldInt65468;
+    public int fieldInt65469;
+    public int fieldInt65470;
+    public int fieldInt65471;
+    public int fieldInt65472;
+    public int fieldInt65473;
+    public int fieldInt65474;
+    public int fieldInt65475;
+    public int fieldInt65476;
+    public int fieldInt65477;
+    public int fieldInt65478;
+    public int fieldInt65479;
+    public int fieldInt65480;
+    public int fieldInt65481;
+    public int fieldInt65482;
+    public int fieldInt65483;
+    public int fieldInt65484;
+    public int fieldInt65485;
+    public int fieldInt65486;
+    public int fieldInt65487;
+    public int fieldInt65488;
+    public int fieldInt65489;
+    public int fieldInt65490;
+    public int fieldInt65491;
+    public int fieldInt65492;
+    public int fieldInt65493;
+    public int fieldInt65494;
+    public int fieldInt65495;
+    public int fieldInt65496;
+    public int fieldInt65497;
+    public int fieldInt65498;
+    public int fieldInt65499;
+    public int fieldInt65500;
+}
diff --git a/dx/tests/128-multidex-option-overflow/src/FillerMethod.java b/dx/tests/128-multidex-option-overflow/src/FillerMethod.java
new file mode 100644
index 0000000..4d78671
--- /dev/null
+++ b/dx/tests/128-multidex-option-overflow/src/FillerMethod.java
@@ -0,0 +1,65502 @@
+public class FillerMethod {
+    public void meth1() { }
+    public void meth2() { }
+    public void meth3() { }
+    public void meth4() { }
+    public void meth5() { }
+    public void meth6() { }
+    public void meth7() { }
+    public void meth8() { }
+    public void meth9() { }
+    public void meth10() { }
+    public void meth11() { }
+    public void meth12() { }
+    public void meth13() { }
+    public void meth14() { }
+    public void meth15() { }
+    public void meth16() { }
+    public void meth17() { }
+    public void meth18() { }
+    public void meth19() { }
+    public void meth20() { }
+    public void meth21() { }
+    public void meth22() { }
+    public void meth23() { }
+    public void meth24() { }
+    public void meth25() { }
+    public void meth26() { }
+    public void meth27() { }
+    public void meth28() { }
+    public void meth29() { }
+    public void meth30() { }
+    public void meth31() { }
+    public void meth32() { }
+    public void meth33() { }
+    public void meth34() { }
+    public void meth35() { }
+    public void meth36() { }
+    public void meth37() { }
+    public void meth38() { }
+    public void meth39() { }
+    public void meth40() { }
+    public void meth41() { }
+    public void meth42() { }
+    public void meth43() { }
+    public void meth44() { }
+    public void meth45() { }
+    public void meth46() { }
+    public void meth47() { }
+    public void meth48() { }
+    public void meth49() { }
+    public void meth50() { }
+    public void meth51() { }
+    public void meth52() { }
+    public void meth53() { }
+    public void meth54() { }
+    public void meth55() { }
+    public void meth56() { }
+    public void meth57() { }
+    public void meth58() { }
+    public void meth59() { }
+    public void meth60() { }
+    public void meth61() { }
+    public void meth62() { }
+    public void meth63() { }
+    public void meth64() { }
+    public void meth65() { }
+    public void meth66() { }
+    public void meth67() { }
+    public void meth68() { }
+    public void meth69() { }
+    public void meth70() { }
+    public void meth71() { }
+    public void meth72() { }
+    public void meth73() { }
+    public void meth74() { }
+    public void meth75() { }
+    public void meth76() { }
+    public void meth77() { }
+    public void meth78() { }
+    public void meth79() { }
+    public void meth80() { }
+    public void meth81() { }
+    public void meth82() { }
+    public void meth83() { }
+    public void meth84() { }
+    public void meth85() { }
+    public void meth86() { }
+    public void meth87() { }
+    public void meth88() { }
+    public void meth89() { }
+    public void meth90() { }
+    public void meth91() { }
+    public void meth92() { }
+    public void meth93() { }
+    public void meth94() { }
+    public void meth95() { }
+    public void meth96() { }
+    public void meth97() { }
+    public void meth98() { }
+    public void meth99() { }
+    public void meth100() { }
+    public void meth101() { }
+    public void meth102() { }
+    public void meth103() { }
+    public void meth104() { }
+    public void meth105() { }
+    public void meth106() { }
+    public void meth107() { }
+    public void meth108() { }
+    public void meth109() { }
+    public void meth110() { }
+    public void meth111() { }
+    public void meth112() { }
+    public void meth113() { }
+    public void meth114() { }
+    public void meth115() { }
+    public void meth116() { }
+    public void meth117() { }
+    public void meth118() { }
+    public void meth119() { }
+    public void meth120() { }
+    public void meth121() { }
+    public void meth122() { }
+    public void meth123() { }
+    public void meth124() { }
+    public void meth125() { }
+    public void meth126() { }
+    public void meth127() { }
+    public void meth128() { }
+    public void meth129() { }
+    public void meth130() { }
+    public void meth131() { }
+    public void meth132() { }
+    public void meth133() { }
+    public void meth134() { }
+    public void meth135() { }
+    public void meth136() { }
+    public void meth137() { }
+    public void meth138() { }
+    public void meth139() { }
+    public void meth140() { }
+    public void meth141() { }
+    public void meth142() { }
+    public void meth143() { }
+    public void meth144() { }
+    public void meth145() { }
+    public void meth146() { }
+    public void meth147() { }
+    public void meth148() { }
+    public void meth149() { }
+    public void meth150() { }
+    public void meth151() { }
+    public void meth152() { }
+    public void meth153() { }
+    public void meth154() { }
+    public void meth155() { }
+    public void meth156() { }
+    public void meth157() { }
+    public void meth158() { }
+    public void meth159() { }
+    public void meth160() { }
+    public void meth161() { }
+    public void meth162() { }
+    public void meth163() { }
+    public void meth164() { }
+    public void meth165() { }
+    public void meth166() { }
+    public void meth167() { }
+    public void meth168() { }
+    public void meth169() { }
+    public void meth170() { }
+    public void meth171() { }
+    public void meth172() { }
+    public void meth173() { }
+    public void meth174() { }
+    public void meth175() { }
+    public void meth176() { }
+    public void meth177() { }
+    public void meth178() { }
+    public void meth179() { }
+    public void meth180() { }
+    public void meth181() { }
+    public void meth182() { }
+    public void meth183() { }
+    public void meth184() { }
+    public void meth185() { }
+    public void meth186() { }
+    public void meth187() { }
+    public void meth188() { }
+    public void meth189() { }
+    public void meth190() { }
+    public void meth191() { }
+    public void meth192() { }
+    public void meth193() { }
+    public void meth194() { }
+    public void meth195() { }
+    public void meth196() { }
+    public void meth197() { }
+    public void meth198() { }
+    public void meth199() { }
+    public void meth200() { }
+    public void meth201() { }
+    public void meth202() { }
+    public void meth203() { }
+    public void meth204() { }
+    public void meth205() { }
+    public void meth206() { }
+    public void meth207() { }
+    public void meth208() { }
+    public void meth209() { }
+    public void meth210() { }
+    public void meth211() { }
+    public void meth212() { }
+    public void meth213() { }
+    public void meth214() { }
+    public void meth215() { }
+    public void meth216() { }
+    public void meth217() { }
+    public void meth218() { }
+    public void meth219() { }
+    public void meth220() { }
+    public void meth221() { }
+    public void meth222() { }
+    public void meth223() { }
+    public void meth224() { }
+    public void meth225() { }
+    public void meth226() { }
+    public void meth227() { }
+    public void meth228() { }
+    public void meth229() { }
+    public void meth230() { }
+    public void meth231() { }
+    public void meth232() { }
+    public void meth233() { }
+    public void meth234() { }
+    public void meth235() { }
+    public void meth236() { }
+    public void meth237() { }
+    public void meth238() { }
+    public void meth239() { }
+    public void meth240() { }
+    public void meth241() { }
+    public void meth242() { }
+    public void meth243() { }
+    public void meth244() { }
+    public void meth245() { }
+    public void meth246() { }
+    public void meth247() { }
+    public void meth248() { }
+    public void meth249() { }
+    public void meth250() { }
+    public void meth251() { }
+    public void meth252() { }
+    public void meth253() { }
+    public void meth254() { }
+    public void meth255() { }
+    public void meth256() { }
+    public void meth257() { }
+    public void meth258() { }
+    public void meth259() { }
+    public void meth260() { }
+    public void meth261() { }
+    public void meth262() { }
+    public void meth263() { }
+    public void meth264() { }
+    public void meth265() { }
+    public void meth266() { }
+    public void meth267() { }
+    public void meth268() { }
+    public void meth269() { }
+    public void meth270() { }
+    public void meth271() { }
+    public void meth272() { }
+    public void meth273() { }
+    public void meth274() { }
+    public void meth275() { }
+    public void meth276() { }
+    public void meth277() { }
+    public void meth278() { }
+    public void meth279() { }
+    public void meth280() { }
+    public void meth281() { }
+    public void meth282() { }
+    public void meth283() { }
+    public void meth284() { }
+    public void meth285() { }
+    public void meth286() { }
+    public void meth287() { }
+    public void meth288() { }
+    public void meth289() { }
+    public void meth290() { }
+    public void meth291() { }
+    public void meth292() { }
+    public void meth293() { }
+    public void meth294() { }
+    public void meth295() { }
+    public void meth296() { }
+    public void meth297() { }
+    public void meth298() { }
+    public void meth299() { }
+    public void meth300() { }
+    public void meth301() { }
+    public void meth302() { }
+    public void meth303() { }
+    public void meth304() { }
+    public void meth305() { }
+    public void meth306() { }
+    public void meth307() { }
+    public void meth308() { }
+    public void meth309() { }
+    public void meth310() { }
+    public void meth311() { }
+    public void meth312() { }
+    public void meth313() { }
+    public void meth314() { }
+    public void meth315() { }
+    public void meth316() { }
+    public void meth317() { }
+    public void meth318() { }
+    public void meth319() { }
+    public void meth320() { }
+    public void meth321() { }
+    public void meth322() { }
+    public void meth323() { }
+    public void meth324() { }
+    public void meth325() { }
+    public void meth326() { }
+    public void meth327() { }
+    public void meth328() { }
+    public void meth329() { }
+    public void meth330() { }
+    public void meth331() { }
+    public void meth332() { }
+    public void meth333() { }
+    public void meth334() { }
+    public void meth335() { }
+    public void meth336() { }
+    public void meth337() { }
+    public void meth338() { }
+    public void meth339() { }
+    public void meth340() { }
+    public void meth341() { }
+    public void meth342() { }
+    public void meth343() { }
+    public void meth344() { }
+    public void meth345() { }
+    public void meth346() { }
+    public void meth347() { }
+    public void meth348() { }
+    public void meth349() { }
+    public void meth350() { }
+    public void meth351() { }
+    public void meth352() { }
+    public void meth353() { }
+    public void meth354() { }
+    public void meth355() { }
+    public void meth356() { }
+    public void meth357() { }
+    public void meth358() { }
+    public void meth359() { }
+    public void meth360() { }
+    public void meth361() { }
+    public void meth362() { }
+    public void meth363() { }
+    public void meth364() { }
+    public void meth365() { }
+    public void meth366() { }
+    public void meth367() { }
+    public void meth368() { }
+    public void meth369() { }
+    public void meth370() { }
+    public void meth371() { }
+    public void meth372() { }
+    public void meth373() { }
+    public void meth374() { }
+    public void meth375() { }
+    public void meth376() { }
+    public void meth377() { }
+    public void meth378() { }
+    public void meth379() { }
+    public void meth380() { }
+    public void meth381() { }
+    public void meth382() { }
+    public void meth383() { }
+    public void meth384() { }
+    public void meth385() { }
+    public void meth386() { }
+    public void meth387() { }
+    public void meth388() { }
+    public void meth389() { }
+    public void meth390() { }
+    public void meth391() { }
+    public void meth392() { }
+    public void meth393() { }
+    public void meth394() { }
+    public void meth395() { }
+    public void meth396() { }
+    public void meth397() { }
+    public void meth398() { }
+    public void meth399() { }
+    public void meth400() { }
+    public void meth401() { }
+    public void meth402() { }
+    public void meth403() { }
+    public void meth404() { }
+    public void meth405() { }
+    public void meth406() { }
+    public void meth407() { }
+    public void meth408() { }
+    public void meth409() { }
+    public void meth410() { }
+    public void meth411() { }
+    public void meth412() { }
+    public void meth413() { }
+    public void meth414() { }
+    public void meth415() { }
+    public void meth416() { }
+    public void meth417() { }
+    public void meth418() { }
+    public void meth419() { }
+    public void meth420() { }
+    public void meth421() { }
+    public void meth422() { }
+    public void meth423() { }
+    public void meth424() { }
+    public void meth425() { }
+    public void meth426() { }
+    public void meth427() { }
+    public void meth428() { }
+    public void meth429() { }
+    public void meth430() { }
+    public void meth431() { }
+    public void meth432() { }
+    public void meth433() { }
+    public void meth434() { }
+    public void meth435() { }
+    public void meth436() { }
+    public void meth437() { }
+    public void meth438() { }
+    public void meth439() { }
+    public void meth440() { }
+    public void meth441() { }
+    public void meth442() { }
+    public void meth443() { }
+    public void meth444() { }
+    public void meth445() { }
+    public void meth446() { }
+    public void meth447() { }
+    public void meth448() { }
+    public void meth449() { }
+    public void meth450() { }
+    public void meth451() { }
+    public void meth452() { }
+    public void meth453() { }
+    public void meth454() { }
+    public void meth455() { }
+    public void meth456() { }
+    public void meth457() { }
+    public void meth458() { }
+    public void meth459() { }
+    public void meth460() { }
+    public void meth461() { }
+    public void meth462() { }
+    public void meth463() { }
+    public void meth464() { }
+    public void meth465() { }
+    public void meth466() { }
+    public void meth467() { }
+    public void meth468() { }
+    public void meth469() { }
+    public void meth470() { }
+    public void meth471() { }
+    public void meth472() { }
+    public void meth473() { }
+    public void meth474() { }
+    public void meth475() { }
+    public void meth476() { }
+    public void meth477() { }
+    public void meth478() { }
+    public void meth479() { }
+    public void meth480() { }
+    public void meth481() { }
+    public void meth482() { }
+    public void meth483() { }
+    public void meth484() { }
+    public void meth485() { }
+    public void meth486() { }
+    public void meth487() { }
+    public void meth488() { }
+    public void meth489() { }
+    public void meth490() { }
+    public void meth491() { }
+    public void meth492() { }
+    public void meth493() { }
+    public void meth494() { }
+    public void meth495() { }
+    public void meth496() { }
+    public void meth497() { }
+    public void meth498() { }
+    public void meth499() { }
+    public void meth500() { }
+    public void meth501() { }
+    public void meth502() { }
+    public void meth503() { }
+    public void meth504() { }
+    public void meth505() { }
+    public void meth506() { }
+    public void meth507() { }
+    public void meth508() { }
+    public void meth509() { }
+    public void meth510() { }
+    public void meth511() { }
+    public void meth512() { }
+    public void meth513() { }
+    public void meth514() { }
+    public void meth515() { }
+    public void meth516() { }
+    public void meth517() { }
+    public void meth518() { }
+    public void meth519() { }
+    public void meth520() { }
+    public void meth521() { }
+    public void meth522() { }
+    public void meth523() { }
+    public void meth524() { }
+    public void meth525() { }
+    public void meth526() { }
+    public void meth527() { }
+    public void meth528() { }
+    public void meth529() { }
+    public void meth530() { }
+    public void meth531() { }
+    public void meth532() { }
+    public void meth533() { }
+    public void meth534() { }
+    public void meth535() { }
+    public void meth536() { }
+    public void meth537() { }
+    public void meth538() { }
+    public void meth539() { }
+    public void meth540() { }
+    public void meth541() { }
+    public void meth542() { }
+    public void meth543() { }
+    public void meth544() { }
+    public void meth545() { }
+    public void meth546() { }
+    public void meth547() { }
+    public void meth548() { }
+    public void meth549() { }
+    public void meth550() { }
+    public void meth551() { }
+    public void meth552() { }
+    public void meth553() { }
+    public void meth554() { }
+    public void meth555() { }
+    public void meth556() { }
+    public void meth557() { }
+    public void meth558() { }
+    public void meth559() { }
+    public void meth560() { }
+    public void meth561() { }
+    public void meth562() { }
+    public void meth563() { }
+    public void meth564() { }
+    public void meth565() { }
+    public void meth566() { }
+    public void meth567() { }
+    public void meth568() { }
+    public void meth569() { }
+    public void meth570() { }
+    public void meth571() { }
+    public void meth572() { }
+    public void meth573() { }
+    public void meth574() { }
+    public void meth575() { }
+    public void meth576() { }
+    public void meth577() { }
+    public void meth578() { }
+    public void meth579() { }
+    public void meth580() { }
+    public void meth581() { }
+    public void meth582() { }
+    public void meth583() { }
+    public void meth584() { }
+    public void meth585() { }
+    public void meth586() { }
+    public void meth587() { }
+    public void meth588() { }
+    public void meth589() { }
+    public void meth590() { }
+    public void meth591() { }
+    public void meth592() { }
+    public void meth593() { }
+    public void meth594() { }
+    public void meth595() { }
+    public void meth596() { }
+    public void meth597() { }
+    public void meth598() { }
+    public void meth599() { }
+    public void meth600() { }
+    public void meth601() { }
+    public void meth602() { }
+    public void meth603() { }
+    public void meth604() { }
+    public void meth605() { }
+    public void meth606() { }
+    public void meth607() { }
+    public void meth608() { }
+    public void meth609() { }
+    public void meth610() { }
+    public void meth611() { }
+    public void meth612() { }
+    public void meth613() { }
+    public void meth614() { }
+    public void meth615() { }
+    public void meth616() { }
+    public void meth617() { }
+    public void meth618() { }
+    public void meth619() { }
+    public void meth620() { }
+    public void meth621() { }
+    public void meth622() { }
+    public void meth623() { }
+    public void meth624() { }
+    public void meth625() { }
+    public void meth626() { }
+    public void meth627() { }
+    public void meth628() { }
+    public void meth629() { }
+    public void meth630() { }
+    public void meth631() { }
+    public void meth632() { }
+    public void meth633() { }
+    public void meth634() { }
+    public void meth635() { }
+    public void meth636() { }
+    public void meth637() { }
+    public void meth638() { }
+    public void meth639() { }
+    public void meth640() { }
+    public void meth641() { }
+    public void meth642() { }
+    public void meth643() { }
+    public void meth644() { }
+    public void meth645() { }
+    public void meth646() { }
+    public void meth647() { }
+    public void meth648() { }
+    public void meth649() { }
+    public void meth650() { }
+    public void meth651() { }
+    public void meth652() { }
+    public void meth653() { }
+    public void meth654() { }
+    public void meth655() { }
+    public void meth656() { }
+    public void meth657() { }
+    public void meth658() { }
+    public void meth659() { }
+    public void meth660() { }
+    public void meth661() { }
+    public void meth662() { }
+    public void meth663() { }
+    public void meth664() { }
+    public void meth665() { }
+    public void meth666() { }
+    public void meth667() { }
+    public void meth668() { }
+    public void meth669() { }
+    public void meth670() { }
+    public void meth671() { }
+    public void meth672() { }
+    public void meth673() { }
+    public void meth674() { }
+    public void meth675() { }
+    public void meth676() { }
+    public void meth677() { }
+    public void meth678() { }
+    public void meth679() { }
+    public void meth680() { }
+    public void meth681() { }
+    public void meth682() { }
+    public void meth683() { }
+    public void meth684() { }
+    public void meth685() { }
+    public void meth686() { }
+    public void meth687() { }
+    public void meth688() { }
+    public void meth689() { }
+    public void meth690() { }
+    public void meth691() { }
+    public void meth692() { }
+    public void meth693() { }
+    public void meth694() { }
+    public void meth695() { }
+    public void meth696() { }
+    public void meth697() { }
+    public void meth698() { }
+    public void meth699() { }
+    public void meth700() { }
+    public void meth701() { }
+    public void meth702() { }
+    public void meth703() { }
+    public void meth704() { }
+    public void meth705() { }
+    public void meth706() { }
+    public void meth707() { }
+    public void meth708() { }
+    public void meth709() { }
+    public void meth710() { }
+    public void meth711() { }
+    public void meth712() { }
+    public void meth713() { }
+    public void meth714() { }
+    public void meth715() { }
+    public void meth716() { }
+    public void meth717() { }
+    public void meth718() { }
+    public void meth719() { }
+    public void meth720() { }
+    public void meth721() { }
+    public void meth722() { }
+    public void meth723() { }
+    public void meth724() { }
+    public void meth725() { }
+    public void meth726() { }
+    public void meth727() { }
+    public void meth728() { }
+    public void meth729() { }
+    public void meth730() { }
+    public void meth731() { }
+    public void meth732() { }
+    public void meth733() { }
+    public void meth734() { }
+    public void meth735() { }
+    public void meth736() { }
+    public void meth737() { }
+    public void meth738() { }
+    public void meth739() { }
+    public void meth740() { }
+    public void meth741() { }
+    public void meth742() { }
+    public void meth743() { }
+    public void meth744() { }
+    public void meth745() { }
+    public void meth746() { }
+    public void meth747() { }
+    public void meth748() { }
+    public void meth749() { }
+    public void meth750() { }
+    public void meth751() { }
+    public void meth752() { }
+    public void meth753() { }
+    public void meth754() { }
+    public void meth755() { }
+    public void meth756() { }
+    public void meth757() { }
+    public void meth758() { }
+    public void meth759() { }
+    public void meth760() { }
+    public void meth761() { }
+    public void meth762() { }
+    public void meth763() { }
+    public void meth764() { }
+    public void meth765() { }
+    public void meth766() { }
+    public void meth767() { }
+    public void meth768() { }
+    public void meth769() { }
+    public void meth770() { }
+    public void meth771() { }
+    public void meth772() { }
+    public void meth773() { }
+    public void meth774() { }
+    public void meth775() { }
+    public void meth776() { }
+    public void meth777() { }
+    public void meth778() { }
+    public void meth779() { }
+    public void meth780() { }
+    public void meth781() { }
+    public void meth782() { }
+    public void meth783() { }
+    public void meth784() { }
+    public void meth785() { }
+    public void meth786() { }
+    public void meth787() { }
+    public void meth788() { }
+    public void meth789() { }
+    public void meth790() { }
+    public void meth791() { }
+    public void meth792() { }
+    public void meth793() { }
+    public void meth794() { }
+    public void meth795() { }
+    public void meth796() { }
+    public void meth797() { }
+    public void meth798() { }
+    public void meth799() { }
+    public void meth800() { }
+    public void meth801() { }
+    public void meth802() { }
+    public void meth803() { }
+    public void meth804() { }
+    public void meth805() { }
+    public void meth806() { }
+    public void meth807() { }
+    public void meth808() { }
+    public void meth809() { }
+    public void meth810() { }
+    public void meth811() { }
+    public void meth812() { }
+    public void meth813() { }
+    public void meth814() { }
+    public void meth815() { }
+    public void meth816() { }
+    public void meth817() { }
+    public void meth818() { }
+    public void meth819() { }
+    public void meth820() { }
+    public void meth821() { }
+    public void meth822() { }
+    public void meth823() { }
+    public void meth824() { }
+    public void meth825() { }
+    public void meth826() { }
+    public void meth827() { }
+    public void meth828() { }
+    public void meth829() { }
+    public void meth830() { }
+    public void meth831() { }
+    public void meth832() { }
+    public void meth833() { }
+    public void meth834() { }
+    public void meth835() { }
+    public void meth836() { }
+    public void meth837() { }
+    public void meth838() { }
+    public void meth839() { }
+    public void meth840() { }
+    public void meth841() { }
+    public void meth842() { }
+    public void meth843() { }
+    public void meth844() { }
+    public void meth845() { }
+    public void meth846() { }
+    public void meth847() { }
+    public void meth848() { }
+    public void meth849() { }
+    public void meth850() { }
+    public void meth851() { }
+    public void meth852() { }
+    public void meth853() { }
+    public void meth854() { }
+    public void meth855() { }
+    public void meth856() { }
+    public void meth857() { }
+    public void meth858() { }
+    public void meth859() { }
+    public void meth860() { }
+    public void meth861() { }
+    public void meth862() { }
+    public void meth863() { }
+    public void meth864() { }
+    public void meth865() { }
+    public void meth866() { }
+    public void meth867() { }
+    public void meth868() { }
+    public void meth869() { }
+    public void meth870() { }
+    public void meth871() { }
+    public void meth872() { }
+    public void meth873() { }
+    public void meth874() { }
+    public void meth875() { }
+    public void meth876() { }
+    public void meth877() { }
+    public void meth878() { }
+    public void meth879() { }
+    public void meth880() { }
+    public void meth881() { }
+    public void meth882() { }
+    public void meth883() { }
+    public void meth884() { }
+    public void meth885() { }
+    public void meth886() { }
+    public void meth887() { }
+    public void meth888() { }
+    public void meth889() { }
+    public void meth890() { }
+    public void meth891() { }
+    public void meth892() { }
+    public void meth893() { }
+    public void meth894() { }
+    public void meth895() { }
+    public void meth896() { }
+    public void meth897() { }
+    public void meth898() { }
+    public void meth899() { }
+    public void meth900() { }
+    public void meth901() { }
+    public void meth902() { }
+    public void meth903() { }
+    public void meth904() { }
+    public void meth905() { }
+    public void meth906() { }
+    public void meth907() { }
+    public void meth908() { }
+    public void meth909() { }
+    public void meth910() { }
+    public void meth911() { }
+    public void meth912() { }
+    public void meth913() { }
+    public void meth914() { }
+    public void meth915() { }
+    public void meth916() { }
+    public void meth917() { }
+    public void meth918() { }
+    public void meth919() { }
+    public void meth920() { }
+    public void meth921() { }
+    public void meth922() { }
+    public void meth923() { }
+    public void meth924() { }
+    public void meth925() { }
+    public void meth926() { }
+    public void meth927() { }
+    public void meth928() { }
+    public void meth929() { }
+    public void meth930() { }
+    public void meth931() { }
+    public void meth932() { }
+    public void meth933() { }
+    public void meth934() { }
+    public void meth935() { }
+    public void meth936() { }
+    public void meth937() { }
+    public void meth938() { }
+    public void meth939() { }
+    public void meth940() { }
+    public void meth941() { }
+    public void meth942() { }
+    public void meth943() { }
+    public void meth944() { }
+    public void meth945() { }
+    public void meth946() { }
+    public void meth947() { }
+    public void meth948() { }
+    public void meth949() { }
+    public void meth950() { }
+    public void meth951() { }
+    public void meth952() { }
+    public void meth953() { }
+    public void meth954() { }
+    public void meth955() { }
+    public void meth956() { }
+    public void meth957() { }
+    public void meth958() { }
+    public void meth959() { }
+    public void meth960() { }
+    public void meth961() { }
+    public void meth962() { }
+    public void meth963() { }
+    public void meth964() { }
+    public void meth965() { }
+    public void meth966() { }
+    public void meth967() { }
+    public void meth968() { }
+    public void meth969() { }
+    public void meth970() { }
+    public void meth971() { }
+    public void meth972() { }
+    public void meth973() { }
+    public void meth974() { }
+    public void meth975() { }
+    public void meth976() { }
+    public void meth977() { }
+    public void meth978() { }
+    public void meth979() { }
+    public void meth980() { }
+    public void meth981() { }
+    public void meth982() { }
+    public void meth983() { }
+    public void meth984() { }
+    public void meth985() { }
+    public void meth986() { }
+    public void meth987() { }
+    public void meth988() { }
+    public void meth989() { }
+    public void meth990() { }
+    public void meth991() { }
+    public void meth992() { }
+    public void meth993() { }
+    public void meth994() { }
+    public void meth995() { }
+    public void meth996() { }
+    public void meth997() { }
+    public void meth998() { }
+    public void meth999() { }
+    public void meth1000() { }
+    public void meth1001() { }
+    public void meth1002() { }
+    public void meth1003() { }
+    public void meth1004() { }
+    public void meth1005() { }
+    public void meth1006() { }
+    public void meth1007() { }
+    public void meth1008() { }
+    public void meth1009() { }
+    public void meth1010() { }
+    public void meth1011() { }
+    public void meth1012() { }
+    public void meth1013() { }
+    public void meth1014() { }
+    public void meth1015() { }
+    public void meth1016() { }
+    public void meth1017() { }
+    public void meth1018() { }
+    public void meth1019() { }
+    public void meth1020() { }
+    public void meth1021() { }
+    public void meth1022() { }
+    public void meth1023() { }
+    public void meth1024() { }
+    public void meth1025() { }
+    public void meth1026() { }
+    public void meth1027() { }
+    public void meth1028() { }
+    public void meth1029() { }
+    public void meth1030() { }
+    public void meth1031() { }
+    public void meth1032() { }
+    public void meth1033() { }
+    public void meth1034() { }
+    public void meth1035() { }
+    public void meth1036() { }
+    public void meth1037() { }
+    public void meth1038() { }
+    public void meth1039() { }
+    public void meth1040() { }
+    public void meth1041() { }
+    public void meth1042() { }
+    public void meth1043() { }
+    public void meth1044() { }
+    public void meth1045() { }
+    public void meth1046() { }
+    public void meth1047() { }
+    public void meth1048() { }
+    public void meth1049() { }
+    public void meth1050() { }
+    public void meth1051() { }
+    public void meth1052() { }
+    public void meth1053() { }
+    public void meth1054() { }
+    public void meth1055() { }
+    public void meth1056() { }
+    public void meth1057() { }
+    public void meth1058() { }
+    public void meth1059() { }
+    public void meth1060() { }
+    public void meth1061() { }
+    public void meth1062() { }
+    public void meth1063() { }
+    public void meth1064() { }
+    public void meth1065() { }
+    public void meth1066() { }
+    public void meth1067() { }
+    public void meth1068() { }
+    public void meth1069() { }
+    public void meth1070() { }
+    public void meth1071() { }
+    public void meth1072() { }
+    public void meth1073() { }
+    public void meth1074() { }
+    public void meth1075() { }
+    public void meth1076() { }
+    public void meth1077() { }
+    public void meth1078() { }
+    public void meth1079() { }
+    public void meth1080() { }
+    public void meth1081() { }
+    public void meth1082() { }
+    public void meth1083() { }
+    public void meth1084() { }
+    public void meth1085() { }
+    public void meth1086() { }
+    public void meth1087() { }
+    public void meth1088() { }
+    public void meth1089() { }
+    public void meth1090() { }
+    public void meth1091() { }
+    public void meth1092() { }
+    public void meth1093() { }
+    public void meth1094() { }
+    public void meth1095() { }
+    public void meth1096() { }
+    public void meth1097() { }
+    public void meth1098() { }
+    public void meth1099() { }
+    public void meth1100() { }
+    public void meth1101() { }
+    public void meth1102() { }
+    public void meth1103() { }
+    public void meth1104() { }
+    public void meth1105() { }
+    public void meth1106() { }
+    public void meth1107() { }
+    public void meth1108() { }
+    public void meth1109() { }
+    public void meth1110() { }
+    public void meth1111() { }
+    public void meth1112() { }
+    public void meth1113() { }
+    public void meth1114() { }
+    public void meth1115() { }
+    public void meth1116() { }
+    public void meth1117() { }
+    public void meth1118() { }
+    public void meth1119() { }
+    public void meth1120() { }
+    public void meth1121() { }
+    public void meth1122() { }
+    public void meth1123() { }
+    public void meth1124() { }
+    public void meth1125() { }
+    public void meth1126() { }
+    public void meth1127() { }
+    public void meth1128() { }
+    public void meth1129() { }
+    public void meth1130() { }
+    public void meth1131() { }
+    public void meth1132() { }
+    public void meth1133() { }
+    public void meth1134() { }
+    public void meth1135() { }
+    public void meth1136() { }
+    public void meth1137() { }
+    public void meth1138() { }
+    public void meth1139() { }
+    public void meth1140() { }
+    public void meth1141() { }
+    public void meth1142() { }
+    public void meth1143() { }
+    public void meth1144() { }
+    public void meth1145() { }
+    public void meth1146() { }
+    public void meth1147() { }
+    public void meth1148() { }
+    public void meth1149() { }
+    public void meth1150() { }
+    public void meth1151() { }
+    public void meth1152() { }
+    public void meth1153() { }
+    public void meth1154() { }
+    public void meth1155() { }
+    public void meth1156() { }
+    public void meth1157() { }
+    public void meth1158() { }
+    public void meth1159() { }
+    public void meth1160() { }
+    public void meth1161() { }
+    public void meth1162() { }
+    public void meth1163() { }
+    public void meth1164() { }
+    public void meth1165() { }
+    public void meth1166() { }
+    public void meth1167() { }
+    public void meth1168() { }
+    public void meth1169() { }
+    public void meth1170() { }
+    public void meth1171() { }
+    public void meth1172() { }
+    public void meth1173() { }
+    public void meth1174() { }
+    public void meth1175() { }
+    public void meth1176() { }
+    public void meth1177() { }
+    public void meth1178() { }
+    public void meth1179() { }
+    public void meth1180() { }
+    public void meth1181() { }
+    public void meth1182() { }
+    public void meth1183() { }
+    public void meth1184() { }
+    public void meth1185() { }
+    public void meth1186() { }
+    public void meth1187() { }
+    public void meth1188() { }
+    public void meth1189() { }
+    public void meth1190() { }
+    public void meth1191() { }
+    public void meth1192() { }
+    public void meth1193() { }
+    public void meth1194() { }
+    public void meth1195() { }
+    public void meth1196() { }
+    public void meth1197() { }
+    public void meth1198() { }
+    public void meth1199() { }
+    public void meth1200() { }
+    public void meth1201() { }
+    public void meth1202() { }
+    public void meth1203() { }
+    public void meth1204() { }
+    public void meth1205() { }
+    public void meth1206() { }
+    public void meth1207() { }
+    public void meth1208() { }
+    public void meth1209() { }
+    public void meth1210() { }
+    public void meth1211() { }
+    public void meth1212() { }
+    public void meth1213() { }
+    public void meth1214() { }
+    public void meth1215() { }
+    public void meth1216() { }
+    public void meth1217() { }
+    public void meth1218() { }
+    public void meth1219() { }
+    public void meth1220() { }
+    public void meth1221() { }
+    public void meth1222() { }
+    public void meth1223() { }
+    public void meth1224() { }
+    public void meth1225() { }
+    public void meth1226() { }
+    public void meth1227() { }
+    public void meth1228() { }
+    public void meth1229() { }
+    public void meth1230() { }
+    public void meth1231() { }
+    public void meth1232() { }
+    public void meth1233() { }
+    public void meth1234() { }
+    public void meth1235() { }
+    public void meth1236() { }
+    public void meth1237() { }
+    public void meth1238() { }
+    public void meth1239() { }
+    public void meth1240() { }
+    public void meth1241() { }
+    public void meth1242() { }
+    public void meth1243() { }
+    public void meth1244() { }
+    public void meth1245() { }
+    public void meth1246() { }
+    public void meth1247() { }
+    public void meth1248() { }
+    public void meth1249() { }
+    public void meth1250() { }
+    public void meth1251() { }
+    public void meth1252() { }
+    public void meth1253() { }
+    public void meth1254() { }
+    public void meth1255() { }
+    public void meth1256() { }
+    public void meth1257() { }
+    public void meth1258() { }
+    public void meth1259() { }
+    public void meth1260() { }
+    public void meth1261() { }
+    public void meth1262() { }
+    public void meth1263() { }
+    public void meth1264() { }
+    public void meth1265() { }
+    public void meth1266() { }
+    public void meth1267() { }
+    public void meth1268() { }
+    public void meth1269() { }
+    public void meth1270() { }
+    public void meth1271() { }
+    public void meth1272() { }
+    public void meth1273() { }
+    public void meth1274() { }
+    public void meth1275() { }
+    public void meth1276() { }
+    public void meth1277() { }
+    public void meth1278() { }
+    public void meth1279() { }
+    public void meth1280() { }
+    public void meth1281() { }
+    public void meth1282() { }
+    public void meth1283() { }
+    public void meth1284() { }
+    public void meth1285() { }
+    public void meth1286() { }
+    public void meth1287() { }
+    public void meth1288() { }
+    public void meth1289() { }
+    public void meth1290() { }
+    public void meth1291() { }
+    public void meth1292() { }
+    public void meth1293() { }
+    public void meth1294() { }
+    public void meth1295() { }
+    public void meth1296() { }
+    public void meth1297() { }
+    public void meth1298() { }
+    public void meth1299() { }
+    public void meth1300() { }
+    public void meth1301() { }
+    public void meth1302() { }
+    public void meth1303() { }
+    public void meth1304() { }
+    public void meth1305() { }
+    public void meth1306() { }
+    public void meth1307() { }
+    public void meth1308() { }
+    public void meth1309() { }
+    public void meth1310() { }
+    public void meth1311() { }
+    public void meth1312() { }
+    public void meth1313() { }
+    public void meth1314() { }
+    public void meth1315() { }
+    public void meth1316() { }
+    public void meth1317() { }
+    public void meth1318() { }
+    public void meth1319() { }
+    public void meth1320() { }
+    public void meth1321() { }
+    public void meth1322() { }
+    public void meth1323() { }
+    public void meth1324() { }
+    public void meth1325() { }
+    public void meth1326() { }
+    public void meth1327() { }
+    public void meth1328() { }
+    public void meth1329() { }
+    public void meth1330() { }
+    public void meth1331() { }
+    public void meth1332() { }
+    public void meth1333() { }
+    public void meth1334() { }
+    public void meth1335() { }
+    public void meth1336() { }
+    public void meth1337() { }
+    public void meth1338() { }
+    public void meth1339() { }
+    public void meth1340() { }
+    public void meth1341() { }
+    public void meth1342() { }
+    public void meth1343() { }
+    public void meth1344() { }
+    public void meth1345() { }
+    public void meth1346() { }
+    public void meth1347() { }
+    public void meth1348() { }
+    public void meth1349() { }
+    public void meth1350() { }
+    public void meth1351() { }
+    public void meth1352() { }
+    public void meth1353() { }
+    public void meth1354() { }
+    public void meth1355() { }
+    public void meth1356() { }
+    public void meth1357() { }
+    public void meth1358() { }
+    public void meth1359() { }
+    public void meth1360() { }
+    public void meth1361() { }
+    public void meth1362() { }
+    public void meth1363() { }
+    public void meth1364() { }
+    public void meth1365() { }
+    public void meth1366() { }
+    public void meth1367() { }
+    public void meth1368() { }
+    public void meth1369() { }
+    public void meth1370() { }
+    public void meth1371() { }
+    public void meth1372() { }
+    public void meth1373() { }
+    public void meth1374() { }
+    public void meth1375() { }
+    public void meth1376() { }
+    public void meth1377() { }
+    public void meth1378() { }
+    public void meth1379() { }
+    public void meth1380() { }
+    public void meth1381() { }
+    public void meth1382() { }
+    public void meth1383() { }
+    public void meth1384() { }
+    public void meth1385() { }
+    public void meth1386() { }
+    public void meth1387() { }
+    public void meth1388() { }
+    public void meth1389() { }
+    public void meth1390() { }
+    public void meth1391() { }
+    public void meth1392() { }
+    public void meth1393() { }
+    public void meth1394() { }
+    public void meth1395() { }
+    public void meth1396() { }
+    public void meth1397() { }
+    public void meth1398() { }
+    public void meth1399() { }
+    public void meth1400() { }
+    public void meth1401() { }
+    public void meth1402() { }
+    public void meth1403() { }
+    public void meth1404() { }
+    public void meth1405() { }
+    public void meth1406() { }
+    public void meth1407() { }
+    public void meth1408() { }
+    public void meth1409() { }
+    public void meth1410() { }
+    public void meth1411() { }
+    public void meth1412() { }
+    public void meth1413() { }
+    public void meth1414() { }
+    public void meth1415() { }
+    public void meth1416() { }
+    public void meth1417() { }
+    public void meth1418() { }
+    public void meth1419() { }
+    public void meth1420() { }
+    public void meth1421() { }
+    public void meth1422() { }
+    public void meth1423() { }
+    public void meth1424() { }
+    public void meth1425() { }
+    public void meth1426() { }
+    public void meth1427() { }
+    public void meth1428() { }
+    public void meth1429() { }
+    public void meth1430() { }
+    public void meth1431() { }
+    public void meth1432() { }
+    public void meth1433() { }
+    public void meth1434() { }
+    public void meth1435() { }
+    public void meth1436() { }
+    public void meth1437() { }
+    public void meth1438() { }
+    public void meth1439() { }
+    public void meth1440() { }
+    public void meth1441() { }
+    public void meth1442() { }
+    public void meth1443() { }
+    public void meth1444() { }
+    public void meth1445() { }
+    public void meth1446() { }
+    public void meth1447() { }
+    public void meth1448() { }
+    public void meth1449() { }
+    public void meth1450() { }
+    public void meth1451() { }
+    public void meth1452() { }
+    public void meth1453() { }
+    public void meth1454() { }
+    public void meth1455() { }
+    public void meth1456() { }
+    public void meth1457() { }
+    public void meth1458() { }
+    public void meth1459() { }
+    public void meth1460() { }
+    public void meth1461() { }
+    public void meth1462() { }
+    public void meth1463() { }
+    public void meth1464() { }
+    public void meth1465() { }
+    public void meth1466() { }
+    public void meth1467() { }
+    public void meth1468() { }
+    public void meth1469() { }
+    public void meth1470() { }
+    public void meth1471() { }
+    public void meth1472() { }
+    public void meth1473() { }
+    public void meth1474() { }
+    public void meth1475() { }
+    public void meth1476() { }
+    public void meth1477() { }
+    public void meth1478() { }
+    public void meth1479() { }
+    public void meth1480() { }
+    public void meth1481() { }
+    public void meth1482() { }
+    public void meth1483() { }
+    public void meth1484() { }
+    public void meth1485() { }
+    public void meth1486() { }
+    public void meth1487() { }
+    public void meth1488() { }
+    public void meth1489() { }
+    public void meth1490() { }
+    public void meth1491() { }
+    public void meth1492() { }
+    public void meth1493() { }
+    public void meth1494() { }
+    public void meth1495() { }
+    public void meth1496() { }
+    public void meth1497() { }
+    public void meth1498() { }
+    public void meth1499() { }
+    public void meth1500() { }
+    public void meth1501() { }
+    public void meth1502() { }
+    public void meth1503() { }
+    public void meth1504() { }
+    public void meth1505() { }
+    public void meth1506() { }
+    public void meth1507() { }
+    public void meth1508() { }
+    public void meth1509() { }
+    public void meth1510() { }
+    public void meth1511() { }
+    public void meth1512() { }
+    public void meth1513() { }
+    public void meth1514() { }
+    public void meth1515() { }
+    public void meth1516() { }
+    public void meth1517() { }
+    public void meth1518() { }
+    public void meth1519() { }
+    public void meth1520() { }
+    public void meth1521() { }
+    public void meth1522() { }
+    public void meth1523() { }
+    public void meth1524() { }
+    public void meth1525() { }
+    public void meth1526() { }
+    public void meth1527() { }
+    public void meth1528() { }
+    public void meth1529() { }
+    public void meth1530() { }
+    public void meth1531() { }
+    public void meth1532() { }
+    public void meth1533() { }
+    public void meth1534() { }
+    public void meth1535() { }
+    public void meth1536() { }
+    public void meth1537() { }
+    public void meth1538() { }
+    public void meth1539() { }
+    public void meth1540() { }
+    public void meth1541() { }
+    public void meth1542() { }
+    public void meth1543() { }
+    public void meth1544() { }
+    public void meth1545() { }
+    public void meth1546() { }
+    public void meth1547() { }
+    public void meth1548() { }
+    public void meth1549() { }
+    public void meth1550() { }
+    public void meth1551() { }
+    public void meth1552() { }
+    public void meth1553() { }
+    public void meth1554() { }
+    public void meth1555() { }
+    public void meth1556() { }
+    public void meth1557() { }
+    public void meth1558() { }
+    public void meth1559() { }
+    public void meth1560() { }
+    public void meth1561() { }
+    public void meth1562() { }
+    public void meth1563() { }
+    public void meth1564() { }
+    public void meth1565() { }
+    public void meth1566() { }
+    public void meth1567() { }
+    public void meth1568() { }
+    public void meth1569() { }
+    public void meth1570() { }
+    public void meth1571() { }
+    public void meth1572() { }
+    public void meth1573() { }
+    public void meth1574() { }
+    public void meth1575() { }
+    public void meth1576() { }
+    public void meth1577() { }
+    public void meth1578() { }
+    public void meth1579() { }
+    public void meth1580() { }
+    public void meth1581() { }
+    public void meth1582() { }
+    public void meth1583() { }
+    public void meth1584() { }
+    public void meth1585() { }
+    public void meth1586() { }
+    public void meth1587() { }
+    public void meth1588() { }
+    public void meth1589() { }
+    public void meth1590() { }
+    public void meth1591() { }
+    public void meth1592() { }
+    public void meth1593() { }
+    public void meth1594() { }
+    public void meth1595() { }
+    public void meth1596() { }
+    public void meth1597() { }
+    public void meth1598() { }
+    public void meth1599() { }
+    public void meth1600() { }
+    public void meth1601() { }
+    public void meth1602() { }
+    public void meth1603() { }
+    public void meth1604() { }
+    public void meth1605() { }
+    public void meth1606() { }
+    public void meth1607() { }
+    public void meth1608() { }
+    public void meth1609() { }
+    public void meth1610() { }
+    public void meth1611() { }
+    public void meth1612() { }
+    public void meth1613() { }
+    public void meth1614() { }
+    public void meth1615() { }
+    public void meth1616() { }
+    public void meth1617() { }
+    public void meth1618() { }
+    public void meth1619() { }
+    public void meth1620() { }
+    public void meth1621() { }
+    public void meth1622() { }
+    public void meth1623() { }
+    public void meth1624() { }
+    public void meth1625() { }
+    public void meth1626() { }
+    public void meth1627() { }
+    public void meth1628() { }
+    public void meth1629() { }
+    public void meth1630() { }
+    public void meth1631() { }
+    public void meth1632() { }
+    public void meth1633() { }
+    public void meth1634() { }
+    public void meth1635() { }
+    public void meth1636() { }
+    public void meth1637() { }
+    public void meth1638() { }
+    public void meth1639() { }
+    public void meth1640() { }
+    public void meth1641() { }
+    public void meth1642() { }
+    public void meth1643() { }
+    public void meth1644() { }
+    public void meth1645() { }
+    public void meth1646() { }
+    public void meth1647() { }
+    public void meth1648() { }
+    public void meth1649() { }
+    public void meth1650() { }
+    public void meth1651() { }
+    public void meth1652() { }
+    public void meth1653() { }
+    public void meth1654() { }
+    public void meth1655() { }
+    public void meth1656() { }
+    public void meth1657() { }
+    public void meth1658() { }
+    public void meth1659() { }
+    public void meth1660() { }
+    public void meth1661() { }
+    public void meth1662() { }
+    public void meth1663() { }
+    public void meth1664() { }
+    public void meth1665() { }
+    public void meth1666() { }
+    public void meth1667() { }
+    public void meth1668() { }
+    public void meth1669() { }
+    public void meth1670() { }
+    public void meth1671() { }
+    public void meth1672() { }
+    public void meth1673() { }
+    public void meth1674() { }
+    public void meth1675() { }
+    public void meth1676() { }
+    public void meth1677() { }
+    public void meth1678() { }
+    public void meth1679() { }
+    public void meth1680() { }
+    public void meth1681() { }
+    public void meth1682() { }
+    public void meth1683() { }
+    public void meth1684() { }
+    public void meth1685() { }
+    public void meth1686() { }
+    public void meth1687() { }
+    public void meth1688() { }
+    public void meth1689() { }
+    public void meth1690() { }
+    public void meth1691() { }
+    public void meth1692() { }
+    public void meth1693() { }
+    public void meth1694() { }
+    public void meth1695() { }
+    public void meth1696() { }
+    public void meth1697() { }
+    public void meth1698() { }
+    public void meth1699() { }
+    public void meth1700() { }
+    public void meth1701() { }
+    public void meth1702() { }
+    public void meth1703() { }
+    public void meth1704() { }
+    public void meth1705() { }
+    public void meth1706() { }
+    public void meth1707() { }
+    public void meth1708() { }
+    public void meth1709() { }
+    public void meth1710() { }
+    public void meth1711() { }
+    public void meth1712() { }
+    public void meth1713() { }
+    public void meth1714() { }
+    public void meth1715() { }
+    public void meth1716() { }
+    public void meth1717() { }
+    public void meth1718() { }
+    public void meth1719() { }
+    public void meth1720() { }
+    public void meth1721() { }
+    public void meth1722() { }
+    public void meth1723() { }
+    public void meth1724() { }
+    public void meth1725() { }
+    public void meth1726() { }
+    public void meth1727() { }
+    public void meth1728() { }
+    public void meth1729() { }
+    public void meth1730() { }
+    public void meth1731() { }
+    public void meth1732() { }
+    public void meth1733() { }
+    public void meth1734() { }
+    public void meth1735() { }
+    public void meth1736() { }
+    public void meth1737() { }
+    public void meth1738() { }
+    public void meth1739() { }
+    public void meth1740() { }
+    public void meth1741() { }
+    public void meth1742() { }
+    public void meth1743() { }
+    public void meth1744() { }
+    public void meth1745() { }
+    public void meth1746() { }
+    public void meth1747() { }
+    public void meth1748() { }
+    public void meth1749() { }
+    public void meth1750() { }
+    public void meth1751() { }
+    public void meth1752() { }
+    public void meth1753() { }
+    public void meth1754() { }
+    public void meth1755() { }
+    public void meth1756() { }
+    public void meth1757() { }
+    public void meth1758() { }
+    public void meth1759() { }
+    public void meth1760() { }
+    public void meth1761() { }
+    public void meth1762() { }
+    public void meth1763() { }
+    public void meth1764() { }
+    public void meth1765() { }
+    public void meth1766() { }
+    public void meth1767() { }
+    public void meth1768() { }
+    public void meth1769() { }
+    public void meth1770() { }
+    public void meth1771() { }
+    public void meth1772() { }
+    public void meth1773() { }
+    public void meth1774() { }
+    public void meth1775() { }
+    public void meth1776() { }
+    public void meth1777() { }
+    public void meth1778() { }
+    public void meth1779() { }
+    public void meth1780() { }
+    public void meth1781() { }
+    public void meth1782() { }
+    public void meth1783() { }
+    public void meth1784() { }
+    public void meth1785() { }
+    public void meth1786() { }
+    public void meth1787() { }
+    public void meth1788() { }
+    public void meth1789() { }
+    public void meth1790() { }
+    public void meth1791() { }
+    public void meth1792() { }
+    public void meth1793() { }
+    public void meth1794() { }
+    public void meth1795() { }
+    public void meth1796() { }
+    public void meth1797() { }
+    public void meth1798() { }
+    public void meth1799() { }
+    public void meth1800() { }
+    public void meth1801() { }
+    public void meth1802() { }
+    public void meth1803() { }
+    public void meth1804() { }
+    public void meth1805() { }
+    public void meth1806() { }
+    public void meth1807() { }
+    public void meth1808() { }
+    public void meth1809() { }
+    public void meth1810() { }
+    public void meth1811() { }
+    public void meth1812() { }
+    public void meth1813() { }
+    public void meth1814() { }
+    public void meth1815() { }
+    public void meth1816() { }
+    public void meth1817() { }
+    public void meth1818() { }
+    public void meth1819() { }
+    public void meth1820() { }
+    public void meth1821() { }
+    public void meth1822() { }
+    public void meth1823() { }
+    public void meth1824() { }
+    public void meth1825() { }
+    public void meth1826() { }
+    public void meth1827() { }
+    public void meth1828() { }
+    public void meth1829() { }
+    public void meth1830() { }
+    public void meth1831() { }
+    public void meth1832() { }
+    public void meth1833() { }
+    public void meth1834() { }
+    public void meth1835() { }
+    public void meth1836() { }
+    public void meth1837() { }
+    public void meth1838() { }
+    public void meth1839() { }
+    public void meth1840() { }
+    public void meth1841() { }
+    public void meth1842() { }
+    public void meth1843() { }
+    public void meth1844() { }
+    public void meth1845() { }
+    public void meth1846() { }
+    public void meth1847() { }
+    public void meth1848() { }
+    public void meth1849() { }
+    public void meth1850() { }
+    public void meth1851() { }
+    public void meth1852() { }
+    public void meth1853() { }
+    public void meth1854() { }
+    public void meth1855() { }
+    public void meth1856() { }
+    public void meth1857() { }
+    public void meth1858() { }
+    public void meth1859() { }
+    public void meth1860() { }
+    public void meth1861() { }
+    public void meth1862() { }
+    public void meth1863() { }
+    public void meth1864() { }
+    public void meth1865() { }
+    public void meth1866() { }
+    public void meth1867() { }
+    public void meth1868() { }
+    public void meth1869() { }
+    public void meth1870() { }
+    public void meth1871() { }
+    public void meth1872() { }
+    public void meth1873() { }
+    public void meth1874() { }
+    public void meth1875() { }
+    public void meth1876() { }
+    public void meth1877() { }
+    public void meth1878() { }
+    public void meth1879() { }
+    public void meth1880() { }
+    public void meth1881() { }
+    public void meth1882() { }
+    public void meth1883() { }
+    public void meth1884() { }
+    public void meth1885() { }
+    public void meth1886() { }
+    public void meth1887() { }
+    public void meth1888() { }
+    public void meth1889() { }
+    public void meth1890() { }
+    public void meth1891() { }
+    public void meth1892() { }
+    public void meth1893() { }
+    public void meth1894() { }
+    public void meth1895() { }
+    public void meth1896() { }
+    public void meth1897() { }
+    public void meth1898() { }
+    public void meth1899() { }
+    public void meth1900() { }
+    public void meth1901() { }
+    public void meth1902() { }
+    public void meth1903() { }
+    public void meth1904() { }
+    public void meth1905() { }
+    public void meth1906() { }
+    public void meth1907() { }
+    public void meth1908() { }
+    public void meth1909() { }
+    public void meth1910() { }
+    public void meth1911() { }
+    public void meth1912() { }
+    public void meth1913() { }
+    public void meth1914() { }
+    public void meth1915() { }
+    public void meth1916() { }
+    public void meth1917() { }
+    public void meth1918() { }
+    public void meth1919() { }
+    public void meth1920() { }
+    public void meth1921() { }
+    public void meth1922() { }
+    public void meth1923() { }
+    public void meth1924() { }
+    public void meth1925() { }
+    public void meth1926() { }
+    public void meth1927() { }
+    public void meth1928() { }
+    public void meth1929() { }
+    public void meth1930() { }
+    public void meth1931() { }
+    public void meth1932() { }
+    public void meth1933() { }
+    public void meth1934() { }
+    public void meth1935() { }
+    public void meth1936() { }
+    public void meth1937() { }
+    public void meth1938() { }
+    public void meth1939() { }
+    public void meth1940() { }
+    public void meth1941() { }
+    public void meth1942() { }
+    public void meth1943() { }
+    public void meth1944() { }
+    public void meth1945() { }
+    public void meth1946() { }
+    public void meth1947() { }
+    public void meth1948() { }
+    public void meth1949() { }
+    public void meth1950() { }
+    public void meth1951() { }
+    public void meth1952() { }
+    public void meth1953() { }
+    public void meth1954() { }
+    public void meth1955() { }
+    public void meth1956() { }
+    public void meth1957() { }
+    public void meth1958() { }
+    public void meth1959() { }
+    public void meth1960() { }
+    public void meth1961() { }
+    public void meth1962() { }
+    public void meth1963() { }
+    public void meth1964() { }
+    public void meth1965() { }
+    public void meth1966() { }
+    public void meth1967() { }
+    public void meth1968() { }
+    public void meth1969() { }
+    public void meth1970() { }
+    public void meth1971() { }
+    public void meth1972() { }
+    public void meth1973() { }
+    public void meth1974() { }
+    public void meth1975() { }
+    public void meth1976() { }
+    public void meth1977() { }
+    public void meth1978() { }
+    public void meth1979() { }
+    public void meth1980() { }
+    public void meth1981() { }
+    public void meth1982() { }
+    public void meth1983() { }
+    public void meth1984() { }
+    public void meth1985() { }
+    public void meth1986() { }
+    public void meth1987() { }
+    public void meth1988() { }
+    public void meth1989() { }
+    public void meth1990() { }
+    public void meth1991() { }
+    public void meth1992() { }
+    public void meth1993() { }
+    public void meth1994() { }
+    public void meth1995() { }
+    public void meth1996() { }
+    public void meth1997() { }
+    public void meth1998() { }
+    public void meth1999() { }
+    public void meth2000() { }
+    public void meth2001() { }
+    public void meth2002() { }
+    public void meth2003() { }
+    public void meth2004() { }
+    public void meth2005() { }
+    public void meth2006() { }
+    public void meth2007() { }
+    public void meth2008() { }
+    public void meth2009() { }
+    public void meth2010() { }
+    public void meth2011() { }
+    public void meth2012() { }
+    public void meth2013() { }
+    public void meth2014() { }
+    public void meth2015() { }
+    public void meth2016() { }
+    public void meth2017() { }
+    public void meth2018() { }
+    public void meth2019() { }
+    public void meth2020() { }
+    public void meth2021() { }
+    public void meth2022() { }
+    public void meth2023() { }
+    public void meth2024() { }
+    public void meth2025() { }
+    public void meth2026() { }
+    public void meth2027() { }
+    public void meth2028() { }
+    public void meth2029() { }
+    public void meth2030() { }
+    public void meth2031() { }
+    public void meth2032() { }
+    public void meth2033() { }
+    public void meth2034() { }
+    public void meth2035() { }
+    public void meth2036() { }
+    public void meth2037() { }
+    public void meth2038() { }
+    public void meth2039() { }
+    public void meth2040() { }
+    public void meth2041() { }
+    public void meth2042() { }
+    public void meth2043() { }
+    public void meth2044() { }
+    public void meth2045() { }
+    public void meth2046() { }
+    public void meth2047() { }
+    public void meth2048() { }
+    public void meth2049() { }
+    public void meth2050() { }
+    public void meth2051() { }
+    public void meth2052() { }
+    public void meth2053() { }
+    public void meth2054() { }
+    public void meth2055() { }
+    public void meth2056() { }
+    public void meth2057() { }
+    public void meth2058() { }
+    public void meth2059() { }
+    public void meth2060() { }
+    public void meth2061() { }
+    public void meth2062() { }
+    public void meth2063() { }
+    public void meth2064() { }
+    public void meth2065() { }
+    public void meth2066() { }
+    public void meth2067() { }
+    public void meth2068() { }
+    public void meth2069() { }
+    public void meth2070() { }
+    public void meth2071() { }
+    public void meth2072() { }
+    public void meth2073() { }
+    public void meth2074() { }
+    public void meth2075() { }
+    public void meth2076() { }
+    public void meth2077() { }
+    public void meth2078() { }
+    public void meth2079() { }
+    public void meth2080() { }
+    public void meth2081() { }
+    public void meth2082() { }
+    public void meth2083() { }
+    public void meth2084() { }
+    public void meth2085() { }
+    public void meth2086() { }
+    public void meth2087() { }
+    public void meth2088() { }
+    public void meth2089() { }
+    public void meth2090() { }
+    public void meth2091() { }
+    public void meth2092() { }
+    public void meth2093() { }
+    public void meth2094() { }
+    public void meth2095() { }
+    public void meth2096() { }
+    public void meth2097() { }
+    public void meth2098() { }
+    public void meth2099() { }
+    public void meth2100() { }
+    public void meth2101() { }
+    public void meth2102() { }
+    public void meth2103() { }
+    public void meth2104() { }
+    public void meth2105() { }
+    public void meth2106() { }
+    public void meth2107() { }
+    public void meth2108() { }
+    public void meth2109() { }
+    public void meth2110() { }
+    public void meth2111() { }
+    public void meth2112() { }
+    public void meth2113() { }
+    public void meth2114() { }
+    public void meth2115() { }
+    public void meth2116() { }
+    public void meth2117() { }
+    public void meth2118() { }
+    public void meth2119() { }
+    public void meth2120() { }
+    public void meth2121() { }
+    public void meth2122() { }
+    public void meth2123() { }
+    public void meth2124() { }
+    public void meth2125() { }
+    public void meth2126() { }
+    public void meth2127() { }
+    public void meth2128() { }
+    public void meth2129() { }
+    public void meth2130() { }
+    public void meth2131() { }
+    public void meth2132() { }
+    public void meth2133() { }
+    public void meth2134() { }
+    public void meth2135() { }
+    public void meth2136() { }
+    public void meth2137() { }
+    public void meth2138() { }
+    public void meth2139() { }
+    public void meth2140() { }
+    public void meth2141() { }
+    public void meth2142() { }
+    public void meth2143() { }
+    public void meth2144() { }
+    public void meth2145() { }
+    public void meth2146() { }
+    public void meth2147() { }
+    public void meth2148() { }
+    public void meth2149() { }
+    public void meth2150() { }
+    public void meth2151() { }
+    public void meth2152() { }
+    public void meth2153() { }
+    public void meth2154() { }
+    public void meth2155() { }
+    public void meth2156() { }
+    public void meth2157() { }
+    public void meth2158() { }
+    public void meth2159() { }
+    public void meth2160() { }
+    public void meth2161() { }
+    public void meth2162() { }
+    public void meth2163() { }
+    public void meth2164() { }
+    public void meth2165() { }
+    public void meth2166() { }
+    public void meth2167() { }
+    public void meth2168() { }
+    public void meth2169() { }
+    public void meth2170() { }
+    public void meth2171() { }
+    public void meth2172() { }
+    public void meth2173() { }
+    public void meth2174() { }
+    public void meth2175() { }
+    public void meth2176() { }
+    public void meth2177() { }
+    public void meth2178() { }
+    public void meth2179() { }
+    public void meth2180() { }
+    public void meth2181() { }
+    public void meth2182() { }
+    public void meth2183() { }
+    public void meth2184() { }
+    public void meth2185() { }
+    public void meth2186() { }
+    public void meth2187() { }
+    public void meth2188() { }
+    public void meth2189() { }
+    public void meth2190() { }
+    public void meth2191() { }
+    public void meth2192() { }
+    public void meth2193() { }
+    public void meth2194() { }
+    public void meth2195() { }
+    public void meth2196() { }
+    public void meth2197() { }
+    public void meth2198() { }
+    public void meth2199() { }
+    public void meth2200() { }
+    public void meth2201() { }
+    public void meth2202() { }
+    public void meth2203() { }
+    public void meth2204() { }
+    public void meth2205() { }
+    public void meth2206() { }
+    public void meth2207() { }
+    public void meth2208() { }
+    public void meth2209() { }
+    public void meth2210() { }
+    public void meth2211() { }
+    public void meth2212() { }
+    public void meth2213() { }
+    public void meth2214() { }
+    public void meth2215() { }
+    public void meth2216() { }
+    public void meth2217() { }
+    public void meth2218() { }
+    public void meth2219() { }
+    public void meth2220() { }
+    public void meth2221() { }
+    public void meth2222() { }
+    public void meth2223() { }
+    public void meth2224() { }
+    public void meth2225() { }
+    public void meth2226() { }
+    public void meth2227() { }
+    public void meth2228() { }
+    public void meth2229() { }
+    public void meth2230() { }
+    public void meth2231() { }
+    public void meth2232() { }
+    public void meth2233() { }
+    public void meth2234() { }
+    public void meth2235() { }
+    public void meth2236() { }
+    public void meth2237() { }
+    public void meth2238() { }
+    public void meth2239() { }
+    public void meth2240() { }
+    public void meth2241() { }
+    public void meth2242() { }
+    public void meth2243() { }
+    public void meth2244() { }
+    public void meth2245() { }
+    public void meth2246() { }
+    public void meth2247() { }
+    public void meth2248() { }
+    public void meth2249() { }
+    public void meth2250() { }
+    public void meth2251() { }
+    public void meth2252() { }
+    public void meth2253() { }
+    public void meth2254() { }
+    public void meth2255() { }
+    public void meth2256() { }
+    public void meth2257() { }
+    public void meth2258() { }
+    public void meth2259() { }
+    public void meth2260() { }
+    public void meth2261() { }
+    public void meth2262() { }
+    public void meth2263() { }
+    public void meth2264() { }
+    public void meth2265() { }
+    public void meth2266() { }
+    public void meth2267() { }
+    public void meth2268() { }
+    public void meth2269() { }
+    public void meth2270() { }
+    public void meth2271() { }
+    public void meth2272() { }
+    public void meth2273() { }
+    public void meth2274() { }
+    public void meth2275() { }
+    public void meth2276() { }
+    public void meth2277() { }
+    public void meth2278() { }
+    public void meth2279() { }
+    public void meth2280() { }
+    public void meth2281() { }
+    public void meth2282() { }
+    public void meth2283() { }
+    public void meth2284() { }
+    public void meth2285() { }
+    public void meth2286() { }
+    public void meth2287() { }
+    public void meth2288() { }
+    public void meth2289() { }
+    public void meth2290() { }
+    public void meth2291() { }
+    public void meth2292() { }
+    public void meth2293() { }
+    public void meth2294() { }
+    public void meth2295() { }
+    public void meth2296() { }
+    public void meth2297() { }
+    public void meth2298() { }
+    public void meth2299() { }
+    public void meth2300() { }
+    public void meth2301() { }
+    public void meth2302() { }
+    public void meth2303() { }
+    public void meth2304() { }
+    public void meth2305() { }
+    public void meth2306() { }
+    public void meth2307() { }
+    public void meth2308() { }
+    public void meth2309() { }
+    public void meth2310() { }
+    public void meth2311() { }
+    public void meth2312() { }
+    public void meth2313() { }
+    public void meth2314() { }
+    public void meth2315() { }
+    public void meth2316() { }
+    public void meth2317() { }
+    public void meth2318() { }
+    public void meth2319() { }
+    public void meth2320() { }
+    public void meth2321() { }
+    public void meth2322() { }
+    public void meth2323() { }
+    public void meth2324() { }
+    public void meth2325() { }
+    public void meth2326() { }
+    public void meth2327() { }
+    public void meth2328() { }
+    public void meth2329() { }
+    public void meth2330() { }
+    public void meth2331() { }
+    public void meth2332() { }
+    public void meth2333() { }
+    public void meth2334() { }
+    public void meth2335() { }
+    public void meth2336() { }
+    public void meth2337() { }
+    public void meth2338() { }
+    public void meth2339() { }
+    public void meth2340() { }
+    public void meth2341() { }
+    public void meth2342() { }
+    public void meth2343() { }
+    public void meth2344() { }
+    public void meth2345() { }
+    public void meth2346() { }
+    public void meth2347() { }
+    public void meth2348() { }
+    public void meth2349() { }
+    public void meth2350() { }
+    public void meth2351() { }
+    public void meth2352() { }
+    public void meth2353() { }
+    public void meth2354() { }
+    public void meth2355() { }
+    public void meth2356() { }
+    public void meth2357() { }
+    public void meth2358() { }
+    public void meth2359() { }
+    public void meth2360() { }
+    public void meth2361() { }
+    public void meth2362() { }
+    public void meth2363() { }
+    public void meth2364() { }
+    public void meth2365() { }
+    public void meth2366() { }
+    public void meth2367() { }
+    public void meth2368() { }
+    public void meth2369() { }
+    public void meth2370() { }
+    public void meth2371() { }
+    public void meth2372() { }
+    public void meth2373() { }
+    public void meth2374() { }
+    public void meth2375() { }
+    public void meth2376() { }
+    public void meth2377() { }
+    public void meth2378() { }
+    public void meth2379() { }
+    public void meth2380() { }
+    public void meth2381() { }
+    public void meth2382() { }
+    public void meth2383() { }
+    public void meth2384() { }
+    public void meth2385() { }
+    public void meth2386() { }
+    public void meth2387() { }
+    public void meth2388() { }
+    public void meth2389() { }
+    public void meth2390() { }
+    public void meth2391() { }
+    public void meth2392() { }
+    public void meth2393() { }
+    public void meth2394() { }
+    public void meth2395() { }
+    public void meth2396() { }
+    public void meth2397() { }
+    public void meth2398() { }
+    public void meth2399() { }
+    public void meth2400() { }
+    public void meth2401() { }
+    public void meth2402() { }
+    public void meth2403() { }
+    public void meth2404() { }
+    public void meth2405() { }
+    public void meth2406() { }
+    public void meth2407() { }
+    public void meth2408() { }
+    public void meth2409() { }
+    public void meth2410() { }
+    public void meth2411() { }
+    public void meth2412() { }
+    public void meth2413() { }
+    public void meth2414() { }
+    public void meth2415() { }
+    public void meth2416() { }
+    public void meth2417() { }
+    public void meth2418() { }
+    public void meth2419() { }
+    public void meth2420() { }
+    public void meth2421() { }
+    public void meth2422() { }
+    public void meth2423() { }
+    public void meth2424() { }
+    public void meth2425() { }
+    public void meth2426() { }
+    public void meth2427() { }
+    public void meth2428() { }
+    public void meth2429() { }
+    public void meth2430() { }
+    public void meth2431() { }
+    public void meth2432() { }
+    public void meth2433() { }
+    public void meth2434() { }
+    public void meth2435() { }
+    public void meth2436() { }
+    public void meth2437() { }
+    public void meth2438() { }
+    public void meth2439() { }
+    public void meth2440() { }
+    public void meth2441() { }
+    public void meth2442() { }
+    public void meth2443() { }
+    public void meth2444() { }
+    public void meth2445() { }
+    public void meth2446() { }
+    public void meth2447() { }
+    public void meth2448() { }
+    public void meth2449() { }
+    public void meth2450() { }
+    public void meth2451() { }
+    public void meth2452() { }
+    public void meth2453() { }
+    public void meth2454() { }
+    public void meth2455() { }
+    public void meth2456() { }
+    public void meth2457() { }
+    public void meth2458() { }
+    public void meth2459() { }
+    public void meth2460() { }
+    public void meth2461() { }
+    public void meth2462() { }
+    public void meth2463() { }
+    public void meth2464() { }
+    public void meth2465() { }
+    public void meth2466() { }
+    public void meth2467() { }
+    public void meth2468() { }
+    public void meth2469() { }
+    public void meth2470() { }
+    public void meth2471() { }
+    public void meth2472() { }
+    public void meth2473() { }
+    public void meth2474() { }
+    public void meth2475() { }
+    public void meth2476() { }
+    public void meth2477() { }
+    public void meth2478() { }
+    public void meth2479() { }
+    public void meth2480() { }
+    public void meth2481() { }
+    public void meth2482() { }
+    public void meth2483() { }
+    public void meth2484() { }
+    public void meth2485() { }
+    public void meth2486() { }
+    public void meth2487() { }
+    public void meth2488() { }
+    public void meth2489() { }
+    public void meth2490() { }
+    public void meth2491() { }
+    public void meth2492() { }
+    public void meth2493() { }
+    public void meth2494() { }
+    public void meth2495() { }
+    public void meth2496() { }
+    public void meth2497() { }
+    public void meth2498() { }
+    public void meth2499() { }
+    public void meth2500() { }
+    public void meth2501() { }
+    public void meth2502() { }
+    public void meth2503() { }
+    public void meth2504() { }
+    public void meth2505() { }
+    public void meth2506() { }
+    public void meth2507() { }
+    public void meth2508() { }
+    public void meth2509() { }
+    public void meth2510() { }
+    public void meth2511() { }
+    public void meth2512() { }
+    public void meth2513() { }
+    public void meth2514() { }
+    public void meth2515() { }
+    public void meth2516() { }
+    public void meth2517() { }
+    public void meth2518() { }
+    public void meth2519() { }
+    public void meth2520() { }
+    public void meth2521() { }
+    public void meth2522() { }
+    public void meth2523() { }
+    public void meth2524() { }
+    public void meth2525() { }
+    public void meth2526() { }
+    public void meth2527() { }
+    public void meth2528() { }
+    public void meth2529() { }
+    public void meth2530() { }
+    public void meth2531() { }
+    public void meth2532() { }
+    public void meth2533() { }
+    public void meth2534() { }
+    public void meth2535() { }
+    public void meth2536() { }
+    public void meth2537() { }
+    public void meth2538() { }
+    public void meth2539() { }
+    public void meth2540() { }
+    public void meth2541() { }
+    public void meth2542() { }
+    public void meth2543() { }
+    public void meth2544() { }
+    public void meth2545() { }
+    public void meth2546() { }
+    public void meth2547() { }
+    public void meth2548() { }
+    public void meth2549() { }
+    public void meth2550() { }
+    public void meth2551() { }
+    public void meth2552() { }
+    public void meth2553() { }
+    public void meth2554() { }
+    public void meth2555() { }
+    public void meth2556() { }
+    public void meth2557() { }
+    public void meth2558() { }
+    public void meth2559() { }
+    public void meth2560() { }
+    public void meth2561() { }
+    public void meth2562() { }
+    public void meth2563() { }
+    public void meth2564() { }
+    public void meth2565() { }
+    public void meth2566() { }
+    public void meth2567() { }
+    public void meth2568() { }
+    public void meth2569() { }
+    public void meth2570() { }
+    public void meth2571() { }
+    public void meth2572() { }
+    public void meth2573() { }
+    public void meth2574() { }
+    public void meth2575() { }
+    public void meth2576() { }
+    public void meth2577() { }
+    public void meth2578() { }
+    public void meth2579() { }
+    public void meth2580() { }
+    public void meth2581() { }
+    public void meth2582() { }
+    public void meth2583() { }
+    public void meth2584() { }
+    public void meth2585() { }
+    public void meth2586() { }
+    public void meth2587() { }
+    public void meth2588() { }
+    public void meth2589() { }
+    public void meth2590() { }
+    public void meth2591() { }
+    public void meth2592() { }
+    public void meth2593() { }
+    public void meth2594() { }
+    public void meth2595() { }
+    public void meth2596() { }
+    public void meth2597() { }
+    public void meth2598() { }
+    public void meth2599() { }
+    public void meth2600() { }
+    public void meth2601() { }
+    public void meth2602() { }
+    public void meth2603() { }
+    public void meth2604() { }
+    public void meth2605() { }
+    public void meth2606() { }
+    public void meth2607() { }
+    public void meth2608() { }
+    public void meth2609() { }
+    public void meth2610() { }
+    public void meth2611() { }
+    public void meth2612() { }
+    public void meth2613() { }
+    public void meth2614() { }
+    public void meth2615() { }
+    public void meth2616() { }
+    public void meth2617() { }
+    public void meth2618() { }
+    public void meth2619() { }
+    public void meth2620() { }
+    public void meth2621() { }
+    public void meth2622() { }
+    public void meth2623() { }
+    public void meth2624() { }
+    public void meth2625() { }
+    public void meth2626() { }
+    public void meth2627() { }
+    public void meth2628() { }
+    public void meth2629() { }
+    public void meth2630() { }
+    public void meth2631() { }
+    public void meth2632() { }
+    public void meth2633() { }
+    public void meth2634() { }
+    public void meth2635() { }
+    public void meth2636() { }
+    public void meth2637() { }
+    public void meth2638() { }
+    public void meth2639() { }
+    public void meth2640() { }
+    public void meth2641() { }
+    public void meth2642() { }
+    public void meth2643() { }
+    public void meth2644() { }
+    public void meth2645() { }
+    public void meth2646() { }
+    public void meth2647() { }
+    public void meth2648() { }
+    public void meth2649() { }
+    public void meth2650() { }
+    public void meth2651() { }
+    public void meth2652() { }
+    public void meth2653() { }
+    public void meth2654() { }
+    public void meth2655() { }
+    public void meth2656() { }
+    public void meth2657() { }
+    public void meth2658() { }
+    public void meth2659() { }
+    public void meth2660() { }
+    public void meth2661() { }
+    public void meth2662() { }
+    public void meth2663() { }
+    public void meth2664() { }
+    public void meth2665() { }
+    public void meth2666() { }
+    public void meth2667() { }
+    public void meth2668() { }
+    public void meth2669() { }
+    public void meth2670() { }
+    public void meth2671() { }
+    public void meth2672() { }
+    public void meth2673() { }
+    public void meth2674() { }
+    public void meth2675() { }
+    public void meth2676() { }
+    public void meth2677() { }
+    public void meth2678() { }
+    public void meth2679() { }
+    public void meth2680() { }
+    public void meth2681() { }
+    public void meth2682() { }
+    public void meth2683() { }
+    public void meth2684() { }
+    public void meth2685() { }
+    public void meth2686() { }
+    public void meth2687() { }
+    public void meth2688() { }
+    public void meth2689() { }
+    public void meth2690() { }
+    public void meth2691() { }
+    public void meth2692() { }
+    public void meth2693() { }
+    public void meth2694() { }
+    public void meth2695() { }
+    public void meth2696() { }
+    public void meth2697() { }
+    public void meth2698() { }
+    public void meth2699() { }
+    public void meth2700() { }
+    public void meth2701() { }
+    public void meth2702() { }
+    public void meth2703() { }
+    public void meth2704() { }
+    public void meth2705() { }
+    public void meth2706() { }
+    public void meth2707() { }
+    public void meth2708() { }
+    public void meth2709() { }
+    public void meth2710() { }
+    public void meth2711() { }
+    public void meth2712() { }
+    public void meth2713() { }
+    public void meth2714() { }
+    public void meth2715() { }
+    public void meth2716() { }
+    public void meth2717() { }
+    public void meth2718() { }
+    public void meth2719() { }
+    public void meth2720() { }
+    public void meth2721() { }
+    public void meth2722() { }
+    public void meth2723() { }
+    public void meth2724() { }
+    public void meth2725() { }
+    public void meth2726() { }
+    public void meth2727() { }
+    public void meth2728() { }
+    public void meth2729() { }
+    public void meth2730() { }
+    public void meth2731() { }
+    public void meth2732() { }
+    public void meth2733() { }
+    public void meth2734() { }
+    public void meth2735() { }
+    public void meth2736() { }
+    public void meth2737() { }
+    public void meth2738() { }
+    public void meth2739() { }
+    public void meth2740() { }
+    public void meth2741() { }
+    public void meth2742() { }
+    public void meth2743() { }
+    public void meth2744() { }
+    public void meth2745() { }
+    public void meth2746() { }
+    public void meth2747() { }
+    public void meth2748() { }
+    public void meth2749() { }
+    public void meth2750() { }
+    public void meth2751() { }
+    public void meth2752() { }
+    public void meth2753() { }
+    public void meth2754() { }
+    public void meth2755() { }
+    public void meth2756() { }
+    public void meth2757() { }
+    public void meth2758() { }
+    public void meth2759() { }
+    public void meth2760() { }
+    public void meth2761() { }
+    public void meth2762() { }
+    public void meth2763() { }
+    public void meth2764() { }
+    public void meth2765() { }
+    public void meth2766() { }
+    public void meth2767() { }
+    public void meth2768() { }
+    public void meth2769() { }
+    public void meth2770() { }
+    public void meth2771() { }
+    public void meth2772() { }
+    public void meth2773() { }
+    public void meth2774() { }
+    public void meth2775() { }
+    public void meth2776() { }
+    public void meth2777() { }
+    public void meth2778() { }
+    public void meth2779() { }
+    public void meth2780() { }
+    public void meth2781() { }
+    public void meth2782() { }
+    public void meth2783() { }
+    public void meth2784() { }
+    public void meth2785() { }
+    public void meth2786() { }
+    public void meth2787() { }
+    public void meth2788() { }
+    public void meth2789() { }
+    public void meth2790() { }
+    public void meth2791() { }
+    public void meth2792() { }
+    public void meth2793() { }
+    public void meth2794() { }
+    public void meth2795() { }
+    public void meth2796() { }
+    public void meth2797() { }
+    public void meth2798() { }
+    public void meth2799() { }
+    public void meth2800() { }
+    public void meth2801() { }
+    public void meth2802() { }
+    public void meth2803() { }
+    public void meth2804() { }
+    public void meth2805() { }
+    public void meth2806() { }
+    public void meth2807() { }
+    public void meth2808() { }
+    public void meth2809() { }
+    public void meth2810() { }
+    public void meth2811() { }
+    public void meth2812() { }
+    public void meth2813() { }
+    public void meth2814() { }
+    public void meth2815() { }
+    public void meth2816() { }
+    public void meth2817() { }
+    public void meth2818() { }
+    public void meth2819() { }
+    public void meth2820() { }
+    public void meth2821() { }
+    public void meth2822() { }
+    public void meth2823() { }
+    public void meth2824() { }
+    public void meth2825() { }
+    public void meth2826() { }
+    public void meth2827() { }
+    public void meth2828() { }
+    public void meth2829() { }
+    public void meth2830() { }
+    public void meth2831() { }
+    public void meth2832() { }
+    public void meth2833() { }
+    public void meth2834() { }
+    public void meth2835() { }
+    public void meth2836() { }
+    public void meth2837() { }
+    public void meth2838() { }
+    public void meth2839() { }
+    public void meth2840() { }
+    public void meth2841() { }
+    public void meth2842() { }
+    public void meth2843() { }
+    public void meth2844() { }
+    public void meth2845() { }
+    public void meth2846() { }
+    public void meth2847() { }
+    public void meth2848() { }
+    public void meth2849() { }
+    public void meth2850() { }
+    public void meth2851() { }
+    public void meth2852() { }
+    public void meth2853() { }
+    public void meth2854() { }
+    public void meth2855() { }
+    public void meth2856() { }
+    public void meth2857() { }
+    public void meth2858() { }
+    public void meth2859() { }
+    public void meth2860() { }
+    public void meth2861() { }
+    public void meth2862() { }
+    public void meth2863() { }
+    public void meth2864() { }
+    public void meth2865() { }
+    public void meth2866() { }
+    public void meth2867() { }
+    public void meth2868() { }
+    public void meth2869() { }
+    public void meth2870() { }
+    public void meth2871() { }
+    public void meth2872() { }
+    public void meth2873() { }
+    public void meth2874() { }
+    public void meth2875() { }
+    public void meth2876() { }
+    public void meth2877() { }
+    public void meth2878() { }
+    public void meth2879() { }
+    public void meth2880() { }
+    public void meth2881() { }
+    public void meth2882() { }
+    public void meth2883() { }
+    public void meth2884() { }
+    public void meth2885() { }
+    public void meth2886() { }
+    public void meth2887() { }
+    public void meth2888() { }
+    public void meth2889() { }
+    public void meth2890() { }
+    public void meth2891() { }
+    public void meth2892() { }
+    public void meth2893() { }
+    public void meth2894() { }
+    public void meth2895() { }
+    public void meth2896() { }
+    public void meth2897() { }
+    public void meth2898() { }
+    public void meth2899() { }
+    public void meth2900() { }
+    public void meth2901() { }
+    public void meth2902() { }
+    public void meth2903() { }
+    public void meth2904() { }
+    public void meth2905() { }
+    public void meth2906() { }
+    public void meth2907() { }
+    public void meth2908() { }
+    public void meth2909() { }
+    public void meth2910() { }
+    public void meth2911() { }
+    public void meth2912() { }
+    public void meth2913() { }
+    public void meth2914() { }
+    public void meth2915() { }
+    public void meth2916() { }
+    public void meth2917() { }
+    public void meth2918() { }
+    public void meth2919() { }
+    public void meth2920() { }
+    public void meth2921() { }
+    public void meth2922() { }
+    public void meth2923() { }
+    public void meth2924() { }
+    public void meth2925() { }
+    public void meth2926() { }
+    public void meth2927() { }
+    public void meth2928() { }
+    public void meth2929() { }
+    public void meth2930() { }
+    public void meth2931() { }
+    public void meth2932() { }
+    public void meth2933() { }
+    public void meth2934() { }
+    public void meth2935() { }
+    public void meth2936() { }
+    public void meth2937() { }
+    public void meth2938() { }
+    public void meth2939() { }
+    public void meth2940() { }
+    public void meth2941() { }
+    public void meth2942() { }
+    public void meth2943() { }
+    public void meth2944() { }
+    public void meth2945() { }
+    public void meth2946() { }
+    public void meth2947() { }
+    public void meth2948() { }
+    public void meth2949() { }
+    public void meth2950() { }
+    public void meth2951() { }
+    public void meth2952() { }
+    public void meth2953() { }
+    public void meth2954() { }
+    public void meth2955() { }
+    public void meth2956() { }
+    public void meth2957() { }
+    public void meth2958() { }
+    public void meth2959() { }
+    public void meth2960() { }
+    public void meth2961() { }
+    public void meth2962() { }
+    public void meth2963() { }
+    public void meth2964() { }
+    public void meth2965() { }
+    public void meth2966() { }
+    public void meth2967() { }
+    public void meth2968() { }
+    public void meth2969() { }
+    public void meth2970() { }
+    public void meth2971() { }
+    public void meth2972() { }
+    public void meth2973() { }
+    public void meth2974() { }
+    public void meth2975() { }
+    public void meth2976() { }
+    public void meth2977() { }
+    public void meth2978() { }
+    public void meth2979() { }
+    public void meth2980() { }
+    public void meth2981() { }
+    public void meth2982() { }
+    public void meth2983() { }
+    public void meth2984() { }
+    public void meth2985() { }
+    public void meth2986() { }
+    public void meth2987() { }
+    public void meth2988() { }
+    public void meth2989() { }
+    public void meth2990() { }
+    public void meth2991() { }
+    public void meth2992() { }
+    public void meth2993() { }
+    public void meth2994() { }
+    public void meth2995() { }
+    public void meth2996() { }
+    public void meth2997() { }
+    public void meth2998() { }
+    public void meth2999() { }
+    public void meth3000() { }
+    public void meth3001() { }
+    public void meth3002() { }
+    public void meth3003() { }
+    public void meth3004() { }
+    public void meth3005() { }
+    public void meth3006() { }
+    public void meth3007() { }
+    public void meth3008() { }
+    public void meth3009() { }
+    public void meth3010() { }
+    public void meth3011() { }
+    public void meth3012() { }
+    public void meth3013() { }
+    public void meth3014() { }
+    public void meth3015() { }
+    public void meth3016() { }
+    public void meth3017() { }
+    public void meth3018() { }
+    public void meth3019() { }
+    public void meth3020() { }
+    public void meth3021() { }
+    public void meth3022() { }
+    public void meth3023() { }
+    public void meth3024() { }
+    public void meth3025() { }
+    public void meth3026() { }
+    public void meth3027() { }
+    public void meth3028() { }
+    public void meth3029() { }
+    public void meth3030() { }
+    public void meth3031() { }
+    public void meth3032() { }
+    public void meth3033() { }
+    public void meth3034() { }
+    public void meth3035() { }
+    public void meth3036() { }
+    public void meth3037() { }
+    public void meth3038() { }
+    public void meth3039() { }
+    public void meth3040() { }
+    public void meth3041() { }
+    public void meth3042() { }
+    public void meth3043() { }
+    public void meth3044() { }
+    public void meth3045() { }
+    public void meth3046() { }
+    public void meth3047() { }
+    public void meth3048() { }
+    public void meth3049() { }
+    public void meth3050() { }
+    public void meth3051() { }
+    public void meth3052() { }
+    public void meth3053() { }
+    public void meth3054() { }
+    public void meth3055() { }
+    public void meth3056() { }
+    public void meth3057() { }
+    public void meth3058() { }
+    public void meth3059() { }
+    public void meth3060() { }
+    public void meth3061() { }
+    public void meth3062() { }
+    public void meth3063() { }
+    public void meth3064() { }
+    public void meth3065() { }
+    public void meth3066() { }
+    public void meth3067() { }
+    public void meth3068() { }
+    public void meth3069() { }
+    public void meth3070() { }
+    public void meth3071() { }
+    public void meth3072() { }
+    public void meth3073() { }
+    public void meth3074() { }
+    public void meth3075() { }
+    public void meth3076() { }
+    public void meth3077() { }
+    public void meth3078() { }
+    public void meth3079() { }
+    public void meth3080() { }
+    public void meth3081() { }
+    public void meth3082() { }
+    public void meth3083() { }
+    public void meth3084() { }
+    public void meth3085() { }
+    public void meth3086() { }
+    public void meth3087() { }
+    public void meth3088() { }
+    public void meth3089() { }
+    public void meth3090() { }
+    public void meth3091() { }
+    public void meth3092() { }
+    public void meth3093() { }
+    public void meth3094() { }
+    public void meth3095() { }
+    public void meth3096() { }
+    public void meth3097() { }
+    public void meth3098() { }
+    public void meth3099() { }
+    public void meth3100() { }
+    public void meth3101() { }
+    public void meth3102() { }
+    public void meth3103() { }
+    public void meth3104() { }
+    public void meth3105() { }
+    public void meth3106() { }
+    public void meth3107() { }
+    public void meth3108() { }
+    public void meth3109() { }
+    public void meth3110() { }
+    public void meth3111() { }
+    public void meth3112() { }
+    public void meth3113() { }
+    public void meth3114() { }
+    public void meth3115() { }
+    public void meth3116() { }
+    public void meth3117() { }
+    public void meth3118() { }
+    public void meth3119() { }
+    public void meth3120() { }
+    public void meth3121() { }
+    public void meth3122() { }
+    public void meth3123() { }
+    public void meth3124() { }
+    public void meth3125() { }
+    public void meth3126() { }
+    public void meth3127() { }
+    public void meth3128() { }
+    public void meth3129() { }
+    public void meth3130() { }
+    public void meth3131() { }
+    public void meth3132() { }
+    public void meth3133() { }
+    public void meth3134() { }
+    public void meth3135() { }
+    public void meth3136() { }
+    public void meth3137() { }
+    public void meth3138() { }
+    public void meth3139() { }
+    public void meth3140() { }
+    public void meth3141() { }
+    public void meth3142() { }
+    public void meth3143() { }
+    public void meth3144() { }
+    public void meth3145() { }
+    public void meth3146() { }
+    public void meth3147() { }
+    public void meth3148() { }
+    public void meth3149() { }
+    public void meth3150() { }
+    public void meth3151() { }
+    public void meth3152() { }
+    public void meth3153() { }
+    public void meth3154() { }
+    public void meth3155() { }
+    public void meth3156() { }
+    public void meth3157() { }
+    public void meth3158() { }
+    public void meth3159() { }
+    public void meth3160() { }
+    public void meth3161() { }
+    public void meth3162() { }
+    public void meth3163() { }
+    public void meth3164() { }
+    public void meth3165() { }
+    public void meth3166() { }
+    public void meth3167() { }
+    public void meth3168() { }
+    public void meth3169() { }
+    public void meth3170() { }
+    public void meth3171() { }
+    public void meth3172() { }
+    public void meth3173() { }
+    public void meth3174() { }
+    public void meth3175() { }
+    public void meth3176() { }
+    public void meth3177() { }
+    public void meth3178() { }
+    public void meth3179() { }
+    public void meth3180() { }
+    public void meth3181() { }
+    public void meth3182() { }
+    public void meth3183() { }
+    public void meth3184() { }
+    public void meth3185() { }
+    public void meth3186() { }
+    public void meth3187() { }
+    public void meth3188() { }
+    public void meth3189() { }
+    public void meth3190() { }
+    public void meth3191() { }
+    public void meth3192() { }
+    public void meth3193() { }
+    public void meth3194() { }
+    public void meth3195() { }
+    public void meth3196() { }
+    public void meth3197() { }
+    public void meth3198() { }
+    public void meth3199() { }
+    public void meth3200() { }
+    public void meth3201() { }
+    public void meth3202() { }
+    public void meth3203() { }
+    public void meth3204() { }
+    public void meth3205() { }
+    public void meth3206() { }
+    public void meth3207() { }
+    public void meth3208() { }
+    public void meth3209() { }
+    public void meth3210() { }
+    public void meth3211() { }
+    public void meth3212() { }
+    public void meth3213() { }
+    public void meth3214() { }
+    public void meth3215() { }
+    public void meth3216() { }
+    public void meth3217() { }
+    public void meth3218() { }
+    public void meth3219() { }
+    public void meth3220() { }
+    public void meth3221() { }
+    public void meth3222() { }
+    public void meth3223() { }
+    public void meth3224() { }
+    public void meth3225() { }
+    public void meth3226() { }
+    public void meth3227() { }
+    public void meth3228() { }
+    public void meth3229() { }
+    public void meth3230() { }
+    public void meth3231() { }
+    public void meth3232() { }
+    public void meth3233() { }
+    public void meth3234() { }
+    public void meth3235() { }
+    public void meth3236() { }
+    public void meth3237() { }
+    public void meth3238() { }
+    public void meth3239() { }
+    public void meth3240() { }
+    public void meth3241() { }
+    public void meth3242() { }
+    public void meth3243() { }
+    public void meth3244() { }
+    public void meth3245() { }
+    public void meth3246() { }
+    public void meth3247() { }
+    public void meth3248() { }
+    public void meth3249() { }
+    public void meth3250() { }
+    public void meth3251() { }
+    public void meth3252() { }
+    public void meth3253() { }
+    public void meth3254() { }
+    public void meth3255() { }
+    public void meth3256() { }
+    public void meth3257() { }
+    public void meth3258() { }
+    public void meth3259() { }
+    public void meth3260() { }
+    public void meth3261() { }
+    public void meth3262() { }
+    public void meth3263() { }
+    public void meth3264() { }
+    public void meth3265() { }
+    public void meth3266() { }
+    public void meth3267() { }
+    public void meth3268() { }
+    public void meth3269() { }
+    public void meth3270() { }
+    public void meth3271() { }
+    public void meth3272() { }
+    public void meth3273() { }
+    public void meth3274() { }
+    public void meth3275() { }
+    public void meth3276() { }
+    public void meth3277() { }
+    public void meth3278() { }
+    public void meth3279() { }
+    public void meth3280() { }
+    public void meth3281() { }
+    public void meth3282() { }
+    public void meth3283() { }
+    public void meth3284() { }
+    public void meth3285() { }
+    public void meth3286() { }
+    public void meth3287() { }
+    public void meth3288() { }
+    public void meth3289() { }
+    public void meth3290() { }
+    public void meth3291() { }
+    public void meth3292() { }
+    public void meth3293() { }
+    public void meth3294() { }
+    public void meth3295() { }
+    public void meth3296() { }
+    public void meth3297() { }
+    public void meth3298() { }
+    public void meth3299() { }
+    public void meth3300() { }
+    public void meth3301() { }
+    public void meth3302() { }
+    public void meth3303() { }
+    public void meth3304() { }
+    public void meth3305() { }
+    public void meth3306() { }
+    public void meth3307() { }
+    public void meth3308() { }
+    public void meth3309() { }
+    public void meth3310() { }
+    public void meth3311() { }
+    public void meth3312() { }
+    public void meth3313() { }
+    public void meth3314() { }
+    public void meth3315() { }
+    public void meth3316() { }
+    public void meth3317() { }
+    public void meth3318() { }
+    public void meth3319() { }
+    public void meth3320() { }
+    public void meth3321() { }
+    public void meth3322() { }
+    public void meth3323() { }
+    public void meth3324() { }
+    public void meth3325() { }
+    public void meth3326() { }
+    public void meth3327() { }
+    public void meth3328() { }
+    public void meth3329() { }
+    public void meth3330() { }
+    public void meth3331() { }
+    public void meth3332() { }
+    public void meth3333() { }
+    public void meth3334() { }
+    public void meth3335() { }
+    public void meth3336() { }
+    public void meth3337() { }
+    public void meth3338() { }
+    public void meth3339() { }
+    public void meth3340() { }
+    public void meth3341() { }
+    public void meth3342() { }
+    public void meth3343() { }
+    public void meth3344() { }
+    public void meth3345() { }
+    public void meth3346() { }
+    public void meth3347() { }
+    public void meth3348() { }
+    public void meth3349() { }
+    public void meth3350() { }
+    public void meth3351() { }
+    public void meth3352() { }
+    public void meth3353() { }
+    public void meth3354() { }
+    public void meth3355() { }
+    public void meth3356() { }
+    public void meth3357() { }
+    public void meth3358() { }
+    public void meth3359() { }
+    public void meth3360() { }
+    public void meth3361() { }
+    public void meth3362() { }
+    public void meth3363() { }
+    public void meth3364() { }
+    public void meth3365() { }
+    public void meth3366() { }
+    public void meth3367() { }
+    public void meth3368() { }
+    public void meth3369() { }
+    public void meth3370() { }
+    public void meth3371() { }
+    public void meth3372() { }
+    public void meth3373() { }
+    public void meth3374() { }
+    public void meth3375() { }
+    public void meth3376() { }
+    public void meth3377() { }
+    public void meth3378() { }
+    public void meth3379() { }
+    public void meth3380() { }
+    public void meth3381() { }
+    public void meth3382() { }
+    public void meth3383() { }
+    public void meth3384() { }
+    public void meth3385() { }
+    public void meth3386() { }
+    public void meth3387() { }
+    public void meth3388() { }
+    public void meth3389() { }
+    public void meth3390() { }
+    public void meth3391() { }
+    public void meth3392() { }
+    public void meth3393() { }
+    public void meth3394() { }
+    public void meth3395() { }
+    public void meth3396() { }
+    public void meth3397() { }
+    public void meth3398() { }
+    public void meth3399() { }
+    public void meth3400() { }
+    public void meth3401() { }
+    public void meth3402() { }
+    public void meth3403() { }
+    public void meth3404() { }
+    public void meth3405() { }
+    public void meth3406() { }
+    public void meth3407() { }
+    public void meth3408() { }
+    public void meth3409() { }
+    public void meth3410() { }
+    public void meth3411() { }
+    public void meth3412() { }
+    public void meth3413() { }
+    public void meth3414() { }
+    public void meth3415() { }
+    public void meth3416() { }
+    public void meth3417() { }
+    public void meth3418() { }
+    public void meth3419() { }
+    public void meth3420() { }
+    public void meth3421() { }
+    public void meth3422() { }
+    public void meth3423() { }
+    public void meth3424() { }
+    public void meth3425() { }
+    public void meth3426() { }
+    public void meth3427() { }
+    public void meth3428() { }
+    public void meth3429() { }
+    public void meth3430() { }
+    public void meth3431() { }
+    public void meth3432() { }
+    public void meth3433() { }
+    public void meth3434() { }
+    public void meth3435() { }
+    public void meth3436() { }
+    public void meth3437() { }
+    public void meth3438() { }
+    public void meth3439() { }
+    public void meth3440() { }
+    public void meth3441() { }
+    public void meth3442() { }
+    public void meth3443() { }
+    public void meth3444() { }
+    public void meth3445() { }
+    public void meth3446() { }
+    public void meth3447() { }
+    public void meth3448() { }
+    public void meth3449() { }
+    public void meth3450() { }
+    public void meth3451() { }
+    public void meth3452() { }
+    public void meth3453() { }
+    public void meth3454() { }
+    public void meth3455() { }
+    public void meth3456() { }
+    public void meth3457() { }
+    public void meth3458() { }
+    public void meth3459() { }
+    public void meth3460() { }
+    public void meth3461() { }
+    public void meth3462() { }
+    public void meth3463() { }
+    public void meth3464() { }
+    public void meth3465() { }
+    public void meth3466() { }
+    public void meth3467() { }
+    public void meth3468() { }
+    public void meth3469() { }
+    public void meth3470() { }
+    public void meth3471() { }
+    public void meth3472() { }
+    public void meth3473() { }
+    public void meth3474() { }
+    public void meth3475() { }
+    public void meth3476() { }
+    public void meth3477() { }
+    public void meth3478() { }
+    public void meth3479() { }
+    public void meth3480() { }
+    public void meth3481() { }
+    public void meth3482() { }
+    public void meth3483() { }
+    public void meth3484() { }
+    public void meth3485() { }
+    public void meth3486() { }
+    public void meth3487() { }
+    public void meth3488() { }
+    public void meth3489() { }
+    public void meth3490() { }
+    public void meth3491() { }
+    public void meth3492() { }
+    public void meth3493() { }
+    public void meth3494() { }
+    public void meth3495() { }
+    public void meth3496() { }
+    public void meth3497() { }
+    public void meth3498() { }
+    public void meth3499() { }
+    public void meth3500() { }
+    public void meth3501() { }
+    public void meth3502() { }
+    public void meth3503() { }
+    public void meth3504() { }
+    public void meth3505() { }
+    public void meth3506() { }
+    public void meth3507() { }
+    public void meth3508() { }
+    public void meth3509() { }
+    public void meth3510() { }
+    public void meth3511() { }
+    public void meth3512() { }
+    public void meth3513() { }
+    public void meth3514() { }
+    public void meth3515() { }
+    public void meth3516() { }
+    public void meth3517() { }
+    public void meth3518() { }
+    public void meth3519() { }
+    public void meth3520() { }
+    public void meth3521() { }
+    public void meth3522() { }
+    public void meth3523() { }
+    public void meth3524() { }
+    public void meth3525() { }
+    public void meth3526() { }
+    public void meth3527() { }
+    public void meth3528() { }
+    public void meth3529() { }
+    public void meth3530() { }
+    public void meth3531() { }
+    public void meth3532() { }
+    public void meth3533() { }
+    public void meth3534() { }
+    public void meth3535() { }
+    public void meth3536() { }
+    public void meth3537() { }
+    public void meth3538() { }
+    public void meth3539() { }
+    public void meth3540() { }
+    public void meth3541() { }
+    public void meth3542() { }
+    public void meth3543() { }
+    public void meth3544() { }
+    public void meth3545() { }
+    public void meth3546() { }
+    public void meth3547() { }
+    public void meth3548() { }
+    public void meth3549() { }
+    public void meth3550() { }
+    public void meth3551() { }
+    public void meth3552() { }
+    public void meth3553() { }
+    public void meth3554() { }
+    public void meth3555() { }
+    public void meth3556() { }
+    public void meth3557() { }
+    public void meth3558() { }
+    public void meth3559() { }
+    public void meth3560() { }
+    public void meth3561() { }
+    public void meth3562() { }
+    public void meth3563() { }
+    public void meth3564() { }
+    public void meth3565() { }
+    public void meth3566() { }
+    public void meth3567() { }
+    public void meth3568() { }
+    public void meth3569() { }
+    public void meth3570() { }
+    public void meth3571() { }
+    public void meth3572() { }
+    public void meth3573() { }
+    public void meth3574() { }
+    public void meth3575() { }
+    public void meth3576() { }
+    public void meth3577() { }
+    public void meth3578() { }
+    public void meth3579() { }
+    public void meth3580() { }
+    public void meth3581() { }
+    public void meth3582() { }
+    public void meth3583() { }
+    public void meth3584() { }
+    public void meth3585() { }
+    public void meth3586() { }
+    public void meth3587() { }
+    public void meth3588() { }
+    public void meth3589() { }
+    public void meth3590() { }
+    public void meth3591() { }
+    public void meth3592() { }
+    public void meth3593() { }
+    public void meth3594() { }
+    public void meth3595() { }
+    public void meth3596() { }
+    public void meth3597() { }
+    public void meth3598() { }
+    public void meth3599() { }
+    public void meth3600() { }
+    public void meth3601() { }
+    public void meth3602() { }
+    public void meth3603() { }
+    public void meth3604() { }
+    public void meth3605() { }
+    public void meth3606() { }
+    public void meth3607() { }
+    public void meth3608() { }
+    public void meth3609() { }
+    public void meth3610() { }
+    public void meth3611() { }
+    public void meth3612() { }
+    public void meth3613() { }
+    public void meth3614() { }
+    public void meth3615() { }
+    public void meth3616() { }
+    public void meth3617() { }
+    public void meth3618() { }
+    public void meth3619() { }
+    public void meth3620() { }
+    public void meth3621() { }
+    public void meth3622() { }
+    public void meth3623() { }
+    public void meth3624() { }
+    public void meth3625() { }
+    public void meth3626() { }
+    public void meth3627() { }
+    public void meth3628() { }
+    public void meth3629() { }
+    public void meth3630() { }
+    public void meth3631() { }
+    public void meth3632() { }
+    public void meth3633() { }
+    public void meth3634() { }
+    public void meth3635() { }
+    public void meth3636() { }
+    public void meth3637() { }
+    public void meth3638() { }
+    public void meth3639() { }
+    public void meth3640() { }
+    public void meth3641() { }
+    public void meth3642() { }
+    public void meth3643() { }
+    public void meth3644() { }
+    public void meth3645() { }
+    public void meth3646() { }
+    public void meth3647() { }
+    public void meth3648() { }
+    public void meth3649() { }
+    public void meth3650() { }
+    public void meth3651() { }
+    public void meth3652() { }
+    public void meth3653() { }
+    public void meth3654() { }
+    public void meth3655() { }
+    public void meth3656() { }
+    public void meth3657() { }
+    public void meth3658() { }
+    public void meth3659() { }
+    public void meth3660() { }
+    public void meth3661() { }
+    public void meth3662() { }
+    public void meth3663() { }
+    public void meth3664() { }
+    public void meth3665() { }
+    public void meth3666() { }
+    public void meth3667() { }
+    public void meth3668() { }
+    public void meth3669() { }
+    public void meth3670() { }
+    public void meth3671() { }
+    public void meth3672() { }
+    public void meth3673() { }
+    public void meth3674() { }
+    public void meth3675() { }
+    public void meth3676() { }
+    public void meth3677() { }
+    public void meth3678() { }
+    public void meth3679() { }
+    public void meth3680() { }
+    public void meth3681() { }
+    public void meth3682() { }
+    public void meth3683() { }
+    public void meth3684() { }
+    public void meth3685() { }
+    public void meth3686() { }
+    public void meth3687() { }
+    public void meth3688() { }
+    public void meth3689() { }
+    public void meth3690() { }
+    public void meth3691() { }
+    public void meth3692() { }
+    public void meth3693() { }
+    public void meth3694() { }
+    public void meth3695() { }
+    public void meth3696() { }
+    public void meth3697() { }
+    public void meth3698() { }
+    public void meth3699() { }
+    public void meth3700() { }
+    public void meth3701() { }
+    public void meth3702() { }
+    public void meth3703() { }
+    public void meth3704() { }
+    public void meth3705() { }
+    public void meth3706() { }
+    public void meth3707() { }
+    public void meth3708() { }
+    public void meth3709() { }
+    public void meth3710() { }
+    public void meth3711() { }
+    public void meth3712() { }
+    public void meth3713() { }
+    public void meth3714() { }
+    public void meth3715() { }
+    public void meth3716() { }
+    public void meth3717() { }
+    public void meth3718() { }
+    public void meth3719() { }
+    public void meth3720() { }
+    public void meth3721() { }
+    public void meth3722() { }
+    public void meth3723() { }
+    public void meth3724() { }
+    public void meth3725() { }
+    public void meth3726() { }
+    public void meth3727() { }
+    public void meth3728() { }
+    public void meth3729() { }
+    public void meth3730() { }
+    public void meth3731() { }
+    public void meth3732() { }
+    public void meth3733() { }
+    public void meth3734() { }
+    public void meth3735() { }
+    public void meth3736() { }
+    public void meth3737() { }
+    public void meth3738() { }
+    public void meth3739() { }
+    public void meth3740() { }
+    public void meth3741() { }
+    public void meth3742() { }
+    public void meth3743() { }
+    public void meth3744() { }
+    public void meth3745() { }
+    public void meth3746() { }
+    public void meth3747() { }
+    public void meth3748() { }
+    public void meth3749() { }
+    public void meth3750() { }
+    public void meth3751() { }
+    public void meth3752() { }
+    public void meth3753() { }
+    public void meth3754() { }
+    public void meth3755() { }
+    public void meth3756() { }
+    public void meth3757() { }
+    public void meth3758() { }
+    public void meth3759() { }
+    public void meth3760() { }
+    public void meth3761() { }
+    public void meth3762() { }
+    public void meth3763() { }
+    public void meth3764() { }
+    public void meth3765() { }
+    public void meth3766() { }
+    public void meth3767() { }
+    public void meth3768() { }
+    public void meth3769() { }
+    public void meth3770() { }
+    public void meth3771() { }
+    public void meth3772() { }
+    public void meth3773() { }
+    public void meth3774() { }
+    public void meth3775() { }
+    public void meth3776() { }
+    public void meth3777() { }
+    public void meth3778() { }
+    public void meth3779() { }
+    public void meth3780() { }
+    public void meth3781() { }
+    public void meth3782() { }
+    public void meth3783() { }
+    public void meth3784() { }
+    public void meth3785() { }
+    public void meth3786() { }
+    public void meth3787() { }
+    public void meth3788() { }
+    public void meth3789() { }
+    public void meth3790() { }
+    public void meth3791() { }
+    public void meth3792() { }
+    public void meth3793() { }
+    public void meth3794() { }
+    public void meth3795() { }
+    public void meth3796() { }
+    public void meth3797() { }
+    public void meth3798() { }
+    public void meth3799() { }
+    public void meth3800() { }
+    public void meth3801() { }
+    public void meth3802() { }
+    public void meth3803() { }
+    public void meth3804() { }
+    public void meth3805() { }
+    public void meth3806() { }
+    public void meth3807() { }
+    public void meth3808() { }
+    public void meth3809() { }
+    public void meth3810() { }
+    public void meth3811() { }
+    public void meth3812() { }
+    public void meth3813() { }
+    public void meth3814() { }
+    public void meth3815() { }
+    public void meth3816() { }
+    public void meth3817() { }
+    public void meth3818() { }
+    public void meth3819() { }
+    public void meth3820() { }
+    public void meth3821() { }
+    public void meth3822() { }
+    public void meth3823() { }
+    public void meth3824() { }
+    public void meth3825() { }
+    public void meth3826() { }
+    public void meth3827() { }
+    public void meth3828() { }
+    public void meth3829() { }
+    public void meth3830() { }
+    public void meth3831() { }
+    public void meth3832() { }
+    public void meth3833() { }
+    public void meth3834() { }
+    public void meth3835() { }
+    public void meth3836() { }
+    public void meth3837() { }
+    public void meth3838() { }
+    public void meth3839() { }
+    public void meth3840() { }
+    public void meth3841() { }
+    public void meth3842() { }
+    public void meth3843() { }
+    public void meth3844() { }
+    public void meth3845() { }
+    public void meth3846() { }
+    public void meth3847() { }
+    public void meth3848() { }
+    public void meth3849() { }
+    public void meth3850() { }
+    public void meth3851() { }
+    public void meth3852() { }
+    public void meth3853() { }
+    public void meth3854() { }
+    public void meth3855() { }
+    public void meth3856() { }
+    public void meth3857() { }
+    public void meth3858() { }
+    public void meth3859() { }
+    public void meth3860() { }
+    public void meth3861() { }
+    public void meth3862() { }
+    public void meth3863() { }
+    public void meth3864() { }
+    public void meth3865() { }
+    public void meth3866() { }
+    public void meth3867() { }
+    public void meth3868() { }
+    public void meth3869() { }
+    public void meth3870() { }
+    public void meth3871() { }
+    public void meth3872() { }
+    public void meth3873() { }
+    public void meth3874() { }
+    public void meth3875() { }
+    public void meth3876() { }
+    public void meth3877() { }
+    public void meth3878() { }
+    public void meth3879() { }
+    public void meth3880() { }
+    public void meth3881() { }
+    public void meth3882() { }
+    public void meth3883() { }
+    public void meth3884() { }
+    public void meth3885() { }
+    public void meth3886() { }
+    public void meth3887() { }
+    public void meth3888() { }
+    public void meth3889() { }
+    public void meth3890() { }
+    public void meth3891() { }
+    public void meth3892() { }
+    public void meth3893() { }
+    public void meth3894() { }
+    public void meth3895() { }
+    public void meth3896() { }
+    public void meth3897() { }
+    public void meth3898() { }
+    public void meth3899() { }
+    public void meth3900() { }
+    public void meth3901() { }
+    public void meth3902() { }
+    public void meth3903() { }
+    public void meth3904() { }
+    public void meth3905() { }
+    public void meth3906() { }
+    public void meth3907() { }
+    public void meth3908() { }
+    public void meth3909() { }
+    public void meth3910() { }
+    public void meth3911() { }
+    public void meth3912() { }
+    public void meth3913() { }
+    public void meth3914() { }
+    public void meth3915() { }
+    public void meth3916() { }
+    public void meth3917() { }
+    public void meth3918() { }
+    public void meth3919() { }
+    public void meth3920() { }
+    public void meth3921() { }
+    public void meth3922() { }
+    public void meth3923() { }
+    public void meth3924() { }
+    public void meth3925() { }
+    public void meth3926() { }
+    public void meth3927() { }
+    public void meth3928() { }
+    public void meth3929() { }
+    public void meth3930() { }
+    public void meth3931() { }
+    public void meth3932() { }
+    public void meth3933() { }
+    public void meth3934() { }
+    public void meth3935() { }
+    public void meth3936() { }
+    public void meth3937() { }
+    public void meth3938() { }
+    public void meth3939() { }
+    public void meth3940() { }
+    public void meth3941() { }
+    public void meth3942() { }
+    public void meth3943() { }
+    public void meth3944() { }
+    public void meth3945() { }
+    public void meth3946() { }
+    public void meth3947() { }
+    public void meth3948() { }
+    public void meth3949() { }
+    public void meth3950() { }
+    public void meth3951() { }
+    public void meth3952() { }
+    public void meth3953() { }
+    public void meth3954() { }
+    public void meth3955() { }
+    public void meth3956() { }
+    public void meth3957() { }
+    public void meth3958() { }
+    public void meth3959() { }
+    public void meth3960() { }
+    public void meth3961() { }
+    public void meth3962() { }
+    public void meth3963() { }
+    public void meth3964() { }
+    public void meth3965() { }
+    public void meth3966() { }
+    public void meth3967() { }
+    public void meth3968() { }
+    public void meth3969() { }
+    public void meth3970() { }
+    public void meth3971() { }
+    public void meth3972() { }
+    public void meth3973() { }
+    public void meth3974() { }
+    public void meth3975() { }
+    public void meth3976() { }
+    public void meth3977() { }
+    public void meth3978() { }
+    public void meth3979() { }
+    public void meth3980() { }
+    public void meth3981() { }
+    public void meth3982() { }
+    public void meth3983() { }
+    public void meth3984() { }
+    public void meth3985() { }
+    public void meth3986() { }
+    public void meth3987() { }
+    public void meth3988() { }
+    public void meth3989() { }
+    public void meth3990() { }
+    public void meth3991() { }
+    public void meth3992() { }
+    public void meth3993() { }
+    public void meth3994() { }
+    public void meth3995() { }
+    public void meth3996() { }
+    public void meth3997() { }
+    public void meth3998() { }
+    public void meth3999() { }
+    public void meth4000() { }
+    public void meth4001() { }
+    public void meth4002() { }
+    public void meth4003() { }
+    public void meth4004() { }
+    public void meth4005() { }
+    public void meth4006() { }
+    public void meth4007() { }
+    public void meth4008() { }
+    public void meth4009() { }
+    public void meth4010() { }
+    public void meth4011() { }
+    public void meth4012() { }
+    public void meth4013() { }
+    public void meth4014() { }
+    public void meth4015() { }
+    public void meth4016() { }
+    public void meth4017() { }
+    public void meth4018() { }
+    public void meth4019() { }
+    public void meth4020() { }
+    public void meth4021() { }
+    public void meth4022() { }
+    public void meth4023() { }
+    public void meth4024() { }
+    public void meth4025() { }
+    public void meth4026() { }
+    public void meth4027() { }
+    public void meth4028() { }
+    public void meth4029() { }
+    public void meth4030() { }
+    public void meth4031() { }
+    public void meth4032() { }
+    public void meth4033() { }
+    public void meth4034() { }
+    public void meth4035() { }
+    public void meth4036() { }
+    public void meth4037() { }
+    public void meth4038() { }
+    public void meth4039() { }
+    public void meth4040() { }
+    public void meth4041() { }
+    public void meth4042() { }
+    public void meth4043() { }
+    public void meth4044() { }
+    public void meth4045() { }
+    public void meth4046() { }
+    public void meth4047() { }
+    public void meth4048() { }
+    public void meth4049() { }
+    public void meth4050() { }
+    public void meth4051() { }
+    public void meth4052() { }
+    public void meth4053() { }
+    public void meth4054() { }
+    public void meth4055() { }
+    public void meth4056() { }
+    public void meth4057() { }
+    public void meth4058() { }
+    public void meth4059() { }
+    public void meth4060() { }
+    public void meth4061() { }
+    public void meth4062() { }
+    public void meth4063() { }
+    public void meth4064() { }
+    public void meth4065() { }
+    public void meth4066() { }
+    public void meth4067() { }
+    public void meth4068() { }
+    public void meth4069() { }
+    public void meth4070() { }
+    public void meth4071() { }
+    public void meth4072() { }
+    public void meth4073() { }
+    public void meth4074() { }
+    public void meth4075() { }
+    public void meth4076() { }
+    public void meth4077() { }
+    public void meth4078() { }
+    public void meth4079() { }
+    public void meth4080() { }
+    public void meth4081() { }
+    public void meth4082() { }
+    public void meth4083() { }
+    public void meth4084() { }
+    public void meth4085() { }
+    public void meth4086() { }
+    public void meth4087() { }
+    public void meth4088() { }
+    public void meth4089() { }
+    public void meth4090() { }
+    public void meth4091() { }
+    public void meth4092() { }
+    public void meth4093() { }
+    public void meth4094() { }
+    public void meth4095() { }
+    public void meth4096() { }
+    public void meth4097() { }
+    public void meth4098() { }
+    public void meth4099() { }
+    public void meth4100() { }
+    public void meth4101() { }
+    public void meth4102() { }
+    public void meth4103() { }
+    public void meth4104() { }
+    public void meth4105() { }
+    public void meth4106() { }
+    public void meth4107() { }
+    public void meth4108() { }
+    public void meth4109() { }
+    public void meth4110() { }
+    public void meth4111() { }
+    public void meth4112() { }
+    public void meth4113() { }
+    public void meth4114() { }
+    public void meth4115() { }
+    public void meth4116() { }
+    public void meth4117() { }
+    public void meth4118() { }
+    public void meth4119() { }
+    public void meth4120() { }
+    public void meth4121() { }
+    public void meth4122() { }
+    public void meth4123() { }
+    public void meth4124() { }
+    public void meth4125() { }
+    public void meth4126() { }
+    public void meth4127() { }
+    public void meth4128() { }
+    public void meth4129() { }
+    public void meth4130() { }
+    public void meth4131() { }
+    public void meth4132() { }
+    public void meth4133() { }
+    public void meth4134() { }
+    public void meth4135() { }
+    public void meth4136() { }
+    public void meth4137() { }
+    public void meth4138() { }
+    public void meth4139() { }
+    public void meth4140() { }
+    public void meth4141() { }
+    public void meth4142() { }
+    public void meth4143() { }
+    public void meth4144() { }
+    public void meth4145() { }
+    public void meth4146() { }
+    public void meth4147() { }
+    public void meth4148() { }
+    public void meth4149() { }
+    public void meth4150() { }
+    public void meth4151() { }
+    public void meth4152() { }
+    public void meth4153() { }
+    public void meth4154() { }
+    public void meth4155() { }
+    public void meth4156() { }
+    public void meth4157() { }
+    public void meth4158() { }
+    public void meth4159() { }
+    public void meth4160() { }
+    public void meth4161() { }
+    public void meth4162() { }
+    public void meth4163() { }
+    public void meth4164() { }
+    public void meth4165() { }
+    public void meth4166() { }
+    public void meth4167() { }
+    public void meth4168() { }
+    public void meth4169() { }
+    public void meth4170() { }
+    public void meth4171() { }
+    public void meth4172() { }
+    public void meth4173() { }
+    public void meth4174() { }
+    public void meth4175() { }
+    public void meth4176() { }
+    public void meth4177() { }
+    public void meth4178() { }
+    public void meth4179() { }
+    public void meth4180() { }
+    public void meth4181() { }
+    public void meth4182() { }
+    public void meth4183() { }
+    public void meth4184() { }
+    public void meth4185() { }
+    public void meth4186() { }
+    public void meth4187() { }
+    public void meth4188() { }
+    public void meth4189() { }
+    public void meth4190() { }
+    public void meth4191() { }
+    public void meth4192() { }
+    public void meth4193() { }
+    public void meth4194() { }
+    public void meth4195() { }
+    public void meth4196() { }
+    public void meth4197() { }
+    public void meth4198() { }
+    public void meth4199() { }
+    public void meth4200() { }
+    public void meth4201() { }
+    public void meth4202() { }
+    public void meth4203() { }
+    public void meth4204() { }
+    public void meth4205() { }
+    public void meth4206() { }
+    public void meth4207() { }
+    public void meth4208() { }
+    public void meth4209() { }
+    public void meth4210() { }
+    public void meth4211() { }
+    public void meth4212() { }
+    public void meth4213() { }
+    public void meth4214() { }
+    public void meth4215() { }
+    public void meth4216() { }
+    public void meth4217() { }
+    public void meth4218() { }
+    public void meth4219() { }
+    public void meth4220() { }
+    public void meth4221() { }
+    public void meth4222() { }
+    public void meth4223() { }
+    public void meth4224() { }
+    public void meth4225() { }
+    public void meth4226() { }
+    public void meth4227() { }
+    public void meth4228() { }
+    public void meth4229() { }
+    public void meth4230() { }
+    public void meth4231() { }
+    public void meth4232() { }
+    public void meth4233() { }
+    public void meth4234() { }
+    public void meth4235() { }
+    public void meth4236() { }
+    public void meth4237() { }
+    public void meth4238() { }
+    public void meth4239() { }
+    public void meth4240() { }
+    public void meth4241() { }
+    public void meth4242() { }
+    public void meth4243() { }
+    public void meth4244() { }
+    public void meth4245() { }
+    public void meth4246() { }
+    public void meth4247() { }
+    public void meth4248() { }
+    public void meth4249() { }
+    public void meth4250() { }
+    public void meth4251() { }
+    public void meth4252() { }
+    public void meth4253() { }
+    public void meth4254() { }
+    public void meth4255() { }
+    public void meth4256() { }
+    public void meth4257() { }
+    public void meth4258() { }
+    public void meth4259() { }
+    public void meth4260() { }
+    public void meth4261() { }
+    public void meth4262() { }
+    public void meth4263() { }
+    public void meth4264() { }
+    public void meth4265() { }
+    public void meth4266() { }
+    public void meth4267() { }
+    public void meth4268() { }
+    public void meth4269() { }
+    public void meth4270() { }
+    public void meth4271() { }
+    public void meth4272() { }
+    public void meth4273() { }
+    public void meth4274() { }
+    public void meth4275() { }
+    public void meth4276() { }
+    public void meth4277() { }
+    public void meth4278() { }
+    public void meth4279() { }
+    public void meth4280() { }
+    public void meth4281() { }
+    public void meth4282() { }
+    public void meth4283() { }
+    public void meth4284() { }
+    public void meth4285() { }
+    public void meth4286() { }
+    public void meth4287() { }
+    public void meth4288() { }
+    public void meth4289() { }
+    public void meth4290() { }
+    public void meth4291() { }
+    public void meth4292() { }
+    public void meth4293() { }
+    public void meth4294() { }
+    public void meth4295() { }
+    public void meth4296() { }
+    public void meth4297() { }
+    public void meth4298() { }
+    public void meth4299() { }
+    public void meth4300() { }
+    public void meth4301() { }
+    public void meth4302() { }
+    public void meth4303() { }
+    public void meth4304() { }
+    public void meth4305() { }
+    public void meth4306() { }
+    public void meth4307() { }
+    public void meth4308() { }
+    public void meth4309() { }
+    public void meth4310() { }
+    public void meth4311() { }
+    public void meth4312() { }
+    public void meth4313() { }
+    public void meth4314() { }
+    public void meth4315() { }
+    public void meth4316() { }
+    public void meth4317() { }
+    public void meth4318() { }
+    public void meth4319() { }
+    public void meth4320() { }
+    public void meth4321() { }
+    public void meth4322() { }
+    public void meth4323() { }
+    public void meth4324() { }
+    public void meth4325() { }
+    public void meth4326() { }
+    public void meth4327() { }
+    public void meth4328() { }
+    public void meth4329() { }
+    public void meth4330() { }
+    public void meth4331() { }
+    public void meth4332() { }
+    public void meth4333() { }
+    public void meth4334() { }
+    public void meth4335() { }
+    public void meth4336() { }
+    public void meth4337() { }
+    public void meth4338() { }
+    public void meth4339() { }
+    public void meth4340() { }
+    public void meth4341() { }
+    public void meth4342() { }
+    public void meth4343() { }
+    public void meth4344() { }
+    public void meth4345() { }
+    public void meth4346() { }
+    public void meth4347() { }
+    public void meth4348() { }
+    public void meth4349() { }
+    public void meth4350() { }
+    public void meth4351() { }
+    public void meth4352() { }
+    public void meth4353() { }
+    public void meth4354() { }
+    public void meth4355() { }
+    public void meth4356() { }
+    public void meth4357() { }
+    public void meth4358() { }
+    public void meth4359() { }
+    public void meth4360() { }
+    public void meth4361() { }
+    public void meth4362() { }
+    public void meth4363() { }
+    public void meth4364() { }
+    public void meth4365() { }
+    public void meth4366() { }
+    public void meth4367() { }
+    public void meth4368() { }
+    public void meth4369() { }
+    public void meth4370() { }
+    public void meth4371() { }
+    public void meth4372() { }
+    public void meth4373() { }
+    public void meth4374() { }
+    public void meth4375() { }
+    public void meth4376() { }
+    public void meth4377() { }
+    public void meth4378() { }
+    public void meth4379() { }
+    public void meth4380() { }
+    public void meth4381() { }
+    public void meth4382() { }
+    public void meth4383() { }
+    public void meth4384() { }
+    public void meth4385() { }
+    public void meth4386() { }
+    public void meth4387() { }
+    public void meth4388() { }
+    public void meth4389() { }
+    public void meth4390() { }
+    public void meth4391() { }
+    public void meth4392() { }
+    public void meth4393() { }
+    public void meth4394() { }
+    public void meth4395() { }
+    public void meth4396() { }
+    public void meth4397() { }
+    public void meth4398() { }
+    public void meth4399() { }
+    public void meth4400() { }
+    public void meth4401() { }
+    public void meth4402() { }
+    public void meth4403() { }
+    public void meth4404() { }
+    public void meth4405() { }
+    public void meth4406() { }
+    public void meth4407() { }
+    public void meth4408() { }
+    public void meth4409() { }
+    public void meth4410() { }
+    public void meth4411() { }
+    public void meth4412() { }
+    public void meth4413() { }
+    public void meth4414() { }
+    public void meth4415() { }
+    public void meth4416() { }
+    public void meth4417() { }
+    public void meth4418() { }
+    public void meth4419() { }
+    public void meth4420() { }
+    public void meth4421() { }
+    public void meth4422() { }
+    public void meth4423() { }
+    public void meth4424() { }
+    public void meth4425() { }
+    public void meth4426() { }
+    public void meth4427() { }
+    public void meth4428() { }
+    public void meth4429() { }
+    public void meth4430() { }
+    public void meth4431() { }
+    public void meth4432() { }
+    public void meth4433() { }
+    public void meth4434() { }
+    public void meth4435() { }
+    public void meth4436() { }
+    public void meth4437() { }
+    public void meth4438() { }
+    public void meth4439() { }
+    public void meth4440() { }
+    public void meth4441() { }
+    public void meth4442() { }
+    public void meth4443() { }
+    public void meth4444() { }
+    public void meth4445() { }
+    public void meth4446() { }
+    public void meth4447() { }
+    public void meth4448() { }
+    public void meth4449() { }
+    public void meth4450() { }
+    public void meth4451() { }
+    public void meth4452() { }
+    public void meth4453() { }
+    public void meth4454() { }
+    public void meth4455() { }
+    public void meth4456() { }
+    public void meth4457() { }
+    public void meth4458() { }
+    public void meth4459() { }
+    public void meth4460() { }
+    public void meth4461() { }
+    public void meth4462() { }
+    public void meth4463() { }
+    public void meth4464() { }
+    public void meth4465() { }
+    public void meth4466() { }
+    public void meth4467() { }
+    public void meth4468() { }
+    public void meth4469() { }
+    public void meth4470() { }
+    public void meth4471() { }
+    public void meth4472() { }
+    public void meth4473() { }
+    public void meth4474() { }
+    public void meth4475() { }
+    public void meth4476() { }
+    public void meth4477() { }
+    public void meth4478() { }
+    public void meth4479() { }
+    public void meth4480() { }
+    public void meth4481() { }
+    public void meth4482() { }
+    public void meth4483() { }
+    public void meth4484() { }
+    public void meth4485() { }
+    public void meth4486() { }
+    public void meth4487() { }
+    public void meth4488() { }
+    public void meth4489() { }
+    public void meth4490() { }
+    public void meth4491() { }
+    public void meth4492() { }
+    public void meth4493() { }
+    public void meth4494() { }
+    public void meth4495() { }
+    public void meth4496() { }
+    public void meth4497() { }
+    public void meth4498() { }
+    public void meth4499() { }
+    public void meth4500() { }
+    public void meth4501() { }
+    public void meth4502() { }
+    public void meth4503() { }
+    public void meth4504() { }
+    public void meth4505() { }
+    public void meth4506() { }
+    public void meth4507() { }
+    public void meth4508() { }
+    public void meth4509() { }
+    public void meth4510() { }
+    public void meth4511() { }
+    public void meth4512() { }
+    public void meth4513() { }
+    public void meth4514() { }
+    public void meth4515() { }
+    public void meth4516() { }
+    public void meth4517() { }
+    public void meth4518() { }
+    public void meth4519() { }
+    public void meth4520() { }
+    public void meth4521() { }
+    public void meth4522() { }
+    public void meth4523() { }
+    public void meth4524() { }
+    public void meth4525() { }
+    public void meth4526() { }
+    public void meth4527() { }
+    public void meth4528() { }
+    public void meth4529() { }
+    public void meth4530() { }
+    public void meth4531() { }
+    public void meth4532() { }
+    public void meth4533() { }
+    public void meth4534() { }
+    public void meth4535() { }
+    public void meth4536() { }
+    public void meth4537() { }
+    public void meth4538() { }
+    public void meth4539() { }
+    public void meth4540() { }
+    public void meth4541() { }
+    public void meth4542() { }
+    public void meth4543() { }
+    public void meth4544() { }
+    public void meth4545() { }
+    public void meth4546() { }
+    public void meth4547() { }
+    public void meth4548() { }
+    public void meth4549() { }
+    public void meth4550() { }
+    public void meth4551() { }
+    public void meth4552() { }
+    public void meth4553() { }
+    public void meth4554() { }
+    public void meth4555() { }
+    public void meth4556() { }
+    public void meth4557() { }
+    public void meth4558() { }
+    public void meth4559() { }
+    public void meth4560() { }
+    public void meth4561() { }
+    public void meth4562() { }
+    public void meth4563() { }
+    public void meth4564() { }
+    public void meth4565() { }
+    public void meth4566() { }
+    public void meth4567() { }
+    public void meth4568() { }
+    public void meth4569() { }
+    public void meth4570() { }
+    public void meth4571() { }
+    public void meth4572() { }
+    public void meth4573() { }
+    public void meth4574() { }
+    public void meth4575() { }
+    public void meth4576() { }
+    public void meth4577() { }
+    public void meth4578() { }
+    public void meth4579() { }
+    public void meth4580() { }
+    public void meth4581() { }
+    public void meth4582() { }
+    public void meth4583() { }
+    public void meth4584() { }
+    public void meth4585() { }
+    public void meth4586() { }
+    public void meth4587() { }
+    public void meth4588() { }
+    public void meth4589() { }
+    public void meth4590() { }
+    public void meth4591() { }
+    public void meth4592() { }
+    public void meth4593() { }
+    public void meth4594() { }
+    public void meth4595() { }
+    public void meth4596() { }
+    public void meth4597() { }
+    public void meth4598() { }
+    public void meth4599() { }
+    public void meth4600() { }
+    public void meth4601() { }
+    public void meth4602() { }
+    public void meth4603() { }
+    public void meth4604() { }
+    public void meth4605() { }
+    public void meth4606() { }
+    public void meth4607() { }
+    public void meth4608() { }
+    public void meth4609() { }
+    public void meth4610() { }
+    public void meth4611() { }
+    public void meth4612() { }
+    public void meth4613() { }
+    public void meth4614() { }
+    public void meth4615() { }
+    public void meth4616() { }
+    public void meth4617() { }
+    public void meth4618() { }
+    public void meth4619() { }
+    public void meth4620() { }
+    public void meth4621() { }
+    public void meth4622() { }
+    public void meth4623() { }
+    public void meth4624() { }
+    public void meth4625() { }
+    public void meth4626() { }
+    public void meth4627() { }
+    public void meth4628() { }
+    public void meth4629() { }
+    public void meth4630() { }
+    public void meth4631() { }
+    public void meth4632() { }
+    public void meth4633() { }
+    public void meth4634() { }
+    public void meth4635() { }
+    public void meth4636() { }
+    public void meth4637() { }
+    public void meth4638() { }
+    public void meth4639() { }
+    public void meth4640() { }
+    public void meth4641() { }
+    public void meth4642() { }
+    public void meth4643() { }
+    public void meth4644() { }
+    public void meth4645() { }
+    public void meth4646() { }
+    public void meth4647() { }
+    public void meth4648() { }
+    public void meth4649() { }
+    public void meth4650() { }
+    public void meth4651() { }
+    public void meth4652() { }
+    public void meth4653() { }
+    public void meth4654() { }
+    public void meth4655() { }
+    public void meth4656() { }
+    public void meth4657() { }
+    public void meth4658() { }
+    public void meth4659() { }
+    public void meth4660() { }
+    public void meth4661() { }
+    public void meth4662() { }
+    public void meth4663() { }
+    public void meth4664() { }
+    public void meth4665() { }
+    public void meth4666() { }
+    public void meth4667() { }
+    public void meth4668() { }
+    public void meth4669() { }
+    public void meth4670() { }
+    public void meth4671() { }
+    public void meth4672() { }
+    public void meth4673() { }
+    public void meth4674() { }
+    public void meth4675() { }
+    public void meth4676() { }
+    public void meth4677() { }
+    public void meth4678() { }
+    public void meth4679() { }
+    public void meth4680() { }
+    public void meth4681() { }
+    public void meth4682() { }
+    public void meth4683() { }
+    public void meth4684() { }
+    public void meth4685() { }
+    public void meth4686() { }
+    public void meth4687() { }
+    public void meth4688() { }
+    public void meth4689() { }
+    public void meth4690() { }
+    public void meth4691() { }
+    public void meth4692() { }
+    public void meth4693() { }
+    public void meth4694() { }
+    public void meth4695() { }
+    public void meth4696() { }
+    public void meth4697() { }
+    public void meth4698() { }
+    public void meth4699() { }
+    public void meth4700() { }
+    public void meth4701() { }
+    public void meth4702() { }
+    public void meth4703() { }
+    public void meth4704() { }
+    public void meth4705() { }
+    public void meth4706() { }
+    public void meth4707() { }
+    public void meth4708() { }
+    public void meth4709() { }
+    public void meth4710() { }
+    public void meth4711() { }
+    public void meth4712() { }
+    public void meth4713() { }
+    public void meth4714() { }
+    public void meth4715() { }
+    public void meth4716() { }
+    public void meth4717() { }
+    public void meth4718() { }
+    public void meth4719() { }
+    public void meth4720() { }
+    public void meth4721() { }
+    public void meth4722() { }
+    public void meth4723() { }
+    public void meth4724() { }
+    public void meth4725() { }
+    public void meth4726() { }
+    public void meth4727() { }
+    public void meth4728() { }
+    public void meth4729() { }
+    public void meth4730() { }
+    public void meth4731() { }
+    public void meth4732() { }
+    public void meth4733() { }
+    public void meth4734() { }
+    public void meth4735() { }
+    public void meth4736() { }
+    public void meth4737() { }
+    public void meth4738() { }
+    public void meth4739() { }
+    public void meth4740() { }
+    public void meth4741() { }
+    public void meth4742() { }
+    public void meth4743() { }
+    public void meth4744() { }
+    public void meth4745() { }
+    public void meth4746() { }
+    public void meth4747() { }
+    public void meth4748() { }
+    public void meth4749() { }
+    public void meth4750() { }
+    public void meth4751() { }
+    public void meth4752() { }
+    public void meth4753() { }
+    public void meth4754() { }
+    public void meth4755() { }
+    public void meth4756() { }
+    public void meth4757() { }
+    public void meth4758() { }
+    public void meth4759() { }
+    public void meth4760() { }
+    public void meth4761() { }
+    public void meth4762() { }
+    public void meth4763() { }
+    public void meth4764() { }
+    public void meth4765() { }
+    public void meth4766() { }
+    public void meth4767() { }
+    public void meth4768() { }
+    public void meth4769() { }
+    public void meth4770() { }
+    public void meth4771() { }
+    public void meth4772() { }
+    public void meth4773() { }
+    public void meth4774() { }
+    public void meth4775() { }
+    public void meth4776() { }
+    public void meth4777() { }
+    public void meth4778() { }
+    public void meth4779() { }
+    public void meth4780() { }
+    public void meth4781() { }
+    public void meth4782() { }
+    public void meth4783() { }
+    public void meth4784() { }
+    public void meth4785() { }
+    public void meth4786() { }
+    public void meth4787() { }
+    public void meth4788() { }
+    public void meth4789() { }
+    public void meth4790() { }
+    public void meth4791() { }
+    public void meth4792() { }
+    public void meth4793() { }
+    public void meth4794() { }
+    public void meth4795() { }
+    public void meth4796() { }
+    public void meth4797() { }
+    public void meth4798() { }
+    public void meth4799() { }
+    public void meth4800() { }
+    public void meth4801() { }
+    public void meth4802() { }
+    public void meth4803() { }
+    public void meth4804() { }
+    public void meth4805() { }
+    public void meth4806() { }
+    public void meth4807() { }
+    public void meth4808() { }
+    public void meth4809() { }
+    public void meth4810() { }
+    public void meth4811() { }
+    public void meth4812() { }
+    public void meth4813() { }
+    public void meth4814() { }
+    public void meth4815() { }
+    public void meth4816() { }
+    public void meth4817() { }
+    public void meth4818() { }
+    public void meth4819() { }
+    public void meth4820() { }
+    public void meth4821() { }
+    public void meth4822() { }
+    public void meth4823() { }
+    public void meth4824() { }
+    public void meth4825() { }
+    public void meth4826() { }
+    public void meth4827() { }
+    public void meth4828() { }
+    public void meth4829() { }
+    public void meth4830() { }
+    public void meth4831() { }
+    public void meth4832() { }
+    public void meth4833() { }
+    public void meth4834() { }
+    public void meth4835() { }
+    public void meth4836() { }
+    public void meth4837() { }
+    public void meth4838() { }
+    public void meth4839() { }
+    public void meth4840() { }
+    public void meth4841() { }
+    public void meth4842() { }
+    public void meth4843() { }
+    public void meth4844() { }
+    public void meth4845() { }
+    public void meth4846() { }
+    public void meth4847() { }
+    public void meth4848() { }
+    public void meth4849() { }
+    public void meth4850() { }
+    public void meth4851() { }
+    public void meth4852() { }
+    public void meth4853() { }
+    public void meth4854() { }
+    public void meth4855() { }
+    public void meth4856() { }
+    public void meth4857() { }
+    public void meth4858() { }
+    public void meth4859() { }
+    public void meth4860() { }
+    public void meth4861() { }
+    public void meth4862() { }
+    public void meth4863() { }
+    public void meth4864() { }
+    public void meth4865() { }
+    public void meth4866() { }
+    public void meth4867() { }
+    public void meth4868() { }
+    public void meth4869() { }
+    public void meth4870() { }
+    public void meth4871() { }
+    public void meth4872() { }
+    public void meth4873() { }
+    public void meth4874() { }
+    public void meth4875() { }
+    public void meth4876() { }
+    public void meth4877() { }
+    public void meth4878() { }
+    public void meth4879() { }
+    public void meth4880() { }
+    public void meth4881() { }
+    public void meth4882() { }
+    public void meth4883() { }
+    public void meth4884() { }
+    public void meth4885() { }
+    public void meth4886() { }
+    public void meth4887() { }
+    public void meth4888() { }
+    public void meth4889() { }
+    public void meth4890() { }
+    public void meth4891() { }
+    public void meth4892() { }
+    public void meth4893() { }
+    public void meth4894() { }
+    public void meth4895() { }
+    public void meth4896() { }
+    public void meth4897() { }
+    public void meth4898() { }
+    public void meth4899() { }
+    public void meth4900() { }
+    public void meth4901() { }
+    public void meth4902() { }
+    public void meth4903() { }
+    public void meth4904() { }
+    public void meth4905() { }
+    public void meth4906() { }
+    public void meth4907() { }
+    public void meth4908() { }
+    public void meth4909() { }
+    public void meth4910() { }
+    public void meth4911() { }
+    public void meth4912() { }
+    public void meth4913() { }
+    public void meth4914() { }
+    public void meth4915() { }
+    public void meth4916() { }
+    public void meth4917() { }
+    public void meth4918() { }
+    public void meth4919() { }
+    public void meth4920() { }
+    public void meth4921() { }
+    public void meth4922() { }
+    public void meth4923() { }
+    public void meth4924() { }
+    public void meth4925() { }
+    public void meth4926() { }
+    public void meth4927() { }
+    public void meth4928() { }
+    public void meth4929() { }
+    public void meth4930() { }
+    public void meth4931() { }
+    public void meth4932() { }
+    public void meth4933() { }
+    public void meth4934() { }
+    public void meth4935() { }
+    public void meth4936() { }
+    public void meth4937() { }
+    public void meth4938() { }
+    public void meth4939() { }
+    public void meth4940() { }
+    public void meth4941() { }
+    public void meth4942() { }
+    public void meth4943() { }
+    public void meth4944() { }
+    public void meth4945() { }
+    public void meth4946() { }
+    public void meth4947() { }
+    public void meth4948() { }
+    public void meth4949() { }
+    public void meth4950() { }
+    public void meth4951() { }
+    public void meth4952() { }
+    public void meth4953() { }
+    public void meth4954() { }
+    public void meth4955() { }
+    public void meth4956() { }
+    public void meth4957() { }
+    public void meth4958() { }
+    public void meth4959() { }
+    public void meth4960() { }
+    public void meth4961() { }
+    public void meth4962() { }
+    public void meth4963() { }
+    public void meth4964() { }
+    public void meth4965() { }
+    public void meth4966() { }
+    public void meth4967() { }
+    public void meth4968() { }
+    public void meth4969() { }
+    public void meth4970() { }
+    public void meth4971() { }
+    public void meth4972() { }
+    public void meth4973() { }
+    public void meth4974() { }
+    public void meth4975() { }
+    public void meth4976() { }
+    public void meth4977() { }
+    public void meth4978() { }
+    public void meth4979() { }
+    public void meth4980() { }
+    public void meth4981() { }
+    public void meth4982() { }
+    public void meth4983() { }
+    public void meth4984() { }
+    public void meth4985() { }
+    public void meth4986() { }
+    public void meth4987() { }
+    public void meth4988() { }
+    public void meth4989() { }
+    public void meth4990() { }
+    public void meth4991() { }
+    public void meth4992() { }
+    public void meth4993() { }
+    public void meth4994() { }
+    public void meth4995() { }
+    public void meth4996() { }
+    public void meth4997() { }
+    public void meth4998() { }
+    public void meth4999() { }
+    public void meth5000() { }
+    public void meth5001() { }
+    public void meth5002() { }
+    public void meth5003() { }
+    public void meth5004() { }
+    public void meth5005() { }
+    public void meth5006() { }
+    public void meth5007() { }
+    public void meth5008() { }
+    public void meth5009() { }
+    public void meth5010() { }
+    public void meth5011() { }
+    public void meth5012() { }
+    public void meth5013() { }
+    public void meth5014() { }
+    public void meth5015() { }
+    public void meth5016() { }
+    public void meth5017() { }
+    public void meth5018() { }
+    public void meth5019() { }
+    public void meth5020() { }
+    public void meth5021() { }
+    public void meth5022() { }
+    public void meth5023() { }
+    public void meth5024() { }
+    public void meth5025() { }
+    public void meth5026() { }
+    public void meth5027() { }
+    public void meth5028() { }
+    public void meth5029() { }
+    public void meth5030() { }
+    public void meth5031() { }
+    public void meth5032() { }
+    public void meth5033() { }
+    public void meth5034() { }
+    public void meth5035() { }
+    public void meth5036() { }
+    public void meth5037() { }
+    public void meth5038() { }
+    public void meth5039() { }
+    public void meth5040() { }
+    public void meth5041() { }
+    public void meth5042() { }
+    public void meth5043() { }
+    public void meth5044() { }
+    public void meth5045() { }
+    public void meth5046() { }
+    public void meth5047() { }
+    public void meth5048() { }
+    public void meth5049() { }
+    public void meth5050() { }
+    public void meth5051() { }
+    public void meth5052() { }
+    public void meth5053() { }
+    public void meth5054() { }
+    public void meth5055() { }
+    public void meth5056() { }
+    public void meth5057() { }
+    public void meth5058() { }
+    public void meth5059() { }
+    public void meth5060() { }
+    public void meth5061() { }
+    public void meth5062() { }
+    public void meth5063() { }
+    public void meth5064() { }
+    public void meth5065() { }
+    public void meth5066() { }
+    public void meth5067() { }
+    public void meth5068() { }
+    public void meth5069() { }
+    public void meth5070() { }
+    public void meth5071() { }
+    public void meth5072() { }
+    public void meth5073() { }
+    public void meth5074() { }
+    public void meth5075() { }
+    public void meth5076() { }
+    public void meth5077() { }
+    public void meth5078() { }
+    public void meth5079() { }
+    public void meth5080() { }
+    public void meth5081() { }
+    public void meth5082() { }
+    public void meth5083() { }
+    public void meth5084() { }
+    public void meth5085() { }
+    public void meth5086() { }
+    public void meth5087() { }
+    public void meth5088() { }
+    public void meth5089() { }
+    public void meth5090() { }
+    public void meth5091() { }
+    public void meth5092() { }
+    public void meth5093() { }
+    public void meth5094() { }
+    public void meth5095() { }
+    public void meth5096() { }
+    public void meth5097() { }
+    public void meth5098() { }
+    public void meth5099() { }
+    public void meth5100() { }
+    public void meth5101() { }
+    public void meth5102() { }
+    public void meth5103() { }
+    public void meth5104() { }
+    public void meth5105() { }
+    public void meth5106() { }
+    public void meth5107() { }
+    public void meth5108() { }
+    public void meth5109() { }
+    public void meth5110() { }
+    public void meth5111() { }
+    public void meth5112() { }
+    public void meth5113() { }
+    public void meth5114() { }
+    public void meth5115() { }
+    public void meth5116() { }
+    public void meth5117() { }
+    public void meth5118() { }
+    public void meth5119() { }
+    public void meth5120() { }
+    public void meth5121() { }
+    public void meth5122() { }
+    public void meth5123() { }
+    public void meth5124() { }
+    public void meth5125() { }
+    public void meth5126() { }
+    public void meth5127() { }
+    public void meth5128() { }
+    public void meth5129() { }
+    public void meth5130() { }
+    public void meth5131() { }
+    public void meth5132() { }
+    public void meth5133() { }
+    public void meth5134() { }
+    public void meth5135() { }
+    public void meth5136() { }
+    public void meth5137() { }
+    public void meth5138() { }
+    public void meth5139() { }
+    public void meth5140() { }
+    public void meth5141() { }
+    public void meth5142() { }
+    public void meth5143() { }
+    public void meth5144() { }
+    public void meth5145() { }
+    public void meth5146() { }
+    public void meth5147() { }
+    public void meth5148() { }
+    public void meth5149() { }
+    public void meth5150() { }
+    public void meth5151() { }
+    public void meth5152() { }
+    public void meth5153() { }
+    public void meth5154() { }
+    public void meth5155() { }
+    public void meth5156() { }
+    public void meth5157() { }
+    public void meth5158() { }
+    public void meth5159() { }
+    public void meth5160() { }
+    public void meth5161() { }
+    public void meth5162() { }
+    public void meth5163() { }
+    public void meth5164() { }
+    public void meth5165() { }
+    public void meth5166() { }
+    public void meth5167() { }
+    public void meth5168() { }
+    public void meth5169() { }
+    public void meth5170() { }
+    public void meth5171() { }
+    public void meth5172() { }
+    public void meth5173() { }
+    public void meth5174() { }
+    public void meth5175() { }
+    public void meth5176() { }
+    public void meth5177() { }
+    public void meth5178() { }
+    public void meth5179() { }
+    public void meth5180() { }
+    public void meth5181() { }
+    public void meth5182() { }
+    public void meth5183() { }
+    public void meth5184() { }
+    public void meth5185() { }
+    public void meth5186() { }
+    public void meth5187() { }
+    public void meth5188() { }
+    public void meth5189() { }
+    public void meth5190() { }
+    public void meth5191() { }
+    public void meth5192() { }
+    public void meth5193() { }
+    public void meth5194() { }
+    public void meth5195() { }
+    public void meth5196() { }
+    public void meth5197() { }
+    public void meth5198() { }
+    public void meth5199() { }
+    public void meth5200() { }
+    public void meth5201() { }
+    public void meth5202() { }
+    public void meth5203() { }
+    public void meth5204() { }
+    public void meth5205() { }
+    public void meth5206() { }
+    public void meth5207() { }
+    public void meth5208() { }
+    public void meth5209() { }
+    public void meth5210() { }
+    public void meth5211() { }
+    public void meth5212() { }
+    public void meth5213() { }
+    public void meth5214() { }
+    public void meth5215() { }
+    public void meth5216() { }
+    public void meth5217() { }
+    public void meth5218() { }
+    public void meth5219() { }
+    public void meth5220() { }
+    public void meth5221() { }
+    public void meth5222() { }
+    public void meth5223() { }
+    public void meth5224() { }
+    public void meth5225() { }
+    public void meth5226() { }
+    public void meth5227() { }
+    public void meth5228() { }
+    public void meth5229() { }
+    public void meth5230() { }
+    public void meth5231() { }
+    public void meth5232() { }
+    public void meth5233() { }
+    public void meth5234() { }
+    public void meth5235() { }
+    public void meth5236() { }
+    public void meth5237() { }
+    public void meth5238() { }
+    public void meth5239() { }
+    public void meth5240() { }
+    public void meth5241() { }
+    public void meth5242() { }
+    public void meth5243() { }
+    public void meth5244() { }
+    public void meth5245() { }
+    public void meth5246() { }
+    public void meth5247() { }
+    public void meth5248() { }
+    public void meth5249() { }
+    public void meth5250() { }
+    public void meth5251() { }
+    public void meth5252() { }
+    public void meth5253() { }
+    public void meth5254() { }
+    public void meth5255() { }
+    public void meth5256() { }
+    public void meth5257() { }
+    public void meth5258() { }
+    public void meth5259() { }
+    public void meth5260() { }
+    public void meth5261() { }
+    public void meth5262() { }
+    public void meth5263() { }
+    public void meth5264() { }
+    public void meth5265() { }
+    public void meth5266() { }
+    public void meth5267() { }
+    public void meth5268() { }
+    public void meth5269() { }
+    public void meth5270() { }
+    public void meth5271() { }
+    public void meth5272() { }
+    public void meth5273() { }
+    public void meth5274() { }
+    public void meth5275() { }
+    public void meth5276() { }
+    public void meth5277() { }
+    public void meth5278() { }
+    public void meth5279() { }
+    public void meth5280() { }
+    public void meth5281() { }
+    public void meth5282() { }
+    public void meth5283() { }
+    public void meth5284() { }
+    public void meth5285() { }
+    public void meth5286() { }
+    public void meth5287() { }
+    public void meth5288() { }
+    public void meth5289() { }
+    public void meth5290() { }
+    public void meth5291() { }
+    public void meth5292() { }
+    public void meth5293() { }
+    public void meth5294() { }
+    public void meth5295() { }
+    public void meth5296() { }
+    public void meth5297() { }
+    public void meth5298() { }
+    public void meth5299() { }
+    public void meth5300() { }
+    public void meth5301() { }
+    public void meth5302() { }
+    public void meth5303() { }
+    public void meth5304() { }
+    public void meth5305() { }
+    public void meth5306() { }
+    public void meth5307() { }
+    public void meth5308() { }
+    public void meth5309() { }
+    public void meth5310() { }
+    public void meth5311() { }
+    public void meth5312() { }
+    public void meth5313() { }
+    public void meth5314() { }
+    public void meth5315() { }
+    public void meth5316() { }
+    public void meth5317() { }
+    public void meth5318() { }
+    public void meth5319() { }
+    public void meth5320() { }
+    public void meth5321() { }
+    public void meth5322() { }
+    public void meth5323() { }
+    public void meth5324() { }
+    public void meth5325() { }
+    public void meth5326() { }
+    public void meth5327() { }
+    public void meth5328() { }
+    public void meth5329() { }
+    public void meth5330() { }
+    public void meth5331() { }
+    public void meth5332() { }
+    public void meth5333() { }
+    public void meth5334() { }
+    public void meth5335() { }
+    public void meth5336() { }
+    public void meth5337() { }
+    public void meth5338() { }
+    public void meth5339() { }
+    public void meth5340() { }
+    public void meth5341() { }
+    public void meth5342() { }
+    public void meth5343() { }
+    public void meth5344() { }
+    public void meth5345() { }
+    public void meth5346() { }
+    public void meth5347() { }
+    public void meth5348() { }
+    public void meth5349() { }
+    public void meth5350() { }
+    public void meth5351() { }
+    public void meth5352() { }
+    public void meth5353() { }
+    public void meth5354() { }
+    public void meth5355() { }
+    public void meth5356() { }
+    public void meth5357() { }
+    public void meth5358() { }
+    public void meth5359() { }
+    public void meth5360() { }
+    public void meth5361() { }
+    public void meth5362() { }
+    public void meth5363() { }
+    public void meth5364() { }
+    public void meth5365() { }
+    public void meth5366() { }
+    public void meth5367() { }
+    public void meth5368() { }
+    public void meth5369() { }
+    public void meth5370() { }
+    public void meth5371() { }
+    public void meth5372() { }
+    public void meth5373() { }
+    public void meth5374() { }
+    public void meth5375() { }
+    public void meth5376() { }
+    public void meth5377() { }
+    public void meth5378() { }
+    public void meth5379() { }
+    public void meth5380() { }
+    public void meth5381() { }
+    public void meth5382() { }
+    public void meth5383() { }
+    public void meth5384() { }
+    public void meth5385() { }
+    public void meth5386() { }
+    public void meth5387() { }
+    public void meth5388() { }
+    public void meth5389() { }
+    public void meth5390() { }
+    public void meth5391() { }
+    public void meth5392() { }
+    public void meth5393() { }
+    public void meth5394() { }
+    public void meth5395() { }
+    public void meth5396() { }
+    public void meth5397() { }
+    public void meth5398() { }
+    public void meth5399() { }
+    public void meth5400() { }
+    public void meth5401() { }
+    public void meth5402() { }
+    public void meth5403() { }
+    public void meth5404() { }
+    public void meth5405() { }
+    public void meth5406() { }
+    public void meth5407() { }
+    public void meth5408() { }
+    public void meth5409() { }
+    public void meth5410() { }
+    public void meth5411() { }
+    public void meth5412() { }
+    public void meth5413() { }
+    public void meth5414() { }
+    public void meth5415() { }
+    public void meth5416() { }
+    public void meth5417() { }
+    public void meth5418() { }
+    public void meth5419() { }
+    public void meth5420() { }
+    public void meth5421() { }
+    public void meth5422() { }
+    public void meth5423() { }
+    public void meth5424() { }
+    public void meth5425() { }
+    public void meth5426() { }
+    public void meth5427() { }
+    public void meth5428() { }
+    public void meth5429() { }
+    public void meth5430() { }
+    public void meth5431() { }
+    public void meth5432() { }
+    public void meth5433() { }
+    public void meth5434() { }
+    public void meth5435() { }
+    public void meth5436() { }
+    public void meth5437() { }
+    public void meth5438() { }
+    public void meth5439() { }
+    public void meth5440() { }
+    public void meth5441() { }
+    public void meth5442() { }
+    public void meth5443() { }
+    public void meth5444() { }
+    public void meth5445() { }
+    public void meth5446() { }
+    public void meth5447() { }
+    public void meth5448() { }
+    public void meth5449() { }
+    public void meth5450() { }
+    public void meth5451() { }
+    public void meth5452() { }
+    public void meth5453() { }
+    public void meth5454() { }
+    public void meth5455() { }
+    public void meth5456() { }
+    public void meth5457() { }
+    public void meth5458() { }
+    public void meth5459() { }
+    public void meth5460() { }
+    public void meth5461() { }
+    public void meth5462() { }
+    public void meth5463() { }
+    public void meth5464() { }
+    public void meth5465() { }
+    public void meth5466() { }
+    public void meth5467() { }
+    public void meth5468() { }
+    public void meth5469() { }
+    public void meth5470() { }
+    public void meth5471() { }
+    public void meth5472() { }
+    public void meth5473() { }
+    public void meth5474() { }
+    public void meth5475() { }
+    public void meth5476() { }
+    public void meth5477() { }
+    public void meth5478() { }
+    public void meth5479() { }
+    public void meth5480() { }
+    public void meth5481() { }
+    public void meth5482() { }
+    public void meth5483() { }
+    public void meth5484() { }
+    public void meth5485() { }
+    public void meth5486() { }
+    public void meth5487() { }
+    public void meth5488() { }
+    public void meth5489() { }
+    public void meth5490() { }
+    public void meth5491() { }
+    public void meth5492() { }
+    public void meth5493() { }
+    public void meth5494() { }
+    public void meth5495() { }
+    public void meth5496() { }
+    public void meth5497() { }
+    public void meth5498() { }
+    public void meth5499() { }
+    public void meth5500() { }
+    public void meth5501() { }
+    public void meth5502() { }
+    public void meth5503() { }
+    public void meth5504() { }
+    public void meth5505() { }
+    public void meth5506() { }
+    public void meth5507() { }
+    public void meth5508() { }
+    public void meth5509() { }
+    public void meth5510() { }
+    public void meth5511() { }
+    public void meth5512() { }
+    public void meth5513() { }
+    public void meth5514() { }
+    public void meth5515() { }
+    public void meth5516() { }
+    public void meth5517() { }
+    public void meth5518() { }
+    public void meth5519() { }
+    public void meth5520() { }
+    public void meth5521() { }
+    public void meth5522() { }
+    public void meth5523() { }
+    public void meth5524() { }
+    public void meth5525() { }
+    public void meth5526() { }
+    public void meth5527() { }
+    public void meth5528() { }
+    public void meth5529() { }
+    public void meth5530() { }
+    public void meth5531() { }
+    public void meth5532() { }
+    public void meth5533() { }
+    public void meth5534() { }
+    public void meth5535() { }
+    public void meth5536() { }
+    public void meth5537() { }
+    public void meth5538() { }
+    public void meth5539() { }
+    public void meth5540() { }
+    public void meth5541() { }
+    public void meth5542() { }
+    public void meth5543() { }
+    public void meth5544() { }
+    public void meth5545() { }
+    public void meth5546() { }
+    public void meth5547() { }
+    public void meth5548() { }
+    public void meth5549() { }
+    public void meth5550() { }
+    public void meth5551() { }
+    public void meth5552() { }
+    public void meth5553() { }
+    public void meth5554() { }
+    public void meth5555() { }
+    public void meth5556() { }
+    public void meth5557() { }
+    public void meth5558() { }
+    public void meth5559() { }
+    public void meth5560() { }
+    public void meth5561() { }
+    public void meth5562() { }
+    public void meth5563() { }
+    public void meth5564() { }
+    public void meth5565() { }
+    public void meth5566() { }
+    public void meth5567() { }
+    public void meth5568() { }
+    public void meth5569() { }
+    public void meth5570() { }
+    public void meth5571() { }
+    public void meth5572() { }
+    public void meth5573() { }
+    public void meth5574() { }
+    public void meth5575() { }
+    public void meth5576() { }
+    public void meth5577() { }
+    public void meth5578() { }
+    public void meth5579() { }
+    public void meth5580() { }
+    public void meth5581() { }
+    public void meth5582() { }
+    public void meth5583() { }
+    public void meth5584() { }
+    public void meth5585() { }
+    public void meth5586() { }
+    public void meth5587() { }
+    public void meth5588() { }
+    public void meth5589() { }
+    public void meth5590() { }
+    public void meth5591() { }
+    public void meth5592() { }
+    public void meth5593() { }
+    public void meth5594() { }
+    public void meth5595() { }
+    public void meth5596() { }
+    public void meth5597() { }
+    public void meth5598() { }
+    public void meth5599() { }
+    public void meth5600() { }
+    public void meth5601() { }
+    public void meth5602() { }
+    public void meth5603() { }
+    public void meth5604() { }
+    public void meth5605() { }
+    public void meth5606() { }
+    public void meth5607() { }
+    public void meth5608() { }
+    public void meth5609() { }
+    public void meth5610() { }
+    public void meth5611() { }
+    public void meth5612() { }
+    public void meth5613() { }
+    public void meth5614() { }
+    public void meth5615() { }
+    public void meth5616() { }
+    public void meth5617() { }
+    public void meth5618() { }
+    public void meth5619() { }
+    public void meth5620() { }
+    public void meth5621() { }
+    public void meth5622() { }
+    public void meth5623() { }
+    public void meth5624() { }
+    public void meth5625() { }
+    public void meth5626() { }
+    public void meth5627() { }
+    public void meth5628() { }
+    public void meth5629() { }
+    public void meth5630() { }
+    public void meth5631() { }
+    public void meth5632() { }
+    public void meth5633() { }
+    public void meth5634() { }
+    public void meth5635() { }
+    public void meth5636() { }
+    public void meth5637() { }
+    public void meth5638() { }
+    public void meth5639() { }
+    public void meth5640() { }
+    public void meth5641() { }
+    public void meth5642() { }
+    public void meth5643() { }
+    public void meth5644() { }
+    public void meth5645() { }
+    public void meth5646() { }
+    public void meth5647() { }
+    public void meth5648() { }
+    public void meth5649() { }
+    public void meth5650() { }
+    public void meth5651() { }
+    public void meth5652() { }
+    public void meth5653() { }
+    public void meth5654() { }
+    public void meth5655() { }
+    public void meth5656() { }
+    public void meth5657() { }
+    public void meth5658() { }
+    public void meth5659() { }
+    public void meth5660() { }
+    public void meth5661() { }
+    public void meth5662() { }
+    public void meth5663() { }
+    public void meth5664() { }
+    public void meth5665() { }
+    public void meth5666() { }
+    public void meth5667() { }
+    public void meth5668() { }
+    public void meth5669() { }
+    public void meth5670() { }
+    public void meth5671() { }
+    public void meth5672() { }
+    public void meth5673() { }
+    public void meth5674() { }
+    public void meth5675() { }
+    public void meth5676() { }
+    public void meth5677() { }
+    public void meth5678() { }
+    public void meth5679() { }
+    public void meth5680() { }
+    public void meth5681() { }
+    public void meth5682() { }
+    public void meth5683() { }
+    public void meth5684() { }
+    public void meth5685() { }
+    public void meth5686() { }
+    public void meth5687() { }
+    public void meth5688() { }
+    public void meth5689() { }
+    public void meth5690() { }
+    public void meth5691() { }
+    public void meth5692() { }
+    public void meth5693() { }
+    public void meth5694() { }
+    public void meth5695() { }
+    public void meth5696() { }
+    public void meth5697() { }
+    public void meth5698() { }
+    public void meth5699() { }
+    public void meth5700() { }
+    public void meth5701() { }
+    public void meth5702() { }
+    public void meth5703() { }
+    public void meth5704() { }
+    public void meth5705() { }
+    public void meth5706() { }
+    public void meth5707() { }
+    public void meth5708() { }
+    public void meth5709() { }
+    public void meth5710() { }
+    public void meth5711() { }
+    public void meth5712() { }
+    public void meth5713() { }
+    public void meth5714() { }
+    public void meth5715() { }
+    public void meth5716() { }
+    public void meth5717() { }
+    public void meth5718() { }
+    public void meth5719() { }
+    public void meth5720() { }
+    public void meth5721() { }
+    public void meth5722() { }
+    public void meth5723() { }
+    public void meth5724() { }
+    public void meth5725() { }
+    public void meth5726() { }
+    public void meth5727() { }
+    public void meth5728() { }
+    public void meth5729() { }
+    public void meth5730() { }
+    public void meth5731() { }
+    public void meth5732() { }
+    public void meth5733() { }
+    public void meth5734() { }
+    public void meth5735() { }
+    public void meth5736() { }
+    public void meth5737() { }
+    public void meth5738() { }
+    public void meth5739() { }
+    public void meth5740() { }
+    public void meth5741() { }
+    public void meth5742() { }
+    public void meth5743() { }
+    public void meth5744() { }
+    public void meth5745() { }
+    public void meth5746() { }
+    public void meth5747() { }
+    public void meth5748() { }
+    public void meth5749() { }
+    public void meth5750() { }
+    public void meth5751() { }
+    public void meth5752() { }
+    public void meth5753() { }
+    public void meth5754() { }
+    public void meth5755() { }
+    public void meth5756() { }
+    public void meth5757() { }
+    public void meth5758() { }
+    public void meth5759() { }
+    public void meth5760() { }
+    public void meth5761() { }
+    public void meth5762() { }
+    public void meth5763() { }
+    public void meth5764() { }
+    public void meth5765() { }
+    public void meth5766() { }
+    public void meth5767() { }
+    public void meth5768() { }
+    public void meth5769() { }
+    public void meth5770() { }
+    public void meth5771() { }
+    public void meth5772() { }
+    public void meth5773() { }
+    public void meth5774() { }
+    public void meth5775() { }
+    public void meth5776() { }
+    public void meth5777() { }
+    public void meth5778() { }
+    public void meth5779() { }
+    public void meth5780() { }
+    public void meth5781() { }
+    public void meth5782() { }
+    public void meth5783() { }
+    public void meth5784() { }
+    public void meth5785() { }
+    public void meth5786() { }
+    public void meth5787() { }
+    public void meth5788() { }
+    public void meth5789() { }
+    public void meth5790() { }
+    public void meth5791() { }
+    public void meth5792() { }
+    public void meth5793() { }
+    public void meth5794() { }
+    public void meth5795() { }
+    public void meth5796() { }
+    public void meth5797() { }
+    public void meth5798() { }
+    public void meth5799() { }
+    public void meth5800() { }
+    public void meth5801() { }
+    public void meth5802() { }
+    public void meth5803() { }
+    public void meth5804() { }
+    public void meth5805() { }
+    public void meth5806() { }
+    public void meth5807() { }
+    public void meth5808() { }
+    public void meth5809() { }
+    public void meth5810() { }
+    public void meth5811() { }
+    public void meth5812() { }
+    public void meth5813() { }
+    public void meth5814() { }
+    public void meth5815() { }
+    public void meth5816() { }
+    public void meth5817() { }
+    public void meth5818() { }
+    public void meth5819() { }
+    public void meth5820() { }
+    public void meth5821() { }
+    public void meth5822() { }
+    public void meth5823() { }
+    public void meth5824() { }
+    public void meth5825() { }
+    public void meth5826() { }
+    public void meth5827() { }
+    public void meth5828() { }
+    public void meth5829() { }
+    public void meth5830() { }
+    public void meth5831() { }
+    public void meth5832() { }
+    public void meth5833() { }
+    public void meth5834() { }
+    public void meth5835() { }
+    public void meth5836() { }
+    public void meth5837() { }
+    public void meth5838() { }
+    public void meth5839() { }
+    public void meth5840() { }
+    public void meth5841() { }
+    public void meth5842() { }
+    public void meth5843() { }
+    public void meth5844() { }
+    public void meth5845() { }
+    public void meth5846() { }
+    public void meth5847() { }
+    public void meth5848() { }
+    public void meth5849() { }
+    public void meth5850() { }
+    public void meth5851() { }
+    public void meth5852() { }
+    public void meth5853() { }
+    public void meth5854() { }
+    public void meth5855() { }
+    public void meth5856() { }
+    public void meth5857() { }
+    public void meth5858() { }
+    public void meth5859() { }
+    public void meth5860() { }
+    public void meth5861() { }
+    public void meth5862() { }
+    public void meth5863() { }
+    public void meth5864() { }
+    public void meth5865() { }
+    public void meth5866() { }
+    public void meth5867() { }
+    public void meth5868() { }
+    public void meth5869() { }
+    public void meth5870() { }
+    public void meth5871() { }
+    public void meth5872() { }
+    public void meth5873() { }
+    public void meth5874() { }
+    public void meth5875() { }
+    public void meth5876() { }
+    public void meth5877() { }
+    public void meth5878() { }
+    public void meth5879() { }
+    public void meth5880() { }
+    public void meth5881() { }
+    public void meth5882() { }
+    public void meth5883() { }
+    public void meth5884() { }
+    public void meth5885() { }
+    public void meth5886() { }
+    public void meth5887() { }
+    public void meth5888() { }
+    public void meth5889() { }
+    public void meth5890() { }
+    public void meth5891() { }
+    public void meth5892() { }
+    public void meth5893() { }
+    public void meth5894() { }
+    public void meth5895() { }
+    public void meth5896() { }
+    public void meth5897() { }
+    public void meth5898() { }
+    public void meth5899() { }
+    public void meth5900() { }
+    public void meth5901() { }
+    public void meth5902() { }
+    public void meth5903() { }
+    public void meth5904() { }
+    public void meth5905() { }
+    public void meth5906() { }
+    public void meth5907() { }
+    public void meth5908() { }
+    public void meth5909() { }
+    public void meth5910() { }
+    public void meth5911() { }
+    public void meth5912() { }
+    public void meth5913() { }
+    public void meth5914() { }
+    public void meth5915() { }
+    public void meth5916() { }
+    public void meth5917() { }
+    public void meth5918() { }
+    public void meth5919() { }
+    public void meth5920() { }
+    public void meth5921() { }
+    public void meth5922() { }
+    public void meth5923() { }
+    public void meth5924() { }
+    public void meth5925() { }
+    public void meth5926() { }
+    public void meth5927() { }
+    public void meth5928() { }
+    public void meth5929() { }
+    public void meth5930() { }
+    public void meth5931() { }
+    public void meth5932() { }
+    public void meth5933() { }
+    public void meth5934() { }
+    public void meth5935() { }
+    public void meth5936() { }
+    public void meth5937() { }
+    public void meth5938() { }
+    public void meth5939() { }
+    public void meth5940() { }
+    public void meth5941() { }
+    public void meth5942() { }
+    public void meth5943() { }
+    public void meth5944() { }
+    public void meth5945() { }
+    public void meth5946() { }
+    public void meth5947() { }
+    public void meth5948() { }
+    public void meth5949() { }
+    public void meth5950() { }
+    public void meth5951() { }
+    public void meth5952() { }
+    public void meth5953() { }
+    public void meth5954() { }
+    public void meth5955() { }
+    public void meth5956() { }
+    public void meth5957() { }
+    public void meth5958() { }
+    public void meth5959() { }
+    public void meth5960() { }
+    public void meth5961() { }
+    public void meth5962() { }
+    public void meth5963() { }
+    public void meth5964() { }
+    public void meth5965() { }
+    public void meth5966() { }
+    public void meth5967() { }
+    public void meth5968() { }
+    public void meth5969() { }
+    public void meth5970() { }
+    public void meth5971() { }
+    public void meth5972() { }
+    public void meth5973() { }
+    public void meth5974() { }
+    public void meth5975() { }
+    public void meth5976() { }
+    public void meth5977() { }
+    public void meth5978() { }
+    public void meth5979() { }
+    public void meth5980() { }
+    public void meth5981() { }
+    public void meth5982() { }
+    public void meth5983() { }
+    public void meth5984() { }
+    public void meth5985() { }
+    public void meth5986() { }
+    public void meth5987() { }
+    public void meth5988() { }
+    public void meth5989() { }
+    public void meth5990() { }
+    public void meth5991() { }
+    public void meth5992() { }
+    public void meth5993() { }
+    public void meth5994() { }
+    public void meth5995() { }
+    public void meth5996() { }
+    public void meth5997() { }
+    public void meth5998() { }
+    public void meth5999() { }
+    public void meth6000() { }
+    public void meth6001() { }
+    public void meth6002() { }
+    public void meth6003() { }
+    public void meth6004() { }
+    public void meth6005() { }
+    public void meth6006() { }
+    public void meth6007() { }
+    public void meth6008() { }
+    public void meth6009() { }
+    public void meth6010() { }
+    public void meth6011() { }
+    public void meth6012() { }
+    public void meth6013() { }
+    public void meth6014() { }
+    public void meth6015() { }
+    public void meth6016() { }
+    public void meth6017() { }
+    public void meth6018() { }
+    public void meth6019() { }
+    public void meth6020() { }
+    public void meth6021() { }
+    public void meth6022() { }
+    public void meth6023() { }
+    public void meth6024() { }
+    public void meth6025() { }
+    public void meth6026() { }
+    public void meth6027() { }
+    public void meth6028() { }
+    public void meth6029() { }
+    public void meth6030() { }
+    public void meth6031() { }
+    public void meth6032() { }
+    public void meth6033() { }
+    public void meth6034() { }
+    public void meth6035() { }
+    public void meth6036() { }
+    public void meth6037() { }
+    public void meth6038() { }
+    public void meth6039() { }
+    public void meth6040() { }
+    public void meth6041() { }
+    public void meth6042() { }
+    public void meth6043() { }
+    public void meth6044() { }
+    public void meth6045() { }
+    public void meth6046() { }
+    public void meth6047() { }
+    public void meth6048() { }
+    public void meth6049() { }
+    public void meth6050() { }
+    public void meth6051() { }
+    public void meth6052() { }
+    public void meth6053() { }
+    public void meth6054() { }
+    public void meth6055() { }
+    public void meth6056() { }
+    public void meth6057() { }
+    public void meth6058() { }
+    public void meth6059() { }
+    public void meth6060() { }
+    public void meth6061() { }
+    public void meth6062() { }
+    public void meth6063() { }
+    public void meth6064() { }
+    public void meth6065() { }
+    public void meth6066() { }
+    public void meth6067() { }
+    public void meth6068() { }
+    public void meth6069() { }
+    public void meth6070() { }
+    public void meth6071() { }
+    public void meth6072() { }
+    public void meth6073() { }
+    public void meth6074() { }
+    public void meth6075() { }
+    public void meth6076() { }
+    public void meth6077() { }
+    public void meth6078() { }
+    public void meth6079() { }
+    public void meth6080() { }
+    public void meth6081() { }
+    public void meth6082() { }
+    public void meth6083() { }
+    public void meth6084() { }
+    public void meth6085() { }
+    public void meth6086() { }
+    public void meth6087() { }
+    public void meth6088() { }
+    public void meth6089() { }
+    public void meth6090() { }
+    public void meth6091() { }
+    public void meth6092() { }
+    public void meth6093() { }
+    public void meth6094() { }
+    public void meth6095() { }
+    public void meth6096() { }
+    public void meth6097() { }
+    public void meth6098() { }
+    public void meth6099() { }
+    public void meth6100() { }
+    public void meth6101() { }
+    public void meth6102() { }
+    public void meth6103() { }
+    public void meth6104() { }
+    public void meth6105() { }
+    public void meth6106() { }
+    public void meth6107() { }
+    public void meth6108() { }
+    public void meth6109() { }
+    public void meth6110() { }
+    public void meth6111() { }
+    public void meth6112() { }
+    public void meth6113() { }
+    public void meth6114() { }
+    public void meth6115() { }
+    public void meth6116() { }
+    public void meth6117() { }
+    public void meth6118() { }
+    public void meth6119() { }
+    public void meth6120() { }
+    public void meth6121() { }
+    public void meth6122() { }
+    public void meth6123() { }
+    public void meth6124() { }
+    public void meth6125() { }
+    public void meth6126() { }
+    public void meth6127() { }
+    public void meth6128() { }
+    public void meth6129() { }
+    public void meth6130() { }
+    public void meth6131() { }
+    public void meth6132() { }
+    public void meth6133() { }
+    public void meth6134() { }
+    public void meth6135() { }
+    public void meth6136() { }
+    public void meth6137() { }
+    public void meth6138() { }
+    public void meth6139() { }
+    public void meth6140() { }
+    public void meth6141() { }
+    public void meth6142() { }
+    public void meth6143() { }
+    public void meth6144() { }
+    public void meth6145() { }
+    public void meth6146() { }
+    public void meth6147() { }
+    public void meth6148() { }
+    public void meth6149() { }
+    public void meth6150() { }
+    public void meth6151() { }
+    public void meth6152() { }
+    public void meth6153() { }
+    public void meth6154() { }
+    public void meth6155() { }
+    public void meth6156() { }
+    public void meth6157() { }
+    public void meth6158() { }
+    public void meth6159() { }
+    public void meth6160() { }
+    public void meth6161() { }
+    public void meth6162() { }
+    public void meth6163() { }
+    public void meth6164() { }
+    public void meth6165() { }
+    public void meth6166() { }
+    public void meth6167() { }
+    public void meth6168() { }
+    public void meth6169() { }
+    public void meth6170() { }
+    public void meth6171() { }
+    public void meth6172() { }
+    public void meth6173() { }
+    public void meth6174() { }
+    public void meth6175() { }
+    public void meth6176() { }
+    public void meth6177() { }
+    public void meth6178() { }
+    public void meth6179() { }
+    public void meth6180() { }
+    public void meth6181() { }
+    public void meth6182() { }
+    public void meth6183() { }
+    public void meth6184() { }
+    public void meth6185() { }
+    public void meth6186() { }
+    public void meth6187() { }
+    public void meth6188() { }
+    public void meth6189() { }
+    public void meth6190() { }
+    public void meth6191() { }
+    public void meth6192() { }
+    public void meth6193() { }
+    public void meth6194() { }
+    public void meth6195() { }
+    public void meth6196() { }
+    public void meth6197() { }
+    public void meth6198() { }
+    public void meth6199() { }
+    public void meth6200() { }
+    public void meth6201() { }
+    public void meth6202() { }
+    public void meth6203() { }
+    public void meth6204() { }
+    public void meth6205() { }
+    public void meth6206() { }
+    public void meth6207() { }
+    public void meth6208() { }
+    public void meth6209() { }
+    public void meth6210() { }
+    public void meth6211() { }
+    public void meth6212() { }
+    public void meth6213() { }
+    public void meth6214() { }
+    public void meth6215() { }
+    public void meth6216() { }
+    public void meth6217() { }
+    public void meth6218() { }
+    public void meth6219() { }
+    public void meth6220() { }
+    public void meth6221() { }
+    public void meth6222() { }
+    public void meth6223() { }
+    public void meth6224() { }
+    public void meth6225() { }
+    public void meth6226() { }
+    public void meth6227() { }
+    public void meth6228() { }
+    public void meth6229() { }
+    public void meth6230() { }
+    public void meth6231() { }
+    public void meth6232() { }
+    public void meth6233() { }
+    public void meth6234() { }
+    public void meth6235() { }
+    public void meth6236() { }
+    public void meth6237() { }
+    public void meth6238() { }
+    public void meth6239() { }
+    public void meth6240() { }
+    public void meth6241() { }
+    public void meth6242() { }
+    public void meth6243() { }
+    public void meth6244() { }
+    public void meth6245() { }
+    public void meth6246() { }
+    public void meth6247() { }
+    public void meth6248() { }
+    public void meth6249() { }
+    public void meth6250() { }
+    public void meth6251() { }
+    public void meth6252() { }
+    public void meth6253() { }
+    public void meth6254() { }
+    public void meth6255() { }
+    public void meth6256() { }
+    public void meth6257() { }
+    public void meth6258() { }
+    public void meth6259() { }
+    public void meth6260() { }
+    public void meth6261() { }
+    public void meth6262() { }
+    public void meth6263() { }
+    public void meth6264() { }
+    public void meth6265() { }
+    public void meth6266() { }
+    public void meth6267() { }
+    public void meth6268() { }
+    public void meth6269() { }
+    public void meth6270() { }
+    public void meth6271() { }
+    public void meth6272() { }
+    public void meth6273() { }
+    public void meth6274() { }
+    public void meth6275() { }
+    public void meth6276() { }
+    public void meth6277() { }
+    public void meth6278() { }
+    public void meth6279() { }
+    public void meth6280() { }
+    public void meth6281() { }
+    public void meth6282() { }
+    public void meth6283() { }
+    public void meth6284() { }
+    public void meth6285() { }
+    public void meth6286() { }
+    public void meth6287() { }
+    public void meth6288() { }
+    public void meth6289() { }
+    public void meth6290() { }
+    public void meth6291() { }
+    public void meth6292() { }
+    public void meth6293() { }
+    public void meth6294() { }
+    public void meth6295() { }
+    public void meth6296() { }
+    public void meth6297() { }
+    public void meth6298() { }
+    public void meth6299() { }
+    public void meth6300() { }
+    public void meth6301() { }
+    public void meth6302() { }
+    public void meth6303() { }
+    public void meth6304() { }
+    public void meth6305() { }
+    public void meth6306() { }
+    public void meth6307() { }
+    public void meth6308() { }
+    public void meth6309() { }
+    public void meth6310() { }
+    public void meth6311() { }
+    public void meth6312() { }
+    public void meth6313() { }
+    public void meth6314() { }
+    public void meth6315() { }
+    public void meth6316() { }
+    public void meth6317() { }
+    public void meth6318() { }
+    public void meth6319() { }
+    public void meth6320() { }
+    public void meth6321() { }
+    public void meth6322() { }
+    public void meth6323() { }
+    public void meth6324() { }
+    public void meth6325() { }
+    public void meth6326() { }
+    public void meth6327() { }
+    public void meth6328() { }
+    public void meth6329() { }
+    public void meth6330() { }
+    public void meth6331() { }
+    public void meth6332() { }
+    public void meth6333() { }
+    public void meth6334() { }
+    public void meth6335() { }
+    public void meth6336() { }
+    public void meth6337() { }
+    public void meth6338() { }
+    public void meth6339() { }
+    public void meth6340() { }
+    public void meth6341() { }
+    public void meth6342() { }
+    public void meth6343() { }
+    public void meth6344() { }
+    public void meth6345() { }
+    public void meth6346() { }
+    public void meth6347() { }
+    public void meth6348() { }
+    public void meth6349() { }
+    public void meth6350() { }
+    public void meth6351() { }
+    public void meth6352() { }
+    public void meth6353() { }
+    public void meth6354() { }
+    public void meth6355() { }
+    public void meth6356() { }
+    public void meth6357() { }
+    public void meth6358() { }
+    public void meth6359() { }
+    public void meth6360() { }
+    public void meth6361() { }
+    public void meth6362() { }
+    public void meth6363() { }
+    public void meth6364() { }
+    public void meth6365() { }
+    public void meth6366() { }
+    public void meth6367() { }
+    public void meth6368() { }
+    public void meth6369() { }
+    public void meth6370() { }
+    public void meth6371() { }
+    public void meth6372() { }
+    public void meth6373() { }
+    public void meth6374() { }
+    public void meth6375() { }
+    public void meth6376() { }
+    public void meth6377() { }
+    public void meth6378() { }
+    public void meth6379() { }
+    public void meth6380() { }
+    public void meth6381() { }
+    public void meth6382() { }
+    public void meth6383() { }
+    public void meth6384() { }
+    public void meth6385() { }
+    public void meth6386() { }
+    public void meth6387() { }
+    public void meth6388() { }
+    public void meth6389() { }
+    public void meth6390() { }
+    public void meth6391() { }
+    public void meth6392() { }
+    public void meth6393() { }
+    public void meth6394() { }
+    public void meth6395() { }
+    public void meth6396() { }
+    public void meth6397() { }
+    public void meth6398() { }
+    public void meth6399() { }
+    public void meth6400() { }
+    public void meth6401() { }
+    public void meth6402() { }
+    public void meth6403() { }
+    public void meth6404() { }
+    public void meth6405() { }
+    public void meth6406() { }
+    public void meth6407() { }
+    public void meth6408() { }
+    public void meth6409() { }
+    public void meth6410() { }
+    public void meth6411() { }
+    public void meth6412() { }
+    public void meth6413() { }
+    public void meth6414() { }
+    public void meth6415() { }
+    public void meth6416() { }
+    public void meth6417() { }
+    public void meth6418() { }
+    public void meth6419() { }
+    public void meth6420() { }
+    public void meth6421() { }
+    public void meth6422() { }
+    public void meth6423() { }
+    public void meth6424() { }
+    public void meth6425() { }
+    public void meth6426() { }
+    public void meth6427() { }
+    public void meth6428() { }
+    public void meth6429() { }
+    public void meth6430() { }
+    public void meth6431() { }
+    public void meth6432() { }
+    public void meth6433() { }
+    public void meth6434() { }
+    public void meth6435() { }
+    public void meth6436() { }
+    public void meth6437() { }
+    public void meth6438() { }
+    public void meth6439() { }
+    public void meth6440() { }
+    public void meth6441() { }
+    public void meth6442() { }
+    public void meth6443() { }
+    public void meth6444() { }
+    public void meth6445() { }
+    public void meth6446() { }
+    public void meth6447() { }
+    public void meth6448() { }
+    public void meth6449() { }
+    public void meth6450() { }
+    public void meth6451() { }
+    public void meth6452() { }
+    public void meth6453() { }
+    public void meth6454() { }
+    public void meth6455() { }
+    public void meth6456() { }
+    public void meth6457() { }
+    public void meth6458() { }
+    public void meth6459() { }
+    public void meth6460() { }
+    public void meth6461() { }
+    public void meth6462() { }
+    public void meth6463() { }
+    public void meth6464() { }
+    public void meth6465() { }
+    public void meth6466() { }
+    public void meth6467() { }
+    public void meth6468() { }
+    public void meth6469() { }
+    public void meth6470() { }
+    public void meth6471() { }
+    public void meth6472() { }
+    public void meth6473() { }
+    public void meth6474() { }
+    public void meth6475() { }
+    public void meth6476() { }
+    public void meth6477() { }
+    public void meth6478() { }
+    public void meth6479() { }
+    public void meth6480() { }
+    public void meth6481() { }
+    public void meth6482() { }
+    public void meth6483() { }
+    public void meth6484() { }
+    public void meth6485() { }
+    public void meth6486() { }
+    public void meth6487() { }
+    public void meth6488() { }
+    public void meth6489() { }
+    public void meth6490() { }
+    public void meth6491() { }
+    public void meth6492() { }
+    public void meth6493() { }
+    public void meth6494() { }
+    public void meth6495() { }
+    public void meth6496() { }
+    public void meth6497() { }
+    public void meth6498() { }
+    public void meth6499() { }
+    public void meth6500() { }
+    public void meth6501() { }
+    public void meth6502() { }
+    public void meth6503() { }
+    public void meth6504() { }
+    public void meth6505() { }
+    public void meth6506() { }
+    public void meth6507() { }
+    public void meth6508() { }
+    public void meth6509() { }
+    public void meth6510() { }
+    public void meth6511() { }
+    public void meth6512() { }
+    public void meth6513() { }
+    public void meth6514() { }
+    public void meth6515() { }
+    public void meth6516() { }
+    public void meth6517() { }
+    public void meth6518() { }
+    public void meth6519() { }
+    public void meth6520() { }
+    public void meth6521() { }
+    public void meth6522() { }
+    public void meth6523() { }
+    public void meth6524() { }
+    public void meth6525() { }
+    public void meth6526() { }
+    public void meth6527() { }
+    public void meth6528() { }
+    public void meth6529() { }
+    public void meth6530() { }
+    public void meth6531() { }
+    public void meth6532() { }
+    public void meth6533() { }
+    public void meth6534() { }
+    public void meth6535() { }
+    public void meth6536() { }
+    public void meth6537() { }
+    public void meth6538() { }
+    public void meth6539() { }
+    public void meth6540() { }
+    public void meth6541() { }
+    public void meth6542() { }
+    public void meth6543() { }
+    public void meth6544() { }
+    public void meth6545() { }
+    public void meth6546() { }
+    public void meth6547() { }
+    public void meth6548() { }
+    public void meth6549() { }
+    public void meth6550() { }
+    public void meth6551() { }
+    public void meth6552() { }
+    public void meth6553() { }
+    public void meth6554() { }
+    public void meth6555() { }
+    public void meth6556() { }
+    public void meth6557() { }
+    public void meth6558() { }
+    public void meth6559() { }
+    public void meth6560() { }
+    public void meth6561() { }
+    public void meth6562() { }
+    public void meth6563() { }
+    public void meth6564() { }
+    public void meth6565() { }
+    public void meth6566() { }
+    public void meth6567() { }
+    public void meth6568() { }
+    public void meth6569() { }
+    public void meth6570() { }
+    public void meth6571() { }
+    public void meth6572() { }
+    public void meth6573() { }
+    public void meth6574() { }
+    public void meth6575() { }
+    public void meth6576() { }
+    public void meth6577() { }
+    public void meth6578() { }
+    public void meth6579() { }
+    public void meth6580() { }
+    public void meth6581() { }
+    public void meth6582() { }
+    public void meth6583() { }
+    public void meth6584() { }
+    public void meth6585() { }
+    public void meth6586() { }
+    public void meth6587() { }
+    public void meth6588() { }
+    public void meth6589() { }
+    public void meth6590() { }
+    public void meth6591() { }
+    public void meth6592() { }
+    public void meth6593() { }
+    public void meth6594() { }
+    public void meth6595() { }
+    public void meth6596() { }
+    public void meth6597() { }
+    public void meth6598() { }
+    public void meth6599() { }
+    public void meth6600() { }
+    public void meth6601() { }
+    public void meth6602() { }
+    public void meth6603() { }
+    public void meth6604() { }
+    public void meth6605() { }
+    public void meth6606() { }
+    public void meth6607() { }
+    public void meth6608() { }
+    public void meth6609() { }
+    public void meth6610() { }
+    public void meth6611() { }
+    public void meth6612() { }
+    public void meth6613() { }
+    public void meth6614() { }
+    public void meth6615() { }
+    public void meth6616() { }
+    public void meth6617() { }
+    public void meth6618() { }
+    public void meth6619() { }
+    public void meth6620() { }
+    public void meth6621() { }
+    public void meth6622() { }
+    public void meth6623() { }
+    public void meth6624() { }
+    public void meth6625() { }
+    public void meth6626() { }
+    public void meth6627() { }
+    public void meth6628() { }
+    public void meth6629() { }
+    public void meth6630() { }
+    public void meth6631() { }
+    public void meth6632() { }
+    public void meth6633() { }
+    public void meth6634() { }
+    public void meth6635() { }
+    public void meth6636() { }
+    public void meth6637() { }
+    public void meth6638() { }
+    public void meth6639() { }
+    public void meth6640() { }
+    public void meth6641() { }
+    public void meth6642() { }
+    public void meth6643() { }
+    public void meth6644() { }
+    public void meth6645() { }
+    public void meth6646() { }
+    public void meth6647() { }
+    public void meth6648() { }
+    public void meth6649() { }
+    public void meth6650() { }
+    public void meth6651() { }
+    public void meth6652() { }
+    public void meth6653() { }
+    public void meth6654() { }
+    public void meth6655() { }
+    public void meth6656() { }
+    public void meth6657() { }
+    public void meth6658() { }
+    public void meth6659() { }
+    public void meth6660() { }
+    public void meth6661() { }
+    public void meth6662() { }
+    public void meth6663() { }
+    public void meth6664() { }
+    public void meth6665() { }
+    public void meth6666() { }
+    public void meth6667() { }
+    public void meth6668() { }
+    public void meth6669() { }
+    public void meth6670() { }
+    public void meth6671() { }
+    public void meth6672() { }
+    public void meth6673() { }
+    public void meth6674() { }
+    public void meth6675() { }
+    public void meth6676() { }
+    public void meth6677() { }
+    public void meth6678() { }
+    public void meth6679() { }
+    public void meth6680() { }
+    public void meth6681() { }
+    public void meth6682() { }
+    public void meth6683() { }
+    public void meth6684() { }
+    public void meth6685() { }
+    public void meth6686() { }
+    public void meth6687() { }
+    public void meth6688() { }
+    public void meth6689() { }
+    public void meth6690() { }
+    public void meth6691() { }
+    public void meth6692() { }
+    public void meth6693() { }
+    public void meth6694() { }
+    public void meth6695() { }
+    public void meth6696() { }
+    public void meth6697() { }
+    public void meth6698() { }
+    public void meth6699() { }
+    public void meth6700() { }
+    public void meth6701() { }
+    public void meth6702() { }
+    public void meth6703() { }
+    public void meth6704() { }
+    public void meth6705() { }
+    public void meth6706() { }
+    public void meth6707() { }
+    public void meth6708() { }
+    public void meth6709() { }
+    public void meth6710() { }
+    public void meth6711() { }
+    public void meth6712() { }
+    public void meth6713() { }
+    public void meth6714() { }
+    public void meth6715() { }
+    public void meth6716() { }
+    public void meth6717() { }
+    public void meth6718() { }
+    public void meth6719() { }
+    public void meth6720() { }
+    public void meth6721() { }
+    public void meth6722() { }
+    public void meth6723() { }
+    public void meth6724() { }
+    public void meth6725() { }
+    public void meth6726() { }
+    public void meth6727() { }
+    public void meth6728() { }
+    public void meth6729() { }
+    public void meth6730() { }
+    public void meth6731() { }
+    public void meth6732() { }
+    public void meth6733() { }
+    public void meth6734() { }
+    public void meth6735() { }
+    public void meth6736() { }
+    public void meth6737() { }
+    public void meth6738() { }
+    public void meth6739() { }
+    public void meth6740() { }
+    public void meth6741() { }
+    public void meth6742() { }
+    public void meth6743() { }
+    public void meth6744() { }
+    public void meth6745() { }
+    public void meth6746() { }
+    public void meth6747() { }
+    public void meth6748() { }
+    public void meth6749() { }
+    public void meth6750() { }
+    public void meth6751() { }
+    public void meth6752() { }
+    public void meth6753() { }
+    public void meth6754() { }
+    public void meth6755() { }
+    public void meth6756() { }
+    public void meth6757() { }
+    public void meth6758() { }
+    public void meth6759() { }
+    public void meth6760() { }
+    public void meth6761() { }
+    public void meth6762() { }
+    public void meth6763() { }
+    public void meth6764() { }
+    public void meth6765() { }
+    public void meth6766() { }
+    public void meth6767() { }
+    public void meth6768() { }
+    public void meth6769() { }
+    public void meth6770() { }
+    public void meth6771() { }
+    public void meth6772() { }
+    public void meth6773() { }
+    public void meth6774() { }
+    public void meth6775() { }
+    public void meth6776() { }
+    public void meth6777() { }
+    public void meth6778() { }
+    public void meth6779() { }
+    public void meth6780() { }
+    public void meth6781() { }
+    public void meth6782() { }
+    public void meth6783() { }
+    public void meth6784() { }
+    public void meth6785() { }
+    public void meth6786() { }
+    public void meth6787() { }
+    public void meth6788() { }
+    public void meth6789() { }
+    public void meth6790() { }
+    public void meth6791() { }
+    public void meth6792() { }
+    public void meth6793() { }
+    public void meth6794() { }
+    public void meth6795() { }
+    public void meth6796() { }
+    public void meth6797() { }
+    public void meth6798() { }
+    public void meth6799() { }
+    public void meth6800() { }
+    public void meth6801() { }
+    public void meth6802() { }
+    public void meth6803() { }
+    public void meth6804() { }
+    public void meth6805() { }
+    public void meth6806() { }
+    public void meth6807() { }
+    public void meth6808() { }
+    public void meth6809() { }
+    public void meth6810() { }
+    public void meth6811() { }
+    public void meth6812() { }
+    public void meth6813() { }
+    public void meth6814() { }
+    public void meth6815() { }
+    public void meth6816() { }
+    public void meth6817() { }
+    public void meth6818() { }
+    public void meth6819() { }
+    public void meth6820() { }
+    public void meth6821() { }
+    public void meth6822() { }
+    public void meth6823() { }
+    public void meth6824() { }
+    public void meth6825() { }
+    public void meth6826() { }
+    public void meth6827() { }
+    public void meth6828() { }
+    public void meth6829() { }
+    public void meth6830() { }
+    public void meth6831() { }
+    public void meth6832() { }
+    public void meth6833() { }
+    public void meth6834() { }
+    public void meth6835() { }
+    public void meth6836() { }
+    public void meth6837() { }
+    public void meth6838() { }
+    public void meth6839() { }
+    public void meth6840() { }
+    public void meth6841() { }
+    public void meth6842() { }
+    public void meth6843() { }
+    public void meth6844() { }
+    public void meth6845() { }
+    public void meth6846() { }
+    public void meth6847() { }
+    public void meth6848() { }
+    public void meth6849() { }
+    public void meth6850() { }
+    public void meth6851() { }
+    public void meth6852() { }
+    public void meth6853() { }
+    public void meth6854() { }
+    public void meth6855() { }
+    public void meth6856() { }
+    public void meth6857() { }
+    public void meth6858() { }
+    public void meth6859() { }
+    public void meth6860() { }
+    public void meth6861() { }
+    public void meth6862() { }
+    public void meth6863() { }
+    public void meth6864() { }
+    public void meth6865() { }
+    public void meth6866() { }
+    public void meth6867() { }
+    public void meth6868() { }
+    public void meth6869() { }
+    public void meth6870() { }
+    public void meth6871() { }
+    public void meth6872() { }
+    public void meth6873() { }
+    public void meth6874() { }
+    public void meth6875() { }
+    public void meth6876() { }
+    public void meth6877() { }
+    public void meth6878() { }
+    public void meth6879() { }
+    public void meth6880() { }
+    public void meth6881() { }
+    public void meth6882() { }
+    public void meth6883() { }
+    public void meth6884() { }
+    public void meth6885() { }
+    public void meth6886() { }
+    public void meth6887() { }
+    public void meth6888() { }
+    public void meth6889() { }
+    public void meth6890() { }
+    public void meth6891() { }
+    public void meth6892() { }
+    public void meth6893() { }
+    public void meth6894() { }
+    public void meth6895() { }
+    public void meth6896() { }
+    public void meth6897() { }
+    public void meth6898() { }
+    public void meth6899() { }
+    public void meth6900() { }
+    public void meth6901() { }
+    public void meth6902() { }
+    public void meth6903() { }
+    public void meth6904() { }
+    public void meth6905() { }
+    public void meth6906() { }
+    public void meth6907() { }
+    public void meth6908() { }
+    public void meth6909() { }
+    public void meth6910() { }
+    public void meth6911() { }
+    public void meth6912() { }
+    public void meth6913() { }
+    public void meth6914() { }
+    public void meth6915() { }
+    public void meth6916() { }
+    public void meth6917() { }
+    public void meth6918() { }
+    public void meth6919() { }
+    public void meth6920() { }
+    public void meth6921() { }
+    public void meth6922() { }
+    public void meth6923() { }
+    public void meth6924() { }
+    public void meth6925() { }
+    public void meth6926() { }
+    public void meth6927() { }
+    public void meth6928() { }
+    public void meth6929() { }
+    public void meth6930() { }
+    public void meth6931() { }
+    public void meth6932() { }
+    public void meth6933() { }
+    public void meth6934() { }
+    public void meth6935() { }
+    public void meth6936() { }
+    public void meth6937() { }
+    public void meth6938() { }
+    public void meth6939() { }
+    public void meth6940() { }
+    public void meth6941() { }
+    public void meth6942() { }
+    public void meth6943() { }
+    public void meth6944() { }
+    public void meth6945() { }
+    public void meth6946() { }
+    public void meth6947() { }
+    public void meth6948() { }
+    public void meth6949() { }
+    public void meth6950() { }
+    public void meth6951() { }
+    public void meth6952() { }
+    public void meth6953() { }
+    public void meth6954() { }
+    public void meth6955() { }
+    public void meth6956() { }
+    public void meth6957() { }
+    public void meth6958() { }
+    public void meth6959() { }
+    public void meth6960() { }
+    public void meth6961() { }
+    public void meth6962() { }
+    public void meth6963() { }
+    public void meth6964() { }
+    public void meth6965() { }
+    public void meth6966() { }
+    public void meth6967() { }
+    public void meth6968() { }
+    public void meth6969() { }
+    public void meth6970() { }
+    public void meth6971() { }
+    public void meth6972() { }
+    public void meth6973() { }
+    public void meth6974() { }
+    public void meth6975() { }
+    public void meth6976() { }
+    public void meth6977() { }
+    public void meth6978() { }
+    public void meth6979() { }
+    public void meth6980() { }
+    public void meth6981() { }
+    public void meth6982() { }
+    public void meth6983() { }
+    public void meth6984() { }
+    public void meth6985() { }
+    public void meth6986() { }
+    public void meth6987() { }
+    public void meth6988() { }
+    public void meth6989() { }
+    public void meth6990() { }
+    public void meth6991() { }
+    public void meth6992() { }
+    public void meth6993() { }
+    public void meth6994() { }
+    public void meth6995() { }
+    public void meth6996() { }
+    public void meth6997() { }
+    public void meth6998() { }
+    public void meth6999() { }
+    public void meth7000() { }
+    public void meth7001() { }
+    public void meth7002() { }
+    public void meth7003() { }
+    public void meth7004() { }
+    public void meth7005() { }
+    public void meth7006() { }
+    public void meth7007() { }
+    public void meth7008() { }
+    public void meth7009() { }
+    public void meth7010() { }
+    public void meth7011() { }
+    public void meth7012() { }
+    public void meth7013() { }
+    public void meth7014() { }
+    public void meth7015() { }
+    public void meth7016() { }
+    public void meth7017() { }
+    public void meth7018() { }
+    public void meth7019() { }
+    public void meth7020() { }
+    public void meth7021() { }
+    public void meth7022() { }
+    public void meth7023() { }
+    public void meth7024() { }
+    public void meth7025() { }
+    public void meth7026() { }
+    public void meth7027() { }
+    public void meth7028() { }
+    public void meth7029() { }
+    public void meth7030() { }
+    public void meth7031() { }
+    public void meth7032() { }
+    public void meth7033() { }
+    public void meth7034() { }
+    public void meth7035() { }
+    public void meth7036() { }
+    public void meth7037() { }
+    public void meth7038() { }
+    public void meth7039() { }
+    public void meth7040() { }
+    public void meth7041() { }
+    public void meth7042() { }
+    public void meth7043() { }
+    public void meth7044() { }
+    public void meth7045() { }
+    public void meth7046() { }
+    public void meth7047() { }
+    public void meth7048() { }
+    public void meth7049() { }
+    public void meth7050() { }
+    public void meth7051() { }
+    public void meth7052() { }
+    public void meth7053() { }
+    public void meth7054() { }
+    public void meth7055() { }
+    public void meth7056() { }
+    public void meth7057() { }
+    public void meth7058() { }
+    public void meth7059() { }
+    public void meth7060() { }
+    public void meth7061() { }
+    public void meth7062() { }
+    public void meth7063() { }
+    public void meth7064() { }
+    public void meth7065() { }
+    public void meth7066() { }
+    public void meth7067() { }
+    public void meth7068() { }
+    public void meth7069() { }
+    public void meth7070() { }
+    public void meth7071() { }
+    public void meth7072() { }
+    public void meth7073() { }
+    public void meth7074() { }
+    public void meth7075() { }
+    public void meth7076() { }
+    public void meth7077() { }
+    public void meth7078() { }
+    public void meth7079() { }
+    public void meth7080() { }
+    public void meth7081() { }
+    public void meth7082() { }
+    public void meth7083() { }
+    public void meth7084() { }
+    public void meth7085() { }
+    public void meth7086() { }
+    public void meth7087() { }
+    public void meth7088() { }
+    public void meth7089() { }
+    public void meth7090() { }
+    public void meth7091() { }
+    public void meth7092() { }
+    public void meth7093() { }
+    public void meth7094() { }
+    public void meth7095() { }
+    public void meth7096() { }
+    public void meth7097() { }
+    public void meth7098() { }
+    public void meth7099() { }
+    public void meth7100() { }
+    public void meth7101() { }
+    public void meth7102() { }
+    public void meth7103() { }
+    public void meth7104() { }
+    public void meth7105() { }
+    public void meth7106() { }
+    public void meth7107() { }
+    public void meth7108() { }
+    public void meth7109() { }
+    public void meth7110() { }
+    public void meth7111() { }
+    public void meth7112() { }
+    public void meth7113() { }
+    public void meth7114() { }
+    public void meth7115() { }
+    public void meth7116() { }
+    public void meth7117() { }
+    public void meth7118() { }
+    public void meth7119() { }
+    public void meth7120() { }
+    public void meth7121() { }
+    public void meth7122() { }
+    public void meth7123() { }
+    public void meth7124() { }
+    public void meth7125() { }
+    public void meth7126() { }
+    public void meth7127() { }
+    public void meth7128() { }
+    public void meth7129() { }
+    public void meth7130() { }
+    public void meth7131() { }
+    public void meth7132() { }
+    public void meth7133() { }
+    public void meth7134() { }
+    public void meth7135() { }
+    public void meth7136() { }
+    public void meth7137() { }
+    public void meth7138() { }
+    public void meth7139() { }
+    public void meth7140() { }
+    public void meth7141() { }
+    public void meth7142() { }
+    public void meth7143() { }
+    public void meth7144() { }
+    public void meth7145() { }
+    public void meth7146() { }
+    public void meth7147() { }
+    public void meth7148() { }
+    public void meth7149() { }
+    public void meth7150() { }
+    public void meth7151() { }
+    public void meth7152() { }
+    public void meth7153() { }
+    public void meth7154() { }
+    public void meth7155() { }
+    public void meth7156() { }
+    public void meth7157() { }
+    public void meth7158() { }
+    public void meth7159() { }
+    public void meth7160() { }
+    public void meth7161() { }
+    public void meth7162() { }
+    public void meth7163() { }
+    public void meth7164() { }
+    public void meth7165() { }
+    public void meth7166() { }
+    public void meth7167() { }
+    public void meth7168() { }
+    public void meth7169() { }
+    public void meth7170() { }
+    public void meth7171() { }
+    public void meth7172() { }
+    public void meth7173() { }
+    public void meth7174() { }
+    public void meth7175() { }
+    public void meth7176() { }
+    public void meth7177() { }
+    public void meth7178() { }
+    public void meth7179() { }
+    public void meth7180() { }
+    public void meth7181() { }
+    public void meth7182() { }
+    public void meth7183() { }
+    public void meth7184() { }
+    public void meth7185() { }
+    public void meth7186() { }
+    public void meth7187() { }
+    public void meth7188() { }
+    public void meth7189() { }
+    public void meth7190() { }
+    public void meth7191() { }
+    public void meth7192() { }
+    public void meth7193() { }
+    public void meth7194() { }
+    public void meth7195() { }
+    public void meth7196() { }
+    public void meth7197() { }
+    public void meth7198() { }
+    public void meth7199() { }
+    public void meth7200() { }
+    public void meth7201() { }
+    public void meth7202() { }
+    public void meth7203() { }
+    public void meth7204() { }
+    public void meth7205() { }
+    public void meth7206() { }
+    public void meth7207() { }
+    public void meth7208() { }
+    public void meth7209() { }
+    public void meth7210() { }
+    public void meth7211() { }
+    public void meth7212() { }
+    public void meth7213() { }
+    public void meth7214() { }
+    public void meth7215() { }
+    public void meth7216() { }
+    public void meth7217() { }
+    public void meth7218() { }
+    public void meth7219() { }
+    public void meth7220() { }
+    public void meth7221() { }
+    public void meth7222() { }
+    public void meth7223() { }
+    public void meth7224() { }
+    public void meth7225() { }
+    public void meth7226() { }
+    public void meth7227() { }
+    public void meth7228() { }
+    public void meth7229() { }
+    public void meth7230() { }
+    public void meth7231() { }
+    public void meth7232() { }
+    public void meth7233() { }
+    public void meth7234() { }
+    public void meth7235() { }
+    public void meth7236() { }
+    public void meth7237() { }
+    public void meth7238() { }
+    public void meth7239() { }
+    public void meth7240() { }
+    public void meth7241() { }
+    public void meth7242() { }
+    public void meth7243() { }
+    public void meth7244() { }
+    public void meth7245() { }
+    public void meth7246() { }
+    public void meth7247() { }
+    public void meth7248() { }
+    public void meth7249() { }
+    public void meth7250() { }
+    public void meth7251() { }
+    public void meth7252() { }
+    public void meth7253() { }
+    public void meth7254() { }
+    public void meth7255() { }
+    public void meth7256() { }
+    public void meth7257() { }
+    public void meth7258() { }
+    public void meth7259() { }
+    public void meth7260() { }
+    public void meth7261() { }
+    public void meth7262() { }
+    public void meth7263() { }
+    public void meth7264() { }
+    public void meth7265() { }
+    public void meth7266() { }
+    public void meth7267() { }
+    public void meth7268() { }
+    public void meth7269() { }
+    public void meth7270() { }
+    public void meth7271() { }
+    public void meth7272() { }
+    public void meth7273() { }
+    public void meth7274() { }
+    public void meth7275() { }
+    public void meth7276() { }
+    public void meth7277() { }
+    public void meth7278() { }
+    public void meth7279() { }
+    public void meth7280() { }
+    public void meth7281() { }
+    public void meth7282() { }
+    public void meth7283() { }
+    public void meth7284() { }
+    public void meth7285() { }
+    public void meth7286() { }
+    public void meth7287() { }
+    public void meth7288() { }
+    public void meth7289() { }
+    public void meth7290() { }
+    public void meth7291() { }
+    public void meth7292() { }
+    public void meth7293() { }
+    public void meth7294() { }
+    public void meth7295() { }
+    public void meth7296() { }
+    public void meth7297() { }
+    public void meth7298() { }
+    public void meth7299() { }
+    public void meth7300() { }
+    public void meth7301() { }
+    public void meth7302() { }
+    public void meth7303() { }
+    public void meth7304() { }
+    public void meth7305() { }
+    public void meth7306() { }
+    public void meth7307() { }
+    public void meth7308() { }
+    public void meth7309() { }
+    public void meth7310() { }
+    public void meth7311() { }
+    public void meth7312() { }
+    public void meth7313() { }
+    public void meth7314() { }
+    public void meth7315() { }
+    public void meth7316() { }
+    public void meth7317() { }
+    public void meth7318() { }
+    public void meth7319() { }
+    public void meth7320() { }
+    public void meth7321() { }
+    public void meth7322() { }
+    public void meth7323() { }
+    public void meth7324() { }
+    public void meth7325() { }
+    public void meth7326() { }
+    public void meth7327() { }
+    public void meth7328() { }
+    public void meth7329() { }
+    public void meth7330() { }
+    public void meth7331() { }
+    public void meth7332() { }
+    public void meth7333() { }
+    public void meth7334() { }
+    public void meth7335() { }
+    public void meth7336() { }
+    public void meth7337() { }
+    public void meth7338() { }
+    public void meth7339() { }
+    public void meth7340() { }
+    public void meth7341() { }
+    public void meth7342() { }
+    public void meth7343() { }
+    public void meth7344() { }
+    public void meth7345() { }
+    public void meth7346() { }
+    public void meth7347() { }
+    public void meth7348() { }
+    public void meth7349() { }
+    public void meth7350() { }
+    public void meth7351() { }
+    public void meth7352() { }
+    public void meth7353() { }
+    public void meth7354() { }
+    public void meth7355() { }
+    public void meth7356() { }
+    public void meth7357() { }
+    public void meth7358() { }
+    public void meth7359() { }
+    public void meth7360() { }
+    public void meth7361() { }
+    public void meth7362() { }
+    public void meth7363() { }
+    public void meth7364() { }
+    public void meth7365() { }
+    public void meth7366() { }
+    public void meth7367() { }
+    public void meth7368() { }
+    public void meth7369() { }
+    public void meth7370() { }
+    public void meth7371() { }
+    public void meth7372() { }
+    public void meth7373() { }
+    public void meth7374() { }
+    public void meth7375() { }
+    public void meth7376() { }
+    public void meth7377() { }
+    public void meth7378() { }
+    public void meth7379() { }
+    public void meth7380() { }
+    public void meth7381() { }
+    public void meth7382() { }
+    public void meth7383() { }
+    public void meth7384() { }
+    public void meth7385() { }
+    public void meth7386() { }
+    public void meth7387() { }
+    public void meth7388() { }
+    public void meth7389() { }
+    public void meth7390() { }
+    public void meth7391() { }
+    public void meth7392() { }
+    public void meth7393() { }
+    public void meth7394() { }
+    public void meth7395() { }
+    public void meth7396() { }
+    public void meth7397() { }
+    public void meth7398() { }
+    public void meth7399() { }
+    public void meth7400() { }
+    public void meth7401() { }
+    public void meth7402() { }
+    public void meth7403() { }
+    public void meth7404() { }
+    public void meth7405() { }
+    public void meth7406() { }
+    public void meth7407() { }
+    public void meth7408() { }
+    public void meth7409() { }
+    public void meth7410() { }
+    public void meth7411() { }
+    public void meth7412() { }
+    public void meth7413() { }
+    public void meth7414() { }
+    public void meth7415() { }
+    public void meth7416() { }
+    public void meth7417() { }
+    public void meth7418() { }
+    public void meth7419() { }
+    public void meth7420() { }
+    public void meth7421() { }
+    public void meth7422() { }
+    public void meth7423() { }
+    public void meth7424() { }
+    public void meth7425() { }
+    public void meth7426() { }
+    public void meth7427() { }
+    public void meth7428() { }
+    public void meth7429() { }
+    public void meth7430() { }
+    public void meth7431() { }
+    public void meth7432() { }
+    public void meth7433() { }
+    public void meth7434() { }
+    public void meth7435() { }
+    public void meth7436() { }
+    public void meth7437() { }
+    public void meth7438() { }
+    public void meth7439() { }
+    public void meth7440() { }
+    public void meth7441() { }
+    public void meth7442() { }
+    public void meth7443() { }
+    public void meth7444() { }
+    public void meth7445() { }
+    public void meth7446() { }
+    public void meth7447() { }
+    public void meth7448() { }
+    public void meth7449() { }
+    public void meth7450() { }
+    public void meth7451() { }
+    public void meth7452() { }
+    public void meth7453() { }
+    public void meth7454() { }
+    public void meth7455() { }
+    public void meth7456() { }
+    public void meth7457() { }
+    public void meth7458() { }
+    public void meth7459() { }
+    public void meth7460() { }
+    public void meth7461() { }
+    public void meth7462() { }
+    public void meth7463() { }
+    public void meth7464() { }
+    public void meth7465() { }
+    public void meth7466() { }
+    public void meth7467() { }
+    public void meth7468() { }
+    public void meth7469() { }
+    public void meth7470() { }
+    public void meth7471() { }
+    public void meth7472() { }
+    public void meth7473() { }
+    public void meth7474() { }
+    public void meth7475() { }
+    public void meth7476() { }
+    public void meth7477() { }
+    public void meth7478() { }
+    public void meth7479() { }
+    public void meth7480() { }
+    public void meth7481() { }
+    public void meth7482() { }
+    public void meth7483() { }
+    public void meth7484() { }
+    public void meth7485() { }
+    public void meth7486() { }
+    public void meth7487() { }
+    public void meth7488() { }
+    public void meth7489() { }
+    public void meth7490() { }
+    public void meth7491() { }
+    public void meth7492() { }
+    public void meth7493() { }
+    public void meth7494() { }
+    public void meth7495() { }
+    public void meth7496() { }
+    public void meth7497() { }
+    public void meth7498() { }
+    public void meth7499() { }
+    public void meth7500() { }
+    public void meth7501() { }
+    public void meth7502() { }
+    public void meth7503() { }
+    public void meth7504() { }
+    public void meth7505() { }
+    public void meth7506() { }
+    public void meth7507() { }
+    public void meth7508() { }
+    public void meth7509() { }
+    public void meth7510() { }
+    public void meth7511() { }
+    public void meth7512() { }
+    public void meth7513() { }
+    public void meth7514() { }
+    public void meth7515() { }
+    public void meth7516() { }
+    public void meth7517() { }
+    public void meth7518() { }
+    public void meth7519() { }
+    public void meth7520() { }
+    public void meth7521() { }
+    public void meth7522() { }
+    public void meth7523() { }
+    public void meth7524() { }
+    public void meth7525() { }
+    public void meth7526() { }
+    public void meth7527() { }
+    public void meth7528() { }
+    public void meth7529() { }
+    public void meth7530() { }
+    public void meth7531() { }
+    public void meth7532() { }
+    public void meth7533() { }
+    public void meth7534() { }
+    public void meth7535() { }
+    public void meth7536() { }
+    public void meth7537() { }
+    public void meth7538() { }
+    public void meth7539() { }
+    public void meth7540() { }
+    public void meth7541() { }
+    public void meth7542() { }
+    public void meth7543() { }
+    public void meth7544() { }
+    public void meth7545() { }
+    public void meth7546() { }
+    public void meth7547() { }
+    public void meth7548() { }
+    public void meth7549() { }
+    public void meth7550() { }
+    public void meth7551() { }
+    public void meth7552() { }
+    public void meth7553() { }
+    public void meth7554() { }
+    public void meth7555() { }
+    public void meth7556() { }
+    public void meth7557() { }
+    public void meth7558() { }
+    public void meth7559() { }
+    public void meth7560() { }
+    public void meth7561() { }
+    public void meth7562() { }
+    public void meth7563() { }
+    public void meth7564() { }
+    public void meth7565() { }
+    public void meth7566() { }
+    public void meth7567() { }
+    public void meth7568() { }
+    public void meth7569() { }
+    public void meth7570() { }
+    public void meth7571() { }
+    public void meth7572() { }
+    public void meth7573() { }
+    public void meth7574() { }
+    public void meth7575() { }
+    public void meth7576() { }
+    public void meth7577() { }
+    public void meth7578() { }
+    public void meth7579() { }
+    public void meth7580() { }
+    public void meth7581() { }
+    public void meth7582() { }
+    public void meth7583() { }
+    public void meth7584() { }
+    public void meth7585() { }
+    public void meth7586() { }
+    public void meth7587() { }
+    public void meth7588() { }
+    public void meth7589() { }
+    public void meth7590() { }
+    public void meth7591() { }
+    public void meth7592() { }
+    public void meth7593() { }
+    public void meth7594() { }
+    public void meth7595() { }
+    public void meth7596() { }
+    public void meth7597() { }
+    public void meth7598() { }
+    public void meth7599() { }
+    public void meth7600() { }
+    public void meth7601() { }
+    public void meth7602() { }
+    public void meth7603() { }
+    public void meth7604() { }
+    public void meth7605() { }
+    public void meth7606() { }
+    public void meth7607() { }
+    public void meth7608() { }
+    public void meth7609() { }
+    public void meth7610() { }
+    public void meth7611() { }
+    public void meth7612() { }
+    public void meth7613() { }
+    public void meth7614() { }
+    public void meth7615() { }
+    public void meth7616() { }
+    public void meth7617() { }
+    public void meth7618() { }
+    public void meth7619() { }
+    public void meth7620() { }
+    public void meth7621() { }
+    public void meth7622() { }
+    public void meth7623() { }
+    public void meth7624() { }
+    public void meth7625() { }
+    public void meth7626() { }
+    public void meth7627() { }
+    public void meth7628() { }
+    public void meth7629() { }
+    public void meth7630() { }
+    public void meth7631() { }
+    public void meth7632() { }
+    public void meth7633() { }
+    public void meth7634() { }
+    public void meth7635() { }
+    public void meth7636() { }
+    public void meth7637() { }
+    public void meth7638() { }
+    public void meth7639() { }
+    public void meth7640() { }
+    public void meth7641() { }
+    public void meth7642() { }
+    public void meth7643() { }
+    public void meth7644() { }
+    public void meth7645() { }
+    public void meth7646() { }
+    public void meth7647() { }
+    public void meth7648() { }
+    public void meth7649() { }
+    public void meth7650() { }
+    public void meth7651() { }
+    public void meth7652() { }
+    public void meth7653() { }
+    public void meth7654() { }
+    public void meth7655() { }
+    public void meth7656() { }
+    public void meth7657() { }
+    public void meth7658() { }
+    public void meth7659() { }
+    public void meth7660() { }
+    public void meth7661() { }
+    public void meth7662() { }
+    public void meth7663() { }
+    public void meth7664() { }
+    public void meth7665() { }
+    public void meth7666() { }
+    public void meth7667() { }
+    public void meth7668() { }
+    public void meth7669() { }
+    public void meth7670() { }
+    public void meth7671() { }
+    public void meth7672() { }
+    public void meth7673() { }
+    public void meth7674() { }
+    public void meth7675() { }
+    public void meth7676() { }
+    public void meth7677() { }
+    public void meth7678() { }
+    public void meth7679() { }
+    public void meth7680() { }
+    public void meth7681() { }
+    public void meth7682() { }
+    public void meth7683() { }
+    public void meth7684() { }
+    public void meth7685() { }
+    public void meth7686() { }
+    public void meth7687() { }
+    public void meth7688() { }
+    public void meth7689() { }
+    public void meth7690() { }
+    public void meth7691() { }
+    public void meth7692() { }
+    public void meth7693() { }
+    public void meth7694() { }
+    public void meth7695() { }
+    public void meth7696() { }
+    public void meth7697() { }
+    public void meth7698() { }
+    public void meth7699() { }
+    public void meth7700() { }
+    public void meth7701() { }
+    public void meth7702() { }
+    public void meth7703() { }
+    public void meth7704() { }
+    public void meth7705() { }
+    public void meth7706() { }
+    public void meth7707() { }
+    public void meth7708() { }
+    public void meth7709() { }
+    public void meth7710() { }
+    public void meth7711() { }
+    public void meth7712() { }
+    public void meth7713() { }
+    public void meth7714() { }
+    public void meth7715() { }
+    public void meth7716() { }
+    public void meth7717() { }
+    public void meth7718() { }
+    public void meth7719() { }
+    public void meth7720() { }
+    public void meth7721() { }
+    public void meth7722() { }
+    public void meth7723() { }
+    public void meth7724() { }
+    public void meth7725() { }
+    public void meth7726() { }
+    public void meth7727() { }
+    public void meth7728() { }
+    public void meth7729() { }
+    public void meth7730() { }
+    public void meth7731() { }
+    public void meth7732() { }
+    public void meth7733() { }
+    public void meth7734() { }
+    public void meth7735() { }
+    public void meth7736() { }
+    public void meth7737() { }
+    public void meth7738() { }
+    public void meth7739() { }
+    public void meth7740() { }
+    public void meth7741() { }
+    public void meth7742() { }
+    public void meth7743() { }
+    public void meth7744() { }
+    public void meth7745() { }
+    public void meth7746() { }
+    public void meth7747() { }
+    public void meth7748() { }
+    public void meth7749() { }
+    public void meth7750() { }
+    public void meth7751() { }
+    public void meth7752() { }
+    public void meth7753() { }
+    public void meth7754() { }
+    public void meth7755() { }
+    public void meth7756() { }
+    public void meth7757() { }
+    public void meth7758() { }
+    public void meth7759() { }
+    public void meth7760() { }
+    public void meth7761() { }
+    public void meth7762() { }
+    public void meth7763() { }
+    public void meth7764() { }
+    public void meth7765() { }
+    public void meth7766() { }
+    public void meth7767() { }
+    public void meth7768() { }
+    public void meth7769() { }
+    public void meth7770() { }
+    public void meth7771() { }
+    public void meth7772() { }
+    public void meth7773() { }
+    public void meth7774() { }
+    public void meth7775() { }
+    public void meth7776() { }
+    public void meth7777() { }
+    public void meth7778() { }
+    public void meth7779() { }
+    public void meth7780() { }
+    public void meth7781() { }
+    public void meth7782() { }
+    public void meth7783() { }
+    public void meth7784() { }
+    public void meth7785() { }
+    public void meth7786() { }
+    public void meth7787() { }
+    public void meth7788() { }
+    public void meth7789() { }
+    public void meth7790() { }
+    public void meth7791() { }
+    public void meth7792() { }
+    public void meth7793() { }
+    public void meth7794() { }
+    public void meth7795() { }
+    public void meth7796() { }
+    public void meth7797() { }
+    public void meth7798() { }
+    public void meth7799() { }
+    public void meth7800() { }
+    public void meth7801() { }
+    public void meth7802() { }
+    public void meth7803() { }
+    public void meth7804() { }
+    public void meth7805() { }
+    public void meth7806() { }
+    public void meth7807() { }
+    public void meth7808() { }
+    public void meth7809() { }
+    public void meth7810() { }
+    public void meth7811() { }
+    public void meth7812() { }
+    public void meth7813() { }
+    public void meth7814() { }
+    public void meth7815() { }
+    public void meth7816() { }
+    public void meth7817() { }
+    public void meth7818() { }
+    public void meth7819() { }
+    public void meth7820() { }
+    public void meth7821() { }
+    public void meth7822() { }
+    public void meth7823() { }
+    public void meth7824() { }
+    public void meth7825() { }
+    public void meth7826() { }
+    public void meth7827() { }
+    public void meth7828() { }
+    public void meth7829() { }
+    public void meth7830() { }
+    public void meth7831() { }
+    public void meth7832() { }
+    public void meth7833() { }
+    public void meth7834() { }
+    public void meth7835() { }
+    public void meth7836() { }
+    public void meth7837() { }
+    public void meth7838() { }
+    public void meth7839() { }
+    public void meth7840() { }
+    public void meth7841() { }
+    public void meth7842() { }
+    public void meth7843() { }
+    public void meth7844() { }
+    public void meth7845() { }
+    public void meth7846() { }
+    public void meth7847() { }
+    public void meth7848() { }
+    public void meth7849() { }
+    public void meth7850() { }
+    public void meth7851() { }
+    public void meth7852() { }
+    public void meth7853() { }
+    public void meth7854() { }
+    public void meth7855() { }
+    public void meth7856() { }
+    public void meth7857() { }
+    public void meth7858() { }
+    public void meth7859() { }
+    public void meth7860() { }
+    public void meth7861() { }
+    public void meth7862() { }
+    public void meth7863() { }
+    public void meth7864() { }
+    public void meth7865() { }
+    public void meth7866() { }
+    public void meth7867() { }
+    public void meth7868() { }
+    public void meth7869() { }
+    public void meth7870() { }
+    public void meth7871() { }
+    public void meth7872() { }
+    public void meth7873() { }
+    public void meth7874() { }
+    public void meth7875() { }
+    public void meth7876() { }
+    public void meth7877() { }
+    public void meth7878() { }
+    public void meth7879() { }
+    public void meth7880() { }
+    public void meth7881() { }
+    public void meth7882() { }
+    public void meth7883() { }
+    public void meth7884() { }
+    public void meth7885() { }
+    public void meth7886() { }
+    public void meth7887() { }
+    public void meth7888() { }
+    public void meth7889() { }
+    public void meth7890() { }
+    public void meth7891() { }
+    public void meth7892() { }
+    public void meth7893() { }
+    public void meth7894() { }
+    public void meth7895() { }
+    public void meth7896() { }
+    public void meth7897() { }
+    public void meth7898() { }
+    public void meth7899() { }
+    public void meth7900() { }
+    public void meth7901() { }
+    public void meth7902() { }
+    public void meth7903() { }
+    public void meth7904() { }
+    public void meth7905() { }
+    public void meth7906() { }
+    public void meth7907() { }
+    public void meth7908() { }
+    public void meth7909() { }
+    public void meth7910() { }
+    public void meth7911() { }
+    public void meth7912() { }
+    public void meth7913() { }
+    public void meth7914() { }
+    public void meth7915() { }
+    public void meth7916() { }
+    public void meth7917() { }
+    public void meth7918() { }
+    public void meth7919() { }
+    public void meth7920() { }
+    public void meth7921() { }
+    public void meth7922() { }
+    public void meth7923() { }
+    public void meth7924() { }
+    public void meth7925() { }
+    public void meth7926() { }
+    public void meth7927() { }
+    public void meth7928() { }
+    public void meth7929() { }
+    public void meth7930() { }
+    public void meth7931() { }
+    public void meth7932() { }
+    public void meth7933() { }
+    public void meth7934() { }
+    public void meth7935() { }
+    public void meth7936() { }
+    public void meth7937() { }
+    public void meth7938() { }
+    public void meth7939() { }
+    public void meth7940() { }
+    public void meth7941() { }
+    public void meth7942() { }
+    public void meth7943() { }
+    public void meth7944() { }
+    public void meth7945() { }
+    public void meth7946() { }
+    public void meth7947() { }
+    public void meth7948() { }
+    public void meth7949() { }
+    public void meth7950() { }
+    public void meth7951() { }
+    public void meth7952() { }
+    public void meth7953() { }
+    public void meth7954() { }
+    public void meth7955() { }
+    public void meth7956() { }
+    public void meth7957() { }
+    public void meth7958() { }
+    public void meth7959() { }
+    public void meth7960() { }
+    public void meth7961() { }
+    public void meth7962() { }
+    public void meth7963() { }
+    public void meth7964() { }
+    public void meth7965() { }
+    public void meth7966() { }
+    public void meth7967() { }
+    public void meth7968() { }
+    public void meth7969() { }
+    public void meth7970() { }
+    public void meth7971() { }
+    public void meth7972() { }
+    public void meth7973() { }
+    public void meth7974() { }
+    public void meth7975() { }
+    public void meth7976() { }
+    public void meth7977() { }
+    public void meth7978() { }
+    public void meth7979() { }
+    public void meth7980() { }
+    public void meth7981() { }
+    public void meth7982() { }
+    public void meth7983() { }
+    public void meth7984() { }
+    public void meth7985() { }
+    public void meth7986() { }
+    public void meth7987() { }
+    public void meth7988() { }
+    public void meth7989() { }
+    public void meth7990() { }
+    public void meth7991() { }
+    public void meth7992() { }
+    public void meth7993() { }
+    public void meth7994() { }
+    public void meth7995() { }
+    public void meth7996() { }
+    public void meth7997() { }
+    public void meth7998() { }
+    public void meth7999() { }
+    public void meth8000() { }
+    public void meth8001() { }
+    public void meth8002() { }
+    public void meth8003() { }
+    public void meth8004() { }
+    public void meth8005() { }
+    public void meth8006() { }
+    public void meth8007() { }
+    public void meth8008() { }
+    public void meth8009() { }
+    public void meth8010() { }
+    public void meth8011() { }
+    public void meth8012() { }
+    public void meth8013() { }
+    public void meth8014() { }
+    public void meth8015() { }
+    public void meth8016() { }
+    public void meth8017() { }
+    public void meth8018() { }
+    public void meth8019() { }
+    public void meth8020() { }
+    public void meth8021() { }
+    public void meth8022() { }
+    public void meth8023() { }
+    public void meth8024() { }
+    public void meth8025() { }
+    public void meth8026() { }
+    public void meth8027() { }
+    public void meth8028() { }
+    public void meth8029() { }
+    public void meth8030() { }
+    public void meth8031() { }
+    public void meth8032() { }
+    public void meth8033() { }
+    public void meth8034() { }
+    public void meth8035() { }
+    public void meth8036() { }
+    public void meth8037() { }
+    public void meth8038() { }
+    public void meth8039() { }
+    public void meth8040() { }
+    public void meth8041() { }
+    public void meth8042() { }
+    public void meth8043() { }
+    public void meth8044() { }
+    public void meth8045() { }
+    public void meth8046() { }
+    public void meth8047() { }
+    public void meth8048() { }
+    public void meth8049() { }
+    public void meth8050() { }
+    public void meth8051() { }
+    public void meth8052() { }
+    public void meth8053() { }
+    public void meth8054() { }
+    public void meth8055() { }
+    public void meth8056() { }
+    public void meth8057() { }
+    public void meth8058() { }
+    public void meth8059() { }
+    public void meth8060() { }
+    public void meth8061() { }
+    public void meth8062() { }
+    public void meth8063() { }
+    public void meth8064() { }
+    public void meth8065() { }
+    public void meth8066() { }
+    public void meth8067() { }
+    public void meth8068() { }
+    public void meth8069() { }
+    public void meth8070() { }
+    public void meth8071() { }
+    public void meth8072() { }
+    public void meth8073() { }
+    public void meth8074() { }
+    public void meth8075() { }
+    public void meth8076() { }
+    public void meth8077() { }
+    public void meth8078() { }
+    public void meth8079() { }
+    public void meth8080() { }
+    public void meth8081() { }
+    public void meth8082() { }
+    public void meth8083() { }
+    public void meth8084() { }
+    public void meth8085() { }
+    public void meth8086() { }
+    public void meth8087() { }
+    public void meth8088() { }
+    public void meth8089() { }
+    public void meth8090() { }
+    public void meth8091() { }
+    public void meth8092() { }
+    public void meth8093() { }
+    public void meth8094() { }
+    public void meth8095() { }
+    public void meth8096() { }
+    public void meth8097() { }
+    public void meth8098() { }
+    public void meth8099() { }
+    public void meth8100() { }
+    public void meth8101() { }
+    public void meth8102() { }
+    public void meth8103() { }
+    public void meth8104() { }
+    public void meth8105() { }
+    public void meth8106() { }
+    public void meth8107() { }
+    public void meth8108() { }
+    public void meth8109() { }
+    public void meth8110() { }
+    public void meth8111() { }
+    public void meth8112() { }
+    public void meth8113() { }
+    public void meth8114() { }
+    public void meth8115() { }
+    public void meth8116() { }
+    public void meth8117() { }
+    public void meth8118() { }
+    public void meth8119() { }
+    public void meth8120() { }
+    public void meth8121() { }
+    public void meth8122() { }
+    public void meth8123() { }
+    public void meth8124() { }
+    public void meth8125() { }
+    public void meth8126() { }
+    public void meth8127() { }
+    public void meth8128() { }
+    public void meth8129() { }
+    public void meth8130() { }
+    public void meth8131() { }
+    public void meth8132() { }
+    public void meth8133() { }
+    public void meth8134() { }
+    public void meth8135() { }
+    public void meth8136() { }
+    public void meth8137() { }
+    public void meth8138() { }
+    public void meth8139() { }
+    public void meth8140() { }
+    public void meth8141() { }
+    public void meth8142() { }
+    public void meth8143() { }
+    public void meth8144() { }
+    public void meth8145() { }
+    public void meth8146() { }
+    public void meth8147() { }
+    public void meth8148() { }
+    public void meth8149() { }
+    public void meth8150() { }
+    public void meth8151() { }
+    public void meth8152() { }
+    public void meth8153() { }
+    public void meth8154() { }
+    public void meth8155() { }
+    public void meth8156() { }
+    public void meth8157() { }
+    public void meth8158() { }
+    public void meth8159() { }
+    public void meth8160() { }
+    public void meth8161() { }
+    public void meth8162() { }
+    public void meth8163() { }
+    public void meth8164() { }
+    public void meth8165() { }
+    public void meth8166() { }
+    public void meth8167() { }
+    public void meth8168() { }
+    public void meth8169() { }
+    public void meth8170() { }
+    public void meth8171() { }
+    public void meth8172() { }
+    public void meth8173() { }
+    public void meth8174() { }
+    public void meth8175() { }
+    public void meth8176() { }
+    public void meth8177() { }
+    public void meth8178() { }
+    public void meth8179() { }
+    public void meth8180() { }
+    public void meth8181() { }
+    public void meth8182() { }
+    public void meth8183() { }
+    public void meth8184() { }
+    public void meth8185() { }
+    public void meth8186() { }
+    public void meth8187() { }
+    public void meth8188() { }
+    public void meth8189() { }
+    public void meth8190() { }
+    public void meth8191() { }
+    public void meth8192() { }
+    public void meth8193() { }
+    public void meth8194() { }
+    public void meth8195() { }
+    public void meth8196() { }
+    public void meth8197() { }
+    public void meth8198() { }
+    public void meth8199() { }
+    public void meth8200() { }
+    public void meth8201() { }
+    public void meth8202() { }
+    public void meth8203() { }
+    public void meth8204() { }
+    public void meth8205() { }
+    public void meth8206() { }
+    public void meth8207() { }
+    public void meth8208() { }
+    public void meth8209() { }
+    public void meth8210() { }
+    public void meth8211() { }
+    public void meth8212() { }
+    public void meth8213() { }
+    public void meth8214() { }
+    public void meth8215() { }
+    public void meth8216() { }
+    public void meth8217() { }
+    public void meth8218() { }
+    public void meth8219() { }
+    public void meth8220() { }
+    public void meth8221() { }
+    public void meth8222() { }
+    public void meth8223() { }
+    public void meth8224() { }
+    public void meth8225() { }
+    public void meth8226() { }
+    public void meth8227() { }
+    public void meth8228() { }
+    public void meth8229() { }
+    public void meth8230() { }
+    public void meth8231() { }
+    public void meth8232() { }
+    public void meth8233() { }
+    public void meth8234() { }
+    public void meth8235() { }
+    public void meth8236() { }
+    public void meth8237() { }
+    public void meth8238() { }
+    public void meth8239() { }
+    public void meth8240() { }
+    public void meth8241() { }
+    public void meth8242() { }
+    public void meth8243() { }
+    public void meth8244() { }
+    public void meth8245() { }
+    public void meth8246() { }
+    public void meth8247() { }
+    public void meth8248() { }
+    public void meth8249() { }
+    public void meth8250() { }
+    public void meth8251() { }
+    public void meth8252() { }
+    public void meth8253() { }
+    public void meth8254() { }
+    public void meth8255() { }
+    public void meth8256() { }
+    public void meth8257() { }
+    public void meth8258() { }
+    public void meth8259() { }
+    public void meth8260() { }
+    public void meth8261() { }
+    public void meth8262() { }
+    public void meth8263() { }
+    public void meth8264() { }
+    public void meth8265() { }
+    public void meth8266() { }
+    public void meth8267() { }
+    public void meth8268() { }
+    public void meth8269() { }
+    public void meth8270() { }
+    public void meth8271() { }
+    public void meth8272() { }
+    public void meth8273() { }
+    public void meth8274() { }
+    public void meth8275() { }
+    public void meth8276() { }
+    public void meth8277() { }
+    public void meth8278() { }
+    public void meth8279() { }
+    public void meth8280() { }
+    public void meth8281() { }
+    public void meth8282() { }
+    public void meth8283() { }
+    public void meth8284() { }
+    public void meth8285() { }
+    public void meth8286() { }
+    public void meth8287() { }
+    public void meth8288() { }
+    public void meth8289() { }
+    public void meth8290() { }
+    public void meth8291() { }
+    public void meth8292() { }
+    public void meth8293() { }
+    public void meth8294() { }
+    public void meth8295() { }
+    public void meth8296() { }
+    public void meth8297() { }
+    public void meth8298() { }
+    public void meth8299() { }
+    public void meth8300() { }
+    public void meth8301() { }
+    public void meth8302() { }
+    public void meth8303() { }
+    public void meth8304() { }
+    public void meth8305() { }
+    public void meth8306() { }
+    public void meth8307() { }
+    public void meth8308() { }
+    public void meth8309() { }
+    public void meth8310() { }
+    public void meth8311() { }
+    public void meth8312() { }
+    public void meth8313() { }
+    public void meth8314() { }
+    public void meth8315() { }
+    public void meth8316() { }
+    public void meth8317() { }
+    public void meth8318() { }
+    public void meth8319() { }
+    public void meth8320() { }
+    public void meth8321() { }
+    public void meth8322() { }
+    public void meth8323() { }
+    public void meth8324() { }
+    public void meth8325() { }
+    public void meth8326() { }
+    public void meth8327() { }
+    public void meth8328() { }
+    public void meth8329() { }
+    public void meth8330() { }
+    public void meth8331() { }
+    public void meth8332() { }
+    public void meth8333() { }
+    public void meth8334() { }
+    public void meth8335() { }
+    public void meth8336() { }
+    public void meth8337() { }
+    public void meth8338() { }
+    public void meth8339() { }
+    public void meth8340() { }
+    public void meth8341() { }
+    public void meth8342() { }
+    public void meth8343() { }
+    public void meth8344() { }
+    public void meth8345() { }
+    public void meth8346() { }
+    public void meth8347() { }
+    public void meth8348() { }
+    public void meth8349() { }
+    public void meth8350() { }
+    public void meth8351() { }
+    public void meth8352() { }
+    public void meth8353() { }
+    public void meth8354() { }
+    public void meth8355() { }
+    public void meth8356() { }
+    public void meth8357() { }
+    public void meth8358() { }
+    public void meth8359() { }
+    public void meth8360() { }
+    public void meth8361() { }
+    public void meth8362() { }
+    public void meth8363() { }
+    public void meth8364() { }
+    public void meth8365() { }
+    public void meth8366() { }
+    public void meth8367() { }
+    public void meth8368() { }
+    public void meth8369() { }
+    public void meth8370() { }
+    public void meth8371() { }
+    public void meth8372() { }
+    public void meth8373() { }
+    public void meth8374() { }
+    public void meth8375() { }
+    public void meth8376() { }
+    public void meth8377() { }
+    public void meth8378() { }
+    public void meth8379() { }
+    public void meth8380() { }
+    public void meth8381() { }
+    public void meth8382() { }
+    public void meth8383() { }
+    public void meth8384() { }
+    public void meth8385() { }
+    public void meth8386() { }
+    public void meth8387() { }
+    public void meth8388() { }
+    public void meth8389() { }
+    public void meth8390() { }
+    public void meth8391() { }
+    public void meth8392() { }
+    public void meth8393() { }
+    public void meth8394() { }
+    public void meth8395() { }
+    public void meth8396() { }
+    public void meth8397() { }
+    public void meth8398() { }
+    public void meth8399() { }
+    public void meth8400() { }
+    public void meth8401() { }
+    public void meth8402() { }
+    public void meth8403() { }
+    public void meth8404() { }
+    public void meth8405() { }
+    public void meth8406() { }
+    public void meth8407() { }
+    public void meth8408() { }
+    public void meth8409() { }
+    public void meth8410() { }
+    public void meth8411() { }
+    public void meth8412() { }
+    public void meth8413() { }
+    public void meth8414() { }
+    public void meth8415() { }
+    public void meth8416() { }
+    public void meth8417() { }
+    public void meth8418() { }
+    public void meth8419() { }
+    public void meth8420() { }
+    public void meth8421() { }
+    public void meth8422() { }
+    public void meth8423() { }
+    public void meth8424() { }
+    public void meth8425() { }
+    public void meth8426() { }
+    public void meth8427() { }
+    public void meth8428() { }
+    public void meth8429() { }
+    public void meth8430() { }
+    public void meth8431() { }
+    public void meth8432() { }
+    public void meth8433() { }
+    public void meth8434() { }
+    public void meth8435() { }
+    public void meth8436() { }
+    public void meth8437() { }
+    public void meth8438() { }
+    public void meth8439() { }
+    public void meth8440() { }
+    public void meth8441() { }
+    public void meth8442() { }
+    public void meth8443() { }
+    public void meth8444() { }
+    public void meth8445() { }
+    public void meth8446() { }
+    public void meth8447() { }
+    public void meth8448() { }
+    public void meth8449() { }
+    public void meth8450() { }
+    public void meth8451() { }
+    public void meth8452() { }
+    public void meth8453() { }
+    public void meth8454() { }
+    public void meth8455() { }
+    public void meth8456() { }
+    public void meth8457() { }
+    public void meth8458() { }
+    public void meth8459() { }
+    public void meth8460() { }
+    public void meth8461() { }
+    public void meth8462() { }
+    public void meth8463() { }
+    public void meth8464() { }
+    public void meth8465() { }
+    public void meth8466() { }
+    public void meth8467() { }
+    public void meth8468() { }
+    public void meth8469() { }
+    public void meth8470() { }
+    public void meth8471() { }
+    public void meth8472() { }
+    public void meth8473() { }
+    public void meth8474() { }
+    public void meth8475() { }
+    public void meth8476() { }
+    public void meth8477() { }
+    public void meth8478() { }
+    public void meth8479() { }
+    public void meth8480() { }
+    public void meth8481() { }
+    public void meth8482() { }
+    public void meth8483() { }
+    public void meth8484() { }
+    public void meth8485() { }
+    public void meth8486() { }
+    public void meth8487() { }
+    public void meth8488() { }
+    public void meth8489() { }
+    public void meth8490() { }
+    public void meth8491() { }
+    public void meth8492() { }
+    public void meth8493() { }
+    public void meth8494() { }
+    public void meth8495() { }
+    public void meth8496() { }
+    public void meth8497() { }
+    public void meth8498() { }
+    public void meth8499() { }
+    public void meth8500() { }
+    public void meth8501() { }
+    public void meth8502() { }
+    public void meth8503() { }
+    public void meth8504() { }
+    public void meth8505() { }
+    public void meth8506() { }
+    public void meth8507() { }
+    public void meth8508() { }
+    public void meth8509() { }
+    public void meth8510() { }
+    public void meth8511() { }
+    public void meth8512() { }
+    public void meth8513() { }
+    public void meth8514() { }
+    public void meth8515() { }
+    public void meth8516() { }
+    public void meth8517() { }
+    public void meth8518() { }
+    public void meth8519() { }
+    public void meth8520() { }
+    public void meth8521() { }
+    public void meth8522() { }
+    public void meth8523() { }
+    public void meth8524() { }
+    public void meth8525() { }
+    public void meth8526() { }
+    public void meth8527() { }
+    public void meth8528() { }
+    public void meth8529() { }
+    public void meth8530() { }
+    public void meth8531() { }
+    public void meth8532() { }
+    public void meth8533() { }
+    public void meth8534() { }
+    public void meth8535() { }
+    public void meth8536() { }
+    public void meth8537() { }
+    public void meth8538() { }
+    public void meth8539() { }
+    public void meth8540() { }
+    public void meth8541() { }
+    public void meth8542() { }
+    public void meth8543() { }
+    public void meth8544() { }
+    public void meth8545() { }
+    public void meth8546() { }
+    public void meth8547() { }
+    public void meth8548() { }
+    public void meth8549() { }
+    public void meth8550() { }
+    public void meth8551() { }
+    public void meth8552() { }
+    public void meth8553() { }
+    public void meth8554() { }
+    public void meth8555() { }
+    public void meth8556() { }
+    public void meth8557() { }
+    public void meth8558() { }
+    public void meth8559() { }
+    public void meth8560() { }
+    public void meth8561() { }
+    public void meth8562() { }
+    public void meth8563() { }
+    public void meth8564() { }
+    public void meth8565() { }
+    public void meth8566() { }
+    public void meth8567() { }
+    public void meth8568() { }
+    public void meth8569() { }
+    public void meth8570() { }
+    public void meth8571() { }
+    public void meth8572() { }
+    public void meth8573() { }
+    public void meth8574() { }
+    public void meth8575() { }
+    public void meth8576() { }
+    public void meth8577() { }
+    public void meth8578() { }
+    public void meth8579() { }
+    public void meth8580() { }
+    public void meth8581() { }
+    public void meth8582() { }
+    public void meth8583() { }
+    public void meth8584() { }
+    public void meth8585() { }
+    public void meth8586() { }
+    public void meth8587() { }
+    public void meth8588() { }
+    public void meth8589() { }
+    public void meth8590() { }
+    public void meth8591() { }
+    public void meth8592() { }
+    public void meth8593() { }
+    public void meth8594() { }
+    public void meth8595() { }
+    public void meth8596() { }
+    public void meth8597() { }
+    public void meth8598() { }
+    public void meth8599() { }
+    public void meth8600() { }
+    public void meth8601() { }
+    public void meth8602() { }
+    public void meth8603() { }
+    public void meth8604() { }
+    public void meth8605() { }
+    public void meth8606() { }
+    public void meth8607() { }
+    public void meth8608() { }
+    public void meth8609() { }
+    public void meth8610() { }
+    public void meth8611() { }
+    public void meth8612() { }
+    public void meth8613() { }
+    public void meth8614() { }
+    public void meth8615() { }
+    public void meth8616() { }
+    public void meth8617() { }
+    public void meth8618() { }
+    public void meth8619() { }
+    public void meth8620() { }
+    public void meth8621() { }
+    public void meth8622() { }
+    public void meth8623() { }
+    public void meth8624() { }
+    public void meth8625() { }
+    public void meth8626() { }
+    public void meth8627() { }
+    public void meth8628() { }
+    public void meth8629() { }
+    public void meth8630() { }
+    public void meth8631() { }
+    public void meth8632() { }
+    public void meth8633() { }
+    public void meth8634() { }
+    public void meth8635() { }
+    public void meth8636() { }
+    public void meth8637() { }
+    public void meth8638() { }
+    public void meth8639() { }
+    public void meth8640() { }
+    public void meth8641() { }
+    public void meth8642() { }
+    public void meth8643() { }
+    public void meth8644() { }
+    public void meth8645() { }
+    public void meth8646() { }
+    public void meth8647() { }
+    public void meth8648() { }
+    public void meth8649() { }
+    public void meth8650() { }
+    public void meth8651() { }
+    public void meth8652() { }
+    public void meth8653() { }
+    public void meth8654() { }
+    public void meth8655() { }
+    public void meth8656() { }
+    public void meth8657() { }
+    public void meth8658() { }
+    public void meth8659() { }
+    public void meth8660() { }
+    public void meth8661() { }
+    public void meth8662() { }
+    public void meth8663() { }
+    public void meth8664() { }
+    public void meth8665() { }
+    public void meth8666() { }
+    public void meth8667() { }
+    public void meth8668() { }
+    public void meth8669() { }
+    public void meth8670() { }
+    public void meth8671() { }
+    public void meth8672() { }
+    public void meth8673() { }
+    public void meth8674() { }
+    public void meth8675() { }
+    public void meth8676() { }
+    public void meth8677() { }
+    public void meth8678() { }
+    public void meth8679() { }
+    public void meth8680() { }
+    public void meth8681() { }
+    public void meth8682() { }
+    public void meth8683() { }
+    public void meth8684() { }
+    public void meth8685() { }
+    public void meth8686() { }
+    public void meth8687() { }
+    public void meth8688() { }
+    public void meth8689() { }
+    public void meth8690() { }
+    public void meth8691() { }
+    public void meth8692() { }
+    public void meth8693() { }
+    public void meth8694() { }
+    public void meth8695() { }
+    public void meth8696() { }
+    public void meth8697() { }
+    public void meth8698() { }
+    public void meth8699() { }
+    public void meth8700() { }
+    public void meth8701() { }
+    public void meth8702() { }
+    public void meth8703() { }
+    public void meth8704() { }
+    public void meth8705() { }
+    public void meth8706() { }
+    public void meth8707() { }
+    public void meth8708() { }
+    public void meth8709() { }
+    public void meth8710() { }
+    public void meth8711() { }
+    public void meth8712() { }
+    public void meth8713() { }
+    public void meth8714() { }
+    public void meth8715() { }
+    public void meth8716() { }
+    public void meth8717() { }
+    public void meth8718() { }
+    public void meth8719() { }
+    public void meth8720() { }
+    public void meth8721() { }
+    public void meth8722() { }
+    public void meth8723() { }
+    public void meth8724() { }
+    public void meth8725() { }
+    public void meth8726() { }
+    public void meth8727() { }
+    public void meth8728() { }
+    public void meth8729() { }
+    public void meth8730() { }
+    public void meth8731() { }
+    public void meth8732() { }
+    public void meth8733() { }
+    public void meth8734() { }
+    public void meth8735() { }
+    public void meth8736() { }
+    public void meth8737() { }
+    public void meth8738() { }
+    public void meth8739() { }
+    public void meth8740() { }
+    public void meth8741() { }
+    public void meth8742() { }
+    public void meth8743() { }
+    public void meth8744() { }
+    public void meth8745() { }
+    public void meth8746() { }
+    public void meth8747() { }
+    public void meth8748() { }
+    public void meth8749() { }
+    public void meth8750() { }
+    public void meth8751() { }
+    public void meth8752() { }
+    public void meth8753() { }
+    public void meth8754() { }
+    public void meth8755() { }
+    public void meth8756() { }
+    public void meth8757() { }
+    public void meth8758() { }
+    public void meth8759() { }
+    public void meth8760() { }
+    public void meth8761() { }
+    public void meth8762() { }
+    public void meth8763() { }
+    public void meth8764() { }
+    public void meth8765() { }
+    public void meth8766() { }
+    public void meth8767() { }
+    public void meth8768() { }
+    public void meth8769() { }
+    public void meth8770() { }
+    public void meth8771() { }
+    public void meth8772() { }
+    public void meth8773() { }
+    public void meth8774() { }
+    public void meth8775() { }
+    public void meth8776() { }
+    public void meth8777() { }
+    public void meth8778() { }
+    public void meth8779() { }
+    public void meth8780() { }
+    public void meth8781() { }
+    public void meth8782() { }
+    public void meth8783() { }
+    public void meth8784() { }
+    public void meth8785() { }
+    public void meth8786() { }
+    public void meth8787() { }
+    public void meth8788() { }
+    public void meth8789() { }
+    public void meth8790() { }
+    public void meth8791() { }
+    public void meth8792() { }
+    public void meth8793() { }
+    public void meth8794() { }
+    public void meth8795() { }
+    public void meth8796() { }
+    public void meth8797() { }
+    public void meth8798() { }
+    public void meth8799() { }
+    public void meth8800() { }
+    public void meth8801() { }
+    public void meth8802() { }
+    public void meth8803() { }
+    public void meth8804() { }
+    public void meth8805() { }
+    public void meth8806() { }
+    public void meth8807() { }
+    public void meth8808() { }
+    public void meth8809() { }
+    public void meth8810() { }
+    public void meth8811() { }
+    public void meth8812() { }
+    public void meth8813() { }
+    public void meth8814() { }
+    public void meth8815() { }
+    public void meth8816() { }
+    public void meth8817() { }
+    public void meth8818() { }
+    public void meth8819() { }
+    public void meth8820() { }
+    public void meth8821() { }
+    public void meth8822() { }
+    public void meth8823() { }
+    public void meth8824() { }
+    public void meth8825() { }
+    public void meth8826() { }
+    public void meth8827() { }
+    public void meth8828() { }
+    public void meth8829() { }
+    public void meth8830() { }
+    public void meth8831() { }
+    public void meth8832() { }
+    public void meth8833() { }
+    public void meth8834() { }
+    public void meth8835() { }
+    public void meth8836() { }
+    public void meth8837() { }
+    public void meth8838() { }
+    public void meth8839() { }
+    public void meth8840() { }
+    public void meth8841() { }
+    public void meth8842() { }
+    public void meth8843() { }
+    public void meth8844() { }
+    public void meth8845() { }
+    public void meth8846() { }
+    public void meth8847() { }
+    public void meth8848() { }
+    public void meth8849() { }
+    public void meth8850() { }
+    public void meth8851() { }
+    public void meth8852() { }
+    public void meth8853() { }
+    public void meth8854() { }
+    public void meth8855() { }
+    public void meth8856() { }
+    public void meth8857() { }
+    public void meth8858() { }
+    public void meth8859() { }
+    public void meth8860() { }
+    public void meth8861() { }
+    public void meth8862() { }
+    public void meth8863() { }
+    public void meth8864() { }
+    public void meth8865() { }
+    public void meth8866() { }
+    public void meth8867() { }
+    public void meth8868() { }
+    public void meth8869() { }
+    public void meth8870() { }
+    public void meth8871() { }
+    public void meth8872() { }
+    public void meth8873() { }
+    public void meth8874() { }
+    public void meth8875() { }
+    public void meth8876() { }
+    public void meth8877() { }
+    public void meth8878() { }
+    public void meth8879() { }
+    public void meth8880() { }
+    public void meth8881() { }
+    public void meth8882() { }
+    public void meth8883() { }
+    public void meth8884() { }
+    public void meth8885() { }
+    public void meth8886() { }
+    public void meth8887() { }
+    public void meth8888() { }
+    public void meth8889() { }
+    public void meth8890() { }
+    public void meth8891() { }
+    public void meth8892() { }
+    public void meth8893() { }
+    public void meth8894() { }
+    public void meth8895() { }
+    public void meth8896() { }
+    public void meth8897() { }
+    public void meth8898() { }
+    public void meth8899() { }
+    public void meth8900() { }
+    public void meth8901() { }
+    public void meth8902() { }
+    public void meth8903() { }
+    public void meth8904() { }
+    public void meth8905() { }
+    public void meth8906() { }
+    public void meth8907() { }
+    public void meth8908() { }
+    public void meth8909() { }
+    public void meth8910() { }
+    public void meth8911() { }
+    public void meth8912() { }
+    public void meth8913() { }
+    public void meth8914() { }
+    public void meth8915() { }
+    public void meth8916() { }
+    public void meth8917() { }
+    public void meth8918() { }
+    public void meth8919() { }
+    public void meth8920() { }
+    public void meth8921() { }
+    public void meth8922() { }
+    public void meth8923() { }
+    public void meth8924() { }
+    public void meth8925() { }
+    public void meth8926() { }
+    public void meth8927() { }
+    public void meth8928() { }
+    public void meth8929() { }
+    public void meth8930() { }
+    public void meth8931() { }
+    public void meth8932() { }
+    public void meth8933() { }
+    public void meth8934() { }
+    public void meth8935() { }
+    public void meth8936() { }
+    public void meth8937() { }
+    public void meth8938() { }
+    public void meth8939() { }
+    public void meth8940() { }
+    public void meth8941() { }
+    public void meth8942() { }
+    public void meth8943() { }
+    public void meth8944() { }
+    public void meth8945() { }
+    public void meth8946() { }
+    public void meth8947() { }
+    public void meth8948() { }
+    public void meth8949() { }
+    public void meth8950() { }
+    public void meth8951() { }
+    public void meth8952() { }
+    public void meth8953() { }
+    public void meth8954() { }
+    public void meth8955() { }
+    public void meth8956() { }
+    public void meth8957() { }
+    public void meth8958() { }
+    public void meth8959() { }
+    public void meth8960() { }
+    public void meth8961() { }
+    public void meth8962() { }
+    public void meth8963() { }
+    public void meth8964() { }
+    public void meth8965() { }
+    public void meth8966() { }
+    public void meth8967() { }
+    public void meth8968() { }
+    public void meth8969() { }
+    public void meth8970() { }
+    public void meth8971() { }
+    public void meth8972() { }
+    public void meth8973() { }
+    public void meth8974() { }
+    public void meth8975() { }
+    public void meth8976() { }
+    public void meth8977() { }
+    public void meth8978() { }
+    public void meth8979() { }
+    public void meth8980() { }
+    public void meth8981() { }
+    public void meth8982() { }
+    public void meth8983() { }
+    public void meth8984() { }
+    public void meth8985() { }
+    public void meth8986() { }
+    public void meth8987() { }
+    public void meth8988() { }
+    public void meth8989() { }
+    public void meth8990() { }
+    public void meth8991() { }
+    public void meth8992() { }
+    public void meth8993() { }
+    public void meth8994() { }
+    public void meth8995() { }
+    public void meth8996() { }
+    public void meth8997() { }
+    public void meth8998() { }
+    public void meth8999() { }
+    public void meth9000() { }
+    public void meth9001() { }
+    public void meth9002() { }
+    public void meth9003() { }
+    public void meth9004() { }
+    public void meth9005() { }
+    public void meth9006() { }
+    public void meth9007() { }
+    public void meth9008() { }
+    public void meth9009() { }
+    public void meth9010() { }
+    public void meth9011() { }
+    public void meth9012() { }
+    public void meth9013() { }
+    public void meth9014() { }
+    public void meth9015() { }
+    public void meth9016() { }
+    public void meth9017() { }
+    public void meth9018() { }
+    public void meth9019() { }
+    public void meth9020() { }
+    public void meth9021() { }
+    public void meth9022() { }
+    public void meth9023() { }
+    public void meth9024() { }
+    public void meth9025() { }
+    public void meth9026() { }
+    public void meth9027() { }
+    public void meth9028() { }
+    public void meth9029() { }
+    public void meth9030() { }
+    public void meth9031() { }
+    public void meth9032() { }
+    public void meth9033() { }
+    public void meth9034() { }
+    public void meth9035() { }
+    public void meth9036() { }
+    public void meth9037() { }
+    public void meth9038() { }
+    public void meth9039() { }
+    public void meth9040() { }
+    public void meth9041() { }
+    public void meth9042() { }
+    public void meth9043() { }
+    public void meth9044() { }
+    public void meth9045() { }
+    public void meth9046() { }
+    public void meth9047() { }
+    public void meth9048() { }
+    public void meth9049() { }
+    public void meth9050() { }
+    public void meth9051() { }
+    public void meth9052() { }
+    public void meth9053() { }
+    public void meth9054() { }
+    public void meth9055() { }
+    public void meth9056() { }
+    public void meth9057() { }
+    public void meth9058() { }
+    public void meth9059() { }
+    public void meth9060() { }
+    public void meth9061() { }
+    public void meth9062() { }
+    public void meth9063() { }
+    public void meth9064() { }
+    public void meth9065() { }
+    public void meth9066() { }
+    public void meth9067() { }
+    public void meth9068() { }
+    public void meth9069() { }
+    public void meth9070() { }
+    public void meth9071() { }
+    public void meth9072() { }
+    public void meth9073() { }
+    public void meth9074() { }
+    public void meth9075() { }
+    public void meth9076() { }
+    public void meth9077() { }
+    public void meth9078() { }
+    public void meth9079() { }
+    public void meth9080() { }
+    public void meth9081() { }
+    public void meth9082() { }
+    public void meth9083() { }
+    public void meth9084() { }
+    public void meth9085() { }
+    public void meth9086() { }
+    public void meth9087() { }
+    public void meth9088() { }
+    public void meth9089() { }
+    public void meth9090() { }
+    public void meth9091() { }
+    public void meth9092() { }
+    public void meth9093() { }
+    public void meth9094() { }
+    public void meth9095() { }
+    public void meth9096() { }
+    public void meth9097() { }
+    public void meth9098() { }
+    public void meth9099() { }
+    public void meth9100() { }
+    public void meth9101() { }
+    public void meth9102() { }
+    public void meth9103() { }
+    public void meth9104() { }
+    public void meth9105() { }
+    public void meth9106() { }
+    public void meth9107() { }
+    public void meth9108() { }
+    public void meth9109() { }
+    public void meth9110() { }
+    public void meth9111() { }
+    public void meth9112() { }
+    public void meth9113() { }
+    public void meth9114() { }
+    public void meth9115() { }
+    public void meth9116() { }
+    public void meth9117() { }
+    public void meth9118() { }
+    public void meth9119() { }
+    public void meth9120() { }
+    public void meth9121() { }
+    public void meth9122() { }
+    public void meth9123() { }
+    public void meth9124() { }
+    public void meth9125() { }
+    public void meth9126() { }
+    public void meth9127() { }
+    public void meth9128() { }
+    public void meth9129() { }
+    public void meth9130() { }
+    public void meth9131() { }
+    public void meth9132() { }
+    public void meth9133() { }
+    public void meth9134() { }
+    public void meth9135() { }
+    public void meth9136() { }
+    public void meth9137() { }
+    public void meth9138() { }
+    public void meth9139() { }
+    public void meth9140() { }
+    public void meth9141() { }
+    public void meth9142() { }
+    public void meth9143() { }
+    public void meth9144() { }
+    public void meth9145() { }
+    public void meth9146() { }
+    public void meth9147() { }
+    public void meth9148() { }
+    public void meth9149() { }
+    public void meth9150() { }
+    public void meth9151() { }
+    public void meth9152() { }
+    public void meth9153() { }
+    public void meth9154() { }
+    public void meth9155() { }
+    public void meth9156() { }
+    public void meth9157() { }
+    public void meth9158() { }
+    public void meth9159() { }
+    public void meth9160() { }
+    public void meth9161() { }
+    public void meth9162() { }
+    public void meth9163() { }
+    public void meth9164() { }
+    public void meth9165() { }
+    public void meth9166() { }
+    public void meth9167() { }
+    public void meth9168() { }
+    public void meth9169() { }
+    public void meth9170() { }
+    public void meth9171() { }
+    public void meth9172() { }
+    public void meth9173() { }
+    public void meth9174() { }
+    public void meth9175() { }
+    public void meth9176() { }
+    public void meth9177() { }
+    public void meth9178() { }
+    public void meth9179() { }
+    public void meth9180() { }
+    public void meth9181() { }
+    public void meth9182() { }
+    public void meth9183() { }
+    public void meth9184() { }
+    public void meth9185() { }
+    public void meth9186() { }
+    public void meth9187() { }
+    public void meth9188() { }
+    public void meth9189() { }
+    public void meth9190() { }
+    public void meth9191() { }
+    public void meth9192() { }
+    public void meth9193() { }
+    public void meth9194() { }
+    public void meth9195() { }
+    public void meth9196() { }
+    public void meth9197() { }
+    public void meth9198() { }
+    public void meth9199() { }
+    public void meth9200() { }
+    public void meth9201() { }
+    public void meth9202() { }
+    public void meth9203() { }
+    public void meth9204() { }
+    public void meth9205() { }
+    public void meth9206() { }
+    public void meth9207() { }
+    public void meth9208() { }
+    public void meth9209() { }
+    public void meth9210() { }
+    public void meth9211() { }
+    public void meth9212() { }
+    public void meth9213() { }
+    public void meth9214() { }
+    public void meth9215() { }
+    public void meth9216() { }
+    public void meth9217() { }
+    public void meth9218() { }
+    public void meth9219() { }
+    public void meth9220() { }
+    public void meth9221() { }
+    public void meth9222() { }
+    public void meth9223() { }
+    public void meth9224() { }
+    public void meth9225() { }
+    public void meth9226() { }
+    public void meth9227() { }
+    public void meth9228() { }
+    public void meth9229() { }
+    public void meth9230() { }
+    public void meth9231() { }
+    public void meth9232() { }
+    public void meth9233() { }
+    public void meth9234() { }
+    public void meth9235() { }
+    public void meth9236() { }
+    public void meth9237() { }
+    public void meth9238() { }
+    public void meth9239() { }
+    public void meth9240() { }
+    public void meth9241() { }
+    public void meth9242() { }
+    public void meth9243() { }
+    public void meth9244() { }
+    public void meth9245() { }
+    public void meth9246() { }
+    public void meth9247() { }
+    public void meth9248() { }
+    public void meth9249() { }
+    public void meth9250() { }
+    public void meth9251() { }
+    public void meth9252() { }
+    public void meth9253() { }
+    public void meth9254() { }
+    public void meth9255() { }
+    public void meth9256() { }
+    public void meth9257() { }
+    public void meth9258() { }
+    public void meth9259() { }
+    public void meth9260() { }
+    public void meth9261() { }
+    public void meth9262() { }
+    public void meth9263() { }
+    public void meth9264() { }
+    public void meth9265() { }
+    public void meth9266() { }
+    public void meth9267() { }
+    public void meth9268() { }
+    public void meth9269() { }
+    public void meth9270() { }
+    public void meth9271() { }
+    public void meth9272() { }
+    public void meth9273() { }
+    public void meth9274() { }
+    public void meth9275() { }
+    public void meth9276() { }
+    public void meth9277() { }
+    public void meth9278() { }
+    public void meth9279() { }
+    public void meth9280() { }
+    public void meth9281() { }
+    public void meth9282() { }
+    public void meth9283() { }
+    public void meth9284() { }
+    public void meth9285() { }
+    public void meth9286() { }
+    public void meth9287() { }
+    public void meth9288() { }
+    public void meth9289() { }
+    public void meth9290() { }
+    public void meth9291() { }
+    public void meth9292() { }
+    public void meth9293() { }
+    public void meth9294() { }
+    public void meth9295() { }
+    public void meth9296() { }
+    public void meth9297() { }
+    public void meth9298() { }
+    public void meth9299() { }
+    public void meth9300() { }
+    public void meth9301() { }
+    public void meth9302() { }
+    public void meth9303() { }
+    public void meth9304() { }
+    public void meth9305() { }
+    public void meth9306() { }
+    public void meth9307() { }
+    public void meth9308() { }
+    public void meth9309() { }
+    public void meth9310() { }
+    public void meth9311() { }
+    public void meth9312() { }
+    public void meth9313() { }
+    public void meth9314() { }
+    public void meth9315() { }
+    public void meth9316() { }
+    public void meth9317() { }
+    public void meth9318() { }
+    public void meth9319() { }
+    public void meth9320() { }
+    public void meth9321() { }
+    public void meth9322() { }
+    public void meth9323() { }
+    public void meth9324() { }
+    public void meth9325() { }
+    public void meth9326() { }
+    public void meth9327() { }
+    public void meth9328() { }
+    public void meth9329() { }
+    public void meth9330() { }
+    public void meth9331() { }
+    public void meth9332() { }
+    public void meth9333() { }
+    public void meth9334() { }
+    public void meth9335() { }
+    public void meth9336() { }
+    public void meth9337() { }
+    public void meth9338() { }
+    public void meth9339() { }
+    public void meth9340() { }
+    public void meth9341() { }
+    public void meth9342() { }
+    public void meth9343() { }
+    public void meth9344() { }
+    public void meth9345() { }
+    public void meth9346() { }
+    public void meth9347() { }
+    public void meth9348() { }
+    public void meth9349() { }
+    public void meth9350() { }
+    public void meth9351() { }
+    public void meth9352() { }
+    public void meth9353() { }
+    public void meth9354() { }
+    public void meth9355() { }
+    public void meth9356() { }
+    public void meth9357() { }
+    public void meth9358() { }
+    public void meth9359() { }
+    public void meth9360() { }
+    public void meth9361() { }
+    public void meth9362() { }
+    public void meth9363() { }
+    public void meth9364() { }
+    public void meth9365() { }
+    public void meth9366() { }
+    public void meth9367() { }
+    public void meth9368() { }
+    public void meth9369() { }
+    public void meth9370() { }
+    public void meth9371() { }
+    public void meth9372() { }
+    public void meth9373() { }
+    public void meth9374() { }
+    public void meth9375() { }
+    public void meth9376() { }
+    public void meth9377() { }
+    public void meth9378() { }
+    public void meth9379() { }
+    public void meth9380() { }
+    public void meth9381() { }
+    public void meth9382() { }
+    public void meth9383() { }
+    public void meth9384() { }
+    public void meth9385() { }
+    public void meth9386() { }
+    public void meth9387() { }
+    public void meth9388() { }
+    public void meth9389() { }
+    public void meth9390() { }
+    public void meth9391() { }
+    public void meth9392() { }
+    public void meth9393() { }
+    public void meth9394() { }
+    public void meth9395() { }
+    public void meth9396() { }
+    public void meth9397() { }
+    public void meth9398() { }
+    public void meth9399() { }
+    public void meth9400() { }
+    public void meth9401() { }
+    public void meth9402() { }
+    public void meth9403() { }
+    public void meth9404() { }
+    public void meth9405() { }
+    public void meth9406() { }
+    public void meth9407() { }
+    public void meth9408() { }
+    public void meth9409() { }
+    public void meth9410() { }
+    public void meth9411() { }
+    public void meth9412() { }
+    public void meth9413() { }
+    public void meth9414() { }
+    public void meth9415() { }
+    public void meth9416() { }
+    public void meth9417() { }
+    public void meth9418() { }
+    public void meth9419() { }
+    public void meth9420() { }
+    public void meth9421() { }
+    public void meth9422() { }
+    public void meth9423() { }
+    public void meth9424() { }
+    public void meth9425() { }
+    public void meth9426() { }
+    public void meth9427() { }
+    public void meth9428() { }
+    public void meth9429() { }
+    public void meth9430() { }
+    public void meth9431() { }
+    public void meth9432() { }
+    public void meth9433() { }
+    public void meth9434() { }
+    public void meth9435() { }
+    public void meth9436() { }
+    public void meth9437() { }
+    public void meth9438() { }
+    public void meth9439() { }
+    public void meth9440() { }
+    public void meth9441() { }
+    public void meth9442() { }
+    public void meth9443() { }
+    public void meth9444() { }
+    public void meth9445() { }
+    public void meth9446() { }
+    public void meth9447() { }
+    public void meth9448() { }
+    public void meth9449() { }
+    public void meth9450() { }
+    public void meth9451() { }
+    public void meth9452() { }
+    public void meth9453() { }
+    public void meth9454() { }
+    public void meth9455() { }
+    public void meth9456() { }
+    public void meth9457() { }
+    public void meth9458() { }
+    public void meth9459() { }
+    public void meth9460() { }
+    public void meth9461() { }
+    public void meth9462() { }
+    public void meth9463() { }
+    public void meth9464() { }
+    public void meth9465() { }
+    public void meth9466() { }
+    public void meth9467() { }
+    public void meth9468() { }
+    public void meth9469() { }
+    public void meth9470() { }
+    public void meth9471() { }
+    public void meth9472() { }
+    public void meth9473() { }
+    public void meth9474() { }
+    public void meth9475() { }
+    public void meth9476() { }
+    public void meth9477() { }
+    public void meth9478() { }
+    public void meth9479() { }
+    public void meth9480() { }
+    public void meth9481() { }
+    public void meth9482() { }
+    public void meth9483() { }
+    public void meth9484() { }
+    public void meth9485() { }
+    public void meth9486() { }
+    public void meth9487() { }
+    public void meth9488() { }
+    public void meth9489() { }
+    public void meth9490() { }
+    public void meth9491() { }
+    public void meth9492() { }
+    public void meth9493() { }
+    public void meth9494() { }
+    public void meth9495() { }
+    public void meth9496() { }
+    public void meth9497() { }
+    public void meth9498() { }
+    public void meth9499() { }
+    public void meth9500() { }
+    public void meth9501() { }
+    public void meth9502() { }
+    public void meth9503() { }
+    public void meth9504() { }
+    public void meth9505() { }
+    public void meth9506() { }
+    public void meth9507() { }
+    public void meth9508() { }
+    public void meth9509() { }
+    public void meth9510() { }
+    public void meth9511() { }
+    public void meth9512() { }
+    public void meth9513() { }
+    public void meth9514() { }
+    public void meth9515() { }
+    public void meth9516() { }
+    public void meth9517() { }
+    public void meth9518() { }
+    public void meth9519() { }
+    public void meth9520() { }
+    public void meth9521() { }
+    public void meth9522() { }
+    public void meth9523() { }
+    public void meth9524() { }
+    public void meth9525() { }
+    public void meth9526() { }
+    public void meth9527() { }
+    public void meth9528() { }
+    public void meth9529() { }
+    public void meth9530() { }
+    public void meth9531() { }
+    public void meth9532() { }
+    public void meth9533() { }
+    public void meth9534() { }
+    public void meth9535() { }
+    public void meth9536() { }
+    public void meth9537() { }
+    public void meth9538() { }
+    public void meth9539() { }
+    public void meth9540() { }
+    public void meth9541() { }
+    public void meth9542() { }
+    public void meth9543() { }
+    public void meth9544() { }
+    public void meth9545() { }
+    public void meth9546() { }
+    public void meth9547() { }
+    public void meth9548() { }
+    public void meth9549() { }
+    public void meth9550() { }
+    public void meth9551() { }
+    public void meth9552() { }
+    public void meth9553() { }
+    public void meth9554() { }
+    public void meth9555() { }
+    public void meth9556() { }
+    public void meth9557() { }
+    public void meth9558() { }
+    public void meth9559() { }
+    public void meth9560() { }
+    public void meth9561() { }
+    public void meth9562() { }
+    public void meth9563() { }
+    public void meth9564() { }
+    public void meth9565() { }
+    public void meth9566() { }
+    public void meth9567() { }
+    public void meth9568() { }
+    public void meth9569() { }
+    public void meth9570() { }
+    public void meth9571() { }
+    public void meth9572() { }
+    public void meth9573() { }
+    public void meth9574() { }
+    public void meth9575() { }
+    public void meth9576() { }
+    public void meth9577() { }
+    public void meth9578() { }
+    public void meth9579() { }
+    public void meth9580() { }
+    public void meth9581() { }
+    public void meth9582() { }
+    public void meth9583() { }
+    public void meth9584() { }
+    public void meth9585() { }
+    public void meth9586() { }
+    public void meth9587() { }
+    public void meth9588() { }
+    public void meth9589() { }
+    public void meth9590() { }
+    public void meth9591() { }
+    public void meth9592() { }
+    public void meth9593() { }
+    public void meth9594() { }
+    public void meth9595() { }
+    public void meth9596() { }
+    public void meth9597() { }
+    public void meth9598() { }
+    public void meth9599() { }
+    public void meth9600() { }
+    public void meth9601() { }
+    public void meth9602() { }
+    public void meth9603() { }
+    public void meth9604() { }
+    public void meth9605() { }
+    public void meth9606() { }
+    public void meth9607() { }
+    public void meth9608() { }
+    public void meth9609() { }
+    public void meth9610() { }
+    public void meth9611() { }
+    public void meth9612() { }
+    public void meth9613() { }
+    public void meth9614() { }
+    public void meth9615() { }
+    public void meth9616() { }
+    public void meth9617() { }
+    public void meth9618() { }
+    public void meth9619() { }
+    public void meth9620() { }
+    public void meth9621() { }
+    public void meth9622() { }
+    public void meth9623() { }
+    public void meth9624() { }
+    public void meth9625() { }
+    public void meth9626() { }
+    public void meth9627() { }
+    public void meth9628() { }
+    public void meth9629() { }
+    public void meth9630() { }
+    public void meth9631() { }
+    public void meth9632() { }
+    public void meth9633() { }
+    public void meth9634() { }
+    public void meth9635() { }
+    public void meth9636() { }
+    public void meth9637() { }
+    public void meth9638() { }
+    public void meth9639() { }
+    public void meth9640() { }
+    public void meth9641() { }
+    public void meth9642() { }
+    public void meth9643() { }
+    public void meth9644() { }
+    public void meth9645() { }
+    public void meth9646() { }
+    public void meth9647() { }
+    public void meth9648() { }
+    public void meth9649() { }
+    public void meth9650() { }
+    public void meth9651() { }
+    public void meth9652() { }
+    public void meth9653() { }
+    public void meth9654() { }
+    public void meth9655() { }
+    public void meth9656() { }
+    public void meth9657() { }
+    public void meth9658() { }
+    public void meth9659() { }
+    public void meth9660() { }
+    public void meth9661() { }
+    public void meth9662() { }
+    public void meth9663() { }
+    public void meth9664() { }
+    public void meth9665() { }
+    public void meth9666() { }
+    public void meth9667() { }
+    public void meth9668() { }
+    public void meth9669() { }
+    public void meth9670() { }
+    public void meth9671() { }
+    public void meth9672() { }
+    public void meth9673() { }
+    public void meth9674() { }
+    public void meth9675() { }
+    public void meth9676() { }
+    public void meth9677() { }
+    public void meth9678() { }
+    public void meth9679() { }
+    public void meth9680() { }
+    public void meth9681() { }
+    public void meth9682() { }
+    public void meth9683() { }
+    public void meth9684() { }
+    public void meth9685() { }
+    public void meth9686() { }
+    public void meth9687() { }
+    public void meth9688() { }
+    public void meth9689() { }
+    public void meth9690() { }
+    public void meth9691() { }
+    public void meth9692() { }
+    public void meth9693() { }
+    public void meth9694() { }
+    public void meth9695() { }
+    public void meth9696() { }
+    public void meth9697() { }
+    public void meth9698() { }
+    public void meth9699() { }
+    public void meth9700() { }
+    public void meth9701() { }
+    public void meth9702() { }
+    public void meth9703() { }
+    public void meth9704() { }
+    public void meth9705() { }
+    public void meth9706() { }
+    public void meth9707() { }
+    public void meth9708() { }
+    public void meth9709() { }
+    public void meth9710() { }
+    public void meth9711() { }
+    public void meth9712() { }
+    public void meth9713() { }
+    public void meth9714() { }
+    public void meth9715() { }
+    public void meth9716() { }
+    public void meth9717() { }
+    public void meth9718() { }
+    public void meth9719() { }
+    public void meth9720() { }
+    public void meth9721() { }
+    public void meth9722() { }
+    public void meth9723() { }
+    public void meth9724() { }
+    public void meth9725() { }
+    public void meth9726() { }
+    public void meth9727() { }
+    public void meth9728() { }
+    public void meth9729() { }
+    public void meth9730() { }
+    public void meth9731() { }
+    public void meth9732() { }
+    public void meth9733() { }
+    public void meth9734() { }
+    public void meth9735() { }
+    public void meth9736() { }
+    public void meth9737() { }
+    public void meth9738() { }
+    public void meth9739() { }
+    public void meth9740() { }
+    public void meth9741() { }
+    public void meth9742() { }
+    public void meth9743() { }
+    public void meth9744() { }
+    public void meth9745() { }
+    public void meth9746() { }
+    public void meth9747() { }
+    public void meth9748() { }
+    public void meth9749() { }
+    public void meth9750() { }
+    public void meth9751() { }
+    public void meth9752() { }
+    public void meth9753() { }
+    public void meth9754() { }
+    public void meth9755() { }
+    public void meth9756() { }
+    public void meth9757() { }
+    public void meth9758() { }
+    public void meth9759() { }
+    public void meth9760() { }
+    public void meth9761() { }
+    public void meth9762() { }
+    public void meth9763() { }
+    public void meth9764() { }
+    public void meth9765() { }
+    public void meth9766() { }
+    public void meth9767() { }
+    public void meth9768() { }
+    public void meth9769() { }
+    public void meth9770() { }
+    public void meth9771() { }
+    public void meth9772() { }
+    public void meth9773() { }
+    public void meth9774() { }
+    public void meth9775() { }
+    public void meth9776() { }
+    public void meth9777() { }
+    public void meth9778() { }
+    public void meth9779() { }
+    public void meth9780() { }
+    public void meth9781() { }
+    public void meth9782() { }
+    public void meth9783() { }
+    public void meth9784() { }
+    public void meth9785() { }
+    public void meth9786() { }
+    public void meth9787() { }
+    public void meth9788() { }
+    public void meth9789() { }
+    public void meth9790() { }
+    public void meth9791() { }
+    public void meth9792() { }
+    public void meth9793() { }
+    public void meth9794() { }
+    public void meth9795() { }
+    public void meth9796() { }
+    public void meth9797() { }
+    public void meth9798() { }
+    public void meth9799() { }
+    public void meth9800() { }
+    public void meth9801() { }
+    public void meth9802() { }
+    public void meth9803() { }
+    public void meth9804() { }
+    public void meth9805() { }
+    public void meth9806() { }
+    public void meth9807() { }
+    public void meth9808() { }
+    public void meth9809() { }
+    public void meth9810() { }
+    public void meth9811() { }
+    public void meth9812() { }
+    public void meth9813() { }
+    public void meth9814() { }
+    public void meth9815() { }
+    public void meth9816() { }
+    public void meth9817() { }
+    public void meth9818() { }
+    public void meth9819() { }
+    public void meth9820() { }
+    public void meth9821() { }
+    public void meth9822() { }
+    public void meth9823() { }
+    public void meth9824() { }
+    public void meth9825() { }
+    public void meth9826() { }
+    public void meth9827() { }
+    public void meth9828() { }
+    public void meth9829() { }
+    public void meth9830() { }
+    public void meth9831() { }
+    public void meth9832() { }
+    public void meth9833() { }
+    public void meth9834() { }
+    public void meth9835() { }
+    public void meth9836() { }
+    public void meth9837() { }
+    public void meth9838() { }
+    public void meth9839() { }
+    public void meth9840() { }
+    public void meth9841() { }
+    public void meth9842() { }
+    public void meth9843() { }
+    public void meth9844() { }
+    public void meth9845() { }
+    public void meth9846() { }
+    public void meth9847() { }
+    public void meth9848() { }
+    public void meth9849() { }
+    public void meth9850() { }
+    public void meth9851() { }
+    public void meth9852() { }
+    public void meth9853() { }
+    public void meth9854() { }
+    public void meth9855() { }
+    public void meth9856() { }
+    public void meth9857() { }
+    public void meth9858() { }
+    public void meth9859() { }
+    public void meth9860() { }
+    public void meth9861() { }
+    public void meth9862() { }
+    public void meth9863() { }
+    public void meth9864() { }
+    public void meth9865() { }
+    public void meth9866() { }
+    public void meth9867() { }
+    public void meth9868() { }
+    public void meth9869() { }
+    public void meth9870() { }
+    public void meth9871() { }
+    public void meth9872() { }
+    public void meth9873() { }
+    public void meth9874() { }
+    public void meth9875() { }
+    public void meth9876() { }
+    public void meth9877() { }
+    public void meth9878() { }
+    public void meth9879() { }
+    public void meth9880() { }
+    public void meth9881() { }
+    public void meth9882() { }
+    public void meth9883() { }
+    public void meth9884() { }
+    public void meth9885() { }
+    public void meth9886() { }
+    public void meth9887() { }
+    public void meth9888() { }
+    public void meth9889() { }
+    public void meth9890() { }
+    public void meth9891() { }
+    public void meth9892() { }
+    public void meth9893() { }
+    public void meth9894() { }
+    public void meth9895() { }
+    public void meth9896() { }
+    public void meth9897() { }
+    public void meth9898() { }
+    public void meth9899() { }
+    public void meth9900() { }
+    public void meth9901() { }
+    public void meth9902() { }
+    public void meth9903() { }
+    public void meth9904() { }
+    public void meth9905() { }
+    public void meth9906() { }
+    public void meth9907() { }
+    public void meth9908() { }
+    public void meth9909() { }
+    public void meth9910() { }
+    public void meth9911() { }
+    public void meth9912() { }
+    public void meth9913() { }
+    public void meth9914() { }
+    public void meth9915() { }
+    public void meth9916() { }
+    public void meth9917() { }
+    public void meth9918() { }
+    public void meth9919() { }
+    public void meth9920() { }
+    public void meth9921() { }
+    public void meth9922() { }
+    public void meth9923() { }
+    public void meth9924() { }
+    public void meth9925() { }
+    public void meth9926() { }
+    public void meth9927() { }
+    public void meth9928() { }
+    public void meth9929() { }
+    public void meth9930() { }
+    public void meth9931() { }
+    public void meth9932() { }
+    public void meth9933() { }
+    public void meth9934() { }
+    public void meth9935() { }
+    public void meth9936() { }
+    public void meth9937() { }
+    public void meth9938() { }
+    public void meth9939() { }
+    public void meth9940() { }
+    public void meth9941() { }
+    public void meth9942() { }
+    public void meth9943() { }
+    public void meth9944() { }
+    public void meth9945() { }
+    public void meth9946() { }
+    public void meth9947() { }
+    public void meth9948() { }
+    public void meth9949() { }
+    public void meth9950() { }
+    public void meth9951() { }
+    public void meth9952() { }
+    public void meth9953() { }
+    public void meth9954() { }
+    public void meth9955() { }
+    public void meth9956() { }
+    public void meth9957() { }
+    public void meth9958() { }
+    public void meth9959() { }
+    public void meth9960() { }
+    public void meth9961() { }
+    public void meth9962() { }
+    public void meth9963() { }
+    public void meth9964() { }
+    public void meth9965() { }
+    public void meth9966() { }
+    public void meth9967() { }
+    public void meth9968() { }
+    public void meth9969() { }
+    public void meth9970() { }
+    public void meth9971() { }
+    public void meth9972() { }
+    public void meth9973() { }
+    public void meth9974() { }
+    public void meth9975() { }
+    public void meth9976() { }
+    public void meth9977() { }
+    public void meth9978() { }
+    public void meth9979() { }
+    public void meth9980() { }
+    public void meth9981() { }
+    public void meth9982() { }
+    public void meth9983() { }
+    public void meth9984() { }
+    public void meth9985() { }
+    public void meth9986() { }
+    public void meth9987() { }
+    public void meth9988() { }
+    public void meth9989() { }
+    public void meth9990() { }
+    public void meth9991() { }
+    public void meth9992() { }
+    public void meth9993() { }
+    public void meth9994() { }
+    public void meth9995() { }
+    public void meth9996() { }
+    public void meth9997() { }
+    public void meth9998() { }
+    public void meth9999() { }
+    public void meth10000() { }
+    public void meth10001() { }
+    public void meth10002() { }
+    public void meth10003() { }
+    public void meth10004() { }
+    public void meth10005() { }
+    public void meth10006() { }
+    public void meth10007() { }
+    public void meth10008() { }
+    public void meth10009() { }
+    public void meth10010() { }
+    public void meth10011() { }
+    public void meth10012() { }
+    public void meth10013() { }
+    public void meth10014() { }
+    public void meth10015() { }
+    public void meth10016() { }
+    public void meth10017() { }
+    public void meth10018() { }
+    public void meth10019() { }
+    public void meth10020() { }
+    public void meth10021() { }
+    public void meth10022() { }
+    public void meth10023() { }
+    public void meth10024() { }
+    public void meth10025() { }
+    public void meth10026() { }
+    public void meth10027() { }
+    public void meth10028() { }
+    public void meth10029() { }
+    public void meth10030() { }
+    public void meth10031() { }
+    public void meth10032() { }
+    public void meth10033() { }
+    public void meth10034() { }
+    public void meth10035() { }
+    public void meth10036() { }
+    public void meth10037() { }
+    public void meth10038() { }
+    public void meth10039() { }
+    public void meth10040() { }
+    public void meth10041() { }
+    public void meth10042() { }
+    public void meth10043() { }
+    public void meth10044() { }
+    public void meth10045() { }
+    public void meth10046() { }
+    public void meth10047() { }
+    public void meth10048() { }
+    public void meth10049() { }
+    public void meth10050() { }
+    public void meth10051() { }
+    public void meth10052() { }
+    public void meth10053() { }
+    public void meth10054() { }
+    public void meth10055() { }
+    public void meth10056() { }
+    public void meth10057() { }
+    public void meth10058() { }
+    public void meth10059() { }
+    public void meth10060() { }
+    public void meth10061() { }
+    public void meth10062() { }
+    public void meth10063() { }
+    public void meth10064() { }
+    public void meth10065() { }
+    public void meth10066() { }
+    public void meth10067() { }
+    public void meth10068() { }
+    public void meth10069() { }
+    public void meth10070() { }
+    public void meth10071() { }
+    public void meth10072() { }
+    public void meth10073() { }
+    public void meth10074() { }
+    public void meth10075() { }
+    public void meth10076() { }
+    public void meth10077() { }
+    public void meth10078() { }
+    public void meth10079() { }
+    public void meth10080() { }
+    public void meth10081() { }
+    public void meth10082() { }
+    public void meth10083() { }
+    public void meth10084() { }
+    public void meth10085() { }
+    public void meth10086() { }
+    public void meth10087() { }
+    public void meth10088() { }
+    public void meth10089() { }
+    public void meth10090() { }
+    public void meth10091() { }
+    public void meth10092() { }
+    public void meth10093() { }
+    public void meth10094() { }
+    public void meth10095() { }
+    public void meth10096() { }
+    public void meth10097() { }
+    public void meth10098() { }
+    public void meth10099() { }
+    public void meth10100() { }
+    public void meth10101() { }
+    public void meth10102() { }
+    public void meth10103() { }
+    public void meth10104() { }
+    public void meth10105() { }
+    public void meth10106() { }
+    public void meth10107() { }
+    public void meth10108() { }
+    public void meth10109() { }
+    public void meth10110() { }
+    public void meth10111() { }
+    public void meth10112() { }
+    public void meth10113() { }
+    public void meth10114() { }
+    public void meth10115() { }
+    public void meth10116() { }
+    public void meth10117() { }
+    public void meth10118() { }
+    public void meth10119() { }
+    public void meth10120() { }
+    public void meth10121() { }
+    public void meth10122() { }
+    public void meth10123() { }
+    public void meth10124() { }
+    public void meth10125() { }
+    public void meth10126() { }
+    public void meth10127() { }
+    public void meth10128() { }
+    public void meth10129() { }
+    public void meth10130() { }
+    public void meth10131() { }
+    public void meth10132() { }
+    public void meth10133() { }
+    public void meth10134() { }
+    public void meth10135() { }
+    public void meth10136() { }
+    public void meth10137() { }
+    public void meth10138() { }
+    public void meth10139() { }
+    public void meth10140() { }
+    public void meth10141() { }
+    public void meth10142() { }
+    public void meth10143() { }
+    public void meth10144() { }
+    public void meth10145() { }
+    public void meth10146() { }
+    public void meth10147() { }
+    public void meth10148() { }
+    public void meth10149() { }
+    public void meth10150() { }
+    public void meth10151() { }
+    public void meth10152() { }
+    public void meth10153() { }
+    public void meth10154() { }
+    public void meth10155() { }
+    public void meth10156() { }
+    public void meth10157() { }
+    public void meth10158() { }
+    public void meth10159() { }
+    public void meth10160() { }
+    public void meth10161() { }
+    public void meth10162() { }
+    public void meth10163() { }
+    public void meth10164() { }
+    public void meth10165() { }
+    public void meth10166() { }
+    public void meth10167() { }
+    public void meth10168() { }
+    public void meth10169() { }
+    public void meth10170() { }
+    public void meth10171() { }
+    public void meth10172() { }
+    public void meth10173() { }
+    public void meth10174() { }
+    public void meth10175() { }
+    public void meth10176() { }
+    public void meth10177() { }
+    public void meth10178() { }
+    public void meth10179() { }
+    public void meth10180() { }
+    public void meth10181() { }
+    public void meth10182() { }
+    public void meth10183() { }
+    public void meth10184() { }
+    public void meth10185() { }
+    public void meth10186() { }
+    public void meth10187() { }
+    public void meth10188() { }
+    public void meth10189() { }
+    public void meth10190() { }
+    public void meth10191() { }
+    public void meth10192() { }
+    public void meth10193() { }
+    public void meth10194() { }
+    public void meth10195() { }
+    public void meth10196() { }
+    public void meth10197() { }
+    public void meth10198() { }
+    public void meth10199() { }
+    public void meth10200() { }
+    public void meth10201() { }
+    public void meth10202() { }
+    public void meth10203() { }
+    public void meth10204() { }
+    public void meth10205() { }
+    public void meth10206() { }
+    public void meth10207() { }
+    public void meth10208() { }
+    public void meth10209() { }
+    public void meth10210() { }
+    public void meth10211() { }
+    public void meth10212() { }
+    public void meth10213() { }
+    public void meth10214() { }
+    public void meth10215() { }
+    public void meth10216() { }
+    public void meth10217() { }
+    public void meth10218() { }
+    public void meth10219() { }
+    public void meth10220() { }
+    public void meth10221() { }
+    public void meth10222() { }
+    public void meth10223() { }
+    public void meth10224() { }
+    public void meth10225() { }
+    public void meth10226() { }
+    public void meth10227() { }
+    public void meth10228() { }
+    public void meth10229() { }
+    public void meth10230() { }
+    public void meth10231() { }
+    public void meth10232() { }
+    public void meth10233() { }
+    public void meth10234() { }
+    public void meth10235() { }
+    public void meth10236() { }
+    public void meth10237() { }
+    public void meth10238() { }
+    public void meth10239() { }
+    public void meth10240() { }
+    public void meth10241() { }
+    public void meth10242() { }
+    public void meth10243() { }
+    public void meth10244() { }
+    public void meth10245() { }
+    public void meth10246() { }
+    public void meth10247() { }
+    public void meth10248() { }
+    public void meth10249() { }
+    public void meth10250() { }
+    public void meth10251() { }
+    public void meth10252() { }
+    public void meth10253() { }
+    public void meth10254() { }
+    public void meth10255() { }
+    public void meth10256() { }
+    public void meth10257() { }
+    public void meth10258() { }
+    public void meth10259() { }
+    public void meth10260() { }
+    public void meth10261() { }
+    public void meth10262() { }
+    public void meth10263() { }
+    public void meth10264() { }
+    public void meth10265() { }
+    public void meth10266() { }
+    public void meth10267() { }
+    public void meth10268() { }
+    public void meth10269() { }
+    public void meth10270() { }
+    public void meth10271() { }
+    public void meth10272() { }
+    public void meth10273() { }
+    public void meth10274() { }
+    public void meth10275() { }
+    public void meth10276() { }
+    public void meth10277() { }
+    public void meth10278() { }
+    public void meth10279() { }
+    public void meth10280() { }
+    public void meth10281() { }
+    public void meth10282() { }
+    public void meth10283() { }
+    public void meth10284() { }
+    public void meth10285() { }
+    public void meth10286() { }
+    public void meth10287() { }
+    public void meth10288() { }
+    public void meth10289() { }
+    public void meth10290() { }
+    public void meth10291() { }
+    public void meth10292() { }
+    public void meth10293() { }
+    public void meth10294() { }
+    public void meth10295() { }
+    public void meth10296() { }
+    public void meth10297() { }
+    public void meth10298() { }
+    public void meth10299() { }
+    public void meth10300() { }
+    public void meth10301() { }
+    public void meth10302() { }
+    public void meth10303() { }
+    public void meth10304() { }
+    public void meth10305() { }
+    public void meth10306() { }
+    public void meth10307() { }
+    public void meth10308() { }
+    public void meth10309() { }
+    public void meth10310() { }
+    public void meth10311() { }
+    public void meth10312() { }
+    public void meth10313() { }
+    public void meth10314() { }
+    public void meth10315() { }
+    public void meth10316() { }
+    public void meth10317() { }
+    public void meth10318() { }
+    public void meth10319() { }
+    public void meth10320() { }
+    public void meth10321() { }
+    public void meth10322() { }
+    public void meth10323() { }
+    public void meth10324() { }
+    public void meth10325() { }
+    public void meth10326() { }
+    public void meth10327() { }
+    public void meth10328() { }
+    public void meth10329() { }
+    public void meth10330() { }
+    public void meth10331() { }
+    public void meth10332() { }
+    public void meth10333() { }
+    public void meth10334() { }
+    public void meth10335() { }
+    public void meth10336() { }
+    public void meth10337() { }
+    public void meth10338() { }
+    public void meth10339() { }
+    public void meth10340() { }
+    public void meth10341() { }
+    public void meth10342() { }
+    public void meth10343() { }
+    public void meth10344() { }
+    public void meth10345() { }
+    public void meth10346() { }
+    public void meth10347() { }
+    public void meth10348() { }
+    public void meth10349() { }
+    public void meth10350() { }
+    public void meth10351() { }
+    public void meth10352() { }
+    public void meth10353() { }
+    public void meth10354() { }
+    public void meth10355() { }
+    public void meth10356() { }
+    public void meth10357() { }
+    public void meth10358() { }
+    public void meth10359() { }
+    public void meth10360() { }
+    public void meth10361() { }
+    public void meth10362() { }
+    public void meth10363() { }
+    public void meth10364() { }
+    public void meth10365() { }
+    public void meth10366() { }
+    public void meth10367() { }
+    public void meth10368() { }
+    public void meth10369() { }
+    public void meth10370() { }
+    public void meth10371() { }
+    public void meth10372() { }
+    public void meth10373() { }
+    public void meth10374() { }
+    public void meth10375() { }
+    public void meth10376() { }
+    public void meth10377() { }
+    public void meth10378() { }
+    public void meth10379() { }
+    public void meth10380() { }
+    public void meth10381() { }
+    public void meth10382() { }
+    public void meth10383() { }
+    public void meth10384() { }
+    public void meth10385() { }
+    public void meth10386() { }
+    public void meth10387() { }
+    public void meth10388() { }
+    public void meth10389() { }
+    public void meth10390() { }
+    public void meth10391() { }
+    public void meth10392() { }
+    public void meth10393() { }
+    public void meth10394() { }
+    public void meth10395() { }
+    public void meth10396() { }
+    public void meth10397() { }
+    public void meth10398() { }
+    public void meth10399() { }
+    public void meth10400() { }
+    public void meth10401() { }
+    public void meth10402() { }
+    public void meth10403() { }
+    public void meth10404() { }
+    public void meth10405() { }
+    public void meth10406() { }
+    public void meth10407() { }
+    public void meth10408() { }
+    public void meth10409() { }
+    public void meth10410() { }
+    public void meth10411() { }
+    public void meth10412() { }
+    public void meth10413() { }
+    public void meth10414() { }
+    public void meth10415() { }
+    public void meth10416() { }
+    public void meth10417() { }
+    public void meth10418() { }
+    public void meth10419() { }
+    public void meth10420() { }
+    public void meth10421() { }
+    public void meth10422() { }
+    public void meth10423() { }
+    public void meth10424() { }
+    public void meth10425() { }
+    public void meth10426() { }
+    public void meth10427() { }
+    public void meth10428() { }
+    public void meth10429() { }
+    public void meth10430() { }
+    public void meth10431() { }
+    public void meth10432() { }
+    public void meth10433() { }
+    public void meth10434() { }
+    public void meth10435() { }
+    public void meth10436() { }
+    public void meth10437() { }
+    public void meth10438() { }
+    public void meth10439() { }
+    public void meth10440() { }
+    public void meth10441() { }
+    public void meth10442() { }
+    public void meth10443() { }
+    public void meth10444() { }
+    public void meth10445() { }
+    public void meth10446() { }
+    public void meth10447() { }
+    public void meth10448() { }
+    public void meth10449() { }
+    public void meth10450() { }
+    public void meth10451() { }
+    public void meth10452() { }
+    public void meth10453() { }
+    public void meth10454() { }
+    public void meth10455() { }
+    public void meth10456() { }
+    public void meth10457() { }
+    public void meth10458() { }
+    public void meth10459() { }
+    public void meth10460() { }
+    public void meth10461() { }
+    public void meth10462() { }
+    public void meth10463() { }
+    public void meth10464() { }
+    public void meth10465() { }
+    public void meth10466() { }
+    public void meth10467() { }
+    public void meth10468() { }
+    public void meth10469() { }
+    public void meth10470() { }
+    public void meth10471() { }
+    public void meth10472() { }
+    public void meth10473() { }
+    public void meth10474() { }
+    public void meth10475() { }
+    public void meth10476() { }
+    public void meth10477() { }
+    public void meth10478() { }
+    public void meth10479() { }
+    public void meth10480() { }
+    public void meth10481() { }
+    public void meth10482() { }
+    public void meth10483() { }
+    public void meth10484() { }
+    public void meth10485() { }
+    public void meth10486() { }
+    public void meth10487() { }
+    public void meth10488() { }
+    public void meth10489() { }
+    public void meth10490() { }
+    public void meth10491() { }
+    public void meth10492() { }
+    public void meth10493() { }
+    public void meth10494() { }
+    public void meth10495() { }
+    public void meth10496() { }
+    public void meth10497() { }
+    public void meth10498() { }
+    public void meth10499() { }
+    public void meth10500() { }
+    public void meth10501() { }
+    public void meth10502() { }
+    public void meth10503() { }
+    public void meth10504() { }
+    public void meth10505() { }
+    public void meth10506() { }
+    public void meth10507() { }
+    public void meth10508() { }
+    public void meth10509() { }
+    public void meth10510() { }
+    public void meth10511() { }
+    public void meth10512() { }
+    public void meth10513() { }
+    public void meth10514() { }
+    public void meth10515() { }
+    public void meth10516() { }
+    public void meth10517() { }
+    public void meth10518() { }
+    public void meth10519() { }
+    public void meth10520() { }
+    public void meth10521() { }
+    public void meth10522() { }
+    public void meth10523() { }
+    public void meth10524() { }
+    public void meth10525() { }
+    public void meth10526() { }
+    public void meth10527() { }
+    public void meth10528() { }
+    public void meth10529() { }
+    public void meth10530() { }
+    public void meth10531() { }
+    public void meth10532() { }
+    public void meth10533() { }
+    public void meth10534() { }
+    public void meth10535() { }
+    public void meth10536() { }
+    public void meth10537() { }
+    public void meth10538() { }
+    public void meth10539() { }
+    public void meth10540() { }
+    public void meth10541() { }
+    public void meth10542() { }
+    public void meth10543() { }
+    public void meth10544() { }
+    public void meth10545() { }
+    public void meth10546() { }
+    public void meth10547() { }
+    public void meth10548() { }
+    public void meth10549() { }
+    public void meth10550() { }
+    public void meth10551() { }
+    public void meth10552() { }
+    public void meth10553() { }
+    public void meth10554() { }
+    public void meth10555() { }
+    public void meth10556() { }
+    public void meth10557() { }
+    public void meth10558() { }
+    public void meth10559() { }
+    public void meth10560() { }
+    public void meth10561() { }
+    public void meth10562() { }
+    public void meth10563() { }
+    public void meth10564() { }
+    public void meth10565() { }
+    public void meth10566() { }
+    public void meth10567() { }
+    public void meth10568() { }
+    public void meth10569() { }
+    public void meth10570() { }
+    public void meth10571() { }
+    public void meth10572() { }
+    public void meth10573() { }
+    public void meth10574() { }
+    public void meth10575() { }
+    public void meth10576() { }
+    public void meth10577() { }
+    public void meth10578() { }
+    public void meth10579() { }
+    public void meth10580() { }
+    public void meth10581() { }
+    public void meth10582() { }
+    public void meth10583() { }
+    public void meth10584() { }
+    public void meth10585() { }
+    public void meth10586() { }
+    public void meth10587() { }
+    public void meth10588() { }
+    public void meth10589() { }
+    public void meth10590() { }
+    public void meth10591() { }
+    public void meth10592() { }
+    public void meth10593() { }
+    public void meth10594() { }
+    public void meth10595() { }
+    public void meth10596() { }
+    public void meth10597() { }
+    public void meth10598() { }
+    public void meth10599() { }
+    public void meth10600() { }
+    public void meth10601() { }
+    public void meth10602() { }
+    public void meth10603() { }
+    public void meth10604() { }
+    public void meth10605() { }
+    public void meth10606() { }
+    public void meth10607() { }
+    public void meth10608() { }
+    public void meth10609() { }
+    public void meth10610() { }
+    public void meth10611() { }
+    public void meth10612() { }
+    public void meth10613() { }
+    public void meth10614() { }
+    public void meth10615() { }
+    public void meth10616() { }
+    public void meth10617() { }
+    public void meth10618() { }
+    public void meth10619() { }
+    public void meth10620() { }
+    public void meth10621() { }
+    public void meth10622() { }
+    public void meth10623() { }
+    public void meth10624() { }
+    public void meth10625() { }
+    public void meth10626() { }
+    public void meth10627() { }
+    public void meth10628() { }
+    public void meth10629() { }
+    public void meth10630() { }
+    public void meth10631() { }
+    public void meth10632() { }
+    public void meth10633() { }
+    public void meth10634() { }
+    public void meth10635() { }
+    public void meth10636() { }
+    public void meth10637() { }
+    public void meth10638() { }
+    public void meth10639() { }
+    public void meth10640() { }
+    public void meth10641() { }
+    public void meth10642() { }
+    public void meth10643() { }
+    public void meth10644() { }
+    public void meth10645() { }
+    public void meth10646() { }
+    public void meth10647() { }
+    public void meth10648() { }
+    public void meth10649() { }
+    public void meth10650() { }
+    public void meth10651() { }
+    public void meth10652() { }
+    public void meth10653() { }
+    public void meth10654() { }
+    public void meth10655() { }
+    public void meth10656() { }
+    public void meth10657() { }
+    public void meth10658() { }
+    public void meth10659() { }
+    public void meth10660() { }
+    public void meth10661() { }
+    public void meth10662() { }
+    public void meth10663() { }
+    public void meth10664() { }
+    public void meth10665() { }
+    public void meth10666() { }
+    public void meth10667() { }
+    public void meth10668() { }
+    public void meth10669() { }
+    public void meth10670() { }
+    public void meth10671() { }
+    public void meth10672() { }
+    public void meth10673() { }
+    public void meth10674() { }
+    public void meth10675() { }
+    public void meth10676() { }
+    public void meth10677() { }
+    public void meth10678() { }
+    public void meth10679() { }
+    public void meth10680() { }
+    public void meth10681() { }
+    public void meth10682() { }
+    public void meth10683() { }
+    public void meth10684() { }
+    public void meth10685() { }
+    public void meth10686() { }
+    public void meth10687() { }
+    public void meth10688() { }
+    public void meth10689() { }
+    public void meth10690() { }
+    public void meth10691() { }
+    public void meth10692() { }
+    public void meth10693() { }
+    public void meth10694() { }
+    public void meth10695() { }
+    public void meth10696() { }
+    public void meth10697() { }
+    public void meth10698() { }
+    public void meth10699() { }
+    public void meth10700() { }
+    public void meth10701() { }
+    public void meth10702() { }
+    public void meth10703() { }
+    public void meth10704() { }
+    public void meth10705() { }
+    public void meth10706() { }
+    public void meth10707() { }
+    public void meth10708() { }
+    public void meth10709() { }
+    public void meth10710() { }
+    public void meth10711() { }
+    public void meth10712() { }
+    public void meth10713() { }
+    public void meth10714() { }
+    public void meth10715() { }
+    public void meth10716() { }
+    public void meth10717() { }
+    public void meth10718() { }
+    public void meth10719() { }
+    public void meth10720() { }
+    public void meth10721() { }
+    public void meth10722() { }
+    public void meth10723() { }
+    public void meth10724() { }
+    public void meth10725() { }
+    public void meth10726() { }
+    public void meth10727() { }
+    public void meth10728() { }
+    public void meth10729() { }
+    public void meth10730() { }
+    public void meth10731() { }
+    public void meth10732() { }
+    public void meth10733() { }
+    public void meth10734() { }
+    public void meth10735() { }
+    public void meth10736() { }
+    public void meth10737() { }
+    public void meth10738() { }
+    public void meth10739() { }
+    public void meth10740() { }
+    public void meth10741() { }
+    public void meth10742() { }
+    public void meth10743() { }
+    public void meth10744() { }
+    public void meth10745() { }
+    public void meth10746() { }
+    public void meth10747() { }
+    public void meth10748() { }
+    public void meth10749() { }
+    public void meth10750() { }
+    public void meth10751() { }
+    public void meth10752() { }
+    public void meth10753() { }
+    public void meth10754() { }
+    public void meth10755() { }
+    public void meth10756() { }
+    public void meth10757() { }
+    public void meth10758() { }
+    public void meth10759() { }
+    public void meth10760() { }
+    public void meth10761() { }
+    public void meth10762() { }
+    public void meth10763() { }
+    public void meth10764() { }
+    public void meth10765() { }
+    public void meth10766() { }
+    public void meth10767() { }
+    public void meth10768() { }
+    public void meth10769() { }
+    public void meth10770() { }
+    public void meth10771() { }
+    public void meth10772() { }
+    public void meth10773() { }
+    public void meth10774() { }
+    public void meth10775() { }
+    public void meth10776() { }
+    public void meth10777() { }
+    public void meth10778() { }
+    public void meth10779() { }
+    public void meth10780() { }
+    public void meth10781() { }
+    public void meth10782() { }
+    public void meth10783() { }
+    public void meth10784() { }
+    public void meth10785() { }
+    public void meth10786() { }
+    public void meth10787() { }
+    public void meth10788() { }
+    public void meth10789() { }
+    public void meth10790() { }
+    public void meth10791() { }
+    public void meth10792() { }
+    public void meth10793() { }
+    public void meth10794() { }
+    public void meth10795() { }
+    public void meth10796() { }
+    public void meth10797() { }
+    public void meth10798() { }
+    public void meth10799() { }
+    public void meth10800() { }
+    public void meth10801() { }
+    public void meth10802() { }
+    public void meth10803() { }
+    public void meth10804() { }
+    public void meth10805() { }
+    public void meth10806() { }
+    public void meth10807() { }
+    public void meth10808() { }
+    public void meth10809() { }
+    public void meth10810() { }
+    public void meth10811() { }
+    public void meth10812() { }
+    public void meth10813() { }
+    public void meth10814() { }
+    public void meth10815() { }
+    public void meth10816() { }
+    public void meth10817() { }
+    public void meth10818() { }
+    public void meth10819() { }
+    public void meth10820() { }
+    public void meth10821() { }
+    public void meth10822() { }
+    public void meth10823() { }
+    public void meth10824() { }
+    public void meth10825() { }
+    public void meth10826() { }
+    public void meth10827() { }
+    public void meth10828() { }
+    public void meth10829() { }
+    public void meth10830() { }
+    public void meth10831() { }
+    public void meth10832() { }
+    public void meth10833() { }
+    public void meth10834() { }
+    public void meth10835() { }
+    public void meth10836() { }
+    public void meth10837() { }
+    public void meth10838() { }
+    public void meth10839() { }
+    public void meth10840() { }
+    public void meth10841() { }
+    public void meth10842() { }
+    public void meth10843() { }
+    public void meth10844() { }
+    public void meth10845() { }
+    public void meth10846() { }
+    public void meth10847() { }
+    public void meth10848() { }
+    public void meth10849() { }
+    public void meth10850() { }
+    public void meth10851() { }
+    public void meth10852() { }
+    public void meth10853() { }
+    public void meth10854() { }
+    public void meth10855() { }
+    public void meth10856() { }
+    public void meth10857() { }
+    public void meth10858() { }
+    public void meth10859() { }
+    public void meth10860() { }
+    public void meth10861() { }
+    public void meth10862() { }
+    public void meth10863() { }
+    public void meth10864() { }
+    public void meth10865() { }
+    public void meth10866() { }
+    public void meth10867() { }
+    public void meth10868() { }
+    public void meth10869() { }
+    public void meth10870() { }
+    public void meth10871() { }
+    public void meth10872() { }
+    public void meth10873() { }
+    public void meth10874() { }
+    public void meth10875() { }
+    public void meth10876() { }
+    public void meth10877() { }
+    public void meth10878() { }
+    public void meth10879() { }
+    public void meth10880() { }
+    public void meth10881() { }
+    public void meth10882() { }
+    public void meth10883() { }
+    public void meth10884() { }
+    public void meth10885() { }
+    public void meth10886() { }
+    public void meth10887() { }
+    public void meth10888() { }
+    public void meth10889() { }
+    public void meth10890() { }
+    public void meth10891() { }
+    public void meth10892() { }
+    public void meth10893() { }
+    public void meth10894() { }
+    public void meth10895() { }
+    public void meth10896() { }
+    public void meth10897() { }
+    public void meth10898() { }
+    public void meth10899() { }
+    public void meth10900() { }
+    public void meth10901() { }
+    public void meth10902() { }
+    public void meth10903() { }
+    public void meth10904() { }
+    public void meth10905() { }
+    public void meth10906() { }
+    public void meth10907() { }
+    public void meth10908() { }
+    public void meth10909() { }
+    public void meth10910() { }
+    public void meth10911() { }
+    public void meth10912() { }
+    public void meth10913() { }
+    public void meth10914() { }
+    public void meth10915() { }
+    public void meth10916() { }
+    public void meth10917() { }
+    public void meth10918() { }
+    public void meth10919() { }
+    public void meth10920() { }
+    public void meth10921() { }
+    public void meth10922() { }
+    public void meth10923() { }
+    public void meth10924() { }
+    public void meth10925() { }
+    public void meth10926() { }
+    public void meth10927() { }
+    public void meth10928() { }
+    public void meth10929() { }
+    public void meth10930() { }
+    public void meth10931() { }
+    public void meth10932() { }
+    public void meth10933() { }
+    public void meth10934() { }
+    public void meth10935() { }
+    public void meth10936() { }
+    public void meth10937() { }
+    public void meth10938() { }
+    public void meth10939() { }
+    public void meth10940() { }
+    public void meth10941() { }
+    public void meth10942() { }
+    public void meth10943() { }
+    public void meth10944() { }
+    public void meth10945() { }
+    public void meth10946() { }
+    public void meth10947() { }
+    public void meth10948() { }
+    public void meth10949() { }
+    public void meth10950() { }
+    public void meth10951() { }
+    public void meth10952() { }
+    public void meth10953() { }
+    public void meth10954() { }
+    public void meth10955() { }
+    public void meth10956() { }
+    public void meth10957() { }
+    public void meth10958() { }
+    public void meth10959() { }
+    public void meth10960() { }
+    public void meth10961() { }
+    public void meth10962() { }
+    public void meth10963() { }
+    public void meth10964() { }
+    public void meth10965() { }
+    public void meth10966() { }
+    public void meth10967() { }
+    public void meth10968() { }
+    public void meth10969() { }
+    public void meth10970() { }
+    public void meth10971() { }
+    public void meth10972() { }
+    public void meth10973() { }
+    public void meth10974() { }
+    public void meth10975() { }
+    public void meth10976() { }
+    public void meth10977() { }
+    public void meth10978() { }
+    public void meth10979() { }
+    public void meth10980() { }
+    public void meth10981() { }
+    public void meth10982() { }
+    public void meth10983() { }
+    public void meth10984() { }
+    public void meth10985() { }
+    public void meth10986() { }
+    public void meth10987() { }
+    public void meth10988() { }
+    public void meth10989() { }
+    public void meth10990() { }
+    public void meth10991() { }
+    public void meth10992() { }
+    public void meth10993() { }
+    public void meth10994() { }
+    public void meth10995() { }
+    public void meth10996() { }
+    public void meth10997() { }
+    public void meth10998() { }
+    public void meth10999() { }
+    public void meth11000() { }
+    public void meth11001() { }
+    public void meth11002() { }
+    public void meth11003() { }
+    public void meth11004() { }
+    public void meth11005() { }
+    public void meth11006() { }
+    public void meth11007() { }
+    public void meth11008() { }
+    public void meth11009() { }
+    public void meth11010() { }
+    public void meth11011() { }
+    public void meth11012() { }
+    public void meth11013() { }
+    public void meth11014() { }
+    public void meth11015() { }
+    public void meth11016() { }
+    public void meth11017() { }
+    public void meth11018() { }
+    public void meth11019() { }
+    public void meth11020() { }
+    public void meth11021() { }
+    public void meth11022() { }
+    public void meth11023() { }
+    public void meth11024() { }
+    public void meth11025() { }
+    public void meth11026() { }
+    public void meth11027() { }
+    public void meth11028() { }
+    public void meth11029() { }
+    public void meth11030() { }
+    public void meth11031() { }
+    public void meth11032() { }
+    public void meth11033() { }
+    public void meth11034() { }
+    public void meth11035() { }
+    public void meth11036() { }
+    public void meth11037() { }
+    public void meth11038() { }
+    public void meth11039() { }
+    public void meth11040() { }
+    public void meth11041() { }
+    public void meth11042() { }
+    public void meth11043() { }
+    public void meth11044() { }
+    public void meth11045() { }
+    public void meth11046() { }
+    public void meth11047() { }
+    public void meth11048() { }
+    public void meth11049() { }
+    public void meth11050() { }
+    public void meth11051() { }
+    public void meth11052() { }
+    public void meth11053() { }
+    public void meth11054() { }
+    public void meth11055() { }
+    public void meth11056() { }
+    public void meth11057() { }
+    public void meth11058() { }
+    public void meth11059() { }
+    public void meth11060() { }
+    public void meth11061() { }
+    public void meth11062() { }
+    public void meth11063() { }
+    public void meth11064() { }
+    public void meth11065() { }
+    public void meth11066() { }
+    public void meth11067() { }
+    public void meth11068() { }
+    public void meth11069() { }
+    public void meth11070() { }
+    public void meth11071() { }
+    public void meth11072() { }
+    public void meth11073() { }
+    public void meth11074() { }
+    public void meth11075() { }
+    public void meth11076() { }
+    public void meth11077() { }
+    public void meth11078() { }
+    public void meth11079() { }
+    public void meth11080() { }
+    public void meth11081() { }
+    public void meth11082() { }
+    public void meth11083() { }
+    public void meth11084() { }
+    public void meth11085() { }
+    public void meth11086() { }
+    public void meth11087() { }
+    public void meth11088() { }
+    public void meth11089() { }
+    public void meth11090() { }
+    public void meth11091() { }
+    public void meth11092() { }
+    public void meth11093() { }
+    public void meth11094() { }
+    public void meth11095() { }
+    public void meth11096() { }
+    public void meth11097() { }
+    public void meth11098() { }
+    public void meth11099() { }
+    public void meth11100() { }
+    public void meth11101() { }
+    public void meth11102() { }
+    public void meth11103() { }
+    public void meth11104() { }
+    public void meth11105() { }
+    public void meth11106() { }
+    public void meth11107() { }
+    public void meth11108() { }
+    public void meth11109() { }
+    public void meth11110() { }
+    public void meth11111() { }
+    public void meth11112() { }
+    public void meth11113() { }
+    public void meth11114() { }
+    public void meth11115() { }
+    public void meth11116() { }
+    public void meth11117() { }
+    public void meth11118() { }
+    public void meth11119() { }
+    public void meth11120() { }
+    public void meth11121() { }
+    public void meth11122() { }
+    public void meth11123() { }
+    public void meth11124() { }
+    public void meth11125() { }
+    public void meth11126() { }
+    public void meth11127() { }
+    public void meth11128() { }
+    public void meth11129() { }
+    public void meth11130() { }
+    public void meth11131() { }
+    public void meth11132() { }
+    public void meth11133() { }
+    public void meth11134() { }
+    public void meth11135() { }
+    public void meth11136() { }
+    public void meth11137() { }
+    public void meth11138() { }
+    public void meth11139() { }
+    public void meth11140() { }
+    public void meth11141() { }
+    public void meth11142() { }
+    public void meth11143() { }
+    public void meth11144() { }
+    public void meth11145() { }
+    public void meth11146() { }
+    public void meth11147() { }
+    public void meth11148() { }
+    public void meth11149() { }
+    public void meth11150() { }
+    public void meth11151() { }
+    public void meth11152() { }
+    public void meth11153() { }
+    public void meth11154() { }
+    public void meth11155() { }
+    public void meth11156() { }
+    public void meth11157() { }
+    public void meth11158() { }
+    public void meth11159() { }
+    public void meth11160() { }
+    public void meth11161() { }
+    public void meth11162() { }
+    public void meth11163() { }
+    public void meth11164() { }
+    public void meth11165() { }
+    public void meth11166() { }
+    public void meth11167() { }
+    public void meth11168() { }
+    public void meth11169() { }
+    public void meth11170() { }
+    public void meth11171() { }
+    public void meth11172() { }
+    public void meth11173() { }
+    public void meth11174() { }
+    public void meth11175() { }
+    public void meth11176() { }
+    public void meth11177() { }
+    public void meth11178() { }
+    public void meth11179() { }
+    public void meth11180() { }
+    public void meth11181() { }
+    public void meth11182() { }
+    public void meth11183() { }
+    public void meth11184() { }
+    public void meth11185() { }
+    public void meth11186() { }
+    public void meth11187() { }
+    public void meth11188() { }
+    public void meth11189() { }
+    public void meth11190() { }
+    public void meth11191() { }
+    public void meth11192() { }
+    public void meth11193() { }
+    public void meth11194() { }
+    public void meth11195() { }
+    public void meth11196() { }
+    public void meth11197() { }
+    public void meth11198() { }
+    public void meth11199() { }
+    public void meth11200() { }
+    public void meth11201() { }
+    public void meth11202() { }
+    public void meth11203() { }
+    public void meth11204() { }
+    public void meth11205() { }
+    public void meth11206() { }
+    public void meth11207() { }
+    public void meth11208() { }
+    public void meth11209() { }
+    public void meth11210() { }
+    public void meth11211() { }
+    public void meth11212() { }
+    public void meth11213() { }
+    public void meth11214() { }
+    public void meth11215() { }
+    public void meth11216() { }
+    public void meth11217() { }
+    public void meth11218() { }
+    public void meth11219() { }
+    public void meth11220() { }
+    public void meth11221() { }
+    public void meth11222() { }
+    public void meth11223() { }
+    public void meth11224() { }
+    public void meth11225() { }
+    public void meth11226() { }
+    public void meth11227() { }
+    public void meth11228() { }
+    public void meth11229() { }
+    public void meth11230() { }
+    public void meth11231() { }
+    public void meth11232() { }
+    public void meth11233() { }
+    public void meth11234() { }
+    public void meth11235() { }
+    public void meth11236() { }
+    public void meth11237() { }
+    public void meth11238() { }
+    public void meth11239() { }
+    public void meth11240() { }
+    public void meth11241() { }
+    public void meth11242() { }
+    public void meth11243() { }
+    public void meth11244() { }
+    public void meth11245() { }
+    public void meth11246() { }
+    public void meth11247() { }
+    public void meth11248() { }
+    public void meth11249() { }
+    public void meth11250() { }
+    public void meth11251() { }
+    public void meth11252() { }
+    public void meth11253() { }
+    public void meth11254() { }
+    public void meth11255() { }
+    public void meth11256() { }
+    public void meth11257() { }
+    public void meth11258() { }
+    public void meth11259() { }
+    public void meth11260() { }
+    public void meth11261() { }
+    public void meth11262() { }
+    public void meth11263() { }
+    public void meth11264() { }
+    public void meth11265() { }
+    public void meth11266() { }
+    public void meth11267() { }
+    public void meth11268() { }
+    public void meth11269() { }
+    public void meth11270() { }
+    public void meth11271() { }
+    public void meth11272() { }
+    public void meth11273() { }
+    public void meth11274() { }
+    public void meth11275() { }
+    public void meth11276() { }
+    public void meth11277() { }
+    public void meth11278() { }
+    public void meth11279() { }
+    public void meth11280() { }
+    public void meth11281() { }
+    public void meth11282() { }
+    public void meth11283() { }
+    public void meth11284() { }
+    public void meth11285() { }
+    public void meth11286() { }
+    public void meth11287() { }
+    public void meth11288() { }
+    public void meth11289() { }
+    public void meth11290() { }
+    public void meth11291() { }
+    public void meth11292() { }
+    public void meth11293() { }
+    public void meth11294() { }
+    public void meth11295() { }
+    public void meth11296() { }
+    public void meth11297() { }
+    public void meth11298() { }
+    public void meth11299() { }
+    public void meth11300() { }
+    public void meth11301() { }
+    public void meth11302() { }
+    public void meth11303() { }
+    public void meth11304() { }
+    public void meth11305() { }
+    public void meth11306() { }
+    public void meth11307() { }
+    public void meth11308() { }
+    public void meth11309() { }
+    public void meth11310() { }
+    public void meth11311() { }
+    public void meth11312() { }
+    public void meth11313() { }
+    public void meth11314() { }
+    public void meth11315() { }
+    public void meth11316() { }
+    public void meth11317() { }
+    public void meth11318() { }
+    public void meth11319() { }
+    public void meth11320() { }
+    public void meth11321() { }
+    public void meth11322() { }
+    public void meth11323() { }
+    public void meth11324() { }
+    public void meth11325() { }
+    public void meth11326() { }
+    public void meth11327() { }
+    public void meth11328() { }
+    public void meth11329() { }
+    public void meth11330() { }
+    public void meth11331() { }
+    public void meth11332() { }
+    public void meth11333() { }
+    public void meth11334() { }
+    public void meth11335() { }
+    public void meth11336() { }
+    public void meth11337() { }
+    public void meth11338() { }
+    public void meth11339() { }
+    public void meth11340() { }
+    public void meth11341() { }
+    public void meth11342() { }
+    public void meth11343() { }
+    public void meth11344() { }
+    public void meth11345() { }
+    public void meth11346() { }
+    public void meth11347() { }
+    public void meth11348() { }
+    public void meth11349() { }
+    public void meth11350() { }
+    public void meth11351() { }
+    public void meth11352() { }
+    public void meth11353() { }
+    public void meth11354() { }
+    public void meth11355() { }
+    public void meth11356() { }
+    public void meth11357() { }
+    public void meth11358() { }
+    public void meth11359() { }
+    public void meth11360() { }
+    public void meth11361() { }
+    public void meth11362() { }
+    public void meth11363() { }
+    public void meth11364() { }
+    public void meth11365() { }
+    public void meth11366() { }
+    public void meth11367() { }
+    public void meth11368() { }
+    public void meth11369() { }
+    public void meth11370() { }
+    public void meth11371() { }
+    public void meth11372() { }
+    public void meth11373() { }
+    public void meth11374() { }
+    public void meth11375() { }
+    public void meth11376() { }
+    public void meth11377() { }
+    public void meth11378() { }
+    public void meth11379() { }
+    public void meth11380() { }
+    public void meth11381() { }
+    public void meth11382() { }
+    public void meth11383() { }
+    public void meth11384() { }
+    public void meth11385() { }
+    public void meth11386() { }
+    public void meth11387() { }
+    public void meth11388() { }
+    public void meth11389() { }
+    public void meth11390() { }
+    public void meth11391() { }
+    public void meth11392() { }
+    public void meth11393() { }
+    public void meth11394() { }
+    public void meth11395() { }
+    public void meth11396() { }
+    public void meth11397() { }
+    public void meth11398() { }
+    public void meth11399() { }
+    public void meth11400() { }
+    public void meth11401() { }
+    public void meth11402() { }
+    public void meth11403() { }
+    public void meth11404() { }
+    public void meth11405() { }
+    public void meth11406() { }
+    public void meth11407() { }
+    public void meth11408() { }
+    public void meth11409() { }
+    public void meth11410() { }
+    public void meth11411() { }
+    public void meth11412() { }
+    public void meth11413() { }
+    public void meth11414() { }
+    public void meth11415() { }
+    public void meth11416() { }
+    public void meth11417() { }
+    public void meth11418() { }
+    public void meth11419() { }
+    public void meth11420() { }
+    public void meth11421() { }
+    public void meth11422() { }
+    public void meth11423() { }
+    public void meth11424() { }
+    public void meth11425() { }
+    public void meth11426() { }
+    public void meth11427() { }
+    public void meth11428() { }
+    public void meth11429() { }
+    public void meth11430() { }
+    public void meth11431() { }
+    public void meth11432() { }
+    public void meth11433() { }
+    public void meth11434() { }
+    public void meth11435() { }
+    public void meth11436() { }
+    public void meth11437() { }
+    public void meth11438() { }
+    public void meth11439() { }
+    public void meth11440() { }
+    public void meth11441() { }
+    public void meth11442() { }
+    public void meth11443() { }
+    public void meth11444() { }
+    public void meth11445() { }
+    public void meth11446() { }
+    public void meth11447() { }
+    public void meth11448() { }
+    public void meth11449() { }
+    public void meth11450() { }
+    public void meth11451() { }
+    public void meth11452() { }
+    public void meth11453() { }
+    public void meth11454() { }
+    public void meth11455() { }
+    public void meth11456() { }
+    public void meth11457() { }
+    public void meth11458() { }
+    public void meth11459() { }
+    public void meth11460() { }
+    public void meth11461() { }
+    public void meth11462() { }
+    public void meth11463() { }
+    public void meth11464() { }
+    public void meth11465() { }
+    public void meth11466() { }
+    public void meth11467() { }
+    public void meth11468() { }
+    public void meth11469() { }
+    public void meth11470() { }
+    public void meth11471() { }
+    public void meth11472() { }
+    public void meth11473() { }
+    public void meth11474() { }
+    public void meth11475() { }
+    public void meth11476() { }
+    public void meth11477() { }
+    public void meth11478() { }
+    public void meth11479() { }
+    public void meth11480() { }
+    public void meth11481() { }
+    public void meth11482() { }
+    public void meth11483() { }
+    public void meth11484() { }
+    public void meth11485() { }
+    public void meth11486() { }
+    public void meth11487() { }
+    public void meth11488() { }
+    public void meth11489() { }
+    public void meth11490() { }
+    public void meth11491() { }
+    public void meth11492() { }
+    public void meth11493() { }
+    public void meth11494() { }
+    public void meth11495() { }
+    public void meth11496() { }
+    public void meth11497() { }
+    public void meth11498() { }
+    public void meth11499() { }
+    public void meth11500() { }
+    public void meth11501() { }
+    public void meth11502() { }
+    public void meth11503() { }
+    public void meth11504() { }
+    public void meth11505() { }
+    public void meth11506() { }
+    public void meth11507() { }
+    public void meth11508() { }
+    public void meth11509() { }
+    public void meth11510() { }
+    public void meth11511() { }
+    public void meth11512() { }
+    public void meth11513() { }
+    public void meth11514() { }
+    public void meth11515() { }
+    public void meth11516() { }
+    public void meth11517() { }
+    public void meth11518() { }
+    public void meth11519() { }
+    public void meth11520() { }
+    public void meth11521() { }
+    public void meth11522() { }
+    public void meth11523() { }
+    public void meth11524() { }
+    public void meth11525() { }
+    public void meth11526() { }
+    public void meth11527() { }
+    public void meth11528() { }
+    public void meth11529() { }
+    public void meth11530() { }
+    public void meth11531() { }
+    public void meth11532() { }
+    public void meth11533() { }
+    public void meth11534() { }
+    public void meth11535() { }
+    public void meth11536() { }
+    public void meth11537() { }
+    public void meth11538() { }
+    public void meth11539() { }
+    public void meth11540() { }
+    public void meth11541() { }
+    public void meth11542() { }
+    public void meth11543() { }
+    public void meth11544() { }
+    public void meth11545() { }
+    public void meth11546() { }
+    public void meth11547() { }
+    public void meth11548() { }
+    public void meth11549() { }
+    public void meth11550() { }
+    public void meth11551() { }
+    public void meth11552() { }
+    public void meth11553() { }
+    public void meth11554() { }
+    public void meth11555() { }
+    public void meth11556() { }
+    public void meth11557() { }
+    public void meth11558() { }
+    public void meth11559() { }
+    public void meth11560() { }
+    public void meth11561() { }
+    public void meth11562() { }
+    public void meth11563() { }
+    public void meth11564() { }
+    public void meth11565() { }
+    public void meth11566() { }
+    public void meth11567() { }
+    public void meth11568() { }
+    public void meth11569() { }
+    public void meth11570() { }
+    public void meth11571() { }
+    public void meth11572() { }
+    public void meth11573() { }
+    public void meth11574() { }
+    public void meth11575() { }
+    public void meth11576() { }
+    public void meth11577() { }
+    public void meth11578() { }
+    public void meth11579() { }
+    public void meth11580() { }
+    public void meth11581() { }
+    public void meth11582() { }
+    public void meth11583() { }
+    public void meth11584() { }
+    public void meth11585() { }
+    public void meth11586() { }
+    public void meth11587() { }
+    public void meth11588() { }
+    public void meth11589() { }
+    public void meth11590() { }
+    public void meth11591() { }
+    public void meth11592() { }
+    public void meth11593() { }
+    public void meth11594() { }
+    public void meth11595() { }
+    public void meth11596() { }
+    public void meth11597() { }
+    public void meth11598() { }
+    public void meth11599() { }
+    public void meth11600() { }
+    public void meth11601() { }
+    public void meth11602() { }
+    public void meth11603() { }
+    public void meth11604() { }
+    public void meth11605() { }
+    public void meth11606() { }
+    public void meth11607() { }
+    public void meth11608() { }
+    public void meth11609() { }
+    public void meth11610() { }
+    public void meth11611() { }
+    public void meth11612() { }
+    public void meth11613() { }
+    public void meth11614() { }
+    public void meth11615() { }
+    public void meth11616() { }
+    public void meth11617() { }
+    public void meth11618() { }
+    public void meth11619() { }
+    public void meth11620() { }
+    public void meth11621() { }
+    public void meth11622() { }
+    public void meth11623() { }
+    public void meth11624() { }
+    public void meth11625() { }
+    public void meth11626() { }
+    public void meth11627() { }
+    public void meth11628() { }
+    public void meth11629() { }
+    public void meth11630() { }
+    public void meth11631() { }
+    public void meth11632() { }
+    public void meth11633() { }
+    public void meth11634() { }
+    public void meth11635() { }
+    public void meth11636() { }
+    public void meth11637() { }
+    public void meth11638() { }
+    public void meth11639() { }
+    public void meth11640() { }
+    public void meth11641() { }
+    public void meth11642() { }
+    public void meth11643() { }
+    public void meth11644() { }
+    public void meth11645() { }
+    public void meth11646() { }
+    public void meth11647() { }
+    public void meth11648() { }
+    public void meth11649() { }
+    public void meth11650() { }
+    public void meth11651() { }
+    public void meth11652() { }
+    public void meth11653() { }
+    public void meth11654() { }
+    public void meth11655() { }
+    public void meth11656() { }
+    public void meth11657() { }
+    public void meth11658() { }
+    public void meth11659() { }
+    public void meth11660() { }
+    public void meth11661() { }
+    public void meth11662() { }
+    public void meth11663() { }
+    public void meth11664() { }
+    public void meth11665() { }
+    public void meth11666() { }
+    public void meth11667() { }
+    public void meth11668() { }
+    public void meth11669() { }
+    public void meth11670() { }
+    public void meth11671() { }
+    public void meth11672() { }
+    public void meth11673() { }
+    public void meth11674() { }
+    public void meth11675() { }
+    public void meth11676() { }
+    public void meth11677() { }
+    public void meth11678() { }
+    public void meth11679() { }
+    public void meth11680() { }
+    public void meth11681() { }
+    public void meth11682() { }
+    public void meth11683() { }
+    public void meth11684() { }
+    public void meth11685() { }
+    public void meth11686() { }
+    public void meth11687() { }
+    public void meth11688() { }
+    public void meth11689() { }
+    public void meth11690() { }
+    public void meth11691() { }
+    public void meth11692() { }
+    public void meth11693() { }
+    public void meth11694() { }
+    public void meth11695() { }
+    public void meth11696() { }
+    public void meth11697() { }
+    public void meth11698() { }
+    public void meth11699() { }
+    public void meth11700() { }
+    public void meth11701() { }
+    public void meth11702() { }
+    public void meth11703() { }
+    public void meth11704() { }
+    public void meth11705() { }
+    public void meth11706() { }
+    public void meth11707() { }
+    public void meth11708() { }
+    public void meth11709() { }
+    public void meth11710() { }
+    public void meth11711() { }
+    public void meth11712() { }
+    public void meth11713() { }
+    public void meth11714() { }
+    public void meth11715() { }
+    public void meth11716() { }
+    public void meth11717() { }
+    public void meth11718() { }
+    public void meth11719() { }
+    public void meth11720() { }
+    public void meth11721() { }
+    public void meth11722() { }
+    public void meth11723() { }
+    public void meth11724() { }
+    public void meth11725() { }
+    public void meth11726() { }
+    public void meth11727() { }
+    public void meth11728() { }
+    public void meth11729() { }
+    public void meth11730() { }
+    public void meth11731() { }
+    public void meth11732() { }
+    public void meth11733() { }
+    public void meth11734() { }
+    public void meth11735() { }
+    public void meth11736() { }
+    public void meth11737() { }
+    public void meth11738() { }
+    public void meth11739() { }
+    public void meth11740() { }
+    public void meth11741() { }
+    public void meth11742() { }
+    public void meth11743() { }
+    public void meth11744() { }
+    public void meth11745() { }
+    public void meth11746() { }
+    public void meth11747() { }
+    public void meth11748() { }
+    public void meth11749() { }
+    public void meth11750() { }
+    public void meth11751() { }
+    public void meth11752() { }
+    public void meth11753() { }
+    public void meth11754() { }
+    public void meth11755() { }
+    public void meth11756() { }
+    public void meth11757() { }
+    public void meth11758() { }
+    public void meth11759() { }
+    public void meth11760() { }
+    public void meth11761() { }
+    public void meth11762() { }
+    public void meth11763() { }
+    public void meth11764() { }
+    public void meth11765() { }
+    public void meth11766() { }
+    public void meth11767() { }
+    public void meth11768() { }
+    public void meth11769() { }
+    public void meth11770() { }
+    public void meth11771() { }
+    public void meth11772() { }
+    public void meth11773() { }
+    public void meth11774() { }
+    public void meth11775() { }
+    public void meth11776() { }
+    public void meth11777() { }
+    public void meth11778() { }
+    public void meth11779() { }
+    public void meth11780() { }
+    public void meth11781() { }
+    public void meth11782() { }
+    public void meth11783() { }
+    public void meth11784() { }
+    public void meth11785() { }
+    public void meth11786() { }
+    public void meth11787() { }
+    public void meth11788() { }
+    public void meth11789() { }
+    public void meth11790() { }
+    public void meth11791() { }
+    public void meth11792() { }
+    public void meth11793() { }
+    public void meth11794() { }
+    public void meth11795() { }
+    public void meth11796() { }
+    public void meth11797() { }
+    public void meth11798() { }
+    public void meth11799() { }
+    public void meth11800() { }
+    public void meth11801() { }
+    public void meth11802() { }
+    public void meth11803() { }
+    public void meth11804() { }
+    public void meth11805() { }
+    public void meth11806() { }
+    public void meth11807() { }
+    public void meth11808() { }
+    public void meth11809() { }
+    public void meth11810() { }
+    public void meth11811() { }
+    public void meth11812() { }
+    public void meth11813() { }
+    public void meth11814() { }
+    public void meth11815() { }
+    public void meth11816() { }
+    public void meth11817() { }
+    public void meth11818() { }
+    public void meth11819() { }
+    public void meth11820() { }
+    public void meth11821() { }
+    public void meth11822() { }
+    public void meth11823() { }
+    public void meth11824() { }
+    public void meth11825() { }
+    public void meth11826() { }
+    public void meth11827() { }
+    public void meth11828() { }
+    public void meth11829() { }
+    public void meth11830() { }
+    public void meth11831() { }
+    public void meth11832() { }
+    public void meth11833() { }
+    public void meth11834() { }
+    public void meth11835() { }
+    public void meth11836() { }
+    public void meth11837() { }
+    public void meth11838() { }
+    public void meth11839() { }
+    public void meth11840() { }
+    public void meth11841() { }
+    public void meth11842() { }
+    public void meth11843() { }
+    public void meth11844() { }
+    public void meth11845() { }
+    public void meth11846() { }
+    public void meth11847() { }
+    public void meth11848() { }
+    public void meth11849() { }
+    public void meth11850() { }
+    public void meth11851() { }
+    public void meth11852() { }
+    public void meth11853() { }
+    public void meth11854() { }
+    public void meth11855() { }
+    public void meth11856() { }
+    public void meth11857() { }
+    public void meth11858() { }
+    public void meth11859() { }
+    public void meth11860() { }
+    public void meth11861() { }
+    public void meth11862() { }
+    public void meth11863() { }
+    public void meth11864() { }
+    public void meth11865() { }
+    public void meth11866() { }
+    public void meth11867() { }
+    public void meth11868() { }
+    public void meth11869() { }
+    public void meth11870() { }
+    public void meth11871() { }
+    public void meth11872() { }
+    public void meth11873() { }
+    public void meth11874() { }
+    public void meth11875() { }
+    public void meth11876() { }
+    public void meth11877() { }
+    public void meth11878() { }
+    public void meth11879() { }
+    public void meth11880() { }
+    public void meth11881() { }
+    public void meth11882() { }
+    public void meth11883() { }
+    public void meth11884() { }
+    public void meth11885() { }
+    public void meth11886() { }
+    public void meth11887() { }
+    public void meth11888() { }
+    public void meth11889() { }
+    public void meth11890() { }
+    public void meth11891() { }
+    public void meth11892() { }
+    public void meth11893() { }
+    public void meth11894() { }
+    public void meth11895() { }
+    public void meth11896() { }
+    public void meth11897() { }
+    public void meth11898() { }
+    public void meth11899() { }
+    public void meth11900() { }
+    public void meth11901() { }
+    public void meth11902() { }
+    public void meth11903() { }
+    public void meth11904() { }
+    public void meth11905() { }
+    public void meth11906() { }
+    public void meth11907() { }
+    public void meth11908() { }
+    public void meth11909() { }
+    public void meth11910() { }
+    public void meth11911() { }
+    public void meth11912() { }
+    public void meth11913() { }
+    public void meth11914() { }
+    public void meth11915() { }
+    public void meth11916() { }
+    public void meth11917() { }
+    public void meth11918() { }
+    public void meth11919() { }
+    public void meth11920() { }
+    public void meth11921() { }
+    public void meth11922() { }
+    public void meth11923() { }
+    public void meth11924() { }
+    public void meth11925() { }
+    public void meth11926() { }
+    public void meth11927() { }
+    public void meth11928() { }
+    public void meth11929() { }
+    public void meth11930() { }
+    public void meth11931() { }
+    public void meth11932() { }
+    public void meth11933() { }
+    public void meth11934() { }
+    public void meth11935() { }
+    public void meth11936() { }
+    public void meth11937() { }
+    public void meth11938() { }
+    public void meth11939() { }
+    public void meth11940() { }
+    public void meth11941() { }
+    public void meth11942() { }
+    public void meth11943() { }
+    public void meth11944() { }
+    public void meth11945() { }
+    public void meth11946() { }
+    public void meth11947() { }
+    public void meth11948() { }
+    public void meth11949() { }
+    public void meth11950() { }
+    public void meth11951() { }
+    public void meth11952() { }
+    public void meth11953() { }
+    public void meth11954() { }
+    public void meth11955() { }
+    public void meth11956() { }
+    public void meth11957() { }
+    public void meth11958() { }
+    public void meth11959() { }
+    public void meth11960() { }
+    public void meth11961() { }
+    public void meth11962() { }
+    public void meth11963() { }
+    public void meth11964() { }
+    public void meth11965() { }
+    public void meth11966() { }
+    public void meth11967() { }
+    public void meth11968() { }
+    public void meth11969() { }
+    public void meth11970() { }
+    public void meth11971() { }
+    public void meth11972() { }
+    public void meth11973() { }
+    public void meth11974() { }
+    public void meth11975() { }
+    public void meth11976() { }
+    public void meth11977() { }
+    public void meth11978() { }
+    public void meth11979() { }
+    public void meth11980() { }
+    public void meth11981() { }
+    public void meth11982() { }
+    public void meth11983() { }
+    public void meth11984() { }
+    public void meth11985() { }
+    public void meth11986() { }
+    public void meth11987() { }
+    public void meth11988() { }
+    public void meth11989() { }
+    public void meth11990() { }
+    public void meth11991() { }
+    public void meth11992() { }
+    public void meth11993() { }
+    public void meth11994() { }
+    public void meth11995() { }
+    public void meth11996() { }
+    public void meth11997() { }
+    public void meth11998() { }
+    public void meth11999() { }
+    public void meth12000() { }
+    public void meth12001() { }
+    public void meth12002() { }
+    public void meth12003() { }
+    public void meth12004() { }
+    public void meth12005() { }
+    public void meth12006() { }
+    public void meth12007() { }
+    public void meth12008() { }
+    public void meth12009() { }
+    public void meth12010() { }
+    public void meth12011() { }
+    public void meth12012() { }
+    public void meth12013() { }
+    public void meth12014() { }
+    public void meth12015() { }
+    public void meth12016() { }
+    public void meth12017() { }
+    public void meth12018() { }
+    public void meth12019() { }
+    public void meth12020() { }
+    public void meth12021() { }
+    public void meth12022() { }
+    public void meth12023() { }
+    public void meth12024() { }
+    public void meth12025() { }
+    public void meth12026() { }
+    public void meth12027() { }
+    public void meth12028() { }
+    public void meth12029() { }
+    public void meth12030() { }
+    public void meth12031() { }
+    public void meth12032() { }
+    public void meth12033() { }
+    public void meth12034() { }
+    public void meth12035() { }
+    public void meth12036() { }
+    public void meth12037() { }
+    public void meth12038() { }
+    public void meth12039() { }
+    public void meth12040() { }
+    public void meth12041() { }
+    public void meth12042() { }
+    public void meth12043() { }
+    public void meth12044() { }
+    public void meth12045() { }
+    public void meth12046() { }
+    public void meth12047() { }
+    public void meth12048() { }
+    public void meth12049() { }
+    public void meth12050() { }
+    public void meth12051() { }
+    public void meth12052() { }
+    public void meth12053() { }
+    public void meth12054() { }
+    public void meth12055() { }
+    public void meth12056() { }
+    public void meth12057() { }
+    public void meth12058() { }
+    public void meth12059() { }
+    public void meth12060() { }
+    public void meth12061() { }
+    public void meth12062() { }
+    public void meth12063() { }
+    public void meth12064() { }
+    public void meth12065() { }
+    public void meth12066() { }
+    public void meth12067() { }
+    public void meth12068() { }
+    public void meth12069() { }
+    public void meth12070() { }
+    public void meth12071() { }
+    public void meth12072() { }
+    public void meth12073() { }
+    public void meth12074() { }
+    public void meth12075() { }
+    public void meth12076() { }
+    public void meth12077() { }
+    public void meth12078() { }
+    public void meth12079() { }
+    public void meth12080() { }
+    public void meth12081() { }
+    public void meth12082() { }
+    public void meth12083() { }
+    public void meth12084() { }
+    public void meth12085() { }
+    public void meth12086() { }
+    public void meth12087() { }
+    public void meth12088() { }
+    public void meth12089() { }
+    public void meth12090() { }
+    public void meth12091() { }
+    public void meth12092() { }
+    public void meth12093() { }
+    public void meth12094() { }
+    public void meth12095() { }
+    public void meth12096() { }
+    public void meth12097() { }
+    public void meth12098() { }
+    public void meth12099() { }
+    public void meth12100() { }
+    public void meth12101() { }
+    public void meth12102() { }
+    public void meth12103() { }
+    public void meth12104() { }
+    public void meth12105() { }
+    public void meth12106() { }
+    public void meth12107() { }
+    public void meth12108() { }
+    public void meth12109() { }
+    public void meth12110() { }
+    public void meth12111() { }
+    public void meth12112() { }
+    public void meth12113() { }
+    public void meth12114() { }
+    public void meth12115() { }
+    public void meth12116() { }
+    public void meth12117() { }
+    public void meth12118() { }
+    public void meth12119() { }
+    public void meth12120() { }
+    public void meth12121() { }
+    public void meth12122() { }
+    public void meth12123() { }
+    public void meth12124() { }
+    public void meth12125() { }
+    public void meth12126() { }
+    public void meth12127() { }
+    public void meth12128() { }
+    public void meth12129() { }
+    public void meth12130() { }
+    public void meth12131() { }
+    public void meth12132() { }
+    public void meth12133() { }
+    public void meth12134() { }
+    public void meth12135() { }
+    public void meth12136() { }
+    public void meth12137() { }
+    public void meth12138() { }
+    public void meth12139() { }
+    public void meth12140() { }
+    public void meth12141() { }
+    public void meth12142() { }
+    public void meth12143() { }
+    public void meth12144() { }
+    public void meth12145() { }
+    public void meth12146() { }
+    public void meth12147() { }
+    public void meth12148() { }
+    public void meth12149() { }
+    public void meth12150() { }
+    public void meth12151() { }
+    public void meth12152() { }
+    public void meth12153() { }
+    public void meth12154() { }
+    public void meth12155() { }
+    public void meth12156() { }
+    public void meth12157() { }
+    public void meth12158() { }
+    public void meth12159() { }
+    public void meth12160() { }
+    public void meth12161() { }
+    public void meth12162() { }
+    public void meth12163() { }
+    public void meth12164() { }
+    public void meth12165() { }
+    public void meth12166() { }
+    public void meth12167() { }
+    public void meth12168() { }
+    public void meth12169() { }
+    public void meth12170() { }
+    public void meth12171() { }
+    public void meth12172() { }
+    public void meth12173() { }
+    public void meth12174() { }
+    public void meth12175() { }
+    public void meth12176() { }
+    public void meth12177() { }
+    public void meth12178() { }
+    public void meth12179() { }
+    public void meth12180() { }
+    public void meth12181() { }
+    public void meth12182() { }
+    public void meth12183() { }
+    public void meth12184() { }
+    public void meth12185() { }
+    public void meth12186() { }
+    public void meth12187() { }
+    public void meth12188() { }
+    public void meth12189() { }
+    public void meth12190() { }
+    public void meth12191() { }
+    public void meth12192() { }
+    public void meth12193() { }
+    public void meth12194() { }
+    public void meth12195() { }
+    public void meth12196() { }
+    public void meth12197() { }
+    public void meth12198() { }
+    public void meth12199() { }
+    public void meth12200() { }
+    public void meth12201() { }
+    public void meth12202() { }
+    public void meth12203() { }
+    public void meth12204() { }
+    public void meth12205() { }
+    public void meth12206() { }
+    public void meth12207() { }
+    public void meth12208() { }
+    public void meth12209() { }
+    public void meth12210() { }
+    public void meth12211() { }
+    public void meth12212() { }
+    public void meth12213() { }
+    public void meth12214() { }
+    public void meth12215() { }
+    public void meth12216() { }
+    public void meth12217() { }
+    public void meth12218() { }
+    public void meth12219() { }
+    public void meth12220() { }
+    public void meth12221() { }
+    public void meth12222() { }
+    public void meth12223() { }
+    public void meth12224() { }
+    public void meth12225() { }
+    public void meth12226() { }
+    public void meth12227() { }
+    public void meth12228() { }
+    public void meth12229() { }
+    public void meth12230() { }
+    public void meth12231() { }
+    public void meth12232() { }
+    public void meth12233() { }
+    public void meth12234() { }
+    public void meth12235() { }
+    public void meth12236() { }
+    public void meth12237() { }
+    public void meth12238() { }
+    public void meth12239() { }
+    public void meth12240() { }
+    public void meth12241() { }
+    public void meth12242() { }
+    public void meth12243() { }
+    public void meth12244() { }
+    public void meth12245() { }
+    public void meth12246() { }
+    public void meth12247() { }
+    public void meth12248() { }
+    public void meth12249() { }
+    public void meth12250() { }
+    public void meth12251() { }
+    public void meth12252() { }
+    public void meth12253() { }
+    public void meth12254() { }
+    public void meth12255() { }
+    public void meth12256() { }
+    public void meth12257() { }
+    public void meth12258() { }
+    public void meth12259() { }
+    public void meth12260() { }
+    public void meth12261() { }
+    public void meth12262() { }
+    public void meth12263() { }
+    public void meth12264() { }
+    public void meth12265() { }
+    public void meth12266() { }
+    public void meth12267() { }
+    public void meth12268() { }
+    public void meth12269() { }
+    public void meth12270() { }
+    public void meth12271() { }
+    public void meth12272() { }
+    public void meth12273() { }
+    public void meth12274() { }
+    public void meth12275() { }
+    public void meth12276() { }
+    public void meth12277() { }
+    public void meth12278() { }
+    public void meth12279() { }
+    public void meth12280() { }
+    public void meth12281() { }
+    public void meth12282() { }
+    public void meth12283() { }
+    public void meth12284() { }
+    public void meth12285() { }
+    public void meth12286() { }
+    public void meth12287() { }
+    public void meth12288() { }
+    public void meth12289() { }
+    public void meth12290() { }
+    public void meth12291() { }
+    public void meth12292() { }
+    public void meth12293() { }
+    public void meth12294() { }
+    public void meth12295() { }
+    public void meth12296() { }
+    public void meth12297() { }
+    public void meth12298() { }
+    public void meth12299() { }
+    public void meth12300() { }
+    public void meth12301() { }
+    public void meth12302() { }
+    public void meth12303() { }
+    public void meth12304() { }
+    public void meth12305() { }
+    public void meth12306() { }
+    public void meth12307() { }
+    public void meth12308() { }
+    public void meth12309() { }
+    public void meth12310() { }
+    public void meth12311() { }
+    public void meth12312() { }
+    public void meth12313() { }
+    public void meth12314() { }
+    public void meth12315() { }
+    public void meth12316() { }
+    public void meth12317() { }
+    public void meth12318() { }
+    public void meth12319() { }
+    public void meth12320() { }
+    public void meth12321() { }
+    public void meth12322() { }
+    public void meth12323() { }
+    public void meth12324() { }
+    public void meth12325() { }
+    public void meth12326() { }
+    public void meth12327() { }
+    public void meth12328() { }
+    public void meth12329() { }
+    public void meth12330() { }
+    public void meth12331() { }
+    public void meth12332() { }
+    public void meth12333() { }
+    public void meth12334() { }
+    public void meth12335() { }
+    public void meth12336() { }
+    public void meth12337() { }
+    public void meth12338() { }
+    public void meth12339() { }
+    public void meth12340() { }
+    public void meth12341() { }
+    public void meth12342() { }
+    public void meth12343() { }
+    public void meth12344() { }
+    public void meth12345() { }
+    public void meth12346() { }
+    public void meth12347() { }
+    public void meth12348() { }
+    public void meth12349() { }
+    public void meth12350() { }
+    public void meth12351() { }
+    public void meth12352() { }
+    public void meth12353() { }
+    public void meth12354() { }
+    public void meth12355() { }
+    public void meth12356() { }
+    public void meth12357() { }
+    public void meth12358() { }
+    public void meth12359() { }
+    public void meth12360() { }
+    public void meth12361() { }
+    public void meth12362() { }
+    public void meth12363() { }
+    public void meth12364() { }
+    public void meth12365() { }
+    public void meth12366() { }
+    public void meth12367() { }
+    public void meth12368() { }
+    public void meth12369() { }
+    public void meth12370() { }
+    public void meth12371() { }
+    public void meth12372() { }
+    public void meth12373() { }
+    public void meth12374() { }
+    public void meth12375() { }
+    public void meth12376() { }
+    public void meth12377() { }
+    public void meth12378() { }
+    public void meth12379() { }
+    public void meth12380() { }
+    public void meth12381() { }
+    public void meth12382() { }
+    public void meth12383() { }
+    public void meth12384() { }
+    public void meth12385() { }
+    public void meth12386() { }
+    public void meth12387() { }
+    public void meth12388() { }
+    public void meth12389() { }
+    public void meth12390() { }
+    public void meth12391() { }
+    public void meth12392() { }
+    public void meth12393() { }
+    public void meth12394() { }
+    public void meth12395() { }
+    public void meth12396() { }
+    public void meth12397() { }
+    public void meth12398() { }
+    public void meth12399() { }
+    public void meth12400() { }
+    public void meth12401() { }
+    public void meth12402() { }
+    public void meth12403() { }
+    public void meth12404() { }
+    public void meth12405() { }
+    public void meth12406() { }
+    public void meth12407() { }
+    public void meth12408() { }
+    public void meth12409() { }
+    public void meth12410() { }
+    public void meth12411() { }
+    public void meth12412() { }
+    public void meth12413() { }
+    public void meth12414() { }
+    public void meth12415() { }
+    public void meth12416() { }
+    public void meth12417() { }
+    public void meth12418() { }
+    public void meth12419() { }
+    public void meth12420() { }
+    public void meth12421() { }
+    public void meth12422() { }
+    public void meth12423() { }
+    public void meth12424() { }
+    public void meth12425() { }
+    public void meth12426() { }
+    public void meth12427() { }
+    public void meth12428() { }
+    public void meth12429() { }
+    public void meth12430() { }
+    public void meth12431() { }
+    public void meth12432() { }
+    public void meth12433() { }
+    public void meth12434() { }
+    public void meth12435() { }
+    public void meth12436() { }
+    public void meth12437() { }
+    public void meth12438() { }
+    public void meth12439() { }
+    public void meth12440() { }
+    public void meth12441() { }
+    public void meth12442() { }
+    public void meth12443() { }
+    public void meth12444() { }
+    public void meth12445() { }
+    public void meth12446() { }
+    public void meth12447() { }
+    public void meth12448() { }
+    public void meth12449() { }
+    public void meth12450() { }
+    public void meth12451() { }
+    public void meth12452() { }
+    public void meth12453() { }
+    public void meth12454() { }
+    public void meth12455() { }
+    public void meth12456() { }
+    public void meth12457() { }
+    public void meth12458() { }
+    public void meth12459() { }
+    public void meth12460() { }
+    public void meth12461() { }
+    public void meth12462() { }
+    public void meth12463() { }
+    public void meth12464() { }
+    public void meth12465() { }
+    public void meth12466() { }
+    public void meth12467() { }
+    public void meth12468() { }
+    public void meth12469() { }
+    public void meth12470() { }
+    public void meth12471() { }
+    public void meth12472() { }
+    public void meth12473() { }
+    public void meth12474() { }
+    public void meth12475() { }
+    public void meth12476() { }
+    public void meth12477() { }
+    public void meth12478() { }
+    public void meth12479() { }
+    public void meth12480() { }
+    public void meth12481() { }
+    public void meth12482() { }
+    public void meth12483() { }
+    public void meth12484() { }
+    public void meth12485() { }
+    public void meth12486() { }
+    public void meth12487() { }
+    public void meth12488() { }
+    public void meth12489() { }
+    public void meth12490() { }
+    public void meth12491() { }
+    public void meth12492() { }
+    public void meth12493() { }
+    public void meth12494() { }
+    public void meth12495() { }
+    public void meth12496() { }
+    public void meth12497() { }
+    public void meth12498() { }
+    public void meth12499() { }
+    public void meth12500() { }
+    public void meth12501() { }
+    public void meth12502() { }
+    public void meth12503() { }
+    public void meth12504() { }
+    public void meth12505() { }
+    public void meth12506() { }
+    public void meth12507() { }
+    public void meth12508() { }
+    public void meth12509() { }
+    public void meth12510() { }
+    public void meth12511() { }
+    public void meth12512() { }
+    public void meth12513() { }
+    public void meth12514() { }
+    public void meth12515() { }
+    public void meth12516() { }
+    public void meth12517() { }
+    public void meth12518() { }
+    public void meth12519() { }
+    public void meth12520() { }
+    public void meth12521() { }
+    public void meth12522() { }
+    public void meth12523() { }
+    public void meth12524() { }
+    public void meth12525() { }
+    public void meth12526() { }
+    public void meth12527() { }
+    public void meth12528() { }
+    public void meth12529() { }
+    public void meth12530() { }
+    public void meth12531() { }
+    public void meth12532() { }
+    public void meth12533() { }
+    public void meth12534() { }
+    public void meth12535() { }
+    public void meth12536() { }
+    public void meth12537() { }
+    public void meth12538() { }
+    public void meth12539() { }
+    public void meth12540() { }
+    public void meth12541() { }
+    public void meth12542() { }
+    public void meth12543() { }
+    public void meth12544() { }
+    public void meth12545() { }
+    public void meth12546() { }
+    public void meth12547() { }
+    public void meth12548() { }
+    public void meth12549() { }
+    public void meth12550() { }
+    public void meth12551() { }
+    public void meth12552() { }
+    public void meth12553() { }
+    public void meth12554() { }
+    public void meth12555() { }
+    public void meth12556() { }
+    public void meth12557() { }
+    public void meth12558() { }
+    public void meth12559() { }
+    public void meth12560() { }
+    public void meth12561() { }
+    public void meth12562() { }
+    public void meth12563() { }
+    public void meth12564() { }
+    public void meth12565() { }
+    public void meth12566() { }
+    public void meth12567() { }
+    public void meth12568() { }
+    public void meth12569() { }
+    public void meth12570() { }
+    public void meth12571() { }
+    public void meth12572() { }
+    public void meth12573() { }
+    public void meth12574() { }
+    public void meth12575() { }
+    public void meth12576() { }
+    public void meth12577() { }
+    public void meth12578() { }
+    public void meth12579() { }
+    public void meth12580() { }
+    public void meth12581() { }
+    public void meth12582() { }
+    public void meth12583() { }
+    public void meth12584() { }
+    public void meth12585() { }
+    public void meth12586() { }
+    public void meth12587() { }
+    public void meth12588() { }
+    public void meth12589() { }
+    public void meth12590() { }
+    public void meth12591() { }
+    public void meth12592() { }
+    public void meth12593() { }
+    public void meth12594() { }
+    public void meth12595() { }
+    public void meth12596() { }
+    public void meth12597() { }
+    public void meth12598() { }
+    public void meth12599() { }
+    public void meth12600() { }
+    public void meth12601() { }
+    public void meth12602() { }
+    public void meth12603() { }
+    public void meth12604() { }
+    public void meth12605() { }
+    public void meth12606() { }
+    public void meth12607() { }
+    public void meth12608() { }
+    public void meth12609() { }
+    public void meth12610() { }
+    public void meth12611() { }
+    public void meth12612() { }
+    public void meth12613() { }
+    public void meth12614() { }
+    public void meth12615() { }
+    public void meth12616() { }
+    public void meth12617() { }
+    public void meth12618() { }
+    public void meth12619() { }
+    public void meth12620() { }
+    public void meth12621() { }
+    public void meth12622() { }
+    public void meth12623() { }
+    public void meth12624() { }
+    public void meth12625() { }
+    public void meth12626() { }
+    public void meth12627() { }
+    public void meth12628() { }
+    public void meth12629() { }
+    public void meth12630() { }
+    public void meth12631() { }
+    public void meth12632() { }
+    public void meth12633() { }
+    public void meth12634() { }
+    public void meth12635() { }
+    public void meth12636() { }
+    public void meth12637() { }
+    public void meth12638() { }
+    public void meth12639() { }
+    public void meth12640() { }
+    public void meth12641() { }
+    public void meth12642() { }
+    public void meth12643() { }
+    public void meth12644() { }
+    public void meth12645() { }
+    public void meth12646() { }
+    public void meth12647() { }
+    public void meth12648() { }
+    public void meth12649() { }
+    public void meth12650() { }
+    public void meth12651() { }
+    public void meth12652() { }
+    public void meth12653() { }
+    public void meth12654() { }
+    public void meth12655() { }
+    public void meth12656() { }
+    public void meth12657() { }
+    public void meth12658() { }
+    public void meth12659() { }
+    public void meth12660() { }
+    public void meth12661() { }
+    public void meth12662() { }
+    public void meth12663() { }
+    public void meth12664() { }
+    public void meth12665() { }
+    public void meth12666() { }
+    public void meth12667() { }
+    public void meth12668() { }
+    public void meth12669() { }
+    public void meth12670() { }
+    public void meth12671() { }
+    public void meth12672() { }
+    public void meth12673() { }
+    public void meth12674() { }
+    public void meth12675() { }
+    public void meth12676() { }
+    public void meth12677() { }
+    public void meth12678() { }
+    public void meth12679() { }
+    public void meth12680() { }
+    public void meth12681() { }
+    public void meth12682() { }
+    public void meth12683() { }
+    public void meth12684() { }
+    public void meth12685() { }
+    public void meth12686() { }
+    public void meth12687() { }
+    public void meth12688() { }
+    public void meth12689() { }
+    public void meth12690() { }
+    public void meth12691() { }
+    public void meth12692() { }
+    public void meth12693() { }
+    public void meth12694() { }
+    public void meth12695() { }
+    public void meth12696() { }
+    public void meth12697() { }
+    public void meth12698() { }
+    public void meth12699() { }
+    public void meth12700() { }
+    public void meth12701() { }
+    public void meth12702() { }
+    public void meth12703() { }
+    public void meth12704() { }
+    public void meth12705() { }
+    public void meth12706() { }
+    public void meth12707() { }
+    public void meth12708() { }
+    public void meth12709() { }
+    public void meth12710() { }
+    public void meth12711() { }
+    public void meth12712() { }
+    public void meth12713() { }
+    public void meth12714() { }
+    public void meth12715() { }
+    public void meth12716() { }
+    public void meth12717() { }
+    public void meth12718() { }
+    public void meth12719() { }
+    public void meth12720() { }
+    public void meth12721() { }
+    public void meth12722() { }
+    public void meth12723() { }
+    public void meth12724() { }
+    public void meth12725() { }
+    public void meth12726() { }
+    public void meth12727() { }
+    public void meth12728() { }
+    public void meth12729() { }
+    public void meth12730() { }
+    public void meth12731() { }
+    public void meth12732() { }
+    public void meth12733() { }
+    public void meth12734() { }
+    public void meth12735() { }
+    public void meth12736() { }
+    public void meth12737() { }
+    public void meth12738() { }
+    public void meth12739() { }
+    public void meth12740() { }
+    public void meth12741() { }
+    public void meth12742() { }
+    public void meth12743() { }
+    public void meth12744() { }
+    public void meth12745() { }
+    public void meth12746() { }
+    public void meth12747() { }
+    public void meth12748() { }
+    public void meth12749() { }
+    public void meth12750() { }
+    public void meth12751() { }
+    public void meth12752() { }
+    public void meth12753() { }
+    public void meth12754() { }
+    public void meth12755() { }
+    public void meth12756() { }
+    public void meth12757() { }
+    public void meth12758() { }
+    public void meth12759() { }
+    public void meth12760() { }
+    public void meth12761() { }
+    public void meth12762() { }
+    public void meth12763() { }
+    public void meth12764() { }
+    public void meth12765() { }
+    public void meth12766() { }
+    public void meth12767() { }
+    public void meth12768() { }
+    public void meth12769() { }
+    public void meth12770() { }
+    public void meth12771() { }
+    public void meth12772() { }
+    public void meth12773() { }
+    public void meth12774() { }
+    public void meth12775() { }
+    public void meth12776() { }
+    public void meth12777() { }
+    public void meth12778() { }
+    public void meth12779() { }
+    public void meth12780() { }
+    public void meth12781() { }
+    public void meth12782() { }
+    public void meth12783() { }
+    public void meth12784() { }
+    public void meth12785() { }
+    public void meth12786() { }
+    public void meth12787() { }
+    public void meth12788() { }
+    public void meth12789() { }
+    public void meth12790() { }
+    public void meth12791() { }
+    public void meth12792() { }
+    public void meth12793() { }
+    public void meth12794() { }
+    public void meth12795() { }
+    public void meth12796() { }
+    public void meth12797() { }
+    public void meth12798() { }
+    public void meth12799() { }
+    public void meth12800() { }
+    public void meth12801() { }
+    public void meth12802() { }
+    public void meth12803() { }
+    public void meth12804() { }
+    public void meth12805() { }
+    public void meth12806() { }
+    public void meth12807() { }
+    public void meth12808() { }
+    public void meth12809() { }
+    public void meth12810() { }
+    public void meth12811() { }
+    public void meth12812() { }
+    public void meth12813() { }
+    public void meth12814() { }
+    public void meth12815() { }
+    public void meth12816() { }
+    public void meth12817() { }
+    public void meth12818() { }
+    public void meth12819() { }
+    public void meth12820() { }
+    public void meth12821() { }
+    public void meth12822() { }
+    public void meth12823() { }
+    public void meth12824() { }
+    public void meth12825() { }
+    public void meth12826() { }
+    public void meth12827() { }
+    public void meth12828() { }
+    public void meth12829() { }
+    public void meth12830() { }
+    public void meth12831() { }
+    public void meth12832() { }
+    public void meth12833() { }
+    public void meth12834() { }
+    public void meth12835() { }
+    public void meth12836() { }
+    public void meth12837() { }
+    public void meth12838() { }
+    public void meth12839() { }
+    public void meth12840() { }
+    public void meth12841() { }
+    public void meth12842() { }
+    public void meth12843() { }
+    public void meth12844() { }
+    public void meth12845() { }
+    public void meth12846() { }
+    public void meth12847() { }
+    public void meth12848() { }
+    public void meth12849() { }
+    public void meth12850() { }
+    public void meth12851() { }
+    public void meth12852() { }
+    public void meth12853() { }
+    public void meth12854() { }
+    public void meth12855() { }
+    public void meth12856() { }
+    public void meth12857() { }
+    public void meth12858() { }
+    public void meth12859() { }
+    public void meth12860() { }
+    public void meth12861() { }
+    public void meth12862() { }
+    public void meth12863() { }
+    public void meth12864() { }
+    public void meth12865() { }
+    public void meth12866() { }
+    public void meth12867() { }
+    public void meth12868() { }
+    public void meth12869() { }
+    public void meth12870() { }
+    public void meth12871() { }
+    public void meth12872() { }
+    public void meth12873() { }
+    public void meth12874() { }
+    public void meth12875() { }
+    public void meth12876() { }
+    public void meth12877() { }
+    public void meth12878() { }
+    public void meth12879() { }
+    public void meth12880() { }
+    public void meth12881() { }
+    public void meth12882() { }
+    public void meth12883() { }
+    public void meth12884() { }
+    public void meth12885() { }
+    public void meth12886() { }
+    public void meth12887() { }
+    public void meth12888() { }
+    public void meth12889() { }
+    public void meth12890() { }
+    public void meth12891() { }
+    public void meth12892() { }
+    public void meth12893() { }
+    public void meth12894() { }
+    public void meth12895() { }
+    public void meth12896() { }
+    public void meth12897() { }
+    public void meth12898() { }
+    public void meth12899() { }
+    public void meth12900() { }
+    public void meth12901() { }
+    public void meth12902() { }
+    public void meth12903() { }
+    public void meth12904() { }
+    public void meth12905() { }
+    public void meth12906() { }
+    public void meth12907() { }
+    public void meth12908() { }
+    public void meth12909() { }
+    public void meth12910() { }
+    public void meth12911() { }
+    public void meth12912() { }
+    public void meth12913() { }
+    public void meth12914() { }
+    public void meth12915() { }
+    public void meth12916() { }
+    public void meth12917() { }
+    public void meth12918() { }
+    public void meth12919() { }
+    public void meth12920() { }
+    public void meth12921() { }
+    public void meth12922() { }
+    public void meth12923() { }
+    public void meth12924() { }
+    public void meth12925() { }
+    public void meth12926() { }
+    public void meth12927() { }
+    public void meth12928() { }
+    public void meth12929() { }
+    public void meth12930() { }
+    public void meth12931() { }
+    public void meth12932() { }
+    public void meth12933() { }
+    public void meth12934() { }
+    public void meth12935() { }
+    public void meth12936() { }
+    public void meth12937() { }
+    public void meth12938() { }
+    public void meth12939() { }
+    public void meth12940() { }
+    public void meth12941() { }
+    public void meth12942() { }
+    public void meth12943() { }
+    public void meth12944() { }
+    public void meth12945() { }
+    public void meth12946() { }
+    public void meth12947() { }
+    public void meth12948() { }
+    public void meth12949() { }
+    public void meth12950() { }
+    public void meth12951() { }
+    public void meth12952() { }
+    public void meth12953() { }
+    public void meth12954() { }
+    public void meth12955() { }
+    public void meth12956() { }
+    public void meth12957() { }
+    public void meth12958() { }
+    public void meth12959() { }
+    public void meth12960() { }
+    public void meth12961() { }
+    public void meth12962() { }
+    public void meth12963() { }
+    public void meth12964() { }
+    public void meth12965() { }
+    public void meth12966() { }
+    public void meth12967() { }
+    public void meth12968() { }
+    public void meth12969() { }
+    public void meth12970() { }
+    public void meth12971() { }
+    public void meth12972() { }
+    public void meth12973() { }
+    public void meth12974() { }
+    public void meth12975() { }
+    public void meth12976() { }
+    public void meth12977() { }
+    public void meth12978() { }
+    public void meth12979() { }
+    public void meth12980() { }
+    public void meth12981() { }
+    public void meth12982() { }
+    public void meth12983() { }
+    public void meth12984() { }
+    public void meth12985() { }
+    public void meth12986() { }
+    public void meth12987() { }
+    public void meth12988() { }
+    public void meth12989() { }
+    public void meth12990() { }
+    public void meth12991() { }
+    public void meth12992() { }
+    public void meth12993() { }
+    public void meth12994() { }
+    public void meth12995() { }
+    public void meth12996() { }
+    public void meth12997() { }
+    public void meth12998() { }
+    public void meth12999() { }
+    public void meth13000() { }
+    public void meth13001() { }
+    public void meth13002() { }
+    public void meth13003() { }
+    public void meth13004() { }
+    public void meth13005() { }
+    public void meth13006() { }
+    public void meth13007() { }
+    public void meth13008() { }
+    public void meth13009() { }
+    public void meth13010() { }
+    public void meth13011() { }
+    public void meth13012() { }
+    public void meth13013() { }
+    public void meth13014() { }
+    public void meth13015() { }
+    public void meth13016() { }
+    public void meth13017() { }
+    public void meth13018() { }
+    public void meth13019() { }
+    public void meth13020() { }
+    public void meth13021() { }
+    public void meth13022() { }
+    public void meth13023() { }
+    public void meth13024() { }
+    public void meth13025() { }
+    public void meth13026() { }
+    public void meth13027() { }
+    public void meth13028() { }
+    public void meth13029() { }
+    public void meth13030() { }
+    public void meth13031() { }
+    public void meth13032() { }
+    public void meth13033() { }
+    public void meth13034() { }
+    public void meth13035() { }
+    public void meth13036() { }
+    public void meth13037() { }
+    public void meth13038() { }
+    public void meth13039() { }
+    public void meth13040() { }
+    public void meth13041() { }
+    public void meth13042() { }
+    public void meth13043() { }
+    public void meth13044() { }
+    public void meth13045() { }
+    public void meth13046() { }
+    public void meth13047() { }
+    public void meth13048() { }
+    public void meth13049() { }
+    public void meth13050() { }
+    public void meth13051() { }
+    public void meth13052() { }
+    public void meth13053() { }
+    public void meth13054() { }
+    public void meth13055() { }
+    public void meth13056() { }
+    public void meth13057() { }
+    public void meth13058() { }
+    public void meth13059() { }
+    public void meth13060() { }
+    public void meth13061() { }
+    public void meth13062() { }
+    public void meth13063() { }
+    public void meth13064() { }
+    public void meth13065() { }
+    public void meth13066() { }
+    public void meth13067() { }
+    public void meth13068() { }
+    public void meth13069() { }
+    public void meth13070() { }
+    public void meth13071() { }
+    public void meth13072() { }
+    public void meth13073() { }
+    public void meth13074() { }
+    public void meth13075() { }
+    public void meth13076() { }
+    public void meth13077() { }
+    public void meth13078() { }
+    public void meth13079() { }
+    public void meth13080() { }
+    public void meth13081() { }
+    public void meth13082() { }
+    public void meth13083() { }
+    public void meth13084() { }
+    public void meth13085() { }
+    public void meth13086() { }
+    public void meth13087() { }
+    public void meth13088() { }
+    public void meth13089() { }
+    public void meth13090() { }
+    public void meth13091() { }
+    public void meth13092() { }
+    public void meth13093() { }
+    public void meth13094() { }
+    public void meth13095() { }
+    public void meth13096() { }
+    public void meth13097() { }
+    public void meth13098() { }
+    public void meth13099() { }
+    public void meth13100() { }
+    public void meth13101() { }
+    public void meth13102() { }
+    public void meth13103() { }
+    public void meth13104() { }
+    public void meth13105() { }
+    public void meth13106() { }
+    public void meth13107() { }
+    public void meth13108() { }
+    public void meth13109() { }
+    public void meth13110() { }
+    public void meth13111() { }
+    public void meth13112() { }
+    public void meth13113() { }
+    public void meth13114() { }
+    public void meth13115() { }
+    public void meth13116() { }
+    public void meth13117() { }
+    public void meth13118() { }
+    public void meth13119() { }
+    public void meth13120() { }
+    public void meth13121() { }
+    public void meth13122() { }
+    public void meth13123() { }
+    public void meth13124() { }
+    public void meth13125() { }
+    public void meth13126() { }
+    public void meth13127() { }
+    public void meth13128() { }
+    public void meth13129() { }
+    public void meth13130() { }
+    public void meth13131() { }
+    public void meth13132() { }
+    public void meth13133() { }
+    public void meth13134() { }
+    public void meth13135() { }
+    public void meth13136() { }
+    public void meth13137() { }
+    public void meth13138() { }
+    public void meth13139() { }
+    public void meth13140() { }
+    public void meth13141() { }
+    public void meth13142() { }
+    public void meth13143() { }
+    public void meth13144() { }
+    public void meth13145() { }
+    public void meth13146() { }
+    public void meth13147() { }
+    public void meth13148() { }
+    public void meth13149() { }
+    public void meth13150() { }
+    public void meth13151() { }
+    public void meth13152() { }
+    public void meth13153() { }
+    public void meth13154() { }
+    public void meth13155() { }
+    public void meth13156() { }
+    public void meth13157() { }
+    public void meth13158() { }
+    public void meth13159() { }
+    public void meth13160() { }
+    public void meth13161() { }
+    public void meth13162() { }
+    public void meth13163() { }
+    public void meth13164() { }
+    public void meth13165() { }
+    public void meth13166() { }
+    public void meth13167() { }
+    public void meth13168() { }
+    public void meth13169() { }
+    public void meth13170() { }
+    public void meth13171() { }
+    public void meth13172() { }
+    public void meth13173() { }
+    public void meth13174() { }
+    public void meth13175() { }
+    public void meth13176() { }
+    public void meth13177() { }
+    public void meth13178() { }
+    public void meth13179() { }
+    public void meth13180() { }
+    public void meth13181() { }
+    public void meth13182() { }
+    public void meth13183() { }
+    public void meth13184() { }
+    public void meth13185() { }
+    public void meth13186() { }
+    public void meth13187() { }
+    public void meth13188() { }
+    public void meth13189() { }
+    public void meth13190() { }
+    public void meth13191() { }
+    public void meth13192() { }
+    public void meth13193() { }
+    public void meth13194() { }
+    public void meth13195() { }
+    public void meth13196() { }
+    public void meth13197() { }
+    public void meth13198() { }
+    public void meth13199() { }
+    public void meth13200() { }
+    public void meth13201() { }
+    public void meth13202() { }
+    public void meth13203() { }
+    public void meth13204() { }
+    public void meth13205() { }
+    public void meth13206() { }
+    public void meth13207() { }
+    public void meth13208() { }
+    public void meth13209() { }
+    public void meth13210() { }
+    public void meth13211() { }
+    public void meth13212() { }
+    public void meth13213() { }
+    public void meth13214() { }
+    public void meth13215() { }
+    public void meth13216() { }
+    public void meth13217() { }
+    public void meth13218() { }
+    public void meth13219() { }
+    public void meth13220() { }
+    public void meth13221() { }
+    public void meth13222() { }
+    public void meth13223() { }
+    public void meth13224() { }
+    public void meth13225() { }
+    public void meth13226() { }
+    public void meth13227() { }
+    public void meth13228() { }
+    public void meth13229() { }
+    public void meth13230() { }
+    public void meth13231() { }
+    public void meth13232() { }
+    public void meth13233() { }
+    public void meth13234() { }
+    public void meth13235() { }
+    public void meth13236() { }
+    public void meth13237() { }
+    public void meth13238() { }
+    public void meth13239() { }
+    public void meth13240() { }
+    public void meth13241() { }
+    public void meth13242() { }
+    public void meth13243() { }
+    public void meth13244() { }
+    public void meth13245() { }
+    public void meth13246() { }
+    public void meth13247() { }
+    public void meth13248() { }
+    public void meth13249() { }
+    public void meth13250() { }
+    public void meth13251() { }
+    public void meth13252() { }
+    public void meth13253() { }
+    public void meth13254() { }
+    public void meth13255() { }
+    public void meth13256() { }
+    public void meth13257() { }
+    public void meth13258() { }
+    public void meth13259() { }
+    public void meth13260() { }
+    public void meth13261() { }
+    public void meth13262() { }
+    public void meth13263() { }
+    public void meth13264() { }
+    public void meth13265() { }
+    public void meth13266() { }
+    public void meth13267() { }
+    public void meth13268() { }
+    public void meth13269() { }
+    public void meth13270() { }
+    public void meth13271() { }
+    public void meth13272() { }
+    public void meth13273() { }
+    public void meth13274() { }
+    public void meth13275() { }
+    public void meth13276() { }
+    public void meth13277() { }
+    public void meth13278() { }
+    public void meth13279() { }
+    public void meth13280() { }
+    public void meth13281() { }
+    public void meth13282() { }
+    public void meth13283() { }
+    public void meth13284() { }
+    public void meth13285() { }
+    public void meth13286() { }
+    public void meth13287() { }
+    public void meth13288() { }
+    public void meth13289() { }
+    public void meth13290() { }
+    public void meth13291() { }
+    public void meth13292() { }
+    public void meth13293() { }
+    public void meth13294() { }
+    public void meth13295() { }
+    public void meth13296() { }
+    public void meth13297() { }
+    public void meth13298() { }
+    public void meth13299() { }
+    public void meth13300() { }
+    public void meth13301() { }
+    public void meth13302() { }
+    public void meth13303() { }
+    public void meth13304() { }
+    public void meth13305() { }
+    public void meth13306() { }
+    public void meth13307() { }
+    public void meth13308() { }
+    public void meth13309() { }
+    public void meth13310() { }
+    public void meth13311() { }
+    public void meth13312() { }
+    public void meth13313() { }
+    public void meth13314() { }
+    public void meth13315() { }
+    public void meth13316() { }
+    public void meth13317() { }
+    public void meth13318() { }
+    public void meth13319() { }
+    public void meth13320() { }
+    public void meth13321() { }
+    public void meth13322() { }
+    public void meth13323() { }
+    public void meth13324() { }
+    public void meth13325() { }
+    public void meth13326() { }
+    public void meth13327() { }
+    public void meth13328() { }
+    public void meth13329() { }
+    public void meth13330() { }
+    public void meth13331() { }
+    public void meth13332() { }
+    public void meth13333() { }
+    public void meth13334() { }
+    public void meth13335() { }
+    public void meth13336() { }
+    public void meth13337() { }
+    public void meth13338() { }
+    public void meth13339() { }
+    public void meth13340() { }
+    public void meth13341() { }
+    public void meth13342() { }
+    public void meth13343() { }
+    public void meth13344() { }
+    public void meth13345() { }
+    public void meth13346() { }
+    public void meth13347() { }
+    public void meth13348() { }
+    public void meth13349() { }
+    public void meth13350() { }
+    public void meth13351() { }
+    public void meth13352() { }
+    public void meth13353() { }
+    public void meth13354() { }
+    public void meth13355() { }
+    public void meth13356() { }
+    public void meth13357() { }
+    public void meth13358() { }
+    public void meth13359() { }
+    public void meth13360() { }
+    public void meth13361() { }
+    public void meth13362() { }
+    public void meth13363() { }
+    public void meth13364() { }
+    public void meth13365() { }
+    public void meth13366() { }
+    public void meth13367() { }
+    public void meth13368() { }
+    public void meth13369() { }
+    public void meth13370() { }
+    public void meth13371() { }
+    public void meth13372() { }
+    public void meth13373() { }
+    public void meth13374() { }
+    public void meth13375() { }
+    public void meth13376() { }
+    public void meth13377() { }
+    public void meth13378() { }
+    public void meth13379() { }
+    public void meth13380() { }
+    public void meth13381() { }
+    public void meth13382() { }
+    public void meth13383() { }
+    public void meth13384() { }
+    public void meth13385() { }
+    public void meth13386() { }
+    public void meth13387() { }
+    public void meth13388() { }
+    public void meth13389() { }
+    public void meth13390() { }
+    public void meth13391() { }
+    public void meth13392() { }
+    public void meth13393() { }
+    public void meth13394() { }
+    public void meth13395() { }
+    public void meth13396() { }
+    public void meth13397() { }
+    public void meth13398() { }
+    public void meth13399() { }
+    public void meth13400() { }
+    public void meth13401() { }
+    public void meth13402() { }
+    public void meth13403() { }
+    public void meth13404() { }
+    public void meth13405() { }
+    public void meth13406() { }
+    public void meth13407() { }
+    public void meth13408() { }
+    public void meth13409() { }
+    public void meth13410() { }
+    public void meth13411() { }
+    public void meth13412() { }
+    public void meth13413() { }
+    public void meth13414() { }
+    public void meth13415() { }
+    public void meth13416() { }
+    public void meth13417() { }
+    public void meth13418() { }
+    public void meth13419() { }
+    public void meth13420() { }
+    public void meth13421() { }
+    public void meth13422() { }
+    public void meth13423() { }
+    public void meth13424() { }
+    public void meth13425() { }
+    public void meth13426() { }
+    public void meth13427() { }
+    public void meth13428() { }
+    public void meth13429() { }
+    public void meth13430() { }
+    public void meth13431() { }
+    public void meth13432() { }
+    public void meth13433() { }
+    public void meth13434() { }
+    public void meth13435() { }
+    public void meth13436() { }
+    public void meth13437() { }
+    public void meth13438() { }
+    public void meth13439() { }
+    public void meth13440() { }
+    public void meth13441() { }
+    public void meth13442() { }
+    public void meth13443() { }
+    public void meth13444() { }
+    public void meth13445() { }
+    public void meth13446() { }
+    public void meth13447() { }
+    public void meth13448() { }
+    public void meth13449() { }
+    public void meth13450() { }
+    public void meth13451() { }
+    public void meth13452() { }
+    public void meth13453() { }
+    public void meth13454() { }
+    public void meth13455() { }
+    public void meth13456() { }
+    public void meth13457() { }
+    public void meth13458() { }
+    public void meth13459() { }
+    public void meth13460() { }
+    public void meth13461() { }
+    public void meth13462() { }
+    public void meth13463() { }
+    public void meth13464() { }
+    public void meth13465() { }
+    public void meth13466() { }
+    public void meth13467() { }
+    public void meth13468() { }
+    public void meth13469() { }
+    public void meth13470() { }
+    public void meth13471() { }
+    public void meth13472() { }
+    public void meth13473() { }
+    public void meth13474() { }
+    public void meth13475() { }
+    public void meth13476() { }
+    public void meth13477() { }
+    public void meth13478() { }
+    public void meth13479() { }
+    public void meth13480() { }
+    public void meth13481() { }
+    public void meth13482() { }
+    public void meth13483() { }
+    public void meth13484() { }
+    public void meth13485() { }
+    public void meth13486() { }
+    public void meth13487() { }
+    public void meth13488() { }
+    public void meth13489() { }
+    public void meth13490() { }
+    public void meth13491() { }
+    public void meth13492() { }
+    public void meth13493() { }
+    public void meth13494() { }
+    public void meth13495() { }
+    public void meth13496() { }
+    public void meth13497() { }
+    public void meth13498() { }
+    public void meth13499() { }
+    public void meth13500() { }
+    public void meth13501() { }
+    public void meth13502() { }
+    public void meth13503() { }
+    public void meth13504() { }
+    public void meth13505() { }
+    public void meth13506() { }
+    public void meth13507() { }
+    public void meth13508() { }
+    public void meth13509() { }
+    public void meth13510() { }
+    public void meth13511() { }
+    public void meth13512() { }
+    public void meth13513() { }
+    public void meth13514() { }
+    public void meth13515() { }
+    public void meth13516() { }
+    public void meth13517() { }
+    public void meth13518() { }
+    public void meth13519() { }
+    public void meth13520() { }
+    public void meth13521() { }
+    public void meth13522() { }
+    public void meth13523() { }
+    public void meth13524() { }
+    public void meth13525() { }
+    public void meth13526() { }
+    public void meth13527() { }
+    public void meth13528() { }
+    public void meth13529() { }
+    public void meth13530() { }
+    public void meth13531() { }
+    public void meth13532() { }
+    public void meth13533() { }
+    public void meth13534() { }
+    public void meth13535() { }
+    public void meth13536() { }
+    public void meth13537() { }
+    public void meth13538() { }
+    public void meth13539() { }
+    public void meth13540() { }
+    public void meth13541() { }
+    public void meth13542() { }
+    public void meth13543() { }
+    public void meth13544() { }
+    public void meth13545() { }
+    public void meth13546() { }
+    public void meth13547() { }
+    public void meth13548() { }
+    public void meth13549() { }
+    public void meth13550() { }
+    public void meth13551() { }
+    public void meth13552() { }
+    public void meth13553() { }
+    public void meth13554() { }
+    public void meth13555() { }
+    public void meth13556() { }
+    public void meth13557() { }
+    public void meth13558() { }
+    public void meth13559() { }
+    public void meth13560() { }
+    public void meth13561() { }
+    public void meth13562() { }
+    public void meth13563() { }
+    public void meth13564() { }
+    public void meth13565() { }
+    public void meth13566() { }
+    public void meth13567() { }
+    public void meth13568() { }
+    public void meth13569() { }
+    public void meth13570() { }
+    public void meth13571() { }
+    public void meth13572() { }
+    public void meth13573() { }
+    public void meth13574() { }
+    public void meth13575() { }
+    public void meth13576() { }
+    public void meth13577() { }
+    public void meth13578() { }
+    public void meth13579() { }
+    public void meth13580() { }
+    public void meth13581() { }
+    public void meth13582() { }
+    public void meth13583() { }
+    public void meth13584() { }
+    public void meth13585() { }
+    public void meth13586() { }
+    public void meth13587() { }
+    public void meth13588() { }
+    public void meth13589() { }
+    public void meth13590() { }
+    public void meth13591() { }
+    public void meth13592() { }
+    public void meth13593() { }
+    public void meth13594() { }
+    public void meth13595() { }
+    public void meth13596() { }
+    public void meth13597() { }
+    public void meth13598() { }
+    public void meth13599() { }
+    public void meth13600() { }
+    public void meth13601() { }
+    public void meth13602() { }
+    public void meth13603() { }
+    public void meth13604() { }
+    public void meth13605() { }
+    public void meth13606() { }
+    public void meth13607() { }
+    public void meth13608() { }
+    public void meth13609() { }
+    public void meth13610() { }
+    public void meth13611() { }
+    public void meth13612() { }
+    public void meth13613() { }
+    public void meth13614() { }
+    public void meth13615() { }
+    public void meth13616() { }
+    public void meth13617() { }
+    public void meth13618() { }
+    public void meth13619() { }
+    public void meth13620() { }
+    public void meth13621() { }
+    public void meth13622() { }
+    public void meth13623() { }
+    public void meth13624() { }
+    public void meth13625() { }
+    public void meth13626() { }
+    public void meth13627() { }
+    public void meth13628() { }
+    public void meth13629() { }
+    public void meth13630() { }
+    public void meth13631() { }
+    public void meth13632() { }
+    public void meth13633() { }
+    public void meth13634() { }
+    public void meth13635() { }
+    public void meth13636() { }
+    public void meth13637() { }
+    public void meth13638() { }
+    public void meth13639() { }
+    public void meth13640() { }
+    public void meth13641() { }
+    public void meth13642() { }
+    public void meth13643() { }
+    public void meth13644() { }
+    public void meth13645() { }
+    public void meth13646() { }
+    public void meth13647() { }
+    public void meth13648() { }
+    public void meth13649() { }
+    public void meth13650() { }
+    public void meth13651() { }
+    public void meth13652() { }
+    public void meth13653() { }
+    public void meth13654() { }
+    public void meth13655() { }
+    public void meth13656() { }
+    public void meth13657() { }
+    public void meth13658() { }
+    public void meth13659() { }
+    public void meth13660() { }
+    public void meth13661() { }
+    public void meth13662() { }
+    public void meth13663() { }
+    public void meth13664() { }
+    public void meth13665() { }
+    public void meth13666() { }
+    public void meth13667() { }
+    public void meth13668() { }
+    public void meth13669() { }
+    public void meth13670() { }
+    public void meth13671() { }
+    public void meth13672() { }
+    public void meth13673() { }
+    public void meth13674() { }
+    public void meth13675() { }
+    public void meth13676() { }
+    public void meth13677() { }
+    public void meth13678() { }
+    public void meth13679() { }
+    public void meth13680() { }
+    public void meth13681() { }
+    public void meth13682() { }
+    public void meth13683() { }
+    public void meth13684() { }
+    public void meth13685() { }
+    public void meth13686() { }
+    public void meth13687() { }
+    public void meth13688() { }
+    public void meth13689() { }
+    public void meth13690() { }
+    public void meth13691() { }
+    public void meth13692() { }
+    public void meth13693() { }
+    public void meth13694() { }
+    public void meth13695() { }
+    public void meth13696() { }
+    public void meth13697() { }
+    public void meth13698() { }
+    public void meth13699() { }
+    public void meth13700() { }
+    public void meth13701() { }
+    public void meth13702() { }
+    public void meth13703() { }
+    public void meth13704() { }
+    public void meth13705() { }
+    public void meth13706() { }
+    public void meth13707() { }
+    public void meth13708() { }
+    public void meth13709() { }
+    public void meth13710() { }
+    public void meth13711() { }
+    public void meth13712() { }
+    public void meth13713() { }
+    public void meth13714() { }
+    public void meth13715() { }
+    public void meth13716() { }
+    public void meth13717() { }
+    public void meth13718() { }
+    public void meth13719() { }
+    public void meth13720() { }
+    public void meth13721() { }
+    public void meth13722() { }
+    public void meth13723() { }
+    public void meth13724() { }
+    public void meth13725() { }
+    public void meth13726() { }
+    public void meth13727() { }
+    public void meth13728() { }
+    public void meth13729() { }
+    public void meth13730() { }
+    public void meth13731() { }
+    public void meth13732() { }
+    public void meth13733() { }
+    public void meth13734() { }
+    public void meth13735() { }
+    public void meth13736() { }
+    public void meth13737() { }
+    public void meth13738() { }
+    public void meth13739() { }
+    public void meth13740() { }
+    public void meth13741() { }
+    public void meth13742() { }
+    public void meth13743() { }
+    public void meth13744() { }
+    public void meth13745() { }
+    public void meth13746() { }
+    public void meth13747() { }
+    public void meth13748() { }
+    public void meth13749() { }
+    public void meth13750() { }
+    public void meth13751() { }
+    public void meth13752() { }
+    public void meth13753() { }
+    public void meth13754() { }
+    public void meth13755() { }
+    public void meth13756() { }
+    public void meth13757() { }
+    public void meth13758() { }
+    public void meth13759() { }
+    public void meth13760() { }
+    public void meth13761() { }
+    public void meth13762() { }
+    public void meth13763() { }
+    public void meth13764() { }
+    public void meth13765() { }
+    public void meth13766() { }
+    public void meth13767() { }
+    public void meth13768() { }
+    public void meth13769() { }
+    public void meth13770() { }
+    public void meth13771() { }
+    public void meth13772() { }
+    public void meth13773() { }
+    public void meth13774() { }
+    public void meth13775() { }
+    public void meth13776() { }
+    public void meth13777() { }
+    public void meth13778() { }
+    public void meth13779() { }
+    public void meth13780() { }
+    public void meth13781() { }
+    public void meth13782() { }
+    public void meth13783() { }
+    public void meth13784() { }
+    public void meth13785() { }
+    public void meth13786() { }
+    public void meth13787() { }
+    public void meth13788() { }
+    public void meth13789() { }
+    public void meth13790() { }
+    public void meth13791() { }
+    public void meth13792() { }
+    public void meth13793() { }
+    public void meth13794() { }
+    public void meth13795() { }
+    public void meth13796() { }
+    public void meth13797() { }
+    public void meth13798() { }
+    public void meth13799() { }
+    public void meth13800() { }
+    public void meth13801() { }
+    public void meth13802() { }
+    public void meth13803() { }
+    public void meth13804() { }
+    public void meth13805() { }
+    public void meth13806() { }
+    public void meth13807() { }
+    public void meth13808() { }
+    public void meth13809() { }
+    public void meth13810() { }
+    public void meth13811() { }
+    public void meth13812() { }
+    public void meth13813() { }
+    public void meth13814() { }
+    public void meth13815() { }
+    public void meth13816() { }
+    public void meth13817() { }
+    public void meth13818() { }
+    public void meth13819() { }
+    public void meth13820() { }
+    public void meth13821() { }
+    public void meth13822() { }
+    public void meth13823() { }
+    public void meth13824() { }
+    public void meth13825() { }
+    public void meth13826() { }
+    public void meth13827() { }
+    public void meth13828() { }
+    public void meth13829() { }
+    public void meth13830() { }
+    public void meth13831() { }
+    public void meth13832() { }
+    public void meth13833() { }
+    public void meth13834() { }
+    public void meth13835() { }
+    public void meth13836() { }
+    public void meth13837() { }
+    public void meth13838() { }
+    public void meth13839() { }
+    public void meth13840() { }
+    public void meth13841() { }
+    public void meth13842() { }
+    public void meth13843() { }
+    public void meth13844() { }
+    public void meth13845() { }
+    public void meth13846() { }
+    public void meth13847() { }
+    public void meth13848() { }
+    public void meth13849() { }
+    public void meth13850() { }
+    public void meth13851() { }
+    public void meth13852() { }
+    public void meth13853() { }
+    public void meth13854() { }
+    public void meth13855() { }
+    public void meth13856() { }
+    public void meth13857() { }
+    public void meth13858() { }
+    public void meth13859() { }
+    public void meth13860() { }
+    public void meth13861() { }
+    public void meth13862() { }
+    public void meth13863() { }
+    public void meth13864() { }
+    public void meth13865() { }
+    public void meth13866() { }
+    public void meth13867() { }
+    public void meth13868() { }
+    public void meth13869() { }
+    public void meth13870() { }
+    public void meth13871() { }
+    public void meth13872() { }
+    public void meth13873() { }
+    public void meth13874() { }
+    public void meth13875() { }
+    public void meth13876() { }
+    public void meth13877() { }
+    public void meth13878() { }
+    public void meth13879() { }
+    public void meth13880() { }
+    public void meth13881() { }
+    public void meth13882() { }
+    public void meth13883() { }
+    public void meth13884() { }
+    public void meth13885() { }
+    public void meth13886() { }
+    public void meth13887() { }
+    public void meth13888() { }
+    public void meth13889() { }
+    public void meth13890() { }
+    public void meth13891() { }
+    public void meth13892() { }
+    public void meth13893() { }
+    public void meth13894() { }
+    public void meth13895() { }
+    public void meth13896() { }
+    public void meth13897() { }
+    public void meth13898() { }
+    public void meth13899() { }
+    public void meth13900() { }
+    public void meth13901() { }
+    public void meth13902() { }
+    public void meth13903() { }
+    public void meth13904() { }
+    public void meth13905() { }
+    public void meth13906() { }
+    public void meth13907() { }
+    public void meth13908() { }
+    public void meth13909() { }
+    public void meth13910() { }
+    public void meth13911() { }
+    public void meth13912() { }
+    public void meth13913() { }
+    public void meth13914() { }
+    public void meth13915() { }
+    public void meth13916() { }
+    public void meth13917() { }
+    public void meth13918() { }
+    public void meth13919() { }
+    public void meth13920() { }
+    public void meth13921() { }
+    public void meth13922() { }
+    public void meth13923() { }
+    public void meth13924() { }
+    public void meth13925() { }
+    public void meth13926() { }
+    public void meth13927() { }
+    public void meth13928() { }
+    public void meth13929() { }
+    public void meth13930() { }
+    public void meth13931() { }
+    public void meth13932() { }
+    public void meth13933() { }
+    public void meth13934() { }
+    public void meth13935() { }
+    public void meth13936() { }
+    public void meth13937() { }
+    public void meth13938() { }
+    public void meth13939() { }
+    public void meth13940() { }
+    public void meth13941() { }
+    public void meth13942() { }
+    public void meth13943() { }
+    public void meth13944() { }
+    public void meth13945() { }
+    public void meth13946() { }
+    public void meth13947() { }
+    public void meth13948() { }
+    public void meth13949() { }
+    public void meth13950() { }
+    public void meth13951() { }
+    public void meth13952() { }
+    public void meth13953() { }
+    public void meth13954() { }
+    public void meth13955() { }
+    public void meth13956() { }
+    public void meth13957() { }
+    public void meth13958() { }
+    public void meth13959() { }
+    public void meth13960() { }
+    public void meth13961() { }
+    public void meth13962() { }
+    public void meth13963() { }
+    public void meth13964() { }
+    public void meth13965() { }
+    public void meth13966() { }
+    public void meth13967() { }
+    public void meth13968() { }
+    public void meth13969() { }
+    public void meth13970() { }
+    public void meth13971() { }
+    public void meth13972() { }
+    public void meth13973() { }
+    public void meth13974() { }
+    public void meth13975() { }
+    public void meth13976() { }
+    public void meth13977() { }
+    public void meth13978() { }
+    public void meth13979() { }
+    public void meth13980() { }
+    public void meth13981() { }
+    public void meth13982() { }
+    public void meth13983() { }
+    public void meth13984() { }
+    public void meth13985() { }
+    public void meth13986() { }
+    public void meth13987() { }
+    public void meth13988() { }
+    public void meth13989() { }
+    public void meth13990() { }
+    public void meth13991() { }
+    public void meth13992() { }
+    public void meth13993() { }
+    public void meth13994() { }
+    public void meth13995() { }
+    public void meth13996() { }
+    public void meth13997() { }
+    public void meth13998() { }
+    public void meth13999() { }
+    public void meth14000() { }
+    public void meth14001() { }
+    public void meth14002() { }
+    public void meth14003() { }
+    public void meth14004() { }
+    public void meth14005() { }
+    public void meth14006() { }
+    public void meth14007() { }
+    public void meth14008() { }
+    public void meth14009() { }
+    public void meth14010() { }
+    public void meth14011() { }
+    public void meth14012() { }
+    public void meth14013() { }
+    public void meth14014() { }
+    public void meth14015() { }
+    public void meth14016() { }
+    public void meth14017() { }
+    public void meth14018() { }
+    public void meth14019() { }
+    public void meth14020() { }
+    public void meth14021() { }
+    public void meth14022() { }
+    public void meth14023() { }
+    public void meth14024() { }
+    public void meth14025() { }
+    public void meth14026() { }
+    public void meth14027() { }
+    public void meth14028() { }
+    public void meth14029() { }
+    public void meth14030() { }
+    public void meth14031() { }
+    public void meth14032() { }
+    public void meth14033() { }
+    public void meth14034() { }
+    public void meth14035() { }
+    public void meth14036() { }
+    public void meth14037() { }
+    public void meth14038() { }
+    public void meth14039() { }
+    public void meth14040() { }
+    public void meth14041() { }
+    public void meth14042() { }
+    public void meth14043() { }
+    public void meth14044() { }
+    public void meth14045() { }
+    public void meth14046() { }
+    public void meth14047() { }
+    public void meth14048() { }
+    public void meth14049() { }
+    public void meth14050() { }
+    public void meth14051() { }
+    public void meth14052() { }
+    public void meth14053() { }
+    public void meth14054() { }
+    public void meth14055() { }
+    public void meth14056() { }
+    public void meth14057() { }
+    public void meth14058() { }
+    public void meth14059() { }
+    public void meth14060() { }
+    public void meth14061() { }
+    public void meth14062() { }
+    public void meth14063() { }
+    public void meth14064() { }
+    public void meth14065() { }
+    public void meth14066() { }
+    public void meth14067() { }
+    public void meth14068() { }
+    public void meth14069() { }
+    public void meth14070() { }
+    public void meth14071() { }
+    public void meth14072() { }
+    public void meth14073() { }
+    public void meth14074() { }
+    public void meth14075() { }
+    public void meth14076() { }
+    public void meth14077() { }
+    public void meth14078() { }
+    public void meth14079() { }
+    public void meth14080() { }
+    public void meth14081() { }
+    public void meth14082() { }
+    public void meth14083() { }
+    public void meth14084() { }
+    public void meth14085() { }
+    public void meth14086() { }
+    public void meth14087() { }
+    public void meth14088() { }
+    public void meth14089() { }
+    public void meth14090() { }
+    public void meth14091() { }
+    public void meth14092() { }
+    public void meth14093() { }
+    public void meth14094() { }
+    public void meth14095() { }
+    public void meth14096() { }
+    public void meth14097() { }
+    public void meth14098() { }
+    public void meth14099() { }
+    public void meth14100() { }
+    public void meth14101() { }
+    public void meth14102() { }
+    public void meth14103() { }
+    public void meth14104() { }
+    public void meth14105() { }
+    public void meth14106() { }
+    public void meth14107() { }
+    public void meth14108() { }
+    public void meth14109() { }
+    public void meth14110() { }
+    public void meth14111() { }
+    public void meth14112() { }
+    public void meth14113() { }
+    public void meth14114() { }
+    public void meth14115() { }
+    public void meth14116() { }
+    public void meth14117() { }
+    public void meth14118() { }
+    public void meth14119() { }
+    public void meth14120() { }
+    public void meth14121() { }
+    public void meth14122() { }
+    public void meth14123() { }
+    public void meth14124() { }
+    public void meth14125() { }
+    public void meth14126() { }
+    public void meth14127() { }
+    public void meth14128() { }
+    public void meth14129() { }
+    public void meth14130() { }
+    public void meth14131() { }
+    public void meth14132() { }
+    public void meth14133() { }
+    public void meth14134() { }
+    public void meth14135() { }
+    public void meth14136() { }
+    public void meth14137() { }
+    public void meth14138() { }
+    public void meth14139() { }
+    public void meth14140() { }
+    public void meth14141() { }
+    public void meth14142() { }
+    public void meth14143() { }
+    public void meth14144() { }
+    public void meth14145() { }
+    public void meth14146() { }
+    public void meth14147() { }
+    public void meth14148() { }
+    public void meth14149() { }
+    public void meth14150() { }
+    public void meth14151() { }
+    public void meth14152() { }
+    public void meth14153() { }
+    public void meth14154() { }
+    public void meth14155() { }
+    public void meth14156() { }
+    public void meth14157() { }
+    public void meth14158() { }
+    public void meth14159() { }
+    public void meth14160() { }
+    public void meth14161() { }
+    public void meth14162() { }
+    public void meth14163() { }
+    public void meth14164() { }
+    public void meth14165() { }
+    public void meth14166() { }
+    public void meth14167() { }
+    public void meth14168() { }
+    public void meth14169() { }
+    public void meth14170() { }
+    public void meth14171() { }
+    public void meth14172() { }
+    public void meth14173() { }
+    public void meth14174() { }
+    public void meth14175() { }
+    public void meth14176() { }
+    public void meth14177() { }
+    public void meth14178() { }
+    public void meth14179() { }
+    public void meth14180() { }
+    public void meth14181() { }
+    public void meth14182() { }
+    public void meth14183() { }
+    public void meth14184() { }
+    public void meth14185() { }
+    public void meth14186() { }
+    public void meth14187() { }
+    public void meth14188() { }
+    public void meth14189() { }
+    public void meth14190() { }
+    public void meth14191() { }
+    public void meth14192() { }
+    public void meth14193() { }
+    public void meth14194() { }
+    public void meth14195() { }
+    public void meth14196() { }
+    public void meth14197() { }
+    public void meth14198() { }
+    public void meth14199() { }
+    public void meth14200() { }
+    public void meth14201() { }
+    public void meth14202() { }
+    public void meth14203() { }
+    public void meth14204() { }
+    public void meth14205() { }
+    public void meth14206() { }
+    public void meth14207() { }
+    public void meth14208() { }
+    public void meth14209() { }
+    public void meth14210() { }
+    public void meth14211() { }
+    public void meth14212() { }
+    public void meth14213() { }
+    public void meth14214() { }
+    public void meth14215() { }
+    public void meth14216() { }
+    public void meth14217() { }
+    public void meth14218() { }
+    public void meth14219() { }
+    public void meth14220() { }
+    public void meth14221() { }
+    public void meth14222() { }
+    public void meth14223() { }
+    public void meth14224() { }
+    public void meth14225() { }
+    public void meth14226() { }
+    public void meth14227() { }
+    public void meth14228() { }
+    public void meth14229() { }
+    public void meth14230() { }
+    public void meth14231() { }
+    public void meth14232() { }
+    public void meth14233() { }
+    public void meth14234() { }
+    public void meth14235() { }
+    public void meth14236() { }
+    public void meth14237() { }
+    public void meth14238() { }
+    public void meth14239() { }
+    public void meth14240() { }
+    public void meth14241() { }
+    public void meth14242() { }
+    public void meth14243() { }
+    public void meth14244() { }
+    public void meth14245() { }
+    public void meth14246() { }
+    public void meth14247() { }
+    public void meth14248() { }
+    public void meth14249() { }
+    public void meth14250() { }
+    public void meth14251() { }
+    public void meth14252() { }
+    public void meth14253() { }
+    public void meth14254() { }
+    public void meth14255() { }
+    public void meth14256() { }
+    public void meth14257() { }
+    public void meth14258() { }
+    public void meth14259() { }
+    public void meth14260() { }
+    public void meth14261() { }
+    public void meth14262() { }
+    public void meth14263() { }
+    public void meth14264() { }
+    public void meth14265() { }
+    public void meth14266() { }
+    public void meth14267() { }
+    public void meth14268() { }
+    public void meth14269() { }
+    public void meth14270() { }
+    public void meth14271() { }
+    public void meth14272() { }
+    public void meth14273() { }
+    public void meth14274() { }
+    public void meth14275() { }
+    public void meth14276() { }
+    public void meth14277() { }
+    public void meth14278() { }
+    public void meth14279() { }
+    public void meth14280() { }
+    public void meth14281() { }
+    public void meth14282() { }
+    public void meth14283() { }
+    public void meth14284() { }
+    public void meth14285() { }
+    public void meth14286() { }
+    public void meth14287() { }
+    public void meth14288() { }
+    public void meth14289() { }
+    public void meth14290() { }
+    public void meth14291() { }
+    public void meth14292() { }
+    public void meth14293() { }
+    public void meth14294() { }
+    public void meth14295() { }
+    public void meth14296() { }
+    public void meth14297() { }
+    public void meth14298() { }
+    public void meth14299() { }
+    public void meth14300() { }
+    public void meth14301() { }
+    public void meth14302() { }
+    public void meth14303() { }
+    public void meth14304() { }
+    public void meth14305() { }
+    public void meth14306() { }
+    public void meth14307() { }
+    public void meth14308() { }
+    public void meth14309() { }
+    public void meth14310() { }
+    public void meth14311() { }
+    public void meth14312() { }
+    public void meth14313() { }
+    public void meth14314() { }
+    public void meth14315() { }
+    public void meth14316() { }
+    public void meth14317() { }
+    public void meth14318() { }
+    public void meth14319() { }
+    public void meth14320() { }
+    public void meth14321() { }
+    public void meth14322() { }
+    public void meth14323() { }
+    public void meth14324() { }
+    public void meth14325() { }
+    public void meth14326() { }
+    public void meth14327() { }
+    public void meth14328() { }
+    public void meth14329() { }
+    public void meth14330() { }
+    public void meth14331() { }
+    public void meth14332() { }
+    public void meth14333() { }
+    public void meth14334() { }
+    public void meth14335() { }
+    public void meth14336() { }
+    public void meth14337() { }
+    public void meth14338() { }
+    public void meth14339() { }
+    public void meth14340() { }
+    public void meth14341() { }
+    public void meth14342() { }
+    public void meth14343() { }
+    public void meth14344() { }
+    public void meth14345() { }
+    public void meth14346() { }
+    public void meth14347() { }
+    public void meth14348() { }
+    public void meth14349() { }
+    public void meth14350() { }
+    public void meth14351() { }
+    public void meth14352() { }
+    public void meth14353() { }
+    public void meth14354() { }
+    public void meth14355() { }
+    public void meth14356() { }
+    public void meth14357() { }
+    public void meth14358() { }
+    public void meth14359() { }
+    public void meth14360() { }
+    public void meth14361() { }
+    public void meth14362() { }
+    public void meth14363() { }
+    public void meth14364() { }
+    public void meth14365() { }
+    public void meth14366() { }
+    public void meth14367() { }
+    public void meth14368() { }
+    public void meth14369() { }
+    public void meth14370() { }
+    public void meth14371() { }
+    public void meth14372() { }
+    public void meth14373() { }
+    public void meth14374() { }
+    public void meth14375() { }
+    public void meth14376() { }
+    public void meth14377() { }
+    public void meth14378() { }
+    public void meth14379() { }
+    public void meth14380() { }
+    public void meth14381() { }
+    public void meth14382() { }
+    public void meth14383() { }
+    public void meth14384() { }
+    public void meth14385() { }
+    public void meth14386() { }
+    public void meth14387() { }
+    public void meth14388() { }
+    public void meth14389() { }
+    public void meth14390() { }
+    public void meth14391() { }
+    public void meth14392() { }
+    public void meth14393() { }
+    public void meth14394() { }
+    public void meth14395() { }
+    public void meth14396() { }
+    public void meth14397() { }
+    public void meth14398() { }
+    public void meth14399() { }
+    public void meth14400() { }
+    public void meth14401() { }
+    public void meth14402() { }
+    public void meth14403() { }
+    public void meth14404() { }
+    public void meth14405() { }
+    public void meth14406() { }
+    public void meth14407() { }
+    public void meth14408() { }
+    public void meth14409() { }
+    public void meth14410() { }
+    public void meth14411() { }
+    public void meth14412() { }
+    public void meth14413() { }
+    public void meth14414() { }
+    public void meth14415() { }
+    public void meth14416() { }
+    public void meth14417() { }
+    public void meth14418() { }
+    public void meth14419() { }
+    public void meth14420() { }
+    public void meth14421() { }
+    public void meth14422() { }
+    public void meth14423() { }
+    public void meth14424() { }
+    public void meth14425() { }
+    public void meth14426() { }
+    public void meth14427() { }
+    public void meth14428() { }
+    public void meth14429() { }
+    public void meth14430() { }
+    public void meth14431() { }
+    public void meth14432() { }
+    public void meth14433() { }
+    public void meth14434() { }
+    public void meth14435() { }
+    public void meth14436() { }
+    public void meth14437() { }
+    public void meth14438() { }
+    public void meth14439() { }
+    public void meth14440() { }
+    public void meth14441() { }
+    public void meth14442() { }
+    public void meth14443() { }
+    public void meth14444() { }
+    public void meth14445() { }
+    public void meth14446() { }
+    public void meth14447() { }
+    public void meth14448() { }
+    public void meth14449() { }
+    public void meth14450() { }
+    public void meth14451() { }
+    public void meth14452() { }
+    public void meth14453() { }
+    public void meth14454() { }
+    public void meth14455() { }
+    public void meth14456() { }
+    public void meth14457() { }
+    public void meth14458() { }
+    public void meth14459() { }
+    public void meth14460() { }
+    public void meth14461() { }
+    public void meth14462() { }
+    public void meth14463() { }
+    public void meth14464() { }
+    public void meth14465() { }
+    public void meth14466() { }
+    public void meth14467() { }
+    public void meth14468() { }
+    public void meth14469() { }
+    public void meth14470() { }
+    public void meth14471() { }
+    public void meth14472() { }
+    public void meth14473() { }
+    public void meth14474() { }
+    public void meth14475() { }
+    public void meth14476() { }
+    public void meth14477() { }
+    public void meth14478() { }
+    public void meth14479() { }
+    public void meth14480() { }
+    public void meth14481() { }
+    public void meth14482() { }
+    public void meth14483() { }
+    public void meth14484() { }
+    public void meth14485() { }
+    public void meth14486() { }
+    public void meth14487() { }
+    public void meth14488() { }
+    public void meth14489() { }
+    public void meth14490() { }
+    public void meth14491() { }
+    public void meth14492() { }
+    public void meth14493() { }
+    public void meth14494() { }
+    public void meth14495() { }
+    public void meth14496() { }
+    public void meth14497() { }
+    public void meth14498() { }
+    public void meth14499() { }
+    public void meth14500() { }
+    public void meth14501() { }
+    public void meth14502() { }
+    public void meth14503() { }
+    public void meth14504() { }
+    public void meth14505() { }
+    public void meth14506() { }
+    public void meth14507() { }
+    public void meth14508() { }
+    public void meth14509() { }
+    public void meth14510() { }
+    public void meth14511() { }
+    public void meth14512() { }
+    public void meth14513() { }
+    public void meth14514() { }
+    public void meth14515() { }
+    public void meth14516() { }
+    public void meth14517() { }
+    public void meth14518() { }
+    public void meth14519() { }
+    public void meth14520() { }
+    public void meth14521() { }
+    public void meth14522() { }
+    public void meth14523() { }
+    public void meth14524() { }
+    public void meth14525() { }
+    public void meth14526() { }
+    public void meth14527() { }
+    public void meth14528() { }
+    public void meth14529() { }
+    public void meth14530() { }
+    public void meth14531() { }
+    public void meth14532() { }
+    public void meth14533() { }
+    public void meth14534() { }
+    public void meth14535() { }
+    public void meth14536() { }
+    public void meth14537() { }
+    public void meth14538() { }
+    public void meth14539() { }
+    public void meth14540() { }
+    public void meth14541() { }
+    public void meth14542() { }
+    public void meth14543() { }
+    public void meth14544() { }
+    public void meth14545() { }
+    public void meth14546() { }
+    public void meth14547() { }
+    public void meth14548() { }
+    public void meth14549() { }
+    public void meth14550() { }
+    public void meth14551() { }
+    public void meth14552() { }
+    public void meth14553() { }
+    public void meth14554() { }
+    public void meth14555() { }
+    public void meth14556() { }
+    public void meth14557() { }
+    public void meth14558() { }
+    public void meth14559() { }
+    public void meth14560() { }
+    public void meth14561() { }
+    public void meth14562() { }
+    public void meth14563() { }
+    public void meth14564() { }
+    public void meth14565() { }
+    public void meth14566() { }
+    public void meth14567() { }
+    public void meth14568() { }
+    public void meth14569() { }
+    public void meth14570() { }
+    public void meth14571() { }
+    public void meth14572() { }
+    public void meth14573() { }
+    public void meth14574() { }
+    public void meth14575() { }
+    public void meth14576() { }
+    public void meth14577() { }
+    public void meth14578() { }
+    public void meth14579() { }
+    public void meth14580() { }
+    public void meth14581() { }
+    public void meth14582() { }
+    public void meth14583() { }
+    public void meth14584() { }
+    public void meth14585() { }
+    public void meth14586() { }
+    public void meth14587() { }
+    public void meth14588() { }
+    public void meth14589() { }
+    public void meth14590() { }
+    public void meth14591() { }
+    public void meth14592() { }
+    public void meth14593() { }
+    public void meth14594() { }
+    public void meth14595() { }
+    public void meth14596() { }
+    public void meth14597() { }
+    public void meth14598() { }
+    public void meth14599() { }
+    public void meth14600() { }
+    public void meth14601() { }
+    public void meth14602() { }
+    public void meth14603() { }
+    public void meth14604() { }
+    public void meth14605() { }
+    public void meth14606() { }
+    public void meth14607() { }
+    public void meth14608() { }
+    public void meth14609() { }
+    public void meth14610() { }
+    public void meth14611() { }
+    public void meth14612() { }
+    public void meth14613() { }
+    public void meth14614() { }
+    public void meth14615() { }
+    public void meth14616() { }
+    public void meth14617() { }
+    public void meth14618() { }
+    public void meth14619() { }
+    public void meth14620() { }
+    public void meth14621() { }
+    public void meth14622() { }
+    public void meth14623() { }
+    public void meth14624() { }
+    public void meth14625() { }
+    public void meth14626() { }
+    public void meth14627() { }
+    public void meth14628() { }
+    public void meth14629() { }
+    public void meth14630() { }
+    public void meth14631() { }
+    public void meth14632() { }
+    public void meth14633() { }
+    public void meth14634() { }
+    public void meth14635() { }
+    public void meth14636() { }
+    public void meth14637() { }
+    public void meth14638() { }
+    public void meth14639() { }
+    public void meth14640() { }
+    public void meth14641() { }
+    public void meth14642() { }
+    public void meth14643() { }
+    public void meth14644() { }
+    public void meth14645() { }
+    public void meth14646() { }
+    public void meth14647() { }
+    public void meth14648() { }
+    public void meth14649() { }
+    public void meth14650() { }
+    public void meth14651() { }
+    public void meth14652() { }
+    public void meth14653() { }
+    public void meth14654() { }
+    public void meth14655() { }
+    public void meth14656() { }
+    public void meth14657() { }
+    public void meth14658() { }
+    public void meth14659() { }
+    public void meth14660() { }
+    public void meth14661() { }
+    public void meth14662() { }
+    public void meth14663() { }
+    public void meth14664() { }
+    public void meth14665() { }
+    public void meth14666() { }
+    public void meth14667() { }
+    public void meth14668() { }
+    public void meth14669() { }
+    public void meth14670() { }
+    public void meth14671() { }
+    public void meth14672() { }
+    public void meth14673() { }
+    public void meth14674() { }
+    public void meth14675() { }
+    public void meth14676() { }
+    public void meth14677() { }
+    public void meth14678() { }
+    public void meth14679() { }
+    public void meth14680() { }
+    public void meth14681() { }
+    public void meth14682() { }
+    public void meth14683() { }
+    public void meth14684() { }
+    public void meth14685() { }
+    public void meth14686() { }
+    public void meth14687() { }
+    public void meth14688() { }
+    public void meth14689() { }
+    public void meth14690() { }
+    public void meth14691() { }
+    public void meth14692() { }
+    public void meth14693() { }
+    public void meth14694() { }
+    public void meth14695() { }
+    public void meth14696() { }
+    public void meth14697() { }
+    public void meth14698() { }
+    public void meth14699() { }
+    public void meth14700() { }
+    public void meth14701() { }
+    public void meth14702() { }
+    public void meth14703() { }
+    public void meth14704() { }
+    public void meth14705() { }
+    public void meth14706() { }
+    public void meth14707() { }
+    public void meth14708() { }
+    public void meth14709() { }
+    public void meth14710() { }
+    public void meth14711() { }
+    public void meth14712() { }
+    public void meth14713() { }
+    public void meth14714() { }
+    public void meth14715() { }
+    public void meth14716() { }
+    public void meth14717() { }
+    public void meth14718() { }
+    public void meth14719() { }
+    public void meth14720() { }
+    public void meth14721() { }
+    public void meth14722() { }
+    public void meth14723() { }
+    public void meth14724() { }
+    public void meth14725() { }
+    public void meth14726() { }
+    public void meth14727() { }
+    public void meth14728() { }
+    public void meth14729() { }
+    public void meth14730() { }
+    public void meth14731() { }
+    public void meth14732() { }
+    public void meth14733() { }
+    public void meth14734() { }
+    public void meth14735() { }
+    public void meth14736() { }
+    public void meth14737() { }
+    public void meth14738() { }
+    public void meth14739() { }
+    public void meth14740() { }
+    public void meth14741() { }
+    public void meth14742() { }
+    public void meth14743() { }
+    public void meth14744() { }
+    public void meth14745() { }
+    public void meth14746() { }
+    public void meth14747() { }
+    public void meth14748() { }
+    public void meth14749() { }
+    public void meth14750() { }
+    public void meth14751() { }
+    public void meth14752() { }
+    public void meth14753() { }
+    public void meth14754() { }
+    public void meth14755() { }
+    public void meth14756() { }
+    public void meth14757() { }
+    public void meth14758() { }
+    public void meth14759() { }
+    public void meth14760() { }
+    public void meth14761() { }
+    public void meth14762() { }
+    public void meth14763() { }
+    public void meth14764() { }
+    public void meth14765() { }
+    public void meth14766() { }
+    public void meth14767() { }
+    public void meth14768() { }
+    public void meth14769() { }
+    public void meth14770() { }
+    public void meth14771() { }
+    public void meth14772() { }
+    public void meth14773() { }
+    public void meth14774() { }
+    public void meth14775() { }
+    public void meth14776() { }
+    public void meth14777() { }
+    public void meth14778() { }
+    public void meth14779() { }
+    public void meth14780() { }
+    public void meth14781() { }
+    public void meth14782() { }
+    public void meth14783() { }
+    public void meth14784() { }
+    public void meth14785() { }
+    public void meth14786() { }
+    public void meth14787() { }
+    public void meth14788() { }
+    public void meth14789() { }
+    public void meth14790() { }
+    public void meth14791() { }
+    public void meth14792() { }
+    public void meth14793() { }
+    public void meth14794() { }
+    public void meth14795() { }
+    public void meth14796() { }
+    public void meth14797() { }
+    public void meth14798() { }
+    public void meth14799() { }
+    public void meth14800() { }
+    public void meth14801() { }
+    public void meth14802() { }
+    public void meth14803() { }
+    public void meth14804() { }
+    public void meth14805() { }
+    public void meth14806() { }
+    public void meth14807() { }
+    public void meth14808() { }
+    public void meth14809() { }
+    public void meth14810() { }
+    public void meth14811() { }
+    public void meth14812() { }
+    public void meth14813() { }
+    public void meth14814() { }
+    public void meth14815() { }
+    public void meth14816() { }
+    public void meth14817() { }
+    public void meth14818() { }
+    public void meth14819() { }
+    public void meth14820() { }
+    public void meth14821() { }
+    public void meth14822() { }
+    public void meth14823() { }
+    public void meth14824() { }
+    public void meth14825() { }
+    public void meth14826() { }
+    public void meth14827() { }
+    public void meth14828() { }
+    public void meth14829() { }
+    public void meth14830() { }
+    public void meth14831() { }
+    public void meth14832() { }
+    public void meth14833() { }
+    public void meth14834() { }
+    public void meth14835() { }
+    public void meth14836() { }
+    public void meth14837() { }
+    public void meth14838() { }
+    public void meth14839() { }
+    public void meth14840() { }
+    public void meth14841() { }
+    public void meth14842() { }
+    public void meth14843() { }
+    public void meth14844() { }
+    public void meth14845() { }
+    public void meth14846() { }
+    public void meth14847() { }
+    public void meth14848() { }
+    public void meth14849() { }
+    public void meth14850() { }
+    public void meth14851() { }
+    public void meth14852() { }
+    public void meth14853() { }
+    public void meth14854() { }
+    public void meth14855() { }
+    public void meth14856() { }
+    public void meth14857() { }
+    public void meth14858() { }
+    public void meth14859() { }
+    public void meth14860() { }
+    public void meth14861() { }
+    public void meth14862() { }
+    public void meth14863() { }
+    public void meth14864() { }
+    public void meth14865() { }
+    public void meth14866() { }
+    public void meth14867() { }
+    public void meth14868() { }
+    public void meth14869() { }
+    public void meth14870() { }
+    public void meth14871() { }
+    public void meth14872() { }
+    public void meth14873() { }
+    public void meth14874() { }
+    public void meth14875() { }
+    public void meth14876() { }
+    public void meth14877() { }
+    public void meth14878() { }
+    public void meth14879() { }
+    public void meth14880() { }
+    public void meth14881() { }
+    public void meth14882() { }
+    public void meth14883() { }
+    public void meth14884() { }
+    public void meth14885() { }
+    public void meth14886() { }
+    public void meth14887() { }
+    public void meth14888() { }
+    public void meth14889() { }
+    public void meth14890() { }
+    public void meth14891() { }
+    public void meth14892() { }
+    public void meth14893() { }
+    public void meth14894() { }
+    public void meth14895() { }
+    public void meth14896() { }
+    public void meth14897() { }
+    public void meth14898() { }
+    public void meth14899() { }
+    public void meth14900() { }
+    public void meth14901() { }
+    public void meth14902() { }
+    public void meth14903() { }
+    public void meth14904() { }
+    public void meth14905() { }
+    public void meth14906() { }
+    public void meth14907() { }
+    public void meth14908() { }
+    public void meth14909() { }
+    public void meth14910() { }
+    public void meth14911() { }
+    public void meth14912() { }
+    public void meth14913() { }
+    public void meth14914() { }
+    public void meth14915() { }
+    public void meth14916() { }
+    public void meth14917() { }
+    public void meth14918() { }
+    public void meth14919() { }
+    public void meth14920() { }
+    public void meth14921() { }
+    public void meth14922() { }
+    public void meth14923() { }
+    public void meth14924() { }
+    public void meth14925() { }
+    public void meth14926() { }
+    public void meth14927() { }
+    public void meth14928() { }
+    public void meth14929() { }
+    public void meth14930() { }
+    public void meth14931() { }
+    public void meth14932() { }
+    public void meth14933() { }
+    public void meth14934() { }
+    public void meth14935() { }
+    public void meth14936() { }
+    public void meth14937() { }
+    public void meth14938() { }
+    public void meth14939() { }
+    public void meth14940() { }
+    public void meth14941() { }
+    public void meth14942() { }
+    public void meth14943() { }
+    public void meth14944() { }
+    public void meth14945() { }
+    public void meth14946() { }
+    public void meth14947() { }
+    public void meth14948() { }
+    public void meth14949() { }
+    public void meth14950() { }
+    public void meth14951() { }
+    public void meth14952() { }
+    public void meth14953() { }
+    public void meth14954() { }
+    public void meth14955() { }
+    public void meth14956() { }
+    public void meth14957() { }
+    public void meth14958() { }
+    public void meth14959() { }
+    public void meth14960() { }
+    public void meth14961() { }
+    public void meth14962() { }
+    public void meth14963() { }
+    public void meth14964() { }
+    public void meth14965() { }
+    public void meth14966() { }
+    public void meth14967() { }
+    public void meth14968() { }
+    public void meth14969() { }
+    public void meth14970() { }
+    public void meth14971() { }
+    public void meth14972() { }
+    public void meth14973() { }
+    public void meth14974() { }
+    public void meth14975() { }
+    public void meth14976() { }
+    public void meth14977() { }
+    public void meth14978() { }
+    public void meth14979() { }
+    public void meth14980() { }
+    public void meth14981() { }
+    public void meth14982() { }
+    public void meth14983() { }
+    public void meth14984() { }
+    public void meth14985() { }
+    public void meth14986() { }
+    public void meth14987() { }
+    public void meth14988() { }
+    public void meth14989() { }
+    public void meth14990() { }
+    public void meth14991() { }
+    public void meth14992() { }
+    public void meth14993() { }
+    public void meth14994() { }
+    public void meth14995() { }
+    public void meth14996() { }
+    public void meth14997() { }
+    public void meth14998() { }
+    public void meth14999() { }
+    public void meth15000() { }
+    public void meth15001() { }
+    public void meth15002() { }
+    public void meth15003() { }
+    public void meth15004() { }
+    public void meth15005() { }
+    public void meth15006() { }
+    public void meth15007() { }
+    public void meth15008() { }
+    public void meth15009() { }
+    public void meth15010() { }
+    public void meth15011() { }
+    public void meth15012() { }
+    public void meth15013() { }
+    public void meth15014() { }
+    public void meth15015() { }
+    public void meth15016() { }
+    public void meth15017() { }
+    public void meth15018() { }
+    public void meth15019() { }
+    public void meth15020() { }
+    public void meth15021() { }
+    public void meth15022() { }
+    public void meth15023() { }
+    public void meth15024() { }
+    public void meth15025() { }
+    public void meth15026() { }
+    public void meth15027() { }
+    public void meth15028() { }
+    public void meth15029() { }
+    public void meth15030() { }
+    public void meth15031() { }
+    public void meth15032() { }
+    public void meth15033() { }
+    public void meth15034() { }
+    public void meth15035() { }
+    public void meth15036() { }
+    public void meth15037() { }
+    public void meth15038() { }
+    public void meth15039() { }
+    public void meth15040() { }
+    public void meth15041() { }
+    public void meth15042() { }
+    public void meth15043() { }
+    public void meth15044() { }
+    public void meth15045() { }
+    public void meth15046() { }
+    public void meth15047() { }
+    public void meth15048() { }
+    public void meth15049() { }
+    public void meth15050() { }
+    public void meth15051() { }
+    public void meth15052() { }
+    public void meth15053() { }
+    public void meth15054() { }
+    public void meth15055() { }
+    public void meth15056() { }
+    public void meth15057() { }
+    public void meth15058() { }
+    public void meth15059() { }
+    public void meth15060() { }
+    public void meth15061() { }
+    public void meth15062() { }
+    public void meth15063() { }
+    public void meth15064() { }
+    public void meth15065() { }
+    public void meth15066() { }
+    public void meth15067() { }
+    public void meth15068() { }
+    public void meth15069() { }
+    public void meth15070() { }
+    public void meth15071() { }
+    public void meth15072() { }
+    public void meth15073() { }
+    public void meth15074() { }
+    public void meth15075() { }
+    public void meth15076() { }
+    public void meth15077() { }
+    public void meth15078() { }
+    public void meth15079() { }
+    public void meth15080() { }
+    public void meth15081() { }
+    public void meth15082() { }
+    public void meth15083() { }
+    public void meth15084() { }
+    public void meth15085() { }
+    public void meth15086() { }
+    public void meth15087() { }
+    public void meth15088() { }
+    public void meth15089() { }
+    public void meth15090() { }
+    public void meth15091() { }
+    public void meth15092() { }
+    public void meth15093() { }
+    public void meth15094() { }
+    public void meth15095() { }
+    public void meth15096() { }
+    public void meth15097() { }
+    public void meth15098() { }
+    public void meth15099() { }
+    public void meth15100() { }
+    public void meth15101() { }
+    public void meth15102() { }
+    public void meth15103() { }
+    public void meth15104() { }
+    public void meth15105() { }
+    public void meth15106() { }
+    public void meth15107() { }
+    public void meth15108() { }
+    public void meth15109() { }
+    public void meth15110() { }
+    public void meth15111() { }
+    public void meth15112() { }
+    public void meth15113() { }
+    public void meth15114() { }
+    public void meth15115() { }
+    public void meth15116() { }
+    public void meth15117() { }
+    public void meth15118() { }
+    public void meth15119() { }
+    public void meth15120() { }
+    public void meth15121() { }
+    public void meth15122() { }
+    public void meth15123() { }
+    public void meth15124() { }
+    public void meth15125() { }
+    public void meth15126() { }
+    public void meth15127() { }
+    public void meth15128() { }
+    public void meth15129() { }
+    public void meth15130() { }
+    public void meth15131() { }
+    public void meth15132() { }
+    public void meth15133() { }
+    public void meth15134() { }
+    public void meth15135() { }
+    public void meth15136() { }
+    public void meth15137() { }
+    public void meth15138() { }
+    public void meth15139() { }
+    public void meth15140() { }
+    public void meth15141() { }
+    public void meth15142() { }
+    public void meth15143() { }
+    public void meth15144() { }
+    public void meth15145() { }
+    public void meth15146() { }
+    public void meth15147() { }
+    public void meth15148() { }
+    public void meth15149() { }
+    public void meth15150() { }
+    public void meth15151() { }
+    public void meth15152() { }
+    public void meth15153() { }
+    public void meth15154() { }
+    public void meth15155() { }
+    public void meth15156() { }
+    public void meth15157() { }
+    public void meth15158() { }
+    public void meth15159() { }
+    public void meth15160() { }
+    public void meth15161() { }
+    public void meth15162() { }
+    public void meth15163() { }
+    public void meth15164() { }
+    public void meth15165() { }
+    public void meth15166() { }
+    public void meth15167() { }
+    public void meth15168() { }
+    public void meth15169() { }
+    public void meth15170() { }
+    public void meth15171() { }
+    public void meth15172() { }
+    public void meth15173() { }
+    public void meth15174() { }
+    public void meth15175() { }
+    public void meth15176() { }
+    public void meth15177() { }
+    public void meth15178() { }
+    public void meth15179() { }
+    public void meth15180() { }
+    public void meth15181() { }
+    public void meth15182() { }
+    public void meth15183() { }
+    public void meth15184() { }
+    public void meth15185() { }
+    public void meth15186() { }
+    public void meth15187() { }
+    public void meth15188() { }
+    public void meth15189() { }
+    public void meth15190() { }
+    public void meth15191() { }
+    public void meth15192() { }
+    public void meth15193() { }
+    public void meth15194() { }
+    public void meth15195() { }
+    public void meth15196() { }
+    public void meth15197() { }
+    public void meth15198() { }
+    public void meth15199() { }
+    public void meth15200() { }
+    public void meth15201() { }
+    public void meth15202() { }
+    public void meth15203() { }
+    public void meth15204() { }
+    public void meth15205() { }
+    public void meth15206() { }
+    public void meth15207() { }
+    public void meth15208() { }
+    public void meth15209() { }
+    public void meth15210() { }
+    public void meth15211() { }
+    public void meth15212() { }
+    public void meth15213() { }
+    public void meth15214() { }
+    public void meth15215() { }
+    public void meth15216() { }
+    public void meth15217() { }
+    public void meth15218() { }
+    public void meth15219() { }
+    public void meth15220() { }
+    public void meth15221() { }
+    public void meth15222() { }
+    public void meth15223() { }
+    public void meth15224() { }
+    public void meth15225() { }
+    public void meth15226() { }
+    public void meth15227() { }
+    public void meth15228() { }
+    public void meth15229() { }
+    public void meth15230() { }
+    public void meth15231() { }
+    public void meth15232() { }
+    public void meth15233() { }
+    public void meth15234() { }
+    public void meth15235() { }
+    public void meth15236() { }
+    public void meth15237() { }
+    public void meth15238() { }
+    public void meth15239() { }
+    public void meth15240() { }
+    public void meth15241() { }
+    public void meth15242() { }
+    public void meth15243() { }
+    public void meth15244() { }
+    public void meth15245() { }
+    public void meth15246() { }
+    public void meth15247() { }
+    public void meth15248() { }
+    public void meth15249() { }
+    public void meth15250() { }
+    public void meth15251() { }
+    public void meth15252() { }
+    public void meth15253() { }
+    public void meth15254() { }
+    public void meth15255() { }
+    public void meth15256() { }
+    public void meth15257() { }
+    public void meth15258() { }
+    public void meth15259() { }
+    public void meth15260() { }
+    public void meth15261() { }
+    public void meth15262() { }
+    public void meth15263() { }
+    public void meth15264() { }
+    public void meth15265() { }
+    public void meth15266() { }
+    public void meth15267() { }
+    public void meth15268() { }
+    public void meth15269() { }
+    public void meth15270() { }
+    public void meth15271() { }
+    public void meth15272() { }
+    public void meth15273() { }
+    public void meth15274() { }
+    public void meth15275() { }
+    public void meth15276() { }
+    public void meth15277() { }
+    public void meth15278() { }
+    public void meth15279() { }
+    public void meth15280() { }
+    public void meth15281() { }
+    public void meth15282() { }
+    public void meth15283() { }
+    public void meth15284() { }
+    public void meth15285() { }
+    public void meth15286() { }
+    public void meth15287() { }
+    public void meth15288() { }
+    public void meth15289() { }
+    public void meth15290() { }
+    public void meth15291() { }
+    public void meth15292() { }
+    public void meth15293() { }
+    public void meth15294() { }
+    public void meth15295() { }
+    public void meth15296() { }
+    public void meth15297() { }
+    public void meth15298() { }
+    public void meth15299() { }
+    public void meth15300() { }
+    public void meth15301() { }
+    public void meth15302() { }
+    public void meth15303() { }
+    public void meth15304() { }
+    public void meth15305() { }
+    public void meth15306() { }
+    public void meth15307() { }
+    public void meth15308() { }
+    public void meth15309() { }
+    public void meth15310() { }
+    public void meth15311() { }
+    public void meth15312() { }
+    public void meth15313() { }
+    public void meth15314() { }
+    public void meth15315() { }
+    public void meth15316() { }
+    public void meth15317() { }
+    public void meth15318() { }
+    public void meth15319() { }
+    public void meth15320() { }
+    public void meth15321() { }
+    public void meth15322() { }
+    public void meth15323() { }
+    public void meth15324() { }
+    public void meth15325() { }
+    public void meth15326() { }
+    public void meth15327() { }
+    public void meth15328() { }
+    public void meth15329() { }
+    public void meth15330() { }
+    public void meth15331() { }
+    public void meth15332() { }
+    public void meth15333() { }
+    public void meth15334() { }
+    public void meth15335() { }
+    public void meth15336() { }
+    public void meth15337() { }
+    public void meth15338() { }
+    public void meth15339() { }
+    public void meth15340() { }
+    public void meth15341() { }
+    public void meth15342() { }
+    public void meth15343() { }
+    public void meth15344() { }
+    public void meth15345() { }
+    public void meth15346() { }
+    public void meth15347() { }
+    public void meth15348() { }
+    public void meth15349() { }
+    public void meth15350() { }
+    public void meth15351() { }
+    public void meth15352() { }
+    public void meth15353() { }
+    public void meth15354() { }
+    public void meth15355() { }
+    public void meth15356() { }
+    public void meth15357() { }
+    public void meth15358() { }
+    public void meth15359() { }
+    public void meth15360() { }
+    public void meth15361() { }
+    public void meth15362() { }
+    public void meth15363() { }
+    public void meth15364() { }
+    public void meth15365() { }
+    public void meth15366() { }
+    public void meth15367() { }
+    public void meth15368() { }
+    public void meth15369() { }
+    public void meth15370() { }
+    public void meth15371() { }
+    public void meth15372() { }
+    public void meth15373() { }
+    public void meth15374() { }
+    public void meth15375() { }
+    public void meth15376() { }
+    public void meth15377() { }
+    public void meth15378() { }
+    public void meth15379() { }
+    public void meth15380() { }
+    public void meth15381() { }
+    public void meth15382() { }
+    public void meth15383() { }
+    public void meth15384() { }
+    public void meth15385() { }
+    public void meth15386() { }
+    public void meth15387() { }
+    public void meth15388() { }
+    public void meth15389() { }
+    public void meth15390() { }
+    public void meth15391() { }
+    public void meth15392() { }
+    public void meth15393() { }
+    public void meth15394() { }
+    public void meth15395() { }
+    public void meth15396() { }
+    public void meth15397() { }
+    public void meth15398() { }
+    public void meth15399() { }
+    public void meth15400() { }
+    public void meth15401() { }
+    public void meth15402() { }
+    public void meth15403() { }
+    public void meth15404() { }
+    public void meth15405() { }
+    public void meth15406() { }
+    public void meth15407() { }
+    public void meth15408() { }
+    public void meth15409() { }
+    public void meth15410() { }
+    public void meth15411() { }
+    public void meth15412() { }
+    public void meth15413() { }
+    public void meth15414() { }
+    public void meth15415() { }
+    public void meth15416() { }
+    public void meth15417() { }
+    public void meth15418() { }
+    public void meth15419() { }
+    public void meth15420() { }
+    public void meth15421() { }
+    public void meth15422() { }
+    public void meth15423() { }
+    public void meth15424() { }
+    public void meth15425() { }
+    public void meth15426() { }
+    public void meth15427() { }
+    public void meth15428() { }
+    public void meth15429() { }
+    public void meth15430() { }
+    public void meth15431() { }
+    public void meth15432() { }
+    public void meth15433() { }
+    public void meth15434() { }
+    public void meth15435() { }
+    public void meth15436() { }
+    public void meth15437() { }
+    public void meth15438() { }
+    public void meth15439() { }
+    public void meth15440() { }
+    public void meth15441() { }
+    public void meth15442() { }
+    public void meth15443() { }
+    public void meth15444() { }
+    public void meth15445() { }
+    public void meth15446() { }
+    public void meth15447() { }
+    public void meth15448() { }
+    public void meth15449() { }
+    public void meth15450() { }
+    public void meth15451() { }
+    public void meth15452() { }
+    public void meth15453() { }
+    public void meth15454() { }
+    public void meth15455() { }
+    public void meth15456() { }
+    public void meth15457() { }
+    public void meth15458() { }
+    public void meth15459() { }
+    public void meth15460() { }
+    public void meth15461() { }
+    public void meth15462() { }
+    public void meth15463() { }
+    public void meth15464() { }
+    public void meth15465() { }
+    public void meth15466() { }
+    public void meth15467() { }
+    public void meth15468() { }
+    public void meth15469() { }
+    public void meth15470() { }
+    public void meth15471() { }
+    public void meth15472() { }
+    public void meth15473() { }
+    public void meth15474() { }
+    public void meth15475() { }
+    public void meth15476() { }
+    public void meth15477() { }
+    public void meth15478() { }
+    public void meth15479() { }
+    public void meth15480() { }
+    public void meth15481() { }
+    public void meth15482() { }
+    public void meth15483() { }
+    public void meth15484() { }
+    public void meth15485() { }
+    public void meth15486() { }
+    public void meth15487() { }
+    public void meth15488() { }
+    public void meth15489() { }
+    public void meth15490() { }
+    public void meth15491() { }
+    public void meth15492() { }
+    public void meth15493() { }
+    public void meth15494() { }
+    public void meth15495() { }
+    public void meth15496() { }
+    public void meth15497() { }
+    public void meth15498() { }
+    public void meth15499() { }
+    public void meth15500() { }
+    public void meth15501() { }
+    public void meth15502() { }
+    public void meth15503() { }
+    public void meth15504() { }
+    public void meth15505() { }
+    public void meth15506() { }
+    public void meth15507() { }
+    public void meth15508() { }
+    public void meth15509() { }
+    public void meth15510() { }
+    public void meth15511() { }
+    public void meth15512() { }
+    public void meth15513() { }
+    public void meth15514() { }
+    public void meth15515() { }
+    public void meth15516() { }
+    public void meth15517() { }
+    public void meth15518() { }
+    public void meth15519() { }
+    public void meth15520() { }
+    public void meth15521() { }
+    public void meth15522() { }
+    public void meth15523() { }
+    public void meth15524() { }
+    public void meth15525() { }
+    public void meth15526() { }
+    public void meth15527() { }
+    public void meth15528() { }
+    public void meth15529() { }
+    public void meth15530() { }
+    public void meth15531() { }
+    public void meth15532() { }
+    public void meth15533() { }
+    public void meth15534() { }
+    public void meth15535() { }
+    public void meth15536() { }
+    public void meth15537() { }
+    public void meth15538() { }
+    public void meth15539() { }
+    public void meth15540() { }
+    public void meth15541() { }
+    public void meth15542() { }
+    public void meth15543() { }
+    public void meth15544() { }
+    public void meth15545() { }
+    public void meth15546() { }
+    public void meth15547() { }
+    public void meth15548() { }
+    public void meth15549() { }
+    public void meth15550() { }
+    public void meth15551() { }
+    public void meth15552() { }
+    public void meth15553() { }
+    public void meth15554() { }
+    public void meth15555() { }
+    public void meth15556() { }
+    public void meth15557() { }
+    public void meth15558() { }
+    public void meth15559() { }
+    public void meth15560() { }
+    public void meth15561() { }
+    public void meth15562() { }
+    public void meth15563() { }
+    public void meth15564() { }
+    public void meth15565() { }
+    public void meth15566() { }
+    public void meth15567() { }
+    public void meth15568() { }
+    public void meth15569() { }
+    public void meth15570() { }
+    public void meth15571() { }
+    public void meth15572() { }
+    public void meth15573() { }
+    public void meth15574() { }
+    public void meth15575() { }
+    public void meth15576() { }
+    public void meth15577() { }
+    public void meth15578() { }
+    public void meth15579() { }
+    public void meth15580() { }
+    public void meth15581() { }
+    public void meth15582() { }
+    public void meth15583() { }
+    public void meth15584() { }
+    public void meth15585() { }
+    public void meth15586() { }
+    public void meth15587() { }
+    public void meth15588() { }
+    public void meth15589() { }
+    public void meth15590() { }
+    public void meth15591() { }
+    public void meth15592() { }
+    public void meth15593() { }
+    public void meth15594() { }
+    public void meth15595() { }
+    public void meth15596() { }
+    public void meth15597() { }
+    public void meth15598() { }
+    public void meth15599() { }
+    public void meth15600() { }
+    public void meth15601() { }
+    public void meth15602() { }
+    public void meth15603() { }
+    public void meth15604() { }
+    public void meth15605() { }
+    public void meth15606() { }
+    public void meth15607() { }
+    public void meth15608() { }
+    public void meth15609() { }
+    public void meth15610() { }
+    public void meth15611() { }
+    public void meth15612() { }
+    public void meth15613() { }
+    public void meth15614() { }
+    public void meth15615() { }
+    public void meth15616() { }
+    public void meth15617() { }
+    public void meth15618() { }
+    public void meth15619() { }
+    public void meth15620() { }
+    public void meth15621() { }
+    public void meth15622() { }
+    public void meth15623() { }
+    public void meth15624() { }
+    public void meth15625() { }
+    public void meth15626() { }
+    public void meth15627() { }
+    public void meth15628() { }
+    public void meth15629() { }
+    public void meth15630() { }
+    public void meth15631() { }
+    public void meth15632() { }
+    public void meth15633() { }
+    public void meth15634() { }
+    public void meth15635() { }
+    public void meth15636() { }
+    public void meth15637() { }
+    public void meth15638() { }
+    public void meth15639() { }
+    public void meth15640() { }
+    public void meth15641() { }
+    public void meth15642() { }
+    public void meth15643() { }
+    public void meth15644() { }
+    public void meth15645() { }
+    public void meth15646() { }
+    public void meth15647() { }
+    public void meth15648() { }
+    public void meth15649() { }
+    public void meth15650() { }
+    public void meth15651() { }
+    public void meth15652() { }
+    public void meth15653() { }
+    public void meth15654() { }
+    public void meth15655() { }
+    public void meth15656() { }
+    public void meth15657() { }
+    public void meth15658() { }
+    public void meth15659() { }
+    public void meth15660() { }
+    public void meth15661() { }
+    public void meth15662() { }
+    public void meth15663() { }
+    public void meth15664() { }
+    public void meth15665() { }
+    public void meth15666() { }
+    public void meth15667() { }
+    public void meth15668() { }
+    public void meth15669() { }
+    public void meth15670() { }
+    public void meth15671() { }
+    public void meth15672() { }
+    public void meth15673() { }
+    public void meth15674() { }
+    public void meth15675() { }
+    public void meth15676() { }
+    public void meth15677() { }
+    public void meth15678() { }
+    public void meth15679() { }
+    public void meth15680() { }
+    public void meth15681() { }
+    public void meth15682() { }
+    public void meth15683() { }
+    public void meth15684() { }
+    public void meth15685() { }
+    public void meth15686() { }
+    public void meth15687() { }
+    public void meth15688() { }
+    public void meth15689() { }
+    public void meth15690() { }
+    public void meth15691() { }
+    public void meth15692() { }
+    public void meth15693() { }
+    public void meth15694() { }
+    public void meth15695() { }
+    public void meth15696() { }
+    public void meth15697() { }
+    public void meth15698() { }
+    public void meth15699() { }
+    public void meth15700() { }
+    public void meth15701() { }
+    public void meth15702() { }
+    public void meth15703() { }
+    public void meth15704() { }
+    public void meth15705() { }
+    public void meth15706() { }
+    public void meth15707() { }
+    public void meth15708() { }
+    public void meth15709() { }
+    public void meth15710() { }
+    public void meth15711() { }
+    public void meth15712() { }
+    public void meth15713() { }
+    public void meth15714() { }
+    public void meth15715() { }
+    public void meth15716() { }
+    public void meth15717() { }
+    public void meth15718() { }
+    public void meth15719() { }
+    public void meth15720() { }
+    public void meth15721() { }
+    public void meth15722() { }
+    public void meth15723() { }
+    public void meth15724() { }
+    public void meth15725() { }
+    public void meth15726() { }
+    public void meth15727() { }
+    public void meth15728() { }
+    public void meth15729() { }
+    public void meth15730() { }
+    public void meth15731() { }
+    public void meth15732() { }
+    public void meth15733() { }
+    public void meth15734() { }
+    public void meth15735() { }
+    public void meth15736() { }
+    public void meth15737() { }
+    public void meth15738() { }
+    public void meth15739() { }
+    public void meth15740() { }
+    public void meth15741() { }
+    public void meth15742() { }
+    public void meth15743() { }
+    public void meth15744() { }
+    public void meth15745() { }
+    public void meth15746() { }
+    public void meth15747() { }
+    public void meth15748() { }
+    public void meth15749() { }
+    public void meth15750() { }
+    public void meth15751() { }
+    public void meth15752() { }
+    public void meth15753() { }
+    public void meth15754() { }
+    public void meth15755() { }
+    public void meth15756() { }
+    public void meth15757() { }
+    public void meth15758() { }
+    public void meth15759() { }
+    public void meth15760() { }
+    public void meth15761() { }
+    public void meth15762() { }
+    public void meth15763() { }
+    public void meth15764() { }
+    public void meth15765() { }
+    public void meth15766() { }
+    public void meth15767() { }
+    public void meth15768() { }
+    public void meth15769() { }
+    public void meth15770() { }
+    public void meth15771() { }
+    public void meth15772() { }
+    public void meth15773() { }
+    public void meth15774() { }
+    public void meth15775() { }
+    public void meth15776() { }
+    public void meth15777() { }
+    public void meth15778() { }
+    public void meth15779() { }
+    public void meth15780() { }
+    public void meth15781() { }
+    public void meth15782() { }
+    public void meth15783() { }
+    public void meth15784() { }
+    public void meth15785() { }
+    public void meth15786() { }
+    public void meth15787() { }
+    public void meth15788() { }
+    public void meth15789() { }
+    public void meth15790() { }
+    public void meth15791() { }
+    public void meth15792() { }
+    public void meth15793() { }
+    public void meth15794() { }
+    public void meth15795() { }
+    public void meth15796() { }
+    public void meth15797() { }
+    public void meth15798() { }
+    public void meth15799() { }
+    public void meth15800() { }
+    public void meth15801() { }
+    public void meth15802() { }
+    public void meth15803() { }
+    public void meth15804() { }
+    public void meth15805() { }
+    public void meth15806() { }
+    public void meth15807() { }
+    public void meth15808() { }
+    public void meth15809() { }
+    public void meth15810() { }
+    public void meth15811() { }
+    public void meth15812() { }
+    public void meth15813() { }
+    public void meth15814() { }
+    public void meth15815() { }
+    public void meth15816() { }
+    public void meth15817() { }
+    public void meth15818() { }
+    public void meth15819() { }
+    public void meth15820() { }
+    public void meth15821() { }
+    public void meth15822() { }
+    public void meth15823() { }
+    public void meth15824() { }
+    public void meth15825() { }
+    public void meth15826() { }
+    public void meth15827() { }
+    public void meth15828() { }
+    public void meth15829() { }
+    public void meth15830() { }
+    public void meth15831() { }
+    public void meth15832() { }
+    public void meth15833() { }
+    public void meth15834() { }
+    public void meth15835() { }
+    public void meth15836() { }
+    public void meth15837() { }
+    public void meth15838() { }
+    public void meth15839() { }
+    public void meth15840() { }
+    public void meth15841() { }
+    public void meth15842() { }
+    public void meth15843() { }
+    public void meth15844() { }
+    public void meth15845() { }
+    public void meth15846() { }
+    public void meth15847() { }
+    public void meth15848() { }
+    public void meth15849() { }
+    public void meth15850() { }
+    public void meth15851() { }
+    public void meth15852() { }
+    public void meth15853() { }
+    public void meth15854() { }
+    public void meth15855() { }
+    public void meth15856() { }
+    public void meth15857() { }
+    public void meth15858() { }
+    public void meth15859() { }
+    public void meth15860() { }
+    public void meth15861() { }
+    public void meth15862() { }
+    public void meth15863() { }
+    public void meth15864() { }
+    public void meth15865() { }
+    public void meth15866() { }
+    public void meth15867() { }
+    public void meth15868() { }
+    public void meth15869() { }
+    public void meth15870() { }
+    public void meth15871() { }
+    public void meth15872() { }
+    public void meth15873() { }
+    public void meth15874() { }
+    public void meth15875() { }
+    public void meth15876() { }
+    public void meth15877() { }
+    public void meth15878() { }
+    public void meth15879() { }
+    public void meth15880() { }
+    public void meth15881() { }
+    public void meth15882() { }
+    public void meth15883() { }
+    public void meth15884() { }
+    public void meth15885() { }
+    public void meth15886() { }
+    public void meth15887() { }
+    public void meth15888() { }
+    public void meth15889() { }
+    public void meth15890() { }
+    public void meth15891() { }
+    public void meth15892() { }
+    public void meth15893() { }
+    public void meth15894() { }
+    public void meth15895() { }
+    public void meth15896() { }
+    public void meth15897() { }
+    public void meth15898() { }
+    public void meth15899() { }
+    public void meth15900() { }
+    public void meth15901() { }
+    public void meth15902() { }
+    public void meth15903() { }
+    public void meth15904() { }
+    public void meth15905() { }
+    public void meth15906() { }
+    public void meth15907() { }
+    public void meth15908() { }
+    public void meth15909() { }
+    public void meth15910() { }
+    public void meth15911() { }
+    public void meth15912() { }
+    public void meth15913() { }
+    public void meth15914() { }
+    public void meth15915() { }
+    public void meth15916() { }
+    public void meth15917() { }
+    public void meth15918() { }
+    public void meth15919() { }
+    public void meth15920() { }
+    public void meth15921() { }
+    public void meth15922() { }
+    public void meth15923() { }
+    public void meth15924() { }
+    public void meth15925() { }
+    public void meth15926() { }
+    public void meth15927() { }
+    public void meth15928() { }
+    public void meth15929() { }
+    public void meth15930() { }
+    public void meth15931() { }
+    public void meth15932() { }
+    public void meth15933() { }
+    public void meth15934() { }
+    public void meth15935() { }
+    public void meth15936() { }
+    public void meth15937() { }
+    public void meth15938() { }
+    public void meth15939() { }
+    public void meth15940() { }
+    public void meth15941() { }
+    public void meth15942() { }
+    public void meth15943() { }
+    public void meth15944() { }
+    public void meth15945() { }
+    public void meth15946() { }
+    public void meth15947() { }
+    public void meth15948() { }
+    public void meth15949() { }
+    public void meth15950() { }
+    public void meth15951() { }
+    public void meth15952() { }
+    public void meth15953() { }
+    public void meth15954() { }
+    public void meth15955() { }
+    public void meth15956() { }
+    public void meth15957() { }
+    public void meth15958() { }
+    public void meth15959() { }
+    public void meth15960() { }
+    public void meth15961() { }
+    public void meth15962() { }
+    public void meth15963() { }
+    public void meth15964() { }
+    public void meth15965() { }
+    public void meth15966() { }
+    public void meth15967() { }
+    public void meth15968() { }
+    public void meth15969() { }
+    public void meth15970() { }
+    public void meth15971() { }
+    public void meth15972() { }
+    public void meth15973() { }
+    public void meth15974() { }
+    public void meth15975() { }
+    public void meth15976() { }
+    public void meth15977() { }
+    public void meth15978() { }
+    public void meth15979() { }
+    public void meth15980() { }
+    public void meth15981() { }
+    public void meth15982() { }
+    public void meth15983() { }
+    public void meth15984() { }
+    public void meth15985() { }
+    public void meth15986() { }
+    public void meth15987() { }
+    public void meth15988() { }
+    public void meth15989() { }
+    public void meth15990() { }
+    public void meth15991() { }
+    public void meth15992() { }
+    public void meth15993() { }
+    public void meth15994() { }
+    public void meth15995() { }
+    public void meth15996() { }
+    public void meth15997() { }
+    public void meth15998() { }
+    public void meth15999() { }
+    public void meth16000() { }
+    public void meth16001() { }
+    public void meth16002() { }
+    public void meth16003() { }
+    public void meth16004() { }
+    public void meth16005() { }
+    public void meth16006() { }
+    public void meth16007() { }
+    public void meth16008() { }
+    public void meth16009() { }
+    public void meth16010() { }
+    public void meth16011() { }
+    public void meth16012() { }
+    public void meth16013() { }
+    public void meth16014() { }
+    public void meth16015() { }
+    public void meth16016() { }
+    public void meth16017() { }
+    public void meth16018() { }
+    public void meth16019() { }
+    public void meth16020() { }
+    public void meth16021() { }
+    public void meth16022() { }
+    public void meth16023() { }
+    public void meth16024() { }
+    public void meth16025() { }
+    public void meth16026() { }
+    public void meth16027() { }
+    public void meth16028() { }
+    public void meth16029() { }
+    public void meth16030() { }
+    public void meth16031() { }
+    public void meth16032() { }
+    public void meth16033() { }
+    public void meth16034() { }
+    public void meth16035() { }
+    public void meth16036() { }
+    public void meth16037() { }
+    public void meth16038() { }
+    public void meth16039() { }
+    public void meth16040() { }
+    public void meth16041() { }
+    public void meth16042() { }
+    public void meth16043() { }
+    public void meth16044() { }
+    public void meth16045() { }
+    public void meth16046() { }
+    public void meth16047() { }
+    public void meth16048() { }
+    public void meth16049() { }
+    public void meth16050() { }
+    public void meth16051() { }
+    public void meth16052() { }
+    public void meth16053() { }
+    public void meth16054() { }
+    public void meth16055() { }
+    public void meth16056() { }
+    public void meth16057() { }
+    public void meth16058() { }
+    public void meth16059() { }
+    public void meth16060() { }
+    public void meth16061() { }
+    public void meth16062() { }
+    public void meth16063() { }
+    public void meth16064() { }
+    public void meth16065() { }
+    public void meth16066() { }
+    public void meth16067() { }
+    public void meth16068() { }
+    public void meth16069() { }
+    public void meth16070() { }
+    public void meth16071() { }
+    public void meth16072() { }
+    public void meth16073() { }
+    public void meth16074() { }
+    public void meth16075() { }
+    public void meth16076() { }
+    public void meth16077() { }
+    public void meth16078() { }
+    public void meth16079() { }
+    public void meth16080() { }
+    public void meth16081() { }
+    public void meth16082() { }
+    public void meth16083() { }
+    public void meth16084() { }
+    public void meth16085() { }
+    public void meth16086() { }
+    public void meth16087() { }
+    public void meth16088() { }
+    public void meth16089() { }
+    public void meth16090() { }
+    public void meth16091() { }
+    public void meth16092() { }
+    public void meth16093() { }
+    public void meth16094() { }
+    public void meth16095() { }
+    public void meth16096() { }
+    public void meth16097() { }
+    public void meth16098() { }
+    public void meth16099() { }
+    public void meth16100() { }
+    public void meth16101() { }
+    public void meth16102() { }
+    public void meth16103() { }
+    public void meth16104() { }
+    public void meth16105() { }
+    public void meth16106() { }
+    public void meth16107() { }
+    public void meth16108() { }
+    public void meth16109() { }
+    public void meth16110() { }
+    public void meth16111() { }
+    public void meth16112() { }
+    public void meth16113() { }
+    public void meth16114() { }
+    public void meth16115() { }
+    public void meth16116() { }
+    public void meth16117() { }
+    public void meth16118() { }
+    public void meth16119() { }
+    public void meth16120() { }
+    public void meth16121() { }
+    public void meth16122() { }
+    public void meth16123() { }
+    public void meth16124() { }
+    public void meth16125() { }
+    public void meth16126() { }
+    public void meth16127() { }
+    public void meth16128() { }
+    public void meth16129() { }
+    public void meth16130() { }
+    public void meth16131() { }
+    public void meth16132() { }
+    public void meth16133() { }
+    public void meth16134() { }
+    public void meth16135() { }
+    public void meth16136() { }
+    public void meth16137() { }
+    public void meth16138() { }
+    public void meth16139() { }
+    public void meth16140() { }
+    public void meth16141() { }
+    public void meth16142() { }
+    public void meth16143() { }
+    public void meth16144() { }
+    public void meth16145() { }
+    public void meth16146() { }
+    public void meth16147() { }
+    public void meth16148() { }
+    public void meth16149() { }
+    public void meth16150() { }
+    public void meth16151() { }
+    public void meth16152() { }
+    public void meth16153() { }
+    public void meth16154() { }
+    public void meth16155() { }
+    public void meth16156() { }
+    public void meth16157() { }
+    public void meth16158() { }
+    public void meth16159() { }
+    public void meth16160() { }
+    public void meth16161() { }
+    public void meth16162() { }
+    public void meth16163() { }
+    public void meth16164() { }
+    public void meth16165() { }
+    public void meth16166() { }
+    public void meth16167() { }
+    public void meth16168() { }
+    public void meth16169() { }
+    public void meth16170() { }
+    public void meth16171() { }
+    public void meth16172() { }
+    public void meth16173() { }
+    public void meth16174() { }
+    public void meth16175() { }
+    public void meth16176() { }
+    public void meth16177() { }
+    public void meth16178() { }
+    public void meth16179() { }
+    public void meth16180() { }
+    public void meth16181() { }
+    public void meth16182() { }
+    public void meth16183() { }
+    public void meth16184() { }
+    public void meth16185() { }
+    public void meth16186() { }
+    public void meth16187() { }
+    public void meth16188() { }
+    public void meth16189() { }
+    public void meth16190() { }
+    public void meth16191() { }
+    public void meth16192() { }
+    public void meth16193() { }
+    public void meth16194() { }
+    public void meth16195() { }
+    public void meth16196() { }
+    public void meth16197() { }
+    public void meth16198() { }
+    public void meth16199() { }
+    public void meth16200() { }
+    public void meth16201() { }
+    public void meth16202() { }
+    public void meth16203() { }
+    public void meth16204() { }
+    public void meth16205() { }
+    public void meth16206() { }
+    public void meth16207() { }
+    public void meth16208() { }
+    public void meth16209() { }
+    public void meth16210() { }
+    public void meth16211() { }
+    public void meth16212() { }
+    public void meth16213() { }
+    public void meth16214() { }
+    public void meth16215() { }
+    public void meth16216() { }
+    public void meth16217() { }
+    public void meth16218() { }
+    public void meth16219() { }
+    public void meth16220() { }
+    public void meth16221() { }
+    public void meth16222() { }
+    public void meth16223() { }
+    public void meth16224() { }
+    public void meth16225() { }
+    public void meth16226() { }
+    public void meth16227() { }
+    public void meth16228() { }
+    public void meth16229() { }
+    public void meth16230() { }
+    public void meth16231() { }
+    public void meth16232() { }
+    public void meth16233() { }
+    public void meth16234() { }
+    public void meth16235() { }
+    public void meth16236() { }
+    public void meth16237() { }
+    public void meth16238() { }
+    public void meth16239() { }
+    public void meth16240() { }
+    public void meth16241() { }
+    public void meth16242() { }
+    public void meth16243() { }
+    public void meth16244() { }
+    public void meth16245() { }
+    public void meth16246() { }
+    public void meth16247() { }
+    public void meth16248() { }
+    public void meth16249() { }
+    public void meth16250() { }
+    public void meth16251() { }
+    public void meth16252() { }
+    public void meth16253() { }
+    public void meth16254() { }
+    public void meth16255() { }
+    public void meth16256() { }
+    public void meth16257() { }
+    public void meth16258() { }
+    public void meth16259() { }
+    public void meth16260() { }
+    public void meth16261() { }
+    public void meth16262() { }
+    public void meth16263() { }
+    public void meth16264() { }
+    public void meth16265() { }
+    public void meth16266() { }
+    public void meth16267() { }
+    public void meth16268() { }
+    public void meth16269() { }
+    public void meth16270() { }
+    public void meth16271() { }
+    public void meth16272() { }
+    public void meth16273() { }
+    public void meth16274() { }
+    public void meth16275() { }
+    public void meth16276() { }
+    public void meth16277() { }
+    public void meth16278() { }
+    public void meth16279() { }
+    public void meth16280() { }
+    public void meth16281() { }
+    public void meth16282() { }
+    public void meth16283() { }
+    public void meth16284() { }
+    public void meth16285() { }
+    public void meth16286() { }
+    public void meth16287() { }
+    public void meth16288() { }
+    public void meth16289() { }
+    public void meth16290() { }
+    public void meth16291() { }
+    public void meth16292() { }
+    public void meth16293() { }
+    public void meth16294() { }
+    public void meth16295() { }
+    public void meth16296() { }
+    public void meth16297() { }
+    public void meth16298() { }
+    public void meth16299() { }
+    public void meth16300() { }
+    public void meth16301() { }
+    public void meth16302() { }
+    public void meth16303() { }
+    public void meth16304() { }
+    public void meth16305() { }
+    public void meth16306() { }
+    public void meth16307() { }
+    public void meth16308() { }
+    public void meth16309() { }
+    public void meth16310() { }
+    public void meth16311() { }
+    public void meth16312() { }
+    public void meth16313() { }
+    public void meth16314() { }
+    public void meth16315() { }
+    public void meth16316() { }
+    public void meth16317() { }
+    public void meth16318() { }
+    public void meth16319() { }
+    public void meth16320() { }
+    public void meth16321() { }
+    public void meth16322() { }
+    public void meth16323() { }
+    public void meth16324() { }
+    public void meth16325() { }
+    public void meth16326() { }
+    public void meth16327() { }
+    public void meth16328() { }
+    public void meth16329() { }
+    public void meth16330() { }
+    public void meth16331() { }
+    public void meth16332() { }
+    public void meth16333() { }
+    public void meth16334() { }
+    public void meth16335() { }
+    public void meth16336() { }
+    public void meth16337() { }
+    public void meth16338() { }
+    public void meth16339() { }
+    public void meth16340() { }
+    public void meth16341() { }
+    public void meth16342() { }
+    public void meth16343() { }
+    public void meth16344() { }
+    public void meth16345() { }
+    public void meth16346() { }
+    public void meth16347() { }
+    public void meth16348() { }
+    public void meth16349() { }
+    public void meth16350() { }
+    public void meth16351() { }
+    public void meth16352() { }
+    public void meth16353() { }
+    public void meth16354() { }
+    public void meth16355() { }
+    public void meth16356() { }
+    public void meth16357() { }
+    public void meth16358() { }
+    public void meth16359() { }
+    public void meth16360() { }
+    public void meth16361() { }
+    public void meth16362() { }
+    public void meth16363() { }
+    public void meth16364() { }
+    public void meth16365() { }
+    public void meth16366() { }
+    public void meth16367() { }
+    public void meth16368() { }
+    public void meth16369() { }
+    public void meth16370() { }
+    public void meth16371() { }
+    public void meth16372() { }
+    public void meth16373() { }
+    public void meth16374() { }
+    public void meth16375() { }
+    public void meth16376() { }
+    public void meth16377() { }
+    public void meth16378() { }
+    public void meth16379() { }
+    public void meth16380() { }
+    public void meth16381() { }
+    public void meth16382() { }
+    public void meth16383() { }
+    public void meth16384() { }
+    public void meth16385() { }
+    public void meth16386() { }
+    public void meth16387() { }
+    public void meth16388() { }
+    public void meth16389() { }
+    public void meth16390() { }
+    public void meth16391() { }
+    public void meth16392() { }
+    public void meth16393() { }
+    public void meth16394() { }
+    public void meth16395() { }
+    public void meth16396() { }
+    public void meth16397() { }
+    public void meth16398() { }
+    public void meth16399() { }
+    public void meth16400() { }
+    public void meth16401() { }
+    public void meth16402() { }
+    public void meth16403() { }
+    public void meth16404() { }
+    public void meth16405() { }
+    public void meth16406() { }
+    public void meth16407() { }
+    public void meth16408() { }
+    public void meth16409() { }
+    public void meth16410() { }
+    public void meth16411() { }
+    public void meth16412() { }
+    public void meth16413() { }
+    public void meth16414() { }
+    public void meth16415() { }
+    public void meth16416() { }
+    public void meth16417() { }
+    public void meth16418() { }
+    public void meth16419() { }
+    public void meth16420() { }
+    public void meth16421() { }
+    public void meth16422() { }
+    public void meth16423() { }
+    public void meth16424() { }
+    public void meth16425() { }
+    public void meth16426() { }
+    public void meth16427() { }
+    public void meth16428() { }
+    public void meth16429() { }
+    public void meth16430() { }
+    public void meth16431() { }
+    public void meth16432() { }
+    public void meth16433() { }
+    public void meth16434() { }
+    public void meth16435() { }
+    public void meth16436() { }
+    public void meth16437() { }
+    public void meth16438() { }
+    public void meth16439() { }
+    public void meth16440() { }
+    public void meth16441() { }
+    public void meth16442() { }
+    public void meth16443() { }
+    public void meth16444() { }
+    public void meth16445() { }
+    public void meth16446() { }
+    public void meth16447() { }
+    public void meth16448() { }
+    public void meth16449() { }
+    public void meth16450() { }
+    public void meth16451() { }
+    public void meth16452() { }
+    public void meth16453() { }
+    public void meth16454() { }
+    public void meth16455() { }
+    public void meth16456() { }
+    public void meth16457() { }
+    public void meth16458() { }
+    public void meth16459() { }
+    public void meth16460() { }
+    public void meth16461() { }
+    public void meth16462() { }
+    public void meth16463() { }
+    public void meth16464() { }
+    public void meth16465() { }
+    public void meth16466() { }
+    public void meth16467() { }
+    public void meth16468() { }
+    public void meth16469() { }
+    public void meth16470() { }
+    public void meth16471() { }
+    public void meth16472() { }
+    public void meth16473() { }
+    public void meth16474() { }
+    public void meth16475() { }
+    public void meth16476() { }
+    public void meth16477() { }
+    public void meth16478() { }
+    public void meth16479() { }
+    public void meth16480() { }
+    public void meth16481() { }
+    public void meth16482() { }
+    public void meth16483() { }
+    public void meth16484() { }
+    public void meth16485() { }
+    public void meth16486() { }
+    public void meth16487() { }
+    public void meth16488() { }
+    public void meth16489() { }
+    public void meth16490() { }
+    public void meth16491() { }
+    public void meth16492() { }
+    public void meth16493() { }
+    public void meth16494() { }
+    public void meth16495() { }
+    public void meth16496() { }
+    public void meth16497() { }
+    public void meth16498() { }
+    public void meth16499() { }
+    public void meth16500() { }
+    public void meth16501() { }
+    public void meth16502() { }
+    public void meth16503() { }
+    public void meth16504() { }
+    public void meth16505() { }
+    public void meth16506() { }
+    public void meth16507() { }
+    public void meth16508() { }
+    public void meth16509() { }
+    public void meth16510() { }
+    public void meth16511() { }
+    public void meth16512() { }
+    public void meth16513() { }
+    public void meth16514() { }
+    public void meth16515() { }
+    public void meth16516() { }
+    public void meth16517() { }
+    public void meth16518() { }
+    public void meth16519() { }
+    public void meth16520() { }
+    public void meth16521() { }
+    public void meth16522() { }
+    public void meth16523() { }
+    public void meth16524() { }
+    public void meth16525() { }
+    public void meth16526() { }
+    public void meth16527() { }
+    public void meth16528() { }
+    public void meth16529() { }
+    public void meth16530() { }
+    public void meth16531() { }
+    public void meth16532() { }
+    public void meth16533() { }
+    public void meth16534() { }
+    public void meth16535() { }
+    public void meth16536() { }
+    public void meth16537() { }
+    public void meth16538() { }
+    public void meth16539() { }
+    public void meth16540() { }
+    public void meth16541() { }
+    public void meth16542() { }
+    public void meth16543() { }
+    public void meth16544() { }
+    public void meth16545() { }
+    public void meth16546() { }
+    public void meth16547() { }
+    public void meth16548() { }
+    public void meth16549() { }
+    public void meth16550() { }
+    public void meth16551() { }
+    public void meth16552() { }
+    public void meth16553() { }
+    public void meth16554() { }
+    public void meth16555() { }
+    public void meth16556() { }
+    public void meth16557() { }
+    public void meth16558() { }
+    public void meth16559() { }
+    public void meth16560() { }
+    public void meth16561() { }
+    public void meth16562() { }
+    public void meth16563() { }
+    public void meth16564() { }
+    public void meth16565() { }
+    public void meth16566() { }
+    public void meth16567() { }
+    public void meth16568() { }
+    public void meth16569() { }
+    public void meth16570() { }
+    public void meth16571() { }
+    public void meth16572() { }
+    public void meth16573() { }
+    public void meth16574() { }
+    public void meth16575() { }
+    public void meth16576() { }
+    public void meth16577() { }
+    public void meth16578() { }
+    public void meth16579() { }
+    public void meth16580() { }
+    public void meth16581() { }
+    public void meth16582() { }
+    public void meth16583() { }
+    public void meth16584() { }
+    public void meth16585() { }
+    public void meth16586() { }
+    public void meth16587() { }
+    public void meth16588() { }
+    public void meth16589() { }
+    public void meth16590() { }
+    public void meth16591() { }
+    public void meth16592() { }
+    public void meth16593() { }
+    public void meth16594() { }
+    public void meth16595() { }
+    public void meth16596() { }
+    public void meth16597() { }
+    public void meth16598() { }
+    public void meth16599() { }
+    public void meth16600() { }
+    public void meth16601() { }
+    public void meth16602() { }
+    public void meth16603() { }
+    public void meth16604() { }
+    public void meth16605() { }
+    public void meth16606() { }
+    public void meth16607() { }
+    public void meth16608() { }
+    public void meth16609() { }
+    public void meth16610() { }
+    public void meth16611() { }
+    public void meth16612() { }
+    public void meth16613() { }
+    public void meth16614() { }
+    public void meth16615() { }
+    public void meth16616() { }
+    public void meth16617() { }
+    public void meth16618() { }
+    public void meth16619() { }
+    public void meth16620() { }
+    public void meth16621() { }
+    public void meth16622() { }
+    public void meth16623() { }
+    public void meth16624() { }
+    public void meth16625() { }
+    public void meth16626() { }
+    public void meth16627() { }
+    public void meth16628() { }
+    public void meth16629() { }
+    public void meth16630() { }
+    public void meth16631() { }
+    public void meth16632() { }
+    public void meth16633() { }
+    public void meth16634() { }
+    public void meth16635() { }
+    public void meth16636() { }
+    public void meth16637() { }
+    public void meth16638() { }
+    public void meth16639() { }
+    public void meth16640() { }
+    public void meth16641() { }
+    public void meth16642() { }
+    public void meth16643() { }
+    public void meth16644() { }
+    public void meth16645() { }
+    public void meth16646() { }
+    public void meth16647() { }
+    public void meth16648() { }
+    public void meth16649() { }
+    public void meth16650() { }
+    public void meth16651() { }
+    public void meth16652() { }
+    public void meth16653() { }
+    public void meth16654() { }
+    public void meth16655() { }
+    public void meth16656() { }
+    public void meth16657() { }
+    public void meth16658() { }
+    public void meth16659() { }
+    public void meth16660() { }
+    public void meth16661() { }
+    public void meth16662() { }
+    public void meth16663() { }
+    public void meth16664() { }
+    public void meth16665() { }
+    public void meth16666() { }
+    public void meth16667() { }
+    public void meth16668() { }
+    public void meth16669() { }
+    public void meth16670() { }
+    public void meth16671() { }
+    public void meth16672() { }
+    public void meth16673() { }
+    public void meth16674() { }
+    public void meth16675() { }
+    public void meth16676() { }
+    public void meth16677() { }
+    public void meth16678() { }
+    public void meth16679() { }
+    public void meth16680() { }
+    public void meth16681() { }
+    public void meth16682() { }
+    public void meth16683() { }
+    public void meth16684() { }
+    public void meth16685() { }
+    public void meth16686() { }
+    public void meth16687() { }
+    public void meth16688() { }
+    public void meth16689() { }
+    public void meth16690() { }
+    public void meth16691() { }
+    public void meth16692() { }
+    public void meth16693() { }
+    public void meth16694() { }
+    public void meth16695() { }
+    public void meth16696() { }
+    public void meth16697() { }
+    public void meth16698() { }
+    public void meth16699() { }
+    public void meth16700() { }
+    public void meth16701() { }
+    public void meth16702() { }
+    public void meth16703() { }
+    public void meth16704() { }
+    public void meth16705() { }
+    public void meth16706() { }
+    public void meth16707() { }
+    public void meth16708() { }
+    public void meth16709() { }
+    public void meth16710() { }
+    public void meth16711() { }
+    public void meth16712() { }
+    public void meth16713() { }
+    public void meth16714() { }
+    public void meth16715() { }
+    public void meth16716() { }
+    public void meth16717() { }
+    public void meth16718() { }
+    public void meth16719() { }
+    public void meth16720() { }
+    public void meth16721() { }
+    public void meth16722() { }
+    public void meth16723() { }
+    public void meth16724() { }
+    public void meth16725() { }
+    public void meth16726() { }
+    public void meth16727() { }
+    public void meth16728() { }
+    public void meth16729() { }
+    public void meth16730() { }
+    public void meth16731() { }
+    public void meth16732() { }
+    public void meth16733() { }
+    public void meth16734() { }
+    public void meth16735() { }
+    public void meth16736() { }
+    public void meth16737() { }
+    public void meth16738() { }
+    public void meth16739() { }
+    public void meth16740() { }
+    public void meth16741() { }
+    public void meth16742() { }
+    public void meth16743() { }
+    public void meth16744() { }
+    public void meth16745() { }
+    public void meth16746() { }
+    public void meth16747() { }
+    public void meth16748() { }
+    public void meth16749() { }
+    public void meth16750() { }
+    public void meth16751() { }
+    public void meth16752() { }
+    public void meth16753() { }
+    public void meth16754() { }
+    public void meth16755() { }
+    public void meth16756() { }
+    public void meth16757() { }
+    public void meth16758() { }
+    public void meth16759() { }
+    public void meth16760() { }
+    public void meth16761() { }
+    public void meth16762() { }
+    public void meth16763() { }
+    public void meth16764() { }
+    public void meth16765() { }
+    public void meth16766() { }
+    public void meth16767() { }
+    public void meth16768() { }
+    public void meth16769() { }
+    public void meth16770() { }
+    public void meth16771() { }
+    public void meth16772() { }
+    public void meth16773() { }
+    public void meth16774() { }
+    public void meth16775() { }
+    public void meth16776() { }
+    public void meth16777() { }
+    public void meth16778() { }
+    public void meth16779() { }
+    public void meth16780() { }
+    public void meth16781() { }
+    public void meth16782() { }
+    public void meth16783() { }
+    public void meth16784() { }
+    public void meth16785() { }
+    public void meth16786() { }
+    public void meth16787() { }
+    public void meth16788() { }
+    public void meth16789() { }
+    public void meth16790() { }
+    public void meth16791() { }
+    public void meth16792() { }
+    public void meth16793() { }
+    public void meth16794() { }
+    public void meth16795() { }
+    public void meth16796() { }
+    public void meth16797() { }
+    public void meth16798() { }
+    public void meth16799() { }
+    public void meth16800() { }
+    public void meth16801() { }
+    public void meth16802() { }
+    public void meth16803() { }
+    public void meth16804() { }
+    public void meth16805() { }
+    public void meth16806() { }
+    public void meth16807() { }
+    public void meth16808() { }
+    public void meth16809() { }
+    public void meth16810() { }
+    public void meth16811() { }
+    public void meth16812() { }
+    public void meth16813() { }
+    public void meth16814() { }
+    public void meth16815() { }
+    public void meth16816() { }
+    public void meth16817() { }
+    public void meth16818() { }
+    public void meth16819() { }
+    public void meth16820() { }
+    public void meth16821() { }
+    public void meth16822() { }
+    public void meth16823() { }
+    public void meth16824() { }
+    public void meth16825() { }
+    public void meth16826() { }
+    public void meth16827() { }
+    public void meth16828() { }
+    public void meth16829() { }
+    public void meth16830() { }
+    public void meth16831() { }
+    public void meth16832() { }
+    public void meth16833() { }
+    public void meth16834() { }
+    public void meth16835() { }
+    public void meth16836() { }
+    public void meth16837() { }
+    public void meth16838() { }
+    public void meth16839() { }
+    public void meth16840() { }
+    public void meth16841() { }
+    public void meth16842() { }
+    public void meth16843() { }
+    public void meth16844() { }
+    public void meth16845() { }
+    public void meth16846() { }
+    public void meth16847() { }
+    public void meth16848() { }
+    public void meth16849() { }
+    public void meth16850() { }
+    public void meth16851() { }
+    public void meth16852() { }
+    public void meth16853() { }
+    public void meth16854() { }
+    public void meth16855() { }
+    public void meth16856() { }
+    public void meth16857() { }
+    public void meth16858() { }
+    public void meth16859() { }
+    public void meth16860() { }
+    public void meth16861() { }
+    public void meth16862() { }
+    public void meth16863() { }
+    public void meth16864() { }
+    public void meth16865() { }
+    public void meth16866() { }
+    public void meth16867() { }
+    public void meth16868() { }
+    public void meth16869() { }
+    public void meth16870() { }
+    public void meth16871() { }
+    public void meth16872() { }
+    public void meth16873() { }
+    public void meth16874() { }
+    public void meth16875() { }
+    public void meth16876() { }
+    public void meth16877() { }
+    public void meth16878() { }
+    public void meth16879() { }
+    public void meth16880() { }
+    public void meth16881() { }
+    public void meth16882() { }
+    public void meth16883() { }
+    public void meth16884() { }
+    public void meth16885() { }
+    public void meth16886() { }
+    public void meth16887() { }
+    public void meth16888() { }
+    public void meth16889() { }
+    public void meth16890() { }
+    public void meth16891() { }
+    public void meth16892() { }
+    public void meth16893() { }
+    public void meth16894() { }
+    public void meth16895() { }
+    public void meth16896() { }
+    public void meth16897() { }
+    public void meth16898() { }
+    public void meth16899() { }
+    public void meth16900() { }
+    public void meth16901() { }
+    public void meth16902() { }
+    public void meth16903() { }
+    public void meth16904() { }
+    public void meth16905() { }
+    public void meth16906() { }
+    public void meth16907() { }
+    public void meth16908() { }
+    public void meth16909() { }
+    public void meth16910() { }
+    public void meth16911() { }
+    public void meth16912() { }
+    public void meth16913() { }
+    public void meth16914() { }
+    public void meth16915() { }
+    public void meth16916() { }
+    public void meth16917() { }
+    public void meth16918() { }
+    public void meth16919() { }
+    public void meth16920() { }
+    public void meth16921() { }
+    public void meth16922() { }
+    public void meth16923() { }
+    public void meth16924() { }
+    public void meth16925() { }
+    public void meth16926() { }
+    public void meth16927() { }
+    public void meth16928() { }
+    public void meth16929() { }
+    public void meth16930() { }
+    public void meth16931() { }
+    public void meth16932() { }
+    public void meth16933() { }
+    public void meth16934() { }
+    public void meth16935() { }
+    public void meth16936() { }
+    public void meth16937() { }
+    public void meth16938() { }
+    public void meth16939() { }
+    public void meth16940() { }
+    public void meth16941() { }
+    public void meth16942() { }
+    public void meth16943() { }
+    public void meth16944() { }
+    public void meth16945() { }
+    public void meth16946() { }
+    public void meth16947() { }
+    public void meth16948() { }
+    public void meth16949() { }
+    public void meth16950() { }
+    public void meth16951() { }
+    public void meth16952() { }
+    public void meth16953() { }
+    public void meth16954() { }
+    public void meth16955() { }
+    public void meth16956() { }
+    public void meth16957() { }
+    public void meth16958() { }
+    public void meth16959() { }
+    public void meth16960() { }
+    public void meth16961() { }
+    public void meth16962() { }
+    public void meth16963() { }
+    public void meth16964() { }
+    public void meth16965() { }
+    public void meth16966() { }
+    public void meth16967() { }
+    public void meth16968() { }
+    public void meth16969() { }
+    public void meth16970() { }
+    public void meth16971() { }
+    public void meth16972() { }
+    public void meth16973() { }
+    public void meth16974() { }
+    public void meth16975() { }
+    public void meth16976() { }
+    public void meth16977() { }
+    public void meth16978() { }
+    public void meth16979() { }
+    public void meth16980() { }
+    public void meth16981() { }
+    public void meth16982() { }
+    public void meth16983() { }
+    public void meth16984() { }
+    public void meth16985() { }
+    public void meth16986() { }
+    public void meth16987() { }
+    public void meth16988() { }
+    public void meth16989() { }
+    public void meth16990() { }
+    public void meth16991() { }
+    public void meth16992() { }
+    public void meth16993() { }
+    public void meth16994() { }
+    public void meth16995() { }
+    public void meth16996() { }
+    public void meth16997() { }
+    public void meth16998() { }
+    public void meth16999() { }
+    public void meth17000() { }
+    public void meth17001() { }
+    public void meth17002() { }
+    public void meth17003() { }
+    public void meth17004() { }
+    public void meth17005() { }
+    public void meth17006() { }
+    public void meth17007() { }
+    public void meth17008() { }
+    public void meth17009() { }
+    public void meth17010() { }
+    public void meth17011() { }
+    public void meth17012() { }
+    public void meth17013() { }
+    public void meth17014() { }
+    public void meth17015() { }
+    public void meth17016() { }
+    public void meth17017() { }
+    public void meth17018() { }
+    public void meth17019() { }
+    public void meth17020() { }
+    public void meth17021() { }
+    public void meth17022() { }
+    public void meth17023() { }
+    public void meth17024() { }
+    public void meth17025() { }
+    public void meth17026() { }
+    public void meth17027() { }
+    public void meth17028() { }
+    public void meth17029() { }
+    public void meth17030() { }
+    public void meth17031() { }
+    public void meth17032() { }
+    public void meth17033() { }
+    public void meth17034() { }
+    public void meth17035() { }
+    public void meth17036() { }
+    public void meth17037() { }
+    public void meth17038() { }
+    public void meth17039() { }
+    public void meth17040() { }
+    public void meth17041() { }
+    public void meth17042() { }
+    public void meth17043() { }
+    public void meth17044() { }
+    public void meth17045() { }
+    public void meth17046() { }
+    public void meth17047() { }
+    public void meth17048() { }
+    public void meth17049() { }
+    public void meth17050() { }
+    public void meth17051() { }
+    public void meth17052() { }
+    public void meth17053() { }
+    public void meth17054() { }
+    public void meth17055() { }
+    public void meth17056() { }
+    public void meth17057() { }
+    public void meth17058() { }
+    public void meth17059() { }
+    public void meth17060() { }
+    public void meth17061() { }
+    public void meth17062() { }
+    public void meth17063() { }
+    public void meth17064() { }
+    public void meth17065() { }
+    public void meth17066() { }
+    public void meth17067() { }
+    public void meth17068() { }
+    public void meth17069() { }
+    public void meth17070() { }
+    public void meth17071() { }
+    public void meth17072() { }
+    public void meth17073() { }
+    public void meth17074() { }
+    public void meth17075() { }
+    public void meth17076() { }
+    public void meth17077() { }
+    public void meth17078() { }
+    public void meth17079() { }
+    public void meth17080() { }
+    public void meth17081() { }
+    public void meth17082() { }
+    public void meth17083() { }
+    public void meth17084() { }
+    public void meth17085() { }
+    public void meth17086() { }
+    public void meth17087() { }
+    public void meth17088() { }
+    public void meth17089() { }
+    public void meth17090() { }
+    public void meth17091() { }
+    public void meth17092() { }
+    public void meth17093() { }
+    public void meth17094() { }
+    public void meth17095() { }
+    public void meth17096() { }
+    public void meth17097() { }
+    public void meth17098() { }
+    public void meth17099() { }
+    public void meth17100() { }
+    public void meth17101() { }
+    public void meth17102() { }
+    public void meth17103() { }
+    public void meth17104() { }
+    public void meth17105() { }
+    public void meth17106() { }
+    public void meth17107() { }
+    public void meth17108() { }
+    public void meth17109() { }
+    public void meth17110() { }
+    public void meth17111() { }
+    public void meth17112() { }
+    public void meth17113() { }
+    public void meth17114() { }
+    public void meth17115() { }
+    public void meth17116() { }
+    public void meth17117() { }
+    public void meth17118() { }
+    public void meth17119() { }
+    public void meth17120() { }
+    public void meth17121() { }
+    public void meth17122() { }
+    public void meth17123() { }
+    public void meth17124() { }
+    public void meth17125() { }
+    public void meth17126() { }
+    public void meth17127() { }
+    public void meth17128() { }
+    public void meth17129() { }
+    public void meth17130() { }
+    public void meth17131() { }
+    public void meth17132() { }
+    public void meth17133() { }
+    public void meth17134() { }
+    public void meth17135() { }
+    public void meth17136() { }
+    public void meth17137() { }
+    public void meth17138() { }
+    public void meth17139() { }
+    public void meth17140() { }
+    public void meth17141() { }
+    public void meth17142() { }
+    public void meth17143() { }
+    public void meth17144() { }
+    public void meth17145() { }
+    public void meth17146() { }
+    public void meth17147() { }
+    public void meth17148() { }
+    public void meth17149() { }
+    public void meth17150() { }
+    public void meth17151() { }
+    public void meth17152() { }
+    public void meth17153() { }
+    public void meth17154() { }
+    public void meth17155() { }
+    public void meth17156() { }
+    public void meth17157() { }
+    public void meth17158() { }
+    public void meth17159() { }
+    public void meth17160() { }
+    public void meth17161() { }
+    public void meth17162() { }
+    public void meth17163() { }
+    public void meth17164() { }
+    public void meth17165() { }
+    public void meth17166() { }
+    public void meth17167() { }
+    public void meth17168() { }
+    public void meth17169() { }
+    public void meth17170() { }
+    public void meth17171() { }
+    public void meth17172() { }
+    public void meth17173() { }
+    public void meth17174() { }
+    public void meth17175() { }
+    public void meth17176() { }
+    public void meth17177() { }
+    public void meth17178() { }
+    public void meth17179() { }
+    public void meth17180() { }
+    public void meth17181() { }
+    public void meth17182() { }
+    public void meth17183() { }
+    public void meth17184() { }
+    public void meth17185() { }
+    public void meth17186() { }
+    public void meth17187() { }
+    public void meth17188() { }
+    public void meth17189() { }
+    public void meth17190() { }
+    public void meth17191() { }
+    public void meth17192() { }
+    public void meth17193() { }
+    public void meth17194() { }
+    public void meth17195() { }
+    public void meth17196() { }
+    public void meth17197() { }
+    public void meth17198() { }
+    public void meth17199() { }
+    public void meth17200() { }
+    public void meth17201() { }
+    public void meth17202() { }
+    public void meth17203() { }
+    public void meth17204() { }
+    public void meth17205() { }
+    public void meth17206() { }
+    public void meth17207() { }
+    public void meth17208() { }
+    public void meth17209() { }
+    public void meth17210() { }
+    public void meth17211() { }
+    public void meth17212() { }
+    public void meth17213() { }
+    public void meth17214() { }
+    public void meth17215() { }
+    public void meth17216() { }
+    public void meth17217() { }
+    public void meth17218() { }
+    public void meth17219() { }
+    public void meth17220() { }
+    public void meth17221() { }
+    public void meth17222() { }
+    public void meth17223() { }
+    public void meth17224() { }
+    public void meth17225() { }
+    public void meth17226() { }
+    public void meth17227() { }
+    public void meth17228() { }
+    public void meth17229() { }
+    public void meth17230() { }
+    public void meth17231() { }
+    public void meth17232() { }
+    public void meth17233() { }
+    public void meth17234() { }
+    public void meth17235() { }
+    public void meth17236() { }
+    public void meth17237() { }
+    public void meth17238() { }
+    public void meth17239() { }
+    public void meth17240() { }
+    public void meth17241() { }
+    public void meth17242() { }
+    public void meth17243() { }
+    public void meth17244() { }
+    public void meth17245() { }
+    public void meth17246() { }
+    public void meth17247() { }
+    public void meth17248() { }
+    public void meth17249() { }
+    public void meth17250() { }
+    public void meth17251() { }
+    public void meth17252() { }
+    public void meth17253() { }
+    public void meth17254() { }
+    public void meth17255() { }
+    public void meth17256() { }
+    public void meth17257() { }
+    public void meth17258() { }
+    public void meth17259() { }
+    public void meth17260() { }
+    public void meth17261() { }
+    public void meth17262() { }
+    public void meth17263() { }
+    public void meth17264() { }
+    public void meth17265() { }
+    public void meth17266() { }
+    public void meth17267() { }
+    public void meth17268() { }
+    public void meth17269() { }
+    public void meth17270() { }
+    public void meth17271() { }
+    public void meth17272() { }
+    public void meth17273() { }
+    public void meth17274() { }
+    public void meth17275() { }
+    public void meth17276() { }
+    public void meth17277() { }
+    public void meth17278() { }
+    public void meth17279() { }
+    public void meth17280() { }
+    public void meth17281() { }
+    public void meth17282() { }
+    public void meth17283() { }
+    public void meth17284() { }
+    public void meth17285() { }
+    public void meth17286() { }
+    public void meth17287() { }
+    public void meth17288() { }
+    public void meth17289() { }
+    public void meth17290() { }
+    public void meth17291() { }
+    public void meth17292() { }
+    public void meth17293() { }
+    public void meth17294() { }
+    public void meth17295() { }
+    public void meth17296() { }
+    public void meth17297() { }
+    public void meth17298() { }
+    public void meth17299() { }
+    public void meth17300() { }
+    public void meth17301() { }
+    public void meth17302() { }
+    public void meth17303() { }
+    public void meth17304() { }
+    public void meth17305() { }
+    public void meth17306() { }
+    public void meth17307() { }
+    public void meth17308() { }
+    public void meth17309() { }
+    public void meth17310() { }
+    public void meth17311() { }
+    public void meth17312() { }
+    public void meth17313() { }
+    public void meth17314() { }
+    public void meth17315() { }
+    public void meth17316() { }
+    public void meth17317() { }
+    public void meth17318() { }
+    public void meth17319() { }
+    public void meth17320() { }
+    public void meth17321() { }
+    public void meth17322() { }
+    public void meth17323() { }
+    public void meth17324() { }
+    public void meth17325() { }
+    public void meth17326() { }
+    public void meth17327() { }
+    public void meth17328() { }
+    public void meth17329() { }
+    public void meth17330() { }
+    public void meth17331() { }
+    public void meth17332() { }
+    public void meth17333() { }
+    public void meth17334() { }
+    public void meth17335() { }
+    public void meth17336() { }
+    public void meth17337() { }
+    public void meth17338() { }
+    public void meth17339() { }
+    public void meth17340() { }
+    public void meth17341() { }
+    public void meth17342() { }
+    public void meth17343() { }
+    public void meth17344() { }
+    public void meth17345() { }
+    public void meth17346() { }
+    public void meth17347() { }
+    public void meth17348() { }
+    public void meth17349() { }
+    public void meth17350() { }
+    public void meth17351() { }
+    public void meth17352() { }
+    public void meth17353() { }
+    public void meth17354() { }
+    public void meth17355() { }
+    public void meth17356() { }
+    public void meth17357() { }
+    public void meth17358() { }
+    public void meth17359() { }
+    public void meth17360() { }
+    public void meth17361() { }
+    public void meth17362() { }
+    public void meth17363() { }
+    public void meth17364() { }
+    public void meth17365() { }
+    public void meth17366() { }
+    public void meth17367() { }
+    public void meth17368() { }
+    public void meth17369() { }
+    public void meth17370() { }
+    public void meth17371() { }
+    public void meth17372() { }
+    public void meth17373() { }
+    public void meth17374() { }
+    public void meth17375() { }
+    public void meth17376() { }
+    public void meth17377() { }
+    public void meth17378() { }
+    public void meth17379() { }
+    public void meth17380() { }
+    public void meth17381() { }
+    public void meth17382() { }
+    public void meth17383() { }
+    public void meth17384() { }
+    public void meth17385() { }
+    public void meth17386() { }
+    public void meth17387() { }
+    public void meth17388() { }
+    public void meth17389() { }
+    public void meth17390() { }
+    public void meth17391() { }
+    public void meth17392() { }
+    public void meth17393() { }
+    public void meth17394() { }
+    public void meth17395() { }
+    public void meth17396() { }
+    public void meth17397() { }
+    public void meth17398() { }
+    public void meth17399() { }
+    public void meth17400() { }
+    public void meth17401() { }
+    public void meth17402() { }
+    public void meth17403() { }
+    public void meth17404() { }
+    public void meth17405() { }
+    public void meth17406() { }
+    public void meth17407() { }
+    public void meth17408() { }
+    public void meth17409() { }
+    public void meth17410() { }
+    public void meth17411() { }
+    public void meth17412() { }
+    public void meth17413() { }
+    public void meth17414() { }
+    public void meth17415() { }
+    public void meth17416() { }
+    public void meth17417() { }
+    public void meth17418() { }
+    public void meth17419() { }
+    public void meth17420() { }
+    public void meth17421() { }
+    public void meth17422() { }
+    public void meth17423() { }
+    public void meth17424() { }
+    public void meth17425() { }
+    public void meth17426() { }
+    public void meth17427() { }
+    public void meth17428() { }
+    public void meth17429() { }
+    public void meth17430() { }
+    public void meth17431() { }
+    public void meth17432() { }
+    public void meth17433() { }
+    public void meth17434() { }
+    public void meth17435() { }
+    public void meth17436() { }
+    public void meth17437() { }
+    public void meth17438() { }
+    public void meth17439() { }
+    public void meth17440() { }
+    public void meth17441() { }
+    public void meth17442() { }
+    public void meth17443() { }
+    public void meth17444() { }
+    public void meth17445() { }
+    public void meth17446() { }
+    public void meth17447() { }
+    public void meth17448() { }
+    public void meth17449() { }
+    public void meth17450() { }
+    public void meth17451() { }
+    public void meth17452() { }
+    public void meth17453() { }
+    public void meth17454() { }
+    public void meth17455() { }
+    public void meth17456() { }
+    public void meth17457() { }
+    public void meth17458() { }
+    public void meth17459() { }
+    public void meth17460() { }
+    public void meth17461() { }
+    public void meth17462() { }
+    public void meth17463() { }
+    public void meth17464() { }
+    public void meth17465() { }
+    public void meth17466() { }
+    public void meth17467() { }
+    public void meth17468() { }
+    public void meth17469() { }
+    public void meth17470() { }
+    public void meth17471() { }
+    public void meth17472() { }
+    public void meth17473() { }
+    public void meth17474() { }
+    public void meth17475() { }
+    public void meth17476() { }
+    public void meth17477() { }
+    public void meth17478() { }
+    public void meth17479() { }
+    public void meth17480() { }
+    public void meth17481() { }
+    public void meth17482() { }
+    public void meth17483() { }
+    public void meth17484() { }
+    public void meth17485() { }
+    public void meth17486() { }
+    public void meth17487() { }
+    public void meth17488() { }
+    public void meth17489() { }
+    public void meth17490() { }
+    public void meth17491() { }
+    public void meth17492() { }
+    public void meth17493() { }
+    public void meth17494() { }
+    public void meth17495() { }
+    public void meth17496() { }
+    public void meth17497() { }
+    public void meth17498() { }
+    public void meth17499() { }
+    public void meth17500() { }
+    public void meth17501() { }
+    public void meth17502() { }
+    public void meth17503() { }
+    public void meth17504() { }
+    public void meth17505() { }
+    public void meth17506() { }
+    public void meth17507() { }
+    public void meth17508() { }
+    public void meth17509() { }
+    public void meth17510() { }
+    public void meth17511() { }
+    public void meth17512() { }
+    public void meth17513() { }
+    public void meth17514() { }
+    public void meth17515() { }
+    public void meth17516() { }
+    public void meth17517() { }
+    public void meth17518() { }
+    public void meth17519() { }
+    public void meth17520() { }
+    public void meth17521() { }
+    public void meth17522() { }
+    public void meth17523() { }
+    public void meth17524() { }
+    public void meth17525() { }
+    public void meth17526() { }
+    public void meth17527() { }
+    public void meth17528() { }
+    public void meth17529() { }
+    public void meth17530() { }
+    public void meth17531() { }
+    public void meth17532() { }
+    public void meth17533() { }
+    public void meth17534() { }
+    public void meth17535() { }
+    public void meth17536() { }
+    public void meth17537() { }
+    public void meth17538() { }
+    public void meth17539() { }
+    public void meth17540() { }
+    public void meth17541() { }
+    public void meth17542() { }
+    public void meth17543() { }
+    public void meth17544() { }
+    public void meth17545() { }
+    public void meth17546() { }
+    public void meth17547() { }
+    public void meth17548() { }
+    public void meth17549() { }
+    public void meth17550() { }
+    public void meth17551() { }
+    public void meth17552() { }
+    public void meth17553() { }
+    public void meth17554() { }
+    public void meth17555() { }
+    public void meth17556() { }
+    public void meth17557() { }
+    public void meth17558() { }
+    public void meth17559() { }
+    public void meth17560() { }
+    public void meth17561() { }
+    public void meth17562() { }
+    public void meth17563() { }
+    public void meth17564() { }
+    public void meth17565() { }
+    public void meth17566() { }
+    public void meth17567() { }
+    public void meth17568() { }
+    public void meth17569() { }
+    public void meth17570() { }
+    public void meth17571() { }
+    public void meth17572() { }
+    public void meth17573() { }
+    public void meth17574() { }
+    public void meth17575() { }
+    public void meth17576() { }
+    public void meth17577() { }
+    public void meth17578() { }
+    public void meth17579() { }
+    public void meth17580() { }
+    public void meth17581() { }
+    public void meth17582() { }
+    public void meth17583() { }
+    public void meth17584() { }
+    public void meth17585() { }
+    public void meth17586() { }
+    public void meth17587() { }
+    public void meth17588() { }
+    public void meth17589() { }
+    public void meth17590() { }
+    public void meth17591() { }
+    public void meth17592() { }
+    public void meth17593() { }
+    public void meth17594() { }
+    public void meth17595() { }
+    public void meth17596() { }
+    public void meth17597() { }
+    public void meth17598() { }
+    public void meth17599() { }
+    public void meth17600() { }
+    public void meth17601() { }
+    public void meth17602() { }
+    public void meth17603() { }
+    public void meth17604() { }
+    public void meth17605() { }
+    public void meth17606() { }
+    public void meth17607() { }
+    public void meth17608() { }
+    public void meth17609() { }
+    public void meth17610() { }
+    public void meth17611() { }
+    public void meth17612() { }
+    public void meth17613() { }
+    public void meth17614() { }
+    public void meth17615() { }
+    public void meth17616() { }
+    public void meth17617() { }
+    public void meth17618() { }
+    public void meth17619() { }
+    public void meth17620() { }
+    public void meth17621() { }
+    public void meth17622() { }
+    public void meth17623() { }
+    public void meth17624() { }
+    public void meth17625() { }
+    public void meth17626() { }
+    public void meth17627() { }
+    public void meth17628() { }
+    public void meth17629() { }
+    public void meth17630() { }
+    public void meth17631() { }
+    public void meth17632() { }
+    public void meth17633() { }
+    public void meth17634() { }
+    public void meth17635() { }
+    public void meth17636() { }
+    public void meth17637() { }
+    public void meth17638() { }
+    public void meth17639() { }
+    public void meth17640() { }
+    public void meth17641() { }
+    public void meth17642() { }
+    public void meth17643() { }
+    public void meth17644() { }
+    public void meth17645() { }
+    public void meth17646() { }
+    public void meth17647() { }
+    public void meth17648() { }
+    public void meth17649() { }
+    public void meth17650() { }
+    public void meth17651() { }
+    public void meth17652() { }
+    public void meth17653() { }
+    public void meth17654() { }
+    public void meth17655() { }
+    public void meth17656() { }
+    public void meth17657() { }
+    public void meth17658() { }
+    public void meth17659() { }
+    public void meth17660() { }
+    public void meth17661() { }
+    public void meth17662() { }
+    public void meth17663() { }
+    public void meth17664() { }
+    public void meth17665() { }
+    public void meth17666() { }
+    public void meth17667() { }
+    public void meth17668() { }
+    public void meth17669() { }
+    public void meth17670() { }
+    public void meth17671() { }
+    public void meth17672() { }
+    public void meth17673() { }
+    public void meth17674() { }
+    public void meth17675() { }
+    public void meth17676() { }
+    public void meth17677() { }
+    public void meth17678() { }
+    public void meth17679() { }
+    public void meth17680() { }
+    public void meth17681() { }
+    public void meth17682() { }
+    public void meth17683() { }
+    public void meth17684() { }
+    public void meth17685() { }
+    public void meth17686() { }
+    public void meth17687() { }
+    public void meth17688() { }
+    public void meth17689() { }
+    public void meth17690() { }
+    public void meth17691() { }
+    public void meth17692() { }
+    public void meth17693() { }
+    public void meth17694() { }
+    public void meth17695() { }
+    public void meth17696() { }
+    public void meth17697() { }
+    public void meth17698() { }
+    public void meth17699() { }
+    public void meth17700() { }
+    public void meth17701() { }
+    public void meth17702() { }
+    public void meth17703() { }
+    public void meth17704() { }
+    public void meth17705() { }
+    public void meth17706() { }
+    public void meth17707() { }
+    public void meth17708() { }
+    public void meth17709() { }
+    public void meth17710() { }
+    public void meth17711() { }
+    public void meth17712() { }
+    public void meth17713() { }
+    public void meth17714() { }
+    public void meth17715() { }
+    public void meth17716() { }
+    public void meth17717() { }
+    public void meth17718() { }
+    public void meth17719() { }
+    public void meth17720() { }
+    public void meth17721() { }
+    public void meth17722() { }
+    public void meth17723() { }
+    public void meth17724() { }
+    public void meth17725() { }
+    public void meth17726() { }
+    public void meth17727() { }
+    public void meth17728() { }
+    public void meth17729() { }
+    public void meth17730() { }
+    public void meth17731() { }
+    public void meth17732() { }
+    public void meth17733() { }
+    public void meth17734() { }
+    public void meth17735() { }
+    public void meth17736() { }
+    public void meth17737() { }
+    public void meth17738() { }
+    public void meth17739() { }
+    public void meth17740() { }
+    public void meth17741() { }
+    public void meth17742() { }
+    public void meth17743() { }
+    public void meth17744() { }
+    public void meth17745() { }
+    public void meth17746() { }
+    public void meth17747() { }
+    public void meth17748() { }
+    public void meth17749() { }
+    public void meth17750() { }
+    public void meth17751() { }
+    public void meth17752() { }
+    public void meth17753() { }
+    public void meth17754() { }
+    public void meth17755() { }
+    public void meth17756() { }
+    public void meth17757() { }
+    public void meth17758() { }
+    public void meth17759() { }
+    public void meth17760() { }
+    public void meth17761() { }
+    public void meth17762() { }
+    public void meth17763() { }
+    public void meth17764() { }
+    public void meth17765() { }
+    public void meth17766() { }
+    public void meth17767() { }
+    public void meth17768() { }
+    public void meth17769() { }
+    public void meth17770() { }
+    public void meth17771() { }
+    public void meth17772() { }
+    public void meth17773() { }
+    public void meth17774() { }
+    public void meth17775() { }
+    public void meth17776() { }
+    public void meth17777() { }
+    public void meth17778() { }
+    public void meth17779() { }
+    public void meth17780() { }
+    public void meth17781() { }
+    public void meth17782() { }
+    public void meth17783() { }
+    public void meth17784() { }
+    public void meth17785() { }
+    public void meth17786() { }
+    public void meth17787() { }
+    public void meth17788() { }
+    public void meth17789() { }
+    public void meth17790() { }
+    public void meth17791() { }
+    public void meth17792() { }
+    public void meth17793() { }
+    public void meth17794() { }
+    public void meth17795() { }
+    public void meth17796() { }
+    public void meth17797() { }
+    public void meth17798() { }
+    public void meth17799() { }
+    public void meth17800() { }
+    public void meth17801() { }
+    public void meth17802() { }
+    public void meth17803() { }
+    public void meth17804() { }
+    public void meth17805() { }
+    public void meth17806() { }
+    public void meth17807() { }
+    public void meth17808() { }
+    public void meth17809() { }
+    public void meth17810() { }
+    public void meth17811() { }
+    public void meth17812() { }
+    public void meth17813() { }
+    public void meth17814() { }
+    public void meth17815() { }
+    public void meth17816() { }
+    public void meth17817() { }
+    public void meth17818() { }
+    public void meth17819() { }
+    public void meth17820() { }
+    public void meth17821() { }
+    public void meth17822() { }
+    public void meth17823() { }
+    public void meth17824() { }
+    public void meth17825() { }
+    public void meth17826() { }
+    public void meth17827() { }
+    public void meth17828() { }
+    public void meth17829() { }
+    public void meth17830() { }
+    public void meth17831() { }
+    public void meth17832() { }
+    public void meth17833() { }
+    public void meth17834() { }
+    public void meth17835() { }
+    public void meth17836() { }
+    public void meth17837() { }
+    public void meth17838() { }
+    public void meth17839() { }
+    public void meth17840() { }
+    public void meth17841() { }
+    public void meth17842() { }
+    public void meth17843() { }
+    public void meth17844() { }
+    public void meth17845() { }
+    public void meth17846() { }
+    public void meth17847() { }
+    public void meth17848() { }
+    public void meth17849() { }
+    public void meth17850() { }
+    public void meth17851() { }
+    public void meth17852() { }
+    public void meth17853() { }
+    public void meth17854() { }
+    public void meth17855() { }
+    public void meth17856() { }
+    public void meth17857() { }
+    public void meth17858() { }
+    public void meth17859() { }
+    public void meth17860() { }
+    public void meth17861() { }
+    public void meth17862() { }
+    public void meth17863() { }
+    public void meth17864() { }
+    public void meth17865() { }
+    public void meth17866() { }
+    public void meth17867() { }
+    public void meth17868() { }
+    public void meth17869() { }
+    public void meth17870() { }
+    public void meth17871() { }
+    public void meth17872() { }
+    public void meth17873() { }
+    public void meth17874() { }
+    public void meth17875() { }
+    public void meth17876() { }
+    public void meth17877() { }
+    public void meth17878() { }
+    public void meth17879() { }
+    public void meth17880() { }
+    public void meth17881() { }
+    public void meth17882() { }
+    public void meth17883() { }
+    public void meth17884() { }
+    public void meth17885() { }
+    public void meth17886() { }
+    public void meth17887() { }
+    public void meth17888() { }
+    public void meth17889() { }
+    public void meth17890() { }
+    public void meth17891() { }
+    public void meth17892() { }
+    public void meth17893() { }
+    public void meth17894() { }
+    public void meth17895() { }
+    public void meth17896() { }
+    public void meth17897() { }
+    public void meth17898() { }
+    public void meth17899() { }
+    public void meth17900() { }
+    public void meth17901() { }
+    public void meth17902() { }
+    public void meth17903() { }
+    public void meth17904() { }
+    public void meth17905() { }
+    public void meth17906() { }
+    public void meth17907() { }
+    public void meth17908() { }
+    public void meth17909() { }
+    public void meth17910() { }
+    public void meth17911() { }
+    public void meth17912() { }
+    public void meth17913() { }
+    public void meth17914() { }
+    public void meth17915() { }
+    public void meth17916() { }
+    public void meth17917() { }
+    public void meth17918() { }
+    public void meth17919() { }
+    public void meth17920() { }
+    public void meth17921() { }
+    public void meth17922() { }
+    public void meth17923() { }
+    public void meth17924() { }
+    public void meth17925() { }
+    public void meth17926() { }
+    public void meth17927() { }
+    public void meth17928() { }
+    public void meth17929() { }
+    public void meth17930() { }
+    public void meth17931() { }
+    public void meth17932() { }
+    public void meth17933() { }
+    public void meth17934() { }
+    public void meth17935() { }
+    public void meth17936() { }
+    public void meth17937() { }
+    public void meth17938() { }
+    public void meth17939() { }
+    public void meth17940() { }
+    public void meth17941() { }
+    public void meth17942() { }
+    public void meth17943() { }
+    public void meth17944() { }
+    public void meth17945() { }
+    public void meth17946() { }
+    public void meth17947() { }
+    public void meth17948() { }
+    public void meth17949() { }
+    public void meth17950() { }
+    public void meth17951() { }
+    public void meth17952() { }
+    public void meth17953() { }
+    public void meth17954() { }
+    public void meth17955() { }
+    public void meth17956() { }
+    public void meth17957() { }
+    public void meth17958() { }
+    public void meth17959() { }
+    public void meth17960() { }
+    public void meth17961() { }
+    public void meth17962() { }
+    public void meth17963() { }
+    public void meth17964() { }
+    public void meth17965() { }
+    public void meth17966() { }
+    public void meth17967() { }
+    public void meth17968() { }
+    public void meth17969() { }
+    public void meth17970() { }
+    public void meth17971() { }
+    public void meth17972() { }
+    public void meth17973() { }
+    public void meth17974() { }
+    public void meth17975() { }
+    public void meth17976() { }
+    public void meth17977() { }
+    public void meth17978() { }
+    public void meth17979() { }
+    public void meth17980() { }
+    public void meth17981() { }
+    public void meth17982() { }
+    public void meth17983() { }
+    public void meth17984() { }
+    public void meth17985() { }
+    public void meth17986() { }
+    public void meth17987() { }
+    public void meth17988() { }
+    public void meth17989() { }
+    public void meth17990() { }
+    public void meth17991() { }
+    public void meth17992() { }
+    public void meth17993() { }
+    public void meth17994() { }
+    public void meth17995() { }
+    public void meth17996() { }
+    public void meth17997() { }
+    public void meth17998() { }
+    public void meth17999() { }
+    public void meth18000() { }
+    public void meth18001() { }
+    public void meth18002() { }
+    public void meth18003() { }
+    public void meth18004() { }
+    public void meth18005() { }
+    public void meth18006() { }
+    public void meth18007() { }
+    public void meth18008() { }
+    public void meth18009() { }
+    public void meth18010() { }
+    public void meth18011() { }
+    public void meth18012() { }
+    public void meth18013() { }
+    public void meth18014() { }
+    public void meth18015() { }
+    public void meth18016() { }
+    public void meth18017() { }
+    public void meth18018() { }
+    public void meth18019() { }
+    public void meth18020() { }
+    public void meth18021() { }
+    public void meth18022() { }
+    public void meth18023() { }
+    public void meth18024() { }
+    public void meth18025() { }
+    public void meth18026() { }
+    public void meth18027() { }
+    public void meth18028() { }
+    public void meth18029() { }
+    public void meth18030() { }
+    public void meth18031() { }
+    public void meth18032() { }
+    public void meth18033() { }
+    public void meth18034() { }
+    public void meth18035() { }
+    public void meth18036() { }
+    public void meth18037() { }
+    public void meth18038() { }
+    public void meth18039() { }
+    public void meth18040() { }
+    public void meth18041() { }
+    public void meth18042() { }
+    public void meth18043() { }
+    public void meth18044() { }
+    public void meth18045() { }
+    public void meth18046() { }
+    public void meth18047() { }
+    public void meth18048() { }
+    public void meth18049() { }
+    public void meth18050() { }
+    public void meth18051() { }
+    public void meth18052() { }
+    public void meth18053() { }
+    public void meth18054() { }
+    public void meth18055() { }
+    public void meth18056() { }
+    public void meth18057() { }
+    public void meth18058() { }
+    public void meth18059() { }
+    public void meth18060() { }
+    public void meth18061() { }
+    public void meth18062() { }
+    public void meth18063() { }
+    public void meth18064() { }
+    public void meth18065() { }
+    public void meth18066() { }
+    public void meth18067() { }
+    public void meth18068() { }
+    public void meth18069() { }
+    public void meth18070() { }
+    public void meth18071() { }
+    public void meth18072() { }
+    public void meth18073() { }
+    public void meth18074() { }
+    public void meth18075() { }
+    public void meth18076() { }
+    public void meth18077() { }
+    public void meth18078() { }
+    public void meth18079() { }
+    public void meth18080() { }
+    public void meth18081() { }
+    public void meth18082() { }
+    public void meth18083() { }
+    public void meth18084() { }
+    public void meth18085() { }
+    public void meth18086() { }
+    public void meth18087() { }
+    public void meth18088() { }
+    public void meth18089() { }
+    public void meth18090() { }
+    public void meth18091() { }
+    public void meth18092() { }
+    public void meth18093() { }
+    public void meth18094() { }
+    public void meth18095() { }
+    public void meth18096() { }
+    public void meth18097() { }
+    public void meth18098() { }
+    public void meth18099() { }
+    public void meth18100() { }
+    public void meth18101() { }
+    public void meth18102() { }
+    public void meth18103() { }
+    public void meth18104() { }
+    public void meth18105() { }
+    public void meth18106() { }
+    public void meth18107() { }
+    public void meth18108() { }
+    public void meth18109() { }
+    public void meth18110() { }
+    public void meth18111() { }
+    public void meth18112() { }
+    public void meth18113() { }
+    public void meth18114() { }
+    public void meth18115() { }
+    public void meth18116() { }
+    public void meth18117() { }
+    public void meth18118() { }
+    public void meth18119() { }
+    public void meth18120() { }
+    public void meth18121() { }
+    public void meth18122() { }
+    public void meth18123() { }
+    public void meth18124() { }
+    public void meth18125() { }
+    public void meth18126() { }
+    public void meth18127() { }
+    public void meth18128() { }
+    public void meth18129() { }
+    public void meth18130() { }
+    public void meth18131() { }
+    public void meth18132() { }
+    public void meth18133() { }
+    public void meth18134() { }
+    public void meth18135() { }
+    public void meth18136() { }
+    public void meth18137() { }
+    public void meth18138() { }
+    public void meth18139() { }
+    public void meth18140() { }
+    public void meth18141() { }
+    public void meth18142() { }
+    public void meth18143() { }
+    public void meth18144() { }
+    public void meth18145() { }
+    public void meth18146() { }
+    public void meth18147() { }
+    public void meth18148() { }
+    public void meth18149() { }
+    public void meth18150() { }
+    public void meth18151() { }
+    public void meth18152() { }
+    public void meth18153() { }
+    public void meth18154() { }
+    public void meth18155() { }
+    public void meth18156() { }
+    public void meth18157() { }
+    public void meth18158() { }
+    public void meth18159() { }
+    public void meth18160() { }
+    public void meth18161() { }
+    public void meth18162() { }
+    public void meth18163() { }
+    public void meth18164() { }
+    public void meth18165() { }
+    public void meth18166() { }
+    public void meth18167() { }
+    public void meth18168() { }
+    public void meth18169() { }
+    public void meth18170() { }
+    public void meth18171() { }
+    public void meth18172() { }
+    public void meth18173() { }
+    public void meth18174() { }
+    public void meth18175() { }
+    public void meth18176() { }
+    public void meth18177() { }
+    public void meth18178() { }
+    public void meth18179() { }
+    public void meth18180() { }
+    public void meth18181() { }
+    public void meth18182() { }
+    public void meth18183() { }
+    public void meth18184() { }
+    public void meth18185() { }
+    public void meth18186() { }
+    public void meth18187() { }
+    public void meth18188() { }
+    public void meth18189() { }
+    public void meth18190() { }
+    public void meth18191() { }
+    public void meth18192() { }
+    public void meth18193() { }
+    public void meth18194() { }
+    public void meth18195() { }
+    public void meth18196() { }
+    public void meth18197() { }
+    public void meth18198() { }
+    public void meth18199() { }
+    public void meth18200() { }
+    public void meth18201() { }
+    public void meth18202() { }
+    public void meth18203() { }
+    public void meth18204() { }
+    public void meth18205() { }
+    public void meth18206() { }
+    public void meth18207() { }
+    public void meth18208() { }
+    public void meth18209() { }
+    public void meth18210() { }
+    public void meth18211() { }
+    public void meth18212() { }
+    public void meth18213() { }
+    public void meth18214() { }
+    public void meth18215() { }
+    public void meth18216() { }
+    public void meth18217() { }
+    public void meth18218() { }
+    public void meth18219() { }
+    public void meth18220() { }
+    public void meth18221() { }
+    public void meth18222() { }
+    public void meth18223() { }
+    public void meth18224() { }
+    public void meth18225() { }
+    public void meth18226() { }
+    public void meth18227() { }
+    public void meth18228() { }
+    public void meth18229() { }
+    public void meth18230() { }
+    public void meth18231() { }
+    public void meth18232() { }
+    public void meth18233() { }
+    public void meth18234() { }
+    public void meth18235() { }
+    public void meth18236() { }
+    public void meth18237() { }
+    public void meth18238() { }
+    public void meth18239() { }
+    public void meth18240() { }
+    public void meth18241() { }
+    public void meth18242() { }
+    public void meth18243() { }
+    public void meth18244() { }
+    public void meth18245() { }
+    public void meth18246() { }
+    public void meth18247() { }
+    public void meth18248() { }
+    public void meth18249() { }
+    public void meth18250() { }
+    public void meth18251() { }
+    public void meth18252() { }
+    public void meth18253() { }
+    public void meth18254() { }
+    public void meth18255() { }
+    public void meth18256() { }
+    public void meth18257() { }
+    public void meth18258() { }
+    public void meth18259() { }
+    public void meth18260() { }
+    public void meth18261() { }
+    public void meth18262() { }
+    public void meth18263() { }
+    public void meth18264() { }
+    public void meth18265() { }
+    public void meth18266() { }
+    public void meth18267() { }
+    public void meth18268() { }
+    public void meth18269() { }
+    public void meth18270() { }
+    public void meth18271() { }
+    public void meth18272() { }
+    public void meth18273() { }
+    public void meth18274() { }
+    public void meth18275() { }
+    public void meth18276() { }
+    public void meth18277() { }
+    public void meth18278() { }
+    public void meth18279() { }
+    public void meth18280() { }
+    public void meth18281() { }
+    public void meth18282() { }
+    public void meth18283() { }
+    public void meth18284() { }
+    public void meth18285() { }
+    public void meth18286() { }
+    public void meth18287() { }
+    public void meth18288() { }
+    public void meth18289() { }
+    public void meth18290() { }
+    public void meth18291() { }
+    public void meth18292() { }
+    public void meth18293() { }
+    public void meth18294() { }
+    public void meth18295() { }
+    public void meth18296() { }
+    public void meth18297() { }
+    public void meth18298() { }
+    public void meth18299() { }
+    public void meth18300() { }
+    public void meth18301() { }
+    public void meth18302() { }
+    public void meth18303() { }
+    public void meth18304() { }
+    public void meth18305() { }
+    public void meth18306() { }
+    public void meth18307() { }
+    public void meth18308() { }
+    public void meth18309() { }
+    public void meth18310() { }
+    public void meth18311() { }
+    public void meth18312() { }
+    public void meth18313() { }
+    public void meth18314() { }
+    public void meth18315() { }
+    public void meth18316() { }
+    public void meth18317() { }
+    public void meth18318() { }
+    public void meth18319() { }
+    public void meth18320() { }
+    public void meth18321() { }
+    public void meth18322() { }
+    public void meth18323() { }
+    public void meth18324() { }
+    public void meth18325() { }
+    public void meth18326() { }
+    public void meth18327() { }
+    public void meth18328() { }
+    public void meth18329() { }
+    public void meth18330() { }
+    public void meth18331() { }
+    public void meth18332() { }
+    public void meth18333() { }
+    public void meth18334() { }
+    public void meth18335() { }
+    public void meth18336() { }
+    public void meth18337() { }
+    public void meth18338() { }
+    public void meth18339() { }
+    public void meth18340() { }
+    public void meth18341() { }
+    public void meth18342() { }
+    public void meth18343() { }
+    public void meth18344() { }
+    public void meth18345() { }
+    public void meth18346() { }
+    public void meth18347() { }
+    public void meth18348() { }
+    public void meth18349() { }
+    public void meth18350() { }
+    public void meth18351() { }
+    public void meth18352() { }
+    public void meth18353() { }
+    public void meth18354() { }
+    public void meth18355() { }
+    public void meth18356() { }
+    public void meth18357() { }
+    public void meth18358() { }
+    public void meth18359() { }
+    public void meth18360() { }
+    public void meth18361() { }
+    public void meth18362() { }
+    public void meth18363() { }
+    public void meth18364() { }
+    public void meth18365() { }
+    public void meth18366() { }
+    public void meth18367() { }
+    public void meth18368() { }
+    public void meth18369() { }
+    public void meth18370() { }
+    public void meth18371() { }
+    public void meth18372() { }
+    public void meth18373() { }
+    public void meth18374() { }
+    public void meth18375() { }
+    public void meth18376() { }
+    public void meth18377() { }
+    public void meth18378() { }
+    public void meth18379() { }
+    public void meth18380() { }
+    public void meth18381() { }
+    public void meth18382() { }
+    public void meth18383() { }
+    public void meth18384() { }
+    public void meth18385() { }
+    public void meth18386() { }
+    public void meth18387() { }
+    public void meth18388() { }
+    public void meth18389() { }
+    public void meth18390() { }
+    public void meth18391() { }
+    public void meth18392() { }
+    public void meth18393() { }
+    public void meth18394() { }
+    public void meth18395() { }
+    public void meth18396() { }
+    public void meth18397() { }
+    public void meth18398() { }
+    public void meth18399() { }
+    public void meth18400() { }
+    public void meth18401() { }
+    public void meth18402() { }
+    public void meth18403() { }
+    public void meth18404() { }
+    public void meth18405() { }
+    public void meth18406() { }
+    public void meth18407() { }
+    public void meth18408() { }
+    public void meth18409() { }
+    public void meth18410() { }
+    public void meth18411() { }
+    public void meth18412() { }
+    public void meth18413() { }
+    public void meth18414() { }
+    public void meth18415() { }
+    public void meth18416() { }
+    public void meth18417() { }
+    public void meth18418() { }
+    public void meth18419() { }
+    public void meth18420() { }
+    public void meth18421() { }
+    public void meth18422() { }
+    public void meth18423() { }
+    public void meth18424() { }
+    public void meth18425() { }
+    public void meth18426() { }
+    public void meth18427() { }
+    public void meth18428() { }
+    public void meth18429() { }
+    public void meth18430() { }
+    public void meth18431() { }
+    public void meth18432() { }
+    public void meth18433() { }
+    public void meth18434() { }
+    public void meth18435() { }
+    public void meth18436() { }
+    public void meth18437() { }
+    public void meth18438() { }
+    public void meth18439() { }
+    public void meth18440() { }
+    public void meth18441() { }
+    public void meth18442() { }
+    public void meth18443() { }
+    public void meth18444() { }
+    public void meth18445() { }
+    public void meth18446() { }
+    public void meth18447() { }
+    public void meth18448() { }
+    public void meth18449() { }
+    public void meth18450() { }
+    public void meth18451() { }
+    public void meth18452() { }
+    public void meth18453() { }
+    public void meth18454() { }
+    public void meth18455() { }
+    public void meth18456() { }
+    public void meth18457() { }
+    public void meth18458() { }
+    public void meth18459() { }
+    public void meth18460() { }
+    public void meth18461() { }
+    public void meth18462() { }
+    public void meth18463() { }
+    public void meth18464() { }
+    public void meth18465() { }
+    public void meth18466() { }
+    public void meth18467() { }
+    public void meth18468() { }
+    public void meth18469() { }
+    public void meth18470() { }
+    public void meth18471() { }
+    public void meth18472() { }
+    public void meth18473() { }
+    public void meth18474() { }
+    public void meth18475() { }
+    public void meth18476() { }
+    public void meth18477() { }
+    public void meth18478() { }
+    public void meth18479() { }
+    public void meth18480() { }
+    public void meth18481() { }
+    public void meth18482() { }
+    public void meth18483() { }
+    public void meth18484() { }
+    public void meth18485() { }
+    public void meth18486() { }
+    public void meth18487() { }
+    public void meth18488() { }
+    public void meth18489() { }
+    public void meth18490() { }
+    public void meth18491() { }
+    public void meth18492() { }
+    public void meth18493() { }
+    public void meth18494() { }
+    public void meth18495() { }
+    public void meth18496() { }
+    public void meth18497() { }
+    public void meth18498() { }
+    public void meth18499() { }
+    public void meth18500() { }
+    public void meth18501() { }
+    public void meth18502() { }
+    public void meth18503() { }
+    public void meth18504() { }
+    public void meth18505() { }
+    public void meth18506() { }
+    public void meth18507() { }
+    public void meth18508() { }
+    public void meth18509() { }
+    public void meth18510() { }
+    public void meth18511() { }
+    public void meth18512() { }
+    public void meth18513() { }
+    public void meth18514() { }
+    public void meth18515() { }
+    public void meth18516() { }
+    public void meth18517() { }
+    public void meth18518() { }
+    public void meth18519() { }
+    public void meth18520() { }
+    public void meth18521() { }
+    public void meth18522() { }
+    public void meth18523() { }
+    public void meth18524() { }
+    public void meth18525() { }
+    public void meth18526() { }
+    public void meth18527() { }
+    public void meth18528() { }
+    public void meth18529() { }
+    public void meth18530() { }
+    public void meth18531() { }
+    public void meth18532() { }
+    public void meth18533() { }
+    public void meth18534() { }
+    public void meth18535() { }
+    public void meth18536() { }
+    public void meth18537() { }
+    public void meth18538() { }
+    public void meth18539() { }
+    public void meth18540() { }
+    public void meth18541() { }
+    public void meth18542() { }
+    public void meth18543() { }
+    public void meth18544() { }
+    public void meth18545() { }
+    public void meth18546() { }
+    public void meth18547() { }
+    public void meth18548() { }
+    public void meth18549() { }
+    public void meth18550() { }
+    public void meth18551() { }
+    public void meth18552() { }
+    public void meth18553() { }
+    public void meth18554() { }
+    public void meth18555() { }
+    public void meth18556() { }
+    public void meth18557() { }
+    public void meth18558() { }
+    public void meth18559() { }
+    public void meth18560() { }
+    public void meth18561() { }
+    public void meth18562() { }
+    public void meth18563() { }
+    public void meth18564() { }
+    public void meth18565() { }
+    public void meth18566() { }
+    public void meth18567() { }
+    public void meth18568() { }
+    public void meth18569() { }
+    public void meth18570() { }
+    public void meth18571() { }
+    public void meth18572() { }
+    public void meth18573() { }
+    public void meth18574() { }
+    public void meth18575() { }
+    public void meth18576() { }
+    public void meth18577() { }
+    public void meth18578() { }
+    public void meth18579() { }
+    public void meth18580() { }
+    public void meth18581() { }
+    public void meth18582() { }
+    public void meth18583() { }
+    public void meth18584() { }
+    public void meth18585() { }
+    public void meth18586() { }
+    public void meth18587() { }
+    public void meth18588() { }
+    public void meth18589() { }
+    public void meth18590() { }
+    public void meth18591() { }
+    public void meth18592() { }
+    public void meth18593() { }
+    public void meth18594() { }
+    public void meth18595() { }
+    public void meth18596() { }
+    public void meth18597() { }
+    public void meth18598() { }
+    public void meth18599() { }
+    public void meth18600() { }
+    public void meth18601() { }
+    public void meth18602() { }
+    public void meth18603() { }
+    public void meth18604() { }
+    public void meth18605() { }
+    public void meth18606() { }
+    public void meth18607() { }
+    public void meth18608() { }
+    public void meth18609() { }
+    public void meth18610() { }
+    public void meth18611() { }
+    public void meth18612() { }
+    public void meth18613() { }
+    public void meth18614() { }
+    public void meth18615() { }
+    public void meth18616() { }
+    public void meth18617() { }
+    public void meth18618() { }
+    public void meth18619() { }
+    public void meth18620() { }
+    public void meth18621() { }
+    public void meth18622() { }
+    public void meth18623() { }
+    public void meth18624() { }
+    public void meth18625() { }
+    public void meth18626() { }
+    public void meth18627() { }
+    public void meth18628() { }
+    public void meth18629() { }
+    public void meth18630() { }
+    public void meth18631() { }
+    public void meth18632() { }
+    public void meth18633() { }
+    public void meth18634() { }
+    public void meth18635() { }
+    public void meth18636() { }
+    public void meth18637() { }
+    public void meth18638() { }
+    public void meth18639() { }
+    public void meth18640() { }
+    public void meth18641() { }
+    public void meth18642() { }
+    public void meth18643() { }
+    public void meth18644() { }
+    public void meth18645() { }
+    public void meth18646() { }
+    public void meth18647() { }
+    public void meth18648() { }
+    public void meth18649() { }
+    public void meth18650() { }
+    public void meth18651() { }
+    public void meth18652() { }
+    public void meth18653() { }
+    public void meth18654() { }
+    public void meth18655() { }
+    public void meth18656() { }
+    public void meth18657() { }
+    public void meth18658() { }
+    public void meth18659() { }
+    public void meth18660() { }
+    public void meth18661() { }
+    public void meth18662() { }
+    public void meth18663() { }
+    public void meth18664() { }
+    public void meth18665() { }
+    public void meth18666() { }
+    public void meth18667() { }
+    public void meth18668() { }
+    public void meth18669() { }
+    public void meth18670() { }
+    public void meth18671() { }
+    public void meth18672() { }
+    public void meth18673() { }
+    public void meth18674() { }
+    public void meth18675() { }
+    public void meth18676() { }
+    public void meth18677() { }
+    public void meth18678() { }
+    public void meth18679() { }
+    public void meth18680() { }
+    public void meth18681() { }
+    public void meth18682() { }
+    public void meth18683() { }
+    public void meth18684() { }
+    public void meth18685() { }
+    public void meth18686() { }
+    public void meth18687() { }
+    public void meth18688() { }
+    public void meth18689() { }
+    public void meth18690() { }
+    public void meth18691() { }
+    public void meth18692() { }
+    public void meth18693() { }
+    public void meth18694() { }
+    public void meth18695() { }
+    public void meth18696() { }
+    public void meth18697() { }
+    public void meth18698() { }
+    public void meth18699() { }
+    public void meth18700() { }
+    public void meth18701() { }
+    public void meth18702() { }
+    public void meth18703() { }
+    public void meth18704() { }
+    public void meth18705() { }
+    public void meth18706() { }
+    public void meth18707() { }
+    public void meth18708() { }
+    public void meth18709() { }
+    public void meth18710() { }
+    public void meth18711() { }
+    public void meth18712() { }
+    public void meth18713() { }
+    public void meth18714() { }
+    public void meth18715() { }
+    public void meth18716() { }
+    public void meth18717() { }
+    public void meth18718() { }
+    public void meth18719() { }
+    public void meth18720() { }
+    public void meth18721() { }
+    public void meth18722() { }
+    public void meth18723() { }
+    public void meth18724() { }
+    public void meth18725() { }
+    public void meth18726() { }
+    public void meth18727() { }
+    public void meth18728() { }
+    public void meth18729() { }
+    public void meth18730() { }
+    public void meth18731() { }
+    public void meth18732() { }
+    public void meth18733() { }
+    public void meth18734() { }
+    public void meth18735() { }
+    public void meth18736() { }
+    public void meth18737() { }
+    public void meth18738() { }
+    public void meth18739() { }
+    public void meth18740() { }
+    public void meth18741() { }
+    public void meth18742() { }
+    public void meth18743() { }
+    public void meth18744() { }
+    public void meth18745() { }
+    public void meth18746() { }
+    public void meth18747() { }
+    public void meth18748() { }
+    public void meth18749() { }
+    public void meth18750() { }
+    public void meth18751() { }
+    public void meth18752() { }
+    public void meth18753() { }
+    public void meth18754() { }
+    public void meth18755() { }
+    public void meth18756() { }
+    public void meth18757() { }
+    public void meth18758() { }
+    public void meth18759() { }
+    public void meth18760() { }
+    public void meth18761() { }
+    public void meth18762() { }
+    public void meth18763() { }
+    public void meth18764() { }
+    public void meth18765() { }
+    public void meth18766() { }
+    public void meth18767() { }
+    public void meth18768() { }
+    public void meth18769() { }
+    public void meth18770() { }
+    public void meth18771() { }
+    public void meth18772() { }
+    public void meth18773() { }
+    public void meth18774() { }
+    public void meth18775() { }
+    public void meth18776() { }
+    public void meth18777() { }
+    public void meth18778() { }
+    public void meth18779() { }
+    public void meth18780() { }
+    public void meth18781() { }
+    public void meth18782() { }
+    public void meth18783() { }
+    public void meth18784() { }
+    public void meth18785() { }
+    public void meth18786() { }
+    public void meth18787() { }
+    public void meth18788() { }
+    public void meth18789() { }
+    public void meth18790() { }
+    public void meth18791() { }
+    public void meth18792() { }
+    public void meth18793() { }
+    public void meth18794() { }
+    public void meth18795() { }
+    public void meth18796() { }
+    public void meth18797() { }
+    public void meth18798() { }
+    public void meth18799() { }
+    public void meth18800() { }
+    public void meth18801() { }
+    public void meth18802() { }
+    public void meth18803() { }
+    public void meth18804() { }
+    public void meth18805() { }
+    public void meth18806() { }
+    public void meth18807() { }
+    public void meth18808() { }
+    public void meth18809() { }
+    public void meth18810() { }
+    public void meth18811() { }
+    public void meth18812() { }
+    public void meth18813() { }
+    public void meth18814() { }
+    public void meth18815() { }
+    public void meth18816() { }
+    public void meth18817() { }
+    public void meth18818() { }
+    public void meth18819() { }
+    public void meth18820() { }
+    public void meth18821() { }
+    public void meth18822() { }
+    public void meth18823() { }
+    public void meth18824() { }
+    public void meth18825() { }
+    public void meth18826() { }
+    public void meth18827() { }
+    public void meth18828() { }
+    public void meth18829() { }
+    public void meth18830() { }
+    public void meth18831() { }
+    public void meth18832() { }
+    public void meth18833() { }
+    public void meth18834() { }
+    public void meth18835() { }
+    public void meth18836() { }
+    public void meth18837() { }
+    public void meth18838() { }
+    public void meth18839() { }
+    public void meth18840() { }
+    public void meth18841() { }
+    public void meth18842() { }
+    public void meth18843() { }
+    public void meth18844() { }
+    public void meth18845() { }
+    public void meth18846() { }
+    public void meth18847() { }
+    public void meth18848() { }
+    public void meth18849() { }
+    public void meth18850() { }
+    public void meth18851() { }
+    public void meth18852() { }
+    public void meth18853() { }
+    public void meth18854() { }
+    public void meth18855() { }
+    public void meth18856() { }
+    public void meth18857() { }
+    public void meth18858() { }
+    public void meth18859() { }
+    public void meth18860() { }
+    public void meth18861() { }
+    public void meth18862() { }
+    public void meth18863() { }
+    public void meth18864() { }
+    public void meth18865() { }
+    public void meth18866() { }
+    public void meth18867() { }
+    public void meth18868() { }
+    public void meth18869() { }
+    public void meth18870() { }
+    public void meth18871() { }
+    public void meth18872() { }
+    public void meth18873() { }
+    public void meth18874() { }
+    public void meth18875() { }
+    public void meth18876() { }
+    public void meth18877() { }
+    public void meth18878() { }
+    public void meth18879() { }
+    public void meth18880() { }
+    public void meth18881() { }
+    public void meth18882() { }
+    public void meth18883() { }
+    public void meth18884() { }
+    public void meth18885() { }
+    public void meth18886() { }
+    public void meth18887() { }
+    public void meth18888() { }
+    public void meth18889() { }
+    public void meth18890() { }
+    public void meth18891() { }
+    public void meth18892() { }
+    public void meth18893() { }
+    public void meth18894() { }
+    public void meth18895() { }
+    public void meth18896() { }
+    public void meth18897() { }
+    public void meth18898() { }
+    public void meth18899() { }
+    public void meth18900() { }
+    public void meth18901() { }
+    public void meth18902() { }
+    public void meth18903() { }
+    public void meth18904() { }
+    public void meth18905() { }
+    public void meth18906() { }
+    public void meth18907() { }
+    public void meth18908() { }
+    public void meth18909() { }
+    public void meth18910() { }
+    public void meth18911() { }
+    public void meth18912() { }
+    public void meth18913() { }
+    public void meth18914() { }
+    public void meth18915() { }
+    public void meth18916() { }
+    public void meth18917() { }
+    public void meth18918() { }
+    public void meth18919() { }
+    public void meth18920() { }
+    public void meth18921() { }
+    public void meth18922() { }
+    public void meth18923() { }
+    public void meth18924() { }
+    public void meth18925() { }
+    public void meth18926() { }
+    public void meth18927() { }
+    public void meth18928() { }
+    public void meth18929() { }
+    public void meth18930() { }
+    public void meth18931() { }
+    public void meth18932() { }
+    public void meth18933() { }
+    public void meth18934() { }
+    public void meth18935() { }
+    public void meth18936() { }
+    public void meth18937() { }
+    public void meth18938() { }
+    public void meth18939() { }
+    public void meth18940() { }
+    public void meth18941() { }
+    public void meth18942() { }
+    public void meth18943() { }
+    public void meth18944() { }
+    public void meth18945() { }
+    public void meth18946() { }
+    public void meth18947() { }
+    public void meth18948() { }
+    public void meth18949() { }
+    public void meth18950() { }
+    public void meth18951() { }
+    public void meth18952() { }
+    public void meth18953() { }
+    public void meth18954() { }
+    public void meth18955() { }
+    public void meth18956() { }
+    public void meth18957() { }
+    public void meth18958() { }
+    public void meth18959() { }
+    public void meth18960() { }
+    public void meth18961() { }
+    public void meth18962() { }
+    public void meth18963() { }
+    public void meth18964() { }
+    public void meth18965() { }
+    public void meth18966() { }
+    public void meth18967() { }
+    public void meth18968() { }
+    public void meth18969() { }
+    public void meth18970() { }
+    public void meth18971() { }
+    public void meth18972() { }
+    public void meth18973() { }
+    public void meth18974() { }
+    public void meth18975() { }
+    public void meth18976() { }
+    public void meth18977() { }
+    public void meth18978() { }
+    public void meth18979() { }
+    public void meth18980() { }
+    public void meth18981() { }
+    public void meth18982() { }
+    public void meth18983() { }
+    public void meth18984() { }
+    public void meth18985() { }
+    public void meth18986() { }
+    public void meth18987() { }
+    public void meth18988() { }
+    public void meth18989() { }
+    public void meth18990() { }
+    public void meth18991() { }
+    public void meth18992() { }
+    public void meth18993() { }
+    public void meth18994() { }
+    public void meth18995() { }
+    public void meth18996() { }
+    public void meth18997() { }
+    public void meth18998() { }
+    public void meth18999() { }
+    public void meth19000() { }
+    public void meth19001() { }
+    public void meth19002() { }
+    public void meth19003() { }
+    public void meth19004() { }
+    public void meth19005() { }
+    public void meth19006() { }
+    public void meth19007() { }
+    public void meth19008() { }
+    public void meth19009() { }
+    public void meth19010() { }
+    public void meth19011() { }
+    public void meth19012() { }
+    public void meth19013() { }
+    public void meth19014() { }
+    public void meth19015() { }
+    public void meth19016() { }
+    public void meth19017() { }
+    public void meth19018() { }
+    public void meth19019() { }
+    public void meth19020() { }
+    public void meth19021() { }
+    public void meth19022() { }
+    public void meth19023() { }
+    public void meth19024() { }
+    public void meth19025() { }
+    public void meth19026() { }
+    public void meth19027() { }
+    public void meth19028() { }
+    public void meth19029() { }
+    public void meth19030() { }
+    public void meth19031() { }
+    public void meth19032() { }
+    public void meth19033() { }
+    public void meth19034() { }
+    public void meth19035() { }
+    public void meth19036() { }
+    public void meth19037() { }
+    public void meth19038() { }
+    public void meth19039() { }
+    public void meth19040() { }
+    public void meth19041() { }
+    public void meth19042() { }
+    public void meth19043() { }
+    public void meth19044() { }
+    public void meth19045() { }
+    public void meth19046() { }
+    public void meth19047() { }
+    public void meth19048() { }
+    public void meth19049() { }
+    public void meth19050() { }
+    public void meth19051() { }
+    public void meth19052() { }
+    public void meth19053() { }
+    public void meth19054() { }
+    public void meth19055() { }
+    public void meth19056() { }
+    public void meth19057() { }
+    public void meth19058() { }
+    public void meth19059() { }
+    public void meth19060() { }
+    public void meth19061() { }
+    public void meth19062() { }
+    public void meth19063() { }
+    public void meth19064() { }
+    public void meth19065() { }
+    public void meth19066() { }
+    public void meth19067() { }
+    public void meth19068() { }
+    public void meth19069() { }
+    public void meth19070() { }
+    public void meth19071() { }
+    public void meth19072() { }
+    public void meth19073() { }
+    public void meth19074() { }
+    public void meth19075() { }
+    public void meth19076() { }
+    public void meth19077() { }
+    public void meth19078() { }
+    public void meth19079() { }
+    public void meth19080() { }
+    public void meth19081() { }
+    public void meth19082() { }
+    public void meth19083() { }
+    public void meth19084() { }
+    public void meth19085() { }
+    public void meth19086() { }
+    public void meth19087() { }
+    public void meth19088() { }
+    public void meth19089() { }
+    public void meth19090() { }
+    public void meth19091() { }
+    public void meth19092() { }
+    public void meth19093() { }
+    public void meth19094() { }
+    public void meth19095() { }
+    public void meth19096() { }
+    public void meth19097() { }
+    public void meth19098() { }
+    public void meth19099() { }
+    public void meth19100() { }
+    public void meth19101() { }
+    public void meth19102() { }
+    public void meth19103() { }
+    public void meth19104() { }
+    public void meth19105() { }
+    public void meth19106() { }
+    public void meth19107() { }
+    public void meth19108() { }
+    public void meth19109() { }
+    public void meth19110() { }
+    public void meth19111() { }
+    public void meth19112() { }
+    public void meth19113() { }
+    public void meth19114() { }
+    public void meth19115() { }
+    public void meth19116() { }
+    public void meth19117() { }
+    public void meth19118() { }
+    public void meth19119() { }
+    public void meth19120() { }
+    public void meth19121() { }
+    public void meth19122() { }
+    public void meth19123() { }
+    public void meth19124() { }
+    public void meth19125() { }
+    public void meth19126() { }
+    public void meth19127() { }
+    public void meth19128() { }
+    public void meth19129() { }
+    public void meth19130() { }
+    public void meth19131() { }
+    public void meth19132() { }
+    public void meth19133() { }
+    public void meth19134() { }
+    public void meth19135() { }
+    public void meth19136() { }
+    public void meth19137() { }
+    public void meth19138() { }
+    public void meth19139() { }
+    public void meth19140() { }
+    public void meth19141() { }
+    public void meth19142() { }
+    public void meth19143() { }
+    public void meth19144() { }
+    public void meth19145() { }
+    public void meth19146() { }
+    public void meth19147() { }
+    public void meth19148() { }
+    public void meth19149() { }
+    public void meth19150() { }
+    public void meth19151() { }
+    public void meth19152() { }
+    public void meth19153() { }
+    public void meth19154() { }
+    public void meth19155() { }
+    public void meth19156() { }
+    public void meth19157() { }
+    public void meth19158() { }
+    public void meth19159() { }
+    public void meth19160() { }
+    public void meth19161() { }
+    public void meth19162() { }
+    public void meth19163() { }
+    public void meth19164() { }
+    public void meth19165() { }
+    public void meth19166() { }
+    public void meth19167() { }
+    public void meth19168() { }
+    public void meth19169() { }
+    public void meth19170() { }
+    public void meth19171() { }
+    public void meth19172() { }
+    public void meth19173() { }
+    public void meth19174() { }
+    public void meth19175() { }
+    public void meth19176() { }
+    public void meth19177() { }
+    public void meth19178() { }
+    public void meth19179() { }
+    public void meth19180() { }
+    public void meth19181() { }
+    public void meth19182() { }
+    public void meth19183() { }
+    public void meth19184() { }
+    public void meth19185() { }
+    public void meth19186() { }
+    public void meth19187() { }
+    public void meth19188() { }
+    public void meth19189() { }
+    public void meth19190() { }
+    public void meth19191() { }
+    public void meth19192() { }
+    public void meth19193() { }
+    public void meth19194() { }
+    public void meth19195() { }
+    public void meth19196() { }
+    public void meth19197() { }
+    public void meth19198() { }
+    public void meth19199() { }
+    public void meth19200() { }
+    public void meth19201() { }
+    public void meth19202() { }
+    public void meth19203() { }
+    public void meth19204() { }
+    public void meth19205() { }
+    public void meth19206() { }
+    public void meth19207() { }
+    public void meth19208() { }
+    public void meth19209() { }
+    public void meth19210() { }
+    public void meth19211() { }
+    public void meth19212() { }
+    public void meth19213() { }
+    public void meth19214() { }
+    public void meth19215() { }
+    public void meth19216() { }
+    public void meth19217() { }
+    public void meth19218() { }
+    public void meth19219() { }
+    public void meth19220() { }
+    public void meth19221() { }
+    public void meth19222() { }
+    public void meth19223() { }
+    public void meth19224() { }
+    public void meth19225() { }
+    public void meth19226() { }
+    public void meth19227() { }
+    public void meth19228() { }
+    public void meth19229() { }
+    public void meth19230() { }
+    public void meth19231() { }
+    public void meth19232() { }
+    public void meth19233() { }
+    public void meth19234() { }
+    public void meth19235() { }
+    public void meth19236() { }
+    public void meth19237() { }
+    public void meth19238() { }
+    public void meth19239() { }
+    public void meth19240() { }
+    public void meth19241() { }
+    public void meth19242() { }
+    public void meth19243() { }
+    public void meth19244() { }
+    public void meth19245() { }
+    public void meth19246() { }
+    public void meth19247() { }
+    public void meth19248() { }
+    public void meth19249() { }
+    public void meth19250() { }
+    public void meth19251() { }
+    public void meth19252() { }
+    public void meth19253() { }
+    public void meth19254() { }
+    public void meth19255() { }
+    public void meth19256() { }
+    public void meth19257() { }
+    public void meth19258() { }
+    public void meth19259() { }
+    public void meth19260() { }
+    public void meth19261() { }
+    public void meth19262() { }
+    public void meth19263() { }
+    public void meth19264() { }
+    public void meth19265() { }
+    public void meth19266() { }
+    public void meth19267() { }
+    public void meth19268() { }
+    public void meth19269() { }
+    public void meth19270() { }
+    public void meth19271() { }
+    public void meth19272() { }
+    public void meth19273() { }
+    public void meth19274() { }
+    public void meth19275() { }
+    public void meth19276() { }
+    public void meth19277() { }
+    public void meth19278() { }
+    public void meth19279() { }
+    public void meth19280() { }
+    public void meth19281() { }
+    public void meth19282() { }
+    public void meth19283() { }
+    public void meth19284() { }
+    public void meth19285() { }
+    public void meth19286() { }
+    public void meth19287() { }
+    public void meth19288() { }
+    public void meth19289() { }
+    public void meth19290() { }
+    public void meth19291() { }
+    public void meth19292() { }
+    public void meth19293() { }
+    public void meth19294() { }
+    public void meth19295() { }
+    public void meth19296() { }
+    public void meth19297() { }
+    public void meth19298() { }
+    public void meth19299() { }
+    public void meth19300() { }
+    public void meth19301() { }
+    public void meth19302() { }
+    public void meth19303() { }
+    public void meth19304() { }
+    public void meth19305() { }
+    public void meth19306() { }
+    public void meth19307() { }
+    public void meth19308() { }
+    public void meth19309() { }
+    public void meth19310() { }
+    public void meth19311() { }
+    public void meth19312() { }
+    public void meth19313() { }
+    public void meth19314() { }
+    public void meth19315() { }
+    public void meth19316() { }
+    public void meth19317() { }
+    public void meth19318() { }
+    public void meth19319() { }
+    public void meth19320() { }
+    public void meth19321() { }
+    public void meth19322() { }
+    public void meth19323() { }
+    public void meth19324() { }
+    public void meth19325() { }
+    public void meth19326() { }
+    public void meth19327() { }
+    public void meth19328() { }
+    public void meth19329() { }
+    public void meth19330() { }
+    public void meth19331() { }
+    public void meth19332() { }
+    public void meth19333() { }
+    public void meth19334() { }
+    public void meth19335() { }
+    public void meth19336() { }
+    public void meth19337() { }
+    public void meth19338() { }
+    public void meth19339() { }
+    public void meth19340() { }
+    public void meth19341() { }
+    public void meth19342() { }
+    public void meth19343() { }
+    public void meth19344() { }
+    public void meth19345() { }
+    public void meth19346() { }
+    public void meth19347() { }
+    public void meth19348() { }
+    public void meth19349() { }
+    public void meth19350() { }
+    public void meth19351() { }
+    public void meth19352() { }
+    public void meth19353() { }
+    public void meth19354() { }
+    public void meth19355() { }
+    public void meth19356() { }
+    public void meth19357() { }
+    public void meth19358() { }
+    public void meth19359() { }
+    public void meth19360() { }
+    public void meth19361() { }
+    public void meth19362() { }
+    public void meth19363() { }
+    public void meth19364() { }
+    public void meth19365() { }
+    public void meth19366() { }
+    public void meth19367() { }
+    public void meth19368() { }
+    public void meth19369() { }
+    public void meth19370() { }
+    public void meth19371() { }
+    public void meth19372() { }
+    public void meth19373() { }
+    public void meth19374() { }
+    public void meth19375() { }
+    public void meth19376() { }
+    public void meth19377() { }
+    public void meth19378() { }
+    public void meth19379() { }
+    public void meth19380() { }
+    public void meth19381() { }
+    public void meth19382() { }
+    public void meth19383() { }
+    public void meth19384() { }
+    public void meth19385() { }
+    public void meth19386() { }
+    public void meth19387() { }
+    public void meth19388() { }
+    public void meth19389() { }
+    public void meth19390() { }
+    public void meth19391() { }
+    public void meth19392() { }
+    public void meth19393() { }
+    public void meth19394() { }
+    public void meth19395() { }
+    public void meth19396() { }
+    public void meth19397() { }
+    public void meth19398() { }
+    public void meth19399() { }
+    public void meth19400() { }
+    public void meth19401() { }
+    public void meth19402() { }
+    public void meth19403() { }
+    public void meth19404() { }
+    public void meth19405() { }
+    public void meth19406() { }
+    public void meth19407() { }
+    public void meth19408() { }
+    public void meth19409() { }
+    public void meth19410() { }
+    public void meth19411() { }
+    public void meth19412() { }
+    public void meth19413() { }
+    public void meth19414() { }
+    public void meth19415() { }
+    public void meth19416() { }
+    public void meth19417() { }
+    public void meth19418() { }
+    public void meth19419() { }
+    public void meth19420() { }
+    public void meth19421() { }
+    public void meth19422() { }
+    public void meth19423() { }
+    public void meth19424() { }
+    public void meth19425() { }
+    public void meth19426() { }
+    public void meth19427() { }
+    public void meth19428() { }
+    public void meth19429() { }
+    public void meth19430() { }
+    public void meth19431() { }
+    public void meth19432() { }
+    public void meth19433() { }
+    public void meth19434() { }
+    public void meth19435() { }
+    public void meth19436() { }
+    public void meth19437() { }
+    public void meth19438() { }
+    public void meth19439() { }
+    public void meth19440() { }
+    public void meth19441() { }
+    public void meth19442() { }
+    public void meth19443() { }
+    public void meth19444() { }
+    public void meth19445() { }
+    public void meth19446() { }
+    public void meth19447() { }
+    public void meth19448() { }
+    public void meth19449() { }
+    public void meth19450() { }
+    public void meth19451() { }
+    public void meth19452() { }
+    public void meth19453() { }
+    public void meth19454() { }
+    public void meth19455() { }
+    public void meth19456() { }
+    public void meth19457() { }
+    public void meth19458() { }
+    public void meth19459() { }
+    public void meth19460() { }
+    public void meth19461() { }
+    public void meth19462() { }
+    public void meth19463() { }
+    public void meth19464() { }
+    public void meth19465() { }
+    public void meth19466() { }
+    public void meth19467() { }
+    public void meth19468() { }
+    public void meth19469() { }
+    public void meth19470() { }
+    public void meth19471() { }
+    public void meth19472() { }
+    public void meth19473() { }
+    public void meth19474() { }
+    public void meth19475() { }
+    public void meth19476() { }
+    public void meth19477() { }
+    public void meth19478() { }
+    public void meth19479() { }
+    public void meth19480() { }
+    public void meth19481() { }
+    public void meth19482() { }
+    public void meth19483() { }
+    public void meth19484() { }
+    public void meth19485() { }
+    public void meth19486() { }
+    public void meth19487() { }
+    public void meth19488() { }
+    public void meth19489() { }
+    public void meth19490() { }
+    public void meth19491() { }
+    public void meth19492() { }
+    public void meth19493() { }
+    public void meth19494() { }
+    public void meth19495() { }
+    public void meth19496() { }
+    public void meth19497() { }
+    public void meth19498() { }
+    public void meth19499() { }
+    public void meth19500() { }
+    public void meth19501() { }
+    public void meth19502() { }
+    public void meth19503() { }
+    public void meth19504() { }
+    public void meth19505() { }
+    public void meth19506() { }
+    public void meth19507() { }
+    public void meth19508() { }
+    public void meth19509() { }
+    public void meth19510() { }
+    public void meth19511() { }
+    public void meth19512() { }
+    public void meth19513() { }
+    public void meth19514() { }
+    public void meth19515() { }
+    public void meth19516() { }
+    public void meth19517() { }
+    public void meth19518() { }
+    public void meth19519() { }
+    public void meth19520() { }
+    public void meth19521() { }
+    public void meth19522() { }
+    public void meth19523() { }
+    public void meth19524() { }
+    public void meth19525() { }
+    public void meth19526() { }
+    public void meth19527() { }
+    public void meth19528() { }
+    public void meth19529() { }
+    public void meth19530() { }
+    public void meth19531() { }
+    public void meth19532() { }
+    public void meth19533() { }
+    public void meth19534() { }
+    public void meth19535() { }
+    public void meth19536() { }
+    public void meth19537() { }
+    public void meth19538() { }
+    public void meth19539() { }
+    public void meth19540() { }
+    public void meth19541() { }
+    public void meth19542() { }
+    public void meth19543() { }
+    public void meth19544() { }
+    public void meth19545() { }
+    public void meth19546() { }
+    public void meth19547() { }
+    public void meth19548() { }
+    public void meth19549() { }
+    public void meth19550() { }
+    public void meth19551() { }
+    public void meth19552() { }
+    public void meth19553() { }
+    public void meth19554() { }
+    public void meth19555() { }
+    public void meth19556() { }
+    public void meth19557() { }
+    public void meth19558() { }
+    public void meth19559() { }
+    public void meth19560() { }
+    public void meth19561() { }
+    public void meth19562() { }
+    public void meth19563() { }
+    public void meth19564() { }
+    public void meth19565() { }
+    public void meth19566() { }
+    public void meth19567() { }
+    public void meth19568() { }
+    public void meth19569() { }
+    public void meth19570() { }
+    public void meth19571() { }
+    public void meth19572() { }
+    public void meth19573() { }
+    public void meth19574() { }
+    public void meth19575() { }
+    public void meth19576() { }
+    public void meth19577() { }
+    public void meth19578() { }
+    public void meth19579() { }
+    public void meth19580() { }
+    public void meth19581() { }
+    public void meth19582() { }
+    public void meth19583() { }
+    public void meth19584() { }
+    public void meth19585() { }
+    public void meth19586() { }
+    public void meth19587() { }
+    public void meth19588() { }
+    public void meth19589() { }
+    public void meth19590() { }
+    public void meth19591() { }
+    public void meth19592() { }
+    public void meth19593() { }
+    public void meth19594() { }
+    public void meth19595() { }
+    public void meth19596() { }
+    public void meth19597() { }
+    public void meth19598() { }
+    public void meth19599() { }
+    public void meth19600() { }
+    public void meth19601() { }
+    public void meth19602() { }
+    public void meth19603() { }
+    public void meth19604() { }
+    public void meth19605() { }
+    public void meth19606() { }
+    public void meth19607() { }
+    public void meth19608() { }
+    public void meth19609() { }
+    public void meth19610() { }
+    public void meth19611() { }
+    public void meth19612() { }
+    public void meth19613() { }
+    public void meth19614() { }
+    public void meth19615() { }
+    public void meth19616() { }
+    public void meth19617() { }
+    public void meth19618() { }
+    public void meth19619() { }
+    public void meth19620() { }
+    public void meth19621() { }
+    public void meth19622() { }
+    public void meth19623() { }
+    public void meth19624() { }
+    public void meth19625() { }
+    public void meth19626() { }
+    public void meth19627() { }
+    public void meth19628() { }
+    public void meth19629() { }
+    public void meth19630() { }
+    public void meth19631() { }
+    public void meth19632() { }
+    public void meth19633() { }
+    public void meth19634() { }
+    public void meth19635() { }
+    public void meth19636() { }
+    public void meth19637() { }
+    public void meth19638() { }
+    public void meth19639() { }
+    public void meth19640() { }
+    public void meth19641() { }
+    public void meth19642() { }
+    public void meth19643() { }
+    public void meth19644() { }
+    public void meth19645() { }
+    public void meth19646() { }
+    public void meth19647() { }
+    public void meth19648() { }
+    public void meth19649() { }
+    public void meth19650() { }
+    public void meth19651() { }
+    public void meth19652() { }
+    public void meth19653() { }
+    public void meth19654() { }
+    public void meth19655() { }
+    public void meth19656() { }
+    public void meth19657() { }
+    public void meth19658() { }
+    public void meth19659() { }
+    public void meth19660() { }
+    public void meth19661() { }
+    public void meth19662() { }
+    public void meth19663() { }
+    public void meth19664() { }
+    public void meth19665() { }
+    public void meth19666() { }
+    public void meth19667() { }
+    public void meth19668() { }
+    public void meth19669() { }
+    public void meth19670() { }
+    public void meth19671() { }
+    public void meth19672() { }
+    public void meth19673() { }
+    public void meth19674() { }
+    public void meth19675() { }
+    public void meth19676() { }
+    public void meth19677() { }
+    public void meth19678() { }
+    public void meth19679() { }
+    public void meth19680() { }
+    public void meth19681() { }
+    public void meth19682() { }
+    public void meth19683() { }
+    public void meth19684() { }
+    public void meth19685() { }
+    public void meth19686() { }
+    public void meth19687() { }
+    public void meth19688() { }
+    public void meth19689() { }
+    public void meth19690() { }
+    public void meth19691() { }
+    public void meth19692() { }
+    public void meth19693() { }
+    public void meth19694() { }
+    public void meth19695() { }
+    public void meth19696() { }
+    public void meth19697() { }
+    public void meth19698() { }
+    public void meth19699() { }
+    public void meth19700() { }
+    public void meth19701() { }
+    public void meth19702() { }
+    public void meth19703() { }
+    public void meth19704() { }
+    public void meth19705() { }
+    public void meth19706() { }
+    public void meth19707() { }
+    public void meth19708() { }
+    public void meth19709() { }
+    public void meth19710() { }
+    public void meth19711() { }
+    public void meth19712() { }
+    public void meth19713() { }
+    public void meth19714() { }
+    public void meth19715() { }
+    public void meth19716() { }
+    public void meth19717() { }
+    public void meth19718() { }
+    public void meth19719() { }
+    public void meth19720() { }
+    public void meth19721() { }
+    public void meth19722() { }
+    public void meth19723() { }
+    public void meth19724() { }
+    public void meth19725() { }
+    public void meth19726() { }
+    public void meth19727() { }
+    public void meth19728() { }
+    public void meth19729() { }
+    public void meth19730() { }
+    public void meth19731() { }
+    public void meth19732() { }
+    public void meth19733() { }
+    public void meth19734() { }
+    public void meth19735() { }
+    public void meth19736() { }
+    public void meth19737() { }
+    public void meth19738() { }
+    public void meth19739() { }
+    public void meth19740() { }
+    public void meth19741() { }
+    public void meth19742() { }
+    public void meth19743() { }
+    public void meth19744() { }
+    public void meth19745() { }
+    public void meth19746() { }
+    public void meth19747() { }
+    public void meth19748() { }
+    public void meth19749() { }
+    public void meth19750() { }
+    public void meth19751() { }
+    public void meth19752() { }
+    public void meth19753() { }
+    public void meth19754() { }
+    public void meth19755() { }
+    public void meth19756() { }
+    public void meth19757() { }
+    public void meth19758() { }
+    public void meth19759() { }
+    public void meth19760() { }
+    public void meth19761() { }
+    public void meth19762() { }
+    public void meth19763() { }
+    public void meth19764() { }
+    public void meth19765() { }
+    public void meth19766() { }
+    public void meth19767() { }
+    public void meth19768() { }
+    public void meth19769() { }
+    public void meth19770() { }
+    public void meth19771() { }
+    public void meth19772() { }
+    public void meth19773() { }
+    public void meth19774() { }
+    public void meth19775() { }
+    public void meth19776() { }
+    public void meth19777() { }
+    public void meth19778() { }
+    public void meth19779() { }
+    public void meth19780() { }
+    public void meth19781() { }
+    public void meth19782() { }
+    public void meth19783() { }
+    public void meth19784() { }
+    public void meth19785() { }
+    public void meth19786() { }
+    public void meth19787() { }
+    public void meth19788() { }
+    public void meth19789() { }
+    public void meth19790() { }
+    public void meth19791() { }
+    public void meth19792() { }
+    public void meth19793() { }
+    public void meth19794() { }
+    public void meth19795() { }
+    public void meth19796() { }
+    public void meth19797() { }
+    public void meth19798() { }
+    public void meth19799() { }
+    public void meth19800() { }
+    public void meth19801() { }
+    public void meth19802() { }
+    public void meth19803() { }
+    public void meth19804() { }
+    public void meth19805() { }
+    public void meth19806() { }
+    public void meth19807() { }
+    public void meth19808() { }
+    public void meth19809() { }
+    public void meth19810() { }
+    public void meth19811() { }
+    public void meth19812() { }
+    public void meth19813() { }
+    public void meth19814() { }
+    public void meth19815() { }
+    public void meth19816() { }
+    public void meth19817() { }
+    public void meth19818() { }
+    public void meth19819() { }
+    public void meth19820() { }
+    public void meth19821() { }
+    public void meth19822() { }
+    public void meth19823() { }
+    public void meth19824() { }
+    public void meth19825() { }
+    public void meth19826() { }
+    public void meth19827() { }
+    public void meth19828() { }
+    public void meth19829() { }
+    public void meth19830() { }
+    public void meth19831() { }
+    public void meth19832() { }
+    public void meth19833() { }
+    public void meth19834() { }
+    public void meth19835() { }
+    public void meth19836() { }
+    public void meth19837() { }
+    public void meth19838() { }
+    public void meth19839() { }
+    public void meth19840() { }
+    public void meth19841() { }
+    public void meth19842() { }
+    public void meth19843() { }
+    public void meth19844() { }
+    public void meth19845() { }
+    public void meth19846() { }
+    public void meth19847() { }
+    public void meth19848() { }
+    public void meth19849() { }
+    public void meth19850() { }
+    public void meth19851() { }
+    public void meth19852() { }
+    public void meth19853() { }
+    public void meth19854() { }
+    public void meth19855() { }
+    public void meth19856() { }
+    public void meth19857() { }
+    public void meth19858() { }
+    public void meth19859() { }
+    public void meth19860() { }
+    public void meth19861() { }
+    public void meth19862() { }
+    public void meth19863() { }
+    public void meth19864() { }
+    public void meth19865() { }
+    public void meth19866() { }
+    public void meth19867() { }
+    public void meth19868() { }
+    public void meth19869() { }
+    public void meth19870() { }
+    public void meth19871() { }
+    public void meth19872() { }
+    public void meth19873() { }
+    public void meth19874() { }
+    public void meth19875() { }
+    public void meth19876() { }
+    public void meth19877() { }
+    public void meth19878() { }
+    public void meth19879() { }
+    public void meth19880() { }
+    public void meth19881() { }
+    public void meth19882() { }
+    public void meth19883() { }
+    public void meth19884() { }
+    public void meth19885() { }
+    public void meth19886() { }
+    public void meth19887() { }
+    public void meth19888() { }
+    public void meth19889() { }
+    public void meth19890() { }
+    public void meth19891() { }
+    public void meth19892() { }
+    public void meth19893() { }
+    public void meth19894() { }
+    public void meth19895() { }
+    public void meth19896() { }
+    public void meth19897() { }
+    public void meth19898() { }
+    public void meth19899() { }
+    public void meth19900() { }
+    public void meth19901() { }
+    public void meth19902() { }
+    public void meth19903() { }
+    public void meth19904() { }
+    public void meth19905() { }
+    public void meth19906() { }
+    public void meth19907() { }
+    public void meth19908() { }
+    public void meth19909() { }
+    public void meth19910() { }
+    public void meth19911() { }
+    public void meth19912() { }
+    public void meth19913() { }
+    public void meth19914() { }
+    public void meth19915() { }
+    public void meth19916() { }
+    public void meth19917() { }
+    public void meth19918() { }
+    public void meth19919() { }
+    public void meth19920() { }
+    public void meth19921() { }
+    public void meth19922() { }
+    public void meth19923() { }
+    public void meth19924() { }
+    public void meth19925() { }
+    public void meth19926() { }
+    public void meth19927() { }
+    public void meth19928() { }
+    public void meth19929() { }
+    public void meth19930() { }
+    public void meth19931() { }
+    public void meth19932() { }
+    public void meth19933() { }
+    public void meth19934() { }
+    public void meth19935() { }
+    public void meth19936() { }
+    public void meth19937() { }
+    public void meth19938() { }
+    public void meth19939() { }
+    public void meth19940() { }
+    public void meth19941() { }
+    public void meth19942() { }
+    public void meth19943() { }
+    public void meth19944() { }
+    public void meth19945() { }
+    public void meth19946() { }
+    public void meth19947() { }
+    public void meth19948() { }
+    public void meth19949() { }
+    public void meth19950() { }
+    public void meth19951() { }
+    public void meth19952() { }
+    public void meth19953() { }
+    public void meth19954() { }
+    public void meth19955() { }
+    public void meth19956() { }
+    public void meth19957() { }
+    public void meth19958() { }
+    public void meth19959() { }
+    public void meth19960() { }
+    public void meth19961() { }
+    public void meth19962() { }
+    public void meth19963() { }
+    public void meth19964() { }
+    public void meth19965() { }
+    public void meth19966() { }
+    public void meth19967() { }
+    public void meth19968() { }
+    public void meth19969() { }
+    public void meth19970() { }
+    public void meth19971() { }
+    public void meth19972() { }
+    public void meth19973() { }
+    public void meth19974() { }
+    public void meth19975() { }
+    public void meth19976() { }
+    public void meth19977() { }
+    public void meth19978() { }
+    public void meth19979() { }
+    public void meth19980() { }
+    public void meth19981() { }
+    public void meth19982() { }
+    public void meth19983() { }
+    public void meth19984() { }
+    public void meth19985() { }
+    public void meth19986() { }
+    public void meth19987() { }
+    public void meth19988() { }
+    public void meth19989() { }
+    public void meth19990() { }
+    public void meth19991() { }
+    public void meth19992() { }
+    public void meth19993() { }
+    public void meth19994() { }
+    public void meth19995() { }
+    public void meth19996() { }
+    public void meth19997() { }
+    public void meth19998() { }
+    public void meth19999() { }
+    public void meth20000() { }
+    public void meth20001() { }
+    public void meth20002() { }
+    public void meth20003() { }
+    public void meth20004() { }
+    public void meth20005() { }
+    public void meth20006() { }
+    public void meth20007() { }
+    public void meth20008() { }
+    public void meth20009() { }
+    public void meth20010() { }
+    public void meth20011() { }
+    public void meth20012() { }
+    public void meth20013() { }
+    public void meth20014() { }
+    public void meth20015() { }
+    public void meth20016() { }
+    public void meth20017() { }
+    public void meth20018() { }
+    public void meth20019() { }
+    public void meth20020() { }
+    public void meth20021() { }
+    public void meth20022() { }
+    public void meth20023() { }
+    public void meth20024() { }
+    public void meth20025() { }
+    public void meth20026() { }
+    public void meth20027() { }
+    public void meth20028() { }
+    public void meth20029() { }
+    public void meth20030() { }
+    public void meth20031() { }
+    public void meth20032() { }
+    public void meth20033() { }
+    public void meth20034() { }
+    public void meth20035() { }
+    public void meth20036() { }
+    public void meth20037() { }
+    public void meth20038() { }
+    public void meth20039() { }
+    public void meth20040() { }
+    public void meth20041() { }
+    public void meth20042() { }
+    public void meth20043() { }
+    public void meth20044() { }
+    public void meth20045() { }
+    public void meth20046() { }
+    public void meth20047() { }
+    public void meth20048() { }
+    public void meth20049() { }
+    public void meth20050() { }
+    public void meth20051() { }
+    public void meth20052() { }
+    public void meth20053() { }
+    public void meth20054() { }
+    public void meth20055() { }
+    public void meth20056() { }
+    public void meth20057() { }
+    public void meth20058() { }
+    public void meth20059() { }
+    public void meth20060() { }
+    public void meth20061() { }
+    public void meth20062() { }
+    public void meth20063() { }
+    public void meth20064() { }
+    public void meth20065() { }
+    public void meth20066() { }
+    public void meth20067() { }
+    public void meth20068() { }
+    public void meth20069() { }
+    public void meth20070() { }
+    public void meth20071() { }
+    public void meth20072() { }
+    public void meth20073() { }
+    public void meth20074() { }
+    public void meth20075() { }
+    public void meth20076() { }
+    public void meth20077() { }
+    public void meth20078() { }
+    public void meth20079() { }
+    public void meth20080() { }
+    public void meth20081() { }
+    public void meth20082() { }
+    public void meth20083() { }
+    public void meth20084() { }
+    public void meth20085() { }
+    public void meth20086() { }
+    public void meth20087() { }
+    public void meth20088() { }
+    public void meth20089() { }
+    public void meth20090() { }
+    public void meth20091() { }
+    public void meth20092() { }
+    public void meth20093() { }
+    public void meth20094() { }
+    public void meth20095() { }
+    public void meth20096() { }
+    public void meth20097() { }
+    public void meth20098() { }
+    public void meth20099() { }
+    public void meth20100() { }
+    public void meth20101() { }
+    public void meth20102() { }
+    public void meth20103() { }
+    public void meth20104() { }
+    public void meth20105() { }
+    public void meth20106() { }
+    public void meth20107() { }
+    public void meth20108() { }
+    public void meth20109() { }
+    public void meth20110() { }
+    public void meth20111() { }
+    public void meth20112() { }
+    public void meth20113() { }
+    public void meth20114() { }
+    public void meth20115() { }
+    public void meth20116() { }
+    public void meth20117() { }
+    public void meth20118() { }
+    public void meth20119() { }
+    public void meth20120() { }
+    public void meth20121() { }
+    public void meth20122() { }
+    public void meth20123() { }
+    public void meth20124() { }
+    public void meth20125() { }
+    public void meth20126() { }
+    public void meth20127() { }
+    public void meth20128() { }
+    public void meth20129() { }
+    public void meth20130() { }
+    public void meth20131() { }
+    public void meth20132() { }
+    public void meth20133() { }
+    public void meth20134() { }
+    public void meth20135() { }
+    public void meth20136() { }
+    public void meth20137() { }
+    public void meth20138() { }
+    public void meth20139() { }
+    public void meth20140() { }
+    public void meth20141() { }
+    public void meth20142() { }
+    public void meth20143() { }
+    public void meth20144() { }
+    public void meth20145() { }
+    public void meth20146() { }
+    public void meth20147() { }
+    public void meth20148() { }
+    public void meth20149() { }
+    public void meth20150() { }
+    public void meth20151() { }
+    public void meth20152() { }
+    public void meth20153() { }
+    public void meth20154() { }
+    public void meth20155() { }
+    public void meth20156() { }
+    public void meth20157() { }
+    public void meth20158() { }
+    public void meth20159() { }
+    public void meth20160() { }
+    public void meth20161() { }
+    public void meth20162() { }
+    public void meth20163() { }
+    public void meth20164() { }
+    public void meth20165() { }
+    public void meth20166() { }
+    public void meth20167() { }
+    public void meth20168() { }
+    public void meth20169() { }
+    public void meth20170() { }
+    public void meth20171() { }
+    public void meth20172() { }
+    public void meth20173() { }
+    public void meth20174() { }
+    public void meth20175() { }
+    public void meth20176() { }
+    public void meth20177() { }
+    public void meth20178() { }
+    public void meth20179() { }
+    public void meth20180() { }
+    public void meth20181() { }
+    public void meth20182() { }
+    public void meth20183() { }
+    public void meth20184() { }
+    public void meth20185() { }
+    public void meth20186() { }
+    public void meth20187() { }
+    public void meth20188() { }
+    public void meth20189() { }
+    public void meth20190() { }
+    public void meth20191() { }
+    public void meth20192() { }
+    public void meth20193() { }
+    public void meth20194() { }
+    public void meth20195() { }
+    public void meth20196() { }
+    public void meth20197() { }
+    public void meth20198() { }
+    public void meth20199() { }
+    public void meth20200() { }
+    public void meth20201() { }
+    public void meth20202() { }
+    public void meth20203() { }
+    public void meth20204() { }
+    public void meth20205() { }
+    public void meth20206() { }
+    public void meth20207() { }
+    public void meth20208() { }
+    public void meth20209() { }
+    public void meth20210() { }
+    public void meth20211() { }
+    public void meth20212() { }
+    public void meth20213() { }
+    public void meth20214() { }
+    public void meth20215() { }
+    public void meth20216() { }
+    public void meth20217() { }
+    public void meth20218() { }
+    public void meth20219() { }
+    public void meth20220() { }
+    public void meth20221() { }
+    public void meth20222() { }
+    public void meth20223() { }
+    public void meth20224() { }
+    public void meth20225() { }
+    public void meth20226() { }
+    public void meth20227() { }
+    public void meth20228() { }
+    public void meth20229() { }
+    public void meth20230() { }
+    public void meth20231() { }
+    public void meth20232() { }
+    public void meth20233() { }
+    public void meth20234() { }
+    public void meth20235() { }
+    public void meth20236() { }
+    public void meth20237() { }
+    public void meth20238() { }
+    public void meth20239() { }
+    public void meth20240() { }
+    public void meth20241() { }
+    public void meth20242() { }
+    public void meth20243() { }
+    public void meth20244() { }
+    public void meth20245() { }
+    public void meth20246() { }
+    public void meth20247() { }
+    public void meth20248() { }
+    public void meth20249() { }
+    public void meth20250() { }
+    public void meth20251() { }
+    public void meth20252() { }
+    public void meth20253() { }
+    public void meth20254() { }
+    public void meth20255() { }
+    public void meth20256() { }
+    public void meth20257() { }
+    public void meth20258() { }
+    public void meth20259() { }
+    public void meth20260() { }
+    public void meth20261() { }
+    public void meth20262() { }
+    public void meth20263() { }
+    public void meth20264() { }
+    public void meth20265() { }
+    public void meth20266() { }
+    public void meth20267() { }
+    public void meth20268() { }
+    public void meth20269() { }
+    public void meth20270() { }
+    public void meth20271() { }
+    public void meth20272() { }
+    public void meth20273() { }
+    public void meth20274() { }
+    public void meth20275() { }
+    public void meth20276() { }
+    public void meth20277() { }
+    public void meth20278() { }
+    public void meth20279() { }
+    public void meth20280() { }
+    public void meth20281() { }
+    public void meth20282() { }
+    public void meth20283() { }
+    public void meth20284() { }
+    public void meth20285() { }
+    public void meth20286() { }
+    public void meth20287() { }
+    public void meth20288() { }
+    public void meth20289() { }
+    public void meth20290() { }
+    public void meth20291() { }
+    public void meth20292() { }
+    public void meth20293() { }
+    public void meth20294() { }
+    public void meth20295() { }
+    public void meth20296() { }
+    public void meth20297() { }
+    public void meth20298() { }
+    public void meth20299() { }
+    public void meth20300() { }
+    public void meth20301() { }
+    public void meth20302() { }
+    public void meth20303() { }
+    public void meth20304() { }
+    public void meth20305() { }
+    public void meth20306() { }
+    public void meth20307() { }
+    public void meth20308() { }
+    public void meth20309() { }
+    public void meth20310() { }
+    public void meth20311() { }
+    public void meth20312() { }
+    public void meth20313() { }
+    public void meth20314() { }
+    public void meth20315() { }
+    public void meth20316() { }
+    public void meth20317() { }
+    public void meth20318() { }
+    public void meth20319() { }
+    public void meth20320() { }
+    public void meth20321() { }
+    public void meth20322() { }
+    public void meth20323() { }
+    public void meth20324() { }
+    public void meth20325() { }
+    public void meth20326() { }
+    public void meth20327() { }
+    public void meth20328() { }
+    public void meth20329() { }
+    public void meth20330() { }
+    public void meth20331() { }
+    public void meth20332() { }
+    public void meth20333() { }
+    public void meth20334() { }
+    public void meth20335() { }
+    public void meth20336() { }
+    public void meth20337() { }
+    public void meth20338() { }
+    public void meth20339() { }
+    public void meth20340() { }
+    public void meth20341() { }
+    public void meth20342() { }
+    public void meth20343() { }
+    public void meth20344() { }
+    public void meth20345() { }
+    public void meth20346() { }
+    public void meth20347() { }
+    public void meth20348() { }
+    public void meth20349() { }
+    public void meth20350() { }
+    public void meth20351() { }
+    public void meth20352() { }
+    public void meth20353() { }
+    public void meth20354() { }
+    public void meth20355() { }
+    public void meth20356() { }
+    public void meth20357() { }
+    public void meth20358() { }
+    public void meth20359() { }
+    public void meth20360() { }
+    public void meth20361() { }
+    public void meth20362() { }
+    public void meth20363() { }
+    public void meth20364() { }
+    public void meth20365() { }
+    public void meth20366() { }
+    public void meth20367() { }
+    public void meth20368() { }
+    public void meth20369() { }
+    public void meth20370() { }
+    public void meth20371() { }
+    public void meth20372() { }
+    public void meth20373() { }
+    public void meth20374() { }
+    public void meth20375() { }
+    public void meth20376() { }
+    public void meth20377() { }
+    public void meth20378() { }
+    public void meth20379() { }
+    public void meth20380() { }
+    public void meth20381() { }
+    public void meth20382() { }
+    public void meth20383() { }
+    public void meth20384() { }
+    public void meth20385() { }
+    public void meth20386() { }
+    public void meth20387() { }
+    public void meth20388() { }
+    public void meth20389() { }
+    public void meth20390() { }
+    public void meth20391() { }
+    public void meth20392() { }
+    public void meth20393() { }
+    public void meth20394() { }
+    public void meth20395() { }
+    public void meth20396() { }
+    public void meth20397() { }
+    public void meth20398() { }
+    public void meth20399() { }
+    public void meth20400() { }
+    public void meth20401() { }
+    public void meth20402() { }
+    public void meth20403() { }
+    public void meth20404() { }
+    public void meth20405() { }
+    public void meth20406() { }
+    public void meth20407() { }
+    public void meth20408() { }
+    public void meth20409() { }
+    public void meth20410() { }
+    public void meth20411() { }
+    public void meth20412() { }
+    public void meth20413() { }
+    public void meth20414() { }
+    public void meth20415() { }
+    public void meth20416() { }
+    public void meth20417() { }
+    public void meth20418() { }
+    public void meth20419() { }
+    public void meth20420() { }
+    public void meth20421() { }
+    public void meth20422() { }
+    public void meth20423() { }
+    public void meth20424() { }
+    public void meth20425() { }
+    public void meth20426() { }
+    public void meth20427() { }
+    public void meth20428() { }
+    public void meth20429() { }
+    public void meth20430() { }
+    public void meth20431() { }
+    public void meth20432() { }
+    public void meth20433() { }
+    public void meth20434() { }
+    public void meth20435() { }
+    public void meth20436() { }
+    public void meth20437() { }
+    public void meth20438() { }
+    public void meth20439() { }
+    public void meth20440() { }
+    public void meth20441() { }
+    public void meth20442() { }
+    public void meth20443() { }
+    public void meth20444() { }
+    public void meth20445() { }
+    public void meth20446() { }
+    public void meth20447() { }
+    public void meth20448() { }
+    public void meth20449() { }
+    public void meth20450() { }
+    public void meth20451() { }
+    public void meth20452() { }
+    public void meth20453() { }
+    public void meth20454() { }
+    public void meth20455() { }
+    public void meth20456() { }
+    public void meth20457() { }
+    public void meth20458() { }
+    public void meth20459() { }
+    public void meth20460() { }
+    public void meth20461() { }
+    public void meth20462() { }
+    public void meth20463() { }
+    public void meth20464() { }
+    public void meth20465() { }
+    public void meth20466() { }
+    public void meth20467() { }
+    public void meth20468() { }
+    public void meth20469() { }
+    public void meth20470() { }
+    public void meth20471() { }
+    public void meth20472() { }
+    public void meth20473() { }
+    public void meth20474() { }
+    public void meth20475() { }
+    public void meth20476() { }
+    public void meth20477() { }
+    public void meth20478() { }
+    public void meth20479() { }
+    public void meth20480() { }
+    public void meth20481() { }
+    public void meth20482() { }
+    public void meth20483() { }
+    public void meth20484() { }
+    public void meth20485() { }
+    public void meth20486() { }
+    public void meth20487() { }
+    public void meth20488() { }
+    public void meth20489() { }
+    public void meth20490() { }
+    public void meth20491() { }
+    public void meth20492() { }
+    public void meth20493() { }
+    public void meth20494() { }
+    public void meth20495() { }
+    public void meth20496() { }
+    public void meth20497() { }
+    public void meth20498() { }
+    public void meth20499() { }
+    public void meth20500() { }
+    public void meth20501() { }
+    public void meth20502() { }
+    public void meth20503() { }
+    public void meth20504() { }
+    public void meth20505() { }
+    public void meth20506() { }
+    public void meth20507() { }
+    public void meth20508() { }
+    public void meth20509() { }
+    public void meth20510() { }
+    public void meth20511() { }
+    public void meth20512() { }
+    public void meth20513() { }
+    public void meth20514() { }
+    public void meth20515() { }
+    public void meth20516() { }
+    public void meth20517() { }
+    public void meth20518() { }
+    public void meth20519() { }
+    public void meth20520() { }
+    public void meth20521() { }
+    public void meth20522() { }
+    public void meth20523() { }
+    public void meth20524() { }
+    public void meth20525() { }
+    public void meth20526() { }
+    public void meth20527() { }
+    public void meth20528() { }
+    public void meth20529() { }
+    public void meth20530() { }
+    public void meth20531() { }
+    public void meth20532() { }
+    public void meth20533() { }
+    public void meth20534() { }
+    public void meth20535() { }
+    public void meth20536() { }
+    public void meth20537() { }
+    public void meth20538() { }
+    public void meth20539() { }
+    public void meth20540() { }
+    public void meth20541() { }
+    public void meth20542() { }
+    public void meth20543() { }
+    public void meth20544() { }
+    public void meth20545() { }
+    public void meth20546() { }
+    public void meth20547() { }
+    public void meth20548() { }
+    public void meth20549() { }
+    public void meth20550() { }
+    public void meth20551() { }
+    public void meth20552() { }
+    public void meth20553() { }
+    public void meth20554() { }
+    public void meth20555() { }
+    public void meth20556() { }
+    public void meth20557() { }
+    public void meth20558() { }
+    public void meth20559() { }
+    public void meth20560() { }
+    public void meth20561() { }
+    public void meth20562() { }
+    public void meth20563() { }
+    public void meth20564() { }
+    public void meth20565() { }
+    public void meth20566() { }
+    public void meth20567() { }
+    public void meth20568() { }
+    public void meth20569() { }
+    public void meth20570() { }
+    public void meth20571() { }
+    public void meth20572() { }
+    public void meth20573() { }
+    public void meth20574() { }
+    public void meth20575() { }
+    public void meth20576() { }
+    public void meth20577() { }
+    public void meth20578() { }
+    public void meth20579() { }
+    public void meth20580() { }
+    public void meth20581() { }
+    public void meth20582() { }
+    public void meth20583() { }
+    public void meth20584() { }
+    public void meth20585() { }
+    public void meth20586() { }
+    public void meth20587() { }
+    public void meth20588() { }
+    public void meth20589() { }
+    public void meth20590() { }
+    public void meth20591() { }
+    public void meth20592() { }
+    public void meth20593() { }
+    public void meth20594() { }
+    public void meth20595() { }
+    public void meth20596() { }
+    public void meth20597() { }
+    public void meth20598() { }
+    public void meth20599() { }
+    public void meth20600() { }
+    public void meth20601() { }
+    public void meth20602() { }
+    public void meth20603() { }
+    public void meth20604() { }
+    public void meth20605() { }
+    public void meth20606() { }
+    public void meth20607() { }
+    public void meth20608() { }
+    public void meth20609() { }
+    public void meth20610() { }
+    public void meth20611() { }
+    public void meth20612() { }
+    public void meth20613() { }
+    public void meth20614() { }
+    public void meth20615() { }
+    public void meth20616() { }
+    public void meth20617() { }
+    public void meth20618() { }
+    public void meth20619() { }
+    public void meth20620() { }
+    public void meth20621() { }
+    public void meth20622() { }
+    public void meth20623() { }
+    public void meth20624() { }
+    public void meth20625() { }
+    public void meth20626() { }
+    public void meth20627() { }
+    public void meth20628() { }
+    public void meth20629() { }
+    public void meth20630() { }
+    public void meth20631() { }
+    public void meth20632() { }
+    public void meth20633() { }
+    public void meth20634() { }
+    public void meth20635() { }
+    public void meth20636() { }
+    public void meth20637() { }
+    public void meth20638() { }
+    public void meth20639() { }
+    public void meth20640() { }
+    public void meth20641() { }
+    public void meth20642() { }
+    public void meth20643() { }
+    public void meth20644() { }
+    public void meth20645() { }
+    public void meth20646() { }
+    public void meth20647() { }
+    public void meth20648() { }
+    public void meth20649() { }
+    public void meth20650() { }
+    public void meth20651() { }
+    public void meth20652() { }
+    public void meth20653() { }
+    public void meth20654() { }
+    public void meth20655() { }
+    public void meth20656() { }
+    public void meth20657() { }
+    public void meth20658() { }
+    public void meth20659() { }
+    public void meth20660() { }
+    public void meth20661() { }
+    public void meth20662() { }
+    public void meth20663() { }
+    public void meth20664() { }
+    public void meth20665() { }
+    public void meth20666() { }
+    public void meth20667() { }
+    public void meth20668() { }
+    public void meth20669() { }
+    public void meth20670() { }
+    public void meth20671() { }
+    public void meth20672() { }
+    public void meth20673() { }
+    public void meth20674() { }
+    public void meth20675() { }
+    public void meth20676() { }
+    public void meth20677() { }
+    public void meth20678() { }
+    public void meth20679() { }
+    public void meth20680() { }
+    public void meth20681() { }
+    public void meth20682() { }
+    public void meth20683() { }
+    public void meth20684() { }
+    public void meth20685() { }
+    public void meth20686() { }
+    public void meth20687() { }
+    public void meth20688() { }
+    public void meth20689() { }
+    public void meth20690() { }
+    public void meth20691() { }
+    public void meth20692() { }
+    public void meth20693() { }
+    public void meth20694() { }
+    public void meth20695() { }
+    public void meth20696() { }
+    public void meth20697() { }
+    public void meth20698() { }
+    public void meth20699() { }
+    public void meth20700() { }
+    public void meth20701() { }
+    public void meth20702() { }
+    public void meth20703() { }
+    public void meth20704() { }
+    public void meth20705() { }
+    public void meth20706() { }
+    public void meth20707() { }
+    public void meth20708() { }
+    public void meth20709() { }
+    public void meth20710() { }
+    public void meth20711() { }
+    public void meth20712() { }
+    public void meth20713() { }
+    public void meth20714() { }
+    public void meth20715() { }
+    public void meth20716() { }
+    public void meth20717() { }
+    public void meth20718() { }
+    public void meth20719() { }
+    public void meth20720() { }
+    public void meth20721() { }
+    public void meth20722() { }
+    public void meth20723() { }
+    public void meth20724() { }
+    public void meth20725() { }
+    public void meth20726() { }
+    public void meth20727() { }
+    public void meth20728() { }
+    public void meth20729() { }
+    public void meth20730() { }
+    public void meth20731() { }
+    public void meth20732() { }
+    public void meth20733() { }
+    public void meth20734() { }
+    public void meth20735() { }
+    public void meth20736() { }
+    public void meth20737() { }
+    public void meth20738() { }
+    public void meth20739() { }
+    public void meth20740() { }
+    public void meth20741() { }
+    public void meth20742() { }
+    public void meth20743() { }
+    public void meth20744() { }
+    public void meth20745() { }
+    public void meth20746() { }
+    public void meth20747() { }
+    public void meth20748() { }
+    public void meth20749() { }
+    public void meth20750() { }
+    public void meth20751() { }
+    public void meth20752() { }
+    public void meth20753() { }
+    public void meth20754() { }
+    public void meth20755() { }
+    public void meth20756() { }
+    public void meth20757() { }
+    public void meth20758() { }
+    public void meth20759() { }
+    public void meth20760() { }
+    public void meth20761() { }
+    public void meth20762() { }
+    public void meth20763() { }
+    public void meth20764() { }
+    public void meth20765() { }
+    public void meth20766() { }
+    public void meth20767() { }
+    public void meth20768() { }
+    public void meth20769() { }
+    public void meth20770() { }
+    public void meth20771() { }
+    public void meth20772() { }
+    public void meth20773() { }
+    public void meth20774() { }
+    public void meth20775() { }
+    public void meth20776() { }
+    public void meth20777() { }
+    public void meth20778() { }
+    public void meth20779() { }
+    public void meth20780() { }
+    public void meth20781() { }
+    public void meth20782() { }
+    public void meth20783() { }
+    public void meth20784() { }
+    public void meth20785() { }
+    public void meth20786() { }
+    public void meth20787() { }
+    public void meth20788() { }
+    public void meth20789() { }
+    public void meth20790() { }
+    public void meth20791() { }
+    public void meth20792() { }
+    public void meth20793() { }
+    public void meth20794() { }
+    public void meth20795() { }
+    public void meth20796() { }
+    public void meth20797() { }
+    public void meth20798() { }
+    public void meth20799() { }
+    public void meth20800() { }
+    public void meth20801() { }
+    public void meth20802() { }
+    public void meth20803() { }
+    public void meth20804() { }
+    public void meth20805() { }
+    public void meth20806() { }
+    public void meth20807() { }
+    public void meth20808() { }
+    public void meth20809() { }
+    public void meth20810() { }
+    public void meth20811() { }
+    public void meth20812() { }
+    public void meth20813() { }
+    public void meth20814() { }
+    public void meth20815() { }
+    public void meth20816() { }
+    public void meth20817() { }
+    public void meth20818() { }
+    public void meth20819() { }
+    public void meth20820() { }
+    public void meth20821() { }
+    public void meth20822() { }
+    public void meth20823() { }
+    public void meth20824() { }
+    public void meth20825() { }
+    public void meth20826() { }
+    public void meth20827() { }
+    public void meth20828() { }
+    public void meth20829() { }
+    public void meth20830() { }
+    public void meth20831() { }
+    public void meth20832() { }
+    public void meth20833() { }
+    public void meth20834() { }
+    public void meth20835() { }
+    public void meth20836() { }
+    public void meth20837() { }
+    public void meth20838() { }
+    public void meth20839() { }
+    public void meth20840() { }
+    public void meth20841() { }
+    public void meth20842() { }
+    public void meth20843() { }
+    public void meth20844() { }
+    public void meth20845() { }
+    public void meth20846() { }
+    public void meth20847() { }
+    public void meth20848() { }
+    public void meth20849() { }
+    public void meth20850() { }
+    public void meth20851() { }
+    public void meth20852() { }
+    public void meth20853() { }
+    public void meth20854() { }
+    public void meth20855() { }
+    public void meth20856() { }
+    public void meth20857() { }
+    public void meth20858() { }
+    public void meth20859() { }
+    public void meth20860() { }
+    public void meth20861() { }
+    public void meth20862() { }
+    public void meth20863() { }
+    public void meth20864() { }
+    public void meth20865() { }
+    public void meth20866() { }
+    public void meth20867() { }
+    public void meth20868() { }
+    public void meth20869() { }
+    public void meth20870() { }
+    public void meth20871() { }
+    public void meth20872() { }
+    public void meth20873() { }
+    public void meth20874() { }
+    public void meth20875() { }
+    public void meth20876() { }
+    public void meth20877() { }
+    public void meth20878() { }
+    public void meth20879() { }
+    public void meth20880() { }
+    public void meth20881() { }
+    public void meth20882() { }
+    public void meth20883() { }
+    public void meth20884() { }
+    public void meth20885() { }
+    public void meth20886() { }
+    public void meth20887() { }
+    public void meth20888() { }
+    public void meth20889() { }
+    public void meth20890() { }
+    public void meth20891() { }
+    public void meth20892() { }
+    public void meth20893() { }
+    public void meth20894() { }
+    public void meth20895() { }
+    public void meth20896() { }
+    public void meth20897() { }
+    public void meth20898() { }
+    public void meth20899() { }
+    public void meth20900() { }
+    public void meth20901() { }
+    public void meth20902() { }
+    public void meth20903() { }
+    public void meth20904() { }
+    public void meth20905() { }
+    public void meth20906() { }
+    public void meth20907() { }
+    public void meth20908() { }
+    public void meth20909() { }
+    public void meth20910() { }
+    public void meth20911() { }
+    public void meth20912() { }
+    public void meth20913() { }
+    public void meth20914() { }
+    public void meth20915() { }
+    public void meth20916() { }
+    public void meth20917() { }
+    public void meth20918() { }
+    public void meth20919() { }
+    public void meth20920() { }
+    public void meth20921() { }
+    public void meth20922() { }
+    public void meth20923() { }
+    public void meth20924() { }
+    public void meth20925() { }
+    public void meth20926() { }
+    public void meth20927() { }
+    public void meth20928() { }
+    public void meth20929() { }
+    public void meth20930() { }
+    public void meth20931() { }
+    public void meth20932() { }
+    public void meth20933() { }
+    public void meth20934() { }
+    public void meth20935() { }
+    public void meth20936() { }
+    public void meth20937() { }
+    public void meth20938() { }
+    public void meth20939() { }
+    public void meth20940() { }
+    public void meth20941() { }
+    public void meth20942() { }
+    public void meth20943() { }
+    public void meth20944() { }
+    public void meth20945() { }
+    public void meth20946() { }
+    public void meth20947() { }
+    public void meth20948() { }
+    public void meth20949() { }
+    public void meth20950() { }
+    public void meth20951() { }
+    public void meth20952() { }
+    public void meth20953() { }
+    public void meth20954() { }
+    public void meth20955() { }
+    public void meth20956() { }
+    public void meth20957() { }
+    public void meth20958() { }
+    public void meth20959() { }
+    public void meth20960() { }
+    public void meth20961() { }
+    public void meth20962() { }
+    public void meth20963() { }
+    public void meth20964() { }
+    public void meth20965() { }
+    public void meth20966() { }
+    public void meth20967() { }
+    public void meth20968() { }
+    public void meth20969() { }
+    public void meth20970() { }
+    public void meth20971() { }
+    public void meth20972() { }
+    public void meth20973() { }
+    public void meth20974() { }
+    public void meth20975() { }
+    public void meth20976() { }
+    public void meth20977() { }
+    public void meth20978() { }
+    public void meth20979() { }
+    public void meth20980() { }
+    public void meth20981() { }
+    public void meth20982() { }
+    public void meth20983() { }
+    public void meth20984() { }
+    public void meth20985() { }
+    public void meth20986() { }
+    public void meth20987() { }
+    public void meth20988() { }
+    public void meth20989() { }
+    public void meth20990() { }
+    public void meth20991() { }
+    public void meth20992() { }
+    public void meth20993() { }
+    public void meth20994() { }
+    public void meth20995() { }
+    public void meth20996() { }
+    public void meth20997() { }
+    public void meth20998() { }
+    public void meth20999() { }
+    public void meth21000() { }
+    public void meth21001() { }
+    public void meth21002() { }
+    public void meth21003() { }
+    public void meth21004() { }
+    public void meth21005() { }
+    public void meth21006() { }
+    public void meth21007() { }
+    public void meth21008() { }
+    public void meth21009() { }
+    public void meth21010() { }
+    public void meth21011() { }
+    public void meth21012() { }
+    public void meth21013() { }
+    public void meth21014() { }
+    public void meth21015() { }
+    public void meth21016() { }
+    public void meth21017() { }
+    public void meth21018() { }
+    public void meth21019() { }
+    public void meth21020() { }
+    public void meth21021() { }
+    public void meth21022() { }
+    public void meth21023() { }
+    public void meth21024() { }
+    public void meth21025() { }
+    public void meth21026() { }
+    public void meth21027() { }
+    public void meth21028() { }
+    public void meth21029() { }
+    public void meth21030() { }
+    public void meth21031() { }
+    public void meth21032() { }
+    public void meth21033() { }
+    public void meth21034() { }
+    public void meth21035() { }
+    public void meth21036() { }
+    public void meth21037() { }
+    public void meth21038() { }
+    public void meth21039() { }
+    public void meth21040() { }
+    public void meth21041() { }
+    public void meth21042() { }
+    public void meth21043() { }
+    public void meth21044() { }
+    public void meth21045() { }
+    public void meth21046() { }
+    public void meth21047() { }
+    public void meth21048() { }
+    public void meth21049() { }
+    public void meth21050() { }
+    public void meth21051() { }
+    public void meth21052() { }
+    public void meth21053() { }
+    public void meth21054() { }
+    public void meth21055() { }
+    public void meth21056() { }
+    public void meth21057() { }
+    public void meth21058() { }
+    public void meth21059() { }
+    public void meth21060() { }
+    public void meth21061() { }
+    public void meth21062() { }
+    public void meth21063() { }
+    public void meth21064() { }
+    public void meth21065() { }
+    public void meth21066() { }
+    public void meth21067() { }
+    public void meth21068() { }
+    public void meth21069() { }
+    public void meth21070() { }
+    public void meth21071() { }
+    public void meth21072() { }
+    public void meth21073() { }
+    public void meth21074() { }
+    public void meth21075() { }
+    public void meth21076() { }
+    public void meth21077() { }
+    public void meth21078() { }
+    public void meth21079() { }
+    public void meth21080() { }
+    public void meth21081() { }
+    public void meth21082() { }
+    public void meth21083() { }
+    public void meth21084() { }
+    public void meth21085() { }
+    public void meth21086() { }
+    public void meth21087() { }
+    public void meth21088() { }
+    public void meth21089() { }
+    public void meth21090() { }
+    public void meth21091() { }
+    public void meth21092() { }
+    public void meth21093() { }
+    public void meth21094() { }
+    public void meth21095() { }
+    public void meth21096() { }
+    public void meth21097() { }
+    public void meth21098() { }
+    public void meth21099() { }
+    public void meth21100() { }
+    public void meth21101() { }
+    public void meth21102() { }
+    public void meth21103() { }
+    public void meth21104() { }
+    public void meth21105() { }
+    public void meth21106() { }
+    public void meth21107() { }
+    public void meth21108() { }
+    public void meth21109() { }
+    public void meth21110() { }
+    public void meth21111() { }
+    public void meth21112() { }
+    public void meth21113() { }
+    public void meth21114() { }
+    public void meth21115() { }
+    public void meth21116() { }
+    public void meth21117() { }
+    public void meth21118() { }
+    public void meth21119() { }
+    public void meth21120() { }
+    public void meth21121() { }
+    public void meth21122() { }
+    public void meth21123() { }
+    public void meth21124() { }
+    public void meth21125() { }
+    public void meth21126() { }
+    public void meth21127() { }
+    public void meth21128() { }
+    public void meth21129() { }
+    public void meth21130() { }
+    public void meth21131() { }
+    public void meth21132() { }
+    public void meth21133() { }
+    public void meth21134() { }
+    public void meth21135() { }
+    public void meth21136() { }
+    public void meth21137() { }
+    public void meth21138() { }
+    public void meth21139() { }
+    public void meth21140() { }
+    public void meth21141() { }
+    public void meth21142() { }
+    public void meth21143() { }
+    public void meth21144() { }
+    public void meth21145() { }
+    public void meth21146() { }
+    public void meth21147() { }
+    public void meth21148() { }
+    public void meth21149() { }
+    public void meth21150() { }
+    public void meth21151() { }
+    public void meth21152() { }
+    public void meth21153() { }
+    public void meth21154() { }
+    public void meth21155() { }
+    public void meth21156() { }
+    public void meth21157() { }
+    public void meth21158() { }
+    public void meth21159() { }
+    public void meth21160() { }
+    public void meth21161() { }
+    public void meth21162() { }
+    public void meth21163() { }
+    public void meth21164() { }
+    public void meth21165() { }
+    public void meth21166() { }
+    public void meth21167() { }
+    public void meth21168() { }
+    public void meth21169() { }
+    public void meth21170() { }
+    public void meth21171() { }
+    public void meth21172() { }
+    public void meth21173() { }
+    public void meth21174() { }
+    public void meth21175() { }
+    public void meth21176() { }
+    public void meth21177() { }
+    public void meth21178() { }
+    public void meth21179() { }
+    public void meth21180() { }
+    public void meth21181() { }
+    public void meth21182() { }
+    public void meth21183() { }
+    public void meth21184() { }
+    public void meth21185() { }
+    public void meth21186() { }
+    public void meth21187() { }
+    public void meth21188() { }
+    public void meth21189() { }
+    public void meth21190() { }
+    public void meth21191() { }
+    public void meth21192() { }
+    public void meth21193() { }
+    public void meth21194() { }
+    public void meth21195() { }
+    public void meth21196() { }
+    public void meth21197() { }
+    public void meth21198() { }
+    public void meth21199() { }
+    public void meth21200() { }
+    public void meth21201() { }
+    public void meth21202() { }
+    public void meth21203() { }
+    public void meth21204() { }
+    public void meth21205() { }
+    public void meth21206() { }
+    public void meth21207() { }
+    public void meth21208() { }
+    public void meth21209() { }
+    public void meth21210() { }
+    public void meth21211() { }
+    public void meth21212() { }
+    public void meth21213() { }
+    public void meth21214() { }
+    public void meth21215() { }
+    public void meth21216() { }
+    public void meth21217() { }
+    public void meth21218() { }
+    public void meth21219() { }
+    public void meth21220() { }
+    public void meth21221() { }
+    public void meth21222() { }
+    public void meth21223() { }
+    public void meth21224() { }
+    public void meth21225() { }
+    public void meth21226() { }
+    public void meth21227() { }
+    public void meth21228() { }
+    public void meth21229() { }
+    public void meth21230() { }
+    public void meth21231() { }
+    public void meth21232() { }
+    public void meth21233() { }
+    public void meth21234() { }
+    public void meth21235() { }
+    public void meth21236() { }
+    public void meth21237() { }
+    public void meth21238() { }
+    public void meth21239() { }
+    public void meth21240() { }
+    public void meth21241() { }
+    public void meth21242() { }
+    public void meth21243() { }
+    public void meth21244() { }
+    public void meth21245() { }
+    public void meth21246() { }
+    public void meth21247() { }
+    public void meth21248() { }
+    public void meth21249() { }
+    public void meth21250() { }
+    public void meth21251() { }
+    public void meth21252() { }
+    public void meth21253() { }
+    public void meth21254() { }
+    public void meth21255() { }
+    public void meth21256() { }
+    public void meth21257() { }
+    public void meth21258() { }
+    public void meth21259() { }
+    public void meth21260() { }
+    public void meth21261() { }
+    public void meth21262() { }
+    public void meth21263() { }
+    public void meth21264() { }
+    public void meth21265() { }
+    public void meth21266() { }
+    public void meth21267() { }
+    public void meth21268() { }
+    public void meth21269() { }
+    public void meth21270() { }
+    public void meth21271() { }
+    public void meth21272() { }
+    public void meth21273() { }
+    public void meth21274() { }
+    public void meth21275() { }
+    public void meth21276() { }
+    public void meth21277() { }
+    public void meth21278() { }
+    public void meth21279() { }
+    public void meth21280() { }
+    public void meth21281() { }
+    public void meth21282() { }
+    public void meth21283() { }
+    public void meth21284() { }
+    public void meth21285() { }
+    public void meth21286() { }
+    public void meth21287() { }
+    public void meth21288() { }
+    public void meth21289() { }
+    public void meth21290() { }
+    public void meth21291() { }
+    public void meth21292() { }
+    public void meth21293() { }
+    public void meth21294() { }
+    public void meth21295() { }
+    public void meth21296() { }
+    public void meth21297() { }
+    public void meth21298() { }
+    public void meth21299() { }
+    public void meth21300() { }
+    public void meth21301() { }
+    public void meth21302() { }
+    public void meth21303() { }
+    public void meth21304() { }
+    public void meth21305() { }
+    public void meth21306() { }
+    public void meth21307() { }
+    public void meth21308() { }
+    public void meth21309() { }
+    public void meth21310() { }
+    public void meth21311() { }
+    public void meth21312() { }
+    public void meth21313() { }
+    public void meth21314() { }
+    public void meth21315() { }
+    public void meth21316() { }
+    public void meth21317() { }
+    public void meth21318() { }
+    public void meth21319() { }
+    public void meth21320() { }
+    public void meth21321() { }
+    public void meth21322() { }
+    public void meth21323() { }
+    public void meth21324() { }
+    public void meth21325() { }
+    public void meth21326() { }
+    public void meth21327() { }
+    public void meth21328() { }
+    public void meth21329() { }
+    public void meth21330() { }
+    public void meth21331() { }
+    public void meth21332() { }
+    public void meth21333() { }
+    public void meth21334() { }
+    public void meth21335() { }
+    public void meth21336() { }
+    public void meth21337() { }
+    public void meth21338() { }
+    public void meth21339() { }
+    public void meth21340() { }
+    public void meth21341() { }
+    public void meth21342() { }
+    public void meth21343() { }
+    public void meth21344() { }
+    public void meth21345() { }
+    public void meth21346() { }
+    public void meth21347() { }
+    public void meth21348() { }
+    public void meth21349() { }
+    public void meth21350() { }
+    public void meth21351() { }
+    public void meth21352() { }
+    public void meth21353() { }
+    public void meth21354() { }
+    public void meth21355() { }
+    public void meth21356() { }
+    public void meth21357() { }
+    public void meth21358() { }
+    public void meth21359() { }
+    public void meth21360() { }
+    public void meth21361() { }
+    public void meth21362() { }
+    public void meth21363() { }
+    public void meth21364() { }
+    public void meth21365() { }
+    public void meth21366() { }
+    public void meth21367() { }
+    public void meth21368() { }
+    public void meth21369() { }
+    public void meth21370() { }
+    public void meth21371() { }
+    public void meth21372() { }
+    public void meth21373() { }
+    public void meth21374() { }
+    public void meth21375() { }
+    public void meth21376() { }
+    public void meth21377() { }
+    public void meth21378() { }
+    public void meth21379() { }
+    public void meth21380() { }
+    public void meth21381() { }
+    public void meth21382() { }
+    public void meth21383() { }
+    public void meth21384() { }
+    public void meth21385() { }
+    public void meth21386() { }
+    public void meth21387() { }
+    public void meth21388() { }
+    public void meth21389() { }
+    public void meth21390() { }
+    public void meth21391() { }
+    public void meth21392() { }
+    public void meth21393() { }
+    public void meth21394() { }
+    public void meth21395() { }
+    public void meth21396() { }
+    public void meth21397() { }
+    public void meth21398() { }
+    public void meth21399() { }
+    public void meth21400() { }
+    public void meth21401() { }
+    public void meth21402() { }
+    public void meth21403() { }
+    public void meth21404() { }
+    public void meth21405() { }
+    public void meth21406() { }
+    public void meth21407() { }
+    public void meth21408() { }
+    public void meth21409() { }
+    public void meth21410() { }
+    public void meth21411() { }
+    public void meth21412() { }
+    public void meth21413() { }
+    public void meth21414() { }
+    public void meth21415() { }
+    public void meth21416() { }
+    public void meth21417() { }
+    public void meth21418() { }
+    public void meth21419() { }
+    public void meth21420() { }
+    public void meth21421() { }
+    public void meth21422() { }
+    public void meth21423() { }
+    public void meth21424() { }
+    public void meth21425() { }
+    public void meth21426() { }
+    public void meth21427() { }
+    public void meth21428() { }
+    public void meth21429() { }
+    public void meth21430() { }
+    public void meth21431() { }
+    public void meth21432() { }
+    public void meth21433() { }
+    public void meth21434() { }
+    public void meth21435() { }
+    public void meth21436() { }
+    public void meth21437() { }
+    public void meth21438() { }
+    public void meth21439() { }
+    public void meth21440() { }
+    public void meth21441() { }
+    public void meth21442() { }
+    public void meth21443() { }
+    public void meth21444() { }
+    public void meth21445() { }
+    public void meth21446() { }
+    public void meth21447() { }
+    public void meth21448() { }
+    public void meth21449() { }
+    public void meth21450() { }
+    public void meth21451() { }
+    public void meth21452() { }
+    public void meth21453() { }
+    public void meth21454() { }
+    public void meth21455() { }
+    public void meth21456() { }
+    public void meth21457() { }
+    public void meth21458() { }
+    public void meth21459() { }
+    public void meth21460() { }
+    public void meth21461() { }
+    public void meth21462() { }
+    public void meth21463() { }
+    public void meth21464() { }
+    public void meth21465() { }
+    public void meth21466() { }
+    public void meth21467() { }
+    public void meth21468() { }
+    public void meth21469() { }
+    public void meth21470() { }
+    public void meth21471() { }
+    public void meth21472() { }
+    public void meth21473() { }
+    public void meth21474() { }
+    public void meth21475() { }
+    public void meth21476() { }
+    public void meth21477() { }
+    public void meth21478() { }
+    public void meth21479() { }
+    public void meth21480() { }
+    public void meth21481() { }
+    public void meth21482() { }
+    public void meth21483() { }
+    public void meth21484() { }
+    public void meth21485() { }
+    public void meth21486() { }
+    public void meth21487() { }
+    public void meth21488() { }
+    public void meth21489() { }
+    public void meth21490() { }
+    public void meth21491() { }
+    public void meth21492() { }
+    public void meth21493() { }
+    public void meth21494() { }
+    public void meth21495() { }
+    public void meth21496() { }
+    public void meth21497() { }
+    public void meth21498() { }
+    public void meth21499() { }
+    public void meth21500() { }
+    public void meth21501() { }
+    public void meth21502() { }
+    public void meth21503() { }
+    public void meth21504() { }
+    public void meth21505() { }
+    public void meth21506() { }
+    public void meth21507() { }
+    public void meth21508() { }
+    public void meth21509() { }
+    public void meth21510() { }
+    public void meth21511() { }
+    public void meth21512() { }
+    public void meth21513() { }
+    public void meth21514() { }
+    public void meth21515() { }
+    public void meth21516() { }
+    public void meth21517() { }
+    public void meth21518() { }
+    public void meth21519() { }
+    public void meth21520() { }
+    public void meth21521() { }
+    public void meth21522() { }
+    public void meth21523() { }
+    public void meth21524() { }
+    public void meth21525() { }
+    public void meth21526() { }
+    public void meth21527() { }
+    public void meth21528() { }
+    public void meth21529() { }
+    public void meth21530() { }
+    public void meth21531() { }
+    public void meth21532() { }
+    public void meth21533() { }
+    public void meth21534() { }
+    public void meth21535() { }
+    public void meth21536() { }
+    public void meth21537() { }
+    public void meth21538() { }
+    public void meth21539() { }
+    public void meth21540() { }
+    public void meth21541() { }
+    public void meth21542() { }
+    public void meth21543() { }
+    public void meth21544() { }
+    public void meth21545() { }
+    public void meth21546() { }
+    public void meth21547() { }
+    public void meth21548() { }
+    public void meth21549() { }
+    public void meth21550() { }
+    public void meth21551() { }
+    public void meth21552() { }
+    public void meth21553() { }
+    public void meth21554() { }
+    public void meth21555() { }
+    public void meth21556() { }
+    public void meth21557() { }
+    public void meth21558() { }
+    public void meth21559() { }
+    public void meth21560() { }
+    public void meth21561() { }
+    public void meth21562() { }
+    public void meth21563() { }
+    public void meth21564() { }
+    public void meth21565() { }
+    public void meth21566() { }
+    public void meth21567() { }
+    public void meth21568() { }
+    public void meth21569() { }
+    public void meth21570() { }
+    public void meth21571() { }
+    public void meth21572() { }
+    public void meth21573() { }
+    public void meth21574() { }
+    public void meth21575() { }
+    public void meth21576() { }
+    public void meth21577() { }
+    public void meth21578() { }
+    public void meth21579() { }
+    public void meth21580() { }
+    public void meth21581() { }
+    public void meth21582() { }
+    public void meth21583() { }
+    public void meth21584() { }
+    public void meth21585() { }
+    public void meth21586() { }
+    public void meth21587() { }
+    public void meth21588() { }
+    public void meth21589() { }
+    public void meth21590() { }
+    public void meth21591() { }
+    public void meth21592() { }
+    public void meth21593() { }
+    public void meth21594() { }
+    public void meth21595() { }
+    public void meth21596() { }
+    public void meth21597() { }
+    public void meth21598() { }
+    public void meth21599() { }
+    public void meth21600() { }
+    public void meth21601() { }
+    public void meth21602() { }
+    public void meth21603() { }
+    public void meth21604() { }
+    public void meth21605() { }
+    public void meth21606() { }
+    public void meth21607() { }
+    public void meth21608() { }
+    public void meth21609() { }
+    public void meth21610() { }
+    public void meth21611() { }
+    public void meth21612() { }
+    public void meth21613() { }
+    public void meth21614() { }
+    public void meth21615() { }
+    public void meth21616() { }
+    public void meth21617() { }
+    public void meth21618() { }
+    public void meth21619() { }
+    public void meth21620() { }
+    public void meth21621() { }
+    public void meth21622() { }
+    public void meth21623() { }
+    public void meth21624() { }
+    public void meth21625() { }
+    public void meth21626() { }
+    public void meth21627() { }
+    public void meth21628() { }
+    public void meth21629() { }
+    public void meth21630() { }
+    public void meth21631() { }
+    public void meth21632() { }
+    public void meth21633() { }
+    public void meth21634() { }
+    public void meth21635() { }
+    public void meth21636() { }
+    public void meth21637() { }
+    public void meth21638() { }
+    public void meth21639() { }
+    public void meth21640() { }
+    public void meth21641() { }
+    public void meth21642() { }
+    public void meth21643() { }
+    public void meth21644() { }
+    public void meth21645() { }
+    public void meth21646() { }
+    public void meth21647() { }
+    public void meth21648() { }
+    public void meth21649() { }
+    public void meth21650() { }
+    public void meth21651() { }
+    public void meth21652() { }
+    public void meth21653() { }
+    public void meth21654() { }
+    public void meth21655() { }
+    public void meth21656() { }
+    public void meth21657() { }
+    public void meth21658() { }
+    public void meth21659() { }
+    public void meth21660() { }
+    public void meth21661() { }
+    public void meth21662() { }
+    public void meth21663() { }
+    public void meth21664() { }
+    public void meth21665() { }
+    public void meth21666() { }
+    public void meth21667() { }
+    public void meth21668() { }
+    public void meth21669() { }
+    public void meth21670() { }
+    public void meth21671() { }
+    public void meth21672() { }
+    public void meth21673() { }
+    public void meth21674() { }
+    public void meth21675() { }
+    public void meth21676() { }
+    public void meth21677() { }
+    public void meth21678() { }
+    public void meth21679() { }
+    public void meth21680() { }
+    public void meth21681() { }
+    public void meth21682() { }
+    public void meth21683() { }
+    public void meth21684() { }
+    public void meth21685() { }
+    public void meth21686() { }
+    public void meth21687() { }
+    public void meth21688() { }
+    public void meth21689() { }
+    public void meth21690() { }
+    public void meth21691() { }
+    public void meth21692() { }
+    public void meth21693() { }
+    public void meth21694() { }
+    public void meth21695() { }
+    public void meth21696() { }
+    public void meth21697() { }
+    public void meth21698() { }
+    public void meth21699() { }
+    public void meth21700() { }
+    public void meth21701() { }
+    public void meth21702() { }
+    public void meth21703() { }
+    public void meth21704() { }
+    public void meth21705() { }
+    public void meth21706() { }
+    public void meth21707() { }
+    public void meth21708() { }
+    public void meth21709() { }
+    public void meth21710() { }
+    public void meth21711() { }
+    public void meth21712() { }
+    public void meth21713() { }
+    public void meth21714() { }
+    public void meth21715() { }
+    public void meth21716() { }
+    public void meth21717() { }
+    public void meth21718() { }
+    public void meth21719() { }
+    public void meth21720() { }
+    public void meth21721() { }
+    public void meth21722() { }
+    public void meth21723() { }
+    public void meth21724() { }
+    public void meth21725() { }
+    public void meth21726() { }
+    public void meth21727() { }
+    public void meth21728() { }
+    public void meth21729() { }
+    public void meth21730() { }
+    public void meth21731() { }
+    public void meth21732() { }
+    public void meth21733() { }
+    public void meth21734() { }
+    public void meth21735() { }
+    public void meth21736() { }
+    public void meth21737() { }
+    public void meth21738() { }
+    public void meth21739() { }
+    public void meth21740() { }
+    public void meth21741() { }
+    public void meth21742() { }
+    public void meth21743() { }
+    public void meth21744() { }
+    public void meth21745() { }
+    public void meth21746() { }
+    public void meth21747() { }
+    public void meth21748() { }
+    public void meth21749() { }
+    public void meth21750() { }
+    public void meth21751() { }
+    public void meth21752() { }
+    public void meth21753() { }
+    public void meth21754() { }
+    public void meth21755() { }
+    public void meth21756() { }
+    public void meth21757() { }
+    public void meth21758() { }
+    public void meth21759() { }
+    public void meth21760() { }
+    public void meth21761() { }
+    public void meth21762() { }
+    public void meth21763() { }
+    public void meth21764() { }
+    public void meth21765() { }
+    public void meth21766() { }
+    public void meth21767() { }
+    public void meth21768() { }
+    public void meth21769() { }
+    public void meth21770() { }
+    public void meth21771() { }
+    public void meth21772() { }
+    public void meth21773() { }
+    public void meth21774() { }
+    public void meth21775() { }
+    public void meth21776() { }
+    public void meth21777() { }
+    public void meth21778() { }
+    public void meth21779() { }
+    public void meth21780() { }
+    public void meth21781() { }
+    public void meth21782() { }
+    public void meth21783() { }
+    public void meth21784() { }
+    public void meth21785() { }
+    public void meth21786() { }
+    public void meth21787() { }
+    public void meth21788() { }
+    public void meth21789() { }
+    public void meth21790() { }
+    public void meth21791() { }
+    public void meth21792() { }
+    public void meth21793() { }
+    public void meth21794() { }
+    public void meth21795() { }
+    public void meth21796() { }
+    public void meth21797() { }
+    public void meth21798() { }
+    public void meth21799() { }
+    public void meth21800() { }
+    public void meth21801() { }
+    public void meth21802() { }
+    public void meth21803() { }
+    public void meth21804() { }
+    public void meth21805() { }
+    public void meth21806() { }
+    public void meth21807() { }
+    public void meth21808() { }
+    public void meth21809() { }
+    public void meth21810() { }
+    public void meth21811() { }
+    public void meth21812() { }
+    public void meth21813() { }
+    public void meth21814() { }
+    public void meth21815() { }
+    public void meth21816() { }
+    public void meth21817() { }
+    public void meth21818() { }
+    public void meth21819() { }
+    public void meth21820() { }
+    public void meth21821() { }
+    public void meth21822() { }
+    public void meth21823() { }
+    public void meth21824() { }
+    public void meth21825() { }
+    public void meth21826() { }
+    public void meth21827() { }
+    public void meth21828() { }
+    public void meth21829() { }
+    public void meth21830() { }
+    public void meth21831() { }
+    public void meth21832() { }
+    public void meth21833() { }
+    public void meth21834() { }
+    public void meth21835() { }
+    public void meth21836() { }
+    public void meth21837() { }
+    public void meth21838() { }
+    public void meth21839() { }
+    public void meth21840() { }
+    public void meth21841() { }
+    public void meth21842() { }
+    public void meth21843() { }
+    public void meth21844() { }
+    public void meth21845() { }
+    public void meth21846() { }
+    public void meth21847() { }
+    public void meth21848() { }
+    public void meth21849() { }
+    public void meth21850() { }
+    public void meth21851() { }
+    public void meth21852() { }
+    public void meth21853() { }
+    public void meth21854() { }
+    public void meth21855() { }
+    public void meth21856() { }
+    public void meth21857() { }
+    public void meth21858() { }
+    public void meth21859() { }
+    public void meth21860() { }
+    public void meth21861() { }
+    public void meth21862() { }
+    public void meth21863() { }
+    public void meth21864() { }
+    public void meth21865() { }
+    public void meth21866() { }
+    public void meth21867() { }
+    public void meth21868() { }
+    public void meth21869() { }
+    public void meth21870() { }
+    public void meth21871() { }
+    public void meth21872() { }
+    public void meth21873() { }
+    public void meth21874() { }
+    public void meth21875() { }
+    public void meth21876() { }
+    public void meth21877() { }
+    public void meth21878() { }
+    public void meth21879() { }
+    public void meth21880() { }
+    public void meth21881() { }
+    public void meth21882() { }
+    public void meth21883() { }
+    public void meth21884() { }
+    public void meth21885() { }
+    public void meth21886() { }
+    public void meth21887() { }
+    public void meth21888() { }
+    public void meth21889() { }
+    public void meth21890() { }
+    public void meth21891() { }
+    public void meth21892() { }
+    public void meth21893() { }
+    public void meth21894() { }
+    public void meth21895() { }
+    public void meth21896() { }
+    public void meth21897() { }
+    public void meth21898() { }
+    public void meth21899() { }
+    public void meth21900() { }
+    public void meth21901() { }
+    public void meth21902() { }
+    public void meth21903() { }
+    public void meth21904() { }
+    public void meth21905() { }
+    public void meth21906() { }
+    public void meth21907() { }
+    public void meth21908() { }
+    public void meth21909() { }
+    public void meth21910() { }
+    public void meth21911() { }
+    public void meth21912() { }
+    public void meth21913() { }
+    public void meth21914() { }
+    public void meth21915() { }
+    public void meth21916() { }
+    public void meth21917() { }
+    public void meth21918() { }
+    public void meth21919() { }
+    public void meth21920() { }
+    public void meth21921() { }
+    public void meth21922() { }
+    public void meth21923() { }
+    public void meth21924() { }
+    public void meth21925() { }
+    public void meth21926() { }
+    public void meth21927() { }
+    public void meth21928() { }
+    public void meth21929() { }
+    public void meth21930() { }
+    public void meth21931() { }
+    public void meth21932() { }
+    public void meth21933() { }
+    public void meth21934() { }
+    public void meth21935() { }
+    public void meth21936() { }
+    public void meth21937() { }
+    public void meth21938() { }
+    public void meth21939() { }
+    public void meth21940() { }
+    public void meth21941() { }
+    public void meth21942() { }
+    public void meth21943() { }
+    public void meth21944() { }
+    public void meth21945() { }
+    public void meth21946() { }
+    public void meth21947() { }
+    public void meth21948() { }
+    public void meth21949() { }
+    public void meth21950() { }
+    public void meth21951() { }
+    public void meth21952() { }
+    public void meth21953() { }
+    public void meth21954() { }
+    public void meth21955() { }
+    public void meth21956() { }
+    public void meth21957() { }
+    public void meth21958() { }
+    public void meth21959() { }
+    public void meth21960() { }
+    public void meth21961() { }
+    public void meth21962() { }
+    public void meth21963() { }
+    public void meth21964() { }
+    public void meth21965() { }
+    public void meth21966() { }
+    public void meth21967() { }
+    public void meth21968() { }
+    public void meth21969() { }
+    public void meth21970() { }
+    public void meth21971() { }
+    public void meth21972() { }
+    public void meth21973() { }
+    public void meth21974() { }
+    public void meth21975() { }
+    public void meth21976() { }
+    public void meth21977() { }
+    public void meth21978() { }
+    public void meth21979() { }
+    public void meth21980() { }
+    public void meth21981() { }
+    public void meth21982() { }
+    public void meth21983() { }
+    public void meth21984() { }
+    public void meth21985() { }
+    public void meth21986() { }
+    public void meth21987() { }
+    public void meth21988() { }
+    public void meth21989() { }
+    public void meth21990() { }
+    public void meth21991() { }
+    public void meth21992() { }
+    public void meth21993() { }
+    public void meth21994() { }
+    public void meth21995() { }
+    public void meth21996() { }
+    public void meth21997() { }
+    public void meth21998() { }
+    public void meth21999() { }
+    public void meth22000() { }
+    public void meth22001() { }
+    public void meth22002() { }
+    public void meth22003() { }
+    public void meth22004() { }
+    public void meth22005() { }
+    public void meth22006() { }
+    public void meth22007() { }
+    public void meth22008() { }
+    public void meth22009() { }
+    public void meth22010() { }
+    public void meth22011() { }
+    public void meth22012() { }
+    public void meth22013() { }
+    public void meth22014() { }
+    public void meth22015() { }
+    public void meth22016() { }
+    public void meth22017() { }
+    public void meth22018() { }
+    public void meth22019() { }
+    public void meth22020() { }
+    public void meth22021() { }
+    public void meth22022() { }
+    public void meth22023() { }
+    public void meth22024() { }
+    public void meth22025() { }
+    public void meth22026() { }
+    public void meth22027() { }
+    public void meth22028() { }
+    public void meth22029() { }
+    public void meth22030() { }
+    public void meth22031() { }
+    public void meth22032() { }
+    public void meth22033() { }
+    public void meth22034() { }
+    public void meth22035() { }
+    public void meth22036() { }
+    public void meth22037() { }
+    public void meth22038() { }
+    public void meth22039() { }
+    public void meth22040() { }
+    public void meth22041() { }
+    public void meth22042() { }
+    public void meth22043() { }
+    public void meth22044() { }
+    public void meth22045() { }
+    public void meth22046() { }
+    public void meth22047() { }
+    public void meth22048() { }
+    public void meth22049() { }
+    public void meth22050() { }
+    public void meth22051() { }
+    public void meth22052() { }
+    public void meth22053() { }
+    public void meth22054() { }
+    public void meth22055() { }
+    public void meth22056() { }
+    public void meth22057() { }
+    public void meth22058() { }
+    public void meth22059() { }
+    public void meth22060() { }
+    public void meth22061() { }
+    public void meth22062() { }
+    public void meth22063() { }
+    public void meth22064() { }
+    public void meth22065() { }
+    public void meth22066() { }
+    public void meth22067() { }
+    public void meth22068() { }
+    public void meth22069() { }
+    public void meth22070() { }
+    public void meth22071() { }
+    public void meth22072() { }
+    public void meth22073() { }
+    public void meth22074() { }
+    public void meth22075() { }
+    public void meth22076() { }
+    public void meth22077() { }
+    public void meth22078() { }
+    public void meth22079() { }
+    public void meth22080() { }
+    public void meth22081() { }
+    public void meth22082() { }
+    public void meth22083() { }
+    public void meth22084() { }
+    public void meth22085() { }
+    public void meth22086() { }
+    public void meth22087() { }
+    public void meth22088() { }
+    public void meth22089() { }
+    public void meth22090() { }
+    public void meth22091() { }
+    public void meth22092() { }
+    public void meth22093() { }
+    public void meth22094() { }
+    public void meth22095() { }
+    public void meth22096() { }
+    public void meth22097() { }
+    public void meth22098() { }
+    public void meth22099() { }
+    public void meth22100() { }
+    public void meth22101() { }
+    public void meth22102() { }
+    public void meth22103() { }
+    public void meth22104() { }
+    public void meth22105() { }
+    public void meth22106() { }
+    public void meth22107() { }
+    public void meth22108() { }
+    public void meth22109() { }
+    public void meth22110() { }
+    public void meth22111() { }
+    public void meth22112() { }
+    public void meth22113() { }
+    public void meth22114() { }
+    public void meth22115() { }
+    public void meth22116() { }
+    public void meth22117() { }
+    public void meth22118() { }
+    public void meth22119() { }
+    public void meth22120() { }
+    public void meth22121() { }
+    public void meth22122() { }
+    public void meth22123() { }
+    public void meth22124() { }
+    public void meth22125() { }
+    public void meth22126() { }
+    public void meth22127() { }
+    public void meth22128() { }
+    public void meth22129() { }
+    public void meth22130() { }
+    public void meth22131() { }
+    public void meth22132() { }
+    public void meth22133() { }
+    public void meth22134() { }
+    public void meth22135() { }
+    public void meth22136() { }
+    public void meth22137() { }
+    public void meth22138() { }
+    public void meth22139() { }
+    public void meth22140() { }
+    public void meth22141() { }
+    public void meth22142() { }
+    public void meth22143() { }
+    public void meth22144() { }
+    public void meth22145() { }
+    public void meth22146() { }
+    public void meth22147() { }
+    public void meth22148() { }
+    public void meth22149() { }
+    public void meth22150() { }
+    public void meth22151() { }
+    public void meth22152() { }
+    public void meth22153() { }
+    public void meth22154() { }
+    public void meth22155() { }
+    public void meth22156() { }
+    public void meth22157() { }
+    public void meth22158() { }
+    public void meth22159() { }
+    public void meth22160() { }
+    public void meth22161() { }
+    public void meth22162() { }
+    public void meth22163() { }
+    public void meth22164() { }
+    public void meth22165() { }
+    public void meth22166() { }
+    public void meth22167() { }
+    public void meth22168() { }
+    public void meth22169() { }
+    public void meth22170() { }
+    public void meth22171() { }
+    public void meth22172() { }
+    public void meth22173() { }
+    public void meth22174() { }
+    public void meth22175() { }
+    public void meth22176() { }
+    public void meth22177() { }
+    public void meth22178() { }
+    public void meth22179() { }
+    public void meth22180() { }
+    public void meth22181() { }
+    public void meth22182() { }
+    public void meth22183() { }
+    public void meth22184() { }
+    public void meth22185() { }
+    public void meth22186() { }
+    public void meth22187() { }
+    public void meth22188() { }
+    public void meth22189() { }
+    public void meth22190() { }
+    public void meth22191() { }
+    public void meth22192() { }
+    public void meth22193() { }
+    public void meth22194() { }
+    public void meth22195() { }
+    public void meth22196() { }
+    public void meth22197() { }
+    public void meth22198() { }
+    public void meth22199() { }
+    public void meth22200() { }
+    public void meth22201() { }
+    public void meth22202() { }
+    public void meth22203() { }
+    public void meth22204() { }
+    public void meth22205() { }
+    public void meth22206() { }
+    public void meth22207() { }
+    public void meth22208() { }
+    public void meth22209() { }
+    public void meth22210() { }
+    public void meth22211() { }
+    public void meth22212() { }
+    public void meth22213() { }
+    public void meth22214() { }
+    public void meth22215() { }
+    public void meth22216() { }
+    public void meth22217() { }
+    public void meth22218() { }
+    public void meth22219() { }
+    public void meth22220() { }
+    public void meth22221() { }
+    public void meth22222() { }
+    public void meth22223() { }
+    public void meth22224() { }
+    public void meth22225() { }
+    public void meth22226() { }
+    public void meth22227() { }
+    public void meth22228() { }
+    public void meth22229() { }
+    public void meth22230() { }
+    public void meth22231() { }
+    public void meth22232() { }
+    public void meth22233() { }
+    public void meth22234() { }
+    public void meth22235() { }
+    public void meth22236() { }
+    public void meth22237() { }
+    public void meth22238() { }
+    public void meth22239() { }
+    public void meth22240() { }
+    public void meth22241() { }
+    public void meth22242() { }
+    public void meth22243() { }
+    public void meth22244() { }
+    public void meth22245() { }
+    public void meth22246() { }
+    public void meth22247() { }
+    public void meth22248() { }
+    public void meth22249() { }
+    public void meth22250() { }
+    public void meth22251() { }
+    public void meth22252() { }
+    public void meth22253() { }
+    public void meth22254() { }
+    public void meth22255() { }
+    public void meth22256() { }
+    public void meth22257() { }
+    public void meth22258() { }
+    public void meth22259() { }
+    public void meth22260() { }
+    public void meth22261() { }
+    public void meth22262() { }
+    public void meth22263() { }
+    public void meth22264() { }
+    public void meth22265() { }
+    public void meth22266() { }
+    public void meth22267() { }
+    public void meth22268() { }
+    public void meth22269() { }
+    public void meth22270() { }
+    public void meth22271() { }
+    public void meth22272() { }
+    public void meth22273() { }
+    public void meth22274() { }
+    public void meth22275() { }
+    public void meth22276() { }
+    public void meth22277() { }
+    public void meth22278() { }
+    public void meth22279() { }
+    public void meth22280() { }
+    public void meth22281() { }
+    public void meth22282() { }
+    public void meth22283() { }
+    public void meth22284() { }
+    public void meth22285() { }
+    public void meth22286() { }
+    public void meth22287() { }
+    public void meth22288() { }
+    public void meth22289() { }
+    public void meth22290() { }
+    public void meth22291() { }
+    public void meth22292() { }
+    public void meth22293() { }
+    public void meth22294() { }
+    public void meth22295() { }
+    public void meth22296() { }
+    public void meth22297() { }
+    public void meth22298() { }
+    public void meth22299() { }
+    public void meth22300() { }
+    public void meth22301() { }
+    public void meth22302() { }
+    public void meth22303() { }
+    public void meth22304() { }
+    public void meth22305() { }
+    public void meth22306() { }
+    public void meth22307() { }
+    public void meth22308() { }
+    public void meth22309() { }
+    public void meth22310() { }
+    public void meth22311() { }
+    public void meth22312() { }
+    public void meth22313() { }
+    public void meth22314() { }
+    public void meth22315() { }
+    public void meth22316() { }
+    public void meth22317() { }
+    public void meth22318() { }
+    public void meth22319() { }
+    public void meth22320() { }
+    public void meth22321() { }
+    public void meth22322() { }
+    public void meth22323() { }
+    public void meth22324() { }
+    public void meth22325() { }
+    public void meth22326() { }
+    public void meth22327() { }
+    public void meth22328() { }
+    public void meth22329() { }
+    public void meth22330() { }
+    public void meth22331() { }
+    public void meth22332() { }
+    public void meth22333() { }
+    public void meth22334() { }
+    public void meth22335() { }
+    public void meth22336() { }
+    public void meth22337() { }
+    public void meth22338() { }
+    public void meth22339() { }
+    public void meth22340() { }
+    public void meth22341() { }
+    public void meth22342() { }
+    public void meth22343() { }
+    public void meth22344() { }
+    public void meth22345() { }
+    public void meth22346() { }
+    public void meth22347() { }
+    public void meth22348() { }
+    public void meth22349() { }
+    public void meth22350() { }
+    public void meth22351() { }
+    public void meth22352() { }
+    public void meth22353() { }
+    public void meth22354() { }
+    public void meth22355() { }
+    public void meth22356() { }
+    public void meth22357() { }
+    public void meth22358() { }
+    public void meth22359() { }
+    public void meth22360() { }
+    public void meth22361() { }
+    public void meth22362() { }
+    public void meth22363() { }
+    public void meth22364() { }
+    public void meth22365() { }
+    public void meth22366() { }
+    public void meth22367() { }
+    public void meth22368() { }
+    public void meth22369() { }
+    public void meth22370() { }
+    public void meth22371() { }
+    public void meth22372() { }
+    public void meth22373() { }
+    public void meth22374() { }
+    public void meth22375() { }
+    public void meth22376() { }
+    public void meth22377() { }
+    public void meth22378() { }
+    public void meth22379() { }
+    public void meth22380() { }
+    public void meth22381() { }
+    public void meth22382() { }
+    public void meth22383() { }
+    public void meth22384() { }
+    public void meth22385() { }
+    public void meth22386() { }
+    public void meth22387() { }
+    public void meth22388() { }
+    public void meth22389() { }
+    public void meth22390() { }
+    public void meth22391() { }
+    public void meth22392() { }
+    public void meth22393() { }
+    public void meth22394() { }
+    public void meth22395() { }
+    public void meth22396() { }
+    public void meth22397() { }
+    public void meth22398() { }
+    public void meth22399() { }
+    public void meth22400() { }
+    public void meth22401() { }
+    public void meth22402() { }
+    public void meth22403() { }
+    public void meth22404() { }
+    public void meth22405() { }
+    public void meth22406() { }
+    public void meth22407() { }
+    public void meth22408() { }
+    public void meth22409() { }
+    public void meth22410() { }
+    public void meth22411() { }
+    public void meth22412() { }
+    public void meth22413() { }
+    public void meth22414() { }
+    public void meth22415() { }
+    public void meth22416() { }
+    public void meth22417() { }
+    public void meth22418() { }
+    public void meth22419() { }
+    public void meth22420() { }
+    public void meth22421() { }
+    public void meth22422() { }
+    public void meth22423() { }
+    public void meth22424() { }
+    public void meth22425() { }
+    public void meth22426() { }
+    public void meth22427() { }
+    public void meth22428() { }
+    public void meth22429() { }
+    public void meth22430() { }
+    public void meth22431() { }
+    public void meth22432() { }
+    public void meth22433() { }
+    public void meth22434() { }
+    public void meth22435() { }
+    public void meth22436() { }
+    public void meth22437() { }
+    public void meth22438() { }
+    public void meth22439() { }
+    public void meth22440() { }
+    public void meth22441() { }
+    public void meth22442() { }
+    public void meth22443() { }
+    public void meth22444() { }
+    public void meth22445() { }
+    public void meth22446() { }
+    public void meth22447() { }
+    public void meth22448() { }
+    public void meth22449() { }
+    public void meth22450() { }
+    public void meth22451() { }
+    public void meth22452() { }
+    public void meth22453() { }
+    public void meth22454() { }
+    public void meth22455() { }
+    public void meth22456() { }
+    public void meth22457() { }
+    public void meth22458() { }
+    public void meth22459() { }
+    public void meth22460() { }
+    public void meth22461() { }
+    public void meth22462() { }
+    public void meth22463() { }
+    public void meth22464() { }
+    public void meth22465() { }
+    public void meth22466() { }
+    public void meth22467() { }
+    public void meth22468() { }
+    public void meth22469() { }
+    public void meth22470() { }
+    public void meth22471() { }
+    public void meth22472() { }
+    public void meth22473() { }
+    public void meth22474() { }
+    public void meth22475() { }
+    public void meth22476() { }
+    public void meth22477() { }
+    public void meth22478() { }
+    public void meth22479() { }
+    public void meth22480() { }
+    public void meth22481() { }
+    public void meth22482() { }
+    public void meth22483() { }
+    public void meth22484() { }
+    public void meth22485() { }
+    public void meth22486() { }
+    public void meth22487() { }
+    public void meth22488() { }
+    public void meth22489() { }
+    public void meth22490() { }
+    public void meth22491() { }
+    public void meth22492() { }
+    public void meth22493() { }
+    public void meth22494() { }
+    public void meth22495() { }
+    public void meth22496() { }
+    public void meth22497() { }
+    public void meth22498() { }
+    public void meth22499() { }
+    public void meth22500() { }
+    public void meth22501() { }
+    public void meth22502() { }
+    public void meth22503() { }
+    public void meth22504() { }
+    public void meth22505() { }
+    public void meth22506() { }
+    public void meth22507() { }
+    public void meth22508() { }
+    public void meth22509() { }
+    public void meth22510() { }
+    public void meth22511() { }
+    public void meth22512() { }
+    public void meth22513() { }
+    public void meth22514() { }
+    public void meth22515() { }
+    public void meth22516() { }
+    public void meth22517() { }
+    public void meth22518() { }
+    public void meth22519() { }
+    public void meth22520() { }
+    public void meth22521() { }
+    public void meth22522() { }
+    public void meth22523() { }
+    public void meth22524() { }
+    public void meth22525() { }
+    public void meth22526() { }
+    public void meth22527() { }
+    public void meth22528() { }
+    public void meth22529() { }
+    public void meth22530() { }
+    public void meth22531() { }
+    public void meth22532() { }
+    public void meth22533() { }
+    public void meth22534() { }
+    public void meth22535() { }
+    public void meth22536() { }
+    public void meth22537() { }
+    public void meth22538() { }
+    public void meth22539() { }
+    public void meth22540() { }
+    public void meth22541() { }
+    public void meth22542() { }
+    public void meth22543() { }
+    public void meth22544() { }
+    public void meth22545() { }
+    public void meth22546() { }
+    public void meth22547() { }
+    public void meth22548() { }
+    public void meth22549() { }
+    public void meth22550() { }
+    public void meth22551() { }
+    public void meth22552() { }
+    public void meth22553() { }
+    public void meth22554() { }
+    public void meth22555() { }
+    public void meth22556() { }
+    public void meth22557() { }
+    public void meth22558() { }
+    public void meth22559() { }
+    public void meth22560() { }
+    public void meth22561() { }
+    public void meth22562() { }
+    public void meth22563() { }
+    public void meth22564() { }
+    public void meth22565() { }
+    public void meth22566() { }
+    public void meth22567() { }
+    public void meth22568() { }
+    public void meth22569() { }
+    public void meth22570() { }
+    public void meth22571() { }
+    public void meth22572() { }
+    public void meth22573() { }
+    public void meth22574() { }
+    public void meth22575() { }
+    public void meth22576() { }
+    public void meth22577() { }
+    public void meth22578() { }
+    public void meth22579() { }
+    public void meth22580() { }
+    public void meth22581() { }
+    public void meth22582() { }
+    public void meth22583() { }
+    public void meth22584() { }
+    public void meth22585() { }
+    public void meth22586() { }
+    public void meth22587() { }
+    public void meth22588() { }
+    public void meth22589() { }
+    public void meth22590() { }
+    public void meth22591() { }
+    public void meth22592() { }
+    public void meth22593() { }
+    public void meth22594() { }
+    public void meth22595() { }
+    public void meth22596() { }
+    public void meth22597() { }
+    public void meth22598() { }
+    public void meth22599() { }
+    public void meth22600() { }
+    public void meth22601() { }
+    public void meth22602() { }
+    public void meth22603() { }
+    public void meth22604() { }
+    public void meth22605() { }
+    public void meth22606() { }
+    public void meth22607() { }
+    public void meth22608() { }
+    public void meth22609() { }
+    public void meth22610() { }
+    public void meth22611() { }
+    public void meth22612() { }
+    public void meth22613() { }
+    public void meth22614() { }
+    public void meth22615() { }
+    public void meth22616() { }
+    public void meth22617() { }
+    public void meth22618() { }
+    public void meth22619() { }
+    public void meth22620() { }
+    public void meth22621() { }
+    public void meth22622() { }
+    public void meth22623() { }
+    public void meth22624() { }
+    public void meth22625() { }
+    public void meth22626() { }
+    public void meth22627() { }
+    public void meth22628() { }
+    public void meth22629() { }
+    public void meth22630() { }
+    public void meth22631() { }
+    public void meth22632() { }
+    public void meth22633() { }
+    public void meth22634() { }
+    public void meth22635() { }
+    public void meth22636() { }
+    public void meth22637() { }
+    public void meth22638() { }
+    public void meth22639() { }
+    public void meth22640() { }
+    public void meth22641() { }
+    public void meth22642() { }
+    public void meth22643() { }
+    public void meth22644() { }
+    public void meth22645() { }
+    public void meth22646() { }
+    public void meth22647() { }
+    public void meth22648() { }
+    public void meth22649() { }
+    public void meth22650() { }
+    public void meth22651() { }
+    public void meth22652() { }
+    public void meth22653() { }
+    public void meth22654() { }
+    public void meth22655() { }
+    public void meth22656() { }
+    public void meth22657() { }
+    public void meth22658() { }
+    public void meth22659() { }
+    public void meth22660() { }
+    public void meth22661() { }
+    public void meth22662() { }
+    public void meth22663() { }
+    public void meth22664() { }
+    public void meth22665() { }
+    public void meth22666() { }
+    public void meth22667() { }
+    public void meth22668() { }
+    public void meth22669() { }
+    public void meth22670() { }
+    public void meth22671() { }
+    public void meth22672() { }
+    public void meth22673() { }
+    public void meth22674() { }
+    public void meth22675() { }
+    public void meth22676() { }
+    public void meth22677() { }
+    public void meth22678() { }
+    public void meth22679() { }
+    public void meth22680() { }
+    public void meth22681() { }
+    public void meth22682() { }
+    public void meth22683() { }
+    public void meth22684() { }
+    public void meth22685() { }
+    public void meth22686() { }
+    public void meth22687() { }
+    public void meth22688() { }
+    public void meth22689() { }
+    public void meth22690() { }
+    public void meth22691() { }
+    public void meth22692() { }
+    public void meth22693() { }
+    public void meth22694() { }
+    public void meth22695() { }
+    public void meth22696() { }
+    public void meth22697() { }
+    public void meth22698() { }
+    public void meth22699() { }
+    public void meth22700() { }
+    public void meth22701() { }
+    public void meth22702() { }
+    public void meth22703() { }
+    public void meth22704() { }
+    public void meth22705() { }
+    public void meth22706() { }
+    public void meth22707() { }
+    public void meth22708() { }
+    public void meth22709() { }
+    public void meth22710() { }
+    public void meth22711() { }
+    public void meth22712() { }
+    public void meth22713() { }
+    public void meth22714() { }
+    public void meth22715() { }
+    public void meth22716() { }
+    public void meth22717() { }
+    public void meth22718() { }
+    public void meth22719() { }
+    public void meth22720() { }
+    public void meth22721() { }
+    public void meth22722() { }
+    public void meth22723() { }
+    public void meth22724() { }
+    public void meth22725() { }
+    public void meth22726() { }
+    public void meth22727() { }
+    public void meth22728() { }
+    public void meth22729() { }
+    public void meth22730() { }
+    public void meth22731() { }
+    public void meth22732() { }
+    public void meth22733() { }
+    public void meth22734() { }
+    public void meth22735() { }
+    public void meth22736() { }
+    public void meth22737() { }
+    public void meth22738() { }
+    public void meth22739() { }
+    public void meth22740() { }
+    public void meth22741() { }
+    public void meth22742() { }
+    public void meth22743() { }
+    public void meth22744() { }
+    public void meth22745() { }
+    public void meth22746() { }
+    public void meth22747() { }
+    public void meth22748() { }
+    public void meth22749() { }
+    public void meth22750() { }
+    public void meth22751() { }
+    public void meth22752() { }
+    public void meth22753() { }
+    public void meth22754() { }
+    public void meth22755() { }
+    public void meth22756() { }
+    public void meth22757() { }
+    public void meth22758() { }
+    public void meth22759() { }
+    public void meth22760() { }
+    public void meth22761() { }
+    public void meth22762() { }
+    public void meth22763() { }
+    public void meth22764() { }
+    public void meth22765() { }
+    public void meth22766() { }
+    public void meth22767() { }
+    public void meth22768() { }
+    public void meth22769() { }
+    public void meth22770() { }
+    public void meth22771() { }
+    public void meth22772() { }
+    public void meth22773() { }
+    public void meth22774() { }
+    public void meth22775() { }
+    public void meth22776() { }
+    public void meth22777() { }
+    public void meth22778() { }
+    public void meth22779() { }
+    public void meth22780() { }
+    public void meth22781() { }
+    public void meth22782() { }
+    public void meth22783() { }
+    public void meth22784() { }
+    public void meth22785() { }
+    public void meth22786() { }
+    public void meth22787() { }
+    public void meth22788() { }
+    public void meth22789() { }
+    public void meth22790() { }
+    public void meth22791() { }
+    public void meth22792() { }
+    public void meth22793() { }
+    public void meth22794() { }
+    public void meth22795() { }
+    public void meth22796() { }
+    public void meth22797() { }
+    public void meth22798() { }
+    public void meth22799() { }
+    public void meth22800() { }
+    public void meth22801() { }
+    public void meth22802() { }
+    public void meth22803() { }
+    public void meth22804() { }
+    public void meth22805() { }
+    public void meth22806() { }
+    public void meth22807() { }
+    public void meth22808() { }
+    public void meth22809() { }
+    public void meth22810() { }
+    public void meth22811() { }
+    public void meth22812() { }
+    public void meth22813() { }
+    public void meth22814() { }
+    public void meth22815() { }
+    public void meth22816() { }
+    public void meth22817() { }
+    public void meth22818() { }
+    public void meth22819() { }
+    public void meth22820() { }
+    public void meth22821() { }
+    public void meth22822() { }
+    public void meth22823() { }
+    public void meth22824() { }
+    public void meth22825() { }
+    public void meth22826() { }
+    public void meth22827() { }
+    public void meth22828() { }
+    public void meth22829() { }
+    public void meth22830() { }
+    public void meth22831() { }
+    public void meth22832() { }
+    public void meth22833() { }
+    public void meth22834() { }
+    public void meth22835() { }
+    public void meth22836() { }
+    public void meth22837() { }
+    public void meth22838() { }
+    public void meth22839() { }
+    public void meth22840() { }
+    public void meth22841() { }
+    public void meth22842() { }
+    public void meth22843() { }
+    public void meth22844() { }
+    public void meth22845() { }
+    public void meth22846() { }
+    public void meth22847() { }
+    public void meth22848() { }
+    public void meth22849() { }
+    public void meth22850() { }
+    public void meth22851() { }
+    public void meth22852() { }
+    public void meth22853() { }
+    public void meth22854() { }
+    public void meth22855() { }
+    public void meth22856() { }
+    public void meth22857() { }
+    public void meth22858() { }
+    public void meth22859() { }
+    public void meth22860() { }
+    public void meth22861() { }
+    public void meth22862() { }
+    public void meth22863() { }
+    public void meth22864() { }
+    public void meth22865() { }
+    public void meth22866() { }
+    public void meth22867() { }
+    public void meth22868() { }
+    public void meth22869() { }
+    public void meth22870() { }
+    public void meth22871() { }
+    public void meth22872() { }
+    public void meth22873() { }
+    public void meth22874() { }
+    public void meth22875() { }
+    public void meth22876() { }
+    public void meth22877() { }
+    public void meth22878() { }
+    public void meth22879() { }
+    public void meth22880() { }
+    public void meth22881() { }
+    public void meth22882() { }
+    public void meth22883() { }
+    public void meth22884() { }
+    public void meth22885() { }
+    public void meth22886() { }
+    public void meth22887() { }
+    public void meth22888() { }
+    public void meth22889() { }
+    public void meth22890() { }
+    public void meth22891() { }
+    public void meth22892() { }
+    public void meth22893() { }
+    public void meth22894() { }
+    public void meth22895() { }
+    public void meth22896() { }
+    public void meth22897() { }
+    public void meth22898() { }
+    public void meth22899() { }
+    public void meth22900() { }
+    public void meth22901() { }
+    public void meth22902() { }
+    public void meth22903() { }
+    public void meth22904() { }
+    public void meth22905() { }
+    public void meth22906() { }
+    public void meth22907() { }
+    public void meth22908() { }
+    public void meth22909() { }
+    public void meth22910() { }
+    public void meth22911() { }
+    public void meth22912() { }
+    public void meth22913() { }
+    public void meth22914() { }
+    public void meth22915() { }
+    public void meth22916() { }
+    public void meth22917() { }
+    public void meth22918() { }
+    public void meth22919() { }
+    public void meth22920() { }
+    public void meth22921() { }
+    public void meth22922() { }
+    public void meth22923() { }
+    public void meth22924() { }
+    public void meth22925() { }
+    public void meth22926() { }
+    public void meth22927() { }
+    public void meth22928() { }
+    public void meth22929() { }
+    public void meth22930() { }
+    public void meth22931() { }
+    public void meth22932() { }
+    public void meth22933() { }
+    public void meth22934() { }
+    public void meth22935() { }
+    public void meth22936() { }
+    public void meth22937() { }
+    public void meth22938() { }
+    public void meth22939() { }
+    public void meth22940() { }
+    public void meth22941() { }
+    public void meth22942() { }
+    public void meth22943() { }
+    public void meth22944() { }
+    public void meth22945() { }
+    public void meth22946() { }
+    public void meth22947() { }
+    public void meth22948() { }
+    public void meth22949() { }
+    public void meth22950() { }
+    public void meth22951() { }
+    public void meth22952() { }
+    public void meth22953() { }
+    public void meth22954() { }
+    public void meth22955() { }
+    public void meth22956() { }
+    public void meth22957() { }
+    public void meth22958() { }
+    public void meth22959() { }
+    public void meth22960() { }
+    public void meth22961() { }
+    public void meth22962() { }
+    public void meth22963() { }
+    public void meth22964() { }
+    public void meth22965() { }
+    public void meth22966() { }
+    public void meth22967() { }
+    public void meth22968() { }
+    public void meth22969() { }
+    public void meth22970() { }
+    public void meth22971() { }
+    public void meth22972() { }
+    public void meth22973() { }
+    public void meth22974() { }
+    public void meth22975() { }
+    public void meth22976() { }
+    public void meth22977() { }
+    public void meth22978() { }
+    public void meth22979() { }
+    public void meth22980() { }
+    public void meth22981() { }
+    public void meth22982() { }
+    public void meth22983() { }
+    public void meth22984() { }
+    public void meth22985() { }
+    public void meth22986() { }
+    public void meth22987() { }
+    public void meth22988() { }
+    public void meth22989() { }
+    public void meth22990() { }
+    public void meth22991() { }
+    public void meth22992() { }
+    public void meth22993() { }
+    public void meth22994() { }
+    public void meth22995() { }
+    public void meth22996() { }
+    public void meth22997() { }
+    public void meth22998() { }
+    public void meth22999() { }
+    public void meth23000() { }
+    public void meth23001() { }
+    public void meth23002() { }
+    public void meth23003() { }
+    public void meth23004() { }
+    public void meth23005() { }
+    public void meth23006() { }
+    public void meth23007() { }
+    public void meth23008() { }
+    public void meth23009() { }
+    public void meth23010() { }
+    public void meth23011() { }
+    public void meth23012() { }
+    public void meth23013() { }
+    public void meth23014() { }
+    public void meth23015() { }
+    public void meth23016() { }
+    public void meth23017() { }
+    public void meth23018() { }
+    public void meth23019() { }
+    public void meth23020() { }
+    public void meth23021() { }
+    public void meth23022() { }
+    public void meth23023() { }
+    public void meth23024() { }
+    public void meth23025() { }
+    public void meth23026() { }
+    public void meth23027() { }
+    public void meth23028() { }
+    public void meth23029() { }
+    public void meth23030() { }
+    public void meth23031() { }
+    public void meth23032() { }
+    public void meth23033() { }
+    public void meth23034() { }
+    public void meth23035() { }
+    public void meth23036() { }
+    public void meth23037() { }
+    public void meth23038() { }
+    public void meth23039() { }
+    public void meth23040() { }
+    public void meth23041() { }
+    public void meth23042() { }
+    public void meth23043() { }
+    public void meth23044() { }
+    public void meth23045() { }
+    public void meth23046() { }
+    public void meth23047() { }
+    public void meth23048() { }
+    public void meth23049() { }
+    public void meth23050() { }
+    public void meth23051() { }
+    public void meth23052() { }
+    public void meth23053() { }
+    public void meth23054() { }
+    public void meth23055() { }
+    public void meth23056() { }
+    public void meth23057() { }
+    public void meth23058() { }
+    public void meth23059() { }
+    public void meth23060() { }
+    public void meth23061() { }
+    public void meth23062() { }
+    public void meth23063() { }
+    public void meth23064() { }
+    public void meth23065() { }
+    public void meth23066() { }
+    public void meth23067() { }
+    public void meth23068() { }
+    public void meth23069() { }
+    public void meth23070() { }
+    public void meth23071() { }
+    public void meth23072() { }
+    public void meth23073() { }
+    public void meth23074() { }
+    public void meth23075() { }
+    public void meth23076() { }
+    public void meth23077() { }
+    public void meth23078() { }
+    public void meth23079() { }
+    public void meth23080() { }
+    public void meth23081() { }
+    public void meth23082() { }
+    public void meth23083() { }
+    public void meth23084() { }
+    public void meth23085() { }
+    public void meth23086() { }
+    public void meth23087() { }
+    public void meth23088() { }
+    public void meth23089() { }
+    public void meth23090() { }
+    public void meth23091() { }
+    public void meth23092() { }
+    public void meth23093() { }
+    public void meth23094() { }
+    public void meth23095() { }
+    public void meth23096() { }
+    public void meth23097() { }
+    public void meth23098() { }
+    public void meth23099() { }
+    public void meth23100() { }
+    public void meth23101() { }
+    public void meth23102() { }
+    public void meth23103() { }
+    public void meth23104() { }
+    public void meth23105() { }
+    public void meth23106() { }
+    public void meth23107() { }
+    public void meth23108() { }
+    public void meth23109() { }
+    public void meth23110() { }
+    public void meth23111() { }
+    public void meth23112() { }
+    public void meth23113() { }
+    public void meth23114() { }
+    public void meth23115() { }
+    public void meth23116() { }
+    public void meth23117() { }
+    public void meth23118() { }
+    public void meth23119() { }
+    public void meth23120() { }
+    public void meth23121() { }
+    public void meth23122() { }
+    public void meth23123() { }
+    public void meth23124() { }
+    public void meth23125() { }
+    public void meth23126() { }
+    public void meth23127() { }
+    public void meth23128() { }
+    public void meth23129() { }
+    public void meth23130() { }
+    public void meth23131() { }
+    public void meth23132() { }
+    public void meth23133() { }
+    public void meth23134() { }
+    public void meth23135() { }
+    public void meth23136() { }
+    public void meth23137() { }
+    public void meth23138() { }
+    public void meth23139() { }
+    public void meth23140() { }
+    public void meth23141() { }
+    public void meth23142() { }
+    public void meth23143() { }
+    public void meth23144() { }
+    public void meth23145() { }
+    public void meth23146() { }
+    public void meth23147() { }
+    public void meth23148() { }
+    public void meth23149() { }
+    public void meth23150() { }
+    public void meth23151() { }
+    public void meth23152() { }
+    public void meth23153() { }
+    public void meth23154() { }
+    public void meth23155() { }
+    public void meth23156() { }
+    public void meth23157() { }
+    public void meth23158() { }
+    public void meth23159() { }
+    public void meth23160() { }
+    public void meth23161() { }
+    public void meth23162() { }
+    public void meth23163() { }
+    public void meth23164() { }
+    public void meth23165() { }
+    public void meth23166() { }
+    public void meth23167() { }
+    public void meth23168() { }
+    public void meth23169() { }
+    public void meth23170() { }
+    public void meth23171() { }
+    public void meth23172() { }
+    public void meth23173() { }
+    public void meth23174() { }
+    public void meth23175() { }
+    public void meth23176() { }
+    public void meth23177() { }
+    public void meth23178() { }
+    public void meth23179() { }
+    public void meth23180() { }
+    public void meth23181() { }
+    public void meth23182() { }
+    public void meth23183() { }
+    public void meth23184() { }
+    public void meth23185() { }
+    public void meth23186() { }
+    public void meth23187() { }
+    public void meth23188() { }
+    public void meth23189() { }
+    public void meth23190() { }
+    public void meth23191() { }
+    public void meth23192() { }
+    public void meth23193() { }
+    public void meth23194() { }
+    public void meth23195() { }
+    public void meth23196() { }
+    public void meth23197() { }
+    public void meth23198() { }
+    public void meth23199() { }
+    public void meth23200() { }
+    public void meth23201() { }
+    public void meth23202() { }
+    public void meth23203() { }
+    public void meth23204() { }
+    public void meth23205() { }
+    public void meth23206() { }
+    public void meth23207() { }
+    public void meth23208() { }
+    public void meth23209() { }
+    public void meth23210() { }
+    public void meth23211() { }
+    public void meth23212() { }
+    public void meth23213() { }
+    public void meth23214() { }
+    public void meth23215() { }
+    public void meth23216() { }
+    public void meth23217() { }
+    public void meth23218() { }
+    public void meth23219() { }
+    public void meth23220() { }
+    public void meth23221() { }
+    public void meth23222() { }
+    public void meth23223() { }
+    public void meth23224() { }
+    public void meth23225() { }
+    public void meth23226() { }
+    public void meth23227() { }
+    public void meth23228() { }
+    public void meth23229() { }
+    public void meth23230() { }
+    public void meth23231() { }
+    public void meth23232() { }
+    public void meth23233() { }
+    public void meth23234() { }
+    public void meth23235() { }
+    public void meth23236() { }
+    public void meth23237() { }
+    public void meth23238() { }
+    public void meth23239() { }
+    public void meth23240() { }
+    public void meth23241() { }
+    public void meth23242() { }
+    public void meth23243() { }
+    public void meth23244() { }
+    public void meth23245() { }
+    public void meth23246() { }
+    public void meth23247() { }
+    public void meth23248() { }
+    public void meth23249() { }
+    public void meth23250() { }
+    public void meth23251() { }
+    public void meth23252() { }
+    public void meth23253() { }
+    public void meth23254() { }
+    public void meth23255() { }
+    public void meth23256() { }
+    public void meth23257() { }
+    public void meth23258() { }
+    public void meth23259() { }
+    public void meth23260() { }
+    public void meth23261() { }
+    public void meth23262() { }
+    public void meth23263() { }
+    public void meth23264() { }
+    public void meth23265() { }
+    public void meth23266() { }
+    public void meth23267() { }
+    public void meth23268() { }
+    public void meth23269() { }
+    public void meth23270() { }
+    public void meth23271() { }
+    public void meth23272() { }
+    public void meth23273() { }
+    public void meth23274() { }
+    public void meth23275() { }
+    public void meth23276() { }
+    public void meth23277() { }
+    public void meth23278() { }
+    public void meth23279() { }
+    public void meth23280() { }
+    public void meth23281() { }
+    public void meth23282() { }
+    public void meth23283() { }
+    public void meth23284() { }
+    public void meth23285() { }
+    public void meth23286() { }
+    public void meth23287() { }
+    public void meth23288() { }
+    public void meth23289() { }
+    public void meth23290() { }
+    public void meth23291() { }
+    public void meth23292() { }
+    public void meth23293() { }
+    public void meth23294() { }
+    public void meth23295() { }
+    public void meth23296() { }
+    public void meth23297() { }
+    public void meth23298() { }
+    public void meth23299() { }
+    public void meth23300() { }
+    public void meth23301() { }
+    public void meth23302() { }
+    public void meth23303() { }
+    public void meth23304() { }
+    public void meth23305() { }
+    public void meth23306() { }
+    public void meth23307() { }
+    public void meth23308() { }
+    public void meth23309() { }
+    public void meth23310() { }
+    public void meth23311() { }
+    public void meth23312() { }
+    public void meth23313() { }
+    public void meth23314() { }
+    public void meth23315() { }
+    public void meth23316() { }
+    public void meth23317() { }
+    public void meth23318() { }
+    public void meth23319() { }
+    public void meth23320() { }
+    public void meth23321() { }
+    public void meth23322() { }
+    public void meth23323() { }
+    public void meth23324() { }
+    public void meth23325() { }
+    public void meth23326() { }
+    public void meth23327() { }
+    public void meth23328() { }
+    public void meth23329() { }
+    public void meth23330() { }
+    public void meth23331() { }
+    public void meth23332() { }
+    public void meth23333() { }
+    public void meth23334() { }
+    public void meth23335() { }
+    public void meth23336() { }
+    public void meth23337() { }
+    public void meth23338() { }
+    public void meth23339() { }
+    public void meth23340() { }
+    public void meth23341() { }
+    public void meth23342() { }
+    public void meth23343() { }
+    public void meth23344() { }
+    public void meth23345() { }
+    public void meth23346() { }
+    public void meth23347() { }
+    public void meth23348() { }
+    public void meth23349() { }
+    public void meth23350() { }
+    public void meth23351() { }
+    public void meth23352() { }
+    public void meth23353() { }
+    public void meth23354() { }
+    public void meth23355() { }
+    public void meth23356() { }
+    public void meth23357() { }
+    public void meth23358() { }
+    public void meth23359() { }
+    public void meth23360() { }
+    public void meth23361() { }
+    public void meth23362() { }
+    public void meth23363() { }
+    public void meth23364() { }
+    public void meth23365() { }
+    public void meth23366() { }
+    public void meth23367() { }
+    public void meth23368() { }
+    public void meth23369() { }
+    public void meth23370() { }
+    public void meth23371() { }
+    public void meth23372() { }
+    public void meth23373() { }
+    public void meth23374() { }
+    public void meth23375() { }
+    public void meth23376() { }
+    public void meth23377() { }
+    public void meth23378() { }
+    public void meth23379() { }
+    public void meth23380() { }
+    public void meth23381() { }
+    public void meth23382() { }
+    public void meth23383() { }
+    public void meth23384() { }
+    public void meth23385() { }
+    public void meth23386() { }
+    public void meth23387() { }
+    public void meth23388() { }
+    public void meth23389() { }
+    public void meth23390() { }
+    public void meth23391() { }
+    public void meth23392() { }
+    public void meth23393() { }
+    public void meth23394() { }
+    public void meth23395() { }
+    public void meth23396() { }
+    public void meth23397() { }
+    public void meth23398() { }
+    public void meth23399() { }
+    public void meth23400() { }
+    public void meth23401() { }
+    public void meth23402() { }
+    public void meth23403() { }
+    public void meth23404() { }
+    public void meth23405() { }
+    public void meth23406() { }
+    public void meth23407() { }
+    public void meth23408() { }
+    public void meth23409() { }
+    public void meth23410() { }
+    public void meth23411() { }
+    public void meth23412() { }
+    public void meth23413() { }
+    public void meth23414() { }
+    public void meth23415() { }
+    public void meth23416() { }
+    public void meth23417() { }
+    public void meth23418() { }
+    public void meth23419() { }
+    public void meth23420() { }
+    public void meth23421() { }
+    public void meth23422() { }
+    public void meth23423() { }
+    public void meth23424() { }
+    public void meth23425() { }
+    public void meth23426() { }
+    public void meth23427() { }
+    public void meth23428() { }
+    public void meth23429() { }
+    public void meth23430() { }
+    public void meth23431() { }
+    public void meth23432() { }
+    public void meth23433() { }
+    public void meth23434() { }
+    public void meth23435() { }
+    public void meth23436() { }
+    public void meth23437() { }
+    public void meth23438() { }
+    public void meth23439() { }
+    public void meth23440() { }
+    public void meth23441() { }
+    public void meth23442() { }
+    public void meth23443() { }
+    public void meth23444() { }
+    public void meth23445() { }
+    public void meth23446() { }
+    public void meth23447() { }
+    public void meth23448() { }
+    public void meth23449() { }
+    public void meth23450() { }
+    public void meth23451() { }
+    public void meth23452() { }
+    public void meth23453() { }
+    public void meth23454() { }
+    public void meth23455() { }
+    public void meth23456() { }
+    public void meth23457() { }
+    public void meth23458() { }
+    public void meth23459() { }
+    public void meth23460() { }
+    public void meth23461() { }
+    public void meth23462() { }
+    public void meth23463() { }
+    public void meth23464() { }
+    public void meth23465() { }
+    public void meth23466() { }
+    public void meth23467() { }
+    public void meth23468() { }
+    public void meth23469() { }
+    public void meth23470() { }
+    public void meth23471() { }
+    public void meth23472() { }
+    public void meth23473() { }
+    public void meth23474() { }
+    public void meth23475() { }
+    public void meth23476() { }
+    public void meth23477() { }
+    public void meth23478() { }
+    public void meth23479() { }
+    public void meth23480() { }
+    public void meth23481() { }
+    public void meth23482() { }
+    public void meth23483() { }
+    public void meth23484() { }
+    public void meth23485() { }
+    public void meth23486() { }
+    public void meth23487() { }
+    public void meth23488() { }
+    public void meth23489() { }
+    public void meth23490() { }
+    public void meth23491() { }
+    public void meth23492() { }
+    public void meth23493() { }
+    public void meth23494() { }
+    public void meth23495() { }
+    public void meth23496() { }
+    public void meth23497() { }
+    public void meth23498() { }
+    public void meth23499() { }
+    public void meth23500() { }
+    public void meth23501() { }
+    public void meth23502() { }
+    public void meth23503() { }
+    public void meth23504() { }
+    public void meth23505() { }
+    public void meth23506() { }
+    public void meth23507() { }
+    public void meth23508() { }
+    public void meth23509() { }
+    public void meth23510() { }
+    public void meth23511() { }
+    public void meth23512() { }
+    public void meth23513() { }
+    public void meth23514() { }
+    public void meth23515() { }
+    public void meth23516() { }
+    public void meth23517() { }
+    public void meth23518() { }
+    public void meth23519() { }
+    public void meth23520() { }
+    public void meth23521() { }
+    public void meth23522() { }
+    public void meth23523() { }
+    public void meth23524() { }
+    public void meth23525() { }
+    public void meth23526() { }
+    public void meth23527() { }
+    public void meth23528() { }
+    public void meth23529() { }
+    public void meth23530() { }
+    public void meth23531() { }
+    public void meth23532() { }
+    public void meth23533() { }
+    public void meth23534() { }
+    public void meth23535() { }
+    public void meth23536() { }
+    public void meth23537() { }
+    public void meth23538() { }
+    public void meth23539() { }
+    public void meth23540() { }
+    public void meth23541() { }
+    public void meth23542() { }
+    public void meth23543() { }
+    public void meth23544() { }
+    public void meth23545() { }
+    public void meth23546() { }
+    public void meth23547() { }
+    public void meth23548() { }
+    public void meth23549() { }
+    public void meth23550() { }
+    public void meth23551() { }
+    public void meth23552() { }
+    public void meth23553() { }
+    public void meth23554() { }
+    public void meth23555() { }
+    public void meth23556() { }
+    public void meth23557() { }
+    public void meth23558() { }
+    public void meth23559() { }
+    public void meth23560() { }
+    public void meth23561() { }
+    public void meth23562() { }
+    public void meth23563() { }
+    public void meth23564() { }
+    public void meth23565() { }
+    public void meth23566() { }
+    public void meth23567() { }
+    public void meth23568() { }
+    public void meth23569() { }
+    public void meth23570() { }
+    public void meth23571() { }
+    public void meth23572() { }
+    public void meth23573() { }
+    public void meth23574() { }
+    public void meth23575() { }
+    public void meth23576() { }
+    public void meth23577() { }
+    public void meth23578() { }
+    public void meth23579() { }
+    public void meth23580() { }
+    public void meth23581() { }
+    public void meth23582() { }
+    public void meth23583() { }
+    public void meth23584() { }
+    public void meth23585() { }
+    public void meth23586() { }
+    public void meth23587() { }
+    public void meth23588() { }
+    public void meth23589() { }
+    public void meth23590() { }
+    public void meth23591() { }
+    public void meth23592() { }
+    public void meth23593() { }
+    public void meth23594() { }
+    public void meth23595() { }
+    public void meth23596() { }
+    public void meth23597() { }
+    public void meth23598() { }
+    public void meth23599() { }
+    public void meth23600() { }
+    public void meth23601() { }
+    public void meth23602() { }
+    public void meth23603() { }
+    public void meth23604() { }
+    public void meth23605() { }
+    public void meth23606() { }
+    public void meth23607() { }
+    public void meth23608() { }
+    public void meth23609() { }
+    public void meth23610() { }
+    public void meth23611() { }
+    public void meth23612() { }
+    public void meth23613() { }
+    public void meth23614() { }
+    public void meth23615() { }
+    public void meth23616() { }
+    public void meth23617() { }
+    public void meth23618() { }
+    public void meth23619() { }
+    public void meth23620() { }
+    public void meth23621() { }
+    public void meth23622() { }
+    public void meth23623() { }
+    public void meth23624() { }
+    public void meth23625() { }
+    public void meth23626() { }
+    public void meth23627() { }
+    public void meth23628() { }
+    public void meth23629() { }
+    public void meth23630() { }
+    public void meth23631() { }
+    public void meth23632() { }
+    public void meth23633() { }
+    public void meth23634() { }
+    public void meth23635() { }
+    public void meth23636() { }
+    public void meth23637() { }
+    public void meth23638() { }
+    public void meth23639() { }
+    public void meth23640() { }
+    public void meth23641() { }
+    public void meth23642() { }
+    public void meth23643() { }
+    public void meth23644() { }
+    public void meth23645() { }
+    public void meth23646() { }
+    public void meth23647() { }
+    public void meth23648() { }
+    public void meth23649() { }
+    public void meth23650() { }
+    public void meth23651() { }
+    public void meth23652() { }
+    public void meth23653() { }
+    public void meth23654() { }
+    public void meth23655() { }
+    public void meth23656() { }
+    public void meth23657() { }
+    public void meth23658() { }
+    public void meth23659() { }
+    public void meth23660() { }
+    public void meth23661() { }
+    public void meth23662() { }
+    public void meth23663() { }
+    public void meth23664() { }
+    public void meth23665() { }
+    public void meth23666() { }
+    public void meth23667() { }
+    public void meth23668() { }
+    public void meth23669() { }
+    public void meth23670() { }
+    public void meth23671() { }
+    public void meth23672() { }
+    public void meth23673() { }
+    public void meth23674() { }
+    public void meth23675() { }
+    public void meth23676() { }
+    public void meth23677() { }
+    public void meth23678() { }
+    public void meth23679() { }
+    public void meth23680() { }
+    public void meth23681() { }
+    public void meth23682() { }
+    public void meth23683() { }
+    public void meth23684() { }
+    public void meth23685() { }
+    public void meth23686() { }
+    public void meth23687() { }
+    public void meth23688() { }
+    public void meth23689() { }
+    public void meth23690() { }
+    public void meth23691() { }
+    public void meth23692() { }
+    public void meth23693() { }
+    public void meth23694() { }
+    public void meth23695() { }
+    public void meth23696() { }
+    public void meth23697() { }
+    public void meth23698() { }
+    public void meth23699() { }
+    public void meth23700() { }
+    public void meth23701() { }
+    public void meth23702() { }
+    public void meth23703() { }
+    public void meth23704() { }
+    public void meth23705() { }
+    public void meth23706() { }
+    public void meth23707() { }
+    public void meth23708() { }
+    public void meth23709() { }
+    public void meth23710() { }
+    public void meth23711() { }
+    public void meth23712() { }
+    public void meth23713() { }
+    public void meth23714() { }
+    public void meth23715() { }
+    public void meth23716() { }
+    public void meth23717() { }
+    public void meth23718() { }
+    public void meth23719() { }
+    public void meth23720() { }
+    public void meth23721() { }
+    public void meth23722() { }
+    public void meth23723() { }
+    public void meth23724() { }
+    public void meth23725() { }
+    public void meth23726() { }
+    public void meth23727() { }
+    public void meth23728() { }
+    public void meth23729() { }
+    public void meth23730() { }
+    public void meth23731() { }
+    public void meth23732() { }
+    public void meth23733() { }
+    public void meth23734() { }
+    public void meth23735() { }
+    public void meth23736() { }
+    public void meth23737() { }
+    public void meth23738() { }
+    public void meth23739() { }
+    public void meth23740() { }
+    public void meth23741() { }
+    public void meth23742() { }
+    public void meth23743() { }
+    public void meth23744() { }
+    public void meth23745() { }
+    public void meth23746() { }
+    public void meth23747() { }
+    public void meth23748() { }
+    public void meth23749() { }
+    public void meth23750() { }
+    public void meth23751() { }
+    public void meth23752() { }
+    public void meth23753() { }
+    public void meth23754() { }
+    public void meth23755() { }
+    public void meth23756() { }
+    public void meth23757() { }
+    public void meth23758() { }
+    public void meth23759() { }
+    public void meth23760() { }
+    public void meth23761() { }
+    public void meth23762() { }
+    public void meth23763() { }
+    public void meth23764() { }
+    public void meth23765() { }
+    public void meth23766() { }
+    public void meth23767() { }
+    public void meth23768() { }
+    public void meth23769() { }
+    public void meth23770() { }
+    public void meth23771() { }
+    public void meth23772() { }
+    public void meth23773() { }
+    public void meth23774() { }
+    public void meth23775() { }
+    public void meth23776() { }
+    public void meth23777() { }
+    public void meth23778() { }
+    public void meth23779() { }
+    public void meth23780() { }
+    public void meth23781() { }
+    public void meth23782() { }
+    public void meth23783() { }
+    public void meth23784() { }
+    public void meth23785() { }
+    public void meth23786() { }
+    public void meth23787() { }
+    public void meth23788() { }
+    public void meth23789() { }
+    public void meth23790() { }
+    public void meth23791() { }
+    public void meth23792() { }
+    public void meth23793() { }
+    public void meth23794() { }
+    public void meth23795() { }
+    public void meth23796() { }
+    public void meth23797() { }
+    public void meth23798() { }
+    public void meth23799() { }
+    public void meth23800() { }
+    public void meth23801() { }
+    public void meth23802() { }
+    public void meth23803() { }
+    public void meth23804() { }
+    public void meth23805() { }
+    public void meth23806() { }
+    public void meth23807() { }
+    public void meth23808() { }
+    public void meth23809() { }
+    public void meth23810() { }
+    public void meth23811() { }
+    public void meth23812() { }
+    public void meth23813() { }
+    public void meth23814() { }
+    public void meth23815() { }
+    public void meth23816() { }
+    public void meth23817() { }
+    public void meth23818() { }
+    public void meth23819() { }
+    public void meth23820() { }
+    public void meth23821() { }
+    public void meth23822() { }
+    public void meth23823() { }
+    public void meth23824() { }
+    public void meth23825() { }
+    public void meth23826() { }
+    public void meth23827() { }
+    public void meth23828() { }
+    public void meth23829() { }
+    public void meth23830() { }
+    public void meth23831() { }
+    public void meth23832() { }
+    public void meth23833() { }
+    public void meth23834() { }
+    public void meth23835() { }
+    public void meth23836() { }
+    public void meth23837() { }
+    public void meth23838() { }
+    public void meth23839() { }
+    public void meth23840() { }
+    public void meth23841() { }
+    public void meth23842() { }
+    public void meth23843() { }
+    public void meth23844() { }
+    public void meth23845() { }
+    public void meth23846() { }
+    public void meth23847() { }
+    public void meth23848() { }
+    public void meth23849() { }
+    public void meth23850() { }
+    public void meth23851() { }
+    public void meth23852() { }
+    public void meth23853() { }
+    public void meth23854() { }
+    public void meth23855() { }
+    public void meth23856() { }
+    public void meth23857() { }
+    public void meth23858() { }
+    public void meth23859() { }
+    public void meth23860() { }
+    public void meth23861() { }
+    public void meth23862() { }
+    public void meth23863() { }
+    public void meth23864() { }
+    public void meth23865() { }
+    public void meth23866() { }
+    public void meth23867() { }
+    public void meth23868() { }
+    public void meth23869() { }
+    public void meth23870() { }
+    public void meth23871() { }
+    public void meth23872() { }
+    public void meth23873() { }
+    public void meth23874() { }
+    public void meth23875() { }
+    public void meth23876() { }
+    public void meth23877() { }
+    public void meth23878() { }
+    public void meth23879() { }
+    public void meth23880() { }
+    public void meth23881() { }
+    public void meth23882() { }
+    public void meth23883() { }
+    public void meth23884() { }
+    public void meth23885() { }
+    public void meth23886() { }
+    public void meth23887() { }
+    public void meth23888() { }
+    public void meth23889() { }
+    public void meth23890() { }
+    public void meth23891() { }
+    public void meth23892() { }
+    public void meth23893() { }
+    public void meth23894() { }
+    public void meth23895() { }
+    public void meth23896() { }
+    public void meth23897() { }
+    public void meth23898() { }
+    public void meth23899() { }
+    public void meth23900() { }
+    public void meth23901() { }
+    public void meth23902() { }
+    public void meth23903() { }
+    public void meth23904() { }
+    public void meth23905() { }
+    public void meth23906() { }
+    public void meth23907() { }
+    public void meth23908() { }
+    public void meth23909() { }
+    public void meth23910() { }
+    public void meth23911() { }
+    public void meth23912() { }
+    public void meth23913() { }
+    public void meth23914() { }
+    public void meth23915() { }
+    public void meth23916() { }
+    public void meth23917() { }
+    public void meth23918() { }
+    public void meth23919() { }
+    public void meth23920() { }
+    public void meth23921() { }
+    public void meth23922() { }
+    public void meth23923() { }
+    public void meth23924() { }
+    public void meth23925() { }
+    public void meth23926() { }
+    public void meth23927() { }
+    public void meth23928() { }
+    public void meth23929() { }
+    public void meth23930() { }
+    public void meth23931() { }
+    public void meth23932() { }
+    public void meth23933() { }
+    public void meth23934() { }
+    public void meth23935() { }
+    public void meth23936() { }
+    public void meth23937() { }
+    public void meth23938() { }
+    public void meth23939() { }
+    public void meth23940() { }
+    public void meth23941() { }
+    public void meth23942() { }
+    public void meth23943() { }
+    public void meth23944() { }
+    public void meth23945() { }
+    public void meth23946() { }
+    public void meth23947() { }
+    public void meth23948() { }
+    public void meth23949() { }
+    public void meth23950() { }
+    public void meth23951() { }
+    public void meth23952() { }
+    public void meth23953() { }
+    public void meth23954() { }
+    public void meth23955() { }
+    public void meth23956() { }
+    public void meth23957() { }
+    public void meth23958() { }
+    public void meth23959() { }
+    public void meth23960() { }
+    public void meth23961() { }
+    public void meth23962() { }
+    public void meth23963() { }
+    public void meth23964() { }
+    public void meth23965() { }
+    public void meth23966() { }
+    public void meth23967() { }
+    public void meth23968() { }
+    public void meth23969() { }
+    public void meth23970() { }
+    public void meth23971() { }
+    public void meth23972() { }
+    public void meth23973() { }
+    public void meth23974() { }
+    public void meth23975() { }
+    public void meth23976() { }
+    public void meth23977() { }
+    public void meth23978() { }
+    public void meth23979() { }
+    public void meth23980() { }
+    public void meth23981() { }
+    public void meth23982() { }
+    public void meth23983() { }
+    public void meth23984() { }
+    public void meth23985() { }
+    public void meth23986() { }
+    public void meth23987() { }
+    public void meth23988() { }
+    public void meth23989() { }
+    public void meth23990() { }
+    public void meth23991() { }
+    public void meth23992() { }
+    public void meth23993() { }
+    public void meth23994() { }
+    public void meth23995() { }
+    public void meth23996() { }
+    public void meth23997() { }
+    public void meth23998() { }
+    public void meth23999() { }
+    public void meth24000() { }
+    public void meth24001() { }
+    public void meth24002() { }
+    public void meth24003() { }
+    public void meth24004() { }
+    public void meth24005() { }
+    public void meth24006() { }
+    public void meth24007() { }
+    public void meth24008() { }
+    public void meth24009() { }
+    public void meth24010() { }
+    public void meth24011() { }
+    public void meth24012() { }
+    public void meth24013() { }
+    public void meth24014() { }
+    public void meth24015() { }
+    public void meth24016() { }
+    public void meth24017() { }
+    public void meth24018() { }
+    public void meth24019() { }
+    public void meth24020() { }
+    public void meth24021() { }
+    public void meth24022() { }
+    public void meth24023() { }
+    public void meth24024() { }
+    public void meth24025() { }
+    public void meth24026() { }
+    public void meth24027() { }
+    public void meth24028() { }
+    public void meth24029() { }
+    public void meth24030() { }
+    public void meth24031() { }
+    public void meth24032() { }
+    public void meth24033() { }
+    public void meth24034() { }
+    public void meth24035() { }
+    public void meth24036() { }
+    public void meth24037() { }
+    public void meth24038() { }
+    public void meth24039() { }
+    public void meth24040() { }
+    public void meth24041() { }
+    public void meth24042() { }
+    public void meth24043() { }
+    public void meth24044() { }
+    public void meth24045() { }
+    public void meth24046() { }
+    public void meth24047() { }
+    public void meth24048() { }
+    public void meth24049() { }
+    public void meth24050() { }
+    public void meth24051() { }
+    public void meth24052() { }
+    public void meth24053() { }
+    public void meth24054() { }
+    public void meth24055() { }
+    public void meth24056() { }
+    public void meth24057() { }
+    public void meth24058() { }
+    public void meth24059() { }
+    public void meth24060() { }
+    public void meth24061() { }
+    public void meth24062() { }
+    public void meth24063() { }
+    public void meth24064() { }
+    public void meth24065() { }
+    public void meth24066() { }
+    public void meth24067() { }
+    public void meth24068() { }
+    public void meth24069() { }
+    public void meth24070() { }
+    public void meth24071() { }
+    public void meth24072() { }
+    public void meth24073() { }
+    public void meth24074() { }
+    public void meth24075() { }
+    public void meth24076() { }
+    public void meth24077() { }
+    public void meth24078() { }
+    public void meth24079() { }
+    public void meth24080() { }
+    public void meth24081() { }
+    public void meth24082() { }
+    public void meth24083() { }
+    public void meth24084() { }
+    public void meth24085() { }
+    public void meth24086() { }
+    public void meth24087() { }
+    public void meth24088() { }
+    public void meth24089() { }
+    public void meth24090() { }
+    public void meth24091() { }
+    public void meth24092() { }
+    public void meth24093() { }
+    public void meth24094() { }
+    public void meth24095() { }
+    public void meth24096() { }
+    public void meth24097() { }
+    public void meth24098() { }
+    public void meth24099() { }
+    public void meth24100() { }
+    public void meth24101() { }
+    public void meth24102() { }
+    public void meth24103() { }
+    public void meth24104() { }
+    public void meth24105() { }
+    public void meth24106() { }
+    public void meth24107() { }
+    public void meth24108() { }
+    public void meth24109() { }
+    public void meth24110() { }
+    public void meth24111() { }
+    public void meth24112() { }
+    public void meth24113() { }
+    public void meth24114() { }
+    public void meth24115() { }
+    public void meth24116() { }
+    public void meth24117() { }
+    public void meth24118() { }
+    public void meth24119() { }
+    public void meth24120() { }
+    public void meth24121() { }
+    public void meth24122() { }
+    public void meth24123() { }
+    public void meth24124() { }
+    public void meth24125() { }
+    public void meth24126() { }
+    public void meth24127() { }
+    public void meth24128() { }
+    public void meth24129() { }
+    public void meth24130() { }
+    public void meth24131() { }
+    public void meth24132() { }
+    public void meth24133() { }
+    public void meth24134() { }
+    public void meth24135() { }
+    public void meth24136() { }
+    public void meth24137() { }
+    public void meth24138() { }
+    public void meth24139() { }
+    public void meth24140() { }
+    public void meth24141() { }
+    public void meth24142() { }
+    public void meth24143() { }
+    public void meth24144() { }
+    public void meth24145() { }
+    public void meth24146() { }
+    public void meth24147() { }
+    public void meth24148() { }
+    public void meth24149() { }
+    public void meth24150() { }
+    public void meth24151() { }
+    public void meth24152() { }
+    public void meth24153() { }
+    public void meth24154() { }
+    public void meth24155() { }
+    public void meth24156() { }
+    public void meth24157() { }
+    public void meth24158() { }
+    public void meth24159() { }
+    public void meth24160() { }
+    public void meth24161() { }
+    public void meth24162() { }
+    public void meth24163() { }
+    public void meth24164() { }
+    public void meth24165() { }
+    public void meth24166() { }
+    public void meth24167() { }
+    public void meth24168() { }
+    public void meth24169() { }
+    public void meth24170() { }
+    public void meth24171() { }
+    public void meth24172() { }
+    public void meth24173() { }
+    public void meth24174() { }
+    public void meth24175() { }
+    public void meth24176() { }
+    public void meth24177() { }
+    public void meth24178() { }
+    public void meth24179() { }
+    public void meth24180() { }
+    public void meth24181() { }
+    public void meth24182() { }
+    public void meth24183() { }
+    public void meth24184() { }
+    public void meth24185() { }
+    public void meth24186() { }
+    public void meth24187() { }
+    public void meth24188() { }
+    public void meth24189() { }
+    public void meth24190() { }
+    public void meth24191() { }
+    public void meth24192() { }
+    public void meth24193() { }
+    public void meth24194() { }
+    public void meth24195() { }
+    public void meth24196() { }
+    public void meth24197() { }
+    public void meth24198() { }
+    public void meth24199() { }
+    public void meth24200() { }
+    public void meth24201() { }
+    public void meth24202() { }
+    public void meth24203() { }
+    public void meth24204() { }
+    public void meth24205() { }
+    public void meth24206() { }
+    public void meth24207() { }
+    public void meth24208() { }
+    public void meth24209() { }
+    public void meth24210() { }
+    public void meth24211() { }
+    public void meth24212() { }
+    public void meth24213() { }
+    public void meth24214() { }
+    public void meth24215() { }
+    public void meth24216() { }
+    public void meth24217() { }
+    public void meth24218() { }
+    public void meth24219() { }
+    public void meth24220() { }
+    public void meth24221() { }
+    public void meth24222() { }
+    public void meth24223() { }
+    public void meth24224() { }
+    public void meth24225() { }
+    public void meth24226() { }
+    public void meth24227() { }
+    public void meth24228() { }
+    public void meth24229() { }
+    public void meth24230() { }
+    public void meth24231() { }
+    public void meth24232() { }
+    public void meth24233() { }
+    public void meth24234() { }
+    public void meth24235() { }
+    public void meth24236() { }
+    public void meth24237() { }
+    public void meth24238() { }
+    public void meth24239() { }
+    public void meth24240() { }
+    public void meth24241() { }
+    public void meth24242() { }
+    public void meth24243() { }
+    public void meth24244() { }
+    public void meth24245() { }
+    public void meth24246() { }
+    public void meth24247() { }
+    public void meth24248() { }
+    public void meth24249() { }
+    public void meth24250() { }
+    public void meth24251() { }
+    public void meth24252() { }
+    public void meth24253() { }
+    public void meth24254() { }
+    public void meth24255() { }
+    public void meth24256() { }
+    public void meth24257() { }
+    public void meth24258() { }
+    public void meth24259() { }
+    public void meth24260() { }
+    public void meth24261() { }
+    public void meth24262() { }
+    public void meth24263() { }
+    public void meth24264() { }
+    public void meth24265() { }
+    public void meth24266() { }
+    public void meth24267() { }
+    public void meth24268() { }
+    public void meth24269() { }
+    public void meth24270() { }
+    public void meth24271() { }
+    public void meth24272() { }
+    public void meth24273() { }
+    public void meth24274() { }
+    public void meth24275() { }
+    public void meth24276() { }
+    public void meth24277() { }
+    public void meth24278() { }
+    public void meth24279() { }
+    public void meth24280() { }
+    public void meth24281() { }
+    public void meth24282() { }
+    public void meth24283() { }
+    public void meth24284() { }
+    public void meth24285() { }
+    public void meth24286() { }
+    public void meth24287() { }
+    public void meth24288() { }
+    public void meth24289() { }
+    public void meth24290() { }
+    public void meth24291() { }
+    public void meth24292() { }
+    public void meth24293() { }
+    public void meth24294() { }
+    public void meth24295() { }
+    public void meth24296() { }
+    public void meth24297() { }
+    public void meth24298() { }
+    public void meth24299() { }
+    public void meth24300() { }
+    public void meth24301() { }
+    public void meth24302() { }
+    public void meth24303() { }
+    public void meth24304() { }
+    public void meth24305() { }
+    public void meth24306() { }
+    public void meth24307() { }
+    public void meth24308() { }
+    public void meth24309() { }
+    public void meth24310() { }
+    public void meth24311() { }
+    public void meth24312() { }
+    public void meth24313() { }
+    public void meth24314() { }
+    public void meth24315() { }
+    public void meth24316() { }
+    public void meth24317() { }
+    public void meth24318() { }
+    public void meth24319() { }
+    public void meth24320() { }
+    public void meth24321() { }
+    public void meth24322() { }
+    public void meth24323() { }
+    public void meth24324() { }
+    public void meth24325() { }
+    public void meth24326() { }
+    public void meth24327() { }
+    public void meth24328() { }
+    public void meth24329() { }
+    public void meth24330() { }
+    public void meth24331() { }
+    public void meth24332() { }
+    public void meth24333() { }
+    public void meth24334() { }
+    public void meth24335() { }
+    public void meth24336() { }
+    public void meth24337() { }
+    public void meth24338() { }
+    public void meth24339() { }
+    public void meth24340() { }
+    public void meth24341() { }
+    public void meth24342() { }
+    public void meth24343() { }
+    public void meth24344() { }
+    public void meth24345() { }
+    public void meth24346() { }
+    public void meth24347() { }
+    public void meth24348() { }
+    public void meth24349() { }
+    public void meth24350() { }
+    public void meth24351() { }
+    public void meth24352() { }
+    public void meth24353() { }
+    public void meth24354() { }
+    public void meth24355() { }
+    public void meth24356() { }
+    public void meth24357() { }
+    public void meth24358() { }
+    public void meth24359() { }
+    public void meth24360() { }
+    public void meth24361() { }
+    public void meth24362() { }
+    public void meth24363() { }
+    public void meth24364() { }
+    public void meth24365() { }
+    public void meth24366() { }
+    public void meth24367() { }
+    public void meth24368() { }
+    public void meth24369() { }
+    public void meth24370() { }
+    public void meth24371() { }
+    public void meth24372() { }
+    public void meth24373() { }
+    public void meth24374() { }
+    public void meth24375() { }
+    public void meth24376() { }
+    public void meth24377() { }
+    public void meth24378() { }
+    public void meth24379() { }
+    public void meth24380() { }
+    public void meth24381() { }
+    public void meth24382() { }
+    public void meth24383() { }
+    public void meth24384() { }
+    public void meth24385() { }
+    public void meth24386() { }
+    public void meth24387() { }
+    public void meth24388() { }
+    public void meth24389() { }
+    public void meth24390() { }
+    public void meth24391() { }
+    public void meth24392() { }
+    public void meth24393() { }
+    public void meth24394() { }
+    public void meth24395() { }
+    public void meth24396() { }
+    public void meth24397() { }
+    public void meth24398() { }
+    public void meth24399() { }
+    public void meth24400() { }
+    public void meth24401() { }
+    public void meth24402() { }
+    public void meth24403() { }
+    public void meth24404() { }
+    public void meth24405() { }
+    public void meth24406() { }
+    public void meth24407() { }
+    public void meth24408() { }
+    public void meth24409() { }
+    public void meth24410() { }
+    public void meth24411() { }
+    public void meth24412() { }
+    public void meth24413() { }
+    public void meth24414() { }
+    public void meth24415() { }
+    public void meth24416() { }
+    public void meth24417() { }
+    public void meth24418() { }
+    public void meth24419() { }
+    public void meth24420() { }
+    public void meth24421() { }
+    public void meth24422() { }
+    public void meth24423() { }
+    public void meth24424() { }
+    public void meth24425() { }
+    public void meth24426() { }
+    public void meth24427() { }
+    public void meth24428() { }
+    public void meth24429() { }
+    public void meth24430() { }
+    public void meth24431() { }
+    public void meth24432() { }
+    public void meth24433() { }
+    public void meth24434() { }
+    public void meth24435() { }
+    public void meth24436() { }
+    public void meth24437() { }
+    public void meth24438() { }
+    public void meth24439() { }
+    public void meth24440() { }
+    public void meth24441() { }
+    public void meth24442() { }
+    public void meth24443() { }
+    public void meth24444() { }
+    public void meth24445() { }
+    public void meth24446() { }
+    public void meth24447() { }
+    public void meth24448() { }
+    public void meth24449() { }
+    public void meth24450() { }
+    public void meth24451() { }
+    public void meth24452() { }
+    public void meth24453() { }
+    public void meth24454() { }
+    public void meth24455() { }
+    public void meth24456() { }
+    public void meth24457() { }
+    public void meth24458() { }
+    public void meth24459() { }
+    public void meth24460() { }
+    public void meth24461() { }
+    public void meth24462() { }
+    public void meth24463() { }
+    public void meth24464() { }
+    public void meth24465() { }
+    public void meth24466() { }
+    public void meth24467() { }
+    public void meth24468() { }
+    public void meth24469() { }
+    public void meth24470() { }
+    public void meth24471() { }
+    public void meth24472() { }
+    public void meth24473() { }
+    public void meth24474() { }
+    public void meth24475() { }
+    public void meth24476() { }
+    public void meth24477() { }
+    public void meth24478() { }
+    public void meth24479() { }
+    public void meth24480() { }
+    public void meth24481() { }
+    public void meth24482() { }
+    public void meth24483() { }
+    public void meth24484() { }
+    public void meth24485() { }
+    public void meth24486() { }
+    public void meth24487() { }
+    public void meth24488() { }
+    public void meth24489() { }
+    public void meth24490() { }
+    public void meth24491() { }
+    public void meth24492() { }
+    public void meth24493() { }
+    public void meth24494() { }
+    public void meth24495() { }
+    public void meth24496() { }
+    public void meth24497() { }
+    public void meth24498() { }
+    public void meth24499() { }
+    public void meth24500() { }
+    public void meth24501() { }
+    public void meth24502() { }
+    public void meth24503() { }
+    public void meth24504() { }
+    public void meth24505() { }
+    public void meth24506() { }
+    public void meth24507() { }
+    public void meth24508() { }
+    public void meth24509() { }
+    public void meth24510() { }
+    public void meth24511() { }
+    public void meth24512() { }
+    public void meth24513() { }
+    public void meth24514() { }
+    public void meth24515() { }
+    public void meth24516() { }
+    public void meth24517() { }
+    public void meth24518() { }
+    public void meth24519() { }
+    public void meth24520() { }
+    public void meth24521() { }
+    public void meth24522() { }
+    public void meth24523() { }
+    public void meth24524() { }
+    public void meth24525() { }
+    public void meth24526() { }
+    public void meth24527() { }
+    public void meth24528() { }
+    public void meth24529() { }
+    public void meth24530() { }
+    public void meth24531() { }
+    public void meth24532() { }
+    public void meth24533() { }
+    public void meth24534() { }
+    public void meth24535() { }
+    public void meth24536() { }
+    public void meth24537() { }
+    public void meth24538() { }
+    public void meth24539() { }
+    public void meth24540() { }
+    public void meth24541() { }
+    public void meth24542() { }
+    public void meth24543() { }
+    public void meth24544() { }
+    public void meth24545() { }
+    public void meth24546() { }
+    public void meth24547() { }
+    public void meth24548() { }
+    public void meth24549() { }
+    public void meth24550() { }
+    public void meth24551() { }
+    public void meth24552() { }
+    public void meth24553() { }
+    public void meth24554() { }
+    public void meth24555() { }
+    public void meth24556() { }
+    public void meth24557() { }
+    public void meth24558() { }
+    public void meth24559() { }
+    public void meth24560() { }
+    public void meth24561() { }
+    public void meth24562() { }
+    public void meth24563() { }
+    public void meth24564() { }
+    public void meth24565() { }
+    public void meth24566() { }
+    public void meth24567() { }
+    public void meth24568() { }
+    public void meth24569() { }
+    public void meth24570() { }
+    public void meth24571() { }
+    public void meth24572() { }
+    public void meth24573() { }
+    public void meth24574() { }
+    public void meth24575() { }
+    public void meth24576() { }
+    public void meth24577() { }
+    public void meth24578() { }
+    public void meth24579() { }
+    public void meth24580() { }
+    public void meth24581() { }
+    public void meth24582() { }
+    public void meth24583() { }
+    public void meth24584() { }
+    public void meth24585() { }
+    public void meth24586() { }
+    public void meth24587() { }
+    public void meth24588() { }
+    public void meth24589() { }
+    public void meth24590() { }
+    public void meth24591() { }
+    public void meth24592() { }
+    public void meth24593() { }
+    public void meth24594() { }
+    public void meth24595() { }
+    public void meth24596() { }
+    public void meth24597() { }
+    public void meth24598() { }
+    public void meth24599() { }
+    public void meth24600() { }
+    public void meth24601() { }
+    public void meth24602() { }
+    public void meth24603() { }
+    public void meth24604() { }
+    public void meth24605() { }
+    public void meth24606() { }
+    public void meth24607() { }
+    public void meth24608() { }
+    public void meth24609() { }
+    public void meth24610() { }
+    public void meth24611() { }
+    public void meth24612() { }
+    public void meth24613() { }
+    public void meth24614() { }
+    public void meth24615() { }
+    public void meth24616() { }
+    public void meth24617() { }
+    public void meth24618() { }
+    public void meth24619() { }
+    public void meth24620() { }
+    public void meth24621() { }
+    public void meth24622() { }
+    public void meth24623() { }
+    public void meth24624() { }
+    public void meth24625() { }
+    public void meth24626() { }
+    public void meth24627() { }
+    public void meth24628() { }
+    public void meth24629() { }
+    public void meth24630() { }
+    public void meth24631() { }
+    public void meth24632() { }
+    public void meth24633() { }
+    public void meth24634() { }
+    public void meth24635() { }
+    public void meth24636() { }
+    public void meth24637() { }
+    public void meth24638() { }
+    public void meth24639() { }
+    public void meth24640() { }
+    public void meth24641() { }
+    public void meth24642() { }
+    public void meth24643() { }
+    public void meth24644() { }
+    public void meth24645() { }
+    public void meth24646() { }
+    public void meth24647() { }
+    public void meth24648() { }
+    public void meth24649() { }
+    public void meth24650() { }
+    public void meth24651() { }
+    public void meth24652() { }
+    public void meth24653() { }
+    public void meth24654() { }
+    public void meth24655() { }
+    public void meth24656() { }
+    public void meth24657() { }
+    public void meth24658() { }
+    public void meth24659() { }
+    public void meth24660() { }
+    public void meth24661() { }
+    public void meth24662() { }
+    public void meth24663() { }
+    public void meth24664() { }
+    public void meth24665() { }
+    public void meth24666() { }
+    public void meth24667() { }
+    public void meth24668() { }
+    public void meth24669() { }
+    public void meth24670() { }
+    public void meth24671() { }
+    public void meth24672() { }
+    public void meth24673() { }
+    public void meth24674() { }
+    public void meth24675() { }
+    public void meth24676() { }
+    public void meth24677() { }
+    public void meth24678() { }
+    public void meth24679() { }
+    public void meth24680() { }
+    public void meth24681() { }
+    public void meth24682() { }
+    public void meth24683() { }
+    public void meth24684() { }
+    public void meth24685() { }
+    public void meth24686() { }
+    public void meth24687() { }
+    public void meth24688() { }
+    public void meth24689() { }
+    public void meth24690() { }
+    public void meth24691() { }
+    public void meth24692() { }
+    public void meth24693() { }
+    public void meth24694() { }
+    public void meth24695() { }
+    public void meth24696() { }
+    public void meth24697() { }
+    public void meth24698() { }
+    public void meth24699() { }
+    public void meth24700() { }
+    public void meth24701() { }
+    public void meth24702() { }
+    public void meth24703() { }
+    public void meth24704() { }
+    public void meth24705() { }
+    public void meth24706() { }
+    public void meth24707() { }
+    public void meth24708() { }
+    public void meth24709() { }
+    public void meth24710() { }
+    public void meth24711() { }
+    public void meth24712() { }
+    public void meth24713() { }
+    public void meth24714() { }
+    public void meth24715() { }
+    public void meth24716() { }
+    public void meth24717() { }
+    public void meth24718() { }
+    public void meth24719() { }
+    public void meth24720() { }
+    public void meth24721() { }
+    public void meth24722() { }
+    public void meth24723() { }
+    public void meth24724() { }
+    public void meth24725() { }
+    public void meth24726() { }
+    public void meth24727() { }
+    public void meth24728() { }
+    public void meth24729() { }
+    public void meth24730() { }
+    public void meth24731() { }
+    public void meth24732() { }
+    public void meth24733() { }
+    public void meth24734() { }
+    public void meth24735() { }
+    public void meth24736() { }
+    public void meth24737() { }
+    public void meth24738() { }
+    public void meth24739() { }
+    public void meth24740() { }
+    public void meth24741() { }
+    public void meth24742() { }
+    public void meth24743() { }
+    public void meth24744() { }
+    public void meth24745() { }
+    public void meth24746() { }
+    public void meth24747() { }
+    public void meth24748() { }
+    public void meth24749() { }
+    public void meth24750() { }
+    public void meth24751() { }
+    public void meth24752() { }
+    public void meth24753() { }
+    public void meth24754() { }
+    public void meth24755() { }
+    public void meth24756() { }
+    public void meth24757() { }
+    public void meth24758() { }
+    public void meth24759() { }
+    public void meth24760() { }
+    public void meth24761() { }
+    public void meth24762() { }
+    public void meth24763() { }
+    public void meth24764() { }
+    public void meth24765() { }
+    public void meth24766() { }
+    public void meth24767() { }
+    public void meth24768() { }
+    public void meth24769() { }
+    public void meth24770() { }
+    public void meth24771() { }
+    public void meth24772() { }
+    public void meth24773() { }
+    public void meth24774() { }
+    public void meth24775() { }
+    public void meth24776() { }
+    public void meth24777() { }
+    public void meth24778() { }
+    public void meth24779() { }
+    public void meth24780() { }
+    public void meth24781() { }
+    public void meth24782() { }
+    public void meth24783() { }
+    public void meth24784() { }
+    public void meth24785() { }
+    public void meth24786() { }
+    public void meth24787() { }
+    public void meth24788() { }
+    public void meth24789() { }
+    public void meth24790() { }
+    public void meth24791() { }
+    public void meth24792() { }
+    public void meth24793() { }
+    public void meth24794() { }
+    public void meth24795() { }
+    public void meth24796() { }
+    public void meth24797() { }
+    public void meth24798() { }
+    public void meth24799() { }
+    public void meth24800() { }
+    public void meth24801() { }
+    public void meth24802() { }
+    public void meth24803() { }
+    public void meth24804() { }
+    public void meth24805() { }
+    public void meth24806() { }
+    public void meth24807() { }
+    public void meth24808() { }
+    public void meth24809() { }
+    public void meth24810() { }
+    public void meth24811() { }
+    public void meth24812() { }
+    public void meth24813() { }
+    public void meth24814() { }
+    public void meth24815() { }
+    public void meth24816() { }
+    public void meth24817() { }
+    public void meth24818() { }
+    public void meth24819() { }
+    public void meth24820() { }
+    public void meth24821() { }
+    public void meth24822() { }
+    public void meth24823() { }
+    public void meth24824() { }
+    public void meth24825() { }
+    public void meth24826() { }
+    public void meth24827() { }
+    public void meth24828() { }
+    public void meth24829() { }
+    public void meth24830() { }
+    public void meth24831() { }
+    public void meth24832() { }
+    public void meth24833() { }
+    public void meth24834() { }
+    public void meth24835() { }
+    public void meth24836() { }
+    public void meth24837() { }
+    public void meth24838() { }
+    public void meth24839() { }
+    public void meth24840() { }
+    public void meth24841() { }
+    public void meth24842() { }
+    public void meth24843() { }
+    public void meth24844() { }
+    public void meth24845() { }
+    public void meth24846() { }
+    public void meth24847() { }
+    public void meth24848() { }
+    public void meth24849() { }
+    public void meth24850() { }
+    public void meth24851() { }
+    public void meth24852() { }
+    public void meth24853() { }
+    public void meth24854() { }
+    public void meth24855() { }
+    public void meth24856() { }
+    public void meth24857() { }
+    public void meth24858() { }
+    public void meth24859() { }
+    public void meth24860() { }
+    public void meth24861() { }
+    public void meth24862() { }
+    public void meth24863() { }
+    public void meth24864() { }
+    public void meth24865() { }
+    public void meth24866() { }
+    public void meth24867() { }
+    public void meth24868() { }
+    public void meth24869() { }
+    public void meth24870() { }
+    public void meth24871() { }
+    public void meth24872() { }
+    public void meth24873() { }
+    public void meth24874() { }
+    public void meth24875() { }
+    public void meth24876() { }
+    public void meth24877() { }
+    public void meth24878() { }
+    public void meth24879() { }
+    public void meth24880() { }
+    public void meth24881() { }
+    public void meth24882() { }
+    public void meth24883() { }
+    public void meth24884() { }
+    public void meth24885() { }
+    public void meth24886() { }
+    public void meth24887() { }
+    public void meth24888() { }
+    public void meth24889() { }
+    public void meth24890() { }
+    public void meth24891() { }
+    public void meth24892() { }
+    public void meth24893() { }
+    public void meth24894() { }
+    public void meth24895() { }
+    public void meth24896() { }
+    public void meth24897() { }
+    public void meth24898() { }
+    public void meth24899() { }
+    public void meth24900() { }
+    public void meth24901() { }
+    public void meth24902() { }
+    public void meth24903() { }
+    public void meth24904() { }
+    public void meth24905() { }
+    public void meth24906() { }
+    public void meth24907() { }
+    public void meth24908() { }
+    public void meth24909() { }
+    public void meth24910() { }
+    public void meth24911() { }
+    public void meth24912() { }
+    public void meth24913() { }
+    public void meth24914() { }
+    public void meth24915() { }
+    public void meth24916() { }
+    public void meth24917() { }
+    public void meth24918() { }
+    public void meth24919() { }
+    public void meth24920() { }
+    public void meth24921() { }
+    public void meth24922() { }
+    public void meth24923() { }
+    public void meth24924() { }
+    public void meth24925() { }
+    public void meth24926() { }
+    public void meth24927() { }
+    public void meth24928() { }
+    public void meth24929() { }
+    public void meth24930() { }
+    public void meth24931() { }
+    public void meth24932() { }
+    public void meth24933() { }
+    public void meth24934() { }
+    public void meth24935() { }
+    public void meth24936() { }
+    public void meth24937() { }
+    public void meth24938() { }
+    public void meth24939() { }
+    public void meth24940() { }
+    public void meth24941() { }
+    public void meth24942() { }
+    public void meth24943() { }
+    public void meth24944() { }
+    public void meth24945() { }
+    public void meth24946() { }
+    public void meth24947() { }
+    public void meth24948() { }
+    public void meth24949() { }
+    public void meth24950() { }
+    public void meth24951() { }
+    public void meth24952() { }
+    public void meth24953() { }
+    public void meth24954() { }
+    public void meth24955() { }
+    public void meth24956() { }
+    public void meth24957() { }
+    public void meth24958() { }
+    public void meth24959() { }
+    public void meth24960() { }
+    public void meth24961() { }
+    public void meth24962() { }
+    public void meth24963() { }
+    public void meth24964() { }
+    public void meth24965() { }
+    public void meth24966() { }
+    public void meth24967() { }
+    public void meth24968() { }
+    public void meth24969() { }
+    public void meth24970() { }
+    public void meth24971() { }
+    public void meth24972() { }
+    public void meth24973() { }
+    public void meth24974() { }
+    public void meth24975() { }
+    public void meth24976() { }
+    public void meth24977() { }
+    public void meth24978() { }
+    public void meth24979() { }
+    public void meth24980() { }
+    public void meth24981() { }
+    public void meth24982() { }
+    public void meth24983() { }
+    public void meth24984() { }
+    public void meth24985() { }
+    public void meth24986() { }
+    public void meth24987() { }
+    public void meth24988() { }
+    public void meth24989() { }
+    public void meth24990() { }
+    public void meth24991() { }
+    public void meth24992() { }
+    public void meth24993() { }
+    public void meth24994() { }
+    public void meth24995() { }
+    public void meth24996() { }
+    public void meth24997() { }
+    public void meth24998() { }
+    public void meth24999() { }
+    public void meth25000() { }
+    public void meth25001() { }
+    public void meth25002() { }
+    public void meth25003() { }
+    public void meth25004() { }
+    public void meth25005() { }
+    public void meth25006() { }
+    public void meth25007() { }
+    public void meth25008() { }
+    public void meth25009() { }
+    public void meth25010() { }
+    public void meth25011() { }
+    public void meth25012() { }
+    public void meth25013() { }
+    public void meth25014() { }
+    public void meth25015() { }
+    public void meth25016() { }
+    public void meth25017() { }
+    public void meth25018() { }
+    public void meth25019() { }
+    public void meth25020() { }
+    public void meth25021() { }
+    public void meth25022() { }
+    public void meth25023() { }
+    public void meth25024() { }
+    public void meth25025() { }
+    public void meth25026() { }
+    public void meth25027() { }
+    public void meth25028() { }
+    public void meth25029() { }
+    public void meth25030() { }
+    public void meth25031() { }
+    public void meth25032() { }
+    public void meth25033() { }
+    public void meth25034() { }
+    public void meth25035() { }
+    public void meth25036() { }
+    public void meth25037() { }
+    public void meth25038() { }
+    public void meth25039() { }
+    public void meth25040() { }
+    public void meth25041() { }
+    public void meth25042() { }
+    public void meth25043() { }
+    public void meth25044() { }
+    public void meth25045() { }
+    public void meth25046() { }
+    public void meth25047() { }
+    public void meth25048() { }
+    public void meth25049() { }
+    public void meth25050() { }
+    public void meth25051() { }
+    public void meth25052() { }
+    public void meth25053() { }
+    public void meth25054() { }
+    public void meth25055() { }
+    public void meth25056() { }
+    public void meth25057() { }
+    public void meth25058() { }
+    public void meth25059() { }
+    public void meth25060() { }
+    public void meth25061() { }
+    public void meth25062() { }
+    public void meth25063() { }
+    public void meth25064() { }
+    public void meth25065() { }
+    public void meth25066() { }
+    public void meth25067() { }
+    public void meth25068() { }
+    public void meth25069() { }
+    public void meth25070() { }
+    public void meth25071() { }
+    public void meth25072() { }
+    public void meth25073() { }
+    public void meth25074() { }
+    public void meth25075() { }
+    public void meth25076() { }
+    public void meth25077() { }
+    public void meth25078() { }
+    public void meth25079() { }
+    public void meth25080() { }
+    public void meth25081() { }
+    public void meth25082() { }
+    public void meth25083() { }
+    public void meth25084() { }
+    public void meth25085() { }
+    public void meth25086() { }
+    public void meth25087() { }
+    public void meth25088() { }
+    public void meth25089() { }
+    public void meth25090() { }
+    public void meth25091() { }
+    public void meth25092() { }
+    public void meth25093() { }
+    public void meth25094() { }
+    public void meth25095() { }
+    public void meth25096() { }
+    public void meth25097() { }
+    public void meth25098() { }
+    public void meth25099() { }
+    public void meth25100() { }
+    public void meth25101() { }
+    public void meth25102() { }
+    public void meth25103() { }
+    public void meth25104() { }
+    public void meth25105() { }
+    public void meth25106() { }
+    public void meth25107() { }
+    public void meth25108() { }
+    public void meth25109() { }
+    public void meth25110() { }
+    public void meth25111() { }
+    public void meth25112() { }
+    public void meth25113() { }
+    public void meth25114() { }
+    public void meth25115() { }
+    public void meth25116() { }
+    public void meth25117() { }
+    public void meth25118() { }
+    public void meth25119() { }
+    public void meth25120() { }
+    public void meth25121() { }
+    public void meth25122() { }
+    public void meth25123() { }
+    public void meth25124() { }
+    public void meth25125() { }
+    public void meth25126() { }
+    public void meth25127() { }
+    public void meth25128() { }
+    public void meth25129() { }
+    public void meth25130() { }
+    public void meth25131() { }
+    public void meth25132() { }
+    public void meth25133() { }
+    public void meth25134() { }
+    public void meth25135() { }
+    public void meth25136() { }
+    public void meth25137() { }
+    public void meth25138() { }
+    public void meth25139() { }
+    public void meth25140() { }
+    public void meth25141() { }
+    public void meth25142() { }
+    public void meth25143() { }
+    public void meth25144() { }
+    public void meth25145() { }
+    public void meth25146() { }
+    public void meth25147() { }
+    public void meth25148() { }
+    public void meth25149() { }
+    public void meth25150() { }
+    public void meth25151() { }
+    public void meth25152() { }
+    public void meth25153() { }
+    public void meth25154() { }
+    public void meth25155() { }
+    public void meth25156() { }
+    public void meth25157() { }
+    public void meth25158() { }
+    public void meth25159() { }
+    public void meth25160() { }
+    public void meth25161() { }
+    public void meth25162() { }
+    public void meth25163() { }
+    public void meth25164() { }
+    public void meth25165() { }
+    public void meth25166() { }
+    public void meth25167() { }
+    public void meth25168() { }
+    public void meth25169() { }
+    public void meth25170() { }
+    public void meth25171() { }
+    public void meth25172() { }
+    public void meth25173() { }
+    public void meth25174() { }
+    public void meth25175() { }
+    public void meth25176() { }
+    public void meth25177() { }
+    public void meth25178() { }
+    public void meth25179() { }
+    public void meth25180() { }
+    public void meth25181() { }
+    public void meth25182() { }
+    public void meth25183() { }
+    public void meth25184() { }
+    public void meth25185() { }
+    public void meth25186() { }
+    public void meth25187() { }
+    public void meth25188() { }
+    public void meth25189() { }
+    public void meth25190() { }
+    public void meth25191() { }
+    public void meth25192() { }
+    public void meth25193() { }
+    public void meth25194() { }
+    public void meth25195() { }
+    public void meth25196() { }
+    public void meth25197() { }
+    public void meth25198() { }
+    public void meth25199() { }
+    public void meth25200() { }
+    public void meth25201() { }
+    public void meth25202() { }
+    public void meth25203() { }
+    public void meth25204() { }
+    public void meth25205() { }
+    public void meth25206() { }
+    public void meth25207() { }
+    public void meth25208() { }
+    public void meth25209() { }
+    public void meth25210() { }
+    public void meth25211() { }
+    public void meth25212() { }
+    public void meth25213() { }
+    public void meth25214() { }
+    public void meth25215() { }
+    public void meth25216() { }
+    public void meth25217() { }
+    public void meth25218() { }
+    public void meth25219() { }
+    public void meth25220() { }
+    public void meth25221() { }
+    public void meth25222() { }
+    public void meth25223() { }
+    public void meth25224() { }
+    public void meth25225() { }
+    public void meth25226() { }
+    public void meth25227() { }
+    public void meth25228() { }
+    public void meth25229() { }
+    public void meth25230() { }
+    public void meth25231() { }
+    public void meth25232() { }
+    public void meth25233() { }
+    public void meth25234() { }
+    public void meth25235() { }
+    public void meth25236() { }
+    public void meth25237() { }
+    public void meth25238() { }
+    public void meth25239() { }
+    public void meth25240() { }
+    public void meth25241() { }
+    public void meth25242() { }
+    public void meth25243() { }
+    public void meth25244() { }
+    public void meth25245() { }
+    public void meth25246() { }
+    public void meth25247() { }
+    public void meth25248() { }
+    public void meth25249() { }
+    public void meth25250() { }
+    public void meth25251() { }
+    public void meth25252() { }
+    public void meth25253() { }
+    public void meth25254() { }
+    public void meth25255() { }
+    public void meth25256() { }
+    public void meth25257() { }
+    public void meth25258() { }
+    public void meth25259() { }
+    public void meth25260() { }
+    public void meth25261() { }
+    public void meth25262() { }
+    public void meth25263() { }
+    public void meth25264() { }
+    public void meth25265() { }
+    public void meth25266() { }
+    public void meth25267() { }
+    public void meth25268() { }
+    public void meth25269() { }
+    public void meth25270() { }
+    public void meth25271() { }
+    public void meth25272() { }
+    public void meth25273() { }
+    public void meth25274() { }
+    public void meth25275() { }
+    public void meth25276() { }
+    public void meth25277() { }
+    public void meth25278() { }
+    public void meth25279() { }
+    public void meth25280() { }
+    public void meth25281() { }
+    public void meth25282() { }
+    public void meth25283() { }
+    public void meth25284() { }
+    public void meth25285() { }
+    public void meth25286() { }
+    public void meth25287() { }
+    public void meth25288() { }
+    public void meth25289() { }
+    public void meth25290() { }
+    public void meth25291() { }
+    public void meth25292() { }
+    public void meth25293() { }
+    public void meth25294() { }
+    public void meth25295() { }
+    public void meth25296() { }
+    public void meth25297() { }
+    public void meth25298() { }
+    public void meth25299() { }
+    public void meth25300() { }
+    public void meth25301() { }
+    public void meth25302() { }
+    public void meth25303() { }
+    public void meth25304() { }
+    public void meth25305() { }
+    public void meth25306() { }
+    public void meth25307() { }
+    public void meth25308() { }
+    public void meth25309() { }
+    public void meth25310() { }
+    public void meth25311() { }
+    public void meth25312() { }
+    public void meth25313() { }
+    public void meth25314() { }
+    public void meth25315() { }
+    public void meth25316() { }
+    public void meth25317() { }
+    public void meth25318() { }
+    public void meth25319() { }
+    public void meth25320() { }
+    public void meth25321() { }
+    public void meth25322() { }
+    public void meth25323() { }
+    public void meth25324() { }
+    public void meth25325() { }
+    public void meth25326() { }
+    public void meth25327() { }
+    public void meth25328() { }
+    public void meth25329() { }
+    public void meth25330() { }
+    public void meth25331() { }
+    public void meth25332() { }
+    public void meth25333() { }
+    public void meth25334() { }
+    public void meth25335() { }
+    public void meth25336() { }
+    public void meth25337() { }
+    public void meth25338() { }
+    public void meth25339() { }
+    public void meth25340() { }
+    public void meth25341() { }
+    public void meth25342() { }
+    public void meth25343() { }
+    public void meth25344() { }
+    public void meth25345() { }
+    public void meth25346() { }
+    public void meth25347() { }
+    public void meth25348() { }
+    public void meth25349() { }
+    public void meth25350() { }
+    public void meth25351() { }
+    public void meth25352() { }
+    public void meth25353() { }
+    public void meth25354() { }
+    public void meth25355() { }
+    public void meth25356() { }
+    public void meth25357() { }
+    public void meth25358() { }
+    public void meth25359() { }
+    public void meth25360() { }
+    public void meth25361() { }
+    public void meth25362() { }
+    public void meth25363() { }
+    public void meth25364() { }
+    public void meth25365() { }
+    public void meth25366() { }
+    public void meth25367() { }
+    public void meth25368() { }
+    public void meth25369() { }
+    public void meth25370() { }
+    public void meth25371() { }
+    public void meth25372() { }
+    public void meth25373() { }
+    public void meth25374() { }
+    public void meth25375() { }
+    public void meth25376() { }
+    public void meth25377() { }
+    public void meth25378() { }
+    public void meth25379() { }
+    public void meth25380() { }
+    public void meth25381() { }
+    public void meth25382() { }
+    public void meth25383() { }
+    public void meth25384() { }
+    public void meth25385() { }
+    public void meth25386() { }
+    public void meth25387() { }
+    public void meth25388() { }
+    public void meth25389() { }
+    public void meth25390() { }
+    public void meth25391() { }
+    public void meth25392() { }
+    public void meth25393() { }
+    public void meth25394() { }
+    public void meth25395() { }
+    public void meth25396() { }
+    public void meth25397() { }
+    public void meth25398() { }
+    public void meth25399() { }
+    public void meth25400() { }
+    public void meth25401() { }
+    public void meth25402() { }
+    public void meth25403() { }
+    public void meth25404() { }
+    public void meth25405() { }
+    public void meth25406() { }
+    public void meth25407() { }
+    public void meth25408() { }
+    public void meth25409() { }
+    public void meth25410() { }
+    public void meth25411() { }
+    public void meth25412() { }
+    public void meth25413() { }
+    public void meth25414() { }
+    public void meth25415() { }
+    public void meth25416() { }
+    public void meth25417() { }
+    public void meth25418() { }
+    public void meth25419() { }
+    public void meth25420() { }
+    public void meth25421() { }
+    public void meth25422() { }
+    public void meth25423() { }
+    public void meth25424() { }
+    public void meth25425() { }
+    public void meth25426() { }
+    public void meth25427() { }
+    public void meth25428() { }
+    public void meth25429() { }
+    public void meth25430() { }
+    public void meth25431() { }
+    public void meth25432() { }
+    public void meth25433() { }
+    public void meth25434() { }
+    public void meth25435() { }
+    public void meth25436() { }
+    public void meth25437() { }
+    public void meth25438() { }
+    public void meth25439() { }
+    public void meth25440() { }
+    public void meth25441() { }
+    public void meth25442() { }
+    public void meth25443() { }
+    public void meth25444() { }
+    public void meth25445() { }
+    public void meth25446() { }
+    public void meth25447() { }
+    public void meth25448() { }
+    public void meth25449() { }
+    public void meth25450() { }
+    public void meth25451() { }
+    public void meth25452() { }
+    public void meth25453() { }
+    public void meth25454() { }
+    public void meth25455() { }
+    public void meth25456() { }
+    public void meth25457() { }
+    public void meth25458() { }
+    public void meth25459() { }
+    public void meth25460() { }
+    public void meth25461() { }
+    public void meth25462() { }
+    public void meth25463() { }
+    public void meth25464() { }
+    public void meth25465() { }
+    public void meth25466() { }
+    public void meth25467() { }
+    public void meth25468() { }
+    public void meth25469() { }
+    public void meth25470() { }
+    public void meth25471() { }
+    public void meth25472() { }
+    public void meth25473() { }
+    public void meth25474() { }
+    public void meth25475() { }
+    public void meth25476() { }
+    public void meth25477() { }
+    public void meth25478() { }
+    public void meth25479() { }
+    public void meth25480() { }
+    public void meth25481() { }
+    public void meth25482() { }
+    public void meth25483() { }
+    public void meth25484() { }
+    public void meth25485() { }
+    public void meth25486() { }
+    public void meth25487() { }
+    public void meth25488() { }
+    public void meth25489() { }
+    public void meth25490() { }
+    public void meth25491() { }
+    public void meth25492() { }
+    public void meth25493() { }
+    public void meth25494() { }
+    public void meth25495() { }
+    public void meth25496() { }
+    public void meth25497() { }
+    public void meth25498() { }
+    public void meth25499() { }
+    public void meth25500() { }
+    public void meth25501() { }
+    public void meth25502() { }
+    public void meth25503() { }
+    public void meth25504() { }
+    public void meth25505() { }
+    public void meth25506() { }
+    public void meth25507() { }
+    public void meth25508() { }
+    public void meth25509() { }
+    public void meth25510() { }
+    public void meth25511() { }
+    public void meth25512() { }
+    public void meth25513() { }
+    public void meth25514() { }
+    public void meth25515() { }
+    public void meth25516() { }
+    public void meth25517() { }
+    public void meth25518() { }
+    public void meth25519() { }
+    public void meth25520() { }
+    public void meth25521() { }
+    public void meth25522() { }
+    public void meth25523() { }
+    public void meth25524() { }
+    public void meth25525() { }
+    public void meth25526() { }
+    public void meth25527() { }
+    public void meth25528() { }
+    public void meth25529() { }
+    public void meth25530() { }
+    public void meth25531() { }
+    public void meth25532() { }
+    public void meth25533() { }
+    public void meth25534() { }
+    public void meth25535() { }
+    public void meth25536() { }
+    public void meth25537() { }
+    public void meth25538() { }
+    public void meth25539() { }
+    public void meth25540() { }
+    public void meth25541() { }
+    public void meth25542() { }
+    public void meth25543() { }
+    public void meth25544() { }
+    public void meth25545() { }
+    public void meth25546() { }
+    public void meth25547() { }
+    public void meth25548() { }
+    public void meth25549() { }
+    public void meth25550() { }
+    public void meth25551() { }
+    public void meth25552() { }
+    public void meth25553() { }
+    public void meth25554() { }
+    public void meth25555() { }
+    public void meth25556() { }
+    public void meth25557() { }
+    public void meth25558() { }
+    public void meth25559() { }
+    public void meth25560() { }
+    public void meth25561() { }
+    public void meth25562() { }
+    public void meth25563() { }
+    public void meth25564() { }
+    public void meth25565() { }
+    public void meth25566() { }
+    public void meth25567() { }
+    public void meth25568() { }
+    public void meth25569() { }
+    public void meth25570() { }
+    public void meth25571() { }
+    public void meth25572() { }
+    public void meth25573() { }
+    public void meth25574() { }
+    public void meth25575() { }
+    public void meth25576() { }
+    public void meth25577() { }
+    public void meth25578() { }
+    public void meth25579() { }
+    public void meth25580() { }
+    public void meth25581() { }
+    public void meth25582() { }
+    public void meth25583() { }
+    public void meth25584() { }
+    public void meth25585() { }
+    public void meth25586() { }
+    public void meth25587() { }
+    public void meth25588() { }
+    public void meth25589() { }
+    public void meth25590() { }
+    public void meth25591() { }
+    public void meth25592() { }
+    public void meth25593() { }
+    public void meth25594() { }
+    public void meth25595() { }
+    public void meth25596() { }
+    public void meth25597() { }
+    public void meth25598() { }
+    public void meth25599() { }
+    public void meth25600() { }
+    public void meth25601() { }
+    public void meth25602() { }
+    public void meth25603() { }
+    public void meth25604() { }
+    public void meth25605() { }
+    public void meth25606() { }
+    public void meth25607() { }
+    public void meth25608() { }
+    public void meth25609() { }
+    public void meth25610() { }
+    public void meth25611() { }
+    public void meth25612() { }
+    public void meth25613() { }
+    public void meth25614() { }
+    public void meth25615() { }
+    public void meth25616() { }
+    public void meth25617() { }
+    public void meth25618() { }
+    public void meth25619() { }
+    public void meth25620() { }
+    public void meth25621() { }
+    public void meth25622() { }
+    public void meth25623() { }
+    public void meth25624() { }
+    public void meth25625() { }
+    public void meth25626() { }
+    public void meth25627() { }
+    public void meth25628() { }
+    public void meth25629() { }
+    public void meth25630() { }
+    public void meth25631() { }
+    public void meth25632() { }
+    public void meth25633() { }
+    public void meth25634() { }
+    public void meth25635() { }
+    public void meth25636() { }
+    public void meth25637() { }
+    public void meth25638() { }
+    public void meth25639() { }
+    public void meth25640() { }
+    public void meth25641() { }
+    public void meth25642() { }
+    public void meth25643() { }
+    public void meth25644() { }
+    public void meth25645() { }
+    public void meth25646() { }
+    public void meth25647() { }
+    public void meth25648() { }
+    public void meth25649() { }
+    public void meth25650() { }
+    public void meth25651() { }
+    public void meth25652() { }
+    public void meth25653() { }
+    public void meth25654() { }
+    public void meth25655() { }
+    public void meth25656() { }
+    public void meth25657() { }
+    public void meth25658() { }
+    public void meth25659() { }
+    public void meth25660() { }
+    public void meth25661() { }
+    public void meth25662() { }
+    public void meth25663() { }
+    public void meth25664() { }
+    public void meth25665() { }
+    public void meth25666() { }
+    public void meth25667() { }
+    public void meth25668() { }
+    public void meth25669() { }
+    public void meth25670() { }
+    public void meth25671() { }
+    public void meth25672() { }
+    public void meth25673() { }
+    public void meth25674() { }
+    public void meth25675() { }
+    public void meth25676() { }
+    public void meth25677() { }
+    public void meth25678() { }
+    public void meth25679() { }
+    public void meth25680() { }
+    public void meth25681() { }
+    public void meth25682() { }
+    public void meth25683() { }
+    public void meth25684() { }
+    public void meth25685() { }
+    public void meth25686() { }
+    public void meth25687() { }
+    public void meth25688() { }
+    public void meth25689() { }
+    public void meth25690() { }
+    public void meth25691() { }
+    public void meth25692() { }
+    public void meth25693() { }
+    public void meth25694() { }
+    public void meth25695() { }
+    public void meth25696() { }
+    public void meth25697() { }
+    public void meth25698() { }
+    public void meth25699() { }
+    public void meth25700() { }
+    public void meth25701() { }
+    public void meth25702() { }
+    public void meth25703() { }
+    public void meth25704() { }
+    public void meth25705() { }
+    public void meth25706() { }
+    public void meth25707() { }
+    public void meth25708() { }
+    public void meth25709() { }
+    public void meth25710() { }
+    public void meth25711() { }
+    public void meth25712() { }
+    public void meth25713() { }
+    public void meth25714() { }
+    public void meth25715() { }
+    public void meth25716() { }
+    public void meth25717() { }
+    public void meth25718() { }
+    public void meth25719() { }
+    public void meth25720() { }
+    public void meth25721() { }
+    public void meth25722() { }
+    public void meth25723() { }
+    public void meth25724() { }
+    public void meth25725() { }
+    public void meth25726() { }
+    public void meth25727() { }
+    public void meth25728() { }
+    public void meth25729() { }
+    public void meth25730() { }
+    public void meth25731() { }
+    public void meth25732() { }
+    public void meth25733() { }
+    public void meth25734() { }
+    public void meth25735() { }
+    public void meth25736() { }
+    public void meth25737() { }
+    public void meth25738() { }
+    public void meth25739() { }
+    public void meth25740() { }
+    public void meth25741() { }
+    public void meth25742() { }
+    public void meth25743() { }
+    public void meth25744() { }
+    public void meth25745() { }
+    public void meth25746() { }
+    public void meth25747() { }
+    public void meth25748() { }
+    public void meth25749() { }
+    public void meth25750() { }
+    public void meth25751() { }
+    public void meth25752() { }
+    public void meth25753() { }
+    public void meth25754() { }
+    public void meth25755() { }
+    public void meth25756() { }
+    public void meth25757() { }
+    public void meth25758() { }
+    public void meth25759() { }
+    public void meth25760() { }
+    public void meth25761() { }
+    public void meth25762() { }
+    public void meth25763() { }
+    public void meth25764() { }
+    public void meth25765() { }
+    public void meth25766() { }
+    public void meth25767() { }
+    public void meth25768() { }
+    public void meth25769() { }
+    public void meth25770() { }
+    public void meth25771() { }
+    public void meth25772() { }
+    public void meth25773() { }
+    public void meth25774() { }
+    public void meth25775() { }
+    public void meth25776() { }
+    public void meth25777() { }
+    public void meth25778() { }
+    public void meth25779() { }
+    public void meth25780() { }
+    public void meth25781() { }
+    public void meth25782() { }
+    public void meth25783() { }
+    public void meth25784() { }
+    public void meth25785() { }
+    public void meth25786() { }
+    public void meth25787() { }
+    public void meth25788() { }
+    public void meth25789() { }
+    public void meth25790() { }
+    public void meth25791() { }
+    public void meth25792() { }
+    public void meth25793() { }
+    public void meth25794() { }
+    public void meth25795() { }
+    public void meth25796() { }
+    public void meth25797() { }
+    public void meth25798() { }
+    public void meth25799() { }
+    public void meth25800() { }
+    public void meth25801() { }
+    public void meth25802() { }
+    public void meth25803() { }
+    public void meth25804() { }
+    public void meth25805() { }
+    public void meth25806() { }
+    public void meth25807() { }
+    public void meth25808() { }
+    public void meth25809() { }
+    public void meth25810() { }
+    public void meth25811() { }
+    public void meth25812() { }
+    public void meth25813() { }
+    public void meth25814() { }
+    public void meth25815() { }
+    public void meth25816() { }
+    public void meth25817() { }
+    public void meth25818() { }
+    public void meth25819() { }
+    public void meth25820() { }
+    public void meth25821() { }
+    public void meth25822() { }
+    public void meth25823() { }
+    public void meth25824() { }
+    public void meth25825() { }
+    public void meth25826() { }
+    public void meth25827() { }
+    public void meth25828() { }
+    public void meth25829() { }
+    public void meth25830() { }
+    public void meth25831() { }
+    public void meth25832() { }
+    public void meth25833() { }
+    public void meth25834() { }
+    public void meth25835() { }
+    public void meth25836() { }
+    public void meth25837() { }
+    public void meth25838() { }
+    public void meth25839() { }
+    public void meth25840() { }
+    public void meth25841() { }
+    public void meth25842() { }
+    public void meth25843() { }
+    public void meth25844() { }
+    public void meth25845() { }
+    public void meth25846() { }
+    public void meth25847() { }
+    public void meth25848() { }
+    public void meth25849() { }
+    public void meth25850() { }
+    public void meth25851() { }
+    public void meth25852() { }
+    public void meth25853() { }
+    public void meth25854() { }
+    public void meth25855() { }
+    public void meth25856() { }
+    public void meth25857() { }
+    public void meth25858() { }
+    public void meth25859() { }
+    public void meth25860() { }
+    public void meth25861() { }
+    public void meth25862() { }
+    public void meth25863() { }
+    public void meth25864() { }
+    public void meth25865() { }
+    public void meth25866() { }
+    public void meth25867() { }
+    public void meth25868() { }
+    public void meth25869() { }
+    public void meth25870() { }
+    public void meth25871() { }
+    public void meth25872() { }
+    public void meth25873() { }
+    public void meth25874() { }
+    public void meth25875() { }
+    public void meth25876() { }
+    public void meth25877() { }
+    public void meth25878() { }
+    public void meth25879() { }
+    public void meth25880() { }
+    public void meth25881() { }
+    public void meth25882() { }
+    public void meth25883() { }
+    public void meth25884() { }
+    public void meth25885() { }
+    public void meth25886() { }
+    public void meth25887() { }
+    public void meth25888() { }
+    public void meth25889() { }
+    public void meth25890() { }
+    public void meth25891() { }
+    public void meth25892() { }
+    public void meth25893() { }
+    public void meth25894() { }
+    public void meth25895() { }
+    public void meth25896() { }
+    public void meth25897() { }
+    public void meth25898() { }
+    public void meth25899() { }
+    public void meth25900() { }
+    public void meth25901() { }
+    public void meth25902() { }
+    public void meth25903() { }
+    public void meth25904() { }
+    public void meth25905() { }
+    public void meth25906() { }
+    public void meth25907() { }
+    public void meth25908() { }
+    public void meth25909() { }
+    public void meth25910() { }
+    public void meth25911() { }
+    public void meth25912() { }
+    public void meth25913() { }
+    public void meth25914() { }
+    public void meth25915() { }
+    public void meth25916() { }
+    public void meth25917() { }
+    public void meth25918() { }
+    public void meth25919() { }
+    public void meth25920() { }
+    public void meth25921() { }
+    public void meth25922() { }
+    public void meth25923() { }
+    public void meth25924() { }
+    public void meth25925() { }
+    public void meth25926() { }
+    public void meth25927() { }
+    public void meth25928() { }
+    public void meth25929() { }
+    public void meth25930() { }
+    public void meth25931() { }
+    public void meth25932() { }
+    public void meth25933() { }
+    public void meth25934() { }
+    public void meth25935() { }
+    public void meth25936() { }
+    public void meth25937() { }
+    public void meth25938() { }
+    public void meth25939() { }
+    public void meth25940() { }
+    public void meth25941() { }
+    public void meth25942() { }
+    public void meth25943() { }
+    public void meth25944() { }
+    public void meth25945() { }
+    public void meth25946() { }
+    public void meth25947() { }
+    public void meth25948() { }
+    public void meth25949() { }
+    public void meth25950() { }
+    public void meth25951() { }
+    public void meth25952() { }
+    public void meth25953() { }
+    public void meth25954() { }
+    public void meth25955() { }
+    public void meth25956() { }
+    public void meth25957() { }
+    public void meth25958() { }
+    public void meth25959() { }
+    public void meth25960() { }
+    public void meth25961() { }
+    public void meth25962() { }
+    public void meth25963() { }
+    public void meth25964() { }
+    public void meth25965() { }
+    public void meth25966() { }
+    public void meth25967() { }
+    public void meth25968() { }
+    public void meth25969() { }
+    public void meth25970() { }
+    public void meth25971() { }
+    public void meth25972() { }
+    public void meth25973() { }
+    public void meth25974() { }
+    public void meth25975() { }
+    public void meth25976() { }
+    public void meth25977() { }
+    public void meth25978() { }
+    public void meth25979() { }
+    public void meth25980() { }
+    public void meth25981() { }
+    public void meth25982() { }
+    public void meth25983() { }
+    public void meth25984() { }
+    public void meth25985() { }
+    public void meth25986() { }
+    public void meth25987() { }
+    public void meth25988() { }
+    public void meth25989() { }
+    public void meth25990() { }
+    public void meth25991() { }
+    public void meth25992() { }
+    public void meth25993() { }
+    public void meth25994() { }
+    public void meth25995() { }
+    public void meth25996() { }
+    public void meth25997() { }
+    public void meth25998() { }
+    public void meth25999() { }
+    public void meth26000() { }
+    public void meth26001() { }
+    public void meth26002() { }
+    public void meth26003() { }
+    public void meth26004() { }
+    public void meth26005() { }
+    public void meth26006() { }
+    public void meth26007() { }
+    public void meth26008() { }
+    public void meth26009() { }
+    public void meth26010() { }
+    public void meth26011() { }
+    public void meth26012() { }
+    public void meth26013() { }
+    public void meth26014() { }
+    public void meth26015() { }
+    public void meth26016() { }
+    public void meth26017() { }
+    public void meth26018() { }
+    public void meth26019() { }
+    public void meth26020() { }
+    public void meth26021() { }
+    public void meth26022() { }
+    public void meth26023() { }
+    public void meth26024() { }
+    public void meth26025() { }
+    public void meth26026() { }
+    public void meth26027() { }
+    public void meth26028() { }
+    public void meth26029() { }
+    public void meth26030() { }
+    public void meth26031() { }
+    public void meth26032() { }
+    public void meth26033() { }
+    public void meth26034() { }
+    public void meth26035() { }
+    public void meth26036() { }
+    public void meth26037() { }
+    public void meth26038() { }
+    public void meth26039() { }
+    public void meth26040() { }
+    public void meth26041() { }
+    public void meth26042() { }
+    public void meth26043() { }
+    public void meth26044() { }
+    public void meth26045() { }
+    public void meth26046() { }
+    public void meth26047() { }
+    public void meth26048() { }
+    public void meth26049() { }
+    public void meth26050() { }
+    public void meth26051() { }
+    public void meth26052() { }
+    public void meth26053() { }
+    public void meth26054() { }
+    public void meth26055() { }
+    public void meth26056() { }
+    public void meth26057() { }
+    public void meth26058() { }
+    public void meth26059() { }
+    public void meth26060() { }
+    public void meth26061() { }
+    public void meth26062() { }
+    public void meth26063() { }
+    public void meth26064() { }
+    public void meth26065() { }
+    public void meth26066() { }
+    public void meth26067() { }
+    public void meth26068() { }
+    public void meth26069() { }
+    public void meth26070() { }
+    public void meth26071() { }
+    public void meth26072() { }
+    public void meth26073() { }
+    public void meth26074() { }
+    public void meth26075() { }
+    public void meth26076() { }
+    public void meth26077() { }
+    public void meth26078() { }
+    public void meth26079() { }
+    public void meth26080() { }
+    public void meth26081() { }
+    public void meth26082() { }
+    public void meth26083() { }
+    public void meth26084() { }
+    public void meth26085() { }
+    public void meth26086() { }
+    public void meth26087() { }
+    public void meth26088() { }
+    public void meth26089() { }
+    public void meth26090() { }
+    public void meth26091() { }
+    public void meth26092() { }
+    public void meth26093() { }
+    public void meth26094() { }
+    public void meth26095() { }
+    public void meth26096() { }
+    public void meth26097() { }
+    public void meth26098() { }
+    public void meth26099() { }
+    public void meth26100() { }
+    public void meth26101() { }
+    public void meth26102() { }
+    public void meth26103() { }
+    public void meth26104() { }
+    public void meth26105() { }
+    public void meth26106() { }
+    public void meth26107() { }
+    public void meth26108() { }
+    public void meth26109() { }
+    public void meth26110() { }
+    public void meth26111() { }
+    public void meth26112() { }
+    public void meth26113() { }
+    public void meth26114() { }
+    public void meth26115() { }
+    public void meth26116() { }
+    public void meth26117() { }
+    public void meth26118() { }
+    public void meth26119() { }
+    public void meth26120() { }
+    public void meth26121() { }
+    public void meth26122() { }
+    public void meth26123() { }
+    public void meth26124() { }
+    public void meth26125() { }
+    public void meth26126() { }
+    public void meth26127() { }
+    public void meth26128() { }
+    public void meth26129() { }
+    public void meth26130() { }
+    public void meth26131() { }
+    public void meth26132() { }
+    public void meth26133() { }
+    public void meth26134() { }
+    public void meth26135() { }
+    public void meth26136() { }
+    public void meth26137() { }
+    public void meth26138() { }
+    public void meth26139() { }
+    public void meth26140() { }
+    public void meth26141() { }
+    public void meth26142() { }
+    public void meth26143() { }
+    public void meth26144() { }
+    public void meth26145() { }
+    public void meth26146() { }
+    public void meth26147() { }
+    public void meth26148() { }
+    public void meth26149() { }
+    public void meth26150() { }
+    public void meth26151() { }
+    public void meth26152() { }
+    public void meth26153() { }
+    public void meth26154() { }
+    public void meth26155() { }
+    public void meth26156() { }
+    public void meth26157() { }
+    public void meth26158() { }
+    public void meth26159() { }
+    public void meth26160() { }
+    public void meth26161() { }
+    public void meth26162() { }
+    public void meth26163() { }
+    public void meth26164() { }
+    public void meth26165() { }
+    public void meth26166() { }
+    public void meth26167() { }
+    public void meth26168() { }
+    public void meth26169() { }
+    public void meth26170() { }
+    public void meth26171() { }
+    public void meth26172() { }
+    public void meth26173() { }
+    public void meth26174() { }
+    public void meth26175() { }
+    public void meth26176() { }
+    public void meth26177() { }
+    public void meth26178() { }
+    public void meth26179() { }
+    public void meth26180() { }
+    public void meth26181() { }
+    public void meth26182() { }
+    public void meth26183() { }
+    public void meth26184() { }
+    public void meth26185() { }
+    public void meth26186() { }
+    public void meth26187() { }
+    public void meth26188() { }
+    public void meth26189() { }
+    public void meth26190() { }
+    public void meth26191() { }
+    public void meth26192() { }
+    public void meth26193() { }
+    public void meth26194() { }
+    public void meth26195() { }
+    public void meth26196() { }
+    public void meth26197() { }
+    public void meth26198() { }
+    public void meth26199() { }
+    public void meth26200() { }
+    public void meth26201() { }
+    public void meth26202() { }
+    public void meth26203() { }
+    public void meth26204() { }
+    public void meth26205() { }
+    public void meth26206() { }
+    public void meth26207() { }
+    public void meth26208() { }
+    public void meth26209() { }
+    public void meth26210() { }
+    public void meth26211() { }
+    public void meth26212() { }
+    public void meth26213() { }
+    public void meth26214() { }
+    public void meth26215() { }
+    public void meth26216() { }
+    public void meth26217() { }
+    public void meth26218() { }
+    public void meth26219() { }
+    public void meth26220() { }
+    public void meth26221() { }
+    public void meth26222() { }
+    public void meth26223() { }
+    public void meth26224() { }
+    public void meth26225() { }
+    public void meth26226() { }
+    public void meth26227() { }
+    public void meth26228() { }
+    public void meth26229() { }
+    public void meth26230() { }
+    public void meth26231() { }
+    public void meth26232() { }
+    public void meth26233() { }
+    public void meth26234() { }
+    public void meth26235() { }
+    public void meth26236() { }
+    public void meth26237() { }
+    public void meth26238() { }
+    public void meth26239() { }
+    public void meth26240() { }
+    public void meth26241() { }
+    public void meth26242() { }
+    public void meth26243() { }
+    public void meth26244() { }
+    public void meth26245() { }
+    public void meth26246() { }
+    public void meth26247() { }
+    public void meth26248() { }
+    public void meth26249() { }
+    public void meth26250() { }
+    public void meth26251() { }
+    public void meth26252() { }
+    public void meth26253() { }
+    public void meth26254() { }
+    public void meth26255() { }
+    public void meth26256() { }
+    public void meth26257() { }
+    public void meth26258() { }
+    public void meth26259() { }
+    public void meth26260() { }
+    public void meth26261() { }
+    public void meth26262() { }
+    public void meth26263() { }
+    public void meth26264() { }
+    public void meth26265() { }
+    public void meth26266() { }
+    public void meth26267() { }
+    public void meth26268() { }
+    public void meth26269() { }
+    public void meth26270() { }
+    public void meth26271() { }
+    public void meth26272() { }
+    public void meth26273() { }
+    public void meth26274() { }
+    public void meth26275() { }
+    public void meth26276() { }
+    public void meth26277() { }
+    public void meth26278() { }
+    public void meth26279() { }
+    public void meth26280() { }
+    public void meth26281() { }
+    public void meth26282() { }
+    public void meth26283() { }
+    public void meth26284() { }
+    public void meth26285() { }
+    public void meth26286() { }
+    public void meth26287() { }
+    public void meth26288() { }
+    public void meth26289() { }
+    public void meth26290() { }
+    public void meth26291() { }
+    public void meth26292() { }
+    public void meth26293() { }
+    public void meth26294() { }
+    public void meth26295() { }
+    public void meth26296() { }
+    public void meth26297() { }
+    public void meth26298() { }
+    public void meth26299() { }
+    public void meth26300() { }
+    public void meth26301() { }
+    public void meth26302() { }
+    public void meth26303() { }
+    public void meth26304() { }
+    public void meth26305() { }
+    public void meth26306() { }
+    public void meth26307() { }
+    public void meth26308() { }
+    public void meth26309() { }
+    public void meth26310() { }
+    public void meth26311() { }
+    public void meth26312() { }
+    public void meth26313() { }
+    public void meth26314() { }
+    public void meth26315() { }
+    public void meth26316() { }
+    public void meth26317() { }
+    public void meth26318() { }
+    public void meth26319() { }
+    public void meth26320() { }
+    public void meth26321() { }
+    public void meth26322() { }
+    public void meth26323() { }
+    public void meth26324() { }
+    public void meth26325() { }
+    public void meth26326() { }
+    public void meth26327() { }
+    public void meth26328() { }
+    public void meth26329() { }
+    public void meth26330() { }
+    public void meth26331() { }
+    public void meth26332() { }
+    public void meth26333() { }
+    public void meth26334() { }
+    public void meth26335() { }
+    public void meth26336() { }
+    public void meth26337() { }
+    public void meth26338() { }
+    public void meth26339() { }
+    public void meth26340() { }
+    public void meth26341() { }
+    public void meth26342() { }
+    public void meth26343() { }
+    public void meth26344() { }
+    public void meth26345() { }
+    public void meth26346() { }
+    public void meth26347() { }
+    public void meth26348() { }
+    public void meth26349() { }
+    public void meth26350() { }
+    public void meth26351() { }
+    public void meth26352() { }
+    public void meth26353() { }
+    public void meth26354() { }
+    public void meth26355() { }
+    public void meth26356() { }
+    public void meth26357() { }
+    public void meth26358() { }
+    public void meth26359() { }
+    public void meth26360() { }
+    public void meth26361() { }
+    public void meth26362() { }
+    public void meth26363() { }
+    public void meth26364() { }
+    public void meth26365() { }
+    public void meth26366() { }
+    public void meth26367() { }
+    public void meth26368() { }
+    public void meth26369() { }
+    public void meth26370() { }
+    public void meth26371() { }
+    public void meth26372() { }
+    public void meth26373() { }
+    public void meth26374() { }
+    public void meth26375() { }
+    public void meth26376() { }
+    public void meth26377() { }
+    public void meth26378() { }
+    public void meth26379() { }
+    public void meth26380() { }
+    public void meth26381() { }
+    public void meth26382() { }
+    public void meth26383() { }
+    public void meth26384() { }
+    public void meth26385() { }
+    public void meth26386() { }
+    public void meth26387() { }
+    public void meth26388() { }
+    public void meth26389() { }
+    public void meth26390() { }
+    public void meth26391() { }
+    public void meth26392() { }
+    public void meth26393() { }
+    public void meth26394() { }
+    public void meth26395() { }
+    public void meth26396() { }
+    public void meth26397() { }
+    public void meth26398() { }
+    public void meth26399() { }
+    public void meth26400() { }
+    public void meth26401() { }
+    public void meth26402() { }
+    public void meth26403() { }
+    public void meth26404() { }
+    public void meth26405() { }
+    public void meth26406() { }
+    public void meth26407() { }
+    public void meth26408() { }
+    public void meth26409() { }
+    public void meth26410() { }
+    public void meth26411() { }
+    public void meth26412() { }
+    public void meth26413() { }
+    public void meth26414() { }
+    public void meth26415() { }
+    public void meth26416() { }
+    public void meth26417() { }
+    public void meth26418() { }
+    public void meth26419() { }
+    public void meth26420() { }
+    public void meth26421() { }
+    public void meth26422() { }
+    public void meth26423() { }
+    public void meth26424() { }
+    public void meth26425() { }
+    public void meth26426() { }
+    public void meth26427() { }
+    public void meth26428() { }
+    public void meth26429() { }
+    public void meth26430() { }
+    public void meth26431() { }
+    public void meth26432() { }
+    public void meth26433() { }
+    public void meth26434() { }
+    public void meth26435() { }
+    public void meth26436() { }
+    public void meth26437() { }
+    public void meth26438() { }
+    public void meth26439() { }
+    public void meth26440() { }
+    public void meth26441() { }
+    public void meth26442() { }
+    public void meth26443() { }
+    public void meth26444() { }
+    public void meth26445() { }
+    public void meth26446() { }
+    public void meth26447() { }
+    public void meth26448() { }
+    public void meth26449() { }
+    public void meth26450() { }
+    public void meth26451() { }
+    public void meth26452() { }
+    public void meth26453() { }
+    public void meth26454() { }
+    public void meth26455() { }
+    public void meth26456() { }
+    public void meth26457() { }
+    public void meth26458() { }
+    public void meth26459() { }
+    public void meth26460() { }
+    public void meth26461() { }
+    public void meth26462() { }
+    public void meth26463() { }
+    public void meth26464() { }
+    public void meth26465() { }
+    public void meth26466() { }
+    public void meth26467() { }
+    public void meth26468() { }
+    public void meth26469() { }
+    public void meth26470() { }
+    public void meth26471() { }
+    public void meth26472() { }
+    public void meth26473() { }
+    public void meth26474() { }
+    public void meth26475() { }
+    public void meth26476() { }
+    public void meth26477() { }
+    public void meth26478() { }
+    public void meth26479() { }
+    public void meth26480() { }
+    public void meth26481() { }
+    public void meth26482() { }
+    public void meth26483() { }
+    public void meth26484() { }
+    public void meth26485() { }
+    public void meth26486() { }
+    public void meth26487() { }
+    public void meth26488() { }
+    public void meth26489() { }
+    public void meth26490() { }
+    public void meth26491() { }
+    public void meth26492() { }
+    public void meth26493() { }
+    public void meth26494() { }
+    public void meth26495() { }
+    public void meth26496() { }
+    public void meth26497() { }
+    public void meth26498() { }
+    public void meth26499() { }
+    public void meth26500() { }
+    public void meth26501() { }
+    public void meth26502() { }
+    public void meth26503() { }
+    public void meth26504() { }
+    public void meth26505() { }
+    public void meth26506() { }
+    public void meth26507() { }
+    public void meth26508() { }
+    public void meth26509() { }
+    public void meth26510() { }
+    public void meth26511() { }
+    public void meth26512() { }
+    public void meth26513() { }
+    public void meth26514() { }
+    public void meth26515() { }
+    public void meth26516() { }
+    public void meth26517() { }
+    public void meth26518() { }
+    public void meth26519() { }
+    public void meth26520() { }
+    public void meth26521() { }
+    public void meth26522() { }
+    public void meth26523() { }
+    public void meth26524() { }
+    public void meth26525() { }
+    public void meth26526() { }
+    public void meth26527() { }
+    public void meth26528() { }
+    public void meth26529() { }
+    public void meth26530() { }
+    public void meth26531() { }
+    public void meth26532() { }
+    public void meth26533() { }
+    public void meth26534() { }
+    public void meth26535() { }
+    public void meth26536() { }
+    public void meth26537() { }
+    public void meth26538() { }
+    public void meth26539() { }
+    public void meth26540() { }
+    public void meth26541() { }
+    public void meth26542() { }
+    public void meth26543() { }
+    public void meth26544() { }
+    public void meth26545() { }
+    public void meth26546() { }
+    public void meth26547() { }
+    public void meth26548() { }
+    public void meth26549() { }
+    public void meth26550() { }
+    public void meth26551() { }
+    public void meth26552() { }
+    public void meth26553() { }
+    public void meth26554() { }
+    public void meth26555() { }
+    public void meth26556() { }
+    public void meth26557() { }
+    public void meth26558() { }
+    public void meth26559() { }
+    public void meth26560() { }
+    public void meth26561() { }
+    public void meth26562() { }
+    public void meth26563() { }
+    public void meth26564() { }
+    public void meth26565() { }
+    public void meth26566() { }
+    public void meth26567() { }
+    public void meth26568() { }
+    public void meth26569() { }
+    public void meth26570() { }
+    public void meth26571() { }
+    public void meth26572() { }
+    public void meth26573() { }
+    public void meth26574() { }
+    public void meth26575() { }
+    public void meth26576() { }
+    public void meth26577() { }
+    public void meth26578() { }
+    public void meth26579() { }
+    public void meth26580() { }
+    public void meth26581() { }
+    public void meth26582() { }
+    public void meth26583() { }
+    public void meth26584() { }
+    public void meth26585() { }
+    public void meth26586() { }
+    public void meth26587() { }
+    public void meth26588() { }
+    public void meth26589() { }
+    public void meth26590() { }
+    public void meth26591() { }
+    public void meth26592() { }
+    public void meth26593() { }
+    public void meth26594() { }
+    public void meth26595() { }
+    public void meth26596() { }
+    public void meth26597() { }
+    public void meth26598() { }
+    public void meth26599() { }
+    public void meth26600() { }
+    public void meth26601() { }
+    public void meth26602() { }
+    public void meth26603() { }
+    public void meth26604() { }
+    public void meth26605() { }
+    public void meth26606() { }
+    public void meth26607() { }
+    public void meth26608() { }
+    public void meth26609() { }
+    public void meth26610() { }
+    public void meth26611() { }
+    public void meth26612() { }
+    public void meth26613() { }
+    public void meth26614() { }
+    public void meth26615() { }
+    public void meth26616() { }
+    public void meth26617() { }
+    public void meth26618() { }
+    public void meth26619() { }
+    public void meth26620() { }
+    public void meth26621() { }
+    public void meth26622() { }
+    public void meth26623() { }
+    public void meth26624() { }
+    public void meth26625() { }
+    public void meth26626() { }
+    public void meth26627() { }
+    public void meth26628() { }
+    public void meth26629() { }
+    public void meth26630() { }
+    public void meth26631() { }
+    public void meth26632() { }
+    public void meth26633() { }
+    public void meth26634() { }
+    public void meth26635() { }
+    public void meth26636() { }
+    public void meth26637() { }
+    public void meth26638() { }
+    public void meth26639() { }
+    public void meth26640() { }
+    public void meth26641() { }
+    public void meth26642() { }
+    public void meth26643() { }
+    public void meth26644() { }
+    public void meth26645() { }
+    public void meth26646() { }
+    public void meth26647() { }
+    public void meth26648() { }
+    public void meth26649() { }
+    public void meth26650() { }
+    public void meth26651() { }
+    public void meth26652() { }
+    public void meth26653() { }
+    public void meth26654() { }
+    public void meth26655() { }
+    public void meth26656() { }
+    public void meth26657() { }
+    public void meth26658() { }
+    public void meth26659() { }
+    public void meth26660() { }
+    public void meth26661() { }
+    public void meth26662() { }
+    public void meth26663() { }
+    public void meth26664() { }
+    public void meth26665() { }
+    public void meth26666() { }
+    public void meth26667() { }
+    public void meth26668() { }
+    public void meth26669() { }
+    public void meth26670() { }
+    public void meth26671() { }
+    public void meth26672() { }
+    public void meth26673() { }
+    public void meth26674() { }
+    public void meth26675() { }
+    public void meth26676() { }
+    public void meth26677() { }
+    public void meth26678() { }
+    public void meth26679() { }
+    public void meth26680() { }
+    public void meth26681() { }
+    public void meth26682() { }
+    public void meth26683() { }
+    public void meth26684() { }
+    public void meth26685() { }
+    public void meth26686() { }
+    public void meth26687() { }
+    public void meth26688() { }
+    public void meth26689() { }
+    public void meth26690() { }
+    public void meth26691() { }
+    public void meth26692() { }
+    public void meth26693() { }
+    public void meth26694() { }
+    public void meth26695() { }
+    public void meth26696() { }
+    public void meth26697() { }
+    public void meth26698() { }
+    public void meth26699() { }
+    public void meth26700() { }
+    public void meth26701() { }
+    public void meth26702() { }
+    public void meth26703() { }
+    public void meth26704() { }
+    public void meth26705() { }
+    public void meth26706() { }
+    public void meth26707() { }
+    public void meth26708() { }
+    public void meth26709() { }
+    public void meth26710() { }
+    public void meth26711() { }
+    public void meth26712() { }
+    public void meth26713() { }
+    public void meth26714() { }
+    public void meth26715() { }
+    public void meth26716() { }
+    public void meth26717() { }
+    public void meth26718() { }
+    public void meth26719() { }
+    public void meth26720() { }
+    public void meth26721() { }
+    public void meth26722() { }
+    public void meth26723() { }
+    public void meth26724() { }
+    public void meth26725() { }
+    public void meth26726() { }
+    public void meth26727() { }
+    public void meth26728() { }
+    public void meth26729() { }
+    public void meth26730() { }
+    public void meth26731() { }
+    public void meth26732() { }
+    public void meth26733() { }
+    public void meth26734() { }
+    public void meth26735() { }
+    public void meth26736() { }
+    public void meth26737() { }
+    public void meth26738() { }
+    public void meth26739() { }
+    public void meth26740() { }
+    public void meth26741() { }
+    public void meth26742() { }
+    public void meth26743() { }
+    public void meth26744() { }
+    public void meth26745() { }
+    public void meth26746() { }
+    public void meth26747() { }
+    public void meth26748() { }
+    public void meth26749() { }
+    public void meth26750() { }
+    public void meth26751() { }
+    public void meth26752() { }
+    public void meth26753() { }
+    public void meth26754() { }
+    public void meth26755() { }
+    public void meth26756() { }
+    public void meth26757() { }
+    public void meth26758() { }
+    public void meth26759() { }
+    public void meth26760() { }
+    public void meth26761() { }
+    public void meth26762() { }
+    public void meth26763() { }
+    public void meth26764() { }
+    public void meth26765() { }
+    public void meth26766() { }
+    public void meth26767() { }
+    public void meth26768() { }
+    public void meth26769() { }
+    public void meth26770() { }
+    public void meth26771() { }
+    public void meth26772() { }
+    public void meth26773() { }
+    public void meth26774() { }
+    public void meth26775() { }
+    public void meth26776() { }
+    public void meth26777() { }
+    public void meth26778() { }
+    public void meth26779() { }
+    public void meth26780() { }
+    public void meth26781() { }
+    public void meth26782() { }
+    public void meth26783() { }
+    public void meth26784() { }
+    public void meth26785() { }
+    public void meth26786() { }
+    public void meth26787() { }
+    public void meth26788() { }
+    public void meth26789() { }
+    public void meth26790() { }
+    public void meth26791() { }
+    public void meth26792() { }
+    public void meth26793() { }
+    public void meth26794() { }
+    public void meth26795() { }
+    public void meth26796() { }
+    public void meth26797() { }
+    public void meth26798() { }
+    public void meth26799() { }
+    public void meth26800() { }
+    public void meth26801() { }
+    public void meth26802() { }
+    public void meth26803() { }
+    public void meth26804() { }
+    public void meth26805() { }
+    public void meth26806() { }
+    public void meth26807() { }
+    public void meth26808() { }
+    public void meth26809() { }
+    public void meth26810() { }
+    public void meth26811() { }
+    public void meth26812() { }
+    public void meth26813() { }
+    public void meth26814() { }
+    public void meth26815() { }
+    public void meth26816() { }
+    public void meth26817() { }
+    public void meth26818() { }
+    public void meth26819() { }
+    public void meth26820() { }
+    public void meth26821() { }
+    public void meth26822() { }
+    public void meth26823() { }
+    public void meth26824() { }
+    public void meth26825() { }
+    public void meth26826() { }
+    public void meth26827() { }
+    public void meth26828() { }
+    public void meth26829() { }
+    public void meth26830() { }
+    public void meth26831() { }
+    public void meth26832() { }
+    public void meth26833() { }
+    public void meth26834() { }
+    public void meth26835() { }
+    public void meth26836() { }
+    public void meth26837() { }
+    public void meth26838() { }
+    public void meth26839() { }
+    public void meth26840() { }
+    public void meth26841() { }
+    public void meth26842() { }
+    public void meth26843() { }
+    public void meth26844() { }
+    public void meth26845() { }
+    public void meth26846() { }
+    public void meth26847() { }
+    public void meth26848() { }
+    public void meth26849() { }
+    public void meth26850() { }
+    public void meth26851() { }
+    public void meth26852() { }
+    public void meth26853() { }
+    public void meth26854() { }
+    public void meth26855() { }
+    public void meth26856() { }
+    public void meth26857() { }
+    public void meth26858() { }
+    public void meth26859() { }
+    public void meth26860() { }
+    public void meth26861() { }
+    public void meth26862() { }
+    public void meth26863() { }
+    public void meth26864() { }
+    public void meth26865() { }
+    public void meth26866() { }
+    public void meth26867() { }
+    public void meth26868() { }
+    public void meth26869() { }
+    public void meth26870() { }
+    public void meth26871() { }
+    public void meth26872() { }
+    public void meth26873() { }
+    public void meth26874() { }
+    public void meth26875() { }
+    public void meth26876() { }
+    public void meth26877() { }
+    public void meth26878() { }
+    public void meth26879() { }
+    public void meth26880() { }
+    public void meth26881() { }
+    public void meth26882() { }
+    public void meth26883() { }
+    public void meth26884() { }
+    public void meth26885() { }
+    public void meth26886() { }
+    public void meth26887() { }
+    public void meth26888() { }
+    public void meth26889() { }
+    public void meth26890() { }
+    public void meth26891() { }
+    public void meth26892() { }
+    public void meth26893() { }
+    public void meth26894() { }
+    public void meth26895() { }
+    public void meth26896() { }
+    public void meth26897() { }
+    public void meth26898() { }
+    public void meth26899() { }
+    public void meth26900() { }
+    public void meth26901() { }
+    public void meth26902() { }
+    public void meth26903() { }
+    public void meth26904() { }
+    public void meth26905() { }
+    public void meth26906() { }
+    public void meth26907() { }
+    public void meth26908() { }
+    public void meth26909() { }
+    public void meth26910() { }
+    public void meth26911() { }
+    public void meth26912() { }
+    public void meth26913() { }
+    public void meth26914() { }
+    public void meth26915() { }
+    public void meth26916() { }
+    public void meth26917() { }
+    public void meth26918() { }
+    public void meth26919() { }
+    public void meth26920() { }
+    public void meth26921() { }
+    public void meth26922() { }
+    public void meth26923() { }
+    public void meth26924() { }
+    public void meth26925() { }
+    public void meth26926() { }
+    public void meth26927() { }
+    public void meth26928() { }
+    public void meth26929() { }
+    public void meth26930() { }
+    public void meth26931() { }
+    public void meth26932() { }
+    public void meth26933() { }
+    public void meth26934() { }
+    public void meth26935() { }
+    public void meth26936() { }
+    public void meth26937() { }
+    public void meth26938() { }
+    public void meth26939() { }
+    public void meth26940() { }
+    public void meth26941() { }
+    public void meth26942() { }
+    public void meth26943() { }
+    public void meth26944() { }
+    public void meth26945() { }
+    public void meth26946() { }
+    public void meth26947() { }
+    public void meth26948() { }
+    public void meth26949() { }
+    public void meth26950() { }
+    public void meth26951() { }
+    public void meth26952() { }
+    public void meth26953() { }
+    public void meth26954() { }
+    public void meth26955() { }
+    public void meth26956() { }
+    public void meth26957() { }
+    public void meth26958() { }
+    public void meth26959() { }
+    public void meth26960() { }
+    public void meth26961() { }
+    public void meth26962() { }
+    public void meth26963() { }
+    public void meth26964() { }
+    public void meth26965() { }
+    public void meth26966() { }
+    public void meth26967() { }
+    public void meth26968() { }
+    public void meth26969() { }
+    public void meth26970() { }
+    public void meth26971() { }
+    public void meth26972() { }
+    public void meth26973() { }
+    public void meth26974() { }
+    public void meth26975() { }
+    public void meth26976() { }
+    public void meth26977() { }
+    public void meth26978() { }
+    public void meth26979() { }
+    public void meth26980() { }
+    public void meth26981() { }
+    public void meth26982() { }
+    public void meth26983() { }
+    public void meth26984() { }
+    public void meth26985() { }
+    public void meth26986() { }
+    public void meth26987() { }
+    public void meth26988() { }
+    public void meth26989() { }
+    public void meth26990() { }
+    public void meth26991() { }
+    public void meth26992() { }
+    public void meth26993() { }
+    public void meth26994() { }
+    public void meth26995() { }
+    public void meth26996() { }
+    public void meth26997() { }
+    public void meth26998() { }
+    public void meth26999() { }
+    public void meth27000() { }
+    public void meth27001() { }
+    public void meth27002() { }
+    public void meth27003() { }
+    public void meth27004() { }
+    public void meth27005() { }
+    public void meth27006() { }
+    public void meth27007() { }
+    public void meth27008() { }
+    public void meth27009() { }
+    public void meth27010() { }
+    public void meth27011() { }
+    public void meth27012() { }
+    public void meth27013() { }
+    public void meth27014() { }
+    public void meth27015() { }
+    public void meth27016() { }
+    public void meth27017() { }
+    public void meth27018() { }
+    public void meth27019() { }
+    public void meth27020() { }
+    public void meth27021() { }
+    public void meth27022() { }
+    public void meth27023() { }
+    public void meth27024() { }
+    public void meth27025() { }
+    public void meth27026() { }
+    public void meth27027() { }
+    public void meth27028() { }
+    public void meth27029() { }
+    public void meth27030() { }
+    public void meth27031() { }
+    public void meth27032() { }
+    public void meth27033() { }
+    public void meth27034() { }
+    public void meth27035() { }
+    public void meth27036() { }
+    public void meth27037() { }
+    public void meth27038() { }
+    public void meth27039() { }
+    public void meth27040() { }
+    public void meth27041() { }
+    public void meth27042() { }
+    public void meth27043() { }
+    public void meth27044() { }
+    public void meth27045() { }
+    public void meth27046() { }
+    public void meth27047() { }
+    public void meth27048() { }
+    public void meth27049() { }
+    public void meth27050() { }
+    public void meth27051() { }
+    public void meth27052() { }
+    public void meth27053() { }
+    public void meth27054() { }
+    public void meth27055() { }
+    public void meth27056() { }
+    public void meth27057() { }
+    public void meth27058() { }
+    public void meth27059() { }
+    public void meth27060() { }
+    public void meth27061() { }
+    public void meth27062() { }
+    public void meth27063() { }
+    public void meth27064() { }
+    public void meth27065() { }
+    public void meth27066() { }
+    public void meth27067() { }
+    public void meth27068() { }
+    public void meth27069() { }
+    public void meth27070() { }
+    public void meth27071() { }
+    public void meth27072() { }
+    public void meth27073() { }
+    public void meth27074() { }
+    public void meth27075() { }
+    public void meth27076() { }
+    public void meth27077() { }
+    public void meth27078() { }
+    public void meth27079() { }
+    public void meth27080() { }
+    public void meth27081() { }
+    public void meth27082() { }
+    public void meth27083() { }
+    public void meth27084() { }
+    public void meth27085() { }
+    public void meth27086() { }
+    public void meth27087() { }
+    public void meth27088() { }
+    public void meth27089() { }
+    public void meth27090() { }
+    public void meth27091() { }
+    public void meth27092() { }
+    public void meth27093() { }
+    public void meth27094() { }
+    public void meth27095() { }
+    public void meth27096() { }
+    public void meth27097() { }
+    public void meth27098() { }
+    public void meth27099() { }
+    public void meth27100() { }
+    public void meth27101() { }
+    public void meth27102() { }
+    public void meth27103() { }
+    public void meth27104() { }
+    public void meth27105() { }
+    public void meth27106() { }
+    public void meth27107() { }
+    public void meth27108() { }
+    public void meth27109() { }
+    public void meth27110() { }
+    public void meth27111() { }
+    public void meth27112() { }
+    public void meth27113() { }
+    public void meth27114() { }
+    public void meth27115() { }
+    public void meth27116() { }
+    public void meth27117() { }
+    public void meth27118() { }
+    public void meth27119() { }
+    public void meth27120() { }
+    public void meth27121() { }
+    public void meth27122() { }
+    public void meth27123() { }
+    public void meth27124() { }
+    public void meth27125() { }
+    public void meth27126() { }
+    public void meth27127() { }
+    public void meth27128() { }
+    public void meth27129() { }
+    public void meth27130() { }
+    public void meth27131() { }
+    public void meth27132() { }
+    public void meth27133() { }
+    public void meth27134() { }
+    public void meth27135() { }
+    public void meth27136() { }
+    public void meth27137() { }
+    public void meth27138() { }
+    public void meth27139() { }
+    public void meth27140() { }
+    public void meth27141() { }
+    public void meth27142() { }
+    public void meth27143() { }
+    public void meth27144() { }
+    public void meth27145() { }
+    public void meth27146() { }
+    public void meth27147() { }
+    public void meth27148() { }
+    public void meth27149() { }
+    public void meth27150() { }
+    public void meth27151() { }
+    public void meth27152() { }
+    public void meth27153() { }
+    public void meth27154() { }
+    public void meth27155() { }
+    public void meth27156() { }
+    public void meth27157() { }
+    public void meth27158() { }
+    public void meth27159() { }
+    public void meth27160() { }
+    public void meth27161() { }
+    public void meth27162() { }
+    public void meth27163() { }
+    public void meth27164() { }
+    public void meth27165() { }
+    public void meth27166() { }
+    public void meth27167() { }
+    public void meth27168() { }
+    public void meth27169() { }
+    public void meth27170() { }
+    public void meth27171() { }
+    public void meth27172() { }
+    public void meth27173() { }
+    public void meth27174() { }
+    public void meth27175() { }
+    public void meth27176() { }
+    public void meth27177() { }
+    public void meth27178() { }
+    public void meth27179() { }
+    public void meth27180() { }
+    public void meth27181() { }
+    public void meth27182() { }
+    public void meth27183() { }
+    public void meth27184() { }
+    public void meth27185() { }
+    public void meth27186() { }
+    public void meth27187() { }
+    public void meth27188() { }
+    public void meth27189() { }
+    public void meth27190() { }
+    public void meth27191() { }
+    public void meth27192() { }
+    public void meth27193() { }
+    public void meth27194() { }
+    public void meth27195() { }
+    public void meth27196() { }
+    public void meth27197() { }
+    public void meth27198() { }
+    public void meth27199() { }
+    public void meth27200() { }
+    public void meth27201() { }
+    public void meth27202() { }
+    public void meth27203() { }
+    public void meth27204() { }
+    public void meth27205() { }
+    public void meth27206() { }
+    public void meth27207() { }
+    public void meth27208() { }
+    public void meth27209() { }
+    public void meth27210() { }
+    public void meth27211() { }
+    public void meth27212() { }
+    public void meth27213() { }
+    public void meth27214() { }
+    public void meth27215() { }
+    public void meth27216() { }
+    public void meth27217() { }
+    public void meth27218() { }
+    public void meth27219() { }
+    public void meth27220() { }
+    public void meth27221() { }
+    public void meth27222() { }
+    public void meth27223() { }
+    public void meth27224() { }
+    public void meth27225() { }
+    public void meth27226() { }
+    public void meth27227() { }
+    public void meth27228() { }
+    public void meth27229() { }
+    public void meth27230() { }
+    public void meth27231() { }
+    public void meth27232() { }
+    public void meth27233() { }
+    public void meth27234() { }
+    public void meth27235() { }
+    public void meth27236() { }
+    public void meth27237() { }
+    public void meth27238() { }
+    public void meth27239() { }
+    public void meth27240() { }
+    public void meth27241() { }
+    public void meth27242() { }
+    public void meth27243() { }
+    public void meth27244() { }
+    public void meth27245() { }
+    public void meth27246() { }
+    public void meth27247() { }
+    public void meth27248() { }
+    public void meth27249() { }
+    public void meth27250() { }
+    public void meth27251() { }
+    public void meth27252() { }
+    public void meth27253() { }
+    public void meth27254() { }
+    public void meth27255() { }
+    public void meth27256() { }
+    public void meth27257() { }
+    public void meth27258() { }
+    public void meth27259() { }
+    public void meth27260() { }
+    public void meth27261() { }
+    public void meth27262() { }
+    public void meth27263() { }
+    public void meth27264() { }
+    public void meth27265() { }
+    public void meth27266() { }
+    public void meth27267() { }
+    public void meth27268() { }
+    public void meth27269() { }
+    public void meth27270() { }
+    public void meth27271() { }
+    public void meth27272() { }
+    public void meth27273() { }
+    public void meth27274() { }
+    public void meth27275() { }
+    public void meth27276() { }
+    public void meth27277() { }
+    public void meth27278() { }
+    public void meth27279() { }
+    public void meth27280() { }
+    public void meth27281() { }
+    public void meth27282() { }
+    public void meth27283() { }
+    public void meth27284() { }
+    public void meth27285() { }
+    public void meth27286() { }
+    public void meth27287() { }
+    public void meth27288() { }
+    public void meth27289() { }
+    public void meth27290() { }
+    public void meth27291() { }
+    public void meth27292() { }
+    public void meth27293() { }
+    public void meth27294() { }
+    public void meth27295() { }
+    public void meth27296() { }
+    public void meth27297() { }
+    public void meth27298() { }
+    public void meth27299() { }
+    public void meth27300() { }
+    public void meth27301() { }
+    public void meth27302() { }
+    public void meth27303() { }
+    public void meth27304() { }
+    public void meth27305() { }
+    public void meth27306() { }
+    public void meth27307() { }
+    public void meth27308() { }
+    public void meth27309() { }
+    public void meth27310() { }
+    public void meth27311() { }
+    public void meth27312() { }
+    public void meth27313() { }
+    public void meth27314() { }
+    public void meth27315() { }
+    public void meth27316() { }
+    public void meth27317() { }
+    public void meth27318() { }
+    public void meth27319() { }
+    public void meth27320() { }
+    public void meth27321() { }
+    public void meth27322() { }
+    public void meth27323() { }
+    public void meth27324() { }
+    public void meth27325() { }
+    public void meth27326() { }
+    public void meth27327() { }
+    public void meth27328() { }
+    public void meth27329() { }
+    public void meth27330() { }
+    public void meth27331() { }
+    public void meth27332() { }
+    public void meth27333() { }
+    public void meth27334() { }
+    public void meth27335() { }
+    public void meth27336() { }
+    public void meth27337() { }
+    public void meth27338() { }
+    public void meth27339() { }
+    public void meth27340() { }
+    public void meth27341() { }
+    public void meth27342() { }
+    public void meth27343() { }
+    public void meth27344() { }
+    public void meth27345() { }
+    public void meth27346() { }
+    public void meth27347() { }
+    public void meth27348() { }
+    public void meth27349() { }
+    public void meth27350() { }
+    public void meth27351() { }
+    public void meth27352() { }
+    public void meth27353() { }
+    public void meth27354() { }
+    public void meth27355() { }
+    public void meth27356() { }
+    public void meth27357() { }
+    public void meth27358() { }
+    public void meth27359() { }
+    public void meth27360() { }
+    public void meth27361() { }
+    public void meth27362() { }
+    public void meth27363() { }
+    public void meth27364() { }
+    public void meth27365() { }
+    public void meth27366() { }
+    public void meth27367() { }
+    public void meth27368() { }
+    public void meth27369() { }
+    public void meth27370() { }
+    public void meth27371() { }
+    public void meth27372() { }
+    public void meth27373() { }
+    public void meth27374() { }
+    public void meth27375() { }
+    public void meth27376() { }
+    public void meth27377() { }
+    public void meth27378() { }
+    public void meth27379() { }
+    public void meth27380() { }
+    public void meth27381() { }
+    public void meth27382() { }
+    public void meth27383() { }
+    public void meth27384() { }
+    public void meth27385() { }
+    public void meth27386() { }
+    public void meth27387() { }
+    public void meth27388() { }
+    public void meth27389() { }
+    public void meth27390() { }
+    public void meth27391() { }
+    public void meth27392() { }
+    public void meth27393() { }
+    public void meth27394() { }
+    public void meth27395() { }
+    public void meth27396() { }
+    public void meth27397() { }
+    public void meth27398() { }
+    public void meth27399() { }
+    public void meth27400() { }
+    public void meth27401() { }
+    public void meth27402() { }
+    public void meth27403() { }
+    public void meth27404() { }
+    public void meth27405() { }
+    public void meth27406() { }
+    public void meth27407() { }
+    public void meth27408() { }
+    public void meth27409() { }
+    public void meth27410() { }
+    public void meth27411() { }
+    public void meth27412() { }
+    public void meth27413() { }
+    public void meth27414() { }
+    public void meth27415() { }
+    public void meth27416() { }
+    public void meth27417() { }
+    public void meth27418() { }
+    public void meth27419() { }
+    public void meth27420() { }
+    public void meth27421() { }
+    public void meth27422() { }
+    public void meth27423() { }
+    public void meth27424() { }
+    public void meth27425() { }
+    public void meth27426() { }
+    public void meth27427() { }
+    public void meth27428() { }
+    public void meth27429() { }
+    public void meth27430() { }
+    public void meth27431() { }
+    public void meth27432() { }
+    public void meth27433() { }
+    public void meth27434() { }
+    public void meth27435() { }
+    public void meth27436() { }
+    public void meth27437() { }
+    public void meth27438() { }
+    public void meth27439() { }
+    public void meth27440() { }
+    public void meth27441() { }
+    public void meth27442() { }
+    public void meth27443() { }
+    public void meth27444() { }
+    public void meth27445() { }
+    public void meth27446() { }
+    public void meth27447() { }
+    public void meth27448() { }
+    public void meth27449() { }
+    public void meth27450() { }
+    public void meth27451() { }
+    public void meth27452() { }
+    public void meth27453() { }
+    public void meth27454() { }
+    public void meth27455() { }
+    public void meth27456() { }
+    public void meth27457() { }
+    public void meth27458() { }
+    public void meth27459() { }
+    public void meth27460() { }
+    public void meth27461() { }
+    public void meth27462() { }
+    public void meth27463() { }
+    public void meth27464() { }
+    public void meth27465() { }
+    public void meth27466() { }
+    public void meth27467() { }
+    public void meth27468() { }
+    public void meth27469() { }
+    public void meth27470() { }
+    public void meth27471() { }
+    public void meth27472() { }
+    public void meth27473() { }
+    public void meth27474() { }
+    public void meth27475() { }
+    public void meth27476() { }
+    public void meth27477() { }
+    public void meth27478() { }
+    public void meth27479() { }
+    public void meth27480() { }
+    public void meth27481() { }
+    public void meth27482() { }
+    public void meth27483() { }
+    public void meth27484() { }
+    public void meth27485() { }
+    public void meth27486() { }
+    public void meth27487() { }
+    public void meth27488() { }
+    public void meth27489() { }
+    public void meth27490() { }
+    public void meth27491() { }
+    public void meth27492() { }
+    public void meth27493() { }
+    public void meth27494() { }
+    public void meth27495() { }
+    public void meth27496() { }
+    public void meth27497() { }
+    public void meth27498() { }
+    public void meth27499() { }
+    public void meth27500() { }
+    public void meth27501() { }
+    public void meth27502() { }
+    public void meth27503() { }
+    public void meth27504() { }
+    public void meth27505() { }
+    public void meth27506() { }
+    public void meth27507() { }
+    public void meth27508() { }
+    public void meth27509() { }
+    public void meth27510() { }
+    public void meth27511() { }
+    public void meth27512() { }
+    public void meth27513() { }
+    public void meth27514() { }
+    public void meth27515() { }
+    public void meth27516() { }
+    public void meth27517() { }
+    public void meth27518() { }
+    public void meth27519() { }
+    public void meth27520() { }
+    public void meth27521() { }
+    public void meth27522() { }
+    public void meth27523() { }
+    public void meth27524() { }
+    public void meth27525() { }
+    public void meth27526() { }
+    public void meth27527() { }
+    public void meth27528() { }
+    public void meth27529() { }
+    public void meth27530() { }
+    public void meth27531() { }
+    public void meth27532() { }
+    public void meth27533() { }
+    public void meth27534() { }
+    public void meth27535() { }
+    public void meth27536() { }
+    public void meth27537() { }
+    public void meth27538() { }
+    public void meth27539() { }
+    public void meth27540() { }
+    public void meth27541() { }
+    public void meth27542() { }
+    public void meth27543() { }
+    public void meth27544() { }
+    public void meth27545() { }
+    public void meth27546() { }
+    public void meth27547() { }
+    public void meth27548() { }
+    public void meth27549() { }
+    public void meth27550() { }
+    public void meth27551() { }
+    public void meth27552() { }
+    public void meth27553() { }
+    public void meth27554() { }
+    public void meth27555() { }
+    public void meth27556() { }
+    public void meth27557() { }
+    public void meth27558() { }
+    public void meth27559() { }
+    public void meth27560() { }
+    public void meth27561() { }
+    public void meth27562() { }
+    public void meth27563() { }
+    public void meth27564() { }
+    public void meth27565() { }
+    public void meth27566() { }
+    public void meth27567() { }
+    public void meth27568() { }
+    public void meth27569() { }
+    public void meth27570() { }
+    public void meth27571() { }
+    public void meth27572() { }
+    public void meth27573() { }
+    public void meth27574() { }
+    public void meth27575() { }
+    public void meth27576() { }
+    public void meth27577() { }
+    public void meth27578() { }
+    public void meth27579() { }
+    public void meth27580() { }
+    public void meth27581() { }
+    public void meth27582() { }
+    public void meth27583() { }
+    public void meth27584() { }
+    public void meth27585() { }
+    public void meth27586() { }
+    public void meth27587() { }
+    public void meth27588() { }
+    public void meth27589() { }
+    public void meth27590() { }
+    public void meth27591() { }
+    public void meth27592() { }
+    public void meth27593() { }
+    public void meth27594() { }
+    public void meth27595() { }
+    public void meth27596() { }
+    public void meth27597() { }
+    public void meth27598() { }
+    public void meth27599() { }
+    public void meth27600() { }
+    public void meth27601() { }
+    public void meth27602() { }
+    public void meth27603() { }
+    public void meth27604() { }
+    public void meth27605() { }
+    public void meth27606() { }
+    public void meth27607() { }
+    public void meth27608() { }
+    public void meth27609() { }
+    public void meth27610() { }
+    public void meth27611() { }
+    public void meth27612() { }
+    public void meth27613() { }
+    public void meth27614() { }
+    public void meth27615() { }
+    public void meth27616() { }
+    public void meth27617() { }
+    public void meth27618() { }
+    public void meth27619() { }
+    public void meth27620() { }
+    public void meth27621() { }
+    public void meth27622() { }
+    public void meth27623() { }
+    public void meth27624() { }
+    public void meth27625() { }
+    public void meth27626() { }
+    public void meth27627() { }
+    public void meth27628() { }
+    public void meth27629() { }
+    public void meth27630() { }
+    public void meth27631() { }
+    public void meth27632() { }
+    public void meth27633() { }
+    public void meth27634() { }
+    public void meth27635() { }
+    public void meth27636() { }
+    public void meth27637() { }
+    public void meth27638() { }
+    public void meth27639() { }
+    public void meth27640() { }
+    public void meth27641() { }
+    public void meth27642() { }
+    public void meth27643() { }
+    public void meth27644() { }
+    public void meth27645() { }
+    public void meth27646() { }
+    public void meth27647() { }
+    public void meth27648() { }
+    public void meth27649() { }
+    public void meth27650() { }
+    public void meth27651() { }
+    public void meth27652() { }
+    public void meth27653() { }
+    public void meth27654() { }
+    public void meth27655() { }
+    public void meth27656() { }
+    public void meth27657() { }
+    public void meth27658() { }
+    public void meth27659() { }
+    public void meth27660() { }
+    public void meth27661() { }
+    public void meth27662() { }
+    public void meth27663() { }
+    public void meth27664() { }
+    public void meth27665() { }
+    public void meth27666() { }
+    public void meth27667() { }
+    public void meth27668() { }
+    public void meth27669() { }
+    public void meth27670() { }
+    public void meth27671() { }
+    public void meth27672() { }
+    public void meth27673() { }
+    public void meth27674() { }
+    public void meth27675() { }
+    public void meth27676() { }
+    public void meth27677() { }
+    public void meth27678() { }
+    public void meth27679() { }
+    public void meth27680() { }
+    public void meth27681() { }
+    public void meth27682() { }
+    public void meth27683() { }
+    public void meth27684() { }
+    public void meth27685() { }
+    public void meth27686() { }
+    public void meth27687() { }
+    public void meth27688() { }
+    public void meth27689() { }
+    public void meth27690() { }
+    public void meth27691() { }
+    public void meth27692() { }
+    public void meth27693() { }
+    public void meth27694() { }
+    public void meth27695() { }
+    public void meth27696() { }
+    public void meth27697() { }
+    public void meth27698() { }
+    public void meth27699() { }
+    public void meth27700() { }
+    public void meth27701() { }
+    public void meth27702() { }
+    public void meth27703() { }
+    public void meth27704() { }
+    public void meth27705() { }
+    public void meth27706() { }
+    public void meth27707() { }
+    public void meth27708() { }
+    public void meth27709() { }
+    public void meth27710() { }
+    public void meth27711() { }
+    public void meth27712() { }
+    public void meth27713() { }
+    public void meth27714() { }
+    public void meth27715() { }
+    public void meth27716() { }
+    public void meth27717() { }
+    public void meth27718() { }
+    public void meth27719() { }
+    public void meth27720() { }
+    public void meth27721() { }
+    public void meth27722() { }
+    public void meth27723() { }
+    public void meth27724() { }
+    public void meth27725() { }
+    public void meth27726() { }
+    public void meth27727() { }
+    public void meth27728() { }
+    public void meth27729() { }
+    public void meth27730() { }
+    public void meth27731() { }
+    public void meth27732() { }
+    public void meth27733() { }
+    public void meth27734() { }
+    public void meth27735() { }
+    public void meth27736() { }
+    public void meth27737() { }
+    public void meth27738() { }
+    public void meth27739() { }
+    public void meth27740() { }
+    public void meth27741() { }
+    public void meth27742() { }
+    public void meth27743() { }
+    public void meth27744() { }
+    public void meth27745() { }
+    public void meth27746() { }
+    public void meth27747() { }
+    public void meth27748() { }
+    public void meth27749() { }
+    public void meth27750() { }
+    public void meth27751() { }
+    public void meth27752() { }
+    public void meth27753() { }
+    public void meth27754() { }
+    public void meth27755() { }
+    public void meth27756() { }
+    public void meth27757() { }
+    public void meth27758() { }
+    public void meth27759() { }
+    public void meth27760() { }
+    public void meth27761() { }
+    public void meth27762() { }
+    public void meth27763() { }
+    public void meth27764() { }
+    public void meth27765() { }
+    public void meth27766() { }
+    public void meth27767() { }
+    public void meth27768() { }
+    public void meth27769() { }
+    public void meth27770() { }
+    public void meth27771() { }
+    public void meth27772() { }
+    public void meth27773() { }
+    public void meth27774() { }
+    public void meth27775() { }
+    public void meth27776() { }
+    public void meth27777() { }
+    public void meth27778() { }
+    public void meth27779() { }
+    public void meth27780() { }
+    public void meth27781() { }
+    public void meth27782() { }
+    public void meth27783() { }
+    public void meth27784() { }
+    public void meth27785() { }
+    public void meth27786() { }
+    public void meth27787() { }
+    public void meth27788() { }
+    public void meth27789() { }
+    public void meth27790() { }
+    public void meth27791() { }
+    public void meth27792() { }
+    public void meth27793() { }
+    public void meth27794() { }
+    public void meth27795() { }
+    public void meth27796() { }
+    public void meth27797() { }
+    public void meth27798() { }
+    public void meth27799() { }
+    public void meth27800() { }
+    public void meth27801() { }
+    public void meth27802() { }
+    public void meth27803() { }
+    public void meth27804() { }
+    public void meth27805() { }
+    public void meth27806() { }
+    public void meth27807() { }
+    public void meth27808() { }
+    public void meth27809() { }
+    public void meth27810() { }
+    public void meth27811() { }
+    public void meth27812() { }
+    public void meth27813() { }
+    public void meth27814() { }
+    public void meth27815() { }
+    public void meth27816() { }
+    public void meth27817() { }
+    public void meth27818() { }
+    public void meth27819() { }
+    public void meth27820() { }
+    public void meth27821() { }
+    public void meth27822() { }
+    public void meth27823() { }
+    public void meth27824() { }
+    public void meth27825() { }
+    public void meth27826() { }
+    public void meth27827() { }
+    public void meth27828() { }
+    public void meth27829() { }
+    public void meth27830() { }
+    public void meth27831() { }
+    public void meth27832() { }
+    public void meth27833() { }
+    public void meth27834() { }
+    public void meth27835() { }
+    public void meth27836() { }
+    public void meth27837() { }
+    public void meth27838() { }
+    public void meth27839() { }
+    public void meth27840() { }
+    public void meth27841() { }
+    public void meth27842() { }
+    public void meth27843() { }
+    public void meth27844() { }
+    public void meth27845() { }
+    public void meth27846() { }
+    public void meth27847() { }
+    public void meth27848() { }
+    public void meth27849() { }
+    public void meth27850() { }
+    public void meth27851() { }
+    public void meth27852() { }
+    public void meth27853() { }
+    public void meth27854() { }
+    public void meth27855() { }
+    public void meth27856() { }
+    public void meth27857() { }
+    public void meth27858() { }
+    public void meth27859() { }
+    public void meth27860() { }
+    public void meth27861() { }
+    public void meth27862() { }
+    public void meth27863() { }
+    public void meth27864() { }
+    public void meth27865() { }
+    public void meth27866() { }
+    public void meth27867() { }
+    public void meth27868() { }
+    public void meth27869() { }
+    public void meth27870() { }
+    public void meth27871() { }
+    public void meth27872() { }
+    public void meth27873() { }
+    public void meth27874() { }
+    public void meth27875() { }
+    public void meth27876() { }
+    public void meth27877() { }
+    public void meth27878() { }
+    public void meth27879() { }
+    public void meth27880() { }
+    public void meth27881() { }
+    public void meth27882() { }
+    public void meth27883() { }
+    public void meth27884() { }
+    public void meth27885() { }
+    public void meth27886() { }
+    public void meth27887() { }
+    public void meth27888() { }
+    public void meth27889() { }
+    public void meth27890() { }
+    public void meth27891() { }
+    public void meth27892() { }
+    public void meth27893() { }
+    public void meth27894() { }
+    public void meth27895() { }
+    public void meth27896() { }
+    public void meth27897() { }
+    public void meth27898() { }
+    public void meth27899() { }
+    public void meth27900() { }
+    public void meth27901() { }
+    public void meth27902() { }
+    public void meth27903() { }
+    public void meth27904() { }
+    public void meth27905() { }
+    public void meth27906() { }
+    public void meth27907() { }
+    public void meth27908() { }
+    public void meth27909() { }
+    public void meth27910() { }
+    public void meth27911() { }
+    public void meth27912() { }
+    public void meth27913() { }
+    public void meth27914() { }
+    public void meth27915() { }
+    public void meth27916() { }
+    public void meth27917() { }
+    public void meth27918() { }
+    public void meth27919() { }
+    public void meth27920() { }
+    public void meth27921() { }
+    public void meth27922() { }
+    public void meth27923() { }
+    public void meth27924() { }
+    public void meth27925() { }
+    public void meth27926() { }
+    public void meth27927() { }
+    public void meth27928() { }
+    public void meth27929() { }
+    public void meth27930() { }
+    public void meth27931() { }
+    public void meth27932() { }
+    public void meth27933() { }
+    public void meth27934() { }
+    public void meth27935() { }
+    public void meth27936() { }
+    public void meth27937() { }
+    public void meth27938() { }
+    public void meth27939() { }
+    public void meth27940() { }
+    public void meth27941() { }
+    public void meth27942() { }
+    public void meth27943() { }
+    public void meth27944() { }
+    public void meth27945() { }
+    public void meth27946() { }
+    public void meth27947() { }
+    public void meth27948() { }
+    public void meth27949() { }
+    public void meth27950() { }
+    public void meth27951() { }
+    public void meth27952() { }
+    public void meth27953() { }
+    public void meth27954() { }
+    public void meth27955() { }
+    public void meth27956() { }
+    public void meth27957() { }
+    public void meth27958() { }
+    public void meth27959() { }
+    public void meth27960() { }
+    public void meth27961() { }
+    public void meth27962() { }
+    public void meth27963() { }
+    public void meth27964() { }
+    public void meth27965() { }
+    public void meth27966() { }
+    public void meth27967() { }
+    public void meth27968() { }
+    public void meth27969() { }
+    public void meth27970() { }
+    public void meth27971() { }
+    public void meth27972() { }
+    public void meth27973() { }
+    public void meth27974() { }
+    public void meth27975() { }
+    public void meth27976() { }
+    public void meth27977() { }
+    public void meth27978() { }
+    public void meth27979() { }
+    public void meth27980() { }
+    public void meth27981() { }
+    public void meth27982() { }
+    public void meth27983() { }
+    public void meth27984() { }
+    public void meth27985() { }
+    public void meth27986() { }
+    public void meth27987() { }
+    public void meth27988() { }
+    public void meth27989() { }
+    public void meth27990() { }
+    public void meth27991() { }
+    public void meth27992() { }
+    public void meth27993() { }
+    public void meth27994() { }
+    public void meth27995() { }
+    public void meth27996() { }
+    public void meth27997() { }
+    public void meth27998() { }
+    public void meth27999() { }
+    public void meth28000() { }
+    public void meth28001() { }
+    public void meth28002() { }
+    public void meth28003() { }
+    public void meth28004() { }
+    public void meth28005() { }
+    public void meth28006() { }
+    public void meth28007() { }
+    public void meth28008() { }
+    public void meth28009() { }
+    public void meth28010() { }
+    public void meth28011() { }
+    public void meth28012() { }
+    public void meth28013() { }
+    public void meth28014() { }
+    public void meth28015() { }
+    public void meth28016() { }
+    public void meth28017() { }
+    public void meth28018() { }
+    public void meth28019() { }
+    public void meth28020() { }
+    public void meth28021() { }
+    public void meth28022() { }
+    public void meth28023() { }
+    public void meth28024() { }
+    public void meth28025() { }
+    public void meth28026() { }
+    public void meth28027() { }
+    public void meth28028() { }
+    public void meth28029() { }
+    public void meth28030() { }
+    public void meth28031() { }
+    public void meth28032() { }
+    public void meth28033() { }
+    public void meth28034() { }
+    public void meth28035() { }
+    public void meth28036() { }
+    public void meth28037() { }
+    public void meth28038() { }
+    public void meth28039() { }
+    public void meth28040() { }
+    public void meth28041() { }
+    public void meth28042() { }
+    public void meth28043() { }
+    public void meth28044() { }
+    public void meth28045() { }
+    public void meth28046() { }
+    public void meth28047() { }
+    public void meth28048() { }
+    public void meth28049() { }
+    public void meth28050() { }
+    public void meth28051() { }
+    public void meth28052() { }
+    public void meth28053() { }
+    public void meth28054() { }
+    public void meth28055() { }
+    public void meth28056() { }
+    public void meth28057() { }
+    public void meth28058() { }
+    public void meth28059() { }
+    public void meth28060() { }
+    public void meth28061() { }
+    public void meth28062() { }
+    public void meth28063() { }
+    public void meth28064() { }
+    public void meth28065() { }
+    public void meth28066() { }
+    public void meth28067() { }
+    public void meth28068() { }
+    public void meth28069() { }
+    public void meth28070() { }
+    public void meth28071() { }
+    public void meth28072() { }
+    public void meth28073() { }
+    public void meth28074() { }
+    public void meth28075() { }
+    public void meth28076() { }
+    public void meth28077() { }
+    public void meth28078() { }
+    public void meth28079() { }
+    public void meth28080() { }
+    public void meth28081() { }
+    public void meth28082() { }
+    public void meth28083() { }
+    public void meth28084() { }
+    public void meth28085() { }
+    public void meth28086() { }
+    public void meth28087() { }
+    public void meth28088() { }
+    public void meth28089() { }
+    public void meth28090() { }
+    public void meth28091() { }
+    public void meth28092() { }
+    public void meth28093() { }
+    public void meth28094() { }
+    public void meth28095() { }
+    public void meth28096() { }
+    public void meth28097() { }
+    public void meth28098() { }
+    public void meth28099() { }
+    public void meth28100() { }
+    public void meth28101() { }
+    public void meth28102() { }
+    public void meth28103() { }
+    public void meth28104() { }
+    public void meth28105() { }
+    public void meth28106() { }
+    public void meth28107() { }
+    public void meth28108() { }
+    public void meth28109() { }
+    public void meth28110() { }
+    public void meth28111() { }
+    public void meth28112() { }
+    public void meth28113() { }
+    public void meth28114() { }
+    public void meth28115() { }
+    public void meth28116() { }
+    public void meth28117() { }
+    public void meth28118() { }
+    public void meth28119() { }
+    public void meth28120() { }
+    public void meth28121() { }
+    public void meth28122() { }
+    public void meth28123() { }
+    public void meth28124() { }
+    public void meth28125() { }
+    public void meth28126() { }
+    public void meth28127() { }
+    public void meth28128() { }
+    public void meth28129() { }
+    public void meth28130() { }
+    public void meth28131() { }
+    public void meth28132() { }
+    public void meth28133() { }
+    public void meth28134() { }
+    public void meth28135() { }
+    public void meth28136() { }
+    public void meth28137() { }
+    public void meth28138() { }
+    public void meth28139() { }
+    public void meth28140() { }
+    public void meth28141() { }
+    public void meth28142() { }
+    public void meth28143() { }
+    public void meth28144() { }
+    public void meth28145() { }
+    public void meth28146() { }
+    public void meth28147() { }
+    public void meth28148() { }
+    public void meth28149() { }
+    public void meth28150() { }
+    public void meth28151() { }
+    public void meth28152() { }
+    public void meth28153() { }
+    public void meth28154() { }
+    public void meth28155() { }
+    public void meth28156() { }
+    public void meth28157() { }
+    public void meth28158() { }
+    public void meth28159() { }
+    public void meth28160() { }
+    public void meth28161() { }
+    public void meth28162() { }
+    public void meth28163() { }
+    public void meth28164() { }
+    public void meth28165() { }
+    public void meth28166() { }
+    public void meth28167() { }
+    public void meth28168() { }
+    public void meth28169() { }
+    public void meth28170() { }
+    public void meth28171() { }
+    public void meth28172() { }
+    public void meth28173() { }
+    public void meth28174() { }
+    public void meth28175() { }
+    public void meth28176() { }
+    public void meth28177() { }
+    public void meth28178() { }
+    public void meth28179() { }
+    public void meth28180() { }
+    public void meth28181() { }
+    public void meth28182() { }
+    public void meth28183() { }
+    public void meth28184() { }
+    public void meth28185() { }
+    public void meth28186() { }
+    public void meth28187() { }
+    public void meth28188() { }
+    public void meth28189() { }
+    public void meth28190() { }
+    public void meth28191() { }
+    public void meth28192() { }
+    public void meth28193() { }
+    public void meth28194() { }
+    public void meth28195() { }
+    public void meth28196() { }
+    public void meth28197() { }
+    public void meth28198() { }
+    public void meth28199() { }
+    public void meth28200() { }
+    public void meth28201() { }
+    public void meth28202() { }
+    public void meth28203() { }
+    public void meth28204() { }
+    public void meth28205() { }
+    public void meth28206() { }
+    public void meth28207() { }
+    public void meth28208() { }
+    public void meth28209() { }
+    public void meth28210() { }
+    public void meth28211() { }
+    public void meth28212() { }
+    public void meth28213() { }
+    public void meth28214() { }
+    public void meth28215() { }
+    public void meth28216() { }
+    public void meth28217() { }
+    public void meth28218() { }
+    public void meth28219() { }
+    public void meth28220() { }
+    public void meth28221() { }
+    public void meth28222() { }
+    public void meth28223() { }
+    public void meth28224() { }
+    public void meth28225() { }
+    public void meth28226() { }
+    public void meth28227() { }
+    public void meth28228() { }
+    public void meth28229() { }
+    public void meth28230() { }
+    public void meth28231() { }
+    public void meth28232() { }
+    public void meth28233() { }
+    public void meth28234() { }
+    public void meth28235() { }
+    public void meth28236() { }
+    public void meth28237() { }
+    public void meth28238() { }
+    public void meth28239() { }
+    public void meth28240() { }
+    public void meth28241() { }
+    public void meth28242() { }
+    public void meth28243() { }
+    public void meth28244() { }
+    public void meth28245() { }
+    public void meth28246() { }
+    public void meth28247() { }
+    public void meth28248() { }
+    public void meth28249() { }
+    public void meth28250() { }
+    public void meth28251() { }
+    public void meth28252() { }
+    public void meth28253() { }
+    public void meth28254() { }
+    public void meth28255() { }
+    public void meth28256() { }
+    public void meth28257() { }
+    public void meth28258() { }
+    public void meth28259() { }
+    public void meth28260() { }
+    public void meth28261() { }
+    public void meth28262() { }
+    public void meth28263() { }
+    public void meth28264() { }
+    public void meth28265() { }
+    public void meth28266() { }
+    public void meth28267() { }
+    public void meth28268() { }
+    public void meth28269() { }
+    public void meth28270() { }
+    public void meth28271() { }
+    public void meth28272() { }
+    public void meth28273() { }
+    public void meth28274() { }
+    public void meth28275() { }
+    public void meth28276() { }
+    public void meth28277() { }
+    public void meth28278() { }
+    public void meth28279() { }
+    public void meth28280() { }
+    public void meth28281() { }
+    public void meth28282() { }
+    public void meth28283() { }
+    public void meth28284() { }
+    public void meth28285() { }
+    public void meth28286() { }
+    public void meth28287() { }
+    public void meth28288() { }
+    public void meth28289() { }
+    public void meth28290() { }
+    public void meth28291() { }
+    public void meth28292() { }
+    public void meth28293() { }
+    public void meth28294() { }
+    public void meth28295() { }
+    public void meth28296() { }
+    public void meth28297() { }
+    public void meth28298() { }
+    public void meth28299() { }
+    public void meth28300() { }
+    public void meth28301() { }
+    public void meth28302() { }
+    public void meth28303() { }
+    public void meth28304() { }
+    public void meth28305() { }
+    public void meth28306() { }
+    public void meth28307() { }
+    public void meth28308() { }
+    public void meth28309() { }
+    public void meth28310() { }
+    public void meth28311() { }
+    public void meth28312() { }
+    public void meth28313() { }
+    public void meth28314() { }
+    public void meth28315() { }
+    public void meth28316() { }
+    public void meth28317() { }
+    public void meth28318() { }
+    public void meth28319() { }
+    public void meth28320() { }
+    public void meth28321() { }
+    public void meth28322() { }
+    public void meth28323() { }
+    public void meth28324() { }
+    public void meth28325() { }
+    public void meth28326() { }
+    public void meth28327() { }
+    public void meth28328() { }
+    public void meth28329() { }
+    public void meth28330() { }
+    public void meth28331() { }
+    public void meth28332() { }
+    public void meth28333() { }
+    public void meth28334() { }
+    public void meth28335() { }
+    public void meth28336() { }
+    public void meth28337() { }
+    public void meth28338() { }
+    public void meth28339() { }
+    public void meth28340() { }
+    public void meth28341() { }
+    public void meth28342() { }
+    public void meth28343() { }
+    public void meth28344() { }
+    public void meth28345() { }
+    public void meth28346() { }
+    public void meth28347() { }
+    public void meth28348() { }
+    public void meth28349() { }
+    public void meth28350() { }
+    public void meth28351() { }
+    public void meth28352() { }
+    public void meth28353() { }
+    public void meth28354() { }
+    public void meth28355() { }
+    public void meth28356() { }
+    public void meth28357() { }
+    public void meth28358() { }
+    public void meth28359() { }
+    public void meth28360() { }
+    public void meth28361() { }
+    public void meth28362() { }
+    public void meth28363() { }
+    public void meth28364() { }
+    public void meth28365() { }
+    public void meth28366() { }
+    public void meth28367() { }
+    public void meth28368() { }
+    public void meth28369() { }
+    public void meth28370() { }
+    public void meth28371() { }
+    public void meth28372() { }
+    public void meth28373() { }
+    public void meth28374() { }
+    public void meth28375() { }
+    public void meth28376() { }
+    public void meth28377() { }
+    public void meth28378() { }
+    public void meth28379() { }
+    public void meth28380() { }
+    public void meth28381() { }
+    public void meth28382() { }
+    public void meth28383() { }
+    public void meth28384() { }
+    public void meth28385() { }
+    public void meth28386() { }
+    public void meth28387() { }
+    public void meth28388() { }
+    public void meth28389() { }
+    public void meth28390() { }
+    public void meth28391() { }
+    public void meth28392() { }
+    public void meth28393() { }
+    public void meth28394() { }
+    public void meth28395() { }
+    public void meth28396() { }
+    public void meth28397() { }
+    public void meth28398() { }
+    public void meth28399() { }
+    public void meth28400() { }
+    public void meth28401() { }
+    public void meth28402() { }
+    public void meth28403() { }
+    public void meth28404() { }
+    public void meth28405() { }
+    public void meth28406() { }
+    public void meth28407() { }
+    public void meth28408() { }
+    public void meth28409() { }
+    public void meth28410() { }
+    public void meth28411() { }
+    public void meth28412() { }
+    public void meth28413() { }
+    public void meth28414() { }
+    public void meth28415() { }
+    public void meth28416() { }
+    public void meth28417() { }
+    public void meth28418() { }
+    public void meth28419() { }
+    public void meth28420() { }
+    public void meth28421() { }
+    public void meth28422() { }
+    public void meth28423() { }
+    public void meth28424() { }
+    public void meth28425() { }
+    public void meth28426() { }
+    public void meth28427() { }
+    public void meth28428() { }
+    public void meth28429() { }
+    public void meth28430() { }
+    public void meth28431() { }
+    public void meth28432() { }
+    public void meth28433() { }
+    public void meth28434() { }
+    public void meth28435() { }
+    public void meth28436() { }
+    public void meth28437() { }
+    public void meth28438() { }
+    public void meth28439() { }
+    public void meth28440() { }
+    public void meth28441() { }
+    public void meth28442() { }
+    public void meth28443() { }
+    public void meth28444() { }
+    public void meth28445() { }
+    public void meth28446() { }
+    public void meth28447() { }
+    public void meth28448() { }
+    public void meth28449() { }
+    public void meth28450() { }
+    public void meth28451() { }
+    public void meth28452() { }
+    public void meth28453() { }
+    public void meth28454() { }
+    public void meth28455() { }
+    public void meth28456() { }
+    public void meth28457() { }
+    public void meth28458() { }
+    public void meth28459() { }
+    public void meth28460() { }
+    public void meth28461() { }
+    public void meth28462() { }
+    public void meth28463() { }
+    public void meth28464() { }
+    public void meth28465() { }
+    public void meth28466() { }
+    public void meth28467() { }
+    public void meth28468() { }
+    public void meth28469() { }
+    public void meth28470() { }
+    public void meth28471() { }
+    public void meth28472() { }
+    public void meth28473() { }
+    public void meth28474() { }
+    public void meth28475() { }
+    public void meth28476() { }
+    public void meth28477() { }
+    public void meth28478() { }
+    public void meth28479() { }
+    public void meth28480() { }
+    public void meth28481() { }
+    public void meth28482() { }
+    public void meth28483() { }
+    public void meth28484() { }
+    public void meth28485() { }
+    public void meth28486() { }
+    public void meth28487() { }
+    public void meth28488() { }
+    public void meth28489() { }
+    public void meth28490() { }
+    public void meth28491() { }
+    public void meth28492() { }
+    public void meth28493() { }
+    public void meth28494() { }
+    public void meth28495() { }
+    public void meth28496() { }
+    public void meth28497() { }
+    public void meth28498() { }
+    public void meth28499() { }
+    public void meth28500() { }
+    public void meth28501() { }
+    public void meth28502() { }
+    public void meth28503() { }
+    public void meth28504() { }
+    public void meth28505() { }
+    public void meth28506() { }
+    public void meth28507() { }
+    public void meth28508() { }
+    public void meth28509() { }
+    public void meth28510() { }
+    public void meth28511() { }
+    public void meth28512() { }
+    public void meth28513() { }
+    public void meth28514() { }
+    public void meth28515() { }
+    public void meth28516() { }
+    public void meth28517() { }
+    public void meth28518() { }
+    public void meth28519() { }
+    public void meth28520() { }
+    public void meth28521() { }
+    public void meth28522() { }
+    public void meth28523() { }
+    public void meth28524() { }
+    public void meth28525() { }
+    public void meth28526() { }
+    public void meth28527() { }
+    public void meth28528() { }
+    public void meth28529() { }
+    public void meth28530() { }
+    public void meth28531() { }
+    public void meth28532() { }
+    public void meth28533() { }
+    public void meth28534() { }
+    public void meth28535() { }
+    public void meth28536() { }
+    public void meth28537() { }
+    public void meth28538() { }
+    public void meth28539() { }
+    public void meth28540() { }
+    public void meth28541() { }
+    public void meth28542() { }
+    public void meth28543() { }
+    public void meth28544() { }
+    public void meth28545() { }
+    public void meth28546() { }
+    public void meth28547() { }
+    public void meth28548() { }
+    public void meth28549() { }
+    public void meth28550() { }
+    public void meth28551() { }
+    public void meth28552() { }
+    public void meth28553() { }
+    public void meth28554() { }
+    public void meth28555() { }
+    public void meth28556() { }
+    public void meth28557() { }
+    public void meth28558() { }
+    public void meth28559() { }
+    public void meth28560() { }
+    public void meth28561() { }
+    public void meth28562() { }
+    public void meth28563() { }
+    public void meth28564() { }
+    public void meth28565() { }
+    public void meth28566() { }
+    public void meth28567() { }
+    public void meth28568() { }
+    public void meth28569() { }
+    public void meth28570() { }
+    public void meth28571() { }
+    public void meth28572() { }
+    public void meth28573() { }
+    public void meth28574() { }
+    public void meth28575() { }
+    public void meth28576() { }
+    public void meth28577() { }
+    public void meth28578() { }
+    public void meth28579() { }
+    public void meth28580() { }
+    public void meth28581() { }
+    public void meth28582() { }
+    public void meth28583() { }
+    public void meth28584() { }
+    public void meth28585() { }
+    public void meth28586() { }
+    public void meth28587() { }
+    public void meth28588() { }
+    public void meth28589() { }
+    public void meth28590() { }
+    public void meth28591() { }
+    public void meth28592() { }
+    public void meth28593() { }
+    public void meth28594() { }
+    public void meth28595() { }
+    public void meth28596() { }
+    public void meth28597() { }
+    public void meth28598() { }
+    public void meth28599() { }
+    public void meth28600() { }
+    public void meth28601() { }
+    public void meth28602() { }
+    public void meth28603() { }
+    public void meth28604() { }
+    public void meth28605() { }
+    public void meth28606() { }
+    public void meth28607() { }
+    public void meth28608() { }
+    public void meth28609() { }
+    public void meth28610() { }
+    public void meth28611() { }
+    public void meth28612() { }
+    public void meth28613() { }
+    public void meth28614() { }
+    public void meth28615() { }
+    public void meth28616() { }
+    public void meth28617() { }
+    public void meth28618() { }
+    public void meth28619() { }
+    public void meth28620() { }
+    public void meth28621() { }
+    public void meth28622() { }
+    public void meth28623() { }
+    public void meth28624() { }
+    public void meth28625() { }
+    public void meth28626() { }
+    public void meth28627() { }
+    public void meth28628() { }
+    public void meth28629() { }
+    public void meth28630() { }
+    public void meth28631() { }
+    public void meth28632() { }
+    public void meth28633() { }
+    public void meth28634() { }
+    public void meth28635() { }
+    public void meth28636() { }
+    public void meth28637() { }
+    public void meth28638() { }
+    public void meth28639() { }
+    public void meth28640() { }
+    public void meth28641() { }
+    public void meth28642() { }
+    public void meth28643() { }
+    public void meth28644() { }
+    public void meth28645() { }
+    public void meth28646() { }
+    public void meth28647() { }
+    public void meth28648() { }
+    public void meth28649() { }
+    public void meth28650() { }
+    public void meth28651() { }
+    public void meth28652() { }
+    public void meth28653() { }
+    public void meth28654() { }
+    public void meth28655() { }
+    public void meth28656() { }
+    public void meth28657() { }
+    public void meth28658() { }
+    public void meth28659() { }
+    public void meth28660() { }
+    public void meth28661() { }
+    public void meth28662() { }
+    public void meth28663() { }
+    public void meth28664() { }
+    public void meth28665() { }
+    public void meth28666() { }
+    public void meth28667() { }
+    public void meth28668() { }
+    public void meth28669() { }
+    public void meth28670() { }
+    public void meth28671() { }
+    public void meth28672() { }
+    public void meth28673() { }
+    public void meth28674() { }
+    public void meth28675() { }
+    public void meth28676() { }
+    public void meth28677() { }
+    public void meth28678() { }
+    public void meth28679() { }
+    public void meth28680() { }
+    public void meth28681() { }
+    public void meth28682() { }
+    public void meth28683() { }
+    public void meth28684() { }
+    public void meth28685() { }
+    public void meth28686() { }
+    public void meth28687() { }
+    public void meth28688() { }
+    public void meth28689() { }
+    public void meth28690() { }
+    public void meth28691() { }
+    public void meth28692() { }
+    public void meth28693() { }
+    public void meth28694() { }
+    public void meth28695() { }
+    public void meth28696() { }
+    public void meth28697() { }
+    public void meth28698() { }
+    public void meth28699() { }
+    public void meth28700() { }
+    public void meth28701() { }
+    public void meth28702() { }
+    public void meth28703() { }
+    public void meth28704() { }
+    public void meth28705() { }
+    public void meth28706() { }
+    public void meth28707() { }
+    public void meth28708() { }
+    public void meth28709() { }
+    public void meth28710() { }
+    public void meth28711() { }
+    public void meth28712() { }
+    public void meth28713() { }
+    public void meth28714() { }
+    public void meth28715() { }
+    public void meth28716() { }
+    public void meth28717() { }
+    public void meth28718() { }
+    public void meth28719() { }
+    public void meth28720() { }
+    public void meth28721() { }
+    public void meth28722() { }
+    public void meth28723() { }
+    public void meth28724() { }
+    public void meth28725() { }
+    public void meth28726() { }
+    public void meth28727() { }
+    public void meth28728() { }
+    public void meth28729() { }
+    public void meth28730() { }
+    public void meth28731() { }
+    public void meth28732() { }
+    public void meth28733() { }
+    public void meth28734() { }
+    public void meth28735() { }
+    public void meth28736() { }
+    public void meth28737() { }
+    public void meth28738() { }
+    public void meth28739() { }
+    public void meth28740() { }
+    public void meth28741() { }
+    public void meth28742() { }
+    public void meth28743() { }
+    public void meth28744() { }
+    public void meth28745() { }
+    public void meth28746() { }
+    public void meth28747() { }
+    public void meth28748() { }
+    public void meth28749() { }
+    public void meth28750() { }
+    public void meth28751() { }
+    public void meth28752() { }
+    public void meth28753() { }
+    public void meth28754() { }
+    public void meth28755() { }
+    public void meth28756() { }
+    public void meth28757() { }
+    public void meth28758() { }
+    public void meth28759() { }
+    public void meth28760() { }
+    public void meth28761() { }
+    public void meth28762() { }
+    public void meth28763() { }
+    public void meth28764() { }
+    public void meth28765() { }
+    public void meth28766() { }
+    public void meth28767() { }
+    public void meth28768() { }
+    public void meth28769() { }
+    public void meth28770() { }
+    public void meth28771() { }
+    public void meth28772() { }
+    public void meth28773() { }
+    public void meth28774() { }
+    public void meth28775() { }
+    public void meth28776() { }
+    public void meth28777() { }
+    public void meth28778() { }
+    public void meth28779() { }
+    public void meth28780() { }
+    public void meth28781() { }
+    public void meth28782() { }
+    public void meth28783() { }
+    public void meth28784() { }
+    public void meth28785() { }
+    public void meth28786() { }
+    public void meth28787() { }
+    public void meth28788() { }
+    public void meth28789() { }
+    public void meth28790() { }
+    public void meth28791() { }
+    public void meth28792() { }
+    public void meth28793() { }
+    public void meth28794() { }
+    public void meth28795() { }
+    public void meth28796() { }
+    public void meth28797() { }
+    public void meth28798() { }
+    public void meth28799() { }
+    public void meth28800() { }
+    public void meth28801() { }
+    public void meth28802() { }
+    public void meth28803() { }
+    public void meth28804() { }
+    public void meth28805() { }
+    public void meth28806() { }
+    public void meth28807() { }
+    public void meth28808() { }
+    public void meth28809() { }
+    public void meth28810() { }
+    public void meth28811() { }
+    public void meth28812() { }
+    public void meth28813() { }
+    public void meth28814() { }
+    public void meth28815() { }
+    public void meth28816() { }
+    public void meth28817() { }
+    public void meth28818() { }
+    public void meth28819() { }
+    public void meth28820() { }
+    public void meth28821() { }
+    public void meth28822() { }
+    public void meth28823() { }
+    public void meth28824() { }
+    public void meth28825() { }
+    public void meth28826() { }
+    public void meth28827() { }
+    public void meth28828() { }
+    public void meth28829() { }
+    public void meth28830() { }
+    public void meth28831() { }
+    public void meth28832() { }
+    public void meth28833() { }
+    public void meth28834() { }
+    public void meth28835() { }
+    public void meth28836() { }
+    public void meth28837() { }
+    public void meth28838() { }
+    public void meth28839() { }
+    public void meth28840() { }
+    public void meth28841() { }
+    public void meth28842() { }
+    public void meth28843() { }
+    public void meth28844() { }
+    public void meth28845() { }
+    public void meth28846() { }
+    public void meth28847() { }
+    public void meth28848() { }
+    public void meth28849() { }
+    public void meth28850() { }
+    public void meth28851() { }
+    public void meth28852() { }
+    public void meth28853() { }
+    public void meth28854() { }
+    public void meth28855() { }
+    public void meth28856() { }
+    public void meth28857() { }
+    public void meth28858() { }
+    public void meth28859() { }
+    public void meth28860() { }
+    public void meth28861() { }
+    public void meth28862() { }
+    public void meth28863() { }
+    public void meth28864() { }
+    public void meth28865() { }
+    public void meth28866() { }
+    public void meth28867() { }
+    public void meth28868() { }
+    public void meth28869() { }
+    public void meth28870() { }
+    public void meth28871() { }
+    public void meth28872() { }
+    public void meth28873() { }
+    public void meth28874() { }
+    public void meth28875() { }
+    public void meth28876() { }
+    public void meth28877() { }
+    public void meth28878() { }
+    public void meth28879() { }
+    public void meth28880() { }
+    public void meth28881() { }
+    public void meth28882() { }
+    public void meth28883() { }
+    public void meth28884() { }
+    public void meth28885() { }
+    public void meth28886() { }
+    public void meth28887() { }
+    public void meth28888() { }
+    public void meth28889() { }
+    public void meth28890() { }
+    public void meth28891() { }
+    public void meth28892() { }
+    public void meth28893() { }
+    public void meth28894() { }
+    public void meth28895() { }
+    public void meth28896() { }
+    public void meth28897() { }
+    public void meth28898() { }
+    public void meth28899() { }
+    public void meth28900() { }
+    public void meth28901() { }
+    public void meth28902() { }
+    public void meth28903() { }
+    public void meth28904() { }
+    public void meth28905() { }
+    public void meth28906() { }
+    public void meth28907() { }
+    public void meth28908() { }
+    public void meth28909() { }
+    public void meth28910() { }
+    public void meth28911() { }
+    public void meth28912() { }
+    public void meth28913() { }
+    public void meth28914() { }
+    public void meth28915() { }
+    public void meth28916() { }
+    public void meth28917() { }
+    public void meth28918() { }
+    public void meth28919() { }
+    public void meth28920() { }
+    public void meth28921() { }
+    public void meth28922() { }
+    public void meth28923() { }
+    public void meth28924() { }
+    public void meth28925() { }
+    public void meth28926() { }
+    public void meth28927() { }
+    public void meth28928() { }
+    public void meth28929() { }
+    public void meth28930() { }
+    public void meth28931() { }
+    public void meth28932() { }
+    public void meth28933() { }
+    public void meth28934() { }
+    public void meth28935() { }
+    public void meth28936() { }
+    public void meth28937() { }
+    public void meth28938() { }
+    public void meth28939() { }
+    public void meth28940() { }
+    public void meth28941() { }
+    public void meth28942() { }
+    public void meth28943() { }
+    public void meth28944() { }
+    public void meth28945() { }
+    public void meth28946() { }
+    public void meth28947() { }
+    public void meth28948() { }
+    public void meth28949() { }
+    public void meth28950() { }
+    public void meth28951() { }
+    public void meth28952() { }
+    public void meth28953() { }
+    public void meth28954() { }
+    public void meth28955() { }
+    public void meth28956() { }
+    public void meth28957() { }
+    public void meth28958() { }
+    public void meth28959() { }
+    public void meth28960() { }
+    public void meth28961() { }
+    public void meth28962() { }
+    public void meth28963() { }
+    public void meth28964() { }
+    public void meth28965() { }
+    public void meth28966() { }
+    public void meth28967() { }
+    public void meth28968() { }
+    public void meth28969() { }
+    public void meth28970() { }
+    public void meth28971() { }
+    public void meth28972() { }
+    public void meth28973() { }
+    public void meth28974() { }
+    public void meth28975() { }
+    public void meth28976() { }
+    public void meth28977() { }
+    public void meth28978() { }
+    public void meth28979() { }
+    public void meth28980() { }
+    public void meth28981() { }
+    public void meth28982() { }
+    public void meth28983() { }
+    public void meth28984() { }
+    public void meth28985() { }
+    public void meth28986() { }
+    public void meth28987() { }
+    public void meth28988() { }
+    public void meth28989() { }
+    public void meth28990() { }
+    public void meth28991() { }
+    public void meth28992() { }
+    public void meth28993() { }
+    public void meth28994() { }
+    public void meth28995() { }
+    public void meth28996() { }
+    public void meth28997() { }
+    public void meth28998() { }
+    public void meth28999() { }
+    public void meth29000() { }
+    public void meth29001() { }
+    public void meth29002() { }
+    public void meth29003() { }
+    public void meth29004() { }
+    public void meth29005() { }
+    public void meth29006() { }
+    public void meth29007() { }
+    public void meth29008() { }
+    public void meth29009() { }
+    public void meth29010() { }
+    public void meth29011() { }
+    public void meth29012() { }
+    public void meth29013() { }
+    public void meth29014() { }
+    public void meth29015() { }
+    public void meth29016() { }
+    public void meth29017() { }
+    public void meth29018() { }
+    public void meth29019() { }
+    public void meth29020() { }
+    public void meth29021() { }
+    public void meth29022() { }
+    public void meth29023() { }
+    public void meth29024() { }
+    public void meth29025() { }
+    public void meth29026() { }
+    public void meth29027() { }
+    public void meth29028() { }
+    public void meth29029() { }
+    public void meth29030() { }
+    public void meth29031() { }
+    public void meth29032() { }
+    public void meth29033() { }
+    public void meth29034() { }
+    public void meth29035() { }
+    public void meth29036() { }
+    public void meth29037() { }
+    public void meth29038() { }
+    public void meth29039() { }
+    public void meth29040() { }
+    public void meth29041() { }
+    public void meth29042() { }
+    public void meth29043() { }
+    public void meth29044() { }
+    public void meth29045() { }
+    public void meth29046() { }
+    public void meth29047() { }
+    public void meth29048() { }
+    public void meth29049() { }
+    public void meth29050() { }
+    public void meth29051() { }
+    public void meth29052() { }
+    public void meth29053() { }
+    public void meth29054() { }
+    public void meth29055() { }
+    public void meth29056() { }
+    public void meth29057() { }
+    public void meth29058() { }
+    public void meth29059() { }
+    public void meth29060() { }
+    public void meth29061() { }
+    public void meth29062() { }
+    public void meth29063() { }
+    public void meth29064() { }
+    public void meth29065() { }
+    public void meth29066() { }
+    public void meth29067() { }
+    public void meth29068() { }
+    public void meth29069() { }
+    public void meth29070() { }
+    public void meth29071() { }
+    public void meth29072() { }
+    public void meth29073() { }
+    public void meth29074() { }
+    public void meth29075() { }
+    public void meth29076() { }
+    public void meth29077() { }
+    public void meth29078() { }
+    public void meth29079() { }
+    public void meth29080() { }
+    public void meth29081() { }
+    public void meth29082() { }
+    public void meth29083() { }
+    public void meth29084() { }
+    public void meth29085() { }
+    public void meth29086() { }
+    public void meth29087() { }
+    public void meth29088() { }
+    public void meth29089() { }
+    public void meth29090() { }
+    public void meth29091() { }
+    public void meth29092() { }
+    public void meth29093() { }
+    public void meth29094() { }
+    public void meth29095() { }
+    public void meth29096() { }
+    public void meth29097() { }
+    public void meth29098() { }
+    public void meth29099() { }
+    public void meth29100() { }
+    public void meth29101() { }
+    public void meth29102() { }
+    public void meth29103() { }
+    public void meth29104() { }
+    public void meth29105() { }
+    public void meth29106() { }
+    public void meth29107() { }
+    public void meth29108() { }
+    public void meth29109() { }
+    public void meth29110() { }
+    public void meth29111() { }
+    public void meth29112() { }
+    public void meth29113() { }
+    public void meth29114() { }
+    public void meth29115() { }
+    public void meth29116() { }
+    public void meth29117() { }
+    public void meth29118() { }
+    public void meth29119() { }
+    public void meth29120() { }
+    public void meth29121() { }
+    public void meth29122() { }
+    public void meth29123() { }
+    public void meth29124() { }
+    public void meth29125() { }
+    public void meth29126() { }
+    public void meth29127() { }
+    public void meth29128() { }
+    public void meth29129() { }
+    public void meth29130() { }
+    public void meth29131() { }
+    public void meth29132() { }
+    public void meth29133() { }
+    public void meth29134() { }
+    public void meth29135() { }
+    public void meth29136() { }
+    public void meth29137() { }
+    public void meth29138() { }
+    public void meth29139() { }
+    public void meth29140() { }
+    public void meth29141() { }
+    public void meth29142() { }
+    public void meth29143() { }
+    public void meth29144() { }
+    public void meth29145() { }
+    public void meth29146() { }
+    public void meth29147() { }
+    public void meth29148() { }
+    public void meth29149() { }
+    public void meth29150() { }
+    public void meth29151() { }
+    public void meth29152() { }
+    public void meth29153() { }
+    public void meth29154() { }
+    public void meth29155() { }
+    public void meth29156() { }
+    public void meth29157() { }
+    public void meth29158() { }
+    public void meth29159() { }
+    public void meth29160() { }
+    public void meth29161() { }
+    public void meth29162() { }
+    public void meth29163() { }
+    public void meth29164() { }
+    public void meth29165() { }
+    public void meth29166() { }
+    public void meth29167() { }
+    public void meth29168() { }
+    public void meth29169() { }
+    public void meth29170() { }
+    public void meth29171() { }
+    public void meth29172() { }
+    public void meth29173() { }
+    public void meth29174() { }
+    public void meth29175() { }
+    public void meth29176() { }
+    public void meth29177() { }
+    public void meth29178() { }
+    public void meth29179() { }
+    public void meth29180() { }
+    public void meth29181() { }
+    public void meth29182() { }
+    public void meth29183() { }
+    public void meth29184() { }
+    public void meth29185() { }
+    public void meth29186() { }
+    public void meth29187() { }
+    public void meth29188() { }
+    public void meth29189() { }
+    public void meth29190() { }
+    public void meth29191() { }
+    public void meth29192() { }
+    public void meth29193() { }
+    public void meth29194() { }
+    public void meth29195() { }
+    public void meth29196() { }
+    public void meth29197() { }
+    public void meth29198() { }
+    public void meth29199() { }
+    public void meth29200() { }
+    public void meth29201() { }
+    public void meth29202() { }
+    public void meth29203() { }
+    public void meth29204() { }
+    public void meth29205() { }
+    public void meth29206() { }
+    public void meth29207() { }
+    public void meth29208() { }
+    public void meth29209() { }
+    public void meth29210() { }
+    public void meth29211() { }
+    public void meth29212() { }
+    public void meth29213() { }
+    public void meth29214() { }
+    public void meth29215() { }
+    public void meth29216() { }
+    public void meth29217() { }
+    public void meth29218() { }
+    public void meth29219() { }
+    public void meth29220() { }
+    public void meth29221() { }
+    public void meth29222() { }
+    public void meth29223() { }
+    public void meth29224() { }
+    public void meth29225() { }
+    public void meth29226() { }
+    public void meth29227() { }
+    public void meth29228() { }
+    public void meth29229() { }
+    public void meth29230() { }
+    public void meth29231() { }
+    public void meth29232() { }
+    public void meth29233() { }
+    public void meth29234() { }
+    public void meth29235() { }
+    public void meth29236() { }
+    public void meth29237() { }
+    public void meth29238() { }
+    public void meth29239() { }
+    public void meth29240() { }
+    public void meth29241() { }
+    public void meth29242() { }
+    public void meth29243() { }
+    public void meth29244() { }
+    public void meth29245() { }
+    public void meth29246() { }
+    public void meth29247() { }
+    public void meth29248() { }
+    public void meth29249() { }
+    public void meth29250() { }
+    public void meth29251() { }
+    public void meth29252() { }
+    public void meth29253() { }
+    public void meth29254() { }
+    public void meth29255() { }
+    public void meth29256() { }
+    public void meth29257() { }
+    public void meth29258() { }
+    public void meth29259() { }
+    public void meth29260() { }
+    public void meth29261() { }
+    public void meth29262() { }
+    public void meth29263() { }
+    public void meth29264() { }
+    public void meth29265() { }
+    public void meth29266() { }
+    public void meth29267() { }
+    public void meth29268() { }
+    public void meth29269() { }
+    public void meth29270() { }
+    public void meth29271() { }
+    public void meth29272() { }
+    public void meth29273() { }
+    public void meth29274() { }
+    public void meth29275() { }
+    public void meth29276() { }
+    public void meth29277() { }
+    public void meth29278() { }
+    public void meth29279() { }
+    public void meth29280() { }
+    public void meth29281() { }
+    public void meth29282() { }
+    public void meth29283() { }
+    public void meth29284() { }
+    public void meth29285() { }
+    public void meth29286() { }
+    public void meth29287() { }
+    public void meth29288() { }
+    public void meth29289() { }
+    public void meth29290() { }
+    public void meth29291() { }
+    public void meth29292() { }
+    public void meth29293() { }
+    public void meth29294() { }
+    public void meth29295() { }
+    public void meth29296() { }
+    public void meth29297() { }
+    public void meth29298() { }
+    public void meth29299() { }
+    public void meth29300() { }
+    public void meth29301() { }
+    public void meth29302() { }
+    public void meth29303() { }
+    public void meth29304() { }
+    public void meth29305() { }
+    public void meth29306() { }
+    public void meth29307() { }
+    public void meth29308() { }
+    public void meth29309() { }
+    public void meth29310() { }
+    public void meth29311() { }
+    public void meth29312() { }
+    public void meth29313() { }
+    public void meth29314() { }
+    public void meth29315() { }
+    public void meth29316() { }
+    public void meth29317() { }
+    public void meth29318() { }
+    public void meth29319() { }
+    public void meth29320() { }
+    public void meth29321() { }
+    public void meth29322() { }
+    public void meth29323() { }
+    public void meth29324() { }
+    public void meth29325() { }
+    public void meth29326() { }
+    public void meth29327() { }
+    public void meth29328() { }
+    public void meth29329() { }
+    public void meth29330() { }
+    public void meth29331() { }
+    public void meth29332() { }
+    public void meth29333() { }
+    public void meth29334() { }
+    public void meth29335() { }
+    public void meth29336() { }
+    public void meth29337() { }
+    public void meth29338() { }
+    public void meth29339() { }
+    public void meth29340() { }
+    public void meth29341() { }
+    public void meth29342() { }
+    public void meth29343() { }
+    public void meth29344() { }
+    public void meth29345() { }
+    public void meth29346() { }
+    public void meth29347() { }
+    public void meth29348() { }
+    public void meth29349() { }
+    public void meth29350() { }
+    public void meth29351() { }
+    public void meth29352() { }
+    public void meth29353() { }
+    public void meth29354() { }
+    public void meth29355() { }
+    public void meth29356() { }
+    public void meth29357() { }
+    public void meth29358() { }
+    public void meth29359() { }
+    public void meth29360() { }
+    public void meth29361() { }
+    public void meth29362() { }
+    public void meth29363() { }
+    public void meth29364() { }
+    public void meth29365() { }
+    public void meth29366() { }
+    public void meth29367() { }
+    public void meth29368() { }
+    public void meth29369() { }
+    public void meth29370() { }
+    public void meth29371() { }
+    public void meth29372() { }
+    public void meth29373() { }
+    public void meth29374() { }
+    public void meth29375() { }
+    public void meth29376() { }
+    public void meth29377() { }
+    public void meth29378() { }
+    public void meth29379() { }
+    public void meth29380() { }
+    public void meth29381() { }
+    public void meth29382() { }
+    public void meth29383() { }
+    public void meth29384() { }
+    public void meth29385() { }
+    public void meth29386() { }
+    public void meth29387() { }
+    public void meth29388() { }
+    public void meth29389() { }
+    public void meth29390() { }
+    public void meth29391() { }
+    public void meth29392() { }
+    public void meth29393() { }
+    public void meth29394() { }
+    public void meth29395() { }
+    public void meth29396() { }
+    public void meth29397() { }
+    public void meth29398() { }
+    public void meth29399() { }
+    public void meth29400() { }
+    public void meth29401() { }
+    public void meth29402() { }
+    public void meth29403() { }
+    public void meth29404() { }
+    public void meth29405() { }
+    public void meth29406() { }
+    public void meth29407() { }
+    public void meth29408() { }
+    public void meth29409() { }
+    public void meth29410() { }
+    public void meth29411() { }
+    public void meth29412() { }
+    public void meth29413() { }
+    public void meth29414() { }
+    public void meth29415() { }
+    public void meth29416() { }
+    public void meth29417() { }
+    public void meth29418() { }
+    public void meth29419() { }
+    public void meth29420() { }
+    public void meth29421() { }
+    public void meth29422() { }
+    public void meth29423() { }
+    public void meth29424() { }
+    public void meth29425() { }
+    public void meth29426() { }
+    public void meth29427() { }
+    public void meth29428() { }
+    public void meth29429() { }
+    public void meth29430() { }
+    public void meth29431() { }
+    public void meth29432() { }
+    public void meth29433() { }
+    public void meth29434() { }
+    public void meth29435() { }
+    public void meth29436() { }
+    public void meth29437() { }
+    public void meth29438() { }
+    public void meth29439() { }
+    public void meth29440() { }
+    public void meth29441() { }
+    public void meth29442() { }
+    public void meth29443() { }
+    public void meth29444() { }
+    public void meth29445() { }
+    public void meth29446() { }
+    public void meth29447() { }
+    public void meth29448() { }
+    public void meth29449() { }
+    public void meth29450() { }
+    public void meth29451() { }
+    public void meth29452() { }
+    public void meth29453() { }
+    public void meth29454() { }
+    public void meth29455() { }
+    public void meth29456() { }
+    public void meth29457() { }
+    public void meth29458() { }
+    public void meth29459() { }
+    public void meth29460() { }
+    public void meth29461() { }
+    public void meth29462() { }
+    public void meth29463() { }
+    public void meth29464() { }
+    public void meth29465() { }
+    public void meth29466() { }
+    public void meth29467() { }
+    public void meth29468() { }
+    public void meth29469() { }
+    public void meth29470() { }
+    public void meth29471() { }
+    public void meth29472() { }
+    public void meth29473() { }
+    public void meth29474() { }
+    public void meth29475() { }
+    public void meth29476() { }
+    public void meth29477() { }
+    public void meth29478() { }
+    public void meth29479() { }
+    public void meth29480() { }
+    public void meth29481() { }
+    public void meth29482() { }
+    public void meth29483() { }
+    public void meth29484() { }
+    public void meth29485() { }
+    public void meth29486() { }
+    public void meth29487() { }
+    public void meth29488() { }
+    public void meth29489() { }
+    public void meth29490() { }
+    public void meth29491() { }
+    public void meth29492() { }
+    public void meth29493() { }
+    public void meth29494() { }
+    public void meth29495() { }
+    public void meth29496() { }
+    public void meth29497() { }
+    public void meth29498() { }
+    public void meth29499() { }
+    public void meth29500() { }
+    public void meth29501() { }
+    public void meth29502() { }
+    public void meth29503() { }
+    public void meth29504() { }
+    public void meth29505() { }
+    public void meth29506() { }
+    public void meth29507() { }
+    public void meth29508() { }
+    public void meth29509() { }
+    public void meth29510() { }
+    public void meth29511() { }
+    public void meth29512() { }
+    public void meth29513() { }
+    public void meth29514() { }
+    public void meth29515() { }
+    public void meth29516() { }
+    public void meth29517() { }
+    public void meth29518() { }
+    public void meth29519() { }
+    public void meth29520() { }
+    public void meth29521() { }
+    public void meth29522() { }
+    public void meth29523() { }
+    public void meth29524() { }
+    public void meth29525() { }
+    public void meth29526() { }
+    public void meth29527() { }
+    public void meth29528() { }
+    public void meth29529() { }
+    public void meth29530() { }
+    public void meth29531() { }
+    public void meth29532() { }
+    public void meth29533() { }
+    public void meth29534() { }
+    public void meth29535() { }
+    public void meth29536() { }
+    public void meth29537() { }
+    public void meth29538() { }
+    public void meth29539() { }
+    public void meth29540() { }
+    public void meth29541() { }
+    public void meth29542() { }
+    public void meth29543() { }
+    public void meth29544() { }
+    public void meth29545() { }
+    public void meth29546() { }
+    public void meth29547() { }
+    public void meth29548() { }
+    public void meth29549() { }
+    public void meth29550() { }
+    public void meth29551() { }
+    public void meth29552() { }
+    public void meth29553() { }
+    public void meth29554() { }
+    public void meth29555() { }
+    public void meth29556() { }
+    public void meth29557() { }
+    public void meth29558() { }
+    public void meth29559() { }
+    public void meth29560() { }
+    public void meth29561() { }
+    public void meth29562() { }
+    public void meth29563() { }
+    public void meth29564() { }
+    public void meth29565() { }
+    public void meth29566() { }
+    public void meth29567() { }
+    public void meth29568() { }
+    public void meth29569() { }
+    public void meth29570() { }
+    public void meth29571() { }
+    public void meth29572() { }
+    public void meth29573() { }
+    public void meth29574() { }
+    public void meth29575() { }
+    public void meth29576() { }
+    public void meth29577() { }
+    public void meth29578() { }
+    public void meth29579() { }
+    public void meth29580() { }
+    public void meth29581() { }
+    public void meth29582() { }
+    public void meth29583() { }
+    public void meth29584() { }
+    public void meth29585() { }
+    public void meth29586() { }
+    public void meth29587() { }
+    public void meth29588() { }
+    public void meth29589() { }
+    public void meth29590() { }
+    public void meth29591() { }
+    public void meth29592() { }
+    public void meth29593() { }
+    public void meth29594() { }
+    public void meth29595() { }
+    public void meth29596() { }
+    public void meth29597() { }
+    public void meth29598() { }
+    public void meth29599() { }
+    public void meth29600() { }
+    public void meth29601() { }
+    public void meth29602() { }
+    public void meth29603() { }
+    public void meth29604() { }
+    public void meth29605() { }
+    public void meth29606() { }
+    public void meth29607() { }
+    public void meth29608() { }
+    public void meth29609() { }
+    public void meth29610() { }
+    public void meth29611() { }
+    public void meth29612() { }
+    public void meth29613() { }
+    public void meth29614() { }
+    public void meth29615() { }
+    public void meth29616() { }
+    public void meth29617() { }
+    public void meth29618() { }
+    public void meth29619() { }
+    public void meth29620() { }
+    public void meth29621() { }
+    public void meth29622() { }
+    public void meth29623() { }
+    public void meth29624() { }
+    public void meth29625() { }
+    public void meth29626() { }
+    public void meth29627() { }
+    public void meth29628() { }
+    public void meth29629() { }
+    public void meth29630() { }
+    public void meth29631() { }
+    public void meth29632() { }
+    public void meth29633() { }
+    public void meth29634() { }
+    public void meth29635() { }
+    public void meth29636() { }
+    public void meth29637() { }
+    public void meth29638() { }
+    public void meth29639() { }
+    public void meth29640() { }
+    public void meth29641() { }
+    public void meth29642() { }
+    public void meth29643() { }
+    public void meth29644() { }
+    public void meth29645() { }
+    public void meth29646() { }
+    public void meth29647() { }
+    public void meth29648() { }
+    public void meth29649() { }
+    public void meth29650() { }
+    public void meth29651() { }
+    public void meth29652() { }
+    public void meth29653() { }
+    public void meth29654() { }
+    public void meth29655() { }
+    public void meth29656() { }
+    public void meth29657() { }
+    public void meth29658() { }
+    public void meth29659() { }
+    public void meth29660() { }
+    public void meth29661() { }
+    public void meth29662() { }
+    public void meth29663() { }
+    public void meth29664() { }
+    public void meth29665() { }
+    public void meth29666() { }
+    public void meth29667() { }
+    public void meth29668() { }
+    public void meth29669() { }
+    public void meth29670() { }
+    public void meth29671() { }
+    public void meth29672() { }
+    public void meth29673() { }
+    public void meth29674() { }
+    public void meth29675() { }
+    public void meth29676() { }
+    public void meth29677() { }
+    public void meth29678() { }
+    public void meth29679() { }
+    public void meth29680() { }
+    public void meth29681() { }
+    public void meth29682() { }
+    public void meth29683() { }
+    public void meth29684() { }
+    public void meth29685() { }
+    public void meth29686() { }
+    public void meth29687() { }
+    public void meth29688() { }
+    public void meth29689() { }
+    public void meth29690() { }
+    public void meth29691() { }
+    public void meth29692() { }
+    public void meth29693() { }
+    public void meth29694() { }
+    public void meth29695() { }
+    public void meth29696() { }
+    public void meth29697() { }
+    public void meth29698() { }
+    public void meth29699() { }
+    public void meth29700() { }
+    public void meth29701() { }
+    public void meth29702() { }
+    public void meth29703() { }
+    public void meth29704() { }
+    public void meth29705() { }
+    public void meth29706() { }
+    public void meth29707() { }
+    public void meth29708() { }
+    public void meth29709() { }
+    public void meth29710() { }
+    public void meth29711() { }
+    public void meth29712() { }
+    public void meth29713() { }
+    public void meth29714() { }
+    public void meth29715() { }
+    public void meth29716() { }
+    public void meth29717() { }
+    public void meth29718() { }
+    public void meth29719() { }
+    public void meth29720() { }
+    public void meth29721() { }
+    public void meth29722() { }
+    public void meth29723() { }
+    public void meth29724() { }
+    public void meth29725() { }
+    public void meth29726() { }
+    public void meth29727() { }
+    public void meth29728() { }
+    public void meth29729() { }
+    public void meth29730() { }
+    public void meth29731() { }
+    public void meth29732() { }
+    public void meth29733() { }
+    public void meth29734() { }
+    public void meth29735() { }
+    public void meth29736() { }
+    public void meth29737() { }
+    public void meth29738() { }
+    public void meth29739() { }
+    public void meth29740() { }
+    public void meth29741() { }
+    public void meth29742() { }
+    public void meth29743() { }
+    public void meth29744() { }
+    public void meth29745() { }
+    public void meth29746() { }
+    public void meth29747() { }
+    public void meth29748() { }
+    public void meth29749() { }
+    public void meth29750() { }
+    public void meth29751() { }
+    public void meth29752() { }
+    public void meth29753() { }
+    public void meth29754() { }
+    public void meth29755() { }
+    public void meth29756() { }
+    public void meth29757() { }
+    public void meth29758() { }
+    public void meth29759() { }
+    public void meth29760() { }
+    public void meth29761() { }
+    public void meth29762() { }
+    public void meth29763() { }
+    public void meth29764() { }
+    public void meth29765() { }
+    public void meth29766() { }
+    public void meth29767() { }
+    public void meth29768() { }
+    public void meth29769() { }
+    public void meth29770() { }
+    public void meth29771() { }
+    public void meth29772() { }
+    public void meth29773() { }
+    public void meth29774() { }
+    public void meth29775() { }
+    public void meth29776() { }
+    public void meth29777() { }
+    public void meth29778() { }
+    public void meth29779() { }
+    public void meth29780() { }
+    public void meth29781() { }
+    public void meth29782() { }
+    public void meth29783() { }
+    public void meth29784() { }
+    public void meth29785() { }
+    public void meth29786() { }
+    public void meth29787() { }
+    public void meth29788() { }
+    public void meth29789() { }
+    public void meth29790() { }
+    public void meth29791() { }
+    public void meth29792() { }
+    public void meth29793() { }
+    public void meth29794() { }
+    public void meth29795() { }
+    public void meth29796() { }
+    public void meth29797() { }
+    public void meth29798() { }
+    public void meth29799() { }
+    public void meth29800() { }
+    public void meth29801() { }
+    public void meth29802() { }
+    public void meth29803() { }
+    public void meth29804() { }
+    public void meth29805() { }
+    public void meth29806() { }
+    public void meth29807() { }
+    public void meth29808() { }
+    public void meth29809() { }
+    public void meth29810() { }
+    public void meth29811() { }
+    public void meth29812() { }
+    public void meth29813() { }
+    public void meth29814() { }
+    public void meth29815() { }
+    public void meth29816() { }
+    public void meth29817() { }
+    public void meth29818() { }
+    public void meth29819() { }
+    public void meth29820() { }
+    public void meth29821() { }
+    public void meth29822() { }
+    public void meth29823() { }
+    public void meth29824() { }
+    public void meth29825() { }
+    public void meth29826() { }
+    public void meth29827() { }
+    public void meth29828() { }
+    public void meth29829() { }
+    public void meth29830() { }
+    public void meth29831() { }
+    public void meth29832() { }
+    public void meth29833() { }
+    public void meth29834() { }
+    public void meth29835() { }
+    public void meth29836() { }
+    public void meth29837() { }
+    public void meth29838() { }
+    public void meth29839() { }
+    public void meth29840() { }
+    public void meth29841() { }
+    public void meth29842() { }
+    public void meth29843() { }
+    public void meth29844() { }
+    public void meth29845() { }
+    public void meth29846() { }
+    public void meth29847() { }
+    public void meth29848() { }
+    public void meth29849() { }
+    public void meth29850() { }
+    public void meth29851() { }
+    public void meth29852() { }
+    public void meth29853() { }
+    public void meth29854() { }
+    public void meth29855() { }
+    public void meth29856() { }
+    public void meth29857() { }
+    public void meth29858() { }
+    public void meth29859() { }
+    public void meth29860() { }
+    public void meth29861() { }
+    public void meth29862() { }
+    public void meth29863() { }
+    public void meth29864() { }
+    public void meth29865() { }
+    public void meth29866() { }
+    public void meth29867() { }
+    public void meth29868() { }
+    public void meth29869() { }
+    public void meth29870() { }
+    public void meth29871() { }
+    public void meth29872() { }
+    public void meth29873() { }
+    public void meth29874() { }
+    public void meth29875() { }
+    public void meth29876() { }
+    public void meth29877() { }
+    public void meth29878() { }
+    public void meth29879() { }
+    public void meth29880() { }
+    public void meth29881() { }
+    public void meth29882() { }
+    public void meth29883() { }
+    public void meth29884() { }
+    public void meth29885() { }
+    public void meth29886() { }
+    public void meth29887() { }
+    public void meth29888() { }
+    public void meth29889() { }
+    public void meth29890() { }
+    public void meth29891() { }
+    public void meth29892() { }
+    public void meth29893() { }
+    public void meth29894() { }
+    public void meth29895() { }
+    public void meth29896() { }
+    public void meth29897() { }
+    public void meth29898() { }
+    public void meth29899() { }
+    public void meth29900() { }
+    public void meth29901() { }
+    public void meth29902() { }
+    public void meth29903() { }
+    public void meth29904() { }
+    public void meth29905() { }
+    public void meth29906() { }
+    public void meth29907() { }
+    public void meth29908() { }
+    public void meth29909() { }
+    public void meth29910() { }
+    public void meth29911() { }
+    public void meth29912() { }
+    public void meth29913() { }
+    public void meth29914() { }
+    public void meth29915() { }
+    public void meth29916() { }
+    public void meth29917() { }
+    public void meth29918() { }
+    public void meth29919() { }
+    public void meth29920() { }
+    public void meth29921() { }
+    public void meth29922() { }
+    public void meth29923() { }
+    public void meth29924() { }
+    public void meth29925() { }
+    public void meth29926() { }
+    public void meth29927() { }
+    public void meth29928() { }
+    public void meth29929() { }
+    public void meth29930() { }
+    public void meth29931() { }
+    public void meth29932() { }
+    public void meth29933() { }
+    public void meth29934() { }
+    public void meth29935() { }
+    public void meth29936() { }
+    public void meth29937() { }
+    public void meth29938() { }
+    public void meth29939() { }
+    public void meth29940() { }
+    public void meth29941() { }
+    public void meth29942() { }
+    public void meth29943() { }
+    public void meth29944() { }
+    public void meth29945() { }
+    public void meth29946() { }
+    public void meth29947() { }
+    public void meth29948() { }
+    public void meth29949() { }
+    public void meth29950() { }
+    public void meth29951() { }
+    public void meth29952() { }
+    public void meth29953() { }
+    public void meth29954() { }
+    public void meth29955() { }
+    public void meth29956() { }
+    public void meth29957() { }
+    public void meth29958() { }
+    public void meth29959() { }
+    public void meth29960() { }
+    public void meth29961() { }
+    public void meth29962() { }
+    public void meth29963() { }
+    public void meth29964() { }
+    public void meth29965() { }
+    public void meth29966() { }
+    public void meth29967() { }
+    public void meth29968() { }
+    public void meth29969() { }
+    public void meth29970() { }
+    public void meth29971() { }
+    public void meth29972() { }
+    public void meth29973() { }
+    public void meth29974() { }
+    public void meth29975() { }
+    public void meth29976() { }
+    public void meth29977() { }
+    public void meth29978() { }
+    public void meth29979() { }
+    public void meth29980() { }
+    public void meth29981() { }
+    public void meth29982() { }
+    public void meth29983() { }
+    public void meth29984() { }
+    public void meth29985() { }
+    public void meth29986() { }
+    public void meth29987() { }
+    public void meth29988() { }
+    public void meth29989() { }
+    public void meth29990() { }
+    public void meth29991() { }
+    public void meth29992() { }
+    public void meth29993() { }
+    public void meth29994() { }
+    public void meth29995() { }
+    public void meth29996() { }
+    public void meth29997() { }
+    public void meth29998() { }
+    public void meth29999() { }
+    public void meth30000() { }
+    public void meth30001() { }
+    public void meth30002() { }
+    public void meth30003() { }
+    public void meth30004() { }
+    public void meth30005() { }
+    public void meth30006() { }
+    public void meth30007() { }
+    public void meth30008() { }
+    public void meth30009() { }
+    public void meth30010() { }
+    public void meth30011() { }
+    public void meth30012() { }
+    public void meth30013() { }
+    public void meth30014() { }
+    public void meth30015() { }
+    public void meth30016() { }
+    public void meth30017() { }
+    public void meth30018() { }
+    public void meth30019() { }
+    public void meth30020() { }
+    public void meth30021() { }
+    public void meth30022() { }
+    public void meth30023() { }
+    public void meth30024() { }
+    public void meth30025() { }
+    public void meth30026() { }
+    public void meth30027() { }
+    public void meth30028() { }
+    public void meth30029() { }
+    public void meth30030() { }
+    public void meth30031() { }
+    public void meth30032() { }
+    public void meth30033() { }
+    public void meth30034() { }
+    public void meth30035() { }
+    public void meth30036() { }
+    public void meth30037() { }
+    public void meth30038() { }
+    public void meth30039() { }
+    public void meth30040() { }
+    public void meth30041() { }
+    public void meth30042() { }
+    public void meth30043() { }
+    public void meth30044() { }
+    public void meth30045() { }
+    public void meth30046() { }
+    public void meth30047() { }
+    public void meth30048() { }
+    public void meth30049() { }
+    public void meth30050() { }
+    public void meth30051() { }
+    public void meth30052() { }
+    public void meth30053() { }
+    public void meth30054() { }
+    public void meth30055() { }
+    public void meth30056() { }
+    public void meth30057() { }
+    public void meth30058() { }
+    public void meth30059() { }
+    public void meth30060() { }
+    public void meth30061() { }
+    public void meth30062() { }
+    public void meth30063() { }
+    public void meth30064() { }
+    public void meth30065() { }
+    public void meth30066() { }
+    public void meth30067() { }
+    public void meth30068() { }
+    public void meth30069() { }
+    public void meth30070() { }
+    public void meth30071() { }
+    public void meth30072() { }
+    public void meth30073() { }
+    public void meth30074() { }
+    public void meth30075() { }
+    public void meth30076() { }
+    public void meth30077() { }
+    public void meth30078() { }
+    public void meth30079() { }
+    public void meth30080() { }
+    public void meth30081() { }
+    public void meth30082() { }
+    public void meth30083() { }
+    public void meth30084() { }
+    public void meth30085() { }
+    public void meth30086() { }
+    public void meth30087() { }
+    public void meth30088() { }
+    public void meth30089() { }
+    public void meth30090() { }
+    public void meth30091() { }
+    public void meth30092() { }
+    public void meth30093() { }
+    public void meth30094() { }
+    public void meth30095() { }
+    public void meth30096() { }
+    public void meth30097() { }
+    public void meth30098() { }
+    public void meth30099() { }
+    public void meth30100() { }
+    public void meth30101() { }
+    public void meth30102() { }
+    public void meth30103() { }
+    public void meth30104() { }
+    public void meth30105() { }
+    public void meth30106() { }
+    public void meth30107() { }
+    public void meth30108() { }
+    public void meth30109() { }
+    public void meth30110() { }
+    public void meth30111() { }
+    public void meth30112() { }
+    public void meth30113() { }
+    public void meth30114() { }
+    public void meth30115() { }
+    public void meth30116() { }
+    public void meth30117() { }
+    public void meth30118() { }
+    public void meth30119() { }
+    public void meth30120() { }
+    public void meth30121() { }
+    public void meth30122() { }
+    public void meth30123() { }
+    public void meth30124() { }
+    public void meth30125() { }
+    public void meth30126() { }
+    public void meth30127() { }
+    public void meth30128() { }
+    public void meth30129() { }
+    public void meth30130() { }
+    public void meth30131() { }
+    public void meth30132() { }
+    public void meth30133() { }
+    public void meth30134() { }
+    public void meth30135() { }
+    public void meth30136() { }
+    public void meth30137() { }
+    public void meth30138() { }
+    public void meth30139() { }
+    public void meth30140() { }
+    public void meth30141() { }
+    public void meth30142() { }
+    public void meth30143() { }
+    public void meth30144() { }
+    public void meth30145() { }
+    public void meth30146() { }
+    public void meth30147() { }
+    public void meth30148() { }
+    public void meth30149() { }
+    public void meth30150() { }
+    public void meth30151() { }
+    public void meth30152() { }
+    public void meth30153() { }
+    public void meth30154() { }
+    public void meth30155() { }
+    public void meth30156() { }
+    public void meth30157() { }
+    public void meth30158() { }
+    public void meth30159() { }
+    public void meth30160() { }
+    public void meth30161() { }
+    public void meth30162() { }
+    public void meth30163() { }
+    public void meth30164() { }
+    public void meth30165() { }
+    public void meth30166() { }
+    public void meth30167() { }
+    public void meth30168() { }
+    public void meth30169() { }
+    public void meth30170() { }
+    public void meth30171() { }
+    public void meth30172() { }
+    public void meth30173() { }
+    public void meth30174() { }
+    public void meth30175() { }
+    public void meth30176() { }
+    public void meth30177() { }
+    public void meth30178() { }
+    public void meth30179() { }
+    public void meth30180() { }
+    public void meth30181() { }
+    public void meth30182() { }
+    public void meth30183() { }
+    public void meth30184() { }
+    public void meth30185() { }
+    public void meth30186() { }
+    public void meth30187() { }
+    public void meth30188() { }
+    public void meth30189() { }
+    public void meth30190() { }
+    public void meth30191() { }
+    public void meth30192() { }
+    public void meth30193() { }
+    public void meth30194() { }
+    public void meth30195() { }
+    public void meth30196() { }
+    public void meth30197() { }
+    public void meth30198() { }
+    public void meth30199() { }
+    public void meth30200() { }
+    public void meth30201() { }
+    public void meth30202() { }
+    public void meth30203() { }
+    public void meth30204() { }
+    public void meth30205() { }
+    public void meth30206() { }
+    public void meth30207() { }
+    public void meth30208() { }
+    public void meth30209() { }
+    public void meth30210() { }
+    public void meth30211() { }
+    public void meth30212() { }
+    public void meth30213() { }
+    public void meth30214() { }
+    public void meth30215() { }
+    public void meth30216() { }
+    public void meth30217() { }
+    public void meth30218() { }
+    public void meth30219() { }
+    public void meth30220() { }
+    public void meth30221() { }
+    public void meth30222() { }
+    public void meth30223() { }
+    public void meth30224() { }
+    public void meth30225() { }
+    public void meth30226() { }
+    public void meth30227() { }
+    public void meth30228() { }
+    public void meth30229() { }
+    public void meth30230() { }
+    public void meth30231() { }
+    public void meth30232() { }
+    public void meth30233() { }
+    public void meth30234() { }
+    public void meth30235() { }
+    public void meth30236() { }
+    public void meth30237() { }
+    public void meth30238() { }
+    public void meth30239() { }
+    public void meth30240() { }
+    public void meth30241() { }
+    public void meth30242() { }
+    public void meth30243() { }
+    public void meth30244() { }
+    public void meth30245() { }
+    public void meth30246() { }
+    public void meth30247() { }
+    public void meth30248() { }
+    public void meth30249() { }
+    public void meth30250() { }
+    public void meth30251() { }
+    public void meth30252() { }
+    public void meth30253() { }
+    public void meth30254() { }
+    public void meth30255() { }
+    public void meth30256() { }
+    public void meth30257() { }
+    public void meth30258() { }
+    public void meth30259() { }
+    public void meth30260() { }
+    public void meth30261() { }
+    public void meth30262() { }
+    public void meth30263() { }
+    public void meth30264() { }
+    public void meth30265() { }
+    public void meth30266() { }
+    public void meth30267() { }
+    public void meth30268() { }
+    public void meth30269() { }
+    public void meth30270() { }
+    public void meth30271() { }
+    public void meth30272() { }
+    public void meth30273() { }
+    public void meth30274() { }
+    public void meth30275() { }
+    public void meth30276() { }
+    public void meth30277() { }
+    public void meth30278() { }
+    public void meth30279() { }
+    public void meth30280() { }
+    public void meth30281() { }
+    public void meth30282() { }
+    public void meth30283() { }
+    public void meth30284() { }
+    public void meth30285() { }
+    public void meth30286() { }
+    public void meth30287() { }
+    public void meth30288() { }
+    public void meth30289() { }
+    public void meth30290() { }
+    public void meth30291() { }
+    public void meth30292() { }
+    public void meth30293() { }
+    public void meth30294() { }
+    public void meth30295() { }
+    public void meth30296() { }
+    public void meth30297() { }
+    public void meth30298() { }
+    public void meth30299() { }
+    public void meth30300() { }
+    public void meth30301() { }
+    public void meth30302() { }
+    public void meth30303() { }
+    public void meth30304() { }
+    public void meth30305() { }
+    public void meth30306() { }
+    public void meth30307() { }
+    public void meth30308() { }
+    public void meth30309() { }
+    public void meth30310() { }
+    public void meth30311() { }
+    public void meth30312() { }
+    public void meth30313() { }
+    public void meth30314() { }
+    public void meth30315() { }
+    public void meth30316() { }
+    public void meth30317() { }
+    public void meth30318() { }
+    public void meth30319() { }
+    public void meth30320() { }
+    public void meth30321() { }
+    public void meth30322() { }
+    public void meth30323() { }
+    public void meth30324() { }
+    public void meth30325() { }
+    public void meth30326() { }
+    public void meth30327() { }
+    public void meth30328() { }
+    public void meth30329() { }
+    public void meth30330() { }
+    public void meth30331() { }
+    public void meth30332() { }
+    public void meth30333() { }
+    public void meth30334() { }
+    public void meth30335() { }
+    public void meth30336() { }
+    public void meth30337() { }
+    public void meth30338() { }
+    public void meth30339() { }
+    public void meth30340() { }
+    public void meth30341() { }
+    public void meth30342() { }
+    public void meth30343() { }
+    public void meth30344() { }
+    public void meth30345() { }
+    public void meth30346() { }
+    public void meth30347() { }
+    public void meth30348() { }
+    public void meth30349() { }
+    public void meth30350() { }
+    public void meth30351() { }
+    public void meth30352() { }
+    public void meth30353() { }
+    public void meth30354() { }
+    public void meth30355() { }
+    public void meth30356() { }
+    public void meth30357() { }
+    public void meth30358() { }
+    public void meth30359() { }
+    public void meth30360() { }
+    public void meth30361() { }
+    public void meth30362() { }
+    public void meth30363() { }
+    public void meth30364() { }
+    public void meth30365() { }
+    public void meth30366() { }
+    public void meth30367() { }
+    public void meth30368() { }
+    public void meth30369() { }
+    public void meth30370() { }
+    public void meth30371() { }
+    public void meth30372() { }
+    public void meth30373() { }
+    public void meth30374() { }
+    public void meth30375() { }
+    public void meth30376() { }
+    public void meth30377() { }
+    public void meth30378() { }
+    public void meth30379() { }
+    public void meth30380() { }
+    public void meth30381() { }
+    public void meth30382() { }
+    public void meth30383() { }
+    public void meth30384() { }
+    public void meth30385() { }
+    public void meth30386() { }
+    public void meth30387() { }
+    public void meth30388() { }
+    public void meth30389() { }
+    public void meth30390() { }
+    public void meth30391() { }
+    public void meth30392() { }
+    public void meth30393() { }
+    public void meth30394() { }
+    public void meth30395() { }
+    public void meth30396() { }
+    public void meth30397() { }
+    public void meth30398() { }
+    public void meth30399() { }
+    public void meth30400() { }
+    public void meth30401() { }
+    public void meth30402() { }
+    public void meth30403() { }
+    public void meth30404() { }
+    public void meth30405() { }
+    public void meth30406() { }
+    public void meth30407() { }
+    public void meth30408() { }
+    public void meth30409() { }
+    public void meth30410() { }
+    public void meth30411() { }
+    public void meth30412() { }
+    public void meth30413() { }
+    public void meth30414() { }
+    public void meth30415() { }
+    public void meth30416() { }
+    public void meth30417() { }
+    public void meth30418() { }
+    public void meth30419() { }
+    public void meth30420() { }
+    public void meth30421() { }
+    public void meth30422() { }
+    public void meth30423() { }
+    public void meth30424() { }
+    public void meth30425() { }
+    public void meth30426() { }
+    public void meth30427() { }
+    public void meth30428() { }
+    public void meth30429() { }
+    public void meth30430() { }
+    public void meth30431() { }
+    public void meth30432() { }
+    public void meth30433() { }
+    public void meth30434() { }
+    public void meth30435() { }
+    public void meth30436() { }
+    public void meth30437() { }
+    public void meth30438() { }
+    public void meth30439() { }
+    public void meth30440() { }
+    public void meth30441() { }
+    public void meth30442() { }
+    public void meth30443() { }
+    public void meth30444() { }
+    public void meth30445() { }
+    public void meth30446() { }
+    public void meth30447() { }
+    public void meth30448() { }
+    public void meth30449() { }
+    public void meth30450() { }
+    public void meth30451() { }
+    public void meth30452() { }
+    public void meth30453() { }
+    public void meth30454() { }
+    public void meth30455() { }
+    public void meth30456() { }
+    public void meth30457() { }
+    public void meth30458() { }
+    public void meth30459() { }
+    public void meth30460() { }
+    public void meth30461() { }
+    public void meth30462() { }
+    public void meth30463() { }
+    public void meth30464() { }
+    public void meth30465() { }
+    public void meth30466() { }
+    public void meth30467() { }
+    public void meth30468() { }
+    public void meth30469() { }
+    public void meth30470() { }
+    public void meth30471() { }
+    public void meth30472() { }
+    public void meth30473() { }
+    public void meth30474() { }
+    public void meth30475() { }
+    public void meth30476() { }
+    public void meth30477() { }
+    public void meth30478() { }
+    public void meth30479() { }
+    public void meth30480() { }
+    public void meth30481() { }
+    public void meth30482() { }
+    public void meth30483() { }
+    public void meth30484() { }
+    public void meth30485() { }
+    public void meth30486() { }
+    public void meth30487() { }
+    public void meth30488() { }
+    public void meth30489() { }
+    public void meth30490() { }
+    public void meth30491() { }
+    public void meth30492() { }
+    public void meth30493() { }
+    public void meth30494() { }
+    public void meth30495() { }
+    public void meth30496() { }
+    public void meth30497() { }
+    public void meth30498() { }
+    public void meth30499() { }
+    public void meth30500() { }
+    public void meth30501() { }
+    public void meth30502() { }
+    public void meth30503() { }
+    public void meth30504() { }
+    public void meth30505() { }
+    public void meth30506() { }
+    public void meth30507() { }
+    public void meth30508() { }
+    public void meth30509() { }
+    public void meth30510() { }
+    public void meth30511() { }
+    public void meth30512() { }
+    public void meth30513() { }
+    public void meth30514() { }
+    public void meth30515() { }
+    public void meth30516() { }
+    public void meth30517() { }
+    public void meth30518() { }
+    public void meth30519() { }
+    public void meth30520() { }
+    public void meth30521() { }
+    public void meth30522() { }
+    public void meth30523() { }
+    public void meth30524() { }
+    public void meth30525() { }
+    public void meth30526() { }
+    public void meth30527() { }
+    public void meth30528() { }
+    public void meth30529() { }
+    public void meth30530() { }
+    public void meth30531() { }
+    public void meth30532() { }
+    public void meth30533() { }
+    public void meth30534() { }
+    public void meth30535() { }
+    public void meth30536() { }
+    public void meth30537() { }
+    public void meth30538() { }
+    public void meth30539() { }
+    public void meth30540() { }
+    public void meth30541() { }
+    public void meth30542() { }
+    public void meth30543() { }
+    public void meth30544() { }
+    public void meth30545() { }
+    public void meth30546() { }
+    public void meth30547() { }
+    public void meth30548() { }
+    public void meth30549() { }
+    public void meth30550() { }
+    public void meth30551() { }
+    public void meth30552() { }
+    public void meth30553() { }
+    public void meth30554() { }
+    public void meth30555() { }
+    public void meth30556() { }
+    public void meth30557() { }
+    public void meth30558() { }
+    public void meth30559() { }
+    public void meth30560() { }
+    public void meth30561() { }
+    public void meth30562() { }
+    public void meth30563() { }
+    public void meth30564() { }
+    public void meth30565() { }
+    public void meth30566() { }
+    public void meth30567() { }
+    public void meth30568() { }
+    public void meth30569() { }
+    public void meth30570() { }
+    public void meth30571() { }
+    public void meth30572() { }
+    public void meth30573() { }
+    public void meth30574() { }
+    public void meth30575() { }
+    public void meth30576() { }
+    public void meth30577() { }
+    public void meth30578() { }
+    public void meth30579() { }
+    public void meth30580() { }
+    public void meth30581() { }
+    public void meth30582() { }
+    public void meth30583() { }
+    public void meth30584() { }
+    public void meth30585() { }
+    public void meth30586() { }
+    public void meth30587() { }
+    public void meth30588() { }
+    public void meth30589() { }
+    public void meth30590() { }
+    public void meth30591() { }
+    public void meth30592() { }
+    public void meth30593() { }
+    public void meth30594() { }
+    public void meth30595() { }
+    public void meth30596() { }
+    public void meth30597() { }
+    public void meth30598() { }
+    public void meth30599() { }
+    public void meth30600() { }
+    public void meth30601() { }
+    public void meth30602() { }
+    public void meth30603() { }
+    public void meth30604() { }
+    public void meth30605() { }
+    public void meth30606() { }
+    public void meth30607() { }
+    public void meth30608() { }
+    public void meth30609() { }
+    public void meth30610() { }
+    public void meth30611() { }
+    public void meth30612() { }
+    public void meth30613() { }
+    public void meth30614() { }
+    public void meth30615() { }
+    public void meth30616() { }
+    public void meth30617() { }
+    public void meth30618() { }
+    public void meth30619() { }
+    public void meth30620() { }
+    public void meth30621() { }
+    public void meth30622() { }
+    public void meth30623() { }
+    public void meth30624() { }
+    public void meth30625() { }
+    public void meth30626() { }
+    public void meth30627() { }
+    public void meth30628() { }
+    public void meth30629() { }
+    public void meth30630() { }
+    public void meth30631() { }
+    public void meth30632() { }
+    public void meth30633() { }
+    public void meth30634() { }
+    public void meth30635() { }
+    public void meth30636() { }
+    public void meth30637() { }
+    public void meth30638() { }
+    public void meth30639() { }
+    public void meth30640() { }
+    public void meth30641() { }
+    public void meth30642() { }
+    public void meth30643() { }
+    public void meth30644() { }
+    public void meth30645() { }
+    public void meth30646() { }
+    public void meth30647() { }
+    public void meth30648() { }
+    public void meth30649() { }
+    public void meth30650() { }
+    public void meth30651() { }
+    public void meth30652() { }
+    public void meth30653() { }
+    public void meth30654() { }
+    public void meth30655() { }
+    public void meth30656() { }
+    public void meth30657() { }
+    public void meth30658() { }
+    public void meth30659() { }
+    public void meth30660() { }
+    public void meth30661() { }
+    public void meth30662() { }
+    public void meth30663() { }
+    public void meth30664() { }
+    public void meth30665() { }
+    public void meth30666() { }
+    public void meth30667() { }
+    public void meth30668() { }
+    public void meth30669() { }
+    public void meth30670() { }
+    public void meth30671() { }
+    public void meth30672() { }
+    public void meth30673() { }
+    public void meth30674() { }
+    public void meth30675() { }
+    public void meth30676() { }
+    public void meth30677() { }
+    public void meth30678() { }
+    public void meth30679() { }
+    public void meth30680() { }
+    public void meth30681() { }
+    public void meth30682() { }
+    public void meth30683() { }
+    public void meth30684() { }
+    public void meth30685() { }
+    public void meth30686() { }
+    public void meth30687() { }
+    public void meth30688() { }
+    public void meth30689() { }
+    public void meth30690() { }
+    public void meth30691() { }
+    public void meth30692() { }
+    public void meth30693() { }
+    public void meth30694() { }
+    public void meth30695() { }
+    public void meth30696() { }
+    public void meth30697() { }
+    public void meth30698() { }
+    public void meth30699() { }
+    public void meth30700() { }
+    public void meth30701() { }
+    public void meth30702() { }
+    public void meth30703() { }
+    public void meth30704() { }
+    public void meth30705() { }
+    public void meth30706() { }
+    public void meth30707() { }
+    public void meth30708() { }
+    public void meth30709() { }
+    public void meth30710() { }
+    public void meth30711() { }
+    public void meth30712() { }
+    public void meth30713() { }
+    public void meth30714() { }
+    public void meth30715() { }
+    public void meth30716() { }
+    public void meth30717() { }
+    public void meth30718() { }
+    public void meth30719() { }
+    public void meth30720() { }
+    public void meth30721() { }
+    public void meth30722() { }
+    public void meth30723() { }
+    public void meth30724() { }
+    public void meth30725() { }
+    public void meth30726() { }
+    public void meth30727() { }
+    public void meth30728() { }
+    public void meth30729() { }
+    public void meth30730() { }
+    public void meth30731() { }
+    public void meth30732() { }
+    public void meth30733() { }
+    public void meth30734() { }
+    public void meth30735() { }
+    public void meth30736() { }
+    public void meth30737() { }
+    public void meth30738() { }
+    public void meth30739() { }
+    public void meth30740() { }
+    public void meth30741() { }
+    public void meth30742() { }
+    public void meth30743() { }
+    public void meth30744() { }
+    public void meth30745() { }
+    public void meth30746() { }
+    public void meth30747() { }
+    public void meth30748() { }
+    public void meth30749() { }
+    public void meth30750() { }
+    public void meth30751() { }
+    public void meth30752() { }
+    public void meth30753() { }
+    public void meth30754() { }
+    public void meth30755() { }
+    public void meth30756() { }
+    public void meth30757() { }
+    public void meth30758() { }
+    public void meth30759() { }
+    public void meth30760() { }
+    public void meth30761() { }
+    public void meth30762() { }
+    public void meth30763() { }
+    public void meth30764() { }
+    public void meth30765() { }
+    public void meth30766() { }
+    public void meth30767() { }
+    public void meth30768() { }
+    public void meth30769() { }
+    public void meth30770() { }
+    public void meth30771() { }
+    public void meth30772() { }
+    public void meth30773() { }
+    public void meth30774() { }
+    public void meth30775() { }
+    public void meth30776() { }
+    public void meth30777() { }
+    public void meth30778() { }
+    public void meth30779() { }
+    public void meth30780() { }
+    public void meth30781() { }
+    public void meth30782() { }
+    public void meth30783() { }
+    public void meth30784() { }
+    public void meth30785() { }
+    public void meth30786() { }
+    public void meth30787() { }
+    public void meth30788() { }
+    public void meth30789() { }
+    public void meth30790() { }
+    public void meth30791() { }
+    public void meth30792() { }
+    public void meth30793() { }
+    public void meth30794() { }
+    public void meth30795() { }
+    public void meth30796() { }
+    public void meth30797() { }
+    public void meth30798() { }
+    public void meth30799() { }
+    public void meth30800() { }
+    public void meth30801() { }
+    public void meth30802() { }
+    public void meth30803() { }
+    public void meth30804() { }
+    public void meth30805() { }
+    public void meth30806() { }
+    public void meth30807() { }
+    public void meth30808() { }
+    public void meth30809() { }
+    public void meth30810() { }
+    public void meth30811() { }
+    public void meth30812() { }
+    public void meth30813() { }
+    public void meth30814() { }
+    public void meth30815() { }
+    public void meth30816() { }
+    public void meth30817() { }
+    public void meth30818() { }
+    public void meth30819() { }
+    public void meth30820() { }
+    public void meth30821() { }
+    public void meth30822() { }
+    public void meth30823() { }
+    public void meth30824() { }
+    public void meth30825() { }
+    public void meth30826() { }
+    public void meth30827() { }
+    public void meth30828() { }
+    public void meth30829() { }
+    public void meth30830() { }
+    public void meth30831() { }
+    public void meth30832() { }
+    public void meth30833() { }
+    public void meth30834() { }
+    public void meth30835() { }
+    public void meth30836() { }
+    public void meth30837() { }
+    public void meth30838() { }
+    public void meth30839() { }
+    public void meth30840() { }
+    public void meth30841() { }
+    public void meth30842() { }
+    public void meth30843() { }
+    public void meth30844() { }
+    public void meth30845() { }
+    public void meth30846() { }
+    public void meth30847() { }
+    public void meth30848() { }
+    public void meth30849() { }
+    public void meth30850() { }
+    public void meth30851() { }
+    public void meth30852() { }
+    public void meth30853() { }
+    public void meth30854() { }
+    public void meth30855() { }
+    public void meth30856() { }
+    public void meth30857() { }
+    public void meth30858() { }
+    public void meth30859() { }
+    public void meth30860() { }
+    public void meth30861() { }
+    public void meth30862() { }
+    public void meth30863() { }
+    public void meth30864() { }
+    public void meth30865() { }
+    public void meth30866() { }
+    public void meth30867() { }
+    public void meth30868() { }
+    public void meth30869() { }
+    public void meth30870() { }
+    public void meth30871() { }
+    public void meth30872() { }
+    public void meth30873() { }
+    public void meth30874() { }
+    public void meth30875() { }
+    public void meth30876() { }
+    public void meth30877() { }
+    public void meth30878() { }
+    public void meth30879() { }
+    public void meth30880() { }
+    public void meth30881() { }
+    public void meth30882() { }
+    public void meth30883() { }
+    public void meth30884() { }
+    public void meth30885() { }
+    public void meth30886() { }
+    public void meth30887() { }
+    public void meth30888() { }
+    public void meth30889() { }
+    public void meth30890() { }
+    public void meth30891() { }
+    public void meth30892() { }
+    public void meth30893() { }
+    public void meth30894() { }
+    public void meth30895() { }
+    public void meth30896() { }
+    public void meth30897() { }
+    public void meth30898() { }
+    public void meth30899() { }
+    public void meth30900() { }
+    public void meth30901() { }
+    public void meth30902() { }
+    public void meth30903() { }
+    public void meth30904() { }
+    public void meth30905() { }
+    public void meth30906() { }
+    public void meth30907() { }
+    public void meth30908() { }
+    public void meth30909() { }
+    public void meth30910() { }
+    public void meth30911() { }
+    public void meth30912() { }
+    public void meth30913() { }
+    public void meth30914() { }
+    public void meth30915() { }
+    public void meth30916() { }
+    public void meth30917() { }
+    public void meth30918() { }
+    public void meth30919() { }
+    public void meth30920() { }
+    public void meth30921() { }
+    public void meth30922() { }
+    public void meth30923() { }
+    public void meth30924() { }
+    public void meth30925() { }
+    public void meth30926() { }
+    public void meth30927() { }
+    public void meth30928() { }
+    public void meth30929() { }
+    public void meth30930() { }
+    public void meth30931() { }
+    public void meth30932() { }
+    public void meth30933() { }
+    public void meth30934() { }
+    public void meth30935() { }
+    public void meth30936() { }
+    public void meth30937() { }
+    public void meth30938() { }
+    public void meth30939() { }
+    public void meth30940() { }
+    public void meth30941() { }
+    public void meth30942() { }
+    public void meth30943() { }
+    public void meth30944() { }
+    public void meth30945() { }
+    public void meth30946() { }
+    public void meth30947() { }
+    public void meth30948() { }
+    public void meth30949() { }
+    public void meth30950() { }
+    public void meth30951() { }
+    public void meth30952() { }
+    public void meth30953() { }
+    public void meth30954() { }
+    public void meth30955() { }
+    public void meth30956() { }
+    public void meth30957() { }
+    public void meth30958() { }
+    public void meth30959() { }
+    public void meth30960() { }
+    public void meth30961() { }
+    public void meth30962() { }
+    public void meth30963() { }
+    public void meth30964() { }
+    public void meth30965() { }
+    public void meth30966() { }
+    public void meth30967() { }
+    public void meth30968() { }
+    public void meth30969() { }
+    public void meth30970() { }
+    public void meth30971() { }
+    public void meth30972() { }
+    public void meth30973() { }
+    public void meth30974() { }
+    public void meth30975() { }
+    public void meth30976() { }
+    public void meth30977() { }
+    public void meth30978() { }
+    public void meth30979() { }
+    public void meth30980() { }
+    public void meth30981() { }
+    public void meth30982() { }
+    public void meth30983() { }
+    public void meth30984() { }
+    public void meth30985() { }
+    public void meth30986() { }
+    public void meth30987() { }
+    public void meth30988() { }
+    public void meth30989() { }
+    public void meth30990() { }
+    public void meth30991() { }
+    public void meth30992() { }
+    public void meth30993() { }
+    public void meth30994() { }
+    public void meth30995() { }
+    public void meth30996() { }
+    public void meth30997() { }
+    public void meth30998() { }
+    public void meth30999() { }
+    public void meth31000() { }
+    public void meth31001() { }
+    public void meth31002() { }
+    public void meth31003() { }
+    public void meth31004() { }
+    public void meth31005() { }
+    public void meth31006() { }
+    public void meth31007() { }
+    public void meth31008() { }
+    public void meth31009() { }
+    public void meth31010() { }
+    public void meth31011() { }
+    public void meth31012() { }
+    public void meth31013() { }
+    public void meth31014() { }
+    public void meth31015() { }
+    public void meth31016() { }
+    public void meth31017() { }
+    public void meth31018() { }
+    public void meth31019() { }
+    public void meth31020() { }
+    public void meth31021() { }
+    public void meth31022() { }
+    public void meth31023() { }
+    public void meth31024() { }
+    public void meth31025() { }
+    public void meth31026() { }
+    public void meth31027() { }
+    public void meth31028() { }
+    public void meth31029() { }
+    public void meth31030() { }
+    public void meth31031() { }
+    public void meth31032() { }
+    public void meth31033() { }
+    public void meth31034() { }
+    public void meth31035() { }
+    public void meth31036() { }
+    public void meth31037() { }
+    public void meth31038() { }
+    public void meth31039() { }
+    public void meth31040() { }
+    public void meth31041() { }
+    public void meth31042() { }
+    public void meth31043() { }
+    public void meth31044() { }
+    public void meth31045() { }
+    public void meth31046() { }
+    public void meth31047() { }
+    public void meth31048() { }
+    public void meth31049() { }
+    public void meth31050() { }
+    public void meth31051() { }
+    public void meth31052() { }
+    public void meth31053() { }
+    public void meth31054() { }
+    public void meth31055() { }
+    public void meth31056() { }
+    public void meth31057() { }
+    public void meth31058() { }
+    public void meth31059() { }
+    public void meth31060() { }
+    public void meth31061() { }
+    public void meth31062() { }
+    public void meth31063() { }
+    public void meth31064() { }
+    public void meth31065() { }
+    public void meth31066() { }
+    public void meth31067() { }
+    public void meth31068() { }
+    public void meth31069() { }
+    public void meth31070() { }
+    public void meth31071() { }
+    public void meth31072() { }
+    public void meth31073() { }
+    public void meth31074() { }
+    public void meth31075() { }
+    public void meth31076() { }
+    public void meth31077() { }
+    public void meth31078() { }
+    public void meth31079() { }
+    public void meth31080() { }
+    public void meth31081() { }
+    public void meth31082() { }
+    public void meth31083() { }
+    public void meth31084() { }
+    public void meth31085() { }
+    public void meth31086() { }
+    public void meth31087() { }
+    public void meth31088() { }
+    public void meth31089() { }
+    public void meth31090() { }
+    public void meth31091() { }
+    public void meth31092() { }
+    public void meth31093() { }
+    public void meth31094() { }
+    public void meth31095() { }
+    public void meth31096() { }
+    public void meth31097() { }
+    public void meth31098() { }
+    public void meth31099() { }
+    public void meth31100() { }
+    public void meth31101() { }
+    public void meth31102() { }
+    public void meth31103() { }
+    public void meth31104() { }
+    public void meth31105() { }
+    public void meth31106() { }
+    public void meth31107() { }
+    public void meth31108() { }
+    public void meth31109() { }
+    public void meth31110() { }
+    public void meth31111() { }
+    public void meth31112() { }
+    public void meth31113() { }
+    public void meth31114() { }
+    public void meth31115() { }
+    public void meth31116() { }
+    public void meth31117() { }
+    public void meth31118() { }
+    public void meth31119() { }
+    public void meth31120() { }
+    public void meth31121() { }
+    public void meth31122() { }
+    public void meth31123() { }
+    public void meth31124() { }
+    public void meth31125() { }
+    public void meth31126() { }
+    public void meth31127() { }
+    public void meth31128() { }
+    public void meth31129() { }
+    public void meth31130() { }
+    public void meth31131() { }
+    public void meth31132() { }
+    public void meth31133() { }
+    public void meth31134() { }
+    public void meth31135() { }
+    public void meth31136() { }
+    public void meth31137() { }
+    public void meth31138() { }
+    public void meth31139() { }
+    public void meth31140() { }
+    public void meth31141() { }
+    public void meth31142() { }
+    public void meth31143() { }
+    public void meth31144() { }
+    public void meth31145() { }
+    public void meth31146() { }
+    public void meth31147() { }
+    public void meth31148() { }
+    public void meth31149() { }
+    public void meth31150() { }
+    public void meth31151() { }
+    public void meth31152() { }
+    public void meth31153() { }
+    public void meth31154() { }
+    public void meth31155() { }
+    public void meth31156() { }
+    public void meth31157() { }
+    public void meth31158() { }
+    public void meth31159() { }
+    public void meth31160() { }
+    public void meth31161() { }
+    public void meth31162() { }
+    public void meth31163() { }
+    public void meth31164() { }
+    public void meth31165() { }
+    public void meth31166() { }
+    public void meth31167() { }
+    public void meth31168() { }
+    public void meth31169() { }
+    public void meth31170() { }
+    public void meth31171() { }
+    public void meth31172() { }
+    public void meth31173() { }
+    public void meth31174() { }
+    public void meth31175() { }
+    public void meth31176() { }
+    public void meth31177() { }
+    public void meth31178() { }
+    public void meth31179() { }
+    public void meth31180() { }
+    public void meth31181() { }
+    public void meth31182() { }
+    public void meth31183() { }
+    public void meth31184() { }
+    public void meth31185() { }
+    public void meth31186() { }
+    public void meth31187() { }
+    public void meth31188() { }
+    public void meth31189() { }
+    public void meth31190() { }
+    public void meth31191() { }
+    public void meth31192() { }
+    public void meth31193() { }
+    public void meth31194() { }
+    public void meth31195() { }
+    public void meth31196() { }
+    public void meth31197() { }
+    public void meth31198() { }
+    public void meth31199() { }
+    public void meth31200() { }
+    public void meth31201() { }
+    public void meth31202() { }
+    public void meth31203() { }
+    public void meth31204() { }
+    public void meth31205() { }
+    public void meth31206() { }
+    public void meth31207() { }
+    public void meth31208() { }
+    public void meth31209() { }
+    public void meth31210() { }
+    public void meth31211() { }
+    public void meth31212() { }
+    public void meth31213() { }
+    public void meth31214() { }
+    public void meth31215() { }
+    public void meth31216() { }
+    public void meth31217() { }
+    public void meth31218() { }
+    public void meth31219() { }
+    public void meth31220() { }
+    public void meth31221() { }
+    public void meth31222() { }
+    public void meth31223() { }
+    public void meth31224() { }
+    public void meth31225() { }
+    public void meth31226() { }
+    public void meth31227() { }
+    public void meth31228() { }
+    public void meth31229() { }
+    public void meth31230() { }
+    public void meth31231() { }
+    public void meth31232() { }
+    public void meth31233() { }
+    public void meth31234() { }
+    public void meth31235() { }
+    public void meth31236() { }
+    public void meth31237() { }
+    public void meth31238() { }
+    public void meth31239() { }
+    public void meth31240() { }
+    public void meth31241() { }
+    public void meth31242() { }
+    public void meth31243() { }
+    public void meth31244() { }
+    public void meth31245() { }
+    public void meth31246() { }
+    public void meth31247() { }
+    public void meth31248() { }
+    public void meth31249() { }
+    public void meth31250() { }
+    public void meth31251() { }
+    public void meth31252() { }
+    public void meth31253() { }
+    public void meth31254() { }
+    public void meth31255() { }
+    public void meth31256() { }
+    public void meth31257() { }
+    public void meth31258() { }
+    public void meth31259() { }
+    public void meth31260() { }
+    public void meth31261() { }
+    public void meth31262() { }
+    public void meth31263() { }
+    public void meth31264() { }
+    public void meth31265() { }
+    public void meth31266() { }
+    public void meth31267() { }
+    public void meth31268() { }
+    public void meth31269() { }
+    public void meth31270() { }
+    public void meth31271() { }
+    public void meth31272() { }
+    public void meth31273() { }
+    public void meth31274() { }
+    public void meth31275() { }
+    public void meth31276() { }
+    public void meth31277() { }
+    public void meth31278() { }
+    public void meth31279() { }
+    public void meth31280() { }
+    public void meth31281() { }
+    public void meth31282() { }
+    public void meth31283() { }
+    public void meth31284() { }
+    public void meth31285() { }
+    public void meth31286() { }
+    public void meth31287() { }
+    public void meth31288() { }
+    public void meth31289() { }
+    public void meth31290() { }
+    public void meth31291() { }
+    public void meth31292() { }
+    public void meth31293() { }
+    public void meth31294() { }
+    public void meth31295() { }
+    public void meth31296() { }
+    public void meth31297() { }
+    public void meth31298() { }
+    public void meth31299() { }
+    public void meth31300() { }
+    public void meth31301() { }
+    public void meth31302() { }
+    public void meth31303() { }
+    public void meth31304() { }
+    public void meth31305() { }
+    public void meth31306() { }
+    public void meth31307() { }
+    public void meth31308() { }
+    public void meth31309() { }
+    public void meth31310() { }
+    public void meth31311() { }
+    public void meth31312() { }
+    public void meth31313() { }
+    public void meth31314() { }
+    public void meth31315() { }
+    public void meth31316() { }
+    public void meth31317() { }
+    public void meth31318() { }
+    public void meth31319() { }
+    public void meth31320() { }
+    public void meth31321() { }
+    public void meth31322() { }
+    public void meth31323() { }
+    public void meth31324() { }
+    public void meth31325() { }
+    public void meth31326() { }
+    public void meth31327() { }
+    public void meth31328() { }
+    public void meth31329() { }
+    public void meth31330() { }
+    public void meth31331() { }
+    public void meth31332() { }
+    public void meth31333() { }
+    public void meth31334() { }
+    public void meth31335() { }
+    public void meth31336() { }
+    public void meth31337() { }
+    public void meth31338() { }
+    public void meth31339() { }
+    public void meth31340() { }
+    public void meth31341() { }
+    public void meth31342() { }
+    public void meth31343() { }
+    public void meth31344() { }
+    public void meth31345() { }
+    public void meth31346() { }
+    public void meth31347() { }
+    public void meth31348() { }
+    public void meth31349() { }
+    public void meth31350() { }
+    public void meth31351() { }
+    public void meth31352() { }
+    public void meth31353() { }
+    public void meth31354() { }
+    public void meth31355() { }
+    public void meth31356() { }
+    public void meth31357() { }
+    public void meth31358() { }
+    public void meth31359() { }
+    public void meth31360() { }
+    public void meth31361() { }
+    public void meth31362() { }
+    public void meth31363() { }
+    public void meth31364() { }
+    public void meth31365() { }
+    public void meth31366() { }
+    public void meth31367() { }
+    public void meth31368() { }
+    public void meth31369() { }
+    public void meth31370() { }
+    public void meth31371() { }
+    public void meth31372() { }
+    public void meth31373() { }
+    public void meth31374() { }
+    public void meth31375() { }
+    public void meth31376() { }
+    public void meth31377() { }
+    public void meth31378() { }
+    public void meth31379() { }
+    public void meth31380() { }
+    public void meth31381() { }
+    public void meth31382() { }
+    public void meth31383() { }
+    public void meth31384() { }
+    public void meth31385() { }
+    public void meth31386() { }
+    public void meth31387() { }
+    public void meth31388() { }
+    public void meth31389() { }
+    public void meth31390() { }
+    public void meth31391() { }
+    public void meth31392() { }
+    public void meth31393() { }
+    public void meth31394() { }
+    public void meth31395() { }
+    public void meth31396() { }
+    public void meth31397() { }
+    public void meth31398() { }
+    public void meth31399() { }
+    public void meth31400() { }
+    public void meth31401() { }
+    public void meth31402() { }
+    public void meth31403() { }
+    public void meth31404() { }
+    public void meth31405() { }
+    public void meth31406() { }
+    public void meth31407() { }
+    public void meth31408() { }
+    public void meth31409() { }
+    public void meth31410() { }
+    public void meth31411() { }
+    public void meth31412() { }
+    public void meth31413() { }
+    public void meth31414() { }
+    public void meth31415() { }
+    public void meth31416() { }
+    public void meth31417() { }
+    public void meth31418() { }
+    public void meth31419() { }
+    public void meth31420() { }
+    public void meth31421() { }
+    public void meth31422() { }
+    public void meth31423() { }
+    public void meth31424() { }
+    public void meth31425() { }
+    public void meth31426() { }
+    public void meth31427() { }
+    public void meth31428() { }
+    public void meth31429() { }
+    public void meth31430() { }
+    public void meth31431() { }
+    public void meth31432() { }
+    public void meth31433() { }
+    public void meth31434() { }
+    public void meth31435() { }
+    public void meth31436() { }
+    public void meth31437() { }
+    public void meth31438() { }
+    public void meth31439() { }
+    public void meth31440() { }
+    public void meth31441() { }
+    public void meth31442() { }
+    public void meth31443() { }
+    public void meth31444() { }
+    public void meth31445() { }
+    public void meth31446() { }
+    public void meth31447() { }
+    public void meth31448() { }
+    public void meth31449() { }
+    public void meth31450() { }
+    public void meth31451() { }
+    public void meth31452() { }
+    public void meth31453() { }
+    public void meth31454() { }
+    public void meth31455() { }
+    public void meth31456() { }
+    public void meth31457() { }
+    public void meth31458() { }
+    public void meth31459() { }
+    public void meth31460() { }
+    public void meth31461() { }
+    public void meth31462() { }
+    public void meth31463() { }
+    public void meth31464() { }
+    public void meth31465() { }
+    public void meth31466() { }
+    public void meth31467() { }
+    public void meth31468() { }
+    public void meth31469() { }
+    public void meth31470() { }
+    public void meth31471() { }
+    public void meth31472() { }
+    public void meth31473() { }
+    public void meth31474() { }
+    public void meth31475() { }
+    public void meth31476() { }
+    public void meth31477() { }
+    public void meth31478() { }
+    public void meth31479() { }
+    public void meth31480() { }
+    public void meth31481() { }
+    public void meth31482() { }
+    public void meth31483() { }
+    public void meth31484() { }
+    public void meth31485() { }
+    public void meth31486() { }
+    public void meth31487() { }
+    public void meth31488() { }
+    public void meth31489() { }
+    public void meth31490() { }
+    public void meth31491() { }
+    public void meth31492() { }
+    public void meth31493() { }
+    public void meth31494() { }
+    public void meth31495() { }
+    public void meth31496() { }
+    public void meth31497() { }
+    public void meth31498() { }
+    public void meth31499() { }
+    public void meth31500() { }
+    public void meth31501() { }
+    public void meth31502() { }
+    public void meth31503() { }
+    public void meth31504() { }
+    public void meth31505() { }
+    public void meth31506() { }
+    public void meth31507() { }
+    public void meth31508() { }
+    public void meth31509() { }
+    public void meth31510() { }
+    public void meth31511() { }
+    public void meth31512() { }
+    public void meth31513() { }
+    public void meth31514() { }
+    public void meth31515() { }
+    public void meth31516() { }
+    public void meth31517() { }
+    public void meth31518() { }
+    public void meth31519() { }
+    public void meth31520() { }
+    public void meth31521() { }
+    public void meth31522() { }
+    public void meth31523() { }
+    public void meth31524() { }
+    public void meth31525() { }
+    public void meth31526() { }
+    public void meth31527() { }
+    public void meth31528() { }
+    public void meth31529() { }
+    public void meth31530() { }
+    public void meth31531() { }
+    public void meth31532() { }
+    public void meth31533() { }
+    public void meth31534() { }
+    public void meth31535() { }
+    public void meth31536() { }
+    public void meth31537() { }
+    public void meth31538() { }
+    public void meth31539() { }
+    public void meth31540() { }
+    public void meth31541() { }
+    public void meth31542() { }
+    public void meth31543() { }
+    public void meth31544() { }
+    public void meth31545() { }
+    public void meth31546() { }
+    public void meth31547() { }
+    public void meth31548() { }
+    public void meth31549() { }
+    public void meth31550() { }
+    public void meth31551() { }
+    public void meth31552() { }
+    public void meth31553() { }
+    public void meth31554() { }
+    public void meth31555() { }
+    public void meth31556() { }
+    public void meth31557() { }
+    public void meth31558() { }
+    public void meth31559() { }
+    public void meth31560() { }
+    public void meth31561() { }
+    public void meth31562() { }
+    public void meth31563() { }
+    public void meth31564() { }
+    public void meth31565() { }
+    public void meth31566() { }
+    public void meth31567() { }
+    public void meth31568() { }
+    public void meth31569() { }
+    public void meth31570() { }
+    public void meth31571() { }
+    public void meth31572() { }
+    public void meth31573() { }
+    public void meth31574() { }
+    public void meth31575() { }
+    public void meth31576() { }
+    public void meth31577() { }
+    public void meth31578() { }
+    public void meth31579() { }
+    public void meth31580() { }
+    public void meth31581() { }
+    public void meth31582() { }
+    public void meth31583() { }
+    public void meth31584() { }
+    public void meth31585() { }
+    public void meth31586() { }
+    public void meth31587() { }
+    public void meth31588() { }
+    public void meth31589() { }
+    public void meth31590() { }
+    public void meth31591() { }
+    public void meth31592() { }
+    public void meth31593() { }
+    public void meth31594() { }
+    public void meth31595() { }
+    public void meth31596() { }
+    public void meth31597() { }
+    public void meth31598() { }
+    public void meth31599() { }
+    public void meth31600() { }
+    public void meth31601() { }
+    public void meth31602() { }
+    public void meth31603() { }
+    public void meth31604() { }
+    public void meth31605() { }
+    public void meth31606() { }
+    public void meth31607() { }
+    public void meth31608() { }
+    public void meth31609() { }
+    public void meth31610() { }
+    public void meth31611() { }
+    public void meth31612() { }
+    public void meth31613() { }
+    public void meth31614() { }
+    public void meth31615() { }
+    public void meth31616() { }
+    public void meth31617() { }
+    public void meth31618() { }
+    public void meth31619() { }
+    public void meth31620() { }
+    public void meth31621() { }
+    public void meth31622() { }
+    public void meth31623() { }
+    public void meth31624() { }
+    public void meth31625() { }
+    public void meth31626() { }
+    public void meth31627() { }
+    public void meth31628() { }
+    public void meth31629() { }
+    public void meth31630() { }
+    public void meth31631() { }
+    public void meth31632() { }
+    public void meth31633() { }
+    public void meth31634() { }
+    public void meth31635() { }
+    public void meth31636() { }
+    public void meth31637() { }
+    public void meth31638() { }
+    public void meth31639() { }
+    public void meth31640() { }
+    public void meth31641() { }
+    public void meth31642() { }
+    public void meth31643() { }
+    public void meth31644() { }
+    public void meth31645() { }
+    public void meth31646() { }
+    public void meth31647() { }
+    public void meth31648() { }
+    public void meth31649() { }
+    public void meth31650() { }
+    public void meth31651() { }
+    public void meth31652() { }
+    public void meth31653() { }
+    public void meth31654() { }
+    public void meth31655() { }
+    public void meth31656() { }
+    public void meth31657() { }
+    public void meth31658() { }
+    public void meth31659() { }
+    public void meth31660() { }
+    public void meth31661() { }
+    public void meth31662() { }
+    public void meth31663() { }
+    public void meth31664() { }
+    public void meth31665() { }
+    public void meth31666() { }
+    public void meth31667() { }
+    public void meth31668() { }
+    public void meth31669() { }
+    public void meth31670() { }
+    public void meth31671() { }
+    public void meth31672() { }
+    public void meth31673() { }
+    public void meth31674() { }
+    public void meth31675() { }
+    public void meth31676() { }
+    public void meth31677() { }
+    public void meth31678() { }
+    public void meth31679() { }
+    public void meth31680() { }
+    public void meth31681() { }
+    public void meth31682() { }
+    public void meth31683() { }
+    public void meth31684() { }
+    public void meth31685() { }
+    public void meth31686() { }
+    public void meth31687() { }
+    public void meth31688() { }
+    public void meth31689() { }
+    public void meth31690() { }
+    public void meth31691() { }
+    public void meth31692() { }
+    public void meth31693() { }
+    public void meth31694() { }
+    public void meth31695() { }
+    public void meth31696() { }
+    public void meth31697() { }
+    public void meth31698() { }
+    public void meth31699() { }
+    public void meth31700() { }
+    public void meth31701() { }
+    public void meth31702() { }
+    public void meth31703() { }
+    public void meth31704() { }
+    public void meth31705() { }
+    public void meth31706() { }
+    public void meth31707() { }
+    public void meth31708() { }
+    public void meth31709() { }
+    public void meth31710() { }
+    public void meth31711() { }
+    public void meth31712() { }
+    public void meth31713() { }
+    public void meth31714() { }
+    public void meth31715() { }
+    public void meth31716() { }
+    public void meth31717() { }
+    public void meth31718() { }
+    public void meth31719() { }
+    public void meth31720() { }
+    public void meth31721() { }
+    public void meth31722() { }
+    public void meth31723() { }
+    public void meth31724() { }
+    public void meth31725() { }
+    public void meth31726() { }
+    public void meth31727() { }
+    public void meth31728() { }
+    public void meth31729() { }
+    public void meth31730() { }
+    public void meth31731() { }
+    public void meth31732() { }
+    public void meth31733() { }
+    public void meth31734() { }
+    public void meth31735() { }
+    public void meth31736() { }
+    public void meth31737() { }
+    public void meth31738() { }
+    public void meth31739() { }
+    public void meth31740() { }
+    public void meth31741() { }
+    public void meth31742() { }
+    public void meth31743() { }
+    public void meth31744() { }
+    public void meth31745() { }
+    public void meth31746() { }
+    public void meth31747() { }
+    public void meth31748() { }
+    public void meth31749() { }
+    public void meth31750() { }
+    public void meth31751() { }
+    public void meth31752() { }
+    public void meth31753() { }
+    public void meth31754() { }
+    public void meth31755() { }
+    public void meth31756() { }
+    public void meth31757() { }
+    public void meth31758() { }
+    public void meth31759() { }
+    public void meth31760() { }
+    public void meth31761() { }
+    public void meth31762() { }
+    public void meth31763() { }
+    public void meth31764() { }
+    public void meth31765() { }
+    public void meth31766() { }
+    public void meth31767() { }
+    public void meth31768() { }
+    public void meth31769() { }
+    public void meth31770() { }
+    public void meth31771() { }
+    public void meth31772() { }
+    public void meth31773() { }
+    public void meth31774() { }
+    public void meth31775() { }
+    public void meth31776() { }
+    public void meth31777() { }
+    public void meth31778() { }
+    public void meth31779() { }
+    public void meth31780() { }
+    public void meth31781() { }
+    public void meth31782() { }
+    public void meth31783() { }
+    public void meth31784() { }
+    public void meth31785() { }
+    public void meth31786() { }
+    public void meth31787() { }
+    public void meth31788() { }
+    public void meth31789() { }
+    public void meth31790() { }
+    public void meth31791() { }
+    public void meth31792() { }
+    public void meth31793() { }
+    public void meth31794() { }
+    public void meth31795() { }
+    public void meth31796() { }
+    public void meth31797() { }
+    public void meth31798() { }
+    public void meth31799() { }
+    public void meth31800() { }
+    public void meth31801() { }
+    public void meth31802() { }
+    public void meth31803() { }
+    public void meth31804() { }
+    public void meth31805() { }
+    public void meth31806() { }
+    public void meth31807() { }
+    public void meth31808() { }
+    public void meth31809() { }
+    public void meth31810() { }
+    public void meth31811() { }
+    public void meth31812() { }
+    public void meth31813() { }
+    public void meth31814() { }
+    public void meth31815() { }
+    public void meth31816() { }
+    public void meth31817() { }
+    public void meth31818() { }
+    public void meth31819() { }
+    public void meth31820() { }
+    public void meth31821() { }
+    public void meth31822() { }
+    public void meth31823() { }
+    public void meth31824() { }
+    public void meth31825() { }
+    public void meth31826() { }
+    public void meth31827() { }
+    public void meth31828() { }
+    public void meth31829() { }
+    public void meth31830() { }
+    public void meth31831() { }
+    public void meth31832() { }
+    public void meth31833() { }
+    public void meth31834() { }
+    public void meth31835() { }
+    public void meth31836() { }
+    public void meth31837() { }
+    public void meth31838() { }
+    public void meth31839() { }
+    public void meth31840() { }
+    public void meth31841() { }
+    public void meth31842() { }
+    public void meth31843() { }
+    public void meth31844() { }
+    public void meth31845() { }
+    public void meth31846() { }
+    public void meth31847() { }
+    public void meth31848() { }
+    public void meth31849() { }
+    public void meth31850() { }
+    public void meth31851() { }
+    public void meth31852() { }
+    public void meth31853() { }
+    public void meth31854() { }
+    public void meth31855() { }
+    public void meth31856() { }
+    public void meth31857() { }
+    public void meth31858() { }
+    public void meth31859() { }
+    public void meth31860() { }
+    public void meth31861() { }
+    public void meth31862() { }
+    public void meth31863() { }
+    public void meth31864() { }
+    public void meth31865() { }
+    public void meth31866() { }
+    public void meth31867() { }
+    public void meth31868() { }
+    public void meth31869() { }
+    public void meth31870() { }
+    public void meth31871() { }
+    public void meth31872() { }
+    public void meth31873() { }
+    public void meth31874() { }
+    public void meth31875() { }
+    public void meth31876() { }
+    public void meth31877() { }
+    public void meth31878() { }
+    public void meth31879() { }
+    public void meth31880() { }
+    public void meth31881() { }
+    public void meth31882() { }
+    public void meth31883() { }
+    public void meth31884() { }
+    public void meth31885() { }
+    public void meth31886() { }
+    public void meth31887() { }
+    public void meth31888() { }
+    public void meth31889() { }
+    public void meth31890() { }
+    public void meth31891() { }
+    public void meth31892() { }
+    public void meth31893() { }
+    public void meth31894() { }
+    public void meth31895() { }
+    public void meth31896() { }
+    public void meth31897() { }
+    public void meth31898() { }
+    public void meth31899() { }
+    public void meth31900() { }
+    public void meth31901() { }
+    public void meth31902() { }
+    public void meth31903() { }
+    public void meth31904() { }
+    public void meth31905() { }
+    public void meth31906() { }
+    public void meth31907() { }
+    public void meth31908() { }
+    public void meth31909() { }
+    public void meth31910() { }
+    public void meth31911() { }
+    public void meth31912() { }
+    public void meth31913() { }
+    public void meth31914() { }
+    public void meth31915() { }
+    public void meth31916() { }
+    public void meth31917() { }
+    public void meth31918() { }
+    public void meth31919() { }
+    public void meth31920() { }
+    public void meth31921() { }
+    public void meth31922() { }
+    public void meth31923() { }
+    public void meth31924() { }
+    public void meth31925() { }
+    public void meth31926() { }
+    public void meth31927() { }
+    public void meth31928() { }
+    public void meth31929() { }
+    public void meth31930() { }
+    public void meth31931() { }
+    public void meth31932() { }
+    public void meth31933() { }
+    public void meth31934() { }
+    public void meth31935() { }
+    public void meth31936() { }
+    public void meth31937() { }
+    public void meth31938() { }
+    public void meth31939() { }
+    public void meth31940() { }
+    public void meth31941() { }
+    public void meth31942() { }
+    public void meth31943() { }
+    public void meth31944() { }
+    public void meth31945() { }
+    public void meth31946() { }
+    public void meth31947() { }
+    public void meth31948() { }
+    public void meth31949() { }
+    public void meth31950() { }
+    public void meth31951() { }
+    public void meth31952() { }
+    public void meth31953() { }
+    public void meth31954() { }
+    public void meth31955() { }
+    public void meth31956() { }
+    public void meth31957() { }
+    public void meth31958() { }
+    public void meth31959() { }
+    public void meth31960() { }
+    public void meth31961() { }
+    public void meth31962() { }
+    public void meth31963() { }
+    public void meth31964() { }
+    public void meth31965() { }
+    public void meth31966() { }
+    public void meth31967() { }
+    public void meth31968() { }
+    public void meth31969() { }
+    public void meth31970() { }
+    public void meth31971() { }
+    public void meth31972() { }
+    public void meth31973() { }
+    public void meth31974() { }
+    public void meth31975() { }
+    public void meth31976() { }
+    public void meth31977() { }
+    public void meth31978() { }
+    public void meth31979() { }
+    public void meth31980() { }
+    public void meth31981() { }
+    public void meth31982() { }
+    public void meth31983() { }
+    public void meth31984() { }
+    public void meth31985() { }
+    public void meth31986() { }
+    public void meth31987() { }
+    public void meth31988() { }
+    public void meth31989() { }
+    public void meth31990() { }
+    public void meth31991() { }
+    public void meth31992() { }
+    public void meth31993() { }
+    public void meth31994() { }
+    public void meth31995() { }
+    public void meth31996() { }
+    public void meth31997() { }
+    public void meth31998() { }
+    public void meth31999() { }
+    public void meth32000() { }
+    public void meth32001() { }
+    public void meth32002() { }
+    public void meth32003() { }
+    public void meth32004() { }
+    public void meth32005() { }
+    public void meth32006() { }
+    public void meth32007() { }
+    public void meth32008() { }
+    public void meth32009() { }
+    public void meth32010() { }
+    public void meth32011() { }
+    public void meth32012() { }
+    public void meth32013() { }
+    public void meth32014() { }
+    public void meth32015() { }
+    public void meth32016() { }
+    public void meth32017() { }
+    public void meth32018() { }
+    public void meth32019() { }
+    public void meth32020() { }
+    public void meth32021() { }
+    public void meth32022() { }
+    public void meth32023() { }
+    public void meth32024() { }
+    public void meth32025() { }
+    public void meth32026() { }
+    public void meth32027() { }
+    public void meth32028() { }
+    public void meth32029() { }
+    public void meth32030() { }
+    public void meth32031() { }
+    public void meth32032() { }
+    public void meth32033() { }
+    public void meth32034() { }
+    public void meth32035() { }
+    public void meth32036() { }
+    public void meth32037() { }
+    public void meth32038() { }
+    public void meth32039() { }
+    public void meth32040() { }
+    public void meth32041() { }
+    public void meth32042() { }
+    public void meth32043() { }
+    public void meth32044() { }
+    public void meth32045() { }
+    public void meth32046() { }
+    public void meth32047() { }
+    public void meth32048() { }
+    public void meth32049() { }
+    public void meth32050() { }
+    public void meth32051() { }
+    public void meth32052() { }
+    public void meth32053() { }
+    public void meth32054() { }
+    public void meth32055() { }
+    public void meth32056() { }
+    public void meth32057() { }
+    public void meth32058() { }
+    public void meth32059() { }
+    public void meth32060() { }
+    public void meth32061() { }
+    public void meth32062() { }
+    public void meth32063() { }
+    public void meth32064() { }
+    public void meth32065() { }
+    public void meth32066() { }
+    public void meth32067() { }
+    public void meth32068() { }
+    public void meth32069() { }
+    public void meth32070() { }
+    public void meth32071() { }
+    public void meth32072() { }
+    public void meth32073() { }
+    public void meth32074() { }
+    public void meth32075() { }
+    public void meth32076() { }
+    public void meth32077() { }
+    public void meth32078() { }
+    public void meth32079() { }
+    public void meth32080() { }
+    public void meth32081() { }
+    public void meth32082() { }
+    public void meth32083() { }
+    public void meth32084() { }
+    public void meth32085() { }
+    public void meth32086() { }
+    public void meth32087() { }
+    public void meth32088() { }
+    public void meth32089() { }
+    public void meth32090() { }
+    public void meth32091() { }
+    public void meth32092() { }
+    public void meth32093() { }
+    public void meth32094() { }
+    public void meth32095() { }
+    public void meth32096() { }
+    public void meth32097() { }
+    public void meth32098() { }
+    public void meth32099() { }
+    public void meth32100() { }
+    public void meth32101() { }
+    public void meth32102() { }
+    public void meth32103() { }
+    public void meth32104() { }
+    public void meth32105() { }
+    public void meth32106() { }
+    public void meth32107() { }
+    public void meth32108() { }
+    public void meth32109() { }
+    public void meth32110() { }
+    public void meth32111() { }
+    public void meth32112() { }
+    public void meth32113() { }
+    public void meth32114() { }
+    public void meth32115() { }
+    public void meth32116() { }
+    public void meth32117() { }
+    public void meth32118() { }
+    public void meth32119() { }
+    public void meth32120() { }
+    public void meth32121() { }
+    public void meth32122() { }
+    public void meth32123() { }
+    public void meth32124() { }
+    public void meth32125() { }
+    public void meth32126() { }
+    public void meth32127() { }
+    public void meth32128() { }
+    public void meth32129() { }
+    public void meth32130() { }
+    public void meth32131() { }
+    public void meth32132() { }
+    public void meth32133() { }
+    public void meth32134() { }
+    public void meth32135() { }
+    public void meth32136() { }
+    public void meth32137() { }
+    public void meth32138() { }
+    public void meth32139() { }
+    public void meth32140() { }
+    public void meth32141() { }
+    public void meth32142() { }
+    public void meth32143() { }
+    public void meth32144() { }
+    public void meth32145() { }
+    public void meth32146() { }
+    public void meth32147() { }
+    public void meth32148() { }
+    public void meth32149() { }
+    public void meth32150() { }
+    public void meth32151() { }
+    public void meth32152() { }
+    public void meth32153() { }
+    public void meth32154() { }
+    public void meth32155() { }
+    public void meth32156() { }
+    public void meth32157() { }
+    public void meth32158() { }
+    public void meth32159() { }
+    public void meth32160() { }
+    public void meth32161() { }
+    public void meth32162() { }
+    public void meth32163() { }
+    public void meth32164() { }
+    public void meth32165() { }
+    public void meth32166() { }
+    public void meth32167() { }
+    public void meth32168() { }
+    public void meth32169() { }
+    public void meth32170() { }
+    public void meth32171() { }
+    public void meth32172() { }
+    public void meth32173() { }
+    public void meth32174() { }
+    public void meth32175() { }
+    public void meth32176() { }
+    public void meth32177() { }
+    public void meth32178() { }
+    public void meth32179() { }
+    public void meth32180() { }
+    public void meth32181() { }
+    public void meth32182() { }
+    public void meth32183() { }
+    public void meth32184() { }
+    public void meth32185() { }
+    public void meth32186() { }
+    public void meth32187() { }
+    public void meth32188() { }
+    public void meth32189() { }
+    public void meth32190() { }
+    public void meth32191() { }
+    public void meth32192() { }
+    public void meth32193() { }
+    public void meth32194() { }
+    public void meth32195() { }
+    public void meth32196() { }
+    public void meth32197() { }
+    public void meth32198() { }
+    public void meth32199() { }
+    public void meth32200() { }
+    public void meth32201() { }
+    public void meth32202() { }
+    public void meth32203() { }
+    public void meth32204() { }
+    public void meth32205() { }
+    public void meth32206() { }
+    public void meth32207() { }
+    public void meth32208() { }
+    public void meth32209() { }
+    public void meth32210() { }
+    public void meth32211() { }
+    public void meth32212() { }
+    public void meth32213() { }
+    public void meth32214() { }
+    public void meth32215() { }
+    public void meth32216() { }
+    public void meth32217() { }
+    public void meth32218() { }
+    public void meth32219() { }
+    public void meth32220() { }
+    public void meth32221() { }
+    public void meth32222() { }
+    public void meth32223() { }
+    public void meth32224() { }
+    public void meth32225() { }
+    public void meth32226() { }
+    public void meth32227() { }
+    public void meth32228() { }
+    public void meth32229() { }
+    public void meth32230() { }
+    public void meth32231() { }
+    public void meth32232() { }
+    public void meth32233() { }
+    public void meth32234() { }
+    public void meth32235() { }
+    public void meth32236() { }
+    public void meth32237() { }
+    public void meth32238() { }
+    public void meth32239() { }
+    public void meth32240() { }
+    public void meth32241() { }
+    public void meth32242() { }
+    public void meth32243() { }
+    public void meth32244() { }
+    public void meth32245() { }
+    public void meth32246() { }
+    public void meth32247() { }
+    public void meth32248() { }
+    public void meth32249() { }
+    public void meth32250() { }
+    public void meth32251() { }
+    public void meth32252() { }
+    public void meth32253() { }
+    public void meth32254() { }
+    public void meth32255() { }
+    public void meth32256() { }
+    public void meth32257() { }
+    public void meth32258() { }
+    public void meth32259() { }
+    public void meth32260() { }
+    public void meth32261() { }
+    public void meth32262() { }
+    public void meth32263() { }
+    public void meth32264() { }
+    public void meth32265() { }
+    public void meth32266() { }
+    public void meth32267() { }
+    public void meth32268() { }
+    public void meth32269() { }
+    public void meth32270() { }
+    public void meth32271() { }
+    public void meth32272() { }
+    public void meth32273() { }
+    public void meth32274() { }
+    public void meth32275() { }
+    public void meth32276() { }
+    public void meth32277() { }
+    public void meth32278() { }
+    public void meth32279() { }
+    public void meth32280() { }
+    public void meth32281() { }
+    public void meth32282() { }
+    public void meth32283() { }
+    public void meth32284() { }
+    public void meth32285() { }
+    public void meth32286() { }
+    public void meth32287() { }
+    public void meth32288() { }
+    public void meth32289() { }
+    public void meth32290() { }
+    public void meth32291() { }
+    public void meth32292() { }
+    public void meth32293() { }
+    public void meth32294() { }
+    public void meth32295() { }
+    public void meth32296() { }
+    public void meth32297() { }
+    public void meth32298() { }
+    public void meth32299() { }
+    public void meth32300() { }
+    public void meth32301() { }
+    public void meth32302() { }
+    public void meth32303() { }
+    public void meth32304() { }
+    public void meth32305() { }
+    public void meth32306() { }
+    public void meth32307() { }
+    public void meth32308() { }
+    public void meth32309() { }
+    public void meth32310() { }
+    public void meth32311() { }
+    public void meth32312() { }
+    public void meth32313() { }
+    public void meth32314() { }
+    public void meth32315() { }
+    public void meth32316() { }
+    public void meth32317() { }
+    public void meth32318() { }
+    public void meth32319() { }
+    public void meth32320() { }
+    public void meth32321() { }
+    public void meth32322() { }
+    public void meth32323() { }
+    public void meth32324() { }
+    public void meth32325() { }
+    public void meth32326() { }
+    public void meth32327() { }
+    public void meth32328() { }
+    public void meth32329() { }
+    public void meth32330() { }
+    public void meth32331() { }
+    public void meth32332() { }
+    public void meth32333() { }
+    public void meth32334() { }
+    public void meth32335() { }
+    public void meth32336() { }
+    public void meth32337() { }
+    public void meth32338() { }
+    public void meth32339() { }
+    public void meth32340() { }
+    public void meth32341() { }
+    public void meth32342() { }
+    public void meth32343() { }
+    public void meth32344() { }
+    public void meth32345() { }
+    public void meth32346() { }
+    public void meth32347() { }
+    public void meth32348() { }
+    public void meth32349() { }
+    public void meth32350() { }
+    public void meth32351() { }
+    public void meth32352() { }
+    public void meth32353() { }
+    public void meth32354() { }
+    public void meth32355() { }
+    public void meth32356() { }
+    public void meth32357() { }
+    public void meth32358() { }
+    public void meth32359() { }
+    public void meth32360() { }
+    public void meth32361() { }
+    public void meth32362() { }
+    public void meth32363() { }
+    public void meth32364() { }
+    public void meth32365() { }
+    public void meth32366() { }
+    public void meth32367() { }
+    public void meth32368() { }
+    public void meth32369() { }
+    public void meth32370() { }
+    public void meth32371() { }
+    public void meth32372() { }
+    public void meth32373() { }
+    public void meth32374() { }
+    public void meth32375() { }
+    public void meth32376() { }
+    public void meth32377() { }
+    public void meth32378() { }
+    public void meth32379() { }
+    public void meth32380() { }
+    public void meth32381() { }
+    public void meth32382() { }
+    public void meth32383() { }
+    public void meth32384() { }
+    public void meth32385() { }
+    public void meth32386() { }
+    public void meth32387() { }
+    public void meth32388() { }
+    public void meth32389() { }
+    public void meth32390() { }
+    public void meth32391() { }
+    public void meth32392() { }
+    public void meth32393() { }
+    public void meth32394() { }
+    public void meth32395() { }
+    public void meth32396() { }
+    public void meth32397() { }
+    public void meth32398() { }
+    public void meth32399() { }
+    public void meth32400() { }
+    public void meth32401() { }
+    public void meth32402() { }
+    public void meth32403() { }
+    public void meth32404() { }
+    public void meth32405() { }
+    public void meth32406() { }
+    public void meth32407() { }
+    public void meth32408() { }
+    public void meth32409() { }
+    public void meth32410() { }
+    public void meth32411() { }
+    public void meth32412() { }
+    public void meth32413() { }
+    public void meth32414() { }
+    public void meth32415() { }
+    public void meth32416() { }
+    public void meth32417() { }
+    public void meth32418() { }
+    public void meth32419() { }
+    public void meth32420() { }
+    public void meth32421() { }
+    public void meth32422() { }
+    public void meth32423() { }
+    public void meth32424() { }
+    public void meth32425() { }
+    public void meth32426() { }
+    public void meth32427() { }
+    public void meth32428() { }
+    public void meth32429() { }
+    public void meth32430() { }
+    public void meth32431() { }
+    public void meth32432() { }
+    public void meth32433() { }
+    public void meth32434() { }
+    public void meth32435() { }
+    public void meth32436() { }
+    public void meth32437() { }
+    public void meth32438() { }
+    public void meth32439() { }
+    public void meth32440() { }
+    public void meth32441() { }
+    public void meth32442() { }
+    public void meth32443() { }
+    public void meth32444() { }
+    public void meth32445() { }
+    public void meth32446() { }
+    public void meth32447() { }
+    public void meth32448() { }
+    public void meth32449() { }
+    public void meth32450() { }
+    public void meth32451() { }
+    public void meth32452() { }
+    public void meth32453() { }
+    public void meth32454() { }
+    public void meth32455() { }
+    public void meth32456() { }
+    public void meth32457() { }
+    public void meth32458() { }
+    public void meth32459() { }
+    public void meth32460() { }
+    public void meth32461() { }
+    public void meth32462() { }
+    public void meth32463() { }
+    public void meth32464() { }
+    public void meth32465() { }
+    public void meth32466() { }
+    public void meth32467() { }
+    public void meth32468() { }
+    public void meth32469() { }
+    public void meth32470() { }
+    public void meth32471() { }
+    public void meth32472() { }
+    public void meth32473() { }
+    public void meth32474() { }
+    public void meth32475() { }
+    public void meth32476() { }
+    public void meth32477() { }
+    public void meth32478() { }
+    public void meth32479() { }
+    public void meth32480() { }
+    public void meth32481() { }
+    public void meth32482() { }
+    public void meth32483() { }
+    public void meth32484() { }
+    public void meth32485() { }
+    public void meth32486() { }
+    public void meth32487() { }
+    public void meth32488() { }
+    public void meth32489() { }
+    public void meth32490() { }
+    public void meth32491() { }
+    public void meth32492() { }
+    public void meth32493() { }
+    public void meth32494() { }
+    public void meth32495() { }
+    public void meth32496() { }
+    public void meth32497() { }
+    public void meth32498() { }
+    public void meth32499() { }
+    public void meth32500() { }
+    public void meth32501() { }
+    public void meth32502() { }
+    public void meth32503() { }
+    public void meth32504() { }
+    public void meth32505() { }
+    public void meth32506() { }
+    public void meth32507() { }
+    public void meth32508() { }
+    public void meth32509() { }
+    public void meth32510() { }
+    public void meth32511() { }
+    public void meth32512() { }
+    public void meth32513() { }
+    public void meth32514() { }
+    public void meth32515() { }
+    public void meth32516() { }
+    public void meth32517() { }
+    public void meth32518() { }
+    public void meth32519() { }
+    public void meth32520() { }
+    public void meth32521() { }
+    public void meth32522() { }
+    public void meth32523() { }
+    public void meth32524() { }
+    public void meth32525() { }
+    public void meth32526() { }
+    public void meth32527() { }
+    public void meth32528() { }
+    public void meth32529() { }
+    public void meth32530() { }
+    public void meth32531() { }
+    public void meth32532() { }
+    public void meth32533() { }
+    public void meth32534() { }
+    public void meth32535() { }
+    public void meth32536() { }
+    public void meth32537() { }
+    public void meth32538() { }
+    public void meth32539() { }
+    public void meth32540() { }
+    public void meth32541() { }
+    public void meth32542() { }
+    public void meth32543() { }
+    public void meth32544() { }
+    public void meth32545() { }
+    public void meth32546() { }
+    public void meth32547() { }
+    public void meth32548() { }
+    public void meth32549() { }
+    public void meth32550() { }
+    public void meth32551() { }
+    public void meth32552() { }
+    public void meth32553() { }
+    public void meth32554() { }
+    public void meth32555() { }
+    public void meth32556() { }
+    public void meth32557() { }
+    public void meth32558() { }
+    public void meth32559() { }
+    public void meth32560() { }
+    public void meth32561() { }
+    public void meth32562() { }
+    public void meth32563() { }
+    public void meth32564() { }
+    public void meth32565() { }
+    public void meth32566() { }
+    public void meth32567() { }
+    public void meth32568() { }
+    public void meth32569() { }
+    public void meth32570() { }
+    public void meth32571() { }
+    public void meth32572() { }
+    public void meth32573() { }
+    public void meth32574() { }
+    public void meth32575() { }
+    public void meth32576() { }
+    public void meth32577() { }
+    public void meth32578() { }
+    public void meth32579() { }
+    public void meth32580() { }
+    public void meth32581() { }
+    public void meth32582() { }
+    public void meth32583() { }
+    public void meth32584() { }
+    public void meth32585() { }
+    public void meth32586() { }
+    public void meth32587() { }
+    public void meth32588() { }
+    public void meth32589() { }
+    public void meth32590() { }
+    public void meth32591() { }
+    public void meth32592() { }
+    public void meth32593() { }
+    public void meth32594() { }
+    public void meth32595() { }
+    public void meth32596() { }
+    public void meth32597() { }
+    public void meth32598() { }
+    public void meth32599() { }
+    public void meth32600() { }
+    public void meth32601() { }
+    public void meth32602() { }
+    public void meth32603() { }
+    public void meth32604() { }
+    public void meth32605() { }
+    public void meth32606() { }
+    public void meth32607() { }
+    public void meth32608() { }
+    public void meth32609() { }
+    public void meth32610() { }
+    public void meth32611() { }
+    public void meth32612() { }
+    public void meth32613() { }
+    public void meth32614() { }
+    public void meth32615() { }
+    public void meth32616() { }
+    public void meth32617() { }
+    public void meth32618() { }
+    public void meth32619() { }
+    public void meth32620() { }
+    public void meth32621() { }
+    public void meth32622() { }
+    public void meth32623() { }
+    public void meth32624() { }
+    public void meth32625() { }
+    public void meth32626() { }
+    public void meth32627() { }
+    public void meth32628() { }
+    public void meth32629() { }
+    public void meth32630() { }
+    public void meth32631() { }
+    public void meth32632() { }
+    public void meth32633() { }
+    public void meth32634() { }
+    public void meth32635() { }
+    public void meth32636() { }
+    public void meth32637() { }
+    public void meth32638() { }
+    public void meth32639() { }
+    public void meth32640() { }
+    public void meth32641() { }
+    public void meth32642() { }
+    public void meth32643() { }
+    public void meth32644() { }
+    public void meth32645() { }
+    public void meth32646() { }
+    public void meth32647() { }
+    public void meth32648() { }
+    public void meth32649() { }
+    public void meth32650() { }
+    public void meth32651() { }
+    public void meth32652() { }
+    public void meth32653() { }
+    public void meth32654() { }
+    public void meth32655() { }
+    public void meth32656() { }
+    public void meth32657() { }
+    public void meth32658() { }
+    public void meth32659() { }
+    public void meth32660() { }
+    public void meth32661() { }
+    public void meth32662() { }
+    public void meth32663() { }
+    public void meth32664() { }
+    public void meth32665() { }
+    public void meth32666() { }
+    public void meth32667() { }
+    public void meth32668() { }
+    public void meth32669() { }
+    public void meth32670() { }
+    public void meth32671() { }
+    public void meth32672() { }
+    public void meth32673() { }
+    public void meth32674() { }
+    public void meth32675() { }
+    public void meth32676() { }
+    public void meth32677() { }
+    public void meth32678() { }
+    public void meth32679() { }
+    public void meth32680() { }
+    public void meth32681() { }
+    public void meth32682() { }
+    public void meth32683() { }
+    public void meth32684() { }
+    public void meth32685() { }
+    public void meth32686() { }
+    public void meth32687() { }
+    public void meth32688() { }
+    public void meth32689() { }
+    public void meth32690() { }
+    public void meth32691() { }
+    public void meth32692() { }
+    public void meth32693() { }
+    public void meth32694() { }
+    public void meth32695() { }
+    public void meth32696() { }
+    public void meth32697() { }
+    public void meth32698() { }
+    public void meth32699() { }
+    public void meth32700() { }
+    public void meth32701() { }
+    public void meth32702() { }
+    public void meth32703() { }
+    public void meth32704() { }
+    public void meth32705() { }
+    public void meth32706() { }
+    public void meth32707() { }
+    public void meth32708() { }
+    public void meth32709() { }
+    public void meth32710() { }
+    public void meth32711() { }
+    public void meth32712() { }
+    public void meth32713() { }
+    public void meth32714() { }
+    public void meth32715() { }
+    public void meth32716() { }
+    public void meth32717() { }
+    public void meth32718() { }
+    public void meth32719() { }
+    public void meth32720() { }
+    public void meth32721() { }
+    public void meth32722() { }
+    public void meth32723() { }
+    public void meth32724() { }
+    public void meth32725() { }
+    public void meth32726() { }
+    public void meth32727() { }
+    public void meth32728() { }
+    public void meth32729() { }
+    public void meth32730() { }
+    public void meth32731() { }
+    public void meth32732() { }
+    public void meth32733() { }
+    public void meth32734() { }
+    public void meth32735() { }
+    public void meth32736() { }
+    public void meth32737() { }
+    public void meth32738() { }
+    public void meth32739() { }
+    public void meth32740() { }
+    public void meth32741() { }
+    public void meth32742() { }
+    public void meth32743() { }
+    public void meth32744() { }
+    public void meth32745() { }
+    public void meth32746() { }
+    public void meth32747() { }
+    public void meth32748() { }
+    public void meth32749() { }
+    public void meth32750() { }
+    public void meth32751() { }
+    public void meth32752() { }
+    public void meth32753() { }
+    public void meth32754() { }
+    public void meth32755() { }
+    public void meth32756() { }
+    public void meth32757() { }
+    public void meth32758() { }
+    public void meth32759() { }
+    public void meth32760() { }
+    public void meth32761() { }
+    public void meth32762() { }
+    public void meth32763() { }
+    public void meth32764() { }
+    public void meth32765() { }
+    public void meth32766() { }
+    public void meth32767() { }
+    public void meth32768() { }
+    public void meth32769() { }
+    public void meth32770() { }
+    public void meth32771() { }
+    public void meth32772() { }
+    public void meth32773() { }
+    public void meth32774() { }
+    public void meth32775() { }
+    public void meth32776() { }
+    public void meth32777() { }
+    public void meth32778() { }
+    public void meth32779() { }
+    public void meth32780() { }
+    public void meth32781() { }
+    public void meth32782() { }
+    public void meth32783() { }
+    public void meth32784() { }
+    public void meth32785() { }
+    public void meth32786() { }
+    public void meth32787() { }
+    public void meth32788() { }
+    public void meth32789() { }
+    public void meth32790() { }
+    public void meth32791() { }
+    public void meth32792() { }
+    public void meth32793() { }
+    public void meth32794() { }
+    public void meth32795() { }
+    public void meth32796() { }
+    public void meth32797() { }
+    public void meth32798() { }
+    public void meth32799() { }
+    public void meth32800() { }
+    public void meth32801() { }
+    public void meth32802() { }
+    public void meth32803() { }
+    public void meth32804() { }
+    public void meth32805() { }
+    public void meth32806() { }
+    public void meth32807() { }
+    public void meth32808() { }
+    public void meth32809() { }
+    public void meth32810() { }
+    public void meth32811() { }
+    public void meth32812() { }
+    public void meth32813() { }
+    public void meth32814() { }
+    public void meth32815() { }
+    public void meth32816() { }
+    public void meth32817() { }
+    public void meth32818() { }
+    public void meth32819() { }
+    public void meth32820() { }
+    public void meth32821() { }
+    public void meth32822() { }
+    public void meth32823() { }
+    public void meth32824() { }
+    public void meth32825() { }
+    public void meth32826() { }
+    public void meth32827() { }
+    public void meth32828() { }
+    public void meth32829() { }
+    public void meth32830() { }
+    public void meth32831() { }
+    public void meth32832() { }
+    public void meth32833() { }
+    public void meth32834() { }
+    public void meth32835() { }
+    public void meth32836() { }
+    public void meth32837() { }
+    public void meth32838() { }
+    public void meth32839() { }
+    public void meth32840() { }
+    public void meth32841() { }
+    public void meth32842() { }
+    public void meth32843() { }
+    public void meth32844() { }
+    public void meth32845() { }
+    public void meth32846() { }
+    public void meth32847() { }
+    public void meth32848() { }
+    public void meth32849() { }
+    public void meth32850() { }
+    public void meth32851() { }
+    public void meth32852() { }
+    public void meth32853() { }
+    public void meth32854() { }
+    public void meth32855() { }
+    public void meth32856() { }
+    public void meth32857() { }
+    public void meth32858() { }
+    public void meth32859() { }
+    public void meth32860() { }
+    public void meth32861() { }
+    public void meth32862() { }
+    public void meth32863() { }
+    public void meth32864() { }
+    public void meth32865() { }
+    public void meth32866() { }
+    public void meth32867() { }
+    public void meth32868() { }
+    public void meth32869() { }
+    public void meth32870() { }
+    public void meth32871() { }
+    public void meth32872() { }
+    public void meth32873() { }
+    public void meth32874() { }
+    public void meth32875() { }
+    public void meth32876() { }
+    public void meth32877() { }
+    public void meth32878() { }
+    public void meth32879() { }
+    public void meth32880() { }
+    public void meth32881() { }
+    public void meth32882() { }
+    public void meth32883() { }
+    public void meth32884() { }
+    public void meth32885() { }
+    public void meth32886() { }
+    public void meth32887() { }
+    public void meth32888() { }
+    public void meth32889() { }
+    public void meth32890() { }
+    public void meth32891() { }
+    public void meth32892() { }
+    public void meth32893() { }
+    public void meth32894() { }
+    public void meth32895() { }
+    public void meth32896() { }
+    public void meth32897() { }
+    public void meth32898() { }
+    public void meth32899() { }
+    public void meth32900() { }
+    public void meth32901() { }
+    public void meth32902() { }
+    public void meth32903() { }
+    public void meth32904() { }
+    public void meth32905() { }
+    public void meth32906() { }
+    public void meth32907() { }
+    public void meth32908() { }
+    public void meth32909() { }
+    public void meth32910() { }
+    public void meth32911() { }
+    public void meth32912() { }
+    public void meth32913() { }
+    public void meth32914() { }
+    public void meth32915() { }
+    public void meth32916() { }
+    public void meth32917() { }
+    public void meth32918() { }
+    public void meth32919() { }
+    public void meth32920() { }
+    public void meth32921() { }
+    public void meth32922() { }
+    public void meth32923() { }
+    public void meth32924() { }
+    public void meth32925() { }
+    public void meth32926() { }
+    public void meth32927() { }
+    public void meth32928() { }
+    public void meth32929() { }
+    public void meth32930() { }
+    public void meth32931() { }
+    public void meth32932() { }
+    public void meth32933() { }
+    public void meth32934() { }
+    public void meth32935() { }
+    public void meth32936() { }
+    public void meth32937() { }
+    public void meth32938() { }
+    public void meth32939() { }
+    public void meth32940() { }
+    public void meth32941() { }
+    public void meth32942() { }
+    public void meth32943() { }
+    public void meth32944() { }
+    public void meth32945() { }
+    public void meth32946() { }
+    public void meth32947() { }
+    public void meth32948() { }
+    public void meth32949() { }
+    public void meth32950() { }
+    public void meth32951() { }
+    public void meth32952() { }
+    public void meth32953() { }
+    public void meth32954() { }
+    public void meth32955() { }
+    public void meth32956() { }
+    public void meth32957() { }
+    public void meth32958() { }
+    public void meth32959() { }
+    public void meth32960() { }
+    public void meth32961() { }
+    public void meth32962() { }
+    public void meth32963() { }
+    public void meth32964() { }
+    public void meth32965() { }
+    public void meth32966() { }
+    public void meth32967() { }
+    public void meth32968() { }
+    public void meth32969() { }
+    public void meth32970() { }
+    public void meth32971() { }
+    public void meth32972() { }
+    public void meth32973() { }
+    public void meth32974() { }
+    public void meth32975() { }
+    public void meth32976() { }
+    public void meth32977() { }
+    public void meth32978() { }
+    public void meth32979() { }
+    public void meth32980() { }
+    public void meth32981() { }
+    public void meth32982() { }
+    public void meth32983() { }
+    public void meth32984() { }
+    public void meth32985() { }
+    public void meth32986() { }
+    public void meth32987() { }
+    public void meth32988() { }
+    public void meth32989() { }
+    public void meth32990() { }
+    public void meth32991() { }
+    public void meth32992() { }
+    public void meth32993() { }
+    public void meth32994() { }
+    public void meth32995() { }
+    public void meth32996() { }
+    public void meth32997() { }
+    public void meth32998() { }
+    public void meth32999() { }
+    public void meth33000() { }
+    public void meth33001() { }
+    public void meth33002() { }
+    public void meth33003() { }
+    public void meth33004() { }
+    public void meth33005() { }
+    public void meth33006() { }
+    public void meth33007() { }
+    public void meth33008() { }
+    public void meth33009() { }
+    public void meth33010() { }
+    public void meth33011() { }
+    public void meth33012() { }
+    public void meth33013() { }
+    public void meth33014() { }
+    public void meth33015() { }
+    public void meth33016() { }
+    public void meth33017() { }
+    public void meth33018() { }
+    public void meth33019() { }
+    public void meth33020() { }
+    public void meth33021() { }
+    public void meth33022() { }
+    public void meth33023() { }
+    public void meth33024() { }
+    public void meth33025() { }
+    public void meth33026() { }
+    public void meth33027() { }
+    public void meth33028() { }
+    public void meth33029() { }
+    public void meth33030() { }
+    public void meth33031() { }
+    public void meth33032() { }
+    public void meth33033() { }
+    public void meth33034() { }
+    public void meth33035() { }
+    public void meth33036() { }
+    public void meth33037() { }
+    public void meth33038() { }
+    public void meth33039() { }
+    public void meth33040() { }
+    public void meth33041() { }
+    public void meth33042() { }
+    public void meth33043() { }
+    public void meth33044() { }
+    public void meth33045() { }
+    public void meth33046() { }
+    public void meth33047() { }
+    public void meth33048() { }
+    public void meth33049() { }
+    public void meth33050() { }
+    public void meth33051() { }
+    public void meth33052() { }
+    public void meth33053() { }
+    public void meth33054() { }
+    public void meth33055() { }
+    public void meth33056() { }
+    public void meth33057() { }
+    public void meth33058() { }
+    public void meth33059() { }
+    public void meth33060() { }
+    public void meth33061() { }
+    public void meth33062() { }
+    public void meth33063() { }
+    public void meth33064() { }
+    public void meth33065() { }
+    public void meth33066() { }
+    public void meth33067() { }
+    public void meth33068() { }
+    public void meth33069() { }
+    public void meth33070() { }
+    public void meth33071() { }
+    public void meth33072() { }
+    public void meth33073() { }
+    public void meth33074() { }
+    public void meth33075() { }
+    public void meth33076() { }
+    public void meth33077() { }
+    public void meth33078() { }
+    public void meth33079() { }
+    public void meth33080() { }
+    public void meth33081() { }
+    public void meth33082() { }
+    public void meth33083() { }
+    public void meth33084() { }
+    public void meth33085() { }
+    public void meth33086() { }
+    public void meth33087() { }
+    public void meth33088() { }
+    public void meth33089() { }
+    public void meth33090() { }
+    public void meth33091() { }
+    public void meth33092() { }
+    public void meth33093() { }
+    public void meth33094() { }
+    public void meth33095() { }
+    public void meth33096() { }
+    public void meth33097() { }
+    public void meth33098() { }
+    public void meth33099() { }
+    public void meth33100() { }
+    public void meth33101() { }
+    public void meth33102() { }
+    public void meth33103() { }
+    public void meth33104() { }
+    public void meth33105() { }
+    public void meth33106() { }
+    public void meth33107() { }
+    public void meth33108() { }
+    public void meth33109() { }
+    public void meth33110() { }
+    public void meth33111() { }
+    public void meth33112() { }
+    public void meth33113() { }
+    public void meth33114() { }
+    public void meth33115() { }
+    public void meth33116() { }
+    public void meth33117() { }
+    public void meth33118() { }
+    public void meth33119() { }
+    public void meth33120() { }
+    public void meth33121() { }
+    public void meth33122() { }
+    public void meth33123() { }
+    public void meth33124() { }
+    public void meth33125() { }
+    public void meth33126() { }
+    public void meth33127() { }
+    public void meth33128() { }
+    public void meth33129() { }
+    public void meth33130() { }
+    public void meth33131() { }
+    public void meth33132() { }
+    public void meth33133() { }
+    public void meth33134() { }
+    public void meth33135() { }
+    public void meth33136() { }
+    public void meth33137() { }
+    public void meth33138() { }
+    public void meth33139() { }
+    public void meth33140() { }
+    public void meth33141() { }
+    public void meth33142() { }
+    public void meth33143() { }
+    public void meth33144() { }
+    public void meth33145() { }
+    public void meth33146() { }
+    public void meth33147() { }
+    public void meth33148() { }
+    public void meth33149() { }
+    public void meth33150() { }
+    public void meth33151() { }
+    public void meth33152() { }
+    public void meth33153() { }
+    public void meth33154() { }
+    public void meth33155() { }
+    public void meth33156() { }
+    public void meth33157() { }
+    public void meth33158() { }
+    public void meth33159() { }
+    public void meth33160() { }
+    public void meth33161() { }
+    public void meth33162() { }
+    public void meth33163() { }
+    public void meth33164() { }
+    public void meth33165() { }
+    public void meth33166() { }
+    public void meth33167() { }
+    public void meth33168() { }
+    public void meth33169() { }
+    public void meth33170() { }
+    public void meth33171() { }
+    public void meth33172() { }
+    public void meth33173() { }
+    public void meth33174() { }
+    public void meth33175() { }
+    public void meth33176() { }
+    public void meth33177() { }
+    public void meth33178() { }
+    public void meth33179() { }
+    public void meth33180() { }
+    public void meth33181() { }
+    public void meth33182() { }
+    public void meth33183() { }
+    public void meth33184() { }
+    public void meth33185() { }
+    public void meth33186() { }
+    public void meth33187() { }
+    public void meth33188() { }
+    public void meth33189() { }
+    public void meth33190() { }
+    public void meth33191() { }
+    public void meth33192() { }
+    public void meth33193() { }
+    public void meth33194() { }
+    public void meth33195() { }
+    public void meth33196() { }
+    public void meth33197() { }
+    public void meth33198() { }
+    public void meth33199() { }
+    public void meth33200() { }
+    public void meth33201() { }
+    public void meth33202() { }
+    public void meth33203() { }
+    public void meth33204() { }
+    public void meth33205() { }
+    public void meth33206() { }
+    public void meth33207() { }
+    public void meth33208() { }
+    public void meth33209() { }
+    public void meth33210() { }
+    public void meth33211() { }
+    public void meth33212() { }
+    public void meth33213() { }
+    public void meth33214() { }
+    public void meth33215() { }
+    public void meth33216() { }
+    public void meth33217() { }
+    public void meth33218() { }
+    public void meth33219() { }
+    public void meth33220() { }
+    public void meth33221() { }
+    public void meth33222() { }
+    public void meth33223() { }
+    public void meth33224() { }
+    public void meth33225() { }
+    public void meth33226() { }
+    public void meth33227() { }
+    public void meth33228() { }
+    public void meth33229() { }
+    public void meth33230() { }
+    public void meth33231() { }
+    public void meth33232() { }
+    public void meth33233() { }
+    public void meth33234() { }
+    public void meth33235() { }
+    public void meth33236() { }
+    public void meth33237() { }
+    public void meth33238() { }
+    public void meth33239() { }
+    public void meth33240() { }
+    public void meth33241() { }
+    public void meth33242() { }
+    public void meth33243() { }
+    public void meth33244() { }
+    public void meth33245() { }
+    public void meth33246() { }
+    public void meth33247() { }
+    public void meth33248() { }
+    public void meth33249() { }
+    public void meth33250() { }
+    public void meth33251() { }
+    public void meth33252() { }
+    public void meth33253() { }
+    public void meth33254() { }
+    public void meth33255() { }
+    public void meth33256() { }
+    public void meth33257() { }
+    public void meth33258() { }
+    public void meth33259() { }
+    public void meth33260() { }
+    public void meth33261() { }
+    public void meth33262() { }
+    public void meth33263() { }
+    public void meth33264() { }
+    public void meth33265() { }
+    public void meth33266() { }
+    public void meth33267() { }
+    public void meth33268() { }
+    public void meth33269() { }
+    public void meth33270() { }
+    public void meth33271() { }
+    public void meth33272() { }
+    public void meth33273() { }
+    public void meth33274() { }
+    public void meth33275() { }
+    public void meth33276() { }
+    public void meth33277() { }
+    public void meth33278() { }
+    public void meth33279() { }
+    public void meth33280() { }
+    public void meth33281() { }
+    public void meth33282() { }
+    public void meth33283() { }
+    public void meth33284() { }
+    public void meth33285() { }
+    public void meth33286() { }
+    public void meth33287() { }
+    public void meth33288() { }
+    public void meth33289() { }
+    public void meth33290() { }
+    public void meth33291() { }
+    public void meth33292() { }
+    public void meth33293() { }
+    public void meth33294() { }
+    public void meth33295() { }
+    public void meth33296() { }
+    public void meth33297() { }
+    public void meth33298() { }
+    public void meth33299() { }
+    public void meth33300() { }
+    public void meth33301() { }
+    public void meth33302() { }
+    public void meth33303() { }
+    public void meth33304() { }
+    public void meth33305() { }
+    public void meth33306() { }
+    public void meth33307() { }
+    public void meth33308() { }
+    public void meth33309() { }
+    public void meth33310() { }
+    public void meth33311() { }
+    public void meth33312() { }
+    public void meth33313() { }
+    public void meth33314() { }
+    public void meth33315() { }
+    public void meth33316() { }
+    public void meth33317() { }
+    public void meth33318() { }
+    public void meth33319() { }
+    public void meth33320() { }
+    public void meth33321() { }
+    public void meth33322() { }
+    public void meth33323() { }
+    public void meth33324() { }
+    public void meth33325() { }
+    public void meth33326() { }
+    public void meth33327() { }
+    public void meth33328() { }
+    public void meth33329() { }
+    public void meth33330() { }
+    public void meth33331() { }
+    public void meth33332() { }
+    public void meth33333() { }
+    public void meth33334() { }
+    public void meth33335() { }
+    public void meth33336() { }
+    public void meth33337() { }
+    public void meth33338() { }
+    public void meth33339() { }
+    public void meth33340() { }
+    public void meth33341() { }
+    public void meth33342() { }
+    public void meth33343() { }
+    public void meth33344() { }
+    public void meth33345() { }
+    public void meth33346() { }
+    public void meth33347() { }
+    public void meth33348() { }
+    public void meth33349() { }
+    public void meth33350() { }
+    public void meth33351() { }
+    public void meth33352() { }
+    public void meth33353() { }
+    public void meth33354() { }
+    public void meth33355() { }
+    public void meth33356() { }
+    public void meth33357() { }
+    public void meth33358() { }
+    public void meth33359() { }
+    public void meth33360() { }
+    public void meth33361() { }
+    public void meth33362() { }
+    public void meth33363() { }
+    public void meth33364() { }
+    public void meth33365() { }
+    public void meth33366() { }
+    public void meth33367() { }
+    public void meth33368() { }
+    public void meth33369() { }
+    public void meth33370() { }
+    public void meth33371() { }
+    public void meth33372() { }
+    public void meth33373() { }
+    public void meth33374() { }
+    public void meth33375() { }
+    public void meth33376() { }
+    public void meth33377() { }
+    public void meth33378() { }
+    public void meth33379() { }
+    public void meth33380() { }
+    public void meth33381() { }
+    public void meth33382() { }
+    public void meth33383() { }
+    public void meth33384() { }
+    public void meth33385() { }
+    public void meth33386() { }
+    public void meth33387() { }
+    public void meth33388() { }
+    public void meth33389() { }
+    public void meth33390() { }
+    public void meth33391() { }
+    public void meth33392() { }
+    public void meth33393() { }
+    public void meth33394() { }
+    public void meth33395() { }
+    public void meth33396() { }
+    public void meth33397() { }
+    public void meth33398() { }
+    public void meth33399() { }
+    public void meth33400() { }
+    public void meth33401() { }
+    public void meth33402() { }
+    public void meth33403() { }
+    public void meth33404() { }
+    public void meth33405() { }
+    public void meth33406() { }
+    public void meth33407() { }
+    public void meth33408() { }
+    public void meth33409() { }
+    public void meth33410() { }
+    public void meth33411() { }
+    public void meth33412() { }
+    public void meth33413() { }
+    public void meth33414() { }
+    public void meth33415() { }
+    public void meth33416() { }
+    public void meth33417() { }
+    public void meth33418() { }
+    public void meth33419() { }
+    public void meth33420() { }
+    public void meth33421() { }
+    public void meth33422() { }
+    public void meth33423() { }
+    public void meth33424() { }
+    public void meth33425() { }
+    public void meth33426() { }
+    public void meth33427() { }
+    public void meth33428() { }
+    public void meth33429() { }
+    public void meth33430() { }
+    public void meth33431() { }
+    public void meth33432() { }
+    public void meth33433() { }
+    public void meth33434() { }
+    public void meth33435() { }
+    public void meth33436() { }
+    public void meth33437() { }
+    public void meth33438() { }
+    public void meth33439() { }
+    public void meth33440() { }
+    public void meth33441() { }
+    public void meth33442() { }
+    public void meth33443() { }
+    public void meth33444() { }
+    public void meth33445() { }
+    public void meth33446() { }
+    public void meth33447() { }
+    public void meth33448() { }
+    public void meth33449() { }
+    public void meth33450() { }
+    public void meth33451() { }
+    public void meth33452() { }
+    public void meth33453() { }
+    public void meth33454() { }
+    public void meth33455() { }
+    public void meth33456() { }
+    public void meth33457() { }
+    public void meth33458() { }
+    public void meth33459() { }
+    public void meth33460() { }
+    public void meth33461() { }
+    public void meth33462() { }
+    public void meth33463() { }
+    public void meth33464() { }
+    public void meth33465() { }
+    public void meth33466() { }
+    public void meth33467() { }
+    public void meth33468() { }
+    public void meth33469() { }
+    public void meth33470() { }
+    public void meth33471() { }
+    public void meth33472() { }
+    public void meth33473() { }
+    public void meth33474() { }
+    public void meth33475() { }
+    public void meth33476() { }
+    public void meth33477() { }
+    public void meth33478() { }
+    public void meth33479() { }
+    public void meth33480() { }
+    public void meth33481() { }
+    public void meth33482() { }
+    public void meth33483() { }
+    public void meth33484() { }
+    public void meth33485() { }
+    public void meth33486() { }
+    public void meth33487() { }
+    public void meth33488() { }
+    public void meth33489() { }
+    public void meth33490() { }
+    public void meth33491() { }
+    public void meth33492() { }
+    public void meth33493() { }
+    public void meth33494() { }
+    public void meth33495() { }
+    public void meth33496() { }
+    public void meth33497() { }
+    public void meth33498() { }
+    public void meth33499() { }
+    public void meth33500() { }
+    public void meth33501() { }
+    public void meth33502() { }
+    public void meth33503() { }
+    public void meth33504() { }
+    public void meth33505() { }
+    public void meth33506() { }
+    public void meth33507() { }
+    public void meth33508() { }
+    public void meth33509() { }
+    public void meth33510() { }
+    public void meth33511() { }
+    public void meth33512() { }
+    public void meth33513() { }
+    public void meth33514() { }
+    public void meth33515() { }
+    public void meth33516() { }
+    public void meth33517() { }
+    public void meth33518() { }
+    public void meth33519() { }
+    public void meth33520() { }
+    public void meth33521() { }
+    public void meth33522() { }
+    public void meth33523() { }
+    public void meth33524() { }
+    public void meth33525() { }
+    public void meth33526() { }
+    public void meth33527() { }
+    public void meth33528() { }
+    public void meth33529() { }
+    public void meth33530() { }
+    public void meth33531() { }
+    public void meth33532() { }
+    public void meth33533() { }
+    public void meth33534() { }
+    public void meth33535() { }
+    public void meth33536() { }
+    public void meth33537() { }
+    public void meth33538() { }
+    public void meth33539() { }
+    public void meth33540() { }
+    public void meth33541() { }
+    public void meth33542() { }
+    public void meth33543() { }
+    public void meth33544() { }
+    public void meth33545() { }
+    public void meth33546() { }
+    public void meth33547() { }
+    public void meth33548() { }
+    public void meth33549() { }
+    public void meth33550() { }
+    public void meth33551() { }
+    public void meth33552() { }
+    public void meth33553() { }
+    public void meth33554() { }
+    public void meth33555() { }
+    public void meth33556() { }
+    public void meth33557() { }
+    public void meth33558() { }
+    public void meth33559() { }
+    public void meth33560() { }
+    public void meth33561() { }
+    public void meth33562() { }
+    public void meth33563() { }
+    public void meth33564() { }
+    public void meth33565() { }
+    public void meth33566() { }
+    public void meth33567() { }
+    public void meth33568() { }
+    public void meth33569() { }
+    public void meth33570() { }
+    public void meth33571() { }
+    public void meth33572() { }
+    public void meth33573() { }
+    public void meth33574() { }
+    public void meth33575() { }
+    public void meth33576() { }
+    public void meth33577() { }
+    public void meth33578() { }
+    public void meth33579() { }
+    public void meth33580() { }
+    public void meth33581() { }
+    public void meth33582() { }
+    public void meth33583() { }
+    public void meth33584() { }
+    public void meth33585() { }
+    public void meth33586() { }
+    public void meth33587() { }
+    public void meth33588() { }
+    public void meth33589() { }
+    public void meth33590() { }
+    public void meth33591() { }
+    public void meth33592() { }
+    public void meth33593() { }
+    public void meth33594() { }
+    public void meth33595() { }
+    public void meth33596() { }
+    public void meth33597() { }
+    public void meth33598() { }
+    public void meth33599() { }
+    public void meth33600() { }
+    public void meth33601() { }
+    public void meth33602() { }
+    public void meth33603() { }
+    public void meth33604() { }
+    public void meth33605() { }
+    public void meth33606() { }
+    public void meth33607() { }
+    public void meth33608() { }
+    public void meth33609() { }
+    public void meth33610() { }
+    public void meth33611() { }
+    public void meth33612() { }
+    public void meth33613() { }
+    public void meth33614() { }
+    public void meth33615() { }
+    public void meth33616() { }
+    public void meth33617() { }
+    public void meth33618() { }
+    public void meth33619() { }
+    public void meth33620() { }
+    public void meth33621() { }
+    public void meth33622() { }
+    public void meth33623() { }
+    public void meth33624() { }
+    public void meth33625() { }
+    public void meth33626() { }
+    public void meth33627() { }
+    public void meth33628() { }
+    public void meth33629() { }
+    public void meth33630() { }
+    public void meth33631() { }
+    public void meth33632() { }
+    public void meth33633() { }
+    public void meth33634() { }
+    public void meth33635() { }
+    public void meth33636() { }
+    public void meth33637() { }
+    public void meth33638() { }
+    public void meth33639() { }
+    public void meth33640() { }
+    public void meth33641() { }
+    public void meth33642() { }
+    public void meth33643() { }
+    public void meth33644() { }
+    public void meth33645() { }
+    public void meth33646() { }
+    public void meth33647() { }
+    public void meth33648() { }
+    public void meth33649() { }
+    public void meth33650() { }
+    public void meth33651() { }
+    public void meth33652() { }
+    public void meth33653() { }
+    public void meth33654() { }
+    public void meth33655() { }
+    public void meth33656() { }
+    public void meth33657() { }
+    public void meth33658() { }
+    public void meth33659() { }
+    public void meth33660() { }
+    public void meth33661() { }
+    public void meth33662() { }
+    public void meth33663() { }
+    public void meth33664() { }
+    public void meth33665() { }
+    public void meth33666() { }
+    public void meth33667() { }
+    public void meth33668() { }
+    public void meth33669() { }
+    public void meth33670() { }
+    public void meth33671() { }
+    public void meth33672() { }
+    public void meth33673() { }
+    public void meth33674() { }
+    public void meth33675() { }
+    public void meth33676() { }
+    public void meth33677() { }
+    public void meth33678() { }
+    public void meth33679() { }
+    public void meth33680() { }
+    public void meth33681() { }
+    public void meth33682() { }
+    public void meth33683() { }
+    public void meth33684() { }
+    public void meth33685() { }
+    public void meth33686() { }
+    public void meth33687() { }
+    public void meth33688() { }
+    public void meth33689() { }
+    public void meth33690() { }
+    public void meth33691() { }
+    public void meth33692() { }
+    public void meth33693() { }
+    public void meth33694() { }
+    public void meth33695() { }
+    public void meth33696() { }
+    public void meth33697() { }
+    public void meth33698() { }
+    public void meth33699() { }
+    public void meth33700() { }
+    public void meth33701() { }
+    public void meth33702() { }
+    public void meth33703() { }
+    public void meth33704() { }
+    public void meth33705() { }
+    public void meth33706() { }
+    public void meth33707() { }
+    public void meth33708() { }
+    public void meth33709() { }
+    public void meth33710() { }
+    public void meth33711() { }
+    public void meth33712() { }
+    public void meth33713() { }
+    public void meth33714() { }
+    public void meth33715() { }
+    public void meth33716() { }
+    public void meth33717() { }
+    public void meth33718() { }
+    public void meth33719() { }
+    public void meth33720() { }
+    public void meth33721() { }
+    public void meth33722() { }
+    public void meth33723() { }
+    public void meth33724() { }
+    public void meth33725() { }
+    public void meth33726() { }
+    public void meth33727() { }
+    public void meth33728() { }
+    public void meth33729() { }
+    public void meth33730() { }
+    public void meth33731() { }
+    public void meth33732() { }
+    public void meth33733() { }
+    public void meth33734() { }
+    public void meth33735() { }
+    public void meth33736() { }
+    public void meth33737() { }
+    public void meth33738() { }
+    public void meth33739() { }
+    public void meth33740() { }
+    public void meth33741() { }
+    public void meth33742() { }
+    public void meth33743() { }
+    public void meth33744() { }
+    public void meth33745() { }
+    public void meth33746() { }
+    public void meth33747() { }
+    public void meth33748() { }
+    public void meth33749() { }
+    public void meth33750() { }
+    public void meth33751() { }
+    public void meth33752() { }
+    public void meth33753() { }
+    public void meth33754() { }
+    public void meth33755() { }
+    public void meth33756() { }
+    public void meth33757() { }
+    public void meth33758() { }
+    public void meth33759() { }
+    public void meth33760() { }
+    public void meth33761() { }
+    public void meth33762() { }
+    public void meth33763() { }
+    public void meth33764() { }
+    public void meth33765() { }
+    public void meth33766() { }
+    public void meth33767() { }
+    public void meth33768() { }
+    public void meth33769() { }
+    public void meth33770() { }
+    public void meth33771() { }
+    public void meth33772() { }
+    public void meth33773() { }
+    public void meth33774() { }
+    public void meth33775() { }
+    public void meth33776() { }
+    public void meth33777() { }
+    public void meth33778() { }
+    public void meth33779() { }
+    public void meth33780() { }
+    public void meth33781() { }
+    public void meth33782() { }
+    public void meth33783() { }
+    public void meth33784() { }
+    public void meth33785() { }
+    public void meth33786() { }
+    public void meth33787() { }
+    public void meth33788() { }
+    public void meth33789() { }
+    public void meth33790() { }
+    public void meth33791() { }
+    public void meth33792() { }
+    public void meth33793() { }
+    public void meth33794() { }
+    public void meth33795() { }
+    public void meth33796() { }
+    public void meth33797() { }
+    public void meth33798() { }
+    public void meth33799() { }
+    public void meth33800() { }
+    public void meth33801() { }
+    public void meth33802() { }
+    public void meth33803() { }
+    public void meth33804() { }
+    public void meth33805() { }
+    public void meth33806() { }
+    public void meth33807() { }
+    public void meth33808() { }
+    public void meth33809() { }
+    public void meth33810() { }
+    public void meth33811() { }
+    public void meth33812() { }
+    public void meth33813() { }
+    public void meth33814() { }
+    public void meth33815() { }
+    public void meth33816() { }
+    public void meth33817() { }
+    public void meth33818() { }
+    public void meth33819() { }
+    public void meth33820() { }
+    public void meth33821() { }
+    public void meth33822() { }
+    public void meth33823() { }
+    public void meth33824() { }
+    public void meth33825() { }
+    public void meth33826() { }
+    public void meth33827() { }
+    public void meth33828() { }
+    public void meth33829() { }
+    public void meth33830() { }
+    public void meth33831() { }
+    public void meth33832() { }
+    public void meth33833() { }
+    public void meth33834() { }
+    public void meth33835() { }
+    public void meth33836() { }
+    public void meth33837() { }
+    public void meth33838() { }
+    public void meth33839() { }
+    public void meth33840() { }
+    public void meth33841() { }
+    public void meth33842() { }
+    public void meth33843() { }
+    public void meth33844() { }
+    public void meth33845() { }
+    public void meth33846() { }
+    public void meth33847() { }
+    public void meth33848() { }
+    public void meth33849() { }
+    public void meth33850() { }
+    public void meth33851() { }
+    public void meth33852() { }
+    public void meth33853() { }
+    public void meth33854() { }
+    public void meth33855() { }
+    public void meth33856() { }
+    public void meth33857() { }
+    public void meth33858() { }
+    public void meth33859() { }
+    public void meth33860() { }
+    public void meth33861() { }
+    public void meth33862() { }
+    public void meth33863() { }
+    public void meth33864() { }
+    public void meth33865() { }
+    public void meth33866() { }
+    public void meth33867() { }
+    public void meth33868() { }
+    public void meth33869() { }
+    public void meth33870() { }
+    public void meth33871() { }
+    public void meth33872() { }
+    public void meth33873() { }
+    public void meth33874() { }
+    public void meth33875() { }
+    public void meth33876() { }
+    public void meth33877() { }
+    public void meth33878() { }
+    public void meth33879() { }
+    public void meth33880() { }
+    public void meth33881() { }
+    public void meth33882() { }
+    public void meth33883() { }
+    public void meth33884() { }
+    public void meth33885() { }
+    public void meth33886() { }
+    public void meth33887() { }
+    public void meth33888() { }
+    public void meth33889() { }
+    public void meth33890() { }
+    public void meth33891() { }
+    public void meth33892() { }
+    public void meth33893() { }
+    public void meth33894() { }
+    public void meth33895() { }
+    public void meth33896() { }
+    public void meth33897() { }
+    public void meth33898() { }
+    public void meth33899() { }
+    public void meth33900() { }
+    public void meth33901() { }
+    public void meth33902() { }
+    public void meth33903() { }
+    public void meth33904() { }
+    public void meth33905() { }
+    public void meth33906() { }
+    public void meth33907() { }
+    public void meth33908() { }
+    public void meth33909() { }
+    public void meth33910() { }
+    public void meth33911() { }
+    public void meth33912() { }
+    public void meth33913() { }
+    public void meth33914() { }
+    public void meth33915() { }
+    public void meth33916() { }
+    public void meth33917() { }
+    public void meth33918() { }
+    public void meth33919() { }
+    public void meth33920() { }
+    public void meth33921() { }
+    public void meth33922() { }
+    public void meth33923() { }
+    public void meth33924() { }
+    public void meth33925() { }
+    public void meth33926() { }
+    public void meth33927() { }
+    public void meth33928() { }
+    public void meth33929() { }
+    public void meth33930() { }
+    public void meth33931() { }
+    public void meth33932() { }
+    public void meth33933() { }
+    public void meth33934() { }
+    public void meth33935() { }
+    public void meth33936() { }
+    public void meth33937() { }
+    public void meth33938() { }
+    public void meth33939() { }
+    public void meth33940() { }
+    public void meth33941() { }
+    public void meth33942() { }
+    public void meth33943() { }
+    public void meth33944() { }
+    public void meth33945() { }
+    public void meth33946() { }
+    public void meth33947() { }
+    public void meth33948() { }
+    public void meth33949() { }
+    public void meth33950() { }
+    public void meth33951() { }
+    public void meth33952() { }
+    public void meth33953() { }
+    public void meth33954() { }
+    public void meth33955() { }
+    public void meth33956() { }
+    public void meth33957() { }
+    public void meth33958() { }
+    public void meth33959() { }
+    public void meth33960() { }
+    public void meth33961() { }
+    public void meth33962() { }
+    public void meth33963() { }
+    public void meth33964() { }
+    public void meth33965() { }
+    public void meth33966() { }
+    public void meth33967() { }
+    public void meth33968() { }
+    public void meth33969() { }
+    public void meth33970() { }
+    public void meth33971() { }
+    public void meth33972() { }
+    public void meth33973() { }
+    public void meth33974() { }
+    public void meth33975() { }
+    public void meth33976() { }
+    public void meth33977() { }
+    public void meth33978() { }
+    public void meth33979() { }
+    public void meth33980() { }
+    public void meth33981() { }
+    public void meth33982() { }
+    public void meth33983() { }
+    public void meth33984() { }
+    public void meth33985() { }
+    public void meth33986() { }
+    public void meth33987() { }
+    public void meth33988() { }
+    public void meth33989() { }
+    public void meth33990() { }
+    public void meth33991() { }
+    public void meth33992() { }
+    public void meth33993() { }
+    public void meth33994() { }
+    public void meth33995() { }
+    public void meth33996() { }
+    public void meth33997() { }
+    public void meth33998() { }
+    public void meth33999() { }
+    public void meth34000() { }
+    public void meth34001() { }
+    public void meth34002() { }
+    public void meth34003() { }
+    public void meth34004() { }
+    public void meth34005() { }
+    public void meth34006() { }
+    public void meth34007() { }
+    public void meth34008() { }
+    public void meth34009() { }
+    public void meth34010() { }
+    public void meth34011() { }
+    public void meth34012() { }
+    public void meth34013() { }
+    public void meth34014() { }
+    public void meth34015() { }
+    public void meth34016() { }
+    public void meth34017() { }
+    public void meth34018() { }
+    public void meth34019() { }
+    public void meth34020() { }
+    public void meth34021() { }
+    public void meth34022() { }
+    public void meth34023() { }
+    public void meth34024() { }
+    public void meth34025() { }
+    public void meth34026() { }
+    public void meth34027() { }
+    public void meth34028() { }
+    public void meth34029() { }
+    public void meth34030() { }
+    public void meth34031() { }
+    public void meth34032() { }
+    public void meth34033() { }
+    public void meth34034() { }
+    public void meth34035() { }
+    public void meth34036() { }
+    public void meth34037() { }
+    public void meth34038() { }
+    public void meth34039() { }
+    public void meth34040() { }
+    public void meth34041() { }
+    public void meth34042() { }
+    public void meth34043() { }
+    public void meth34044() { }
+    public void meth34045() { }
+    public void meth34046() { }
+    public void meth34047() { }
+    public void meth34048() { }
+    public void meth34049() { }
+    public void meth34050() { }
+    public void meth34051() { }
+    public void meth34052() { }
+    public void meth34053() { }
+    public void meth34054() { }
+    public void meth34055() { }
+    public void meth34056() { }
+    public void meth34057() { }
+    public void meth34058() { }
+    public void meth34059() { }
+    public void meth34060() { }
+    public void meth34061() { }
+    public void meth34062() { }
+    public void meth34063() { }
+    public void meth34064() { }
+    public void meth34065() { }
+    public void meth34066() { }
+    public void meth34067() { }
+    public void meth34068() { }
+    public void meth34069() { }
+    public void meth34070() { }
+    public void meth34071() { }
+    public void meth34072() { }
+    public void meth34073() { }
+    public void meth34074() { }
+    public void meth34075() { }
+    public void meth34076() { }
+    public void meth34077() { }
+    public void meth34078() { }
+    public void meth34079() { }
+    public void meth34080() { }
+    public void meth34081() { }
+    public void meth34082() { }
+    public void meth34083() { }
+    public void meth34084() { }
+    public void meth34085() { }
+    public void meth34086() { }
+    public void meth34087() { }
+    public void meth34088() { }
+    public void meth34089() { }
+    public void meth34090() { }
+    public void meth34091() { }
+    public void meth34092() { }
+    public void meth34093() { }
+    public void meth34094() { }
+    public void meth34095() { }
+    public void meth34096() { }
+    public void meth34097() { }
+    public void meth34098() { }
+    public void meth34099() { }
+    public void meth34100() { }
+    public void meth34101() { }
+    public void meth34102() { }
+    public void meth34103() { }
+    public void meth34104() { }
+    public void meth34105() { }
+    public void meth34106() { }
+    public void meth34107() { }
+    public void meth34108() { }
+    public void meth34109() { }
+    public void meth34110() { }
+    public void meth34111() { }
+    public void meth34112() { }
+    public void meth34113() { }
+    public void meth34114() { }
+    public void meth34115() { }
+    public void meth34116() { }
+    public void meth34117() { }
+    public void meth34118() { }
+    public void meth34119() { }
+    public void meth34120() { }
+    public void meth34121() { }
+    public void meth34122() { }
+    public void meth34123() { }
+    public void meth34124() { }
+    public void meth34125() { }
+    public void meth34126() { }
+    public void meth34127() { }
+    public void meth34128() { }
+    public void meth34129() { }
+    public void meth34130() { }
+    public void meth34131() { }
+    public void meth34132() { }
+    public void meth34133() { }
+    public void meth34134() { }
+    public void meth34135() { }
+    public void meth34136() { }
+    public void meth34137() { }
+    public void meth34138() { }
+    public void meth34139() { }
+    public void meth34140() { }
+    public void meth34141() { }
+    public void meth34142() { }
+    public void meth34143() { }
+    public void meth34144() { }
+    public void meth34145() { }
+    public void meth34146() { }
+    public void meth34147() { }
+    public void meth34148() { }
+    public void meth34149() { }
+    public void meth34150() { }
+    public void meth34151() { }
+    public void meth34152() { }
+    public void meth34153() { }
+    public void meth34154() { }
+    public void meth34155() { }
+    public void meth34156() { }
+    public void meth34157() { }
+    public void meth34158() { }
+    public void meth34159() { }
+    public void meth34160() { }
+    public void meth34161() { }
+    public void meth34162() { }
+    public void meth34163() { }
+    public void meth34164() { }
+    public void meth34165() { }
+    public void meth34166() { }
+    public void meth34167() { }
+    public void meth34168() { }
+    public void meth34169() { }
+    public void meth34170() { }
+    public void meth34171() { }
+    public void meth34172() { }
+    public void meth34173() { }
+    public void meth34174() { }
+    public void meth34175() { }
+    public void meth34176() { }
+    public void meth34177() { }
+    public void meth34178() { }
+    public void meth34179() { }
+    public void meth34180() { }
+    public void meth34181() { }
+    public void meth34182() { }
+    public void meth34183() { }
+    public void meth34184() { }
+    public void meth34185() { }
+    public void meth34186() { }
+    public void meth34187() { }
+    public void meth34188() { }
+    public void meth34189() { }
+    public void meth34190() { }
+    public void meth34191() { }
+    public void meth34192() { }
+    public void meth34193() { }
+    public void meth34194() { }
+    public void meth34195() { }
+    public void meth34196() { }
+    public void meth34197() { }
+    public void meth34198() { }
+    public void meth34199() { }
+    public void meth34200() { }
+    public void meth34201() { }
+    public void meth34202() { }
+    public void meth34203() { }
+    public void meth34204() { }
+    public void meth34205() { }
+    public void meth34206() { }
+    public void meth34207() { }
+    public void meth34208() { }
+    public void meth34209() { }
+    public void meth34210() { }
+    public void meth34211() { }
+    public void meth34212() { }
+    public void meth34213() { }
+    public void meth34214() { }
+    public void meth34215() { }
+    public void meth34216() { }
+    public void meth34217() { }
+    public void meth34218() { }
+    public void meth34219() { }
+    public void meth34220() { }
+    public void meth34221() { }
+    public void meth34222() { }
+    public void meth34223() { }
+    public void meth34224() { }
+    public void meth34225() { }
+    public void meth34226() { }
+    public void meth34227() { }
+    public void meth34228() { }
+    public void meth34229() { }
+    public void meth34230() { }
+    public void meth34231() { }
+    public void meth34232() { }
+    public void meth34233() { }
+    public void meth34234() { }
+    public void meth34235() { }
+    public void meth34236() { }
+    public void meth34237() { }
+    public void meth34238() { }
+    public void meth34239() { }
+    public void meth34240() { }
+    public void meth34241() { }
+    public void meth34242() { }
+    public void meth34243() { }
+    public void meth34244() { }
+    public void meth34245() { }
+    public void meth34246() { }
+    public void meth34247() { }
+    public void meth34248() { }
+    public void meth34249() { }
+    public void meth34250() { }
+    public void meth34251() { }
+    public void meth34252() { }
+    public void meth34253() { }
+    public void meth34254() { }
+    public void meth34255() { }
+    public void meth34256() { }
+    public void meth34257() { }
+    public void meth34258() { }
+    public void meth34259() { }
+    public void meth34260() { }
+    public void meth34261() { }
+    public void meth34262() { }
+    public void meth34263() { }
+    public void meth34264() { }
+    public void meth34265() { }
+    public void meth34266() { }
+    public void meth34267() { }
+    public void meth34268() { }
+    public void meth34269() { }
+    public void meth34270() { }
+    public void meth34271() { }
+    public void meth34272() { }
+    public void meth34273() { }
+    public void meth34274() { }
+    public void meth34275() { }
+    public void meth34276() { }
+    public void meth34277() { }
+    public void meth34278() { }
+    public void meth34279() { }
+    public void meth34280() { }
+    public void meth34281() { }
+    public void meth34282() { }
+    public void meth34283() { }
+    public void meth34284() { }
+    public void meth34285() { }
+    public void meth34286() { }
+    public void meth34287() { }
+    public void meth34288() { }
+    public void meth34289() { }
+    public void meth34290() { }
+    public void meth34291() { }
+    public void meth34292() { }
+    public void meth34293() { }
+    public void meth34294() { }
+    public void meth34295() { }
+    public void meth34296() { }
+    public void meth34297() { }
+    public void meth34298() { }
+    public void meth34299() { }
+    public void meth34300() { }
+    public void meth34301() { }
+    public void meth34302() { }
+    public void meth34303() { }
+    public void meth34304() { }
+    public void meth34305() { }
+    public void meth34306() { }
+    public void meth34307() { }
+    public void meth34308() { }
+    public void meth34309() { }
+    public void meth34310() { }
+    public void meth34311() { }
+    public void meth34312() { }
+    public void meth34313() { }
+    public void meth34314() { }
+    public void meth34315() { }
+    public void meth34316() { }
+    public void meth34317() { }
+    public void meth34318() { }
+    public void meth34319() { }
+    public void meth34320() { }
+    public void meth34321() { }
+    public void meth34322() { }
+    public void meth34323() { }
+    public void meth34324() { }
+    public void meth34325() { }
+    public void meth34326() { }
+    public void meth34327() { }
+    public void meth34328() { }
+    public void meth34329() { }
+    public void meth34330() { }
+    public void meth34331() { }
+    public void meth34332() { }
+    public void meth34333() { }
+    public void meth34334() { }
+    public void meth34335() { }
+    public void meth34336() { }
+    public void meth34337() { }
+    public void meth34338() { }
+    public void meth34339() { }
+    public void meth34340() { }
+    public void meth34341() { }
+    public void meth34342() { }
+    public void meth34343() { }
+    public void meth34344() { }
+    public void meth34345() { }
+    public void meth34346() { }
+    public void meth34347() { }
+    public void meth34348() { }
+    public void meth34349() { }
+    public void meth34350() { }
+    public void meth34351() { }
+    public void meth34352() { }
+    public void meth34353() { }
+    public void meth34354() { }
+    public void meth34355() { }
+    public void meth34356() { }
+    public void meth34357() { }
+    public void meth34358() { }
+    public void meth34359() { }
+    public void meth34360() { }
+    public void meth34361() { }
+    public void meth34362() { }
+    public void meth34363() { }
+    public void meth34364() { }
+    public void meth34365() { }
+    public void meth34366() { }
+    public void meth34367() { }
+    public void meth34368() { }
+    public void meth34369() { }
+    public void meth34370() { }
+    public void meth34371() { }
+    public void meth34372() { }
+    public void meth34373() { }
+    public void meth34374() { }
+    public void meth34375() { }
+    public void meth34376() { }
+    public void meth34377() { }
+    public void meth34378() { }
+    public void meth34379() { }
+    public void meth34380() { }
+    public void meth34381() { }
+    public void meth34382() { }
+    public void meth34383() { }
+    public void meth34384() { }
+    public void meth34385() { }
+    public void meth34386() { }
+    public void meth34387() { }
+    public void meth34388() { }
+    public void meth34389() { }
+    public void meth34390() { }
+    public void meth34391() { }
+    public void meth34392() { }
+    public void meth34393() { }
+    public void meth34394() { }
+    public void meth34395() { }
+    public void meth34396() { }
+    public void meth34397() { }
+    public void meth34398() { }
+    public void meth34399() { }
+    public void meth34400() { }
+    public void meth34401() { }
+    public void meth34402() { }
+    public void meth34403() { }
+    public void meth34404() { }
+    public void meth34405() { }
+    public void meth34406() { }
+    public void meth34407() { }
+    public void meth34408() { }
+    public void meth34409() { }
+    public void meth34410() { }
+    public void meth34411() { }
+    public void meth34412() { }
+    public void meth34413() { }
+    public void meth34414() { }
+    public void meth34415() { }
+    public void meth34416() { }
+    public void meth34417() { }
+    public void meth34418() { }
+    public void meth34419() { }
+    public void meth34420() { }
+    public void meth34421() { }
+    public void meth34422() { }
+    public void meth34423() { }
+    public void meth34424() { }
+    public void meth34425() { }
+    public void meth34426() { }
+    public void meth34427() { }
+    public void meth34428() { }
+    public void meth34429() { }
+    public void meth34430() { }
+    public void meth34431() { }
+    public void meth34432() { }
+    public void meth34433() { }
+    public void meth34434() { }
+    public void meth34435() { }
+    public void meth34436() { }
+    public void meth34437() { }
+    public void meth34438() { }
+    public void meth34439() { }
+    public void meth34440() { }
+    public void meth34441() { }
+    public void meth34442() { }
+    public void meth34443() { }
+    public void meth34444() { }
+    public void meth34445() { }
+    public void meth34446() { }
+    public void meth34447() { }
+    public void meth34448() { }
+    public void meth34449() { }
+    public void meth34450() { }
+    public void meth34451() { }
+    public void meth34452() { }
+    public void meth34453() { }
+    public void meth34454() { }
+    public void meth34455() { }
+    public void meth34456() { }
+    public void meth34457() { }
+    public void meth34458() { }
+    public void meth34459() { }
+    public void meth34460() { }
+    public void meth34461() { }
+    public void meth34462() { }
+    public void meth34463() { }
+    public void meth34464() { }
+    public void meth34465() { }
+    public void meth34466() { }
+    public void meth34467() { }
+    public void meth34468() { }
+    public void meth34469() { }
+    public void meth34470() { }
+    public void meth34471() { }
+    public void meth34472() { }
+    public void meth34473() { }
+    public void meth34474() { }
+    public void meth34475() { }
+    public void meth34476() { }
+    public void meth34477() { }
+    public void meth34478() { }
+    public void meth34479() { }
+    public void meth34480() { }
+    public void meth34481() { }
+    public void meth34482() { }
+    public void meth34483() { }
+    public void meth34484() { }
+    public void meth34485() { }
+    public void meth34486() { }
+    public void meth34487() { }
+    public void meth34488() { }
+    public void meth34489() { }
+    public void meth34490() { }
+    public void meth34491() { }
+    public void meth34492() { }
+    public void meth34493() { }
+    public void meth34494() { }
+    public void meth34495() { }
+    public void meth34496() { }
+    public void meth34497() { }
+    public void meth34498() { }
+    public void meth34499() { }
+    public void meth34500() { }
+    public void meth34501() { }
+    public void meth34502() { }
+    public void meth34503() { }
+    public void meth34504() { }
+    public void meth34505() { }
+    public void meth34506() { }
+    public void meth34507() { }
+    public void meth34508() { }
+    public void meth34509() { }
+    public void meth34510() { }
+    public void meth34511() { }
+    public void meth34512() { }
+    public void meth34513() { }
+    public void meth34514() { }
+    public void meth34515() { }
+    public void meth34516() { }
+    public void meth34517() { }
+    public void meth34518() { }
+    public void meth34519() { }
+    public void meth34520() { }
+    public void meth34521() { }
+    public void meth34522() { }
+    public void meth34523() { }
+    public void meth34524() { }
+    public void meth34525() { }
+    public void meth34526() { }
+    public void meth34527() { }
+    public void meth34528() { }
+    public void meth34529() { }
+    public void meth34530() { }
+    public void meth34531() { }
+    public void meth34532() { }
+    public void meth34533() { }
+    public void meth34534() { }
+    public void meth34535() { }
+    public void meth34536() { }
+    public void meth34537() { }
+    public void meth34538() { }
+    public void meth34539() { }
+    public void meth34540() { }
+    public void meth34541() { }
+    public void meth34542() { }
+    public void meth34543() { }
+    public void meth34544() { }
+    public void meth34545() { }
+    public void meth34546() { }
+    public void meth34547() { }
+    public void meth34548() { }
+    public void meth34549() { }
+    public void meth34550() { }
+    public void meth34551() { }
+    public void meth34552() { }
+    public void meth34553() { }
+    public void meth34554() { }
+    public void meth34555() { }
+    public void meth34556() { }
+    public void meth34557() { }
+    public void meth34558() { }
+    public void meth34559() { }
+    public void meth34560() { }
+    public void meth34561() { }
+    public void meth34562() { }
+    public void meth34563() { }
+    public void meth34564() { }
+    public void meth34565() { }
+    public void meth34566() { }
+    public void meth34567() { }
+    public void meth34568() { }
+    public void meth34569() { }
+    public void meth34570() { }
+    public void meth34571() { }
+    public void meth34572() { }
+    public void meth34573() { }
+    public void meth34574() { }
+    public void meth34575() { }
+    public void meth34576() { }
+    public void meth34577() { }
+    public void meth34578() { }
+    public void meth34579() { }
+    public void meth34580() { }
+    public void meth34581() { }
+    public void meth34582() { }
+    public void meth34583() { }
+    public void meth34584() { }
+    public void meth34585() { }
+    public void meth34586() { }
+    public void meth34587() { }
+    public void meth34588() { }
+    public void meth34589() { }
+    public void meth34590() { }
+    public void meth34591() { }
+    public void meth34592() { }
+    public void meth34593() { }
+    public void meth34594() { }
+    public void meth34595() { }
+    public void meth34596() { }
+    public void meth34597() { }
+    public void meth34598() { }
+    public void meth34599() { }
+    public void meth34600() { }
+    public void meth34601() { }
+    public void meth34602() { }
+    public void meth34603() { }
+    public void meth34604() { }
+    public void meth34605() { }
+    public void meth34606() { }
+    public void meth34607() { }
+    public void meth34608() { }
+    public void meth34609() { }
+    public void meth34610() { }
+    public void meth34611() { }
+    public void meth34612() { }
+    public void meth34613() { }
+    public void meth34614() { }
+    public void meth34615() { }
+    public void meth34616() { }
+    public void meth34617() { }
+    public void meth34618() { }
+    public void meth34619() { }
+    public void meth34620() { }
+    public void meth34621() { }
+    public void meth34622() { }
+    public void meth34623() { }
+    public void meth34624() { }
+    public void meth34625() { }
+    public void meth34626() { }
+    public void meth34627() { }
+    public void meth34628() { }
+    public void meth34629() { }
+    public void meth34630() { }
+    public void meth34631() { }
+    public void meth34632() { }
+    public void meth34633() { }
+    public void meth34634() { }
+    public void meth34635() { }
+    public void meth34636() { }
+    public void meth34637() { }
+    public void meth34638() { }
+    public void meth34639() { }
+    public void meth34640() { }
+    public void meth34641() { }
+    public void meth34642() { }
+    public void meth34643() { }
+    public void meth34644() { }
+    public void meth34645() { }
+    public void meth34646() { }
+    public void meth34647() { }
+    public void meth34648() { }
+    public void meth34649() { }
+    public void meth34650() { }
+    public void meth34651() { }
+    public void meth34652() { }
+    public void meth34653() { }
+    public void meth34654() { }
+    public void meth34655() { }
+    public void meth34656() { }
+    public void meth34657() { }
+    public void meth34658() { }
+    public void meth34659() { }
+    public void meth34660() { }
+    public void meth34661() { }
+    public void meth34662() { }
+    public void meth34663() { }
+    public void meth34664() { }
+    public void meth34665() { }
+    public void meth34666() { }
+    public void meth34667() { }
+    public void meth34668() { }
+    public void meth34669() { }
+    public void meth34670() { }
+    public void meth34671() { }
+    public void meth34672() { }
+    public void meth34673() { }
+    public void meth34674() { }
+    public void meth34675() { }
+    public void meth34676() { }
+    public void meth34677() { }
+    public void meth34678() { }
+    public void meth34679() { }
+    public void meth34680() { }
+    public void meth34681() { }
+    public void meth34682() { }
+    public void meth34683() { }
+    public void meth34684() { }
+    public void meth34685() { }
+    public void meth34686() { }
+    public void meth34687() { }
+    public void meth34688() { }
+    public void meth34689() { }
+    public void meth34690() { }
+    public void meth34691() { }
+    public void meth34692() { }
+    public void meth34693() { }
+    public void meth34694() { }
+    public void meth34695() { }
+    public void meth34696() { }
+    public void meth34697() { }
+    public void meth34698() { }
+    public void meth34699() { }
+    public void meth34700() { }
+    public void meth34701() { }
+    public void meth34702() { }
+    public void meth34703() { }
+    public void meth34704() { }
+    public void meth34705() { }
+    public void meth34706() { }
+    public void meth34707() { }
+    public void meth34708() { }
+    public void meth34709() { }
+    public void meth34710() { }
+    public void meth34711() { }
+    public void meth34712() { }
+    public void meth34713() { }
+    public void meth34714() { }
+    public void meth34715() { }
+    public void meth34716() { }
+    public void meth34717() { }
+    public void meth34718() { }
+    public void meth34719() { }
+    public void meth34720() { }
+    public void meth34721() { }
+    public void meth34722() { }
+    public void meth34723() { }
+    public void meth34724() { }
+    public void meth34725() { }
+    public void meth34726() { }
+    public void meth34727() { }
+    public void meth34728() { }
+    public void meth34729() { }
+    public void meth34730() { }
+    public void meth34731() { }
+    public void meth34732() { }
+    public void meth34733() { }
+    public void meth34734() { }
+    public void meth34735() { }
+    public void meth34736() { }
+    public void meth34737() { }
+    public void meth34738() { }
+    public void meth34739() { }
+    public void meth34740() { }
+    public void meth34741() { }
+    public void meth34742() { }
+    public void meth34743() { }
+    public void meth34744() { }
+    public void meth34745() { }
+    public void meth34746() { }
+    public void meth34747() { }
+    public void meth34748() { }
+    public void meth34749() { }
+    public void meth34750() { }
+    public void meth34751() { }
+    public void meth34752() { }
+    public void meth34753() { }
+    public void meth34754() { }
+    public void meth34755() { }
+    public void meth34756() { }
+    public void meth34757() { }
+    public void meth34758() { }
+    public void meth34759() { }
+    public void meth34760() { }
+    public void meth34761() { }
+    public void meth34762() { }
+    public void meth34763() { }
+    public void meth34764() { }
+    public void meth34765() { }
+    public void meth34766() { }
+    public void meth34767() { }
+    public void meth34768() { }
+    public void meth34769() { }
+    public void meth34770() { }
+    public void meth34771() { }
+    public void meth34772() { }
+    public void meth34773() { }
+    public void meth34774() { }
+    public void meth34775() { }
+    public void meth34776() { }
+    public void meth34777() { }
+    public void meth34778() { }
+    public void meth34779() { }
+    public void meth34780() { }
+    public void meth34781() { }
+    public void meth34782() { }
+    public void meth34783() { }
+    public void meth34784() { }
+    public void meth34785() { }
+    public void meth34786() { }
+    public void meth34787() { }
+    public void meth34788() { }
+    public void meth34789() { }
+    public void meth34790() { }
+    public void meth34791() { }
+    public void meth34792() { }
+    public void meth34793() { }
+    public void meth34794() { }
+    public void meth34795() { }
+    public void meth34796() { }
+    public void meth34797() { }
+    public void meth34798() { }
+    public void meth34799() { }
+    public void meth34800() { }
+    public void meth34801() { }
+    public void meth34802() { }
+    public void meth34803() { }
+    public void meth34804() { }
+    public void meth34805() { }
+    public void meth34806() { }
+    public void meth34807() { }
+    public void meth34808() { }
+    public void meth34809() { }
+    public void meth34810() { }
+    public void meth34811() { }
+    public void meth34812() { }
+    public void meth34813() { }
+    public void meth34814() { }
+    public void meth34815() { }
+    public void meth34816() { }
+    public void meth34817() { }
+    public void meth34818() { }
+    public void meth34819() { }
+    public void meth34820() { }
+    public void meth34821() { }
+    public void meth34822() { }
+    public void meth34823() { }
+    public void meth34824() { }
+    public void meth34825() { }
+    public void meth34826() { }
+    public void meth34827() { }
+    public void meth34828() { }
+    public void meth34829() { }
+    public void meth34830() { }
+    public void meth34831() { }
+    public void meth34832() { }
+    public void meth34833() { }
+    public void meth34834() { }
+    public void meth34835() { }
+    public void meth34836() { }
+    public void meth34837() { }
+    public void meth34838() { }
+    public void meth34839() { }
+    public void meth34840() { }
+    public void meth34841() { }
+    public void meth34842() { }
+    public void meth34843() { }
+    public void meth34844() { }
+    public void meth34845() { }
+    public void meth34846() { }
+    public void meth34847() { }
+    public void meth34848() { }
+    public void meth34849() { }
+    public void meth34850() { }
+    public void meth34851() { }
+    public void meth34852() { }
+    public void meth34853() { }
+    public void meth34854() { }
+    public void meth34855() { }
+    public void meth34856() { }
+    public void meth34857() { }
+    public void meth34858() { }
+    public void meth34859() { }
+    public void meth34860() { }
+    public void meth34861() { }
+    public void meth34862() { }
+    public void meth34863() { }
+    public void meth34864() { }
+    public void meth34865() { }
+    public void meth34866() { }
+    public void meth34867() { }
+    public void meth34868() { }
+    public void meth34869() { }
+    public void meth34870() { }
+    public void meth34871() { }
+    public void meth34872() { }
+    public void meth34873() { }
+    public void meth34874() { }
+    public void meth34875() { }
+    public void meth34876() { }
+    public void meth34877() { }
+    public void meth34878() { }
+    public void meth34879() { }
+    public void meth34880() { }
+    public void meth34881() { }
+    public void meth34882() { }
+    public void meth34883() { }
+    public void meth34884() { }
+    public void meth34885() { }
+    public void meth34886() { }
+    public void meth34887() { }
+    public void meth34888() { }
+    public void meth34889() { }
+    public void meth34890() { }
+    public void meth34891() { }
+    public void meth34892() { }
+    public void meth34893() { }
+    public void meth34894() { }
+    public void meth34895() { }
+    public void meth34896() { }
+    public void meth34897() { }
+    public void meth34898() { }
+    public void meth34899() { }
+    public void meth34900() { }
+    public void meth34901() { }
+    public void meth34902() { }
+    public void meth34903() { }
+    public void meth34904() { }
+    public void meth34905() { }
+    public void meth34906() { }
+    public void meth34907() { }
+    public void meth34908() { }
+    public void meth34909() { }
+    public void meth34910() { }
+    public void meth34911() { }
+    public void meth34912() { }
+    public void meth34913() { }
+    public void meth34914() { }
+    public void meth34915() { }
+    public void meth34916() { }
+    public void meth34917() { }
+    public void meth34918() { }
+    public void meth34919() { }
+    public void meth34920() { }
+    public void meth34921() { }
+    public void meth34922() { }
+    public void meth34923() { }
+    public void meth34924() { }
+    public void meth34925() { }
+    public void meth34926() { }
+    public void meth34927() { }
+    public void meth34928() { }
+    public void meth34929() { }
+    public void meth34930() { }
+    public void meth34931() { }
+    public void meth34932() { }
+    public void meth34933() { }
+    public void meth34934() { }
+    public void meth34935() { }
+    public void meth34936() { }
+    public void meth34937() { }
+    public void meth34938() { }
+    public void meth34939() { }
+    public void meth34940() { }
+    public void meth34941() { }
+    public void meth34942() { }
+    public void meth34943() { }
+    public void meth34944() { }
+    public void meth34945() { }
+    public void meth34946() { }
+    public void meth34947() { }
+    public void meth34948() { }
+    public void meth34949() { }
+    public void meth34950() { }
+    public void meth34951() { }
+    public void meth34952() { }
+    public void meth34953() { }
+    public void meth34954() { }
+    public void meth34955() { }
+    public void meth34956() { }
+    public void meth34957() { }
+    public void meth34958() { }
+    public void meth34959() { }
+    public void meth34960() { }
+    public void meth34961() { }
+    public void meth34962() { }
+    public void meth34963() { }
+    public void meth34964() { }
+    public void meth34965() { }
+    public void meth34966() { }
+    public void meth34967() { }
+    public void meth34968() { }
+    public void meth34969() { }
+    public void meth34970() { }
+    public void meth34971() { }
+    public void meth34972() { }
+    public void meth34973() { }
+    public void meth34974() { }
+    public void meth34975() { }
+    public void meth34976() { }
+    public void meth34977() { }
+    public void meth34978() { }
+    public void meth34979() { }
+    public void meth34980() { }
+    public void meth34981() { }
+    public void meth34982() { }
+    public void meth34983() { }
+    public void meth34984() { }
+    public void meth34985() { }
+    public void meth34986() { }
+    public void meth34987() { }
+    public void meth34988() { }
+    public void meth34989() { }
+    public void meth34990() { }
+    public void meth34991() { }
+    public void meth34992() { }
+    public void meth34993() { }
+    public void meth34994() { }
+    public void meth34995() { }
+    public void meth34996() { }
+    public void meth34997() { }
+    public void meth34998() { }
+    public void meth34999() { }
+    public void meth35000() { }
+    public void meth35001() { }
+    public void meth35002() { }
+    public void meth35003() { }
+    public void meth35004() { }
+    public void meth35005() { }
+    public void meth35006() { }
+    public void meth35007() { }
+    public void meth35008() { }
+    public void meth35009() { }
+    public void meth35010() { }
+    public void meth35011() { }
+    public void meth35012() { }
+    public void meth35013() { }
+    public void meth35014() { }
+    public void meth35015() { }
+    public void meth35016() { }
+    public void meth35017() { }
+    public void meth35018() { }
+    public void meth35019() { }
+    public void meth35020() { }
+    public void meth35021() { }
+    public void meth35022() { }
+    public void meth35023() { }
+    public void meth35024() { }
+    public void meth35025() { }
+    public void meth35026() { }
+    public void meth35027() { }
+    public void meth35028() { }
+    public void meth35029() { }
+    public void meth35030() { }
+    public void meth35031() { }
+    public void meth35032() { }
+    public void meth35033() { }
+    public void meth35034() { }
+    public void meth35035() { }
+    public void meth35036() { }
+    public void meth35037() { }
+    public void meth35038() { }
+    public void meth35039() { }
+    public void meth35040() { }
+    public void meth35041() { }
+    public void meth35042() { }
+    public void meth35043() { }
+    public void meth35044() { }
+    public void meth35045() { }
+    public void meth35046() { }
+    public void meth35047() { }
+    public void meth35048() { }
+    public void meth35049() { }
+    public void meth35050() { }
+    public void meth35051() { }
+    public void meth35052() { }
+    public void meth35053() { }
+    public void meth35054() { }
+    public void meth35055() { }
+    public void meth35056() { }
+    public void meth35057() { }
+    public void meth35058() { }
+    public void meth35059() { }
+    public void meth35060() { }
+    public void meth35061() { }
+    public void meth35062() { }
+    public void meth35063() { }
+    public void meth35064() { }
+    public void meth35065() { }
+    public void meth35066() { }
+    public void meth35067() { }
+    public void meth35068() { }
+    public void meth35069() { }
+    public void meth35070() { }
+    public void meth35071() { }
+    public void meth35072() { }
+    public void meth35073() { }
+    public void meth35074() { }
+    public void meth35075() { }
+    public void meth35076() { }
+    public void meth35077() { }
+    public void meth35078() { }
+    public void meth35079() { }
+    public void meth35080() { }
+    public void meth35081() { }
+    public void meth35082() { }
+    public void meth35083() { }
+    public void meth35084() { }
+    public void meth35085() { }
+    public void meth35086() { }
+    public void meth35087() { }
+    public void meth35088() { }
+    public void meth35089() { }
+    public void meth35090() { }
+    public void meth35091() { }
+    public void meth35092() { }
+    public void meth35093() { }
+    public void meth35094() { }
+    public void meth35095() { }
+    public void meth35096() { }
+    public void meth35097() { }
+    public void meth35098() { }
+    public void meth35099() { }
+    public void meth35100() { }
+    public void meth35101() { }
+    public void meth35102() { }
+    public void meth35103() { }
+    public void meth35104() { }
+    public void meth35105() { }
+    public void meth35106() { }
+    public void meth35107() { }
+    public void meth35108() { }
+    public void meth35109() { }
+    public void meth35110() { }
+    public void meth35111() { }
+    public void meth35112() { }
+    public void meth35113() { }
+    public void meth35114() { }
+    public void meth35115() { }
+    public void meth35116() { }
+    public void meth35117() { }
+    public void meth35118() { }
+    public void meth35119() { }
+    public void meth35120() { }
+    public void meth35121() { }
+    public void meth35122() { }
+    public void meth35123() { }
+    public void meth35124() { }
+    public void meth35125() { }
+    public void meth35126() { }
+    public void meth35127() { }
+    public void meth35128() { }
+    public void meth35129() { }
+    public void meth35130() { }
+    public void meth35131() { }
+    public void meth35132() { }
+    public void meth35133() { }
+    public void meth35134() { }
+    public void meth35135() { }
+    public void meth35136() { }
+    public void meth35137() { }
+    public void meth35138() { }
+    public void meth35139() { }
+    public void meth35140() { }
+    public void meth35141() { }
+    public void meth35142() { }
+    public void meth35143() { }
+    public void meth35144() { }
+    public void meth35145() { }
+    public void meth35146() { }
+    public void meth35147() { }
+    public void meth35148() { }
+    public void meth35149() { }
+    public void meth35150() { }
+    public void meth35151() { }
+    public void meth35152() { }
+    public void meth35153() { }
+    public void meth35154() { }
+    public void meth35155() { }
+    public void meth35156() { }
+    public void meth35157() { }
+    public void meth35158() { }
+    public void meth35159() { }
+    public void meth35160() { }
+    public void meth35161() { }
+    public void meth35162() { }
+    public void meth35163() { }
+    public void meth35164() { }
+    public void meth35165() { }
+    public void meth35166() { }
+    public void meth35167() { }
+    public void meth35168() { }
+    public void meth35169() { }
+    public void meth35170() { }
+    public void meth35171() { }
+    public void meth35172() { }
+    public void meth35173() { }
+    public void meth35174() { }
+    public void meth35175() { }
+    public void meth35176() { }
+    public void meth35177() { }
+    public void meth35178() { }
+    public void meth35179() { }
+    public void meth35180() { }
+    public void meth35181() { }
+    public void meth35182() { }
+    public void meth35183() { }
+    public void meth35184() { }
+    public void meth35185() { }
+    public void meth35186() { }
+    public void meth35187() { }
+    public void meth35188() { }
+    public void meth35189() { }
+    public void meth35190() { }
+    public void meth35191() { }
+    public void meth35192() { }
+    public void meth35193() { }
+    public void meth35194() { }
+    public void meth35195() { }
+    public void meth35196() { }
+    public void meth35197() { }
+    public void meth35198() { }
+    public void meth35199() { }
+    public void meth35200() { }
+    public void meth35201() { }
+    public void meth35202() { }
+    public void meth35203() { }
+    public void meth35204() { }
+    public void meth35205() { }
+    public void meth35206() { }
+    public void meth35207() { }
+    public void meth35208() { }
+    public void meth35209() { }
+    public void meth35210() { }
+    public void meth35211() { }
+    public void meth35212() { }
+    public void meth35213() { }
+    public void meth35214() { }
+    public void meth35215() { }
+    public void meth35216() { }
+    public void meth35217() { }
+    public void meth35218() { }
+    public void meth35219() { }
+    public void meth35220() { }
+    public void meth35221() { }
+    public void meth35222() { }
+    public void meth35223() { }
+    public void meth35224() { }
+    public void meth35225() { }
+    public void meth35226() { }
+    public void meth35227() { }
+    public void meth35228() { }
+    public void meth35229() { }
+    public void meth35230() { }
+    public void meth35231() { }
+    public void meth35232() { }
+    public void meth35233() { }
+    public void meth35234() { }
+    public void meth35235() { }
+    public void meth35236() { }
+    public void meth35237() { }
+    public void meth35238() { }
+    public void meth35239() { }
+    public void meth35240() { }
+    public void meth35241() { }
+    public void meth35242() { }
+    public void meth35243() { }
+    public void meth35244() { }
+    public void meth35245() { }
+    public void meth35246() { }
+    public void meth35247() { }
+    public void meth35248() { }
+    public void meth35249() { }
+    public void meth35250() { }
+    public void meth35251() { }
+    public void meth35252() { }
+    public void meth35253() { }
+    public void meth35254() { }
+    public void meth35255() { }
+    public void meth35256() { }
+    public void meth35257() { }
+    public void meth35258() { }
+    public void meth35259() { }
+    public void meth35260() { }
+    public void meth35261() { }
+    public void meth35262() { }
+    public void meth35263() { }
+    public void meth35264() { }
+    public void meth35265() { }
+    public void meth35266() { }
+    public void meth35267() { }
+    public void meth35268() { }
+    public void meth35269() { }
+    public void meth35270() { }
+    public void meth35271() { }
+    public void meth35272() { }
+    public void meth35273() { }
+    public void meth35274() { }
+    public void meth35275() { }
+    public void meth35276() { }
+    public void meth35277() { }
+    public void meth35278() { }
+    public void meth35279() { }
+    public void meth35280() { }
+    public void meth35281() { }
+    public void meth35282() { }
+    public void meth35283() { }
+    public void meth35284() { }
+    public void meth35285() { }
+    public void meth35286() { }
+    public void meth35287() { }
+    public void meth35288() { }
+    public void meth35289() { }
+    public void meth35290() { }
+    public void meth35291() { }
+    public void meth35292() { }
+    public void meth35293() { }
+    public void meth35294() { }
+    public void meth35295() { }
+    public void meth35296() { }
+    public void meth35297() { }
+    public void meth35298() { }
+    public void meth35299() { }
+    public void meth35300() { }
+    public void meth35301() { }
+    public void meth35302() { }
+    public void meth35303() { }
+    public void meth35304() { }
+    public void meth35305() { }
+    public void meth35306() { }
+    public void meth35307() { }
+    public void meth35308() { }
+    public void meth35309() { }
+    public void meth35310() { }
+    public void meth35311() { }
+    public void meth35312() { }
+    public void meth35313() { }
+    public void meth35314() { }
+    public void meth35315() { }
+    public void meth35316() { }
+    public void meth35317() { }
+    public void meth35318() { }
+    public void meth35319() { }
+    public void meth35320() { }
+    public void meth35321() { }
+    public void meth35322() { }
+    public void meth35323() { }
+    public void meth35324() { }
+    public void meth35325() { }
+    public void meth35326() { }
+    public void meth35327() { }
+    public void meth35328() { }
+    public void meth35329() { }
+    public void meth35330() { }
+    public void meth35331() { }
+    public void meth35332() { }
+    public void meth35333() { }
+    public void meth35334() { }
+    public void meth35335() { }
+    public void meth35336() { }
+    public void meth35337() { }
+    public void meth35338() { }
+    public void meth35339() { }
+    public void meth35340() { }
+    public void meth35341() { }
+    public void meth35342() { }
+    public void meth35343() { }
+    public void meth35344() { }
+    public void meth35345() { }
+    public void meth35346() { }
+    public void meth35347() { }
+    public void meth35348() { }
+    public void meth35349() { }
+    public void meth35350() { }
+    public void meth35351() { }
+    public void meth35352() { }
+    public void meth35353() { }
+    public void meth35354() { }
+    public void meth35355() { }
+    public void meth35356() { }
+    public void meth35357() { }
+    public void meth35358() { }
+    public void meth35359() { }
+    public void meth35360() { }
+    public void meth35361() { }
+    public void meth35362() { }
+    public void meth35363() { }
+    public void meth35364() { }
+    public void meth35365() { }
+    public void meth35366() { }
+    public void meth35367() { }
+    public void meth35368() { }
+    public void meth35369() { }
+    public void meth35370() { }
+    public void meth35371() { }
+    public void meth35372() { }
+    public void meth35373() { }
+    public void meth35374() { }
+    public void meth35375() { }
+    public void meth35376() { }
+    public void meth35377() { }
+    public void meth35378() { }
+    public void meth35379() { }
+    public void meth35380() { }
+    public void meth35381() { }
+    public void meth35382() { }
+    public void meth35383() { }
+    public void meth35384() { }
+    public void meth35385() { }
+    public void meth35386() { }
+    public void meth35387() { }
+    public void meth35388() { }
+    public void meth35389() { }
+    public void meth35390() { }
+    public void meth35391() { }
+    public void meth35392() { }
+    public void meth35393() { }
+    public void meth35394() { }
+    public void meth35395() { }
+    public void meth35396() { }
+    public void meth35397() { }
+    public void meth35398() { }
+    public void meth35399() { }
+    public void meth35400() { }
+    public void meth35401() { }
+    public void meth35402() { }
+    public void meth35403() { }
+    public void meth35404() { }
+    public void meth35405() { }
+    public void meth35406() { }
+    public void meth35407() { }
+    public void meth35408() { }
+    public void meth35409() { }
+    public void meth35410() { }
+    public void meth35411() { }
+    public void meth35412() { }
+    public void meth35413() { }
+    public void meth35414() { }
+    public void meth35415() { }
+    public void meth35416() { }
+    public void meth35417() { }
+    public void meth35418() { }
+    public void meth35419() { }
+    public void meth35420() { }
+    public void meth35421() { }
+    public void meth35422() { }
+    public void meth35423() { }
+    public void meth35424() { }
+    public void meth35425() { }
+    public void meth35426() { }
+    public void meth35427() { }
+    public void meth35428() { }
+    public void meth35429() { }
+    public void meth35430() { }
+    public void meth35431() { }
+    public void meth35432() { }
+    public void meth35433() { }
+    public void meth35434() { }
+    public void meth35435() { }
+    public void meth35436() { }
+    public void meth35437() { }
+    public void meth35438() { }
+    public void meth35439() { }
+    public void meth35440() { }
+    public void meth35441() { }
+    public void meth35442() { }
+    public void meth35443() { }
+    public void meth35444() { }
+    public void meth35445() { }
+    public void meth35446() { }
+    public void meth35447() { }
+    public void meth35448() { }
+    public void meth35449() { }
+    public void meth35450() { }
+    public void meth35451() { }
+    public void meth35452() { }
+    public void meth35453() { }
+    public void meth35454() { }
+    public void meth35455() { }
+    public void meth35456() { }
+    public void meth35457() { }
+    public void meth35458() { }
+    public void meth35459() { }
+    public void meth35460() { }
+    public void meth35461() { }
+    public void meth35462() { }
+    public void meth35463() { }
+    public void meth35464() { }
+    public void meth35465() { }
+    public void meth35466() { }
+    public void meth35467() { }
+    public void meth35468() { }
+    public void meth35469() { }
+    public void meth35470() { }
+    public void meth35471() { }
+    public void meth35472() { }
+    public void meth35473() { }
+    public void meth35474() { }
+    public void meth35475() { }
+    public void meth35476() { }
+    public void meth35477() { }
+    public void meth35478() { }
+    public void meth35479() { }
+    public void meth35480() { }
+    public void meth35481() { }
+    public void meth35482() { }
+    public void meth35483() { }
+    public void meth35484() { }
+    public void meth35485() { }
+    public void meth35486() { }
+    public void meth35487() { }
+    public void meth35488() { }
+    public void meth35489() { }
+    public void meth35490() { }
+    public void meth35491() { }
+    public void meth35492() { }
+    public void meth35493() { }
+    public void meth35494() { }
+    public void meth35495() { }
+    public void meth35496() { }
+    public void meth35497() { }
+    public void meth35498() { }
+    public void meth35499() { }
+    public void meth35500() { }
+    public void meth35501() { }
+    public void meth35502() { }
+    public void meth35503() { }
+    public void meth35504() { }
+    public void meth35505() { }
+    public void meth35506() { }
+    public void meth35507() { }
+    public void meth35508() { }
+    public void meth35509() { }
+    public void meth35510() { }
+    public void meth35511() { }
+    public void meth35512() { }
+    public void meth35513() { }
+    public void meth35514() { }
+    public void meth35515() { }
+    public void meth35516() { }
+    public void meth35517() { }
+    public void meth35518() { }
+    public void meth35519() { }
+    public void meth35520() { }
+    public void meth35521() { }
+    public void meth35522() { }
+    public void meth35523() { }
+    public void meth35524() { }
+    public void meth35525() { }
+    public void meth35526() { }
+    public void meth35527() { }
+    public void meth35528() { }
+    public void meth35529() { }
+    public void meth35530() { }
+    public void meth35531() { }
+    public void meth35532() { }
+    public void meth35533() { }
+    public void meth35534() { }
+    public void meth35535() { }
+    public void meth35536() { }
+    public void meth35537() { }
+    public void meth35538() { }
+    public void meth35539() { }
+    public void meth35540() { }
+    public void meth35541() { }
+    public void meth35542() { }
+    public void meth35543() { }
+    public void meth35544() { }
+    public void meth35545() { }
+    public void meth35546() { }
+    public void meth35547() { }
+    public void meth35548() { }
+    public void meth35549() { }
+    public void meth35550() { }
+    public void meth35551() { }
+    public void meth35552() { }
+    public void meth35553() { }
+    public void meth35554() { }
+    public void meth35555() { }
+    public void meth35556() { }
+    public void meth35557() { }
+    public void meth35558() { }
+    public void meth35559() { }
+    public void meth35560() { }
+    public void meth35561() { }
+    public void meth35562() { }
+    public void meth35563() { }
+    public void meth35564() { }
+    public void meth35565() { }
+    public void meth35566() { }
+    public void meth35567() { }
+    public void meth35568() { }
+    public void meth35569() { }
+    public void meth35570() { }
+    public void meth35571() { }
+    public void meth35572() { }
+    public void meth35573() { }
+    public void meth35574() { }
+    public void meth35575() { }
+    public void meth35576() { }
+    public void meth35577() { }
+    public void meth35578() { }
+    public void meth35579() { }
+    public void meth35580() { }
+    public void meth35581() { }
+    public void meth35582() { }
+    public void meth35583() { }
+    public void meth35584() { }
+    public void meth35585() { }
+    public void meth35586() { }
+    public void meth35587() { }
+    public void meth35588() { }
+    public void meth35589() { }
+    public void meth35590() { }
+    public void meth35591() { }
+    public void meth35592() { }
+    public void meth35593() { }
+    public void meth35594() { }
+    public void meth35595() { }
+    public void meth35596() { }
+    public void meth35597() { }
+    public void meth35598() { }
+    public void meth35599() { }
+    public void meth35600() { }
+    public void meth35601() { }
+    public void meth35602() { }
+    public void meth35603() { }
+    public void meth35604() { }
+    public void meth35605() { }
+    public void meth35606() { }
+    public void meth35607() { }
+    public void meth35608() { }
+    public void meth35609() { }
+    public void meth35610() { }
+    public void meth35611() { }
+    public void meth35612() { }
+    public void meth35613() { }
+    public void meth35614() { }
+    public void meth35615() { }
+    public void meth35616() { }
+    public void meth35617() { }
+    public void meth35618() { }
+    public void meth35619() { }
+    public void meth35620() { }
+    public void meth35621() { }
+    public void meth35622() { }
+    public void meth35623() { }
+    public void meth35624() { }
+    public void meth35625() { }
+    public void meth35626() { }
+    public void meth35627() { }
+    public void meth35628() { }
+    public void meth35629() { }
+    public void meth35630() { }
+    public void meth35631() { }
+    public void meth35632() { }
+    public void meth35633() { }
+    public void meth35634() { }
+    public void meth35635() { }
+    public void meth35636() { }
+    public void meth35637() { }
+    public void meth35638() { }
+    public void meth35639() { }
+    public void meth35640() { }
+    public void meth35641() { }
+    public void meth35642() { }
+    public void meth35643() { }
+    public void meth35644() { }
+    public void meth35645() { }
+    public void meth35646() { }
+    public void meth35647() { }
+    public void meth35648() { }
+    public void meth35649() { }
+    public void meth35650() { }
+    public void meth35651() { }
+    public void meth35652() { }
+    public void meth35653() { }
+    public void meth35654() { }
+    public void meth35655() { }
+    public void meth35656() { }
+    public void meth35657() { }
+    public void meth35658() { }
+    public void meth35659() { }
+    public void meth35660() { }
+    public void meth35661() { }
+    public void meth35662() { }
+    public void meth35663() { }
+    public void meth35664() { }
+    public void meth35665() { }
+    public void meth35666() { }
+    public void meth35667() { }
+    public void meth35668() { }
+    public void meth35669() { }
+    public void meth35670() { }
+    public void meth35671() { }
+    public void meth35672() { }
+    public void meth35673() { }
+    public void meth35674() { }
+    public void meth35675() { }
+    public void meth35676() { }
+    public void meth35677() { }
+    public void meth35678() { }
+    public void meth35679() { }
+    public void meth35680() { }
+    public void meth35681() { }
+    public void meth35682() { }
+    public void meth35683() { }
+    public void meth35684() { }
+    public void meth35685() { }
+    public void meth35686() { }
+    public void meth35687() { }
+    public void meth35688() { }
+    public void meth35689() { }
+    public void meth35690() { }
+    public void meth35691() { }
+    public void meth35692() { }
+    public void meth35693() { }
+    public void meth35694() { }
+    public void meth35695() { }
+    public void meth35696() { }
+    public void meth35697() { }
+    public void meth35698() { }
+    public void meth35699() { }
+    public void meth35700() { }
+    public void meth35701() { }
+    public void meth35702() { }
+    public void meth35703() { }
+    public void meth35704() { }
+    public void meth35705() { }
+    public void meth35706() { }
+    public void meth35707() { }
+    public void meth35708() { }
+    public void meth35709() { }
+    public void meth35710() { }
+    public void meth35711() { }
+    public void meth35712() { }
+    public void meth35713() { }
+    public void meth35714() { }
+    public void meth35715() { }
+    public void meth35716() { }
+    public void meth35717() { }
+    public void meth35718() { }
+    public void meth35719() { }
+    public void meth35720() { }
+    public void meth35721() { }
+    public void meth35722() { }
+    public void meth35723() { }
+    public void meth35724() { }
+    public void meth35725() { }
+    public void meth35726() { }
+    public void meth35727() { }
+    public void meth35728() { }
+    public void meth35729() { }
+    public void meth35730() { }
+    public void meth35731() { }
+    public void meth35732() { }
+    public void meth35733() { }
+    public void meth35734() { }
+    public void meth35735() { }
+    public void meth35736() { }
+    public void meth35737() { }
+    public void meth35738() { }
+    public void meth35739() { }
+    public void meth35740() { }
+    public void meth35741() { }
+    public void meth35742() { }
+    public void meth35743() { }
+    public void meth35744() { }
+    public void meth35745() { }
+    public void meth35746() { }
+    public void meth35747() { }
+    public void meth35748() { }
+    public void meth35749() { }
+    public void meth35750() { }
+    public void meth35751() { }
+    public void meth35752() { }
+    public void meth35753() { }
+    public void meth35754() { }
+    public void meth35755() { }
+    public void meth35756() { }
+    public void meth35757() { }
+    public void meth35758() { }
+    public void meth35759() { }
+    public void meth35760() { }
+    public void meth35761() { }
+    public void meth35762() { }
+    public void meth35763() { }
+    public void meth35764() { }
+    public void meth35765() { }
+    public void meth35766() { }
+    public void meth35767() { }
+    public void meth35768() { }
+    public void meth35769() { }
+    public void meth35770() { }
+    public void meth35771() { }
+    public void meth35772() { }
+    public void meth35773() { }
+    public void meth35774() { }
+    public void meth35775() { }
+    public void meth35776() { }
+    public void meth35777() { }
+    public void meth35778() { }
+    public void meth35779() { }
+    public void meth35780() { }
+    public void meth35781() { }
+    public void meth35782() { }
+    public void meth35783() { }
+    public void meth35784() { }
+    public void meth35785() { }
+    public void meth35786() { }
+    public void meth35787() { }
+    public void meth35788() { }
+    public void meth35789() { }
+    public void meth35790() { }
+    public void meth35791() { }
+    public void meth35792() { }
+    public void meth35793() { }
+    public void meth35794() { }
+    public void meth35795() { }
+    public void meth35796() { }
+    public void meth35797() { }
+    public void meth35798() { }
+    public void meth35799() { }
+    public void meth35800() { }
+    public void meth35801() { }
+    public void meth35802() { }
+    public void meth35803() { }
+    public void meth35804() { }
+    public void meth35805() { }
+    public void meth35806() { }
+    public void meth35807() { }
+    public void meth35808() { }
+    public void meth35809() { }
+    public void meth35810() { }
+    public void meth35811() { }
+    public void meth35812() { }
+    public void meth35813() { }
+    public void meth35814() { }
+    public void meth35815() { }
+    public void meth35816() { }
+    public void meth35817() { }
+    public void meth35818() { }
+    public void meth35819() { }
+    public void meth35820() { }
+    public void meth35821() { }
+    public void meth35822() { }
+    public void meth35823() { }
+    public void meth35824() { }
+    public void meth35825() { }
+    public void meth35826() { }
+    public void meth35827() { }
+    public void meth35828() { }
+    public void meth35829() { }
+    public void meth35830() { }
+    public void meth35831() { }
+    public void meth35832() { }
+    public void meth35833() { }
+    public void meth35834() { }
+    public void meth35835() { }
+    public void meth35836() { }
+    public void meth35837() { }
+    public void meth35838() { }
+    public void meth35839() { }
+    public void meth35840() { }
+    public void meth35841() { }
+    public void meth35842() { }
+    public void meth35843() { }
+    public void meth35844() { }
+    public void meth35845() { }
+    public void meth35846() { }
+    public void meth35847() { }
+    public void meth35848() { }
+    public void meth35849() { }
+    public void meth35850() { }
+    public void meth35851() { }
+    public void meth35852() { }
+    public void meth35853() { }
+    public void meth35854() { }
+    public void meth35855() { }
+    public void meth35856() { }
+    public void meth35857() { }
+    public void meth35858() { }
+    public void meth35859() { }
+    public void meth35860() { }
+    public void meth35861() { }
+    public void meth35862() { }
+    public void meth35863() { }
+    public void meth35864() { }
+    public void meth35865() { }
+    public void meth35866() { }
+    public void meth35867() { }
+    public void meth35868() { }
+    public void meth35869() { }
+    public void meth35870() { }
+    public void meth35871() { }
+    public void meth35872() { }
+    public void meth35873() { }
+    public void meth35874() { }
+    public void meth35875() { }
+    public void meth35876() { }
+    public void meth35877() { }
+    public void meth35878() { }
+    public void meth35879() { }
+    public void meth35880() { }
+    public void meth35881() { }
+    public void meth35882() { }
+    public void meth35883() { }
+    public void meth35884() { }
+    public void meth35885() { }
+    public void meth35886() { }
+    public void meth35887() { }
+    public void meth35888() { }
+    public void meth35889() { }
+    public void meth35890() { }
+    public void meth35891() { }
+    public void meth35892() { }
+    public void meth35893() { }
+    public void meth35894() { }
+    public void meth35895() { }
+    public void meth35896() { }
+    public void meth35897() { }
+    public void meth35898() { }
+    public void meth35899() { }
+    public void meth35900() { }
+    public void meth35901() { }
+    public void meth35902() { }
+    public void meth35903() { }
+    public void meth35904() { }
+    public void meth35905() { }
+    public void meth35906() { }
+    public void meth35907() { }
+    public void meth35908() { }
+    public void meth35909() { }
+    public void meth35910() { }
+    public void meth35911() { }
+    public void meth35912() { }
+    public void meth35913() { }
+    public void meth35914() { }
+    public void meth35915() { }
+    public void meth35916() { }
+    public void meth35917() { }
+    public void meth35918() { }
+    public void meth35919() { }
+    public void meth35920() { }
+    public void meth35921() { }
+    public void meth35922() { }
+    public void meth35923() { }
+    public void meth35924() { }
+    public void meth35925() { }
+    public void meth35926() { }
+    public void meth35927() { }
+    public void meth35928() { }
+    public void meth35929() { }
+    public void meth35930() { }
+    public void meth35931() { }
+    public void meth35932() { }
+    public void meth35933() { }
+    public void meth35934() { }
+    public void meth35935() { }
+    public void meth35936() { }
+    public void meth35937() { }
+    public void meth35938() { }
+    public void meth35939() { }
+    public void meth35940() { }
+    public void meth35941() { }
+    public void meth35942() { }
+    public void meth35943() { }
+    public void meth35944() { }
+    public void meth35945() { }
+    public void meth35946() { }
+    public void meth35947() { }
+    public void meth35948() { }
+    public void meth35949() { }
+    public void meth35950() { }
+    public void meth35951() { }
+    public void meth35952() { }
+    public void meth35953() { }
+    public void meth35954() { }
+    public void meth35955() { }
+    public void meth35956() { }
+    public void meth35957() { }
+    public void meth35958() { }
+    public void meth35959() { }
+    public void meth35960() { }
+    public void meth35961() { }
+    public void meth35962() { }
+    public void meth35963() { }
+    public void meth35964() { }
+    public void meth35965() { }
+    public void meth35966() { }
+    public void meth35967() { }
+    public void meth35968() { }
+    public void meth35969() { }
+    public void meth35970() { }
+    public void meth35971() { }
+    public void meth35972() { }
+    public void meth35973() { }
+    public void meth35974() { }
+    public void meth35975() { }
+    public void meth35976() { }
+    public void meth35977() { }
+    public void meth35978() { }
+    public void meth35979() { }
+    public void meth35980() { }
+    public void meth35981() { }
+    public void meth35982() { }
+    public void meth35983() { }
+    public void meth35984() { }
+    public void meth35985() { }
+    public void meth35986() { }
+    public void meth35987() { }
+    public void meth35988() { }
+    public void meth35989() { }
+    public void meth35990() { }
+    public void meth35991() { }
+    public void meth35992() { }
+    public void meth35993() { }
+    public void meth35994() { }
+    public void meth35995() { }
+    public void meth35996() { }
+    public void meth35997() { }
+    public void meth35998() { }
+    public void meth35999() { }
+    public void meth36000() { }
+    public void meth36001() { }
+    public void meth36002() { }
+    public void meth36003() { }
+    public void meth36004() { }
+    public void meth36005() { }
+    public void meth36006() { }
+    public void meth36007() { }
+    public void meth36008() { }
+    public void meth36009() { }
+    public void meth36010() { }
+    public void meth36011() { }
+    public void meth36012() { }
+    public void meth36013() { }
+    public void meth36014() { }
+    public void meth36015() { }
+    public void meth36016() { }
+    public void meth36017() { }
+    public void meth36018() { }
+    public void meth36019() { }
+    public void meth36020() { }
+    public void meth36021() { }
+    public void meth36022() { }
+    public void meth36023() { }
+    public void meth36024() { }
+    public void meth36025() { }
+    public void meth36026() { }
+    public void meth36027() { }
+    public void meth36028() { }
+    public void meth36029() { }
+    public void meth36030() { }
+    public void meth36031() { }
+    public void meth36032() { }
+    public void meth36033() { }
+    public void meth36034() { }
+    public void meth36035() { }
+    public void meth36036() { }
+    public void meth36037() { }
+    public void meth36038() { }
+    public void meth36039() { }
+    public void meth36040() { }
+    public void meth36041() { }
+    public void meth36042() { }
+    public void meth36043() { }
+    public void meth36044() { }
+    public void meth36045() { }
+    public void meth36046() { }
+    public void meth36047() { }
+    public void meth36048() { }
+    public void meth36049() { }
+    public void meth36050() { }
+    public void meth36051() { }
+    public void meth36052() { }
+    public void meth36053() { }
+    public void meth36054() { }
+    public void meth36055() { }
+    public void meth36056() { }
+    public void meth36057() { }
+    public void meth36058() { }
+    public void meth36059() { }
+    public void meth36060() { }
+    public void meth36061() { }
+    public void meth36062() { }
+    public void meth36063() { }
+    public void meth36064() { }
+    public void meth36065() { }
+    public void meth36066() { }
+    public void meth36067() { }
+    public void meth36068() { }
+    public void meth36069() { }
+    public void meth36070() { }
+    public void meth36071() { }
+    public void meth36072() { }
+    public void meth36073() { }
+    public void meth36074() { }
+    public void meth36075() { }
+    public void meth36076() { }
+    public void meth36077() { }
+    public void meth36078() { }
+    public void meth36079() { }
+    public void meth36080() { }
+    public void meth36081() { }
+    public void meth36082() { }
+    public void meth36083() { }
+    public void meth36084() { }
+    public void meth36085() { }
+    public void meth36086() { }
+    public void meth36087() { }
+    public void meth36088() { }
+    public void meth36089() { }
+    public void meth36090() { }
+    public void meth36091() { }
+    public void meth36092() { }
+    public void meth36093() { }
+    public void meth36094() { }
+    public void meth36095() { }
+    public void meth36096() { }
+    public void meth36097() { }
+    public void meth36098() { }
+    public void meth36099() { }
+    public void meth36100() { }
+    public void meth36101() { }
+    public void meth36102() { }
+    public void meth36103() { }
+    public void meth36104() { }
+    public void meth36105() { }
+    public void meth36106() { }
+    public void meth36107() { }
+    public void meth36108() { }
+    public void meth36109() { }
+    public void meth36110() { }
+    public void meth36111() { }
+    public void meth36112() { }
+    public void meth36113() { }
+    public void meth36114() { }
+    public void meth36115() { }
+    public void meth36116() { }
+    public void meth36117() { }
+    public void meth36118() { }
+    public void meth36119() { }
+    public void meth36120() { }
+    public void meth36121() { }
+    public void meth36122() { }
+    public void meth36123() { }
+    public void meth36124() { }
+    public void meth36125() { }
+    public void meth36126() { }
+    public void meth36127() { }
+    public void meth36128() { }
+    public void meth36129() { }
+    public void meth36130() { }
+    public void meth36131() { }
+    public void meth36132() { }
+    public void meth36133() { }
+    public void meth36134() { }
+    public void meth36135() { }
+    public void meth36136() { }
+    public void meth36137() { }
+    public void meth36138() { }
+    public void meth36139() { }
+    public void meth36140() { }
+    public void meth36141() { }
+    public void meth36142() { }
+    public void meth36143() { }
+    public void meth36144() { }
+    public void meth36145() { }
+    public void meth36146() { }
+    public void meth36147() { }
+    public void meth36148() { }
+    public void meth36149() { }
+    public void meth36150() { }
+    public void meth36151() { }
+    public void meth36152() { }
+    public void meth36153() { }
+    public void meth36154() { }
+    public void meth36155() { }
+    public void meth36156() { }
+    public void meth36157() { }
+    public void meth36158() { }
+    public void meth36159() { }
+    public void meth36160() { }
+    public void meth36161() { }
+    public void meth36162() { }
+    public void meth36163() { }
+    public void meth36164() { }
+    public void meth36165() { }
+    public void meth36166() { }
+    public void meth36167() { }
+    public void meth36168() { }
+    public void meth36169() { }
+    public void meth36170() { }
+    public void meth36171() { }
+    public void meth36172() { }
+    public void meth36173() { }
+    public void meth36174() { }
+    public void meth36175() { }
+    public void meth36176() { }
+    public void meth36177() { }
+    public void meth36178() { }
+    public void meth36179() { }
+    public void meth36180() { }
+    public void meth36181() { }
+    public void meth36182() { }
+    public void meth36183() { }
+    public void meth36184() { }
+    public void meth36185() { }
+    public void meth36186() { }
+    public void meth36187() { }
+    public void meth36188() { }
+    public void meth36189() { }
+    public void meth36190() { }
+    public void meth36191() { }
+    public void meth36192() { }
+    public void meth36193() { }
+    public void meth36194() { }
+    public void meth36195() { }
+    public void meth36196() { }
+    public void meth36197() { }
+    public void meth36198() { }
+    public void meth36199() { }
+    public void meth36200() { }
+    public void meth36201() { }
+    public void meth36202() { }
+    public void meth36203() { }
+    public void meth36204() { }
+    public void meth36205() { }
+    public void meth36206() { }
+    public void meth36207() { }
+    public void meth36208() { }
+    public void meth36209() { }
+    public void meth36210() { }
+    public void meth36211() { }
+    public void meth36212() { }
+    public void meth36213() { }
+    public void meth36214() { }
+    public void meth36215() { }
+    public void meth36216() { }
+    public void meth36217() { }
+    public void meth36218() { }
+    public void meth36219() { }
+    public void meth36220() { }
+    public void meth36221() { }
+    public void meth36222() { }
+    public void meth36223() { }
+    public void meth36224() { }
+    public void meth36225() { }
+    public void meth36226() { }
+    public void meth36227() { }
+    public void meth36228() { }
+    public void meth36229() { }
+    public void meth36230() { }
+    public void meth36231() { }
+    public void meth36232() { }
+    public void meth36233() { }
+    public void meth36234() { }
+    public void meth36235() { }
+    public void meth36236() { }
+    public void meth36237() { }
+    public void meth36238() { }
+    public void meth36239() { }
+    public void meth36240() { }
+    public void meth36241() { }
+    public void meth36242() { }
+    public void meth36243() { }
+    public void meth36244() { }
+    public void meth36245() { }
+    public void meth36246() { }
+    public void meth36247() { }
+    public void meth36248() { }
+    public void meth36249() { }
+    public void meth36250() { }
+    public void meth36251() { }
+    public void meth36252() { }
+    public void meth36253() { }
+    public void meth36254() { }
+    public void meth36255() { }
+    public void meth36256() { }
+    public void meth36257() { }
+    public void meth36258() { }
+    public void meth36259() { }
+    public void meth36260() { }
+    public void meth36261() { }
+    public void meth36262() { }
+    public void meth36263() { }
+    public void meth36264() { }
+    public void meth36265() { }
+    public void meth36266() { }
+    public void meth36267() { }
+    public void meth36268() { }
+    public void meth36269() { }
+    public void meth36270() { }
+    public void meth36271() { }
+    public void meth36272() { }
+    public void meth36273() { }
+    public void meth36274() { }
+    public void meth36275() { }
+    public void meth36276() { }
+    public void meth36277() { }
+    public void meth36278() { }
+    public void meth36279() { }
+    public void meth36280() { }
+    public void meth36281() { }
+    public void meth36282() { }
+    public void meth36283() { }
+    public void meth36284() { }
+    public void meth36285() { }
+    public void meth36286() { }
+    public void meth36287() { }
+    public void meth36288() { }
+    public void meth36289() { }
+    public void meth36290() { }
+    public void meth36291() { }
+    public void meth36292() { }
+    public void meth36293() { }
+    public void meth36294() { }
+    public void meth36295() { }
+    public void meth36296() { }
+    public void meth36297() { }
+    public void meth36298() { }
+    public void meth36299() { }
+    public void meth36300() { }
+    public void meth36301() { }
+    public void meth36302() { }
+    public void meth36303() { }
+    public void meth36304() { }
+    public void meth36305() { }
+    public void meth36306() { }
+    public void meth36307() { }
+    public void meth36308() { }
+    public void meth36309() { }
+    public void meth36310() { }
+    public void meth36311() { }
+    public void meth36312() { }
+    public void meth36313() { }
+    public void meth36314() { }
+    public void meth36315() { }
+    public void meth36316() { }
+    public void meth36317() { }
+    public void meth36318() { }
+    public void meth36319() { }
+    public void meth36320() { }
+    public void meth36321() { }
+    public void meth36322() { }
+    public void meth36323() { }
+    public void meth36324() { }
+    public void meth36325() { }
+    public void meth36326() { }
+    public void meth36327() { }
+    public void meth36328() { }
+    public void meth36329() { }
+    public void meth36330() { }
+    public void meth36331() { }
+    public void meth36332() { }
+    public void meth36333() { }
+    public void meth36334() { }
+    public void meth36335() { }
+    public void meth36336() { }
+    public void meth36337() { }
+    public void meth36338() { }
+    public void meth36339() { }
+    public void meth36340() { }
+    public void meth36341() { }
+    public void meth36342() { }
+    public void meth36343() { }
+    public void meth36344() { }
+    public void meth36345() { }
+    public void meth36346() { }
+    public void meth36347() { }
+    public void meth36348() { }
+    public void meth36349() { }
+    public void meth36350() { }
+    public void meth36351() { }
+    public void meth36352() { }
+    public void meth36353() { }
+    public void meth36354() { }
+    public void meth36355() { }
+    public void meth36356() { }
+    public void meth36357() { }
+    public void meth36358() { }
+    public void meth36359() { }
+    public void meth36360() { }
+    public void meth36361() { }
+    public void meth36362() { }
+    public void meth36363() { }
+    public void meth36364() { }
+    public void meth36365() { }
+    public void meth36366() { }
+    public void meth36367() { }
+    public void meth36368() { }
+    public void meth36369() { }
+    public void meth36370() { }
+    public void meth36371() { }
+    public void meth36372() { }
+    public void meth36373() { }
+    public void meth36374() { }
+    public void meth36375() { }
+    public void meth36376() { }
+    public void meth36377() { }
+    public void meth36378() { }
+    public void meth36379() { }
+    public void meth36380() { }
+    public void meth36381() { }
+    public void meth36382() { }
+    public void meth36383() { }
+    public void meth36384() { }
+    public void meth36385() { }
+    public void meth36386() { }
+    public void meth36387() { }
+    public void meth36388() { }
+    public void meth36389() { }
+    public void meth36390() { }
+    public void meth36391() { }
+    public void meth36392() { }
+    public void meth36393() { }
+    public void meth36394() { }
+    public void meth36395() { }
+    public void meth36396() { }
+    public void meth36397() { }
+    public void meth36398() { }
+    public void meth36399() { }
+    public void meth36400() { }
+    public void meth36401() { }
+    public void meth36402() { }
+    public void meth36403() { }
+    public void meth36404() { }
+    public void meth36405() { }
+    public void meth36406() { }
+    public void meth36407() { }
+    public void meth36408() { }
+    public void meth36409() { }
+    public void meth36410() { }
+    public void meth36411() { }
+    public void meth36412() { }
+    public void meth36413() { }
+    public void meth36414() { }
+    public void meth36415() { }
+    public void meth36416() { }
+    public void meth36417() { }
+    public void meth36418() { }
+    public void meth36419() { }
+    public void meth36420() { }
+    public void meth36421() { }
+    public void meth36422() { }
+    public void meth36423() { }
+    public void meth36424() { }
+    public void meth36425() { }
+    public void meth36426() { }
+    public void meth36427() { }
+    public void meth36428() { }
+    public void meth36429() { }
+    public void meth36430() { }
+    public void meth36431() { }
+    public void meth36432() { }
+    public void meth36433() { }
+    public void meth36434() { }
+    public void meth36435() { }
+    public void meth36436() { }
+    public void meth36437() { }
+    public void meth36438() { }
+    public void meth36439() { }
+    public void meth36440() { }
+    public void meth36441() { }
+    public void meth36442() { }
+    public void meth36443() { }
+    public void meth36444() { }
+    public void meth36445() { }
+    public void meth36446() { }
+    public void meth36447() { }
+    public void meth36448() { }
+    public void meth36449() { }
+    public void meth36450() { }
+    public void meth36451() { }
+    public void meth36452() { }
+    public void meth36453() { }
+    public void meth36454() { }
+    public void meth36455() { }
+    public void meth36456() { }
+    public void meth36457() { }
+    public void meth36458() { }
+    public void meth36459() { }
+    public void meth36460() { }
+    public void meth36461() { }
+    public void meth36462() { }
+    public void meth36463() { }
+    public void meth36464() { }
+    public void meth36465() { }
+    public void meth36466() { }
+    public void meth36467() { }
+    public void meth36468() { }
+    public void meth36469() { }
+    public void meth36470() { }
+    public void meth36471() { }
+    public void meth36472() { }
+    public void meth36473() { }
+    public void meth36474() { }
+    public void meth36475() { }
+    public void meth36476() { }
+    public void meth36477() { }
+    public void meth36478() { }
+    public void meth36479() { }
+    public void meth36480() { }
+    public void meth36481() { }
+    public void meth36482() { }
+    public void meth36483() { }
+    public void meth36484() { }
+    public void meth36485() { }
+    public void meth36486() { }
+    public void meth36487() { }
+    public void meth36488() { }
+    public void meth36489() { }
+    public void meth36490() { }
+    public void meth36491() { }
+    public void meth36492() { }
+    public void meth36493() { }
+    public void meth36494() { }
+    public void meth36495() { }
+    public void meth36496() { }
+    public void meth36497() { }
+    public void meth36498() { }
+    public void meth36499() { }
+    public void meth36500() { }
+    public void meth36501() { }
+    public void meth36502() { }
+    public void meth36503() { }
+    public void meth36504() { }
+    public void meth36505() { }
+    public void meth36506() { }
+    public void meth36507() { }
+    public void meth36508() { }
+    public void meth36509() { }
+    public void meth36510() { }
+    public void meth36511() { }
+    public void meth36512() { }
+    public void meth36513() { }
+    public void meth36514() { }
+    public void meth36515() { }
+    public void meth36516() { }
+    public void meth36517() { }
+    public void meth36518() { }
+    public void meth36519() { }
+    public void meth36520() { }
+    public void meth36521() { }
+    public void meth36522() { }
+    public void meth36523() { }
+    public void meth36524() { }
+    public void meth36525() { }
+    public void meth36526() { }
+    public void meth36527() { }
+    public void meth36528() { }
+    public void meth36529() { }
+    public void meth36530() { }
+    public void meth36531() { }
+    public void meth36532() { }
+    public void meth36533() { }
+    public void meth36534() { }
+    public void meth36535() { }
+    public void meth36536() { }
+    public void meth36537() { }
+    public void meth36538() { }
+    public void meth36539() { }
+    public void meth36540() { }
+    public void meth36541() { }
+    public void meth36542() { }
+    public void meth36543() { }
+    public void meth36544() { }
+    public void meth36545() { }
+    public void meth36546() { }
+    public void meth36547() { }
+    public void meth36548() { }
+    public void meth36549() { }
+    public void meth36550() { }
+    public void meth36551() { }
+    public void meth36552() { }
+    public void meth36553() { }
+    public void meth36554() { }
+    public void meth36555() { }
+    public void meth36556() { }
+    public void meth36557() { }
+    public void meth36558() { }
+    public void meth36559() { }
+    public void meth36560() { }
+    public void meth36561() { }
+    public void meth36562() { }
+    public void meth36563() { }
+    public void meth36564() { }
+    public void meth36565() { }
+    public void meth36566() { }
+    public void meth36567() { }
+    public void meth36568() { }
+    public void meth36569() { }
+    public void meth36570() { }
+    public void meth36571() { }
+    public void meth36572() { }
+    public void meth36573() { }
+    public void meth36574() { }
+    public void meth36575() { }
+    public void meth36576() { }
+    public void meth36577() { }
+    public void meth36578() { }
+    public void meth36579() { }
+    public void meth36580() { }
+    public void meth36581() { }
+    public void meth36582() { }
+    public void meth36583() { }
+    public void meth36584() { }
+    public void meth36585() { }
+    public void meth36586() { }
+    public void meth36587() { }
+    public void meth36588() { }
+    public void meth36589() { }
+    public void meth36590() { }
+    public void meth36591() { }
+    public void meth36592() { }
+    public void meth36593() { }
+    public void meth36594() { }
+    public void meth36595() { }
+    public void meth36596() { }
+    public void meth36597() { }
+    public void meth36598() { }
+    public void meth36599() { }
+    public void meth36600() { }
+    public void meth36601() { }
+    public void meth36602() { }
+    public void meth36603() { }
+    public void meth36604() { }
+    public void meth36605() { }
+    public void meth36606() { }
+    public void meth36607() { }
+    public void meth36608() { }
+    public void meth36609() { }
+    public void meth36610() { }
+    public void meth36611() { }
+    public void meth36612() { }
+    public void meth36613() { }
+    public void meth36614() { }
+    public void meth36615() { }
+    public void meth36616() { }
+    public void meth36617() { }
+    public void meth36618() { }
+    public void meth36619() { }
+    public void meth36620() { }
+    public void meth36621() { }
+    public void meth36622() { }
+    public void meth36623() { }
+    public void meth36624() { }
+    public void meth36625() { }
+    public void meth36626() { }
+    public void meth36627() { }
+    public void meth36628() { }
+    public void meth36629() { }
+    public void meth36630() { }
+    public void meth36631() { }
+    public void meth36632() { }
+    public void meth36633() { }
+    public void meth36634() { }
+    public void meth36635() { }
+    public void meth36636() { }
+    public void meth36637() { }
+    public void meth36638() { }
+    public void meth36639() { }
+    public void meth36640() { }
+    public void meth36641() { }
+    public void meth36642() { }
+    public void meth36643() { }
+    public void meth36644() { }
+    public void meth36645() { }
+    public void meth36646() { }
+    public void meth36647() { }
+    public void meth36648() { }
+    public void meth36649() { }
+    public void meth36650() { }
+    public void meth36651() { }
+    public void meth36652() { }
+    public void meth36653() { }
+    public void meth36654() { }
+    public void meth36655() { }
+    public void meth36656() { }
+    public void meth36657() { }
+    public void meth36658() { }
+    public void meth36659() { }
+    public void meth36660() { }
+    public void meth36661() { }
+    public void meth36662() { }
+    public void meth36663() { }
+    public void meth36664() { }
+    public void meth36665() { }
+    public void meth36666() { }
+    public void meth36667() { }
+    public void meth36668() { }
+    public void meth36669() { }
+    public void meth36670() { }
+    public void meth36671() { }
+    public void meth36672() { }
+    public void meth36673() { }
+    public void meth36674() { }
+    public void meth36675() { }
+    public void meth36676() { }
+    public void meth36677() { }
+    public void meth36678() { }
+    public void meth36679() { }
+    public void meth36680() { }
+    public void meth36681() { }
+    public void meth36682() { }
+    public void meth36683() { }
+    public void meth36684() { }
+    public void meth36685() { }
+    public void meth36686() { }
+    public void meth36687() { }
+    public void meth36688() { }
+    public void meth36689() { }
+    public void meth36690() { }
+    public void meth36691() { }
+    public void meth36692() { }
+    public void meth36693() { }
+    public void meth36694() { }
+    public void meth36695() { }
+    public void meth36696() { }
+    public void meth36697() { }
+    public void meth36698() { }
+    public void meth36699() { }
+    public void meth36700() { }
+    public void meth36701() { }
+    public void meth36702() { }
+    public void meth36703() { }
+    public void meth36704() { }
+    public void meth36705() { }
+    public void meth36706() { }
+    public void meth36707() { }
+    public void meth36708() { }
+    public void meth36709() { }
+    public void meth36710() { }
+    public void meth36711() { }
+    public void meth36712() { }
+    public void meth36713() { }
+    public void meth36714() { }
+    public void meth36715() { }
+    public void meth36716() { }
+    public void meth36717() { }
+    public void meth36718() { }
+    public void meth36719() { }
+    public void meth36720() { }
+    public void meth36721() { }
+    public void meth36722() { }
+    public void meth36723() { }
+    public void meth36724() { }
+    public void meth36725() { }
+    public void meth36726() { }
+    public void meth36727() { }
+    public void meth36728() { }
+    public void meth36729() { }
+    public void meth36730() { }
+    public void meth36731() { }
+    public void meth36732() { }
+    public void meth36733() { }
+    public void meth36734() { }
+    public void meth36735() { }
+    public void meth36736() { }
+    public void meth36737() { }
+    public void meth36738() { }
+    public void meth36739() { }
+    public void meth36740() { }
+    public void meth36741() { }
+    public void meth36742() { }
+    public void meth36743() { }
+    public void meth36744() { }
+    public void meth36745() { }
+    public void meth36746() { }
+    public void meth36747() { }
+    public void meth36748() { }
+    public void meth36749() { }
+    public void meth36750() { }
+    public void meth36751() { }
+    public void meth36752() { }
+    public void meth36753() { }
+    public void meth36754() { }
+    public void meth36755() { }
+    public void meth36756() { }
+    public void meth36757() { }
+    public void meth36758() { }
+    public void meth36759() { }
+    public void meth36760() { }
+    public void meth36761() { }
+    public void meth36762() { }
+    public void meth36763() { }
+    public void meth36764() { }
+    public void meth36765() { }
+    public void meth36766() { }
+    public void meth36767() { }
+    public void meth36768() { }
+    public void meth36769() { }
+    public void meth36770() { }
+    public void meth36771() { }
+    public void meth36772() { }
+    public void meth36773() { }
+    public void meth36774() { }
+    public void meth36775() { }
+    public void meth36776() { }
+    public void meth36777() { }
+    public void meth36778() { }
+    public void meth36779() { }
+    public void meth36780() { }
+    public void meth36781() { }
+    public void meth36782() { }
+    public void meth36783() { }
+    public void meth36784() { }
+    public void meth36785() { }
+    public void meth36786() { }
+    public void meth36787() { }
+    public void meth36788() { }
+    public void meth36789() { }
+    public void meth36790() { }
+    public void meth36791() { }
+    public void meth36792() { }
+    public void meth36793() { }
+    public void meth36794() { }
+    public void meth36795() { }
+    public void meth36796() { }
+    public void meth36797() { }
+    public void meth36798() { }
+    public void meth36799() { }
+    public void meth36800() { }
+    public void meth36801() { }
+    public void meth36802() { }
+    public void meth36803() { }
+    public void meth36804() { }
+    public void meth36805() { }
+    public void meth36806() { }
+    public void meth36807() { }
+    public void meth36808() { }
+    public void meth36809() { }
+    public void meth36810() { }
+    public void meth36811() { }
+    public void meth36812() { }
+    public void meth36813() { }
+    public void meth36814() { }
+    public void meth36815() { }
+    public void meth36816() { }
+    public void meth36817() { }
+    public void meth36818() { }
+    public void meth36819() { }
+    public void meth36820() { }
+    public void meth36821() { }
+    public void meth36822() { }
+    public void meth36823() { }
+    public void meth36824() { }
+    public void meth36825() { }
+    public void meth36826() { }
+    public void meth36827() { }
+    public void meth36828() { }
+    public void meth36829() { }
+    public void meth36830() { }
+    public void meth36831() { }
+    public void meth36832() { }
+    public void meth36833() { }
+    public void meth36834() { }
+    public void meth36835() { }
+    public void meth36836() { }
+    public void meth36837() { }
+    public void meth36838() { }
+    public void meth36839() { }
+    public void meth36840() { }
+    public void meth36841() { }
+    public void meth36842() { }
+    public void meth36843() { }
+    public void meth36844() { }
+    public void meth36845() { }
+    public void meth36846() { }
+    public void meth36847() { }
+    public void meth36848() { }
+    public void meth36849() { }
+    public void meth36850() { }
+    public void meth36851() { }
+    public void meth36852() { }
+    public void meth36853() { }
+    public void meth36854() { }
+    public void meth36855() { }
+    public void meth36856() { }
+    public void meth36857() { }
+    public void meth36858() { }
+    public void meth36859() { }
+    public void meth36860() { }
+    public void meth36861() { }
+    public void meth36862() { }
+    public void meth36863() { }
+    public void meth36864() { }
+    public void meth36865() { }
+    public void meth36866() { }
+    public void meth36867() { }
+    public void meth36868() { }
+    public void meth36869() { }
+    public void meth36870() { }
+    public void meth36871() { }
+    public void meth36872() { }
+    public void meth36873() { }
+    public void meth36874() { }
+    public void meth36875() { }
+    public void meth36876() { }
+    public void meth36877() { }
+    public void meth36878() { }
+    public void meth36879() { }
+    public void meth36880() { }
+    public void meth36881() { }
+    public void meth36882() { }
+    public void meth36883() { }
+    public void meth36884() { }
+    public void meth36885() { }
+    public void meth36886() { }
+    public void meth36887() { }
+    public void meth36888() { }
+    public void meth36889() { }
+    public void meth36890() { }
+    public void meth36891() { }
+    public void meth36892() { }
+    public void meth36893() { }
+    public void meth36894() { }
+    public void meth36895() { }
+    public void meth36896() { }
+    public void meth36897() { }
+    public void meth36898() { }
+    public void meth36899() { }
+    public void meth36900() { }
+    public void meth36901() { }
+    public void meth36902() { }
+    public void meth36903() { }
+    public void meth36904() { }
+    public void meth36905() { }
+    public void meth36906() { }
+    public void meth36907() { }
+    public void meth36908() { }
+    public void meth36909() { }
+    public void meth36910() { }
+    public void meth36911() { }
+    public void meth36912() { }
+    public void meth36913() { }
+    public void meth36914() { }
+    public void meth36915() { }
+    public void meth36916() { }
+    public void meth36917() { }
+    public void meth36918() { }
+    public void meth36919() { }
+    public void meth36920() { }
+    public void meth36921() { }
+    public void meth36922() { }
+    public void meth36923() { }
+    public void meth36924() { }
+    public void meth36925() { }
+    public void meth36926() { }
+    public void meth36927() { }
+    public void meth36928() { }
+    public void meth36929() { }
+    public void meth36930() { }
+    public void meth36931() { }
+    public void meth36932() { }
+    public void meth36933() { }
+    public void meth36934() { }
+    public void meth36935() { }
+    public void meth36936() { }
+    public void meth36937() { }
+    public void meth36938() { }
+    public void meth36939() { }
+    public void meth36940() { }
+    public void meth36941() { }
+    public void meth36942() { }
+    public void meth36943() { }
+    public void meth36944() { }
+    public void meth36945() { }
+    public void meth36946() { }
+    public void meth36947() { }
+    public void meth36948() { }
+    public void meth36949() { }
+    public void meth36950() { }
+    public void meth36951() { }
+    public void meth36952() { }
+    public void meth36953() { }
+    public void meth36954() { }
+    public void meth36955() { }
+    public void meth36956() { }
+    public void meth36957() { }
+    public void meth36958() { }
+    public void meth36959() { }
+    public void meth36960() { }
+    public void meth36961() { }
+    public void meth36962() { }
+    public void meth36963() { }
+    public void meth36964() { }
+    public void meth36965() { }
+    public void meth36966() { }
+    public void meth36967() { }
+    public void meth36968() { }
+    public void meth36969() { }
+    public void meth36970() { }
+    public void meth36971() { }
+    public void meth36972() { }
+    public void meth36973() { }
+    public void meth36974() { }
+    public void meth36975() { }
+    public void meth36976() { }
+    public void meth36977() { }
+    public void meth36978() { }
+    public void meth36979() { }
+    public void meth36980() { }
+    public void meth36981() { }
+    public void meth36982() { }
+    public void meth36983() { }
+    public void meth36984() { }
+    public void meth36985() { }
+    public void meth36986() { }
+    public void meth36987() { }
+    public void meth36988() { }
+    public void meth36989() { }
+    public void meth36990() { }
+    public void meth36991() { }
+    public void meth36992() { }
+    public void meth36993() { }
+    public void meth36994() { }
+    public void meth36995() { }
+    public void meth36996() { }
+    public void meth36997() { }
+    public void meth36998() { }
+    public void meth36999() { }
+    public void meth37000() { }
+    public void meth37001() { }
+    public void meth37002() { }
+    public void meth37003() { }
+    public void meth37004() { }
+    public void meth37005() { }
+    public void meth37006() { }
+    public void meth37007() { }
+    public void meth37008() { }
+    public void meth37009() { }
+    public void meth37010() { }
+    public void meth37011() { }
+    public void meth37012() { }
+    public void meth37013() { }
+    public void meth37014() { }
+    public void meth37015() { }
+    public void meth37016() { }
+    public void meth37017() { }
+    public void meth37018() { }
+    public void meth37019() { }
+    public void meth37020() { }
+    public void meth37021() { }
+    public void meth37022() { }
+    public void meth37023() { }
+    public void meth37024() { }
+    public void meth37025() { }
+    public void meth37026() { }
+    public void meth37027() { }
+    public void meth37028() { }
+    public void meth37029() { }
+    public void meth37030() { }
+    public void meth37031() { }
+    public void meth37032() { }
+    public void meth37033() { }
+    public void meth37034() { }
+    public void meth37035() { }
+    public void meth37036() { }
+    public void meth37037() { }
+    public void meth37038() { }
+    public void meth37039() { }
+    public void meth37040() { }
+    public void meth37041() { }
+    public void meth37042() { }
+    public void meth37043() { }
+    public void meth37044() { }
+    public void meth37045() { }
+    public void meth37046() { }
+    public void meth37047() { }
+    public void meth37048() { }
+    public void meth37049() { }
+    public void meth37050() { }
+    public void meth37051() { }
+    public void meth37052() { }
+    public void meth37053() { }
+    public void meth37054() { }
+    public void meth37055() { }
+    public void meth37056() { }
+    public void meth37057() { }
+    public void meth37058() { }
+    public void meth37059() { }
+    public void meth37060() { }
+    public void meth37061() { }
+    public void meth37062() { }
+    public void meth37063() { }
+    public void meth37064() { }
+    public void meth37065() { }
+    public void meth37066() { }
+    public void meth37067() { }
+    public void meth37068() { }
+    public void meth37069() { }
+    public void meth37070() { }
+    public void meth37071() { }
+    public void meth37072() { }
+    public void meth37073() { }
+    public void meth37074() { }
+    public void meth37075() { }
+    public void meth37076() { }
+    public void meth37077() { }
+    public void meth37078() { }
+    public void meth37079() { }
+    public void meth37080() { }
+    public void meth37081() { }
+    public void meth37082() { }
+    public void meth37083() { }
+    public void meth37084() { }
+    public void meth37085() { }
+    public void meth37086() { }
+    public void meth37087() { }
+    public void meth37088() { }
+    public void meth37089() { }
+    public void meth37090() { }
+    public void meth37091() { }
+    public void meth37092() { }
+    public void meth37093() { }
+    public void meth37094() { }
+    public void meth37095() { }
+    public void meth37096() { }
+    public void meth37097() { }
+    public void meth37098() { }
+    public void meth37099() { }
+    public void meth37100() { }
+    public void meth37101() { }
+    public void meth37102() { }
+    public void meth37103() { }
+    public void meth37104() { }
+    public void meth37105() { }
+    public void meth37106() { }
+    public void meth37107() { }
+    public void meth37108() { }
+    public void meth37109() { }
+    public void meth37110() { }
+    public void meth37111() { }
+    public void meth37112() { }
+    public void meth37113() { }
+    public void meth37114() { }
+    public void meth37115() { }
+    public void meth37116() { }
+    public void meth37117() { }
+    public void meth37118() { }
+    public void meth37119() { }
+    public void meth37120() { }
+    public void meth37121() { }
+    public void meth37122() { }
+    public void meth37123() { }
+    public void meth37124() { }
+    public void meth37125() { }
+    public void meth37126() { }
+    public void meth37127() { }
+    public void meth37128() { }
+    public void meth37129() { }
+    public void meth37130() { }
+    public void meth37131() { }
+    public void meth37132() { }
+    public void meth37133() { }
+    public void meth37134() { }
+    public void meth37135() { }
+    public void meth37136() { }
+    public void meth37137() { }
+    public void meth37138() { }
+    public void meth37139() { }
+    public void meth37140() { }
+    public void meth37141() { }
+    public void meth37142() { }
+    public void meth37143() { }
+    public void meth37144() { }
+    public void meth37145() { }
+    public void meth37146() { }
+    public void meth37147() { }
+    public void meth37148() { }
+    public void meth37149() { }
+    public void meth37150() { }
+    public void meth37151() { }
+    public void meth37152() { }
+    public void meth37153() { }
+    public void meth37154() { }
+    public void meth37155() { }
+    public void meth37156() { }
+    public void meth37157() { }
+    public void meth37158() { }
+    public void meth37159() { }
+    public void meth37160() { }
+    public void meth37161() { }
+    public void meth37162() { }
+    public void meth37163() { }
+    public void meth37164() { }
+    public void meth37165() { }
+    public void meth37166() { }
+    public void meth37167() { }
+    public void meth37168() { }
+    public void meth37169() { }
+    public void meth37170() { }
+    public void meth37171() { }
+    public void meth37172() { }
+    public void meth37173() { }
+    public void meth37174() { }
+    public void meth37175() { }
+    public void meth37176() { }
+    public void meth37177() { }
+    public void meth37178() { }
+    public void meth37179() { }
+    public void meth37180() { }
+    public void meth37181() { }
+    public void meth37182() { }
+    public void meth37183() { }
+    public void meth37184() { }
+    public void meth37185() { }
+    public void meth37186() { }
+    public void meth37187() { }
+    public void meth37188() { }
+    public void meth37189() { }
+    public void meth37190() { }
+    public void meth37191() { }
+    public void meth37192() { }
+    public void meth37193() { }
+    public void meth37194() { }
+    public void meth37195() { }
+    public void meth37196() { }
+    public void meth37197() { }
+    public void meth37198() { }
+    public void meth37199() { }
+    public void meth37200() { }
+    public void meth37201() { }
+    public void meth37202() { }
+    public void meth37203() { }
+    public void meth37204() { }
+    public void meth37205() { }
+    public void meth37206() { }
+    public void meth37207() { }
+    public void meth37208() { }
+    public void meth37209() { }
+    public void meth37210() { }
+    public void meth37211() { }
+    public void meth37212() { }
+    public void meth37213() { }
+    public void meth37214() { }
+    public void meth37215() { }
+    public void meth37216() { }
+    public void meth37217() { }
+    public void meth37218() { }
+    public void meth37219() { }
+    public void meth37220() { }
+    public void meth37221() { }
+    public void meth37222() { }
+    public void meth37223() { }
+    public void meth37224() { }
+    public void meth37225() { }
+    public void meth37226() { }
+    public void meth37227() { }
+    public void meth37228() { }
+    public void meth37229() { }
+    public void meth37230() { }
+    public void meth37231() { }
+    public void meth37232() { }
+    public void meth37233() { }
+    public void meth37234() { }
+    public void meth37235() { }
+    public void meth37236() { }
+    public void meth37237() { }
+    public void meth37238() { }
+    public void meth37239() { }
+    public void meth37240() { }
+    public void meth37241() { }
+    public void meth37242() { }
+    public void meth37243() { }
+    public void meth37244() { }
+    public void meth37245() { }
+    public void meth37246() { }
+    public void meth37247() { }
+    public void meth37248() { }
+    public void meth37249() { }
+    public void meth37250() { }
+    public void meth37251() { }
+    public void meth37252() { }
+    public void meth37253() { }
+    public void meth37254() { }
+    public void meth37255() { }
+    public void meth37256() { }
+    public void meth37257() { }
+    public void meth37258() { }
+    public void meth37259() { }
+    public void meth37260() { }
+    public void meth37261() { }
+    public void meth37262() { }
+    public void meth37263() { }
+    public void meth37264() { }
+    public void meth37265() { }
+    public void meth37266() { }
+    public void meth37267() { }
+    public void meth37268() { }
+    public void meth37269() { }
+    public void meth37270() { }
+    public void meth37271() { }
+    public void meth37272() { }
+    public void meth37273() { }
+    public void meth37274() { }
+    public void meth37275() { }
+    public void meth37276() { }
+    public void meth37277() { }
+    public void meth37278() { }
+    public void meth37279() { }
+    public void meth37280() { }
+    public void meth37281() { }
+    public void meth37282() { }
+    public void meth37283() { }
+    public void meth37284() { }
+    public void meth37285() { }
+    public void meth37286() { }
+    public void meth37287() { }
+    public void meth37288() { }
+    public void meth37289() { }
+    public void meth37290() { }
+    public void meth37291() { }
+    public void meth37292() { }
+    public void meth37293() { }
+    public void meth37294() { }
+    public void meth37295() { }
+    public void meth37296() { }
+    public void meth37297() { }
+    public void meth37298() { }
+    public void meth37299() { }
+    public void meth37300() { }
+    public void meth37301() { }
+    public void meth37302() { }
+    public void meth37303() { }
+    public void meth37304() { }
+    public void meth37305() { }
+    public void meth37306() { }
+    public void meth37307() { }
+    public void meth37308() { }
+    public void meth37309() { }
+    public void meth37310() { }
+    public void meth37311() { }
+    public void meth37312() { }
+    public void meth37313() { }
+    public void meth37314() { }
+    public void meth37315() { }
+    public void meth37316() { }
+    public void meth37317() { }
+    public void meth37318() { }
+    public void meth37319() { }
+    public void meth37320() { }
+    public void meth37321() { }
+    public void meth37322() { }
+    public void meth37323() { }
+    public void meth37324() { }
+    public void meth37325() { }
+    public void meth37326() { }
+    public void meth37327() { }
+    public void meth37328() { }
+    public void meth37329() { }
+    public void meth37330() { }
+    public void meth37331() { }
+    public void meth37332() { }
+    public void meth37333() { }
+    public void meth37334() { }
+    public void meth37335() { }
+    public void meth37336() { }
+    public void meth37337() { }
+    public void meth37338() { }
+    public void meth37339() { }
+    public void meth37340() { }
+    public void meth37341() { }
+    public void meth37342() { }
+    public void meth37343() { }
+    public void meth37344() { }
+    public void meth37345() { }
+    public void meth37346() { }
+    public void meth37347() { }
+    public void meth37348() { }
+    public void meth37349() { }
+    public void meth37350() { }
+    public void meth37351() { }
+    public void meth37352() { }
+    public void meth37353() { }
+    public void meth37354() { }
+    public void meth37355() { }
+    public void meth37356() { }
+    public void meth37357() { }
+    public void meth37358() { }
+    public void meth37359() { }
+    public void meth37360() { }
+    public void meth37361() { }
+    public void meth37362() { }
+    public void meth37363() { }
+    public void meth37364() { }
+    public void meth37365() { }
+    public void meth37366() { }
+    public void meth37367() { }
+    public void meth37368() { }
+    public void meth37369() { }
+    public void meth37370() { }
+    public void meth37371() { }
+    public void meth37372() { }
+    public void meth37373() { }
+    public void meth37374() { }
+    public void meth37375() { }
+    public void meth37376() { }
+    public void meth37377() { }
+    public void meth37378() { }
+    public void meth37379() { }
+    public void meth37380() { }
+    public void meth37381() { }
+    public void meth37382() { }
+    public void meth37383() { }
+    public void meth37384() { }
+    public void meth37385() { }
+    public void meth37386() { }
+    public void meth37387() { }
+    public void meth37388() { }
+    public void meth37389() { }
+    public void meth37390() { }
+    public void meth37391() { }
+    public void meth37392() { }
+    public void meth37393() { }
+    public void meth37394() { }
+    public void meth37395() { }
+    public void meth37396() { }
+    public void meth37397() { }
+    public void meth37398() { }
+    public void meth37399() { }
+    public void meth37400() { }
+    public void meth37401() { }
+    public void meth37402() { }
+    public void meth37403() { }
+    public void meth37404() { }
+    public void meth37405() { }
+    public void meth37406() { }
+    public void meth37407() { }
+    public void meth37408() { }
+    public void meth37409() { }
+    public void meth37410() { }
+    public void meth37411() { }
+    public void meth37412() { }
+    public void meth37413() { }
+    public void meth37414() { }
+    public void meth37415() { }
+    public void meth37416() { }
+    public void meth37417() { }
+    public void meth37418() { }
+    public void meth37419() { }
+    public void meth37420() { }
+    public void meth37421() { }
+    public void meth37422() { }
+    public void meth37423() { }
+    public void meth37424() { }
+    public void meth37425() { }
+    public void meth37426() { }
+    public void meth37427() { }
+    public void meth37428() { }
+    public void meth37429() { }
+    public void meth37430() { }
+    public void meth37431() { }
+    public void meth37432() { }
+    public void meth37433() { }
+    public void meth37434() { }
+    public void meth37435() { }
+    public void meth37436() { }
+    public void meth37437() { }
+    public void meth37438() { }
+    public void meth37439() { }
+    public void meth37440() { }
+    public void meth37441() { }
+    public void meth37442() { }
+    public void meth37443() { }
+    public void meth37444() { }
+    public void meth37445() { }
+    public void meth37446() { }
+    public void meth37447() { }
+    public void meth37448() { }
+    public void meth37449() { }
+    public void meth37450() { }
+    public void meth37451() { }
+    public void meth37452() { }
+    public void meth37453() { }
+    public void meth37454() { }
+    public void meth37455() { }
+    public void meth37456() { }
+    public void meth37457() { }
+    public void meth37458() { }
+    public void meth37459() { }
+    public void meth37460() { }
+    public void meth37461() { }
+    public void meth37462() { }
+    public void meth37463() { }
+    public void meth37464() { }
+    public void meth37465() { }
+    public void meth37466() { }
+    public void meth37467() { }
+    public void meth37468() { }
+    public void meth37469() { }
+    public void meth37470() { }
+    public void meth37471() { }
+    public void meth37472() { }
+    public void meth37473() { }
+    public void meth37474() { }
+    public void meth37475() { }
+    public void meth37476() { }
+    public void meth37477() { }
+    public void meth37478() { }
+    public void meth37479() { }
+    public void meth37480() { }
+    public void meth37481() { }
+    public void meth37482() { }
+    public void meth37483() { }
+    public void meth37484() { }
+    public void meth37485() { }
+    public void meth37486() { }
+    public void meth37487() { }
+    public void meth37488() { }
+    public void meth37489() { }
+    public void meth37490() { }
+    public void meth37491() { }
+    public void meth37492() { }
+    public void meth37493() { }
+    public void meth37494() { }
+    public void meth37495() { }
+    public void meth37496() { }
+    public void meth37497() { }
+    public void meth37498() { }
+    public void meth37499() { }
+    public void meth37500() { }
+    public void meth37501() { }
+    public void meth37502() { }
+    public void meth37503() { }
+    public void meth37504() { }
+    public void meth37505() { }
+    public void meth37506() { }
+    public void meth37507() { }
+    public void meth37508() { }
+    public void meth37509() { }
+    public void meth37510() { }
+    public void meth37511() { }
+    public void meth37512() { }
+    public void meth37513() { }
+    public void meth37514() { }
+    public void meth37515() { }
+    public void meth37516() { }
+    public void meth37517() { }
+    public void meth37518() { }
+    public void meth37519() { }
+    public void meth37520() { }
+    public void meth37521() { }
+    public void meth37522() { }
+    public void meth37523() { }
+    public void meth37524() { }
+    public void meth37525() { }
+    public void meth37526() { }
+    public void meth37527() { }
+    public void meth37528() { }
+    public void meth37529() { }
+    public void meth37530() { }
+    public void meth37531() { }
+    public void meth37532() { }
+    public void meth37533() { }
+    public void meth37534() { }
+    public void meth37535() { }
+    public void meth37536() { }
+    public void meth37537() { }
+    public void meth37538() { }
+    public void meth37539() { }
+    public void meth37540() { }
+    public void meth37541() { }
+    public void meth37542() { }
+    public void meth37543() { }
+    public void meth37544() { }
+    public void meth37545() { }
+    public void meth37546() { }
+    public void meth37547() { }
+    public void meth37548() { }
+    public void meth37549() { }
+    public void meth37550() { }
+    public void meth37551() { }
+    public void meth37552() { }
+    public void meth37553() { }
+    public void meth37554() { }
+    public void meth37555() { }
+    public void meth37556() { }
+    public void meth37557() { }
+    public void meth37558() { }
+    public void meth37559() { }
+    public void meth37560() { }
+    public void meth37561() { }
+    public void meth37562() { }
+    public void meth37563() { }
+    public void meth37564() { }
+    public void meth37565() { }
+    public void meth37566() { }
+    public void meth37567() { }
+    public void meth37568() { }
+    public void meth37569() { }
+    public void meth37570() { }
+    public void meth37571() { }
+    public void meth37572() { }
+    public void meth37573() { }
+    public void meth37574() { }
+    public void meth37575() { }
+    public void meth37576() { }
+    public void meth37577() { }
+    public void meth37578() { }
+    public void meth37579() { }
+    public void meth37580() { }
+    public void meth37581() { }
+    public void meth37582() { }
+    public void meth37583() { }
+    public void meth37584() { }
+    public void meth37585() { }
+    public void meth37586() { }
+    public void meth37587() { }
+    public void meth37588() { }
+    public void meth37589() { }
+    public void meth37590() { }
+    public void meth37591() { }
+    public void meth37592() { }
+    public void meth37593() { }
+    public void meth37594() { }
+    public void meth37595() { }
+    public void meth37596() { }
+    public void meth37597() { }
+    public void meth37598() { }
+    public void meth37599() { }
+    public void meth37600() { }
+    public void meth37601() { }
+    public void meth37602() { }
+    public void meth37603() { }
+    public void meth37604() { }
+    public void meth37605() { }
+    public void meth37606() { }
+    public void meth37607() { }
+    public void meth37608() { }
+    public void meth37609() { }
+    public void meth37610() { }
+    public void meth37611() { }
+    public void meth37612() { }
+    public void meth37613() { }
+    public void meth37614() { }
+    public void meth37615() { }
+    public void meth37616() { }
+    public void meth37617() { }
+    public void meth37618() { }
+    public void meth37619() { }
+    public void meth37620() { }
+    public void meth37621() { }
+    public void meth37622() { }
+    public void meth37623() { }
+    public void meth37624() { }
+    public void meth37625() { }
+    public void meth37626() { }
+    public void meth37627() { }
+    public void meth37628() { }
+    public void meth37629() { }
+    public void meth37630() { }
+    public void meth37631() { }
+    public void meth37632() { }
+    public void meth37633() { }
+    public void meth37634() { }
+    public void meth37635() { }
+    public void meth37636() { }
+    public void meth37637() { }
+    public void meth37638() { }
+    public void meth37639() { }
+    public void meth37640() { }
+    public void meth37641() { }
+    public void meth37642() { }
+    public void meth37643() { }
+    public void meth37644() { }
+    public void meth37645() { }
+    public void meth37646() { }
+    public void meth37647() { }
+    public void meth37648() { }
+    public void meth37649() { }
+    public void meth37650() { }
+    public void meth37651() { }
+    public void meth37652() { }
+    public void meth37653() { }
+    public void meth37654() { }
+    public void meth37655() { }
+    public void meth37656() { }
+    public void meth37657() { }
+    public void meth37658() { }
+    public void meth37659() { }
+    public void meth37660() { }
+    public void meth37661() { }
+    public void meth37662() { }
+    public void meth37663() { }
+    public void meth37664() { }
+    public void meth37665() { }
+    public void meth37666() { }
+    public void meth37667() { }
+    public void meth37668() { }
+    public void meth37669() { }
+    public void meth37670() { }
+    public void meth37671() { }
+    public void meth37672() { }
+    public void meth37673() { }
+    public void meth37674() { }
+    public void meth37675() { }
+    public void meth37676() { }
+    public void meth37677() { }
+    public void meth37678() { }
+    public void meth37679() { }
+    public void meth37680() { }
+    public void meth37681() { }
+    public void meth37682() { }
+    public void meth37683() { }
+    public void meth37684() { }
+    public void meth37685() { }
+    public void meth37686() { }
+    public void meth37687() { }
+    public void meth37688() { }
+    public void meth37689() { }
+    public void meth37690() { }
+    public void meth37691() { }
+    public void meth37692() { }
+    public void meth37693() { }
+    public void meth37694() { }
+    public void meth37695() { }
+    public void meth37696() { }
+    public void meth37697() { }
+    public void meth37698() { }
+    public void meth37699() { }
+    public void meth37700() { }
+    public void meth37701() { }
+    public void meth37702() { }
+    public void meth37703() { }
+    public void meth37704() { }
+    public void meth37705() { }
+    public void meth37706() { }
+    public void meth37707() { }
+    public void meth37708() { }
+    public void meth37709() { }
+    public void meth37710() { }
+    public void meth37711() { }
+    public void meth37712() { }
+    public void meth37713() { }
+    public void meth37714() { }
+    public void meth37715() { }
+    public void meth37716() { }
+    public void meth37717() { }
+    public void meth37718() { }
+    public void meth37719() { }
+    public void meth37720() { }
+    public void meth37721() { }
+    public void meth37722() { }
+    public void meth37723() { }
+    public void meth37724() { }
+    public void meth37725() { }
+    public void meth37726() { }
+    public void meth37727() { }
+    public void meth37728() { }
+    public void meth37729() { }
+    public void meth37730() { }
+    public void meth37731() { }
+    public void meth37732() { }
+    public void meth37733() { }
+    public void meth37734() { }
+    public void meth37735() { }
+    public void meth37736() { }
+    public void meth37737() { }
+    public void meth37738() { }
+    public void meth37739() { }
+    public void meth37740() { }
+    public void meth37741() { }
+    public void meth37742() { }
+    public void meth37743() { }
+    public void meth37744() { }
+    public void meth37745() { }
+    public void meth37746() { }
+    public void meth37747() { }
+    public void meth37748() { }
+    public void meth37749() { }
+    public void meth37750() { }
+    public void meth37751() { }
+    public void meth37752() { }
+    public void meth37753() { }
+    public void meth37754() { }
+    public void meth37755() { }
+    public void meth37756() { }
+    public void meth37757() { }
+    public void meth37758() { }
+    public void meth37759() { }
+    public void meth37760() { }
+    public void meth37761() { }
+    public void meth37762() { }
+    public void meth37763() { }
+    public void meth37764() { }
+    public void meth37765() { }
+    public void meth37766() { }
+    public void meth37767() { }
+    public void meth37768() { }
+    public void meth37769() { }
+    public void meth37770() { }
+    public void meth37771() { }
+    public void meth37772() { }
+    public void meth37773() { }
+    public void meth37774() { }
+    public void meth37775() { }
+    public void meth37776() { }
+    public void meth37777() { }
+    public void meth37778() { }
+    public void meth37779() { }
+    public void meth37780() { }
+    public void meth37781() { }
+    public void meth37782() { }
+    public void meth37783() { }
+    public void meth37784() { }
+    public void meth37785() { }
+    public void meth37786() { }
+    public void meth37787() { }
+    public void meth37788() { }
+    public void meth37789() { }
+    public void meth37790() { }
+    public void meth37791() { }
+    public void meth37792() { }
+    public void meth37793() { }
+    public void meth37794() { }
+    public void meth37795() { }
+    public void meth37796() { }
+    public void meth37797() { }
+    public void meth37798() { }
+    public void meth37799() { }
+    public void meth37800() { }
+    public void meth37801() { }
+    public void meth37802() { }
+    public void meth37803() { }
+    public void meth37804() { }
+    public void meth37805() { }
+    public void meth37806() { }
+    public void meth37807() { }
+    public void meth37808() { }
+    public void meth37809() { }
+    public void meth37810() { }
+    public void meth37811() { }
+    public void meth37812() { }
+    public void meth37813() { }
+    public void meth37814() { }
+    public void meth37815() { }
+    public void meth37816() { }
+    public void meth37817() { }
+    public void meth37818() { }
+    public void meth37819() { }
+    public void meth37820() { }
+    public void meth37821() { }
+    public void meth37822() { }
+    public void meth37823() { }
+    public void meth37824() { }
+    public void meth37825() { }
+    public void meth37826() { }
+    public void meth37827() { }
+    public void meth37828() { }
+    public void meth37829() { }
+    public void meth37830() { }
+    public void meth37831() { }
+    public void meth37832() { }
+    public void meth37833() { }
+    public void meth37834() { }
+    public void meth37835() { }
+    public void meth37836() { }
+    public void meth37837() { }
+    public void meth37838() { }
+    public void meth37839() { }
+    public void meth37840() { }
+    public void meth37841() { }
+    public void meth37842() { }
+    public void meth37843() { }
+    public void meth37844() { }
+    public void meth37845() { }
+    public void meth37846() { }
+    public void meth37847() { }
+    public void meth37848() { }
+    public void meth37849() { }
+    public void meth37850() { }
+    public void meth37851() { }
+    public void meth37852() { }
+    public void meth37853() { }
+    public void meth37854() { }
+    public void meth37855() { }
+    public void meth37856() { }
+    public void meth37857() { }
+    public void meth37858() { }
+    public void meth37859() { }
+    public void meth37860() { }
+    public void meth37861() { }
+    public void meth37862() { }
+    public void meth37863() { }
+    public void meth37864() { }
+    public void meth37865() { }
+    public void meth37866() { }
+    public void meth37867() { }
+    public void meth37868() { }
+    public void meth37869() { }
+    public void meth37870() { }
+    public void meth37871() { }
+    public void meth37872() { }
+    public void meth37873() { }
+    public void meth37874() { }
+    public void meth37875() { }
+    public void meth37876() { }
+    public void meth37877() { }
+    public void meth37878() { }
+    public void meth37879() { }
+    public void meth37880() { }
+    public void meth37881() { }
+    public void meth37882() { }
+    public void meth37883() { }
+    public void meth37884() { }
+    public void meth37885() { }
+    public void meth37886() { }
+    public void meth37887() { }
+    public void meth37888() { }
+    public void meth37889() { }
+    public void meth37890() { }
+    public void meth37891() { }
+    public void meth37892() { }
+    public void meth37893() { }
+    public void meth37894() { }
+    public void meth37895() { }
+    public void meth37896() { }
+    public void meth37897() { }
+    public void meth37898() { }
+    public void meth37899() { }
+    public void meth37900() { }
+    public void meth37901() { }
+    public void meth37902() { }
+    public void meth37903() { }
+    public void meth37904() { }
+    public void meth37905() { }
+    public void meth37906() { }
+    public void meth37907() { }
+    public void meth37908() { }
+    public void meth37909() { }
+    public void meth37910() { }
+    public void meth37911() { }
+    public void meth37912() { }
+    public void meth37913() { }
+    public void meth37914() { }
+    public void meth37915() { }
+    public void meth37916() { }
+    public void meth37917() { }
+    public void meth37918() { }
+    public void meth37919() { }
+    public void meth37920() { }
+    public void meth37921() { }
+    public void meth37922() { }
+    public void meth37923() { }
+    public void meth37924() { }
+    public void meth37925() { }
+    public void meth37926() { }
+    public void meth37927() { }
+    public void meth37928() { }
+    public void meth37929() { }
+    public void meth37930() { }
+    public void meth37931() { }
+    public void meth37932() { }
+    public void meth37933() { }
+    public void meth37934() { }
+    public void meth37935() { }
+    public void meth37936() { }
+    public void meth37937() { }
+    public void meth37938() { }
+    public void meth37939() { }
+    public void meth37940() { }
+    public void meth37941() { }
+    public void meth37942() { }
+    public void meth37943() { }
+    public void meth37944() { }
+    public void meth37945() { }
+    public void meth37946() { }
+    public void meth37947() { }
+    public void meth37948() { }
+    public void meth37949() { }
+    public void meth37950() { }
+    public void meth37951() { }
+    public void meth37952() { }
+    public void meth37953() { }
+    public void meth37954() { }
+    public void meth37955() { }
+    public void meth37956() { }
+    public void meth37957() { }
+    public void meth37958() { }
+    public void meth37959() { }
+    public void meth37960() { }
+    public void meth37961() { }
+    public void meth37962() { }
+    public void meth37963() { }
+    public void meth37964() { }
+    public void meth37965() { }
+    public void meth37966() { }
+    public void meth37967() { }
+    public void meth37968() { }
+    public void meth37969() { }
+    public void meth37970() { }
+    public void meth37971() { }
+    public void meth37972() { }
+    public void meth37973() { }
+    public void meth37974() { }
+    public void meth37975() { }
+    public void meth37976() { }
+    public void meth37977() { }
+    public void meth37978() { }
+    public void meth37979() { }
+    public void meth37980() { }
+    public void meth37981() { }
+    public void meth37982() { }
+    public void meth37983() { }
+    public void meth37984() { }
+    public void meth37985() { }
+    public void meth37986() { }
+    public void meth37987() { }
+    public void meth37988() { }
+    public void meth37989() { }
+    public void meth37990() { }
+    public void meth37991() { }
+    public void meth37992() { }
+    public void meth37993() { }
+    public void meth37994() { }
+    public void meth37995() { }
+    public void meth37996() { }
+    public void meth37997() { }
+    public void meth37998() { }
+    public void meth37999() { }
+    public void meth38000() { }
+    public void meth38001() { }
+    public void meth38002() { }
+    public void meth38003() { }
+    public void meth38004() { }
+    public void meth38005() { }
+    public void meth38006() { }
+    public void meth38007() { }
+    public void meth38008() { }
+    public void meth38009() { }
+    public void meth38010() { }
+    public void meth38011() { }
+    public void meth38012() { }
+    public void meth38013() { }
+    public void meth38014() { }
+    public void meth38015() { }
+    public void meth38016() { }
+    public void meth38017() { }
+    public void meth38018() { }
+    public void meth38019() { }
+    public void meth38020() { }
+    public void meth38021() { }
+    public void meth38022() { }
+    public void meth38023() { }
+    public void meth38024() { }
+    public void meth38025() { }
+    public void meth38026() { }
+    public void meth38027() { }
+    public void meth38028() { }
+    public void meth38029() { }
+    public void meth38030() { }
+    public void meth38031() { }
+    public void meth38032() { }
+    public void meth38033() { }
+    public void meth38034() { }
+    public void meth38035() { }
+    public void meth38036() { }
+    public void meth38037() { }
+    public void meth38038() { }
+    public void meth38039() { }
+    public void meth38040() { }
+    public void meth38041() { }
+    public void meth38042() { }
+    public void meth38043() { }
+    public void meth38044() { }
+    public void meth38045() { }
+    public void meth38046() { }
+    public void meth38047() { }
+    public void meth38048() { }
+    public void meth38049() { }
+    public void meth38050() { }
+    public void meth38051() { }
+    public void meth38052() { }
+    public void meth38053() { }
+    public void meth38054() { }
+    public void meth38055() { }
+    public void meth38056() { }
+    public void meth38057() { }
+    public void meth38058() { }
+    public void meth38059() { }
+    public void meth38060() { }
+    public void meth38061() { }
+    public void meth38062() { }
+    public void meth38063() { }
+    public void meth38064() { }
+    public void meth38065() { }
+    public void meth38066() { }
+    public void meth38067() { }
+    public void meth38068() { }
+    public void meth38069() { }
+    public void meth38070() { }
+    public void meth38071() { }
+    public void meth38072() { }
+    public void meth38073() { }
+    public void meth38074() { }
+    public void meth38075() { }
+    public void meth38076() { }
+    public void meth38077() { }
+    public void meth38078() { }
+    public void meth38079() { }
+    public void meth38080() { }
+    public void meth38081() { }
+    public void meth38082() { }
+    public void meth38083() { }
+    public void meth38084() { }
+    public void meth38085() { }
+    public void meth38086() { }
+    public void meth38087() { }
+    public void meth38088() { }
+    public void meth38089() { }
+    public void meth38090() { }
+    public void meth38091() { }
+    public void meth38092() { }
+    public void meth38093() { }
+    public void meth38094() { }
+    public void meth38095() { }
+    public void meth38096() { }
+    public void meth38097() { }
+    public void meth38098() { }
+    public void meth38099() { }
+    public void meth38100() { }
+    public void meth38101() { }
+    public void meth38102() { }
+    public void meth38103() { }
+    public void meth38104() { }
+    public void meth38105() { }
+    public void meth38106() { }
+    public void meth38107() { }
+    public void meth38108() { }
+    public void meth38109() { }
+    public void meth38110() { }
+    public void meth38111() { }
+    public void meth38112() { }
+    public void meth38113() { }
+    public void meth38114() { }
+    public void meth38115() { }
+    public void meth38116() { }
+    public void meth38117() { }
+    public void meth38118() { }
+    public void meth38119() { }
+    public void meth38120() { }
+    public void meth38121() { }
+    public void meth38122() { }
+    public void meth38123() { }
+    public void meth38124() { }
+    public void meth38125() { }
+    public void meth38126() { }
+    public void meth38127() { }
+    public void meth38128() { }
+    public void meth38129() { }
+    public void meth38130() { }
+    public void meth38131() { }
+    public void meth38132() { }
+    public void meth38133() { }
+    public void meth38134() { }
+    public void meth38135() { }
+    public void meth38136() { }
+    public void meth38137() { }
+    public void meth38138() { }
+    public void meth38139() { }
+    public void meth38140() { }
+    public void meth38141() { }
+    public void meth38142() { }
+    public void meth38143() { }
+    public void meth38144() { }
+    public void meth38145() { }
+    public void meth38146() { }
+    public void meth38147() { }
+    public void meth38148() { }
+    public void meth38149() { }
+    public void meth38150() { }
+    public void meth38151() { }
+    public void meth38152() { }
+    public void meth38153() { }
+    public void meth38154() { }
+    public void meth38155() { }
+    public void meth38156() { }
+    public void meth38157() { }
+    public void meth38158() { }
+    public void meth38159() { }
+    public void meth38160() { }
+    public void meth38161() { }
+    public void meth38162() { }
+    public void meth38163() { }
+    public void meth38164() { }
+    public void meth38165() { }
+    public void meth38166() { }
+    public void meth38167() { }
+    public void meth38168() { }
+    public void meth38169() { }
+    public void meth38170() { }
+    public void meth38171() { }
+    public void meth38172() { }
+    public void meth38173() { }
+    public void meth38174() { }
+    public void meth38175() { }
+    public void meth38176() { }
+    public void meth38177() { }
+    public void meth38178() { }
+    public void meth38179() { }
+    public void meth38180() { }
+    public void meth38181() { }
+    public void meth38182() { }
+    public void meth38183() { }
+    public void meth38184() { }
+    public void meth38185() { }
+    public void meth38186() { }
+    public void meth38187() { }
+    public void meth38188() { }
+    public void meth38189() { }
+    public void meth38190() { }
+    public void meth38191() { }
+    public void meth38192() { }
+    public void meth38193() { }
+    public void meth38194() { }
+    public void meth38195() { }
+    public void meth38196() { }
+    public void meth38197() { }
+    public void meth38198() { }
+    public void meth38199() { }
+    public void meth38200() { }
+    public void meth38201() { }
+    public void meth38202() { }
+    public void meth38203() { }
+    public void meth38204() { }
+    public void meth38205() { }
+    public void meth38206() { }
+    public void meth38207() { }
+    public void meth38208() { }
+    public void meth38209() { }
+    public void meth38210() { }
+    public void meth38211() { }
+    public void meth38212() { }
+    public void meth38213() { }
+    public void meth38214() { }
+    public void meth38215() { }
+    public void meth38216() { }
+    public void meth38217() { }
+    public void meth38218() { }
+    public void meth38219() { }
+    public void meth38220() { }
+    public void meth38221() { }
+    public void meth38222() { }
+    public void meth38223() { }
+    public void meth38224() { }
+    public void meth38225() { }
+    public void meth38226() { }
+    public void meth38227() { }
+    public void meth38228() { }
+    public void meth38229() { }
+    public void meth38230() { }
+    public void meth38231() { }
+    public void meth38232() { }
+    public void meth38233() { }
+    public void meth38234() { }
+    public void meth38235() { }
+    public void meth38236() { }
+    public void meth38237() { }
+    public void meth38238() { }
+    public void meth38239() { }
+    public void meth38240() { }
+    public void meth38241() { }
+    public void meth38242() { }
+    public void meth38243() { }
+    public void meth38244() { }
+    public void meth38245() { }
+    public void meth38246() { }
+    public void meth38247() { }
+    public void meth38248() { }
+    public void meth38249() { }
+    public void meth38250() { }
+    public void meth38251() { }
+    public void meth38252() { }
+    public void meth38253() { }
+    public void meth38254() { }
+    public void meth38255() { }
+    public void meth38256() { }
+    public void meth38257() { }
+    public void meth38258() { }
+    public void meth38259() { }
+    public void meth38260() { }
+    public void meth38261() { }
+    public void meth38262() { }
+    public void meth38263() { }
+    public void meth38264() { }
+    public void meth38265() { }
+    public void meth38266() { }
+    public void meth38267() { }
+    public void meth38268() { }
+    public void meth38269() { }
+    public void meth38270() { }
+    public void meth38271() { }
+    public void meth38272() { }
+    public void meth38273() { }
+    public void meth38274() { }
+    public void meth38275() { }
+    public void meth38276() { }
+    public void meth38277() { }
+    public void meth38278() { }
+    public void meth38279() { }
+    public void meth38280() { }
+    public void meth38281() { }
+    public void meth38282() { }
+    public void meth38283() { }
+    public void meth38284() { }
+    public void meth38285() { }
+    public void meth38286() { }
+    public void meth38287() { }
+    public void meth38288() { }
+    public void meth38289() { }
+    public void meth38290() { }
+    public void meth38291() { }
+    public void meth38292() { }
+    public void meth38293() { }
+    public void meth38294() { }
+    public void meth38295() { }
+    public void meth38296() { }
+    public void meth38297() { }
+    public void meth38298() { }
+    public void meth38299() { }
+    public void meth38300() { }
+    public void meth38301() { }
+    public void meth38302() { }
+    public void meth38303() { }
+    public void meth38304() { }
+    public void meth38305() { }
+    public void meth38306() { }
+    public void meth38307() { }
+    public void meth38308() { }
+    public void meth38309() { }
+    public void meth38310() { }
+    public void meth38311() { }
+    public void meth38312() { }
+    public void meth38313() { }
+    public void meth38314() { }
+    public void meth38315() { }
+    public void meth38316() { }
+    public void meth38317() { }
+    public void meth38318() { }
+    public void meth38319() { }
+    public void meth38320() { }
+    public void meth38321() { }
+    public void meth38322() { }
+    public void meth38323() { }
+    public void meth38324() { }
+    public void meth38325() { }
+    public void meth38326() { }
+    public void meth38327() { }
+    public void meth38328() { }
+    public void meth38329() { }
+    public void meth38330() { }
+    public void meth38331() { }
+    public void meth38332() { }
+    public void meth38333() { }
+    public void meth38334() { }
+    public void meth38335() { }
+    public void meth38336() { }
+    public void meth38337() { }
+    public void meth38338() { }
+    public void meth38339() { }
+    public void meth38340() { }
+    public void meth38341() { }
+    public void meth38342() { }
+    public void meth38343() { }
+    public void meth38344() { }
+    public void meth38345() { }
+    public void meth38346() { }
+    public void meth38347() { }
+    public void meth38348() { }
+    public void meth38349() { }
+    public void meth38350() { }
+    public void meth38351() { }
+    public void meth38352() { }
+    public void meth38353() { }
+    public void meth38354() { }
+    public void meth38355() { }
+    public void meth38356() { }
+    public void meth38357() { }
+    public void meth38358() { }
+    public void meth38359() { }
+    public void meth38360() { }
+    public void meth38361() { }
+    public void meth38362() { }
+    public void meth38363() { }
+    public void meth38364() { }
+    public void meth38365() { }
+    public void meth38366() { }
+    public void meth38367() { }
+    public void meth38368() { }
+    public void meth38369() { }
+    public void meth38370() { }
+    public void meth38371() { }
+    public void meth38372() { }
+    public void meth38373() { }
+    public void meth38374() { }
+    public void meth38375() { }
+    public void meth38376() { }
+    public void meth38377() { }
+    public void meth38378() { }
+    public void meth38379() { }
+    public void meth38380() { }
+    public void meth38381() { }
+    public void meth38382() { }
+    public void meth38383() { }
+    public void meth38384() { }
+    public void meth38385() { }
+    public void meth38386() { }
+    public void meth38387() { }
+    public void meth38388() { }
+    public void meth38389() { }
+    public void meth38390() { }
+    public void meth38391() { }
+    public void meth38392() { }
+    public void meth38393() { }
+    public void meth38394() { }
+    public void meth38395() { }
+    public void meth38396() { }
+    public void meth38397() { }
+    public void meth38398() { }
+    public void meth38399() { }
+    public void meth38400() { }
+    public void meth38401() { }
+    public void meth38402() { }
+    public void meth38403() { }
+    public void meth38404() { }
+    public void meth38405() { }
+    public void meth38406() { }
+    public void meth38407() { }
+    public void meth38408() { }
+    public void meth38409() { }
+    public void meth38410() { }
+    public void meth38411() { }
+    public void meth38412() { }
+    public void meth38413() { }
+    public void meth38414() { }
+    public void meth38415() { }
+    public void meth38416() { }
+    public void meth38417() { }
+    public void meth38418() { }
+    public void meth38419() { }
+    public void meth38420() { }
+    public void meth38421() { }
+    public void meth38422() { }
+    public void meth38423() { }
+    public void meth38424() { }
+    public void meth38425() { }
+    public void meth38426() { }
+    public void meth38427() { }
+    public void meth38428() { }
+    public void meth38429() { }
+    public void meth38430() { }
+    public void meth38431() { }
+    public void meth38432() { }
+    public void meth38433() { }
+    public void meth38434() { }
+    public void meth38435() { }
+    public void meth38436() { }
+    public void meth38437() { }
+    public void meth38438() { }
+    public void meth38439() { }
+    public void meth38440() { }
+    public void meth38441() { }
+    public void meth38442() { }
+    public void meth38443() { }
+    public void meth38444() { }
+    public void meth38445() { }
+    public void meth38446() { }
+    public void meth38447() { }
+    public void meth38448() { }
+    public void meth38449() { }
+    public void meth38450() { }
+    public void meth38451() { }
+    public void meth38452() { }
+    public void meth38453() { }
+    public void meth38454() { }
+    public void meth38455() { }
+    public void meth38456() { }
+    public void meth38457() { }
+    public void meth38458() { }
+    public void meth38459() { }
+    public void meth38460() { }
+    public void meth38461() { }
+    public void meth38462() { }
+    public void meth38463() { }
+    public void meth38464() { }
+    public void meth38465() { }
+    public void meth38466() { }
+    public void meth38467() { }
+    public void meth38468() { }
+    public void meth38469() { }
+    public void meth38470() { }
+    public void meth38471() { }
+    public void meth38472() { }
+    public void meth38473() { }
+    public void meth38474() { }
+    public void meth38475() { }
+    public void meth38476() { }
+    public void meth38477() { }
+    public void meth38478() { }
+    public void meth38479() { }
+    public void meth38480() { }
+    public void meth38481() { }
+    public void meth38482() { }
+    public void meth38483() { }
+    public void meth38484() { }
+    public void meth38485() { }
+    public void meth38486() { }
+    public void meth38487() { }
+    public void meth38488() { }
+    public void meth38489() { }
+    public void meth38490() { }
+    public void meth38491() { }
+    public void meth38492() { }
+    public void meth38493() { }
+    public void meth38494() { }
+    public void meth38495() { }
+    public void meth38496() { }
+    public void meth38497() { }
+    public void meth38498() { }
+    public void meth38499() { }
+    public void meth38500() { }
+    public void meth38501() { }
+    public void meth38502() { }
+    public void meth38503() { }
+    public void meth38504() { }
+    public void meth38505() { }
+    public void meth38506() { }
+    public void meth38507() { }
+    public void meth38508() { }
+    public void meth38509() { }
+    public void meth38510() { }
+    public void meth38511() { }
+    public void meth38512() { }
+    public void meth38513() { }
+    public void meth38514() { }
+    public void meth38515() { }
+    public void meth38516() { }
+    public void meth38517() { }
+    public void meth38518() { }
+    public void meth38519() { }
+    public void meth38520() { }
+    public void meth38521() { }
+    public void meth38522() { }
+    public void meth38523() { }
+    public void meth38524() { }
+    public void meth38525() { }
+    public void meth38526() { }
+    public void meth38527() { }
+    public void meth38528() { }
+    public void meth38529() { }
+    public void meth38530() { }
+    public void meth38531() { }
+    public void meth38532() { }
+    public void meth38533() { }
+    public void meth38534() { }
+    public void meth38535() { }
+    public void meth38536() { }
+    public void meth38537() { }
+    public void meth38538() { }
+    public void meth38539() { }
+    public void meth38540() { }
+    public void meth38541() { }
+    public void meth38542() { }
+    public void meth38543() { }
+    public void meth38544() { }
+    public void meth38545() { }
+    public void meth38546() { }
+    public void meth38547() { }
+    public void meth38548() { }
+    public void meth38549() { }
+    public void meth38550() { }
+    public void meth38551() { }
+    public void meth38552() { }
+    public void meth38553() { }
+    public void meth38554() { }
+    public void meth38555() { }
+    public void meth38556() { }
+    public void meth38557() { }
+    public void meth38558() { }
+    public void meth38559() { }
+    public void meth38560() { }
+    public void meth38561() { }
+    public void meth38562() { }
+    public void meth38563() { }
+    public void meth38564() { }
+    public void meth38565() { }
+    public void meth38566() { }
+    public void meth38567() { }
+    public void meth38568() { }
+    public void meth38569() { }
+    public void meth38570() { }
+    public void meth38571() { }
+    public void meth38572() { }
+    public void meth38573() { }
+    public void meth38574() { }
+    public void meth38575() { }
+    public void meth38576() { }
+    public void meth38577() { }
+    public void meth38578() { }
+    public void meth38579() { }
+    public void meth38580() { }
+    public void meth38581() { }
+    public void meth38582() { }
+    public void meth38583() { }
+    public void meth38584() { }
+    public void meth38585() { }
+    public void meth38586() { }
+    public void meth38587() { }
+    public void meth38588() { }
+    public void meth38589() { }
+    public void meth38590() { }
+    public void meth38591() { }
+    public void meth38592() { }
+    public void meth38593() { }
+    public void meth38594() { }
+    public void meth38595() { }
+    public void meth38596() { }
+    public void meth38597() { }
+    public void meth38598() { }
+    public void meth38599() { }
+    public void meth38600() { }
+    public void meth38601() { }
+    public void meth38602() { }
+    public void meth38603() { }
+    public void meth38604() { }
+    public void meth38605() { }
+    public void meth38606() { }
+    public void meth38607() { }
+    public void meth38608() { }
+    public void meth38609() { }
+    public void meth38610() { }
+    public void meth38611() { }
+    public void meth38612() { }
+    public void meth38613() { }
+    public void meth38614() { }
+    public void meth38615() { }
+    public void meth38616() { }
+    public void meth38617() { }
+    public void meth38618() { }
+    public void meth38619() { }
+    public void meth38620() { }
+    public void meth38621() { }
+    public void meth38622() { }
+    public void meth38623() { }
+    public void meth38624() { }
+    public void meth38625() { }
+    public void meth38626() { }
+    public void meth38627() { }
+    public void meth38628() { }
+    public void meth38629() { }
+    public void meth38630() { }
+    public void meth38631() { }
+    public void meth38632() { }
+    public void meth38633() { }
+    public void meth38634() { }
+    public void meth38635() { }
+    public void meth38636() { }
+    public void meth38637() { }
+    public void meth38638() { }
+    public void meth38639() { }
+    public void meth38640() { }
+    public void meth38641() { }
+    public void meth38642() { }
+    public void meth38643() { }
+    public void meth38644() { }
+    public void meth38645() { }
+    public void meth38646() { }
+    public void meth38647() { }
+    public void meth38648() { }
+    public void meth38649() { }
+    public void meth38650() { }
+    public void meth38651() { }
+    public void meth38652() { }
+    public void meth38653() { }
+    public void meth38654() { }
+    public void meth38655() { }
+    public void meth38656() { }
+    public void meth38657() { }
+    public void meth38658() { }
+    public void meth38659() { }
+    public void meth38660() { }
+    public void meth38661() { }
+    public void meth38662() { }
+    public void meth38663() { }
+    public void meth38664() { }
+    public void meth38665() { }
+    public void meth38666() { }
+    public void meth38667() { }
+    public void meth38668() { }
+    public void meth38669() { }
+    public void meth38670() { }
+    public void meth38671() { }
+    public void meth38672() { }
+    public void meth38673() { }
+    public void meth38674() { }
+    public void meth38675() { }
+    public void meth38676() { }
+    public void meth38677() { }
+    public void meth38678() { }
+    public void meth38679() { }
+    public void meth38680() { }
+    public void meth38681() { }
+    public void meth38682() { }
+    public void meth38683() { }
+    public void meth38684() { }
+    public void meth38685() { }
+    public void meth38686() { }
+    public void meth38687() { }
+    public void meth38688() { }
+    public void meth38689() { }
+    public void meth38690() { }
+    public void meth38691() { }
+    public void meth38692() { }
+    public void meth38693() { }
+    public void meth38694() { }
+    public void meth38695() { }
+    public void meth38696() { }
+    public void meth38697() { }
+    public void meth38698() { }
+    public void meth38699() { }
+    public void meth38700() { }
+    public void meth38701() { }
+    public void meth38702() { }
+    public void meth38703() { }
+    public void meth38704() { }
+    public void meth38705() { }
+    public void meth38706() { }
+    public void meth38707() { }
+    public void meth38708() { }
+    public void meth38709() { }
+    public void meth38710() { }
+    public void meth38711() { }
+    public void meth38712() { }
+    public void meth38713() { }
+    public void meth38714() { }
+    public void meth38715() { }
+    public void meth38716() { }
+    public void meth38717() { }
+    public void meth38718() { }
+    public void meth38719() { }
+    public void meth38720() { }
+    public void meth38721() { }
+    public void meth38722() { }
+    public void meth38723() { }
+    public void meth38724() { }
+    public void meth38725() { }
+    public void meth38726() { }
+    public void meth38727() { }
+    public void meth38728() { }
+    public void meth38729() { }
+    public void meth38730() { }
+    public void meth38731() { }
+    public void meth38732() { }
+    public void meth38733() { }
+    public void meth38734() { }
+    public void meth38735() { }
+    public void meth38736() { }
+    public void meth38737() { }
+    public void meth38738() { }
+    public void meth38739() { }
+    public void meth38740() { }
+    public void meth38741() { }
+    public void meth38742() { }
+    public void meth38743() { }
+    public void meth38744() { }
+    public void meth38745() { }
+    public void meth38746() { }
+    public void meth38747() { }
+    public void meth38748() { }
+    public void meth38749() { }
+    public void meth38750() { }
+    public void meth38751() { }
+    public void meth38752() { }
+    public void meth38753() { }
+    public void meth38754() { }
+    public void meth38755() { }
+    public void meth38756() { }
+    public void meth38757() { }
+    public void meth38758() { }
+    public void meth38759() { }
+    public void meth38760() { }
+    public void meth38761() { }
+    public void meth38762() { }
+    public void meth38763() { }
+    public void meth38764() { }
+    public void meth38765() { }
+    public void meth38766() { }
+    public void meth38767() { }
+    public void meth38768() { }
+    public void meth38769() { }
+    public void meth38770() { }
+    public void meth38771() { }
+    public void meth38772() { }
+    public void meth38773() { }
+    public void meth38774() { }
+    public void meth38775() { }
+    public void meth38776() { }
+    public void meth38777() { }
+    public void meth38778() { }
+    public void meth38779() { }
+    public void meth38780() { }
+    public void meth38781() { }
+    public void meth38782() { }
+    public void meth38783() { }
+    public void meth38784() { }
+    public void meth38785() { }
+    public void meth38786() { }
+    public void meth38787() { }
+    public void meth38788() { }
+    public void meth38789() { }
+    public void meth38790() { }
+    public void meth38791() { }
+    public void meth38792() { }
+    public void meth38793() { }
+    public void meth38794() { }
+    public void meth38795() { }
+    public void meth38796() { }
+    public void meth38797() { }
+    public void meth38798() { }
+    public void meth38799() { }
+    public void meth38800() { }
+    public void meth38801() { }
+    public void meth38802() { }
+    public void meth38803() { }
+    public void meth38804() { }
+    public void meth38805() { }
+    public void meth38806() { }
+    public void meth38807() { }
+    public void meth38808() { }
+    public void meth38809() { }
+    public void meth38810() { }
+    public void meth38811() { }
+    public void meth38812() { }
+    public void meth38813() { }
+    public void meth38814() { }
+    public void meth38815() { }
+    public void meth38816() { }
+    public void meth38817() { }
+    public void meth38818() { }
+    public void meth38819() { }
+    public void meth38820() { }
+    public void meth38821() { }
+    public void meth38822() { }
+    public void meth38823() { }
+    public void meth38824() { }
+    public void meth38825() { }
+    public void meth38826() { }
+    public void meth38827() { }
+    public void meth38828() { }
+    public void meth38829() { }
+    public void meth38830() { }
+    public void meth38831() { }
+    public void meth38832() { }
+    public void meth38833() { }
+    public void meth38834() { }
+    public void meth38835() { }
+    public void meth38836() { }
+    public void meth38837() { }
+    public void meth38838() { }
+    public void meth38839() { }
+    public void meth38840() { }
+    public void meth38841() { }
+    public void meth38842() { }
+    public void meth38843() { }
+    public void meth38844() { }
+    public void meth38845() { }
+    public void meth38846() { }
+    public void meth38847() { }
+    public void meth38848() { }
+    public void meth38849() { }
+    public void meth38850() { }
+    public void meth38851() { }
+    public void meth38852() { }
+    public void meth38853() { }
+    public void meth38854() { }
+    public void meth38855() { }
+    public void meth38856() { }
+    public void meth38857() { }
+    public void meth38858() { }
+    public void meth38859() { }
+    public void meth38860() { }
+    public void meth38861() { }
+    public void meth38862() { }
+    public void meth38863() { }
+    public void meth38864() { }
+    public void meth38865() { }
+    public void meth38866() { }
+    public void meth38867() { }
+    public void meth38868() { }
+    public void meth38869() { }
+    public void meth38870() { }
+    public void meth38871() { }
+    public void meth38872() { }
+    public void meth38873() { }
+    public void meth38874() { }
+    public void meth38875() { }
+    public void meth38876() { }
+    public void meth38877() { }
+    public void meth38878() { }
+    public void meth38879() { }
+    public void meth38880() { }
+    public void meth38881() { }
+    public void meth38882() { }
+    public void meth38883() { }
+    public void meth38884() { }
+    public void meth38885() { }
+    public void meth38886() { }
+    public void meth38887() { }
+    public void meth38888() { }
+    public void meth38889() { }
+    public void meth38890() { }
+    public void meth38891() { }
+    public void meth38892() { }
+    public void meth38893() { }
+    public void meth38894() { }
+    public void meth38895() { }
+    public void meth38896() { }
+    public void meth38897() { }
+    public void meth38898() { }
+    public void meth38899() { }
+    public void meth38900() { }
+    public void meth38901() { }
+    public void meth38902() { }
+    public void meth38903() { }
+    public void meth38904() { }
+    public void meth38905() { }
+    public void meth38906() { }
+    public void meth38907() { }
+    public void meth38908() { }
+    public void meth38909() { }
+    public void meth38910() { }
+    public void meth38911() { }
+    public void meth38912() { }
+    public void meth38913() { }
+    public void meth38914() { }
+    public void meth38915() { }
+    public void meth38916() { }
+    public void meth38917() { }
+    public void meth38918() { }
+    public void meth38919() { }
+    public void meth38920() { }
+    public void meth38921() { }
+    public void meth38922() { }
+    public void meth38923() { }
+    public void meth38924() { }
+    public void meth38925() { }
+    public void meth38926() { }
+    public void meth38927() { }
+    public void meth38928() { }
+    public void meth38929() { }
+    public void meth38930() { }
+    public void meth38931() { }
+    public void meth38932() { }
+    public void meth38933() { }
+    public void meth38934() { }
+    public void meth38935() { }
+    public void meth38936() { }
+    public void meth38937() { }
+    public void meth38938() { }
+    public void meth38939() { }
+    public void meth38940() { }
+    public void meth38941() { }
+    public void meth38942() { }
+    public void meth38943() { }
+    public void meth38944() { }
+    public void meth38945() { }
+    public void meth38946() { }
+    public void meth38947() { }
+    public void meth38948() { }
+    public void meth38949() { }
+    public void meth38950() { }
+    public void meth38951() { }
+    public void meth38952() { }
+    public void meth38953() { }
+    public void meth38954() { }
+    public void meth38955() { }
+    public void meth38956() { }
+    public void meth38957() { }
+    public void meth38958() { }
+    public void meth38959() { }
+    public void meth38960() { }
+    public void meth38961() { }
+    public void meth38962() { }
+    public void meth38963() { }
+    public void meth38964() { }
+    public void meth38965() { }
+    public void meth38966() { }
+    public void meth38967() { }
+    public void meth38968() { }
+    public void meth38969() { }
+    public void meth38970() { }
+    public void meth38971() { }
+    public void meth38972() { }
+    public void meth38973() { }
+    public void meth38974() { }
+    public void meth38975() { }
+    public void meth38976() { }
+    public void meth38977() { }
+    public void meth38978() { }
+    public void meth38979() { }
+    public void meth38980() { }
+    public void meth38981() { }
+    public void meth38982() { }
+    public void meth38983() { }
+    public void meth38984() { }
+    public void meth38985() { }
+    public void meth38986() { }
+    public void meth38987() { }
+    public void meth38988() { }
+    public void meth38989() { }
+    public void meth38990() { }
+    public void meth38991() { }
+    public void meth38992() { }
+    public void meth38993() { }
+    public void meth38994() { }
+    public void meth38995() { }
+    public void meth38996() { }
+    public void meth38997() { }
+    public void meth38998() { }
+    public void meth38999() { }
+    public void meth39000() { }
+    public void meth39001() { }
+    public void meth39002() { }
+    public void meth39003() { }
+    public void meth39004() { }
+    public void meth39005() { }
+    public void meth39006() { }
+    public void meth39007() { }
+    public void meth39008() { }
+    public void meth39009() { }
+    public void meth39010() { }
+    public void meth39011() { }
+    public void meth39012() { }
+    public void meth39013() { }
+    public void meth39014() { }
+    public void meth39015() { }
+    public void meth39016() { }
+    public void meth39017() { }
+    public void meth39018() { }
+    public void meth39019() { }
+    public void meth39020() { }
+    public void meth39021() { }
+    public void meth39022() { }
+    public void meth39023() { }
+    public void meth39024() { }
+    public void meth39025() { }
+    public void meth39026() { }
+    public void meth39027() { }
+    public void meth39028() { }
+    public void meth39029() { }
+    public void meth39030() { }
+    public void meth39031() { }
+    public void meth39032() { }
+    public void meth39033() { }
+    public void meth39034() { }
+    public void meth39035() { }
+    public void meth39036() { }
+    public void meth39037() { }
+    public void meth39038() { }
+    public void meth39039() { }
+    public void meth39040() { }
+    public void meth39041() { }
+    public void meth39042() { }
+    public void meth39043() { }
+    public void meth39044() { }
+    public void meth39045() { }
+    public void meth39046() { }
+    public void meth39047() { }
+    public void meth39048() { }
+    public void meth39049() { }
+    public void meth39050() { }
+    public void meth39051() { }
+    public void meth39052() { }
+    public void meth39053() { }
+    public void meth39054() { }
+    public void meth39055() { }
+    public void meth39056() { }
+    public void meth39057() { }
+    public void meth39058() { }
+    public void meth39059() { }
+    public void meth39060() { }
+    public void meth39061() { }
+    public void meth39062() { }
+    public void meth39063() { }
+    public void meth39064() { }
+    public void meth39065() { }
+    public void meth39066() { }
+    public void meth39067() { }
+    public void meth39068() { }
+    public void meth39069() { }
+    public void meth39070() { }
+    public void meth39071() { }
+    public void meth39072() { }
+    public void meth39073() { }
+    public void meth39074() { }
+    public void meth39075() { }
+    public void meth39076() { }
+    public void meth39077() { }
+    public void meth39078() { }
+    public void meth39079() { }
+    public void meth39080() { }
+    public void meth39081() { }
+    public void meth39082() { }
+    public void meth39083() { }
+    public void meth39084() { }
+    public void meth39085() { }
+    public void meth39086() { }
+    public void meth39087() { }
+    public void meth39088() { }
+    public void meth39089() { }
+    public void meth39090() { }
+    public void meth39091() { }
+    public void meth39092() { }
+    public void meth39093() { }
+    public void meth39094() { }
+    public void meth39095() { }
+    public void meth39096() { }
+    public void meth39097() { }
+    public void meth39098() { }
+    public void meth39099() { }
+    public void meth39100() { }
+    public void meth39101() { }
+    public void meth39102() { }
+    public void meth39103() { }
+    public void meth39104() { }
+    public void meth39105() { }
+    public void meth39106() { }
+    public void meth39107() { }
+    public void meth39108() { }
+    public void meth39109() { }
+    public void meth39110() { }
+    public void meth39111() { }
+    public void meth39112() { }
+    public void meth39113() { }
+    public void meth39114() { }
+    public void meth39115() { }
+    public void meth39116() { }
+    public void meth39117() { }
+    public void meth39118() { }
+    public void meth39119() { }
+    public void meth39120() { }
+    public void meth39121() { }
+    public void meth39122() { }
+    public void meth39123() { }
+    public void meth39124() { }
+    public void meth39125() { }
+    public void meth39126() { }
+    public void meth39127() { }
+    public void meth39128() { }
+    public void meth39129() { }
+    public void meth39130() { }
+    public void meth39131() { }
+    public void meth39132() { }
+    public void meth39133() { }
+    public void meth39134() { }
+    public void meth39135() { }
+    public void meth39136() { }
+    public void meth39137() { }
+    public void meth39138() { }
+    public void meth39139() { }
+    public void meth39140() { }
+    public void meth39141() { }
+    public void meth39142() { }
+    public void meth39143() { }
+    public void meth39144() { }
+    public void meth39145() { }
+    public void meth39146() { }
+    public void meth39147() { }
+    public void meth39148() { }
+    public void meth39149() { }
+    public void meth39150() { }
+    public void meth39151() { }
+    public void meth39152() { }
+    public void meth39153() { }
+    public void meth39154() { }
+    public void meth39155() { }
+    public void meth39156() { }
+    public void meth39157() { }
+    public void meth39158() { }
+    public void meth39159() { }
+    public void meth39160() { }
+    public void meth39161() { }
+    public void meth39162() { }
+    public void meth39163() { }
+    public void meth39164() { }
+    public void meth39165() { }
+    public void meth39166() { }
+    public void meth39167() { }
+    public void meth39168() { }
+    public void meth39169() { }
+    public void meth39170() { }
+    public void meth39171() { }
+    public void meth39172() { }
+    public void meth39173() { }
+    public void meth39174() { }
+    public void meth39175() { }
+    public void meth39176() { }
+    public void meth39177() { }
+    public void meth39178() { }
+    public void meth39179() { }
+    public void meth39180() { }
+    public void meth39181() { }
+    public void meth39182() { }
+    public void meth39183() { }
+    public void meth39184() { }
+    public void meth39185() { }
+    public void meth39186() { }
+    public void meth39187() { }
+    public void meth39188() { }
+    public void meth39189() { }
+    public void meth39190() { }
+    public void meth39191() { }
+    public void meth39192() { }
+    public void meth39193() { }
+    public void meth39194() { }
+    public void meth39195() { }
+    public void meth39196() { }
+    public void meth39197() { }
+    public void meth39198() { }
+    public void meth39199() { }
+    public void meth39200() { }
+    public void meth39201() { }
+    public void meth39202() { }
+    public void meth39203() { }
+    public void meth39204() { }
+    public void meth39205() { }
+    public void meth39206() { }
+    public void meth39207() { }
+    public void meth39208() { }
+    public void meth39209() { }
+    public void meth39210() { }
+    public void meth39211() { }
+    public void meth39212() { }
+    public void meth39213() { }
+    public void meth39214() { }
+    public void meth39215() { }
+    public void meth39216() { }
+    public void meth39217() { }
+    public void meth39218() { }
+    public void meth39219() { }
+    public void meth39220() { }
+    public void meth39221() { }
+    public void meth39222() { }
+    public void meth39223() { }
+    public void meth39224() { }
+    public void meth39225() { }
+    public void meth39226() { }
+    public void meth39227() { }
+    public void meth39228() { }
+    public void meth39229() { }
+    public void meth39230() { }
+    public void meth39231() { }
+    public void meth39232() { }
+    public void meth39233() { }
+    public void meth39234() { }
+    public void meth39235() { }
+    public void meth39236() { }
+    public void meth39237() { }
+    public void meth39238() { }
+    public void meth39239() { }
+    public void meth39240() { }
+    public void meth39241() { }
+    public void meth39242() { }
+    public void meth39243() { }
+    public void meth39244() { }
+    public void meth39245() { }
+    public void meth39246() { }
+    public void meth39247() { }
+    public void meth39248() { }
+    public void meth39249() { }
+    public void meth39250() { }
+    public void meth39251() { }
+    public void meth39252() { }
+    public void meth39253() { }
+    public void meth39254() { }
+    public void meth39255() { }
+    public void meth39256() { }
+    public void meth39257() { }
+    public void meth39258() { }
+    public void meth39259() { }
+    public void meth39260() { }
+    public void meth39261() { }
+    public void meth39262() { }
+    public void meth39263() { }
+    public void meth39264() { }
+    public void meth39265() { }
+    public void meth39266() { }
+    public void meth39267() { }
+    public void meth39268() { }
+    public void meth39269() { }
+    public void meth39270() { }
+    public void meth39271() { }
+    public void meth39272() { }
+    public void meth39273() { }
+    public void meth39274() { }
+    public void meth39275() { }
+    public void meth39276() { }
+    public void meth39277() { }
+    public void meth39278() { }
+    public void meth39279() { }
+    public void meth39280() { }
+    public void meth39281() { }
+    public void meth39282() { }
+    public void meth39283() { }
+    public void meth39284() { }
+    public void meth39285() { }
+    public void meth39286() { }
+    public void meth39287() { }
+    public void meth39288() { }
+    public void meth39289() { }
+    public void meth39290() { }
+    public void meth39291() { }
+    public void meth39292() { }
+    public void meth39293() { }
+    public void meth39294() { }
+    public void meth39295() { }
+    public void meth39296() { }
+    public void meth39297() { }
+    public void meth39298() { }
+    public void meth39299() { }
+    public void meth39300() { }
+    public void meth39301() { }
+    public void meth39302() { }
+    public void meth39303() { }
+    public void meth39304() { }
+    public void meth39305() { }
+    public void meth39306() { }
+    public void meth39307() { }
+    public void meth39308() { }
+    public void meth39309() { }
+    public void meth39310() { }
+    public void meth39311() { }
+    public void meth39312() { }
+    public void meth39313() { }
+    public void meth39314() { }
+    public void meth39315() { }
+    public void meth39316() { }
+    public void meth39317() { }
+    public void meth39318() { }
+    public void meth39319() { }
+    public void meth39320() { }
+    public void meth39321() { }
+    public void meth39322() { }
+    public void meth39323() { }
+    public void meth39324() { }
+    public void meth39325() { }
+    public void meth39326() { }
+    public void meth39327() { }
+    public void meth39328() { }
+    public void meth39329() { }
+    public void meth39330() { }
+    public void meth39331() { }
+    public void meth39332() { }
+    public void meth39333() { }
+    public void meth39334() { }
+    public void meth39335() { }
+    public void meth39336() { }
+    public void meth39337() { }
+    public void meth39338() { }
+    public void meth39339() { }
+    public void meth39340() { }
+    public void meth39341() { }
+    public void meth39342() { }
+    public void meth39343() { }
+    public void meth39344() { }
+    public void meth39345() { }
+    public void meth39346() { }
+    public void meth39347() { }
+    public void meth39348() { }
+    public void meth39349() { }
+    public void meth39350() { }
+    public void meth39351() { }
+    public void meth39352() { }
+    public void meth39353() { }
+    public void meth39354() { }
+    public void meth39355() { }
+    public void meth39356() { }
+    public void meth39357() { }
+    public void meth39358() { }
+    public void meth39359() { }
+    public void meth39360() { }
+    public void meth39361() { }
+    public void meth39362() { }
+    public void meth39363() { }
+    public void meth39364() { }
+    public void meth39365() { }
+    public void meth39366() { }
+    public void meth39367() { }
+    public void meth39368() { }
+    public void meth39369() { }
+    public void meth39370() { }
+    public void meth39371() { }
+    public void meth39372() { }
+    public void meth39373() { }
+    public void meth39374() { }
+    public void meth39375() { }
+    public void meth39376() { }
+    public void meth39377() { }
+    public void meth39378() { }
+    public void meth39379() { }
+    public void meth39380() { }
+    public void meth39381() { }
+    public void meth39382() { }
+    public void meth39383() { }
+    public void meth39384() { }
+    public void meth39385() { }
+    public void meth39386() { }
+    public void meth39387() { }
+    public void meth39388() { }
+    public void meth39389() { }
+    public void meth39390() { }
+    public void meth39391() { }
+    public void meth39392() { }
+    public void meth39393() { }
+    public void meth39394() { }
+    public void meth39395() { }
+    public void meth39396() { }
+    public void meth39397() { }
+    public void meth39398() { }
+    public void meth39399() { }
+    public void meth39400() { }
+    public void meth39401() { }
+    public void meth39402() { }
+    public void meth39403() { }
+    public void meth39404() { }
+    public void meth39405() { }
+    public void meth39406() { }
+    public void meth39407() { }
+    public void meth39408() { }
+    public void meth39409() { }
+    public void meth39410() { }
+    public void meth39411() { }
+    public void meth39412() { }
+    public void meth39413() { }
+    public void meth39414() { }
+    public void meth39415() { }
+    public void meth39416() { }
+    public void meth39417() { }
+    public void meth39418() { }
+    public void meth39419() { }
+    public void meth39420() { }
+    public void meth39421() { }
+    public void meth39422() { }
+    public void meth39423() { }
+    public void meth39424() { }
+    public void meth39425() { }
+    public void meth39426() { }
+    public void meth39427() { }
+    public void meth39428() { }
+    public void meth39429() { }
+    public void meth39430() { }
+    public void meth39431() { }
+    public void meth39432() { }
+    public void meth39433() { }
+    public void meth39434() { }
+    public void meth39435() { }
+    public void meth39436() { }
+    public void meth39437() { }
+    public void meth39438() { }
+    public void meth39439() { }
+    public void meth39440() { }
+    public void meth39441() { }
+    public void meth39442() { }
+    public void meth39443() { }
+    public void meth39444() { }
+    public void meth39445() { }
+    public void meth39446() { }
+    public void meth39447() { }
+    public void meth39448() { }
+    public void meth39449() { }
+    public void meth39450() { }
+    public void meth39451() { }
+    public void meth39452() { }
+    public void meth39453() { }
+    public void meth39454() { }
+    public void meth39455() { }
+    public void meth39456() { }
+    public void meth39457() { }
+    public void meth39458() { }
+    public void meth39459() { }
+    public void meth39460() { }
+    public void meth39461() { }
+    public void meth39462() { }
+    public void meth39463() { }
+    public void meth39464() { }
+    public void meth39465() { }
+    public void meth39466() { }
+    public void meth39467() { }
+    public void meth39468() { }
+    public void meth39469() { }
+    public void meth39470() { }
+    public void meth39471() { }
+    public void meth39472() { }
+    public void meth39473() { }
+    public void meth39474() { }
+    public void meth39475() { }
+    public void meth39476() { }
+    public void meth39477() { }
+    public void meth39478() { }
+    public void meth39479() { }
+    public void meth39480() { }
+    public void meth39481() { }
+    public void meth39482() { }
+    public void meth39483() { }
+    public void meth39484() { }
+    public void meth39485() { }
+    public void meth39486() { }
+    public void meth39487() { }
+    public void meth39488() { }
+    public void meth39489() { }
+    public void meth39490() { }
+    public void meth39491() { }
+    public void meth39492() { }
+    public void meth39493() { }
+    public void meth39494() { }
+    public void meth39495() { }
+    public void meth39496() { }
+    public void meth39497() { }
+    public void meth39498() { }
+    public void meth39499() { }
+    public void meth39500() { }
+    public void meth39501() { }
+    public void meth39502() { }
+    public void meth39503() { }
+    public void meth39504() { }
+    public void meth39505() { }
+    public void meth39506() { }
+    public void meth39507() { }
+    public void meth39508() { }
+    public void meth39509() { }
+    public void meth39510() { }
+    public void meth39511() { }
+    public void meth39512() { }
+    public void meth39513() { }
+    public void meth39514() { }
+    public void meth39515() { }
+    public void meth39516() { }
+    public void meth39517() { }
+    public void meth39518() { }
+    public void meth39519() { }
+    public void meth39520() { }
+    public void meth39521() { }
+    public void meth39522() { }
+    public void meth39523() { }
+    public void meth39524() { }
+    public void meth39525() { }
+    public void meth39526() { }
+    public void meth39527() { }
+    public void meth39528() { }
+    public void meth39529() { }
+    public void meth39530() { }
+    public void meth39531() { }
+    public void meth39532() { }
+    public void meth39533() { }
+    public void meth39534() { }
+    public void meth39535() { }
+    public void meth39536() { }
+    public void meth39537() { }
+    public void meth39538() { }
+    public void meth39539() { }
+    public void meth39540() { }
+    public void meth39541() { }
+    public void meth39542() { }
+    public void meth39543() { }
+    public void meth39544() { }
+    public void meth39545() { }
+    public void meth39546() { }
+    public void meth39547() { }
+    public void meth39548() { }
+    public void meth39549() { }
+    public void meth39550() { }
+    public void meth39551() { }
+    public void meth39552() { }
+    public void meth39553() { }
+    public void meth39554() { }
+    public void meth39555() { }
+    public void meth39556() { }
+    public void meth39557() { }
+    public void meth39558() { }
+    public void meth39559() { }
+    public void meth39560() { }
+    public void meth39561() { }
+    public void meth39562() { }
+    public void meth39563() { }
+    public void meth39564() { }
+    public void meth39565() { }
+    public void meth39566() { }
+    public void meth39567() { }
+    public void meth39568() { }
+    public void meth39569() { }
+    public void meth39570() { }
+    public void meth39571() { }
+    public void meth39572() { }
+    public void meth39573() { }
+    public void meth39574() { }
+    public void meth39575() { }
+    public void meth39576() { }
+    public void meth39577() { }
+    public void meth39578() { }
+    public void meth39579() { }
+    public void meth39580() { }
+    public void meth39581() { }
+    public void meth39582() { }
+    public void meth39583() { }
+    public void meth39584() { }
+    public void meth39585() { }
+    public void meth39586() { }
+    public void meth39587() { }
+    public void meth39588() { }
+    public void meth39589() { }
+    public void meth39590() { }
+    public void meth39591() { }
+    public void meth39592() { }
+    public void meth39593() { }
+    public void meth39594() { }
+    public void meth39595() { }
+    public void meth39596() { }
+    public void meth39597() { }
+    public void meth39598() { }
+    public void meth39599() { }
+    public void meth39600() { }
+    public void meth39601() { }
+    public void meth39602() { }
+    public void meth39603() { }
+    public void meth39604() { }
+    public void meth39605() { }
+    public void meth39606() { }
+    public void meth39607() { }
+    public void meth39608() { }
+    public void meth39609() { }
+    public void meth39610() { }
+    public void meth39611() { }
+    public void meth39612() { }
+    public void meth39613() { }
+    public void meth39614() { }
+    public void meth39615() { }
+    public void meth39616() { }
+    public void meth39617() { }
+    public void meth39618() { }
+    public void meth39619() { }
+    public void meth39620() { }
+    public void meth39621() { }
+    public void meth39622() { }
+    public void meth39623() { }
+    public void meth39624() { }
+    public void meth39625() { }
+    public void meth39626() { }
+    public void meth39627() { }
+    public void meth39628() { }
+    public void meth39629() { }
+    public void meth39630() { }
+    public void meth39631() { }
+    public void meth39632() { }
+    public void meth39633() { }
+    public void meth39634() { }
+    public void meth39635() { }
+    public void meth39636() { }
+    public void meth39637() { }
+    public void meth39638() { }
+    public void meth39639() { }
+    public void meth39640() { }
+    public void meth39641() { }
+    public void meth39642() { }
+    public void meth39643() { }
+    public void meth39644() { }
+    public void meth39645() { }
+    public void meth39646() { }
+    public void meth39647() { }
+    public void meth39648() { }
+    public void meth39649() { }
+    public void meth39650() { }
+    public void meth39651() { }
+    public void meth39652() { }
+    public void meth39653() { }
+    public void meth39654() { }
+    public void meth39655() { }
+    public void meth39656() { }
+    public void meth39657() { }
+    public void meth39658() { }
+    public void meth39659() { }
+    public void meth39660() { }
+    public void meth39661() { }
+    public void meth39662() { }
+    public void meth39663() { }
+    public void meth39664() { }
+    public void meth39665() { }
+    public void meth39666() { }
+    public void meth39667() { }
+    public void meth39668() { }
+    public void meth39669() { }
+    public void meth39670() { }
+    public void meth39671() { }
+    public void meth39672() { }
+    public void meth39673() { }
+    public void meth39674() { }
+    public void meth39675() { }
+    public void meth39676() { }
+    public void meth39677() { }
+    public void meth39678() { }
+    public void meth39679() { }
+    public void meth39680() { }
+    public void meth39681() { }
+    public void meth39682() { }
+    public void meth39683() { }
+    public void meth39684() { }
+    public void meth39685() { }
+    public void meth39686() { }
+    public void meth39687() { }
+    public void meth39688() { }
+    public void meth39689() { }
+    public void meth39690() { }
+    public void meth39691() { }
+    public void meth39692() { }
+    public void meth39693() { }
+    public void meth39694() { }
+    public void meth39695() { }
+    public void meth39696() { }
+    public void meth39697() { }
+    public void meth39698() { }
+    public void meth39699() { }
+    public void meth39700() { }
+    public void meth39701() { }
+    public void meth39702() { }
+    public void meth39703() { }
+    public void meth39704() { }
+    public void meth39705() { }
+    public void meth39706() { }
+    public void meth39707() { }
+    public void meth39708() { }
+    public void meth39709() { }
+    public void meth39710() { }
+    public void meth39711() { }
+    public void meth39712() { }
+    public void meth39713() { }
+    public void meth39714() { }
+    public void meth39715() { }
+    public void meth39716() { }
+    public void meth39717() { }
+    public void meth39718() { }
+    public void meth39719() { }
+    public void meth39720() { }
+    public void meth39721() { }
+    public void meth39722() { }
+    public void meth39723() { }
+    public void meth39724() { }
+    public void meth39725() { }
+    public void meth39726() { }
+    public void meth39727() { }
+    public void meth39728() { }
+    public void meth39729() { }
+    public void meth39730() { }
+    public void meth39731() { }
+    public void meth39732() { }
+    public void meth39733() { }
+    public void meth39734() { }
+    public void meth39735() { }
+    public void meth39736() { }
+    public void meth39737() { }
+    public void meth39738() { }
+    public void meth39739() { }
+    public void meth39740() { }
+    public void meth39741() { }
+    public void meth39742() { }
+    public void meth39743() { }
+    public void meth39744() { }
+    public void meth39745() { }
+    public void meth39746() { }
+    public void meth39747() { }
+    public void meth39748() { }
+    public void meth39749() { }
+    public void meth39750() { }
+    public void meth39751() { }
+    public void meth39752() { }
+    public void meth39753() { }
+    public void meth39754() { }
+    public void meth39755() { }
+    public void meth39756() { }
+    public void meth39757() { }
+    public void meth39758() { }
+    public void meth39759() { }
+    public void meth39760() { }
+    public void meth39761() { }
+    public void meth39762() { }
+    public void meth39763() { }
+    public void meth39764() { }
+    public void meth39765() { }
+    public void meth39766() { }
+    public void meth39767() { }
+    public void meth39768() { }
+    public void meth39769() { }
+    public void meth39770() { }
+    public void meth39771() { }
+    public void meth39772() { }
+    public void meth39773() { }
+    public void meth39774() { }
+    public void meth39775() { }
+    public void meth39776() { }
+    public void meth39777() { }
+    public void meth39778() { }
+    public void meth39779() { }
+    public void meth39780() { }
+    public void meth39781() { }
+    public void meth39782() { }
+    public void meth39783() { }
+    public void meth39784() { }
+    public void meth39785() { }
+    public void meth39786() { }
+    public void meth39787() { }
+    public void meth39788() { }
+    public void meth39789() { }
+    public void meth39790() { }
+    public void meth39791() { }
+    public void meth39792() { }
+    public void meth39793() { }
+    public void meth39794() { }
+    public void meth39795() { }
+    public void meth39796() { }
+    public void meth39797() { }
+    public void meth39798() { }
+    public void meth39799() { }
+    public void meth39800() { }
+    public void meth39801() { }
+    public void meth39802() { }
+    public void meth39803() { }
+    public void meth39804() { }
+    public void meth39805() { }
+    public void meth39806() { }
+    public void meth39807() { }
+    public void meth39808() { }
+    public void meth39809() { }
+    public void meth39810() { }
+    public void meth39811() { }
+    public void meth39812() { }
+    public void meth39813() { }
+    public void meth39814() { }
+    public void meth39815() { }
+    public void meth39816() { }
+    public void meth39817() { }
+    public void meth39818() { }
+    public void meth39819() { }
+    public void meth39820() { }
+    public void meth39821() { }
+    public void meth39822() { }
+    public void meth39823() { }
+    public void meth39824() { }
+    public void meth39825() { }
+    public void meth39826() { }
+    public void meth39827() { }
+    public void meth39828() { }
+    public void meth39829() { }
+    public void meth39830() { }
+    public void meth39831() { }
+    public void meth39832() { }
+    public void meth39833() { }
+    public void meth39834() { }
+    public void meth39835() { }
+    public void meth39836() { }
+    public void meth39837() { }
+    public void meth39838() { }
+    public void meth39839() { }
+    public void meth39840() { }
+    public void meth39841() { }
+    public void meth39842() { }
+    public void meth39843() { }
+    public void meth39844() { }
+    public void meth39845() { }
+    public void meth39846() { }
+    public void meth39847() { }
+    public void meth39848() { }
+    public void meth39849() { }
+    public void meth39850() { }
+    public void meth39851() { }
+    public void meth39852() { }
+    public void meth39853() { }
+    public void meth39854() { }
+    public void meth39855() { }
+    public void meth39856() { }
+    public void meth39857() { }
+    public void meth39858() { }
+    public void meth39859() { }
+    public void meth39860() { }
+    public void meth39861() { }
+    public void meth39862() { }
+    public void meth39863() { }
+    public void meth39864() { }
+    public void meth39865() { }
+    public void meth39866() { }
+    public void meth39867() { }
+    public void meth39868() { }
+    public void meth39869() { }
+    public void meth39870() { }
+    public void meth39871() { }
+    public void meth39872() { }
+    public void meth39873() { }
+    public void meth39874() { }
+    public void meth39875() { }
+    public void meth39876() { }
+    public void meth39877() { }
+    public void meth39878() { }
+    public void meth39879() { }
+    public void meth39880() { }
+    public void meth39881() { }
+    public void meth39882() { }
+    public void meth39883() { }
+    public void meth39884() { }
+    public void meth39885() { }
+    public void meth39886() { }
+    public void meth39887() { }
+    public void meth39888() { }
+    public void meth39889() { }
+    public void meth39890() { }
+    public void meth39891() { }
+    public void meth39892() { }
+    public void meth39893() { }
+    public void meth39894() { }
+    public void meth39895() { }
+    public void meth39896() { }
+    public void meth39897() { }
+    public void meth39898() { }
+    public void meth39899() { }
+    public void meth39900() { }
+    public void meth39901() { }
+    public void meth39902() { }
+    public void meth39903() { }
+    public void meth39904() { }
+    public void meth39905() { }
+    public void meth39906() { }
+    public void meth39907() { }
+    public void meth39908() { }
+    public void meth39909() { }
+    public void meth39910() { }
+    public void meth39911() { }
+    public void meth39912() { }
+    public void meth39913() { }
+    public void meth39914() { }
+    public void meth39915() { }
+    public void meth39916() { }
+    public void meth39917() { }
+    public void meth39918() { }
+    public void meth39919() { }
+    public void meth39920() { }
+    public void meth39921() { }
+    public void meth39922() { }
+    public void meth39923() { }
+    public void meth39924() { }
+    public void meth39925() { }
+    public void meth39926() { }
+    public void meth39927() { }
+    public void meth39928() { }
+    public void meth39929() { }
+    public void meth39930() { }
+    public void meth39931() { }
+    public void meth39932() { }
+    public void meth39933() { }
+    public void meth39934() { }
+    public void meth39935() { }
+    public void meth39936() { }
+    public void meth39937() { }
+    public void meth39938() { }
+    public void meth39939() { }
+    public void meth39940() { }
+    public void meth39941() { }
+    public void meth39942() { }
+    public void meth39943() { }
+    public void meth39944() { }
+    public void meth39945() { }
+    public void meth39946() { }
+    public void meth39947() { }
+    public void meth39948() { }
+    public void meth39949() { }
+    public void meth39950() { }
+    public void meth39951() { }
+    public void meth39952() { }
+    public void meth39953() { }
+    public void meth39954() { }
+    public void meth39955() { }
+    public void meth39956() { }
+    public void meth39957() { }
+    public void meth39958() { }
+    public void meth39959() { }
+    public void meth39960() { }
+    public void meth39961() { }
+    public void meth39962() { }
+    public void meth39963() { }
+    public void meth39964() { }
+    public void meth39965() { }
+    public void meth39966() { }
+    public void meth39967() { }
+    public void meth39968() { }
+    public void meth39969() { }
+    public void meth39970() { }
+    public void meth39971() { }
+    public void meth39972() { }
+    public void meth39973() { }
+    public void meth39974() { }
+    public void meth39975() { }
+    public void meth39976() { }
+    public void meth39977() { }
+    public void meth39978() { }
+    public void meth39979() { }
+    public void meth39980() { }
+    public void meth39981() { }
+    public void meth39982() { }
+    public void meth39983() { }
+    public void meth39984() { }
+    public void meth39985() { }
+    public void meth39986() { }
+    public void meth39987() { }
+    public void meth39988() { }
+    public void meth39989() { }
+    public void meth39990() { }
+    public void meth39991() { }
+    public void meth39992() { }
+    public void meth39993() { }
+    public void meth39994() { }
+    public void meth39995() { }
+    public void meth39996() { }
+    public void meth39997() { }
+    public void meth39998() { }
+    public void meth39999() { }
+    public void meth40000() { }
+    public void meth40001() { }
+    public void meth40002() { }
+    public void meth40003() { }
+    public void meth40004() { }
+    public void meth40005() { }
+    public void meth40006() { }
+    public void meth40007() { }
+    public void meth40008() { }
+    public void meth40009() { }
+    public void meth40010() { }
+    public void meth40011() { }
+    public void meth40012() { }
+    public void meth40013() { }
+    public void meth40014() { }
+    public void meth40015() { }
+    public void meth40016() { }
+    public void meth40017() { }
+    public void meth40018() { }
+    public void meth40019() { }
+    public void meth40020() { }
+    public void meth40021() { }
+    public void meth40022() { }
+    public void meth40023() { }
+    public void meth40024() { }
+    public void meth40025() { }
+    public void meth40026() { }
+    public void meth40027() { }
+    public void meth40028() { }
+    public void meth40029() { }
+    public void meth40030() { }
+    public void meth40031() { }
+    public void meth40032() { }
+    public void meth40033() { }
+    public void meth40034() { }
+    public void meth40035() { }
+    public void meth40036() { }
+    public void meth40037() { }
+    public void meth40038() { }
+    public void meth40039() { }
+    public void meth40040() { }
+    public void meth40041() { }
+    public void meth40042() { }
+    public void meth40043() { }
+    public void meth40044() { }
+    public void meth40045() { }
+    public void meth40046() { }
+    public void meth40047() { }
+    public void meth40048() { }
+    public void meth40049() { }
+    public void meth40050() { }
+    public void meth40051() { }
+    public void meth40052() { }
+    public void meth40053() { }
+    public void meth40054() { }
+    public void meth40055() { }
+    public void meth40056() { }
+    public void meth40057() { }
+    public void meth40058() { }
+    public void meth40059() { }
+    public void meth40060() { }
+    public void meth40061() { }
+    public void meth40062() { }
+    public void meth40063() { }
+    public void meth40064() { }
+    public void meth40065() { }
+    public void meth40066() { }
+    public void meth40067() { }
+    public void meth40068() { }
+    public void meth40069() { }
+    public void meth40070() { }
+    public void meth40071() { }
+    public void meth40072() { }
+    public void meth40073() { }
+    public void meth40074() { }
+    public void meth40075() { }
+    public void meth40076() { }
+    public void meth40077() { }
+    public void meth40078() { }
+    public void meth40079() { }
+    public void meth40080() { }
+    public void meth40081() { }
+    public void meth40082() { }
+    public void meth40083() { }
+    public void meth40084() { }
+    public void meth40085() { }
+    public void meth40086() { }
+    public void meth40087() { }
+    public void meth40088() { }
+    public void meth40089() { }
+    public void meth40090() { }
+    public void meth40091() { }
+    public void meth40092() { }
+    public void meth40093() { }
+    public void meth40094() { }
+    public void meth40095() { }
+    public void meth40096() { }
+    public void meth40097() { }
+    public void meth40098() { }
+    public void meth40099() { }
+    public void meth40100() { }
+    public void meth40101() { }
+    public void meth40102() { }
+    public void meth40103() { }
+    public void meth40104() { }
+    public void meth40105() { }
+    public void meth40106() { }
+    public void meth40107() { }
+    public void meth40108() { }
+    public void meth40109() { }
+    public void meth40110() { }
+    public void meth40111() { }
+    public void meth40112() { }
+    public void meth40113() { }
+    public void meth40114() { }
+    public void meth40115() { }
+    public void meth40116() { }
+    public void meth40117() { }
+    public void meth40118() { }
+    public void meth40119() { }
+    public void meth40120() { }
+    public void meth40121() { }
+    public void meth40122() { }
+    public void meth40123() { }
+    public void meth40124() { }
+    public void meth40125() { }
+    public void meth40126() { }
+    public void meth40127() { }
+    public void meth40128() { }
+    public void meth40129() { }
+    public void meth40130() { }
+    public void meth40131() { }
+    public void meth40132() { }
+    public void meth40133() { }
+    public void meth40134() { }
+    public void meth40135() { }
+    public void meth40136() { }
+    public void meth40137() { }
+    public void meth40138() { }
+    public void meth40139() { }
+    public void meth40140() { }
+    public void meth40141() { }
+    public void meth40142() { }
+    public void meth40143() { }
+    public void meth40144() { }
+    public void meth40145() { }
+    public void meth40146() { }
+    public void meth40147() { }
+    public void meth40148() { }
+    public void meth40149() { }
+    public void meth40150() { }
+    public void meth40151() { }
+    public void meth40152() { }
+    public void meth40153() { }
+    public void meth40154() { }
+    public void meth40155() { }
+    public void meth40156() { }
+    public void meth40157() { }
+    public void meth40158() { }
+    public void meth40159() { }
+    public void meth40160() { }
+    public void meth40161() { }
+    public void meth40162() { }
+    public void meth40163() { }
+    public void meth40164() { }
+    public void meth40165() { }
+    public void meth40166() { }
+    public void meth40167() { }
+    public void meth40168() { }
+    public void meth40169() { }
+    public void meth40170() { }
+    public void meth40171() { }
+    public void meth40172() { }
+    public void meth40173() { }
+    public void meth40174() { }
+    public void meth40175() { }
+    public void meth40176() { }
+    public void meth40177() { }
+    public void meth40178() { }
+    public void meth40179() { }
+    public void meth40180() { }
+    public void meth40181() { }
+    public void meth40182() { }
+    public void meth40183() { }
+    public void meth40184() { }
+    public void meth40185() { }
+    public void meth40186() { }
+    public void meth40187() { }
+    public void meth40188() { }
+    public void meth40189() { }
+    public void meth40190() { }
+    public void meth40191() { }
+    public void meth40192() { }
+    public void meth40193() { }
+    public void meth40194() { }
+    public void meth40195() { }
+    public void meth40196() { }
+    public void meth40197() { }
+    public void meth40198() { }
+    public void meth40199() { }
+    public void meth40200() { }
+    public void meth40201() { }
+    public void meth40202() { }
+    public void meth40203() { }
+    public void meth40204() { }
+    public void meth40205() { }
+    public void meth40206() { }
+    public void meth40207() { }
+    public void meth40208() { }
+    public void meth40209() { }
+    public void meth40210() { }
+    public void meth40211() { }
+    public void meth40212() { }
+    public void meth40213() { }
+    public void meth40214() { }
+    public void meth40215() { }
+    public void meth40216() { }
+    public void meth40217() { }
+    public void meth40218() { }
+    public void meth40219() { }
+    public void meth40220() { }
+    public void meth40221() { }
+    public void meth40222() { }
+    public void meth40223() { }
+    public void meth40224() { }
+    public void meth40225() { }
+    public void meth40226() { }
+    public void meth40227() { }
+    public void meth40228() { }
+    public void meth40229() { }
+    public void meth40230() { }
+    public void meth40231() { }
+    public void meth40232() { }
+    public void meth40233() { }
+    public void meth40234() { }
+    public void meth40235() { }
+    public void meth40236() { }
+    public void meth40237() { }
+    public void meth40238() { }
+    public void meth40239() { }
+    public void meth40240() { }
+    public void meth40241() { }
+    public void meth40242() { }
+    public void meth40243() { }
+    public void meth40244() { }
+    public void meth40245() { }
+    public void meth40246() { }
+    public void meth40247() { }
+    public void meth40248() { }
+    public void meth40249() { }
+    public void meth40250() { }
+    public void meth40251() { }
+    public void meth40252() { }
+    public void meth40253() { }
+    public void meth40254() { }
+    public void meth40255() { }
+    public void meth40256() { }
+    public void meth40257() { }
+    public void meth40258() { }
+    public void meth40259() { }
+    public void meth40260() { }
+    public void meth40261() { }
+    public void meth40262() { }
+    public void meth40263() { }
+    public void meth40264() { }
+    public void meth40265() { }
+    public void meth40266() { }
+    public void meth40267() { }
+    public void meth40268() { }
+    public void meth40269() { }
+    public void meth40270() { }
+    public void meth40271() { }
+    public void meth40272() { }
+    public void meth40273() { }
+    public void meth40274() { }
+    public void meth40275() { }
+    public void meth40276() { }
+    public void meth40277() { }
+    public void meth40278() { }
+    public void meth40279() { }
+    public void meth40280() { }
+    public void meth40281() { }
+    public void meth40282() { }
+    public void meth40283() { }
+    public void meth40284() { }
+    public void meth40285() { }
+    public void meth40286() { }
+    public void meth40287() { }
+    public void meth40288() { }
+    public void meth40289() { }
+    public void meth40290() { }
+    public void meth40291() { }
+    public void meth40292() { }
+    public void meth40293() { }
+    public void meth40294() { }
+    public void meth40295() { }
+    public void meth40296() { }
+    public void meth40297() { }
+    public void meth40298() { }
+    public void meth40299() { }
+    public void meth40300() { }
+    public void meth40301() { }
+    public void meth40302() { }
+    public void meth40303() { }
+    public void meth40304() { }
+    public void meth40305() { }
+    public void meth40306() { }
+    public void meth40307() { }
+    public void meth40308() { }
+    public void meth40309() { }
+    public void meth40310() { }
+    public void meth40311() { }
+    public void meth40312() { }
+    public void meth40313() { }
+    public void meth40314() { }
+    public void meth40315() { }
+    public void meth40316() { }
+    public void meth40317() { }
+    public void meth40318() { }
+    public void meth40319() { }
+    public void meth40320() { }
+    public void meth40321() { }
+    public void meth40322() { }
+    public void meth40323() { }
+    public void meth40324() { }
+    public void meth40325() { }
+    public void meth40326() { }
+    public void meth40327() { }
+    public void meth40328() { }
+    public void meth40329() { }
+    public void meth40330() { }
+    public void meth40331() { }
+    public void meth40332() { }
+    public void meth40333() { }
+    public void meth40334() { }
+    public void meth40335() { }
+    public void meth40336() { }
+    public void meth40337() { }
+    public void meth40338() { }
+    public void meth40339() { }
+    public void meth40340() { }
+    public void meth40341() { }
+    public void meth40342() { }
+    public void meth40343() { }
+    public void meth40344() { }
+    public void meth40345() { }
+    public void meth40346() { }
+    public void meth40347() { }
+    public void meth40348() { }
+    public void meth40349() { }
+    public void meth40350() { }
+    public void meth40351() { }
+    public void meth40352() { }
+    public void meth40353() { }
+    public void meth40354() { }
+    public void meth40355() { }
+    public void meth40356() { }
+    public void meth40357() { }
+    public void meth40358() { }
+    public void meth40359() { }
+    public void meth40360() { }
+    public void meth40361() { }
+    public void meth40362() { }
+    public void meth40363() { }
+    public void meth40364() { }
+    public void meth40365() { }
+    public void meth40366() { }
+    public void meth40367() { }
+    public void meth40368() { }
+    public void meth40369() { }
+    public void meth40370() { }
+    public void meth40371() { }
+    public void meth40372() { }
+    public void meth40373() { }
+    public void meth40374() { }
+    public void meth40375() { }
+    public void meth40376() { }
+    public void meth40377() { }
+    public void meth40378() { }
+    public void meth40379() { }
+    public void meth40380() { }
+    public void meth40381() { }
+    public void meth40382() { }
+    public void meth40383() { }
+    public void meth40384() { }
+    public void meth40385() { }
+    public void meth40386() { }
+    public void meth40387() { }
+    public void meth40388() { }
+    public void meth40389() { }
+    public void meth40390() { }
+    public void meth40391() { }
+    public void meth40392() { }
+    public void meth40393() { }
+    public void meth40394() { }
+    public void meth40395() { }
+    public void meth40396() { }
+    public void meth40397() { }
+    public void meth40398() { }
+    public void meth40399() { }
+    public void meth40400() { }
+    public void meth40401() { }
+    public void meth40402() { }
+    public void meth40403() { }
+    public void meth40404() { }
+    public void meth40405() { }
+    public void meth40406() { }
+    public void meth40407() { }
+    public void meth40408() { }
+    public void meth40409() { }
+    public void meth40410() { }
+    public void meth40411() { }
+    public void meth40412() { }
+    public void meth40413() { }
+    public void meth40414() { }
+    public void meth40415() { }
+    public void meth40416() { }
+    public void meth40417() { }
+    public void meth40418() { }
+    public void meth40419() { }
+    public void meth40420() { }
+    public void meth40421() { }
+    public void meth40422() { }
+    public void meth40423() { }
+    public void meth40424() { }
+    public void meth40425() { }
+    public void meth40426() { }
+    public void meth40427() { }
+    public void meth40428() { }
+    public void meth40429() { }
+    public void meth40430() { }
+    public void meth40431() { }
+    public void meth40432() { }
+    public void meth40433() { }
+    public void meth40434() { }
+    public void meth40435() { }
+    public void meth40436() { }
+    public void meth40437() { }
+    public void meth40438() { }
+    public void meth40439() { }
+    public void meth40440() { }
+    public void meth40441() { }
+    public void meth40442() { }
+    public void meth40443() { }
+    public void meth40444() { }
+    public void meth40445() { }
+    public void meth40446() { }
+    public void meth40447() { }
+    public void meth40448() { }
+    public void meth40449() { }
+    public void meth40450() { }
+    public void meth40451() { }
+    public void meth40452() { }
+    public void meth40453() { }
+    public void meth40454() { }
+    public void meth40455() { }
+    public void meth40456() { }
+    public void meth40457() { }
+    public void meth40458() { }
+    public void meth40459() { }
+    public void meth40460() { }
+    public void meth40461() { }
+    public void meth40462() { }
+    public void meth40463() { }
+    public void meth40464() { }
+    public void meth40465() { }
+    public void meth40466() { }
+    public void meth40467() { }
+    public void meth40468() { }
+    public void meth40469() { }
+    public void meth40470() { }
+    public void meth40471() { }
+    public void meth40472() { }
+    public void meth40473() { }
+    public void meth40474() { }
+    public void meth40475() { }
+    public void meth40476() { }
+    public void meth40477() { }
+    public void meth40478() { }
+    public void meth40479() { }
+    public void meth40480() { }
+    public void meth40481() { }
+    public void meth40482() { }
+    public void meth40483() { }
+    public void meth40484() { }
+    public void meth40485() { }
+    public void meth40486() { }
+    public void meth40487() { }
+    public void meth40488() { }
+    public void meth40489() { }
+    public void meth40490() { }
+    public void meth40491() { }
+    public void meth40492() { }
+    public void meth40493() { }
+    public void meth40494() { }
+    public void meth40495() { }
+    public void meth40496() { }
+    public void meth40497() { }
+    public void meth40498() { }
+    public void meth40499() { }
+    public void meth40500() { }
+    public void meth40501() { }
+    public void meth40502() { }
+    public void meth40503() { }
+    public void meth40504() { }
+    public void meth40505() { }
+    public void meth40506() { }
+    public void meth40507() { }
+    public void meth40508() { }
+    public void meth40509() { }
+    public void meth40510() { }
+    public void meth40511() { }
+    public void meth40512() { }
+    public void meth40513() { }
+    public void meth40514() { }
+    public void meth40515() { }
+    public void meth40516() { }
+    public void meth40517() { }
+    public void meth40518() { }
+    public void meth40519() { }
+    public void meth40520() { }
+    public void meth40521() { }
+    public void meth40522() { }
+    public void meth40523() { }
+    public void meth40524() { }
+    public void meth40525() { }
+    public void meth40526() { }
+    public void meth40527() { }
+    public void meth40528() { }
+    public void meth40529() { }
+    public void meth40530() { }
+    public void meth40531() { }
+    public void meth40532() { }
+    public void meth40533() { }
+    public void meth40534() { }
+    public void meth40535() { }
+    public void meth40536() { }
+    public void meth40537() { }
+    public void meth40538() { }
+    public void meth40539() { }
+    public void meth40540() { }
+    public void meth40541() { }
+    public void meth40542() { }
+    public void meth40543() { }
+    public void meth40544() { }
+    public void meth40545() { }
+    public void meth40546() { }
+    public void meth40547() { }
+    public void meth40548() { }
+    public void meth40549() { }
+    public void meth40550() { }
+    public void meth40551() { }
+    public void meth40552() { }
+    public void meth40553() { }
+    public void meth40554() { }
+    public void meth40555() { }
+    public void meth40556() { }
+    public void meth40557() { }
+    public void meth40558() { }
+    public void meth40559() { }
+    public void meth40560() { }
+    public void meth40561() { }
+    public void meth40562() { }
+    public void meth40563() { }
+    public void meth40564() { }
+    public void meth40565() { }
+    public void meth40566() { }
+    public void meth40567() { }
+    public void meth40568() { }
+    public void meth40569() { }
+    public void meth40570() { }
+    public void meth40571() { }
+    public void meth40572() { }
+    public void meth40573() { }
+    public void meth40574() { }
+    public void meth40575() { }
+    public void meth40576() { }
+    public void meth40577() { }
+    public void meth40578() { }
+    public void meth40579() { }
+    public void meth40580() { }
+    public void meth40581() { }
+    public void meth40582() { }
+    public void meth40583() { }
+    public void meth40584() { }
+    public void meth40585() { }
+    public void meth40586() { }
+    public void meth40587() { }
+    public void meth40588() { }
+    public void meth40589() { }
+    public void meth40590() { }
+    public void meth40591() { }
+    public void meth40592() { }
+    public void meth40593() { }
+    public void meth40594() { }
+    public void meth40595() { }
+    public void meth40596() { }
+    public void meth40597() { }
+    public void meth40598() { }
+    public void meth40599() { }
+    public void meth40600() { }
+    public void meth40601() { }
+    public void meth40602() { }
+    public void meth40603() { }
+    public void meth40604() { }
+    public void meth40605() { }
+    public void meth40606() { }
+    public void meth40607() { }
+    public void meth40608() { }
+    public void meth40609() { }
+    public void meth40610() { }
+    public void meth40611() { }
+    public void meth40612() { }
+    public void meth40613() { }
+    public void meth40614() { }
+    public void meth40615() { }
+    public void meth40616() { }
+    public void meth40617() { }
+    public void meth40618() { }
+    public void meth40619() { }
+    public void meth40620() { }
+    public void meth40621() { }
+    public void meth40622() { }
+    public void meth40623() { }
+    public void meth40624() { }
+    public void meth40625() { }
+    public void meth40626() { }
+    public void meth40627() { }
+    public void meth40628() { }
+    public void meth40629() { }
+    public void meth40630() { }
+    public void meth40631() { }
+    public void meth40632() { }
+    public void meth40633() { }
+    public void meth40634() { }
+    public void meth40635() { }
+    public void meth40636() { }
+    public void meth40637() { }
+    public void meth40638() { }
+    public void meth40639() { }
+    public void meth40640() { }
+    public void meth40641() { }
+    public void meth40642() { }
+    public void meth40643() { }
+    public void meth40644() { }
+    public void meth40645() { }
+    public void meth40646() { }
+    public void meth40647() { }
+    public void meth40648() { }
+    public void meth40649() { }
+    public void meth40650() { }
+    public void meth40651() { }
+    public void meth40652() { }
+    public void meth40653() { }
+    public void meth40654() { }
+    public void meth40655() { }
+    public void meth40656() { }
+    public void meth40657() { }
+    public void meth40658() { }
+    public void meth40659() { }
+    public void meth40660() { }
+    public void meth40661() { }
+    public void meth40662() { }
+    public void meth40663() { }
+    public void meth40664() { }
+    public void meth40665() { }
+    public void meth40666() { }
+    public void meth40667() { }
+    public void meth40668() { }
+    public void meth40669() { }
+    public void meth40670() { }
+    public void meth40671() { }
+    public void meth40672() { }
+    public void meth40673() { }
+    public void meth40674() { }
+    public void meth40675() { }
+    public void meth40676() { }
+    public void meth40677() { }
+    public void meth40678() { }
+    public void meth40679() { }
+    public void meth40680() { }
+    public void meth40681() { }
+    public void meth40682() { }
+    public void meth40683() { }
+    public void meth40684() { }
+    public void meth40685() { }
+    public void meth40686() { }
+    public void meth40687() { }
+    public void meth40688() { }
+    public void meth40689() { }
+    public void meth40690() { }
+    public void meth40691() { }
+    public void meth40692() { }
+    public void meth40693() { }
+    public void meth40694() { }
+    public void meth40695() { }
+    public void meth40696() { }
+    public void meth40697() { }
+    public void meth40698() { }
+    public void meth40699() { }
+    public void meth40700() { }
+    public void meth40701() { }
+    public void meth40702() { }
+    public void meth40703() { }
+    public void meth40704() { }
+    public void meth40705() { }
+    public void meth40706() { }
+    public void meth40707() { }
+    public void meth40708() { }
+    public void meth40709() { }
+    public void meth40710() { }
+    public void meth40711() { }
+    public void meth40712() { }
+    public void meth40713() { }
+    public void meth40714() { }
+    public void meth40715() { }
+    public void meth40716() { }
+    public void meth40717() { }
+    public void meth40718() { }
+    public void meth40719() { }
+    public void meth40720() { }
+    public void meth40721() { }
+    public void meth40722() { }
+    public void meth40723() { }
+    public void meth40724() { }
+    public void meth40725() { }
+    public void meth40726() { }
+    public void meth40727() { }
+    public void meth40728() { }
+    public void meth40729() { }
+    public void meth40730() { }
+    public void meth40731() { }
+    public void meth40732() { }
+    public void meth40733() { }
+    public void meth40734() { }
+    public void meth40735() { }
+    public void meth40736() { }
+    public void meth40737() { }
+    public void meth40738() { }
+    public void meth40739() { }
+    public void meth40740() { }
+    public void meth40741() { }
+    public void meth40742() { }
+    public void meth40743() { }
+    public void meth40744() { }
+    public void meth40745() { }
+    public void meth40746() { }
+    public void meth40747() { }
+    public void meth40748() { }
+    public void meth40749() { }
+    public void meth40750() { }
+    public void meth40751() { }
+    public void meth40752() { }
+    public void meth40753() { }
+    public void meth40754() { }
+    public void meth40755() { }
+    public void meth40756() { }
+    public void meth40757() { }
+    public void meth40758() { }
+    public void meth40759() { }
+    public void meth40760() { }
+    public void meth40761() { }
+    public void meth40762() { }
+    public void meth40763() { }
+    public void meth40764() { }
+    public void meth40765() { }
+    public void meth40766() { }
+    public void meth40767() { }
+    public void meth40768() { }
+    public void meth40769() { }
+    public void meth40770() { }
+    public void meth40771() { }
+    public void meth40772() { }
+    public void meth40773() { }
+    public void meth40774() { }
+    public void meth40775() { }
+    public void meth40776() { }
+    public void meth40777() { }
+    public void meth40778() { }
+    public void meth40779() { }
+    public void meth40780() { }
+    public void meth40781() { }
+    public void meth40782() { }
+    public void meth40783() { }
+    public void meth40784() { }
+    public void meth40785() { }
+    public void meth40786() { }
+    public void meth40787() { }
+    public void meth40788() { }
+    public void meth40789() { }
+    public void meth40790() { }
+    public void meth40791() { }
+    public void meth40792() { }
+    public void meth40793() { }
+    public void meth40794() { }
+    public void meth40795() { }
+    public void meth40796() { }
+    public void meth40797() { }
+    public void meth40798() { }
+    public void meth40799() { }
+    public void meth40800() { }
+    public void meth40801() { }
+    public void meth40802() { }
+    public void meth40803() { }
+    public void meth40804() { }
+    public void meth40805() { }
+    public void meth40806() { }
+    public void meth40807() { }
+    public void meth40808() { }
+    public void meth40809() { }
+    public void meth40810() { }
+    public void meth40811() { }
+    public void meth40812() { }
+    public void meth40813() { }
+    public void meth40814() { }
+    public void meth40815() { }
+    public void meth40816() { }
+    public void meth40817() { }
+    public void meth40818() { }
+    public void meth40819() { }
+    public void meth40820() { }
+    public void meth40821() { }
+    public void meth40822() { }
+    public void meth40823() { }
+    public void meth40824() { }
+    public void meth40825() { }
+    public void meth40826() { }
+    public void meth40827() { }
+    public void meth40828() { }
+    public void meth40829() { }
+    public void meth40830() { }
+    public void meth40831() { }
+    public void meth40832() { }
+    public void meth40833() { }
+    public void meth40834() { }
+    public void meth40835() { }
+    public void meth40836() { }
+    public void meth40837() { }
+    public void meth40838() { }
+    public void meth40839() { }
+    public void meth40840() { }
+    public void meth40841() { }
+    public void meth40842() { }
+    public void meth40843() { }
+    public void meth40844() { }
+    public void meth40845() { }
+    public void meth40846() { }
+    public void meth40847() { }
+    public void meth40848() { }
+    public void meth40849() { }
+    public void meth40850() { }
+    public void meth40851() { }
+    public void meth40852() { }
+    public void meth40853() { }
+    public void meth40854() { }
+    public void meth40855() { }
+    public void meth40856() { }
+    public void meth40857() { }
+    public void meth40858() { }
+    public void meth40859() { }
+    public void meth40860() { }
+    public void meth40861() { }
+    public void meth40862() { }
+    public void meth40863() { }
+    public void meth40864() { }
+    public void meth40865() { }
+    public void meth40866() { }
+    public void meth40867() { }
+    public void meth40868() { }
+    public void meth40869() { }
+    public void meth40870() { }
+    public void meth40871() { }
+    public void meth40872() { }
+    public void meth40873() { }
+    public void meth40874() { }
+    public void meth40875() { }
+    public void meth40876() { }
+    public void meth40877() { }
+    public void meth40878() { }
+    public void meth40879() { }
+    public void meth40880() { }
+    public void meth40881() { }
+    public void meth40882() { }
+    public void meth40883() { }
+    public void meth40884() { }
+    public void meth40885() { }
+    public void meth40886() { }
+    public void meth40887() { }
+    public void meth40888() { }
+    public void meth40889() { }
+    public void meth40890() { }
+    public void meth40891() { }
+    public void meth40892() { }
+    public void meth40893() { }
+    public void meth40894() { }
+    public void meth40895() { }
+    public void meth40896() { }
+    public void meth40897() { }
+    public void meth40898() { }
+    public void meth40899() { }
+    public void meth40900() { }
+    public void meth40901() { }
+    public void meth40902() { }
+    public void meth40903() { }
+    public void meth40904() { }
+    public void meth40905() { }
+    public void meth40906() { }
+    public void meth40907() { }
+    public void meth40908() { }
+    public void meth40909() { }
+    public void meth40910() { }
+    public void meth40911() { }
+    public void meth40912() { }
+    public void meth40913() { }
+    public void meth40914() { }
+    public void meth40915() { }
+    public void meth40916() { }
+    public void meth40917() { }
+    public void meth40918() { }
+    public void meth40919() { }
+    public void meth40920() { }
+    public void meth40921() { }
+    public void meth40922() { }
+    public void meth40923() { }
+    public void meth40924() { }
+    public void meth40925() { }
+    public void meth40926() { }
+    public void meth40927() { }
+    public void meth40928() { }
+    public void meth40929() { }
+    public void meth40930() { }
+    public void meth40931() { }
+    public void meth40932() { }
+    public void meth40933() { }
+    public void meth40934() { }
+    public void meth40935() { }
+    public void meth40936() { }
+    public void meth40937() { }
+    public void meth40938() { }
+    public void meth40939() { }
+    public void meth40940() { }
+    public void meth40941() { }
+    public void meth40942() { }
+    public void meth40943() { }
+    public void meth40944() { }
+    public void meth40945() { }
+    public void meth40946() { }
+    public void meth40947() { }
+    public void meth40948() { }
+    public void meth40949() { }
+    public void meth40950() { }
+    public void meth40951() { }
+    public void meth40952() { }
+    public void meth40953() { }
+    public void meth40954() { }
+    public void meth40955() { }
+    public void meth40956() { }
+    public void meth40957() { }
+    public void meth40958() { }
+    public void meth40959() { }
+    public void meth40960() { }
+    public void meth40961() { }
+    public void meth40962() { }
+    public void meth40963() { }
+    public void meth40964() { }
+    public void meth40965() { }
+    public void meth40966() { }
+    public void meth40967() { }
+    public void meth40968() { }
+    public void meth40969() { }
+    public void meth40970() { }
+    public void meth40971() { }
+    public void meth40972() { }
+    public void meth40973() { }
+    public void meth40974() { }
+    public void meth40975() { }
+    public void meth40976() { }
+    public void meth40977() { }
+    public void meth40978() { }
+    public void meth40979() { }
+    public void meth40980() { }
+    public void meth40981() { }
+    public void meth40982() { }
+    public void meth40983() { }
+    public void meth40984() { }
+    public void meth40985() { }
+    public void meth40986() { }
+    public void meth40987() { }
+    public void meth40988() { }
+    public void meth40989() { }
+    public void meth40990() { }
+    public void meth40991() { }
+    public void meth40992() { }
+    public void meth40993() { }
+    public void meth40994() { }
+    public void meth40995() { }
+    public void meth40996() { }
+    public void meth40997() { }
+    public void meth40998() { }
+    public void meth40999() { }
+    public void meth41000() { }
+    public void meth41001() { }
+    public void meth41002() { }
+    public void meth41003() { }
+    public void meth41004() { }
+    public void meth41005() { }
+    public void meth41006() { }
+    public void meth41007() { }
+    public void meth41008() { }
+    public void meth41009() { }
+    public void meth41010() { }
+    public void meth41011() { }
+    public void meth41012() { }
+    public void meth41013() { }
+    public void meth41014() { }
+    public void meth41015() { }
+    public void meth41016() { }
+    public void meth41017() { }
+    public void meth41018() { }
+    public void meth41019() { }
+    public void meth41020() { }
+    public void meth41021() { }
+    public void meth41022() { }
+    public void meth41023() { }
+    public void meth41024() { }
+    public void meth41025() { }
+    public void meth41026() { }
+    public void meth41027() { }
+    public void meth41028() { }
+    public void meth41029() { }
+    public void meth41030() { }
+    public void meth41031() { }
+    public void meth41032() { }
+    public void meth41033() { }
+    public void meth41034() { }
+    public void meth41035() { }
+    public void meth41036() { }
+    public void meth41037() { }
+    public void meth41038() { }
+    public void meth41039() { }
+    public void meth41040() { }
+    public void meth41041() { }
+    public void meth41042() { }
+    public void meth41043() { }
+    public void meth41044() { }
+    public void meth41045() { }
+    public void meth41046() { }
+    public void meth41047() { }
+    public void meth41048() { }
+    public void meth41049() { }
+    public void meth41050() { }
+    public void meth41051() { }
+    public void meth41052() { }
+    public void meth41053() { }
+    public void meth41054() { }
+    public void meth41055() { }
+    public void meth41056() { }
+    public void meth41057() { }
+    public void meth41058() { }
+    public void meth41059() { }
+    public void meth41060() { }
+    public void meth41061() { }
+    public void meth41062() { }
+    public void meth41063() { }
+    public void meth41064() { }
+    public void meth41065() { }
+    public void meth41066() { }
+    public void meth41067() { }
+    public void meth41068() { }
+    public void meth41069() { }
+    public void meth41070() { }
+    public void meth41071() { }
+    public void meth41072() { }
+    public void meth41073() { }
+    public void meth41074() { }
+    public void meth41075() { }
+    public void meth41076() { }
+    public void meth41077() { }
+    public void meth41078() { }
+    public void meth41079() { }
+    public void meth41080() { }
+    public void meth41081() { }
+    public void meth41082() { }
+    public void meth41083() { }
+    public void meth41084() { }
+    public void meth41085() { }
+    public void meth41086() { }
+    public void meth41087() { }
+    public void meth41088() { }
+    public void meth41089() { }
+    public void meth41090() { }
+    public void meth41091() { }
+    public void meth41092() { }
+    public void meth41093() { }
+    public void meth41094() { }
+    public void meth41095() { }
+    public void meth41096() { }
+    public void meth41097() { }
+    public void meth41098() { }
+    public void meth41099() { }
+    public void meth41100() { }
+    public void meth41101() { }
+    public void meth41102() { }
+    public void meth41103() { }
+    public void meth41104() { }
+    public void meth41105() { }
+    public void meth41106() { }
+    public void meth41107() { }
+    public void meth41108() { }
+    public void meth41109() { }
+    public void meth41110() { }
+    public void meth41111() { }
+    public void meth41112() { }
+    public void meth41113() { }
+    public void meth41114() { }
+    public void meth41115() { }
+    public void meth41116() { }
+    public void meth41117() { }
+    public void meth41118() { }
+    public void meth41119() { }
+    public void meth41120() { }
+    public void meth41121() { }
+    public void meth41122() { }
+    public void meth41123() { }
+    public void meth41124() { }
+    public void meth41125() { }
+    public void meth41126() { }
+    public void meth41127() { }
+    public void meth41128() { }
+    public void meth41129() { }
+    public void meth41130() { }
+    public void meth41131() { }
+    public void meth41132() { }
+    public void meth41133() { }
+    public void meth41134() { }
+    public void meth41135() { }
+    public void meth41136() { }
+    public void meth41137() { }
+    public void meth41138() { }
+    public void meth41139() { }
+    public void meth41140() { }
+    public void meth41141() { }
+    public void meth41142() { }
+    public void meth41143() { }
+    public void meth41144() { }
+    public void meth41145() { }
+    public void meth41146() { }
+    public void meth41147() { }
+    public void meth41148() { }
+    public void meth41149() { }
+    public void meth41150() { }
+    public void meth41151() { }
+    public void meth41152() { }
+    public void meth41153() { }
+    public void meth41154() { }
+    public void meth41155() { }
+    public void meth41156() { }
+    public void meth41157() { }
+    public void meth41158() { }
+    public void meth41159() { }
+    public void meth41160() { }
+    public void meth41161() { }
+    public void meth41162() { }
+    public void meth41163() { }
+    public void meth41164() { }
+    public void meth41165() { }
+    public void meth41166() { }
+    public void meth41167() { }
+    public void meth41168() { }
+    public void meth41169() { }
+    public void meth41170() { }
+    public void meth41171() { }
+    public void meth41172() { }
+    public void meth41173() { }
+    public void meth41174() { }
+    public void meth41175() { }
+    public void meth41176() { }
+    public void meth41177() { }
+    public void meth41178() { }
+    public void meth41179() { }
+    public void meth41180() { }
+    public void meth41181() { }
+    public void meth41182() { }
+    public void meth41183() { }
+    public void meth41184() { }
+    public void meth41185() { }
+    public void meth41186() { }
+    public void meth41187() { }
+    public void meth41188() { }
+    public void meth41189() { }
+    public void meth41190() { }
+    public void meth41191() { }
+    public void meth41192() { }
+    public void meth41193() { }
+    public void meth41194() { }
+    public void meth41195() { }
+    public void meth41196() { }
+    public void meth41197() { }
+    public void meth41198() { }
+    public void meth41199() { }
+    public void meth41200() { }
+    public void meth41201() { }
+    public void meth41202() { }
+    public void meth41203() { }
+    public void meth41204() { }
+    public void meth41205() { }
+    public void meth41206() { }
+    public void meth41207() { }
+    public void meth41208() { }
+    public void meth41209() { }
+    public void meth41210() { }
+    public void meth41211() { }
+    public void meth41212() { }
+    public void meth41213() { }
+    public void meth41214() { }
+    public void meth41215() { }
+    public void meth41216() { }
+    public void meth41217() { }
+    public void meth41218() { }
+    public void meth41219() { }
+    public void meth41220() { }
+    public void meth41221() { }
+    public void meth41222() { }
+    public void meth41223() { }
+    public void meth41224() { }
+    public void meth41225() { }
+    public void meth41226() { }
+    public void meth41227() { }
+    public void meth41228() { }
+    public void meth41229() { }
+    public void meth41230() { }
+    public void meth41231() { }
+    public void meth41232() { }
+    public void meth41233() { }
+    public void meth41234() { }
+    public void meth41235() { }
+    public void meth41236() { }
+    public void meth41237() { }
+    public void meth41238() { }
+    public void meth41239() { }
+    public void meth41240() { }
+    public void meth41241() { }
+    public void meth41242() { }
+    public void meth41243() { }
+    public void meth41244() { }
+    public void meth41245() { }
+    public void meth41246() { }
+    public void meth41247() { }
+    public void meth41248() { }
+    public void meth41249() { }
+    public void meth41250() { }
+    public void meth41251() { }
+    public void meth41252() { }
+    public void meth41253() { }
+    public void meth41254() { }
+    public void meth41255() { }
+    public void meth41256() { }
+    public void meth41257() { }
+    public void meth41258() { }
+    public void meth41259() { }
+    public void meth41260() { }
+    public void meth41261() { }
+    public void meth41262() { }
+    public void meth41263() { }
+    public void meth41264() { }
+    public void meth41265() { }
+    public void meth41266() { }
+    public void meth41267() { }
+    public void meth41268() { }
+    public void meth41269() { }
+    public void meth41270() { }
+    public void meth41271() { }
+    public void meth41272() { }
+    public void meth41273() { }
+    public void meth41274() { }
+    public void meth41275() { }
+    public void meth41276() { }
+    public void meth41277() { }
+    public void meth41278() { }
+    public void meth41279() { }
+    public void meth41280() { }
+    public void meth41281() { }
+    public void meth41282() { }
+    public void meth41283() { }
+    public void meth41284() { }
+    public void meth41285() { }
+    public void meth41286() { }
+    public void meth41287() { }
+    public void meth41288() { }
+    public void meth41289() { }
+    public void meth41290() { }
+    public void meth41291() { }
+    public void meth41292() { }
+    public void meth41293() { }
+    public void meth41294() { }
+    public void meth41295() { }
+    public void meth41296() { }
+    public void meth41297() { }
+    public void meth41298() { }
+    public void meth41299() { }
+    public void meth41300() { }
+    public void meth41301() { }
+    public void meth41302() { }
+    public void meth41303() { }
+    public void meth41304() { }
+    public void meth41305() { }
+    public void meth41306() { }
+    public void meth41307() { }
+    public void meth41308() { }
+    public void meth41309() { }
+    public void meth41310() { }
+    public void meth41311() { }
+    public void meth41312() { }
+    public void meth41313() { }
+    public void meth41314() { }
+    public void meth41315() { }
+    public void meth41316() { }
+    public void meth41317() { }
+    public void meth41318() { }
+    public void meth41319() { }
+    public void meth41320() { }
+    public void meth41321() { }
+    public void meth41322() { }
+    public void meth41323() { }
+    public void meth41324() { }
+    public void meth41325() { }
+    public void meth41326() { }
+    public void meth41327() { }
+    public void meth41328() { }
+    public void meth41329() { }
+    public void meth41330() { }
+    public void meth41331() { }
+    public void meth41332() { }
+    public void meth41333() { }
+    public void meth41334() { }
+    public void meth41335() { }
+    public void meth41336() { }
+    public void meth41337() { }
+    public void meth41338() { }
+    public void meth41339() { }
+    public void meth41340() { }
+    public void meth41341() { }
+    public void meth41342() { }
+    public void meth41343() { }
+    public void meth41344() { }
+    public void meth41345() { }
+    public void meth41346() { }
+    public void meth41347() { }
+    public void meth41348() { }
+    public void meth41349() { }
+    public void meth41350() { }
+    public void meth41351() { }
+    public void meth41352() { }
+    public void meth41353() { }
+    public void meth41354() { }
+    public void meth41355() { }
+    public void meth41356() { }
+    public void meth41357() { }
+    public void meth41358() { }
+    public void meth41359() { }
+    public void meth41360() { }
+    public void meth41361() { }
+    public void meth41362() { }
+    public void meth41363() { }
+    public void meth41364() { }
+    public void meth41365() { }
+    public void meth41366() { }
+    public void meth41367() { }
+    public void meth41368() { }
+    public void meth41369() { }
+    public void meth41370() { }
+    public void meth41371() { }
+    public void meth41372() { }
+    public void meth41373() { }
+    public void meth41374() { }
+    public void meth41375() { }
+    public void meth41376() { }
+    public void meth41377() { }
+    public void meth41378() { }
+    public void meth41379() { }
+    public void meth41380() { }
+    public void meth41381() { }
+    public void meth41382() { }
+    public void meth41383() { }
+    public void meth41384() { }
+    public void meth41385() { }
+    public void meth41386() { }
+    public void meth41387() { }
+    public void meth41388() { }
+    public void meth41389() { }
+    public void meth41390() { }
+    public void meth41391() { }
+    public void meth41392() { }
+    public void meth41393() { }
+    public void meth41394() { }
+    public void meth41395() { }
+    public void meth41396() { }
+    public void meth41397() { }
+    public void meth41398() { }
+    public void meth41399() { }
+    public void meth41400() { }
+    public void meth41401() { }
+    public void meth41402() { }
+    public void meth41403() { }
+    public void meth41404() { }
+    public void meth41405() { }
+    public void meth41406() { }
+    public void meth41407() { }
+    public void meth41408() { }
+    public void meth41409() { }
+    public void meth41410() { }
+    public void meth41411() { }
+    public void meth41412() { }
+    public void meth41413() { }
+    public void meth41414() { }
+    public void meth41415() { }
+    public void meth41416() { }
+    public void meth41417() { }
+    public void meth41418() { }
+    public void meth41419() { }
+    public void meth41420() { }
+    public void meth41421() { }
+    public void meth41422() { }
+    public void meth41423() { }
+    public void meth41424() { }
+    public void meth41425() { }
+    public void meth41426() { }
+    public void meth41427() { }
+    public void meth41428() { }
+    public void meth41429() { }
+    public void meth41430() { }
+    public void meth41431() { }
+    public void meth41432() { }
+    public void meth41433() { }
+    public void meth41434() { }
+    public void meth41435() { }
+    public void meth41436() { }
+    public void meth41437() { }
+    public void meth41438() { }
+    public void meth41439() { }
+    public void meth41440() { }
+    public void meth41441() { }
+    public void meth41442() { }
+    public void meth41443() { }
+    public void meth41444() { }
+    public void meth41445() { }
+    public void meth41446() { }
+    public void meth41447() { }
+    public void meth41448() { }
+    public void meth41449() { }
+    public void meth41450() { }
+    public void meth41451() { }
+    public void meth41452() { }
+    public void meth41453() { }
+    public void meth41454() { }
+    public void meth41455() { }
+    public void meth41456() { }
+    public void meth41457() { }
+    public void meth41458() { }
+    public void meth41459() { }
+    public void meth41460() { }
+    public void meth41461() { }
+    public void meth41462() { }
+    public void meth41463() { }
+    public void meth41464() { }
+    public void meth41465() { }
+    public void meth41466() { }
+    public void meth41467() { }
+    public void meth41468() { }
+    public void meth41469() { }
+    public void meth41470() { }
+    public void meth41471() { }
+    public void meth41472() { }
+    public void meth41473() { }
+    public void meth41474() { }
+    public void meth41475() { }
+    public void meth41476() { }
+    public void meth41477() { }
+    public void meth41478() { }
+    public void meth41479() { }
+    public void meth41480() { }
+    public void meth41481() { }
+    public void meth41482() { }
+    public void meth41483() { }
+    public void meth41484() { }
+    public void meth41485() { }
+    public void meth41486() { }
+    public void meth41487() { }
+    public void meth41488() { }
+    public void meth41489() { }
+    public void meth41490() { }
+    public void meth41491() { }
+    public void meth41492() { }
+    public void meth41493() { }
+    public void meth41494() { }
+    public void meth41495() { }
+    public void meth41496() { }
+    public void meth41497() { }
+    public void meth41498() { }
+    public void meth41499() { }
+    public void meth41500() { }
+    public void meth41501() { }
+    public void meth41502() { }
+    public void meth41503() { }
+    public void meth41504() { }
+    public void meth41505() { }
+    public void meth41506() { }
+    public void meth41507() { }
+    public void meth41508() { }
+    public void meth41509() { }
+    public void meth41510() { }
+    public void meth41511() { }
+    public void meth41512() { }
+    public void meth41513() { }
+    public void meth41514() { }
+    public void meth41515() { }
+    public void meth41516() { }
+    public void meth41517() { }
+    public void meth41518() { }
+    public void meth41519() { }
+    public void meth41520() { }
+    public void meth41521() { }
+    public void meth41522() { }
+    public void meth41523() { }
+    public void meth41524() { }
+    public void meth41525() { }
+    public void meth41526() { }
+    public void meth41527() { }
+    public void meth41528() { }
+    public void meth41529() { }
+    public void meth41530() { }
+    public void meth41531() { }
+    public void meth41532() { }
+    public void meth41533() { }
+    public void meth41534() { }
+    public void meth41535() { }
+    public void meth41536() { }
+    public void meth41537() { }
+    public void meth41538() { }
+    public void meth41539() { }
+    public void meth41540() { }
+    public void meth41541() { }
+    public void meth41542() { }
+    public void meth41543() { }
+    public void meth41544() { }
+    public void meth41545() { }
+    public void meth41546() { }
+    public void meth41547() { }
+    public void meth41548() { }
+    public void meth41549() { }
+    public void meth41550() { }
+    public void meth41551() { }
+    public void meth41552() { }
+    public void meth41553() { }
+    public void meth41554() { }
+    public void meth41555() { }
+    public void meth41556() { }
+    public void meth41557() { }
+    public void meth41558() { }
+    public void meth41559() { }
+    public void meth41560() { }
+    public void meth41561() { }
+    public void meth41562() { }
+    public void meth41563() { }
+    public void meth41564() { }
+    public void meth41565() { }
+    public void meth41566() { }
+    public void meth41567() { }
+    public void meth41568() { }
+    public void meth41569() { }
+    public void meth41570() { }
+    public void meth41571() { }
+    public void meth41572() { }
+    public void meth41573() { }
+    public void meth41574() { }
+    public void meth41575() { }
+    public void meth41576() { }
+    public void meth41577() { }
+    public void meth41578() { }
+    public void meth41579() { }
+    public void meth41580() { }
+    public void meth41581() { }
+    public void meth41582() { }
+    public void meth41583() { }
+    public void meth41584() { }
+    public void meth41585() { }
+    public void meth41586() { }
+    public void meth41587() { }
+    public void meth41588() { }
+    public void meth41589() { }
+    public void meth41590() { }
+    public void meth41591() { }
+    public void meth41592() { }
+    public void meth41593() { }
+    public void meth41594() { }
+    public void meth41595() { }
+    public void meth41596() { }
+    public void meth41597() { }
+    public void meth41598() { }
+    public void meth41599() { }
+    public void meth41600() { }
+    public void meth41601() { }
+    public void meth41602() { }
+    public void meth41603() { }
+    public void meth41604() { }
+    public void meth41605() { }
+    public void meth41606() { }
+    public void meth41607() { }
+    public void meth41608() { }
+    public void meth41609() { }
+    public void meth41610() { }
+    public void meth41611() { }
+    public void meth41612() { }
+    public void meth41613() { }
+    public void meth41614() { }
+    public void meth41615() { }
+    public void meth41616() { }
+    public void meth41617() { }
+    public void meth41618() { }
+    public void meth41619() { }
+    public void meth41620() { }
+    public void meth41621() { }
+    public void meth41622() { }
+    public void meth41623() { }
+    public void meth41624() { }
+    public void meth41625() { }
+    public void meth41626() { }
+    public void meth41627() { }
+    public void meth41628() { }
+    public void meth41629() { }
+    public void meth41630() { }
+    public void meth41631() { }
+    public void meth41632() { }
+    public void meth41633() { }
+    public void meth41634() { }
+    public void meth41635() { }
+    public void meth41636() { }
+    public void meth41637() { }
+    public void meth41638() { }
+    public void meth41639() { }
+    public void meth41640() { }
+    public void meth41641() { }
+    public void meth41642() { }
+    public void meth41643() { }
+    public void meth41644() { }
+    public void meth41645() { }
+    public void meth41646() { }
+    public void meth41647() { }
+    public void meth41648() { }
+    public void meth41649() { }
+    public void meth41650() { }
+    public void meth41651() { }
+    public void meth41652() { }
+    public void meth41653() { }
+    public void meth41654() { }
+    public void meth41655() { }
+    public void meth41656() { }
+    public void meth41657() { }
+    public void meth41658() { }
+    public void meth41659() { }
+    public void meth41660() { }
+    public void meth41661() { }
+    public void meth41662() { }
+    public void meth41663() { }
+    public void meth41664() { }
+    public void meth41665() { }
+    public void meth41666() { }
+    public void meth41667() { }
+    public void meth41668() { }
+    public void meth41669() { }
+    public void meth41670() { }
+    public void meth41671() { }
+    public void meth41672() { }
+    public void meth41673() { }
+    public void meth41674() { }
+    public void meth41675() { }
+    public void meth41676() { }
+    public void meth41677() { }
+    public void meth41678() { }
+    public void meth41679() { }
+    public void meth41680() { }
+    public void meth41681() { }
+    public void meth41682() { }
+    public void meth41683() { }
+    public void meth41684() { }
+    public void meth41685() { }
+    public void meth41686() { }
+    public void meth41687() { }
+    public void meth41688() { }
+    public void meth41689() { }
+    public void meth41690() { }
+    public void meth41691() { }
+    public void meth41692() { }
+    public void meth41693() { }
+    public void meth41694() { }
+    public void meth41695() { }
+    public void meth41696() { }
+    public void meth41697() { }
+    public void meth41698() { }
+    public void meth41699() { }
+    public void meth41700() { }
+    public void meth41701() { }
+    public void meth41702() { }
+    public void meth41703() { }
+    public void meth41704() { }
+    public void meth41705() { }
+    public void meth41706() { }
+    public void meth41707() { }
+    public void meth41708() { }
+    public void meth41709() { }
+    public void meth41710() { }
+    public void meth41711() { }
+    public void meth41712() { }
+    public void meth41713() { }
+    public void meth41714() { }
+    public void meth41715() { }
+    public void meth41716() { }
+    public void meth41717() { }
+    public void meth41718() { }
+    public void meth41719() { }
+    public void meth41720() { }
+    public void meth41721() { }
+    public void meth41722() { }
+    public void meth41723() { }
+    public void meth41724() { }
+    public void meth41725() { }
+    public void meth41726() { }
+    public void meth41727() { }
+    public void meth41728() { }
+    public void meth41729() { }
+    public void meth41730() { }
+    public void meth41731() { }
+    public void meth41732() { }
+    public void meth41733() { }
+    public void meth41734() { }
+    public void meth41735() { }
+    public void meth41736() { }
+    public void meth41737() { }
+    public void meth41738() { }
+    public void meth41739() { }
+    public void meth41740() { }
+    public void meth41741() { }
+    public void meth41742() { }
+    public void meth41743() { }
+    public void meth41744() { }
+    public void meth41745() { }
+    public void meth41746() { }
+    public void meth41747() { }
+    public void meth41748() { }
+    public void meth41749() { }
+    public void meth41750() { }
+    public void meth41751() { }
+    public void meth41752() { }
+    public void meth41753() { }
+    public void meth41754() { }
+    public void meth41755() { }
+    public void meth41756() { }
+    public void meth41757() { }
+    public void meth41758() { }
+    public void meth41759() { }
+    public void meth41760() { }
+    public void meth41761() { }
+    public void meth41762() { }
+    public void meth41763() { }
+    public void meth41764() { }
+    public void meth41765() { }
+    public void meth41766() { }
+    public void meth41767() { }
+    public void meth41768() { }
+    public void meth41769() { }
+    public void meth41770() { }
+    public void meth41771() { }
+    public void meth41772() { }
+    public void meth41773() { }
+    public void meth41774() { }
+    public void meth41775() { }
+    public void meth41776() { }
+    public void meth41777() { }
+    public void meth41778() { }
+    public void meth41779() { }
+    public void meth41780() { }
+    public void meth41781() { }
+    public void meth41782() { }
+    public void meth41783() { }
+    public void meth41784() { }
+    public void meth41785() { }
+    public void meth41786() { }
+    public void meth41787() { }
+    public void meth41788() { }
+    public void meth41789() { }
+    public void meth41790() { }
+    public void meth41791() { }
+    public void meth41792() { }
+    public void meth41793() { }
+    public void meth41794() { }
+    public void meth41795() { }
+    public void meth41796() { }
+    public void meth41797() { }
+    public void meth41798() { }
+    public void meth41799() { }
+    public void meth41800() { }
+    public void meth41801() { }
+    public void meth41802() { }
+    public void meth41803() { }
+    public void meth41804() { }
+    public void meth41805() { }
+    public void meth41806() { }
+    public void meth41807() { }
+    public void meth41808() { }
+    public void meth41809() { }
+    public void meth41810() { }
+    public void meth41811() { }
+    public void meth41812() { }
+    public void meth41813() { }
+    public void meth41814() { }
+    public void meth41815() { }
+    public void meth41816() { }
+    public void meth41817() { }
+    public void meth41818() { }
+    public void meth41819() { }
+    public void meth41820() { }
+    public void meth41821() { }
+    public void meth41822() { }
+    public void meth41823() { }
+    public void meth41824() { }
+    public void meth41825() { }
+    public void meth41826() { }
+    public void meth41827() { }
+    public void meth41828() { }
+    public void meth41829() { }
+    public void meth41830() { }
+    public void meth41831() { }
+    public void meth41832() { }
+    public void meth41833() { }
+    public void meth41834() { }
+    public void meth41835() { }
+    public void meth41836() { }
+    public void meth41837() { }
+    public void meth41838() { }
+    public void meth41839() { }
+    public void meth41840() { }
+    public void meth41841() { }
+    public void meth41842() { }
+    public void meth41843() { }
+    public void meth41844() { }
+    public void meth41845() { }
+    public void meth41846() { }
+    public void meth41847() { }
+    public void meth41848() { }
+    public void meth41849() { }
+    public void meth41850() { }
+    public void meth41851() { }
+    public void meth41852() { }
+    public void meth41853() { }
+    public void meth41854() { }
+    public void meth41855() { }
+    public void meth41856() { }
+    public void meth41857() { }
+    public void meth41858() { }
+    public void meth41859() { }
+    public void meth41860() { }
+    public void meth41861() { }
+    public void meth41862() { }
+    public void meth41863() { }
+    public void meth41864() { }
+    public void meth41865() { }
+    public void meth41866() { }
+    public void meth41867() { }
+    public void meth41868() { }
+    public void meth41869() { }
+    public void meth41870() { }
+    public void meth41871() { }
+    public void meth41872() { }
+    public void meth41873() { }
+    public void meth41874() { }
+    public void meth41875() { }
+    public void meth41876() { }
+    public void meth41877() { }
+    public void meth41878() { }
+    public void meth41879() { }
+    public void meth41880() { }
+    public void meth41881() { }
+    public void meth41882() { }
+    public void meth41883() { }
+    public void meth41884() { }
+    public void meth41885() { }
+    public void meth41886() { }
+    public void meth41887() { }
+    public void meth41888() { }
+    public void meth41889() { }
+    public void meth41890() { }
+    public void meth41891() { }
+    public void meth41892() { }
+    public void meth41893() { }
+    public void meth41894() { }
+    public void meth41895() { }
+    public void meth41896() { }
+    public void meth41897() { }
+    public void meth41898() { }
+    public void meth41899() { }
+    public void meth41900() { }
+    public void meth41901() { }
+    public void meth41902() { }
+    public void meth41903() { }
+    public void meth41904() { }
+    public void meth41905() { }
+    public void meth41906() { }
+    public void meth41907() { }
+    public void meth41908() { }
+    public void meth41909() { }
+    public void meth41910() { }
+    public void meth41911() { }
+    public void meth41912() { }
+    public void meth41913() { }
+    public void meth41914() { }
+    public void meth41915() { }
+    public void meth41916() { }
+    public void meth41917() { }
+    public void meth41918() { }
+    public void meth41919() { }
+    public void meth41920() { }
+    public void meth41921() { }
+    public void meth41922() { }
+    public void meth41923() { }
+    public void meth41924() { }
+    public void meth41925() { }
+    public void meth41926() { }
+    public void meth41927() { }
+    public void meth41928() { }
+    public void meth41929() { }
+    public void meth41930() { }
+    public void meth41931() { }
+    public void meth41932() { }
+    public void meth41933() { }
+    public void meth41934() { }
+    public void meth41935() { }
+    public void meth41936() { }
+    public void meth41937() { }
+    public void meth41938() { }
+    public void meth41939() { }
+    public void meth41940() { }
+    public void meth41941() { }
+    public void meth41942() { }
+    public void meth41943() { }
+    public void meth41944() { }
+    public void meth41945() { }
+    public void meth41946() { }
+    public void meth41947() { }
+    public void meth41948() { }
+    public void meth41949() { }
+    public void meth41950() { }
+    public void meth41951() { }
+    public void meth41952() { }
+    public void meth41953() { }
+    public void meth41954() { }
+    public void meth41955() { }
+    public void meth41956() { }
+    public void meth41957() { }
+    public void meth41958() { }
+    public void meth41959() { }
+    public void meth41960() { }
+    public void meth41961() { }
+    public void meth41962() { }
+    public void meth41963() { }
+    public void meth41964() { }
+    public void meth41965() { }
+    public void meth41966() { }
+    public void meth41967() { }
+    public void meth41968() { }
+    public void meth41969() { }
+    public void meth41970() { }
+    public void meth41971() { }
+    public void meth41972() { }
+    public void meth41973() { }
+    public void meth41974() { }
+    public void meth41975() { }
+    public void meth41976() { }
+    public void meth41977() { }
+    public void meth41978() { }
+    public void meth41979() { }
+    public void meth41980() { }
+    public void meth41981() { }
+    public void meth41982() { }
+    public void meth41983() { }
+    public void meth41984() { }
+    public void meth41985() { }
+    public void meth41986() { }
+    public void meth41987() { }
+    public void meth41988() { }
+    public void meth41989() { }
+    public void meth41990() { }
+    public void meth41991() { }
+    public void meth41992() { }
+    public void meth41993() { }
+    public void meth41994() { }
+    public void meth41995() { }
+    public void meth41996() { }
+    public void meth41997() { }
+    public void meth41998() { }
+    public void meth41999() { }
+    public void meth42000() { }
+    public void meth42001() { }
+    public void meth42002() { }
+    public void meth42003() { }
+    public void meth42004() { }
+    public void meth42005() { }
+    public void meth42006() { }
+    public void meth42007() { }
+    public void meth42008() { }
+    public void meth42009() { }
+    public void meth42010() { }
+    public void meth42011() { }
+    public void meth42012() { }
+    public void meth42013() { }
+    public void meth42014() { }
+    public void meth42015() { }
+    public void meth42016() { }
+    public void meth42017() { }
+    public void meth42018() { }
+    public void meth42019() { }
+    public void meth42020() { }
+    public void meth42021() { }
+    public void meth42022() { }
+    public void meth42023() { }
+    public void meth42024() { }
+    public void meth42025() { }
+    public void meth42026() { }
+    public void meth42027() { }
+    public void meth42028() { }
+    public void meth42029() { }
+    public void meth42030() { }
+    public void meth42031() { }
+    public void meth42032() { }
+    public void meth42033() { }
+    public void meth42034() { }
+    public void meth42035() { }
+    public void meth42036() { }
+    public void meth42037() { }
+    public void meth42038() { }
+    public void meth42039() { }
+    public void meth42040() { }
+    public void meth42041() { }
+    public void meth42042() { }
+    public void meth42043() { }
+    public void meth42044() { }
+    public void meth42045() { }
+    public void meth42046() { }
+    public void meth42047() { }
+    public void meth42048() { }
+    public void meth42049() { }
+    public void meth42050() { }
+    public void meth42051() { }
+    public void meth42052() { }
+    public void meth42053() { }
+    public void meth42054() { }
+    public void meth42055() { }
+    public void meth42056() { }
+    public void meth42057() { }
+    public void meth42058() { }
+    public void meth42059() { }
+    public void meth42060() { }
+    public void meth42061() { }
+    public void meth42062() { }
+    public void meth42063() { }
+    public void meth42064() { }
+    public void meth42065() { }
+    public void meth42066() { }
+    public void meth42067() { }
+    public void meth42068() { }
+    public void meth42069() { }
+    public void meth42070() { }
+    public void meth42071() { }
+    public void meth42072() { }
+    public void meth42073() { }
+    public void meth42074() { }
+    public void meth42075() { }
+    public void meth42076() { }
+    public void meth42077() { }
+    public void meth42078() { }
+    public void meth42079() { }
+    public void meth42080() { }
+    public void meth42081() { }
+    public void meth42082() { }
+    public void meth42083() { }
+    public void meth42084() { }
+    public void meth42085() { }
+    public void meth42086() { }
+    public void meth42087() { }
+    public void meth42088() { }
+    public void meth42089() { }
+    public void meth42090() { }
+    public void meth42091() { }
+    public void meth42092() { }
+    public void meth42093() { }
+    public void meth42094() { }
+    public void meth42095() { }
+    public void meth42096() { }
+    public void meth42097() { }
+    public void meth42098() { }
+    public void meth42099() { }
+    public void meth42100() { }
+    public void meth42101() { }
+    public void meth42102() { }
+    public void meth42103() { }
+    public void meth42104() { }
+    public void meth42105() { }
+    public void meth42106() { }
+    public void meth42107() { }
+    public void meth42108() { }
+    public void meth42109() { }
+    public void meth42110() { }
+    public void meth42111() { }
+    public void meth42112() { }
+    public void meth42113() { }
+    public void meth42114() { }
+    public void meth42115() { }
+    public void meth42116() { }
+    public void meth42117() { }
+    public void meth42118() { }
+    public void meth42119() { }
+    public void meth42120() { }
+    public void meth42121() { }
+    public void meth42122() { }
+    public void meth42123() { }
+    public void meth42124() { }
+    public void meth42125() { }
+    public void meth42126() { }
+    public void meth42127() { }
+    public void meth42128() { }
+    public void meth42129() { }
+    public void meth42130() { }
+    public void meth42131() { }
+    public void meth42132() { }
+    public void meth42133() { }
+    public void meth42134() { }
+    public void meth42135() { }
+    public void meth42136() { }
+    public void meth42137() { }
+    public void meth42138() { }
+    public void meth42139() { }
+    public void meth42140() { }
+    public void meth42141() { }
+    public void meth42142() { }
+    public void meth42143() { }
+    public void meth42144() { }
+    public void meth42145() { }
+    public void meth42146() { }
+    public void meth42147() { }
+    public void meth42148() { }
+    public void meth42149() { }
+    public void meth42150() { }
+    public void meth42151() { }
+    public void meth42152() { }
+    public void meth42153() { }
+    public void meth42154() { }
+    public void meth42155() { }
+    public void meth42156() { }
+    public void meth42157() { }
+    public void meth42158() { }
+    public void meth42159() { }
+    public void meth42160() { }
+    public void meth42161() { }
+    public void meth42162() { }
+    public void meth42163() { }
+    public void meth42164() { }
+    public void meth42165() { }
+    public void meth42166() { }
+    public void meth42167() { }
+    public void meth42168() { }
+    public void meth42169() { }
+    public void meth42170() { }
+    public void meth42171() { }
+    public void meth42172() { }
+    public void meth42173() { }
+    public void meth42174() { }
+    public void meth42175() { }
+    public void meth42176() { }
+    public void meth42177() { }
+    public void meth42178() { }
+    public void meth42179() { }
+    public void meth42180() { }
+    public void meth42181() { }
+    public void meth42182() { }
+    public void meth42183() { }
+    public void meth42184() { }
+    public void meth42185() { }
+    public void meth42186() { }
+    public void meth42187() { }
+    public void meth42188() { }
+    public void meth42189() { }
+    public void meth42190() { }
+    public void meth42191() { }
+    public void meth42192() { }
+    public void meth42193() { }
+    public void meth42194() { }
+    public void meth42195() { }
+    public void meth42196() { }
+    public void meth42197() { }
+    public void meth42198() { }
+    public void meth42199() { }
+    public void meth42200() { }
+    public void meth42201() { }
+    public void meth42202() { }
+    public void meth42203() { }
+    public void meth42204() { }
+    public void meth42205() { }
+    public void meth42206() { }
+    public void meth42207() { }
+    public void meth42208() { }
+    public void meth42209() { }
+    public void meth42210() { }
+    public void meth42211() { }
+    public void meth42212() { }
+    public void meth42213() { }
+    public void meth42214() { }
+    public void meth42215() { }
+    public void meth42216() { }
+    public void meth42217() { }
+    public void meth42218() { }
+    public void meth42219() { }
+    public void meth42220() { }
+    public void meth42221() { }
+    public void meth42222() { }
+    public void meth42223() { }
+    public void meth42224() { }
+    public void meth42225() { }
+    public void meth42226() { }
+    public void meth42227() { }
+    public void meth42228() { }
+    public void meth42229() { }
+    public void meth42230() { }
+    public void meth42231() { }
+    public void meth42232() { }
+    public void meth42233() { }
+    public void meth42234() { }
+    public void meth42235() { }
+    public void meth42236() { }
+    public void meth42237() { }
+    public void meth42238() { }
+    public void meth42239() { }
+    public void meth42240() { }
+    public void meth42241() { }
+    public void meth42242() { }
+    public void meth42243() { }
+    public void meth42244() { }
+    public void meth42245() { }
+    public void meth42246() { }
+    public void meth42247() { }
+    public void meth42248() { }
+    public void meth42249() { }
+    public void meth42250() { }
+    public void meth42251() { }
+    public void meth42252() { }
+    public void meth42253() { }
+    public void meth42254() { }
+    public void meth42255() { }
+    public void meth42256() { }
+    public void meth42257() { }
+    public void meth42258() { }
+    public void meth42259() { }
+    public void meth42260() { }
+    public void meth42261() { }
+    public void meth42262() { }
+    public void meth42263() { }
+    public void meth42264() { }
+    public void meth42265() { }
+    public void meth42266() { }
+    public void meth42267() { }
+    public void meth42268() { }
+    public void meth42269() { }
+    public void meth42270() { }
+    public void meth42271() { }
+    public void meth42272() { }
+    public void meth42273() { }
+    public void meth42274() { }
+    public void meth42275() { }
+    public void meth42276() { }
+    public void meth42277() { }
+    public void meth42278() { }
+    public void meth42279() { }
+    public void meth42280() { }
+    public void meth42281() { }
+    public void meth42282() { }
+    public void meth42283() { }
+    public void meth42284() { }
+    public void meth42285() { }
+    public void meth42286() { }
+    public void meth42287() { }
+    public void meth42288() { }
+    public void meth42289() { }
+    public void meth42290() { }
+    public void meth42291() { }
+    public void meth42292() { }
+    public void meth42293() { }
+    public void meth42294() { }
+    public void meth42295() { }
+    public void meth42296() { }
+    public void meth42297() { }
+    public void meth42298() { }
+    public void meth42299() { }
+    public void meth42300() { }
+    public void meth42301() { }
+    public void meth42302() { }
+    public void meth42303() { }
+    public void meth42304() { }
+    public void meth42305() { }
+    public void meth42306() { }
+    public void meth42307() { }
+    public void meth42308() { }
+    public void meth42309() { }
+    public void meth42310() { }
+    public void meth42311() { }
+    public void meth42312() { }
+    public void meth42313() { }
+    public void meth42314() { }
+    public void meth42315() { }
+    public void meth42316() { }
+    public void meth42317() { }
+    public void meth42318() { }
+    public void meth42319() { }
+    public void meth42320() { }
+    public void meth42321() { }
+    public void meth42322() { }
+    public void meth42323() { }
+    public void meth42324() { }
+    public void meth42325() { }
+    public void meth42326() { }
+    public void meth42327() { }
+    public void meth42328() { }
+    public void meth42329() { }
+    public void meth42330() { }
+    public void meth42331() { }
+    public void meth42332() { }
+    public void meth42333() { }
+    public void meth42334() { }
+    public void meth42335() { }
+    public void meth42336() { }
+    public void meth42337() { }
+    public void meth42338() { }
+    public void meth42339() { }
+    public void meth42340() { }
+    public void meth42341() { }
+    public void meth42342() { }
+    public void meth42343() { }
+    public void meth42344() { }
+    public void meth42345() { }
+    public void meth42346() { }
+    public void meth42347() { }
+    public void meth42348() { }
+    public void meth42349() { }
+    public void meth42350() { }
+    public void meth42351() { }
+    public void meth42352() { }
+    public void meth42353() { }
+    public void meth42354() { }
+    public void meth42355() { }
+    public void meth42356() { }
+    public void meth42357() { }
+    public void meth42358() { }
+    public void meth42359() { }
+    public void meth42360() { }
+    public void meth42361() { }
+    public void meth42362() { }
+    public void meth42363() { }
+    public void meth42364() { }
+    public void meth42365() { }
+    public void meth42366() { }
+    public void meth42367() { }
+    public void meth42368() { }
+    public void meth42369() { }
+    public void meth42370() { }
+    public void meth42371() { }
+    public void meth42372() { }
+    public void meth42373() { }
+    public void meth42374() { }
+    public void meth42375() { }
+    public void meth42376() { }
+    public void meth42377() { }
+    public void meth42378() { }
+    public void meth42379() { }
+    public void meth42380() { }
+    public void meth42381() { }
+    public void meth42382() { }
+    public void meth42383() { }
+    public void meth42384() { }
+    public void meth42385() { }
+    public void meth42386() { }
+    public void meth42387() { }
+    public void meth42388() { }
+    public void meth42389() { }
+    public void meth42390() { }
+    public void meth42391() { }
+    public void meth42392() { }
+    public void meth42393() { }
+    public void meth42394() { }
+    public void meth42395() { }
+    public void meth42396() { }
+    public void meth42397() { }
+    public void meth42398() { }
+    public void meth42399() { }
+    public void meth42400() { }
+    public void meth42401() { }
+    public void meth42402() { }
+    public void meth42403() { }
+    public void meth42404() { }
+    public void meth42405() { }
+    public void meth42406() { }
+    public void meth42407() { }
+    public void meth42408() { }
+    public void meth42409() { }
+    public void meth42410() { }
+    public void meth42411() { }
+    public void meth42412() { }
+    public void meth42413() { }
+    public void meth42414() { }
+    public void meth42415() { }
+    public void meth42416() { }
+    public void meth42417() { }
+    public void meth42418() { }
+    public void meth42419() { }
+    public void meth42420() { }
+    public void meth42421() { }
+    public void meth42422() { }
+    public void meth42423() { }
+    public void meth42424() { }
+    public void meth42425() { }
+    public void meth42426() { }
+    public void meth42427() { }
+    public void meth42428() { }
+    public void meth42429() { }
+    public void meth42430() { }
+    public void meth42431() { }
+    public void meth42432() { }
+    public void meth42433() { }
+    public void meth42434() { }
+    public void meth42435() { }
+    public void meth42436() { }
+    public void meth42437() { }
+    public void meth42438() { }
+    public void meth42439() { }
+    public void meth42440() { }
+    public void meth42441() { }
+    public void meth42442() { }
+    public void meth42443() { }
+    public void meth42444() { }
+    public void meth42445() { }
+    public void meth42446() { }
+    public void meth42447() { }
+    public void meth42448() { }
+    public void meth42449() { }
+    public void meth42450() { }
+    public void meth42451() { }
+    public void meth42452() { }
+    public void meth42453() { }
+    public void meth42454() { }
+    public void meth42455() { }
+    public void meth42456() { }
+    public void meth42457() { }
+    public void meth42458() { }
+    public void meth42459() { }
+    public void meth42460() { }
+    public void meth42461() { }
+    public void meth42462() { }
+    public void meth42463() { }
+    public void meth42464() { }
+    public void meth42465() { }
+    public void meth42466() { }
+    public void meth42467() { }
+    public void meth42468() { }
+    public void meth42469() { }
+    public void meth42470() { }
+    public void meth42471() { }
+    public void meth42472() { }
+    public void meth42473() { }
+    public void meth42474() { }
+    public void meth42475() { }
+    public void meth42476() { }
+    public void meth42477() { }
+    public void meth42478() { }
+    public void meth42479() { }
+    public void meth42480() { }
+    public void meth42481() { }
+    public void meth42482() { }
+    public void meth42483() { }
+    public void meth42484() { }
+    public void meth42485() { }
+    public void meth42486() { }
+    public void meth42487() { }
+    public void meth42488() { }
+    public void meth42489() { }
+    public void meth42490() { }
+    public void meth42491() { }
+    public void meth42492() { }
+    public void meth42493() { }
+    public void meth42494() { }
+    public void meth42495() { }
+    public void meth42496() { }
+    public void meth42497() { }
+    public void meth42498() { }
+    public void meth42499() { }
+    public void meth42500() { }
+    public void meth42501() { }
+    public void meth42502() { }
+    public void meth42503() { }
+    public void meth42504() { }
+    public void meth42505() { }
+    public void meth42506() { }
+    public void meth42507() { }
+    public void meth42508() { }
+    public void meth42509() { }
+    public void meth42510() { }
+    public void meth42511() { }
+    public void meth42512() { }
+    public void meth42513() { }
+    public void meth42514() { }
+    public void meth42515() { }
+    public void meth42516() { }
+    public void meth42517() { }
+    public void meth42518() { }
+    public void meth42519() { }
+    public void meth42520() { }
+    public void meth42521() { }
+    public void meth42522() { }
+    public void meth42523() { }
+    public void meth42524() { }
+    public void meth42525() { }
+    public void meth42526() { }
+    public void meth42527() { }
+    public void meth42528() { }
+    public void meth42529() { }
+    public void meth42530() { }
+    public void meth42531() { }
+    public void meth42532() { }
+    public void meth42533() { }
+    public void meth42534() { }
+    public void meth42535() { }
+    public void meth42536() { }
+    public void meth42537() { }
+    public void meth42538() { }
+    public void meth42539() { }
+    public void meth42540() { }
+    public void meth42541() { }
+    public void meth42542() { }
+    public void meth42543() { }
+    public void meth42544() { }
+    public void meth42545() { }
+    public void meth42546() { }
+    public void meth42547() { }
+    public void meth42548() { }
+    public void meth42549() { }
+    public void meth42550() { }
+    public void meth42551() { }
+    public void meth42552() { }
+    public void meth42553() { }
+    public void meth42554() { }
+    public void meth42555() { }
+    public void meth42556() { }
+    public void meth42557() { }
+    public void meth42558() { }
+    public void meth42559() { }
+    public void meth42560() { }
+    public void meth42561() { }
+    public void meth42562() { }
+    public void meth42563() { }
+    public void meth42564() { }
+    public void meth42565() { }
+    public void meth42566() { }
+    public void meth42567() { }
+    public void meth42568() { }
+    public void meth42569() { }
+    public void meth42570() { }
+    public void meth42571() { }
+    public void meth42572() { }
+    public void meth42573() { }
+    public void meth42574() { }
+    public void meth42575() { }
+    public void meth42576() { }
+    public void meth42577() { }
+    public void meth42578() { }
+    public void meth42579() { }
+    public void meth42580() { }
+    public void meth42581() { }
+    public void meth42582() { }
+    public void meth42583() { }
+    public void meth42584() { }
+    public void meth42585() { }
+    public void meth42586() { }
+    public void meth42587() { }
+    public void meth42588() { }
+    public void meth42589() { }
+    public void meth42590() { }
+    public void meth42591() { }
+    public void meth42592() { }
+    public void meth42593() { }
+    public void meth42594() { }
+    public void meth42595() { }
+    public void meth42596() { }
+    public void meth42597() { }
+    public void meth42598() { }
+    public void meth42599() { }
+    public void meth42600() { }
+    public void meth42601() { }
+    public void meth42602() { }
+    public void meth42603() { }
+    public void meth42604() { }
+    public void meth42605() { }
+    public void meth42606() { }
+    public void meth42607() { }
+    public void meth42608() { }
+    public void meth42609() { }
+    public void meth42610() { }
+    public void meth42611() { }
+    public void meth42612() { }
+    public void meth42613() { }
+    public void meth42614() { }
+    public void meth42615() { }
+    public void meth42616() { }
+    public void meth42617() { }
+    public void meth42618() { }
+    public void meth42619() { }
+    public void meth42620() { }
+    public void meth42621() { }
+    public void meth42622() { }
+    public void meth42623() { }
+    public void meth42624() { }
+    public void meth42625() { }
+    public void meth42626() { }
+    public void meth42627() { }
+    public void meth42628() { }
+    public void meth42629() { }
+    public void meth42630() { }
+    public void meth42631() { }
+    public void meth42632() { }
+    public void meth42633() { }
+    public void meth42634() { }
+    public void meth42635() { }
+    public void meth42636() { }
+    public void meth42637() { }
+    public void meth42638() { }
+    public void meth42639() { }
+    public void meth42640() { }
+    public void meth42641() { }
+    public void meth42642() { }
+    public void meth42643() { }
+    public void meth42644() { }
+    public void meth42645() { }
+    public void meth42646() { }
+    public void meth42647() { }
+    public void meth42648() { }
+    public void meth42649() { }
+    public void meth42650() { }
+    public void meth42651() { }
+    public void meth42652() { }
+    public void meth42653() { }
+    public void meth42654() { }
+    public void meth42655() { }
+    public void meth42656() { }
+    public void meth42657() { }
+    public void meth42658() { }
+    public void meth42659() { }
+    public void meth42660() { }
+    public void meth42661() { }
+    public void meth42662() { }
+    public void meth42663() { }
+    public void meth42664() { }
+    public void meth42665() { }
+    public void meth42666() { }
+    public void meth42667() { }
+    public void meth42668() { }
+    public void meth42669() { }
+    public void meth42670() { }
+    public void meth42671() { }
+    public void meth42672() { }
+    public void meth42673() { }
+    public void meth42674() { }
+    public void meth42675() { }
+    public void meth42676() { }
+    public void meth42677() { }
+    public void meth42678() { }
+    public void meth42679() { }
+    public void meth42680() { }
+    public void meth42681() { }
+    public void meth42682() { }
+    public void meth42683() { }
+    public void meth42684() { }
+    public void meth42685() { }
+    public void meth42686() { }
+    public void meth42687() { }
+    public void meth42688() { }
+    public void meth42689() { }
+    public void meth42690() { }
+    public void meth42691() { }
+    public void meth42692() { }
+    public void meth42693() { }
+    public void meth42694() { }
+    public void meth42695() { }
+    public void meth42696() { }
+    public void meth42697() { }
+    public void meth42698() { }
+    public void meth42699() { }
+    public void meth42700() { }
+    public void meth42701() { }
+    public void meth42702() { }
+    public void meth42703() { }
+    public void meth42704() { }
+    public void meth42705() { }
+    public void meth42706() { }
+    public void meth42707() { }
+    public void meth42708() { }
+    public void meth42709() { }
+    public void meth42710() { }
+    public void meth42711() { }
+    public void meth42712() { }
+    public void meth42713() { }
+    public void meth42714() { }
+    public void meth42715() { }
+    public void meth42716() { }
+    public void meth42717() { }
+    public void meth42718() { }
+    public void meth42719() { }
+    public void meth42720() { }
+    public void meth42721() { }
+    public void meth42722() { }
+    public void meth42723() { }
+    public void meth42724() { }
+    public void meth42725() { }
+    public void meth42726() { }
+    public void meth42727() { }
+    public void meth42728() { }
+    public void meth42729() { }
+    public void meth42730() { }
+    public void meth42731() { }
+    public void meth42732() { }
+    public void meth42733() { }
+    public void meth42734() { }
+    public void meth42735() { }
+    public void meth42736() { }
+    public void meth42737() { }
+    public void meth42738() { }
+    public void meth42739() { }
+    public void meth42740() { }
+    public void meth42741() { }
+    public void meth42742() { }
+    public void meth42743() { }
+    public void meth42744() { }
+    public void meth42745() { }
+    public void meth42746() { }
+    public void meth42747() { }
+    public void meth42748() { }
+    public void meth42749() { }
+    public void meth42750() { }
+    public void meth42751() { }
+    public void meth42752() { }
+    public void meth42753() { }
+    public void meth42754() { }
+    public void meth42755() { }
+    public void meth42756() { }
+    public void meth42757() { }
+    public void meth42758() { }
+    public void meth42759() { }
+    public void meth42760() { }
+    public void meth42761() { }
+    public void meth42762() { }
+    public void meth42763() { }
+    public void meth42764() { }
+    public void meth42765() { }
+    public void meth42766() { }
+    public void meth42767() { }
+    public void meth42768() { }
+    public void meth42769() { }
+    public void meth42770() { }
+    public void meth42771() { }
+    public void meth42772() { }
+    public void meth42773() { }
+    public void meth42774() { }
+    public void meth42775() { }
+    public void meth42776() { }
+    public void meth42777() { }
+    public void meth42778() { }
+    public void meth42779() { }
+    public void meth42780() { }
+    public void meth42781() { }
+    public void meth42782() { }
+    public void meth42783() { }
+    public void meth42784() { }
+    public void meth42785() { }
+    public void meth42786() { }
+    public void meth42787() { }
+    public void meth42788() { }
+    public void meth42789() { }
+    public void meth42790() { }
+    public void meth42791() { }
+    public void meth42792() { }
+    public void meth42793() { }
+    public void meth42794() { }
+    public void meth42795() { }
+    public void meth42796() { }
+    public void meth42797() { }
+    public void meth42798() { }
+    public void meth42799() { }
+    public void meth42800() { }
+    public void meth42801() { }
+    public void meth42802() { }
+    public void meth42803() { }
+    public void meth42804() { }
+    public void meth42805() { }
+    public void meth42806() { }
+    public void meth42807() { }
+    public void meth42808() { }
+    public void meth42809() { }
+    public void meth42810() { }
+    public void meth42811() { }
+    public void meth42812() { }
+    public void meth42813() { }
+    public void meth42814() { }
+    public void meth42815() { }
+    public void meth42816() { }
+    public void meth42817() { }
+    public void meth42818() { }
+    public void meth42819() { }
+    public void meth42820() { }
+    public void meth42821() { }
+    public void meth42822() { }
+    public void meth42823() { }
+    public void meth42824() { }
+    public void meth42825() { }
+    public void meth42826() { }
+    public void meth42827() { }
+    public void meth42828() { }
+    public void meth42829() { }
+    public void meth42830() { }
+    public void meth42831() { }
+    public void meth42832() { }
+    public void meth42833() { }
+    public void meth42834() { }
+    public void meth42835() { }
+    public void meth42836() { }
+    public void meth42837() { }
+    public void meth42838() { }
+    public void meth42839() { }
+    public void meth42840() { }
+    public void meth42841() { }
+    public void meth42842() { }
+    public void meth42843() { }
+    public void meth42844() { }
+    public void meth42845() { }
+    public void meth42846() { }
+    public void meth42847() { }
+    public void meth42848() { }
+    public void meth42849() { }
+    public void meth42850() { }
+    public void meth42851() { }
+    public void meth42852() { }
+    public void meth42853() { }
+    public void meth42854() { }
+    public void meth42855() { }
+    public void meth42856() { }
+    public void meth42857() { }
+    public void meth42858() { }
+    public void meth42859() { }
+    public void meth42860() { }
+    public void meth42861() { }
+    public void meth42862() { }
+    public void meth42863() { }
+    public void meth42864() { }
+    public void meth42865() { }
+    public void meth42866() { }
+    public void meth42867() { }
+    public void meth42868() { }
+    public void meth42869() { }
+    public void meth42870() { }
+    public void meth42871() { }
+    public void meth42872() { }
+    public void meth42873() { }
+    public void meth42874() { }
+    public void meth42875() { }
+    public void meth42876() { }
+    public void meth42877() { }
+    public void meth42878() { }
+    public void meth42879() { }
+    public void meth42880() { }
+    public void meth42881() { }
+    public void meth42882() { }
+    public void meth42883() { }
+    public void meth42884() { }
+    public void meth42885() { }
+    public void meth42886() { }
+    public void meth42887() { }
+    public void meth42888() { }
+    public void meth42889() { }
+    public void meth42890() { }
+    public void meth42891() { }
+    public void meth42892() { }
+    public void meth42893() { }
+    public void meth42894() { }
+    public void meth42895() { }
+    public void meth42896() { }
+    public void meth42897() { }
+    public void meth42898() { }
+    public void meth42899() { }
+    public void meth42900() { }
+    public void meth42901() { }
+    public void meth42902() { }
+    public void meth42903() { }
+    public void meth42904() { }
+    public void meth42905() { }
+    public void meth42906() { }
+    public void meth42907() { }
+    public void meth42908() { }
+    public void meth42909() { }
+    public void meth42910() { }
+    public void meth42911() { }
+    public void meth42912() { }
+    public void meth42913() { }
+    public void meth42914() { }
+    public void meth42915() { }
+    public void meth42916() { }
+    public void meth42917() { }
+    public void meth42918() { }
+    public void meth42919() { }
+    public void meth42920() { }
+    public void meth42921() { }
+    public void meth42922() { }
+    public void meth42923() { }
+    public void meth42924() { }
+    public void meth42925() { }
+    public void meth42926() { }
+    public void meth42927() { }
+    public void meth42928() { }
+    public void meth42929() { }
+    public void meth42930() { }
+    public void meth42931() { }
+    public void meth42932() { }
+    public void meth42933() { }
+    public void meth42934() { }
+    public void meth42935() { }
+    public void meth42936() { }
+    public void meth42937() { }
+    public void meth42938() { }
+    public void meth42939() { }
+    public void meth42940() { }
+    public void meth42941() { }
+    public void meth42942() { }
+    public void meth42943() { }
+    public void meth42944() { }
+    public void meth42945() { }
+    public void meth42946() { }
+    public void meth42947() { }
+    public void meth42948() { }
+    public void meth42949() { }
+    public void meth42950() { }
+    public void meth42951() { }
+    public void meth42952() { }
+    public void meth42953() { }
+    public void meth42954() { }
+    public void meth42955() { }
+    public void meth42956() { }
+    public void meth42957() { }
+    public void meth42958() { }
+    public void meth42959() { }
+    public void meth42960() { }
+    public void meth42961() { }
+    public void meth42962() { }
+    public void meth42963() { }
+    public void meth42964() { }
+    public void meth42965() { }
+    public void meth42966() { }
+    public void meth42967() { }
+    public void meth42968() { }
+    public void meth42969() { }
+    public void meth42970() { }
+    public void meth42971() { }
+    public void meth42972() { }
+    public void meth42973() { }
+    public void meth42974() { }
+    public void meth42975() { }
+    public void meth42976() { }
+    public void meth42977() { }
+    public void meth42978() { }
+    public void meth42979() { }
+    public void meth42980() { }
+    public void meth42981() { }
+    public void meth42982() { }
+    public void meth42983() { }
+    public void meth42984() { }
+    public void meth42985() { }
+    public void meth42986() { }
+    public void meth42987() { }
+    public void meth42988() { }
+    public void meth42989() { }
+    public void meth42990() { }
+    public void meth42991() { }
+    public void meth42992() { }
+    public void meth42993() { }
+    public void meth42994() { }
+    public void meth42995() { }
+    public void meth42996() { }
+    public void meth42997() { }
+    public void meth42998() { }
+    public void meth42999() { }
+    public void meth43000() { }
+    public void meth43001() { }
+    public void meth43002() { }
+    public void meth43003() { }
+    public void meth43004() { }
+    public void meth43005() { }
+    public void meth43006() { }
+    public void meth43007() { }
+    public void meth43008() { }
+    public void meth43009() { }
+    public void meth43010() { }
+    public void meth43011() { }
+    public void meth43012() { }
+    public void meth43013() { }
+    public void meth43014() { }
+    public void meth43015() { }
+    public void meth43016() { }
+    public void meth43017() { }
+    public void meth43018() { }
+    public void meth43019() { }
+    public void meth43020() { }
+    public void meth43021() { }
+    public void meth43022() { }
+    public void meth43023() { }
+    public void meth43024() { }
+    public void meth43025() { }
+    public void meth43026() { }
+    public void meth43027() { }
+    public void meth43028() { }
+    public void meth43029() { }
+    public void meth43030() { }
+    public void meth43031() { }
+    public void meth43032() { }
+    public void meth43033() { }
+    public void meth43034() { }
+    public void meth43035() { }
+    public void meth43036() { }
+    public void meth43037() { }
+    public void meth43038() { }
+    public void meth43039() { }
+    public void meth43040() { }
+    public void meth43041() { }
+    public void meth43042() { }
+    public void meth43043() { }
+    public void meth43044() { }
+    public void meth43045() { }
+    public void meth43046() { }
+    public void meth43047() { }
+    public void meth43048() { }
+    public void meth43049() { }
+    public void meth43050() { }
+    public void meth43051() { }
+    public void meth43052() { }
+    public void meth43053() { }
+    public void meth43054() { }
+    public void meth43055() { }
+    public void meth43056() { }
+    public void meth43057() { }
+    public void meth43058() { }
+    public void meth43059() { }
+    public void meth43060() { }
+    public void meth43061() { }
+    public void meth43062() { }
+    public void meth43063() { }
+    public void meth43064() { }
+    public void meth43065() { }
+    public void meth43066() { }
+    public void meth43067() { }
+    public void meth43068() { }
+    public void meth43069() { }
+    public void meth43070() { }
+    public void meth43071() { }
+    public void meth43072() { }
+    public void meth43073() { }
+    public void meth43074() { }
+    public void meth43075() { }
+    public void meth43076() { }
+    public void meth43077() { }
+    public void meth43078() { }
+    public void meth43079() { }
+    public void meth43080() { }
+    public void meth43081() { }
+    public void meth43082() { }
+    public void meth43083() { }
+    public void meth43084() { }
+    public void meth43085() { }
+    public void meth43086() { }
+    public void meth43087() { }
+    public void meth43088() { }
+    public void meth43089() { }
+    public void meth43090() { }
+    public void meth43091() { }
+    public void meth43092() { }
+    public void meth43093() { }
+    public void meth43094() { }
+    public void meth43095() { }
+    public void meth43096() { }
+    public void meth43097() { }
+    public void meth43098() { }
+    public void meth43099() { }
+    public void meth43100() { }
+    public void meth43101() { }
+    public void meth43102() { }
+    public void meth43103() { }
+    public void meth43104() { }
+    public void meth43105() { }
+    public void meth43106() { }
+    public void meth43107() { }
+    public void meth43108() { }
+    public void meth43109() { }
+    public void meth43110() { }
+    public void meth43111() { }
+    public void meth43112() { }
+    public void meth43113() { }
+    public void meth43114() { }
+    public void meth43115() { }
+    public void meth43116() { }
+    public void meth43117() { }
+    public void meth43118() { }
+    public void meth43119() { }
+    public void meth43120() { }
+    public void meth43121() { }
+    public void meth43122() { }
+    public void meth43123() { }
+    public void meth43124() { }
+    public void meth43125() { }
+    public void meth43126() { }
+    public void meth43127() { }
+    public void meth43128() { }
+    public void meth43129() { }
+    public void meth43130() { }
+    public void meth43131() { }
+    public void meth43132() { }
+    public void meth43133() { }
+    public void meth43134() { }
+    public void meth43135() { }
+    public void meth43136() { }
+    public void meth43137() { }
+    public void meth43138() { }
+    public void meth43139() { }
+    public void meth43140() { }
+    public void meth43141() { }
+    public void meth43142() { }
+    public void meth43143() { }
+    public void meth43144() { }
+    public void meth43145() { }
+    public void meth43146() { }
+    public void meth43147() { }
+    public void meth43148() { }
+    public void meth43149() { }
+    public void meth43150() { }
+    public void meth43151() { }
+    public void meth43152() { }
+    public void meth43153() { }
+    public void meth43154() { }
+    public void meth43155() { }
+    public void meth43156() { }
+    public void meth43157() { }
+    public void meth43158() { }
+    public void meth43159() { }
+    public void meth43160() { }
+    public void meth43161() { }
+    public void meth43162() { }
+    public void meth43163() { }
+    public void meth43164() { }
+    public void meth43165() { }
+    public void meth43166() { }
+    public void meth43167() { }
+    public void meth43168() { }
+    public void meth43169() { }
+    public void meth43170() { }
+    public void meth43171() { }
+    public void meth43172() { }
+    public void meth43173() { }
+    public void meth43174() { }
+    public void meth43175() { }
+    public void meth43176() { }
+    public void meth43177() { }
+    public void meth43178() { }
+    public void meth43179() { }
+    public void meth43180() { }
+    public void meth43181() { }
+    public void meth43182() { }
+    public void meth43183() { }
+    public void meth43184() { }
+    public void meth43185() { }
+    public void meth43186() { }
+    public void meth43187() { }
+    public void meth43188() { }
+    public void meth43189() { }
+    public void meth43190() { }
+    public void meth43191() { }
+    public void meth43192() { }
+    public void meth43193() { }
+    public void meth43194() { }
+    public void meth43195() { }
+    public void meth43196() { }
+    public void meth43197() { }
+    public void meth43198() { }
+    public void meth43199() { }
+    public void meth43200() { }
+    public void meth43201() { }
+    public void meth43202() { }
+    public void meth43203() { }
+    public void meth43204() { }
+    public void meth43205() { }
+    public void meth43206() { }
+    public void meth43207() { }
+    public void meth43208() { }
+    public void meth43209() { }
+    public void meth43210() { }
+    public void meth43211() { }
+    public void meth43212() { }
+    public void meth43213() { }
+    public void meth43214() { }
+    public void meth43215() { }
+    public void meth43216() { }
+    public void meth43217() { }
+    public void meth43218() { }
+    public void meth43219() { }
+    public void meth43220() { }
+    public void meth43221() { }
+    public void meth43222() { }
+    public void meth43223() { }
+    public void meth43224() { }
+    public void meth43225() { }
+    public void meth43226() { }
+    public void meth43227() { }
+    public void meth43228() { }
+    public void meth43229() { }
+    public void meth43230() { }
+    public void meth43231() { }
+    public void meth43232() { }
+    public void meth43233() { }
+    public void meth43234() { }
+    public void meth43235() { }
+    public void meth43236() { }
+    public void meth43237() { }
+    public void meth43238() { }
+    public void meth43239() { }
+    public void meth43240() { }
+    public void meth43241() { }
+    public void meth43242() { }
+    public void meth43243() { }
+    public void meth43244() { }
+    public void meth43245() { }
+    public void meth43246() { }
+    public void meth43247() { }
+    public void meth43248() { }
+    public void meth43249() { }
+    public void meth43250() { }
+    public void meth43251() { }
+    public void meth43252() { }
+    public void meth43253() { }
+    public void meth43254() { }
+    public void meth43255() { }
+    public void meth43256() { }
+    public void meth43257() { }
+    public void meth43258() { }
+    public void meth43259() { }
+    public void meth43260() { }
+    public void meth43261() { }
+    public void meth43262() { }
+    public void meth43263() { }
+    public void meth43264() { }
+    public void meth43265() { }
+    public void meth43266() { }
+    public void meth43267() { }
+    public void meth43268() { }
+    public void meth43269() { }
+    public void meth43270() { }
+    public void meth43271() { }
+    public void meth43272() { }
+    public void meth43273() { }
+    public void meth43274() { }
+    public void meth43275() { }
+    public void meth43276() { }
+    public void meth43277() { }
+    public void meth43278() { }
+    public void meth43279() { }
+    public void meth43280() { }
+    public void meth43281() { }
+    public void meth43282() { }
+    public void meth43283() { }
+    public void meth43284() { }
+    public void meth43285() { }
+    public void meth43286() { }
+    public void meth43287() { }
+    public void meth43288() { }
+    public void meth43289() { }
+    public void meth43290() { }
+    public void meth43291() { }
+    public void meth43292() { }
+    public void meth43293() { }
+    public void meth43294() { }
+    public void meth43295() { }
+    public void meth43296() { }
+    public void meth43297() { }
+    public void meth43298() { }
+    public void meth43299() { }
+    public void meth43300() { }
+    public void meth43301() { }
+    public void meth43302() { }
+    public void meth43303() { }
+    public void meth43304() { }
+    public void meth43305() { }
+    public void meth43306() { }
+    public void meth43307() { }
+    public void meth43308() { }
+    public void meth43309() { }
+    public void meth43310() { }
+    public void meth43311() { }
+    public void meth43312() { }
+    public void meth43313() { }
+    public void meth43314() { }
+    public void meth43315() { }
+    public void meth43316() { }
+    public void meth43317() { }
+    public void meth43318() { }
+    public void meth43319() { }
+    public void meth43320() { }
+    public void meth43321() { }
+    public void meth43322() { }
+    public void meth43323() { }
+    public void meth43324() { }
+    public void meth43325() { }
+    public void meth43326() { }
+    public void meth43327() { }
+    public void meth43328() { }
+    public void meth43329() { }
+    public void meth43330() { }
+    public void meth43331() { }
+    public void meth43332() { }
+    public void meth43333() { }
+    public void meth43334() { }
+    public void meth43335() { }
+    public void meth43336() { }
+    public void meth43337() { }
+    public void meth43338() { }
+    public void meth43339() { }
+    public void meth43340() { }
+    public void meth43341() { }
+    public void meth43342() { }
+    public void meth43343() { }
+    public void meth43344() { }
+    public void meth43345() { }
+    public void meth43346() { }
+    public void meth43347() { }
+    public void meth43348() { }
+    public void meth43349() { }
+    public void meth43350() { }
+    public void meth43351() { }
+    public void meth43352() { }
+    public void meth43353() { }
+    public void meth43354() { }
+    public void meth43355() { }
+    public void meth43356() { }
+    public void meth43357() { }
+    public void meth43358() { }
+    public void meth43359() { }
+    public void meth43360() { }
+    public void meth43361() { }
+    public void meth43362() { }
+    public void meth43363() { }
+    public void meth43364() { }
+    public void meth43365() { }
+    public void meth43366() { }
+    public void meth43367() { }
+    public void meth43368() { }
+    public void meth43369() { }
+    public void meth43370() { }
+    public void meth43371() { }
+    public void meth43372() { }
+    public void meth43373() { }
+    public void meth43374() { }
+    public void meth43375() { }
+    public void meth43376() { }
+    public void meth43377() { }
+    public void meth43378() { }
+    public void meth43379() { }
+    public void meth43380() { }
+    public void meth43381() { }
+    public void meth43382() { }
+    public void meth43383() { }
+    public void meth43384() { }
+    public void meth43385() { }
+    public void meth43386() { }
+    public void meth43387() { }
+    public void meth43388() { }
+    public void meth43389() { }
+    public void meth43390() { }
+    public void meth43391() { }
+    public void meth43392() { }
+    public void meth43393() { }
+    public void meth43394() { }
+    public void meth43395() { }
+    public void meth43396() { }
+    public void meth43397() { }
+    public void meth43398() { }
+    public void meth43399() { }
+    public void meth43400() { }
+    public void meth43401() { }
+    public void meth43402() { }
+    public void meth43403() { }
+    public void meth43404() { }
+    public void meth43405() { }
+    public void meth43406() { }
+    public void meth43407() { }
+    public void meth43408() { }
+    public void meth43409() { }
+    public void meth43410() { }
+    public void meth43411() { }
+    public void meth43412() { }
+    public void meth43413() { }
+    public void meth43414() { }
+    public void meth43415() { }
+    public void meth43416() { }
+    public void meth43417() { }
+    public void meth43418() { }
+    public void meth43419() { }
+    public void meth43420() { }
+    public void meth43421() { }
+    public void meth43422() { }
+    public void meth43423() { }
+    public void meth43424() { }
+    public void meth43425() { }
+    public void meth43426() { }
+    public void meth43427() { }
+    public void meth43428() { }
+    public void meth43429() { }
+    public void meth43430() { }
+    public void meth43431() { }
+    public void meth43432() { }
+    public void meth43433() { }
+    public void meth43434() { }
+    public void meth43435() { }
+    public void meth43436() { }
+    public void meth43437() { }
+    public void meth43438() { }
+    public void meth43439() { }
+    public void meth43440() { }
+    public void meth43441() { }
+    public void meth43442() { }
+    public void meth43443() { }
+    public void meth43444() { }
+    public void meth43445() { }
+    public void meth43446() { }
+    public void meth43447() { }
+    public void meth43448() { }
+    public void meth43449() { }
+    public void meth43450() { }
+    public void meth43451() { }
+    public void meth43452() { }
+    public void meth43453() { }
+    public void meth43454() { }
+    public void meth43455() { }
+    public void meth43456() { }
+    public void meth43457() { }
+    public void meth43458() { }
+    public void meth43459() { }
+    public void meth43460() { }
+    public void meth43461() { }
+    public void meth43462() { }
+    public void meth43463() { }
+    public void meth43464() { }
+    public void meth43465() { }
+    public void meth43466() { }
+    public void meth43467() { }
+    public void meth43468() { }
+    public void meth43469() { }
+    public void meth43470() { }
+    public void meth43471() { }
+    public void meth43472() { }
+    public void meth43473() { }
+    public void meth43474() { }
+    public void meth43475() { }
+    public void meth43476() { }
+    public void meth43477() { }
+    public void meth43478() { }
+    public void meth43479() { }
+    public void meth43480() { }
+    public void meth43481() { }
+    public void meth43482() { }
+    public void meth43483() { }
+    public void meth43484() { }
+    public void meth43485() { }
+    public void meth43486() { }
+    public void meth43487() { }
+    public void meth43488() { }
+    public void meth43489() { }
+    public void meth43490() { }
+    public void meth43491() { }
+    public void meth43492() { }
+    public void meth43493() { }
+    public void meth43494() { }
+    public void meth43495() { }
+    public void meth43496() { }
+    public void meth43497() { }
+    public void meth43498() { }
+    public void meth43499() { }
+    public void meth43500() { }
+    public void meth43501() { }
+    public void meth43502() { }
+    public void meth43503() { }
+    public void meth43504() { }
+    public void meth43505() { }
+    public void meth43506() { }
+    public void meth43507() { }
+    public void meth43508() { }
+    public void meth43509() { }
+    public void meth43510() { }
+    public void meth43511() { }
+    public void meth43512() { }
+    public void meth43513() { }
+    public void meth43514() { }
+    public void meth43515() { }
+    public void meth43516() { }
+    public void meth43517() { }
+    public void meth43518() { }
+    public void meth43519() { }
+    public void meth43520() { }
+    public void meth43521() { }
+    public void meth43522() { }
+    public void meth43523() { }
+    public void meth43524() { }
+    public void meth43525() { }
+    public void meth43526() { }
+    public void meth43527() { }
+    public void meth43528() { }
+    public void meth43529() { }
+    public void meth43530() { }
+    public void meth43531() { }
+    public void meth43532() { }
+    public void meth43533() { }
+    public void meth43534() { }
+    public void meth43535() { }
+    public void meth43536() { }
+    public void meth43537() { }
+    public void meth43538() { }
+    public void meth43539() { }
+    public void meth43540() { }
+    public void meth43541() { }
+    public void meth43542() { }
+    public void meth43543() { }
+    public void meth43544() { }
+    public void meth43545() { }
+    public void meth43546() { }
+    public void meth43547() { }
+    public void meth43548() { }
+    public void meth43549() { }
+    public void meth43550() { }
+    public void meth43551() { }
+    public void meth43552() { }
+    public void meth43553() { }
+    public void meth43554() { }
+    public void meth43555() { }
+    public void meth43556() { }
+    public void meth43557() { }
+    public void meth43558() { }
+    public void meth43559() { }
+    public void meth43560() { }
+    public void meth43561() { }
+    public void meth43562() { }
+    public void meth43563() { }
+    public void meth43564() { }
+    public void meth43565() { }
+    public void meth43566() { }
+    public void meth43567() { }
+    public void meth43568() { }
+    public void meth43569() { }
+    public void meth43570() { }
+    public void meth43571() { }
+    public void meth43572() { }
+    public void meth43573() { }
+    public void meth43574() { }
+    public void meth43575() { }
+    public void meth43576() { }
+    public void meth43577() { }
+    public void meth43578() { }
+    public void meth43579() { }
+    public void meth43580() { }
+    public void meth43581() { }
+    public void meth43582() { }
+    public void meth43583() { }
+    public void meth43584() { }
+    public void meth43585() { }
+    public void meth43586() { }
+    public void meth43587() { }
+    public void meth43588() { }
+    public void meth43589() { }
+    public void meth43590() { }
+    public void meth43591() { }
+    public void meth43592() { }
+    public void meth43593() { }
+    public void meth43594() { }
+    public void meth43595() { }
+    public void meth43596() { }
+    public void meth43597() { }
+    public void meth43598() { }
+    public void meth43599() { }
+    public void meth43600() { }
+    public void meth43601() { }
+    public void meth43602() { }
+    public void meth43603() { }
+    public void meth43604() { }
+    public void meth43605() { }
+    public void meth43606() { }
+    public void meth43607() { }
+    public void meth43608() { }
+    public void meth43609() { }
+    public void meth43610() { }
+    public void meth43611() { }
+    public void meth43612() { }
+    public void meth43613() { }
+    public void meth43614() { }
+    public void meth43615() { }
+    public void meth43616() { }
+    public void meth43617() { }
+    public void meth43618() { }
+    public void meth43619() { }
+    public void meth43620() { }
+    public void meth43621() { }
+    public void meth43622() { }
+    public void meth43623() { }
+    public void meth43624() { }
+    public void meth43625() { }
+    public void meth43626() { }
+    public void meth43627() { }
+    public void meth43628() { }
+    public void meth43629() { }
+    public void meth43630() { }
+    public void meth43631() { }
+    public void meth43632() { }
+    public void meth43633() { }
+    public void meth43634() { }
+    public void meth43635() { }
+    public void meth43636() { }
+    public void meth43637() { }
+    public void meth43638() { }
+    public void meth43639() { }
+    public void meth43640() { }
+    public void meth43641() { }
+    public void meth43642() { }
+    public void meth43643() { }
+    public void meth43644() { }
+    public void meth43645() { }
+    public void meth43646() { }
+    public void meth43647() { }
+    public void meth43648() { }
+    public void meth43649() { }
+    public void meth43650() { }
+    public void meth43651() { }
+    public void meth43652() { }
+    public void meth43653() { }
+    public void meth43654() { }
+    public void meth43655() { }
+    public void meth43656() { }
+    public void meth43657() { }
+    public void meth43658() { }
+    public void meth43659() { }
+    public void meth43660() { }
+    public void meth43661() { }
+    public void meth43662() { }
+    public void meth43663() { }
+    public void meth43664() { }
+    public void meth43665() { }
+    public void meth43666() { }
+    public void meth43667() { }
+    public void meth43668() { }
+    public void meth43669() { }
+    public void meth43670() { }
+    public void meth43671() { }
+    public void meth43672() { }
+    public void meth43673() { }
+    public void meth43674() { }
+    public void meth43675() { }
+    public void meth43676() { }
+    public void meth43677() { }
+    public void meth43678() { }
+    public void meth43679() { }
+    public void meth43680() { }
+    public void meth43681() { }
+    public void meth43682() { }
+    public void meth43683() { }
+    public void meth43684() { }
+    public void meth43685() { }
+    public void meth43686() { }
+    public void meth43687() { }
+    public void meth43688() { }
+    public void meth43689() { }
+    public void meth43690() { }
+    public void meth43691() { }
+    public void meth43692() { }
+    public void meth43693() { }
+    public void meth43694() { }
+    public void meth43695() { }
+    public void meth43696() { }
+    public void meth43697() { }
+    public void meth43698() { }
+    public void meth43699() { }
+    public void meth43700() { }
+    public void meth43701() { }
+    public void meth43702() { }
+    public void meth43703() { }
+    public void meth43704() { }
+    public void meth43705() { }
+    public void meth43706() { }
+    public void meth43707() { }
+    public void meth43708() { }
+    public void meth43709() { }
+    public void meth43710() { }
+    public void meth43711() { }
+    public void meth43712() { }
+    public void meth43713() { }
+    public void meth43714() { }
+    public void meth43715() { }
+    public void meth43716() { }
+    public void meth43717() { }
+    public void meth43718() { }
+    public void meth43719() { }
+    public void meth43720() { }
+    public void meth43721() { }
+    public void meth43722() { }
+    public void meth43723() { }
+    public void meth43724() { }
+    public void meth43725() { }
+    public void meth43726() { }
+    public void meth43727() { }
+    public void meth43728() { }
+    public void meth43729() { }
+    public void meth43730() { }
+    public void meth43731() { }
+    public void meth43732() { }
+    public void meth43733() { }
+    public void meth43734() { }
+    public void meth43735() { }
+    public void meth43736() { }
+    public void meth43737() { }
+    public void meth43738() { }
+    public void meth43739() { }
+    public void meth43740() { }
+    public void meth43741() { }
+    public void meth43742() { }
+    public void meth43743() { }
+    public void meth43744() { }
+    public void meth43745() { }
+    public void meth43746() { }
+    public void meth43747() { }
+    public void meth43748() { }
+    public void meth43749() { }
+    public void meth43750() { }
+    public void meth43751() { }
+    public void meth43752() { }
+    public void meth43753() { }
+    public void meth43754() { }
+    public void meth43755() { }
+    public void meth43756() { }
+    public void meth43757() { }
+    public void meth43758() { }
+    public void meth43759() { }
+    public void meth43760() { }
+    public void meth43761() { }
+    public void meth43762() { }
+    public void meth43763() { }
+    public void meth43764() { }
+    public void meth43765() { }
+    public void meth43766() { }
+    public void meth43767() { }
+    public void meth43768() { }
+    public void meth43769() { }
+    public void meth43770() { }
+    public void meth43771() { }
+    public void meth43772() { }
+    public void meth43773() { }
+    public void meth43774() { }
+    public void meth43775() { }
+    public void meth43776() { }
+    public void meth43777() { }
+    public void meth43778() { }
+    public void meth43779() { }
+    public void meth43780() { }
+    public void meth43781() { }
+    public void meth43782() { }
+    public void meth43783() { }
+    public void meth43784() { }
+    public void meth43785() { }
+    public void meth43786() { }
+    public void meth43787() { }
+    public void meth43788() { }
+    public void meth43789() { }
+    public void meth43790() { }
+    public void meth43791() { }
+    public void meth43792() { }
+    public void meth43793() { }
+    public void meth43794() { }
+    public void meth43795() { }
+    public void meth43796() { }
+    public void meth43797() { }
+    public void meth43798() { }
+    public void meth43799() { }
+    public void meth43800() { }
+    public void meth43801() { }
+    public void meth43802() { }
+    public void meth43803() { }
+    public void meth43804() { }
+    public void meth43805() { }
+    public void meth43806() { }
+    public void meth43807() { }
+    public void meth43808() { }
+    public void meth43809() { }
+    public void meth43810() { }
+    public void meth43811() { }
+    public void meth43812() { }
+    public void meth43813() { }
+    public void meth43814() { }
+    public void meth43815() { }
+    public void meth43816() { }
+    public void meth43817() { }
+    public void meth43818() { }
+    public void meth43819() { }
+    public void meth43820() { }
+    public void meth43821() { }
+    public void meth43822() { }
+    public void meth43823() { }
+    public void meth43824() { }
+    public void meth43825() { }
+    public void meth43826() { }
+    public void meth43827() { }
+    public void meth43828() { }
+    public void meth43829() { }
+    public void meth43830() { }
+    public void meth43831() { }
+    public void meth43832() { }
+    public void meth43833() { }
+    public void meth43834() { }
+    public void meth43835() { }
+    public void meth43836() { }
+    public void meth43837() { }
+    public void meth43838() { }
+    public void meth43839() { }
+    public void meth43840() { }
+    public void meth43841() { }
+    public void meth43842() { }
+    public void meth43843() { }
+    public void meth43844() { }
+    public void meth43845() { }
+    public void meth43846() { }
+    public void meth43847() { }
+    public void meth43848() { }
+    public void meth43849() { }
+    public void meth43850() { }
+    public void meth43851() { }
+    public void meth43852() { }
+    public void meth43853() { }
+    public void meth43854() { }
+    public void meth43855() { }
+    public void meth43856() { }
+    public void meth43857() { }
+    public void meth43858() { }
+    public void meth43859() { }
+    public void meth43860() { }
+    public void meth43861() { }
+    public void meth43862() { }
+    public void meth43863() { }
+    public void meth43864() { }
+    public void meth43865() { }
+    public void meth43866() { }
+    public void meth43867() { }
+    public void meth43868() { }
+    public void meth43869() { }
+    public void meth43870() { }
+    public void meth43871() { }
+    public void meth43872() { }
+    public void meth43873() { }
+    public void meth43874() { }
+    public void meth43875() { }
+    public void meth43876() { }
+    public void meth43877() { }
+    public void meth43878() { }
+    public void meth43879() { }
+    public void meth43880() { }
+    public void meth43881() { }
+    public void meth43882() { }
+    public void meth43883() { }
+    public void meth43884() { }
+    public void meth43885() { }
+    public void meth43886() { }
+    public void meth43887() { }
+    public void meth43888() { }
+    public void meth43889() { }
+    public void meth43890() { }
+    public void meth43891() { }
+    public void meth43892() { }
+    public void meth43893() { }
+    public void meth43894() { }
+    public void meth43895() { }
+    public void meth43896() { }
+    public void meth43897() { }
+    public void meth43898() { }
+    public void meth43899() { }
+    public void meth43900() { }
+    public void meth43901() { }
+    public void meth43902() { }
+    public void meth43903() { }
+    public void meth43904() { }
+    public void meth43905() { }
+    public void meth43906() { }
+    public void meth43907() { }
+    public void meth43908() { }
+    public void meth43909() { }
+    public void meth43910() { }
+    public void meth43911() { }
+    public void meth43912() { }
+    public void meth43913() { }
+    public void meth43914() { }
+    public void meth43915() { }
+    public void meth43916() { }
+    public void meth43917() { }
+    public void meth43918() { }
+    public void meth43919() { }
+    public void meth43920() { }
+    public void meth43921() { }
+    public void meth43922() { }
+    public void meth43923() { }
+    public void meth43924() { }
+    public void meth43925() { }
+    public void meth43926() { }
+    public void meth43927() { }
+    public void meth43928() { }
+    public void meth43929() { }
+    public void meth43930() { }
+    public void meth43931() { }
+    public void meth43932() { }
+    public void meth43933() { }
+    public void meth43934() { }
+    public void meth43935() { }
+    public void meth43936() { }
+    public void meth43937() { }
+    public void meth43938() { }
+    public void meth43939() { }
+    public void meth43940() { }
+    public void meth43941() { }
+    public void meth43942() { }
+    public void meth43943() { }
+    public void meth43944() { }
+    public void meth43945() { }
+    public void meth43946() { }
+    public void meth43947() { }
+    public void meth43948() { }
+    public void meth43949() { }
+    public void meth43950() { }
+    public void meth43951() { }
+    public void meth43952() { }
+    public void meth43953() { }
+    public void meth43954() { }
+    public void meth43955() { }
+    public void meth43956() { }
+    public void meth43957() { }
+    public void meth43958() { }
+    public void meth43959() { }
+    public void meth43960() { }
+    public void meth43961() { }
+    public void meth43962() { }
+    public void meth43963() { }
+    public void meth43964() { }
+    public void meth43965() { }
+    public void meth43966() { }
+    public void meth43967() { }
+    public void meth43968() { }
+    public void meth43969() { }
+    public void meth43970() { }
+    public void meth43971() { }
+    public void meth43972() { }
+    public void meth43973() { }
+    public void meth43974() { }
+    public void meth43975() { }
+    public void meth43976() { }
+    public void meth43977() { }
+    public void meth43978() { }
+    public void meth43979() { }
+    public void meth43980() { }
+    public void meth43981() { }
+    public void meth43982() { }
+    public void meth43983() { }
+    public void meth43984() { }
+    public void meth43985() { }
+    public void meth43986() { }
+    public void meth43987() { }
+    public void meth43988() { }
+    public void meth43989() { }
+    public void meth43990() { }
+    public void meth43991() { }
+    public void meth43992() { }
+    public void meth43993() { }
+    public void meth43994() { }
+    public void meth43995() { }
+    public void meth43996() { }
+    public void meth43997() { }
+    public void meth43998() { }
+    public void meth43999() { }
+    public void meth44000() { }
+    public void meth44001() { }
+    public void meth44002() { }
+    public void meth44003() { }
+    public void meth44004() { }
+    public void meth44005() { }
+    public void meth44006() { }
+    public void meth44007() { }
+    public void meth44008() { }
+    public void meth44009() { }
+    public void meth44010() { }
+    public void meth44011() { }
+    public void meth44012() { }
+    public void meth44013() { }
+    public void meth44014() { }
+    public void meth44015() { }
+    public void meth44016() { }
+    public void meth44017() { }
+    public void meth44018() { }
+    public void meth44019() { }
+    public void meth44020() { }
+    public void meth44021() { }
+    public void meth44022() { }
+    public void meth44023() { }
+    public void meth44024() { }
+    public void meth44025() { }
+    public void meth44026() { }
+    public void meth44027() { }
+    public void meth44028() { }
+    public void meth44029() { }
+    public void meth44030() { }
+    public void meth44031() { }
+    public void meth44032() { }
+    public void meth44033() { }
+    public void meth44034() { }
+    public void meth44035() { }
+    public void meth44036() { }
+    public void meth44037() { }
+    public void meth44038() { }
+    public void meth44039() { }
+    public void meth44040() { }
+    public void meth44041() { }
+    public void meth44042() { }
+    public void meth44043() { }
+    public void meth44044() { }
+    public void meth44045() { }
+    public void meth44046() { }
+    public void meth44047() { }
+    public void meth44048() { }
+    public void meth44049() { }
+    public void meth44050() { }
+    public void meth44051() { }
+    public void meth44052() { }
+    public void meth44053() { }
+    public void meth44054() { }
+    public void meth44055() { }
+    public void meth44056() { }
+    public void meth44057() { }
+    public void meth44058() { }
+    public void meth44059() { }
+    public void meth44060() { }
+    public void meth44061() { }
+    public void meth44062() { }
+    public void meth44063() { }
+    public void meth44064() { }
+    public void meth44065() { }
+    public void meth44066() { }
+    public void meth44067() { }
+    public void meth44068() { }
+    public void meth44069() { }
+    public void meth44070() { }
+    public void meth44071() { }
+    public void meth44072() { }
+    public void meth44073() { }
+    public void meth44074() { }
+    public void meth44075() { }
+    public void meth44076() { }
+    public void meth44077() { }
+    public void meth44078() { }
+    public void meth44079() { }
+    public void meth44080() { }
+    public void meth44081() { }
+    public void meth44082() { }
+    public void meth44083() { }
+    public void meth44084() { }
+    public void meth44085() { }
+    public void meth44086() { }
+    public void meth44087() { }
+    public void meth44088() { }
+    public void meth44089() { }
+    public void meth44090() { }
+    public void meth44091() { }
+    public void meth44092() { }
+    public void meth44093() { }
+    public void meth44094() { }
+    public void meth44095() { }
+    public void meth44096() { }
+    public void meth44097() { }
+    public void meth44098() { }
+    public void meth44099() { }
+    public void meth44100() { }
+    public void meth44101() { }
+    public void meth44102() { }
+    public void meth44103() { }
+    public void meth44104() { }
+    public void meth44105() { }
+    public void meth44106() { }
+    public void meth44107() { }
+    public void meth44108() { }
+    public void meth44109() { }
+    public void meth44110() { }
+    public void meth44111() { }
+    public void meth44112() { }
+    public void meth44113() { }
+    public void meth44114() { }
+    public void meth44115() { }
+    public void meth44116() { }
+    public void meth44117() { }
+    public void meth44118() { }
+    public void meth44119() { }
+    public void meth44120() { }
+    public void meth44121() { }
+    public void meth44122() { }
+    public void meth44123() { }
+    public void meth44124() { }
+    public void meth44125() { }
+    public void meth44126() { }
+    public void meth44127() { }
+    public void meth44128() { }
+    public void meth44129() { }
+    public void meth44130() { }
+    public void meth44131() { }
+    public void meth44132() { }
+    public void meth44133() { }
+    public void meth44134() { }
+    public void meth44135() { }
+    public void meth44136() { }
+    public void meth44137() { }
+    public void meth44138() { }
+    public void meth44139() { }
+    public void meth44140() { }
+    public void meth44141() { }
+    public void meth44142() { }
+    public void meth44143() { }
+    public void meth44144() { }
+    public void meth44145() { }
+    public void meth44146() { }
+    public void meth44147() { }
+    public void meth44148() { }
+    public void meth44149() { }
+    public void meth44150() { }
+    public void meth44151() { }
+    public void meth44152() { }
+    public void meth44153() { }
+    public void meth44154() { }
+    public void meth44155() { }
+    public void meth44156() { }
+    public void meth44157() { }
+    public void meth44158() { }
+    public void meth44159() { }
+    public void meth44160() { }
+    public void meth44161() { }
+    public void meth44162() { }
+    public void meth44163() { }
+    public void meth44164() { }
+    public void meth44165() { }
+    public void meth44166() { }
+    public void meth44167() { }
+    public void meth44168() { }
+    public void meth44169() { }
+    public void meth44170() { }
+    public void meth44171() { }
+    public void meth44172() { }
+    public void meth44173() { }
+    public void meth44174() { }
+    public void meth44175() { }
+    public void meth44176() { }
+    public void meth44177() { }
+    public void meth44178() { }
+    public void meth44179() { }
+    public void meth44180() { }
+    public void meth44181() { }
+    public void meth44182() { }
+    public void meth44183() { }
+    public void meth44184() { }
+    public void meth44185() { }
+    public void meth44186() { }
+    public void meth44187() { }
+    public void meth44188() { }
+    public void meth44189() { }
+    public void meth44190() { }
+    public void meth44191() { }
+    public void meth44192() { }
+    public void meth44193() { }
+    public void meth44194() { }
+    public void meth44195() { }
+    public void meth44196() { }
+    public void meth44197() { }
+    public void meth44198() { }
+    public void meth44199() { }
+    public void meth44200() { }
+    public void meth44201() { }
+    public void meth44202() { }
+    public void meth44203() { }
+    public void meth44204() { }
+    public void meth44205() { }
+    public void meth44206() { }
+    public void meth44207() { }
+    public void meth44208() { }
+    public void meth44209() { }
+    public void meth44210() { }
+    public void meth44211() { }
+    public void meth44212() { }
+    public void meth44213() { }
+    public void meth44214() { }
+    public void meth44215() { }
+    public void meth44216() { }
+    public void meth44217() { }
+    public void meth44218() { }
+    public void meth44219() { }
+    public void meth44220() { }
+    public void meth44221() { }
+    public void meth44222() { }
+    public void meth44223() { }
+    public void meth44224() { }
+    public void meth44225() { }
+    public void meth44226() { }
+    public void meth44227() { }
+    public void meth44228() { }
+    public void meth44229() { }
+    public void meth44230() { }
+    public void meth44231() { }
+    public void meth44232() { }
+    public void meth44233() { }
+    public void meth44234() { }
+    public void meth44235() { }
+    public void meth44236() { }
+    public void meth44237() { }
+    public void meth44238() { }
+    public void meth44239() { }
+    public void meth44240() { }
+    public void meth44241() { }
+    public void meth44242() { }
+    public void meth44243() { }
+    public void meth44244() { }
+    public void meth44245() { }
+    public void meth44246() { }
+    public void meth44247() { }
+    public void meth44248() { }
+    public void meth44249() { }
+    public void meth44250() { }
+    public void meth44251() { }
+    public void meth44252() { }
+    public void meth44253() { }
+    public void meth44254() { }
+    public void meth44255() { }
+    public void meth44256() { }
+    public void meth44257() { }
+    public void meth44258() { }
+    public void meth44259() { }
+    public void meth44260() { }
+    public void meth44261() { }
+    public void meth44262() { }
+    public void meth44263() { }
+    public void meth44264() { }
+    public void meth44265() { }
+    public void meth44266() { }
+    public void meth44267() { }
+    public void meth44268() { }
+    public void meth44269() { }
+    public void meth44270() { }
+    public void meth44271() { }
+    public void meth44272() { }
+    public void meth44273() { }
+    public void meth44274() { }
+    public void meth44275() { }
+    public void meth44276() { }
+    public void meth44277() { }
+    public void meth44278() { }
+    public void meth44279() { }
+    public void meth44280() { }
+    public void meth44281() { }
+    public void meth44282() { }
+    public void meth44283() { }
+    public void meth44284() { }
+    public void meth44285() { }
+    public void meth44286() { }
+    public void meth44287() { }
+    public void meth44288() { }
+    public void meth44289() { }
+    public void meth44290() { }
+    public void meth44291() { }
+    public void meth44292() { }
+    public void meth44293() { }
+    public void meth44294() { }
+    public void meth44295() { }
+    public void meth44296() { }
+    public void meth44297() { }
+    public void meth44298() { }
+    public void meth44299() { }
+    public void meth44300() { }
+    public void meth44301() { }
+    public void meth44302() { }
+    public void meth44303() { }
+    public void meth44304() { }
+    public void meth44305() { }
+    public void meth44306() { }
+    public void meth44307() { }
+    public void meth44308() { }
+    public void meth44309() { }
+    public void meth44310() { }
+    public void meth44311() { }
+    public void meth44312() { }
+    public void meth44313() { }
+    public void meth44314() { }
+    public void meth44315() { }
+    public void meth44316() { }
+    public void meth44317() { }
+    public void meth44318() { }
+    public void meth44319() { }
+    public void meth44320() { }
+    public void meth44321() { }
+    public void meth44322() { }
+    public void meth44323() { }
+    public void meth44324() { }
+    public void meth44325() { }
+    public void meth44326() { }
+    public void meth44327() { }
+    public void meth44328() { }
+    public void meth44329() { }
+    public void meth44330() { }
+    public void meth44331() { }
+    public void meth44332() { }
+    public void meth44333() { }
+    public void meth44334() { }
+    public void meth44335() { }
+    public void meth44336() { }
+    public void meth44337() { }
+    public void meth44338() { }
+    public void meth44339() { }
+    public void meth44340() { }
+    public void meth44341() { }
+    public void meth44342() { }
+    public void meth44343() { }
+    public void meth44344() { }
+    public void meth44345() { }
+    public void meth44346() { }
+    public void meth44347() { }
+    public void meth44348() { }
+    public void meth44349() { }
+    public void meth44350() { }
+    public void meth44351() { }
+    public void meth44352() { }
+    public void meth44353() { }
+    public void meth44354() { }
+    public void meth44355() { }
+    public void meth44356() { }
+    public void meth44357() { }
+    public void meth44358() { }
+    public void meth44359() { }
+    public void meth44360() { }
+    public void meth44361() { }
+    public void meth44362() { }
+    public void meth44363() { }
+    public void meth44364() { }
+    public void meth44365() { }
+    public void meth44366() { }
+    public void meth44367() { }
+    public void meth44368() { }
+    public void meth44369() { }
+    public void meth44370() { }
+    public void meth44371() { }
+    public void meth44372() { }
+    public void meth44373() { }
+    public void meth44374() { }
+    public void meth44375() { }
+    public void meth44376() { }
+    public void meth44377() { }
+    public void meth44378() { }
+    public void meth44379() { }
+    public void meth44380() { }
+    public void meth44381() { }
+    public void meth44382() { }
+    public void meth44383() { }
+    public void meth44384() { }
+    public void meth44385() { }
+    public void meth44386() { }
+    public void meth44387() { }
+    public void meth44388() { }
+    public void meth44389() { }
+    public void meth44390() { }
+    public void meth44391() { }
+    public void meth44392() { }
+    public void meth44393() { }
+    public void meth44394() { }
+    public void meth44395() { }
+    public void meth44396() { }
+    public void meth44397() { }
+    public void meth44398() { }
+    public void meth44399() { }
+    public void meth44400() { }
+    public void meth44401() { }
+    public void meth44402() { }
+    public void meth44403() { }
+    public void meth44404() { }
+    public void meth44405() { }
+    public void meth44406() { }
+    public void meth44407() { }
+    public void meth44408() { }
+    public void meth44409() { }
+    public void meth44410() { }
+    public void meth44411() { }
+    public void meth44412() { }
+    public void meth44413() { }
+    public void meth44414() { }
+    public void meth44415() { }
+    public void meth44416() { }
+    public void meth44417() { }
+    public void meth44418() { }
+    public void meth44419() { }
+    public void meth44420() { }
+    public void meth44421() { }
+    public void meth44422() { }
+    public void meth44423() { }
+    public void meth44424() { }
+    public void meth44425() { }
+    public void meth44426() { }
+    public void meth44427() { }
+    public void meth44428() { }
+    public void meth44429() { }
+    public void meth44430() { }
+    public void meth44431() { }
+    public void meth44432() { }
+    public void meth44433() { }
+    public void meth44434() { }
+    public void meth44435() { }
+    public void meth44436() { }
+    public void meth44437() { }
+    public void meth44438() { }
+    public void meth44439() { }
+    public void meth44440() { }
+    public void meth44441() { }
+    public void meth44442() { }
+    public void meth44443() { }
+    public void meth44444() { }
+    public void meth44445() { }
+    public void meth44446() { }
+    public void meth44447() { }
+    public void meth44448() { }
+    public void meth44449() { }
+    public void meth44450() { }
+    public void meth44451() { }
+    public void meth44452() { }
+    public void meth44453() { }
+    public void meth44454() { }
+    public void meth44455() { }
+    public void meth44456() { }
+    public void meth44457() { }
+    public void meth44458() { }
+    public void meth44459() { }
+    public void meth44460() { }
+    public void meth44461() { }
+    public void meth44462() { }
+    public void meth44463() { }
+    public void meth44464() { }
+    public void meth44465() { }
+    public void meth44466() { }
+    public void meth44467() { }
+    public void meth44468() { }
+    public void meth44469() { }
+    public void meth44470() { }
+    public void meth44471() { }
+    public void meth44472() { }
+    public void meth44473() { }
+    public void meth44474() { }
+    public void meth44475() { }
+    public void meth44476() { }
+    public void meth44477() { }
+    public void meth44478() { }
+    public void meth44479() { }
+    public void meth44480() { }
+    public void meth44481() { }
+    public void meth44482() { }
+    public void meth44483() { }
+    public void meth44484() { }
+    public void meth44485() { }
+    public void meth44486() { }
+    public void meth44487() { }
+    public void meth44488() { }
+    public void meth44489() { }
+    public void meth44490() { }
+    public void meth44491() { }
+    public void meth44492() { }
+    public void meth44493() { }
+    public void meth44494() { }
+    public void meth44495() { }
+    public void meth44496() { }
+    public void meth44497() { }
+    public void meth44498() { }
+    public void meth44499() { }
+    public void meth44500() { }
+    public void meth44501() { }
+    public void meth44502() { }
+    public void meth44503() { }
+    public void meth44504() { }
+    public void meth44505() { }
+    public void meth44506() { }
+    public void meth44507() { }
+    public void meth44508() { }
+    public void meth44509() { }
+    public void meth44510() { }
+    public void meth44511() { }
+    public void meth44512() { }
+    public void meth44513() { }
+    public void meth44514() { }
+    public void meth44515() { }
+    public void meth44516() { }
+    public void meth44517() { }
+    public void meth44518() { }
+    public void meth44519() { }
+    public void meth44520() { }
+    public void meth44521() { }
+    public void meth44522() { }
+    public void meth44523() { }
+    public void meth44524() { }
+    public void meth44525() { }
+    public void meth44526() { }
+    public void meth44527() { }
+    public void meth44528() { }
+    public void meth44529() { }
+    public void meth44530() { }
+    public void meth44531() { }
+    public void meth44532() { }
+    public void meth44533() { }
+    public void meth44534() { }
+    public void meth44535() { }
+    public void meth44536() { }
+    public void meth44537() { }
+    public void meth44538() { }
+    public void meth44539() { }
+    public void meth44540() { }
+    public void meth44541() { }
+    public void meth44542() { }
+    public void meth44543() { }
+    public void meth44544() { }
+    public void meth44545() { }
+    public void meth44546() { }
+    public void meth44547() { }
+    public void meth44548() { }
+    public void meth44549() { }
+    public void meth44550() { }
+    public void meth44551() { }
+    public void meth44552() { }
+    public void meth44553() { }
+    public void meth44554() { }
+    public void meth44555() { }
+    public void meth44556() { }
+    public void meth44557() { }
+    public void meth44558() { }
+    public void meth44559() { }
+    public void meth44560() { }
+    public void meth44561() { }
+    public void meth44562() { }
+    public void meth44563() { }
+    public void meth44564() { }
+    public void meth44565() { }
+    public void meth44566() { }
+    public void meth44567() { }
+    public void meth44568() { }
+    public void meth44569() { }
+    public void meth44570() { }
+    public void meth44571() { }
+    public void meth44572() { }
+    public void meth44573() { }
+    public void meth44574() { }
+    public void meth44575() { }
+    public void meth44576() { }
+    public void meth44577() { }
+    public void meth44578() { }
+    public void meth44579() { }
+    public void meth44580() { }
+    public void meth44581() { }
+    public void meth44582() { }
+    public void meth44583() { }
+    public void meth44584() { }
+    public void meth44585() { }
+    public void meth44586() { }
+    public void meth44587() { }
+    public void meth44588() { }
+    public void meth44589() { }
+    public void meth44590() { }
+    public void meth44591() { }
+    public void meth44592() { }
+    public void meth44593() { }
+    public void meth44594() { }
+    public void meth44595() { }
+    public void meth44596() { }
+    public void meth44597() { }
+    public void meth44598() { }
+    public void meth44599() { }
+    public void meth44600() { }
+    public void meth44601() { }
+    public void meth44602() { }
+    public void meth44603() { }
+    public void meth44604() { }
+    public void meth44605() { }
+    public void meth44606() { }
+    public void meth44607() { }
+    public void meth44608() { }
+    public void meth44609() { }
+    public void meth44610() { }
+    public void meth44611() { }
+    public void meth44612() { }
+    public void meth44613() { }
+    public void meth44614() { }
+    public void meth44615() { }
+    public void meth44616() { }
+    public void meth44617() { }
+    public void meth44618() { }
+    public void meth44619() { }
+    public void meth44620() { }
+    public void meth44621() { }
+    public void meth44622() { }
+    public void meth44623() { }
+    public void meth44624() { }
+    public void meth44625() { }
+    public void meth44626() { }
+    public void meth44627() { }
+    public void meth44628() { }
+    public void meth44629() { }
+    public void meth44630() { }
+    public void meth44631() { }
+    public void meth44632() { }
+    public void meth44633() { }
+    public void meth44634() { }
+    public void meth44635() { }
+    public void meth44636() { }
+    public void meth44637() { }
+    public void meth44638() { }
+    public void meth44639() { }
+    public void meth44640() { }
+    public void meth44641() { }
+    public void meth44642() { }
+    public void meth44643() { }
+    public void meth44644() { }
+    public void meth44645() { }
+    public void meth44646() { }
+    public void meth44647() { }
+    public void meth44648() { }
+    public void meth44649() { }
+    public void meth44650() { }
+    public void meth44651() { }
+    public void meth44652() { }
+    public void meth44653() { }
+    public void meth44654() { }
+    public void meth44655() { }
+    public void meth44656() { }
+    public void meth44657() { }
+    public void meth44658() { }
+    public void meth44659() { }
+    public void meth44660() { }
+    public void meth44661() { }
+    public void meth44662() { }
+    public void meth44663() { }
+    public void meth44664() { }
+    public void meth44665() { }
+    public void meth44666() { }
+    public void meth44667() { }
+    public void meth44668() { }
+    public void meth44669() { }
+    public void meth44670() { }
+    public void meth44671() { }
+    public void meth44672() { }
+    public void meth44673() { }
+    public void meth44674() { }
+    public void meth44675() { }
+    public void meth44676() { }
+    public void meth44677() { }
+    public void meth44678() { }
+    public void meth44679() { }
+    public void meth44680() { }
+    public void meth44681() { }
+    public void meth44682() { }
+    public void meth44683() { }
+    public void meth44684() { }
+    public void meth44685() { }
+    public void meth44686() { }
+    public void meth44687() { }
+    public void meth44688() { }
+    public void meth44689() { }
+    public void meth44690() { }
+    public void meth44691() { }
+    public void meth44692() { }
+    public void meth44693() { }
+    public void meth44694() { }
+    public void meth44695() { }
+    public void meth44696() { }
+    public void meth44697() { }
+    public void meth44698() { }
+    public void meth44699() { }
+    public void meth44700() { }
+    public void meth44701() { }
+    public void meth44702() { }
+    public void meth44703() { }
+    public void meth44704() { }
+    public void meth44705() { }
+    public void meth44706() { }
+    public void meth44707() { }
+    public void meth44708() { }
+    public void meth44709() { }
+    public void meth44710() { }
+    public void meth44711() { }
+    public void meth44712() { }
+    public void meth44713() { }
+    public void meth44714() { }
+    public void meth44715() { }
+    public void meth44716() { }
+    public void meth44717() { }
+    public void meth44718() { }
+    public void meth44719() { }
+    public void meth44720() { }
+    public void meth44721() { }
+    public void meth44722() { }
+    public void meth44723() { }
+    public void meth44724() { }
+    public void meth44725() { }
+    public void meth44726() { }
+    public void meth44727() { }
+    public void meth44728() { }
+    public void meth44729() { }
+    public void meth44730() { }
+    public void meth44731() { }
+    public void meth44732() { }
+    public void meth44733() { }
+    public void meth44734() { }
+    public void meth44735() { }
+    public void meth44736() { }
+    public void meth44737() { }
+    public void meth44738() { }
+    public void meth44739() { }
+    public void meth44740() { }
+    public void meth44741() { }
+    public void meth44742() { }
+    public void meth44743() { }
+    public void meth44744() { }
+    public void meth44745() { }
+    public void meth44746() { }
+    public void meth44747() { }
+    public void meth44748() { }
+    public void meth44749() { }
+    public void meth44750() { }
+    public void meth44751() { }
+    public void meth44752() { }
+    public void meth44753() { }
+    public void meth44754() { }
+    public void meth44755() { }
+    public void meth44756() { }
+    public void meth44757() { }
+    public void meth44758() { }
+    public void meth44759() { }
+    public void meth44760() { }
+    public void meth44761() { }
+    public void meth44762() { }
+    public void meth44763() { }
+    public void meth44764() { }
+    public void meth44765() { }
+    public void meth44766() { }
+    public void meth44767() { }
+    public void meth44768() { }
+    public void meth44769() { }
+    public void meth44770() { }
+    public void meth44771() { }
+    public void meth44772() { }
+    public void meth44773() { }
+    public void meth44774() { }
+    public void meth44775() { }
+    public void meth44776() { }
+    public void meth44777() { }
+    public void meth44778() { }
+    public void meth44779() { }
+    public void meth44780() { }
+    public void meth44781() { }
+    public void meth44782() { }
+    public void meth44783() { }
+    public void meth44784() { }
+    public void meth44785() { }
+    public void meth44786() { }
+    public void meth44787() { }
+    public void meth44788() { }
+    public void meth44789() { }
+    public void meth44790() { }
+    public void meth44791() { }
+    public void meth44792() { }
+    public void meth44793() { }
+    public void meth44794() { }
+    public void meth44795() { }
+    public void meth44796() { }
+    public void meth44797() { }
+    public void meth44798() { }
+    public void meth44799() { }
+    public void meth44800() { }
+    public void meth44801() { }
+    public void meth44802() { }
+    public void meth44803() { }
+    public void meth44804() { }
+    public void meth44805() { }
+    public void meth44806() { }
+    public void meth44807() { }
+    public void meth44808() { }
+    public void meth44809() { }
+    public void meth44810() { }
+    public void meth44811() { }
+    public void meth44812() { }
+    public void meth44813() { }
+    public void meth44814() { }
+    public void meth44815() { }
+    public void meth44816() { }
+    public void meth44817() { }
+    public void meth44818() { }
+    public void meth44819() { }
+    public void meth44820() { }
+    public void meth44821() { }
+    public void meth44822() { }
+    public void meth44823() { }
+    public void meth44824() { }
+    public void meth44825() { }
+    public void meth44826() { }
+    public void meth44827() { }
+    public void meth44828() { }
+    public void meth44829() { }
+    public void meth44830() { }
+    public void meth44831() { }
+    public void meth44832() { }
+    public void meth44833() { }
+    public void meth44834() { }
+    public void meth44835() { }
+    public void meth44836() { }
+    public void meth44837() { }
+    public void meth44838() { }
+    public void meth44839() { }
+    public void meth44840() { }
+    public void meth44841() { }
+    public void meth44842() { }
+    public void meth44843() { }
+    public void meth44844() { }
+    public void meth44845() { }
+    public void meth44846() { }
+    public void meth44847() { }
+    public void meth44848() { }
+    public void meth44849() { }
+    public void meth44850() { }
+    public void meth44851() { }
+    public void meth44852() { }
+    public void meth44853() { }
+    public void meth44854() { }
+    public void meth44855() { }
+    public void meth44856() { }
+    public void meth44857() { }
+    public void meth44858() { }
+    public void meth44859() { }
+    public void meth44860() { }
+    public void meth44861() { }
+    public void meth44862() { }
+    public void meth44863() { }
+    public void meth44864() { }
+    public void meth44865() { }
+    public void meth44866() { }
+    public void meth44867() { }
+    public void meth44868() { }
+    public void meth44869() { }
+    public void meth44870() { }
+    public void meth44871() { }
+    public void meth44872() { }
+    public void meth44873() { }
+    public void meth44874() { }
+    public void meth44875() { }
+    public void meth44876() { }
+    public void meth44877() { }
+    public void meth44878() { }
+    public void meth44879() { }
+    public void meth44880() { }
+    public void meth44881() { }
+    public void meth44882() { }
+    public void meth44883() { }
+    public void meth44884() { }
+    public void meth44885() { }
+    public void meth44886() { }
+    public void meth44887() { }
+    public void meth44888() { }
+    public void meth44889() { }
+    public void meth44890() { }
+    public void meth44891() { }
+    public void meth44892() { }
+    public void meth44893() { }
+    public void meth44894() { }
+    public void meth44895() { }
+    public void meth44896() { }
+    public void meth44897() { }
+    public void meth44898() { }
+    public void meth44899() { }
+    public void meth44900() { }
+    public void meth44901() { }
+    public void meth44902() { }
+    public void meth44903() { }
+    public void meth44904() { }
+    public void meth44905() { }
+    public void meth44906() { }
+    public void meth44907() { }
+    public void meth44908() { }
+    public void meth44909() { }
+    public void meth44910() { }
+    public void meth44911() { }
+    public void meth44912() { }
+    public void meth44913() { }
+    public void meth44914() { }
+    public void meth44915() { }
+    public void meth44916() { }
+    public void meth44917() { }
+    public void meth44918() { }
+    public void meth44919() { }
+    public void meth44920() { }
+    public void meth44921() { }
+    public void meth44922() { }
+    public void meth44923() { }
+    public void meth44924() { }
+    public void meth44925() { }
+    public void meth44926() { }
+    public void meth44927() { }
+    public void meth44928() { }
+    public void meth44929() { }
+    public void meth44930() { }
+    public void meth44931() { }
+    public void meth44932() { }
+    public void meth44933() { }
+    public void meth44934() { }
+    public void meth44935() { }
+    public void meth44936() { }
+    public void meth44937() { }
+    public void meth44938() { }
+    public void meth44939() { }
+    public void meth44940() { }
+    public void meth44941() { }
+    public void meth44942() { }
+    public void meth44943() { }
+    public void meth44944() { }
+    public void meth44945() { }
+    public void meth44946() { }
+    public void meth44947() { }
+    public void meth44948() { }
+    public void meth44949() { }
+    public void meth44950() { }
+    public void meth44951() { }
+    public void meth44952() { }
+    public void meth44953() { }
+    public void meth44954() { }
+    public void meth44955() { }
+    public void meth44956() { }
+    public void meth44957() { }
+    public void meth44958() { }
+    public void meth44959() { }
+    public void meth44960() { }
+    public void meth44961() { }
+    public void meth44962() { }
+    public void meth44963() { }
+    public void meth44964() { }
+    public void meth44965() { }
+    public void meth44966() { }
+    public void meth44967() { }
+    public void meth44968() { }
+    public void meth44969() { }
+    public void meth44970() { }
+    public void meth44971() { }
+    public void meth44972() { }
+    public void meth44973() { }
+    public void meth44974() { }
+    public void meth44975() { }
+    public void meth44976() { }
+    public void meth44977() { }
+    public void meth44978() { }
+    public void meth44979() { }
+    public void meth44980() { }
+    public void meth44981() { }
+    public void meth44982() { }
+    public void meth44983() { }
+    public void meth44984() { }
+    public void meth44985() { }
+    public void meth44986() { }
+    public void meth44987() { }
+    public void meth44988() { }
+    public void meth44989() { }
+    public void meth44990() { }
+    public void meth44991() { }
+    public void meth44992() { }
+    public void meth44993() { }
+    public void meth44994() { }
+    public void meth44995() { }
+    public void meth44996() { }
+    public void meth44997() { }
+    public void meth44998() { }
+    public void meth44999() { }
+    public void meth45000() { }
+    public void meth45001() { }
+    public void meth45002() { }
+    public void meth45003() { }
+    public void meth45004() { }
+    public void meth45005() { }
+    public void meth45006() { }
+    public void meth45007() { }
+    public void meth45008() { }
+    public void meth45009() { }
+    public void meth45010() { }
+    public void meth45011() { }
+    public void meth45012() { }
+    public void meth45013() { }
+    public void meth45014() { }
+    public void meth45015() { }
+    public void meth45016() { }
+    public void meth45017() { }
+    public void meth45018() { }
+    public void meth45019() { }
+    public void meth45020() { }
+    public void meth45021() { }
+    public void meth45022() { }
+    public void meth45023() { }
+    public void meth45024() { }
+    public void meth45025() { }
+    public void meth45026() { }
+    public void meth45027() { }
+    public void meth45028() { }
+    public void meth45029() { }
+    public void meth45030() { }
+    public void meth45031() { }
+    public void meth45032() { }
+    public void meth45033() { }
+    public void meth45034() { }
+    public void meth45035() { }
+    public void meth45036() { }
+    public void meth45037() { }
+    public void meth45038() { }
+    public void meth45039() { }
+    public void meth45040() { }
+    public void meth45041() { }
+    public void meth45042() { }
+    public void meth45043() { }
+    public void meth45044() { }
+    public void meth45045() { }
+    public void meth45046() { }
+    public void meth45047() { }
+    public void meth45048() { }
+    public void meth45049() { }
+    public void meth45050() { }
+    public void meth45051() { }
+    public void meth45052() { }
+    public void meth45053() { }
+    public void meth45054() { }
+    public void meth45055() { }
+    public void meth45056() { }
+    public void meth45057() { }
+    public void meth45058() { }
+    public void meth45059() { }
+    public void meth45060() { }
+    public void meth45061() { }
+    public void meth45062() { }
+    public void meth45063() { }
+    public void meth45064() { }
+    public void meth45065() { }
+    public void meth45066() { }
+    public void meth45067() { }
+    public void meth45068() { }
+    public void meth45069() { }
+    public void meth45070() { }
+    public void meth45071() { }
+    public void meth45072() { }
+    public void meth45073() { }
+    public void meth45074() { }
+    public void meth45075() { }
+    public void meth45076() { }
+    public void meth45077() { }
+    public void meth45078() { }
+    public void meth45079() { }
+    public void meth45080() { }
+    public void meth45081() { }
+    public void meth45082() { }
+    public void meth45083() { }
+    public void meth45084() { }
+    public void meth45085() { }
+    public void meth45086() { }
+    public void meth45087() { }
+    public void meth45088() { }
+    public void meth45089() { }
+    public void meth45090() { }
+    public void meth45091() { }
+    public void meth45092() { }
+    public void meth45093() { }
+    public void meth45094() { }
+    public void meth45095() { }
+    public void meth45096() { }
+    public void meth45097() { }
+    public void meth45098() { }
+    public void meth45099() { }
+    public void meth45100() { }
+    public void meth45101() { }
+    public void meth45102() { }
+    public void meth45103() { }
+    public void meth45104() { }
+    public void meth45105() { }
+    public void meth45106() { }
+    public void meth45107() { }
+    public void meth45108() { }
+    public void meth45109() { }
+    public void meth45110() { }
+    public void meth45111() { }
+    public void meth45112() { }
+    public void meth45113() { }
+    public void meth45114() { }
+    public void meth45115() { }
+    public void meth45116() { }
+    public void meth45117() { }
+    public void meth45118() { }
+    public void meth45119() { }
+    public void meth45120() { }
+    public void meth45121() { }
+    public void meth45122() { }
+    public void meth45123() { }
+    public void meth45124() { }
+    public void meth45125() { }
+    public void meth45126() { }
+    public void meth45127() { }
+    public void meth45128() { }
+    public void meth45129() { }
+    public void meth45130() { }
+    public void meth45131() { }
+    public void meth45132() { }
+    public void meth45133() { }
+    public void meth45134() { }
+    public void meth45135() { }
+    public void meth45136() { }
+    public void meth45137() { }
+    public void meth45138() { }
+    public void meth45139() { }
+    public void meth45140() { }
+    public void meth45141() { }
+    public void meth45142() { }
+    public void meth45143() { }
+    public void meth45144() { }
+    public void meth45145() { }
+    public void meth45146() { }
+    public void meth45147() { }
+    public void meth45148() { }
+    public void meth45149() { }
+    public void meth45150() { }
+    public void meth45151() { }
+    public void meth45152() { }
+    public void meth45153() { }
+    public void meth45154() { }
+    public void meth45155() { }
+    public void meth45156() { }
+    public void meth45157() { }
+    public void meth45158() { }
+    public void meth45159() { }
+    public void meth45160() { }
+    public void meth45161() { }
+    public void meth45162() { }
+    public void meth45163() { }
+    public void meth45164() { }
+    public void meth45165() { }
+    public void meth45166() { }
+    public void meth45167() { }
+    public void meth45168() { }
+    public void meth45169() { }
+    public void meth45170() { }
+    public void meth45171() { }
+    public void meth45172() { }
+    public void meth45173() { }
+    public void meth45174() { }
+    public void meth45175() { }
+    public void meth45176() { }
+    public void meth45177() { }
+    public void meth45178() { }
+    public void meth45179() { }
+    public void meth45180() { }
+    public void meth45181() { }
+    public void meth45182() { }
+    public void meth45183() { }
+    public void meth45184() { }
+    public void meth45185() { }
+    public void meth45186() { }
+    public void meth45187() { }
+    public void meth45188() { }
+    public void meth45189() { }
+    public void meth45190() { }
+    public void meth45191() { }
+    public void meth45192() { }
+    public void meth45193() { }
+    public void meth45194() { }
+    public void meth45195() { }
+    public void meth45196() { }
+    public void meth45197() { }
+    public void meth45198() { }
+    public void meth45199() { }
+    public void meth45200() { }
+    public void meth45201() { }
+    public void meth45202() { }
+    public void meth45203() { }
+    public void meth45204() { }
+    public void meth45205() { }
+    public void meth45206() { }
+    public void meth45207() { }
+    public void meth45208() { }
+    public void meth45209() { }
+    public void meth45210() { }
+    public void meth45211() { }
+    public void meth45212() { }
+    public void meth45213() { }
+    public void meth45214() { }
+    public void meth45215() { }
+    public void meth45216() { }
+    public void meth45217() { }
+    public void meth45218() { }
+    public void meth45219() { }
+    public void meth45220() { }
+    public void meth45221() { }
+    public void meth45222() { }
+    public void meth45223() { }
+    public void meth45224() { }
+    public void meth45225() { }
+    public void meth45226() { }
+    public void meth45227() { }
+    public void meth45228() { }
+    public void meth45229() { }
+    public void meth45230() { }
+    public void meth45231() { }
+    public void meth45232() { }
+    public void meth45233() { }
+    public void meth45234() { }
+    public void meth45235() { }
+    public void meth45236() { }
+    public void meth45237() { }
+    public void meth45238() { }
+    public void meth45239() { }
+    public void meth45240() { }
+    public void meth45241() { }
+    public void meth45242() { }
+    public void meth45243() { }
+    public void meth45244() { }
+    public void meth45245() { }
+    public void meth45246() { }
+    public void meth45247() { }
+    public void meth45248() { }
+    public void meth45249() { }
+    public void meth45250() { }
+    public void meth45251() { }
+    public void meth45252() { }
+    public void meth45253() { }
+    public void meth45254() { }
+    public void meth45255() { }
+    public void meth45256() { }
+    public void meth45257() { }
+    public void meth45258() { }
+    public void meth45259() { }
+    public void meth45260() { }
+    public void meth45261() { }
+    public void meth45262() { }
+    public void meth45263() { }
+    public void meth45264() { }
+    public void meth45265() { }
+    public void meth45266() { }
+    public void meth45267() { }
+    public void meth45268() { }
+    public void meth45269() { }
+    public void meth45270() { }
+    public void meth45271() { }
+    public void meth45272() { }
+    public void meth45273() { }
+    public void meth45274() { }
+    public void meth45275() { }
+    public void meth45276() { }
+    public void meth45277() { }
+    public void meth45278() { }
+    public void meth45279() { }
+    public void meth45280() { }
+    public void meth45281() { }
+    public void meth45282() { }
+    public void meth45283() { }
+    public void meth45284() { }
+    public void meth45285() { }
+    public void meth45286() { }
+    public void meth45287() { }
+    public void meth45288() { }
+    public void meth45289() { }
+    public void meth45290() { }
+    public void meth45291() { }
+    public void meth45292() { }
+    public void meth45293() { }
+    public void meth45294() { }
+    public void meth45295() { }
+    public void meth45296() { }
+    public void meth45297() { }
+    public void meth45298() { }
+    public void meth45299() { }
+    public void meth45300() { }
+    public void meth45301() { }
+    public void meth45302() { }
+    public void meth45303() { }
+    public void meth45304() { }
+    public void meth45305() { }
+    public void meth45306() { }
+    public void meth45307() { }
+    public void meth45308() { }
+    public void meth45309() { }
+    public void meth45310() { }
+    public void meth45311() { }
+    public void meth45312() { }
+    public void meth45313() { }
+    public void meth45314() { }
+    public void meth45315() { }
+    public void meth45316() { }
+    public void meth45317() { }
+    public void meth45318() { }
+    public void meth45319() { }
+    public void meth45320() { }
+    public void meth45321() { }
+    public void meth45322() { }
+    public void meth45323() { }
+    public void meth45324() { }
+    public void meth45325() { }
+    public void meth45326() { }
+    public void meth45327() { }
+    public void meth45328() { }
+    public void meth45329() { }
+    public void meth45330() { }
+    public void meth45331() { }
+    public void meth45332() { }
+    public void meth45333() { }
+    public void meth45334() { }
+    public void meth45335() { }
+    public void meth45336() { }
+    public void meth45337() { }
+    public void meth45338() { }
+    public void meth45339() { }
+    public void meth45340() { }
+    public void meth45341() { }
+    public void meth45342() { }
+    public void meth45343() { }
+    public void meth45344() { }
+    public void meth45345() { }
+    public void meth45346() { }
+    public void meth45347() { }
+    public void meth45348() { }
+    public void meth45349() { }
+    public void meth45350() { }
+    public void meth45351() { }
+    public void meth45352() { }
+    public void meth45353() { }
+    public void meth45354() { }
+    public void meth45355() { }
+    public void meth45356() { }
+    public void meth45357() { }
+    public void meth45358() { }
+    public void meth45359() { }
+    public void meth45360() { }
+    public void meth45361() { }
+    public void meth45362() { }
+    public void meth45363() { }
+    public void meth45364() { }
+    public void meth45365() { }
+    public void meth45366() { }
+    public void meth45367() { }
+    public void meth45368() { }
+    public void meth45369() { }
+    public void meth45370() { }
+    public void meth45371() { }
+    public void meth45372() { }
+    public void meth45373() { }
+    public void meth45374() { }
+    public void meth45375() { }
+    public void meth45376() { }
+    public void meth45377() { }
+    public void meth45378() { }
+    public void meth45379() { }
+    public void meth45380() { }
+    public void meth45381() { }
+    public void meth45382() { }
+    public void meth45383() { }
+    public void meth45384() { }
+    public void meth45385() { }
+    public void meth45386() { }
+    public void meth45387() { }
+    public void meth45388() { }
+    public void meth45389() { }
+    public void meth45390() { }
+    public void meth45391() { }
+    public void meth45392() { }
+    public void meth45393() { }
+    public void meth45394() { }
+    public void meth45395() { }
+    public void meth45396() { }
+    public void meth45397() { }
+    public void meth45398() { }
+    public void meth45399() { }
+    public void meth45400() { }
+    public void meth45401() { }
+    public void meth45402() { }
+    public void meth45403() { }
+    public void meth45404() { }
+    public void meth45405() { }
+    public void meth45406() { }
+    public void meth45407() { }
+    public void meth45408() { }
+    public void meth45409() { }
+    public void meth45410() { }
+    public void meth45411() { }
+    public void meth45412() { }
+    public void meth45413() { }
+    public void meth45414() { }
+    public void meth45415() { }
+    public void meth45416() { }
+    public void meth45417() { }
+    public void meth45418() { }
+    public void meth45419() { }
+    public void meth45420() { }
+    public void meth45421() { }
+    public void meth45422() { }
+    public void meth45423() { }
+    public void meth45424() { }
+    public void meth45425() { }
+    public void meth45426() { }
+    public void meth45427() { }
+    public void meth45428() { }
+    public void meth45429() { }
+    public void meth45430() { }
+    public void meth45431() { }
+    public void meth45432() { }
+    public void meth45433() { }
+    public void meth45434() { }
+    public void meth45435() { }
+    public void meth45436() { }
+    public void meth45437() { }
+    public void meth45438() { }
+    public void meth45439() { }
+    public void meth45440() { }
+    public void meth45441() { }
+    public void meth45442() { }
+    public void meth45443() { }
+    public void meth45444() { }
+    public void meth45445() { }
+    public void meth45446() { }
+    public void meth45447() { }
+    public void meth45448() { }
+    public void meth45449() { }
+    public void meth45450() { }
+    public void meth45451() { }
+    public void meth45452() { }
+    public void meth45453() { }
+    public void meth45454() { }
+    public void meth45455() { }
+    public void meth45456() { }
+    public void meth45457() { }
+    public void meth45458() { }
+    public void meth45459() { }
+    public void meth45460() { }
+    public void meth45461() { }
+    public void meth45462() { }
+    public void meth45463() { }
+    public void meth45464() { }
+    public void meth45465() { }
+    public void meth45466() { }
+    public void meth45467() { }
+    public void meth45468() { }
+    public void meth45469() { }
+    public void meth45470() { }
+    public void meth45471() { }
+    public void meth45472() { }
+    public void meth45473() { }
+    public void meth45474() { }
+    public void meth45475() { }
+    public void meth45476() { }
+    public void meth45477() { }
+    public void meth45478() { }
+    public void meth45479() { }
+    public void meth45480() { }
+    public void meth45481() { }
+    public void meth45482() { }
+    public void meth45483() { }
+    public void meth45484() { }
+    public void meth45485() { }
+    public void meth45486() { }
+    public void meth45487() { }
+    public void meth45488() { }
+    public void meth45489() { }
+    public void meth45490() { }
+    public void meth45491() { }
+    public void meth45492() { }
+    public void meth45493() { }
+    public void meth45494() { }
+    public void meth45495() { }
+    public void meth45496() { }
+    public void meth45497() { }
+    public void meth45498() { }
+    public void meth45499() { }
+    public void meth45500() { }
+    public void meth45501() { }
+    public void meth45502() { }
+    public void meth45503() { }
+    public void meth45504() { }
+    public void meth45505() { }
+    public void meth45506() { }
+    public void meth45507() { }
+    public void meth45508() { }
+    public void meth45509() { }
+    public void meth45510() { }
+    public void meth45511() { }
+    public void meth45512() { }
+    public void meth45513() { }
+    public void meth45514() { }
+    public void meth45515() { }
+    public void meth45516() { }
+    public void meth45517() { }
+    public void meth45518() { }
+    public void meth45519() { }
+    public void meth45520() { }
+    public void meth45521() { }
+    public void meth45522() { }
+    public void meth45523() { }
+    public void meth45524() { }
+    public void meth45525() { }
+    public void meth45526() { }
+    public void meth45527() { }
+    public void meth45528() { }
+    public void meth45529() { }
+    public void meth45530() { }
+    public void meth45531() { }
+    public void meth45532() { }
+    public void meth45533() { }
+    public void meth45534() { }
+    public void meth45535() { }
+    public void meth45536() { }
+    public void meth45537() { }
+    public void meth45538() { }
+    public void meth45539() { }
+    public void meth45540() { }
+    public void meth45541() { }
+    public void meth45542() { }
+    public void meth45543() { }
+    public void meth45544() { }
+    public void meth45545() { }
+    public void meth45546() { }
+    public void meth45547() { }
+    public void meth45548() { }
+    public void meth45549() { }
+    public void meth45550() { }
+    public void meth45551() { }
+    public void meth45552() { }
+    public void meth45553() { }
+    public void meth45554() { }
+    public void meth45555() { }
+    public void meth45556() { }
+    public void meth45557() { }
+    public void meth45558() { }
+    public void meth45559() { }
+    public void meth45560() { }
+    public void meth45561() { }
+    public void meth45562() { }
+    public void meth45563() { }
+    public void meth45564() { }
+    public void meth45565() { }
+    public void meth45566() { }
+    public void meth45567() { }
+    public void meth45568() { }
+    public void meth45569() { }
+    public void meth45570() { }
+    public void meth45571() { }
+    public void meth45572() { }
+    public void meth45573() { }
+    public void meth45574() { }
+    public void meth45575() { }
+    public void meth45576() { }
+    public void meth45577() { }
+    public void meth45578() { }
+    public void meth45579() { }
+    public void meth45580() { }
+    public void meth45581() { }
+    public void meth45582() { }
+    public void meth45583() { }
+    public void meth45584() { }
+    public void meth45585() { }
+    public void meth45586() { }
+    public void meth45587() { }
+    public void meth45588() { }
+    public void meth45589() { }
+    public void meth45590() { }
+    public void meth45591() { }
+    public void meth45592() { }
+    public void meth45593() { }
+    public void meth45594() { }
+    public void meth45595() { }
+    public void meth45596() { }
+    public void meth45597() { }
+    public void meth45598() { }
+    public void meth45599() { }
+    public void meth45600() { }
+    public void meth45601() { }
+    public void meth45602() { }
+    public void meth45603() { }
+    public void meth45604() { }
+    public void meth45605() { }
+    public void meth45606() { }
+    public void meth45607() { }
+    public void meth45608() { }
+    public void meth45609() { }
+    public void meth45610() { }
+    public void meth45611() { }
+    public void meth45612() { }
+    public void meth45613() { }
+    public void meth45614() { }
+    public void meth45615() { }
+    public void meth45616() { }
+    public void meth45617() { }
+    public void meth45618() { }
+    public void meth45619() { }
+    public void meth45620() { }
+    public void meth45621() { }
+    public void meth45622() { }
+    public void meth45623() { }
+    public void meth45624() { }
+    public void meth45625() { }
+    public void meth45626() { }
+    public void meth45627() { }
+    public void meth45628() { }
+    public void meth45629() { }
+    public void meth45630() { }
+    public void meth45631() { }
+    public void meth45632() { }
+    public void meth45633() { }
+    public void meth45634() { }
+    public void meth45635() { }
+    public void meth45636() { }
+    public void meth45637() { }
+    public void meth45638() { }
+    public void meth45639() { }
+    public void meth45640() { }
+    public void meth45641() { }
+    public void meth45642() { }
+    public void meth45643() { }
+    public void meth45644() { }
+    public void meth45645() { }
+    public void meth45646() { }
+    public void meth45647() { }
+    public void meth45648() { }
+    public void meth45649() { }
+    public void meth45650() { }
+    public void meth45651() { }
+    public void meth45652() { }
+    public void meth45653() { }
+    public void meth45654() { }
+    public void meth45655() { }
+    public void meth45656() { }
+    public void meth45657() { }
+    public void meth45658() { }
+    public void meth45659() { }
+    public void meth45660() { }
+    public void meth45661() { }
+    public void meth45662() { }
+    public void meth45663() { }
+    public void meth45664() { }
+    public void meth45665() { }
+    public void meth45666() { }
+    public void meth45667() { }
+    public void meth45668() { }
+    public void meth45669() { }
+    public void meth45670() { }
+    public void meth45671() { }
+    public void meth45672() { }
+    public void meth45673() { }
+    public void meth45674() { }
+    public void meth45675() { }
+    public void meth45676() { }
+    public void meth45677() { }
+    public void meth45678() { }
+    public void meth45679() { }
+    public void meth45680() { }
+    public void meth45681() { }
+    public void meth45682() { }
+    public void meth45683() { }
+    public void meth45684() { }
+    public void meth45685() { }
+    public void meth45686() { }
+    public void meth45687() { }
+    public void meth45688() { }
+    public void meth45689() { }
+    public void meth45690() { }
+    public void meth45691() { }
+    public void meth45692() { }
+    public void meth45693() { }
+    public void meth45694() { }
+    public void meth45695() { }
+    public void meth45696() { }
+    public void meth45697() { }
+    public void meth45698() { }
+    public void meth45699() { }
+    public void meth45700() { }
+    public void meth45701() { }
+    public void meth45702() { }
+    public void meth45703() { }
+    public void meth45704() { }
+    public void meth45705() { }
+    public void meth45706() { }
+    public void meth45707() { }
+    public void meth45708() { }
+    public void meth45709() { }
+    public void meth45710() { }
+    public void meth45711() { }
+    public void meth45712() { }
+    public void meth45713() { }
+    public void meth45714() { }
+    public void meth45715() { }
+    public void meth45716() { }
+    public void meth45717() { }
+    public void meth45718() { }
+    public void meth45719() { }
+    public void meth45720() { }
+    public void meth45721() { }
+    public void meth45722() { }
+    public void meth45723() { }
+    public void meth45724() { }
+    public void meth45725() { }
+    public void meth45726() { }
+    public void meth45727() { }
+    public void meth45728() { }
+    public void meth45729() { }
+    public void meth45730() { }
+    public void meth45731() { }
+    public void meth45732() { }
+    public void meth45733() { }
+    public void meth45734() { }
+    public void meth45735() { }
+    public void meth45736() { }
+    public void meth45737() { }
+    public void meth45738() { }
+    public void meth45739() { }
+    public void meth45740() { }
+    public void meth45741() { }
+    public void meth45742() { }
+    public void meth45743() { }
+    public void meth45744() { }
+    public void meth45745() { }
+    public void meth45746() { }
+    public void meth45747() { }
+    public void meth45748() { }
+    public void meth45749() { }
+    public void meth45750() { }
+    public void meth45751() { }
+    public void meth45752() { }
+    public void meth45753() { }
+    public void meth45754() { }
+    public void meth45755() { }
+    public void meth45756() { }
+    public void meth45757() { }
+    public void meth45758() { }
+    public void meth45759() { }
+    public void meth45760() { }
+    public void meth45761() { }
+    public void meth45762() { }
+    public void meth45763() { }
+    public void meth45764() { }
+    public void meth45765() { }
+    public void meth45766() { }
+    public void meth45767() { }
+    public void meth45768() { }
+    public void meth45769() { }
+    public void meth45770() { }
+    public void meth45771() { }
+    public void meth45772() { }
+    public void meth45773() { }
+    public void meth45774() { }
+    public void meth45775() { }
+    public void meth45776() { }
+    public void meth45777() { }
+    public void meth45778() { }
+    public void meth45779() { }
+    public void meth45780() { }
+    public void meth45781() { }
+    public void meth45782() { }
+    public void meth45783() { }
+    public void meth45784() { }
+    public void meth45785() { }
+    public void meth45786() { }
+    public void meth45787() { }
+    public void meth45788() { }
+    public void meth45789() { }
+    public void meth45790() { }
+    public void meth45791() { }
+    public void meth45792() { }
+    public void meth45793() { }
+    public void meth45794() { }
+    public void meth45795() { }
+    public void meth45796() { }
+    public void meth45797() { }
+    public void meth45798() { }
+    public void meth45799() { }
+    public void meth45800() { }
+    public void meth45801() { }
+    public void meth45802() { }
+    public void meth45803() { }
+    public void meth45804() { }
+    public void meth45805() { }
+    public void meth45806() { }
+    public void meth45807() { }
+    public void meth45808() { }
+    public void meth45809() { }
+    public void meth45810() { }
+    public void meth45811() { }
+    public void meth45812() { }
+    public void meth45813() { }
+    public void meth45814() { }
+    public void meth45815() { }
+    public void meth45816() { }
+    public void meth45817() { }
+    public void meth45818() { }
+    public void meth45819() { }
+    public void meth45820() { }
+    public void meth45821() { }
+    public void meth45822() { }
+    public void meth45823() { }
+    public void meth45824() { }
+    public void meth45825() { }
+    public void meth45826() { }
+    public void meth45827() { }
+    public void meth45828() { }
+    public void meth45829() { }
+    public void meth45830() { }
+    public void meth45831() { }
+    public void meth45832() { }
+    public void meth45833() { }
+    public void meth45834() { }
+    public void meth45835() { }
+    public void meth45836() { }
+    public void meth45837() { }
+    public void meth45838() { }
+    public void meth45839() { }
+    public void meth45840() { }
+    public void meth45841() { }
+    public void meth45842() { }
+    public void meth45843() { }
+    public void meth45844() { }
+    public void meth45845() { }
+    public void meth45846() { }
+    public void meth45847() { }
+    public void meth45848() { }
+    public void meth45849() { }
+    public void meth45850() { }
+    public void meth45851() { }
+    public void meth45852() { }
+    public void meth45853() { }
+    public void meth45854() { }
+    public void meth45855() { }
+    public void meth45856() { }
+    public void meth45857() { }
+    public void meth45858() { }
+    public void meth45859() { }
+    public void meth45860() { }
+    public void meth45861() { }
+    public void meth45862() { }
+    public void meth45863() { }
+    public void meth45864() { }
+    public void meth45865() { }
+    public void meth45866() { }
+    public void meth45867() { }
+    public void meth45868() { }
+    public void meth45869() { }
+    public void meth45870() { }
+    public void meth45871() { }
+    public void meth45872() { }
+    public void meth45873() { }
+    public void meth45874() { }
+    public void meth45875() { }
+    public void meth45876() { }
+    public void meth45877() { }
+    public void meth45878() { }
+    public void meth45879() { }
+    public void meth45880() { }
+    public void meth45881() { }
+    public void meth45882() { }
+    public void meth45883() { }
+    public void meth45884() { }
+    public void meth45885() { }
+    public void meth45886() { }
+    public void meth45887() { }
+    public void meth45888() { }
+    public void meth45889() { }
+    public void meth45890() { }
+    public void meth45891() { }
+    public void meth45892() { }
+    public void meth45893() { }
+    public void meth45894() { }
+    public void meth45895() { }
+    public void meth45896() { }
+    public void meth45897() { }
+    public void meth45898() { }
+    public void meth45899() { }
+    public void meth45900() { }
+    public void meth45901() { }
+    public void meth45902() { }
+    public void meth45903() { }
+    public void meth45904() { }
+    public void meth45905() { }
+    public void meth45906() { }
+    public void meth45907() { }
+    public void meth45908() { }
+    public void meth45909() { }
+    public void meth45910() { }
+    public void meth45911() { }
+    public void meth45912() { }
+    public void meth45913() { }
+    public void meth45914() { }
+    public void meth45915() { }
+    public void meth45916() { }
+    public void meth45917() { }
+    public void meth45918() { }
+    public void meth45919() { }
+    public void meth45920() { }
+    public void meth45921() { }
+    public void meth45922() { }
+    public void meth45923() { }
+    public void meth45924() { }
+    public void meth45925() { }
+    public void meth45926() { }
+    public void meth45927() { }
+    public void meth45928() { }
+    public void meth45929() { }
+    public void meth45930() { }
+    public void meth45931() { }
+    public void meth45932() { }
+    public void meth45933() { }
+    public void meth45934() { }
+    public void meth45935() { }
+    public void meth45936() { }
+    public void meth45937() { }
+    public void meth45938() { }
+    public void meth45939() { }
+    public void meth45940() { }
+    public void meth45941() { }
+    public void meth45942() { }
+    public void meth45943() { }
+    public void meth45944() { }
+    public void meth45945() { }
+    public void meth45946() { }
+    public void meth45947() { }
+    public void meth45948() { }
+    public void meth45949() { }
+    public void meth45950() { }
+    public void meth45951() { }
+    public void meth45952() { }
+    public void meth45953() { }
+    public void meth45954() { }
+    public void meth45955() { }
+    public void meth45956() { }
+    public void meth45957() { }
+    public void meth45958() { }
+    public void meth45959() { }
+    public void meth45960() { }
+    public void meth45961() { }
+    public void meth45962() { }
+    public void meth45963() { }
+    public void meth45964() { }
+    public void meth45965() { }
+    public void meth45966() { }
+    public void meth45967() { }
+    public void meth45968() { }
+    public void meth45969() { }
+    public void meth45970() { }
+    public void meth45971() { }
+    public void meth45972() { }
+    public void meth45973() { }
+    public void meth45974() { }
+    public void meth45975() { }
+    public void meth45976() { }
+    public void meth45977() { }
+    public void meth45978() { }
+    public void meth45979() { }
+    public void meth45980() { }
+    public void meth45981() { }
+    public void meth45982() { }
+    public void meth45983() { }
+    public void meth45984() { }
+    public void meth45985() { }
+    public void meth45986() { }
+    public void meth45987() { }
+    public void meth45988() { }
+    public void meth45989() { }
+    public void meth45990() { }
+    public void meth45991() { }
+    public void meth45992() { }
+    public void meth45993() { }
+    public void meth45994() { }
+    public void meth45995() { }
+    public void meth45996() { }
+    public void meth45997() { }
+    public void meth45998() { }
+    public void meth45999() { }
+    public void meth46000() { }
+    public void meth46001() { }
+    public void meth46002() { }
+    public void meth46003() { }
+    public void meth46004() { }
+    public void meth46005() { }
+    public void meth46006() { }
+    public void meth46007() { }
+    public void meth46008() { }
+    public void meth46009() { }
+    public void meth46010() { }
+    public void meth46011() { }
+    public void meth46012() { }
+    public void meth46013() { }
+    public void meth46014() { }
+    public void meth46015() { }
+    public void meth46016() { }
+    public void meth46017() { }
+    public void meth46018() { }
+    public void meth46019() { }
+    public void meth46020() { }
+    public void meth46021() { }
+    public void meth46022() { }
+    public void meth46023() { }
+    public void meth46024() { }
+    public void meth46025() { }
+    public void meth46026() { }
+    public void meth46027() { }
+    public void meth46028() { }
+    public void meth46029() { }
+    public void meth46030() { }
+    public void meth46031() { }
+    public void meth46032() { }
+    public void meth46033() { }
+    public void meth46034() { }
+    public void meth46035() { }
+    public void meth46036() { }
+    public void meth46037() { }
+    public void meth46038() { }
+    public void meth46039() { }
+    public void meth46040() { }
+    public void meth46041() { }
+    public void meth46042() { }
+    public void meth46043() { }
+    public void meth46044() { }
+    public void meth46045() { }
+    public void meth46046() { }
+    public void meth46047() { }
+    public void meth46048() { }
+    public void meth46049() { }
+    public void meth46050() { }
+    public void meth46051() { }
+    public void meth46052() { }
+    public void meth46053() { }
+    public void meth46054() { }
+    public void meth46055() { }
+    public void meth46056() { }
+    public void meth46057() { }
+    public void meth46058() { }
+    public void meth46059() { }
+    public void meth46060() { }
+    public void meth46061() { }
+    public void meth46062() { }
+    public void meth46063() { }
+    public void meth46064() { }
+    public void meth46065() { }
+    public void meth46066() { }
+    public void meth46067() { }
+    public void meth46068() { }
+    public void meth46069() { }
+    public void meth46070() { }
+    public void meth46071() { }
+    public void meth46072() { }
+    public void meth46073() { }
+    public void meth46074() { }
+    public void meth46075() { }
+    public void meth46076() { }
+    public void meth46077() { }
+    public void meth46078() { }
+    public void meth46079() { }
+    public void meth46080() { }
+    public void meth46081() { }
+    public void meth46082() { }
+    public void meth46083() { }
+    public void meth46084() { }
+    public void meth46085() { }
+    public void meth46086() { }
+    public void meth46087() { }
+    public void meth46088() { }
+    public void meth46089() { }
+    public void meth46090() { }
+    public void meth46091() { }
+    public void meth46092() { }
+    public void meth46093() { }
+    public void meth46094() { }
+    public void meth46095() { }
+    public void meth46096() { }
+    public void meth46097() { }
+    public void meth46098() { }
+    public void meth46099() { }
+    public void meth46100() { }
+    public void meth46101() { }
+    public void meth46102() { }
+    public void meth46103() { }
+    public void meth46104() { }
+    public void meth46105() { }
+    public void meth46106() { }
+    public void meth46107() { }
+    public void meth46108() { }
+    public void meth46109() { }
+    public void meth46110() { }
+    public void meth46111() { }
+    public void meth46112() { }
+    public void meth46113() { }
+    public void meth46114() { }
+    public void meth46115() { }
+    public void meth46116() { }
+    public void meth46117() { }
+    public void meth46118() { }
+    public void meth46119() { }
+    public void meth46120() { }
+    public void meth46121() { }
+    public void meth46122() { }
+    public void meth46123() { }
+    public void meth46124() { }
+    public void meth46125() { }
+    public void meth46126() { }
+    public void meth46127() { }
+    public void meth46128() { }
+    public void meth46129() { }
+    public void meth46130() { }
+    public void meth46131() { }
+    public void meth46132() { }
+    public void meth46133() { }
+    public void meth46134() { }
+    public void meth46135() { }
+    public void meth46136() { }
+    public void meth46137() { }
+    public void meth46138() { }
+    public void meth46139() { }
+    public void meth46140() { }
+    public void meth46141() { }
+    public void meth46142() { }
+    public void meth46143() { }
+    public void meth46144() { }
+    public void meth46145() { }
+    public void meth46146() { }
+    public void meth46147() { }
+    public void meth46148() { }
+    public void meth46149() { }
+    public void meth46150() { }
+    public void meth46151() { }
+    public void meth46152() { }
+    public void meth46153() { }
+    public void meth46154() { }
+    public void meth46155() { }
+    public void meth46156() { }
+    public void meth46157() { }
+    public void meth46158() { }
+    public void meth46159() { }
+    public void meth46160() { }
+    public void meth46161() { }
+    public void meth46162() { }
+    public void meth46163() { }
+    public void meth46164() { }
+    public void meth46165() { }
+    public void meth46166() { }
+    public void meth46167() { }
+    public void meth46168() { }
+    public void meth46169() { }
+    public void meth46170() { }
+    public void meth46171() { }
+    public void meth46172() { }
+    public void meth46173() { }
+    public void meth46174() { }
+    public void meth46175() { }
+    public void meth46176() { }
+    public void meth46177() { }
+    public void meth46178() { }
+    public void meth46179() { }
+    public void meth46180() { }
+    public void meth46181() { }
+    public void meth46182() { }
+    public void meth46183() { }
+    public void meth46184() { }
+    public void meth46185() { }
+    public void meth46186() { }
+    public void meth46187() { }
+    public void meth46188() { }
+    public void meth46189() { }
+    public void meth46190() { }
+    public void meth46191() { }
+    public void meth46192() { }
+    public void meth46193() { }
+    public void meth46194() { }
+    public void meth46195() { }
+    public void meth46196() { }
+    public void meth46197() { }
+    public void meth46198() { }
+    public void meth46199() { }
+    public void meth46200() { }
+    public void meth46201() { }
+    public void meth46202() { }
+    public void meth46203() { }
+    public void meth46204() { }
+    public void meth46205() { }
+    public void meth46206() { }
+    public void meth46207() { }
+    public void meth46208() { }
+    public void meth46209() { }
+    public void meth46210() { }
+    public void meth46211() { }
+    public void meth46212() { }
+    public void meth46213() { }
+    public void meth46214() { }
+    public void meth46215() { }
+    public void meth46216() { }
+    public void meth46217() { }
+    public void meth46218() { }
+    public void meth46219() { }
+    public void meth46220() { }
+    public void meth46221() { }
+    public void meth46222() { }
+    public void meth46223() { }
+    public void meth46224() { }
+    public void meth46225() { }
+    public void meth46226() { }
+    public void meth46227() { }
+    public void meth46228() { }
+    public void meth46229() { }
+    public void meth46230() { }
+    public void meth46231() { }
+    public void meth46232() { }
+    public void meth46233() { }
+    public void meth46234() { }
+    public void meth46235() { }
+    public void meth46236() { }
+    public void meth46237() { }
+    public void meth46238() { }
+    public void meth46239() { }
+    public void meth46240() { }
+    public void meth46241() { }
+    public void meth46242() { }
+    public void meth46243() { }
+    public void meth46244() { }
+    public void meth46245() { }
+    public void meth46246() { }
+    public void meth46247() { }
+    public void meth46248() { }
+    public void meth46249() { }
+    public void meth46250() { }
+    public void meth46251() { }
+    public void meth46252() { }
+    public void meth46253() { }
+    public void meth46254() { }
+    public void meth46255() { }
+    public void meth46256() { }
+    public void meth46257() { }
+    public void meth46258() { }
+    public void meth46259() { }
+    public void meth46260() { }
+    public void meth46261() { }
+    public void meth46262() { }
+    public void meth46263() { }
+    public void meth46264() { }
+    public void meth46265() { }
+    public void meth46266() { }
+    public void meth46267() { }
+    public void meth46268() { }
+    public void meth46269() { }
+    public void meth46270() { }
+    public void meth46271() { }
+    public void meth46272() { }
+    public void meth46273() { }
+    public void meth46274() { }
+    public void meth46275() { }
+    public void meth46276() { }
+    public void meth46277() { }
+    public void meth46278() { }
+    public void meth46279() { }
+    public void meth46280() { }
+    public void meth46281() { }
+    public void meth46282() { }
+    public void meth46283() { }
+    public void meth46284() { }
+    public void meth46285() { }
+    public void meth46286() { }
+    public void meth46287() { }
+    public void meth46288() { }
+    public void meth46289() { }
+    public void meth46290() { }
+    public void meth46291() { }
+    public void meth46292() { }
+    public void meth46293() { }
+    public void meth46294() { }
+    public void meth46295() { }
+    public void meth46296() { }
+    public void meth46297() { }
+    public void meth46298() { }
+    public void meth46299() { }
+    public void meth46300() { }
+    public void meth46301() { }
+    public void meth46302() { }
+    public void meth46303() { }
+    public void meth46304() { }
+    public void meth46305() { }
+    public void meth46306() { }
+    public void meth46307() { }
+    public void meth46308() { }
+    public void meth46309() { }
+    public void meth46310() { }
+    public void meth46311() { }
+    public void meth46312() { }
+    public void meth46313() { }
+    public void meth46314() { }
+    public void meth46315() { }
+    public void meth46316() { }
+    public void meth46317() { }
+    public void meth46318() { }
+    public void meth46319() { }
+    public void meth46320() { }
+    public void meth46321() { }
+    public void meth46322() { }
+    public void meth46323() { }
+    public void meth46324() { }
+    public void meth46325() { }
+    public void meth46326() { }
+    public void meth46327() { }
+    public void meth46328() { }
+    public void meth46329() { }
+    public void meth46330() { }
+    public void meth46331() { }
+    public void meth46332() { }
+    public void meth46333() { }
+    public void meth46334() { }
+    public void meth46335() { }
+    public void meth46336() { }
+    public void meth46337() { }
+    public void meth46338() { }
+    public void meth46339() { }
+    public void meth46340() { }
+    public void meth46341() { }
+    public void meth46342() { }
+    public void meth46343() { }
+    public void meth46344() { }
+    public void meth46345() { }
+    public void meth46346() { }
+    public void meth46347() { }
+    public void meth46348() { }
+    public void meth46349() { }
+    public void meth46350() { }
+    public void meth46351() { }
+    public void meth46352() { }
+    public void meth46353() { }
+    public void meth46354() { }
+    public void meth46355() { }
+    public void meth46356() { }
+    public void meth46357() { }
+    public void meth46358() { }
+    public void meth46359() { }
+    public void meth46360() { }
+    public void meth46361() { }
+    public void meth46362() { }
+    public void meth46363() { }
+    public void meth46364() { }
+    public void meth46365() { }
+    public void meth46366() { }
+    public void meth46367() { }
+    public void meth46368() { }
+    public void meth46369() { }
+    public void meth46370() { }
+    public void meth46371() { }
+    public void meth46372() { }
+    public void meth46373() { }
+    public void meth46374() { }
+    public void meth46375() { }
+    public void meth46376() { }
+    public void meth46377() { }
+    public void meth46378() { }
+    public void meth46379() { }
+    public void meth46380() { }
+    public void meth46381() { }
+    public void meth46382() { }
+    public void meth46383() { }
+    public void meth46384() { }
+    public void meth46385() { }
+    public void meth46386() { }
+    public void meth46387() { }
+    public void meth46388() { }
+    public void meth46389() { }
+    public void meth46390() { }
+    public void meth46391() { }
+    public void meth46392() { }
+    public void meth46393() { }
+    public void meth46394() { }
+    public void meth46395() { }
+    public void meth46396() { }
+    public void meth46397() { }
+    public void meth46398() { }
+    public void meth46399() { }
+    public void meth46400() { }
+    public void meth46401() { }
+    public void meth46402() { }
+    public void meth46403() { }
+    public void meth46404() { }
+    public void meth46405() { }
+    public void meth46406() { }
+    public void meth46407() { }
+    public void meth46408() { }
+    public void meth46409() { }
+    public void meth46410() { }
+    public void meth46411() { }
+    public void meth46412() { }
+    public void meth46413() { }
+    public void meth46414() { }
+    public void meth46415() { }
+    public void meth46416() { }
+    public void meth46417() { }
+    public void meth46418() { }
+    public void meth46419() { }
+    public void meth46420() { }
+    public void meth46421() { }
+    public void meth46422() { }
+    public void meth46423() { }
+    public void meth46424() { }
+    public void meth46425() { }
+    public void meth46426() { }
+    public void meth46427() { }
+    public void meth46428() { }
+    public void meth46429() { }
+    public void meth46430() { }
+    public void meth46431() { }
+    public void meth46432() { }
+    public void meth46433() { }
+    public void meth46434() { }
+    public void meth46435() { }
+    public void meth46436() { }
+    public void meth46437() { }
+    public void meth46438() { }
+    public void meth46439() { }
+    public void meth46440() { }
+    public void meth46441() { }
+    public void meth46442() { }
+    public void meth46443() { }
+    public void meth46444() { }
+    public void meth46445() { }
+    public void meth46446() { }
+    public void meth46447() { }
+    public void meth46448() { }
+    public void meth46449() { }
+    public void meth46450() { }
+    public void meth46451() { }
+    public void meth46452() { }
+    public void meth46453() { }
+    public void meth46454() { }
+    public void meth46455() { }
+    public void meth46456() { }
+    public void meth46457() { }
+    public void meth46458() { }
+    public void meth46459() { }
+    public void meth46460() { }
+    public void meth46461() { }
+    public void meth46462() { }
+    public void meth46463() { }
+    public void meth46464() { }
+    public void meth46465() { }
+    public void meth46466() { }
+    public void meth46467() { }
+    public void meth46468() { }
+    public void meth46469() { }
+    public void meth46470() { }
+    public void meth46471() { }
+    public void meth46472() { }
+    public void meth46473() { }
+    public void meth46474() { }
+    public void meth46475() { }
+    public void meth46476() { }
+    public void meth46477() { }
+    public void meth46478() { }
+    public void meth46479() { }
+    public void meth46480() { }
+    public void meth46481() { }
+    public void meth46482() { }
+    public void meth46483() { }
+    public void meth46484() { }
+    public void meth46485() { }
+    public void meth46486() { }
+    public void meth46487() { }
+    public void meth46488() { }
+    public void meth46489() { }
+    public void meth46490() { }
+    public void meth46491() { }
+    public void meth46492() { }
+    public void meth46493() { }
+    public void meth46494() { }
+    public void meth46495() { }
+    public void meth46496() { }
+    public void meth46497() { }
+    public void meth46498() { }
+    public void meth46499() { }
+    public void meth46500() { }
+    public void meth46501() { }
+    public void meth46502() { }
+    public void meth46503() { }
+    public void meth46504() { }
+    public void meth46505() { }
+    public void meth46506() { }
+    public void meth46507() { }
+    public void meth46508() { }
+    public void meth46509() { }
+    public void meth46510() { }
+    public void meth46511() { }
+    public void meth46512() { }
+    public void meth46513() { }
+    public void meth46514() { }
+    public void meth46515() { }
+    public void meth46516() { }
+    public void meth46517() { }
+    public void meth46518() { }
+    public void meth46519() { }
+    public void meth46520() { }
+    public void meth46521() { }
+    public void meth46522() { }
+    public void meth46523() { }
+    public void meth46524() { }
+    public void meth46525() { }
+    public void meth46526() { }
+    public void meth46527() { }
+    public void meth46528() { }
+    public void meth46529() { }
+    public void meth46530() { }
+    public void meth46531() { }
+    public void meth46532() { }
+    public void meth46533() { }
+    public void meth46534() { }
+    public void meth46535() { }
+    public void meth46536() { }
+    public void meth46537() { }
+    public void meth46538() { }
+    public void meth46539() { }
+    public void meth46540() { }
+    public void meth46541() { }
+    public void meth46542() { }
+    public void meth46543() { }
+    public void meth46544() { }
+    public void meth46545() { }
+    public void meth46546() { }
+    public void meth46547() { }
+    public void meth46548() { }
+    public void meth46549() { }
+    public void meth46550() { }
+    public void meth46551() { }
+    public void meth46552() { }
+    public void meth46553() { }
+    public void meth46554() { }
+    public void meth46555() { }
+    public void meth46556() { }
+    public void meth46557() { }
+    public void meth46558() { }
+    public void meth46559() { }
+    public void meth46560() { }
+    public void meth46561() { }
+    public void meth46562() { }
+    public void meth46563() { }
+    public void meth46564() { }
+    public void meth46565() { }
+    public void meth46566() { }
+    public void meth46567() { }
+    public void meth46568() { }
+    public void meth46569() { }
+    public void meth46570() { }
+    public void meth46571() { }
+    public void meth46572() { }
+    public void meth46573() { }
+    public void meth46574() { }
+    public void meth46575() { }
+    public void meth46576() { }
+    public void meth46577() { }
+    public void meth46578() { }
+    public void meth46579() { }
+    public void meth46580() { }
+    public void meth46581() { }
+    public void meth46582() { }
+    public void meth46583() { }
+    public void meth46584() { }
+    public void meth46585() { }
+    public void meth46586() { }
+    public void meth46587() { }
+    public void meth46588() { }
+    public void meth46589() { }
+    public void meth46590() { }
+    public void meth46591() { }
+    public void meth46592() { }
+    public void meth46593() { }
+    public void meth46594() { }
+    public void meth46595() { }
+    public void meth46596() { }
+    public void meth46597() { }
+    public void meth46598() { }
+    public void meth46599() { }
+    public void meth46600() { }
+    public void meth46601() { }
+    public void meth46602() { }
+    public void meth46603() { }
+    public void meth46604() { }
+    public void meth46605() { }
+    public void meth46606() { }
+    public void meth46607() { }
+    public void meth46608() { }
+    public void meth46609() { }
+    public void meth46610() { }
+    public void meth46611() { }
+    public void meth46612() { }
+    public void meth46613() { }
+    public void meth46614() { }
+    public void meth46615() { }
+    public void meth46616() { }
+    public void meth46617() { }
+    public void meth46618() { }
+    public void meth46619() { }
+    public void meth46620() { }
+    public void meth46621() { }
+    public void meth46622() { }
+    public void meth46623() { }
+    public void meth46624() { }
+    public void meth46625() { }
+    public void meth46626() { }
+    public void meth46627() { }
+    public void meth46628() { }
+    public void meth46629() { }
+    public void meth46630() { }
+    public void meth46631() { }
+    public void meth46632() { }
+    public void meth46633() { }
+    public void meth46634() { }
+    public void meth46635() { }
+    public void meth46636() { }
+    public void meth46637() { }
+    public void meth46638() { }
+    public void meth46639() { }
+    public void meth46640() { }
+    public void meth46641() { }
+    public void meth46642() { }
+    public void meth46643() { }
+    public void meth46644() { }
+    public void meth46645() { }
+    public void meth46646() { }
+    public void meth46647() { }
+    public void meth46648() { }
+    public void meth46649() { }
+    public void meth46650() { }
+    public void meth46651() { }
+    public void meth46652() { }
+    public void meth46653() { }
+    public void meth46654() { }
+    public void meth46655() { }
+    public void meth46656() { }
+    public void meth46657() { }
+    public void meth46658() { }
+    public void meth46659() { }
+    public void meth46660() { }
+    public void meth46661() { }
+    public void meth46662() { }
+    public void meth46663() { }
+    public void meth46664() { }
+    public void meth46665() { }
+    public void meth46666() { }
+    public void meth46667() { }
+    public void meth46668() { }
+    public void meth46669() { }
+    public void meth46670() { }
+    public void meth46671() { }
+    public void meth46672() { }
+    public void meth46673() { }
+    public void meth46674() { }
+    public void meth46675() { }
+    public void meth46676() { }
+    public void meth46677() { }
+    public void meth46678() { }
+    public void meth46679() { }
+    public void meth46680() { }
+    public void meth46681() { }
+    public void meth46682() { }
+    public void meth46683() { }
+    public void meth46684() { }
+    public void meth46685() { }
+    public void meth46686() { }
+    public void meth46687() { }
+    public void meth46688() { }
+    public void meth46689() { }
+    public void meth46690() { }
+    public void meth46691() { }
+    public void meth46692() { }
+    public void meth46693() { }
+    public void meth46694() { }
+    public void meth46695() { }
+    public void meth46696() { }
+    public void meth46697() { }
+    public void meth46698() { }
+    public void meth46699() { }
+    public void meth46700() { }
+    public void meth46701() { }
+    public void meth46702() { }
+    public void meth46703() { }
+    public void meth46704() { }
+    public void meth46705() { }
+    public void meth46706() { }
+    public void meth46707() { }
+    public void meth46708() { }
+    public void meth46709() { }
+    public void meth46710() { }
+    public void meth46711() { }
+    public void meth46712() { }
+    public void meth46713() { }
+    public void meth46714() { }
+    public void meth46715() { }
+    public void meth46716() { }
+    public void meth46717() { }
+    public void meth46718() { }
+    public void meth46719() { }
+    public void meth46720() { }
+    public void meth46721() { }
+    public void meth46722() { }
+    public void meth46723() { }
+    public void meth46724() { }
+    public void meth46725() { }
+    public void meth46726() { }
+    public void meth46727() { }
+    public void meth46728() { }
+    public void meth46729() { }
+    public void meth46730() { }
+    public void meth46731() { }
+    public void meth46732() { }
+    public void meth46733() { }
+    public void meth46734() { }
+    public void meth46735() { }
+    public void meth46736() { }
+    public void meth46737() { }
+    public void meth46738() { }
+    public void meth46739() { }
+    public void meth46740() { }
+    public void meth46741() { }
+    public void meth46742() { }
+    public void meth46743() { }
+    public void meth46744() { }
+    public void meth46745() { }
+    public void meth46746() { }
+    public void meth46747() { }
+    public void meth46748() { }
+    public void meth46749() { }
+    public void meth46750() { }
+    public void meth46751() { }
+    public void meth46752() { }
+    public void meth46753() { }
+    public void meth46754() { }
+    public void meth46755() { }
+    public void meth46756() { }
+    public void meth46757() { }
+    public void meth46758() { }
+    public void meth46759() { }
+    public void meth46760() { }
+    public void meth46761() { }
+    public void meth46762() { }
+    public void meth46763() { }
+    public void meth46764() { }
+    public void meth46765() { }
+    public void meth46766() { }
+    public void meth46767() { }
+    public void meth46768() { }
+    public void meth46769() { }
+    public void meth46770() { }
+    public void meth46771() { }
+    public void meth46772() { }
+    public void meth46773() { }
+    public void meth46774() { }
+    public void meth46775() { }
+    public void meth46776() { }
+    public void meth46777() { }
+    public void meth46778() { }
+    public void meth46779() { }
+    public void meth46780() { }
+    public void meth46781() { }
+    public void meth46782() { }
+    public void meth46783() { }
+    public void meth46784() { }
+    public void meth46785() { }
+    public void meth46786() { }
+    public void meth46787() { }
+    public void meth46788() { }
+    public void meth46789() { }
+    public void meth46790() { }
+    public void meth46791() { }
+    public void meth46792() { }
+    public void meth46793() { }
+    public void meth46794() { }
+    public void meth46795() { }
+    public void meth46796() { }
+    public void meth46797() { }
+    public void meth46798() { }
+    public void meth46799() { }
+    public void meth46800() { }
+    public void meth46801() { }
+    public void meth46802() { }
+    public void meth46803() { }
+    public void meth46804() { }
+    public void meth46805() { }
+    public void meth46806() { }
+    public void meth46807() { }
+    public void meth46808() { }
+    public void meth46809() { }
+    public void meth46810() { }
+    public void meth46811() { }
+    public void meth46812() { }
+    public void meth46813() { }
+    public void meth46814() { }
+    public void meth46815() { }
+    public void meth46816() { }
+    public void meth46817() { }
+    public void meth46818() { }
+    public void meth46819() { }
+    public void meth46820() { }
+    public void meth46821() { }
+    public void meth46822() { }
+    public void meth46823() { }
+    public void meth46824() { }
+    public void meth46825() { }
+    public void meth46826() { }
+    public void meth46827() { }
+    public void meth46828() { }
+    public void meth46829() { }
+    public void meth46830() { }
+    public void meth46831() { }
+    public void meth46832() { }
+    public void meth46833() { }
+    public void meth46834() { }
+    public void meth46835() { }
+    public void meth46836() { }
+    public void meth46837() { }
+    public void meth46838() { }
+    public void meth46839() { }
+    public void meth46840() { }
+    public void meth46841() { }
+    public void meth46842() { }
+    public void meth46843() { }
+    public void meth46844() { }
+    public void meth46845() { }
+    public void meth46846() { }
+    public void meth46847() { }
+    public void meth46848() { }
+    public void meth46849() { }
+    public void meth46850() { }
+    public void meth46851() { }
+    public void meth46852() { }
+    public void meth46853() { }
+    public void meth46854() { }
+    public void meth46855() { }
+    public void meth46856() { }
+    public void meth46857() { }
+    public void meth46858() { }
+    public void meth46859() { }
+    public void meth46860() { }
+    public void meth46861() { }
+    public void meth46862() { }
+    public void meth46863() { }
+    public void meth46864() { }
+    public void meth46865() { }
+    public void meth46866() { }
+    public void meth46867() { }
+    public void meth46868() { }
+    public void meth46869() { }
+    public void meth46870() { }
+    public void meth46871() { }
+    public void meth46872() { }
+    public void meth46873() { }
+    public void meth46874() { }
+    public void meth46875() { }
+    public void meth46876() { }
+    public void meth46877() { }
+    public void meth46878() { }
+    public void meth46879() { }
+    public void meth46880() { }
+    public void meth46881() { }
+    public void meth46882() { }
+    public void meth46883() { }
+    public void meth46884() { }
+    public void meth46885() { }
+    public void meth46886() { }
+    public void meth46887() { }
+    public void meth46888() { }
+    public void meth46889() { }
+    public void meth46890() { }
+    public void meth46891() { }
+    public void meth46892() { }
+    public void meth46893() { }
+    public void meth46894() { }
+    public void meth46895() { }
+    public void meth46896() { }
+    public void meth46897() { }
+    public void meth46898() { }
+    public void meth46899() { }
+    public void meth46900() { }
+    public void meth46901() { }
+    public void meth46902() { }
+    public void meth46903() { }
+    public void meth46904() { }
+    public void meth46905() { }
+    public void meth46906() { }
+    public void meth46907() { }
+    public void meth46908() { }
+    public void meth46909() { }
+    public void meth46910() { }
+    public void meth46911() { }
+    public void meth46912() { }
+    public void meth46913() { }
+    public void meth46914() { }
+    public void meth46915() { }
+    public void meth46916() { }
+    public void meth46917() { }
+    public void meth46918() { }
+    public void meth46919() { }
+    public void meth46920() { }
+    public void meth46921() { }
+    public void meth46922() { }
+    public void meth46923() { }
+    public void meth46924() { }
+    public void meth46925() { }
+    public void meth46926() { }
+    public void meth46927() { }
+    public void meth46928() { }
+    public void meth46929() { }
+    public void meth46930() { }
+    public void meth46931() { }
+    public void meth46932() { }
+    public void meth46933() { }
+    public void meth46934() { }
+    public void meth46935() { }
+    public void meth46936() { }
+    public void meth46937() { }
+    public void meth46938() { }
+    public void meth46939() { }
+    public void meth46940() { }
+    public void meth46941() { }
+    public void meth46942() { }
+    public void meth46943() { }
+    public void meth46944() { }
+    public void meth46945() { }
+    public void meth46946() { }
+    public void meth46947() { }
+    public void meth46948() { }
+    public void meth46949() { }
+    public void meth46950() { }
+    public void meth46951() { }
+    public void meth46952() { }
+    public void meth46953() { }
+    public void meth46954() { }
+    public void meth46955() { }
+    public void meth46956() { }
+    public void meth46957() { }
+    public void meth46958() { }
+    public void meth46959() { }
+    public void meth46960() { }
+    public void meth46961() { }
+    public void meth46962() { }
+    public void meth46963() { }
+    public void meth46964() { }
+    public void meth46965() { }
+    public void meth46966() { }
+    public void meth46967() { }
+    public void meth46968() { }
+    public void meth46969() { }
+    public void meth46970() { }
+    public void meth46971() { }
+    public void meth46972() { }
+    public void meth46973() { }
+    public void meth46974() { }
+    public void meth46975() { }
+    public void meth46976() { }
+    public void meth46977() { }
+    public void meth46978() { }
+    public void meth46979() { }
+    public void meth46980() { }
+    public void meth46981() { }
+    public void meth46982() { }
+    public void meth46983() { }
+    public void meth46984() { }
+    public void meth46985() { }
+    public void meth46986() { }
+    public void meth46987() { }
+    public void meth46988() { }
+    public void meth46989() { }
+    public void meth46990() { }
+    public void meth46991() { }
+    public void meth46992() { }
+    public void meth46993() { }
+    public void meth46994() { }
+    public void meth46995() { }
+    public void meth46996() { }
+    public void meth46997() { }
+    public void meth46998() { }
+    public void meth46999() { }
+    public void meth47000() { }
+    public void meth47001() { }
+    public void meth47002() { }
+    public void meth47003() { }
+    public void meth47004() { }
+    public void meth47005() { }
+    public void meth47006() { }
+    public void meth47007() { }
+    public void meth47008() { }
+    public void meth47009() { }
+    public void meth47010() { }
+    public void meth47011() { }
+    public void meth47012() { }
+    public void meth47013() { }
+    public void meth47014() { }
+    public void meth47015() { }
+    public void meth47016() { }
+    public void meth47017() { }
+    public void meth47018() { }
+    public void meth47019() { }
+    public void meth47020() { }
+    public void meth47021() { }
+    public void meth47022() { }
+    public void meth47023() { }
+    public void meth47024() { }
+    public void meth47025() { }
+    public void meth47026() { }
+    public void meth47027() { }
+    public void meth47028() { }
+    public void meth47029() { }
+    public void meth47030() { }
+    public void meth47031() { }
+    public void meth47032() { }
+    public void meth47033() { }
+    public void meth47034() { }
+    public void meth47035() { }
+    public void meth47036() { }
+    public void meth47037() { }
+    public void meth47038() { }
+    public void meth47039() { }
+    public void meth47040() { }
+    public void meth47041() { }
+    public void meth47042() { }
+    public void meth47043() { }
+    public void meth47044() { }
+    public void meth47045() { }
+    public void meth47046() { }
+    public void meth47047() { }
+    public void meth47048() { }
+    public void meth47049() { }
+    public void meth47050() { }
+    public void meth47051() { }
+    public void meth47052() { }
+    public void meth47053() { }
+    public void meth47054() { }
+    public void meth47055() { }
+    public void meth47056() { }
+    public void meth47057() { }
+    public void meth47058() { }
+    public void meth47059() { }
+    public void meth47060() { }
+    public void meth47061() { }
+    public void meth47062() { }
+    public void meth47063() { }
+    public void meth47064() { }
+    public void meth47065() { }
+    public void meth47066() { }
+    public void meth47067() { }
+    public void meth47068() { }
+    public void meth47069() { }
+    public void meth47070() { }
+    public void meth47071() { }
+    public void meth47072() { }
+    public void meth47073() { }
+    public void meth47074() { }
+    public void meth47075() { }
+    public void meth47076() { }
+    public void meth47077() { }
+    public void meth47078() { }
+    public void meth47079() { }
+    public void meth47080() { }
+    public void meth47081() { }
+    public void meth47082() { }
+    public void meth47083() { }
+    public void meth47084() { }
+    public void meth47085() { }
+    public void meth47086() { }
+    public void meth47087() { }
+    public void meth47088() { }
+    public void meth47089() { }
+    public void meth47090() { }
+    public void meth47091() { }
+    public void meth47092() { }
+    public void meth47093() { }
+    public void meth47094() { }
+    public void meth47095() { }
+    public void meth47096() { }
+    public void meth47097() { }
+    public void meth47098() { }
+    public void meth47099() { }
+    public void meth47100() { }
+    public void meth47101() { }
+    public void meth47102() { }
+    public void meth47103() { }
+    public void meth47104() { }
+    public void meth47105() { }
+    public void meth47106() { }
+    public void meth47107() { }
+    public void meth47108() { }
+    public void meth47109() { }
+    public void meth47110() { }
+    public void meth47111() { }
+    public void meth47112() { }
+    public void meth47113() { }
+    public void meth47114() { }
+    public void meth47115() { }
+    public void meth47116() { }
+    public void meth47117() { }
+    public void meth47118() { }
+    public void meth47119() { }
+    public void meth47120() { }
+    public void meth47121() { }
+    public void meth47122() { }
+    public void meth47123() { }
+    public void meth47124() { }
+    public void meth47125() { }
+    public void meth47126() { }
+    public void meth47127() { }
+    public void meth47128() { }
+    public void meth47129() { }
+    public void meth47130() { }
+    public void meth47131() { }
+    public void meth47132() { }
+    public void meth47133() { }
+    public void meth47134() { }
+    public void meth47135() { }
+    public void meth47136() { }
+    public void meth47137() { }
+    public void meth47138() { }
+    public void meth47139() { }
+    public void meth47140() { }
+    public void meth47141() { }
+    public void meth47142() { }
+    public void meth47143() { }
+    public void meth47144() { }
+    public void meth47145() { }
+    public void meth47146() { }
+    public void meth47147() { }
+    public void meth47148() { }
+    public void meth47149() { }
+    public void meth47150() { }
+    public void meth47151() { }
+    public void meth47152() { }
+    public void meth47153() { }
+    public void meth47154() { }
+    public void meth47155() { }
+    public void meth47156() { }
+    public void meth47157() { }
+    public void meth47158() { }
+    public void meth47159() { }
+    public void meth47160() { }
+    public void meth47161() { }
+    public void meth47162() { }
+    public void meth47163() { }
+    public void meth47164() { }
+    public void meth47165() { }
+    public void meth47166() { }
+    public void meth47167() { }
+    public void meth47168() { }
+    public void meth47169() { }
+    public void meth47170() { }
+    public void meth47171() { }
+    public void meth47172() { }
+    public void meth47173() { }
+    public void meth47174() { }
+    public void meth47175() { }
+    public void meth47176() { }
+    public void meth47177() { }
+    public void meth47178() { }
+    public void meth47179() { }
+    public void meth47180() { }
+    public void meth47181() { }
+    public void meth47182() { }
+    public void meth47183() { }
+    public void meth47184() { }
+    public void meth47185() { }
+    public void meth47186() { }
+    public void meth47187() { }
+    public void meth47188() { }
+    public void meth47189() { }
+    public void meth47190() { }
+    public void meth47191() { }
+    public void meth47192() { }
+    public void meth47193() { }
+    public void meth47194() { }
+    public void meth47195() { }
+    public void meth47196() { }
+    public void meth47197() { }
+    public void meth47198() { }
+    public void meth47199() { }
+    public void meth47200() { }
+    public void meth47201() { }
+    public void meth47202() { }
+    public void meth47203() { }
+    public void meth47204() { }
+    public void meth47205() { }
+    public void meth47206() { }
+    public void meth47207() { }
+    public void meth47208() { }
+    public void meth47209() { }
+    public void meth47210() { }
+    public void meth47211() { }
+    public void meth47212() { }
+    public void meth47213() { }
+    public void meth47214() { }
+    public void meth47215() { }
+    public void meth47216() { }
+    public void meth47217() { }
+    public void meth47218() { }
+    public void meth47219() { }
+    public void meth47220() { }
+    public void meth47221() { }
+    public void meth47222() { }
+    public void meth47223() { }
+    public void meth47224() { }
+    public void meth47225() { }
+    public void meth47226() { }
+    public void meth47227() { }
+    public void meth47228() { }
+    public void meth47229() { }
+    public void meth47230() { }
+    public void meth47231() { }
+    public void meth47232() { }
+    public void meth47233() { }
+    public void meth47234() { }
+    public void meth47235() { }
+    public void meth47236() { }
+    public void meth47237() { }
+    public void meth47238() { }
+    public void meth47239() { }
+    public void meth47240() { }
+    public void meth47241() { }
+    public void meth47242() { }
+    public void meth47243() { }
+    public void meth47244() { }
+    public void meth47245() { }
+    public void meth47246() { }
+    public void meth47247() { }
+    public void meth47248() { }
+    public void meth47249() { }
+    public void meth47250() { }
+    public void meth47251() { }
+    public void meth47252() { }
+    public void meth47253() { }
+    public void meth47254() { }
+    public void meth47255() { }
+    public void meth47256() { }
+    public void meth47257() { }
+    public void meth47258() { }
+    public void meth47259() { }
+    public void meth47260() { }
+    public void meth47261() { }
+    public void meth47262() { }
+    public void meth47263() { }
+    public void meth47264() { }
+    public void meth47265() { }
+    public void meth47266() { }
+    public void meth47267() { }
+    public void meth47268() { }
+    public void meth47269() { }
+    public void meth47270() { }
+    public void meth47271() { }
+    public void meth47272() { }
+    public void meth47273() { }
+    public void meth47274() { }
+    public void meth47275() { }
+    public void meth47276() { }
+    public void meth47277() { }
+    public void meth47278() { }
+    public void meth47279() { }
+    public void meth47280() { }
+    public void meth47281() { }
+    public void meth47282() { }
+    public void meth47283() { }
+    public void meth47284() { }
+    public void meth47285() { }
+    public void meth47286() { }
+    public void meth47287() { }
+    public void meth47288() { }
+    public void meth47289() { }
+    public void meth47290() { }
+    public void meth47291() { }
+    public void meth47292() { }
+    public void meth47293() { }
+    public void meth47294() { }
+    public void meth47295() { }
+    public void meth47296() { }
+    public void meth47297() { }
+    public void meth47298() { }
+    public void meth47299() { }
+    public void meth47300() { }
+    public void meth47301() { }
+    public void meth47302() { }
+    public void meth47303() { }
+    public void meth47304() { }
+    public void meth47305() { }
+    public void meth47306() { }
+    public void meth47307() { }
+    public void meth47308() { }
+    public void meth47309() { }
+    public void meth47310() { }
+    public void meth47311() { }
+    public void meth47312() { }
+    public void meth47313() { }
+    public void meth47314() { }
+    public void meth47315() { }
+    public void meth47316() { }
+    public void meth47317() { }
+    public void meth47318() { }
+    public void meth47319() { }
+    public void meth47320() { }
+    public void meth47321() { }
+    public void meth47322() { }
+    public void meth47323() { }
+    public void meth47324() { }
+    public void meth47325() { }
+    public void meth47326() { }
+    public void meth47327() { }
+    public void meth47328() { }
+    public void meth47329() { }
+    public void meth47330() { }
+    public void meth47331() { }
+    public void meth47332() { }
+    public void meth47333() { }
+    public void meth47334() { }
+    public void meth47335() { }
+    public void meth47336() { }
+    public void meth47337() { }
+    public void meth47338() { }
+    public void meth47339() { }
+    public void meth47340() { }
+    public void meth47341() { }
+    public void meth47342() { }
+    public void meth47343() { }
+    public void meth47344() { }
+    public void meth47345() { }
+    public void meth47346() { }
+    public void meth47347() { }
+    public void meth47348() { }
+    public void meth47349() { }
+    public void meth47350() { }
+    public void meth47351() { }
+    public void meth47352() { }
+    public void meth47353() { }
+    public void meth47354() { }
+    public void meth47355() { }
+    public void meth47356() { }
+    public void meth47357() { }
+    public void meth47358() { }
+    public void meth47359() { }
+    public void meth47360() { }
+    public void meth47361() { }
+    public void meth47362() { }
+    public void meth47363() { }
+    public void meth47364() { }
+    public void meth47365() { }
+    public void meth47366() { }
+    public void meth47367() { }
+    public void meth47368() { }
+    public void meth47369() { }
+    public void meth47370() { }
+    public void meth47371() { }
+    public void meth47372() { }
+    public void meth47373() { }
+    public void meth47374() { }
+    public void meth47375() { }
+    public void meth47376() { }
+    public void meth47377() { }
+    public void meth47378() { }
+    public void meth47379() { }
+    public void meth47380() { }
+    public void meth47381() { }
+    public void meth47382() { }
+    public void meth47383() { }
+    public void meth47384() { }
+    public void meth47385() { }
+    public void meth47386() { }
+    public void meth47387() { }
+    public void meth47388() { }
+    public void meth47389() { }
+    public void meth47390() { }
+    public void meth47391() { }
+    public void meth47392() { }
+    public void meth47393() { }
+    public void meth47394() { }
+    public void meth47395() { }
+    public void meth47396() { }
+    public void meth47397() { }
+    public void meth47398() { }
+    public void meth47399() { }
+    public void meth47400() { }
+    public void meth47401() { }
+    public void meth47402() { }
+    public void meth47403() { }
+    public void meth47404() { }
+    public void meth47405() { }
+    public void meth47406() { }
+    public void meth47407() { }
+    public void meth47408() { }
+    public void meth47409() { }
+    public void meth47410() { }
+    public void meth47411() { }
+    public void meth47412() { }
+    public void meth47413() { }
+    public void meth47414() { }
+    public void meth47415() { }
+    public void meth47416() { }
+    public void meth47417() { }
+    public void meth47418() { }
+    public void meth47419() { }
+    public void meth47420() { }
+    public void meth47421() { }
+    public void meth47422() { }
+    public void meth47423() { }
+    public void meth47424() { }
+    public void meth47425() { }
+    public void meth47426() { }
+    public void meth47427() { }
+    public void meth47428() { }
+    public void meth47429() { }
+    public void meth47430() { }
+    public void meth47431() { }
+    public void meth47432() { }
+    public void meth47433() { }
+    public void meth47434() { }
+    public void meth47435() { }
+    public void meth47436() { }
+    public void meth47437() { }
+    public void meth47438() { }
+    public void meth47439() { }
+    public void meth47440() { }
+    public void meth47441() { }
+    public void meth47442() { }
+    public void meth47443() { }
+    public void meth47444() { }
+    public void meth47445() { }
+    public void meth47446() { }
+    public void meth47447() { }
+    public void meth47448() { }
+    public void meth47449() { }
+    public void meth47450() { }
+    public void meth47451() { }
+    public void meth47452() { }
+    public void meth47453() { }
+    public void meth47454() { }
+    public void meth47455() { }
+    public void meth47456() { }
+    public void meth47457() { }
+    public void meth47458() { }
+    public void meth47459() { }
+    public void meth47460() { }
+    public void meth47461() { }
+    public void meth47462() { }
+    public void meth47463() { }
+    public void meth47464() { }
+    public void meth47465() { }
+    public void meth47466() { }
+    public void meth47467() { }
+    public void meth47468() { }
+    public void meth47469() { }
+    public void meth47470() { }
+    public void meth47471() { }
+    public void meth47472() { }
+    public void meth47473() { }
+    public void meth47474() { }
+    public void meth47475() { }
+    public void meth47476() { }
+    public void meth47477() { }
+    public void meth47478() { }
+    public void meth47479() { }
+    public void meth47480() { }
+    public void meth47481() { }
+    public void meth47482() { }
+    public void meth47483() { }
+    public void meth47484() { }
+    public void meth47485() { }
+    public void meth47486() { }
+    public void meth47487() { }
+    public void meth47488() { }
+    public void meth47489() { }
+    public void meth47490() { }
+    public void meth47491() { }
+    public void meth47492() { }
+    public void meth47493() { }
+    public void meth47494() { }
+    public void meth47495() { }
+    public void meth47496() { }
+    public void meth47497() { }
+    public void meth47498() { }
+    public void meth47499() { }
+    public void meth47500() { }
+    public void meth47501() { }
+    public void meth47502() { }
+    public void meth47503() { }
+    public void meth47504() { }
+    public void meth47505() { }
+    public void meth47506() { }
+    public void meth47507() { }
+    public void meth47508() { }
+    public void meth47509() { }
+    public void meth47510() { }
+    public void meth47511() { }
+    public void meth47512() { }
+    public void meth47513() { }
+    public void meth47514() { }
+    public void meth47515() { }
+    public void meth47516() { }
+    public void meth47517() { }
+    public void meth47518() { }
+    public void meth47519() { }
+    public void meth47520() { }
+    public void meth47521() { }
+    public void meth47522() { }
+    public void meth47523() { }
+    public void meth47524() { }
+    public void meth47525() { }
+    public void meth47526() { }
+    public void meth47527() { }
+    public void meth47528() { }
+    public void meth47529() { }
+    public void meth47530() { }
+    public void meth47531() { }
+    public void meth47532() { }
+    public void meth47533() { }
+    public void meth47534() { }
+    public void meth47535() { }
+    public void meth47536() { }
+    public void meth47537() { }
+    public void meth47538() { }
+    public void meth47539() { }
+    public void meth47540() { }
+    public void meth47541() { }
+    public void meth47542() { }
+    public void meth47543() { }
+    public void meth47544() { }
+    public void meth47545() { }
+    public void meth47546() { }
+    public void meth47547() { }
+    public void meth47548() { }
+    public void meth47549() { }
+    public void meth47550() { }
+    public void meth47551() { }
+    public void meth47552() { }
+    public void meth47553() { }
+    public void meth47554() { }
+    public void meth47555() { }
+    public void meth47556() { }
+    public void meth47557() { }
+    public void meth47558() { }
+    public void meth47559() { }
+    public void meth47560() { }
+    public void meth47561() { }
+    public void meth47562() { }
+    public void meth47563() { }
+    public void meth47564() { }
+    public void meth47565() { }
+    public void meth47566() { }
+    public void meth47567() { }
+    public void meth47568() { }
+    public void meth47569() { }
+    public void meth47570() { }
+    public void meth47571() { }
+    public void meth47572() { }
+    public void meth47573() { }
+    public void meth47574() { }
+    public void meth47575() { }
+    public void meth47576() { }
+    public void meth47577() { }
+    public void meth47578() { }
+    public void meth47579() { }
+    public void meth47580() { }
+    public void meth47581() { }
+    public void meth47582() { }
+    public void meth47583() { }
+    public void meth47584() { }
+    public void meth47585() { }
+    public void meth47586() { }
+    public void meth47587() { }
+    public void meth47588() { }
+    public void meth47589() { }
+    public void meth47590() { }
+    public void meth47591() { }
+    public void meth47592() { }
+    public void meth47593() { }
+    public void meth47594() { }
+    public void meth47595() { }
+    public void meth47596() { }
+    public void meth47597() { }
+    public void meth47598() { }
+    public void meth47599() { }
+    public void meth47600() { }
+    public void meth47601() { }
+    public void meth47602() { }
+    public void meth47603() { }
+    public void meth47604() { }
+    public void meth47605() { }
+    public void meth47606() { }
+    public void meth47607() { }
+    public void meth47608() { }
+    public void meth47609() { }
+    public void meth47610() { }
+    public void meth47611() { }
+    public void meth47612() { }
+    public void meth47613() { }
+    public void meth47614() { }
+    public void meth47615() { }
+    public void meth47616() { }
+    public void meth47617() { }
+    public void meth47618() { }
+    public void meth47619() { }
+    public void meth47620() { }
+    public void meth47621() { }
+    public void meth47622() { }
+    public void meth47623() { }
+    public void meth47624() { }
+    public void meth47625() { }
+    public void meth47626() { }
+    public void meth47627() { }
+    public void meth47628() { }
+    public void meth47629() { }
+    public void meth47630() { }
+    public void meth47631() { }
+    public void meth47632() { }
+    public void meth47633() { }
+    public void meth47634() { }
+    public void meth47635() { }
+    public void meth47636() { }
+    public void meth47637() { }
+    public void meth47638() { }
+    public void meth47639() { }
+    public void meth47640() { }
+    public void meth47641() { }
+    public void meth47642() { }
+    public void meth47643() { }
+    public void meth47644() { }
+    public void meth47645() { }
+    public void meth47646() { }
+    public void meth47647() { }
+    public void meth47648() { }
+    public void meth47649() { }
+    public void meth47650() { }
+    public void meth47651() { }
+    public void meth47652() { }
+    public void meth47653() { }
+    public void meth47654() { }
+    public void meth47655() { }
+    public void meth47656() { }
+    public void meth47657() { }
+    public void meth47658() { }
+    public void meth47659() { }
+    public void meth47660() { }
+    public void meth47661() { }
+    public void meth47662() { }
+    public void meth47663() { }
+    public void meth47664() { }
+    public void meth47665() { }
+    public void meth47666() { }
+    public void meth47667() { }
+    public void meth47668() { }
+    public void meth47669() { }
+    public void meth47670() { }
+    public void meth47671() { }
+    public void meth47672() { }
+    public void meth47673() { }
+    public void meth47674() { }
+    public void meth47675() { }
+    public void meth47676() { }
+    public void meth47677() { }
+    public void meth47678() { }
+    public void meth47679() { }
+    public void meth47680() { }
+    public void meth47681() { }
+    public void meth47682() { }
+    public void meth47683() { }
+    public void meth47684() { }
+    public void meth47685() { }
+    public void meth47686() { }
+    public void meth47687() { }
+    public void meth47688() { }
+    public void meth47689() { }
+    public void meth47690() { }
+    public void meth47691() { }
+    public void meth47692() { }
+    public void meth47693() { }
+    public void meth47694() { }
+    public void meth47695() { }
+    public void meth47696() { }
+    public void meth47697() { }
+    public void meth47698() { }
+    public void meth47699() { }
+    public void meth47700() { }
+    public void meth47701() { }
+    public void meth47702() { }
+    public void meth47703() { }
+    public void meth47704() { }
+    public void meth47705() { }
+    public void meth47706() { }
+    public void meth47707() { }
+    public void meth47708() { }
+    public void meth47709() { }
+    public void meth47710() { }
+    public void meth47711() { }
+    public void meth47712() { }
+    public void meth47713() { }
+    public void meth47714() { }
+    public void meth47715() { }
+    public void meth47716() { }
+    public void meth47717() { }
+    public void meth47718() { }
+    public void meth47719() { }
+    public void meth47720() { }
+    public void meth47721() { }
+    public void meth47722() { }
+    public void meth47723() { }
+    public void meth47724() { }
+    public void meth47725() { }
+    public void meth47726() { }
+    public void meth47727() { }
+    public void meth47728() { }
+    public void meth47729() { }
+    public void meth47730() { }
+    public void meth47731() { }
+    public void meth47732() { }
+    public void meth47733() { }
+    public void meth47734() { }
+    public void meth47735() { }
+    public void meth47736() { }
+    public void meth47737() { }
+    public void meth47738() { }
+    public void meth47739() { }
+    public void meth47740() { }
+    public void meth47741() { }
+    public void meth47742() { }
+    public void meth47743() { }
+    public void meth47744() { }
+    public void meth47745() { }
+    public void meth47746() { }
+    public void meth47747() { }
+    public void meth47748() { }
+    public void meth47749() { }
+    public void meth47750() { }
+    public void meth47751() { }
+    public void meth47752() { }
+    public void meth47753() { }
+    public void meth47754() { }
+    public void meth47755() { }
+    public void meth47756() { }
+    public void meth47757() { }
+    public void meth47758() { }
+    public void meth47759() { }
+    public void meth47760() { }
+    public void meth47761() { }
+    public void meth47762() { }
+    public void meth47763() { }
+    public void meth47764() { }
+    public void meth47765() { }
+    public void meth47766() { }
+    public void meth47767() { }
+    public void meth47768() { }
+    public void meth47769() { }
+    public void meth47770() { }
+    public void meth47771() { }
+    public void meth47772() { }
+    public void meth47773() { }
+    public void meth47774() { }
+    public void meth47775() { }
+    public void meth47776() { }
+    public void meth47777() { }
+    public void meth47778() { }
+    public void meth47779() { }
+    public void meth47780() { }
+    public void meth47781() { }
+    public void meth47782() { }
+    public void meth47783() { }
+    public void meth47784() { }
+    public void meth47785() { }
+    public void meth47786() { }
+    public void meth47787() { }
+    public void meth47788() { }
+    public void meth47789() { }
+    public void meth47790() { }
+    public void meth47791() { }
+    public void meth47792() { }
+    public void meth47793() { }
+    public void meth47794() { }
+    public void meth47795() { }
+    public void meth47796() { }
+    public void meth47797() { }
+    public void meth47798() { }
+    public void meth47799() { }
+    public void meth47800() { }
+    public void meth47801() { }
+    public void meth47802() { }
+    public void meth47803() { }
+    public void meth47804() { }
+    public void meth47805() { }
+    public void meth47806() { }
+    public void meth47807() { }
+    public void meth47808() { }
+    public void meth47809() { }
+    public void meth47810() { }
+    public void meth47811() { }
+    public void meth47812() { }
+    public void meth47813() { }
+    public void meth47814() { }
+    public void meth47815() { }
+    public void meth47816() { }
+    public void meth47817() { }
+    public void meth47818() { }
+    public void meth47819() { }
+    public void meth47820() { }
+    public void meth47821() { }
+    public void meth47822() { }
+    public void meth47823() { }
+    public void meth47824() { }
+    public void meth47825() { }
+    public void meth47826() { }
+    public void meth47827() { }
+    public void meth47828() { }
+    public void meth47829() { }
+    public void meth47830() { }
+    public void meth47831() { }
+    public void meth47832() { }
+    public void meth47833() { }
+    public void meth47834() { }
+    public void meth47835() { }
+    public void meth47836() { }
+    public void meth47837() { }
+    public void meth47838() { }
+    public void meth47839() { }
+    public void meth47840() { }
+    public void meth47841() { }
+    public void meth47842() { }
+    public void meth47843() { }
+    public void meth47844() { }
+    public void meth47845() { }
+    public void meth47846() { }
+    public void meth47847() { }
+    public void meth47848() { }
+    public void meth47849() { }
+    public void meth47850() { }
+    public void meth47851() { }
+    public void meth47852() { }
+    public void meth47853() { }
+    public void meth47854() { }
+    public void meth47855() { }
+    public void meth47856() { }
+    public void meth47857() { }
+    public void meth47858() { }
+    public void meth47859() { }
+    public void meth47860() { }
+    public void meth47861() { }
+    public void meth47862() { }
+    public void meth47863() { }
+    public void meth47864() { }
+    public void meth47865() { }
+    public void meth47866() { }
+    public void meth47867() { }
+    public void meth47868() { }
+    public void meth47869() { }
+    public void meth47870() { }
+    public void meth47871() { }
+    public void meth47872() { }
+    public void meth47873() { }
+    public void meth47874() { }
+    public void meth47875() { }
+    public void meth47876() { }
+    public void meth47877() { }
+    public void meth47878() { }
+    public void meth47879() { }
+    public void meth47880() { }
+    public void meth47881() { }
+    public void meth47882() { }
+    public void meth47883() { }
+    public void meth47884() { }
+    public void meth47885() { }
+    public void meth47886() { }
+    public void meth47887() { }
+    public void meth47888() { }
+    public void meth47889() { }
+    public void meth47890() { }
+    public void meth47891() { }
+    public void meth47892() { }
+    public void meth47893() { }
+    public void meth47894() { }
+    public void meth47895() { }
+    public void meth47896() { }
+    public void meth47897() { }
+    public void meth47898() { }
+    public void meth47899() { }
+    public void meth47900() { }
+    public void meth47901() { }
+    public void meth47902() { }
+    public void meth47903() { }
+    public void meth47904() { }
+    public void meth47905() { }
+    public void meth47906() { }
+    public void meth47907() { }
+    public void meth47908() { }
+    public void meth47909() { }
+    public void meth47910() { }
+    public void meth47911() { }
+    public void meth47912() { }
+    public void meth47913() { }
+    public void meth47914() { }
+    public void meth47915() { }
+    public void meth47916() { }
+    public void meth47917() { }
+    public void meth47918() { }
+    public void meth47919() { }
+    public void meth47920() { }
+    public void meth47921() { }
+    public void meth47922() { }
+    public void meth47923() { }
+    public void meth47924() { }
+    public void meth47925() { }
+    public void meth47926() { }
+    public void meth47927() { }
+    public void meth47928() { }
+    public void meth47929() { }
+    public void meth47930() { }
+    public void meth47931() { }
+    public void meth47932() { }
+    public void meth47933() { }
+    public void meth47934() { }
+    public void meth47935() { }
+    public void meth47936() { }
+    public void meth47937() { }
+    public void meth47938() { }
+    public void meth47939() { }
+    public void meth47940() { }
+    public void meth47941() { }
+    public void meth47942() { }
+    public void meth47943() { }
+    public void meth47944() { }
+    public void meth47945() { }
+    public void meth47946() { }
+    public void meth47947() { }
+    public void meth47948() { }
+    public void meth47949() { }
+    public void meth47950() { }
+    public void meth47951() { }
+    public void meth47952() { }
+    public void meth47953() { }
+    public void meth47954() { }
+    public void meth47955() { }
+    public void meth47956() { }
+    public void meth47957() { }
+    public void meth47958() { }
+    public void meth47959() { }
+    public void meth47960() { }
+    public void meth47961() { }
+    public void meth47962() { }
+    public void meth47963() { }
+    public void meth47964() { }
+    public void meth47965() { }
+    public void meth47966() { }
+    public void meth47967() { }
+    public void meth47968() { }
+    public void meth47969() { }
+    public void meth47970() { }
+    public void meth47971() { }
+    public void meth47972() { }
+    public void meth47973() { }
+    public void meth47974() { }
+    public void meth47975() { }
+    public void meth47976() { }
+    public void meth47977() { }
+    public void meth47978() { }
+    public void meth47979() { }
+    public void meth47980() { }
+    public void meth47981() { }
+    public void meth47982() { }
+    public void meth47983() { }
+    public void meth47984() { }
+    public void meth47985() { }
+    public void meth47986() { }
+    public void meth47987() { }
+    public void meth47988() { }
+    public void meth47989() { }
+    public void meth47990() { }
+    public void meth47991() { }
+    public void meth47992() { }
+    public void meth47993() { }
+    public void meth47994() { }
+    public void meth47995() { }
+    public void meth47996() { }
+    public void meth47997() { }
+    public void meth47998() { }
+    public void meth47999() { }
+    public void meth48000() { }
+    public void meth48001() { }
+    public void meth48002() { }
+    public void meth48003() { }
+    public void meth48004() { }
+    public void meth48005() { }
+    public void meth48006() { }
+    public void meth48007() { }
+    public void meth48008() { }
+    public void meth48009() { }
+    public void meth48010() { }
+    public void meth48011() { }
+    public void meth48012() { }
+    public void meth48013() { }
+    public void meth48014() { }
+    public void meth48015() { }
+    public void meth48016() { }
+    public void meth48017() { }
+    public void meth48018() { }
+    public void meth48019() { }
+    public void meth48020() { }
+    public void meth48021() { }
+    public void meth48022() { }
+    public void meth48023() { }
+    public void meth48024() { }
+    public void meth48025() { }
+    public void meth48026() { }
+    public void meth48027() { }
+    public void meth48028() { }
+    public void meth48029() { }
+    public void meth48030() { }
+    public void meth48031() { }
+    public void meth48032() { }
+    public void meth48033() { }
+    public void meth48034() { }
+    public void meth48035() { }
+    public void meth48036() { }
+    public void meth48037() { }
+    public void meth48038() { }
+    public void meth48039() { }
+    public void meth48040() { }
+    public void meth48041() { }
+    public void meth48042() { }
+    public void meth48043() { }
+    public void meth48044() { }
+    public void meth48045() { }
+    public void meth48046() { }
+    public void meth48047() { }
+    public void meth48048() { }
+    public void meth48049() { }
+    public void meth48050() { }
+    public void meth48051() { }
+    public void meth48052() { }
+    public void meth48053() { }
+    public void meth48054() { }
+    public void meth48055() { }
+    public void meth48056() { }
+    public void meth48057() { }
+    public void meth48058() { }
+    public void meth48059() { }
+    public void meth48060() { }
+    public void meth48061() { }
+    public void meth48062() { }
+    public void meth48063() { }
+    public void meth48064() { }
+    public void meth48065() { }
+    public void meth48066() { }
+    public void meth48067() { }
+    public void meth48068() { }
+    public void meth48069() { }
+    public void meth48070() { }
+    public void meth48071() { }
+    public void meth48072() { }
+    public void meth48073() { }
+    public void meth48074() { }
+    public void meth48075() { }
+    public void meth48076() { }
+    public void meth48077() { }
+    public void meth48078() { }
+    public void meth48079() { }
+    public void meth48080() { }
+    public void meth48081() { }
+    public void meth48082() { }
+    public void meth48083() { }
+    public void meth48084() { }
+    public void meth48085() { }
+    public void meth48086() { }
+    public void meth48087() { }
+    public void meth48088() { }
+    public void meth48089() { }
+    public void meth48090() { }
+    public void meth48091() { }
+    public void meth48092() { }
+    public void meth48093() { }
+    public void meth48094() { }
+    public void meth48095() { }
+    public void meth48096() { }
+    public void meth48097() { }
+    public void meth48098() { }
+    public void meth48099() { }
+    public void meth48100() { }
+    public void meth48101() { }
+    public void meth48102() { }
+    public void meth48103() { }
+    public void meth48104() { }
+    public void meth48105() { }
+    public void meth48106() { }
+    public void meth48107() { }
+    public void meth48108() { }
+    public void meth48109() { }
+    public void meth48110() { }
+    public void meth48111() { }
+    public void meth48112() { }
+    public void meth48113() { }
+    public void meth48114() { }
+    public void meth48115() { }
+    public void meth48116() { }
+    public void meth48117() { }
+    public void meth48118() { }
+    public void meth48119() { }
+    public void meth48120() { }
+    public void meth48121() { }
+    public void meth48122() { }
+    public void meth48123() { }
+    public void meth48124() { }
+    public void meth48125() { }
+    public void meth48126() { }
+    public void meth48127() { }
+    public void meth48128() { }
+    public void meth48129() { }
+    public void meth48130() { }
+    public void meth48131() { }
+    public void meth48132() { }
+    public void meth48133() { }
+    public void meth48134() { }
+    public void meth48135() { }
+    public void meth48136() { }
+    public void meth48137() { }
+    public void meth48138() { }
+    public void meth48139() { }
+    public void meth48140() { }
+    public void meth48141() { }
+    public void meth48142() { }
+    public void meth48143() { }
+    public void meth48144() { }
+    public void meth48145() { }
+    public void meth48146() { }
+    public void meth48147() { }
+    public void meth48148() { }
+    public void meth48149() { }
+    public void meth48150() { }
+    public void meth48151() { }
+    public void meth48152() { }
+    public void meth48153() { }
+    public void meth48154() { }
+    public void meth48155() { }
+    public void meth48156() { }
+    public void meth48157() { }
+    public void meth48158() { }
+    public void meth48159() { }
+    public void meth48160() { }
+    public void meth48161() { }
+    public void meth48162() { }
+    public void meth48163() { }
+    public void meth48164() { }
+    public void meth48165() { }
+    public void meth48166() { }
+    public void meth48167() { }
+    public void meth48168() { }
+    public void meth48169() { }
+    public void meth48170() { }
+    public void meth48171() { }
+    public void meth48172() { }
+    public void meth48173() { }
+    public void meth48174() { }
+    public void meth48175() { }
+    public void meth48176() { }
+    public void meth48177() { }
+    public void meth48178() { }
+    public void meth48179() { }
+    public void meth48180() { }
+    public void meth48181() { }
+    public void meth48182() { }
+    public void meth48183() { }
+    public void meth48184() { }
+    public void meth48185() { }
+    public void meth48186() { }
+    public void meth48187() { }
+    public void meth48188() { }
+    public void meth48189() { }
+    public void meth48190() { }
+    public void meth48191() { }
+    public void meth48192() { }
+    public void meth48193() { }
+    public void meth48194() { }
+    public void meth48195() { }
+    public void meth48196() { }
+    public void meth48197() { }
+    public void meth48198() { }
+    public void meth48199() { }
+    public void meth48200() { }
+    public void meth48201() { }
+    public void meth48202() { }
+    public void meth48203() { }
+    public void meth48204() { }
+    public void meth48205() { }
+    public void meth48206() { }
+    public void meth48207() { }
+    public void meth48208() { }
+    public void meth48209() { }
+    public void meth48210() { }
+    public void meth48211() { }
+    public void meth48212() { }
+    public void meth48213() { }
+    public void meth48214() { }
+    public void meth48215() { }
+    public void meth48216() { }
+    public void meth48217() { }
+    public void meth48218() { }
+    public void meth48219() { }
+    public void meth48220() { }
+    public void meth48221() { }
+    public void meth48222() { }
+    public void meth48223() { }
+    public void meth48224() { }
+    public void meth48225() { }
+    public void meth48226() { }
+    public void meth48227() { }
+    public void meth48228() { }
+    public void meth48229() { }
+    public void meth48230() { }
+    public void meth48231() { }
+    public void meth48232() { }
+    public void meth48233() { }
+    public void meth48234() { }
+    public void meth48235() { }
+    public void meth48236() { }
+    public void meth48237() { }
+    public void meth48238() { }
+    public void meth48239() { }
+    public void meth48240() { }
+    public void meth48241() { }
+    public void meth48242() { }
+    public void meth48243() { }
+    public void meth48244() { }
+    public void meth48245() { }
+    public void meth48246() { }
+    public void meth48247() { }
+    public void meth48248() { }
+    public void meth48249() { }
+    public void meth48250() { }
+    public void meth48251() { }
+    public void meth48252() { }
+    public void meth48253() { }
+    public void meth48254() { }
+    public void meth48255() { }
+    public void meth48256() { }
+    public void meth48257() { }
+    public void meth48258() { }
+    public void meth48259() { }
+    public void meth48260() { }
+    public void meth48261() { }
+    public void meth48262() { }
+    public void meth48263() { }
+    public void meth48264() { }
+    public void meth48265() { }
+    public void meth48266() { }
+    public void meth48267() { }
+    public void meth48268() { }
+    public void meth48269() { }
+    public void meth48270() { }
+    public void meth48271() { }
+    public void meth48272() { }
+    public void meth48273() { }
+    public void meth48274() { }
+    public void meth48275() { }
+    public void meth48276() { }
+    public void meth48277() { }
+    public void meth48278() { }
+    public void meth48279() { }
+    public void meth48280() { }
+    public void meth48281() { }
+    public void meth48282() { }
+    public void meth48283() { }
+    public void meth48284() { }
+    public void meth48285() { }
+    public void meth48286() { }
+    public void meth48287() { }
+    public void meth48288() { }
+    public void meth48289() { }
+    public void meth48290() { }
+    public void meth48291() { }
+    public void meth48292() { }
+    public void meth48293() { }
+    public void meth48294() { }
+    public void meth48295() { }
+    public void meth48296() { }
+    public void meth48297() { }
+    public void meth48298() { }
+    public void meth48299() { }
+    public void meth48300() { }
+    public void meth48301() { }
+    public void meth48302() { }
+    public void meth48303() { }
+    public void meth48304() { }
+    public void meth48305() { }
+    public void meth48306() { }
+    public void meth48307() { }
+    public void meth48308() { }
+    public void meth48309() { }
+    public void meth48310() { }
+    public void meth48311() { }
+    public void meth48312() { }
+    public void meth48313() { }
+    public void meth48314() { }
+    public void meth48315() { }
+    public void meth48316() { }
+    public void meth48317() { }
+    public void meth48318() { }
+    public void meth48319() { }
+    public void meth48320() { }
+    public void meth48321() { }
+    public void meth48322() { }
+    public void meth48323() { }
+    public void meth48324() { }
+    public void meth48325() { }
+    public void meth48326() { }
+    public void meth48327() { }
+    public void meth48328() { }
+    public void meth48329() { }
+    public void meth48330() { }
+    public void meth48331() { }
+    public void meth48332() { }
+    public void meth48333() { }
+    public void meth48334() { }
+    public void meth48335() { }
+    public void meth48336() { }
+    public void meth48337() { }
+    public void meth48338() { }
+    public void meth48339() { }
+    public void meth48340() { }
+    public void meth48341() { }
+    public void meth48342() { }
+    public void meth48343() { }
+    public void meth48344() { }
+    public void meth48345() { }
+    public void meth48346() { }
+    public void meth48347() { }
+    public void meth48348() { }
+    public void meth48349() { }
+    public void meth48350() { }
+    public void meth48351() { }
+    public void meth48352() { }
+    public void meth48353() { }
+    public void meth48354() { }
+    public void meth48355() { }
+    public void meth48356() { }
+    public void meth48357() { }
+    public void meth48358() { }
+    public void meth48359() { }
+    public void meth48360() { }
+    public void meth48361() { }
+    public void meth48362() { }
+    public void meth48363() { }
+    public void meth48364() { }
+    public void meth48365() { }
+    public void meth48366() { }
+    public void meth48367() { }
+    public void meth48368() { }
+    public void meth48369() { }
+    public void meth48370() { }
+    public void meth48371() { }
+    public void meth48372() { }
+    public void meth48373() { }
+    public void meth48374() { }
+    public void meth48375() { }
+    public void meth48376() { }
+    public void meth48377() { }
+    public void meth48378() { }
+    public void meth48379() { }
+    public void meth48380() { }
+    public void meth48381() { }
+    public void meth48382() { }
+    public void meth48383() { }
+    public void meth48384() { }
+    public void meth48385() { }
+    public void meth48386() { }
+    public void meth48387() { }
+    public void meth48388() { }
+    public void meth48389() { }
+    public void meth48390() { }
+    public void meth48391() { }
+    public void meth48392() { }
+    public void meth48393() { }
+    public void meth48394() { }
+    public void meth48395() { }
+    public void meth48396() { }
+    public void meth48397() { }
+    public void meth48398() { }
+    public void meth48399() { }
+    public void meth48400() { }
+    public void meth48401() { }
+    public void meth48402() { }
+    public void meth48403() { }
+    public void meth48404() { }
+    public void meth48405() { }
+    public void meth48406() { }
+    public void meth48407() { }
+    public void meth48408() { }
+    public void meth48409() { }
+    public void meth48410() { }
+    public void meth48411() { }
+    public void meth48412() { }
+    public void meth48413() { }
+    public void meth48414() { }
+    public void meth48415() { }
+    public void meth48416() { }
+    public void meth48417() { }
+    public void meth48418() { }
+    public void meth48419() { }
+    public void meth48420() { }
+    public void meth48421() { }
+    public void meth48422() { }
+    public void meth48423() { }
+    public void meth48424() { }
+    public void meth48425() { }
+    public void meth48426() { }
+    public void meth48427() { }
+    public void meth48428() { }
+    public void meth48429() { }
+    public void meth48430() { }
+    public void meth48431() { }
+    public void meth48432() { }
+    public void meth48433() { }
+    public void meth48434() { }
+    public void meth48435() { }
+    public void meth48436() { }
+    public void meth48437() { }
+    public void meth48438() { }
+    public void meth48439() { }
+    public void meth48440() { }
+    public void meth48441() { }
+    public void meth48442() { }
+    public void meth48443() { }
+    public void meth48444() { }
+    public void meth48445() { }
+    public void meth48446() { }
+    public void meth48447() { }
+    public void meth48448() { }
+    public void meth48449() { }
+    public void meth48450() { }
+    public void meth48451() { }
+    public void meth48452() { }
+    public void meth48453() { }
+    public void meth48454() { }
+    public void meth48455() { }
+    public void meth48456() { }
+    public void meth48457() { }
+    public void meth48458() { }
+    public void meth48459() { }
+    public void meth48460() { }
+    public void meth48461() { }
+    public void meth48462() { }
+    public void meth48463() { }
+    public void meth48464() { }
+    public void meth48465() { }
+    public void meth48466() { }
+    public void meth48467() { }
+    public void meth48468() { }
+    public void meth48469() { }
+    public void meth48470() { }
+    public void meth48471() { }
+    public void meth48472() { }
+    public void meth48473() { }
+    public void meth48474() { }
+    public void meth48475() { }
+    public void meth48476() { }
+    public void meth48477() { }
+    public void meth48478() { }
+    public void meth48479() { }
+    public void meth48480() { }
+    public void meth48481() { }
+    public void meth48482() { }
+    public void meth48483() { }
+    public void meth48484() { }
+    public void meth48485() { }
+    public void meth48486() { }
+    public void meth48487() { }
+    public void meth48488() { }
+    public void meth48489() { }
+    public void meth48490() { }
+    public void meth48491() { }
+    public void meth48492() { }
+    public void meth48493() { }
+    public void meth48494() { }
+    public void meth48495() { }
+    public void meth48496() { }
+    public void meth48497() { }
+    public void meth48498() { }
+    public void meth48499() { }
+    public void meth48500() { }
+    public void meth48501() { }
+    public void meth48502() { }
+    public void meth48503() { }
+    public void meth48504() { }
+    public void meth48505() { }
+    public void meth48506() { }
+    public void meth48507() { }
+    public void meth48508() { }
+    public void meth48509() { }
+    public void meth48510() { }
+    public void meth48511() { }
+    public void meth48512() { }
+    public void meth48513() { }
+    public void meth48514() { }
+    public void meth48515() { }
+    public void meth48516() { }
+    public void meth48517() { }
+    public void meth48518() { }
+    public void meth48519() { }
+    public void meth48520() { }
+    public void meth48521() { }
+    public void meth48522() { }
+    public void meth48523() { }
+    public void meth48524() { }
+    public void meth48525() { }
+    public void meth48526() { }
+    public void meth48527() { }
+    public void meth48528() { }
+    public void meth48529() { }
+    public void meth48530() { }
+    public void meth48531() { }
+    public void meth48532() { }
+    public void meth48533() { }
+    public void meth48534() { }
+    public void meth48535() { }
+    public void meth48536() { }
+    public void meth48537() { }
+    public void meth48538() { }
+    public void meth48539() { }
+    public void meth48540() { }
+    public void meth48541() { }
+    public void meth48542() { }
+    public void meth48543() { }
+    public void meth48544() { }
+    public void meth48545() { }
+    public void meth48546() { }
+    public void meth48547() { }
+    public void meth48548() { }
+    public void meth48549() { }
+    public void meth48550() { }
+    public void meth48551() { }
+    public void meth48552() { }
+    public void meth48553() { }
+    public void meth48554() { }
+    public void meth48555() { }
+    public void meth48556() { }
+    public void meth48557() { }
+    public void meth48558() { }
+    public void meth48559() { }
+    public void meth48560() { }
+    public void meth48561() { }
+    public void meth48562() { }
+    public void meth48563() { }
+    public void meth48564() { }
+    public void meth48565() { }
+    public void meth48566() { }
+    public void meth48567() { }
+    public void meth48568() { }
+    public void meth48569() { }
+    public void meth48570() { }
+    public void meth48571() { }
+    public void meth48572() { }
+    public void meth48573() { }
+    public void meth48574() { }
+    public void meth48575() { }
+    public void meth48576() { }
+    public void meth48577() { }
+    public void meth48578() { }
+    public void meth48579() { }
+    public void meth48580() { }
+    public void meth48581() { }
+    public void meth48582() { }
+    public void meth48583() { }
+    public void meth48584() { }
+    public void meth48585() { }
+    public void meth48586() { }
+    public void meth48587() { }
+    public void meth48588() { }
+    public void meth48589() { }
+    public void meth48590() { }
+    public void meth48591() { }
+    public void meth48592() { }
+    public void meth48593() { }
+    public void meth48594() { }
+    public void meth48595() { }
+    public void meth48596() { }
+    public void meth48597() { }
+    public void meth48598() { }
+    public void meth48599() { }
+    public void meth48600() { }
+    public void meth48601() { }
+    public void meth48602() { }
+    public void meth48603() { }
+    public void meth48604() { }
+    public void meth48605() { }
+    public void meth48606() { }
+    public void meth48607() { }
+    public void meth48608() { }
+    public void meth48609() { }
+    public void meth48610() { }
+    public void meth48611() { }
+    public void meth48612() { }
+    public void meth48613() { }
+    public void meth48614() { }
+    public void meth48615() { }
+    public void meth48616() { }
+    public void meth48617() { }
+    public void meth48618() { }
+    public void meth48619() { }
+    public void meth48620() { }
+    public void meth48621() { }
+    public void meth48622() { }
+    public void meth48623() { }
+    public void meth48624() { }
+    public void meth48625() { }
+    public void meth48626() { }
+    public void meth48627() { }
+    public void meth48628() { }
+    public void meth48629() { }
+    public void meth48630() { }
+    public void meth48631() { }
+    public void meth48632() { }
+    public void meth48633() { }
+    public void meth48634() { }
+    public void meth48635() { }
+    public void meth48636() { }
+    public void meth48637() { }
+    public void meth48638() { }
+    public void meth48639() { }
+    public void meth48640() { }
+    public void meth48641() { }
+    public void meth48642() { }
+    public void meth48643() { }
+    public void meth48644() { }
+    public void meth48645() { }
+    public void meth48646() { }
+    public void meth48647() { }
+    public void meth48648() { }
+    public void meth48649() { }
+    public void meth48650() { }
+    public void meth48651() { }
+    public void meth48652() { }
+    public void meth48653() { }
+    public void meth48654() { }
+    public void meth48655() { }
+    public void meth48656() { }
+    public void meth48657() { }
+    public void meth48658() { }
+    public void meth48659() { }
+    public void meth48660() { }
+    public void meth48661() { }
+    public void meth48662() { }
+    public void meth48663() { }
+    public void meth48664() { }
+    public void meth48665() { }
+    public void meth48666() { }
+    public void meth48667() { }
+    public void meth48668() { }
+    public void meth48669() { }
+    public void meth48670() { }
+    public void meth48671() { }
+    public void meth48672() { }
+    public void meth48673() { }
+    public void meth48674() { }
+    public void meth48675() { }
+    public void meth48676() { }
+    public void meth48677() { }
+    public void meth48678() { }
+    public void meth48679() { }
+    public void meth48680() { }
+    public void meth48681() { }
+    public void meth48682() { }
+    public void meth48683() { }
+    public void meth48684() { }
+    public void meth48685() { }
+    public void meth48686() { }
+    public void meth48687() { }
+    public void meth48688() { }
+    public void meth48689() { }
+    public void meth48690() { }
+    public void meth48691() { }
+    public void meth48692() { }
+    public void meth48693() { }
+    public void meth48694() { }
+    public void meth48695() { }
+    public void meth48696() { }
+    public void meth48697() { }
+    public void meth48698() { }
+    public void meth48699() { }
+    public void meth48700() { }
+    public void meth48701() { }
+    public void meth48702() { }
+    public void meth48703() { }
+    public void meth48704() { }
+    public void meth48705() { }
+    public void meth48706() { }
+    public void meth48707() { }
+    public void meth48708() { }
+    public void meth48709() { }
+    public void meth48710() { }
+    public void meth48711() { }
+    public void meth48712() { }
+    public void meth48713() { }
+    public void meth48714() { }
+    public void meth48715() { }
+    public void meth48716() { }
+    public void meth48717() { }
+    public void meth48718() { }
+    public void meth48719() { }
+    public void meth48720() { }
+    public void meth48721() { }
+    public void meth48722() { }
+    public void meth48723() { }
+    public void meth48724() { }
+    public void meth48725() { }
+    public void meth48726() { }
+    public void meth48727() { }
+    public void meth48728() { }
+    public void meth48729() { }
+    public void meth48730() { }
+    public void meth48731() { }
+    public void meth48732() { }
+    public void meth48733() { }
+    public void meth48734() { }
+    public void meth48735() { }
+    public void meth48736() { }
+    public void meth48737() { }
+    public void meth48738() { }
+    public void meth48739() { }
+    public void meth48740() { }
+    public void meth48741() { }
+    public void meth48742() { }
+    public void meth48743() { }
+    public void meth48744() { }
+    public void meth48745() { }
+    public void meth48746() { }
+    public void meth48747() { }
+    public void meth48748() { }
+    public void meth48749() { }
+    public void meth48750() { }
+    public void meth48751() { }
+    public void meth48752() { }
+    public void meth48753() { }
+    public void meth48754() { }
+    public void meth48755() { }
+    public void meth48756() { }
+    public void meth48757() { }
+    public void meth48758() { }
+    public void meth48759() { }
+    public void meth48760() { }
+    public void meth48761() { }
+    public void meth48762() { }
+    public void meth48763() { }
+    public void meth48764() { }
+    public void meth48765() { }
+    public void meth48766() { }
+    public void meth48767() { }
+    public void meth48768() { }
+    public void meth48769() { }
+    public void meth48770() { }
+    public void meth48771() { }
+    public void meth48772() { }
+    public void meth48773() { }
+    public void meth48774() { }
+    public void meth48775() { }
+    public void meth48776() { }
+    public void meth48777() { }
+    public void meth48778() { }
+    public void meth48779() { }
+    public void meth48780() { }
+    public void meth48781() { }
+    public void meth48782() { }
+    public void meth48783() { }
+    public void meth48784() { }
+    public void meth48785() { }
+    public void meth48786() { }
+    public void meth48787() { }
+    public void meth48788() { }
+    public void meth48789() { }
+    public void meth48790() { }
+    public void meth48791() { }
+    public void meth48792() { }
+    public void meth48793() { }
+    public void meth48794() { }
+    public void meth48795() { }
+    public void meth48796() { }
+    public void meth48797() { }
+    public void meth48798() { }
+    public void meth48799() { }
+    public void meth48800() { }
+    public void meth48801() { }
+    public void meth48802() { }
+    public void meth48803() { }
+    public void meth48804() { }
+    public void meth48805() { }
+    public void meth48806() { }
+    public void meth48807() { }
+    public void meth48808() { }
+    public void meth48809() { }
+    public void meth48810() { }
+    public void meth48811() { }
+    public void meth48812() { }
+    public void meth48813() { }
+    public void meth48814() { }
+    public void meth48815() { }
+    public void meth48816() { }
+    public void meth48817() { }
+    public void meth48818() { }
+    public void meth48819() { }
+    public void meth48820() { }
+    public void meth48821() { }
+    public void meth48822() { }
+    public void meth48823() { }
+    public void meth48824() { }
+    public void meth48825() { }
+    public void meth48826() { }
+    public void meth48827() { }
+    public void meth48828() { }
+    public void meth48829() { }
+    public void meth48830() { }
+    public void meth48831() { }
+    public void meth48832() { }
+    public void meth48833() { }
+    public void meth48834() { }
+    public void meth48835() { }
+    public void meth48836() { }
+    public void meth48837() { }
+    public void meth48838() { }
+    public void meth48839() { }
+    public void meth48840() { }
+    public void meth48841() { }
+    public void meth48842() { }
+    public void meth48843() { }
+    public void meth48844() { }
+    public void meth48845() { }
+    public void meth48846() { }
+    public void meth48847() { }
+    public void meth48848() { }
+    public void meth48849() { }
+    public void meth48850() { }
+    public void meth48851() { }
+    public void meth48852() { }
+    public void meth48853() { }
+    public void meth48854() { }
+    public void meth48855() { }
+    public void meth48856() { }
+    public void meth48857() { }
+    public void meth48858() { }
+    public void meth48859() { }
+    public void meth48860() { }
+    public void meth48861() { }
+    public void meth48862() { }
+    public void meth48863() { }
+    public void meth48864() { }
+    public void meth48865() { }
+    public void meth48866() { }
+    public void meth48867() { }
+    public void meth48868() { }
+    public void meth48869() { }
+    public void meth48870() { }
+    public void meth48871() { }
+    public void meth48872() { }
+    public void meth48873() { }
+    public void meth48874() { }
+    public void meth48875() { }
+    public void meth48876() { }
+    public void meth48877() { }
+    public void meth48878() { }
+    public void meth48879() { }
+    public void meth48880() { }
+    public void meth48881() { }
+    public void meth48882() { }
+    public void meth48883() { }
+    public void meth48884() { }
+    public void meth48885() { }
+    public void meth48886() { }
+    public void meth48887() { }
+    public void meth48888() { }
+    public void meth48889() { }
+    public void meth48890() { }
+    public void meth48891() { }
+    public void meth48892() { }
+    public void meth48893() { }
+    public void meth48894() { }
+    public void meth48895() { }
+    public void meth48896() { }
+    public void meth48897() { }
+    public void meth48898() { }
+    public void meth48899() { }
+    public void meth48900() { }
+    public void meth48901() { }
+    public void meth48902() { }
+    public void meth48903() { }
+    public void meth48904() { }
+    public void meth48905() { }
+    public void meth48906() { }
+    public void meth48907() { }
+    public void meth48908() { }
+    public void meth48909() { }
+    public void meth48910() { }
+    public void meth48911() { }
+    public void meth48912() { }
+    public void meth48913() { }
+    public void meth48914() { }
+    public void meth48915() { }
+    public void meth48916() { }
+    public void meth48917() { }
+    public void meth48918() { }
+    public void meth48919() { }
+    public void meth48920() { }
+    public void meth48921() { }
+    public void meth48922() { }
+    public void meth48923() { }
+    public void meth48924() { }
+    public void meth48925() { }
+    public void meth48926() { }
+    public void meth48927() { }
+    public void meth48928() { }
+    public void meth48929() { }
+    public void meth48930() { }
+    public void meth48931() { }
+    public void meth48932() { }
+    public void meth48933() { }
+    public void meth48934() { }
+    public void meth48935() { }
+    public void meth48936() { }
+    public void meth48937() { }
+    public void meth48938() { }
+    public void meth48939() { }
+    public void meth48940() { }
+    public void meth48941() { }
+    public void meth48942() { }
+    public void meth48943() { }
+    public void meth48944() { }
+    public void meth48945() { }
+    public void meth48946() { }
+    public void meth48947() { }
+    public void meth48948() { }
+    public void meth48949() { }
+    public void meth48950() { }
+    public void meth48951() { }
+    public void meth48952() { }
+    public void meth48953() { }
+    public void meth48954() { }
+    public void meth48955() { }
+    public void meth48956() { }
+    public void meth48957() { }
+    public void meth48958() { }
+    public void meth48959() { }
+    public void meth48960() { }
+    public void meth48961() { }
+    public void meth48962() { }
+    public void meth48963() { }
+    public void meth48964() { }
+    public void meth48965() { }
+    public void meth48966() { }
+    public void meth48967() { }
+    public void meth48968() { }
+    public void meth48969() { }
+    public void meth48970() { }
+    public void meth48971() { }
+    public void meth48972() { }
+    public void meth48973() { }
+    public void meth48974() { }
+    public void meth48975() { }
+    public void meth48976() { }
+    public void meth48977() { }
+    public void meth48978() { }
+    public void meth48979() { }
+    public void meth48980() { }
+    public void meth48981() { }
+    public void meth48982() { }
+    public void meth48983() { }
+    public void meth48984() { }
+    public void meth48985() { }
+    public void meth48986() { }
+    public void meth48987() { }
+    public void meth48988() { }
+    public void meth48989() { }
+    public void meth48990() { }
+    public void meth48991() { }
+    public void meth48992() { }
+    public void meth48993() { }
+    public void meth48994() { }
+    public void meth48995() { }
+    public void meth48996() { }
+    public void meth48997() { }
+    public void meth48998() { }
+    public void meth48999() { }
+    public void meth49000() { }
+    public void meth49001() { }
+    public void meth49002() { }
+    public void meth49003() { }
+    public void meth49004() { }
+    public void meth49005() { }
+    public void meth49006() { }
+    public void meth49007() { }
+    public void meth49008() { }
+    public void meth49009() { }
+    public void meth49010() { }
+    public void meth49011() { }
+    public void meth49012() { }
+    public void meth49013() { }
+    public void meth49014() { }
+    public void meth49015() { }
+    public void meth49016() { }
+    public void meth49017() { }
+    public void meth49018() { }
+    public void meth49019() { }
+    public void meth49020() { }
+    public void meth49021() { }
+    public void meth49022() { }
+    public void meth49023() { }
+    public void meth49024() { }
+    public void meth49025() { }
+    public void meth49026() { }
+    public void meth49027() { }
+    public void meth49028() { }
+    public void meth49029() { }
+    public void meth49030() { }
+    public void meth49031() { }
+    public void meth49032() { }
+    public void meth49033() { }
+    public void meth49034() { }
+    public void meth49035() { }
+    public void meth49036() { }
+    public void meth49037() { }
+    public void meth49038() { }
+    public void meth49039() { }
+    public void meth49040() { }
+    public void meth49041() { }
+    public void meth49042() { }
+    public void meth49043() { }
+    public void meth49044() { }
+    public void meth49045() { }
+    public void meth49046() { }
+    public void meth49047() { }
+    public void meth49048() { }
+    public void meth49049() { }
+    public void meth49050() { }
+    public void meth49051() { }
+    public void meth49052() { }
+    public void meth49053() { }
+    public void meth49054() { }
+    public void meth49055() { }
+    public void meth49056() { }
+    public void meth49057() { }
+    public void meth49058() { }
+    public void meth49059() { }
+    public void meth49060() { }
+    public void meth49061() { }
+    public void meth49062() { }
+    public void meth49063() { }
+    public void meth49064() { }
+    public void meth49065() { }
+    public void meth49066() { }
+    public void meth49067() { }
+    public void meth49068() { }
+    public void meth49069() { }
+    public void meth49070() { }
+    public void meth49071() { }
+    public void meth49072() { }
+    public void meth49073() { }
+    public void meth49074() { }
+    public void meth49075() { }
+    public void meth49076() { }
+    public void meth49077() { }
+    public void meth49078() { }
+    public void meth49079() { }
+    public void meth49080() { }
+    public void meth49081() { }
+    public void meth49082() { }
+    public void meth49083() { }
+    public void meth49084() { }
+    public void meth49085() { }
+    public void meth49086() { }
+    public void meth49087() { }
+    public void meth49088() { }
+    public void meth49089() { }
+    public void meth49090() { }
+    public void meth49091() { }
+    public void meth49092() { }
+    public void meth49093() { }
+    public void meth49094() { }
+    public void meth49095() { }
+    public void meth49096() { }
+    public void meth49097() { }
+    public void meth49098() { }
+    public void meth49099() { }
+    public void meth49100() { }
+    public void meth49101() { }
+    public void meth49102() { }
+    public void meth49103() { }
+    public void meth49104() { }
+    public void meth49105() { }
+    public void meth49106() { }
+    public void meth49107() { }
+    public void meth49108() { }
+    public void meth49109() { }
+    public void meth49110() { }
+    public void meth49111() { }
+    public void meth49112() { }
+    public void meth49113() { }
+    public void meth49114() { }
+    public void meth49115() { }
+    public void meth49116() { }
+    public void meth49117() { }
+    public void meth49118() { }
+    public void meth49119() { }
+    public void meth49120() { }
+    public void meth49121() { }
+    public void meth49122() { }
+    public void meth49123() { }
+    public void meth49124() { }
+    public void meth49125() { }
+    public void meth49126() { }
+    public void meth49127() { }
+    public void meth49128() { }
+    public void meth49129() { }
+    public void meth49130() { }
+    public void meth49131() { }
+    public void meth49132() { }
+    public void meth49133() { }
+    public void meth49134() { }
+    public void meth49135() { }
+    public void meth49136() { }
+    public void meth49137() { }
+    public void meth49138() { }
+    public void meth49139() { }
+    public void meth49140() { }
+    public void meth49141() { }
+    public void meth49142() { }
+    public void meth49143() { }
+    public void meth49144() { }
+    public void meth49145() { }
+    public void meth49146() { }
+    public void meth49147() { }
+    public void meth49148() { }
+    public void meth49149() { }
+    public void meth49150() { }
+    public void meth49151() { }
+    public void meth49152() { }
+    public void meth49153() { }
+    public void meth49154() { }
+    public void meth49155() { }
+    public void meth49156() { }
+    public void meth49157() { }
+    public void meth49158() { }
+    public void meth49159() { }
+    public void meth49160() { }
+    public void meth49161() { }
+    public void meth49162() { }
+    public void meth49163() { }
+    public void meth49164() { }
+    public void meth49165() { }
+    public void meth49166() { }
+    public void meth49167() { }
+    public void meth49168() { }
+    public void meth49169() { }
+    public void meth49170() { }
+    public void meth49171() { }
+    public void meth49172() { }
+    public void meth49173() { }
+    public void meth49174() { }
+    public void meth49175() { }
+    public void meth49176() { }
+    public void meth49177() { }
+    public void meth49178() { }
+    public void meth49179() { }
+    public void meth49180() { }
+    public void meth49181() { }
+    public void meth49182() { }
+    public void meth49183() { }
+    public void meth49184() { }
+    public void meth49185() { }
+    public void meth49186() { }
+    public void meth49187() { }
+    public void meth49188() { }
+    public void meth49189() { }
+    public void meth49190() { }
+    public void meth49191() { }
+    public void meth49192() { }
+    public void meth49193() { }
+    public void meth49194() { }
+    public void meth49195() { }
+    public void meth49196() { }
+    public void meth49197() { }
+    public void meth49198() { }
+    public void meth49199() { }
+    public void meth49200() { }
+    public void meth49201() { }
+    public void meth49202() { }
+    public void meth49203() { }
+    public void meth49204() { }
+    public void meth49205() { }
+    public void meth49206() { }
+    public void meth49207() { }
+    public void meth49208() { }
+    public void meth49209() { }
+    public void meth49210() { }
+    public void meth49211() { }
+    public void meth49212() { }
+    public void meth49213() { }
+    public void meth49214() { }
+    public void meth49215() { }
+    public void meth49216() { }
+    public void meth49217() { }
+    public void meth49218() { }
+    public void meth49219() { }
+    public void meth49220() { }
+    public void meth49221() { }
+    public void meth49222() { }
+    public void meth49223() { }
+    public void meth49224() { }
+    public void meth49225() { }
+    public void meth49226() { }
+    public void meth49227() { }
+    public void meth49228() { }
+    public void meth49229() { }
+    public void meth49230() { }
+    public void meth49231() { }
+    public void meth49232() { }
+    public void meth49233() { }
+    public void meth49234() { }
+    public void meth49235() { }
+    public void meth49236() { }
+    public void meth49237() { }
+    public void meth49238() { }
+    public void meth49239() { }
+    public void meth49240() { }
+    public void meth49241() { }
+    public void meth49242() { }
+    public void meth49243() { }
+    public void meth49244() { }
+    public void meth49245() { }
+    public void meth49246() { }
+    public void meth49247() { }
+    public void meth49248() { }
+    public void meth49249() { }
+    public void meth49250() { }
+    public void meth49251() { }
+    public void meth49252() { }
+    public void meth49253() { }
+    public void meth49254() { }
+    public void meth49255() { }
+    public void meth49256() { }
+    public void meth49257() { }
+    public void meth49258() { }
+    public void meth49259() { }
+    public void meth49260() { }
+    public void meth49261() { }
+    public void meth49262() { }
+    public void meth49263() { }
+    public void meth49264() { }
+    public void meth49265() { }
+    public void meth49266() { }
+    public void meth49267() { }
+    public void meth49268() { }
+    public void meth49269() { }
+    public void meth49270() { }
+    public void meth49271() { }
+    public void meth49272() { }
+    public void meth49273() { }
+    public void meth49274() { }
+    public void meth49275() { }
+    public void meth49276() { }
+    public void meth49277() { }
+    public void meth49278() { }
+    public void meth49279() { }
+    public void meth49280() { }
+    public void meth49281() { }
+    public void meth49282() { }
+    public void meth49283() { }
+    public void meth49284() { }
+    public void meth49285() { }
+    public void meth49286() { }
+    public void meth49287() { }
+    public void meth49288() { }
+    public void meth49289() { }
+    public void meth49290() { }
+    public void meth49291() { }
+    public void meth49292() { }
+    public void meth49293() { }
+    public void meth49294() { }
+    public void meth49295() { }
+    public void meth49296() { }
+    public void meth49297() { }
+    public void meth49298() { }
+    public void meth49299() { }
+    public void meth49300() { }
+    public void meth49301() { }
+    public void meth49302() { }
+    public void meth49303() { }
+    public void meth49304() { }
+    public void meth49305() { }
+    public void meth49306() { }
+    public void meth49307() { }
+    public void meth49308() { }
+    public void meth49309() { }
+    public void meth49310() { }
+    public void meth49311() { }
+    public void meth49312() { }
+    public void meth49313() { }
+    public void meth49314() { }
+    public void meth49315() { }
+    public void meth49316() { }
+    public void meth49317() { }
+    public void meth49318() { }
+    public void meth49319() { }
+    public void meth49320() { }
+    public void meth49321() { }
+    public void meth49322() { }
+    public void meth49323() { }
+    public void meth49324() { }
+    public void meth49325() { }
+    public void meth49326() { }
+    public void meth49327() { }
+    public void meth49328() { }
+    public void meth49329() { }
+    public void meth49330() { }
+    public void meth49331() { }
+    public void meth49332() { }
+    public void meth49333() { }
+    public void meth49334() { }
+    public void meth49335() { }
+    public void meth49336() { }
+    public void meth49337() { }
+    public void meth49338() { }
+    public void meth49339() { }
+    public void meth49340() { }
+    public void meth49341() { }
+    public void meth49342() { }
+    public void meth49343() { }
+    public void meth49344() { }
+    public void meth49345() { }
+    public void meth49346() { }
+    public void meth49347() { }
+    public void meth49348() { }
+    public void meth49349() { }
+    public void meth49350() { }
+    public void meth49351() { }
+    public void meth49352() { }
+    public void meth49353() { }
+    public void meth49354() { }
+    public void meth49355() { }
+    public void meth49356() { }
+    public void meth49357() { }
+    public void meth49358() { }
+    public void meth49359() { }
+    public void meth49360() { }
+    public void meth49361() { }
+    public void meth49362() { }
+    public void meth49363() { }
+    public void meth49364() { }
+    public void meth49365() { }
+    public void meth49366() { }
+    public void meth49367() { }
+    public void meth49368() { }
+    public void meth49369() { }
+    public void meth49370() { }
+    public void meth49371() { }
+    public void meth49372() { }
+    public void meth49373() { }
+    public void meth49374() { }
+    public void meth49375() { }
+    public void meth49376() { }
+    public void meth49377() { }
+    public void meth49378() { }
+    public void meth49379() { }
+    public void meth49380() { }
+    public void meth49381() { }
+    public void meth49382() { }
+    public void meth49383() { }
+    public void meth49384() { }
+    public void meth49385() { }
+    public void meth49386() { }
+    public void meth49387() { }
+    public void meth49388() { }
+    public void meth49389() { }
+    public void meth49390() { }
+    public void meth49391() { }
+    public void meth49392() { }
+    public void meth49393() { }
+    public void meth49394() { }
+    public void meth49395() { }
+    public void meth49396() { }
+    public void meth49397() { }
+    public void meth49398() { }
+    public void meth49399() { }
+    public void meth49400() { }
+    public void meth49401() { }
+    public void meth49402() { }
+    public void meth49403() { }
+    public void meth49404() { }
+    public void meth49405() { }
+    public void meth49406() { }
+    public void meth49407() { }
+    public void meth49408() { }
+    public void meth49409() { }
+    public void meth49410() { }
+    public void meth49411() { }
+    public void meth49412() { }
+    public void meth49413() { }
+    public void meth49414() { }
+    public void meth49415() { }
+    public void meth49416() { }
+    public void meth49417() { }
+    public void meth49418() { }
+    public void meth49419() { }
+    public void meth49420() { }
+    public void meth49421() { }
+    public void meth49422() { }
+    public void meth49423() { }
+    public void meth49424() { }
+    public void meth49425() { }
+    public void meth49426() { }
+    public void meth49427() { }
+    public void meth49428() { }
+    public void meth49429() { }
+    public void meth49430() { }
+    public void meth49431() { }
+    public void meth49432() { }
+    public void meth49433() { }
+    public void meth49434() { }
+    public void meth49435() { }
+    public void meth49436() { }
+    public void meth49437() { }
+    public void meth49438() { }
+    public void meth49439() { }
+    public void meth49440() { }
+    public void meth49441() { }
+    public void meth49442() { }
+    public void meth49443() { }
+    public void meth49444() { }
+    public void meth49445() { }
+    public void meth49446() { }
+    public void meth49447() { }
+    public void meth49448() { }
+    public void meth49449() { }
+    public void meth49450() { }
+    public void meth49451() { }
+    public void meth49452() { }
+    public void meth49453() { }
+    public void meth49454() { }
+    public void meth49455() { }
+    public void meth49456() { }
+    public void meth49457() { }
+    public void meth49458() { }
+    public void meth49459() { }
+    public void meth49460() { }
+    public void meth49461() { }
+    public void meth49462() { }
+    public void meth49463() { }
+    public void meth49464() { }
+    public void meth49465() { }
+    public void meth49466() { }
+    public void meth49467() { }
+    public void meth49468() { }
+    public void meth49469() { }
+    public void meth49470() { }
+    public void meth49471() { }
+    public void meth49472() { }
+    public void meth49473() { }
+    public void meth49474() { }
+    public void meth49475() { }
+    public void meth49476() { }
+    public void meth49477() { }
+    public void meth49478() { }
+    public void meth49479() { }
+    public void meth49480() { }
+    public void meth49481() { }
+    public void meth49482() { }
+    public void meth49483() { }
+    public void meth49484() { }
+    public void meth49485() { }
+    public void meth49486() { }
+    public void meth49487() { }
+    public void meth49488() { }
+    public void meth49489() { }
+    public void meth49490() { }
+    public void meth49491() { }
+    public void meth49492() { }
+    public void meth49493() { }
+    public void meth49494() { }
+    public void meth49495() { }
+    public void meth49496() { }
+    public void meth49497() { }
+    public void meth49498() { }
+    public void meth49499() { }
+    public void meth49500() { }
+    public void meth49501() { }
+    public void meth49502() { }
+    public void meth49503() { }
+    public void meth49504() { }
+    public void meth49505() { }
+    public void meth49506() { }
+    public void meth49507() { }
+    public void meth49508() { }
+    public void meth49509() { }
+    public void meth49510() { }
+    public void meth49511() { }
+    public void meth49512() { }
+    public void meth49513() { }
+    public void meth49514() { }
+    public void meth49515() { }
+    public void meth49516() { }
+    public void meth49517() { }
+    public void meth49518() { }
+    public void meth49519() { }
+    public void meth49520() { }
+    public void meth49521() { }
+    public void meth49522() { }
+    public void meth49523() { }
+    public void meth49524() { }
+    public void meth49525() { }
+    public void meth49526() { }
+    public void meth49527() { }
+    public void meth49528() { }
+    public void meth49529() { }
+    public void meth49530() { }
+    public void meth49531() { }
+    public void meth49532() { }
+    public void meth49533() { }
+    public void meth49534() { }
+    public void meth49535() { }
+    public void meth49536() { }
+    public void meth49537() { }
+    public void meth49538() { }
+    public void meth49539() { }
+    public void meth49540() { }
+    public void meth49541() { }
+    public void meth49542() { }
+    public void meth49543() { }
+    public void meth49544() { }
+    public void meth49545() { }
+    public void meth49546() { }
+    public void meth49547() { }
+    public void meth49548() { }
+    public void meth49549() { }
+    public void meth49550() { }
+    public void meth49551() { }
+    public void meth49552() { }
+    public void meth49553() { }
+    public void meth49554() { }
+    public void meth49555() { }
+    public void meth49556() { }
+    public void meth49557() { }
+    public void meth49558() { }
+    public void meth49559() { }
+    public void meth49560() { }
+    public void meth49561() { }
+    public void meth49562() { }
+    public void meth49563() { }
+    public void meth49564() { }
+    public void meth49565() { }
+    public void meth49566() { }
+    public void meth49567() { }
+    public void meth49568() { }
+    public void meth49569() { }
+    public void meth49570() { }
+    public void meth49571() { }
+    public void meth49572() { }
+    public void meth49573() { }
+    public void meth49574() { }
+    public void meth49575() { }
+    public void meth49576() { }
+    public void meth49577() { }
+    public void meth49578() { }
+    public void meth49579() { }
+    public void meth49580() { }
+    public void meth49581() { }
+    public void meth49582() { }
+    public void meth49583() { }
+    public void meth49584() { }
+    public void meth49585() { }
+    public void meth49586() { }
+    public void meth49587() { }
+    public void meth49588() { }
+    public void meth49589() { }
+    public void meth49590() { }
+    public void meth49591() { }
+    public void meth49592() { }
+    public void meth49593() { }
+    public void meth49594() { }
+    public void meth49595() { }
+    public void meth49596() { }
+    public void meth49597() { }
+    public void meth49598() { }
+    public void meth49599() { }
+    public void meth49600() { }
+    public void meth49601() { }
+    public void meth49602() { }
+    public void meth49603() { }
+    public void meth49604() { }
+    public void meth49605() { }
+    public void meth49606() { }
+    public void meth49607() { }
+    public void meth49608() { }
+    public void meth49609() { }
+    public void meth49610() { }
+    public void meth49611() { }
+    public void meth49612() { }
+    public void meth49613() { }
+    public void meth49614() { }
+    public void meth49615() { }
+    public void meth49616() { }
+    public void meth49617() { }
+    public void meth49618() { }
+    public void meth49619() { }
+    public void meth49620() { }
+    public void meth49621() { }
+    public void meth49622() { }
+    public void meth49623() { }
+    public void meth49624() { }
+    public void meth49625() { }
+    public void meth49626() { }
+    public void meth49627() { }
+    public void meth49628() { }
+    public void meth49629() { }
+    public void meth49630() { }
+    public void meth49631() { }
+    public void meth49632() { }
+    public void meth49633() { }
+    public void meth49634() { }
+    public void meth49635() { }
+    public void meth49636() { }
+    public void meth49637() { }
+    public void meth49638() { }
+    public void meth49639() { }
+    public void meth49640() { }
+    public void meth49641() { }
+    public void meth49642() { }
+    public void meth49643() { }
+    public void meth49644() { }
+    public void meth49645() { }
+    public void meth49646() { }
+    public void meth49647() { }
+    public void meth49648() { }
+    public void meth49649() { }
+    public void meth49650() { }
+    public void meth49651() { }
+    public void meth49652() { }
+    public void meth49653() { }
+    public void meth49654() { }
+    public void meth49655() { }
+    public void meth49656() { }
+    public void meth49657() { }
+    public void meth49658() { }
+    public void meth49659() { }
+    public void meth49660() { }
+    public void meth49661() { }
+    public void meth49662() { }
+    public void meth49663() { }
+    public void meth49664() { }
+    public void meth49665() { }
+    public void meth49666() { }
+    public void meth49667() { }
+    public void meth49668() { }
+    public void meth49669() { }
+    public void meth49670() { }
+    public void meth49671() { }
+    public void meth49672() { }
+    public void meth49673() { }
+    public void meth49674() { }
+    public void meth49675() { }
+    public void meth49676() { }
+    public void meth49677() { }
+    public void meth49678() { }
+    public void meth49679() { }
+    public void meth49680() { }
+    public void meth49681() { }
+    public void meth49682() { }
+    public void meth49683() { }
+    public void meth49684() { }
+    public void meth49685() { }
+    public void meth49686() { }
+    public void meth49687() { }
+    public void meth49688() { }
+    public void meth49689() { }
+    public void meth49690() { }
+    public void meth49691() { }
+    public void meth49692() { }
+    public void meth49693() { }
+    public void meth49694() { }
+    public void meth49695() { }
+    public void meth49696() { }
+    public void meth49697() { }
+    public void meth49698() { }
+    public void meth49699() { }
+    public void meth49700() { }
+    public void meth49701() { }
+    public void meth49702() { }
+    public void meth49703() { }
+    public void meth49704() { }
+    public void meth49705() { }
+    public void meth49706() { }
+    public void meth49707() { }
+    public void meth49708() { }
+    public void meth49709() { }
+    public void meth49710() { }
+    public void meth49711() { }
+    public void meth49712() { }
+    public void meth49713() { }
+    public void meth49714() { }
+    public void meth49715() { }
+    public void meth49716() { }
+    public void meth49717() { }
+    public void meth49718() { }
+    public void meth49719() { }
+    public void meth49720() { }
+    public void meth49721() { }
+    public void meth49722() { }
+    public void meth49723() { }
+    public void meth49724() { }
+    public void meth49725() { }
+    public void meth49726() { }
+    public void meth49727() { }
+    public void meth49728() { }
+    public void meth49729() { }
+    public void meth49730() { }
+    public void meth49731() { }
+    public void meth49732() { }
+    public void meth49733() { }
+    public void meth49734() { }
+    public void meth49735() { }
+    public void meth49736() { }
+    public void meth49737() { }
+    public void meth49738() { }
+    public void meth49739() { }
+    public void meth49740() { }
+    public void meth49741() { }
+    public void meth49742() { }
+    public void meth49743() { }
+    public void meth49744() { }
+    public void meth49745() { }
+    public void meth49746() { }
+    public void meth49747() { }
+    public void meth49748() { }
+    public void meth49749() { }
+    public void meth49750() { }
+    public void meth49751() { }
+    public void meth49752() { }
+    public void meth49753() { }
+    public void meth49754() { }
+    public void meth49755() { }
+    public void meth49756() { }
+    public void meth49757() { }
+    public void meth49758() { }
+    public void meth49759() { }
+    public void meth49760() { }
+    public void meth49761() { }
+    public void meth49762() { }
+    public void meth49763() { }
+    public void meth49764() { }
+    public void meth49765() { }
+    public void meth49766() { }
+    public void meth49767() { }
+    public void meth49768() { }
+    public void meth49769() { }
+    public void meth49770() { }
+    public void meth49771() { }
+    public void meth49772() { }
+    public void meth49773() { }
+    public void meth49774() { }
+    public void meth49775() { }
+    public void meth49776() { }
+    public void meth49777() { }
+    public void meth49778() { }
+    public void meth49779() { }
+    public void meth49780() { }
+    public void meth49781() { }
+    public void meth49782() { }
+    public void meth49783() { }
+    public void meth49784() { }
+    public void meth49785() { }
+    public void meth49786() { }
+    public void meth49787() { }
+    public void meth49788() { }
+    public void meth49789() { }
+    public void meth49790() { }
+    public void meth49791() { }
+    public void meth49792() { }
+    public void meth49793() { }
+    public void meth49794() { }
+    public void meth49795() { }
+    public void meth49796() { }
+    public void meth49797() { }
+    public void meth49798() { }
+    public void meth49799() { }
+    public void meth49800() { }
+    public void meth49801() { }
+    public void meth49802() { }
+    public void meth49803() { }
+    public void meth49804() { }
+    public void meth49805() { }
+    public void meth49806() { }
+    public void meth49807() { }
+    public void meth49808() { }
+    public void meth49809() { }
+    public void meth49810() { }
+    public void meth49811() { }
+    public void meth49812() { }
+    public void meth49813() { }
+    public void meth49814() { }
+    public void meth49815() { }
+    public void meth49816() { }
+    public void meth49817() { }
+    public void meth49818() { }
+    public void meth49819() { }
+    public void meth49820() { }
+    public void meth49821() { }
+    public void meth49822() { }
+    public void meth49823() { }
+    public void meth49824() { }
+    public void meth49825() { }
+    public void meth49826() { }
+    public void meth49827() { }
+    public void meth49828() { }
+    public void meth49829() { }
+    public void meth49830() { }
+    public void meth49831() { }
+    public void meth49832() { }
+    public void meth49833() { }
+    public void meth49834() { }
+    public void meth49835() { }
+    public void meth49836() { }
+    public void meth49837() { }
+    public void meth49838() { }
+    public void meth49839() { }
+    public void meth49840() { }
+    public void meth49841() { }
+    public void meth49842() { }
+    public void meth49843() { }
+    public void meth49844() { }
+    public void meth49845() { }
+    public void meth49846() { }
+    public void meth49847() { }
+    public void meth49848() { }
+    public void meth49849() { }
+    public void meth49850() { }
+    public void meth49851() { }
+    public void meth49852() { }
+    public void meth49853() { }
+    public void meth49854() { }
+    public void meth49855() { }
+    public void meth49856() { }
+    public void meth49857() { }
+    public void meth49858() { }
+    public void meth49859() { }
+    public void meth49860() { }
+    public void meth49861() { }
+    public void meth49862() { }
+    public void meth49863() { }
+    public void meth49864() { }
+    public void meth49865() { }
+    public void meth49866() { }
+    public void meth49867() { }
+    public void meth49868() { }
+    public void meth49869() { }
+    public void meth49870() { }
+    public void meth49871() { }
+    public void meth49872() { }
+    public void meth49873() { }
+    public void meth49874() { }
+    public void meth49875() { }
+    public void meth49876() { }
+    public void meth49877() { }
+    public void meth49878() { }
+    public void meth49879() { }
+    public void meth49880() { }
+    public void meth49881() { }
+    public void meth49882() { }
+    public void meth49883() { }
+    public void meth49884() { }
+    public void meth49885() { }
+    public void meth49886() { }
+    public void meth49887() { }
+    public void meth49888() { }
+    public void meth49889() { }
+    public void meth49890() { }
+    public void meth49891() { }
+    public void meth49892() { }
+    public void meth49893() { }
+    public void meth49894() { }
+    public void meth49895() { }
+    public void meth49896() { }
+    public void meth49897() { }
+    public void meth49898() { }
+    public void meth49899() { }
+    public void meth49900() { }
+    public void meth49901() { }
+    public void meth49902() { }
+    public void meth49903() { }
+    public void meth49904() { }
+    public void meth49905() { }
+    public void meth49906() { }
+    public void meth49907() { }
+    public void meth49908() { }
+    public void meth49909() { }
+    public void meth49910() { }
+    public void meth49911() { }
+    public void meth49912() { }
+    public void meth49913() { }
+    public void meth49914() { }
+    public void meth49915() { }
+    public void meth49916() { }
+    public void meth49917() { }
+    public void meth49918() { }
+    public void meth49919() { }
+    public void meth49920() { }
+    public void meth49921() { }
+    public void meth49922() { }
+    public void meth49923() { }
+    public void meth49924() { }
+    public void meth49925() { }
+    public void meth49926() { }
+    public void meth49927() { }
+    public void meth49928() { }
+    public void meth49929() { }
+    public void meth49930() { }
+    public void meth49931() { }
+    public void meth49932() { }
+    public void meth49933() { }
+    public void meth49934() { }
+    public void meth49935() { }
+    public void meth49936() { }
+    public void meth49937() { }
+    public void meth49938() { }
+    public void meth49939() { }
+    public void meth49940() { }
+    public void meth49941() { }
+    public void meth49942() { }
+    public void meth49943() { }
+    public void meth49944() { }
+    public void meth49945() { }
+    public void meth49946() { }
+    public void meth49947() { }
+    public void meth49948() { }
+    public void meth49949() { }
+    public void meth49950() { }
+    public void meth49951() { }
+    public void meth49952() { }
+    public void meth49953() { }
+    public void meth49954() { }
+    public void meth49955() { }
+    public void meth49956() { }
+    public void meth49957() { }
+    public void meth49958() { }
+    public void meth49959() { }
+    public void meth49960() { }
+    public void meth49961() { }
+    public void meth49962() { }
+    public void meth49963() { }
+    public void meth49964() { }
+    public void meth49965() { }
+    public void meth49966() { }
+    public void meth49967() { }
+    public void meth49968() { }
+    public void meth49969() { }
+    public void meth49970() { }
+    public void meth49971() { }
+    public void meth49972() { }
+    public void meth49973() { }
+    public void meth49974() { }
+    public void meth49975() { }
+    public void meth49976() { }
+    public void meth49977() { }
+    public void meth49978() { }
+    public void meth49979() { }
+    public void meth49980() { }
+    public void meth49981() { }
+    public void meth49982() { }
+    public void meth49983() { }
+    public void meth49984() { }
+    public void meth49985() { }
+    public void meth49986() { }
+    public void meth49987() { }
+    public void meth49988() { }
+    public void meth49989() { }
+    public void meth49990() { }
+    public void meth49991() { }
+    public void meth49992() { }
+    public void meth49993() { }
+    public void meth49994() { }
+    public void meth49995() { }
+    public void meth49996() { }
+    public void meth49997() { }
+    public void meth49998() { }
+    public void meth49999() { }
+    public void meth50000() { }
+    public void meth50001() { }
+    public void meth50002() { }
+    public void meth50003() { }
+    public void meth50004() { }
+    public void meth50005() { }
+    public void meth50006() { }
+    public void meth50007() { }
+    public void meth50008() { }
+    public void meth50009() { }
+    public void meth50010() { }
+    public void meth50011() { }
+    public void meth50012() { }
+    public void meth50013() { }
+    public void meth50014() { }
+    public void meth50015() { }
+    public void meth50016() { }
+    public void meth50017() { }
+    public void meth50018() { }
+    public void meth50019() { }
+    public void meth50020() { }
+    public void meth50021() { }
+    public void meth50022() { }
+    public void meth50023() { }
+    public void meth50024() { }
+    public void meth50025() { }
+    public void meth50026() { }
+    public void meth50027() { }
+    public void meth50028() { }
+    public void meth50029() { }
+    public void meth50030() { }
+    public void meth50031() { }
+    public void meth50032() { }
+    public void meth50033() { }
+    public void meth50034() { }
+    public void meth50035() { }
+    public void meth50036() { }
+    public void meth50037() { }
+    public void meth50038() { }
+    public void meth50039() { }
+    public void meth50040() { }
+    public void meth50041() { }
+    public void meth50042() { }
+    public void meth50043() { }
+    public void meth50044() { }
+    public void meth50045() { }
+    public void meth50046() { }
+    public void meth50047() { }
+    public void meth50048() { }
+    public void meth50049() { }
+    public void meth50050() { }
+    public void meth50051() { }
+    public void meth50052() { }
+    public void meth50053() { }
+    public void meth50054() { }
+    public void meth50055() { }
+    public void meth50056() { }
+    public void meth50057() { }
+    public void meth50058() { }
+    public void meth50059() { }
+    public void meth50060() { }
+    public void meth50061() { }
+    public void meth50062() { }
+    public void meth50063() { }
+    public void meth50064() { }
+    public void meth50065() { }
+    public void meth50066() { }
+    public void meth50067() { }
+    public void meth50068() { }
+    public void meth50069() { }
+    public void meth50070() { }
+    public void meth50071() { }
+    public void meth50072() { }
+    public void meth50073() { }
+    public void meth50074() { }
+    public void meth50075() { }
+    public void meth50076() { }
+    public void meth50077() { }
+    public void meth50078() { }
+    public void meth50079() { }
+    public void meth50080() { }
+    public void meth50081() { }
+    public void meth50082() { }
+    public void meth50083() { }
+    public void meth50084() { }
+    public void meth50085() { }
+    public void meth50086() { }
+    public void meth50087() { }
+    public void meth50088() { }
+    public void meth50089() { }
+    public void meth50090() { }
+    public void meth50091() { }
+    public void meth50092() { }
+    public void meth50093() { }
+    public void meth50094() { }
+    public void meth50095() { }
+    public void meth50096() { }
+    public void meth50097() { }
+    public void meth50098() { }
+    public void meth50099() { }
+    public void meth50100() { }
+    public void meth50101() { }
+    public void meth50102() { }
+    public void meth50103() { }
+    public void meth50104() { }
+    public void meth50105() { }
+    public void meth50106() { }
+    public void meth50107() { }
+    public void meth50108() { }
+    public void meth50109() { }
+    public void meth50110() { }
+    public void meth50111() { }
+    public void meth50112() { }
+    public void meth50113() { }
+    public void meth50114() { }
+    public void meth50115() { }
+    public void meth50116() { }
+    public void meth50117() { }
+    public void meth50118() { }
+    public void meth50119() { }
+    public void meth50120() { }
+    public void meth50121() { }
+    public void meth50122() { }
+    public void meth50123() { }
+    public void meth50124() { }
+    public void meth50125() { }
+    public void meth50126() { }
+    public void meth50127() { }
+    public void meth50128() { }
+    public void meth50129() { }
+    public void meth50130() { }
+    public void meth50131() { }
+    public void meth50132() { }
+    public void meth50133() { }
+    public void meth50134() { }
+    public void meth50135() { }
+    public void meth50136() { }
+    public void meth50137() { }
+    public void meth50138() { }
+    public void meth50139() { }
+    public void meth50140() { }
+    public void meth50141() { }
+    public void meth50142() { }
+    public void meth50143() { }
+    public void meth50144() { }
+    public void meth50145() { }
+    public void meth50146() { }
+    public void meth50147() { }
+    public void meth50148() { }
+    public void meth50149() { }
+    public void meth50150() { }
+    public void meth50151() { }
+    public void meth50152() { }
+    public void meth50153() { }
+    public void meth50154() { }
+    public void meth50155() { }
+    public void meth50156() { }
+    public void meth50157() { }
+    public void meth50158() { }
+    public void meth50159() { }
+    public void meth50160() { }
+    public void meth50161() { }
+    public void meth50162() { }
+    public void meth50163() { }
+    public void meth50164() { }
+    public void meth50165() { }
+    public void meth50166() { }
+    public void meth50167() { }
+    public void meth50168() { }
+    public void meth50169() { }
+    public void meth50170() { }
+    public void meth50171() { }
+    public void meth50172() { }
+    public void meth50173() { }
+    public void meth50174() { }
+    public void meth50175() { }
+    public void meth50176() { }
+    public void meth50177() { }
+    public void meth50178() { }
+    public void meth50179() { }
+    public void meth50180() { }
+    public void meth50181() { }
+    public void meth50182() { }
+    public void meth50183() { }
+    public void meth50184() { }
+    public void meth50185() { }
+    public void meth50186() { }
+    public void meth50187() { }
+    public void meth50188() { }
+    public void meth50189() { }
+    public void meth50190() { }
+    public void meth50191() { }
+    public void meth50192() { }
+    public void meth50193() { }
+    public void meth50194() { }
+    public void meth50195() { }
+    public void meth50196() { }
+    public void meth50197() { }
+    public void meth50198() { }
+    public void meth50199() { }
+    public void meth50200() { }
+    public void meth50201() { }
+    public void meth50202() { }
+    public void meth50203() { }
+    public void meth50204() { }
+    public void meth50205() { }
+    public void meth50206() { }
+    public void meth50207() { }
+    public void meth50208() { }
+    public void meth50209() { }
+    public void meth50210() { }
+    public void meth50211() { }
+    public void meth50212() { }
+    public void meth50213() { }
+    public void meth50214() { }
+    public void meth50215() { }
+    public void meth50216() { }
+    public void meth50217() { }
+    public void meth50218() { }
+    public void meth50219() { }
+    public void meth50220() { }
+    public void meth50221() { }
+    public void meth50222() { }
+    public void meth50223() { }
+    public void meth50224() { }
+    public void meth50225() { }
+    public void meth50226() { }
+    public void meth50227() { }
+    public void meth50228() { }
+    public void meth50229() { }
+    public void meth50230() { }
+    public void meth50231() { }
+    public void meth50232() { }
+    public void meth50233() { }
+    public void meth50234() { }
+    public void meth50235() { }
+    public void meth50236() { }
+    public void meth50237() { }
+    public void meth50238() { }
+    public void meth50239() { }
+    public void meth50240() { }
+    public void meth50241() { }
+    public void meth50242() { }
+    public void meth50243() { }
+    public void meth50244() { }
+    public void meth50245() { }
+    public void meth50246() { }
+    public void meth50247() { }
+    public void meth50248() { }
+    public void meth50249() { }
+    public void meth50250() { }
+    public void meth50251() { }
+    public void meth50252() { }
+    public void meth50253() { }
+    public void meth50254() { }
+    public void meth50255() { }
+    public void meth50256() { }
+    public void meth50257() { }
+    public void meth50258() { }
+    public void meth50259() { }
+    public void meth50260() { }
+    public void meth50261() { }
+    public void meth50262() { }
+    public void meth50263() { }
+    public void meth50264() { }
+    public void meth50265() { }
+    public void meth50266() { }
+    public void meth50267() { }
+    public void meth50268() { }
+    public void meth50269() { }
+    public void meth50270() { }
+    public void meth50271() { }
+    public void meth50272() { }
+    public void meth50273() { }
+    public void meth50274() { }
+    public void meth50275() { }
+    public void meth50276() { }
+    public void meth50277() { }
+    public void meth50278() { }
+    public void meth50279() { }
+    public void meth50280() { }
+    public void meth50281() { }
+    public void meth50282() { }
+    public void meth50283() { }
+    public void meth50284() { }
+    public void meth50285() { }
+    public void meth50286() { }
+    public void meth50287() { }
+    public void meth50288() { }
+    public void meth50289() { }
+    public void meth50290() { }
+    public void meth50291() { }
+    public void meth50292() { }
+    public void meth50293() { }
+    public void meth50294() { }
+    public void meth50295() { }
+    public void meth50296() { }
+    public void meth50297() { }
+    public void meth50298() { }
+    public void meth50299() { }
+    public void meth50300() { }
+    public void meth50301() { }
+    public void meth50302() { }
+    public void meth50303() { }
+    public void meth50304() { }
+    public void meth50305() { }
+    public void meth50306() { }
+    public void meth50307() { }
+    public void meth50308() { }
+    public void meth50309() { }
+    public void meth50310() { }
+    public void meth50311() { }
+    public void meth50312() { }
+    public void meth50313() { }
+    public void meth50314() { }
+    public void meth50315() { }
+    public void meth50316() { }
+    public void meth50317() { }
+    public void meth50318() { }
+    public void meth50319() { }
+    public void meth50320() { }
+    public void meth50321() { }
+    public void meth50322() { }
+    public void meth50323() { }
+    public void meth50324() { }
+    public void meth50325() { }
+    public void meth50326() { }
+    public void meth50327() { }
+    public void meth50328() { }
+    public void meth50329() { }
+    public void meth50330() { }
+    public void meth50331() { }
+    public void meth50332() { }
+    public void meth50333() { }
+    public void meth50334() { }
+    public void meth50335() { }
+    public void meth50336() { }
+    public void meth50337() { }
+    public void meth50338() { }
+    public void meth50339() { }
+    public void meth50340() { }
+    public void meth50341() { }
+    public void meth50342() { }
+    public void meth50343() { }
+    public void meth50344() { }
+    public void meth50345() { }
+    public void meth50346() { }
+    public void meth50347() { }
+    public void meth50348() { }
+    public void meth50349() { }
+    public void meth50350() { }
+    public void meth50351() { }
+    public void meth50352() { }
+    public void meth50353() { }
+    public void meth50354() { }
+    public void meth50355() { }
+    public void meth50356() { }
+    public void meth50357() { }
+    public void meth50358() { }
+    public void meth50359() { }
+    public void meth50360() { }
+    public void meth50361() { }
+    public void meth50362() { }
+    public void meth50363() { }
+    public void meth50364() { }
+    public void meth50365() { }
+    public void meth50366() { }
+    public void meth50367() { }
+    public void meth50368() { }
+    public void meth50369() { }
+    public void meth50370() { }
+    public void meth50371() { }
+    public void meth50372() { }
+    public void meth50373() { }
+    public void meth50374() { }
+    public void meth50375() { }
+    public void meth50376() { }
+    public void meth50377() { }
+    public void meth50378() { }
+    public void meth50379() { }
+    public void meth50380() { }
+    public void meth50381() { }
+    public void meth50382() { }
+    public void meth50383() { }
+    public void meth50384() { }
+    public void meth50385() { }
+    public void meth50386() { }
+    public void meth50387() { }
+    public void meth50388() { }
+    public void meth50389() { }
+    public void meth50390() { }
+    public void meth50391() { }
+    public void meth50392() { }
+    public void meth50393() { }
+    public void meth50394() { }
+    public void meth50395() { }
+    public void meth50396() { }
+    public void meth50397() { }
+    public void meth50398() { }
+    public void meth50399() { }
+    public void meth50400() { }
+    public void meth50401() { }
+    public void meth50402() { }
+    public void meth50403() { }
+    public void meth50404() { }
+    public void meth50405() { }
+    public void meth50406() { }
+    public void meth50407() { }
+    public void meth50408() { }
+    public void meth50409() { }
+    public void meth50410() { }
+    public void meth50411() { }
+    public void meth50412() { }
+    public void meth50413() { }
+    public void meth50414() { }
+    public void meth50415() { }
+    public void meth50416() { }
+    public void meth50417() { }
+    public void meth50418() { }
+    public void meth50419() { }
+    public void meth50420() { }
+    public void meth50421() { }
+    public void meth50422() { }
+    public void meth50423() { }
+    public void meth50424() { }
+    public void meth50425() { }
+    public void meth50426() { }
+    public void meth50427() { }
+    public void meth50428() { }
+    public void meth50429() { }
+    public void meth50430() { }
+    public void meth50431() { }
+    public void meth50432() { }
+    public void meth50433() { }
+    public void meth50434() { }
+    public void meth50435() { }
+    public void meth50436() { }
+    public void meth50437() { }
+    public void meth50438() { }
+    public void meth50439() { }
+    public void meth50440() { }
+    public void meth50441() { }
+    public void meth50442() { }
+    public void meth50443() { }
+    public void meth50444() { }
+    public void meth50445() { }
+    public void meth50446() { }
+    public void meth50447() { }
+    public void meth50448() { }
+    public void meth50449() { }
+    public void meth50450() { }
+    public void meth50451() { }
+    public void meth50452() { }
+    public void meth50453() { }
+    public void meth50454() { }
+    public void meth50455() { }
+    public void meth50456() { }
+    public void meth50457() { }
+    public void meth50458() { }
+    public void meth50459() { }
+    public void meth50460() { }
+    public void meth50461() { }
+    public void meth50462() { }
+    public void meth50463() { }
+    public void meth50464() { }
+    public void meth50465() { }
+    public void meth50466() { }
+    public void meth50467() { }
+    public void meth50468() { }
+    public void meth50469() { }
+    public void meth50470() { }
+    public void meth50471() { }
+    public void meth50472() { }
+    public void meth50473() { }
+    public void meth50474() { }
+    public void meth50475() { }
+    public void meth50476() { }
+    public void meth50477() { }
+    public void meth50478() { }
+    public void meth50479() { }
+    public void meth50480() { }
+    public void meth50481() { }
+    public void meth50482() { }
+    public void meth50483() { }
+    public void meth50484() { }
+    public void meth50485() { }
+    public void meth50486() { }
+    public void meth50487() { }
+    public void meth50488() { }
+    public void meth50489() { }
+    public void meth50490() { }
+    public void meth50491() { }
+    public void meth50492() { }
+    public void meth50493() { }
+    public void meth50494() { }
+    public void meth50495() { }
+    public void meth50496() { }
+    public void meth50497() { }
+    public void meth50498() { }
+    public void meth50499() { }
+    public void meth50500() { }
+    public void meth50501() { }
+    public void meth50502() { }
+    public void meth50503() { }
+    public void meth50504() { }
+    public void meth50505() { }
+    public void meth50506() { }
+    public void meth50507() { }
+    public void meth50508() { }
+    public void meth50509() { }
+    public void meth50510() { }
+    public void meth50511() { }
+    public void meth50512() { }
+    public void meth50513() { }
+    public void meth50514() { }
+    public void meth50515() { }
+    public void meth50516() { }
+    public void meth50517() { }
+    public void meth50518() { }
+    public void meth50519() { }
+    public void meth50520() { }
+    public void meth50521() { }
+    public void meth50522() { }
+    public void meth50523() { }
+    public void meth50524() { }
+    public void meth50525() { }
+    public void meth50526() { }
+    public void meth50527() { }
+    public void meth50528() { }
+    public void meth50529() { }
+    public void meth50530() { }
+    public void meth50531() { }
+    public void meth50532() { }
+    public void meth50533() { }
+    public void meth50534() { }
+    public void meth50535() { }
+    public void meth50536() { }
+    public void meth50537() { }
+    public void meth50538() { }
+    public void meth50539() { }
+    public void meth50540() { }
+    public void meth50541() { }
+    public void meth50542() { }
+    public void meth50543() { }
+    public void meth50544() { }
+    public void meth50545() { }
+    public void meth50546() { }
+    public void meth50547() { }
+    public void meth50548() { }
+    public void meth50549() { }
+    public void meth50550() { }
+    public void meth50551() { }
+    public void meth50552() { }
+    public void meth50553() { }
+    public void meth50554() { }
+    public void meth50555() { }
+    public void meth50556() { }
+    public void meth50557() { }
+    public void meth50558() { }
+    public void meth50559() { }
+    public void meth50560() { }
+    public void meth50561() { }
+    public void meth50562() { }
+    public void meth50563() { }
+    public void meth50564() { }
+    public void meth50565() { }
+    public void meth50566() { }
+    public void meth50567() { }
+    public void meth50568() { }
+    public void meth50569() { }
+    public void meth50570() { }
+    public void meth50571() { }
+    public void meth50572() { }
+    public void meth50573() { }
+    public void meth50574() { }
+    public void meth50575() { }
+    public void meth50576() { }
+    public void meth50577() { }
+    public void meth50578() { }
+    public void meth50579() { }
+    public void meth50580() { }
+    public void meth50581() { }
+    public void meth50582() { }
+    public void meth50583() { }
+    public void meth50584() { }
+    public void meth50585() { }
+    public void meth50586() { }
+    public void meth50587() { }
+    public void meth50588() { }
+    public void meth50589() { }
+    public void meth50590() { }
+    public void meth50591() { }
+    public void meth50592() { }
+    public void meth50593() { }
+    public void meth50594() { }
+    public void meth50595() { }
+    public void meth50596() { }
+    public void meth50597() { }
+    public void meth50598() { }
+    public void meth50599() { }
+    public void meth50600() { }
+    public void meth50601() { }
+    public void meth50602() { }
+    public void meth50603() { }
+    public void meth50604() { }
+    public void meth50605() { }
+    public void meth50606() { }
+    public void meth50607() { }
+    public void meth50608() { }
+    public void meth50609() { }
+    public void meth50610() { }
+    public void meth50611() { }
+    public void meth50612() { }
+    public void meth50613() { }
+    public void meth50614() { }
+    public void meth50615() { }
+    public void meth50616() { }
+    public void meth50617() { }
+    public void meth50618() { }
+    public void meth50619() { }
+    public void meth50620() { }
+    public void meth50621() { }
+    public void meth50622() { }
+    public void meth50623() { }
+    public void meth50624() { }
+    public void meth50625() { }
+    public void meth50626() { }
+    public void meth50627() { }
+    public void meth50628() { }
+    public void meth50629() { }
+    public void meth50630() { }
+    public void meth50631() { }
+    public void meth50632() { }
+    public void meth50633() { }
+    public void meth50634() { }
+    public void meth50635() { }
+    public void meth50636() { }
+    public void meth50637() { }
+    public void meth50638() { }
+    public void meth50639() { }
+    public void meth50640() { }
+    public void meth50641() { }
+    public void meth50642() { }
+    public void meth50643() { }
+    public void meth50644() { }
+    public void meth50645() { }
+    public void meth50646() { }
+    public void meth50647() { }
+    public void meth50648() { }
+    public void meth50649() { }
+    public void meth50650() { }
+    public void meth50651() { }
+    public void meth50652() { }
+    public void meth50653() { }
+    public void meth50654() { }
+    public void meth50655() { }
+    public void meth50656() { }
+    public void meth50657() { }
+    public void meth50658() { }
+    public void meth50659() { }
+    public void meth50660() { }
+    public void meth50661() { }
+    public void meth50662() { }
+    public void meth50663() { }
+    public void meth50664() { }
+    public void meth50665() { }
+    public void meth50666() { }
+    public void meth50667() { }
+    public void meth50668() { }
+    public void meth50669() { }
+    public void meth50670() { }
+    public void meth50671() { }
+    public void meth50672() { }
+    public void meth50673() { }
+    public void meth50674() { }
+    public void meth50675() { }
+    public void meth50676() { }
+    public void meth50677() { }
+    public void meth50678() { }
+    public void meth50679() { }
+    public void meth50680() { }
+    public void meth50681() { }
+    public void meth50682() { }
+    public void meth50683() { }
+    public void meth50684() { }
+    public void meth50685() { }
+    public void meth50686() { }
+    public void meth50687() { }
+    public void meth50688() { }
+    public void meth50689() { }
+    public void meth50690() { }
+    public void meth50691() { }
+    public void meth50692() { }
+    public void meth50693() { }
+    public void meth50694() { }
+    public void meth50695() { }
+    public void meth50696() { }
+    public void meth50697() { }
+    public void meth50698() { }
+    public void meth50699() { }
+    public void meth50700() { }
+    public void meth50701() { }
+    public void meth50702() { }
+    public void meth50703() { }
+    public void meth50704() { }
+    public void meth50705() { }
+    public void meth50706() { }
+    public void meth50707() { }
+    public void meth50708() { }
+    public void meth50709() { }
+    public void meth50710() { }
+    public void meth50711() { }
+    public void meth50712() { }
+    public void meth50713() { }
+    public void meth50714() { }
+    public void meth50715() { }
+    public void meth50716() { }
+    public void meth50717() { }
+    public void meth50718() { }
+    public void meth50719() { }
+    public void meth50720() { }
+    public void meth50721() { }
+    public void meth50722() { }
+    public void meth50723() { }
+    public void meth50724() { }
+    public void meth50725() { }
+    public void meth50726() { }
+    public void meth50727() { }
+    public void meth50728() { }
+    public void meth50729() { }
+    public void meth50730() { }
+    public void meth50731() { }
+    public void meth50732() { }
+    public void meth50733() { }
+    public void meth50734() { }
+    public void meth50735() { }
+    public void meth50736() { }
+    public void meth50737() { }
+    public void meth50738() { }
+    public void meth50739() { }
+    public void meth50740() { }
+    public void meth50741() { }
+    public void meth50742() { }
+    public void meth50743() { }
+    public void meth50744() { }
+    public void meth50745() { }
+    public void meth50746() { }
+    public void meth50747() { }
+    public void meth50748() { }
+    public void meth50749() { }
+    public void meth50750() { }
+    public void meth50751() { }
+    public void meth50752() { }
+    public void meth50753() { }
+    public void meth50754() { }
+    public void meth50755() { }
+    public void meth50756() { }
+    public void meth50757() { }
+    public void meth50758() { }
+    public void meth50759() { }
+    public void meth50760() { }
+    public void meth50761() { }
+    public void meth50762() { }
+    public void meth50763() { }
+    public void meth50764() { }
+    public void meth50765() { }
+    public void meth50766() { }
+    public void meth50767() { }
+    public void meth50768() { }
+    public void meth50769() { }
+    public void meth50770() { }
+    public void meth50771() { }
+    public void meth50772() { }
+    public void meth50773() { }
+    public void meth50774() { }
+    public void meth50775() { }
+    public void meth50776() { }
+    public void meth50777() { }
+    public void meth50778() { }
+    public void meth50779() { }
+    public void meth50780() { }
+    public void meth50781() { }
+    public void meth50782() { }
+    public void meth50783() { }
+    public void meth50784() { }
+    public void meth50785() { }
+    public void meth50786() { }
+    public void meth50787() { }
+    public void meth50788() { }
+    public void meth50789() { }
+    public void meth50790() { }
+    public void meth50791() { }
+    public void meth50792() { }
+    public void meth50793() { }
+    public void meth50794() { }
+    public void meth50795() { }
+    public void meth50796() { }
+    public void meth50797() { }
+    public void meth50798() { }
+    public void meth50799() { }
+    public void meth50800() { }
+    public void meth50801() { }
+    public void meth50802() { }
+    public void meth50803() { }
+    public void meth50804() { }
+    public void meth50805() { }
+    public void meth50806() { }
+    public void meth50807() { }
+    public void meth50808() { }
+    public void meth50809() { }
+    public void meth50810() { }
+    public void meth50811() { }
+    public void meth50812() { }
+    public void meth50813() { }
+    public void meth50814() { }
+    public void meth50815() { }
+    public void meth50816() { }
+    public void meth50817() { }
+    public void meth50818() { }
+    public void meth50819() { }
+    public void meth50820() { }
+    public void meth50821() { }
+    public void meth50822() { }
+    public void meth50823() { }
+    public void meth50824() { }
+    public void meth50825() { }
+    public void meth50826() { }
+    public void meth50827() { }
+    public void meth50828() { }
+    public void meth50829() { }
+    public void meth50830() { }
+    public void meth50831() { }
+    public void meth50832() { }
+    public void meth50833() { }
+    public void meth50834() { }
+    public void meth50835() { }
+    public void meth50836() { }
+    public void meth50837() { }
+    public void meth50838() { }
+    public void meth50839() { }
+    public void meth50840() { }
+    public void meth50841() { }
+    public void meth50842() { }
+    public void meth50843() { }
+    public void meth50844() { }
+    public void meth50845() { }
+    public void meth50846() { }
+    public void meth50847() { }
+    public void meth50848() { }
+    public void meth50849() { }
+    public void meth50850() { }
+    public void meth50851() { }
+    public void meth50852() { }
+    public void meth50853() { }
+    public void meth50854() { }
+    public void meth50855() { }
+    public void meth50856() { }
+    public void meth50857() { }
+    public void meth50858() { }
+    public void meth50859() { }
+    public void meth50860() { }
+    public void meth50861() { }
+    public void meth50862() { }
+    public void meth50863() { }
+    public void meth50864() { }
+    public void meth50865() { }
+    public void meth50866() { }
+    public void meth50867() { }
+    public void meth50868() { }
+    public void meth50869() { }
+    public void meth50870() { }
+    public void meth50871() { }
+    public void meth50872() { }
+    public void meth50873() { }
+    public void meth50874() { }
+    public void meth50875() { }
+    public void meth50876() { }
+    public void meth50877() { }
+    public void meth50878() { }
+    public void meth50879() { }
+    public void meth50880() { }
+    public void meth50881() { }
+    public void meth50882() { }
+    public void meth50883() { }
+    public void meth50884() { }
+    public void meth50885() { }
+    public void meth50886() { }
+    public void meth50887() { }
+    public void meth50888() { }
+    public void meth50889() { }
+    public void meth50890() { }
+    public void meth50891() { }
+    public void meth50892() { }
+    public void meth50893() { }
+    public void meth50894() { }
+    public void meth50895() { }
+    public void meth50896() { }
+    public void meth50897() { }
+    public void meth50898() { }
+    public void meth50899() { }
+    public void meth50900() { }
+    public void meth50901() { }
+    public void meth50902() { }
+    public void meth50903() { }
+    public void meth50904() { }
+    public void meth50905() { }
+    public void meth50906() { }
+    public void meth50907() { }
+    public void meth50908() { }
+    public void meth50909() { }
+    public void meth50910() { }
+    public void meth50911() { }
+    public void meth50912() { }
+    public void meth50913() { }
+    public void meth50914() { }
+    public void meth50915() { }
+    public void meth50916() { }
+    public void meth50917() { }
+    public void meth50918() { }
+    public void meth50919() { }
+    public void meth50920() { }
+    public void meth50921() { }
+    public void meth50922() { }
+    public void meth50923() { }
+    public void meth50924() { }
+    public void meth50925() { }
+    public void meth50926() { }
+    public void meth50927() { }
+    public void meth50928() { }
+    public void meth50929() { }
+    public void meth50930() { }
+    public void meth50931() { }
+    public void meth50932() { }
+    public void meth50933() { }
+    public void meth50934() { }
+    public void meth50935() { }
+    public void meth50936() { }
+    public void meth50937() { }
+    public void meth50938() { }
+    public void meth50939() { }
+    public void meth50940() { }
+    public void meth50941() { }
+    public void meth50942() { }
+    public void meth50943() { }
+    public void meth50944() { }
+    public void meth50945() { }
+    public void meth50946() { }
+    public void meth50947() { }
+    public void meth50948() { }
+    public void meth50949() { }
+    public void meth50950() { }
+    public void meth50951() { }
+    public void meth50952() { }
+    public void meth50953() { }
+    public void meth50954() { }
+    public void meth50955() { }
+    public void meth50956() { }
+    public void meth50957() { }
+    public void meth50958() { }
+    public void meth50959() { }
+    public void meth50960() { }
+    public void meth50961() { }
+    public void meth50962() { }
+    public void meth50963() { }
+    public void meth50964() { }
+    public void meth50965() { }
+    public void meth50966() { }
+    public void meth50967() { }
+    public void meth50968() { }
+    public void meth50969() { }
+    public void meth50970() { }
+    public void meth50971() { }
+    public void meth50972() { }
+    public void meth50973() { }
+    public void meth50974() { }
+    public void meth50975() { }
+    public void meth50976() { }
+    public void meth50977() { }
+    public void meth50978() { }
+    public void meth50979() { }
+    public void meth50980() { }
+    public void meth50981() { }
+    public void meth50982() { }
+    public void meth50983() { }
+    public void meth50984() { }
+    public void meth50985() { }
+    public void meth50986() { }
+    public void meth50987() { }
+    public void meth50988() { }
+    public void meth50989() { }
+    public void meth50990() { }
+    public void meth50991() { }
+    public void meth50992() { }
+    public void meth50993() { }
+    public void meth50994() { }
+    public void meth50995() { }
+    public void meth50996() { }
+    public void meth50997() { }
+    public void meth50998() { }
+    public void meth50999() { }
+    public void meth51000() { }
+    public void meth51001() { }
+    public void meth51002() { }
+    public void meth51003() { }
+    public void meth51004() { }
+    public void meth51005() { }
+    public void meth51006() { }
+    public void meth51007() { }
+    public void meth51008() { }
+    public void meth51009() { }
+    public void meth51010() { }
+    public void meth51011() { }
+    public void meth51012() { }
+    public void meth51013() { }
+    public void meth51014() { }
+    public void meth51015() { }
+    public void meth51016() { }
+    public void meth51017() { }
+    public void meth51018() { }
+    public void meth51019() { }
+    public void meth51020() { }
+    public void meth51021() { }
+    public void meth51022() { }
+    public void meth51023() { }
+    public void meth51024() { }
+    public void meth51025() { }
+    public void meth51026() { }
+    public void meth51027() { }
+    public void meth51028() { }
+    public void meth51029() { }
+    public void meth51030() { }
+    public void meth51031() { }
+    public void meth51032() { }
+    public void meth51033() { }
+    public void meth51034() { }
+    public void meth51035() { }
+    public void meth51036() { }
+    public void meth51037() { }
+    public void meth51038() { }
+    public void meth51039() { }
+    public void meth51040() { }
+    public void meth51041() { }
+    public void meth51042() { }
+    public void meth51043() { }
+    public void meth51044() { }
+    public void meth51045() { }
+    public void meth51046() { }
+    public void meth51047() { }
+    public void meth51048() { }
+    public void meth51049() { }
+    public void meth51050() { }
+    public void meth51051() { }
+    public void meth51052() { }
+    public void meth51053() { }
+    public void meth51054() { }
+    public void meth51055() { }
+    public void meth51056() { }
+    public void meth51057() { }
+    public void meth51058() { }
+    public void meth51059() { }
+    public void meth51060() { }
+    public void meth51061() { }
+    public void meth51062() { }
+    public void meth51063() { }
+    public void meth51064() { }
+    public void meth51065() { }
+    public void meth51066() { }
+    public void meth51067() { }
+    public void meth51068() { }
+    public void meth51069() { }
+    public void meth51070() { }
+    public void meth51071() { }
+    public void meth51072() { }
+    public void meth51073() { }
+    public void meth51074() { }
+    public void meth51075() { }
+    public void meth51076() { }
+    public void meth51077() { }
+    public void meth51078() { }
+    public void meth51079() { }
+    public void meth51080() { }
+    public void meth51081() { }
+    public void meth51082() { }
+    public void meth51083() { }
+    public void meth51084() { }
+    public void meth51085() { }
+    public void meth51086() { }
+    public void meth51087() { }
+    public void meth51088() { }
+    public void meth51089() { }
+    public void meth51090() { }
+    public void meth51091() { }
+    public void meth51092() { }
+    public void meth51093() { }
+    public void meth51094() { }
+    public void meth51095() { }
+    public void meth51096() { }
+    public void meth51097() { }
+    public void meth51098() { }
+    public void meth51099() { }
+    public void meth51100() { }
+    public void meth51101() { }
+    public void meth51102() { }
+    public void meth51103() { }
+    public void meth51104() { }
+    public void meth51105() { }
+    public void meth51106() { }
+    public void meth51107() { }
+    public void meth51108() { }
+    public void meth51109() { }
+    public void meth51110() { }
+    public void meth51111() { }
+    public void meth51112() { }
+    public void meth51113() { }
+    public void meth51114() { }
+    public void meth51115() { }
+    public void meth51116() { }
+    public void meth51117() { }
+    public void meth51118() { }
+    public void meth51119() { }
+    public void meth51120() { }
+    public void meth51121() { }
+    public void meth51122() { }
+    public void meth51123() { }
+    public void meth51124() { }
+    public void meth51125() { }
+    public void meth51126() { }
+    public void meth51127() { }
+    public void meth51128() { }
+    public void meth51129() { }
+    public void meth51130() { }
+    public void meth51131() { }
+    public void meth51132() { }
+    public void meth51133() { }
+    public void meth51134() { }
+    public void meth51135() { }
+    public void meth51136() { }
+    public void meth51137() { }
+    public void meth51138() { }
+    public void meth51139() { }
+    public void meth51140() { }
+    public void meth51141() { }
+    public void meth51142() { }
+    public void meth51143() { }
+    public void meth51144() { }
+    public void meth51145() { }
+    public void meth51146() { }
+    public void meth51147() { }
+    public void meth51148() { }
+    public void meth51149() { }
+    public void meth51150() { }
+    public void meth51151() { }
+    public void meth51152() { }
+    public void meth51153() { }
+    public void meth51154() { }
+    public void meth51155() { }
+    public void meth51156() { }
+    public void meth51157() { }
+    public void meth51158() { }
+    public void meth51159() { }
+    public void meth51160() { }
+    public void meth51161() { }
+    public void meth51162() { }
+    public void meth51163() { }
+    public void meth51164() { }
+    public void meth51165() { }
+    public void meth51166() { }
+    public void meth51167() { }
+    public void meth51168() { }
+    public void meth51169() { }
+    public void meth51170() { }
+    public void meth51171() { }
+    public void meth51172() { }
+    public void meth51173() { }
+    public void meth51174() { }
+    public void meth51175() { }
+    public void meth51176() { }
+    public void meth51177() { }
+    public void meth51178() { }
+    public void meth51179() { }
+    public void meth51180() { }
+    public void meth51181() { }
+    public void meth51182() { }
+    public void meth51183() { }
+    public void meth51184() { }
+    public void meth51185() { }
+    public void meth51186() { }
+    public void meth51187() { }
+    public void meth51188() { }
+    public void meth51189() { }
+    public void meth51190() { }
+    public void meth51191() { }
+    public void meth51192() { }
+    public void meth51193() { }
+    public void meth51194() { }
+    public void meth51195() { }
+    public void meth51196() { }
+    public void meth51197() { }
+    public void meth51198() { }
+    public void meth51199() { }
+    public void meth51200() { }
+    public void meth51201() { }
+    public void meth51202() { }
+    public void meth51203() { }
+    public void meth51204() { }
+    public void meth51205() { }
+    public void meth51206() { }
+    public void meth51207() { }
+    public void meth51208() { }
+    public void meth51209() { }
+    public void meth51210() { }
+    public void meth51211() { }
+    public void meth51212() { }
+    public void meth51213() { }
+    public void meth51214() { }
+    public void meth51215() { }
+    public void meth51216() { }
+    public void meth51217() { }
+    public void meth51218() { }
+    public void meth51219() { }
+    public void meth51220() { }
+    public void meth51221() { }
+    public void meth51222() { }
+    public void meth51223() { }
+    public void meth51224() { }
+    public void meth51225() { }
+    public void meth51226() { }
+    public void meth51227() { }
+    public void meth51228() { }
+    public void meth51229() { }
+    public void meth51230() { }
+    public void meth51231() { }
+    public void meth51232() { }
+    public void meth51233() { }
+    public void meth51234() { }
+    public void meth51235() { }
+    public void meth51236() { }
+    public void meth51237() { }
+    public void meth51238() { }
+    public void meth51239() { }
+    public void meth51240() { }
+    public void meth51241() { }
+    public void meth51242() { }
+    public void meth51243() { }
+    public void meth51244() { }
+    public void meth51245() { }
+    public void meth51246() { }
+    public void meth51247() { }
+    public void meth51248() { }
+    public void meth51249() { }
+    public void meth51250() { }
+    public void meth51251() { }
+    public void meth51252() { }
+    public void meth51253() { }
+    public void meth51254() { }
+    public void meth51255() { }
+    public void meth51256() { }
+    public void meth51257() { }
+    public void meth51258() { }
+    public void meth51259() { }
+    public void meth51260() { }
+    public void meth51261() { }
+    public void meth51262() { }
+    public void meth51263() { }
+    public void meth51264() { }
+    public void meth51265() { }
+    public void meth51266() { }
+    public void meth51267() { }
+    public void meth51268() { }
+    public void meth51269() { }
+    public void meth51270() { }
+    public void meth51271() { }
+    public void meth51272() { }
+    public void meth51273() { }
+    public void meth51274() { }
+    public void meth51275() { }
+    public void meth51276() { }
+    public void meth51277() { }
+    public void meth51278() { }
+    public void meth51279() { }
+    public void meth51280() { }
+    public void meth51281() { }
+    public void meth51282() { }
+    public void meth51283() { }
+    public void meth51284() { }
+    public void meth51285() { }
+    public void meth51286() { }
+    public void meth51287() { }
+    public void meth51288() { }
+    public void meth51289() { }
+    public void meth51290() { }
+    public void meth51291() { }
+    public void meth51292() { }
+    public void meth51293() { }
+    public void meth51294() { }
+    public void meth51295() { }
+    public void meth51296() { }
+    public void meth51297() { }
+    public void meth51298() { }
+    public void meth51299() { }
+    public void meth51300() { }
+    public void meth51301() { }
+    public void meth51302() { }
+    public void meth51303() { }
+    public void meth51304() { }
+    public void meth51305() { }
+    public void meth51306() { }
+    public void meth51307() { }
+    public void meth51308() { }
+    public void meth51309() { }
+    public void meth51310() { }
+    public void meth51311() { }
+    public void meth51312() { }
+    public void meth51313() { }
+    public void meth51314() { }
+    public void meth51315() { }
+    public void meth51316() { }
+    public void meth51317() { }
+    public void meth51318() { }
+    public void meth51319() { }
+    public void meth51320() { }
+    public void meth51321() { }
+    public void meth51322() { }
+    public void meth51323() { }
+    public void meth51324() { }
+    public void meth51325() { }
+    public void meth51326() { }
+    public void meth51327() { }
+    public void meth51328() { }
+    public void meth51329() { }
+    public void meth51330() { }
+    public void meth51331() { }
+    public void meth51332() { }
+    public void meth51333() { }
+    public void meth51334() { }
+    public void meth51335() { }
+    public void meth51336() { }
+    public void meth51337() { }
+    public void meth51338() { }
+    public void meth51339() { }
+    public void meth51340() { }
+    public void meth51341() { }
+    public void meth51342() { }
+    public void meth51343() { }
+    public void meth51344() { }
+    public void meth51345() { }
+    public void meth51346() { }
+    public void meth51347() { }
+    public void meth51348() { }
+    public void meth51349() { }
+    public void meth51350() { }
+    public void meth51351() { }
+    public void meth51352() { }
+    public void meth51353() { }
+    public void meth51354() { }
+    public void meth51355() { }
+    public void meth51356() { }
+    public void meth51357() { }
+    public void meth51358() { }
+    public void meth51359() { }
+    public void meth51360() { }
+    public void meth51361() { }
+    public void meth51362() { }
+    public void meth51363() { }
+    public void meth51364() { }
+    public void meth51365() { }
+    public void meth51366() { }
+    public void meth51367() { }
+    public void meth51368() { }
+    public void meth51369() { }
+    public void meth51370() { }
+    public void meth51371() { }
+    public void meth51372() { }
+    public void meth51373() { }
+    public void meth51374() { }
+    public void meth51375() { }
+    public void meth51376() { }
+    public void meth51377() { }
+    public void meth51378() { }
+    public void meth51379() { }
+    public void meth51380() { }
+    public void meth51381() { }
+    public void meth51382() { }
+    public void meth51383() { }
+    public void meth51384() { }
+    public void meth51385() { }
+    public void meth51386() { }
+    public void meth51387() { }
+    public void meth51388() { }
+    public void meth51389() { }
+    public void meth51390() { }
+    public void meth51391() { }
+    public void meth51392() { }
+    public void meth51393() { }
+    public void meth51394() { }
+    public void meth51395() { }
+    public void meth51396() { }
+    public void meth51397() { }
+    public void meth51398() { }
+    public void meth51399() { }
+    public void meth51400() { }
+    public void meth51401() { }
+    public void meth51402() { }
+    public void meth51403() { }
+    public void meth51404() { }
+    public void meth51405() { }
+    public void meth51406() { }
+    public void meth51407() { }
+    public void meth51408() { }
+    public void meth51409() { }
+    public void meth51410() { }
+    public void meth51411() { }
+    public void meth51412() { }
+    public void meth51413() { }
+    public void meth51414() { }
+    public void meth51415() { }
+    public void meth51416() { }
+    public void meth51417() { }
+    public void meth51418() { }
+    public void meth51419() { }
+    public void meth51420() { }
+    public void meth51421() { }
+    public void meth51422() { }
+    public void meth51423() { }
+    public void meth51424() { }
+    public void meth51425() { }
+    public void meth51426() { }
+    public void meth51427() { }
+    public void meth51428() { }
+    public void meth51429() { }
+    public void meth51430() { }
+    public void meth51431() { }
+    public void meth51432() { }
+    public void meth51433() { }
+    public void meth51434() { }
+    public void meth51435() { }
+    public void meth51436() { }
+    public void meth51437() { }
+    public void meth51438() { }
+    public void meth51439() { }
+    public void meth51440() { }
+    public void meth51441() { }
+    public void meth51442() { }
+    public void meth51443() { }
+    public void meth51444() { }
+    public void meth51445() { }
+    public void meth51446() { }
+    public void meth51447() { }
+    public void meth51448() { }
+    public void meth51449() { }
+    public void meth51450() { }
+    public void meth51451() { }
+    public void meth51452() { }
+    public void meth51453() { }
+    public void meth51454() { }
+    public void meth51455() { }
+    public void meth51456() { }
+    public void meth51457() { }
+    public void meth51458() { }
+    public void meth51459() { }
+    public void meth51460() { }
+    public void meth51461() { }
+    public void meth51462() { }
+    public void meth51463() { }
+    public void meth51464() { }
+    public void meth51465() { }
+    public void meth51466() { }
+    public void meth51467() { }
+    public void meth51468() { }
+    public void meth51469() { }
+    public void meth51470() { }
+    public void meth51471() { }
+    public void meth51472() { }
+    public void meth51473() { }
+    public void meth51474() { }
+    public void meth51475() { }
+    public void meth51476() { }
+    public void meth51477() { }
+    public void meth51478() { }
+    public void meth51479() { }
+    public void meth51480() { }
+    public void meth51481() { }
+    public void meth51482() { }
+    public void meth51483() { }
+    public void meth51484() { }
+    public void meth51485() { }
+    public void meth51486() { }
+    public void meth51487() { }
+    public void meth51488() { }
+    public void meth51489() { }
+    public void meth51490() { }
+    public void meth51491() { }
+    public void meth51492() { }
+    public void meth51493() { }
+    public void meth51494() { }
+    public void meth51495() { }
+    public void meth51496() { }
+    public void meth51497() { }
+    public void meth51498() { }
+    public void meth51499() { }
+    public void meth51500() { }
+    public void meth51501() { }
+    public void meth51502() { }
+    public void meth51503() { }
+    public void meth51504() { }
+    public void meth51505() { }
+    public void meth51506() { }
+    public void meth51507() { }
+    public void meth51508() { }
+    public void meth51509() { }
+    public void meth51510() { }
+    public void meth51511() { }
+    public void meth51512() { }
+    public void meth51513() { }
+    public void meth51514() { }
+    public void meth51515() { }
+    public void meth51516() { }
+    public void meth51517() { }
+    public void meth51518() { }
+    public void meth51519() { }
+    public void meth51520() { }
+    public void meth51521() { }
+    public void meth51522() { }
+    public void meth51523() { }
+    public void meth51524() { }
+    public void meth51525() { }
+    public void meth51526() { }
+    public void meth51527() { }
+    public void meth51528() { }
+    public void meth51529() { }
+    public void meth51530() { }
+    public void meth51531() { }
+    public void meth51532() { }
+    public void meth51533() { }
+    public void meth51534() { }
+    public void meth51535() { }
+    public void meth51536() { }
+    public void meth51537() { }
+    public void meth51538() { }
+    public void meth51539() { }
+    public void meth51540() { }
+    public void meth51541() { }
+    public void meth51542() { }
+    public void meth51543() { }
+    public void meth51544() { }
+    public void meth51545() { }
+    public void meth51546() { }
+    public void meth51547() { }
+    public void meth51548() { }
+    public void meth51549() { }
+    public void meth51550() { }
+    public void meth51551() { }
+    public void meth51552() { }
+    public void meth51553() { }
+    public void meth51554() { }
+    public void meth51555() { }
+    public void meth51556() { }
+    public void meth51557() { }
+    public void meth51558() { }
+    public void meth51559() { }
+    public void meth51560() { }
+    public void meth51561() { }
+    public void meth51562() { }
+    public void meth51563() { }
+    public void meth51564() { }
+    public void meth51565() { }
+    public void meth51566() { }
+    public void meth51567() { }
+    public void meth51568() { }
+    public void meth51569() { }
+    public void meth51570() { }
+    public void meth51571() { }
+    public void meth51572() { }
+    public void meth51573() { }
+    public void meth51574() { }
+    public void meth51575() { }
+    public void meth51576() { }
+    public void meth51577() { }
+    public void meth51578() { }
+    public void meth51579() { }
+    public void meth51580() { }
+    public void meth51581() { }
+    public void meth51582() { }
+    public void meth51583() { }
+    public void meth51584() { }
+    public void meth51585() { }
+    public void meth51586() { }
+    public void meth51587() { }
+    public void meth51588() { }
+    public void meth51589() { }
+    public void meth51590() { }
+    public void meth51591() { }
+    public void meth51592() { }
+    public void meth51593() { }
+    public void meth51594() { }
+    public void meth51595() { }
+    public void meth51596() { }
+    public void meth51597() { }
+    public void meth51598() { }
+    public void meth51599() { }
+    public void meth51600() { }
+    public void meth51601() { }
+    public void meth51602() { }
+    public void meth51603() { }
+    public void meth51604() { }
+    public void meth51605() { }
+    public void meth51606() { }
+    public void meth51607() { }
+    public void meth51608() { }
+    public void meth51609() { }
+    public void meth51610() { }
+    public void meth51611() { }
+    public void meth51612() { }
+    public void meth51613() { }
+    public void meth51614() { }
+    public void meth51615() { }
+    public void meth51616() { }
+    public void meth51617() { }
+    public void meth51618() { }
+    public void meth51619() { }
+    public void meth51620() { }
+    public void meth51621() { }
+    public void meth51622() { }
+    public void meth51623() { }
+    public void meth51624() { }
+    public void meth51625() { }
+    public void meth51626() { }
+    public void meth51627() { }
+    public void meth51628() { }
+    public void meth51629() { }
+    public void meth51630() { }
+    public void meth51631() { }
+    public void meth51632() { }
+    public void meth51633() { }
+    public void meth51634() { }
+    public void meth51635() { }
+    public void meth51636() { }
+    public void meth51637() { }
+    public void meth51638() { }
+    public void meth51639() { }
+    public void meth51640() { }
+    public void meth51641() { }
+    public void meth51642() { }
+    public void meth51643() { }
+    public void meth51644() { }
+    public void meth51645() { }
+    public void meth51646() { }
+    public void meth51647() { }
+    public void meth51648() { }
+    public void meth51649() { }
+    public void meth51650() { }
+    public void meth51651() { }
+    public void meth51652() { }
+    public void meth51653() { }
+    public void meth51654() { }
+    public void meth51655() { }
+    public void meth51656() { }
+    public void meth51657() { }
+    public void meth51658() { }
+    public void meth51659() { }
+    public void meth51660() { }
+    public void meth51661() { }
+    public void meth51662() { }
+    public void meth51663() { }
+    public void meth51664() { }
+    public void meth51665() { }
+    public void meth51666() { }
+    public void meth51667() { }
+    public void meth51668() { }
+    public void meth51669() { }
+    public void meth51670() { }
+    public void meth51671() { }
+    public void meth51672() { }
+    public void meth51673() { }
+    public void meth51674() { }
+    public void meth51675() { }
+    public void meth51676() { }
+    public void meth51677() { }
+    public void meth51678() { }
+    public void meth51679() { }
+    public void meth51680() { }
+    public void meth51681() { }
+    public void meth51682() { }
+    public void meth51683() { }
+    public void meth51684() { }
+    public void meth51685() { }
+    public void meth51686() { }
+    public void meth51687() { }
+    public void meth51688() { }
+    public void meth51689() { }
+    public void meth51690() { }
+    public void meth51691() { }
+    public void meth51692() { }
+    public void meth51693() { }
+    public void meth51694() { }
+    public void meth51695() { }
+    public void meth51696() { }
+    public void meth51697() { }
+    public void meth51698() { }
+    public void meth51699() { }
+    public void meth51700() { }
+    public void meth51701() { }
+    public void meth51702() { }
+    public void meth51703() { }
+    public void meth51704() { }
+    public void meth51705() { }
+    public void meth51706() { }
+    public void meth51707() { }
+    public void meth51708() { }
+    public void meth51709() { }
+    public void meth51710() { }
+    public void meth51711() { }
+    public void meth51712() { }
+    public void meth51713() { }
+    public void meth51714() { }
+    public void meth51715() { }
+    public void meth51716() { }
+    public void meth51717() { }
+    public void meth51718() { }
+    public void meth51719() { }
+    public void meth51720() { }
+    public void meth51721() { }
+    public void meth51722() { }
+    public void meth51723() { }
+    public void meth51724() { }
+    public void meth51725() { }
+    public void meth51726() { }
+    public void meth51727() { }
+    public void meth51728() { }
+    public void meth51729() { }
+    public void meth51730() { }
+    public void meth51731() { }
+    public void meth51732() { }
+    public void meth51733() { }
+    public void meth51734() { }
+    public void meth51735() { }
+    public void meth51736() { }
+    public void meth51737() { }
+    public void meth51738() { }
+    public void meth51739() { }
+    public void meth51740() { }
+    public void meth51741() { }
+    public void meth51742() { }
+    public void meth51743() { }
+    public void meth51744() { }
+    public void meth51745() { }
+    public void meth51746() { }
+    public void meth51747() { }
+    public void meth51748() { }
+    public void meth51749() { }
+    public void meth51750() { }
+    public void meth51751() { }
+    public void meth51752() { }
+    public void meth51753() { }
+    public void meth51754() { }
+    public void meth51755() { }
+    public void meth51756() { }
+    public void meth51757() { }
+    public void meth51758() { }
+    public void meth51759() { }
+    public void meth51760() { }
+    public void meth51761() { }
+    public void meth51762() { }
+    public void meth51763() { }
+    public void meth51764() { }
+    public void meth51765() { }
+    public void meth51766() { }
+    public void meth51767() { }
+    public void meth51768() { }
+    public void meth51769() { }
+    public void meth51770() { }
+    public void meth51771() { }
+    public void meth51772() { }
+    public void meth51773() { }
+    public void meth51774() { }
+    public void meth51775() { }
+    public void meth51776() { }
+    public void meth51777() { }
+    public void meth51778() { }
+    public void meth51779() { }
+    public void meth51780() { }
+    public void meth51781() { }
+    public void meth51782() { }
+    public void meth51783() { }
+    public void meth51784() { }
+    public void meth51785() { }
+    public void meth51786() { }
+    public void meth51787() { }
+    public void meth51788() { }
+    public void meth51789() { }
+    public void meth51790() { }
+    public void meth51791() { }
+    public void meth51792() { }
+    public void meth51793() { }
+    public void meth51794() { }
+    public void meth51795() { }
+    public void meth51796() { }
+    public void meth51797() { }
+    public void meth51798() { }
+    public void meth51799() { }
+    public void meth51800() { }
+    public void meth51801() { }
+    public void meth51802() { }
+    public void meth51803() { }
+    public void meth51804() { }
+    public void meth51805() { }
+    public void meth51806() { }
+    public void meth51807() { }
+    public void meth51808() { }
+    public void meth51809() { }
+    public void meth51810() { }
+    public void meth51811() { }
+    public void meth51812() { }
+    public void meth51813() { }
+    public void meth51814() { }
+    public void meth51815() { }
+    public void meth51816() { }
+    public void meth51817() { }
+    public void meth51818() { }
+    public void meth51819() { }
+    public void meth51820() { }
+    public void meth51821() { }
+    public void meth51822() { }
+    public void meth51823() { }
+    public void meth51824() { }
+    public void meth51825() { }
+    public void meth51826() { }
+    public void meth51827() { }
+    public void meth51828() { }
+    public void meth51829() { }
+    public void meth51830() { }
+    public void meth51831() { }
+    public void meth51832() { }
+    public void meth51833() { }
+    public void meth51834() { }
+    public void meth51835() { }
+    public void meth51836() { }
+    public void meth51837() { }
+    public void meth51838() { }
+    public void meth51839() { }
+    public void meth51840() { }
+    public void meth51841() { }
+    public void meth51842() { }
+    public void meth51843() { }
+    public void meth51844() { }
+    public void meth51845() { }
+    public void meth51846() { }
+    public void meth51847() { }
+    public void meth51848() { }
+    public void meth51849() { }
+    public void meth51850() { }
+    public void meth51851() { }
+    public void meth51852() { }
+    public void meth51853() { }
+    public void meth51854() { }
+    public void meth51855() { }
+    public void meth51856() { }
+    public void meth51857() { }
+    public void meth51858() { }
+    public void meth51859() { }
+    public void meth51860() { }
+    public void meth51861() { }
+    public void meth51862() { }
+    public void meth51863() { }
+    public void meth51864() { }
+    public void meth51865() { }
+    public void meth51866() { }
+    public void meth51867() { }
+    public void meth51868() { }
+    public void meth51869() { }
+    public void meth51870() { }
+    public void meth51871() { }
+    public void meth51872() { }
+    public void meth51873() { }
+    public void meth51874() { }
+    public void meth51875() { }
+    public void meth51876() { }
+    public void meth51877() { }
+    public void meth51878() { }
+    public void meth51879() { }
+    public void meth51880() { }
+    public void meth51881() { }
+    public void meth51882() { }
+    public void meth51883() { }
+    public void meth51884() { }
+    public void meth51885() { }
+    public void meth51886() { }
+    public void meth51887() { }
+    public void meth51888() { }
+    public void meth51889() { }
+    public void meth51890() { }
+    public void meth51891() { }
+    public void meth51892() { }
+    public void meth51893() { }
+    public void meth51894() { }
+    public void meth51895() { }
+    public void meth51896() { }
+    public void meth51897() { }
+    public void meth51898() { }
+    public void meth51899() { }
+    public void meth51900() { }
+    public void meth51901() { }
+    public void meth51902() { }
+    public void meth51903() { }
+    public void meth51904() { }
+    public void meth51905() { }
+    public void meth51906() { }
+    public void meth51907() { }
+    public void meth51908() { }
+    public void meth51909() { }
+    public void meth51910() { }
+    public void meth51911() { }
+    public void meth51912() { }
+    public void meth51913() { }
+    public void meth51914() { }
+    public void meth51915() { }
+    public void meth51916() { }
+    public void meth51917() { }
+    public void meth51918() { }
+    public void meth51919() { }
+    public void meth51920() { }
+    public void meth51921() { }
+    public void meth51922() { }
+    public void meth51923() { }
+    public void meth51924() { }
+    public void meth51925() { }
+    public void meth51926() { }
+    public void meth51927() { }
+    public void meth51928() { }
+    public void meth51929() { }
+    public void meth51930() { }
+    public void meth51931() { }
+    public void meth51932() { }
+    public void meth51933() { }
+    public void meth51934() { }
+    public void meth51935() { }
+    public void meth51936() { }
+    public void meth51937() { }
+    public void meth51938() { }
+    public void meth51939() { }
+    public void meth51940() { }
+    public void meth51941() { }
+    public void meth51942() { }
+    public void meth51943() { }
+    public void meth51944() { }
+    public void meth51945() { }
+    public void meth51946() { }
+    public void meth51947() { }
+    public void meth51948() { }
+    public void meth51949() { }
+    public void meth51950() { }
+    public void meth51951() { }
+    public void meth51952() { }
+    public void meth51953() { }
+    public void meth51954() { }
+    public void meth51955() { }
+    public void meth51956() { }
+    public void meth51957() { }
+    public void meth51958() { }
+    public void meth51959() { }
+    public void meth51960() { }
+    public void meth51961() { }
+    public void meth51962() { }
+    public void meth51963() { }
+    public void meth51964() { }
+    public void meth51965() { }
+    public void meth51966() { }
+    public void meth51967() { }
+    public void meth51968() { }
+    public void meth51969() { }
+    public void meth51970() { }
+    public void meth51971() { }
+    public void meth51972() { }
+    public void meth51973() { }
+    public void meth51974() { }
+    public void meth51975() { }
+    public void meth51976() { }
+    public void meth51977() { }
+    public void meth51978() { }
+    public void meth51979() { }
+    public void meth51980() { }
+    public void meth51981() { }
+    public void meth51982() { }
+    public void meth51983() { }
+    public void meth51984() { }
+    public void meth51985() { }
+    public void meth51986() { }
+    public void meth51987() { }
+    public void meth51988() { }
+    public void meth51989() { }
+    public void meth51990() { }
+    public void meth51991() { }
+    public void meth51992() { }
+    public void meth51993() { }
+    public void meth51994() { }
+    public void meth51995() { }
+    public void meth51996() { }
+    public void meth51997() { }
+    public void meth51998() { }
+    public void meth51999() { }
+    public void meth52000() { }
+    public void meth52001() { }
+    public void meth52002() { }
+    public void meth52003() { }
+    public void meth52004() { }
+    public void meth52005() { }
+    public void meth52006() { }
+    public void meth52007() { }
+    public void meth52008() { }
+    public void meth52009() { }
+    public void meth52010() { }
+    public void meth52011() { }
+    public void meth52012() { }
+    public void meth52013() { }
+    public void meth52014() { }
+    public void meth52015() { }
+    public void meth52016() { }
+    public void meth52017() { }
+    public void meth52018() { }
+    public void meth52019() { }
+    public void meth52020() { }
+    public void meth52021() { }
+    public void meth52022() { }
+    public void meth52023() { }
+    public void meth52024() { }
+    public void meth52025() { }
+    public void meth52026() { }
+    public void meth52027() { }
+    public void meth52028() { }
+    public void meth52029() { }
+    public void meth52030() { }
+    public void meth52031() { }
+    public void meth52032() { }
+    public void meth52033() { }
+    public void meth52034() { }
+    public void meth52035() { }
+    public void meth52036() { }
+    public void meth52037() { }
+    public void meth52038() { }
+    public void meth52039() { }
+    public void meth52040() { }
+    public void meth52041() { }
+    public void meth52042() { }
+    public void meth52043() { }
+    public void meth52044() { }
+    public void meth52045() { }
+    public void meth52046() { }
+    public void meth52047() { }
+    public void meth52048() { }
+    public void meth52049() { }
+    public void meth52050() { }
+    public void meth52051() { }
+    public void meth52052() { }
+    public void meth52053() { }
+    public void meth52054() { }
+    public void meth52055() { }
+    public void meth52056() { }
+    public void meth52057() { }
+    public void meth52058() { }
+    public void meth52059() { }
+    public void meth52060() { }
+    public void meth52061() { }
+    public void meth52062() { }
+    public void meth52063() { }
+    public void meth52064() { }
+    public void meth52065() { }
+    public void meth52066() { }
+    public void meth52067() { }
+    public void meth52068() { }
+    public void meth52069() { }
+    public void meth52070() { }
+    public void meth52071() { }
+    public void meth52072() { }
+    public void meth52073() { }
+    public void meth52074() { }
+    public void meth52075() { }
+    public void meth52076() { }
+    public void meth52077() { }
+    public void meth52078() { }
+    public void meth52079() { }
+    public void meth52080() { }
+    public void meth52081() { }
+    public void meth52082() { }
+    public void meth52083() { }
+    public void meth52084() { }
+    public void meth52085() { }
+    public void meth52086() { }
+    public void meth52087() { }
+    public void meth52088() { }
+    public void meth52089() { }
+    public void meth52090() { }
+    public void meth52091() { }
+    public void meth52092() { }
+    public void meth52093() { }
+    public void meth52094() { }
+    public void meth52095() { }
+    public void meth52096() { }
+    public void meth52097() { }
+    public void meth52098() { }
+    public void meth52099() { }
+    public void meth52100() { }
+    public void meth52101() { }
+    public void meth52102() { }
+    public void meth52103() { }
+    public void meth52104() { }
+    public void meth52105() { }
+    public void meth52106() { }
+    public void meth52107() { }
+    public void meth52108() { }
+    public void meth52109() { }
+    public void meth52110() { }
+    public void meth52111() { }
+    public void meth52112() { }
+    public void meth52113() { }
+    public void meth52114() { }
+    public void meth52115() { }
+    public void meth52116() { }
+    public void meth52117() { }
+    public void meth52118() { }
+    public void meth52119() { }
+    public void meth52120() { }
+    public void meth52121() { }
+    public void meth52122() { }
+    public void meth52123() { }
+    public void meth52124() { }
+    public void meth52125() { }
+    public void meth52126() { }
+    public void meth52127() { }
+    public void meth52128() { }
+    public void meth52129() { }
+    public void meth52130() { }
+    public void meth52131() { }
+    public void meth52132() { }
+    public void meth52133() { }
+    public void meth52134() { }
+    public void meth52135() { }
+    public void meth52136() { }
+    public void meth52137() { }
+    public void meth52138() { }
+    public void meth52139() { }
+    public void meth52140() { }
+    public void meth52141() { }
+    public void meth52142() { }
+    public void meth52143() { }
+    public void meth52144() { }
+    public void meth52145() { }
+    public void meth52146() { }
+    public void meth52147() { }
+    public void meth52148() { }
+    public void meth52149() { }
+    public void meth52150() { }
+    public void meth52151() { }
+    public void meth52152() { }
+    public void meth52153() { }
+    public void meth52154() { }
+    public void meth52155() { }
+    public void meth52156() { }
+    public void meth52157() { }
+    public void meth52158() { }
+    public void meth52159() { }
+    public void meth52160() { }
+    public void meth52161() { }
+    public void meth52162() { }
+    public void meth52163() { }
+    public void meth52164() { }
+    public void meth52165() { }
+    public void meth52166() { }
+    public void meth52167() { }
+    public void meth52168() { }
+    public void meth52169() { }
+    public void meth52170() { }
+    public void meth52171() { }
+    public void meth52172() { }
+    public void meth52173() { }
+    public void meth52174() { }
+    public void meth52175() { }
+    public void meth52176() { }
+    public void meth52177() { }
+    public void meth52178() { }
+    public void meth52179() { }
+    public void meth52180() { }
+    public void meth52181() { }
+    public void meth52182() { }
+    public void meth52183() { }
+    public void meth52184() { }
+    public void meth52185() { }
+    public void meth52186() { }
+    public void meth52187() { }
+    public void meth52188() { }
+    public void meth52189() { }
+    public void meth52190() { }
+    public void meth52191() { }
+    public void meth52192() { }
+    public void meth52193() { }
+    public void meth52194() { }
+    public void meth52195() { }
+    public void meth52196() { }
+    public void meth52197() { }
+    public void meth52198() { }
+    public void meth52199() { }
+    public void meth52200() { }
+    public void meth52201() { }
+    public void meth52202() { }
+    public void meth52203() { }
+    public void meth52204() { }
+    public void meth52205() { }
+    public void meth52206() { }
+    public void meth52207() { }
+    public void meth52208() { }
+    public void meth52209() { }
+    public void meth52210() { }
+    public void meth52211() { }
+    public void meth52212() { }
+    public void meth52213() { }
+    public void meth52214() { }
+    public void meth52215() { }
+    public void meth52216() { }
+    public void meth52217() { }
+    public void meth52218() { }
+    public void meth52219() { }
+    public void meth52220() { }
+    public void meth52221() { }
+    public void meth52222() { }
+    public void meth52223() { }
+    public void meth52224() { }
+    public void meth52225() { }
+    public void meth52226() { }
+    public void meth52227() { }
+    public void meth52228() { }
+    public void meth52229() { }
+    public void meth52230() { }
+    public void meth52231() { }
+    public void meth52232() { }
+    public void meth52233() { }
+    public void meth52234() { }
+    public void meth52235() { }
+    public void meth52236() { }
+    public void meth52237() { }
+    public void meth52238() { }
+    public void meth52239() { }
+    public void meth52240() { }
+    public void meth52241() { }
+    public void meth52242() { }
+    public void meth52243() { }
+    public void meth52244() { }
+    public void meth52245() { }
+    public void meth52246() { }
+    public void meth52247() { }
+    public void meth52248() { }
+    public void meth52249() { }
+    public void meth52250() { }
+    public void meth52251() { }
+    public void meth52252() { }
+    public void meth52253() { }
+    public void meth52254() { }
+    public void meth52255() { }
+    public void meth52256() { }
+    public void meth52257() { }
+    public void meth52258() { }
+    public void meth52259() { }
+    public void meth52260() { }
+    public void meth52261() { }
+    public void meth52262() { }
+    public void meth52263() { }
+    public void meth52264() { }
+    public void meth52265() { }
+    public void meth52266() { }
+    public void meth52267() { }
+    public void meth52268() { }
+    public void meth52269() { }
+    public void meth52270() { }
+    public void meth52271() { }
+    public void meth52272() { }
+    public void meth52273() { }
+    public void meth52274() { }
+    public void meth52275() { }
+    public void meth52276() { }
+    public void meth52277() { }
+    public void meth52278() { }
+    public void meth52279() { }
+    public void meth52280() { }
+    public void meth52281() { }
+    public void meth52282() { }
+    public void meth52283() { }
+    public void meth52284() { }
+    public void meth52285() { }
+    public void meth52286() { }
+    public void meth52287() { }
+    public void meth52288() { }
+    public void meth52289() { }
+    public void meth52290() { }
+    public void meth52291() { }
+    public void meth52292() { }
+    public void meth52293() { }
+    public void meth52294() { }
+    public void meth52295() { }
+    public void meth52296() { }
+    public void meth52297() { }
+    public void meth52298() { }
+    public void meth52299() { }
+    public void meth52300() { }
+    public void meth52301() { }
+    public void meth52302() { }
+    public void meth52303() { }
+    public void meth52304() { }
+    public void meth52305() { }
+    public void meth52306() { }
+    public void meth52307() { }
+    public void meth52308() { }
+    public void meth52309() { }
+    public void meth52310() { }
+    public void meth52311() { }
+    public void meth52312() { }
+    public void meth52313() { }
+    public void meth52314() { }
+    public void meth52315() { }
+    public void meth52316() { }
+    public void meth52317() { }
+    public void meth52318() { }
+    public void meth52319() { }
+    public void meth52320() { }
+    public void meth52321() { }
+    public void meth52322() { }
+    public void meth52323() { }
+    public void meth52324() { }
+    public void meth52325() { }
+    public void meth52326() { }
+    public void meth52327() { }
+    public void meth52328() { }
+    public void meth52329() { }
+    public void meth52330() { }
+    public void meth52331() { }
+    public void meth52332() { }
+    public void meth52333() { }
+    public void meth52334() { }
+    public void meth52335() { }
+    public void meth52336() { }
+    public void meth52337() { }
+    public void meth52338() { }
+    public void meth52339() { }
+    public void meth52340() { }
+    public void meth52341() { }
+    public void meth52342() { }
+    public void meth52343() { }
+    public void meth52344() { }
+    public void meth52345() { }
+    public void meth52346() { }
+    public void meth52347() { }
+    public void meth52348() { }
+    public void meth52349() { }
+    public void meth52350() { }
+    public void meth52351() { }
+    public void meth52352() { }
+    public void meth52353() { }
+    public void meth52354() { }
+    public void meth52355() { }
+    public void meth52356() { }
+    public void meth52357() { }
+    public void meth52358() { }
+    public void meth52359() { }
+    public void meth52360() { }
+    public void meth52361() { }
+    public void meth52362() { }
+    public void meth52363() { }
+    public void meth52364() { }
+    public void meth52365() { }
+    public void meth52366() { }
+    public void meth52367() { }
+    public void meth52368() { }
+    public void meth52369() { }
+    public void meth52370() { }
+    public void meth52371() { }
+    public void meth52372() { }
+    public void meth52373() { }
+    public void meth52374() { }
+    public void meth52375() { }
+    public void meth52376() { }
+    public void meth52377() { }
+    public void meth52378() { }
+    public void meth52379() { }
+    public void meth52380() { }
+    public void meth52381() { }
+    public void meth52382() { }
+    public void meth52383() { }
+    public void meth52384() { }
+    public void meth52385() { }
+    public void meth52386() { }
+    public void meth52387() { }
+    public void meth52388() { }
+    public void meth52389() { }
+    public void meth52390() { }
+    public void meth52391() { }
+    public void meth52392() { }
+    public void meth52393() { }
+    public void meth52394() { }
+    public void meth52395() { }
+    public void meth52396() { }
+    public void meth52397() { }
+    public void meth52398() { }
+    public void meth52399() { }
+    public void meth52400() { }
+    public void meth52401() { }
+    public void meth52402() { }
+    public void meth52403() { }
+    public void meth52404() { }
+    public void meth52405() { }
+    public void meth52406() { }
+    public void meth52407() { }
+    public void meth52408() { }
+    public void meth52409() { }
+    public void meth52410() { }
+    public void meth52411() { }
+    public void meth52412() { }
+    public void meth52413() { }
+    public void meth52414() { }
+    public void meth52415() { }
+    public void meth52416() { }
+    public void meth52417() { }
+    public void meth52418() { }
+    public void meth52419() { }
+    public void meth52420() { }
+    public void meth52421() { }
+    public void meth52422() { }
+    public void meth52423() { }
+    public void meth52424() { }
+    public void meth52425() { }
+    public void meth52426() { }
+    public void meth52427() { }
+    public void meth52428() { }
+    public void meth52429() { }
+    public void meth52430() { }
+    public void meth52431() { }
+    public void meth52432() { }
+    public void meth52433() { }
+    public void meth52434() { }
+    public void meth52435() { }
+    public void meth52436() { }
+    public void meth52437() { }
+    public void meth52438() { }
+    public void meth52439() { }
+    public void meth52440() { }
+    public void meth52441() { }
+    public void meth52442() { }
+    public void meth52443() { }
+    public void meth52444() { }
+    public void meth52445() { }
+    public void meth52446() { }
+    public void meth52447() { }
+    public void meth52448() { }
+    public void meth52449() { }
+    public void meth52450() { }
+    public void meth52451() { }
+    public void meth52452() { }
+    public void meth52453() { }
+    public void meth52454() { }
+    public void meth52455() { }
+    public void meth52456() { }
+    public void meth52457() { }
+    public void meth52458() { }
+    public void meth52459() { }
+    public void meth52460() { }
+    public void meth52461() { }
+    public void meth52462() { }
+    public void meth52463() { }
+    public void meth52464() { }
+    public void meth52465() { }
+    public void meth52466() { }
+    public void meth52467() { }
+    public void meth52468() { }
+    public void meth52469() { }
+    public void meth52470() { }
+    public void meth52471() { }
+    public void meth52472() { }
+    public void meth52473() { }
+    public void meth52474() { }
+    public void meth52475() { }
+    public void meth52476() { }
+    public void meth52477() { }
+    public void meth52478() { }
+    public void meth52479() { }
+    public void meth52480() { }
+    public void meth52481() { }
+    public void meth52482() { }
+    public void meth52483() { }
+    public void meth52484() { }
+    public void meth52485() { }
+    public void meth52486() { }
+    public void meth52487() { }
+    public void meth52488() { }
+    public void meth52489() { }
+    public void meth52490() { }
+    public void meth52491() { }
+    public void meth52492() { }
+    public void meth52493() { }
+    public void meth52494() { }
+    public void meth52495() { }
+    public void meth52496() { }
+    public void meth52497() { }
+    public void meth52498() { }
+    public void meth52499() { }
+    public void meth52500() { }
+    public void meth52501() { }
+    public void meth52502() { }
+    public void meth52503() { }
+    public void meth52504() { }
+    public void meth52505() { }
+    public void meth52506() { }
+    public void meth52507() { }
+    public void meth52508() { }
+    public void meth52509() { }
+    public void meth52510() { }
+    public void meth52511() { }
+    public void meth52512() { }
+    public void meth52513() { }
+    public void meth52514() { }
+    public void meth52515() { }
+    public void meth52516() { }
+    public void meth52517() { }
+    public void meth52518() { }
+    public void meth52519() { }
+    public void meth52520() { }
+    public void meth52521() { }
+    public void meth52522() { }
+    public void meth52523() { }
+    public void meth52524() { }
+    public void meth52525() { }
+    public void meth52526() { }
+    public void meth52527() { }
+    public void meth52528() { }
+    public void meth52529() { }
+    public void meth52530() { }
+    public void meth52531() { }
+    public void meth52532() { }
+    public void meth52533() { }
+    public void meth52534() { }
+    public void meth52535() { }
+    public void meth52536() { }
+    public void meth52537() { }
+    public void meth52538() { }
+    public void meth52539() { }
+    public void meth52540() { }
+    public void meth52541() { }
+    public void meth52542() { }
+    public void meth52543() { }
+    public void meth52544() { }
+    public void meth52545() { }
+    public void meth52546() { }
+    public void meth52547() { }
+    public void meth52548() { }
+    public void meth52549() { }
+    public void meth52550() { }
+    public void meth52551() { }
+    public void meth52552() { }
+    public void meth52553() { }
+    public void meth52554() { }
+    public void meth52555() { }
+    public void meth52556() { }
+    public void meth52557() { }
+    public void meth52558() { }
+    public void meth52559() { }
+    public void meth52560() { }
+    public void meth52561() { }
+    public void meth52562() { }
+    public void meth52563() { }
+    public void meth52564() { }
+    public void meth52565() { }
+    public void meth52566() { }
+    public void meth52567() { }
+    public void meth52568() { }
+    public void meth52569() { }
+    public void meth52570() { }
+    public void meth52571() { }
+    public void meth52572() { }
+    public void meth52573() { }
+    public void meth52574() { }
+    public void meth52575() { }
+    public void meth52576() { }
+    public void meth52577() { }
+    public void meth52578() { }
+    public void meth52579() { }
+    public void meth52580() { }
+    public void meth52581() { }
+    public void meth52582() { }
+    public void meth52583() { }
+    public void meth52584() { }
+    public void meth52585() { }
+    public void meth52586() { }
+    public void meth52587() { }
+    public void meth52588() { }
+    public void meth52589() { }
+    public void meth52590() { }
+    public void meth52591() { }
+    public void meth52592() { }
+    public void meth52593() { }
+    public void meth52594() { }
+    public void meth52595() { }
+    public void meth52596() { }
+    public void meth52597() { }
+    public void meth52598() { }
+    public void meth52599() { }
+    public void meth52600() { }
+    public void meth52601() { }
+    public void meth52602() { }
+    public void meth52603() { }
+    public void meth52604() { }
+    public void meth52605() { }
+    public void meth52606() { }
+    public void meth52607() { }
+    public void meth52608() { }
+    public void meth52609() { }
+    public void meth52610() { }
+    public void meth52611() { }
+    public void meth52612() { }
+    public void meth52613() { }
+    public void meth52614() { }
+    public void meth52615() { }
+    public void meth52616() { }
+    public void meth52617() { }
+    public void meth52618() { }
+    public void meth52619() { }
+    public void meth52620() { }
+    public void meth52621() { }
+    public void meth52622() { }
+    public void meth52623() { }
+    public void meth52624() { }
+    public void meth52625() { }
+    public void meth52626() { }
+    public void meth52627() { }
+    public void meth52628() { }
+    public void meth52629() { }
+    public void meth52630() { }
+    public void meth52631() { }
+    public void meth52632() { }
+    public void meth52633() { }
+    public void meth52634() { }
+    public void meth52635() { }
+    public void meth52636() { }
+    public void meth52637() { }
+    public void meth52638() { }
+    public void meth52639() { }
+    public void meth52640() { }
+    public void meth52641() { }
+    public void meth52642() { }
+    public void meth52643() { }
+    public void meth52644() { }
+    public void meth52645() { }
+    public void meth52646() { }
+    public void meth52647() { }
+    public void meth52648() { }
+    public void meth52649() { }
+    public void meth52650() { }
+    public void meth52651() { }
+    public void meth52652() { }
+    public void meth52653() { }
+    public void meth52654() { }
+    public void meth52655() { }
+    public void meth52656() { }
+    public void meth52657() { }
+    public void meth52658() { }
+    public void meth52659() { }
+    public void meth52660() { }
+    public void meth52661() { }
+    public void meth52662() { }
+    public void meth52663() { }
+    public void meth52664() { }
+    public void meth52665() { }
+    public void meth52666() { }
+    public void meth52667() { }
+    public void meth52668() { }
+    public void meth52669() { }
+    public void meth52670() { }
+    public void meth52671() { }
+    public void meth52672() { }
+    public void meth52673() { }
+    public void meth52674() { }
+    public void meth52675() { }
+    public void meth52676() { }
+    public void meth52677() { }
+    public void meth52678() { }
+    public void meth52679() { }
+    public void meth52680() { }
+    public void meth52681() { }
+    public void meth52682() { }
+    public void meth52683() { }
+    public void meth52684() { }
+    public void meth52685() { }
+    public void meth52686() { }
+    public void meth52687() { }
+    public void meth52688() { }
+    public void meth52689() { }
+    public void meth52690() { }
+    public void meth52691() { }
+    public void meth52692() { }
+    public void meth52693() { }
+    public void meth52694() { }
+    public void meth52695() { }
+    public void meth52696() { }
+    public void meth52697() { }
+    public void meth52698() { }
+    public void meth52699() { }
+    public void meth52700() { }
+    public void meth52701() { }
+    public void meth52702() { }
+    public void meth52703() { }
+    public void meth52704() { }
+    public void meth52705() { }
+    public void meth52706() { }
+    public void meth52707() { }
+    public void meth52708() { }
+    public void meth52709() { }
+    public void meth52710() { }
+    public void meth52711() { }
+    public void meth52712() { }
+    public void meth52713() { }
+    public void meth52714() { }
+    public void meth52715() { }
+    public void meth52716() { }
+    public void meth52717() { }
+    public void meth52718() { }
+    public void meth52719() { }
+    public void meth52720() { }
+    public void meth52721() { }
+    public void meth52722() { }
+    public void meth52723() { }
+    public void meth52724() { }
+    public void meth52725() { }
+    public void meth52726() { }
+    public void meth52727() { }
+    public void meth52728() { }
+    public void meth52729() { }
+    public void meth52730() { }
+    public void meth52731() { }
+    public void meth52732() { }
+    public void meth52733() { }
+    public void meth52734() { }
+    public void meth52735() { }
+    public void meth52736() { }
+    public void meth52737() { }
+    public void meth52738() { }
+    public void meth52739() { }
+    public void meth52740() { }
+    public void meth52741() { }
+    public void meth52742() { }
+    public void meth52743() { }
+    public void meth52744() { }
+    public void meth52745() { }
+    public void meth52746() { }
+    public void meth52747() { }
+    public void meth52748() { }
+    public void meth52749() { }
+    public void meth52750() { }
+    public void meth52751() { }
+    public void meth52752() { }
+    public void meth52753() { }
+    public void meth52754() { }
+    public void meth52755() { }
+    public void meth52756() { }
+    public void meth52757() { }
+    public void meth52758() { }
+    public void meth52759() { }
+    public void meth52760() { }
+    public void meth52761() { }
+    public void meth52762() { }
+    public void meth52763() { }
+    public void meth52764() { }
+    public void meth52765() { }
+    public void meth52766() { }
+    public void meth52767() { }
+    public void meth52768() { }
+    public void meth52769() { }
+    public void meth52770() { }
+    public void meth52771() { }
+    public void meth52772() { }
+    public void meth52773() { }
+    public void meth52774() { }
+    public void meth52775() { }
+    public void meth52776() { }
+    public void meth52777() { }
+    public void meth52778() { }
+    public void meth52779() { }
+    public void meth52780() { }
+    public void meth52781() { }
+    public void meth52782() { }
+    public void meth52783() { }
+    public void meth52784() { }
+    public void meth52785() { }
+    public void meth52786() { }
+    public void meth52787() { }
+    public void meth52788() { }
+    public void meth52789() { }
+    public void meth52790() { }
+    public void meth52791() { }
+    public void meth52792() { }
+    public void meth52793() { }
+    public void meth52794() { }
+    public void meth52795() { }
+    public void meth52796() { }
+    public void meth52797() { }
+    public void meth52798() { }
+    public void meth52799() { }
+    public void meth52800() { }
+    public void meth52801() { }
+    public void meth52802() { }
+    public void meth52803() { }
+    public void meth52804() { }
+    public void meth52805() { }
+    public void meth52806() { }
+    public void meth52807() { }
+    public void meth52808() { }
+    public void meth52809() { }
+    public void meth52810() { }
+    public void meth52811() { }
+    public void meth52812() { }
+    public void meth52813() { }
+    public void meth52814() { }
+    public void meth52815() { }
+    public void meth52816() { }
+    public void meth52817() { }
+    public void meth52818() { }
+    public void meth52819() { }
+    public void meth52820() { }
+    public void meth52821() { }
+    public void meth52822() { }
+    public void meth52823() { }
+    public void meth52824() { }
+    public void meth52825() { }
+    public void meth52826() { }
+    public void meth52827() { }
+    public void meth52828() { }
+    public void meth52829() { }
+    public void meth52830() { }
+    public void meth52831() { }
+    public void meth52832() { }
+    public void meth52833() { }
+    public void meth52834() { }
+    public void meth52835() { }
+    public void meth52836() { }
+    public void meth52837() { }
+    public void meth52838() { }
+    public void meth52839() { }
+    public void meth52840() { }
+    public void meth52841() { }
+    public void meth52842() { }
+    public void meth52843() { }
+    public void meth52844() { }
+    public void meth52845() { }
+    public void meth52846() { }
+    public void meth52847() { }
+    public void meth52848() { }
+    public void meth52849() { }
+    public void meth52850() { }
+    public void meth52851() { }
+    public void meth52852() { }
+    public void meth52853() { }
+    public void meth52854() { }
+    public void meth52855() { }
+    public void meth52856() { }
+    public void meth52857() { }
+    public void meth52858() { }
+    public void meth52859() { }
+    public void meth52860() { }
+    public void meth52861() { }
+    public void meth52862() { }
+    public void meth52863() { }
+    public void meth52864() { }
+    public void meth52865() { }
+    public void meth52866() { }
+    public void meth52867() { }
+    public void meth52868() { }
+    public void meth52869() { }
+    public void meth52870() { }
+    public void meth52871() { }
+    public void meth52872() { }
+    public void meth52873() { }
+    public void meth52874() { }
+    public void meth52875() { }
+    public void meth52876() { }
+    public void meth52877() { }
+    public void meth52878() { }
+    public void meth52879() { }
+    public void meth52880() { }
+    public void meth52881() { }
+    public void meth52882() { }
+    public void meth52883() { }
+    public void meth52884() { }
+    public void meth52885() { }
+    public void meth52886() { }
+    public void meth52887() { }
+    public void meth52888() { }
+    public void meth52889() { }
+    public void meth52890() { }
+    public void meth52891() { }
+    public void meth52892() { }
+    public void meth52893() { }
+    public void meth52894() { }
+    public void meth52895() { }
+    public void meth52896() { }
+    public void meth52897() { }
+    public void meth52898() { }
+    public void meth52899() { }
+    public void meth52900() { }
+    public void meth52901() { }
+    public void meth52902() { }
+    public void meth52903() { }
+    public void meth52904() { }
+    public void meth52905() { }
+    public void meth52906() { }
+    public void meth52907() { }
+    public void meth52908() { }
+    public void meth52909() { }
+    public void meth52910() { }
+    public void meth52911() { }
+    public void meth52912() { }
+    public void meth52913() { }
+    public void meth52914() { }
+    public void meth52915() { }
+    public void meth52916() { }
+    public void meth52917() { }
+    public void meth52918() { }
+    public void meth52919() { }
+    public void meth52920() { }
+    public void meth52921() { }
+    public void meth52922() { }
+    public void meth52923() { }
+    public void meth52924() { }
+    public void meth52925() { }
+    public void meth52926() { }
+    public void meth52927() { }
+    public void meth52928() { }
+    public void meth52929() { }
+    public void meth52930() { }
+    public void meth52931() { }
+    public void meth52932() { }
+    public void meth52933() { }
+    public void meth52934() { }
+    public void meth52935() { }
+    public void meth52936() { }
+    public void meth52937() { }
+    public void meth52938() { }
+    public void meth52939() { }
+    public void meth52940() { }
+    public void meth52941() { }
+    public void meth52942() { }
+    public void meth52943() { }
+    public void meth52944() { }
+    public void meth52945() { }
+    public void meth52946() { }
+    public void meth52947() { }
+    public void meth52948() { }
+    public void meth52949() { }
+    public void meth52950() { }
+    public void meth52951() { }
+    public void meth52952() { }
+    public void meth52953() { }
+    public void meth52954() { }
+    public void meth52955() { }
+    public void meth52956() { }
+    public void meth52957() { }
+    public void meth52958() { }
+    public void meth52959() { }
+    public void meth52960() { }
+    public void meth52961() { }
+    public void meth52962() { }
+    public void meth52963() { }
+    public void meth52964() { }
+    public void meth52965() { }
+    public void meth52966() { }
+    public void meth52967() { }
+    public void meth52968() { }
+    public void meth52969() { }
+    public void meth52970() { }
+    public void meth52971() { }
+    public void meth52972() { }
+    public void meth52973() { }
+    public void meth52974() { }
+    public void meth52975() { }
+    public void meth52976() { }
+    public void meth52977() { }
+    public void meth52978() { }
+    public void meth52979() { }
+    public void meth52980() { }
+    public void meth52981() { }
+    public void meth52982() { }
+    public void meth52983() { }
+    public void meth52984() { }
+    public void meth52985() { }
+    public void meth52986() { }
+    public void meth52987() { }
+    public void meth52988() { }
+    public void meth52989() { }
+    public void meth52990() { }
+    public void meth52991() { }
+    public void meth52992() { }
+    public void meth52993() { }
+    public void meth52994() { }
+    public void meth52995() { }
+    public void meth52996() { }
+    public void meth52997() { }
+    public void meth52998() { }
+    public void meth52999() { }
+    public void meth53000() { }
+    public void meth53001() { }
+    public void meth53002() { }
+    public void meth53003() { }
+    public void meth53004() { }
+    public void meth53005() { }
+    public void meth53006() { }
+    public void meth53007() { }
+    public void meth53008() { }
+    public void meth53009() { }
+    public void meth53010() { }
+    public void meth53011() { }
+    public void meth53012() { }
+    public void meth53013() { }
+    public void meth53014() { }
+    public void meth53015() { }
+    public void meth53016() { }
+    public void meth53017() { }
+    public void meth53018() { }
+    public void meth53019() { }
+    public void meth53020() { }
+    public void meth53021() { }
+    public void meth53022() { }
+    public void meth53023() { }
+    public void meth53024() { }
+    public void meth53025() { }
+    public void meth53026() { }
+    public void meth53027() { }
+    public void meth53028() { }
+    public void meth53029() { }
+    public void meth53030() { }
+    public void meth53031() { }
+    public void meth53032() { }
+    public void meth53033() { }
+    public void meth53034() { }
+    public void meth53035() { }
+    public void meth53036() { }
+    public void meth53037() { }
+    public void meth53038() { }
+    public void meth53039() { }
+    public void meth53040() { }
+    public void meth53041() { }
+    public void meth53042() { }
+    public void meth53043() { }
+    public void meth53044() { }
+    public void meth53045() { }
+    public void meth53046() { }
+    public void meth53047() { }
+    public void meth53048() { }
+    public void meth53049() { }
+    public void meth53050() { }
+    public void meth53051() { }
+    public void meth53052() { }
+    public void meth53053() { }
+    public void meth53054() { }
+    public void meth53055() { }
+    public void meth53056() { }
+    public void meth53057() { }
+    public void meth53058() { }
+    public void meth53059() { }
+    public void meth53060() { }
+    public void meth53061() { }
+    public void meth53062() { }
+    public void meth53063() { }
+    public void meth53064() { }
+    public void meth53065() { }
+    public void meth53066() { }
+    public void meth53067() { }
+    public void meth53068() { }
+    public void meth53069() { }
+    public void meth53070() { }
+    public void meth53071() { }
+    public void meth53072() { }
+    public void meth53073() { }
+    public void meth53074() { }
+    public void meth53075() { }
+    public void meth53076() { }
+    public void meth53077() { }
+    public void meth53078() { }
+    public void meth53079() { }
+    public void meth53080() { }
+    public void meth53081() { }
+    public void meth53082() { }
+    public void meth53083() { }
+    public void meth53084() { }
+    public void meth53085() { }
+    public void meth53086() { }
+    public void meth53087() { }
+    public void meth53088() { }
+    public void meth53089() { }
+    public void meth53090() { }
+    public void meth53091() { }
+    public void meth53092() { }
+    public void meth53093() { }
+    public void meth53094() { }
+    public void meth53095() { }
+    public void meth53096() { }
+    public void meth53097() { }
+    public void meth53098() { }
+    public void meth53099() { }
+    public void meth53100() { }
+    public void meth53101() { }
+    public void meth53102() { }
+    public void meth53103() { }
+    public void meth53104() { }
+    public void meth53105() { }
+    public void meth53106() { }
+    public void meth53107() { }
+    public void meth53108() { }
+    public void meth53109() { }
+    public void meth53110() { }
+    public void meth53111() { }
+    public void meth53112() { }
+    public void meth53113() { }
+    public void meth53114() { }
+    public void meth53115() { }
+    public void meth53116() { }
+    public void meth53117() { }
+    public void meth53118() { }
+    public void meth53119() { }
+    public void meth53120() { }
+    public void meth53121() { }
+    public void meth53122() { }
+    public void meth53123() { }
+    public void meth53124() { }
+    public void meth53125() { }
+    public void meth53126() { }
+    public void meth53127() { }
+    public void meth53128() { }
+    public void meth53129() { }
+    public void meth53130() { }
+    public void meth53131() { }
+    public void meth53132() { }
+    public void meth53133() { }
+    public void meth53134() { }
+    public void meth53135() { }
+    public void meth53136() { }
+    public void meth53137() { }
+    public void meth53138() { }
+    public void meth53139() { }
+    public void meth53140() { }
+    public void meth53141() { }
+    public void meth53142() { }
+    public void meth53143() { }
+    public void meth53144() { }
+    public void meth53145() { }
+    public void meth53146() { }
+    public void meth53147() { }
+    public void meth53148() { }
+    public void meth53149() { }
+    public void meth53150() { }
+    public void meth53151() { }
+    public void meth53152() { }
+    public void meth53153() { }
+    public void meth53154() { }
+    public void meth53155() { }
+    public void meth53156() { }
+    public void meth53157() { }
+    public void meth53158() { }
+    public void meth53159() { }
+    public void meth53160() { }
+    public void meth53161() { }
+    public void meth53162() { }
+    public void meth53163() { }
+    public void meth53164() { }
+    public void meth53165() { }
+    public void meth53166() { }
+    public void meth53167() { }
+    public void meth53168() { }
+    public void meth53169() { }
+    public void meth53170() { }
+    public void meth53171() { }
+    public void meth53172() { }
+    public void meth53173() { }
+    public void meth53174() { }
+    public void meth53175() { }
+    public void meth53176() { }
+    public void meth53177() { }
+    public void meth53178() { }
+    public void meth53179() { }
+    public void meth53180() { }
+    public void meth53181() { }
+    public void meth53182() { }
+    public void meth53183() { }
+    public void meth53184() { }
+    public void meth53185() { }
+    public void meth53186() { }
+    public void meth53187() { }
+    public void meth53188() { }
+    public void meth53189() { }
+    public void meth53190() { }
+    public void meth53191() { }
+    public void meth53192() { }
+    public void meth53193() { }
+    public void meth53194() { }
+    public void meth53195() { }
+    public void meth53196() { }
+    public void meth53197() { }
+    public void meth53198() { }
+    public void meth53199() { }
+    public void meth53200() { }
+    public void meth53201() { }
+    public void meth53202() { }
+    public void meth53203() { }
+    public void meth53204() { }
+    public void meth53205() { }
+    public void meth53206() { }
+    public void meth53207() { }
+    public void meth53208() { }
+    public void meth53209() { }
+    public void meth53210() { }
+    public void meth53211() { }
+    public void meth53212() { }
+    public void meth53213() { }
+    public void meth53214() { }
+    public void meth53215() { }
+    public void meth53216() { }
+    public void meth53217() { }
+    public void meth53218() { }
+    public void meth53219() { }
+    public void meth53220() { }
+    public void meth53221() { }
+    public void meth53222() { }
+    public void meth53223() { }
+    public void meth53224() { }
+    public void meth53225() { }
+    public void meth53226() { }
+    public void meth53227() { }
+    public void meth53228() { }
+    public void meth53229() { }
+    public void meth53230() { }
+    public void meth53231() { }
+    public void meth53232() { }
+    public void meth53233() { }
+    public void meth53234() { }
+    public void meth53235() { }
+    public void meth53236() { }
+    public void meth53237() { }
+    public void meth53238() { }
+    public void meth53239() { }
+    public void meth53240() { }
+    public void meth53241() { }
+    public void meth53242() { }
+    public void meth53243() { }
+    public void meth53244() { }
+    public void meth53245() { }
+    public void meth53246() { }
+    public void meth53247() { }
+    public void meth53248() { }
+    public void meth53249() { }
+    public void meth53250() { }
+    public void meth53251() { }
+    public void meth53252() { }
+    public void meth53253() { }
+    public void meth53254() { }
+    public void meth53255() { }
+    public void meth53256() { }
+    public void meth53257() { }
+    public void meth53258() { }
+    public void meth53259() { }
+    public void meth53260() { }
+    public void meth53261() { }
+    public void meth53262() { }
+    public void meth53263() { }
+    public void meth53264() { }
+    public void meth53265() { }
+    public void meth53266() { }
+    public void meth53267() { }
+    public void meth53268() { }
+    public void meth53269() { }
+    public void meth53270() { }
+    public void meth53271() { }
+    public void meth53272() { }
+    public void meth53273() { }
+    public void meth53274() { }
+    public void meth53275() { }
+    public void meth53276() { }
+    public void meth53277() { }
+    public void meth53278() { }
+    public void meth53279() { }
+    public void meth53280() { }
+    public void meth53281() { }
+    public void meth53282() { }
+    public void meth53283() { }
+    public void meth53284() { }
+    public void meth53285() { }
+    public void meth53286() { }
+    public void meth53287() { }
+    public void meth53288() { }
+    public void meth53289() { }
+    public void meth53290() { }
+    public void meth53291() { }
+    public void meth53292() { }
+    public void meth53293() { }
+    public void meth53294() { }
+    public void meth53295() { }
+    public void meth53296() { }
+    public void meth53297() { }
+    public void meth53298() { }
+    public void meth53299() { }
+    public void meth53300() { }
+    public void meth53301() { }
+    public void meth53302() { }
+    public void meth53303() { }
+    public void meth53304() { }
+    public void meth53305() { }
+    public void meth53306() { }
+    public void meth53307() { }
+    public void meth53308() { }
+    public void meth53309() { }
+    public void meth53310() { }
+    public void meth53311() { }
+    public void meth53312() { }
+    public void meth53313() { }
+    public void meth53314() { }
+    public void meth53315() { }
+    public void meth53316() { }
+    public void meth53317() { }
+    public void meth53318() { }
+    public void meth53319() { }
+    public void meth53320() { }
+    public void meth53321() { }
+    public void meth53322() { }
+    public void meth53323() { }
+    public void meth53324() { }
+    public void meth53325() { }
+    public void meth53326() { }
+    public void meth53327() { }
+    public void meth53328() { }
+    public void meth53329() { }
+    public void meth53330() { }
+    public void meth53331() { }
+    public void meth53332() { }
+    public void meth53333() { }
+    public void meth53334() { }
+    public void meth53335() { }
+    public void meth53336() { }
+    public void meth53337() { }
+    public void meth53338() { }
+    public void meth53339() { }
+    public void meth53340() { }
+    public void meth53341() { }
+    public void meth53342() { }
+    public void meth53343() { }
+    public void meth53344() { }
+    public void meth53345() { }
+    public void meth53346() { }
+    public void meth53347() { }
+    public void meth53348() { }
+    public void meth53349() { }
+    public void meth53350() { }
+    public void meth53351() { }
+    public void meth53352() { }
+    public void meth53353() { }
+    public void meth53354() { }
+    public void meth53355() { }
+    public void meth53356() { }
+    public void meth53357() { }
+    public void meth53358() { }
+    public void meth53359() { }
+    public void meth53360() { }
+    public void meth53361() { }
+    public void meth53362() { }
+    public void meth53363() { }
+    public void meth53364() { }
+    public void meth53365() { }
+    public void meth53366() { }
+    public void meth53367() { }
+    public void meth53368() { }
+    public void meth53369() { }
+    public void meth53370() { }
+    public void meth53371() { }
+    public void meth53372() { }
+    public void meth53373() { }
+    public void meth53374() { }
+    public void meth53375() { }
+    public void meth53376() { }
+    public void meth53377() { }
+    public void meth53378() { }
+    public void meth53379() { }
+    public void meth53380() { }
+    public void meth53381() { }
+    public void meth53382() { }
+    public void meth53383() { }
+    public void meth53384() { }
+    public void meth53385() { }
+    public void meth53386() { }
+    public void meth53387() { }
+    public void meth53388() { }
+    public void meth53389() { }
+    public void meth53390() { }
+    public void meth53391() { }
+    public void meth53392() { }
+    public void meth53393() { }
+    public void meth53394() { }
+    public void meth53395() { }
+    public void meth53396() { }
+    public void meth53397() { }
+    public void meth53398() { }
+    public void meth53399() { }
+    public void meth53400() { }
+    public void meth53401() { }
+    public void meth53402() { }
+    public void meth53403() { }
+    public void meth53404() { }
+    public void meth53405() { }
+    public void meth53406() { }
+    public void meth53407() { }
+    public void meth53408() { }
+    public void meth53409() { }
+    public void meth53410() { }
+    public void meth53411() { }
+    public void meth53412() { }
+    public void meth53413() { }
+    public void meth53414() { }
+    public void meth53415() { }
+    public void meth53416() { }
+    public void meth53417() { }
+    public void meth53418() { }
+    public void meth53419() { }
+    public void meth53420() { }
+    public void meth53421() { }
+    public void meth53422() { }
+    public void meth53423() { }
+    public void meth53424() { }
+    public void meth53425() { }
+    public void meth53426() { }
+    public void meth53427() { }
+    public void meth53428() { }
+    public void meth53429() { }
+    public void meth53430() { }
+    public void meth53431() { }
+    public void meth53432() { }
+    public void meth53433() { }
+    public void meth53434() { }
+    public void meth53435() { }
+    public void meth53436() { }
+    public void meth53437() { }
+    public void meth53438() { }
+    public void meth53439() { }
+    public void meth53440() { }
+    public void meth53441() { }
+    public void meth53442() { }
+    public void meth53443() { }
+    public void meth53444() { }
+    public void meth53445() { }
+    public void meth53446() { }
+    public void meth53447() { }
+    public void meth53448() { }
+    public void meth53449() { }
+    public void meth53450() { }
+    public void meth53451() { }
+    public void meth53452() { }
+    public void meth53453() { }
+    public void meth53454() { }
+    public void meth53455() { }
+    public void meth53456() { }
+    public void meth53457() { }
+    public void meth53458() { }
+    public void meth53459() { }
+    public void meth53460() { }
+    public void meth53461() { }
+    public void meth53462() { }
+    public void meth53463() { }
+    public void meth53464() { }
+    public void meth53465() { }
+    public void meth53466() { }
+    public void meth53467() { }
+    public void meth53468() { }
+    public void meth53469() { }
+    public void meth53470() { }
+    public void meth53471() { }
+    public void meth53472() { }
+    public void meth53473() { }
+    public void meth53474() { }
+    public void meth53475() { }
+    public void meth53476() { }
+    public void meth53477() { }
+    public void meth53478() { }
+    public void meth53479() { }
+    public void meth53480() { }
+    public void meth53481() { }
+    public void meth53482() { }
+    public void meth53483() { }
+    public void meth53484() { }
+    public void meth53485() { }
+    public void meth53486() { }
+    public void meth53487() { }
+    public void meth53488() { }
+    public void meth53489() { }
+    public void meth53490() { }
+    public void meth53491() { }
+    public void meth53492() { }
+    public void meth53493() { }
+    public void meth53494() { }
+    public void meth53495() { }
+    public void meth53496() { }
+    public void meth53497() { }
+    public void meth53498() { }
+    public void meth53499() { }
+    public void meth53500() { }
+    public void meth53501() { }
+    public void meth53502() { }
+    public void meth53503() { }
+    public void meth53504() { }
+    public void meth53505() { }
+    public void meth53506() { }
+    public void meth53507() { }
+    public void meth53508() { }
+    public void meth53509() { }
+    public void meth53510() { }
+    public void meth53511() { }
+    public void meth53512() { }
+    public void meth53513() { }
+    public void meth53514() { }
+    public void meth53515() { }
+    public void meth53516() { }
+    public void meth53517() { }
+    public void meth53518() { }
+    public void meth53519() { }
+    public void meth53520() { }
+    public void meth53521() { }
+    public void meth53522() { }
+    public void meth53523() { }
+    public void meth53524() { }
+    public void meth53525() { }
+    public void meth53526() { }
+    public void meth53527() { }
+    public void meth53528() { }
+    public void meth53529() { }
+    public void meth53530() { }
+    public void meth53531() { }
+    public void meth53532() { }
+    public void meth53533() { }
+    public void meth53534() { }
+    public void meth53535() { }
+    public void meth53536() { }
+    public void meth53537() { }
+    public void meth53538() { }
+    public void meth53539() { }
+    public void meth53540() { }
+    public void meth53541() { }
+    public void meth53542() { }
+    public void meth53543() { }
+    public void meth53544() { }
+    public void meth53545() { }
+    public void meth53546() { }
+    public void meth53547() { }
+    public void meth53548() { }
+    public void meth53549() { }
+    public void meth53550() { }
+    public void meth53551() { }
+    public void meth53552() { }
+    public void meth53553() { }
+    public void meth53554() { }
+    public void meth53555() { }
+    public void meth53556() { }
+    public void meth53557() { }
+    public void meth53558() { }
+    public void meth53559() { }
+    public void meth53560() { }
+    public void meth53561() { }
+    public void meth53562() { }
+    public void meth53563() { }
+    public void meth53564() { }
+    public void meth53565() { }
+    public void meth53566() { }
+    public void meth53567() { }
+    public void meth53568() { }
+    public void meth53569() { }
+    public void meth53570() { }
+    public void meth53571() { }
+    public void meth53572() { }
+    public void meth53573() { }
+    public void meth53574() { }
+    public void meth53575() { }
+    public void meth53576() { }
+    public void meth53577() { }
+    public void meth53578() { }
+    public void meth53579() { }
+    public void meth53580() { }
+    public void meth53581() { }
+    public void meth53582() { }
+    public void meth53583() { }
+    public void meth53584() { }
+    public void meth53585() { }
+    public void meth53586() { }
+    public void meth53587() { }
+    public void meth53588() { }
+    public void meth53589() { }
+    public void meth53590() { }
+    public void meth53591() { }
+    public void meth53592() { }
+    public void meth53593() { }
+    public void meth53594() { }
+    public void meth53595() { }
+    public void meth53596() { }
+    public void meth53597() { }
+    public void meth53598() { }
+    public void meth53599() { }
+    public void meth53600() { }
+    public void meth53601() { }
+    public void meth53602() { }
+    public void meth53603() { }
+    public void meth53604() { }
+    public void meth53605() { }
+    public void meth53606() { }
+    public void meth53607() { }
+    public void meth53608() { }
+    public void meth53609() { }
+    public void meth53610() { }
+    public void meth53611() { }
+    public void meth53612() { }
+    public void meth53613() { }
+    public void meth53614() { }
+    public void meth53615() { }
+    public void meth53616() { }
+    public void meth53617() { }
+    public void meth53618() { }
+    public void meth53619() { }
+    public void meth53620() { }
+    public void meth53621() { }
+    public void meth53622() { }
+    public void meth53623() { }
+    public void meth53624() { }
+    public void meth53625() { }
+    public void meth53626() { }
+    public void meth53627() { }
+    public void meth53628() { }
+    public void meth53629() { }
+    public void meth53630() { }
+    public void meth53631() { }
+    public void meth53632() { }
+    public void meth53633() { }
+    public void meth53634() { }
+    public void meth53635() { }
+    public void meth53636() { }
+    public void meth53637() { }
+    public void meth53638() { }
+    public void meth53639() { }
+    public void meth53640() { }
+    public void meth53641() { }
+    public void meth53642() { }
+    public void meth53643() { }
+    public void meth53644() { }
+    public void meth53645() { }
+    public void meth53646() { }
+    public void meth53647() { }
+    public void meth53648() { }
+    public void meth53649() { }
+    public void meth53650() { }
+    public void meth53651() { }
+    public void meth53652() { }
+    public void meth53653() { }
+    public void meth53654() { }
+    public void meth53655() { }
+    public void meth53656() { }
+    public void meth53657() { }
+    public void meth53658() { }
+    public void meth53659() { }
+    public void meth53660() { }
+    public void meth53661() { }
+    public void meth53662() { }
+    public void meth53663() { }
+    public void meth53664() { }
+    public void meth53665() { }
+    public void meth53666() { }
+    public void meth53667() { }
+    public void meth53668() { }
+    public void meth53669() { }
+    public void meth53670() { }
+    public void meth53671() { }
+    public void meth53672() { }
+    public void meth53673() { }
+    public void meth53674() { }
+    public void meth53675() { }
+    public void meth53676() { }
+    public void meth53677() { }
+    public void meth53678() { }
+    public void meth53679() { }
+    public void meth53680() { }
+    public void meth53681() { }
+    public void meth53682() { }
+    public void meth53683() { }
+    public void meth53684() { }
+    public void meth53685() { }
+    public void meth53686() { }
+    public void meth53687() { }
+    public void meth53688() { }
+    public void meth53689() { }
+    public void meth53690() { }
+    public void meth53691() { }
+    public void meth53692() { }
+    public void meth53693() { }
+    public void meth53694() { }
+    public void meth53695() { }
+    public void meth53696() { }
+    public void meth53697() { }
+    public void meth53698() { }
+    public void meth53699() { }
+    public void meth53700() { }
+    public void meth53701() { }
+    public void meth53702() { }
+    public void meth53703() { }
+    public void meth53704() { }
+    public void meth53705() { }
+    public void meth53706() { }
+    public void meth53707() { }
+    public void meth53708() { }
+    public void meth53709() { }
+    public void meth53710() { }
+    public void meth53711() { }
+    public void meth53712() { }
+    public void meth53713() { }
+    public void meth53714() { }
+    public void meth53715() { }
+    public void meth53716() { }
+    public void meth53717() { }
+    public void meth53718() { }
+    public void meth53719() { }
+    public void meth53720() { }
+    public void meth53721() { }
+    public void meth53722() { }
+    public void meth53723() { }
+    public void meth53724() { }
+    public void meth53725() { }
+    public void meth53726() { }
+    public void meth53727() { }
+    public void meth53728() { }
+    public void meth53729() { }
+    public void meth53730() { }
+    public void meth53731() { }
+    public void meth53732() { }
+    public void meth53733() { }
+    public void meth53734() { }
+    public void meth53735() { }
+    public void meth53736() { }
+    public void meth53737() { }
+    public void meth53738() { }
+    public void meth53739() { }
+    public void meth53740() { }
+    public void meth53741() { }
+    public void meth53742() { }
+    public void meth53743() { }
+    public void meth53744() { }
+    public void meth53745() { }
+    public void meth53746() { }
+    public void meth53747() { }
+    public void meth53748() { }
+    public void meth53749() { }
+    public void meth53750() { }
+    public void meth53751() { }
+    public void meth53752() { }
+    public void meth53753() { }
+    public void meth53754() { }
+    public void meth53755() { }
+    public void meth53756() { }
+    public void meth53757() { }
+    public void meth53758() { }
+    public void meth53759() { }
+    public void meth53760() { }
+    public void meth53761() { }
+    public void meth53762() { }
+    public void meth53763() { }
+    public void meth53764() { }
+    public void meth53765() { }
+    public void meth53766() { }
+    public void meth53767() { }
+    public void meth53768() { }
+    public void meth53769() { }
+    public void meth53770() { }
+    public void meth53771() { }
+    public void meth53772() { }
+    public void meth53773() { }
+    public void meth53774() { }
+    public void meth53775() { }
+    public void meth53776() { }
+    public void meth53777() { }
+    public void meth53778() { }
+    public void meth53779() { }
+    public void meth53780() { }
+    public void meth53781() { }
+    public void meth53782() { }
+    public void meth53783() { }
+    public void meth53784() { }
+    public void meth53785() { }
+    public void meth53786() { }
+    public void meth53787() { }
+    public void meth53788() { }
+    public void meth53789() { }
+    public void meth53790() { }
+    public void meth53791() { }
+    public void meth53792() { }
+    public void meth53793() { }
+    public void meth53794() { }
+    public void meth53795() { }
+    public void meth53796() { }
+    public void meth53797() { }
+    public void meth53798() { }
+    public void meth53799() { }
+    public void meth53800() { }
+    public void meth53801() { }
+    public void meth53802() { }
+    public void meth53803() { }
+    public void meth53804() { }
+    public void meth53805() { }
+    public void meth53806() { }
+    public void meth53807() { }
+    public void meth53808() { }
+    public void meth53809() { }
+    public void meth53810() { }
+    public void meth53811() { }
+    public void meth53812() { }
+    public void meth53813() { }
+    public void meth53814() { }
+    public void meth53815() { }
+    public void meth53816() { }
+    public void meth53817() { }
+    public void meth53818() { }
+    public void meth53819() { }
+    public void meth53820() { }
+    public void meth53821() { }
+    public void meth53822() { }
+    public void meth53823() { }
+    public void meth53824() { }
+    public void meth53825() { }
+    public void meth53826() { }
+    public void meth53827() { }
+    public void meth53828() { }
+    public void meth53829() { }
+    public void meth53830() { }
+    public void meth53831() { }
+    public void meth53832() { }
+    public void meth53833() { }
+    public void meth53834() { }
+    public void meth53835() { }
+    public void meth53836() { }
+    public void meth53837() { }
+    public void meth53838() { }
+    public void meth53839() { }
+    public void meth53840() { }
+    public void meth53841() { }
+    public void meth53842() { }
+    public void meth53843() { }
+    public void meth53844() { }
+    public void meth53845() { }
+    public void meth53846() { }
+    public void meth53847() { }
+    public void meth53848() { }
+    public void meth53849() { }
+    public void meth53850() { }
+    public void meth53851() { }
+    public void meth53852() { }
+    public void meth53853() { }
+    public void meth53854() { }
+    public void meth53855() { }
+    public void meth53856() { }
+    public void meth53857() { }
+    public void meth53858() { }
+    public void meth53859() { }
+    public void meth53860() { }
+    public void meth53861() { }
+    public void meth53862() { }
+    public void meth53863() { }
+    public void meth53864() { }
+    public void meth53865() { }
+    public void meth53866() { }
+    public void meth53867() { }
+    public void meth53868() { }
+    public void meth53869() { }
+    public void meth53870() { }
+    public void meth53871() { }
+    public void meth53872() { }
+    public void meth53873() { }
+    public void meth53874() { }
+    public void meth53875() { }
+    public void meth53876() { }
+    public void meth53877() { }
+    public void meth53878() { }
+    public void meth53879() { }
+    public void meth53880() { }
+    public void meth53881() { }
+    public void meth53882() { }
+    public void meth53883() { }
+    public void meth53884() { }
+    public void meth53885() { }
+    public void meth53886() { }
+    public void meth53887() { }
+    public void meth53888() { }
+    public void meth53889() { }
+    public void meth53890() { }
+    public void meth53891() { }
+    public void meth53892() { }
+    public void meth53893() { }
+    public void meth53894() { }
+    public void meth53895() { }
+    public void meth53896() { }
+    public void meth53897() { }
+    public void meth53898() { }
+    public void meth53899() { }
+    public void meth53900() { }
+    public void meth53901() { }
+    public void meth53902() { }
+    public void meth53903() { }
+    public void meth53904() { }
+    public void meth53905() { }
+    public void meth53906() { }
+    public void meth53907() { }
+    public void meth53908() { }
+    public void meth53909() { }
+    public void meth53910() { }
+    public void meth53911() { }
+    public void meth53912() { }
+    public void meth53913() { }
+    public void meth53914() { }
+    public void meth53915() { }
+    public void meth53916() { }
+    public void meth53917() { }
+    public void meth53918() { }
+    public void meth53919() { }
+    public void meth53920() { }
+    public void meth53921() { }
+    public void meth53922() { }
+    public void meth53923() { }
+    public void meth53924() { }
+    public void meth53925() { }
+    public void meth53926() { }
+    public void meth53927() { }
+    public void meth53928() { }
+    public void meth53929() { }
+    public void meth53930() { }
+    public void meth53931() { }
+    public void meth53932() { }
+    public void meth53933() { }
+    public void meth53934() { }
+    public void meth53935() { }
+    public void meth53936() { }
+    public void meth53937() { }
+    public void meth53938() { }
+    public void meth53939() { }
+    public void meth53940() { }
+    public void meth53941() { }
+    public void meth53942() { }
+    public void meth53943() { }
+    public void meth53944() { }
+    public void meth53945() { }
+    public void meth53946() { }
+    public void meth53947() { }
+    public void meth53948() { }
+    public void meth53949() { }
+    public void meth53950() { }
+    public void meth53951() { }
+    public void meth53952() { }
+    public void meth53953() { }
+    public void meth53954() { }
+    public void meth53955() { }
+    public void meth53956() { }
+    public void meth53957() { }
+    public void meth53958() { }
+    public void meth53959() { }
+    public void meth53960() { }
+    public void meth53961() { }
+    public void meth53962() { }
+    public void meth53963() { }
+    public void meth53964() { }
+    public void meth53965() { }
+    public void meth53966() { }
+    public void meth53967() { }
+    public void meth53968() { }
+    public void meth53969() { }
+    public void meth53970() { }
+    public void meth53971() { }
+    public void meth53972() { }
+    public void meth53973() { }
+    public void meth53974() { }
+    public void meth53975() { }
+    public void meth53976() { }
+    public void meth53977() { }
+    public void meth53978() { }
+    public void meth53979() { }
+    public void meth53980() { }
+    public void meth53981() { }
+    public void meth53982() { }
+    public void meth53983() { }
+    public void meth53984() { }
+    public void meth53985() { }
+    public void meth53986() { }
+    public void meth53987() { }
+    public void meth53988() { }
+    public void meth53989() { }
+    public void meth53990() { }
+    public void meth53991() { }
+    public void meth53992() { }
+    public void meth53993() { }
+    public void meth53994() { }
+    public void meth53995() { }
+    public void meth53996() { }
+    public void meth53997() { }
+    public void meth53998() { }
+    public void meth53999() { }
+    public void meth54000() { }
+    public void meth54001() { }
+    public void meth54002() { }
+    public void meth54003() { }
+    public void meth54004() { }
+    public void meth54005() { }
+    public void meth54006() { }
+    public void meth54007() { }
+    public void meth54008() { }
+    public void meth54009() { }
+    public void meth54010() { }
+    public void meth54011() { }
+    public void meth54012() { }
+    public void meth54013() { }
+    public void meth54014() { }
+    public void meth54015() { }
+    public void meth54016() { }
+    public void meth54017() { }
+    public void meth54018() { }
+    public void meth54019() { }
+    public void meth54020() { }
+    public void meth54021() { }
+    public void meth54022() { }
+    public void meth54023() { }
+    public void meth54024() { }
+    public void meth54025() { }
+    public void meth54026() { }
+    public void meth54027() { }
+    public void meth54028() { }
+    public void meth54029() { }
+    public void meth54030() { }
+    public void meth54031() { }
+    public void meth54032() { }
+    public void meth54033() { }
+    public void meth54034() { }
+    public void meth54035() { }
+    public void meth54036() { }
+    public void meth54037() { }
+    public void meth54038() { }
+    public void meth54039() { }
+    public void meth54040() { }
+    public void meth54041() { }
+    public void meth54042() { }
+    public void meth54043() { }
+    public void meth54044() { }
+    public void meth54045() { }
+    public void meth54046() { }
+    public void meth54047() { }
+    public void meth54048() { }
+    public void meth54049() { }
+    public void meth54050() { }
+    public void meth54051() { }
+    public void meth54052() { }
+    public void meth54053() { }
+    public void meth54054() { }
+    public void meth54055() { }
+    public void meth54056() { }
+    public void meth54057() { }
+    public void meth54058() { }
+    public void meth54059() { }
+    public void meth54060() { }
+    public void meth54061() { }
+    public void meth54062() { }
+    public void meth54063() { }
+    public void meth54064() { }
+    public void meth54065() { }
+    public void meth54066() { }
+    public void meth54067() { }
+    public void meth54068() { }
+    public void meth54069() { }
+    public void meth54070() { }
+    public void meth54071() { }
+    public void meth54072() { }
+    public void meth54073() { }
+    public void meth54074() { }
+    public void meth54075() { }
+    public void meth54076() { }
+    public void meth54077() { }
+    public void meth54078() { }
+    public void meth54079() { }
+    public void meth54080() { }
+    public void meth54081() { }
+    public void meth54082() { }
+    public void meth54083() { }
+    public void meth54084() { }
+    public void meth54085() { }
+    public void meth54086() { }
+    public void meth54087() { }
+    public void meth54088() { }
+    public void meth54089() { }
+    public void meth54090() { }
+    public void meth54091() { }
+    public void meth54092() { }
+    public void meth54093() { }
+    public void meth54094() { }
+    public void meth54095() { }
+    public void meth54096() { }
+    public void meth54097() { }
+    public void meth54098() { }
+    public void meth54099() { }
+    public void meth54100() { }
+    public void meth54101() { }
+    public void meth54102() { }
+    public void meth54103() { }
+    public void meth54104() { }
+    public void meth54105() { }
+    public void meth54106() { }
+    public void meth54107() { }
+    public void meth54108() { }
+    public void meth54109() { }
+    public void meth54110() { }
+    public void meth54111() { }
+    public void meth54112() { }
+    public void meth54113() { }
+    public void meth54114() { }
+    public void meth54115() { }
+    public void meth54116() { }
+    public void meth54117() { }
+    public void meth54118() { }
+    public void meth54119() { }
+    public void meth54120() { }
+    public void meth54121() { }
+    public void meth54122() { }
+    public void meth54123() { }
+    public void meth54124() { }
+    public void meth54125() { }
+    public void meth54126() { }
+    public void meth54127() { }
+    public void meth54128() { }
+    public void meth54129() { }
+    public void meth54130() { }
+    public void meth54131() { }
+    public void meth54132() { }
+    public void meth54133() { }
+    public void meth54134() { }
+    public void meth54135() { }
+    public void meth54136() { }
+    public void meth54137() { }
+    public void meth54138() { }
+    public void meth54139() { }
+    public void meth54140() { }
+    public void meth54141() { }
+    public void meth54142() { }
+    public void meth54143() { }
+    public void meth54144() { }
+    public void meth54145() { }
+    public void meth54146() { }
+    public void meth54147() { }
+    public void meth54148() { }
+    public void meth54149() { }
+    public void meth54150() { }
+    public void meth54151() { }
+    public void meth54152() { }
+    public void meth54153() { }
+    public void meth54154() { }
+    public void meth54155() { }
+    public void meth54156() { }
+    public void meth54157() { }
+    public void meth54158() { }
+    public void meth54159() { }
+    public void meth54160() { }
+    public void meth54161() { }
+    public void meth54162() { }
+    public void meth54163() { }
+    public void meth54164() { }
+    public void meth54165() { }
+    public void meth54166() { }
+    public void meth54167() { }
+    public void meth54168() { }
+    public void meth54169() { }
+    public void meth54170() { }
+    public void meth54171() { }
+    public void meth54172() { }
+    public void meth54173() { }
+    public void meth54174() { }
+    public void meth54175() { }
+    public void meth54176() { }
+    public void meth54177() { }
+    public void meth54178() { }
+    public void meth54179() { }
+    public void meth54180() { }
+    public void meth54181() { }
+    public void meth54182() { }
+    public void meth54183() { }
+    public void meth54184() { }
+    public void meth54185() { }
+    public void meth54186() { }
+    public void meth54187() { }
+    public void meth54188() { }
+    public void meth54189() { }
+    public void meth54190() { }
+    public void meth54191() { }
+    public void meth54192() { }
+    public void meth54193() { }
+    public void meth54194() { }
+    public void meth54195() { }
+    public void meth54196() { }
+    public void meth54197() { }
+    public void meth54198() { }
+    public void meth54199() { }
+    public void meth54200() { }
+    public void meth54201() { }
+    public void meth54202() { }
+    public void meth54203() { }
+    public void meth54204() { }
+    public void meth54205() { }
+    public void meth54206() { }
+    public void meth54207() { }
+    public void meth54208() { }
+    public void meth54209() { }
+    public void meth54210() { }
+    public void meth54211() { }
+    public void meth54212() { }
+    public void meth54213() { }
+    public void meth54214() { }
+    public void meth54215() { }
+    public void meth54216() { }
+    public void meth54217() { }
+    public void meth54218() { }
+    public void meth54219() { }
+    public void meth54220() { }
+    public void meth54221() { }
+    public void meth54222() { }
+    public void meth54223() { }
+    public void meth54224() { }
+    public void meth54225() { }
+    public void meth54226() { }
+    public void meth54227() { }
+    public void meth54228() { }
+    public void meth54229() { }
+    public void meth54230() { }
+    public void meth54231() { }
+    public void meth54232() { }
+    public void meth54233() { }
+    public void meth54234() { }
+    public void meth54235() { }
+    public void meth54236() { }
+    public void meth54237() { }
+    public void meth54238() { }
+    public void meth54239() { }
+    public void meth54240() { }
+    public void meth54241() { }
+    public void meth54242() { }
+    public void meth54243() { }
+    public void meth54244() { }
+    public void meth54245() { }
+    public void meth54246() { }
+    public void meth54247() { }
+    public void meth54248() { }
+    public void meth54249() { }
+    public void meth54250() { }
+    public void meth54251() { }
+    public void meth54252() { }
+    public void meth54253() { }
+    public void meth54254() { }
+    public void meth54255() { }
+    public void meth54256() { }
+    public void meth54257() { }
+    public void meth54258() { }
+    public void meth54259() { }
+    public void meth54260() { }
+    public void meth54261() { }
+    public void meth54262() { }
+    public void meth54263() { }
+    public void meth54264() { }
+    public void meth54265() { }
+    public void meth54266() { }
+    public void meth54267() { }
+    public void meth54268() { }
+    public void meth54269() { }
+    public void meth54270() { }
+    public void meth54271() { }
+    public void meth54272() { }
+    public void meth54273() { }
+    public void meth54274() { }
+    public void meth54275() { }
+    public void meth54276() { }
+    public void meth54277() { }
+    public void meth54278() { }
+    public void meth54279() { }
+    public void meth54280() { }
+    public void meth54281() { }
+    public void meth54282() { }
+    public void meth54283() { }
+    public void meth54284() { }
+    public void meth54285() { }
+    public void meth54286() { }
+    public void meth54287() { }
+    public void meth54288() { }
+    public void meth54289() { }
+    public void meth54290() { }
+    public void meth54291() { }
+    public void meth54292() { }
+    public void meth54293() { }
+    public void meth54294() { }
+    public void meth54295() { }
+    public void meth54296() { }
+    public void meth54297() { }
+    public void meth54298() { }
+    public void meth54299() { }
+    public void meth54300() { }
+    public void meth54301() { }
+    public void meth54302() { }
+    public void meth54303() { }
+    public void meth54304() { }
+    public void meth54305() { }
+    public void meth54306() { }
+    public void meth54307() { }
+    public void meth54308() { }
+    public void meth54309() { }
+    public void meth54310() { }
+    public void meth54311() { }
+    public void meth54312() { }
+    public void meth54313() { }
+    public void meth54314() { }
+    public void meth54315() { }
+    public void meth54316() { }
+    public void meth54317() { }
+    public void meth54318() { }
+    public void meth54319() { }
+    public void meth54320() { }
+    public void meth54321() { }
+    public void meth54322() { }
+    public void meth54323() { }
+    public void meth54324() { }
+    public void meth54325() { }
+    public void meth54326() { }
+    public void meth54327() { }
+    public void meth54328() { }
+    public void meth54329() { }
+    public void meth54330() { }
+    public void meth54331() { }
+    public void meth54332() { }
+    public void meth54333() { }
+    public void meth54334() { }
+    public void meth54335() { }
+    public void meth54336() { }
+    public void meth54337() { }
+    public void meth54338() { }
+    public void meth54339() { }
+    public void meth54340() { }
+    public void meth54341() { }
+    public void meth54342() { }
+    public void meth54343() { }
+    public void meth54344() { }
+    public void meth54345() { }
+    public void meth54346() { }
+    public void meth54347() { }
+    public void meth54348() { }
+    public void meth54349() { }
+    public void meth54350() { }
+    public void meth54351() { }
+    public void meth54352() { }
+    public void meth54353() { }
+    public void meth54354() { }
+    public void meth54355() { }
+    public void meth54356() { }
+    public void meth54357() { }
+    public void meth54358() { }
+    public void meth54359() { }
+    public void meth54360() { }
+    public void meth54361() { }
+    public void meth54362() { }
+    public void meth54363() { }
+    public void meth54364() { }
+    public void meth54365() { }
+    public void meth54366() { }
+    public void meth54367() { }
+    public void meth54368() { }
+    public void meth54369() { }
+    public void meth54370() { }
+    public void meth54371() { }
+    public void meth54372() { }
+    public void meth54373() { }
+    public void meth54374() { }
+    public void meth54375() { }
+    public void meth54376() { }
+    public void meth54377() { }
+    public void meth54378() { }
+    public void meth54379() { }
+    public void meth54380() { }
+    public void meth54381() { }
+    public void meth54382() { }
+    public void meth54383() { }
+    public void meth54384() { }
+    public void meth54385() { }
+    public void meth54386() { }
+    public void meth54387() { }
+    public void meth54388() { }
+    public void meth54389() { }
+    public void meth54390() { }
+    public void meth54391() { }
+    public void meth54392() { }
+    public void meth54393() { }
+    public void meth54394() { }
+    public void meth54395() { }
+    public void meth54396() { }
+    public void meth54397() { }
+    public void meth54398() { }
+    public void meth54399() { }
+    public void meth54400() { }
+    public void meth54401() { }
+    public void meth54402() { }
+    public void meth54403() { }
+    public void meth54404() { }
+    public void meth54405() { }
+    public void meth54406() { }
+    public void meth54407() { }
+    public void meth54408() { }
+    public void meth54409() { }
+    public void meth54410() { }
+    public void meth54411() { }
+    public void meth54412() { }
+    public void meth54413() { }
+    public void meth54414() { }
+    public void meth54415() { }
+    public void meth54416() { }
+    public void meth54417() { }
+    public void meth54418() { }
+    public void meth54419() { }
+    public void meth54420() { }
+    public void meth54421() { }
+    public void meth54422() { }
+    public void meth54423() { }
+    public void meth54424() { }
+    public void meth54425() { }
+    public void meth54426() { }
+    public void meth54427() { }
+    public void meth54428() { }
+    public void meth54429() { }
+    public void meth54430() { }
+    public void meth54431() { }
+    public void meth54432() { }
+    public void meth54433() { }
+    public void meth54434() { }
+    public void meth54435() { }
+    public void meth54436() { }
+    public void meth54437() { }
+    public void meth54438() { }
+    public void meth54439() { }
+    public void meth54440() { }
+    public void meth54441() { }
+    public void meth54442() { }
+    public void meth54443() { }
+    public void meth54444() { }
+    public void meth54445() { }
+    public void meth54446() { }
+    public void meth54447() { }
+    public void meth54448() { }
+    public void meth54449() { }
+    public void meth54450() { }
+    public void meth54451() { }
+    public void meth54452() { }
+    public void meth54453() { }
+    public void meth54454() { }
+    public void meth54455() { }
+    public void meth54456() { }
+    public void meth54457() { }
+    public void meth54458() { }
+    public void meth54459() { }
+    public void meth54460() { }
+    public void meth54461() { }
+    public void meth54462() { }
+    public void meth54463() { }
+    public void meth54464() { }
+    public void meth54465() { }
+    public void meth54466() { }
+    public void meth54467() { }
+    public void meth54468() { }
+    public void meth54469() { }
+    public void meth54470() { }
+    public void meth54471() { }
+    public void meth54472() { }
+    public void meth54473() { }
+    public void meth54474() { }
+    public void meth54475() { }
+    public void meth54476() { }
+    public void meth54477() { }
+    public void meth54478() { }
+    public void meth54479() { }
+    public void meth54480() { }
+    public void meth54481() { }
+    public void meth54482() { }
+    public void meth54483() { }
+    public void meth54484() { }
+    public void meth54485() { }
+    public void meth54486() { }
+    public void meth54487() { }
+    public void meth54488() { }
+    public void meth54489() { }
+    public void meth54490() { }
+    public void meth54491() { }
+    public void meth54492() { }
+    public void meth54493() { }
+    public void meth54494() { }
+    public void meth54495() { }
+    public void meth54496() { }
+    public void meth54497() { }
+    public void meth54498() { }
+    public void meth54499() { }
+    public void meth54500() { }
+    public void meth54501() { }
+    public void meth54502() { }
+    public void meth54503() { }
+    public void meth54504() { }
+    public void meth54505() { }
+    public void meth54506() { }
+    public void meth54507() { }
+    public void meth54508() { }
+    public void meth54509() { }
+    public void meth54510() { }
+    public void meth54511() { }
+    public void meth54512() { }
+    public void meth54513() { }
+    public void meth54514() { }
+    public void meth54515() { }
+    public void meth54516() { }
+    public void meth54517() { }
+    public void meth54518() { }
+    public void meth54519() { }
+    public void meth54520() { }
+    public void meth54521() { }
+    public void meth54522() { }
+    public void meth54523() { }
+    public void meth54524() { }
+    public void meth54525() { }
+    public void meth54526() { }
+    public void meth54527() { }
+    public void meth54528() { }
+    public void meth54529() { }
+    public void meth54530() { }
+    public void meth54531() { }
+    public void meth54532() { }
+    public void meth54533() { }
+    public void meth54534() { }
+    public void meth54535() { }
+    public void meth54536() { }
+    public void meth54537() { }
+    public void meth54538() { }
+    public void meth54539() { }
+    public void meth54540() { }
+    public void meth54541() { }
+    public void meth54542() { }
+    public void meth54543() { }
+    public void meth54544() { }
+    public void meth54545() { }
+    public void meth54546() { }
+    public void meth54547() { }
+    public void meth54548() { }
+    public void meth54549() { }
+    public void meth54550() { }
+    public void meth54551() { }
+    public void meth54552() { }
+    public void meth54553() { }
+    public void meth54554() { }
+    public void meth54555() { }
+    public void meth54556() { }
+    public void meth54557() { }
+    public void meth54558() { }
+    public void meth54559() { }
+    public void meth54560() { }
+    public void meth54561() { }
+    public void meth54562() { }
+    public void meth54563() { }
+    public void meth54564() { }
+    public void meth54565() { }
+    public void meth54566() { }
+    public void meth54567() { }
+    public void meth54568() { }
+    public void meth54569() { }
+    public void meth54570() { }
+    public void meth54571() { }
+    public void meth54572() { }
+    public void meth54573() { }
+    public void meth54574() { }
+    public void meth54575() { }
+    public void meth54576() { }
+    public void meth54577() { }
+    public void meth54578() { }
+    public void meth54579() { }
+    public void meth54580() { }
+    public void meth54581() { }
+    public void meth54582() { }
+    public void meth54583() { }
+    public void meth54584() { }
+    public void meth54585() { }
+    public void meth54586() { }
+    public void meth54587() { }
+    public void meth54588() { }
+    public void meth54589() { }
+    public void meth54590() { }
+    public void meth54591() { }
+    public void meth54592() { }
+    public void meth54593() { }
+    public void meth54594() { }
+    public void meth54595() { }
+    public void meth54596() { }
+    public void meth54597() { }
+    public void meth54598() { }
+    public void meth54599() { }
+    public void meth54600() { }
+    public void meth54601() { }
+    public void meth54602() { }
+    public void meth54603() { }
+    public void meth54604() { }
+    public void meth54605() { }
+    public void meth54606() { }
+    public void meth54607() { }
+    public void meth54608() { }
+    public void meth54609() { }
+    public void meth54610() { }
+    public void meth54611() { }
+    public void meth54612() { }
+    public void meth54613() { }
+    public void meth54614() { }
+    public void meth54615() { }
+    public void meth54616() { }
+    public void meth54617() { }
+    public void meth54618() { }
+    public void meth54619() { }
+    public void meth54620() { }
+    public void meth54621() { }
+    public void meth54622() { }
+    public void meth54623() { }
+    public void meth54624() { }
+    public void meth54625() { }
+    public void meth54626() { }
+    public void meth54627() { }
+    public void meth54628() { }
+    public void meth54629() { }
+    public void meth54630() { }
+    public void meth54631() { }
+    public void meth54632() { }
+    public void meth54633() { }
+    public void meth54634() { }
+    public void meth54635() { }
+    public void meth54636() { }
+    public void meth54637() { }
+    public void meth54638() { }
+    public void meth54639() { }
+    public void meth54640() { }
+    public void meth54641() { }
+    public void meth54642() { }
+    public void meth54643() { }
+    public void meth54644() { }
+    public void meth54645() { }
+    public void meth54646() { }
+    public void meth54647() { }
+    public void meth54648() { }
+    public void meth54649() { }
+    public void meth54650() { }
+    public void meth54651() { }
+    public void meth54652() { }
+    public void meth54653() { }
+    public void meth54654() { }
+    public void meth54655() { }
+    public void meth54656() { }
+    public void meth54657() { }
+    public void meth54658() { }
+    public void meth54659() { }
+    public void meth54660() { }
+    public void meth54661() { }
+    public void meth54662() { }
+    public void meth54663() { }
+    public void meth54664() { }
+    public void meth54665() { }
+    public void meth54666() { }
+    public void meth54667() { }
+    public void meth54668() { }
+    public void meth54669() { }
+    public void meth54670() { }
+    public void meth54671() { }
+    public void meth54672() { }
+    public void meth54673() { }
+    public void meth54674() { }
+    public void meth54675() { }
+    public void meth54676() { }
+    public void meth54677() { }
+    public void meth54678() { }
+    public void meth54679() { }
+    public void meth54680() { }
+    public void meth54681() { }
+    public void meth54682() { }
+    public void meth54683() { }
+    public void meth54684() { }
+    public void meth54685() { }
+    public void meth54686() { }
+    public void meth54687() { }
+    public void meth54688() { }
+    public void meth54689() { }
+    public void meth54690() { }
+    public void meth54691() { }
+    public void meth54692() { }
+    public void meth54693() { }
+    public void meth54694() { }
+    public void meth54695() { }
+    public void meth54696() { }
+    public void meth54697() { }
+    public void meth54698() { }
+    public void meth54699() { }
+    public void meth54700() { }
+    public void meth54701() { }
+    public void meth54702() { }
+    public void meth54703() { }
+    public void meth54704() { }
+    public void meth54705() { }
+    public void meth54706() { }
+    public void meth54707() { }
+    public void meth54708() { }
+    public void meth54709() { }
+    public void meth54710() { }
+    public void meth54711() { }
+    public void meth54712() { }
+    public void meth54713() { }
+    public void meth54714() { }
+    public void meth54715() { }
+    public void meth54716() { }
+    public void meth54717() { }
+    public void meth54718() { }
+    public void meth54719() { }
+    public void meth54720() { }
+    public void meth54721() { }
+    public void meth54722() { }
+    public void meth54723() { }
+    public void meth54724() { }
+    public void meth54725() { }
+    public void meth54726() { }
+    public void meth54727() { }
+    public void meth54728() { }
+    public void meth54729() { }
+    public void meth54730() { }
+    public void meth54731() { }
+    public void meth54732() { }
+    public void meth54733() { }
+    public void meth54734() { }
+    public void meth54735() { }
+    public void meth54736() { }
+    public void meth54737() { }
+    public void meth54738() { }
+    public void meth54739() { }
+    public void meth54740() { }
+    public void meth54741() { }
+    public void meth54742() { }
+    public void meth54743() { }
+    public void meth54744() { }
+    public void meth54745() { }
+    public void meth54746() { }
+    public void meth54747() { }
+    public void meth54748() { }
+    public void meth54749() { }
+    public void meth54750() { }
+    public void meth54751() { }
+    public void meth54752() { }
+    public void meth54753() { }
+    public void meth54754() { }
+    public void meth54755() { }
+    public void meth54756() { }
+    public void meth54757() { }
+    public void meth54758() { }
+    public void meth54759() { }
+    public void meth54760() { }
+    public void meth54761() { }
+    public void meth54762() { }
+    public void meth54763() { }
+    public void meth54764() { }
+    public void meth54765() { }
+    public void meth54766() { }
+    public void meth54767() { }
+    public void meth54768() { }
+    public void meth54769() { }
+    public void meth54770() { }
+    public void meth54771() { }
+    public void meth54772() { }
+    public void meth54773() { }
+    public void meth54774() { }
+    public void meth54775() { }
+    public void meth54776() { }
+    public void meth54777() { }
+    public void meth54778() { }
+    public void meth54779() { }
+    public void meth54780() { }
+    public void meth54781() { }
+    public void meth54782() { }
+    public void meth54783() { }
+    public void meth54784() { }
+    public void meth54785() { }
+    public void meth54786() { }
+    public void meth54787() { }
+    public void meth54788() { }
+    public void meth54789() { }
+    public void meth54790() { }
+    public void meth54791() { }
+    public void meth54792() { }
+    public void meth54793() { }
+    public void meth54794() { }
+    public void meth54795() { }
+    public void meth54796() { }
+    public void meth54797() { }
+    public void meth54798() { }
+    public void meth54799() { }
+    public void meth54800() { }
+    public void meth54801() { }
+    public void meth54802() { }
+    public void meth54803() { }
+    public void meth54804() { }
+    public void meth54805() { }
+    public void meth54806() { }
+    public void meth54807() { }
+    public void meth54808() { }
+    public void meth54809() { }
+    public void meth54810() { }
+    public void meth54811() { }
+    public void meth54812() { }
+    public void meth54813() { }
+    public void meth54814() { }
+    public void meth54815() { }
+    public void meth54816() { }
+    public void meth54817() { }
+    public void meth54818() { }
+    public void meth54819() { }
+    public void meth54820() { }
+    public void meth54821() { }
+    public void meth54822() { }
+    public void meth54823() { }
+    public void meth54824() { }
+    public void meth54825() { }
+    public void meth54826() { }
+    public void meth54827() { }
+    public void meth54828() { }
+    public void meth54829() { }
+    public void meth54830() { }
+    public void meth54831() { }
+    public void meth54832() { }
+    public void meth54833() { }
+    public void meth54834() { }
+    public void meth54835() { }
+    public void meth54836() { }
+    public void meth54837() { }
+    public void meth54838() { }
+    public void meth54839() { }
+    public void meth54840() { }
+    public void meth54841() { }
+    public void meth54842() { }
+    public void meth54843() { }
+    public void meth54844() { }
+    public void meth54845() { }
+    public void meth54846() { }
+    public void meth54847() { }
+    public void meth54848() { }
+    public void meth54849() { }
+    public void meth54850() { }
+    public void meth54851() { }
+    public void meth54852() { }
+    public void meth54853() { }
+    public void meth54854() { }
+    public void meth54855() { }
+    public void meth54856() { }
+    public void meth54857() { }
+    public void meth54858() { }
+    public void meth54859() { }
+    public void meth54860() { }
+    public void meth54861() { }
+    public void meth54862() { }
+    public void meth54863() { }
+    public void meth54864() { }
+    public void meth54865() { }
+    public void meth54866() { }
+    public void meth54867() { }
+    public void meth54868() { }
+    public void meth54869() { }
+    public void meth54870() { }
+    public void meth54871() { }
+    public void meth54872() { }
+    public void meth54873() { }
+    public void meth54874() { }
+    public void meth54875() { }
+    public void meth54876() { }
+    public void meth54877() { }
+    public void meth54878() { }
+    public void meth54879() { }
+    public void meth54880() { }
+    public void meth54881() { }
+    public void meth54882() { }
+    public void meth54883() { }
+    public void meth54884() { }
+    public void meth54885() { }
+    public void meth54886() { }
+    public void meth54887() { }
+    public void meth54888() { }
+    public void meth54889() { }
+    public void meth54890() { }
+    public void meth54891() { }
+    public void meth54892() { }
+    public void meth54893() { }
+    public void meth54894() { }
+    public void meth54895() { }
+    public void meth54896() { }
+    public void meth54897() { }
+    public void meth54898() { }
+    public void meth54899() { }
+    public void meth54900() { }
+    public void meth54901() { }
+    public void meth54902() { }
+    public void meth54903() { }
+    public void meth54904() { }
+    public void meth54905() { }
+    public void meth54906() { }
+    public void meth54907() { }
+    public void meth54908() { }
+    public void meth54909() { }
+    public void meth54910() { }
+    public void meth54911() { }
+    public void meth54912() { }
+    public void meth54913() { }
+    public void meth54914() { }
+    public void meth54915() { }
+    public void meth54916() { }
+    public void meth54917() { }
+    public void meth54918() { }
+    public void meth54919() { }
+    public void meth54920() { }
+    public void meth54921() { }
+    public void meth54922() { }
+    public void meth54923() { }
+    public void meth54924() { }
+    public void meth54925() { }
+    public void meth54926() { }
+    public void meth54927() { }
+    public void meth54928() { }
+    public void meth54929() { }
+    public void meth54930() { }
+    public void meth54931() { }
+    public void meth54932() { }
+    public void meth54933() { }
+    public void meth54934() { }
+    public void meth54935() { }
+    public void meth54936() { }
+    public void meth54937() { }
+    public void meth54938() { }
+    public void meth54939() { }
+    public void meth54940() { }
+    public void meth54941() { }
+    public void meth54942() { }
+    public void meth54943() { }
+    public void meth54944() { }
+    public void meth54945() { }
+    public void meth54946() { }
+    public void meth54947() { }
+    public void meth54948() { }
+    public void meth54949() { }
+    public void meth54950() { }
+    public void meth54951() { }
+    public void meth54952() { }
+    public void meth54953() { }
+    public void meth54954() { }
+    public void meth54955() { }
+    public void meth54956() { }
+    public void meth54957() { }
+    public void meth54958() { }
+    public void meth54959() { }
+    public void meth54960() { }
+    public void meth54961() { }
+    public void meth54962() { }
+    public void meth54963() { }
+    public void meth54964() { }
+    public void meth54965() { }
+    public void meth54966() { }
+    public void meth54967() { }
+    public void meth54968() { }
+    public void meth54969() { }
+    public void meth54970() { }
+    public void meth54971() { }
+    public void meth54972() { }
+    public void meth54973() { }
+    public void meth54974() { }
+    public void meth54975() { }
+    public void meth54976() { }
+    public void meth54977() { }
+    public void meth54978() { }
+    public void meth54979() { }
+    public void meth54980() { }
+    public void meth54981() { }
+    public void meth54982() { }
+    public void meth54983() { }
+    public void meth54984() { }
+    public void meth54985() { }
+    public void meth54986() { }
+    public void meth54987() { }
+    public void meth54988() { }
+    public void meth54989() { }
+    public void meth54990() { }
+    public void meth54991() { }
+    public void meth54992() { }
+    public void meth54993() { }
+    public void meth54994() { }
+    public void meth54995() { }
+    public void meth54996() { }
+    public void meth54997() { }
+    public void meth54998() { }
+    public void meth54999() { }
+    public void meth55000() { }
+    public void meth55001() { }
+    public void meth55002() { }
+    public void meth55003() { }
+    public void meth55004() { }
+    public void meth55005() { }
+    public void meth55006() { }
+    public void meth55007() { }
+    public void meth55008() { }
+    public void meth55009() { }
+    public void meth55010() { }
+    public void meth55011() { }
+    public void meth55012() { }
+    public void meth55013() { }
+    public void meth55014() { }
+    public void meth55015() { }
+    public void meth55016() { }
+    public void meth55017() { }
+    public void meth55018() { }
+    public void meth55019() { }
+    public void meth55020() { }
+    public void meth55021() { }
+    public void meth55022() { }
+    public void meth55023() { }
+    public void meth55024() { }
+    public void meth55025() { }
+    public void meth55026() { }
+    public void meth55027() { }
+    public void meth55028() { }
+    public void meth55029() { }
+    public void meth55030() { }
+    public void meth55031() { }
+    public void meth55032() { }
+    public void meth55033() { }
+    public void meth55034() { }
+    public void meth55035() { }
+    public void meth55036() { }
+    public void meth55037() { }
+    public void meth55038() { }
+    public void meth55039() { }
+    public void meth55040() { }
+    public void meth55041() { }
+    public void meth55042() { }
+    public void meth55043() { }
+    public void meth55044() { }
+    public void meth55045() { }
+    public void meth55046() { }
+    public void meth55047() { }
+    public void meth55048() { }
+    public void meth55049() { }
+    public void meth55050() { }
+    public void meth55051() { }
+    public void meth55052() { }
+    public void meth55053() { }
+    public void meth55054() { }
+    public void meth55055() { }
+    public void meth55056() { }
+    public void meth55057() { }
+    public void meth55058() { }
+    public void meth55059() { }
+    public void meth55060() { }
+    public void meth55061() { }
+    public void meth55062() { }
+    public void meth55063() { }
+    public void meth55064() { }
+    public void meth55065() { }
+    public void meth55066() { }
+    public void meth55067() { }
+    public void meth55068() { }
+    public void meth55069() { }
+    public void meth55070() { }
+    public void meth55071() { }
+    public void meth55072() { }
+    public void meth55073() { }
+    public void meth55074() { }
+    public void meth55075() { }
+    public void meth55076() { }
+    public void meth55077() { }
+    public void meth55078() { }
+    public void meth55079() { }
+    public void meth55080() { }
+    public void meth55081() { }
+    public void meth55082() { }
+    public void meth55083() { }
+    public void meth55084() { }
+    public void meth55085() { }
+    public void meth55086() { }
+    public void meth55087() { }
+    public void meth55088() { }
+    public void meth55089() { }
+    public void meth55090() { }
+    public void meth55091() { }
+    public void meth55092() { }
+    public void meth55093() { }
+    public void meth55094() { }
+    public void meth55095() { }
+    public void meth55096() { }
+    public void meth55097() { }
+    public void meth55098() { }
+    public void meth55099() { }
+    public void meth55100() { }
+    public void meth55101() { }
+    public void meth55102() { }
+    public void meth55103() { }
+    public void meth55104() { }
+    public void meth55105() { }
+    public void meth55106() { }
+    public void meth55107() { }
+    public void meth55108() { }
+    public void meth55109() { }
+    public void meth55110() { }
+    public void meth55111() { }
+    public void meth55112() { }
+    public void meth55113() { }
+    public void meth55114() { }
+    public void meth55115() { }
+    public void meth55116() { }
+    public void meth55117() { }
+    public void meth55118() { }
+    public void meth55119() { }
+    public void meth55120() { }
+    public void meth55121() { }
+    public void meth55122() { }
+    public void meth55123() { }
+    public void meth55124() { }
+    public void meth55125() { }
+    public void meth55126() { }
+    public void meth55127() { }
+    public void meth55128() { }
+    public void meth55129() { }
+    public void meth55130() { }
+    public void meth55131() { }
+    public void meth55132() { }
+    public void meth55133() { }
+    public void meth55134() { }
+    public void meth55135() { }
+    public void meth55136() { }
+    public void meth55137() { }
+    public void meth55138() { }
+    public void meth55139() { }
+    public void meth55140() { }
+    public void meth55141() { }
+    public void meth55142() { }
+    public void meth55143() { }
+    public void meth55144() { }
+    public void meth55145() { }
+    public void meth55146() { }
+    public void meth55147() { }
+    public void meth55148() { }
+    public void meth55149() { }
+    public void meth55150() { }
+    public void meth55151() { }
+    public void meth55152() { }
+    public void meth55153() { }
+    public void meth55154() { }
+    public void meth55155() { }
+    public void meth55156() { }
+    public void meth55157() { }
+    public void meth55158() { }
+    public void meth55159() { }
+    public void meth55160() { }
+    public void meth55161() { }
+    public void meth55162() { }
+    public void meth55163() { }
+    public void meth55164() { }
+    public void meth55165() { }
+    public void meth55166() { }
+    public void meth55167() { }
+    public void meth55168() { }
+    public void meth55169() { }
+    public void meth55170() { }
+    public void meth55171() { }
+    public void meth55172() { }
+    public void meth55173() { }
+    public void meth55174() { }
+    public void meth55175() { }
+    public void meth55176() { }
+    public void meth55177() { }
+    public void meth55178() { }
+    public void meth55179() { }
+    public void meth55180() { }
+    public void meth55181() { }
+    public void meth55182() { }
+    public void meth55183() { }
+    public void meth55184() { }
+    public void meth55185() { }
+    public void meth55186() { }
+    public void meth55187() { }
+    public void meth55188() { }
+    public void meth55189() { }
+    public void meth55190() { }
+    public void meth55191() { }
+    public void meth55192() { }
+    public void meth55193() { }
+    public void meth55194() { }
+    public void meth55195() { }
+    public void meth55196() { }
+    public void meth55197() { }
+    public void meth55198() { }
+    public void meth55199() { }
+    public void meth55200() { }
+    public void meth55201() { }
+    public void meth55202() { }
+    public void meth55203() { }
+    public void meth55204() { }
+    public void meth55205() { }
+    public void meth55206() { }
+    public void meth55207() { }
+    public void meth55208() { }
+    public void meth55209() { }
+    public void meth55210() { }
+    public void meth55211() { }
+    public void meth55212() { }
+    public void meth55213() { }
+    public void meth55214() { }
+    public void meth55215() { }
+    public void meth55216() { }
+    public void meth55217() { }
+    public void meth55218() { }
+    public void meth55219() { }
+    public void meth55220() { }
+    public void meth55221() { }
+    public void meth55222() { }
+    public void meth55223() { }
+    public void meth55224() { }
+    public void meth55225() { }
+    public void meth55226() { }
+    public void meth55227() { }
+    public void meth55228() { }
+    public void meth55229() { }
+    public void meth55230() { }
+    public void meth55231() { }
+    public void meth55232() { }
+    public void meth55233() { }
+    public void meth55234() { }
+    public void meth55235() { }
+    public void meth55236() { }
+    public void meth55237() { }
+    public void meth55238() { }
+    public void meth55239() { }
+    public void meth55240() { }
+    public void meth55241() { }
+    public void meth55242() { }
+    public void meth55243() { }
+    public void meth55244() { }
+    public void meth55245() { }
+    public void meth55246() { }
+    public void meth55247() { }
+    public void meth55248() { }
+    public void meth55249() { }
+    public void meth55250() { }
+    public void meth55251() { }
+    public void meth55252() { }
+    public void meth55253() { }
+    public void meth55254() { }
+    public void meth55255() { }
+    public void meth55256() { }
+    public void meth55257() { }
+    public void meth55258() { }
+    public void meth55259() { }
+    public void meth55260() { }
+    public void meth55261() { }
+    public void meth55262() { }
+    public void meth55263() { }
+    public void meth55264() { }
+    public void meth55265() { }
+    public void meth55266() { }
+    public void meth55267() { }
+    public void meth55268() { }
+    public void meth55269() { }
+    public void meth55270() { }
+    public void meth55271() { }
+    public void meth55272() { }
+    public void meth55273() { }
+    public void meth55274() { }
+    public void meth55275() { }
+    public void meth55276() { }
+    public void meth55277() { }
+    public void meth55278() { }
+    public void meth55279() { }
+    public void meth55280() { }
+    public void meth55281() { }
+    public void meth55282() { }
+    public void meth55283() { }
+    public void meth55284() { }
+    public void meth55285() { }
+    public void meth55286() { }
+    public void meth55287() { }
+    public void meth55288() { }
+    public void meth55289() { }
+    public void meth55290() { }
+    public void meth55291() { }
+    public void meth55292() { }
+    public void meth55293() { }
+    public void meth55294() { }
+    public void meth55295() { }
+    public void meth55296() { }
+    public void meth55297() { }
+    public void meth55298() { }
+    public void meth55299() { }
+    public void meth55300() { }
+    public void meth55301() { }
+    public void meth55302() { }
+    public void meth55303() { }
+    public void meth55304() { }
+    public void meth55305() { }
+    public void meth55306() { }
+    public void meth55307() { }
+    public void meth55308() { }
+    public void meth55309() { }
+    public void meth55310() { }
+    public void meth55311() { }
+    public void meth55312() { }
+    public void meth55313() { }
+    public void meth55314() { }
+    public void meth55315() { }
+    public void meth55316() { }
+    public void meth55317() { }
+    public void meth55318() { }
+    public void meth55319() { }
+    public void meth55320() { }
+    public void meth55321() { }
+    public void meth55322() { }
+    public void meth55323() { }
+    public void meth55324() { }
+    public void meth55325() { }
+    public void meth55326() { }
+    public void meth55327() { }
+    public void meth55328() { }
+    public void meth55329() { }
+    public void meth55330() { }
+    public void meth55331() { }
+    public void meth55332() { }
+    public void meth55333() { }
+    public void meth55334() { }
+    public void meth55335() { }
+    public void meth55336() { }
+    public void meth55337() { }
+    public void meth55338() { }
+    public void meth55339() { }
+    public void meth55340() { }
+    public void meth55341() { }
+    public void meth55342() { }
+    public void meth55343() { }
+    public void meth55344() { }
+    public void meth55345() { }
+    public void meth55346() { }
+    public void meth55347() { }
+    public void meth55348() { }
+    public void meth55349() { }
+    public void meth55350() { }
+    public void meth55351() { }
+    public void meth55352() { }
+    public void meth55353() { }
+    public void meth55354() { }
+    public void meth55355() { }
+    public void meth55356() { }
+    public void meth55357() { }
+    public void meth55358() { }
+    public void meth55359() { }
+    public void meth55360() { }
+    public void meth55361() { }
+    public void meth55362() { }
+    public void meth55363() { }
+    public void meth55364() { }
+    public void meth55365() { }
+    public void meth55366() { }
+    public void meth55367() { }
+    public void meth55368() { }
+    public void meth55369() { }
+    public void meth55370() { }
+    public void meth55371() { }
+    public void meth55372() { }
+    public void meth55373() { }
+    public void meth55374() { }
+    public void meth55375() { }
+    public void meth55376() { }
+    public void meth55377() { }
+    public void meth55378() { }
+    public void meth55379() { }
+    public void meth55380() { }
+    public void meth55381() { }
+    public void meth55382() { }
+    public void meth55383() { }
+    public void meth55384() { }
+    public void meth55385() { }
+    public void meth55386() { }
+    public void meth55387() { }
+    public void meth55388() { }
+    public void meth55389() { }
+    public void meth55390() { }
+    public void meth55391() { }
+    public void meth55392() { }
+    public void meth55393() { }
+    public void meth55394() { }
+    public void meth55395() { }
+    public void meth55396() { }
+    public void meth55397() { }
+    public void meth55398() { }
+    public void meth55399() { }
+    public void meth55400() { }
+    public void meth55401() { }
+    public void meth55402() { }
+    public void meth55403() { }
+    public void meth55404() { }
+    public void meth55405() { }
+    public void meth55406() { }
+    public void meth55407() { }
+    public void meth55408() { }
+    public void meth55409() { }
+    public void meth55410() { }
+    public void meth55411() { }
+    public void meth55412() { }
+    public void meth55413() { }
+    public void meth55414() { }
+    public void meth55415() { }
+    public void meth55416() { }
+    public void meth55417() { }
+    public void meth55418() { }
+    public void meth55419() { }
+    public void meth55420() { }
+    public void meth55421() { }
+    public void meth55422() { }
+    public void meth55423() { }
+    public void meth55424() { }
+    public void meth55425() { }
+    public void meth55426() { }
+    public void meth55427() { }
+    public void meth55428() { }
+    public void meth55429() { }
+    public void meth55430() { }
+    public void meth55431() { }
+    public void meth55432() { }
+    public void meth55433() { }
+    public void meth55434() { }
+    public void meth55435() { }
+    public void meth55436() { }
+    public void meth55437() { }
+    public void meth55438() { }
+    public void meth55439() { }
+    public void meth55440() { }
+    public void meth55441() { }
+    public void meth55442() { }
+    public void meth55443() { }
+    public void meth55444() { }
+    public void meth55445() { }
+    public void meth55446() { }
+    public void meth55447() { }
+    public void meth55448() { }
+    public void meth55449() { }
+    public void meth55450() { }
+    public void meth55451() { }
+    public void meth55452() { }
+    public void meth55453() { }
+    public void meth55454() { }
+    public void meth55455() { }
+    public void meth55456() { }
+    public void meth55457() { }
+    public void meth55458() { }
+    public void meth55459() { }
+    public void meth55460() { }
+    public void meth55461() { }
+    public void meth55462() { }
+    public void meth55463() { }
+    public void meth55464() { }
+    public void meth55465() { }
+    public void meth55466() { }
+    public void meth55467() { }
+    public void meth55468() { }
+    public void meth55469() { }
+    public void meth55470() { }
+    public void meth55471() { }
+    public void meth55472() { }
+    public void meth55473() { }
+    public void meth55474() { }
+    public void meth55475() { }
+    public void meth55476() { }
+    public void meth55477() { }
+    public void meth55478() { }
+    public void meth55479() { }
+    public void meth55480() { }
+    public void meth55481() { }
+    public void meth55482() { }
+    public void meth55483() { }
+    public void meth55484() { }
+    public void meth55485() { }
+    public void meth55486() { }
+    public void meth55487() { }
+    public void meth55488() { }
+    public void meth55489() { }
+    public void meth55490() { }
+    public void meth55491() { }
+    public void meth55492() { }
+    public void meth55493() { }
+    public void meth55494() { }
+    public void meth55495() { }
+    public void meth55496() { }
+    public void meth55497() { }
+    public void meth55498() { }
+    public void meth55499() { }
+    public void meth55500() { }
+    public void meth55501() { }
+    public void meth55502() { }
+    public void meth55503() { }
+    public void meth55504() { }
+    public void meth55505() { }
+    public void meth55506() { }
+    public void meth55507() { }
+    public void meth55508() { }
+    public void meth55509() { }
+    public void meth55510() { }
+    public void meth55511() { }
+    public void meth55512() { }
+    public void meth55513() { }
+    public void meth55514() { }
+    public void meth55515() { }
+    public void meth55516() { }
+    public void meth55517() { }
+    public void meth55518() { }
+    public void meth55519() { }
+    public void meth55520() { }
+    public void meth55521() { }
+    public void meth55522() { }
+    public void meth55523() { }
+    public void meth55524() { }
+    public void meth55525() { }
+    public void meth55526() { }
+    public void meth55527() { }
+    public void meth55528() { }
+    public void meth55529() { }
+    public void meth55530() { }
+    public void meth55531() { }
+    public void meth55532() { }
+    public void meth55533() { }
+    public void meth55534() { }
+    public void meth55535() { }
+    public void meth55536() { }
+    public void meth55537() { }
+    public void meth55538() { }
+    public void meth55539() { }
+    public void meth55540() { }
+    public void meth55541() { }
+    public void meth55542() { }
+    public void meth55543() { }
+    public void meth55544() { }
+    public void meth55545() { }
+    public void meth55546() { }
+    public void meth55547() { }
+    public void meth55548() { }
+    public void meth55549() { }
+    public void meth55550() { }
+    public void meth55551() { }
+    public void meth55552() { }
+    public void meth55553() { }
+    public void meth55554() { }
+    public void meth55555() { }
+    public void meth55556() { }
+    public void meth55557() { }
+    public void meth55558() { }
+    public void meth55559() { }
+    public void meth55560() { }
+    public void meth55561() { }
+    public void meth55562() { }
+    public void meth55563() { }
+    public void meth55564() { }
+    public void meth55565() { }
+    public void meth55566() { }
+    public void meth55567() { }
+    public void meth55568() { }
+    public void meth55569() { }
+    public void meth55570() { }
+    public void meth55571() { }
+    public void meth55572() { }
+    public void meth55573() { }
+    public void meth55574() { }
+    public void meth55575() { }
+    public void meth55576() { }
+    public void meth55577() { }
+    public void meth55578() { }
+    public void meth55579() { }
+    public void meth55580() { }
+    public void meth55581() { }
+    public void meth55582() { }
+    public void meth55583() { }
+    public void meth55584() { }
+    public void meth55585() { }
+    public void meth55586() { }
+    public void meth55587() { }
+    public void meth55588() { }
+    public void meth55589() { }
+    public void meth55590() { }
+    public void meth55591() { }
+    public void meth55592() { }
+    public void meth55593() { }
+    public void meth55594() { }
+    public void meth55595() { }
+    public void meth55596() { }
+    public void meth55597() { }
+    public void meth55598() { }
+    public void meth55599() { }
+    public void meth55600() { }
+    public void meth55601() { }
+    public void meth55602() { }
+    public void meth55603() { }
+    public void meth55604() { }
+    public void meth55605() { }
+    public void meth55606() { }
+    public void meth55607() { }
+    public void meth55608() { }
+    public void meth55609() { }
+    public void meth55610() { }
+    public void meth55611() { }
+    public void meth55612() { }
+    public void meth55613() { }
+    public void meth55614() { }
+    public void meth55615() { }
+    public void meth55616() { }
+    public void meth55617() { }
+    public void meth55618() { }
+    public void meth55619() { }
+    public void meth55620() { }
+    public void meth55621() { }
+    public void meth55622() { }
+    public void meth55623() { }
+    public void meth55624() { }
+    public void meth55625() { }
+    public void meth55626() { }
+    public void meth55627() { }
+    public void meth55628() { }
+    public void meth55629() { }
+    public void meth55630() { }
+    public void meth55631() { }
+    public void meth55632() { }
+    public void meth55633() { }
+    public void meth55634() { }
+    public void meth55635() { }
+    public void meth55636() { }
+    public void meth55637() { }
+    public void meth55638() { }
+    public void meth55639() { }
+    public void meth55640() { }
+    public void meth55641() { }
+    public void meth55642() { }
+    public void meth55643() { }
+    public void meth55644() { }
+    public void meth55645() { }
+    public void meth55646() { }
+    public void meth55647() { }
+    public void meth55648() { }
+    public void meth55649() { }
+    public void meth55650() { }
+    public void meth55651() { }
+    public void meth55652() { }
+    public void meth55653() { }
+    public void meth55654() { }
+    public void meth55655() { }
+    public void meth55656() { }
+    public void meth55657() { }
+    public void meth55658() { }
+    public void meth55659() { }
+    public void meth55660() { }
+    public void meth55661() { }
+    public void meth55662() { }
+    public void meth55663() { }
+    public void meth55664() { }
+    public void meth55665() { }
+    public void meth55666() { }
+    public void meth55667() { }
+    public void meth55668() { }
+    public void meth55669() { }
+    public void meth55670() { }
+    public void meth55671() { }
+    public void meth55672() { }
+    public void meth55673() { }
+    public void meth55674() { }
+    public void meth55675() { }
+    public void meth55676() { }
+    public void meth55677() { }
+    public void meth55678() { }
+    public void meth55679() { }
+    public void meth55680() { }
+    public void meth55681() { }
+    public void meth55682() { }
+    public void meth55683() { }
+    public void meth55684() { }
+    public void meth55685() { }
+    public void meth55686() { }
+    public void meth55687() { }
+    public void meth55688() { }
+    public void meth55689() { }
+    public void meth55690() { }
+    public void meth55691() { }
+    public void meth55692() { }
+    public void meth55693() { }
+    public void meth55694() { }
+    public void meth55695() { }
+    public void meth55696() { }
+    public void meth55697() { }
+    public void meth55698() { }
+    public void meth55699() { }
+    public void meth55700() { }
+    public void meth55701() { }
+    public void meth55702() { }
+    public void meth55703() { }
+    public void meth55704() { }
+    public void meth55705() { }
+    public void meth55706() { }
+    public void meth55707() { }
+    public void meth55708() { }
+    public void meth55709() { }
+    public void meth55710() { }
+    public void meth55711() { }
+    public void meth55712() { }
+    public void meth55713() { }
+    public void meth55714() { }
+    public void meth55715() { }
+    public void meth55716() { }
+    public void meth55717() { }
+    public void meth55718() { }
+    public void meth55719() { }
+    public void meth55720() { }
+    public void meth55721() { }
+    public void meth55722() { }
+    public void meth55723() { }
+    public void meth55724() { }
+    public void meth55725() { }
+    public void meth55726() { }
+    public void meth55727() { }
+    public void meth55728() { }
+    public void meth55729() { }
+    public void meth55730() { }
+    public void meth55731() { }
+    public void meth55732() { }
+    public void meth55733() { }
+    public void meth55734() { }
+    public void meth55735() { }
+    public void meth55736() { }
+    public void meth55737() { }
+    public void meth55738() { }
+    public void meth55739() { }
+    public void meth55740() { }
+    public void meth55741() { }
+    public void meth55742() { }
+    public void meth55743() { }
+    public void meth55744() { }
+    public void meth55745() { }
+    public void meth55746() { }
+    public void meth55747() { }
+    public void meth55748() { }
+    public void meth55749() { }
+    public void meth55750() { }
+    public void meth55751() { }
+    public void meth55752() { }
+    public void meth55753() { }
+    public void meth55754() { }
+    public void meth55755() { }
+    public void meth55756() { }
+    public void meth55757() { }
+    public void meth55758() { }
+    public void meth55759() { }
+    public void meth55760() { }
+    public void meth55761() { }
+    public void meth55762() { }
+    public void meth55763() { }
+    public void meth55764() { }
+    public void meth55765() { }
+    public void meth55766() { }
+    public void meth55767() { }
+    public void meth55768() { }
+    public void meth55769() { }
+    public void meth55770() { }
+    public void meth55771() { }
+    public void meth55772() { }
+    public void meth55773() { }
+    public void meth55774() { }
+    public void meth55775() { }
+    public void meth55776() { }
+    public void meth55777() { }
+    public void meth55778() { }
+    public void meth55779() { }
+    public void meth55780() { }
+    public void meth55781() { }
+    public void meth55782() { }
+    public void meth55783() { }
+    public void meth55784() { }
+    public void meth55785() { }
+    public void meth55786() { }
+    public void meth55787() { }
+    public void meth55788() { }
+    public void meth55789() { }
+    public void meth55790() { }
+    public void meth55791() { }
+    public void meth55792() { }
+    public void meth55793() { }
+    public void meth55794() { }
+    public void meth55795() { }
+    public void meth55796() { }
+    public void meth55797() { }
+    public void meth55798() { }
+    public void meth55799() { }
+    public void meth55800() { }
+    public void meth55801() { }
+    public void meth55802() { }
+    public void meth55803() { }
+    public void meth55804() { }
+    public void meth55805() { }
+    public void meth55806() { }
+    public void meth55807() { }
+    public void meth55808() { }
+    public void meth55809() { }
+    public void meth55810() { }
+    public void meth55811() { }
+    public void meth55812() { }
+    public void meth55813() { }
+    public void meth55814() { }
+    public void meth55815() { }
+    public void meth55816() { }
+    public void meth55817() { }
+    public void meth55818() { }
+    public void meth55819() { }
+    public void meth55820() { }
+    public void meth55821() { }
+    public void meth55822() { }
+    public void meth55823() { }
+    public void meth55824() { }
+    public void meth55825() { }
+    public void meth55826() { }
+    public void meth55827() { }
+    public void meth55828() { }
+    public void meth55829() { }
+    public void meth55830() { }
+    public void meth55831() { }
+    public void meth55832() { }
+    public void meth55833() { }
+    public void meth55834() { }
+    public void meth55835() { }
+    public void meth55836() { }
+    public void meth55837() { }
+    public void meth55838() { }
+    public void meth55839() { }
+    public void meth55840() { }
+    public void meth55841() { }
+    public void meth55842() { }
+    public void meth55843() { }
+    public void meth55844() { }
+    public void meth55845() { }
+    public void meth55846() { }
+    public void meth55847() { }
+    public void meth55848() { }
+    public void meth55849() { }
+    public void meth55850() { }
+    public void meth55851() { }
+    public void meth55852() { }
+    public void meth55853() { }
+    public void meth55854() { }
+    public void meth55855() { }
+    public void meth55856() { }
+    public void meth55857() { }
+    public void meth55858() { }
+    public void meth55859() { }
+    public void meth55860() { }
+    public void meth55861() { }
+    public void meth55862() { }
+    public void meth55863() { }
+    public void meth55864() { }
+    public void meth55865() { }
+    public void meth55866() { }
+    public void meth55867() { }
+    public void meth55868() { }
+    public void meth55869() { }
+    public void meth55870() { }
+    public void meth55871() { }
+    public void meth55872() { }
+    public void meth55873() { }
+    public void meth55874() { }
+    public void meth55875() { }
+    public void meth55876() { }
+    public void meth55877() { }
+    public void meth55878() { }
+    public void meth55879() { }
+    public void meth55880() { }
+    public void meth55881() { }
+    public void meth55882() { }
+    public void meth55883() { }
+    public void meth55884() { }
+    public void meth55885() { }
+    public void meth55886() { }
+    public void meth55887() { }
+    public void meth55888() { }
+    public void meth55889() { }
+    public void meth55890() { }
+    public void meth55891() { }
+    public void meth55892() { }
+    public void meth55893() { }
+    public void meth55894() { }
+    public void meth55895() { }
+    public void meth55896() { }
+    public void meth55897() { }
+    public void meth55898() { }
+    public void meth55899() { }
+    public void meth55900() { }
+    public void meth55901() { }
+    public void meth55902() { }
+    public void meth55903() { }
+    public void meth55904() { }
+    public void meth55905() { }
+    public void meth55906() { }
+    public void meth55907() { }
+    public void meth55908() { }
+    public void meth55909() { }
+    public void meth55910() { }
+    public void meth55911() { }
+    public void meth55912() { }
+    public void meth55913() { }
+    public void meth55914() { }
+    public void meth55915() { }
+    public void meth55916() { }
+    public void meth55917() { }
+    public void meth55918() { }
+    public void meth55919() { }
+    public void meth55920() { }
+    public void meth55921() { }
+    public void meth55922() { }
+    public void meth55923() { }
+    public void meth55924() { }
+    public void meth55925() { }
+    public void meth55926() { }
+    public void meth55927() { }
+    public void meth55928() { }
+    public void meth55929() { }
+    public void meth55930() { }
+    public void meth55931() { }
+    public void meth55932() { }
+    public void meth55933() { }
+    public void meth55934() { }
+    public void meth55935() { }
+    public void meth55936() { }
+    public void meth55937() { }
+    public void meth55938() { }
+    public void meth55939() { }
+    public void meth55940() { }
+    public void meth55941() { }
+    public void meth55942() { }
+    public void meth55943() { }
+    public void meth55944() { }
+    public void meth55945() { }
+    public void meth55946() { }
+    public void meth55947() { }
+    public void meth55948() { }
+    public void meth55949() { }
+    public void meth55950() { }
+    public void meth55951() { }
+    public void meth55952() { }
+    public void meth55953() { }
+    public void meth55954() { }
+    public void meth55955() { }
+    public void meth55956() { }
+    public void meth55957() { }
+    public void meth55958() { }
+    public void meth55959() { }
+    public void meth55960() { }
+    public void meth55961() { }
+    public void meth55962() { }
+    public void meth55963() { }
+    public void meth55964() { }
+    public void meth55965() { }
+    public void meth55966() { }
+    public void meth55967() { }
+    public void meth55968() { }
+    public void meth55969() { }
+    public void meth55970() { }
+    public void meth55971() { }
+    public void meth55972() { }
+    public void meth55973() { }
+    public void meth55974() { }
+    public void meth55975() { }
+    public void meth55976() { }
+    public void meth55977() { }
+    public void meth55978() { }
+    public void meth55979() { }
+    public void meth55980() { }
+    public void meth55981() { }
+    public void meth55982() { }
+    public void meth55983() { }
+    public void meth55984() { }
+    public void meth55985() { }
+    public void meth55986() { }
+    public void meth55987() { }
+    public void meth55988() { }
+    public void meth55989() { }
+    public void meth55990() { }
+    public void meth55991() { }
+    public void meth55992() { }
+    public void meth55993() { }
+    public void meth55994() { }
+    public void meth55995() { }
+    public void meth55996() { }
+    public void meth55997() { }
+    public void meth55998() { }
+    public void meth55999() { }
+    public void meth56000() { }
+    public void meth56001() { }
+    public void meth56002() { }
+    public void meth56003() { }
+    public void meth56004() { }
+    public void meth56005() { }
+    public void meth56006() { }
+    public void meth56007() { }
+    public void meth56008() { }
+    public void meth56009() { }
+    public void meth56010() { }
+    public void meth56011() { }
+    public void meth56012() { }
+    public void meth56013() { }
+    public void meth56014() { }
+    public void meth56015() { }
+    public void meth56016() { }
+    public void meth56017() { }
+    public void meth56018() { }
+    public void meth56019() { }
+    public void meth56020() { }
+    public void meth56021() { }
+    public void meth56022() { }
+    public void meth56023() { }
+    public void meth56024() { }
+    public void meth56025() { }
+    public void meth56026() { }
+    public void meth56027() { }
+    public void meth56028() { }
+    public void meth56029() { }
+    public void meth56030() { }
+    public void meth56031() { }
+    public void meth56032() { }
+    public void meth56033() { }
+    public void meth56034() { }
+    public void meth56035() { }
+    public void meth56036() { }
+    public void meth56037() { }
+    public void meth56038() { }
+    public void meth56039() { }
+    public void meth56040() { }
+    public void meth56041() { }
+    public void meth56042() { }
+    public void meth56043() { }
+    public void meth56044() { }
+    public void meth56045() { }
+    public void meth56046() { }
+    public void meth56047() { }
+    public void meth56048() { }
+    public void meth56049() { }
+    public void meth56050() { }
+    public void meth56051() { }
+    public void meth56052() { }
+    public void meth56053() { }
+    public void meth56054() { }
+    public void meth56055() { }
+    public void meth56056() { }
+    public void meth56057() { }
+    public void meth56058() { }
+    public void meth56059() { }
+    public void meth56060() { }
+    public void meth56061() { }
+    public void meth56062() { }
+    public void meth56063() { }
+    public void meth56064() { }
+    public void meth56065() { }
+    public void meth56066() { }
+    public void meth56067() { }
+    public void meth56068() { }
+    public void meth56069() { }
+    public void meth56070() { }
+    public void meth56071() { }
+    public void meth56072() { }
+    public void meth56073() { }
+    public void meth56074() { }
+    public void meth56075() { }
+    public void meth56076() { }
+    public void meth56077() { }
+    public void meth56078() { }
+    public void meth56079() { }
+    public void meth56080() { }
+    public void meth56081() { }
+    public void meth56082() { }
+    public void meth56083() { }
+    public void meth56084() { }
+    public void meth56085() { }
+    public void meth56086() { }
+    public void meth56087() { }
+    public void meth56088() { }
+    public void meth56089() { }
+    public void meth56090() { }
+    public void meth56091() { }
+    public void meth56092() { }
+    public void meth56093() { }
+    public void meth56094() { }
+    public void meth56095() { }
+    public void meth56096() { }
+    public void meth56097() { }
+    public void meth56098() { }
+    public void meth56099() { }
+    public void meth56100() { }
+    public void meth56101() { }
+    public void meth56102() { }
+    public void meth56103() { }
+    public void meth56104() { }
+    public void meth56105() { }
+    public void meth56106() { }
+    public void meth56107() { }
+    public void meth56108() { }
+    public void meth56109() { }
+    public void meth56110() { }
+    public void meth56111() { }
+    public void meth56112() { }
+    public void meth56113() { }
+    public void meth56114() { }
+    public void meth56115() { }
+    public void meth56116() { }
+    public void meth56117() { }
+    public void meth56118() { }
+    public void meth56119() { }
+    public void meth56120() { }
+    public void meth56121() { }
+    public void meth56122() { }
+    public void meth56123() { }
+    public void meth56124() { }
+    public void meth56125() { }
+    public void meth56126() { }
+    public void meth56127() { }
+    public void meth56128() { }
+    public void meth56129() { }
+    public void meth56130() { }
+    public void meth56131() { }
+    public void meth56132() { }
+    public void meth56133() { }
+    public void meth56134() { }
+    public void meth56135() { }
+    public void meth56136() { }
+    public void meth56137() { }
+    public void meth56138() { }
+    public void meth56139() { }
+    public void meth56140() { }
+    public void meth56141() { }
+    public void meth56142() { }
+    public void meth56143() { }
+    public void meth56144() { }
+    public void meth56145() { }
+    public void meth56146() { }
+    public void meth56147() { }
+    public void meth56148() { }
+    public void meth56149() { }
+    public void meth56150() { }
+    public void meth56151() { }
+    public void meth56152() { }
+    public void meth56153() { }
+    public void meth56154() { }
+    public void meth56155() { }
+    public void meth56156() { }
+    public void meth56157() { }
+    public void meth56158() { }
+    public void meth56159() { }
+    public void meth56160() { }
+    public void meth56161() { }
+    public void meth56162() { }
+    public void meth56163() { }
+    public void meth56164() { }
+    public void meth56165() { }
+    public void meth56166() { }
+    public void meth56167() { }
+    public void meth56168() { }
+    public void meth56169() { }
+    public void meth56170() { }
+    public void meth56171() { }
+    public void meth56172() { }
+    public void meth56173() { }
+    public void meth56174() { }
+    public void meth56175() { }
+    public void meth56176() { }
+    public void meth56177() { }
+    public void meth56178() { }
+    public void meth56179() { }
+    public void meth56180() { }
+    public void meth56181() { }
+    public void meth56182() { }
+    public void meth56183() { }
+    public void meth56184() { }
+    public void meth56185() { }
+    public void meth56186() { }
+    public void meth56187() { }
+    public void meth56188() { }
+    public void meth56189() { }
+    public void meth56190() { }
+    public void meth56191() { }
+    public void meth56192() { }
+    public void meth56193() { }
+    public void meth56194() { }
+    public void meth56195() { }
+    public void meth56196() { }
+    public void meth56197() { }
+    public void meth56198() { }
+    public void meth56199() { }
+    public void meth56200() { }
+    public void meth56201() { }
+    public void meth56202() { }
+    public void meth56203() { }
+    public void meth56204() { }
+    public void meth56205() { }
+    public void meth56206() { }
+    public void meth56207() { }
+    public void meth56208() { }
+    public void meth56209() { }
+    public void meth56210() { }
+    public void meth56211() { }
+    public void meth56212() { }
+    public void meth56213() { }
+    public void meth56214() { }
+    public void meth56215() { }
+    public void meth56216() { }
+    public void meth56217() { }
+    public void meth56218() { }
+    public void meth56219() { }
+    public void meth56220() { }
+    public void meth56221() { }
+    public void meth56222() { }
+    public void meth56223() { }
+    public void meth56224() { }
+    public void meth56225() { }
+    public void meth56226() { }
+    public void meth56227() { }
+    public void meth56228() { }
+    public void meth56229() { }
+    public void meth56230() { }
+    public void meth56231() { }
+    public void meth56232() { }
+    public void meth56233() { }
+    public void meth56234() { }
+    public void meth56235() { }
+    public void meth56236() { }
+    public void meth56237() { }
+    public void meth56238() { }
+    public void meth56239() { }
+    public void meth56240() { }
+    public void meth56241() { }
+    public void meth56242() { }
+    public void meth56243() { }
+    public void meth56244() { }
+    public void meth56245() { }
+    public void meth56246() { }
+    public void meth56247() { }
+    public void meth56248() { }
+    public void meth56249() { }
+    public void meth56250() { }
+    public void meth56251() { }
+    public void meth56252() { }
+    public void meth56253() { }
+    public void meth56254() { }
+    public void meth56255() { }
+    public void meth56256() { }
+    public void meth56257() { }
+    public void meth56258() { }
+    public void meth56259() { }
+    public void meth56260() { }
+    public void meth56261() { }
+    public void meth56262() { }
+    public void meth56263() { }
+    public void meth56264() { }
+    public void meth56265() { }
+    public void meth56266() { }
+    public void meth56267() { }
+    public void meth56268() { }
+    public void meth56269() { }
+    public void meth56270() { }
+    public void meth56271() { }
+    public void meth56272() { }
+    public void meth56273() { }
+    public void meth56274() { }
+    public void meth56275() { }
+    public void meth56276() { }
+    public void meth56277() { }
+    public void meth56278() { }
+    public void meth56279() { }
+    public void meth56280() { }
+    public void meth56281() { }
+    public void meth56282() { }
+    public void meth56283() { }
+    public void meth56284() { }
+    public void meth56285() { }
+    public void meth56286() { }
+    public void meth56287() { }
+    public void meth56288() { }
+    public void meth56289() { }
+    public void meth56290() { }
+    public void meth56291() { }
+    public void meth56292() { }
+    public void meth56293() { }
+    public void meth56294() { }
+    public void meth56295() { }
+    public void meth56296() { }
+    public void meth56297() { }
+    public void meth56298() { }
+    public void meth56299() { }
+    public void meth56300() { }
+    public void meth56301() { }
+    public void meth56302() { }
+    public void meth56303() { }
+    public void meth56304() { }
+    public void meth56305() { }
+    public void meth56306() { }
+    public void meth56307() { }
+    public void meth56308() { }
+    public void meth56309() { }
+    public void meth56310() { }
+    public void meth56311() { }
+    public void meth56312() { }
+    public void meth56313() { }
+    public void meth56314() { }
+    public void meth56315() { }
+    public void meth56316() { }
+    public void meth56317() { }
+    public void meth56318() { }
+    public void meth56319() { }
+    public void meth56320() { }
+    public void meth56321() { }
+    public void meth56322() { }
+    public void meth56323() { }
+    public void meth56324() { }
+    public void meth56325() { }
+    public void meth56326() { }
+    public void meth56327() { }
+    public void meth56328() { }
+    public void meth56329() { }
+    public void meth56330() { }
+    public void meth56331() { }
+    public void meth56332() { }
+    public void meth56333() { }
+    public void meth56334() { }
+    public void meth56335() { }
+    public void meth56336() { }
+    public void meth56337() { }
+    public void meth56338() { }
+    public void meth56339() { }
+    public void meth56340() { }
+    public void meth56341() { }
+    public void meth56342() { }
+    public void meth56343() { }
+    public void meth56344() { }
+    public void meth56345() { }
+    public void meth56346() { }
+    public void meth56347() { }
+    public void meth56348() { }
+    public void meth56349() { }
+    public void meth56350() { }
+    public void meth56351() { }
+    public void meth56352() { }
+    public void meth56353() { }
+    public void meth56354() { }
+    public void meth56355() { }
+    public void meth56356() { }
+    public void meth56357() { }
+    public void meth56358() { }
+    public void meth56359() { }
+    public void meth56360() { }
+    public void meth56361() { }
+    public void meth56362() { }
+    public void meth56363() { }
+    public void meth56364() { }
+    public void meth56365() { }
+    public void meth56366() { }
+    public void meth56367() { }
+    public void meth56368() { }
+    public void meth56369() { }
+    public void meth56370() { }
+    public void meth56371() { }
+    public void meth56372() { }
+    public void meth56373() { }
+    public void meth56374() { }
+    public void meth56375() { }
+    public void meth56376() { }
+    public void meth56377() { }
+    public void meth56378() { }
+    public void meth56379() { }
+    public void meth56380() { }
+    public void meth56381() { }
+    public void meth56382() { }
+    public void meth56383() { }
+    public void meth56384() { }
+    public void meth56385() { }
+    public void meth56386() { }
+    public void meth56387() { }
+    public void meth56388() { }
+    public void meth56389() { }
+    public void meth56390() { }
+    public void meth56391() { }
+    public void meth56392() { }
+    public void meth56393() { }
+    public void meth56394() { }
+    public void meth56395() { }
+    public void meth56396() { }
+    public void meth56397() { }
+    public void meth56398() { }
+    public void meth56399() { }
+    public void meth56400() { }
+    public void meth56401() { }
+    public void meth56402() { }
+    public void meth56403() { }
+    public void meth56404() { }
+    public void meth56405() { }
+    public void meth56406() { }
+    public void meth56407() { }
+    public void meth56408() { }
+    public void meth56409() { }
+    public void meth56410() { }
+    public void meth56411() { }
+    public void meth56412() { }
+    public void meth56413() { }
+    public void meth56414() { }
+    public void meth56415() { }
+    public void meth56416() { }
+    public void meth56417() { }
+    public void meth56418() { }
+    public void meth56419() { }
+    public void meth56420() { }
+    public void meth56421() { }
+    public void meth56422() { }
+    public void meth56423() { }
+    public void meth56424() { }
+    public void meth56425() { }
+    public void meth56426() { }
+    public void meth56427() { }
+    public void meth56428() { }
+    public void meth56429() { }
+    public void meth56430() { }
+    public void meth56431() { }
+    public void meth56432() { }
+    public void meth56433() { }
+    public void meth56434() { }
+    public void meth56435() { }
+    public void meth56436() { }
+    public void meth56437() { }
+    public void meth56438() { }
+    public void meth56439() { }
+    public void meth56440() { }
+    public void meth56441() { }
+    public void meth56442() { }
+    public void meth56443() { }
+    public void meth56444() { }
+    public void meth56445() { }
+    public void meth56446() { }
+    public void meth56447() { }
+    public void meth56448() { }
+    public void meth56449() { }
+    public void meth56450() { }
+    public void meth56451() { }
+    public void meth56452() { }
+    public void meth56453() { }
+    public void meth56454() { }
+    public void meth56455() { }
+    public void meth56456() { }
+    public void meth56457() { }
+    public void meth56458() { }
+    public void meth56459() { }
+    public void meth56460() { }
+    public void meth56461() { }
+    public void meth56462() { }
+    public void meth56463() { }
+    public void meth56464() { }
+    public void meth56465() { }
+    public void meth56466() { }
+    public void meth56467() { }
+    public void meth56468() { }
+    public void meth56469() { }
+    public void meth56470() { }
+    public void meth56471() { }
+    public void meth56472() { }
+    public void meth56473() { }
+    public void meth56474() { }
+    public void meth56475() { }
+    public void meth56476() { }
+    public void meth56477() { }
+    public void meth56478() { }
+    public void meth56479() { }
+    public void meth56480() { }
+    public void meth56481() { }
+    public void meth56482() { }
+    public void meth56483() { }
+    public void meth56484() { }
+    public void meth56485() { }
+    public void meth56486() { }
+    public void meth56487() { }
+    public void meth56488() { }
+    public void meth56489() { }
+    public void meth56490() { }
+    public void meth56491() { }
+    public void meth56492() { }
+    public void meth56493() { }
+    public void meth56494() { }
+    public void meth56495() { }
+    public void meth56496() { }
+    public void meth56497() { }
+    public void meth56498() { }
+    public void meth56499() { }
+    public void meth56500() { }
+    public void meth56501() { }
+    public void meth56502() { }
+    public void meth56503() { }
+    public void meth56504() { }
+    public void meth56505() { }
+    public void meth56506() { }
+    public void meth56507() { }
+    public void meth56508() { }
+    public void meth56509() { }
+    public void meth56510() { }
+    public void meth56511() { }
+    public void meth56512() { }
+    public void meth56513() { }
+    public void meth56514() { }
+    public void meth56515() { }
+    public void meth56516() { }
+    public void meth56517() { }
+    public void meth56518() { }
+    public void meth56519() { }
+    public void meth56520() { }
+    public void meth56521() { }
+    public void meth56522() { }
+    public void meth56523() { }
+    public void meth56524() { }
+    public void meth56525() { }
+    public void meth56526() { }
+    public void meth56527() { }
+    public void meth56528() { }
+    public void meth56529() { }
+    public void meth56530() { }
+    public void meth56531() { }
+    public void meth56532() { }
+    public void meth56533() { }
+    public void meth56534() { }
+    public void meth56535() { }
+    public void meth56536() { }
+    public void meth56537() { }
+    public void meth56538() { }
+    public void meth56539() { }
+    public void meth56540() { }
+    public void meth56541() { }
+    public void meth56542() { }
+    public void meth56543() { }
+    public void meth56544() { }
+    public void meth56545() { }
+    public void meth56546() { }
+    public void meth56547() { }
+    public void meth56548() { }
+    public void meth56549() { }
+    public void meth56550() { }
+    public void meth56551() { }
+    public void meth56552() { }
+    public void meth56553() { }
+    public void meth56554() { }
+    public void meth56555() { }
+    public void meth56556() { }
+    public void meth56557() { }
+    public void meth56558() { }
+    public void meth56559() { }
+    public void meth56560() { }
+    public void meth56561() { }
+    public void meth56562() { }
+    public void meth56563() { }
+    public void meth56564() { }
+    public void meth56565() { }
+    public void meth56566() { }
+    public void meth56567() { }
+    public void meth56568() { }
+    public void meth56569() { }
+    public void meth56570() { }
+    public void meth56571() { }
+    public void meth56572() { }
+    public void meth56573() { }
+    public void meth56574() { }
+    public void meth56575() { }
+    public void meth56576() { }
+    public void meth56577() { }
+    public void meth56578() { }
+    public void meth56579() { }
+    public void meth56580() { }
+    public void meth56581() { }
+    public void meth56582() { }
+    public void meth56583() { }
+    public void meth56584() { }
+    public void meth56585() { }
+    public void meth56586() { }
+    public void meth56587() { }
+    public void meth56588() { }
+    public void meth56589() { }
+    public void meth56590() { }
+    public void meth56591() { }
+    public void meth56592() { }
+    public void meth56593() { }
+    public void meth56594() { }
+    public void meth56595() { }
+    public void meth56596() { }
+    public void meth56597() { }
+    public void meth56598() { }
+    public void meth56599() { }
+    public void meth56600() { }
+    public void meth56601() { }
+    public void meth56602() { }
+    public void meth56603() { }
+    public void meth56604() { }
+    public void meth56605() { }
+    public void meth56606() { }
+    public void meth56607() { }
+    public void meth56608() { }
+    public void meth56609() { }
+    public void meth56610() { }
+    public void meth56611() { }
+    public void meth56612() { }
+    public void meth56613() { }
+    public void meth56614() { }
+    public void meth56615() { }
+    public void meth56616() { }
+    public void meth56617() { }
+    public void meth56618() { }
+    public void meth56619() { }
+    public void meth56620() { }
+    public void meth56621() { }
+    public void meth56622() { }
+    public void meth56623() { }
+    public void meth56624() { }
+    public void meth56625() { }
+    public void meth56626() { }
+    public void meth56627() { }
+    public void meth56628() { }
+    public void meth56629() { }
+    public void meth56630() { }
+    public void meth56631() { }
+    public void meth56632() { }
+    public void meth56633() { }
+    public void meth56634() { }
+    public void meth56635() { }
+    public void meth56636() { }
+    public void meth56637() { }
+    public void meth56638() { }
+    public void meth56639() { }
+    public void meth56640() { }
+    public void meth56641() { }
+    public void meth56642() { }
+    public void meth56643() { }
+    public void meth56644() { }
+    public void meth56645() { }
+    public void meth56646() { }
+    public void meth56647() { }
+    public void meth56648() { }
+    public void meth56649() { }
+    public void meth56650() { }
+    public void meth56651() { }
+    public void meth56652() { }
+    public void meth56653() { }
+    public void meth56654() { }
+    public void meth56655() { }
+    public void meth56656() { }
+    public void meth56657() { }
+    public void meth56658() { }
+    public void meth56659() { }
+    public void meth56660() { }
+    public void meth56661() { }
+    public void meth56662() { }
+    public void meth56663() { }
+    public void meth56664() { }
+    public void meth56665() { }
+    public void meth56666() { }
+    public void meth56667() { }
+    public void meth56668() { }
+    public void meth56669() { }
+    public void meth56670() { }
+    public void meth56671() { }
+    public void meth56672() { }
+    public void meth56673() { }
+    public void meth56674() { }
+    public void meth56675() { }
+    public void meth56676() { }
+    public void meth56677() { }
+    public void meth56678() { }
+    public void meth56679() { }
+    public void meth56680() { }
+    public void meth56681() { }
+    public void meth56682() { }
+    public void meth56683() { }
+    public void meth56684() { }
+    public void meth56685() { }
+    public void meth56686() { }
+    public void meth56687() { }
+    public void meth56688() { }
+    public void meth56689() { }
+    public void meth56690() { }
+    public void meth56691() { }
+    public void meth56692() { }
+    public void meth56693() { }
+    public void meth56694() { }
+    public void meth56695() { }
+    public void meth56696() { }
+    public void meth56697() { }
+    public void meth56698() { }
+    public void meth56699() { }
+    public void meth56700() { }
+    public void meth56701() { }
+    public void meth56702() { }
+    public void meth56703() { }
+    public void meth56704() { }
+    public void meth56705() { }
+    public void meth56706() { }
+    public void meth56707() { }
+    public void meth56708() { }
+    public void meth56709() { }
+    public void meth56710() { }
+    public void meth56711() { }
+    public void meth56712() { }
+    public void meth56713() { }
+    public void meth56714() { }
+    public void meth56715() { }
+    public void meth56716() { }
+    public void meth56717() { }
+    public void meth56718() { }
+    public void meth56719() { }
+    public void meth56720() { }
+    public void meth56721() { }
+    public void meth56722() { }
+    public void meth56723() { }
+    public void meth56724() { }
+    public void meth56725() { }
+    public void meth56726() { }
+    public void meth56727() { }
+    public void meth56728() { }
+    public void meth56729() { }
+    public void meth56730() { }
+    public void meth56731() { }
+    public void meth56732() { }
+    public void meth56733() { }
+    public void meth56734() { }
+    public void meth56735() { }
+    public void meth56736() { }
+    public void meth56737() { }
+    public void meth56738() { }
+    public void meth56739() { }
+    public void meth56740() { }
+    public void meth56741() { }
+    public void meth56742() { }
+    public void meth56743() { }
+    public void meth56744() { }
+    public void meth56745() { }
+    public void meth56746() { }
+    public void meth56747() { }
+    public void meth56748() { }
+    public void meth56749() { }
+    public void meth56750() { }
+    public void meth56751() { }
+    public void meth56752() { }
+    public void meth56753() { }
+    public void meth56754() { }
+    public void meth56755() { }
+    public void meth56756() { }
+    public void meth56757() { }
+    public void meth56758() { }
+    public void meth56759() { }
+    public void meth56760() { }
+    public void meth56761() { }
+    public void meth56762() { }
+    public void meth56763() { }
+    public void meth56764() { }
+    public void meth56765() { }
+    public void meth56766() { }
+    public void meth56767() { }
+    public void meth56768() { }
+    public void meth56769() { }
+    public void meth56770() { }
+    public void meth56771() { }
+    public void meth56772() { }
+    public void meth56773() { }
+    public void meth56774() { }
+    public void meth56775() { }
+    public void meth56776() { }
+    public void meth56777() { }
+    public void meth56778() { }
+    public void meth56779() { }
+    public void meth56780() { }
+    public void meth56781() { }
+    public void meth56782() { }
+    public void meth56783() { }
+    public void meth56784() { }
+    public void meth56785() { }
+    public void meth56786() { }
+    public void meth56787() { }
+    public void meth56788() { }
+    public void meth56789() { }
+    public void meth56790() { }
+    public void meth56791() { }
+    public void meth56792() { }
+    public void meth56793() { }
+    public void meth56794() { }
+    public void meth56795() { }
+    public void meth56796() { }
+    public void meth56797() { }
+    public void meth56798() { }
+    public void meth56799() { }
+    public void meth56800() { }
+    public void meth56801() { }
+    public void meth56802() { }
+    public void meth56803() { }
+    public void meth56804() { }
+    public void meth56805() { }
+    public void meth56806() { }
+    public void meth56807() { }
+    public void meth56808() { }
+    public void meth56809() { }
+    public void meth56810() { }
+    public void meth56811() { }
+    public void meth56812() { }
+    public void meth56813() { }
+    public void meth56814() { }
+    public void meth56815() { }
+    public void meth56816() { }
+    public void meth56817() { }
+    public void meth56818() { }
+    public void meth56819() { }
+    public void meth56820() { }
+    public void meth56821() { }
+    public void meth56822() { }
+    public void meth56823() { }
+    public void meth56824() { }
+    public void meth56825() { }
+    public void meth56826() { }
+    public void meth56827() { }
+    public void meth56828() { }
+    public void meth56829() { }
+    public void meth56830() { }
+    public void meth56831() { }
+    public void meth56832() { }
+    public void meth56833() { }
+    public void meth56834() { }
+    public void meth56835() { }
+    public void meth56836() { }
+    public void meth56837() { }
+    public void meth56838() { }
+    public void meth56839() { }
+    public void meth56840() { }
+    public void meth56841() { }
+    public void meth56842() { }
+    public void meth56843() { }
+    public void meth56844() { }
+    public void meth56845() { }
+    public void meth56846() { }
+    public void meth56847() { }
+    public void meth56848() { }
+    public void meth56849() { }
+    public void meth56850() { }
+    public void meth56851() { }
+    public void meth56852() { }
+    public void meth56853() { }
+    public void meth56854() { }
+    public void meth56855() { }
+    public void meth56856() { }
+    public void meth56857() { }
+    public void meth56858() { }
+    public void meth56859() { }
+    public void meth56860() { }
+    public void meth56861() { }
+    public void meth56862() { }
+    public void meth56863() { }
+    public void meth56864() { }
+    public void meth56865() { }
+    public void meth56866() { }
+    public void meth56867() { }
+    public void meth56868() { }
+    public void meth56869() { }
+    public void meth56870() { }
+    public void meth56871() { }
+    public void meth56872() { }
+    public void meth56873() { }
+    public void meth56874() { }
+    public void meth56875() { }
+    public void meth56876() { }
+    public void meth56877() { }
+    public void meth56878() { }
+    public void meth56879() { }
+    public void meth56880() { }
+    public void meth56881() { }
+    public void meth56882() { }
+    public void meth56883() { }
+    public void meth56884() { }
+    public void meth56885() { }
+    public void meth56886() { }
+    public void meth56887() { }
+    public void meth56888() { }
+    public void meth56889() { }
+    public void meth56890() { }
+    public void meth56891() { }
+    public void meth56892() { }
+    public void meth56893() { }
+    public void meth56894() { }
+    public void meth56895() { }
+    public void meth56896() { }
+    public void meth56897() { }
+    public void meth56898() { }
+    public void meth56899() { }
+    public void meth56900() { }
+    public void meth56901() { }
+    public void meth56902() { }
+    public void meth56903() { }
+    public void meth56904() { }
+    public void meth56905() { }
+    public void meth56906() { }
+    public void meth56907() { }
+    public void meth56908() { }
+    public void meth56909() { }
+    public void meth56910() { }
+    public void meth56911() { }
+    public void meth56912() { }
+    public void meth56913() { }
+    public void meth56914() { }
+    public void meth56915() { }
+    public void meth56916() { }
+    public void meth56917() { }
+    public void meth56918() { }
+    public void meth56919() { }
+    public void meth56920() { }
+    public void meth56921() { }
+    public void meth56922() { }
+    public void meth56923() { }
+    public void meth56924() { }
+    public void meth56925() { }
+    public void meth56926() { }
+    public void meth56927() { }
+    public void meth56928() { }
+    public void meth56929() { }
+    public void meth56930() { }
+    public void meth56931() { }
+    public void meth56932() { }
+    public void meth56933() { }
+    public void meth56934() { }
+    public void meth56935() { }
+    public void meth56936() { }
+    public void meth56937() { }
+    public void meth56938() { }
+    public void meth56939() { }
+    public void meth56940() { }
+    public void meth56941() { }
+    public void meth56942() { }
+    public void meth56943() { }
+    public void meth56944() { }
+    public void meth56945() { }
+    public void meth56946() { }
+    public void meth56947() { }
+    public void meth56948() { }
+    public void meth56949() { }
+    public void meth56950() { }
+    public void meth56951() { }
+    public void meth56952() { }
+    public void meth56953() { }
+    public void meth56954() { }
+    public void meth56955() { }
+    public void meth56956() { }
+    public void meth56957() { }
+    public void meth56958() { }
+    public void meth56959() { }
+    public void meth56960() { }
+    public void meth56961() { }
+    public void meth56962() { }
+    public void meth56963() { }
+    public void meth56964() { }
+    public void meth56965() { }
+    public void meth56966() { }
+    public void meth56967() { }
+    public void meth56968() { }
+    public void meth56969() { }
+    public void meth56970() { }
+    public void meth56971() { }
+    public void meth56972() { }
+    public void meth56973() { }
+    public void meth56974() { }
+    public void meth56975() { }
+    public void meth56976() { }
+    public void meth56977() { }
+    public void meth56978() { }
+    public void meth56979() { }
+    public void meth56980() { }
+    public void meth56981() { }
+    public void meth56982() { }
+    public void meth56983() { }
+    public void meth56984() { }
+    public void meth56985() { }
+    public void meth56986() { }
+    public void meth56987() { }
+    public void meth56988() { }
+    public void meth56989() { }
+    public void meth56990() { }
+    public void meth56991() { }
+    public void meth56992() { }
+    public void meth56993() { }
+    public void meth56994() { }
+    public void meth56995() { }
+    public void meth56996() { }
+    public void meth56997() { }
+    public void meth56998() { }
+    public void meth56999() { }
+    public void meth57000() { }
+    public void meth57001() { }
+    public void meth57002() { }
+    public void meth57003() { }
+    public void meth57004() { }
+    public void meth57005() { }
+    public void meth57006() { }
+    public void meth57007() { }
+    public void meth57008() { }
+    public void meth57009() { }
+    public void meth57010() { }
+    public void meth57011() { }
+    public void meth57012() { }
+    public void meth57013() { }
+    public void meth57014() { }
+    public void meth57015() { }
+    public void meth57016() { }
+    public void meth57017() { }
+    public void meth57018() { }
+    public void meth57019() { }
+    public void meth57020() { }
+    public void meth57021() { }
+    public void meth57022() { }
+    public void meth57023() { }
+    public void meth57024() { }
+    public void meth57025() { }
+    public void meth57026() { }
+    public void meth57027() { }
+    public void meth57028() { }
+    public void meth57029() { }
+    public void meth57030() { }
+    public void meth57031() { }
+    public void meth57032() { }
+    public void meth57033() { }
+    public void meth57034() { }
+    public void meth57035() { }
+    public void meth57036() { }
+    public void meth57037() { }
+    public void meth57038() { }
+    public void meth57039() { }
+    public void meth57040() { }
+    public void meth57041() { }
+    public void meth57042() { }
+    public void meth57043() { }
+    public void meth57044() { }
+    public void meth57045() { }
+    public void meth57046() { }
+    public void meth57047() { }
+    public void meth57048() { }
+    public void meth57049() { }
+    public void meth57050() { }
+    public void meth57051() { }
+    public void meth57052() { }
+    public void meth57053() { }
+    public void meth57054() { }
+    public void meth57055() { }
+    public void meth57056() { }
+    public void meth57057() { }
+    public void meth57058() { }
+    public void meth57059() { }
+    public void meth57060() { }
+    public void meth57061() { }
+    public void meth57062() { }
+    public void meth57063() { }
+    public void meth57064() { }
+    public void meth57065() { }
+    public void meth57066() { }
+    public void meth57067() { }
+    public void meth57068() { }
+    public void meth57069() { }
+    public void meth57070() { }
+    public void meth57071() { }
+    public void meth57072() { }
+    public void meth57073() { }
+    public void meth57074() { }
+    public void meth57075() { }
+    public void meth57076() { }
+    public void meth57077() { }
+    public void meth57078() { }
+    public void meth57079() { }
+    public void meth57080() { }
+    public void meth57081() { }
+    public void meth57082() { }
+    public void meth57083() { }
+    public void meth57084() { }
+    public void meth57085() { }
+    public void meth57086() { }
+    public void meth57087() { }
+    public void meth57088() { }
+    public void meth57089() { }
+    public void meth57090() { }
+    public void meth57091() { }
+    public void meth57092() { }
+    public void meth57093() { }
+    public void meth57094() { }
+    public void meth57095() { }
+    public void meth57096() { }
+    public void meth57097() { }
+    public void meth57098() { }
+    public void meth57099() { }
+    public void meth57100() { }
+    public void meth57101() { }
+    public void meth57102() { }
+    public void meth57103() { }
+    public void meth57104() { }
+    public void meth57105() { }
+    public void meth57106() { }
+    public void meth57107() { }
+    public void meth57108() { }
+    public void meth57109() { }
+    public void meth57110() { }
+    public void meth57111() { }
+    public void meth57112() { }
+    public void meth57113() { }
+    public void meth57114() { }
+    public void meth57115() { }
+    public void meth57116() { }
+    public void meth57117() { }
+    public void meth57118() { }
+    public void meth57119() { }
+    public void meth57120() { }
+    public void meth57121() { }
+    public void meth57122() { }
+    public void meth57123() { }
+    public void meth57124() { }
+    public void meth57125() { }
+    public void meth57126() { }
+    public void meth57127() { }
+    public void meth57128() { }
+    public void meth57129() { }
+    public void meth57130() { }
+    public void meth57131() { }
+    public void meth57132() { }
+    public void meth57133() { }
+    public void meth57134() { }
+    public void meth57135() { }
+    public void meth57136() { }
+    public void meth57137() { }
+    public void meth57138() { }
+    public void meth57139() { }
+    public void meth57140() { }
+    public void meth57141() { }
+    public void meth57142() { }
+    public void meth57143() { }
+    public void meth57144() { }
+    public void meth57145() { }
+    public void meth57146() { }
+    public void meth57147() { }
+    public void meth57148() { }
+    public void meth57149() { }
+    public void meth57150() { }
+    public void meth57151() { }
+    public void meth57152() { }
+    public void meth57153() { }
+    public void meth57154() { }
+    public void meth57155() { }
+    public void meth57156() { }
+    public void meth57157() { }
+    public void meth57158() { }
+    public void meth57159() { }
+    public void meth57160() { }
+    public void meth57161() { }
+    public void meth57162() { }
+    public void meth57163() { }
+    public void meth57164() { }
+    public void meth57165() { }
+    public void meth57166() { }
+    public void meth57167() { }
+    public void meth57168() { }
+    public void meth57169() { }
+    public void meth57170() { }
+    public void meth57171() { }
+    public void meth57172() { }
+    public void meth57173() { }
+    public void meth57174() { }
+    public void meth57175() { }
+    public void meth57176() { }
+    public void meth57177() { }
+    public void meth57178() { }
+    public void meth57179() { }
+    public void meth57180() { }
+    public void meth57181() { }
+    public void meth57182() { }
+    public void meth57183() { }
+    public void meth57184() { }
+    public void meth57185() { }
+    public void meth57186() { }
+    public void meth57187() { }
+    public void meth57188() { }
+    public void meth57189() { }
+    public void meth57190() { }
+    public void meth57191() { }
+    public void meth57192() { }
+    public void meth57193() { }
+    public void meth57194() { }
+    public void meth57195() { }
+    public void meth57196() { }
+    public void meth57197() { }
+    public void meth57198() { }
+    public void meth57199() { }
+    public void meth57200() { }
+    public void meth57201() { }
+    public void meth57202() { }
+    public void meth57203() { }
+    public void meth57204() { }
+    public void meth57205() { }
+    public void meth57206() { }
+    public void meth57207() { }
+    public void meth57208() { }
+    public void meth57209() { }
+    public void meth57210() { }
+    public void meth57211() { }
+    public void meth57212() { }
+    public void meth57213() { }
+    public void meth57214() { }
+    public void meth57215() { }
+    public void meth57216() { }
+    public void meth57217() { }
+    public void meth57218() { }
+    public void meth57219() { }
+    public void meth57220() { }
+    public void meth57221() { }
+    public void meth57222() { }
+    public void meth57223() { }
+    public void meth57224() { }
+    public void meth57225() { }
+    public void meth57226() { }
+    public void meth57227() { }
+    public void meth57228() { }
+    public void meth57229() { }
+    public void meth57230() { }
+    public void meth57231() { }
+    public void meth57232() { }
+    public void meth57233() { }
+    public void meth57234() { }
+    public void meth57235() { }
+    public void meth57236() { }
+    public void meth57237() { }
+    public void meth57238() { }
+    public void meth57239() { }
+    public void meth57240() { }
+    public void meth57241() { }
+    public void meth57242() { }
+    public void meth57243() { }
+    public void meth57244() { }
+    public void meth57245() { }
+    public void meth57246() { }
+    public void meth57247() { }
+    public void meth57248() { }
+    public void meth57249() { }
+    public void meth57250() { }
+    public void meth57251() { }
+    public void meth57252() { }
+    public void meth57253() { }
+    public void meth57254() { }
+    public void meth57255() { }
+    public void meth57256() { }
+    public void meth57257() { }
+    public void meth57258() { }
+    public void meth57259() { }
+    public void meth57260() { }
+    public void meth57261() { }
+    public void meth57262() { }
+    public void meth57263() { }
+    public void meth57264() { }
+    public void meth57265() { }
+    public void meth57266() { }
+    public void meth57267() { }
+    public void meth57268() { }
+    public void meth57269() { }
+    public void meth57270() { }
+    public void meth57271() { }
+    public void meth57272() { }
+    public void meth57273() { }
+    public void meth57274() { }
+    public void meth57275() { }
+    public void meth57276() { }
+    public void meth57277() { }
+    public void meth57278() { }
+    public void meth57279() { }
+    public void meth57280() { }
+    public void meth57281() { }
+    public void meth57282() { }
+    public void meth57283() { }
+    public void meth57284() { }
+    public void meth57285() { }
+    public void meth57286() { }
+    public void meth57287() { }
+    public void meth57288() { }
+    public void meth57289() { }
+    public void meth57290() { }
+    public void meth57291() { }
+    public void meth57292() { }
+    public void meth57293() { }
+    public void meth57294() { }
+    public void meth57295() { }
+    public void meth57296() { }
+    public void meth57297() { }
+    public void meth57298() { }
+    public void meth57299() { }
+    public void meth57300() { }
+    public void meth57301() { }
+    public void meth57302() { }
+    public void meth57303() { }
+    public void meth57304() { }
+    public void meth57305() { }
+    public void meth57306() { }
+    public void meth57307() { }
+    public void meth57308() { }
+    public void meth57309() { }
+    public void meth57310() { }
+    public void meth57311() { }
+    public void meth57312() { }
+    public void meth57313() { }
+    public void meth57314() { }
+    public void meth57315() { }
+    public void meth57316() { }
+    public void meth57317() { }
+    public void meth57318() { }
+    public void meth57319() { }
+    public void meth57320() { }
+    public void meth57321() { }
+    public void meth57322() { }
+    public void meth57323() { }
+    public void meth57324() { }
+    public void meth57325() { }
+    public void meth57326() { }
+    public void meth57327() { }
+    public void meth57328() { }
+    public void meth57329() { }
+    public void meth57330() { }
+    public void meth57331() { }
+    public void meth57332() { }
+    public void meth57333() { }
+    public void meth57334() { }
+    public void meth57335() { }
+    public void meth57336() { }
+    public void meth57337() { }
+    public void meth57338() { }
+    public void meth57339() { }
+    public void meth57340() { }
+    public void meth57341() { }
+    public void meth57342() { }
+    public void meth57343() { }
+    public void meth57344() { }
+    public void meth57345() { }
+    public void meth57346() { }
+    public void meth57347() { }
+    public void meth57348() { }
+    public void meth57349() { }
+    public void meth57350() { }
+    public void meth57351() { }
+    public void meth57352() { }
+    public void meth57353() { }
+    public void meth57354() { }
+    public void meth57355() { }
+    public void meth57356() { }
+    public void meth57357() { }
+    public void meth57358() { }
+    public void meth57359() { }
+    public void meth57360() { }
+    public void meth57361() { }
+    public void meth57362() { }
+    public void meth57363() { }
+    public void meth57364() { }
+    public void meth57365() { }
+    public void meth57366() { }
+    public void meth57367() { }
+    public void meth57368() { }
+    public void meth57369() { }
+    public void meth57370() { }
+    public void meth57371() { }
+    public void meth57372() { }
+    public void meth57373() { }
+    public void meth57374() { }
+    public void meth57375() { }
+    public void meth57376() { }
+    public void meth57377() { }
+    public void meth57378() { }
+    public void meth57379() { }
+    public void meth57380() { }
+    public void meth57381() { }
+    public void meth57382() { }
+    public void meth57383() { }
+    public void meth57384() { }
+    public void meth57385() { }
+    public void meth57386() { }
+    public void meth57387() { }
+    public void meth57388() { }
+    public void meth57389() { }
+    public void meth57390() { }
+    public void meth57391() { }
+    public void meth57392() { }
+    public void meth57393() { }
+    public void meth57394() { }
+    public void meth57395() { }
+    public void meth57396() { }
+    public void meth57397() { }
+    public void meth57398() { }
+    public void meth57399() { }
+    public void meth57400() { }
+    public void meth57401() { }
+    public void meth57402() { }
+    public void meth57403() { }
+    public void meth57404() { }
+    public void meth57405() { }
+    public void meth57406() { }
+    public void meth57407() { }
+    public void meth57408() { }
+    public void meth57409() { }
+    public void meth57410() { }
+    public void meth57411() { }
+    public void meth57412() { }
+    public void meth57413() { }
+    public void meth57414() { }
+    public void meth57415() { }
+    public void meth57416() { }
+    public void meth57417() { }
+    public void meth57418() { }
+    public void meth57419() { }
+    public void meth57420() { }
+    public void meth57421() { }
+    public void meth57422() { }
+    public void meth57423() { }
+    public void meth57424() { }
+    public void meth57425() { }
+    public void meth57426() { }
+    public void meth57427() { }
+    public void meth57428() { }
+    public void meth57429() { }
+    public void meth57430() { }
+    public void meth57431() { }
+    public void meth57432() { }
+    public void meth57433() { }
+    public void meth57434() { }
+    public void meth57435() { }
+    public void meth57436() { }
+    public void meth57437() { }
+    public void meth57438() { }
+    public void meth57439() { }
+    public void meth57440() { }
+    public void meth57441() { }
+    public void meth57442() { }
+    public void meth57443() { }
+    public void meth57444() { }
+    public void meth57445() { }
+    public void meth57446() { }
+    public void meth57447() { }
+    public void meth57448() { }
+    public void meth57449() { }
+    public void meth57450() { }
+    public void meth57451() { }
+    public void meth57452() { }
+    public void meth57453() { }
+    public void meth57454() { }
+    public void meth57455() { }
+    public void meth57456() { }
+    public void meth57457() { }
+    public void meth57458() { }
+    public void meth57459() { }
+    public void meth57460() { }
+    public void meth57461() { }
+    public void meth57462() { }
+    public void meth57463() { }
+    public void meth57464() { }
+    public void meth57465() { }
+    public void meth57466() { }
+    public void meth57467() { }
+    public void meth57468() { }
+    public void meth57469() { }
+    public void meth57470() { }
+    public void meth57471() { }
+    public void meth57472() { }
+    public void meth57473() { }
+    public void meth57474() { }
+    public void meth57475() { }
+    public void meth57476() { }
+    public void meth57477() { }
+    public void meth57478() { }
+    public void meth57479() { }
+    public void meth57480() { }
+    public void meth57481() { }
+    public void meth57482() { }
+    public void meth57483() { }
+    public void meth57484() { }
+    public void meth57485() { }
+    public void meth57486() { }
+    public void meth57487() { }
+    public void meth57488() { }
+    public void meth57489() { }
+    public void meth57490() { }
+    public void meth57491() { }
+    public void meth57492() { }
+    public void meth57493() { }
+    public void meth57494() { }
+    public void meth57495() { }
+    public void meth57496() { }
+    public void meth57497() { }
+    public void meth57498() { }
+    public void meth57499() { }
+    public void meth57500() { }
+    public void meth57501() { }
+    public void meth57502() { }
+    public void meth57503() { }
+    public void meth57504() { }
+    public void meth57505() { }
+    public void meth57506() { }
+    public void meth57507() { }
+    public void meth57508() { }
+    public void meth57509() { }
+    public void meth57510() { }
+    public void meth57511() { }
+    public void meth57512() { }
+    public void meth57513() { }
+    public void meth57514() { }
+    public void meth57515() { }
+    public void meth57516() { }
+    public void meth57517() { }
+    public void meth57518() { }
+    public void meth57519() { }
+    public void meth57520() { }
+    public void meth57521() { }
+    public void meth57522() { }
+    public void meth57523() { }
+    public void meth57524() { }
+    public void meth57525() { }
+    public void meth57526() { }
+    public void meth57527() { }
+    public void meth57528() { }
+    public void meth57529() { }
+    public void meth57530() { }
+    public void meth57531() { }
+    public void meth57532() { }
+    public void meth57533() { }
+    public void meth57534() { }
+    public void meth57535() { }
+    public void meth57536() { }
+    public void meth57537() { }
+    public void meth57538() { }
+    public void meth57539() { }
+    public void meth57540() { }
+    public void meth57541() { }
+    public void meth57542() { }
+    public void meth57543() { }
+    public void meth57544() { }
+    public void meth57545() { }
+    public void meth57546() { }
+    public void meth57547() { }
+    public void meth57548() { }
+    public void meth57549() { }
+    public void meth57550() { }
+    public void meth57551() { }
+    public void meth57552() { }
+    public void meth57553() { }
+    public void meth57554() { }
+    public void meth57555() { }
+    public void meth57556() { }
+    public void meth57557() { }
+    public void meth57558() { }
+    public void meth57559() { }
+    public void meth57560() { }
+    public void meth57561() { }
+    public void meth57562() { }
+    public void meth57563() { }
+    public void meth57564() { }
+    public void meth57565() { }
+    public void meth57566() { }
+    public void meth57567() { }
+    public void meth57568() { }
+    public void meth57569() { }
+    public void meth57570() { }
+    public void meth57571() { }
+    public void meth57572() { }
+    public void meth57573() { }
+    public void meth57574() { }
+    public void meth57575() { }
+    public void meth57576() { }
+    public void meth57577() { }
+    public void meth57578() { }
+    public void meth57579() { }
+    public void meth57580() { }
+    public void meth57581() { }
+    public void meth57582() { }
+    public void meth57583() { }
+    public void meth57584() { }
+    public void meth57585() { }
+    public void meth57586() { }
+    public void meth57587() { }
+    public void meth57588() { }
+    public void meth57589() { }
+    public void meth57590() { }
+    public void meth57591() { }
+    public void meth57592() { }
+    public void meth57593() { }
+    public void meth57594() { }
+    public void meth57595() { }
+    public void meth57596() { }
+    public void meth57597() { }
+    public void meth57598() { }
+    public void meth57599() { }
+    public void meth57600() { }
+    public void meth57601() { }
+    public void meth57602() { }
+    public void meth57603() { }
+    public void meth57604() { }
+    public void meth57605() { }
+    public void meth57606() { }
+    public void meth57607() { }
+    public void meth57608() { }
+    public void meth57609() { }
+    public void meth57610() { }
+    public void meth57611() { }
+    public void meth57612() { }
+    public void meth57613() { }
+    public void meth57614() { }
+    public void meth57615() { }
+    public void meth57616() { }
+    public void meth57617() { }
+    public void meth57618() { }
+    public void meth57619() { }
+    public void meth57620() { }
+    public void meth57621() { }
+    public void meth57622() { }
+    public void meth57623() { }
+    public void meth57624() { }
+    public void meth57625() { }
+    public void meth57626() { }
+    public void meth57627() { }
+    public void meth57628() { }
+    public void meth57629() { }
+    public void meth57630() { }
+    public void meth57631() { }
+    public void meth57632() { }
+    public void meth57633() { }
+    public void meth57634() { }
+    public void meth57635() { }
+    public void meth57636() { }
+    public void meth57637() { }
+    public void meth57638() { }
+    public void meth57639() { }
+    public void meth57640() { }
+    public void meth57641() { }
+    public void meth57642() { }
+    public void meth57643() { }
+    public void meth57644() { }
+    public void meth57645() { }
+    public void meth57646() { }
+    public void meth57647() { }
+    public void meth57648() { }
+    public void meth57649() { }
+    public void meth57650() { }
+    public void meth57651() { }
+    public void meth57652() { }
+    public void meth57653() { }
+    public void meth57654() { }
+    public void meth57655() { }
+    public void meth57656() { }
+    public void meth57657() { }
+    public void meth57658() { }
+    public void meth57659() { }
+    public void meth57660() { }
+    public void meth57661() { }
+    public void meth57662() { }
+    public void meth57663() { }
+    public void meth57664() { }
+    public void meth57665() { }
+    public void meth57666() { }
+    public void meth57667() { }
+    public void meth57668() { }
+    public void meth57669() { }
+    public void meth57670() { }
+    public void meth57671() { }
+    public void meth57672() { }
+    public void meth57673() { }
+    public void meth57674() { }
+    public void meth57675() { }
+    public void meth57676() { }
+    public void meth57677() { }
+    public void meth57678() { }
+    public void meth57679() { }
+    public void meth57680() { }
+    public void meth57681() { }
+    public void meth57682() { }
+    public void meth57683() { }
+    public void meth57684() { }
+    public void meth57685() { }
+    public void meth57686() { }
+    public void meth57687() { }
+    public void meth57688() { }
+    public void meth57689() { }
+    public void meth57690() { }
+    public void meth57691() { }
+    public void meth57692() { }
+    public void meth57693() { }
+    public void meth57694() { }
+    public void meth57695() { }
+    public void meth57696() { }
+    public void meth57697() { }
+    public void meth57698() { }
+    public void meth57699() { }
+    public void meth57700() { }
+    public void meth57701() { }
+    public void meth57702() { }
+    public void meth57703() { }
+    public void meth57704() { }
+    public void meth57705() { }
+    public void meth57706() { }
+    public void meth57707() { }
+    public void meth57708() { }
+    public void meth57709() { }
+    public void meth57710() { }
+    public void meth57711() { }
+    public void meth57712() { }
+    public void meth57713() { }
+    public void meth57714() { }
+    public void meth57715() { }
+    public void meth57716() { }
+    public void meth57717() { }
+    public void meth57718() { }
+    public void meth57719() { }
+    public void meth57720() { }
+    public void meth57721() { }
+    public void meth57722() { }
+    public void meth57723() { }
+    public void meth57724() { }
+    public void meth57725() { }
+    public void meth57726() { }
+    public void meth57727() { }
+    public void meth57728() { }
+    public void meth57729() { }
+    public void meth57730() { }
+    public void meth57731() { }
+    public void meth57732() { }
+    public void meth57733() { }
+    public void meth57734() { }
+    public void meth57735() { }
+    public void meth57736() { }
+    public void meth57737() { }
+    public void meth57738() { }
+    public void meth57739() { }
+    public void meth57740() { }
+    public void meth57741() { }
+    public void meth57742() { }
+    public void meth57743() { }
+    public void meth57744() { }
+    public void meth57745() { }
+    public void meth57746() { }
+    public void meth57747() { }
+    public void meth57748() { }
+    public void meth57749() { }
+    public void meth57750() { }
+    public void meth57751() { }
+    public void meth57752() { }
+    public void meth57753() { }
+    public void meth57754() { }
+    public void meth57755() { }
+    public void meth57756() { }
+    public void meth57757() { }
+    public void meth57758() { }
+    public void meth57759() { }
+    public void meth57760() { }
+    public void meth57761() { }
+    public void meth57762() { }
+    public void meth57763() { }
+    public void meth57764() { }
+    public void meth57765() { }
+    public void meth57766() { }
+    public void meth57767() { }
+    public void meth57768() { }
+    public void meth57769() { }
+    public void meth57770() { }
+    public void meth57771() { }
+    public void meth57772() { }
+    public void meth57773() { }
+    public void meth57774() { }
+    public void meth57775() { }
+    public void meth57776() { }
+    public void meth57777() { }
+    public void meth57778() { }
+    public void meth57779() { }
+    public void meth57780() { }
+    public void meth57781() { }
+    public void meth57782() { }
+    public void meth57783() { }
+    public void meth57784() { }
+    public void meth57785() { }
+    public void meth57786() { }
+    public void meth57787() { }
+    public void meth57788() { }
+    public void meth57789() { }
+    public void meth57790() { }
+    public void meth57791() { }
+    public void meth57792() { }
+    public void meth57793() { }
+    public void meth57794() { }
+    public void meth57795() { }
+    public void meth57796() { }
+    public void meth57797() { }
+    public void meth57798() { }
+    public void meth57799() { }
+    public void meth57800() { }
+    public void meth57801() { }
+    public void meth57802() { }
+    public void meth57803() { }
+    public void meth57804() { }
+    public void meth57805() { }
+    public void meth57806() { }
+    public void meth57807() { }
+    public void meth57808() { }
+    public void meth57809() { }
+    public void meth57810() { }
+    public void meth57811() { }
+    public void meth57812() { }
+    public void meth57813() { }
+    public void meth57814() { }
+    public void meth57815() { }
+    public void meth57816() { }
+    public void meth57817() { }
+    public void meth57818() { }
+    public void meth57819() { }
+    public void meth57820() { }
+    public void meth57821() { }
+    public void meth57822() { }
+    public void meth57823() { }
+    public void meth57824() { }
+    public void meth57825() { }
+    public void meth57826() { }
+    public void meth57827() { }
+    public void meth57828() { }
+    public void meth57829() { }
+    public void meth57830() { }
+    public void meth57831() { }
+    public void meth57832() { }
+    public void meth57833() { }
+    public void meth57834() { }
+    public void meth57835() { }
+    public void meth57836() { }
+    public void meth57837() { }
+    public void meth57838() { }
+    public void meth57839() { }
+    public void meth57840() { }
+    public void meth57841() { }
+    public void meth57842() { }
+    public void meth57843() { }
+    public void meth57844() { }
+    public void meth57845() { }
+    public void meth57846() { }
+    public void meth57847() { }
+    public void meth57848() { }
+    public void meth57849() { }
+    public void meth57850() { }
+    public void meth57851() { }
+    public void meth57852() { }
+    public void meth57853() { }
+    public void meth57854() { }
+    public void meth57855() { }
+    public void meth57856() { }
+    public void meth57857() { }
+    public void meth57858() { }
+    public void meth57859() { }
+    public void meth57860() { }
+    public void meth57861() { }
+    public void meth57862() { }
+    public void meth57863() { }
+    public void meth57864() { }
+    public void meth57865() { }
+    public void meth57866() { }
+    public void meth57867() { }
+    public void meth57868() { }
+    public void meth57869() { }
+    public void meth57870() { }
+    public void meth57871() { }
+    public void meth57872() { }
+    public void meth57873() { }
+    public void meth57874() { }
+    public void meth57875() { }
+    public void meth57876() { }
+    public void meth57877() { }
+    public void meth57878() { }
+    public void meth57879() { }
+    public void meth57880() { }
+    public void meth57881() { }
+    public void meth57882() { }
+    public void meth57883() { }
+    public void meth57884() { }
+    public void meth57885() { }
+    public void meth57886() { }
+    public void meth57887() { }
+    public void meth57888() { }
+    public void meth57889() { }
+    public void meth57890() { }
+    public void meth57891() { }
+    public void meth57892() { }
+    public void meth57893() { }
+    public void meth57894() { }
+    public void meth57895() { }
+    public void meth57896() { }
+    public void meth57897() { }
+    public void meth57898() { }
+    public void meth57899() { }
+    public void meth57900() { }
+    public void meth57901() { }
+    public void meth57902() { }
+    public void meth57903() { }
+    public void meth57904() { }
+    public void meth57905() { }
+    public void meth57906() { }
+    public void meth57907() { }
+    public void meth57908() { }
+    public void meth57909() { }
+    public void meth57910() { }
+    public void meth57911() { }
+    public void meth57912() { }
+    public void meth57913() { }
+    public void meth57914() { }
+    public void meth57915() { }
+    public void meth57916() { }
+    public void meth57917() { }
+    public void meth57918() { }
+    public void meth57919() { }
+    public void meth57920() { }
+    public void meth57921() { }
+    public void meth57922() { }
+    public void meth57923() { }
+    public void meth57924() { }
+    public void meth57925() { }
+    public void meth57926() { }
+    public void meth57927() { }
+    public void meth57928() { }
+    public void meth57929() { }
+    public void meth57930() { }
+    public void meth57931() { }
+    public void meth57932() { }
+    public void meth57933() { }
+    public void meth57934() { }
+    public void meth57935() { }
+    public void meth57936() { }
+    public void meth57937() { }
+    public void meth57938() { }
+    public void meth57939() { }
+    public void meth57940() { }
+    public void meth57941() { }
+    public void meth57942() { }
+    public void meth57943() { }
+    public void meth57944() { }
+    public void meth57945() { }
+    public void meth57946() { }
+    public void meth57947() { }
+    public void meth57948() { }
+    public void meth57949() { }
+    public void meth57950() { }
+    public void meth57951() { }
+    public void meth57952() { }
+    public void meth57953() { }
+    public void meth57954() { }
+    public void meth57955() { }
+    public void meth57956() { }
+    public void meth57957() { }
+    public void meth57958() { }
+    public void meth57959() { }
+    public void meth57960() { }
+    public void meth57961() { }
+    public void meth57962() { }
+    public void meth57963() { }
+    public void meth57964() { }
+    public void meth57965() { }
+    public void meth57966() { }
+    public void meth57967() { }
+    public void meth57968() { }
+    public void meth57969() { }
+    public void meth57970() { }
+    public void meth57971() { }
+    public void meth57972() { }
+    public void meth57973() { }
+    public void meth57974() { }
+    public void meth57975() { }
+    public void meth57976() { }
+    public void meth57977() { }
+    public void meth57978() { }
+    public void meth57979() { }
+    public void meth57980() { }
+    public void meth57981() { }
+    public void meth57982() { }
+    public void meth57983() { }
+    public void meth57984() { }
+    public void meth57985() { }
+    public void meth57986() { }
+    public void meth57987() { }
+    public void meth57988() { }
+    public void meth57989() { }
+    public void meth57990() { }
+    public void meth57991() { }
+    public void meth57992() { }
+    public void meth57993() { }
+    public void meth57994() { }
+    public void meth57995() { }
+    public void meth57996() { }
+    public void meth57997() { }
+    public void meth57998() { }
+    public void meth57999() { }
+    public void meth58000() { }
+    public void meth58001() { }
+    public void meth58002() { }
+    public void meth58003() { }
+    public void meth58004() { }
+    public void meth58005() { }
+    public void meth58006() { }
+    public void meth58007() { }
+    public void meth58008() { }
+    public void meth58009() { }
+    public void meth58010() { }
+    public void meth58011() { }
+    public void meth58012() { }
+    public void meth58013() { }
+    public void meth58014() { }
+    public void meth58015() { }
+    public void meth58016() { }
+    public void meth58017() { }
+    public void meth58018() { }
+    public void meth58019() { }
+    public void meth58020() { }
+    public void meth58021() { }
+    public void meth58022() { }
+    public void meth58023() { }
+    public void meth58024() { }
+    public void meth58025() { }
+    public void meth58026() { }
+    public void meth58027() { }
+    public void meth58028() { }
+    public void meth58029() { }
+    public void meth58030() { }
+    public void meth58031() { }
+    public void meth58032() { }
+    public void meth58033() { }
+    public void meth58034() { }
+    public void meth58035() { }
+    public void meth58036() { }
+    public void meth58037() { }
+    public void meth58038() { }
+    public void meth58039() { }
+    public void meth58040() { }
+    public void meth58041() { }
+    public void meth58042() { }
+    public void meth58043() { }
+    public void meth58044() { }
+    public void meth58045() { }
+    public void meth58046() { }
+    public void meth58047() { }
+    public void meth58048() { }
+    public void meth58049() { }
+    public void meth58050() { }
+    public void meth58051() { }
+    public void meth58052() { }
+    public void meth58053() { }
+    public void meth58054() { }
+    public void meth58055() { }
+    public void meth58056() { }
+    public void meth58057() { }
+    public void meth58058() { }
+    public void meth58059() { }
+    public void meth58060() { }
+    public void meth58061() { }
+    public void meth58062() { }
+    public void meth58063() { }
+    public void meth58064() { }
+    public void meth58065() { }
+    public void meth58066() { }
+    public void meth58067() { }
+    public void meth58068() { }
+    public void meth58069() { }
+    public void meth58070() { }
+    public void meth58071() { }
+    public void meth58072() { }
+    public void meth58073() { }
+    public void meth58074() { }
+    public void meth58075() { }
+    public void meth58076() { }
+    public void meth58077() { }
+    public void meth58078() { }
+    public void meth58079() { }
+    public void meth58080() { }
+    public void meth58081() { }
+    public void meth58082() { }
+    public void meth58083() { }
+    public void meth58084() { }
+    public void meth58085() { }
+    public void meth58086() { }
+    public void meth58087() { }
+    public void meth58088() { }
+    public void meth58089() { }
+    public void meth58090() { }
+    public void meth58091() { }
+    public void meth58092() { }
+    public void meth58093() { }
+    public void meth58094() { }
+    public void meth58095() { }
+    public void meth58096() { }
+    public void meth58097() { }
+    public void meth58098() { }
+    public void meth58099() { }
+    public void meth58100() { }
+    public void meth58101() { }
+    public void meth58102() { }
+    public void meth58103() { }
+    public void meth58104() { }
+    public void meth58105() { }
+    public void meth58106() { }
+    public void meth58107() { }
+    public void meth58108() { }
+    public void meth58109() { }
+    public void meth58110() { }
+    public void meth58111() { }
+    public void meth58112() { }
+    public void meth58113() { }
+    public void meth58114() { }
+    public void meth58115() { }
+    public void meth58116() { }
+    public void meth58117() { }
+    public void meth58118() { }
+    public void meth58119() { }
+    public void meth58120() { }
+    public void meth58121() { }
+    public void meth58122() { }
+    public void meth58123() { }
+    public void meth58124() { }
+    public void meth58125() { }
+    public void meth58126() { }
+    public void meth58127() { }
+    public void meth58128() { }
+    public void meth58129() { }
+    public void meth58130() { }
+    public void meth58131() { }
+    public void meth58132() { }
+    public void meth58133() { }
+    public void meth58134() { }
+    public void meth58135() { }
+    public void meth58136() { }
+    public void meth58137() { }
+    public void meth58138() { }
+    public void meth58139() { }
+    public void meth58140() { }
+    public void meth58141() { }
+    public void meth58142() { }
+    public void meth58143() { }
+    public void meth58144() { }
+    public void meth58145() { }
+    public void meth58146() { }
+    public void meth58147() { }
+    public void meth58148() { }
+    public void meth58149() { }
+    public void meth58150() { }
+    public void meth58151() { }
+    public void meth58152() { }
+    public void meth58153() { }
+    public void meth58154() { }
+    public void meth58155() { }
+    public void meth58156() { }
+    public void meth58157() { }
+    public void meth58158() { }
+    public void meth58159() { }
+    public void meth58160() { }
+    public void meth58161() { }
+    public void meth58162() { }
+    public void meth58163() { }
+    public void meth58164() { }
+    public void meth58165() { }
+    public void meth58166() { }
+    public void meth58167() { }
+    public void meth58168() { }
+    public void meth58169() { }
+    public void meth58170() { }
+    public void meth58171() { }
+    public void meth58172() { }
+    public void meth58173() { }
+    public void meth58174() { }
+    public void meth58175() { }
+    public void meth58176() { }
+    public void meth58177() { }
+    public void meth58178() { }
+    public void meth58179() { }
+    public void meth58180() { }
+    public void meth58181() { }
+    public void meth58182() { }
+    public void meth58183() { }
+    public void meth58184() { }
+    public void meth58185() { }
+    public void meth58186() { }
+    public void meth58187() { }
+    public void meth58188() { }
+    public void meth58189() { }
+    public void meth58190() { }
+    public void meth58191() { }
+    public void meth58192() { }
+    public void meth58193() { }
+    public void meth58194() { }
+    public void meth58195() { }
+    public void meth58196() { }
+    public void meth58197() { }
+    public void meth58198() { }
+    public void meth58199() { }
+    public void meth58200() { }
+    public void meth58201() { }
+    public void meth58202() { }
+    public void meth58203() { }
+    public void meth58204() { }
+    public void meth58205() { }
+    public void meth58206() { }
+    public void meth58207() { }
+    public void meth58208() { }
+    public void meth58209() { }
+    public void meth58210() { }
+    public void meth58211() { }
+    public void meth58212() { }
+    public void meth58213() { }
+    public void meth58214() { }
+    public void meth58215() { }
+    public void meth58216() { }
+    public void meth58217() { }
+    public void meth58218() { }
+    public void meth58219() { }
+    public void meth58220() { }
+    public void meth58221() { }
+    public void meth58222() { }
+    public void meth58223() { }
+    public void meth58224() { }
+    public void meth58225() { }
+    public void meth58226() { }
+    public void meth58227() { }
+    public void meth58228() { }
+    public void meth58229() { }
+    public void meth58230() { }
+    public void meth58231() { }
+    public void meth58232() { }
+    public void meth58233() { }
+    public void meth58234() { }
+    public void meth58235() { }
+    public void meth58236() { }
+    public void meth58237() { }
+    public void meth58238() { }
+    public void meth58239() { }
+    public void meth58240() { }
+    public void meth58241() { }
+    public void meth58242() { }
+    public void meth58243() { }
+    public void meth58244() { }
+    public void meth58245() { }
+    public void meth58246() { }
+    public void meth58247() { }
+    public void meth58248() { }
+    public void meth58249() { }
+    public void meth58250() { }
+    public void meth58251() { }
+    public void meth58252() { }
+    public void meth58253() { }
+    public void meth58254() { }
+    public void meth58255() { }
+    public void meth58256() { }
+    public void meth58257() { }
+    public void meth58258() { }
+    public void meth58259() { }
+    public void meth58260() { }
+    public void meth58261() { }
+    public void meth58262() { }
+    public void meth58263() { }
+    public void meth58264() { }
+    public void meth58265() { }
+    public void meth58266() { }
+    public void meth58267() { }
+    public void meth58268() { }
+    public void meth58269() { }
+    public void meth58270() { }
+    public void meth58271() { }
+    public void meth58272() { }
+    public void meth58273() { }
+    public void meth58274() { }
+    public void meth58275() { }
+    public void meth58276() { }
+    public void meth58277() { }
+    public void meth58278() { }
+    public void meth58279() { }
+    public void meth58280() { }
+    public void meth58281() { }
+    public void meth58282() { }
+    public void meth58283() { }
+    public void meth58284() { }
+    public void meth58285() { }
+    public void meth58286() { }
+    public void meth58287() { }
+    public void meth58288() { }
+    public void meth58289() { }
+    public void meth58290() { }
+    public void meth58291() { }
+    public void meth58292() { }
+    public void meth58293() { }
+    public void meth58294() { }
+    public void meth58295() { }
+    public void meth58296() { }
+    public void meth58297() { }
+    public void meth58298() { }
+    public void meth58299() { }
+    public void meth58300() { }
+    public void meth58301() { }
+    public void meth58302() { }
+    public void meth58303() { }
+    public void meth58304() { }
+    public void meth58305() { }
+    public void meth58306() { }
+    public void meth58307() { }
+    public void meth58308() { }
+    public void meth58309() { }
+    public void meth58310() { }
+    public void meth58311() { }
+    public void meth58312() { }
+    public void meth58313() { }
+    public void meth58314() { }
+    public void meth58315() { }
+    public void meth58316() { }
+    public void meth58317() { }
+    public void meth58318() { }
+    public void meth58319() { }
+    public void meth58320() { }
+    public void meth58321() { }
+    public void meth58322() { }
+    public void meth58323() { }
+    public void meth58324() { }
+    public void meth58325() { }
+    public void meth58326() { }
+    public void meth58327() { }
+    public void meth58328() { }
+    public void meth58329() { }
+    public void meth58330() { }
+    public void meth58331() { }
+    public void meth58332() { }
+    public void meth58333() { }
+    public void meth58334() { }
+    public void meth58335() { }
+    public void meth58336() { }
+    public void meth58337() { }
+    public void meth58338() { }
+    public void meth58339() { }
+    public void meth58340() { }
+    public void meth58341() { }
+    public void meth58342() { }
+    public void meth58343() { }
+    public void meth58344() { }
+    public void meth58345() { }
+    public void meth58346() { }
+    public void meth58347() { }
+    public void meth58348() { }
+    public void meth58349() { }
+    public void meth58350() { }
+    public void meth58351() { }
+    public void meth58352() { }
+    public void meth58353() { }
+    public void meth58354() { }
+    public void meth58355() { }
+    public void meth58356() { }
+    public void meth58357() { }
+    public void meth58358() { }
+    public void meth58359() { }
+    public void meth58360() { }
+    public void meth58361() { }
+    public void meth58362() { }
+    public void meth58363() { }
+    public void meth58364() { }
+    public void meth58365() { }
+    public void meth58366() { }
+    public void meth58367() { }
+    public void meth58368() { }
+    public void meth58369() { }
+    public void meth58370() { }
+    public void meth58371() { }
+    public void meth58372() { }
+    public void meth58373() { }
+    public void meth58374() { }
+    public void meth58375() { }
+    public void meth58376() { }
+    public void meth58377() { }
+    public void meth58378() { }
+    public void meth58379() { }
+    public void meth58380() { }
+    public void meth58381() { }
+    public void meth58382() { }
+    public void meth58383() { }
+    public void meth58384() { }
+    public void meth58385() { }
+    public void meth58386() { }
+    public void meth58387() { }
+    public void meth58388() { }
+    public void meth58389() { }
+    public void meth58390() { }
+    public void meth58391() { }
+    public void meth58392() { }
+    public void meth58393() { }
+    public void meth58394() { }
+    public void meth58395() { }
+    public void meth58396() { }
+    public void meth58397() { }
+    public void meth58398() { }
+    public void meth58399() { }
+    public void meth58400() { }
+    public void meth58401() { }
+    public void meth58402() { }
+    public void meth58403() { }
+    public void meth58404() { }
+    public void meth58405() { }
+    public void meth58406() { }
+    public void meth58407() { }
+    public void meth58408() { }
+    public void meth58409() { }
+    public void meth58410() { }
+    public void meth58411() { }
+    public void meth58412() { }
+    public void meth58413() { }
+    public void meth58414() { }
+    public void meth58415() { }
+    public void meth58416() { }
+    public void meth58417() { }
+    public void meth58418() { }
+    public void meth58419() { }
+    public void meth58420() { }
+    public void meth58421() { }
+    public void meth58422() { }
+    public void meth58423() { }
+    public void meth58424() { }
+    public void meth58425() { }
+    public void meth58426() { }
+    public void meth58427() { }
+    public void meth58428() { }
+    public void meth58429() { }
+    public void meth58430() { }
+    public void meth58431() { }
+    public void meth58432() { }
+    public void meth58433() { }
+    public void meth58434() { }
+    public void meth58435() { }
+    public void meth58436() { }
+    public void meth58437() { }
+    public void meth58438() { }
+    public void meth58439() { }
+    public void meth58440() { }
+    public void meth58441() { }
+    public void meth58442() { }
+    public void meth58443() { }
+    public void meth58444() { }
+    public void meth58445() { }
+    public void meth58446() { }
+    public void meth58447() { }
+    public void meth58448() { }
+    public void meth58449() { }
+    public void meth58450() { }
+    public void meth58451() { }
+    public void meth58452() { }
+    public void meth58453() { }
+    public void meth58454() { }
+    public void meth58455() { }
+    public void meth58456() { }
+    public void meth58457() { }
+    public void meth58458() { }
+    public void meth58459() { }
+    public void meth58460() { }
+    public void meth58461() { }
+    public void meth58462() { }
+    public void meth58463() { }
+    public void meth58464() { }
+    public void meth58465() { }
+    public void meth58466() { }
+    public void meth58467() { }
+    public void meth58468() { }
+    public void meth58469() { }
+    public void meth58470() { }
+    public void meth58471() { }
+    public void meth58472() { }
+    public void meth58473() { }
+    public void meth58474() { }
+    public void meth58475() { }
+    public void meth58476() { }
+    public void meth58477() { }
+    public void meth58478() { }
+    public void meth58479() { }
+    public void meth58480() { }
+    public void meth58481() { }
+    public void meth58482() { }
+    public void meth58483() { }
+    public void meth58484() { }
+    public void meth58485() { }
+    public void meth58486() { }
+    public void meth58487() { }
+    public void meth58488() { }
+    public void meth58489() { }
+    public void meth58490() { }
+    public void meth58491() { }
+    public void meth58492() { }
+    public void meth58493() { }
+    public void meth58494() { }
+    public void meth58495() { }
+    public void meth58496() { }
+    public void meth58497() { }
+    public void meth58498() { }
+    public void meth58499() { }
+    public void meth58500() { }
+    public void meth58501() { }
+    public void meth58502() { }
+    public void meth58503() { }
+    public void meth58504() { }
+    public void meth58505() { }
+    public void meth58506() { }
+    public void meth58507() { }
+    public void meth58508() { }
+    public void meth58509() { }
+    public void meth58510() { }
+    public void meth58511() { }
+    public void meth58512() { }
+    public void meth58513() { }
+    public void meth58514() { }
+    public void meth58515() { }
+    public void meth58516() { }
+    public void meth58517() { }
+    public void meth58518() { }
+    public void meth58519() { }
+    public void meth58520() { }
+    public void meth58521() { }
+    public void meth58522() { }
+    public void meth58523() { }
+    public void meth58524() { }
+    public void meth58525() { }
+    public void meth58526() { }
+    public void meth58527() { }
+    public void meth58528() { }
+    public void meth58529() { }
+    public void meth58530() { }
+    public void meth58531() { }
+    public void meth58532() { }
+    public void meth58533() { }
+    public void meth58534() { }
+    public void meth58535() { }
+    public void meth58536() { }
+    public void meth58537() { }
+    public void meth58538() { }
+    public void meth58539() { }
+    public void meth58540() { }
+    public void meth58541() { }
+    public void meth58542() { }
+    public void meth58543() { }
+    public void meth58544() { }
+    public void meth58545() { }
+    public void meth58546() { }
+    public void meth58547() { }
+    public void meth58548() { }
+    public void meth58549() { }
+    public void meth58550() { }
+    public void meth58551() { }
+    public void meth58552() { }
+    public void meth58553() { }
+    public void meth58554() { }
+    public void meth58555() { }
+    public void meth58556() { }
+    public void meth58557() { }
+    public void meth58558() { }
+    public void meth58559() { }
+    public void meth58560() { }
+    public void meth58561() { }
+    public void meth58562() { }
+    public void meth58563() { }
+    public void meth58564() { }
+    public void meth58565() { }
+    public void meth58566() { }
+    public void meth58567() { }
+    public void meth58568() { }
+    public void meth58569() { }
+    public void meth58570() { }
+    public void meth58571() { }
+    public void meth58572() { }
+    public void meth58573() { }
+    public void meth58574() { }
+    public void meth58575() { }
+    public void meth58576() { }
+    public void meth58577() { }
+    public void meth58578() { }
+    public void meth58579() { }
+    public void meth58580() { }
+    public void meth58581() { }
+    public void meth58582() { }
+    public void meth58583() { }
+    public void meth58584() { }
+    public void meth58585() { }
+    public void meth58586() { }
+    public void meth58587() { }
+    public void meth58588() { }
+    public void meth58589() { }
+    public void meth58590() { }
+    public void meth58591() { }
+    public void meth58592() { }
+    public void meth58593() { }
+    public void meth58594() { }
+    public void meth58595() { }
+    public void meth58596() { }
+    public void meth58597() { }
+    public void meth58598() { }
+    public void meth58599() { }
+    public void meth58600() { }
+    public void meth58601() { }
+    public void meth58602() { }
+    public void meth58603() { }
+    public void meth58604() { }
+    public void meth58605() { }
+    public void meth58606() { }
+    public void meth58607() { }
+    public void meth58608() { }
+    public void meth58609() { }
+    public void meth58610() { }
+    public void meth58611() { }
+    public void meth58612() { }
+    public void meth58613() { }
+    public void meth58614() { }
+    public void meth58615() { }
+    public void meth58616() { }
+    public void meth58617() { }
+    public void meth58618() { }
+    public void meth58619() { }
+    public void meth58620() { }
+    public void meth58621() { }
+    public void meth58622() { }
+    public void meth58623() { }
+    public void meth58624() { }
+    public void meth58625() { }
+    public void meth58626() { }
+    public void meth58627() { }
+    public void meth58628() { }
+    public void meth58629() { }
+    public void meth58630() { }
+    public void meth58631() { }
+    public void meth58632() { }
+    public void meth58633() { }
+    public void meth58634() { }
+    public void meth58635() { }
+    public void meth58636() { }
+    public void meth58637() { }
+    public void meth58638() { }
+    public void meth58639() { }
+    public void meth58640() { }
+    public void meth58641() { }
+    public void meth58642() { }
+    public void meth58643() { }
+    public void meth58644() { }
+    public void meth58645() { }
+    public void meth58646() { }
+    public void meth58647() { }
+    public void meth58648() { }
+    public void meth58649() { }
+    public void meth58650() { }
+    public void meth58651() { }
+    public void meth58652() { }
+    public void meth58653() { }
+    public void meth58654() { }
+    public void meth58655() { }
+    public void meth58656() { }
+    public void meth58657() { }
+    public void meth58658() { }
+    public void meth58659() { }
+    public void meth58660() { }
+    public void meth58661() { }
+    public void meth58662() { }
+    public void meth58663() { }
+    public void meth58664() { }
+    public void meth58665() { }
+    public void meth58666() { }
+    public void meth58667() { }
+    public void meth58668() { }
+    public void meth58669() { }
+    public void meth58670() { }
+    public void meth58671() { }
+    public void meth58672() { }
+    public void meth58673() { }
+    public void meth58674() { }
+    public void meth58675() { }
+    public void meth58676() { }
+    public void meth58677() { }
+    public void meth58678() { }
+    public void meth58679() { }
+    public void meth58680() { }
+    public void meth58681() { }
+    public void meth58682() { }
+    public void meth58683() { }
+    public void meth58684() { }
+    public void meth58685() { }
+    public void meth58686() { }
+    public void meth58687() { }
+    public void meth58688() { }
+    public void meth58689() { }
+    public void meth58690() { }
+    public void meth58691() { }
+    public void meth58692() { }
+    public void meth58693() { }
+    public void meth58694() { }
+    public void meth58695() { }
+    public void meth58696() { }
+    public void meth58697() { }
+    public void meth58698() { }
+    public void meth58699() { }
+    public void meth58700() { }
+    public void meth58701() { }
+    public void meth58702() { }
+    public void meth58703() { }
+    public void meth58704() { }
+    public void meth58705() { }
+    public void meth58706() { }
+    public void meth58707() { }
+    public void meth58708() { }
+    public void meth58709() { }
+    public void meth58710() { }
+    public void meth58711() { }
+    public void meth58712() { }
+    public void meth58713() { }
+    public void meth58714() { }
+    public void meth58715() { }
+    public void meth58716() { }
+    public void meth58717() { }
+    public void meth58718() { }
+    public void meth58719() { }
+    public void meth58720() { }
+    public void meth58721() { }
+    public void meth58722() { }
+    public void meth58723() { }
+    public void meth58724() { }
+    public void meth58725() { }
+    public void meth58726() { }
+    public void meth58727() { }
+    public void meth58728() { }
+    public void meth58729() { }
+    public void meth58730() { }
+    public void meth58731() { }
+    public void meth58732() { }
+    public void meth58733() { }
+    public void meth58734() { }
+    public void meth58735() { }
+    public void meth58736() { }
+    public void meth58737() { }
+    public void meth58738() { }
+    public void meth58739() { }
+    public void meth58740() { }
+    public void meth58741() { }
+    public void meth58742() { }
+    public void meth58743() { }
+    public void meth58744() { }
+    public void meth58745() { }
+    public void meth58746() { }
+    public void meth58747() { }
+    public void meth58748() { }
+    public void meth58749() { }
+    public void meth58750() { }
+    public void meth58751() { }
+    public void meth58752() { }
+    public void meth58753() { }
+    public void meth58754() { }
+    public void meth58755() { }
+    public void meth58756() { }
+    public void meth58757() { }
+    public void meth58758() { }
+    public void meth58759() { }
+    public void meth58760() { }
+    public void meth58761() { }
+    public void meth58762() { }
+    public void meth58763() { }
+    public void meth58764() { }
+    public void meth58765() { }
+    public void meth58766() { }
+    public void meth58767() { }
+    public void meth58768() { }
+    public void meth58769() { }
+    public void meth58770() { }
+    public void meth58771() { }
+    public void meth58772() { }
+    public void meth58773() { }
+    public void meth58774() { }
+    public void meth58775() { }
+    public void meth58776() { }
+    public void meth58777() { }
+    public void meth58778() { }
+    public void meth58779() { }
+    public void meth58780() { }
+    public void meth58781() { }
+    public void meth58782() { }
+    public void meth58783() { }
+    public void meth58784() { }
+    public void meth58785() { }
+    public void meth58786() { }
+    public void meth58787() { }
+    public void meth58788() { }
+    public void meth58789() { }
+    public void meth58790() { }
+    public void meth58791() { }
+    public void meth58792() { }
+    public void meth58793() { }
+    public void meth58794() { }
+    public void meth58795() { }
+    public void meth58796() { }
+    public void meth58797() { }
+    public void meth58798() { }
+    public void meth58799() { }
+    public void meth58800() { }
+    public void meth58801() { }
+    public void meth58802() { }
+    public void meth58803() { }
+    public void meth58804() { }
+    public void meth58805() { }
+    public void meth58806() { }
+    public void meth58807() { }
+    public void meth58808() { }
+    public void meth58809() { }
+    public void meth58810() { }
+    public void meth58811() { }
+    public void meth58812() { }
+    public void meth58813() { }
+    public void meth58814() { }
+    public void meth58815() { }
+    public void meth58816() { }
+    public void meth58817() { }
+    public void meth58818() { }
+    public void meth58819() { }
+    public void meth58820() { }
+    public void meth58821() { }
+    public void meth58822() { }
+    public void meth58823() { }
+    public void meth58824() { }
+    public void meth58825() { }
+    public void meth58826() { }
+    public void meth58827() { }
+    public void meth58828() { }
+    public void meth58829() { }
+    public void meth58830() { }
+    public void meth58831() { }
+    public void meth58832() { }
+    public void meth58833() { }
+    public void meth58834() { }
+    public void meth58835() { }
+    public void meth58836() { }
+    public void meth58837() { }
+    public void meth58838() { }
+    public void meth58839() { }
+    public void meth58840() { }
+    public void meth58841() { }
+    public void meth58842() { }
+    public void meth58843() { }
+    public void meth58844() { }
+    public void meth58845() { }
+    public void meth58846() { }
+    public void meth58847() { }
+    public void meth58848() { }
+    public void meth58849() { }
+    public void meth58850() { }
+    public void meth58851() { }
+    public void meth58852() { }
+    public void meth58853() { }
+    public void meth58854() { }
+    public void meth58855() { }
+    public void meth58856() { }
+    public void meth58857() { }
+    public void meth58858() { }
+    public void meth58859() { }
+    public void meth58860() { }
+    public void meth58861() { }
+    public void meth58862() { }
+    public void meth58863() { }
+    public void meth58864() { }
+    public void meth58865() { }
+    public void meth58866() { }
+    public void meth58867() { }
+    public void meth58868() { }
+    public void meth58869() { }
+    public void meth58870() { }
+    public void meth58871() { }
+    public void meth58872() { }
+    public void meth58873() { }
+    public void meth58874() { }
+    public void meth58875() { }
+    public void meth58876() { }
+    public void meth58877() { }
+    public void meth58878() { }
+    public void meth58879() { }
+    public void meth58880() { }
+    public void meth58881() { }
+    public void meth58882() { }
+    public void meth58883() { }
+    public void meth58884() { }
+    public void meth58885() { }
+    public void meth58886() { }
+    public void meth58887() { }
+    public void meth58888() { }
+    public void meth58889() { }
+    public void meth58890() { }
+    public void meth58891() { }
+    public void meth58892() { }
+    public void meth58893() { }
+    public void meth58894() { }
+    public void meth58895() { }
+    public void meth58896() { }
+    public void meth58897() { }
+    public void meth58898() { }
+    public void meth58899() { }
+    public void meth58900() { }
+    public void meth58901() { }
+    public void meth58902() { }
+    public void meth58903() { }
+    public void meth58904() { }
+    public void meth58905() { }
+    public void meth58906() { }
+    public void meth58907() { }
+    public void meth58908() { }
+    public void meth58909() { }
+    public void meth58910() { }
+    public void meth58911() { }
+    public void meth58912() { }
+    public void meth58913() { }
+    public void meth58914() { }
+    public void meth58915() { }
+    public void meth58916() { }
+    public void meth58917() { }
+    public void meth58918() { }
+    public void meth58919() { }
+    public void meth58920() { }
+    public void meth58921() { }
+    public void meth58922() { }
+    public void meth58923() { }
+    public void meth58924() { }
+    public void meth58925() { }
+    public void meth58926() { }
+    public void meth58927() { }
+    public void meth58928() { }
+    public void meth58929() { }
+    public void meth58930() { }
+    public void meth58931() { }
+    public void meth58932() { }
+    public void meth58933() { }
+    public void meth58934() { }
+    public void meth58935() { }
+    public void meth58936() { }
+    public void meth58937() { }
+    public void meth58938() { }
+    public void meth58939() { }
+    public void meth58940() { }
+    public void meth58941() { }
+    public void meth58942() { }
+    public void meth58943() { }
+    public void meth58944() { }
+    public void meth58945() { }
+    public void meth58946() { }
+    public void meth58947() { }
+    public void meth58948() { }
+    public void meth58949() { }
+    public void meth58950() { }
+    public void meth58951() { }
+    public void meth58952() { }
+    public void meth58953() { }
+    public void meth58954() { }
+    public void meth58955() { }
+    public void meth58956() { }
+    public void meth58957() { }
+    public void meth58958() { }
+    public void meth58959() { }
+    public void meth58960() { }
+    public void meth58961() { }
+    public void meth58962() { }
+    public void meth58963() { }
+    public void meth58964() { }
+    public void meth58965() { }
+    public void meth58966() { }
+    public void meth58967() { }
+    public void meth58968() { }
+    public void meth58969() { }
+    public void meth58970() { }
+    public void meth58971() { }
+    public void meth58972() { }
+    public void meth58973() { }
+    public void meth58974() { }
+    public void meth58975() { }
+    public void meth58976() { }
+    public void meth58977() { }
+    public void meth58978() { }
+    public void meth58979() { }
+    public void meth58980() { }
+    public void meth58981() { }
+    public void meth58982() { }
+    public void meth58983() { }
+    public void meth58984() { }
+    public void meth58985() { }
+    public void meth58986() { }
+    public void meth58987() { }
+    public void meth58988() { }
+    public void meth58989() { }
+    public void meth58990() { }
+    public void meth58991() { }
+    public void meth58992() { }
+    public void meth58993() { }
+    public void meth58994() { }
+    public void meth58995() { }
+    public void meth58996() { }
+    public void meth58997() { }
+    public void meth58998() { }
+    public void meth58999() { }
+    public void meth59000() { }
+    public void meth59001() { }
+    public void meth59002() { }
+    public void meth59003() { }
+    public void meth59004() { }
+    public void meth59005() { }
+    public void meth59006() { }
+    public void meth59007() { }
+    public void meth59008() { }
+    public void meth59009() { }
+    public void meth59010() { }
+    public void meth59011() { }
+    public void meth59012() { }
+    public void meth59013() { }
+    public void meth59014() { }
+    public void meth59015() { }
+    public void meth59016() { }
+    public void meth59017() { }
+    public void meth59018() { }
+    public void meth59019() { }
+    public void meth59020() { }
+    public void meth59021() { }
+    public void meth59022() { }
+    public void meth59023() { }
+    public void meth59024() { }
+    public void meth59025() { }
+    public void meth59026() { }
+    public void meth59027() { }
+    public void meth59028() { }
+    public void meth59029() { }
+    public void meth59030() { }
+    public void meth59031() { }
+    public void meth59032() { }
+    public void meth59033() { }
+    public void meth59034() { }
+    public void meth59035() { }
+    public void meth59036() { }
+    public void meth59037() { }
+    public void meth59038() { }
+    public void meth59039() { }
+    public void meth59040() { }
+    public void meth59041() { }
+    public void meth59042() { }
+    public void meth59043() { }
+    public void meth59044() { }
+    public void meth59045() { }
+    public void meth59046() { }
+    public void meth59047() { }
+    public void meth59048() { }
+    public void meth59049() { }
+    public void meth59050() { }
+    public void meth59051() { }
+    public void meth59052() { }
+    public void meth59053() { }
+    public void meth59054() { }
+    public void meth59055() { }
+    public void meth59056() { }
+    public void meth59057() { }
+    public void meth59058() { }
+    public void meth59059() { }
+    public void meth59060() { }
+    public void meth59061() { }
+    public void meth59062() { }
+    public void meth59063() { }
+    public void meth59064() { }
+    public void meth59065() { }
+    public void meth59066() { }
+    public void meth59067() { }
+    public void meth59068() { }
+    public void meth59069() { }
+    public void meth59070() { }
+    public void meth59071() { }
+    public void meth59072() { }
+    public void meth59073() { }
+    public void meth59074() { }
+    public void meth59075() { }
+    public void meth59076() { }
+    public void meth59077() { }
+    public void meth59078() { }
+    public void meth59079() { }
+    public void meth59080() { }
+    public void meth59081() { }
+    public void meth59082() { }
+    public void meth59083() { }
+    public void meth59084() { }
+    public void meth59085() { }
+    public void meth59086() { }
+    public void meth59087() { }
+    public void meth59088() { }
+    public void meth59089() { }
+    public void meth59090() { }
+    public void meth59091() { }
+    public void meth59092() { }
+    public void meth59093() { }
+    public void meth59094() { }
+    public void meth59095() { }
+    public void meth59096() { }
+    public void meth59097() { }
+    public void meth59098() { }
+    public void meth59099() { }
+    public void meth59100() { }
+    public void meth59101() { }
+    public void meth59102() { }
+    public void meth59103() { }
+    public void meth59104() { }
+    public void meth59105() { }
+    public void meth59106() { }
+    public void meth59107() { }
+    public void meth59108() { }
+    public void meth59109() { }
+    public void meth59110() { }
+    public void meth59111() { }
+    public void meth59112() { }
+    public void meth59113() { }
+    public void meth59114() { }
+    public void meth59115() { }
+    public void meth59116() { }
+    public void meth59117() { }
+    public void meth59118() { }
+    public void meth59119() { }
+    public void meth59120() { }
+    public void meth59121() { }
+    public void meth59122() { }
+    public void meth59123() { }
+    public void meth59124() { }
+    public void meth59125() { }
+    public void meth59126() { }
+    public void meth59127() { }
+    public void meth59128() { }
+    public void meth59129() { }
+    public void meth59130() { }
+    public void meth59131() { }
+    public void meth59132() { }
+    public void meth59133() { }
+    public void meth59134() { }
+    public void meth59135() { }
+    public void meth59136() { }
+    public void meth59137() { }
+    public void meth59138() { }
+    public void meth59139() { }
+    public void meth59140() { }
+    public void meth59141() { }
+    public void meth59142() { }
+    public void meth59143() { }
+    public void meth59144() { }
+    public void meth59145() { }
+    public void meth59146() { }
+    public void meth59147() { }
+    public void meth59148() { }
+    public void meth59149() { }
+    public void meth59150() { }
+    public void meth59151() { }
+    public void meth59152() { }
+    public void meth59153() { }
+    public void meth59154() { }
+    public void meth59155() { }
+    public void meth59156() { }
+    public void meth59157() { }
+    public void meth59158() { }
+    public void meth59159() { }
+    public void meth59160() { }
+    public void meth59161() { }
+    public void meth59162() { }
+    public void meth59163() { }
+    public void meth59164() { }
+    public void meth59165() { }
+    public void meth59166() { }
+    public void meth59167() { }
+    public void meth59168() { }
+    public void meth59169() { }
+    public void meth59170() { }
+    public void meth59171() { }
+    public void meth59172() { }
+    public void meth59173() { }
+    public void meth59174() { }
+    public void meth59175() { }
+    public void meth59176() { }
+    public void meth59177() { }
+    public void meth59178() { }
+    public void meth59179() { }
+    public void meth59180() { }
+    public void meth59181() { }
+    public void meth59182() { }
+    public void meth59183() { }
+    public void meth59184() { }
+    public void meth59185() { }
+    public void meth59186() { }
+    public void meth59187() { }
+    public void meth59188() { }
+    public void meth59189() { }
+    public void meth59190() { }
+    public void meth59191() { }
+    public void meth59192() { }
+    public void meth59193() { }
+    public void meth59194() { }
+    public void meth59195() { }
+    public void meth59196() { }
+    public void meth59197() { }
+    public void meth59198() { }
+    public void meth59199() { }
+    public void meth59200() { }
+    public void meth59201() { }
+    public void meth59202() { }
+    public void meth59203() { }
+    public void meth59204() { }
+    public void meth59205() { }
+    public void meth59206() { }
+    public void meth59207() { }
+    public void meth59208() { }
+    public void meth59209() { }
+    public void meth59210() { }
+    public void meth59211() { }
+    public void meth59212() { }
+    public void meth59213() { }
+    public void meth59214() { }
+    public void meth59215() { }
+    public void meth59216() { }
+    public void meth59217() { }
+    public void meth59218() { }
+    public void meth59219() { }
+    public void meth59220() { }
+    public void meth59221() { }
+    public void meth59222() { }
+    public void meth59223() { }
+    public void meth59224() { }
+    public void meth59225() { }
+    public void meth59226() { }
+    public void meth59227() { }
+    public void meth59228() { }
+    public void meth59229() { }
+    public void meth59230() { }
+    public void meth59231() { }
+    public void meth59232() { }
+    public void meth59233() { }
+    public void meth59234() { }
+    public void meth59235() { }
+    public void meth59236() { }
+    public void meth59237() { }
+    public void meth59238() { }
+    public void meth59239() { }
+    public void meth59240() { }
+    public void meth59241() { }
+    public void meth59242() { }
+    public void meth59243() { }
+    public void meth59244() { }
+    public void meth59245() { }
+    public void meth59246() { }
+    public void meth59247() { }
+    public void meth59248() { }
+    public void meth59249() { }
+    public void meth59250() { }
+    public void meth59251() { }
+    public void meth59252() { }
+    public void meth59253() { }
+    public void meth59254() { }
+    public void meth59255() { }
+    public void meth59256() { }
+    public void meth59257() { }
+    public void meth59258() { }
+    public void meth59259() { }
+    public void meth59260() { }
+    public void meth59261() { }
+    public void meth59262() { }
+    public void meth59263() { }
+    public void meth59264() { }
+    public void meth59265() { }
+    public void meth59266() { }
+    public void meth59267() { }
+    public void meth59268() { }
+    public void meth59269() { }
+    public void meth59270() { }
+    public void meth59271() { }
+    public void meth59272() { }
+    public void meth59273() { }
+    public void meth59274() { }
+    public void meth59275() { }
+    public void meth59276() { }
+    public void meth59277() { }
+    public void meth59278() { }
+    public void meth59279() { }
+    public void meth59280() { }
+    public void meth59281() { }
+    public void meth59282() { }
+    public void meth59283() { }
+    public void meth59284() { }
+    public void meth59285() { }
+    public void meth59286() { }
+    public void meth59287() { }
+    public void meth59288() { }
+    public void meth59289() { }
+    public void meth59290() { }
+    public void meth59291() { }
+    public void meth59292() { }
+    public void meth59293() { }
+    public void meth59294() { }
+    public void meth59295() { }
+    public void meth59296() { }
+    public void meth59297() { }
+    public void meth59298() { }
+    public void meth59299() { }
+    public void meth59300() { }
+    public void meth59301() { }
+    public void meth59302() { }
+    public void meth59303() { }
+    public void meth59304() { }
+    public void meth59305() { }
+    public void meth59306() { }
+    public void meth59307() { }
+    public void meth59308() { }
+    public void meth59309() { }
+    public void meth59310() { }
+    public void meth59311() { }
+    public void meth59312() { }
+    public void meth59313() { }
+    public void meth59314() { }
+    public void meth59315() { }
+    public void meth59316() { }
+    public void meth59317() { }
+    public void meth59318() { }
+    public void meth59319() { }
+    public void meth59320() { }
+    public void meth59321() { }
+    public void meth59322() { }
+    public void meth59323() { }
+    public void meth59324() { }
+    public void meth59325() { }
+    public void meth59326() { }
+    public void meth59327() { }
+    public void meth59328() { }
+    public void meth59329() { }
+    public void meth59330() { }
+    public void meth59331() { }
+    public void meth59332() { }
+    public void meth59333() { }
+    public void meth59334() { }
+    public void meth59335() { }
+    public void meth59336() { }
+    public void meth59337() { }
+    public void meth59338() { }
+    public void meth59339() { }
+    public void meth59340() { }
+    public void meth59341() { }
+    public void meth59342() { }
+    public void meth59343() { }
+    public void meth59344() { }
+    public void meth59345() { }
+    public void meth59346() { }
+    public void meth59347() { }
+    public void meth59348() { }
+    public void meth59349() { }
+    public void meth59350() { }
+    public void meth59351() { }
+    public void meth59352() { }
+    public void meth59353() { }
+    public void meth59354() { }
+    public void meth59355() { }
+    public void meth59356() { }
+    public void meth59357() { }
+    public void meth59358() { }
+    public void meth59359() { }
+    public void meth59360() { }
+    public void meth59361() { }
+    public void meth59362() { }
+    public void meth59363() { }
+    public void meth59364() { }
+    public void meth59365() { }
+    public void meth59366() { }
+    public void meth59367() { }
+    public void meth59368() { }
+    public void meth59369() { }
+    public void meth59370() { }
+    public void meth59371() { }
+    public void meth59372() { }
+    public void meth59373() { }
+    public void meth59374() { }
+    public void meth59375() { }
+    public void meth59376() { }
+    public void meth59377() { }
+    public void meth59378() { }
+    public void meth59379() { }
+    public void meth59380() { }
+    public void meth59381() { }
+    public void meth59382() { }
+    public void meth59383() { }
+    public void meth59384() { }
+    public void meth59385() { }
+    public void meth59386() { }
+    public void meth59387() { }
+    public void meth59388() { }
+    public void meth59389() { }
+    public void meth59390() { }
+    public void meth59391() { }
+    public void meth59392() { }
+    public void meth59393() { }
+    public void meth59394() { }
+    public void meth59395() { }
+    public void meth59396() { }
+    public void meth59397() { }
+    public void meth59398() { }
+    public void meth59399() { }
+    public void meth59400() { }
+    public void meth59401() { }
+    public void meth59402() { }
+    public void meth59403() { }
+    public void meth59404() { }
+    public void meth59405() { }
+    public void meth59406() { }
+    public void meth59407() { }
+    public void meth59408() { }
+    public void meth59409() { }
+    public void meth59410() { }
+    public void meth59411() { }
+    public void meth59412() { }
+    public void meth59413() { }
+    public void meth59414() { }
+    public void meth59415() { }
+    public void meth59416() { }
+    public void meth59417() { }
+    public void meth59418() { }
+    public void meth59419() { }
+    public void meth59420() { }
+    public void meth59421() { }
+    public void meth59422() { }
+    public void meth59423() { }
+    public void meth59424() { }
+    public void meth59425() { }
+    public void meth59426() { }
+    public void meth59427() { }
+    public void meth59428() { }
+    public void meth59429() { }
+    public void meth59430() { }
+    public void meth59431() { }
+    public void meth59432() { }
+    public void meth59433() { }
+    public void meth59434() { }
+    public void meth59435() { }
+    public void meth59436() { }
+    public void meth59437() { }
+    public void meth59438() { }
+    public void meth59439() { }
+    public void meth59440() { }
+    public void meth59441() { }
+    public void meth59442() { }
+    public void meth59443() { }
+    public void meth59444() { }
+    public void meth59445() { }
+    public void meth59446() { }
+    public void meth59447() { }
+    public void meth59448() { }
+    public void meth59449() { }
+    public void meth59450() { }
+    public void meth59451() { }
+    public void meth59452() { }
+    public void meth59453() { }
+    public void meth59454() { }
+    public void meth59455() { }
+    public void meth59456() { }
+    public void meth59457() { }
+    public void meth59458() { }
+    public void meth59459() { }
+    public void meth59460() { }
+    public void meth59461() { }
+    public void meth59462() { }
+    public void meth59463() { }
+    public void meth59464() { }
+    public void meth59465() { }
+    public void meth59466() { }
+    public void meth59467() { }
+    public void meth59468() { }
+    public void meth59469() { }
+    public void meth59470() { }
+    public void meth59471() { }
+    public void meth59472() { }
+    public void meth59473() { }
+    public void meth59474() { }
+    public void meth59475() { }
+    public void meth59476() { }
+    public void meth59477() { }
+    public void meth59478() { }
+    public void meth59479() { }
+    public void meth59480() { }
+    public void meth59481() { }
+    public void meth59482() { }
+    public void meth59483() { }
+    public void meth59484() { }
+    public void meth59485() { }
+    public void meth59486() { }
+    public void meth59487() { }
+    public void meth59488() { }
+    public void meth59489() { }
+    public void meth59490() { }
+    public void meth59491() { }
+    public void meth59492() { }
+    public void meth59493() { }
+    public void meth59494() { }
+    public void meth59495() { }
+    public void meth59496() { }
+    public void meth59497() { }
+    public void meth59498() { }
+    public void meth59499() { }
+    public void meth59500() { }
+    public void meth59501() { }
+    public void meth59502() { }
+    public void meth59503() { }
+    public void meth59504() { }
+    public void meth59505() { }
+    public void meth59506() { }
+    public void meth59507() { }
+    public void meth59508() { }
+    public void meth59509() { }
+    public void meth59510() { }
+    public void meth59511() { }
+    public void meth59512() { }
+    public void meth59513() { }
+    public void meth59514() { }
+    public void meth59515() { }
+    public void meth59516() { }
+    public void meth59517() { }
+    public void meth59518() { }
+    public void meth59519() { }
+    public void meth59520() { }
+    public void meth59521() { }
+    public void meth59522() { }
+    public void meth59523() { }
+    public void meth59524() { }
+    public void meth59525() { }
+    public void meth59526() { }
+    public void meth59527() { }
+    public void meth59528() { }
+    public void meth59529() { }
+    public void meth59530() { }
+    public void meth59531() { }
+    public void meth59532() { }
+    public void meth59533() { }
+    public void meth59534() { }
+    public void meth59535() { }
+    public void meth59536() { }
+    public void meth59537() { }
+    public void meth59538() { }
+    public void meth59539() { }
+    public void meth59540() { }
+    public void meth59541() { }
+    public void meth59542() { }
+    public void meth59543() { }
+    public void meth59544() { }
+    public void meth59545() { }
+    public void meth59546() { }
+    public void meth59547() { }
+    public void meth59548() { }
+    public void meth59549() { }
+    public void meth59550() { }
+    public void meth59551() { }
+    public void meth59552() { }
+    public void meth59553() { }
+    public void meth59554() { }
+    public void meth59555() { }
+    public void meth59556() { }
+    public void meth59557() { }
+    public void meth59558() { }
+    public void meth59559() { }
+    public void meth59560() { }
+    public void meth59561() { }
+    public void meth59562() { }
+    public void meth59563() { }
+    public void meth59564() { }
+    public void meth59565() { }
+    public void meth59566() { }
+    public void meth59567() { }
+    public void meth59568() { }
+    public void meth59569() { }
+    public void meth59570() { }
+    public void meth59571() { }
+    public void meth59572() { }
+    public void meth59573() { }
+    public void meth59574() { }
+    public void meth59575() { }
+    public void meth59576() { }
+    public void meth59577() { }
+    public void meth59578() { }
+    public void meth59579() { }
+    public void meth59580() { }
+    public void meth59581() { }
+    public void meth59582() { }
+    public void meth59583() { }
+    public void meth59584() { }
+    public void meth59585() { }
+    public void meth59586() { }
+    public void meth59587() { }
+    public void meth59588() { }
+    public void meth59589() { }
+    public void meth59590() { }
+    public void meth59591() { }
+    public void meth59592() { }
+    public void meth59593() { }
+    public void meth59594() { }
+    public void meth59595() { }
+    public void meth59596() { }
+    public void meth59597() { }
+    public void meth59598() { }
+    public void meth59599() { }
+    public void meth59600() { }
+    public void meth59601() { }
+    public void meth59602() { }
+    public void meth59603() { }
+    public void meth59604() { }
+    public void meth59605() { }
+    public void meth59606() { }
+    public void meth59607() { }
+    public void meth59608() { }
+    public void meth59609() { }
+    public void meth59610() { }
+    public void meth59611() { }
+    public void meth59612() { }
+    public void meth59613() { }
+    public void meth59614() { }
+    public void meth59615() { }
+    public void meth59616() { }
+    public void meth59617() { }
+    public void meth59618() { }
+    public void meth59619() { }
+    public void meth59620() { }
+    public void meth59621() { }
+    public void meth59622() { }
+    public void meth59623() { }
+    public void meth59624() { }
+    public void meth59625() { }
+    public void meth59626() { }
+    public void meth59627() { }
+    public void meth59628() { }
+    public void meth59629() { }
+    public void meth59630() { }
+    public void meth59631() { }
+    public void meth59632() { }
+    public void meth59633() { }
+    public void meth59634() { }
+    public void meth59635() { }
+    public void meth59636() { }
+    public void meth59637() { }
+    public void meth59638() { }
+    public void meth59639() { }
+    public void meth59640() { }
+    public void meth59641() { }
+    public void meth59642() { }
+    public void meth59643() { }
+    public void meth59644() { }
+    public void meth59645() { }
+    public void meth59646() { }
+    public void meth59647() { }
+    public void meth59648() { }
+    public void meth59649() { }
+    public void meth59650() { }
+    public void meth59651() { }
+    public void meth59652() { }
+    public void meth59653() { }
+    public void meth59654() { }
+    public void meth59655() { }
+    public void meth59656() { }
+    public void meth59657() { }
+    public void meth59658() { }
+    public void meth59659() { }
+    public void meth59660() { }
+    public void meth59661() { }
+    public void meth59662() { }
+    public void meth59663() { }
+    public void meth59664() { }
+    public void meth59665() { }
+    public void meth59666() { }
+    public void meth59667() { }
+    public void meth59668() { }
+    public void meth59669() { }
+    public void meth59670() { }
+    public void meth59671() { }
+    public void meth59672() { }
+    public void meth59673() { }
+    public void meth59674() { }
+    public void meth59675() { }
+    public void meth59676() { }
+    public void meth59677() { }
+    public void meth59678() { }
+    public void meth59679() { }
+    public void meth59680() { }
+    public void meth59681() { }
+    public void meth59682() { }
+    public void meth59683() { }
+    public void meth59684() { }
+    public void meth59685() { }
+    public void meth59686() { }
+    public void meth59687() { }
+    public void meth59688() { }
+    public void meth59689() { }
+    public void meth59690() { }
+    public void meth59691() { }
+    public void meth59692() { }
+    public void meth59693() { }
+    public void meth59694() { }
+    public void meth59695() { }
+    public void meth59696() { }
+    public void meth59697() { }
+    public void meth59698() { }
+    public void meth59699() { }
+    public void meth59700() { }
+    public void meth59701() { }
+    public void meth59702() { }
+    public void meth59703() { }
+    public void meth59704() { }
+    public void meth59705() { }
+    public void meth59706() { }
+    public void meth59707() { }
+    public void meth59708() { }
+    public void meth59709() { }
+    public void meth59710() { }
+    public void meth59711() { }
+    public void meth59712() { }
+    public void meth59713() { }
+    public void meth59714() { }
+    public void meth59715() { }
+    public void meth59716() { }
+    public void meth59717() { }
+    public void meth59718() { }
+    public void meth59719() { }
+    public void meth59720() { }
+    public void meth59721() { }
+    public void meth59722() { }
+    public void meth59723() { }
+    public void meth59724() { }
+    public void meth59725() { }
+    public void meth59726() { }
+    public void meth59727() { }
+    public void meth59728() { }
+    public void meth59729() { }
+    public void meth59730() { }
+    public void meth59731() { }
+    public void meth59732() { }
+    public void meth59733() { }
+    public void meth59734() { }
+    public void meth59735() { }
+    public void meth59736() { }
+    public void meth59737() { }
+    public void meth59738() { }
+    public void meth59739() { }
+    public void meth59740() { }
+    public void meth59741() { }
+    public void meth59742() { }
+    public void meth59743() { }
+    public void meth59744() { }
+    public void meth59745() { }
+    public void meth59746() { }
+    public void meth59747() { }
+    public void meth59748() { }
+    public void meth59749() { }
+    public void meth59750() { }
+    public void meth59751() { }
+    public void meth59752() { }
+    public void meth59753() { }
+    public void meth59754() { }
+    public void meth59755() { }
+    public void meth59756() { }
+    public void meth59757() { }
+    public void meth59758() { }
+    public void meth59759() { }
+    public void meth59760() { }
+    public void meth59761() { }
+    public void meth59762() { }
+    public void meth59763() { }
+    public void meth59764() { }
+    public void meth59765() { }
+    public void meth59766() { }
+    public void meth59767() { }
+    public void meth59768() { }
+    public void meth59769() { }
+    public void meth59770() { }
+    public void meth59771() { }
+    public void meth59772() { }
+    public void meth59773() { }
+    public void meth59774() { }
+    public void meth59775() { }
+    public void meth59776() { }
+    public void meth59777() { }
+    public void meth59778() { }
+    public void meth59779() { }
+    public void meth59780() { }
+    public void meth59781() { }
+    public void meth59782() { }
+    public void meth59783() { }
+    public void meth59784() { }
+    public void meth59785() { }
+    public void meth59786() { }
+    public void meth59787() { }
+    public void meth59788() { }
+    public void meth59789() { }
+    public void meth59790() { }
+    public void meth59791() { }
+    public void meth59792() { }
+    public void meth59793() { }
+    public void meth59794() { }
+    public void meth59795() { }
+    public void meth59796() { }
+    public void meth59797() { }
+    public void meth59798() { }
+    public void meth59799() { }
+    public void meth59800() { }
+    public void meth59801() { }
+    public void meth59802() { }
+    public void meth59803() { }
+    public void meth59804() { }
+    public void meth59805() { }
+    public void meth59806() { }
+    public void meth59807() { }
+    public void meth59808() { }
+    public void meth59809() { }
+    public void meth59810() { }
+    public void meth59811() { }
+    public void meth59812() { }
+    public void meth59813() { }
+    public void meth59814() { }
+    public void meth59815() { }
+    public void meth59816() { }
+    public void meth59817() { }
+    public void meth59818() { }
+    public void meth59819() { }
+    public void meth59820() { }
+    public void meth59821() { }
+    public void meth59822() { }
+    public void meth59823() { }
+    public void meth59824() { }
+    public void meth59825() { }
+    public void meth59826() { }
+    public void meth59827() { }
+    public void meth59828() { }
+    public void meth59829() { }
+    public void meth59830() { }
+    public void meth59831() { }
+    public void meth59832() { }
+    public void meth59833() { }
+    public void meth59834() { }
+    public void meth59835() { }
+    public void meth59836() { }
+    public void meth59837() { }
+    public void meth59838() { }
+    public void meth59839() { }
+    public void meth59840() { }
+    public void meth59841() { }
+    public void meth59842() { }
+    public void meth59843() { }
+    public void meth59844() { }
+    public void meth59845() { }
+    public void meth59846() { }
+    public void meth59847() { }
+    public void meth59848() { }
+    public void meth59849() { }
+    public void meth59850() { }
+    public void meth59851() { }
+    public void meth59852() { }
+    public void meth59853() { }
+    public void meth59854() { }
+    public void meth59855() { }
+    public void meth59856() { }
+    public void meth59857() { }
+    public void meth59858() { }
+    public void meth59859() { }
+    public void meth59860() { }
+    public void meth59861() { }
+    public void meth59862() { }
+    public void meth59863() { }
+    public void meth59864() { }
+    public void meth59865() { }
+    public void meth59866() { }
+    public void meth59867() { }
+    public void meth59868() { }
+    public void meth59869() { }
+    public void meth59870() { }
+    public void meth59871() { }
+    public void meth59872() { }
+    public void meth59873() { }
+    public void meth59874() { }
+    public void meth59875() { }
+    public void meth59876() { }
+    public void meth59877() { }
+    public void meth59878() { }
+    public void meth59879() { }
+    public void meth59880() { }
+    public void meth59881() { }
+    public void meth59882() { }
+    public void meth59883() { }
+    public void meth59884() { }
+    public void meth59885() { }
+    public void meth59886() { }
+    public void meth59887() { }
+    public void meth59888() { }
+    public void meth59889() { }
+    public void meth59890() { }
+    public void meth59891() { }
+    public void meth59892() { }
+    public void meth59893() { }
+    public void meth59894() { }
+    public void meth59895() { }
+    public void meth59896() { }
+    public void meth59897() { }
+    public void meth59898() { }
+    public void meth59899() { }
+    public void meth59900() { }
+    public void meth59901() { }
+    public void meth59902() { }
+    public void meth59903() { }
+    public void meth59904() { }
+    public void meth59905() { }
+    public void meth59906() { }
+    public void meth59907() { }
+    public void meth59908() { }
+    public void meth59909() { }
+    public void meth59910() { }
+    public void meth59911() { }
+    public void meth59912() { }
+    public void meth59913() { }
+    public void meth59914() { }
+    public void meth59915() { }
+    public void meth59916() { }
+    public void meth59917() { }
+    public void meth59918() { }
+    public void meth59919() { }
+    public void meth59920() { }
+    public void meth59921() { }
+    public void meth59922() { }
+    public void meth59923() { }
+    public void meth59924() { }
+    public void meth59925() { }
+    public void meth59926() { }
+    public void meth59927() { }
+    public void meth59928() { }
+    public void meth59929() { }
+    public void meth59930() { }
+    public void meth59931() { }
+    public void meth59932() { }
+    public void meth59933() { }
+    public void meth59934() { }
+    public void meth59935() { }
+    public void meth59936() { }
+    public void meth59937() { }
+    public void meth59938() { }
+    public void meth59939() { }
+    public void meth59940() { }
+    public void meth59941() { }
+    public void meth59942() { }
+    public void meth59943() { }
+    public void meth59944() { }
+    public void meth59945() { }
+    public void meth59946() { }
+    public void meth59947() { }
+    public void meth59948() { }
+    public void meth59949() { }
+    public void meth59950() { }
+    public void meth59951() { }
+    public void meth59952() { }
+    public void meth59953() { }
+    public void meth59954() { }
+    public void meth59955() { }
+    public void meth59956() { }
+    public void meth59957() { }
+    public void meth59958() { }
+    public void meth59959() { }
+    public void meth59960() { }
+    public void meth59961() { }
+    public void meth59962() { }
+    public void meth59963() { }
+    public void meth59964() { }
+    public void meth59965() { }
+    public void meth59966() { }
+    public void meth59967() { }
+    public void meth59968() { }
+    public void meth59969() { }
+    public void meth59970() { }
+    public void meth59971() { }
+    public void meth59972() { }
+    public void meth59973() { }
+    public void meth59974() { }
+    public void meth59975() { }
+    public void meth59976() { }
+    public void meth59977() { }
+    public void meth59978() { }
+    public void meth59979() { }
+    public void meth59980() { }
+    public void meth59981() { }
+    public void meth59982() { }
+    public void meth59983() { }
+    public void meth59984() { }
+    public void meth59985() { }
+    public void meth59986() { }
+    public void meth59987() { }
+    public void meth59988() { }
+    public void meth59989() { }
+    public void meth59990() { }
+    public void meth59991() { }
+    public void meth59992() { }
+    public void meth59993() { }
+    public void meth59994() { }
+    public void meth59995() { }
+    public void meth59996() { }
+    public void meth59997() { }
+    public void meth59998() { }
+    public void meth59999() { }
+    public void meth60000() { }
+    public void meth60001() { }
+    public void meth60002() { }
+    public void meth60003() { }
+    public void meth60004() { }
+    public void meth60005() { }
+    public void meth60006() { }
+    public void meth60007() { }
+    public void meth60008() { }
+    public void meth60009() { }
+    public void meth60010() { }
+    public void meth60011() { }
+    public void meth60012() { }
+    public void meth60013() { }
+    public void meth60014() { }
+    public void meth60015() { }
+    public void meth60016() { }
+    public void meth60017() { }
+    public void meth60018() { }
+    public void meth60019() { }
+    public void meth60020() { }
+    public void meth60021() { }
+    public void meth60022() { }
+    public void meth60023() { }
+    public void meth60024() { }
+    public void meth60025() { }
+    public void meth60026() { }
+    public void meth60027() { }
+    public void meth60028() { }
+    public void meth60029() { }
+    public void meth60030() { }
+    public void meth60031() { }
+    public void meth60032() { }
+    public void meth60033() { }
+    public void meth60034() { }
+    public void meth60035() { }
+    public void meth60036() { }
+    public void meth60037() { }
+    public void meth60038() { }
+    public void meth60039() { }
+    public void meth60040() { }
+    public void meth60041() { }
+    public void meth60042() { }
+    public void meth60043() { }
+    public void meth60044() { }
+    public void meth60045() { }
+    public void meth60046() { }
+    public void meth60047() { }
+    public void meth60048() { }
+    public void meth60049() { }
+    public void meth60050() { }
+    public void meth60051() { }
+    public void meth60052() { }
+    public void meth60053() { }
+    public void meth60054() { }
+    public void meth60055() { }
+    public void meth60056() { }
+    public void meth60057() { }
+    public void meth60058() { }
+    public void meth60059() { }
+    public void meth60060() { }
+    public void meth60061() { }
+    public void meth60062() { }
+    public void meth60063() { }
+    public void meth60064() { }
+    public void meth60065() { }
+    public void meth60066() { }
+    public void meth60067() { }
+    public void meth60068() { }
+    public void meth60069() { }
+    public void meth60070() { }
+    public void meth60071() { }
+    public void meth60072() { }
+    public void meth60073() { }
+    public void meth60074() { }
+    public void meth60075() { }
+    public void meth60076() { }
+    public void meth60077() { }
+    public void meth60078() { }
+    public void meth60079() { }
+    public void meth60080() { }
+    public void meth60081() { }
+    public void meth60082() { }
+    public void meth60083() { }
+    public void meth60084() { }
+    public void meth60085() { }
+    public void meth60086() { }
+    public void meth60087() { }
+    public void meth60088() { }
+    public void meth60089() { }
+    public void meth60090() { }
+    public void meth60091() { }
+    public void meth60092() { }
+    public void meth60093() { }
+    public void meth60094() { }
+    public void meth60095() { }
+    public void meth60096() { }
+    public void meth60097() { }
+    public void meth60098() { }
+    public void meth60099() { }
+    public void meth60100() { }
+    public void meth60101() { }
+    public void meth60102() { }
+    public void meth60103() { }
+    public void meth60104() { }
+    public void meth60105() { }
+    public void meth60106() { }
+    public void meth60107() { }
+    public void meth60108() { }
+    public void meth60109() { }
+    public void meth60110() { }
+    public void meth60111() { }
+    public void meth60112() { }
+    public void meth60113() { }
+    public void meth60114() { }
+    public void meth60115() { }
+    public void meth60116() { }
+    public void meth60117() { }
+    public void meth60118() { }
+    public void meth60119() { }
+    public void meth60120() { }
+    public void meth60121() { }
+    public void meth60122() { }
+    public void meth60123() { }
+    public void meth60124() { }
+    public void meth60125() { }
+    public void meth60126() { }
+    public void meth60127() { }
+    public void meth60128() { }
+    public void meth60129() { }
+    public void meth60130() { }
+    public void meth60131() { }
+    public void meth60132() { }
+    public void meth60133() { }
+    public void meth60134() { }
+    public void meth60135() { }
+    public void meth60136() { }
+    public void meth60137() { }
+    public void meth60138() { }
+    public void meth60139() { }
+    public void meth60140() { }
+    public void meth60141() { }
+    public void meth60142() { }
+    public void meth60143() { }
+    public void meth60144() { }
+    public void meth60145() { }
+    public void meth60146() { }
+    public void meth60147() { }
+    public void meth60148() { }
+    public void meth60149() { }
+    public void meth60150() { }
+    public void meth60151() { }
+    public void meth60152() { }
+    public void meth60153() { }
+    public void meth60154() { }
+    public void meth60155() { }
+    public void meth60156() { }
+    public void meth60157() { }
+    public void meth60158() { }
+    public void meth60159() { }
+    public void meth60160() { }
+    public void meth60161() { }
+    public void meth60162() { }
+    public void meth60163() { }
+    public void meth60164() { }
+    public void meth60165() { }
+    public void meth60166() { }
+    public void meth60167() { }
+    public void meth60168() { }
+    public void meth60169() { }
+    public void meth60170() { }
+    public void meth60171() { }
+    public void meth60172() { }
+    public void meth60173() { }
+    public void meth60174() { }
+    public void meth60175() { }
+    public void meth60176() { }
+    public void meth60177() { }
+    public void meth60178() { }
+    public void meth60179() { }
+    public void meth60180() { }
+    public void meth60181() { }
+    public void meth60182() { }
+    public void meth60183() { }
+    public void meth60184() { }
+    public void meth60185() { }
+    public void meth60186() { }
+    public void meth60187() { }
+    public void meth60188() { }
+    public void meth60189() { }
+    public void meth60190() { }
+    public void meth60191() { }
+    public void meth60192() { }
+    public void meth60193() { }
+    public void meth60194() { }
+    public void meth60195() { }
+    public void meth60196() { }
+    public void meth60197() { }
+    public void meth60198() { }
+    public void meth60199() { }
+    public void meth60200() { }
+    public void meth60201() { }
+    public void meth60202() { }
+    public void meth60203() { }
+    public void meth60204() { }
+    public void meth60205() { }
+    public void meth60206() { }
+    public void meth60207() { }
+    public void meth60208() { }
+    public void meth60209() { }
+    public void meth60210() { }
+    public void meth60211() { }
+    public void meth60212() { }
+    public void meth60213() { }
+    public void meth60214() { }
+    public void meth60215() { }
+    public void meth60216() { }
+    public void meth60217() { }
+    public void meth60218() { }
+    public void meth60219() { }
+    public void meth60220() { }
+    public void meth60221() { }
+    public void meth60222() { }
+    public void meth60223() { }
+    public void meth60224() { }
+    public void meth60225() { }
+    public void meth60226() { }
+    public void meth60227() { }
+    public void meth60228() { }
+    public void meth60229() { }
+    public void meth60230() { }
+    public void meth60231() { }
+    public void meth60232() { }
+    public void meth60233() { }
+    public void meth60234() { }
+    public void meth60235() { }
+    public void meth60236() { }
+    public void meth60237() { }
+    public void meth60238() { }
+    public void meth60239() { }
+    public void meth60240() { }
+    public void meth60241() { }
+    public void meth60242() { }
+    public void meth60243() { }
+    public void meth60244() { }
+    public void meth60245() { }
+    public void meth60246() { }
+    public void meth60247() { }
+    public void meth60248() { }
+    public void meth60249() { }
+    public void meth60250() { }
+    public void meth60251() { }
+    public void meth60252() { }
+    public void meth60253() { }
+    public void meth60254() { }
+    public void meth60255() { }
+    public void meth60256() { }
+    public void meth60257() { }
+    public void meth60258() { }
+    public void meth60259() { }
+    public void meth60260() { }
+    public void meth60261() { }
+    public void meth60262() { }
+    public void meth60263() { }
+    public void meth60264() { }
+    public void meth60265() { }
+    public void meth60266() { }
+    public void meth60267() { }
+    public void meth60268() { }
+    public void meth60269() { }
+    public void meth60270() { }
+    public void meth60271() { }
+    public void meth60272() { }
+    public void meth60273() { }
+    public void meth60274() { }
+    public void meth60275() { }
+    public void meth60276() { }
+    public void meth60277() { }
+    public void meth60278() { }
+    public void meth60279() { }
+    public void meth60280() { }
+    public void meth60281() { }
+    public void meth60282() { }
+    public void meth60283() { }
+    public void meth60284() { }
+    public void meth60285() { }
+    public void meth60286() { }
+    public void meth60287() { }
+    public void meth60288() { }
+    public void meth60289() { }
+    public void meth60290() { }
+    public void meth60291() { }
+    public void meth60292() { }
+    public void meth60293() { }
+    public void meth60294() { }
+    public void meth60295() { }
+    public void meth60296() { }
+    public void meth60297() { }
+    public void meth60298() { }
+    public void meth60299() { }
+    public void meth60300() { }
+    public void meth60301() { }
+    public void meth60302() { }
+    public void meth60303() { }
+    public void meth60304() { }
+    public void meth60305() { }
+    public void meth60306() { }
+    public void meth60307() { }
+    public void meth60308() { }
+    public void meth60309() { }
+    public void meth60310() { }
+    public void meth60311() { }
+    public void meth60312() { }
+    public void meth60313() { }
+    public void meth60314() { }
+    public void meth60315() { }
+    public void meth60316() { }
+    public void meth60317() { }
+    public void meth60318() { }
+    public void meth60319() { }
+    public void meth60320() { }
+    public void meth60321() { }
+    public void meth60322() { }
+    public void meth60323() { }
+    public void meth60324() { }
+    public void meth60325() { }
+    public void meth60326() { }
+    public void meth60327() { }
+    public void meth60328() { }
+    public void meth60329() { }
+    public void meth60330() { }
+    public void meth60331() { }
+    public void meth60332() { }
+    public void meth60333() { }
+    public void meth60334() { }
+    public void meth60335() { }
+    public void meth60336() { }
+    public void meth60337() { }
+    public void meth60338() { }
+    public void meth60339() { }
+    public void meth60340() { }
+    public void meth60341() { }
+    public void meth60342() { }
+    public void meth60343() { }
+    public void meth60344() { }
+    public void meth60345() { }
+    public void meth60346() { }
+    public void meth60347() { }
+    public void meth60348() { }
+    public void meth60349() { }
+    public void meth60350() { }
+    public void meth60351() { }
+    public void meth60352() { }
+    public void meth60353() { }
+    public void meth60354() { }
+    public void meth60355() { }
+    public void meth60356() { }
+    public void meth60357() { }
+    public void meth60358() { }
+    public void meth60359() { }
+    public void meth60360() { }
+    public void meth60361() { }
+    public void meth60362() { }
+    public void meth60363() { }
+    public void meth60364() { }
+    public void meth60365() { }
+    public void meth60366() { }
+    public void meth60367() { }
+    public void meth60368() { }
+    public void meth60369() { }
+    public void meth60370() { }
+    public void meth60371() { }
+    public void meth60372() { }
+    public void meth60373() { }
+    public void meth60374() { }
+    public void meth60375() { }
+    public void meth60376() { }
+    public void meth60377() { }
+    public void meth60378() { }
+    public void meth60379() { }
+    public void meth60380() { }
+    public void meth60381() { }
+    public void meth60382() { }
+    public void meth60383() { }
+    public void meth60384() { }
+    public void meth60385() { }
+    public void meth60386() { }
+    public void meth60387() { }
+    public void meth60388() { }
+    public void meth60389() { }
+    public void meth60390() { }
+    public void meth60391() { }
+    public void meth60392() { }
+    public void meth60393() { }
+    public void meth60394() { }
+    public void meth60395() { }
+    public void meth60396() { }
+    public void meth60397() { }
+    public void meth60398() { }
+    public void meth60399() { }
+    public void meth60400() { }
+    public void meth60401() { }
+    public void meth60402() { }
+    public void meth60403() { }
+    public void meth60404() { }
+    public void meth60405() { }
+    public void meth60406() { }
+    public void meth60407() { }
+    public void meth60408() { }
+    public void meth60409() { }
+    public void meth60410() { }
+    public void meth60411() { }
+    public void meth60412() { }
+    public void meth60413() { }
+    public void meth60414() { }
+    public void meth60415() { }
+    public void meth60416() { }
+    public void meth60417() { }
+    public void meth60418() { }
+    public void meth60419() { }
+    public void meth60420() { }
+    public void meth60421() { }
+    public void meth60422() { }
+    public void meth60423() { }
+    public void meth60424() { }
+    public void meth60425() { }
+    public void meth60426() { }
+    public void meth60427() { }
+    public void meth60428() { }
+    public void meth60429() { }
+    public void meth60430() { }
+    public void meth60431() { }
+    public void meth60432() { }
+    public void meth60433() { }
+    public void meth60434() { }
+    public void meth60435() { }
+    public void meth60436() { }
+    public void meth60437() { }
+    public void meth60438() { }
+    public void meth60439() { }
+    public void meth60440() { }
+    public void meth60441() { }
+    public void meth60442() { }
+    public void meth60443() { }
+    public void meth60444() { }
+    public void meth60445() { }
+    public void meth60446() { }
+    public void meth60447() { }
+    public void meth60448() { }
+    public void meth60449() { }
+    public void meth60450() { }
+    public void meth60451() { }
+    public void meth60452() { }
+    public void meth60453() { }
+    public void meth60454() { }
+    public void meth60455() { }
+    public void meth60456() { }
+    public void meth60457() { }
+    public void meth60458() { }
+    public void meth60459() { }
+    public void meth60460() { }
+    public void meth60461() { }
+    public void meth60462() { }
+    public void meth60463() { }
+    public void meth60464() { }
+    public void meth60465() { }
+    public void meth60466() { }
+    public void meth60467() { }
+    public void meth60468() { }
+    public void meth60469() { }
+    public void meth60470() { }
+    public void meth60471() { }
+    public void meth60472() { }
+    public void meth60473() { }
+    public void meth60474() { }
+    public void meth60475() { }
+    public void meth60476() { }
+    public void meth60477() { }
+    public void meth60478() { }
+    public void meth60479() { }
+    public void meth60480() { }
+    public void meth60481() { }
+    public void meth60482() { }
+    public void meth60483() { }
+    public void meth60484() { }
+    public void meth60485() { }
+    public void meth60486() { }
+    public void meth60487() { }
+    public void meth60488() { }
+    public void meth60489() { }
+    public void meth60490() { }
+    public void meth60491() { }
+    public void meth60492() { }
+    public void meth60493() { }
+    public void meth60494() { }
+    public void meth60495() { }
+    public void meth60496() { }
+    public void meth60497() { }
+    public void meth60498() { }
+    public void meth60499() { }
+    public void meth60500() { }
+    public void meth60501() { }
+    public void meth60502() { }
+    public void meth60503() { }
+    public void meth60504() { }
+    public void meth60505() { }
+    public void meth60506() { }
+    public void meth60507() { }
+    public void meth60508() { }
+    public void meth60509() { }
+    public void meth60510() { }
+    public void meth60511() { }
+    public void meth60512() { }
+    public void meth60513() { }
+    public void meth60514() { }
+    public void meth60515() { }
+    public void meth60516() { }
+    public void meth60517() { }
+    public void meth60518() { }
+    public void meth60519() { }
+    public void meth60520() { }
+    public void meth60521() { }
+    public void meth60522() { }
+    public void meth60523() { }
+    public void meth60524() { }
+    public void meth60525() { }
+    public void meth60526() { }
+    public void meth60527() { }
+    public void meth60528() { }
+    public void meth60529() { }
+    public void meth60530() { }
+    public void meth60531() { }
+    public void meth60532() { }
+    public void meth60533() { }
+    public void meth60534() { }
+    public void meth60535() { }
+    public void meth60536() { }
+    public void meth60537() { }
+    public void meth60538() { }
+    public void meth60539() { }
+    public void meth60540() { }
+    public void meth60541() { }
+    public void meth60542() { }
+    public void meth60543() { }
+    public void meth60544() { }
+    public void meth60545() { }
+    public void meth60546() { }
+    public void meth60547() { }
+    public void meth60548() { }
+    public void meth60549() { }
+    public void meth60550() { }
+    public void meth60551() { }
+    public void meth60552() { }
+    public void meth60553() { }
+    public void meth60554() { }
+    public void meth60555() { }
+    public void meth60556() { }
+    public void meth60557() { }
+    public void meth60558() { }
+    public void meth60559() { }
+    public void meth60560() { }
+    public void meth60561() { }
+    public void meth60562() { }
+    public void meth60563() { }
+    public void meth60564() { }
+    public void meth60565() { }
+    public void meth60566() { }
+    public void meth60567() { }
+    public void meth60568() { }
+    public void meth60569() { }
+    public void meth60570() { }
+    public void meth60571() { }
+    public void meth60572() { }
+    public void meth60573() { }
+    public void meth60574() { }
+    public void meth60575() { }
+    public void meth60576() { }
+    public void meth60577() { }
+    public void meth60578() { }
+    public void meth60579() { }
+    public void meth60580() { }
+    public void meth60581() { }
+    public void meth60582() { }
+    public void meth60583() { }
+    public void meth60584() { }
+    public void meth60585() { }
+    public void meth60586() { }
+    public void meth60587() { }
+    public void meth60588() { }
+    public void meth60589() { }
+    public void meth60590() { }
+    public void meth60591() { }
+    public void meth60592() { }
+    public void meth60593() { }
+    public void meth60594() { }
+    public void meth60595() { }
+    public void meth60596() { }
+    public void meth60597() { }
+    public void meth60598() { }
+    public void meth60599() { }
+    public void meth60600() { }
+    public void meth60601() { }
+    public void meth60602() { }
+    public void meth60603() { }
+    public void meth60604() { }
+    public void meth60605() { }
+    public void meth60606() { }
+    public void meth60607() { }
+    public void meth60608() { }
+    public void meth60609() { }
+    public void meth60610() { }
+    public void meth60611() { }
+    public void meth60612() { }
+    public void meth60613() { }
+    public void meth60614() { }
+    public void meth60615() { }
+    public void meth60616() { }
+    public void meth60617() { }
+    public void meth60618() { }
+    public void meth60619() { }
+    public void meth60620() { }
+    public void meth60621() { }
+    public void meth60622() { }
+    public void meth60623() { }
+    public void meth60624() { }
+    public void meth60625() { }
+    public void meth60626() { }
+    public void meth60627() { }
+    public void meth60628() { }
+    public void meth60629() { }
+    public void meth60630() { }
+    public void meth60631() { }
+    public void meth60632() { }
+    public void meth60633() { }
+    public void meth60634() { }
+    public void meth60635() { }
+    public void meth60636() { }
+    public void meth60637() { }
+    public void meth60638() { }
+    public void meth60639() { }
+    public void meth60640() { }
+    public void meth60641() { }
+    public void meth60642() { }
+    public void meth60643() { }
+    public void meth60644() { }
+    public void meth60645() { }
+    public void meth60646() { }
+    public void meth60647() { }
+    public void meth60648() { }
+    public void meth60649() { }
+    public void meth60650() { }
+    public void meth60651() { }
+    public void meth60652() { }
+    public void meth60653() { }
+    public void meth60654() { }
+    public void meth60655() { }
+    public void meth60656() { }
+    public void meth60657() { }
+    public void meth60658() { }
+    public void meth60659() { }
+    public void meth60660() { }
+    public void meth60661() { }
+    public void meth60662() { }
+    public void meth60663() { }
+    public void meth60664() { }
+    public void meth60665() { }
+    public void meth60666() { }
+    public void meth60667() { }
+    public void meth60668() { }
+    public void meth60669() { }
+    public void meth60670() { }
+    public void meth60671() { }
+    public void meth60672() { }
+    public void meth60673() { }
+    public void meth60674() { }
+    public void meth60675() { }
+    public void meth60676() { }
+    public void meth60677() { }
+    public void meth60678() { }
+    public void meth60679() { }
+    public void meth60680() { }
+    public void meth60681() { }
+    public void meth60682() { }
+    public void meth60683() { }
+    public void meth60684() { }
+    public void meth60685() { }
+    public void meth60686() { }
+    public void meth60687() { }
+    public void meth60688() { }
+    public void meth60689() { }
+    public void meth60690() { }
+    public void meth60691() { }
+    public void meth60692() { }
+    public void meth60693() { }
+    public void meth60694() { }
+    public void meth60695() { }
+    public void meth60696() { }
+    public void meth60697() { }
+    public void meth60698() { }
+    public void meth60699() { }
+    public void meth60700() { }
+    public void meth60701() { }
+    public void meth60702() { }
+    public void meth60703() { }
+    public void meth60704() { }
+    public void meth60705() { }
+    public void meth60706() { }
+    public void meth60707() { }
+    public void meth60708() { }
+    public void meth60709() { }
+    public void meth60710() { }
+    public void meth60711() { }
+    public void meth60712() { }
+    public void meth60713() { }
+    public void meth60714() { }
+    public void meth60715() { }
+    public void meth60716() { }
+    public void meth60717() { }
+    public void meth60718() { }
+    public void meth60719() { }
+    public void meth60720() { }
+    public void meth60721() { }
+    public void meth60722() { }
+    public void meth60723() { }
+    public void meth60724() { }
+    public void meth60725() { }
+    public void meth60726() { }
+    public void meth60727() { }
+    public void meth60728() { }
+    public void meth60729() { }
+    public void meth60730() { }
+    public void meth60731() { }
+    public void meth60732() { }
+    public void meth60733() { }
+    public void meth60734() { }
+    public void meth60735() { }
+    public void meth60736() { }
+    public void meth60737() { }
+    public void meth60738() { }
+    public void meth60739() { }
+    public void meth60740() { }
+    public void meth60741() { }
+    public void meth60742() { }
+    public void meth60743() { }
+    public void meth60744() { }
+    public void meth60745() { }
+    public void meth60746() { }
+    public void meth60747() { }
+    public void meth60748() { }
+    public void meth60749() { }
+    public void meth60750() { }
+    public void meth60751() { }
+    public void meth60752() { }
+    public void meth60753() { }
+    public void meth60754() { }
+    public void meth60755() { }
+    public void meth60756() { }
+    public void meth60757() { }
+    public void meth60758() { }
+    public void meth60759() { }
+    public void meth60760() { }
+    public void meth60761() { }
+    public void meth60762() { }
+    public void meth60763() { }
+    public void meth60764() { }
+    public void meth60765() { }
+    public void meth60766() { }
+    public void meth60767() { }
+    public void meth60768() { }
+    public void meth60769() { }
+    public void meth60770() { }
+    public void meth60771() { }
+    public void meth60772() { }
+    public void meth60773() { }
+    public void meth60774() { }
+    public void meth60775() { }
+    public void meth60776() { }
+    public void meth60777() { }
+    public void meth60778() { }
+    public void meth60779() { }
+    public void meth60780() { }
+    public void meth60781() { }
+    public void meth60782() { }
+    public void meth60783() { }
+    public void meth60784() { }
+    public void meth60785() { }
+    public void meth60786() { }
+    public void meth60787() { }
+    public void meth60788() { }
+    public void meth60789() { }
+    public void meth60790() { }
+    public void meth60791() { }
+    public void meth60792() { }
+    public void meth60793() { }
+    public void meth60794() { }
+    public void meth60795() { }
+    public void meth60796() { }
+    public void meth60797() { }
+    public void meth60798() { }
+    public void meth60799() { }
+    public void meth60800() { }
+    public void meth60801() { }
+    public void meth60802() { }
+    public void meth60803() { }
+    public void meth60804() { }
+    public void meth60805() { }
+    public void meth60806() { }
+    public void meth60807() { }
+    public void meth60808() { }
+    public void meth60809() { }
+    public void meth60810() { }
+    public void meth60811() { }
+    public void meth60812() { }
+    public void meth60813() { }
+    public void meth60814() { }
+    public void meth60815() { }
+    public void meth60816() { }
+    public void meth60817() { }
+    public void meth60818() { }
+    public void meth60819() { }
+    public void meth60820() { }
+    public void meth60821() { }
+    public void meth60822() { }
+    public void meth60823() { }
+    public void meth60824() { }
+    public void meth60825() { }
+    public void meth60826() { }
+    public void meth60827() { }
+    public void meth60828() { }
+    public void meth60829() { }
+    public void meth60830() { }
+    public void meth60831() { }
+    public void meth60832() { }
+    public void meth60833() { }
+    public void meth60834() { }
+    public void meth60835() { }
+    public void meth60836() { }
+    public void meth60837() { }
+    public void meth60838() { }
+    public void meth60839() { }
+    public void meth60840() { }
+    public void meth60841() { }
+    public void meth60842() { }
+    public void meth60843() { }
+    public void meth60844() { }
+    public void meth60845() { }
+    public void meth60846() { }
+    public void meth60847() { }
+    public void meth60848() { }
+    public void meth60849() { }
+    public void meth60850() { }
+    public void meth60851() { }
+    public void meth60852() { }
+    public void meth60853() { }
+    public void meth60854() { }
+    public void meth60855() { }
+    public void meth60856() { }
+    public void meth60857() { }
+    public void meth60858() { }
+    public void meth60859() { }
+    public void meth60860() { }
+    public void meth60861() { }
+    public void meth60862() { }
+    public void meth60863() { }
+    public void meth60864() { }
+    public void meth60865() { }
+    public void meth60866() { }
+    public void meth60867() { }
+    public void meth60868() { }
+    public void meth60869() { }
+    public void meth60870() { }
+    public void meth60871() { }
+    public void meth60872() { }
+    public void meth60873() { }
+    public void meth60874() { }
+    public void meth60875() { }
+    public void meth60876() { }
+    public void meth60877() { }
+    public void meth60878() { }
+    public void meth60879() { }
+    public void meth60880() { }
+    public void meth60881() { }
+    public void meth60882() { }
+    public void meth60883() { }
+    public void meth60884() { }
+    public void meth60885() { }
+    public void meth60886() { }
+    public void meth60887() { }
+    public void meth60888() { }
+    public void meth60889() { }
+    public void meth60890() { }
+    public void meth60891() { }
+    public void meth60892() { }
+    public void meth60893() { }
+    public void meth60894() { }
+    public void meth60895() { }
+    public void meth60896() { }
+    public void meth60897() { }
+    public void meth60898() { }
+    public void meth60899() { }
+    public void meth60900() { }
+    public void meth60901() { }
+    public void meth60902() { }
+    public void meth60903() { }
+    public void meth60904() { }
+    public void meth60905() { }
+    public void meth60906() { }
+    public void meth60907() { }
+    public void meth60908() { }
+    public void meth60909() { }
+    public void meth60910() { }
+    public void meth60911() { }
+    public void meth60912() { }
+    public void meth60913() { }
+    public void meth60914() { }
+    public void meth60915() { }
+    public void meth60916() { }
+    public void meth60917() { }
+    public void meth60918() { }
+    public void meth60919() { }
+    public void meth60920() { }
+    public void meth60921() { }
+    public void meth60922() { }
+    public void meth60923() { }
+    public void meth60924() { }
+    public void meth60925() { }
+    public void meth60926() { }
+    public void meth60927() { }
+    public void meth60928() { }
+    public void meth60929() { }
+    public void meth60930() { }
+    public void meth60931() { }
+    public void meth60932() { }
+    public void meth60933() { }
+    public void meth60934() { }
+    public void meth60935() { }
+    public void meth60936() { }
+    public void meth60937() { }
+    public void meth60938() { }
+    public void meth60939() { }
+    public void meth60940() { }
+    public void meth60941() { }
+    public void meth60942() { }
+    public void meth60943() { }
+    public void meth60944() { }
+    public void meth60945() { }
+    public void meth60946() { }
+    public void meth60947() { }
+    public void meth60948() { }
+    public void meth60949() { }
+    public void meth60950() { }
+    public void meth60951() { }
+    public void meth60952() { }
+    public void meth60953() { }
+    public void meth60954() { }
+    public void meth60955() { }
+    public void meth60956() { }
+    public void meth60957() { }
+    public void meth60958() { }
+    public void meth60959() { }
+    public void meth60960() { }
+    public void meth60961() { }
+    public void meth60962() { }
+    public void meth60963() { }
+    public void meth60964() { }
+    public void meth60965() { }
+    public void meth60966() { }
+    public void meth60967() { }
+    public void meth60968() { }
+    public void meth60969() { }
+    public void meth60970() { }
+    public void meth60971() { }
+    public void meth60972() { }
+    public void meth60973() { }
+    public void meth60974() { }
+    public void meth60975() { }
+    public void meth60976() { }
+    public void meth60977() { }
+    public void meth60978() { }
+    public void meth60979() { }
+    public void meth60980() { }
+    public void meth60981() { }
+    public void meth60982() { }
+    public void meth60983() { }
+    public void meth60984() { }
+    public void meth60985() { }
+    public void meth60986() { }
+    public void meth60987() { }
+    public void meth60988() { }
+    public void meth60989() { }
+    public void meth60990() { }
+    public void meth60991() { }
+    public void meth60992() { }
+    public void meth60993() { }
+    public void meth60994() { }
+    public void meth60995() { }
+    public void meth60996() { }
+    public void meth60997() { }
+    public void meth60998() { }
+    public void meth60999() { }
+    public void meth61000() { }
+    public void meth61001() { }
+    public void meth61002() { }
+    public void meth61003() { }
+    public void meth61004() { }
+    public void meth61005() { }
+    public void meth61006() { }
+    public void meth61007() { }
+    public void meth61008() { }
+    public void meth61009() { }
+    public void meth61010() { }
+    public void meth61011() { }
+    public void meth61012() { }
+    public void meth61013() { }
+    public void meth61014() { }
+    public void meth61015() { }
+    public void meth61016() { }
+    public void meth61017() { }
+    public void meth61018() { }
+    public void meth61019() { }
+    public void meth61020() { }
+    public void meth61021() { }
+    public void meth61022() { }
+    public void meth61023() { }
+    public void meth61024() { }
+    public void meth61025() { }
+    public void meth61026() { }
+    public void meth61027() { }
+    public void meth61028() { }
+    public void meth61029() { }
+    public void meth61030() { }
+    public void meth61031() { }
+    public void meth61032() { }
+    public void meth61033() { }
+    public void meth61034() { }
+    public void meth61035() { }
+    public void meth61036() { }
+    public void meth61037() { }
+    public void meth61038() { }
+    public void meth61039() { }
+    public void meth61040() { }
+    public void meth61041() { }
+    public void meth61042() { }
+    public void meth61043() { }
+    public void meth61044() { }
+    public void meth61045() { }
+    public void meth61046() { }
+    public void meth61047() { }
+    public void meth61048() { }
+    public void meth61049() { }
+    public void meth61050() { }
+    public void meth61051() { }
+    public void meth61052() { }
+    public void meth61053() { }
+    public void meth61054() { }
+    public void meth61055() { }
+    public void meth61056() { }
+    public void meth61057() { }
+    public void meth61058() { }
+    public void meth61059() { }
+    public void meth61060() { }
+    public void meth61061() { }
+    public void meth61062() { }
+    public void meth61063() { }
+    public void meth61064() { }
+    public void meth61065() { }
+    public void meth61066() { }
+    public void meth61067() { }
+    public void meth61068() { }
+    public void meth61069() { }
+    public void meth61070() { }
+    public void meth61071() { }
+    public void meth61072() { }
+    public void meth61073() { }
+    public void meth61074() { }
+    public void meth61075() { }
+    public void meth61076() { }
+    public void meth61077() { }
+    public void meth61078() { }
+    public void meth61079() { }
+    public void meth61080() { }
+    public void meth61081() { }
+    public void meth61082() { }
+    public void meth61083() { }
+    public void meth61084() { }
+    public void meth61085() { }
+    public void meth61086() { }
+    public void meth61087() { }
+    public void meth61088() { }
+    public void meth61089() { }
+    public void meth61090() { }
+    public void meth61091() { }
+    public void meth61092() { }
+    public void meth61093() { }
+    public void meth61094() { }
+    public void meth61095() { }
+    public void meth61096() { }
+    public void meth61097() { }
+    public void meth61098() { }
+    public void meth61099() { }
+    public void meth61100() { }
+    public void meth61101() { }
+    public void meth61102() { }
+    public void meth61103() { }
+    public void meth61104() { }
+    public void meth61105() { }
+    public void meth61106() { }
+    public void meth61107() { }
+    public void meth61108() { }
+    public void meth61109() { }
+    public void meth61110() { }
+    public void meth61111() { }
+    public void meth61112() { }
+    public void meth61113() { }
+    public void meth61114() { }
+    public void meth61115() { }
+    public void meth61116() { }
+    public void meth61117() { }
+    public void meth61118() { }
+    public void meth61119() { }
+    public void meth61120() { }
+    public void meth61121() { }
+    public void meth61122() { }
+    public void meth61123() { }
+    public void meth61124() { }
+    public void meth61125() { }
+    public void meth61126() { }
+    public void meth61127() { }
+    public void meth61128() { }
+    public void meth61129() { }
+    public void meth61130() { }
+    public void meth61131() { }
+    public void meth61132() { }
+    public void meth61133() { }
+    public void meth61134() { }
+    public void meth61135() { }
+    public void meth61136() { }
+    public void meth61137() { }
+    public void meth61138() { }
+    public void meth61139() { }
+    public void meth61140() { }
+    public void meth61141() { }
+    public void meth61142() { }
+    public void meth61143() { }
+    public void meth61144() { }
+    public void meth61145() { }
+    public void meth61146() { }
+    public void meth61147() { }
+    public void meth61148() { }
+    public void meth61149() { }
+    public void meth61150() { }
+    public void meth61151() { }
+    public void meth61152() { }
+    public void meth61153() { }
+    public void meth61154() { }
+    public void meth61155() { }
+    public void meth61156() { }
+    public void meth61157() { }
+    public void meth61158() { }
+    public void meth61159() { }
+    public void meth61160() { }
+    public void meth61161() { }
+    public void meth61162() { }
+    public void meth61163() { }
+    public void meth61164() { }
+    public void meth61165() { }
+    public void meth61166() { }
+    public void meth61167() { }
+    public void meth61168() { }
+    public void meth61169() { }
+    public void meth61170() { }
+    public void meth61171() { }
+    public void meth61172() { }
+    public void meth61173() { }
+    public void meth61174() { }
+    public void meth61175() { }
+    public void meth61176() { }
+    public void meth61177() { }
+    public void meth61178() { }
+    public void meth61179() { }
+    public void meth61180() { }
+    public void meth61181() { }
+    public void meth61182() { }
+    public void meth61183() { }
+    public void meth61184() { }
+    public void meth61185() { }
+    public void meth61186() { }
+    public void meth61187() { }
+    public void meth61188() { }
+    public void meth61189() { }
+    public void meth61190() { }
+    public void meth61191() { }
+    public void meth61192() { }
+    public void meth61193() { }
+    public void meth61194() { }
+    public void meth61195() { }
+    public void meth61196() { }
+    public void meth61197() { }
+    public void meth61198() { }
+    public void meth61199() { }
+    public void meth61200() { }
+    public void meth61201() { }
+    public void meth61202() { }
+    public void meth61203() { }
+    public void meth61204() { }
+    public void meth61205() { }
+    public void meth61206() { }
+    public void meth61207() { }
+    public void meth61208() { }
+    public void meth61209() { }
+    public void meth61210() { }
+    public void meth61211() { }
+    public void meth61212() { }
+    public void meth61213() { }
+    public void meth61214() { }
+    public void meth61215() { }
+    public void meth61216() { }
+    public void meth61217() { }
+    public void meth61218() { }
+    public void meth61219() { }
+    public void meth61220() { }
+    public void meth61221() { }
+    public void meth61222() { }
+    public void meth61223() { }
+    public void meth61224() { }
+    public void meth61225() { }
+    public void meth61226() { }
+    public void meth61227() { }
+    public void meth61228() { }
+    public void meth61229() { }
+    public void meth61230() { }
+    public void meth61231() { }
+    public void meth61232() { }
+    public void meth61233() { }
+    public void meth61234() { }
+    public void meth61235() { }
+    public void meth61236() { }
+    public void meth61237() { }
+    public void meth61238() { }
+    public void meth61239() { }
+    public void meth61240() { }
+    public void meth61241() { }
+    public void meth61242() { }
+    public void meth61243() { }
+    public void meth61244() { }
+    public void meth61245() { }
+    public void meth61246() { }
+    public void meth61247() { }
+    public void meth61248() { }
+    public void meth61249() { }
+    public void meth61250() { }
+    public void meth61251() { }
+    public void meth61252() { }
+    public void meth61253() { }
+    public void meth61254() { }
+    public void meth61255() { }
+    public void meth61256() { }
+    public void meth61257() { }
+    public void meth61258() { }
+    public void meth61259() { }
+    public void meth61260() { }
+    public void meth61261() { }
+    public void meth61262() { }
+    public void meth61263() { }
+    public void meth61264() { }
+    public void meth61265() { }
+    public void meth61266() { }
+    public void meth61267() { }
+    public void meth61268() { }
+    public void meth61269() { }
+    public void meth61270() { }
+    public void meth61271() { }
+    public void meth61272() { }
+    public void meth61273() { }
+    public void meth61274() { }
+    public void meth61275() { }
+    public void meth61276() { }
+    public void meth61277() { }
+    public void meth61278() { }
+    public void meth61279() { }
+    public void meth61280() { }
+    public void meth61281() { }
+    public void meth61282() { }
+    public void meth61283() { }
+    public void meth61284() { }
+    public void meth61285() { }
+    public void meth61286() { }
+    public void meth61287() { }
+    public void meth61288() { }
+    public void meth61289() { }
+    public void meth61290() { }
+    public void meth61291() { }
+    public void meth61292() { }
+    public void meth61293() { }
+    public void meth61294() { }
+    public void meth61295() { }
+    public void meth61296() { }
+    public void meth61297() { }
+    public void meth61298() { }
+    public void meth61299() { }
+    public void meth61300() { }
+    public void meth61301() { }
+    public void meth61302() { }
+    public void meth61303() { }
+    public void meth61304() { }
+    public void meth61305() { }
+    public void meth61306() { }
+    public void meth61307() { }
+    public void meth61308() { }
+    public void meth61309() { }
+    public void meth61310() { }
+    public void meth61311() { }
+    public void meth61312() { }
+    public void meth61313() { }
+    public void meth61314() { }
+    public void meth61315() { }
+    public void meth61316() { }
+    public void meth61317() { }
+    public void meth61318() { }
+    public void meth61319() { }
+    public void meth61320() { }
+    public void meth61321() { }
+    public void meth61322() { }
+    public void meth61323() { }
+    public void meth61324() { }
+    public void meth61325() { }
+    public void meth61326() { }
+    public void meth61327() { }
+    public void meth61328() { }
+    public void meth61329() { }
+    public void meth61330() { }
+    public void meth61331() { }
+    public void meth61332() { }
+    public void meth61333() { }
+    public void meth61334() { }
+    public void meth61335() { }
+    public void meth61336() { }
+    public void meth61337() { }
+    public void meth61338() { }
+    public void meth61339() { }
+    public void meth61340() { }
+    public void meth61341() { }
+    public void meth61342() { }
+    public void meth61343() { }
+    public void meth61344() { }
+    public void meth61345() { }
+    public void meth61346() { }
+    public void meth61347() { }
+    public void meth61348() { }
+    public void meth61349() { }
+    public void meth61350() { }
+    public void meth61351() { }
+    public void meth61352() { }
+    public void meth61353() { }
+    public void meth61354() { }
+    public void meth61355() { }
+    public void meth61356() { }
+    public void meth61357() { }
+    public void meth61358() { }
+    public void meth61359() { }
+    public void meth61360() { }
+    public void meth61361() { }
+    public void meth61362() { }
+    public void meth61363() { }
+    public void meth61364() { }
+    public void meth61365() { }
+    public void meth61366() { }
+    public void meth61367() { }
+    public void meth61368() { }
+    public void meth61369() { }
+    public void meth61370() { }
+    public void meth61371() { }
+    public void meth61372() { }
+    public void meth61373() { }
+    public void meth61374() { }
+    public void meth61375() { }
+    public void meth61376() { }
+    public void meth61377() { }
+    public void meth61378() { }
+    public void meth61379() { }
+    public void meth61380() { }
+    public void meth61381() { }
+    public void meth61382() { }
+    public void meth61383() { }
+    public void meth61384() { }
+    public void meth61385() { }
+    public void meth61386() { }
+    public void meth61387() { }
+    public void meth61388() { }
+    public void meth61389() { }
+    public void meth61390() { }
+    public void meth61391() { }
+    public void meth61392() { }
+    public void meth61393() { }
+    public void meth61394() { }
+    public void meth61395() { }
+    public void meth61396() { }
+    public void meth61397() { }
+    public void meth61398() { }
+    public void meth61399() { }
+    public void meth61400() { }
+    public void meth61401() { }
+    public void meth61402() { }
+    public void meth61403() { }
+    public void meth61404() { }
+    public void meth61405() { }
+    public void meth61406() { }
+    public void meth61407() { }
+    public void meth61408() { }
+    public void meth61409() { }
+    public void meth61410() { }
+    public void meth61411() { }
+    public void meth61412() { }
+    public void meth61413() { }
+    public void meth61414() { }
+    public void meth61415() { }
+    public void meth61416() { }
+    public void meth61417() { }
+    public void meth61418() { }
+    public void meth61419() { }
+    public void meth61420() { }
+    public void meth61421() { }
+    public void meth61422() { }
+    public void meth61423() { }
+    public void meth61424() { }
+    public void meth61425() { }
+    public void meth61426() { }
+    public void meth61427() { }
+    public void meth61428() { }
+    public void meth61429() { }
+    public void meth61430() { }
+    public void meth61431() { }
+    public void meth61432() { }
+    public void meth61433() { }
+    public void meth61434() { }
+    public void meth61435() { }
+    public void meth61436() { }
+    public void meth61437() { }
+    public void meth61438() { }
+    public void meth61439() { }
+    public void meth61440() { }
+    public void meth61441() { }
+    public void meth61442() { }
+    public void meth61443() { }
+    public void meth61444() { }
+    public void meth61445() { }
+    public void meth61446() { }
+    public void meth61447() { }
+    public void meth61448() { }
+    public void meth61449() { }
+    public void meth61450() { }
+    public void meth61451() { }
+    public void meth61452() { }
+    public void meth61453() { }
+    public void meth61454() { }
+    public void meth61455() { }
+    public void meth61456() { }
+    public void meth61457() { }
+    public void meth61458() { }
+    public void meth61459() { }
+    public void meth61460() { }
+    public void meth61461() { }
+    public void meth61462() { }
+    public void meth61463() { }
+    public void meth61464() { }
+    public void meth61465() { }
+    public void meth61466() { }
+    public void meth61467() { }
+    public void meth61468() { }
+    public void meth61469() { }
+    public void meth61470() { }
+    public void meth61471() { }
+    public void meth61472() { }
+    public void meth61473() { }
+    public void meth61474() { }
+    public void meth61475() { }
+    public void meth61476() { }
+    public void meth61477() { }
+    public void meth61478() { }
+    public void meth61479() { }
+    public void meth61480() { }
+    public void meth61481() { }
+    public void meth61482() { }
+    public void meth61483() { }
+    public void meth61484() { }
+    public void meth61485() { }
+    public void meth61486() { }
+    public void meth61487() { }
+    public void meth61488() { }
+    public void meth61489() { }
+    public void meth61490() { }
+    public void meth61491() { }
+    public void meth61492() { }
+    public void meth61493() { }
+    public void meth61494() { }
+    public void meth61495() { }
+    public void meth61496() { }
+    public void meth61497() { }
+    public void meth61498() { }
+    public void meth61499() { }
+    public void meth61500() { }
+    public void meth61501() { }
+    public void meth61502() { }
+    public void meth61503() { }
+    public void meth61504() { }
+    public void meth61505() { }
+    public void meth61506() { }
+    public void meth61507() { }
+    public void meth61508() { }
+    public void meth61509() { }
+    public void meth61510() { }
+    public void meth61511() { }
+    public void meth61512() { }
+    public void meth61513() { }
+    public void meth61514() { }
+    public void meth61515() { }
+    public void meth61516() { }
+    public void meth61517() { }
+    public void meth61518() { }
+    public void meth61519() { }
+    public void meth61520() { }
+    public void meth61521() { }
+    public void meth61522() { }
+    public void meth61523() { }
+    public void meth61524() { }
+    public void meth61525() { }
+    public void meth61526() { }
+    public void meth61527() { }
+    public void meth61528() { }
+    public void meth61529() { }
+    public void meth61530() { }
+    public void meth61531() { }
+    public void meth61532() { }
+    public void meth61533() { }
+    public void meth61534() { }
+    public void meth61535() { }
+    public void meth61536() { }
+    public void meth61537() { }
+    public void meth61538() { }
+    public void meth61539() { }
+    public void meth61540() { }
+    public void meth61541() { }
+    public void meth61542() { }
+    public void meth61543() { }
+    public void meth61544() { }
+    public void meth61545() { }
+    public void meth61546() { }
+    public void meth61547() { }
+    public void meth61548() { }
+    public void meth61549() { }
+    public void meth61550() { }
+    public void meth61551() { }
+    public void meth61552() { }
+    public void meth61553() { }
+    public void meth61554() { }
+    public void meth61555() { }
+    public void meth61556() { }
+    public void meth61557() { }
+    public void meth61558() { }
+    public void meth61559() { }
+    public void meth61560() { }
+    public void meth61561() { }
+    public void meth61562() { }
+    public void meth61563() { }
+    public void meth61564() { }
+    public void meth61565() { }
+    public void meth61566() { }
+    public void meth61567() { }
+    public void meth61568() { }
+    public void meth61569() { }
+    public void meth61570() { }
+    public void meth61571() { }
+    public void meth61572() { }
+    public void meth61573() { }
+    public void meth61574() { }
+    public void meth61575() { }
+    public void meth61576() { }
+    public void meth61577() { }
+    public void meth61578() { }
+    public void meth61579() { }
+    public void meth61580() { }
+    public void meth61581() { }
+    public void meth61582() { }
+    public void meth61583() { }
+    public void meth61584() { }
+    public void meth61585() { }
+    public void meth61586() { }
+    public void meth61587() { }
+    public void meth61588() { }
+    public void meth61589() { }
+    public void meth61590() { }
+    public void meth61591() { }
+    public void meth61592() { }
+    public void meth61593() { }
+    public void meth61594() { }
+    public void meth61595() { }
+    public void meth61596() { }
+    public void meth61597() { }
+    public void meth61598() { }
+    public void meth61599() { }
+    public void meth61600() { }
+    public void meth61601() { }
+    public void meth61602() { }
+    public void meth61603() { }
+    public void meth61604() { }
+    public void meth61605() { }
+    public void meth61606() { }
+    public void meth61607() { }
+    public void meth61608() { }
+    public void meth61609() { }
+    public void meth61610() { }
+    public void meth61611() { }
+    public void meth61612() { }
+    public void meth61613() { }
+    public void meth61614() { }
+    public void meth61615() { }
+    public void meth61616() { }
+    public void meth61617() { }
+    public void meth61618() { }
+    public void meth61619() { }
+    public void meth61620() { }
+    public void meth61621() { }
+    public void meth61622() { }
+    public void meth61623() { }
+    public void meth61624() { }
+    public void meth61625() { }
+    public void meth61626() { }
+    public void meth61627() { }
+    public void meth61628() { }
+    public void meth61629() { }
+    public void meth61630() { }
+    public void meth61631() { }
+    public void meth61632() { }
+    public void meth61633() { }
+    public void meth61634() { }
+    public void meth61635() { }
+    public void meth61636() { }
+    public void meth61637() { }
+    public void meth61638() { }
+    public void meth61639() { }
+    public void meth61640() { }
+    public void meth61641() { }
+    public void meth61642() { }
+    public void meth61643() { }
+    public void meth61644() { }
+    public void meth61645() { }
+    public void meth61646() { }
+    public void meth61647() { }
+    public void meth61648() { }
+    public void meth61649() { }
+    public void meth61650() { }
+    public void meth61651() { }
+    public void meth61652() { }
+    public void meth61653() { }
+    public void meth61654() { }
+    public void meth61655() { }
+    public void meth61656() { }
+    public void meth61657() { }
+    public void meth61658() { }
+    public void meth61659() { }
+    public void meth61660() { }
+    public void meth61661() { }
+    public void meth61662() { }
+    public void meth61663() { }
+    public void meth61664() { }
+    public void meth61665() { }
+    public void meth61666() { }
+    public void meth61667() { }
+    public void meth61668() { }
+    public void meth61669() { }
+    public void meth61670() { }
+    public void meth61671() { }
+    public void meth61672() { }
+    public void meth61673() { }
+    public void meth61674() { }
+    public void meth61675() { }
+    public void meth61676() { }
+    public void meth61677() { }
+    public void meth61678() { }
+    public void meth61679() { }
+    public void meth61680() { }
+    public void meth61681() { }
+    public void meth61682() { }
+    public void meth61683() { }
+    public void meth61684() { }
+    public void meth61685() { }
+    public void meth61686() { }
+    public void meth61687() { }
+    public void meth61688() { }
+    public void meth61689() { }
+    public void meth61690() { }
+    public void meth61691() { }
+    public void meth61692() { }
+    public void meth61693() { }
+    public void meth61694() { }
+    public void meth61695() { }
+    public void meth61696() { }
+    public void meth61697() { }
+    public void meth61698() { }
+    public void meth61699() { }
+    public void meth61700() { }
+    public void meth61701() { }
+    public void meth61702() { }
+    public void meth61703() { }
+    public void meth61704() { }
+    public void meth61705() { }
+    public void meth61706() { }
+    public void meth61707() { }
+    public void meth61708() { }
+    public void meth61709() { }
+    public void meth61710() { }
+    public void meth61711() { }
+    public void meth61712() { }
+    public void meth61713() { }
+    public void meth61714() { }
+    public void meth61715() { }
+    public void meth61716() { }
+    public void meth61717() { }
+    public void meth61718() { }
+    public void meth61719() { }
+    public void meth61720() { }
+    public void meth61721() { }
+    public void meth61722() { }
+    public void meth61723() { }
+    public void meth61724() { }
+    public void meth61725() { }
+    public void meth61726() { }
+    public void meth61727() { }
+    public void meth61728() { }
+    public void meth61729() { }
+    public void meth61730() { }
+    public void meth61731() { }
+    public void meth61732() { }
+    public void meth61733() { }
+    public void meth61734() { }
+    public void meth61735() { }
+    public void meth61736() { }
+    public void meth61737() { }
+    public void meth61738() { }
+    public void meth61739() { }
+    public void meth61740() { }
+    public void meth61741() { }
+    public void meth61742() { }
+    public void meth61743() { }
+    public void meth61744() { }
+    public void meth61745() { }
+    public void meth61746() { }
+    public void meth61747() { }
+    public void meth61748() { }
+    public void meth61749() { }
+    public void meth61750() { }
+    public void meth61751() { }
+    public void meth61752() { }
+    public void meth61753() { }
+    public void meth61754() { }
+    public void meth61755() { }
+    public void meth61756() { }
+    public void meth61757() { }
+    public void meth61758() { }
+    public void meth61759() { }
+    public void meth61760() { }
+    public void meth61761() { }
+    public void meth61762() { }
+    public void meth61763() { }
+    public void meth61764() { }
+    public void meth61765() { }
+    public void meth61766() { }
+    public void meth61767() { }
+    public void meth61768() { }
+    public void meth61769() { }
+    public void meth61770() { }
+    public void meth61771() { }
+    public void meth61772() { }
+    public void meth61773() { }
+    public void meth61774() { }
+    public void meth61775() { }
+    public void meth61776() { }
+    public void meth61777() { }
+    public void meth61778() { }
+    public void meth61779() { }
+    public void meth61780() { }
+    public void meth61781() { }
+    public void meth61782() { }
+    public void meth61783() { }
+    public void meth61784() { }
+    public void meth61785() { }
+    public void meth61786() { }
+    public void meth61787() { }
+    public void meth61788() { }
+    public void meth61789() { }
+    public void meth61790() { }
+    public void meth61791() { }
+    public void meth61792() { }
+    public void meth61793() { }
+    public void meth61794() { }
+    public void meth61795() { }
+    public void meth61796() { }
+    public void meth61797() { }
+    public void meth61798() { }
+    public void meth61799() { }
+    public void meth61800() { }
+    public void meth61801() { }
+    public void meth61802() { }
+    public void meth61803() { }
+    public void meth61804() { }
+    public void meth61805() { }
+    public void meth61806() { }
+    public void meth61807() { }
+    public void meth61808() { }
+    public void meth61809() { }
+    public void meth61810() { }
+    public void meth61811() { }
+    public void meth61812() { }
+    public void meth61813() { }
+    public void meth61814() { }
+    public void meth61815() { }
+    public void meth61816() { }
+    public void meth61817() { }
+    public void meth61818() { }
+    public void meth61819() { }
+    public void meth61820() { }
+    public void meth61821() { }
+    public void meth61822() { }
+    public void meth61823() { }
+    public void meth61824() { }
+    public void meth61825() { }
+    public void meth61826() { }
+    public void meth61827() { }
+    public void meth61828() { }
+    public void meth61829() { }
+    public void meth61830() { }
+    public void meth61831() { }
+    public void meth61832() { }
+    public void meth61833() { }
+    public void meth61834() { }
+    public void meth61835() { }
+    public void meth61836() { }
+    public void meth61837() { }
+    public void meth61838() { }
+    public void meth61839() { }
+    public void meth61840() { }
+    public void meth61841() { }
+    public void meth61842() { }
+    public void meth61843() { }
+    public void meth61844() { }
+    public void meth61845() { }
+    public void meth61846() { }
+    public void meth61847() { }
+    public void meth61848() { }
+    public void meth61849() { }
+    public void meth61850() { }
+    public void meth61851() { }
+    public void meth61852() { }
+    public void meth61853() { }
+    public void meth61854() { }
+    public void meth61855() { }
+    public void meth61856() { }
+    public void meth61857() { }
+    public void meth61858() { }
+    public void meth61859() { }
+    public void meth61860() { }
+    public void meth61861() { }
+    public void meth61862() { }
+    public void meth61863() { }
+    public void meth61864() { }
+    public void meth61865() { }
+    public void meth61866() { }
+    public void meth61867() { }
+    public void meth61868() { }
+    public void meth61869() { }
+    public void meth61870() { }
+    public void meth61871() { }
+    public void meth61872() { }
+    public void meth61873() { }
+    public void meth61874() { }
+    public void meth61875() { }
+    public void meth61876() { }
+    public void meth61877() { }
+    public void meth61878() { }
+    public void meth61879() { }
+    public void meth61880() { }
+    public void meth61881() { }
+    public void meth61882() { }
+    public void meth61883() { }
+    public void meth61884() { }
+    public void meth61885() { }
+    public void meth61886() { }
+    public void meth61887() { }
+    public void meth61888() { }
+    public void meth61889() { }
+    public void meth61890() { }
+    public void meth61891() { }
+    public void meth61892() { }
+    public void meth61893() { }
+    public void meth61894() { }
+    public void meth61895() { }
+    public void meth61896() { }
+    public void meth61897() { }
+    public void meth61898() { }
+    public void meth61899() { }
+    public void meth61900() { }
+    public void meth61901() { }
+    public void meth61902() { }
+    public void meth61903() { }
+    public void meth61904() { }
+    public void meth61905() { }
+    public void meth61906() { }
+    public void meth61907() { }
+    public void meth61908() { }
+    public void meth61909() { }
+    public void meth61910() { }
+    public void meth61911() { }
+    public void meth61912() { }
+    public void meth61913() { }
+    public void meth61914() { }
+    public void meth61915() { }
+    public void meth61916() { }
+    public void meth61917() { }
+    public void meth61918() { }
+    public void meth61919() { }
+    public void meth61920() { }
+    public void meth61921() { }
+    public void meth61922() { }
+    public void meth61923() { }
+    public void meth61924() { }
+    public void meth61925() { }
+    public void meth61926() { }
+    public void meth61927() { }
+    public void meth61928() { }
+    public void meth61929() { }
+    public void meth61930() { }
+    public void meth61931() { }
+    public void meth61932() { }
+    public void meth61933() { }
+    public void meth61934() { }
+    public void meth61935() { }
+    public void meth61936() { }
+    public void meth61937() { }
+    public void meth61938() { }
+    public void meth61939() { }
+    public void meth61940() { }
+    public void meth61941() { }
+    public void meth61942() { }
+    public void meth61943() { }
+    public void meth61944() { }
+    public void meth61945() { }
+    public void meth61946() { }
+    public void meth61947() { }
+    public void meth61948() { }
+    public void meth61949() { }
+    public void meth61950() { }
+    public void meth61951() { }
+    public void meth61952() { }
+    public void meth61953() { }
+    public void meth61954() { }
+    public void meth61955() { }
+    public void meth61956() { }
+    public void meth61957() { }
+    public void meth61958() { }
+    public void meth61959() { }
+    public void meth61960() { }
+    public void meth61961() { }
+    public void meth61962() { }
+    public void meth61963() { }
+    public void meth61964() { }
+    public void meth61965() { }
+    public void meth61966() { }
+    public void meth61967() { }
+    public void meth61968() { }
+    public void meth61969() { }
+    public void meth61970() { }
+    public void meth61971() { }
+    public void meth61972() { }
+    public void meth61973() { }
+    public void meth61974() { }
+    public void meth61975() { }
+    public void meth61976() { }
+    public void meth61977() { }
+    public void meth61978() { }
+    public void meth61979() { }
+    public void meth61980() { }
+    public void meth61981() { }
+    public void meth61982() { }
+    public void meth61983() { }
+    public void meth61984() { }
+    public void meth61985() { }
+    public void meth61986() { }
+    public void meth61987() { }
+    public void meth61988() { }
+    public void meth61989() { }
+    public void meth61990() { }
+    public void meth61991() { }
+    public void meth61992() { }
+    public void meth61993() { }
+    public void meth61994() { }
+    public void meth61995() { }
+    public void meth61996() { }
+    public void meth61997() { }
+    public void meth61998() { }
+    public void meth61999() { }
+    public void meth62000() { }
+    public void meth62001() { }
+    public void meth62002() { }
+    public void meth62003() { }
+    public void meth62004() { }
+    public void meth62005() { }
+    public void meth62006() { }
+    public void meth62007() { }
+    public void meth62008() { }
+    public void meth62009() { }
+    public void meth62010() { }
+    public void meth62011() { }
+    public void meth62012() { }
+    public void meth62013() { }
+    public void meth62014() { }
+    public void meth62015() { }
+    public void meth62016() { }
+    public void meth62017() { }
+    public void meth62018() { }
+    public void meth62019() { }
+    public void meth62020() { }
+    public void meth62021() { }
+    public void meth62022() { }
+    public void meth62023() { }
+    public void meth62024() { }
+    public void meth62025() { }
+    public void meth62026() { }
+    public void meth62027() { }
+    public void meth62028() { }
+    public void meth62029() { }
+    public void meth62030() { }
+    public void meth62031() { }
+    public void meth62032() { }
+    public void meth62033() { }
+    public void meth62034() { }
+    public void meth62035() { }
+    public void meth62036() { }
+    public void meth62037() { }
+    public void meth62038() { }
+    public void meth62039() { }
+    public void meth62040() { }
+    public void meth62041() { }
+    public void meth62042() { }
+    public void meth62043() { }
+    public void meth62044() { }
+    public void meth62045() { }
+    public void meth62046() { }
+    public void meth62047() { }
+    public void meth62048() { }
+    public void meth62049() { }
+    public void meth62050() { }
+    public void meth62051() { }
+    public void meth62052() { }
+    public void meth62053() { }
+    public void meth62054() { }
+    public void meth62055() { }
+    public void meth62056() { }
+    public void meth62057() { }
+    public void meth62058() { }
+    public void meth62059() { }
+    public void meth62060() { }
+    public void meth62061() { }
+    public void meth62062() { }
+    public void meth62063() { }
+    public void meth62064() { }
+    public void meth62065() { }
+    public void meth62066() { }
+    public void meth62067() { }
+    public void meth62068() { }
+    public void meth62069() { }
+    public void meth62070() { }
+    public void meth62071() { }
+    public void meth62072() { }
+    public void meth62073() { }
+    public void meth62074() { }
+    public void meth62075() { }
+    public void meth62076() { }
+    public void meth62077() { }
+    public void meth62078() { }
+    public void meth62079() { }
+    public void meth62080() { }
+    public void meth62081() { }
+    public void meth62082() { }
+    public void meth62083() { }
+    public void meth62084() { }
+    public void meth62085() { }
+    public void meth62086() { }
+    public void meth62087() { }
+    public void meth62088() { }
+    public void meth62089() { }
+    public void meth62090() { }
+    public void meth62091() { }
+    public void meth62092() { }
+    public void meth62093() { }
+    public void meth62094() { }
+    public void meth62095() { }
+    public void meth62096() { }
+    public void meth62097() { }
+    public void meth62098() { }
+    public void meth62099() { }
+    public void meth62100() { }
+    public void meth62101() { }
+    public void meth62102() { }
+    public void meth62103() { }
+    public void meth62104() { }
+    public void meth62105() { }
+    public void meth62106() { }
+    public void meth62107() { }
+    public void meth62108() { }
+    public void meth62109() { }
+    public void meth62110() { }
+    public void meth62111() { }
+    public void meth62112() { }
+    public void meth62113() { }
+    public void meth62114() { }
+    public void meth62115() { }
+    public void meth62116() { }
+    public void meth62117() { }
+    public void meth62118() { }
+    public void meth62119() { }
+    public void meth62120() { }
+    public void meth62121() { }
+    public void meth62122() { }
+    public void meth62123() { }
+    public void meth62124() { }
+    public void meth62125() { }
+    public void meth62126() { }
+    public void meth62127() { }
+    public void meth62128() { }
+    public void meth62129() { }
+    public void meth62130() { }
+    public void meth62131() { }
+    public void meth62132() { }
+    public void meth62133() { }
+    public void meth62134() { }
+    public void meth62135() { }
+    public void meth62136() { }
+    public void meth62137() { }
+    public void meth62138() { }
+    public void meth62139() { }
+    public void meth62140() { }
+    public void meth62141() { }
+    public void meth62142() { }
+    public void meth62143() { }
+    public void meth62144() { }
+    public void meth62145() { }
+    public void meth62146() { }
+    public void meth62147() { }
+    public void meth62148() { }
+    public void meth62149() { }
+    public void meth62150() { }
+    public void meth62151() { }
+    public void meth62152() { }
+    public void meth62153() { }
+    public void meth62154() { }
+    public void meth62155() { }
+    public void meth62156() { }
+    public void meth62157() { }
+    public void meth62158() { }
+    public void meth62159() { }
+    public void meth62160() { }
+    public void meth62161() { }
+    public void meth62162() { }
+    public void meth62163() { }
+    public void meth62164() { }
+    public void meth62165() { }
+    public void meth62166() { }
+    public void meth62167() { }
+    public void meth62168() { }
+    public void meth62169() { }
+    public void meth62170() { }
+    public void meth62171() { }
+    public void meth62172() { }
+    public void meth62173() { }
+    public void meth62174() { }
+    public void meth62175() { }
+    public void meth62176() { }
+    public void meth62177() { }
+    public void meth62178() { }
+    public void meth62179() { }
+    public void meth62180() { }
+    public void meth62181() { }
+    public void meth62182() { }
+    public void meth62183() { }
+    public void meth62184() { }
+    public void meth62185() { }
+    public void meth62186() { }
+    public void meth62187() { }
+    public void meth62188() { }
+    public void meth62189() { }
+    public void meth62190() { }
+    public void meth62191() { }
+    public void meth62192() { }
+    public void meth62193() { }
+    public void meth62194() { }
+    public void meth62195() { }
+    public void meth62196() { }
+    public void meth62197() { }
+    public void meth62198() { }
+    public void meth62199() { }
+    public void meth62200() { }
+    public void meth62201() { }
+    public void meth62202() { }
+    public void meth62203() { }
+    public void meth62204() { }
+    public void meth62205() { }
+    public void meth62206() { }
+    public void meth62207() { }
+    public void meth62208() { }
+    public void meth62209() { }
+    public void meth62210() { }
+    public void meth62211() { }
+    public void meth62212() { }
+    public void meth62213() { }
+    public void meth62214() { }
+    public void meth62215() { }
+    public void meth62216() { }
+    public void meth62217() { }
+    public void meth62218() { }
+    public void meth62219() { }
+    public void meth62220() { }
+    public void meth62221() { }
+    public void meth62222() { }
+    public void meth62223() { }
+    public void meth62224() { }
+    public void meth62225() { }
+    public void meth62226() { }
+    public void meth62227() { }
+    public void meth62228() { }
+    public void meth62229() { }
+    public void meth62230() { }
+    public void meth62231() { }
+    public void meth62232() { }
+    public void meth62233() { }
+    public void meth62234() { }
+    public void meth62235() { }
+    public void meth62236() { }
+    public void meth62237() { }
+    public void meth62238() { }
+    public void meth62239() { }
+    public void meth62240() { }
+    public void meth62241() { }
+    public void meth62242() { }
+    public void meth62243() { }
+    public void meth62244() { }
+    public void meth62245() { }
+    public void meth62246() { }
+    public void meth62247() { }
+    public void meth62248() { }
+    public void meth62249() { }
+    public void meth62250() { }
+    public void meth62251() { }
+    public void meth62252() { }
+    public void meth62253() { }
+    public void meth62254() { }
+    public void meth62255() { }
+    public void meth62256() { }
+    public void meth62257() { }
+    public void meth62258() { }
+    public void meth62259() { }
+    public void meth62260() { }
+    public void meth62261() { }
+    public void meth62262() { }
+    public void meth62263() { }
+    public void meth62264() { }
+    public void meth62265() { }
+    public void meth62266() { }
+    public void meth62267() { }
+    public void meth62268() { }
+    public void meth62269() { }
+    public void meth62270() { }
+    public void meth62271() { }
+    public void meth62272() { }
+    public void meth62273() { }
+    public void meth62274() { }
+    public void meth62275() { }
+    public void meth62276() { }
+    public void meth62277() { }
+    public void meth62278() { }
+    public void meth62279() { }
+    public void meth62280() { }
+    public void meth62281() { }
+    public void meth62282() { }
+    public void meth62283() { }
+    public void meth62284() { }
+    public void meth62285() { }
+    public void meth62286() { }
+    public void meth62287() { }
+    public void meth62288() { }
+    public void meth62289() { }
+    public void meth62290() { }
+    public void meth62291() { }
+    public void meth62292() { }
+    public void meth62293() { }
+    public void meth62294() { }
+    public void meth62295() { }
+    public void meth62296() { }
+    public void meth62297() { }
+    public void meth62298() { }
+    public void meth62299() { }
+    public void meth62300() { }
+    public void meth62301() { }
+    public void meth62302() { }
+    public void meth62303() { }
+    public void meth62304() { }
+    public void meth62305() { }
+    public void meth62306() { }
+    public void meth62307() { }
+    public void meth62308() { }
+    public void meth62309() { }
+    public void meth62310() { }
+    public void meth62311() { }
+    public void meth62312() { }
+    public void meth62313() { }
+    public void meth62314() { }
+    public void meth62315() { }
+    public void meth62316() { }
+    public void meth62317() { }
+    public void meth62318() { }
+    public void meth62319() { }
+    public void meth62320() { }
+    public void meth62321() { }
+    public void meth62322() { }
+    public void meth62323() { }
+    public void meth62324() { }
+    public void meth62325() { }
+    public void meth62326() { }
+    public void meth62327() { }
+    public void meth62328() { }
+    public void meth62329() { }
+    public void meth62330() { }
+    public void meth62331() { }
+    public void meth62332() { }
+    public void meth62333() { }
+    public void meth62334() { }
+    public void meth62335() { }
+    public void meth62336() { }
+    public void meth62337() { }
+    public void meth62338() { }
+    public void meth62339() { }
+    public void meth62340() { }
+    public void meth62341() { }
+    public void meth62342() { }
+    public void meth62343() { }
+    public void meth62344() { }
+    public void meth62345() { }
+    public void meth62346() { }
+    public void meth62347() { }
+    public void meth62348() { }
+    public void meth62349() { }
+    public void meth62350() { }
+    public void meth62351() { }
+    public void meth62352() { }
+    public void meth62353() { }
+    public void meth62354() { }
+    public void meth62355() { }
+    public void meth62356() { }
+    public void meth62357() { }
+    public void meth62358() { }
+    public void meth62359() { }
+    public void meth62360() { }
+    public void meth62361() { }
+    public void meth62362() { }
+    public void meth62363() { }
+    public void meth62364() { }
+    public void meth62365() { }
+    public void meth62366() { }
+    public void meth62367() { }
+    public void meth62368() { }
+    public void meth62369() { }
+    public void meth62370() { }
+    public void meth62371() { }
+    public void meth62372() { }
+    public void meth62373() { }
+    public void meth62374() { }
+    public void meth62375() { }
+    public void meth62376() { }
+    public void meth62377() { }
+    public void meth62378() { }
+    public void meth62379() { }
+    public void meth62380() { }
+    public void meth62381() { }
+    public void meth62382() { }
+    public void meth62383() { }
+    public void meth62384() { }
+    public void meth62385() { }
+    public void meth62386() { }
+    public void meth62387() { }
+    public void meth62388() { }
+    public void meth62389() { }
+    public void meth62390() { }
+    public void meth62391() { }
+    public void meth62392() { }
+    public void meth62393() { }
+    public void meth62394() { }
+    public void meth62395() { }
+    public void meth62396() { }
+    public void meth62397() { }
+    public void meth62398() { }
+    public void meth62399() { }
+    public void meth62400() { }
+    public void meth62401() { }
+    public void meth62402() { }
+    public void meth62403() { }
+    public void meth62404() { }
+    public void meth62405() { }
+    public void meth62406() { }
+    public void meth62407() { }
+    public void meth62408() { }
+    public void meth62409() { }
+    public void meth62410() { }
+    public void meth62411() { }
+    public void meth62412() { }
+    public void meth62413() { }
+    public void meth62414() { }
+    public void meth62415() { }
+    public void meth62416() { }
+    public void meth62417() { }
+    public void meth62418() { }
+    public void meth62419() { }
+    public void meth62420() { }
+    public void meth62421() { }
+    public void meth62422() { }
+    public void meth62423() { }
+    public void meth62424() { }
+    public void meth62425() { }
+    public void meth62426() { }
+    public void meth62427() { }
+    public void meth62428() { }
+    public void meth62429() { }
+    public void meth62430() { }
+    public void meth62431() { }
+    public void meth62432() { }
+    public void meth62433() { }
+    public void meth62434() { }
+    public void meth62435() { }
+    public void meth62436() { }
+    public void meth62437() { }
+    public void meth62438() { }
+    public void meth62439() { }
+    public void meth62440() { }
+    public void meth62441() { }
+    public void meth62442() { }
+    public void meth62443() { }
+    public void meth62444() { }
+    public void meth62445() { }
+    public void meth62446() { }
+    public void meth62447() { }
+    public void meth62448() { }
+    public void meth62449() { }
+    public void meth62450() { }
+    public void meth62451() { }
+    public void meth62452() { }
+    public void meth62453() { }
+    public void meth62454() { }
+    public void meth62455() { }
+    public void meth62456() { }
+    public void meth62457() { }
+    public void meth62458() { }
+    public void meth62459() { }
+    public void meth62460() { }
+    public void meth62461() { }
+    public void meth62462() { }
+    public void meth62463() { }
+    public void meth62464() { }
+    public void meth62465() { }
+    public void meth62466() { }
+    public void meth62467() { }
+    public void meth62468() { }
+    public void meth62469() { }
+    public void meth62470() { }
+    public void meth62471() { }
+    public void meth62472() { }
+    public void meth62473() { }
+    public void meth62474() { }
+    public void meth62475() { }
+    public void meth62476() { }
+    public void meth62477() { }
+    public void meth62478() { }
+    public void meth62479() { }
+    public void meth62480() { }
+    public void meth62481() { }
+    public void meth62482() { }
+    public void meth62483() { }
+    public void meth62484() { }
+    public void meth62485() { }
+    public void meth62486() { }
+    public void meth62487() { }
+    public void meth62488() { }
+    public void meth62489() { }
+    public void meth62490() { }
+    public void meth62491() { }
+    public void meth62492() { }
+    public void meth62493() { }
+    public void meth62494() { }
+    public void meth62495() { }
+    public void meth62496() { }
+    public void meth62497() { }
+    public void meth62498() { }
+    public void meth62499() { }
+    public void meth62500() { }
+    public void meth62501() { }
+    public void meth62502() { }
+    public void meth62503() { }
+    public void meth62504() { }
+    public void meth62505() { }
+    public void meth62506() { }
+    public void meth62507() { }
+    public void meth62508() { }
+    public void meth62509() { }
+    public void meth62510() { }
+    public void meth62511() { }
+    public void meth62512() { }
+    public void meth62513() { }
+    public void meth62514() { }
+    public void meth62515() { }
+    public void meth62516() { }
+    public void meth62517() { }
+    public void meth62518() { }
+    public void meth62519() { }
+    public void meth62520() { }
+    public void meth62521() { }
+    public void meth62522() { }
+    public void meth62523() { }
+    public void meth62524() { }
+    public void meth62525() { }
+    public void meth62526() { }
+    public void meth62527() { }
+    public void meth62528() { }
+    public void meth62529() { }
+    public void meth62530() { }
+    public void meth62531() { }
+    public void meth62532() { }
+    public void meth62533() { }
+    public void meth62534() { }
+    public void meth62535() { }
+    public void meth62536() { }
+    public void meth62537() { }
+    public void meth62538() { }
+    public void meth62539() { }
+    public void meth62540() { }
+    public void meth62541() { }
+    public void meth62542() { }
+    public void meth62543() { }
+    public void meth62544() { }
+    public void meth62545() { }
+    public void meth62546() { }
+    public void meth62547() { }
+    public void meth62548() { }
+    public void meth62549() { }
+    public void meth62550() { }
+    public void meth62551() { }
+    public void meth62552() { }
+    public void meth62553() { }
+    public void meth62554() { }
+    public void meth62555() { }
+    public void meth62556() { }
+    public void meth62557() { }
+    public void meth62558() { }
+    public void meth62559() { }
+    public void meth62560() { }
+    public void meth62561() { }
+    public void meth62562() { }
+    public void meth62563() { }
+    public void meth62564() { }
+    public void meth62565() { }
+    public void meth62566() { }
+    public void meth62567() { }
+    public void meth62568() { }
+    public void meth62569() { }
+    public void meth62570() { }
+    public void meth62571() { }
+    public void meth62572() { }
+    public void meth62573() { }
+    public void meth62574() { }
+    public void meth62575() { }
+    public void meth62576() { }
+    public void meth62577() { }
+    public void meth62578() { }
+    public void meth62579() { }
+    public void meth62580() { }
+    public void meth62581() { }
+    public void meth62582() { }
+    public void meth62583() { }
+    public void meth62584() { }
+    public void meth62585() { }
+    public void meth62586() { }
+    public void meth62587() { }
+    public void meth62588() { }
+    public void meth62589() { }
+    public void meth62590() { }
+    public void meth62591() { }
+    public void meth62592() { }
+    public void meth62593() { }
+    public void meth62594() { }
+    public void meth62595() { }
+    public void meth62596() { }
+    public void meth62597() { }
+    public void meth62598() { }
+    public void meth62599() { }
+    public void meth62600() { }
+    public void meth62601() { }
+    public void meth62602() { }
+    public void meth62603() { }
+    public void meth62604() { }
+    public void meth62605() { }
+    public void meth62606() { }
+    public void meth62607() { }
+    public void meth62608() { }
+    public void meth62609() { }
+    public void meth62610() { }
+    public void meth62611() { }
+    public void meth62612() { }
+    public void meth62613() { }
+    public void meth62614() { }
+    public void meth62615() { }
+    public void meth62616() { }
+    public void meth62617() { }
+    public void meth62618() { }
+    public void meth62619() { }
+    public void meth62620() { }
+    public void meth62621() { }
+    public void meth62622() { }
+    public void meth62623() { }
+    public void meth62624() { }
+    public void meth62625() { }
+    public void meth62626() { }
+    public void meth62627() { }
+    public void meth62628() { }
+    public void meth62629() { }
+    public void meth62630() { }
+    public void meth62631() { }
+    public void meth62632() { }
+    public void meth62633() { }
+    public void meth62634() { }
+    public void meth62635() { }
+    public void meth62636() { }
+    public void meth62637() { }
+    public void meth62638() { }
+    public void meth62639() { }
+    public void meth62640() { }
+    public void meth62641() { }
+    public void meth62642() { }
+    public void meth62643() { }
+    public void meth62644() { }
+    public void meth62645() { }
+    public void meth62646() { }
+    public void meth62647() { }
+    public void meth62648() { }
+    public void meth62649() { }
+    public void meth62650() { }
+    public void meth62651() { }
+    public void meth62652() { }
+    public void meth62653() { }
+    public void meth62654() { }
+    public void meth62655() { }
+    public void meth62656() { }
+    public void meth62657() { }
+    public void meth62658() { }
+    public void meth62659() { }
+    public void meth62660() { }
+    public void meth62661() { }
+    public void meth62662() { }
+    public void meth62663() { }
+    public void meth62664() { }
+    public void meth62665() { }
+    public void meth62666() { }
+    public void meth62667() { }
+    public void meth62668() { }
+    public void meth62669() { }
+    public void meth62670() { }
+    public void meth62671() { }
+    public void meth62672() { }
+    public void meth62673() { }
+    public void meth62674() { }
+    public void meth62675() { }
+    public void meth62676() { }
+    public void meth62677() { }
+    public void meth62678() { }
+    public void meth62679() { }
+    public void meth62680() { }
+    public void meth62681() { }
+    public void meth62682() { }
+    public void meth62683() { }
+    public void meth62684() { }
+    public void meth62685() { }
+    public void meth62686() { }
+    public void meth62687() { }
+    public void meth62688() { }
+    public void meth62689() { }
+    public void meth62690() { }
+    public void meth62691() { }
+    public void meth62692() { }
+    public void meth62693() { }
+    public void meth62694() { }
+    public void meth62695() { }
+    public void meth62696() { }
+    public void meth62697() { }
+    public void meth62698() { }
+    public void meth62699() { }
+    public void meth62700() { }
+    public void meth62701() { }
+    public void meth62702() { }
+    public void meth62703() { }
+    public void meth62704() { }
+    public void meth62705() { }
+    public void meth62706() { }
+    public void meth62707() { }
+    public void meth62708() { }
+    public void meth62709() { }
+    public void meth62710() { }
+    public void meth62711() { }
+    public void meth62712() { }
+    public void meth62713() { }
+    public void meth62714() { }
+    public void meth62715() { }
+    public void meth62716() { }
+    public void meth62717() { }
+    public void meth62718() { }
+    public void meth62719() { }
+    public void meth62720() { }
+    public void meth62721() { }
+    public void meth62722() { }
+    public void meth62723() { }
+    public void meth62724() { }
+    public void meth62725() { }
+    public void meth62726() { }
+    public void meth62727() { }
+    public void meth62728() { }
+    public void meth62729() { }
+    public void meth62730() { }
+    public void meth62731() { }
+    public void meth62732() { }
+    public void meth62733() { }
+    public void meth62734() { }
+    public void meth62735() { }
+    public void meth62736() { }
+    public void meth62737() { }
+    public void meth62738() { }
+    public void meth62739() { }
+    public void meth62740() { }
+    public void meth62741() { }
+    public void meth62742() { }
+    public void meth62743() { }
+    public void meth62744() { }
+    public void meth62745() { }
+    public void meth62746() { }
+    public void meth62747() { }
+    public void meth62748() { }
+    public void meth62749() { }
+    public void meth62750() { }
+    public void meth62751() { }
+    public void meth62752() { }
+    public void meth62753() { }
+    public void meth62754() { }
+    public void meth62755() { }
+    public void meth62756() { }
+    public void meth62757() { }
+    public void meth62758() { }
+    public void meth62759() { }
+    public void meth62760() { }
+    public void meth62761() { }
+    public void meth62762() { }
+    public void meth62763() { }
+    public void meth62764() { }
+    public void meth62765() { }
+    public void meth62766() { }
+    public void meth62767() { }
+    public void meth62768() { }
+    public void meth62769() { }
+    public void meth62770() { }
+    public void meth62771() { }
+    public void meth62772() { }
+    public void meth62773() { }
+    public void meth62774() { }
+    public void meth62775() { }
+    public void meth62776() { }
+    public void meth62777() { }
+    public void meth62778() { }
+    public void meth62779() { }
+    public void meth62780() { }
+    public void meth62781() { }
+    public void meth62782() { }
+    public void meth62783() { }
+    public void meth62784() { }
+    public void meth62785() { }
+    public void meth62786() { }
+    public void meth62787() { }
+    public void meth62788() { }
+    public void meth62789() { }
+    public void meth62790() { }
+    public void meth62791() { }
+    public void meth62792() { }
+    public void meth62793() { }
+    public void meth62794() { }
+    public void meth62795() { }
+    public void meth62796() { }
+    public void meth62797() { }
+    public void meth62798() { }
+    public void meth62799() { }
+    public void meth62800() { }
+    public void meth62801() { }
+    public void meth62802() { }
+    public void meth62803() { }
+    public void meth62804() { }
+    public void meth62805() { }
+    public void meth62806() { }
+    public void meth62807() { }
+    public void meth62808() { }
+    public void meth62809() { }
+    public void meth62810() { }
+    public void meth62811() { }
+    public void meth62812() { }
+    public void meth62813() { }
+    public void meth62814() { }
+    public void meth62815() { }
+    public void meth62816() { }
+    public void meth62817() { }
+    public void meth62818() { }
+    public void meth62819() { }
+    public void meth62820() { }
+    public void meth62821() { }
+    public void meth62822() { }
+    public void meth62823() { }
+    public void meth62824() { }
+    public void meth62825() { }
+    public void meth62826() { }
+    public void meth62827() { }
+    public void meth62828() { }
+    public void meth62829() { }
+    public void meth62830() { }
+    public void meth62831() { }
+    public void meth62832() { }
+    public void meth62833() { }
+    public void meth62834() { }
+    public void meth62835() { }
+    public void meth62836() { }
+    public void meth62837() { }
+    public void meth62838() { }
+    public void meth62839() { }
+    public void meth62840() { }
+    public void meth62841() { }
+    public void meth62842() { }
+    public void meth62843() { }
+    public void meth62844() { }
+    public void meth62845() { }
+    public void meth62846() { }
+    public void meth62847() { }
+    public void meth62848() { }
+    public void meth62849() { }
+    public void meth62850() { }
+    public void meth62851() { }
+    public void meth62852() { }
+    public void meth62853() { }
+    public void meth62854() { }
+    public void meth62855() { }
+    public void meth62856() { }
+    public void meth62857() { }
+    public void meth62858() { }
+    public void meth62859() { }
+    public void meth62860() { }
+    public void meth62861() { }
+    public void meth62862() { }
+    public void meth62863() { }
+    public void meth62864() { }
+    public void meth62865() { }
+    public void meth62866() { }
+    public void meth62867() { }
+    public void meth62868() { }
+    public void meth62869() { }
+    public void meth62870() { }
+    public void meth62871() { }
+    public void meth62872() { }
+    public void meth62873() { }
+    public void meth62874() { }
+    public void meth62875() { }
+    public void meth62876() { }
+    public void meth62877() { }
+    public void meth62878() { }
+    public void meth62879() { }
+    public void meth62880() { }
+    public void meth62881() { }
+    public void meth62882() { }
+    public void meth62883() { }
+    public void meth62884() { }
+    public void meth62885() { }
+    public void meth62886() { }
+    public void meth62887() { }
+    public void meth62888() { }
+    public void meth62889() { }
+    public void meth62890() { }
+    public void meth62891() { }
+    public void meth62892() { }
+    public void meth62893() { }
+    public void meth62894() { }
+    public void meth62895() { }
+    public void meth62896() { }
+    public void meth62897() { }
+    public void meth62898() { }
+    public void meth62899() { }
+    public void meth62900() { }
+    public void meth62901() { }
+    public void meth62902() { }
+    public void meth62903() { }
+    public void meth62904() { }
+    public void meth62905() { }
+    public void meth62906() { }
+    public void meth62907() { }
+    public void meth62908() { }
+    public void meth62909() { }
+    public void meth62910() { }
+    public void meth62911() { }
+    public void meth62912() { }
+    public void meth62913() { }
+    public void meth62914() { }
+    public void meth62915() { }
+    public void meth62916() { }
+    public void meth62917() { }
+    public void meth62918() { }
+    public void meth62919() { }
+    public void meth62920() { }
+    public void meth62921() { }
+    public void meth62922() { }
+    public void meth62923() { }
+    public void meth62924() { }
+    public void meth62925() { }
+    public void meth62926() { }
+    public void meth62927() { }
+    public void meth62928() { }
+    public void meth62929() { }
+    public void meth62930() { }
+    public void meth62931() { }
+    public void meth62932() { }
+    public void meth62933() { }
+    public void meth62934() { }
+    public void meth62935() { }
+    public void meth62936() { }
+    public void meth62937() { }
+    public void meth62938() { }
+    public void meth62939() { }
+    public void meth62940() { }
+    public void meth62941() { }
+    public void meth62942() { }
+    public void meth62943() { }
+    public void meth62944() { }
+    public void meth62945() { }
+    public void meth62946() { }
+    public void meth62947() { }
+    public void meth62948() { }
+    public void meth62949() { }
+    public void meth62950() { }
+    public void meth62951() { }
+    public void meth62952() { }
+    public void meth62953() { }
+    public void meth62954() { }
+    public void meth62955() { }
+    public void meth62956() { }
+    public void meth62957() { }
+    public void meth62958() { }
+    public void meth62959() { }
+    public void meth62960() { }
+    public void meth62961() { }
+    public void meth62962() { }
+    public void meth62963() { }
+    public void meth62964() { }
+    public void meth62965() { }
+    public void meth62966() { }
+    public void meth62967() { }
+    public void meth62968() { }
+    public void meth62969() { }
+    public void meth62970() { }
+    public void meth62971() { }
+    public void meth62972() { }
+    public void meth62973() { }
+    public void meth62974() { }
+    public void meth62975() { }
+    public void meth62976() { }
+    public void meth62977() { }
+    public void meth62978() { }
+    public void meth62979() { }
+    public void meth62980() { }
+    public void meth62981() { }
+    public void meth62982() { }
+    public void meth62983() { }
+    public void meth62984() { }
+    public void meth62985() { }
+    public void meth62986() { }
+    public void meth62987() { }
+    public void meth62988() { }
+    public void meth62989() { }
+    public void meth62990() { }
+    public void meth62991() { }
+    public void meth62992() { }
+    public void meth62993() { }
+    public void meth62994() { }
+    public void meth62995() { }
+    public void meth62996() { }
+    public void meth62997() { }
+    public void meth62998() { }
+    public void meth62999() { }
+    public void meth63000() { }
+    public void meth63001() { }
+    public void meth63002() { }
+    public void meth63003() { }
+    public void meth63004() { }
+    public void meth63005() { }
+    public void meth63006() { }
+    public void meth63007() { }
+    public void meth63008() { }
+    public void meth63009() { }
+    public void meth63010() { }
+    public void meth63011() { }
+    public void meth63012() { }
+    public void meth63013() { }
+    public void meth63014() { }
+    public void meth63015() { }
+    public void meth63016() { }
+    public void meth63017() { }
+    public void meth63018() { }
+    public void meth63019() { }
+    public void meth63020() { }
+    public void meth63021() { }
+    public void meth63022() { }
+    public void meth63023() { }
+    public void meth63024() { }
+    public void meth63025() { }
+    public void meth63026() { }
+    public void meth63027() { }
+    public void meth63028() { }
+    public void meth63029() { }
+    public void meth63030() { }
+    public void meth63031() { }
+    public void meth63032() { }
+    public void meth63033() { }
+    public void meth63034() { }
+    public void meth63035() { }
+    public void meth63036() { }
+    public void meth63037() { }
+    public void meth63038() { }
+    public void meth63039() { }
+    public void meth63040() { }
+    public void meth63041() { }
+    public void meth63042() { }
+    public void meth63043() { }
+    public void meth63044() { }
+    public void meth63045() { }
+    public void meth63046() { }
+    public void meth63047() { }
+    public void meth63048() { }
+    public void meth63049() { }
+    public void meth63050() { }
+    public void meth63051() { }
+    public void meth63052() { }
+    public void meth63053() { }
+    public void meth63054() { }
+    public void meth63055() { }
+    public void meth63056() { }
+    public void meth63057() { }
+    public void meth63058() { }
+    public void meth63059() { }
+    public void meth63060() { }
+    public void meth63061() { }
+    public void meth63062() { }
+    public void meth63063() { }
+    public void meth63064() { }
+    public void meth63065() { }
+    public void meth63066() { }
+    public void meth63067() { }
+    public void meth63068() { }
+    public void meth63069() { }
+    public void meth63070() { }
+    public void meth63071() { }
+    public void meth63072() { }
+    public void meth63073() { }
+    public void meth63074() { }
+    public void meth63075() { }
+    public void meth63076() { }
+    public void meth63077() { }
+    public void meth63078() { }
+    public void meth63079() { }
+    public void meth63080() { }
+    public void meth63081() { }
+    public void meth63082() { }
+    public void meth63083() { }
+    public void meth63084() { }
+    public void meth63085() { }
+    public void meth63086() { }
+    public void meth63087() { }
+    public void meth63088() { }
+    public void meth63089() { }
+    public void meth63090() { }
+    public void meth63091() { }
+    public void meth63092() { }
+    public void meth63093() { }
+    public void meth63094() { }
+    public void meth63095() { }
+    public void meth63096() { }
+    public void meth63097() { }
+    public void meth63098() { }
+    public void meth63099() { }
+    public void meth63100() { }
+    public void meth63101() { }
+    public void meth63102() { }
+    public void meth63103() { }
+    public void meth63104() { }
+    public void meth63105() { }
+    public void meth63106() { }
+    public void meth63107() { }
+    public void meth63108() { }
+    public void meth63109() { }
+    public void meth63110() { }
+    public void meth63111() { }
+    public void meth63112() { }
+    public void meth63113() { }
+    public void meth63114() { }
+    public void meth63115() { }
+    public void meth63116() { }
+    public void meth63117() { }
+    public void meth63118() { }
+    public void meth63119() { }
+    public void meth63120() { }
+    public void meth63121() { }
+    public void meth63122() { }
+    public void meth63123() { }
+    public void meth63124() { }
+    public void meth63125() { }
+    public void meth63126() { }
+    public void meth63127() { }
+    public void meth63128() { }
+    public void meth63129() { }
+    public void meth63130() { }
+    public void meth63131() { }
+    public void meth63132() { }
+    public void meth63133() { }
+    public void meth63134() { }
+    public void meth63135() { }
+    public void meth63136() { }
+    public void meth63137() { }
+    public void meth63138() { }
+    public void meth63139() { }
+    public void meth63140() { }
+    public void meth63141() { }
+    public void meth63142() { }
+    public void meth63143() { }
+    public void meth63144() { }
+    public void meth63145() { }
+    public void meth63146() { }
+    public void meth63147() { }
+    public void meth63148() { }
+    public void meth63149() { }
+    public void meth63150() { }
+    public void meth63151() { }
+    public void meth63152() { }
+    public void meth63153() { }
+    public void meth63154() { }
+    public void meth63155() { }
+    public void meth63156() { }
+    public void meth63157() { }
+    public void meth63158() { }
+    public void meth63159() { }
+    public void meth63160() { }
+    public void meth63161() { }
+    public void meth63162() { }
+    public void meth63163() { }
+    public void meth63164() { }
+    public void meth63165() { }
+    public void meth63166() { }
+    public void meth63167() { }
+    public void meth63168() { }
+    public void meth63169() { }
+    public void meth63170() { }
+    public void meth63171() { }
+    public void meth63172() { }
+    public void meth63173() { }
+    public void meth63174() { }
+    public void meth63175() { }
+    public void meth63176() { }
+    public void meth63177() { }
+    public void meth63178() { }
+    public void meth63179() { }
+    public void meth63180() { }
+    public void meth63181() { }
+    public void meth63182() { }
+    public void meth63183() { }
+    public void meth63184() { }
+    public void meth63185() { }
+    public void meth63186() { }
+    public void meth63187() { }
+    public void meth63188() { }
+    public void meth63189() { }
+    public void meth63190() { }
+    public void meth63191() { }
+    public void meth63192() { }
+    public void meth63193() { }
+    public void meth63194() { }
+    public void meth63195() { }
+    public void meth63196() { }
+    public void meth63197() { }
+    public void meth63198() { }
+    public void meth63199() { }
+    public void meth63200() { }
+    public void meth63201() { }
+    public void meth63202() { }
+    public void meth63203() { }
+    public void meth63204() { }
+    public void meth63205() { }
+    public void meth63206() { }
+    public void meth63207() { }
+    public void meth63208() { }
+    public void meth63209() { }
+    public void meth63210() { }
+    public void meth63211() { }
+    public void meth63212() { }
+    public void meth63213() { }
+    public void meth63214() { }
+    public void meth63215() { }
+    public void meth63216() { }
+    public void meth63217() { }
+    public void meth63218() { }
+    public void meth63219() { }
+    public void meth63220() { }
+    public void meth63221() { }
+    public void meth63222() { }
+    public void meth63223() { }
+    public void meth63224() { }
+    public void meth63225() { }
+    public void meth63226() { }
+    public void meth63227() { }
+    public void meth63228() { }
+    public void meth63229() { }
+    public void meth63230() { }
+    public void meth63231() { }
+    public void meth63232() { }
+    public void meth63233() { }
+    public void meth63234() { }
+    public void meth63235() { }
+    public void meth63236() { }
+    public void meth63237() { }
+    public void meth63238() { }
+    public void meth63239() { }
+    public void meth63240() { }
+    public void meth63241() { }
+    public void meth63242() { }
+    public void meth63243() { }
+    public void meth63244() { }
+    public void meth63245() { }
+    public void meth63246() { }
+    public void meth63247() { }
+    public void meth63248() { }
+    public void meth63249() { }
+    public void meth63250() { }
+    public void meth63251() { }
+    public void meth63252() { }
+    public void meth63253() { }
+    public void meth63254() { }
+    public void meth63255() { }
+    public void meth63256() { }
+    public void meth63257() { }
+    public void meth63258() { }
+    public void meth63259() { }
+    public void meth63260() { }
+    public void meth63261() { }
+    public void meth63262() { }
+    public void meth63263() { }
+    public void meth63264() { }
+    public void meth63265() { }
+    public void meth63266() { }
+    public void meth63267() { }
+    public void meth63268() { }
+    public void meth63269() { }
+    public void meth63270() { }
+    public void meth63271() { }
+    public void meth63272() { }
+    public void meth63273() { }
+    public void meth63274() { }
+    public void meth63275() { }
+    public void meth63276() { }
+    public void meth63277() { }
+    public void meth63278() { }
+    public void meth63279() { }
+    public void meth63280() { }
+    public void meth63281() { }
+    public void meth63282() { }
+    public void meth63283() { }
+    public void meth63284() { }
+    public void meth63285() { }
+    public void meth63286() { }
+    public void meth63287() { }
+    public void meth63288() { }
+    public void meth63289() { }
+    public void meth63290() { }
+    public void meth63291() { }
+    public void meth63292() { }
+    public void meth63293() { }
+    public void meth63294() { }
+    public void meth63295() { }
+    public void meth63296() { }
+    public void meth63297() { }
+    public void meth63298() { }
+    public void meth63299() { }
+    public void meth63300() { }
+    public void meth63301() { }
+    public void meth63302() { }
+    public void meth63303() { }
+    public void meth63304() { }
+    public void meth63305() { }
+    public void meth63306() { }
+    public void meth63307() { }
+    public void meth63308() { }
+    public void meth63309() { }
+    public void meth63310() { }
+    public void meth63311() { }
+    public void meth63312() { }
+    public void meth63313() { }
+    public void meth63314() { }
+    public void meth63315() { }
+    public void meth63316() { }
+    public void meth63317() { }
+    public void meth63318() { }
+    public void meth63319() { }
+    public void meth63320() { }
+    public void meth63321() { }
+    public void meth63322() { }
+    public void meth63323() { }
+    public void meth63324() { }
+    public void meth63325() { }
+    public void meth63326() { }
+    public void meth63327() { }
+    public void meth63328() { }
+    public void meth63329() { }
+    public void meth63330() { }
+    public void meth63331() { }
+    public void meth63332() { }
+    public void meth63333() { }
+    public void meth63334() { }
+    public void meth63335() { }
+    public void meth63336() { }
+    public void meth63337() { }
+    public void meth63338() { }
+    public void meth63339() { }
+    public void meth63340() { }
+    public void meth63341() { }
+    public void meth63342() { }
+    public void meth63343() { }
+    public void meth63344() { }
+    public void meth63345() { }
+    public void meth63346() { }
+    public void meth63347() { }
+    public void meth63348() { }
+    public void meth63349() { }
+    public void meth63350() { }
+    public void meth63351() { }
+    public void meth63352() { }
+    public void meth63353() { }
+    public void meth63354() { }
+    public void meth63355() { }
+    public void meth63356() { }
+    public void meth63357() { }
+    public void meth63358() { }
+    public void meth63359() { }
+    public void meth63360() { }
+    public void meth63361() { }
+    public void meth63362() { }
+    public void meth63363() { }
+    public void meth63364() { }
+    public void meth63365() { }
+    public void meth63366() { }
+    public void meth63367() { }
+    public void meth63368() { }
+    public void meth63369() { }
+    public void meth63370() { }
+    public void meth63371() { }
+    public void meth63372() { }
+    public void meth63373() { }
+    public void meth63374() { }
+    public void meth63375() { }
+    public void meth63376() { }
+    public void meth63377() { }
+    public void meth63378() { }
+    public void meth63379() { }
+    public void meth63380() { }
+    public void meth63381() { }
+    public void meth63382() { }
+    public void meth63383() { }
+    public void meth63384() { }
+    public void meth63385() { }
+    public void meth63386() { }
+    public void meth63387() { }
+    public void meth63388() { }
+    public void meth63389() { }
+    public void meth63390() { }
+    public void meth63391() { }
+    public void meth63392() { }
+    public void meth63393() { }
+    public void meth63394() { }
+    public void meth63395() { }
+    public void meth63396() { }
+    public void meth63397() { }
+    public void meth63398() { }
+    public void meth63399() { }
+    public void meth63400() { }
+    public void meth63401() { }
+    public void meth63402() { }
+    public void meth63403() { }
+    public void meth63404() { }
+    public void meth63405() { }
+    public void meth63406() { }
+    public void meth63407() { }
+    public void meth63408() { }
+    public void meth63409() { }
+    public void meth63410() { }
+    public void meth63411() { }
+    public void meth63412() { }
+    public void meth63413() { }
+    public void meth63414() { }
+    public void meth63415() { }
+    public void meth63416() { }
+    public void meth63417() { }
+    public void meth63418() { }
+    public void meth63419() { }
+    public void meth63420() { }
+    public void meth63421() { }
+    public void meth63422() { }
+    public void meth63423() { }
+    public void meth63424() { }
+    public void meth63425() { }
+    public void meth63426() { }
+    public void meth63427() { }
+    public void meth63428() { }
+    public void meth63429() { }
+    public void meth63430() { }
+    public void meth63431() { }
+    public void meth63432() { }
+    public void meth63433() { }
+    public void meth63434() { }
+    public void meth63435() { }
+    public void meth63436() { }
+    public void meth63437() { }
+    public void meth63438() { }
+    public void meth63439() { }
+    public void meth63440() { }
+    public void meth63441() { }
+    public void meth63442() { }
+    public void meth63443() { }
+    public void meth63444() { }
+    public void meth63445() { }
+    public void meth63446() { }
+    public void meth63447() { }
+    public void meth63448() { }
+    public void meth63449() { }
+    public void meth63450() { }
+    public void meth63451() { }
+    public void meth63452() { }
+    public void meth63453() { }
+    public void meth63454() { }
+    public void meth63455() { }
+    public void meth63456() { }
+    public void meth63457() { }
+    public void meth63458() { }
+    public void meth63459() { }
+    public void meth63460() { }
+    public void meth63461() { }
+    public void meth63462() { }
+    public void meth63463() { }
+    public void meth63464() { }
+    public void meth63465() { }
+    public void meth63466() { }
+    public void meth63467() { }
+    public void meth63468() { }
+    public void meth63469() { }
+    public void meth63470() { }
+    public void meth63471() { }
+    public void meth63472() { }
+    public void meth63473() { }
+    public void meth63474() { }
+    public void meth63475() { }
+    public void meth63476() { }
+    public void meth63477() { }
+    public void meth63478() { }
+    public void meth63479() { }
+    public void meth63480() { }
+    public void meth63481() { }
+    public void meth63482() { }
+    public void meth63483() { }
+    public void meth63484() { }
+    public void meth63485() { }
+    public void meth63486() { }
+    public void meth63487() { }
+    public void meth63488() { }
+    public void meth63489() { }
+    public void meth63490() { }
+    public void meth63491() { }
+    public void meth63492() { }
+    public void meth63493() { }
+    public void meth63494() { }
+    public void meth63495() { }
+    public void meth63496() { }
+    public void meth63497() { }
+    public void meth63498() { }
+    public void meth63499() { }
+    public void meth63500() { }
+    public void meth63501() { }
+    public void meth63502() { }
+    public void meth63503() { }
+    public void meth63504() { }
+    public void meth63505() { }
+    public void meth63506() { }
+    public void meth63507() { }
+    public void meth63508() { }
+    public void meth63509() { }
+    public void meth63510() { }
+    public void meth63511() { }
+    public void meth63512() { }
+    public void meth63513() { }
+    public void meth63514() { }
+    public void meth63515() { }
+    public void meth63516() { }
+    public void meth63517() { }
+    public void meth63518() { }
+    public void meth63519() { }
+    public void meth63520() { }
+    public void meth63521() { }
+    public void meth63522() { }
+    public void meth63523() { }
+    public void meth63524() { }
+    public void meth63525() { }
+    public void meth63526() { }
+    public void meth63527() { }
+    public void meth63528() { }
+    public void meth63529() { }
+    public void meth63530() { }
+    public void meth63531() { }
+    public void meth63532() { }
+    public void meth63533() { }
+    public void meth63534() { }
+    public void meth63535() { }
+    public void meth63536() { }
+    public void meth63537() { }
+    public void meth63538() { }
+    public void meth63539() { }
+    public void meth63540() { }
+    public void meth63541() { }
+    public void meth63542() { }
+    public void meth63543() { }
+    public void meth63544() { }
+    public void meth63545() { }
+    public void meth63546() { }
+    public void meth63547() { }
+    public void meth63548() { }
+    public void meth63549() { }
+    public void meth63550() { }
+    public void meth63551() { }
+    public void meth63552() { }
+    public void meth63553() { }
+    public void meth63554() { }
+    public void meth63555() { }
+    public void meth63556() { }
+    public void meth63557() { }
+    public void meth63558() { }
+    public void meth63559() { }
+    public void meth63560() { }
+    public void meth63561() { }
+    public void meth63562() { }
+    public void meth63563() { }
+    public void meth63564() { }
+    public void meth63565() { }
+    public void meth63566() { }
+    public void meth63567() { }
+    public void meth63568() { }
+    public void meth63569() { }
+    public void meth63570() { }
+    public void meth63571() { }
+    public void meth63572() { }
+    public void meth63573() { }
+    public void meth63574() { }
+    public void meth63575() { }
+    public void meth63576() { }
+    public void meth63577() { }
+    public void meth63578() { }
+    public void meth63579() { }
+    public void meth63580() { }
+    public void meth63581() { }
+    public void meth63582() { }
+    public void meth63583() { }
+    public void meth63584() { }
+    public void meth63585() { }
+    public void meth63586() { }
+    public void meth63587() { }
+    public void meth63588() { }
+    public void meth63589() { }
+    public void meth63590() { }
+    public void meth63591() { }
+    public void meth63592() { }
+    public void meth63593() { }
+    public void meth63594() { }
+    public void meth63595() { }
+    public void meth63596() { }
+    public void meth63597() { }
+    public void meth63598() { }
+    public void meth63599() { }
+    public void meth63600() { }
+    public void meth63601() { }
+    public void meth63602() { }
+    public void meth63603() { }
+    public void meth63604() { }
+    public void meth63605() { }
+    public void meth63606() { }
+    public void meth63607() { }
+    public void meth63608() { }
+    public void meth63609() { }
+    public void meth63610() { }
+    public void meth63611() { }
+    public void meth63612() { }
+    public void meth63613() { }
+    public void meth63614() { }
+    public void meth63615() { }
+    public void meth63616() { }
+    public void meth63617() { }
+    public void meth63618() { }
+    public void meth63619() { }
+    public void meth63620() { }
+    public void meth63621() { }
+    public void meth63622() { }
+    public void meth63623() { }
+    public void meth63624() { }
+    public void meth63625() { }
+    public void meth63626() { }
+    public void meth63627() { }
+    public void meth63628() { }
+    public void meth63629() { }
+    public void meth63630() { }
+    public void meth63631() { }
+    public void meth63632() { }
+    public void meth63633() { }
+    public void meth63634() { }
+    public void meth63635() { }
+    public void meth63636() { }
+    public void meth63637() { }
+    public void meth63638() { }
+    public void meth63639() { }
+    public void meth63640() { }
+    public void meth63641() { }
+    public void meth63642() { }
+    public void meth63643() { }
+    public void meth63644() { }
+    public void meth63645() { }
+    public void meth63646() { }
+    public void meth63647() { }
+    public void meth63648() { }
+    public void meth63649() { }
+    public void meth63650() { }
+    public void meth63651() { }
+    public void meth63652() { }
+    public void meth63653() { }
+    public void meth63654() { }
+    public void meth63655() { }
+    public void meth63656() { }
+    public void meth63657() { }
+    public void meth63658() { }
+    public void meth63659() { }
+    public void meth63660() { }
+    public void meth63661() { }
+    public void meth63662() { }
+    public void meth63663() { }
+    public void meth63664() { }
+    public void meth63665() { }
+    public void meth63666() { }
+    public void meth63667() { }
+    public void meth63668() { }
+    public void meth63669() { }
+    public void meth63670() { }
+    public void meth63671() { }
+    public void meth63672() { }
+    public void meth63673() { }
+    public void meth63674() { }
+    public void meth63675() { }
+    public void meth63676() { }
+    public void meth63677() { }
+    public void meth63678() { }
+    public void meth63679() { }
+    public void meth63680() { }
+    public void meth63681() { }
+    public void meth63682() { }
+    public void meth63683() { }
+    public void meth63684() { }
+    public void meth63685() { }
+    public void meth63686() { }
+    public void meth63687() { }
+    public void meth63688() { }
+    public void meth63689() { }
+    public void meth63690() { }
+    public void meth63691() { }
+    public void meth63692() { }
+    public void meth63693() { }
+    public void meth63694() { }
+    public void meth63695() { }
+    public void meth63696() { }
+    public void meth63697() { }
+    public void meth63698() { }
+    public void meth63699() { }
+    public void meth63700() { }
+    public void meth63701() { }
+    public void meth63702() { }
+    public void meth63703() { }
+    public void meth63704() { }
+    public void meth63705() { }
+    public void meth63706() { }
+    public void meth63707() { }
+    public void meth63708() { }
+    public void meth63709() { }
+    public void meth63710() { }
+    public void meth63711() { }
+    public void meth63712() { }
+    public void meth63713() { }
+    public void meth63714() { }
+    public void meth63715() { }
+    public void meth63716() { }
+    public void meth63717() { }
+    public void meth63718() { }
+    public void meth63719() { }
+    public void meth63720() { }
+    public void meth63721() { }
+    public void meth63722() { }
+    public void meth63723() { }
+    public void meth63724() { }
+    public void meth63725() { }
+    public void meth63726() { }
+    public void meth63727() { }
+    public void meth63728() { }
+    public void meth63729() { }
+    public void meth63730() { }
+    public void meth63731() { }
+    public void meth63732() { }
+    public void meth63733() { }
+    public void meth63734() { }
+    public void meth63735() { }
+    public void meth63736() { }
+    public void meth63737() { }
+    public void meth63738() { }
+    public void meth63739() { }
+    public void meth63740() { }
+    public void meth63741() { }
+    public void meth63742() { }
+    public void meth63743() { }
+    public void meth63744() { }
+    public void meth63745() { }
+    public void meth63746() { }
+    public void meth63747() { }
+    public void meth63748() { }
+    public void meth63749() { }
+    public void meth63750() { }
+    public void meth63751() { }
+    public void meth63752() { }
+    public void meth63753() { }
+    public void meth63754() { }
+    public void meth63755() { }
+    public void meth63756() { }
+    public void meth63757() { }
+    public void meth63758() { }
+    public void meth63759() { }
+    public void meth63760() { }
+    public void meth63761() { }
+    public void meth63762() { }
+    public void meth63763() { }
+    public void meth63764() { }
+    public void meth63765() { }
+    public void meth63766() { }
+    public void meth63767() { }
+    public void meth63768() { }
+    public void meth63769() { }
+    public void meth63770() { }
+    public void meth63771() { }
+    public void meth63772() { }
+    public void meth63773() { }
+    public void meth63774() { }
+    public void meth63775() { }
+    public void meth63776() { }
+    public void meth63777() { }
+    public void meth63778() { }
+    public void meth63779() { }
+    public void meth63780() { }
+    public void meth63781() { }
+    public void meth63782() { }
+    public void meth63783() { }
+    public void meth63784() { }
+    public void meth63785() { }
+    public void meth63786() { }
+    public void meth63787() { }
+    public void meth63788() { }
+    public void meth63789() { }
+    public void meth63790() { }
+    public void meth63791() { }
+    public void meth63792() { }
+    public void meth63793() { }
+    public void meth63794() { }
+    public void meth63795() { }
+    public void meth63796() { }
+    public void meth63797() { }
+    public void meth63798() { }
+    public void meth63799() { }
+    public void meth63800() { }
+    public void meth63801() { }
+    public void meth63802() { }
+    public void meth63803() { }
+    public void meth63804() { }
+    public void meth63805() { }
+    public void meth63806() { }
+    public void meth63807() { }
+    public void meth63808() { }
+    public void meth63809() { }
+    public void meth63810() { }
+    public void meth63811() { }
+    public void meth63812() { }
+    public void meth63813() { }
+    public void meth63814() { }
+    public void meth63815() { }
+    public void meth63816() { }
+    public void meth63817() { }
+    public void meth63818() { }
+    public void meth63819() { }
+    public void meth63820() { }
+    public void meth63821() { }
+    public void meth63822() { }
+    public void meth63823() { }
+    public void meth63824() { }
+    public void meth63825() { }
+    public void meth63826() { }
+    public void meth63827() { }
+    public void meth63828() { }
+    public void meth63829() { }
+    public void meth63830() { }
+    public void meth63831() { }
+    public void meth63832() { }
+    public void meth63833() { }
+    public void meth63834() { }
+    public void meth63835() { }
+    public void meth63836() { }
+    public void meth63837() { }
+    public void meth63838() { }
+    public void meth63839() { }
+    public void meth63840() { }
+    public void meth63841() { }
+    public void meth63842() { }
+    public void meth63843() { }
+    public void meth63844() { }
+    public void meth63845() { }
+    public void meth63846() { }
+    public void meth63847() { }
+    public void meth63848() { }
+    public void meth63849() { }
+    public void meth63850() { }
+    public void meth63851() { }
+    public void meth63852() { }
+    public void meth63853() { }
+    public void meth63854() { }
+    public void meth63855() { }
+    public void meth63856() { }
+    public void meth63857() { }
+    public void meth63858() { }
+    public void meth63859() { }
+    public void meth63860() { }
+    public void meth63861() { }
+    public void meth63862() { }
+    public void meth63863() { }
+    public void meth63864() { }
+    public void meth63865() { }
+    public void meth63866() { }
+    public void meth63867() { }
+    public void meth63868() { }
+    public void meth63869() { }
+    public void meth63870() { }
+    public void meth63871() { }
+    public void meth63872() { }
+    public void meth63873() { }
+    public void meth63874() { }
+    public void meth63875() { }
+    public void meth63876() { }
+    public void meth63877() { }
+    public void meth63878() { }
+    public void meth63879() { }
+    public void meth63880() { }
+    public void meth63881() { }
+    public void meth63882() { }
+    public void meth63883() { }
+    public void meth63884() { }
+    public void meth63885() { }
+    public void meth63886() { }
+    public void meth63887() { }
+    public void meth63888() { }
+    public void meth63889() { }
+    public void meth63890() { }
+    public void meth63891() { }
+    public void meth63892() { }
+    public void meth63893() { }
+    public void meth63894() { }
+    public void meth63895() { }
+    public void meth63896() { }
+    public void meth63897() { }
+    public void meth63898() { }
+    public void meth63899() { }
+    public void meth63900() { }
+    public void meth63901() { }
+    public void meth63902() { }
+    public void meth63903() { }
+    public void meth63904() { }
+    public void meth63905() { }
+    public void meth63906() { }
+    public void meth63907() { }
+    public void meth63908() { }
+    public void meth63909() { }
+    public void meth63910() { }
+    public void meth63911() { }
+    public void meth63912() { }
+    public void meth63913() { }
+    public void meth63914() { }
+    public void meth63915() { }
+    public void meth63916() { }
+    public void meth63917() { }
+    public void meth63918() { }
+    public void meth63919() { }
+    public void meth63920() { }
+    public void meth63921() { }
+    public void meth63922() { }
+    public void meth63923() { }
+    public void meth63924() { }
+    public void meth63925() { }
+    public void meth63926() { }
+    public void meth63927() { }
+    public void meth63928() { }
+    public void meth63929() { }
+    public void meth63930() { }
+    public void meth63931() { }
+    public void meth63932() { }
+    public void meth63933() { }
+    public void meth63934() { }
+    public void meth63935() { }
+    public void meth63936() { }
+    public void meth63937() { }
+    public void meth63938() { }
+    public void meth63939() { }
+    public void meth63940() { }
+    public void meth63941() { }
+    public void meth63942() { }
+    public void meth63943() { }
+    public void meth63944() { }
+    public void meth63945() { }
+    public void meth63946() { }
+    public void meth63947() { }
+    public void meth63948() { }
+    public void meth63949() { }
+    public void meth63950() { }
+    public void meth63951() { }
+    public void meth63952() { }
+    public void meth63953() { }
+    public void meth63954() { }
+    public void meth63955() { }
+    public void meth63956() { }
+    public void meth63957() { }
+    public void meth63958() { }
+    public void meth63959() { }
+    public void meth63960() { }
+    public void meth63961() { }
+    public void meth63962() { }
+    public void meth63963() { }
+    public void meth63964() { }
+    public void meth63965() { }
+    public void meth63966() { }
+    public void meth63967() { }
+    public void meth63968() { }
+    public void meth63969() { }
+    public void meth63970() { }
+    public void meth63971() { }
+    public void meth63972() { }
+    public void meth63973() { }
+    public void meth63974() { }
+    public void meth63975() { }
+    public void meth63976() { }
+    public void meth63977() { }
+    public void meth63978() { }
+    public void meth63979() { }
+    public void meth63980() { }
+    public void meth63981() { }
+    public void meth63982() { }
+    public void meth63983() { }
+    public void meth63984() { }
+    public void meth63985() { }
+    public void meth63986() { }
+    public void meth63987() { }
+    public void meth63988() { }
+    public void meth63989() { }
+    public void meth63990() { }
+    public void meth63991() { }
+    public void meth63992() { }
+    public void meth63993() { }
+    public void meth63994() { }
+    public void meth63995() { }
+    public void meth63996() { }
+    public void meth63997() { }
+    public void meth63998() { }
+    public void meth63999() { }
+    public void meth64000() { }
+    public void meth64001() { }
+    public void meth64002() { }
+    public void meth64003() { }
+    public void meth64004() { }
+    public void meth64005() { }
+    public void meth64006() { }
+    public void meth64007() { }
+    public void meth64008() { }
+    public void meth64009() { }
+    public void meth64010() { }
+    public void meth64011() { }
+    public void meth64012() { }
+    public void meth64013() { }
+    public void meth64014() { }
+    public void meth64015() { }
+    public void meth64016() { }
+    public void meth64017() { }
+    public void meth64018() { }
+    public void meth64019() { }
+    public void meth64020() { }
+    public void meth64021() { }
+    public void meth64022() { }
+    public void meth64023() { }
+    public void meth64024() { }
+    public void meth64025() { }
+    public void meth64026() { }
+    public void meth64027() { }
+    public void meth64028() { }
+    public void meth64029() { }
+    public void meth64030() { }
+    public void meth64031() { }
+    public void meth64032() { }
+    public void meth64033() { }
+    public void meth64034() { }
+    public void meth64035() { }
+    public void meth64036() { }
+    public void meth64037() { }
+    public void meth64038() { }
+    public void meth64039() { }
+    public void meth64040() { }
+    public void meth64041() { }
+    public void meth64042() { }
+    public void meth64043() { }
+    public void meth64044() { }
+    public void meth64045() { }
+    public void meth64046() { }
+    public void meth64047() { }
+    public void meth64048() { }
+    public void meth64049() { }
+    public void meth64050() { }
+    public void meth64051() { }
+    public void meth64052() { }
+    public void meth64053() { }
+    public void meth64054() { }
+    public void meth64055() { }
+    public void meth64056() { }
+    public void meth64057() { }
+    public void meth64058() { }
+    public void meth64059() { }
+    public void meth64060() { }
+    public void meth64061() { }
+    public void meth64062() { }
+    public void meth64063() { }
+    public void meth64064() { }
+    public void meth64065() { }
+    public void meth64066() { }
+    public void meth64067() { }
+    public void meth64068() { }
+    public void meth64069() { }
+    public void meth64070() { }
+    public void meth64071() { }
+    public void meth64072() { }
+    public void meth64073() { }
+    public void meth64074() { }
+    public void meth64075() { }
+    public void meth64076() { }
+    public void meth64077() { }
+    public void meth64078() { }
+    public void meth64079() { }
+    public void meth64080() { }
+    public void meth64081() { }
+    public void meth64082() { }
+    public void meth64083() { }
+    public void meth64084() { }
+    public void meth64085() { }
+    public void meth64086() { }
+    public void meth64087() { }
+    public void meth64088() { }
+    public void meth64089() { }
+    public void meth64090() { }
+    public void meth64091() { }
+    public void meth64092() { }
+    public void meth64093() { }
+    public void meth64094() { }
+    public void meth64095() { }
+    public void meth64096() { }
+    public void meth64097() { }
+    public void meth64098() { }
+    public void meth64099() { }
+    public void meth64100() { }
+    public void meth64101() { }
+    public void meth64102() { }
+    public void meth64103() { }
+    public void meth64104() { }
+    public void meth64105() { }
+    public void meth64106() { }
+    public void meth64107() { }
+    public void meth64108() { }
+    public void meth64109() { }
+    public void meth64110() { }
+    public void meth64111() { }
+    public void meth64112() { }
+    public void meth64113() { }
+    public void meth64114() { }
+    public void meth64115() { }
+    public void meth64116() { }
+    public void meth64117() { }
+    public void meth64118() { }
+    public void meth64119() { }
+    public void meth64120() { }
+    public void meth64121() { }
+    public void meth64122() { }
+    public void meth64123() { }
+    public void meth64124() { }
+    public void meth64125() { }
+    public void meth64126() { }
+    public void meth64127() { }
+    public void meth64128() { }
+    public void meth64129() { }
+    public void meth64130() { }
+    public void meth64131() { }
+    public void meth64132() { }
+    public void meth64133() { }
+    public void meth64134() { }
+    public void meth64135() { }
+    public void meth64136() { }
+    public void meth64137() { }
+    public void meth64138() { }
+    public void meth64139() { }
+    public void meth64140() { }
+    public void meth64141() { }
+    public void meth64142() { }
+    public void meth64143() { }
+    public void meth64144() { }
+    public void meth64145() { }
+    public void meth64146() { }
+    public void meth64147() { }
+    public void meth64148() { }
+    public void meth64149() { }
+    public void meth64150() { }
+    public void meth64151() { }
+    public void meth64152() { }
+    public void meth64153() { }
+    public void meth64154() { }
+    public void meth64155() { }
+    public void meth64156() { }
+    public void meth64157() { }
+    public void meth64158() { }
+    public void meth64159() { }
+    public void meth64160() { }
+    public void meth64161() { }
+    public void meth64162() { }
+    public void meth64163() { }
+    public void meth64164() { }
+    public void meth64165() { }
+    public void meth64166() { }
+    public void meth64167() { }
+    public void meth64168() { }
+    public void meth64169() { }
+    public void meth64170() { }
+    public void meth64171() { }
+    public void meth64172() { }
+    public void meth64173() { }
+    public void meth64174() { }
+    public void meth64175() { }
+    public void meth64176() { }
+    public void meth64177() { }
+    public void meth64178() { }
+    public void meth64179() { }
+    public void meth64180() { }
+    public void meth64181() { }
+    public void meth64182() { }
+    public void meth64183() { }
+    public void meth64184() { }
+    public void meth64185() { }
+    public void meth64186() { }
+    public void meth64187() { }
+    public void meth64188() { }
+    public void meth64189() { }
+    public void meth64190() { }
+    public void meth64191() { }
+    public void meth64192() { }
+    public void meth64193() { }
+    public void meth64194() { }
+    public void meth64195() { }
+    public void meth64196() { }
+    public void meth64197() { }
+    public void meth64198() { }
+    public void meth64199() { }
+    public void meth64200() { }
+    public void meth64201() { }
+    public void meth64202() { }
+    public void meth64203() { }
+    public void meth64204() { }
+    public void meth64205() { }
+    public void meth64206() { }
+    public void meth64207() { }
+    public void meth64208() { }
+    public void meth64209() { }
+    public void meth64210() { }
+    public void meth64211() { }
+    public void meth64212() { }
+    public void meth64213() { }
+    public void meth64214() { }
+    public void meth64215() { }
+    public void meth64216() { }
+    public void meth64217() { }
+    public void meth64218() { }
+    public void meth64219() { }
+    public void meth64220() { }
+    public void meth64221() { }
+    public void meth64222() { }
+    public void meth64223() { }
+    public void meth64224() { }
+    public void meth64225() { }
+    public void meth64226() { }
+    public void meth64227() { }
+    public void meth64228() { }
+    public void meth64229() { }
+    public void meth64230() { }
+    public void meth64231() { }
+    public void meth64232() { }
+    public void meth64233() { }
+    public void meth64234() { }
+    public void meth64235() { }
+    public void meth64236() { }
+    public void meth64237() { }
+    public void meth64238() { }
+    public void meth64239() { }
+    public void meth64240() { }
+    public void meth64241() { }
+    public void meth64242() { }
+    public void meth64243() { }
+    public void meth64244() { }
+    public void meth64245() { }
+    public void meth64246() { }
+    public void meth64247() { }
+    public void meth64248() { }
+    public void meth64249() { }
+    public void meth64250() { }
+    public void meth64251() { }
+    public void meth64252() { }
+    public void meth64253() { }
+    public void meth64254() { }
+    public void meth64255() { }
+    public void meth64256() { }
+    public void meth64257() { }
+    public void meth64258() { }
+    public void meth64259() { }
+    public void meth64260() { }
+    public void meth64261() { }
+    public void meth64262() { }
+    public void meth64263() { }
+    public void meth64264() { }
+    public void meth64265() { }
+    public void meth64266() { }
+    public void meth64267() { }
+    public void meth64268() { }
+    public void meth64269() { }
+    public void meth64270() { }
+    public void meth64271() { }
+    public void meth64272() { }
+    public void meth64273() { }
+    public void meth64274() { }
+    public void meth64275() { }
+    public void meth64276() { }
+    public void meth64277() { }
+    public void meth64278() { }
+    public void meth64279() { }
+    public void meth64280() { }
+    public void meth64281() { }
+    public void meth64282() { }
+    public void meth64283() { }
+    public void meth64284() { }
+    public void meth64285() { }
+    public void meth64286() { }
+    public void meth64287() { }
+    public void meth64288() { }
+    public void meth64289() { }
+    public void meth64290() { }
+    public void meth64291() { }
+    public void meth64292() { }
+    public void meth64293() { }
+    public void meth64294() { }
+    public void meth64295() { }
+    public void meth64296() { }
+    public void meth64297() { }
+    public void meth64298() { }
+    public void meth64299() { }
+    public void meth64300() { }
+    public void meth64301() { }
+    public void meth64302() { }
+    public void meth64303() { }
+    public void meth64304() { }
+    public void meth64305() { }
+    public void meth64306() { }
+    public void meth64307() { }
+    public void meth64308() { }
+    public void meth64309() { }
+    public void meth64310() { }
+    public void meth64311() { }
+    public void meth64312() { }
+    public void meth64313() { }
+    public void meth64314() { }
+    public void meth64315() { }
+    public void meth64316() { }
+    public void meth64317() { }
+    public void meth64318() { }
+    public void meth64319() { }
+    public void meth64320() { }
+    public void meth64321() { }
+    public void meth64322() { }
+    public void meth64323() { }
+    public void meth64324() { }
+    public void meth64325() { }
+    public void meth64326() { }
+    public void meth64327() { }
+    public void meth64328() { }
+    public void meth64329() { }
+    public void meth64330() { }
+    public void meth64331() { }
+    public void meth64332() { }
+    public void meth64333() { }
+    public void meth64334() { }
+    public void meth64335() { }
+    public void meth64336() { }
+    public void meth64337() { }
+    public void meth64338() { }
+    public void meth64339() { }
+    public void meth64340() { }
+    public void meth64341() { }
+    public void meth64342() { }
+    public void meth64343() { }
+    public void meth64344() { }
+    public void meth64345() { }
+    public void meth64346() { }
+    public void meth64347() { }
+    public void meth64348() { }
+    public void meth64349() { }
+    public void meth64350() { }
+    public void meth64351() { }
+    public void meth64352() { }
+    public void meth64353() { }
+    public void meth64354() { }
+    public void meth64355() { }
+    public void meth64356() { }
+    public void meth64357() { }
+    public void meth64358() { }
+    public void meth64359() { }
+    public void meth64360() { }
+    public void meth64361() { }
+    public void meth64362() { }
+    public void meth64363() { }
+    public void meth64364() { }
+    public void meth64365() { }
+    public void meth64366() { }
+    public void meth64367() { }
+    public void meth64368() { }
+    public void meth64369() { }
+    public void meth64370() { }
+    public void meth64371() { }
+    public void meth64372() { }
+    public void meth64373() { }
+    public void meth64374() { }
+    public void meth64375() { }
+    public void meth64376() { }
+    public void meth64377() { }
+    public void meth64378() { }
+    public void meth64379() { }
+    public void meth64380() { }
+    public void meth64381() { }
+    public void meth64382() { }
+    public void meth64383() { }
+    public void meth64384() { }
+    public void meth64385() { }
+    public void meth64386() { }
+    public void meth64387() { }
+    public void meth64388() { }
+    public void meth64389() { }
+    public void meth64390() { }
+    public void meth64391() { }
+    public void meth64392() { }
+    public void meth64393() { }
+    public void meth64394() { }
+    public void meth64395() { }
+    public void meth64396() { }
+    public void meth64397() { }
+    public void meth64398() { }
+    public void meth64399() { }
+    public void meth64400() { }
+    public void meth64401() { }
+    public void meth64402() { }
+    public void meth64403() { }
+    public void meth64404() { }
+    public void meth64405() { }
+    public void meth64406() { }
+    public void meth64407() { }
+    public void meth64408() { }
+    public void meth64409() { }
+    public void meth64410() { }
+    public void meth64411() { }
+    public void meth64412() { }
+    public void meth64413() { }
+    public void meth64414() { }
+    public void meth64415() { }
+    public void meth64416() { }
+    public void meth64417() { }
+    public void meth64418() { }
+    public void meth64419() { }
+    public void meth64420() { }
+    public void meth64421() { }
+    public void meth64422() { }
+    public void meth64423() { }
+    public void meth64424() { }
+    public void meth64425() { }
+    public void meth64426() { }
+    public void meth64427() { }
+    public void meth64428() { }
+    public void meth64429() { }
+    public void meth64430() { }
+    public void meth64431() { }
+    public void meth64432() { }
+    public void meth64433() { }
+    public void meth64434() { }
+    public void meth64435() { }
+    public void meth64436() { }
+    public void meth64437() { }
+    public void meth64438() { }
+    public void meth64439() { }
+    public void meth64440() { }
+    public void meth64441() { }
+    public void meth64442() { }
+    public void meth64443() { }
+    public void meth64444() { }
+    public void meth64445() { }
+    public void meth64446() { }
+    public void meth64447() { }
+    public void meth64448() { }
+    public void meth64449() { }
+    public void meth64450() { }
+    public void meth64451() { }
+    public void meth64452() { }
+    public void meth64453() { }
+    public void meth64454() { }
+    public void meth64455() { }
+    public void meth64456() { }
+    public void meth64457() { }
+    public void meth64458() { }
+    public void meth64459() { }
+    public void meth64460() { }
+    public void meth64461() { }
+    public void meth64462() { }
+    public void meth64463() { }
+    public void meth64464() { }
+    public void meth64465() { }
+    public void meth64466() { }
+    public void meth64467() { }
+    public void meth64468() { }
+    public void meth64469() { }
+    public void meth64470() { }
+    public void meth64471() { }
+    public void meth64472() { }
+    public void meth64473() { }
+    public void meth64474() { }
+    public void meth64475() { }
+    public void meth64476() { }
+    public void meth64477() { }
+    public void meth64478() { }
+    public void meth64479() { }
+    public void meth64480() { }
+    public void meth64481() { }
+    public void meth64482() { }
+    public void meth64483() { }
+    public void meth64484() { }
+    public void meth64485() { }
+    public void meth64486() { }
+    public void meth64487() { }
+    public void meth64488() { }
+    public void meth64489() { }
+    public void meth64490() { }
+    public void meth64491() { }
+    public void meth64492() { }
+    public void meth64493() { }
+    public void meth64494() { }
+    public void meth64495() { }
+    public void meth64496() { }
+    public void meth64497() { }
+    public void meth64498() { }
+    public void meth64499() { }
+    public void meth64500() { }
+    public void meth64501() { }
+    public void meth64502() { }
+    public void meth64503() { }
+    public void meth64504() { }
+    public void meth64505() { }
+    public void meth64506() { }
+    public void meth64507() { }
+    public void meth64508() { }
+    public void meth64509() { }
+    public void meth64510() { }
+    public void meth64511() { }
+    public void meth64512() { }
+    public void meth64513() { }
+    public void meth64514() { }
+    public void meth64515() { }
+    public void meth64516() { }
+    public void meth64517() { }
+    public void meth64518() { }
+    public void meth64519() { }
+    public void meth64520() { }
+    public void meth64521() { }
+    public void meth64522() { }
+    public void meth64523() { }
+    public void meth64524() { }
+    public void meth64525() { }
+    public void meth64526() { }
+    public void meth64527() { }
+    public void meth64528() { }
+    public void meth64529() { }
+    public void meth64530() { }
+    public void meth64531() { }
+    public void meth64532() { }
+    public void meth64533() { }
+    public void meth64534() { }
+    public void meth64535() { }
+    public void meth64536() { }
+    public void meth64537() { }
+    public void meth64538() { }
+    public void meth64539() { }
+    public void meth64540() { }
+    public void meth64541() { }
+    public void meth64542() { }
+    public void meth64543() { }
+    public void meth64544() { }
+    public void meth64545() { }
+    public void meth64546() { }
+    public void meth64547() { }
+    public void meth64548() { }
+    public void meth64549() { }
+    public void meth64550() { }
+    public void meth64551() { }
+    public void meth64552() { }
+    public void meth64553() { }
+    public void meth64554() { }
+    public void meth64555() { }
+    public void meth64556() { }
+    public void meth64557() { }
+    public void meth64558() { }
+    public void meth64559() { }
+    public void meth64560() { }
+    public void meth64561() { }
+    public void meth64562() { }
+    public void meth64563() { }
+    public void meth64564() { }
+    public void meth64565() { }
+    public void meth64566() { }
+    public void meth64567() { }
+    public void meth64568() { }
+    public void meth64569() { }
+    public void meth64570() { }
+    public void meth64571() { }
+    public void meth64572() { }
+    public void meth64573() { }
+    public void meth64574() { }
+    public void meth64575() { }
+    public void meth64576() { }
+    public void meth64577() { }
+    public void meth64578() { }
+    public void meth64579() { }
+    public void meth64580() { }
+    public void meth64581() { }
+    public void meth64582() { }
+    public void meth64583() { }
+    public void meth64584() { }
+    public void meth64585() { }
+    public void meth64586() { }
+    public void meth64587() { }
+    public void meth64588() { }
+    public void meth64589() { }
+    public void meth64590() { }
+    public void meth64591() { }
+    public void meth64592() { }
+    public void meth64593() { }
+    public void meth64594() { }
+    public void meth64595() { }
+    public void meth64596() { }
+    public void meth64597() { }
+    public void meth64598() { }
+    public void meth64599() { }
+    public void meth64600() { }
+    public void meth64601() { }
+    public void meth64602() { }
+    public void meth64603() { }
+    public void meth64604() { }
+    public void meth64605() { }
+    public void meth64606() { }
+    public void meth64607() { }
+    public void meth64608() { }
+    public void meth64609() { }
+    public void meth64610() { }
+    public void meth64611() { }
+    public void meth64612() { }
+    public void meth64613() { }
+    public void meth64614() { }
+    public void meth64615() { }
+    public void meth64616() { }
+    public void meth64617() { }
+    public void meth64618() { }
+    public void meth64619() { }
+    public void meth64620() { }
+    public void meth64621() { }
+    public void meth64622() { }
+    public void meth64623() { }
+    public void meth64624() { }
+    public void meth64625() { }
+    public void meth64626() { }
+    public void meth64627() { }
+    public void meth64628() { }
+    public void meth64629() { }
+    public void meth64630() { }
+    public void meth64631() { }
+    public void meth64632() { }
+    public void meth64633() { }
+    public void meth64634() { }
+    public void meth64635() { }
+    public void meth64636() { }
+    public void meth64637() { }
+    public void meth64638() { }
+    public void meth64639() { }
+    public void meth64640() { }
+    public void meth64641() { }
+    public void meth64642() { }
+    public void meth64643() { }
+    public void meth64644() { }
+    public void meth64645() { }
+    public void meth64646() { }
+    public void meth64647() { }
+    public void meth64648() { }
+    public void meth64649() { }
+    public void meth64650() { }
+    public void meth64651() { }
+    public void meth64652() { }
+    public void meth64653() { }
+    public void meth64654() { }
+    public void meth64655() { }
+    public void meth64656() { }
+    public void meth64657() { }
+    public void meth64658() { }
+    public void meth64659() { }
+    public void meth64660() { }
+    public void meth64661() { }
+    public void meth64662() { }
+    public void meth64663() { }
+    public void meth64664() { }
+    public void meth64665() { }
+    public void meth64666() { }
+    public void meth64667() { }
+    public void meth64668() { }
+    public void meth64669() { }
+    public void meth64670() { }
+    public void meth64671() { }
+    public void meth64672() { }
+    public void meth64673() { }
+    public void meth64674() { }
+    public void meth64675() { }
+    public void meth64676() { }
+    public void meth64677() { }
+    public void meth64678() { }
+    public void meth64679() { }
+    public void meth64680() { }
+    public void meth64681() { }
+    public void meth64682() { }
+    public void meth64683() { }
+    public void meth64684() { }
+    public void meth64685() { }
+    public void meth64686() { }
+    public void meth64687() { }
+    public void meth64688() { }
+    public void meth64689() { }
+    public void meth64690() { }
+    public void meth64691() { }
+    public void meth64692() { }
+    public void meth64693() { }
+    public void meth64694() { }
+    public void meth64695() { }
+    public void meth64696() { }
+    public void meth64697() { }
+    public void meth64698() { }
+    public void meth64699() { }
+    public void meth64700() { }
+    public void meth64701() { }
+    public void meth64702() { }
+    public void meth64703() { }
+    public void meth64704() { }
+    public void meth64705() { }
+    public void meth64706() { }
+    public void meth64707() { }
+    public void meth64708() { }
+    public void meth64709() { }
+    public void meth64710() { }
+    public void meth64711() { }
+    public void meth64712() { }
+    public void meth64713() { }
+    public void meth64714() { }
+    public void meth64715() { }
+    public void meth64716() { }
+    public void meth64717() { }
+    public void meth64718() { }
+    public void meth64719() { }
+    public void meth64720() { }
+    public void meth64721() { }
+    public void meth64722() { }
+    public void meth64723() { }
+    public void meth64724() { }
+    public void meth64725() { }
+    public void meth64726() { }
+    public void meth64727() { }
+    public void meth64728() { }
+    public void meth64729() { }
+    public void meth64730() { }
+    public void meth64731() { }
+    public void meth64732() { }
+    public void meth64733() { }
+    public void meth64734() { }
+    public void meth64735() { }
+    public void meth64736() { }
+    public void meth64737() { }
+    public void meth64738() { }
+    public void meth64739() { }
+    public void meth64740() { }
+    public void meth64741() { }
+    public void meth64742() { }
+    public void meth64743() { }
+    public void meth64744() { }
+    public void meth64745() { }
+    public void meth64746() { }
+    public void meth64747() { }
+    public void meth64748() { }
+    public void meth64749() { }
+    public void meth64750() { }
+    public void meth64751() { }
+    public void meth64752() { }
+    public void meth64753() { }
+    public void meth64754() { }
+    public void meth64755() { }
+    public void meth64756() { }
+    public void meth64757() { }
+    public void meth64758() { }
+    public void meth64759() { }
+    public void meth64760() { }
+    public void meth64761() { }
+    public void meth64762() { }
+    public void meth64763() { }
+    public void meth64764() { }
+    public void meth64765() { }
+    public void meth64766() { }
+    public void meth64767() { }
+    public void meth64768() { }
+    public void meth64769() { }
+    public void meth64770() { }
+    public void meth64771() { }
+    public void meth64772() { }
+    public void meth64773() { }
+    public void meth64774() { }
+    public void meth64775() { }
+    public void meth64776() { }
+    public void meth64777() { }
+    public void meth64778() { }
+    public void meth64779() { }
+    public void meth64780() { }
+    public void meth64781() { }
+    public void meth64782() { }
+    public void meth64783() { }
+    public void meth64784() { }
+    public void meth64785() { }
+    public void meth64786() { }
+    public void meth64787() { }
+    public void meth64788() { }
+    public void meth64789() { }
+    public void meth64790() { }
+    public void meth64791() { }
+    public void meth64792() { }
+    public void meth64793() { }
+    public void meth64794() { }
+    public void meth64795() { }
+    public void meth64796() { }
+    public void meth64797() { }
+    public void meth64798() { }
+    public void meth64799() { }
+    public void meth64800() { }
+    public void meth64801() { }
+    public void meth64802() { }
+    public void meth64803() { }
+    public void meth64804() { }
+    public void meth64805() { }
+    public void meth64806() { }
+    public void meth64807() { }
+    public void meth64808() { }
+    public void meth64809() { }
+    public void meth64810() { }
+    public void meth64811() { }
+    public void meth64812() { }
+    public void meth64813() { }
+    public void meth64814() { }
+    public void meth64815() { }
+    public void meth64816() { }
+    public void meth64817() { }
+    public void meth64818() { }
+    public void meth64819() { }
+    public void meth64820() { }
+    public void meth64821() { }
+    public void meth64822() { }
+    public void meth64823() { }
+    public void meth64824() { }
+    public void meth64825() { }
+    public void meth64826() { }
+    public void meth64827() { }
+    public void meth64828() { }
+    public void meth64829() { }
+    public void meth64830() { }
+    public void meth64831() { }
+    public void meth64832() { }
+    public void meth64833() { }
+    public void meth64834() { }
+    public void meth64835() { }
+    public void meth64836() { }
+    public void meth64837() { }
+    public void meth64838() { }
+    public void meth64839() { }
+    public void meth64840() { }
+    public void meth64841() { }
+    public void meth64842() { }
+    public void meth64843() { }
+    public void meth64844() { }
+    public void meth64845() { }
+    public void meth64846() { }
+    public void meth64847() { }
+    public void meth64848() { }
+    public void meth64849() { }
+    public void meth64850() { }
+    public void meth64851() { }
+    public void meth64852() { }
+    public void meth64853() { }
+    public void meth64854() { }
+    public void meth64855() { }
+    public void meth64856() { }
+    public void meth64857() { }
+    public void meth64858() { }
+    public void meth64859() { }
+    public void meth64860() { }
+    public void meth64861() { }
+    public void meth64862() { }
+    public void meth64863() { }
+    public void meth64864() { }
+    public void meth64865() { }
+    public void meth64866() { }
+    public void meth64867() { }
+    public void meth64868() { }
+    public void meth64869() { }
+    public void meth64870() { }
+    public void meth64871() { }
+    public void meth64872() { }
+    public void meth64873() { }
+    public void meth64874() { }
+    public void meth64875() { }
+    public void meth64876() { }
+    public void meth64877() { }
+    public void meth64878() { }
+    public void meth64879() { }
+    public void meth64880() { }
+    public void meth64881() { }
+    public void meth64882() { }
+    public void meth64883() { }
+    public void meth64884() { }
+    public void meth64885() { }
+    public void meth64886() { }
+    public void meth64887() { }
+    public void meth64888() { }
+    public void meth64889() { }
+    public void meth64890() { }
+    public void meth64891() { }
+    public void meth64892() { }
+    public void meth64893() { }
+    public void meth64894() { }
+    public void meth64895() { }
+    public void meth64896() { }
+    public void meth64897() { }
+    public void meth64898() { }
+    public void meth64899() { }
+    public void meth64900() { }
+    public void meth64901() { }
+    public void meth64902() { }
+    public void meth64903() { }
+    public void meth64904() { }
+    public void meth64905() { }
+    public void meth64906() { }
+    public void meth64907() { }
+    public void meth64908() { }
+    public void meth64909() { }
+    public void meth64910() { }
+    public void meth64911() { }
+    public void meth64912() { }
+    public void meth64913() { }
+    public void meth64914() { }
+    public void meth64915() { }
+    public void meth64916() { }
+    public void meth64917() { }
+    public void meth64918() { }
+    public void meth64919() { }
+    public void meth64920() { }
+    public void meth64921() { }
+    public void meth64922() { }
+    public void meth64923() { }
+    public void meth64924() { }
+    public void meth64925() { }
+    public void meth64926() { }
+    public void meth64927() { }
+    public void meth64928() { }
+    public void meth64929() { }
+    public void meth64930() { }
+    public void meth64931() { }
+    public void meth64932() { }
+    public void meth64933() { }
+    public void meth64934() { }
+    public void meth64935() { }
+    public void meth64936() { }
+    public void meth64937() { }
+    public void meth64938() { }
+    public void meth64939() { }
+    public void meth64940() { }
+    public void meth64941() { }
+    public void meth64942() { }
+    public void meth64943() { }
+    public void meth64944() { }
+    public void meth64945() { }
+    public void meth64946() { }
+    public void meth64947() { }
+    public void meth64948() { }
+    public void meth64949() { }
+    public void meth64950() { }
+    public void meth64951() { }
+    public void meth64952() { }
+    public void meth64953() { }
+    public void meth64954() { }
+    public void meth64955() { }
+    public void meth64956() { }
+    public void meth64957() { }
+    public void meth64958() { }
+    public void meth64959() { }
+    public void meth64960() { }
+    public void meth64961() { }
+    public void meth64962() { }
+    public void meth64963() { }
+    public void meth64964() { }
+    public void meth64965() { }
+    public void meth64966() { }
+    public void meth64967() { }
+    public void meth64968() { }
+    public void meth64969() { }
+    public void meth64970() { }
+    public void meth64971() { }
+    public void meth64972() { }
+    public void meth64973() { }
+    public void meth64974() { }
+    public void meth64975() { }
+    public void meth64976() { }
+    public void meth64977() { }
+    public void meth64978() { }
+    public void meth64979() { }
+    public void meth64980() { }
+    public void meth64981() { }
+    public void meth64982() { }
+    public void meth64983() { }
+    public void meth64984() { }
+    public void meth64985() { }
+    public void meth64986() { }
+    public void meth64987() { }
+    public void meth64988() { }
+    public void meth64989() { }
+    public void meth64990() { }
+    public void meth64991() { }
+    public void meth64992() { }
+    public void meth64993() { }
+    public void meth64994() { }
+    public void meth64995() { }
+    public void meth64996() { }
+    public void meth64997() { }
+    public void meth64998() { }
+    public void meth64999() { }
+    public void meth65000() { }
+    public void meth65001() { }
+    public void meth65002() { }
+    public void meth65003() { }
+    public void meth65004() { }
+    public void meth65005() { }
+    public void meth65006() { }
+    public void meth65007() { }
+    public void meth65008() { }
+    public void meth65009() { }
+    public void meth65010() { }
+    public void meth65011() { }
+    public void meth65012() { }
+    public void meth65013() { }
+    public void meth65014() { }
+    public void meth65015() { }
+    public void meth65016() { }
+    public void meth65017() { }
+    public void meth65018() { }
+    public void meth65019() { }
+    public void meth65020() { }
+    public void meth65021() { }
+    public void meth65022() { }
+    public void meth65023() { }
+    public void meth65024() { }
+    public void meth65025() { }
+    public void meth65026() { }
+    public void meth65027() { }
+    public void meth65028() { }
+    public void meth65029() { }
+    public void meth65030() { }
+    public void meth65031() { }
+    public void meth65032() { }
+    public void meth65033() { }
+    public void meth65034() { }
+    public void meth65035() { }
+    public void meth65036() { }
+    public void meth65037() { }
+    public void meth65038() { }
+    public void meth65039() { }
+    public void meth65040() { }
+    public void meth65041() { }
+    public void meth65042() { }
+    public void meth65043() { }
+    public void meth65044() { }
+    public void meth65045() { }
+    public void meth65046() { }
+    public void meth65047() { }
+    public void meth65048() { }
+    public void meth65049() { }
+    public void meth65050() { }
+    public void meth65051() { }
+    public void meth65052() { }
+    public void meth65053() { }
+    public void meth65054() { }
+    public void meth65055() { }
+    public void meth65056() { }
+    public void meth65057() { }
+    public void meth65058() { }
+    public void meth65059() { }
+    public void meth65060() { }
+    public void meth65061() { }
+    public void meth65062() { }
+    public void meth65063() { }
+    public void meth65064() { }
+    public void meth65065() { }
+    public void meth65066() { }
+    public void meth65067() { }
+    public void meth65068() { }
+    public void meth65069() { }
+    public void meth65070() { }
+    public void meth65071() { }
+    public void meth65072() { }
+    public void meth65073() { }
+    public void meth65074() { }
+    public void meth65075() { }
+    public void meth65076() { }
+    public void meth65077() { }
+    public void meth65078() { }
+    public void meth65079() { }
+    public void meth65080() { }
+    public void meth65081() { }
+    public void meth65082() { }
+    public void meth65083() { }
+    public void meth65084() { }
+    public void meth65085() { }
+    public void meth65086() { }
+    public void meth65087() { }
+    public void meth65088() { }
+    public void meth65089() { }
+    public void meth65090() { }
+    public void meth65091() { }
+    public void meth65092() { }
+    public void meth65093() { }
+    public void meth65094() { }
+    public void meth65095() { }
+    public void meth65096() { }
+    public void meth65097() { }
+    public void meth65098() { }
+    public void meth65099() { }
+    public void meth65100() { }
+    public void meth65101() { }
+    public void meth65102() { }
+    public void meth65103() { }
+    public void meth65104() { }
+    public void meth65105() { }
+    public void meth65106() { }
+    public void meth65107() { }
+    public void meth65108() { }
+    public void meth65109() { }
+    public void meth65110() { }
+    public void meth65111() { }
+    public void meth65112() { }
+    public void meth65113() { }
+    public void meth65114() { }
+    public void meth65115() { }
+    public void meth65116() { }
+    public void meth65117() { }
+    public void meth65118() { }
+    public void meth65119() { }
+    public void meth65120() { }
+    public void meth65121() { }
+    public void meth65122() { }
+    public void meth65123() { }
+    public void meth65124() { }
+    public void meth65125() { }
+    public void meth65126() { }
+    public void meth65127() { }
+    public void meth65128() { }
+    public void meth65129() { }
+    public void meth65130() { }
+    public void meth65131() { }
+    public void meth65132() { }
+    public void meth65133() { }
+    public void meth65134() { }
+    public void meth65135() { }
+    public void meth65136() { }
+    public void meth65137() { }
+    public void meth65138() { }
+    public void meth65139() { }
+    public void meth65140() { }
+    public void meth65141() { }
+    public void meth65142() { }
+    public void meth65143() { }
+    public void meth65144() { }
+    public void meth65145() { }
+    public void meth65146() { }
+    public void meth65147() { }
+    public void meth65148() { }
+    public void meth65149() { }
+    public void meth65150() { }
+    public void meth65151() { }
+    public void meth65152() { }
+    public void meth65153() { }
+    public void meth65154() { }
+    public void meth65155() { }
+    public void meth65156() { }
+    public void meth65157() { }
+    public void meth65158() { }
+    public void meth65159() { }
+    public void meth65160() { }
+    public void meth65161() { }
+    public void meth65162() { }
+    public void meth65163() { }
+    public void meth65164() { }
+    public void meth65165() { }
+    public void meth65166() { }
+    public void meth65167() { }
+    public void meth65168() { }
+    public void meth65169() { }
+    public void meth65170() { }
+    public void meth65171() { }
+    public void meth65172() { }
+    public void meth65173() { }
+    public void meth65174() { }
+    public void meth65175() { }
+    public void meth65176() { }
+    public void meth65177() { }
+    public void meth65178() { }
+    public void meth65179() { }
+    public void meth65180() { }
+    public void meth65181() { }
+    public void meth65182() { }
+    public void meth65183() { }
+    public void meth65184() { }
+    public void meth65185() { }
+    public void meth65186() { }
+    public void meth65187() { }
+    public void meth65188() { }
+    public void meth65189() { }
+    public void meth65190() { }
+    public void meth65191() { }
+    public void meth65192() { }
+    public void meth65193() { }
+    public void meth65194() { }
+    public void meth65195() { }
+    public void meth65196() { }
+    public void meth65197() { }
+    public void meth65198() { }
+    public void meth65199() { }
+    public void meth65200() { }
+    public void meth65201() { }
+    public void meth65202() { }
+    public void meth65203() { }
+    public void meth65204() { }
+    public void meth65205() { }
+    public void meth65206() { }
+    public void meth65207() { }
+    public void meth65208() { }
+    public void meth65209() { }
+    public void meth65210() { }
+    public void meth65211() { }
+    public void meth65212() { }
+    public void meth65213() { }
+    public void meth65214() { }
+    public void meth65215() { }
+    public void meth65216() { }
+    public void meth65217() { }
+    public void meth65218() { }
+    public void meth65219() { }
+    public void meth65220() { }
+    public void meth65221() { }
+    public void meth65222() { }
+    public void meth65223() { }
+    public void meth65224() { }
+    public void meth65225() { }
+    public void meth65226() { }
+    public void meth65227() { }
+    public void meth65228() { }
+    public void meth65229() { }
+    public void meth65230() { }
+    public void meth65231() { }
+    public void meth65232() { }
+    public void meth65233() { }
+    public void meth65234() { }
+    public void meth65235() { }
+    public void meth65236() { }
+    public void meth65237() { }
+    public void meth65238() { }
+    public void meth65239() { }
+    public void meth65240() { }
+    public void meth65241() { }
+    public void meth65242() { }
+    public void meth65243() { }
+    public void meth65244() { }
+    public void meth65245() { }
+    public void meth65246() { }
+    public void meth65247() { }
+    public void meth65248() { }
+    public void meth65249() { }
+    public void meth65250() { }
+    public void meth65251() { }
+    public void meth65252() { }
+    public void meth65253() { }
+    public void meth65254() { }
+    public void meth65255() { }
+    public void meth65256() { }
+    public void meth65257() { }
+    public void meth65258() { }
+    public void meth65259() { }
+    public void meth65260() { }
+    public void meth65261() { }
+    public void meth65262() { }
+    public void meth65263() { }
+    public void meth65264() { }
+    public void meth65265() { }
+    public void meth65266() { }
+    public void meth65267() { }
+    public void meth65268() { }
+    public void meth65269() { }
+    public void meth65270() { }
+    public void meth65271() { }
+    public void meth65272() { }
+    public void meth65273() { }
+    public void meth65274() { }
+    public void meth65275() { }
+    public void meth65276() { }
+    public void meth65277() { }
+    public void meth65278() { }
+    public void meth65279() { }
+    public void meth65280() { }
+    public void meth65281() { }
+    public void meth65282() { }
+    public void meth65283() { }
+    public void meth65284() { }
+    public void meth65285() { }
+    public void meth65286() { }
+    public void meth65287() { }
+    public void meth65288() { }
+    public void meth65289() { }
+    public void meth65290() { }
+    public void meth65291() { }
+    public void meth65292() { }
+    public void meth65293() { }
+    public void meth65294() { }
+    public void meth65295() { }
+    public void meth65296() { }
+    public void meth65297() { }
+    public void meth65298() { }
+    public void meth65299() { }
+    public void meth65300() { }
+    public void meth65301() { }
+    public void meth65302() { }
+    public void meth65303() { }
+    public void meth65304() { }
+    public void meth65305() { }
+    public void meth65306() { }
+    public void meth65307() { }
+    public void meth65308() { }
+    public void meth65309() { }
+    public void meth65310() { }
+    public void meth65311() { }
+    public void meth65312() { }
+    public void meth65313() { }
+    public void meth65314() { }
+    public void meth65315() { }
+    public void meth65316() { }
+    public void meth65317() { }
+    public void meth65318() { }
+    public void meth65319() { }
+    public void meth65320() { }
+    public void meth65321() { }
+    public void meth65322() { }
+    public void meth65323() { }
+    public void meth65324() { }
+    public void meth65325() { }
+    public void meth65326() { }
+    public void meth65327() { }
+    public void meth65328() { }
+    public void meth65329() { }
+    public void meth65330() { }
+    public void meth65331() { }
+    public void meth65332() { }
+    public void meth65333() { }
+    public void meth65334() { }
+    public void meth65335() { }
+    public void meth65336() { }
+    public void meth65337() { }
+    public void meth65338() { }
+    public void meth65339() { }
+    public void meth65340() { }
+    public void meth65341() { }
+    public void meth65342() { }
+    public void meth65343() { }
+    public void meth65344() { }
+    public void meth65345() { }
+    public void meth65346() { }
+    public void meth65347() { }
+    public void meth65348() { }
+    public void meth65349() { }
+    public void meth65350() { }
+    public void meth65351() { }
+    public void meth65352() { }
+    public void meth65353() { }
+    public void meth65354() { }
+    public void meth65355() { }
+    public void meth65356() { }
+    public void meth65357() { }
+    public void meth65358() { }
+    public void meth65359() { }
+    public void meth65360() { }
+    public void meth65361() { }
+    public void meth65362() { }
+    public void meth65363() { }
+    public void meth65364() { }
+    public void meth65365() { }
+    public void meth65366() { }
+    public void meth65367() { }
+    public void meth65368() { }
+    public void meth65369() { }
+    public void meth65370() { }
+    public void meth65371() { }
+    public void meth65372() { }
+    public void meth65373() { }
+    public void meth65374() { }
+    public void meth65375() { }
+    public void meth65376() { }
+    public void meth65377() { }
+    public void meth65378() { }
+    public void meth65379() { }
+    public void meth65380() { }
+    public void meth65381() { }
+    public void meth65382() { }
+    public void meth65383() { }
+    public void meth65384() { }
+    public void meth65385() { }
+    public void meth65386() { }
+    public void meth65387() { }
+    public void meth65388() { }
+    public void meth65389() { }
+    public void meth65390() { }
+    public void meth65391() { }
+    public void meth65392() { }
+    public void meth65393() { }
+    public void meth65394() { }
+    public void meth65395() { }
+    public void meth65396() { }
+    public void meth65397() { }
+    public void meth65398() { }
+    public void meth65399() { }
+    public void meth65400() { }
+    public void meth65401() { }
+    public void meth65402() { }
+    public void meth65403() { }
+    public void meth65404() { }
+    public void meth65405() { }
+    public void meth65406() { }
+    public void meth65407() { }
+    public void meth65408() { }
+    public void meth65409() { }
+    public void meth65410() { }
+    public void meth65411() { }
+    public void meth65412() { }
+    public void meth65413() { }
+    public void meth65414() { }
+    public void meth65415() { }
+    public void meth65416() { }
+    public void meth65417() { }
+    public void meth65418() { }
+    public void meth65419() { }
+    public void meth65420() { }
+    public void meth65421() { }
+    public void meth65422() { }
+    public void meth65423() { }
+    public void meth65424() { }
+    public void meth65425() { }
+    public void meth65426() { }
+    public void meth65427() { }
+    public void meth65428() { }
+    public void meth65429() { }
+    public void meth65430() { }
+    public void meth65431() { }
+    public void meth65432() { }
+    public void meth65433() { }
+    public void meth65434() { }
+    public void meth65435() { }
+    public void meth65436() { }
+    public void meth65437() { }
+    public void meth65438() { }
+    public void meth65439() { }
+    public void meth65440() { }
+    public void meth65441() { }
+    public void meth65442() { }
+    public void meth65443() { }
+    public void meth65444() { }
+    public void meth65445() { }
+    public void meth65446() { }
+    public void meth65447() { }
+    public void meth65448() { }
+    public void meth65449() { }
+    public void meth65450() { }
+    public void meth65451() { }
+    public void meth65452() { }
+    public void meth65453() { }
+    public void meth65454() { }
+    public void meth65455() { }
+    public void meth65456() { }
+    public void meth65457() { }
+    public void meth65458() { }
+    public void meth65459() { }
+    public void meth65460() { }
+    public void meth65461() { }
+    public void meth65462() { }
+    public void meth65463() { }
+    public void meth65464() { }
+    public void meth65465() { }
+    public void meth65466() { }
+    public void meth65467() { }
+    public void meth65468() { }
+    public void meth65469() { }
+    public void meth65470() { }
+    public void meth65471() { }
+    public void meth65472() { }
+    public void meth65473() { }
+    public void meth65474() { }
+    public void meth65475() { }
+    public void meth65476() { }
+    public void meth65477() { }
+    public void meth65478() { }
+    public void meth65479() { }
+    public void meth65480() { }
+    public void meth65481() { }
+    public void meth65482() { }
+    public void meth65483() { }
+    public void meth65484() { }
+    public void meth65485() { }
+    public void meth65486() { }
+    public void meth65487() { }
+    public void meth65488() { }
+    public void meth65489() { }
+    public void meth65490() { }
+    public void meth65491() { }
+    public void meth65492() { }
+    public void meth65493() { }
+    public void meth65494() { }
+    public void meth65495() { }
+    public void meth65496() { }
+    public void meth65497() { }
+    public void meth65498() { }
+    public void meth65499() { }
+    public void meth65500() { }
+}
diff --git a/dx/tests/128-multidex-option-overflow/src/FillerStatic.java b/dx/tests/128-multidex-option-overflow/src/FillerStatic.java
new file mode 100644
index 0000000..0c5c04d
--- /dev/null
+++ b/dx/tests/128-multidex-option-overflow/src/FillerStatic.java
@@ -0,0 +1,65502 @@
+public class FillerStatic {
+    static public int staticInt1;
+    static public int staticInt2;
+    static public int staticInt3;
+    static public int staticInt4;
+    static public int staticInt5;
+    static public int staticInt6;
+    static public int staticInt7;
+    static public int staticInt8;
+    static public int staticInt9;
+    static public int staticInt10;
+    static public int staticInt11;
+    static public int staticInt12;
+    static public int staticInt13;
+    static public int staticInt14;
+    static public int staticInt15;
+    static public int staticInt16;
+    static public int staticInt17;
+    static public int staticInt18;
+    static public int staticInt19;
+    static public int staticInt20;
+    static public int staticInt21;
+    static public int staticInt22;
+    static public int staticInt23;
+    static public int staticInt24;
+    static public int staticInt25;
+    static public int staticInt26;
+    static public int staticInt27;
+    static public int staticInt28;
+    static public int staticInt29;
+    static public int staticInt30;
+    static public int staticInt31;
+    static public int staticInt32;
+    static public int staticInt33;
+    static public int staticInt34;
+    static public int staticInt35;
+    static public int staticInt36;
+    static public int staticInt37;
+    static public int staticInt38;
+    static public int staticInt39;
+    static public int staticInt40;
+    static public int staticInt41;
+    static public int staticInt42;
+    static public int staticInt43;
+    static public int staticInt44;
+    static public int staticInt45;
+    static public int staticInt46;
+    static public int staticInt47;
+    static public int staticInt48;
+    static public int staticInt49;
+    static public int staticInt50;
+    static public int staticInt51;
+    static public int staticInt52;
+    static public int staticInt53;
+    static public int staticInt54;
+    static public int staticInt55;
+    static public int staticInt56;
+    static public int staticInt57;
+    static public int staticInt58;
+    static public int staticInt59;
+    static public int staticInt60;
+    static public int staticInt61;
+    static public int staticInt62;
+    static public int staticInt63;
+    static public int staticInt64;
+    static public int staticInt65;
+    static public int staticInt66;
+    static public int staticInt67;
+    static public int staticInt68;
+    static public int staticInt69;
+    static public int staticInt70;
+    static public int staticInt71;
+    static public int staticInt72;
+    static public int staticInt73;
+    static public int staticInt74;
+    static public int staticInt75;
+    static public int staticInt76;
+    static public int staticInt77;
+    static public int staticInt78;
+    static public int staticInt79;
+    static public int staticInt80;
+    static public int staticInt81;
+    static public int staticInt82;
+    static public int staticInt83;
+    static public int staticInt84;
+    static public int staticInt85;
+    static public int staticInt86;
+    static public int staticInt87;
+    static public int staticInt88;
+    static public int staticInt89;
+    static public int staticInt90;
+    static public int staticInt91;
+    static public int staticInt92;
+    static public int staticInt93;
+    static public int staticInt94;
+    static public int staticInt95;
+    static public int staticInt96;
+    static public int staticInt97;
+    static public int staticInt98;
+    static public int staticInt99;
+    static public int staticInt100;
+    static public int staticInt101;
+    static public int staticInt102;
+    static public int staticInt103;
+    static public int staticInt104;
+    static public int staticInt105;
+    static public int staticInt106;
+    static public int staticInt107;
+    static public int staticInt108;
+    static public int staticInt109;
+    static public int staticInt110;
+    static public int staticInt111;
+    static public int staticInt112;
+    static public int staticInt113;
+    static public int staticInt114;
+    static public int staticInt115;
+    static public int staticInt116;
+    static public int staticInt117;
+    static public int staticInt118;
+    static public int staticInt119;
+    static public int staticInt120;
+    static public int staticInt121;
+    static public int staticInt122;
+    static public int staticInt123;
+    static public int staticInt124;
+    static public int staticInt125;
+    static public int staticInt126;
+    static public int staticInt127;
+    static public int staticInt128;
+    static public int staticInt129;
+    static public int staticInt130;
+    static public int staticInt131;
+    static public int staticInt132;
+    static public int staticInt133;
+    static public int staticInt134;
+    static public int staticInt135;
+    static public int staticInt136;
+    static public int staticInt137;
+    static public int staticInt138;
+    static public int staticInt139;
+    static public int staticInt140;
+    static public int staticInt141;
+    static public int staticInt142;
+    static public int staticInt143;
+    static public int staticInt144;
+    static public int staticInt145;
+    static public int staticInt146;
+    static public int staticInt147;
+    static public int staticInt148;
+    static public int staticInt149;
+    static public int staticInt150;
+    static public int staticInt151;
+    static public int staticInt152;
+    static public int staticInt153;
+    static public int staticInt154;
+    static public int staticInt155;
+    static public int staticInt156;
+    static public int staticInt157;
+    static public int staticInt158;
+    static public int staticInt159;
+    static public int staticInt160;
+    static public int staticInt161;
+    static public int staticInt162;
+    static public int staticInt163;
+    static public int staticInt164;
+    static public int staticInt165;
+    static public int staticInt166;
+    static public int staticInt167;
+    static public int staticInt168;
+    static public int staticInt169;
+    static public int staticInt170;
+    static public int staticInt171;
+    static public int staticInt172;
+    static public int staticInt173;
+    static public int staticInt174;
+    static public int staticInt175;
+    static public int staticInt176;
+    static public int staticInt177;
+    static public int staticInt178;
+    static public int staticInt179;
+    static public int staticInt180;
+    static public int staticInt181;
+    static public int staticInt182;
+    static public int staticInt183;
+    static public int staticInt184;
+    static public int staticInt185;
+    static public int staticInt186;
+    static public int staticInt187;
+    static public int staticInt188;
+    static public int staticInt189;
+    static public int staticInt190;
+    static public int staticInt191;
+    static public int staticInt192;
+    static public int staticInt193;
+    static public int staticInt194;
+    static public int staticInt195;
+    static public int staticInt196;
+    static public int staticInt197;
+    static public int staticInt198;
+    static public int staticInt199;
+    static public int staticInt200;
+    static public int staticInt201;
+    static public int staticInt202;
+    static public int staticInt203;
+    static public int staticInt204;
+    static public int staticInt205;
+    static public int staticInt206;
+    static public int staticInt207;
+    static public int staticInt208;
+    static public int staticInt209;
+    static public int staticInt210;
+    static public int staticInt211;
+    static public int staticInt212;
+    static public int staticInt213;
+    static public int staticInt214;
+    static public int staticInt215;
+    static public int staticInt216;
+    static public int staticInt217;
+    static public int staticInt218;
+    static public int staticInt219;
+    static public int staticInt220;
+    static public int staticInt221;
+    static public int staticInt222;
+    static public int staticInt223;
+    static public int staticInt224;
+    static public int staticInt225;
+    static public int staticInt226;
+    static public int staticInt227;
+    static public int staticInt228;
+    static public int staticInt229;
+    static public int staticInt230;
+    static public int staticInt231;
+    static public int staticInt232;
+    static public int staticInt233;
+    static public int staticInt234;
+    static public int staticInt235;
+    static public int staticInt236;
+    static public int staticInt237;
+    static public int staticInt238;
+    static public int staticInt239;
+    static public int staticInt240;
+    static public int staticInt241;
+    static public int staticInt242;
+    static public int staticInt243;
+    static public int staticInt244;
+    static public int staticInt245;
+    static public int staticInt246;
+    static public int staticInt247;
+    static public int staticInt248;
+    static public int staticInt249;
+    static public int staticInt250;
+    static public int staticInt251;
+    static public int staticInt252;
+    static public int staticInt253;
+    static public int staticInt254;
+    static public int staticInt255;
+    static public int staticInt256;
+    static public int staticInt257;
+    static public int staticInt258;
+    static public int staticInt259;
+    static public int staticInt260;
+    static public int staticInt261;
+    static public int staticInt262;
+    static public int staticInt263;
+    static public int staticInt264;
+    static public int staticInt265;
+    static public int staticInt266;
+    static public int staticInt267;
+    static public int staticInt268;
+    static public int staticInt269;
+    static public int staticInt270;
+    static public int staticInt271;
+    static public int staticInt272;
+    static public int staticInt273;
+    static public int staticInt274;
+    static public int staticInt275;
+    static public int staticInt276;
+    static public int staticInt277;
+    static public int staticInt278;
+    static public int staticInt279;
+    static public int staticInt280;
+    static public int staticInt281;
+    static public int staticInt282;
+    static public int staticInt283;
+    static public int staticInt284;
+    static public int staticInt285;
+    static public int staticInt286;
+    static public int staticInt287;
+    static public int staticInt288;
+    static public int staticInt289;
+    static public int staticInt290;
+    static public int staticInt291;
+    static public int staticInt292;
+    static public int staticInt293;
+    static public int staticInt294;
+    static public int staticInt295;
+    static public int staticInt296;
+    static public int staticInt297;
+    static public int staticInt298;
+    static public int staticInt299;
+    static public int staticInt300;
+    static public int staticInt301;
+    static public int staticInt302;
+    static public int staticInt303;
+    static public int staticInt304;
+    static public int staticInt305;
+    static public int staticInt306;
+    static public int staticInt307;
+    static public int staticInt308;
+    static public int staticInt309;
+    static public int staticInt310;
+    static public int staticInt311;
+    static public int staticInt312;
+    static public int staticInt313;
+    static public int staticInt314;
+    static public int staticInt315;
+    static public int staticInt316;
+    static public int staticInt317;
+    static public int staticInt318;
+    static public int staticInt319;
+    static public int staticInt320;
+    static public int staticInt321;
+    static public int staticInt322;
+    static public int staticInt323;
+    static public int staticInt324;
+    static public int staticInt325;
+    static public int staticInt326;
+    static public int staticInt327;
+    static public int staticInt328;
+    static public int staticInt329;
+    static public int staticInt330;
+    static public int staticInt331;
+    static public int staticInt332;
+    static public int staticInt333;
+    static public int staticInt334;
+    static public int staticInt335;
+    static public int staticInt336;
+    static public int staticInt337;
+    static public int staticInt338;
+    static public int staticInt339;
+    static public int staticInt340;
+    static public int staticInt341;
+    static public int staticInt342;
+    static public int staticInt343;
+    static public int staticInt344;
+    static public int staticInt345;
+    static public int staticInt346;
+    static public int staticInt347;
+    static public int staticInt348;
+    static public int staticInt349;
+    static public int staticInt350;
+    static public int staticInt351;
+    static public int staticInt352;
+    static public int staticInt353;
+    static public int staticInt354;
+    static public int staticInt355;
+    static public int staticInt356;
+    static public int staticInt357;
+    static public int staticInt358;
+    static public int staticInt359;
+    static public int staticInt360;
+    static public int staticInt361;
+    static public int staticInt362;
+    static public int staticInt363;
+    static public int staticInt364;
+    static public int staticInt365;
+    static public int staticInt366;
+    static public int staticInt367;
+    static public int staticInt368;
+    static public int staticInt369;
+    static public int staticInt370;
+    static public int staticInt371;
+    static public int staticInt372;
+    static public int staticInt373;
+    static public int staticInt374;
+    static public int staticInt375;
+    static public int staticInt376;
+    static public int staticInt377;
+    static public int staticInt378;
+    static public int staticInt379;
+    static public int staticInt380;
+    static public int staticInt381;
+    static public int staticInt382;
+    static public int staticInt383;
+    static public int staticInt384;
+    static public int staticInt385;
+    static public int staticInt386;
+    static public int staticInt387;
+    static public int staticInt388;
+    static public int staticInt389;
+    static public int staticInt390;
+    static public int staticInt391;
+    static public int staticInt392;
+    static public int staticInt393;
+    static public int staticInt394;
+    static public int staticInt395;
+    static public int staticInt396;
+    static public int staticInt397;
+    static public int staticInt398;
+    static public int staticInt399;
+    static public int staticInt400;
+    static public int staticInt401;
+    static public int staticInt402;
+    static public int staticInt403;
+    static public int staticInt404;
+    static public int staticInt405;
+    static public int staticInt406;
+    static public int staticInt407;
+    static public int staticInt408;
+    static public int staticInt409;
+    static public int staticInt410;
+    static public int staticInt411;
+    static public int staticInt412;
+    static public int staticInt413;
+    static public int staticInt414;
+    static public int staticInt415;
+    static public int staticInt416;
+    static public int staticInt417;
+    static public int staticInt418;
+    static public int staticInt419;
+    static public int staticInt420;
+    static public int staticInt421;
+    static public int staticInt422;
+    static public int staticInt423;
+    static public int staticInt424;
+    static public int staticInt425;
+    static public int staticInt426;
+    static public int staticInt427;
+    static public int staticInt428;
+    static public int staticInt429;
+    static public int staticInt430;
+    static public int staticInt431;
+    static public int staticInt432;
+    static public int staticInt433;
+    static public int staticInt434;
+    static public int staticInt435;
+    static public int staticInt436;
+    static public int staticInt437;
+    static public int staticInt438;
+    static public int staticInt439;
+    static public int staticInt440;
+    static public int staticInt441;
+    static public int staticInt442;
+    static public int staticInt443;
+    static public int staticInt444;
+    static public int staticInt445;
+    static public int staticInt446;
+    static public int staticInt447;
+    static public int staticInt448;
+    static public int staticInt449;
+    static public int staticInt450;
+    static public int staticInt451;
+    static public int staticInt452;
+    static public int staticInt453;
+    static public int staticInt454;
+    static public int staticInt455;
+    static public int staticInt456;
+    static public int staticInt457;
+    static public int staticInt458;
+    static public int staticInt459;
+    static public int staticInt460;
+    static public int staticInt461;
+    static public int staticInt462;
+    static public int staticInt463;
+    static public int staticInt464;
+    static public int staticInt465;
+    static public int staticInt466;
+    static public int staticInt467;
+    static public int staticInt468;
+    static public int staticInt469;
+    static public int staticInt470;
+    static public int staticInt471;
+    static public int staticInt472;
+    static public int staticInt473;
+    static public int staticInt474;
+    static public int staticInt475;
+    static public int staticInt476;
+    static public int staticInt477;
+    static public int staticInt478;
+    static public int staticInt479;
+    static public int staticInt480;
+    static public int staticInt481;
+    static public int staticInt482;
+    static public int staticInt483;
+    static public int staticInt484;
+    static public int staticInt485;
+    static public int staticInt486;
+    static public int staticInt487;
+    static public int staticInt488;
+    static public int staticInt489;
+    static public int staticInt490;
+    static public int staticInt491;
+    static public int staticInt492;
+    static public int staticInt493;
+    static public int staticInt494;
+    static public int staticInt495;
+    static public int staticInt496;
+    static public int staticInt497;
+    static public int staticInt498;
+    static public int staticInt499;
+    static public int staticInt500;
+    static public int staticInt501;
+    static public int staticInt502;
+    static public int staticInt503;
+    static public int staticInt504;
+    static public int staticInt505;
+    static public int staticInt506;
+    static public int staticInt507;
+    static public int staticInt508;
+    static public int staticInt509;
+    static public int staticInt510;
+    static public int staticInt511;
+    static public int staticInt512;
+    static public int staticInt513;
+    static public int staticInt514;
+    static public int staticInt515;
+    static public int staticInt516;
+    static public int staticInt517;
+    static public int staticInt518;
+    static public int staticInt519;
+    static public int staticInt520;
+    static public int staticInt521;
+    static public int staticInt522;
+    static public int staticInt523;
+    static public int staticInt524;
+    static public int staticInt525;
+    static public int staticInt526;
+    static public int staticInt527;
+    static public int staticInt528;
+    static public int staticInt529;
+    static public int staticInt530;
+    static public int staticInt531;
+    static public int staticInt532;
+    static public int staticInt533;
+    static public int staticInt534;
+    static public int staticInt535;
+    static public int staticInt536;
+    static public int staticInt537;
+    static public int staticInt538;
+    static public int staticInt539;
+    static public int staticInt540;
+    static public int staticInt541;
+    static public int staticInt542;
+    static public int staticInt543;
+    static public int staticInt544;
+    static public int staticInt545;
+    static public int staticInt546;
+    static public int staticInt547;
+    static public int staticInt548;
+    static public int staticInt549;
+    static public int staticInt550;
+    static public int staticInt551;
+    static public int staticInt552;
+    static public int staticInt553;
+    static public int staticInt554;
+    static public int staticInt555;
+    static public int staticInt556;
+    static public int staticInt557;
+    static public int staticInt558;
+    static public int staticInt559;
+    static public int staticInt560;
+    static public int staticInt561;
+    static public int staticInt562;
+    static public int staticInt563;
+    static public int staticInt564;
+    static public int staticInt565;
+    static public int staticInt566;
+    static public int staticInt567;
+    static public int staticInt568;
+    static public int staticInt569;
+    static public int staticInt570;
+    static public int staticInt571;
+    static public int staticInt572;
+    static public int staticInt573;
+    static public int staticInt574;
+    static public int staticInt575;
+    static public int staticInt576;
+    static public int staticInt577;
+    static public int staticInt578;
+    static public int staticInt579;
+    static public int staticInt580;
+    static public int staticInt581;
+    static public int staticInt582;
+    static public int staticInt583;
+    static public int staticInt584;
+    static public int staticInt585;
+    static public int staticInt586;
+    static public int staticInt587;
+    static public int staticInt588;
+    static public int staticInt589;
+    static public int staticInt590;
+    static public int staticInt591;
+    static public int staticInt592;
+    static public int staticInt593;
+    static public int staticInt594;
+    static public int staticInt595;
+    static public int staticInt596;
+    static public int staticInt597;
+    static public int staticInt598;
+    static public int staticInt599;
+    static public int staticInt600;
+    static public int staticInt601;
+    static public int staticInt602;
+    static public int staticInt603;
+    static public int staticInt604;
+    static public int staticInt605;
+    static public int staticInt606;
+    static public int staticInt607;
+    static public int staticInt608;
+    static public int staticInt609;
+    static public int staticInt610;
+    static public int staticInt611;
+    static public int staticInt612;
+    static public int staticInt613;
+    static public int staticInt614;
+    static public int staticInt615;
+    static public int staticInt616;
+    static public int staticInt617;
+    static public int staticInt618;
+    static public int staticInt619;
+    static public int staticInt620;
+    static public int staticInt621;
+    static public int staticInt622;
+    static public int staticInt623;
+    static public int staticInt624;
+    static public int staticInt625;
+    static public int staticInt626;
+    static public int staticInt627;
+    static public int staticInt628;
+    static public int staticInt629;
+    static public int staticInt630;
+    static public int staticInt631;
+    static public int staticInt632;
+    static public int staticInt633;
+    static public int staticInt634;
+    static public int staticInt635;
+    static public int staticInt636;
+    static public int staticInt637;
+    static public int staticInt638;
+    static public int staticInt639;
+    static public int staticInt640;
+    static public int staticInt641;
+    static public int staticInt642;
+    static public int staticInt643;
+    static public int staticInt644;
+    static public int staticInt645;
+    static public int staticInt646;
+    static public int staticInt647;
+    static public int staticInt648;
+    static public int staticInt649;
+    static public int staticInt650;
+    static public int staticInt651;
+    static public int staticInt652;
+    static public int staticInt653;
+    static public int staticInt654;
+    static public int staticInt655;
+    static public int staticInt656;
+    static public int staticInt657;
+    static public int staticInt658;
+    static public int staticInt659;
+    static public int staticInt660;
+    static public int staticInt661;
+    static public int staticInt662;
+    static public int staticInt663;
+    static public int staticInt664;
+    static public int staticInt665;
+    static public int staticInt666;
+    static public int staticInt667;
+    static public int staticInt668;
+    static public int staticInt669;
+    static public int staticInt670;
+    static public int staticInt671;
+    static public int staticInt672;
+    static public int staticInt673;
+    static public int staticInt674;
+    static public int staticInt675;
+    static public int staticInt676;
+    static public int staticInt677;
+    static public int staticInt678;
+    static public int staticInt679;
+    static public int staticInt680;
+    static public int staticInt681;
+    static public int staticInt682;
+    static public int staticInt683;
+    static public int staticInt684;
+    static public int staticInt685;
+    static public int staticInt686;
+    static public int staticInt687;
+    static public int staticInt688;
+    static public int staticInt689;
+    static public int staticInt690;
+    static public int staticInt691;
+    static public int staticInt692;
+    static public int staticInt693;
+    static public int staticInt694;
+    static public int staticInt695;
+    static public int staticInt696;
+    static public int staticInt697;
+    static public int staticInt698;
+    static public int staticInt699;
+    static public int staticInt700;
+    static public int staticInt701;
+    static public int staticInt702;
+    static public int staticInt703;
+    static public int staticInt704;
+    static public int staticInt705;
+    static public int staticInt706;
+    static public int staticInt707;
+    static public int staticInt708;
+    static public int staticInt709;
+    static public int staticInt710;
+    static public int staticInt711;
+    static public int staticInt712;
+    static public int staticInt713;
+    static public int staticInt714;
+    static public int staticInt715;
+    static public int staticInt716;
+    static public int staticInt717;
+    static public int staticInt718;
+    static public int staticInt719;
+    static public int staticInt720;
+    static public int staticInt721;
+    static public int staticInt722;
+    static public int staticInt723;
+    static public int staticInt724;
+    static public int staticInt725;
+    static public int staticInt726;
+    static public int staticInt727;
+    static public int staticInt728;
+    static public int staticInt729;
+    static public int staticInt730;
+    static public int staticInt731;
+    static public int staticInt732;
+    static public int staticInt733;
+    static public int staticInt734;
+    static public int staticInt735;
+    static public int staticInt736;
+    static public int staticInt737;
+    static public int staticInt738;
+    static public int staticInt739;
+    static public int staticInt740;
+    static public int staticInt741;
+    static public int staticInt742;
+    static public int staticInt743;
+    static public int staticInt744;
+    static public int staticInt745;
+    static public int staticInt746;
+    static public int staticInt747;
+    static public int staticInt748;
+    static public int staticInt749;
+    static public int staticInt750;
+    static public int staticInt751;
+    static public int staticInt752;
+    static public int staticInt753;
+    static public int staticInt754;
+    static public int staticInt755;
+    static public int staticInt756;
+    static public int staticInt757;
+    static public int staticInt758;
+    static public int staticInt759;
+    static public int staticInt760;
+    static public int staticInt761;
+    static public int staticInt762;
+    static public int staticInt763;
+    static public int staticInt764;
+    static public int staticInt765;
+    static public int staticInt766;
+    static public int staticInt767;
+    static public int staticInt768;
+    static public int staticInt769;
+    static public int staticInt770;
+    static public int staticInt771;
+    static public int staticInt772;
+    static public int staticInt773;
+    static public int staticInt774;
+    static public int staticInt775;
+    static public int staticInt776;
+    static public int staticInt777;
+    static public int staticInt778;
+    static public int staticInt779;
+    static public int staticInt780;
+    static public int staticInt781;
+    static public int staticInt782;
+    static public int staticInt783;
+    static public int staticInt784;
+    static public int staticInt785;
+    static public int staticInt786;
+    static public int staticInt787;
+    static public int staticInt788;
+    static public int staticInt789;
+    static public int staticInt790;
+    static public int staticInt791;
+    static public int staticInt792;
+    static public int staticInt793;
+    static public int staticInt794;
+    static public int staticInt795;
+    static public int staticInt796;
+    static public int staticInt797;
+    static public int staticInt798;
+    static public int staticInt799;
+    static public int staticInt800;
+    static public int staticInt801;
+    static public int staticInt802;
+    static public int staticInt803;
+    static public int staticInt804;
+    static public int staticInt805;
+    static public int staticInt806;
+    static public int staticInt807;
+    static public int staticInt808;
+    static public int staticInt809;
+    static public int staticInt810;
+    static public int staticInt811;
+    static public int staticInt812;
+    static public int staticInt813;
+    static public int staticInt814;
+    static public int staticInt815;
+    static public int staticInt816;
+    static public int staticInt817;
+    static public int staticInt818;
+    static public int staticInt819;
+    static public int staticInt820;
+    static public int staticInt821;
+    static public int staticInt822;
+    static public int staticInt823;
+    static public int staticInt824;
+    static public int staticInt825;
+    static public int staticInt826;
+    static public int staticInt827;
+    static public int staticInt828;
+    static public int staticInt829;
+    static public int staticInt830;
+    static public int staticInt831;
+    static public int staticInt832;
+    static public int staticInt833;
+    static public int staticInt834;
+    static public int staticInt835;
+    static public int staticInt836;
+    static public int staticInt837;
+    static public int staticInt838;
+    static public int staticInt839;
+    static public int staticInt840;
+    static public int staticInt841;
+    static public int staticInt842;
+    static public int staticInt843;
+    static public int staticInt844;
+    static public int staticInt845;
+    static public int staticInt846;
+    static public int staticInt847;
+    static public int staticInt848;
+    static public int staticInt849;
+    static public int staticInt850;
+    static public int staticInt851;
+    static public int staticInt852;
+    static public int staticInt853;
+    static public int staticInt854;
+    static public int staticInt855;
+    static public int staticInt856;
+    static public int staticInt857;
+    static public int staticInt858;
+    static public int staticInt859;
+    static public int staticInt860;
+    static public int staticInt861;
+    static public int staticInt862;
+    static public int staticInt863;
+    static public int staticInt864;
+    static public int staticInt865;
+    static public int staticInt866;
+    static public int staticInt867;
+    static public int staticInt868;
+    static public int staticInt869;
+    static public int staticInt870;
+    static public int staticInt871;
+    static public int staticInt872;
+    static public int staticInt873;
+    static public int staticInt874;
+    static public int staticInt875;
+    static public int staticInt876;
+    static public int staticInt877;
+    static public int staticInt878;
+    static public int staticInt879;
+    static public int staticInt880;
+    static public int staticInt881;
+    static public int staticInt882;
+    static public int staticInt883;
+    static public int staticInt884;
+    static public int staticInt885;
+    static public int staticInt886;
+    static public int staticInt887;
+    static public int staticInt888;
+    static public int staticInt889;
+    static public int staticInt890;
+    static public int staticInt891;
+    static public int staticInt892;
+    static public int staticInt893;
+    static public int staticInt894;
+    static public int staticInt895;
+    static public int staticInt896;
+    static public int staticInt897;
+    static public int staticInt898;
+    static public int staticInt899;
+    static public int staticInt900;
+    static public int staticInt901;
+    static public int staticInt902;
+    static public int staticInt903;
+    static public int staticInt904;
+    static public int staticInt905;
+    static public int staticInt906;
+    static public int staticInt907;
+    static public int staticInt908;
+    static public int staticInt909;
+    static public int staticInt910;
+    static public int staticInt911;
+    static public int staticInt912;
+    static public int staticInt913;
+    static public int staticInt914;
+    static public int staticInt915;
+    static public int staticInt916;
+    static public int staticInt917;
+    static public int staticInt918;
+    static public int staticInt919;
+    static public int staticInt920;
+    static public int staticInt921;
+    static public int staticInt922;
+    static public int staticInt923;
+    static public int staticInt924;
+    static public int staticInt925;
+    static public int staticInt926;
+    static public int staticInt927;
+    static public int staticInt928;
+    static public int staticInt929;
+    static public int staticInt930;
+    static public int staticInt931;
+    static public int staticInt932;
+    static public int staticInt933;
+    static public int staticInt934;
+    static public int staticInt935;
+    static public int staticInt936;
+    static public int staticInt937;
+    static public int staticInt938;
+    static public int staticInt939;
+    static public int staticInt940;
+    static public int staticInt941;
+    static public int staticInt942;
+    static public int staticInt943;
+    static public int staticInt944;
+    static public int staticInt945;
+    static public int staticInt946;
+    static public int staticInt947;
+    static public int staticInt948;
+    static public int staticInt949;
+    static public int staticInt950;
+    static public int staticInt951;
+    static public int staticInt952;
+    static public int staticInt953;
+    static public int staticInt954;
+    static public int staticInt955;
+    static public int staticInt956;
+    static public int staticInt957;
+    static public int staticInt958;
+    static public int staticInt959;
+    static public int staticInt960;
+    static public int staticInt961;
+    static public int staticInt962;
+    static public int staticInt963;
+    static public int staticInt964;
+    static public int staticInt965;
+    static public int staticInt966;
+    static public int staticInt967;
+    static public int staticInt968;
+    static public int staticInt969;
+    static public int staticInt970;
+    static public int staticInt971;
+    static public int staticInt972;
+    static public int staticInt973;
+    static public int staticInt974;
+    static public int staticInt975;
+    static public int staticInt976;
+    static public int staticInt977;
+    static public int staticInt978;
+    static public int staticInt979;
+    static public int staticInt980;
+    static public int staticInt981;
+    static public int staticInt982;
+    static public int staticInt983;
+    static public int staticInt984;
+    static public int staticInt985;
+    static public int staticInt986;
+    static public int staticInt987;
+    static public int staticInt988;
+    static public int staticInt989;
+    static public int staticInt990;
+    static public int staticInt991;
+    static public int staticInt992;
+    static public int staticInt993;
+    static public int staticInt994;
+    static public int staticInt995;
+    static public int staticInt996;
+    static public int staticInt997;
+    static public int staticInt998;
+    static public int staticInt999;
+    static public int staticInt1000;
+    static public int staticInt1001;
+    static public int staticInt1002;
+    static public int staticInt1003;
+    static public int staticInt1004;
+    static public int staticInt1005;
+    static public int staticInt1006;
+    static public int staticInt1007;
+    static public int staticInt1008;
+    static public int staticInt1009;
+    static public int staticInt1010;
+    static public int staticInt1011;
+    static public int staticInt1012;
+    static public int staticInt1013;
+    static public int staticInt1014;
+    static public int staticInt1015;
+    static public int staticInt1016;
+    static public int staticInt1017;
+    static public int staticInt1018;
+    static public int staticInt1019;
+    static public int staticInt1020;
+    static public int staticInt1021;
+    static public int staticInt1022;
+    static public int staticInt1023;
+    static public int staticInt1024;
+    static public int staticInt1025;
+    static public int staticInt1026;
+    static public int staticInt1027;
+    static public int staticInt1028;
+    static public int staticInt1029;
+    static public int staticInt1030;
+    static public int staticInt1031;
+    static public int staticInt1032;
+    static public int staticInt1033;
+    static public int staticInt1034;
+    static public int staticInt1035;
+    static public int staticInt1036;
+    static public int staticInt1037;
+    static public int staticInt1038;
+    static public int staticInt1039;
+    static public int staticInt1040;
+    static public int staticInt1041;
+    static public int staticInt1042;
+    static public int staticInt1043;
+    static public int staticInt1044;
+    static public int staticInt1045;
+    static public int staticInt1046;
+    static public int staticInt1047;
+    static public int staticInt1048;
+    static public int staticInt1049;
+    static public int staticInt1050;
+    static public int staticInt1051;
+    static public int staticInt1052;
+    static public int staticInt1053;
+    static public int staticInt1054;
+    static public int staticInt1055;
+    static public int staticInt1056;
+    static public int staticInt1057;
+    static public int staticInt1058;
+    static public int staticInt1059;
+    static public int staticInt1060;
+    static public int staticInt1061;
+    static public int staticInt1062;
+    static public int staticInt1063;
+    static public int staticInt1064;
+    static public int staticInt1065;
+    static public int staticInt1066;
+    static public int staticInt1067;
+    static public int staticInt1068;
+    static public int staticInt1069;
+    static public int staticInt1070;
+    static public int staticInt1071;
+    static public int staticInt1072;
+    static public int staticInt1073;
+    static public int staticInt1074;
+    static public int staticInt1075;
+    static public int staticInt1076;
+    static public int staticInt1077;
+    static public int staticInt1078;
+    static public int staticInt1079;
+    static public int staticInt1080;
+    static public int staticInt1081;
+    static public int staticInt1082;
+    static public int staticInt1083;
+    static public int staticInt1084;
+    static public int staticInt1085;
+    static public int staticInt1086;
+    static public int staticInt1087;
+    static public int staticInt1088;
+    static public int staticInt1089;
+    static public int staticInt1090;
+    static public int staticInt1091;
+    static public int staticInt1092;
+    static public int staticInt1093;
+    static public int staticInt1094;
+    static public int staticInt1095;
+    static public int staticInt1096;
+    static public int staticInt1097;
+    static public int staticInt1098;
+    static public int staticInt1099;
+    static public int staticInt1100;
+    static public int staticInt1101;
+    static public int staticInt1102;
+    static public int staticInt1103;
+    static public int staticInt1104;
+    static public int staticInt1105;
+    static public int staticInt1106;
+    static public int staticInt1107;
+    static public int staticInt1108;
+    static public int staticInt1109;
+    static public int staticInt1110;
+    static public int staticInt1111;
+    static public int staticInt1112;
+    static public int staticInt1113;
+    static public int staticInt1114;
+    static public int staticInt1115;
+    static public int staticInt1116;
+    static public int staticInt1117;
+    static public int staticInt1118;
+    static public int staticInt1119;
+    static public int staticInt1120;
+    static public int staticInt1121;
+    static public int staticInt1122;
+    static public int staticInt1123;
+    static public int staticInt1124;
+    static public int staticInt1125;
+    static public int staticInt1126;
+    static public int staticInt1127;
+    static public int staticInt1128;
+    static public int staticInt1129;
+    static public int staticInt1130;
+    static public int staticInt1131;
+    static public int staticInt1132;
+    static public int staticInt1133;
+    static public int staticInt1134;
+    static public int staticInt1135;
+    static public int staticInt1136;
+    static public int staticInt1137;
+    static public int staticInt1138;
+    static public int staticInt1139;
+    static public int staticInt1140;
+    static public int staticInt1141;
+    static public int staticInt1142;
+    static public int staticInt1143;
+    static public int staticInt1144;
+    static public int staticInt1145;
+    static public int staticInt1146;
+    static public int staticInt1147;
+    static public int staticInt1148;
+    static public int staticInt1149;
+    static public int staticInt1150;
+    static public int staticInt1151;
+    static public int staticInt1152;
+    static public int staticInt1153;
+    static public int staticInt1154;
+    static public int staticInt1155;
+    static public int staticInt1156;
+    static public int staticInt1157;
+    static public int staticInt1158;
+    static public int staticInt1159;
+    static public int staticInt1160;
+    static public int staticInt1161;
+    static public int staticInt1162;
+    static public int staticInt1163;
+    static public int staticInt1164;
+    static public int staticInt1165;
+    static public int staticInt1166;
+    static public int staticInt1167;
+    static public int staticInt1168;
+    static public int staticInt1169;
+    static public int staticInt1170;
+    static public int staticInt1171;
+    static public int staticInt1172;
+    static public int staticInt1173;
+    static public int staticInt1174;
+    static public int staticInt1175;
+    static public int staticInt1176;
+    static public int staticInt1177;
+    static public int staticInt1178;
+    static public int staticInt1179;
+    static public int staticInt1180;
+    static public int staticInt1181;
+    static public int staticInt1182;
+    static public int staticInt1183;
+    static public int staticInt1184;
+    static public int staticInt1185;
+    static public int staticInt1186;
+    static public int staticInt1187;
+    static public int staticInt1188;
+    static public int staticInt1189;
+    static public int staticInt1190;
+    static public int staticInt1191;
+    static public int staticInt1192;
+    static public int staticInt1193;
+    static public int staticInt1194;
+    static public int staticInt1195;
+    static public int staticInt1196;
+    static public int staticInt1197;
+    static public int staticInt1198;
+    static public int staticInt1199;
+    static public int staticInt1200;
+    static public int staticInt1201;
+    static public int staticInt1202;
+    static public int staticInt1203;
+    static public int staticInt1204;
+    static public int staticInt1205;
+    static public int staticInt1206;
+    static public int staticInt1207;
+    static public int staticInt1208;
+    static public int staticInt1209;
+    static public int staticInt1210;
+    static public int staticInt1211;
+    static public int staticInt1212;
+    static public int staticInt1213;
+    static public int staticInt1214;
+    static public int staticInt1215;
+    static public int staticInt1216;
+    static public int staticInt1217;
+    static public int staticInt1218;
+    static public int staticInt1219;
+    static public int staticInt1220;
+    static public int staticInt1221;
+    static public int staticInt1222;
+    static public int staticInt1223;
+    static public int staticInt1224;
+    static public int staticInt1225;
+    static public int staticInt1226;
+    static public int staticInt1227;
+    static public int staticInt1228;
+    static public int staticInt1229;
+    static public int staticInt1230;
+    static public int staticInt1231;
+    static public int staticInt1232;
+    static public int staticInt1233;
+    static public int staticInt1234;
+    static public int staticInt1235;
+    static public int staticInt1236;
+    static public int staticInt1237;
+    static public int staticInt1238;
+    static public int staticInt1239;
+    static public int staticInt1240;
+    static public int staticInt1241;
+    static public int staticInt1242;
+    static public int staticInt1243;
+    static public int staticInt1244;
+    static public int staticInt1245;
+    static public int staticInt1246;
+    static public int staticInt1247;
+    static public int staticInt1248;
+    static public int staticInt1249;
+    static public int staticInt1250;
+    static public int staticInt1251;
+    static public int staticInt1252;
+    static public int staticInt1253;
+    static public int staticInt1254;
+    static public int staticInt1255;
+    static public int staticInt1256;
+    static public int staticInt1257;
+    static public int staticInt1258;
+    static public int staticInt1259;
+    static public int staticInt1260;
+    static public int staticInt1261;
+    static public int staticInt1262;
+    static public int staticInt1263;
+    static public int staticInt1264;
+    static public int staticInt1265;
+    static public int staticInt1266;
+    static public int staticInt1267;
+    static public int staticInt1268;
+    static public int staticInt1269;
+    static public int staticInt1270;
+    static public int staticInt1271;
+    static public int staticInt1272;
+    static public int staticInt1273;
+    static public int staticInt1274;
+    static public int staticInt1275;
+    static public int staticInt1276;
+    static public int staticInt1277;
+    static public int staticInt1278;
+    static public int staticInt1279;
+    static public int staticInt1280;
+    static public int staticInt1281;
+    static public int staticInt1282;
+    static public int staticInt1283;
+    static public int staticInt1284;
+    static public int staticInt1285;
+    static public int staticInt1286;
+    static public int staticInt1287;
+    static public int staticInt1288;
+    static public int staticInt1289;
+    static public int staticInt1290;
+    static public int staticInt1291;
+    static public int staticInt1292;
+    static public int staticInt1293;
+    static public int staticInt1294;
+    static public int staticInt1295;
+    static public int staticInt1296;
+    static public int staticInt1297;
+    static public int staticInt1298;
+    static public int staticInt1299;
+    static public int staticInt1300;
+    static public int staticInt1301;
+    static public int staticInt1302;
+    static public int staticInt1303;
+    static public int staticInt1304;
+    static public int staticInt1305;
+    static public int staticInt1306;
+    static public int staticInt1307;
+    static public int staticInt1308;
+    static public int staticInt1309;
+    static public int staticInt1310;
+    static public int staticInt1311;
+    static public int staticInt1312;
+    static public int staticInt1313;
+    static public int staticInt1314;
+    static public int staticInt1315;
+    static public int staticInt1316;
+    static public int staticInt1317;
+    static public int staticInt1318;
+    static public int staticInt1319;
+    static public int staticInt1320;
+    static public int staticInt1321;
+    static public int staticInt1322;
+    static public int staticInt1323;
+    static public int staticInt1324;
+    static public int staticInt1325;
+    static public int staticInt1326;
+    static public int staticInt1327;
+    static public int staticInt1328;
+    static public int staticInt1329;
+    static public int staticInt1330;
+    static public int staticInt1331;
+    static public int staticInt1332;
+    static public int staticInt1333;
+    static public int staticInt1334;
+    static public int staticInt1335;
+    static public int staticInt1336;
+    static public int staticInt1337;
+    static public int staticInt1338;
+    static public int staticInt1339;
+    static public int staticInt1340;
+    static public int staticInt1341;
+    static public int staticInt1342;
+    static public int staticInt1343;
+    static public int staticInt1344;
+    static public int staticInt1345;
+    static public int staticInt1346;
+    static public int staticInt1347;
+    static public int staticInt1348;
+    static public int staticInt1349;
+    static public int staticInt1350;
+    static public int staticInt1351;
+    static public int staticInt1352;
+    static public int staticInt1353;
+    static public int staticInt1354;
+    static public int staticInt1355;
+    static public int staticInt1356;
+    static public int staticInt1357;
+    static public int staticInt1358;
+    static public int staticInt1359;
+    static public int staticInt1360;
+    static public int staticInt1361;
+    static public int staticInt1362;
+    static public int staticInt1363;
+    static public int staticInt1364;
+    static public int staticInt1365;
+    static public int staticInt1366;
+    static public int staticInt1367;
+    static public int staticInt1368;
+    static public int staticInt1369;
+    static public int staticInt1370;
+    static public int staticInt1371;
+    static public int staticInt1372;
+    static public int staticInt1373;
+    static public int staticInt1374;
+    static public int staticInt1375;
+    static public int staticInt1376;
+    static public int staticInt1377;
+    static public int staticInt1378;
+    static public int staticInt1379;
+    static public int staticInt1380;
+    static public int staticInt1381;
+    static public int staticInt1382;
+    static public int staticInt1383;
+    static public int staticInt1384;
+    static public int staticInt1385;
+    static public int staticInt1386;
+    static public int staticInt1387;
+    static public int staticInt1388;
+    static public int staticInt1389;
+    static public int staticInt1390;
+    static public int staticInt1391;
+    static public int staticInt1392;
+    static public int staticInt1393;
+    static public int staticInt1394;
+    static public int staticInt1395;
+    static public int staticInt1396;
+    static public int staticInt1397;
+    static public int staticInt1398;
+    static public int staticInt1399;
+    static public int staticInt1400;
+    static public int staticInt1401;
+    static public int staticInt1402;
+    static public int staticInt1403;
+    static public int staticInt1404;
+    static public int staticInt1405;
+    static public int staticInt1406;
+    static public int staticInt1407;
+    static public int staticInt1408;
+    static public int staticInt1409;
+    static public int staticInt1410;
+    static public int staticInt1411;
+    static public int staticInt1412;
+    static public int staticInt1413;
+    static public int staticInt1414;
+    static public int staticInt1415;
+    static public int staticInt1416;
+    static public int staticInt1417;
+    static public int staticInt1418;
+    static public int staticInt1419;
+    static public int staticInt1420;
+    static public int staticInt1421;
+    static public int staticInt1422;
+    static public int staticInt1423;
+    static public int staticInt1424;
+    static public int staticInt1425;
+    static public int staticInt1426;
+    static public int staticInt1427;
+    static public int staticInt1428;
+    static public int staticInt1429;
+    static public int staticInt1430;
+    static public int staticInt1431;
+    static public int staticInt1432;
+    static public int staticInt1433;
+    static public int staticInt1434;
+    static public int staticInt1435;
+    static public int staticInt1436;
+    static public int staticInt1437;
+    static public int staticInt1438;
+    static public int staticInt1439;
+    static public int staticInt1440;
+    static public int staticInt1441;
+    static public int staticInt1442;
+    static public int staticInt1443;
+    static public int staticInt1444;
+    static public int staticInt1445;
+    static public int staticInt1446;
+    static public int staticInt1447;
+    static public int staticInt1448;
+    static public int staticInt1449;
+    static public int staticInt1450;
+    static public int staticInt1451;
+    static public int staticInt1452;
+    static public int staticInt1453;
+    static public int staticInt1454;
+    static public int staticInt1455;
+    static public int staticInt1456;
+    static public int staticInt1457;
+    static public int staticInt1458;
+    static public int staticInt1459;
+    static public int staticInt1460;
+    static public int staticInt1461;
+    static public int staticInt1462;
+    static public int staticInt1463;
+    static public int staticInt1464;
+    static public int staticInt1465;
+    static public int staticInt1466;
+    static public int staticInt1467;
+    static public int staticInt1468;
+    static public int staticInt1469;
+    static public int staticInt1470;
+    static public int staticInt1471;
+    static public int staticInt1472;
+    static public int staticInt1473;
+    static public int staticInt1474;
+    static public int staticInt1475;
+    static public int staticInt1476;
+    static public int staticInt1477;
+    static public int staticInt1478;
+    static public int staticInt1479;
+    static public int staticInt1480;
+    static public int staticInt1481;
+    static public int staticInt1482;
+    static public int staticInt1483;
+    static public int staticInt1484;
+    static public int staticInt1485;
+    static public int staticInt1486;
+    static public int staticInt1487;
+    static public int staticInt1488;
+    static public int staticInt1489;
+    static public int staticInt1490;
+    static public int staticInt1491;
+    static public int staticInt1492;
+    static public int staticInt1493;
+    static public int staticInt1494;
+    static public int staticInt1495;
+    static public int staticInt1496;
+    static public int staticInt1497;
+    static public int staticInt1498;
+    static public int staticInt1499;
+    static public int staticInt1500;
+    static public int staticInt1501;
+    static public int staticInt1502;
+    static public int staticInt1503;
+    static public int staticInt1504;
+    static public int staticInt1505;
+    static public int staticInt1506;
+    static public int staticInt1507;
+    static public int staticInt1508;
+    static public int staticInt1509;
+    static public int staticInt1510;
+    static public int staticInt1511;
+    static public int staticInt1512;
+    static public int staticInt1513;
+    static public int staticInt1514;
+    static public int staticInt1515;
+    static public int staticInt1516;
+    static public int staticInt1517;
+    static public int staticInt1518;
+    static public int staticInt1519;
+    static public int staticInt1520;
+    static public int staticInt1521;
+    static public int staticInt1522;
+    static public int staticInt1523;
+    static public int staticInt1524;
+    static public int staticInt1525;
+    static public int staticInt1526;
+    static public int staticInt1527;
+    static public int staticInt1528;
+    static public int staticInt1529;
+    static public int staticInt1530;
+    static public int staticInt1531;
+    static public int staticInt1532;
+    static public int staticInt1533;
+    static public int staticInt1534;
+    static public int staticInt1535;
+    static public int staticInt1536;
+    static public int staticInt1537;
+    static public int staticInt1538;
+    static public int staticInt1539;
+    static public int staticInt1540;
+    static public int staticInt1541;
+    static public int staticInt1542;
+    static public int staticInt1543;
+    static public int staticInt1544;
+    static public int staticInt1545;
+    static public int staticInt1546;
+    static public int staticInt1547;
+    static public int staticInt1548;
+    static public int staticInt1549;
+    static public int staticInt1550;
+    static public int staticInt1551;
+    static public int staticInt1552;
+    static public int staticInt1553;
+    static public int staticInt1554;
+    static public int staticInt1555;
+    static public int staticInt1556;
+    static public int staticInt1557;
+    static public int staticInt1558;
+    static public int staticInt1559;
+    static public int staticInt1560;
+    static public int staticInt1561;
+    static public int staticInt1562;
+    static public int staticInt1563;
+    static public int staticInt1564;
+    static public int staticInt1565;
+    static public int staticInt1566;
+    static public int staticInt1567;
+    static public int staticInt1568;
+    static public int staticInt1569;
+    static public int staticInt1570;
+    static public int staticInt1571;
+    static public int staticInt1572;
+    static public int staticInt1573;
+    static public int staticInt1574;
+    static public int staticInt1575;
+    static public int staticInt1576;
+    static public int staticInt1577;
+    static public int staticInt1578;
+    static public int staticInt1579;
+    static public int staticInt1580;
+    static public int staticInt1581;
+    static public int staticInt1582;
+    static public int staticInt1583;
+    static public int staticInt1584;
+    static public int staticInt1585;
+    static public int staticInt1586;
+    static public int staticInt1587;
+    static public int staticInt1588;
+    static public int staticInt1589;
+    static public int staticInt1590;
+    static public int staticInt1591;
+    static public int staticInt1592;
+    static public int staticInt1593;
+    static public int staticInt1594;
+    static public int staticInt1595;
+    static public int staticInt1596;
+    static public int staticInt1597;
+    static public int staticInt1598;
+    static public int staticInt1599;
+    static public int staticInt1600;
+    static public int staticInt1601;
+    static public int staticInt1602;
+    static public int staticInt1603;
+    static public int staticInt1604;
+    static public int staticInt1605;
+    static public int staticInt1606;
+    static public int staticInt1607;
+    static public int staticInt1608;
+    static public int staticInt1609;
+    static public int staticInt1610;
+    static public int staticInt1611;
+    static public int staticInt1612;
+    static public int staticInt1613;
+    static public int staticInt1614;
+    static public int staticInt1615;
+    static public int staticInt1616;
+    static public int staticInt1617;
+    static public int staticInt1618;
+    static public int staticInt1619;
+    static public int staticInt1620;
+    static public int staticInt1621;
+    static public int staticInt1622;
+    static public int staticInt1623;
+    static public int staticInt1624;
+    static public int staticInt1625;
+    static public int staticInt1626;
+    static public int staticInt1627;
+    static public int staticInt1628;
+    static public int staticInt1629;
+    static public int staticInt1630;
+    static public int staticInt1631;
+    static public int staticInt1632;
+    static public int staticInt1633;
+    static public int staticInt1634;
+    static public int staticInt1635;
+    static public int staticInt1636;
+    static public int staticInt1637;
+    static public int staticInt1638;
+    static public int staticInt1639;
+    static public int staticInt1640;
+    static public int staticInt1641;
+    static public int staticInt1642;
+    static public int staticInt1643;
+    static public int staticInt1644;
+    static public int staticInt1645;
+    static public int staticInt1646;
+    static public int staticInt1647;
+    static public int staticInt1648;
+    static public int staticInt1649;
+    static public int staticInt1650;
+    static public int staticInt1651;
+    static public int staticInt1652;
+    static public int staticInt1653;
+    static public int staticInt1654;
+    static public int staticInt1655;
+    static public int staticInt1656;
+    static public int staticInt1657;
+    static public int staticInt1658;
+    static public int staticInt1659;
+    static public int staticInt1660;
+    static public int staticInt1661;
+    static public int staticInt1662;
+    static public int staticInt1663;
+    static public int staticInt1664;
+    static public int staticInt1665;
+    static public int staticInt1666;
+    static public int staticInt1667;
+    static public int staticInt1668;
+    static public int staticInt1669;
+    static public int staticInt1670;
+    static public int staticInt1671;
+    static public int staticInt1672;
+    static public int staticInt1673;
+    static public int staticInt1674;
+    static public int staticInt1675;
+    static public int staticInt1676;
+    static public int staticInt1677;
+    static public int staticInt1678;
+    static public int staticInt1679;
+    static public int staticInt1680;
+    static public int staticInt1681;
+    static public int staticInt1682;
+    static public int staticInt1683;
+    static public int staticInt1684;
+    static public int staticInt1685;
+    static public int staticInt1686;
+    static public int staticInt1687;
+    static public int staticInt1688;
+    static public int staticInt1689;
+    static public int staticInt1690;
+    static public int staticInt1691;
+    static public int staticInt1692;
+    static public int staticInt1693;
+    static public int staticInt1694;
+    static public int staticInt1695;
+    static public int staticInt1696;
+    static public int staticInt1697;
+    static public int staticInt1698;
+    static public int staticInt1699;
+    static public int staticInt1700;
+    static public int staticInt1701;
+    static public int staticInt1702;
+    static public int staticInt1703;
+    static public int staticInt1704;
+    static public int staticInt1705;
+    static public int staticInt1706;
+    static public int staticInt1707;
+    static public int staticInt1708;
+    static public int staticInt1709;
+    static public int staticInt1710;
+    static public int staticInt1711;
+    static public int staticInt1712;
+    static public int staticInt1713;
+    static public int staticInt1714;
+    static public int staticInt1715;
+    static public int staticInt1716;
+    static public int staticInt1717;
+    static public int staticInt1718;
+    static public int staticInt1719;
+    static public int staticInt1720;
+    static public int staticInt1721;
+    static public int staticInt1722;
+    static public int staticInt1723;
+    static public int staticInt1724;
+    static public int staticInt1725;
+    static public int staticInt1726;
+    static public int staticInt1727;
+    static public int staticInt1728;
+    static public int staticInt1729;
+    static public int staticInt1730;
+    static public int staticInt1731;
+    static public int staticInt1732;
+    static public int staticInt1733;
+    static public int staticInt1734;
+    static public int staticInt1735;
+    static public int staticInt1736;
+    static public int staticInt1737;
+    static public int staticInt1738;
+    static public int staticInt1739;
+    static public int staticInt1740;
+    static public int staticInt1741;
+    static public int staticInt1742;
+    static public int staticInt1743;
+    static public int staticInt1744;
+    static public int staticInt1745;
+    static public int staticInt1746;
+    static public int staticInt1747;
+    static public int staticInt1748;
+    static public int staticInt1749;
+    static public int staticInt1750;
+    static public int staticInt1751;
+    static public int staticInt1752;
+    static public int staticInt1753;
+    static public int staticInt1754;
+    static public int staticInt1755;
+    static public int staticInt1756;
+    static public int staticInt1757;
+    static public int staticInt1758;
+    static public int staticInt1759;
+    static public int staticInt1760;
+    static public int staticInt1761;
+    static public int staticInt1762;
+    static public int staticInt1763;
+    static public int staticInt1764;
+    static public int staticInt1765;
+    static public int staticInt1766;
+    static public int staticInt1767;
+    static public int staticInt1768;
+    static public int staticInt1769;
+    static public int staticInt1770;
+    static public int staticInt1771;
+    static public int staticInt1772;
+    static public int staticInt1773;
+    static public int staticInt1774;
+    static public int staticInt1775;
+    static public int staticInt1776;
+    static public int staticInt1777;
+    static public int staticInt1778;
+    static public int staticInt1779;
+    static public int staticInt1780;
+    static public int staticInt1781;
+    static public int staticInt1782;
+    static public int staticInt1783;
+    static public int staticInt1784;
+    static public int staticInt1785;
+    static public int staticInt1786;
+    static public int staticInt1787;
+    static public int staticInt1788;
+    static public int staticInt1789;
+    static public int staticInt1790;
+    static public int staticInt1791;
+    static public int staticInt1792;
+    static public int staticInt1793;
+    static public int staticInt1794;
+    static public int staticInt1795;
+    static public int staticInt1796;
+    static public int staticInt1797;
+    static public int staticInt1798;
+    static public int staticInt1799;
+    static public int staticInt1800;
+    static public int staticInt1801;
+    static public int staticInt1802;
+    static public int staticInt1803;
+    static public int staticInt1804;
+    static public int staticInt1805;
+    static public int staticInt1806;
+    static public int staticInt1807;
+    static public int staticInt1808;
+    static public int staticInt1809;
+    static public int staticInt1810;
+    static public int staticInt1811;
+    static public int staticInt1812;
+    static public int staticInt1813;
+    static public int staticInt1814;
+    static public int staticInt1815;
+    static public int staticInt1816;
+    static public int staticInt1817;
+    static public int staticInt1818;
+    static public int staticInt1819;
+    static public int staticInt1820;
+    static public int staticInt1821;
+    static public int staticInt1822;
+    static public int staticInt1823;
+    static public int staticInt1824;
+    static public int staticInt1825;
+    static public int staticInt1826;
+    static public int staticInt1827;
+    static public int staticInt1828;
+    static public int staticInt1829;
+    static public int staticInt1830;
+    static public int staticInt1831;
+    static public int staticInt1832;
+    static public int staticInt1833;
+    static public int staticInt1834;
+    static public int staticInt1835;
+    static public int staticInt1836;
+    static public int staticInt1837;
+    static public int staticInt1838;
+    static public int staticInt1839;
+    static public int staticInt1840;
+    static public int staticInt1841;
+    static public int staticInt1842;
+    static public int staticInt1843;
+    static public int staticInt1844;
+    static public int staticInt1845;
+    static public int staticInt1846;
+    static public int staticInt1847;
+    static public int staticInt1848;
+    static public int staticInt1849;
+    static public int staticInt1850;
+    static public int staticInt1851;
+    static public int staticInt1852;
+    static public int staticInt1853;
+    static public int staticInt1854;
+    static public int staticInt1855;
+    static public int staticInt1856;
+    static public int staticInt1857;
+    static public int staticInt1858;
+    static public int staticInt1859;
+    static public int staticInt1860;
+    static public int staticInt1861;
+    static public int staticInt1862;
+    static public int staticInt1863;
+    static public int staticInt1864;
+    static public int staticInt1865;
+    static public int staticInt1866;
+    static public int staticInt1867;
+    static public int staticInt1868;
+    static public int staticInt1869;
+    static public int staticInt1870;
+    static public int staticInt1871;
+    static public int staticInt1872;
+    static public int staticInt1873;
+    static public int staticInt1874;
+    static public int staticInt1875;
+    static public int staticInt1876;
+    static public int staticInt1877;
+    static public int staticInt1878;
+    static public int staticInt1879;
+    static public int staticInt1880;
+    static public int staticInt1881;
+    static public int staticInt1882;
+    static public int staticInt1883;
+    static public int staticInt1884;
+    static public int staticInt1885;
+    static public int staticInt1886;
+    static public int staticInt1887;
+    static public int staticInt1888;
+    static public int staticInt1889;
+    static public int staticInt1890;
+    static public int staticInt1891;
+    static public int staticInt1892;
+    static public int staticInt1893;
+    static public int staticInt1894;
+    static public int staticInt1895;
+    static public int staticInt1896;
+    static public int staticInt1897;
+    static public int staticInt1898;
+    static public int staticInt1899;
+    static public int staticInt1900;
+    static public int staticInt1901;
+    static public int staticInt1902;
+    static public int staticInt1903;
+    static public int staticInt1904;
+    static public int staticInt1905;
+    static public int staticInt1906;
+    static public int staticInt1907;
+    static public int staticInt1908;
+    static public int staticInt1909;
+    static public int staticInt1910;
+    static public int staticInt1911;
+    static public int staticInt1912;
+    static public int staticInt1913;
+    static public int staticInt1914;
+    static public int staticInt1915;
+    static public int staticInt1916;
+    static public int staticInt1917;
+    static public int staticInt1918;
+    static public int staticInt1919;
+    static public int staticInt1920;
+    static public int staticInt1921;
+    static public int staticInt1922;
+    static public int staticInt1923;
+    static public int staticInt1924;
+    static public int staticInt1925;
+    static public int staticInt1926;
+    static public int staticInt1927;
+    static public int staticInt1928;
+    static public int staticInt1929;
+    static public int staticInt1930;
+    static public int staticInt1931;
+    static public int staticInt1932;
+    static public int staticInt1933;
+    static public int staticInt1934;
+    static public int staticInt1935;
+    static public int staticInt1936;
+    static public int staticInt1937;
+    static public int staticInt1938;
+    static public int staticInt1939;
+    static public int staticInt1940;
+    static public int staticInt1941;
+    static public int staticInt1942;
+    static public int staticInt1943;
+    static public int staticInt1944;
+    static public int staticInt1945;
+    static public int staticInt1946;
+    static public int staticInt1947;
+    static public int staticInt1948;
+    static public int staticInt1949;
+    static public int staticInt1950;
+    static public int staticInt1951;
+    static public int staticInt1952;
+    static public int staticInt1953;
+    static public int staticInt1954;
+    static public int staticInt1955;
+    static public int staticInt1956;
+    static public int staticInt1957;
+    static public int staticInt1958;
+    static public int staticInt1959;
+    static public int staticInt1960;
+    static public int staticInt1961;
+    static public int staticInt1962;
+    static public int staticInt1963;
+    static public int staticInt1964;
+    static public int staticInt1965;
+    static public int staticInt1966;
+    static public int staticInt1967;
+    static public int staticInt1968;
+    static public int staticInt1969;
+    static public int staticInt1970;
+    static public int staticInt1971;
+    static public int staticInt1972;
+    static public int staticInt1973;
+    static public int staticInt1974;
+    static public int staticInt1975;
+    static public int staticInt1976;
+    static public int staticInt1977;
+    static public int staticInt1978;
+    static public int staticInt1979;
+    static public int staticInt1980;
+    static public int staticInt1981;
+    static public int staticInt1982;
+    static public int staticInt1983;
+    static public int staticInt1984;
+    static public int staticInt1985;
+    static public int staticInt1986;
+    static public int staticInt1987;
+    static public int staticInt1988;
+    static public int staticInt1989;
+    static public int staticInt1990;
+    static public int staticInt1991;
+    static public int staticInt1992;
+    static public int staticInt1993;
+    static public int staticInt1994;
+    static public int staticInt1995;
+    static public int staticInt1996;
+    static public int staticInt1997;
+    static public int staticInt1998;
+    static public int staticInt1999;
+    static public int staticInt2000;
+    static public int staticInt2001;
+    static public int staticInt2002;
+    static public int staticInt2003;
+    static public int staticInt2004;
+    static public int staticInt2005;
+    static public int staticInt2006;
+    static public int staticInt2007;
+    static public int staticInt2008;
+    static public int staticInt2009;
+    static public int staticInt2010;
+    static public int staticInt2011;
+    static public int staticInt2012;
+    static public int staticInt2013;
+    static public int staticInt2014;
+    static public int staticInt2015;
+    static public int staticInt2016;
+    static public int staticInt2017;
+    static public int staticInt2018;
+    static public int staticInt2019;
+    static public int staticInt2020;
+    static public int staticInt2021;
+    static public int staticInt2022;
+    static public int staticInt2023;
+    static public int staticInt2024;
+    static public int staticInt2025;
+    static public int staticInt2026;
+    static public int staticInt2027;
+    static public int staticInt2028;
+    static public int staticInt2029;
+    static public int staticInt2030;
+    static public int staticInt2031;
+    static public int staticInt2032;
+    static public int staticInt2033;
+    static public int staticInt2034;
+    static public int staticInt2035;
+    static public int staticInt2036;
+    static public int staticInt2037;
+    static public int staticInt2038;
+    static public int staticInt2039;
+    static public int staticInt2040;
+    static public int staticInt2041;
+    static public int staticInt2042;
+    static public int staticInt2043;
+    static public int staticInt2044;
+    static public int staticInt2045;
+    static public int staticInt2046;
+    static public int staticInt2047;
+    static public int staticInt2048;
+    static public int staticInt2049;
+    static public int staticInt2050;
+    static public int staticInt2051;
+    static public int staticInt2052;
+    static public int staticInt2053;
+    static public int staticInt2054;
+    static public int staticInt2055;
+    static public int staticInt2056;
+    static public int staticInt2057;
+    static public int staticInt2058;
+    static public int staticInt2059;
+    static public int staticInt2060;
+    static public int staticInt2061;
+    static public int staticInt2062;
+    static public int staticInt2063;
+    static public int staticInt2064;
+    static public int staticInt2065;
+    static public int staticInt2066;
+    static public int staticInt2067;
+    static public int staticInt2068;
+    static public int staticInt2069;
+    static public int staticInt2070;
+    static public int staticInt2071;
+    static public int staticInt2072;
+    static public int staticInt2073;
+    static public int staticInt2074;
+    static public int staticInt2075;
+    static public int staticInt2076;
+    static public int staticInt2077;
+    static public int staticInt2078;
+    static public int staticInt2079;
+    static public int staticInt2080;
+    static public int staticInt2081;
+    static public int staticInt2082;
+    static public int staticInt2083;
+    static public int staticInt2084;
+    static public int staticInt2085;
+    static public int staticInt2086;
+    static public int staticInt2087;
+    static public int staticInt2088;
+    static public int staticInt2089;
+    static public int staticInt2090;
+    static public int staticInt2091;
+    static public int staticInt2092;
+    static public int staticInt2093;
+    static public int staticInt2094;
+    static public int staticInt2095;
+    static public int staticInt2096;
+    static public int staticInt2097;
+    static public int staticInt2098;
+    static public int staticInt2099;
+    static public int staticInt2100;
+    static public int staticInt2101;
+    static public int staticInt2102;
+    static public int staticInt2103;
+    static public int staticInt2104;
+    static public int staticInt2105;
+    static public int staticInt2106;
+    static public int staticInt2107;
+    static public int staticInt2108;
+    static public int staticInt2109;
+    static public int staticInt2110;
+    static public int staticInt2111;
+    static public int staticInt2112;
+    static public int staticInt2113;
+    static public int staticInt2114;
+    static public int staticInt2115;
+    static public int staticInt2116;
+    static public int staticInt2117;
+    static public int staticInt2118;
+    static public int staticInt2119;
+    static public int staticInt2120;
+    static public int staticInt2121;
+    static public int staticInt2122;
+    static public int staticInt2123;
+    static public int staticInt2124;
+    static public int staticInt2125;
+    static public int staticInt2126;
+    static public int staticInt2127;
+    static public int staticInt2128;
+    static public int staticInt2129;
+    static public int staticInt2130;
+    static public int staticInt2131;
+    static public int staticInt2132;
+    static public int staticInt2133;
+    static public int staticInt2134;
+    static public int staticInt2135;
+    static public int staticInt2136;
+    static public int staticInt2137;
+    static public int staticInt2138;
+    static public int staticInt2139;
+    static public int staticInt2140;
+    static public int staticInt2141;
+    static public int staticInt2142;
+    static public int staticInt2143;
+    static public int staticInt2144;
+    static public int staticInt2145;
+    static public int staticInt2146;
+    static public int staticInt2147;
+    static public int staticInt2148;
+    static public int staticInt2149;
+    static public int staticInt2150;
+    static public int staticInt2151;
+    static public int staticInt2152;
+    static public int staticInt2153;
+    static public int staticInt2154;
+    static public int staticInt2155;
+    static public int staticInt2156;
+    static public int staticInt2157;
+    static public int staticInt2158;
+    static public int staticInt2159;
+    static public int staticInt2160;
+    static public int staticInt2161;
+    static public int staticInt2162;
+    static public int staticInt2163;
+    static public int staticInt2164;
+    static public int staticInt2165;
+    static public int staticInt2166;
+    static public int staticInt2167;
+    static public int staticInt2168;
+    static public int staticInt2169;
+    static public int staticInt2170;
+    static public int staticInt2171;
+    static public int staticInt2172;
+    static public int staticInt2173;
+    static public int staticInt2174;
+    static public int staticInt2175;
+    static public int staticInt2176;
+    static public int staticInt2177;
+    static public int staticInt2178;
+    static public int staticInt2179;
+    static public int staticInt2180;
+    static public int staticInt2181;
+    static public int staticInt2182;
+    static public int staticInt2183;
+    static public int staticInt2184;
+    static public int staticInt2185;
+    static public int staticInt2186;
+    static public int staticInt2187;
+    static public int staticInt2188;
+    static public int staticInt2189;
+    static public int staticInt2190;
+    static public int staticInt2191;
+    static public int staticInt2192;
+    static public int staticInt2193;
+    static public int staticInt2194;
+    static public int staticInt2195;
+    static public int staticInt2196;
+    static public int staticInt2197;
+    static public int staticInt2198;
+    static public int staticInt2199;
+    static public int staticInt2200;
+    static public int staticInt2201;
+    static public int staticInt2202;
+    static public int staticInt2203;
+    static public int staticInt2204;
+    static public int staticInt2205;
+    static public int staticInt2206;
+    static public int staticInt2207;
+    static public int staticInt2208;
+    static public int staticInt2209;
+    static public int staticInt2210;
+    static public int staticInt2211;
+    static public int staticInt2212;
+    static public int staticInt2213;
+    static public int staticInt2214;
+    static public int staticInt2215;
+    static public int staticInt2216;
+    static public int staticInt2217;
+    static public int staticInt2218;
+    static public int staticInt2219;
+    static public int staticInt2220;
+    static public int staticInt2221;
+    static public int staticInt2222;
+    static public int staticInt2223;
+    static public int staticInt2224;
+    static public int staticInt2225;
+    static public int staticInt2226;
+    static public int staticInt2227;
+    static public int staticInt2228;
+    static public int staticInt2229;
+    static public int staticInt2230;
+    static public int staticInt2231;
+    static public int staticInt2232;
+    static public int staticInt2233;
+    static public int staticInt2234;
+    static public int staticInt2235;
+    static public int staticInt2236;
+    static public int staticInt2237;
+    static public int staticInt2238;
+    static public int staticInt2239;
+    static public int staticInt2240;
+    static public int staticInt2241;
+    static public int staticInt2242;
+    static public int staticInt2243;
+    static public int staticInt2244;
+    static public int staticInt2245;
+    static public int staticInt2246;
+    static public int staticInt2247;
+    static public int staticInt2248;
+    static public int staticInt2249;
+    static public int staticInt2250;
+    static public int staticInt2251;
+    static public int staticInt2252;
+    static public int staticInt2253;
+    static public int staticInt2254;
+    static public int staticInt2255;
+    static public int staticInt2256;
+    static public int staticInt2257;
+    static public int staticInt2258;
+    static public int staticInt2259;
+    static public int staticInt2260;
+    static public int staticInt2261;
+    static public int staticInt2262;
+    static public int staticInt2263;
+    static public int staticInt2264;
+    static public int staticInt2265;
+    static public int staticInt2266;
+    static public int staticInt2267;
+    static public int staticInt2268;
+    static public int staticInt2269;
+    static public int staticInt2270;
+    static public int staticInt2271;
+    static public int staticInt2272;
+    static public int staticInt2273;
+    static public int staticInt2274;
+    static public int staticInt2275;
+    static public int staticInt2276;
+    static public int staticInt2277;
+    static public int staticInt2278;
+    static public int staticInt2279;
+    static public int staticInt2280;
+    static public int staticInt2281;
+    static public int staticInt2282;
+    static public int staticInt2283;
+    static public int staticInt2284;
+    static public int staticInt2285;
+    static public int staticInt2286;
+    static public int staticInt2287;
+    static public int staticInt2288;
+    static public int staticInt2289;
+    static public int staticInt2290;
+    static public int staticInt2291;
+    static public int staticInt2292;
+    static public int staticInt2293;
+    static public int staticInt2294;
+    static public int staticInt2295;
+    static public int staticInt2296;
+    static public int staticInt2297;
+    static public int staticInt2298;
+    static public int staticInt2299;
+    static public int staticInt2300;
+    static public int staticInt2301;
+    static public int staticInt2302;
+    static public int staticInt2303;
+    static public int staticInt2304;
+    static public int staticInt2305;
+    static public int staticInt2306;
+    static public int staticInt2307;
+    static public int staticInt2308;
+    static public int staticInt2309;
+    static public int staticInt2310;
+    static public int staticInt2311;
+    static public int staticInt2312;
+    static public int staticInt2313;
+    static public int staticInt2314;
+    static public int staticInt2315;
+    static public int staticInt2316;
+    static public int staticInt2317;
+    static public int staticInt2318;
+    static public int staticInt2319;
+    static public int staticInt2320;
+    static public int staticInt2321;
+    static public int staticInt2322;
+    static public int staticInt2323;
+    static public int staticInt2324;
+    static public int staticInt2325;
+    static public int staticInt2326;
+    static public int staticInt2327;
+    static public int staticInt2328;
+    static public int staticInt2329;
+    static public int staticInt2330;
+    static public int staticInt2331;
+    static public int staticInt2332;
+    static public int staticInt2333;
+    static public int staticInt2334;
+    static public int staticInt2335;
+    static public int staticInt2336;
+    static public int staticInt2337;
+    static public int staticInt2338;
+    static public int staticInt2339;
+    static public int staticInt2340;
+    static public int staticInt2341;
+    static public int staticInt2342;
+    static public int staticInt2343;
+    static public int staticInt2344;
+    static public int staticInt2345;
+    static public int staticInt2346;
+    static public int staticInt2347;
+    static public int staticInt2348;
+    static public int staticInt2349;
+    static public int staticInt2350;
+    static public int staticInt2351;
+    static public int staticInt2352;
+    static public int staticInt2353;
+    static public int staticInt2354;
+    static public int staticInt2355;
+    static public int staticInt2356;
+    static public int staticInt2357;
+    static public int staticInt2358;
+    static public int staticInt2359;
+    static public int staticInt2360;
+    static public int staticInt2361;
+    static public int staticInt2362;
+    static public int staticInt2363;
+    static public int staticInt2364;
+    static public int staticInt2365;
+    static public int staticInt2366;
+    static public int staticInt2367;
+    static public int staticInt2368;
+    static public int staticInt2369;
+    static public int staticInt2370;
+    static public int staticInt2371;
+    static public int staticInt2372;
+    static public int staticInt2373;
+    static public int staticInt2374;
+    static public int staticInt2375;
+    static public int staticInt2376;
+    static public int staticInt2377;
+    static public int staticInt2378;
+    static public int staticInt2379;
+    static public int staticInt2380;
+    static public int staticInt2381;
+    static public int staticInt2382;
+    static public int staticInt2383;
+    static public int staticInt2384;
+    static public int staticInt2385;
+    static public int staticInt2386;
+    static public int staticInt2387;
+    static public int staticInt2388;
+    static public int staticInt2389;
+    static public int staticInt2390;
+    static public int staticInt2391;
+    static public int staticInt2392;
+    static public int staticInt2393;
+    static public int staticInt2394;
+    static public int staticInt2395;
+    static public int staticInt2396;
+    static public int staticInt2397;
+    static public int staticInt2398;
+    static public int staticInt2399;
+    static public int staticInt2400;
+    static public int staticInt2401;
+    static public int staticInt2402;
+    static public int staticInt2403;
+    static public int staticInt2404;
+    static public int staticInt2405;
+    static public int staticInt2406;
+    static public int staticInt2407;
+    static public int staticInt2408;
+    static public int staticInt2409;
+    static public int staticInt2410;
+    static public int staticInt2411;
+    static public int staticInt2412;
+    static public int staticInt2413;
+    static public int staticInt2414;
+    static public int staticInt2415;
+    static public int staticInt2416;
+    static public int staticInt2417;
+    static public int staticInt2418;
+    static public int staticInt2419;
+    static public int staticInt2420;
+    static public int staticInt2421;
+    static public int staticInt2422;
+    static public int staticInt2423;
+    static public int staticInt2424;
+    static public int staticInt2425;
+    static public int staticInt2426;
+    static public int staticInt2427;
+    static public int staticInt2428;
+    static public int staticInt2429;
+    static public int staticInt2430;
+    static public int staticInt2431;
+    static public int staticInt2432;
+    static public int staticInt2433;
+    static public int staticInt2434;
+    static public int staticInt2435;
+    static public int staticInt2436;
+    static public int staticInt2437;
+    static public int staticInt2438;
+    static public int staticInt2439;
+    static public int staticInt2440;
+    static public int staticInt2441;
+    static public int staticInt2442;
+    static public int staticInt2443;
+    static public int staticInt2444;
+    static public int staticInt2445;
+    static public int staticInt2446;
+    static public int staticInt2447;
+    static public int staticInt2448;
+    static public int staticInt2449;
+    static public int staticInt2450;
+    static public int staticInt2451;
+    static public int staticInt2452;
+    static public int staticInt2453;
+    static public int staticInt2454;
+    static public int staticInt2455;
+    static public int staticInt2456;
+    static public int staticInt2457;
+    static public int staticInt2458;
+    static public int staticInt2459;
+    static public int staticInt2460;
+    static public int staticInt2461;
+    static public int staticInt2462;
+    static public int staticInt2463;
+    static public int staticInt2464;
+    static public int staticInt2465;
+    static public int staticInt2466;
+    static public int staticInt2467;
+    static public int staticInt2468;
+    static public int staticInt2469;
+    static public int staticInt2470;
+    static public int staticInt2471;
+    static public int staticInt2472;
+    static public int staticInt2473;
+    static public int staticInt2474;
+    static public int staticInt2475;
+    static public int staticInt2476;
+    static public int staticInt2477;
+    static public int staticInt2478;
+    static public int staticInt2479;
+    static public int staticInt2480;
+    static public int staticInt2481;
+    static public int staticInt2482;
+    static public int staticInt2483;
+    static public int staticInt2484;
+    static public int staticInt2485;
+    static public int staticInt2486;
+    static public int staticInt2487;
+    static public int staticInt2488;
+    static public int staticInt2489;
+    static public int staticInt2490;
+    static public int staticInt2491;
+    static public int staticInt2492;
+    static public int staticInt2493;
+    static public int staticInt2494;
+    static public int staticInt2495;
+    static public int staticInt2496;
+    static public int staticInt2497;
+    static public int staticInt2498;
+    static public int staticInt2499;
+    static public int staticInt2500;
+    static public int staticInt2501;
+    static public int staticInt2502;
+    static public int staticInt2503;
+    static public int staticInt2504;
+    static public int staticInt2505;
+    static public int staticInt2506;
+    static public int staticInt2507;
+    static public int staticInt2508;
+    static public int staticInt2509;
+    static public int staticInt2510;
+    static public int staticInt2511;
+    static public int staticInt2512;
+    static public int staticInt2513;
+    static public int staticInt2514;
+    static public int staticInt2515;
+    static public int staticInt2516;
+    static public int staticInt2517;
+    static public int staticInt2518;
+    static public int staticInt2519;
+    static public int staticInt2520;
+    static public int staticInt2521;
+    static public int staticInt2522;
+    static public int staticInt2523;
+    static public int staticInt2524;
+    static public int staticInt2525;
+    static public int staticInt2526;
+    static public int staticInt2527;
+    static public int staticInt2528;
+    static public int staticInt2529;
+    static public int staticInt2530;
+    static public int staticInt2531;
+    static public int staticInt2532;
+    static public int staticInt2533;
+    static public int staticInt2534;
+    static public int staticInt2535;
+    static public int staticInt2536;
+    static public int staticInt2537;
+    static public int staticInt2538;
+    static public int staticInt2539;
+    static public int staticInt2540;
+    static public int staticInt2541;
+    static public int staticInt2542;
+    static public int staticInt2543;
+    static public int staticInt2544;
+    static public int staticInt2545;
+    static public int staticInt2546;
+    static public int staticInt2547;
+    static public int staticInt2548;
+    static public int staticInt2549;
+    static public int staticInt2550;
+    static public int staticInt2551;
+    static public int staticInt2552;
+    static public int staticInt2553;
+    static public int staticInt2554;
+    static public int staticInt2555;
+    static public int staticInt2556;
+    static public int staticInt2557;
+    static public int staticInt2558;
+    static public int staticInt2559;
+    static public int staticInt2560;
+    static public int staticInt2561;
+    static public int staticInt2562;
+    static public int staticInt2563;
+    static public int staticInt2564;
+    static public int staticInt2565;
+    static public int staticInt2566;
+    static public int staticInt2567;
+    static public int staticInt2568;
+    static public int staticInt2569;
+    static public int staticInt2570;
+    static public int staticInt2571;
+    static public int staticInt2572;
+    static public int staticInt2573;
+    static public int staticInt2574;
+    static public int staticInt2575;
+    static public int staticInt2576;
+    static public int staticInt2577;
+    static public int staticInt2578;
+    static public int staticInt2579;
+    static public int staticInt2580;
+    static public int staticInt2581;
+    static public int staticInt2582;
+    static public int staticInt2583;
+    static public int staticInt2584;
+    static public int staticInt2585;
+    static public int staticInt2586;
+    static public int staticInt2587;
+    static public int staticInt2588;
+    static public int staticInt2589;
+    static public int staticInt2590;
+    static public int staticInt2591;
+    static public int staticInt2592;
+    static public int staticInt2593;
+    static public int staticInt2594;
+    static public int staticInt2595;
+    static public int staticInt2596;
+    static public int staticInt2597;
+    static public int staticInt2598;
+    static public int staticInt2599;
+    static public int staticInt2600;
+    static public int staticInt2601;
+    static public int staticInt2602;
+    static public int staticInt2603;
+    static public int staticInt2604;
+    static public int staticInt2605;
+    static public int staticInt2606;
+    static public int staticInt2607;
+    static public int staticInt2608;
+    static public int staticInt2609;
+    static public int staticInt2610;
+    static public int staticInt2611;
+    static public int staticInt2612;
+    static public int staticInt2613;
+    static public int staticInt2614;
+    static public int staticInt2615;
+    static public int staticInt2616;
+    static public int staticInt2617;
+    static public int staticInt2618;
+    static public int staticInt2619;
+    static public int staticInt2620;
+    static public int staticInt2621;
+    static public int staticInt2622;
+    static public int staticInt2623;
+    static public int staticInt2624;
+    static public int staticInt2625;
+    static public int staticInt2626;
+    static public int staticInt2627;
+    static public int staticInt2628;
+    static public int staticInt2629;
+    static public int staticInt2630;
+    static public int staticInt2631;
+    static public int staticInt2632;
+    static public int staticInt2633;
+    static public int staticInt2634;
+    static public int staticInt2635;
+    static public int staticInt2636;
+    static public int staticInt2637;
+    static public int staticInt2638;
+    static public int staticInt2639;
+    static public int staticInt2640;
+    static public int staticInt2641;
+    static public int staticInt2642;
+    static public int staticInt2643;
+    static public int staticInt2644;
+    static public int staticInt2645;
+    static public int staticInt2646;
+    static public int staticInt2647;
+    static public int staticInt2648;
+    static public int staticInt2649;
+    static public int staticInt2650;
+    static public int staticInt2651;
+    static public int staticInt2652;
+    static public int staticInt2653;
+    static public int staticInt2654;
+    static public int staticInt2655;
+    static public int staticInt2656;
+    static public int staticInt2657;
+    static public int staticInt2658;
+    static public int staticInt2659;
+    static public int staticInt2660;
+    static public int staticInt2661;
+    static public int staticInt2662;
+    static public int staticInt2663;
+    static public int staticInt2664;
+    static public int staticInt2665;
+    static public int staticInt2666;
+    static public int staticInt2667;
+    static public int staticInt2668;
+    static public int staticInt2669;
+    static public int staticInt2670;
+    static public int staticInt2671;
+    static public int staticInt2672;
+    static public int staticInt2673;
+    static public int staticInt2674;
+    static public int staticInt2675;
+    static public int staticInt2676;
+    static public int staticInt2677;
+    static public int staticInt2678;
+    static public int staticInt2679;
+    static public int staticInt2680;
+    static public int staticInt2681;
+    static public int staticInt2682;
+    static public int staticInt2683;
+    static public int staticInt2684;
+    static public int staticInt2685;
+    static public int staticInt2686;
+    static public int staticInt2687;
+    static public int staticInt2688;
+    static public int staticInt2689;
+    static public int staticInt2690;
+    static public int staticInt2691;
+    static public int staticInt2692;
+    static public int staticInt2693;
+    static public int staticInt2694;
+    static public int staticInt2695;
+    static public int staticInt2696;
+    static public int staticInt2697;
+    static public int staticInt2698;
+    static public int staticInt2699;
+    static public int staticInt2700;
+    static public int staticInt2701;
+    static public int staticInt2702;
+    static public int staticInt2703;
+    static public int staticInt2704;
+    static public int staticInt2705;
+    static public int staticInt2706;
+    static public int staticInt2707;
+    static public int staticInt2708;
+    static public int staticInt2709;
+    static public int staticInt2710;
+    static public int staticInt2711;
+    static public int staticInt2712;
+    static public int staticInt2713;
+    static public int staticInt2714;
+    static public int staticInt2715;
+    static public int staticInt2716;
+    static public int staticInt2717;
+    static public int staticInt2718;
+    static public int staticInt2719;
+    static public int staticInt2720;
+    static public int staticInt2721;
+    static public int staticInt2722;
+    static public int staticInt2723;
+    static public int staticInt2724;
+    static public int staticInt2725;
+    static public int staticInt2726;
+    static public int staticInt2727;
+    static public int staticInt2728;
+    static public int staticInt2729;
+    static public int staticInt2730;
+    static public int staticInt2731;
+    static public int staticInt2732;
+    static public int staticInt2733;
+    static public int staticInt2734;
+    static public int staticInt2735;
+    static public int staticInt2736;
+    static public int staticInt2737;
+    static public int staticInt2738;
+    static public int staticInt2739;
+    static public int staticInt2740;
+    static public int staticInt2741;
+    static public int staticInt2742;
+    static public int staticInt2743;
+    static public int staticInt2744;
+    static public int staticInt2745;
+    static public int staticInt2746;
+    static public int staticInt2747;
+    static public int staticInt2748;
+    static public int staticInt2749;
+    static public int staticInt2750;
+    static public int staticInt2751;
+    static public int staticInt2752;
+    static public int staticInt2753;
+    static public int staticInt2754;
+    static public int staticInt2755;
+    static public int staticInt2756;
+    static public int staticInt2757;
+    static public int staticInt2758;
+    static public int staticInt2759;
+    static public int staticInt2760;
+    static public int staticInt2761;
+    static public int staticInt2762;
+    static public int staticInt2763;
+    static public int staticInt2764;
+    static public int staticInt2765;
+    static public int staticInt2766;
+    static public int staticInt2767;
+    static public int staticInt2768;
+    static public int staticInt2769;
+    static public int staticInt2770;
+    static public int staticInt2771;
+    static public int staticInt2772;
+    static public int staticInt2773;
+    static public int staticInt2774;
+    static public int staticInt2775;
+    static public int staticInt2776;
+    static public int staticInt2777;
+    static public int staticInt2778;
+    static public int staticInt2779;
+    static public int staticInt2780;
+    static public int staticInt2781;
+    static public int staticInt2782;
+    static public int staticInt2783;
+    static public int staticInt2784;
+    static public int staticInt2785;
+    static public int staticInt2786;
+    static public int staticInt2787;
+    static public int staticInt2788;
+    static public int staticInt2789;
+    static public int staticInt2790;
+    static public int staticInt2791;
+    static public int staticInt2792;
+    static public int staticInt2793;
+    static public int staticInt2794;
+    static public int staticInt2795;
+    static public int staticInt2796;
+    static public int staticInt2797;
+    static public int staticInt2798;
+    static public int staticInt2799;
+    static public int staticInt2800;
+    static public int staticInt2801;
+    static public int staticInt2802;
+    static public int staticInt2803;
+    static public int staticInt2804;
+    static public int staticInt2805;
+    static public int staticInt2806;
+    static public int staticInt2807;
+    static public int staticInt2808;
+    static public int staticInt2809;
+    static public int staticInt2810;
+    static public int staticInt2811;
+    static public int staticInt2812;
+    static public int staticInt2813;
+    static public int staticInt2814;
+    static public int staticInt2815;
+    static public int staticInt2816;
+    static public int staticInt2817;
+    static public int staticInt2818;
+    static public int staticInt2819;
+    static public int staticInt2820;
+    static public int staticInt2821;
+    static public int staticInt2822;
+    static public int staticInt2823;
+    static public int staticInt2824;
+    static public int staticInt2825;
+    static public int staticInt2826;
+    static public int staticInt2827;
+    static public int staticInt2828;
+    static public int staticInt2829;
+    static public int staticInt2830;
+    static public int staticInt2831;
+    static public int staticInt2832;
+    static public int staticInt2833;
+    static public int staticInt2834;
+    static public int staticInt2835;
+    static public int staticInt2836;
+    static public int staticInt2837;
+    static public int staticInt2838;
+    static public int staticInt2839;
+    static public int staticInt2840;
+    static public int staticInt2841;
+    static public int staticInt2842;
+    static public int staticInt2843;
+    static public int staticInt2844;
+    static public int staticInt2845;
+    static public int staticInt2846;
+    static public int staticInt2847;
+    static public int staticInt2848;
+    static public int staticInt2849;
+    static public int staticInt2850;
+    static public int staticInt2851;
+    static public int staticInt2852;
+    static public int staticInt2853;
+    static public int staticInt2854;
+    static public int staticInt2855;
+    static public int staticInt2856;
+    static public int staticInt2857;
+    static public int staticInt2858;
+    static public int staticInt2859;
+    static public int staticInt2860;
+    static public int staticInt2861;
+    static public int staticInt2862;
+    static public int staticInt2863;
+    static public int staticInt2864;
+    static public int staticInt2865;
+    static public int staticInt2866;
+    static public int staticInt2867;
+    static public int staticInt2868;
+    static public int staticInt2869;
+    static public int staticInt2870;
+    static public int staticInt2871;
+    static public int staticInt2872;
+    static public int staticInt2873;
+    static public int staticInt2874;
+    static public int staticInt2875;
+    static public int staticInt2876;
+    static public int staticInt2877;
+    static public int staticInt2878;
+    static public int staticInt2879;
+    static public int staticInt2880;
+    static public int staticInt2881;
+    static public int staticInt2882;
+    static public int staticInt2883;
+    static public int staticInt2884;
+    static public int staticInt2885;
+    static public int staticInt2886;
+    static public int staticInt2887;
+    static public int staticInt2888;
+    static public int staticInt2889;
+    static public int staticInt2890;
+    static public int staticInt2891;
+    static public int staticInt2892;
+    static public int staticInt2893;
+    static public int staticInt2894;
+    static public int staticInt2895;
+    static public int staticInt2896;
+    static public int staticInt2897;
+    static public int staticInt2898;
+    static public int staticInt2899;
+    static public int staticInt2900;
+    static public int staticInt2901;
+    static public int staticInt2902;
+    static public int staticInt2903;
+    static public int staticInt2904;
+    static public int staticInt2905;
+    static public int staticInt2906;
+    static public int staticInt2907;
+    static public int staticInt2908;
+    static public int staticInt2909;
+    static public int staticInt2910;
+    static public int staticInt2911;
+    static public int staticInt2912;
+    static public int staticInt2913;
+    static public int staticInt2914;
+    static public int staticInt2915;
+    static public int staticInt2916;
+    static public int staticInt2917;
+    static public int staticInt2918;
+    static public int staticInt2919;
+    static public int staticInt2920;
+    static public int staticInt2921;
+    static public int staticInt2922;
+    static public int staticInt2923;
+    static public int staticInt2924;
+    static public int staticInt2925;
+    static public int staticInt2926;
+    static public int staticInt2927;
+    static public int staticInt2928;
+    static public int staticInt2929;
+    static public int staticInt2930;
+    static public int staticInt2931;
+    static public int staticInt2932;
+    static public int staticInt2933;
+    static public int staticInt2934;
+    static public int staticInt2935;
+    static public int staticInt2936;
+    static public int staticInt2937;
+    static public int staticInt2938;
+    static public int staticInt2939;
+    static public int staticInt2940;
+    static public int staticInt2941;
+    static public int staticInt2942;
+    static public int staticInt2943;
+    static public int staticInt2944;
+    static public int staticInt2945;
+    static public int staticInt2946;
+    static public int staticInt2947;
+    static public int staticInt2948;
+    static public int staticInt2949;
+    static public int staticInt2950;
+    static public int staticInt2951;
+    static public int staticInt2952;
+    static public int staticInt2953;
+    static public int staticInt2954;
+    static public int staticInt2955;
+    static public int staticInt2956;
+    static public int staticInt2957;
+    static public int staticInt2958;
+    static public int staticInt2959;
+    static public int staticInt2960;
+    static public int staticInt2961;
+    static public int staticInt2962;
+    static public int staticInt2963;
+    static public int staticInt2964;
+    static public int staticInt2965;
+    static public int staticInt2966;
+    static public int staticInt2967;
+    static public int staticInt2968;
+    static public int staticInt2969;
+    static public int staticInt2970;
+    static public int staticInt2971;
+    static public int staticInt2972;
+    static public int staticInt2973;
+    static public int staticInt2974;
+    static public int staticInt2975;
+    static public int staticInt2976;
+    static public int staticInt2977;
+    static public int staticInt2978;
+    static public int staticInt2979;
+    static public int staticInt2980;
+    static public int staticInt2981;
+    static public int staticInt2982;
+    static public int staticInt2983;
+    static public int staticInt2984;
+    static public int staticInt2985;
+    static public int staticInt2986;
+    static public int staticInt2987;
+    static public int staticInt2988;
+    static public int staticInt2989;
+    static public int staticInt2990;
+    static public int staticInt2991;
+    static public int staticInt2992;
+    static public int staticInt2993;
+    static public int staticInt2994;
+    static public int staticInt2995;
+    static public int staticInt2996;
+    static public int staticInt2997;
+    static public int staticInt2998;
+    static public int staticInt2999;
+    static public int staticInt3000;
+    static public int staticInt3001;
+    static public int staticInt3002;
+    static public int staticInt3003;
+    static public int staticInt3004;
+    static public int staticInt3005;
+    static public int staticInt3006;
+    static public int staticInt3007;
+    static public int staticInt3008;
+    static public int staticInt3009;
+    static public int staticInt3010;
+    static public int staticInt3011;
+    static public int staticInt3012;
+    static public int staticInt3013;
+    static public int staticInt3014;
+    static public int staticInt3015;
+    static public int staticInt3016;
+    static public int staticInt3017;
+    static public int staticInt3018;
+    static public int staticInt3019;
+    static public int staticInt3020;
+    static public int staticInt3021;
+    static public int staticInt3022;
+    static public int staticInt3023;
+    static public int staticInt3024;
+    static public int staticInt3025;
+    static public int staticInt3026;
+    static public int staticInt3027;
+    static public int staticInt3028;
+    static public int staticInt3029;
+    static public int staticInt3030;
+    static public int staticInt3031;
+    static public int staticInt3032;
+    static public int staticInt3033;
+    static public int staticInt3034;
+    static public int staticInt3035;
+    static public int staticInt3036;
+    static public int staticInt3037;
+    static public int staticInt3038;
+    static public int staticInt3039;
+    static public int staticInt3040;
+    static public int staticInt3041;
+    static public int staticInt3042;
+    static public int staticInt3043;
+    static public int staticInt3044;
+    static public int staticInt3045;
+    static public int staticInt3046;
+    static public int staticInt3047;
+    static public int staticInt3048;
+    static public int staticInt3049;
+    static public int staticInt3050;
+    static public int staticInt3051;
+    static public int staticInt3052;
+    static public int staticInt3053;
+    static public int staticInt3054;
+    static public int staticInt3055;
+    static public int staticInt3056;
+    static public int staticInt3057;
+    static public int staticInt3058;
+    static public int staticInt3059;
+    static public int staticInt3060;
+    static public int staticInt3061;
+    static public int staticInt3062;
+    static public int staticInt3063;
+    static public int staticInt3064;
+    static public int staticInt3065;
+    static public int staticInt3066;
+    static public int staticInt3067;
+    static public int staticInt3068;
+    static public int staticInt3069;
+    static public int staticInt3070;
+    static public int staticInt3071;
+    static public int staticInt3072;
+    static public int staticInt3073;
+    static public int staticInt3074;
+    static public int staticInt3075;
+    static public int staticInt3076;
+    static public int staticInt3077;
+    static public int staticInt3078;
+    static public int staticInt3079;
+    static public int staticInt3080;
+    static public int staticInt3081;
+    static public int staticInt3082;
+    static public int staticInt3083;
+    static public int staticInt3084;
+    static public int staticInt3085;
+    static public int staticInt3086;
+    static public int staticInt3087;
+    static public int staticInt3088;
+    static public int staticInt3089;
+    static public int staticInt3090;
+    static public int staticInt3091;
+    static public int staticInt3092;
+    static public int staticInt3093;
+    static public int staticInt3094;
+    static public int staticInt3095;
+    static public int staticInt3096;
+    static public int staticInt3097;
+    static public int staticInt3098;
+    static public int staticInt3099;
+    static public int staticInt3100;
+    static public int staticInt3101;
+    static public int staticInt3102;
+    static public int staticInt3103;
+    static public int staticInt3104;
+    static public int staticInt3105;
+    static public int staticInt3106;
+    static public int staticInt3107;
+    static public int staticInt3108;
+    static public int staticInt3109;
+    static public int staticInt3110;
+    static public int staticInt3111;
+    static public int staticInt3112;
+    static public int staticInt3113;
+    static public int staticInt3114;
+    static public int staticInt3115;
+    static public int staticInt3116;
+    static public int staticInt3117;
+    static public int staticInt3118;
+    static public int staticInt3119;
+    static public int staticInt3120;
+    static public int staticInt3121;
+    static public int staticInt3122;
+    static public int staticInt3123;
+    static public int staticInt3124;
+    static public int staticInt3125;
+    static public int staticInt3126;
+    static public int staticInt3127;
+    static public int staticInt3128;
+    static public int staticInt3129;
+    static public int staticInt3130;
+    static public int staticInt3131;
+    static public int staticInt3132;
+    static public int staticInt3133;
+    static public int staticInt3134;
+    static public int staticInt3135;
+    static public int staticInt3136;
+    static public int staticInt3137;
+    static public int staticInt3138;
+    static public int staticInt3139;
+    static public int staticInt3140;
+    static public int staticInt3141;
+    static public int staticInt3142;
+    static public int staticInt3143;
+    static public int staticInt3144;
+    static public int staticInt3145;
+    static public int staticInt3146;
+    static public int staticInt3147;
+    static public int staticInt3148;
+    static public int staticInt3149;
+    static public int staticInt3150;
+    static public int staticInt3151;
+    static public int staticInt3152;
+    static public int staticInt3153;
+    static public int staticInt3154;
+    static public int staticInt3155;
+    static public int staticInt3156;
+    static public int staticInt3157;
+    static public int staticInt3158;
+    static public int staticInt3159;
+    static public int staticInt3160;
+    static public int staticInt3161;
+    static public int staticInt3162;
+    static public int staticInt3163;
+    static public int staticInt3164;
+    static public int staticInt3165;
+    static public int staticInt3166;
+    static public int staticInt3167;
+    static public int staticInt3168;
+    static public int staticInt3169;
+    static public int staticInt3170;
+    static public int staticInt3171;
+    static public int staticInt3172;
+    static public int staticInt3173;
+    static public int staticInt3174;
+    static public int staticInt3175;
+    static public int staticInt3176;
+    static public int staticInt3177;
+    static public int staticInt3178;
+    static public int staticInt3179;
+    static public int staticInt3180;
+    static public int staticInt3181;
+    static public int staticInt3182;
+    static public int staticInt3183;
+    static public int staticInt3184;
+    static public int staticInt3185;
+    static public int staticInt3186;
+    static public int staticInt3187;
+    static public int staticInt3188;
+    static public int staticInt3189;
+    static public int staticInt3190;
+    static public int staticInt3191;
+    static public int staticInt3192;
+    static public int staticInt3193;
+    static public int staticInt3194;
+    static public int staticInt3195;
+    static public int staticInt3196;
+    static public int staticInt3197;
+    static public int staticInt3198;
+    static public int staticInt3199;
+    static public int staticInt3200;
+    static public int staticInt3201;
+    static public int staticInt3202;
+    static public int staticInt3203;
+    static public int staticInt3204;
+    static public int staticInt3205;
+    static public int staticInt3206;
+    static public int staticInt3207;
+    static public int staticInt3208;
+    static public int staticInt3209;
+    static public int staticInt3210;
+    static public int staticInt3211;
+    static public int staticInt3212;
+    static public int staticInt3213;
+    static public int staticInt3214;
+    static public int staticInt3215;
+    static public int staticInt3216;
+    static public int staticInt3217;
+    static public int staticInt3218;
+    static public int staticInt3219;
+    static public int staticInt3220;
+    static public int staticInt3221;
+    static public int staticInt3222;
+    static public int staticInt3223;
+    static public int staticInt3224;
+    static public int staticInt3225;
+    static public int staticInt3226;
+    static public int staticInt3227;
+    static public int staticInt3228;
+    static public int staticInt3229;
+    static public int staticInt3230;
+    static public int staticInt3231;
+    static public int staticInt3232;
+    static public int staticInt3233;
+    static public int staticInt3234;
+    static public int staticInt3235;
+    static public int staticInt3236;
+    static public int staticInt3237;
+    static public int staticInt3238;
+    static public int staticInt3239;
+    static public int staticInt3240;
+    static public int staticInt3241;
+    static public int staticInt3242;
+    static public int staticInt3243;
+    static public int staticInt3244;
+    static public int staticInt3245;
+    static public int staticInt3246;
+    static public int staticInt3247;
+    static public int staticInt3248;
+    static public int staticInt3249;
+    static public int staticInt3250;
+    static public int staticInt3251;
+    static public int staticInt3252;
+    static public int staticInt3253;
+    static public int staticInt3254;
+    static public int staticInt3255;
+    static public int staticInt3256;
+    static public int staticInt3257;
+    static public int staticInt3258;
+    static public int staticInt3259;
+    static public int staticInt3260;
+    static public int staticInt3261;
+    static public int staticInt3262;
+    static public int staticInt3263;
+    static public int staticInt3264;
+    static public int staticInt3265;
+    static public int staticInt3266;
+    static public int staticInt3267;
+    static public int staticInt3268;
+    static public int staticInt3269;
+    static public int staticInt3270;
+    static public int staticInt3271;
+    static public int staticInt3272;
+    static public int staticInt3273;
+    static public int staticInt3274;
+    static public int staticInt3275;
+    static public int staticInt3276;
+    static public int staticInt3277;
+    static public int staticInt3278;
+    static public int staticInt3279;
+    static public int staticInt3280;
+    static public int staticInt3281;
+    static public int staticInt3282;
+    static public int staticInt3283;
+    static public int staticInt3284;
+    static public int staticInt3285;
+    static public int staticInt3286;
+    static public int staticInt3287;
+    static public int staticInt3288;
+    static public int staticInt3289;
+    static public int staticInt3290;
+    static public int staticInt3291;
+    static public int staticInt3292;
+    static public int staticInt3293;
+    static public int staticInt3294;
+    static public int staticInt3295;
+    static public int staticInt3296;
+    static public int staticInt3297;
+    static public int staticInt3298;
+    static public int staticInt3299;
+    static public int staticInt3300;
+    static public int staticInt3301;
+    static public int staticInt3302;
+    static public int staticInt3303;
+    static public int staticInt3304;
+    static public int staticInt3305;
+    static public int staticInt3306;
+    static public int staticInt3307;
+    static public int staticInt3308;
+    static public int staticInt3309;
+    static public int staticInt3310;
+    static public int staticInt3311;
+    static public int staticInt3312;
+    static public int staticInt3313;
+    static public int staticInt3314;
+    static public int staticInt3315;
+    static public int staticInt3316;
+    static public int staticInt3317;
+    static public int staticInt3318;
+    static public int staticInt3319;
+    static public int staticInt3320;
+    static public int staticInt3321;
+    static public int staticInt3322;
+    static public int staticInt3323;
+    static public int staticInt3324;
+    static public int staticInt3325;
+    static public int staticInt3326;
+    static public int staticInt3327;
+    static public int staticInt3328;
+    static public int staticInt3329;
+    static public int staticInt3330;
+    static public int staticInt3331;
+    static public int staticInt3332;
+    static public int staticInt3333;
+    static public int staticInt3334;
+    static public int staticInt3335;
+    static public int staticInt3336;
+    static public int staticInt3337;
+    static public int staticInt3338;
+    static public int staticInt3339;
+    static public int staticInt3340;
+    static public int staticInt3341;
+    static public int staticInt3342;
+    static public int staticInt3343;
+    static public int staticInt3344;
+    static public int staticInt3345;
+    static public int staticInt3346;
+    static public int staticInt3347;
+    static public int staticInt3348;
+    static public int staticInt3349;
+    static public int staticInt3350;
+    static public int staticInt3351;
+    static public int staticInt3352;
+    static public int staticInt3353;
+    static public int staticInt3354;
+    static public int staticInt3355;
+    static public int staticInt3356;
+    static public int staticInt3357;
+    static public int staticInt3358;
+    static public int staticInt3359;
+    static public int staticInt3360;
+    static public int staticInt3361;
+    static public int staticInt3362;
+    static public int staticInt3363;
+    static public int staticInt3364;
+    static public int staticInt3365;
+    static public int staticInt3366;
+    static public int staticInt3367;
+    static public int staticInt3368;
+    static public int staticInt3369;
+    static public int staticInt3370;
+    static public int staticInt3371;
+    static public int staticInt3372;
+    static public int staticInt3373;
+    static public int staticInt3374;
+    static public int staticInt3375;
+    static public int staticInt3376;
+    static public int staticInt3377;
+    static public int staticInt3378;
+    static public int staticInt3379;
+    static public int staticInt3380;
+    static public int staticInt3381;
+    static public int staticInt3382;
+    static public int staticInt3383;
+    static public int staticInt3384;
+    static public int staticInt3385;
+    static public int staticInt3386;
+    static public int staticInt3387;
+    static public int staticInt3388;
+    static public int staticInt3389;
+    static public int staticInt3390;
+    static public int staticInt3391;
+    static public int staticInt3392;
+    static public int staticInt3393;
+    static public int staticInt3394;
+    static public int staticInt3395;
+    static public int staticInt3396;
+    static public int staticInt3397;
+    static public int staticInt3398;
+    static public int staticInt3399;
+    static public int staticInt3400;
+    static public int staticInt3401;
+    static public int staticInt3402;
+    static public int staticInt3403;
+    static public int staticInt3404;
+    static public int staticInt3405;
+    static public int staticInt3406;
+    static public int staticInt3407;
+    static public int staticInt3408;
+    static public int staticInt3409;
+    static public int staticInt3410;
+    static public int staticInt3411;
+    static public int staticInt3412;
+    static public int staticInt3413;
+    static public int staticInt3414;
+    static public int staticInt3415;
+    static public int staticInt3416;
+    static public int staticInt3417;
+    static public int staticInt3418;
+    static public int staticInt3419;
+    static public int staticInt3420;
+    static public int staticInt3421;
+    static public int staticInt3422;
+    static public int staticInt3423;
+    static public int staticInt3424;
+    static public int staticInt3425;
+    static public int staticInt3426;
+    static public int staticInt3427;
+    static public int staticInt3428;
+    static public int staticInt3429;
+    static public int staticInt3430;
+    static public int staticInt3431;
+    static public int staticInt3432;
+    static public int staticInt3433;
+    static public int staticInt3434;
+    static public int staticInt3435;
+    static public int staticInt3436;
+    static public int staticInt3437;
+    static public int staticInt3438;
+    static public int staticInt3439;
+    static public int staticInt3440;
+    static public int staticInt3441;
+    static public int staticInt3442;
+    static public int staticInt3443;
+    static public int staticInt3444;
+    static public int staticInt3445;
+    static public int staticInt3446;
+    static public int staticInt3447;
+    static public int staticInt3448;
+    static public int staticInt3449;
+    static public int staticInt3450;
+    static public int staticInt3451;
+    static public int staticInt3452;
+    static public int staticInt3453;
+    static public int staticInt3454;
+    static public int staticInt3455;
+    static public int staticInt3456;
+    static public int staticInt3457;
+    static public int staticInt3458;
+    static public int staticInt3459;
+    static public int staticInt3460;
+    static public int staticInt3461;
+    static public int staticInt3462;
+    static public int staticInt3463;
+    static public int staticInt3464;
+    static public int staticInt3465;
+    static public int staticInt3466;
+    static public int staticInt3467;
+    static public int staticInt3468;
+    static public int staticInt3469;
+    static public int staticInt3470;
+    static public int staticInt3471;
+    static public int staticInt3472;
+    static public int staticInt3473;
+    static public int staticInt3474;
+    static public int staticInt3475;
+    static public int staticInt3476;
+    static public int staticInt3477;
+    static public int staticInt3478;
+    static public int staticInt3479;
+    static public int staticInt3480;
+    static public int staticInt3481;
+    static public int staticInt3482;
+    static public int staticInt3483;
+    static public int staticInt3484;
+    static public int staticInt3485;
+    static public int staticInt3486;
+    static public int staticInt3487;
+    static public int staticInt3488;
+    static public int staticInt3489;
+    static public int staticInt3490;
+    static public int staticInt3491;
+    static public int staticInt3492;
+    static public int staticInt3493;
+    static public int staticInt3494;
+    static public int staticInt3495;
+    static public int staticInt3496;
+    static public int staticInt3497;
+    static public int staticInt3498;
+    static public int staticInt3499;
+    static public int staticInt3500;
+    static public int staticInt3501;
+    static public int staticInt3502;
+    static public int staticInt3503;
+    static public int staticInt3504;
+    static public int staticInt3505;
+    static public int staticInt3506;
+    static public int staticInt3507;
+    static public int staticInt3508;
+    static public int staticInt3509;
+    static public int staticInt3510;
+    static public int staticInt3511;
+    static public int staticInt3512;
+    static public int staticInt3513;
+    static public int staticInt3514;
+    static public int staticInt3515;
+    static public int staticInt3516;
+    static public int staticInt3517;
+    static public int staticInt3518;
+    static public int staticInt3519;
+    static public int staticInt3520;
+    static public int staticInt3521;
+    static public int staticInt3522;
+    static public int staticInt3523;
+    static public int staticInt3524;
+    static public int staticInt3525;
+    static public int staticInt3526;
+    static public int staticInt3527;
+    static public int staticInt3528;
+    static public int staticInt3529;
+    static public int staticInt3530;
+    static public int staticInt3531;
+    static public int staticInt3532;
+    static public int staticInt3533;
+    static public int staticInt3534;
+    static public int staticInt3535;
+    static public int staticInt3536;
+    static public int staticInt3537;
+    static public int staticInt3538;
+    static public int staticInt3539;
+    static public int staticInt3540;
+    static public int staticInt3541;
+    static public int staticInt3542;
+    static public int staticInt3543;
+    static public int staticInt3544;
+    static public int staticInt3545;
+    static public int staticInt3546;
+    static public int staticInt3547;
+    static public int staticInt3548;
+    static public int staticInt3549;
+    static public int staticInt3550;
+    static public int staticInt3551;
+    static public int staticInt3552;
+    static public int staticInt3553;
+    static public int staticInt3554;
+    static public int staticInt3555;
+    static public int staticInt3556;
+    static public int staticInt3557;
+    static public int staticInt3558;
+    static public int staticInt3559;
+    static public int staticInt3560;
+    static public int staticInt3561;
+    static public int staticInt3562;
+    static public int staticInt3563;
+    static public int staticInt3564;
+    static public int staticInt3565;
+    static public int staticInt3566;
+    static public int staticInt3567;
+    static public int staticInt3568;
+    static public int staticInt3569;
+    static public int staticInt3570;
+    static public int staticInt3571;
+    static public int staticInt3572;
+    static public int staticInt3573;
+    static public int staticInt3574;
+    static public int staticInt3575;
+    static public int staticInt3576;
+    static public int staticInt3577;
+    static public int staticInt3578;
+    static public int staticInt3579;
+    static public int staticInt3580;
+    static public int staticInt3581;
+    static public int staticInt3582;
+    static public int staticInt3583;
+    static public int staticInt3584;
+    static public int staticInt3585;
+    static public int staticInt3586;
+    static public int staticInt3587;
+    static public int staticInt3588;
+    static public int staticInt3589;
+    static public int staticInt3590;
+    static public int staticInt3591;
+    static public int staticInt3592;
+    static public int staticInt3593;
+    static public int staticInt3594;
+    static public int staticInt3595;
+    static public int staticInt3596;
+    static public int staticInt3597;
+    static public int staticInt3598;
+    static public int staticInt3599;
+    static public int staticInt3600;
+    static public int staticInt3601;
+    static public int staticInt3602;
+    static public int staticInt3603;
+    static public int staticInt3604;
+    static public int staticInt3605;
+    static public int staticInt3606;
+    static public int staticInt3607;
+    static public int staticInt3608;
+    static public int staticInt3609;
+    static public int staticInt3610;
+    static public int staticInt3611;
+    static public int staticInt3612;
+    static public int staticInt3613;
+    static public int staticInt3614;
+    static public int staticInt3615;
+    static public int staticInt3616;
+    static public int staticInt3617;
+    static public int staticInt3618;
+    static public int staticInt3619;
+    static public int staticInt3620;
+    static public int staticInt3621;
+    static public int staticInt3622;
+    static public int staticInt3623;
+    static public int staticInt3624;
+    static public int staticInt3625;
+    static public int staticInt3626;
+    static public int staticInt3627;
+    static public int staticInt3628;
+    static public int staticInt3629;
+    static public int staticInt3630;
+    static public int staticInt3631;
+    static public int staticInt3632;
+    static public int staticInt3633;
+    static public int staticInt3634;
+    static public int staticInt3635;
+    static public int staticInt3636;
+    static public int staticInt3637;
+    static public int staticInt3638;
+    static public int staticInt3639;
+    static public int staticInt3640;
+    static public int staticInt3641;
+    static public int staticInt3642;
+    static public int staticInt3643;
+    static public int staticInt3644;
+    static public int staticInt3645;
+    static public int staticInt3646;
+    static public int staticInt3647;
+    static public int staticInt3648;
+    static public int staticInt3649;
+    static public int staticInt3650;
+    static public int staticInt3651;
+    static public int staticInt3652;
+    static public int staticInt3653;
+    static public int staticInt3654;
+    static public int staticInt3655;
+    static public int staticInt3656;
+    static public int staticInt3657;
+    static public int staticInt3658;
+    static public int staticInt3659;
+    static public int staticInt3660;
+    static public int staticInt3661;
+    static public int staticInt3662;
+    static public int staticInt3663;
+    static public int staticInt3664;
+    static public int staticInt3665;
+    static public int staticInt3666;
+    static public int staticInt3667;
+    static public int staticInt3668;
+    static public int staticInt3669;
+    static public int staticInt3670;
+    static public int staticInt3671;
+    static public int staticInt3672;
+    static public int staticInt3673;
+    static public int staticInt3674;
+    static public int staticInt3675;
+    static public int staticInt3676;
+    static public int staticInt3677;
+    static public int staticInt3678;
+    static public int staticInt3679;
+    static public int staticInt3680;
+    static public int staticInt3681;
+    static public int staticInt3682;
+    static public int staticInt3683;
+    static public int staticInt3684;
+    static public int staticInt3685;
+    static public int staticInt3686;
+    static public int staticInt3687;
+    static public int staticInt3688;
+    static public int staticInt3689;
+    static public int staticInt3690;
+    static public int staticInt3691;
+    static public int staticInt3692;
+    static public int staticInt3693;
+    static public int staticInt3694;
+    static public int staticInt3695;
+    static public int staticInt3696;
+    static public int staticInt3697;
+    static public int staticInt3698;
+    static public int staticInt3699;
+    static public int staticInt3700;
+    static public int staticInt3701;
+    static public int staticInt3702;
+    static public int staticInt3703;
+    static public int staticInt3704;
+    static public int staticInt3705;
+    static public int staticInt3706;
+    static public int staticInt3707;
+    static public int staticInt3708;
+    static public int staticInt3709;
+    static public int staticInt3710;
+    static public int staticInt3711;
+    static public int staticInt3712;
+    static public int staticInt3713;
+    static public int staticInt3714;
+    static public int staticInt3715;
+    static public int staticInt3716;
+    static public int staticInt3717;
+    static public int staticInt3718;
+    static public int staticInt3719;
+    static public int staticInt3720;
+    static public int staticInt3721;
+    static public int staticInt3722;
+    static public int staticInt3723;
+    static public int staticInt3724;
+    static public int staticInt3725;
+    static public int staticInt3726;
+    static public int staticInt3727;
+    static public int staticInt3728;
+    static public int staticInt3729;
+    static public int staticInt3730;
+    static public int staticInt3731;
+    static public int staticInt3732;
+    static public int staticInt3733;
+    static public int staticInt3734;
+    static public int staticInt3735;
+    static public int staticInt3736;
+    static public int staticInt3737;
+    static public int staticInt3738;
+    static public int staticInt3739;
+    static public int staticInt3740;
+    static public int staticInt3741;
+    static public int staticInt3742;
+    static public int staticInt3743;
+    static public int staticInt3744;
+    static public int staticInt3745;
+    static public int staticInt3746;
+    static public int staticInt3747;
+    static public int staticInt3748;
+    static public int staticInt3749;
+    static public int staticInt3750;
+    static public int staticInt3751;
+    static public int staticInt3752;
+    static public int staticInt3753;
+    static public int staticInt3754;
+    static public int staticInt3755;
+    static public int staticInt3756;
+    static public int staticInt3757;
+    static public int staticInt3758;
+    static public int staticInt3759;
+    static public int staticInt3760;
+    static public int staticInt3761;
+    static public int staticInt3762;
+    static public int staticInt3763;
+    static public int staticInt3764;
+    static public int staticInt3765;
+    static public int staticInt3766;
+    static public int staticInt3767;
+    static public int staticInt3768;
+    static public int staticInt3769;
+    static public int staticInt3770;
+    static public int staticInt3771;
+    static public int staticInt3772;
+    static public int staticInt3773;
+    static public int staticInt3774;
+    static public int staticInt3775;
+    static public int staticInt3776;
+    static public int staticInt3777;
+    static public int staticInt3778;
+    static public int staticInt3779;
+    static public int staticInt3780;
+    static public int staticInt3781;
+    static public int staticInt3782;
+    static public int staticInt3783;
+    static public int staticInt3784;
+    static public int staticInt3785;
+    static public int staticInt3786;
+    static public int staticInt3787;
+    static public int staticInt3788;
+    static public int staticInt3789;
+    static public int staticInt3790;
+    static public int staticInt3791;
+    static public int staticInt3792;
+    static public int staticInt3793;
+    static public int staticInt3794;
+    static public int staticInt3795;
+    static public int staticInt3796;
+    static public int staticInt3797;
+    static public int staticInt3798;
+    static public int staticInt3799;
+    static public int staticInt3800;
+    static public int staticInt3801;
+    static public int staticInt3802;
+    static public int staticInt3803;
+    static public int staticInt3804;
+    static public int staticInt3805;
+    static public int staticInt3806;
+    static public int staticInt3807;
+    static public int staticInt3808;
+    static public int staticInt3809;
+    static public int staticInt3810;
+    static public int staticInt3811;
+    static public int staticInt3812;
+    static public int staticInt3813;
+    static public int staticInt3814;
+    static public int staticInt3815;
+    static public int staticInt3816;
+    static public int staticInt3817;
+    static public int staticInt3818;
+    static public int staticInt3819;
+    static public int staticInt3820;
+    static public int staticInt3821;
+    static public int staticInt3822;
+    static public int staticInt3823;
+    static public int staticInt3824;
+    static public int staticInt3825;
+    static public int staticInt3826;
+    static public int staticInt3827;
+    static public int staticInt3828;
+    static public int staticInt3829;
+    static public int staticInt3830;
+    static public int staticInt3831;
+    static public int staticInt3832;
+    static public int staticInt3833;
+    static public int staticInt3834;
+    static public int staticInt3835;
+    static public int staticInt3836;
+    static public int staticInt3837;
+    static public int staticInt3838;
+    static public int staticInt3839;
+    static public int staticInt3840;
+    static public int staticInt3841;
+    static public int staticInt3842;
+    static public int staticInt3843;
+    static public int staticInt3844;
+    static public int staticInt3845;
+    static public int staticInt3846;
+    static public int staticInt3847;
+    static public int staticInt3848;
+    static public int staticInt3849;
+    static public int staticInt3850;
+    static public int staticInt3851;
+    static public int staticInt3852;
+    static public int staticInt3853;
+    static public int staticInt3854;
+    static public int staticInt3855;
+    static public int staticInt3856;
+    static public int staticInt3857;
+    static public int staticInt3858;
+    static public int staticInt3859;
+    static public int staticInt3860;
+    static public int staticInt3861;
+    static public int staticInt3862;
+    static public int staticInt3863;
+    static public int staticInt3864;
+    static public int staticInt3865;
+    static public int staticInt3866;
+    static public int staticInt3867;
+    static public int staticInt3868;
+    static public int staticInt3869;
+    static public int staticInt3870;
+    static public int staticInt3871;
+    static public int staticInt3872;
+    static public int staticInt3873;
+    static public int staticInt3874;
+    static public int staticInt3875;
+    static public int staticInt3876;
+    static public int staticInt3877;
+    static public int staticInt3878;
+    static public int staticInt3879;
+    static public int staticInt3880;
+    static public int staticInt3881;
+    static public int staticInt3882;
+    static public int staticInt3883;
+    static public int staticInt3884;
+    static public int staticInt3885;
+    static public int staticInt3886;
+    static public int staticInt3887;
+    static public int staticInt3888;
+    static public int staticInt3889;
+    static public int staticInt3890;
+    static public int staticInt3891;
+    static public int staticInt3892;
+    static public int staticInt3893;
+    static public int staticInt3894;
+    static public int staticInt3895;
+    static public int staticInt3896;
+    static public int staticInt3897;
+    static public int staticInt3898;
+    static public int staticInt3899;
+    static public int staticInt3900;
+    static public int staticInt3901;
+    static public int staticInt3902;
+    static public int staticInt3903;
+    static public int staticInt3904;
+    static public int staticInt3905;
+    static public int staticInt3906;
+    static public int staticInt3907;
+    static public int staticInt3908;
+    static public int staticInt3909;
+    static public int staticInt3910;
+    static public int staticInt3911;
+    static public int staticInt3912;
+    static public int staticInt3913;
+    static public int staticInt3914;
+    static public int staticInt3915;
+    static public int staticInt3916;
+    static public int staticInt3917;
+    static public int staticInt3918;
+    static public int staticInt3919;
+    static public int staticInt3920;
+    static public int staticInt3921;
+    static public int staticInt3922;
+    static public int staticInt3923;
+    static public int staticInt3924;
+    static public int staticInt3925;
+    static public int staticInt3926;
+    static public int staticInt3927;
+    static public int staticInt3928;
+    static public int staticInt3929;
+    static public int staticInt3930;
+    static public int staticInt3931;
+    static public int staticInt3932;
+    static public int staticInt3933;
+    static public int staticInt3934;
+    static public int staticInt3935;
+    static public int staticInt3936;
+    static public int staticInt3937;
+    static public int staticInt3938;
+    static public int staticInt3939;
+    static public int staticInt3940;
+    static public int staticInt3941;
+    static public int staticInt3942;
+    static public int staticInt3943;
+    static public int staticInt3944;
+    static public int staticInt3945;
+    static public int staticInt3946;
+    static public int staticInt3947;
+    static public int staticInt3948;
+    static public int staticInt3949;
+    static public int staticInt3950;
+    static public int staticInt3951;
+    static public int staticInt3952;
+    static public int staticInt3953;
+    static public int staticInt3954;
+    static public int staticInt3955;
+    static public int staticInt3956;
+    static public int staticInt3957;
+    static public int staticInt3958;
+    static public int staticInt3959;
+    static public int staticInt3960;
+    static public int staticInt3961;
+    static public int staticInt3962;
+    static public int staticInt3963;
+    static public int staticInt3964;
+    static public int staticInt3965;
+    static public int staticInt3966;
+    static public int staticInt3967;
+    static public int staticInt3968;
+    static public int staticInt3969;
+    static public int staticInt3970;
+    static public int staticInt3971;
+    static public int staticInt3972;
+    static public int staticInt3973;
+    static public int staticInt3974;
+    static public int staticInt3975;
+    static public int staticInt3976;
+    static public int staticInt3977;
+    static public int staticInt3978;
+    static public int staticInt3979;
+    static public int staticInt3980;
+    static public int staticInt3981;
+    static public int staticInt3982;
+    static public int staticInt3983;
+    static public int staticInt3984;
+    static public int staticInt3985;
+    static public int staticInt3986;
+    static public int staticInt3987;
+    static public int staticInt3988;
+    static public int staticInt3989;
+    static public int staticInt3990;
+    static public int staticInt3991;
+    static public int staticInt3992;
+    static public int staticInt3993;
+    static public int staticInt3994;
+    static public int staticInt3995;
+    static public int staticInt3996;
+    static public int staticInt3997;
+    static public int staticInt3998;
+    static public int staticInt3999;
+    static public int staticInt4000;
+    static public int staticInt4001;
+    static public int staticInt4002;
+    static public int staticInt4003;
+    static public int staticInt4004;
+    static public int staticInt4005;
+    static public int staticInt4006;
+    static public int staticInt4007;
+    static public int staticInt4008;
+    static public int staticInt4009;
+    static public int staticInt4010;
+    static public int staticInt4011;
+    static public int staticInt4012;
+    static public int staticInt4013;
+    static public int staticInt4014;
+    static public int staticInt4015;
+    static public int staticInt4016;
+    static public int staticInt4017;
+    static public int staticInt4018;
+    static public int staticInt4019;
+    static public int staticInt4020;
+    static public int staticInt4021;
+    static public int staticInt4022;
+    static public int staticInt4023;
+    static public int staticInt4024;
+    static public int staticInt4025;
+    static public int staticInt4026;
+    static public int staticInt4027;
+    static public int staticInt4028;
+    static public int staticInt4029;
+    static public int staticInt4030;
+    static public int staticInt4031;
+    static public int staticInt4032;
+    static public int staticInt4033;
+    static public int staticInt4034;
+    static public int staticInt4035;
+    static public int staticInt4036;
+    static public int staticInt4037;
+    static public int staticInt4038;
+    static public int staticInt4039;
+    static public int staticInt4040;
+    static public int staticInt4041;
+    static public int staticInt4042;
+    static public int staticInt4043;
+    static public int staticInt4044;
+    static public int staticInt4045;
+    static public int staticInt4046;
+    static public int staticInt4047;
+    static public int staticInt4048;
+    static public int staticInt4049;
+    static public int staticInt4050;
+    static public int staticInt4051;
+    static public int staticInt4052;
+    static public int staticInt4053;
+    static public int staticInt4054;
+    static public int staticInt4055;
+    static public int staticInt4056;
+    static public int staticInt4057;
+    static public int staticInt4058;
+    static public int staticInt4059;
+    static public int staticInt4060;
+    static public int staticInt4061;
+    static public int staticInt4062;
+    static public int staticInt4063;
+    static public int staticInt4064;
+    static public int staticInt4065;
+    static public int staticInt4066;
+    static public int staticInt4067;
+    static public int staticInt4068;
+    static public int staticInt4069;
+    static public int staticInt4070;
+    static public int staticInt4071;
+    static public int staticInt4072;
+    static public int staticInt4073;
+    static public int staticInt4074;
+    static public int staticInt4075;
+    static public int staticInt4076;
+    static public int staticInt4077;
+    static public int staticInt4078;
+    static public int staticInt4079;
+    static public int staticInt4080;
+    static public int staticInt4081;
+    static public int staticInt4082;
+    static public int staticInt4083;
+    static public int staticInt4084;
+    static public int staticInt4085;
+    static public int staticInt4086;
+    static public int staticInt4087;
+    static public int staticInt4088;
+    static public int staticInt4089;
+    static public int staticInt4090;
+    static public int staticInt4091;
+    static public int staticInt4092;
+    static public int staticInt4093;
+    static public int staticInt4094;
+    static public int staticInt4095;
+    static public int staticInt4096;
+    static public int staticInt4097;
+    static public int staticInt4098;
+    static public int staticInt4099;
+    static public int staticInt4100;
+    static public int staticInt4101;
+    static public int staticInt4102;
+    static public int staticInt4103;
+    static public int staticInt4104;
+    static public int staticInt4105;
+    static public int staticInt4106;
+    static public int staticInt4107;
+    static public int staticInt4108;
+    static public int staticInt4109;
+    static public int staticInt4110;
+    static public int staticInt4111;
+    static public int staticInt4112;
+    static public int staticInt4113;
+    static public int staticInt4114;
+    static public int staticInt4115;
+    static public int staticInt4116;
+    static public int staticInt4117;
+    static public int staticInt4118;
+    static public int staticInt4119;
+    static public int staticInt4120;
+    static public int staticInt4121;
+    static public int staticInt4122;
+    static public int staticInt4123;
+    static public int staticInt4124;
+    static public int staticInt4125;
+    static public int staticInt4126;
+    static public int staticInt4127;
+    static public int staticInt4128;
+    static public int staticInt4129;
+    static public int staticInt4130;
+    static public int staticInt4131;
+    static public int staticInt4132;
+    static public int staticInt4133;
+    static public int staticInt4134;
+    static public int staticInt4135;
+    static public int staticInt4136;
+    static public int staticInt4137;
+    static public int staticInt4138;
+    static public int staticInt4139;
+    static public int staticInt4140;
+    static public int staticInt4141;
+    static public int staticInt4142;
+    static public int staticInt4143;
+    static public int staticInt4144;
+    static public int staticInt4145;
+    static public int staticInt4146;
+    static public int staticInt4147;
+    static public int staticInt4148;
+    static public int staticInt4149;
+    static public int staticInt4150;
+    static public int staticInt4151;
+    static public int staticInt4152;
+    static public int staticInt4153;
+    static public int staticInt4154;
+    static public int staticInt4155;
+    static public int staticInt4156;
+    static public int staticInt4157;
+    static public int staticInt4158;
+    static public int staticInt4159;
+    static public int staticInt4160;
+    static public int staticInt4161;
+    static public int staticInt4162;
+    static public int staticInt4163;
+    static public int staticInt4164;
+    static public int staticInt4165;
+    static public int staticInt4166;
+    static public int staticInt4167;
+    static public int staticInt4168;
+    static public int staticInt4169;
+    static public int staticInt4170;
+    static public int staticInt4171;
+    static public int staticInt4172;
+    static public int staticInt4173;
+    static public int staticInt4174;
+    static public int staticInt4175;
+    static public int staticInt4176;
+    static public int staticInt4177;
+    static public int staticInt4178;
+    static public int staticInt4179;
+    static public int staticInt4180;
+    static public int staticInt4181;
+    static public int staticInt4182;
+    static public int staticInt4183;
+    static public int staticInt4184;
+    static public int staticInt4185;
+    static public int staticInt4186;
+    static public int staticInt4187;
+    static public int staticInt4188;
+    static public int staticInt4189;
+    static public int staticInt4190;
+    static public int staticInt4191;
+    static public int staticInt4192;
+    static public int staticInt4193;
+    static public int staticInt4194;
+    static public int staticInt4195;
+    static public int staticInt4196;
+    static public int staticInt4197;
+    static public int staticInt4198;
+    static public int staticInt4199;
+    static public int staticInt4200;
+    static public int staticInt4201;
+    static public int staticInt4202;
+    static public int staticInt4203;
+    static public int staticInt4204;
+    static public int staticInt4205;
+    static public int staticInt4206;
+    static public int staticInt4207;
+    static public int staticInt4208;
+    static public int staticInt4209;
+    static public int staticInt4210;
+    static public int staticInt4211;
+    static public int staticInt4212;
+    static public int staticInt4213;
+    static public int staticInt4214;
+    static public int staticInt4215;
+    static public int staticInt4216;
+    static public int staticInt4217;
+    static public int staticInt4218;
+    static public int staticInt4219;
+    static public int staticInt4220;
+    static public int staticInt4221;
+    static public int staticInt4222;
+    static public int staticInt4223;
+    static public int staticInt4224;
+    static public int staticInt4225;
+    static public int staticInt4226;
+    static public int staticInt4227;
+    static public int staticInt4228;
+    static public int staticInt4229;
+    static public int staticInt4230;
+    static public int staticInt4231;
+    static public int staticInt4232;
+    static public int staticInt4233;
+    static public int staticInt4234;
+    static public int staticInt4235;
+    static public int staticInt4236;
+    static public int staticInt4237;
+    static public int staticInt4238;
+    static public int staticInt4239;
+    static public int staticInt4240;
+    static public int staticInt4241;
+    static public int staticInt4242;
+    static public int staticInt4243;
+    static public int staticInt4244;
+    static public int staticInt4245;
+    static public int staticInt4246;
+    static public int staticInt4247;
+    static public int staticInt4248;
+    static public int staticInt4249;
+    static public int staticInt4250;
+    static public int staticInt4251;
+    static public int staticInt4252;
+    static public int staticInt4253;
+    static public int staticInt4254;
+    static public int staticInt4255;
+    static public int staticInt4256;
+    static public int staticInt4257;
+    static public int staticInt4258;
+    static public int staticInt4259;
+    static public int staticInt4260;
+    static public int staticInt4261;
+    static public int staticInt4262;
+    static public int staticInt4263;
+    static public int staticInt4264;
+    static public int staticInt4265;
+    static public int staticInt4266;
+    static public int staticInt4267;
+    static public int staticInt4268;
+    static public int staticInt4269;
+    static public int staticInt4270;
+    static public int staticInt4271;
+    static public int staticInt4272;
+    static public int staticInt4273;
+    static public int staticInt4274;
+    static public int staticInt4275;
+    static public int staticInt4276;
+    static public int staticInt4277;
+    static public int staticInt4278;
+    static public int staticInt4279;
+    static public int staticInt4280;
+    static public int staticInt4281;
+    static public int staticInt4282;
+    static public int staticInt4283;
+    static public int staticInt4284;
+    static public int staticInt4285;
+    static public int staticInt4286;
+    static public int staticInt4287;
+    static public int staticInt4288;
+    static public int staticInt4289;
+    static public int staticInt4290;
+    static public int staticInt4291;
+    static public int staticInt4292;
+    static public int staticInt4293;
+    static public int staticInt4294;
+    static public int staticInt4295;
+    static public int staticInt4296;
+    static public int staticInt4297;
+    static public int staticInt4298;
+    static public int staticInt4299;
+    static public int staticInt4300;
+    static public int staticInt4301;
+    static public int staticInt4302;
+    static public int staticInt4303;
+    static public int staticInt4304;
+    static public int staticInt4305;
+    static public int staticInt4306;
+    static public int staticInt4307;
+    static public int staticInt4308;
+    static public int staticInt4309;
+    static public int staticInt4310;
+    static public int staticInt4311;
+    static public int staticInt4312;
+    static public int staticInt4313;
+    static public int staticInt4314;
+    static public int staticInt4315;
+    static public int staticInt4316;
+    static public int staticInt4317;
+    static public int staticInt4318;
+    static public int staticInt4319;
+    static public int staticInt4320;
+    static public int staticInt4321;
+    static public int staticInt4322;
+    static public int staticInt4323;
+    static public int staticInt4324;
+    static public int staticInt4325;
+    static public int staticInt4326;
+    static public int staticInt4327;
+    static public int staticInt4328;
+    static public int staticInt4329;
+    static public int staticInt4330;
+    static public int staticInt4331;
+    static public int staticInt4332;
+    static public int staticInt4333;
+    static public int staticInt4334;
+    static public int staticInt4335;
+    static public int staticInt4336;
+    static public int staticInt4337;
+    static public int staticInt4338;
+    static public int staticInt4339;
+    static public int staticInt4340;
+    static public int staticInt4341;
+    static public int staticInt4342;
+    static public int staticInt4343;
+    static public int staticInt4344;
+    static public int staticInt4345;
+    static public int staticInt4346;
+    static public int staticInt4347;
+    static public int staticInt4348;
+    static public int staticInt4349;
+    static public int staticInt4350;
+    static public int staticInt4351;
+    static public int staticInt4352;
+    static public int staticInt4353;
+    static public int staticInt4354;
+    static public int staticInt4355;
+    static public int staticInt4356;
+    static public int staticInt4357;
+    static public int staticInt4358;
+    static public int staticInt4359;
+    static public int staticInt4360;
+    static public int staticInt4361;
+    static public int staticInt4362;
+    static public int staticInt4363;
+    static public int staticInt4364;
+    static public int staticInt4365;
+    static public int staticInt4366;
+    static public int staticInt4367;
+    static public int staticInt4368;
+    static public int staticInt4369;
+    static public int staticInt4370;
+    static public int staticInt4371;
+    static public int staticInt4372;
+    static public int staticInt4373;
+    static public int staticInt4374;
+    static public int staticInt4375;
+    static public int staticInt4376;
+    static public int staticInt4377;
+    static public int staticInt4378;
+    static public int staticInt4379;
+    static public int staticInt4380;
+    static public int staticInt4381;
+    static public int staticInt4382;
+    static public int staticInt4383;
+    static public int staticInt4384;
+    static public int staticInt4385;
+    static public int staticInt4386;
+    static public int staticInt4387;
+    static public int staticInt4388;
+    static public int staticInt4389;
+    static public int staticInt4390;
+    static public int staticInt4391;
+    static public int staticInt4392;
+    static public int staticInt4393;
+    static public int staticInt4394;
+    static public int staticInt4395;
+    static public int staticInt4396;
+    static public int staticInt4397;
+    static public int staticInt4398;
+    static public int staticInt4399;
+    static public int staticInt4400;
+    static public int staticInt4401;
+    static public int staticInt4402;
+    static public int staticInt4403;
+    static public int staticInt4404;
+    static public int staticInt4405;
+    static public int staticInt4406;
+    static public int staticInt4407;
+    static public int staticInt4408;
+    static public int staticInt4409;
+    static public int staticInt4410;
+    static public int staticInt4411;
+    static public int staticInt4412;
+    static public int staticInt4413;
+    static public int staticInt4414;
+    static public int staticInt4415;
+    static public int staticInt4416;
+    static public int staticInt4417;
+    static public int staticInt4418;
+    static public int staticInt4419;
+    static public int staticInt4420;
+    static public int staticInt4421;
+    static public int staticInt4422;
+    static public int staticInt4423;
+    static public int staticInt4424;
+    static public int staticInt4425;
+    static public int staticInt4426;
+    static public int staticInt4427;
+    static public int staticInt4428;
+    static public int staticInt4429;
+    static public int staticInt4430;
+    static public int staticInt4431;
+    static public int staticInt4432;
+    static public int staticInt4433;
+    static public int staticInt4434;
+    static public int staticInt4435;
+    static public int staticInt4436;
+    static public int staticInt4437;
+    static public int staticInt4438;
+    static public int staticInt4439;
+    static public int staticInt4440;
+    static public int staticInt4441;
+    static public int staticInt4442;
+    static public int staticInt4443;
+    static public int staticInt4444;
+    static public int staticInt4445;
+    static public int staticInt4446;
+    static public int staticInt4447;
+    static public int staticInt4448;
+    static public int staticInt4449;
+    static public int staticInt4450;
+    static public int staticInt4451;
+    static public int staticInt4452;
+    static public int staticInt4453;
+    static public int staticInt4454;
+    static public int staticInt4455;
+    static public int staticInt4456;
+    static public int staticInt4457;
+    static public int staticInt4458;
+    static public int staticInt4459;
+    static public int staticInt4460;
+    static public int staticInt4461;
+    static public int staticInt4462;
+    static public int staticInt4463;
+    static public int staticInt4464;
+    static public int staticInt4465;
+    static public int staticInt4466;
+    static public int staticInt4467;
+    static public int staticInt4468;
+    static public int staticInt4469;
+    static public int staticInt4470;
+    static public int staticInt4471;
+    static public int staticInt4472;
+    static public int staticInt4473;
+    static public int staticInt4474;
+    static public int staticInt4475;
+    static public int staticInt4476;
+    static public int staticInt4477;
+    static public int staticInt4478;
+    static public int staticInt4479;
+    static public int staticInt4480;
+    static public int staticInt4481;
+    static public int staticInt4482;
+    static public int staticInt4483;
+    static public int staticInt4484;
+    static public int staticInt4485;
+    static public int staticInt4486;
+    static public int staticInt4487;
+    static public int staticInt4488;
+    static public int staticInt4489;
+    static public int staticInt4490;
+    static public int staticInt4491;
+    static public int staticInt4492;
+    static public int staticInt4493;
+    static public int staticInt4494;
+    static public int staticInt4495;
+    static public int staticInt4496;
+    static public int staticInt4497;
+    static public int staticInt4498;
+    static public int staticInt4499;
+    static public int staticInt4500;
+    static public int staticInt4501;
+    static public int staticInt4502;
+    static public int staticInt4503;
+    static public int staticInt4504;
+    static public int staticInt4505;
+    static public int staticInt4506;
+    static public int staticInt4507;
+    static public int staticInt4508;
+    static public int staticInt4509;
+    static public int staticInt4510;
+    static public int staticInt4511;
+    static public int staticInt4512;
+    static public int staticInt4513;
+    static public int staticInt4514;
+    static public int staticInt4515;
+    static public int staticInt4516;
+    static public int staticInt4517;
+    static public int staticInt4518;
+    static public int staticInt4519;
+    static public int staticInt4520;
+    static public int staticInt4521;
+    static public int staticInt4522;
+    static public int staticInt4523;
+    static public int staticInt4524;
+    static public int staticInt4525;
+    static public int staticInt4526;
+    static public int staticInt4527;
+    static public int staticInt4528;
+    static public int staticInt4529;
+    static public int staticInt4530;
+    static public int staticInt4531;
+    static public int staticInt4532;
+    static public int staticInt4533;
+    static public int staticInt4534;
+    static public int staticInt4535;
+    static public int staticInt4536;
+    static public int staticInt4537;
+    static public int staticInt4538;
+    static public int staticInt4539;
+    static public int staticInt4540;
+    static public int staticInt4541;
+    static public int staticInt4542;
+    static public int staticInt4543;
+    static public int staticInt4544;
+    static public int staticInt4545;
+    static public int staticInt4546;
+    static public int staticInt4547;
+    static public int staticInt4548;
+    static public int staticInt4549;
+    static public int staticInt4550;
+    static public int staticInt4551;
+    static public int staticInt4552;
+    static public int staticInt4553;
+    static public int staticInt4554;
+    static public int staticInt4555;
+    static public int staticInt4556;
+    static public int staticInt4557;
+    static public int staticInt4558;
+    static public int staticInt4559;
+    static public int staticInt4560;
+    static public int staticInt4561;
+    static public int staticInt4562;
+    static public int staticInt4563;
+    static public int staticInt4564;
+    static public int staticInt4565;
+    static public int staticInt4566;
+    static public int staticInt4567;
+    static public int staticInt4568;
+    static public int staticInt4569;
+    static public int staticInt4570;
+    static public int staticInt4571;
+    static public int staticInt4572;
+    static public int staticInt4573;
+    static public int staticInt4574;
+    static public int staticInt4575;
+    static public int staticInt4576;
+    static public int staticInt4577;
+    static public int staticInt4578;
+    static public int staticInt4579;
+    static public int staticInt4580;
+    static public int staticInt4581;
+    static public int staticInt4582;
+    static public int staticInt4583;
+    static public int staticInt4584;
+    static public int staticInt4585;
+    static public int staticInt4586;
+    static public int staticInt4587;
+    static public int staticInt4588;
+    static public int staticInt4589;
+    static public int staticInt4590;
+    static public int staticInt4591;
+    static public int staticInt4592;
+    static public int staticInt4593;
+    static public int staticInt4594;
+    static public int staticInt4595;
+    static public int staticInt4596;
+    static public int staticInt4597;
+    static public int staticInt4598;
+    static public int staticInt4599;
+    static public int staticInt4600;
+    static public int staticInt4601;
+    static public int staticInt4602;
+    static public int staticInt4603;
+    static public int staticInt4604;
+    static public int staticInt4605;
+    static public int staticInt4606;
+    static public int staticInt4607;
+    static public int staticInt4608;
+    static public int staticInt4609;
+    static public int staticInt4610;
+    static public int staticInt4611;
+    static public int staticInt4612;
+    static public int staticInt4613;
+    static public int staticInt4614;
+    static public int staticInt4615;
+    static public int staticInt4616;
+    static public int staticInt4617;
+    static public int staticInt4618;
+    static public int staticInt4619;
+    static public int staticInt4620;
+    static public int staticInt4621;
+    static public int staticInt4622;
+    static public int staticInt4623;
+    static public int staticInt4624;
+    static public int staticInt4625;
+    static public int staticInt4626;
+    static public int staticInt4627;
+    static public int staticInt4628;
+    static public int staticInt4629;
+    static public int staticInt4630;
+    static public int staticInt4631;
+    static public int staticInt4632;
+    static public int staticInt4633;
+    static public int staticInt4634;
+    static public int staticInt4635;
+    static public int staticInt4636;
+    static public int staticInt4637;
+    static public int staticInt4638;
+    static public int staticInt4639;
+    static public int staticInt4640;
+    static public int staticInt4641;
+    static public int staticInt4642;
+    static public int staticInt4643;
+    static public int staticInt4644;
+    static public int staticInt4645;
+    static public int staticInt4646;
+    static public int staticInt4647;
+    static public int staticInt4648;
+    static public int staticInt4649;
+    static public int staticInt4650;
+    static public int staticInt4651;
+    static public int staticInt4652;
+    static public int staticInt4653;
+    static public int staticInt4654;
+    static public int staticInt4655;
+    static public int staticInt4656;
+    static public int staticInt4657;
+    static public int staticInt4658;
+    static public int staticInt4659;
+    static public int staticInt4660;
+    static public int staticInt4661;
+    static public int staticInt4662;
+    static public int staticInt4663;
+    static public int staticInt4664;
+    static public int staticInt4665;
+    static public int staticInt4666;
+    static public int staticInt4667;
+    static public int staticInt4668;
+    static public int staticInt4669;
+    static public int staticInt4670;
+    static public int staticInt4671;
+    static public int staticInt4672;
+    static public int staticInt4673;
+    static public int staticInt4674;
+    static public int staticInt4675;
+    static public int staticInt4676;
+    static public int staticInt4677;
+    static public int staticInt4678;
+    static public int staticInt4679;
+    static public int staticInt4680;
+    static public int staticInt4681;
+    static public int staticInt4682;
+    static public int staticInt4683;
+    static public int staticInt4684;
+    static public int staticInt4685;
+    static public int staticInt4686;
+    static public int staticInt4687;
+    static public int staticInt4688;
+    static public int staticInt4689;
+    static public int staticInt4690;
+    static public int staticInt4691;
+    static public int staticInt4692;
+    static public int staticInt4693;
+    static public int staticInt4694;
+    static public int staticInt4695;
+    static public int staticInt4696;
+    static public int staticInt4697;
+    static public int staticInt4698;
+    static public int staticInt4699;
+    static public int staticInt4700;
+    static public int staticInt4701;
+    static public int staticInt4702;
+    static public int staticInt4703;
+    static public int staticInt4704;
+    static public int staticInt4705;
+    static public int staticInt4706;
+    static public int staticInt4707;
+    static public int staticInt4708;
+    static public int staticInt4709;
+    static public int staticInt4710;
+    static public int staticInt4711;
+    static public int staticInt4712;
+    static public int staticInt4713;
+    static public int staticInt4714;
+    static public int staticInt4715;
+    static public int staticInt4716;
+    static public int staticInt4717;
+    static public int staticInt4718;
+    static public int staticInt4719;
+    static public int staticInt4720;
+    static public int staticInt4721;
+    static public int staticInt4722;
+    static public int staticInt4723;
+    static public int staticInt4724;
+    static public int staticInt4725;
+    static public int staticInt4726;
+    static public int staticInt4727;
+    static public int staticInt4728;
+    static public int staticInt4729;
+    static public int staticInt4730;
+    static public int staticInt4731;
+    static public int staticInt4732;
+    static public int staticInt4733;
+    static public int staticInt4734;
+    static public int staticInt4735;
+    static public int staticInt4736;
+    static public int staticInt4737;
+    static public int staticInt4738;
+    static public int staticInt4739;
+    static public int staticInt4740;
+    static public int staticInt4741;
+    static public int staticInt4742;
+    static public int staticInt4743;
+    static public int staticInt4744;
+    static public int staticInt4745;
+    static public int staticInt4746;
+    static public int staticInt4747;
+    static public int staticInt4748;
+    static public int staticInt4749;
+    static public int staticInt4750;
+    static public int staticInt4751;
+    static public int staticInt4752;
+    static public int staticInt4753;
+    static public int staticInt4754;
+    static public int staticInt4755;
+    static public int staticInt4756;
+    static public int staticInt4757;
+    static public int staticInt4758;
+    static public int staticInt4759;
+    static public int staticInt4760;
+    static public int staticInt4761;
+    static public int staticInt4762;
+    static public int staticInt4763;
+    static public int staticInt4764;
+    static public int staticInt4765;
+    static public int staticInt4766;
+    static public int staticInt4767;
+    static public int staticInt4768;
+    static public int staticInt4769;
+    static public int staticInt4770;
+    static public int staticInt4771;
+    static public int staticInt4772;
+    static public int staticInt4773;
+    static public int staticInt4774;
+    static public int staticInt4775;
+    static public int staticInt4776;
+    static public int staticInt4777;
+    static public int staticInt4778;
+    static public int staticInt4779;
+    static public int staticInt4780;
+    static public int staticInt4781;
+    static public int staticInt4782;
+    static public int staticInt4783;
+    static public int staticInt4784;
+    static public int staticInt4785;
+    static public int staticInt4786;
+    static public int staticInt4787;
+    static public int staticInt4788;
+    static public int staticInt4789;
+    static public int staticInt4790;
+    static public int staticInt4791;
+    static public int staticInt4792;
+    static public int staticInt4793;
+    static public int staticInt4794;
+    static public int staticInt4795;
+    static public int staticInt4796;
+    static public int staticInt4797;
+    static public int staticInt4798;
+    static public int staticInt4799;
+    static public int staticInt4800;
+    static public int staticInt4801;
+    static public int staticInt4802;
+    static public int staticInt4803;
+    static public int staticInt4804;
+    static public int staticInt4805;
+    static public int staticInt4806;
+    static public int staticInt4807;
+    static public int staticInt4808;
+    static public int staticInt4809;
+    static public int staticInt4810;
+    static public int staticInt4811;
+    static public int staticInt4812;
+    static public int staticInt4813;
+    static public int staticInt4814;
+    static public int staticInt4815;
+    static public int staticInt4816;
+    static public int staticInt4817;
+    static public int staticInt4818;
+    static public int staticInt4819;
+    static public int staticInt4820;
+    static public int staticInt4821;
+    static public int staticInt4822;
+    static public int staticInt4823;
+    static public int staticInt4824;
+    static public int staticInt4825;
+    static public int staticInt4826;
+    static public int staticInt4827;
+    static public int staticInt4828;
+    static public int staticInt4829;
+    static public int staticInt4830;
+    static public int staticInt4831;
+    static public int staticInt4832;
+    static public int staticInt4833;
+    static public int staticInt4834;
+    static public int staticInt4835;
+    static public int staticInt4836;
+    static public int staticInt4837;
+    static public int staticInt4838;
+    static public int staticInt4839;
+    static public int staticInt4840;
+    static public int staticInt4841;
+    static public int staticInt4842;
+    static public int staticInt4843;
+    static public int staticInt4844;
+    static public int staticInt4845;
+    static public int staticInt4846;
+    static public int staticInt4847;
+    static public int staticInt4848;
+    static public int staticInt4849;
+    static public int staticInt4850;
+    static public int staticInt4851;
+    static public int staticInt4852;
+    static public int staticInt4853;
+    static public int staticInt4854;
+    static public int staticInt4855;
+    static public int staticInt4856;
+    static public int staticInt4857;
+    static public int staticInt4858;
+    static public int staticInt4859;
+    static public int staticInt4860;
+    static public int staticInt4861;
+    static public int staticInt4862;
+    static public int staticInt4863;
+    static public int staticInt4864;
+    static public int staticInt4865;
+    static public int staticInt4866;
+    static public int staticInt4867;
+    static public int staticInt4868;
+    static public int staticInt4869;
+    static public int staticInt4870;
+    static public int staticInt4871;
+    static public int staticInt4872;
+    static public int staticInt4873;
+    static public int staticInt4874;
+    static public int staticInt4875;
+    static public int staticInt4876;
+    static public int staticInt4877;
+    static public int staticInt4878;
+    static public int staticInt4879;
+    static public int staticInt4880;
+    static public int staticInt4881;
+    static public int staticInt4882;
+    static public int staticInt4883;
+    static public int staticInt4884;
+    static public int staticInt4885;
+    static public int staticInt4886;
+    static public int staticInt4887;
+    static public int staticInt4888;
+    static public int staticInt4889;
+    static public int staticInt4890;
+    static public int staticInt4891;
+    static public int staticInt4892;
+    static public int staticInt4893;
+    static public int staticInt4894;
+    static public int staticInt4895;
+    static public int staticInt4896;
+    static public int staticInt4897;
+    static public int staticInt4898;
+    static public int staticInt4899;
+    static public int staticInt4900;
+    static public int staticInt4901;
+    static public int staticInt4902;
+    static public int staticInt4903;
+    static public int staticInt4904;
+    static public int staticInt4905;
+    static public int staticInt4906;
+    static public int staticInt4907;
+    static public int staticInt4908;
+    static public int staticInt4909;
+    static public int staticInt4910;
+    static public int staticInt4911;
+    static public int staticInt4912;
+    static public int staticInt4913;
+    static public int staticInt4914;
+    static public int staticInt4915;
+    static public int staticInt4916;
+    static public int staticInt4917;
+    static public int staticInt4918;
+    static public int staticInt4919;
+    static public int staticInt4920;
+    static public int staticInt4921;
+    static public int staticInt4922;
+    static public int staticInt4923;
+    static public int staticInt4924;
+    static public int staticInt4925;
+    static public int staticInt4926;
+    static public int staticInt4927;
+    static public int staticInt4928;
+    static public int staticInt4929;
+    static public int staticInt4930;
+    static public int staticInt4931;
+    static public int staticInt4932;
+    static public int staticInt4933;
+    static public int staticInt4934;
+    static public int staticInt4935;
+    static public int staticInt4936;
+    static public int staticInt4937;
+    static public int staticInt4938;
+    static public int staticInt4939;
+    static public int staticInt4940;
+    static public int staticInt4941;
+    static public int staticInt4942;
+    static public int staticInt4943;
+    static public int staticInt4944;
+    static public int staticInt4945;
+    static public int staticInt4946;
+    static public int staticInt4947;
+    static public int staticInt4948;
+    static public int staticInt4949;
+    static public int staticInt4950;
+    static public int staticInt4951;
+    static public int staticInt4952;
+    static public int staticInt4953;
+    static public int staticInt4954;
+    static public int staticInt4955;
+    static public int staticInt4956;
+    static public int staticInt4957;
+    static public int staticInt4958;
+    static public int staticInt4959;
+    static public int staticInt4960;
+    static public int staticInt4961;
+    static public int staticInt4962;
+    static public int staticInt4963;
+    static public int staticInt4964;
+    static public int staticInt4965;
+    static public int staticInt4966;
+    static public int staticInt4967;
+    static public int staticInt4968;
+    static public int staticInt4969;
+    static public int staticInt4970;
+    static public int staticInt4971;
+    static public int staticInt4972;
+    static public int staticInt4973;
+    static public int staticInt4974;
+    static public int staticInt4975;
+    static public int staticInt4976;
+    static public int staticInt4977;
+    static public int staticInt4978;
+    static public int staticInt4979;
+    static public int staticInt4980;
+    static public int staticInt4981;
+    static public int staticInt4982;
+    static public int staticInt4983;
+    static public int staticInt4984;
+    static public int staticInt4985;
+    static public int staticInt4986;
+    static public int staticInt4987;
+    static public int staticInt4988;
+    static public int staticInt4989;
+    static public int staticInt4990;
+    static public int staticInt4991;
+    static public int staticInt4992;
+    static public int staticInt4993;
+    static public int staticInt4994;
+    static public int staticInt4995;
+    static public int staticInt4996;
+    static public int staticInt4997;
+    static public int staticInt4998;
+    static public int staticInt4999;
+    static public int staticInt5000;
+    static public int staticInt5001;
+    static public int staticInt5002;
+    static public int staticInt5003;
+    static public int staticInt5004;
+    static public int staticInt5005;
+    static public int staticInt5006;
+    static public int staticInt5007;
+    static public int staticInt5008;
+    static public int staticInt5009;
+    static public int staticInt5010;
+    static public int staticInt5011;
+    static public int staticInt5012;
+    static public int staticInt5013;
+    static public int staticInt5014;
+    static public int staticInt5015;
+    static public int staticInt5016;
+    static public int staticInt5017;
+    static public int staticInt5018;
+    static public int staticInt5019;
+    static public int staticInt5020;
+    static public int staticInt5021;
+    static public int staticInt5022;
+    static public int staticInt5023;
+    static public int staticInt5024;
+    static public int staticInt5025;
+    static public int staticInt5026;
+    static public int staticInt5027;
+    static public int staticInt5028;
+    static public int staticInt5029;
+    static public int staticInt5030;
+    static public int staticInt5031;
+    static public int staticInt5032;
+    static public int staticInt5033;
+    static public int staticInt5034;
+    static public int staticInt5035;
+    static public int staticInt5036;
+    static public int staticInt5037;
+    static public int staticInt5038;
+    static public int staticInt5039;
+    static public int staticInt5040;
+    static public int staticInt5041;
+    static public int staticInt5042;
+    static public int staticInt5043;
+    static public int staticInt5044;
+    static public int staticInt5045;
+    static public int staticInt5046;
+    static public int staticInt5047;
+    static public int staticInt5048;
+    static public int staticInt5049;
+    static public int staticInt5050;
+    static public int staticInt5051;
+    static public int staticInt5052;
+    static public int staticInt5053;
+    static public int staticInt5054;
+    static public int staticInt5055;
+    static public int staticInt5056;
+    static public int staticInt5057;
+    static public int staticInt5058;
+    static public int staticInt5059;
+    static public int staticInt5060;
+    static public int staticInt5061;
+    static public int staticInt5062;
+    static public int staticInt5063;
+    static public int staticInt5064;
+    static public int staticInt5065;
+    static public int staticInt5066;
+    static public int staticInt5067;
+    static public int staticInt5068;
+    static public int staticInt5069;
+    static public int staticInt5070;
+    static public int staticInt5071;
+    static public int staticInt5072;
+    static public int staticInt5073;
+    static public int staticInt5074;
+    static public int staticInt5075;
+    static public int staticInt5076;
+    static public int staticInt5077;
+    static public int staticInt5078;
+    static public int staticInt5079;
+    static public int staticInt5080;
+    static public int staticInt5081;
+    static public int staticInt5082;
+    static public int staticInt5083;
+    static public int staticInt5084;
+    static public int staticInt5085;
+    static public int staticInt5086;
+    static public int staticInt5087;
+    static public int staticInt5088;
+    static public int staticInt5089;
+    static public int staticInt5090;
+    static public int staticInt5091;
+    static public int staticInt5092;
+    static public int staticInt5093;
+    static public int staticInt5094;
+    static public int staticInt5095;
+    static public int staticInt5096;
+    static public int staticInt5097;
+    static public int staticInt5098;
+    static public int staticInt5099;
+    static public int staticInt5100;
+    static public int staticInt5101;
+    static public int staticInt5102;
+    static public int staticInt5103;
+    static public int staticInt5104;
+    static public int staticInt5105;
+    static public int staticInt5106;
+    static public int staticInt5107;
+    static public int staticInt5108;
+    static public int staticInt5109;
+    static public int staticInt5110;
+    static public int staticInt5111;
+    static public int staticInt5112;
+    static public int staticInt5113;
+    static public int staticInt5114;
+    static public int staticInt5115;
+    static public int staticInt5116;
+    static public int staticInt5117;
+    static public int staticInt5118;
+    static public int staticInt5119;
+    static public int staticInt5120;
+    static public int staticInt5121;
+    static public int staticInt5122;
+    static public int staticInt5123;
+    static public int staticInt5124;
+    static public int staticInt5125;
+    static public int staticInt5126;
+    static public int staticInt5127;
+    static public int staticInt5128;
+    static public int staticInt5129;
+    static public int staticInt5130;
+    static public int staticInt5131;
+    static public int staticInt5132;
+    static public int staticInt5133;
+    static public int staticInt5134;
+    static public int staticInt5135;
+    static public int staticInt5136;
+    static public int staticInt5137;
+    static public int staticInt5138;
+    static public int staticInt5139;
+    static public int staticInt5140;
+    static public int staticInt5141;
+    static public int staticInt5142;
+    static public int staticInt5143;
+    static public int staticInt5144;
+    static public int staticInt5145;
+    static public int staticInt5146;
+    static public int staticInt5147;
+    static public int staticInt5148;
+    static public int staticInt5149;
+    static public int staticInt5150;
+    static public int staticInt5151;
+    static public int staticInt5152;
+    static public int staticInt5153;
+    static public int staticInt5154;
+    static public int staticInt5155;
+    static public int staticInt5156;
+    static public int staticInt5157;
+    static public int staticInt5158;
+    static public int staticInt5159;
+    static public int staticInt5160;
+    static public int staticInt5161;
+    static public int staticInt5162;
+    static public int staticInt5163;
+    static public int staticInt5164;
+    static public int staticInt5165;
+    static public int staticInt5166;
+    static public int staticInt5167;
+    static public int staticInt5168;
+    static public int staticInt5169;
+    static public int staticInt5170;
+    static public int staticInt5171;
+    static public int staticInt5172;
+    static public int staticInt5173;
+    static public int staticInt5174;
+    static public int staticInt5175;
+    static public int staticInt5176;
+    static public int staticInt5177;
+    static public int staticInt5178;
+    static public int staticInt5179;
+    static public int staticInt5180;
+    static public int staticInt5181;
+    static public int staticInt5182;
+    static public int staticInt5183;
+    static public int staticInt5184;
+    static public int staticInt5185;
+    static public int staticInt5186;
+    static public int staticInt5187;
+    static public int staticInt5188;
+    static public int staticInt5189;
+    static public int staticInt5190;
+    static public int staticInt5191;
+    static public int staticInt5192;
+    static public int staticInt5193;
+    static public int staticInt5194;
+    static public int staticInt5195;
+    static public int staticInt5196;
+    static public int staticInt5197;
+    static public int staticInt5198;
+    static public int staticInt5199;
+    static public int staticInt5200;
+    static public int staticInt5201;
+    static public int staticInt5202;
+    static public int staticInt5203;
+    static public int staticInt5204;
+    static public int staticInt5205;
+    static public int staticInt5206;
+    static public int staticInt5207;
+    static public int staticInt5208;
+    static public int staticInt5209;
+    static public int staticInt5210;
+    static public int staticInt5211;
+    static public int staticInt5212;
+    static public int staticInt5213;
+    static public int staticInt5214;
+    static public int staticInt5215;
+    static public int staticInt5216;
+    static public int staticInt5217;
+    static public int staticInt5218;
+    static public int staticInt5219;
+    static public int staticInt5220;
+    static public int staticInt5221;
+    static public int staticInt5222;
+    static public int staticInt5223;
+    static public int staticInt5224;
+    static public int staticInt5225;
+    static public int staticInt5226;
+    static public int staticInt5227;
+    static public int staticInt5228;
+    static public int staticInt5229;
+    static public int staticInt5230;
+    static public int staticInt5231;
+    static public int staticInt5232;
+    static public int staticInt5233;
+    static public int staticInt5234;
+    static public int staticInt5235;
+    static public int staticInt5236;
+    static public int staticInt5237;
+    static public int staticInt5238;
+    static public int staticInt5239;
+    static public int staticInt5240;
+    static public int staticInt5241;
+    static public int staticInt5242;
+    static public int staticInt5243;
+    static public int staticInt5244;
+    static public int staticInt5245;
+    static public int staticInt5246;
+    static public int staticInt5247;
+    static public int staticInt5248;
+    static public int staticInt5249;
+    static public int staticInt5250;
+    static public int staticInt5251;
+    static public int staticInt5252;
+    static public int staticInt5253;
+    static public int staticInt5254;
+    static public int staticInt5255;
+    static public int staticInt5256;
+    static public int staticInt5257;
+    static public int staticInt5258;
+    static public int staticInt5259;
+    static public int staticInt5260;
+    static public int staticInt5261;
+    static public int staticInt5262;
+    static public int staticInt5263;
+    static public int staticInt5264;
+    static public int staticInt5265;
+    static public int staticInt5266;
+    static public int staticInt5267;
+    static public int staticInt5268;
+    static public int staticInt5269;
+    static public int staticInt5270;
+    static public int staticInt5271;
+    static public int staticInt5272;
+    static public int staticInt5273;
+    static public int staticInt5274;
+    static public int staticInt5275;
+    static public int staticInt5276;
+    static public int staticInt5277;
+    static public int staticInt5278;
+    static public int staticInt5279;
+    static public int staticInt5280;
+    static public int staticInt5281;
+    static public int staticInt5282;
+    static public int staticInt5283;
+    static public int staticInt5284;
+    static public int staticInt5285;
+    static public int staticInt5286;
+    static public int staticInt5287;
+    static public int staticInt5288;
+    static public int staticInt5289;
+    static public int staticInt5290;
+    static public int staticInt5291;
+    static public int staticInt5292;
+    static public int staticInt5293;
+    static public int staticInt5294;
+    static public int staticInt5295;
+    static public int staticInt5296;
+    static public int staticInt5297;
+    static public int staticInt5298;
+    static public int staticInt5299;
+    static public int staticInt5300;
+    static public int staticInt5301;
+    static public int staticInt5302;
+    static public int staticInt5303;
+    static public int staticInt5304;
+    static public int staticInt5305;
+    static public int staticInt5306;
+    static public int staticInt5307;
+    static public int staticInt5308;
+    static public int staticInt5309;
+    static public int staticInt5310;
+    static public int staticInt5311;
+    static public int staticInt5312;
+    static public int staticInt5313;
+    static public int staticInt5314;
+    static public int staticInt5315;
+    static public int staticInt5316;
+    static public int staticInt5317;
+    static public int staticInt5318;
+    static public int staticInt5319;
+    static public int staticInt5320;
+    static public int staticInt5321;
+    static public int staticInt5322;
+    static public int staticInt5323;
+    static public int staticInt5324;
+    static public int staticInt5325;
+    static public int staticInt5326;
+    static public int staticInt5327;
+    static public int staticInt5328;
+    static public int staticInt5329;
+    static public int staticInt5330;
+    static public int staticInt5331;
+    static public int staticInt5332;
+    static public int staticInt5333;
+    static public int staticInt5334;
+    static public int staticInt5335;
+    static public int staticInt5336;
+    static public int staticInt5337;
+    static public int staticInt5338;
+    static public int staticInt5339;
+    static public int staticInt5340;
+    static public int staticInt5341;
+    static public int staticInt5342;
+    static public int staticInt5343;
+    static public int staticInt5344;
+    static public int staticInt5345;
+    static public int staticInt5346;
+    static public int staticInt5347;
+    static public int staticInt5348;
+    static public int staticInt5349;
+    static public int staticInt5350;
+    static public int staticInt5351;
+    static public int staticInt5352;
+    static public int staticInt5353;
+    static public int staticInt5354;
+    static public int staticInt5355;
+    static public int staticInt5356;
+    static public int staticInt5357;
+    static public int staticInt5358;
+    static public int staticInt5359;
+    static public int staticInt5360;
+    static public int staticInt5361;
+    static public int staticInt5362;
+    static public int staticInt5363;
+    static public int staticInt5364;
+    static public int staticInt5365;
+    static public int staticInt5366;
+    static public int staticInt5367;
+    static public int staticInt5368;
+    static public int staticInt5369;
+    static public int staticInt5370;
+    static public int staticInt5371;
+    static public int staticInt5372;
+    static public int staticInt5373;
+    static public int staticInt5374;
+    static public int staticInt5375;
+    static public int staticInt5376;
+    static public int staticInt5377;
+    static public int staticInt5378;
+    static public int staticInt5379;
+    static public int staticInt5380;
+    static public int staticInt5381;
+    static public int staticInt5382;
+    static public int staticInt5383;
+    static public int staticInt5384;
+    static public int staticInt5385;
+    static public int staticInt5386;
+    static public int staticInt5387;
+    static public int staticInt5388;
+    static public int staticInt5389;
+    static public int staticInt5390;
+    static public int staticInt5391;
+    static public int staticInt5392;
+    static public int staticInt5393;
+    static public int staticInt5394;
+    static public int staticInt5395;
+    static public int staticInt5396;
+    static public int staticInt5397;
+    static public int staticInt5398;
+    static public int staticInt5399;
+    static public int staticInt5400;
+    static public int staticInt5401;
+    static public int staticInt5402;
+    static public int staticInt5403;
+    static public int staticInt5404;
+    static public int staticInt5405;
+    static public int staticInt5406;
+    static public int staticInt5407;
+    static public int staticInt5408;
+    static public int staticInt5409;
+    static public int staticInt5410;
+    static public int staticInt5411;
+    static public int staticInt5412;
+    static public int staticInt5413;
+    static public int staticInt5414;
+    static public int staticInt5415;
+    static public int staticInt5416;
+    static public int staticInt5417;
+    static public int staticInt5418;
+    static public int staticInt5419;
+    static public int staticInt5420;
+    static public int staticInt5421;
+    static public int staticInt5422;
+    static public int staticInt5423;
+    static public int staticInt5424;
+    static public int staticInt5425;
+    static public int staticInt5426;
+    static public int staticInt5427;
+    static public int staticInt5428;
+    static public int staticInt5429;
+    static public int staticInt5430;
+    static public int staticInt5431;
+    static public int staticInt5432;
+    static public int staticInt5433;
+    static public int staticInt5434;
+    static public int staticInt5435;
+    static public int staticInt5436;
+    static public int staticInt5437;
+    static public int staticInt5438;
+    static public int staticInt5439;
+    static public int staticInt5440;
+    static public int staticInt5441;
+    static public int staticInt5442;
+    static public int staticInt5443;
+    static public int staticInt5444;
+    static public int staticInt5445;
+    static public int staticInt5446;
+    static public int staticInt5447;
+    static public int staticInt5448;
+    static public int staticInt5449;
+    static public int staticInt5450;
+    static public int staticInt5451;
+    static public int staticInt5452;
+    static public int staticInt5453;
+    static public int staticInt5454;
+    static public int staticInt5455;
+    static public int staticInt5456;
+    static public int staticInt5457;
+    static public int staticInt5458;
+    static public int staticInt5459;
+    static public int staticInt5460;
+    static public int staticInt5461;
+    static public int staticInt5462;
+    static public int staticInt5463;
+    static public int staticInt5464;
+    static public int staticInt5465;
+    static public int staticInt5466;
+    static public int staticInt5467;
+    static public int staticInt5468;
+    static public int staticInt5469;
+    static public int staticInt5470;
+    static public int staticInt5471;
+    static public int staticInt5472;
+    static public int staticInt5473;
+    static public int staticInt5474;
+    static public int staticInt5475;
+    static public int staticInt5476;
+    static public int staticInt5477;
+    static public int staticInt5478;
+    static public int staticInt5479;
+    static public int staticInt5480;
+    static public int staticInt5481;
+    static public int staticInt5482;
+    static public int staticInt5483;
+    static public int staticInt5484;
+    static public int staticInt5485;
+    static public int staticInt5486;
+    static public int staticInt5487;
+    static public int staticInt5488;
+    static public int staticInt5489;
+    static public int staticInt5490;
+    static public int staticInt5491;
+    static public int staticInt5492;
+    static public int staticInt5493;
+    static public int staticInt5494;
+    static public int staticInt5495;
+    static public int staticInt5496;
+    static public int staticInt5497;
+    static public int staticInt5498;
+    static public int staticInt5499;
+    static public int staticInt5500;
+    static public int staticInt5501;
+    static public int staticInt5502;
+    static public int staticInt5503;
+    static public int staticInt5504;
+    static public int staticInt5505;
+    static public int staticInt5506;
+    static public int staticInt5507;
+    static public int staticInt5508;
+    static public int staticInt5509;
+    static public int staticInt5510;
+    static public int staticInt5511;
+    static public int staticInt5512;
+    static public int staticInt5513;
+    static public int staticInt5514;
+    static public int staticInt5515;
+    static public int staticInt5516;
+    static public int staticInt5517;
+    static public int staticInt5518;
+    static public int staticInt5519;
+    static public int staticInt5520;
+    static public int staticInt5521;
+    static public int staticInt5522;
+    static public int staticInt5523;
+    static public int staticInt5524;
+    static public int staticInt5525;
+    static public int staticInt5526;
+    static public int staticInt5527;
+    static public int staticInt5528;
+    static public int staticInt5529;
+    static public int staticInt5530;
+    static public int staticInt5531;
+    static public int staticInt5532;
+    static public int staticInt5533;
+    static public int staticInt5534;
+    static public int staticInt5535;
+    static public int staticInt5536;
+    static public int staticInt5537;
+    static public int staticInt5538;
+    static public int staticInt5539;
+    static public int staticInt5540;
+    static public int staticInt5541;
+    static public int staticInt5542;
+    static public int staticInt5543;
+    static public int staticInt5544;
+    static public int staticInt5545;
+    static public int staticInt5546;
+    static public int staticInt5547;
+    static public int staticInt5548;
+    static public int staticInt5549;
+    static public int staticInt5550;
+    static public int staticInt5551;
+    static public int staticInt5552;
+    static public int staticInt5553;
+    static public int staticInt5554;
+    static public int staticInt5555;
+    static public int staticInt5556;
+    static public int staticInt5557;
+    static public int staticInt5558;
+    static public int staticInt5559;
+    static public int staticInt5560;
+    static public int staticInt5561;
+    static public int staticInt5562;
+    static public int staticInt5563;
+    static public int staticInt5564;
+    static public int staticInt5565;
+    static public int staticInt5566;
+    static public int staticInt5567;
+    static public int staticInt5568;
+    static public int staticInt5569;
+    static public int staticInt5570;
+    static public int staticInt5571;
+    static public int staticInt5572;
+    static public int staticInt5573;
+    static public int staticInt5574;
+    static public int staticInt5575;
+    static public int staticInt5576;
+    static public int staticInt5577;
+    static public int staticInt5578;
+    static public int staticInt5579;
+    static public int staticInt5580;
+    static public int staticInt5581;
+    static public int staticInt5582;
+    static public int staticInt5583;
+    static public int staticInt5584;
+    static public int staticInt5585;
+    static public int staticInt5586;
+    static public int staticInt5587;
+    static public int staticInt5588;
+    static public int staticInt5589;
+    static public int staticInt5590;
+    static public int staticInt5591;
+    static public int staticInt5592;
+    static public int staticInt5593;
+    static public int staticInt5594;
+    static public int staticInt5595;
+    static public int staticInt5596;
+    static public int staticInt5597;
+    static public int staticInt5598;
+    static public int staticInt5599;
+    static public int staticInt5600;
+    static public int staticInt5601;
+    static public int staticInt5602;
+    static public int staticInt5603;
+    static public int staticInt5604;
+    static public int staticInt5605;
+    static public int staticInt5606;
+    static public int staticInt5607;
+    static public int staticInt5608;
+    static public int staticInt5609;
+    static public int staticInt5610;
+    static public int staticInt5611;
+    static public int staticInt5612;
+    static public int staticInt5613;
+    static public int staticInt5614;
+    static public int staticInt5615;
+    static public int staticInt5616;
+    static public int staticInt5617;
+    static public int staticInt5618;
+    static public int staticInt5619;
+    static public int staticInt5620;
+    static public int staticInt5621;
+    static public int staticInt5622;
+    static public int staticInt5623;
+    static public int staticInt5624;
+    static public int staticInt5625;
+    static public int staticInt5626;
+    static public int staticInt5627;
+    static public int staticInt5628;
+    static public int staticInt5629;
+    static public int staticInt5630;
+    static public int staticInt5631;
+    static public int staticInt5632;
+    static public int staticInt5633;
+    static public int staticInt5634;
+    static public int staticInt5635;
+    static public int staticInt5636;
+    static public int staticInt5637;
+    static public int staticInt5638;
+    static public int staticInt5639;
+    static public int staticInt5640;
+    static public int staticInt5641;
+    static public int staticInt5642;
+    static public int staticInt5643;
+    static public int staticInt5644;
+    static public int staticInt5645;
+    static public int staticInt5646;
+    static public int staticInt5647;
+    static public int staticInt5648;
+    static public int staticInt5649;
+    static public int staticInt5650;
+    static public int staticInt5651;
+    static public int staticInt5652;
+    static public int staticInt5653;
+    static public int staticInt5654;
+    static public int staticInt5655;
+    static public int staticInt5656;
+    static public int staticInt5657;
+    static public int staticInt5658;
+    static public int staticInt5659;
+    static public int staticInt5660;
+    static public int staticInt5661;
+    static public int staticInt5662;
+    static public int staticInt5663;
+    static public int staticInt5664;
+    static public int staticInt5665;
+    static public int staticInt5666;
+    static public int staticInt5667;
+    static public int staticInt5668;
+    static public int staticInt5669;
+    static public int staticInt5670;
+    static public int staticInt5671;
+    static public int staticInt5672;
+    static public int staticInt5673;
+    static public int staticInt5674;
+    static public int staticInt5675;
+    static public int staticInt5676;
+    static public int staticInt5677;
+    static public int staticInt5678;
+    static public int staticInt5679;
+    static public int staticInt5680;
+    static public int staticInt5681;
+    static public int staticInt5682;
+    static public int staticInt5683;
+    static public int staticInt5684;
+    static public int staticInt5685;
+    static public int staticInt5686;
+    static public int staticInt5687;
+    static public int staticInt5688;
+    static public int staticInt5689;
+    static public int staticInt5690;
+    static public int staticInt5691;
+    static public int staticInt5692;
+    static public int staticInt5693;
+    static public int staticInt5694;
+    static public int staticInt5695;
+    static public int staticInt5696;
+    static public int staticInt5697;
+    static public int staticInt5698;
+    static public int staticInt5699;
+    static public int staticInt5700;
+    static public int staticInt5701;
+    static public int staticInt5702;
+    static public int staticInt5703;
+    static public int staticInt5704;
+    static public int staticInt5705;
+    static public int staticInt5706;
+    static public int staticInt5707;
+    static public int staticInt5708;
+    static public int staticInt5709;
+    static public int staticInt5710;
+    static public int staticInt5711;
+    static public int staticInt5712;
+    static public int staticInt5713;
+    static public int staticInt5714;
+    static public int staticInt5715;
+    static public int staticInt5716;
+    static public int staticInt5717;
+    static public int staticInt5718;
+    static public int staticInt5719;
+    static public int staticInt5720;
+    static public int staticInt5721;
+    static public int staticInt5722;
+    static public int staticInt5723;
+    static public int staticInt5724;
+    static public int staticInt5725;
+    static public int staticInt5726;
+    static public int staticInt5727;
+    static public int staticInt5728;
+    static public int staticInt5729;
+    static public int staticInt5730;
+    static public int staticInt5731;
+    static public int staticInt5732;
+    static public int staticInt5733;
+    static public int staticInt5734;
+    static public int staticInt5735;
+    static public int staticInt5736;
+    static public int staticInt5737;
+    static public int staticInt5738;
+    static public int staticInt5739;
+    static public int staticInt5740;
+    static public int staticInt5741;
+    static public int staticInt5742;
+    static public int staticInt5743;
+    static public int staticInt5744;
+    static public int staticInt5745;
+    static public int staticInt5746;
+    static public int staticInt5747;
+    static public int staticInt5748;
+    static public int staticInt5749;
+    static public int staticInt5750;
+    static public int staticInt5751;
+    static public int staticInt5752;
+    static public int staticInt5753;
+    static public int staticInt5754;
+    static public int staticInt5755;
+    static public int staticInt5756;
+    static public int staticInt5757;
+    static public int staticInt5758;
+    static public int staticInt5759;
+    static public int staticInt5760;
+    static public int staticInt5761;
+    static public int staticInt5762;
+    static public int staticInt5763;
+    static public int staticInt5764;
+    static public int staticInt5765;
+    static public int staticInt5766;
+    static public int staticInt5767;
+    static public int staticInt5768;
+    static public int staticInt5769;
+    static public int staticInt5770;
+    static public int staticInt5771;
+    static public int staticInt5772;
+    static public int staticInt5773;
+    static public int staticInt5774;
+    static public int staticInt5775;
+    static public int staticInt5776;
+    static public int staticInt5777;
+    static public int staticInt5778;
+    static public int staticInt5779;
+    static public int staticInt5780;
+    static public int staticInt5781;
+    static public int staticInt5782;
+    static public int staticInt5783;
+    static public int staticInt5784;
+    static public int staticInt5785;
+    static public int staticInt5786;
+    static public int staticInt5787;
+    static public int staticInt5788;
+    static public int staticInt5789;
+    static public int staticInt5790;
+    static public int staticInt5791;
+    static public int staticInt5792;
+    static public int staticInt5793;
+    static public int staticInt5794;
+    static public int staticInt5795;
+    static public int staticInt5796;
+    static public int staticInt5797;
+    static public int staticInt5798;
+    static public int staticInt5799;
+    static public int staticInt5800;
+    static public int staticInt5801;
+    static public int staticInt5802;
+    static public int staticInt5803;
+    static public int staticInt5804;
+    static public int staticInt5805;
+    static public int staticInt5806;
+    static public int staticInt5807;
+    static public int staticInt5808;
+    static public int staticInt5809;
+    static public int staticInt5810;
+    static public int staticInt5811;
+    static public int staticInt5812;
+    static public int staticInt5813;
+    static public int staticInt5814;
+    static public int staticInt5815;
+    static public int staticInt5816;
+    static public int staticInt5817;
+    static public int staticInt5818;
+    static public int staticInt5819;
+    static public int staticInt5820;
+    static public int staticInt5821;
+    static public int staticInt5822;
+    static public int staticInt5823;
+    static public int staticInt5824;
+    static public int staticInt5825;
+    static public int staticInt5826;
+    static public int staticInt5827;
+    static public int staticInt5828;
+    static public int staticInt5829;
+    static public int staticInt5830;
+    static public int staticInt5831;
+    static public int staticInt5832;
+    static public int staticInt5833;
+    static public int staticInt5834;
+    static public int staticInt5835;
+    static public int staticInt5836;
+    static public int staticInt5837;
+    static public int staticInt5838;
+    static public int staticInt5839;
+    static public int staticInt5840;
+    static public int staticInt5841;
+    static public int staticInt5842;
+    static public int staticInt5843;
+    static public int staticInt5844;
+    static public int staticInt5845;
+    static public int staticInt5846;
+    static public int staticInt5847;
+    static public int staticInt5848;
+    static public int staticInt5849;
+    static public int staticInt5850;
+    static public int staticInt5851;
+    static public int staticInt5852;
+    static public int staticInt5853;
+    static public int staticInt5854;
+    static public int staticInt5855;
+    static public int staticInt5856;
+    static public int staticInt5857;
+    static public int staticInt5858;
+    static public int staticInt5859;
+    static public int staticInt5860;
+    static public int staticInt5861;
+    static public int staticInt5862;
+    static public int staticInt5863;
+    static public int staticInt5864;
+    static public int staticInt5865;
+    static public int staticInt5866;
+    static public int staticInt5867;
+    static public int staticInt5868;
+    static public int staticInt5869;
+    static public int staticInt5870;
+    static public int staticInt5871;
+    static public int staticInt5872;
+    static public int staticInt5873;
+    static public int staticInt5874;
+    static public int staticInt5875;
+    static public int staticInt5876;
+    static public int staticInt5877;
+    static public int staticInt5878;
+    static public int staticInt5879;
+    static public int staticInt5880;
+    static public int staticInt5881;
+    static public int staticInt5882;
+    static public int staticInt5883;
+    static public int staticInt5884;
+    static public int staticInt5885;
+    static public int staticInt5886;
+    static public int staticInt5887;
+    static public int staticInt5888;
+    static public int staticInt5889;
+    static public int staticInt5890;
+    static public int staticInt5891;
+    static public int staticInt5892;
+    static public int staticInt5893;
+    static public int staticInt5894;
+    static public int staticInt5895;
+    static public int staticInt5896;
+    static public int staticInt5897;
+    static public int staticInt5898;
+    static public int staticInt5899;
+    static public int staticInt5900;
+    static public int staticInt5901;
+    static public int staticInt5902;
+    static public int staticInt5903;
+    static public int staticInt5904;
+    static public int staticInt5905;
+    static public int staticInt5906;
+    static public int staticInt5907;
+    static public int staticInt5908;
+    static public int staticInt5909;
+    static public int staticInt5910;
+    static public int staticInt5911;
+    static public int staticInt5912;
+    static public int staticInt5913;
+    static public int staticInt5914;
+    static public int staticInt5915;
+    static public int staticInt5916;
+    static public int staticInt5917;
+    static public int staticInt5918;
+    static public int staticInt5919;
+    static public int staticInt5920;
+    static public int staticInt5921;
+    static public int staticInt5922;
+    static public int staticInt5923;
+    static public int staticInt5924;
+    static public int staticInt5925;
+    static public int staticInt5926;
+    static public int staticInt5927;
+    static public int staticInt5928;
+    static public int staticInt5929;
+    static public int staticInt5930;
+    static public int staticInt5931;
+    static public int staticInt5932;
+    static public int staticInt5933;
+    static public int staticInt5934;
+    static public int staticInt5935;
+    static public int staticInt5936;
+    static public int staticInt5937;
+    static public int staticInt5938;
+    static public int staticInt5939;
+    static public int staticInt5940;
+    static public int staticInt5941;
+    static public int staticInt5942;
+    static public int staticInt5943;
+    static public int staticInt5944;
+    static public int staticInt5945;
+    static public int staticInt5946;
+    static public int staticInt5947;
+    static public int staticInt5948;
+    static public int staticInt5949;
+    static public int staticInt5950;
+    static public int staticInt5951;
+    static public int staticInt5952;
+    static public int staticInt5953;
+    static public int staticInt5954;
+    static public int staticInt5955;
+    static public int staticInt5956;
+    static public int staticInt5957;
+    static public int staticInt5958;
+    static public int staticInt5959;
+    static public int staticInt5960;
+    static public int staticInt5961;
+    static public int staticInt5962;
+    static public int staticInt5963;
+    static public int staticInt5964;
+    static public int staticInt5965;
+    static public int staticInt5966;
+    static public int staticInt5967;
+    static public int staticInt5968;
+    static public int staticInt5969;
+    static public int staticInt5970;
+    static public int staticInt5971;
+    static public int staticInt5972;
+    static public int staticInt5973;
+    static public int staticInt5974;
+    static public int staticInt5975;
+    static public int staticInt5976;
+    static public int staticInt5977;
+    static public int staticInt5978;
+    static public int staticInt5979;
+    static public int staticInt5980;
+    static public int staticInt5981;
+    static public int staticInt5982;
+    static public int staticInt5983;
+    static public int staticInt5984;
+    static public int staticInt5985;
+    static public int staticInt5986;
+    static public int staticInt5987;
+    static public int staticInt5988;
+    static public int staticInt5989;
+    static public int staticInt5990;
+    static public int staticInt5991;
+    static public int staticInt5992;
+    static public int staticInt5993;
+    static public int staticInt5994;
+    static public int staticInt5995;
+    static public int staticInt5996;
+    static public int staticInt5997;
+    static public int staticInt5998;
+    static public int staticInt5999;
+    static public int staticInt6000;
+    static public int staticInt6001;
+    static public int staticInt6002;
+    static public int staticInt6003;
+    static public int staticInt6004;
+    static public int staticInt6005;
+    static public int staticInt6006;
+    static public int staticInt6007;
+    static public int staticInt6008;
+    static public int staticInt6009;
+    static public int staticInt6010;
+    static public int staticInt6011;
+    static public int staticInt6012;
+    static public int staticInt6013;
+    static public int staticInt6014;
+    static public int staticInt6015;
+    static public int staticInt6016;
+    static public int staticInt6017;
+    static public int staticInt6018;
+    static public int staticInt6019;
+    static public int staticInt6020;
+    static public int staticInt6021;
+    static public int staticInt6022;
+    static public int staticInt6023;
+    static public int staticInt6024;
+    static public int staticInt6025;
+    static public int staticInt6026;
+    static public int staticInt6027;
+    static public int staticInt6028;
+    static public int staticInt6029;
+    static public int staticInt6030;
+    static public int staticInt6031;
+    static public int staticInt6032;
+    static public int staticInt6033;
+    static public int staticInt6034;
+    static public int staticInt6035;
+    static public int staticInt6036;
+    static public int staticInt6037;
+    static public int staticInt6038;
+    static public int staticInt6039;
+    static public int staticInt6040;
+    static public int staticInt6041;
+    static public int staticInt6042;
+    static public int staticInt6043;
+    static public int staticInt6044;
+    static public int staticInt6045;
+    static public int staticInt6046;
+    static public int staticInt6047;
+    static public int staticInt6048;
+    static public int staticInt6049;
+    static public int staticInt6050;
+    static public int staticInt6051;
+    static public int staticInt6052;
+    static public int staticInt6053;
+    static public int staticInt6054;
+    static public int staticInt6055;
+    static public int staticInt6056;
+    static public int staticInt6057;
+    static public int staticInt6058;
+    static public int staticInt6059;
+    static public int staticInt6060;
+    static public int staticInt6061;
+    static public int staticInt6062;
+    static public int staticInt6063;
+    static public int staticInt6064;
+    static public int staticInt6065;
+    static public int staticInt6066;
+    static public int staticInt6067;
+    static public int staticInt6068;
+    static public int staticInt6069;
+    static public int staticInt6070;
+    static public int staticInt6071;
+    static public int staticInt6072;
+    static public int staticInt6073;
+    static public int staticInt6074;
+    static public int staticInt6075;
+    static public int staticInt6076;
+    static public int staticInt6077;
+    static public int staticInt6078;
+    static public int staticInt6079;
+    static public int staticInt6080;
+    static public int staticInt6081;
+    static public int staticInt6082;
+    static public int staticInt6083;
+    static public int staticInt6084;
+    static public int staticInt6085;
+    static public int staticInt6086;
+    static public int staticInt6087;
+    static public int staticInt6088;
+    static public int staticInt6089;
+    static public int staticInt6090;
+    static public int staticInt6091;
+    static public int staticInt6092;
+    static public int staticInt6093;
+    static public int staticInt6094;
+    static public int staticInt6095;
+    static public int staticInt6096;
+    static public int staticInt6097;
+    static public int staticInt6098;
+    static public int staticInt6099;
+    static public int staticInt6100;
+    static public int staticInt6101;
+    static public int staticInt6102;
+    static public int staticInt6103;
+    static public int staticInt6104;
+    static public int staticInt6105;
+    static public int staticInt6106;
+    static public int staticInt6107;
+    static public int staticInt6108;
+    static public int staticInt6109;
+    static public int staticInt6110;
+    static public int staticInt6111;
+    static public int staticInt6112;
+    static public int staticInt6113;
+    static public int staticInt6114;
+    static public int staticInt6115;
+    static public int staticInt6116;
+    static public int staticInt6117;
+    static public int staticInt6118;
+    static public int staticInt6119;
+    static public int staticInt6120;
+    static public int staticInt6121;
+    static public int staticInt6122;
+    static public int staticInt6123;
+    static public int staticInt6124;
+    static public int staticInt6125;
+    static public int staticInt6126;
+    static public int staticInt6127;
+    static public int staticInt6128;
+    static public int staticInt6129;
+    static public int staticInt6130;
+    static public int staticInt6131;
+    static public int staticInt6132;
+    static public int staticInt6133;
+    static public int staticInt6134;
+    static public int staticInt6135;
+    static public int staticInt6136;
+    static public int staticInt6137;
+    static public int staticInt6138;
+    static public int staticInt6139;
+    static public int staticInt6140;
+    static public int staticInt6141;
+    static public int staticInt6142;
+    static public int staticInt6143;
+    static public int staticInt6144;
+    static public int staticInt6145;
+    static public int staticInt6146;
+    static public int staticInt6147;
+    static public int staticInt6148;
+    static public int staticInt6149;
+    static public int staticInt6150;
+    static public int staticInt6151;
+    static public int staticInt6152;
+    static public int staticInt6153;
+    static public int staticInt6154;
+    static public int staticInt6155;
+    static public int staticInt6156;
+    static public int staticInt6157;
+    static public int staticInt6158;
+    static public int staticInt6159;
+    static public int staticInt6160;
+    static public int staticInt6161;
+    static public int staticInt6162;
+    static public int staticInt6163;
+    static public int staticInt6164;
+    static public int staticInt6165;
+    static public int staticInt6166;
+    static public int staticInt6167;
+    static public int staticInt6168;
+    static public int staticInt6169;
+    static public int staticInt6170;
+    static public int staticInt6171;
+    static public int staticInt6172;
+    static public int staticInt6173;
+    static public int staticInt6174;
+    static public int staticInt6175;
+    static public int staticInt6176;
+    static public int staticInt6177;
+    static public int staticInt6178;
+    static public int staticInt6179;
+    static public int staticInt6180;
+    static public int staticInt6181;
+    static public int staticInt6182;
+    static public int staticInt6183;
+    static public int staticInt6184;
+    static public int staticInt6185;
+    static public int staticInt6186;
+    static public int staticInt6187;
+    static public int staticInt6188;
+    static public int staticInt6189;
+    static public int staticInt6190;
+    static public int staticInt6191;
+    static public int staticInt6192;
+    static public int staticInt6193;
+    static public int staticInt6194;
+    static public int staticInt6195;
+    static public int staticInt6196;
+    static public int staticInt6197;
+    static public int staticInt6198;
+    static public int staticInt6199;
+    static public int staticInt6200;
+    static public int staticInt6201;
+    static public int staticInt6202;
+    static public int staticInt6203;
+    static public int staticInt6204;
+    static public int staticInt6205;
+    static public int staticInt6206;
+    static public int staticInt6207;
+    static public int staticInt6208;
+    static public int staticInt6209;
+    static public int staticInt6210;
+    static public int staticInt6211;
+    static public int staticInt6212;
+    static public int staticInt6213;
+    static public int staticInt6214;
+    static public int staticInt6215;
+    static public int staticInt6216;
+    static public int staticInt6217;
+    static public int staticInt6218;
+    static public int staticInt6219;
+    static public int staticInt6220;
+    static public int staticInt6221;
+    static public int staticInt6222;
+    static public int staticInt6223;
+    static public int staticInt6224;
+    static public int staticInt6225;
+    static public int staticInt6226;
+    static public int staticInt6227;
+    static public int staticInt6228;
+    static public int staticInt6229;
+    static public int staticInt6230;
+    static public int staticInt6231;
+    static public int staticInt6232;
+    static public int staticInt6233;
+    static public int staticInt6234;
+    static public int staticInt6235;
+    static public int staticInt6236;
+    static public int staticInt6237;
+    static public int staticInt6238;
+    static public int staticInt6239;
+    static public int staticInt6240;
+    static public int staticInt6241;
+    static public int staticInt6242;
+    static public int staticInt6243;
+    static public int staticInt6244;
+    static public int staticInt6245;
+    static public int staticInt6246;
+    static public int staticInt6247;
+    static public int staticInt6248;
+    static public int staticInt6249;
+    static public int staticInt6250;
+    static public int staticInt6251;
+    static public int staticInt6252;
+    static public int staticInt6253;
+    static public int staticInt6254;
+    static public int staticInt6255;
+    static public int staticInt6256;
+    static public int staticInt6257;
+    static public int staticInt6258;
+    static public int staticInt6259;
+    static public int staticInt6260;
+    static public int staticInt6261;
+    static public int staticInt6262;
+    static public int staticInt6263;
+    static public int staticInt6264;
+    static public int staticInt6265;
+    static public int staticInt6266;
+    static public int staticInt6267;
+    static public int staticInt6268;
+    static public int staticInt6269;
+    static public int staticInt6270;
+    static public int staticInt6271;
+    static public int staticInt6272;
+    static public int staticInt6273;
+    static public int staticInt6274;
+    static public int staticInt6275;
+    static public int staticInt6276;
+    static public int staticInt6277;
+    static public int staticInt6278;
+    static public int staticInt6279;
+    static public int staticInt6280;
+    static public int staticInt6281;
+    static public int staticInt6282;
+    static public int staticInt6283;
+    static public int staticInt6284;
+    static public int staticInt6285;
+    static public int staticInt6286;
+    static public int staticInt6287;
+    static public int staticInt6288;
+    static public int staticInt6289;
+    static public int staticInt6290;
+    static public int staticInt6291;
+    static public int staticInt6292;
+    static public int staticInt6293;
+    static public int staticInt6294;
+    static public int staticInt6295;
+    static public int staticInt6296;
+    static public int staticInt6297;
+    static public int staticInt6298;
+    static public int staticInt6299;
+    static public int staticInt6300;
+    static public int staticInt6301;
+    static public int staticInt6302;
+    static public int staticInt6303;
+    static public int staticInt6304;
+    static public int staticInt6305;
+    static public int staticInt6306;
+    static public int staticInt6307;
+    static public int staticInt6308;
+    static public int staticInt6309;
+    static public int staticInt6310;
+    static public int staticInt6311;
+    static public int staticInt6312;
+    static public int staticInt6313;
+    static public int staticInt6314;
+    static public int staticInt6315;
+    static public int staticInt6316;
+    static public int staticInt6317;
+    static public int staticInt6318;
+    static public int staticInt6319;
+    static public int staticInt6320;
+    static public int staticInt6321;
+    static public int staticInt6322;
+    static public int staticInt6323;
+    static public int staticInt6324;
+    static public int staticInt6325;
+    static public int staticInt6326;
+    static public int staticInt6327;
+    static public int staticInt6328;
+    static public int staticInt6329;
+    static public int staticInt6330;
+    static public int staticInt6331;
+    static public int staticInt6332;
+    static public int staticInt6333;
+    static public int staticInt6334;
+    static public int staticInt6335;
+    static public int staticInt6336;
+    static public int staticInt6337;
+    static public int staticInt6338;
+    static public int staticInt6339;
+    static public int staticInt6340;
+    static public int staticInt6341;
+    static public int staticInt6342;
+    static public int staticInt6343;
+    static public int staticInt6344;
+    static public int staticInt6345;
+    static public int staticInt6346;
+    static public int staticInt6347;
+    static public int staticInt6348;
+    static public int staticInt6349;
+    static public int staticInt6350;
+    static public int staticInt6351;
+    static public int staticInt6352;
+    static public int staticInt6353;
+    static public int staticInt6354;
+    static public int staticInt6355;
+    static public int staticInt6356;
+    static public int staticInt6357;
+    static public int staticInt6358;
+    static public int staticInt6359;
+    static public int staticInt6360;
+    static public int staticInt6361;
+    static public int staticInt6362;
+    static public int staticInt6363;
+    static public int staticInt6364;
+    static public int staticInt6365;
+    static public int staticInt6366;
+    static public int staticInt6367;
+    static public int staticInt6368;
+    static public int staticInt6369;
+    static public int staticInt6370;
+    static public int staticInt6371;
+    static public int staticInt6372;
+    static public int staticInt6373;
+    static public int staticInt6374;
+    static public int staticInt6375;
+    static public int staticInt6376;
+    static public int staticInt6377;
+    static public int staticInt6378;
+    static public int staticInt6379;
+    static public int staticInt6380;
+    static public int staticInt6381;
+    static public int staticInt6382;
+    static public int staticInt6383;
+    static public int staticInt6384;
+    static public int staticInt6385;
+    static public int staticInt6386;
+    static public int staticInt6387;
+    static public int staticInt6388;
+    static public int staticInt6389;
+    static public int staticInt6390;
+    static public int staticInt6391;
+    static public int staticInt6392;
+    static public int staticInt6393;
+    static public int staticInt6394;
+    static public int staticInt6395;
+    static public int staticInt6396;
+    static public int staticInt6397;
+    static public int staticInt6398;
+    static public int staticInt6399;
+    static public int staticInt6400;
+    static public int staticInt6401;
+    static public int staticInt6402;
+    static public int staticInt6403;
+    static public int staticInt6404;
+    static public int staticInt6405;
+    static public int staticInt6406;
+    static public int staticInt6407;
+    static public int staticInt6408;
+    static public int staticInt6409;
+    static public int staticInt6410;
+    static public int staticInt6411;
+    static public int staticInt6412;
+    static public int staticInt6413;
+    static public int staticInt6414;
+    static public int staticInt6415;
+    static public int staticInt6416;
+    static public int staticInt6417;
+    static public int staticInt6418;
+    static public int staticInt6419;
+    static public int staticInt6420;
+    static public int staticInt6421;
+    static public int staticInt6422;
+    static public int staticInt6423;
+    static public int staticInt6424;
+    static public int staticInt6425;
+    static public int staticInt6426;
+    static public int staticInt6427;
+    static public int staticInt6428;
+    static public int staticInt6429;
+    static public int staticInt6430;
+    static public int staticInt6431;
+    static public int staticInt6432;
+    static public int staticInt6433;
+    static public int staticInt6434;
+    static public int staticInt6435;
+    static public int staticInt6436;
+    static public int staticInt6437;
+    static public int staticInt6438;
+    static public int staticInt6439;
+    static public int staticInt6440;
+    static public int staticInt6441;
+    static public int staticInt6442;
+    static public int staticInt6443;
+    static public int staticInt6444;
+    static public int staticInt6445;
+    static public int staticInt6446;
+    static public int staticInt6447;
+    static public int staticInt6448;
+    static public int staticInt6449;
+    static public int staticInt6450;
+    static public int staticInt6451;
+    static public int staticInt6452;
+    static public int staticInt6453;
+    static public int staticInt6454;
+    static public int staticInt6455;
+    static public int staticInt6456;
+    static public int staticInt6457;
+    static public int staticInt6458;
+    static public int staticInt6459;
+    static public int staticInt6460;
+    static public int staticInt6461;
+    static public int staticInt6462;
+    static public int staticInt6463;
+    static public int staticInt6464;
+    static public int staticInt6465;
+    static public int staticInt6466;
+    static public int staticInt6467;
+    static public int staticInt6468;
+    static public int staticInt6469;
+    static public int staticInt6470;
+    static public int staticInt6471;
+    static public int staticInt6472;
+    static public int staticInt6473;
+    static public int staticInt6474;
+    static public int staticInt6475;
+    static public int staticInt6476;
+    static public int staticInt6477;
+    static public int staticInt6478;
+    static public int staticInt6479;
+    static public int staticInt6480;
+    static public int staticInt6481;
+    static public int staticInt6482;
+    static public int staticInt6483;
+    static public int staticInt6484;
+    static public int staticInt6485;
+    static public int staticInt6486;
+    static public int staticInt6487;
+    static public int staticInt6488;
+    static public int staticInt6489;
+    static public int staticInt6490;
+    static public int staticInt6491;
+    static public int staticInt6492;
+    static public int staticInt6493;
+    static public int staticInt6494;
+    static public int staticInt6495;
+    static public int staticInt6496;
+    static public int staticInt6497;
+    static public int staticInt6498;
+    static public int staticInt6499;
+    static public int staticInt6500;
+    static public int staticInt6501;
+    static public int staticInt6502;
+    static public int staticInt6503;
+    static public int staticInt6504;
+    static public int staticInt6505;
+    static public int staticInt6506;
+    static public int staticInt6507;
+    static public int staticInt6508;
+    static public int staticInt6509;
+    static public int staticInt6510;
+    static public int staticInt6511;
+    static public int staticInt6512;
+    static public int staticInt6513;
+    static public int staticInt6514;
+    static public int staticInt6515;
+    static public int staticInt6516;
+    static public int staticInt6517;
+    static public int staticInt6518;
+    static public int staticInt6519;
+    static public int staticInt6520;
+    static public int staticInt6521;
+    static public int staticInt6522;
+    static public int staticInt6523;
+    static public int staticInt6524;
+    static public int staticInt6525;
+    static public int staticInt6526;
+    static public int staticInt6527;
+    static public int staticInt6528;
+    static public int staticInt6529;
+    static public int staticInt6530;
+    static public int staticInt6531;
+    static public int staticInt6532;
+    static public int staticInt6533;
+    static public int staticInt6534;
+    static public int staticInt6535;
+    static public int staticInt6536;
+    static public int staticInt6537;
+    static public int staticInt6538;
+    static public int staticInt6539;
+    static public int staticInt6540;
+    static public int staticInt6541;
+    static public int staticInt6542;
+    static public int staticInt6543;
+    static public int staticInt6544;
+    static public int staticInt6545;
+    static public int staticInt6546;
+    static public int staticInt6547;
+    static public int staticInt6548;
+    static public int staticInt6549;
+    static public int staticInt6550;
+    static public int staticInt6551;
+    static public int staticInt6552;
+    static public int staticInt6553;
+    static public int staticInt6554;
+    static public int staticInt6555;
+    static public int staticInt6556;
+    static public int staticInt6557;
+    static public int staticInt6558;
+    static public int staticInt6559;
+    static public int staticInt6560;
+    static public int staticInt6561;
+    static public int staticInt6562;
+    static public int staticInt6563;
+    static public int staticInt6564;
+    static public int staticInt6565;
+    static public int staticInt6566;
+    static public int staticInt6567;
+    static public int staticInt6568;
+    static public int staticInt6569;
+    static public int staticInt6570;
+    static public int staticInt6571;
+    static public int staticInt6572;
+    static public int staticInt6573;
+    static public int staticInt6574;
+    static public int staticInt6575;
+    static public int staticInt6576;
+    static public int staticInt6577;
+    static public int staticInt6578;
+    static public int staticInt6579;
+    static public int staticInt6580;
+    static public int staticInt6581;
+    static public int staticInt6582;
+    static public int staticInt6583;
+    static public int staticInt6584;
+    static public int staticInt6585;
+    static public int staticInt6586;
+    static public int staticInt6587;
+    static public int staticInt6588;
+    static public int staticInt6589;
+    static public int staticInt6590;
+    static public int staticInt6591;
+    static public int staticInt6592;
+    static public int staticInt6593;
+    static public int staticInt6594;
+    static public int staticInt6595;
+    static public int staticInt6596;
+    static public int staticInt6597;
+    static public int staticInt6598;
+    static public int staticInt6599;
+    static public int staticInt6600;
+    static public int staticInt6601;
+    static public int staticInt6602;
+    static public int staticInt6603;
+    static public int staticInt6604;
+    static public int staticInt6605;
+    static public int staticInt6606;
+    static public int staticInt6607;
+    static public int staticInt6608;
+    static public int staticInt6609;
+    static public int staticInt6610;
+    static public int staticInt6611;
+    static public int staticInt6612;
+    static public int staticInt6613;
+    static public int staticInt6614;
+    static public int staticInt6615;
+    static public int staticInt6616;
+    static public int staticInt6617;
+    static public int staticInt6618;
+    static public int staticInt6619;
+    static public int staticInt6620;
+    static public int staticInt6621;
+    static public int staticInt6622;
+    static public int staticInt6623;
+    static public int staticInt6624;
+    static public int staticInt6625;
+    static public int staticInt6626;
+    static public int staticInt6627;
+    static public int staticInt6628;
+    static public int staticInt6629;
+    static public int staticInt6630;
+    static public int staticInt6631;
+    static public int staticInt6632;
+    static public int staticInt6633;
+    static public int staticInt6634;
+    static public int staticInt6635;
+    static public int staticInt6636;
+    static public int staticInt6637;
+    static public int staticInt6638;
+    static public int staticInt6639;
+    static public int staticInt6640;
+    static public int staticInt6641;
+    static public int staticInt6642;
+    static public int staticInt6643;
+    static public int staticInt6644;
+    static public int staticInt6645;
+    static public int staticInt6646;
+    static public int staticInt6647;
+    static public int staticInt6648;
+    static public int staticInt6649;
+    static public int staticInt6650;
+    static public int staticInt6651;
+    static public int staticInt6652;
+    static public int staticInt6653;
+    static public int staticInt6654;
+    static public int staticInt6655;
+    static public int staticInt6656;
+    static public int staticInt6657;
+    static public int staticInt6658;
+    static public int staticInt6659;
+    static public int staticInt6660;
+    static public int staticInt6661;
+    static public int staticInt6662;
+    static public int staticInt6663;
+    static public int staticInt6664;
+    static public int staticInt6665;
+    static public int staticInt6666;
+    static public int staticInt6667;
+    static public int staticInt6668;
+    static public int staticInt6669;
+    static public int staticInt6670;
+    static public int staticInt6671;
+    static public int staticInt6672;
+    static public int staticInt6673;
+    static public int staticInt6674;
+    static public int staticInt6675;
+    static public int staticInt6676;
+    static public int staticInt6677;
+    static public int staticInt6678;
+    static public int staticInt6679;
+    static public int staticInt6680;
+    static public int staticInt6681;
+    static public int staticInt6682;
+    static public int staticInt6683;
+    static public int staticInt6684;
+    static public int staticInt6685;
+    static public int staticInt6686;
+    static public int staticInt6687;
+    static public int staticInt6688;
+    static public int staticInt6689;
+    static public int staticInt6690;
+    static public int staticInt6691;
+    static public int staticInt6692;
+    static public int staticInt6693;
+    static public int staticInt6694;
+    static public int staticInt6695;
+    static public int staticInt6696;
+    static public int staticInt6697;
+    static public int staticInt6698;
+    static public int staticInt6699;
+    static public int staticInt6700;
+    static public int staticInt6701;
+    static public int staticInt6702;
+    static public int staticInt6703;
+    static public int staticInt6704;
+    static public int staticInt6705;
+    static public int staticInt6706;
+    static public int staticInt6707;
+    static public int staticInt6708;
+    static public int staticInt6709;
+    static public int staticInt6710;
+    static public int staticInt6711;
+    static public int staticInt6712;
+    static public int staticInt6713;
+    static public int staticInt6714;
+    static public int staticInt6715;
+    static public int staticInt6716;
+    static public int staticInt6717;
+    static public int staticInt6718;
+    static public int staticInt6719;
+    static public int staticInt6720;
+    static public int staticInt6721;
+    static public int staticInt6722;
+    static public int staticInt6723;
+    static public int staticInt6724;
+    static public int staticInt6725;
+    static public int staticInt6726;
+    static public int staticInt6727;
+    static public int staticInt6728;
+    static public int staticInt6729;
+    static public int staticInt6730;
+    static public int staticInt6731;
+    static public int staticInt6732;
+    static public int staticInt6733;
+    static public int staticInt6734;
+    static public int staticInt6735;
+    static public int staticInt6736;
+    static public int staticInt6737;
+    static public int staticInt6738;
+    static public int staticInt6739;
+    static public int staticInt6740;
+    static public int staticInt6741;
+    static public int staticInt6742;
+    static public int staticInt6743;
+    static public int staticInt6744;
+    static public int staticInt6745;
+    static public int staticInt6746;
+    static public int staticInt6747;
+    static public int staticInt6748;
+    static public int staticInt6749;
+    static public int staticInt6750;
+    static public int staticInt6751;
+    static public int staticInt6752;
+    static public int staticInt6753;
+    static public int staticInt6754;
+    static public int staticInt6755;
+    static public int staticInt6756;
+    static public int staticInt6757;
+    static public int staticInt6758;
+    static public int staticInt6759;
+    static public int staticInt6760;
+    static public int staticInt6761;
+    static public int staticInt6762;
+    static public int staticInt6763;
+    static public int staticInt6764;
+    static public int staticInt6765;
+    static public int staticInt6766;
+    static public int staticInt6767;
+    static public int staticInt6768;
+    static public int staticInt6769;
+    static public int staticInt6770;
+    static public int staticInt6771;
+    static public int staticInt6772;
+    static public int staticInt6773;
+    static public int staticInt6774;
+    static public int staticInt6775;
+    static public int staticInt6776;
+    static public int staticInt6777;
+    static public int staticInt6778;
+    static public int staticInt6779;
+    static public int staticInt6780;
+    static public int staticInt6781;
+    static public int staticInt6782;
+    static public int staticInt6783;
+    static public int staticInt6784;
+    static public int staticInt6785;
+    static public int staticInt6786;
+    static public int staticInt6787;
+    static public int staticInt6788;
+    static public int staticInt6789;
+    static public int staticInt6790;
+    static public int staticInt6791;
+    static public int staticInt6792;
+    static public int staticInt6793;
+    static public int staticInt6794;
+    static public int staticInt6795;
+    static public int staticInt6796;
+    static public int staticInt6797;
+    static public int staticInt6798;
+    static public int staticInt6799;
+    static public int staticInt6800;
+    static public int staticInt6801;
+    static public int staticInt6802;
+    static public int staticInt6803;
+    static public int staticInt6804;
+    static public int staticInt6805;
+    static public int staticInt6806;
+    static public int staticInt6807;
+    static public int staticInt6808;
+    static public int staticInt6809;
+    static public int staticInt6810;
+    static public int staticInt6811;
+    static public int staticInt6812;
+    static public int staticInt6813;
+    static public int staticInt6814;
+    static public int staticInt6815;
+    static public int staticInt6816;
+    static public int staticInt6817;
+    static public int staticInt6818;
+    static public int staticInt6819;
+    static public int staticInt6820;
+    static public int staticInt6821;
+    static public int staticInt6822;
+    static public int staticInt6823;
+    static public int staticInt6824;
+    static public int staticInt6825;
+    static public int staticInt6826;
+    static public int staticInt6827;
+    static public int staticInt6828;
+    static public int staticInt6829;
+    static public int staticInt6830;
+    static public int staticInt6831;
+    static public int staticInt6832;
+    static public int staticInt6833;
+    static public int staticInt6834;
+    static public int staticInt6835;
+    static public int staticInt6836;
+    static public int staticInt6837;
+    static public int staticInt6838;
+    static public int staticInt6839;
+    static public int staticInt6840;
+    static public int staticInt6841;
+    static public int staticInt6842;
+    static public int staticInt6843;
+    static public int staticInt6844;
+    static public int staticInt6845;
+    static public int staticInt6846;
+    static public int staticInt6847;
+    static public int staticInt6848;
+    static public int staticInt6849;
+    static public int staticInt6850;
+    static public int staticInt6851;
+    static public int staticInt6852;
+    static public int staticInt6853;
+    static public int staticInt6854;
+    static public int staticInt6855;
+    static public int staticInt6856;
+    static public int staticInt6857;
+    static public int staticInt6858;
+    static public int staticInt6859;
+    static public int staticInt6860;
+    static public int staticInt6861;
+    static public int staticInt6862;
+    static public int staticInt6863;
+    static public int staticInt6864;
+    static public int staticInt6865;
+    static public int staticInt6866;
+    static public int staticInt6867;
+    static public int staticInt6868;
+    static public int staticInt6869;
+    static public int staticInt6870;
+    static public int staticInt6871;
+    static public int staticInt6872;
+    static public int staticInt6873;
+    static public int staticInt6874;
+    static public int staticInt6875;
+    static public int staticInt6876;
+    static public int staticInt6877;
+    static public int staticInt6878;
+    static public int staticInt6879;
+    static public int staticInt6880;
+    static public int staticInt6881;
+    static public int staticInt6882;
+    static public int staticInt6883;
+    static public int staticInt6884;
+    static public int staticInt6885;
+    static public int staticInt6886;
+    static public int staticInt6887;
+    static public int staticInt6888;
+    static public int staticInt6889;
+    static public int staticInt6890;
+    static public int staticInt6891;
+    static public int staticInt6892;
+    static public int staticInt6893;
+    static public int staticInt6894;
+    static public int staticInt6895;
+    static public int staticInt6896;
+    static public int staticInt6897;
+    static public int staticInt6898;
+    static public int staticInt6899;
+    static public int staticInt6900;
+    static public int staticInt6901;
+    static public int staticInt6902;
+    static public int staticInt6903;
+    static public int staticInt6904;
+    static public int staticInt6905;
+    static public int staticInt6906;
+    static public int staticInt6907;
+    static public int staticInt6908;
+    static public int staticInt6909;
+    static public int staticInt6910;
+    static public int staticInt6911;
+    static public int staticInt6912;
+    static public int staticInt6913;
+    static public int staticInt6914;
+    static public int staticInt6915;
+    static public int staticInt6916;
+    static public int staticInt6917;
+    static public int staticInt6918;
+    static public int staticInt6919;
+    static public int staticInt6920;
+    static public int staticInt6921;
+    static public int staticInt6922;
+    static public int staticInt6923;
+    static public int staticInt6924;
+    static public int staticInt6925;
+    static public int staticInt6926;
+    static public int staticInt6927;
+    static public int staticInt6928;
+    static public int staticInt6929;
+    static public int staticInt6930;
+    static public int staticInt6931;
+    static public int staticInt6932;
+    static public int staticInt6933;
+    static public int staticInt6934;
+    static public int staticInt6935;
+    static public int staticInt6936;
+    static public int staticInt6937;
+    static public int staticInt6938;
+    static public int staticInt6939;
+    static public int staticInt6940;
+    static public int staticInt6941;
+    static public int staticInt6942;
+    static public int staticInt6943;
+    static public int staticInt6944;
+    static public int staticInt6945;
+    static public int staticInt6946;
+    static public int staticInt6947;
+    static public int staticInt6948;
+    static public int staticInt6949;
+    static public int staticInt6950;
+    static public int staticInt6951;
+    static public int staticInt6952;
+    static public int staticInt6953;
+    static public int staticInt6954;
+    static public int staticInt6955;
+    static public int staticInt6956;
+    static public int staticInt6957;
+    static public int staticInt6958;
+    static public int staticInt6959;
+    static public int staticInt6960;
+    static public int staticInt6961;
+    static public int staticInt6962;
+    static public int staticInt6963;
+    static public int staticInt6964;
+    static public int staticInt6965;
+    static public int staticInt6966;
+    static public int staticInt6967;
+    static public int staticInt6968;
+    static public int staticInt6969;
+    static public int staticInt6970;
+    static public int staticInt6971;
+    static public int staticInt6972;
+    static public int staticInt6973;
+    static public int staticInt6974;
+    static public int staticInt6975;
+    static public int staticInt6976;
+    static public int staticInt6977;
+    static public int staticInt6978;
+    static public int staticInt6979;
+    static public int staticInt6980;
+    static public int staticInt6981;
+    static public int staticInt6982;
+    static public int staticInt6983;
+    static public int staticInt6984;
+    static public int staticInt6985;
+    static public int staticInt6986;
+    static public int staticInt6987;
+    static public int staticInt6988;
+    static public int staticInt6989;
+    static public int staticInt6990;
+    static public int staticInt6991;
+    static public int staticInt6992;
+    static public int staticInt6993;
+    static public int staticInt6994;
+    static public int staticInt6995;
+    static public int staticInt6996;
+    static public int staticInt6997;
+    static public int staticInt6998;
+    static public int staticInt6999;
+    static public int staticInt7000;
+    static public int staticInt7001;
+    static public int staticInt7002;
+    static public int staticInt7003;
+    static public int staticInt7004;
+    static public int staticInt7005;
+    static public int staticInt7006;
+    static public int staticInt7007;
+    static public int staticInt7008;
+    static public int staticInt7009;
+    static public int staticInt7010;
+    static public int staticInt7011;
+    static public int staticInt7012;
+    static public int staticInt7013;
+    static public int staticInt7014;
+    static public int staticInt7015;
+    static public int staticInt7016;
+    static public int staticInt7017;
+    static public int staticInt7018;
+    static public int staticInt7019;
+    static public int staticInt7020;
+    static public int staticInt7021;
+    static public int staticInt7022;
+    static public int staticInt7023;
+    static public int staticInt7024;
+    static public int staticInt7025;
+    static public int staticInt7026;
+    static public int staticInt7027;
+    static public int staticInt7028;
+    static public int staticInt7029;
+    static public int staticInt7030;
+    static public int staticInt7031;
+    static public int staticInt7032;
+    static public int staticInt7033;
+    static public int staticInt7034;
+    static public int staticInt7035;
+    static public int staticInt7036;
+    static public int staticInt7037;
+    static public int staticInt7038;
+    static public int staticInt7039;
+    static public int staticInt7040;
+    static public int staticInt7041;
+    static public int staticInt7042;
+    static public int staticInt7043;
+    static public int staticInt7044;
+    static public int staticInt7045;
+    static public int staticInt7046;
+    static public int staticInt7047;
+    static public int staticInt7048;
+    static public int staticInt7049;
+    static public int staticInt7050;
+    static public int staticInt7051;
+    static public int staticInt7052;
+    static public int staticInt7053;
+    static public int staticInt7054;
+    static public int staticInt7055;
+    static public int staticInt7056;
+    static public int staticInt7057;
+    static public int staticInt7058;
+    static public int staticInt7059;
+    static public int staticInt7060;
+    static public int staticInt7061;
+    static public int staticInt7062;
+    static public int staticInt7063;
+    static public int staticInt7064;
+    static public int staticInt7065;
+    static public int staticInt7066;
+    static public int staticInt7067;
+    static public int staticInt7068;
+    static public int staticInt7069;
+    static public int staticInt7070;
+    static public int staticInt7071;
+    static public int staticInt7072;
+    static public int staticInt7073;
+    static public int staticInt7074;
+    static public int staticInt7075;
+    static public int staticInt7076;
+    static public int staticInt7077;
+    static public int staticInt7078;
+    static public int staticInt7079;
+    static public int staticInt7080;
+    static public int staticInt7081;
+    static public int staticInt7082;
+    static public int staticInt7083;
+    static public int staticInt7084;
+    static public int staticInt7085;
+    static public int staticInt7086;
+    static public int staticInt7087;
+    static public int staticInt7088;
+    static public int staticInt7089;
+    static public int staticInt7090;
+    static public int staticInt7091;
+    static public int staticInt7092;
+    static public int staticInt7093;
+    static public int staticInt7094;
+    static public int staticInt7095;
+    static public int staticInt7096;
+    static public int staticInt7097;
+    static public int staticInt7098;
+    static public int staticInt7099;
+    static public int staticInt7100;
+    static public int staticInt7101;
+    static public int staticInt7102;
+    static public int staticInt7103;
+    static public int staticInt7104;
+    static public int staticInt7105;
+    static public int staticInt7106;
+    static public int staticInt7107;
+    static public int staticInt7108;
+    static public int staticInt7109;
+    static public int staticInt7110;
+    static public int staticInt7111;
+    static public int staticInt7112;
+    static public int staticInt7113;
+    static public int staticInt7114;
+    static public int staticInt7115;
+    static public int staticInt7116;
+    static public int staticInt7117;
+    static public int staticInt7118;
+    static public int staticInt7119;
+    static public int staticInt7120;
+    static public int staticInt7121;
+    static public int staticInt7122;
+    static public int staticInt7123;
+    static public int staticInt7124;
+    static public int staticInt7125;
+    static public int staticInt7126;
+    static public int staticInt7127;
+    static public int staticInt7128;
+    static public int staticInt7129;
+    static public int staticInt7130;
+    static public int staticInt7131;
+    static public int staticInt7132;
+    static public int staticInt7133;
+    static public int staticInt7134;
+    static public int staticInt7135;
+    static public int staticInt7136;
+    static public int staticInt7137;
+    static public int staticInt7138;
+    static public int staticInt7139;
+    static public int staticInt7140;
+    static public int staticInt7141;
+    static public int staticInt7142;
+    static public int staticInt7143;
+    static public int staticInt7144;
+    static public int staticInt7145;
+    static public int staticInt7146;
+    static public int staticInt7147;
+    static public int staticInt7148;
+    static public int staticInt7149;
+    static public int staticInt7150;
+    static public int staticInt7151;
+    static public int staticInt7152;
+    static public int staticInt7153;
+    static public int staticInt7154;
+    static public int staticInt7155;
+    static public int staticInt7156;
+    static public int staticInt7157;
+    static public int staticInt7158;
+    static public int staticInt7159;
+    static public int staticInt7160;
+    static public int staticInt7161;
+    static public int staticInt7162;
+    static public int staticInt7163;
+    static public int staticInt7164;
+    static public int staticInt7165;
+    static public int staticInt7166;
+    static public int staticInt7167;
+    static public int staticInt7168;
+    static public int staticInt7169;
+    static public int staticInt7170;
+    static public int staticInt7171;
+    static public int staticInt7172;
+    static public int staticInt7173;
+    static public int staticInt7174;
+    static public int staticInt7175;
+    static public int staticInt7176;
+    static public int staticInt7177;
+    static public int staticInt7178;
+    static public int staticInt7179;
+    static public int staticInt7180;
+    static public int staticInt7181;
+    static public int staticInt7182;
+    static public int staticInt7183;
+    static public int staticInt7184;
+    static public int staticInt7185;
+    static public int staticInt7186;
+    static public int staticInt7187;
+    static public int staticInt7188;
+    static public int staticInt7189;
+    static public int staticInt7190;
+    static public int staticInt7191;
+    static public int staticInt7192;
+    static public int staticInt7193;
+    static public int staticInt7194;
+    static public int staticInt7195;
+    static public int staticInt7196;
+    static public int staticInt7197;
+    static public int staticInt7198;
+    static public int staticInt7199;
+    static public int staticInt7200;
+    static public int staticInt7201;
+    static public int staticInt7202;
+    static public int staticInt7203;
+    static public int staticInt7204;
+    static public int staticInt7205;
+    static public int staticInt7206;
+    static public int staticInt7207;
+    static public int staticInt7208;
+    static public int staticInt7209;
+    static public int staticInt7210;
+    static public int staticInt7211;
+    static public int staticInt7212;
+    static public int staticInt7213;
+    static public int staticInt7214;
+    static public int staticInt7215;
+    static public int staticInt7216;
+    static public int staticInt7217;
+    static public int staticInt7218;
+    static public int staticInt7219;
+    static public int staticInt7220;
+    static public int staticInt7221;
+    static public int staticInt7222;
+    static public int staticInt7223;
+    static public int staticInt7224;
+    static public int staticInt7225;
+    static public int staticInt7226;
+    static public int staticInt7227;
+    static public int staticInt7228;
+    static public int staticInt7229;
+    static public int staticInt7230;
+    static public int staticInt7231;
+    static public int staticInt7232;
+    static public int staticInt7233;
+    static public int staticInt7234;
+    static public int staticInt7235;
+    static public int staticInt7236;
+    static public int staticInt7237;
+    static public int staticInt7238;
+    static public int staticInt7239;
+    static public int staticInt7240;
+    static public int staticInt7241;
+    static public int staticInt7242;
+    static public int staticInt7243;
+    static public int staticInt7244;
+    static public int staticInt7245;
+    static public int staticInt7246;
+    static public int staticInt7247;
+    static public int staticInt7248;
+    static public int staticInt7249;
+    static public int staticInt7250;
+    static public int staticInt7251;
+    static public int staticInt7252;
+    static public int staticInt7253;
+    static public int staticInt7254;
+    static public int staticInt7255;
+    static public int staticInt7256;
+    static public int staticInt7257;
+    static public int staticInt7258;
+    static public int staticInt7259;
+    static public int staticInt7260;
+    static public int staticInt7261;
+    static public int staticInt7262;
+    static public int staticInt7263;
+    static public int staticInt7264;
+    static public int staticInt7265;
+    static public int staticInt7266;
+    static public int staticInt7267;
+    static public int staticInt7268;
+    static public int staticInt7269;
+    static public int staticInt7270;
+    static public int staticInt7271;
+    static public int staticInt7272;
+    static public int staticInt7273;
+    static public int staticInt7274;
+    static public int staticInt7275;
+    static public int staticInt7276;
+    static public int staticInt7277;
+    static public int staticInt7278;
+    static public int staticInt7279;
+    static public int staticInt7280;
+    static public int staticInt7281;
+    static public int staticInt7282;
+    static public int staticInt7283;
+    static public int staticInt7284;
+    static public int staticInt7285;
+    static public int staticInt7286;
+    static public int staticInt7287;
+    static public int staticInt7288;
+    static public int staticInt7289;
+    static public int staticInt7290;
+    static public int staticInt7291;
+    static public int staticInt7292;
+    static public int staticInt7293;
+    static public int staticInt7294;
+    static public int staticInt7295;
+    static public int staticInt7296;
+    static public int staticInt7297;
+    static public int staticInt7298;
+    static public int staticInt7299;
+    static public int staticInt7300;
+    static public int staticInt7301;
+    static public int staticInt7302;
+    static public int staticInt7303;
+    static public int staticInt7304;
+    static public int staticInt7305;
+    static public int staticInt7306;
+    static public int staticInt7307;
+    static public int staticInt7308;
+    static public int staticInt7309;
+    static public int staticInt7310;
+    static public int staticInt7311;
+    static public int staticInt7312;
+    static public int staticInt7313;
+    static public int staticInt7314;
+    static public int staticInt7315;
+    static public int staticInt7316;
+    static public int staticInt7317;
+    static public int staticInt7318;
+    static public int staticInt7319;
+    static public int staticInt7320;
+    static public int staticInt7321;
+    static public int staticInt7322;
+    static public int staticInt7323;
+    static public int staticInt7324;
+    static public int staticInt7325;
+    static public int staticInt7326;
+    static public int staticInt7327;
+    static public int staticInt7328;
+    static public int staticInt7329;
+    static public int staticInt7330;
+    static public int staticInt7331;
+    static public int staticInt7332;
+    static public int staticInt7333;
+    static public int staticInt7334;
+    static public int staticInt7335;
+    static public int staticInt7336;
+    static public int staticInt7337;
+    static public int staticInt7338;
+    static public int staticInt7339;
+    static public int staticInt7340;
+    static public int staticInt7341;
+    static public int staticInt7342;
+    static public int staticInt7343;
+    static public int staticInt7344;
+    static public int staticInt7345;
+    static public int staticInt7346;
+    static public int staticInt7347;
+    static public int staticInt7348;
+    static public int staticInt7349;
+    static public int staticInt7350;
+    static public int staticInt7351;
+    static public int staticInt7352;
+    static public int staticInt7353;
+    static public int staticInt7354;
+    static public int staticInt7355;
+    static public int staticInt7356;
+    static public int staticInt7357;
+    static public int staticInt7358;
+    static public int staticInt7359;
+    static public int staticInt7360;
+    static public int staticInt7361;
+    static public int staticInt7362;
+    static public int staticInt7363;
+    static public int staticInt7364;
+    static public int staticInt7365;
+    static public int staticInt7366;
+    static public int staticInt7367;
+    static public int staticInt7368;
+    static public int staticInt7369;
+    static public int staticInt7370;
+    static public int staticInt7371;
+    static public int staticInt7372;
+    static public int staticInt7373;
+    static public int staticInt7374;
+    static public int staticInt7375;
+    static public int staticInt7376;
+    static public int staticInt7377;
+    static public int staticInt7378;
+    static public int staticInt7379;
+    static public int staticInt7380;
+    static public int staticInt7381;
+    static public int staticInt7382;
+    static public int staticInt7383;
+    static public int staticInt7384;
+    static public int staticInt7385;
+    static public int staticInt7386;
+    static public int staticInt7387;
+    static public int staticInt7388;
+    static public int staticInt7389;
+    static public int staticInt7390;
+    static public int staticInt7391;
+    static public int staticInt7392;
+    static public int staticInt7393;
+    static public int staticInt7394;
+    static public int staticInt7395;
+    static public int staticInt7396;
+    static public int staticInt7397;
+    static public int staticInt7398;
+    static public int staticInt7399;
+    static public int staticInt7400;
+    static public int staticInt7401;
+    static public int staticInt7402;
+    static public int staticInt7403;
+    static public int staticInt7404;
+    static public int staticInt7405;
+    static public int staticInt7406;
+    static public int staticInt7407;
+    static public int staticInt7408;
+    static public int staticInt7409;
+    static public int staticInt7410;
+    static public int staticInt7411;
+    static public int staticInt7412;
+    static public int staticInt7413;
+    static public int staticInt7414;
+    static public int staticInt7415;
+    static public int staticInt7416;
+    static public int staticInt7417;
+    static public int staticInt7418;
+    static public int staticInt7419;
+    static public int staticInt7420;
+    static public int staticInt7421;
+    static public int staticInt7422;
+    static public int staticInt7423;
+    static public int staticInt7424;
+    static public int staticInt7425;
+    static public int staticInt7426;
+    static public int staticInt7427;
+    static public int staticInt7428;
+    static public int staticInt7429;
+    static public int staticInt7430;
+    static public int staticInt7431;
+    static public int staticInt7432;
+    static public int staticInt7433;
+    static public int staticInt7434;
+    static public int staticInt7435;
+    static public int staticInt7436;
+    static public int staticInt7437;
+    static public int staticInt7438;
+    static public int staticInt7439;
+    static public int staticInt7440;
+    static public int staticInt7441;
+    static public int staticInt7442;
+    static public int staticInt7443;
+    static public int staticInt7444;
+    static public int staticInt7445;
+    static public int staticInt7446;
+    static public int staticInt7447;
+    static public int staticInt7448;
+    static public int staticInt7449;
+    static public int staticInt7450;
+    static public int staticInt7451;
+    static public int staticInt7452;
+    static public int staticInt7453;
+    static public int staticInt7454;
+    static public int staticInt7455;
+    static public int staticInt7456;
+    static public int staticInt7457;
+    static public int staticInt7458;
+    static public int staticInt7459;
+    static public int staticInt7460;
+    static public int staticInt7461;
+    static public int staticInt7462;
+    static public int staticInt7463;
+    static public int staticInt7464;
+    static public int staticInt7465;
+    static public int staticInt7466;
+    static public int staticInt7467;
+    static public int staticInt7468;
+    static public int staticInt7469;
+    static public int staticInt7470;
+    static public int staticInt7471;
+    static public int staticInt7472;
+    static public int staticInt7473;
+    static public int staticInt7474;
+    static public int staticInt7475;
+    static public int staticInt7476;
+    static public int staticInt7477;
+    static public int staticInt7478;
+    static public int staticInt7479;
+    static public int staticInt7480;
+    static public int staticInt7481;
+    static public int staticInt7482;
+    static public int staticInt7483;
+    static public int staticInt7484;
+    static public int staticInt7485;
+    static public int staticInt7486;
+    static public int staticInt7487;
+    static public int staticInt7488;
+    static public int staticInt7489;
+    static public int staticInt7490;
+    static public int staticInt7491;
+    static public int staticInt7492;
+    static public int staticInt7493;
+    static public int staticInt7494;
+    static public int staticInt7495;
+    static public int staticInt7496;
+    static public int staticInt7497;
+    static public int staticInt7498;
+    static public int staticInt7499;
+    static public int staticInt7500;
+    static public int staticInt7501;
+    static public int staticInt7502;
+    static public int staticInt7503;
+    static public int staticInt7504;
+    static public int staticInt7505;
+    static public int staticInt7506;
+    static public int staticInt7507;
+    static public int staticInt7508;
+    static public int staticInt7509;
+    static public int staticInt7510;
+    static public int staticInt7511;
+    static public int staticInt7512;
+    static public int staticInt7513;
+    static public int staticInt7514;
+    static public int staticInt7515;
+    static public int staticInt7516;
+    static public int staticInt7517;
+    static public int staticInt7518;
+    static public int staticInt7519;
+    static public int staticInt7520;
+    static public int staticInt7521;
+    static public int staticInt7522;
+    static public int staticInt7523;
+    static public int staticInt7524;
+    static public int staticInt7525;
+    static public int staticInt7526;
+    static public int staticInt7527;
+    static public int staticInt7528;
+    static public int staticInt7529;
+    static public int staticInt7530;
+    static public int staticInt7531;
+    static public int staticInt7532;
+    static public int staticInt7533;
+    static public int staticInt7534;
+    static public int staticInt7535;
+    static public int staticInt7536;
+    static public int staticInt7537;
+    static public int staticInt7538;
+    static public int staticInt7539;
+    static public int staticInt7540;
+    static public int staticInt7541;
+    static public int staticInt7542;
+    static public int staticInt7543;
+    static public int staticInt7544;
+    static public int staticInt7545;
+    static public int staticInt7546;
+    static public int staticInt7547;
+    static public int staticInt7548;
+    static public int staticInt7549;
+    static public int staticInt7550;
+    static public int staticInt7551;
+    static public int staticInt7552;
+    static public int staticInt7553;
+    static public int staticInt7554;
+    static public int staticInt7555;
+    static public int staticInt7556;
+    static public int staticInt7557;
+    static public int staticInt7558;
+    static public int staticInt7559;
+    static public int staticInt7560;
+    static public int staticInt7561;
+    static public int staticInt7562;
+    static public int staticInt7563;
+    static public int staticInt7564;
+    static public int staticInt7565;
+    static public int staticInt7566;
+    static public int staticInt7567;
+    static public int staticInt7568;
+    static public int staticInt7569;
+    static public int staticInt7570;
+    static public int staticInt7571;
+    static public int staticInt7572;
+    static public int staticInt7573;
+    static public int staticInt7574;
+    static public int staticInt7575;
+    static public int staticInt7576;
+    static public int staticInt7577;
+    static public int staticInt7578;
+    static public int staticInt7579;
+    static public int staticInt7580;
+    static public int staticInt7581;
+    static public int staticInt7582;
+    static public int staticInt7583;
+    static public int staticInt7584;
+    static public int staticInt7585;
+    static public int staticInt7586;
+    static public int staticInt7587;
+    static public int staticInt7588;
+    static public int staticInt7589;
+    static public int staticInt7590;
+    static public int staticInt7591;
+    static public int staticInt7592;
+    static public int staticInt7593;
+    static public int staticInt7594;
+    static public int staticInt7595;
+    static public int staticInt7596;
+    static public int staticInt7597;
+    static public int staticInt7598;
+    static public int staticInt7599;
+    static public int staticInt7600;
+    static public int staticInt7601;
+    static public int staticInt7602;
+    static public int staticInt7603;
+    static public int staticInt7604;
+    static public int staticInt7605;
+    static public int staticInt7606;
+    static public int staticInt7607;
+    static public int staticInt7608;
+    static public int staticInt7609;
+    static public int staticInt7610;
+    static public int staticInt7611;
+    static public int staticInt7612;
+    static public int staticInt7613;
+    static public int staticInt7614;
+    static public int staticInt7615;
+    static public int staticInt7616;
+    static public int staticInt7617;
+    static public int staticInt7618;
+    static public int staticInt7619;
+    static public int staticInt7620;
+    static public int staticInt7621;
+    static public int staticInt7622;
+    static public int staticInt7623;
+    static public int staticInt7624;
+    static public int staticInt7625;
+    static public int staticInt7626;
+    static public int staticInt7627;
+    static public int staticInt7628;
+    static public int staticInt7629;
+    static public int staticInt7630;
+    static public int staticInt7631;
+    static public int staticInt7632;
+    static public int staticInt7633;
+    static public int staticInt7634;
+    static public int staticInt7635;
+    static public int staticInt7636;
+    static public int staticInt7637;
+    static public int staticInt7638;
+    static public int staticInt7639;
+    static public int staticInt7640;
+    static public int staticInt7641;
+    static public int staticInt7642;
+    static public int staticInt7643;
+    static public int staticInt7644;
+    static public int staticInt7645;
+    static public int staticInt7646;
+    static public int staticInt7647;
+    static public int staticInt7648;
+    static public int staticInt7649;
+    static public int staticInt7650;
+    static public int staticInt7651;
+    static public int staticInt7652;
+    static public int staticInt7653;
+    static public int staticInt7654;
+    static public int staticInt7655;
+    static public int staticInt7656;
+    static public int staticInt7657;
+    static public int staticInt7658;
+    static public int staticInt7659;
+    static public int staticInt7660;
+    static public int staticInt7661;
+    static public int staticInt7662;
+    static public int staticInt7663;
+    static public int staticInt7664;
+    static public int staticInt7665;
+    static public int staticInt7666;
+    static public int staticInt7667;
+    static public int staticInt7668;
+    static public int staticInt7669;
+    static public int staticInt7670;
+    static public int staticInt7671;
+    static public int staticInt7672;
+    static public int staticInt7673;
+    static public int staticInt7674;
+    static public int staticInt7675;
+    static public int staticInt7676;
+    static public int staticInt7677;
+    static public int staticInt7678;
+    static public int staticInt7679;
+    static public int staticInt7680;
+    static public int staticInt7681;
+    static public int staticInt7682;
+    static public int staticInt7683;
+    static public int staticInt7684;
+    static public int staticInt7685;
+    static public int staticInt7686;
+    static public int staticInt7687;
+    static public int staticInt7688;
+    static public int staticInt7689;
+    static public int staticInt7690;
+    static public int staticInt7691;
+    static public int staticInt7692;
+    static public int staticInt7693;
+    static public int staticInt7694;
+    static public int staticInt7695;
+    static public int staticInt7696;
+    static public int staticInt7697;
+    static public int staticInt7698;
+    static public int staticInt7699;
+    static public int staticInt7700;
+    static public int staticInt7701;
+    static public int staticInt7702;
+    static public int staticInt7703;
+    static public int staticInt7704;
+    static public int staticInt7705;
+    static public int staticInt7706;
+    static public int staticInt7707;
+    static public int staticInt7708;
+    static public int staticInt7709;
+    static public int staticInt7710;
+    static public int staticInt7711;
+    static public int staticInt7712;
+    static public int staticInt7713;
+    static public int staticInt7714;
+    static public int staticInt7715;
+    static public int staticInt7716;
+    static public int staticInt7717;
+    static public int staticInt7718;
+    static public int staticInt7719;
+    static public int staticInt7720;
+    static public int staticInt7721;
+    static public int staticInt7722;
+    static public int staticInt7723;
+    static public int staticInt7724;
+    static public int staticInt7725;
+    static public int staticInt7726;
+    static public int staticInt7727;
+    static public int staticInt7728;
+    static public int staticInt7729;
+    static public int staticInt7730;
+    static public int staticInt7731;
+    static public int staticInt7732;
+    static public int staticInt7733;
+    static public int staticInt7734;
+    static public int staticInt7735;
+    static public int staticInt7736;
+    static public int staticInt7737;
+    static public int staticInt7738;
+    static public int staticInt7739;
+    static public int staticInt7740;
+    static public int staticInt7741;
+    static public int staticInt7742;
+    static public int staticInt7743;
+    static public int staticInt7744;
+    static public int staticInt7745;
+    static public int staticInt7746;
+    static public int staticInt7747;
+    static public int staticInt7748;
+    static public int staticInt7749;
+    static public int staticInt7750;
+    static public int staticInt7751;
+    static public int staticInt7752;
+    static public int staticInt7753;
+    static public int staticInt7754;
+    static public int staticInt7755;
+    static public int staticInt7756;
+    static public int staticInt7757;
+    static public int staticInt7758;
+    static public int staticInt7759;
+    static public int staticInt7760;
+    static public int staticInt7761;
+    static public int staticInt7762;
+    static public int staticInt7763;
+    static public int staticInt7764;
+    static public int staticInt7765;
+    static public int staticInt7766;
+    static public int staticInt7767;
+    static public int staticInt7768;
+    static public int staticInt7769;
+    static public int staticInt7770;
+    static public int staticInt7771;
+    static public int staticInt7772;
+    static public int staticInt7773;
+    static public int staticInt7774;
+    static public int staticInt7775;
+    static public int staticInt7776;
+    static public int staticInt7777;
+    static public int staticInt7778;
+    static public int staticInt7779;
+    static public int staticInt7780;
+    static public int staticInt7781;
+    static public int staticInt7782;
+    static public int staticInt7783;
+    static public int staticInt7784;
+    static public int staticInt7785;
+    static public int staticInt7786;
+    static public int staticInt7787;
+    static public int staticInt7788;
+    static public int staticInt7789;
+    static public int staticInt7790;
+    static public int staticInt7791;
+    static public int staticInt7792;
+    static public int staticInt7793;
+    static public int staticInt7794;
+    static public int staticInt7795;
+    static public int staticInt7796;
+    static public int staticInt7797;
+    static public int staticInt7798;
+    static public int staticInt7799;
+    static public int staticInt7800;
+    static public int staticInt7801;
+    static public int staticInt7802;
+    static public int staticInt7803;
+    static public int staticInt7804;
+    static public int staticInt7805;
+    static public int staticInt7806;
+    static public int staticInt7807;
+    static public int staticInt7808;
+    static public int staticInt7809;
+    static public int staticInt7810;
+    static public int staticInt7811;
+    static public int staticInt7812;
+    static public int staticInt7813;
+    static public int staticInt7814;
+    static public int staticInt7815;
+    static public int staticInt7816;
+    static public int staticInt7817;
+    static public int staticInt7818;
+    static public int staticInt7819;
+    static public int staticInt7820;
+    static public int staticInt7821;
+    static public int staticInt7822;
+    static public int staticInt7823;
+    static public int staticInt7824;
+    static public int staticInt7825;
+    static public int staticInt7826;
+    static public int staticInt7827;
+    static public int staticInt7828;
+    static public int staticInt7829;
+    static public int staticInt7830;
+    static public int staticInt7831;
+    static public int staticInt7832;
+    static public int staticInt7833;
+    static public int staticInt7834;
+    static public int staticInt7835;
+    static public int staticInt7836;
+    static public int staticInt7837;
+    static public int staticInt7838;
+    static public int staticInt7839;
+    static public int staticInt7840;
+    static public int staticInt7841;
+    static public int staticInt7842;
+    static public int staticInt7843;
+    static public int staticInt7844;
+    static public int staticInt7845;
+    static public int staticInt7846;
+    static public int staticInt7847;
+    static public int staticInt7848;
+    static public int staticInt7849;
+    static public int staticInt7850;
+    static public int staticInt7851;
+    static public int staticInt7852;
+    static public int staticInt7853;
+    static public int staticInt7854;
+    static public int staticInt7855;
+    static public int staticInt7856;
+    static public int staticInt7857;
+    static public int staticInt7858;
+    static public int staticInt7859;
+    static public int staticInt7860;
+    static public int staticInt7861;
+    static public int staticInt7862;
+    static public int staticInt7863;
+    static public int staticInt7864;
+    static public int staticInt7865;
+    static public int staticInt7866;
+    static public int staticInt7867;
+    static public int staticInt7868;
+    static public int staticInt7869;
+    static public int staticInt7870;
+    static public int staticInt7871;
+    static public int staticInt7872;
+    static public int staticInt7873;
+    static public int staticInt7874;
+    static public int staticInt7875;
+    static public int staticInt7876;
+    static public int staticInt7877;
+    static public int staticInt7878;
+    static public int staticInt7879;
+    static public int staticInt7880;
+    static public int staticInt7881;
+    static public int staticInt7882;
+    static public int staticInt7883;
+    static public int staticInt7884;
+    static public int staticInt7885;
+    static public int staticInt7886;
+    static public int staticInt7887;
+    static public int staticInt7888;
+    static public int staticInt7889;
+    static public int staticInt7890;
+    static public int staticInt7891;
+    static public int staticInt7892;
+    static public int staticInt7893;
+    static public int staticInt7894;
+    static public int staticInt7895;
+    static public int staticInt7896;
+    static public int staticInt7897;
+    static public int staticInt7898;
+    static public int staticInt7899;
+    static public int staticInt7900;
+    static public int staticInt7901;
+    static public int staticInt7902;
+    static public int staticInt7903;
+    static public int staticInt7904;
+    static public int staticInt7905;
+    static public int staticInt7906;
+    static public int staticInt7907;
+    static public int staticInt7908;
+    static public int staticInt7909;
+    static public int staticInt7910;
+    static public int staticInt7911;
+    static public int staticInt7912;
+    static public int staticInt7913;
+    static public int staticInt7914;
+    static public int staticInt7915;
+    static public int staticInt7916;
+    static public int staticInt7917;
+    static public int staticInt7918;
+    static public int staticInt7919;
+    static public int staticInt7920;
+    static public int staticInt7921;
+    static public int staticInt7922;
+    static public int staticInt7923;
+    static public int staticInt7924;
+    static public int staticInt7925;
+    static public int staticInt7926;
+    static public int staticInt7927;
+    static public int staticInt7928;
+    static public int staticInt7929;
+    static public int staticInt7930;
+    static public int staticInt7931;
+    static public int staticInt7932;
+    static public int staticInt7933;
+    static public int staticInt7934;
+    static public int staticInt7935;
+    static public int staticInt7936;
+    static public int staticInt7937;
+    static public int staticInt7938;
+    static public int staticInt7939;
+    static public int staticInt7940;
+    static public int staticInt7941;
+    static public int staticInt7942;
+    static public int staticInt7943;
+    static public int staticInt7944;
+    static public int staticInt7945;
+    static public int staticInt7946;
+    static public int staticInt7947;
+    static public int staticInt7948;
+    static public int staticInt7949;
+    static public int staticInt7950;
+    static public int staticInt7951;
+    static public int staticInt7952;
+    static public int staticInt7953;
+    static public int staticInt7954;
+    static public int staticInt7955;
+    static public int staticInt7956;
+    static public int staticInt7957;
+    static public int staticInt7958;
+    static public int staticInt7959;
+    static public int staticInt7960;
+    static public int staticInt7961;
+    static public int staticInt7962;
+    static public int staticInt7963;
+    static public int staticInt7964;
+    static public int staticInt7965;
+    static public int staticInt7966;
+    static public int staticInt7967;
+    static public int staticInt7968;
+    static public int staticInt7969;
+    static public int staticInt7970;
+    static public int staticInt7971;
+    static public int staticInt7972;
+    static public int staticInt7973;
+    static public int staticInt7974;
+    static public int staticInt7975;
+    static public int staticInt7976;
+    static public int staticInt7977;
+    static public int staticInt7978;
+    static public int staticInt7979;
+    static public int staticInt7980;
+    static public int staticInt7981;
+    static public int staticInt7982;
+    static public int staticInt7983;
+    static public int staticInt7984;
+    static public int staticInt7985;
+    static public int staticInt7986;
+    static public int staticInt7987;
+    static public int staticInt7988;
+    static public int staticInt7989;
+    static public int staticInt7990;
+    static public int staticInt7991;
+    static public int staticInt7992;
+    static public int staticInt7993;
+    static public int staticInt7994;
+    static public int staticInt7995;
+    static public int staticInt7996;
+    static public int staticInt7997;
+    static public int staticInt7998;
+    static public int staticInt7999;
+    static public int staticInt8000;
+    static public int staticInt8001;
+    static public int staticInt8002;
+    static public int staticInt8003;
+    static public int staticInt8004;
+    static public int staticInt8005;
+    static public int staticInt8006;
+    static public int staticInt8007;
+    static public int staticInt8008;
+    static public int staticInt8009;
+    static public int staticInt8010;
+    static public int staticInt8011;
+    static public int staticInt8012;
+    static public int staticInt8013;
+    static public int staticInt8014;
+    static public int staticInt8015;
+    static public int staticInt8016;
+    static public int staticInt8017;
+    static public int staticInt8018;
+    static public int staticInt8019;
+    static public int staticInt8020;
+    static public int staticInt8021;
+    static public int staticInt8022;
+    static public int staticInt8023;
+    static public int staticInt8024;
+    static public int staticInt8025;
+    static public int staticInt8026;
+    static public int staticInt8027;
+    static public int staticInt8028;
+    static public int staticInt8029;
+    static public int staticInt8030;
+    static public int staticInt8031;
+    static public int staticInt8032;
+    static public int staticInt8033;
+    static public int staticInt8034;
+    static public int staticInt8035;
+    static public int staticInt8036;
+    static public int staticInt8037;
+    static public int staticInt8038;
+    static public int staticInt8039;
+    static public int staticInt8040;
+    static public int staticInt8041;
+    static public int staticInt8042;
+    static public int staticInt8043;
+    static public int staticInt8044;
+    static public int staticInt8045;
+    static public int staticInt8046;
+    static public int staticInt8047;
+    static public int staticInt8048;
+    static public int staticInt8049;
+    static public int staticInt8050;
+    static public int staticInt8051;
+    static public int staticInt8052;
+    static public int staticInt8053;
+    static public int staticInt8054;
+    static public int staticInt8055;
+    static public int staticInt8056;
+    static public int staticInt8057;
+    static public int staticInt8058;
+    static public int staticInt8059;
+    static public int staticInt8060;
+    static public int staticInt8061;
+    static public int staticInt8062;
+    static public int staticInt8063;
+    static public int staticInt8064;
+    static public int staticInt8065;
+    static public int staticInt8066;
+    static public int staticInt8067;
+    static public int staticInt8068;
+    static public int staticInt8069;
+    static public int staticInt8070;
+    static public int staticInt8071;
+    static public int staticInt8072;
+    static public int staticInt8073;
+    static public int staticInt8074;
+    static public int staticInt8075;
+    static public int staticInt8076;
+    static public int staticInt8077;
+    static public int staticInt8078;
+    static public int staticInt8079;
+    static public int staticInt8080;
+    static public int staticInt8081;
+    static public int staticInt8082;
+    static public int staticInt8083;
+    static public int staticInt8084;
+    static public int staticInt8085;
+    static public int staticInt8086;
+    static public int staticInt8087;
+    static public int staticInt8088;
+    static public int staticInt8089;
+    static public int staticInt8090;
+    static public int staticInt8091;
+    static public int staticInt8092;
+    static public int staticInt8093;
+    static public int staticInt8094;
+    static public int staticInt8095;
+    static public int staticInt8096;
+    static public int staticInt8097;
+    static public int staticInt8098;
+    static public int staticInt8099;
+    static public int staticInt8100;
+    static public int staticInt8101;
+    static public int staticInt8102;
+    static public int staticInt8103;
+    static public int staticInt8104;
+    static public int staticInt8105;
+    static public int staticInt8106;
+    static public int staticInt8107;
+    static public int staticInt8108;
+    static public int staticInt8109;
+    static public int staticInt8110;
+    static public int staticInt8111;
+    static public int staticInt8112;
+    static public int staticInt8113;
+    static public int staticInt8114;
+    static public int staticInt8115;
+    static public int staticInt8116;
+    static public int staticInt8117;
+    static public int staticInt8118;
+    static public int staticInt8119;
+    static public int staticInt8120;
+    static public int staticInt8121;
+    static public int staticInt8122;
+    static public int staticInt8123;
+    static public int staticInt8124;
+    static public int staticInt8125;
+    static public int staticInt8126;
+    static public int staticInt8127;
+    static public int staticInt8128;
+    static public int staticInt8129;
+    static public int staticInt8130;
+    static public int staticInt8131;
+    static public int staticInt8132;
+    static public int staticInt8133;
+    static public int staticInt8134;
+    static public int staticInt8135;
+    static public int staticInt8136;
+    static public int staticInt8137;
+    static public int staticInt8138;
+    static public int staticInt8139;
+    static public int staticInt8140;
+    static public int staticInt8141;
+    static public int staticInt8142;
+    static public int staticInt8143;
+    static public int staticInt8144;
+    static public int staticInt8145;
+    static public int staticInt8146;
+    static public int staticInt8147;
+    static public int staticInt8148;
+    static public int staticInt8149;
+    static public int staticInt8150;
+    static public int staticInt8151;
+    static public int staticInt8152;
+    static public int staticInt8153;
+    static public int staticInt8154;
+    static public int staticInt8155;
+    static public int staticInt8156;
+    static public int staticInt8157;
+    static public int staticInt8158;
+    static public int staticInt8159;
+    static public int staticInt8160;
+    static public int staticInt8161;
+    static public int staticInt8162;
+    static public int staticInt8163;
+    static public int staticInt8164;
+    static public int staticInt8165;
+    static public int staticInt8166;
+    static public int staticInt8167;
+    static public int staticInt8168;
+    static public int staticInt8169;
+    static public int staticInt8170;
+    static public int staticInt8171;
+    static public int staticInt8172;
+    static public int staticInt8173;
+    static public int staticInt8174;
+    static public int staticInt8175;
+    static public int staticInt8176;
+    static public int staticInt8177;
+    static public int staticInt8178;
+    static public int staticInt8179;
+    static public int staticInt8180;
+    static public int staticInt8181;
+    static public int staticInt8182;
+    static public int staticInt8183;
+    static public int staticInt8184;
+    static public int staticInt8185;
+    static public int staticInt8186;
+    static public int staticInt8187;
+    static public int staticInt8188;
+    static public int staticInt8189;
+    static public int staticInt8190;
+    static public int staticInt8191;
+    static public int staticInt8192;
+    static public int staticInt8193;
+    static public int staticInt8194;
+    static public int staticInt8195;
+    static public int staticInt8196;
+    static public int staticInt8197;
+    static public int staticInt8198;
+    static public int staticInt8199;
+    static public int staticInt8200;
+    static public int staticInt8201;
+    static public int staticInt8202;
+    static public int staticInt8203;
+    static public int staticInt8204;
+    static public int staticInt8205;
+    static public int staticInt8206;
+    static public int staticInt8207;
+    static public int staticInt8208;
+    static public int staticInt8209;
+    static public int staticInt8210;
+    static public int staticInt8211;
+    static public int staticInt8212;
+    static public int staticInt8213;
+    static public int staticInt8214;
+    static public int staticInt8215;
+    static public int staticInt8216;
+    static public int staticInt8217;
+    static public int staticInt8218;
+    static public int staticInt8219;
+    static public int staticInt8220;
+    static public int staticInt8221;
+    static public int staticInt8222;
+    static public int staticInt8223;
+    static public int staticInt8224;
+    static public int staticInt8225;
+    static public int staticInt8226;
+    static public int staticInt8227;
+    static public int staticInt8228;
+    static public int staticInt8229;
+    static public int staticInt8230;
+    static public int staticInt8231;
+    static public int staticInt8232;
+    static public int staticInt8233;
+    static public int staticInt8234;
+    static public int staticInt8235;
+    static public int staticInt8236;
+    static public int staticInt8237;
+    static public int staticInt8238;
+    static public int staticInt8239;
+    static public int staticInt8240;
+    static public int staticInt8241;
+    static public int staticInt8242;
+    static public int staticInt8243;
+    static public int staticInt8244;
+    static public int staticInt8245;
+    static public int staticInt8246;
+    static public int staticInt8247;
+    static public int staticInt8248;
+    static public int staticInt8249;
+    static public int staticInt8250;
+    static public int staticInt8251;
+    static public int staticInt8252;
+    static public int staticInt8253;
+    static public int staticInt8254;
+    static public int staticInt8255;
+    static public int staticInt8256;
+    static public int staticInt8257;
+    static public int staticInt8258;
+    static public int staticInt8259;
+    static public int staticInt8260;
+    static public int staticInt8261;
+    static public int staticInt8262;
+    static public int staticInt8263;
+    static public int staticInt8264;
+    static public int staticInt8265;
+    static public int staticInt8266;
+    static public int staticInt8267;
+    static public int staticInt8268;
+    static public int staticInt8269;
+    static public int staticInt8270;
+    static public int staticInt8271;
+    static public int staticInt8272;
+    static public int staticInt8273;
+    static public int staticInt8274;
+    static public int staticInt8275;
+    static public int staticInt8276;
+    static public int staticInt8277;
+    static public int staticInt8278;
+    static public int staticInt8279;
+    static public int staticInt8280;
+    static public int staticInt8281;
+    static public int staticInt8282;
+    static public int staticInt8283;
+    static public int staticInt8284;
+    static public int staticInt8285;
+    static public int staticInt8286;
+    static public int staticInt8287;
+    static public int staticInt8288;
+    static public int staticInt8289;
+    static public int staticInt8290;
+    static public int staticInt8291;
+    static public int staticInt8292;
+    static public int staticInt8293;
+    static public int staticInt8294;
+    static public int staticInt8295;
+    static public int staticInt8296;
+    static public int staticInt8297;
+    static public int staticInt8298;
+    static public int staticInt8299;
+    static public int staticInt8300;
+    static public int staticInt8301;
+    static public int staticInt8302;
+    static public int staticInt8303;
+    static public int staticInt8304;
+    static public int staticInt8305;
+    static public int staticInt8306;
+    static public int staticInt8307;
+    static public int staticInt8308;
+    static public int staticInt8309;
+    static public int staticInt8310;
+    static public int staticInt8311;
+    static public int staticInt8312;
+    static public int staticInt8313;
+    static public int staticInt8314;
+    static public int staticInt8315;
+    static public int staticInt8316;
+    static public int staticInt8317;
+    static public int staticInt8318;
+    static public int staticInt8319;
+    static public int staticInt8320;
+    static public int staticInt8321;
+    static public int staticInt8322;
+    static public int staticInt8323;
+    static public int staticInt8324;
+    static public int staticInt8325;
+    static public int staticInt8326;
+    static public int staticInt8327;
+    static public int staticInt8328;
+    static public int staticInt8329;
+    static public int staticInt8330;
+    static public int staticInt8331;
+    static public int staticInt8332;
+    static public int staticInt8333;
+    static public int staticInt8334;
+    static public int staticInt8335;
+    static public int staticInt8336;
+    static public int staticInt8337;
+    static public int staticInt8338;
+    static public int staticInt8339;
+    static public int staticInt8340;
+    static public int staticInt8341;
+    static public int staticInt8342;
+    static public int staticInt8343;
+    static public int staticInt8344;
+    static public int staticInt8345;
+    static public int staticInt8346;
+    static public int staticInt8347;
+    static public int staticInt8348;
+    static public int staticInt8349;
+    static public int staticInt8350;
+    static public int staticInt8351;
+    static public int staticInt8352;
+    static public int staticInt8353;
+    static public int staticInt8354;
+    static public int staticInt8355;
+    static public int staticInt8356;
+    static public int staticInt8357;
+    static public int staticInt8358;
+    static public int staticInt8359;
+    static public int staticInt8360;
+    static public int staticInt8361;
+    static public int staticInt8362;
+    static public int staticInt8363;
+    static public int staticInt8364;
+    static public int staticInt8365;
+    static public int staticInt8366;
+    static public int staticInt8367;
+    static public int staticInt8368;
+    static public int staticInt8369;
+    static public int staticInt8370;
+    static public int staticInt8371;
+    static public int staticInt8372;
+    static public int staticInt8373;
+    static public int staticInt8374;
+    static public int staticInt8375;
+    static public int staticInt8376;
+    static public int staticInt8377;
+    static public int staticInt8378;
+    static public int staticInt8379;
+    static public int staticInt8380;
+    static public int staticInt8381;
+    static public int staticInt8382;
+    static public int staticInt8383;
+    static public int staticInt8384;
+    static public int staticInt8385;
+    static public int staticInt8386;
+    static public int staticInt8387;
+    static public int staticInt8388;
+    static public int staticInt8389;
+    static public int staticInt8390;
+    static public int staticInt8391;
+    static public int staticInt8392;
+    static public int staticInt8393;
+    static public int staticInt8394;
+    static public int staticInt8395;
+    static public int staticInt8396;
+    static public int staticInt8397;
+    static public int staticInt8398;
+    static public int staticInt8399;
+    static public int staticInt8400;
+    static public int staticInt8401;
+    static public int staticInt8402;
+    static public int staticInt8403;
+    static public int staticInt8404;
+    static public int staticInt8405;
+    static public int staticInt8406;
+    static public int staticInt8407;
+    static public int staticInt8408;
+    static public int staticInt8409;
+    static public int staticInt8410;
+    static public int staticInt8411;
+    static public int staticInt8412;
+    static public int staticInt8413;
+    static public int staticInt8414;
+    static public int staticInt8415;
+    static public int staticInt8416;
+    static public int staticInt8417;
+    static public int staticInt8418;
+    static public int staticInt8419;
+    static public int staticInt8420;
+    static public int staticInt8421;
+    static public int staticInt8422;
+    static public int staticInt8423;
+    static public int staticInt8424;
+    static public int staticInt8425;
+    static public int staticInt8426;
+    static public int staticInt8427;
+    static public int staticInt8428;
+    static public int staticInt8429;
+    static public int staticInt8430;
+    static public int staticInt8431;
+    static public int staticInt8432;
+    static public int staticInt8433;
+    static public int staticInt8434;
+    static public int staticInt8435;
+    static public int staticInt8436;
+    static public int staticInt8437;
+    static public int staticInt8438;
+    static public int staticInt8439;
+    static public int staticInt8440;
+    static public int staticInt8441;
+    static public int staticInt8442;
+    static public int staticInt8443;
+    static public int staticInt8444;
+    static public int staticInt8445;
+    static public int staticInt8446;
+    static public int staticInt8447;
+    static public int staticInt8448;
+    static public int staticInt8449;
+    static public int staticInt8450;
+    static public int staticInt8451;
+    static public int staticInt8452;
+    static public int staticInt8453;
+    static public int staticInt8454;
+    static public int staticInt8455;
+    static public int staticInt8456;
+    static public int staticInt8457;
+    static public int staticInt8458;
+    static public int staticInt8459;
+    static public int staticInt8460;
+    static public int staticInt8461;
+    static public int staticInt8462;
+    static public int staticInt8463;
+    static public int staticInt8464;
+    static public int staticInt8465;
+    static public int staticInt8466;
+    static public int staticInt8467;
+    static public int staticInt8468;
+    static public int staticInt8469;
+    static public int staticInt8470;
+    static public int staticInt8471;
+    static public int staticInt8472;
+    static public int staticInt8473;
+    static public int staticInt8474;
+    static public int staticInt8475;
+    static public int staticInt8476;
+    static public int staticInt8477;
+    static public int staticInt8478;
+    static public int staticInt8479;
+    static public int staticInt8480;
+    static public int staticInt8481;
+    static public int staticInt8482;
+    static public int staticInt8483;
+    static public int staticInt8484;
+    static public int staticInt8485;
+    static public int staticInt8486;
+    static public int staticInt8487;
+    static public int staticInt8488;
+    static public int staticInt8489;
+    static public int staticInt8490;
+    static public int staticInt8491;
+    static public int staticInt8492;
+    static public int staticInt8493;
+    static public int staticInt8494;
+    static public int staticInt8495;
+    static public int staticInt8496;
+    static public int staticInt8497;
+    static public int staticInt8498;
+    static public int staticInt8499;
+    static public int staticInt8500;
+    static public int staticInt8501;
+    static public int staticInt8502;
+    static public int staticInt8503;
+    static public int staticInt8504;
+    static public int staticInt8505;
+    static public int staticInt8506;
+    static public int staticInt8507;
+    static public int staticInt8508;
+    static public int staticInt8509;
+    static public int staticInt8510;
+    static public int staticInt8511;
+    static public int staticInt8512;
+    static public int staticInt8513;
+    static public int staticInt8514;
+    static public int staticInt8515;
+    static public int staticInt8516;
+    static public int staticInt8517;
+    static public int staticInt8518;
+    static public int staticInt8519;
+    static public int staticInt8520;
+    static public int staticInt8521;
+    static public int staticInt8522;
+    static public int staticInt8523;
+    static public int staticInt8524;
+    static public int staticInt8525;
+    static public int staticInt8526;
+    static public int staticInt8527;
+    static public int staticInt8528;
+    static public int staticInt8529;
+    static public int staticInt8530;
+    static public int staticInt8531;
+    static public int staticInt8532;
+    static public int staticInt8533;
+    static public int staticInt8534;
+    static public int staticInt8535;
+    static public int staticInt8536;
+    static public int staticInt8537;
+    static public int staticInt8538;
+    static public int staticInt8539;
+    static public int staticInt8540;
+    static public int staticInt8541;
+    static public int staticInt8542;
+    static public int staticInt8543;
+    static public int staticInt8544;
+    static public int staticInt8545;
+    static public int staticInt8546;
+    static public int staticInt8547;
+    static public int staticInt8548;
+    static public int staticInt8549;
+    static public int staticInt8550;
+    static public int staticInt8551;
+    static public int staticInt8552;
+    static public int staticInt8553;
+    static public int staticInt8554;
+    static public int staticInt8555;
+    static public int staticInt8556;
+    static public int staticInt8557;
+    static public int staticInt8558;
+    static public int staticInt8559;
+    static public int staticInt8560;
+    static public int staticInt8561;
+    static public int staticInt8562;
+    static public int staticInt8563;
+    static public int staticInt8564;
+    static public int staticInt8565;
+    static public int staticInt8566;
+    static public int staticInt8567;
+    static public int staticInt8568;
+    static public int staticInt8569;
+    static public int staticInt8570;
+    static public int staticInt8571;
+    static public int staticInt8572;
+    static public int staticInt8573;
+    static public int staticInt8574;
+    static public int staticInt8575;
+    static public int staticInt8576;
+    static public int staticInt8577;
+    static public int staticInt8578;
+    static public int staticInt8579;
+    static public int staticInt8580;
+    static public int staticInt8581;
+    static public int staticInt8582;
+    static public int staticInt8583;
+    static public int staticInt8584;
+    static public int staticInt8585;
+    static public int staticInt8586;
+    static public int staticInt8587;
+    static public int staticInt8588;
+    static public int staticInt8589;
+    static public int staticInt8590;
+    static public int staticInt8591;
+    static public int staticInt8592;
+    static public int staticInt8593;
+    static public int staticInt8594;
+    static public int staticInt8595;
+    static public int staticInt8596;
+    static public int staticInt8597;
+    static public int staticInt8598;
+    static public int staticInt8599;
+    static public int staticInt8600;
+    static public int staticInt8601;
+    static public int staticInt8602;
+    static public int staticInt8603;
+    static public int staticInt8604;
+    static public int staticInt8605;
+    static public int staticInt8606;
+    static public int staticInt8607;
+    static public int staticInt8608;
+    static public int staticInt8609;
+    static public int staticInt8610;
+    static public int staticInt8611;
+    static public int staticInt8612;
+    static public int staticInt8613;
+    static public int staticInt8614;
+    static public int staticInt8615;
+    static public int staticInt8616;
+    static public int staticInt8617;
+    static public int staticInt8618;
+    static public int staticInt8619;
+    static public int staticInt8620;
+    static public int staticInt8621;
+    static public int staticInt8622;
+    static public int staticInt8623;
+    static public int staticInt8624;
+    static public int staticInt8625;
+    static public int staticInt8626;
+    static public int staticInt8627;
+    static public int staticInt8628;
+    static public int staticInt8629;
+    static public int staticInt8630;
+    static public int staticInt8631;
+    static public int staticInt8632;
+    static public int staticInt8633;
+    static public int staticInt8634;
+    static public int staticInt8635;
+    static public int staticInt8636;
+    static public int staticInt8637;
+    static public int staticInt8638;
+    static public int staticInt8639;
+    static public int staticInt8640;
+    static public int staticInt8641;
+    static public int staticInt8642;
+    static public int staticInt8643;
+    static public int staticInt8644;
+    static public int staticInt8645;
+    static public int staticInt8646;
+    static public int staticInt8647;
+    static public int staticInt8648;
+    static public int staticInt8649;
+    static public int staticInt8650;
+    static public int staticInt8651;
+    static public int staticInt8652;
+    static public int staticInt8653;
+    static public int staticInt8654;
+    static public int staticInt8655;
+    static public int staticInt8656;
+    static public int staticInt8657;
+    static public int staticInt8658;
+    static public int staticInt8659;
+    static public int staticInt8660;
+    static public int staticInt8661;
+    static public int staticInt8662;
+    static public int staticInt8663;
+    static public int staticInt8664;
+    static public int staticInt8665;
+    static public int staticInt8666;
+    static public int staticInt8667;
+    static public int staticInt8668;
+    static public int staticInt8669;
+    static public int staticInt8670;
+    static public int staticInt8671;
+    static public int staticInt8672;
+    static public int staticInt8673;
+    static public int staticInt8674;
+    static public int staticInt8675;
+    static public int staticInt8676;
+    static public int staticInt8677;
+    static public int staticInt8678;
+    static public int staticInt8679;
+    static public int staticInt8680;
+    static public int staticInt8681;
+    static public int staticInt8682;
+    static public int staticInt8683;
+    static public int staticInt8684;
+    static public int staticInt8685;
+    static public int staticInt8686;
+    static public int staticInt8687;
+    static public int staticInt8688;
+    static public int staticInt8689;
+    static public int staticInt8690;
+    static public int staticInt8691;
+    static public int staticInt8692;
+    static public int staticInt8693;
+    static public int staticInt8694;
+    static public int staticInt8695;
+    static public int staticInt8696;
+    static public int staticInt8697;
+    static public int staticInt8698;
+    static public int staticInt8699;
+    static public int staticInt8700;
+    static public int staticInt8701;
+    static public int staticInt8702;
+    static public int staticInt8703;
+    static public int staticInt8704;
+    static public int staticInt8705;
+    static public int staticInt8706;
+    static public int staticInt8707;
+    static public int staticInt8708;
+    static public int staticInt8709;
+    static public int staticInt8710;
+    static public int staticInt8711;
+    static public int staticInt8712;
+    static public int staticInt8713;
+    static public int staticInt8714;
+    static public int staticInt8715;
+    static public int staticInt8716;
+    static public int staticInt8717;
+    static public int staticInt8718;
+    static public int staticInt8719;
+    static public int staticInt8720;
+    static public int staticInt8721;
+    static public int staticInt8722;
+    static public int staticInt8723;
+    static public int staticInt8724;
+    static public int staticInt8725;
+    static public int staticInt8726;
+    static public int staticInt8727;
+    static public int staticInt8728;
+    static public int staticInt8729;
+    static public int staticInt8730;
+    static public int staticInt8731;
+    static public int staticInt8732;
+    static public int staticInt8733;
+    static public int staticInt8734;
+    static public int staticInt8735;
+    static public int staticInt8736;
+    static public int staticInt8737;
+    static public int staticInt8738;
+    static public int staticInt8739;
+    static public int staticInt8740;
+    static public int staticInt8741;
+    static public int staticInt8742;
+    static public int staticInt8743;
+    static public int staticInt8744;
+    static public int staticInt8745;
+    static public int staticInt8746;
+    static public int staticInt8747;
+    static public int staticInt8748;
+    static public int staticInt8749;
+    static public int staticInt8750;
+    static public int staticInt8751;
+    static public int staticInt8752;
+    static public int staticInt8753;
+    static public int staticInt8754;
+    static public int staticInt8755;
+    static public int staticInt8756;
+    static public int staticInt8757;
+    static public int staticInt8758;
+    static public int staticInt8759;
+    static public int staticInt8760;
+    static public int staticInt8761;
+    static public int staticInt8762;
+    static public int staticInt8763;
+    static public int staticInt8764;
+    static public int staticInt8765;
+    static public int staticInt8766;
+    static public int staticInt8767;
+    static public int staticInt8768;
+    static public int staticInt8769;
+    static public int staticInt8770;
+    static public int staticInt8771;
+    static public int staticInt8772;
+    static public int staticInt8773;
+    static public int staticInt8774;
+    static public int staticInt8775;
+    static public int staticInt8776;
+    static public int staticInt8777;
+    static public int staticInt8778;
+    static public int staticInt8779;
+    static public int staticInt8780;
+    static public int staticInt8781;
+    static public int staticInt8782;
+    static public int staticInt8783;
+    static public int staticInt8784;
+    static public int staticInt8785;
+    static public int staticInt8786;
+    static public int staticInt8787;
+    static public int staticInt8788;
+    static public int staticInt8789;
+    static public int staticInt8790;
+    static public int staticInt8791;
+    static public int staticInt8792;
+    static public int staticInt8793;
+    static public int staticInt8794;
+    static public int staticInt8795;
+    static public int staticInt8796;
+    static public int staticInt8797;
+    static public int staticInt8798;
+    static public int staticInt8799;
+    static public int staticInt8800;
+    static public int staticInt8801;
+    static public int staticInt8802;
+    static public int staticInt8803;
+    static public int staticInt8804;
+    static public int staticInt8805;
+    static public int staticInt8806;
+    static public int staticInt8807;
+    static public int staticInt8808;
+    static public int staticInt8809;
+    static public int staticInt8810;
+    static public int staticInt8811;
+    static public int staticInt8812;
+    static public int staticInt8813;
+    static public int staticInt8814;
+    static public int staticInt8815;
+    static public int staticInt8816;
+    static public int staticInt8817;
+    static public int staticInt8818;
+    static public int staticInt8819;
+    static public int staticInt8820;
+    static public int staticInt8821;
+    static public int staticInt8822;
+    static public int staticInt8823;
+    static public int staticInt8824;
+    static public int staticInt8825;
+    static public int staticInt8826;
+    static public int staticInt8827;
+    static public int staticInt8828;
+    static public int staticInt8829;
+    static public int staticInt8830;
+    static public int staticInt8831;
+    static public int staticInt8832;
+    static public int staticInt8833;
+    static public int staticInt8834;
+    static public int staticInt8835;
+    static public int staticInt8836;
+    static public int staticInt8837;
+    static public int staticInt8838;
+    static public int staticInt8839;
+    static public int staticInt8840;
+    static public int staticInt8841;
+    static public int staticInt8842;
+    static public int staticInt8843;
+    static public int staticInt8844;
+    static public int staticInt8845;
+    static public int staticInt8846;
+    static public int staticInt8847;
+    static public int staticInt8848;
+    static public int staticInt8849;
+    static public int staticInt8850;
+    static public int staticInt8851;
+    static public int staticInt8852;
+    static public int staticInt8853;
+    static public int staticInt8854;
+    static public int staticInt8855;
+    static public int staticInt8856;
+    static public int staticInt8857;
+    static public int staticInt8858;
+    static public int staticInt8859;
+    static public int staticInt8860;
+    static public int staticInt8861;
+    static public int staticInt8862;
+    static public int staticInt8863;
+    static public int staticInt8864;
+    static public int staticInt8865;
+    static public int staticInt8866;
+    static public int staticInt8867;
+    static public int staticInt8868;
+    static public int staticInt8869;
+    static public int staticInt8870;
+    static public int staticInt8871;
+    static public int staticInt8872;
+    static public int staticInt8873;
+    static public int staticInt8874;
+    static public int staticInt8875;
+    static public int staticInt8876;
+    static public int staticInt8877;
+    static public int staticInt8878;
+    static public int staticInt8879;
+    static public int staticInt8880;
+    static public int staticInt8881;
+    static public int staticInt8882;
+    static public int staticInt8883;
+    static public int staticInt8884;
+    static public int staticInt8885;
+    static public int staticInt8886;
+    static public int staticInt8887;
+    static public int staticInt8888;
+    static public int staticInt8889;
+    static public int staticInt8890;
+    static public int staticInt8891;
+    static public int staticInt8892;
+    static public int staticInt8893;
+    static public int staticInt8894;
+    static public int staticInt8895;
+    static public int staticInt8896;
+    static public int staticInt8897;
+    static public int staticInt8898;
+    static public int staticInt8899;
+    static public int staticInt8900;
+    static public int staticInt8901;
+    static public int staticInt8902;
+    static public int staticInt8903;
+    static public int staticInt8904;
+    static public int staticInt8905;
+    static public int staticInt8906;
+    static public int staticInt8907;
+    static public int staticInt8908;
+    static public int staticInt8909;
+    static public int staticInt8910;
+    static public int staticInt8911;
+    static public int staticInt8912;
+    static public int staticInt8913;
+    static public int staticInt8914;
+    static public int staticInt8915;
+    static public int staticInt8916;
+    static public int staticInt8917;
+    static public int staticInt8918;
+    static public int staticInt8919;
+    static public int staticInt8920;
+    static public int staticInt8921;
+    static public int staticInt8922;
+    static public int staticInt8923;
+    static public int staticInt8924;
+    static public int staticInt8925;
+    static public int staticInt8926;
+    static public int staticInt8927;
+    static public int staticInt8928;
+    static public int staticInt8929;
+    static public int staticInt8930;
+    static public int staticInt8931;
+    static public int staticInt8932;
+    static public int staticInt8933;
+    static public int staticInt8934;
+    static public int staticInt8935;
+    static public int staticInt8936;
+    static public int staticInt8937;
+    static public int staticInt8938;
+    static public int staticInt8939;
+    static public int staticInt8940;
+    static public int staticInt8941;
+    static public int staticInt8942;
+    static public int staticInt8943;
+    static public int staticInt8944;
+    static public int staticInt8945;
+    static public int staticInt8946;
+    static public int staticInt8947;
+    static public int staticInt8948;
+    static public int staticInt8949;
+    static public int staticInt8950;
+    static public int staticInt8951;
+    static public int staticInt8952;
+    static public int staticInt8953;
+    static public int staticInt8954;
+    static public int staticInt8955;
+    static public int staticInt8956;
+    static public int staticInt8957;
+    static public int staticInt8958;
+    static public int staticInt8959;
+    static public int staticInt8960;
+    static public int staticInt8961;
+    static public int staticInt8962;
+    static public int staticInt8963;
+    static public int staticInt8964;
+    static public int staticInt8965;
+    static public int staticInt8966;
+    static public int staticInt8967;
+    static public int staticInt8968;
+    static public int staticInt8969;
+    static public int staticInt8970;
+    static public int staticInt8971;
+    static public int staticInt8972;
+    static public int staticInt8973;
+    static public int staticInt8974;
+    static public int staticInt8975;
+    static public int staticInt8976;
+    static public int staticInt8977;
+    static public int staticInt8978;
+    static public int staticInt8979;
+    static public int staticInt8980;
+    static public int staticInt8981;
+    static public int staticInt8982;
+    static public int staticInt8983;
+    static public int staticInt8984;
+    static public int staticInt8985;
+    static public int staticInt8986;
+    static public int staticInt8987;
+    static public int staticInt8988;
+    static public int staticInt8989;
+    static public int staticInt8990;
+    static public int staticInt8991;
+    static public int staticInt8992;
+    static public int staticInt8993;
+    static public int staticInt8994;
+    static public int staticInt8995;
+    static public int staticInt8996;
+    static public int staticInt8997;
+    static public int staticInt8998;
+    static public int staticInt8999;
+    static public int staticInt9000;
+    static public int staticInt9001;
+    static public int staticInt9002;
+    static public int staticInt9003;
+    static public int staticInt9004;
+    static public int staticInt9005;
+    static public int staticInt9006;
+    static public int staticInt9007;
+    static public int staticInt9008;
+    static public int staticInt9009;
+    static public int staticInt9010;
+    static public int staticInt9011;
+    static public int staticInt9012;
+    static public int staticInt9013;
+    static public int staticInt9014;
+    static public int staticInt9015;
+    static public int staticInt9016;
+    static public int staticInt9017;
+    static public int staticInt9018;
+    static public int staticInt9019;
+    static public int staticInt9020;
+    static public int staticInt9021;
+    static public int staticInt9022;
+    static public int staticInt9023;
+    static public int staticInt9024;
+    static public int staticInt9025;
+    static public int staticInt9026;
+    static public int staticInt9027;
+    static public int staticInt9028;
+    static public int staticInt9029;
+    static public int staticInt9030;
+    static public int staticInt9031;
+    static public int staticInt9032;
+    static public int staticInt9033;
+    static public int staticInt9034;
+    static public int staticInt9035;
+    static public int staticInt9036;
+    static public int staticInt9037;
+    static public int staticInt9038;
+    static public int staticInt9039;
+    static public int staticInt9040;
+    static public int staticInt9041;
+    static public int staticInt9042;
+    static public int staticInt9043;
+    static public int staticInt9044;
+    static public int staticInt9045;
+    static public int staticInt9046;
+    static public int staticInt9047;
+    static public int staticInt9048;
+    static public int staticInt9049;
+    static public int staticInt9050;
+    static public int staticInt9051;
+    static public int staticInt9052;
+    static public int staticInt9053;
+    static public int staticInt9054;
+    static public int staticInt9055;
+    static public int staticInt9056;
+    static public int staticInt9057;
+    static public int staticInt9058;
+    static public int staticInt9059;
+    static public int staticInt9060;
+    static public int staticInt9061;
+    static public int staticInt9062;
+    static public int staticInt9063;
+    static public int staticInt9064;
+    static public int staticInt9065;
+    static public int staticInt9066;
+    static public int staticInt9067;
+    static public int staticInt9068;
+    static public int staticInt9069;
+    static public int staticInt9070;
+    static public int staticInt9071;
+    static public int staticInt9072;
+    static public int staticInt9073;
+    static public int staticInt9074;
+    static public int staticInt9075;
+    static public int staticInt9076;
+    static public int staticInt9077;
+    static public int staticInt9078;
+    static public int staticInt9079;
+    static public int staticInt9080;
+    static public int staticInt9081;
+    static public int staticInt9082;
+    static public int staticInt9083;
+    static public int staticInt9084;
+    static public int staticInt9085;
+    static public int staticInt9086;
+    static public int staticInt9087;
+    static public int staticInt9088;
+    static public int staticInt9089;
+    static public int staticInt9090;
+    static public int staticInt9091;
+    static public int staticInt9092;
+    static public int staticInt9093;
+    static public int staticInt9094;
+    static public int staticInt9095;
+    static public int staticInt9096;
+    static public int staticInt9097;
+    static public int staticInt9098;
+    static public int staticInt9099;
+    static public int staticInt9100;
+    static public int staticInt9101;
+    static public int staticInt9102;
+    static public int staticInt9103;
+    static public int staticInt9104;
+    static public int staticInt9105;
+    static public int staticInt9106;
+    static public int staticInt9107;
+    static public int staticInt9108;
+    static public int staticInt9109;
+    static public int staticInt9110;
+    static public int staticInt9111;
+    static public int staticInt9112;
+    static public int staticInt9113;
+    static public int staticInt9114;
+    static public int staticInt9115;
+    static public int staticInt9116;
+    static public int staticInt9117;
+    static public int staticInt9118;
+    static public int staticInt9119;
+    static public int staticInt9120;
+    static public int staticInt9121;
+    static public int staticInt9122;
+    static public int staticInt9123;
+    static public int staticInt9124;
+    static public int staticInt9125;
+    static public int staticInt9126;
+    static public int staticInt9127;
+    static public int staticInt9128;
+    static public int staticInt9129;
+    static public int staticInt9130;
+    static public int staticInt9131;
+    static public int staticInt9132;
+    static public int staticInt9133;
+    static public int staticInt9134;
+    static public int staticInt9135;
+    static public int staticInt9136;
+    static public int staticInt9137;
+    static public int staticInt9138;
+    static public int staticInt9139;
+    static public int staticInt9140;
+    static public int staticInt9141;
+    static public int staticInt9142;
+    static public int staticInt9143;
+    static public int staticInt9144;
+    static public int staticInt9145;
+    static public int staticInt9146;
+    static public int staticInt9147;
+    static public int staticInt9148;
+    static public int staticInt9149;
+    static public int staticInt9150;
+    static public int staticInt9151;
+    static public int staticInt9152;
+    static public int staticInt9153;
+    static public int staticInt9154;
+    static public int staticInt9155;
+    static public int staticInt9156;
+    static public int staticInt9157;
+    static public int staticInt9158;
+    static public int staticInt9159;
+    static public int staticInt9160;
+    static public int staticInt9161;
+    static public int staticInt9162;
+    static public int staticInt9163;
+    static public int staticInt9164;
+    static public int staticInt9165;
+    static public int staticInt9166;
+    static public int staticInt9167;
+    static public int staticInt9168;
+    static public int staticInt9169;
+    static public int staticInt9170;
+    static public int staticInt9171;
+    static public int staticInt9172;
+    static public int staticInt9173;
+    static public int staticInt9174;
+    static public int staticInt9175;
+    static public int staticInt9176;
+    static public int staticInt9177;
+    static public int staticInt9178;
+    static public int staticInt9179;
+    static public int staticInt9180;
+    static public int staticInt9181;
+    static public int staticInt9182;
+    static public int staticInt9183;
+    static public int staticInt9184;
+    static public int staticInt9185;
+    static public int staticInt9186;
+    static public int staticInt9187;
+    static public int staticInt9188;
+    static public int staticInt9189;
+    static public int staticInt9190;
+    static public int staticInt9191;
+    static public int staticInt9192;
+    static public int staticInt9193;
+    static public int staticInt9194;
+    static public int staticInt9195;
+    static public int staticInt9196;
+    static public int staticInt9197;
+    static public int staticInt9198;
+    static public int staticInt9199;
+    static public int staticInt9200;
+    static public int staticInt9201;
+    static public int staticInt9202;
+    static public int staticInt9203;
+    static public int staticInt9204;
+    static public int staticInt9205;
+    static public int staticInt9206;
+    static public int staticInt9207;
+    static public int staticInt9208;
+    static public int staticInt9209;
+    static public int staticInt9210;
+    static public int staticInt9211;
+    static public int staticInt9212;
+    static public int staticInt9213;
+    static public int staticInt9214;
+    static public int staticInt9215;
+    static public int staticInt9216;
+    static public int staticInt9217;
+    static public int staticInt9218;
+    static public int staticInt9219;
+    static public int staticInt9220;
+    static public int staticInt9221;
+    static public int staticInt9222;
+    static public int staticInt9223;
+    static public int staticInt9224;
+    static public int staticInt9225;
+    static public int staticInt9226;
+    static public int staticInt9227;
+    static public int staticInt9228;
+    static public int staticInt9229;
+    static public int staticInt9230;
+    static public int staticInt9231;
+    static public int staticInt9232;
+    static public int staticInt9233;
+    static public int staticInt9234;
+    static public int staticInt9235;
+    static public int staticInt9236;
+    static public int staticInt9237;
+    static public int staticInt9238;
+    static public int staticInt9239;
+    static public int staticInt9240;
+    static public int staticInt9241;
+    static public int staticInt9242;
+    static public int staticInt9243;
+    static public int staticInt9244;
+    static public int staticInt9245;
+    static public int staticInt9246;
+    static public int staticInt9247;
+    static public int staticInt9248;
+    static public int staticInt9249;
+    static public int staticInt9250;
+    static public int staticInt9251;
+    static public int staticInt9252;
+    static public int staticInt9253;
+    static public int staticInt9254;
+    static public int staticInt9255;
+    static public int staticInt9256;
+    static public int staticInt9257;
+    static public int staticInt9258;
+    static public int staticInt9259;
+    static public int staticInt9260;
+    static public int staticInt9261;
+    static public int staticInt9262;
+    static public int staticInt9263;
+    static public int staticInt9264;
+    static public int staticInt9265;
+    static public int staticInt9266;
+    static public int staticInt9267;
+    static public int staticInt9268;
+    static public int staticInt9269;
+    static public int staticInt9270;
+    static public int staticInt9271;
+    static public int staticInt9272;
+    static public int staticInt9273;
+    static public int staticInt9274;
+    static public int staticInt9275;
+    static public int staticInt9276;
+    static public int staticInt9277;
+    static public int staticInt9278;
+    static public int staticInt9279;
+    static public int staticInt9280;
+    static public int staticInt9281;
+    static public int staticInt9282;
+    static public int staticInt9283;
+    static public int staticInt9284;
+    static public int staticInt9285;
+    static public int staticInt9286;
+    static public int staticInt9287;
+    static public int staticInt9288;
+    static public int staticInt9289;
+    static public int staticInt9290;
+    static public int staticInt9291;
+    static public int staticInt9292;
+    static public int staticInt9293;
+    static public int staticInt9294;
+    static public int staticInt9295;
+    static public int staticInt9296;
+    static public int staticInt9297;
+    static public int staticInt9298;
+    static public int staticInt9299;
+    static public int staticInt9300;
+    static public int staticInt9301;
+    static public int staticInt9302;
+    static public int staticInt9303;
+    static public int staticInt9304;
+    static public int staticInt9305;
+    static public int staticInt9306;
+    static public int staticInt9307;
+    static public int staticInt9308;
+    static public int staticInt9309;
+    static public int staticInt9310;
+    static public int staticInt9311;
+    static public int staticInt9312;
+    static public int staticInt9313;
+    static public int staticInt9314;
+    static public int staticInt9315;
+    static public int staticInt9316;
+    static public int staticInt9317;
+    static public int staticInt9318;
+    static public int staticInt9319;
+    static public int staticInt9320;
+    static public int staticInt9321;
+    static public int staticInt9322;
+    static public int staticInt9323;
+    static public int staticInt9324;
+    static public int staticInt9325;
+    static public int staticInt9326;
+    static public int staticInt9327;
+    static public int staticInt9328;
+    static public int staticInt9329;
+    static public int staticInt9330;
+    static public int staticInt9331;
+    static public int staticInt9332;
+    static public int staticInt9333;
+    static public int staticInt9334;
+    static public int staticInt9335;
+    static public int staticInt9336;
+    static public int staticInt9337;
+    static public int staticInt9338;
+    static public int staticInt9339;
+    static public int staticInt9340;
+    static public int staticInt9341;
+    static public int staticInt9342;
+    static public int staticInt9343;
+    static public int staticInt9344;
+    static public int staticInt9345;
+    static public int staticInt9346;
+    static public int staticInt9347;
+    static public int staticInt9348;
+    static public int staticInt9349;
+    static public int staticInt9350;
+    static public int staticInt9351;
+    static public int staticInt9352;
+    static public int staticInt9353;
+    static public int staticInt9354;
+    static public int staticInt9355;
+    static public int staticInt9356;
+    static public int staticInt9357;
+    static public int staticInt9358;
+    static public int staticInt9359;
+    static public int staticInt9360;
+    static public int staticInt9361;
+    static public int staticInt9362;
+    static public int staticInt9363;
+    static public int staticInt9364;
+    static public int staticInt9365;
+    static public int staticInt9366;
+    static public int staticInt9367;
+    static public int staticInt9368;
+    static public int staticInt9369;
+    static public int staticInt9370;
+    static public int staticInt9371;
+    static public int staticInt9372;
+    static public int staticInt9373;
+    static public int staticInt9374;
+    static public int staticInt9375;
+    static public int staticInt9376;
+    static public int staticInt9377;
+    static public int staticInt9378;
+    static public int staticInt9379;
+    static public int staticInt9380;
+    static public int staticInt9381;
+    static public int staticInt9382;
+    static public int staticInt9383;
+    static public int staticInt9384;
+    static public int staticInt9385;
+    static public int staticInt9386;
+    static public int staticInt9387;
+    static public int staticInt9388;
+    static public int staticInt9389;
+    static public int staticInt9390;
+    static public int staticInt9391;
+    static public int staticInt9392;
+    static public int staticInt9393;
+    static public int staticInt9394;
+    static public int staticInt9395;
+    static public int staticInt9396;
+    static public int staticInt9397;
+    static public int staticInt9398;
+    static public int staticInt9399;
+    static public int staticInt9400;
+    static public int staticInt9401;
+    static public int staticInt9402;
+    static public int staticInt9403;
+    static public int staticInt9404;
+    static public int staticInt9405;
+    static public int staticInt9406;
+    static public int staticInt9407;
+    static public int staticInt9408;
+    static public int staticInt9409;
+    static public int staticInt9410;
+    static public int staticInt9411;
+    static public int staticInt9412;
+    static public int staticInt9413;
+    static public int staticInt9414;
+    static public int staticInt9415;
+    static public int staticInt9416;
+    static public int staticInt9417;
+    static public int staticInt9418;
+    static public int staticInt9419;
+    static public int staticInt9420;
+    static public int staticInt9421;
+    static public int staticInt9422;
+    static public int staticInt9423;
+    static public int staticInt9424;
+    static public int staticInt9425;
+    static public int staticInt9426;
+    static public int staticInt9427;
+    static public int staticInt9428;
+    static public int staticInt9429;
+    static public int staticInt9430;
+    static public int staticInt9431;
+    static public int staticInt9432;
+    static public int staticInt9433;
+    static public int staticInt9434;
+    static public int staticInt9435;
+    static public int staticInt9436;
+    static public int staticInt9437;
+    static public int staticInt9438;
+    static public int staticInt9439;
+    static public int staticInt9440;
+    static public int staticInt9441;
+    static public int staticInt9442;
+    static public int staticInt9443;
+    static public int staticInt9444;
+    static public int staticInt9445;
+    static public int staticInt9446;
+    static public int staticInt9447;
+    static public int staticInt9448;
+    static public int staticInt9449;
+    static public int staticInt9450;
+    static public int staticInt9451;
+    static public int staticInt9452;
+    static public int staticInt9453;
+    static public int staticInt9454;
+    static public int staticInt9455;
+    static public int staticInt9456;
+    static public int staticInt9457;
+    static public int staticInt9458;
+    static public int staticInt9459;
+    static public int staticInt9460;
+    static public int staticInt9461;
+    static public int staticInt9462;
+    static public int staticInt9463;
+    static public int staticInt9464;
+    static public int staticInt9465;
+    static public int staticInt9466;
+    static public int staticInt9467;
+    static public int staticInt9468;
+    static public int staticInt9469;
+    static public int staticInt9470;
+    static public int staticInt9471;
+    static public int staticInt9472;
+    static public int staticInt9473;
+    static public int staticInt9474;
+    static public int staticInt9475;
+    static public int staticInt9476;
+    static public int staticInt9477;
+    static public int staticInt9478;
+    static public int staticInt9479;
+    static public int staticInt9480;
+    static public int staticInt9481;
+    static public int staticInt9482;
+    static public int staticInt9483;
+    static public int staticInt9484;
+    static public int staticInt9485;
+    static public int staticInt9486;
+    static public int staticInt9487;
+    static public int staticInt9488;
+    static public int staticInt9489;
+    static public int staticInt9490;
+    static public int staticInt9491;
+    static public int staticInt9492;
+    static public int staticInt9493;
+    static public int staticInt9494;
+    static public int staticInt9495;
+    static public int staticInt9496;
+    static public int staticInt9497;
+    static public int staticInt9498;
+    static public int staticInt9499;
+    static public int staticInt9500;
+    static public int staticInt9501;
+    static public int staticInt9502;
+    static public int staticInt9503;
+    static public int staticInt9504;
+    static public int staticInt9505;
+    static public int staticInt9506;
+    static public int staticInt9507;
+    static public int staticInt9508;
+    static public int staticInt9509;
+    static public int staticInt9510;
+    static public int staticInt9511;
+    static public int staticInt9512;
+    static public int staticInt9513;
+    static public int staticInt9514;
+    static public int staticInt9515;
+    static public int staticInt9516;
+    static public int staticInt9517;
+    static public int staticInt9518;
+    static public int staticInt9519;
+    static public int staticInt9520;
+    static public int staticInt9521;
+    static public int staticInt9522;
+    static public int staticInt9523;
+    static public int staticInt9524;
+    static public int staticInt9525;
+    static public int staticInt9526;
+    static public int staticInt9527;
+    static public int staticInt9528;
+    static public int staticInt9529;
+    static public int staticInt9530;
+    static public int staticInt9531;
+    static public int staticInt9532;
+    static public int staticInt9533;
+    static public int staticInt9534;
+    static public int staticInt9535;
+    static public int staticInt9536;
+    static public int staticInt9537;
+    static public int staticInt9538;
+    static public int staticInt9539;
+    static public int staticInt9540;
+    static public int staticInt9541;
+    static public int staticInt9542;
+    static public int staticInt9543;
+    static public int staticInt9544;
+    static public int staticInt9545;
+    static public int staticInt9546;
+    static public int staticInt9547;
+    static public int staticInt9548;
+    static public int staticInt9549;
+    static public int staticInt9550;
+    static public int staticInt9551;
+    static public int staticInt9552;
+    static public int staticInt9553;
+    static public int staticInt9554;
+    static public int staticInt9555;
+    static public int staticInt9556;
+    static public int staticInt9557;
+    static public int staticInt9558;
+    static public int staticInt9559;
+    static public int staticInt9560;
+    static public int staticInt9561;
+    static public int staticInt9562;
+    static public int staticInt9563;
+    static public int staticInt9564;
+    static public int staticInt9565;
+    static public int staticInt9566;
+    static public int staticInt9567;
+    static public int staticInt9568;
+    static public int staticInt9569;
+    static public int staticInt9570;
+    static public int staticInt9571;
+    static public int staticInt9572;
+    static public int staticInt9573;
+    static public int staticInt9574;
+    static public int staticInt9575;
+    static public int staticInt9576;
+    static public int staticInt9577;
+    static public int staticInt9578;
+    static public int staticInt9579;
+    static public int staticInt9580;
+    static public int staticInt9581;
+    static public int staticInt9582;
+    static public int staticInt9583;
+    static public int staticInt9584;
+    static public int staticInt9585;
+    static public int staticInt9586;
+    static public int staticInt9587;
+    static public int staticInt9588;
+    static public int staticInt9589;
+    static public int staticInt9590;
+    static public int staticInt9591;
+    static public int staticInt9592;
+    static public int staticInt9593;
+    static public int staticInt9594;
+    static public int staticInt9595;
+    static public int staticInt9596;
+    static public int staticInt9597;
+    static public int staticInt9598;
+    static public int staticInt9599;
+    static public int staticInt9600;
+    static public int staticInt9601;
+    static public int staticInt9602;
+    static public int staticInt9603;
+    static public int staticInt9604;
+    static public int staticInt9605;
+    static public int staticInt9606;
+    static public int staticInt9607;
+    static public int staticInt9608;
+    static public int staticInt9609;
+    static public int staticInt9610;
+    static public int staticInt9611;
+    static public int staticInt9612;
+    static public int staticInt9613;
+    static public int staticInt9614;
+    static public int staticInt9615;
+    static public int staticInt9616;
+    static public int staticInt9617;
+    static public int staticInt9618;
+    static public int staticInt9619;
+    static public int staticInt9620;
+    static public int staticInt9621;
+    static public int staticInt9622;
+    static public int staticInt9623;
+    static public int staticInt9624;
+    static public int staticInt9625;
+    static public int staticInt9626;
+    static public int staticInt9627;
+    static public int staticInt9628;
+    static public int staticInt9629;
+    static public int staticInt9630;
+    static public int staticInt9631;
+    static public int staticInt9632;
+    static public int staticInt9633;
+    static public int staticInt9634;
+    static public int staticInt9635;
+    static public int staticInt9636;
+    static public int staticInt9637;
+    static public int staticInt9638;
+    static public int staticInt9639;
+    static public int staticInt9640;
+    static public int staticInt9641;
+    static public int staticInt9642;
+    static public int staticInt9643;
+    static public int staticInt9644;
+    static public int staticInt9645;
+    static public int staticInt9646;
+    static public int staticInt9647;
+    static public int staticInt9648;
+    static public int staticInt9649;
+    static public int staticInt9650;
+    static public int staticInt9651;
+    static public int staticInt9652;
+    static public int staticInt9653;
+    static public int staticInt9654;
+    static public int staticInt9655;
+    static public int staticInt9656;
+    static public int staticInt9657;
+    static public int staticInt9658;
+    static public int staticInt9659;
+    static public int staticInt9660;
+    static public int staticInt9661;
+    static public int staticInt9662;
+    static public int staticInt9663;
+    static public int staticInt9664;
+    static public int staticInt9665;
+    static public int staticInt9666;
+    static public int staticInt9667;
+    static public int staticInt9668;
+    static public int staticInt9669;
+    static public int staticInt9670;
+    static public int staticInt9671;
+    static public int staticInt9672;
+    static public int staticInt9673;
+    static public int staticInt9674;
+    static public int staticInt9675;
+    static public int staticInt9676;
+    static public int staticInt9677;
+    static public int staticInt9678;
+    static public int staticInt9679;
+    static public int staticInt9680;
+    static public int staticInt9681;
+    static public int staticInt9682;
+    static public int staticInt9683;
+    static public int staticInt9684;
+    static public int staticInt9685;
+    static public int staticInt9686;
+    static public int staticInt9687;
+    static public int staticInt9688;
+    static public int staticInt9689;
+    static public int staticInt9690;
+    static public int staticInt9691;
+    static public int staticInt9692;
+    static public int staticInt9693;
+    static public int staticInt9694;
+    static public int staticInt9695;
+    static public int staticInt9696;
+    static public int staticInt9697;
+    static public int staticInt9698;
+    static public int staticInt9699;
+    static public int staticInt9700;
+    static public int staticInt9701;
+    static public int staticInt9702;
+    static public int staticInt9703;
+    static public int staticInt9704;
+    static public int staticInt9705;
+    static public int staticInt9706;
+    static public int staticInt9707;
+    static public int staticInt9708;
+    static public int staticInt9709;
+    static public int staticInt9710;
+    static public int staticInt9711;
+    static public int staticInt9712;
+    static public int staticInt9713;
+    static public int staticInt9714;
+    static public int staticInt9715;
+    static public int staticInt9716;
+    static public int staticInt9717;
+    static public int staticInt9718;
+    static public int staticInt9719;
+    static public int staticInt9720;
+    static public int staticInt9721;
+    static public int staticInt9722;
+    static public int staticInt9723;
+    static public int staticInt9724;
+    static public int staticInt9725;
+    static public int staticInt9726;
+    static public int staticInt9727;
+    static public int staticInt9728;
+    static public int staticInt9729;
+    static public int staticInt9730;
+    static public int staticInt9731;
+    static public int staticInt9732;
+    static public int staticInt9733;
+    static public int staticInt9734;
+    static public int staticInt9735;
+    static public int staticInt9736;
+    static public int staticInt9737;
+    static public int staticInt9738;
+    static public int staticInt9739;
+    static public int staticInt9740;
+    static public int staticInt9741;
+    static public int staticInt9742;
+    static public int staticInt9743;
+    static public int staticInt9744;
+    static public int staticInt9745;
+    static public int staticInt9746;
+    static public int staticInt9747;
+    static public int staticInt9748;
+    static public int staticInt9749;
+    static public int staticInt9750;
+    static public int staticInt9751;
+    static public int staticInt9752;
+    static public int staticInt9753;
+    static public int staticInt9754;
+    static public int staticInt9755;
+    static public int staticInt9756;
+    static public int staticInt9757;
+    static public int staticInt9758;
+    static public int staticInt9759;
+    static public int staticInt9760;
+    static public int staticInt9761;
+    static public int staticInt9762;
+    static public int staticInt9763;
+    static public int staticInt9764;
+    static public int staticInt9765;
+    static public int staticInt9766;
+    static public int staticInt9767;
+    static public int staticInt9768;
+    static public int staticInt9769;
+    static public int staticInt9770;
+    static public int staticInt9771;
+    static public int staticInt9772;
+    static public int staticInt9773;
+    static public int staticInt9774;
+    static public int staticInt9775;
+    static public int staticInt9776;
+    static public int staticInt9777;
+    static public int staticInt9778;
+    static public int staticInt9779;
+    static public int staticInt9780;
+    static public int staticInt9781;
+    static public int staticInt9782;
+    static public int staticInt9783;
+    static public int staticInt9784;
+    static public int staticInt9785;
+    static public int staticInt9786;
+    static public int staticInt9787;
+    static public int staticInt9788;
+    static public int staticInt9789;
+    static public int staticInt9790;
+    static public int staticInt9791;
+    static public int staticInt9792;
+    static public int staticInt9793;
+    static public int staticInt9794;
+    static public int staticInt9795;
+    static public int staticInt9796;
+    static public int staticInt9797;
+    static public int staticInt9798;
+    static public int staticInt9799;
+    static public int staticInt9800;
+    static public int staticInt9801;
+    static public int staticInt9802;
+    static public int staticInt9803;
+    static public int staticInt9804;
+    static public int staticInt9805;
+    static public int staticInt9806;
+    static public int staticInt9807;
+    static public int staticInt9808;
+    static public int staticInt9809;
+    static public int staticInt9810;
+    static public int staticInt9811;
+    static public int staticInt9812;
+    static public int staticInt9813;
+    static public int staticInt9814;
+    static public int staticInt9815;
+    static public int staticInt9816;
+    static public int staticInt9817;
+    static public int staticInt9818;
+    static public int staticInt9819;
+    static public int staticInt9820;
+    static public int staticInt9821;
+    static public int staticInt9822;
+    static public int staticInt9823;
+    static public int staticInt9824;
+    static public int staticInt9825;
+    static public int staticInt9826;
+    static public int staticInt9827;
+    static public int staticInt9828;
+    static public int staticInt9829;
+    static public int staticInt9830;
+    static public int staticInt9831;
+    static public int staticInt9832;
+    static public int staticInt9833;
+    static public int staticInt9834;
+    static public int staticInt9835;
+    static public int staticInt9836;
+    static public int staticInt9837;
+    static public int staticInt9838;
+    static public int staticInt9839;
+    static public int staticInt9840;
+    static public int staticInt9841;
+    static public int staticInt9842;
+    static public int staticInt9843;
+    static public int staticInt9844;
+    static public int staticInt9845;
+    static public int staticInt9846;
+    static public int staticInt9847;
+    static public int staticInt9848;
+    static public int staticInt9849;
+    static public int staticInt9850;
+    static public int staticInt9851;
+    static public int staticInt9852;
+    static public int staticInt9853;
+    static public int staticInt9854;
+    static public int staticInt9855;
+    static public int staticInt9856;
+    static public int staticInt9857;
+    static public int staticInt9858;
+    static public int staticInt9859;
+    static public int staticInt9860;
+    static public int staticInt9861;
+    static public int staticInt9862;
+    static public int staticInt9863;
+    static public int staticInt9864;
+    static public int staticInt9865;
+    static public int staticInt9866;
+    static public int staticInt9867;
+    static public int staticInt9868;
+    static public int staticInt9869;
+    static public int staticInt9870;
+    static public int staticInt9871;
+    static public int staticInt9872;
+    static public int staticInt9873;
+    static public int staticInt9874;
+    static public int staticInt9875;
+    static public int staticInt9876;
+    static public int staticInt9877;
+    static public int staticInt9878;
+    static public int staticInt9879;
+    static public int staticInt9880;
+    static public int staticInt9881;
+    static public int staticInt9882;
+    static public int staticInt9883;
+    static public int staticInt9884;
+    static public int staticInt9885;
+    static public int staticInt9886;
+    static public int staticInt9887;
+    static public int staticInt9888;
+    static public int staticInt9889;
+    static public int staticInt9890;
+    static public int staticInt9891;
+    static public int staticInt9892;
+    static public int staticInt9893;
+    static public int staticInt9894;
+    static public int staticInt9895;
+    static public int staticInt9896;
+    static public int staticInt9897;
+    static public int staticInt9898;
+    static public int staticInt9899;
+    static public int staticInt9900;
+    static public int staticInt9901;
+    static public int staticInt9902;
+    static public int staticInt9903;
+    static public int staticInt9904;
+    static public int staticInt9905;
+    static public int staticInt9906;
+    static public int staticInt9907;
+    static public int staticInt9908;
+    static public int staticInt9909;
+    static public int staticInt9910;
+    static public int staticInt9911;
+    static public int staticInt9912;
+    static public int staticInt9913;
+    static public int staticInt9914;
+    static public int staticInt9915;
+    static public int staticInt9916;
+    static public int staticInt9917;
+    static public int staticInt9918;
+    static public int staticInt9919;
+    static public int staticInt9920;
+    static public int staticInt9921;
+    static public int staticInt9922;
+    static public int staticInt9923;
+    static public int staticInt9924;
+    static public int staticInt9925;
+    static public int staticInt9926;
+    static public int staticInt9927;
+    static public int staticInt9928;
+    static public int staticInt9929;
+    static public int staticInt9930;
+    static public int staticInt9931;
+    static public int staticInt9932;
+    static public int staticInt9933;
+    static public int staticInt9934;
+    static public int staticInt9935;
+    static public int staticInt9936;
+    static public int staticInt9937;
+    static public int staticInt9938;
+    static public int staticInt9939;
+    static public int staticInt9940;
+    static public int staticInt9941;
+    static public int staticInt9942;
+    static public int staticInt9943;
+    static public int staticInt9944;
+    static public int staticInt9945;
+    static public int staticInt9946;
+    static public int staticInt9947;
+    static public int staticInt9948;
+    static public int staticInt9949;
+    static public int staticInt9950;
+    static public int staticInt9951;
+    static public int staticInt9952;
+    static public int staticInt9953;
+    static public int staticInt9954;
+    static public int staticInt9955;
+    static public int staticInt9956;
+    static public int staticInt9957;
+    static public int staticInt9958;
+    static public int staticInt9959;
+    static public int staticInt9960;
+    static public int staticInt9961;
+    static public int staticInt9962;
+    static public int staticInt9963;
+    static public int staticInt9964;
+    static public int staticInt9965;
+    static public int staticInt9966;
+    static public int staticInt9967;
+    static public int staticInt9968;
+    static public int staticInt9969;
+    static public int staticInt9970;
+    static public int staticInt9971;
+    static public int staticInt9972;
+    static public int staticInt9973;
+    static public int staticInt9974;
+    static public int staticInt9975;
+    static public int staticInt9976;
+    static public int staticInt9977;
+    static public int staticInt9978;
+    static public int staticInt9979;
+    static public int staticInt9980;
+    static public int staticInt9981;
+    static public int staticInt9982;
+    static public int staticInt9983;
+    static public int staticInt9984;
+    static public int staticInt9985;
+    static public int staticInt9986;
+    static public int staticInt9987;
+    static public int staticInt9988;
+    static public int staticInt9989;
+    static public int staticInt9990;
+    static public int staticInt9991;
+    static public int staticInt9992;
+    static public int staticInt9993;
+    static public int staticInt9994;
+    static public int staticInt9995;
+    static public int staticInt9996;
+    static public int staticInt9997;
+    static public int staticInt9998;
+    static public int staticInt9999;
+    static public int staticInt10000;
+    static public int staticInt10001;
+    static public int staticInt10002;
+    static public int staticInt10003;
+    static public int staticInt10004;
+    static public int staticInt10005;
+    static public int staticInt10006;
+    static public int staticInt10007;
+    static public int staticInt10008;
+    static public int staticInt10009;
+    static public int staticInt10010;
+    static public int staticInt10011;
+    static public int staticInt10012;
+    static public int staticInt10013;
+    static public int staticInt10014;
+    static public int staticInt10015;
+    static public int staticInt10016;
+    static public int staticInt10017;
+    static public int staticInt10018;
+    static public int staticInt10019;
+    static public int staticInt10020;
+    static public int staticInt10021;
+    static public int staticInt10022;
+    static public int staticInt10023;
+    static public int staticInt10024;
+    static public int staticInt10025;
+    static public int staticInt10026;
+    static public int staticInt10027;
+    static public int staticInt10028;
+    static public int staticInt10029;
+    static public int staticInt10030;
+    static public int staticInt10031;
+    static public int staticInt10032;
+    static public int staticInt10033;
+    static public int staticInt10034;
+    static public int staticInt10035;
+    static public int staticInt10036;
+    static public int staticInt10037;
+    static public int staticInt10038;
+    static public int staticInt10039;
+    static public int staticInt10040;
+    static public int staticInt10041;
+    static public int staticInt10042;
+    static public int staticInt10043;
+    static public int staticInt10044;
+    static public int staticInt10045;
+    static public int staticInt10046;
+    static public int staticInt10047;
+    static public int staticInt10048;
+    static public int staticInt10049;
+    static public int staticInt10050;
+    static public int staticInt10051;
+    static public int staticInt10052;
+    static public int staticInt10053;
+    static public int staticInt10054;
+    static public int staticInt10055;
+    static public int staticInt10056;
+    static public int staticInt10057;
+    static public int staticInt10058;
+    static public int staticInt10059;
+    static public int staticInt10060;
+    static public int staticInt10061;
+    static public int staticInt10062;
+    static public int staticInt10063;
+    static public int staticInt10064;
+    static public int staticInt10065;
+    static public int staticInt10066;
+    static public int staticInt10067;
+    static public int staticInt10068;
+    static public int staticInt10069;
+    static public int staticInt10070;
+    static public int staticInt10071;
+    static public int staticInt10072;
+    static public int staticInt10073;
+    static public int staticInt10074;
+    static public int staticInt10075;
+    static public int staticInt10076;
+    static public int staticInt10077;
+    static public int staticInt10078;
+    static public int staticInt10079;
+    static public int staticInt10080;
+    static public int staticInt10081;
+    static public int staticInt10082;
+    static public int staticInt10083;
+    static public int staticInt10084;
+    static public int staticInt10085;
+    static public int staticInt10086;
+    static public int staticInt10087;
+    static public int staticInt10088;
+    static public int staticInt10089;
+    static public int staticInt10090;
+    static public int staticInt10091;
+    static public int staticInt10092;
+    static public int staticInt10093;
+    static public int staticInt10094;
+    static public int staticInt10095;
+    static public int staticInt10096;
+    static public int staticInt10097;
+    static public int staticInt10098;
+    static public int staticInt10099;
+    static public int staticInt10100;
+    static public int staticInt10101;
+    static public int staticInt10102;
+    static public int staticInt10103;
+    static public int staticInt10104;
+    static public int staticInt10105;
+    static public int staticInt10106;
+    static public int staticInt10107;
+    static public int staticInt10108;
+    static public int staticInt10109;
+    static public int staticInt10110;
+    static public int staticInt10111;
+    static public int staticInt10112;
+    static public int staticInt10113;
+    static public int staticInt10114;
+    static public int staticInt10115;
+    static public int staticInt10116;
+    static public int staticInt10117;
+    static public int staticInt10118;
+    static public int staticInt10119;
+    static public int staticInt10120;
+    static public int staticInt10121;
+    static public int staticInt10122;
+    static public int staticInt10123;
+    static public int staticInt10124;
+    static public int staticInt10125;
+    static public int staticInt10126;
+    static public int staticInt10127;
+    static public int staticInt10128;
+    static public int staticInt10129;
+    static public int staticInt10130;
+    static public int staticInt10131;
+    static public int staticInt10132;
+    static public int staticInt10133;
+    static public int staticInt10134;
+    static public int staticInt10135;
+    static public int staticInt10136;
+    static public int staticInt10137;
+    static public int staticInt10138;
+    static public int staticInt10139;
+    static public int staticInt10140;
+    static public int staticInt10141;
+    static public int staticInt10142;
+    static public int staticInt10143;
+    static public int staticInt10144;
+    static public int staticInt10145;
+    static public int staticInt10146;
+    static public int staticInt10147;
+    static public int staticInt10148;
+    static public int staticInt10149;
+    static public int staticInt10150;
+    static public int staticInt10151;
+    static public int staticInt10152;
+    static public int staticInt10153;
+    static public int staticInt10154;
+    static public int staticInt10155;
+    static public int staticInt10156;
+    static public int staticInt10157;
+    static public int staticInt10158;
+    static public int staticInt10159;
+    static public int staticInt10160;
+    static public int staticInt10161;
+    static public int staticInt10162;
+    static public int staticInt10163;
+    static public int staticInt10164;
+    static public int staticInt10165;
+    static public int staticInt10166;
+    static public int staticInt10167;
+    static public int staticInt10168;
+    static public int staticInt10169;
+    static public int staticInt10170;
+    static public int staticInt10171;
+    static public int staticInt10172;
+    static public int staticInt10173;
+    static public int staticInt10174;
+    static public int staticInt10175;
+    static public int staticInt10176;
+    static public int staticInt10177;
+    static public int staticInt10178;
+    static public int staticInt10179;
+    static public int staticInt10180;
+    static public int staticInt10181;
+    static public int staticInt10182;
+    static public int staticInt10183;
+    static public int staticInt10184;
+    static public int staticInt10185;
+    static public int staticInt10186;
+    static public int staticInt10187;
+    static public int staticInt10188;
+    static public int staticInt10189;
+    static public int staticInt10190;
+    static public int staticInt10191;
+    static public int staticInt10192;
+    static public int staticInt10193;
+    static public int staticInt10194;
+    static public int staticInt10195;
+    static public int staticInt10196;
+    static public int staticInt10197;
+    static public int staticInt10198;
+    static public int staticInt10199;
+    static public int staticInt10200;
+    static public int staticInt10201;
+    static public int staticInt10202;
+    static public int staticInt10203;
+    static public int staticInt10204;
+    static public int staticInt10205;
+    static public int staticInt10206;
+    static public int staticInt10207;
+    static public int staticInt10208;
+    static public int staticInt10209;
+    static public int staticInt10210;
+    static public int staticInt10211;
+    static public int staticInt10212;
+    static public int staticInt10213;
+    static public int staticInt10214;
+    static public int staticInt10215;
+    static public int staticInt10216;
+    static public int staticInt10217;
+    static public int staticInt10218;
+    static public int staticInt10219;
+    static public int staticInt10220;
+    static public int staticInt10221;
+    static public int staticInt10222;
+    static public int staticInt10223;
+    static public int staticInt10224;
+    static public int staticInt10225;
+    static public int staticInt10226;
+    static public int staticInt10227;
+    static public int staticInt10228;
+    static public int staticInt10229;
+    static public int staticInt10230;
+    static public int staticInt10231;
+    static public int staticInt10232;
+    static public int staticInt10233;
+    static public int staticInt10234;
+    static public int staticInt10235;
+    static public int staticInt10236;
+    static public int staticInt10237;
+    static public int staticInt10238;
+    static public int staticInt10239;
+    static public int staticInt10240;
+    static public int staticInt10241;
+    static public int staticInt10242;
+    static public int staticInt10243;
+    static public int staticInt10244;
+    static public int staticInt10245;
+    static public int staticInt10246;
+    static public int staticInt10247;
+    static public int staticInt10248;
+    static public int staticInt10249;
+    static public int staticInt10250;
+    static public int staticInt10251;
+    static public int staticInt10252;
+    static public int staticInt10253;
+    static public int staticInt10254;
+    static public int staticInt10255;
+    static public int staticInt10256;
+    static public int staticInt10257;
+    static public int staticInt10258;
+    static public int staticInt10259;
+    static public int staticInt10260;
+    static public int staticInt10261;
+    static public int staticInt10262;
+    static public int staticInt10263;
+    static public int staticInt10264;
+    static public int staticInt10265;
+    static public int staticInt10266;
+    static public int staticInt10267;
+    static public int staticInt10268;
+    static public int staticInt10269;
+    static public int staticInt10270;
+    static public int staticInt10271;
+    static public int staticInt10272;
+    static public int staticInt10273;
+    static public int staticInt10274;
+    static public int staticInt10275;
+    static public int staticInt10276;
+    static public int staticInt10277;
+    static public int staticInt10278;
+    static public int staticInt10279;
+    static public int staticInt10280;
+    static public int staticInt10281;
+    static public int staticInt10282;
+    static public int staticInt10283;
+    static public int staticInt10284;
+    static public int staticInt10285;
+    static public int staticInt10286;
+    static public int staticInt10287;
+    static public int staticInt10288;
+    static public int staticInt10289;
+    static public int staticInt10290;
+    static public int staticInt10291;
+    static public int staticInt10292;
+    static public int staticInt10293;
+    static public int staticInt10294;
+    static public int staticInt10295;
+    static public int staticInt10296;
+    static public int staticInt10297;
+    static public int staticInt10298;
+    static public int staticInt10299;
+    static public int staticInt10300;
+    static public int staticInt10301;
+    static public int staticInt10302;
+    static public int staticInt10303;
+    static public int staticInt10304;
+    static public int staticInt10305;
+    static public int staticInt10306;
+    static public int staticInt10307;
+    static public int staticInt10308;
+    static public int staticInt10309;
+    static public int staticInt10310;
+    static public int staticInt10311;
+    static public int staticInt10312;
+    static public int staticInt10313;
+    static public int staticInt10314;
+    static public int staticInt10315;
+    static public int staticInt10316;
+    static public int staticInt10317;
+    static public int staticInt10318;
+    static public int staticInt10319;
+    static public int staticInt10320;
+    static public int staticInt10321;
+    static public int staticInt10322;
+    static public int staticInt10323;
+    static public int staticInt10324;
+    static public int staticInt10325;
+    static public int staticInt10326;
+    static public int staticInt10327;
+    static public int staticInt10328;
+    static public int staticInt10329;
+    static public int staticInt10330;
+    static public int staticInt10331;
+    static public int staticInt10332;
+    static public int staticInt10333;
+    static public int staticInt10334;
+    static public int staticInt10335;
+    static public int staticInt10336;
+    static public int staticInt10337;
+    static public int staticInt10338;
+    static public int staticInt10339;
+    static public int staticInt10340;
+    static public int staticInt10341;
+    static public int staticInt10342;
+    static public int staticInt10343;
+    static public int staticInt10344;
+    static public int staticInt10345;
+    static public int staticInt10346;
+    static public int staticInt10347;
+    static public int staticInt10348;
+    static public int staticInt10349;
+    static public int staticInt10350;
+    static public int staticInt10351;
+    static public int staticInt10352;
+    static public int staticInt10353;
+    static public int staticInt10354;
+    static public int staticInt10355;
+    static public int staticInt10356;
+    static public int staticInt10357;
+    static public int staticInt10358;
+    static public int staticInt10359;
+    static public int staticInt10360;
+    static public int staticInt10361;
+    static public int staticInt10362;
+    static public int staticInt10363;
+    static public int staticInt10364;
+    static public int staticInt10365;
+    static public int staticInt10366;
+    static public int staticInt10367;
+    static public int staticInt10368;
+    static public int staticInt10369;
+    static public int staticInt10370;
+    static public int staticInt10371;
+    static public int staticInt10372;
+    static public int staticInt10373;
+    static public int staticInt10374;
+    static public int staticInt10375;
+    static public int staticInt10376;
+    static public int staticInt10377;
+    static public int staticInt10378;
+    static public int staticInt10379;
+    static public int staticInt10380;
+    static public int staticInt10381;
+    static public int staticInt10382;
+    static public int staticInt10383;
+    static public int staticInt10384;
+    static public int staticInt10385;
+    static public int staticInt10386;
+    static public int staticInt10387;
+    static public int staticInt10388;
+    static public int staticInt10389;
+    static public int staticInt10390;
+    static public int staticInt10391;
+    static public int staticInt10392;
+    static public int staticInt10393;
+    static public int staticInt10394;
+    static public int staticInt10395;
+    static public int staticInt10396;
+    static public int staticInt10397;
+    static public int staticInt10398;
+    static public int staticInt10399;
+    static public int staticInt10400;
+    static public int staticInt10401;
+    static public int staticInt10402;
+    static public int staticInt10403;
+    static public int staticInt10404;
+    static public int staticInt10405;
+    static public int staticInt10406;
+    static public int staticInt10407;
+    static public int staticInt10408;
+    static public int staticInt10409;
+    static public int staticInt10410;
+    static public int staticInt10411;
+    static public int staticInt10412;
+    static public int staticInt10413;
+    static public int staticInt10414;
+    static public int staticInt10415;
+    static public int staticInt10416;
+    static public int staticInt10417;
+    static public int staticInt10418;
+    static public int staticInt10419;
+    static public int staticInt10420;
+    static public int staticInt10421;
+    static public int staticInt10422;
+    static public int staticInt10423;
+    static public int staticInt10424;
+    static public int staticInt10425;
+    static public int staticInt10426;
+    static public int staticInt10427;
+    static public int staticInt10428;
+    static public int staticInt10429;
+    static public int staticInt10430;
+    static public int staticInt10431;
+    static public int staticInt10432;
+    static public int staticInt10433;
+    static public int staticInt10434;
+    static public int staticInt10435;
+    static public int staticInt10436;
+    static public int staticInt10437;
+    static public int staticInt10438;
+    static public int staticInt10439;
+    static public int staticInt10440;
+    static public int staticInt10441;
+    static public int staticInt10442;
+    static public int staticInt10443;
+    static public int staticInt10444;
+    static public int staticInt10445;
+    static public int staticInt10446;
+    static public int staticInt10447;
+    static public int staticInt10448;
+    static public int staticInt10449;
+    static public int staticInt10450;
+    static public int staticInt10451;
+    static public int staticInt10452;
+    static public int staticInt10453;
+    static public int staticInt10454;
+    static public int staticInt10455;
+    static public int staticInt10456;
+    static public int staticInt10457;
+    static public int staticInt10458;
+    static public int staticInt10459;
+    static public int staticInt10460;
+    static public int staticInt10461;
+    static public int staticInt10462;
+    static public int staticInt10463;
+    static public int staticInt10464;
+    static public int staticInt10465;
+    static public int staticInt10466;
+    static public int staticInt10467;
+    static public int staticInt10468;
+    static public int staticInt10469;
+    static public int staticInt10470;
+    static public int staticInt10471;
+    static public int staticInt10472;
+    static public int staticInt10473;
+    static public int staticInt10474;
+    static public int staticInt10475;
+    static public int staticInt10476;
+    static public int staticInt10477;
+    static public int staticInt10478;
+    static public int staticInt10479;
+    static public int staticInt10480;
+    static public int staticInt10481;
+    static public int staticInt10482;
+    static public int staticInt10483;
+    static public int staticInt10484;
+    static public int staticInt10485;
+    static public int staticInt10486;
+    static public int staticInt10487;
+    static public int staticInt10488;
+    static public int staticInt10489;
+    static public int staticInt10490;
+    static public int staticInt10491;
+    static public int staticInt10492;
+    static public int staticInt10493;
+    static public int staticInt10494;
+    static public int staticInt10495;
+    static public int staticInt10496;
+    static public int staticInt10497;
+    static public int staticInt10498;
+    static public int staticInt10499;
+    static public int staticInt10500;
+    static public int staticInt10501;
+    static public int staticInt10502;
+    static public int staticInt10503;
+    static public int staticInt10504;
+    static public int staticInt10505;
+    static public int staticInt10506;
+    static public int staticInt10507;
+    static public int staticInt10508;
+    static public int staticInt10509;
+    static public int staticInt10510;
+    static public int staticInt10511;
+    static public int staticInt10512;
+    static public int staticInt10513;
+    static public int staticInt10514;
+    static public int staticInt10515;
+    static public int staticInt10516;
+    static public int staticInt10517;
+    static public int staticInt10518;
+    static public int staticInt10519;
+    static public int staticInt10520;
+    static public int staticInt10521;
+    static public int staticInt10522;
+    static public int staticInt10523;
+    static public int staticInt10524;
+    static public int staticInt10525;
+    static public int staticInt10526;
+    static public int staticInt10527;
+    static public int staticInt10528;
+    static public int staticInt10529;
+    static public int staticInt10530;
+    static public int staticInt10531;
+    static public int staticInt10532;
+    static public int staticInt10533;
+    static public int staticInt10534;
+    static public int staticInt10535;
+    static public int staticInt10536;
+    static public int staticInt10537;
+    static public int staticInt10538;
+    static public int staticInt10539;
+    static public int staticInt10540;
+    static public int staticInt10541;
+    static public int staticInt10542;
+    static public int staticInt10543;
+    static public int staticInt10544;
+    static public int staticInt10545;
+    static public int staticInt10546;
+    static public int staticInt10547;
+    static public int staticInt10548;
+    static public int staticInt10549;
+    static public int staticInt10550;
+    static public int staticInt10551;
+    static public int staticInt10552;
+    static public int staticInt10553;
+    static public int staticInt10554;
+    static public int staticInt10555;
+    static public int staticInt10556;
+    static public int staticInt10557;
+    static public int staticInt10558;
+    static public int staticInt10559;
+    static public int staticInt10560;
+    static public int staticInt10561;
+    static public int staticInt10562;
+    static public int staticInt10563;
+    static public int staticInt10564;
+    static public int staticInt10565;
+    static public int staticInt10566;
+    static public int staticInt10567;
+    static public int staticInt10568;
+    static public int staticInt10569;
+    static public int staticInt10570;
+    static public int staticInt10571;
+    static public int staticInt10572;
+    static public int staticInt10573;
+    static public int staticInt10574;
+    static public int staticInt10575;
+    static public int staticInt10576;
+    static public int staticInt10577;
+    static public int staticInt10578;
+    static public int staticInt10579;
+    static public int staticInt10580;
+    static public int staticInt10581;
+    static public int staticInt10582;
+    static public int staticInt10583;
+    static public int staticInt10584;
+    static public int staticInt10585;
+    static public int staticInt10586;
+    static public int staticInt10587;
+    static public int staticInt10588;
+    static public int staticInt10589;
+    static public int staticInt10590;
+    static public int staticInt10591;
+    static public int staticInt10592;
+    static public int staticInt10593;
+    static public int staticInt10594;
+    static public int staticInt10595;
+    static public int staticInt10596;
+    static public int staticInt10597;
+    static public int staticInt10598;
+    static public int staticInt10599;
+    static public int staticInt10600;
+    static public int staticInt10601;
+    static public int staticInt10602;
+    static public int staticInt10603;
+    static public int staticInt10604;
+    static public int staticInt10605;
+    static public int staticInt10606;
+    static public int staticInt10607;
+    static public int staticInt10608;
+    static public int staticInt10609;
+    static public int staticInt10610;
+    static public int staticInt10611;
+    static public int staticInt10612;
+    static public int staticInt10613;
+    static public int staticInt10614;
+    static public int staticInt10615;
+    static public int staticInt10616;
+    static public int staticInt10617;
+    static public int staticInt10618;
+    static public int staticInt10619;
+    static public int staticInt10620;
+    static public int staticInt10621;
+    static public int staticInt10622;
+    static public int staticInt10623;
+    static public int staticInt10624;
+    static public int staticInt10625;
+    static public int staticInt10626;
+    static public int staticInt10627;
+    static public int staticInt10628;
+    static public int staticInt10629;
+    static public int staticInt10630;
+    static public int staticInt10631;
+    static public int staticInt10632;
+    static public int staticInt10633;
+    static public int staticInt10634;
+    static public int staticInt10635;
+    static public int staticInt10636;
+    static public int staticInt10637;
+    static public int staticInt10638;
+    static public int staticInt10639;
+    static public int staticInt10640;
+    static public int staticInt10641;
+    static public int staticInt10642;
+    static public int staticInt10643;
+    static public int staticInt10644;
+    static public int staticInt10645;
+    static public int staticInt10646;
+    static public int staticInt10647;
+    static public int staticInt10648;
+    static public int staticInt10649;
+    static public int staticInt10650;
+    static public int staticInt10651;
+    static public int staticInt10652;
+    static public int staticInt10653;
+    static public int staticInt10654;
+    static public int staticInt10655;
+    static public int staticInt10656;
+    static public int staticInt10657;
+    static public int staticInt10658;
+    static public int staticInt10659;
+    static public int staticInt10660;
+    static public int staticInt10661;
+    static public int staticInt10662;
+    static public int staticInt10663;
+    static public int staticInt10664;
+    static public int staticInt10665;
+    static public int staticInt10666;
+    static public int staticInt10667;
+    static public int staticInt10668;
+    static public int staticInt10669;
+    static public int staticInt10670;
+    static public int staticInt10671;
+    static public int staticInt10672;
+    static public int staticInt10673;
+    static public int staticInt10674;
+    static public int staticInt10675;
+    static public int staticInt10676;
+    static public int staticInt10677;
+    static public int staticInt10678;
+    static public int staticInt10679;
+    static public int staticInt10680;
+    static public int staticInt10681;
+    static public int staticInt10682;
+    static public int staticInt10683;
+    static public int staticInt10684;
+    static public int staticInt10685;
+    static public int staticInt10686;
+    static public int staticInt10687;
+    static public int staticInt10688;
+    static public int staticInt10689;
+    static public int staticInt10690;
+    static public int staticInt10691;
+    static public int staticInt10692;
+    static public int staticInt10693;
+    static public int staticInt10694;
+    static public int staticInt10695;
+    static public int staticInt10696;
+    static public int staticInt10697;
+    static public int staticInt10698;
+    static public int staticInt10699;
+    static public int staticInt10700;
+    static public int staticInt10701;
+    static public int staticInt10702;
+    static public int staticInt10703;
+    static public int staticInt10704;
+    static public int staticInt10705;
+    static public int staticInt10706;
+    static public int staticInt10707;
+    static public int staticInt10708;
+    static public int staticInt10709;
+    static public int staticInt10710;
+    static public int staticInt10711;
+    static public int staticInt10712;
+    static public int staticInt10713;
+    static public int staticInt10714;
+    static public int staticInt10715;
+    static public int staticInt10716;
+    static public int staticInt10717;
+    static public int staticInt10718;
+    static public int staticInt10719;
+    static public int staticInt10720;
+    static public int staticInt10721;
+    static public int staticInt10722;
+    static public int staticInt10723;
+    static public int staticInt10724;
+    static public int staticInt10725;
+    static public int staticInt10726;
+    static public int staticInt10727;
+    static public int staticInt10728;
+    static public int staticInt10729;
+    static public int staticInt10730;
+    static public int staticInt10731;
+    static public int staticInt10732;
+    static public int staticInt10733;
+    static public int staticInt10734;
+    static public int staticInt10735;
+    static public int staticInt10736;
+    static public int staticInt10737;
+    static public int staticInt10738;
+    static public int staticInt10739;
+    static public int staticInt10740;
+    static public int staticInt10741;
+    static public int staticInt10742;
+    static public int staticInt10743;
+    static public int staticInt10744;
+    static public int staticInt10745;
+    static public int staticInt10746;
+    static public int staticInt10747;
+    static public int staticInt10748;
+    static public int staticInt10749;
+    static public int staticInt10750;
+    static public int staticInt10751;
+    static public int staticInt10752;
+    static public int staticInt10753;
+    static public int staticInt10754;
+    static public int staticInt10755;
+    static public int staticInt10756;
+    static public int staticInt10757;
+    static public int staticInt10758;
+    static public int staticInt10759;
+    static public int staticInt10760;
+    static public int staticInt10761;
+    static public int staticInt10762;
+    static public int staticInt10763;
+    static public int staticInt10764;
+    static public int staticInt10765;
+    static public int staticInt10766;
+    static public int staticInt10767;
+    static public int staticInt10768;
+    static public int staticInt10769;
+    static public int staticInt10770;
+    static public int staticInt10771;
+    static public int staticInt10772;
+    static public int staticInt10773;
+    static public int staticInt10774;
+    static public int staticInt10775;
+    static public int staticInt10776;
+    static public int staticInt10777;
+    static public int staticInt10778;
+    static public int staticInt10779;
+    static public int staticInt10780;
+    static public int staticInt10781;
+    static public int staticInt10782;
+    static public int staticInt10783;
+    static public int staticInt10784;
+    static public int staticInt10785;
+    static public int staticInt10786;
+    static public int staticInt10787;
+    static public int staticInt10788;
+    static public int staticInt10789;
+    static public int staticInt10790;
+    static public int staticInt10791;
+    static public int staticInt10792;
+    static public int staticInt10793;
+    static public int staticInt10794;
+    static public int staticInt10795;
+    static public int staticInt10796;
+    static public int staticInt10797;
+    static public int staticInt10798;
+    static public int staticInt10799;
+    static public int staticInt10800;
+    static public int staticInt10801;
+    static public int staticInt10802;
+    static public int staticInt10803;
+    static public int staticInt10804;
+    static public int staticInt10805;
+    static public int staticInt10806;
+    static public int staticInt10807;
+    static public int staticInt10808;
+    static public int staticInt10809;
+    static public int staticInt10810;
+    static public int staticInt10811;
+    static public int staticInt10812;
+    static public int staticInt10813;
+    static public int staticInt10814;
+    static public int staticInt10815;
+    static public int staticInt10816;
+    static public int staticInt10817;
+    static public int staticInt10818;
+    static public int staticInt10819;
+    static public int staticInt10820;
+    static public int staticInt10821;
+    static public int staticInt10822;
+    static public int staticInt10823;
+    static public int staticInt10824;
+    static public int staticInt10825;
+    static public int staticInt10826;
+    static public int staticInt10827;
+    static public int staticInt10828;
+    static public int staticInt10829;
+    static public int staticInt10830;
+    static public int staticInt10831;
+    static public int staticInt10832;
+    static public int staticInt10833;
+    static public int staticInt10834;
+    static public int staticInt10835;
+    static public int staticInt10836;
+    static public int staticInt10837;
+    static public int staticInt10838;
+    static public int staticInt10839;
+    static public int staticInt10840;
+    static public int staticInt10841;
+    static public int staticInt10842;
+    static public int staticInt10843;
+    static public int staticInt10844;
+    static public int staticInt10845;
+    static public int staticInt10846;
+    static public int staticInt10847;
+    static public int staticInt10848;
+    static public int staticInt10849;
+    static public int staticInt10850;
+    static public int staticInt10851;
+    static public int staticInt10852;
+    static public int staticInt10853;
+    static public int staticInt10854;
+    static public int staticInt10855;
+    static public int staticInt10856;
+    static public int staticInt10857;
+    static public int staticInt10858;
+    static public int staticInt10859;
+    static public int staticInt10860;
+    static public int staticInt10861;
+    static public int staticInt10862;
+    static public int staticInt10863;
+    static public int staticInt10864;
+    static public int staticInt10865;
+    static public int staticInt10866;
+    static public int staticInt10867;
+    static public int staticInt10868;
+    static public int staticInt10869;
+    static public int staticInt10870;
+    static public int staticInt10871;
+    static public int staticInt10872;
+    static public int staticInt10873;
+    static public int staticInt10874;
+    static public int staticInt10875;
+    static public int staticInt10876;
+    static public int staticInt10877;
+    static public int staticInt10878;
+    static public int staticInt10879;
+    static public int staticInt10880;
+    static public int staticInt10881;
+    static public int staticInt10882;
+    static public int staticInt10883;
+    static public int staticInt10884;
+    static public int staticInt10885;
+    static public int staticInt10886;
+    static public int staticInt10887;
+    static public int staticInt10888;
+    static public int staticInt10889;
+    static public int staticInt10890;
+    static public int staticInt10891;
+    static public int staticInt10892;
+    static public int staticInt10893;
+    static public int staticInt10894;
+    static public int staticInt10895;
+    static public int staticInt10896;
+    static public int staticInt10897;
+    static public int staticInt10898;
+    static public int staticInt10899;
+    static public int staticInt10900;
+    static public int staticInt10901;
+    static public int staticInt10902;
+    static public int staticInt10903;
+    static public int staticInt10904;
+    static public int staticInt10905;
+    static public int staticInt10906;
+    static public int staticInt10907;
+    static public int staticInt10908;
+    static public int staticInt10909;
+    static public int staticInt10910;
+    static public int staticInt10911;
+    static public int staticInt10912;
+    static public int staticInt10913;
+    static public int staticInt10914;
+    static public int staticInt10915;
+    static public int staticInt10916;
+    static public int staticInt10917;
+    static public int staticInt10918;
+    static public int staticInt10919;
+    static public int staticInt10920;
+    static public int staticInt10921;
+    static public int staticInt10922;
+    static public int staticInt10923;
+    static public int staticInt10924;
+    static public int staticInt10925;
+    static public int staticInt10926;
+    static public int staticInt10927;
+    static public int staticInt10928;
+    static public int staticInt10929;
+    static public int staticInt10930;
+    static public int staticInt10931;
+    static public int staticInt10932;
+    static public int staticInt10933;
+    static public int staticInt10934;
+    static public int staticInt10935;
+    static public int staticInt10936;
+    static public int staticInt10937;
+    static public int staticInt10938;
+    static public int staticInt10939;
+    static public int staticInt10940;
+    static public int staticInt10941;
+    static public int staticInt10942;
+    static public int staticInt10943;
+    static public int staticInt10944;
+    static public int staticInt10945;
+    static public int staticInt10946;
+    static public int staticInt10947;
+    static public int staticInt10948;
+    static public int staticInt10949;
+    static public int staticInt10950;
+    static public int staticInt10951;
+    static public int staticInt10952;
+    static public int staticInt10953;
+    static public int staticInt10954;
+    static public int staticInt10955;
+    static public int staticInt10956;
+    static public int staticInt10957;
+    static public int staticInt10958;
+    static public int staticInt10959;
+    static public int staticInt10960;
+    static public int staticInt10961;
+    static public int staticInt10962;
+    static public int staticInt10963;
+    static public int staticInt10964;
+    static public int staticInt10965;
+    static public int staticInt10966;
+    static public int staticInt10967;
+    static public int staticInt10968;
+    static public int staticInt10969;
+    static public int staticInt10970;
+    static public int staticInt10971;
+    static public int staticInt10972;
+    static public int staticInt10973;
+    static public int staticInt10974;
+    static public int staticInt10975;
+    static public int staticInt10976;
+    static public int staticInt10977;
+    static public int staticInt10978;
+    static public int staticInt10979;
+    static public int staticInt10980;
+    static public int staticInt10981;
+    static public int staticInt10982;
+    static public int staticInt10983;
+    static public int staticInt10984;
+    static public int staticInt10985;
+    static public int staticInt10986;
+    static public int staticInt10987;
+    static public int staticInt10988;
+    static public int staticInt10989;
+    static public int staticInt10990;
+    static public int staticInt10991;
+    static public int staticInt10992;
+    static public int staticInt10993;
+    static public int staticInt10994;
+    static public int staticInt10995;
+    static public int staticInt10996;
+    static public int staticInt10997;
+    static public int staticInt10998;
+    static public int staticInt10999;
+    static public int staticInt11000;
+    static public int staticInt11001;
+    static public int staticInt11002;
+    static public int staticInt11003;
+    static public int staticInt11004;
+    static public int staticInt11005;
+    static public int staticInt11006;
+    static public int staticInt11007;
+    static public int staticInt11008;
+    static public int staticInt11009;
+    static public int staticInt11010;
+    static public int staticInt11011;
+    static public int staticInt11012;
+    static public int staticInt11013;
+    static public int staticInt11014;
+    static public int staticInt11015;
+    static public int staticInt11016;
+    static public int staticInt11017;
+    static public int staticInt11018;
+    static public int staticInt11019;
+    static public int staticInt11020;
+    static public int staticInt11021;
+    static public int staticInt11022;
+    static public int staticInt11023;
+    static public int staticInt11024;
+    static public int staticInt11025;
+    static public int staticInt11026;
+    static public int staticInt11027;
+    static public int staticInt11028;
+    static public int staticInt11029;
+    static public int staticInt11030;
+    static public int staticInt11031;
+    static public int staticInt11032;
+    static public int staticInt11033;
+    static public int staticInt11034;
+    static public int staticInt11035;
+    static public int staticInt11036;
+    static public int staticInt11037;
+    static public int staticInt11038;
+    static public int staticInt11039;
+    static public int staticInt11040;
+    static public int staticInt11041;
+    static public int staticInt11042;
+    static public int staticInt11043;
+    static public int staticInt11044;
+    static public int staticInt11045;
+    static public int staticInt11046;
+    static public int staticInt11047;
+    static public int staticInt11048;
+    static public int staticInt11049;
+    static public int staticInt11050;
+    static public int staticInt11051;
+    static public int staticInt11052;
+    static public int staticInt11053;
+    static public int staticInt11054;
+    static public int staticInt11055;
+    static public int staticInt11056;
+    static public int staticInt11057;
+    static public int staticInt11058;
+    static public int staticInt11059;
+    static public int staticInt11060;
+    static public int staticInt11061;
+    static public int staticInt11062;
+    static public int staticInt11063;
+    static public int staticInt11064;
+    static public int staticInt11065;
+    static public int staticInt11066;
+    static public int staticInt11067;
+    static public int staticInt11068;
+    static public int staticInt11069;
+    static public int staticInt11070;
+    static public int staticInt11071;
+    static public int staticInt11072;
+    static public int staticInt11073;
+    static public int staticInt11074;
+    static public int staticInt11075;
+    static public int staticInt11076;
+    static public int staticInt11077;
+    static public int staticInt11078;
+    static public int staticInt11079;
+    static public int staticInt11080;
+    static public int staticInt11081;
+    static public int staticInt11082;
+    static public int staticInt11083;
+    static public int staticInt11084;
+    static public int staticInt11085;
+    static public int staticInt11086;
+    static public int staticInt11087;
+    static public int staticInt11088;
+    static public int staticInt11089;
+    static public int staticInt11090;
+    static public int staticInt11091;
+    static public int staticInt11092;
+    static public int staticInt11093;
+    static public int staticInt11094;
+    static public int staticInt11095;
+    static public int staticInt11096;
+    static public int staticInt11097;
+    static public int staticInt11098;
+    static public int staticInt11099;
+    static public int staticInt11100;
+    static public int staticInt11101;
+    static public int staticInt11102;
+    static public int staticInt11103;
+    static public int staticInt11104;
+    static public int staticInt11105;
+    static public int staticInt11106;
+    static public int staticInt11107;
+    static public int staticInt11108;
+    static public int staticInt11109;
+    static public int staticInt11110;
+    static public int staticInt11111;
+    static public int staticInt11112;
+    static public int staticInt11113;
+    static public int staticInt11114;
+    static public int staticInt11115;
+    static public int staticInt11116;
+    static public int staticInt11117;
+    static public int staticInt11118;
+    static public int staticInt11119;
+    static public int staticInt11120;
+    static public int staticInt11121;
+    static public int staticInt11122;
+    static public int staticInt11123;
+    static public int staticInt11124;
+    static public int staticInt11125;
+    static public int staticInt11126;
+    static public int staticInt11127;
+    static public int staticInt11128;
+    static public int staticInt11129;
+    static public int staticInt11130;
+    static public int staticInt11131;
+    static public int staticInt11132;
+    static public int staticInt11133;
+    static public int staticInt11134;
+    static public int staticInt11135;
+    static public int staticInt11136;
+    static public int staticInt11137;
+    static public int staticInt11138;
+    static public int staticInt11139;
+    static public int staticInt11140;
+    static public int staticInt11141;
+    static public int staticInt11142;
+    static public int staticInt11143;
+    static public int staticInt11144;
+    static public int staticInt11145;
+    static public int staticInt11146;
+    static public int staticInt11147;
+    static public int staticInt11148;
+    static public int staticInt11149;
+    static public int staticInt11150;
+    static public int staticInt11151;
+    static public int staticInt11152;
+    static public int staticInt11153;
+    static public int staticInt11154;
+    static public int staticInt11155;
+    static public int staticInt11156;
+    static public int staticInt11157;
+    static public int staticInt11158;
+    static public int staticInt11159;
+    static public int staticInt11160;
+    static public int staticInt11161;
+    static public int staticInt11162;
+    static public int staticInt11163;
+    static public int staticInt11164;
+    static public int staticInt11165;
+    static public int staticInt11166;
+    static public int staticInt11167;
+    static public int staticInt11168;
+    static public int staticInt11169;
+    static public int staticInt11170;
+    static public int staticInt11171;
+    static public int staticInt11172;
+    static public int staticInt11173;
+    static public int staticInt11174;
+    static public int staticInt11175;
+    static public int staticInt11176;
+    static public int staticInt11177;
+    static public int staticInt11178;
+    static public int staticInt11179;
+    static public int staticInt11180;
+    static public int staticInt11181;
+    static public int staticInt11182;
+    static public int staticInt11183;
+    static public int staticInt11184;
+    static public int staticInt11185;
+    static public int staticInt11186;
+    static public int staticInt11187;
+    static public int staticInt11188;
+    static public int staticInt11189;
+    static public int staticInt11190;
+    static public int staticInt11191;
+    static public int staticInt11192;
+    static public int staticInt11193;
+    static public int staticInt11194;
+    static public int staticInt11195;
+    static public int staticInt11196;
+    static public int staticInt11197;
+    static public int staticInt11198;
+    static public int staticInt11199;
+    static public int staticInt11200;
+    static public int staticInt11201;
+    static public int staticInt11202;
+    static public int staticInt11203;
+    static public int staticInt11204;
+    static public int staticInt11205;
+    static public int staticInt11206;
+    static public int staticInt11207;
+    static public int staticInt11208;
+    static public int staticInt11209;
+    static public int staticInt11210;
+    static public int staticInt11211;
+    static public int staticInt11212;
+    static public int staticInt11213;
+    static public int staticInt11214;
+    static public int staticInt11215;
+    static public int staticInt11216;
+    static public int staticInt11217;
+    static public int staticInt11218;
+    static public int staticInt11219;
+    static public int staticInt11220;
+    static public int staticInt11221;
+    static public int staticInt11222;
+    static public int staticInt11223;
+    static public int staticInt11224;
+    static public int staticInt11225;
+    static public int staticInt11226;
+    static public int staticInt11227;
+    static public int staticInt11228;
+    static public int staticInt11229;
+    static public int staticInt11230;
+    static public int staticInt11231;
+    static public int staticInt11232;
+    static public int staticInt11233;
+    static public int staticInt11234;
+    static public int staticInt11235;
+    static public int staticInt11236;
+    static public int staticInt11237;
+    static public int staticInt11238;
+    static public int staticInt11239;
+    static public int staticInt11240;
+    static public int staticInt11241;
+    static public int staticInt11242;
+    static public int staticInt11243;
+    static public int staticInt11244;
+    static public int staticInt11245;
+    static public int staticInt11246;
+    static public int staticInt11247;
+    static public int staticInt11248;
+    static public int staticInt11249;
+    static public int staticInt11250;
+    static public int staticInt11251;
+    static public int staticInt11252;
+    static public int staticInt11253;
+    static public int staticInt11254;
+    static public int staticInt11255;
+    static public int staticInt11256;
+    static public int staticInt11257;
+    static public int staticInt11258;
+    static public int staticInt11259;
+    static public int staticInt11260;
+    static public int staticInt11261;
+    static public int staticInt11262;
+    static public int staticInt11263;
+    static public int staticInt11264;
+    static public int staticInt11265;
+    static public int staticInt11266;
+    static public int staticInt11267;
+    static public int staticInt11268;
+    static public int staticInt11269;
+    static public int staticInt11270;
+    static public int staticInt11271;
+    static public int staticInt11272;
+    static public int staticInt11273;
+    static public int staticInt11274;
+    static public int staticInt11275;
+    static public int staticInt11276;
+    static public int staticInt11277;
+    static public int staticInt11278;
+    static public int staticInt11279;
+    static public int staticInt11280;
+    static public int staticInt11281;
+    static public int staticInt11282;
+    static public int staticInt11283;
+    static public int staticInt11284;
+    static public int staticInt11285;
+    static public int staticInt11286;
+    static public int staticInt11287;
+    static public int staticInt11288;
+    static public int staticInt11289;
+    static public int staticInt11290;
+    static public int staticInt11291;
+    static public int staticInt11292;
+    static public int staticInt11293;
+    static public int staticInt11294;
+    static public int staticInt11295;
+    static public int staticInt11296;
+    static public int staticInt11297;
+    static public int staticInt11298;
+    static public int staticInt11299;
+    static public int staticInt11300;
+    static public int staticInt11301;
+    static public int staticInt11302;
+    static public int staticInt11303;
+    static public int staticInt11304;
+    static public int staticInt11305;
+    static public int staticInt11306;
+    static public int staticInt11307;
+    static public int staticInt11308;
+    static public int staticInt11309;
+    static public int staticInt11310;
+    static public int staticInt11311;
+    static public int staticInt11312;
+    static public int staticInt11313;
+    static public int staticInt11314;
+    static public int staticInt11315;
+    static public int staticInt11316;
+    static public int staticInt11317;
+    static public int staticInt11318;
+    static public int staticInt11319;
+    static public int staticInt11320;
+    static public int staticInt11321;
+    static public int staticInt11322;
+    static public int staticInt11323;
+    static public int staticInt11324;
+    static public int staticInt11325;
+    static public int staticInt11326;
+    static public int staticInt11327;
+    static public int staticInt11328;
+    static public int staticInt11329;
+    static public int staticInt11330;
+    static public int staticInt11331;
+    static public int staticInt11332;
+    static public int staticInt11333;
+    static public int staticInt11334;
+    static public int staticInt11335;
+    static public int staticInt11336;
+    static public int staticInt11337;
+    static public int staticInt11338;
+    static public int staticInt11339;
+    static public int staticInt11340;
+    static public int staticInt11341;
+    static public int staticInt11342;
+    static public int staticInt11343;
+    static public int staticInt11344;
+    static public int staticInt11345;
+    static public int staticInt11346;
+    static public int staticInt11347;
+    static public int staticInt11348;
+    static public int staticInt11349;
+    static public int staticInt11350;
+    static public int staticInt11351;
+    static public int staticInt11352;
+    static public int staticInt11353;
+    static public int staticInt11354;
+    static public int staticInt11355;
+    static public int staticInt11356;
+    static public int staticInt11357;
+    static public int staticInt11358;
+    static public int staticInt11359;
+    static public int staticInt11360;
+    static public int staticInt11361;
+    static public int staticInt11362;
+    static public int staticInt11363;
+    static public int staticInt11364;
+    static public int staticInt11365;
+    static public int staticInt11366;
+    static public int staticInt11367;
+    static public int staticInt11368;
+    static public int staticInt11369;
+    static public int staticInt11370;
+    static public int staticInt11371;
+    static public int staticInt11372;
+    static public int staticInt11373;
+    static public int staticInt11374;
+    static public int staticInt11375;
+    static public int staticInt11376;
+    static public int staticInt11377;
+    static public int staticInt11378;
+    static public int staticInt11379;
+    static public int staticInt11380;
+    static public int staticInt11381;
+    static public int staticInt11382;
+    static public int staticInt11383;
+    static public int staticInt11384;
+    static public int staticInt11385;
+    static public int staticInt11386;
+    static public int staticInt11387;
+    static public int staticInt11388;
+    static public int staticInt11389;
+    static public int staticInt11390;
+    static public int staticInt11391;
+    static public int staticInt11392;
+    static public int staticInt11393;
+    static public int staticInt11394;
+    static public int staticInt11395;
+    static public int staticInt11396;
+    static public int staticInt11397;
+    static public int staticInt11398;
+    static public int staticInt11399;
+    static public int staticInt11400;
+    static public int staticInt11401;
+    static public int staticInt11402;
+    static public int staticInt11403;
+    static public int staticInt11404;
+    static public int staticInt11405;
+    static public int staticInt11406;
+    static public int staticInt11407;
+    static public int staticInt11408;
+    static public int staticInt11409;
+    static public int staticInt11410;
+    static public int staticInt11411;
+    static public int staticInt11412;
+    static public int staticInt11413;
+    static public int staticInt11414;
+    static public int staticInt11415;
+    static public int staticInt11416;
+    static public int staticInt11417;
+    static public int staticInt11418;
+    static public int staticInt11419;
+    static public int staticInt11420;
+    static public int staticInt11421;
+    static public int staticInt11422;
+    static public int staticInt11423;
+    static public int staticInt11424;
+    static public int staticInt11425;
+    static public int staticInt11426;
+    static public int staticInt11427;
+    static public int staticInt11428;
+    static public int staticInt11429;
+    static public int staticInt11430;
+    static public int staticInt11431;
+    static public int staticInt11432;
+    static public int staticInt11433;
+    static public int staticInt11434;
+    static public int staticInt11435;
+    static public int staticInt11436;
+    static public int staticInt11437;
+    static public int staticInt11438;
+    static public int staticInt11439;
+    static public int staticInt11440;
+    static public int staticInt11441;
+    static public int staticInt11442;
+    static public int staticInt11443;
+    static public int staticInt11444;
+    static public int staticInt11445;
+    static public int staticInt11446;
+    static public int staticInt11447;
+    static public int staticInt11448;
+    static public int staticInt11449;
+    static public int staticInt11450;
+    static public int staticInt11451;
+    static public int staticInt11452;
+    static public int staticInt11453;
+    static public int staticInt11454;
+    static public int staticInt11455;
+    static public int staticInt11456;
+    static public int staticInt11457;
+    static public int staticInt11458;
+    static public int staticInt11459;
+    static public int staticInt11460;
+    static public int staticInt11461;
+    static public int staticInt11462;
+    static public int staticInt11463;
+    static public int staticInt11464;
+    static public int staticInt11465;
+    static public int staticInt11466;
+    static public int staticInt11467;
+    static public int staticInt11468;
+    static public int staticInt11469;
+    static public int staticInt11470;
+    static public int staticInt11471;
+    static public int staticInt11472;
+    static public int staticInt11473;
+    static public int staticInt11474;
+    static public int staticInt11475;
+    static public int staticInt11476;
+    static public int staticInt11477;
+    static public int staticInt11478;
+    static public int staticInt11479;
+    static public int staticInt11480;
+    static public int staticInt11481;
+    static public int staticInt11482;
+    static public int staticInt11483;
+    static public int staticInt11484;
+    static public int staticInt11485;
+    static public int staticInt11486;
+    static public int staticInt11487;
+    static public int staticInt11488;
+    static public int staticInt11489;
+    static public int staticInt11490;
+    static public int staticInt11491;
+    static public int staticInt11492;
+    static public int staticInt11493;
+    static public int staticInt11494;
+    static public int staticInt11495;
+    static public int staticInt11496;
+    static public int staticInt11497;
+    static public int staticInt11498;
+    static public int staticInt11499;
+    static public int staticInt11500;
+    static public int staticInt11501;
+    static public int staticInt11502;
+    static public int staticInt11503;
+    static public int staticInt11504;
+    static public int staticInt11505;
+    static public int staticInt11506;
+    static public int staticInt11507;
+    static public int staticInt11508;
+    static public int staticInt11509;
+    static public int staticInt11510;
+    static public int staticInt11511;
+    static public int staticInt11512;
+    static public int staticInt11513;
+    static public int staticInt11514;
+    static public int staticInt11515;
+    static public int staticInt11516;
+    static public int staticInt11517;
+    static public int staticInt11518;
+    static public int staticInt11519;
+    static public int staticInt11520;
+    static public int staticInt11521;
+    static public int staticInt11522;
+    static public int staticInt11523;
+    static public int staticInt11524;
+    static public int staticInt11525;
+    static public int staticInt11526;
+    static public int staticInt11527;
+    static public int staticInt11528;
+    static public int staticInt11529;
+    static public int staticInt11530;
+    static public int staticInt11531;
+    static public int staticInt11532;
+    static public int staticInt11533;
+    static public int staticInt11534;
+    static public int staticInt11535;
+    static public int staticInt11536;
+    static public int staticInt11537;
+    static public int staticInt11538;
+    static public int staticInt11539;
+    static public int staticInt11540;
+    static public int staticInt11541;
+    static public int staticInt11542;
+    static public int staticInt11543;
+    static public int staticInt11544;
+    static public int staticInt11545;
+    static public int staticInt11546;
+    static public int staticInt11547;
+    static public int staticInt11548;
+    static public int staticInt11549;
+    static public int staticInt11550;
+    static public int staticInt11551;
+    static public int staticInt11552;
+    static public int staticInt11553;
+    static public int staticInt11554;
+    static public int staticInt11555;
+    static public int staticInt11556;
+    static public int staticInt11557;
+    static public int staticInt11558;
+    static public int staticInt11559;
+    static public int staticInt11560;
+    static public int staticInt11561;
+    static public int staticInt11562;
+    static public int staticInt11563;
+    static public int staticInt11564;
+    static public int staticInt11565;
+    static public int staticInt11566;
+    static public int staticInt11567;
+    static public int staticInt11568;
+    static public int staticInt11569;
+    static public int staticInt11570;
+    static public int staticInt11571;
+    static public int staticInt11572;
+    static public int staticInt11573;
+    static public int staticInt11574;
+    static public int staticInt11575;
+    static public int staticInt11576;
+    static public int staticInt11577;
+    static public int staticInt11578;
+    static public int staticInt11579;
+    static public int staticInt11580;
+    static public int staticInt11581;
+    static public int staticInt11582;
+    static public int staticInt11583;
+    static public int staticInt11584;
+    static public int staticInt11585;
+    static public int staticInt11586;
+    static public int staticInt11587;
+    static public int staticInt11588;
+    static public int staticInt11589;
+    static public int staticInt11590;
+    static public int staticInt11591;
+    static public int staticInt11592;
+    static public int staticInt11593;
+    static public int staticInt11594;
+    static public int staticInt11595;
+    static public int staticInt11596;
+    static public int staticInt11597;
+    static public int staticInt11598;
+    static public int staticInt11599;
+    static public int staticInt11600;
+    static public int staticInt11601;
+    static public int staticInt11602;
+    static public int staticInt11603;
+    static public int staticInt11604;
+    static public int staticInt11605;
+    static public int staticInt11606;
+    static public int staticInt11607;
+    static public int staticInt11608;
+    static public int staticInt11609;
+    static public int staticInt11610;
+    static public int staticInt11611;
+    static public int staticInt11612;
+    static public int staticInt11613;
+    static public int staticInt11614;
+    static public int staticInt11615;
+    static public int staticInt11616;
+    static public int staticInt11617;
+    static public int staticInt11618;
+    static public int staticInt11619;
+    static public int staticInt11620;
+    static public int staticInt11621;
+    static public int staticInt11622;
+    static public int staticInt11623;
+    static public int staticInt11624;
+    static public int staticInt11625;
+    static public int staticInt11626;
+    static public int staticInt11627;
+    static public int staticInt11628;
+    static public int staticInt11629;
+    static public int staticInt11630;
+    static public int staticInt11631;
+    static public int staticInt11632;
+    static public int staticInt11633;
+    static public int staticInt11634;
+    static public int staticInt11635;
+    static public int staticInt11636;
+    static public int staticInt11637;
+    static public int staticInt11638;
+    static public int staticInt11639;
+    static public int staticInt11640;
+    static public int staticInt11641;
+    static public int staticInt11642;
+    static public int staticInt11643;
+    static public int staticInt11644;
+    static public int staticInt11645;
+    static public int staticInt11646;
+    static public int staticInt11647;
+    static public int staticInt11648;
+    static public int staticInt11649;
+    static public int staticInt11650;
+    static public int staticInt11651;
+    static public int staticInt11652;
+    static public int staticInt11653;
+    static public int staticInt11654;
+    static public int staticInt11655;
+    static public int staticInt11656;
+    static public int staticInt11657;
+    static public int staticInt11658;
+    static public int staticInt11659;
+    static public int staticInt11660;
+    static public int staticInt11661;
+    static public int staticInt11662;
+    static public int staticInt11663;
+    static public int staticInt11664;
+    static public int staticInt11665;
+    static public int staticInt11666;
+    static public int staticInt11667;
+    static public int staticInt11668;
+    static public int staticInt11669;
+    static public int staticInt11670;
+    static public int staticInt11671;
+    static public int staticInt11672;
+    static public int staticInt11673;
+    static public int staticInt11674;
+    static public int staticInt11675;
+    static public int staticInt11676;
+    static public int staticInt11677;
+    static public int staticInt11678;
+    static public int staticInt11679;
+    static public int staticInt11680;
+    static public int staticInt11681;
+    static public int staticInt11682;
+    static public int staticInt11683;
+    static public int staticInt11684;
+    static public int staticInt11685;
+    static public int staticInt11686;
+    static public int staticInt11687;
+    static public int staticInt11688;
+    static public int staticInt11689;
+    static public int staticInt11690;
+    static public int staticInt11691;
+    static public int staticInt11692;
+    static public int staticInt11693;
+    static public int staticInt11694;
+    static public int staticInt11695;
+    static public int staticInt11696;
+    static public int staticInt11697;
+    static public int staticInt11698;
+    static public int staticInt11699;
+    static public int staticInt11700;
+    static public int staticInt11701;
+    static public int staticInt11702;
+    static public int staticInt11703;
+    static public int staticInt11704;
+    static public int staticInt11705;
+    static public int staticInt11706;
+    static public int staticInt11707;
+    static public int staticInt11708;
+    static public int staticInt11709;
+    static public int staticInt11710;
+    static public int staticInt11711;
+    static public int staticInt11712;
+    static public int staticInt11713;
+    static public int staticInt11714;
+    static public int staticInt11715;
+    static public int staticInt11716;
+    static public int staticInt11717;
+    static public int staticInt11718;
+    static public int staticInt11719;
+    static public int staticInt11720;
+    static public int staticInt11721;
+    static public int staticInt11722;
+    static public int staticInt11723;
+    static public int staticInt11724;
+    static public int staticInt11725;
+    static public int staticInt11726;
+    static public int staticInt11727;
+    static public int staticInt11728;
+    static public int staticInt11729;
+    static public int staticInt11730;
+    static public int staticInt11731;
+    static public int staticInt11732;
+    static public int staticInt11733;
+    static public int staticInt11734;
+    static public int staticInt11735;
+    static public int staticInt11736;
+    static public int staticInt11737;
+    static public int staticInt11738;
+    static public int staticInt11739;
+    static public int staticInt11740;
+    static public int staticInt11741;
+    static public int staticInt11742;
+    static public int staticInt11743;
+    static public int staticInt11744;
+    static public int staticInt11745;
+    static public int staticInt11746;
+    static public int staticInt11747;
+    static public int staticInt11748;
+    static public int staticInt11749;
+    static public int staticInt11750;
+    static public int staticInt11751;
+    static public int staticInt11752;
+    static public int staticInt11753;
+    static public int staticInt11754;
+    static public int staticInt11755;
+    static public int staticInt11756;
+    static public int staticInt11757;
+    static public int staticInt11758;
+    static public int staticInt11759;
+    static public int staticInt11760;
+    static public int staticInt11761;
+    static public int staticInt11762;
+    static public int staticInt11763;
+    static public int staticInt11764;
+    static public int staticInt11765;
+    static public int staticInt11766;
+    static public int staticInt11767;
+    static public int staticInt11768;
+    static public int staticInt11769;
+    static public int staticInt11770;
+    static public int staticInt11771;
+    static public int staticInt11772;
+    static public int staticInt11773;
+    static public int staticInt11774;
+    static public int staticInt11775;
+    static public int staticInt11776;
+    static public int staticInt11777;
+    static public int staticInt11778;
+    static public int staticInt11779;
+    static public int staticInt11780;
+    static public int staticInt11781;
+    static public int staticInt11782;
+    static public int staticInt11783;
+    static public int staticInt11784;
+    static public int staticInt11785;
+    static public int staticInt11786;
+    static public int staticInt11787;
+    static public int staticInt11788;
+    static public int staticInt11789;
+    static public int staticInt11790;
+    static public int staticInt11791;
+    static public int staticInt11792;
+    static public int staticInt11793;
+    static public int staticInt11794;
+    static public int staticInt11795;
+    static public int staticInt11796;
+    static public int staticInt11797;
+    static public int staticInt11798;
+    static public int staticInt11799;
+    static public int staticInt11800;
+    static public int staticInt11801;
+    static public int staticInt11802;
+    static public int staticInt11803;
+    static public int staticInt11804;
+    static public int staticInt11805;
+    static public int staticInt11806;
+    static public int staticInt11807;
+    static public int staticInt11808;
+    static public int staticInt11809;
+    static public int staticInt11810;
+    static public int staticInt11811;
+    static public int staticInt11812;
+    static public int staticInt11813;
+    static public int staticInt11814;
+    static public int staticInt11815;
+    static public int staticInt11816;
+    static public int staticInt11817;
+    static public int staticInt11818;
+    static public int staticInt11819;
+    static public int staticInt11820;
+    static public int staticInt11821;
+    static public int staticInt11822;
+    static public int staticInt11823;
+    static public int staticInt11824;
+    static public int staticInt11825;
+    static public int staticInt11826;
+    static public int staticInt11827;
+    static public int staticInt11828;
+    static public int staticInt11829;
+    static public int staticInt11830;
+    static public int staticInt11831;
+    static public int staticInt11832;
+    static public int staticInt11833;
+    static public int staticInt11834;
+    static public int staticInt11835;
+    static public int staticInt11836;
+    static public int staticInt11837;
+    static public int staticInt11838;
+    static public int staticInt11839;
+    static public int staticInt11840;
+    static public int staticInt11841;
+    static public int staticInt11842;
+    static public int staticInt11843;
+    static public int staticInt11844;
+    static public int staticInt11845;
+    static public int staticInt11846;
+    static public int staticInt11847;
+    static public int staticInt11848;
+    static public int staticInt11849;
+    static public int staticInt11850;
+    static public int staticInt11851;
+    static public int staticInt11852;
+    static public int staticInt11853;
+    static public int staticInt11854;
+    static public int staticInt11855;
+    static public int staticInt11856;
+    static public int staticInt11857;
+    static public int staticInt11858;
+    static public int staticInt11859;
+    static public int staticInt11860;
+    static public int staticInt11861;
+    static public int staticInt11862;
+    static public int staticInt11863;
+    static public int staticInt11864;
+    static public int staticInt11865;
+    static public int staticInt11866;
+    static public int staticInt11867;
+    static public int staticInt11868;
+    static public int staticInt11869;
+    static public int staticInt11870;
+    static public int staticInt11871;
+    static public int staticInt11872;
+    static public int staticInt11873;
+    static public int staticInt11874;
+    static public int staticInt11875;
+    static public int staticInt11876;
+    static public int staticInt11877;
+    static public int staticInt11878;
+    static public int staticInt11879;
+    static public int staticInt11880;
+    static public int staticInt11881;
+    static public int staticInt11882;
+    static public int staticInt11883;
+    static public int staticInt11884;
+    static public int staticInt11885;
+    static public int staticInt11886;
+    static public int staticInt11887;
+    static public int staticInt11888;
+    static public int staticInt11889;
+    static public int staticInt11890;
+    static public int staticInt11891;
+    static public int staticInt11892;
+    static public int staticInt11893;
+    static public int staticInt11894;
+    static public int staticInt11895;
+    static public int staticInt11896;
+    static public int staticInt11897;
+    static public int staticInt11898;
+    static public int staticInt11899;
+    static public int staticInt11900;
+    static public int staticInt11901;
+    static public int staticInt11902;
+    static public int staticInt11903;
+    static public int staticInt11904;
+    static public int staticInt11905;
+    static public int staticInt11906;
+    static public int staticInt11907;
+    static public int staticInt11908;
+    static public int staticInt11909;
+    static public int staticInt11910;
+    static public int staticInt11911;
+    static public int staticInt11912;
+    static public int staticInt11913;
+    static public int staticInt11914;
+    static public int staticInt11915;
+    static public int staticInt11916;
+    static public int staticInt11917;
+    static public int staticInt11918;
+    static public int staticInt11919;
+    static public int staticInt11920;
+    static public int staticInt11921;
+    static public int staticInt11922;
+    static public int staticInt11923;
+    static public int staticInt11924;
+    static public int staticInt11925;
+    static public int staticInt11926;
+    static public int staticInt11927;
+    static public int staticInt11928;
+    static public int staticInt11929;
+    static public int staticInt11930;
+    static public int staticInt11931;
+    static public int staticInt11932;
+    static public int staticInt11933;
+    static public int staticInt11934;
+    static public int staticInt11935;
+    static public int staticInt11936;
+    static public int staticInt11937;
+    static public int staticInt11938;
+    static public int staticInt11939;
+    static public int staticInt11940;
+    static public int staticInt11941;
+    static public int staticInt11942;
+    static public int staticInt11943;
+    static public int staticInt11944;
+    static public int staticInt11945;
+    static public int staticInt11946;
+    static public int staticInt11947;
+    static public int staticInt11948;
+    static public int staticInt11949;
+    static public int staticInt11950;
+    static public int staticInt11951;
+    static public int staticInt11952;
+    static public int staticInt11953;
+    static public int staticInt11954;
+    static public int staticInt11955;
+    static public int staticInt11956;
+    static public int staticInt11957;
+    static public int staticInt11958;
+    static public int staticInt11959;
+    static public int staticInt11960;
+    static public int staticInt11961;
+    static public int staticInt11962;
+    static public int staticInt11963;
+    static public int staticInt11964;
+    static public int staticInt11965;
+    static public int staticInt11966;
+    static public int staticInt11967;
+    static public int staticInt11968;
+    static public int staticInt11969;
+    static public int staticInt11970;
+    static public int staticInt11971;
+    static public int staticInt11972;
+    static public int staticInt11973;
+    static public int staticInt11974;
+    static public int staticInt11975;
+    static public int staticInt11976;
+    static public int staticInt11977;
+    static public int staticInt11978;
+    static public int staticInt11979;
+    static public int staticInt11980;
+    static public int staticInt11981;
+    static public int staticInt11982;
+    static public int staticInt11983;
+    static public int staticInt11984;
+    static public int staticInt11985;
+    static public int staticInt11986;
+    static public int staticInt11987;
+    static public int staticInt11988;
+    static public int staticInt11989;
+    static public int staticInt11990;
+    static public int staticInt11991;
+    static public int staticInt11992;
+    static public int staticInt11993;
+    static public int staticInt11994;
+    static public int staticInt11995;
+    static public int staticInt11996;
+    static public int staticInt11997;
+    static public int staticInt11998;
+    static public int staticInt11999;
+    static public int staticInt12000;
+    static public int staticInt12001;
+    static public int staticInt12002;
+    static public int staticInt12003;
+    static public int staticInt12004;
+    static public int staticInt12005;
+    static public int staticInt12006;
+    static public int staticInt12007;
+    static public int staticInt12008;
+    static public int staticInt12009;
+    static public int staticInt12010;
+    static public int staticInt12011;
+    static public int staticInt12012;
+    static public int staticInt12013;
+    static public int staticInt12014;
+    static public int staticInt12015;
+    static public int staticInt12016;
+    static public int staticInt12017;
+    static public int staticInt12018;
+    static public int staticInt12019;
+    static public int staticInt12020;
+    static public int staticInt12021;
+    static public int staticInt12022;
+    static public int staticInt12023;
+    static public int staticInt12024;
+    static public int staticInt12025;
+    static public int staticInt12026;
+    static public int staticInt12027;
+    static public int staticInt12028;
+    static public int staticInt12029;
+    static public int staticInt12030;
+    static public int staticInt12031;
+    static public int staticInt12032;
+    static public int staticInt12033;
+    static public int staticInt12034;
+    static public int staticInt12035;
+    static public int staticInt12036;
+    static public int staticInt12037;
+    static public int staticInt12038;
+    static public int staticInt12039;
+    static public int staticInt12040;
+    static public int staticInt12041;
+    static public int staticInt12042;
+    static public int staticInt12043;
+    static public int staticInt12044;
+    static public int staticInt12045;
+    static public int staticInt12046;
+    static public int staticInt12047;
+    static public int staticInt12048;
+    static public int staticInt12049;
+    static public int staticInt12050;
+    static public int staticInt12051;
+    static public int staticInt12052;
+    static public int staticInt12053;
+    static public int staticInt12054;
+    static public int staticInt12055;
+    static public int staticInt12056;
+    static public int staticInt12057;
+    static public int staticInt12058;
+    static public int staticInt12059;
+    static public int staticInt12060;
+    static public int staticInt12061;
+    static public int staticInt12062;
+    static public int staticInt12063;
+    static public int staticInt12064;
+    static public int staticInt12065;
+    static public int staticInt12066;
+    static public int staticInt12067;
+    static public int staticInt12068;
+    static public int staticInt12069;
+    static public int staticInt12070;
+    static public int staticInt12071;
+    static public int staticInt12072;
+    static public int staticInt12073;
+    static public int staticInt12074;
+    static public int staticInt12075;
+    static public int staticInt12076;
+    static public int staticInt12077;
+    static public int staticInt12078;
+    static public int staticInt12079;
+    static public int staticInt12080;
+    static public int staticInt12081;
+    static public int staticInt12082;
+    static public int staticInt12083;
+    static public int staticInt12084;
+    static public int staticInt12085;
+    static public int staticInt12086;
+    static public int staticInt12087;
+    static public int staticInt12088;
+    static public int staticInt12089;
+    static public int staticInt12090;
+    static public int staticInt12091;
+    static public int staticInt12092;
+    static public int staticInt12093;
+    static public int staticInt12094;
+    static public int staticInt12095;
+    static public int staticInt12096;
+    static public int staticInt12097;
+    static public int staticInt12098;
+    static public int staticInt12099;
+    static public int staticInt12100;
+    static public int staticInt12101;
+    static public int staticInt12102;
+    static public int staticInt12103;
+    static public int staticInt12104;
+    static public int staticInt12105;
+    static public int staticInt12106;
+    static public int staticInt12107;
+    static public int staticInt12108;
+    static public int staticInt12109;
+    static public int staticInt12110;
+    static public int staticInt12111;
+    static public int staticInt12112;
+    static public int staticInt12113;
+    static public int staticInt12114;
+    static public int staticInt12115;
+    static public int staticInt12116;
+    static public int staticInt12117;
+    static public int staticInt12118;
+    static public int staticInt12119;
+    static public int staticInt12120;
+    static public int staticInt12121;
+    static public int staticInt12122;
+    static public int staticInt12123;
+    static public int staticInt12124;
+    static public int staticInt12125;
+    static public int staticInt12126;
+    static public int staticInt12127;
+    static public int staticInt12128;
+    static public int staticInt12129;
+    static public int staticInt12130;
+    static public int staticInt12131;
+    static public int staticInt12132;
+    static public int staticInt12133;
+    static public int staticInt12134;
+    static public int staticInt12135;
+    static public int staticInt12136;
+    static public int staticInt12137;
+    static public int staticInt12138;
+    static public int staticInt12139;
+    static public int staticInt12140;
+    static public int staticInt12141;
+    static public int staticInt12142;
+    static public int staticInt12143;
+    static public int staticInt12144;
+    static public int staticInt12145;
+    static public int staticInt12146;
+    static public int staticInt12147;
+    static public int staticInt12148;
+    static public int staticInt12149;
+    static public int staticInt12150;
+    static public int staticInt12151;
+    static public int staticInt12152;
+    static public int staticInt12153;
+    static public int staticInt12154;
+    static public int staticInt12155;
+    static public int staticInt12156;
+    static public int staticInt12157;
+    static public int staticInt12158;
+    static public int staticInt12159;
+    static public int staticInt12160;
+    static public int staticInt12161;
+    static public int staticInt12162;
+    static public int staticInt12163;
+    static public int staticInt12164;
+    static public int staticInt12165;
+    static public int staticInt12166;
+    static public int staticInt12167;
+    static public int staticInt12168;
+    static public int staticInt12169;
+    static public int staticInt12170;
+    static public int staticInt12171;
+    static public int staticInt12172;
+    static public int staticInt12173;
+    static public int staticInt12174;
+    static public int staticInt12175;
+    static public int staticInt12176;
+    static public int staticInt12177;
+    static public int staticInt12178;
+    static public int staticInt12179;
+    static public int staticInt12180;
+    static public int staticInt12181;
+    static public int staticInt12182;
+    static public int staticInt12183;
+    static public int staticInt12184;
+    static public int staticInt12185;
+    static public int staticInt12186;
+    static public int staticInt12187;
+    static public int staticInt12188;
+    static public int staticInt12189;
+    static public int staticInt12190;
+    static public int staticInt12191;
+    static public int staticInt12192;
+    static public int staticInt12193;
+    static public int staticInt12194;
+    static public int staticInt12195;
+    static public int staticInt12196;
+    static public int staticInt12197;
+    static public int staticInt12198;
+    static public int staticInt12199;
+    static public int staticInt12200;
+    static public int staticInt12201;
+    static public int staticInt12202;
+    static public int staticInt12203;
+    static public int staticInt12204;
+    static public int staticInt12205;
+    static public int staticInt12206;
+    static public int staticInt12207;
+    static public int staticInt12208;
+    static public int staticInt12209;
+    static public int staticInt12210;
+    static public int staticInt12211;
+    static public int staticInt12212;
+    static public int staticInt12213;
+    static public int staticInt12214;
+    static public int staticInt12215;
+    static public int staticInt12216;
+    static public int staticInt12217;
+    static public int staticInt12218;
+    static public int staticInt12219;
+    static public int staticInt12220;
+    static public int staticInt12221;
+    static public int staticInt12222;
+    static public int staticInt12223;
+    static public int staticInt12224;
+    static public int staticInt12225;
+    static public int staticInt12226;
+    static public int staticInt12227;
+    static public int staticInt12228;
+    static public int staticInt12229;
+    static public int staticInt12230;
+    static public int staticInt12231;
+    static public int staticInt12232;
+    static public int staticInt12233;
+    static public int staticInt12234;
+    static public int staticInt12235;
+    static public int staticInt12236;
+    static public int staticInt12237;
+    static public int staticInt12238;
+    static public int staticInt12239;
+    static public int staticInt12240;
+    static public int staticInt12241;
+    static public int staticInt12242;
+    static public int staticInt12243;
+    static public int staticInt12244;
+    static public int staticInt12245;
+    static public int staticInt12246;
+    static public int staticInt12247;
+    static public int staticInt12248;
+    static public int staticInt12249;
+    static public int staticInt12250;
+    static public int staticInt12251;
+    static public int staticInt12252;
+    static public int staticInt12253;
+    static public int staticInt12254;
+    static public int staticInt12255;
+    static public int staticInt12256;
+    static public int staticInt12257;
+    static public int staticInt12258;
+    static public int staticInt12259;
+    static public int staticInt12260;
+    static public int staticInt12261;
+    static public int staticInt12262;
+    static public int staticInt12263;
+    static public int staticInt12264;
+    static public int staticInt12265;
+    static public int staticInt12266;
+    static public int staticInt12267;
+    static public int staticInt12268;
+    static public int staticInt12269;
+    static public int staticInt12270;
+    static public int staticInt12271;
+    static public int staticInt12272;
+    static public int staticInt12273;
+    static public int staticInt12274;
+    static public int staticInt12275;
+    static public int staticInt12276;
+    static public int staticInt12277;
+    static public int staticInt12278;
+    static public int staticInt12279;
+    static public int staticInt12280;
+    static public int staticInt12281;
+    static public int staticInt12282;
+    static public int staticInt12283;
+    static public int staticInt12284;
+    static public int staticInt12285;
+    static public int staticInt12286;
+    static public int staticInt12287;
+    static public int staticInt12288;
+    static public int staticInt12289;
+    static public int staticInt12290;
+    static public int staticInt12291;
+    static public int staticInt12292;
+    static public int staticInt12293;
+    static public int staticInt12294;
+    static public int staticInt12295;
+    static public int staticInt12296;
+    static public int staticInt12297;
+    static public int staticInt12298;
+    static public int staticInt12299;
+    static public int staticInt12300;
+    static public int staticInt12301;
+    static public int staticInt12302;
+    static public int staticInt12303;
+    static public int staticInt12304;
+    static public int staticInt12305;
+    static public int staticInt12306;
+    static public int staticInt12307;
+    static public int staticInt12308;
+    static public int staticInt12309;
+    static public int staticInt12310;
+    static public int staticInt12311;
+    static public int staticInt12312;
+    static public int staticInt12313;
+    static public int staticInt12314;
+    static public int staticInt12315;
+    static public int staticInt12316;
+    static public int staticInt12317;
+    static public int staticInt12318;
+    static public int staticInt12319;
+    static public int staticInt12320;
+    static public int staticInt12321;
+    static public int staticInt12322;
+    static public int staticInt12323;
+    static public int staticInt12324;
+    static public int staticInt12325;
+    static public int staticInt12326;
+    static public int staticInt12327;
+    static public int staticInt12328;
+    static public int staticInt12329;
+    static public int staticInt12330;
+    static public int staticInt12331;
+    static public int staticInt12332;
+    static public int staticInt12333;
+    static public int staticInt12334;
+    static public int staticInt12335;
+    static public int staticInt12336;
+    static public int staticInt12337;
+    static public int staticInt12338;
+    static public int staticInt12339;
+    static public int staticInt12340;
+    static public int staticInt12341;
+    static public int staticInt12342;
+    static public int staticInt12343;
+    static public int staticInt12344;
+    static public int staticInt12345;
+    static public int staticInt12346;
+    static public int staticInt12347;
+    static public int staticInt12348;
+    static public int staticInt12349;
+    static public int staticInt12350;
+    static public int staticInt12351;
+    static public int staticInt12352;
+    static public int staticInt12353;
+    static public int staticInt12354;
+    static public int staticInt12355;
+    static public int staticInt12356;
+    static public int staticInt12357;
+    static public int staticInt12358;
+    static public int staticInt12359;
+    static public int staticInt12360;
+    static public int staticInt12361;
+    static public int staticInt12362;
+    static public int staticInt12363;
+    static public int staticInt12364;
+    static public int staticInt12365;
+    static public int staticInt12366;
+    static public int staticInt12367;
+    static public int staticInt12368;
+    static public int staticInt12369;
+    static public int staticInt12370;
+    static public int staticInt12371;
+    static public int staticInt12372;
+    static public int staticInt12373;
+    static public int staticInt12374;
+    static public int staticInt12375;
+    static public int staticInt12376;
+    static public int staticInt12377;
+    static public int staticInt12378;
+    static public int staticInt12379;
+    static public int staticInt12380;
+    static public int staticInt12381;
+    static public int staticInt12382;
+    static public int staticInt12383;
+    static public int staticInt12384;
+    static public int staticInt12385;
+    static public int staticInt12386;
+    static public int staticInt12387;
+    static public int staticInt12388;
+    static public int staticInt12389;
+    static public int staticInt12390;
+    static public int staticInt12391;
+    static public int staticInt12392;
+    static public int staticInt12393;
+    static public int staticInt12394;
+    static public int staticInt12395;
+    static public int staticInt12396;
+    static public int staticInt12397;
+    static public int staticInt12398;
+    static public int staticInt12399;
+    static public int staticInt12400;
+    static public int staticInt12401;
+    static public int staticInt12402;
+    static public int staticInt12403;
+    static public int staticInt12404;
+    static public int staticInt12405;
+    static public int staticInt12406;
+    static public int staticInt12407;
+    static public int staticInt12408;
+    static public int staticInt12409;
+    static public int staticInt12410;
+    static public int staticInt12411;
+    static public int staticInt12412;
+    static public int staticInt12413;
+    static public int staticInt12414;
+    static public int staticInt12415;
+    static public int staticInt12416;
+    static public int staticInt12417;
+    static public int staticInt12418;
+    static public int staticInt12419;
+    static public int staticInt12420;
+    static public int staticInt12421;
+    static public int staticInt12422;
+    static public int staticInt12423;
+    static public int staticInt12424;
+    static public int staticInt12425;
+    static public int staticInt12426;
+    static public int staticInt12427;
+    static public int staticInt12428;
+    static public int staticInt12429;
+    static public int staticInt12430;
+    static public int staticInt12431;
+    static public int staticInt12432;
+    static public int staticInt12433;
+    static public int staticInt12434;
+    static public int staticInt12435;
+    static public int staticInt12436;
+    static public int staticInt12437;
+    static public int staticInt12438;
+    static public int staticInt12439;
+    static public int staticInt12440;
+    static public int staticInt12441;
+    static public int staticInt12442;
+    static public int staticInt12443;
+    static public int staticInt12444;
+    static public int staticInt12445;
+    static public int staticInt12446;
+    static public int staticInt12447;
+    static public int staticInt12448;
+    static public int staticInt12449;
+    static public int staticInt12450;
+    static public int staticInt12451;
+    static public int staticInt12452;
+    static public int staticInt12453;
+    static public int staticInt12454;
+    static public int staticInt12455;
+    static public int staticInt12456;
+    static public int staticInt12457;
+    static public int staticInt12458;
+    static public int staticInt12459;
+    static public int staticInt12460;
+    static public int staticInt12461;
+    static public int staticInt12462;
+    static public int staticInt12463;
+    static public int staticInt12464;
+    static public int staticInt12465;
+    static public int staticInt12466;
+    static public int staticInt12467;
+    static public int staticInt12468;
+    static public int staticInt12469;
+    static public int staticInt12470;
+    static public int staticInt12471;
+    static public int staticInt12472;
+    static public int staticInt12473;
+    static public int staticInt12474;
+    static public int staticInt12475;
+    static public int staticInt12476;
+    static public int staticInt12477;
+    static public int staticInt12478;
+    static public int staticInt12479;
+    static public int staticInt12480;
+    static public int staticInt12481;
+    static public int staticInt12482;
+    static public int staticInt12483;
+    static public int staticInt12484;
+    static public int staticInt12485;
+    static public int staticInt12486;
+    static public int staticInt12487;
+    static public int staticInt12488;
+    static public int staticInt12489;
+    static public int staticInt12490;
+    static public int staticInt12491;
+    static public int staticInt12492;
+    static public int staticInt12493;
+    static public int staticInt12494;
+    static public int staticInt12495;
+    static public int staticInt12496;
+    static public int staticInt12497;
+    static public int staticInt12498;
+    static public int staticInt12499;
+    static public int staticInt12500;
+    static public int staticInt12501;
+    static public int staticInt12502;
+    static public int staticInt12503;
+    static public int staticInt12504;
+    static public int staticInt12505;
+    static public int staticInt12506;
+    static public int staticInt12507;
+    static public int staticInt12508;
+    static public int staticInt12509;
+    static public int staticInt12510;
+    static public int staticInt12511;
+    static public int staticInt12512;
+    static public int staticInt12513;
+    static public int staticInt12514;
+    static public int staticInt12515;
+    static public int staticInt12516;
+    static public int staticInt12517;
+    static public int staticInt12518;
+    static public int staticInt12519;
+    static public int staticInt12520;
+    static public int staticInt12521;
+    static public int staticInt12522;
+    static public int staticInt12523;
+    static public int staticInt12524;
+    static public int staticInt12525;
+    static public int staticInt12526;
+    static public int staticInt12527;
+    static public int staticInt12528;
+    static public int staticInt12529;
+    static public int staticInt12530;
+    static public int staticInt12531;
+    static public int staticInt12532;
+    static public int staticInt12533;
+    static public int staticInt12534;
+    static public int staticInt12535;
+    static public int staticInt12536;
+    static public int staticInt12537;
+    static public int staticInt12538;
+    static public int staticInt12539;
+    static public int staticInt12540;
+    static public int staticInt12541;
+    static public int staticInt12542;
+    static public int staticInt12543;
+    static public int staticInt12544;
+    static public int staticInt12545;
+    static public int staticInt12546;
+    static public int staticInt12547;
+    static public int staticInt12548;
+    static public int staticInt12549;
+    static public int staticInt12550;
+    static public int staticInt12551;
+    static public int staticInt12552;
+    static public int staticInt12553;
+    static public int staticInt12554;
+    static public int staticInt12555;
+    static public int staticInt12556;
+    static public int staticInt12557;
+    static public int staticInt12558;
+    static public int staticInt12559;
+    static public int staticInt12560;
+    static public int staticInt12561;
+    static public int staticInt12562;
+    static public int staticInt12563;
+    static public int staticInt12564;
+    static public int staticInt12565;
+    static public int staticInt12566;
+    static public int staticInt12567;
+    static public int staticInt12568;
+    static public int staticInt12569;
+    static public int staticInt12570;
+    static public int staticInt12571;
+    static public int staticInt12572;
+    static public int staticInt12573;
+    static public int staticInt12574;
+    static public int staticInt12575;
+    static public int staticInt12576;
+    static public int staticInt12577;
+    static public int staticInt12578;
+    static public int staticInt12579;
+    static public int staticInt12580;
+    static public int staticInt12581;
+    static public int staticInt12582;
+    static public int staticInt12583;
+    static public int staticInt12584;
+    static public int staticInt12585;
+    static public int staticInt12586;
+    static public int staticInt12587;
+    static public int staticInt12588;
+    static public int staticInt12589;
+    static public int staticInt12590;
+    static public int staticInt12591;
+    static public int staticInt12592;
+    static public int staticInt12593;
+    static public int staticInt12594;
+    static public int staticInt12595;
+    static public int staticInt12596;
+    static public int staticInt12597;
+    static public int staticInt12598;
+    static public int staticInt12599;
+    static public int staticInt12600;
+    static public int staticInt12601;
+    static public int staticInt12602;
+    static public int staticInt12603;
+    static public int staticInt12604;
+    static public int staticInt12605;
+    static public int staticInt12606;
+    static public int staticInt12607;
+    static public int staticInt12608;
+    static public int staticInt12609;
+    static public int staticInt12610;
+    static public int staticInt12611;
+    static public int staticInt12612;
+    static public int staticInt12613;
+    static public int staticInt12614;
+    static public int staticInt12615;
+    static public int staticInt12616;
+    static public int staticInt12617;
+    static public int staticInt12618;
+    static public int staticInt12619;
+    static public int staticInt12620;
+    static public int staticInt12621;
+    static public int staticInt12622;
+    static public int staticInt12623;
+    static public int staticInt12624;
+    static public int staticInt12625;
+    static public int staticInt12626;
+    static public int staticInt12627;
+    static public int staticInt12628;
+    static public int staticInt12629;
+    static public int staticInt12630;
+    static public int staticInt12631;
+    static public int staticInt12632;
+    static public int staticInt12633;
+    static public int staticInt12634;
+    static public int staticInt12635;
+    static public int staticInt12636;
+    static public int staticInt12637;
+    static public int staticInt12638;
+    static public int staticInt12639;
+    static public int staticInt12640;
+    static public int staticInt12641;
+    static public int staticInt12642;
+    static public int staticInt12643;
+    static public int staticInt12644;
+    static public int staticInt12645;
+    static public int staticInt12646;
+    static public int staticInt12647;
+    static public int staticInt12648;
+    static public int staticInt12649;
+    static public int staticInt12650;
+    static public int staticInt12651;
+    static public int staticInt12652;
+    static public int staticInt12653;
+    static public int staticInt12654;
+    static public int staticInt12655;
+    static public int staticInt12656;
+    static public int staticInt12657;
+    static public int staticInt12658;
+    static public int staticInt12659;
+    static public int staticInt12660;
+    static public int staticInt12661;
+    static public int staticInt12662;
+    static public int staticInt12663;
+    static public int staticInt12664;
+    static public int staticInt12665;
+    static public int staticInt12666;
+    static public int staticInt12667;
+    static public int staticInt12668;
+    static public int staticInt12669;
+    static public int staticInt12670;
+    static public int staticInt12671;
+    static public int staticInt12672;
+    static public int staticInt12673;
+    static public int staticInt12674;
+    static public int staticInt12675;
+    static public int staticInt12676;
+    static public int staticInt12677;
+    static public int staticInt12678;
+    static public int staticInt12679;
+    static public int staticInt12680;
+    static public int staticInt12681;
+    static public int staticInt12682;
+    static public int staticInt12683;
+    static public int staticInt12684;
+    static public int staticInt12685;
+    static public int staticInt12686;
+    static public int staticInt12687;
+    static public int staticInt12688;
+    static public int staticInt12689;
+    static public int staticInt12690;
+    static public int staticInt12691;
+    static public int staticInt12692;
+    static public int staticInt12693;
+    static public int staticInt12694;
+    static public int staticInt12695;
+    static public int staticInt12696;
+    static public int staticInt12697;
+    static public int staticInt12698;
+    static public int staticInt12699;
+    static public int staticInt12700;
+    static public int staticInt12701;
+    static public int staticInt12702;
+    static public int staticInt12703;
+    static public int staticInt12704;
+    static public int staticInt12705;
+    static public int staticInt12706;
+    static public int staticInt12707;
+    static public int staticInt12708;
+    static public int staticInt12709;
+    static public int staticInt12710;
+    static public int staticInt12711;
+    static public int staticInt12712;
+    static public int staticInt12713;
+    static public int staticInt12714;
+    static public int staticInt12715;
+    static public int staticInt12716;
+    static public int staticInt12717;
+    static public int staticInt12718;
+    static public int staticInt12719;
+    static public int staticInt12720;
+    static public int staticInt12721;
+    static public int staticInt12722;
+    static public int staticInt12723;
+    static public int staticInt12724;
+    static public int staticInt12725;
+    static public int staticInt12726;
+    static public int staticInt12727;
+    static public int staticInt12728;
+    static public int staticInt12729;
+    static public int staticInt12730;
+    static public int staticInt12731;
+    static public int staticInt12732;
+    static public int staticInt12733;
+    static public int staticInt12734;
+    static public int staticInt12735;
+    static public int staticInt12736;
+    static public int staticInt12737;
+    static public int staticInt12738;
+    static public int staticInt12739;
+    static public int staticInt12740;
+    static public int staticInt12741;
+    static public int staticInt12742;
+    static public int staticInt12743;
+    static public int staticInt12744;
+    static public int staticInt12745;
+    static public int staticInt12746;
+    static public int staticInt12747;
+    static public int staticInt12748;
+    static public int staticInt12749;
+    static public int staticInt12750;
+    static public int staticInt12751;
+    static public int staticInt12752;
+    static public int staticInt12753;
+    static public int staticInt12754;
+    static public int staticInt12755;
+    static public int staticInt12756;
+    static public int staticInt12757;
+    static public int staticInt12758;
+    static public int staticInt12759;
+    static public int staticInt12760;
+    static public int staticInt12761;
+    static public int staticInt12762;
+    static public int staticInt12763;
+    static public int staticInt12764;
+    static public int staticInt12765;
+    static public int staticInt12766;
+    static public int staticInt12767;
+    static public int staticInt12768;
+    static public int staticInt12769;
+    static public int staticInt12770;
+    static public int staticInt12771;
+    static public int staticInt12772;
+    static public int staticInt12773;
+    static public int staticInt12774;
+    static public int staticInt12775;
+    static public int staticInt12776;
+    static public int staticInt12777;
+    static public int staticInt12778;
+    static public int staticInt12779;
+    static public int staticInt12780;
+    static public int staticInt12781;
+    static public int staticInt12782;
+    static public int staticInt12783;
+    static public int staticInt12784;
+    static public int staticInt12785;
+    static public int staticInt12786;
+    static public int staticInt12787;
+    static public int staticInt12788;
+    static public int staticInt12789;
+    static public int staticInt12790;
+    static public int staticInt12791;
+    static public int staticInt12792;
+    static public int staticInt12793;
+    static public int staticInt12794;
+    static public int staticInt12795;
+    static public int staticInt12796;
+    static public int staticInt12797;
+    static public int staticInt12798;
+    static public int staticInt12799;
+    static public int staticInt12800;
+    static public int staticInt12801;
+    static public int staticInt12802;
+    static public int staticInt12803;
+    static public int staticInt12804;
+    static public int staticInt12805;
+    static public int staticInt12806;
+    static public int staticInt12807;
+    static public int staticInt12808;
+    static public int staticInt12809;
+    static public int staticInt12810;
+    static public int staticInt12811;
+    static public int staticInt12812;
+    static public int staticInt12813;
+    static public int staticInt12814;
+    static public int staticInt12815;
+    static public int staticInt12816;
+    static public int staticInt12817;
+    static public int staticInt12818;
+    static public int staticInt12819;
+    static public int staticInt12820;
+    static public int staticInt12821;
+    static public int staticInt12822;
+    static public int staticInt12823;
+    static public int staticInt12824;
+    static public int staticInt12825;
+    static public int staticInt12826;
+    static public int staticInt12827;
+    static public int staticInt12828;
+    static public int staticInt12829;
+    static public int staticInt12830;
+    static public int staticInt12831;
+    static public int staticInt12832;
+    static public int staticInt12833;
+    static public int staticInt12834;
+    static public int staticInt12835;
+    static public int staticInt12836;
+    static public int staticInt12837;
+    static public int staticInt12838;
+    static public int staticInt12839;
+    static public int staticInt12840;
+    static public int staticInt12841;
+    static public int staticInt12842;
+    static public int staticInt12843;
+    static public int staticInt12844;
+    static public int staticInt12845;
+    static public int staticInt12846;
+    static public int staticInt12847;
+    static public int staticInt12848;
+    static public int staticInt12849;
+    static public int staticInt12850;
+    static public int staticInt12851;
+    static public int staticInt12852;
+    static public int staticInt12853;
+    static public int staticInt12854;
+    static public int staticInt12855;
+    static public int staticInt12856;
+    static public int staticInt12857;
+    static public int staticInt12858;
+    static public int staticInt12859;
+    static public int staticInt12860;
+    static public int staticInt12861;
+    static public int staticInt12862;
+    static public int staticInt12863;
+    static public int staticInt12864;
+    static public int staticInt12865;
+    static public int staticInt12866;
+    static public int staticInt12867;
+    static public int staticInt12868;
+    static public int staticInt12869;
+    static public int staticInt12870;
+    static public int staticInt12871;
+    static public int staticInt12872;
+    static public int staticInt12873;
+    static public int staticInt12874;
+    static public int staticInt12875;
+    static public int staticInt12876;
+    static public int staticInt12877;
+    static public int staticInt12878;
+    static public int staticInt12879;
+    static public int staticInt12880;
+    static public int staticInt12881;
+    static public int staticInt12882;
+    static public int staticInt12883;
+    static public int staticInt12884;
+    static public int staticInt12885;
+    static public int staticInt12886;
+    static public int staticInt12887;
+    static public int staticInt12888;
+    static public int staticInt12889;
+    static public int staticInt12890;
+    static public int staticInt12891;
+    static public int staticInt12892;
+    static public int staticInt12893;
+    static public int staticInt12894;
+    static public int staticInt12895;
+    static public int staticInt12896;
+    static public int staticInt12897;
+    static public int staticInt12898;
+    static public int staticInt12899;
+    static public int staticInt12900;
+    static public int staticInt12901;
+    static public int staticInt12902;
+    static public int staticInt12903;
+    static public int staticInt12904;
+    static public int staticInt12905;
+    static public int staticInt12906;
+    static public int staticInt12907;
+    static public int staticInt12908;
+    static public int staticInt12909;
+    static public int staticInt12910;
+    static public int staticInt12911;
+    static public int staticInt12912;
+    static public int staticInt12913;
+    static public int staticInt12914;
+    static public int staticInt12915;
+    static public int staticInt12916;
+    static public int staticInt12917;
+    static public int staticInt12918;
+    static public int staticInt12919;
+    static public int staticInt12920;
+    static public int staticInt12921;
+    static public int staticInt12922;
+    static public int staticInt12923;
+    static public int staticInt12924;
+    static public int staticInt12925;
+    static public int staticInt12926;
+    static public int staticInt12927;
+    static public int staticInt12928;
+    static public int staticInt12929;
+    static public int staticInt12930;
+    static public int staticInt12931;
+    static public int staticInt12932;
+    static public int staticInt12933;
+    static public int staticInt12934;
+    static public int staticInt12935;
+    static public int staticInt12936;
+    static public int staticInt12937;
+    static public int staticInt12938;
+    static public int staticInt12939;
+    static public int staticInt12940;
+    static public int staticInt12941;
+    static public int staticInt12942;
+    static public int staticInt12943;
+    static public int staticInt12944;
+    static public int staticInt12945;
+    static public int staticInt12946;
+    static public int staticInt12947;
+    static public int staticInt12948;
+    static public int staticInt12949;
+    static public int staticInt12950;
+    static public int staticInt12951;
+    static public int staticInt12952;
+    static public int staticInt12953;
+    static public int staticInt12954;
+    static public int staticInt12955;
+    static public int staticInt12956;
+    static public int staticInt12957;
+    static public int staticInt12958;
+    static public int staticInt12959;
+    static public int staticInt12960;
+    static public int staticInt12961;
+    static public int staticInt12962;
+    static public int staticInt12963;
+    static public int staticInt12964;
+    static public int staticInt12965;
+    static public int staticInt12966;
+    static public int staticInt12967;
+    static public int staticInt12968;
+    static public int staticInt12969;
+    static public int staticInt12970;
+    static public int staticInt12971;
+    static public int staticInt12972;
+    static public int staticInt12973;
+    static public int staticInt12974;
+    static public int staticInt12975;
+    static public int staticInt12976;
+    static public int staticInt12977;
+    static public int staticInt12978;
+    static public int staticInt12979;
+    static public int staticInt12980;
+    static public int staticInt12981;
+    static public int staticInt12982;
+    static public int staticInt12983;
+    static public int staticInt12984;
+    static public int staticInt12985;
+    static public int staticInt12986;
+    static public int staticInt12987;
+    static public int staticInt12988;
+    static public int staticInt12989;
+    static public int staticInt12990;
+    static public int staticInt12991;
+    static public int staticInt12992;
+    static public int staticInt12993;
+    static public int staticInt12994;
+    static public int staticInt12995;
+    static public int staticInt12996;
+    static public int staticInt12997;
+    static public int staticInt12998;
+    static public int staticInt12999;
+    static public int staticInt13000;
+    static public int staticInt13001;
+    static public int staticInt13002;
+    static public int staticInt13003;
+    static public int staticInt13004;
+    static public int staticInt13005;
+    static public int staticInt13006;
+    static public int staticInt13007;
+    static public int staticInt13008;
+    static public int staticInt13009;
+    static public int staticInt13010;
+    static public int staticInt13011;
+    static public int staticInt13012;
+    static public int staticInt13013;
+    static public int staticInt13014;
+    static public int staticInt13015;
+    static public int staticInt13016;
+    static public int staticInt13017;
+    static public int staticInt13018;
+    static public int staticInt13019;
+    static public int staticInt13020;
+    static public int staticInt13021;
+    static public int staticInt13022;
+    static public int staticInt13023;
+    static public int staticInt13024;
+    static public int staticInt13025;
+    static public int staticInt13026;
+    static public int staticInt13027;
+    static public int staticInt13028;
+    static public int staticInt13029;
+    static public int staticInt13030;
+    static public int staticInt13031;
+    static public int staticInt13032;
+    static public int staticInt13033;
+    static public int staticInt13034;
+    static public int staticInt13035;
+    static public int staticInt13036;
+    static public int staticInt13037;
+    static public int staticInt13038;
+    static public int staticInt13039;
+    static public int staticInt13040;
+    static public int staticInt13041;
+    static public int staticInt13042;
+    static public int staticInt13043;
+    static public int staticInt13044;
+    static public int staticInt13045;
+    static public int staticInt13046;
+    static public int staticInt13047;
+    static public int staticInt13048;
+    static public int staticInt13049;
+    static public int staticInt13050;
+    static public int staticInt13051;
+    static public int staticInt13052;
+    static public int staticInt13053;
+    static public int staticInt13054;
+    static public int staticInt13055;
+    static public int staticInt13056;
+    static public int staticInt13057;
+    static public int staticInt13058;
+    static public int staticInt13059;
+    static public int staticInt13060;
+    static public int staticInt13061;
+    static public int staticInt13062;
+    static public int staticInt13063;
+    static public int staticInt13064;
+    static public int staticInt13065;
+    static public int staticInt13066;
+    static public int staticInt13067;
+    static public int staticInt13068;
+    static public int staticInt13069;
+    static public int staticInt13070;
+    static public int staticInt13071;
+    static public int staticInt13072;
+    static public int staticInt13073;
+    static public int staticInt13074;
+    static public int staticInt13075;
+    static public int staticInt13076;
+    static public int staticInt13077;
+    static public int staticInt13078;
+    static public int staticInt13079;
+    static public int staticInt13080;
+    static public int staticInt13081;
+    static public int staticInt13082;
+    static public int staticInt13083;
+    static public int staticInt13084;
+    static public int staticInt13085;
+    static public int staticInt13086;
+    static public int staticInt13087;
+    static public int staticInt13088;
+    static public int staticInt13089;
+    static public int staticInt13090;
+    static public int staticInt13091;
+    static public int staticInt13092;
+    static public int staticInt13093;
+    static public int staticInt13094;
+    static public int staticInt13095;
+    static public int staticInt13096;
+    static public int staticInt13097;
+    static public int staticInt13098;
+    static public int staticInt13099;
+    static public int staticInt13100;
+    static public int staticInt13101;
+    static public int staticInt13102;
+    static public int staticInt13103;
+    static public int staticInt13104;
+    static public int staticInt13105;
+    static public int staticInt13106;
+    static public int staticInt13107;
+    static public int staticInt13108;
+    static public int staticInt13109;
+    static public int staticInt13110;
+    static public int staticInt13111;
+    static public int staticInt13112;
+    static public int staticInt13113;
+    static public int staticInt13114;
+    static public int staticInt13115;
+    static public int staticInt13116;
+    static public int staticInt13117;
+    static public int staticInt13118;
+    static public int staticInt13119;
+    static public int staticInt13120;
+    static public int staticInt13121;
+    static public int staticInt13122;
+    static public int staticInt13123;
+    static public int staticInt13124;
+    static public int staticInt13125;
+    static public int staticInt13126;
+    static public int staticInt13127;
+    static public int staticInt13128;
+    static public int staticInt13129;
+    static public int staticInt13130;
+    static public int staticInt13131;
+    static public int staticInt13132;
+    static public int staticInt13133;
+    static public int staticInt13134;
+    static public int staticInt13135;
+    static public int staticInt13136;
+    static public int staticInt13137;
+    static public int staticInt13138;
+    static public int staticInt13139;
+    static public int staticInt13140;
+    static public int staticInt13141;
+    static public int staticInt13142;
+    static public int staticInt13143;
+    static public int staticInt13144;
+    static public int staticInt13145;
+    static public int staticInt13146;
+    static public int staticInt13147;
+    static public int staticInt13148;
+    static public int staticInt13149;
+    static public int staticInt13150;
+    static public int staticInt13151;
+    static public int staticInt13152;
+    static public int staticInt13153;
+    static public int staticInt13154;
+    static public int staticInt13155;
+    static public int staticInt13156;
+    static public int staticInt13157;
+    static public int staticInt13158;
+    static public int staticInt13159;
+    static public int staticInt13160;
+    static public int staticInt13161;
+    static public int staticInt13162;
+    static public int staticInt13163;
+    static public int staticInt13164;
+    static public int staticInt13165;
+    static public int staticInt13166;
+    static public int staticInt13167;
+    static public int staticInt13168;
+    static public int staticInt13169;
+    static public int staticInt13170;
+    static public int staticInt13171;
+    static public int staticInt13172;
+    static public int staticInt13173;
+    static public int staticInt13174;
+    static public int staticInt13175;
+    static public int staticInt13176;
+    static public int staticInt13177;
+    static public int staticInt13178;
+    static public int staticInt13179;
+    static public int staticInt13180;
+    static public int staticInt13181;
+    static public int staticInt13182;
+    static public int staticInt13183;
+    static public int staticInt13184;
+    static public int staticInt13185;
+    static public int staticInt13186;
+    static public int staticInt13187;
+    static public int staticInt13188;
+    static public int staticInt13189;
+    static public int staticInt13190;
+    static public int staticInt13191;
+    static public int staticInt13192;
+    static public int staticInt13193;
+    static public int staticInt13194;
+    static public int staticInt13195;
+    static public int staticInt13196;
+    static public int staticInt13197;
+    static public int staticInt13198;
+    static public int staticInt13199;
+    static public int staticInt13200;
+    static public int staticInt13201;
+    static public int staticInt13202;
+    static public int staticInt13203;
+    static public int staticInt13204;
+    static public int staticInt13205;
+    static public int staticInt13206;
+    static public int staticInt13207;
+    static public int staticInt13208;
+    static public int staticInt13209;
+    static public int staticInt13210;
+    static public int staticInt13211;
+    static public int staticInt13212;
+    static public int staticInt13213;
+    static public int staticInt13214;
+    static public int staticInt13215;
+    static public int staticInt13216;
+    static public int staticInt13217;
+    static public int staticInt13218;
+    static public int staticInt13219;
+    static public int staticInt13220;
+    static public int staticInt13221;
+    static public int staticInt13222;
+    static public int staticInt13223;
+    static public int staticInt13224;
+    static public int staticInt13225;
+    static public int staticInt13226;
+    static public int staticInt13227;
+    static public int staticInt13228;
+    static public int staticInt13229;
+    static public int staticInt13230;
+    static public int staticInt13231;
+    static public int staticInt13232;
+    static public int staticInt13233;
+    static public int staticInt13234;
+    static public int staticInt13235;
+    static public int staticInt13236;
+    static public int staticInt13237;
+    static public int staticInt13238;
+    static public int staticInt13239;
+    static public int staticInt13240;
+    static public int staticInt13241;
+    static public int staticInt13242;
+    static public int staticInt13243;
+    static public int staticInt13244;
+    static public int staticInt13245;
+    static public int staticInt13246;
+    static public int staticInt13247;
+    static public int staticInt13248;
+    static public int staticInt13249;
+    static public int staticInt13250;
+    static public int staticInt13251;
+    static public int staticInt13252;
+    static public int staticInt13253;
+    static public int staticInt13254;
+    static public int staticInt13255;
+    static public int staticInt13256;
+    static public int staticInt13257;
+    static public int staticInt13258;
+    static public int staticInt13259;
+    static public int staticInt13260;
+    static public int staticInt13261;
+    static public int staticInt13262;
+    static public int staticInt13263;
+    static public int staticInt13264;
+    static public int staticInt13265;
+    static public int staticInt13266;
+    static public int staticInt13267;
+    static public int staticInt13268;
+    static public int staticInt13269;
+    static public int staticInt13270;
+    static public int staticInt13271;
+    static public int staticInt13272;
+    static public int staticInt13273;
+    static public int staticInt13274;
+    static public int staticInt13275;
+    static public int staticInt13276;
+    static public int staticInt13277;
+    static public int staticInt13278;
+    static public int staticInt13279;
+    static public int staticInt13280;
+    static public int staticInt13281;
+    static public int staticInt13282;
+    static public int staticInt13283;
+    static public int staticInt13284;
+    static public int staticInt13285;
+    static public int staticInt13286;
+    static public int staticInt13287;
+    static public int staticInt13288;
+    static public int staticInt13289;
+    static public int staticInt13290;
+    static public int staticInt13291;
+    static public int staticInt13292;
+    static public int staticInt13293;
+    static public int staticInt13294;
+    static public int staticInt13295;
+    static public int staticInt13296;
+    static public int staticInt13297;
+    static public int staticInt13298;
+    static public int staticInt13299;
+    static public int staticInt13300;
+    static public int staticInt13301;
+    static public int staticInt13302;
+    static public int staticInt13303;
+    static public int staticInt13304;
+    static public int staticInt13305;
+    static public int staticInt13306;
+    static public int staticInt13307;
+    static public int staticInt13308;
+    static public int staticInt13309;
+    static public int staticInt13310;
+    static public int staticInt13311;
+    static public int staticInt13312;
+    static public int staticInt13313;
+    static public int staticInt13314;
+    static public int staticInt13315;
+    static public int staticInt13316;
+    static public int staticInt13317;
+    static public int staticInt13318;
+    static public int staticInt13319;
+    static public int staticInt13320;
+    static public int staticInt13321;
+    static public int staticInt13322;
+    static public int staticInt13323;
+    static public int staticInt13324;
+    static public int staticInt13325;
+    static public int staticInt13326;
+    static public int staticInt13327;
+    static public int staticInt13328;
+    static public int staticInt13329;
+    static public int staticInt13330;
+    static public int staticInt13331;
+    static public int staticInt13332;
+    static public int staticInt13333;
+    static public int staticInt13334;
+    static public int staticInt13335;
+    static public int staticInt13336;
+    static public int staticInt13337;
+    static public int staticInt13338;
+    static public int staticInt13339;
+    static public int staticInt13340;
+    static public int staticInt13341;
+    static public int staticInt13342;
+    static public int staticInt13343;
+    static public int staticInt13344;
+    static public int staticInt13345;
+    static public int staticInt13346;
+    static public int staticInt13347;
+    static public int staticInt13348;
+    static public int staticInt13349;
+    static public int staticInt13350;
+    static public int staticInt13351;
+    static public int staticInt13352;
+    static public int staticInt13353;
+    static public int staticInt13354;
+    static public int staticInt13355;
+    static public int staticInt13356;
+    static public int staticInt13357;
+    static public int staticInt13358;
+    static public int staticInt13359;
+    static public int staticInt13360;
+    static public int staticInt13361;
+    static public int staticInt13362;
+    static public int staticInt13363;
+    static public int staticInt13364;
+    static public int staticInt13365;
+    static public int staticInt13366;
+    static public int staticInt13367;
+    static public int staticInt13368;
+    static public int staticInt13369;
+    static public int staticInt13370;
+    static public int staticInt13371;
+    static public int staticInt13372;
+    static public int staticInt13373;
+    static public int staticInt13374;
+    static public int staticInt13375;
+    static public int staticInt13376;
+    static public int staticInt13377;
+    static public int staticInt13378;
+    static public int staticInt13379;
+    static public int staticInt13380;
+    static public int staticInt13381;
+    static public int staticInt13382;
+    static public int staticInt13383;
+    static public int staticInt13384;
+    static public int staticInt13385;
+    static public int staticInt13386;
+    static public int staticInt13387;
+    static public int staticInt13388;
+    static public int staticInt13389;
+    static public int staticInt13390;
+    static public int staticInt13391;
+    static public int staticInt13392;
+    static public int staticInt13393;
+    static public int staticInt13394;
+    static public int staticInt13395;
+    static public int staticInt13396;
+    static public int staticInt13397;
+    static public int staticInt13398;
+    static public int staticInt13399;
+    static public int staticInt13400;
+    static public int staticInt13401;
+    static public int staticInt13402;
+    static public int staticInt13403;
+    static public int staticInt13404;
+    static public int staticInt13405;
+    static public int staticInt13406;
+    static public int staticInt13407;
+    static public int staticInt13408;
+    static public int staticInt13409;
+    static public int staticInt13410;
+    static public int staticInt13411;
+    static public int staticInt13412;
+    static public int staticInt13413;
+    static public int staticInt13414;
+    static public int staticInt13415;
+    static public int staticInt13416;
+    static public int staticInt13417;
+    static public int staticInt13418;
+    static public int staticInt13419;
+    static public int staticInt13420;
+    static public int staticInt13421;
+    static public int staticInt13422;
+    static public int staticInt13423;
+    static public int staticInt13424;
+    static public int staticInt13425;
+    static public int staticInt13426;
+    static public int staticInt13427;
+    static public int staticInt13428;
+    static public int staticInt13429;
+    static public int staticInt13430;
+    static public int staticInt13431;
+    static public int staticInt13432;
+    static public int staticInt13433;
+    static public int staticInt13434;
+    static public int staticInt13435;
+    static public int staticInt13436;
+    static public int staticInt13437;
+    static public int staticInt13438;
+    static public int staticInt13439;
+    static public int staticInt13440;
+    static public int staticInt13441;
+    static public int staticInt13442;
+    static public int staticInt13443;
+    static public int staticInt13444;
+    static public int staticInt13445;
+    static public int staticInt13446;
+    static public int staticInt13447;
+    static public int staticInt13448;
+    static public int staticInt13449;
+    static public int staticInt13450;
+    static public int staticInt13451;
+    static public int staticInt13452;
+    static public int staticInt13453;
+    static public int staticInt13454;
+    static public int staticInt13455;
+    static public int staticInt13456;
+    static public int staticInt13457;
+    static public int staticInt13458;
+    static public int staticInt13459;
+    static public int staticInt13460;
+    static public int staticInt13461;
+    static public int staticInt13462;
+    static public int staticInt13463;
+    static public int staticInt13464;
+    static public int staticInt13465;
+    static public int staticInt13466;
+    static public int staticInt13467;
+    static public int staticInt13468;
+    static public int staticInt13469;
+    static public int staticInt13470;
+    static public int staticInt13471;
+    static public int staticInt13472;
+    static public int staticInt13473;
+    static public int staticInt13474;
+    static public int staticInt13475;
+    static public int staticInt13476;
+    static public int staticInt13477;
+    static public int staticInt13478;
+    static public int staticInt13479;
+    static public int staticInt13480;
+    static public int staticInt13481;
+    static public int staticInt13482;
+    static public int staticInt13483;
+    static public int staticInt13484;
+    static public int staticInt13485;
+    static public int staticInt13486;
+    static public int staticInt13487;
+    static public int staticInt13488;
+    static public int staticInt13489;
+    static public int staticInt13490;
+    static public int staticInt13491;
+    static public int staticInt13492;
+    static public int staticInt13493;
+    static public int staticInt13494;
+    static public int staticInt13495;
+    static public int staticInt13496;
+    static public int staticInt13497;
+    static public int staticInt13498;
+    static public int staticInt13499;
+    static public int staticInt13500;
+    static public int staticInt13501;
+    static public int staticInt13502;
+    static public int staticInt13503;
+    static public int staticInt13504;
+    static public int staticInt13505;
+    static public int staticInt13506;
+    static public int staticInt13507;
+    static public int staticInt13508;
+    static public int staticInt13509;
+    static public int staticInt13510;
+    static public int staticInt13511;
+    static public int staticInt13512;
+    static public int staticInt13513;
+    static public int staticInt13514;
+    static public int staticInt13515;
+    static public int staticInt13516;
+    static public int staticInt13517;
+    static public int staticInt13518;
+    static public int staticInt13519;
+    static public int staticInt13520;
+    static public int staticInt13521;
+    static public int staticInt13522;
+    static public int staticInt13523;
+    static public int staticInt13524;
+    static public int staticInt13525;
+    static public int staticInt13526;
+    static public int staticInt13527;
+    static public int staticInt13528;
+    static public int staticInt13529;
+    static public int staticInt13530;
+    static public int staticInt13531;
+    static public int staticInt13532;
+    static public int staticInt13533;
+    static public int staticInt13534;
+    static public int staticInt13535;
+    static public int staticInt13536;
+    static public int staticInt13537;
+    static public int staticInt13538;
+    static public int staticInt13539;
+    static public int staticInt13540;
+    static public int staticInt13541;
+    static public int staticInt13542;
+    static public int staticInt13543;
+    static public int staticInt13544;
+    static public int staticInt13545;
+    static public int staticInt13546;
+    static public int staticInt13547;
+    static public int staticInt13548;
+    static public int staticInt13549;
+    static public int staticInt13550;
+    static public int staticInt13551;
+    static public int staticInt13552;
+    static public int staticInt13553;
+    static public int staticInt13554;
+    static public int staticInt13555;
+    static public int staticInt13556;
+    static public int staticInt13557;
+    static public int staticInt13558;
+    static public int staticInt13559;
+    static public int staticInt13560;
+    static public int staticInt13561;
+    static public int staticInt13562;
+    static public int staticInt13563;
+    static public int staticInt13564;
+    static public int staticInt13565;
+    static public int staticInt13566;
+    static public int staticInt13567;
+    static public int staticInt13568;
+    static public int staticInt13569;
+    static public int staticInt13570;
+    static public int staticInt13571;
+    static public int staticInt13572;
+    static public int staticInt13573;
+    static public int staticInt13574;
+    static public int staticInt13575;
+    static public int staticInt13576;
+    static public int staticInt13577;
+    static public int staticInt13578;
+    static public int staticInt13579;
+    static public int staticInt13580;
+    static public int staticInt13581;
+    static public int staticInt13582;
+    static public int staticInt13583;
+    static public int staticInt13584;
+    static public int staticInt13585;
+    static public int staticInt13586;
+    static public int staticInt13587;
+    static public int staticInt13588;
+    static public int staticInt13589;
+    static public int staticInt13590;
+    static public int staticInt13591;
+    static public int staticInt13592;
+    static public int staticInt13593;
+    static public int staticInt13594;
+    static public int staticInt13595;
+    static public int staticInt13596;
+    static public int staticInt13597;
+    static public int staticInt13598;
+    static public int staticInt13599;
+    static public int staticInt13600;
+    static public int staticInt13601;
+    static public int staticInt13602;
+    static public int staticInt13603;
+    static public int staticInt13604;
+    static public int staticInt13605;
+    static public int staticInt13606;
+    static public int staticInt13607;
+    static public int staticInt13608;
+    static public int staticInt13609;
+    static public int staticInt13610;
+    static public int staticInt13611;
+    static public int staticInt13612;
+    static public int staticInt13613;
+    static public int staticInt13614;
+    static public int staticInt13615;
+    static public int staticInt13616;
+    static public int staticInt13617;
+    static public int staticInt13618;
+    static public int staticInt13619;
+    static public int staticInt13620;
+    static public int staticInt13621;
+    static public int staticInt13622;
+    static public int staticInt13623;
+    static public int staticInt13624;
+    static public int staticInt13625;
+    static public int staticInt13626;
+    static public int staticInt13627;
+    static public int staticInt13628;
+    static public int staticInt13629;
+    static public int staticInt13630;
+    static public int staticInt13631;
+    static public int staticInt13632;
+    static public int staticInt13633;
+    static public int staticInt13634;
+    static public int staticInt13635;
+    static public int staticInt13636;
+    static public int staticInt13637;
+    static public int staticInt13638;
+    static public int staticInt13639;
+    static public int staticInt13640;
+    static public int staticInt13641;
+    static public int staticInt13642;
+    static public int staticInt13643;
+    static public int staticInt13644;
+    static public int staticInt13645;
+    static public int staticInt13646;
+    static public int staticInt13647;
+    static public int staticInt13648;
+    static public int staticInt13649;
+    static public int staticInt13650;
+    static public int staticInt13651;
+    static public int staticInt13652;
+    static public int staticInt13653;
+    static public int staticInt13654;
+    static public int staticInt13655;
+    static public int staticInt13656;
+    static public int staticInt13657;
+    static public int staticInt13658;
+    static public int staticInt13659;
+    static public int staticInt13660;
+    static public int staticInt13661;
+    static public int staticInt13662;
+    static public int staticInt13663;
+    static public int staticInt13664;
+    static public int staticInt13665;
+    static public int staticInt13666;
+    static public int staticInt13667;
+    static public int staticInt13668;
+    static public int staticInt13669;
+    static public int staticInt13670;
+    static public int staticInt13671;
+    static public int staticInt13672;
+    static public int staticInt13673;
+    static public int staticInt13674;
+    static public int staticInt13675;
+    static public int staticInt13676;
+    static public int staticInt13677;
+    static public int staticInt13678;
+    static public int staticInt13679;
+    static public int staticInt13680;
+    static public int staticInt13681;
+    static public int staticInt13682;
+    static public int staticInt13683;
+    static public int staticInt13684;
+    static public int staticInt13685;
+    static public int staticInt13686;
+    static public int staticInt13687;
+    static public int staticInt13688;
+    static public int staticInt13689;
+    static public int staticInt13690;
+    static public int staticInt13691;
+    static public int staticInt13692;
+    static public int staticInt13693;
+    static public int staticInt13694;
+    static public int staticInt13695;
+    static public int staticInt13696;
+    static public int staticInt13697;
+    static public int staticInt13698;
+    static public int staticInt13699;
+    static public int staticInt13700;
+    static public int staticInt13701;
+    static public int staticInt13702;
+    static public int staticInt13703;
+    static public int staticInt13704;
+    static public int staticInt13705;
+    static public int staticInt13706;
+    static public int staticInt13707;
+    static public int staticInt13708;
+    static public int staticInt13709;
+    static public int staticInt13710;
+    static public int staticInt13711;
+    static public int staticInt13712;
+    static public int staticInt13713;
+    static public int staticInt13714;
+    static public int staticInt13715;
+    static public int staticInt13716;
+    static public int staticInt13717;
+    static public int staticInt13718;
+    static public int staticInt13719;
+    static public int staticInt13720;
+    static public int staticInt13721;
+    static public int staticInt13722;
+    static public int staticInt13723;
+    static public int staticInt13724;
+    static public int staticInt13725;
+    static public int staticInt13726;
+    static public int staticInt13727;
+    static public int staticInt13728;
+    static public int staticInt13729;
+    static public int staticInt13730;
+    static public int staticInt13731;
+    static public int staticInt13732;
+    static public int staticInt13733;
+    static public int staticInt13734;
+    static public int staticInt13735;
+    static public int staticInt13736;
+    static public int staticInt13737;
+    static public int staticInt13738;
+    static public int staticInt13739;
+    static public int staticInt13740;
+    static public int staticInt13741;
+    static public int staticInt13742;
+    static public int staticInt13743;
+    static public int staticInt13744;
+    static public int staticInt13745;
+    static public int staticInt13746;
+    static public int staticInt13747;
+    static public int staticInt13748;
+    static public int staticInt13749;
+    static public int staticInt13750;
+    static public int staticInt13751;
+    static public int staticInt13752;
+    static public int staticInt13753;
+    static public int staticInt13754;
+    static public int staticInt13755;
+    static public int staticInt13756;
+    static public int staticInt13757;
+    static public int staticInt13758;
+    static public int staticInt13759;
+    static public int staticInt13760;
+    static public int staticInt13761;
+    static public int staticInt13762;
+    static public int staticInt13763;
+    static public int staticInt13764;
+    static public int staticInt13765;
+    static public int staticInt13766;
+    static public int staticInt13767;
+    static public int staticInt13768;
+    static public int staticInt13769;
+    static public int staticInt13770;
+    static public int staticInt13771;
+    static public int staticInt13772;
+    static public int staticInt13773;
+    static public int staticInt13774;
+    static public int staticInt13775;
+    static public int staticInt13776;
+    static public int staticInt13777;
+    static public int staticInt13778;
+    static public int staticInt13779;
+    static public int staticInt13780;
+    static public int staticInt13781;
+    static public int staticInt13782;
+    static public int staticInt13783;
+    static public int staticInt13784;
+    static public int staticInt13785;
+    static public int staticInt13786;
+    static public int staticInt13787;
+    static public int staticInt13788;
+    static public int staticInt13789;
+    static public int staticInt13790;
+    static public int staticInt13791;
+    static public int staticInt13792;
+    static public int staticInt13793;
+    static public int staticInt13794;
+    static public int staticInt13795;
+    static public int staticInt13796;
+    static public int staticInt13797;
+    static public int staticInt13798;
+    static public int staticInt13799;
+    static public int staticInt13800;
+    static public int staticInt13801;
+    static public int staticInt13802;
+    static public int staticInt13803;
+    static public int staticInt13804;
+    static public int staticInt13805;
+    static public int staticInt13806;
+    static public int staticInt13807;
+    static public int staticInt13808;
+    static public int staticInt13809;
+    static public int staticInt13810;
+    static public int staticInt13811;
+    static public int staticInt13812;
+    static public int staticInt13813;
+    static public int staticInt13814;
+    static public int staticInt13815;
+    static public int staticInt13816;
+    static public int staticInt13817;
+    static public int staticInt13818;
+    static public int staticInt13819;
+    static public int staticInt13820;
+    static public int staticInt13821;
+    static public int staticInt13822;
+    static public int staticInt13823;
+    static public int staticInt13824;
+    static public int staticInt13825;
+    static public int staticInt13826;
+    static public int staticInt13827;
+    static public int staticInt13828;
+    static public int staticInt13829;
+    static public int staticInt13830;
+    static public int staticInt13831;
+    static public int staticInt13832;
+    static public int staticInt13833;
+    static public int staticInt13834;
+    static public int staticInt13835;
+    static public int staticInt13836;
+    static public int staticInt13837;
+    static public int staticInt13838;
+    static public int staticInt13839;
+    static public int staticInt13840;
+    static public int staticInt13841;
+    static public int staticInt13842;
+    static public int staticInt13843;
+    static public int staticInt13844;
+    static public int staticInt13845;
+    static public int staticInt13846;
+    static public int staticInt13847;
+    static public int staticInt13848;
+    static public int staticInt13849;
+    static public int staticInt13850;
+    static public int staticInt13851;
+    static public int staticInt13852;
+    static public int staticInt13853;
+    static public int staticInt13854;
+    static public int staticInt13855;
+    static public int staticInt13856;
+    static public int staticInt13857;
+    static public int staticInt13858;
+    static public int staticInt13859;
+    static public int staticInt13860;
+    static public int staticInt13861;
+    static public int staticInt13862;
+    static public int staticInt13863;
+    static public int staticInt13864;
+    static public int staticInt13865;
+    static public int staticInt13866;
+    static public int staticInt13867;
+    static public int staticInt13868;
+    static public int staticInt13869;
+    static public int staticInt13870;
+    static public int staticInt13871;
+    static public int staticInt13872;
+    static public int staticInt13873;
+    static public int staticInt13874;
+    static public int staticInt13875;
+    static public int staticInt13876;
+    static public int staticInt13877;
+    static public int staticInt13878;
+    static public int staticInt13879;
+    static public int staticInt13880;
+    static public int staticInt13881;
+    static public int staticInt13882;
+    static public int staticInt13883;
+    static public int staticInt13884;
+    static public int staticInt13885;
+    static public int staticInt13886;
+    static public int staticInt13887;
+    static public int staticInt13888;
+    static public int staticInt13889;
+    static public int staticInt13890;
+    static public int staticInt13891;
+    static public int staticInt13892;
+    static public int staticInt13893;
+    static public int staticInt13894;
+    static public int staticInt13895;
+    static public int staticInt13896;
+    static public int staticInt13897;
+    static public int staticInt13898;
+    static public int staticInt13899;
+    static public int staticInt13900;
+    static public int staticInt13901;
+    static public int staticInt13902;
+    static public int staticInt13903;
+    static public int staticInt13904;
+    static public int staticInt13905;
+    static public int staticInt13906;
+    static public int staticInt13907;
+    static public int staticInt13908;
+    static public int staticInt13909;
+    static public int staticInt13910;
+    static public int staticInt13911;
+    static public int staticInt13912;
+    static public int staticInt13913;
+    static public int staticInt13914;
+    static public int staticInt13915;
+    static public int staticInt13916;
+    static public int staticInt13917;
+    static public int staticInt13918;
+    static public int staticInt13919;
+    static public int staticInt13920;
+    static public int staticInt13921;
+    static public int staticInt13922;
+    static public int staticInt13923;
+    static public int staticInt13924;
+    static public int staticInt13925;
+    static public int staticInt13926;
+    static public int staticInt13927;
+    static public int staticInt13928;
+    static public int staticInt13929;
+    static public int staticInt13930;
+    static public int staticInt13931;
+    static public int staticInt13932;
+    static public int staticInt13933;
+    static public int staticInt13934;
+    static public int staticInt13935;
+    static public int staticInt13936;
+    static public int staticInt13937;
+    static public int staticInt13938;
+    static public int staticInt13939;
+    static public int staticInt13940;
+    static public int staticInt13941;
+    static public int staticInt13942;
+    static public int staticInt13943;
+    static public int staticInt13944;
+    static public int staticInt13945;
+    static public int staticInt13946;
+    static public int staticInt13947;
+    static public int staticInt13948;
+    static public int staticInt13949;
+    static public int staticInt13950;
+    static public int staticInt13951;
+    static public int staticInt13952;
+    static public int staticInt13953;
+    static public int staticInt13954;
+    static public int staticInt13955;
+    static public int staticInt13956;
+    static public int staticInt13957;
+    static public int staticInt13958;
+    static public int staticInt13959;
+    static public int staticInt13960;
+    static public int staticInt13961;
+    static public int staticInt13962;
+    static public int staticInt13963;
+    static public int staticInt13964;
+    static public int staticInt13965;
+    static public int staticInt13966;
+    static public int staticInt13967;
+    static public int staticInt13968;
+    static public int staticInt13969;
+    static public int staticInt13970;
+    static public int staticInt13971;
+    static public int staticInt13972;
+    static public int staticInt13973;
+    static public int staticInt13974;
+    static public int staticInt13975;
+    static public int staticInt13976;
+    static public int staticInt13977;
+    static public int staticInt13978;
+    static public int staticInt13979;
+    static public int staticInt13980;
+    static public int staticInt13981;
+    static public int staticInt13982;
+    static public int staticInt13983;
+    static public int staticInt13984;
+    static public int staticInt13985;
+    static public int staticInt13986;
+    static public int staticInt13987;
+    static public int staticInt13988;
+    static public int staticInt13989;
+    static public int staticInt13990;
+    static public int staticInt13991;
+    static public int staticInt13992;
+    static public int staticInt13993;
+    static public int staticInt13994;
+    static public int staticInt13995;
+    static public int staticInt13996;
+    static public int staticInt13997;
+    static public int staticInt13998;
+    static public int staticInt13999;
+    static public int staticInt14000;
+    static public int staticInt14001;
+    static public int staticInt14002;
+    static public int staticInt14003;
+    static public int staticInt14004;
+    static public int staticInt14005;
+    static public int staticInt14006;
+    static public int staticInt14007;
+    static public int staticInt14008;
+    static public int staticInt14009;
+    static public int staticInt14010;
+    static public int staticInt14011;
+    static public int staticInt14012;
+    static public int staticInt14013;
+    static public int staticInt14014;
+    static public int staticInt14015;
+    static public int staticInt14016;
+    static public int staticInt14017;
+    static public int staticInt14018;
+    static public int staticInt14019;
+    static public int staticInt14020;
+    static public int staticInt14021;
+    static public int staticInt14022;
+    static public int staticInt14023;
+    static public int staticInt14024;
+    static public int staticInt14025;
+    static public int staticInt14026;
+    static public int staticInt14027;
+    static public int staticInt14028;
+    static public int staticInt14029;
+    static public int staticInt14030;
+    static public int staticInt14031;
+    static public int staticInt14032;
+    static public int staticInt14033;
+    static public int staticInt14034;
+    static public int staticInt14035;
+    static public int staticInt14036;
+    static public int staticInt14037;
+    static public int staticInt14038;
+    static public int staticInt14039;
+    static public int staticInt14040;
+    static public int staticInt14041;
+    static public int staticInt14042;
+    static public int staticInt14043;
+    static public int staticInt14044;
+    static public int staticInt14045;
+    static public int staticInt14046;
+    static public int staticInt14047;
+    static public int staticInt14048;
+    static public int staticInt14049;
+    static public int staticInt14050;
+    static public int staticInt14051;
+    static public int staticInt14052;
+    static public int staticInt14053;
+    static public int staticInt14054;
+    static public int staticInt14055;
+    static public int staticInt14056;
+    static public int staticInt14057;
+    static public int staticInt14058;
+    static public int staticInt14059;
+    static public int staticInt14060;
+    static public int staticInt14061;
+    static public int staticInt14062;
+    static public int staticInt14063;
+    static public int staticInt14064;
+    static public int staticInt14065;
+    static public int staticInt14066;
+    static public int staticInt14067;
+    static public int staticInt14068;
+    static public int staticInt14069;
+    static public int staticInt14070;
+    static public int staticInt14071;
+    static public int staticInt14072;
+    static public int staticInt14073;
+    static public int staticInt14074;
+    static public int staticInt14075;
+    static public int staticInt14076;
+    static public int staticInt14077;
+    static public int staticInt14078;
+    static public int staticInt14079;
+    static public int staticInt14080;
+    static public int staticInt14081;
+    static public int staticInt14082;
+    static public int staticInt14083;
+    static public int staticInt14084;
+    static public int staticInt14085;
+    static public int staticInt14086;
+    static public int staticInt14087;
+    static public int staticInt14088;
+    static public int staticInt14089;
+    static public int staticInt14090;
+    static public int staticInt14091;
+    static public int staticInt14092;
+    static public int staticInt14093;
+    static public int staticInt14094;
+    static public int staticInt14095;
+    static public int staticInt14096;
+    static public int staticInt14097;
+    static public int staticInt14098;
+    static public int staticInt14099;
+    static public int staticInt14100;
+    static public int staticInt14101;
+    static public int staticInt14102;
+    static public int staticInt14103;
+    static public int staticInt14104;
+    static public int staticInt14105;
+    static public int staticInt14106;
+    static public int staticInt14107;
+    static public int staticInt14108;
+    static public int staticInt14109;
+    static public int staticInt14110;
+    static public int staticInt14111;
+    static public int staticInt14112;
+    static public int staticInt14113;
+    static public int staticInt14114;
+    static public int staticInt14115;
+    static public int staticInt14116;
+    static public int staticInt14117;
+    static public int staticInt14118;
+    static public int staticInt14119;
+    static public int staticInt14120;
+    static public int staticInt14121;
+    static public int staticInt14122;
+    static public int staticInt14123;
+    static public int staticInt14124;
+    static public int staticInt14125;
+    static public int staticInt14126;
+    static public int staticInt14127;
+    static public int staticInt14128;
+    static public int staticInt14129;
+    static public int staticInt14130;
+    static public int staticInt14131;
+    static public int staticInt14132;
+    static public int staticInt14133;
+    static public int staticInt14134;
+    static public int staticInt14135;
+    static public int staticInt14136;
+    static public int staticInt14137;
+    static public int staticInt14138;
+    static public int staticInt14139;
+    static public int staticInt14140;
+    static public int staticInt14141;
+    static public int staticInt14142;
+    static public int staticInt14143;
+    static public int staticInt14144;
+    static public int staticInt14145;
+    static public int staticInt14146;
+    static public int staticInt14147;
+    static public int staticInt14148;
+    static public int staticInt14149;
+    static public int staticInt14150;
+    static public int staticInt14151;
+    static public int staticInt14152;
+    static public int staticInt14153;
+    static public int staticInt14154;
+    static public int staticInt14155;
+    static public int staticInt14156;
+    static public int staticInt14157;
+    static public int staticInt14158;
+    static public int staticInt14159;
+    static public int staticInt14160;
+    static public int staticInt14161;
+    static public int staticInt14162;
+    static public int staticInt14163;
+    static public int staticInt14164;
+    static public int staticInt14165;
+    static public int staticInt14166;
+    static public int staticInt14167;
+    static public int staticInt14168;
+    static public int staticInt14169;
+    static public int staticInt14170;
+    static public int staticInt14171;
+    static public int staticInt14172;
+    static public int staticInt14173;
+    static public int staticInt14174;
+    static public int staticInt14175;
+    static public int staticInt14176;
+    static public int staticInt14177;
+    static public int staticInt14178;
+    static public int staticInt14179;
+    static public int staticInt14180;
+    static public int staticInt14181;
+    static public int staticInt14182;
+    static public int staticInt14183;
+    static public int staticInt14184;
+    static public int staticInt14185;
+    static public int staticInt14186;
+    static public int staticInt14187;
+    static public int staticInt14188;
+    static public int staticInt14189;
+    static public int staticInt14190;
+    static public int staticInt14191;
+    static public int staticInt14192;
+    static public int staticInt14193;
+    static public int staticInt14194;
+    static public int staticInt14195;
+    static public int staticInt14196;
+    static public int staticInt14197;
+    static public int staticInt14198;
+    static public int staticInt14199;
+    static public int staticInt14200;
+    static public int staticInt14201;
+    static public int staticInt14202;
+    static public int staticInt14203;
+    static public int staticInt14204;
+    static public int staticInt14205;
+    static public int staticInt14206;
+    static public int staticInt14207;
+    static public int staticInt14208;
+    static public int staticInt14209;
+    static public int staticInt14210;
+    static public int staticInt14211;
+    static public int staticInt14212;
+    static public int staticInt14213;
+    static public int staticInt14214;
+    static public int staticInt14215;
+    static public int staticInt14216;
+    static public int staticInt14217;
+    static public int staticInt14218;
+    static public int staticInt14219;
+    static public int staticInt14220;
+    static public int staticInt14221;
+    static public int staticInt14222;
+    static public int staticInt14223;
+    static public int staticInt14224;
+    static public int staticInt14225;
+    static public int staticInt14226;
+    static public int staticInt14227;
+    static public int staticInt14228;
+    static public int staticInt14229;
+    static public int staticInt14230;
+    static public int staticInt14231;
+    static public int staticInt14232;
+    static public int staticInt14233;
+    static public int staticInt14234;
+    static public int staticInt14235;
+    static public int staticInt14236;
+    static public int staticInt14237;
+    static public int staticInt14238;
+    static public int staticInt14239;
+    static public int staticInt14240;
+    static public int staticInt14241;
+    static public int staticInt14242;
+    static public int staticInt14243;
+    static public int staticInt14244;
+    static public int staticInt14245;
+    static public int staticInt14246;
+    static public int staticInt14247;
+    static public int staticInt14248;
+    static public int staticInt14249;
+    static public int staticInt14250;
+    static public int staticInt14251;
+    static public int staticInt14252;
+    static public int staticInt14253;
+    static public int staticInt14254;
+    static public int staticInt14255;
+    static public int staticInt14256;
+    static public int staticInt14257;
+    static public int staticInt14258;
+    static public int staticInt14259;
+    static public int staticInt14260;
+    static public int staticInt14261;
+    static public int staticInt14262;
+    static public int staticInt14263;
+    static public int staticInt14264;
+    static public int staticInt14265;
+    static public int staticInt14266;
+    static public int staticInt14267;
+    static public int staticInt14268;
+    static public int staticInt14269;
+    static public int staticInt14270;
+    static public int staticInt14271;
+    static public int staticInt14272;
+    static public int staticInt14273;
+    static public int staticInt14274;
+    static public int staticInt14275;
+    static public int staticInt14276;
+    static public int staticInt14277;
+    static public int staticInt14278;
+    static public int staticInt14279;
+    static public int staticInt14280;
+    static public int staticInt14281;
+    static public int staticInt14282;
+    static public int staticInt14283;
+    static public int staticInt14284;
+    static public int staticInt14285;
+    static public int staticInt14286;
+    static public int staticInt14287;
+    static public int staticInt14288;
+    static public int staticInt14289;
+    static public int staticInt14290;
+    static public int staticInt14291;
+    static public int staticInt14292;
+    static public int staticInt14293;
+    static public int staticInt14294;
+    static public int staticInt14295;
+    static public int staticInt14296;
+    static public int staticInt14297;
+    static public int staticInt14298;
+    static public int staticInt14299;
+    static public int staticInt14300;
+    static public int staticInt14301;
+    static public int staticInt14302;
+    static public int staticInt14303;
+    static public int staticInt14304;
+    static public int staticInt14305;
+    static public int staticInt14306;
+    static public int staticInt14307;
+    static public int staticInt14308;
+    static public int staticInt14309;
+    static public int staticInt14310;
+    static public int staticInt14311;
+    static public int staticInt14312;
+    static public int staticInt14313;
+    static public int staticInt14314;
+    static public int staticInt14315;
+    static public int staticInt14316;
+    static public int staticInt14317;
+    static public int staticInt14318;
+    static public int staticInt14319;
+    static public int staticInt14320;
+    static public int staticInt14321;
+    static public int staticInt14322;
+    static public int staticInt14323;
+    static public int staticInt14324;
+    static public int staticInt14325;
+    static public int staticInt14326;
+    static public int staticInt14327;
+    static public int staticInt14328;
+    static public int staticInt14329;
+    static public int staticInt14330;
+    static public int staticInt14331;
+    static public int staticInt14332;
+    static public int staticInt14333;
+    static public int staticInt14334;
+    static public int staticInt14335;
+    static public int staticInt14336;
+    static public int staticInt14337;
+    static public int staticInt14338;
+    static public int staticInt14339;
+    static public int staticInt14340;
+    static public int staticInt14341;
+    static public int staticInt14342;
+    static public int staticInt14343;
+    static public int staticInt14344;
+    static public int staticInt14345;
+    static public int staticInt14346;
+    static public int staticInt14347;
+    static public int staticInt14348;
+    static public int staticInt14349;
+    static public int staticInt14350;
+    static public int staticInt14351;
+    static public int staticInt14352;
+    static public int staticInt14353;
+    static public int staticInt14354;
+    static public int staticInt14355;
+    static public int staticInt14356;
+    static public int staticInt14357;
+    static public int staticInt14358;
+    static public int staticInt14359;
+    static public int staticInt14360;
+    static public int staticInt14361;
+    static public int staticInt14362;
+    static public int staticInt14363;
+    static public int staticInt14364;
+    static public int staticInt14365;
+    static public int staticInt14366;
+    static public int staticInt14367;
+    static public int staticInt14368;
+    static public int staticInt14369;
+    static public int staticInt14370;
+    static public int staticInt14371;
+    static public int staticInt14372;
+    static public int staticInt14373;
+    static public int staticInt14374;
+    static public int staticInt14375;
+    static public int staticInt14376;
+    static public int staticInt14377;
+    static public int staticInt14378;
+    static public int staticInt14379;
+    static public int staticInt14380;
+    static public int staticInt14381;
+    static public int staticInt14382;
+    static public int staticInt14383;
+    static public int staticInt14384;
+    static public int staticInt14385;
+    static public int staticInt14386;
+    static public int staticInt14387;
+    static public int staticInt14388;
+    static public int staticInt14389;
+    static public int staticInt14390;
+    static public int staticInt14391;
+    static public int staticInt14392;
+    static public int staticInt14393;
+    static public int staticInt14394;
+    static public int staticInt14395;
+    static public int staticInt14396;
+    static public int staticInt14397;
+    static public int staticInt14398;
+    static public int staticInt14399;
+    static public int staticInt14400;
+    static public int staticInt14401;
+    static public int staticInt14402;
+    static public int staticInt14403;
+    static public int staticInt14404;
+    static public int staticInt14405;
+    static public int staticInt14406;
+    static public int staticInt14407;
+    static public int staticInt14408;
+    static public int staticInt14409;
+    static public int staticInt14410;
+    static public int staticInt14411;
+    static public int staticInt14412;
+    static public int staticInt14413;
+    static public int staticInt14414;
+    static public int staticInt14415;
+    static public int staticInt14416;
+    static public int staticInt14417;
+    static public int staticInt14418;
+    static public int staticInt14419;
+    static public int staticInt14420;
+    static public int staticInt14421;
+    static public int staticInt14422;
+    static public int staticInt14423;
+    static public int staticInt14424;
+    static public int staticInt14425;
+    static public int staticInt14426;
+    static public int staticInt14427;
+    static public int staticInt14428;
+    static public int staticInt14429;
+    static public int staticInt14430;
+    static public int staticInt14431;
+    static public int staticInt14432;
+    static public int staticInt14433;
+    static public int staticInt14434;
+    static public int staticInt14435;
+    static public int staticInt14436;
+    static public int staticInt14437;
+    static public int staticInt14438;
+    static public int staticInt14439;
+    static public int staticInt14440;
+    static public int staticInt14441;
+    static public int staticInt14442;
+    static public int staticInt14443;
+    static public int staticInt14444;
+    static public int staticInt14445;
+    static public int staticInt14446;
+    static public int staticInt14447;
+    static public int staticInt14448;
+    static public int staticInt14449;
+    static public int staticInt14450;
+    static public int staticInt14451;
+    static public int staticInt14452;
+    static public int staticInt14453;
+    static public int staticInt14454;
+    static public int staticInt14455;
+    static public int staticInt14456;
+    static public int staticInt14457;
+    static public int staticInt14458;
+    static public int staticInt14459;
+    static public int staticInt14460;
+    static public int staticInt14461;
+    static public int staticInt14462;
+    static public int staticInt14463;
+    static public int staticInt14464;
+    static public int staticInt14465;
+    static public int staticInt14466;
+    static public int staticInt14467;
+    static public int staticInt14468;
+    static public int staticInt14469;
+    static public int staticInt14470;
+    static public int staticInt14471;
+    static public int staticInt14472;
+    static public int staticInt14473;
+    static public int staticInt14474;
+    static public int staticInt14475;
+    static public int staticInt14476;
+    static public int staticInt14477;
+    static public int staticInt14478;
+    static public int staticInt14479;
+    static public int staticInt14480;
+    static public int staticInt14481;
+    static public int staticInt14482;
+    static public int staticInt14483;
+    static public int staticInt14484;
+    static public int staticInt14485;
+    static public int staticInt14486;
+    static public int staticInt14487;
+    static public int staticInt14488;
+    static public int staticInt14489;
+    static public int staticInt14490;
+    static public int staticInt14491;
+    static public int staticInt14492;
+    static public int staticInt14493;
+    static public int staticInt14494;
+    static public int staticInt14495;
+    static public int staticInt14496;
+    static public int staticInt14497;
+    static public int staticInt14498;
+    static public int staticInt14499;
+    static public int staticInt14500;
+    static public int staticInt14501;
+    static public int staticInt14502;
+    static public int staticInt14503;
+    static public int staticInt14504;
+    static public int staticInt14505;
+    static public int staticInt14506;
+    static public int staticInt14507;
+    static public int staticInt14508;
+    static public int staticInt14509;
+    static public int staticInt14510;
+    static public int staticInt14511;
+    static public int staticInt14512;
+    static public int staticInt14513;
+    static public int staticInt14514;
+    static public int staticInt14515;
+    static public int staticInt14516;
+    static public int staticInt14517;
+    static public int staticInt14518;
+    static public int staticInt14519;
+    static public int staticInt14520;
+    static public int staticInt14521;
+    static public int staticInt14522;
+    static public int staticInt14523;
+    static public int staticInt14524;
+    static public int staticInt14525;
+    static public int staticInt14526;
+    static public int staticInt14527;
+    static public int staticInt14528;
+    static public int staticInt14529;
+    static public int staticInt14530;
+    static public int staticInt14531;
+    static public int staticInt14532;
+    static public int staticInt14533;
+    static public int staticInt14534;
+    static public int staticInt14535;
+    static public int staticInt14536;
+    static public int staticInt14537;
+    static public int staticInt14538;
+    static public int staticInt14539;
+    static public int staticInt14540;
+    static public int staticInt14541;
+    static public int staticInt14542;
+    static public int staticInt14543;
+    static public int staticInt14544;
+    static public int staticInt14545;
+    static public int staticInt14546;
+    static public int staticInt14547;
+    static public int staticInt14548;
+    static public int staticInt14549;
+    static public int staticInt14550;
+    static public int staticInt14551;
+    static public int staticInt14552;
+    static public int staticInt14553;
+    static public int staticInt14554;
+    static public int staticInt14555;
+    static public int staticInt14556;
+    static public int staticInt14557;
+    static public int staticInt14558;
+    static public int staticInt14559;
+    static public int staticInt14560;
+    static public int staticInt14561;
+    static public int staticInt14562;
+    static public int staticInt14563;
+    static public int staticInt14564;
+    static public int staticInt14565;
+    static public int staticInt14566;
+    static public int staticInt14567;
+    static public int staticInt14568;
+    static public int staticInt14569;
+    static public int staticInt14570;
+    static public int staticInt14571;
+    static public int staticInt14572;
+    static public int staticInt14573;
+    static public int staticInt14574;
+    static public int staticInt14575;
+    static public int staticInt14576;
+    static public int staticInt14577;
+    static public int staticInt14578;
+    static public int staticInt14579;
+    static public int staticInt14580;
+    static public int staticInt14581;
+    static public int staticInt14582;
+    static public int staticInt14583;
+    static public int staticInt14584;
+    static public int staticInt14585;
+    static public int staticInt14586;
+    static public int staticInt14587;
+    static public int staticInt14588;
+    static public int staticInt14589;
+    static public int staticInt14590;
+    static public int staticInt14591;
+    static public int staticInt14592;
+    static public int staticInt14593;
+    static public int staticInt14594;
+    static public int staticInt14595;
+    static public int staticInt14596;
+    static public int staticInt14597;
+    static public int staticInt14598;
+    static public int staticInt14599;
+    static public int staticInt14600;
+    static public int staticInt14601;
+    static public int staticInt14602;
+    static public int staticInt14603;
+    static public int staticInt14604;
+    static public int staticInt14605;
+    static public int staticInt14606;
+    static public int staticInt14607;
+    static public int staticInt14608;
+    static public int staticInt14609;
+    static public int staticInt14610;
+    static public int staticInt14611;
+    static public int staticInt14612;
+    static public int staticInt14613;
+    static public int staticInt14614;
+    static public int staticInt14615;
+    static public int staticInt14616;
+    static public int staticInt14617;
+    static public int staticInt14618;
+    static public int staticInt14619;
+    static public int staticInt14620;
+    static public int staticInt14621;
+    static public int staticInt14622;
+    static public int staticInt14623;
+    static public int staticInt14624;
+    static public int staticInt14625;
+    static public int staticInt14626;
+    static public int staticInt14627;
+    static public int staticInt14628;
+    static public int staticInt14629;
+    static public int staticInt14630;
+    static public int staticInt14631;
+    static public int staticInt14632;
+    static public int staticInt14633;
+    static public int staticInt14634;
+    static public int staticInt14635;
+    static public int staticInt14636;
+    static public int staticInt14637;
+    static public int staticInt14638;
+    static public int staticInt14639;
+    static public int staticInt14640;
+    static public int staticInt14641;
+    static public int staticInt14642;
+    static public int staticInt14643;
+    static public int staticInt14644;
+    static public int staticInt14645;
+    static public int staticInt14646;
+    static public int staticInt14647;
+    static public int staticInt14648;
+    static public int staticInt14649;
+    static public int staticInt14650;
+    static public int staticInt14651;
+    static public int staticInt14652;
+    static public int staticInt14653;
+    static public int staticInt14654;
+    static public int staticInt14655;
+    static public int staticInt14656;
+    static public int staticInt14657;
+    static public int staticInt14658;
+    static public int staticInt14659;
+    static public int staticInt14660;
+    static public int staticInt14661;
+    static public int staticInt14662;
+    static public int staticInt14663;
+    static public int staticInt14664;
+    static public int staticInt14665;
+    static public int staticInt14666;
+    static public int staticInt14667;
+    static public int staticInt14668;
+    static public int staticInt14669;
+    static public int staticInt14670;
+    static public int staticInt14671;
+    static public int staticInt14672;
+    static public int staticInt14673;
+    static public int staticInt14674;
+    static public int staticInt14675;
+    static public int staticInt14676;
+    static public int staticInt14677;
+    static public int staticInt14678;
+    static public int staticInt14679;
+    static public int staticInt14680;
+    static public int staticInt14681;
+    static public int staticInt14682;
+    static public int staticInt14683;
+    static public int staticInt14684;
+    static public int staticInt14685;
+    static public int staticInt14686;
+    static public int staticInt14687;
+    static public int staticInt14688;
+    static public int staticInt14689;
+    static public int staticInt14690;
+    static public int staticInt14691;
+    static public int staticInt14692;
+    static public int staticInt14693;
+    static public int staticInt14694;
+    static public int staticInt14695;
+    static public int staticInt14696;
+    static public int staticInt14697;
+    static public int staticInt14698;
+    static public int staticInt14699;
+    static public int staticInt14700;
+    static public int staticInt14701;
+    static public int staticInt14702;
+    static public int staticInt14703;
+    static public int staticInt14704;
+    static public int staticInt14705;
+    static public int staticInt14706;
+    static public int staticInt14707;
+    static public int staticInt14708;
+    static public int staticInt14709;
+    static public int staticInt14710;
+    static public int staticInt14711;
+    static public int staticInt14712;
+    static public int staticInt14713;
+    static public int staticInt14714;
+    static public int staticInt14715;
+    static public int staticInt14716;
+    static public int staticInt14717;
+    static public int staticInt14718;
+    static public int staticInt14719;
+    static public int staticInt14720;
+    static public int staticInt14721;
+    static public int staticInt14722;
+    static public int staticInt14723;
+    static public int staticInt14724;
+    static public int staticInt14725;
+    static public int staticInt14726;
+    static public int staticInt14727;
+    static public int staticInt14728;
+    static public int staticInt14729;
+    static public int staticInt14730;
+    static public int staticInt14731;
+    static public int staticInt14732;
+    static public int staticInt14733;
+    static public int staticInt14734;
+    static public int staticInt14735;
+    static public int staticInt14736;
+    static public int staticInt14737;
+    static public int staticInt14738;
+    static public int staticInt14739;
+    static public int staticInt14740;
+    static public int staticInt14741;
+    static public int staticInt14742;
+    static public int staticInt14743;
+    static public int staticInt14744;
+    static public int staticInt14745;
+    static public int staticInt14746;
+    static public int staticInt14747;
+    static public int staticInt14748;
+    static public int staticInt14749;
+    static public int staticInt14750;
+    static public int staticInt14751;
+    static public int staticInt14752;
+    static public int staticInt14753;
+    static public int staticInt14754;
+    static public int staticInt14755;
+    static public int staticInt14756;
+    static public int staticInt14757;
+    static public int staticInt14758;
+    static public int staticInt14759;
+    static public int staticInt14760;
+    static public int staticInt14761;
+    static public int staticInt14762;
+    static public int staticInt14763;
+    static public int staticInt14764;
+    static public int staticInt14765;
+    static public int staticInt14766;
+    static public int staticInt14767;
+    static public int staticInt14768;
+    static public int staticInt14769;
+    static public int staticInt14770;
+    static public int staticInt14771;
+    static public int staticInt14772;
+    static public int staticInt14773;
+    static public int staticInt14774;
+    static public int staticInt14775;
+    static public int staticInt14776;
+    static public int staticInt14777;
+    static public int staticInt14778;
+    static public int staticInt14779;
+    static public int staticInt14780;
+    static public int staticInt14781;
+    static public int staticInt14782;
+    static public int staticInt14783;
+    static public int staticInt14784;
+    static public int staticInt14785;
+    static public int staticInt14786;
+    static public int staticInt14787;
+    static public int staticInt14788;
+    static public int staticInt14789;
+    static public int staticInt14790;
+    static public int staticInt14791;
+    static public int staticInt14792;
+    static public int staticInt14793;
+    static public int staticInt14794;
+    static public int staticInt14795;
+    static public int staticInt14796;
+    static public int staticInt14797;
+    static public int staticInt14798;
+    static public int staticInt14799;
+    static public int staticInt14800;
+    static public int staticInt14801;
+    static public int staticInt14802;
+    static public int staticInt14803;
+    static public int staticInt14804;
+    static public int staticInt14805;
+    static public int staticInt14806;
+    static public int staticInt14807;
+    static public int staticInt14808;
+    static public int staticInt14809;
+    static public int staticInt14810;
+    static public int staticInt14811;
+    static public int staticInt14812;
+    static public int staticInt14813;
+    static public int staticInt14814;
+    static public int staticInt14815;
+    static public int staticInt14816;
+    static public int staticInt14817;
+    static public int staticInt14818;
+    static public int staticInt14819;
+    static public int staticInt14820;
+    static public int staticInt14821;
+    static public int staticInt14822;
+    static public int staticInt14823;
+    static public int staticInt14824;
+    static public int staticInt14825;
+    static public int staticInt14826;
+    static public int staticInt14827;
+    static public int staticInt14828;
+    static public int staticInt14829;
+    static public int staticInt14830;
+    static public int staticInt14831;
+    static public int staticInt14832;
+    static public int staticInt14833;
+    static public int staticInt14834;
+    static public int staticInt14835;
+    static public int staticInt14836;
+    static public int staticInt14837;
+    static public int staticInt14838;
+    static public int staticInt14839;
+    static public int staticInt14840;
+    static public int staticInt14841;
+    static public int staticInt14842;
+    static public int staticInt14843;
+    static public int staticInt14844;
+    static public int staticInt14845;
+    static public int staticInt14846;
+    static public int staticInt14847;
+    static public int staticInt14848;
+    static public int staticInt14849;
+    static public int staticInt14850;
+    static public int staticInt14851;
+    static public int staticInt14852;
+    static public int staticInt14853;
+    static public int staticInt14854;
+    static public int staticInt14855;
+    static public int staticInt14856;
+    static public int staticInt14857;
+    static public int staticInt14858;
+    static public int staticInt14859;
+    static public int staticInt14860;
+    static public int staticInt14861;
+    static public int staticInt14862;
+    static public int staticInt14863;
+    static public int staticInt14864;
+    static public int staticInt14865;
+    static public int staticInt14866;
+    static public int staticInt14867;
+    static public int staticInt14868;
+    static public int staticInt14869;
+    static public int staticInt14870;
+    static public int staticInt14871;
+    static public int staticInt14872;
+    static public int staticInt14873;
+    static public int staticInt14874;
+    static public int staticInt14875;
+    static public int staticInt14876;
+    static public int staticInt14877;
+    static public int staticInt14878;
+    static public int staticInt14879;
+    static public int staticInt14880;
+    static public int staticInt14881;
+    static public int staticInt14882;
+    static public int staticInt14883;
+    static public int staticInt14884;
+    static public int staticInt14885;
+    static public int staticInt14886;
+    static public int staticInt14887;
+    static public int staticInt14888;
+    static public int staticInt14889;
+    static public int staticInt14890;
+    static public int staticInt14891;
+    static public int staticInt14892;
+    static public int staticInt14893;
+    static public int staticInt14894;
+    static public int staticInt14895;
+    static public int staticInt14896;
+    static public int staticInt14897;
+    static public int staticInt14898;
+    static public int staticInt14899;
+    static public int staticInt14900;
+    static public int staticInt14901;
+    static public int staticInt14902;
+    static public int staticInt14903;
+    static public int staticInt14904;
+    static public int staticInt14905;
+    static public int staticInt14906;
+    static public int staticInt14907;
+    static public int staticInt14908;
+    static public int staticInt14909;
+    static public int staticInt14910;
+    static public int staticInt14911;
+    static public int staticInt14912;
+    static public int staticInt14913;
+    static public int staticInt14914;
+    static public int staticInt14915;
+    static public int staticInt14916;
+    static public int staticInt14917;
+    static public int staticInt14918;
+    static public int staticInt14919;
+    static public int staticInt14920;
+    static public int staticInt14921;
+    static public int staticInt14922;
+    static public int staticInt14923;
+    static public int staticInt14924;
+    static public int staticInt14925;
+    static public int staticInt14926;
+    static public int staticInt14927;
+    static public int staticInt14928;
+    static public int staticInt14929;
+    static public int staticInt14930;
+    static public int staticInt14931;
+    static public int staticInt14932;
+    static public int staticInt14933;
+    static public int staticInt14934;
+    static public int staticInt14935;
+    static public int staticInt14936;
+    static public int staticInt14937;
+    static public int staticInt14938;
+    static public int staticInt14939;
+    static public int staticInt14940;
+    static public int staticInt14941;
+    static public int staticInt14942;
+    static public int staticInt14943;
+    static public int staticInt14944;
+    static public int staticInt14945;
+    static public int staticInt14946;
+    static public int staticInt14947;
+    static public int staticInt14948;
+    static public int staticInt14949;
+    static public int staticInt14950;
+    static public int staticInt14951;
+    static public int staticInt14952;
+    static public int staticInt14953;
+    static public int staticInt14954;
+    static public int staticInt14955;
+    static public int staticInt14956;
+    static public int staticInt14957;
+    static public int staticInt14958;
+    static public int staticInt14959;
+    static public int staticInt14960;
+    static public int staticInt14961;
+    static public int staticInt14962;
+    static public int staticInt14963;
+    static public int staticInt14964;
+    static public int staticInt14965;
+    static public int staticInt14966;
+    static public int staticInt14967;
+    static public int staticInt14968;
+    static public int staticInt14969;
+    static public int staticInt14970;
+    static public int staticInt14971;
+    static public int staticInt14972;
+    static public int staticInt14973;
+    static public int staticInt14974;
+    static public int staticInt14975;
+    static public int staticInt14976;
+    static public int staticInt14977;
+    static public int staticInt14978;
+    static public int staticInt14979;
+    static public int staticInt14980;
+    static public int staticInt14981;
+    static public int staticInt14982;
+    static public int staticInt14983;
+    static public int staticInt14984;
+    static public int staticInt14985;
+    static public int staticInt14986;
+    static public int staticInt14987;
+    static public int staticInt14988;
+    static public int staticInt14989;
+    static public int staticInt14990;
+    static public int staticInt14991;
+    static public int staticInt14992;
+    static public int staticInt14993;
+    static public int staticInt14994;
+    static public int staticInt14995;
+    static public int staticInt14996;
+    static public int staticInt14997;
+    static public int staticInt14998;
+    static public int staticInt14999;
+    static public int staticInt15000;
+    static public int staticInt15001;
+    static public int staticInt15002;
+    static public int staticInt15003;
+    static public int staticInt15004;
+    static public int staticInt15005;
+    static public int staticInt15006;
+    static public int staticInt15007;
+    static public int staticInt15008;
+    static public int staticInt15009;
+    static public int staticInt15010;
+    static public int staticInt15011;
+    static public int staticInt15012;
+    static public int staticInt15013;
+    static public int staticInt15014;
+    static public int staticInt15015;
+    static public int staticInt15016;
+    static public int staticInt15017;
+    static public int staticInt15018;
+    static public int staticInt15019;
+    static public int staticInt15020;
+    static public int staticInt15021;
+    static public int staticInt15022;
+    static public int staticInt15023;
+    static public int staticInt15024;
+    static public int staticInt15025;
+    static public int staticInt15026;
+    static public int staticInt15027;
+    static public int staticInt15028;
+    static public int staticInt15029;
+    static public int staticInt15030;
+    static public int staticInt15031;
+    static public int staticInt15032;
+    static public int staticInt15033;
+    static public int staticInt15034;
+    static public int staticInt15035;
+    static public int staticInt15036;
+    static public int staticInt15037;
+    static public int staticInt15038;
+    static public int staticInt15039;
+    static public int staticInt15040;
+    static public int staticInt15041;
+    static public int staticInt15042;
+    static public int staticInt15043;
+    static public int staticInt15044;
+    static public int staticInt15045;
+    static public int staticInt15046;
+    static public int staticInt15047;
+    static public int staticInt15048;
+    static public int staticInt15049;
+    static public int staticInt15050;
+    static public int staticInt15051;
+    static public int staticInt15052;
+    static public int staticInt15053;
+    static public int staticInt15054;
+    static public int staticInt15055;
+    static public int staticInt15056;
+    static public int staticInt15057;
+    static public int staticInt15058;
+    static public int staticInt15059;
+    static public int staticInt15060;
+    static public int staticInt15061;
+    static public int staticInt15062;
+    static public int staticInt15063;
+    static public int staticInt15064;
+    static public int staticInt15065;
+    static public int staticInt15066;
+    static public int staticInt15067;
+    static public int staticInt15068;
+    static public int staticInt15069;
+    static public int staticInt15070;
+    static public int staticInt15071;
+    static public int staticInt15072;
+    static public int staticInt15073;
+    static public int staticInt15074;
+    static public int staticInt15075;
+    static public int staticInt15076;
+    static public int staticInt15077;
+    static public int staticInt15078;
+    static public int staticInt15079;
+    static public int staticInt15080;
+    static public int staticInt15081;
+    static public int staticInt15082;
+    static public int staticInt15083;
+    static public int staticInt15084;
+    static public int staticInt15085;
+    static public int staticInt15086;
+    static public int staticInt15087;
+    static public int staticInt15088;
+    static public int staticInt15089;
+    static public int staticInt15090;
+    static public int staticInt15091;
+    static public int staticInt15092;
+    static public int staticInt15093;
+    static public int staticInt15094;
+    static public int staticInt15095;
+    static public int staticInt15096;
+    static public int staticInt15097;
+    static public int staticInt15098;
+    static public int staticInt15099;
+    static public int staticInt15100;
+    static public int staticInt15101;
+    static public int staticInt15102;
+    static public int staticInt15103;
+    static public int staticInt15104;
+    static public int staticInt15105;
+    static public int staticInt15106;
+    static public int staticInt15107;
+    static public int staticInt15108;
+    static public int staticInt15109;
+    static public int staticInt15110;
+    static public int staticInt15111;
+    static public int staticInt15112;
+    static public int staticInt15113;
+    static public int staticInt15114;
+    static public int staticInt15115;
+    static public int staticInt15116;
+    static public int staticInt15117;
+    static public int staticInt15118;
+    static public int staticInt15119;
+    static public int staticInt15120;
+    static public int staticInt15121;
+    static public int staticInt15122;
+    static public int staticInt15123;
+    static public int staticInt15124;
+    static public int staticInt15125;
+    static public int staticInt15126;
+    static public int staticInt15127;
+    static public int staticInt15128;
+    static public int staticInt15129;
+    static public int staticInt15130;
+    static public int staticInt15131;
+    static public int staticInt15132;
+    static public int staticInt15133;
+    static public int staticInt15134;
+    static public int staticInt15135;
+    static public int staticInt15136;
+    static public int staticInt15137;
+    static public int staticInt15138;
+    static public int staticInt15139;
+    static public int staticInt15140;
+    static public int staticInt15141;
+    static public int staticInt15142;
+    static public int staticInt15143;
+    static public int staticInt15144;
+    static public int staticInt15145;
+    static public int staticInt15146;
+    static public int staticInt15147;
+    static public int staticInt15148;
+    static public int staticInt15149;
+    static public int staticInt15150;
+    static public int staticInt15151;
+    static public int staticInt15152;
+    static public int staticInt15153;
+    static public int staticInt15154;
+    static public int staticInt15155;
+    static public int staticInt15156;
+    static public int staticInt15157;
+    static public int staticInt15158;
+    static public int staticInt15159;
+    static public int staticInt15160;
+    static public int staticInt15161;
+    static public int staticInt15162;
+    static public int staticInt15163;
+    static public int staticInt15164;
+    static public int staticInt15165;
+    static public int staticInt15166;
+    static public int staticInt15167;
+    static public int staticInt15168;
+    static public int staticInt15169;
+    static public int staticInt15170;
+    static public int staticInt15171;
+    static public int staticInt15172;
+    static public int staticInt15173;
+    static public int staticInt15174;
+    static public int staticInt15175;
+    static public int staticInt15176;
+    static public int staticInt15177;
+    static public int staticInt15178;
+    static public int staticInt15179;
+    static public int staticInt15180;
+    static public int staticInt15181;
+    static public int staticInt15182;
+    static public int staticInt15183;
+    static public int staticInt15184;
+    static public int staticInt15185;
+    static public int staticInt15186;
+    static public int staticInt15187;
+    static public int staticInt15188;
+    static public int staticInt15189;
+    static public int staticInt15190;
+    static public int staticInt15191;
+    static public int staticInt15192;
+    static public int staticInt15193;
+    static public int staticInt15194;
+    static public int staticInt15195;
+    static public int staticInt15196;
+    static public int staticInt15197;
+    static public int staticInt15198;
+    static public int staticInt15199;
+    static public int staticInt15200;
+    static public int staticInt15201;
+    static public int staticInt15202;
+    static public int staticInt15203;
+    static public int staticInt15204;
+    static public int staticInt15205;
+    static public int staticInt15206;
+    static public int staticInt15207;
+    static public int staticInt15208;
+    static public int staticInt15209;
+    static public int staticInt15210;
+    static public int staticInt15211;
+    static public int staticInt15212;
+    static public int staticInt15213;
+    static public int staticInt15214;
+    static public int staticInt15215;
+    static public int staticInt15216;
+    static public int staticInt15217;
+    static public int staticInt15218;
+    static public int staticInt15219;
+    static public int staticInt15220;
+    static public int staticInt15221;
+    static public int staticInt15222;
+    static public int staticInt15223;
+    static public int staticInt15224;
+    static public int staticInt15225;
+    static public int staticInt15226;
+    static public int staticInt15227;
+    static public int staticInt15228;
+    static public int staticInt15229;
+    static public int staticInt15230;
+    static public int staticInt15231;
+    static public int staticInt15232;
+    static public int staticInt15233;
+    static public int staticInt15234;
+    static public int staticInt15235;
+    static public int staticInt15236;
+    static public int staticInt15237;
+    static public int staticInt15238;
+    static public int staticInt15239;
+    static public int staticInt15240;
+    static public int staticInt15241;
+    static public int staticInt15242;
+    static public int staticInt15243;
+    static public int staticInt15244;
+    static public int staticInt15245;
+    static public int staticInt15246;
+    static public int staticInt15247;
+    static public int staticInt15248;
+    static public int staticInt15249;
+    static public int staticInt15250;
+    static public int staticInt15251;
+    static public int staticInt15252;
+    static public int staticInt15253;
+    static public int staticInt15254;
+    static public int staticInt15255;
+    static public int staticInt15256;
+    static public int staticInt15257;
+    static public int staticInt15258;
+    static public int staticInt15259;
+    static public int staticInt15260;
+    static public int staticInt15261;
+    static public int staticInt15262;
+    static public int staticInt15263;
+    static public int staticInt15264;
+    static public int staticInt15265;
+    static public int staticInt15266;
+    static public int staticInt15267;
+    static public int staticInt15268;
+    static public int staticInt15269;
+    static public int staticInt15270;
+    static public int staticInt15271;
+    static public int staticInt15272;
+    static public int staticInt15273;
+    static public int staticInt15274;
+    static public int staticInt15275;
+    static public int staticInt15276;
+    static public int staticInt15277;
+    static public int staticInt15278;
+    static public int staticInt15279;
+    static public int staticInt15280;
+    static public int staticInt15281;
+    static public int staticInt15282;
+    static public int staticInt15283;
+    static public int staticInt15284;
+    static public int staticInt15285;
+    static public int staticInt15286;
+    static public int staticInt15287;
+    static public int staticInt15288;
+    static public int staticInt15289;
+    static public int staticInt15290;
+    static public int staticInt15291;
+    static public int staticInt15292;
+    static public int staticInt15293;
+    static public int staticInt15294;
+    static public int staticInt15295;
+    static public int staticInt15296;
+    static public int staticInt15297;
+    static public int staticInt15298;
+    static public int staticInt15299;
+    static public int staticInt15300;
+    static public int staticInt15301;
+    static public int staticInt15302;
+    static public int staticInt15303;
+    static public int staticInt15304;
+    static public int staticInt15305;
+    static public int staticInt15306;
+    static public int staticInt15307;
+    static public int staticInt15308;
+    static public int staticInt15309;
+    static public int staticInt15310;
+    static public int staticInt15311;
+    static public int staticInt15312;
+    static public int staticInt15313;
+    static public int staticInt15314;
+    static public int staticInt15315;
+    static public int staticInt15316;
+    static public int staticInt15317;
+    static public int staticInt15318;
+    static public int staticInt15319;
+    static public int staticInt15320;
+    static public int staticInt15321;
+    static public int staticInt15322;
+    static public int staticInt15323;
+    static public int staticInt15324;
+    static public int staticInt15325;
+    static public int staticInt15326;
+    static public int staticInt15327;
+    static public int staticInt15328;
+    static public int staticInt15329;
+    static public int staticInt15330;
+    static public int staticInt15331;
+    static public int staticInt15332;
+    static public int staticInt15333;
+    static public int staticInt15334;
+    static public int staticInt15335;
+    static public int staticInt15336;
+    static public int staticInt15337;
+    static public int staticInt15338;
+    static public int staticInt15339;
+    static public int staticInt15340;
+    static public int staticInt15341;
+    static public int staticInt15342;
+    static public int staticInt15343;
+    static public int staticInt15344;
+    static public int staticInt15345;
+    static public int staticInt15346;
+    static public int staticInt15347;
+    static public int staticInt15348;
+    static public int staticInt15349;
+    static public int staticInt15350;
+    static public int staticInt15351;
+    static public int staticInt15352;
+    static public int staticInt15353;
+    static public int staticInt15354;
+    static public int staticInt15355;
+    static public int staticInt15356;
+    static public int staticInt15357;
+    static public int staticInt15358;
+    static public int staticInt15359;
+    static public int staticInt15360;
+    static public int staticInt15361;
+    static public int staticInt15362;
+    static public int staticInt15363;
+    static public int staticInt15364;
+    static public int staticInt15365;
+    static public int staticInt15366;
+    static public int staticInt15367;
+    static public int staticInt15368;
+    static public int staticInt15369;
+    static public int staticInt15370;
+    static public int staticInt15371;
+    static public int staticInt15372;
+    static public int staticInt15373;
+    static public int staticInt15374;
+    static public int staticInt15375;
+    static public int staticInt15376;
+    static public int staticInt15377;
+    static public int staticInt15378;
+    static public int staticInt15379;
+    static public int staticInt15380;
+    static public int staticInt15381;
+    static public int staticInt15382;
+    static public int staticInt15383;
+    static public int staticInt15384;
+    static public int staticInt15385;
+    static public int staticInt15386;
+    static public int staticInt15387;
+    static public int staticInt15388;
+    static public int staticInt15389;
+    static public int staticInt15390;
+    static public int staticInt15391;
+    static public int staticInt15392;
+    static public int staticInt15393;
+    static public int staticInt15394;
+    static public int staticInt15395;
+    static public int staticInt15396;
+    static public int staticInt15397;
+    static public int staticInt15398;
+    static public int staticInt15399;
+    static public int staticInt15400;
+    static public int staticInt15401;
+    static public int staticInt15402;
+    static public int staticInt15403;
+    static public int staticInt15404;
+    static public int staticInt15405;
+    static public int staticInt15406;
+    static public int staticInt15407;
+    static public int staticInt15408;
+    static public int staticInt15409;
+    static public int staticInt15410;
+    static public int staticInt15411;
+    static public int staticInt15412;
+    static public int staticInt15413;
+    static public int staticInt15414;
+    static public int staticInt15415;
+    static public int staticInt15416;
+    static public int staticInt15417;
+    static public int staticInt15418;
+    static public int staticInt15419;
+    static public int staticInt15420;
+    static public int staticInt15421;
+    static public int staticInt15422;
+    static public int staticInt15423;
+    static public int staticInt15424;
+    static public int staticInt15425;
+    static public int staticInt15426;
+    static public int staticInt15427;
+    static public int staticInt15428;
+    static public int staticInt15429;
+    static public int staticInt15430;
+    static public int staticInt15431;
+    static public int staticInt15432;
+    static public int staticInt15433;
+    static public int staticInt15434;
+    static public int staticInt15435;
+    static public int staticInt15436;
+    static public int staticInt15437;
+    static public int staticInt15438;
+    static public int staticInt15439;
+    static public int staticInt15440;
+    static public int staticInt15441;
+    static public int staticInt15442;
+    static public int staticInt15443;
+    static public int staticInt15444;
+    static public int staticInt15445;
+    static public int staticInt15446;
+    static public int staticInt15447;
+    static public int staticInt15448;
+    static public int staticInt15449;
+    static public int staticInt15450;
+    static public int staticInt15451;
+    static public int staticInt15452;
+    static public int staticInt15453;
+    static public int staticInt15454;
+    static public int staticInt15455;
+    static public int staticInt15456;
+    static public int staticInt15457;
+    static public int staticInt15458;
+    static public int staticInt15459;
+    static public int staticInt15460;
+    static public int staticInt15461;
+    static public int staticInt15462;
+    static public int staticInt15463;
+    static public int staticInt15464;
+    static public int staticInt15465;
+    static public int staticInt15466;
+    static public int staticInt15467;
+    static public int staticInt15468;
+    static public int staticInt15469;
+    static public int staticInt15470;
+    static public int staticInt15471;
+    static public int staticInt15472;
+    static public int staticInt15473;
+    static public int staticInt15474;
+    static public int staticInt15475;
+    static public int staticInt15476;
+    static public int staticInt15477;
+    static public int staticInt15478;
+    static public int staticInt15479;
+    static public int staticInt15480;
+    static public int staticInt15481;
+    static public int staticInt15482;
+    static public int staticInt15483;
+    static public int staticInt15484;
+    static public int staticInt15485;
+    static public int staticInt15486;
+    static public int staticInt15487;
+    static public int staticInt15488;
+    static public int staticInt15489;
+    static public int staticInt15490;
+    static public int staticInt15491;
+    static public int staticInt15492;
+    static public int staticInt15493;
+    static public int staticInt15494;
+    static public int staticInt15495;
+    static public int staticInt15496;
+    static public int staticInt15497;
+    static public int staticInt15498;
+    static public int staticInt15499;
+    static public int staticInt15500;
+    static public int staticInt15501;
+    static public int staticInt15502;
+    static public int staticInt15503;
+    static public int staticInt15504;
+    static public int staticInt15505;
+    static public int staticInt15506;
+    static public int staticInt15507;
+    static public int staticInt15508;
+    static public int staticInt15509;
+    static public int staticInt15510;
+    static public int staticInt15511;
+    static public int staticInt15512;
+    static public int staticInt15513;
+    static public int staticInt15514;
+    static public int staticInt15515;
+    static public int staticInt15516;
+    static public int staticInt15517;
+    static public int staticInt15518;
+    static public int staticInt15519;
+    static public int staticInt15520;
+    static public int staticInt15521;
+    static public int staticInt15522;
+    static public int staticInt15523;
+    static public int staticInt15524;
+    static public int staticInt15525;
+    static public int staticInt15526;
+    static public int staticInt15527;
+    static public int staticInt15528;
+    static public int staticInt15529;
+    static public int staticInt15530;
+    static public int staticInt15531;
+    static public int staticInt15532;
+    static public int staticInt15533;
+    static public int staticInt15534;
+    static public int staticInt15535;
+    static public int staticInt15536;
+    static public int staticInt15537;
+    static public int staticInt15538;
+    static public int staticInt15539;
+    static public int staticInt15540;
+    static public int staticInt15541;
+    static public int staticInt15542;
+    static public int staticInt15543;
+    static public int staticInt15544;
+    static public int staticInt15545;
+    static public int staticInt15546;
+    static public int staticInt15547;
+    static public int staticInt15548;
+    static public int staticInt15549;
+    static public int staticInt15550;
+    static public int staticInt15551;
+    static public int staticInt15552;
+    static public int staticInt15553;
+    static public int staticInt15554;
+    static public int staticInt15555;
+    static public int staticInt15556;
+    static public int staticInt15557;
+    static public int staticInt15558;
+    static public int staticInt15559;
+    static public int staticInt15560;
+    static public int staticInt15561;
+    static public int staticInt15562;
+    static public int staticInt15563;
+    static public int staticInt15564;
+    static public int staticInt15565;
+    static public int staticInt15566;
+    static public int staticInt15567;
+    static public int staticInt15568;
+    static public int staticInt15569;
+    static public int staticInt15570;
+    static public int staticInt15571;
+    static public int staticInt15572;
+    static public int staticInt15573;
+    static public int staticInt15574;
+    static public int staticInt15575;
+    static public int staticInt15576;
+    static public int staticInt15577;
+    static public int staticInt15578;
+    static public int staticInt15579;
+    static public int staticInt15580;
+    static public int staticInt15581;
+    static public int staticInt15582;
+    static public int staticInt15583;
+    static public int staticInt15584;
+    static public int staticInt15585;
+    static public int staticInt15586;
+    static public int staticInt15587;
+    static public int staticInt15588;
+    static public int staticInt15589;
+    static public int staticInt15590;
+    static public int staticInt15591;
+    static public int staticInt15592;
+    static public int staticInt15593;
+    static public int staticInt15594;
+    static public int staticInt15595;
+    static public int staticInt15596;
+    static public int staticInt15597;
+    static public int staticInt15598;
+    static public int staticInt15599;
+    static public int staticInt15600;
+    static public int staticInt15601;
+    static public int staticInt15602;
+    static public int staticInt15603;
+    static public int staticInt15604;
+    static public int staticInt15605;
+    static public int staticInt15606;
+    static public int staticInt15607;
+    static public int staticInt15608;
+    static public int staticInt15609;
+    static public int staticInt15610;
+    static public int staticInt15611;
+    static public int staticInt15612;
+    static public int staticInt15613;
+    static public int staticInt15614;
+    static public int staticInt15615;
+    static public int staticInt15616;
+    static public int staticInt15617;
+    static public int staticInt15618;
+    static public int staticInt15619;
+    static public int staticInt15620;
+    static public int staticInt15621;
+    static public int staticInt15622;
+    static public int staticInt15623;
+    static public int staticInt15624;
+    static public int staticInt15625;
+    static public int staticInt15626;
+    static public int staticInt15627;
+    static public int staticInt15628;
+    static public int staticInt15629;
+    static public int staticInt15630;
+    static public int staticInt15631;
+    static public int staticInt15632;
+    static public int staticInt15633;
+    static public int staticInt15634;
+    static public int staticInt15635;
+    static public int staticInt15636;
+    static public int staticInt15637;
+    static public int staticInt15638;
+    static public int staticInt15639;
+    static public int staticInt15640;
+    static public int staticInt15641;
+    static public int staticInt15642;
+    static public int staticInt15643;
+    static public int staticInt15644;
+    static public int staticInt15645;
+    static public int staticInt15646;
+    static public int staticInt15647;
+    static public int staticInt15648;
+    static public int staticInt15649;
+    static public int staticInt15650;
+    static public int staticInt15651;
+    static public int staticInt15652;
+    static public int staticInt15653;
+    static public int staticInt15654;
+    static public int staticInt15655;
+    static public int staticInt15656;
+    static public int staticInt15657;
+    static public int staticInt15658;
+    static public int staticInt15659;
+    static public int staticInt15660;
+    static public int staticInt15661;
+    static public int staticInt15662;
+    static public int staticInt15663;
+    static public int staticInt15664;
+    static public int staticInt15665;
+    static public int staticInt15666;
+    static public int staticInt15667;
+    static public int staticInt15668;
+    static public int staticInt15669;
+    static public int staticInt15670;
+    static public int staticInt15671;
+    static public int staticInt15672;
+    static public int staticInt15673;
+    static public int staticInt15674;
+    static public int staticInt15675;
+    static public int staticInt15676;
+    static public int staticInt15677;
+    static public int staticInt15678;
+    static public int staticInt15679;
+    static public int staticInt15680;
+    static public int staticInt15681;
+    static public int staticInt15682;
+    static public int staticInt15683;
+    static public int staticInt15684;
+    static public int staticInt15685;
+    static public int staticInt15686;
+    static public int staticInt15687;
+    static public int staticInt15688;
+    static public int staticInt15689;
+    static public int staticInt15690;
+    static public int staticInt15691;
+    static public int staticInt15692;
+    static public int staticInt15693;
+    static public int staticInt15694;
+    static public int staticInt15695;
+    static public int staticInt15696;
+    static public int staticInt15697;
+    static public int staticInt15698;
+    static public int staticInt15699;
+    static public int staticInt15700;
+    static public int staticInt15701;
+    static public int staticInt15702;
+    static public int staticInt15703;
+    static public int staticInt15704;
+    static public int staticInt15705;
+    static public int staticInt15706;
+    static public int staticInt15707;
+    static public int staticInt15708;
+    static public int staticInt15709;
+    static public int staticInt15710;
+    static public int staticInt15711;
+    static public int staticInt15712;
+    static public int staticInt15713;
+    static public int staticInt15714;
+    static public int staticInt15715;
+    static public int staticInt15716;
+    static public int staticInt15717;
+    static public int staticInt15718;
+    static public int staticInt15719;
+    static public int staticInt15720;
+    static public int staticInt15721;
+    static public int staticInt15722;
+    static public int staticInt15723;
+    static public int staticInt15724;
+    static public int staticInt15725;
+    static public int staticInt15726;
+    static public int staticInt15727;
+    static public int staticInt15728;
+    static public int staticInt15729;
+    static public int staticInt15730;
+    static public int staticInt15731;
+    static public int staticInt15732;
+    static public int staticInt15733;
+    static public int staticInt15734;
+    static public int staticInt15735;
+    static public int staticInt15736;
+    static public int staticInt15737;
+    static public int staticInt15738;
+    static public int staticInt15739;
+    static public int staticInt15740;
+    static public int staticInt15741;
+    static public int staticInt15742;
+    static public int staticInt15743;
+    static public int staticInt15744;
+    static public int staticInt15745;
+    static public int staticInt15746;
+    static public int staticInt15747;
+    static public int staticInt15748;
+    static public int staticInt15749;
+    static public int staticInt15750;
+    static public int staticInt15751;
+    static public int staticInt15752;
+    static public int staticInt15753;
+    static public int staticInt15754;
+    static public int staticInt15755;
+    static public int staticInt15756;
+    static public int staticInt15757;
+    static public int staticInt15758;
+    static public int staticInt15759;
+    static public int staticInt15760;
+    static public int staticInt15761;
+    static public int staticInt15762;
+    static public int staticInt15763;
+    static public int staticInt15764;
+    static public int staticInt15765;
+    static public int staticInt15766;
+    static public int staticInt15767;
+    static public int staticInt15768;
+    static public int staticInt15769;
+    static public int staticInt15770;
+    static public int staticInt15771;
+    static public int staticInt15772;
+    static public int staticInt15773;
+    static public int staticInt15774;
+    static public int staticInt15775;
+    static public int staticInt15776;
+    static public int staticInt15777;
+    static public int staticInt15778;
+    static public int staticInt15779;
+    static public int staticInt15780;
+    static public int staticInt15781;
+    static public int staticInt15782;
+    static public int staticInt15783;
+    static public int staticInt15784;
+    static public int staticInt15785;
+    static public int staticInt15786;
+    static public int staticInt15787;
+    static public int staticInt15788;
+    static public int staticInt15789;
+    static public int staticInt15790;
+    static public int staticInt15791;
+    static public int staticInt15792;
+    static public int staticInt15793;
+    static public int staticInt15794;
+    static public int staticInt15795;
+    static public int staticInt15796;
+    static public int staticInt15797;
+    static public int staticInt15798;
+    static public int staticInt15799;
+    static public int staticInt15800;
+    static public int staticInt15801;
+    static public int staticInt15802;
+    static public int staticInt15803;
+    static public int staticInt15804;
+    static public int staticInt15805;
+    static public int staticInt15806;
+    static public int staticInt15807;
+    static public int staticInt15808;
+    static public int staticInt15809;
+    static public int staticInt15810;
+    static public int staticInt15811;
+    static public int staticInt15812;
+    static public int staticInt15813;
+    static public int staticInt15814;
+    static public int staticInt15815;
+    static public int staticInt15816;
+    static public int staticInt15817;
+    static public int staticInt15818;
+    static public int staticInt15819;
+    static public int staticInt15820;
+    static public int staticInt15821;
+    static public int staticInt15822;
+    static public int staticInt15823;
+    static public int staticInt15824;
+    static public int staticInt15825;
+    static public int staticInt15826;
+    static public int staticInt15827;
+    static public int staticInt15828;
+    static public int staticInt15829;
+    static public int staticInt15830;
+    static public int staticInt15831;
+    static public int staticInt15832;
+    static public int staticInt15833;
+    static public int staticInt15834;
+    static public int staticInt15835;
+    static public int staticInt15836;
+    static public int staticInt15837;
+    static public int staticInt15838;
+    static public int staticInt15839;
+    static public int staticInt15840;
+    static public int staticInt15841;
+    static public int staticInt15842;
+    static public int staticInt15843;
+    static public int staticInt15844;
+    static public int staticInt15845;
+    static public int staticInt15846;
+    static public int staticInt15847;
+    static public int staticInt15848;
+    static public int staticInt15849;
+    static public int staticInt15850;
+    static public int staticInt15851;
+    static public int staticInt15852;
+    static public int staticInt15853;
+    static public int staticInt15854;
+    static public int staticInt15855;
+    static public int staticInt15856;
+    static public int staticInt15857;
+    static public int staticInt15858;
+    static public int staticInt15859;
+    static public int staticInt15860;
+    static public int staticInt15861;
+    static public int staticInt15862;
+    static public int staticInt15863;
+    static public int staticInt15864;
+    static public int staticInt15865;
+    static public int staticInt15866;
+    static public int staticInt15867;
+    static public int staticInt15868;
+    static public int staticInt15869;
+    static public int staticInt15870;
+    static public int staticInt15871;
+    static public int staticInt15872;
+    static public int staticInt15873;
+    static public int staticInt15874;
+    static public int staticInt15875;
+    static public int staticInt15876;
+    static public int staticInt15877;
+    static public int staticInt15878;
+    static public int staticInt15879;
+    static public int staticInt15880;
+    static public int staticInt15881;
+    static public int staticInt15882;
+    static public int staticInt15883;
+    static public int staticInt15884;
+    static public int staticInt15885;
+    static public int staticInt15886;
+    static public int staticInt15887;
+    static public int staticInt15888;
+    static public int staticInt15889;
+    static public int staticInt15890;
+    static public int staticInt15891;
+    static public int staticInt15892;
+    static public int staticInt15893;
+    static public int staticInt15894;
+    static public int staticInt15895;
+    static public int staticInt15896;
+    static public int staticInt15897;
+    static public int staticInt15898;
+    static public int staticInt15899;
+    static public int staticInt15900;
+    static public int staticInt15901;
+    static public int staticInt15902;
+    static public int staticInt15903;
+    static public int staticInt15904;
+    static public int staticInt15905;
+    static public int staticInt15906;
+    static public int staticInt15907;
+    static public int staticInt15908;
+    static public int staticInt15909;
+    static public int staticInt15910;
+    static public int staticInt15911;
+    static public int staticInt15912;
+    static public int staticInt15913;
+    static public int staticInt15914;
+    static public int staticInt15915;
+    static public int staticInt15916;
+    static public int staticInt15917;
+    static public int staticInt15918;
+    static public int staticInt15919;
+    static public int staticInt15920;
+    static public int staticInt15921;
+    static public int staticInt15922;
+    static public int staticInt15923;
+    static public int staticInt15924;
+    static public int staticInt15925;
+    static public int staticInt15926;
+    static public int staticInt15927;
+    static public int staticInt15928;
+    static public int staticInt15929;
+    static public int staticInt15930;
+    static public int staticInt15931;
+    static public int staticInt15932;
+    static public int staticInt15933;
+    static public int staticInt15934;
+    static public int staticInt15935;
+    static public int staticInt15936;
+    static public int staticInt15937;
+    static public int staticInt15938;
+    static public int staticInt15939;
+    static public int staticInt15940;
+    static public int staticInt15941;
+    static public int staticInt15942;
+    static public int staticInt15943;
+    static public int staticInt15944;
+    static public int staticInt15945;
+    static public int staticInt15946;
+    static public int staticInt15947;
+    static public int staticInt15948;
+    static public int staticInt15949;
+    static public int staticInt15950;
+    static public int staticInt15951;
+    static public int staticInt15952;
+    static public int staticInt15953;
+    static public int staticInt15954;
+    static public int staticInt15955;
+    static public int staticInt15956;
+    static public int staticInt15957;
+    static public int staticInt15958;
+    static public int staticInt15959;
+    static public int staticInt15960;
+    static public int staticInt15961;
+    static public int staticInt15962;
+    static public int staticInt15963;
+    static public int staticInt15964;
+    static public int staticInt15965;
+    static public int staticInt15966;
+    static public int staticInt15967;
+    static public int staticInt15968;
+    static public int staticInt15969;
+    static public int staticInt15970;
+    static public int staticInt15971;
+    static public int staticInt15972;
+    static public int staticInt15973;
+    static public int staticInt15974;
+    static public int staticInt15975;
+    static public int staticInt15976;
+    static public int staticInt15977;
+    static public int staticInt15978;
+    static public int staticInt15979;
+    static public int staticInt15980;
+    static public int staticInt15981;
+    static public int staticInt15982;
+    static public int staticInt15983;
+    static public int staticInt15984;
+    static public int staticInt15985;
+    static public int staticInt15986;
+    static public int staticInt15987;
+    static public int staticInt15988;
+    static public int staticInt15989;
+    static public int staticInt15990;
+    static public int staticInt15991;
+    static public int staticInt15992;
+    static public int staticInt15993;
+    static public int staticInt15994;
+    static public int staticInt15995;
+    static public int staticInt15996;
+    static public int staticInt15997;
+    static public int staticInt15998;
+    static public int staticInt15999;
+    static public int staticInt16000;
+    static public int staticInt16001;
+    static public int staticInt16002;
+    static public int staticInt16003;
+    static public int staticInt16004;
+    static public int staticInt16005;
+    static public int staticInt16006;
+    static public int staticInt16007;
+    static public int staticInt16008;
+    static public int staticInt16009;
+    static public int staticInt16010;
+    static public int staticInt16011;
+    static public int staticInt16012;
+    static public int staticInt16013;
+    static public int staticInt16014;
+    static public int staticInt16015;
+    static public int staticInt16016;
+    static public int staticInt16017;
+    static public int staticInt16018;
+    static public int staticInt16019;
+    static public int staticInt16020;
+    static public int staticInt16021;
+    static public int staticInt16022;
+    static public int staticInt16023;
+    static public int staticInt16024;
+    static public int staticInt16025;
+    static public int staticInt16026;
+    static public int staticInt16027;
+    static public int staticInt16028;
+    static public int staticInt16029;
+    static public int staticInt16030;
+    static public int staticInt16031;
+    static public int staticInt16032;
+    static public int staticInt16033;
+    static public int staticInt16034;
+    static public int staticInt16035;
+    static public int staticInt16036;
+    static public int staticInt16037;
+    static public int staticInt16038;
+    static public int staticInt16039;
+    static public int staticInt16040;
+    static public int staticInt16041;
+    static public int staticInt16042;
+    static public int staticInt16043;
+    static public int staticInt16044;
+    static public int staticInt16045;
+    static public int staticInt16046;
+    static public int staticInt16047;
+    static public int staticInt16048;
+    static public int staticInt16049;
+    static public int staticInt16050;
+    static public int staticInt16051;
+    static public int staticInt16052;
+    static public int staticInt16053;
+    static public int staticInt16054;
+    static public int staticInt16055;
+    static public int staticInt16056;
+    static public int staticInt16057;
+    static public int staticInt16058;
+    static public int staticInt16059;
+    static public int staticInt16060;
+    static public int staticInt16061;
+    static public int staticInt16062;
+    static public int staticInt16063;
+    static public int staticInt16064;
+    static public int staticInt16065;
+    static public int staticInt16066;
+    static public int staticInt16067;
+    static public int staticInt16068;
+    static public int staticInt16069;
+    static public int staticInt16070;
+    static public int staticInt16071;
+    static public int staticInt16072;
+    static public int staticInt16073;
+    static public int staticInt16074;
+    static public int staticInt16075;
+    static public int staticInt16076;
+    static public int staticInt16077;
+    static public int staticInt16078;
+    static public int staticInt16079;
+    static public int staticInt16080;
+    static public int staticInt16081;
+    static public int staticInt16082;
+    static public int staticInt16083;
+    static public int staticInt16084;
+    static public int staticInt16085;
+    static public int staticInt16086;
+    static public int staticInt16087;
+    static public int staticInt16088;
+    static public int staticInt16089;
+    static public int staticInt16090;
+    static public int staticInt16091;
+    static public int staticInt16092;
+    static public int staticInt16093;
+    static public int staticInt16094;
+    static public int staticInt16095;
+    static public int staticInt16096;
+    static public int staticInt16097;
+    static public int staticInt16098;
+    static public int staticInt16099;
+    static public int staticInt16100;
+    static public int staticInt16101;
+    static public int staticInt16102;
+    static public int staticInt16103;
+    static public int staticInt16104;
+    static public int staticInt16105;
+    static public int staticInt16106;
+    static public int staticInt16107;
+    static public int staticInt16108;
+    static public int staticInt16109;
+    static public int staticInt16110;
+    static public int staticInt16111;
+    static public int staticInt16112;
+    static public int staticInt16113;
+    static public int staticInt16114;
+    static public int staticInt16115;
+    static public int staticInt16116;
+    static public int staticInt16117;
+    static public int staticInt16118;
+    static public int staticInt16119;
+    static public int staticInt16120;
+    static public int staticInt16121;
+    static public int staticInt16122;
+    static public int staticInt16123;
+    static public int staticInt16124;
+    static public int staticInt16125;
+    static public int staticInt16126;
+    static public int staticInt16127;
+    static public int staticInt16128;
+    static public int staticInt16129;
+    static public int staticInt16130;
+    static public int staticInt16131;
+    static public int staticInt16132;
+    static public int staticInt16133;
+    static public int staticInt16134;
+    static public int staticInt16135;
+    static public int staticInt16136;
+    static public int staticInt16137;
+    static public int staticInt16138;
+    static public int staticInt16139;
+    static public int staticInt16140;
+    static public int staticInt16141;
+    static public int staticInt16142;
+    static public int staticInt16143;
+    static public int staticInt16144;
+    static public int staticInt16145;
+    static public int staticInt16146;
+    static public int staticInt16147;
+    static public int staticInt16148;
+    static public int staticInt16149;
+    static public int staticInt16150;
+    static public int staticInt16151;
+    static public int staticInt16152;
+    static public int staticInt16153;
+    static public int staticInt16154;
+    static public int staticInt16155;
+    static public int staticInt16156;
+    static public int staticInt16157;
+    static public int staticInt16158;
+    static public int staticInt16159;
+    static public int staticInt16160;
+    static public int staticInt16161;
+    static public int staticInt16162;
+    static public int staticInt16163;
+    static public int staticInt16164;
+    static public int staticInt16165;
+    static public int staticInt16166;
+    static public int staticInt16167;
+    static public int staticInt16168;
+    static public int staticInt16169;
+    static public int staticInt16170;
+    static public int staticInt16171;
+    static public int staticInt16172;
+    static public int staticInt16173;
+    static public int staticInt16174;
+    static public int staticInt16175;
+    static public int staticInt16176;
+    static public int staticInt16177;
+    static public int staticInt16178;
+    static public int staticInt16179;
+    static public int staticInt16180;
+    static public int staticInt16181;
+    static public int staticInt16182;
+    static public int staticInt16183;
+    static public int staticInt16184;
+    static public int staticInt16185;
+    static public int staticInt16186;
+    static public int staticInt16187;
+    static public int staticInt16188;
+    static public int staticInt16189;
+    static public int staticInt16190;
+    static public int staticInt16191;
+    static public int staticInt16192;
+    static public int staticInt16193;
+    static public int staticInt16194;
+    static public int staticInt16195;
+    static public int staticInt16196;
+    static public int staticInt16197;
+    static public int staticInt16198;
+    static public int staticInt16199;
+    static public int staticInt16200;
+    static public int staticInt16201;
+    static public int staticInt16202;
+    static public int staticInt16203;
+    static public int staticInt16204;
+    static public int staticInt16205;
+    static public int staticInt16206;
+    static public int staticInt16207;
+    static public int staticInt16208;
+    static public int staticInt16209;
+    static public int staticInt16210;
+    static public int staticInt16211;
+    static public int staticInt16212;
+    static public int staticInt16213;
+    static public int staticInt16214;
+    static public int staticInt16215;
+    static public int staticInt16216;
+    static public int staticInt16217;
+    static public int staticInt16218;
+    static public int staticInt16219;
+    static public int staticInt16220;
+    static public int staticInt16221;
+    static public int staticInt16222;
+    static public int staticInt16223;
+    static public int staticInt16224;
+    static public int staticInt16225;
+    static public int staticInt16226;
+    static public int staticInt16227;
+    static public int staticInt16228;
+    static public int staticInt16229;
+    static public int staticInt16230;
+    static public int staticInt16231;
+    static public int staticInt16232;
+    static public int staticInt16233;
+    static public int staticInt16234;
+    static public int staticInt16235;
+    static public int staticInt16236;
+    static public int staticInt16237;
+    static public int staticInt16238;
+    static public int staticInt16239;
+    static public int staticInt16240;
+    static public int staticInt16241;
+    static public int staticInt16242;
+    static public int staticInt16243;
+    static public int staticInt16244;
+    static public int staticInt16245;
+    static public int staticInt16246;
+    static public int staticInt16247;
+    static public int staticInt16248;
+    static public int staticInt16249;
+    static public int staticInt16250;
+    static public int staticInt16251;
+    static public int staticInt16252;
+    static public int staticInt16253;
+    static public int staticInt16254;
+    static public int staticInt16255;
+    static public int staticInt16256;
+    static public int staticInt16257;
+    static public int staticInt16258;
+    static public int staticInt16259;
+    static public int staticInt16260;
+    static public int staticInt16261;
+    static public int staticInt16262;
+    static public int staticInt16263;
+    static public int staticInt16264;
+    static public int staticInt16265;
+    static public int staticInt16266;
+    static public int staticInt16267;
+    static public int staticInt16268;
+    static public int staticInt16269;
+    static public int staticInt16270;
+    static public int staticInt16271;
+    static public int staticInt16272;
+    static public int staticInt16273;
+    static public int staticInt16274;
+    static public int staticInt16275;
+    static public int staticInt16276;
+    static public int staticInt16277;
+    static public int staticInt16278;
+    static public int staticInt16279;
+    static public int staticInt16280;
+    static public int staticInt16281;
+    static public int staticInt16282;
+    static public int staticInt16283;
+    static public int staticInt16284;
+    static public int staticInt16285;
+    static public int staticInt16286;
+    static public int staticInt16287;
+    static public int staticInt16288;
+    static public int staticInt16289;
+    static public int staticInt16290;
+    static public int staticInt16291;
+    static public int staticInt16292;
+    static public int staticInt16293;
+    static public int staticInt16294;
+    static public int staticInt16295;
+    static public int staticInt16296;
+    static public int staticInt16297;
+    static public int staticInt16298;
+    static public int staticInt16299;
+    static public int staticInt16300;
+    static public int staticInt16301;
+    static public int staticInt16302;
+    static public int staticInt16303;
+    static public int staticInt16304;
+    static public int staticInt16305;
+    static public int staticInt16306;
+    static public int staticInt16307;
+    static public int staticInt16308;
+    static public int staticInt16309;
+    static public int staticInt16310;
+    static public int staticInt16311;
+    static public int staticInt16312;
+    static public int staticInt16313;
+    static public int staticInt16314;
+    static public int staticInt16315;
+    static public int staticInt16316;
+    static public int staticInt16317;
+    static public int staticInt16318;
+    static public int staticInt16319;
+    static public int staticInt16320;
+    static public int staticInt16321;
+    static public int staticInt16322;
+    static public int staticInt16323;
+    static public int staticInt16324;
+    static public int staticInt16325;
+    static public int staticInt16326;
+    static public int staticInt16327;
+    static public int staticInt16328;
+    static public int staticInt16329;
+    static public int staticInt16330;
+    static public int staticInt16331;
+    static public int staticInt16332;
+    static public int staticInt16333;
+    static public int staticInt16334;
+    static public int staticInt16335;
+    static public int staticInt16336;
+    static public int staticInt16337;
+    static public int staticInt16338;
+    static public int staticInt16339;
+    static public int staticInt16340;
+    static public int staticInt16341;
+    static public int staticInt16342;
+    static public int staticInt16343;
+    static public int staticInt16344;
+    static public int staticInt16345;
+    static public int staticInt16346;
+    static public int staticInt16347;
+    static public int staticInt16348;
+    static public int staticInt16349;
+    static public int staticInt16350;
+    static public int staticInt16351;
+    static public int staticInt16352;
+    static public int staticInt16353;
+    static public int staticInt16354;
+    static public int staticInt16355;
+    static public int staticInt16356;
+    static public int staticInt16357;
+    static public int staticInt16358;
+    static public int staticInt16359;
+    static public int staticInt16360;
+    static public int staticInt16361;
+    static public int staticInt16362;
+    static public int staticInt16363;
+    static public int staticInt16364;
+    static public int staticInt16365;
+    static public int staticInt16366;
+    static public int staticInt16367;
+    static public int staticInt16368;
+    static public int staticInt16369;
+    static public int staticInt16370;
+    static public int staticInt16371;
+    static public int staticInt16372;
+    static public int staticInt16373;
+    static public int staticInt16374;
+    static public int staticInt16375;
+    static public int staticInt16376;
+    static public int staticInt16377;
+    static public int staticInt16378;
+    static public int staticInt16379;
+    static public int staticInt16380;
+    static public int staticInt16381;
+    static public int staticInt16382;
+    static public int staticInt16383;
+    static public int staticInt16384;
+    static public int staticInt16385;
+    static public int staticInt16386;
+    static public int staticInt16387;
+    static public int staticInt16388;
+    static public int staticInt16389;
+    static public int staticInt16390;
+    static public int staticInt16391;
+    static public int staticInt16392;
+    static public int staticInt16393;
+    static public int staticInt16394;
+    static public int staticInt16395;
+    static public int staticInt16396;
+    static public int staticInt16397;
+    static public int staticInt16398;
+    static public int staticInt16399;
+    static public int staticInt16400;
+    static public int staticInt16401;
+    static public int staticInt16402;
+    static public int staticInt16403;
+    static public int staticInt16404;
+    static public int staticInt16405;
+    static public int staticInt16406;
+    static public int staticInt16407;
+    static public int staticInt16408;
+    static public int staticInt16409;
+    static public int staticInt16410;
+    static public int staticInt16411;
+    static public int staticInt16412;
+    static public int staticInt16413;
+    static public int staticInt16414;
+    static public int staticInt16415;
+    static public int staticInt16416;
+    static public int staticInt16417;
+    static public int staticInt16418;
+    static public int staticInt16419;
+    static public int staticInt16420;
+    static public int staticInt16421;
+    static public int staticInt16422;
+    static public int staticInt16423;
+    static public int staticInt16424;
+    static public int staticInt16425;
+    static public int staticInt16426;
+    static public int staticInt16427;
+    static public int staticInt16428;
+    static public int staticInt16429;
+    static public int staticInt16430;
+    static public int staticInt16431;
+    static public int staticInt16432;
+    static public int staticInt16433;
+    static public int staticInt16434;
+    static public int staticInt16435;
+    static public int staticInt16436;
+    static public int staticInt16437;
+    static public int staticInt16438;
+    static public int staticInt16439;
+    static public int staticInt16440;
+    static public int staticInt16441;
+    static public int staticInt16442;
+    static public int staticInt16443;
+    static public int staticInt16444;
+    static public int staticInt16445;
+    static public int staticInt16446;
+    static public int staticInt16447;
+    static public int staticInt16448;
+    static public int staticInt16449;
+    static public int staticInt16450;
+    static public int staticInt16451;
+    static public int staticInt16452;
+    static public int staticInt16453;
+    static public int staticInt16454;
+    static public int staticInt16455;
+    static public int staticInt16456;
+    static public int staticInt16457;
+    static public int staticInt16458;
+    static public int staticInt16459;
+    static public int staticInt16460;
+    static public int staticInt16461;
+    static public int staticInt16462;
+    static public int staticInt16463;
+    static public int staticInt16464;
+    static public int staticInt16465;
+    static public int staticInt16466;
+    static public int staticInt16467;
+    static public int staticInt16468;
+    static public int staticInt16469;
+    static public int staticInt16470;
+    static public int staticInt16471;
+    static public int staticInt16472;
+    static public int staticInt16473;
+    static public int staticInt16474;
+    static public int staticInt16475;
+    static public int staticInt16476;
+    static public int staticInt16477;
+    static public int staticInt16478;
+    static public int staticInt16479;
+    static public int staticInt16480;
+    static public int staticInt16481;
+    static public int staticInt16482;
+    static public int staticInt16483;
+    static public int staticInt16484;
+    static public int staticInt16485;
+    static public int staticInt16486;
+    static public int staticInt16487;
+    static public int staticInt16488;
+    static public int staticInt16489;
+    static public int staticInt16490;
+    static public int staticInt16491;
+    static public int staticInt16492;
+    static public int staticInt16493;
+    static public int staticInt16494;
+    static public int staticInt16495;
+    static public int staticInt16496;
+    static public int staticInt16497;
+    static public int staticInt16498;
+    static public int staticInt16499;
+    static public int staticInt16500;
+    static public int staticInt16501;
+    static public int staticInt16502;
+    static public int staticInt16503;
+    static public int staticInt16504;
+    static public int staticInt16505;
+    static public int staticInt16506;
+    static public int staticInt16507;
+    static public int staticInt16508;
+    static public int staticInt16509;
+    static public int staticInt16510;
+    static public int staticInt16511;
+    static public int staticInt16512;
+    static public int staticInt16513;
+    static public int staticInt16514;
+    static public int staticInt16515;
+    static public int staticInt16516;
+    static public int staticInt16517;
+    static public int staticInt16518;
+    static public int staticInt16519;
+    static public int staticInt16520;
+    static public int staticInt16521;
+    static public int staticInt16522;
+    static public int staticInt16523;
+    static public int staticInt16524;
+    static public int staticInt16525;
+    static public int staticInt16526;
+    static public int staticInt16527;
+    static public int staticInt16528;
+    static public int staticInt16529;
+    static public int staticInt16530;
+    static public int staticInt16531;
+    static public int staticInt16532;
+    static public int staticInt16533;
+    static public int staticInt16534;
+    static public int staticInt16535;
+    static public int staticInt16536;
+    static public int staticInt16537;
+    static public int staticInt16538;
+    static public int staticInt16539;
+    static public int staticInt16540;
+    static public int staticInt16541;
+    static public int staticInt16542;
+    static public int staticInt16543;
+    static public int staticInt16544;
+    static public int staticInt16545;
+    static public int staticInt16546;
+    static public int staticInt16547;
+    static public int staticInt16548;
+    static public int staticInt16549;
+    static public int staticInt16550;
+    static public int staticInt16551;
+    static public int staticInt16552;
+    static public int staticInt16553;
+    static public int staticInt16554;
+    static public int staticInt16555;
+    static public int staticInt16556;
+    static public int staticInt16557;
+    static public int staticInt16558;
+    static public int staticInt16559;
+    static public int staticInt16560;
+    static public int staticInt16561;
+    static public int staticInt16562;
+    static public int staticInt16563;
+    static public int staticInt16564;
+    static public int staticInt16565;
+    static public int staticInt16566;
+    static public int staticInt16567;
+    static public int staticInt16568;
+    static public int staticInt16569;
+    static public int staticInt16570;
+    static public int staticInt16571;
+    static public int staticInt16572;
+    static public int staticInt16573;
+    static public int staticInt16574;
+    static public int staticInt16575;
+    static public int staticInt16576;
+    static public int staticInt16577;
+    static public int staticInt16578;
+    static public int staticInt16579;
+    static public int staticInt16580;
+    static public int staticInt16581;
+    static public int staticInt16582;
+    static public int staticInt16583;
+    static public int staticInt16584;
+    static public int staticInt16585;
+    static public int staticInt16586;
+    static public int staticInt16587;
+    static public int staticInt16588;
+    static public int staticInt16589;
+    static public int staticInt16590;
+    static public int staticInt16591;
+    static public int staticInt16592;
+    static public int staticInt16593;
+    static public int staticInt16594;
+    static public int staticInt16595;
+    static public int staticInt16596;
+    static public int staticInt16597;
+    static public int staticInt16598;
+    static public int staticInt16599;
+    static public int staticInt16600;
+    static public int staticInt16601;
+    static public int staticInt16602;
+    static public int staticInt16603;
+    static public int staticInt16604;
+    static public int staticInt16605;
+    static public int staticInt16606;
+    static public int staticInt16607;
+    static public int staticInt16608;
+    static public int staticInt16609;
+    static public int staticInt16610;
+    static public int staticInt16611;
+    static public int staticInt16612;
+    static public int staticInt16613;
+    static public int staticInt16614;
+    static public int staticInt16615;
+    static public int staticInt16616;
+    static public int staticInt16617;
+    static public int staticInt16618;
+    static public int staticInt16619;
+    static public int staticInt16620;
+    static public int staticInt16621;
+    static public int staticInt16622;
+    static public int staticInt16623;
+    static public int staticInt16624;
+    static public int staticInt16625;
+    static public int staticInt16626;
+    static public int staticInt16627;
+    static public int staticInt16628;
+    static public int staticInt16629;
+    static public int staticInt16630;
+    static public int staticInt16631;
+    static public int staticInt16632;
+    static public int staticInt16633;
+    static public int staticInt16634;
+    static public int staticInt16635;
+    static public int staticInt16636;
+    static public int staticInt16637;
+    static public int staticInt16638;
+    static public int staticInt16639;
+    static public int staticInt16640;
+    static public int staticInt16641;
+    static public int staticInt16642;
+    static public int staticInt16643;
+    static public int staticInt16644;
+    static public int staticInt16645;
+    static public int staticInt16646;
+    static public int staticInt16647;
+    static public int staticInt16648;
+    static public int staticInt16649;
+    static public int staticInt16650;
+    static public int staticInt16651;
+    static public int staticInt16652;
+    static public int staticInt16653;
+    static public int staticInt16654;
+    static public int staticInt16655;
+    static public int staticInt16656;
+    static public int staticInt16657;
+    static public int staticInt16658;
+    static public int staticInt16659;
+    static public int staticInt16660;
+    static public int staticInt16661;
+    static public int staticInt16662;
+    static public int staticInt16663;
+    static public int staticInt16664;
+    static public int staticInt16665;
+    static public int staticInt16666;
+    static public int staticInt16667;
+    static public int staticInt16668;
+    static public int staticInt16669;
+    static public int staticInt16670;
+    static public int staticInt16671;
+    static public int staticInt16672;
+    static public int staticInt16673;
+    static public int staticInt16674;
+    static public int staticInt16675;
+    static public int staticInt16676;
+    static public int staticInt16677;
+    static public int staticInt16678;
+    static public int staticInt16679;
+    static public int staticInt16680;
+    static public int staticInt16681;
+    static public int staticInt16682;
+    static public int staticInt16683;
+    static public int staticInt16684;
+    static public int staticInt16685;
+    static public int staticInt16686;
+    static public int staticInt16687;
+    static public int staticInt16688;
+    static public int staticInt16689;
+    static public int staticInt16690;
+    static public int staticInt16691;
+    static public int staticInt16692;
+    static public int staticInt16693;
+    static public int staticInt16694;
+    static public int staticInt16695;
+    static public int staticInt16696;
+    static public int staticInt16697;
+    static public int staticInt16698;
+    static public int staticInt16699;
+    static public int staticInt16700;
+    static public int staticInt16701;
+    static public int staticInt16702;
+    static public int staticInt16703;
+    static public int staticInt16704;
+    static public int staticInt16705;
+    static public int staticInt16706;
+    static public int staticInt16707;
+    static public int staticInt16708;
+    static public int staticInt16709;
+    static public int staticInt16710;
+    static public int staticInt16711;
+    static public int staticInt16712;
+    static public int staticInt16713;
+    static public int staticInt16714;
+    static public int staticInt16715;
+    static public int staticInt16716;
+    static public int staticInt16717;
+    static public int staticInt16718;
+    static public int staticInt16719;
+    static public int staticInt16720;
+    static public int staticInt16721;
+    static public int staticInt16722;
+    static public int staticInt16723;
+    static public int staticInt16724;
+    static public int staticInt16725;
+    static public int staticInt16726;
+    static public int staticInt16727;
+    static public int staticInt16728;
+    static public int staticInt16729;
+    static public int staticInt16730;
+    static public int staticInt16731;
+    static public int staticInt16732;
+    static public int staticInt16733;
+    static public int staticInt16734;
+    static public int staticInt16735;
+    static public int staticInt16736;
+    static public int staticInt16737;
+    static public int staticInt16738;
+    static public int staticInt16739;
+    static public int staticInt16740;
+    static public int staticInt16741;
+    static public int staticInt16742;
+    static public int staticInt16743;
+    static public int staticInt16744;
+    static public int staticInt16745;
+    static public int staticInt16746;
+    static public int staticInt16747;
+    static public int staticInt16748;
+    static public int staticInt16749;
+    static public int staticInt16750;
+    static public int staticInt16751;
+    static public int staticInt16752;
+    static public int staticInt16753;
+    static public int staticInt16754;
+    static public int staticInt16755;
+    static public int staticInt16756;
+    static public int staticInt16757;
+    static public int staticInt16758;
+    static public int staticInt16759;
+    static public int staticInt16760;
+    static public int staticInt16761;
+    static public int staticInt16762;
+    static public int staticInt16763;
+    static public int staticInt16764;
+    static public int staticInt16765;
+    static public int staticInt16766;
+    static public int staticInt16767;
+    static public int staticInt16768;
+    static public int staticInt16769;
+    static public int staticInt16770;
+    static public int staticInt16771;
+    static public int staticInt16772;
+    static public int staticInt16773;
+    static public int staticInt16774;
+    static public int staticInt16775;
+    static public int staticInt16776;
+    static public int staticInt16777;
+    static public int staticInt16778;
+    static public int staticInt16779;
+    static public int staticInt16780;
+    static public int staticInt16781;
+    static public int staticInt16782;
+    static public int staticInt16783;
+    static public int staticInt16784;
+    static public int staticInt16785;
+    static public int staticInt16786;
+    static public int staticInt16787;
+    static public int staticInt16788;
+    static public int staticInt16789;
+    static public int staticInt16790;
+    static public int staticInt16791;
+    static public int staticInt16792;
+    static public int staticInt16793;
+    static public int staticInt16794;
+    static public int staticInt16795;
+    static public int staticInt16796;
+    static public int staticInt16797;
+    static public int staticInt16798;
+    static public int staticInt16799;
+    static public int staticInt16800;
+    static public int staticInt16801;
+    static public int staticInt16802;
+    static public int staticInt16803;
+    static public int staticInt16804;
+    static public int staticInt16805;
+    static public int staticInt16806;
+    static public int staticInt16807;
+    static public int staticInt16808;
+    static public int staticInt16809;
+    static public int staticInt16810;
+    static public int staticInt16811;
+    static public int staticInt16812;
+    static public int staticInt16813;
+    static public int staticInt16814;
+    static public int staticInt16815;
+    static public int staticInt16816;
+    static public int staticInt16817;
+    static public int staticInt16818;
+    static public int staticInt16819;
+    static public int staticInt16820;
+    static public int staticInt16821;
+    static public int staticInt16822;
+    static public int staticInt16823;
+    static public int staticInt16824;
+    static public int staticInt16825;
+    static public int staticInt16826;
+    static public int staticInt16827;
+    static public int staticInt16828;
+    static public int staticInt16829;
+    static public int staticInt16830;
+    static public int staticInt16831;
+    static public int staticInt16832;
+    static public int staticInt16833;
+    static public int staticInt16834;
+    static public int staticInt16835;
+    static public int staticInt16836;
+    static public int staticInt16837;
+    static public int staticInt16838;
+    static public int staticInt16839;
+    static public int staticInt16840;
+    static public int staticInt16841;
+    static public int staticInt16842;
+    static public int staticInt16843;
+    static public int staticInt16844;
+    static public int staticInt16845;
+    static public int staticInt16846;
+    static public int staticInt16847;
+    static public int staticInt16848;
+    static public int staticInt16849;
+    static public int staticInt16850;
+    static public int staticInt16851;
+    static public int staticInt16852;
+    static public int staticInt16853;
+    static public int staticInt16854;
+    static public int staticInt16855;
+    static public int staticInt16856;
+    static public int staticInt16857;
+    static public int staticInt16858;
+    static public int staticInt16859;
+    static public int staticInt16860;
+    static public int staticInt16861;
+    static public int staticInt16862;
+    static public int staticInt16863;
+    static public int staticInt16864;
+    static public int staticInt16865;
+    static public int staticInt16866;
+    static public int staticInt16867;
+    static public int staticInt16868;
+    static public int staticInt16869;
+    static public int staticInt16870;
+    static public int staticInt16871;
+    static public int staticInt16872;
+    static public int staticInt16873;
+    static public int staticInt16874;
+    static public int staticInt16875;
+    static public int staticInt16876;
+    static public int staticInt16877;
+    static public int staticInt16878;
+    static public int staticInt16879;
+    static public int staticInt16880;
+    static public int staticInt16881;
+    static public int staticInt16882;
+    static public int staticInt16883;
+    static public int staticInt16884;
+    static public int staticInt16885;
+    static public int staticInt16886;
+    static public int staticInt16887;
+    static public int staticInt16888;
+    static public int staticInt16889;
+    static public int staticInt16890;
+    static public int staticInt16891;
+    static public int staticInt16892;
+    static public int staticInt16893;
+    static public int staticInt16894;
+    static public int staticInt16895;
+    static public int staticInt16896;
+    static public int staticInt16897;
+    static public int staticInt16898;
+    static public int staticInt16899;
+    static public int staticInt16900;
+    static public int staticInt16901;
+    static public int staticInt16902;
+    static public int staticInt16903;
+    static public int staticInt16904;
+    static public int staticInt16905;
+    static public int staticInt16906;
+    static public int staticInt16907;
+    static public int staticInt16908;
+    static public int staticInt16909;
+    static public int staticInt16910;
+    static public int staticInt16911;
+    static public int staticInt16912;
+    static public int staticInt16913;
+    static public int staticInt16914;
+    static public int staticInt16915;
+    static public int staticInt16916;
+    static public int staticInt16917;
+    static public int staticInt16918;
+    static public int staticInt16919;
+    static public int staticInt16920;
+    static public int staticInt16921;
+    static public int staticInt16922;
+    static public int staticInt16923;
+    static public int staticInt16924;
+    static public int staticInt16925;
+    static public int staticInt16926;
+    static public int staticInt16927;
+    static public int staticInt16928;
+    static public int staticInt16929;
+    static public int staticInt16930;
+    static public int staticInt16931;
+    static public int staticInt16932;
+    static public int staticInt16933;
+    static public int staticInt16934;
+    static public int staticInt16935;
+    static public int staticInt16936;
+    static public int staticInt16937;
+    static public int staticInt16938;
+    static public int staticInt16939;
+    static public int staticInt16940;
+    static public int staticInt16941;
+    static public int staticInt16942;
+    static public int staticInt16943;
+    static public int staticInt16944;
+    static public int staticInt16945;
+    static public int staticInt16946;
+    static public int staticInt16947;
+    static public int staticInt16948;
+    static public int staticInt16949;
+    static public int staticInt16950;
+    static public int staticInt16951;
+    static public int staticInt16952;
+    static public int staticInt16953;
+    static public int staticInt16954;
+    static public int staticInt16955;
+    static public int staticInt16956;
+    static public int staticInt16957;
+    static public int staticInt16958;
+    static public int staticInt16959;
+    static public int staticInt16960;
+    static public int staticInt16961;
+    static public int staticInt16962;
+    static public int staticInt16963;
+    static public int staticInt16964;
+    static public int staticInt16965;
+    static public int staticInt16966;
+    static public int staticInt16967;
+    static public int staticInt16968;
+    static public int staticInt16969;
+    static public int staticInt16970;
+    static public int staticInt16971;
+    static public int staticInt16972;
+    static public int staticInt16973;
+    static public int staticInt16974;
+    static public int staticInt16975;
+    static public int staticInt16976;
+    static public int staticInt16977;
+    static public int staticInt16978;
+    static public int staticInt16979;
+    static public int staticInt16980;
+    static public int staticInt16981;
+    static public int staticInt16982;
+    static public int staticInt16983;
+    static public int staticInt16984;
+    static public int staticInt16985;
+    static public int staticInt16986;
+    static public int staticInt16987;
+    static public int staticInt16988;
+    static public int staticInt16989;
+    static public int staticInt16990;
+    static public int staticInt16991;
+    static public int staticInt16992;
+    static public int staticInt16993;
+    static public int staticInt16994;
+    static public int staticInt16995;
+    static public int staticInt16996;
+    static public int staticInt16997;
+    static public int staticInt16998;
+    static public int staticInt16999;
+    static public int staticInt17000;
+    static public int staticInt17001;
+    static public int staticInt17002;
+    static public int staticInt17003;
+    static public int staticInt17004;
+    static public int staticInt17005;
+    static public int staticInt17006;
+    static public int staticInt17007;
+    static public int staticInt17008;
+    static public int staticInt17009;
+    static public int staticInt17010;
+    static public int staticInt17011;
+    static public int staticInt17012;
+    static public int staticInt17013;
+    static public int staticInt17014;
+    static public int staticInt17015;
+    static public int staticInt17016;
+    static public int staticInt17017;
+    static public int staticInt17018;
+    static public int staticInt17019;
+    static public int staticInt17020;
+    static public int staticInt17021;
+    static public int staticInt17022;
+    static public int staticInt17023;
+    static public int staticInt17024;
+    static public int staticInt17025;
+    static public int staticInt17026;
+    static public int staticInt17027;
+    static public int staticInt17028;
+    static public int staticInt17029;
+    static public int staticInt17030;
+    static public int staticInt17031;
+    static public int staticInt17032;
+    static public int staticInt17033;
+    static public int staticInt17034;
+    static public int staticInt17035;
+    static public int staticInt17036;
+    static public int staticInt17037;
+    static public int staticInt17038;
+    static public int staticInt17039;
+    static public int staticInt17040;
+    static public int staticInt17041;
+    static public int staticInt17042;
+    static public int staticInt17043;
+    static public int staticInt17044;
+    static public int staticInt17045;
+    static public int staticInt17046;
+    static public int staticInt17047;
+    static public int staticInt17048;
+    static public int staticInt17049;
+    static public int staticInt17050;
+    static public int staticInt17051;
+    static public int staticInt17052;
+    static public int staticInt17053;
+    static public int staticInt17054;
+    static public int staticInt17055;
+    static public int staticInt17056;
+    static public int staticInt17057;
+    static public int staticInt17058;
+    static public int staticInt17059;
+    static public int staticInt17060;
+    static public int staticInt17061;
+    static public int staticInt17062;
+    static public int staticInt17063;
+    static public int staticInt17064;
+    static public int staticInt17065;
+    static public int staticInt17066;
+    static public int staticInt17067;
+    static public int staticInt17068;
+    static public int staticInt17069;
+    static public int staticInt17070;
+    static public int staticInt17071;
+    static public int staticInt17072;
+    static public int staticInt17073;
+    static public int staticInt17074;
+    static public int staticInt17075;
+    static public int staticInt17076;
+    static public int staticInt17077;
+    static public int staticInt17078;
+    static public int staticInt17079;
+    static public int staticInt17080;
+    static public int staticInt17081;
+    static public int staticInt17082;
+    static public int staticInt17083;
+    static public int staticInt17084;
+    static public int staticInt17085;
+    static public int staticInt17086;
+    static public int staticInt17087;
+    static public int staticInt17088;
+    static public int staticInt17089;
+    static public int staticInt17090;
+    static public int staticInt17091;
+    static public int staticInt17092;
+    static public int staticInt17093;
+    static public int staticInt17094;
+    static public int staticInt17095;
+    static public int staticInt17096;
+    static public int staticInt17097;
+    static public int staticInt17098;
+    static public int staticInt17099;
+    static public int staticInt17100;
+    static public int staticInt17101;
+    static public int staticInt17102;
+    static public int staticInt17103;
+    static public int staticInt17104;
+    static public int staticInt17105;
+    static public int staticInt17106;
+    static public int staticInt17107;
+    static public int staticInt17108;
+    static public int staticInt17109;
+    static public int staticInt17110;
+    static public int staticInt17111;
+    static public int staticInt17112;
+    static public int staticInt17113;
+    static public int staticInt17114;
+    static public int staticInt17115;
+    static public int staticInt17116;
+    static public int staticInt17117;
+    static public int staticInt17118;
+    static public int staticInt17119;
+    static public int staticInt17120;
+    static public int staticInt17121;
+    static public int staticInt17122;
+    static public int staticInt17123;
+    static public int staticInt17124;
+    static public int staticInt17125;
+    static public int staticInt17126;
+    static public int staticInt17127;
+    static public int staticInt17128;
+    static public int staticInt17129;
+    static public int staticInt17130;
+    static public int staticInt17131;
+    static public int staticInt17132;
+    static public int staticInt17133;
+    static public int staticInt17134;
+    static public int staticInt17135;
+    static public int staticInt17136;
+    static public int staticInt17137;
+    static public int staticInt17138;
+    static public int staticInt17139;
+    static public int staticInt17140;
+    static public int staticInt17141;
+    static public int staticInt17142;
+    static public int staticInt17143;
+    static public int staticInt17144;
+    static public int staticInt17145;
+    static public int staticInt17146;
+    static public int staticInt17147;
+    static public int staticInt17148;
+    static public int staticInt17149;
+    static public int staticInt17150;
+    static public int staticInt17151;
+    static public int staticInt17152;
+    static public int staticInt17153;
+    static public int staticInt17154;
+    static public int staticInt17155;
+    static public int staticInt17156;
+    static public int staticInt17157;
+    static public int staticInt17158;
+    static public int staticInt17159;
+    static public int staticInt17160;
+    static public int staticInt17161;
+    static public int staticInt17162;
+    static public int staticInt17163;
+    static public int staticInt17164;
+    static public int staticInt17165;
+    static public int staticInt17166;
+    static public int staticInt17167;
+    static public int staticInt17168;
+    static public int staticInt17169;
+    static public int staticInt17170;
+    static public int staticInt17171;
+    static public int staticInt17172;
+    static public int staticInt17173;
+    static public int staticInt17174;
+    static public int staticInt17175;
+    static public int staticInt17176;
+    static public int staticInt17177;
+    static public int staticInt17178;
+    static public int staticInt17179;
+    static public int staticInt17180;
+    static public int staticInt17181;
+    static public int staticInt17182;
+    static public int staticInt17183;
+    static public int staticInt17184;
+    static public int staticInt17185;
+    static public int staticInt17186;
+    static public int staticInt17187;
+    static public int staticInt17188;
+    static public int staticInt17189;
+    static public int staticInt17190;
+    static public int staticInt17191;
+    static public int staticInt17192;
+    static public int staticInt17193;
+    static public int staticInt17194;
+    static public int staticInt17195;
+    static public int staticInt17196;
+    static public int staticInt17197;
+    static public int staticInt17198;
+    static public int staticInt17199;
+    static public int staticInt17200;
+    static public int staticInt17201;
+    static public int staticInt17202;
+    static public int staticInt17203;
+    static public int staticInt17204;
+    static public int staticInt17205;
+    static public int staticInt17206;
+    static public int staticInt17207;
+    static public int staticInt17208;
+    static public int staticInt17209;
+    static public int staticInt17210;
+    static public int staticInt17211;
+    static public int staticInt17212;
+    static public int staticInt17213;
+    static public int staticInt17214;
+    static public int staticInt17215;
+    static public int staticInt17216;
+    static public int staticInt17217;
+    static public int staticInt17218;
+    static public int staticInt17219;
+    static public int staticInt17220;
+    static public int staticInt17221;
+    static public int staticInt17222;
+    static public int staticInt17223;
+    static public int staticInt17224;
+    static public int staticInt17225;
+    static public int staticInt17226;
+    static public int staticInt17227;
+    static public int staticInt17228;
+    static public int staticInt17229;
+    static public int staticInt17230;
+    static public int staticInt17231;
+    static public int staticInt17232;
+    static public int staticInt17233;
+    static public int staticInt17234;
+    static public int staticInt17235;
+    static public int staticInt17236;
+    static public int staticInt17237;
+    static public int staticInt17238;
+    static public int staticInt17239;
+    static public int staticInt17240;
+    static public int staticInt17241;
+    static public int staticInt17242;
+    static public int staticInt17243;
+    static public int staticInt17244;
+    static public int staticInt17245;
+    static public int staticInt17246;
+    static public int staticInt17247;
+    static public int staticInt17248;
+    static public int staticInt17249;
+    static public int staticInt17250;
+    static public int staticInt17251;
+    static public int staticInt17252;
+    static public int staticInt17253;
+    static public int staticInt17254;
+    static public int staticInt17255;
+    static public int staticInt17256;
+    static public int staticInt17257;
+    static public int staticInt17258;
+    static public int staticInt17259;
+    static public int staticInt17260;
+    static public int staticInt17261;
+    static public int staticInt17262;
+    static public int staticInt17263;
+    static public int staticInt17264;
+    static public int staticInt17265;
+    static public int staticInt17266;
+    static public int staticInt17267;
+    static public int staticInt17268;
+    static public int staticInt17269;
+    static public int staticInt17270;
+    static public int staticInt17271;
+    static public int staticInt17272;
+    static public int staticInt17273;
+    static public int staticInt17274;
+    static public int staticInt17275;
+    static public int staticInt17276;
+    static public int staticInt17277;
+    static public int staticInt17278;
+    static public int staticInt17279;
+    static public int staticInt17280;
+    static public int staticInt17281;
+    static public int staticInt17282;
+    static public int staticInt17283;
+    static public int staticInt17284;
+    static public int staticInt17285;
+    static public int staticInt17286;
+    static public int staticInt17287;
+    static public int staticInt17288;
+    static public int staticInt17289;
+    static public int staticInt17290;
+    static public int staticInt17291;
+    static public int staticInt17292;
+    static public int staticInt17293;
+    static public int staticInt17294;
+    static public int staticInt17295;
+    static public int staticInt17296;
+    static public int staticInt17297;
+    static public int staticInt17298;
+    static public int staticInt17299;
+    static public int staticInt17300;
+    static public int staticInt17301;
+    static public int staticInt17302;
+    static public int staticInt17303;
+    static public int staticInt17304;
+    static public int staticInt17305;
+    static public int staticInt17306;
+    static public int staticInt17307;
+    static public int staticInt17308;
+    static public int staticInt17309;
+    static public int staticInt17310;
+    static public int staticInt17311;
+    static public int staticInt17312;
+    static public int staticInt17313;
+    static public int staticInt17314;
+    static public int staticInt17315;
+    static public int staticInt17316;
+    static public int staticInt17317;
+    static public int staticInt17318;
+    static public int staticInt17319;
+    static public int staticInt17320;
+    static public int staticInt17321;
+    static public int staticInt17322;
+    static public int staticInt17323;
+    static public int staticInt17324;
+    static public int staticInt17325;
+    static public int staticInt17326;
+    static public int staticInt17327;
+    static public int staticInt17328;
+    static public int staticInt17329;
+    static public int staticInt17330;
+    static public int staticInt17331;
+    static public int staticInt17332;
+    static public int staticInt17333;
+    static public int staticInt17334;
+    static public int staticInt17335;
+    static public int staticInt17336;
+    static public int staticInt17337;
+    static public int staticInt17338;
+    static public int staticInt17339;
+    static public int staticInt17340;
+    static public int staticInt17341;
+    static public int staticInt17342;
+    static public int staticInt17343;
+    static public int staticInt17344;
+    static public int staticInt17345;
+    static public int staticInt17346;
+    static public int staticInt17347;
+    static public int staticInt17348;
+    static public int staticInt17349;
+    static public int staticInt17350;
+    static public int staticInt17351;
+    static public int staticInt17352;
+    static public int staticInt17353;
+    static public int staticInt17354;
+    static public int staticInt17355;
+    static public int staticInt17356;
+    static public int staticInt17357;
+    static public int staticInt17358;
+    static public int staticInt17359;
+    static public int staticInt17360;
+    static public int staticInt17361;
+    static public int staticInt17362;
+    static public int staticInt17363;
+    static public int staticInt17364;
+    static public int staticInt17365;
+    static public int staticInt17366;
+    static public int staticInt17367;
+    static public int staticInt17368;
+    static public int staticInt17369;
+    static public int staticInt17370;
+    static public int staticInt17371;
+    static public int staticInt17372;
+    static public int staticInt17373;
+    static public int staticInt17374;
+    static public int staticInt17375;
+    static public int staticInt17376;
+    static public int staticInt17377;
+    static public int staticInt17378;
+    static public int staticInt17379;
+    static public int staticInt17380;
+    static public int staticInt17381;
+    static public int staticInt17382;
+    static public int staticInt17383;
+    static public int staticInt17384;
+    static public int staticInt17385;
+    static public int staticInt17386;
+    static public int staticInt17387;
+    static public int staticInt17388;
+    static public int staticInt17389;
+    static public int staticInt17390;
+    static public int staticInt17391;
+    static public int staticInt17392;
+    static public int staticInt17393;
+    static public int staticInt17394;
+    static public int staticInt17395;
+    static public int staticInt17396;
+    static public int staticInt17397;
+    static public int staticInt17398;
+    static public int staticInt17399;
+    static public int staticInt17400;
+    static public int staticInt17401;
+    static public int staticInt17402;
+    static public int staticInt17403;
+    static public int staticInt17404;
+    static public int staticInt17405;
+    static public int staticInt17406;
+    static public int staticInt17407;
+    static public int staticInt17408;
+    static public int staticInt17409;
+    static public int staticInt17410;
+    static public int staticInt17411;
+    static public int staticInt17412;
+    static public int staticInt17413;
+    static public int staticInt17414;
+    static public int staticInt17415;
+    static public int staticInt17416;
+    static public int staticInt17417;
+    static public int staticInt17418;
+    static public int staticInt17419;
+    static public int staticInt17420;
+    static public int staticInt17421;
+    static public int staticInt17422;
+    static public int staticInt17423;
+    static public int staticInt17424;
+    static public int staticInt17425;
+    static public int staticInt17426;
+    static public int staticInt17427;
+    static public int staticInt17428;
+    static public int staticInt17429;
+    static public int staticInt17430;
+    static public int staticInt17431;
+    static public int staticInt17432;
+    static public int staticInt17433;
+    static public int staticInt17434;
+    static public int staticInt17435;
+    static public int staticInt17436;
+    static public int staticInt17437;
+    static public int staticInt17438;
+    static public int staticInt17439;
+    static public int staticInt17440;
+    static public int staticInt17441;
+    static public int staticInt17442;
+    static public int staticInt17443;
+    static public int staticInt17444;
+    static public int staticInt17445;
+    static public int staticInt17446;
+    static public int staticInt17447;
+    static public int staticInt17448;
+    static public int staticInt17449;
+    static public int staticInt17450;
+    static public int staticInt17451;
+    static public int staticInt17452;
+    static public int staticInt17453;
+    static public int staticInt17454;
+    static public int staticInt17455;
+    static public int staticInt17456;
+    static public int staticInt17457;
+    static public int staticInt17458;
+    static public int staticInt17459;
+    static public int staticInt17460;
+    static public int staticInt17461;
+    static public int staticInt17462;
+    static public int staticInt17463;
+    static public int staticInt17464;
+    static public int staticInt17465;
+    static public int staticInt17466;
+    static public int staticInt17467;
+    static public int staticInt17468;
+    static public int staticInt17469;
+    static public int staticInt17470;
+    static public int staticInt17471;
+    static public int staticInt17472;
+    static public int staticInt17473;
+    static public int staticInt17474;
+    static public int staticInt17475;
+    static public int staticInt17476;
+    static public int staticInt17477;
+    static public int staticInt17478;
+    static public int staticInt17479;
+    static public int staticInt17480;
+    static public int staticInt17481;
+    static public int staticInt17482;
+    static public int staticInt17483;
+    static public int staticInt17484;
+    static public int staticInt17485;
+    static public int staticInt17486;
+    static public int staticInt17487;
+    static public int staticInt17488;
+    static public int staticInt17489;
+    static public int staticInt17490;
+    static public int staticInt17491;
+    static public int staticInt17492;
+    static public int staticInt17493;
+    static public int staticInt17494;
+    static public int staticInt17495;
+    static public int staticInt17496;
+    static public int staticInt17497;
+    static public int staticInt17498;
+    static public int staticInt17499;
+    static public int staticInt17500;
+    static public int staticInt17501;
+    static public int staticInt17502;
+    static public int staticInt17503;
+    static public int staticInt17504;
+    static public int staticInt17505;
+    static public int staticInt17506;
+    static public int staticInt17507;
+    static public int staticInt17508;
+    static public int staticInt17509;
+    static public int staticInt17510;
+    static public int staticInt17511;
+    static public int staticInt17512;
+    static public int staticInt17513;
+    static public int staticInt17514;
+    static public int staticInt17515;
+    static public int staticInt17516;
+    static public int staticInt17517;
+    static public int staticInt17518;
+    static public int staticInt17519;
+    static public int staticInt17520;
+    static public int staticInt17521;
+    static public int staticInt17522;
+    static public int staticInt17523;
+    static public int staticInt17524;
+    static public int staticInt17525;
+    static public int staticInt17526;
+    static public int staticInt17527;
+    static public int staticInt17528;
+    static public int staticInt17529;
+    static public int staticInt17530;
+    static public int staticInt17531;
+    static public int staticInt17532;
+    static public int staticInt17533;
+    static public int staticInt17534;
+    static public int staticInt17535;
+    static public int staticInt17536;
+    static public int staticInt17537;
+    static public int staticInt17538;
+    static public int staticInt17539;
+    static public int staticInt17540;
+    static public int staticInt17541;
+    static public int staticInt17542;
+    static public int staticInt17543;
+    static public int staticInt17544;
+    static public int staticInt17545;
+    static public int staticInt17546;
+    static public int staticInt17547;
+    static public int staticInt17548;
+    static public int staticInt17549;
+    static public int staticInt17550;
+    static public int staticInt17551;
+    static public int staticInt17552;
+    static public int staticInt17553;
+    static public int staticInt17554;
+    static public int staticInt17555;
+    static public int staticInt17556;
+    static public int staticInt17557;
+    static public int staticInt17558;
+    static public int staticInt17559;
+    static public int staticInt17560;
+    static public int staticInt17561;
+    static public int staticInt17562;
+    static public int staticInt17563;
+    static public int staticInt17564;
+    static public int staticInt17565;
+    static public int staticInt17566;
+    static public int staticInt17567;
+    static public int staticInt17568;
+    static public int staticInt17569;
+    static public int staticInt17570;
+    static public int staticInt17571;
+    static public int staticInt17572;
+    static public int staticInt17573;
+    static public int staticInt17574;
+    static public int staticInt17575;
+    static public int staticInt17576;
+    static public int staticInt17577;
+    static public int staticInt17578;
+    static public int staticInt17579;
+    static public int staticInt17580;
+    static public int staticInt17581;
+    static public int staticInt17582;
+    static public int staticInt17583;
+    static public int staticInt17584;
+    static public int staticInt17585;
+    static public int staticInt17586;
+    static public int staticInt17587;
+    static public int staticInt17588;
+    static public int staticInt17589;
+    static public int staticInt17590;
+    static public int staticInt17591;
+    static public int staticInt17592;
+    static public int staticInt17593;
+    static public int staticInt17594;
+    static public int staticInt17595;
+    static public int staticInt17596;
+    static public int staticInt17597;
+    static public int staticInt17598;
+    static public int staticInt17599;
+    static public int staticInt17600;
+    static public int staticInt17601;
+    static public int staticInt17602;
+    static public int staticInt17603;
+    static public int staticInt17604;
+    static public int staticInt17605;
+    static public int staticInt17606;
+    static public int staticInt17607;
+    static public int staticInt17608;
+    static public int staticInt17609;
+    static public int staticInt17610;
+    static public int staticInt17611;
+    static public int staticInt17612;
+    static public int staticInt17613;
+    static public int staticInt17614;
+    static public int staticInt17615;
+    static public int staticInt17616;
+    static public int staticInt17617;
+    static public int staticInt17618;
+    static public int staticInt17619;
+    static public int staticInt17620;
+    static public int staticInt17621;
+    static public int staticInt17622;
+    static public int staticInt17623;
+    static public int staticInt17624;
+    static public int staticInt17625;
+    static public int staticInt17626;
+    static public int staticInt17627;
+    static public int staticInt17628;
+    static public int staticInt17629;
+    static public int staticInt17630;
+    static public int staticInt17631;
+    static public int staticInt17632;
+    static public int staticInt17633;
+    static public int staticInt17634;
+    static public int staticInt17635;
+    static public int staticInt17636;
+    static public int staticInt17637;
+    static public int staticInt17638;
+    static public int staticInt17639;
+    static public int staticInt17640;
+    static public int staticInt17641;
+    static public int staticInt17642;
+    static public int staticInt17643;
+    static public int staticInt17644;
+    static public int staticInt17645;
+    static public int staticInt17646;
+    static public int staticInt17647;
+    static public int staticInt17648;
+    static public int staticInt17649;
+    static public int staticInt17650;
+    static public int staticInt17651;
+    static public int staticInt17652;
+    static public int staticInt17653;
+    static public int staticInt17654;
+    static public int staticInt17655;
+    static public int staticInt17656;
+    static public int staticInt17657;
+    static public int staticInt17658;
+    static public int staticInt17659;
+    static public int staticInt17660;
+    static public int staticInt17661;
+    static public int staticInt17662;
+    static public int staticInt17663;
+    static public int staticInt17664;
+    static public int staticInt17665;
+    static public int staticInt17666;
+    static public int staticInt17667;
+    static public int staticInt17668;
+    static public int staticInt17669;
+    static public int staticInt17670;
+    static public int staticInt17671;
+    static public int staticInt17672;
+    static public int staticInt17673;
+    static public int staticInt17674;
+    static public int staticInt17675;
+    static public int staticInt17676;
+    static public int staticInt17677;
+    static public int staticInt17678;
+    static public int staticInt17679;
+    static public int staticInt17680;
+    static public int staticInt17681;
+    static public int staticInt17682;
+    static public int staticInt17683;
+    static public int staticInt17684;
+    static public int staticInt17685;
+    static public int staticInt17686;
+    static public int staticInt17687;
+    static public int staticInt17688;
+    static public int staticInt17689;
+    static public int staticInt17690;
+    static public int staticInt17691;
+    static public int staticInt17692;
+    static public int staticInt17693;
+    static public int staticInt17694;
+    static public int staticInt17695;
+    static public int staticInt17696;
+    static public int staticInt17697;
+    static public int staticInt17698;
+    static public int staticInt17699;
+    static public int staticInt17700;
+    static public int staticInt17701;
+    static public int staticInt17702;
+    static public int staticInt17703;
+    static public int staticInt17704;
+    static public int staticInt17705;
+    static public int staticInt17706;
+    static public int staticInt17707;
+    static public int staticInt17708;
+    static public int staticInt17709;
+    static public int staticInt17710;
+    static public int staticInt17711;
+    static public int staticInt17712;
+    static public int staticInt17713;
+    static public int staticInt17714;
+    static public int staticInt17715;
+    static public int staticInt17716;
+    static public int staticInt17717;
+    static public int staticInt17718;
+    static public int staticInt17719;
+    static public int staticInt17720;
+    static public int staticInt17721;
+    static public int staticInt17722;
+    static public int staticInt17723;
+    static public int staticInt17724;
+    static public int staticInt17725;
+    static public int staticInt17726;
+    static public int staticInt17727;
+    static public int staticInt17728;
+    static public int staticInt17729;
+    static public int staticInt17730;
+    static public int staticInt17731;
+    static public int staticInt17732;
+    static public int staticInt17733;
+    static public int staticInt17734;
+    static public int staticInt17735;
+    static public int staticInt17736;
+    static public int staticInt17737;
+    static public int staticInt17738;
+    static public int staticInt17739;
+    static public int staticInt17740;
+    static public int staticInt17741;
+    static public int staticInt17742;
+    static public int staticInt17743;
+    static public int staticInt17744;
+    static public int staticInt17745;
+    static public int staticInt17746;
+    static public int staticInt17747;
+    static public int staticInt17748;
+    static public int staticInt17749;
+    static public int staticInt17750;
+    static public int staticInt17751;
+    static public int staticInt17752;
+    static public int staticInt17753;
+    static public int staticInt17754;
+    static public int staticInt17755;
+    static public int staticInt17756;
+    static public int staticInt17757;
+    static public int staticInt17758;
+    static public int staticInt17759;
+    static public int staticInt17760;
+    static public int staticInt17761;
+    static public int staticInt17762;
+    static public int staticInt17763;
+    static public int staticInt17764;
+    static public int staticInt17765;
+    static public int staticInt17766;
+    static public int staticInt17767;
+    static public int staticInt17768;
+    static public int staticInt17769;
+    static public int staticInt17770;
+    static public int staticInt17771;
+    static public int staticInt17772;
+    static public int staticInt17773;
+    static public int staticInt17774;
+    static public int staticInt17775;
+    static public int staticInt17776;
+    static public int staticInt17777;
+    static public int staticInt17778;
+    static public int staticInt17779;
+    static public int staticInt17780;
+    static public int staticInt17781;
+    static public int staticInt17782;
+    static public int staticInt17783;
+    static public int staticInt17784;
+    static public int staticInt17785;
+    static public int staticInt17786;
+    static public int staticInt17787;
+    static public int staticInt17788;
+    static public int staticInt17789;
+    static public int staticInt17790;
+    static public int staticInt17791;
+    static public int staticInt17792;
+    static public int staticInt17793;
+    static public int staticInt17794;
+    static public int staticInt17795;
+    static public int staticInt17796;
+    static public int staticInt17797;
+    static public int staticInt17798;
+    static public int staticInt17799;
+    static public int staticInt17800;
+    static public int staticInt17801;
+    static public int staticInt17802;
+    static public int staticInt17803;
+    static public int staticInt17804;
+    static public int staticInt17805;
+    static public int staticInt17806;
+    static public int staticInt17807;
+    static public int staticInt17808;
+    static public int staticInt17809;
+    static public int staticInt17810;
+    static public int staticInt17811;
+    static public int staticInt17812;
+    static public int staticInt17813;
+    static public int staticInt17814;
+    static public int staticInt17815;
+    static public int staticInt17816;
+    static public int staticInt17817;
+    static public int staticInt17818;
+    static public int staticInt17819;
+    static public int staticInt17820;
+    static public int staticInt17821;
+    static public int staticInt17822;
+    static public int staticInt17823;
+    static public int staticInt17824;
+    static public int staticInt17825;
+    static public int staticInt17826;
+    static public int staticInt17827;
+    static public int staticInt17828;
+    static public int staticInt17829;
+    static public int staticInt17830;
+    static public int staticInt17831;
+    static public int staticInt17832;
+    static public int staticInt17833;
+    static public int staticInt17834;
+    static public int staticInt17835;
+    static public int staticInt17836;
+    static public int staticInt17837;
+    static public int staticInt17838;
+    static public int staticInt17839;
+    static public int staticInt17840;
+    static public int staticInt17841;
+    static public int staticInt17842;
+    static public int staticInt17843;
+    static public int staticInt17844;
+    static public int staticInt17845;
+    static public int staticInt17846;
+    static public int staticInt17847;
+    static public int staticInt17848;
+    static public int staticInt17849;
+    static public int staticInt17850;
+    static public int staticInt17851;
+    static public int staticInt17852;
+    static public int staticInt17853;
+    static public int staticInt17854;
+    static public int staticInt17855;
+    static public int staticInt17856;
+    static public int staticInt17857;
+    static public int staticInt17858;
+    static public int staticInt17859;
+    static public int staticInt17860;
+    static public int staticInt17861;
+    static public int staticInt17862;
+    static public int staticInt17863;
+    static public int staticInt17864;
+    static public int staticInt17865;
+    static public int staticInt17866;
+    static public int staticInt17867;
+    static public int staticInt17868;
+    static public int staticInt17869;
+    static public int staticInt17870;
+    static public int staticInt17871;
+    static public int staticInt17872;
+    static public int staticInt17873;
+    static public int staticInt17874;
+    static public int staticInt17875;
+    static public int staticInt17876;
+    static public int staticInt17877;
+    static public int staticInt17878;
+    static public int staticInt17879;
+    static public int staticInt17880;
+    static public int staticInt17881;
+    static public int staticInt17882;
+    static public int staticInt17883;
+    static public int staticInt17884;
+    static public int staticInt17885;
+    static public int staticInt17886;
+    static public int staticInt17887;
+    static public int staticInt17888;
+    static public int staticInt17889;
+    static public int staticInt17890;
+    static public int staticInt17891;
+    static public int staticInt17892;
+    static public int staticInt17893;
+    static public int staticInt17894;
+    static public int staticInt17895;
+    static public int staticInt17896;
+    static public int staticInt17897;
+    static public int staticInt17898;
+    static public int staticInt17899;
+    static public int staticInt17900;
+    static public int staticInt17901;
+    static public int staticInt17902;
+    static public int staticInt17903;
+    static public int staticInt17904;
+    static public int staticInt17905;
+    static public int staticInt17906;
+    static public int staticInt17907;
+    static public int staticInt17908;
+    static public int staticInt17909;
+    static public int staticInt17910;
+    static public int staticInt17911;
+    static public int staticInt17912;
+    static public int staticInt17913;
+    static public int staticInt17914;
+    static public int staticInt17915;
+    static public int staticInt17916;
+    static public int staticInt17917;
+    static public int staticInt17918;
+    static public int staticInt17919;
+    static public int staticInt17920;
+    static public int staticInt17921;
+    static public int staticInt17922;
+    static public int staticInt17923;
+    static public int staticInt17924;
+    static public int staticInt17925;
+    static public int staticInt17926;
+    static public int staticInt17927;
+    static public int staticInt17928;
+    static public int staticInt17929;
+    static public int staticInt17930;
+    static public int staticInt17931;
+    static public int staticInt17932;
+    static public int staticInt17933;
+    static public int staticInt17934;
+    static public int staticInt17935;
+    static public int staticInt17936;
+    static public int staticInt17937;
+    static public int staticInt17938;
+    static public int staticInt17939;
+    static public int staticInt17940;
+    static public int staticInt17941;
+    static public int staticInt17942;
+    static public int staticInt17943;
+    static public int staticInt17944;
+    static public int staticInt17945;
+    static public int staticInt17946;
+    static public int staticInt17947;
+    static public int staticInt17948;
+    static public int staticInt17949;
+    static public int staticInt17950;
+    static public int staticInt17951;
+    static public int staticInt17952;
+    static public int staticInt17953;
+    static public int staticInt17954;
+    static public int staticInt17955;
+    static public int staticInt17956;
+    static public int staticInt17957;
+    static public int staticInt17958;
+    static public int staticInt17959;
+    static public int staticInt17960;
+    static public int staticInt17961;
+    static public int staticInt17962;
+    static public int staticInt17963;
+    static public int staticInt17964;
+    static public int staticInt17965;
+    static public int staticInt17966;
+    static public int staticInt17967;
+    static public int staticInt17968;
+    static public int staticInt17969;
+    static public int staticInt17970;
+    static public int staticInt17971;
+    static public int staticInt17972;
+    static public int staticInt17973;
+    static public int staticInt17974;
+    static public int staticInt17975;
+    static public int staticInt17976;
+    static public int staticInt17977;
+    static public int staticInt17978;
+    static public int staticInt17979;
+    static public int staticInt17980;
+    static public int staticInt17981;
+    static public int staticInt17982;
+    static public int staticInt17983;
+    static public int staticInt17984;
+    static public int staticInt17985;
+    static public int staticInt17986;
+    static public int staticInt17987;
+    static public int staticInt17988;
+    static public int staticInt17989;
+    static public int staticInt17990;
+    static public int staticInt17991;
+    static public int staticInt17992;
+    static public int staticInt17993;
+    static public int staticInt17994;
+    static public int staticInt17995;
+    static public int staticInt17996;
+    static public int staticInt17997;
+    static public int staticInt17998;
+    static public int staticInt17999;
+    static public int staticInt18000;
+    static public int staticInt18001;
+    static public int staticInt18002;
+    static public int staticInt18003;
+    static public int staticInt18004;
+    static public int staticInt18005;
+    static public int staticInt18006;
+    static public int staticInt18007;
+    static public int staticInt18008;
+    static public int staticInt18009;
+    static public int staticInt18010;
+    static public int staticInt18011;
+    static public int staticInt18012;
+    static public int staticInt18013;
+    static public int staticInt18014;
+    static public int staticInt18015;
+    static public int staticInt18016;
+    static public int staticInt18017;
+    static public int staticInt18018;
+    static public int staticInt18019;
+    static public int staticInt18020;
+    static public int staticInt18021;
+    static public int staticInt18022;
+    static public int staticInt18023;
+    static public int staticInt18024;
+    static public int staticInt18025;
+    static public int staticInt18026;
+    static public int staticInt18027;
+    static public int staticInt18028;
+    static public int staticInt18029;
+    static public int staticInt18030;
+    static public int staticInt18031;
+    static public int staticInt18032;
+    static public int staticInt18033;
+    static public int staticInt18034;
+    static public int staticInt18035;
+    static public int staticInt18036;
+    static public int staticInt18037;
+    static public int staticInt18038;
+    static public int staticInt18039;
+    static public int staticInt18040;
+    static public int staticInt18041;
+    static public int staticInt18042;
+    static public int staticInt18043;
+    static public int staticInt18044;
+    static public int staticInt18045;
+    static public int staticInt18046;
+    static public int staticInt18047;
+    static public int staticInt18048;
+    static public int staticInt18049;
+    static public int staticInt18050;
+    static public int staticInt18051;
+    static public int staticInt18052;
+    static public int staticInt18053;
+    static public int staticInt18054;
+    static public int staticInt18055;
+    static public int staticInt18056;
+    static public int staticInt18057;
+    static public int staticInt18058;
+    static public int staticInt18059;
+    static public int staticInt18060;
+    static public int staticInt18061;
+    static public int staticInt18062;
+    static public int staticInt18063;
+    static public int staticInt18064;
+    static public int staticInt18065;
+    static public int staticInt18066;
+    static public int staticInt18067;
+    static public int staticInt18068;
+    static public int staticInt18069;
+    static public int staticInt18070;
+    static public int staticInt18071;
+    static public int staticInt18072;
+    static public int staticInt18073;
+    static public int staticInt18074;
+    static public int staticInt18075;
+    static public int staticInt18076;
+    static public int staticInt18077;
+    static public int staticInt18078;
+    static public int staticInt18079;
+    static public int staticInt18080;
+    static public int staticInt18081;
+    static public int staticInt18082;
+    static public int staticInt18083;
+    static public int staticInt18084;
+    static public int staticInt18085;
+    static public int staticInt18086;
+    static public int staticInt18087;
+    static public int staticInt18088;
+    static public int staticInt18089;
+    static public int staticInt18090;
+    static public int staticInt18091;
+    static public int staticInt18092;
+    static public int staticInt18093;
+    static public int staticInt18094;
+    static public int staticInt18095;
+    static public int staticInt18096;
+    static public int staticInt18097;
+    static public int staticInt18098;
+    static public int staticInt18099;
+    static public int staticInt18100;
+    static public int staticInt18101;
+    static public int staticInt18102;
+    static public int staticInt18103;
+    static public int staticInt18104;
+    static public int staticInt18105;
+    static public int staticInt18106;
+    static public int staticInt18107;
+    static public int staticInt18108;
+    static public int staticInt18109;
+    static public int staticInt18110;
+    static public int staticInt18111;
+    static public int staticInt18112;
+    static public int staticInt18113;
+    static public int staticInt18114;
+    static public int staticInt18115;
+    static public int staticInt18116;
+    static public int staticInt18117;
+    static public int staticInt18118;
+    static public int staticInt18119;
+    static public int staticInt18120;
+    static public int staticInt18121;
+    static public int staticInt18122;
+    static public int staticInt18123;
+    static public int staticInt18124;
+    static public int staticInt18125;
+    static public int staticInt18126;
+    static public int staticInt18127;
+    static public int staticInt18128;
+    static public int staticInt18129;
+    static public int staticInt18130;
+    static public int staticInt18131;
+    static public int staticInt18132;
+    static public int staticInt18133;
+    static public int staticInt18134;
+    static public int staticInt18135;
+    static public int staticInt18136;
+    static public int staticInt18137;
+    static public int staticInt18138;
+    static public int staticInt18139;
+    static public int staticInt18140;
+    static public int staticInt18141;
+    static public int staticInt18142;
+    static public int staticInt18143;
+    static public int staticInt18144;
+    static public int staticInt18145;
+    static public int staticInt18146;
+    static public int staticInt18147;
+    static public int staticInt18148;
+    static public int staticInt18149;
+    static public int staticInt18150;
+    static public int staticInt18151;
+    static public int staticInt18152;
+    static public int staticInt18153;
+    static public int staticInt18154;
+    static public int staticInt18155;
+    static public int staticInt18156;
+    static public int staticInt18157;
+    static public int staticInt18158;
+    static public int staticInt18159;
+    static public int staticInt18160;
+    static public int staticInt18161;
+    static public int staticInt18162;
+    static public int staticInt18163;
+    static public int staticInt18164;
+    static public int staticInt18165;
+    static public int staticInt18166;
+    static public int staticInt18167;
+    static public int staticInt18168;
+    static public int staticInt18169;
+    static public int staticInt18170;
+    static public int staticInt18171;
+    static public int staticInt18172;
+    static public int staticInt18173;
+    static public int staticInt18174;
+    static public int staticInt18175;
+    static public int staticInt18176;
+    static public int staticInt18177;
+    static public int staticInt18178;
+    static public int staticInt18179;
+    static public int staticInt18180;
+    static public int staticInt18181;
+    static public int staticInt18182;
+    static public int staticInt18183;
+    static public int staticInt18184;
+    static public int staticInt18185;
+    static public int staticInt18186;
+    static public int staticInt18187;
+    static public int staticInt18188;
+    static public int staticInt18189;
+    static public int staticInt18190;
+    static public int staticInt18191;
+    static public int staticInt18192;
+    static public int staticInt18193;
+    static public int staticInt18194;
+    static public int staticInt18195;
+    static public int staticInt18196;
+    static public int staticInt18197;
+    static public int staticInt18198;
+    static public int staticInt18199;
+    static public int staticInt18200;
+    static public int staticInt18201;
+    static public int staticInt18202;
+    static public int staticInt18203;
+    static public int staticInt18204;
+    static public int staticInt18205;
+    static public int staticInt18206;
+    static public int staticInt18207;
+    static public int staticInt18208;
+    static public int staticInt18209;
+    static public int staticInt18210;
+    static public int staticInt18211;
+    static public int staticInt18212;
+    static public int staticInt18213;
+    static public int staticInt18214;
+    static public int staticInt18215;
+    static public int staticInt18216;
+    static public int staticInt18217;
+    static public int staticInt18218;
+    static public int staticInt18219;
+    static public int staticInt18220;
+    static public int staticInt18221;
+    static public int staticInt18222;
+    static public int staticInt18223;
+    static public int staticInt18224;
+    static public int staticInt18225;
+    static public int staticInt18226;
+    static public int staticInt18227;
+    static public int staticInt18228;
+    static public int staticInt18229;
+    static public int staticInt18230;
+    static public int staticInt18231;
+    static public int staticInt18232;
+    static public int staticInt18233;
+    static public int staticInt18234;
+    static public int staticInt18235;
+    static public int staticInt18236;
+    static public int staticInt18237;
+    static public int staticInt18238;
+    static public int staticInt18239;
+    static public int staticInt18240;
+    static public int staticInt18241;
+    static public int staticInt18242;
+    static public int staticInt18243;
+    static public int staticInt18244;
+    static public int staticInt18245;
+    static public int staticInt18246;
+    static public int staticInt18247;
+    static public int staticInt18248;
+    static public int staticInt18249;
+    static public int staticInt18250;
+    static public int staticInt18251;
+    static public int staticInt18252;
+    static public int staticInt18253;
+    static public int staticInt18254;
+    static public int staticInt18255;
+    static public int staticInt18256;
+    static public int staticInt18257;
+    static public int staticInt18258;
+    static public int staticInt18259;
+    static public int staticInt18260;
+    static public int staticInt18261;
+    static public int staticInt18262;
+    static public int staticInt18263;
+    static public int staticInt18264;
+    static public int staticInt18265;
+    static public int staticInt18266;
+    static public int staticInt18267;
+    static public int staticInt18268;
+    static public int staticInt18269;
+    static public int staticInt18270;
+    static public int staticInt18271;
+    static public int staticInt18272;
+    static public int staticInt18273;
+    static public int staticInt18274;
+    static public int staticInt18275;
+    static public int staticInt18276;
+    static public int staticInt18277;
+    static public int staticInt18278;
+    static public int staticInt18279;
+    static public int staticInt18280;
+    static public int staticInt18281;
+    static public int staticInt18282;
+    static public int staticInt18283;
+    static public int staticInt18284;
+    static public int staticInt18285;
+    static public int staticInt18286;
+    static public int staticInt18287;
+    static public int staticInt18288;
+    static public int staticInt18289;
+    static public int staticInt18290;
+    static public int staticInt18291;
+    static public int staticInt18292;
+    static public int staticInt18293;
+    static public int staticInt18294;
+    static public int staticInt18295;
+    static public int staticInt18296;
+    static public int staticInt18297;
+    static public int staticInt18298;
+    static public int staticInt18299;
+    static public int staticInt18300;
+    static public int staticInt18301;
+    static public int staticInt18302;
+    static public int staticInt18303;
+    static public int staticInt18304;
+    static public int staticInt18305;
+    static public int staticInt18306;
+    static public int staticInt18307;
+    static public int staticInt18308;
+    static public int staticInt18309;
+    static public int staticInt18310;
+    static public int staticInt18311;
+    static public int staticInt18312;
+    static public int staticInt18313;
+    static public int staticInt18314;
+    static public int staticInt18315;
+    static public int staticInt18316;
+    static public int staticInt18317;
+    static public int staticInt18318;
+    static public int staticInt18319;
+    static public int staticInt18320;
+    static public int staticInt18321;
+    static public int staticInt18322;
+    static public int staticInt18323;
+    static public int staticInt18324;
+    static public int staticInt18325;
+    static public int staticInt18326;
+    static public int staticInt18327;
+    static public int staticInt18328;
+    static public int staticInt18329;
+    static public int staticInt18330;
+    static public int staticInt18331;
+    static public int staticInt18332;
+    static public int staticInt18333;
+    static public int staticInt18334;
+    static public int staticInt18335;
+    static public int staticInt18336;
+    static public int staticInt18337;
+    static public int staticInt18338;
+    static public int staticInt18339;
+    static public int staticInt18340;
+    static public int staticInt18341;
+    static public int staticInt18342;
+    static public int staticInt18343;
+    static public int staticInt18344;
+    static public int staticInt18345;
+    static public int staticInt18346;
+    static public int staticInt18347;
+    static public int staticInt18348;
+    static public int staticInt18349;
+    static public int staticInt18350;
+    static public int staticInt18351;
+    static public int staticInt18352;
+    static public int staticInt18353;
+    static public int staticInt18354;
+    static public int staticInt18355;
+    static public int staticInt18356;
+    static public int staticInt18357;
+    static public int staticInt18358;
+    static public int staticInt18359;
+    static public int staticInt18360;
+    static public int staticInt18361;
+    static public int staticInt18362;
+    static public int staticInt18363;
+    static public int staticInt18364;
+    static public int staticInt18365;
+    static public int staticInt18366;
+    static public int staticInt18367;
+    static public int staticInt18368;
+    static public int staticInt18369;
+    static public int staticInt18370;
+    static public int staticInt18371;
+    static public int staticInt18372;
+    static public int staticInt18373;
+    static public int staticInt18374;
+    static public int staticInt18375;
+    static public int staticInt18376;
+    static public int staticInt18377;
+    static public int staticInt18378;
+    static public int staticInt18379;
+    static public int staticInt18380;
+    static public int staticInt18381;
+    static public int staticInt18382;
+    static public int staticInt18383;
+    static public int staticInt18384;
+    static public int staticInt18385;
+    static public int staticInt18386;
+    static public int staticInt18387;
+    static public int staticInt18388;
+    static public int staticInt18389;
+    static public int staticInt18390;
+    static public int staticInt18391;
+    static public int staticInt18392;
+    static public int staticInt18393;
+    static public int staticInt18394;
+    static public int staticInt18395;
+    static public int staticInt18396;
+    static public int staticInt18397;
+    static public int staticInt18398;
+    static public int staticInt18399;
+    static public int staticInt18400;
+    static public int staticInt18401;
+    static public int staticInt18402;
+    static public int staticInt18403;
+    static public int staticInt18404;
+    static public int staticInt18405;
+    static public int staticInt18406;
+    static public int staticInt18407;
+    static public int staticInt18408;
+    static public int staticInt18409;
+    static public int staticInt18410;
+    static public int staticInt18411;
+    static public int staticInt18412;
+    static public int staticInt18413;
+    static public int staticInt18414;
+    static public int staticInt18415;
+    static public int staticInt18416;
+    static public int staticInt18417;
+    static public int staticInt18418;
+    static public int staticInt18419;
+    static public int staticInt18420;
+    static public int staticInt18421;
+    static public int staticInt18422;
+    static public int staticInt18423;
+    static public int staticInt18424;
+    static public int staticInt18425;
+    static public int staticInt18426;
+    static public int staticInt18427;
+    static public int staticInt18428;
+    static public int staticInt18429;
+    static public int staticInt18430;
+    static public int staticInt18431;
+    static public int staticInt18432;
+    static public int staticInt18433;
+    static public int staticInt18434;
+    static public int staticInt18435;
+    static public int staticInt18436;
+    static public int staticInt18437;
+    static public int staticInt18438;
+    static public int staticInt18439;
+    static public int staticInt18440;
+    static public int staticInt18441;
+    static public int staticInt18442;
+    static public int staticInt18443;
+    static public int staticInt18444;
+    static public int staticInt18445;
+    static public int staticInt18446;
+    static public int staticInt18447;
+    static public int staticInt18448;
+    static public int staticInt18449;
+    static public int staticInt18450;
+    static public int staticInt18451;
+    static public int staticInt18452;
+    static public int staticInt18453;
+    static public int staticInt18454;
+    static public int staticInt18455;
+    static public int staticInt18456;
+    static public int staticInt18457;
+    static public int staticInt18458;
+    static public int staticInt18459;
+    static public int staticInt18460;
+    static public int staticInt18461;
+    static public int staticInt18462;
+    static public int staticInt18463;
+    static public int staticInt18464;
+    static public int staticInt18465;
+    static public int staticInt18466;
+    static public int staticInt18467;
+    static public int staticInt18468;
+    static public int staticInt18469;
+    static public int staticInt18470;
+    static public int staticInt18471;
+    static public int staticInt18472;
+    static public int staticInt18473;
+    static public int staticInt18474;
+    static public int staticInt18475;
+    static public int staticInt18476;
+    static public int staticInt18477;
+    static public int staticInt18478;
+    static public int staticInt18479;
+    static public int staticInt18480;
+    static public int staticInt18481;
+    static public int staticInt18482;
+    static public int staticInt18483;
+    static public int staticInt18484;
+    static public int staticInt18485;
+    static public int staticInt18486;
+    static public int staticInt18487;
+    static public int staticInt18488;
+    static public int staticInt18489;
+    static public int staticInt18490;
+    static public int staticInt18491;
+    static public int staticInt18492;
+    static public int staticInt18493;
+    static public int staticInt18494;
+    static public int staticInt18495;
+    static public int staticInt18496;
+    static public int staticInt18497;
+    static public int staticInt18498;
+    static public int staticInt18499;
+    static public int staticInt18500;
+    static public int staticInt18501;
+    static public int staticInt18502;
+    static public int staticInt18503;
+    static public int staticInt18504;
+    static public int staticInt18505;
+    static public int staticInt18506;
+    static public int staticInt18507;
+    static public int staticInt18508;
+    static public int staticInt18509;
+    static public int staticInt18510;
+    static public int staticInt18511;
+    static public int staticInt18512;
+    static public int staticInt18513;
+    static public int staticInt18514;
+    static public int staticInt18515;
+    static public int staticInt18516;
+    static public int staticInt18517;
+    static public int staticInt18518;
+    static public int staticInt18519;
+    static public int staticInt18520;
+    static public int staticInt18521;
+    static public int staticInt18522;
+    static public int staticInt18523;
+    static public int staticInt18524;
+    static public int staticInt18525;
+    static public int staticInt18526;
+    static public int staticInt18527;
+    static public int staticInt18528;
+    static public int staticInt18529;
+    static public int staticInt18530;
+    static public int staticInt18531;
+    static public int staticInt18532;
+    static public int staticInt18533;
+    static public int staticInt18534;
+    static public int staticInt18535;
+    static public int staticInt18536;
+    static public int staticInt18537;
+    static public int staticInt18538;
+    static public int staticInt18539;
+    static public int staticInt18540;
+    static public int staticInt18541;
+    static public int staticInt18542;
+    static public int staticInt18543;
+    static public int staticInt18544;
+    static public int staticInt18545;
+    static public int staticInt18546;
+    static public int staticInt18547;
+    static public int staticInt18548;
+    static public int staticInt18549;
+    static public int staticInt18550;
+    static public int staticInt18551;
+    static public int staticInt18552;
+    static public int staticInt18553;
+    static public int staticInt18554;
+    static public int staticInt18555;
+    static public int staticInt18556;
+    static public int staticInt18557;
+    static public int staticInt18558;
+    static public int staticInt18559;
+    static public int staticInt18560;
+    static public int staticInt18561;
+    static public int staticInt18562;
+    static public int staticInt18563;
+    static public int staticInt18564;
+    static public int staticInt18565;
+    static public int staticInt18566;
+    static public int staticInt18567;
+    static public int staticInt18568;
+    static public int staticInt18569;
+    static public int staticInt18570;
+    static public int staticInt18571;
+    static public int staticInt18572;
+    static public int staticInt18573;
+    static public int staticInt18574;
+    static public int staticInt18575;
+    static public int staticInt18576;
+    static public int staticInt18577;
+    static public int staticInt18578;
+    static public int staticInt18579;
+    static public int staticInt18580;
+    static public int staticInt18581;
+    static public int staticInt18582;
+    static public int staticInt18583;
+    static public int staticInt18584;
+    static public int staticInt18585;
+    static public int staticInt18586;
+    static public int staticInt18587;
+    static public int staticInt18588;
+    static public int staticInt18589;
+    static public int staticInt18590;
+    static public int staticInt18591;
+    static public int staticInt18592;
+    static public int staticInt18593;
+    static public int staticInt18594;
+    static public int staticInt18595;
+    static public int staticInt18596;
+    static public int staticInt18597;
+    static public int staticInt18598;
+    static public int staticInt18599;
+    static public int staticInt18600;
+    static public int staticInt18601;
+    static public int staticInt18602;
+    static public int staticInt18603;
+    static public int staticInt18604;
+    static public int staticInt18605;
+    static public int staticInt18606;
+    static public int staticInt18607;
+    static public int staticInt18608;
+    static public int staticInt18609;
+    static public int staticInt18610;
+    static public int staticInt18611;
+    static public int staticInt18612;
+    static public int staticInt18613;
+    static public int staticInt18614;
+    static public int staticInt18615;
+    static public int staticInt18616;
+    static public int staticInt18617;
+    static public int staticInt18618;
+    static public int staticInt18619;
+    static public int staticInt18620;
+    static public int staticInt18621;
+    static public int staticInt18622;
+    static public int staticInt18623;
+    static public int staticInt18624;
+    static public int staticInt18625;
+    static public int staticInt18626;
+    static public int staticInt18627;
+    static public int staticInt18628;
+    static public int staticInt18629;
+    static public int staticInt18630;
+    static public int staticInt18631;
+    static public int staticInt18632;
+    static public int staticInt18633;
+    static public int staticInt18634;
+    static public int staticInt18635;
+    static public int staticInt18636;
+    static public int staticInt18637;
+    static public int staticInt18638;
+    static public int staticInt18639;
+    static public int staticInt18640;
+    static public int staticInt18641;
+    static public int staticInt18642;
+    static public int staticInt18643;
+    static public int staticInt18644;
+    static public int staticInt18645;
+    static public int staticInt18646;
+    static public int staticInt18647;
+    static public int staticInt18648;
+    static public int staticInt18649;
+    static public int staticInt18650;
+    static public int staticInt18651;
+    static public int staticInt18652;
+    static public int staticInt18653;
+    static public int staticInt18654;
+    static public int staticInt18655;
+    static public int staticInt18656;
+    static public int staticInt18657;
+    static public int staticInt18658;
+    static public int staticInt18659;
+    static public int staticInt18660;
+    static public int staticInt18661;
+    static public int staticInt18662;
+    static public int staticInt18663;
+    static public int staticInt18664;
+    static public int staticInt18665;
+    static public int staticInt18666;
+    static public int staticInt18667;
+    static public int staticInt18668;
+    static public int staticInt18669;
+    static public int staticInt18670;
+    static public int staticInt18671;
+    static public int staticInt18672;
+    static public int staticInt18673;
+    static public int staticInt18674;
+    static public int staticInt18675;
+    static public int staticInt18676;
+    static public int staticInt18677;
+    static public int staticInt18678;
+    static public int staticInt18679;
+    static public int staticInt18680;
+    static public int staticInt18681;
+    static public int staticInt18682;
+    static public int staticInt18683;
+    static public int staticInt18684;
+    static public int staticInt18685;
+    static public int staticInt18686;
+    static public int staticInt18687;
+    static public int staticInt18688;
+    static public int staticInt18689;
+    static public int staticInt18690;
+    static public int staticInt18691;
+    static public int staticInt18692;
+    static public int staticInt18693;
+    static public int staticInt18694;
+    static public int staticInt18695;
+    static public int staticInt18696;
+    static public int staticInt18697;
+    static public int staticInt18698;
+    static public int staticInt18699;
+    static public int staticInt18700;
+    static public int staticInt18701;
+    static public int staticInt18702;
+    static public int staticInt18703;
+    static public int staticInt18704;
+    static public int staticInt18705;
+    static public int staticInt18706;
+    static public int staticInt18707;
+    static public int staticInt18708;
+    static public int staticInt18709;
+    static public int staticInt18710;
+    static public int staticInt18711;
+    static public int staticInt18712;
+    static public int staticInt18713;
+    static public int staticInt18714;
+    static public int staticInt18715;
+    static public int staticInt18716;
+    static public int staticInt18717;
+    static public int staticInt18718;
+    static public int staticInt18719;
+    static public int staticInt18720;
+    static public int staticInt18721;
+    static public int staticInt18722;
+    static public int staticInt18723;
+    static public int staticInt18724;
+    static public int staticInt18725;
+    static public int staticInt18726;
+    static public int staticInt18727;
+    static public int staticInt18728;
+    static public int staticInt18729;
+    static public int staticInt18730;
+    static public int staticInt18731;
+    static public int staticInt18732;
+    static public int staticInt18733;
+    static public int staticInt18734;
+    static public int staticInt18735;
+    static public int staticInt18736;
+    static public int staticInt18737;
+    static public int staticInt18738;
+    static public int staticInt18739;
+    static public int staticInt18740;
+    static public int staticInt18741;
+    static public int staticInt18742;
+    static public int staticInt18743;
+    static public int staticInt18744;
+    static public int staticInt18745;
+    static public int staticInt18746;
+    static public int staticInt18747;
+    static public int staticInt18748;
+    static public int staticInt18749;
+    static public int staticInt18750;
+    static public int staticInt18751;
+    static public int staticInt18752;
+    static public int staticInt18753;
+    static public int staticInt18754;
+    static public int staticInt18755;
+    static public int staticInt18756;
+    static public int staticInt18757;
+    static public int staticInt18758;
+    static public int staticInt18759;
+    static public int staticInt18760;
+    static public int staticInt18761;
+    static public int staticInt18762;
+    static public int staticInt18763;
+    static public int staticInt18764;
+    static public int staticInt18765;
+    static public int staticInt18766;
+    static public int staticInt18767;
+    static public int staticInt18768;
+    static public int staticInt18769;
+    static public int staticInt18770;
+    static public int staticInt18771;
+    static public int staticInt18772;
+    static public int staticInt18773;
+    static public int staticInt18774;
+    static public int staticInt18775;
+    static public int staticInt18776;
+    static public int staticInt18777;
+    static public int staticInt18778;
+    static public int staticInt18779;
+    static public int staticInt18780;
+    static public int staticInt18781;
+    static public int staticInt18782;
+    static public int staticInt18783;
+    static public int staticInt18784;
+    static public int staticInt18785;
+    static public int staticInt18786;
+    static public int staticInt18787;
+    static public int staticInt18788;
+    static public int staticInt18789;
+    static public int staticInt18790;
+    static public int staticInt18791;
+    static public int staticInt18792;
+    static public int staticInt18793;
+    static public int staticInt18794;
+    static public int staticInt18795;
+    static public int staticInt18796;
+    static public int staticInt18797;
+    static public int staticInt18798;
+    static public int staticInt18799;
+    static public int staticInt18800;
+    static public int staticInt18801;
+    static public int staticInt18802;
+    static public int staticInt18803;
+    static public int staticInt18804;
+    static public int staticInt18805;
+    static public int staticInt18806;
+    static public int staticInt18807;
+    static public int staticInt18808;
+    static public int staticInt18809;
+    static public int staticInt18810;
+    static public int staticInt18811;
+    static public int staticInt18812;
+    static public int staticInt18813;
+    static public int staticInt18814;
+    static public int staticInt18815;
+    static public int staticInt18816;
+    static public int staticInt18817;
+    static public int staticInt18818;
+    static public int staticInt18819;
+    static public int staticInt18820;
+    static public int staticInt18821;
+    static public int staticInt18822;
+    static public int staticInt18823;
+    static public int staticInt18824;
+    static public int staticInt18825;
+    static public int staticInt18826;
+    static public int staticInt18827;
+    static public int staticInt18828;
+    static public int staticInt18829;
+    static public int staticInt18830;
+    static public int staticInt18831;
+    static public int staticInt18832;
+    static public int staticInt18833;
+    static public int staticInt18834;
+    static public int staticInt18835;
+    static public int staticInt18836;
+    static public int staticInt18837;
+    static public int staticInt18838;
+    static public int staticInt18839;
+    static public int staticInt18840;
+    static public int staticInt18841;
+    static public int staticInt18842;
+    static public int staticInt18843;
+    static public int staticInt18844;
+    static public int staticInt18845;
+    static public int staticInt18846;
+    static public int staticInt18847;
+    static public int staticInt18848;
+    static public int staticInt18849;
+    static public int staticInt18850;
+    static public int staticInt18851;
+    static public int staticInt18852;
+    static public int staticInt18853;
+    static public int staticInt18854;
+    static public int staticInt18855;
+    static public int staticInt18856;
+    static public int staticInt18857;
+    static public int staticInt18858;
+    static public int staticInt18859;
+    static public int staticInt18860;
+    static public int staticInt18861;
+    static public int staticInt18862;
+    static public int staticInt18863;
+    static public int staticInt18864;
+    static public int staticInt18865;
+    static public int staticInt18866;
+    static public int staticInt18867;
+    static public int staticInt18868;
+    static public int staticInt18869;
+    static public int staticInt18870;
+    static public int staticInt18871;
+    static public int staticInt18872;
+    static public int staticInt18873;
+    static public int staticInt18874;
+    static public int staticInt18875;
+    static public int staticInt18876;
+    static public int staticInt18877;
+    static public int staticInt18878;
+    static public int staticInt18879;
+    static public int staticInt18880;
+    static public int staticInt18881;
+    static public int staticInt18882;
+    static public int staticInt18883;
+    static public int staticInt18884;
+    static public int staticInt18885;
+    static public int staticInt18886;
+    static public int staticInt18887;
+    static public int staticInt18888;
+    static public int staticInt18889;
+    static public int staticInt18890;
+    static public int staticInt18891;
+    static public int staticInt18892;
+    static public int staticInt18893;
+    static public int staticInt18894;
+    static public int staticInt18895;
+    static public int staticInt18896;
+    static public int staticInt18897;
+    static public int staticInt18898;
+    static public int staticInt18899;
+    static public int staticInt18900;
+    static public int staticInt18901;
+    static public int staticInt18902;
+    static public int staticInt18903;
+    static public int staticInt18904;
+    static public int staticInt18905;
+    static public int staticInt18906;
+    static public int staticInt18907;
+    static public int staticInt18908;
+    static public int staticInt18909;
+    static public int staticInt18910;
+    static public int staticInt18911;
+    static public int staticInt18912;
+    static public int staticInt18913;
+    static public int staticInt18914;
+    static public int staticInt18915;
+    static public int staticInt18916;
+    static public int staticInt18917;
+    static public int staticInt18918;
+    static public int staticInt18919;
+    static public int staticInt18920;
+    static public int staticInt18921;
+    static public int staticInt18922;
+    static public int staticInt18923;
+    static public int staticInt18924;
+    static public int staticInt18925;
+    static public int staticInt18926;
+    static public int staticInt18927;
+    static public int staticInt18928;
+    static public int staticInt18929;
+    static public int staticInt18930;
+    static public int staticInt18931;
+    static public int staticInt18932;
+    static public int staticInt18933;
+    static public int staticInt18934;
+    static public int staticInt18935;
+    static public int staticInt18936;
+    static public int staticInt18937;
+    static public int staticInt18938;
+    static public int staticInt18939;
+    static public int staticInt18940;
+    static public int staticInt18941;
+    static public int staticInt18942;
+    static public int staticInt18943;
+    static public int staticInt18944;
+    static public int staticInt18945;
+    static public int staticInt18946;
+    static public int staticInt18947;
+    static public int staticInt18948;
+    static public int staticInt18949;
+    static public int staticInt18950;
+    static public int staticInt18951;
+    static public int staticInt18952;
+    static public int staticInt18953;
+    static public int staticInt18954;
+    static public int staticInt18955;
+    static public int staticInt18956;
+    static public int staticInt18957;
+    static public int staticInt18958;
+    static public int staticInt18959;
+    static public int staticInt18960;
+    static public int staticInt18961;
+    static public int staticInt18962;
+    static public int staticInt18963;
+    static public int staticInt18964;
+    static public int staticInt18965;
+    static public int staticInt18966;
+    static public int staticInt18967;
+    static public int staticInt18968;
+    static public int staticInt18969;
+    static public int staticInt18970;
+    static public int staticInt18971;
+    static public int staticInt18972;
+    static public int staticInt18973;
+    static public int staticInt18974;
+    static public int staticInt18975;
+    static public int staticInt18976;
+    static public int staticInt18977;
+    static public int staticInt18978;
+    static public int staticInt18979;
+    static public int staticInt18980;
+    static public int staticInt18981;
+    static public int staticInt18982;
+    static public int staticInt18983;
+    static public int staticInt18984;
+    static public int staticInt18985;
+    static public int staticInt18986;
+    static public int staticInt18987;
+    static public int staticInt18988;
+    static public int staticInt18989;
+    static public int staticInt18990;
+    static public int staticInt18991;
+    static public int staticInt18992;
+    static public int staticInt18993;
+    static public int staticInt18994;
+    static public int staticInt18995;
+    static public int staticInt18996;
+    static public int staticInt18997;
+    static public int staticInt18998;
+    static public int staticInt18999;
+    static public int staticInt19000;
+    static public int staticInt19001;
+    static public int staticInt19002;
+    static public int staticInt19003;
+    static public int staticInt19004;
+    static public int staticInt19005;
+    static public int staticInt19006;
+    static public int staticInt19007;
+    static public int staticInt19008;
+    static public int staticInt19009;
+    static public int staticInt19010;
+    static public int staticInt19011;
+    static public int staticInt19012;
+    static public int staticInt19013;
+    static public int staticInt19014;
+    static public int staticInt19015;
+    static public int staticInt19016;
+    static public int staticInt19017;
+    static public int staticInt19018;
+    static public int staticInt19019;
+    static public int staticInt19020;
+    static public int staticInt19021;
+    static public int staticInt19022;
+    static public int staticInt19023;
+    static public int staticInt19024;
+    static public int staticInt19025;
+    static public int staticInt19026;
+    static public int staticInt19027;
+    static public int staticInt19028;
+    static public int staticInt19029;
+    static public int staticInt19030;
+    static public int staticInt19031;
+    static public int staticInt19032;
+    static public int staticInt19033;
+    static public int staticInt19034;
+    static public int staticInt19035;
+    static public int staticInt19036;
+    static public int staticInt19037;
+    static public int staticInt19038;
+    static public int staticInt19039;
+    static public int staticInt19040;
+    static public int staticInt19041;
+    static public int staticInt19042;
+    static public int staticInt19043;
+    static public int staticInt19044;
+    static public int staticInt19045;
+    static public int staticInt19046;
+    static public int staticInt19047;
+    static public int staticInt19048;
+    static public int staticInt19049;
+    static public int staticInt19050;
+    static public int staticInt19051;
+    static public int staticInt19052;
+    static public int staticInt19053;
+    static public int staticInt19054;
+    static public int staticInt19055;
+    static public int staticInt19056;
+    static public int staticInt19057;
+    static public int staticInt19058;
+    static public int staticInt19059;
+    static public int staticInt19060;
+    static public int staticInt19061;
+    static public int staticInt19062;
+    static public int staticInt19063;
+    static public int staticInt19064;
+    static public int staticInt19065;
+    static public int staticInt19066;
+    static public int staticInt19067;
+    static public int staticInt19068;
+    static public int staticInt19069;
+    static public int staticInt19070;
+    static public int staticInt19071;
+    static public int staticInt19072;
+    static public int staticInt19073;
+    static public int staticInt19074;
+    static public int staticInt19075;
+    static public int staticInt19076;
+    static public int staticInt19077;
+    static public int staticInt19078;
+    static public int staticInt19079;
+    static public int staticInt19080;
+    static public int staticInt19081;
+    static public int staticInt19082;
+    static public int staticInt19083;
+    static public int staticInt19084;
+    static public int staticInt19085;
+    static public int staticInt19086;
+    static public int staticInt19087;
+    static public int staticInt19088;
+    static public int staticInt19089;
+    static public int staticInt19090;
+    static public int staticInt19091;
+    static public int staticInt19092;
+    static public int staticInt19093;
+    static public int staticInt19094;
+    static public int staticInt19095;
+    static public int staticInt19096;
+    static public int staticInt19097;
+    static public int staticInt19098;
+    static public int staticInt19099;
+    static public int staticInt19100;
+    static public int staticInt19101;
+    static public int staticInt19102;
+    static public int staticInt19103;
+    static public int staticInt19104;
+    static public int staticInt19105;
+    static public int staticInt19106;
+    static public int staticInt19107;
+    static public int staticInt19108;
+    static public int staticInt19109;
+    static public int staticInt19110;
+    static public int staticInt19111;
+    static public int staticInt19112;
+    static public int staticInt19113;
+    static public int staticInt19114;
+    static public int staticInt19115;
+    static public int staticInt19116;
+    static public int staticInt19117;
+    static public int staticInt19118;
+    static public int staticInt19119;
+    static public int staticInt19120;
+    static public int staticInt19121;
+    static public int staticInt19122;
+    static public int staticInt19123;
+    static public int staticInt19124;
+    static public int staticInt19125;
+    static public int staticInt19126;
+    static public int staticInt19127;
+    static public int staticInt19128;
+    static public int staticInt19129;
+    static public int staticInt19130;
+    static public int staticInt19131;
+    static public int staticInt19132;
+    static public int staticInt19133;
+    static public int staticInt19134;
+    static public int staticInt19135;
+    static public int staticInt19136;
+    static public int staticInt19137;
+    static public int staticInt19138;
+    static public int staticInt19139;
+    static public int staticInt19140;
+    static public int staticInt19141;
+    static public int staticInt19142;
+    static public int staticInt19143;
+    static public int staticInt19144;
+    static public int staticInt19145;
+    static public int staticInt19146;
+    static public int staticInt19147;
+    static public int staticInt19148;
+    static public int staticInt19149;
+    static public int staticInt19150;
+    static public int staticInt19151;
+    static public int staticInt19152;
+    static public int staticInt19153;
+    static public int staticInt19154;
+    static public int staticInt19155;
+    static public int staticInt19156;
+    static public int staticInt19157;
+    static public int staticInt19158;
+    static public int staticInt19159;
+    static public int staticInt19160;
+    static public int staticInt19161;
+    static public int staticInt19162;
+    static public int staticInt19163;
+    static public int staticInt19164;
+    static public int staticInt19165;
+    static public int staticInt19166;
+    static public int staticInt19167;
+    static public int staticInt19168;
+    static public int staticInt19169;
+    static public int staticInt19170;
+    static public int staticInt19171;
+    static public int staticInt19172;
+    static public int staticInt19173;
+    static public int staticInt19174;
+    static public int staticInt19175;
+    static public int staticInt19176;
+    static public int staticInt19177;
+    static public int staticInt19178;
+    static public int staticInt19179;
+    static public int staticInt19180;
+    static public int staticInt19181;
+    static public int staticInt19182;
+    static public int staticInt19183;
+    static public int staticInt19184;
+    static public int staticInt19185;
+    static public int staticInt19186;
+    static public int staticInt19187;
+    static public int staticInt19188;
+    static public int staticInt19189;
+    static public int staticInt19190;
+    static public int staticInt19191;
+    static public int staticInt19192;
+    static public int staticInt19193;
+    static public int staticInt19194;
+    static public int staticInt19195;
+    static public int staticInt19196;
+    static public int staticInt19197;
+    static public int staticInt19198;
+    static public int staticInt19199;
+    static public int staticInt19200;
+    static public int staticInt19201;
+    static public int staticInt19202;
+    static public int staticInt19203;
+    static public int staticInt19204;
+    static public int staticInt19205;
+    static public int staticInt19206;
+    static public int staticInt19207;
+    static public int staticInt19208;
+    static public int staticInt19209;
+    static public int staticInt19210;
+    static public int staticInt19211;
+    static public int staticInt19212;
+    static public int staticInt19213;
+    static public int staticInt19214;
+    static public int staticInt19215;
+    static public int staticInt19216;
+    static public int staticInt19217;
+    static public int staticInt19218;
+    static public int staticInt19219;
+    static public int staticInt19220;
+    static public int staticInt19221;
+    static public int staticInt19222;
+    static public int staticInt19223;
+    static public int staticInt19224;
+    static public int staticInt19225;
+    static public int staticInt19226;
+    static public int staticInt19227;
+    static public int staticInt19228;
+    static public int staticInt19229;
+    static public int staticInt19230;
+    static public int staticInt19231;
+    static public int staticInt19232;
+    static public int staticInt19233;
+    static public int staticInt19234;
+    static public int staticInt19235;
+    static public int staticInt19236;
+    static public int staticInt19237;
+    static public int staticInt19238;
+    static public int staticInt19239;
+    static public int staticInt19240;
+    static public int staticInt19241;
+    static public int staticInt19242;
+    static public int staticInt19243;
+    static public int staticInt19244;
+    static public int staticInt19245;
+    static public int staticInt19246;
+    static public int staticInt19247;
+    static public int staticInt19248;
+    static public int staticInt19249;
+    static public int staticInt19250;
+    static public int staticInt19251;
+    static public int staticInt19252;
+    static public int staticInt19253;
+    static public int staticInt19254;
+    static public int staticInt19255;
+    static public int staticInt19256;
+    static public int staticInt19257;
+    static public int staticInt19258;
+    static public int staticInt19259;
+    static public int staticInt19260;
+    static public int staticInt19261;
+    static public int staticInt19262;
+    static public int staticInt19263;
+    static public int staticInt19264;
+    static public int staticInt19265;
+    static public int staticInt19266;
+    static public int staticInt19267;
+    static public int staticInt19268;
+    static public int staticInt19269;
+    static public int staticInt19270;
+    static public int staticInt19271;
+    static public int staticInt19272;
+    static public int staticInt19273;
+    static public int staticInt19274;
+    static public int staticInt19275;
+    static public int staticInt19276;
+    static public int staticInt19277;
+    static public int staticInt19278;
+    static public int staticInt19279;
+    static public int staticInt19280;
+    static public int staticInt19281;
+    static public int staticInt19282;
+    static public int staticInt19283;
+    static public int staticInt19284;
+    static public int staticInt19285;
+    static public int staticInt19286;
+    static public int staticInt19287;
+    static public int staticInt19288;
+    static public int staticInt19289;
+    static public int staticInt19290;
+    static public int staticInt19291;
+    static public int staticInt19292;
+    static public int staticInt19293;
+    static public int staticInt19294;
+    static public int staticInt19295;
+    static public int staticInt19296;
+    static public int staticInt19297;
+    static public int staticInt19298;
+    static public int staticInt19299;
+    static public int staticInt19300;
+    static public int staticInt19301;
+    static public int staticInt19302;
+    static public int staticInt19303;
+    static public int staticInt19304;
+    static public int staticInt19305;
+    static public int staticInt19306;
+    static public int staticInt19307;
+    static public int staticInt19308;
+    static public int staticInt19309;
+    static public int staticInt19310;
+    static public int staticInt19311;
+    static public int staticInt19312;
+    static public int staticInt19313;
+    static public int staticInt19314;
+    static public int staticInt19315;
+    static public int staticInt19316;
+    static public int staticInt19317;
+    static public int staticInt19318;
+    static public int staticInt19319;
+    static public int staticInt19320;
+    static public int staticInt19321;
+    static public int staticInt19322;
+    static public int staticInt19323;
+    static public int staticInt19324;
+    static public int staticInt19325;
+    static public int staticInt19326;
+    static public int staticInt19327;
+    static public int staticInt19328;
+    static public int staticInt19329;
+    static public int staticInt19330;
+    static public int staticInt19331;
+    static public int staticInt19332;
+    static public int staticInt19333;
+    static public int staticInt19334;
+    static public int staticInt19335;
+    static public int staticInt19336;
+    static public int staticInt19337;
+    static public int staticInt19338;
+    static public int staticInt19339;
+    static public int staticInt19340;
+    static public int staticInt19341;
+    static public int staticInt19342;
+    static public int staticInt19343;
+    static public int staticInt19344;
+    static public int staticInt19345;
+    static public int staticInt19346;
+    static public int staticInt19347;
+    static public int staticInt19348;
+    static public int staticInt19349;
+    static public int staticInt19350;
+    static public int staticInt19351;
+    static public int staticInt19352;
+    static public int staticInt19353;
+    static public int staticInt19354;
+    static public int staticInt19355;
+    static public int staticInt19356;
+    static public int staticInt19357;
+    static public int staticInt19358;
+    static public int staticInt19359;
+    static public int staticInt19360;
+    static public int staticInt19361;
+    static public int staticInt19362;
+    static public int staticInt19363;
+    static public int staticInt19364;
+    static public int staticInt19365;
+    static public int staticInt19366;
+    static public int staticInt19367;
+    static public int staticInt19368;
+    static public int staticInt19369;
+    static public int staticInt19370;
+    static public int staticInt19371;
+    static public int staticInt19372;
+    static public int staticInt19373;
+    static public int staticInt19374;
+    static public int staticInt19375;
+    static public int staticInt19376;
+    static public int staticInt19377;
+    static public int staticInt19378;
+    static public int staticInt19379;
+    static public int staticInt19380;
+    static public int staticInt19381;
+    static public int staticInt19382;
+    static public int staticInt19383;
+    static public int staticInt19384;
+    static public int staticInt19385;
+    static public int staticInt19386;
+    static public int staticInt19387;
+    static public int staticInt19388;
+    static public int staticInt19389;
+    static public int staticInt19390;
+    static public int staticInt19391;
+    static public int staticInt19392;
+    static public int staticInt19393;
+    static public int staticInt19394;
+    static public int staticInt19395;
+    static public int staticInt19396;
+    static public int staticInt19397;
+    static public int staticInt19398;
+    static public int staticInt19399;
+    static public int staticInt19400;
+    static public int staticInt19401;
+    static public int staticInt19402;
+    static public int staticInt19403;
+    static public int staticInt19404;
+    static public int staticInt19405;
+    static public int staticInt19406;
+    static public int staticInt19407;
+    static public int staticInt19408;
+    static public int staticInt19409;
+    static public int staticInt19410;
+    static public int staticInt19411;
+    static public int staticInt19412;
+    static public int staticInt19413;
+    static public int staticInt19414;
+    static public int staticInt19415;
+    static public int staticInt19416;
+    static public int staticInt19417;
+    static public int staticInt19418;
+    static public int staticInt19419;
+    static public int staticInt19420;
+    static public int staticInt19421;
+    static public int staticInt19422;
+    static public int staticInt19423;
+    static public int staticInt19424;
+    static public int staticInt19425;
+    static public int staticInt19426;
+    static public int staticInt19427;
+    static public int staticInt19428;
+    static public int staticInt19429;
+    static public int staticInt19430;
+    static public int staticInt19431;
+    static public int staticInt19432;
+    static public int staticInt19433;
+    static public int staticInt19434;
+    static public int staticInt19435;
+    static public int staticInt19436;
+    static public int staticInt19437;
+    static public int staticInt19438;
+    static public int staticInt19439;
+    static public int staticInt19440;
+    static public int staticInt19441;
+    static public int staticInt19442;
+    static public int staticInt19443;
+    static public int staticInt19444;
+    static public int staticInt19445;
+    static public int staticInt19446;
+    static public int staticInt19447;
+    static public int staticInt19448;
+    static public int staticInt19449;
+    static public int staticInt19450;
+    static public int staticInt19451;
+    static public int staticInt19452;
+    static public int staticInt19453;
+    static public int staticInt19454;
+    static public int staticInt19455;
+    static public int staticInt19456;
+    static public int staticInt19457;
+    static public int staticInt19458;
+    static public int staticInt19459;
+    static public int staticInt19460;
+    static public int staticInt19461;
+    static public int staticInt19462;
+    static public int staticInt19463;
+    static public int staticInt19464;
+    static public int staticInt19465;
+    static public int staticInt19466;
+    static public int staticInt19467;
+    static public int staticInt19468;
+    static public int staticInt19469;
+    static public int staticInt19470;
+    static public int staticInt19471;
+    static public int staticInt19472;
+    static public int staticInt19473;
+    static public int staticInt19474;
+    static public int staticInt19475;
+    static public int staticInt19476;
+    static public int staticInt19477;
+    static public int staticInt19478;
+    static public int staticInt19479;
+    static public int staticInt19480;
+    static public int staticInt19481;
+    static public int staticInt19482;
+    static public int staticInt19483;
+    static public int staticInt19484;
+    static public int staticInt19485;
+    static public int staticInt19486;
+    static public int staticInt19487;
+    static public int staticInt19488;
+    static public int staticInt19489;
+    static public int staticInt19490;
+    static public int staticInt19491;
+    static public int staticInt19492;
+    static public int staticInt19493;
+    static public int staticInt19494;
+    static public int staticInt19495;
+    static public int staticInt19496;
+    static public int staticInt19497;
+    static public int staticInt19498;
+    static public int staticInt19499;
+    static public int staticInt19500;
+    static public int staticInt19501;
+    static public int staticInt19502;
+    static public int staticInt19503;
+    static public int staticInt19504;
+    static public int staticInt19505;
+    static public int staticInt19506;
+    static public int staticInt19507;
+    static public int staticInt19508;
+    static public int staticInt19509;
+    static public int staticInt19510;
+    static public int staticInt19511;
+    static public int staticInt19512;
+    static public int staticInt19513;
+    static public int staticInt19514;
+    static public int staticInt19515;
+    static public int staticInt19516;
+    static public int staticInt19517;
+    static public int staticInt19518;
+    static public int staticInt19519;
+    static public int staticInt19520;
+    static public int staticInt19521;
+    static public int staticInt19522;
+    static public int staticInt19523;
+    static public int staticInt19524;
+    static public int staticInt19525;
+    static public int staticInt19526;
+    static public int staticInt19527;
+    static public int staticInt19528;
+    static public int staticInt19529;
+    static public int staticInt19530;
+    static public int staticInt19531;
+    static public int staticInt19532;
+    static public int staticInt19533;
+    static public int staticInt19534;
+    static public int staticInt19535;
+    static public int staticInt19536;
+    static public int staticInt19537;
+    static public int staticInt19538;
+    static public int staticInt19539;
+    static public int staticInt19540;
+    static public int staticInt19541;
+    static public int staticInt19542;
+    static public int staticInt19543;
+    static public int staticInt19544;
+    static public int staticInt19545;
+    static public int staticInt19546;
+    static public int staticInt19547;
+    static public int staticInt19548;
+    static public int staticInt19549;
+    static public int staticInt19550;
+    static public int staticInt19551;
+    static public int staticInt19552;
+    static public int staticInt19553;
+    static public int staticInt19554;
+    static public int staticInt19555;
+    static public int staticInt19556;
+    static public int staticInt19557;
+    static public int staticInt19558;
+    static public int staticInt19559;
+    static public int staticInt19560;
+    static public int staticInt19561;
+    static public int staticInt19562;
+    static public int staticInt19563;
+    static public int staticInt19564;
+    static public int staticInt19565;
+    static public int staticInt19566;
+    static public int staticInt19567;
+    static public int staticInt19568;
+    static public int staticInt19569;
+    static public int staticInt19570;
+    static public int staticInt19571;
+    static public int staticInt19572;
+    static public int staticInt19573;
+    static public int staticInt19574;
+    static public int staticInt19575;
+    static public int staticInt19576;
+    static public int staticInt19577;
+    static public int staticInt19578;
+    static public int staticInt19579;
+    static public int staticInt19580;
+    static public int staticInt19581;
+    static public int staticInt19582;
+    static public int staticInt19583;
+    static public int staticInt19584;
+    static public int staticInt19585;
+    static public int staticInt19586;
+    static public int staticInt19587;
+    static public int staticInt19588;
+    static public int staticInt19589;
+    static public int staticInt19590;
+    static public int staticInt19591;
+    static public int staticInt19592;
+    static public int staticInt19593;
+    static public int staticInt19594;
+    static public int staticInt19595;
+    static public int staticInt19596;
+    static public int staticInt19597;
+    static public int staticInt19598;
+    static public int staticInt19599;
+    static public int staticInt19600;
+    static public int staticInt19601;
+    static public int staticInt19602;
+    static public int staticInt19603;
+    static public int staticInt19604;
+    static public int staticInt19605;
+    static public int staticInt19606;
+    static public int staticInt19607;
+    static public int staticInt19608;
+    static public int staticInt19609;
+    static public int staticInt19610;
+    static public int staticInt19611;
+    static public int staticInt19612;
+    static public int staticInt19613;
+    static public int staticInt19614;
+    static public int staticInt19615;
+    static public int staticInt19616;
+    static public int staticInt19617;
+    static public int staticInt19618;
+    static public int staticInt19619;
+    static public int staticInt19620;
+    static public int staticInt19621;
+    static public int staticInt19622;
+    static public int staticInt19623;
+    static public int staticInt19624;
+    static public int staticInt19625;
+    static public int staticInt19626;
+    static public int staticInt19627;
+    static public int staticInt19628;
+    static public int staticInt19629;
+    static public int staticInt19630;
+    static public int staticInt19631;
+    static public int staticInt19632;
+    static public int staticInt19633;
+    static public int staticInt19634;
+    static public int staticInt19635;
+    static public int staticInt19636;
+    static public int staticInt19637;
+    static public int staticInt19638;
+    static public int staticInt19639;
+    static public int staticInt19640;
+    static public int staticInt19641;
+    static public int staticInt19642;
+    static public int staticInt19643;
+    static public int staticInt19644;
+    static public int staticInt19645;
+    static public int staticInt19646;
+    static public int staticInt19647;
+    static public int staticInt19648;
+    static public int staticInt19649;
+    static public int staticInt19650;
+    static public int staticInt19651;
+    static public int staticInt19652;
+    static public int staticInt19653;
+    static public int staticInt19654;
+    static public int staticInt19655;
+    static public int staticInt19656;
+    static public int staticInt19657;
+    static public int staticInt19658;
+    static public int staticInt19659;
+    static public int staticInt19660;
+    static public int staticInt19661;
+    static public int staticInt19662;
+    static public int staticInt19663;
+    static public int staticInt19664;
+    static public int staticInt19665;
+    static public int staticInt19666;
+    static public int staticInt19667;
+    static public int staticInt19668;
+    static public int staticInt19669;
+    static public int staticInt19670;
+    static public int staticInt19671;
+    static public int staticInt19672;
+    static public int staticInt19673;
+    static public int staticInt19674;
+    static public int staticInt19675;
+    static public int staticInt19676;
+    static public int staticInt19677;
+    static public int staticInt19678;
+    static public int staticInt19679;
+    static public int staticInt19680;
+    static public int staticInt19681;
+    static public int staticInt19682;
+    static public int staticInt19683;
+    static public int staticInt19684;
+    static public int staticInt19685;
+    static public int staticInt19686;
+    static public int staticInt19687;
+    static public int staticInt19688;
+    static public int staticInt19689;
+    static public int staticInt19690;
+    static public int staticInt19691;
+    static public int staticInt19692;
+    static public int staticInt19693;
+    static public int staticInt19694;
+    static public int staticInt19695;
+    static public int staticInt19696;
+    static public int staticInt19697;
+    static public int staticInt19698;
+    static public int staticInt19699;
+    static public int staticInt19700;
+    static public int staticInt19701;
+    static public int staticInt19702;
+    static public int staticInt19703;
+    static public int staticInt19704;
+    static public int staticInt19705;
+    static public int staticInt19706;
+    static public int staticInt19707;
+    static public int staticInt19708;
+    static public int staticInt19709;
+    static public int staticInt19710;
+    static public int staticInt19711;
+    static public int staticInt19712;
+    static public int staticInt19713;
+    static public int staticInt19714;
+    static public int staticInt19715;
+    static public int staticInt19716;
+    static public int staticInt19717;
+    static public int staticInt19718;
+    static public int staticInt19719;
+    static public int staticInt19720;
+    static public int staticInt19721;
+    static public int staticInt19722;
+    static public int staticInt19723;
+    static public int staticInt19724;
+    static public int staticInt19725;
+    static public int staticInt19726;
+    static public int staticInt19727;
+    static public int staticInt19728;
+    static public int staticInt19729;
+    static public int staticInt19730;
+    static public int staticInt19731;
+    static public int staticInt19732;
+    static public int staticInt19733;
+    static public int staticInt19734;
+    static public int staticInt19735;
+    static public int staticInt19736;
+    static public int staticInt19737;
+    static public int staticInt19738;
+    static public int staticInt19739;
+    static public int staticInt19740;
+    static public int staticInt19741;
+    static public int staticInt19742;
+    static public int staticInt19743;
+    static public int staticInt19744;
+    static public int staticInt19745;
+    static public int staticInt19746;
+    static public int staticInt19747;
+    static public int staticInt19748;
+    static public int staticInt19749;
+    static public int staticInt19750;
+    static public int staticInt19751;
+    static public int staticInt19752;
+    static public int staticInt19753;
+    static public int staticInt19754;
+    static public int staticInt19755;
+    static public int staticInt19756;
+    static public int staticInt19757;
+    static public int staticInt19758;
+    static public int staticInt19759;
+    static public int staticInt19760;
+    static public int staticInt19761;
+    static public int staticInt19762;
+    static public int staticInt19763;
+    static public int staticInt19764;
+    static public int staticInt19765;
+    static public int staticInt19766;
+    static public int staticInt19767;
+    static public int staticInt19768;
+    static public int staticInt19769;
+    static public int staticInt19770;
+    static public int staticInt19771;
+    static public int staticInt19772;
+    static public int staticInt19773;
+    static public int staticInt19774;
+    static public int staticInt19775;
+    static public int staticInt19776;
+    static public int staticInt19777;
+    static public int staticInt19778;
+    static public int staticInt19779;
+    static public int staticInt19780;
+    static public int staticInt19781;
+    static public int staticInt19782;
+    static public int staticInt19783;
+    static public int staticInt19784;
+    static public int staticInt19785;
+    static public int staticInt19786;
+    static public int staticInt19787;
+    static public int staticInt19788;
+    static public int staticInt19789;
+    static public int staticInt19790;
+    static public int staticInt19791;
+    static public int staticInt19792;
+    static public int staticInt19793;
+    static public int staticInt19794;
+    static public int staticInt19795;
+    static public int staticInt19796;
+    static public int staticInt19797;
+    static public int staticInt19798;
+    static public int staticInt19799;
+    static public int staticInt19800;
+    static public int staticInt19801;
+    static public int staticInt19802;
+    static public int staticInt19803;
+    static public int staticInt19804;
+    static public int staticInt19805;
+    static public int staticInt19806;
+    static public int staticInt19807;
+    static public int staticInt19808;
+    static public int staticInt19809;
+    static public int staticInt19810;
+    static public int staticInt19811;
+    static public int staticInt19812;
+    static public int staticInt19813;
+    static public int staticInt19814;
+    static public int staticInt19815;
+    static public int staticInt19816;
+    static public int staticInt19817;
+    static public int staticInt19818;
+    static public int staticInt19819;
+    static public int staticInt19820;
+    static public int staticInt19821;
+    static public int staticInt19822;
+    static public int staticInt19823;
+    static public int staticInt19824;
+    static public int staticInt19825;
+    static public int staticInt19826;
+    static public int staticInt19827;
+    static public int staticInt19828;
+    static public int staticInt19829;
+    static public int staticInt19830;
+    static public int staticInt19831;
+    static public int staticInt19832;
+    static public int staticInt19833;
+    static public int staticInt19834;
+    static public int staticInt19835;
+    static public int staticInt19836;
+    static public int staticInt19837;
+    static public int staticInt19838;
+    static public int staticInt19839;
+    static public int staticInt19840;
+    static public int staticInt19841;
+    static public int staticInt19842;
+    static public int staticInt19843;
+    static public int staticInt19844;
+    static public int staticInt19845;
+    static public int staticInt19846;
+    static public int staticInt19847;
+    static public int staticInt19848;
+    static public int staticInt19849;
+    static public int staticInt19850;
+    static public int staticInt19851;
+    static public int staticInt19852;
+    static public int staticInt19853;
+    static public int staticInt19854;
+    static public int staticInt19855;
+    static public int staticInt19856;
+    static public int staticInt19857;
+    static public int staticInt19858;
+    static public int staticInt19859;
+    static public int staticInt19860;
+    static public int staticInt19861;
+    static public int staticInt19862;
+    static public int staticInt19863;
+    static public int staticInt19864;
+    static public int staticInt19865;
+    static public int staticInt19866;
+    static public int staticInt19867;
+    static public int staticInt19868;
+    static public int staticInt19869;
+    static public int staticInt19870;
+    static public int staticInt19871;
+    static public int staticInt19872;
+    static public int staticInt19873;
+    static public int staticInt19874;
+    static public int staticInt19875;
+    static public int staticInt19876;
+    static public int staticInt19877;
+    static public int staticInt19878;
+    static public int staticInt19879;
+    static public int staticInt19880;
+    static public int staticInt19881;
+    static public int staticInt19882;
+    static public int staticInt19883;
+    static public int staticInt19884;
+    static public int staticInt19885;
+    static public int staticInt19886;
+    static public int staticInt19887;
+    static public int staticInt19888;
+    static public int staticInt19889;
+    static public int staticInt19890;
+    static public int staticInt19891;
+    static public int staticInt19892;
+    static public int staticInt19893;
+    static public int staticInt19894;
+    static public int staticInt19895;
+    static public int staticInt19896;
+    static public int staticInt19897;
+    static public int staticInt19898;
+    static public int staticInt19899;
+    static public int staticInt19900;
+    static public int staticInt19901;
+    static public int staticInt19902;
+    static public int staticInt19903;
+    static public int staticInt19904;
+    static public int staticInt19905;
+    static public int staticInt19906;
+    static public int staticInt19907;
+    static public int staticInt19908;
+    static public int staticInt19909;
+    static public int staticInt19910;
+    static public int staticInt19911;
+    static public int staticInt19912;
+    static public int staticInt19913;
+    static public int staticInt19914;
+    static public int staticInt19915;
+    static public int staticInt19916;
+    static public int staticInt19917;
+    static public int staticInt19918;
+    static public int staticInt19919;
+    static public int staticInt19920;
+    static public int staticInt19921;
+    static public int staticInt19922;
+    static public int staticInt19923;
+    static public int staticInt19924;
+    static public int staticInt19925;
+    static public int staticInt19926;
+    static public int staticInt19927;
+    static public int staticInt19928;
+    static public int staticInt19929;
+    static public int staticInt19930;
+    static public int staticInt19931;
+    static public int staticInt19932;
+    static public int staticInt19933;
+    static public int staticInt19934;
+    static public int staticInt19935;
+    static public int staticInt19936;
+    static public int staticInt19937;
+    static public int staticInt19938;
+    static public int staticInt19939;
+    static public int staticInt19940;
+    static public int staticInt19941;
+    static public int staticInt19942;
+    static public int staticInt19943;
+    static public int staticInt19944;
+    static public int staticInt19945;
+    static public int staticInt19946;
+    static public int staticInt19947;
+    static public int staticInt19948;
+    static public int staticInt19949;
+    static public int staticInt19950;
+    static public int staticInt19951;
+    static public int staticInt19952;
+    static public int staticInt19953;
+    static public int staticInt19954;
+    static public int staticInt19955;
+    static public int staticInt19956;
+    static public int staticInt19957;
+    static public int staticInt19958;
+    static public int staticInt19959;
+    static public int staticInt19960;
+    static public int staticInt19961;
+    static public int staticInt19962;
+    static public int staticInt19963;
+    static public int staticInt19964;
+    static public int staticInt19965;
+    static public int staticInt19966;
+    static public int staticInt19967;
+    static public int staticInt19968;
+    static public int staticInt19969;
+    static public int staticInt19970;
+    static public int staticInt19971;
+    static public int staticInt19972;
+    static public int staticInt19973;
+    static public int staticInt19974;
+    static public int staticInt19975;
+    static public int staticInt19976;
+    static public int staticInt19977;
+    static public int staticInt19978;
+    static public int staticInt19979;
+    static public int staticInt19980;
+    static public int staticInt19981;
+    static public int staticInt19982;
+    static public int staticInt19983;
+    static public int staticInt19984;
+    static public int staticInt19985;
+    static public int staticInt19986;
+    static public int staticInt19987;
+    static public int staticInt19988;
+    static public int staticInt19989;
+    static public int staticInt19990;
+    static public int staticInt19991;
+    static public int staticInt19992;
+    static public int staticInt19993;
+    static public int staticInt19994;
+    static public int staticInt19995;
+    static public int staticInt19996;
+    static public int staticInt19997;
+    static public int staticInt19998;
+    static public int staticInt19999;
+    static public int staticInt20000;
+    static public int staticInt20001;
+    static public int staticInt20002;
+    static public int staticInt20003;
+    static public int staticInt20004;
+    static public int staticInt20005;
+    static public int staticInt20006;
+    static public int staticInt20007;
+    static public int staticInt20008;
+    static public int staticInt20009;
+    static public int staticInt20010;
+    static public int staticInt20011;
+    static public int staticInt20012;
+    static public int staticInt20013;
+    static public int staticInt20014;
+    static public int staticInt20015;
+    static public int staticInt20016;
+    static public int staticInt20017;
+    static public int staticInt20018;
+    static public int staticInt20019;
+    static public int staticInt20020;
+    static public int staticInt20021;
+    static public int staticInt20022;
+    static public int staticInt20023;
+    static public int staticInt20024;
+    static public int staticInt20025;
+    static public int staticInt20026;
+    static public int staticInt20027;
+    static public int staticInt20028;
+    static public int staticInt20029;
+    static public int staticInt20030;
+    static public int staticInt20031;
+    static public int staticInt20032;
+    static public int staticInt20033;
+    static public int staticInt20034;
+    static public int staticInt20035;
+    static public int staticInt20036;
+    static public int staticInt20037;
+    static public int staticInt20038;
+    static public int staticInt20039;
+    static public int staticInt20040;
+    static public int staticInt20041;
+    static public int staticInt20042;
+    static public int staticInt20043;
+    static public int staticInt20044;
+    static public int staticInt20045;
+    static public int staticInt20046;
+    static public int staticInt20047;
+    static public int staticInt20048;
+    static public int staticInt20049;
+    static public int staticInt20050;
+    static public int staticInt20051;
+    static public int staticInt20052;
+    static public int staticInt20053;
+    static public int staticInt20054;
+    static public int staticInt20055;
+    static public int staticInt20056;
+    static public int staticInt20057;
+    static public int staticInt20058;
+    static public int staticInt20059;
+    static public int staticInt20060;
+    static public int staticInt20061;
+    static public int staticInt20062;
+    static public int staticInt20063;
+    static public int staticInt20064;
+    static public int staticInt20065;
+    static public int staticInt20066;
+    static public int staticInt20067;
+    static public int staticInt20068;
+    static public int staticInt20069;
+    static public int staticInt20070;
+    static public int staticInt20071;
+    static public int staticInt20072;
+    static public int staticInt20073;
+    static public int staticInt20074;
+    static public int staticInt20075;
+    static public int staticInt20076;
+    static public int staticInt20077;
+    static public int staticInt20078;
+    static public int staticInt20079;
+    static public int staticInt20080;
+    static public int staticInt20081;
+    static public int staticInt20082;
+    static public int staticInt20083;
+    static public int staticInt20084;
+    static public int staticInt20085;
+    static public int staticInt20086;
+    static public int staticInt20087;
+    static public int staticInt20088;
+    static public int staticInt20089;
+    static public int staticInt20090;
+    static public int staticInt20091;
+    static public int staticInt20092;
+    static public int staticInt20093;
+    static public int staticInt20094;
+    static public int staticInt20095;
+    static public int staticInt20096;
+    static public int staticInt20097;
+    static public int staticInt20098;
+    static public int staticInt20099;
+    static public int staticInt20100;
+    static public int staticInt20101;
+    static public int staticInt20102;
+    static public int staticInt20103;
+    static public int staticInt20104;
+    static public int staticInt20105;
+    static public int staticInt20106;
+    static public int staticInt20107;
+    static public int staticInt20108;
+    static public int staticInt20109;
+    static public int staticInt20110;
+    static public int staticInt20111;
+    static public int staticInt20112;
+    static public int staticInt20113;
+    static public int staticInt20114;
+    static public int staticInt20115;
+    static public int staticInt20116;
+    static public int staticInt20117;
+    static public int staticInt20118;
+    static public int staticInt20119;
+    static public int staticInt20120;
+    static public int staticInt20121;
+    static public int staticInt20122;
+    static public int staticInt20123;
+    static public int staticInt20124;
+    static public int staticInt20125;
+    static public int staticInt20126;
+    static public int staticInt20127;
+    static public int staticInt20128;
+    static public int staticInt20129;
+    static public int staticInt20130;
+    static public int staticInt20131;
+    static public int staticInt20132;
+    static public int staticInt20133;
+    static public int staticInt20134;
+    static public int staticInt20135;
+    static public int staticInt20136;
+    static public int staticInt20137;
+    static public int staticInt20138;
+    static public int staticInt20139;
+    static public int staticInt20140;
+    static public int staticInt20141;
+    static public int staticInt20142;
+    static public int staticInt20143;
+    static public int staticInt20144;
+    static public int staticInt20145;
+    static public int staticInt20146;
+    static public int staticInt20147;
+    static public int staticInt20148;
+    static public int staticInt20149;
+    static public int staticInt20150;
+    static public int staticInt20151;
+    static public int staticInt20152;
+    static public int staticInt20153;
+    static public int staticInt20154;
+    static public int staticInt20155;
+    static public int staticInt20156;
+    static public int staticInt20157;
+    static public int staticInt20158;
+    static public int staticInt20159;
+    static public int staticInt20160;
+    static public int staticInt20161;
+    static public int staticInt20162;
+    static public int staticInt20163;
+    static public int staticInt20164;
+    static public int staticInt20165;
+    static public int staticInt20166;
+    static public int staticInt20167;
+    static public int staticInt20168;
+    static public int staticInt20169;
+    static public int staticInt20170;
+    static public int staticInt20171;
+    static public int staticInt20172;
+    static public int staticInt20173;
+    static public int staticInt20174;
+    static public int staticInt20175;
+    static public int staticInt20176;
+    static public int staticInt20177;
+    static public int staticInt20178;
+    static public int staticInt20179;
+    static public int staticInt20180;
+    static public int staticInt20181;
+    static public int staticInt20182;
+    static public int staticInt20183;
+    static public int staticInt20184;
+    static public int staticInt20185;
+    static public int staticInt20186;
+    static public int staticInt20187;
+    static public int staticInt20188;
+    static public int staticInt20189;
+    static public int staticInt20190;
+    static public int staticInt20191;
+    static public int staticInt20192;
+    static public int staticInt20193;
+    static public int staticInt20194;
+    static public int staticInt20195;
+    static public int staticInt20196;
+    static public int staticInt20197;
+    static public int staticInt20198;
+    static public int staticInt20199;
+    static public int staticInt20200;
+    static public int staticInt20201;
+    static public int staticInt20202;
+    static public int staticInt20203;
+    static public int staticInt20204;
+    static public int staticInt20205;
+    static public int staticInt20206;
+    static public int staticInt20207;
+    static public int staticInt20208;
+    static public int staticInt20209;
+    static public int staticInt20210;
+    static public int staticInt20211;
+    static public int staticInt20212;
+    static public int staticInt20213;
+    static public int staticInt20214;
+    static public int staticInt20215;
+    static public int staticInt20216;
+    static public int staticInt20217;
+    static public int staticInt20218;
+    static public int staticInt20219;
+    static public int staticInt20220;
+    static public int staticInt20221;
+    static public int staticInt20222;
+    static public int staticInt20223;
+    static public int staticInt20224;
+    static public int staticInt20225;
+    static public int staticInt20226;
+    static public int staticInt20227;
+    static public int staticInt20228;
+    static public int staticInt20229;
+    static public int staticInt20230;
+    static public int staticInt20231;
+    static public int staticInt20232;
+    static public int staticInt20233;
+    static public int staticInt20234;
+    static public int staticInt20235;
+    static public int staticInt20236;
+    static public int staticInt20237;
+    static public int staticInt20238;
+    static public int staticInt20239;
+    static public int staticInt20240;
+    static public int staticInt20241;
+    static public int staticInt20242;
+    static public int staticInt20243;
+    static public int staticInt20244;
+    static public int staticInt20245;
+    static public int staticInt20246;
+    static public int staticInt20247;
+    static public int staticInt20248;
+    static public int staticInt20249;
+    static public int staticInt20250;
+    static public int staticInt20251;
+    static public int staticInt20252;
+    static public int staticInt20253;
+    static public int staticInt20254;
+    static public int staticInt20255;
+    static public int staticInt20256;
+    static public int staticInt20257;
+    static public int staticInt20258;
+    static public int staticInt20259;
+    static public int staticInt20260;
+    static public int staticInt20261;
+    static public int staticInt20262;
+    static public int staticInt20263;
+    static public int staticInt20264;
+    static public int staticInt20265;
+    static public int staticInt20266;
+    static public int staticInt20267;
+    static public int staticInt20268;
+    static public int staticInt20269;
+    static public int staticInt20270;
+    static public int staticInt20271;
+    static public int staticInt20272;
+    static public int staticInt20273;
+    static public int staticInt20274;
+    static public int staticInt20275;
+    static public int staticInt20276;
+    static public int staticInt20277;
+    static public int staticInt20278;
+    static public int staticInt20279;
+    static public int staticInt20280;
+    static public int staticInt20281;
+    static public int staticInt20282;
+    static public int staticInt20283;
+    static public int staticInt20284;
+    static public int staticInt20285;
+    static public int staticInt20286;
+    static public int staticInt20287;
+    static public int staticInt20288;
+    static public int staticInt20289;
+    static public int staticInt20290;
+    static public int staticInt20291;
+    static public int staticInt20292;
+    static public int staticInt20293;
+    static public int staticInt20294;
+    static public int staticInt20295;
+    static public int staticInt20296;
+    static public int staticInt20297;
+    static public int staticInt20298;
+    static public int staticInt20299;
+    static public int staticInt20300;
+    static public int staticInt20301;
+    static public int staticInt20302;
+    static public int staticInt20303;
+    static public int staticInt20304;
+    static public int staticInt20305;
+    static public int staticInt20306;
+    static public int staticInt20307;
+    static public int staticInt20308;
+    static public int staticInt20309;
+    static public int staticInt20310;
+    static public int staticInt20311;
+    static public int staticInt20312;
+    static public int staticInt20313;
+    static public int staticInt20314;
+    static public int staticInt20315;
+    static public int staticInt20316;
+    static public int staticInt20317;
+    static public int staticInt20318;
+    static public int staticInt20319;
+    static public int staticInt20320;
+    static public int staticInt20321;
+    static public int staticInt20322;
+    static public int staticInt20323;
+    static public int staticInt20324;
+    static public int staticInt20325;
+    static public int staticInt20326;
+    static public int staticInt20327;
+    static public int staticInt20328;
+    static public int staticInt20329;
+    static public int staticInt20330;
+    static public int staticInt20331;
+    static public int staticInt20332;
+    static public int staticInt20333;
+    static public int staticInt20334;
+    static public int staticInt20335;
+    static public int staticInt20336;
+    static public int staticInt20337;
+    static public int staticInt20338;
+    static public int staticInt20339;
+    static public int staticInt20340;
+    static public int staticInt20341;
+    static public int staticInt20342;
+    static public int staticInt20343;
+    static public int staticInt20344;
+    static public int staticInt20345;
+    static public int staticInt20346;
+    static public int staticInt20347;
+    static public int staticInt20348;
+    static public int staticInt20349;
+    static public int staticInt20350;
+    static public int staticInt20351;
+    static public int staticInt20352;
+    static public int staticInt20353;
+    static public int staticInt20354;
+    static public int staticInt20355;
+    static public int staticInt20356;
+    static public int staticInt20357;
+    static public int staticInt20358;
+    static public int staticInt20359;
+    static public int staticInt20360;
+    static public int staticInt20361;
+    static public int staticInt20362;
+    static public int staticInt20363;
+    static public int staticInt20364;
+    static public int staticInt20365;
+    static public int staticInt20366;
+    static public int staticInt20367;
+    static public int staticInt20368;
+    static public int staticInt20369;
+    static public int staticInt20370;
+    static public int staticInt20371;
+    static public int staticInt20372;
+    static public int staticInt20373;
+    static public int staticInt20374;
+    static public int staticInt20375;
+    static public int staticInt20376;
+    static public int staticInt20377;
+    static public int staticInt20378;
+    static public int staticInt20379;
+    static public int staticInt20380;
+    static public int staticInt20381;
+    static public int staticInt20382;
+    static public int staticInt20383;
+    static public int staticInt20384;
+    static public int staticInt20385;
+    static public int staticInt20386;
+    static public int staticInt20387;
+    static public int staticInt20388;
+    static public int staticInt20389;
+    static public int staticInt20390;
+    static public int staticInt20391;
+    static public int staticInt20392;
+    static public int staticInt20393;
+    static public int staticInt20394;
+    static public int staticInt20395;
+    static public int staticInt20396;
+    static public int staticInt20397;
+    static public int staticInt20398;
+    static public int staticInt20399;
+    static public int staticInt20400;
+    static public int staticInt20401;
+    static public int staticInt20402;
+    static public int staticInt20403;
+    static public int staticInt20404;
+    static public int staticInt20405;
+    static public int staticInt20406;
+    static public int staticInt20407;
+    static public int staticInt20408;
+    static public int staticInt20409;
+    static public int staticInt20410;
+    static public int staticInt20411;
+    static public int staticInt20412;
+    static public int staticInt20413;
+    static public int staticInt20414;
+    static public int staticInt20415;
+    static public int staticInt20416;
+    static public int staticInt20417;
+    static public int staticInt20418;
+    static public int staticInt20419;
+    static public int staticInt20420;
+    static public int staticInt20421;
+    static public int staticInt20422;
+    static public int staticInt20423;
+    static public int staticInt20424;
+    static public int staticInt20425;
+    static public int staticInt20426;
+    static public int staticInt20427;
+    static public int staticInt20428;
+    static public int staticInt20429;
+    static public int staticInt20430;
+    static public int staticInt20431;
+    static public int staticInt20432;
+    static public int staticInt20433;
+    static public int staticInt20434;
+    static public int staticInt20435;
+    static public int staticInt20436;
+    static public int staticInt20437;
+    static public int staticInt20438;
+    static public int staticInt20439;
+    static public int staticInt20440;
+    static public int staticInt20441;
+    static public int staticInt20442;
+    static public int staticInt20443;
+    static public int staticInt20444;
+    static public int staticInt20445;
+    static public int staticInt20446;
+    static public int staticInt20447;
+    static public int staticInt20448;
+    static public int staticInt20449;
+    static public int staticInt20450;
+    static public int staticInt20451;
+    static public int staticInt20452;
+    static public int staticInt20453;
+    static public int staticInt20454;
+    static public int staticInt20455;
+    static public int staticInt20456;
+    static public int staticInt20457;
+    static public int staticInt20458;
+    static public int staticInt20459;
+    static public int staticInt20460;
+    static public int staticInt20461;
+    static public int staticInt20462;
+    static public int staticInt20463;
+    static public int staticInt20464;
+    static public int staticInt20465;
+    static public int staticInt20466;
+    static public int staticInt20467;
+    static public int staticInt20468;
+    static public int staticInt20469;
+    static public int staticInt20470;
+    static public int staticInt20471;
+    static public int staticInt20472;
+    static public int staticInt20473;
+    static public int staticInt20474;
+    static public int staticInt20475;
+    static public int staticInt20476;
+    static public int staticInt20477;
+    static public int staticInt20478;
+    static public int staticInt20479;
+    static public int staticInt20480;
+    static public int staticInt20481;
+    static public int staticInt20482;
+    static public int staticInt20483;
+    static public int staticInt20484;
+    static public int staticInt20485;
+    static public int staticInt20486;
+    static public int staticInt20487;
+    static public int staticInt20488;
+    static public int staticInt20489;
+    static public int staticInt20490;
+    static public int staticInt20491;
+    static public int staticInt20492;
+    static public int staticInt20493;
+    static public int staticInt20494;
+    static public int staticInt20495;
+    static public int staticInt20496;
+    static public int staticInt20497;
+    static public int staticInt20498;
+    static public int staticInt20499;
+    static public int staticInt20500;
+    static public int staticInt20501;
+    static public int staticInt20502;
+    static public int staticInt20503;
+    static public int staticInt20504;
+    static public int staticInt20505;
+    static public int staticInt20506;
+    static public int staticInt20507;
+    static public int staticInt20508;
+    static public int staticInt20509;
+    static public int staticInt20510;
+    static public int staticInt20511;
+    static public int staticInt20512;
+    static public int staticInt20513;
+    static public int staticInt20514;
+    static public int staticInt20515;
+    static public int staticInt20516;
+    static public int staticInt20517;
+    static public int staticInt20518;
+    static public int staticInt20519;
+    static public int staticInt20520;
+    static public int staticInt20521;
+    static public int staticInt20522;
+    static public int staticInt20523;
+    static public int staticInt20524;
+    static public int staticInt20525;
+    static public int staticInt20526;
+    static public int staticInt20527;
+    static public int staticInt20528;
+    static public int staticInt20529;
+    static public int staticInt20530;
+    static public int staticInt20531;
+    static public int staticInt20532;
+    static public int staticInt20533;
+    static public int staticInt20534;
+    static public int staticInt20535;
+    static public int staticInt20536;
+    static public int staticInt20537;
+    static public int staticInt20538;
+    static public int staticInt20539;
+    static public int staticInt20540;
+    static public int staticInt20541;
+    static public int staticInt20542;
+    static public int staticInt20543;
+    static public int staticInt20544;
+    static public int staticInt20545;
+    static public int staticInt20546;
+    static public int staticInt20547;
+    static public int staticInt20548;
+    static public int staticInt20549;
+    static public int staticInt20550;
+    static public int staticInt20551;
+    static public int staticInt20552;
+    static public int staticInt20553;
+    static public int staticInt20554;
+    static public int staticInt20555;
+    static public int staticInt20556;
+    static public int staticInt20557;
+    static public int staticInt20558;
+    static public int staticInt20559;
+    static public int staticInt20560;
+    static public int staticInt20561;
+    static public int staticInt20562;
+    static public int staticInt20563;
+    static public int staticInt20564;
+    static public int staticInt20565;
+    static public int staticInt20566;
+    static public int staticInt20567;
+    static public int staticInt20568;
+    static public int staticInt20569;
+    static public int staticInt20570;
+    static public int staticInt20571;
+    static public int staticInt20572;
+    static public int staticInt20573;
+    static public int staticInt20574;
+    static public int staticInt20575;
+    static public int staticInt20576;
+    static public int staticInt20577;
+    static public int staticInt20578;
+    static public int staticInt20579;
+    static public int staticInt20580;
+    static public int staticInt20581;
+    static public int staticInt20582;
+    static public int staticInt20583;
+    static public int staticInt20584;
+    static public int staticInt20585;
+    static public int staticInt20586;
+    static public int staticInt20587;
+    static public int staticInt20588;
+    static public int staticInt20589;
+    static public int staticInt20590;
+    static public int staticInt20591;
+    static public int staticInt20592;
+    static public int staticInt20593;
+    static public int staticInt20594;
+    static public int staticInt20595;
+    static public int staticInt20596;
+    static public int staticInt20597;
+    static public int staticInt20598;
+    static public int staticInt20599;
+    static public int staticInt20600;
+    static public int staticInt20601;
+    static public int staticInt20602;
+    static public int staticInt20603;
+    static public int staticInt20604;
+    static public int staticInt20605;
+    static public int staticInt20606;
+    static public int staticInt20607;
+    static public int staticInt20608;
+    static public int staticInt20609;
+    static public int staticInt20610;
+    static public int staticInt20611;
+    static public int staticInt20612;
+    static public int staticInt20613;
+    static public int staticInt20614;
+    static public int staticInt20615;
+    static public int staticInt20616;
+    static public int staticInt20617;
+    static public int staticInt20618;
+    static public int staticInt20619;
+    static public int staticInt20620;
+    static public int staticInt20621;
+    static public int staticInt20622;
+    static public int staticInt20623;
+    static public int staticInt20624;
+    static public int staticInt20625;
+    static public int staticInt20626;
+    static public int staticInt20627;
+    static public int staticInt20628;
+    static public int staticInt20629;
+    static public int staticInt20630;
+    static public int staticInt20631;
+    static public int staticInt20632;
+    static public int staticInt20633;
+    static public int staticInt20634;
+    static public int staticInt20635;
+    static public int staticInt20636;
+    static public int staticInt20637;
+    static public int staticInt20638;
+    static public int staticInt20639;
+    static public int staticInt20640;
+    static public int staticInt20641;
+    static public int staticInt20642;
+    static public int staticInt20643;
+    static public int staticInt20644;
+    static public int staticInt20645;
+    static public int staticInt20646;
+    static public int staticInt20647;
+    static public int staticInt20648;
+    static public int staticInt20649;
+    static public int staticInt20650;
+    static public int staticInt20651;
+    static public int staticInt20652;
+    static public int staticInt20653;
+    static public int staticInt20654;
+    static public int staticInt20655;
+    static public int staticInt20656;
+    static public int staticInt20657;
+    static public int staticInt20658;
+    static public int staticInt20659;
+    static public int staticInt20660;
+    static public int staticInt20661;
+    static public int staticInt20662;
+    static public int staticInt20663;
+    static public int staticInt20664;
+    static public int staticInt20665;
+    static public int staticInt20666;
+    static public int staticInt20667;
+    static public int staticInt20668;
+    static public int staticInt20669;
+    static public int staticInt20670;
+    static public int staticInt20671;
+    static public int staticInt20672;
+    static public int staticInt20673;
+    static public int staticInt20674;
+    static public int staticInt20675;
+    static public int staticInt20676;
+    static public int staticInt20677;
+    static public int staticInt20678;
+    static public int staticInt20679;
+    static public int staticInt20680;
+    static public int staticInt20681;
+    static public int staticInt20682;
+    static public int staticInt20683;
+    static public int staticInt20684;
+    static public int staticInt20685;
+    static public int staticInt20686;
+    static public int staticInt20687;
+    static public int staticInt20688;
+    static public int staticInt20689;
+    static public int staticInt20690;
+    static public int staticInt20691;
+    static public int staticInt20692;
+    static public int staticInt20693;
+    static public int staticInt20694;
+    static public int staticInt20695;
+    static public int staticInt20696;
+    static public int staticInt20697;
+    static public int staticInt20698;
+    static public int staticInt20699;
+    static public int staticInt20700;
+    static public int staticInt20701;
+    static public int staticInt20702;
+    static public int staticInt20703;
+    static public int staticInt20704;
+    static public int staticInt20705;
+    static public int staticInt20706;
+    static public int staticInt20707;
+    static public int staticInt20708;
+    static public int staticInt20709;
+    static public int staticInt20710;
+    static public int staticInt20711;
+    static public int staticInt20712;
+    static public int staticInt20713;
+    static public int staticInt20714;
+    static public int staticInt20715;
+    static public int staticInt20716;
+    static public int staticInt20717;
+    static public int staticInt20718;
+    static public int staticInt20719;
+    static public int staticInt20720;
+    static public int staticInt20721;
+    static public int staticInt20722;
+    static public int staticInt20723;
+    static public int staticInt20724;
+    static public int staticInt20725;
+    static public int staticInt20726;
+    static public int staticInt20727;
+    static public int staticInt20728;
+    static public int staticInt20729;
+    static public int staticInt20730;
+    static public int staticInt20731;
+    static public int staticInt20732;
+    static public int staticInt20733;
+    static public int staticInt20734;
+    static public int staticInt20735;
+    static public int staticInt20736;
+    static public int staticInt20737;
+    static public int staticInt20738;
+    static public int staticInt20739;
+    static public int staticInt20740;
+    static public int staticInt20741;
+    static public int staticInt20742;
+    static public int staticInt20743;
+    static public int staticInt20744;
+    static public int staticInt20745;
+    static public int staticInt20746;
+    static public int staticInt20747;
+    static public int staticInt20748;
+    static public int staticInt20749;
+    static public int staticInt20750;
+    static public int staticInt20751;
+    static public int staticInt20752;
+    static public int staticInt20753;
+    static public int staticInt20754;
+    static public int staticInt20755;
+    static public int staticInt20756;
+    static public int staticInt20757;
+    static public int staticInt20758;
+    static public int staticInt20759;
+    static public int staticInt20760;
+    static public int staticInt20761;
+    static public int staticInt20762;
+    static public int staticInt20763;
+    static public int staticInt20764;
+    static public int staticInt20765;
+    static public int staticInt20766;
+    static public int staticInt20767;
+    static public int staticInt20768;
+    static public int staticInt20769;
+    static public int staticInt20770;
+    static public int staticInt20771;
+    static public int staticInt20772;
+    static public int staticInt20773;
+    static public int staticInt20774;
+    static public int staticInt20775;
+    static public int staticInt20776;
+    static public int staticInt20777;
+    static public int staticInt20778;
+    static public int staticInt20779;
+    static public int staticInt20780;
+    static public int staticInt20781;
+    static public int staticInt20782;
+    static public int staticInt20783;
+    static public int staticInt20784;
+    static public int staticInt20785;
+    static public int staticInt20786;
+    static public int staticInt20787;
+    static public int staticInt20788;
+    static public int staticInt20789;
+    static public int staticInt20790;
+    static public int staticInt20791;
+    static public int staticInt20792;
+    static public int staticInt20793;
+    static public int staticInt20794;
+    static public int staticInt20795;
+    static public int staticInt20796;
+    static public int staticInt20797;
+    static public int staticInt20798;
+    static public int staticInt20799;
+    static public int staticInt20800;
+    static public int staticInt20801;
+    static public int staticInt20802;
+    static public int staticInt20803;
+    static public int staticInt20804;
+    static public int staticInt20805;
+    static public int staticInt20806;
+    static public int staticInt20807;
+    static public int staticInt20808;
+    static public int staticInt20809;
+    static public int staticInt20810;
+    static public int staticInt20811;
+    static public int staticInt20812;
+    static public int staticInt20813;
+    static public int staticInt20814;
+    static public int staticInt20815;
+    static public int staticInt20816;
+    static public int staticInt20817;
+    static public int staticInt20818;
+    static public int staticInt20819;
+    static public int staticInt20820;
+    static public int staticInt20821;
+    static public int staticInt20822;
+    static public int staticInt20823;
+    static public int staticInt20824;
+    static public int staticInt20825;
+    static public int staticInt20826;
+    static public int staticInt20827;
+    static public int staticInt20828;
+    static public int staticInt20829;
+    static public int staticInt20830;
+    static public int staticInt20831;
+    static public int staticInt20832;
+    static public int staticInt20833;
+    static public int staticInt20834;
+    static public int staticInt20835;
+    static public int staticInt20836;
+    static public int staticInt20837;
+    static public int staticInt20838;
+    static public int staticInt20839;
+    static public int staticInt20840;
+    static public int staticInt20841;
+    static public int staticInt20842;
+    static public int staticInt20843;
+    static public int staticInt20844;
+    static public int staticInt20845;
+    static public int staticInt20846;
+    static public int staticInt20847;
+    static public int staticInt20848;
+    static public int staticInt20849;
+    static public int staticInt20850;
+    static public int staticInt20851;
+    static public int staticInt20852;
+    static public int staticInt20853;
+    static public int staticInt20854;
+    static public int staticInt20855;
+    static public int staticInt20856;
+    static public int staticInt20857;
+    static public int staticInt20858;
+    static public int staticInt20859;
+    static public int staticInt20860;
+    static public int staticInt20861;
+    static public int staticInt20862;
+    static public int staticInt20863;
+    static public int staticInt20864;
+    static public int staticInt20865;
+    static public int staticInt20866;
+    static public int staticInt20867;
+    static public int staticInt20868;
+    static public int staticInt20869;
+    static public int staticInt20870;
+    static public int staticInt20871;
+    static public int staticInt20872;
+    static public int staticInt20873;
+    static public int staticInt20874;
+    static public int staticInt20875;
+    static public int staticInt20876;
+    static public int staticInt20877;
+    static public int staticInt20878;
+    static public int staticInt20879;
+    static public int staticInt20880;
+    static public int staticInt20881;
+    static public int staticInt20882;
+    static public int staticInt20883;
+    static public int staticInt20884;
+    static public int staticInt20885;
+    static public int staticInt20886;
+    static public int staticInt20887;
+    static public int staticInt20888;
+    static public int staticInt20889;
+    static public int staticInt20890;
+    static public int staticInt20891;
+    static public int staticInt20892;
+    static public int staticInt20893;
+    static public int staticInt20894;
+    static public int staticInt20895;
+    static public int staticInt20896;
+    static public int staticInt20897;
+    static public int staticInt20898;
+    static public int staticInt20899;
+    static public int staticInt20900;
+    static public int staticInt20901;
+    static public int staticInt20902;
+    static public int staticInt20903;
+    static public int staticInt20904;
+    static public int staticInt20905;
+    static public int staticInt20906;
+    static public int staticInt20907;
+    static public int staticInt20908;
+    static public int staticInt20909;
+    static public int staticInt20910;
+    static public int staticInt20911;
+    static public int staticInt20912;
+    static public int staticInt20913;
+    static public int staticInt20914;
+    static public int staticInt20915;
+    static public int staticInt20916;
+    static public int staticInt20917;
+    static public int staticInt20918;
+    static public int staticInt20919;
+    static public int staticInt20920;
+    static public int staticInt20921;
+    static public int staticInt20922;
+    static public int staticInt20923;
+    static public int staticInt20924;
+    static public int staticInt20925;
+    static public int staticInt20926;
+    static public int staticInt20927;
+    static public int staticInt20928;
+    static public int staticInt20929;
+    static public int staticInt20930;
+    static public int staticInt20931;
+    static public int staticInt20932;
+    static public int staticInt20933;
+    static public int staticInt20934;
+    static public int staticInt20935;
+    static public int staticInt20936;
+    static public int staticInt20937;
+    static public int staticInt20938;
+    static public int staticInt20939;
+    static public int staticInt20940;
+    static public int staticInt20941;
+    static public int staticInt20942;
+    static public int staticInt20943;
+    static public int staticInt20944;
+    static public int staticInt20945;
+    static public int staticInt20946;
+    static public int staticInt20947;
+    static public int staticInt20948;
+    static public int staticInt20949;
+    static public int staticInt20950;
+    static public int staticInt20951;
+    static public int staticInt20952;
+    static public int staticInt20953;
+    static public int staticInt20954;
+    static public int staticInt20955;
+    static public int staticInt20956;
+    static public int staticInt20957;
+    static public int staticInt20958;
+    static public int staticInt20959;
+    static public int staticInt20960;
+    static public int staticInt20961;
+    static public int staticInt20962;
+    static public int staticInt20963;
+    static public int staticInt20964;
+    static public int staticInt20965;
+    static public int staticInt20966;
+    static public int staticInt20967;
+    static public int staticInt20968;
+    static public int staticInt20969;
+    static public int staticInt20970;
+    static public int staticInt20971;
+    static public int staticInt20972;
+    static public int staticInt20973;
+    static public int staticInt20974;
+    static public int staticInt20975;
+    static public int staticInt20976;
+    static public int staticInt20977;
+    static public int staticInt20978;
+    static public int staticInt20979;
+    static public int staticInt20980;
+    static public int staticInt20981;
+    static public int staticInt20982;
+    static public int staticInt20983;
+    static public int staticInt20984;
+    static public int staticInt20985;
+    static public int staticInt20986;
+    static public int staticInt20987;
+    static public int staticInt20988;
+    static public int staticInt20989;
+    static public int staticInt20990;
+    static public int staticInt20991;
+    static public int staticInt20992;
+    static public int staticInt20993;
+    static public int staticInt20994;
+    static public int staticInt20995;
+    static public int staticInt20996;
+    static public int staticInt20997;
+    static public int staticInt20998;
+    static public int staticInt20999;
+    static public int staticInt21000;
+    static public int staticInt21001;
+    static public int staticInt21002;
+    static public int staticInt21003;
+    static public int staticInt21004;
+    static public int staticInt21005;
+    static public int staticInt21006;
+    static public int staticInt21007;
+    static public int staticInt21008;
+    static public int staticInt21009;
+    static public int staticInt21010;
+    static public int staticInt21011;
+    static public int staticInt21012;
+    static public int staticInt21013;
+    static public int staticInt21014;
+    static public int staticInt21015;
+    static public int staticInt21016;
+    static public int staticInt21017;
+    static public int staticInt21018;
+    static public int staticInt21019;
+    static public int staticInt21020;
+    static public int staticInt21021;
+    static public int staticInt21022;
+    static public int staticInt21023;
+    static public int staticInt21024;
+    static public int staticInt21025;
+    static public int staticInt21026;
+    static public int staticInt21027;
+    static public int staticInt21028;
+    static public int staticInt21029;
+    static public int staticInt21030;
+    static public int staticInt21031;
+    static public int staticInt21032;
+    static public int staticInt21033;
+    static public int staticInt21034;
+    static public int staticInt21035;
+    static public int staticInt21036;
+    static public int staticInt21037;
+    static public int staticInt21038;
+    static public int staticInt21039;
+    static public int staticInt21040;
+    static public int staticInt21041;
+    static public int staticInt21042;
+    static public int staticInt21043;
+    static public int staticInt21044;
+    static public int staticInt21045;
+    static public int staticInt21046;
+    static public int staticInt21047;
+    static public int staticInt21048;
+    static public int staticInt21049;
+    static public int staticInt21050;
+    static public int staticInt21051;
+    static public int staticInt21052;
+    static public int staticInt21053;
+    static public int staticInt21054;
+    static public int staticInt21055;
+    static public int staticInt21056;
+    static public int staticInt21057;
+    static public int staticInt21058;
+    static public int staticInt21059;
+    static public int staticInt21060;
+    static public int staticInt21061;
+    static public int staticInt21062;
+    static public int staticInt21063;
+    static public int staticInt21064;
+    static public int staticInt21065;
+    static public int staticInt21066;
+    static public int staticInt21067;
+    static public int staticInt21068;
+    static public int staticInt21069;
+    static public int staticInt21070;
+    static public int staticInt21071;
+    static public int staticInt21072;
+    static public int staticInt21073;
+    static public int staticInt21074;
+    static public int staticInt21075;
+    static public int staticInt21076;
+    static public int staticInt21077;
+    static public int staticInt21078;
+    static public int staticInt21079;
+    static public int staticInt21080;
+    static public int staticInt21081;
+    static public int staticInt21082;
+    static public int staticInt21083;
+    static public int staticInt21084;
+    static public int staticInt21085;
+    static public int staticInt21086;
+    static public int staticInt21087;
+    static public int staticInt21088;
+    static public int staticInt21089;
+    static public int staticInt21090;
+    static public int staticInt21091;
+    static public int staticInt21092;
+    static public int staticInt21093;
+    static public int staticInt21094;
+    static public int staticInt21095;
+    static public int staticInt21096;
+    static public int staticInt21097;
+    static public int staticInt21098;
+    static public int staticInt21099;
+    static public int staticInt21100;
+    static public int staticInt21101;
+    static public int staticInt21102;
+    static public int staticInt21103;
+    static public int staticInt21104;
+    static public int staticInt21105;
+    static public int staticInt21106;
+    static public int staticInt21107;
+    static public int staticInt21108;
+    static public int staticInt21109;
+    static public int staticInt21110;
+    static public int staticInt21111;
+    static public int staticInt21112;
+    static public int staticInt21113;
+    static public int staticInt21114;
+    static public int staticInt21115;
+    static public int staticInt21116;
+    static public int staticInt21117;
+    static public int staticInt21118;
+    static public int staticInt21119;
+    static public int staticInt21120;
+    static public int staticInt21121;
+    static public int staticInt21122;
+    static public int staticInt21123;
+    static public int staticInt21124;
+    static public int staticInt21125;
+    static public int staticInt21126;
+    static public int staticInt21127;
+    static public int staticInt21128;
+    static public int staticInt21129;
+    static public int staticInt21130;
+    static public int staticInt21131;
+    static public int staticInt21132;
+    static public int staticInt21133;
+    static public int staticInt21134;
+    static public int staticInt21135;
+    static public int staticInt21136;
+    static public int staticInt21137;
+    static public int staticInt21138;
+    static public int staticInt21139;
+    static public int staticInt21140;
+    static public int staticInt21141;
+    static public int staticInt21142;
+    static public int staticInt21143;
+    static public int staticInt21144;
+    static public int staticInt21145;
+    static public int staticInt21146;
+    static public int staticInt21147;
+    static public int staticInt21148;
+    static public int staticInt21149;
+    static public int staticInt21150;
+    static public int staticInt21151;
+    static public int staticInt21152;
+    static public int staticInt21153;
+    static public int staticInt21154;
+    static public int staticInt21155;
+    static public int staticInt21156;
+    static public int staticInt21157;
+    static public int staticInt21158;
+    static public int staticInt21159;
+    static public int staticInt21160;
+    static public int staticInt21161;
+    static public int staticInt21162;
+    static public int staticInt21163;
+    static public int staticInt21164;
+    static public int staticInt21165;
+    static public int staticInt21166;
+    static public int staticInt21167;
+    static public int staticInt21168;
+    static public int staticInt21169;
+    static public int staticInt21170;
+    static public int staticInt21171;
+    static public int staticInt21172;
+    static public int staticInt21173;
+    static public int staticInt21174;
+    static public int staticInt21175;
+    static public int staticInt21176;
+    static public int staticInt21177;
+    static public int staticInt21178;
+    static public int staticInt21179;
+    static public int staticInt21180;
+    static public int staticInt21181;
+    static public int staticInt21182;
+    static public int staticInt21183;
+    static public int staticInt21184;
+    static public int staticInt21185;
+    static public int staticInt21186;
+    static public int staticInt21187;
+    static public int staticInt21188;
+    static public int staticInt21189;
+    static public int staticInt21190;
+    static public int staticInt21191;
+    static public int staticInt21192;
+    static public int staticInt21193;
+    static public int staticInt21194;
+    static public int staticInt21195;
+    static public int staticInt21196;
+    static public int staticInt21197;
+    static public int staticInt21198;
+    static public int staticInt21199;
+    static public int staticInt21200;
+    static public int staticInt21201;
+    static public int staticInt21202;
+    static public int staticInt21203;
+    static public int staticInt21204;
+    static public int staticInt21205;
+    static public int staticInt21206;
+    static public int staticInt21207;
+    static public int staticInt21208;
+    static public int staticInt21209;
+    static public int staticInt21210;
+    static public int staticInt21211;
+    static public int staticInt21212;
+    static public int staticInt21213;
+    static public int staticInt21214;
+    static public int staticInt21215;
+    static public int staticInt21216;
+    static public int staticInt21217;
+    static public int staticInt21218;
+    static public int staticInt21219;
+    static public int staticInt21220;
+    static public int staticInt21221;
+    static public int staticInt21222;
+    static public int staticInt21223;
+    static public int staticInt21224;
+    static public int staticInt21225;
+    static public int staticInt21226;
+    static public int staticInt21227;
+    static public int staticInt21228;
+    static public int staticInt21229;
+    static public int staticInt21230;
+    static public int staticInt21231;
+    static public int staticInt21232;
+    static public int staticInt21233;
+    static public int staticInt21234;
+    static public int staticInt21235;
+    static public int staticInt21236;
+    static public int staticInt21237;
+    static public int staticInt21238;
+    static public int staticInt21239;
+    static public int staticInt21240;
+    static public int staticInt21241;
+    static public int staticInt21242;
+    static public int staticInt21243;
+    static public int staticInt21244;
+    static public int staticInt21245;
+    static public int staticInt21246;
+    static public int staticInt21247;
+    static public int staticInt21248;
+    static public int staticInt21249;
+    static public int staticInt21250;
+    static public int staticInt21251;
+    static public int staticInt21252;
+    static public int staticInt21253;
+    static public int staticInt21254;
+    static public int staticInt21255;
+    static public int staticInt21256;
+    static public int staticInt21257;
+    static public int staticInt21258;
+    static public int staticInt21259;
+    static public int staticInt21260;
+    static public int staticInt21261;
+    static public int staticInt21262;
+    static public int staticInt21263;
+    static public int staticInt21264;
+    static public int staticInt21265;
+    static public int staticInt21266;
+    static public int staticInt21267;
+    static public int staticInt21268;
+    static public int staticInt21269;
+    static public int staticInt21270;
+    static public int staticInt21271;
+    static public int staticInt21272;
+    static public int staticInt21273;
+    static public int staticInt21274;
+    static public int staticInt21275;
+    static public int staticInt21276;
+    static public int staticInt21277;
+    static public int staticInt21278;
+    static public int staticInt21279;
+    static public int staticInt21280;
+    static public int staticInt21281;
+    static public int staticInt21282;
+    static public int staticInt21283;
+    static public int staticInt21284;
+    static public int staticInt21285;
+    static public int staticInt21286;
+    static public int staticInt21287;
+    static public int staticInt21288;
+    static public int staticInt21289;
+    static public int staticInt21290;
+    static public int staticInt21291;
+    static public int staticInt21292;
+    static public int staticInt21293;
+    static public int staticInt21294;
+    static public int staticInt21295;
+    static public int staticInt21296;
+    static public int staticInt21297;
+    static public int staticInt21298;
+    static public int staticInt21299;
+    static public int staticInt21300;
+    static public int staticInt21301;
+    static public int staticInt21302;
+    static public int staticInt21303;
+    static public int staticInt21304;
+    static public int staticInt21305;
+    static public int staticInt21306;
+    static public int staticInt21307;
+    static public int staticInt21308;
+    static public int staticInt21309;
+    static public int staticInt21310;
+    static public int staticInt21311;
+    static public int staticInt21312;
+    static public int staticInt21313;
+    static public int staticInt21314;
+    static public int staticInt21315;
+    static public int staticInt21316;
+    static public int staticInt21317;
+    static public int staticInt21318;
+    static public int staticInt21319;
+    static public int staticInt21320;
+    static public int staticInt21321;
+    static public int staticInt21322;
+    static public int staticInt21323;
+    static public int staticInt21324;
+    static public int staticInt21325;
+    static public int staticInt21326;
+    static public int staticInt21327;
+    static public int staticInt21328;
+    static public int staticInt21329;
+    static public int staticInt21330;
+    static public int staticInt21331;
+    static public int staticInt21332;
+    static public int staticInt21333;
+    static public int staticInt21334;
+    static public int staticInt21335;
+    static public int staticInt21336;
+    static public int staticInt21337;
+    static public int staticInt21338;
+    static public int staticInt21339;
+    static public int staticInt21340;
+    static public int staticInt21341;
+    static public int staticInt21342;
+    static public int staticInt21343;
+    static public int staticInt21344;
+    static public int staticInt21345;
+    static public int staticInt21346;
+    static public int staticInt21347;
+    static public int staticInt21348;
+    static public int staticInt21349;
+    static public int staticInt21350;
+    static public int staticInt21351;
+    static public int staticInt21352;
+    static public int staticInt21353;
+    static public int staticInt21354;
+    static public int staticInt21355;
+    static public int staticInt21356;
+    static public int staticInt21357;
+    static public int staticInt21358;
+    static public int staticInt21359;
+    static public int staticInt21360;
+    static public int staticInt21361;
+    static public int staticInt21362;
+    static public int staticInt21363;
+    static public int staticInt21364;
+    static public int staticInt21365;
+    static public int staticInt21366;
+    static public int staticInt21367;
+    static public int staticInt21368;
+    static public int staticInt21369;
+    static public int staticInt21370;
+    static public int staticInt21371;
+    static public int staticInt21372;
+    static public int staticInt21373;
+    static public int staticInt21374;
+    static public int staticInt21375;
+    static public int staticInt21376;
+    static public int staticInt21377;
+    static public int staticInt21378;
+    static public int staticInt21379;
+    static public int staticInt21380;
+    static public int staticInt21381;
+    static public int staticInt21382;
+    static public int staticInt21383;
+    static public int staticInt21384;
+    static public int staticInt21385;
+    static public int staticInt21386;
+    static public int staticInt21387;
+    static public int staticInt21388;
+    static public int staticInt21389;
+    static public int staticInt21390;
+    static public int staticInt21391;
+    static public int staticInt21392;
+    static public int staticInt21393;
+    static public int staticInt21394;
+    static public int staticInt21395;
+    static public int staticInt21396;
+    static public int staticInt21397;
+    static public int staticInt21398;
+    static public int staticInt21399;
+    static public int staticInt21400;
+    static public int staticInt21401;
+    static public int staticInt21402;
+    static public int staticInt21403;
+    static public int staticInt21404;
+    static public int staticInt21405;
+    static public int staticInt21406;
+    static public int staticInt21407;
+    static public int staticInt21408;
+    static public int staticInt21409;
+    static public int staticInt21410;
+    static public int staticInt21411;
+    static public int staticInt21412;
+    static public int staticInt21413;
+    static public int staticInt21414;
+    static public int staticInt21415;
+    static public int staticInt21416;
+    static public int staticInt21417;
+    static public int staticInt21418;
+    static public int staticInt21419;
+    static public int staticInt21420;
+    static public int staticInt21421;
+    static public int staticInt21422;
+    static public int staticInt21423;
+    static public int staticInt21424;
+    static public int staticInt21425;
+    static public int staticInt21426;
+    static public int staticInt21427;
+    static public int staticInt21428;
+    static public int staticInt21429;
+    static public int staticInt21430;
+    static public int staticInt21431;
+    static public int staticInt21432;
+    static public int staticInt21433;
+    static public int staticInt21434;
+    static public int staticInt21435;
+    static public int staticInt21436;
+    static public int staticInt21437;
+    static public int staticInt21438;
+    static public int staticInt21439;
+    static public int staticInt21440;
+    static public int staticInt21441;
+    static public int staticInt21442;
+    static public int staticInt21443;
+    static public int staticInt21444;
+    static public int staticInt21445;
+    static public int staticInt21446;
+    static public int staticInt21447;
+    static public int staticInt21448;
+    static public int staticInt21449;
+    static public int staticInt21450;
+    static public int staticInt21451;
+    static public int staticInt21452;
+    static public int staticInt21453;
+    static public int staticInt21454;
+    static public int staticInt21455;
+    static public int staticInt21456;
+    static public int staticInt21457;
+    static public int staticInt21458;
+    static public int staticInt21459;
+    static public int staticInt21460;
+    static public int staticInt21461;
+    static public int staticInt21462;
+    static public int staticInt21463;
+    static public int staticInt21464;
+    static public int staticInt21465;
+    static public int staticInt21466;
+    static public int staticInt21467;
+    static public int staticInt21468;
+    static public int staticInt21469;
+    static public int staticInt21470;
+    static public int staticInt21471;
+    static public int staticInt21472;
+    static public int staticInt21473;
+    static public int staticInt21474;
+    static public int staticInt21475;
+    static public int staticInt21476;
+    static public int staticInt21477;
+    static public int staticInt21478;
+    static public int staticInt21479;
+    static public int staticInt21480;
+    static public int staticInt21481;
+    static public int staticInt21482;
+    static public int staticInt21483;
+    static public int staticInt21484;
+    static public int staticInt21485;
+    static public int staticInt21486;
+    static public int staticInt21487;
+    static public int staticInt21488;
+    static public int staticInt21489;
+    static public int staticInt21490;
+    static public int staticInt21491;
+    static public int staticInt21492;
+    static public int staticInt21493;
+    static public int staticInt21494;
+    static public int staticInt21495;
+    static public int staticInt21496;
+    static public int staticInt21497;
+    static public int staticInt21498;
+    static public int staticInt21499;
+    static public int staticInt21500;
+    static public int staticInt21501;
+    static public int staticInt21502;
+    static public int staticInt21503;
+    static public int staticInt21504;
+    static public int staticInt21505;
+    static public int staticInt21506;
+    static public int staticInt21507;
+    static public int staticInt21508;
+    static public int staticInt21509;
+    static public int staticInt21510;
+    static public int staticInt21511;
+    static public int staticInt21512;
+    static public int staticInt21513;
+    static public int staticInt21514;
+    static public int staticInt21515;
+    static public int staticInt21516;
+    static public int staticInt21517;
+    static public int staticInt21518;
+    static public int staticInt21519;
+    static public int staticInt21520;
+    static public int staticInt21521;
+    static public int staticInt21522;
+    static public int staticInt21523;
+    static public int staticInt21524;
+    static public int staticInt21525;
+    static public int staticInt21526;
+    static public int staticInt21527;
+    static public int staticInt21528;
+    static public int staticInt21529;
+    static public int staticInt21530;
+    static public int staticInt21531;
+    static public int staticInt21532;
+    static public int staticInt21533;
+    static public int staticInt21534;
+    static public int staticInt21535;
+    static public int staticInt21536;
+    static public int staticInt21537;
+    static public int staticInt21538;
+    static public int staticInt21539;
+    static public int staticInt21540;
+    static public int staticInt21541;
+    static public int staticInt21542;
+    static public int staticInt21543;
+    static public int staticInt21544;
+    static public int staticInt21545;
+    static public int staticInt21546;
+    static public int staticInt21547;
+    static public int staticInt21548;
+    static public int staticInt21549;
+    static public int staticInt21550;
+    static public int staticInt21551;
+    static public int staticInt21552;
+    static public int staticInt21553;
+    static public int staticInt21554;
+    static public int staticInt21555;
+    static public int staticInt21556;
+    static public int staticInt21557;
+    static public int staticInt21558;
+    static public int staticInt21559;
+    static public int staticInt21560;
+    static public int staticInt21561;
+    static public int staticInt21562;
+    static public int staticInt21563;
+    static public int staticInt21564;
+    static public int staticInt21565;
+    static public int staticInt21566;
+    static public int staticInt21567;
+    static public int staticInt21568;
+    static public int staticInt21569;
+    static public int staticInt21570;
+    static public int staticInt21571;
+    static public int staticInt21572;
+    static public int staticInt21573;
+    static public int staticInt21574;
+    static public int staticInt21575;
+    static public int staticInt21576;
+    static public int staticInt21577;
+    static public int staticInt21578;
+    static public int staticInt21579;
+    static public int staticInt21580;
+    static public int staticInt21581;
+    static public int staticInt21582;
+    static public int staticInt21583;
+    static public int staticInt21584;
+    static public int staticInt21585;
+    static public int staticInt21586;
+    static public int staticInt21587;
+    static public int staticInt21588;
+    static public int staticInt21589;
+    static public int staticInt21590;
+    static public int staticInt21591;
+    static public int staticInt21592;
+    static public int staticInt21593;
+    static public int staticInt21594;
+    static public int staticInt21595;
+    static public int staticInt21596;
+    static public int staticInt21597;
+    static public int staticInt21598;
+    static public int staticInt21599;
+    static public int staticInt21600;
+    static public int staticInt21601;
+    static public int staticInt21602;
+    static public int staticInt21603;
+    static public int staticInt21604;
+    static public int staticInt21605;
+    static public int staticInt21606;
+    static public int staticInt21607;
+    static public int staticInt21608;
+    static public int staticInt21609;
+    static public int staticInt21610;
+    static public int staticInt21611;
+    static public int staticInt21612;
+    static public int staticInt21613;
+    static public int staticInt21614;
+    static public int staticInt21615;
+    static public int staticInt21616;
+    static public int staticInt21617;
+    static public int staticInt21618;
+    static public int staticInt21619;
+    static public int staticInt21620;
+    static public int staticInt21621;
+    static public int staticInt21622;
+    static public int staticInt21623;
+    static public int staticInt21624;
+    static public int staticInt21625;
+    static public int staticInt21626;
+    static public int staticInt21627;
+    static public int staticInt21628;
+    static public int staticInt21629;
+    static public int staticInt21630;
+    static public int staticInt21631;
+    static public int staticInt21632;
+    static public int staticInt21633;
+    static public int staticInt21634;
+    static public int staticInt21635;
+    static public int staticInt21636;
+    static public int staticInt21637;
+    static public int staticInt21638;
+    static public int staticInt21639;
+    static public int staticInt21640;
+    static public int staticInt21641;
+    static public int staticInt21642;
+    static public int staticInt21643;
+    static public int staticInt21644;
+    static public int staticInt21645;
+    static public int staticInt21646;
+    static public int staticInt21647;
+    static public int staticInt21648;
+    static public int staticInt21649;
+    static public int staticInt21650;
+    static public int staticInt21651;
+    static public int staticInt21652;
+    static public int staticInt21653;
+    static public int staticInt21654;
+    static public int staticInt21655;
+    static public int staticInt21656;
+    static public int staticInt21657;
+    static public int staticInt21658;
+    static public int staticInt21659;
+    static public int staticInt21660;
+    static public int staticInt21661;
+    static public int staticInt21662;
+    static public int staticInt21663;
+    static public int staticInt21664;
+    static public int staticInt21665;
+    static public int staticInt21666;
+    static public int staticInt21667;
+    static public int staticInt21668;
+    static public int staticInt21669;
+    static public int staticInt21670;
+    static public int staticInt21671;
+    static public int staticInt21672;
+    static public int staticInt21673;
+    static public int staticInt21674;
+    static public int staticInt21675;
+    static public int staticInt21676;
+    static public int staticInt21677;
+    static public int staticInt21678;
+    static public int staticInt21679;
+    static public int staticInt21680;
+    static public int staticInt21681;
+    static public int staticInt21682;
+    static public int staticInt21683;
+    static public int staticInt21684;
+    static public int staticInt21685;
+    static public int staticInt21686;
+    static public int staticInt21687;
+    static public int staticInt21688;
+    static public int staticInt21689;
+    static public int staticInt21690;
+    static public int staticInt21691;
+    static public int staticInt21692;
+    static public int staticInt21693;
+    static public int staticInt21694;
+    static public int staticInt21695;
+    static public int staticInt21696;
+    static public int staticInt21697;
+    static public int staticInt21698;
+    static public int staticInt21699;
+    static public int staticInt21700;
+    static public int staticInt21701;
+    static public int staticInt21702;
+    static public int staticInt21703;
+    static public int staticInt21704;
+    static public int staticInt21705;
+    static public int staticInt21706;
+    static public int staticInt21707;
+    static public int staticInt21708;
+    static public int staticInt21709;
+    static public int staticInt21710;
+    static public int staticInt21711;
+    static public int staticInt21712;
+    static public int staticInt21713;
+    static public int staticInt21714;
+    static public int staticInt21715;
+    static public int staticInt21716;
+    static public int staticInt21717;
+    static public int staticInt21718;
+    static public int staticInt21719;
+    static public int staticInt21720;
+    static public int staticInt21721;
+    static public int staticInt21722;
+    static public int staticInt21723;
+    static public int staticInt21724;
+    static public int staticInt21725;
+    static public int staticInt21726;
+    static public int staticInt21727;
+    static public int staticInt21728;
+    static public int staticInt21729;
+    static public int staticInt21730;
+    static public int staticInt21731;
+    static public int staticInt21732;
+    static public int staticInt21733;
+    static public int staticInt21734;
+    static public int staticInt21735;
+    static public int staticInt21736;
+    static public int staticInt21737;
+    static public int staticInt21738;
+    static public int staticInt21739;
+    static public int staticInt21740;
+    static public int staticInt21741;
+    static public int staticInt21742;
+    static public int staticInt21743;
+    static public int staticInt21744;
+    static public int staticInt21745;
+    static public int staticInt21746;
+    static public int staticInt21747;
+    static public int staticInt21748;
+    static public int staticInt21749;
+    static public int staticInt21750;
+    static public int staticInt21751;
+    static public int staticInt21752;
+    static public int staticInt21753;
+    static public int staticInt21754;
+    static public int staticInt21755;
+    static public int staticInt21756;
+    static public int staticInt21757;
+    static public int staticInt21758;
+    static public int staticInt21759;
+    static public int staticInt21760;
+    static public int staticInt21761;
+    static public int staticInt21762;
+    static public int staticInt21763;
+    static public int staticInt21764;
+    static public int staticInt21765;
+    static public int staticInt21766;
+    static public int staticInt21767;
+    static public int staticInt21768;
+    static public int staticInt21769;
+    static public int staticInt21770;
+    static public int staticInt21771;
+    static public int staticInt21772;
+    static public int staticInt21773;
+    static public int staticInt21774;
+    static public int staticInt21775;
+    static public int staticInt21776;
+    static public int staticInt21777;
+    static public int staticInt21778;
+    static public int staticInt21779;
+    static public int staticInt21780;
+    static public int staticInt21781;
+    static public int staticInt21782;
+    static public int staticInt21783;
+    static public int staticInt21784;
+    static public int staticInt21785;
+    static public int staticInt21786;
+    static public int staticInt21787;
+    static public int staticInt21788;
+    static public int staticInt21789;
+    static public int staticInt21790;
+    static public int staticInt21791;
+    static public int staticInt21792;
+    static public int staticInt21793;
+    static public int staticInt21794;
+    static public int staticInt21795;
+    static public int staticInt21796;
+    static public int staticInt21797;
+    static public int staticInt21798;
+    static public int staticInt21799;
+    static public int staticInt21800;
+    static public int staticInt21801;
+    static public int staticInt21802;
+    static public int staticInt21803;
+    static public int staticInt21804;
+    static public int staticInt21805;
+    static public int staticInt21806;
+    static public int staticInt21807;
+    static public int staticInt21808;
+    static public int staticInt21809;
+    static public int staticInt21810;
+    static public int staticInt21811;
+    static public int staticInt21812;
+    static public int staticInt21813;
+    static public int staticInt21814;
+    static public int staticInt21815;
+    static public int staticInt21816;
+    static public int staticInt21817;
+    static public int staticInt21818;
+    static public int staticInt21819;
+    static public int staticInt21820;
+    static public int staticInt21821;
+    static public int staticInt21822;
+    static public int staticInt21823;
+    static public int staticInt21824;
+    static public int staticInt21825;
+    static public int staticInt21826;
+    static public int staticInt21827;
+    static public int staticInt21828;
+    static public int staticInt21829;
+    static public int staticInt21830;
+    static public int staticInt21831;
+    static public int staticInt21832;
+    static public int staticInt21833;
+    static public int staticInt21834;
+    static public int staticInt21835;
+    static public int staticInt21836;
+    static public int staticInt21837;
+    static public int staticInt21838;
+    static public int staticInt21839;
+    static public int staticInt21840;
+    static public int staticInt21841;
+    static public int staticInt21842;
+    static public int staticInt21843;
+    static public int staticInt21844;
+    static public int staticInt21845;
+    static public int staticInt21846;
+    static public int staticInt21847;
+    static public int staticInt21848;
+    static public int staticInt21849;
+    static public int staticInt21850;
+    static public int staticInt21851;
+    static public int staticInt21852;
+    static public int staticInt21853;
+    static public int staticInt21854;
+    static public int staticInt21855;
+    static public int staticInt21856;
+    static public int staticInt21857;
+    static public int staticInt21858;
+    static public int staticInt21859;
+    static public int staticInt21860;
+    static public int staticInt21861;
+    static public int staticInt21862;
+    static public int staticInt21863;
+    static public int staticInt21864;
+    static public int staticInt21865;
+    static public int staticInt21866;
+    static public int staticInt21867;
+    static public int staticInt21868;
+    static public int staticInt21869;
+    static public int staticInt21870;
+    static public int staticInt21871;
+    static public int staticInt21872;
+    static public int staticInt21873;
+    static public int staticInt21874;
+    static public int staticInt21875;
+    static public int staticInt21876;
+    static public int staticInt21877;
+    static public int staticInt21878;
+    static public int staticInt21879;
+    static public int staticInt21880;
+    static public int staticInt21881;
+    static public int staticInt21882;
+    static public int staticInt21883;
+    static public int staticInt21884;
+    static public int staticInt21885;
+    static public int staticInt21886;
+    static public int staticInt21887;
+    static public int staticInt21888;
+    static public int staticInt21889;
+    static public int staticInt21890;
+    static public int staticInt21891;
+    static public int staticInt21892;
+    static public int staticInt21893;
+    static public int staticInt21894;
+    static public int staticInt21895;
+    static public int staticInt21896;
+    static public int staticInt21897;
+    static public int staticInt21898;
+    static public int staticInt21899;
+    static public int staticInt21900;
+    static public int staticInt21901;
+    static public int staticInt21902;
+    static public int staticInt21903;
+    static public int staticInt21904;
+    static public int staticInt21905;
+    static public int staticInt21906;
+    static public int staticInt21907;
+    static public int staticInt21908;
+    static public int staticInt21909;
+    static public int staticInt21910;
+    static public int staticInt21911;
+    static public int staticInt21912;
+    static public int staticInt21913;
+    static public int staticInt21914;
+    static public int staticInt21915;
+    static public int staticInt21916;
+    static public int staticInt21917;
+    static public int staticInt21918;
+    static public int staticInt21919;
+    static public int staticInt21920;
+    static public int staticInt21921;
+    static public int staticInt21922;
+    static public int staticInt21923;
+    static public int staticInt21924;
+    static public int staticInt21925;
+    static public int staticInt21926;
+    static public int staticInt21927;
+    static public int staticInt21928;
+    static public int staticInt21929;
+    static public int staticInt21930;
+    static public int staticInt21931;
+    static public int staticInt21932;
+    static public int staticInt21933;
+    static public int staticInt21934;
+    static public int staticInt21935;
+    static public int staticInt21936;
+    static public int staticInt21937;
+    static public int staticInt21938;
+    static public int staticInt21939;
+    static public int staticInt21940;
+    static public int staticInt21941;
+    static public int staticInt21942;
+    static public int staticInt21943;
+    static public int staticInt21944;
+    static public int staticInt21945;
+    static public int staticInt21946;
+    static public int staticInt21947;
+    static public int staticInt21948;
+    static public int staticInt21949;
+    static public int staticInt21950;
+    static public int staticInt21951;
+    static public int staticInt21952;
+    static public int staticInt21953;
+    static public int staticInt21954;
+    static public int staticInt21955;
+    static public int staticInt21956;
+    static public int staticInt21957;
+    static public int staticInt21958;
+    static public int staticInt21959;
+    static public int staticInt21960;
+    static public int staticInt21961;
+    static public int staticInt21962;
+    static public int staticInt21963;
+    static public int staticInt21964;
+    static public int staticInt21965;
+    static public int staticInt21966;
+    static public int staticInt21967;
+    static public int staticInt21968;
+    static public int staticInt21969;
+    static public int staticInt21970;
+    static public int staticInt21971;
+    static public int staticInt21972;
+    static public int staticInt21973;
+    static public int staticInt21974;
+    static public int staticInt21975;
+    static public int staticInt21976;
+    static public int staticInt21977;
+    static public int staticInt21978;
+    static public int staticInt21979;
+    static public int staticInt21980;
+    static public int staticInt21981;
+    static public int staticInt21982;
+    static public int staticInt21983;
+    static public int staticInt21984;
+    static public int staticInt21985;
+    static public int staticInt21986;
+    static public int staticInt21987;
+    static public int staticInt21988;
+    static public int staticInt21989;
+    static public int staticInt21990;
+    static public int staticInt21991;
+    static public int staticInt21992;
+    static public int staticInt21993;
+    static public int staticInt21994;
+    static public int staticInt21995;
+    static public int staticInt21996;
+    static public int staticInt21997;
+    static public int staticInt21998;
+    static public int staticInt21999;
+    static public int staticInt22000;
+    static public int staticInt22001;
+    static public int staticInt22002;
+    static public int staticInt22003;
+    static public int staticInt22004;
+    static public int staticInt22005;
+    static public int staticInt22006;
+    static public int staticInt22007;
+    static public int staticInt22008;
+    static public int staticInt22009;
+    static public int staticInt22010;
+    static public int staticInt22011;
+    static public int staticInt22012;
+    static public int staticInt22013;
+    static public int staticInt22014;
+    static public int staticInt22015;
+    static public int staticInt22016;
+    static public int staticInt22017;
+    static public int staticInt22018;
+    static public int staticInt22019;
+    static public int staticInt22020;
+    static public int staticInt22021;
+    static public int staticInt22022;
+    static public int staticInt22023;
+    static public int staticInt22024;
+    static public int staticInt22025;
+    static public int staticInt22026;
+    static public int staticInt22027;
+    static public int staticInt22028;
+    static public int staticInt22029;
+    static public int staticInt22030;
+    static public int staticInt22031;
+    static public int staticInt22032;
+    static public int staticInt22033;
+    static public int staticInt22034;
+    static public int staticInt22035;
+    static public int staticInt22036;
+    static public int staticInt22037;
+    static public int staticInt22038;
+    static public int staticInt22039;
+    static public int staticInt22040;
+    static public int staticInt22041;
+    static public int staticInt22042;
+    static public int staticInt22043;
+    static public int staticInt22044;
+    static public int staticInt22045;
+    static public int staticInt22046;
+    static public int staticInt22047;
+    static public int staticInt22048;
+    static public int staticInt22049;
+    static public int staticInt22050;
+    static public int staticInt22051;
+    static public int staticInt22052;
+    static public int staticInt22053;
+    static public int staticInt22054;
+    static public int staticInt22055;
+    static public int staticInt22056;
+    static public int staticInt22057;
+    static public int staticInt22058;
+    static public int staticInt22059;
+    static public int staticInt22060;
+    static public int staticInt22061;
+    static public int staticInt22062;
+    static public int staticInt22063;
+    static public int staticInt22064;
+    static public int staticInt22065;
+    static public int staticInt22066;
+    static public int staticInt22067;
+    static public int staticInt22068;
+    static public int staticInt22069;
+    static public int staticInt22070;
+    static public int staticInt22071;
+    static public int staticInt22072;
+    static public int staticInt22073;
+    static public int staticInt22074;
+    static public int staticInt22075;
+    static public int staticInt22076;
+    static public int staticInt22077;
+    static public int staticInt22078;
+    static public int staticInt22079;
+    static public int staticInt22080;
+    static public int staticInt22081;
+    static public int staticInt22082;
+    static public int staticInt22083;
+    static public int staticInt22084;
+    static public int staticInt22085;
+    static public int staticInt22086;
+    static public int staticInt22087;
+    static public int staticInt22088;
+    static public int staticInt22089;
+    static public int staticInt22090;
+    static public int staticInt22091;
+    static public int staticInt22092;
+    static public int staticInt22093;
+    static public int staticInt22094;
+    static public int staticInt22095;
+    static public int staticInt22096;
+    static public int staticInt22097;
+    static public int staticInt22098;
+    static public int staticInt22099;
+    static public int staticInt22100;
+    static public int staticInt22101;
+    static public int staticInt22102;
+    static public int staticInt22103;
+    static public int staticInt22104;
+    static public int staticInt22105;
+    static public int staticInt22106;
+    static public int staticInt22107;
+    static public int staticInt22108;
+    static public int staticInt22109;
+    static public int staticInt22110;
+    static public int staticInt22111;
+    static public int staticInt22112;
+    static public int staticInt22113;
+    static public int staticInt22114;
+    static public int staticInt22115;
+    static public int staticInt22116;
+    static public int staticInt22117;
+    static public int staticInt22118;
+    static public int staticInt22119;
+    static public int staticInt22120;
+    static public int staticInt22121;
+    static public int staticInt22122;
+    static public int staticInt22123;
+    static public int staticInt22124;
+    static public int staticInt22125;
+    static public int staticInt22126;
+    static public int staticInt22127;
+    static public int staticInt22128;
+    static public int staticInt22129;
+    static public int staticInt22130;
+    static public int staticInt22131;
+    static public int staticInt22132;
+    static public int staticInt22133;
+    static public int staticInt22134;
+    static public int staticInt22135;
+    static public int staticInt22136;
+    static public int staticInt22137;
+    static public int staticInt22138;
+    static public int staticInt22139;
+    static public int staticInt22140;
+    static public int staticInt22141;
+    static public int staticInt22142;
+    static public int staticInt22143;
+    static public int staticInt22144;
+    static public int staticInt22145;
+    static public int staticInt22146;
+    static public int staticInt22147;
+    static public int staticInt22148;
+    static public int staticInt22149;
+    static public int staticInt22150;
+    static public int staticInt22151;
+    static public int staticInt22152;
+    static public int staticInt22153;
+    static public int staticInt22154;
+    static public int staticInt22155;
+    static public int staticInt22156;
+    static public int staticInt22157;
+    static public int staticInt22158;
+    static public int staticInt22159;
+    static public int staticInt22160;
+    static public int staticInt22161;
+    static public int staticInt22162;
+    static public int staticInt22163;
+    static public int staticInt22164;
+    static public int staticInt22165;
+    static public int staticInt22166;
+    static public int staticInt22167;
+    static public int staticInt22168;
+    static public int staticInt22169;
+    static public int staticInt22170;
+    static public int staticInt22171;
+    static public int staticInt22172;
+    static public int staticInt22173;
+    static public int staticInt22174;
+    static public int staticInt22175;
+    static public int staticInt22176;
+    static public int staticInt22177;
+    static public int staticInt22178;
+    static public int staticInt22179;
+    static public int staticInt22180;
+    static public int staticInt22181;
+    static public int staticInt22182;
+    static public int staticInt22183;
+    static public int staticInt22184;
+    static public int staticInt22185;
+    static public int staticInt22186;
+    static public int staticInt22187;
+    static public int staticInt22188;
+    static public int staticInt22189;
+    static public int staticInt22190;
+    static public int staticInt22191;
+    static public int staticInt22192;
+    static public int staticInt22193;
+    static public int staticInt22194;
+    static public int staticInt22195;
+    static public int staticInt22196;
+    static public int staticInt22197;
+    static public int staticInt22198;
+    static public int staticInt22199;
+    static public int staticInt22200;
+    static public int staticInt22201;
+    static public int staticInt22202;
+    static public int staticInt22203;
+    static public int staticInt22204;
+    static public int staticInt22205;
+    static public int staticInt22206;
+    static public int staticInt22207;
+    static public int staticInt22208;
+    static public int staticInt22209;
+    static public int staticInt22210;
+    static public int staticInt22211;
+    static public int staticInt22212;
+    static public int staticInt22213;
+    static public int staticInt22214;
+    static public int staticInt22215;
+    static public int staticInt22216;
+    static public int staticInt22217;
+    static public int staticInt22218;
+    static public int staticInt22219;
+    static public int staticInt22220;
+    static public int staticInt22221;
+    static public int staticInt22222;
+    static public int staticInt22223;
+    static public int staticInt22224;
+    static public int staticInt22225;
+    static public int staticInt22226;
+    static public int staticInt22227;
+    static public int staticInt22228;
+    static public int staticInt22229;
+    static public int staticInt22230;
+    static public int staticInt22231;
+    static public int staticInt22232;
+    static public int staticInt22233;
+    static public int staticInt22234;
+    static public int staticInt22235;
+    static public int staticInt22236;
+    static public int staticInt22237;
+    static public int staticInt22238;
+    static public int staticInt22239;
+    static public int staticInt22240;
+    static public int staticInt22241;
+    static public int staticInt22242;
+    static public int staticInt22243;
+    static public int staticInt22244;
+    static public int staticInt22245;
+    static public int staticInt22246;
+    static public int staticInt22247;
+    static public int staticInt22248;
+    static public int staticInt22249;
+    static public int staticInt22250;
+    static public int staticInt22251;
+    static public int staticInt22252;
+    static public int staticInt22253;
+    static public int staticInt22254;
+    static public int staticInt22255;
+    static public int staticInt22256;
+    static public int staticInt22257;
+    static public int staticInt22258;
+    static public int staticInt22259;
+    static public int staticInt22260;
+    static public int staticInt22261;
+    static public int staticInt22262;
+    static public int staticInt22263;
+    static public int staticInt22264;
+    static public int staticInt22265;
+    static public int staticInt22266;
+    static public int staticInt22267;
+    static public int staticInt22268;
+    static public int staticInt22269;
+    static public int staticInt22270;
+    static public int staticInt22271;
+    static public int staticInt22272;
+    static public int staticInt22273;
+    static public int staticInt22274;
+    static public int staticInt22275;
+    static public int staticInt22276;
+    static public int staticInt22277;
+    static public int staticInt22278;
+    static public int staticInt22279;
+    static public int staticInt22280;
+    static public int staticInt22281;
+    static public int staticInt22282;
+    static public int staticInt22283;
+    static public int staticInt22284;
+    static public int staticInt22285;
+    static public int staticInt22286;
+    static public int staticInt22287;
+    static public int staticInt22288;
+    static public int staticInt22289;
+    static public int staticInt22290;
+    static public int staticInt22291;
+    static public int staticInt22292;
+    static public int staticInt22293;
+    static public int staticInt22294;
+    static public int staticInt22295;
+    static public int staticInt22296;
+    static public int staticInt22297;
+    static public int staticInt22298;
+    static public int staticInt22299;
+    static public int staticInt22300;
+    static public int staticInt22301;
+    static public int staticInt22302;
+    static public int staticInt22303;
+    static public int staticInt22304;
+    static public int staticInt22305;
+    static public int staticInt22306;
+    static public int staticInt22307;
+    static public int staticInt22308;
+    static public int staticInt22309;
+    static public int staticInt22310;
+    static public int staticInt22311;
+    static public int staticInt22312;
+    static public int staticInt22313;
+    static public int staticInt22314;
+    static public int staticInt22315;
+    static public int staticInt22316;
+    static public int staticInt22317;
+    static public int staticInt22318;
+    static public int staticInt22319;
+    static public int staticInt22320;
+    static public int staticInt22321;
+    static public int staticInt22322;
+    static public int staticInt22323;
+    static public int staticInt22324;
+    static public int staticInt22325;
+    static public int staticInt22326;
+    static public int staticInt22327;
+    static public int staticInt22328;
+    static public int staticInt22329;
+    static public int staticInt22330;
+    static public int staticInt22331;
+    static public int staticInt22332;
+    static public int staticInt22333;
+    static public int staticInt22334;
+    static public int staticInt22335;
+    static public int staticInt22336;
+    static public int staticInt22337;
+    static public int staticInt22338;
+    static public int staticInt22339;
+    static public int staticInt22340;
+    static public int staticInt22341;
+    static public int staticInt22342;
+    static public int staticInt22343;
+    static public int staticInt22344;
+    static public int staticInt22345;
+    static public int staticInt22346;
+    static public int staticInt22347;
+    static public int staticInt22348;
+    static public int staticInt22349;
+    static public int staticInt22350;
+    static public int staticInt22351;
+    static public int staticInt22352;
+    static public int staticInt22353;
+    static public int staticInt22354;
+    static public int staticInt22355;
+    static public int staticInt22356;
+    static public int staticInt22357;
+    static public int staticInt22358;
+    static public int staticInt22359;
+    static public int staticInt22360;
+    static public int staticInt22361;
+    static public int staticInt22362;
+    static public int staticInt22363;
+    static public int staticInt22364;
+    static public int staticInt22365;
+    static public int staticInt22366;
+    static public int staticInt22367;
+    static public int staticInt22368;
+    static public int staticInt22369;
+    static public int staticInt22370;
+    static public int staticInt22371;
+    static public int staticInt22372;
+    static public int staticInt22373;
+    static public int staticInt22374;
+    static public int staticInt22375;
+    static public int staticInt22376;
+    static public int staticInt22377;
+    static public int staticInt22378;
+    static public int staticInt22379;
+    static public int staticInt22380;
+    static public int staticInt22381;
+    static public int staticInt22382;
+    static public int staticInt22383;
+    static public int staticInt22384;
+    static public int staticInt22385;
+    static public int staticInt22386;
+    static public int staticInt22387;
+    static public int staticInt22388;
+    static public int staticInt22389;
+    static public int staticInt22390;
+    static public int staticInt22391;
+    static public int staticInt22392;
+    static public int staticInt22393;
+    static public int staticInt22394;
+    static public int staticInt22395;
+    static public int staticInt22396;
+    static public int staticInt22397;
+    static public int staticInt22398;
+    static public int staticInt22399;
+    static public int staticInt22400;
+    static public int staticInt22401;
+    static public int staticInt22402;
+    static public int staticInt22403;
+    static public int staticInt22404;
+    static public int staticInt22405;
+    static public int staticInt22406;
+    static public int staticInt22407;
+    static public int staticInt22408;
+    static public int staticInt22409;
+    static public int staticInt22410;
+    static public int staticInt22411;
+    static public int staticInt22412;
+    static public int staticInt22413;
+    static public int staticInt22414;
+    static public int staticInt22415;
+    static public int staticInt22416;
+    static public int staticInt22417;
+    static public int staticInt22418;
+    static public int staticInt22419;
+    static public int staticInt22420;
+    static public int staticInt22421;
+    static public int staticInt22422;
+    static public int staticInt22423;
+    static public int staticInt22424;
+    static public int staticInt22425;
+    static public int staticInt22426;
+    static public int staticInt22427;
+    static public int staticInt22428;
+    static public int staticInt22429;
+    static public int staticInt22430;
+    static public int staticInt22431;
+    static public int staticInt22432;
+    static public int staticInt22433;
+    static public int staticInt22434;
+    static public int staticInt22435;
+    static public int staticInt22436;
+    static public int staticInt22437;
+    static public int staticInt22438;
+    static public int staticInt22439;
+    static public int staticInt22440;
+    static public int staticInt22441;
+    static public int staticInt22442;
+    static public int staticInt22443;
+    static public int staticInt22444;
+    static public int staticInt22445;
+    static public int staticInt22446;
+    static public int staticInt22447;
+    static public int staticInt22448;
+    static public int staticInt22449;
+    static public int staticInt22450;
+    static public int staticInt22451;
+    static public int staticInt22452;
+    static public int staticInt22453;
+    static public int staticInt22454;
+    static public int staticInt22455;
+    static public int staticInt22456;
+    static public int staticInt22457;
+    static public int staticInt22458;
+    static public int staticInt22459;
+    static public int staticInt22460;
+    static public int staticInt22461;
+    static public int staticInt22462;
+    static public int staticInt22463;
+    static public int staticInt22464;
+    static public int staticInt22465;
+    static public int staticInt22466;
+    static public int staticInt22467;
+    static public int staticInt22468;
+    static public int staticInt22469;
+    static public int staticInt22470;
+    static public int staticInt22471;
+    static public int staticInt22472;
+    static public int staticInt22473;
+    static public int staticInt22474;
+    static public int staticInt22475;
+    static public int staticInt22476;
+    static public int staticInt22477;
+    static public int staticInt22478;
+    static public int staticInt22479;
+    static public int staticInt22480;
+    static public int staticInt22481;
+    static public int staticInt22482;
+    static public int staticInt22483;
+    static public int staticInt22484;
+    static public int staticInt22485;
+    static public int staticInt22486;
+    static public int staticInt22487;
+    static public int staticInt22488;
+    static public int staticInt22489;
+    static public int staticInt22490;
+    static public int staticInt22491;
+    static public int staticInt22492;
+    static public int staticInt22493;
+    static public int staticInt22494;
+    static public int staticInt22495;
+    static public int staticInt22496;
+    static public int staticInt22497;
+    static public int staticInt22498;
+    static public int staticInt22499;
+    static public int staticInt22500;
+    static public int staticInt22501;
+    static public int staticInt22502;
+    static public int staticInt22503;
+    static public int staticInt22504;
+    static public int staticInt22505;
+    static public int staticInt22506;
+    static public int staticInt22507;
+    static public int staticInt22508;
+    static public int staticInt22509;
+    static public int staticInt22510;
+    static public int staticInt22511;
+    static public int staticInt22512;
+    static public int staticInt22513;
+    static public int staticInt22514;
+    static public int staticInt22515;
+    static public int staticInt22516;
+    static public int staticInt22517;
+    static public int staticInt22518;
+    static public int staticInt22519;
+    static public int staticInt22520;
+    static public int staticInt22521;
+    static public int staticInt22522;
+    static public int staticInt22523;
+    static public int staticInt22524;
+    static public int staticInt22525;
+    static public int staticInt22526;
+    static public int staticInt22527;
+    static public int staticInt22528;
+    static public int staticInt22529;
+    static public int staticInt22530;
+    static public int staticInt22531;
+    static public int staticInt22532;
+    static public int staticInt22533;
+    static public int staticInt22534;
+    static public int staticInt22535;
+    static public int staticInt22536;
+    static public int staticInt22537;
+    static public int staticInt22538;
+    static public int staticInt22539;
+    static public int staticInt22540;
+    static public int staticInt22541;
+    static public int staticInt22542;
+    static public int staticInt22543;
+    static public int staticInt22544;
+    static public int staticInt22545;
+    static public int staticInt22546;
+    static public int staticInt22547;
+    static public int staticInt22548;
+    static public int staticInt22549;
+    static public int staticInt22550;
+    static public int staticInt22551;
+    static public int staticInt22552;
+    static public int staticInt22553;
+    static public int staticInt22554;
+    static public int staticInt22555;
+    static public int staticInt22556;
+    static public int staticInt22557;
+    static public int staticInt22558;
+    static public int staticInt22559;
+    static public int staticInt22560;
+    static public int staticInt22561;
+    static public int staticInt22562;
+    static public int staticInt22563;
+    static public int staticInt22564;
+    static public int staticInt22565;
+    static public int staticInt22566;
+    static public int staticInt22567;
+    static public int staticInt22568;
+    static public int staticInt22569;
+    static public int staticInt22570;
+    static public int staticInt22571;
+    static public int staticInt22572;
+    static public int staticInt22573;
+    static public int staticInt22574;
+    static public int staticInt22575;
+    static public int staticInt22576;
+    static public int staticInt22577;
+    static public int staticInt22578;
+    static public int staticInt22579;
+    static public int staticInt22580;
+    static public int staticInt22581;
+    static public int staticInt22582;
+    static public int staticInt22583;
+    static public int staticInt22584;
+    static public int staticInt22585;
+    static public int staticInt22586;
+    static public int staticInt22587;
+    static public int staticInt22588;
+    static public int staticInt22589;
+    static public int staticInt22590;
+    static public int staticInt22591;
+    static public int staticInt22592;
+    static public int staticInt22593;
+    static public int staticInt22594;
+    static public int staticInt22595;
+    static public int staticInt22596;
+    static public int staticInt22597;
+    static public int staticInt22598;
+    static public int staticInt22599;
+    static public int staticInt22600;
+    static public int staticInt22601;
+    static public int staticInt22602;
+    static public int staticInt22603;
+    static public int staticInt22604;
+    static public int staticInt22605;
+    static public int staticInt22606;
+    static public int staticInt22607;
+    static public int staticInt22608;
+    static public int staticInt22609;
+    static public int staticInt22610;
+    static public int staticInt22611;
+    static public int staticInt22612;
+    static public int staticInt22613;
+    static public int staticInt22614;
+    static public int staticInt22615;
+    static public int staticInt22616;
+    static public int staticInt22617;
+    static public int staticInt22618;
+    static public int staticInt22619;
+    static public int staticInt22620;
+    static public int staticInt22621;
+    static public int staticInt22622;
+    static public int staticInt22623;
+    static public int staticInt22624;
+    static public int staticInt22625;
+    static public int staticInt22626;
+    static public int staticInt22627;
+    static public int staticInt22628;
+    static public int staticInt22629;
+    static public int staticInt22630;
+    static public int staticInt22631;
+    static public int staticInt22632;
+    static public int staticInt22633;
+    static public int staticInt22634;
+    static public int staticInt22635;
+    static public int staticInt22636;
+    static public int staticInt22637;
+    static public int staticInt22638;
+    static public int staticInt22639;
+    static public int staticInt22640;
+    static public int staticInt22641;
+    static public int staticInt22642;
+    static public int staticInt22643;
+    static public int staticInt22644;
+    static public int staticInt22645;
+    static public int staticInt22646;
+    static public int staticInt22647;
+    static public int staticInt22648;
+    static public int staticInt22649;
+    static public int staticInt22650;
+    static public int staticInt22651;
+    static public int staticInt22652;
+    static public int staticInt22653;
+    static public int staticInt22654;
+    static public int staticInt22655;
+    static public int staticInt22656;
+    static public int staticInt22657;
+    static public int staticInt22658;
+    static public int staticInt22659;
+    static public int staticInt22660;
+    static public int staticInt22661;
+    static public int staticInt22662;
+    static public int staticInt22663;
+    static public int staticInt22664;
+    static public int staticInt22665;
+    static public int staticInt22666;
+    static public int staticInt22667;
+    static public int staticInt22668;
+    static public int staticInt22669;
+    static public int staticInt22670;
+    static public int staticInt22671;
+    static public int staticInt22672;
+    static public int staticInt22673;
+    static public int staticInt22674;
+    static public int staticInt22675;
+    static public int staticInt22676;
+    static public int staticInt22677;
+    static public int staticInt22678;
+    static public int staticInt22679;
+    static public int staticInt22680;
+    static public int staticInt22681;
+    static public int staticInt22682;
+    static public int staticInt22683;
+    static public int staticInt22684;
+    static public int staticInt22685;
+    static public int staticInt22686;
+    static public int staticInt22687;
+    static public int staticInt22688;
+    static public int staticInt22689;
+    static public int staticInt22690;
+    static public int staticInt22691;
+    static public int staticInt22692;
+    static public int staticInt22693;
+    static public int staticInt22694;
+    static public int staticInt22695;
+    static public int staticInt22696;
+    static public int staticInt22697;
+    static public int staticInt22698;
+    static public int staticInt22699;
+    static public int staticInt22700;
+    static public int staticInt22701;
+    static public int staticInt22702;
+    static public int staticInt22703;
+    static public int staticInt22704;
+    static public int staticInt22705;
+    static public int staticInt22706;
+    static public int staticInt22707;
+    static public int staticInt22708;
+    static public int staticInt22709;
+    static public int staticInt22710;
+    static public int staticInt22711;
+    static public int staticInt22712;
+    static public int staticInt22713;
+    static public int staticInt22714;
+    static public int staticInt22715;
+    static public int staticInt22716;
+    static public int staticInt22717;
+    static public int staticInt22718;
+    static public int staticInt22719;
+    static public int staticInt22720;
+    static public int staticInt22721;
+    static public int staticInt22722;
+    static public int staticInt22723;
+    static public int staticInt22724;
+    static public int staticInt22725;
+    static public int staticInt22726;
+    static public int staticInt22727;
+    static public int staticInt22728;
+    static public int staticInt22729;
+    static public int staticInt22730;
+    static public int staticInt22731;
+    static public int staticInt22732;
+    static public int staticInt22733;
+    static public int staticInt22734;
+    static public int staticInt22735;
+    static public int staticInt22736;
+    static public int staticInt22737;
+    static public int staticInt22738;
+    static public int staticInt22739;
+    static public int staticInt22740;
+    static public int staticInt22741;
+    static public int staticInt22742;
+    static public int staticInt22743;
+    static public int staticInt22744;
+    static public int staticInt22745;
+    static public int staticInt22746;
+    static public int staticInt22747;
+    static public int staticInt22748;
+    static public int staticInt22749;
+    static public int staticInt22750;
+    static public int staticInt22751;
+    static public int staticInt22752;
+    static public int staticInt22753;
+    static public int staticInt22754;
+    static public int staticInt22755;
+    static public int staticInt22756;
+    static public int staticInt22757;
+    static public int staticInt22758;
+    static public int staticInt22759;
+    static public int staticInt22760;
+    static public int staticInt22761;
+    static public int staticInt22762;
+    static public int staticInt22763;
+    static public int staticInt22764;
+    static public int staticInt22765;
+    static public int staticInt22766;
+    static public int staticInt22767;
+    static public int staticInt22768;
+    static public int staticInt22769;
+    static public int staticInt22770;
+    static public int staticInt22771;
+    static public int staticInt22772;
+    static public int staticInt22773;
+    static public int staticInt22774;
+    static public int staticInt22775;
+    static public int staticInt22776;
+    static public int staticInt22777;
+    static public int staticInt22778;
+    static public int staticInt22779;
+    static public int staticInt22780;
+    static public int staticInt22781;
+    static public int staticInt22782;
+    static public int staticInt22783;
+    static public int staticInt22784;
+    static public int staticInt22785;
+    static public int staticInt22786;
+    static public int staticInt22787;
+    static public int staticInt22788;
+    static public int staticInt22789;
+    static public int staticInt22790;
+    static public int staticInt22791;
+    static public int staticInt22792;
+    static public int staticInt22793;
+    static public int staticInt22794;
+    static public int staticInt22795;
+    static public int staticInt22796;
+    static public int staticInt22797;
+    static public int staticInt22798;
+    static public int staticInt22799;
+    static public int staticInt22800;
+    static public int staticInt22801;
+    static public int staticInt22802;
+    static public int staticInt22803;
+    static public int staticInt22804;
+    static public int staticInt22805;
+    static public int staticInt22806;
+    static public int staticInt22807;
+    static public int staticInt22808;
+    static public int staticInt22809;
+    static public int staticInt22810;
+    static public int staticInt22811;
+    static public int staticInt22812;
+    static public int staticInt22813;
+    static public int staticInt22814;
+    static public int staticInt22815;
+    static public int staticInt22816;
+    static public int staticInt22817;
+    static public int staticInt22818;
+    static public int staticInt22819;
+    static public int staticInt22820;
+    static public int staticInt22821;
+    static public int staticInt22822;
+    static public int staticInt22823;
+    static public int staticInt22824;
+    static public int staticInt22825;
+    static public int staticInt22826;
+    static public int staticInt22827;
+    static public int staticInt22828;
+    static public int staticInt22829;
+    static public int staticInt22830;
+    static public int staticInt22831;
+    static public int staticInt22832;
+    static public int staticInt22833;
+    static public int staticInt22834;
+    static public int staticInt22835;
+    static public int staticInt22836;
+    static public int staticInt22837;
+    static public int staticInt22838;
+    static public int staticInt22839;
+    static public int staticInt22840;
+    static public int staticInt22841;
+    static public int staticInt22842;
+    static public int staticInt22843;
+    static public int staticInt22844;
+    static public int staticInt22845;
+    static public int staticInt22846;
+    static public int staticInt22847;
+    static public int staticInt22848;
+    static public int staticInt22849;
+    static public int staticInt22850;
+    static public int staticInt22851;
+    static public int staticInt22852;
+    static public int staticInt22853;
+    static public int staticInt22854;
+    static public int staticInt22855;
+    static public int staticInt22856;
+    static public int staticInt22857;
+    static public int staticInt22858;
+    static public int staticInt22859;
+    static public int staticInt22860;
+    static public int staticInt22861;
+    static public int staticInt22862;
+    static public int staticInt22863;
+    static public int staticInt22864;
+    static public int staticInt22865;
+    static public int staticInt22866;
+    static public int staticInt22867;
+    static public int staticInt22868;
+    static public int staticInt22869;
+    static public int staticInt22870;
+    static public int staticInt22871;
+    static public int staticInt22872;
+    static public int staticInt22873;
+    static public int staticInt22874;
+    static public int staticInt22875;
+    static public int staticInt22876;
+    static public int staticInt22877;
+    static public int staticInt22878;
+    static public int staticInt22879;
+    static public int staticInt22880;
+    static public int staticInt22881;
+    static public int staticInt22882;
+    static public int staticInt22883;
+    static public int staticInt22884;
+    static public int staticInt22885;
+    static public int staticInt22886;
+    static public int staticInt22887;
+    static public int staticInt22888;
+    static public int staticInt22889;
+    static public int staticInt22890;
+    static public int staticInt22891;
+    static public int staticInt22892;
+    static public int staticInt22893;
+    static public int staticInt22894;
+    static public int staticInt22895;
+    static public int staticInt22896;
+    static public int staticInt22897;
+    static public int staticInt22898;
+    static public int staticInt22899;
+    static public int staticInt22900;
+    static public int staticInt22901;
+    static public int staticInt22902;
+    static public int staticInt22903;
+    static public int staticInt22904;
+    static public int staticInt22905;
+    static public int staticInt22906;
+    static public int staticInt22907;
+    static public int staticInt22908;
+    static public int staticInt22909;
+    static public int staticInt22910;
+    static public int staticInt22911;
+    static public int staticInt22912;
+    static public int staticInt22913;
+    static public int staticInt22914;
+    static public int staticInt22915;
+    static public int staticInt22916;
+    static public int staticInt22917;
+    static public int staticInt22918;
+    static public int staticInt22919;
+    static public int staticInt22920;
+    static public int staticInt22921;
+    static public int staticInt22922;
+    static public int staticInt22923;
+    static public int staticInt22924;
+    static public int staticInt22925;
+    static public int staticInt22926;
+    static public int staticInt22927;
+    static public int staticInt22928;
+    static public int staticInt22929;
+    static public int staticInt22930;
+    static public int staticInt22931;
+    static public int staticInt22932;
+    static public int staticInt22933;
+    static public int staticInt22934;
+    static public int staticInt22935;
+    static public int staticInt22936;
+    static public int staticInt22937;
+    static public int staticInt22938;
+    static public int staticInt22939;
+    static public int staticInt22940;
+    static public int staticInt22941;
+    static public int staticInt22942;
+    static public int staticInt22943;
+    static public int staticInt22944;
+    static public int staticInt22945;
+    static public int staticInt22946;
+    static public int staticInt22947;
+    static public int staticInt22948;
+    static public int staticInt22949;
+    static public int staticInt22950;
+    static public int staticInt22951;
+    static public int staticInt22952;
+    static public int staticInt22953;
+    static public int staticInt22954;
+    static public int staticInt22955;
+    static public int staticInt22956;
+    static public int staticInt22957;
+    static public int staticInt22958;
+    static public int staticInt22959;
+    static public int staticInt22960;
+    static public int staticInt22961;
+    static public int staticInt22962;
+    static public int staticInt22963;
+    static public int staticInt22964;
+    static public int staticInt22965;
+    static public int staticInt22966;
+    static public int staticInt22967;
+    static public int staticInt22968;
+    static public int staticInt22969;
+    static public int staticInt22970;
+    static public int staticInt22971;
+    static public int staticInt22972;
+    static public int staticInt22973;
+    static public int staticInt22974;
+    static public int staticInt22975;
+    static public int staticInt22976;
+    static public int staticInt22977;
+    static public int staticInt22978;
+    static public int staticInt22979;
+    static public int staticInt22980;
+    static public int staticInt22981;
+    static public int staticInt22982;
+    static public int staticInt22983;
+    static public int staticInt22984;
+    static public int staticInt22985;
+    static public int staticInt22986;
+    static public int staticInt22987;
+    static public int staticInt22988;
+    static public int staticInt22989;
+    static public int staticInt22990;
+    static public int staticInt22991;
+    static public int staticInt22992;
+    static public int staticInt22993;
+    static public int staticInt22994;
+    static public int staticInt22995;
+    static public int staticInt22996;
+    static public int staticInt22997;
+    static public int staticInt22998;
+    static public int staticInt22999;
+    static public int staticInt23000;
+    static public int staticInt23001;
+    static public int staticInt23002;
+    static public int staticInt23003;
+    static public int staticInt23004;
+    static public int staticInt23005;
+    static public int staticInt23006;
+    static public int staticInt23007;
+    static public int staticInt23008;
+    static public int staticInt23009;
+    static public int staticInt23010;
+    static public int staticInt23011;
+    static public int staticInt23012;
+    static public int staticInt23013;
+    static public int staticInt23014;
+    static public int staticInt23015;
+    static public int staticInt23016;
+    static public int staticInt23017;
+    static public int staticInt23018;
+    static public int staticInt23019;
+    static public int staticInt23020;
+    static public int staticInt23021;
+    static public int staticInt23022;
+    static public int staticInt23023;
+    static public int staticInt23024;
+    static public int staticInt23025;
+    static public int staticInt23026;
+    static public int staticInt23027;
+    static public int staticInt23028;
+    static public int staticInt23029;
+    static public int staticInt23030;
+    static public int staticInt23031;
+    static public int staticInt23032;
+    static public int staticInt23033;
+    static public int staticInt23034;
+    static public int staticInt23035;
+    static public int staticInt23036;
+    static public int staticInt23037;
+    static public int staticInt23038;
+    static public int staticInt23039;
+    static public int staticInt23040;
+    static public int staticInt23041;
+    static public int staticInt23042;
+    static public int staticInt23043;
+    static public int staticInt23044;
+    static public int staticInt23045;
+    static public int staticInt23046;
+    static public int staticInt23047;
+    static public int staticInt23048;
+    static public int staticInt23049;
+    static public int staticInt23050;
+    static public int staticInt23051;
+    static public int staticInt23052;
+    static public int staticInt23053;
+    static public int staticInt23054;
+    static public int staticInt23055;
+    static public int staticInt23056;
+    static public int staticInt23057;
+    static public int staticInt23058;
+    static public int staticInt23059;
+    static public int staticInt23060;
+    static public int staticInt23061;
+    static public int staticInt23062;
+    static public int staticInt23063;
+    static public int staticInt23064;
+    static public int staticInt23065;
+    static public int staticInt23066;
+    static public int staticInt23067;
+    static public int staticInt23068;
+    static public int staticInt23069;
+    static public int staticInt23070;
+    static public int staticInt23071;
+    static public int staticInt23072;
+    static public int staticInt23073;
+    static public int staticInt23074;
+    static public int staticInt23075;
+    static public int staticInt23076;
+    static public int staticInt23077;
+    static public int staticInt23078;
+    static public int staticInt23079;
+    static public int staticInt23080;
+    static public int staticInt23081;
+    static public int staticInt23082;
+    static public int staticInt23083;
+    static public int staticInt23084;
+    static public int staticInt23085;
+    static public int staticInt23086;
+    static public int staticInt23087;
+    static public int staticInt23088;
+    static public int staticInt23089;
+    static public int staticInt23090;
+    static public int staticInt23091;
+    static public int staticInt23092;
+    static public int staticInt23093;
+    static public int staticInt23094;
+    static public int staticInt23095;
+    static public int staticInt23096;
+    static public int staticInt23097;
+    static public int staticInt23098;
+    static public int staticInt23099;
+    static public int staticInt23100;
+    static public int staticInt23101;
+    static public int staticInt23102;
+    static public int staticInt23103;
+    static public int staticInt23104;
+    static public int staticInt23105;
+    static public int staticInt23106;
+    static public int staticInt23107;
+    static public int staticInt23108;
+    static public int staticInt23109;
+    static public int staticInt23110;
+    static public int staticInt23111;
+    static public int staticInt23112;
+    static public int staticInt23113;
+    static public int staticInt23114;
+    static public int staticInt23115;
+    static public int staticInt23116;
+    static public int staticInt23117;
+    static public int staticInt23118;
+    static public int staticInt23119;
+    static public int staticInt23120;
+    static public int staticInt23121;
+    static public int staticInt23122;
+    static public int staticInt23123;
+    static public int staticInt23124;
+    static public int staticInt23125;
+    static public int staticInt23126;
+    static public int staticInt23127;
+    static public int staticInt23128;
+    static public int staticInt23129;
+    static public int staticInt23130;
+    static public int staticInt23131;
+    static public int staticInt23132;
+    static public int staticInt23133;
+    static public int staticInt23134;
+    static public int staticInt23135;
+    static public int staticInt23136;
+    static public int staticInt23137;
+    static public int staticInt23138;
+    static public int staticInt23139;
+    static public int staticInt23140;
+    static public int staticInt23141;
+    static public int staticInt23142;
+    static public int staticInt23143;
+    static public int staticInt23144;
+    static public int staticInt23145;
+    static public int staticInt23146;
+    static public int staticInt23147;
+    static public int staticInt23148;
+    static public int staticInt23149;
+    static public int staticInt23150;
+    static public int staticInt23151;
+    static public int staticInt23152;
+    static public int staticInt23153;
+    static public int staticInt23154;
+    static public int staticInt23155;
+    static public int staticInt23156;
+    static public int staticInt23157;
+    static public int staticInt23158;
+    static public int staticInt23159;
+    static public int staticInt23160;
+    static public int staticInt23161;
+    static public int staticInt23162;
+    static public int staticInt23163;
+    static public int staticInt23164;
+    static public int staticInt23165;
+    static public int staticInt23166;
+    static public int staticInt23167;
+    static public int staticInt23168;
+    static public int staticInt23169;
+    static public int staticInt23170;
+    static public int staticInt23171;
+    static public int staticInt23172;
+    static public int staticInt23173;
+    static public int staticInt23174;
+    static public int staticInt23175;
+    static public int staticInt23176;
+    static public int staticInt23177;
+    static public int staticInt23178;
+    static public int staticInt23179;
+    static public int staticInt23180;
+    static public int staticInt23181;
+    static public int staticInt23182;
+    static public int staticInt23183;
+    static public int staticInt23184;
+    static public int staticInt23185;
+    static public int staticInt23186;
+    static public int staticInt23187;
+    static public int staticInt23188;
+    static public int staticInt23189;
+    static public int staticInt23190;
+    static public int staticInt23191;
+    static public int staticInt23192;
+    static public int staticInt23193;
+    static public int staticInt23194;
+    static public int staticInt23195;
+    static public int staticInt23196;
+    static public int staticInt23197;
+    static public int staticInt23198;
+    static public int staticInt23199;
+    static public int staticInt23200;
+    static public int staticInt23201;
+    static public int staticInt23202;
+    static public int staticInt23203;
+    static public int staticInt23204;
+    static public int staticInt23205;
+    static public int staticInt23206;
+    static public int staticInt23207;
+    static public int staticInt23208;
+    static public int staticInt23209;
+    static public int staticInt23210;
+    static public int staticInt23211;
+    static public int staticInt23212;
+    static public int staticInt23213;
+    static public int staticInt23214;
+    static public int staticInt23215;
+    static public int staticInt23216;
+    static public int staticInt23217;
+    static public int staticInt23218;
+    static public int staticInt23219;
+    static public int staticInt23220;
+    static public int staticInt23221;
+    static public int staticInt23222;
+    static public int staticInt23223;
+    static public int staticInt23224;
+    static public int staticInt23225;
+    static public int staticInt23226;
+    static public int staticInt23227;
+    static public int staticInt23228;
+    static public int staticInt23229;
+    static public int staticInt23230;
+    static public int staticInt23231;
+    static public int staticInt23232;
+    static public int staticInt23233;
+    static public int staticInt23234;
+    static public int staticInt23235;
+    static public int staticInt23236;
+    static public int staticInt23237;
+    static public int staticInt23238;
+    static public int staticInt23239;
+    static public int staticInt23240;
+    static public int staticInt23241;
+    static public int staticInt23242;
+    static public int staticInt23243;
+    static public int staticInt23244;
+    static public int staticInt23245;
+    static public int staticInt23246;
+    static public int staticInt23247;
+    static public int staticInt23248;
+    static public int staticInt23249;
+    static public int staticInt23250;
+    static public int staticInt23251;
+    static public int staticInt23252;
+    static public int staticInt23253;
+    static public int staticInt23254;
+    static public int staticInt23255;
+    static public int staticInt23256;
+    static public int staticInt23257;
+    static public int staticInt23258;
+    static public int staticInt23259;
+    static public int staticInt23260;
+    static public int staticInt23261;
+    static public int staticInt23262;
+    static public int staticInt23263;
+    static public int staticInt23264;
+    static public int staticInt23265;
+    static public int staticInt23266;
+    static public int staticInt23267;
+    static public int staticInt23268;
+    static public int staticInt23269;
+    static public int staticInt23270;
+    static public int staticInt23271;
+    static public int staticInt23272;
+    static public int staticInt23273;
+    static public int staticInt23274;
+    static public int staticInt23275;
+    static public int staticInt23276;
+    static public int staticInt23277;
+    static public int staticInt23278;
+    static public int staticInt23279;
+    static public int staticInt23280;
+    static public int staticInt23281;
+    static public int staticInt23282;
+    static public int staticInt23283;
+    static public int staticInt23284;
+    static public int staticInt23285;
+    static public int staticInt23286;
+    static public int staticInt23287;
+    static public int staticInt23288;
+    static public int staticInt23289;
+    static public int staticInt23290;
+    static public int staticInt23291;
+    static public int staticInt23292;
+    static public int staticInt23293;
+    static public int staticInt23294;
+    static public int staticInt23295;
+    static public int staticInt23296;
+    static public int staticInt23297;
+    static public int staticInt23298;
+    static public int staticInt23299;
+    static public int staticInt23300;
+    static public int staticInt23301;
+    static public int staticInt23302;
+    static public int staticInt23303;
+    static public int staticInt23304;
+    static public int staticInt23305;
+    static public int staticInt23306;
+    static public int staticInt23307;
+    static public int staticInt23308;
+    static public int staticInt23309;
+    static public int staticInt23310;
+    static public int staticInt23311;
+    static public int staticInt23312;
+    static public int staticInt23313;
+    static public int staticInt23314;
+    static public int staticInt23315;
+    static public int staticInt23316;
+    static public int staticInt23317;
+    static public int staticInt23318;
+    static public int staticInt23319;
+    static public int staticInt23320;
+    static public int staticInt23321;
+    static public int staticInt23322;
+    static public int staticInt23323;
+    static public int staticInt23324;
+    static public int staticInt23325;
+    static public int staticInt23326;
+    static public int staticInt23327;
+    static public int staticInt23328;
+    static public int staticInt23329;
+    static public int staticInt23330;
+    static public int staticInt23331;
+    static public int staticInt23332;
+    static public int staticInt23333;
+    static public int staticInt23334;
+    static public int staticInt23335;
+    static public int staticInt23336;
+    static public int staticInt23337;
+    static public int staticInt23338;
+    static public int staticInt23339;
+    static public int staticInt23340;
+    static public int staticInt23341;
+    static public int staticInt23342;
+    static public int staticInt23343;
+    static public int staticInt23344;
+    static public int staticInt23345;
+    static public int staticInt23346;
+    static public int staticInt23347;
+    static public int staticInt23348;
+    static public int staticInt23349;
+    static public int staticInt23350;
+    static public int staticInt23351;
+    static public int staticInt23352;
+    static public int staticInt23353;
+    static public int staticInt23354;
+    static public int staticInt23355;
+    static public int staticInt23356;
+    static public int staticInt23357;
+    static public int staticInt23358;
+    static public int staticInt23359;
+    static public int staticInt23360;
+    static public int staticInt23361;
+    static public int staticInt23362;
+    static public int staticInt23363;
+    static public int staticInt23364;
+    static public int staticInt23365;
+    static public int staticInt23366;
+    static public int staticInt23367;
+    static public int staticInt23368;
+    static public int staticInt23369;
+    static public int staticInt23370;
+    static public int staticInt23371;
+    static public int staticInt23372;
+    static public int staticInt23373;
+    static public int staticInt23374;
+    static public int staticInt23375;
+    static public int staticInt23376;
+    static public int staticInt23377;
+    static public int staticInt23378;
+    static public int staticInt23379;
+    static public int staticInt23380;
+    static public int staticInt23381;
+    static public int staticInt23382;
+    static public int staticInt23383;
+    static public int staticInt23384;
+    static public int staticInt23385;
+    static public int staticInt23386;
+    static public int staticInt23387;
+    static public int staticInt23388;
+    static public int staticInt23389;
+    static public int staticInt23390;
+    static public int staticInt23391;
+    static public int staticInt23392;
+    static public int staticInt23393;
+    static public int staticInt23394;
+    static public int staticInt23395;
+    static public int staticInt23396;
+    static public int staticInt23397;
+    static public int staticInt23398;
+    static public int staticInt23399;
+    static public int staticInt23400;
+    static public int staticInt23401;
+    static public int staticInt23402;
+    static public int staticInt23403;
+    static public int staticInt23404;
+    static public int staticInt23405;
+    static public int staticInt23406;
+    static public int staticInt23407;
+    static public int staticInt23408;
+    static public int staticInt23409;
+    static public int staticInt23410;
+    static public int staticInt23411;
+    static public int staticInt23412;
+    static public int staticInt23413;
+    static public int staticInt23414;
+    static public int staticInt23415;
+    static public int staticInt23416;
+    static public int staticInt23417;
+    static public int staticInt23418;
+    static public int staticInt23419;
+    static public int staticInt23420;
+    static public int staticInt23421;
+    static public int staticInt23422;
+    static public int staticInt23423;
+    static public int staticInt23424;
+    static public int staticInt23425;
+    static public int staticInt23426;
+    static public int staticInt23427;
+    static public int staticInt23428;
+    static public int staticInt23429;
+    static public int staticInt23430;
+    static public int staticInt23431;
+    static public int staticInt23432;
+    static public int staticInt23433;
+    static public int staticInt23434;
+    static public int staticInt23435;
+    static public int staticInt23436;
+    static public int staticInt23437;
+    static public int staticInt23438;
+    static public int staticInt23439;
+    static public int staticInt23440;
+    static public int staticInt23441;
+    static public int staticInt23442;
+    static public int staticInt23443;
+    static public int staticInt23444;
+    static public int staticInt23445;
+    static public int staticInt23446;
+    static public int staticInt23447;
+    static public int staticInt23448;
+    static public int staticInt23449;
+    static public int staticInt23450;
+    static public int staticInt23451;
+    static public int staticInt23452;
+    static public int staticInt23453;
+    static public int staticInt23454;
+    static public int staticInt23455;
+    static public int staticInt23456;
+    static public int staticInt23457;
+    static public int staticInt23458;
+    static public int staticInt23459;
+    static public int staticInt23460;
+    static public int staticInt23461;
+    static public int staticInt23462;
+    static public int staticInt23463;
+    static public int staticInt23464;
+    static public int staticInt23465;
+    static public int staticInt23466;
+    static public int staticInt23467;
+    static public int staticInt23468;
+    static public int staticInt23469;
+    static public int staticInt23470;
+    static public int staticInt23471;
+    static public int staticInt23472;
+    static public int staticInt23473;
+    static public int staticInt23474;
+    static public int staticInt23475;
+    static public int staticInt23476;
+    static public int staticInt23477;
+    static public int staticInt23478;
+    static public int staticInt23479;
+    static public int staticInt23480;
+    static public int staticInt23481;
+    static public int staticInt23482;
+    static public int staticInt23483;
+    static public int staticInt23484;
+    static public int staticInt23485;
+    static public int staticInt23486;
+    static public int staticInt23487;
+    static public int staticInt23488;
+    static public int staticInt23489;
+    static public int staticInt23490;
+    static public int staticInt23491;
+    static public int staticInt23492;
+    static public int staticInt23493;
+    static public int staticInt23494;
+    static public int staticInt23495;
+    static public int staticInt23496;
+    static public int staticInt23497;
+    static public int staticInt23498;
+    static public int staticInt23499;
+    static public int staticInt23500;
+    static public int staticInt23501;
+    static public int staticInt23502;
+    static public int staticInt23503;
+    static public int staticInt23504;
+    static public int staticInt23505;
+    static public int staticInt23506;
+    static public int staticInt23507;
+    static public int staticInt23508;
+    static public int staticInt23509;
+    static public int staticInt23510;
+    static public int staticInt23511;
+    static public int staticInt23512;
+    static public int staticInt23513;
+    static public int staticInt23514;
+    static public int staticInt23515;
+    static public int staticInt23516;
+    static public int staticInt23517;
+    static public int staticInt23518;
+    static public int staticInt23519;
+    static public int staticInt23520;
+    static public int staticInt23521;
+    static public int staticInt23522;
+    static public int staticInt23523;
+    static public int staticInt23524;
+    static public int staticInt23525;
+    static public int staticInt23526;
+    static public int staticInt23527;
+    static public int staticInt23528;
+    static public int staticInt23529;
+    static public int staticInt23530;
+    static public int staticInt23531;
+    static public int staticInt23532;
+    static public int staticInt23533;
+    static public int staticInt23534;
+    static public int staticInt23535;
+    static public int staticInt23536;
+    static public int staticInt23537;
+    static public int staticInt23538;
+    static public int staticInt23539;
+    static public int staticInt23540;
+    static public int staticInt23541;
+    static public int staticInt23542;
+    static public int staticInt23543;
+    static public int staticInt23544;
+    static public int staticInt23545;
+    static public int staticInt23546;
+    static public int staticInt23547;
+    static public int staticInt23548;
+    static public int staticInt23549;
+    static public int staticInt23550;
+    static public int staticInt23551;
+    static public int staticInt23552;
+    static public int staticInt23553;
+    static public int staticInt23554;
+    static public int staticInt23555;
+    static public int staticInt23556;
+    static public int staticInt23557;
+    static public int staticInt23558;
+    static public int staticInt23559;
+    static public int staticInt23560;
+    static public int staticInt23561;
+    static public int staticInt23562;
+    static public int staticInt23563;
+    static public int staticInt23564;
+    static public int staticInt23565;
+    static public int staticInt23566;
+    static public int staticInt23567;
+    static public int staticInt23568;
+    static public int staticInt23569;
+    static public int staticInt23570;
+    static public int staticInt23571;
+    static public int staticInt23572;
+    static public int staticInt23573;
+    static public int staticInt23574;
+    static public int staticInt23575;
+    static public int staticInt23576;
+    static public int staticInt23577;
+    static public int staticInt23578;
+    static public int staticInt23579;
+    static public int staticInt23580;
+    static public int staticInt23581;
+    static public int staticInt23582;
+    static public int staticInt23583;
+    static public int staticInt23584;
+    static public int staticInt23585;
+    static public int staticInt23586;
+    static public int staticInt23587;
+    static public int staticInt23588;
+    static public int staticInt23589;
+    static public int staticInt23590;
+    static public int staticInt23591;
+    static public int staticInt23592;
+    static public int staticInt23593;
+    static public int staticInt23594;
+    static public int staticInt23595;
+    static public int staticInt23596;
+    static public int staticInt23597;
+    static public int staticInt23598;
+    static public int staticInt23599;
+    static public int staticInt23600;
+    static public int staticInt23601;
+    static public int staticInt23602;
+    static public int staticInt23603;
+    static public int staticInt23604;
+    static public int staticInt23605;
+    static public int staticInt23606;
+    static public int staticInt23607;
+    static public int staticInt23608;
+    static public int staticInt23609;
+    static public int staticInt23610;
+    static public int staticInt23611;
+    static public int staticInt23612;
+    static public int staticInt23613;
+    static public int staticInt23614;
+    static public int staticInt23615;
+    static public int staticInt23616;
+    static public int staticInt23617;
+    static public int staticInt23618;
+    static public int staticInt23619;
+    static public int staticInt23620;
+    static public int staticInt23621;
+    static public int staticInt23622;
+    static public int staticInt23623;
+    static public int staticInt23624;
+    static public int staticInt23625;
+    static public int staticInt23626;
+    static public int staticInt23627;
+    static public int staticInt23628;
+    static public int staticInt23629;
+    static public int staticInt23630;
+    static public int staticInt23631;
+    static public int staticInt23632;
+    static public int staticInt23633;
+    static public int staticInt23634;
+    static public int staticInt23635;
+    static public int staticInt23636;
+    static public int staticInt23637;
+    static public int staticInt23638;
+    static public int staticInt23639;
+    static public int staticInt23640;
+    static public int staticInt23641;
+    static public int staticInt23642;
+    static public int staticInt23643;
+    static public int staticInt23644;
+    static public int staticInt23645;
+    static public int staticInt23646;
+    static public int staticInt23647;
+    static public int staticInt23648;
+    static public int staticInt23649;
+    static public int staticInt23650;
+    static public int staticInt23651;
+    static public int staticInt23652;
+    static public int staticInt23653;
+    static public int staticInt23654;
+    static public int staticInt23655;
+    static public int staticInt23656;
+    static public int staticInt23657;
+    static public int staticInt23658;
+    static public int staticInt23659;
+    static public int staticInt23660;
+    static public int staticInt23661;
+    static public int staticInt23662;
+    static public int staticInt23663;
+    static public int staticInt23664;
+    static public int staticInt23665;
+    static public int staticInt23666;
+    static public int staticInt23667;
+    static public int staticInt23668;
+    static public int staticInt23669;
+    static public int staticInt23670;
+    static public int staticInt23671;
+    static public int staticInt23672;
+    static public int staticInt23673;
+    static public int staticInt23674;
+    static public int staticInt23675;
+    static public int staticInt23676;
+    static public int staticInt23677;
+    static public int staticInt23678;
+    static public int staticInt23679;
+    static public int staticInt23680;
+    static public int staticInt23681;
+    static public int staticInt23682;
+    static public int staticInt23683;
+    static public int staticInt23684;
+    static public int staticInt23685;
+    static public int staticInt23686;
+    static public int staticInt23687;
+    static public int staticInt23688;
+    static public int staticInt23689;
+    static public int staticInt23690;
+    static public int staticInt23691;
+    static public int staticInt23692;
+    static public int staticInt23693;
+    static public int staticInt23694;
+    static public int staticInt23695;
+    static public int staticInt23696;
+    static public int staticInt23697;
+    static public int staticInt23698;
+    static public int staticInt23699;
+    static public int staticInt23700;
+    static public int staticInt23701;
+    static public int staticInt23702;
+    static public int staticInt23703;
+    static public int staticInt23704;
+    static public int staticInt23705;
+    static public int staticInt23706;
+    static public int staticInt23707;
+    static public int staticInt23708;
+    static public int staticInt23709;
+    static public int staticInt23710;
+    static public int staticInt23711;
+    static public int staticInt23712;
+    static public int staticInt23713;
+    static public int staticInt23714;
+    static public int staticInt23715;
+    static public int staticInt23716;
+    static public int staticInt23717;
+    static public int staticInt23718;
+    static public int staticInt23719;
+    static public int staticInt23720;
+    static public int staticInt23721;
+    static public int staticInt23722;
+    static public int staticInt23723;
+    static public int staticInt23724;
+    static public int staticInt23725;
+    static public int staticInt23726;
+    static public int staticInt23727;
+    static public int staticInt23728;
+    static public int staticInt23729;
+    static public int staticInt23730;
+    static public int staticInt23731;
+    static public int staticInt23732;
+    static public int staticInt23733;
+    static public int staticInt23734;
+    static public int staticInt23735;
+    static public int staticInt23736;
+    static public int staticInt23737;
+    static public int staticInt23738;
+    static public int staticInt23739;
+    static public int staticInt23740;
+    static public int staticInt23741;
+    static public int staticInt23742;
+    static public int staticInt23743;
+    static public int staticInt23744;
+    static public int staticInt23745;
+    static public int staticInt23746;
+    static public int staticInt23747;
+    static public int staticInt23748;
+    static public int staticInt23749;
+    static public int staticInt23750;
+    static public int staticInt23751;
+    static public int staticInt23752;
+    static public int staticInt23753;
+    static public int staticInt23754;
+    static public int staticInt23755;
+    static public int staticInt23756;
+    static public int staticInt23757;
+    static public int staticInt23758;
+    static public int staticInt23759;
+    static public int staticInt23760;
+    static public int staticInt23761;
+    static public int staticInt23762;
+    static public int staticInt23763;
+    static public int staticInt23764;
+    static public int staticInt23765;
+    static public int staticInt23766;
+    static public int staticInt23767;
+    static public int staticInt23768;
+    static public int staticInt23769;
+    static public int staticInt23770;
+    static public int staticInt23771;
+    static public int staticInt23772;
+    static public int staticInt23773;
+    static public int staticInt23774;
+    static public int staticInt23775;
+    static public int staticInt23776;
+    static public int staticInt23777;
+    static public int staticInt23778;
+    static public int staticInt23779;
+    static public int staticInt23780;
+    static public int staticInt23781;
+    static public int staticInt23782;
+    static public int staticInt23783;
+    static public int staticInt23784;
+    static public int staticInt23785;
+    static public int staticInt23786;
+    static public int staticInt23787;
+    static public int staticInt23788;
+    static public int staticInt23789;
+    static public int staticInt23790;
+    static public int staticInt23791;
+    static public int staticInt23792;
+    static public int staticInt23793;
+    static public int staticInt23794;
+    static public int staticInt23795;
+    static public int staticInt23796;
+    static public int staticInt23797;
+    static public int staticInt23798;
+    static public int staticInt23799;
+    static public int staticInt23800;
+    static public int staticInt23801;
+    static public int staticInt23802;
+    static public int staticInt23803;
+    static public int staticInt23804;
+    static public int staticInt23805;
+    static public int staticInt23806;
+    static public int staticInt23807;
+    static public int staticInt23808;
+    static public int staticInt23809;
+    static public int staticInt23810;
+    static public int staticInt23811;
+    static public int staticInt23812;
+    static public int staticInt23813;
+    static public int staticInt23814;
+    static public int staticInt23815;
+    static public int staticInt23816;
+    static public int staticInt23817;
+    static public int staticInt23818;
+    static public int staticInt23819;
+    static public int staticInt23820;
+    static public int staticInt23821;
+    static public int staticInt23822;
+    static public int staticInt23823;
+    static public int staticInt23824;
+    static public int staticInt23825;
+    static public int staticInt23826;
+    static public int staticInt23827;
+    static public int staticInt23828;
+    static public int staticInt23829;
+    static public int staticInt23830;
+    static public int staticInt23831;
+    static public int staticInt23832;
+    static public int staticInt23833;
+    static public int staticInt23834;
+    static public int staticInt23835;
+    static public int staticInt23836;
+    static public int staticInt23837;
+    static public int staticInt23838;
+    static public int staticInt23839;
+    static public int staticInt23840;
+    static public int staticInt23841;
+    static public int staticInt23842;
+    static public int staticInt23843;
+    static public int staticInt23844;
+    static public int staticInt23845;
+    static public int staticInt23846;
+    static public int staticInt23847;
+    static public int staticInt23848;
+    static public int staticInt23849;
+    static public int staticInt23850;
+    static public int staticInt23851;
+    static public int staticInt23852;
+    static public int staticInt23853;
+    static public int staticInt23854;
+    static public int staticInt23855;
+    static public int staticInt23856;
+    static public int staticInt23857;
+    static public int staticInt23858;
+    static public int staticInt23859;
+    static public int staticInt23860;
+    static public int staticInt23861;
+    static public int staticInt23862;
+    static public int staticInt23863;
+    static public int staticInt23864;
+    static public int staticInt23865;
+    static public int staticInt23866;
+    static public int staticInt23867;
+    static public int staticInt23868;
+    static public int staticInt23869;
+    static public int staticInt23870;
+    static public int staticInt23871;
+    static public int staticInt23872;
+    static public int staticInt23873;
+    static public int staticInt23874;
+    static public int staticInt23875;
+    static public int staticInt23876;
+    static public int staticInt23877;
+    static public int staticInt23878;
+    static public int staticInt23879;
+    static public int staticInt23880;
+    static public int staticInt23881;
+    static public int staticInt23882;
+    static public int staticInt23883;
+    static public int staticInt23884;
+    static public int staticInt23885;
+    static public int staticInt23886;
+    static public int staticInt23887;
+    static public int staticInt23888;
+    static public int staticInt23889;
+    static public int staticInt23890;
+    static public int staticInt23891;
+    static public int staticInt23892;
+    static public int staticInt23893;
+    static public int staticInt23894;
+    static public int staticInt23895;
+    static public int staticInt23896;
+    static public int staticInt23897;
+    static public int staticInt23898;
+    static public int staticInt23899;
+    static public int staticInt23900;
+    static public int staticInt23901;
+    static public int staticInt23902;
+    static public int staticInt23903;
+    static public int staticInt23904;
+    static public int staticInt23905;
+    static public int staticInt23906;
+    static public int staticInt23907;
+    static public int staticInt23908;
+    static public int staticInt23909;
+    static public int staticInt23910;
+    static public int staticInt23911;
+    static public int staticInt23912;
+    static public int staticInt23913;
+    static public int staticInt23914;
+    static public int staticInt23915;
+    static public int staticInt23916;
+    static public int staticInt23917;
+    static public int staticInt23918;
+    static public int staticInt23919;
+    static public int staticInt23920;
+    static public int staticInt23921;
+    static public int staticInt23922;
+    static public int staticInt23923;
+    static public int staticInt23924;
+    static public int staticInt23925;
+    static public int staticInt23926;
+    static public int staticInt23927;
+    static public int staticInt23928;
+    static public int staticInt23929;
+    static public int staticInt23930;
+    static public int staticInt23931;
+    static public int staticInt23932;
+    static public int staticInt23933;
+    static public int staticInt23934;
+    static public int staticInt23935;
+    static public int staticInt23936;
+    static public int staticInt23937;
+    static public int staticInt23938;
+    static public int staticInt23939;
+    static public int staticInt23940;
+    static public int staticInt23941;
+    static public int staticInt23942;
+    static public int staticInt23943;
+    static public int staticInt23944;
+    static public int staticInt23945;
+    static public int staticInt23946;
+    static public int staticInt23947;
+    static public int staticInt23948;
+    static public int staticInt23949;
+    static public int staticInt23950;
+    static public int staticInt23951;
+    static public int staticInt23952;
+    static public int staticInt23953;
+    static public int staticInt23954;
+    static public int staticInt23955;
+    static public int staticInt23956;
+    static public int staticInt23957;
+    static public int staticInt23958;
+    static public int staticInt23959;
+    static public int staticInt23960;
+    static public int staticInt23961;
+    static public int staticInt23962;
+    static public int staticInt23963;
+    static public int staticInt23964;
+    static public int staticInt23965;
+    static public int staticInt23966;
+    static public int staticInt23967;
+    static public int staticInt23968;
+    static public int staticInt23969;
+    static public int staticInt23970;
+    static public int staticInt23971;
+    static public int staticInt23972;
+    static public int staticInt23973;
+    static public int staticInt23974;
+    static public int staticInt23975;
+    static public int staticInt23976;
+    static public int staticInt23977;
+    static public int staticInt23978;
+    static public int staticInt23979;
+    static public int staticInt23980;
+    static public int staticInt23981;
+    static public int staticInt23982;
+    static public int staticInt23983;
+    static public int staticInt23984;
+    static public int staticInt23985;
+    static public int staticInt23986;
+    static public int staticInt23987;
+    static public int staticInt23988;
+    static public int staticInt23989;
+    static public int staticInt23990;
+    static public int staticInt23991;
+    static public int staticInt23992;
+    static public int staticInt23993;
+    static public int staticInt23994;
+    static public int staticInt23995;
+    static public int staticInt23996;
+    static public int staticInt23997;
+    static public int staticInt23998;
+    static public int staticInt23999;
+    static public int staticInt24000;
+    static public int staticInt24001;
+    static public int staticInt24002;
+    static public int staticInt24003;
+    static public int staticInt24004;
+    static public int staticInt24005;
+    static public int staticInt24006;
+    static public int staticInt24007;
+    static public int staticInt24008;
+    static public int staticInt24009;
+    static public int staticInt24010;
+    static public int staticInt24011;
+    static public int staticInt24012;
+    static public int staticInt24013;
+    static public int staticInt24014;
+    static public int staticInt24015;
+    static public int staticInt24016;
+    static public int staticInt24017;
+    static public int staticInt24018;
+    static public int staticInt24019;
+    static public int staticInt24020;
+    static public int staticInt24021;
+    static public int staticInt24022;
+    static public int staticInt24023;
+    static public int staticInt24024;
+    static public int staticInt24025;
+    static public int staticInt24026;
+    static public int staticInt24027;
+    static public int staticInt24028;
+    static public int staticInt24029;
+    static public int staticInt24030;
+    static public int staticInt24031;
+    static public int staticInt24032;
+    static public int staticInt24033;
+    static public int staticInt24034;
+    static public int staticInt24035;
+    static public int staticInt24036;
+    static public int staticInt24037;
+    static public int staticInt24038;
+    static public int staticInt24039;
+    static public int staticInt24040;
+    static public int staticInt24041;
+    static public int staticInt24042;
+    static public int staticInt24043;
+    static public int staticInt24044;
+    static public int staticInt24045;
+    static public int staticInt24046;
+    static public int staticInt24047;
+    static public int staticInt24048;
+    static public int staticInt24049;
+    static public int staticInt24050;
+    static public int staticInt24051;
+    static public int staticInt24052;
+    static public int staticInt24053;
+    static public int staticInt24054;
+    static public int staticInt24055;
+    static public int staticInt24056;
+    static public int staticInt24057;
+    static public int staticInt24058;
+    static public int staticInt24059;
+    static public int staticInt24060;
+    static public int staticInt24061;
+    static public int staticInt24062;
+    static public int staticInt24063;
+    static public int staticInt24064;
+    static public int staticInt24065;
+    static public int staticInt24066;
+    static public int staticInt24067;
+    static public int staticInt24068;
+    static public int staticInt24069;
+    static public int staticInt24070;
+    static public int staticInt24071;
+    static public int staticInt24072;
+    static public int staticInt24073;
+    static public int staticInt24074;
+    static public int staticInt24075;
+    static public int staticInt24076;
+    static public int staticInt24077;
+    static public int staticInt24078;
+    static public int staticInt24079;
+    static public int staticInt24080;
+    static public int staticInt24081;
+    static public int staticInt24082;
+    static public int staticInt24083;
+    static public int staticInt24084;
+    static public int staticInt24085;
+    static public int staticInt24086;
+    static public int staticInt24087;
+    static public int staticInt24088;
+    static public int staticInt24089;
+    static public int staticInt24090;
+    static public int staticInt24091;
+    static public int staticInt24092;
+    static public int staticInt24093;
+    static public int staticInt24094;
+    static public int staticInt24095;
+    static public int staticInt24096;
+    static public int staticInt24097;
+    static public int staticInt24098;
+    static public int staticInt24099;
+    static public int staticInt24100;
+    static public int staticInt24101;
+    static public int staticInt24102;
+    static public int staticInt24103;
+    static public int staticInt24104;
+    static public int staticInt24105;
+    static public int staticInt24106;
+    static public int staticInt24107;
+    static public int staticInt24108;
+    static public int staticInt24109;
+    static public int staticInt24110;
+    static public int staticInt24111;
+    static public int staticInt24112;
+    static public int staticInt24113;
+    static public int staticInt24114;
+    static public int staticInt24115;
+    static public int staticInt24116;
+    static public int staticInt24117;
+    static public int staticInt24118;
+    static public int staticInt24119;
+    static public int staticInt24120;
+    static public int staticInt24121;
+    static public int staticInt24122;
+    static public int staticInt24123;
+    static public int staticInt24124;
+    static public int staticInt24125;
+    static public int staticInt24126;
+    static public int staticInt24127;
+    static public int staticInt24128;
+    static public int staticInt24129;
+    static public int staticInt24130;
+    static public int staticInt24131;
+    static public int staticInt24132;
+    static public int staticInt24133;
+    static public int staticInt24134;
+    static public int staticInt24135;
+    static public int staticInt24136;
+    static public int staticInt24137;
+    static public int staticInt24138;
+    static public int staticInt24139;
+    static public int staticInt24140;
+    static public int staticInt24141;
+    static public int staticInt24142;
+    static public int staticInt24143;
+    static public int staticInt24144;
+    static public int staticInt24145;
+    static public int staticInt24146;
+    static public int staticInt24147;
+    static public int staticInt24148;
+    static public int staticInt24149;
+    static public int staticInt24150;
+    static public int staticInt24151;
+    static public int staticInt24152;
+    static public int staticInt24153;
+    static public int staticInt24154;
+    static public int staticInt24155;
+    static public int staticInt24156;
+    static public int staticInt24157;
+    static public int staticInt24158;
+    static public int staticInt24159;
+    static public int staticInt24160;
+    static public int staticInt24161;
+    static public int staticInt24162;
+    static public int staticInt24163;
+    static public int staticInt24164;
+    static public int staticInt24165;
+    static public int staticInt24166;
+    static public int staticInt24167;
+    static public int staticInt24168;
+    static public int staticInt24169;
+    static public int staticInt24170;
+    static public int staticInt24171;
+    static public int staticInt24172;
+    static public int staticInt24173;
+    static public int staticInt24174;
+    static public int staticInt24175;
+    static public int staticInt24176;
+    static public int staticInt24177;
+    static public int staticInt24178;
+    static public int staticInt24179;
+    static public int staticInt24180;
+    static public int staticInt24181;
+    static public int staticInt24182;
+    static public int staticInt24183;
+    static public int staticInt24184;
+    static public int staticInt24185;
+    static public int staticInt24186;
+    static public int staticInt24187;
+    static public int staticInt24188;
+    static public int staticInt24189;
+    static public int staticInt24190;
+    static public int staticInt24191;
+    static public int staticInt24192;
+    static public int staticInt24193;
+    static public int staticInt24194;
+    static public int staticInt24195;
+    static public int staticInt24196;
+    static public int staticInt24197;
+    static public int staticInt24198;
+    static public int staticInt24199;
+    static public int staticInt24200;
+    static public int staticInt24201;
+    static public int staticInt24202;
+    static public int staticInt24203;
+    static public int staticInt24204;
+    static public int staticInt24205;
+    static public int staticInt24206;
+    static public int staticInt24207;
+    static public int staticInt24208;
+    static public int staticInt24209;
+    static public int staticInt24210;
+    static public int staticInt24211;
+    static public int staticInt24212;
+    static public int staticInt24213;
+    static public int staticInt24214;
+    static public int staticInt24215;
+    static public int staticInt24216;
+    static public int staticInt24217;
+    static public int staticInt24218;
+    static public int staticInt24219;
+    static public int staticInt24220;
+    static public int staticInt24221;
+    static public int staticInt24222;
+    static public int staticInt24223;
+    static public int staticInt24224;
+    static public int staticInt24225;
+    static public int staticInt24226;
+    static public int staticInt24227;
+    static public int staticInt24228;
+    static public int staticInt24229;
+    static public int staticInt24230;
+    static public int staticInt24231;
+    static public int staticInt24232;
+    static public int staticInt24233;
+    static public int staticInt24234;
+    static public int staticInt24235;
+    static public int staticInt24236;
+    static public int staticInt24237;
+    static public int staticInt24238;
+    static public int staticInt24239;
+    static public int staticInt24240;
+    static public int staticInt24241;
+    static public int staticInt24242;
+    static public int staticInt24243;
+    static public int staticInt24244;
+    static public int staticInt24245;
+    static public int staticInt24246;
+    static public int staticInt24247;
+    static public int staticInt24248;
+    static public int staticInt24249;
+    static public int staticInt24250;
+    static public int staticInt24251;
+    static public int staticInt24252;
+    static public int staticInt24253;
+    static public int staticInt24254;
+    static public int staticInt24255;
+    static public int staticInt24256;
+    static public int staticInt24257;
+    static public int staticInt24258;
+    static public int staticInt24259;
+    static public int staticInt24260;
+    static public int staticInt24261;
+    static public int staticInt24262;
+    static public int staticInt24263;
+    static public int staticInt24264;
+    static public int staticInt24265;
+    static public int staticInt24266;
+    static public int staticInt24267;
+    static public int staticInt24268;
+    static public int staticInt24269;
+    static public int staticInt24270;
+    static public int staticInt24271;
+    static public int staticInt24272;
+    static public int staticInt24273;
+    static public int staticInt24274;
+    static public int staticInt24275;
+    static public int staticInt24276;
+    static public int staticInt24277;
+    static public int staticInt24278;
+    static public int staticInt24279;
+    static public int staticInt24280;
+    static public int staticInt24281;
+    static public int staticInt24282;
+    static public int staticInt24283;
+    static public int staticInt24284;
+    static public int staticInt24285;
+    static public int staticInt24286;
+    static public int staticInt24287;
+    static public int staticInt24288;
+    static public int staticInt24289;
+    static public int staticInt24290;
+    static public int staticInt24291;
+    static public int staticInt24292;
+    static public int staticInt24293;
+    static public int staticInt24294;
+    static public int staticInt24295;
+    static public int staticInt24296;
+    static public int staticInt24297;
+    static public int staticInt24298;
+    static public int staticInt24299;
+    static public int staticInt24300;
+    static public int staticInt24301;
+    static public int staticInt24302;
+    static public int staticInt24303;
+    static public int staticInt24304;
+    static public int staticInt24305;
+    static public int staticInt24306;
+    static public int staticInt24307;
+    static public int staticInt24308;
+    static public int staticInt24309;
+    static public int staticInt24310;
+    static public int staticInt24311;
+    static public int staticInt24312;
+    static public int staticInt24313;
+    static public int staticInt24314;
+    static public int staticInt24315;
+    static public int staticInt24316;
+    static public int staticInt24317;
+    static public int staticInt24318;
+    static public int staticInt24319;
+    static public int staticInt24320;
+    static public int staticInt24321;
+    static public int staticInt24322;
+    static public int staticInt24323;
+    static public int staticInt24324;
+    static public int staticInt24325;
+    static public int staticInt24326;
+    static public int staticInt24327;
+    static public int staticInt24328;
+    static public int staticInt24329;
+    static public int staticInt24330;
+    static public int staticInt24331;
+    static public int staticInt24332;
+    static public int staticInt24333;
+    static public int staticInt24334;
+    static public int staticInt24335;
+    static public int staticInt24336;
+    static public int staticInt24337;
+    static public int staticInt24338;
+    static public int staticInt24339;
+    static public int staticInt24340;
+    static public int staticInt24341;
+    static public int staticInt24342;
+    static public int staticInt24343;
+    static public int staticInt24344;
+    static public int staticInt24345;
+    static public int staticInt24346;
+    static public int staticInt24347;
+    static public int staticInt24348;
+    static public int staticInt24349;
+    static public int staticInt24350;
+    static public int staticInt24351;
+    static public int staticInt24352;
+    static public int staticInt24353;
+    static public int staticInt24354;
+    static public int staticInt24355;
+    static public int staticInt24356;
+    static public int staticInt24357;
+    static public int staticInt24358;
+    static public int staticInt24359;
+    static public int staticInt24360;
+    static public int staticInt24361;
+    static public int staticInt24362;
+    static public int staticInt24363;
+    static public int staticInt24364;
+    static public int staticInt24365;
+    static public int staticInt24366;
+    static public int staticInt24367;
+    static public int staticInt24368;
+    static public int staticInt24369;
+    static public int staticInt24370;
+    static public int staticInt24371;
+    static public int staticInt24372;
+    static public int staticInt24373;
+    static public int staticInt24374;
+    static public int staticInt24375;
+    static public int staticInt24376;
+    static public int staticInt24377;
+    static public int staticInt24378;
+    static public int staticInt24379;
+    static public int staticInt24380;
+    static public int staticInt24381;
+    static public int staticInt24382;
+    static public int staticInt24383;
+    static public int staticInt24384;
+    static public int staticInt24385;
+    static public int staticInt24386;
+    static public int staticInt24387;
+    static public int staticInt24388;
+    static public int staticInt24389;
+    static public int staticInt24390;
+    static public int staticInt24391;
+    static public int staticInt24392;
+    static public int staticInt24393;
+    static public int staticInt24394;
+    static public int staticInt24395;
+    static public int staticInt24396;
+    static public int staticInt24397;
+    static public int staticInt24398;
+    static public int staticInt24399;
+    static public int staticInt24400;
+    static public int staticInt24401;
+    static public int staticInt24402;
+    static public int staticInt24403;
+    static public int staticInt24404;
+    static public int staticInt24405;
+    static public int staticInt24406;
+    static public int staticInt24407;
+    static public int staticInt24408;
+    static public int staticInt24409;
+    static public int staticInt24410;
+    static public int staticInt24411;
+    static public int staticInt24412;
+    static public int staticInt24413;
+    static public int staticInt24414;
+    static public int staticInt24415;
+    static public int staticInt24416;
+    static public int staticInt24417;
+    static public int staticInt24418;
+    static public int staticInt24419;
+    static public int staticInt24420;
+    static public int staticInt24421;
+    static public int staticInt24422;
+    static public int staticInt24423;
+    static public int staticInt24424;
+    static public int staticInt24425;
+    static public int staticInt24426;
+    static public int staticInt24427;
+    static public int staticInt24428;
+    static public int staticInt24429;
+    static public int staticInt24430;
+    static public int staticInt24431;
+    static public int staticInt24432;
+    static public int staticInt24433;
+    static public int staticInt24434;
+    static public int staticInt24435;
+    static public int staticInt24436;
+    static public int staticInt24437;
+    static public int staticInt24438;
+    static public int staticInt24439;
+    static public int staticInt24440;
+    static public int staticInt24441;
+    static public int staticInt24442;
+    static public int staticInt24443;
+    static public int staticInt24444;
+    static public int staticInt24445;
+    static public int staticInt24446;
+    static public int staticInt24447;
+    static public int staticInt24448;
+    static public int staticInt24449;
+    static public int staticInt24450;
+    static public int staticInt24451;
+    static public int staticInt24452;
+    static public int staticInt24453;
+    static public int staticInt24454;
+    static public int staticInt24455;
+    static public int staticInt24456;
+    static public int staticInt24457;
+    static public int staticInt24458;
+    static public int staticInt24459;
+    static public int staticInt24460;
+    static public int staticInt24461;
+    static public int staticInt24462;
+    static public int staticInt24463;
+    static public int staticInt24464;
+    static public int staticInt24465;
+    static public int staticInt24466;
+    static public int staticInt24467;
+    static public int staticInt24468;
+    static public int staticInt24469;
+    static public int staticInt24470;
+    static public int staticInt24471;
+    static public int staticInt24472;
+    static public int staticInt24473;
+    static public int staticInt24474;
+    static public int staticInt24475;
+    static public int staticInt24476;
+    static public int staticInt24477;
+    static public int staticInt24478;
+    static public int staticInt24479;
+    static public int staticInt24480;
+    static public int staticInt24481;
+    static public int staticInt24482;
+    static public int staticInt24483;
+    static public int staticInt24484;
+    static public int staticInt24485;
+    static public int staticInt24486;
+    static public int staticInt24487;
+    static public int staticInt24488;
+    static public int staticInt24489;
+    static public int staticInt24490;
+    static public int staticInt24491;
+    static public int staticInt24492;
+    static public int staticInt24493;
+    static public int staticInt24494;
+    static public int staticInt24495;
+    static public int staticInt24496;
+    static public int staticInt24497;
+    static public int staticInt24498;
+    static public int staticInt24499;
+    static public int staticInt24500;
+    static public int staticInt24501;
+    static public int staticInt24502;
+    static public int staticInt24503;
+    static public int staticInt24504;
+    static public int staticInt24505;
+    static public int staticInt24506;
+    static public int staticInt24507;
+    static public int staticInt24508;
+    static public int staticInt24509;
+    static public int staticInt24510;
+    static public int staticInt24511;
+    static public int staticInt24512;
+    static public int staticInt24513;
+    static public int staticInt24514;
+    static public int staticInt24515;
+    static public int staticInt24516;
+    static public int staticInt24517;
+    static public int staticInt24518;
+    static public int staticInt24519;
+    static public int staticInt24520;
+    static public int staticInt24521;
+    static public int staticInt24522;
+    static public int staticInt24523;
+    static public int staticInt24524;
+    static public int staticInt24525;
+    static public int staticInt24526;
+    static public int staticInt24527;
+    static public int staticInt24528;
+    static public int staticInt24529;
+    static public int staticInt24530;
+    static public int staticInt24531;
+    static public int staticInt24532;
+    static public int staticInt24533;
+    static public int staticInt24534;
+    static public int staticInt24535;
+    static public int staticInt24536;
+    static public int staticInt24537;
+    static public int staticInt24538;
+    static public int staticInt24539;
+    static public int staticInt24540;
+    static public int staticInt24541;
+    static public int staticInt24542;
+    static public int staticInt24543;
+    static public int staticInt24544;
+    static public int staticInt24545;
+    static public int staticInt24546;
+    static public int staticInt24547;
+    static public int staticInt24548;
+    static public int staticInt24549;
+    static public int staticInt24550;
+    static public int staticInt24551;
+    static public int staticInt24552;
+    static public int staticInt24553;
+    static public int staticInt24554;
+    static public int staticInt24555;
+    static public int staticInt24556;
+    static public int staticInt24557;
+    static public int staticInt24558;
+    static public int staticInt24559;
+    static public int staticInt24560;
+    static public int staticInt24561;
+    static public int staticInt24562;
+    static public int staticInt24563;
+    static public int staticInt24564;
+    static public int staticInt24565;
+    static public int staticInt24566;
+    static public int staticInt24567;
+    static public int staticInt24568;
+    static public int staticInt24569;
+    static public int staticInt24570;
+    static public int staticInt24571;
+    static public int staticInt24572;
+    static public int staticInt24573;
+    static public int staticInt24574;
+    static public int staticInt24575;
+    static public int staticInt24576;
+    static public int staticInt24577;
+    static public int staticInt24578;
+    static public int staticInt24579;
+    static public int staticInt24580;
+    static public int staticInt24581;
+    static public int staticInt24582;
+    static public int staticInt24583;
+    static public int staticInt24584;
+    static public int staticInt24585;
+    static public int staticInt24586;
+    static public int staticInt24587;
+    static public int staticInt24588;
+    static public int staticInt24589;
+    static public int staticInt24590;
+    static public int staticInt24591;
+    static public int staticInt24592;
+    static public int staticInt24593;
+    static public int staticInt24594;
+    static public int staticInt24595;
+    static public int staticInt24596;
+    static public int staticInt24597;
+    static public int staticInt24598;
+    static public int staticInt24599;
+    static public int staticInt24600;
+    static public int staticInt24601;
+    static public int staticInt24602;
+    static public int staticInt24603;
+    static public int staticInt24604;
+    static public int staticInt24605;
+    static public int staticInt24606;
+    static public int staticInt24607;
+    static public int staticInt24608;
+    static public int staticInt24609;
+    static public int staticInt24610;
+    static public int staticInt24611;
+    static public int staticInt24612;
+    static public int staticInt24613;
+    static public int staticInt24614;
+    static public int staticInt24615;
+    static public int staticInt24616;
+    static public int staticInt24617;
+    static public int staticInt24618;
+    static public int staticInt24619;
+    static public int staticInt24620;
+    static public int staticInt24621;
+    static public int staticInt24622;
+    static public int staticInt24623;
+    static public int staticInt24624;
+    static public int staticInt24625;
+    static public int staticInt24626;
+    static public int staticInt24627;
+    static public int staticInt24628;
+    static public int staticInt24629;
+    static public int staticInt24630;
+    static public int staticInt24631;
+    static public int staticInt24632;
+    static public int staticInt24633;
+    static public int staticInt24634;
+    static public int staticInt24635;
+    static public int staticInt24636;
+    static public int staticInt24637;
+    static public int staticInt24638;
+    static public int staticInt24639;
+    static public int staticInt24640;
+    static public int staticInt24641;
+    static public int staticInt24642;
+    static public int staticInt24643;
+    static public int staticInt24644;
+    static public int staticInt24645;
+    static public int staticInt24646;
+    static public int staticInt24647;
+    static public int staticInt24648;
+    static public int staticInt24649;
+    static public int staticInt24650;
+    static public int staticInt24651;
+    static public int staticInt24652;
+    static public int staticInt24653;
+    static public int staticInt24654;
+    static public int staticInt24655;
+    static public int staticInt24656;
+    static public int staticInt24657;
+    static public int staticInt24658;
+    static public int staticInt24659;
+    static public int staticInt24660;
+    static public int staticInt24661;
+    static public int staticInt24662;
+    static public int staticInt24663;
+    static public int staticInt24664;
+    static public int staticInt24665;
+    static public int staticInt24666;
+    static public int staticInt24667;
+    static public int staticInt24668;
+    static public int staticInt24669;
+    static public int staticInt24670;
+    static public int staticInt24671;
+    static public int staticInt24672;
+    static public int staticInt24673;
+    static public int staticInt24674;
+    static public int staticInt24675;
+    static public int staticInt24676;
+    static public int staticInt24677;
+    static public int staticInt24678;
+    static public int staticInt24679;
+    static public int staticInt24680;
+    static public int staticInt24681;
+    static public int staticInt24682;
+    static public int staticInt24683;
+    static public int staticInt24684;
+    static public int staticInt24685;
+    static public int staticInt24686;
+    static public int staticInt24687;
+    static public int staticInt24688;
+    static public int staticInt24689;
+    static public int staticInt24690;
+    static public int staticInt24691;
+    static public int staticInt24692;
+    static public int staticInt24693;
+    static public int staticInt24694;
+    static public int staticInt24695;
+    static public int staticInt24696;
+    static public int staticInt24697;
+    static public int staticInt24698;
+    static public int staticInt24699;
+    static public int staticInt24700;
+    static public int staticInt24701;
+    static public int staticInt24702;
+    static public int staticInt24703;
+    static public int staticInt24704;
+    static public int staticInt24705;
+    static public int staticInt24706;
+    static public int staticInt24707;
+    static public int staticInt24708;
+    static public int staticInt24709;
+    static public int staticInt24710;
+    static public int staticInt24711;
+    static public int staticInt24712;
+    static public int staticInt24713;
+    static public int staticInt24714;
+    static public int staticInt24715;
+    static public int staticInt24716;
+    static public int staticInt24717;
+    static public int staticInt24718;
+    static public int staticInt24719;
+    static public int staticInt24720;
+    static public int staticInt24721;
+    static public int staticInt24722;
+    static public int staticInt24723;
+    static public int staticInt24724;
+    static public int staticInt24725;
+    static public int staticInt24726;
+    static public int staticInt24727;
+    static public int staticInt24728;
+    static public int staticInt24729;
+    static public int staticInt24730;
+    static public int staticInt24731;
+    static public int staticInt24732;
+    static public int staticInt24733;
+    static public int staticInt24734;
+    static public int staticInt24735;
+    static public int staticInt24736;
+    static public int staticInt24737;
+    static public int staticInt24738;
+    static public int staticInt24739;
+    static public int staticInt24740;
+    static public int staticInt24741;
+    static public int staticInt24742;
+    static public int staticInt24743;
+    static public int staticInt24744;
+    static public int staticInt24745;
+    static public int staticInt24746;
+    static public int staticInt24747;
+    static public int staticInt24748;
+    static public int staticInt24749;
+    static public int staticInt24750;
+    static public int staticInt24751;
+    static public int staticInt24752;
+    static public int staticInt24753;
+    static public int staticInt24754;
+    static public int staticInt24755;
+    static public int staticInt24756;
+    static public int staticInt24757;
+    static public int staticInt24758;
+    static public int staticInt24759;
+    static public int staticInt24760;
+    static public int staticInt24761;
+    static public int staticInt24762;
+    static public int staticInt24763;
+    static public int staticInt24764;
+    static public int staticInt24765;
+    static public int staticInt24766;
+    static public int staticInt24767;
+    static public int staticInt24768;
+    static public int staticInt24769;
+    static public int staticInt24770;
+    static public int staticInt24771;
+    static public int staticInt24772;
+    static public int staticInt24773;
+    static public int staticInt24774;
+    static public int staticInt24775;
+    static public int staticInt24776;
+    static public int staticInt24777;
+    static public int staticInt24778;
+    static public int staticInt24779;
+    static public int staticInt24780;
+    static public int staticInt24781;
+    static public int staticInt24782;
+    static public int staticInt24783;
+    static public int staticInt24784;
+    static public int staticInt24785;
+    static public int staticInt24786;
+    static public int staticInt24787;
+    static public int staticInt24788;
+    static public int staticInt24789;
+    static public int staticInt24790;
+    static public int staticInt24791;
+    static public int staticInt24792;
+    static public int staticInt24793;
+    static public int staticInt24794;
+    static public int staticInt24795;
+    static public int staticInt24796;
+    static public int staticInt24797;
+    static public int staticInt24798;
+    static public int staticInt24799;
+    static public int staticInt24800;
+    static public int staticInt24801;
+    static public int staticInt24802;
+    static public int staticInt24803;
+    static public int staticInt24804;
+    static public int staticInt24805;
+    static public int staticInt24806;
+    static public int staticInt24807;
+    static public int staticInt24808;
+    static public int staticInt24809;
+    static public int staticInt24810;
+    static public int staticInt24811;
+    static public int staticInt24812;
+    static public int staticInt24813;
+    static public int staticInt24814;
+    static public int staticInt24815;
+    static public int staticInt24816;
+    static public int staticInt24817;
+    static public int staticInt24818;
+    static public int staticInt24819;
+    static public int staticInt24820;
+    static public int staticInt24821;
+    static public int staticInt24822;
+    static public int staticInt24823;
+    static public int staticInt24824;
+    static public int staticInt24825;
+    static public int staticInt24826;
+    static public int staticInt24827;
+    static public int staticInt24828;
+    static public int staticInt24829;
+    static public int staticInt24830;
+    static public int staticInt24831;
+    static public int staticInt24832;
+    static public int staticInt24833;
+    static public int staticInt24834;
+    static public int staticInt24835;
+    static public int staticInt24836;
+    static public int staticInt24837;
+    static public int staticInt24838;
+    static public int staticInt24839;
+    static public int staticInt24840;
+    static public int staticInt24841;
+    static public int staticInt24842;
+    static public int staticInt24843;
+    static public int staticInt24844;
+    static public int staticInt24845;
+    static public int staticInt24846;
+    static public int staticInt24847;
+    static public int staticInt24848;
+    static public int staticInt24849;
+    static public int staticInt24850;
+    static public int staticInt24851;
+    static public int staticInt24852;
+    static public int staticInt24853;
+    static public int staticInt24854;
+    static public int staticInt24855;
+    static public int staticInt24856;
+    static public int staticInt24857;
+    static public int staticInt24858;
+    static public int staticInt24859;
+    static public int staticInt24860;
+    static public int staticInt24861;
+    static public int staticInt24862;
+    static public int staticInt24863;
+    static public int staticInt24864;
+    static public int staticInt24865;
+    static public int staticInt24866;
+    static public int staticInt24867;
+    static public int staticInt24868;
+    static public int staticInt24869;
+    static public int staticInt24870;
+    static public int staticInt24871;
+    static public int staticInt24872;
+    static public int staticInt24873;
+    static public int staticInt24874;
+    static public int staticInt24875;
+    static public int staticInt24876;
+    static public int staticInt24877;
+    static public int staticInt24878;
+    static public int staticInt24879;
+    static public int staticInt24880;
+    static public int staticInt24881;
+    static public int staticInt24882;
+    static public int staticInt24883;
+    static public int staticInt24884;
+    static public int staticInt24885;
+    static public int staticInt24886;
+    static public int staticInt24887;
+    static public int staticInt24888;
+    static public int staticInt24889;
+    static public int staticInt24890;
+    static public int staticInt24891;
+    static public int staticInt24892;
+    static public int staticInt24893;
+    static public int staticInt24894;
+    static public int staticInt24895;
+    static public int staticInt24896;
+    static public int staticInt24897;
+    static public int staticInt24898;
+    static public int staticInt24899;
+    static public int staticInt24900;
+    static public int staticInt24901;
+    static public int staticInt24902;
+    static public int staticInt24903;
+    static public int staticInt24904;
+    static public int staticInt24905;
+    static public int staticInt24906;
+    static public int staticInt24907;
+    static public int staticInt24908;
+    static public int staticInt24909;
+    static public int staticInt24910;
+    static public int staticInt24911;
+    static public int staticInt24912;
+    static public int staticInt24913;
+    static public int staticInt24914;
+    static public int staticInt24915;
+    static public int staticInt24916;
+    static public int staticInt24917;
+    static public int staticInt24918;
+    static public int staticInt24919;
+    static public int staticInt24920;
+    static public int staticInt24921;
+    static public int staticInt24922;
+    static public int staticInt24923;
+    static public int staticInt24924;
+    static public int staticInt24925;
+    static public int staticInt24926;
+    static public int staticInt24927;
+    static public int staticInt24928;
+    static public int staticInt24929;
+    static public int staticInt24930;
+    static public int staticInt24931;
+    static public int staticInt24932;
+    static public int staticInt24933;
+    static public int staticInt24934;
+    static public int staticInt24935;
+    static public int staticInt24936;
+    static public int staticInt24937;
+    static public int staticInt24938;
+    static public int staticInt24939;
+    static public int staticInt24940;
+    static public int staticInt24941;
+    static public int staticInt24942;
+    static public int staticInt24943;
+    static public int staticInt24944;
+    static public int staticInt24945;
+    static public int staticInt24946;
+    static public int staticInt24947;
+    static public int staticInt24948;
+    static public int staticInt24949;
+    static public int staticInt24950;
+    static public int staticInt24951;
+    static public int staticInt24952;
+    static public int staticInt24953;
+    static public int staticInt24954;
+    static public int staticInt24955;
+    static public int staticInt24956;
+    static public int staticInt24957;
+    static public int staticInt24958;
+    static public int staticInt24959;
+    static public int staticInt24960;
+    static public int staticInt24961;
+    static public int staticInt24962;
+    static public int staticInt24963;
+    static public int staticInt24964;
+    static public int staticInt24965;
+    static public int staticInt24966;
+    static public int staticInt24967;
+    static public int staticInt24968;
+    static public int staticInt24969;
+    static public int staticInt24970;
+    static public int staticInt24971;
+    static public int staticInt24972;
+    static public int staticInt24973;
+    static public int staticInt24974;
+    static public int staticInt24975;
+    static public int staticInt24976;
+    static public int staticInt24977;
+    static public int staticInt24978;
+    static public int staticInt24979;
+    static public int staticInt24980;
+    static public int staticInt24981;
+    static public int staticInt24982;
+    static public int staticInt24983;
+    static public int staticInt24984;
+    static public int staticInt24985;
+    static public int staticInt24986;
+    static public int staticInt24987;
+    static public int staticInt24988;
+    static public int staticInt24989;
+    static public int staticInt24990;
+    static public int staticInt24991;
+    static public int staticInt24992;
+    static public int staticInt24993;
+    static public int staticInt24994;
+    static public int staticInt24995;
+    static public int staticInt24996;
+    static public int staticInt24997;
+    static public int staticInt24998;
+    static public int staticInt24999;
+    static public int staticInt25000;
+    static public int staticInt25001;
+    static public int staticInt25002;
+    static public int staticInt25003;
+    static public int staticInt25004;
+    static public int staticInt25005;
+    static public int staticInt25006;
+    static public int staticInt25007;
+    static public int staticInt25008;
+    static public int staticInt25009;
+    static public int staticInt25010;
+    static public int staticInt25011;
+    static public int staticInt25012;
+    static public int staticInt25013;
+    static public int staticInt25014;
+    static public int staticInt25015;
+    static public int staticInt25016;
+    static public int staticInt25017;
+    static public int staticInt25018;
+    static public int staticInt25019;
+    static public int staticInt25020;
+    static public int staticInt25021;
+    static public int staticInt25022;
+    static public int staticInt25023;
+    static public int staticInt25024;
+    static public int staticInt25025;
+    static public int staticInt25026;
+    static public int staticInt25027;
+    static public int staticInt25028;
+    static public int staticInt25029;
+    static public int staticInt25030;
+    static public int staticInt25031;
+    static public int staticInt25032;
+    static public int staticInt25033;
+    static public int staticInt25034;
+    static public int staticInt25035;
+    static public int staticInt25036;
+    static public int staticInt25037;
+    static public int staticInt25038;
+    static public int staticInt25039;
+    static public int staticInt25040;
+    static public int staticInt25041;
+    static public int staticInt25042;
+    static public int staticInt25043;
+    static public int staticInt25044;
+    static public int staticInt25045;
+    static public int staticInt25046;
+    static public int staticInt25047;
+    static public int staticInt25048;
+    static public int staticInt25049;
+    static public int staticInt25050;
+    static public int staticInt25051;
+    static public int staticInt25052;
+    static public int staticInt25053;
+    static public int staticInt25054;
+    static public int staticInt25055;
+    static public int staticInt25056;
+    static public int staticInt25057;
+    static public int staticInt25058;
+    static public int staticInt25059;
+    static public int staticInt25060;
+    static public int staticInt25061;
+    static public int staticInt25062;
+    static public int staticInt25063;
+    static public int staticInt25064;
+    static public int staticInt25065;
+    static public int staticInt25066;
+    static public int staticInt25067;
+    static public int staticInt25068;
+    static public int staticInt25069;
+    static public int staticInt25070;
+    static public int staticInt25071;
+    static public int staticInt25072;
+    static public int staticInt25073;
+    static public int staticInt25074;
+    static public int staticInt25075;
+    static public int staticInt25076;
+    static public int staticInt25077;
+    static public int staticInt25078;
+    static public int staticInt25079;
+    static public int staticInt25080;
+    static public int staticInt25081;
+    static public int staticInt25082;
+    static public int staticInt25083;
+    static public int staticInt25084;
+    static public int staticInt25085;
+    static public int staticInt25086;
+    static public int staticInt25087;
+    static public int staticInt25088;
+    static public int staticInt25089;
+    static public int staticInt25090;
+    static public int staticInt25091;
+    static public int staticInt25092;
+    static public int staticInt25093;
+    static public int staticInt25094;
+    static public int staticInt25095;
+    static public int staticInt25096;
+    static public int staticInt25097;
+    static public int staticInt25098;
+    static public int staticInt25099;
+    static public int staticInt25100;
+    static public int staticInt25101;
+    static public int staticInt25102;
+    static public int staticInt25103;
+    static public int staticInt25104;
+    static public int staticInt25105;
+    static public int staticInt25106;
+    static public int staticInt25107;
+    static public int staticInt25108;
+    static public int staticInt25109;
+    static public int staticInt25110;
+    static public int staticInt25111;
+    static public int staticInt25112;
+    static public int staticInt25113;
+    static public int staticInt25114;
+    static public int staticInt25115;
+    static public int staticInt25116;
+    static public int staticInt25117;
+    static public int staticInt25118;
+    static public int staticInt25119;
+    static public int staticInt25120;
+    static public int staticInt25121;
+    static public int staticInt25122;
+    static public int staticInt25123;
+    static public int staticInt25124;
+    static public int staticInt25125;
+    static public int staticInt25126;
+    static public int staticInt25127;
+    static public int staticInt25128;
+    static public int staticInt25129;
+    static public int staticInt25130;
+    static public int staticInt25131;
+    static public int staticInt25132;
+    static public int staticInt25133;
+    static public int staticInt25134;
+    static public int staticInt25135;
+    static public int staticInt25136;
+    static public int staticInt25137;
+    static public int staticInt25138;
+    static public int staticInt25139;
+    static public int staticInt25140;
+    static public int staticInt25141;
+    static public int staticInt25142;
+    static public int staticInt25143;
+    static public int staticInt25144;
+    static public int staticInt25145;
+    static public int staticInt25146;
+    static public int staticInt25147;
+    static public int staticInt25148;
+    static public int staticInt25149;
+    static public int staticInt25150;
+    static public int staticInt25151;
+    static public int staticInt25152;
+    static public int staticInt25153;
+    static public int staticInt25154;
+    static public int staticInt25155;
+    static public int staticInt25156;
+    static public int staticInt25157;
+    static public int staticInt25158;
+    static public int staticInt25159;
+    static public int staticInt25160;
+    static public int staticInt25161;
+    static public int staticInt25162;
+    static public int staticInt25163;
+    static public int staticInt25164;
+    static public int staticInt25165;
+    static public int staticInt25166;
+    static public int staticInt25167;
+    static public int staticInt25168;
+    static public int staticInt25169;
+    static public int staticInt25170;
+    static public int staticInt25171;
+    static public int staticInt25172;
+    static public int staticInt25173;
+    static public int staticInt25174;
+    static public int staticInt25175;
+    static public int staticInt25176;
+    static public int staticInt25177;
+    static public int staticInt25178;
+    static public int staticInt25179;
+    static public int staticInt25180;
+    static public int staticInt25181;
+    static public int staticInt25182;
+    static public int staticInt25183;
+    static public int staticInt25184;
+    static public int staticInt25185;
+    static public int staticInt25186;
+    static public int staticInt25187;
+    static public int staticInt25188;
+    static public int staticInt25189;
+    static public int staticInt25190;
+    static public int staticInt25191;
+    static public int staticInt25192;
+    static public int staticInt25193;
+    static public int staticInt25194;
+    static public int staticInt25195;
+    static public int staticInt25196;
+    static public int staticInt25197;
+    static public int staticInt25198;
+    static public int staticInt25199;
+    static public int staticInt25200;
+    static public int staticInt25201;
+    static public int staticInt25202;
+    static public int staticInt25203;
+    static public int staticInt25204;
+    static public int staticInt25205;
+    static public int staticInt25206;
+    static public int staticInt25207;
+    static public int staticInt25208;
+    static public int staticInt25209;
+    static public int staticInt25210;
+    static public int staticInt25211;
+    static public int staticInt25212;
+    static public int staticInt25213;
+    static public int staticInt25214;
+    static public int staticInt25215;
+    static public int staticInt25216;
+    static public int staticInt25217;
+    static public int staticInt25218;
+    static public int staticInt25219;
+    static public int staticInt25220;
+    static public int staticInt25221;
+    static public int staticInt25222;
+    static public int staticInt25223;
+    static public int staticInt25224;
+    static public int staticInt25225;
+    static public int staticInt25226;
+    static public int staticInt25227;
+    static public int staticInt25228;
+    static public int staticInt25229;
+    static public int staticInt25230;
+    static public int staticInt25231;
+    static public int staticInt25232;
+    static public int staticInt25233;
+    static public int staticInt25234;
+    static public int staticInt25235;
+    static public int staticInt25236;
+    static public int staticInt25237;
+    static public int staticInt25238;
+    static public int staticInt25239;
+    static public int staticInt25240;
+    static public int staticInt25241;
+    static public int staticInt25242;
+    static public int staticInt25243;
+    static public int staticInt25244;
+    static public int staticInt25245;
+    static public int staticInt25246;
+    static public int staticInt25247;
+    static public int staticInt25248;
+    static public int staticInt25249;
+    static public int staticInt25250;
+    static public int staticInt25251;
+    static public int staticInt25252;
+    static public int staticInt25253;
+    static public int staticInt25254;
+    static public int staticInt25255;
+    static public int staticInt25256;
+    static public int staticInt25257;
+    static public int staticInt25258;
+    static public int staticInt25259;
+    static public int staticInt25260;
+    static public int staticInt25261;
+    static public int staticInt25262;
+    static public int staticInt25263;
+    static public int staticInt25264;
+    static public int staticInt25265;
+    static public int staticInt25266;
+    static public int staticInt25267;
+    static public int staticInt25268;
+    static public int staticInt25269;
+    static public int staticInt25270;
+    static public int staticInt25271;
+    static public int staticInt25272;
+    static public int staticInt25273;
+    static public int staticInt25274;
+    static public int staticInt25275;
+    static public int staticInt25276;
+    static public int staticInt25277;
+    static public int staticInt25278;
+    static public int staticInt25279;
+    static public int staticInt25280;
+    static public int staticInt25281;
+    static public int staticInt25282;
+    static public int staticInt25283;
+    static public int staticInt25284;
+    static public int staticInt25285;
+    static public int staticInt25286;
+    static public int staticInt25287;
+    static public int staticInt25288;
+    static public int staticInt25289;
+    static public int staticInt25290;
+    static public int staticInt25291;
+    static public int staticInt25292;
+    static public int staticInt25293;
+    static public int staticInt25294;
+    static public int staticInt25295;
+    static public int staticInt25296;
+    static public int staticInt25297;
+    static public int staticInt25298;
+    static public int staticInt25299;
+    static public int staticInt25300;
+    static public int staticInt25301;
+    static public int staticInt25302;
+    static public int staticInt25303;
+    static public int staticInt25304;
+    static public int staticInt25305;
+    static public int staticInt25306;
+    static public int staticInt25307;
+    static public int staticInt25308;
+    static public int staticInt25309;
+    static public int staticInt25310;
+    static public int staticInt25311;
+    static public int staticInt25312;
+    static public int staticInt25313;
+    static public int staticInt25314;
+    static public int staticInt25315;
+    static public int staticInt25316;
+    static public int staticInt25317;
+    static public int staticInt25318;
+    static public int staticInt25319;
+    static public int staticInt25320;
+    static public int staticInt25321;
+    static public int staticInt25322;
+    static public int staticInt25323;
+    static public int staticInt25324;
+    static public int staticInt25325;
+    static public int staticInt25326;
+    static public int staticInt25327;
+    static public int staticInt25328;
+    static public int staticInt25329;
+    static public int staticInt25330;
+    static public int staticInt25331;
+    static public int staticInt25332;
+    static public int staticInt25333;
+    static public int staticInt25334;
+    static public int staticInt25335;
+    static public int staticInt25336;
+    static public int staticInt25337;
+    static public int staticInt25338;
+    static public int staticInt25339;
+    static public int staticInt25340;
+    static public int staticInt25341;
+    static public int staticInt25342;
+    static public int staticInt25343;
+    static public int staticInt25344;
+    static public int staticInt25345;
+    static public int staticInt25346;
+    static public int staticInt25347;
+    static public int staticInt25348;
+    static public int staticInt25349;
+    static public int staticInt25350;
+    static public int staticInt25351;
+    static public int staticInt25352;
+    static public int staticInt25353;
+    static public int staticInt25354;
+    static public int staticInt25355;
+    static public int staticInt25356;
+    static public int staticInt25357;
+    static public int staticInt25358;
+    static public int staticInt25359;
+    static public int staticInt25360;
+    static public int staticInt25361;
+    static public int staticInt25362;
+    static public int staticInt25363;
+    static public int staticInt25364;
+    static public int staticInt25365;
+    static public int staticInt25366;
+    static public int staticInt25367;
+    static public int staticInt25368;
+    static public int staticInt25369;
+    static public int staticInt25370;
+    static public int staticInt25371;
+    static public int staticInt25372;
+    static public int staticInt25373;
+    static public int staticInt25374;
+    static public int staticInt25375;
+    static public int staticInt25376;
+    static public int staticInt25377;
+    static public int staticInt25378;
+    static public int staticInt25379;
+    static public int staticInt25380;
+    static public int staticInt25381;
+    static public int staticInt25382;
+    static public int staticInt25383;
+    static public int staticInt25384;
+    static public int staticInt25385;
+    static public int staticInt25386;
+    static public int staticInt25387;
+    static public int staticInt25388;
+    static public int staticInt25389;
+    static public int staticInt25390;
+    static public int staticInt25391;
+    static public int staticInt25392;
+    static public int staticInt25393;
+    static public int staticInt25394;
+    static public int staticInt25395;
+    static public int staticInt25396;
+    static public int staticInt25397;
+    static public int staticInt25398;
+    static public int staticInt25399;
+    static public int staticInt25400;
+    static public int staticInt25401;
+    static public int staticInt25402;
+    static public int staticInt25403;
+    static public int staticInt25404;
+    static public int staticInt25405;
+    static public int staticInt25406;
+    static public int staticInt25407;
+    static public int staticInt25408;
+    static public int staticInt25409;
+    static public int staticInt25410;
+    static public int staticInt25411;
+    static public int staticInt25412;
+    static public int staticInt25413;
+    static public int staticInt25414;
+    static public int staticInt25415;
+    static public int staticInt25416;
+    static public int staticInt25417;
+    static public int staticInt25418;
+    static public int staticInt25419;
+    static public int staticInt25420;
+    static public int staticInt25421;
+    static public int staticInt25422;
+    static public int staticInt25423;
+    static public int staticInt25424;
+    static public int staticInt25425;
+    static public int staticInt25426;
+    static public int staticInt25427;
+    static public int staticInt25428;
+    static public int staticInt25429;
+    static public int staticInt25430;
+    static public int staticInt25431;
+    static public int staticInt25432;
+    static public int staticInt25433;
+    static public int staticInt25434;
+    static public int staticInt25435;
+    static public int staticInt25436;
+    static public int staticInt25437;
+    static public int staticInt25438;
+    static public int staticInt25439;
+    static public int staticInt25440;
+    static public int staticInt25441;
+    static public int staticInt25442;
+    static public int staticInt25443;
+    static public int staticInt25444;
+    static public int staticInt25445;
+    static public int staticInt25446;
+    static public int staticInt25447;
+    static public int staticInt25448;
+    static public int staticInt25449;
+    static public int staticInt25450;
+    static public int staticInt25451;
+    static public int staticInt25452;
+    static public int staticInt25453;
+    static public int staticInt25454;
+    static public int staticInt25455;
+    static public int staticInt25456;
+    static public int staticInt25457;
+    static public int staticInt25458;
+    static public int staticInt25459;
+    static public int staticInt25460;
+    static public int staticInt25461;
+    static public int staticInt25462;
+    static public int staticInt25463;
+    static public int staticInt25464;
+    static public int staticInt25465;
+    static public int staticInt25466;
+    static public int staticInt25467;
+    static public int staticInt25468;
+    static public int staticInt25469;
+    static public int staticInt25470;
+    static public int staticInt25471;
+    static public int staticInt25472;
+    static public int staticInt25473;
+    static public int staticInt25474;
+    static public int staticInt25475;
+    static public int staticInt25476;
+    static public int staticInt25477;
+    static public int staticInt25478;
+    static public int staticInt25479;
+    static public int staticInt25480;
+    static public int staticInt25481;
+    static public int staticInt25482;
+    static public int staticInt25483;
+    static public int staticInt25484;
+    static public int staticInt25485;
+    static public int staticInt25486;
+    static public int staticInt25487;
+    static public int staticInt25488;
+    static public int staticInt25489;
+    static public int staticInt25490;
+    static public int staticInt25491;
+    static public int staticInt25492;
+    static public int staticInt25493;
+    static public int staticInt25494;
+    static public int staticInt25495;
+    static public int staticInt25496;
+    static public int staticInt25497;
+    static public int staticInt25498;
+    static public int staticInt25499;
+    static public int staticInt25500;
+    static public int staticInt25501;
+    static public int staticInt25502;
+    static public int staticInt25503;
+    static public int staticInt25504;
+    static public int staticInt25505;
+    static public int staticInt25506;
+    static public int staticInt25507;
+    static public int staticInt25508;
+    static public int staticInt25509;
+    static public int staticInt25510;
+    static public int staticInt25511;
+    static public int staticInt25512;
+    static public int staticInt25513;
+    static public int staticInt25514;
+    static public int staticInt25515;
+    static public int staticInt25516;
+    static public int staticInt25517;
+    static public int staticInt25518;
+    static public int staticInt25519;
+    static public int staticInt25520;
+    static public int staticInt25521;
+    static public int staticInt25522;
+    static public int staticInt25523;
+    static public int staticInt25524;
+    static public int staticInt25525;
+    static public int staticInt25526;
+    static public int staticInt25527;
+    static public int staticInt25528;
+    static public int staticInt25529;
+    static public int staticInt25530;
+    static public int staticInt25531;
+    static public int staticInt25532;
+    static public int staticInt25533;
+    static public int staticInt25534;
+    static public int staticInt25535;
+    static public int staticInt25536;
+    static public int staticInt25537;
+    static public int staticInt25538;
+    static public int staticInt25539;
+    static public int staticInt25540;
+    static public int staticInt25541;
+    static public int staticInt25542;
+    static public int staticInt25543;
+    static public int staticInt25544;
+    static public int staticInt25545;
+    static public int staticInt25546;
+    static public int staticInt25547;
+    static public int staticInt25548;
+    static public int staticInt25549;
+    static public int staticInt25550;
+    static public int staticInt25551;
+    static public int staticInt25552;
+    static public int staticInt25553;
+    static public int staticInt25554;
+    static public int staticInt25555;
+    static public int staticInt25556;
+    static public int staticInt25557;
+    static public int staticInt25558;
+    static public int staticInt25559;
+    static public int staticInt25560;
+    static public int staticInt25561;
+    static public int staticInt25562;
+    static public int staticInt25563;
+    static public int staticInt25564;
+    static public int staticInt25565;
+    static public int staticInt25566;
+    static public int staticInt25567;
+    static public int staticInt25568;
+    static public int staticInt25569;
+    static public int staticInt25570;
+    static public int staticInt25571;
+    static public int staticInt25572;
+    static public int staticInt25573;
+    static public int staticInt25574;
+    static public int staticInt25575;
+    static public int staticInt25576;
+    static public int staticInt25577;
+    static public int staticInt25578;
+    static public int staticInt25579;
+    static public int staticInt25580;
+    static public int staticInt25581;
+    static public int staticInt25582;
+    static public int staticInt25583;
+    static public int staticInt25584;
+    static public int staticInt25585;
+    static public int staticInt25586;
+    static public int staticInt25587;
+    static public int staticInt25588;
+    static public int staticInt25589;
+    static public int staticInt25590;
+    static public int staticInt25591;
+    static public int staticInt25592;
+    static public int staticInt25593;
+    static public int staticInt25594;
+    static public int staticInt25595;
+    static public int staticInt25596;
+    static public int staticInt25597;
+    static public int staticInt25598;
+    static public int staticInt25599;
+    static public int staticInt25600;
+    static public int staticInt25601;
+    static public int staticInt25602;
+    static public int staticInt25603;
+    static public int staticInt25604;
+    static public int staticInt25605;
+    static public int staticInt25606;
+    static public int staticInt25607;
+    static public int staticInt25608;
+    static public int staticInt25609;
+    static public int staticInt25610;
+    static public int staticInt25611;
+    static public int staticInt25612;
+    static public int staticInt25613;
+    static public int staticInt25614;
+    static public int staticInt25615;
+    static public int staticInt25616;
+    static public int staticInt25617;
+    static public int staticInt25618;
+    static public int staticInt25619;
+    static public int staticInt25620;
+    static public int staticInt25621;
+    static public int staticInt25622;
+    static public int staticInt25623;
+    static public int staticInt25624;
+    static public int staticInt25625;
+    static public int staticInt25626;
+    static public int staticInt25627;
+    static public int staticInt25628;
+    static public int staticInt25629;
+    static public int staticInt25630;
+    static public int staticInt25631;
+    static public int staticInt25632;
+    static public int staticInt25633;
+    static public int staticInt25634;
+    static public int staticInt25635;
+    static public int staticInt25636;
+    static public int staticInt25637;
+    static public int staticInt25638;
+    static public int staticInt25639;
+    static public int staticInt25640;
+    static public int staticInt25641;
+    static public int staticInt25642;
+    static public int staticInt25643;
+    static public int staticInt25644;
+    static public int staticInt25645;
+    static public int staticInt25646;
+    static public int staticInt25647;
+    static public int staticInt25648;
+    static public int staticInt25649;
+    static public int staticInt25650;
+    static public int staticInt25651;
+    static public int staticInt25652;
+    static public int staticInt25653;
+    static public int staticInt25654;
+    static public int staticInt25655;
+    static public int staticInt25656;
+    static public int staticInt25657;
+    static public int staticInt25658;
+    static public int staticInt25659;
+    static public int staticInt25660;
+    static public int staticInt25661;
+    static public int staticInt25662;
+    static public int staticInt25663;
+    static public int staticInt25664;
+    static public int staticInt25665;
+    static public int staticInt25666;
+    static public int staticInt25667;
+    static public int staticInt25668;
+    static public int staticInt25669;
+    static public int staticInt25670;
+    static public int staticInt25671;
+    static public int staticInt25672;
+    static public int staticInt25673;
+    static public int staticInt25674;
+    static public int staticInt25675;
+    static public int staticInt25676;
+    static public int staticInt25677;
+    static public int staticInt25678;
+    static public int staticInt25679;
+    static public int staticInt25680;
+    static public int staticInt25681;
+    static public int staticInt25682;
+    static public int staticInt25683;
+    static public int staticInt25684;
+    static public int staticInt25685;
+    static public int staticInt25686;
+    static public int staticInt25687;
+    static public int staticInt25688;
+    static public int staticInt25689;
+    static public int staticInt25690;
+    static public int staticInt25691;
+    static public int staticInt25692;
+    static public int staticInt25693;
+    static public int staticInt25694;
+    static public int staticInt25695;
+    static public int staticInt25696;
+    static public int staticInt25697;
+    static public int staticInt25698;
+    static public int staticInt25699;
+    static public int staticInt25700;
+    static public int staticInt25701;
+    static public int staticInt25702;
+    static public int staticInt25703;
+    static public int staticInt25704;
+    static public int staticInt25705;
+    static public int staticInt25706;
+    static public int staticInt25707;
+    static public int staticInt25708;
+    static public int staticInt25709;
+    static public int staticInt25710;
+    static public int staticInt25711;
+    static public int staticInt25712;
+    static public int staticInt25713;
+    static public int staticInt25714;
+    static public int staticInt25715;
+    static public int staticInt25716;
+    static public int staticInt25717;
+    static public int staticInt25718;
+    static public int staticInt25719;
+    static public int staticInt25720;
+    static public int staticInt25721;
+    static public int staticInt25722;
+    static public int staticInt25723;
+    static public int staticInt25724;
+    static public int staticInt25725;
+    static public int staticInt25726;
+    static public int staticInt25727;
+    static public int staticInt25728;
+    static public int staticInt25729;
+    static public int staticInt25730;
+    static public int staticInt25731;
+    static public int staticInt25732;
+    static public int staticInt25733;
+    static public int staticInt25734;
+    static public int staticInt25735;
+    static public int staticInt25736;
+    static public int staticInt25737;
+    static public int staticInt25738;
+    static public int staticInt25739;
+    static public int staticInt25740;
+    static public int staticInt25741;
+    static public int staticInt25742;
+    static public int staticInt25743;
+    static public int staticInt25744;
+    static public int staticInt25745;
+    static public int staticInt25746;
+    static public int staticInt25747;
+    static public int staticInt25748;
+    static public int staticInt25749;
+    static public int staticInt25750;
+    static public int staticInt25751;
+    static public int staticInt25752;
+    static public int staticInt25753;
+    static public int staticInt25754;
+    static public int staticInt25755;
+    static public int staticInt25756;
+    static public int staticInt25757;
+    static public int staticInt25758;
+    static public int staticInt25759;
+    static public int staticInt25760;
+    static public int staticInt25761;
+    static public int staticInt25762;
+    static public int staticInt25763;
+    static public int staticInt25764;
+    static public int staticInt25765;
+    static public int staticInt25766;
+    static public int staticInt25767;
+    static public int staticInt25768;
+    static public int staticInt25769;
+    static public int staticInt25770;
+    static public int staticInt25771;
+    static public int staticInt25772;
+    static public int staticInt25773;
+    static public int staticInt25774;
+    static public int staticInt25775;
+    static public int staticInt25776;
+    static public int staticInt25777;
+    static public int staticInt25778;
+    static public int staticInt25779;
+    static public int staticInt25780;
+    static public int staticInt25781;
+    static public int staticInt25782;
+    static public int staticInt25783;
+    static public int staticInt25784;
+    static public int staticInt25785;
+    static public int staticInt25786;
+    static public int staticInt25787;
+    static public int staticInt25788;
+    static public int staticInt25789;
+    static public int staticInt25790;
+    static public int staticInt25791;
+    static public int staticInt25792;
+    static public int staticInt25793;
+    static public int staticInt25794;
+    static public int staticInt25795;
+    static public int staticInt25796;
+    static public int staticInt25797;
+    static public int staticInt25798;
+    static public int staticInt25799;
+    static public int staticInt25800;
+    static public int staticInt25801;
+    static public int staticInt25802;
+    static public int staticInt25803;
+    static public int staticInt25804;
+    static public int staticInt25805;
+    static public int staticInt25806;
+    static public int staticInt25807;
+    static public int staticInt25808;
+    static public int staticInt25809;
+    static public int staticInt25810;
+    static public int staticInt25811;
+    static public int staticInt25812;
+    static public int staticInt25813;
+    static public int staticInt25814;
+    static public int staticInt25815;
+    static public int staticInt25816;
+    static public int staticInt25817;
+    static public int staticInt25818;
+    static public int staticInt25819;
+    static public int staticInt25820;
+    static public int staticInt25821;
+    static public int staticInt25822;
+    static public int staticInt25823;
+    static public int staticInt25824;
+    static public int staticInt25825;
+    static public int staticInt25826;
+    static public int staticInt25827;
+    static public int staticInt25828;
+    static public int staticInt25829;
+    static public int staticInt25830;
+    static public int staticInt25831;
+    static public int staticInt25832;
+    static public int staticInt25833;
+    static public int staticInt25834;
+    static public int staticInt25835;
+    static public int staticInt25836;
+    static public int staticInt25837;
+    static public int staticInt25838;
+    static public int staticInt25839;
+    static public int staticInt25840;
+    static public int staticInt25841;
+    static public int staticInt25842;
+    static public int staticInt25843;
+    static public int staticInt25844;
+    static public int staticInt25845;
+    static public int staticInt25846;
+    static public int staticInt25847;
+    static public int staticInt25848;
+    static public int staticInt25849;
+    static public int staticInt25850;
+    static public int staticInt25851;
+    static public int staticInt25852;
+    static public int staticInt25853;
+    static public int staticInt25854;
+    static public int staticInt25855;
+    static public int staticInt25856;
+    static public int staticInt25857;
+    static public int staticInt25858;
+    static public int staticInt25859;
+    static public int staticInt25860;
+    static public int staticInt25861;
+    static public int staticInt25862;
+    static public int staticInt25863;
+    static public int staticInt25864;
+    static public int staticInt25865;
+    static public int staticInt25866;
+    static public int staticInt25867;
+    static public int staticInt25868;
+    static public int staticInt25869;
+    static public int staticInt25870;
+    static public int staticInt25871;
+    static public int staticInt25872;
+    static public int staticInt25873;
+    static public int staticInt25874;
+    static public int staticInt25875;
+    static public int staticInt25876;
+    static public int staticInt25877;
+    static public int staticInt25878;
+    static public int staticInt25879;
+    static public int staticInt25880;
+    static public int staticInt25881;
+    static public int staticInt25882;
+    static public int staticInt25883;
+    static public int staticInt25884;
+    static public int staticInt25885;
+    static public int staticInt25886;
+    static public int staticInt25887;
+    static public int staticInt25888;
+    static public int staticInt25889;
+    static public int staticInt25890;
+    static public int staticInt25891;
+    static public int staticInt25892;
+    static public int staticInt25893;
+    static public int staticInt25894;
+    static public int staticInt25895;
+    static public int staticInt25896;
+    static public int staticInt25897;
+    static public int staticInt25898;
+    static public int staticInt25899;
+    static public int staticInt25900;
+    static public int staticInt25901;
+    static public int staticInt25902;
+    static public int staticInt25903;
+    static public int staticInt25904;
+    static public int staticInt25905;
+    static public int staticInt25906;
+    static public int staticInt25907;
+    static public int staticInt25908;
+    static public int staticInt25909;
+    static public int staticInt25910;
+    static public int staticInt25911;
+    static public int staticInt25912;
+    static public int staticInt25913;
+    static public int staticInt25914;
+    static public int staticInt25915;
+    static public int staticInt25916;
+    static public int staticInt25917;
+    static public int staticInt25918;
+    static public int staticInt25919;
+    static public int staticInt25920;
+    static public int staticInt25921;
+    static public int staticInt25922;
+    static public int staticInt25923;
+    static public int staticInt25924;
+    static public int staticInt25925;
+    static public int staticInt25926;
+    static public int staticInt25927;
+    static public int staticInt25928;
+    static public int staticInt25929;
+    static public int staticInt25930;
+    static public int staticInt25931;
+    static public int staticInt25932;
+    static public int staticInt25933;
+    static public int staticInt25934;
+    static public int staticInt25935;
+    static public int staticInt25936;
+    static public int staticInt25937;
+    static public int staticInt25938;
+    static public int staticInt25939;
+    static public int staticInt25940;
+    static public int staticInt25941;
+    static public int staticInt25942;
+    static public int staticInt25943;
+    static public int staticInt25944;
+    static public int staticInt25945;
+    static public int staticInt25946;
+    static public int staticInt25947;
+    static public int staticInt25948;
+    static public int staticInt25949;
+    static public int staticInt25950;
+    static public int staticInt25951;
+    static public int staticInt25952;
+    static public int staticInt25953;
+    static public int staticInt25954;
+    static public int staticInt25955;
+    static public int staticInt25956;
+    static public int staticInt25957;
+    static public int staticInt25958;
+    static public int staticInt25959;
+    static public int staticInt25960;
+    static public int staticInt25961;
+    static public int staticInt25962;
+    static public int staticInt25963;
+    static public int staticInt25964;
+    static public int staticInt25965;
+    static public int staticInt25966;
+    static public int staticInt25967;
+    static public int staticInt25968;
+    static public int staticInt25969;
+    static public int staticInt25970;
+    static public int staticInt25971;
+    static public int staticInt25972;
+    static public int staticInt25973;
+    static public int staticInt25974;
+    static public int staticInt25975;
+    static public int staticInt25976;
+    static public int staticInt25977;
+    static public int staticInt25978;
+    static public int staticInt25979;
+    static public int staticInt25980;
+    static public int staticInt25981;
+    static public int staticInt25982;
+    static public int staticInt25983;
+    static public int staticInt25984;
+    static public int staticInt25985;
+    static public int staticInt25986;
+    static public int staticInt25987;
+    static public int staticInt25988;
+    static public int staticInt25989;
+    static public int staticInt25990;
+    static public int staticInt25991;
+    static public int staticInt25992;
+    static public int staticInt25993;
+    static public int staticInt25994;
+    static public int staticInt25995;
+    static public int staticInt25996;
+    static public int staticInt25997;
+    static public int staticInt25998;
+    static public int staticInt25999;
+    static public int staticInt26000;
+    static public int staticInt26001;
+    static public int staticInt26002;
+    static public int staticInt26003;
+    static public int staticInt26004;
+    static public int staticInt26005;
+    static public int staticInt26006;
+    static public int staticInt26007;
+    static public int staticInt26008;
+    static public int staticInt26009;
+    static public int staticInt26010;
+    static public int staticInt26011;
+    static public int staticInt26012;
+    static public int staticInt26013;
+    static public int staticInt26014;
+    static public int staticInt26015;
+    static public int staticInt26016;
+    static public int staticInt26017;
+    static public int staticInt26018;
+    static public int staticInt26019;
+    static public int staticInt26020;
+    static public int staticInt26021;
+    static public int staticInt26022;
+    static public int staticInt26023;
+    static public int staticInt26024;
+    static public int staticInt26025;
+    static public int staticInt26026;
+    static public int staticInt26027;
+    static public int staticInt26028;
+    static public int staticInt26029;
+    static public int staticInt26030;
+    static public int staticInt26031;
+    static public int staticInt26032;
+    static public int staticInt26033;
+    static public int staticInt26034;
+    static public int staticInt26035;
+    static public int staticInt26036;
+    static public int staticInt26037;
+    static public int staticInt26038;
+    static public int staticInt26039;
+    static public int staticInt26040;
+    static public int staticInt26041;
+    static public int staticInt26042;
+    static public int staticInt26043;
+    static public int staticInt26044;
+    static public int staticInt26045;
+    static public int staticInt26046;
+    static public int staticInt26047;
+    static public int staticInt26048;
+    static public int staticInt26049;
+    static public int staticInt26050;
+    static public int staticInt26051;
+    static public int staticInt26052;
+    static public int staticInt26053;
+    static public int staticInt26054;
+    static public int staticInt26055;
+    static public int staticInt26056;
+    static public int staticInt26057;
+    static public int staticInt26058;
+    static public int staticInt26059;
+    static public int staticInt26060;
+    static public int staticInt26061;
+    static public int staticInt26062;
+    static public int staticInt26063;
+    static public int staticInt26064;
+    static public int staticInt26065;
+    static public int staticInt26066;
+    static public int staticInt26067;
+    static public int staticInt26068;
+    static public int staticInt26069;
+    static public int staticInt26070;
+    static public int staticInt26071;
+    static public int staticInt26072;
+    static public int staticInt26073;
+    static public int staticInt26074;
+    static public int staticInt26075;
+    static public int staticInt26076;
+    static public int staticInt26077;
+    static public int staticInt26078;
+    static public int staticInt26079;
+    static public int staticInt26080;
+    static public int staticInt26081;
+    static public int staticInt26082;
+    static public int staticInt26083;
+    static public int staticInt26084;
+    static public int staticInt26085;
+    static public int staticInt26086;
+    static public int staticInt26087;
+    static public int staticInt26088;
+    static public int staticInt26089;
+    static public int staticInt26090;
+    static public int staticInt26091;
+    static public int staticInt26092;
+    static public int staticInt26093;
+    static public int staticInt26094;
+    static public int staticInt26095;
+    static public int staticInt26096;
+    static public int staticInt26097;
+    static public int staticInt26098;
+    static public int staticInt26099;
+    static public int staticInt26100;
+    static public int staticInt26101;
+    static public int staticInt26102;
+    static public int staticInt26103;
+    static public int staticInt26104;
+    static public int staticInt26105;
+    static public int staticInt26106;
+    static public int staticInt26107;
+    static public int staticInt26108;
+    static public int staticInt26109;
+    static public int staticInt26110;
+    static public int staticInt26111;
+    static public int staticInt26112;
+    static public int staticInt26113;
+    static public int staticInt26114;
+    static public int staticInt26115;
+    static public int staticInt26116;
+    static public int staticInt26117;
+    static public int staticInt26118;
+    static public int staticInt26119;
+    static public int staticInt26120;
+    static public int staticInt26121;
+    static public int staticInt26122;
+    static public int staticInt26123;
+    static public int staticInt26124;
+    static public int staticInt26125;
+    static public int staticInt26126;
+    static public int staticInt26127;
+    static public int staticInt26128;
+    static public int staticInt26129;
+    static public int staticInt26130;
+    static public int staticInt26131;
+    static public int staticInt26132;
+    static public int staticInt26133;
+    static public int staticInt26134;
+    static public int staticInt26135;
+    static public int staticInt26136;
+    static public int staticInt26137;
+    static public int staticInt26138;
+    static public int staticInt26139;
+    static public int staticInt26140;
+    static public int staticInt26141;
+    static public int staticInt26142;
+    static public int staticInt26143;
+    static public int staticInt26144;
+    static public int staticInt26145;
+    static public int staticInt26146;
+    static public int staticInt26147;
+    static public int staticInt26148;
+    static public int staticInt26149;
+    static public int staticInt26150;
+    static public int staticInt26151;
+    static public int staticInt26152;
+    static public int staticInt26153;
+    static public int staticInt26154;
+    static public int staticInt26155;
+    static public int staticInt26156;
+    static public int staticInt26157;
+    static public int staticInt26158;
+    static public int staticInt26159;
+    static public int staticInt26160;
+    static public int staticInt26161;
+    static public int staticInt26162;
+    static public int staticInt26163;
+    static public int staticInt26164;
+    static public int staticInt26165;
+    static public int staticInt26166;
+    static public int staticInt26167;
+    static public int staticInt26168;
+    static public int staticInt26169;
+    static public int staticInt26170;
+    static public int staticInt26171;
+    static public int staticInt26172;
+    static public int staticInt26173;
+    static public int staticInt26174;
+    static public int staticInt26175;
+    static public int staticInt26176;
+    static public int staticInt26177;
+    static public int staticInt26178;
+    static public int staticInt26179;
+    static public int staticInt26180;
+    static public int staticInt26181;
+    static public int staticInt26182;
+    static public int staticInt26183;
+    static public int staticInt26184;
+    static public int staticInt26185;
+    static public int staticInt26186;
+    static public int staticInt26187;
+    static public int staticInt26188;
+    static public int staticInt26189;
+    static public int staticInt26190;
+    static public int staticInt26191;
+    static public int staticInt26192;
+    static public int staticInt26193;
+    static public int staticInt26194;
+    static public int staticInt26195;
+    static public int staticInt26196;
+    static public int staticInt26197;
+    static public int staticInt26198;
+    static public int staticInt26199;
+    static public int staticInt26200;
+    static public int staticInt26201;
+    static public int staticInt26202;
+    static public int staticInt26203;
+    static public int staticInt26204;
+    static public int staticInt26205;
+    static public int staticInt26206;
+    static public int staticInt26207;
+    static public int staticInt26208;
+    static public int staticInt26209;
+    static public int staticInt26210;
+    static public int staticInt26211;
+    static public int staticInt26212;
+    static public int staticInt26213;
+    static public int staticInt26214;
+    static public int staticInt26215;
+    static public int staticInt26216;
+    static public int staticInt26217;
+    static public int staticInt26218;
+    static public int staticInt26219;
+    static public int staticInt26220;
+    static public int staticInt26221;
+    static public int staticInt26222;
+    static public int staticInt26223;
+    static public int staticInt26224;
+    static public int staticInt26225;
+    static public int staticInt26226;
+    static public int staticInt26227;
+    static public int staticInt26228;
+    static public int staticInt26229;
+    static public int staticInt26230;
+    static public int staticInt26231;
+    static public int staticInt26232;
+    static public int staticInt26233;
+    static public int staticInt26234;
+    static public int staticInt26235;
+    static public int staticInt26236;
+    static public int staticInt26237;
+    static public int staticInt26238;
+    static public int staticInt26239;
+    static public int staticInt26240;
+    static public int staticInt26241;
+    static public int staticInt26242;
+    static public int staticInt26243;
+    static public int staticInt26244;
+    static public int staticInt26245;
+    static public int staticInt26246;
+    static public int staticInt26247;
+    static public int staticInt26248;
+    static public int staticInt26249;
+    static public int staticInt26250;
+    static public int staticInt26251;
+    static public int staticInt26252;
+    static public int staticInt26253;
+    static public int staticInt26254;
+    static public int staticInt26255;
+    static public int staticInt26256;
+    static public int staticInt26257;
+    static public int staticInt26258;
+    static public int staticInt26259;
+    static public int staticInt26260;
+    static public int staticInt26261;
+    static public int staticInt26262;
+    static public int staticInt26263;
+    static public int staticInt26264;
+    static public int staticInt26265;
+    static public int staticInt26266;
+    static public int staticInt26267;
+    static public int staticInt26268;
+    static public int staticInt26269;
+    static public int staticInt26270;
+    static public int staticInt26271;
+    static public int staticInt26272;
+    static public int staticInt26273;
+    static public int staticInt26274;
+    static public int staticInt26275;
+    static public int staticInt26276;
+    static public int staticInt26277;
+    static public int staticInt26278;
+    static public int staticInt26279;
+    static public int staticInt26280;
+    static public int staticInt26281;
+    static public int staticInt26282;
+    static public int staticInt26283;
+    static public int staticInt26284;
+    static public int staticInt26285;
+    static public int staticInt26286;
+    static public int staticInt26287;
+    static public int staticInt26288;
+    static public int staticInt26289;
+    static public int staticInt26290;
+    static public int staticInt26291;
+    static public int staticInt26292;
+    static public int staticInt26293;
+    static public int staticInt26294;
+    static public int staticInt26295;
+    static public int staticInt26296;
+    static public int staticInt26297;
+    static public int staticInt26298;
+    static public int staticInt26299;
+    static public int staticInt26300;
+    static public int staticInt26301;
+    static public int staticInt26302;
+    static public int staticInt26303;
+    static public int staticInt26304;
+    static public int staticInt26305;
+    static public int staticInt26306;
+    static public int staticInt26307;
+    static public int staticInt26308;
+    static public int staticInt26309;
+    static public int staticInt26310;
+    static public int staticInt26311;
+    static public int staticInt26312;
+    static public int staticInt26313;
+    static public int staticInt26314;
+    static public int staticInt26315;
+    static public int staticInt26316;
+    static public int staticInt26317;
+    static public int staticInt26318;
+    static public int staticInt26319;
+    static public int staticInt26320;
+    static public int staticInt26321;
+    static public int staticInt26322;
+    static public int staticInt26323;
+    static public int staticInt26324;
+    static public int staticInt26325;
+    static public int staticInt26326;
+    static public int staticInt26327;
+    static public int staticInt26328;
+    static public int staticInt26329;
+    static public int staticInt26330;
+    static public int staticInt26331;
+    static public int staticInt26332;
+    static public int staticInt26333;
+    static public int staticInt26334;
+    static public int staticInt26335;
+    static public int staticInt26336;
+    static public int staticInt26337;
+    static public int staticInt26338;
+    static public int staticInt26339;
+    static public int staticInt26340;
+    static public int staticInt26341;
+    static public int staticInt26342;
+    static public int staticInt26343;
+    static public int staticInt26344;
+    static public int staticInt26345;
+    static public int staticInt26346;
+    static public int staticInt26347;
+    static public int staticInt26348;
+    static public int staticInt26349;
+    static public int staticInt26350;
+    static public int staticInt26351;
+    static public int staticInt26352;
+    static public int staticInt26353;
+    static public int staticInt26354;
+    static public int staticInt26355;
+    static public int staticInt26356;
+    static public int staticInt26357;
+    static public int staticInt26358;
+    static public int staticInt26359;
+    static public int staticInt26360;
+    static public int staticInt26361;
+    static public int staticInt26362;
+    static public int staticInt26363;
+    static public int staticInt26364;
+    static public int staticInt26365;
+    static public int staticInt26366;
+    static public int staticInt26367;
+    static public int staticInt26368;
+    static public int staticInt26369;
+    static public int staticInt26370;
+    static public int staticInt26371;
+    static public int staticInt26372;
+    static public int staticInt26373;
+    static public int staticInt26374;
+    static public int staticInt26375;
+    static public int staticInt26376;
+    static public int staticInt26377;
+    static public int staticInt26378;
+    static public int staticInt26379;
+    static public int staticInt26380;
+    static public int staticInt26381;
+    static public int staticInt26382;
+    static public int staticInt26383;
+    static public int staticInt26384;
+    static public int staticInt26385;
+    static public int staticInt26386;
+    static public int staticInt26387;
+    static public int staticInt26388;
+    static public int staticInt26389;
+    static public int staticInt26390;
+    static public int staticInt26391;
+    static public int staticInt26392;
+    static public int staticInt26393;
+    static public int staticInt26394;
+    static public int staticInt26395;
+    static public int staticInt26396;
+    static public int staticInt26397;
+    static public int staticInt26398;
+    static public int staticInt26399;
+    static public int staticInt26400;
+    static public int staticInt26401;
+    static public int staticInt26402;
+    static public int staticInt26403;
+    static public int staticInt26404;
+    static public int staticInt26405;
+    static public int staticInt26406;
+    static public int staticInt26407;
+    static public int staticInt26408;
+    static public int staticInt26409;
+    static public int staticInt26410;
+    static public int staticInt26411;
+    static public int staticInt26412;
+    static public int staticInt26413;
+    static public int staticInt26414;
+    static public int staticInt26415;
+    static public int staticInt26416;
+    static public int staticInt26417;
+    static public int staticInt26418;
+    static public int staticInt26419;
+    static public int staticInt26420;
+    static public int staticInt26421;
+    static public int staticInt26422;
+    static public int staticInt26423;
+    static public int staticInt26424;
+    static public int staticInt26425;
+    static public int staticInt26426;
+    static public int staticInt26427;
+    static public int staticInt26428;
+    static public int staticInt26429;
+    static public int staticInt26430;
+    static public int staticInt26431;
+    static public int staticInt26432;
+    static public int staticInt26433;
+    static public int staticInt26434;
+    static public int staticInt26435;
+    static public int staticInt26436;
+    static public int staticInt26437;
+    static public int staticInt26438;
+    static public int staticInt26439;
+    static public int staticInt26440;
+    static public int staticInt26441;
+    static public int staticInt26442;
+    static public int staticInt26443;
+    static public int staticInt26444;
+    static public int staticInt26445;
+    static public int staticInt26446;
+    static public int staticInt26447;
+    static public int staticInt26448;
+    static public int staticInt26449;
+    static public int staticInt26450;
+    static public int staticInt26451;
+    static public int staticInt26452;
+    static public int staticInt26453;
+    static public int staticInt26454;
+    static public int staticInt26455;
+    static public int staticInt26456;
+    static public int staticInt26457;
+    static public int staticInt26458;
+    static public int staticInt26459;
+    static public int staticInt26460;
+    static public int staticInt26461;
+    static public int staticInt26462;
+    static public int staticInt26463;
+    static public int staticInt26464;
+    static public int staticInt26465;
+    static public int staticInt26466;
+    static public int staticInt26467;
+    static public int staticInt26468;
+    static public int staticInt26469;
+    static public int staticInt26470;
+    static public int staticInt26471;
+    static public int staticInt26472;
+    static public int staticInt26473;
+    static public int staticInt26474;
+    static public int staticInt26475;
+    static public int staticInt26476;
+    static public int staticInt26477;
+    static public int staticInt26478;
+    static public int staticInt26479;
+    static public int staticInt26480;
+    static public int staticInt26481;
+    static public int staticInt26482;
+    static public int staticInt26483;
+    static public int staticInt26484;
+    static public int staticInt26485;
+    static public int staticInt26486;
+    static public int staticInt26487;
+    static public int staticInt26488;
+    static public int staticInt26489;
+    static public int staticInt26490;
+    static public int staticInt26491;
+    static public int staticInt26492;
+    static public int staticInt26493;
+    static public int staticInt26494;
+    static public int staticInt26495;
+    static public int staticInt26496;
+    static public int staticInt26497;
+    static public int staticInt26498;
+    static public int staticInt26499;
+    static public int staticInt26500;
+    static public int staticInt26501;
+    static public int staticInt26502;
+    static public int staticInt26503;
+    static public int staticInt26504;
+    static public int staticInt26505;
+    static public int staticInt26506;
+    static public int staticInt26507;
+    static public int staticInt26508;
+    static public int staticInt26509;
+    static public int staticInt26510;
+    static public int staticInt26511;
+    static public int staticInt26512;
+    static public int staticInt26513;
+    static public int staticInt26514;
+    static public int staticInt26515;
+    static public int staticInt26516;
+    static public int staticInt26517;
+    static public int staticInt26518;
+    static public int staticInt26519;
+    static public int staticInt26520;
+    static public int staticInt26521;
+    static public int staticInt26522;
+    static public int staticInt26523;
+    static public int staticInt26524;
+    static public int staticInt26525;
+    static public int staticInt26526;
+    static public int staticInt26527;
+    static public int staticInt26528;
+    static public int staticInt26529;
+    static public int staticInt26530;
+    static public int staticInt26531;
+    static public int staticInt26532;
+    static public int staticInt26533;
+    static public int staticInt26534;
+    static public int staticInt26535;
+    static public int staticInt26536;
+    static public int staticInt26537;
+    static public int staticInt26538;
+    static public int staticInt26539;
+    static public int staticInt26540;
+    static public int staticInt26541;
+    static public int staticInt26542;
+    static public int staticInt26543;
+    static public int staticInt26544;
+    static public int staticInt26545;
+    static public int staticInt26546;
+    static public int staticInt26547;
+    static public int staticInt26548;
+    static public int staticInt26549;
+    static public int staticInt26550;
+    static public int staticInt26551;
+    static public int staticInt26552;
+    static public int staticInt26553;
+    static public int staticInt26554;
+    static public int staticInt26555;
+    static public int staticInt26556;
+    static public int staticInt26557;
+    static public int staticInt26558;
+    static public int staticInt26559;
+    static public int staticInt26560;
+    static public int staticInt26561;
+    static public int staticInt26562;
+    static public int staticInt26563;
+    static public int staticInt26564;
+    static public int staticInt26565;
+    static public int staticInt26566;
+    static public int staticInt26567;
+    static public int staticInt26568;
+    static public int staticInt26569;
+    static public int staticInt26570;
+    static public int staticInt26571;
+    static public int staticInt26572;
+    static public int staticInt26573;
+    static public int staticInt26574;
+    static public int staticInt26575;
+    static public int staticInt26576;
+    static public int staticInt26577;
+    static public int staticInt26578;
+    static public int staticInt26579;
+    static public int staticInt26580;
+    static public int staticInt26581;
+    static public int staticInt26582;
+    static public int staticInt26583;
+    static public int staticInt26584;
+    static public int staticInt26585;
+    static public int staticInt26586;
+    static public int staticInt26587;
+    static public int staticInt26588;
+    static public int staticInt26589;
+    static public int staticInt26590;
+    static public int staticInt26591;
+    static public int staticInt26592;
+    static public int staticInt26593;
+    static public int staticInt26594;
+    static public int staticInt26595;
+    static public int staticInt26596;
+    static public int staticInt26597;
+    static public int staticInt26598;
+    static public int staticInt26599;
+    static public int staticInt26600;
+    static public int staticInt26601;
+    static public int staticInt26602;
+    static public int staticInt26603;
+    static public int staticInt26604;
+    static public int staticInt26605;
+    static public int staticInt26606;
+    static public int staticInt26607;
+    static public int staticInt26608;
+    static public int staticInt26609;
+    static public int staticInt26610;
+    static public int staticInt26611;
+    static public int staticInt26612;
+    static public int staticInt26613;
+    static public int staticInt26614;
+    static public int staticInt26615;
+    static public int staticInt26616;
+    static public int staticInt26617;
+    static public int staticInt26618;
+    static public int staticInt26619;
+    static public int staticInt26620;
+    static public int staticInt26621;
+    static public int staticInt26622;
+    static public int staticInt26623;
+    static public int staticInt26624;
+    static public int staticInt26625;
+    static public int staticInt26626;
+    static public int staticInt26627;
+    static public int staticInt26628;
+    static public int staticInt26629;
+    static public int staticInt26630;
+    static public int staticInt26631;
+    static public int staticInt26632;
+    static public int staticInt26633;
+    static public int staticInt26634;
+    static public int staticInt26635;
+    static public int staticInt26636;
+    static public int staticInt26637;
+    static public int staticInt26638;
+    static public int staticInt26639;
+    static public int staticInt26640;
+    static public int staticInt26641;
+    static public int staticInt26642;
+    static public int staticInt26643;
+    static public int staticInt26644;
+    static public int staticInt26645;
+    static public int staticInt26646;
+    static public int staticInt26647;
+    static public int staticInt26648;
+    static public int staticInt26649;
+    static public int staticInt26650;
+    static public int staticInt26651;
+    static public int staticInt26652;
+    static public int staticInt26653;
+    static public int staticInt26654;
+    static public int staticInt26655;
+    static public int staticInt26656;
+    static public int staticInt26657;
+    static public int staticInt26658;
+    static public int staticInt26659;
+    static public int staticInt26660;
+    static public int staticInt26661;
+    static public int staticInt26662;
+    static public int staticInt26663;
+    static public int staticInt26664;
+    static public int staticInt26665;
+    static public int staticInt26666;
+    static public int staticInt26667;
+    static public int staticInt26668;
+    static public int staticInt26669;
+    static public int staticInt26670;
+    static public int staticInt26671;
+    static public int staticInt26672;
+    static public int staticInt26673;
+    static public int staticInt26674;
+    static public int staticInt26675;
+    static public int staticInt26676;
+    static public int staticInt26677;
+    static public int staticInt26678;
+    static public int staticInt26679;
+    static public int staticInt26680;
+    static public int staticInt26681;
+    static public int staticInt26682;
+    static public int staticInt26683;
+    static public int staticInt26684;
+    static public int staticInt26685;
+    static public int staticInt26686;
+    static public int staticInt26687;
+    static public int staticInt26688;
+    static public int staticInt26689;
+    static public int staticInt26690;
+    static public int staticInt26691;
+    static public int staticInt26692;
+    static public int staticInt26693;
+    static public int staticInt26694;
+    static public int staticInt26695;
+    static public int staticInt26696;
+    static public int staticInt26697;
+    static public int staticInt26698;
+    static public int staticInt26699;
+    static public int staticInt26700;
+    static public int staticInt26701;
+    static public int staticInt26702;
+    static public int staticInt26703;
+    static public int staticInt26704;
+    static public int staticInt26705;
+    static public int staticInt26706;
+    static public int staticInt26707;
+    static public int staticInt26708;
+    static public int staticInt26709;
+    static public int staticInt26710;
+    static public int staticInt26711;
+    static public int staticInt26712;
+    static public int staticInt26713;
+    static public int staticInt26714;
+    static public int staticInt26715;
+    static public int staticInt26716;
+    static public int staticInt26717;
+    static public int staticInt26718;
+    static public int staticInt26719;
+    static public int staticInt26720;
+    static public int staticInt26721;
+    static public int staticInt26722;
+    static public int staticInt26723;
+    static public int staticInt26724;
+    static public int staticInt26725;
+    static public int staticInt26726;
+    static public int staticInt26727;
+    static public int staticInt26728;
+    static public int staticInt26729;
+    static public int staticInt26730;
+    static public int staticInt26731;
+    static public int staticInt26732;
+    static public int staticInt26733;
+    static public int staticInt26734;
+    static public int staticInt26735;
+    static public int staticInt26736;
+    static public int staticInt26737;
+    static public int staticInt26738;
+    static public int staticInt26739;
+    static public int staticInt26740;
+    static public int staticInt26741;
+    static public int staticInt26742;
+    static public int staticInt26743;
+    static public int staticInt26744;
+    static public int staticInt26745;
+    static public int staticInt26746;
+    static public int staticInt26747;
+    static public int staticInt26748;
+    static public int staticInt26749;
+    static public int staticInt26750;
+    static public int staticInt26751;
+    static public int staticInt26752;
+    static public int staticInt26753;
+    static public int staticInt26754;
+    static public int staticInt26755;
+    static public int staticInt26756;
+    static public int staticInt26757;
+    static public int staticInt26758;
+    static public int staticInt26759;
+    static public int staticInt26760;
+    static public int staticInt26761;
+    static public int staticInt26762;
+    static public int staticInt26763;
+    static public int staticInt26764;
+    static public int staticInt26765;
+    static public int staticInt26766;
+    static public int staticInt26767;
+    static public int staticInt26768;
+    static public int staticInt26769;
+    static public int staticInt26770;
+    static public int staticInt26771;
+    static public int staticInt26772;
+    static public int staticInt26773;
+    static public int staticInt26774;
+    static public int staticInt26775;
+    static public int staticInt26776;
+    static public int staticInt26777;
+    static public int staticInt26778;
+    static public int staticInt26779;
+    static public int staticInt26780;
+    static public int staticInt26781;
+    static public int staticInt26782;
+    static public int staticInt26783;
+    static public int staticInt26784;
+    static public int staticInt26785;
+    static public int staticInt26786;
+    static public int staticInt26787;
+    static public int staticInt26788;
+    static public int staticInt26789;
+    static public int staticInt26790;
+    static public int staticInt26791;
+    static public int staticInt26792;
+    static public int staticInt26793;
+    static public int staticInt26794;
+    static public int staticInt26795;
+    static public int staticInt26796;
+    static public int staticInt26797;
+    static public int staticInt26798;
+    static public int staticInt26799;
+    static public int staticInt26800;
+    static public int staticInt26801;
+    static public int staticInt26802;
+    static public int staticInt26803;
+    static public int staticInt26804;
+    static public int staticInt26805;
+    static public int staticInt26806;
+    static public int staticInt26807;
+    static public int staticInt26808;
+    static public int staticInt26809;
+    static public int staticInt26810;
+    static public int staticInt26811;
+    static public int staticInt26812;
+    static public int staticInt26813;
+    static public int staticInt26814;
+    static public int staticInt26815;
+    static public int staticInt26816;
+    static public int staticInt26817;
+    static public int staticInt26818;
+    static public int staticInt26819;
+    static public int staticInt26820;
+    static public int staticInt26821;
+    static public int staticInt26822;
+    static public int staticInt26823;
+    static public int staticInt26824;
+    static public int staticInt26825;
+    static public int staticInt26826;
+    static public int staticInt26827;
+    static public int staticInt26828;
+    static public int staticInt26829;
+    static public int staticInt26830;
+    static public int staticInt26831;
+    static public int staticInt26832;
+    static public int staticInt26833;
+    static public int staticInt26834;
+    static public int staticInt26835;
+    static public int staticInt26836;
+    static public int staticInt26837;
+    static public int staticInt26838;
+    static public int staticInt26839;
+    static public int staticInt26840;
+    static public int staticInt26841;
+    static public int staticInt26842;
+    static public int staticInt26843;
+    static public int staticInt26844;
+    static public int staticInt26845;
+    static public int staticInt26846;
+    static public int staticInt26847;
+    static public int staticInt26848;
+    static public int staticInt26849;
+    static public int staticInt26850;
+    static public int staticInt26851;
+    static public int staticInt26852;
+    static public int staticInt26853;
+    static public int staticInt26854;
+    static public int staticInt26855;
+    static public int staticInt26856;
+    static public int staticInt26857;
+    static public int staticInt26858;
+    static public int staticInt26859;
+    static public int staticInt26860;
+    static public int staticInt26861;
+    static public int staticInt26862;
+    static public int staticInt26863;
+    static public int staticInt26864;
+    static public int staticInt26865;
+    static public int staticInt26866;
+    static public int staticInt26867;
+    static public int staticInt26868;
+    static public int staticInt26869;
+    static public int staticInt26870;
+    static public int staticInt26871;
+    static public int staticInt26872;
+    static public int staticInt26873;
+    static public int staticInt26874;
+    static public int staticInt26875;
+    static public int staticInt26876;
+    static public int staticInt26877;
+    static public int staticInt26878;
+    static public int staticInt26879;
+    static public int staticInt26880;
+    static public int staticInt26881;
+    static public int staticInt26882;
+    static public int staticInt26883;
+    static public int staticInt26884;
+    static public int staticInt26885;
+    static public int staticInt26886;
+    static public int staticInt26887;
+    static public int staticInt26888;
+    static public int staticInt26889;
+    static public int staticInt26890;
+    static public int staticInt26891;
+    static public int staticInt26892;
+    static public int staticInt26893;
+    static public int staticInt26894;
+    static public int staticInt26895;
+    static public int staticInt26896;
+    static public int staticInt26897;
+    static public int staticInt26898;
+    static public int staticInt26899;
+    static public int staticInt26900;
+    static public int staticInt26901;
+    static public int staticInt26902;
+    static public int staticInt26903;
+    static public int staticInt26904;
+    static public int staticInt26905;
+    static public int staticInt26906;
+    static public int staticInt26907;
+    static public int staticInt26908;
+    static public int staticInt26909;
+    static public int staticInt26910;
+    static public int staticInt26911;
+    static public int staticInt26912;
+    static public int staticInt26913;
+    static public int staticInt26914;
+    static public int staticInt26915;
+    static public int staticInt26916;
+    static public int staticInt26917;
+    static public int staticInt26918;
+    static public int staticInt26919;
+    static public int staticInt26920;
+    static public int staticInt26921;
+    static public int staticInt26922;
+    static public int staticInt26923;
+    static public int staticInt26924;
+    static public int staticInt26925;
+    static public int staticInt26926;
+    static public int staticInt26927;
+    static public int staticInt26928;
+    static public int staticInt26929;
+    static public int staticInt26930;
+    static public int staticInt26931;
+    static public int staticInt26932;
+    static public int staticInt26933;
+    static public int staticInt26934;
+    static public int staticInt26935;
+    static public int staticInt26936;
+    static public int staticInt26937;
+    static public int staticInt26938;
+    static public int staticInt26939;
+    static public int staticInt26940;
+    static public int staticInt26941;
+    static public int staticInt26942;
+    static public int staticInt26943;
+    static public int staticInt26944;
+    static public int staticInt26945;
+    static public int staticInt26946;
+    static public int staticInt26947;
+    static public int staticInt26948;
+    static public int staticInt26949;
+    static public int staticInt26950;
+    static public int staticInt26951;
+    static public int staticInt26952;
+    static public int staticInt26953;
+    static public int staticInt26954;
+    static public int staticInt26955;
+    static public int staticInt26956;
+    static public int staticInt26957;
+    static public int staticInt26958;
+    static public int staticInt26959;
+    static public int staticInt26960;
+    static public int staticInt26961;
+    static public int staticInt26962;
+    static public int staticInt26963;
+    static public int staticInt26964;
+    static public int staticInt26965;
+    static public int staticInt26966;
+    static public int staticInt26967;
+    static public int staticInt26968;
+    static public int staticInt26969;
+    static public int staticInt26970;
+    static public int staticInt26971;
+    static public int staticInt26972;
+    static public int staticInt26973;
+    static public int staticInt26974;
+    static public int staticInt26975;
+    static public int staticInt26976;
+    static public int staticInt26977;
+    static public int staticInt26978;
+    static public int staticInt26979;
+    static public int staticInt26980;
+    static public int staticInt26981;
+    static public int staticInt26982;
+    static public int staticInt26983;
+    static public int staticInt26984;
+    static public int staticInt26985;
+    static public int staticInt26986;
+    static public int staticInt26987;
+    static public int staticInt26988;
+    static public int staticInt26989;
+    static public int staticInt26990;
+    static public int staticInt26991;
+    static public int staticInt26992;
+    static public int staticInt26993;
+    static public int staticInt26994;
+    static public int staticInt26995;
+    static public int staticInt26996;
+    static public int staticInt26997;
+    static public int staticInt26998;
+    static public int staticInt26999;
+    static public int staticInt27000;
+    static public int staticInt27001;
+    static public int staticInt27002;
+    static public int staticInt27003;
+    static public int staticInt27004;
+    static public int staticInt27005;
+    static public int staticInt27006;
+    static public int staticInt27007;
+    static public int staticInt27008;
+    static public int staticInt27009;
+    static public int staticInt27010;
+    static public int staticInt27011;
+    static public int staticInt27012;
+    static public int staticInt27013;
+    static public int staticInt27014;
+    static public int staticInt27015;
+    static public int staticInt27016;
+    static public int staticInt27017;
+    static public int staticInt27018;
+    static public int staticInt27019;
+    static public int staticInt27020;
+    static public int staticInt27021;
+    static public int staticInt27022;
+    static public int staticInt27023;
+    static public int staticInt27024;
+    static public int staticInt27025;
+    static public int staticInt27026;
+    static public int staticInt27027;
+    static public int staticInt27028;
+    static public int staticInt27029;
+    static public int staticInt27030;
+    static public int staticInt27031;
+    static public int staticInt27032;
+    static public int staticInt27033;
+    static public int staticInt27034;
+    static public int staticInt27035;
+    static public int staticInt27036;
+    static public int staticInt27037;
+    static public int staticInt27038;
+    static public int staticInt27039;
+    static public int staticInt27040;
+    static public int staticInt27041;
+    static public int staticInt27042;
+    static public int staticInt27043;
+    static public int staticInt27044;
+    static public int staticInt27045;
+    static public int staticInt27046;
+    static public int staticInt27047;
+    static public int staticInt27048;
+    static public int staticInt27049;
+    static public int staticInt27050;
+    static public int staticInt27051;
+    static public int staticInt27052;
+    static public int staticInt27053;
+    static public int staticInt27054;
+    static public int staticInt27055;
+    static public int staticInt27056;
+    static public int staticInt27057;
+    static public int staticInt27058;
+    static public int staticInt27059;
+    static public int staticInt27060;
+    static public int staticInt27061;
+    static public int staticInt27062;
+    static public int staticInt27063;
+    static public int staticInt27064;
+    static public int staticInt27065;
+    static public int staticInt27066;
+    static public int staticInt27067;
+    static public int staticInt27068;
+    static public int staticInt27069;
+    static public int staticInt27070;
+    static public int staticInt27071;
+    static public int staticInt27072;
+    static public int staticInt27073;
+    static public int staticInt27074;
+    static public int staticInt27075;
+    static public int staticInt27076;
+    static public int staticInt27077;
+    static public int staticInt27078;
+    static public int staticInt27079;
+    static public int staticInt27080;
+    static public int staticInt27081;
+    static public int staticInt27082;
+    static public int staticInt27083;
+    static public int staticInt27084;
+    static public int staticInt27085;
+    static public int staticInt27086;
+    static public int staticInt27087;
+    static public int staticInt27088;
+    static public int staticInt27089;
+    static public int staticInt27090;
+    static public int staticInt27091;
+    static public int staticInt27092;
+    static public int staticInt27093;
+    static public int staticInt27094;
+    static public int staticInt27095;
+    static public int staticInt27096;
+    static public int staticInt27097;
+    static public int staticInt27098;
+    static public int staticInt27099;
+    static public int staticInt27100;
+    static public int staticInt27101;
+    static public int staticInt27102;
+    static public int staticInt27103;
+    static public int staticInt27104;
+    static public int staticInt27105;
+    static public int staticInt27106;
+    static public int staticInt27107;
+    static public int staticInt27108;
+    static public int staticInt27109;
+    static public int staticInt27110;
+    static public int staticInt27111;
+    static public int staticInt27112;
+    static public int staticInt27113;
+    static public int staticInt27114;
+    static public int staticInt27115;
+    static public int staticInt27116;
+    static public int staticInt27117;
+    static public int staticInt27118;
+    static public int staticInt27119;
+    static public int staticInt27120;
+    static public int staticInt27121;
+    static public int staticInt27122;
+    static public int staticInt27123;
+    static public int staticInt27124;
+    static public int staticInt27125;
+    static public int staticInt27126;
+    static public int staticInt27127;
+    static public int staticInt27128;
+    static public int staticInt27129;
+    static public int staticInt27130;
+    static public int staticInt27131;
+    static public int staticInt27132;
+    static public int staticInt27133;
+    static public int staticInt27134;
+    static public int staticInt27135;
+    static public int staticInt27136;
+    static public int staticInt27137;
+    static public int staticInt27138;
+    static public int staticInt27139;
+    static public int staticInt27140;
+    static public int staticInt27141;
+    static public int staticInt27142;
+    static public int staticInt27143;
+    static public int staticInt27144;
+    static public int staticInt27145;
+    static public int staticInt27146;
+    static public int staticInt27147;
+    static public int staticInt27148;
+    static public int staticInt27149;
+    static public int staticInt27150;
+    static public int staticInt27151;
+    static public int staticInt27152;
+    static public int staticInt27153;
+    static public int staticInt27154;
+    static public int staticInt27155;
+    static public int staticInt27156;
+    static public int staticInt27157;
+    static public int staticInt27158;
+    static public int staticInt27159;
+    static public int staticInt27160;
+    static public int staticInt27161;
+    static public int staticInt27162;
+    static public int staticInt27163;
+    static public int staticInt27164;
+    static public int staticInt27165;
+    static public int staticInt27166;
+    static public int staticInt27167;
+    static public int staticInt27168;
+    static public int staticInt27169;
+    static public int staticInt27170;
+    static public int staticInt27171;
+    static public int staticInt27172;
+    static public int staticInt27173;
+    static public int staticInt27174;
+    static public int staticInt27175;
+    static public int staticInt27176;
+    static public int staticInt27177;
+    static public int staticInt27178;
+    static public int staticInt27179;
+    static public int staticInt27180;
+    static public int staticInt27181;
+    static public int staticInt27182;
+    static public int staticInt27183;
+    static public int staticInt27184;
+    static public int staticInt27185;
+    static public int staticInt27186;
+    static public int staticInt27187;
+    static public int staticInt27188;
+    static public int staticInt27189;
+    static public int staticInt27190;
+    static public int staticInt27191;
+    static public int staticInt27192;
+    static public int staticInt27193;
+    static public int staticInt27194;
+    static public int staticInt27195;
+    static public int staticInt27196;
+    static public int staticInt27197;
+    static public int staticInt27198;
+    static public int staticInt27199;
+    static public int staticInt27200;
+    static public int staticInt27201;
+    static public int staticInt27202;
+    static public int staticInt27203;
+    static public int staticInt27204;
+    static public int staticInt27205;
+    static public int staticInt27206;
+    static public int staticInt27207;
+    static public int staticInt27208;
+    static public int staticInt27209;
+    static public int staticInt27210;
+    static public int staticInt27211;
+    static public int staticInt27212;
+    static public int staticInt27213;
+    static public int staticInt27214;
+    static public int staticInt27215;
+    static public int staticInt27216;
+    static public int staticInt27217;
+    static public int staticInt27218;
+    static public int staticInt27219;
+    static public int staticInt27220;
+    static public int staticInt27221;
+    static public int staticInt27222;
+    static public int staticInt27223;
+    static public int staticInt27224;
+    static public int staticInt27225;
+    static public int staticInt27226;
+    static public int staticInt27227;
+    static public int staticInt27228;
+    static public int staticInt27229;
+    static public int staticInt27230;
+    static public int staticInt27231;
+    static public int staticInt27232;
+    static public int staticInt27233;
+    static public int staticInt27234;
+    static public int staticInt27235;
+    static public int staticInt27236;
+    static public int staticInt27237;
+    static public int staticInt27238;
+    static public int staticInt27239;
+    static public int staticInt27240;
+    static public int staticInt27241;
+    static public int staticInt27242;
+    static public int staticInt27243;
+    static public int staticInt27244;
+    static public int staticInt27245;
+    static public int staticInt27246;
+    static public int staticInt27247;
+    static public int staticInt27248;
+    static public int staticInt27249;
+    static public int staticInt27250;
+    static public int staticInt27251;
+    static public int staticInt27252;
+    static public int staticInt27253;
+    static public int staticInt27254;
+    static public int staticInt27255;
+    static public int staticInt27256;
+    static public int staticInt27257;
+    static public int staticInt27258;
+    static public int staticInt27259;
+    static public int staticInt27260;
+    static public int staticInt27261;
+    static public int staticInt27262;
+    static public int staticInt27263;
+    static public int staticInt27264;
+    static public int staticInt27265;
+    static public int staticInt27266;
+    static public int staticInt27267;
+    static public int staticInt27268;
+    static public int staticInt27269;
+    static public int staticInt27270;
+    static public int staticInt27271;
+    static public int staticInt27272;
+    static public int staticInt27273;
+    static public int staticInt27274;
+    static public int staticInt27275;
+    static public int staticInt27276;
+    static public int staticInt27277;
+    static public int staticInt27278;
+    static public int staticInt27279;
+    static public int staticInt27280;
+    static public int staticInt27281;
+    static public int staticInt27282;
+    static public int staticInt27283;
+    static public int staticInt27284;
+    static public int staticInt27285;
+    static public int staticInt27286;
+    static public int staticInt27287;
+    static public int staticInt27288;
+    static public int staticInt27289;
+    static public int staticInt27290;
+    static public int staticInt27291;
+    static public int staticInt27292;
+    static public int staticInt27293;
+    static public int staticInt27294;
+    static public int staticInt27295;
+    static public int staticInt27296;
+    static public int staticInt27297;
+    static public int staticInt27298;
+    static public int staticInt27299;
+    static public int staticInt27300;
+    static public int staticInt27301;
+    static public int staticInt27302;
+    static public int staticInt27303;
+    static public int staticInt27304;
+    static public int staticInt27305;
+    static public int staticInt27306;
+    static public int staticInt27307;
+    static public int staticInt27308;
+    static public int staticInt27309;
+    static public int staticInt27310;
+    static public int staticInt27311;
+    static public int staticInt27312;
+    static public int staticInt27313;
+    static public int staticInt27314;
+    static public int staticInt27315;
+    static public int staticInt27316;
+    static public int staticInt27317;
+    static public int staticInt27318;
+    static public int staticInt27319;
+    static public int staticInt27320;
+    static public int staticInt27321;
+    static public int staticInt27322;
+    static public int staticInt27323;
+    static public int staticInt27324;
+    static public int staticInt27325;
+    static public int staticInt27326;
+    static public int staticInt27327;
+    static public int staticInt27328;
+    static public int staticInt27329;
+    static public int staticInt27330;
+    static public int staticInt27331;
+    static public int staticInt27332;
+    static public int staticInt27333;
+    static public int staticInt27334;
+    static public int staticInt27335;
+    static public int staticInt27336;
+    static public int staticInt27337;
+    static public int staticInt27338;
+    static public int staticInt27339;
+    static public int staticInt27340;
+    static public int staticInt27341;
+    static public int staticInt27342;
+    static public int staticInt27343;
+    static public int staticInt27344;
+    static public int staticInt27345;
+    static public int staticInt27346;
+    static public int staticInt27347;
+    static public int staticInt27348;
+    static public int staticInt27349;
+    static public int staticInt27350;
+    static public int staticInt27351;
+    static public int staticInt27352;
+    static public int staticInt27353;
+    static public int staticInt27354;
+    static public int staticInt27355;
+    static public int staticInt27356;
+    static public int staticInt27357;
+    static public int staticInt27358;
+    static public int staticInt27359;
+    static public int staticInt27360;
+    static public int staticInt27361;
+    static public int staticInt27362;
+    static public int staticInt27363;
+    static public int staticInt27364;
+    static public int staticInt27365;
+    static public int staticInt27366;
+    static public int staticInt27367;
+    static public int staticInt27368;
+    static public int staticInt27369;
+    static public int staticInt27370;
+    static public int staticInt27371;
+    static public int staticInt27372;
+    static public int staticInt27373;
+    static public int staticInt27374;
+    static public int staticInt27375;
+    static public int staticInt27376;
+    static public int staticInt27377;
+    static public int staticInt27378;
+    static public int staticInt27379;
+    static public int staticInt27380;
+    static public int staticInt27381;
+    static public int staticInt27382;
+    static public int staticInt27383;
+    static public int staticInt27384;
+    static public int staticInt27385;
+    static public int staticInt27386;
+    static public int staticInt27387;
+    static public int staticInt27388;
+    static public int staticInt27389;
+    static public int staticInt27390;
+    static public int staticInt27391;
+    static public int staticInt27392;
+    static public int staticInt27393;
+    static public int staticInt27394;
+    static public int staticInt27395;
+    static public int staticInt27396;
+    static public int staticInt27397;
+    static public int staticInt27398;
+    static public int staticInt27399;
+    static public int staticInt27400;
+    static public int staticInt27401;
+    static public int staticInt27402;
+    static public int staticInt27403;
+    static public int staticInt27404;
+    static public int staticInt27405;
+    static public int staticInt27406;
+    static public int staticInt27407;
+    static public int staticInt27408;
+    static public int staticInt27409;
+    static public int staticInt27410;
+    static public int staticInt27411;
+    static public int staticInt27412;
+    static public int staticInt27413;
+    static public int staticInt27414;
+    static public int staticInt27415;
+    static public int staticInt27416;
+    static public int staticInt27417;
+    static public int staticInt27418;
+    static public int staticInt27419;
+    static public int staticInt27420;
+    static public int staticInt27421;
+    static public int staticInt27422;
+    static public int staticInt27423;
+    static public int staticInt27424;
+    static public int staticInt27425;
+    static public int staticInt27426;
+    static public int staticInt27427;
+    static public int staticInt27428;
+    static public int staticInt27429;
+    static public int staticInt27430;
+    static public int staticInt27431;
+    static public int staticInt27432;
+    static public int staticInt27433;
+    static public int staticInt27434;
+    static public int staticInt27435;
+    static public int staticInt27436;
+    static public int staticInt27437;
+    static public int staticInt27438;
+    static public int staticInt27439;
+    static public int staticInt27440;
+    static public int staticInt27441;
+    static public int staticInt27442;
+    static public int staticInt27443;
+    static public int staticInt27444;
+    static public int staticInt27445;
+    static public int staticInt27446;
+    static public int staticInt27447;
+    static public int staticInt27448;
+    static public int staticInt27449;
+    static public int staticInt27450;
+    static public int staticInt27451;
+    static public int staticInt27452;
+    static public int staticInt27453;
+    static public int staticInt27454;
+    static public int staticInt27455;
+    static public int staticInt27456;
+    static public int staticInt27457;
+    static public int staticInt27458;
+    static public int staticInt27459;
+    static public int staticInt27460;
+    static public int staticInt27461;
+    static public int staticInt27462;
+    static public int staticInt27463;
+    static public int staticInt27464;
+    static public int staticInt27465;
+    static public int staticInt27466;
+    static public int staticInt27467;
+    static public int staticInt27468;
+    static public int staticInt27469;
+    static public int staticInt27470;
+    static public int staticInt27471;
+    static public int staticInt27472;
+    static public int staticInt27473;
+    static public int staticInt27474;
+    static public int staticInt27475;
+    static public int staticInt27476;
+    static public int staticInt27477;
+    static public int staticInt27478;
+    static public int staticInt27479;
+    static public int staticInt27480;
+    static public int staticInt27481;
+    static public int staticInt27482;
+    static public int staticInt27483;
+    static public int staticInt27484;
+    static public int staticInt27485;
+    static public int staticInt27486;
+    static public int staticInt27487;
+    static public int staticInt27488;
+    static public int staticInt27489;
+    static public int staticInt27490;
+    static public int staticInt27491;
+    static public int staticInt27492;
+    static public int staticInt27493;
+    static public int staticInt27494;
+    static public int staticInt27495;
+    static public int staticInt27496;
+    static public int staticInt27497;
+    static public int staticInt27498;
+    static public int staticInt27499;
+    static public int staticInt27500;
+    static public int staticInt27501;
+    static public int staticInt27502;
+    static public int staticInt27503;
+    static public int staticInt27504;
+    static public int staticInt27505;
+    static public int staticInt27506;
+    static public int staticInt27507;
+    static public int staticInt27508;
+    static public int staticInt27509;
+    static public int staticInt27510;
+    static public int staticInt27511;
+    static public int staticInt27512;
+    static public int staticInt27513;
+    static public int staticInt27514;
+    static public int staticInt27515;
+    static public int staticInt27516;
+    static public int staticInt27517;
+    static public int staticInt27518;
+    static public int staticInt27519;
+    static public int staticInt27520;
+    static public int staticInt27521;
+    static public int staticInt27522;
+    static public int staticInt27523;
+    static public int staticInt27524;
+    static public int staticInt27525;
+    static public int staticInt27526;
+    static public int staticInt27527;
+    static public int staticInt27528;
+    static public int staticInt27529;
+    static public int staticInt27530;
+    static public int staticInt27531;
+    static public int staticInt27532;
+    static public int staticInt27533;
+    static public int staticInt27534;
+    static public int staticInt27535;
+    static public int staticInt27536;
+    static public int staticInt27537;
+    static public int staticInt27538;
+    static public int staticInt27539;
+    static public int staticInt27540;
+    static public int staticInt27541;
+    static public int staticInt27542;
+    static public int staticInt27543;
+    static public int staticInt27544;
+    static public int staticInt27545;
+    static public int staticInt27546;
+    static public int staticInt27547;
+    static public int staticInt27548;
+    static public int staticInt27549;
+    static public int staticInt27550;
+    static public int staticInt27551;
+    static public int staticInt27552;
+    static public int staticInt27553;
+    static public int staticInt27554;
+    static public int staticInt27555;
+    static public int staticInt27556;
+    static public int staticInt27557;
+    static public int staticInt27558;
+    static public int staticInt27559;
+    static public int staticInt27560;
+    static public int staticInt27561;
+    static public int staticInt27562;
+    static public int staticInt27563;
+    static public int staticInt27564;
+    static public int staticInt27565;
+    static public int staticInt27566;
+    static public int staticInt27567;
+    static public int staticInt27568;
+    static public int staticInt27569;
+    static public int staticInt27570;
+    static public int staticInt27571;
+    static public int staticInt27572;
+    static public int staticInt27573;
+    static public int staticInt27574;
+    static public int staticInt27575;
+    static public int staticInt27576;
+    static public int staticInt27577;
+    static public int staticInt27578;
+    static public int staticInt27579;
+    static public int staticInt27580;
+    static public int staticInt27581;
+    static public int staticInt27582;
+    static public int staticInt27583;
+    static public int staticInt27584;
+    static public int staticInt27585;
+    static public int staticInt27586;
+    static public int staticInt27587;
+    static public int staticInt27588;
+    static public int staticInt27589;
+    static public int staticInt27590;
+    static public int staticInt27591;
+    static public int staticInt27592;
+    static public int staticInt27593;
+    static public int staticInt27594;
+    static public int staticInt27595;
+    static public int staticInt27596;
+    static public int staticInt27597;
+    static public int staticInt27598;
+    static public int staticInt27599;
+    static public int staticInt27600;
+    static public int staticInt27601;
+    static public int staticInt27602;
+    static public int staticInt27603;
+    static public int staticInt27604;
+    static public int staticInt27605;
+    static public int staticInt27606;
+    static public int staticInt27607;
+    static public int staticInt27608;
+    static public int staticInt27609;
+    static public int staticInt27610;
+    static public int staticInt27611;
+    static public int staticInt27612;
+    static public int staticInt27613;
+    static public int staticInt27614;
+    static public int staticInt27615;
+    static public int staticInt27616;
+    static public int staticInt27617;
+    static public int staticInt27618;
+    static public int staticInt27619;
+    static public int staticInt27620;
+    static public int staticInt27621;
+    static public int staticInt27622;
+    static public int staticInt27623;
+    static public int staticInt27624;
+    static public int staticInt27625;
+    static public int staticInt27626;
+    static public int staticInt27627;
+    static public int staticInt27628;
+    static public int staticInt27629;
+    static public int staticInt27630;
+    static public int staticInt27631;
+    static public int staticInt27632;
+    static public int staticInt27633;
+    static public int staticInt27634;
+    static public int staticInt27635;
+    static public int staticInt27636;
+    static public int staticInt27637;
+    static public int staticInt27638;
+    static public int staticInt27639;
+    static public int staticInt27640;
+    static public int staticInt27641;
+    static public int staticInt27642;
+    static public int staticInt27643;
+    static public int staticInt27644;
+    static public int staticInt27645;
+    static public int staticInt27646;
+    static public int staticInt27647;
+    static public int staticInt27648;
+    static public int staticInt27649;
+    static public int staticInt27650;
+    static public int staticInt27651;
+    static public int staticInt27652;
+    static public int staticInt27653;
+    static public int staticInt27654;
+    static public int staticInt27655;
+    static public int staticInt27656;
+    static public int staticInt27657;
+    static public int staticInt27658;
+    static public int staticInt27659;
+    static public int staticInt27660;
+    static public int staticInt27661;
+    static public int staticInt27662;
+    static public int staticInt27663;
+    static public int staticInt27664;
+    static public int staticInt27665;
+    static public int staticInt27666;
+    static public int staticInt27667;
+    static public int staticInt27668;
+    static public int staticInt27669;
+    static public int staticInt27670;
+    static public int staticInt27671;
+    static public int staticInt27672;
+    static public int staticInt27673;
+    static public int staticInt27674;
+    static public int staticInt27675;
+    static public int staticInt27676;
+    static public int staticInt27677;
+    static public int staticInt27678;
+    static public int staticInt27679;
+    static public int staticInt27680;
+    static public int staticInt27681;
+    static public int staticInt27682;
+    static public int staticInt27683;
+    static public int staticInt27684;
+    static public int staticInt27685;
+    static public int staticInt27686;
+    static public int staticInt27687;
+    static public int staticInt27688;
+    static public int staticInt27689;
+    static public int staticInt27690;
+    static public int staticInt27691;
+    static public int staticInt27692;
+    static public int staticInt27693;
+    static public int staticInt27694;
+    static public int staticInt27695;
+    static public int staticInt27696;
+    static public int staticInt27697;
+    static public int staticInt27698;
+    static public int staticInt27699;
+    static public int staticInt27700;
+    static public int staticInt27701;
+    static public int staticInt27702;
+    static public int staticInt27703;
+    static public int staticInt27704;
+    static public int staticInt27705;
+    static public int staticInt27706;
+    static public int staticInt27707;
+    static public int staticInt27708;
+    static public int staticInt27709;
+    static public int staticInt27710;
+    static public int staticInt27711;
+    static public int staticInt27712;
+    static public int staticInt27713;
+    static public int staticInt27714;
+    static public int staticInt27715;
+    static public int staticInt27716;
+    static public int staticInt27717;
+    static public int staticInt27718;
+    static public int staticInt27719;
+    static public int staticInt27720;
+    static public int staticInt27721;
+    static public int staticInt27722;
+    static public int staticInt27723;
+    static public int staticInt27724;
+    static public int staticInt27725;
+    static public int staticInt27726;
+    static public int staticInt27727;
+    static public int staticInt27728;
+    static public int staticInt27729;
+    static public int staticInt27730;
+    static public int staticInt27731;
+    static public int staticInt27732;
+    static public int staticInt27733;
+    static public int staticInt27734;
+    static public int staticInt27735;
+    static public int staticInt27736;
+    static public int staticInt27737;
+    static public int staticInt27738;
+    static public int staticInt27739;
+    static public int staticInt27740;
+    static public int staticInt27741;
+    static public int staticInt27742;
+    static public int staticInt27743;
+    static public int staticInt27744;
+    static public int staticInt27745;
+    static public int staticInt27746;
+    static public int staticInt27747;
+    static public int staticInt27748;
+    static public int staticInt27749;
+    static public int staticInt27750;
+    static public int staticInt27751;
+    static public int staticInt27752;
+    static public int staticInt27753;
+    static public int staticInt27754;
+    static public int staticInt27755;
+    static public int staticInt27756;
+    static public int staticInt27757;
+    static public int staticInt27758;
+    static public int staticInt27759;
+    static public int staticInt27760;
+    static public int staticInt27761;
+    static public int staticInt27762;
+    static public int staticInt27763;
+    static public int staticInt27764;
+    static public int staticInt27765;
+    static public int staticInt27766;
+    static public int staticInt27767;
+    static public int staticInt27768;
+    static public int staticInt27769;
+    static public int staticInt27770;
+    static public int staticInt27771;
+    static public int staticInt27772;
+    static public int staticInt27773;
+    static public int staticInt27774;
+    static public int staticInt27775;
+    static public int staticInt27776;
+    static public int staticInt27777;
+    static public int staticInt27778;
+    static public int staticInt27779;
+    static public int staticInt27780;
+    static public int staticInt27781;
+    static public int staticInt27782;
+    static public int staticInt27783;
+    static public int staticInt27784;
+    static public int staticInt27785;
+    static public int staticInt27786;
+    static public int staticInt27787;
+    static public int staticInt27788;
+    static public int staticInt27789;
+    static public int staticInt27790;
+    static public int staticInt27791;
+    static public int staticInt27792;
+    static public int staticInt27793;
+    static public int staticInt27794;
+    static public int staticInt27795;
+    static public int staticInt27796;
+    static public int staticInt27797;
+    static public int staticInt27798;
+    static public int staticInt27799;
+    static public int staticInt27800;
+    static public int staticInt27801;
+    static public int staticInt27802;
+    static public int staticInt27803;
+    static public int staticInt27804;
+    static public int staticInt27805;
+    static public int staticInt27806;
+    static public int staticInt27807;
+    static public int staticInt27808;
+    static public int staticInt27809;
+    static public int staticInt27810;
+    static public int staticInt27811;
+    static public int staticInt27812;
+    static public int staticInt27813;
+    static public int staticInt27814;
+    static public int staticInt27815;
+    static public int staticInt27816;
+    static public int staticInt27817;
+    static public int staticInt27818;
+    static public int staticInt27819;
+    static public int staticInt27820;
+    static public int staticInt27821;
+    static public int staticInt27822;
+    static public int staticInt27823;
+    static public int staticInt27824;
+    static public int staticInt27825;
+    static public int staticInt27826;
+    static public int staticInt27827;
+    static public int staticInt27828;
+    static public int staticInt27829;
+    static public int staticInt27830;
+    static public int staticInt27831;
+    static public int staticInt27832;
+    static public int staticInt27833;
+    static public int staticInt27834;
+    static public int staticInt27835;
+    static public int staticInt27836;
+    static public int staticInt27837;
+    static public int staticInt27838;
+    static public int staticInt27839;
+    static public int staticInt27840;
+    static public int staticInt27841;
+    static public int staticInt27842;
+    static public int staticInt27843;
+    static public int staticInt27844;
+    static public int staticInt27845;
+    static public int staticInt27846;
+    static public int staticInt27847;
+    static public int staticInt27848;
+    static public int staticInt27849;
+    static public int staticInt27850;
+    static public int staticInt27851;
+    static public int staticInt27852;
+    static public int staticInt27853;
+    static public int staticInt27854;
+    static public int staticInt27855;
+    static public int staticInt27856;
+    static public int staticInt27857;
+    static public int staticInt27858;
+    static public int staticInt27859;
+    static public int staticInt27860;
+    static public int staticInt27861;
+    static public int staticInt27862;
+    static public int staticInt27863;
+    static public int staticInt27864;
+    static public int staticInt27865;
+    static public int staticInt27866;
+    static public int staticInt27867;
+    static public int staticInt27868;
+    static public int staticInt27869;
+    static public int staticInt27870;
+    static public int staticInt27871;
+    static public int staticInt27872;
+    static public int staticInt27873;
+    static public int staticInt27874;
+    static public int staticInt27875;
+    static public int staticInt27876;
+    static public int staticInt27877;
+    static public int staticInt27878;
+    static public int staticInt27879;
+    static public int staticInt27880;
+    static public int staticInt27881;
+    static public int staticInt27882;
+    static public int staticInt27883;
+    static public int staticInt27884;
+    static public int staticInt27885;
+    static public int staticInt27886;
+    static public int staticInt27887;
+    static public int staticInt27888;
+    static public int staticInt27889;
+    static public int staticInt27890;
+    static public int staticInt27891;
+    static public int staticInt27892;
+    static public int staticInt27893;
+    static public int staticInt27894;
+    static public int staticInt27895;
+    static public int staticInt27896;
+    static public int staticInt27897;
+    static public int staticInt27898;
+    static public int staticInt27899;
+    static public int staticInt27900;
+    static public int staticInt27901;
+    static public int staticInt27902;
+    static public int staticInt27903;
+    static public int staticInt27904;
+    static public int staticInt27905;
+    static public int staticInt27906;
+    static public int staticInt27907;
+    static public int staticInt27908;
+    static public int staticInt27909;
+    static public int staticInt27910;
+    static public int staticInt27911;
+    static public int staticInt27912;
+    static public int staticInt27913;
+    static public int staticInt27914;
+    static public int staticInt27915;
+    static public int staticInt27916;
+    static public int staticInt27917;
+    static public int staticInt27918;
+    static public int staticInt27919;
+    static public int staticInt27920;
+    static public int staticInt27921;
+    static public int staticInt27922;
+    static public int staticInt27923;
+    static public int staticInt27924;
+    static public int staticInt27925;
+    static public int staticInt27926;
+    static public int staticInt27927;
+    static public int staticInt27928;
+    static public int staticInt27929;
+    static public int staticInt27930;
+    static public int staticInt27931;
+    static public int staticInt27932;
+    static public int staticInt27933;
+    static public int staticInt27934;
+    static public int staticInt27935;
+    static public int staticInt27936;
+    static public int staticInt27937;
+    static public int staticInt27938;
+    static public int staticInt27939;
+    static public int staticInt27940;
+    static public int staticInt27941;
+    static public int staticInt27942;
+    static public int staticInt27943;
+    static public int staticInt27944;
+    static public int staticInt27945;
+    static public int staticInt27946;
+    static public int staticInt27947;
+    static public int staticInt27948;
+    static public int staticInt27949;
+    static public int staticInt27950;
+    static public int staticInt27951;
+    static public int staticInt27952;
+    static public int staticInt27953;
+    static public int staticInt27954;
+    static public int staticInt27955;
+    static public int staticInt27956;
+    static public int staticInt27957;
+    static public int staticInt27958;
+    static public int staticInt27959;
+    static public int staticInt27960;
+    static public int staticInt27961;
+    static public int staticInt27962;
+    static public int staticInt27963;
+    static public int staticInt27964;
+    static public int staticInt27965;
+    static public int staticInt27966;
+    static public int staticInt27967;
+    static public int staticInt27968;
+    static public int staticInt27969;
+    static public int staticInt27970;
+    static public int staticInt27971;
+    static public int staticInt27972;
+    static public int staticInt27973;
+    static public int staticInt27974;
+    static public int staticInt27975;
+    static public int staticInt27976;
+    static public int staticInt27977;
+    static public int staticInt27978;
+    static public int staticInt27979;
+    static public int staticInt27980;
+    static public int staticInt27981;
+    static public int staticInt27982;
+    static public int staticInt27983;
+    static public int staticInt27984;
+    static public int staticInt27985;
+    static public int staticInt27986;
+    static public int staticInt27987;
+    static public int staticInt27988;
+    static public int staticInt27989;
+    static public int staticInt27990;
+    static public int staticInt27991;
+    static public int staticInt27992;
+    static public int staticInt27993;
+    static public int staticInt27994;
+    static public int staticInt27995;
+    static public int staticInt27996;
+    static public int staticInt27997;
+    static public int staticInt27998;
+    static public int staticInt27999;
+    static public int staticInt28000;
+    static public int staticInt28001;
+    static public int staticInt28002;
+    static public int staticInt28003;
+    static public int staticInt28004;
+    static public int staticInt28005;
+    static public int staticInt28006;
+    static public int staticInt28007;
+    static public int staticInt28008;
+    static public int staticInt28009;
+    static public int staticInt28010;
+    static public int staticInt28011;
+    static public int staticInt28012;
+    static public int staticInt28013;
+    static public int staticInt28014;
+    static public int staticInt28015;
+    static public int staticInt28016;
+    static public int staticInt28017;
+    static public int staticInt28018;
+    static public int staticInt28019;
+    static public int staticInt28020;
+    static public int staticInt28021;
+    static public int staticInt28022;
+    static public int staticInt28023;
+    static public int staticInt28024;
+    static public int staticInt28025;
+    static public int staticInt28026;
+    static public int staticInt28027;
+    static public int staticInt28028;
+    static public int staticInt28029;
+    static public int staticInt28030;
+    static public int staticInt28031;
+    static public int staticInt28032;
+    static public int staticInt28033;
+    static public int staticInt28034;
+    static public int staticInt28035;
+    static public int staticInt28036;
+    static public int staticInt28037;
+    static public int staticInt28038;
+    static public int staticInt28039;
+    static public int staticInt28040;
+    static public int staticInt28041;
+    static public int staticInt28042;
+    static public int staticInt28043;
+    static public int staticInt28044;
+    static public int staticInt28045;
+    static public int staticInt28046;
+    static public int staticInt28047;
+    static public int staticInt28048;
+    static public int staticInt28049;
+    static public int staticInt28050;
+    static public int staticInt28051;
+    static public int staticInt28052;
+    static public int staticInt28053;
+    static public int staticInt28054;
+    static public int staticInt28055;
+    static public int staticInt28056;
+    static public int staticInt28057;
+    static public int staticInt28058;
+    static public int staticInt28059;
+    static public int staticInt28060;
+    static public int staticInt28061;
+    static public int staticInt28062;
+    static public int staticInt28063;
+    static public int staticInt28064;
+    static public int staticInt28065;
+    static public int staticInt28066;
+    static public int staticInt28067;
+    static public int staticInt28068;
+    static public int staticInt28069;
+    static public int staticInt28070;
+    static public int staticInt28071;
+    static public int staticInt28072;
+    static public int staticInt28073;
+    static public int staticInt28074;
+    static public int staticInt28075;
+    static public int staticInt28076;
+    static public int staticInt28077;
+    static public int staticInt28078;
+    static public int staticInt28079;
+    static public int staticInt28080;
+    static public int staticInt28081;
+    static public int staticInt28082;
+    static public int staticInt28083;
+    static public int staticInt28084;
+    static public int staticInt28085;
+    static public int staticInt28086;
+    static public int staticInt28087;
+    static public int staticInt28088;
+    static public int staticInt28089;
+    static public int staticInt28090;
+    static public int staticInt28091;
+    static public int staticInt28092;
+    static public int staticInt28093;
+    static public int staticInt28094;
+    static public int staticInt28095;
+    static public int staticInt28096;
+    static public int staticInt28097;
+    static public int staticInt28098;
+    static public int staticInt28099;
+    static public int staticInt28100;
+    static public int staticInt28101;
+    static public int staticInt28102;
+    static public int staticInt28103;
+    static public int staticInt28104;
+    static public int staticInt28105;
+    static public int staticInt28106;
+    static public int staticInt28107;
+    static public int staticInt28108;
+    static public int staticInt28109;
+    static public int staticInt28110;
+    static public int staticInt28111;
+    static public int staticInt28112;
+    static public int staticInt28113;
+    static public int staticInt28114;
+    static public int staticInt28115;
+    static public int staticInt28116;
+    static public int staticInt28117;
+    static public int staticInt28118;
+    static public int staticInt28119;
+    static public int staticInt28120;
+    static public int staticInt28121;
+    static public int staticInt28122;
+    static public int staticInt28123;
+    static public int staticInt28124;
+    static public int staticInt28125;
+    static public int staticInt28126;
+    static public int staticInt28127;
+    static public int staticInt28128;
+    static public int staticInt28129;
+    static public int staticInt28130;
+    static public int staticInt28131;
+    static public int staticInt28132;
+    static public int staticInt28133;
+    static public int staticInt28134;
+    static public int staticInt28135;
+    static public int staticInt28136;
+    static public int staticInt28137;
+    static public int staticInt28138;
+    static public int staticInt28139;
+    static public int staticInt28140;
+    static public int staticInt28141;
+    static public int staticInt28142;
+    static public int staticInt28143;
+    static public int staticInt28144;
+    static public int staticInt28145;
+    static public int staticInt28146;
+    static public int staticInt28147;
+    static public int staticInt28148;
+    static public int staticInt28149;
+    static public int staticInt28150;
+    static public int staticInt28151;
+    static public int staticInt28152;
+    static public int staticInt28153;
+    static public int staticInt28154;
+    static public int staticInt28155;
+    static public int staticInt28156;
+    static public int staticInt28157;
+    static public int staticInt28158;
+    static public int staticInt28159;
+    static public int staticInt28160;
+    static public int staticInt28161;
+    static public int staticInt28162;
+    static public int staticInt28163;
+    static public int staticInt28164;
+    static public int staticInt28165;
+    static public int staticInt28166;
+    static public int staticInt28167;
+    static public int staticInt28168;
+    static public int staticInt28169;
+    static public int staticInt28170;
+    static public int staticInt28171;
+    static public int staticInt28172;
+    static public int staticInt28173;
+    static public int staticInt28174;
+    static public int staticInt28175;
+    static public int staticInt28176;
+    static public int staticInt28177;
+    static public int staticInt28178;
+    static public int staticInt28179;
+    static public int staticInt28180;
+    static public int staticInt28181;
+    static public int staticInt28182;
+    static public int staticInt28183;
+    static public int staticInt28184;
+    static public int staticInt28185;
+    static public int staticInt28186;
+    static public int staticInt28187;
+    static public int staticInt28188;
+    static public int staticInt28189;
+    static public int staticInt28190;
+    static public int staticInt28191;
+    static public int staticInt28192;
+    static public int staticInt28193;
+    static public int staticInt28194;
+    static public int staticInt28195;
+    static public int staticInt28196;
+    static public int staticInt28197;
+    static public int staticInt28198;
+    static public int staticInt28199;
+    static public int staticInt28200;
+    static public int staticInt28201;
+    static public int staticInt28202;
+    static public int staticInt28203;
+    static public int staticInt28204;
+    static public int staticInt28205;
+    static public int staticInt28206;
+    static public int staticInt28207;
+    static public int staticInt28208;
+    static public int staticInt28209;
+    static public int staticInt28210;
+    static public int staticInt28211;
+    static public int staticInt28212;
+    static public int staticInt28213;
+    static public int staticInt28214;
+    static public int staticInt28215;
+    static public int staticInt28216;
+    static public int staticInt28217;
+    static public int staticInt28218;
+    static public int staticInt28219;
+    static public int staticInt28220;
+    static public int staticInt28221;
+    static public int staticInt28222;
+    static public int staticInt28223;
+    static public int staticInt28224;
+    static public int staticInt28225;
+    static public int staticInt28226;
+    static public int staticInt28227;
+    static public int staticInt28228;
+    static public int staticInt28229;
+    static public int staticInt28230;
+    static public int staticInt28231;
+    static public int staticInt28232;
+    static public int staticInt28233;
+    static public int staticInt28234;
+    static public int staticInt28235;
+    static public int staticInt28236;
+    static public int staticInt28237;
+    static public int staticInt28238;
+    static public int staticInt28239;
+    static public int staticInt28240;
+    static public int staticInt28241;
+    static public int staticInt28242;
+    static public int staticInt28243;
+    static public int staticInt28244;
+    static public int staticInt28245;
+    static public int staticInt28246;
+    static public int staticInt28247;
+    static public int staticInt28248;
+    static public int staticInt28249;
+    static public int staticInt28250;
+    static public int staticInt28251;
+    static public int staticInt28252;
+    static public int staticInt28253;
+    static public int staticInt28254;
+    static public int staticInt28255;
+    static public int staticInt28256;
+    static public int staticInt28257;
+    static public int staticInt28258;
+    static public int staticInt28259;
+    static public int staticInt28260;
+    static public int staticInt28261;
+    static public int staticInt28262;
+    static public int staticInt28263;
+    static public int staticInt28264;
+    static public int staticInt28265;
+    static public int staticInt28266;
+    static public int staticInt28267;
+    static public int staticInt28268;
+    static public int staticInt28269;
+    static public int staticInt28270;
+    static public int staticInt28271;
+    static public int staticInt28272;
+    static public int staticInt28273;
+    static public int staticInt28274;
+    static public int staticInt28275;
+    static public int staticInt28276;
+    static public int staticInt28277;
+    static public int staticInt28278;
+    static public int staticInt28279;
+    static public int staticInt28280;
+    static public int staticInt28281;
+    static public int staticInt28282;
+    static public int staticInt28283;
+    static public int staticInt28284;
+    static public int staticInt28285;
+    static public int staticInt28286;
+    static public int staticInt28287;
+    static public int staticInt28288;
+    static public int staticInt28289;
+    static public int staticInt28290;
+    static public int staticInt28291;
+    static public int staticInt28292;
+    static public int staticInt28293;
+    static public int staticInt28294;
+    static public int staticInt28295;
+    static public int staticInt28296;
+    static public int staticInt28297;
+    static public int staticInt28298;
+    static public int staticInt28299;
+    static public int staticInt28300;
+    static public int staticInt28301;
+    static public int staticInt28302;
+    static public int staticInt28303;
+    static public int staticInt28304;
+    static public int staticInt28305;
+    static public int staticInt28306;
+    static public int staticInt28307;
+    static public int staticInt28308;
+    static public int staticInt28309;
+    static public int staticInt28310;
+    static public int staticInt28311;
+    static public int staticInt28312;
+    static public int staticInt28313;
+    static public int staticInt28314;
+    static public int staticInt28315;
+    static public int staticInt28316;
+    static public int staticInt28317;
+    static public int staticInt28318;
+    static public int staticInt28319;
+    static public int staticInt28320;
+    static public int staticInt28321;
+    static public int staticInt28322;
+    static public int staticInt28323;
+    static public int staticInt28324;
+    static public int staticInt28325;
+    static public int staticInt28326;
+    static public int staticInt28327;
+    static public int staticInt28328;
+    static public int staticInt28329;
+    static public int staticInt28330;
+    static public int staticInt28331;
+    static public int staticInt28332;
+    static public int staticInt28333;
+    static public int staticInt28334;
+    static public int staticInt28335;
+    static public int staticInt28336;
+    static public int staticInt28337;
+    static public int staticInt28338;
+    static public int staticInt28339;
+    static public int staticInt28340;
+    static public int staticInt28341;
+    static public int staticInt28342;
+    static public int staticInt28343;
+    static public int staticInt28344;
+    static public int staticInt28345;
+    static public int staticInt28346;
+    static public int staticInt28347;
+    static public int staticInt28348;
+    static public int staticInt28349;
+    static public int staticInt28350;
+    static public int staticInt28351;
+    static public int staticInt28352;
+    static public int staticInt28353;
+    static public int staticInt28354;
+    static public int staticInt28355;
+    static public int staticInt28356;
+    static public int staticInt28357;
+    static public int staticInt28358;
+    static public int staticInt28359;
+    static public int staticInt28360;
+    static public int staticInt28361;
+    static public int staticInt28362;
+    static public int staticInt28363;
+    static public int staticInt28364;
+    static public int staticInt28365;
+    static public int staticInt28366;
+    static public int staticInt28367;
+    static public int staticInt28368;
+    static public int staticInt28369;
+    static public int staticInt28370;
+    static public int staticInt28371;
+    static public int staticInt28372;
+    static public int staticInt28373;
+    static public int staticInt28374;
+    static public int staticInt28375;
+    static public int staticInt28376;
+    static public int staticInt28377;
+    static public int staticInt28378;
+    static public int staticInt28379;
+    static public int staticInt28380;
+    static public int staticInt28381;
+    static public int staticInt28382;
+    static public int staticInt28383;
+    static public int staticInt28384;
+    static public int staticInt28385;
+    static public int staticInt28386;
+    static public int staticInt28387;
+    static public int staticInt28388;
+    static public int staticInt28389;
+    static public int staticInt28390;
+    static public int staticInt28391;
+    static public int staticInt28392;
+    static public int staticInt28393;
+    static public int staticInt28394;
+    static public int staticInt28395;
+    static public int staticInt28396;
+    static public int staticInt28397;
+    static public int staticInt28398;
+    static public int staticInt28399;
+    static public int staticInt28400;
+    static public int staticInt28401;
+    static public int staticInt28402;
+    static public int staticInt28403;
+    static public int staticInt28404;
+    static public int staticInt28405;
+    static public int staticInt28406;
+    static public int staticInt28407;
+    static public int staticInt28408;
+    static public int staticInt28409;
+    static public int staticInt28410;
+    static public int staticInt28411;
+    static public int staticInt28412;
+    static public int staticInt28413;
+    static public int staticInt28414;
+    static public int staticInt28415;
+    static public int staticInt28416;
+    static public int staticInt28417;
+    static public int staticInt28418;
+    static public int staticInt28419;
+    static public int staticInt28420;
+    static public int staticInt28421;
+    static public int staticInt28422;
+    static public int staticInt28423;
+    static public int staticInt28424;
+    static public int staticInt28425;
+    static public int staticInt28426;
+    static public int staticInt28427;
+    static public int staticInt28428;
+    static public int staticInt28429;
+    static public int staticInt28430;
+    static public int staticInt28431;
+    static public int staticInt28432;
+    static public int staticInt28433;
+    static public int staticInt28434;
+    static public int staticInt28435;
+    static public int staticInt28436;
+    static public int staticInt28437;
+    static public int staticInt28438;
+    static public int staticInt28439;
+    static public int staticInt28440;
+    static public int staticInt28441;
+    static public int staticInt28442;
+    static public int staticInt28443;
+    static public int staticInt28444;
+    static public int staticInt28445;
+    static public int staticInt28446;
+    static public int staticInt28447;
+    static public int staticInt28448;
+    static public int staticInt28449;
+    static public int staticInt28450;
+    static public int staticInt28451;
+    static public int staticInt28452;
+    static public int staticInt28453;
+    static public int staticInt28454;
+    static public int staticInt28455;
+    static public int staticInt28456;
+    static public int staticInt28457;
+    static public int staticInt28458;
+    static public int staticInt28459;
+    static public int staticInt28460;
+    static public int staticInt28461;
+    static public int staticInt28462;
+    static public int staticInt28463;
+    static public int staticInt28464;
+    static public int staticInt28465;
+    static public int staticInt28466;
+    static public int staticInt28467;
+    static public int staticInt28468;
+    static public int staticInt28469;
+    static public int staticInt28470;
+    static public int staticInt28471;
+    static public int staticInt28472;
+    static public int staticInt28473;
+    static public int staticInt28474;
+    static public int staticInt28475;
+    static public int staticInt28476;
+    static public int staticInt28477;
+    static public int staticInt28478;
+    static public int staticInt28479;
+    static public int staticInt28480;
+    static public int staticInt28481;
+    static public int staticInt28482;
+    static public int staticInt28483;
+    static public int staticInt28484;
+    static public int staticInt28485;
+    static public int staticInt28486;
+    static public int staticInt28487;
+    static public int staticInt28488;
+    static public int staticInt28489;
+    static public int staticInt28490;
+    static public int staticInt28491;
+    static public int staticInt28492;
+    static public int staticInt28493;
+    static public int staticInt28494;
+    static public int staticInt28495;
+    static public int staticInt28496;
+    static public int staticInt28497;
+    static public int staticInt28498;
+    static public int staticInt28499;
+    static public int staticInt28500;
+    static public int staticInt28501;
+    static public int staticInt28502;
+    static public int staticInt28503;
+    static public int staticInt28504;
+    static public int staticInt28505;
+    static public int staticInt28506;
+    static public int staticInt28507;
+    static public int staticInt28508;
+    static public int staticInt28509;
+    static public int staticInt28510;
+    static public int staticInt28511;
+    static public int staticInt28512;
+    static public int staticInt28513;
+    static public int staticInt28514;
+    static public int staticInt28515;
+    static public int staticInt28516;
+    static public int staticInt28517;
+    static public int staticInt28518;
+    static public int staticInt28519;
+    static public int staticInt28520;
+    static public int staticInt28521;
+    static public int staticInt28522;
+    static public int staticInt28523;
+    static public int staticInt28524;
+    static public int staticInt28525;
+    static public int staticInt28526;
+    static public int staticInt28527;
+    static public int staticInt28528;
+    static public int staticInt28529;
+    static public int staticInt28530;
+    static public int staticInt28531;
+    static public int staticInt28532;
+    static public int staticInt28533;
+    static public int staticInt28534;
+    static public int staticInt28535;
+    static public int staticInt28536;
+    static public int staticInt28537;
+    static public int staticInt28538;
+    static public int staticInt28539;
+    static public int staticInt28540;
+    static public int staticInt28541;
+    static public int staticInt28542;
+    static public int staticInt28543;
+    static public int staticInt28544;
+    static public int staticInt28545;
+    static public int staticInt28546;
+    static public int staticInt28547;
+    static public int staticInt28548;
+    static public int staticInt28549;
+    static public int staticInt28550;
+    static public int staticInt28551;
+    static public int staticInt28552;
+    static public int staticInt28553;
+    static public int staticInt28554;
+    static public int staticInt28555;
+    static public int staticInt28556;
+    static public int staticInt28557;
+    static public int staticInt28558;
+    static public int staticInt28559;
+    static public int staticInt28560;
+    static public int staticInt28561;
+    static public int staticInt28562;
+    static public int staticInt28563;
+    static public int staticInt28564;
+    static public int staticInt28565;
+    static public int staticInt28566;
+    static public int staticInt28567;
+    static public int staticInt28568;
+    static public int staticInt28569;
+    static public int staticInt28570;
+    static public int staticInt28571;
+    static public int staticInt28572;
+    static public int staticInt28573;
+    static public int staticInt28574;
+    static public int staticInt28575;
+    static public int staticInt28576;
+    static public int staticInt28577;
+    static public int staticInt28578;
+    static public int staticInt28579;
+    static public int staticInt28580;
+    static public int staticInt28581;
+    static public int staticInt28582;
+    static public int staticInt28583;
+    static public int staticInt28584;
+    static public int staticInt28585;
+    static public int staticInt28586;
+    static public int staticInt28587;
+    static public int staticInt28588;
+    static public int staticInt28589;
+    static public int staticInt28590;
+    static public int staticInt28591;
+    static public int staticInt28592;
+    static public int staticInt28593;
+    static public int staticInt28594;
+    static public int staticInt28595;
+    static public int staticInt28596;
+    static public int staticInt28597;
+    static public int staticInt28598;
+    static public int staticInt28599;
+    static public int staticInt28600;
+    static public int staticInt28601;
+    static public int staticInt28602;
+    static public int staticInt28603;
+    static public int staticInt28604;
+    static public int staticInt28605;
+    static public int staticInt28606;
+    static public int staticInt28607;
+    static public int staticInt28608;
+    static public int staticInt28609;
+    static public int staticInt28610;
+    static public int staticInt28611;
+    static public int staticInt28612;
+    static public int staticInt28613;
+    static public int staticInt28614;
+    static public int staticInt28615;
+    static public int staticInt28616;
+    static public int staticInt28617;
+    static public int staticInt28618;
+    static public int staticInt28619;
+    static public int staticInt28620;
+    static public int staticInt28621;
+    static public int staticInt28622;
+    static public int staticInt28623;
+    static public int staticInt28624;
+    static public int staticInt28625;
+    static public int staticInt28626;
+    static public int staticInt28627;
+    static public int staticInt28628;
+    static public int staticInt28629;
+    static public int staticInt28630;
+    static public int staticInt28631;
+    static public int staticInt28632;
+    static public int staticInt28633;
+    static public int staticInt28634;
+    static public int staticInt28635;
+    static public int staticInt28636;
+    static public int staticInt28637;
+    static public int staticInt28638;
+    static public int staticInt28639;
+    static public int staticInt28640;
+    static public int staticInt28641;
+    static public int staticInt28642;
+    static public int staticInt28643;
+    static public int staticInt28644;
+    static public int staticInt28645;
+    static public int staticInt28646;
+    static public int staticInt28647;
+    static public int staticInt28648;
+    static public int staticInt28649;
+    static public int staticInt28650;
+    static public int staticInt28651;
+    static public int staticInt28652;
+    static public int staticInt28653;
+    static public int staticInt28654;
+    static public int staticInt28655;
+    static public int staticInt28656;
+    static public int staticInt28657;
+    static public int staticInt28658;
+    static public int staticInt28659;
+    static public int staticInt28660;
+    static public int staticInt28661;
+    static public int staticInt28662;
+    static public int staticInt28663;
+    static public int staticInt28664;
+    static public int staticInt28665;
+    static public int staticInt28666;
+    static public int staticInt28667;
+    static public int staticInt28668;
+    static public int staticInt28669;
+    static public int staticInt28670;
+    static public int staticInt28671;
+    static public int staticInt28672;
+    static public int staticInt28673;
+    static public int staticInt28674;
+    static public int staticInt28675;
+    static public int staticInt28676;
+    static public int staticInt28677;
+    static public int staticInt28678;
+    static public int staticInt28679;
+    static public int staticInt28680;
+    static public int staticInt28681;
+    static public int staticInt28682;
+    static public int staticInt28683;
+    static public int staticInt28684;
+    static public int staticInt28685;
+    static public int staticInt28686;
+    static public int staticInt28687;
+    static public int staticInt28688;
+    static public int staticInt28689;
+    static public int staticInt28690;
+    static public int staticInt28691;
+    static public int staticInt28692;
+    static public int staticInt28693;
+    static public int staticInt28694;
+    static public int staticInt28695;
+    static public int staticInt28696;
+    static public int staticInt28697;
+    static public int staticInt28698;
+    static public int staticInt28699;
+    static public int staticInt28700;
+    static public int staticInt28701;
+    static public int staticInt28702;
+    static public int staticInt28703;
+    static public int staticInt28704;
+    static public int staticInt28705;
+    static public int staticInt28706;
+    static public int staticInt28707;
+    static public int staticInt28708;
+    static public int staticInt28709;
+    static public int staticInt28710;
+    static public int staticInt28711;
+    static public int staticInt28712;
+    static public int staticInt28713;
+    static public int staticInt28714;
+    static public int staticInt28715;
+    static public int staticInt28716;
+    static public int staticInt28717;
+    static public int staticInt28718;
+    static public int staticInt28719;
+    static public int staticInt28720;
+    static public int staticInt28721;
+    static public int staticInt28722;
+    static public int staticInt28723;
+    static public int staticInt28724;
+    static public int staticInt28725;
+    static public int staticInt28726;
+    static public int staticInt28727;
+    static public int staticInt28728;
+    static public int staticInt28729;
+    static public int staticInt28730;
+    static public int staticInt28731;
+    static public int staticInt28732;
+    static public int staticInt28733;
+    static public int staticInt28734;
+    static public int staticInt28735;
+    static public int staticInt28736;
+    static public int staticInt28737;
+    static public int staticInt28738;
+    static public int staticInt28739;
+    static public int staticInt28740;
+    static public int staticInt28741;
+    static public int staticInt28742;
+    static public int staticInt28743;
+    static public int staticInt28744;
+    static public int staticInt28745;
+    static public int staticInt28746;
+    static public int staticInt28747;
+    static public int staticInt28748;
+    static public int staticInt28749;
+    static public int staticInt28750;
+    static public int staticInt28751;
+    static public int staticInt28752;
+    static public int staticInt28753;
+    static public int staticInt28754;
+    static public int staticInt28755;
+    static public int staticInt28756;
+    static public int staticInt28757;
+    static public int staticInt28758;
+    static public int staticInt28759;
+    static public int staticInt28760;
+    static public int staticInt28761;
+    static public int staticInt28762;
+    static public int staticInt28763;
+    static public int staticInt28764;
+    static public int staticInt28765;
+    static public int staticInt28766;
+    static public int staticInt28767;
+    static public int staticInt28768;
+    static public int staticInt28769;
+    static public int staticInt28770;
+    static public int staticInt28771;
+    static public int staticInt28772;
+    static public int staticInt28773;
+    static public int staticInt28774;
+    static public int staticInt28775;
+    static public int staticInt28776;
+    static public int staticInt28777;
+    static public int staticInt28778;
+    static public int staticInt28779;
+    static public int staticInt28780;
+    static public int staticInt28781;
+    static public int staticInt28782;
+    static public int staticInt28783;
+    static public int staticInt28784;
+    static public int staticInt28785;
+    static public int staticInt28786;
+    static public int staticInt28787;
+    static public int staticInt28788;
+    static public int staticInt28789;
+    static public int staticInt28790;
+    static public int staticInt28791;
+    static public int staticInt28792;
+    static public int staticInt28793;
+    static public int staticInt28794;
+    static public int staticInt28795;
+    static public int staticInt28796;
+    static public int staticInt28797;
+    static public int staticInt28798;
+    static public int staticInt28799;
+    static public int staticInt28800;
+    static public int staticInt28801;
+    static public int staticInt28802;
+    static public int staticInt28803;
+    static public int staticInt28804;
+    static public int staticInt28805;
+    static public int staticInt28806;
+    static public int staticInt28807;
+    static public int staticInt28808;
+    static public int staticInt28809;
+    static public int staticInt28810;
+    static public int staticInt28811;
+    static public int staticInt28812;
+    static public int staticInt28813;
+    static public int staticInt28814;
+    static public int staticInt28815;
+    static public int staticInt28816;
+    static public int staticInt28817;
+    static public int staticInt28818;
+    static public int staticInt28819;
+    static public int staticInt28820;
+    static public int staticInt28821;
+    static public int staticInt28822;
+    static public int staticInt28823;
+    static public int staticInt28824;
+    static public int staticInt28825;
+    static public int staticInt28826;
+    static public int staticInt28827;
+    static public int staticInt28828;
+    static public int staticInt28829;
+    static public int staticInt28830;
+    static public int staticInt28831;
+    static public int staticInt28832;
+    static public int staticInt28833;
+    static public int staticInt28834;
+    static public int staticInt28835;
+    static public int staticInt28836;
+    static public int staticInt28837;
+    static public int staticInt28838;
+    static public int staticInt28839;
+    static public int staticInt28840;
+    static public int staticInt28841;
+    static public int staticInt28842;
+    static public int staticInt28843;
+    static public int staticInt28844;
+    static public int staticInt28845;
+    static public int staticInt28846;
+    static public int staticInt28847;
+    static public int staticInt28848;
+    static public int staticInt28849;
+    static public int staticInt28850;
+    static public int staticInt28851;
+    static public int staticInt28852;
+    static public int staticInt28853;
+    static public int staticInt28854;
+    static public int staticInt28855;
+    static public int staticInt28856;
+    static public int staticInt28857;
+    static public int staticInt28858;
+    static public int staticInt28859;
+    static public int staticInt28860;
+    static public int staticInt28861;
+    static public int staticInt28862;
+    static public int staticInt28863;
+    static public int staticInt28864;
+    static public int staticInt28865;
+    static public int staticInt28866;
+    static public int staticInt28867;
+    static public int staticInt28868;
+    static public int staticInt28869;
+    static public int staticInt28870;
+    static public int staticInt28871;
+    static public int staticInt28872;
+    static public int staticInt28873;
+    static public int staticInt28874;
+    static public int staticInt28875;
+    static public int staticInt28876;
+    static public int staticInt28877;
+    static public int staticInt28878;
+    static public int staticInt28879;
+    static public int staticInt28880;
+    static public int staticInt28881;
+    static public int staticInt28882;
+    static public int staticInt28883;
+    static public int staticInt28884;
+    static public int staticInt28885;
+    static public int staticInt28886;
+    static public int staticInt28887;
+    static public int staticInt28888;
+    static public int staticInt28889;
+    static public int staticInt28890;
+    static public int staticInt28891;
+    static public int staticInt28892;
+    static public int staticInt28893;
+    static public int staticInt28894;
+    static public int staticInt28895;
+    static public int staticInt28896;
+    static public int staticInt28897;
+    static public int staticInt28898;
+    static public int staticInt28899;
+    static public int staticInt28900;
+    static public int staticInt28901;
+    static public int staticInt28902;
+    static public int staticInt28903;
+    static public int staticInt28904;
+    static public int staticInt28905;
+    static public int staticInt28906;
+    static public int staticInt28907;
+    static public int staticInt28908;
+    static public int staticInt28909;
+    static public int staticInt28910;
+    static public int staticInt28911;
+    static public int staticInt28912;
+    static public int staticInt28913;
+    static public int staticInt28914;
+    static public int staticInt28915;
+    static public int staticInt28916;
+    static public int staticInt28917;
+    static public int staticInt28918;
+    static public int staticInt28919;
+    static public int staticInt28920;
+    static public int staticInt28921;
+    static public int staticInt28922;
+    static public int staticInt28923;
+    static public int staticInt28924;
+    static public int staticInt28925;
+    static public int staticInt28926;
+    static public int staticInt28927;
+    static public int staticInt28928;
+    static public int staticInt28929;
+    static public int staticInt28930;
+    static public int staticInt28931;
+    static public int staticInt28932;
+    static public int staticInt28933;
+    static public int staticInt28934;
+    static public int staticInt28935;
+    static public int staticInt28936;
+    static public int staticInt28937;
+    static public int staticInt28938;
+    static public int staticInt28939;
+    static public int staticInt28940;
+    static public int staticInt28941;
+    static public int staticInt28942;
+    static public int staticInt28943;
+    static public int staticInt28944;
+    static public int staticInt28945;
+    static public int staticInt28946;
+    static public int staticInt28947;
+    static public int staticInt28948;
+    static public int staticInt28949;
+    static public int staticInt28950;
+    static public int staticInt28951;
+    static public int staticInt28952;
+    static public int staticInt28953;
+    static public int staticInt28954;
+    static public int staticInt28955;
+    static public int staticInt28956;
+    static public int staticInt28957;
+    static public int staticInt28958;
+    static public int staticInt28959;
+    static public int staticInt28960;
+    static public int staticInt28961;
+    static public int staticInt28962;
+    static public int staticInt28963;
+    static public int staticInt28964;
+    static public int staticInt28965;
+    static public int staticInt28966;
+    static public int staticInt28967;
+    static public int staticInt28968;
+    static public int staticInt28969;
+    static public int staticInt28970;
+    static public int staticInt28971;
+    static public int staticInt28972;
+    static public int staticInt28973;
+    static public int staticInt28974;
+    static public int staticInt28975;
+    static public int staticInt28976;
+    static public int staticInt28977;
+    static public int staticInt28978;
+    static public int staticInt28979;
+    static public int staticInt28980;
+    static public int staticInt28981;
+    static public int staticInt28982;
+    static public int staticInt28983;
+    static public int staticInt28984;
+    static public int staticInt28985;
+    static public int staticInt28986;
+    static public int staticInt28987;
+    static public int staticInt28988;
+    static public int staticInt28989;
+    static public int staticInt28990;
+    static public int staticInt28991;
+    static public int staticInt28992;
+    static public int staticInt28993;
+    static public int staticInt28994;
+    static public int staticInt28995;
+    static public int staticInt28996;
+    static public int staticInt28997;
+    static public int staticInt28998;
+    static public int staticInt28999;
+    static public int staticInt29000;
+    static public int staticInt29001;
+    static public int staticInt29002;
+    static public int staticInt29003;
+    static public int staticInt29004;
+    static public int staticInt29005;
+    static public int staticInt29006;
+    static public int staticInt29007;
+    static public int staticInt29008;
+    static public int staticInt29009;
+    static public int staticInt29010;
+    static public int staticInt29011;
+    static public int staticInt29012;
+    static public int staticInt29013;
+    static public int staticInt29014;
+    static public int staticInt29015;
+    static public int staticInt29016;
+    static public int staticInt29017;
+    static public int staticInt29018;
+    static public int staticInt29019;
+    static public int staticInt29020;
+    static public int staticInt29021;
+    static public int staticInt29022;
+    static public int staticInt29023;
+    static public int staticInt29024;
+    static public int staticInt29025;
+    static public int staticInt29026;
+    static public int staticInt29027;
+    static public int staticInt29028;
+    static public int staticInt29029;
+    static public int staticInt29030;
+    static public int staticInt29031;
+    static public int staticInt29032;
+    static public int staticInt29033;
+    static public int staticInt29034;
+    static public int staticInt29035;
+    static public int staticInt29036;
+    static public int staticInt29037;
+    static public int staticInt29038;
+    static public int staticInt29039;
+    static public int staticInt29040;
+    static public int staticInt29041;
+    static public int staticInt29042;
+    static public int staticInt29043;
+    static public int staticInt29044;
+    static public int staticInt29045;
+    static public int staticInt29046;
+    static public int staticInt29047;
+    static public int staticInt29048;
+    static public int staticInt29049;
+    static public int staticInt29050;
+    static public int staticInt29051;
+    static public int staticInt29052;
+    static public int staticInt29053;
+    static public int staticInt29054;
+    static public int staticInt29055;
+    static public int staticInt29056;
+    static public int staticInt29057;
+    static public int staticInt29058;
+    static public int staticInt29059;
+    static public int staticInt29060;
+    static public int staticInt29061;
+    static public int staticInt29062;
+    static public int staticInt29063;
+    static public int staticInt29064;
+    static public int staticInt29065;
+    static public int staticInt29066;
+    static public int staticInt29067;
+    static public int staticInt29068;
+    static public int staticInt29069;
+    static public int staticInt29070;
+    static public int staticInt29071;
+    static public int staticInt29072;
+    static public int staticInt29073;
+    static public int staticInt29074;
+    static public int staticInt29075;
+    static public int staticInt29076;
+    static public int staticInt29077;
+    static public int staticInt29078;
+    static public int staticInt29079;
+    static public int staticInt29080;
+    static public int staticInt29081;
+    static public int staticInt29082;
+    static public int staticInt29083;
+    static public int staticInt29084;
+    static public int staticInt29085;
+    static public int staticInt29086;
+    static public int staticInt29087;
+    static public int staticInt29088;
+    static public int staticInt29089;
+    static public int staticInt29090;
+    static public int staticInt29091;
+    static public int staticInt29092;
+    static public int staticInt29093;
+    static public int staticInt29094;
+    static public int staticInt29095;
+    static public int staticInt29096;
+    static public int staticInt29097;
+    static public int staticInt29098;
+    static public int staticInt29099;
+    static public int staticInt29100;
+    static public int staticInt29101;
+    static public int staticInt29102;
+    static public int staticInt29103;
+    static public int staticInt29104;
+    static public int staticInt29105;
+    static public int staticInt29106;
+    static public int staticInt29107;
+    static public int staticInt29108;
+    static public int staticInt29109;
+    static public int staticInt29110;
+    static public int staticInt29111;
+    static public int staticInt29112;
+    static public int staticInt29113;
+    static public int staticInt29114;
+    static public int staticInt29115;
+    static public int staticInt29116;
+    static public int staticInt29117;
+    static public int staticInt29118;
+    static public int staticInt29119;
+    static public int staticInt29120;
+    static public int staticInt29121;
+    static public int staticInt29122;
+    static public int staticInt29123;
+    static public int staticInt29124;
+    static public int staticInt29125;
+    static public int staticInt29126;
+    static public int staticInt29127;
+    static public int staticInt29128;
+    static public int staticInt29129;
+    static public int staticInt29130;
+    static public int staticInt29131;
+    static public int staticInt29132;
+    static public int staticInt29133;
+    static public int staticInt29134;
+    static public int staticInt29135;
+    static public int staticInt29136;
+    static public int staticInt29137;
+    static public int staticInt29138;
+    static public int staticInt29139;
+    static public int staticInt29140;
+    static public int staticInt29141;
+    static public int staticInt29142;
+    static public int staticInt29143;
+    static public int staticInt29144;
+    static public int staticInt29145;
+    static public int staticInt29146;
+    static public int staticInt29147;
+    static public int staticInt29148;
+    static public int staticInt29149;
+    static public int staticInt29150;
+    static public int staticInt29151;
+    static public int staticInt29152;
+    static public int staticInt29153;
+    static public int staticInt29154;
+    static public int staticInt29155;
+    static public int staticInt29156;
+    static public int staticInt29157;
+    static public int staticInt29158;
+    static public int staticInt29159;
+    static public int staticInt29160;
+    static public int staticInt29161;
+    static public int staticInt29162;
+    static public int staticInt29163;
+    static public int staticInt29164;
+    static public int staticInt29165;
+    static public int staticInt29166;
+    static public int staticInt29167;
+    static public int staticInt29168;
+    static public int staticInt29169;
+    static public int staticInt29170;
+    static public int staticInt29171;
+    static public int staticInt29172;
+    static public int staticInt29173;
+    static public int staticInt29174;
+    static public int staticInt29175;
+    static public int staticInt29176;
+    static public int staticInt29177;
+    static public int staticInt29178;
+    static public int staticInt29179;
+    static public int staticInt29180;
+    static public int staticInt29181;
+    static public int staticInt29182;
+    static public int staticInt29183;
+    static public int staticInt29184;
+    static public int staticInt29185;
+    static public int staticInt29186;
+    static public int staticInt29187;
+    static public int staticInt29188;
+    static public int staticInt29189;
+    static public int staticInt29190;
+    static public int staticInt29191;
+    static public int staticInt29192;
+    static public int staticInt29193;
+    static public int staticInt29194;
+    static public int staticInt29195;
+    static public int staticInt29196;
+    static public int staticInt29197;
+    static public int staticInt29198;
+    static public int staticInt29199;
+    static public int staticInt29200;
+    static public int staticInt29201;
+    static public int staticInt29202;
+    static public int staticInt29203;
+    static public int staticInt29204;
+    static public int staticInt29205;
+    static public int staticInt29206;
+    static public int staticInt29207;
+    static public int staticInt29208;
+    static public int staticInt29209;
+    static public int staticInt29210;
+    static public int staticInt29211;
+    static public int staticInt29212;
+    static public int staticInt29213;
+    static public int staticInt29214;
+    static public int staticInt29215;
+    static public int staticInt29216;
+    static public int staticInt29217;
+    static public int staticInt29218;
+    static public int staticInt29219;
+    static public int staticInt29220;
+    static public int staticInt29221;
+    static public int staticInt29222;
+    static public int staticInt29223;
+    static public int staticInt29224;
+    static public int staticInt29225;
+    static public int staticInt29226;
+    static public int staticInt29227;
+    static public int staticInt29228;
+    static public int staticInt29229;
+    static public int staticInt29230;
+    static public int staticInt29231;
+    static public int staticInt29232;
+    static public int staticInt29233;
+    static public int staticInt29234;
+    static public int staticInt29235;
+    static public int staticInt29236;
+    static public int staticInt29237;
+    static public int staticInt29238;
+    static public int staticInt29239;
+    static public int staticInt29240;
+    static public int staticInt29241;
+    static public int staticInt29242;
+    static public int staticInt29243;
+    static public int staticInt29244;
+    static public int staticInt29245;
+    static public int staticInt29246;
+    static public int staticInt29247;
+    static public int staticInt29248;
+    static public int staticInt29249;
+    static public int staticInt29250;
+    static public int staticInt29251;
+    static public int staticInt29252;
+    static public int staticInt29253;
+    static public int staticInt29254;
+    static public int staticInt29255;
+    static public int staticInt29256;
+    static public int staticInt29257;
+    static public int staticInt29258;
+    static public int staticInt29259;
+    static public int staticInt29260;
+    static public int staticInt29261;
+    static public int staticInt29262;
+    static public int staticInt29263;
+    static public int staticInt29264;
+    static public int staticInt29265;
+    static public int staticInt29266;
+    static public int staticInt29267;
+    static public int staticInt29268;
+    static public int staticInt29269;
+    static public int staticInt29270;
+    static public int staticInt29271;
+    static public int staticInt29272;
+    static public int staticInt29273;
+    static public int staticInt29274;
+    static public int staticInt29275;
+    static public int staticInt29276;
+    static public int staticInt29277;
+    static public int staticInt29278;
+    static public int staticInt29279;
+    static public int staticInt29280;
+    static public int staticInt29281;
+    static public int staticInt29282;
+    static public int staticInt29283;
+    static public int staticInt29284;
+    static public int staticInt29285;
+    static public int staticInt29286;
+    static public int staticInt29287;
+    static public int staticInt29288;
+    static public int staticInt29289;
+    static public int staticInt29290;
+    static public int staticInt29291;
+    static public int staticInt29292;
+    static public int staticInt29293;
+    static public int staticInt29294;
+    static public int staticInt29295;
+    static public int staticInt29296;
+    static public int staticInt29297;
+    static public int staticInt29298;
+    static public int staticInt29299;
+    static public int staticInt29300;
+    static public int staticInt29301;
+    static public int staticInt29302;
+    static public int staticInt29303;
+    static public int staticInt29304;
+    static public int staticInt29305;
+    static public int staticInt29306;
+    static public int staticInt29307;
+    static public int staticInt29308;
+    static public int staticInt29309;
+    static public int staticInt29310;
+    static public int staticInt29311;
+    static public int staticInt29312;
+    static public int staticInt29313;
+    static public int staticInt29314;
+    static public int staticInt29315;
+    static public int staticInt29316;
+    static public int staticInt29317;
+    static public int staticInt29318;
+    static public int staticInt29319;
+    static public int staticInt29320;
+    static public int staticInt29321;
+    static public int staticInt29322;
+    static public int staticInt29323;
+    static public int staticInt29324;
+    static public int staticInt29325;
+    static public int staticInt29326;
+    static public int staticInt29327;
+    static public int staticInt29328;
+    static public int staticInt29329;
+    static public int staticInt29330;
+    static public int staticInt29331;
+    static public int staticInt29332;
+    static public int staticInt29333;
+    static public int staticInt29334;
+    static public int staticInt29335;
+    static public int staticInt29336;
+    static public int staticInt29337;
+    static public int staticInt29338;
+    static public int staticInt29339;
+    static public int staticInt29340;
+    static public int staticInt29341;
+    static public int staticInt29342;
+    static public int staticInt29343;
+    static public int staticInt29344;
+    static public int staticInt29345;
+    static public int staticInt29346;
+    static public int staticInt29347;
+    static public int staticInt29348;
+    static public int staticInt29349;
+    static public int staticInt29350;
+    static public int staticInt29351;
+    static public int staticInt29352;
+    static public int staticInt29353;
+    static public int staticInt29354;
+    static public int staticInt29355;
+    static public int staticInt29356;
+    static public int staticInt29357;
+    static public int staticInt29358;
+    static public int staticInt29359;
+    static public int staticInt29360;
+    static public int staticInt29361;
+    static public int staticInt29362;
+    static public int staticInt29363;
+    static public int staticInt29364;
+    static public int staticInt29365;
+    static public int staticInt29366;
+    static public int staticInt29367;
+    static public int staticInt29368;
+    static public int staticInt29369;
+    static public int staticInt29370;
+    static public int staticInt29371;
+    static public int staticInt29372;
+    static public int staticInt29373;
+    static public int staticInt29374;
+    static public int staticInt29375;
+    static public int staticInt29376;
+    static public int staticInt29377;
+    static public int staticInt29378;
+    static public int staticInt29379;
+    static public int staticInt29380;
+    static public int staticInt29381;
+    static public int staticInt29382;
+    static public int staticInt29383;
+    static public int staticInt29384;
+    static public int staticInt29385;
+    static public int staticInt29386;
+    static public int staticInt29387;
+    static public int staticInt29388;
+    static public int staticInt29389;
+    static public int staticInt29390;
+    static public int staticInt29391;
+    static public int staticInt29392;
+    static public int staticInt29393;
+    static public int staticInt29394;
+    static public int staticInt29395;
+    static public int staticInt29396;
+    static public int staticInt29397;
+    static public int staticInt29398;
+    static public int staticInt29399;
+    static public int staticInt29400;
+    static public int staticInt29401;
+    static public int staticInt29402;
+    static public int staticInt29403;
+    static public int staticInt29404;
+    static public int staticInt29405;
+    static public int staticInt29406;
+    static public int staticInt29407;
+    static public int staticInt29408;
+    static public int staticInt29409;
+    static public int staticInt29410;
+    static public int staticInt29411;
+    static public int staticInt29412;
+    static public int staticInt29413;
+    static public int staticInt29414;
+    static public int staticInt29415;
+    static public int staticInt29416;
+    static public int staticInt29417;
+    static public int staticInt29418;
+    static public int staticInt29419;
+    static public int staticInt29420;
+    static public int staticInt29421;
+    static public int staticInt29422;
+    static public int staticInt29423;
+    static public int staticInt29424;
+    static public int staticInt29425;
+    static public int staticInt29426;
+    static public int staticInt29427;
+    static public int staticInt29428;
+    static public int staticInt29429;
+    static public int staticInt29430;
+    static public int staticInt29431;
+    static public int staticInt29432;
+    static public int staticInt29433;
+    static public int staticInt29434;
+    static public int staticInt29435;
+    static public int staticInt29436;
+    static public int staticInt29437;
+    static public int staticInt29438;
+    static public int staticInt29439;
+    static public int staticInt29440;
+    static public int staticInt29441;
+    static public int staticInt29442;
+    static public int staticInt29443;
+    static public int staticInt29444;
+    static public int staticInt29445;
+    static public int staticInt29446;
+    static public int staticInt29447;
+    static public int staticInt29448;
+    static public int staticInt29449;
+    static public int staticInt29450;
+    static public int staticInt29451;
+    static public int staticInt29452;
+    static public int staticInt29453;
+    static public int staticInt29454;
+    static public int staticInt29455;
+    static public int staticInt29456;
+    static public int staticInt29457;
+    static public int staticInt29458;
+    static public int staticInt29459;
+    static public int staticInt29460;
+    static public int staticInt29461;
+    static public int staticInt29462;
+    static public int staticInt29463;
+    static public int staticInt29464;
+    static public int staticInt29465;
+    static public int staticInt29466;
+    static public int staticInt29467;
+    static public int staticInt29468;
+    static public int staticInt29469;
+    static public int staticInt29470;
+    static public int staticInt29471;
+    static public int staticInt29472;
+    static public int staticInt29473;
+    static public int staticInt29474;
+    static public int staticInt29475;
+    static public int staticInt29476;
+    static public int staticInt29477;
+    static public int staticInt29478;
+    static public int staticInt29479;
+    static public int staticInt29480;
+    static public int staticInt29481;
+    static public int staticInt29482;
+    static public int staticInt29483;
+    static public int staticInt29484;
+    static public int staticInt29485;
+    static public int staticInt29486;
+    static public int staticInt29487;
+    static public int staticInt29488;
+    static public int staticInt29489;
+    static public int staticInt29490;
+    static public int staticInt29491;
+    static public int staticInt29492;
+    static public int staticInt29493;
+    static public int staticInt29494;
+    static public int staticInt29495;
+    static public int staticInt29496;
+    static public int staticInt29497;
+    static public int staticInt29498;
+    static public int staticInt29499;
+    static public int staticInt29500;
+    static public int staticInt29501;
+    static public int staticInt29502;
+    static public int staticInt29503;
+    static public int staticInt29504;
+    static public int staticInt29505;
+    static public int staticInt29506;
+    static public int staticInt29507;
+    static public int staticInt29508;
+    static public int staticInt29509;
+    static public int staticInt29510;
+    static public int staticInt29511;
+    static public int staticInt29512;
+    static public int staticInt29513;
+    static public int staticInt29514;
+    static public int staticInt29515;
+    static public int staticInt29516;
+    static public int staticInt29517;
+    static public int staticInt29518;
+    static public int staticInt29519;
+    static public int staticInt29520;
+    static public int staticInt29521;
+    static public int staticInt29522;
+    static public int staticInt29523;
+    static public int staticInt29524;
+    static public int staticInt29525;
+    static public int staticInt29526;
+    static public int staticInt29527;
+    static public int staticInt29528;
+    static public int staticInt29529;
+    static public int staticInt29530;
+    static public int staticInt29531;
+    static public int staticInt29532;
+    static public int staticInt29533;
+    static public int staticInt29534;
+    static public int staticInt29535;
+    static public int staticInt29536;
+    static public int staticInt29537;
+    static public int staticInt29538;
+    static public int staticInt29539;
+    static public int staticInt29540;
+    static public int staticInt29541;
+    static public int staticInt29542;
+    static public int staticInt29543;
+    static public int staticInt29544;
+    static public int staticInt29545;
+    static public int staticInt29546;
+    static public int staticInt29547;
+    static public int staticInt29548;
+    static public int staticInt29549;
+    static public int staticInt29550;
+    static public int staticInt29551;
+    static public int staticInt29552;
+    static public int staticInt29553;
+    static public int staticInt29554;
+    static public int staticInt29555;
+    static public int staticInt29556;
+    static public int staticInt29557;
+    static public int staticInt29558;
+    static public int staticInt29559;
+    static public int staticInt29560;
+    static public int staticInt29561;
+    static public int staticInt29562;
+    static public int staticInt29563;
+    static public int staticInt29564;
+    static public int staticInt29565;
+    static public int staticInt29566;
+    static public int staticInt29567;
+    static public int staticInt29568;
+    static public int staticInt29569;
+    static public int staticInt29570;
+    static public int staticInt29571;
+    static public int staticInt29572;
+    static public int staticInt29573;
+    static public int staticInt29574;
+    static public int staticInt29575;
+    static public int staticInt29576;
+    static public int staticInt29577;
+    static public int staticInt29578;
+    static public int staticInt29579;
+    static public int staticInt29580;
+    static public int staticInt29581;
+    static public int staticInt29582;
+    static public int staticInt29583;
+    static public int staticInt29584;
+    static public int staticInt29585;
+    static public int staticInt29586;
+    static public int staticInt29587;
+    static public int staticInt29588;
+    static public int staticInt29589;
+    static public int staticInt29590;
+    static public int staticInt29591;
+    static public int staticInt29592;
+    static public int staticInt29593;
+    static public int staticInt29594;
+    static public int staticInt29595;
+    static public int staticInt29596;
+    static public int staticInt29597;
+    static public int staticInt29598;
+    static public int staticInt29599;
+    static public int staticInt29600;
+    static public int staticInt29601;
+    static public int staticInt29602;
+    static public int staticInt29603;
+    static public int staticInt29604;
+    static public int staticInt29605;
+    static public int staticInt29606;
+    static public int staticInt29607;
+    static public int staticInt29608;
+    static public int staticInt29609;
+    static public int staticInt29610;
+    static public int staticInt29611;
+    static public int staticInt29612;
+    static public int staticInt29613;
+    static public int staticInt29614;
+    static public int staticInt29615;
+    static public int staticInt29616;
+    static public int staticInt29617;
+    static public int staticInt29618;
+    static public int staticInt29619;
+    static public int staticInt29620;
+    static public int staticInt29621;
+    static public int staticInt29622;
+    static public int staticInt29623;
+    static public int staticInt29624;
+    static public int staticInt29625;
+    static public int staticInt29626;
+    static public int staticInt29627;
+    static public int staticInt29628;
+    static public int staticInt29629;
+    static public int staticInt29630;
+    static public int staticInt29631;
+    static public int staticInt29632;
+    static public int staticInt29633;
+    static public int staticInt29634;
+    static public int staticInt29635;
+    static public int staticInt29636;
+    static public int staticInt29637;
+    static public int staticInt29638;
+    static public int staticInt29639;
+    static public int staticInt29640;
+    static public int staticInt29641;
+    static public int staticInt29642;
+    static public int staticInt29643;
+    static public int staticInt29644;
+    static public int staticInt29645;
+    static public int staticInt29646;
+    static public int staticInt29647;
+    static public int staticInt29648;
+    static public int staticInt29649;
+    static public int staticInt29650;
+    static public int staticInt29651;
+    static public int staticInt29652;
+    static public int staticInt29653;
+    static public int staticInt29654;
+    static public int staticInt29655;
+    static public int staticInt29656;
+    static public int staticInt29657;
+    static public int staticInt29658;
+    static public int staticInt29659;
+    static public int staticInt29660;
+    static public int staticInt29661;
+    static public int staticInt29662;
+    static public int staticInt29663;
+    static public int staticInt29664;
+    static public int staticInt29665;
+    static public int staticInt29666;
+    static public int staticInt29667;
+    static public int staticInt29668;
+    static public int staticInt29669;
+    static public int staticInt29670;
+    static public int staticInt29671;
+    static public int staticInt29672;
+    static public int staticInt29673;
+    static public int staticInt29674;
+    static public int staticInt29675;
+    static public int staticInt29676;
+    static public int staticInt29677;
+    static public int staticInt29678;
+    static public int staticInt29679;
+    static public int staticInt29680;
+    static public int staticInt29681;
+    static public int staticInt29682;
+    static public int staticInt29683;
+    static public int staticInt29684;
+    static public int staticInt29685;
+    static public int staticInt29686;
+    static public int staticInt29687;
+    static public int staticInt29688;
+    static public int staticInt29689;
+    static public int staticInt29690;
+    static public int staticInt29691;
+    static public int staticInt29692;
+    static public int staticInt29693;
+    static public int staticInt29694;
+    static public int staticInt29695;
+    static public int staticInt29696;
+    static public int staticInt29697;
+    static public int staticInt29698;
+    static public int staticInt29699;
+    static public int staticInt29700;
+    static public int staticInt29701;
+    static public int staticInt29702;
+    static public int staticInt29703;
+    static public int staticInt29704;
+    static public int staticInt29705;
+    static public int staticInt29706;
+    static public int staticInt29707;
+    static public int staticInt29708;
+    static public int staticInt29709;
+    static public int staticInt29710;
+    static public int staticInt29711;
+    static public int staticInt29712;
+    static public int staticInt29713;
+    static public int staticInt29714;
+    static public int staticInt29715;
+    static public int staticInt29716;
+    static public int staticInt29717;
+    static public int staticInt29718;
+    static public int staticInt29719;
+    static public int staticInt29720;
+    static public int staticInt29721;
+    static public int staticInt29722;
+    static public int staticInt29723;
+    static public int staticInt29724;
+    static public int staticInt29725;
+    static public int staticInt29726;
+    static public int staticInt29727;
+    static public int staticInt29728;
+    static public int staticInt29729;
+    static public int staticInt29730;
+    static public int staticInt29731;
+    static public int staticInt29732;
+    static public int staticInt29733;
+    static public int staticInt29734;
+    static public int staticInt29735;
+    static public int staticInt29736;
+    static public int staticInt29737;
+    static public int staticInt29738;
+    static public int staticInt29739;
+    static public int staticInt29740;
+    static public int staticInt29741;
+    static public int staticInt29742;
+    static public int staticInt29743;
+    static public int staticInt29744;
+    static public int staticInt29745;
+    static public int staticInt29746;
+    static public int staticInt29747;
+    static public int staticInt29748;
+    static public int staticInt29749;
+    static public int staticInt29750;
+    static public int staticInt29751;
+    static public int staticInt29752;
+    static public int staticInt29753;
+    static public int staticInt29754;
+    static public int staticInt29755;
+    static public int staticInt29756;
+    static public int staticInt29757;
+    static public int staticInt29758;
+    static public int staticInt29759;
+    static public int staticInt29760;
+    static public int staticInt29761;
+    static public int staticInt29762;
+    static public int staticInt29763;
+    static public int staticInt29764;
+    static public int staticInt29765;
+    static public int staticInt29766;
+    static public int staticInt29767;
+    static public int staticInt29768;
+    static public int staticInt29769;
+    static public int staticInt29770;
+    static public int staticInt29771;
+    static public int staticInt29772;
+    static public int staticInt29773;
+    static public int staticInt29774;
+    static public int staticInt29775;
+    static public int staticInt29776;
+    static public int staticInt29777;
+    static public int staticInt29778;
+    static public int staticInt29779;
+    static public int staticInt29780;
+    static public int staticInt29781;
+    static public int staticInt29782;
+    static public int staticInt29783;
+    static public int staticInt29784;
+    static public int staticInt29785;
+    static public int staticInt29786;
+    static public int staticInt29787;
+    static public int staticInt29788;
+    static public int staticInt29789;
+    static public int staticInt29790;
+    static public int staticInt29791;
+    static public int staticInt29792;
+    static public int staticInt29793;
+    static public int staticInt29794;
+    static public int staticInt29795;
+    static public int staticInt29796;
+    static public int staticInt29797;
+    static public int staticInt29798;
+    static public int staticInt29799;
+    static public int staticInt29800;
+    static public int staticInt29801;
+    static public int staticInt29802;
+    static public int staticInt29803;
+    static public int staticInt29804;
+    static public int staticInt29805;
+    static public int staticInt29806;
+    static public int staticInt29807;
+    static public int staticInt29808;
+    static public int staticInt29809;
+    static public int staticInt29810;
+    static public int staticInt29811;
+    static public int staticInt29812;
+    static public int staticInt29813;
+    static public int staticInt29814;
+    static public int staticInt29815;
+    static public int staticInt29816;
+    static public int staticInt29817;
+    static public int staticInt29818;
+    static public int staticInt29819;
+    static public int staticInt29820;
+    static public int staticInt29821;
+    static public int staticInt29822;
+    static public int staticInt29823;
+    static public int staticInt29824;
+    static public int staticInt29825;
+    static public int staticInt29826;
+    static public int staticInt29827;
+    static public int staticInt29828;
+    static public int staticInt29829;
+    static public int staticInt29830;
+    static public int staticInt29831;
+    static public int staticInt29832;
+    static public int staticInt29833;
+    static public int staticInt29834;
+    static public int staticInt29835;
+    static public int staticInt29836;
+    static public int staticInt29837;
+    static public int staticInt29838;
+    static public int staticInt29839;
+    static public int staticInt29840;
+    static public int staticInt29841;
+    static public int staticInt29842;
+    static public int staticInt29843;
+    static public int staticInt29844;
+    static public int staticInt29845;
+    static public int staticInt29846;
+    static public int staticInt29847;
+    static public int staticInt29848;
+    static public int staticInt29849;
+    static public int staticInt29850;
+    static public int staticInt29851;
+    static public int staticInt29852;
+    static public int staticInt29853;
+    static public int staticInt29854;
+    static public int staticInt29855;
+    static public int staticInt29856;
+    static public int staticInt29857;
+    static public int staticInt29858;
+    static public int staticInt29859;
+    static public int staticInt29860;
+    static public int staticInt29861;
+    static public int staticInt29862;
+    static public int staticInt29863;
+    static public int staticInt29864;
+    static public int staticInt29865;
+    static public int staticInt29866;
+    static public int staticInt29867;
+    static public int staticInt29868;
+    static public int staticInt29869;
+    static public int staticInt29870;
+    static public int staticInt29871;
+    static public int staticInt29872;
+    static public int staticInt29873;
+    static public int staticInt29874;
+    static public int staticInt29875;
+    static public int staticInt29876;
+    static public int staticInt29877;
+    static public int staticInt29878;
+    static public int staticInt29879;
+    static public int staticInt29880;
+    static public int staticInt29881;
+    static public int staticInt29882;
+    static public int staticInt29883;
+    static public int staticInt29884;
+    static public int staticInt29885;
+    static public int staticInt29886;
+    static public int staticInt29887;
+    static public int staticInt29888;
+    static public int staticInt29889;
+    static public int staticInt29890;
+    static public int staticInt29891;
+    static public int staticInt29892;
+    static public int staticInt29893;
+    static public int staticInt29894;
+    static public int staticInt29895;
+    static public int staticInt29896;
+    static public int staticInt29897;
+    static public int staticInt29898;
+    static public int staticInt29899;
+    static public int staticInt29900;
+    static public int staticInt29901;
+    static public int staticInt29902;
+    static public int staticInt29903;
+    static public int staticInt29904;
+    static public int staticInt29905;
+    static public int staticInt29906;
+    static public int staticInt29907;
+    static public int staticInt29908;
+    static public int staticInt29909;
+    static public int staticInt29910;
+    static public int staticInt29911;
+    static public int staticInt29912;
+    static public int staticInt29913;
+    static public int staticInt29914;
+    static public int staticInt29915;
+    static public int staticInt29916;
+    static public int staticInt29917;
+    static public int staticInt29918;
+    static public int staticInt29919;
+    static public int staticInt29920;
+    static public int staticInt29921;
+    static public int staticInt29922;
+    static public int staticInt29923;
+    static public int staticInt29924;
+    static public int staticInt29925;
+    static public int staticInt29926;
+    static public int staticInt29927;
+    static public int staticInt29928;
+    static public int staticInt29929;
+    static public int staticInt29930;
+    static public int staticInt29931;
+    static public int staticInt29932;
+    static public int staticInt29933;
+    static public int staticInt29934;
+    static public int staticInt29935;
+    static public int staticInt29936;
+    static public int staticInt29937;
+    static public int staticInt29938;
+    static public int staticInt29939;
+    static public int staticInt29940;
+    static public int staticInt29941;
+    static public int staticInt29942;
+    static public int staticInt29943;
+    static public int staticInt29944;
+    static public int staticInt29945;
+    static public int staticInt29946;
+    static public int staticInt29947;
+    static public int staticInt29948;
+    static public int staticInt29949;
+    static public int staticInt29950;
+    static public int staticInt29951;
+    static public int staticInt29952;
+    static public int staticInt29953;
+    static public int staticInt29954;
+    static public int staticInt29955;
+    static public int staticInt29956;
+    static public int staticInt29957;
+    static public int staticInt29958;
+    static public int staticInt29959;
+    static public int staticInt29960;
+    static public int staticInt29961;
+    static public int staticInt29962;
+    static public int staticInt29963;
+    static public int staticInt29964;
+    static public int staticInt29965;
+    static public int staticInt29966;
+    static public int staticInt29967;
+    static public int staticInt29968;
+    static public int staticInt29969;
+    static public int staticInt29970;
+    static public int staticInt29971;
+    static public int staticInt29972;
+    static public int staticInt29973;
+    static public int staticInt29974;
+    static public int staticInt29975;
+    static public int staticInt29976;
+    static public int staticInt29977;
+    static public int staticInt29978;
+    static public int staticInt29979;
+    static public int staticInt29980;
+    static public int staticInt29981;
+    static public int staticInt29982;
+    static public int staticInt29983;
+    static public int staticInt29984;
+    static public int staticInt29985;
+    static public int staticInt29986;
+    static public int staticInt29987;
+    static public int staticInt29988;
+    static public int staticInt29989;
+    static public int staticInt29990;
+    static public int staticInt29991;
+    static public int staticInt29992;
+    static public int staticInt29993;
+    static public int staticInt29994;
+    static public int staticInt29995;
+    static public int staticInt29996;
+    static public int staticInt29997;
+    static public int staticInt29998;
+    static public int staticInt29999;
+    static public int staticInt30000;
+    static public int staticInt30001;
+    static public int staticInt30002;
+    static public int staticInt30003;
+    static public int staticInt30004;
+    static public int staticInt30005;
+    static public int staticInt30006;
+    static public int staticInt30007;
+    static public int staticInt30008;
+    static public int staticInt30009;
+    static public int staticInt30010;
+    static public int staticInt30011;
+    static public int staticInt30012;
+    static public int staticInt30013;
+    static public int staticInt30014;
+    static public int staticInt30015;
+    static public int staticInt30016;
+    static public int staticInt30017;
+    static public int staticInt30018;
+    static public int staticInt30019;
+    static public int staticInt30020;
+    static public int staticInt30021;
+    static public int staticInt30022;
+    static public int staticInt30023;
+    static public int staticInt30024;
+    static public int staticInt30025;
+    static public int staticInt30026;
+    static public int staticInt30027;
+    static public int staticInt30028;
+    static public int staticInt30029;
+    static public int staticInt30030;
+    static public int staticInt30031;
+    static public int staticInt30032;
+    static public int staticInt30033;
+    static public int staticInt30034;
+    static public int staticInt30035;
+    static public int staticInt30036;
+    static public int staticInt30037;
+    static public int staticInt30038;
+    static public int staticInt30039;
+    static public int staticInt30040;
+    static public int staticInt30041;
+    static public int staticInt30042;
+    static public int staticInt30043;
+    static public int staticInt30044;
+    static public int staticInt30045;
+    static public int staticInt30046;
+    static public int staticInt30047;
+    static public int staticInt30048;
+    static public int staticInt30049;
+    static public int staticInt30050;
+    static public int staticInt30051;
+    static public int staticInt30052;
+    static public int staticInt30053;
+    static public int staticInt30054;
+    static public int staticInt30055;
+    static public int staticInt30056;
+    static public int staticInt30057;
+    static public int staticInt30058;
+    static public int staticInt30059;
+    static public int staticInt30060;
+    static public int staticInt30061;
+    static public int staticInt30062;
+    static public int staticInt30063;
+    static public int staticInt30064;
+    static public int staticInt30065;
+    static public int staticInt30066;
+    static public int staticInt30067;
+    static public int staticInt30068;
+    static public int staticInt30069;
+    static public int staticInt30070;
+    static public int staticInt30071;
+    static public int staticInt30072;
+    static public int staticInt30073;
+    static public int staticInt30074;
+    static public int staticInt30075;
+    static public int staticInt30076;
+    static public int staticInt30077;
+    static public int staticInt30078;
+    static public int staticInt30079;
+    static public int staticInt30080;
+    static public int staticInt30081;
+    static public int staticInt30082;
+    static public int staticInt30083;
+    static public int staticInt30084;
+    static public int staticInt30085;
+    static public int staticInt30086;
+    static public int staticInt30087;
+    static public int staticInt30088;
+    static public int staticInt30089;
+    static public int staticInt30090;
+    static public int staticInt30091;
+    static public int staticInt30092;
+    static public int staticInt30093;
+    static public int staticInt30094;
+    static public int staticInt30095;
+    static public int staticInt30096;
+    static public int staticInt30097;
+    static public int staticInt30098;
+    static public int staticInt30099;
+    static public int staticInt30100;
+    static public int staticInt30101;
+    static public int staticInt30102;
+    static public int staticInt30103;
+    static public int staticInt30104;
+    static public int staticInt30105;
+    static public int staticInt30106;
+    static public int staticInt30107;
+    static public int staticInt30108;
+    static public int staticInt30109;
+    static public int staticInt30110;
+    static public int staticInt30111;
+    static public int staticInt30112;
+    static public int staticInt30113;
+    static public int staticInt30114;
+    static public int staticInt30115;
+    static public int staticInt30116;
+    static public int staticInt30117;
+    static public int staticInt30118;
+    static public int staticInt30119;
+    static public int staticInt30120;
+    static public int staticInt30121;
+    static public int staticInt30122;
+    static public int staticInt30123;
+    static public int staticInt30124;
+    static public int staticInt30125;
+    static public int staticInt30126;
+    static public int staticInt30127;
+    static public int staticInt30128;
+    static public int staticInt30129;
+    static public int staticInt30130;
+    static public int staticInt30131;
+    static public int staticInt30132;
+    static public int staticInt30133;
+    static public int staticInt30134;
+    static public int staticInt30135;
+    static public int staticInt30136;
+    static public int staticInt30137;
+    static public int staticInt30138;
+    static public int staticInt30139;
+    static public int staticInt30140;
+    static public int staticInt30141;
+    static public int staticInt30142;
+    static public int staticInt30143;
+    static public int staticInt30144;
+    static public int staticInt30145;
+    static public int staticInt30146;
+    static public int staticInt30147;
+    static public int staticInt30148;
+    static public int staticInt30149;
+    static public int staticInt30150;
+    static public int staticInt30151;
+    static public int staticInt30152;
+    static public int staticInt30153;
+    static public int staticInt30154;
+    static public int staticInt30155;
+    static public int staticInt30156;
+    static public int staticInt30157;
+    static public int staticInt30158;
+    static public int staticInt30159;
+    static public int staticInt30160;
+    static public int staticInt30161;
+    static public int staticInt30162;
+    static public int staticInt30163;
+    static public int staticInt30164;
+    static public int staticInt30165;
+    static public int staticInt30166;
+    static public int staticInt30167;
+    static public int staticInt30168;
+    static public int staticInt30169;
+    static public int staticInt30170;
+    static public int staticInt30171;
+    static public int staticInt30172;
+    static public int staticInt30173;
+    static public int staticInt30174;
+    static public int staticInt30175;
+    static public int staticInt30176;
+    static public int staticInt30177;
+    static public int staticInt30178;
+    static public int staticInt30179;
+    static public int staticInt30180;
+    static public int staticInt30181;
+    static public int staticInt30182;
+    static public int staticInt30183;
+    static public int staticInt30184;
+    static public int staticInt30185;
+    static public int staticInt30186;
+    static public int staticInt30187;
+    static public int staticInt30188;
+    static public int staticInt30189;
+    static public int staticInt30190;
+    static public int staticInt30191;
+    static public int staticInt30192;
+    static public int staticInt30193;
+    static public int staticInt30194;
+    static public int staticInt30195;
+    static public int staticInt30196;
+    static public int staticInt30197;
+    static public int staticInt30198;
+    static public int staticInt30199;
+    static public int staticInt30200;
+    static public int staticInt30201;
+    static public int staticInt30202;
+    static public int staticInt30203;
+    static public int staticInt30204;
+    static public int staticInt30205;
+    static public int staticInt30206;
+    static public int staticInt30207;
+    static public int staticInt30208;
+    static public int staticInt30209;
+    static public int staticInt30210;
+    static public int staticInt30211;
+    static public int staticInt30212;
+    static public int staticInt30213;
+    static public int staticInt30214;
+    static public int staticInt30215;
+    static public int staticInt30216;
+    static public int staticInt30217;
+    static public int staticInt30218;
+    static public int staticInt30219;
+    static public int staticInt30220;
+    static public int staticInt30221;
+    static public int staticInt30222;
+    static public int staticInt30223;
+    static public int staticInt30224;
+    static public int staticInt30225;
+    static public int staticInt30226;
+    static public int staticInt30227;
+    static public int staticInt30228;
+    static public int staticInt30229;
+    static public int staticInt30230;
+    static public int staticInt30231;
+    static public int staticInt30232;
+    static public int staticInt30233;
+    static public int staticInt30234;
+    static public int staticInt30235;
+    static public int staticInt30236;
+    static public int staticInt30237;
+    static public int staticInt30238;
+    static public int staticInt30239;
+    static public int staticInt30240;
+    static public int staticInt30241;
+    static public int staticInt30242;
+    static public int staticInt30243;
+    static public int staticInt30244;
+    static public int staticInt30245;
+    static public int staticInt30246;
+    static public int staticInt30247;
+    static public int staticInt30248;
+    static public int staticInt30249;
+    static public int staticInt30250;
+    static public int staticInt30251;
+    static public int staticInt30252;
+    static public int staticInt30253;
+    static public int staticInt30254;
+    static public int staticInt30255;
+    static public int staticInt30256;
+    static public int staticInt30257;
+    static public int staticInt30258;
+    static public int staticInt30259;
+    static public int staticInt30260;
+    static public int staticInt30261;
+    static public int staticInt30262;
+    static public int staticInt30263;
+    static public int staticInt30264;
+    static public int staticInt30265;
+    static public int staticInt30266;
+    static public int staticInt30267;
+    static public int staticInt30268;
+    static public int staticInt30269;
+    static public int staticInt30270;
+    static public int staticInt30271;
+    static public int staticInt30272;
+    static public int staticInt30273;
+    static public int staticInt30274;
+    static public int staticInt30275;
+    static public int staticInt30276;
+    static public int staticInt30277;
+    static public int staticInt30278;
+    static public int staticInt30279;
+    static public int staticInt30280;
+    static public int staticInt30281;
+    static public int staticInt30282;
+    static public int staticInt30283;
+    static public int staticInt30284;
+    static public int staticInt30285;
+    static public int staticInt30286;
+    static public int staticInt30287;
+    static public int staticInt30288;
+    static public int staticInt30289;
+    static public int staticInt30290;
+    static public int staticInt30291;
+    static public int staticInt30292;
+    static public int staticInt30293;
+    static public int staticInt30294;
+    static public int staticInt30295;
+    static public int staticInt30296;
+    static public int staticInt30297;
+    static public int staticInt30298;
+    static public int staticInt30299;
+    static public int staticInt30300;
+    static public int staticInt30301;
+    static public int staticInt30302;
+    static public int staticInt30303;
+    static public int staticInt30304;
+    static public int staticInt30305;
+    static public int staticInt30306;
+    static public int staticInt30307;
+    static public int staticInt30308;
+    static public int staticInt30309;
+    static public int staticInt30310;
+    static public int staticInt30311;
+    static public int staticInt30312;
+    static public int staticInt30313;
+    static public int staticInt30314;
+    static public int staticInt30315;
+    static public int staticInt30316;
+    static public int staticInt30317;
+    static public int staticInt30318;
+    static public int staticInt30319;
+    static public int staticInt30320;
+    static public int staticInt30321;
+    static public int staticInt30322;
+    static public int staticInt30323;
+    static public int staticInt30324;
+    static public int staticInt30325;
+    static public int staticInt30326;
+    static public int staticInt30327;
+    static public int staticInt30328;
+    static public int staticInt30329;
+    static public int staticInt30330;
+    static public int staticInt30331;
+    static public int staticInt30332;
+    static public int staticInt30333;
+    static public int staticInt30334;
+    static public int staticInt30335;
+    static public int staticInt30336;
+    static public int staticInt30337;
+    static public int staticInt30338;
+    static public int staticInt30339;
+    static public int staticInt30340;
+    static public int staticInt30341;
+    static public int staticInt30342;
+    static public int staticInt30343;
+    static public int staticInt30344;
+    static public int staticInt30345;
+    static public int staticInt30346;
+    static public int staticInt30347;
+    static public int staticInt30348;
+    static public int staticInt30349;
+    static public int staticInt30350;
+    static public int staticInt30351;
+    static public int staticInt30352;
+    static public int staticInt30353;
+    static public int staticInt30354;
+    static public int staticInt30355;
+    static public int staticInt30356;
+    static public int staticInt30357;
+    static public int staticInt30358;
+    static public int staticInt30359;
+    static public int staticInt30360;
+    static public int staticInt30361;
+    static public int staticInt30362;
+    static public int staticInt30363;
+    static public int staticInt30364;
+    static public int staticInt30365;
+    static public int staticInt30366;
+    static public int staticInt30367;
+    static public int staticInt30368;
+    static public int staticInt30369;
+    static public int staticInt30370;
+    static public int staticInt30371;
+    static public int staticInt30372;
+    static public int staticInt30373;
+    static public int staticInt30374;
+    static public int staticInt30375;
+    static public int staticInt30376;
+    static public int staticInt30377;
+    static public int staticInt30378;
+    static public int staticInt30379;
+    static public int staticInt30380;
+    static public int staticInt30381;
+    static public int staticInt30382;
+    static public int staticInt30383;
+    static public int staticInt30384;
+    static public int staticInt30385;
+    static public int staticInt30386;
+    static public int staticInt30387;
+    static public int staticInt30388;
+    static public int staticInt30389;
+    static public int staticInt30390;
+    static public int staticInt30391;
+    static public int staticInt30392;
+    static public int staticInt30393;
+    static public int staticInt30394;
+    static public int staticInt30395;
+    static public int staticInt30396;
+    static public int staticInt30397;
+    static public int staticInt30398;
+    static public int staticInt30399;
+    static public int staticInt30400;
+    static public int staticInt30401;
+    static public int staticInt30402;
+    static public int staticInt30403;
+    static public int staticInt30404;
+    static public int staticInt30405;
+    static public int staticInt30406;
+    static public int staticInt30407;
+    static public int staticInt30408;
+    static public int staticInt30409;
+    static public int staticInt30410;
+    static public int staticInt30411;
+    static public int staticInt30412;
+    static public int staticInt30413;
+    static public int staticInt30414;
+    static public int staticInt30415;
+    static public int staticInt30416;
+    static public int staticInt30417;
+    static public int staticInt30418;
+    static public int staticInt30419;
+    static public int staticInt30420;
+    static public int staticInt30421;
+    static public int staticInt30422;
+    static public int staticInt30423;
+    static public int staticInt30424;
+    static public int staticInt30425;
+    static public int staticInt30426;
+    static public int staticInt30427;
+    static public int staticInt30428;
+    static public int staticInt30429;
+    static public int staticInt30430;
+    static public int staticInt30431;
+    static public int staticInt30432;
+    static public int staticInt30433;
+    static public int staticInt30434;
+    static public int staticInt30435;
+    static public int staticInt30436;
+    static public int staticInt30437;
+    static public int staticInt30438;
+    static public int staticInt30439;
+    static public int staticInt30440;
+    static public int staticInt30441;
+    static public int staticInt30442;
+    static public int staticInt30443;
+    static public int staticInt30444;
+    static public int staticInt30445;
+    static public int staticInt30446;
+    static public int staticInt30447;
+    static public int staticInt30448;
+    static public int staticInt30449;
+    static public int staticInt30450;
+    static public int staticInt30451;
+    static public int staticInt30452;
+    static public int staticInt30453;
+    static public int staticInt30454;
+    static public int staticInt30455;
+    static public int staticInt30456;
+    static public int staticInt30457;
+    static public int staticInt30458;
+    static public int staticInt30459;
+    static public int staticInt30460;
+    static public int staticInt30461;
+    static public int staticInt30462;
+    static public int staticInt30463;
+    static public int staticInt30464;
+    static public int staticInt30465;
+    static public int staticInt30466;
+    static public int staticInt30467;
+    static public int staticInt30468;
+    static public int staticInt30469;
+    static public int staticInt30470;
+    static public int staticInt30471;
+    static public int staticInt30472;
+    static public int staticInt30473;
+    static public int staticInt30474;
+    static public int staticInt30475;
+    static public int staticInt30476;
+    static public int staticInt30477;
+    static public int staticInt30478;
+    static public int staticInt30479;
+    static public int staticInt30480;
+    static public int staticInt30481;
+    static public int staticInt30482;
+    static public int staticInt30483;
+    static public int staticInt30484;
+    static public int staticInt30485;
+    static public int staticInt30486;
+    static public int staticInt30487;
+    static public int staticInt30488;
+    static public int staticInt30489;
+    static public int staticInt30490;
+    static public int staticInt30491;
+    static public int staticInt30492;
+    static public int staticInt30493;
+    static public int staticInt30494;
+    static public int staticInt30495;
+    static public int staticInt30496;
+    static public int staticInt30497;
+    static public int staticInt30498;
+    static public int staticInt30499;
+    static public int staticInt30500;
+    static public int staticInt30501;
+    static public int staticInt30502;
+    static public int staticInt30503;
+    static public int staticInt30504;
+    static public int staticInt30505;
+    static public int staticInt30506;
+    static public int staticInt30507;
+    static public int staticInt30508;
+    static public int staticInt30509;
+    static public int staticInt30510;
+    static public int staticInt30511;
+    static public int staticInt30512;
+    static public int staticInt30513;
+    static public int staticInt30514;
+    static public int staticInt30515;
+    static public int staticInt30516;
+    static public int staticInt30517;
+    static public int staticInt30518;
+    static public int staticInt30519;
+    static public int staticInt30520;
+    static public int staticInt30521;
+    static public int staticInt30522;
+    static public int staticInt30523;
+    static public int staticInt30524;
+    static public int staticInt30525;
+    static public int staticInt30526;
+    static public int staticInt30527;
+    static public int staticInt30528;
+    static public int staticInt30529;
+    static public int staticInt30530;
+    static public int staticInt30531;
+    static public int staticInt30532;
+    static public int staticInt30533;
+    static public int staticInt30534;
+    static public int staticInt30535;
+    static public int staticInt30536;
+    static public int staticInt30537;
+    static public int staticInt30538;
+    static public int staticInt30539;
+    static public int staticInt30540;
+    static public int staticInt30541;
+    static public int staticInt30542;
+    static public int staticInt30543;
+    static public int staticInt30544;
+    static public int staticInt30545;
+    static public int staticInt30546;
+    static public int staticInt30547;
+    static public int staticInt30548;
+    static public int staticInt30549;
+    static public int staticInt30550;
+    static public int staticInt30551;
+    static public int staticInt30552;
+    static public int staticInt30553;
+    static public int staticInt30554;
+    static public int staticInt30555;
+    static public int staticInt30556;
+    static public int staticInt30557;
+    static public int staticInt30558;
+    static public int staticInt30559;
+    static public int staticInt30560;
+    static public int staticInt30561;
+    static public int staticInt30562;
+    static public int staticInt30563;
+    static public int staticInt30564;
+    static public int staticInt30565;
+    static public int staticInt30566;
+    static public int staticInt30567;
+    static public int staticInt30568;
+    static public int staticInt30569;
+    static public int staticInt30570;
+    static public int staticInt30571;
+    static public int staticInt30572;
+    static public int staticInt30573;
+    static public int staticInt30574;
+    static public int staticInt30575;
+    static public int staticInt30576;
+    static public int staticInt30577;
+    static public int staticInt30578;
+    static public int staticInt30579;
+    static public int staticInt30580;
+    static public int staticInt30581;
+    static public int staticInt30582;
+    static public int staticInt30583;
+    static public int staticInt30584;
+    static public int staticInt30585;
+    static public int staticInt30586;
+    static public int staticInt30587;
+    static public int staticInt30588;
+    static public int staticInt30589;
+    static public int staticInt30590;
+    static public int staticInt30591;
+    static public int staticInt30592;
+    static public int staticInt30593;
+    static public int staticInt30594;
+    static public int staticInt30595;
+    static public int staticInt30596;
+    static public int staticInt30597;
+    static public int staticInt30598;
+    static public int staticInt30599;
+    static public int staticInt30600;
+    static public int staticInt30601;
+    static public int staticInt30602;
+    static public int staticInt30603;
+    static public int staticInt30604;
+    static public int staticInt30605;
+    static public int staticInt30606;
+    static public int staticInt30607;
+    static public int staticInt30608;
+    static public int staticInt30609;
+    static public int staticInt30610;
+    static public int staticInt30611;
+    static public int staticInt30612;
+    static public int staticInt30613;
+    static public int staticInt30614;
+    static public int staticInt30615;
+    static public int staticInt30616;
+    static public int staticInt30617;
+    static public int staticInt30618;
+    static public int staticInt30619;
+    static public int staticInt30620;
+    static public int staticInt30621;
+    static public int staticInt30622;
+    static public int staticInt30623;
+    static public int staticInt30624;
+    static public int staticInt30625;
+    static public int staticInt30626;
+    static public int staticInt30627;
+    static public int staticInt30628;
+    static public int staticInt30629;
+    static public int staticInt30630;
+    static public int staticInt30631;
+    static public int staticInt30632;
+    static public int staticInt30633;
+    static public int staticInt30634;
+    static public int staticInt30635;
+    static public int staticInt30636;
+    static public int staticInt30637;
+    static public int staticInt30638;
+    static public int staticInt30639;
+    static public int staticInt30640;
+    static public int staticInt30641;
+    static public int staticInt30642;
+    static public int staticInt30643;
+    static public int staticInt30644;
+    static public int staticInt30645;
+    static public int staticInt30646;
+    static public int staticInt30647;
+    static public int staticInt30648;
+    static public int staticInt30649;
+    static public int staticInt30650;
+    static public int staticInt30651;
+    static public int staticInt30652;
+    static public int staticInt30653;
+    static public int staticInt30654;
+    static public int staticInt30655;
+    static public int staticInt30656;
+    static public int staticInt30657;
+    static public int staticInt30658;
+    static public int staticInt30659;
+    static public int staticInt30660;
+    static public int staticInt30661;
+    static public int staticInt30662;
+    static public int staticInt30663;
+    static public int staticInt30664;
+    static public int staticInt30665;
+    static public int staticInt30666;
+    static public int staticInt30667;
+    static public int staticInt30668;
+    static public int staticInt30669;
+    static public int staticInt30670;
+    static public int staticInt30671;
+    static public int staticInt30672;
+    static public int staticInt30673;
+    static public int staticInt30674;
+    static public int staticInt30675;
+    static public int staticInt30676;
+    static public int staticInt30677;
+    static public int staticInt30678;
+    static public int staticInt30679;
+    static public int staticInt30680;
+    static public int staticInt30681;
+    static public int staticInt30682;
+    static public int staticInt30683;
+    static public int staticInt30684;
+    static public int staticInt30685;
+    static public int staticInt30686;
+    static public int staticInt30687;
+    static public int staticInt30688;
+    static public int staticInt30689;
+    static public int staticInt30690;
+    static public int staticInt30691;
+    static public int staticInt30692;
+    static public int staticInt30693;
+    static public int staticInt30694;
+    static public int staticInt30695;
+    static public int staticInt30696;
+    static public int staticInt30697;
+    static public int staticInt30698;
+    static public int staticInt30699;
+    static public int staticInt30700;
+    static public int staticInt30701;
+    static public int staticInt30702;
+    static public int staticInt30703;
+    static public int staticInt30704;
+    static public int staticInt30705;
+    static public int staticInt30706;
+    static public int staticInt30707;
+    static public int staticInt30708;
+    static public int staticInt30709;
+    static public int staticInt30710;
+    static public int staticInt30711;
+    static public int staticInt30712;
+    static public int staticInt30713;
+    static public int staticInt30714;
+    static public int staticInt30715;
+    static public int staticInt30716;
+    static public int staticInt30717;
+    static public int staticInt30718;
+    static public int staticInt30719;
+    static public int staticInt30720;
+    static public int staticInt30721;
+    static public int staticInt30722;
+    static public int staticInt30723;
+    static public int staticInt30724;
+    static public int staticInt30725;
+    static public int staticInt30726;
+    static public int staticInt30727;
+    static public int staticInt30728;
+    static public int staticInt30729;
+    static public int staticInt30730;
+    static public int staticInt30731;
+    static public int staticInt30732;
+    static public int staticInt30733;
+    static public int staticInt30734;
+    static public int staticInt30735;
+    static public int staticInt30736;
+    static public int staticInt30737;
+    static public int staticInt30738;
+    static public int staticInt30739;
+    static public int staticInt30740;
+    static public int staticInt30741;
+    static public int staticInt30742;
+    static public int staticInt30743;
+    static public int staticInt30744;
+    static public int staticInt30745;
+    static public int staticInt30746;
+    static public int staticInt30747;
+    static public int staticInt30748;
+    static public int staticInt30749;
+    static public int staticInt30750;
+    static public int staticInt30751;
+    static public int staticInt30752;
+    static public int staticInt30753;
+    static public int staticInt30754;
+    static public int staticInt30755;
+    static public int staticInt30756;
+    static public int staticInt30757;
+    static public int staticInt30758;
+    static public int staticInt30759;
+    static public int staticInt30760;
+    static public int staticInt30761;
+    static public int staticInt30762;
+    static public int staticInt30763;
+    static public int staticInt30764;
+    static public int staticInt30765;
+    static public int staticInt30766;
+    static public int staticInt30767;
+    static public int staticInt30768;
+    static public int staticInt30769;
+    static public int staticInt30770;
+    static public int staticInt30771;
+    static public int staticInt30772;
+    static public int staticInt30773;
+    static public int staticInt30774;
+    static public int staticInt30775;
+    static public int staticInt30776;
+    static public int staticInt30777;
+    static public int staticInt30778;
+    static public int staticInt30779;
+    static public int staticInt30780;
+    static public int staticInt30781;
+    static public int staticInt30782;
+    static public int staticInt30783;
+    static public int staticInt30784;
+    static public int staticInt30785;
+    static public int staticInt30786;
+    static public int staticInt30787;
+    static public int staticInt30788;
+    static public int staticInt30789;
+    static public int staticInt30790;
+    static public int staticInt30791;
+    static public int staticInt30792;
+    static public int staticInt30793;
+    static public int staticInt30794;
+    static public int staticInt30795;
+    static public int staticInt30796;
+    static public int staticInt30797;
+    static public int staticInt30798;
+    static public int staticInt30799;
+    static public int staticInt30800;
+    static public int staticInt30801;
+    static public int staticInt30802;
+    static public int staticInt30803;
+    static public int staticInt30804;
+    static public int staticInt30805;
+    static public int staticInt30806;
+    static public int staticInt30807;
+    static public int staticInt30808;
+    static public int staticInt30809;
+    static public int staticInt30810;
+    static public int staticInt30811;
+    static public int staticInt30812;
+    static public int staticInt30813;
+    static public int staticInt30814;
+    static public int staticInt30815;
+    static public int staticInt30816;
+    static public int staticInt30817;
+    static public int staticInt30818;
+    static public int staticInt30819;
+    static public int staticInt30820;
+    static public int staticInt30821;
+    static public int staticInt30822;
+    static public int staticInt30823;
+    static public int staticInt30824;
+    static public int staticInt30825;
+    static public int staticInt30826;
+    static public int staticInt30827;
+    static public int staticInt30828;
+    static public int staticInt30829;
+    static public int staticInt30830;
+    static public int staticInt30831;
+    static public int staticInt30832;
+    static public int staticInt30833;
+    static public int staticInt30834;
+    static public int staticInt30835;
+    static public int staticInt30836;
+    static public int staticInt30837;
+    static public int staticInt30838;
+    static public int staticInt30839;
+    static public int staticInt30840;
+    static public int staticInt30841;
+    static public int staticInt30842;
+    static public int staticInt30843;
+    static public int staticInt30844;
+    static public int staticInt30845;
+    static public int staticInt30846;
+    static public int staticInt30847;
+    static public int staticInt30848;
+    static public int staticInt30849;
+    static public int staticInt30850;
+    static public int staticInt30851;
+    static public int staticInt30852;
+    static public int staticInt30853;
+    static public int staticInt30854;
+    static public int staticInt30855;
+    static public int staticInt30856;
+    static public int staticInt30857;
+    static public int staticInt30858;
+    static public int staticInt30859;
+    static public int staticInt30860;
+    static public int staticInt30861;
+    static public int staticInt30862;
+    static public int staticInt30863;
+    static public int staticInt30864;
+    static public int staticInt30865;
+    static public int staticInt30866;
+    static public int staticInt30867;
+    static public int staticInt30868;
+    static public int staticInt30869;
+    static public int staticInt30870;
+    static public int staticInt30871;
+    static public int staticInt30872;
+    static public int staticInt30873;
+    static public int staticInt30874;
+    static public int staticInt30875;
+    static public int staticInt30876;
+    static public int staticInt30877;
+    static public int staticInt30878;
+    static public int staticInt30879;
+    static public int staticInt30880;
+    static public int staticInt30881;
+    static public int staticInt30882;
+    static public int staticInt30883;
+    static public int staticInt30884;
+    static public int staticInt30885;
+    static public int staticInt30886;
+    static public int staticInt30887;
+    static public int staticInt30888;
+    static public int staticInt30889;
+    static public int staticInt30890;
+    static public int staticInt30891;
+    static public int staticInt30892;
+    static public int staticInt30893;
+    static public int staticInt30894;
+    static public int staticInt30895;
+    static public int staticInt30896;
+    static public int staticInt30897;
+    static public int staticInt30898;
+    static public int staticInt30899;
+    static public int staticInt30900;
+    static public int staticInt30901;
+    static public int staticInt30902;
+    static public int staticInt30903;
+    static public int staticInt30904;
+    static public int staticInt30905;
+    static public int staticInt30906;
+    static public int staticInt30907;
+    static public int staticInt30908;
+    static public int staticInt30909;
+    static public int staticInt30910;
+    static public int staticInt30911;
+    static public int staticInt30912;
+    static public int staticInt30913;
+    static public int staticInt30914;
+    static public int staticInt30915;
+    static public int staticInt30916;
+    static public int staticInt30917;
+    static public int staticInt30918;
+    static public int staticInt30919;
+    static public int staticInt30920;
+    static public int staticInt30921;
+    static public int staticInt30922;
+    static public int staticInt30923;
+    static public int staticInt30924;
+    static public int staticInt30925;
+    static public int staticInt30926;
+    static public int staticInt30927;
+    static public int staticInt30928;
+    static public int staticInt30929;
+    static public int staticInt30930;
+    static public int staticInt30931;
+    static public int staticInt30932;
+    static public int staticInt30933;
+    static public int staticInt30934;
+    static public int staticInt30935;
+    static public int staticInt30936;
+    static public int staticInt30937;
+    static public int staticInt30938;
+    static public int staticInt30939;
+    static public int staticInt30940;
+    static public int staticInt30941;
+    static public int staticInt30942;
+    static public int staticInt30943;
+    static public int staticInt30944;
+    static public int staticInt30945;
+    static public int staticInt30946;
+    static public int staticInt30947;
+    static public int staticInt30948;
+    static public int staticInt30949;
+    static public int staticInt30950;
+    static public int staticInt30951;
+    static public int staticInt30952;
+    static public int staticInt30953;
+    static public int staticInt30954;
+    static public int staticInt30955;
+    static public int staticInt30956;
+    static public int staticInt30957;
+    static public int staticInt30958;
+    static public int staticInt30959;
+    static public int staticInt30960;
+    static public int staticInt30961;
+    static public int staticInt30962;
+    static public int staticInt30963;
+    static public int staticInt30964;
+    static public int staticInt30965;
+    static public int staticInt30966;
+    static public int staticInt30967;
+    static public int staticInt30968;
+    static public int staticInt30969;
+    static public int staticInt30970;
+    static public int staticInt30971;
+    static public int staticInt30972;
+    static public int staticInt30973;
+    static public int staticInt30974;
+    static public int staticInt30975;
+    static public int staticInt30976;
+    static public int staticInt30977;
+    static public int staticInt30978;
+    static public int staticInt30979;
+    static public int staticInt30980;
+    static public int staticInt30981;
+    static public int staticInt30982;
+    static public int staticInt30983;
+    static public int staticInt30984;
+    static public int staticInt30985;
+    static public int staticInt30986;
+    static public int staticInt30987;
+    static public int staticInt30988;
+    static public int staticInt30989;
+    static public int staticInt30990;
+    static public int staticInt30991;
+    static public int staticInt30992;
+    static public int staticInt30993;
+    static public int staticInt30994;
+    static public int staticInt30995;
+    static public int staticInt30996;
+    static public int staticInt30997;
+    static public int staticInt30998;
+    static public int staticInt30999;
+    static public int staticInt31000;
+    static public int staticInt31001;
+    static public int staticInt31002;
+    static public int staticInt31003;
+    static public int staticInt31004;
+    static public int staticInt31005;
+    static public int staticInt31006;
+    static public int staticInt31007;
+    static public int staticInt31008;
+    static public int staticInt31009;
+    static public int staticInt31010;
+    static public int staticInt31011;
+    static public int staticInt31012;
+    static public int staticInt31013;
+    static public int staticInt31014;
+    static public int staticInt31015;
+    static public int staticInt31016;
+    static public int staticInt31017;
+    static public int staticInt31018;
+    static public int staticInt31019;
+    static public int staticInt31020;
+    static public int staticInt31021;
+    static public int staticInt31022;
+    static public int staticInt31023;
+    static public int staticInt31024;
+    static public int staticInt31025;
+    static public int staticInt31026;
+    static public int staticInt31027;
+    static public int staticInt31028;
+    static public int staticInt31029;
+    static public int staticInt31030;
+    static public int staticInt31031;
+    static public int staticInt31032;
+    static public int staticInt31033;
+    static public int staticInt31034;
+    static public int staticInt31035;
+    static public int staticInt31036;
+    static public int staticInt31037;
+    static public int staticInt31038;
+    static public int staticInt31039;
+    static public int staticInt31040;
+    static public int staticInt31041;
+    static public int staticInt31042;
+    static public int staticInt31043;
+    static public int staticInt31044;
+    static public int staticInt31045;
+    static public int staticInt31046;
+    static public int staticInt31047;
+    static public int staticInt31048;
+    static public int staticInt31049;
+    static public int staticInt31050;
+    static public int staticInt31051;
+    static public int staticInt31052;
+    static public int staticInt31053;
+    static public int staticInt31054;
+    static public int staticInt31055;
+    static public int staticInt31056;
+    static public int staticInt31057;
+    static public int staticInt31058;
+    static public int staticInt31059;
+    static public int staticInt31060;
+    static public int staticInt31061;
+    static public int staticInt31062;
+    static public int staticInt31063;
+    static public int staticInt31064;
+    static public int staticInt31065;
+    static public int staticInt31066;
+    static public int staticInt31067;
+    static public int staticInt31068;
+    static public int staticInt31069;
+    static public int staticInt31070;
+    static public int staticInt31071;
+    static public int staticInt31072;
+    static public int staticInt31073;
+    static public int staticInt31074;
+    static public int staticInt31075;
+    static public int staticInt31076;
+    static public int staticInt31077;
+    static public int staticInt31078;
+    static public int staticInt31079;
+    static public int staticInt31080;
+    static public int staticInt31081;
+    static public int staticInt31082;
+    static public int staticInt31083;
+    static public int staticInt31084;
+    static public int staticInt31085;
+    static public int staticInt31086;
+    static public int staticInt31087;
+    static public int staticInt31088;
+    static public int staticInt31089;
+    static public int staticInt31090;
+    static public int staticInt31091;
+    static public int staticInt31092;
+    static public int staticInt31093;
+    static public int staticInt31094;
+    static public int staticInt31095;
+    static public int staticInt31096;
+    static public int staticInt31097;
+    static public int staticInt31098;
+    static public int staticInt31099;
+    static public int staticInt31100;
+    static public int staticInt31101;
+    static public int staticInt31102;
+    static public int staticInt31103;
+    static public int staticInt31104;
+    static public int staticInt31105;
+    static public int staticInt31106;
+    static public int staticInt31107;
+    static public int staticInt31108;
+    static public int staticInt31109;
+    static public int staticInt31110;
+    static public int staticInt31111;
+    static public int staticInt31112;
+    static public int staticInt31113;
+    static public int staticInt31114;
+    static public int staticInt31115;
+    static public int staticInt31116;
+    static public int staticInt31117;
+    static public int staticInt31118;
+    static public int staticInt31119;
+    static public int staticInt31120;
+    static public int staticInt31121;
+    static public int staticInt31122;
+    static public int staticInt31123;
+    static public int staticInt31124;
+    static public int staticInt31125;
+    static public int staticInt31126;
+    static public int staticInt31127;
+    static public int staticInt31128;
+    static public int staticInt31129;
+    static public int staticInt31130;
+    static public int staticInt31131;
+    static public int staticInt31132;
+    static public int staticInt31133;
+    static public int staticInt31134;
+    static public int staticInt31135;
+    static public int staticInt31136;
+    static public int staticInt31137;
+    static public int staticInt31138;
+    static public int staticInt31139;
+    static public int staticInt31140;
+    static public int staticInt31141;
+    static public int staticInt31142;
+    static public int staticInt31143;
+    static public int staticInt31144;
+    static public int staticInt31145;
+    static public int staticInt31146;
+    static public int staticInt31147;
+    static public int staticInt31148;
+    static public int staticInt31149;
+    static public int staticInt31150;
+    static public int staticInt31151;
+    static public int staticInt31152;
+    static public int staticInt31153;
+    static public int staticInt31154;
+    static public int staticInt31155;
+    static public int staticInt31156;
+    static public int staticInt31157;
+    static public int staticInt31158;
+    static public int staticInt31159;
+    static public int staticInt31160;
+    static public int staticInt31161;
+    static public int staticInt31162;
+    static public int staticInt31163;
+    static public int staticInt31164;
+    static public int staticInt31165;
+    static public int staticInt31166;
+    static public int staticInt31167;
+    static public int staticInt31168;
+    static public int staticInt31169;
+    static public int staticInt31170;
+    static public int staticInt31171;
+    static public int staticInt31172;
+    static public int staticInt31173;
+    static public int staticInt31174;
+    static public int staticInt31175;
+    static public int staticInt31176;
+    static public int staticInt31177;
+    static public int staticInt31178;
+    static public int staticInt31179;
+    static public int staticInt31180;
+    static public int staticInt31181;
+    static public int staticInt31182;
+    static public int staticInt31183;
+    static public int staticInt31184;
+    static public int staticInt31185;
+    static public int staticInt31186;
+    static public int staticInt31187;
+    static public int staticInt31188;
+    static public int staticInt31189;
+    static public int staticInt31190;
+    static public int staticInt31191;
+    static public int staticInt31192;
+    static public int staticInt31193;
+    static public int staticInt31194;
+    static public int staticInt31195;
+    static public int staticInt31196;
+    static public int staticInt31197;
+    static public int staticInt31198;
+    static public int staticInt31199;
+    static public int staticInt31200;
+    static public int staticInt31201;
+    static public int staticInt31202;
+    static public int staticInt31203;
+    static public int staticInt31204;
+    static public int staticInt31205;
+    static public int staticInt31206;
+    static public int staticInt31207;
+    static public int staticInt31208;
+    static public int staticInt31209;
+    static public int staticInt31210;
+    static public int staticInt31211;
+    static public int staticInt31212;
+    static public int staticInt31213;
+    static public int staticInt31214;
+    static public int staticInt31215;
+    static public int staticInt31216;
+    static public int staticInt31217;
+    static public int staticInt31218;
+    static public int staticInt31219;
+    static public int staticInt31220;
+    static public int staticInt31221;
+    static public int staticInt31222;
+    static public int staticInt31223;
+    static public int staticInt31224;
+    static public int staticInt31225;
+    static public int staticInt31226;
+    static public int staticInt31227;
+    static public int staticInt31228;
+    static public int staticInt31229;
+    static public int staticInt31230;
+    static public int staticInt31231;
+    static public int staticInt31232;
+    static public int staticInt31233;
+    static public int staticInt31234;
+    static public int staticInt31235;
+    static public int staticInt31236;
+    static public int staticInt31237;
+    static public int staticInt31238;
+    static public int staticInt31239;
+    static public int staticInt31240;
+    static public int staticInt31241;
+    static public int staticInt31242;
+    static public int staticInt31243;
+    static public int staticInt31244;
+    static public int staticInt31245;
+    static public int staticInt31246;
+    static public int staticInt31247;
+    static public int staticInt31248;
+    static public int staticInt31249;
+    static public int staticInt31250;
+    static public int staticInt31251;
+    static public int staticInt31252;
+    static public int staticInt31253;
+    static public int staticInt31254;
+    static public int staticInt31255;
+    static public int staticInt31256;
+    static public int staticInt31257;
+    static public int staticInt31258;
+    static public int staticInt31259;
+    static public int staticInt31260;
+    static public int staticInt31261;
+    static public int staticInt31262;
+    static public int staticInt31263;
+    static public int staticInt31264;
+    static public int staticInt31265;
+    static public int staticInt31266;
+    static public int staticInt31267;
+    static public int staticInt31268;
+    static public int staticInt31269;
+    static public int staticInt31270;
+    static public int staticInt31271;
+    static public int staticInt31272;
+    static public int staticInt31273;
+    static public int staticInt31274;
+    static public int staticInt31275;
+    static public int staticInt31276;
+    static public int staticInt31277;
+    static public int staticInt31278;
+    static public int staticInt31279;
+    static public int staticInt31280;
+    static public int staticInt31281;
+    static public int staticInt31282;
+    static public int staticInt31283;
+    static public int staticInt31284;
+    static public int staticInt31285;
+    static public int staticInt31286;
+    static public int staticInt31287;
+    static public int staticInt31288;
+    static public int staticInt31289;
+    static public int staticInt31290;
+    static public int staticInt31291;
+    static public int staticInt31292;
+    static public int staticInt31293;
+    static public int staticInt31294;
+    static public int staticInt31295;
+    static public int staticInt31296;
+    static public int staticInt31297;
+    static public int staticInt31298;
+    static public int staticInt31299;
+    static public int staticInt31300;
+    static public int staticInt31301;
+    static public int staticInt31302;
+    static public int staticInt31303;
+    static public int staticInt31304;
+    static public int staticInt31305;
+    static public int staticInt31306;
+    static public int staticInt31307;
+    static public int staticInt31308;
+    static public int staticInt31309;
+    static public int staticInt31310;
+    static public int staticInt31311;
+    static public int staticInt31312;
+    static public int staticInt31313;
+    static public int staticInt31314;
+    static public int staticInt31315;
+    static public int staticInt31316;
+    static public int staticInt31317;
+    static public int staticInt31318;
+    static public int staticInt31319;
+    static public int staticInt31320;
+    static public int staticInt31321;
+    static public int staticInt31322;
+    static public int staticInt31323;
+    static public int staticInt31324;
+    static public int staticInt31325;
+    static public int staticInt31326;
+    static public int staticInt31327;
+    static public int staticInt31328;
+    static public int staticInt31329;
+    static public int staticInt31330;
+    static public int staticInt31331;
+    static public int staticInt31332;
+    static public int staticInt31333;
+    static public int staticInt31334;
+    static public int staticInt31335;
+    static public int staticInt31336;
+    static public int staticInt31337;
+    static public int staticInt31338;
+    static public int staticInt31339;
+    static public int staticInt31340;
+    static public int staticInt31341;
+    static public int staticInt31342;
+    static public int staticInt31343;
+    static public int staticInt31344;
+    static public int staticInt31345;
+    static public int staticInt31346;
+    static public int staticInt31347;
+    static public int staticInt31348;
+    static public int staticInt31349;
+    static public int staticInt31350;
+    static public int staticInt31351;
+    static public int staticInt31352;
+    static public int staticInt31353;
+    static public int staticInt31354;
+    static public int staticInt31355;
+    static public int staticInt31356;
+    static public int staticInt31357;
+    static public int staticInt31358;
+    static public int staticInt31359;
+    static public int staticInt31360;
+    static public int staticInt31361;
+    static public int staticInt31362;
+    static public int staticInt31363;
+    static public int staticInt31364;
+    static public int staticInt31365;
+    static public int staticInt31366;
+    static public int staticInt31367;
+    static public int staticInt31368;
+    static public int staticInt31369;
+    static public int staticInt31370;
+    static public int staticInt31371;
+    static public int staticInt31372;
+    static public int staticInt31373;
+    static public int staticInt31374;
+    static public int staticInt31375;
+    static public int staticInt31376;
+    static public int staticInt31377;
+    static public int staticInt31378;
+    static public int staticInt31379;
+    static public int staticInt31380;
+    static public int staticInt31381;
+    static public int staticInt31382;
+    static public int staticInt31383;
+    static public int staticInt31384;
+    static public int staticInt31385;
+    static public int staticInt31386;
+    static public int staticInt31387;
+    static public int staticInt31388;
+    static public int staticInt31389;
+    static public int staticInt31390;
+    static public int staticInt31391;
+    static public int staticInt31392;
+    static public int staticInt31393;
+    static public int staticInt31394;
+    static public int staticInt31395;
+    static public int staticInt31396;
+    static public int staticInt31397;
+    static public int staticInt31398;
+    static public int staticInt31399;
+    static public int staticInt31400;
+    static public int staticInt31401;
+    static public int staticInt31402;
+    static public int staticInt31403;
+    static public int staticInt31404;
+    static public int staticInt31405;
+    static public int staticInt31406;
+    static public int staticInt31407;
+    static public int staticInt31408;
+    static public int staticInt31409;
+    static public int staticInt31410;
+    static public int staticInt31411;
+    static public int staticInt31412;
+    static public int staticInt31413;
+    static public int staticInt31414;
+    static public int staticInt31415;
+    static public int staticInt31416;
+    static public int staticInt31417;
+    static public int staticInt31418;
+    static public int staticInt31419;
+    static public int staticInt31420;
+    static public int staticInt31421;
+    static public int staticInt31422;
+    static public int staticInt31423;
+    static public int staticInt31424;
+    static public int staticInt31425;
+    static public int staticInt31426;
+    static public int staticInt31427;
+    static public int staticInt31428;
+    static public int staticInt31429;
+    static public int staticInt31430;
+    static public int staticInt31431;
+    static public int staticInt31432;
+    static public int staticInt31433;
+    static public int staticInt31434;
+    static public int staticInt31435;
+    static public int staticInt31436;
+    static public int staticInt31437;
+    static public int staticInt31438;
+    static public int staticInt31439;
+    static public int staticInt31440;
+    static public int staticInt31441;
+    static public int staticInt31442;
+    static public int staticInt31443;
+    static public int staticInt31444;
+    static public int staticInt31445;
+    static public int staticInt31446;
+    static public int staticInt31447;
+    static public int staticInt31448;
+    static public int staticInt31449;
+    static public int staticInt31450;
+    static public int staticInt31451;
+    static public int staticInt31452;
+    static public int staticInt31453;
+    static public int staticInt31454;
+    static public int staticInt31455;
+    static public int staticInt31456;
+    static public int staticInt31457;
+    static public int staticInt31458;
+    static public int staticInt31459;
+    static public int staticInt31460;
+    static public int staticInt31461;
+    static public int staticInt31462;
+    static public int staticInt31463;
+    static public int staticInt31464;
+    static public int staticInt31465;
+    static public int staticInt31466;
+    static public int staticInt31467;
+    static public int staticInt31468;
+    static public int staticInt31469;
+    static public int staticInt31470;
+    static public int staticInt31471;
+    static public int staticInt31472;
+    static public int staticInt31473;
+    static public int staticInt31474;
+    static public int staticInt31475;
+    static public int staticInt31476;
+    static public int staticInt31477;
+    static public int staticInt31478;
+    static public int staticInt31479;
+    static public int staticInt31480;
+    static public int staticInt31481;
+    static public int staticInt31482;
+    static public int staticInt31483;
+    static public int staticInt31484;
+    static public int staticInt31485;
+    static public int staticInt31486;
+    static public int staticInt31487;
+    static public int staticInt31488;
+    static public int staticInt31489;
+    static public int staticInt31490;
+    static public int staticInt31491;
+    static public int staticInt31492;
+    static public int staticInt31493;
+    static public int staticInt31494;
+    static public int staticInt31495;
+    static public int staticInt31496;
+    static public int staticInt31497;
+    static public int staticInt31498;
+    static public int staticInt31499;
+    static public int staticInt31500;
+    static public int staticInt31501;
+    static public int staticInt31502;
+    static public int staticInt31503;
+    static public int staticInt31504;
+    static public int staticInt31505;
+    static public int staticInt31506;
+    static public int staticInt31507;
+    static public int staticInt31508;
+    static public int staticInt31509;
+    static public int staticInt31510;
+    static public int staticInt31511;
+    static public int staticInt31512;
+    static public int staticInt31513;
+    static public int staticInt31514;
+    static public int staticInt31515;
+    static public int staticInt31516;
+    static public int staticInt31517;
+    static public int staticInt31518;
+    static public int staticInt31519;
+    static public int staticInt31520;
+    static public int staticInt31521;
+    static public int staticInt31522;
+    static public int staticInt31523;
+    static public int staticInt31524;
+    static public int staticInt31525;
+    static public int staticInt31526;
+    static public int staticInt31527;
+    static public int staticInt31528;
+    static public int staticInt31529;
+    static public int staticInt31530;
+    static public int staticInt31531;
+    static public int staticInt31532;
+    static public int staticInt31533;
+    static public int staticInt31534;
+    static public int staticInt31535;
+    static public int staticInt31536;
+    static public int staticInt31537;
+    static public int staticInt31538;
+    static public int staticInt31539;
+    static public int staticInt31540;
+    static public int staticInt31541;
+    static public int staticInt31542;
+    static public int staticInt31543;
+    static public int staticInt31544;
+    static public int staticInt31545;
+    static public int staticInt31546;
+    static public int staticInt31547;
+    static public int staticInt31548;
+    static public int staticInt31549;
+    static public int staticInt31550;
+    static public int staticInt31551;
+    static public int staticInt31552;
+    static public int staticInt31553;
+    static public int staticInt31554;
+    static public int staticInt31555;
+    static public int staticInt31556;
+    static public int staticInt31557;
+    static public int staticInt31558;
+    static public int staticInt31559;
+    static public int staticInt31560;
+    static public int staticInt31561;
+    static public int staticInt31562;
+    static public int staticInt31563;
+    static public int staticInt31564;
+    static public int staticInt31565;
+    static public int staticInt31566;
+    static public int staticInt31567;
+    static public int staticInt31568;
+    static public int staticInt31569;
+    static public int staticInt31570;
+    static public int staticInt31571;
+    static public int staticInt31572;
+    static public int staticInt31573;
+    static public int staticInt31574;
+    static public int staticInt31575;
+    static public int staticInt31576;
+    static public int staticInt31577;
+    static public int staticInt31578;
+    static public int staticInt31579;
+    static public int staticInt31580;
+    static public int staticInt31581;
+    static public int staticInt31582;
+    static public int staticInt31583;
+    static public int staticInt31584;
+    static public int staticInt31585;
+    static public int staticInt31586;
+    static public int staticInt31587;
+    static public int staticInt31588;
+    static public int staticInt31589;
+    static public int staticInt31590;
+    static public int staticInt31591;
+    static public int staticInt31592;
+    static public int staticInt31593;
+    static public int staticInt31594;
+    static public int staticInt31595;
+    static public int staticInt31596;
+    static public int staticInt31597;
+    static public int staticInt31598;
+    static public int staticInt31599;
+    static public int staticInt31600;
+    static public int staticInt31601;
+    static public int staticInt31602;
+    static public int staticInt31603;
+    static public int staticInt31604;
+    static public int staticInt31605;
+    static public int staticInt31606;
+    static public int staticInt31607;
+    static public int staticInt31608;
+    static public int staticInt31609;
+    static public int staticInt31610;
+    static public int staticInt31611;
+    static public int staticInt31612;
+    static public int staticInt31613;
+    static public int staticInt31614;
+    static public int staticInt31615;
+    static public int staticInt31616;
+    static public int staticInt31617;
+    static public int staticInt31618;
+    static public int staticInt31619;
+    static public int staticInt31620;
+    static public int staticInt31621;
+    static public int staticInt31622;
+    static public int staticInt31623;
+    static public int staticInt31624;
+    static public int staticInt31625;
+    static public int staticInt31626;
+    static public int staticInt31627;
+    static public int staticInt31628;
+    static public int staticInt31629;
+    static public int staticInt31630;
+    static public int staticInt31631;
+    static public int staticInt31632;
+    static public int staticInt31633;
+    static public int staticInt31634;
+    static public int staticInt31635;
+    static public int staticInt31636;
+    static public int staticInt31637;
+    static public int staticInt31638;
+    static public int staticInt31639;
+    static public int staticInt31640;
+    static public int staticInt31641;
+    static public int staticInt31642;
+    static public int staticInt31643;
+    static public int staticInt31644;
+    static public int staticInt31645;
+    static public int staticInt31646;
+    static public int staticInt31647;
+    static public int staticInt31648;
+    static public int staticInt31649;
+    static public int staticInt31650;
+    static public int staticInt31651;
+    static public int staticInt31652;
+    static public int staticInt31653;
+    static public int staticInt31654;
+    static public int staticInt31655;
+    static public int staticInt31656;
+    static public int staticInt31657;
+    static public int staticInt31658;
+    static public int staticInt31659;
+    static public int staticInt31660;
+    static public int staticInt31661;
+    static public int staticInt31662;
+    static public int staticInt31663;
+    static public int staticInt31664;
+    static public int staticInt31665;
+    static public int staticInt31666;
+    static public int staticInt31667;
+    static public int staticInt31668;
+    static public int staticInt31669;
+    static public int staticInt31670;
+    static public int staticInt31671;
+    static public int staticInt31672;
+    static public int staticInt31673;
+    static public int staticInt31674;
+    static public int staticInt31675;
+    static public int staticInt31676;
+    static public int staticInt31677;
+    static public int staticInt31678;
+    static public int staticInt31679;
+    static public int staticInt31680;
+    static public int staticInt31681;
+    static public int staticInt31682;
+    static public int staticInt31683;
+    static public int staticInt31684;
+    static public int staticInt31685;
+    static public int staticInt31686;
+    static public int staticInt31687;
+    static public int staticInt31688;
+    static public int staticInt31689;
+    static public int staticInt31690;
+    static public int staticInt31691;
+    static public int staticInt31692;
+    static public int staticInt31693;
+    static public int staticInt31694;
+    static public int staticInt31695;
+    static public int staticInt31696;
+    static public int staticInt31697;
+    static public int staticInt31698;
+    static public int staticInt31699;
+    static public int staticInt31700;
+    static public int staticInt31701;
+    static public int staticInt31702;
+    static public int staticInt31703;
+    static public int staticInt31704;
+    static public int staticInt31705;
+    static public int staticInt31706;
+    static public int staticInt31707;
+    static public int staticInt31708;
+    static public int staticInt31709;
+    static public int staticInt31710;
+    static public int staticInt31711;
+    static public int staticInt31712;
+    static public int staticInt31713;
+    static public int staticInt31714;
+    static public int staticInt31715;
+    static public int staticInt31716;
+    static public int staticInt31717;
+    static public int staticInt31718;
+    static public int staticInt31719;
+    static public int staticInt31720;
+    static public int staticInt31721;
+    static public int staticInt31722;
+    static public int staticInt31723;
+    static public int staticInt31724;
+    static public int staticInt31725;
+    static public int staticInt31726;
+    static public int staticInt31727;
+    static public int staticInt31728;
+    static public int staticInt31729;
+    static public int staticInt31730;
+    static public int staticInt31731;
+    static public int staticInt31732;
+    static public int staticInt31733;
+    static public int staticInt31734;
+    static public int staticInt31735;
+    static public int staticInt31736;
+    static public int staticInt31737;
+    static public int staticInt31738;
+    static public int staticInt31739;
+    static public int staticInt31740;
+    static public int staticInt31741;
+    static public int staticInt31742;
+    static public int staticInt31743;
+    static public int staticInt31744;
+    static public int staticInt31745;
+    static public int staticInt31746;
+    static public int staticInt31747;
+    static public int staticInt31748;
+    static public int staticInt31749;
+    static public int staticInt31750;
+    static public int staticInt31751;
+    static public int staticInt31752;
+    static public int staticInt31753;
+    static public int staticInt31754;
+    static public int staticInt31755;
+    static public int staticInt31756;
+    static public int staticInt31757;
+    static public int staticInt31758;
+    static public int staticInt31759;
+    static public int staticInt31760;
+    static public int staticInt31761;
+    static public int staticInt31762;
+    static public int staticInt31763;
+    static public int staticInt31764;
+    static public int staticInt31765;
+    static public int staticInt31766;
+    static public int staticInt31767;
+    static public int staticInt31768;
+    static public int staticInt31769;
+    static public int staticInt31770;
+    static public int staticInt31771;
+    static public int staticInt31772;
+    static public int staticInt31773;
+    static public int staticInt31774;
+    static public int staticInt31775;
+    static public int staticInt31776;
+    static public int staticInt31777;
+    static public int staticInt31778;
+    static public int staticInt31779;
+    static public int staticInt31780;
+    static public int staticInt31781;
+    static public int staticInt31782;
+    static public int staticInt31783;
+    static public int staticInt31784;
+    static public int staticInt31785;
+    static public int staticInt31786;
+    static public int staticInt31787;
+    static public int staticInt31788;
+    static public int staticInt31789;
+    static public int staticInt31790;
+    static public int staticInt31791;
+    static public int staticInt31792;
+    static public int staticInt31793;
+    static public int staticInt31794;
+    static public int staticInt31795;
+    static public int staticInt31796;
+    static public int staticInt31797;
+    static public int staticInt31798;
+    static public int staticInt31799;
+    static public int staticInt31800;
+    static public int staticInt31801;
+    static public int staticInt31802;
+    static public int staticInt31803;
+    static public int staticInt31804;
+    static public int staticInt31805;
+    static public int staticInt31806;
+    static public int staticInt31807;
+    static public int staticInt31808;
+    static public int staticInt31809;
+    static public int staticInt31810;
+    static public int staticInt31811;
+    static public int staticInt31812;
+    static public int staticInt31813;
+    static public int staticInt31814;
+    static public int staticInt31815;
+    static public int staticInt31816;
+    static public int staticInt31817;
+    static public int staticInt31818;
+    static public int staticInt31819;
+    static public int staticInt31820;
+    static public int staticInt31821;
+    static public int staticInt31822;
+    static public int staticInt31823;
+    static public int staticInt31824;
+    static public int staticInt31825;
+    static public int staticInt31826;
+    static public int staticInt31827;
+    static public int staticInt31828;
+    static public int staticInt31829;
+    static public int staticInt31830;
+    static public int staticInt31831;
+    static public int staticInt31832;
+    static public int staticInt31833;
+    static public int staticInt31834;
+    static public int staticInt31835;
+    static public int staticInt31836;
+    static public int staticInt31837;
+    static public int staticInt31838;
+    static public int staticInt31839;
+    static public int staticInt31840;
+    static public int staticInt31841;
+    static public int staticInt31842;
+    static public int staticInt31843;
+    static public int staticInt31844;
+    static public int staticInt31845;
+    static public int staticInt31846;
+    static public int staticInt31847;
+    static public int staticInt31848;
+    static public int staticInt31849;
+    static public int staticInt31850;
+    static public int staticInt31851;
+    static public int staticInt31852;
+    static public int staticInt31853;
+    static public int staticInt31854;
+    static public int staticInt31855;
+    static public int staticInt31856;
+    static public int staticInt31857;
+    static public int staticInt31858;
+    static public int staticInt31859;
+    static public int staticInt31860;
+    static public int staticInt31861;
+    static public int staticInt31862;
+    static public int staticInt31863;
+    static public int staticInt31864;
+    static public int staticInt31865;
+    static public int staticInt31866;
+    static public int staticInt31867;
+    static public int staticInt31868;
+    static public int staticInt31869;
+    static public int staticInt31870;
+    static public int staticInt31871;
+    static public int staticInt31872;
+    static public int staticInt31873;
+    static public int staticInt31874;
+    static public int staticInt31875;
+    static public int staticInt31876;
+    static public int staticInt31877;
+    static public int staticInt31878;
+    static public int staticInt31879;
+    static public int staticInt31880;
+    static public int staticInt31881;
+    static public int staticInt31882;
+    static public int staticInt31883;
+    static public int staticInt31884;
+    static public int staticInt31885;
+    static public int staticInt31886;
+    static public int staticInt31887;
+    static public int staticInt31888;
+    static public int staticInt31889;
+    static public int staticInt31890;
+    static public int staticInt31891;
+    static public int staticInt31892;
+    static public int staticInt31893;
+    static public int staticInt31894;
+    static public int staticInt31895;
+    static public int staticInt31896;
+    static public int staticInt31897;
+    static public int staticInt31898;
+    static public int staticInt31899;
+    static public int staticInt31900;
+    static public int staticInt31901;
+    static public int staticInt31902;
+    static public int staticInt31903;
+    static public int staticInt31904;
+    static public int staticInt31905;
+    static public int staticInt31906;
+    static public int staticInt31907;
+    static public int staticInt31908;
+    static public int staticInt31909;
+    static public int staticInt31910;
+    static public int staticInt31911;
+    static public int staticInt31912;
+    static public int staticInt31913;
+    static public int staticInt31914;
+    static public int staticInt31915;
+    static public int staticInt31916;
+    static public int staticInt31917;
+    static public int staticInt31918;
+    static public int staticInt31919;
+    static public int staticInt31920;
+    static public int staticInt31921;
+    static public int staticInt31922;
+    static public int staticInt31923;
+    static public int staticInt31924;
+    static public int staticInt31925;
+    static public int staticInt31926;
+    static public int staticInt31927;
+    static public int staticInt31928;
+    static public int staticInt31929;
+    static public int staticInt31930;
+    static public int staticInt31931;
+    static public int staticInt31932;
+    static public int staticInt31933;
+    static public int staticInt31934;
+    static public int staticInt31935;
+    static public int staticInt31936;
+    static public int staticInt31937;
+    static public int staticInt31938;
+    static public int staticInt31939;
+    static public int staticInt31940;
+    static public int staticInt31941;
+    static public int staticInt31942;
+    static public int staticInt31943;
+    static public int staticInt31944;
+    static public int staticInt31945;
+    static public int staticInt31946;
+    static public int staticInt31947;
+    static public int staticInt31948;
+    static public int staticInt31949;
+    static public int staticInt31950;
+    static public int staticInt31951;
+    static public int staticInt31952;
+    static public int staticInt31953;
+    static public int staticInt31954;
+    static public int staticInt31955;
+    static public int staticInt31956;
+    static public int staticInt31957;
+    static public int staticInt31958;
+    static public int staticInt31959;
+    static public int staticInt31960;
+    static public int staticInt31961;
+    static public int staticInt31962;
+    static public int staticInt31963;
+    static public int staticInt31964;
+    static public int staticInt31965;
+    static public int staticInt31966;
+    static public int staticInt31967;
+    static public int staticInt31968;
+    static public int staticInt31969;
+    static public int staticInt31970;
+    static public int staticInt31971;
+    static public int staticInt31972;
+    static public int staticInt31973;
+    static public int staticInt31974;
+    static public int staticInt31975;
+    static public int staticInt31976;
+    static public int staticInt31977;
+    static public int staticInt31978;
+    static public int staticInt31979;
+    static public int staticInt31980;
+    static public int staticInt31981;
+    static public int staticInt31982;
+    static public int staticInt31983;
+    static public int staticInt31984;
+    static public int staticInt31985;
+    static public int staticInt31986;
+    static public int staticInt31987;
+    static public int staticInt31988;
+    static public int staticInt31989;
+    static public int staticInt31990;
+    static public int staticInt31991;
+    static public int staticInt31992;
+    static public int staticInt31993;
+    static public int staticInt31994;
+    static public int staticInt31995;
+    static public int staticInt31996;
+    static public int staticInt31997;
+    static public int staticInt31998;
+    static public int staticInt31999;
+    static public int staticInt32000;
+    static public int staticInt32001;
+    static public int staticInt32002;
+    static public int staticInt32003;
+    static public int staticInt32004;
+    static public int staticInt32005;
+    static public int staticInt32006;
+    static public int staticInt32007;
+    static public int staticInt32008;
+    static public int staticInt32009;
+    static public int staticInt32010;
+    static public int staticInt32011;
+    static public int staticInt32012;
+    static public int staticInt32013;
+    static public int staticInt32014;
+    static public int staticInt32015;
+    static public int staticInt32016;
+    static public int staticInt32017;
+    static public int staticInt32018;
+    static public int staticInt32019;
+    static public int staticInt32020;
+    static public int staticInt32021;
+    static public int staticInt32022;
+    static public int staticInt32023;
+    static public int staticInt32024;
+    static public int staticInt32025;
+    static public int staticInt32026;
+    static public int staticInt32027;
+    static public int staticInt32028;
+    static public int staticInt32029;
+    static public int staticInt32030;
+    static public int staticInt32031;
+    static public int staticInt32032;
+    static public int staticInt32033;
+    static public int staticInt32034;
+    static public int staticInt32035;
+    static public int staticInt32036;
+    static public int staticInt32037;
+    static public int staticInt32038;
+    static public int staticInt32039;
+    static public int staticInt32040;
+    static public int staticInt32041;
+    static public int staticInt32042;
+    static public int staticInt32043;
+    static public int staticInt32044;
+    static public int staticInt32045;
+    static public int staticInt32046;
+    static public int staticInt32047;
+    static public int staticInt32048;
+    static public int staticInt32049;
+    static public int staticInt32050;
+    static public int staticInt32051;
+    static public int staticInt32052;
+    static public int staticInt32053;
+    static public int staticInt32054;
+    static public int staticInt32055;
+    static public int staticInt32056;
+    static public int staticInt32057;
+    static public int staticInt32058;
+    static public int staticInt32059;
+    static public int staticInt32060;
+    static public int staticInt32061;
+    static public int staticInt32062;
+    static public int staticInt32063;
+    static public int staticInt32064;
+    static public int staticInt32065;
+    static public int staticInt32066;
+    static public int staticInt32067;
+    static public int staticInt32068;
+    static public int staticInt32069;
+    static public int staticInt32070;
+    static public int staticInt32071;
+    static public int staticInt32072;
+    static public int staticInt32073;
+    static public int staticInt32074;
+    static public int staticInt32075;
+    static public int staticInt32076;
+    static public int staticInt32077;
+    static public int staticInt32078;
+    static public int staticInt32079;
+    static public int staticInt32080;
+    static public int staticInt32081;
+    static public int staticInt32082;
+    static public int staticInt32083;
+    static public int staticInt32084;
+    static public int staticInt32085;
+    static public int staticInt32086;
+    static public int staticInt32087;
+    static public int staticInt32088;
+    static public int staticInt32089;
+    static public int staticInt32090;
+    static public int staticInt32091;
+    static public int staticInt32092;
+    static public int staticInt32093;
+    static public int staticInt32094;
+    static public int staticInt32095;
+    static public int staticInt32096;
+    static public int staticInt32097;
+    static public int staticInt32098;
+    static public int staticInt32099;
+    static public int staticInt32100;
+    static public int staticInt32101;
+    static public int staticInt32102;
+    static public int staticInt32103;
+    static public int staticInt32104;
+    static public int staticInt32105;
+    static public int staticInt32106;
+    static public int staticInt32107;
+    static public int staticInt32108;
+    static public int staticInt32109;
+    static public int staticInt32110;
+    static public int staticInt32111;
+    static public int staticInt32112;
+    static public int staticInt32113;
+    static public int staticInt32114;
+    static public int staticInt32115;
+    static public int staticInt32116;
+    static public int staticInt32117;
+    static public int staticInt32118;
+    static public int staticInt32119;
+    static public int staticInt32120;
+    static public int staticInt32121;
+    static public int staticInt32122;
+    static public int staticInt32123;
+    static public int staticInt32124;
+    static public int staticInt32125;
+    static public int staticInt32126;
+    static public int staticInt32127;
+    static public int staticInt32128;
+    static public int staticInt32129;
+    static public int staticInt32130;
+    static public int staticInt32131;
+    static public int staticInt32132;
+    static public int staticInt32133;
+    static public int staticInt32134;
+    static public int staticInt32135;
+    static public int staticInt32136;
+    static public int staticInt32137;
+    static public int staticInt32138;
+    static public int staticInt32139;
+    static public int staticInt32140;
+    static public int staticInt32141;
+    static public int staticInt32142;
+    static public int staticInt32143;
+    static public int staticInt32144;
+    static public int staticInt32145;
+    static public int staticInt32146;
+    static public int staticInt32147;
+    static public int staticInt32148;
+    static public int staticInt32149;
+    static public int staticInt32150;
+    static public int staticInt32151;
+    static public int staticInt32152;
+    static public int staticInt32153;
+    static public int staticInt32154;
+    static public int staticInt32155;
+    static public int staticInt32156;
+    static public int staticInt32157;
+    static public int staticInt32158;
+    static public int staticInt32159;
+    static public int staticInt32160;
+    static public int staticInt32161;
+    static public int staticInt32162;
+    static public int staticInt32163;
+    static public int staticInt32164;
+    static public int staticInt32165;
+    static public int staticInt32166;
+    static public int staticInt32167;
+    static public int staticInt32168;
+    static public int staticInt32169;
+    static public int staticInt32170;
+    static public int staticInt32171;
+    static public int staticInt32172;
+    static public int staticInt32173;
+    static public int staticInt32174;
+    static public int staticInt32175;
+    static public int staticInt32176;
+    static public int staticInt32177;
+    static public int staticInt32178;
+    static public int staticInt32179;
+    static public int staticInt32180;
+    static public int staticInt32181;
+    static public int staticInt32182;
+    static public int staticInt32183;
+    static public int staticInt32184;
+    static public int staticInt32185;
+    static public int staticInt32186;
+    static public int staticInt32187;
+    static public int staticInt32188;
+    static public int staticInt32189;
+    static public int staticInt32190;
+    static public int staticInt32191;
+    static public int staticInt32192;
+    static public int staticInt32193;
+    static public int staticInt32194;
+    static public int staticInt32195;
+    static public int staticInt32196;
+    static public int staticInt32197;
+    static public int staticInt32198;
+    static public int staticInt32199;
+    static public int staticInt32200;
+    static public int staticInt32201;
+    static public int staticInt32202;
+    static public int staticInt32203;
+    static public int staticInt32204;
+    static public int staticInt32205;
+    static public int staticInt32206;
+    static public int staticInt32207;
+    static public int staticInt32208;
+    static public int staticInt32209;
+    static public int staticInt32210;
+    static public int staticInt32211;
+    static public int staticInt32212;
+    static public int staticInt32213;
+    static public int staticInt32214;
+    static public int staticInt32215;
+    static public int staticInt32216;
+    static public int staticInt32217;
+    static public int staticInt32218;
+    static public int staticInt32219;
+    static public int staticInt32220;
+    static public int staticInt32221;
+    static public int staticInt32222;
+    static public int staticInt32223;
+    static public int staticInt32224;
+    static public int staticInt32225;
+    static public int staticInt32226;
+    static public int staticInt32227;
+    static public int staticInt32228;
+    static public int staticInt32229;
+    static public int staticInt32230;
+    static public int staticInt32231;
+    static public int staticInt32232;
+    static public int staticInt32233;
+    static public int staticInt32234;
+    static public int staticInt32235;
+    static public int staticInt32236;
+    static public int staticInt32237;
+    static public int staticInt32238;
+    static public int staticInt32239;
+    static public int staticInt32240;
+    static public int staticInt32241;
+    static public int staticInt32242;
+    static public int staticInt32243;
+    static public int staticInt32244;
+    static public int staticInt32245;
+    static public int staticInt32246;
+    static public int staticInt32247;
+    static public int staticInt32248;
+    static public int staticInt32249;
+    static public int staticInt32250;
+    static public int staticInt32251;
+    static public int staticInt32252;
+    static public int staticInt32253;
+    static public int staticInt32254;
+    static public int staticInt32255;
+    static public int staticInt32256;
+    static public int staticInt32257;
+    static public int staticInt32258;
+    static public int staticInt32259;
+    static public int staticInt32260;
+    static public int staticInt32261;
+    static public int staticInt32262;
+    static public int staticInt32263;
+    static public int staticInt32264;
+    static public int staticInt32265;
+    static public int staticInt32266;
+    static public int staticInt32267;
+    static public int staticInt32268;
+    static public int staticInt32269;
+    static public int staticInt32270;
+    static public int staticInt32271;
+    static public int staticInt32272;
+    static public int staticInt32273;
+    static public int staticInt32274;
+    static public int staticInt32275;
+    static public int staticInt32276;
+    static public int staticInt32277;
+    static public int staticInt32278;
+    static public int staticInt32279;
+    static public int staticInt32280;
+    static public int staticInt32281;
+    static public int staticInt32282;
+    static public int staticInt32283;
+    static public int staticInt32284;
+    static public int staticInt32285;
+    static public int staticInt32286;
+    static public int staticInt32287;
+    static public int staticInt32288;
+    static public int staticInt32289;
+    static public int staticInt32290;
+    static public int staticInt32291;
+    static public int staticInt32292;
+    static public int staticInt32293;
+    static public int staticInt32294;
+    static public int staticInt32295;
+    static public int staticInt32296;
+    static public int staticInt32297;
+    static public int staticInt32298;
+    static public int staticInt32299;
+    static public int staticInt32300;
+    static public int staticInt32301;
+    static public int staticInt32302;
+    static public int staticInt32303;
+    static public int staticInt32304;
+    static public int staticInt32305;
+    static public int staticInt32306;
+    static public int staticInt32307;
+    static public int staticInt32308;
+    static public int staticInt32309;
+    static public int staticInt32310;
+    static public int staticInt32311;
+    static public int staticInt32312;
+    static public int staticInt32313;
+    static public int staticInt32314;
+    static public int staticInt32315;
+    static public int staticInt32316;
+    static public int staticInt32317;
+    static public int staticInt32318;
+    static public int staticInt32319;
+    static public int staticInt32320;
+    static public int staticInt32321;
+    static public int staticInt32322;
+    static public int staticInt32323;
+    static public int staticInt32324;
+    static public int staticInt32325;
+    static public int staticInt32326;
+    static public int staticInt32327;
+    static public int staticInt32328;
+    static public int staticInt32329;
+    static public int staticInt32330;
+    static public int staticInt32331;
+    static public int staticInt32332;
+    static public int staticInt32333;
+    static public int staticInt32334;
+    static public int staticInt32335;
+    static public int staticInt32336;
+    static public int staticInt32337;
+    static public int staticInt32338;
+    static public int staticInt32339;
+    static public int staticInt32340;
+    static public int staticInt32341;
+    static public int staticInt32342;
+    static public int staticInt32343;
+    static public int staticInt32344;
+    static public int staticInt32345;
+    static public int staticInt32346;
+    static public int staticInt32347;
+    static public int staticInt32348;
+    static public int staticInt32349;
+    static public int staticInt32350;
+    static public int staticInt32351;
+    static public int staticInt32352;
+    static public int staticInt32353;
+    static public int staticInt32354;
+    static public int staticInt32355;
+    static public int staticInt32356;
+    static public int staticInt32357;
+    static public int staticInt32358;
+    static public int staticInt32359;
+    static public int staticInt32360;
+    static public int staticInt32361;
+    static public int staticInt32362;
+    static public int staticInt32363;
+    static public int staticInt32364;
+    static public int staticInt32365;
+    static public int staticInt32366;
+    static public int staticInt32367;
+    static public int staticInt32368;
+    static public int staticInt32369;
+    static public int staticInt32370;
+    static public int staticInt32371;
+    static public int staticInt32372;
+    static public int staticInt32373;
+    static public int staticInt32374;
+    static public int staticInt32375;
+    static public int staticInt32376;
+    static public int staticInt32377;
+    static public int staticInt32378;
+    static public int staticInt32379;
+    static public int staticInt32380;
+    static public int staticInt32381;
+    static public int staticInt32382;
+    static public int staticInt32383;
+    static public int staticInt32384;
+    static public int staticInt32385;
+    static public int staticInt32386;
+    static public int staticInt32387;
+    static public int staticInt32388;
+    static public int staticInt32389;
+    static public int staticInt32390;
+    static public int staticInt32391;
+    static public int staticInt32392;
+    static public int staticInt32393;
+    static public int staticInt32394;
+    static public int staticInt32395;
+    static public int staticInt32396;
+    static public int staticInt32397;
+    static public int staticInt32398;
+    static public int staticInt32399;
+    static public int staticInt32400;
+    static public int staticInt32401;
+    static public int staticInt32402;
+    static public int staticInt32403;
+    static public int staticInt32404;
+    static public int staticInt32405;
+    static public int staticInt32406;
+    static public int staticInt32407;
+    static public int staticInt32408;
+    static public int staticInt32409;
+    static public int staticInt32410;
+    static public int staticInt32411;
+    static public int staticInt32412;
+    static public int staticInt32413;
+    static public int staticInt32414;
+    static public int staticInt32415;
+    static public int staticInt32416;
+    static public int staticInt32417;
+    static public int staticInt32418;
+    static public int staticInt32419;
+    static public int staticInt32420;
+    static public int staticInt32421;
+    static public int staticInt32422;
+    static public int staticInt32423;
+    static public int staticInt32424;
+    static public int staticInt32425;
+    static public int staticInt32426;
+    static public int staticInt32427;
+    static public int staticInt32428;
+    static public int staticInt32429;
+    static public int staticInt32430;
+    static public int staticInt32431;
+    static public int staticInt32432;
+    static public int staticInt32433;
+    static public int staticInt32434;
+    static public int staticInt32435;
+    static public int staticInt32436;
+    static public int staticInt32437;
+    static public int staticInt32438;
+    static public int staticInt32439;
+    static public int staticInt32440;
+    static public int staticInt32441;
+    static public int staticInt32442;
+    static public int staticInt32443;
+    static public int staticInt32444;
+    static public int staticInt32445;
+    static public int staticInt32446;
+    static public int staticInt32447;
+    static public int staticInt32448;
+    static public int staticInt32449;
+    static public int staticInt32450;
+    static public int staticInt32451;
+    static public int staticInt32452;
+    static public int staticInt32453;
+    static public int staticInt32454;
+    static public int staticInt32455;
+    static public int staticInt32456;
+    static public int staticInt32457;
+    static public int staticInt32458;
+    static public int staticInt32459;
+    static public int staticInt32460;
+    static public int staticInt32461;
+    static public int staticInt32462;
+    static public int staticInt32463;
+    static public int staticInt32464;
+    static public int staticInt32465;
+    static public int staticInt32466;
+    static public int staticInt32467;
+    static public int staticInt32468;
+    static public int staticInt32469;
+    static public int staticInt32470;
+    static public int staticInt32471;
+    static public int staticInt32472;
+    static public int staticInt32473;
+    static public int staticInt32474;
+    static public int staticInt32475;
+    static public int staticInt32476;
+    static public int staticInt32477;
+    static public int staticInt32478;
+    static public int staticInt32479;
+    static public int staticInt32480;
+    static public int staticInt32481;
+    static public int staticInt32482;
+    static public int staticInt32483;
+    static public int staticInt32484;
+    static public int staticInt32485;
+    static public int staticInt32486;
+    static public int staticInt32487;
+    static public int staticInt32488;
+    static public int staticInt32489;
+    static public int staticInt32490;
+    static public int staticInt32491;
+    static public int staticInt32492;
+    static public int staticInt32493;
+    static public int staticInt32494;
+    static public int staticInt32495;
+    static public int staticInt32496;
+    static public int staticInt32497;
+    static public int staticInt32498;
+    static public int staticInt32499;
+    static public int staticInt32500;
+    static public int staticInt32501;
+    static public int staticInt32502;
+    static public int staticInt32503;
+    static public int staticInt32504;
+    static public int staticInt32505;
+    static public int staticInt32506;
+    static public int staticInt32507;
+    static public int staticInt32508;
+    static public int staticInt32509;
+    static public int staticInt32510;
+    static public int staticInt32511;
+    static public int staticInt32512;
+    static public int staticInt32513;
+    static public int staticInt32514;
+    static public int staticInt32515;
+    static public int staticInt32516;
+    static public int staticInt32517;
+    static public int staticInt32518;
+    static public int staticInt32519;
+    static public int staticInt32520;
+    static public int staticInt32521;
+    static public int staticInt32522;
+    static public int staticInt32523;
+    static public int staticInt32524;
+    static public int staticInt32525;
+    static public int staticInt32526;
+    static public int staticInt32527;
+    static public int staticInt32528;
+    static public int staticInt32529;
+    static public int staticInt32530;
+    static public int staticInt32531;
+    static public int staticInt32532;
+    static public int staticInt32533;
+    static public int staticInt32534;
+    static public int staticInt32535;
+    static public int staticInt32536;
+    static public int staticInt32537;
+    static public int staticInt32538;
+    static public int staticInt32539;
+    static public int staticInt32540;
+    static public int staticInt32541;
+    static public int staticInt32542;
+    static public int staticInt32543;
+    static public int staticInt32544;
+    static public int staticInt32545;
+    static public int staticInt32546;
+    static public int staticInt32547;
+    static public int staticInt32548;
+    static public int staticInt32549;
+    static public int staticInt32550;
+    static public int staticInt32551;
+    static public int staticInt32552;
+    static public int staticInt32553;
+    static public int staticInt32554;
+    static public int staticInt32555;
+    static public int staticInt32556;
+    static public int staticInt32557;
+    static public int staticInt32558;
+    static public int staticInt32559;
+    static public int staticInt32560;
+    static public int staticInt32561;
+    static public int staticInt32562;
+    static public int staticInt32563;
+    static public int staticInt32564;
+    static public int staticInt32565;
+    static public int staticInt32566;
+    static public int staticInt32567;
+    static public int staticInt32568;
+    static public int staticInt32569;
+    static public int staticInt32570;
+    static public int staticInt32571;
+    static public int staticInt32572;
+    static public int staticInt32573;
+    static public int staticInt32574;
+    static public int staticInt32575;
+    static public int staticInt32576;
+    static public int staticInt32577;
+    static public int staticInt32578;
+    static public int staticInt32579;
+    static public int staticInt32580;
+    static public int staticInt32581;
+    static public int staticInt32582;
+    static public int staticInt32583;
+    static public int staticInt32584;
+    static public int staticInt32585;
+    static public int staticInt32586;
+    static public int staticInt32587;
+    static public int staticInt32588;
+    static public int staticInt32589;
+    static public int staticInt32590;
+    static public int staticInt32591;
+    static public int staticInt32592;
+    static public int staticInt32593;
+    static public int staticInt32594;
+    static public int staticInt32595;
+    static public int staticInt32596;
+    static public int staticInt32597;
+    static public int staticInt32598;
+    static public int staticInt32599;
+    static public int staticInt32600;
+    static public int staticInt32601;
+    static public int staticInt32602;
+    static public int staticInt32603;
+    static public int staticInt32604;
+    static public int staticInt32605;
+    static public int staticInt32606;
+    static public int staticInt32607;
+    static public int staticInt32608;
+    static public int staticInt32609;
+    static public int staticInt32610;
+    static public int staticInt32611;
+    static public int staticInt32612;
+    static public int staticInt32613;
+    static public int staticInt32614;
+    static public int staticInt32615;
+    static public int staticInt32616;
+    static public int staticInt32617;
+    static public int staticInt32618;
+    static public int staticInt32619;
+    static public int staticInt32620;
+    static public int staticInt32621;
+    static public int staticInt32622;
+    static public int staticInt32623;
+    static public int staticInt32624;
+    static public int staticInt32625;
+    static public int staticInt32626;
+    static public int staticInt32627;
+    static public int staticInt32628;
+    static public int staticInt32629;
+    static public int staticInt32630;
+    static public int staticInt32631;
+    static public int staticInt32632;
+    static public int staticInt32633;
+    static public int staticInt32634;
+    static public int staticInt32635;
+    static public int staticInt32636;
+    static public int staticInt32637;
+    static public int staticInt32638;
+    static public int staticInt32639;
+    static public int staticInt32640;
+    static public int staticInt32641;
+    static public int staticInt32642;
+    static public int staticInt32643;
+    static public int staticInt32644;
+    static public int staticInt32645;
+    static public int staticInt32646;
+    static public int staticInt32647;
+    static public int staticInt32648;
+    static public int staticInt32649;
+    static public int staticInt32650;
+    static public int staticInt32651;
+    static public int staticInt32652;
+    static public int staticInt32653;
+    static public int staticInt32654;
+    static public int staticInt32655;
+    static public int staticInt32656;
+    static public int staticInt32657;
+    static public int staticInt32658;
+    static public int staticInt32659;
+    static public int staticInt32660;
+    static public int staticInt32661;
+    static public int staticInt32662;
+    static public int staticInt32663;
+    static public int staticInt32664;
+    static public int staticInt32665;
+    static public int staticInt32666;
+    static public int staticInt32667;
+    static public int staticInt32668;
+    static public int staticInt32669;
+    static public int staticInt32670;
+    static public int staticInt32671;
+    static public int staticInt32672;
+    static public int staticInt32673;
+    static public int staticInt32674;
+    static public int staticInt32675;
+    static public int staticInt32676;
+    static public int staticInt32677;
+    static public int staticInt32678;
+    static public int staticInt32679;
+    static public int staticInt32680;
+    static public int staticInt32681;
+    static public int staticInt32682;
+    static public int staticInt32683;
+    static public int staticInt32684;
+    static public int staticInt32685;
+    static public int staticInt32686;
+    static public int staticInt32687;
+    static public int staticInt32688;
+    static public int staticInt32689;
+    static public int staticInt32690;
+    static public int staticInt32691;
+    static public int staticInt32692;
+    static public int staticInt32693;
+    static public int staticInt32694;
+    static public int staticInt32695;
+    static public int staticInt32696;
+    static public int staticInt32697;
+    static public int staticInt32698;
+    static public int staticInt32699;
+    static public int staticInt32700;
+    static public int staticInt32701;
+    static public int staticInt32702;
+    static public int staticInt32703;
+    static public int staticInt32704;
+    static public int staticInt32705;
+    static public int staticInt32706;
+    static public int staticInt32707;
+    static public int staticInt32708;
+    static public int staticInt32709;
+    static public int staticInt32710;
+    static public int staticInt32711;
+    static public int staticInt32712;
+    static public int staticInt32713;
+    static public int staticInt32714;
+    static public int staticInt32715;
+    static public int staticInt32716;
+    static public int staticInt32717;
+    static public int staticInt32718;
+    static public int staticInt32719;
+    static public int staticInt32720;
+    static public int staticInt32721;
+    static public int staticInt32722;
+    static public int staticInt32723;
+    static public int staticInt32724;
+    static public int staticInt32725;
+    static public int staticInt32726;
+    static public int staticInt32727;
+    static public int staticInt32728;
+    static public int staticInt32729;
+    static public int staticInt32730;
+    static public int staticInt32731;
+    static public int staticInt32732;
+    static public int staticInt32733;
+    static public int staticInt32734;
+    static public int staticInt32735;
+    static public int staticInt32736;
+    static public int staticInt32737;
+    static public int staticInt32738;
+    static public int staticInt32739;
+    static public int staticInt32740;
+    static public int staticInt32741;
+    static public int staticInt32742;
+    static public int staticInt32743;
+    static public int staticInt32744;
+    static public int staticInt32745;
+    static public int staticInt32746;
+    static public int staticInt32747;
+    static public int staticInt32748;
+    static public int staticInt32749;
+    static public int staticInt32750;
+    static public int staticInt32751;
+    static public int staticInt32752;
+    static public int staticInt32753;
+    static public int staticInt32754;
+    static public int staticInt32755;
+    static public int staticInt32756;
+    static public int staticInt32757;
+    static public int staticInt32758;
+    static public int staticInt32759;
+    static public int staticInt32760;
+    static public int staticInt32761;
+    static public int staticInt32762;
+    static public int staticInt32763;
+    static public int staticInt32764;
+    static public int staticInt32765;
+    static public int staticInt32766;
+    static public int staticInt32767;
+    static public int staticInt32768;
+    static public int staticInt32769;
+    static public int staticInt32770;
+    static public int staticInt32771;
+    static public int staticInt32772;
+    static public int staticInt32773;
+    static public int staticInt32774;
+    static public int staticInt32775;
+    static public int staticInt32776;
+    static public int staticInt32777;
+    static public int staticInt32778;
+    static public int staticInt32779;
+    static public int staticInt32780;
+    static public int staticInt32781;
+    static public int staticInt32782;
+    static public int staticInt32783;
+    static public int staticInt32784;
+    static public int staticInt32785;
+    static public int staticInt32786;
+    static public int staticInt32787;
+    static public int staticInt32788;
+    static public int staticInt32789;
+    static public int staticInt32790;
+    static public int staticInt32791;
+    static public int staticInt32792;
+    static public int staticInt32793;
+    static public int staticInt32794;
+    static public int staticInt32795;
+    static public int staticInt32796;
+    static public int staticInt32797;
+    static public int staticInt32798;
+    static public int staticInt32799;
+    static public int staticInt32800;
+    static public int staticInt32801;
+    static public int staticInt32802;
+    static public int staticInt32803;
+    static public int staticInt32804;
+    static public int staticInt32805;
+    static public int staticInt32806;
+    static public int staticInt32807;
+    static public int staticInt32808;
+    static public int staticInt32809;
+    static public int staticInt32810;
+    static public int staticInt32811;
+    static public int staticInt32812;
+    static public int staticInt32813;
+    static public int staticInt32814;
+    static public int staticInt32815;
+    static public int staticInt32816;
+    static public int staticInt32817;
+    static public int staticInt32818;
+    static public int staticInt32819;
+    static public int staticInt32820;
+    static public int staticInt32821;
+    static public int staticInt32822;
+    static public int staticInt32823;
+    static public int staticInt32824;
+    static public int staticInt32825;
+    static public int staticInt32826;
+    static public int staticInt32827;
+    static public int staticInt32828;
+    static public int staticInt32829;
+    static public int staticInt32830;
+    static public int staticInt32831;
+    static public int staticInt32832;
+    static public int staticInt32833;
+    static public int staticInt32834;
+    static public int staticInt32835;
+    static public int staticInt32836;
+    static public int staticInt32837;
+    static public int staticInt32838;
+    static public int staticInt32839;
+    static public int staticInt32840;
+    static public int staticInt32841;
+    static public int staticInt32842;
+    static public int staticInt32843;
+    static public int staticInt32844;
+    static public int staticInt32845;
+    static public int staticInt32846;
+    static public int staticInt32847;
+    static public int staticInt32848;
+    static public int staticInt32849;
+    static public int staticInt32850;
+    static public int staticInt32851;
+    static public int staticInt32852;
+    static public int staticInt32853;
+    static public int staticInt32854;
+    static public int staticInt32855;
+    static public int staticInt32856;
+    static public int staticInt32857;
+    static public int staticInt32858;
+    static public int staticInt32859;
+    static public int staticInt32860;
+    static public int staticInt32861;
+    static public int staticInt32862;
+    static public int staticInt32863;
+    static public int staticInt32864;
+    static public int staticInt32865;
+    static public int staticInt32866;
+    static public int staticInt32867;
+    static public int staticInt32868;
+    static public int staticInt32869;
+    static public int staticInt32870;
+    static public int staticInt32871;
+    static public int staticInt32872;
+    static public int staticInt32873;
+    static public int staticInt32874;
+    static public int staticInt32875;
+    static public int staticInt32876;
+    static public int staticInt32877;
+    static public int staticInt32878;
+    static public int staticInt32879;
+    static public int staticInt32880;
+    static public int staticInt32881;
+    static public int staticInt32882;
+    static public int staticInt32883;
+    static public int staticInt32884;
+    static public int staticInt32885;
+    static public int staticInt32886;
+    static public int staticInt32887;
+    static public int staticInt32888;
+    static public int staticInt32889;
+    static public int staticInt32890;
+    static public int staticInt32891;
+    static public int staticInt32892;
+    static public int staticInt32893;
+    static public int staticInt32894;
+    static public int staticInt32895;
+    static public int staticInt32896;
+    static public int staticInt32897;
+    static public int staticInt32898;
+    static public int staticInt32899;
+    static public int staticInt32900;
+    static public int staticInt32901;
+    static public int staticInt32902;
+    static public int staticInt32903;
+    static public int staticInt32904;
+    static public int staticInt32905;
+    static public int staticInt32906;
+    static public int staticInt32907;
+    static public int staticInt32908;
+    static public int staticInt32909;
+    static public int staticInt32910;
+    static public int staticInt32911;
+    static public int staticInt32912;
+    static public int staticInt32913;
+    static public int staticInt32914;
+    static public int staticInt32915;
+    static public int staticInt32916;
+    static public int staticInt32917;
+    static public int staticInt32918;
+    static public int staticInt32919;
+    static public int staticInt32920;
+    static public int staticInt32921;
+    static public int staticInt32922;
+    static public int staticInt32923;
+    static public int staticInt32924;
+    static public int staticInt32925;
+    static public int staticInt32926;
+    static public int staticInt32927;
+    static public int staticInt32928;
+    static public int staticInt32929;
+    static public int staticInt32930;
+    static public int staticInt32931;
+    static public int staticInt32932;
+    static public int staticInt32933;
+    static public int staticInt32934;
+    static public int staticInt32935;
+    static public int staticInt32936;
+    static public int staticInt32937;
+    static public int staticInt32938;
+    static public int staticInt32939;
+    static public int staticInt32940;
+    static public int staticInt32941;
+    static public int staticInt32942;
+    static public int staticInt32943;
+    static public int staticInt32944;
+    static public int staticInt32945;
+    static public int staticInt32946;
+    static public int staticInt32947;
+    static public int staticInt32948;
+    static public int staticInt32949;
+    static public int staticInt32950;
+    static public int staticInt32951;
+    static public int staticInt32952;
+    static public int staticInt32953;
+    static public int staticInt32954;
+    static public int staticInt32955;
+    static public int staticInt32956;
+    static public int staticInt32957;
+    static public int staticInt32958;
+    static public int staticInt32959;
+    static public int staticInt32960;
+    static public int staticInt32961;
+    static public int staticInt32962;
+    static public int staticInt32963;
+    static public int staticInt32964;
+    static public int staticInt32965;
+    static public int staticInt32966;
+    static public int staticInt32967;
+    static public int staticInt32968;
+    static public int staticInt32969;
+    static public int staticInt32970;
+    static public int staticInt32971;
+    static public int staticInt32972;
+    static public int staticInt32973;
+    static public int staticInt32974;
+    static public int staticInt32975;
+    static public int staticInt32976;
+    static public int staticInt32977;
+    static public int staticInt32978;
+    static public int staticInt32979;
+    static public int staticInt32980;
+    static public int staticInt32981;
+    static public int staticInt32982;
+    static public int staticInt32983;
+    static public int staticInt32984;
+    static public int staticInt32985;
+    static public int staticInt32986;
+    static public int staticInt32987;
+    static public int staticInt32988;
+    static public int staticInt32989;
+    static public int staticInt32990;
+    static public int staticInt32991;
+    static public int staticInt32992;
+    static public int staticInt32993;
+    static public int staticInt32994;
+    static public int staticInt32995;
+    static public int staticInt32996;
+    static public int staticInt32997;
+    static public int staticInt32998;
+    static public int staticInt32999;
+    static public int staticInt33000;
+    static public int staticInt33001;
+    static public int staticInt33002;
+    static public int staticInt33003;
+    static public int staticInt33004;
+    static public int staticInt33005;
+    static public int staticInt33006;
+    static public int staticInt33007;
+    static public int staticInt33008;
+    static public int staticInt33009;
+    static public int staticInt33010;
+    static public int staticInt33011;
+    static public int staticInt33012;
+    static public int staticInt33013;
+    static public int staticInt33014;
+    static public int staticInt33015;
+    static public int staticInt33016;
+    static public int staticInt33017;
+    static public int staticInt33018;
+    static public int staticInt33019;
+    static public int staticInt33020;
+    static public int staticInt33021;
+    static public int staticInt33022;
+    static public int staticInt33023;
+    static public int staticInt33024;
+    static public int staticInt33025;
+    static public int staticInt33026;
+    static public int staticInt33027;
+    static public int staticInt33028;
+    static public int staticInt33029;
+    static public int staticInt33030;
+    static public int staticInt33031;
+    static public int staticInt33032;
+    static public int staticInt33033;
+    static public int staticInt33034;
+    static public int staticInt33035;
+    static public int staticInt33036;
+    static public int staticInt33037;
+    static public int staticInt33038;
+    static public int staticInt33039;
+    static public int staticInt33040;
+    static public int staticInt33041;
+    static public int staticInt33042;
+    static public int staticInt33043;
+    static public int staticInt33044;
+    static public int staticInt33045;
+    static public int staticInt33046;
+    static public int staticInt33047;
+    static public int staticInt33048;
+    static public int staticInt33049;
+    static public int staticInt33050;
+    static public int staticInt33051;
+    static public int staticInt33052;
+    static public int staticInt33053;
+    static public int staticInt33054;
+    static public int staticInt33055;
+    static public int staticInt33056;
+    static public int staticInt33057;
+    static public int staticInt33058;
+    static public int staticInt33059;
+    static public int staticInt33060;
+    static public int staticInt33061;
+    static public int staticInt33062;
+    static public int staticInt33063;
+    static public int staticInt33064;
+    static public int staticInt33065;
+    static public int staticInt33066;
+    static public int staticInt33067;
+    static public int staticInt33068;
+    static public int staticInt33069;
+    static public int staticInt33070;
+    static public int staticInt33071;
+    static public int staticInt33072;
+    static public int staticInt33073;
+    static public int staticInt33074;
+    static public int staticInt33075;
+    static public int staticInt33076;
+    static public int staticInt33077;
+    static public int staticInt33078;
+    static public int staticInt33079;
+    static public int staticInt33080;
+    static public int staticInt33081;
+    static public int staticInt33082;
+    static public int staticInt33083;
+    static public int staticInt33084;
+    static public int staticInt33085;
+    static public int staticInt33086;
+    static public int staticInt33087;
+    static public int staticInt33088;
+    static public int staticInt33089;
+    static public int staticInt33090;
+    static public int staticInt33091;
+    static public int staticInt33092;
+    static public int staticInt33093;
+    static public int staticInt33094;
+    static public int staticInt33095;
+    static public int staticInt33096;
+    static public int staticInt33097;
+    static public int staticInt33098;
+    static public int staticInt33099;
+    static public int staticInt33100;
+    static public int staticInt33101;
+    static public int staticInt33102;
+    static public int staticInt33103;
+    static public int staticInt33104;
+    static public int staticInt33105;
+    static public int staticInt33106;
+    static public int staticInt33107;
+    static public int staticInt33108;
+    static public int staticInt33109;
+    static public int staticInt33110;
+    static public int staticInt33111;
+    static public int staticInt33112;
+    static public int staticInt33113;
+    static public int staticInt33114;
+    static public int staticInt33115;
+    static public int staticInt33116;
+    static public int staticInt33117;
+    static public int staticInt33118;
+    static public int staticInt33119;
+    static public int staticInt33120;
+    static public int staticInt33121;
+    static public int staticInt33122;
+    static public int staticInt33123;
+    static public int staticInt33124;
+    static public int staticInt33125;
+    static public int staticInt33126;
+    static public int staticInt33127;
+    static public int staticInt33128;
+    static public int staticInt33129;
+    static public int staticInt33130;
+    static public int staticInt33131;
+    static public int staticInt33132;
+    static public int staticInt33133;
+    static public int staticInt33134;
+    static public int staticInt33135;
+    static public int staticInt33136;
+    static public int staticInt33137;
+    static public int staticInt33138;
+    static public int staticInt33139;
+    static public int staticInt33140;
+    static public int staticInt33141;
+    static public int staticInt33142;
+    static public int staticInt33143;
+    static public int staticInt33144;
+    static public int staticInt33145;
+    static public int staticInt33146;
+    static public int staticInt33147;
+    static public int staticInt33148;
+    static public int staticInt33149;
+    static public int staticInt33150;
+    static public int staticInt33151;
+    static public int staticInt33152;
+    static public int staticInt33153;
+    static public int staticInt33154;
+    static public int staticInt33155;
+    static public int staticInt33156;
+    static public int staticInt33157;
+    static public int staticInt33158;
+    static public int staticInt33159;
+    static public int staticInt33160;
+    static public int staticInt33161;
+    static public int staticInt33162;
+    static public int staticInt33163;
+    static public int staticInt33164;
+    static public int staticInt33165;
+    static public int staticInt33166;
+    static public int staticInt33167;
+    static public int staticInt33168;
+    static public int staticInt33169;
+    static public int staticInt33170;
+    static public int staticInt33171;
+    static public int staticInt33172;
+    static public int staticInt33173;
+    static public int staticInt33174;
+    static public int staticInt33175;
+    static public int staticInt33176;
+    static public int staticInt33177;
+    static public int staticInt33178;
+    static public int staticInt33179;
+    static public int staticInt33180;
+    static public int staticInt33181;
+    static public int staticInt33182;
+    static public int staticInt33183;
+    static public int staticInt33184;
+    static public int staticInt33185;
+    static public int staticInt33186;
+    static public int staticInt33187;
+    static public int staticInt33188;
+    static public int staticInt33189;
+    static public int staticInt33190;
+    static public int staticInt33191;
+    static public int staticInt33192;
+    static public int staticInt33193;
+    static public int staticInt33194;
+    static public int staticInt33195;
+    static public int staticInt33196;
+    static public int staticInt33197;
+    static public int staticInt33198;
+    static public int staticInt33199;
+    static public int staticInt33200;
+    static public int staticInt33201;
+    static public int staticInt33202;
+    static public int staticInt33203;
+    static public int staticInt33204;
+    static public int staticInt33205;
+    static public int staticInt33206;
+    static public int staticInt33207;
+    static public int staticInt33208;
+    static public int staticInt33209;
+    static public int staticInt33210;
+    static public int staticInt33211;
+    static public int staticInt33212;
+    static public int staticInt33213;
+    static public int staticInt33214;
+    static public int staticInt33215;
+    static public int staticInt33216;
+    static public int staticInt33217;
+    static public int staticInt33218;
+    static public int staticInt33219;
+    static public int staticInt33220;
+    static public int staticInt33221;
+    static public int staticInt33222;
+    static public int staticInt33223;
+    static public int staticInt33224;
+    static public int staticInt33225;
+    static public int staticInt33226;
+    static public int staticInt33227;
+    static public int staticInt33228;
+    static public int staticInt33229;
+    static public int staticInt33230;
+    static public int staticInt33231;
+    static public int staticInt33232;
+    static public int staticInt33233;
+    static public int staticInt33234;
+    static public int staticInt33235;
+    static public int staticInt33236;
+    static public int staticInt33237;
+    static public int staticInt33238;
+    static public int staticInt33239;
+    static public int staticInt33240;
+    static public int staticInt33241;
+    static public int staticInt33242;
+    static public int staticInt33243;
+    static public int staticInt33244;
+    static public int staticInt33245;
+    static public int staticInt33246;
+    static public int staticInt33247;
+    static public int staticInt33248;
+    static public int staticInt33249;
+    static public int staticInt33250;
+    static public int staticInt33251;
+    static public int staticInt33252;
+    static public int staticInt33253;
+    static public int staticInt33254;
+    static public int staticInt33255;
+    static public int staticInt33256;
+    static public int staticInt33257;
+    static public int staticInt33258;
+    static public int staticInt33259;
+    static public int staticInt33260;
+    static public int staticInt33261;
+    static public int staticInt33262;
+    static public int staticInt33263;
+    static public int staticInt33264;
+    static public int staticInt33265;
+    static public int staticInt33266;
+    static public int staticInt33267;
+    static public int staticInt33268;
+    static public int staticInt33269;
+    static public int staticInt33270;
+    static public int staticInt33271;
+    static public int staticInt33272;
+    static public int staticInt33273;
+    static public int staticInt33274;
+    static public int staticInt33275;
+    static public int staticInt33276;
+    static public int staticInt33277;
+    static public int staticInt33278;
+    static public int staticInt33279;
+    static public int staticInt33280;
+    static public int staticInt33281;
+    static public int staticInt33282;
+    static public int staticInt33283;
+    static public int staticInt33284;
+    static public int staticInt33285;
+    static public int staticInt33286;
+    static public int staticInt33287;
+    static public int staticInt33288;
+    static public int staticInt33289;
+    static public int staticInt33290;
+    static public int staticInt33291;
+    static public int staticInt33292;
+    static public int staticInt33293;
+    static public int staticInt33294;
+    static public int staticInt33295;
+    static public int staticInt33296;
+    static public int staticInt33297;
+    static public int staticInt33298;
+    static public int staticInt33299;
+    static public int staticInt33300;
+    static public int staticInt33301;
+    static public int staticInt33302;
+    static public int staticInt33303;
+    static public int staticInt33304;
+    static public int staticInt33305;
+    static public int staticInt33306;
+    static public int staticInt33307;
+    static public int staticInt33308;
+    static public int staticInt33309;
+    static public int staticInt33310;
+    static public int staticInt33311;
+    static public int staticInt33312;
+    static public int staticInt33313;
+    static public int staticInt33314;
+    static public int staticInt33315;
+    static public int staticInt33316;
+    static public int staticInt33317;
+    static public int staticInt33318;
+    static public int staticInt33319;
+    static public int staticInt33320;
+    static public int staticInt33321;
+    static public int staticInt33322;
+    static public int staticInt33323;
+    static public int staticInt33324;
+    static public int staticInt33325;
+    static public int staticInt33326;
+    static public int staticInt33327;
+    static public int staticInt33328;
+    static public int staticInt33329;
+    static public int staticInt33330;
+    static public int staticInt33331;
+    static public int staticInt33332;
+    static public int staticInt33333;
+    static public int staticInt33334;
+    static public int staticInt33335;
+    static public int staticInt33336;
+    static public int staticInt33337;
+    static public int staticInt33338;
+    static public int staticInt33339;
+    static public int staticInt33340;
+    static public int staticInt33341;
+    static public int staticInt33342;
+    static public int staticInt33343;
+    static public int staticInt33344;
+    static public int staticInt33345;
+    static public int staticInt33346;
+    static public int staticInt33347;
+    static public int staticInt33348;
+    static public int staticInt33349;
+    static public int staticInt33350;
+    static public int staticInt33351;
+    static public int staticInt33352;
+    static public int staticInt33353;
+    static public int staticInt33354;
+    static public int staticInt33355;
+    static public int staticInt33356;
+    static public int staticInt33357;
+    static public int staticInt33358;
+    static public int staticInt33359;
+    static public int staticInt33360;
+    static public int staticInt33361;
+    static public int staticInt33362;
+    static public int staticInt33363;
+    static public int staticInt33364;
+    static public int staticInt33365;
+    static public int staticInt33366;
+    static public int staticInt33367;
+    static public int staticInt33368;
+    static public int staticInt33369;
+    static public int staticInt33370;
+    static public int staticInt33371;
+    static public int staticInt33372;
+    static public int staticInt33373;
+    static public int staticInt33374;
+    static public int staticInt33375;
+    static public int staticInt33376;
+    static public int staticInt33377;
+    static public int staticInt33378;
+    static public int staticInt33379;
+    static public int staticInt33380;
+    static public int staticInt33381;
+    static public int staticInt33382;
+    static public int staticInt33383;
+    static public int staticInt33384;
+    static public int staticInt33385;
+    static public int staticInt33386;
+    static public int staticInt33387;
+    static public int staticInt33388;
+    static public int staticInt33389;
+    static public int staticInt33390;
+    static public int staticInt33391;
+    static public int staticInt33392;
+    static public int staticInt33393;
+    static public int staticInt33394;
+    static public int staticInt33395;
+    static public int staticInt33396;
+    static public int staticInt33397;
+    static public int staticInt33398;
+    static public int staticInt33399;
+    static public int staticInt33400;
+    static public int staticInt33401;
+    static public int staticInt33402;
+    static public int staticInt33403;
+    static public int staticInt33404;
+    static public int staticInt33405;
+    static public int staticInt33406;
+    static public int staticInt33407;
+    static public int staticInt33408;
+    static public int staticInt33409;
+    static public int staticInt33410;
+    static public int staticInt33411;
+    static public int staticInt33412;
+    static public int staticInt33413;
+    static public int staticInt33414;
+    static public int staticInt33415;
+    static public int staticInt33416;
+    static public int staticInt33417;
+    static public int staticInt33418;
+    static public int staticInt33419;
+    static public int staticInt33420;
+    static public int staticInt33421;
+    static public int staticInt33422;
+    static public int staticInt33423;
+    static public int staticInt33424;
+    static public int staticInt33425;
+    static public int staticInt33426;
+    static public int staticInt33427;
+    static public int staticInt33428;
+    static public int staticInt33429;
+    static public int staticInt33430;
+    static public int staticInt33431;
+    static public int staticInt33432;
+    static public int staticInt33433;
+    static public int staticInt33434;
+    static public int staticInt33435;
+    static public int staticInt33436;
+    static public int staticInt33437;
+    static public int staticInt33438;
+    static public int staticInt33439;
+    static public int staticInt33440;
+    static public int staticInt33441;
+    static public int staticInt33442;
+    static public int staticInt33443;
+    static public int staticInt33444;
+    static public int staticInt33445;
+    static public int staticInt33446;
+    static public int staticInt33447;
+    static public int staticInt33448;
+    static public int staticInt33449;
+    static public int staticInt33450;
+    static public int staticInt33451;
+    static public int staticInt33452;
+    static public int staticInt33453;
+    static public int staticInt33454;
+    static public int staticInt33455;
+    static public int staticInt33456;
+    static public int staticInt33457;
+    static public int staticInt33458;
+    static public int staticInt33459;
+    static public int staticInt33460;
+    static public int staticInt33461;
+    static public int staticInt33462;
+    static public int staticInt33463;
+    static public int staticInt33464;
+    static public int staticInt33465;
+    static public int staticInt33466;
+    static public int staticInt33467;
+    static public int staticInt33468;
+    static public int staticInt33469;
+    static public int staticInt33470;
+    static public int staticInt33471;
+    static public int staticInt33472;
+    static public int staticInt33473;
+    static public int staticInt33474;
+    static public int staticInt33475;
+    static public int staticInt33476;
+    static public int staticInt33477;
+    static public int staticInt33478;
+    static public int staticInt33479;
+    static public int staticInt33480;
+    static public int staticInt33481;
+    static public int staticInt33482;
+    static public int staticInt33483;
+    static public int staticInt33484;
+    static public int staticInt33485;
+    static public int staticInt33486;
+    static public int staticInt33487;
+    static public int staticInt33488;
+    static public int staticInt33489;
+    static public int staticInt33490;
+    static public int staticInt33491;
+    static public int staticInt33492;
+    static public int staticInt33493;
+    static public int staticInt33494;
+    static public int staticInt33495;
+    static public int staticInt33496;
+    static public int staticInt33497;
+    static public int staticInt33498;
+    static public int staticInt33499;
+    static public int staticInt33500;
+    static public int staticInt33501;
+    static public int staticInt33502;
+    static public int staticInt33503;
+    static public int staticInt33504;
+    static public int staticInt33505;
+    static public int staticInt33506;
+    static public int staticInt33507;
+    static public int staticInt33508;
+    static public int staticInt33509;
+    static public int staticInt33510;
+    static public int staticInt33511;
+    static public int staticInt33512;
+    static public int staticInt33513;
+    static public int staticInt33514;
+    static public int staticInt33515;
+    static public int staticInt33516;
+    static public int staticInt33517;
+    static public int staticInt33518;
+    static public int staticInt33519;
+    static public int staticInt33520;
+    static public int staticInt33521;
+    static public int staticInt33522;
+    static public int staticInt33523;
+    static public int staticInt33524;
+    static public int staticInt33525;
+    static public int staticInt33526;
+    static public int staticInt33527;
+    static public int staticInt33528;
+    static public int staticInt33529;
+    static public int staticInt33530;
+    static public int staticInt33531;
+    static public int staticInt33532;
+    static public int staticInt33533;
+    static public int staticInt33534;
+    static public int staticInt33535;
+    static public int staticInt33536;
+    static public int staticInt33537;
+    static public int staticInt33538;
+    static public int staticInt33539;
+    static public int staticInt33540;
+    static public int staticInt33541;
+    static public int staticInt33542;
+    static public int staticInt33543;
+    static public int staticInt33544;
+    static public int staticInt33545;
+    static public int staticInt33546;
+    static public int staticInt33547;
+    static public int staticInt33548;
+    static public int staticInt33549;
+    static public int staticInt33550;
+    static public int staticInt33551;
+    static public int staticInt33552;
+    static public int staticInt33553;
+    static public int staticInt33554;
+    static public int staticInt33555;
+    static public int staticInt33556;
+    static public int staticInt33557;
+    static public int staticInt33558;
+    static public int staticInt33559;
+    static public int staticInt33560;
+    static public int staticInt33561;
+    static public int staticInt33562;
+    static public int staticInt33563;
+    static public int staticInt33564;
+    static public int staticInt33565;
+    static public int staticInt33566;
+    static public int staticInt33567;
+    static public int staticInt33568;
+    static public int staticInt33569;
+    static public int staticInt33570;
+    static public int staticInt33571;
+    static public int staticInt33572;
+    static public int staticInt33573;
+    static public int staticInt33574;
+    static public int staticInt33575;
+    static public int staticInt33576;
+    static public int staticInt33577;
+    static public int staticInt33578;
+    static public int staticInt33579;
+    static public int staticInt33580;
+    static public int staticInt33581;
+    static public int staticInt33582;
+    static public int staticInt33583;
+    static public int staticInt33584;
+    static public int staticInt33585;
+    static public int staticInt33586;
+    static public int staticInt33587;
+    static public int staticInt33588;
+    static public int staticInt33589;
+    static public int staticInt33590;
+    static public int staticInt33591;
+    static public int staticInt33592;
+    static public int staticInt33593;
+    static public int staticInt33594;
+    static public int staticInt33595;
+    static public int staticInt33596;
+    static public int staticInt33597;
+    static public int staticInt33598;
+    static public int staticInt33599;
+    static public int staticInt33600;
+    static public int staticInt33601;
+    static public int staticInt33602;
+    static public int staticInt33603;
+    static public int staticInt33604;
+    static public int staticInt33605;
+    static public int staticInt33606;
+    static public int staticInt33607;
+    static public int staticInt33608;
+    static public int staticInt33609;
+    static public int staticInt33610;
+    static public int staticInt33611;
+    static public int staticInt33612;
+    static public int staticInt33613;
+    static public int staticInt33614;
+    static public int staticInt33615;
+    static public int staticInt33616;
+    static public int staticInt33617;
+    static public int staticInt33618;
+    static public int staticInt33619;
+    static public int staticInt33620;
+    static public int staticInt33621;
+    static public int staticInt33622;
+    static public int staticInt33623;
+    static public int staticInt33624;
+    static public int staticInt33625;
+    static public int staticInt33626;
+    static public int staticInt33627;
+    static public int staticInt33628;
+    static public int staticInt33629;
+    static public int staticInt33630;
+    static public int staticInt33631;
+    static public int staticInt33632;
+    static public int staticInt33633;
+    static public int staticInt33634;
+    static public int staticInt33635;
+    static public int staticInt33636;
+    static public int staticInt33637;
+    static public int staticInt33638;
+    static public int staticInt33639;
+    static public int staticInt33640;
+    static public int staticInt33641;
+    static public int staticInt33642;
+    static public int staticInt33643;
+    static public int staticInt33644;
+    static public int staticInt33645;
+    static public int staticInt33646;
+    static public int staticInt33647;
+    static public int staticInt33648;
+    static public int staticInt33649;
+    static public int staticInt33650;
+    static public int staticInt33651;
+    static public int staticInt33652;
+    static public int staticInt33653;
+    static public int staticInt33654;
+    static public int staticInt33655;
+    static public int staticInt33656;
+    static public int staticInt33657;
+    static public int staticInt33658;
+    static public int staticInt33659;
+    static public int staticInt33660;
+    static public int staticInt33661;
+    static public int staticInt33662;
+    static public int staticInt33663;
+    static public int staticInt33664;
+    static public int staticInt33665;
+    static public int staticInt33666;
+    static public int staticInt33667;
+    static public int staticInt33668;
+    static public int staticInt33669;
+    static public int staticInt33670;
+    static public int staticInt33671;
+    static public int staticInt33672;
+    static public int staticInt33673;
+    static public int staticInt33674;
+    static public int staticInt33675;
+    static public int staticInt33676;
+    static public int staticInt33677;
+    static public int staticInt33678;
+    static public int staticInt33679;
+    static public int staticInt33680;
+    static public int staticInt33681;
+    static public int staticInt33682;
+    static public int staticInt33683;
+    static public int staticInt33684;
+    static public int staticInt33685;
+    static public int staticInt33686;
+    static public int staticInt33687;
+    static public int staticInt33688;
+    static public int staticInt33689;
+    static public int staticInt33690;
+    static public int staticInt33691;
+    static public int staticInt33692;
+    static public int staticInt33693;
+    static public int staticInt33694;
+    static public int staticInt33695;
+    static public int staticInt33696;
+    static public int staticInt33697;
+    static public int staticInt33698;
+    static public int staticInt33699;
+    static public int staticInt33700;
+    static public int staticInt33701;
+    static public int staticInt33702;
+    static public int staticInt33703;
+    static public int staticInt33704;
+    static public int staticInt33705;
+    static public int staticInt33706;
+    static public int staticInt33707;
+    static public int staticInt33708;
+    static public int staticInt33709;
+    static public int staticInt33710;
+    static public int staticInt33711;
+    static public int staticInt33712;
+    static public int staticInt33713;
+    static public int staticInt33714;
+    static public int staticInt33715;
+    static public int staticInt33716;
+    static public int staticInt33717;
+    static public int staticInt33718;
+    static public int staticInt33719;
+    static public int staticInt33720;
+    static public int staticInt33721;
+    static public int staticInt33722;
+    static public int staticInt33723;
+    static public int staticInt33724;
+    static public int staticInt33725;
+    static public int staticInt33726;
+    static public int staticInt33727;
+    static public int staticInt33728;
+    static public int staticInt33729;
+    static public int staticInt33730;
+    static public int staticInt33731;
+    static public int staticInt33732;
+    static public int staticInt33733;
+    static public int staticInt33734;
+    static public int staticInt33735;
+    static public int staticInt33736;
+    static public int staticInt33737;
+    static public int staticInt33738;
+    static public int staticInt33739;
+    static public int staticInt33740;
+    static public int staticInt33741;
+    static public int staticInt33742;
+    static public int staticInt33743;
+    static public int staticInt33744;
+    static public int staticInt33745;
+    static public int staticInt33746;
+    static public int staticInt33747;
+    static public int staticInt33748;
+    static public int staticInt33749;
+    static public int staticInt33750;
+    static public int staticInt33751;
+    static public int staticInt33752;
+    static public int staticInt33753;
+    static public int staticInt33754;
+    static public int staticInt33755;
+    static public int staticInt33756;
+    static public int staticInt33757;
+    static public int staticInt33758;
+    static public int staticInt33759;
+    static public int staticInt33760;
+    static public int staticInt33761;
+    static public int staticInt33762;
+    static public int staticInt33763;
+    static public int staticInt33764;
+    static public int staticInt33765;
+    static public int staticInt33766;
+    static public int staticInt33767;
+    static public int staticInt33768;
+    static public int staticInt33769;
+    static public int staticInt33770;
+    static public int staticInt33771;
+    static public int staticInt33772;
+    static public int staticInt33773;
+    static public int staticInt33774;
+    static public int staticInt33775;
+    static public int staticInt33776;
+    static public int staticInt33777;
+    static public int staticInt33778;
+    static public int staticInt33779;
+    static public int staticInt33780;
+    static public int staticInt33781;
+    static public int staticInt33782;
+    static public int staticInt33783;
+    static public int staticInt33784;
+    static public int staticInt33785;
+    static public int staticInt33786;
+    static public int staticInt33787;
+    static public int staticInt33788;
+    static public int staticInt33789;
+    static public int staticInt33790;
+    static public int staticInt33791;
+    static public int staticInt33792;
+    static public int staticInt33793;
+    static public int staticInt33794;
+    static public int staticInt33795;
+    static public int staticInt33796;
+    static public int staticInt33797;
+    static public int staticInt33798;
+    static public int staticInt33799;
+    static public int staticInt33800;
+    static public int staticInt33801;
+    static public int staticInt33802;
+    static public int staticInt33803;
+    static public int staticInt33804;
+    static public int staticInt33805;
+    static public int staticInt33806;
+    static public int staticInt33807;
+    static public int staticInt33808;
+    static public int staticInt33809;
+    static public int staticInt33810;
+    static public int staticInt33811;
+    static public int staticInt33812;
+    static public int staticInt33813;
+    static public int staticInt33814;
+    static public int staticInt33815;
+    static public int staticInt33816;
+    static public int staticInt33817;
+    static public int staticInt33818;
+    static public int staticInt33819;
+    static public int staticInt33820;
+    static public int staticInt33821;
+    static public int staticInt33822;
+    static public int staticInt33823;
+    static public int staticInt33824;
+    static public int staticInt33825;
+    static public int staticInt33826;
+    static public int staticInt33827;
+    static public int staticInt33828;
+    static public int staticInt33829;
+    static public int staticInt33830;
+    static public int staticInt33831;
+    static public int staticInt33832;
+    static public int staticInt33833;
+    static public int staticInt33834;
+    static public int staticInt33835;
+    static public int staticInt33836;
+    static public int staticInt33837;
+    static public int staticInt33838;
+    static public int staticInt33839;
+    static public int staticInt33840;
+    static public int staticInt33841;
+    static public int staticInt33842;
+    static public int staticInt33843;
+    static public int staticInt33844;
+    static public int staticInt33845;
+    static public int staticInt33846;
+    static public int staticInt33847;
+    static public int staticInt33848;
+    static public int staticInt33849;
+    static public int staticInt33850;
+    static public int staticInt33851;
+    static public int staticInt33852;
+    static public int staticInt33853;
+    static public int staticInt33854;
+    static public int staticInt33855;
+    static public int staticInt33856;
+    static public int staticInt33857;
+    static public int staticInt33858;
+    static public int staticInt33859;
+    static public int staticInt33860;
+    static public int staticInt33861;
+    static public int staticInt33862;
+    static public int staticInt33863;
+    static public int staticInt33864;
+    static public int staticInt33865;
+    static public int staticInt33866;
+    static public int staticInt33867;
+    static public int staticInt33868;
+    static public int staticInt33869;
+    static public int staticInt33870;
+    static public int staticInt33871;
+    static public int staticInt33872;
+    static public int staticInt33873;
+    static public int staticInt33874;
+    static public int staticInt33875;
+    static public int staticInt33876;
+    static public int staticInt33877;
+    static public int staticInt33878;
+    static public int staticInt33879;
+    static public int staticInt33880;
+    static public int staticInt33881;
+    static public int staticInt33882;
+    static public int staticInt33883;
+    static public int staticInt33884;
+    static public int staticInt33885;
+    static public int staticInt33886;
+    static public int staticInt33887;
+    static public int staticInt33888;
+    static public int staticInt33889;
+    static public int staticInt33890;
+    static public int staticInt33891;
+    static public int staticInt33892;
+    static public int staticInt33893;
+    static public int staticInt33894;
+    static public int staticInt33895;
+    static public int staticInt33896;
+    static public int staticInt33897;
+    static public int staticInt33898;
+    static public int staticInt33899;
+    static public int staticInt33900;
+    static public int staticInt33901;
+    static public int staticInt33902;
+    static public int staticInt33903;
+    static public int staticInt33904;
+    static public int staticInt33905;
+    static public int staticInt33906;
+    static public int staticInt33907;
+    static public int staticInt33908;
+    static public int staticInt33909;
+    static public int staticInt33910;
+    static public int staticInt33911;
+    static public int staticInt33912;
+    static public int staticInt33913;
+    static public int staticInt33914;
+    static public int staticInt33915;
+    static public int staticInt33916;
+    static public int staticInt33917;
+    static public int staticInt33918;
+    static public int staticInt33919;
+    static public int staticInt33920;
+    static public int staticInt33921;
+    static public int staticInt33922;
+    static public int staticInt33923;
+    static public int staticInt33924;
+    static public int staticInt33925;
+    static public int staticInt33926;
+    static public int staticInt33927;
+    static public int staticInt33928;
+    static public int staticInt33929;
+    static public int staticInt33930;
+    static public int staticInt33931;
+    static public int staticInt33932;
+    static public int staticInt33933;
+    static public int staticInt33934;
+    static public int staticInt33935;
+    static public int staticInt33936;
+    static public int staticInt33937;
+    static public int staticInt33938;
+    static public int staticInt33939;
+    static public int staticInt33940;
+    static public int staticInt33941;
+    static public int staticInt33942;
+    static public int staticInt33943;
+    static public int staticInt33944;
+    static public int staticInt33945;
+    static public int staticInt33946;
+    static public int staticInt33947;
+    static public int staticInt33948;
+    static public int staticInt33949;
+    static public int staticInt33950;
+    static public int staticInt33951;
+    static public int staticInt33952;
+    static public int staticInt33953;
+    static public int staticInt33954;
+    static public int staticInt33955;
+    static public int staticInt33956;
+    static public int staticInt33957;
+    static public int staticInt33958;
+    static public int staticInt33959;
+    static public int staticInt33960;
+    static public int staticInt33961;
+    static public int staticInt33962;
+    static public int staticInt33963;
+    static public int staticInt33964;
+    static public int staticInt33965;
+    static public int staticInt33966;
+    static public int staticInt33967;
+    static public int staticInt33968;
+    static public int staticInt33969;
+    static public int staticInt33970;
+    static public int staticInt33971;
+    static public int staticInt33972;
+    static public int staticInt33973;
+    static public int staticInt33974;
+    static public int staticInt33975;
+    static public int staticInt33976;
+    static public int staticInt33977;
+    static public int staticInt33978;
+    static public int staticInt33979;
+    static public int staticInt33980;
+    static public int staticInt33981;
+    static public int staticInt33982;
+    static public int staticInt33983;
+    static public int staticInt33984;
+    static public int staticInt33985;
+    static public int staticInt33986;
+    static public int staticInt33987;
+    static public int staticInt33988;
+    static public int staticInt33989;
+    static public int staticInt33990;
+    static public int staticInt33991;
+    static public int staticInt33992;
+    static public int staticInt33993;
+    static public int staticInt33994;
+    static public int staticInt33995;
+    static public int staticInt33996;
+    static public int staticInt33997;
+    static public int staticInt33998;
+    static public int staticInt33999;
+    static public int staticInt34000;
+    static public int staticInt34001;
+    static public int staticInt34002;
+    static public int staticInt34003;
+    static public int staticInt34004;
+    static public int staticInt34005;
+    static public int staticInt34006;
+    static public int staticInt34007;
+    static public int staticInt34008;
+    static public int staticInt34009;
+    static public int staticInt34010;
+    static public int staticInt34011;
+    static public int staticInt34012;
+    static public int staticInt34013;
+    static public int staticInt34014;
+    static public int staticInt34015;
+    static public int staticInt34016;
+    static public int staticInt34017;
+    static public int staticInt34018;
+    static public int staticInt34019;
+    static public int staticInt34020;
+    static public int staticInt34021;
+    static public int staticInt34022;
+    static public int staticInt34023;
+    static public int staticInt34024;
+    static public int staticInt34025;
+    static public int staticInt34026;
+    static public int staticInt34027;
+    static public int staticInt34028;
+    static public int staticInt34029;
+    static public int staticInt34030;
+    static public int staticInt34031;
+    static public int staticInt34032;
+    static public int staticInt34033;
+    static public int staticInt34034;
+    static public int staticInt34035;
+    static public int staticInt34036;
+    static public int staticInt34037;
+    static public int staticInt34038;
+    static public int staticInt34039;
+    static public int staticInt34040;
+    static public int staticInt34041;
+    static public int staticInt34042;
+    static public int staticInt34043;
+    static public int staticInt34044;
+    static public int staticInt34045;
+    static public int staticInt34046;
+    static public int staticInt34047;
+    static public int staticInt34048;
+    static public int staticInt34049;
+    static public int staticInt34050;
+    static public int staticInt34051;
+    static public int staticInt34052;
+    static public int staticInt34053;
+    static public int staticInt34054;
+    static public int staticInt34055;
+    static public int staticInt34056;
+    static public int staticInt34057;
+    static public int staticInt34058;
+    static public int staticInt34059;
+    static public int staticInt34060;
+    static public int staticInt34061;
+    static public int staticInt34062;
+    static public int staticInt34063;
+    static public int staticInt34064;
+    static public int staticInt34065;
+    static public int staticInt34066;
+    static public int staticInt34067;
+    static public int staticInt34068;
+    static public int staticInt34069;
+    static public int staticInt34070;
+    static public int staticInt34071;
+    static public int staticInt34072;
+    static public int staticInt34073;
+    static public int staticInt34074;
+    static public int staticInt34075;
+    static public int staticInt34076;
+    static public int staticInt34077;
+    static public int staticInt34078;
+    static public int staticInt34079;
+    static public int staticInt34080;
+    static public int staticInt34081;
+    static public int staticInt34082;
+    static public int staticInt34083;
+    static public int staticInt34084;
+    static public int staticInt34085;
+    static public int staticInt34086;
+    static public int staticInt34087;
+    static public int staticInt34088;
+    static public int staticInt34089;
+    static public int staticInt34090;
+    static public int staticInt34091;
+    static public int staticInt34092;
+    static public int staticInt34093;
+    static public int staticInt34094;
+    static public int staticInt34095;
+    static public int staticInt34096;
+    static public int staticInt34097;
+    static public int staticInt34098;
+    static public int staticInt34099;
+    static public int staticInt34100;
+    static public int staticInt34101;
+    static public int staticInt34102;
+    static public int staticInt34103;
+    static public int staticInt34104;
+    static public int staticInt34105;
+    static public int staticInt34106;
+    static public int staticInt34107;
+    static public int staticInt34108;
+    static public int staticInt34109;
+    static public int staticInt34110;
+    static public int staticInt34111;
+    static public int staticInt34112;
+    static public int staticInt34113;
+    static public int staticInt34114;
+    static public int staticInt34115;
+    static public int staticInt34116;
+    static public int staticInt34117;
+    static public int staticInt34118;
+    static public int staticInt34119;
+    static public int staticInt34120;
+    static public int staticInt34121;
+    static public int staticInt34122;
+    static public int staticInt34123;
+    static public int staticInt34124;
+    static public int staticInt34125;
+    static public int staticInt34126;
+    static public int staticInt34127;
+    static public int staticInt34128;
+    static public int staticInt34129;
+    static public int staticInt34130;
+    static public int staticInt34131;
+    static public int staticInt34132;
+    static public int staticInt34133;
+    static public int staticInt34134;
+    static public int staticInt34135;
+    static public int staticInt34136;
+    static public int staticInt34137;
+    static public int staticInt34138;
+    static public int staticInt34139;
+    static public int staticInt34140;
+    static public int staticInt34141;
+    static public int staticInt34142;
+    static public int staticInt34143;
+    static public int staticInt34144;
+    static public int staticInt34145;
+    static public int staticInt34146;
+    static public int staticInt34147;
+    static public int staticInt34148;
+    static public int staticInt34149;
+    static public int staticInt34150;
+    static public int staticInt34151;
+    static public int staticInt34152;
+    static public int staticInt34153;
+    static public int staticInt34154;
+    static public int staticInt34155;
+    static public int staticInt34156;
+    static public int staticInt34157;
+    static public int staticInt34158;
+    static public int staticInt34159;
+    static public int staticInt34160;
+    static public int staticInt34161;
+    static public int staticInt34162;
+    static public int staticInt34163;
+    static public int staticInt34164;
+    static public int staticInt34165;
+    static public int staticInt34166;
+    static public int staticInt34167;
+    static public int staticInt34168;
+    static public int staticInt34169;
+    static public int staticInt34170;
+    static public int staticInt34171;
+    static public int staticInt34172;
+    static public int staticInt34173;
+    static public int staticInt34174;
+    static public int staticInt34175;
+    static public int staticInt34176;
+    static public int staticInt34177;
+    static public int staticInt34178;
+    static public int staticInt34179;
+    static public int staticInt34180;
+    static public int staticInt34181;
+    static public int staticInt34182;
+    static public int staticInt34183;
+    static public int staticInt34184;
+    static public int staticInt34185;
+    static public int staticInt34186;
+    static public int staticInt34187;
+    static public int staticInt34188;
+    static public int staticInt34189;
+    static public int staticInt34190;
+    static public int staticInt34191;
+    static public int staticInt34192;
+    static public int staticInt34193;
+    static public int staticInt34194;
+    static public int staticInt34195;
+    static public int staticInt34196;
+    static public int staticInt34197;
+    static public int staticInt34198;
+    static public int staticInt34199;
+    static public int staticInt34200;
+    static public int staticInt34201;
+    static public int staticInt34202;
+    static public int staticInt34203;
+    static public int staticInt34204;
+    static public int staticInt34205;
+    static public int staticInt34206;
+    static public int staticInt34207;
+    static public int staticInt34208;
+    static public int staticInt34209;
+    static public int staticInt34210;
+    static public int staticInt34211;
+    static public int staticInt34212;
+    static public int staticInt34213;
+    static public int staticInt34214;
+    static public int staticInt34215;
+    static public int staticInt34216;
+    static public int staticInt34217;
+    static public int staticInt34218;
+    static public int staticInt34219;
+    static public int staticInt34220;
+    static public int staticInt34221;
+    static public int staticInt34222;
+    static public int staticInt34223;
+    static public int staticInt34224;
+    static public int staticInt34225;
+    static public int staticInt34226;
+    static public int staticInt34227;
+    static public int staticInt34228;
+    static public int staticInt34229;
+    static public int staticInt34230;
+    static public int staticInt34231;
+    static public int staticInt34232;
+    static public int staticInt34233;
+    static public int staticInt34234;
+    static public int staticInt34235;
+    static public int staticInt34236;
+    static public int staticInt34237;
+    static public int staticInt34238;
+    static public int staticInt34239;
+    static public int staticInt34240;
+    static public int staticInt34241;
+    static public int staticInt34242;
+    static public int staticInt34243;
+    static public int staticInt34244;
+    static public int staticInt34245;
+    static public int staticInt34246;
+    static public int staticInt34247;
+    static public int staticInt34248;
+    static public int staticInt34249;
+    static public int staticInt34250;
+    static public int staticInt34251;
+    static public int staticInt34252;
+    static public int staticInt34253;
+    static public int staticInt34254;
+    static public int staticInt34255;
+    static public int staticInt34256;
+    static public int staticInt34257;
+    static public int staticInt34258;
+    static public int staticInt34259;
+    static public int staticInt34260;
+    static public int staticInt34261;
+    static public int staticInt34262;
+    static public int staticInt34263;
+    static public int staticInt34264;
+    static public int staticInt34265;
+    static public int staticInt34266;
+    static public int staticInt34267;
+    static public int staticInt34268;
+    static public int staticInt34269;
+    static public int staticInt34270;
+    static public int staticInt34271;
+    static public int staticInt34272;
+    static public int staticInt34273;
+    static public int staticInt34274;
+    static public int staticInt34275;
+    static public int staticInt34276;
+    static public int staticInt34277;
+    static public int staticInt34278;
+    static public int staticInt34279;
+    static public int staticInt34280;
+    static public int staticInt34281;
+    static public int staticInt34282;
+    static public int staticInt34283;
+    static public int staticInt34284;
+    static public int staticInt34285;
+    static public int staticInt34286;
+    static public int staticInt34287;
+    static public int staticInt34288;
+    static public int staticInt34289;
+    static public int staticInt34290;
+    static public int staticInt34291;
+    static public int staticInt34292;
+    static public int staticInt34293;
+    static public int staticInt34294;
+    static public int staticInt34295;
+    static public int staticInt34296;
+    static public int staticInt34297;
+    static public int staticInt34298;
+    static public int staticInt34299;
+    static public int staticInt34300;
+    static public int staticInt34301;
+    static public int staticInt34302;
+    static public int staticInt34303;
+    static public int staticInt34304;
+    static public int staticInt34305;
+    static public int staticInt34306;
+    static public int staticInt34307;
+    static public int staticInt34308;
+    static public int staticInt34309;
+    static public int staticInt34310;
+    static public int staticInt34311;
+    static public int staticInt34312;
+    static public int staticInt34313;
+    static public int staticInt34314;
+    static public int staticInt34315;
+    static public int staticInt34316;
+    static public int staticInt34317;
+    static public int staticInt34318;
+    static public int staticInt34319;
+    static public int staticInt34320;
+    static public int staticInt34321;
+    static public int staticInt34322;
+    static public int staticInt34323;
+    static public int staticInt34324;
+    static public int staticInt34325;
+    static public int staticInt34326;
+    static public int staticInt34327;
+    static public int staticInt34328;
+    static public int staticInt34329;
+    static public int staticInt34330;
+    static public int staticInt34331;
+    static public int staticInt34332;
+    static public int staticInt34333;
+    static public int staticInt34334;
+    static public int staticInt34335;
+    static public int staticInt34336;
+    static public int staticInt34337;
+    static public int staticInt34338;
+    static public int staticInt34339;
+    static public int staticInt34340;
+    static public int staticInt34341;
+    static public int staticInt34342;
+    static public int staticInt34343;
+    static public int staticInt34344;
+    static public int staticInt34345;
+    static public int staticInt34346;
+    static public int staticInt34347;
+    static public int staticInt34348;
+    static public int staticInt34349;
+    static public int staticInt34350;
+    static public int staticInt34351;
+    static public int staticInt34352;
+    static public int staticInt34353;
+    static public int staticInt34354;
+    static public int staticInt34355;
+    static public int staticInt34356;
+    static public int staticInt34357;
+    static public int staticInt34358;
+    static public int staticInt34359;
+    static public int staticInt34360;
+    static public int staticInt34361;
+    static public int staticInt34362;
+    static public int staticInt34363;
+    static public int staticInt34364;
+    static public int staticInt34365;
+    static public int staticInt34366;
+    static public int staticInt34367;
+    static public int staticInt34368;
+    static public int staticInt34369;
+    static public int staticInt34370;
+    static public int staticInt34371;
+    static public int staticInt34372;
+    static public int staticInt34373;
+    static public int staticInt34374;
+    static public int staticInt34375;
+    static public int staticInt34376;
+    static public int staticInt34377;
+    static public int staticInt34378;
+    static public int staticInt34379;
+    static public int staticInt34380;
+    static public int staticInt34381;
+    static public int staticInt34382;
+    static public int staticInt34383;
+    static public int staticInt34384;
+    static public int staticInt34385;
+    static public int staticInt34386;
+    static public int staticInt34387;
+    static public int staticInt34388;
+    static public int staticInt34389;
+    static public int staticInt34390;
+    static public int staticInt34391;
+    static public int staticInt34392;
+    static public int staticInt34393;
+    static public int staticInt34394;
+    static public int staticInt34395;
+    static public int staticInt34396;
+    static public int staticInt34397;
+    static public int staticInt34398;
+    static public int staticInt34399;
+    static public int staticInt34400;
+    static public int staticInt34401;
+    static public int staticInt34402;
+    static public int staticInt34403;
+    static public int staticInt34404;
+    static public int staticInt34405;
+    static public int staticInt34406;
+    static public int staticInt34407;
+    static public int staticInt34408;
+    static public int staticInt34409;
+    static public int staticInt34410;
+    static public int staticInt34411;
+    static public int staticInt34412;
+    static public int staticInt34413;
+    static public int staticInt34414;
+    static public int staticInt34415;
+    static public int staticInt34416;
+    static public int staticInt34417;
+    static public int staticInt34418;
+    static public int staticInt34419;
+    static public int staticInt34420;
+    static public int staticInt34421;
+    static public int staticInt34422;
+    static public int staticInt34423;
+    static public int staticInt34424;
+    static public int staticInt34425;
+    static public int staticInt34426;
+    static public int staticInt34427;
+    static public int staticInt34428;
+    static public int staticInt34429;
+    static public int staticInt34430;
+    static public int staticInt34431;
+    static public int staticInt34432;
+    static public int staticInt34433;
+    static public int staticInt34434;
+    static public int staticInt34435;
+    static public int staticInt34436;
+    static public int staticInt34437;
+    static public int staticInt34438;
+    static public int staticInt34439;
+    static public int staticInt34440;
+    static public int staticInt34441;
+    static public int staticInt34442;
+    static public int staticInt34443;
+    static public int staticInt34444;
+    static public int staticInt34445;
+    static public int staticInt34446;
+    static public int staticInt34447;
+    static public int staticInt34448;
+    static public int staticInt34449;
+    static public int staticInt34450;
+    static public int staticInt34451;
+    static public int staticInt34452;
+    static public int staticInt34453;
+    static public int staticInt34454;
+    static public int staticInt34455;
+    static public int staticInt34456;
+    static public int staticInt34457;
+    static public int staticInt34458;
+    static public int staticInt34459;
+    static public int staticInt34460;
+    static public int staticInt34461;
+    static public int staticInt34462;
+    static public int staticInt34463;
+    static public int staticInt34464;
+    static public int staticInt34465;
+    static public int staticInt34466;
+    static public int staticInt34467;
+    static public int staticInt34468;
+    static public int staticInt34469;
+    static public int staticInt34470;
+    static public int staticInt34471;
+    static public int staticInt34472;
+    static public int staticInt34473;
+    static public int staticInt34474;
+    static public int staticInt34475;
+    static public int staticInt34476;
+    static public int staticInt34477;
+    static public int staticInt34478;
+    static public int staticInt34479;
+    static public int staticInt34480;
+    static public int staticInt34481;
+    static public int staticInt34482;
+    static public int staticInt34483;
+    static public int staticInt34484;
+    static public int staticInt34485;
+    static public int staticInt34486;
+    static public int staticInt34487;
+    static public int staticInt34488;
+    static public int staticInt34489;
+    static public int staticInt34490;
+    static public int staticInt34491;
+    static public int staticInt34492;
+    static public int staticInt34493;
+    static public int staticInt34494;
+    static public int staticInt34495;
+    static public int staticInt34496;
+    static public int staticInt34497;
+    static public int staticInt34498;
+    static public int staticInt34499;
+    static public int staticInt34500;
+    static public int staticInt34501;
+    static public int staticInt34502;
+    static public int staticInt34503;
+    static public int staticInt34504;
+    static public int staticInt34505;
+    static public int staticInt34506;
+    static public int staticInt34507;
+    static public int staticInt34508;
+    static public int staticInt34509;
+    static public int staticInt34510;
+    static public int staticInt34511;
+    static public int staticInt34512;
+    static public int staticInt34513;
+    static public int staticInt34514;
+    static public int staticInt34515;
+    static public int staticInt34516;
+    static public int staticInt34517;
+    static public int staticInt34518;
+    static public int staticInt34519;
+    static public int staticInt34520;
+    static public int staticInt34521;
+    static public int staticInt34522;
+    static public int staticInt34523;
+    static public int staticInt34524;
+    static public int staticInt34525;
+    static public int staticInt34526;
+    static public int staticInt34527;
+    static public int staticInt34528;
+    static public int staticInt34529;
+    static public int staticInt34530;
+    static public int staticInt34531;
+    static public int staticInt34532;
+    static public int staticInt34533;
+    static public int staticInt34534;
+    static public int staticInt34535;
+    static public int staticInt34536;
+    static public int staticInt34537;
+    static public int staticInt34538;
+    static public int staticInt34539;
+    static public int staticInt34540;
+    static public int staticInt34541;
+    static public int staticInt34542;
+    static public int staticInt34543;
+    static public int staticInt34544;
+    static public int staticInt34545;
+    static public int staticInt34546;
+    static public int staticInt34547;
+    static public int staticInt34548;
+    static public int staticInt34549;
+    static public int staticInt34550;
+    static public int staticInt34551;
+    static public int staticInt34552;
+    static public int staticInt34553;
+    static public int staticInt34554;
+    static public int staticInt34555;
+    static public int staticInt34556;
+    static public int staticInt34557;
+    static public int staticInt34558;
+    static public int staticInt34559;
+    static public int staticInt34560;
+    static public int staticInt34561;
+    static public int staticInt34562;
+    static public int staticInt34563;
+    static public int staticInt34564;
+    static public int staticInt34565;
+    static public int staticInt34566;
+    static public int staticInt34567;
+    static public int staticInt34568;
+    static public int staticInt34569;
+    static public int staticInt34570;
+    static public int staticInt34571;
+    static public int staticInt34572;
+    static public int staticInt34573;
+    static public int staticInt34574;
+    static public int staticInt34575;
+    static public int staticInt34576;
+    static public int staticInt34577;
+    static public int staticInt34578;
+    static public int staticInt34579;
+    static public int staticInt34580;
+    static public int staticInt34581;
+    static public int staticInt34582;
+    static public int staticInt34583;
+    static public int staticInt34584;
+    static public int staticInt34585;
+    static public int staticInt34586;
+    static public int staticInt34587;
+    static public int staticInt34588;
+    static public int staticInt34589;
+    static public int staticInt34590;
+    static public int staticInt34591;
+    static public int staticInt34592;
+    static public int staticInt34593;
+    static public int staticInt34594;
+    static public int staticInt34595;
+    static public int staticInt34596;
+    static public int staticInt34597;
+    static public int staticInt34598;
+    static public int staticInt34599;
+    static public int staticInt34600;
+    static public int staticInt34601;
+    static public int staticInt34602;
+    static public int staticInt34603;
+    static public int staticInt34604;
+    static public int staticInt34605;
+    static public int staticInt34606;
+    static public int staticInt34607;
+    static public int staticInt34608;
+    static public int staticInt34609;
+    static public int staticInt34610;
+    static public int staticInt34611;
+    static public int staticInt34612;
+    static public int staticInt34613;
+    static public int staticInt34614;
+    static public int staticInt34615;
+    static public int staticInt34616;
+    static public int staticInt34617;
+    static public int staticInt34618;
+    static public int staticInt34619;
+    static public int staticInt34620;
+    static public int staticInt34621;
+    static public int staticInt34622;
+    static public int staticInt34623;
+    static public int staticInt34624;
+    static public int staticInt34625;
+    static public int staticInt34626;
+    static public int staticInt34627;
+    static public int staticInt34628;
+    static public int staticInt34629;
+    static public int staticInt34630;
+    static public int staticInt34631;
+    static public int staticInt34632;
+    static public int staticInt34633;
+    static public int staticInt34634;
+    static public int staticInt34635;
+    static public int staticInt34636;
+    static public int staticInt34637;
+    static public int staticInt34638;
+    static public int staticInt34639;
+    static public int staticInt34640;
+    static public int staticInt34641;
+    static public int staticInt34642;
+    static public int staticInt34643;
+    static public int staticInt34644;
+    static public int staticInt34645;
+    static public int staticInt34646;
+    static public int staticInt34647;
+    static public int staticInt34648;
+    static public int staticInt34649;
+    static public int staticInt34650;
+    static public int staticInt34651;
+    static public int staticInt34652;
+    static public int staticInt34653;
+    static public int staticInt34654;
+    static public int staticInt34655;
+    static public int staticInt34656;
+    static public int staticInt34657;
+    static public int staticInt34658;
+    static public int staticInt34659;
+    static public int staticInt34660;
+    static public int staticInt34661;
+    static public int staticInt34662;
+    static public int staticInt34663;
+    static public int staticInt34664;
+    static public int staticInt34665;
+    static public int staticInt34666;
+    static public int staticInt34667;
+    static public int staticInt34668;
+    static public int staticInt34669;
+    static public int staticInt34670;
+    static public int staticInt34671;
+    static public int staticInt34672;
+    static public int staticInt34673;
+    static public int staticInt34674;
+    static public int staticInt34675;
+    static public int staticInt34676;
+    static public int staticInt34677;
+    static public int staticInt34678;
+    static public int staticInt34679;
+    static public int staticInt34680;
+    static public int staticInt34681;
+    static public int staticInt34682;
+    static public int staticInt34683;
+    static public int staticInt34684;
+    static public int staticInt34685;
+    static public int staticInt34686;
+    static public int staticInt34687;
+    static public int staticInt34688;
+    static public int staticInt34689;
+    static public int staticInt34690;
+    static public int staticInt34691;
+    static public int staticInt34692;
+    static public int staticInt34693;
+    static public int staticInt34694;
+    static public int staticInt34695;
+    static public int staticInt34696;
+    static public int staticInt34697;
+    static public int staticInt34698;
+    static public int staticInt34699;
+    static public int staticInt34700;
+    static public int staticInt34701;
+    static public int staticInt34702;
+    static public int staticInt34703;
+    static public int staticInt34704;
+    static public int staticInt34705;
+    static public int staticInt34706;
+    static public int staticInt34707;
+    static public int staticInt34708;
+    static public int staticInt34709;
+    static public int staticInt34710;
+    static public int staticInt34711;
+    static public int staticInt34712;
+    static public int staticInt34713;
+    static public int staticInt34714;
+    static public int staticInt34715;
+    static public int staticInt34716;
+    static public int staticInt34717;
+    static public int staticInt34718;
+    static public int staticInt34719;
+    static public int staticInt34720;
+    static public int staticInt34721;
+    static public int staticInt34722;
+    static public int staticInt34723;
+    static public int staticInt34724;
+    static public int staticInt34725;
+    static public int staticInt34726;
+    static public int staticInt34727;
+    static public int staticInt34728;
+    static public int staticInt34729;
+    static public int staticInt34730;
+    static public int staticInt34731;
+    static public int staticInt34732;
+    static public int staticInt34733;
+    static public int staticInt34734;
+    static public int staticInt34735;
+    static public int staticInt34736;
+    static public int staticInt34737;
+    static public int staticInt34738;
+    static public int staticInt34739;
+    static public int staticInt34740;
+    static public int staticInt34741;
+    static public int staticInt34742;
+    static public int staticInt34743;
+    static public int staticInt34744;
+    static public int staticInt34745;
+    static public int staticInt34746;
+    static public int staticInt34747;
+    static public int staticInt34748;
+    static public int staticInt34749;
+    static public int staticInt34750;
+    static public int staticInt34751;
+    static public int staticInt34752;
+    static public int staticInt34753;
+    static public int staticInt34754;
+    static public int staticInt34755;
+    static public int staticInt34756;
+    static public int staticInt34757;
+    static public int staticInt34758;
+    static public int staticInt34759;
+    static public int staticInt34760;
+    static public int staticInt34761;
+    static public int staticInt34762;
+    static public int staticInt34763;
+    static public int staticInt34764;
+    static public int staticInt34765;
+    static public int staticInt34766;
+    static public int staticInt34767;
+    static public int staticInt34768;
+    static public int staticInt34769;
+    static public int staticInt34770;
+    static public int staticInt34771;
+    static public int staticInt34772;
+    static public int staticInt34773;
+    static public int staticInt34774;
+    static public int staticInt34775;
+    static public int staticInt34776;
+    static public int staticInt34777;
+    static public int staticInt34778;
+    static public int staticInt34779;
+    static public int staticInt34780;
+    static public int staticInt34781;
+    static public int staticInt34782;
+    static public int staticInt34783;
+    static public int staticInt34784;
+    static public int staticInt34785;
+    static public int staticInt34786;
+    static public int staticInt34787;
+    static public int staticInt34788;
+    static public int staticInt34789;
+    static public int staticInt34790;
+    static public int staticInt34791;
+    static public int staticInt34792;
+    static public int staticInt34793;
+    static public int staticInt34794;
+    static public int staticInt34795;
+    static public int staticInt34796;
+    static public int staticInt34797;
+    static public int staticInt34798;
+    static public int staticInt34799;
+    static public int staticInt34800;
+    static public int staticInt34801;
+    static public int staticInt34802;
+    static public int staticInt34803;
+    static public int staticInt34804;
+    static public int staticInt34805;
+    static public int staticInt34806;
+    static public int staticInt34807;
+    static public int staticInt34808;
+    static public int staticInt34809;
+    static public int staticInt34810;
+    static public int staticInt34811;
+    static public int staticInt34812;
+    static public int staticInt34813;
+    static public int staticInt34814;
+    static public int staticInt34815;
+    static public int staticInt34816;
+    static public int staticInt34817;
+    static public int staticInt34818;
+    static public int staticInt34819;
+    static public int staticInt34820;
+    static public int staticInt34821;
+    static public int staticInt34822;
+    static public int staticInt34823;
+    static public int staticInt34824;
+    static public int staticInt34825;
+    static public int staticInt34826;
+    static public int staticInt34827;
+    static public int staticInt34828;
+    static public int staticInt34829;
+    static public int staticInt34830;
+    static public int staticInt34831;
+    static public int staticInt34832;
+    static public int staticInt34833;
+    static public int staticInt34834;
+    static public int staticInt34835;
+    static public int staticInt34836;
+    static public int staticInt34837;
+    static public int staticInt34838;
+    static public int staticInt34839;
+    static public int staticInt34840;
+    static public int staticInt34841;
+    static public int staticInt34842;
+    static public int staticInt34843;
+    static public int staticInt34844;
+    static public int staticInt34845;
+    static public int staticInt34846;
+    static public int staticInt34847;
+    static public int staticInt34848;
+    static public int staticInt34849;
+    static public int staticInt34850;
+    static public int staticInt34851;
+    static public int staticInt34852;
+    static public int staticInt34853;
+    static public int staticInt34854;
+    static public int staticInt34855;
+    static public int staticInt34856;
+    static public int staticInt34857;
+    static public int staticInt34858;
+    static public int staticInt34859;
+    static public int staticInt34860;
+    static public int staticInt34861;
+    static public int staticInt34862;
+    static public int staticInt34863;
+    static public int staticInt34864;
+    static public int staticInt34865;
+    static public int staticInt34866;
+    static public int staticInt34867;
+    static public int staticInt34868;
+    static public int staticInt34869;
+    static public int staticInt34870;
+    static public int staticInt34871;
+    static public int staticInt34872;
+    static public int staticInt34873;
+    static public int staticInt34874;
+    static public int staticInt34875;
+    static public int staticInt34876;
+    static public int staticInt34877;
+    static public int staticInt34878;
+    static public int staticInt34879;
+    static public int staticInt34880;
+    static public int staticInt34881;
+    static public int staticInt34882;
+    static public int staticInt34883;
+    static public int staticInt34884;
+    static public int staticInt34885;
+    static public int staticInt34886;
+    static public int staticInt34887;
+    static public int staticInt34888;
+    static public int staticInt34889;
+    static public int staticInt34890;
+    static public int staticInt34891;
+    static public int staticInt34892;
+    static public int staticInt34893;
+    static public int staticInt34894;
+    static public int staticInt34895;
+    static public int staticInt34896;
+    static public int staticInt34897;
+    static public int staticInt34898;
+    static public int staticInt34899;
+    static public int staticInt34900;
+    static public int staticInt34901;
+    static public int staticInt34902;
+    static public int staticInt34903;
+    static public int staticInt34904;
+    static public int staticInt34905;
+    static public int staticInt34906;
+    static public int staticInt34907;
+    static public int staticInt34908;
+    static public int staticInt34909;
+    static public int staticInt34910;
+    static public int staticInt34911;
+    static public int staticInt34912;
+    static public int staticInt34913;
+    static public int staticInt34914;
+    static public int staticInt34915;
+    static public int staticInt34916;
+    static public int staticInt34917;
+    static public int staticInt34918;
+    static public int staticInt34919;
+    static public int staticInt34920;
+    static public int staticInt34921;
+    static public int staticInt34922;
+    static public int staticInt34923;
+    static public int staticInt34924;
+    static public int staticInt34925;
+    static public int staticInt34926;
+    static public int staticInt34927;
+    static public int staticInt34928;
+    static public int staticInt34929;
+    static public int staticInt34930;
+    static public int staticInt34931;
+    static public int staticInt34932;
+    static public int staticInt34933;
+    static public int staticInt34934;
+    static public int staticInt34935;
+    static public int staticInt34936;
+    static public int staticInt34937;
+    static public int staticInt34938;
+    static public int staticInt34939;
+    static public int staticInt34940;
+    static public int staticInt34941;
+    static public int staticInt34942;
+    static public int staticInt34943;
+    static public int staticInt34944;
+    static public int staticInt34945;
+    static public int staticInt34946;
+    static public int staticInt34947;
+    static public int staticInt34948;
+    static public int staticInt34949;
+    static public int staticInt34950;
+    static public int staticInt34951;
+    static public int staticInt34952;
+    static public int staticInt34953;
+    static public int staticInt34954;
+    static public int staticInt34955;
+    static public int staticInt34956;
+    static public int staticInt34957;
+    static public int staticInt34958;
+    static public int staticInt34959;
+    static public int staticInt34960;
+    static public int staticInt34961;
+    static public int staticInt34962;
+    static public int staticInt34963;
+    static public int staticInt34964;
+    static public int staticInt34965;
+    static public int staticInt34966;
+    static public int staticInt34967;
+    static public int staticInt34968;
+    static public int staticInt34969;
+    static public int staticInt34970;
+    static public int staticInt34971;
+    static public int staticInt34972;
+    static public int staticInt34973;
+    static public int staticInt34974;
+    static public int staticInt34975;
+    static public int staticInt34976;
+    static public int staticInt34977;
+    static public int staticInt34978;
+    static public int staticInt34979;
+    static public int staticInt34980;
+    static public int staticInt34981;
+    static public int staticInt34982;
+    static public int staticInt34983;
+    static public int staticInt34984;
+    static public int staticInt34985;
+    static public int staticInt34986;
+    static public int staticInt34987;
+    static public int staticInt34988;
+    static public int staticInt34989;
+    static public int staticInt34990;
+    static public int staticInt34991;
+    static public int staticInt34992;
+    static public int staticInt34993;
+    static public int staticInt34994;
+    static public int staticInt34995;
+    static public int staticInt34996;
+    static public int staticInt34997;
+    static public int staticInt34998;
+    static public int staticInt34999;
+    static public int staticInt35000;
+    static public int staticInt35001;
+    static public int staticInt35002;
+    static public int staticInt35003;
+    static public int staticInt35004;
+    static public int staticInt35005;
+    static public int staticInt35006;
+    static public int staticInt35007;
+    static public int staticInt35008;
+    static public int staticInt35009;
+    static public int staticInt35010;
+    static public int staticInt35011;
+    static public int staticInt35012;
+    static public int staticInt35013;
+    static public int staticInt35014;
+    static public int staticInt35015;
+    static public int staticInt35016;
+    static public int staticInt35017;
+    static public int staticInt35018;
+    static public int staticInt35019;
+    static public int staticInt35020;
+    static public int staticInt35021;
+    static public int staticInt35022;
+    static public int staticInt35023;
+    static public int staticInt35024;
+    static public int staticInt35025;
+    static public int staticInt35026;
+    static public int staticInt35027;
+    static public int staticInt35028;
+    static public int staticInt35029;
+    static public int staticInt35030;
+    static public int staticInt35031;
+    static public int staticInt35032;
+    static public int staticInt35033;
+    static public int staticInt35034;
+    static public int staticInt35035;
+    static public int staticInt35036;
+    static public int staticInt35037;
+    static public int staticInt35038;
+    static public int staticInt35039;
+    static public int staticInt35040;
+    static public int staticInt35041;
+    static public int staticInt35042;
+    static public int staticInt35043;
+    static public int staticInt35044;
+    static public int staticInt35045;
+    static public int staticInt35046;
+    static public int staticInt35047;
+    static public int staticInt35048;
+    static public int staticInt35049;
+    static public int staticInt35050;
+    static public int staticInt35051;
+    static public int staticInt35052;
+    static public int staticInt35053;
+    static public int staticInt35054;
+    static public int staticInt35055;
+    static public int staticInt35056;
+    static public int staticInt35057;
+    static public int staticInt35058;
+    static public int staticInt35059;
+    static public int staticInt35060;
+    static public int staticInt35061;
+    static public int staticInt35062;
+    static public int staticInt35063;
+    static public int staticInt35064;
+    static public int staticInt35065;
+    static public int staticInt35066;
+    static public int staticInt35067;
+    static public int staticInt35068;
+    static public int staticInt35069;
+    static public int staticInt35070;
+    static public int staticInt35071;
+    static public int staticInt35072;
+    static public int staticInt35073;
+    static public int staticInt35074;
+    static public int staticInt35075;
+    static public int staticInt35076;
+    static public int staticInt35077;
+    static public int staticInt35078;
+    static public int staticInt35079;
+    static public int staticInt35080;
+    static public int staticInt35081;
+    static public int staticInt35082;
+    static public int staticInt35083;
+    static public int staticInt35084;
+    static public int staticInt35085;
+    static public int staticInt35086;
+    static public int staticInt35087;
+    static public int staticInt35088;
+    static public int staticInt35089;
+    static public int staticInt35090;
+    static public int staticInt35091;
+    static public int staticInt35092;
+    static public int staticInt35093;
+    static public int staticInt35094;
+    static public int staticInt35095;
+    static public int staticInt35096;
+    static public int staticInt35097;
+    static public int staticInt35098;
+    static public int staticInt35099;
+    static public int staticInt35100;
+    static public int staticInt35101;
+    static public int staticInt35102;
+    static public int staticInt35103;
+    static public int staticInt35104;
+    static public int staticInt35105;
+    static public int staticInt35106;
+    static public int staticInt35107;
+    static public int staticInt35108;
+    static public int staticInt35109;
+    static public int staticInt35110;
+    static public int staticInt35111;
+    static public int staticInt35112;
+    static public int staticInt35113;
+    static public int staticInt35114;
+    static public int staticInt35115;
+    static public int staticInt35116;
+    static public int staticInt35117;
+    static public int staticInt35118;
+    static public int staticInt35119;
+    static public int staticInt35120;
+    static public int staticInt35121;
+    static public int staticInt35122;
+    static public int staticInt35123;
+    static public int staticInt35124;
+    static public int staticInt35125;
+    static public int staticInt35126;
+    static public int staticInt35127;
+    static public int staticInt35128;
+    static public int staticInt35129;
+    static public int staticInt35130;
+    static public int staticInt35131;
+    static public int staticInt35132;
+    static public int staticInt35133;
+    static public int staticInt35134;
+    static public int staticInt35135;
+    static public int staticInt35136;
+    static public int staticInt35137;
+    static public int staticInt35138;
+    static public int staticInt35139;
+    static public int staticInt35140;
+    static public int staticInt35141;
+    static public int staticInt35142;
+    static public int staticInt35143;
+    static public int staticInt35144;
+    static public int staticInt35145;
+    static public int staticInt35146;
+    static public int staticInt35147;
+    static public int staticInt35148;
+    static public int staticInt35149;
+    static public int staticInt35150;
+    static public int staticInt35151;
+    static public int staticInt35152;
+    static public int staticInt35153;
+    static public int staticInt35154;
+    static public int staticInt35155;
+    static public int staticInt35156;
+    static public int staticInt35157;
+    static public int staticInt35158;
+    static public int staticInt35159;
+    static public int staticInt35160;
+    static public int staticInt35161;
+    static public int staticInt35162;
+    static public int staticInt35163;
+    static public int staticInt35164;
+    static public int staticInt35165;
+    static public int staticInt35166;
+    static public int staticInt35167;
+    static public int staticInt35168;
+    static public int staticInt35169;
+    static public int staticInt35170;
+    static public int staticInt35171;
+    static public int staticInt35172;
+    static public int staticInt35173;
+    static public int staticInt35174;
+    static public int staticInt35175;
+    static public int staticInt35176;
+    static public int staticInt35177;
+    static public int staticInt35178;
+    static public int staticInt35179;
+    static public int staticInt35180;
+    static public int staticInt35181;
+    static public int staticInt35182;
+    static public int staticInt35183;
+    static public int staticInt35184;
+    static public int staticInt35185;
+    static public int staticInt35186;
+    static public int staticInt35187;
+    static public int staticInt35188;
+    static public int staticInt35189;
+    static public int staticInt35190;
+    static public int staticInt35191;
+    static public int staticInt35192;
+    static public int staticInt35193;
+    static public int staticInt35194;
+    static public int staticInt35195;
+    static public int staticInt35196;
+    static public int staticInt35197;
+    static public int staticInt35198;
+    static public int staticInt35199;
+    static public int staticInt35200;
+    static public int staticInt35201;
+    static public int staticInt35202;
+    static public int staticInt35203;
+    static public int staticInt35204;
+    static public int staticInt35205;
+    static public int staticInt35206;
+    static public int staticInt35207;
+    static public int staticInt35208;
+    static public int staticInt35209;
+    static public int staticInt35210;
+    static public int staticInt35211;
+    static public int staticInt35212;
+    static public int staticInt35213;
+    static public int staticInt35214;
+    static public int staticInt35215;
+    static public int staticInt35216;
+    static public int staticInt35217;
+    static public int staticInt35218;
+    static public int staticInt35219;
+    static public int staticInt35220;
+    static public int staticInt35221;
+    static public int staticInt35222;
+    static public int staticInt35223;
+    static public int staticInt35224;
+    static public int staticInt35225;
+    static public int staticInt35226;
+    static public int staticInt35227;
+    static public int staticInt35228;
+    static public int staticInt35229;
+    static public int staticInt35230;
+    static public int staticInt35231;
+    static public int staticInt35232;
+    static public int staticInt35233;
+    static public int staticInt35234;
+    static public int staticInt35235;
+    static public int staticInt35236;
+    static public int staticInt35237;
+    static public int staticInt35238;
+    static public int staticInt35239;
+    static public int staticInt35240;
+    static public int staticInt35241;
+    static public int staticInt35242;
+    static public int staticInt35243;
+    static public int staticInt35244;
+    static public int staticInt35245;
+    static public int staticInt35246;
+    static public int staticInt35247;
+    static public int staticInt35248;
+    static public int staticInt35249;
+    static public int staticInt35250;
+    static public int staticInt35251;
+    static public int staticInt35252;
+    static public int staticInt35253;
+    static public int staticInt35254;
+    static public int staticInt35255;
+    static public int staticInt35256;
+    static public int staticInt35257;
+    static public int staticInt35258;
+    static public int staticInt35259;
+    static public int staticInt35260;
+    static public int staticInt35261;
+    static public int staticInt35262;
+    static public int staticInt35263;
+    static public int staticInt35264;
+    static public int staticInt35265;
+    static public int staticInt35266;
+    static public int staticInt35267;
+    static public int staticInt35268;
+    static public int staticInt35269;
+    static public int staticInt35270;
+    static public int staticInt35271;
+    static public int staticInt35272;
+    static public int staticInt35273;
+    static public int staticInt35274;
+    static public int staticInt35275;
+    static public int staticInt35276;
+    static public int staticInt35277;
+    static public int staticInt35278;
+    static public int staticInt35279;
+    static public int staticInt35280;
+    static public int staticInt35281;
+    static public int staticInt35282;
+    static public int staticInt35283;
+    static public int staticInt35284;
+    static public int staticInt35285;
+    static public int staticInt35286;
+    static public int staticInt35287;
+    static public int staticInt35288;
+    static public int staticInt35289;
+    static public int staticInt35290;
+    static public int staticInt35291;
+    static public int staticInt35292;
+    static public int staticInt35293;
+    static public int staticInt35294;
+    static public int staticInt35295;
+    static public int staticInt35296;
+    static public int staticInt35297;
+    static public int staticInt35298;
+    static public int staticInt35299;
+    static public int staticInt35300;
+    static public int staticInt35301;
+    static public int staticInt35302;
+    static public int staticInt35303;
+    static public int staticInt35304;
+    static public int staticInt35305;
+    static public int staticInt35306;
+    static public int staticInt35307;
+    static public int staticInt35308;
+    static public int staticInt35309;
+    static public int staticInt35310;
+    static public int staticInt35311;
+    static public int staticInt35312;
+    static public int staticInt35313;
+    static public int staticInt35314;
+    static public int staticInt35315;
+    static public int staticInt35316;
+    static public int staticInt35317;
+    static public int staticInt35318;
+    static public int staticInt35319;
+    static public int staticInt35320;
+    static public int staticInt35321;
+    static public int staticInt35322;
+    static public int staticInt35323;
+    static public int staticInt35324;
+    static public int staticInt35325;
+    static public int staticInt35326;
+    static public int staticInt35327;
+    static public int staticInt35328;
+    static public int staticInt35329;
+    static public int staticInt35330;
+    static public int staticInt35331;
+    static public int staticInt35332;
+    static public int staticInt35333;
+    static public int staticInt35334;
+    static public int staticInt35335;
+    static public int staticInt35336;
+    static public int staticInt35337;
+    static public int staticInt35338;
+    static public int staticInt35339;
+    static public int staticInt35340;
+    static public int staticInt35341;
+    static public int staticInt35342;
+    static public int staticInt35343;
+    static public int staticInt35344;
+    static public int staticInt35345;
+    static public int staticInt35346;
+    static public int staticInt35347;
+    static public int staticInt35348;
+    static public int staticInt35349;
+    static public int staticInt35350;
+    static public int staticInt35351;
+    static public int staticInt35352;
+    static public int staticInt35353;
+    static public int staticInt35354;
+    static public int staticInt35355;
+    static public int staticInt35356;
+    static public int staticInt35357;
+    static public int staticInt35358;
+    static public int staticInt35359;
+    static public int staticInt35360;
+    static public int staticInt35361;
+    static public int staticInt35362;
+    static public int staticInt35363;
+    static public int staticInt35364;
+    static public int staticInt35365;
+    static public int staticInt35366;
+    static public int staticInt35367;
+    static public int staticInt35368;
+    static public int staticInt35369;
+    static public int staticInt35370;
+    static public int staticInt35371;
+    static public int staticInt35372;
+    static public int staticInt35373;
+    static public int staticInt35374;
+    static public int staticInt35375;
+    static public int staticInt35376;
+    static public int staticInt35377;
+    static public int staticInt35378;
+    static public int staticInt35379;
+    static public int staticInt35380;
+    static public int staticInt35381;
+    static public int staticInt35382;
+    static public int staticInt35383;
+    static public int staticInt35384;
+    static public int staticInt35385;
+    static public int staticInt35386;
+    static public int staticInt35387;
+    static public int staticInt35388;
+    static public int staticInt35389;
+    static public int staticInt35390;
+    static public int staticInt35391;
+    static public int staticInt35392;
+    static public int staticInt35393;
+    static public int staticInt35394;
+    static public int staticInt35395;
+    static public int staticInt35396;
+    static public int staticInt35397;
+    static public int staticInt35398;
+    static public int staticInt35399;
+    static public int staticInt35400;
+    static public int staticInt35401;
+    static public int staticInt35402;
+    static public int staticInt35403;
+    static public int staticInt35404;
+    static public int staticInt35405;
+    static public int staticInt35406;
+    static public int staticInt35407;
+    static public int staticInt35408;
+    static public int staticInt35409;
+    static public int staticInt35410;
+    static public int staticInt35411;
+    static public int staticInt35412;
+    static public int staticInt35413;
+    static public int staticInt35414;
+    static public int staticInt35415;
+    static public int staticInt35416;
+    static public int staticInt35417;
+    static public int staticInt35418;
+    static public int staticInt35419;
+    static public int staticInt35420;
+    static public int staticInt35421;
+    static public int staticInt35422;
+    static public int staticInt35423;
+    static public int staticInt35424;
+    static public int staticInt35425;
+    static public int staticInt35426;
+    static public int staticInt35427;
+    static public int staticInt35428;
+    static public int staticInt35429;
+    static public int staticInt35430;
+    static public int staticInt35431;
+    static public int staticInt35432;
+    static public int staticInt35433;
+    static public int staticInt35434;
+    static public int staticInt35435;
+    static public int staticInt35436;
+    static public int staticInt35437;
+    static public int staticInt35438;
+    static public int staticInt35439;
+    static public int staticInt35440;
+    static public int staticInt35441;
+    static public int staticInt35442;
+    static public int staticInt35443;
+    static public int staticInt35444;
+    static public int staticInt35445;
+    static public int staticInt35446;
+    static public int staticInt35447;
+    static public int staticInt35448;
+    static public int staticInt35449;
+    static public int staticInt35450;
+    static public int staticInt35451;
+    static public int staticInt35452;
+    static public int staticInt35453;
+    static public int staticInt35454;
+    static public int staticInt35455;
+    static public int staticInt35456;
+    static public int staticInt35457;
+    static public int staticInt35458;
+    static public int staticInt35459;
+    static public int staticInt35460;
+    static public int staticInt35461;
+    static public int staticInt35462;
+    static public int staticInt35463;
+    static public int staticInt35464;
+    static public int staticInt35465;
+    static public int staticInt35466;
+    static public int staticInt35467;
+    static public int staticInt35468;
+    static public int staticInt35469;
+    static public int staticInt35470;
+    static public int staticInt35471;
+    static public int staticInt35472;
+    static public int staticInt35473;
+    static public int staticInt35474;
+    static public int staticInt35475;
+    static public int staticInt35476;
+    static public int staticInt35477;
+    static public int staticInt35478;
+    static public int staticInt35479;
+    static public int staticInt35480;
+    static public int staticInt35481;
+    static public int staticInt35482;
+    static public int staticInt35483;
+    static public int staticInt35484;
+    static public int staticInt35485;
+    static public int staticInt35486;
+    static public int staticInt35487;
+    static public int staticInt35488;
+    static public int staticInt35489;
+    static public int staticInt35490;
+    static public int staticInt35491;
+    static public int staticInt35492;
+    static public int staticInt35493;
+    static public int staticInt35494;
+    static public int staticInt35495;
+    static public int staticInt35496;
+    static public int staticInt35497;
+    static public int staticInt35498;
+    static public int staticInt35499;
+    static public int staticInt35500;
+    static public int staticInt35501;
+    static public int staticInt35502;
+    static public int staticInt35503;
+    static public int staticInt35504;
+    static public int staticInt35505;
+    static public int staticInt35506;
+    static public int staticInt35507;
+    static public int staticInt35508;
+    static public int staticInt35509;
+    static public int staticInt35510;
+    static public int staticInt35511;
+    static public int staticInt35512;
+    static public int staticInt35513;
+    static public int staticInt35514;
+    static public int staticInt35515;
+    static public int staticInt35516;
+    static public int staticInt35517;
+    static public int staticInt35518;
+    static public int staticInt35519;
+    static public int staticInt35520;
+    static public int staticInt35521;
+    static public int staticInt35522;
+    static public int staticInt35523;
+    static public int staticInt35524;
+    static public int staticInt35525;
+    static public int staticInt35526;
+    static public int staticInt35527;
+    static public int staticInt35528;
+    static public int staticInt35529;
+    static public int staticInt35530;
+    static public int staticInt35531;
+    static public int staticInt35532;
+    static public int staticInt35533;
+    static public int staticInt35534;
+    static public int staticInt35535;
+    static public int staticInt35536;
+    static public int staticInt35537;
+    static public int staticInt35538;
+    static public int staticInt35539;
+    static public int staticInt35540;
+    static public int staticInt35541;
+    static public int staticInt35542;
+    static public int staticInt35543;
+    static public int staticInt35544;
+    static public int staticInt35545;
+    static public int staticInt35546;
+    static public int staticInt35547;
+    static public int staticInt35548;
+    static public int staticInt35549;
+    static public int staticInt35550;
+    static public int staticInt35551;
+    static public int staticInt35552;
+    static public int staticInt35553;
+    static public int staticInt35554;
+    static public int staticInt35555;
+    static public int staticInt35556;
+    static public int staticInt35557;
+    static public int staticInt35558;
+    static public int staticInt35559;
+    static public int staticInt35560;
+    static public int staticInt35561;
+    static public int staticInt35562;
+    static public int staticInt35563;
+    static public int staticInt35564;
+    static public int staticInt35565;
+    static public int staticInt35566;
+    static public int staticInt35567;
+    static public int staticInt35568;
+    static public int staticInt35569;
+    static public int staticInt35570;
+    static public int staticInt35571;
+    static public int staticInt35572;
+    static public int staticInt35573;
+    static public int staticInt35574;
+    static public int staticInt35575;
+    static public int staticInt35576;
+    static public int staticInt35577;
+    static public int staticInt35578;
+    static public int staticInt35579;
+    static public int staticInt35580;
+    static public int staticInt35581;
+    static public int staticInt35582;
+    static public int staticInt35583;
+    static public int staticInt35584;
+    static public int staticInt35585;
+    static public int staticInt35586;
+    static public int staticInt35587;
+    static public int staticInt35588;
+    static public int staticInt35589;
+    static public int staticInt35590;
+    static public int staticInt35591;
+    static public int staticInt35592;
+    static public int staticInt35593;
+    static public int staticInt35594;
+    static public int staticInt35595;
+    static public int staticInt35596;
+    static public int staticInt35597;
+    static public int staticInt35598;
+    static public int staticInt35599;
+    static public int staticInt35600;
+    static public int staticInt35601;
+    static public int staticInt35602;
+    static public int staticInt35603;
+    static public int staticInt35604;
+    static public int staticInt35605;
+    static public int staticInt35606;
+    static public int staticInt35607;
+    static public int staticInt35608;
+    static public int staticInt35609;
+    static public int staticInt35610;
+    static public int staticInt35611;
+    static public int staticInt35612;
+    static public int staticInt35613;
+    static public int staticInt35614;
+    static public int staticInt35615;
+    static public int staticInt35616;
+    static public int staticInt35617;
+    static public int staticInt35618;
+    static public int staticInt35619;
+    static public int staticInt35620;
+    static public int staticInt35621;
+    static public int staticInt35622;
+    static public int staticInt35623;
+    static public int staticInt35624;
+    static public int staticInt35625;
+    static public int staticInt35626;
+    static public int staticInt35627;
+    static public int staticInt35628;
+    static public int staticInt35629;
+    static public int staticInt35630;
+    static public int staticInt35631;
+    static public int staticInt35632;
+    static public int staticInt35633;
+    static public int staticInt35634;
+    static public int staticInt35635;
+    static public int staticInt35636;
+    static public int staticInt35637;
+    static public int staticInt35638;
+    static public int staticInt35639;
+    static public int staticInt35640;
+    static public int staticInt35641;
+    static public int staticInt35642;
+    static public int staticInt35643;
+    static public int staticInt35644;
+    static public int staticInt35645;
+    static public int staticInt35646;
+    static public int staticInt35647;
+    static public int staticInt35648;
+    static public int staticInt35649;
+    static public int staticInt35650;
+    static public int staticInt35651;
+    static public int staticInt35652;
+    static public int staticInt35653;
+    static public int staticInt35654;
+    static public int staticInt35655;
+    static public int staticInt35656;
+    static public int staticInt35657;
+    static public int staticInt35658;
+    static public int staticInt35659;
+    static public int staticInt35660;
+    static public int staticInt35661;
+    static public int staticInt35662;
+    static public int staticInt35663;
+    static public int staticInt35664;
+    static public int staticInt35665;
+    static public int staticInt35666;
+    static public int staticInt35667;
+    static public int staticInt35668;
+    static public int staticInt35669;
+    static public int staticInt35670;
+    static public int staticInt35671;
+    static public int staticInt35672;
+    static public int staticInt35673;
+    static public int staticInt35674;
+    static public int staticInt35675;
+    static public int staticInt35676;
+    static public int staticInt35677;
+    static public int staticInt35678;
+    static public int staticInt35679;
+    static public int staticInt35680;
+    static public int staticInt35681;
+    static public int staticInt35682;
+    static public int staticInt35683;
+    static public int staticInt35684;
+    static public int staticInt35685;
+    static public int staticInt35686;
+    static public int staticInt35687;
+    static public int staticInt35688;
+    static public int staticInt35689;
+    static public int staticInt35690;
+    static public int staticInt35691;
+    static public int staticInt35692;
+    static public int staticInt35693;
+    static public int staticInt35694;
+    static public int staticInt35695;
+    static public int staticInt35696;
+    static public int staticInt35697;
+    static public int staticInt35698;
+    static public int staticInt35699;
+    static public int staticInt35700;
+    static public int staticInt35701;
+    static public int staticInt35702;
+    static public int staticInt35703;
+    static public int staticInt35704;
+    static public int staticInt35705;
+    static public int staticInt35706;
+    static public int staticInt35707;
+    static public int staticInt35708;
+    static public int staticInt35709;
+    static public int staticInt35710;
+    static public int staticInt35711;
+    static public int staticInt35712;
+    static public int staticInt35713;
+    static public int staticInt35714;
+    static public int staticInt35715;
+    static public int staticInt35716;
+    static public int staticInt35717;
+    static public int staticInt35718;
+    static public int staticInt35719;
+    static public int staticInt35720;
+    static public int staticInt35721;
+    static public int staticInt35722;
+    static public int staticInt35723;
+    static public int staticInt35724;
+    static public int staticInt35725;
+    static public int staticInt35726;
+    static public int staticInt35727;
+    static public int staticInt35728;
+    static public int staticInt35729;
+    static public int staticInt35730;
+    static public int staticInt35731;
+    static public int staticInt35732;
+    static public int staticInt35733;
+    static public int staticInt35734;
+    static public int staticInt35735;
+    static public int staticInt35736;
+    static public int staticInt35737;
+    static public int staticInt35738;
+    static public int staticInt35739;
+    static public int staticInt35740;
+    static public int staticInt35741;
+    static public int staticInt35742;
+    static public int staticInt35743;
+    static public int staticInt35744;
+    static public int staticInt35745;
+    static public int staticInt35746;
+    static public int staticInt35747;
+    static public int staticInt35748;
+    static public int staticInt35749;
+    static public int staticInt35750;
+    static public int staticInt35751;
+    static public int staticInt35752;
+    static public int staticInt35753;
+    static public int staticInt35754;
+    static public int staticInt35755;
+    static public int staticInt35756;
+    static public int staticInt35757;
+    static public int staticInt35758;
+    static public int staticInt35759;
+    static public int staticInt35760;
+    static public int staticInt35761;
+    static public int staticInt35762;
+    static public int staticInt35763;
+    static public int staticInt35764;
+    static public int staticInt35765;
+    static public int staticInt35766;
+    static public int staticInt35767;
+    static public int staticInt35768;
+    static public int staticInt35769;
+    static public int staticInt35770;
+    static public int staticInt35771;
+    static public int staticInt35772;
+    static public int staticInt35773;
+    static public int staticInt35774;
+    static public int staticInt35775;
+    static public int staticInt35776;
+    static public int staticInt35777;
+    static public int staticInt35778;
+    static public int staticInt35779;
+    static public int staticInt35780;
+    static public int staticInt35781;
+    static public int staticInt35782;
+    static public int staticInt35783;
+    static public int staticInt35784;
+    static public int staticInt35785;
+    static public int staticInt35786;
+    static public int staticInt35787;
+    static public int staticInt35788;
+    static public int staticInt35789;
+    static public int staticInt35790;
+    static public int staticInt35791;
+    static public int staticInt35792;
+    static public int staticInt35793;
+    static public int staticInt35794;
+    static public int staticInt35795;
+    static public int staticInt35796;
+    static public int staticInt35797;
+    static public int staticInt35798;
+    static public int staticInt35799;
+    static public int staticInt35800;
+    static public int staticInt35801;
+    static public int staticInt35802;
+    static public int staticInt35803;
+    static public int staticInt35804;
+    static public int staticInt35805;
+    static public int staticInt35806;
+    static public int staticInt35807;
+    static public int staticInt35808;
+    static public int staticInt35809;
+    static public int staticInt35810;
+    static public int staticInt35811;
+    static public int staticInt35812;
+    static public int staticInt35813;
+    static public int staticInt35814;
+    static public int staticInt35815;
+    static public int staticInt35816;
+    static public int staticInt35817;
+    static public int staticInt35818;
+    static public int staticInt35819;
+    static public int staticInt35820;
+    static public int staticInt35821;
+    static public int staticInt35822;
+    static public int staticInt35823;
+    static public int staticInt35824;
+    static public int staticInt35825;
+    static public int staticInt35826;
+    static public int staticInt35827;
+    static public int staticInt35828;
+    static public int staticInt35829;
+    static public int staticInt35830;
+    static public int staticInt35831;
+    static public int staticInt35832;
+    static public int staticInt35833;
+    static public int staticInt35834;
+    static public int staticInt35835;
+    static public int staticInt35836;
+    static public int staticInt35837;
+    static public int staticInt35838;
+    static public int staticInt35839;
+    static public int staticInt35840;
+    static public int staticInt35841;
+    static public int staticInt35842;
+    static public int staticInt35843;
+    static public int staticInt35844;
+    static public int staticInt35845;
+    static public int staticInt35846;
+    static public int staticInt35847;
+    static public int staticInt35848;
+    static public int staticInt35849;
+    static public int staticInt35850;
+    static public int staticInt35851;
+    static public int staticInt35852;
+    static public int staticInt35853;
+    static public int staticInt35854;
+    static public int staticInt35855;
+    static public int staticInt35856;
+    static public int staticInt35857;
+    static public int staticInt35858;
+    static public int staticInt35859;
+    static public int staticInt35860;
+    static public int staticInt35861;
+    static public int staticInt35862;
+    static public int staticInt35863;
+    static public int staticInt35864;
+    static public int staticInt35865;
+    static public int staticInt35866;
+    static public int staticInt35867;
+    static public int staticInt35868;
+    static public int staticInt35869;
+    static public int staticInt35870;
+    static public int staticInt35871;
+    static public int staticInt35872;
+    static public int staticInt35873;
+    static public int staticInt35874;
+    static public int staticInt35875;
+    static public int staticInt35876;
+    static public int staticInt35877;
+    static public int staticInt35878;
+    static public int staticInt35879;
+    static public int staticInt35880;
+    static public int staticInt35881;
+    static public int staticInt35882;
+    static public int staticInt35883;
+    static public int staticInt35884;
+    static public int staticInt35885;
+    static public int staticInt35886;
+    static public int staticInt35887;
+    static public int staticInt35888;
+    static public int staticInt35889;
+    static public int staticInt35890;
+    static public int staticInt35891;
+    static public int staticInt35892;
+    static public int staticInt35893;
+    static public int staticInt35894;
+    static public int staticInt35895;
+    static public int staticInt35896;
+    static public int staticInt35897;
+    static public int staticInt35898;
+    static public int staticInt35899;
+    static public int staticInt35900;
+    static public int staticInt35901;
+    static public int staticInt35902;
+    static public int staticInt35903;
+    static public int staticInt35904;
+    static public int staticInt35905;
+    static public int staticInt35906;
+    static public int staticInt35907;
+    static public int staticInt35908;
+    static public int staticInt35909;
+    static public int staticInt35910;
+    static public int staticInt35911;
+    static public int staticInt35912;
+    static public int staticInt35913;
+    static public int staticInt35914;
+    static public int staticInt35915;
+    static public int staticInt35916;
+    static public int staticInt35917;
+    static public int staticInt35918;
+    static public int staticInt35919;
+    static public int staticInt35920;
+    static public int staticInt35921;
+    static public int staticInt35922;
+    static public int staticInt35923;
+    static public int staticInt35924;
+    static public int staticInt35925;
+    static public int staticInt35926;
+    static public int staticInt35927;
+    static public int staticInt35928;
+    static public int staticInt35929;
+    static public int staticInt35930;
+    static public int staticInt35931;
+    static public int staticInt35932;
+    static public int staticInt35933;
+    static public int staticInt35934;
+    static public int staticInt35935;
+    static public int staticInt35936;
+    static public int staticInt35937;
+    static public int staticInt35938;
+    static public int staticInt35939;
+    static public int staticInt35940;
+    static public int staticInt35941;
+    static public int staticInt35942;
+    static public int staticInt35943;
+    static public int staticInt35944;
+    static public int staticInt35945;
+    static public int staticInt35946;
+    static public int staticInt35947;
+    static public int staticInt35948;
+    static public int staticInt35949;
+    static public int staticInt35950;
+    static public int staticInt35951;
+    static public int staticInt35952;
+    static public int staticInt35953;
+    static public int staticInt35954;
+    static public int staticInt35955;
+    static public int staticInt35956;
+    static public int staticInt35957;
+    static public int staticInt35958;
+    static public int staticInt35959;
+    static public int staticInt35960;
+    static public int staticInt35961;
+    static public int staticInt35962;
+    static public int staticInt35963;
+    static public int staticInt35964;
+    static public int staticInt35965;
+    static public int staticInt35966;
+    static public int staticInt35967;
+    static public int staticInt35968;
+    static public int staticInt35969;
+    static public int staticInt35970;
+    static public int staticInt35971;
+    static public int staticInt35972;
+    static public int staticInt35973;
+    static public int staticInt35974;
+    static public int staticInt35975;
+    static public int staticInt35976;
+    static public int staticInt35977;
+    static public int staticInt35978;
+    static public int staticInt35979;
+    static public int staticInt35980;
+    static public int staticInt35981;
+    static public int staticInt35982;
+    static public int staticInt35983;
+    static public int staticInt35984;
+    static public int staticInt35985;
+    static public int staticInt35986;
+    static public int staticInt35987;
+    static public int staticInt35988;
+    static public int staticInt35989;
+    static public int staticInt35990;
+    static public int staticInt35991;
+    static public int staticInt35992;
+    static public int staticInt35993;
+    static public int staticInt35994;
+    static public int staticInt35995;
+    static public int staticInt35996;
+    static public int staticInt35997;
+    static public int staticInt35998;
+    static public int staticInt35999;
+    static public int staticInt36000;
+    static public int staticInt36001;
+    static public int staticInt36002;
+    static public int staticInt36003;
+    static public int staticInt36004;
+    static public int staticInt36005;
+    static public int staticInt36006;
+    static public int staticInt36007;
+    static public int staticInt36008;
+    static public int staticInt36009;
+    static public int staticInt36010;
+    static public int staticInt36011;
+    static public int staticInt36012;
+    static public int staticInt36013;
+    static public int staticInt36014;
+    static public int staticInt36015;
+    static public int staticInt36016;
+    static public int staticInt36017;
+    static public int staticInt36018;
+    static public int staticInt36019;
+    static public int staticInt36020;
+    static public int staticInt36021;
+    static public int staticInt36022;
+    static public int staticInt36023;
+    static public int staticInt36024;
+    static public int staticInt36025;
+    static public int staticInt36026;
+    static public int staticInt36027;
+    static public int staticInt36028;
+    static public int staticInt36029;
+    static public int staticInt36030;
+    static public int staticInt36031;
+    static public int staticInt36032;
+    static public int staticInt36033;
+    static public int staticInt36034;
+    static public int staticInt36035;
+    static public int staticInt36036;
+    static public int staticInt36037;
+    static public int staticInt36038;
+    static public int staticInt36039;
+    static public int staticInt36040;
+    static public int staticInt36041;
+    static public int staticInt36042;
+    static public int staticInt36043;
+    static public int staticInt36044;
+    static public int staticInt36045;
+    static public int staticInt36046;
+    static public int staticInt36047;
+    static public int staticInt36048;
+    static public int staticInt36049;
+    static public int staticInt36050;
+    static public int staticInt36051;
+    static public int staticInt36052;
+    static public int staticInt36053;
+    static public int staticInt36054;
+    static public int staticInt36055;
+    static public int staticInt36056;
+    static public int staticInt36057;
+    static public int staticInt36058;
+    static public int staticInt36059;
+    static public int staticInt36060;
+    static public int staticInt36061;
+    static public int staticInt36062;
+    static public int staticInt36063;
+    static public int staticInt36064;
+    static public int staticInt36065;
+    static public int staticInt36066;
+    static public int staticInt36067;
+    static public int staticInt36068;
+    static public int staticInt36069;
+    static public int staticInt36070;
+    static public int staticInt36071;
+    static public int staticInt36072;
+    static public int staticInt36073;
+    static public int staticInt36074;
+    static public int staticInt36075;
+    static public int staticInt36076;
+    static public int staticInt36077;
+    static public int staticInt36078;
+    static public int staticInt36079;
+    static public int staticInt36080;
+    static public int staticInt36081;
+    static public int staticInt36082;
+    static public int staticInt36083;
+    static public int staticInt36084;
+    static public int staticInt36085;
+    static public int staticInt36086;
+    static public int staticInt36087;
+    static public int staticInt36088;
+    static public int staticInt36089;
+    static public int staticInt36090;
+    static public int staticInt36091;
+    static public int staticInt36092;
+    static public int staticInt36093;
+    static public int staticInt36094;
+    static public int staticInt36095;
+    static public int staticInt36096;
+    static public int staticInt36097;
+    static public int staticInt36098;
+    static public int staticInt36099;
+    static public int staticInt36100;
+    static public int staticInt36101;
+    static public int staticInt36102;
+    static public int staticInt36103;
+    static public int staticInt36104;
+    static public int staticInt36105;
+    static public int staticInt36106;
+    static public int staticInt36107;
+    static public int staticInt36108;
+    static public int staticInt36109;
+    static public int staticInt36110;
+    static public int staticInt36111;
+    static public int staticInt36112;
+    static public int staticInt36113;
+    static public int staticInt36114;
+    static public int staticInt36115;
+    static public int staticInt36116;
+    static public int staticInt36117;
+    static public int staticInt36118;
+    static public int staticInt36119;
+    static public int staticInt36120;
+    static public int staticInt36121;
+    static public int staticInt36122;
+    static public int staticInt36123;
+    static public int staticInt36124;
+    static public int staticInt36125;
+    static public int staticInt36126;
+    static public int staticInt36127;
+    static public int staticInt36128;
+    static public int staticInt36129;
+    static public int staticInt36130;
+    static public int staticInt36131;
+    static public int staticInt36132;
+    static public int staticInt36133;
+    static public int staticInt36134;
+    static public int staticInt36135;
+    static public int staticInt36136;
+    static public int staticInt36137;
+    static public int staticInt36138;
+    static public int staticInt36139;
+    static public int staticInt36140;
+    static public int staticInt36141;
+    static public int staticInt36142;
+    static public int staticInt36143;
+    static public int staticInt36144;
+    static public int staticInt36145;
+    static public int staticInt36146;
+    static public int staticInt36147;
+    static public int staticInt36148;
+    static public int staticInt36149;
+    static public int staticInt36150;
+    static public int staticInt36151;
+    static public int staticInt36152;
+    static public int staticInt36153;
+    static public int staticInt36154;
+    static public int staticInt36155;
+    static public int staticInt36156;
+    static public int staticInt36157;
+    static public int staticInt36158;
+    static public int staticInt36159;
+    static public int staticInt36160;
+    static public int staticInt36161;
+    static public int staticInt36162;
+    static public int staticInt36163;
+    static public int staticInt36164;
+    static public int staticInt36165;
+    static public int staticInt36166;
+    static public int staticInt36167;
+    static public int staticInt36168;
+    static public int staticInt36169;
+    static public int staticInt36170;
+    static public int staticInt36171;
+    static public int staticInt36172;
+    static public int staticInt36173;
+    static public int staticInt36174;
+    static public int staticInt36175;
+    static public int staticInt36176;
+    static public int staticInt36177;
+    static public int staticInt36178;
+    static public int staticInt36179;
+    static public int staticInt36180;
+    static public int staticInt36181;
+    static public int staticInt36182;
+    static public int staticInt36183;
+    static public int staticInt36184;
+    static public int staticInt36185;
+    static public int staticInt36186;
+    static public int staticInt36187;
+    static public int staticInt36188;
+    static public int staticInt36189;
+    static public int staticInt36190;
+    static public int staticInt36191;
+    static public int staticInt36192;
+    static public int staticInt36193;
+    static public int staticInt36194;
+    static public int staticInt36195;
+    static public int staticInt36196;
+    static public int staticInt36197;
+    static public int staticInt36198;
+    static public int staticInt36199;
+    static public int staticInt36200;
+    static public int staticInt36201;
+    static public int staticInt36202;
+    static public int staticInt36203;
+    static public int staticInt36204;
+    static public int staticInt36205;
+    static public int staticInt36206;
+    static public int staticInt36207;
+    static public int staticInt36208;
+    static public int staticInt36209;
+    static public int staticInt36210;
+    static public int staticInt36211;
+    static public int staticInt36212;
+    static public int staticInt36213;
+    static public int staticInt36214;
+    static public int staticInt36215;
+    static public int staticInt36216;
+    static public int staticInt36217;
+    static public int staticInt36218;
+    static public int staticInt36219;
+    static public int staticInt36220;
+    static public int staticInt36221;
+    static public int staticInt36222;
+    static public int staticInt36223;
+    static public int staticInt36224;
+    static public int staticInt36225;
+    static public int staticInt36226;
+    static public int staticInt36227;
+    static public int staticInt36228;
+    static public int staticInt36229;
+    static public int staticInt36230;
+    static public int staticInt36231;
+    static public int staticInt36232;
+    static public int staticInt36233;
+    static public int staticInt36234;
+    static public int staticInt36235;
+    static public int staticInt36236;
+    static public int staticInt36237;
+    static public int staticInt36238;
+    static public int staticInt36239;
+    static public int staticInt36240;
+    static public int staticInt36241;
+    static public int staticInt36242;
+    static public int staticInt36243;
+    static public int staticInt36244;
+    static public int staticInt36245;
+    static public int staticInt36246;
+    static public int staticInt36247;
+    static public int staticInt36248;
+    static public int staticInt36249;
+    static public int staticInt36250;
+    static public int staticInt36251;
+    static public int staticInt36252;
+    static public int staticInt36253;
+    static public int staticInt36254;
+    static public int staticInt36255;
+    static public int staticInt36256;
+    static public int staticInt36257;
+    static public int staticInt36258;
+    static public int staticInt36259;
+    static public int staticInt36260;
+    static public int staticInt36261;
+    static public int staticInt36262;
+    static public int staticInt36263;
+    static public int staticInt36264;
+    static public int staticInt36265;
+    static public int staticInt36266;
+    static public int staticInt36267;
+    static public int staticInt36268;
+    static public int staticInt36269;
+    static public int staticInt36270;
+    static public int staticInt36271;
+    static public int staticInt36272;
+    static public int staticInt36273;
+    static public int staticInt36274;
+    static public int staticInt36275;
+    static public int staticInt36276;
+    static public int staticInt36277;
+    static public int staticInt36278;
+    static public int staticInt36279;
+    static public int staticInt36280;
+    static public int staticInt36281;
+    static public int staticInt36282;
+    static public int staticInt36283;
+    static public int staticInt36284;
+    static public int staticInt36285;
+    static public int staticInt36286;
+    static public int staticInt36287;
+    static public int staticInt36288;
+    static public int staticInt36289;
+    static public int staticInt36290;
+    static public int staticInt36291;
+    static public int staticInt36292;
+    static public int staticInt36293;
+    static public int staticInt36294;
+    static public int staticInt36295;
+    static public int staticInt36296;
+    static public int staticInt36297;
+    static public int staticInt36298;
+    static public int staticInt36299;
+    static public int staticInt36300;
+    static public int staticInt36301;
+    static public int staticInt36302;
+    static public int staticInt36303;
+    static public int staticInt36304;
+    static public int staticInt36305;
+    static public int staticInt36306;
+    static public int staticInt36307;
+    static public int staticInt36308;
+    static public int staticInt36309;
+    static public int staticInt36310;
+    static public int staticInt36311;
+    static public int staticInt36312;
+    static public int staticInt36313;
+    static public int staticInt36314;
+    static public int staticInt36315;
+    static public int staticInt36316;
+    static public int staticInt36317;
+    static public int staticInt36318;
+    static public int staticInt36319;
+    static public int staticInt36320;
+    static public int staticInt36321;
+    static public int staticInt36322;
+    static public int staticInt36323;
+    static public int staticInt36324;
+    static public int staticInt36325;
+    static public int staticInt36326;
+    static public int staticInt36327;
+    static public int staticInt36328;
+    static public int staticInt36329;
+    static public int staticInt36330;
+    static public int staticInt36331;
+    static public int staticInt36332;
+    static public int staticInt36333;
+    static public int staticInt36334;
+    static public int staticInt36335;
+    static public int staticInt36336;
+    static public int staticInt36337;
+    static public int staticInt36338;
+    static public int staticInt36339;
+    static public int staticInt36340;
+    static public int staticInt36341;
+    static public int staticInt36342;
+    static public int staticInt36343;
+    static public int staticInt36344;
+    static public int staticInt36345;
+    static public int staticInt36346;
+    static public int staticInt36347;
+    static public int staticInt36348;
+    static public int staticInt36349;
+    static public int staticInt36350;
+    static public int staticInt36351;
+    static public int staticInt36352;
+    static public int staticInt36353;
+    static public int staticInt36354;
+    static public int staticInt36355;
+    static public int staticInt36356;
+    static public int staticInt36357;
+    static public int staticInt36358;
+    static public int staticInt36359;
+    static public int staticInt36360;
+    static public int staticInt36361;
+    static public int staticInt36362;
+    static public int staticInt36363;
+    static public int staticInt36364;
+    static public int staticInt36365;
+    static public int staticInt36366;
+    static public int staticInt36367;
+    static public int staticInt36368;
+    static public int staticInt36369;
+    static public int staticInt36370;
+    static public int staticInt36371;
+    static public int staticInt36372;
+    static public int staticInt36373;
+    static public int staticInt36374;
+    static public int staticInt36375;
+    static public int staticInt36376;
+    static public int staticInt36377;
+    static public int staticInt36378;
+    static public int staticInt36379;
+    static public int staticInt36380;
+    static public int staticInt36381;
+    static public int staticInt36382;
+    static public int staticInt36383;
+    static public int staticInt36384;
+    static public int staticInt36385;
+    static public int staticInt36386;
+    static public int staticInt36387;
+    static public int staticInt36388;
+    static public int staticInt36389;
+    static public int staticInt36390;
+    static public int staticInt36391;
+    static public int staticInt36392;
+    static public int staticInt36393;
+    static public int staticInt36394;
+    static public int staticInt36395;
+    static public int staticInt36396;
+    static public int staticInt36397;
+    static public int staticInt36398;
+    static public int staticInt36399;
+    static public int staticInt36400;
+    static public int staticInt36401;
+    static public int staticInt36402;
+    static public int staticInt36403;
+    static public int staticInt36404;
+    static public int staticInt36405;
+    static public int staticInt36406;
+    static public int staticInt36407;
+    static public int staticInt36408;
+    static public int staticInt36409;
+    static public int staticInt36410;
+    static public int staticInt36411;
+    static public int staticInt36412;
+    static public int staticInt36413;
+    static public int staticInt36414;
+    static public int staticInt36415;
+    static public int staticInt36416;
+    static public int staticInt36417;
+    static public int staticInt36418;
+    static public int staticInt36419;
+    static public int staticInt36420;
+    static public int staticInt36421;
+    static public int staticInt36422;
+    static public int staticInt36423;
+    static public int staticInt36424;
+    static public int staticInt36425;
+    static public int staticInt36426;
+    static public int staticInt36427;
+    static public int staticInt36428;
+    static public int staticInt36429;
+    static public int staticInt36430;
+    static public int staticInt36431;
+    static public int staticInt36432;
+    static public int staticInt36433;
+    static public int staticInt36434;
+    static public int staticInt36435;
+    static public int staticInt36436;
+    static public int staticInt36437;
+    static public int staticInt36438;
+    static public int staticInt36439;
+    static public int staticInt36440;
+    static public int staticInt36441;
+    static public int staticInt36442;
+    static public int staticInt36443;
+    static public int staticInt36444;
+    static public int staticInt36445;
+    static public int staticInt36446;
+    static public int staticInt36447;
+    static public int staticInt36448;
+    static public int staticInt36449;
+    static public int staticInt36450;
+    static public int staticInt36451;
+    static public int staticInt36452;
+    static public int staticInt36453;
+    static public int staticInt36454;
+    static public int staticInt36455;
+    static public int staticInt36456;
+    static public int staticInt36457;
+    static public int staticInt36458;
+    static public int staticInt36459;
+    static public int staticInt36460;
+    static public int staticInt36461;
+    static public int staticInt36462;
+    static public int staticInt36463;
+    static public int staticInt36464;
+    static public int staticInt36465;
+    static public int staticInt36466;
+    static public int staticInt36467;
+    static public int staticInt36468;
+    static public int staticInt36469;
+    static public int staticInt36470;
+    static public int staticInt36471;
+    static public int staticInt36472;
+    static public int staticInt36473;
+    static public int staticInt36474;
+    static public int staticInt36475;
+    static public int staticInt36476;
+    static public int staticInt36477;
+    static public int staticInt36478;
+    static public int staticInt36479;
+    static public int staticInt36480;
+    static public int staticInt36481;
+    static public int staticInt36482;
+    static public int staticInt36483;
+    static public int staticInt36484;
+    static public int staticInt36485;
+    static public int staticInt36486;
+    static public int staticInt36487;
+    static public int staticInt36488;
+    static public int staticInt36489;
+    static public int staticInt36490;
+    static public int staticInt36491;
+    static public int staticInt36492;
+    static public int staticInt36493;
+    static public int staticInt36494;
+    static public int staticInt36495;
+    static public int staticInt36496;
+    static public int staticInt36497;
+    static public int staticInt36498;
+    static public int staticInt36499;
+    static public int staticInt36500;
+    static public int staticInt36501;
+    static public int staticInt36502;
+    static public int staticInt36503;
+    static public int staticInt36504;
+    static public int staticInt36505;
+    static public int staticInt36506;
+    static public int staticInt36507;
+    static public int staticInt36508;
+    static public int staticInt36509;
+    static public int staticInt36510;
+    static public int staticInt36511;
+    static public int staticInt36512;
+    static public int staticInt36513;
+    static public int staticInt36514;
+    static public int staticInt36515;
+    static public int staticInt36516;
+    static public int staticInt36517;
+    static public int staticInt36518;
+    static public int staticInt36519;
+    static public int staticInt36520;
+    static public int staticInt36521;
+    static public int staticInt36522;
+    static public int staticInt36523;
+    static public int staticInt36524;
+    static public int staticInt36525;
+    static public int staticInt36526;
+    static public int staticInt36527;
+    static public int staticInt36528;
+    static public int staticInt36529;
+    static public int staticInt36530;
+    static public int staticInt36531;
+    static public int staticInt36532;
+    static public int staticInt36533;
+    static public int staticInt36534;
+    static public int staticInt36535;
+    static public int staticInt36536;
+    static public int staticInt36537;
+    static public int staticInt36538;
+    static public int staticInt36539;
+    static public int staticInt36540;
+    static public int staticInt36541;
+    static public int staticInt36542;
+    static public int staticInt36543;
+    static public int staticInt36544;
+    static public int staticInt36545;
+    static public int staticInt36546;
+    static public int staticInt36547;
+    static public int staticInt36548;
+    static public int staticInt36549;
+    static public int staticInt36550;
+    static public int staticInt36551;
+    static public int staticInt36552;
+    static public int staticInt36553;
+    static public int staticInt36554;
+    static public int staticInt36555;
+    static public int staticInt36556;
+    static public int staticInt36557;
+    static public int staticInt36558;
+    static public int staticInt36559;
+    static public int staticInt36560;
+    static public int staticInt36561;
+    static public int staticInt36562;
+    static public int staticInt36563;
+    static public int staticInt36564;
+    static public int staticInt36565;
+    static public int staticInt36566;
+    static public int staticInt36567;
+    static public int staticInt36568;
+    static public int staticInt36569;
+    static public int staticInt36570;
+    static public int staticInt36571;
+    static public int staticInt36572;
+    static public int staticInt36573;
+    static public int staticInt36574;
+    static public int staticInt36575;
+    static public int staticInt36576;
+    static public int staticInt36577;
+    static public int staticInt36578;
+    static public int staticInt36579;
+    static public int staticInt36580;
+    static public int staticInt36581;
+    static public int staticInt36582;
+    static public int staticInt36583;
+    static public int staticInt36584;
+    static public int staticInt36585;
+    static public int staticInt36586;
+    static public int staticInt36587;
+    static public int staticInt36588;
+    static public int staticInt36589;
+    static public int staticInt36590;
+    static public int staticInt36591;
+    static public int staticInt36592;
+    static public int staticInt36593;
+    static public int staticInt36594;
+    static public int staticInt36595;
+    static public int staticInt36596;
+    static public int staticInt36597;
+    static public int staticInt36598;
+    static public int staticInt36599;
+    static public int staticInt36600;
+    static public int staticInt36601;
+    static public int staticInt36602;
+    static public int staticInt36603;
+    static public int staticInt36604;
+    static public int staticInt36605;
+    static public int staticInt36606;
+    static public int staticInt36607;
+    static public int staticInt36608;
+    static public int staticInt36609;
+    static public int staticInt36610;
+    static public int staticInt36611;
+    static public int staticInt36612;
+    static public int staticInt36613;
+    static public int staticInt36614;
+    static public int staticInt36615;
+    static public int staticInt36616;
+    static public int staticInt36617;
+    static public int staticInt36618;
+    static public int staticInt36619;
+    static public int staticInt36620;
+    static public int staticInt36621;
+    static public int staticInt36622;
+    static public int staticInt36623;
+    static public int staticInt36624;
+    static public int staticInt36625;
+    static public int staticInt36626;
+    static public int staticInt36627;
+    static public int staticInt36628;
+    static public int staticInt36629;
+    static public int staticInt36630;
+    static public int staticInt36631;
+    static public int staticInt36632;
+    static public int staticInt36633;
+    static public int staticInt36634;
+    static public int staticInt36635;
+    static public int staticInt36636;
+    static public int staticInt36637;
+    static public int staticInt36638;
+    static public int staticInt36639;
+    static public int staticInt36640;
+    static public int staticInt36641;
+    static public int staticInt36642;
+    static public int staticInt36643;
+    static public int staticInt36644;
+    static public int staticInt36645;
+    static public int staticInt36646;
+    static public int staticInt36647;
+    static public int staticInt36648;
+    static public int staticInt36649;
+    static public int staticInt36650;
+    static public int staticInt36651;
+    static public int staticInt36652;
+    static public int staticInt36653;
+    static public int staticInt36654;
+    static public int staticInt36655;
+    static public int staticInt36656;
+    static public int staticInt36657;
+    static public int staticInt36658;
+    static public int staticInt36659;
+    static public int staticInt36660;
+    static public int staticInt36661;
+    static public int staticInt36662;
+    static public int staticInt36663;
+    static public int staticInt36664;
+    static public int staticInt36665;
+    static public int staticInt36666;
+    static public int staticInt36667;
+    static public int staticInt36668;
+    static public int staticInt36669;
+    static public int staticInt36670;
+    static public int staticInt36671;
+    static public int staticInt36672;
+    static public int staticInt36673;
+    static public int staticInt36674;
+    static public int staticInt36675;
+    static public int staticInt36676;
+    static public int staticInt36677;
+    static public int staticInt36678;
+    static public int staticInt36679;
+    static public int staticInt36680;
+    static public int staticInt36681;
+    static public int staticInt36682;
+    static public int staticInt36683;
+    static public int staticInt36684;
+    static public int staticInt36685;
+    static public int staticInt36686;
+    static public int staticInt36687;
+    static public int staticInt36688;
+    static public int staticInt36689;
+    static public int staticInt36690;
+    static public int staticInt36691;
+    static public int staticInt36692;
+    static public int staticInt36693;
+    static public int staticInt36694;
+    static public int staticInt36695;
+    static public int staticInt36696;
+    static public int staticInt36697;
+    static public int staticInt36698;
+    static public int staticInt36699;
+    static public int staticInt36700;
+    static public int staticInt36701;
+    static public int staticInt36702;
+    static public int staticInt36703;
+    static public int staticInt36704;
+    static public int staticInt36705;
+    static public int staticInt36706;
+    static public int staticInt36707;
+    static public int staticInt36708;
+    static public int staticInt36709;
+    static public int staticInt36710;
+    static public int staticInt36711;
+    static public int staticInt36712;
+    static public int staticInt36713;
+    static public int staticInt36714;
+    static public int staticInt36715;
+    static public int staticInt36716;
+    static public int staticInt36717;
+    static public int staticInt36718;
+    static public int staticInt36719;
+    static public int staticInt36720;
+    static public int staticInt36721;
+    static public int staticInt36722;
+    static public int staticInt36723;
+    static public int staticInt36724;
+    static public int staticInt36725;
+    static public int staticInt36726;
+    static public int staticInt36727;
+    static public int staticInt36728;
+    static public int staticInt36729;
+    static public int staticInt36730;
+    static public int staticInt36731;
+    static public int staticInt36732;
+    static public int staticInt36733;
+    static public int staticInt36734;
+    static public int staticInt36735;
+    static public int staticInt36736;
+    static public int staticInt36737;
+    static public int staticInt36738;
+    static public int staticInt36739;
+    static public int staticInt36740;
+    static public int staticInt36741;
+    static public int staticInt36742;
+    static public int staticInt36743;
+    static public int staticInt36744;
+    static public int staticInt36745;
+    static public int staticInt36746;
+    static public int staticInt36747;
+    static public int staticInt36748;
+    static public int staticInt36749;
+    static public int staticInt36750;
+    static public int staticInt36751;
+    static public int staticInt36752;
+    static public int staticInt36753;
+    static public int staticInt36754;
+    static public int staticInt36755;
+    static public int staticInt36756;
+    static public int staticInt36757;
+    static public int staticInt36758;
+    static public int staticInt36759;
+    static public int staticInt36760;
+    static public int staticInt36761;
+    static public int staticInt36762;
+    static public int staticInt36763;
+    static public int staticInt36764;
+    static public int staticInt36765;
+    static public int staticInt36766;
+    static public int staticInt36767;
+    static public int staticInt36768;
+    static public int staticInt36769;
+    static public int staticInt36770;
+    static public int staticInt36771;
+    static public int staticInt36772;
+    static public int staticInt36773;
+    static public int staticInt36774;
+    static public int staticInt36775;
+    static public int staticInt36776;
+    static public int staticInt36777;
+    static public int staticInt36778;
+    static public int staticInt36779;
+    static public int staticInt36780;
+    static public int staticInt36781;
+    static public int staticInt36782;
+    static public int staticInt36783;
+    static public int staticInt36784;
+    static public int staticInt36785;
+    static public int staticInt36786;
+    static public int staticInt36787;
+    static public int staticInt36788;
+    static public int staticInt36789;
+    static public int staticInt36790;
+    static public int staticInt36791;
+    static public int staticInt36792;
+    static public int staticInt36793;
+    static public int staticInt36794;
+    static public int staticInt36795;
+    static public int staticInt36796;
+    static public int staticInt36797;
+    static public int staticInt36798;
+    static public int staticInt36799;
+    static public int staticInt36800;
+    static public int staticInt36801;
+    static public int staticInt36802;
+    static public int staticInt36803;
+    static public int staticInt36804;
+    static public int staticInt36805;
+    static public int staticInt36806;
+    static public int staticInt36807;
+    static public int staticInt36808;
+    static public int staticInt36809;
+    static public int staticInt36810;
+    static public int staticInt36811;
+    static public int staticInt36812;
+    static public int staticInt36813;
+    static public int staticInt36814;
+    static public int staticInt36815;
+    static public int staticInt36816;
+    static public int staticInt36817;
+    static public int staticInt36818;
+    static public int staticInt36819;
+    static public int staticInt36820;
+    static public int staticInt36821;
+    static public int staticInt36822;
+    static public int staticInt36823;
+    static public int staticInt36824;
+    static public int staticInt36825;
+    static public int staticInt36826;
+    static public int staticInt36827;
+    static public int staticInt36828;
+    static public int staticInt36829;
+    static public int staticInt36830;
+    static public int staticInt36831;
+    static public int staticInt36832;
+    static public int staticInt36833;
+    static public int staticInt36834;
+    static public int staticInt36835;
+    static public int staticInt36836;
+    static public int staticInt36837;
+    static public int staticInt36838;
+    static public int staticInt36839;
+    static public int staticInt36840;
+    static public int staticInt36841;
+    static public int staticInt36842;
+    static public int staticInt36843;
+    static public int staticInt36844;
+    static public int staticInt36845;
+    static public int staticInt36846;
+    static public int staticInt36847;
+    static public int staticInt36848;
+    static public int staticInt36849;
+    static public int staticInt36850;
+    static public int staticInt36851;
+    static public int staticInt36852;
+    static public int staticInt36853;
+    static public int staticInt36854;
+    static public int staticInt36855;
+    static public int staticInt36856;
+    static public int staticInt36857;
+    static public int staticInt36858;
+    static public int staticInt36859;
+    static public int staticInt36860;
+    static public int staticInt36861;
+    static public int staticInt36862;
+    static public int staticInt36863;
+    static public int staticInt36864;
+    static public int staticInt36865;
+    static public int staticInt36866;
+    static public int staticInt36867;
+    static public int staticInt36868;
+    static public int staticInt36869;
+    static public int staticInt36870;
+    static public int staticInt36871;
+    static public int staticInt36872;
+    static public int staticInt36873;
+    static public int staticInt36874;
+    static public int staticInt36875;
+    static public int staticInt36876;
+    static public int staticInt36877;
+    static public int staticInt36878;
+    static public int staticInt36879;
+    static public int staticInt36880;
+    static public int staticInt36881;
+    static public int staticInt36882;
+    static public int staticInt36883;
+    static public int staticInt36884;
+    static public int staticInt36885;
+    static public int staticInt36886;
+    static public int staticInt36887;
+    static public int staticInt36888;
+    static public int staticInt36889;
+    static public int staticInt36890;
+    static public int staticInt36891;
+    static public int staticInt36892;
+    static public int staticInt36893;
+    static public int staticInt36894;
+    static public int staticInt36895;
+    static public int staticInt36896;
+    static public int staticInt36897;
+    static public int staticInt36898;
+    static public int staticInt36899;
+    static public int staticInt36900;
+    static public int staticInt36901;
+    static public int staticInt36902;
+    static public int staticInt36903;
+    static public int staticInt36904;
+    static public int staticInt36905;
+    static public int staticInt36906;
+    static public int staticInt36907;
+    static public int staticInt36908;
+    static public int staticInt36909;
+    static public int staticInt36910;
+    static public int staticInt36911;
+    static public int staticInt36912;
+    static public int staticInt36913;
+    static public int staticInt36914;
+    static public int staticInt36915;
+    static public int staticInt36916;
+    static public int staticInt36917;
+    static public int staticInt36918;
+    static public int staticInt36919;
+    static public int staticInt36920;
+    static public int staticInt36921;
+    static public int staticInt36922;
+    static public int staticInt36923;
+    static public int staticInt36924;
+    static public int staticInt36925;
+    static public int staticInt36926;
+    static public int staticInt36927;
+    static public int staticInt36928;
+    static public int staticInt36929;
+    static public int staticInt36930;
+    static public int staticInt36931;
+    static public int staticInt36932;
+    static public int staticInt36933;
+    static public int staticInt36934;
+    static public int staticInt36935;
+    static public int staticInt36936;
+    static public int staticInt36937;
+    static public int staticInt36938;
+    static public int staticInt36939;
+    static public int staticInt36940;
+    static public int staticInt36941;
+    static public int staticInt36942;
+    static public int staticInt36943;
+    static public int staticInt36944;
+    static public int staticInt36945;
+    static public int staticInt36946;
+    static public int staticInt36947;
+    static public int staticInt36948;
+    static public int staticInt36949;
+    static public int staticInt36950;
+    static public int staticInt36951;
+    static public int staticInt36952;
+    static public int staticInt36953;
+    static public int staticInt36954;
+    static public int staticInt36955;
+    static public int staticInt36956;
+    static public int staticInt36957;
+    static public int staticInt36958;
+    static public int staticInt36959;
+    static public int staticInt36960;
+    static public int staticInt36961;
+    static public int staticInt36962;
+    static public int staticInt36963;
+    static public int staticInt36964;
+    static public int staticInt36965;
+    static public int staticInt36966;
+    static public int staticInt36967;
+    static public int staticInt36968;
+    static public int staticInt36969;
+    static public int staticInt36970;
+    static public int staticInt36971;
+    static public int staticInt36972;
+    static public int staticInt36973;
+    static public int staticInt36974;
+    static public int staticInt36975;
+    static public int staticInt36976;
+    static public int staticInt36977;
+    static public int staticInt36978;
+    static public int staticInt36979;
+    static public int staticInt36980;
+    static public int staticInt36981;
+    static public int staticInt36982;
+    static public int staticInt36983;
+    static public int staticInt36984;
+    static public int staticInt36985;
+    static public int staticInt36986;
+    static public int staticInt36987;
+    static public int staticInt36988;
+    static public int staticInt36989;
+    static public int staticInt36990;
+    static public int staticInt36991;
+    static public int staticInt36992;
+    static public int staticInt36993;
+    static public int staticInt36994;
+    static public int staticInt36995;
+    static public int staticInt36996;
+    static public int staticInt36997;
+    static public int staticInt36998;
+    static public int staticInt36999;
+    static public int staticInt37000;
+    static public int staticInt37001;
+    static public int staticInt37002;
+    static public int staticInt37003;
+    static public int staticInt37004;
+    static public int staticInt37005;
+    static public int staticInt37006;
+    static public int staticInt37007;
+    static public int staticInt37008;
+    static public int staticInt37009;
+    static public int staticInt37010;
+    static public int staticInt37011;
+    static public int staticInt37012;
+    static public int staticInt37013;
+    static public int staticInt37014;
+    static public int staticInt37015;
+    static public int staticInt37016;
+    static public int staticInt37017;
+    static public int staticInt37018;
+    static public int staticInt37019;
+    static public int staticInt37020;
+    static public int staticInt37021;
+    static public int staticInt37022;
+    static public int staticInt37023;
+    static public int staticInt37024;
+    static public int staticInt37025;
+    static public int staticInt37026;
+    static public int staticInt37027;
+    static public int staticInt37028;
+    static public int staticInt37029;
+    static public int staticInt37030;
+    static public int staticInt37031;
+    static public int staticInt37032;
+    static public int staticInt37033;
+    static public int staticInt37034;
+    static public int staticInt37035;
+    static public int staticInt37036;
+    static public int staticInt37037;
+    static public int staticInt37038;
+    static public int staticInt37039;
+    static public int staticInt37040;
+    static public int staticInt37041;
+    static public int staticInt37042;
+    static public int staticInt37043;
+    static public int staticInt37044;
+    static public int staticInt37045;
+    static public int staticInt37046;
+    static public int staticInt37047;
+    static public int staticInt37048;
+    static public int staticInt37049;
+    static public int staticInt37050;
+    static public int staticInt37051;
+    static public int staticInt37052;
+    static public int staticInt37053;
+    static public int staticInt37054;
+    static public int staticInt37055;
+    static public int staticInt37056;
+    static public int staticInt37057;
+    static public int staticInt37058;
+    static public int staticInt37059;
+    static public int staticInt37060;
+    static public int staticInt37061;
+    static public int staticInt37062;
+    static public int staticInt37063;
+    static public int staticInt37064;
+    static public int staticInt37065;
+    static public int staticInt37066;
+    static public int staticInt37067;
+    static public int staticInt37068;
+    static public int staticInt37069;
+    static public int staticInt37070;
+    static public int staticInt37071;
+    static public int staticInt37072;
+    static public int staticInt37073;
+    static public int staticInt37074;
+    static public int staticInt37075;
+    static public int staticInt37076;
+    static public int staticInt37077;
+    static public int staticInt37078;
+    static public int staticInt37079;
+    static public int staticInt37080;
+    static public int staticInt37081;
+    static public int staticInt37082;
+    static public int staticInt37083;
+    static public int staticInt37084;
+    static public int staticInt37085;
+    static public int staticInt37086;
+    static public int staticInt37087;
+    static public int staticInt37088;
+    static public int staticInt37089;
+    static public int staticInt37090;
+    static public int staticInt37091;
+    static public int staticInt37092;
+    static public int staticInt37093;
+    static public int staticInt37094;
+    static public int staticInt37095;
+    static public int staticInt37096;
+    static public int staticInt37097;
+    static public int staticInt37098;
+    static public int staticInt37099;
+    static public int staticInt37100;
+    static public int staticInt37101;
+    static public int staticInt37102;
+    static public int staticInt37103;
+    static public int staticInt37104;
+    static public int staticInt37105;
+    static public int staticInt37106;
+    static public int staticInt37107;
+    static public int staticInt37108;
+    static public int staticInt37109;
+    static public int staticInt37110;
+    static public int staticInt37111;
+    static public int staticInt37112;
+    static public int staticInt37113;
+    static public int staticInt37114;
+    static public int staticInt37115;
+    static public int staticInt37116;
+    static public int staticInt37117;
+    static public int staticInt37118;
+    static public int staticInt37119;
+    static public int staticInt37120;
+    static public int staticInt37121;
+    static public int staticInt37122;
+    static public int staticInt37123;
+    static public int staticInt37124;
+    static public int staticInt37125;
+    static public int staticInt37126;
+    static public int staticInt37127;
+    static public int staticInt37128;
+    static public int staticInt37129;
+    static public int staticInt37130;
+    static public int staticInt37131;
+    static public int staticInt37132;
+    static public int staticInt37133;
+    static public int staticInt37134;
+    static public int staticInt37135;
+    static public int staticInt37136;
+    static public int staticInt37137;
+    static public int staticInt37138;
+    static public int staticInt37139;
+    static public int staticInt37140;
+    static public int staticInt37141;
+    static public int staticInt37142;
+    static public int staticInt37143;
+    static public int staticInt37144;
+    static public int staticInt37145;
+    static public int staticInt37146;
+    static public int staticInt37147;
+    static public int staticInt37148;
+    static public int staticInt37149;
+    static public int staticInt37150;
+    static public int staticInt37151;
+    static public int staticInt37152;
+    static public int staticInt37153;
+    static public int staticInt37154;
+    static public int staticInt37155;
+    static public int staticInt37156;
+    static public int staticInt37157;
+    static public int staticInt37158;
+    static public int staticInt37159;
+    static public int staticInt37160;
+    static public int staticInt37161;
+    static public int staticInt37162;
+    static public int staticInt37163;
+    static public int staticInt37164;
+    static public int staticInt37165;
+    static public int staticInt37166;
+    static public int staticInt37167;
+    static public int staticInt37168;
+    static public int staticInt37169;
+    static public int staticInt37170;
+    static public int staticInt37171;
+    static public int staticInt37172;
+    static public int staticInt37173;
+    static public int staticInt37174;
+    static public int staticInt37175;
+    static public int staticInt37176;
+    static public int staticInt37177;
+    static public int staticInt37178;
+    static public int staticInt37179;
+    static public int staticInt37180;
+    static public int staticInt37181;
+    static public int staticInt37182;
+    static public int staticInt37183;
+    static public int staticInt37184;
+    static public int staticInt37185;
+    static public int staticInt37186;
+    static public int staticInt37187;
+    static public int staticInt37188;
+    static public int staticInt37189;
+    static public int staticInt37190;
+    static public int staticInt37191;
+    static public int staticInt37192;
+    static public int staticInt37193;
+    static public int staticInt37194;
+    static public int staticInt37195;
+    static public int staticInt37196;
+    static public int staticInt37197;
+    static public int staticInt37198;
+    static public int staticInt37199;
+    static public int staticInt37200;
+    static public int staticInt37201;
+    static public int staticInt37202;
+    static public int staticInt37203;
+    static public int staticInt37204;
+    static public int staticInt37205;
+    static public int staticInt37206;
+    static public int staticInt37207;
+    static public int staticInt37208;
+    static public int staticInt37209;
+    static public int staticInt37210;
+    static public int staticInt37211;
+    static public int staticInt37212;
+    static public int staticInt37213;
+    static public int staticInt37214;
+    static public int staticInt37215;
+    static public int staticInt37216;
+    static public int staticInt37217;
+    static public int staticInt37218;
+    static public int staticInt37219;
+    static public int staticInt37220;
+    static public int staticInt37221;
+    static public int staticInt37222;
+    static public int staticInt37223;
+    static public int staticInt37224;
+    static public int staticInt37225;
+    static public int staticInt37226;
+    static public int staticInt37227;
+    static public int staticInt37228;
+    static public int staticInt37229;
+    static public int staticInt37230;
+    static public int staticInt37231;
+    static public int staticInt37232;
+    static public int staticInt37233;
+    static public int staticInt37234;
+    static public int staticInt37235;
+    static public int staticInt37236;
+    static public int staticInt37237;
+    static public int staticInt37238;
+    static public int staticInt37239;
+    static public int staticInt37240;
+    static public int staticInt37241;
+    static public int staticInt37242;
+    static public int staticInt37243;
+    static public int staticInt37244;
+    static public int staticInt37245;
+    static public int staticInt37246;
+    static public int staticInt37247;
+    static public int staticInt37248;
+    static public int staticInt37249;
+    static public int staticInt37250;
+    static public int staticInt37251;
+    static public int staticInt37252;
+    static public int staticInt37253;
+    static public int staticInt37254;
+    static public int staticInt37255;
+    static public int staticInt37256;
+    static public int staticInt37257;
+    static public int staticInt37258;
+    static public int staticInt37259;
+    static public int staticInt37260;
+    static public int staticInt37261;
+    static public int staticInt37262;
+    static public int staticInt37263;
+    static public int staticInt37264;
+    static public int staticInt37265;
+    static public int staticInt37266;
+    static public int staticInt37267;
+    static public int staticInt37268;
+    static public int staticInt37269;
+    static public int staticInt37270;
+    static public int staticInt37271;
+    static public int staticInt37272;
+    static public int staticInt37273;
+    static public int staticInt37274;
+    static public int staticInt37275;
+    static public int staticInt37276;
+    static public int staticInt37277;
+    static public int staticInt37278;
+    static public int staticInt37279;
+    static public int staticInt37280;
+    static public int staticInt37281;
+    static public int staticInt37282;
+    static public int staticInt37283;
+    static public int staticInt37284;
+    static public int staticInt37285;
+    static public int staticInt37286;
+    static public int staticInt37287;
+    static public int staticInt37288;
+    static public int staticInt37289;
+    static public int staticInt37290;
+    static public int staticInt37291;
+    static public int staticInt37292;
+    static public int staticInt37293;
+    static public int staticInt37294;
+    static public int staticInt37295;
+    static public int staticInt37296;
+    static public int staticInt37297;
+    static public int staticInt37298;
+    static public int staticInt37299;
+    static public int staticInt37300;
+    static public int staticInt37301;
+    static public int staticInt37302;
+    static public int staticInt37303;
+    static public int staticInt37304;
+    static public int staticInt37305;
+    static public int staticInt37306;
+    static public int staticInt37307;
+    static public int staticInt37308;
+    static public int staticInt37309;
+    static public int staticInt37310;
+    static public int staticInt37311;
+    static public int staticInt37312;
+    static public int staticInt37313;
+    static public int staticInt37314;
+    static public int staticInt37315;
+    static public int staticInt37316;
+    static public int staticInt37317;
+    static public int staticInt37318;
+    static public int staticInt37319;
+    static public int staticInt37320;
+    static public int staticInt37321;
+    static public int staticInt37322;
+    static public int staticInt37323;
+    static public int staticInt37324;
+    static public int staticInt37325;
+    static public int staticInt37326;
+    static public int staticInt37327;
+    static public int staticInt37328;
+    static public int staticInt37329;
+    static public int staticInt37330;
+    static public int staticInt37331;
+    static public int staticInt37332;
+    static public int staticInt37333;
+    static public int staticInt37334;
+    static public int staticInt37335;
+    static public int staticInt37336;
+    static public int staticInt37337;
+    static public int staticInt37338;
+    static public int staticInt37339;
+    static public int staticInt37340;
+    static public int staticInt37341;
+    static public int staticInt37342;
+    static public int staticInt37343;
+    static public int staticInt37344;
+    static public int staticInt37345;
+    static public int staticInt37346;
+    static public int staticInt37347;
+    static public int staticInt37348;
+    static public int staticInt37349;
+    static public int staticInt37350;
+    static public int staticInt37351;
+    static public int staticInt37352;
+    static public int staticInt37353;
+    static public int staticInt37354;
+    static public int staticInt37355;
+    static public int staticInt37356;
+    static public int staticInt37357;
+    static public int staticInt37358;
+    static public int staticInt37359;
+    static public int staticInt37360;
+    static public int staticInt37361;
+    static public int staticInt37362;
+    static public int staticInt37363;
+    static public int staticInt37364;
+    static public int staticInt37365;
+    static public int staticInt37366;
+    static public int staticInt37367;
+    static public int staticInt37368;
+    static public int staticInt37369;
+    static public int staticInt37370;
+    static public int staticInt37371;
+    static public int staticInt37372;
+    static public int staticInt37373;
+    static public int staticInt37374;
+    static public int staticInt37375;
+    static public int staticInt37376;
+    static public int staticInt37377;
+    static public int staticInt37378;
+    static public int staticInt37379;
+    static public int staticInt37380;
+    static public int staticInt37381;
+    static public int staticInt37382;
+    static public int staticInt37383;
+    static public int staticInt37384;
+    static public int staticInt37385;
+    static public int staticInt37386;
+    static public int staticInt37387;
+    static public int staticInt37388;
+    static public int staticInt37389;
+    static public int staticInt37390;
+    static public int staticInt37391;
+    static public int staticInt37392;
+    static public int staticInt37393;
+    static public int staticInt37394;
+    static public int staticInt37395;
+    static public int staticInt37396;
+    static public int staticInt37397;
+    static public int staticInt37398;
+    static public int staticInt37399;
+    static public int staticInt37400;
+    static public int staticInt37401;
+    static public int staticInt37402;
+    static public int staticInt37403;
+    static public int staticInt37404;
+    static public int staticInt37405;
+    static public int staticInt37406;
+    static public int staticInt37407;
+    static public int staticInt37408;
+    static public int staticInt37409;
+    static public int staticInt37410;
+    static public int staticInt37411;
+    static public int staticInt37412;
+    static public int staticInt37413;
+    static public int staticInt37414;
+    static public int staticInt37415;
+    static public int staticInt37416;
+    static public int staticInt37417;
+    static public int staticInt37418;
+    static public int staticInt37419;
+    static public int staticInt37420;
+    static public int staticInt37421;
+    static public int staticInt37422;
+    static public int staticInt37423;
+    static public int staticInt37424;
+    static public int staticInt37425;
+    static public int staticInt37426;
+    static public int staticInt37427;
+    static public int staticInt37428;
+    static public int staticInt37429;
+    static public int staticInt37430;
+    static public int staticInt37431;
+    static public int staticInt37432;
+    static public int staticInt37433;
+    static public int staticInt37434;
+    static public int staticInt37435;
+    static public int staticInt37436;
+    static public int staticInt37437;
+    static public int staticInt37438;
+    static public int staticInt37439;
+    static public int staticInt37440;
+    static public int staticInt37441;
+    static public int staticInt37442;
+    static public int staticInt37443;
+    static public int staticInt37444;
+    static public int staticInt37445;
+    static public int staticInt37446;
+    static public int staticInt37447;
+    static public int staticInt37448;
+    static public int staticInt37449;
+    static public int staticInt37450;
+    static public int staticInt37451;
+    static public int staticInt37452;
+    static public int staticInt37453;
+    static public int staticInt37454;
+    static public int staticInt37455;
+    static public int staticInt37456;
+    static public int staticInt37457;
+    static public int staticInt37458;
+    static public int staticInt37459;
+    static public int staticInt37460;
+    static public int staticInt37461;
+    static public int staticInt37462;
+    static public int staticInt37463;
+    static public int staticInt37464;
+    static public int staticInt37465;
+    static public int staticInt37466;
+    static public int staticInt37467;
+    static public int staticInt37468;
+    static public int staticInt37469;
+    static public int staticInt37470;
+    static public int staticInt37471;
+    static public int staticInt37472;
+    static public int staticInt37473;
+    static public int staticInt37474;
+    static public int staticInt37475;
+    static public int staticInt37476;
+    static public int staticInt37477;
+    static public int staticInt37478;
+    static public int staticInt37479;
+    static public int staticInt37480;
+    static public int staticInt37481;
+    static public int staticInt37482;
+    static public int staticInt37483;
+    static public int staticInt37484;
+    static public int staticInt37485;
+    static public int staticInt37486;
+    static public int staticInt37487;
+    static public int staticInt37488;
+    static public int staticInt37489;
+    static public int staticInt37490;
+    static public int staticInt37491;
+    static public int staticInt37492;
+    static public int staticInt37493;
+    static public int staticInt37494;
+    static public int staticInt37495;
+    static public int staticInt37496;
+    static public int staticInt37497;
+    static public int staticInt37498;
+    static public int staticInt37499;
+    static public int staticInt37500;
+    static public int staticInt37501;
+    static public int staticInt37502;
+    static public int staticInt37503;
+    static public int staticInt37504;
+    static public int staticInt37505;
+    static public int staticInt37506;
+    static public int staticInt37507;
+    static public int staticInt37508;
+    static public int staticInt37509;
+    static public int staticInt37510;
+    static public int staticInt37511;
+    static public int staticInt37512;
+    static public int staticInt37513;
+    static public int staticInt37514;
+    static public int staticInt37515;
+    static public int staticInt37516;
+    static public int staticInt37517;
+    static public int staticInt37518;
+    static public int staticInt37519;
+    static public int staticInt37520;
+    static public int staticInt37521;
+    static public int staticInt37522;
+    static public int staticInt37523;
+    static public int staticInt37524;
+    static public int staticInt37525;
+    static public int staticInt37526;
+    static public int staticInt37527;
+    static public int staticInt37528;
+    static public int staticInt37529;
+    static public int staticInt37530;
+    static public int staticInt37531;
+    static public int staticInt37532;
+    static public int staticInt37533;
+    static public int staticInt37534;
+    static public int staticInt37535;
+    static public int staticInt37536;
+    static public int staticInt37537;
+    static public int staticInt37538;
+    static public int staticInt37539;
+    static public int staticInt37540;
+    static public int staticInt37541;
+    static public int staticInt37542;
+    static public int staticInt37543;
+    static public int staticInt37544;
+    static public int staticInt37545;
+    static public int staticInt37546;
+    static public int staticInt37547;
+    static public int staticInt37548;
+    static public int staticInt37549;
+    static public int staticInt37550;
+    static public int staticInt37551;
+    static public int staticInt37552;
+    static public int staticInt37553;
+    static public int staticInt37554;
+    static public int staticInt37555;
+    static public int staticInt37556;
+    static public int staticInt37557;
+    static public int staticInt37558;
+    static public int staticInt37559;
+    static public int staticInt37560;
+    static public int staticInt37561;
+    static public int staticInt37562;
+    static public int staticInt37563;
+    static public int staticInt37564;
+    static public int staticInt37565;
+    static public int staticInt37566;
+    static public int staticInt37567;
+    static public int staticInt37568;
+    static public int staticInt37569;
+    static public int staticInt37570;
+    static public int staticInt37571;
+    static public int staticInt37572;
+    static public int staticInt37573;
+    static public int staticInt37574;
+    static public int staticInt37575;
+    static public int staticInt37576;
+    static public int staticInt37577;
+    static public int staticInt37578;
+    static public int staticInt37579;
+    static public int staticInt37580;
+    static public int staticInt37581;
+    static public int staticInt37582;
+    static public int staticInt37583;
+    static public int staticInt37584;
+    static public int staticInt37585;
+    static public int staticInt37586;
+    static public int staticInt37587;
+    static public int staticInt37588;
+    static public int staticInt37589;
+    static public int staticInt37590;
+    static public int staticInt37591;
+    static public int staticInt37592;
+    static public int staticInt37593;
+    static public int staticInt37594;
+    static public int staticInt37595;
+    static public int staticInt37596;
+    static public int staticInt37597;
+    static public int staticInt37598;
+    static public int staticInt37599;
+    static public int staticInt37600;
+    static public int staticInt37601;
+    static public int staticInt37602;
+    static public int staticInt37603;
+    static public int staticInt37604;
+    static public int staticInt37605;
+    static public int staticInt37606;
+    static public int staticInt37607;
+    static public int staticInt37608;
+    static public int staticInt37609;
+    static public int staticInt37610;
+    static public int staticInt37611;
+    static public int staticInt37612;
+    static public int staticInt37613;
+    static public int staticInt37614;
+    static public int staticInt37615;
+    static public int staticInt37616;
+    static public int staticInt37617;
+    static public int staticInt37618;
+    static public int staticInt37619;
+    static public int staticInt37620;
+    static public int staticInt37621;
+    static public int staticInt37622;
+    static public int staticInt37623;
+    static public int staticInt37624;
+    static public int staticInt37625;
+    static public int staticInt37626;
+    static public int staticInt37627;
+    static public int staticInt37628;
+    static public int staticInt37629;
+    static public int staticInt37630;
+    static public int staticInt37631;
+    static public int staticInt37632;
+    static public int staticInt37633;
+    static public int staticInt37634;
+    static public int staticInt37635;
+    static public int staticInt37636;
+    static public int staticInt37637;
+    static public int staticInt37638;
+    static public int staticInt37639;
+    static public int staticInt37640;
+    static public int staticInt37641;
+    static public int staticInt37642;
+    static public int staticInt37643;
+    static public int staticInt37644;
+    static public int staticInt37645;
+    static public int staticInt37646;
+    static public int staticInt37647;
+    static public int staticInt37648;
+    static public int staticInt37649;
+    static public int staticInt37650;
+    static public int staticInt37651;
+    static public int staticInt37652;
+    static public int staticInt37653;
+    static public int staticInt37654;
+    static public int staticInt37655;
+    static public int staticInt37656;
+    static public int staticInt37657;
+    static public int staticInt37658;
+    static public int staticInt37659;
+    static public int staticInt37660;
+    static public int staticInt37661;
+    static public int staticInt37662;
+    static public int staticInt37663;
+    static public int staticInt37664;
+    static public int staticInt37665;
+    static public int staticInt37666;
+    static public int staticInt37667;
+    static public int staticInt37668;
+    static public int staticInt37669;
+    static public int staticInt37670;
+    static public int staticInt37671;
+    static public int staticInt37672;
+    static public int staticInt37673;
+    static public int staticInt37674;
+    static public int staticInt37675;
+    static public int staticInt37676;
+    static public int staticInt37677;
+    static public int staticInt37678;
+    static public int staticInt37679;
+    static public int staticInt37680;
+    static public int staticInt37681;
+    static public int staticInt37682;
+    static public int staticInt37683;
+    static public int staticInt37684;
+    static public int staticInt37685;
+    static public int staticInt37686;
+    static public int staticInt37687;
+    static public int staticInt37688;
+    static public int staticInt37689;
+    static public int staticInt37690;
+    static public int staticInt37691;
+    static public int staticInt37692;
+    static public int staticInt37693;
+    static public int staticInt37694;
+    static public int staticInt37695;
+    static public int staticInt37696;
+    static public int staticInt37697;
+    static public int staticInt37698;
+    static public int staticInt37699;
+    static public int staticInt37700;
+    static public int staticInt37701;
+    static public int staticInt37702;
+    static public int staticInt37703;
+    static public int staticInt37704;
+    static public int staticInt37705;
+    static public int staticInt37706;
+    static public int staticInt37707;
+    static public int staticInt37708;
+    static public int staticInt37709;
+    static public int staticInt37710;
+    static public int staticInt37711;
+    static public int staticInt37712;
+    static public int staticInt37713;
+    static public int staticInt37714;
+    static public int staticInt37715;
+    static public int staticInt37716;
+    static public int staticInt37717;
+    static public int staticInt37718;
+    static public int staticInt37719;
+    static public int staticInt37720;
+    static public int staticInt37721;
+    static public int staticInt37722;
+    static public int staticInt37723;
+    static public int staticInt37724;
+    static public int staticInt37725;
+    static public int staticInt37726;
+    static public int staticInt37727;
+    static public int staticInt37728;
+    static public int staticInt37729;
+    static public int staticInt37730;
+    static public int staticInt37731;
+    static public int staticInt37732;
+    static public int staticInt37733;
+    static public int staticInt37734;
+    static public int staticInt37735;
+    static public int staticInt37736;
+    static public int staticInt37737;
+    static public int staticInt37738;
+    static public int staticInt37739;
+    static public int staticInt37740;
+    static public int staticInt37741;
+    static public int staticInt37742;
+    static public int staticInt37743;
+    static public int staticInt37744;
+    static public int staticInt37745;
+    static public int staticInt37746;
+    static public int staticInt37747;
+    static public int staticInt37748;
+    static public int staticInt37749;
+    static public int staticInt37750;
+    static public int staticInt37751;
+    static public int staticInt37752;
+    static public int staticInt37753;
+    static public int staticInt37754;
+    static public int staticInt37755;
+    static public int staticInt37756;
+    static public int staticInt37757;
+    static public int staticInt37758;
+    static public int staticInt37759;
+    static public int staticInt37760;
+    static public int staticInt37761;
+    static public int staticInt37762;
+    static public int staticInt37763;
+    static public int staticInt37764;
+    static public int staticInt37765;
+    static public int staticInt37766;
+    static public int staticInt37767;
+    static public int staticInt37768;
+    static public int staticInt37769;
+    static public int staticInt37770;
+    static public int staticInt37771;
+    static public int staticInt37772;
+    static public int staticInt37773;
+    static public int staticInt37774;
+    static public int staticInt37775;
+    static public int staticInt37776;
+    static public int staticInt37777;
+    static public int staticInt37778;
+    static public int staticInt37779;
+    static public int staticInt37780;
+    static public int staticInt37781;
+    static public int staticInt37782;
+    static public int staticInt37783;
+    static public int staticInt37784;
+    static public int staticInt37785;
+    static public int staticInt37786;
+    static public int staticInt37787;
+    static public int staticInt37788;
+    static public int staticInt37789;
+    static public int staticInt37790;
+    static public int staticInt37791;
+    static public int staticInt37792;
+    static public int staticInt37793;
+    static public int staticInt37794;
+    static public int staticInt37795;
+    static public int staticInt37796;
+    static public int staticInt37797;
+    static public int staticInt37798;
+    static public int staticInt37799;
+    static public int staticInt37800;
+    static public int staticInt37801;
+    static public int staticInt37802;
+    static public int staticInt37803;
+    static public int staticInt37804;
+    static public int staticInt37805;
+    static public int staticInt37806;
+    static public int staticInt37807;
+    static public int staticInt37808;
+    static public int staticInt37809;
+    static public int staticInt37810;
+    static public int staticInt37811;
+    static public int staticInt37812;
+    static public int staticInt37813;
+    static public int staticInt37814;
+    static public int staticInt37815;
+    static public int staticInt37816;
+    static public int staticInt37817;
+    static public int staticInt37818;
+    static public int staticInt37819;
+    static public int staticInt37820;
+    static public int staticInt37821;
+    static public int staticInt37822;
+    static public int staticInt37823;
+    static public int staticInt37824;
+    static public int staticInt37825;
+    static public int staticInt37826;
+    static public int staticInt37827;
+    static public int staticInt37828;
+    static public int staticInt37829;
+    static public int staticInt37830;
+    static public int staticInt37831;
+    static public int staticInt37832;
+    static public int staticInt37833;
+    static public int staticInt37834;
+    static public int staticInt37835;
+    static public int staticInt37836;
+    static public int staticInt37837;
+    static public int staticInt37838;
+    static public int staticInt37839;
+    static public int staticInt37840;
+    static public int staticInt37841;
+    static public int staticInt37842;
+    static public int staticInt37843;
+    static public int staticInt37844;
+    static public int staticInt37845;
+    static public int staticInt37846;
+    static public int staticInt37847;
+    static public int staticInt37848;
+    static public int staticInt37849;
+    static public int staticInt37850;
+    static public int staticInt37851;
+    static public int staticInt37852;
+    static public int staticInt37853;
+    static public int staticInt37854;
+    static public int staticInt37855;
+    static public int staticInt37856;
+    static public int staticInt37857;
+    static public int staticInt37858;
+    static public int staticInt37859;
+    static public int staticInt37860;
+    static public int staticInt37861;
+    static public int staticInt37862;
+    static public int staticInt37863;
+    static public int staticInt37864;
+    static public int staticInt37865;
+    static public int staticInt37866;
+    static public int staticInt37867;
+    static public int staticInt37868;
+    static public int staticInt37869;
+    static public int staticInt37870;
+    static public int staticInt37871;
+    static public int staticInt37872;
+    static public int staticInt37873;
+    static public int staticInt37874;
+    static public int staticInt37875;
+    static public int staticInt37876;
+    static public int staticInt37877;
+    static public int staticInt37878;
+    static public int staticInt37879;
+    static public int staticInt37880;
+    static public int staticInt37881;
+    static public int staticInt37882;
+    static public int staticInt37883;
+    static public int staticInt37884;
+    static public int staticInt37885;
+    static public int staticInt37886;
+    static public int staticInt37887;
+    static public int staticInt37888;
+    static public int staticInt37889;
+    static public int staticInt37890;
+    static public int staticInt37891;
+    static public int staticInt37892;
+    static public int staticInt37893;
+    static public int staticInt37894;
+    static public int staticInt37895;
+    static public int staticInt37896;
+    static public int staticInt37897;
+    static public int staticInt37898;
+    static public int staticInt37899;
+    static public int staticInt37900;
+    static public int staticInt37901;
+    static public int staticInt37902;
+    static public int staticInt37903;
+    static public int staticInt37904;
+    static public int staticInt37905;
+    static public int staticInt37906;
+    static public int staticInt37907;
+    static public int staticInt37908;
+    static public int staticInt37909;
+    static public int staticInt37910;
+    static public int staticInt37911;
+    static public int staticInt37912;
+    static public int staticInt37913;
+    static public int staticInt37914;
+    static public int staticInt37915;
+    static public int staticInt37916;
+    static public int staticInt37917;
+    static public int staticInt37918;
+    static public int staticInt37919;
+    static public int staticInt37920;
+    static public int staticInt37921;
+    static public int staticInt37922;
+    static public int staticInt37923;
+    static public int staticInt37924;
+    static public int staticInt37925;
+    static public int staticInt37926;
+    static public int staticInt37927;
+    static public int staticInt37928;
+    static public int staticInt37929;
+    static public int staticInt37930;
+    static public int staticInt37931;
+    static public int staticInt37932;
+    static public int staticInt37933;
+    static public int staticInt37934;
+    static public int staticInt37935;
+    static public int staticInt37936;
+    static public int staticInt37937;
+    static public int staticInt37938;
+    static public int staticInt37939;
+    static public int staticInt37940;
+    static public int staticInt37941;
+    static public int staticInt37942;
+    static public int staticInt37943;
+    static public int staticInt37944;
+    static public int staticInt37945;
+    static public int staticInt37946;
+    static public int staticInt37947;
+    static public int staticInt37948;
+    static public int staticInt37949;
+    static public int staticInt37950;
+    static public int staticInt37951;
+    static public int staticInt37952;
+    static public int staticInt37953;
+    static public int staticInt37954;
+    static public int staticInt37955;
+    static public int staticInt37956;
+    static public int staticInt37957;
+    static public int staticInt37958;
+    static public int staticInt37959;
+    static public int staticInt37960;
+    static public int staticInt37961;
+    static public int staticInt37962;
+    static public int staticInt37963;
+    static public int staticInt37964;
+    static public int staticInt37965;
+    static public int staticInt37966;
+    static public int staticInt37967;
+    static public int staticInt37968;
+    static public int staticInt37969;
+    static public int staticInt37970;
+    static public int staticInt37971;
+    static public int staticInt37972;
+    static public int staticInt37973;
+    static public int staticInt37974;
+    static public int staticInt37975;
+    static public int staticInt37976;
+    static public int staticInt37977;
+    static public int staticInt37978;
+    static public int staticInt37979;
+    static public int staticInt37980;
+    static public int staticInt37981;
+    static public int staticInt37982;
+    static public int staticInt37983;
+    static public int staticInt37984;
+    static public int staticInt37985;
+    static public int staticInt37986;
+    static public int staticInt37987;
+    static public int staticInt37988;
+    static public int staticInt37989;
+    static public int staticInt37990;
+    static public int staticInt37991;
+    static public int staticInt37992;
+    static public int staticInt37993;
+    static public int staticInt37994;
+    static public int staticInt37995;
+    static public int staticInt37996;
+    static public int staticInt37997;
+    static public int staticInt37998;
+    static public int staticInt37999;
+    static public int staticInt38000;
+    static public int staticInt38001;
+    static public int staticInt38002;
+    static public int staticInt38003;
+    static public int staticInt38004;
+    static public int staticInt38005;
+    static public int staticInt38006;
+    static public int staticInt38007;
+    static public int staticInt38008;
+    static public int staticInt38009;
+    static public int staticInt38010;
+    static public int staticInt38011;
+    static public int staticInt38012;
+    static public int staticInt38013;
+    static public int staticInt38014;
+    static public int staticInt38015;
+    static public int staticInt38016;
+    static public int staticInt38017;
+    static public int staticInt38018;
+    static public int staticInt38019;
+    static public int staticInt38020;
+    static public int staticInt38021;
+    static public int staticInt38022;
+    static public int staticInt38023;
+    static public int staticInt38024;
+    static public int staticInt38025;
+    static public int staticInt38026;
+    static public int staticInt38027;
+    static public int staticInt38028;
+    static public int staticInt38029;
+    static public int staticInt38030;
+    static public int staticInt38031;
+    static public int staticInt38032;
+    static public int staticInt38033;
+    static public int staticInt38034;
+    static public int staticInt38035;
+    static public int staticInt38036;
+    static public int staticInt38037;
+    static public int staticInt38038;
+    static public int staticInt38039;
+    static public int staticInt38040;
+    static public int staticInt38041;
+    static public int staticInt38042;
+    static public int staticInt38043;
+    static public int staticInt38044;
+    static public int staticInt38045;
+    static public int staticInt38046;
+    static public int staticInt38047;
+    static public int staticInt38048;
+    static public int staticInt38049;
+    static public int staticInt38050;
+    static public int staticInt38051;
+    static public int staticInt38052;
+    static public int staticInt38053;
+    static public int staticInt38054;
+    static public int staticInt38055;
+    static public int staticInt38056;
+    static public int staticInt38057;
+    static public int staticInt38058;
+    static public int staticInt38059;
+    static public int staticInt38060;
+    static public int staticInt38061;
+    static public int staticInt38062;
+    static public int staticInt38063;
+    static public int staticInt38064;
+    static public int staticInt38065;
+    static public int staticInt38066;
+    static public int staticInt38067;
+    static public int staticInt38068;
+    static public int staticInt38069;
+    static public int staticInt38070;
+    static public int staticInt38071;
+    static public int staticInt38072;
+    static public int staticInt38073;
+    static public int staticInt38074;
+    static public int staticInt38075;
+    static public int staticInt38076;
+    static public int staticInt38077;
+    static public int staticInt38078;
+    static public int staticInt38079;
+    static public int staticInt38080;
+    static public int staticInt38081;
+    static public int staticInt38082;
+    static public int staticInt38083;
+    static public int staticInt38084;
+    static public int staticInt38085;
+    static public int staticInt38086;
+    static public int staticInt38087;
+    static public int staticInt38088;
+    static public int staticInt38089;
+    static public int staticInt38090;
+    static public int staticInt38091;
+    static public int staticInt38092;
+    static public int staticInt38093;
+    static public int staticInt38094;
+    static public int staticInt38095;
+    static public int staticInt38096;
+    static public int staticInt38097;
+    static public int staticInt38098;
+    static public int staticInt38099;
+    static public int staticInt38100;
+    static public int staticInt38101;
+    static public int staticInt38102;
+    static public int staticInt38103;
+    static public int staticInt38104;
+    static public int staticInt38105;
+    static public int staticInt38106;
+    static public int staticInt38107;
+    static public int staticInt38108;
+    static public int staticInt38109;
+    static public int staticInt38110;
+    static public int staticInt38111;
+    static public int staticInt38112;
+    static public int staticInt38113;
+    static public int staticInt38114;
+    static public int staticInt38115;
+    static public int staticInt38116;
+    static public int staticInt38117;
+    static public int staticInt38118;
+    static public int staticInt38119;
+    static public int staticInt38120;
+    static public int staticInt38121;
+    static public int staticInt38122;
+    static public int staticInt38123;
+    static public int staticInt38124;
+    static public int staticInt38125;
+    static public int staticInt38126;
+    static public int staticInt38127;
+    static public int staticInt38128;
+    static public int staticInt38129;
+    static public int staticInt38130;
+    static public int staticInt38131;
+    static public int staticInt38132;
+    static public int staticInt38133;
+    static public int staticInt38134;
+    static public int staticInt38135;
+    static public int staticInt38136;
+    static public int staticInt38137;
+    static public int staticInt38138;
+    static public int staticInt38139;
+    static public int staticInt38140;
+    static public int staticInt38141;
+    static public int staticInt38142;
+    static public int staticInt38143;
+    static public int staticInt38144;
+    static public int staticInt38145;
+    static public int staticInt38146;
+    static public int staticInt38147;
+    static public int staticInt38148;
+    static public int staticInt38149;
+    static public int staticInt38150;
+    static public int staticInt38151;
+    static public int staticInt38152;
+    static public int staticInt38153;
+    static public int staticInt38154;
+    static public int staticInt38155;
+    static public int staticInt38156;
+    static public int staticInt38157;
+    static public int staticInt38158;
+    static public int staticInt38159;
+    static public int staticInt38160;
+    static public int staticInt38161;
+    static public int staticInt38162;
+    static public int staticInt38163;
+    static public int staticInt38164;
+    static public int staticInt38165;
+    static public int staticInt38166;
+    static public int staticInt38167;
+    static public int staticInt38168;
+    static public int staticInt38169;
+    static public int staticInt38170;
+    static public int staticInt38171;
+    static public int staticInt38172;
+    static public int staticInt38173;
+    static public int staticInt38174;
+    static public int staticInt38175;
+    static public int staticInt38176;
+    static public int staticInt38177;
+    static public int staticInt38178;
+    static public int staticInt38179;
+    static public int staticInt38180;
+    static public int staticInt38181;
+    static public int staticInt38182;
+    static public int staticInt38183;
+    static public int staticInt38184;
+    static public int staticInt38185;
+    static public int staticInt38186;
+    static public int staticInt38187;
+    static public int staticInt38188;
+    static public int staticInt38189;
+    static public int staticInt38190;
+    static public int staticInt38191;
+    static public int staticInt38192;
+    static public int staticInt38193;
+    static public int staticInt38194;
+    static public int staticInt38195;
+    static public int staticInt38196;
+    static public int staticInt38197;
+    static public int staticInt38198;
+    static public int staticInt38199;
+    static public int staticInt38200;
+    static public int staticInt38201;
+    static public int staticInt38202;
+    static public int staticInt38203;
+    static public int staticInt38204;
+    static public int staticInt38205;
+    static public int staticInt38206;
+    static public int staticInt38207;
+    static public int staticInt38208;
+    static public int staticInt38209;
+    static public int staticInt38210;
+    static public int staticInt38211;
+    static public int staticInt38212;
+    static public int staticInt38213;
+    static public int staticInt38214;
+    static public int staticInt38215;
+    static public int staticInt38216;
+    static public int staticInt38217;
+    static public int staticInt38218;
+    static public int staticInt38219;
+    static public int staticInt38220;
+    static public int staticInt38221;
+    static public int staticInt38222;
+    static public int staticInt38223;
+    static public int staticInt38224;
+    static public int staticInt38225;
+    static public int staticInt38226;
+    static public int staticInt38227;
+    static public int staticInt38228;
+    static public int staticInt38229;
+    static public int staticInt38230;
+    static public int staticInt38231;
+    static public int staticInt38232;
+    static public int staticInt38233;
+    static public int staticInt38234;
+    static public int staticInt38235;
+    static public int staticInt38236;
+    static public int staticInt38237;
+    static public int staticInt38238;
+    static public int staticInt38239;
+    static public int staticInt38240;
+    static public int staticInt38241;
+    static public int staticInt38242;
+    static public int staticInt38243;
+    static public int staticInt38244;
+    static public int staticInt38245;
+    static public int staticInt38246;
+    static public int staticInt38247;
+    static public int staticInt38248;
+    static public int staticInt38249;
+    static public int staticInt38250;
+    static public int staticInt38251;
+    static public int staticInt38252;
+    static public int staticInt38253;
+    static public int staticInt38254;
+    static public int staticInt38255;
+    static public int staticInt38256;
+    static public int staticInt38257;
+    static public int staticInt38258;
+    static public int staticInt38259;
+    static public int staticInt38260;
+    static public int staticInt38261;
+    static public int staticInt38262;
+    static public int staticInt38263;
+    static public int staticInt38264;
+    static public int staticInt38265;
+    static public int staticInt38266;
+    static public int staticInt38267;
+    static public int staticInt38268;
+    static public int staticInt38269;
+    static public int staticInt38270;
+    static public int staticInt38271;
+    static public int staticInt38272;
+    static public int staticInt38273;
+    static public int staticInt38274;
+    static public int staticInt38275;
+    static public int staticInt38276;
+    static public int staticInt38277;
+    static public int staticInt38278;
+    static public int staticInt38279;
+    static public int staticInt38280;
+    static public int staticInt38281;
+    static public int staticInt38282;
+    static public int staticInt38283;
+    static public int staticInt38284;
+    static public int staticInt38285;
+    static public int staticInt38286;
+    static public int staticInt38287;
+    static public int staticInt38288;
+    static public int staticInt38289;
+    static public int staticInt38290;
+    static public int staticInt38291;
+    static public int staticInt38292;
+    static public int staticInt38293;
+    static public int staticInt38294;
+    static public int staticInt38295;
+    static public int staticInt38296;
+    static public int staticInt38297;
+    static public int staticInt38298;
+    static public int staticInt38299;
+    static public int staticInt38300;
+    static public int staticInt38301;
+    static public int staticInt38302;
+    static public int staticInt38303;
+    static public int staticInt38304;
+    static public int staticInt38305;
+    static public int staticInt38306;
+    static public int staticInt38307;
+    static public int staticInt38308;
+    static public int staticInt38309;
+    static public int staticInt38310;
+    static public int staticInt38311;
+    static public int staticInt38312;
+    static public int staticInt38313;
+    static public int staticInt38314;
+    static public int staticInt38315;
+    static public int staticInt38316;
+    static public int staticInt38317;
+    static public int staticInt38318;
+    static public int staticInt38319;
+    static public int staticInt38320;
+    static public int staticInt38321;
+    static public int staticInt38322;
+    static public int staticInt38323;
+    static public int staticInt38324;
+    static public int staticInt38325;
+    static public int staticInt38326;
+    static public int staticInt38327;
+    static public int staticInt38328;
+    static public int staticInt38329;
+    static public int staticInt38330;
+    static public int staticInt38331;
+    static public int staticInt38332;
+    static public int staticInt38333;
+    static public int staticInt38334;
+    static public int staticInt38335;
+    static public int staticInt38336;
+    static public int staticInt38337;
+    static public int staticInt38338;
+    static public int staticInt38339;
+    static public int staticInt38340;
+    static public int staticInt38341;
+    static public int staticInt38342;
+    static public int staticInt38343;
+    static public int staticInt38344;
+    static public int staticInt38345;
+    static public int staticInt38346;
+    static public int staticInt38347;
+    static public int staticInt38348;
+    static public int staticInt38349;
+    static public int staticInt38350;
+    static public int staticInt38351;
+    static public int staticInt38352;
+    static public int staticInt38353;
+    static public int staticInt38354;
+    static public int staticInt38355;
+    static public int staticInt38356;
+    static public int staticInt38357;
+    static public int staticInt38358;
+    static public int staticInt38359;
+    static public int staticInt38360;
+    static public int staticInt38361;
+    static public int staticInt38362;
+    static public int staticInt38363;
+    static public int staticInt38364;
+    static public int staticInt38365;
+    static public int staticInt38366;
+    static public int staticInt38367;
+    static public int staticInt38368;
+    static public int staticInt38369;
+    static public int staticInt38370;
+    static public int staticInt38371;
+    static public int staticInt38372;
+    static public int staticInt38373;
+    static public int staticInt38374;
+    static public int staticInt38375;
+    static public int staticInt38376;
+    static public int staticInt38377;
+    static public int staticInt38378;
+    static public int staticInt38379;
+    static public int staticInt38380;
+    static public int staticInt38381;
+    static public int staticInt38382;
+    static public int staticInt38383;
+    static public int staticInt38384;
+    static public int staticInt38385;
+    static public int staticInt38386;
+    static public int staticInt38387;
+    static public int staticInt38388;
+    static public int staticInt38389;
+    static public int staticInt38390;
+    static public int staticInt38391;
+    static public int staticInt38392;
+    static public int staticInt38393;
+    static public int staticInt38394;
+    static public int staticInt38395;
+    static public int staticInt38396;
+    static public int staticInt38397;
+    static public int staticInt38398;
+    static public int staticInt38399;
+    static public int staticInt38400;
+    static public int staticInt38401;
+    static public int staticInt38402;
+    static public int staticInt38403;
+    static public int staticInt38404;
+    static public int staticInt38405;
+    static public int staticInt38406;
+    static public int staticInt38407;
+    static public int staticInt38408;
+    static public int staticInt38409;
+    static public int staticInt38410;
+    static public int staticInt38411;
+    static public int staticInt38412;
+    static public int staticInt38413;
+    static public int staticInt38414;
+    static public int staticInt38415;
+    static public int staticInt38416;
+    static public int staticInt38417;
+    static public int staticInt38418;
+    static public int staticInt38419;
+    static public int staticInt38420;
+    static public int staticInt38421;
+    static public int staticInt38422;
+    static public int staticInt38423;
+    static public int staticInt38424;
+    static public int staticInt38425;
+    static public int staticInt38426;
+    static public int staticInt38427;
+    static public int staticInt38428;
+    static public int staticInt38429;
+    static public int staticInt38430;
+    static public int staticInt38431;
+    static public int staticInt38432;
+    static public int staticInt38433;
+    static public int staticInt38434;
+    static public int staticInt38435;
+    static public int staticInt38436;
+    static public int staticInt38437;
+    static public int staticInt38438;
+    static public int staticInt38439;
+    static public int staticInt38440;
+    static public int staticInt38441;
+    static public int staticInt38442;
+    static public int staticInt38443;
+    static public int staticInt38444;
+    static public int staticInt38445;
+    static public int staticInt38446;
+    static public int staticInt38447;
+    static public int staticInt38448;
+    static public int staticInt38449;
+    static public int staticInt38450;
+    static public int staticInt38451;
+    static public int staticInt38452;
+    static public int staticInt38453;
+    static public int staticInt38454;
+    static public int staticInt38455;
+    static public int staticInt38456;
+    static public int staticInt38457;
+    static public int staticInt38458;
+    static public int staticInt38459;
+    static public int staticInt38460;
+    static public int staticInt38461;
+    static public int staticInt38462;
+    static public int staticInt38463;
+    static public int staticInt38464;
+    static public int staticInt38465;
+    static public int staticInt38466;
+    static public int staticInt38467;
+    static public int staticInt38468;
+    static public int staticInt38469;
+    static public int staticInt38470;
+    static public int staticInt38471;
+    static public int staticInt38472;
+    static public int staticInt38473;
+    static public int staticInt38474;
+    static public int staticInt38475;
+    static public int staticInt38476;
+    static public int staticInt38477;
+    static public int staticInt38478;
+    static public int staticInt38479;
+    static public int staticInt38480;
+    static public int staticInt38481;
+    static public int staticInt38482;
+    static public int staticInt38483;
+    static public int staticInt38484;
+    static public int staticInt38485;
+    static public int staticInt38486;
+    static public int staticInt38487;
+    static public int staticInt38488;
+    static public int staticInt38489;
+    static public int staticInt38490;
+    static public int staticInt38491;
+    static public int staticInt38492;
+    static public int staticInt38493;
+    static public int staticInt38494;
+    static public int staticInt38495;
+    static public int staticInt38496;
+    static public int staticInt38497;
+    static public int staticInt38498;
+    static public int staticInt38499;
+    static public int staticInt38500;
+    static public int staticInt38501;
+    static public int staticInt38502;
+    static public int staticInt38503;
+    static public int staticInt38504;
+    static public int staticInt38505;
+    static public int staticInt38506;
+    static public int staticInt38507;
+    static public int staticInt38508;
+    static public int staticInt38509;
+    static public int staticInt38510;
+    static public int staticInt38511;
+    static public int staticInt38512;
+    static public int staticInt38513;
+    static public int staticInt38514;
+    static public int staticInt38515;
+    static public int staticInt38516;
+    static public int staticInt38517;
+    static public int staticInt38518;
+    static public int staticInt38519;
+    static public int staticInt38520;
+    static public int staticInt38521;
+    static public int staticInt38522;
+    static public int staticInt38523;
+    static public int staticInt38524;
+    static public int staticInt38525;
+    static public int staticInt38526;
+    static public int staticInt38527;
+    static public int staticInt38528;
+    static public int staticInt38529;
+    static public int staticInt38530;
+    static public int staticInt38531;
+    static public int staticInt38532;
+    static public int staticInt38533;
+    static public int staticInt38534;
+    static public int staticInt38535;
+    static public int staticInt38536;
+    static public int staticInt38537;
+    static public int staticInt38538;
+    static public int staticInt38539;
+    static public int staticInt38540;
+    static public int staticInt38541;
+    static public int staticInt38542;
+    static public int staticInt38543;
+    static public int staticInt38544;
+    static public int staticInt38545;
+    static public int staticInt38546;
+    static public int staticInt38547;
+    static public int staticInt38548;
+    static public int staticInt38549;
+    static public int staticInt38550;
+    static public int staticInt38551;
+    static public int staticInt38552;
+    static public int staticInt38553;
+    static public int staticInt38554;
+    static public int staticInt38555;
+    static public int staticInt38556;
+    static public int staticInt38557;
+    static public int staticInt38558;
+    static public int staticInt38559;
+    static public int staticInt38560;
+    static public int staticInt38561;
+    static public int staticInt38562;
+    static public int staticInt38563;
+    static public int staticInt38564;
+    static public int staticInt38565;
+    static public int staticInt38566;
+    static public int staticInt38567;
+    static public int staticInt38568;
+    static public int staticInt38569;
+    static public int staticInt38570;
+    static public int staticInt38571;
+    static public int staticInt38572;
+    static public int staticInt38573;
+    static public int staticInt38574;
+    static public int staticInt38575;
+    static public int staticInt38576;
+    static public int staticInt38577;
+    static public int staticInt38578;
+    static public int staticInt38579;
+    static public int staticInt38580;
+    static public int staticInt38581;
+    static public int staticInt38582;
+    static public int staticInt38583;
+    static public int staticInt38584;
+    static public int staticInt38585;
+    static public int staticInt38586;
+    static public int staticInt38587;
+    static public int staticInt38588;
+    static public int staticInt38589;
+    static public int staticInt38590;
+    static public int staticInt38591;
+    static public int staticInt38592;
+    static public int staticInt38593;
+    static public int staticInt38594;
+    static public int staticInt38595;
+    static public int staticInt38596;
+    static public int staticInt38597;
+    static public int staticInt38598;
+    static public int staticInt38599;
+    static public int staticInt38600;
+    static public int staticInt38601;
+    static public int staticInt38602;
+    static public int staticInt38603;
+    static public int staticInt38604;
+    static public int staticInt38605;
+    static public int staticInt38606;
+    static public int staticInt38607;
+    static public int staticInt38608;
+    static public int staticInt38609;
+    static public int staticInt38610;
+    static public int staticInt38611;
+    static public int staticInt38612;
+    static public int staticInt38613;
+    static public int staticInt38614;
+    static public int staticInt38615;
+    static public int staticInt38616;
+    static public int staticInt38617;
+    static public int staticInt38618;
+    static public int staticInt38619;
+    static public int staticInt38620;
+    static public int staticInt38621;
+    static public int staticInt38622;
+    static public int staticInt38623;
+    static public int staticInt38624;
+    static public int staticInt38625;
+    static public int staticInt38626;
+    static public int staticInt38627;
+    static public int staticInt38628;
+    static public int staticInt38629;
+    static public int staticInt38630;
+    static public int staticInt38631;
+    static public int staticInt38632;
+    static public int staticInt38633;
+    static public int staticInt38634;
+    static public int staticInt38635;
+    static public int staticInt38636;
+    static public int staticInt38637;
+    static public int staticInt38638;
+    static public int staticInt38639;
+    static public int staticInt38640;
+    static public int staticInt38641;
+    static public int staticInt38642;
+    static public int staticInt38643;
+    static public int staticInt38644;
+    static public int staticInt38645;
+    static public int staticInt38646;
+    static public int staticInt38647;
+    static public int staticInt38648;
+    static public int staticInt38649;
+    static public int staticInt38650;
+    static public int staticInt38651;
+    static public int staticInt38652;
+    static public int staticInt38653;
+    static public int staticInt38654;
+    static public int staticInt38655;
+    static public int staticInt38656;
+    static public int staticInt38657;
+    static public int staticInt38658;
+    static public int staticInt38659;
+    static public int staticInt38660;
+    static public int staticInt38661;
+    static public int staticInt38662;
+    static public int staticInt38663;
+    static public int staticInt38664;
+    static public int staticInt38665;
+    static public int staticInt38666;
+    static public int staticInt38667;
+    static public int staticInt38668;
+    static public int staticInt38669;
+    static public int staticInt38670;
+    static public int staticInt38671;
+    static public int staticInt38672;
+    static public int staticInt38673;
+    static public int staticInt38674;
+    static public int staticInt38675;
+    static public int staticInt38676;
+    static public int staticInt38677;
+    static public int staticInt38678;
+    static public int staticInt38679;
+    static public int staticInt38680;
+    static public int staticInt38681;
+    static public int staticInt38682;
+    static public int staticInt38683;
+    static public int staticInt38684;
+    static public int staticInt38685;
+    static public int staticInt38686;
+    static public int staticInt38687;
+    static public int staticInt38688;
+    static public int staticInt38689;
+    static public int staticInt38690;
+    static public int staticInt38691;
+    static public int staticInt38692;
+    static public int staticInt38693;
+    static public int staticInt38694;
+    static public int staticInt38695;
+    static public int staticInt38696;
+    static public int staticInt38697;
+    static public int staticInt38698;
+    static public int staticInt38699;
+    static public int staticInt38700;
+    static public int staticInt38701;
+    static public int staticInt38702;
+    static public int staticInt38703;
+    static public int staticInt38704;
+    static public int staticInt38705;
+    static public int staticInt38706;
+    static public int staticInt38707;
+    static public int staticInt38708;
+    static public int staticInt38709;
+    static public int staticInt38710;
+    static public int staticInt38711;
+    static public int staticInt38712;
+    static public int staticInt38713;
+    static public int staticInt38714;
+    static public int staticInt38715;
+    static public int staticInt38716;
+    static public int staticInt38717;
+    static public int staticInt38718;
+    static public int staticInt38719;
+    static public int staticInt38720;
+    static public int staticInt38721;
+    static public int staticInt38722;
+    static public int staticInt38723;
+    static public int staticInt38724;
+    static public int staticInt38725;
+    static public int staticInt38726;
+    static public int staticInt38727;
+    static public int staticInt38728;
+    static public int staticInt38729;
+    static public int staticInt38730;
+    static public int staticInt38731;
+    static public int staticInt38732;
+    static public int staticInt38733;
+    static public int staticInt38734;
+    static public int staticInt38735;
+    static public int staticInt38736;
+    static public int staticInt38737;
+    static public int staticInt38738;
+    static public int staticInt38739;
+    static public int staticInt38740;
+    static public int staticInt38741;
+    static public int staticInt38742;
+    static public int staticInt38743;
+    static public int staticInt38744;
+    static public int staticInt38745;
+    static public int staticInt38746;
+    static public int staticInt38747;
+    static public int staticInt38748;
+    static public int staticInt38749;
+    static public int staticInt38750;
+    static public int staticInt38751;
+    static public int staticInt38752;
+    static public int staticInt38753;
+    static public int staticInt38754;
+    static public int staticInt38755;
+    static public int staticInt38756;
+    static public int staticInt38757;
+    static public int staticInt38758;
+    static public int staticInt38759;
+    static public int staticInt38760;
+    static public int staticInt38761;
+    static public int staticInt38762;
+    static public int staticInt38763;
+    static public int staticInt38764;
+    static public int staticInt38765;
+    static public int staticInt38766;
+    static public int staticInt38767;
+    static public int staticInt38768;
+    static public int staticInt38769;
+    static public int staticInt38770;
+    static public int staticInt38771;
+    static public int staticInt38772;
+    static public int staticInt38773;
+    static public int staticInt38774;
+    static public int staticInt38775;
+    static public int staticInt38776;
+    static public int staticInt38777;
+    static public int staticInt38778;
+    static public int staticInt38779;
+    static public int staticInt38780;
+    static public int staticInt38781;
+    static public int staticInt38782;
+    static public int staticInt38783;
+    static public int staticInt38784;
+    static public int staticInt38785;
+    static public int staticInt38786;
+    static public int staticInt38787;
+    static public int staticInt38788;
+    static public int staticInt38789;
+    static public int staticInt38790;
+    static public int staticInt38791;
+    static public int staticInt38792;
+    static public int staticInt38793;
+    static public int staticInt38794;
+    static public int staticInt38795;
+    static public int staticInt38796;
+    static public int staticInt38797;
+    static public int staticInt38798;
+    static public int staticInt38799;
+    static public int staticInt38800;
+    static public int staticInt38801;
+    static public int staticInt38802;
+    static public int staticInt38803;
+    static public int staticInt38804;
+    static public int staticInt38805;
+    static public int staticInt38806;
+    static public int staticInt38807;
+    static public int staticInt38808;
+    static public int staticInt38809;
+    static public int staticInt38810;
+    static public int staticInt38811;
+    static public int staticInt38812;
+    static public int staticInt38813;
+    static public int staticInt38814;
+    static public int staticInt38815;
+    static public int staticInt38816;
+    static public int staticInt38817;
+    static public int staticInt38818;
+    static public int staticInt38819;
+    static public int staticInt38820;
+    static public int staticInt38821;
+    static public int staticInt38822;
+    static public int staticInt38823;
+    static public int staticInt38824;
+    static public int staticInt38825;
+    static public int staticInt38826;
+    static public int staticInt38827;
+    static public int staticInt38828;
+    static public int staticInt38829;
+    static public int staticInt38830;
+    static public int staticInt38831;
+    static public int staticInt38832;
+    static public int staticInt38833;
+    static public int staticInt38834;
+    static public int staticInt38835;
+    static public int staticInt38836;
+    static public int staticInt38837;
+    static public int staticInt38838;
+    static public int staticInt38839;
+    static public int staticInt38840;
+    static public int staticInt38841;
+    static public int staticInt38842;
+    static public int staticInt38843;
+    static public int staticInt38844;
+    static public int staticInt38845;
+    static public int staticInt38846;
+    static public int staticInt38847;
+    static public int staticInt38848;
+    static public int staticInt38849;
+    static public int staticInt38850;
+    static public int staticInt38851;
+    static public int staticInt38852;
+    static public int staticInt38853;
+    static public int staticInt38854;
+    static public int staticInt38855;
+    static public int staticInt38856;
+    static public int staticInt38857;
+    static public int staticInt38858;
+    static public int staticInt38859;
+    static public int staticInt38860;
+    static public int staticInt38861;
+    static public int staticInt38862;
+    static public int staticInt38863;
+    static public int staticInt38864;
+    static public int staticInt38865;
+    static public int staticInt38866;
+    static public int staticInt38867;
+    static public int staticInt38868;
+    static public int staticInt38869;
+    static public int staticInt38870;
+    static public int staticInt38871;
+    static public int staticInt38872;
+    static public int staticInt38873;
+    static public int staticInt38874;
+    static public int staticInt38875;
+    static public int staticInt38876;
+    static public int staticInt38877;
+    static public int staticInt38878;
+    static public int staticInt38879;
+    static public int staticInt38880;
+    static public int staticInt38881;
+    static public int staticInt38882;
+    static public int staticInt38883;
+    static public int staticInt38884;
+    static public int staticInt38885;
+    static public int staticInt38886;
+    static public int staticInt38887;
+    static public int staticInt38888;
+    static public int staticInt38889;
+    static public int staticInt38890;
+    static public int staticInt38891;
+    static public int staticInt38892;
+    static public int staticInt38893;
+    static public int staticInt38894;
+    static public int staticInt38895;
+    static public int staticInt38896;
+    static public int staticInt38897;
+    static public int staticInt38898;
+    static public int staticInt38899;
+    static public int staticInt38900;
+    static public int staticInt38901;
+    static public int staticInt38902;
+    static public int staticInt38903;
+    static public int staticInt38904;
+    static public int staticInt38905;
+    static public int staticInt38906;
+    static public int staticInt38907;
+    static public int staticInt38908;
+    static public int staticInt38909;
+    static public int staticInt38910;
+    static public int staticInt38911;
+    static public int staticInt38912;
+    static public int staticInt38913;
+    static public int staticInt38914;
+    static public int staticInt38915;
+    static public int staticInt38916;
+    static public int staticInt38917;
+    static public int staticInt38918;
+    static public int staticInt38919;
+    static public int staticInt38920;
+    static public int staticInt38921;
+    static public int staticInt38922;
+    static public int staticInt38923;
+    static public int staticInt38924;
+    static public int staticInt38925;
+    static public int staticInt38926;
+    static public int staticInt38927;
+    static public int staticInt38928;
+    static public int staticInt38929;
+    static public int staticInt38930;
+    static public int staticInt38931;
+    static public int staticInt38932;
+    static public int staticInt38933;
+    static public int staticInt38934;
+    static public int staticInt38935;
+    static public int staticInt38936;
+    static public int staticInt38937;
+    static public int staticInt38938;
+    static public int staticInt38939;
+    static public int staticInt38940;
+    static public int staticInt38941;
+    static public int staticInt38942;
+    static public int staticInt38943;
+    static public int staticInt38944;
+    static public int staticInt38945;
+    static public int staticInt38946;
+    static public int staticInt38947;
+    static public int staticInt38948;
+    static public int staticInt38949;
+    static public int staticInt38950;
+    static public int staticInt38951;
+    static public int staticInt38952;
+    static public int staticInt38953;
+    static public int staticInt38954;
+    static public int staticInt38955;
+    static public int staticInt38956;
+    static public int staticInt38957;
+    static public int staticInt38958;
+    static public int staticInt38959;
+    static public int staticInt38960;
+    static public int staticInt38961;
+    static public int staticInt38962;
+    static public int staticInt38963;
+    static public int staticInt38964;
+    static public int staticInt38965;
+    static public int staticInt38966;
+    static public int staticInt38967;
+    static public int staticInt38968;
+    static public int staticInt38969;
+    static public int staticInt38970;
+    static public int staticInt38971;
+    static public int staticInt38972;
+    static public int staticInt38973;
+    static public int staticInt38974;
+    static public int staticInt38975;
+    static public int staticInt38976;
+    static public int staticInt38977;
+    static public int staticInt38978;
+    static public int staticInt38979;
+    static public int staticInt38980;
+    static public int staticInt38981;
+    static public int staticInt38982;
+    static public int staticInt38983;
+    static public int staticInt38984;
+    static public int staticInt38985;
+    static public int staticInt38986;
+    static public int staticInt38987;
+    static public int staticInt38988;
+    static public int staticInt38989;
+    static public int staticInt38990;
+    static public int staticInt38991;
+    static public int staticInt38992;
+    static public int staticInt38993;
+    static public int staticInt38994;
+    static public int staticInt38995;
+    static public int staticInt38996;
+    static public int staticInt38997;
+    static public int staticInt38998;
+    static public int staticInt38999;
+    static public int staticInt39000;
+    static public int staticInt39001;
+    static public int staticInt39002;
+    static public int staticInt39003;
+    static public int staticInt39004;
+    static public int staticInt39005;
+    static public int staticInt39006;
+    static public int staticInt39007;
+    static public int staticInt39008;
+    static public int staticInt39009;
+    static public int staticInt39010;
+    static public int staticInt39011;
+    static public int staticInt39012;
+    static public int staticInt39013;
+    static public int staticInt39014;
+    static public int staticInt39015;
+    static public int staticInt39016;
+    static public int staticInt39017;
+    static public int staticInt39018;
+    static public int staticInt39019;
+    static public int staticInt39020;
+    static public int staticInt39021;
+    static public int staticInt39022;
+    static public int staticInt39023;
+    static public int staticInt39024;
+    static public int staticInt39025;
+    static public int staticInt39026;
+    static public int staticInt39027;
+    static public int staticInt39028;
+    static public int staticInt39029;
+    static public int staticInt39030;
+    static public int staticInt39031;
+    static public int staticInt39032;
+    static public int staticInt39033;
+    static public int staticInt39034;
+    static public int staticInt39035;
+    static public int staticInt39036;
+    static public int staticInt39037;
+    static public int staticInt39038;
+    static public int staticInt39039;
+    static public int staticInt39040;
+    static public int staticInt39041;
+    static public int staticInt39042;
+    static public int staticInt39043;
+    static public int staticInt39044;
+    static public int staticInt39045;
+    static public int staticInt39046;
+    static public int staticInt39047;
+    static public int staticInt39048;
+    static public int staticInt39049;
+    static public int staticInt39050;
+    static public int staticInt39051;
+    static public int staticInt39052;
+    static public int staticInt39053;
+    static public int staticInt39054;
+    static public int staticInt39055;
+    static public int staticInt39056;
+    static public int staticInt39057;
+    static public int staticInt39058;
+    static public int staticInt39059;
+    static public int staticInt39060;
+    static public int staticInt39061;
+    static public int staticInt39062;
+    static public int staticInt39063;
+    static public int staticInt39064;
+    static public int staticInt39065;
+    static public int staticInt39066;
+    static public int staticInt39067;
+    static public int staticInt39068;
+    static public int staticInt39069;
+    static public int staticInt39070;
+    static public int staticInt39071;
+    static public int staticInt39072;
+    static public int staticInt39073;
+    static public int staticInt39074;
+    static public int staticInt39075;
+    static public int staticInt39076;
+    static public int staticInt39077;
+    static public int staticInt39078;
+    static public int staticInt39079;
+    static public int staticInt39080;
+    static public int staticInt39081;
+    static public int staticInt39082;
+    static public int staticInt39083;
+    static public int staticInt39084;
+    static public int staticInt39085;
+    static public int staticInt39086;
+    static public int staticInt39087;
+    static public int staticInt39088;
+    static public int staticInt39089;
+    static public int staticInt39090;
+    static public int staticInt39091;
+    static public int staticInt39092;
+    static public int staticInt39093;
+    static public int staticInt39094;
+    static public int staticInt39095;
+    static public int staticInt39096;
+    static public int staticInt39097;
+    static public int staticInt39098;
+    static public int staticInt39099;
+    static public int staticInt39100;
+    static public int staticInt39101;
+    static public int staticInt39102;
+    static public int staticInt39103;
+    static public int staticInt39104;
+    static public int staticInt39105;
+    static public int staticInt39106;
+    static public int staticInt39107;
+    static public int staticInt39108;
+    static public int staticInt39109;
+    static public int staticInt39110;
+    static public int staticInt39111;
+    static public int staticInt39112;
+    static public int staticInt39113;
+    static public int staticInt39114;
+    static public int staticInt39115;
+    static public int staticInt39116;
+    static public int staticInt39117;
+    static public int staticInt39118;
+    static public int staticInt39119;
+    static public int staticInt39120;
+    static public int staticInt39121;
+    static public int staticInt39122;
+    static public int staticInt39123;
+    static public int staticInt39124;
+    static public int staticInt39125;
+    static public int staticInt39126;
+    static public int staticInt39127;
+    static public int staticInt39128;
+    static public int staticInt39129;
+    static public int staticInt39130;
+    static public int staticInt39131;
+    static public int staticInt39132;
+    static public int staticInt39133;
+    static public int staticInt39134;
+    static public int staticInt39135;
+    static public int staticInt39136;
+    static public int staticInt39137;
+    static public int staticInt39138;
+    static public int staticInt39139;
+    static public int staticInt39140;
+    static public int staticInt39141;
+    static public int staticInt39142;
+    static public int staticInt39143;
+    static public int staticInt39144;
+    static public int staticInt39145;
+    static public int staticInt39146;
+    static public int staticInt39147;
+    static public int staticInt39148;
+    static public int staticInt39149;
+    static public int staticInt39150;
+    static public int staticInt39151;
+    static public int staticInt39152;
+    static public int staticInt39153;
+    static public int staticInt39154;
+    static public int staticInt39155;
+    static public int staticInt39156;
+    static public int staticInt39157;
+    static public int staticInt39158;
+    static public int staticInt39159;
+    static public int staticInt39160;
+    static public int staticInt39161;
+    static public int staticInt39162;
+    static public int staticInt39163;
+    static public int staticInt39164;
+    static public int staticInt39165;
+    static public int staticInt39166;
+    static public int staticInt39167;
+    static public int staticInt39168;
+    static public int staticInt39169;
+    static public int staticInt39170;
+    static public int staticInt39171;
+    static public int staticInt39172;
+    static public int staticInt39173;
+    static public int staticInt39174;
+    static public int staticInt39175;
+    static public int staticInt39176;
+    static public int staticInt39177;
+    static public int staticInt39178;
+    static public int staticInt39179;
+    static public int staticInt39180;
+    static public int staticInt39181;
+    static public int staticInt39182;
+    static public int staticInt39183;
+    static public int staticInt39184;
+    static public int staticInt39185;
+    static public int staticInt39186;
+    static public int staticInt39187;
+    static public int staticInt39188;
+    static public int staticInt39189;
+    static public int staticInt39190;
+    static public int staticInt39191;
+    static public int staticInt39192;
+    static public int staticInt39193;
+    static public int staticInt39194;
+    static public int staticInt39195;
+    static public int staticInt39196;
+    static public int staticInt39197;
+    static public int staticInt39198;
+    static public int staticInt39199;
+    static public int staticInt39200;
+    static public int staticInt39201;
+    static public int staticInt39202;
+    static public int staticInt39203;
+    static public int staticInt39204;
+    static public int staticInt39205;
+    static public int staticInt39206;
+    static public int staticInt39207;
+    static public int staticInt39208;
+    static public int staticInt39209;
+    static public int staticInt39210;
+    static public int staticInt39211;
+    static public int staticInt39212;
+    static public int staticInt39213;
+    static public int staticInt39214;
+    static public int staticInt39215;
+    static public int staticInt39216;
+    static public int staticInt39217;
+    static public int staticInt39218;
+    static public int staticInt39219;
+    static public int staticInt39220;
+    static public int staticInt39221;
+    static public int staticInt39222;
+    static public int staticInt39223;
+    static public int staticInt39224;
+    static public int staticInt39225;
+    static public int staticInt39226;
+    static public int staticInt39227;
+    static public int staticInt39228;
+    static public int staticInt39229;
+    static public int staticInt39230;
+    static public int staticInt39231;
+    static public int staticInt39232;
+    static public int staticInt39233;
+    static public int staticInt39234;
+    static public int staticInt39235;
+    static public int staticInt39236;
+    static public int staticInt39237;
+    static public int staticInt39238;
+    static public int staticInt39239;
+    static public int staticInt39240;
+    static public int staticInt39241;
+    static public int staticInt39242;
+    static public int staticInt39243;
+    static public int staticInt39244;
+    static public int staticInt39245;
+    static public int staticInt39246;
+    static public int staticInt39247;
+    static public int staticInt39248;
+    static public int staticInt39249;
+    static public int staticInt39250;
+    static public int staticInt39251;
+    static public int staticInt39252;
+    static public int staticInt39253;
+    static public int staticInt39254;
+    static public int staticInt39255;
+    static public int staticInt39256;
+    static public int staticInt39257;
+    static public int staticInt39258;
+    static public int staticInt39259;
+    static public int staticInt39260;
+    static public int staticInt39261;
+    static public int staticInt39262;
+    static public int staticInt39263;
+    static public int staticInt39264;
+    static public int staticInt39265;
+    static public int staticInt39266;
+    static public int staticInt39267;
+    static public int staticInt39268;
+    static public int staticInt39269;
+    static public int staticInt39270;
+    static public int staticInt39271;
+    static public int staticInt39272;
+    static public int staticInt39273;
+    static public int staticInt39274;
+    static public int staticInt39275;
+    static public int staticInt39276;
+    static public int staticInt39277;
+    static public int staticInt39278;
+    static public int staticInt39279;
+    static public int staticInt39280;
+    static public int staticInt39281;
+    static public int staticInt39282;
+    static public int staticInt39283;
+    static public int staticInt39284;
+    static public int staticInt39285;
+    static public int staticInt39286;
+    static public int staticInt39287;
+    static public int staticInt39288;
+    static public int staticInt39289;
+    static public int staticInt39290;
+    static public int staticInt39291;
+    static public int staticInt39292;
+    static public int staticInt39293;
+    static public int staticInt39294;
+    static public int staticInt39295;
+    static public int staticInt39296;
+    static public int staticInt39297;
+    static public int staticInt39298;
+    static public int staticInt39299;
+    static public int staticInt39300;
+    static public int staticInt39301;
+    static public int staticInt39302;
+    static public int staticInt39303;
+    static public int staticInt39304;
+    static public int staticInt39305;
+    static public int staticInt39306;
+    static public int staticInt39307;
+    static public int staticInt39308;
+    static public int staticInt39309;
+    static public int staticInt39310;
+    static public int staticInt39311;
+    static public int staticInt39312;
+    static public int staticInt39313;
+    static public int staticInt39314;
+    static public int staticInt39315;
+    static public int staticInt39316;
+    static public int staticInt39317;
+    static public int staticInt39318;
+    static public int staticInt39319;
+    static public int staticInt39320;
+    static public int staticInt39321;
+    static public int staticInt39322;
+    static public int staticInt39323;
+    static public int staticInt39324;
+    static public int staticInt39325;
+    static public int staticInt39326;
+    static public int staticInt39327;
+    static public int staticInt39328;
+    static public int staticInt39329;
+    static public int staticInt39330;
+    static public int staticInt39331;
+    static public int staticInt39332;
+    static public int staticInt39333;
+    static public int staticInt39334;
+    static public int staticInt39335;
+    static public int staticInt39336;
+    static public int staticInt39337;
+    static public int staticInt39338;
+    static public int staticInt39339;
+    static public int staticInt39340;
+    static public int staticInt39341;
+    static public int staticInt39342;
+    static public int staticInt39343;
+    static public int staticInt39344;
+    static public int staticInt39345;
+    static public int staticInt39346;
+    static public int staticInt39347;
+    static public int staticInt39348;
+    static public int staticInt39349;
+    static public int staticInt39350;
+    static public int staticInt39351;
+    static public int staticInt39352;
+    static public int staticInt39353;
+    static public int staticInt39354;
+    static public int staticInt39355;
+    static public int staticInt39356;
+    static public int staticInt39357;
+    static public int staticInt39358;
+    static public int staticInt39359;
+    static public int staticInt39360;
+    static public int staticInt39361;
+    static public int staticInt39362;
+    static public int staticInt39363;
+    static public int staticInt39364;
+    static public int staticInt39365;
+    static public int staticInt39366;
+    static public int staticInt39367;
+    static public int staticInt39368;
+    static public int staticInt39369;
+    static public int staticInt39370;
+    static public int staticInt39371;
+    static public int staticInt39372;
+    static public int staticInt39373;
+    static public int staticInt39374;
+    static public int staticInt39375;
+    static public int staticInt39376;
+    static public int staticInt39377;
+    static public int staticInt39378;
+    static public int staticInt39379;
+    static public int staticInt39380;
+    static public int staticInt39381;
+    static public int staticInt39382;
+    static public int staticInt39383;
+    static public int staticInt39384;
+    static public int staticInt39385;
+    static public int staticInt39386;
+    static public int staticInt39387;
+    static public int staticInt39388;
+    static public int staticInt39389;
+    static public int staticInt39390;
+    static public int staticInt39391;
+    static public int staticInt39392;
+    static public int staticInt39393;
+    static public int staticInt39394;
+    static public int staticInt39395;
+    static public int staticInt39396;
+    static public int staticInt39397;
+    static public int staticInt39398;
+    static public int staticInt39399;
+    static public int staticInt39400;
+    static public int staticInt39401;
+    static public int staticInt39402;
+    static public int staticInt39403;
+    static public int staticInt39404;
+    static public int staticInt39405;
+    static public int staticInt39406;
+    static public int staticInt39407;
+    static public int staticInt39408;
+    static public int staticInt39409;
+    static public int staticInt39410;
+    static public int staticInt39411;
+    static public int staticInt39412;
+    static public int staticInt39413;
+    static public int staticInt39414;
+    static public int staticInt39415;
+    static public int staticInt39416;
+    static public int staticInt39417;
+    static public int staticInt39418;
+    static public int staticInt39419;
+    static public int staticInt39420;
+    static public int staticInt39421;
+    static public int staticInt39422;
+    static public int staticInt39423;
+    static public int staticInt39424;
+    static public int staticInt39425;
+    static public int staticInt39426;
+    static public int staticInt39427;
+    static public int staticInt39428;
+    static public int staticInt39429;
+    static public int staticInt39430;
+    static public int staticInt39431;
+    static public int staticInt39432;
+    static public int staticInt39433;
+    static public int staticInt39434;
+    static public int staticInt39435;
+    static public int staticInt39436;
+    static public int staticInt39437;
+    static public int staticInt39438;
+    static public int staticInt39439;
+    static public int staticInt39440;
+    static public int staticInt39441;
+    static public int staticInt39442;
+    static public int staticInt39443;
+    static public int staticInt39444;
+    static public int staticInt39445;
+    static public int staticInt39446;
+    static public int staticInt39447;
+    static public int staticInt39448;
+    static public int staticInt39449;
+    static public int staticInt39450;
+    static public int staticInt39451;
+    static public int staticInt39452;
+    static public int staticInt39453;
+    static public int staticInt39454;
+    static public int staticInt39455;
+    static public int staticInt39456;
+    static public int staticInt39457;
+    static public int staticInt39458;
+    static public int staticInt39459;
+    static public int staticInt39460;
+    static public int staticInt39461;
+    static public int staticInt39462;
+    static public int staticInt39463;
+    static public int staticInt39464;
+    static public int staticInt39465;
+    static public int staticInt39466;
+    static public int staticInt39467;
+    static public int staticInt39468;
+    static public int staticInt39469;
+    static public int staticInt39470;
+    static public int staticInt39471;
+    static public int staticInt39472;
+    static public int staticInt39473;
+    static public int staticInt39474;
+    static public int staticInt39475;
+    static public int staticInt39476;
+    static public int staticInt39477;
+    static public int staticInt39478;
+    static public int staticInt39479;
+    static public int staticInt39480;
+    static public int staticInt39481;
+    static public int staticInt39482;
+    static public int staticInt39483;
+    static public int staticInt39484;
+    static public int staticInt39485;
+    static public int staticInt39486;
+    static public int staticInt39487;
+    static public int staticInt39488;
+    static public int staticInt39489;
+    static public int staticInt39490;
+    static public int staticInt39491;
+    static public int staticInt39492;
+    static public int staticInt39493;
+    static public int staticInt39494;
+    static public int staticInt39495;
+    static public int staticInt39496;
+    static public int staticInt39497;
+    static public int staticInt39498;
+    static public int staticInt39499;
+    static public int staticInt39500;
+    static public int staticInt39501;
+    static public int staticInt39502;
+    static public int staticInt39503;
+    static public int staticInt39504;
+    static public int staticInt39505;
+    static public int staticInt39506;
+    static public int staticInt39507;
+    static public int staticInt39508;
+    static public int staticInt39509;
+    static public int staticInt39510;
+    static public int staticInt39511;
+    static public int staticInt39512;
+    static public int staticInt39513;
+    static public int staticInt39514;
+    static public int staticInt39515;
+    static public int staticInt39516;
+    static public int staticInt39517;
+    static public int staticInt39518;
+    static public int staticInt39519;
+    static public int staticInt39520;
+    static public int staticInt39521;
+    static public int staticInt39522;
+    static public int staticInt39523;
+    static public int staticInt39524;
+    static public int staticInt39525;
+    static public int staticInt39526;
+    static public int staticInt39527;
+    static public int staticInt39528;
+    static public int staticInt39529;
+    static public int staticInt39530;
+    static public int staticInt39531;
+    static public int staticInt39532;
+    static public int staticInt39533;
+    static public int staticInt39534;
+    static public int staticInt39535;
+    static public int staticInt39536;
+    static public int staticInt39537;
+    static public int staticInt39538;
+    static public int staticInt39539;
+    static public int staticInt39540;
+    static public int staticInt39541;
+    static public int staticInt39542;
+    static public int staticInt39543;
+    static public int staticInt39544;
+    static public int staticInt39545;
+    static public int staticInt39546;
+    static public int staticInt39547;
+    static public int staticInt39548;
+    static public int staticInt39549;
+    static public int staticInt39550;
+    static public int staticInt39551;
+    static public int staticInt39552;
+    static public int staticInt39553;
+    static public int staticInt39554;
+    static public int staticInt39555;
+    static public int staticInt39556;
+    static public int staticInt39557;
+    static public int staticInt39558;
+    static public int staticInt39559;
+    static public int staticInt39560;
+    static public int staticInt39561;
+    static public int staticInt39562;
+    static public int staticInt39563;
+    static public int staticInt39564;
+    static public int staticInt39565;
+    static public int staticInt39566;
+    static public int staticInt39567;
+    static public int staticInt39568;
+    static public int staticInt39569;
+    static public int staticInt39570;
+    static public int staticInt39571;
+    static public int staticInt39572;
+    static public int staticInt39573;
+    static public int staticInt39574;
+    static public int staticInt39575;
+    static public int staticInt39576;
+    static public int staticInt39577;
+    static public int staticInt39578;
+    static public int staticInt39579;
+    static public int staticInt39580;
+    static public int staticInt39581;
+    static public int staticInt39582;
+    static public int staticInt39583;
+    static public int staticInt39584;
+    static public int staticInt39585;
+    static public int staticInt39586;
+    static public int staticInt39587;
+    static public int staticInt39588;
+    static public int staticInt39589;
+    static public int staticInt39590;
+    static public int staticInt39591;
+    static public int staticInt39592;
+    static public int staticInt39593;
+    static public int staticInt39594;
+    static public int staticInt39595;
+    static public int staticInt39596;
+    static public int staticInt39597;
+    static public int staticInt39598;
+    static public int staticInt39599;
+    static public int staticInt39600;
+    static public int staticInt39601;
+    static public int staticInt39602;
+    static public int staticInt39603;
+    static public int staticInt39604;
+    static public int staticInt39605;
+    static public int staticInt39606;
+    static public int staticInt39607;
+    static public int staticInt39608;
+    static public int staticInt39609;
+    static public int staticInt39610;
+    static public int staticInt39611;
+    static public int staticInt39612;
+    static public int staticInt39613;
+    static public int staticInt39614;
+    static public int staticInt39615;
+    static public int staticInt39616;
+    static public int staticInt39617;
+    static public int staticInt39618;
+    static public int staticInt39619;
+    static public int staticInt39620;
+    static public int staticInt39621;
+    static public int staticInt39622;
+    static public int staticInt39623;
+    static public int staticInt39624;
+    static public int staticInt39625;
+    static public int staticInt39626;
+    static public int staticInt39627;
+    static public int staticInt39628;
+    static public int staticInt39629;
+    static public int staticInt39630;
+    static public int staticInt39631;
+    static public int staticInt39632;
+    static public int staticInt39633;
+    static public int staticInt39634;
+    static public int staticInt39635;
+    static public int staticInt39636;
+    static public int staticInt39637;
+    static public int staticInt39638;
+    static public int staticInt39639;
+    static public int staticInt39640;
+    static public int staticInt39641;
+    static public int staticInt39642;
+    static public int staticInt39643;
+    static public int staticInt39644;
+    static public int staticInt39645;
+    static public int staticInt39646;
+    static public int staticInt39647;
+    static public int staticInt39648;
+    static public int staticInt39649;
+    static public int staticInt39650;
+    static public int staticInt39651;
+    static public int staticInt39652;
+    static public int staticInt39653;
+    static public int staticInt39654;
+    static public int staticInt39655;
+    static public int staticInt39656;
+    static public int staticInt39657;
+    static public int staticInt39658;
+    static public int staticInt39659;
+    static public int staticInt39660;
+    static public int staticInt39661;
+    static public int staticInt39662;
+    static public int staticInt39663;
+    static public int staticInt39664;
+    static public int staticInt39665;
+    static public int staticInt39666;
+    static public int staticInt39667;
+    static public int staticInt39668;
+    static public int staticInt39669;
+    static public int staticInt39670;
+    static public int staticInt39671;
+    static public int staticInt39672;
+    static public int staticInt39673;
+    static public int staticInt39674;
+    static public int staticInt39675;
+    static public int staticInt39676;
+    static public int staticInt39677;
+    static public int staticInt39678;
+    static public int staticInt39679;
+    static public int staticInt39680;
+    static public int staticInt39681;
+    static public int staticInt39682;
+    static public int staticInt39683;
+    static public int staticInt39684;
+    static public int staticInt39685;
+    static public int staticInt39686;
+    static public int staticInt39687;
+    static public int staticInt39688;
+    static public int staticInt39689;
+    static public int staticInt39690;
+    static public int staticInt39691;
+    static public int staticInt39692;
+    static public int staticInt39693;
+    static public int staticInt39694;
+    static public int staticInt39695;
+    static public int staticInt39696;
+    static public int staticInt39697;
+    static public int staticInt39698;
+    static public int staticInt39699;
+    static public int staticInt39700;
+    static public int staticInt39701;
+    static public int staticInt39702;
+    static public int staticInt39703;
+    static public int staticInt39704;
+    static public int staticInt39705;
+    static public int staticInt39706;
+    static public int staticInt39707;
+    static public int staticInt39708;
+    static public int staticInt39709;
+    static public int staticInt39710;
+    static public int staticInt39711;
+    static public int staticInt39712;
+    static public int staticInt39713;
+    static public int staticInt39714;
+    static public int staticInt39715;
+    static public int staticInt39716;
+    static public int staticInt39717;
+    static public int staticInt39718;
+    static public int staticInt39719;
+    static public int staticInt39720;
+    static public int staticInt39721;
+    static public int staticInt39722;
+    static public int staticInt39723;
+    static public int staticInt39724;
+    static public int staticInt39725;
+    static public int staticInt39726;
+    static public int staticInt39727;
+    static public int staticInt39728;
+    static public int staticInt39729;
+    static public int staticInt39730;
+    static public int staticInt39731;
+    static public int staticInt39732;
+    static public int staticInt39733;
+    static public int staticInt39734;
+    static public int staticInt39735;
+    static public int staticInt39736;
+    static public int staticInt39737;
+    static public int staticInt39738;
+    static public int staticInt39739;
+    static public int staticInt39740;
+    static public int staticInt39741;
+    static public int staticInt39742;
+    static public int staticInt39743;
+    static public int staticInt39744;
+    static public int staticInt39745;
+    static public int staticInt39746;
+    static public int staticInt39747;
+    static public int staticInt39748;
+    static public int staticInt39749;
+    static public int staticInt39750;
+    static public int staticInt39751;
+    static public int staticInt39752;
+    static public int staticInt39753;
+    static public int staticInt39754;
+    static public int staticInt39755;
+    static public int staticInt39756;
+    static public int staticInt39757;
+    static public int staticInt39758;
+    static public int staticInt39759;
+    static public int staticInt39760;
+    static public int staticInt39761;
+    static public int staticInt39762;
+    static public int staticInt39763;
+    static public int staticInt39764;
+    static public int staticInt39765;
+    static public int staticInt39766;
+    static public int staticInt39767;
+    static public int staticInt39768;
+    static public int staticInt39769;
+    static public int staticInt39770;
+    static public int staticInt39771;
+    static public int staticInt39772;
+    static public int staticInt39773;
+    static public int staticInt39774;
+    static public int staticInt39775;
+    static public int staticInt39776;
+    static public int staticInt39777;
+    static public int staticInt39778;
+    static public int staticInt39779;
+    static public int staticInt39780;
+    static public int staticInt39781;
+    static public int staticInt39782;
+    static public int staticInt39783;
+    static public int staticInt39784;
+    static public int staticInt39785;
+    static public int staticInt39786;
+    static public int staticInt39787;
+    static public int staticInt39788;
+    static public int staticInt39789;
+    static public int staticInt39790;
+    static public int staticInt39791;
+    static public int staticInt39792;
+    static public int staticInt39793;
+    static public int staticInt39794;
+    static public int staticInt39795;
+    static public int staticInt39796;
+    static public int staticInt39797;
+    static public int staticInt39798;
+    static public int staticInt39799;
+    static public int staticInt39800;
+    static public int staticInt39801;
+    static public int staticInt39802;
+    static public int staticInt39803;
+    static public int staticInt39804;
+    static public int staticInt39805;
+    static public int staticInt39806;
+    static public int staticInt39807;
+    static public int staticInt39808;
+    static public int staticInt39809;
+    static public int staticInt39810;
+    static public int staticInt39811;
+    static public int staticInt39812;
+    static public int staticInt39813;
+    static public int staticInt39814;
+    static public int staticInt39815;
+    static public int staticInt39816;
+    static public int staticInt39817;
+    static public int staticInt39818;
+    static public int staticInt39819;
+    static public int staticInt39820;
+    static public int staticInt39821;
+    static public int staticInt39822;
+    static public int staticInt39823;
+    static public int staticInt39824;
+    static public int staticInt39825;
+    static public int staticInt39826;
+    static public int staticInt39827;
+    static public int staticInt39828;
+    static public int staticInt39829;
+    static public int staticInt39830;
+    static public int staticInt39831;
+    static public int staticInt39832;
+    static public int staticInt39833;
+    static public int staticInt39834;
+    static public int staticInt39835;
+    static public int staticInt39836;
+    static public int staticInt39837;
+    static public int staticInt39838;
+    static public int staticInt39839;
+    static public int staticInt39840;
+    static public int staticInt39841;
+    static public int staticInt39842;
+    static public int staticInt39843;
+    static public int staticInt39844;
+    static public int staticInt39845;
+    static public int staticInt39846;
+    static public int staticInt39847;
+    static public int staticInt39848;
+    static public int staticInt39849;
+    static public int staticInt39850;
+    static public int staticInt39851;
+    static public int staticInt39852;
+    static public int staticInt39853;
+    static public int staticInt39854;
+    static public int staticInt39855;
+    static public int staticInt39856;
+    static public int staticInt39857;
+    static public int staticInt39858;
+    static public int staticInt39859;
+    static public int staticInt39860;
+    static public int staticInt39861;
+    static public int staticInt39862;
+    static public int staticInt39863;
+    static public int staticInt39864;
+    static public int staticInt39865;
+    static public int staticInt39866;
+    static public int staticInt39867;
+    static public int staticInt39868;
+    static public int staticInt39869;
+    static public int staticInt39870;
+    static public int staticInt39871;
+    static public int staticInt39872;
+    static public int staticInt39873;
+    static public int staticInt39874;
+    static public int staticInt39875;
+    static public int staticInt39876;
+    static public int staticInt39877;
+    static public int staticInt39878;
+    static public int staticInt39879;
+    static public int staticInt39880;
+    static public int staticInt39881;
+    static public int staticInt39882;
+    static public int staticInt39883;
+    static public int staticInt39884;
+    static public int staticInt39885;
+    static public int staticInt39886;
+    static public int staticInt39887;
+    static public int staticInt39888;
+    static public int staticInt39889;
+    static public int staticInt39890;
+    static public int staticInt39891;
+    static public int staticInt39892;
+    static public int staticInt39893;
+    static public int staticInt39894;
+    static public int staticInt39895;
+    static public int staticInt39896;
+    static public int staticInt39897;
+    static public int staticInt39898;
+    static public int staticInt39899;
+    static public int staticInt39900;
+    static public int staticInt39901;
+    static public int staticInt39902;
+    static public int staticInt39903;
+    static public int staticInt39904;
+    static public int staticInt39905;
+    static public int staticInt39906;
+    static public int staticInt39907;
+    static public int staticInt39908;
+    static public int staticInt39909;
+    static public int staticInt39910;
+    static public int staticInt39911;
+    static public int staticInt39912;
+    static public int staticInt39913;
+    static public int staticInt39914;
+    static public int staticInt39915;
+    static public int staticInt39916;
+    static public int staticInt39917;
+    static public int staticInt39918;
+    static public int staticInt39919;
+    static public int staticInt39920;
+    static public int staticInt39921;
+    static public int staticInt39922;
+    static public int staticInt39923;
+    static public int staticInt39924;
+    static public int staticInt39925;
+    static public int staticInt39926;
+    static public int staticInt39927;
+    static public int staticInt39928;
+    static public int staticInt39929;
+    static public int staticInt39930;
+    static public int staticInt39931;
+    static public int staticInt39932;
+    static public int staticInt39933;
+    static public int staticInt39934;
+    static public int staticInt39935;
+    static public int staticInt39936;
+    static public int staticInt39937;
+    static public int staticInt39938;
+    static public int staticInt39939;
+    static public int staticInt39940;
+    static public int staticInt39941;
+    static public int staticInt39942;
+    static public int staticInt39943;
+    static public int staticInt39944;
+    static public int staticInt39945;
+    static public int staticInt39946;
+    static public int staticInt39947;
+    static public int staticInt39948;
+    static public int staticInt39949;
+    static public int staticInt39950;
+    static public int staticInt39951;
+    static public int staticInt39952;
+    static public int staticInt39953;
+    static public int staticInt39954;
+    static public int staticInt39955;
+    static public int staticInt39956;
+    static public int staticInt39957;
+    static public int staticInt39958;
+    static public int staticInt39959;
+    static public int staticInt39960;
+    static public int staticInt39961;
+    static public int staticInt39962;
+    static public int staticInt39963;
+    static public int staticInt39964;
+    static public int staticInt39965;
+    static public int staticInt39966;
+    static public int staticInt39967;
+    static public int staticInt39968;
+    static public int staticInt39969;
+    static public int staticInt39970;
+    static public int staticInt39971;
+    static public int staticInt39972;
+    static public int staticInt39973;
+    static public int staticInt39974;
+    static public int staticInt39975;
+    static public int staticInt39976;
+    static public int staticInt39977;
+    static public int staticInt39978;
+    static public int staticInt39979;
+    static public int staticInt39980;
+    static public int staticInt39981;
+    static public int staticInt39982;
+    static public int staticInt39983;
+    static public int staticInt39984;
+    static public int staticInt39985;
+    static public int staticInt39986;
+    static public int staticInt39987;
+    static public int staticInt39988;
+    static public int staticInt39989;
+    static public int staticInt39990;
+    static public int staticInt39991;
+    static public int staticInt39992;
+    static public int staticInt39993;
+    static public int staticInt39994;
+    static public int staticInt39995;
+    static public int staticInt39996;
+    static public int staticInt39997;
+    static public int staticInt39998;
+    static public int staticInt39999;
+    static public int staticInt40000;
+    static public int staticInt40001;
+    static public int staticInt40002;
+    static public int staticInt40003;
+    static public int staticInt40004;
+    static public int staticInt40005;
+    static public int staticInt40006;
+    static public int staticInt40007;
+    static public int staticInt40008;
+    static public int staticInt40009;
+    static public int staticInt40010;
+    static public int staticInt40011;
+    static public int staticInt40012;
+    static public int staticInt40013;
+    static public int staticInt40014;
+    static public int staticInt40015;
+    static public int staticInt40016;
+    static public int staticInt40017;
+    static public int staticInt40018;
+    static public int staticInt40019;
+    static public int staticInt40020;
+    static public int staticInt40021;
+    static public int staticInt40022;
+    static public int staticInt40023;
+    static public int staticInt40024;
+    static public int staticInt40025;
+    static public int staticInt40026;
+    static public int staticInt40027;
+    static public int staticInt40028;
+    static public int staticInt40029;
+    static public int staticInt40030;
+    static public int staticInt40031;
+    static public int staticInt40032;
+    static public int staticInt40033;
+    static public int staticInt40034;
+    static public int staticInt40035;
+    static public int staticInt40036;
+    static public int staticInt40037;
+    static public int staticInt40038;
+    static public int staticInt40039;
+    static public int staticInt40040;
+    static public int staticInt40041;
+    static public int staticInt40042;
+    static public int staticInt40043;
+    static public int staticInt40044;
+    static public int staticInt40045;
+    static public int staticInt40046;
+    static public int staticInt40047;
+    static public int staticInt40048;
+    static public int staticInt40049;
+    static public int staticInt40050;
+    static public int staticInt40051;
+    static public int staticInt40052;
+    static public int staticInt40053;
+    static public int staticInt40054;
+    static public int staticInt40055;
+    static public int staticInt40056;
+    static public int staticInt40057;
+    static public int staticInt40058;
+    static public int staticInt40059;
+    static public int staticInt40060;
+    static public int staticInt40061;
+    static public int staticInt40062;
+    static public int staticInt40063;
+    static public int staticInt40064;
+    static public int staticInt40065;
+    static public int staticInt40066;
+    static public int staticInt40067;
+    static public int staticInt40068;
+    static public int staticInt40069;
+    static public int staticInt40070;
+    static public int staticInt40071;
+    static public int staticInt40072;
+    static public int staticInt40073;
+    static public int staticInt40074;
+    static public int staticInt40075;
+    static public int staticInt40076;
+    static public int staticInt40077;
+    static public int staticInt40078;
+    static public int staticInt40079;
+    static public int staticInt40080;
+    static public int staticInt40081;
+    static public int staticInt40082;
+    static public int staticInt40083;
+    static public int staticInt40084;
+    static public int staticInt40085;
+    static public int staticInt40086;
+    static public int staticInt40087;
+    static public int staticInt40088;
+    static public int staticInt40089;
+    static public int staticInt40090;
+    static public int staticInt40091;
+    static public int staticInt40092;
+    static public int staticInt40093;
+    static public int staticInt40094;
+    static public int staticInt40095;
+    static public int staticInt40096;
+    static public int staticInt40097;
+    static public int staticInt40098;
+    static public int staticInt40099;
+    static public int staticInt40100;
+    static public int staticInt40101;
+    static public int staticInt40102;
+    static public int staticInt40103;
+    static public int staticInt40104;
+    static public int staticInt40105;
+    static public int staticInt40106;
+    static public int staticInt40107;
+    static public int staticInt40108;
+    static public int staticInt40109;
+    static public int staticInt40110;
+    static public int staticInt40111;
+    static public int staticInt40112;
+    static public int staticInt40113;
+    static public int staticInt40114;
+    static public int staticInt40115;
+    static public int staticInt40116;
+    static public int staticInt40117;
+    static public int staticInt40118;
+    static public int staticInt40119;
+    static public int staticInt40120;
+    static public int staticInt40121;
+    static public int staticInt40122;
+    static public int staticInt40123;
+    static public int staticInt40124;
+    static public int staticInt40125;
+    static public int staticInt40126;
+    static public int staticInt40127;
+    static public int staticInt40128;
+    static public int staticInt40129;
+    static public int staticInt40130;
+    static public int staticInt40131;
+    static public int staticInt40132;
+    static public int staticInt40133;
+    static public int staticInt40134;
+    static public int staticInt40135;
+    static public int staticInt40136;
+    static public int staticInt40137;
+    static public int staticInt40138;
+    static public int staticInt40139;
+    static public int staticInt40140;
+    static public int staticInt40141;
+    static public int staticInt40142;
+    static public int staticInt40143;
+    static public int staticInt40144;
+    static public int staticInt40145;
+    static public int staticInt40146;
+    static public int staticInt40147;
+    static public int staticInt40148;
+    static public int staticInt40149;
+    static public int staticInt40150;
+    static public int staticInt40151;
+    static public int staticInt40152;
+    static public int staticInt40153;
+    static public int staticInt40154;
+    static public int staticInt40155;
+    static public int staticInt40156;
+    static public int staticInt40157;
+    static public int staticInt40158;
+    static public int staticInt40159;
+    static public int staticInt40160;
+    static public int staticInt40161;
+    static public int staticInt40162;
+    static public int staticInt40163;
+    static public int staticInt40164;
+    static public int staticInt40165;
+    static public int staticInt40166;
+    static public int staticInt40167;
+    static public int staticInt40168;
+    static public int staticInt40169;
+    static public int staticInt40170;
+    static public int staticInt40171;
+    static public int staticInt40172;
+    static public int staticInt40173;
+    static public int staticInt40174;
+    static public int staticInt40175;
+    static public int staticInt40176;
+    static public int staticInt40177;
+    static public int staticInt40178;
+    static public int staticInt40179;
+    static public int staticInt40180;
+    static public int staticInt40181;
+    static public int staticInt40182;
+    static public int staticInt40183;
+    static public int staticInt40184;
+    static public int staticInt40185;
+    static public int staticInt40186;
+    static public int staticInt40187;
+    static public int staticInt40188;
+    static public int staticInt40189;
+    static public int staticInt40190;
+    static public int staticInt40191;
+    static public int staticInt40192;
+    static public int staticInt40193;
+    static public int staticInt40194;
+    static public int staticInt40195;
+    static public int staticInt40196;
+    static public int staticInt40197;
+    static public int staticInt40198;
+    static public int staticInt40199;
+    static public int staticInt40200;
+    static public int staticInt40201;
+    static public int staticInt40202;
+    static public int staticInt40203;
+    static public int staticInt40204;
+    static public int staticInt40205;
+    static public int staticInt40206;
+    static public int staticInt40207;
+    static public int staticInt40208;
+    static public int staticInt40209;
+    static public int staticInt40210;
+    static public int staticInt40211;
+    static public int staticInt40212;
+    static public int staticInt40213;
+    static public int staticInt40214;
+    static public int staticInt40215;
+    static public int staticInt40216;
+    static public int staticInt40217;
+    static public int staticInt40218;
+    static public int staticInt40219;
+    static public int staticInt40220;
+    static public int staticInt40221;
+    static public int staticInt40222;
+    static public int staticInt40223;
+    static public int staticInt40224;
+    static public int staticInt40225;
+    static public int staticInt40226;
+    static public int staticInt40227;
+    static public int staticInt40228;
+    static public int staticInt40229;
+    static public int staticInt40230;
+    static public int staticInt40231;
+    static public int staticInt40232;
+    static public int staticInt40233;
+    static public int staticInt40234;
+    static public int staticInt40235;
+    static public int staticInt40236;
+    static public int staticInt40237;
+    static public int staticInt40238;
+    static public int staticInt40239;
+    static public int staticInt40240;
+    static public int staticInt40241;
+    static public int staticInt40242;
+    static public int staticInt40243;
+    static public int staticInt40244;
+    static public int staticInt40245;
+    static public int staticInt40246;
+    static public int staticInt40247;
+    static public int staticInt40248;
+    static public int staticInt40249;
+    static public int staticInt40250;
+    static public int staticInt40251;
+    static public int staticInt40252;
+    static public int staticInt40253;
+    static public int staticInt40254;
+    static public int staticInt40255;
+    static public int staticInt40256;
+    static public int staticInt40257;
+    static public int staticInt40258;
+    static public int staticInt40259;
+    static public int staticInt40260;
+    static public int staticInt40261;
+    static public int staticInt40262;
+    static public int staticInt40263;
+    static public int staticInt40264;
+    static public int staticInt40265;
+    static public int staticInt40266;
+    static public int staticInt40267;
+    static public int staticInt40268;
+    static public int staticInt40269;
+    static public int staticInt40270;
+    static public int staticInt40271;
+    static public int staticInt40272;
+    static public int staticInt40273;
+    static public int staticInt40274;
+    static public int staticInt40275;
+    static public int staticInt40276;
+    static public int staticInt40277;
+    static public int staticInt40278;
+    static public int staticInt40279;
+    static public int staticInt40280;
+    static public int staticInt40281;
+    static public int staticInt40282;
+    static public int staticInt40283;
+    static public int staticInt40284;
+    static public int staticInt40285;
+    static public int staticInt40286;
+    static public int staticInt40287;
+    static public int staticInt40288;
+    static public int staticInt40289;
+    static public int staticInt40290;
+    static public int staticInt40291;
+    static public int staticInt40292;
+    static public int staticInt40293;
+    static public int staticInt40294;
+    static public int staticInt40295;
+    static public int staticInt40296;
+    static public int staticInt40297;
+    static public int staticInt40298;
+    static public int staticInt40299;
+    static public int staticInt40300;
+    static public int staticInt40301;
+    static public int staticInt40302;
+    static public int staticInt40303;
+    static public int staticInt40304;
+    static public int staticInt40305;
+    static public int staticInt40306;
+    static public int staticInt40307;
+    static public int staticInt40308;
+    static public int staticInt40309;
+    static public int staticInt40310;
+    static public int staticInt40311;
+    static public int staticInt40312;
+    static public int staticInt40313;
+    static public int staticInt40314;
+    static public int staticInt40315;
+    static public int staticInt40316;
+    static public int staticInt40317;
+    static public int staticInt40318;
+    static public int staticInt40319;
+    static public int staticInt40320;
+    static public int staticInt40321;
+    static public int staticInt40322;
+    static public int staticInt40323;
+    static public int staticInt40324;
+    static public int staticInt40325;
+    static public int staticInt40326;
+    static public int staticInt40327;
+    static public int staticInt40328;
+    static public int staticInt40329;
+    static public int staticInt40330;
+    static public int staticInt40331;
+    static public int staticInt40332;
+    static public int staticInt40333;
+    static public int staticInt40334;
+    static public int staticInt40335;
+    static public int staticInt40336;
+    static public int staticInt40337;
+    static public int staticInt40338;
+    static public int staticInt40339;
+    static public int staticInt40340;
+    static public int staticInt40341;
+    static public int staticInt40342;
+    static public int staticInt40343;
+    static public int staticInt40344;
+    static public int staticInt40345;
+    static public int staticInt40346;
+    static public int staticInt40347;
+    static public int staticInt40348;
+    static public int staticInt40349;
+    static public int staticInt40350;
+    static public int staticInt40351;
+    static public int staticInt40352;
+    static public int staticInt40353;
+    static public int staticInt40354;
+    static public int staticInt40355;
+    static public int staticInt40356;
+    static public int staticInt40357;
+    static public int staticInt40358;
+    static public int staticInt40359;
+    static public int staticInt40360;
+    static public int staticInt40361;
+    static public int staticInt40362;
+    static public int staticInt40363;
+    static public int staticInt40364;
+    static public int staticInt40365;
+    static public int staticInt40366;
+    static public int staticInt40367;
+    static public int staticInt40368;
+    static public int staticInt40369;
+    static public int staticInt40370;
+    static public int staticInt40371;
+    static public int staticInt40372;
+    static public int staticInt40373;
+    static public int staticInt40374;
+    static public int staticInt40375;
+    static public int staticInt40376;
+    static public int staticInt40377;
+    static public int staticInt40378;
+    static public int staticInt40379;
+    static public int staticInt40380;
+    static public int staticInt40381;
+    static public int staticInt40382;
+    static public int staticInt40383;
+    static public int staticInt40384;
+    static public int staticInt40385;
+    static public int staticInt40386;
+    static public int staticInt40387;
+    static public int staticInt40388;
+    static public int staticInt40389;
+    static public int staticInt40390;
+    static public int staticInt40391;
+    static public int staticInt40392;
+    static public int staticInt40393;
+    static public int staticInt40394;
+    static public int staticInt40395;
+    static public int staticInt40396;
+    static public int staticInt40397;
+    static public int staticInt40398;
+    static public int staticInt40399;
+    static public int staticInt40400;
+    static public int staticInt40401;
+    static public int staticInt40402;
+    static public int staticInt40403;
+    static public int staticInt40404;
+    static public int staticInt40405;
+    static public int staticInt40406;
+    static public int staticInt40407;
+    static public int staticInt40408;
+    static public int staticInt40409;
+    static public int staticInt40410;
+    static public int staticInt40411;
+    static public int staticInt40412;
+    static public int staticInt40413;
+    static public int staticInt40414;
+    static public int staticInt40415;
+    static public int staticInt40416;
+    static public int staticInt40417;
+    static public int staticInt40418;
+    static public int staticInt40419;
+    static public int staticInt40420;
+    static public int staticInt40421;
+    static public int staticInt40422;
+    static public int staticInt40423;
+    static public int staticInt40424;
+    static public int staticInt40425;
+    static public int staticInt40426;
+    static public int staticInt40427;
+    static public int staticInt40428;
+    static public int staticInt40429;
+    static public int staticInt40430;
+    static public int staticInt40431;
+    static public int staticInt40432;
+    static public int staticInt40433;
+    static public int staticInt40434;
+    static public int staticInt40435;
+    static public int staticInt40436;
+    static public int staticInt40437;
+    static public int staticInt40438;
+    static public int staticInt40439;
+    static public int staticInt40440;
+    static public int staticInt40441;
+    static public int staticInt40442;
+    static public int staticInt40443;
+    static public int staticInt40444;
+    static public int staticInt40445;
+    static public int staticInt40446;
+    static public int staticInt40447;
+    static public int staticInt40448;
+    static public int staticInt40449;
+    static public int staticInt40450;
+    static public int staticInt40451;
+    static public int staticInt40452;
+    static public int staticInt40453;
+    static public int staticInt40454;
+    static public int staticInt40455;
+    static public int staticInt40456;
+    static public int staticInt40457;
+    static public int staticInt40458;
+    static public int staticInt40459;
+    static public int staticInt40460;
+    static public int staticInt40461;
+    static public int staticInt40462;
+    static public int staticInt40463;
+    static public int staticInt40464;
+    static public int staticInt40465;
+    static public int staticInt40466;
+    static public int staticInt40467;
+    static public int staticInt40468;
+    static public int staticInt40469;
+    static public int staticInt40470;
+    static public int staticInt40471;
+    static public int staticInt40472;
+    static public int staticInt40473;
+    static public int staticInt40474;
+    static public int staticInt40475;
+    static public int staticInt40476;
+    static public int staticInt40477;
+    static public int staticInt40478;
+    static public int staticInt40479;
+    static public int staticInt40480;
+    static public int staticInt40481;
+    static public int staticInt40482;
+    static public int staticInt40483;
+    static public int staticInt40484;
+    static public int staticInt40485;
+    static public int staticInt40486;
+    static public int staticInt40487;
+    static public int staticInt40488;
+    static public int staticInt40489;
+    static public int staticInt40490;
+    static public int staticInt40491;
+    static public int staticInt40492;
+    static public int staticInt40493;
+    static public int staticInt40494;
+    static public int staticInt40495;
+    static public int staticInt40496;
+    static public int staticInt40497;
+    static public int staticInt40498;
+    static public int staticInt40499;
+    static public int staticInt40500;
+    static public int staticInt40501;
+    static public int staticInt40502;
+    static public int staticInt40503;
+    static public int staticInt40504;
+    static public int staticInt40505;
+    static public int staticInt40506;
+    static public int staticInt40507;
+    static public int staticInt40508;
+    static public int staticInt40509;
+    static public int staticInt40510;
+    static public int staticInt40511;
+    static public int staticInt40512;
+    static public int staticInt40513;
+    static public int staticInt40514;
+    static public int staticInt40515;
+    static public int staticInt40516;
+    static public int staticInt40517;
+    static public int staticInt40518;
+    static public int staticInt40519;
+    static public int staticInt40520;
+    static public int staticInt40521;
+    static public int staticInt40522;
+    static public int staticInt40523;
+    static public int staticInt40524;
+    static public int staticInt40525;
+    static public int staticInt40526;
+    static public int staticInt40527;
+    static public int staticInt40528;
+    static public int staticInt40529;
+    static public int staticInt40530;
+    static public int staticInt40531;
+    static public int staticInt40532;
+    static public int staticInt40533;
+    static public int staticInt40534;
+    static public int staticInt40535;
+    static public int staticInt40536;
+    static public int staticInt40537;
+    static public int staticInt40538;
+    static public int staticInt40539;
+    static public int staticInt40540;
+    static public int staticInt40541;
+    static public int staticInt40542;
+    static public int staticInt40543;
+    static public int staticInt40544;
+    static public int staticInt40545;
+    static public int staticInt40546;
+    static public int staticInt40547;
+    static public int staticInt40548;
+    static public int staticInt40549;
+    static public int staticInt40550;
+    static public int staticInt40551;
+    static public int staticInt40552;
+    static public int staticInt40553;
+    static public int staticInt40554;
+    static public int staticInt40555;
+    static public int staticInt40556;
+    static public int staticInt40557;
+    static public int staticInt40558;
+    static public int staticInt40559;
+    static public int staticInt40560;
+    static public int staticInt40561;
+    static public int staticInt40562;
+    static public int staticInt40563;
+    static public int staticInt40564;
+    static public int staticInt40565;
+    static public int staticInt40566;
+    static public int staticInt40567;
+    static public int staticInt40568;
+    static public int staticInt40569;
+    static public int staticInt40570;
+    static public int staticInt40571;
+    static public int staticInt40572;
+    static public int staticInt40573;
+    static public int staticInt40574;
+    static public int staticInt40575;
+    static public int staticInt40576;
+    static public int staticInt40577;
+    static public int staticInt40578;
+    static public int staticInt40579;
+    static public int staticInt40580;
+    static public int staticInt40581;
+    static public int staticInt40582;
+    static public int staticInt40583;
+    static public int staticInt40584;
+    static public int staticInt40585;
+    static public int staticInt40586;
+    static public int staticInt40587;
+    static public int staticInt40588;
+    static public int staticInt40589;
+    static public int staticInt40590;
+    static public int staticInt40591;
+    static public int staticInt40592;
+    static public int staticInt40593;
+    static public int staticInt40594;
+    static public int staticInt40595;
+    static public int staticInt40596;
+    static public int staticInt40597;
+    static public int staticInt40598;
+    static public int staticInt40599;
+    static public int staticInt40600;
+    static public int staticInt40601;
+    static public int staticInt40602;
+    static public int staticInt40603;
+    static public int staticInt40604;
+    static public int staticInt40605;
+    static public int staticInt40606;
+    static public int staticInt40607;
+    static public int staticInt40608;
+    static public int staticInt40609;
+    static public int staticInt40610;
+    static public int staticInt40611;
+    static public int staticInt40612;
+    static public int staticInt40613;
+    static public int staticInt40614;
+    static public int staticInt40615;
+    static public int staticInt40616;
+    static public int staticInt40617;
+    static public int staticInt40618;
+    static public int staticInt40619;
+    static public int staticInt40620;
+    static public int staticInt40621;
+    static public int staticInt40622;
+    static public int staticInt40623;
+    static public int staticInt40624;
+    static public int staticInt40625;
+    static public int staticInt40626;
+    static public int staticInt40627;
+    static public int staticInt40628;
+    static public int staticInt40629;
+    static public int staticInt40630;
+    static public int staticInt40631;
+    static public int staticInt40632;
+    static public int staticInt40633;
+    static public int staticInt40634;
+    static public int staticInt40635;
+    static public int staticInt40636;
+    static public int staticInt40637;
+    static public int staticInt40638;
+    static public int staticInt40639;
+    static public int staticInt40640;
+    static public int staticInt40641;
+    static public int staticInt40642;
+    static public int staticInt40643;
+    static public int staticInt40644;
+    static public int staticInt40645;
+    static public int staticInt40646;
+    static public int staticInt40647;
+    static public int staticInt40648;
+    static public int staticInt40649;
+    static public int staticInt40650;
+    static public int staticInt40651;
+    static public int staticInt40652;
+    static public int staticInt40653;
+    static public int staticInt40654;
+    static public int staticInt40655;
+    static public int staticInt40656;
+    static public int staticInt40657;
+    static public int staticInt40658;
+    static public int staticInt40659;
+    static public int staticInt40660;
+    static public int staticInt40661;
+    static public int staticInt40662;
+    static public int staticInt40663;
+    static public int staticInt40664;
+    static public int staticInt40665;
+    static public int staticInt40666;
+    static public int staticInt40667;
+    static public int staticInt40668;
+    static public int staticInt40669;
+    static public int staticInt40670;
+    static public int staticInt40671;
+    static public int staticInt40672;
+    static public int staticInt40673;
+    static public int staticInt40674;
+    static public int staticInt40675;
+    static public int staticInt40676;
+    static public int staticInt40677;
+    static public int staticInt40678;
+    static public int staticInt40679;
+    static public int staticInt40680;
+    static public int staticInt40681;
+    static public int staticInt40682;
+    static public int staticInt40683;
+    static public int staticInt40684;
+    static public int staticInt40685;
+    static public int staticInt40686;
+    static public int staticInt40687;
+    static public int staticInt40688;
+    static public int staticInt40689;
+    static public int staticInt40690;
+    static public int staticInt40691;
+    static public int staticInt40692;
+    static public int staticInt40693;
+    static public int staticInt40694;
+    static public int staticInt40695;
+    static public int staticInt40696;
+    static public int staticInt40697;
+    static public int staticInt40698;
+    static public int staticInt40699;
+    static public int staticInt40700;
+    static public int staticInt40701;
+    static public int staticInt40702;
+    static public int staticInt40703;
+    static public int staticInt40704;
+    static public int staticInt40705;
+    static public int staticInt40706;
+    static public int staticInt40707;
+    static public int staticInt40708;
+    static public int staticInt40709;
+    static public int staticInt40710;
+    static public int staticInt40711;
+    static public int staticInt40712;
+    static public int staticInt40713;
+    static public int staticInt40714;
+    static public int staticInt40715;
+    static public int staticInt40716;
+    static public int staticInt40717;
+    static public int staticInt40718;
+    static public int staticInt40719;
+    static public int staticInt40720;
+    static public int staticInt40721;
+    static public int staticInt40722;
+    static public int staticInt40723;
+    static public int staticInt40724;
+    static public int staticInt40725;
+    static public int staticInt40726;
+    static public int staticInt40727;
+    static public int staticInt40728;
+    static public int staticInt40729;
+    static public int staticInt40730;
+    static public int staticInt40731;
+    static public int staticInt40732;
+    static public int staticInt40733;
+    static public int staticInt40734;
+    static public int staticInt40735;
+    static public int staticInt40736;
+    static public int staticInt40737;
+    static public int staticInt40738;
+    static public int staticInt40739;
+    static public int staticInt40740;
+    static public int staticInt40741;
+    static public int staticInt40742;
+    static public int staticInt40743;
+    static public int staticInt40744;
+    static public int staticInt40745;
+    static public int staticInt40746;
+    static public int staticInt40747;
+    static public int staticInt40748;
+    static public int staticInt40749;
+    static public int staticInt40750;
+    static public int staticInt40751;
+    static public int staticInt40752;
+    static public int staticInt40753;
+    static public int staticInt40754;
+    static public int staticInt40755;
+    static public int staticInt40756;
+    static public int staticInt40757;
+    static public int staticInt40758;
+    static public int staticInt40759;
+    static public int staticInt40760;
+    static public int staticInt40761;
+    static public int staticInt40762;
+    static public int staticInt40763;
+    static public int staticInt40764;
+    static public int staticInt40765;
+    static public int staticInt40766;
+    static public int staticInt40767;
+    static public int staticInt40768;
+    static public int staticInt40769;
+    static public int staticInt40770;
+    static public int staticInt40771;
+    static public int staticInt40772;
+    static public int staticInt40773;
+    static public int staticInt40774;
+    static public int staticInt40775;
+    static public int staticInt40776;
+    static public int staticInt40777;
+    static public int staticInt40778;
+    static public int staticInt40779;
+    static public int staticInt40780;
+    static public int staticInt40781;
+    static public int staticInt40782;
+    static public int staticInt40783;
+    static public int staticInt40784;
+    static public int staticInt40785;
+    static public int staticInt40786;
+    static public int staticInt40787;
+    static public int staticInt40788;
+    static public int staticInt40789;
+    static public int staticInt40790;
+    static public int staticInt40791;
+    static public int staticInt40792;
+    static public int staticInt40793;
+    static public int staticInt40794;
+    static public int staticInt40795;
+    static public int staticInt40796;
+    static public int staticInt40797;
+    static public int staticInt40798;
+    static public int staticInt40799;
+    static public int staticInt40800;
+    static public int staticInt40801;
+    static public int staticInt40802;
+    static public int staticInt40803;
+    static public int staticInt40804;
+    static public int staticInt40805;
+    static public int staticInt40806;
+    static public int staticInt40807;
+    static public int staticInt40808;
+    static public int staticInt40809;
+    static public int staticInt40810;
+    static public int staticInt40811;
+    static public int staticInt40812;
+    static public int staticInt40813;
+    static public int staticInt40814;
+    static public int staticInt40815;
+    static public int staticInt40816;
+    static public int staticInt40817;
+    static public int staticInt40818;
+    static public int staticInt40819;
+    static public int staticInt40820;
+    static public int staticInt40821;
+    static public int staticInt40822;
+    static public int staticInt40823;
+    static public int staticInt40824;
+    static public int staticInt40825;
+    static public int staticInt40826;
+    static public int staticInt40827;
+    static public int staticInt40828;
+    static public int staticInt40829;
+    static public int staticInt40830;
+    static public int staticInt40831;
+    static public int staticInt40832;
+    static public int staticInt40833;
+    static public int staticInt40834;
+    static public int staticInt40835;
+    static public int staticInt40836;
+    static public int staticInt40837;
+    static public int staticInt40838;
+    static public int staticInt40839;
+    static public int staticInt40840;
+    static public int staticInt40841;
+    static public int staticInt40842;
+    static public int staticInt40843;
+    static public int staticInt40844;
+    static public int staticInt40845;
+    static public int staticInt40846;
+    static public int staticInt40847;
+    static public int staticInt40848;
+    static public int staticInt40849;
+    static public int staticInt40850;
+    static public int staticInt40851;
+    static public int staticInt40852;
+    static public int staticInt40853;
+    static public int staticInt40854;
+    static public int staticInt40855;
+    static public int staticInt40856;
+    static public int staticInt40857;
+    static public int staticInt40858;
+    static public int staticInt40859;
+    static public int staticInt40860;
+    static public int staticInt40861;
+    static public int staticInt40862;
+    static public int staticInt40863;
+    static public int staticInt40864;
+    static public int staticInt40865;
+    static public int staticInt40866;
+    static public int staticInt40867;
+    static public int staticInt40868;
+    static public int staticInt40869;
+    static public int staticInt40870;
+    static public int staticInt40871;
+    static public int staticInt40872;
+    static public int staticInt40873;
+    static public int staticInt40874;
+    static public int staticInt40875;
+    static public int staticInt40876;
+    static public int staticInt40877;
+    static public int staticInt40878;
+    static public int staticInt40879;
+    static public int staticInt40880;
+    static public int staticInt40881;
+    static public int staticInt40882;
+    static public int staticInt40883;
+    static public int staticInt40884;
+    static public int staticInt40885;
+    static public int staticInt40886;
+    static public int staticInt40887;
+    static public int staticInt40888;
+    static public int staticInt40889;
+    static public int staticInt40890;
+    static public int staticInt40891;
+    static public int staticInt40892;
+    static public int staticInt40893;
+    static public int staticInt40894;
+    static public int staticInt40895;
+    static public int staticInt40896;
+    static public int staticInt40897;
+    static public int staticInt40898;
+    static public int staticInt40899;
+    static public int staticInt40900;
+    static public int staticInt40901;
+    static public int staticInt40902;
+    static public int staticInt40903;
+    static public int staticInt40904;
+    static public int staticInt40905;
+    static public int staticInt40906;
+    static public int staticInt40907;
+    static public int staticInt40908;
+    static public int staticInt40909;
+    static public int staticInt40910;
+    static public int staticInt40911;
+    static public int staticInt40912;
+    static public int staticInt40913;
+    static public int staticInt40914;
+    static public int staticInt40915;
+    static public int staticInt40916;
+    static public int staticInt40917;
+    static public int staticInt40918;
+    static public int staticInt40919;
+    static public int staticInt40920;
+    static public int staticInt40921;
+    static public int staticInt40922;
+    static public int staticInt40923;
+    static public int staticInt40924;
+    static public int staticInt40925;
+    static public int staticInt40926;
+    static public int staticInt40927;
+    static public int staticInt40928;
+    static public int staticInt40929;
+    static public int staticInt40930;
+    static public int staticInt40931;
+    static public int staticInt40932;
+    static public int staticInt40933;
+    static public int staticInt40934;
+    static public int staticInt40935;
+    static public int staticInt40936;
+    static public int staticInt40937;
+    static public int staticInt40938;
+    static public int staticInt40939;
+    static public int staticInt40940;
+    static public int staticInt40941;
+    static public int staticInt40942;
+    static public int staticInt40943;
+    static public int staticInt40944;
+    static public int staticInt40945;
+    static public int staticInt40946;
+    static public int staticInt40947;
+    static public int staticInt40948;
+    static public int staticInt40949;
+    static public int staticInt40950;
+    static public int staticInt40951;
+    static public int staticInt40952;
+    static public int staticInt40953;
+    static public int staticInt40954;
+    static public int staticInt40955;
+    static public int staticInt40956;
+    static public int staticInt40957;
+    static public int staticInt40958;
+    static public int staticInt40959;
+    static public int staticInt40960;
+    static public int staticInt40961;
+    static public int staticInt40962;
+    static public int staticInt40963;
+    static public int staticInt40964;
+    static public int staticInt40965;
+    static public int staticInt40966;
+    static public int staticInt40967;
+    static public int staticInt40968;
+    static public int staticInt40969;
+    static public int staticInt40970;
+    static public int staticInt40971;
+    static public int staticInt40972;
+    static public int staticInt40973;
+    static public int staticInt40974;
+    static public int staticInt40975;
+    static public int staticInt40976;
+    static public int staticInt40977;
+    static public int staticInt40978;
+    static public int staticInt40979;
+    static public int staticInt40980;
+    static public int staticInt40981;
+    static public int staticInt40982;
+    static public int staticInt40983;
+    static public int staticInt40984;
+    static public int staticInt40985;
+    static public int staticInt40986;
+    static public int staticInt40987;
+    static public int staticInt40988;
+    static public int staticInt40989;
+    static public int staticInt40990;
+    static public int staticInt40991;
+    static public int staticInt40992;
+    static public int staticInt40993;
+    static public int staticInt40994;
+    static public int staticInt40995;
+    static public int staticInt40996;
+    static public int staticInt40997;
+    static public int staticInt40998;
+    static public int staticInt40999;
+    static public int staticInt41000;
+    static public int staticInt41001;
+    static public int staticInt41002;
+    static public int staticInt41003;
+    static public int staticInt41004;
+    static public int staticInt41005;
+    static public int staticInt41006;
+    static public int staticInt41007;
+    static public int staticInt41008;
+    static public int staticInt41009;
+    static public int staticInt41010;
+    static public int staticInt41011;
+    static public int staticInt41012;
+    static public int staticInt41013;
+    static public int staticInt41014;
+    static public int staticInt41015;
+    static public int staticInt41016;
+    static public int staticInt41017;
+    static public int staticInt41018;
+    static public int staticInt41019;
+    static public int staticInt41020;
+    static public int staticInt41021;
+    static public int staticInt41022;
+    static public int staticInt41023;
+    static public int staticInt41024;
+    static public int staticInt41025;
+    static public int staticInt41026;
+    static public int staticInt41027;
+    static public int staticInt41028;
+    static public int staticInt41029;
+    static public int staticInt41030;
+    static public int staticInt41031;
+    static public int staticInt41032;
+    static public int staticInt41033;
+    static public int staticInt41034;
+    static public int staticInt41035;
+    static public int staticInt41036;
+    static public int staticInt41037;
+    static public int staticInt41038;
+    static public int staticInt41039;
+    static public int staticInt41040;
+    static public int staticInt41041;
+    static public int staticInt41042;
+    static public int staticInt41043;
+    static public int staticInt41044;
+    static public int staticInt41045;
+    static public int staticInt41046;
+    static public int staticInt41047;
+    static public int staticInt41048;
+    static public int staticInt41049;
+    static public int staticInt41050;
+    static public int staticInt41051;
+    static public int staticInt41052;
+    static public int staticInt41053;
+    static public int staticInt41054;
+    static public int staticInt41055;
+    static public int staticInt41056;
+    static public int staticInt41057;
+    static public int staticInt41058;
+    static public int staticInt41059;
+    static public int staticInt41060;
+    static public int staticInt41061;
+    static public int staticInt41062;
+    static public int staticInt41063;
+    static public int staticInt41064;
+    static public int staticInt41065;
+    static public int staticInt41066;
+    static public int staticInt41067;
+    static public int staticInt41068;
+    static public int staticInt41069;
+    static public int staticInt41070;
+    static public int staticInt41071;
+    static public int staticInt41072;
+    static public int staticInt41073;
+    static public int staticInt41074;
+    static public int staticInt41075;
+    static public int staticInt41076;
+    static public int staticInt41077;
+    static public int staticInt41078;
+    static public int staticInt41079;
+    static public int staticInt41080;
+    static public int staticInt41081;
+    static public int staticInt41082;
+    static public int staticInt41083;
+    static public int staticInt41084;
+    static public int staticInt41085;
+    static public int staticInt41086;
+    static public int staticInt41087;
+    static public int staticInt41088;
+    static public int staticInt41089;
+    static public int staticInt41090;
+    static public int staticInt41091;
+    static public int staticInt41092;
+    static public int staticInt41093;
+    static public int staticInt41094;
+    static public int staticInt41095;
+    static public int staticInt41096;
+    static public int staticInt41097;
+    static public int staticInt41098;
+    static public int staticInt41099;
+    static public int staticInt41100;
+    static public int staticInt41101;
+    static public int staticInt41102;
+    static public int staticInt41103;
+    static public int staticInt41104;
+    static public int staticInt41105;
+    static public int staticInt41106;
+    static public int staticInt41107;
+    static public int staticInt41108;
+    static public int staticInt41109;
+    static public int staticInt41110;
+    static public int staticInt41111;
+    static public int staticInt41112;
+    static public int staticInt41113;
+    static public int staticInt41114;
+    static public int staticInt41115;
+    static public int staticInt41116;
+    static public int staticInt41117;
+    static public int staticInt41118;
+    static public int staticInt41119;
+    static public int staticInt41120;
+    static public int staticInt41121;
+    static public int staticInt41122;
+    static public int staticInt41123;
+    static public int staticInt41124;
+    static public int staticInt41125;
+    static public int staticInt41126;
+    static public int staticInt41127;
+    static public int staticInt41128;
+    static public int staticInt41129;
+    static public int staticInt41130;
+    static public int staticInt41131;
+    static public int staticInt41132;
+    static public int staticInt41133;
+    static public int staticInt41134;
+    static public int staticInt41135;
+    static public int staticInt41136;
+    static public int staticInt41137;
+    static public int staticInt41138;
+    static public int staticInt41139;
+    static public int staticInt41140;
+    static public int staticInt41141;
+    static public int staticInt41142;
+    static public int staticInt41143;
+    static public int staticInt41144;
+    static public int staticInt41145;
+    static public int staticInt41146;
+    static public int staticInt41147;
+    static public int staticInt41148;
+    static public int staticInt41149;
+    static public int staticInt41150;
+    static public int staticInt41151;
+    static public int staticInt41152;
+    static public int staticInt41153;
+    static public int staticInt41154;
+    static public int staticInt41155;
+    static public int staticInt41156;
+    static public int staticInt41157;
+    static public int staticInt41158;
+    static public int staticInt41159;
+    static public int staticInt41160;
+    static public int staticInt41161;
+    static public int staticInt41162;
+    static public int staticInt41163;
+    static public int staticInt41164;
+    static public int staticInt41165;
+    static public int staticInt41166;
+    static public int staticInt41167;
+    static public int staticInt41168;
+    static public int staticInt41169;
+    static public int staticInt41170;
+    static public int staticInt41171;
+    static public int staticInt41172;
+    static public int staticInt41173;
+    static public int staticInt41174;
+    static public int staticInt41175;
+    static public int staticInt41176;
+    static public int staticInt41177;
+    static public int staticInt41178;
+    static public int staticInt41179;
+    static public int staticInt41180;
+    static public int staticInt41181;
+    static public int staticInt41182;
+    static public int staticInt41183;
+    static public int staticInt41184;
+    static public int staticInt41185;
+    static public int staticInt41186;
+    static public int staticInt41187;
+    static public int staticInt41188;
+    static public int staticInt41189;
+    static public int staticInt41190;
+    static public int staticInt41191;
+    static public int staticInt41192;
+    static public int staticInt41193;
+    static public int staticInt41194;
+    static public int staticInt41195;
+    static public int staticInt41196;
+    static public int staticInt41197;
+    static public int staticInt41198;
+    static public int staticInt41199;
+    static public int staticInt41200;
+    static public int staticInt41201;
+    static public int staticInt41202;
+    static public int staticInt41203;
+    static public int staticInt41204;
+    static public int staticInt41205;
+    static public int staticInt41206;
+    static public int staticInt41207;
+    static public int staticInt41208;
+    static public int staticInt41209;
+    static public int staticInt41210;
+    static public int staticInt41211;
+    static public int staticInt41212;
+    static public int staticInt41213;
+    static public int staticInt41214;
+    static public int staticInt41215;
+    static public int staticInt41216;
+    static public int staticInt41217;
+    static public int staticInt41218;
+    static public int staticInt41219;
+    static public int staticInt41220;
+    static public int staticInt41221;
+    static public int staticInt41222;
+    static public int staticInt41223;
+    static public int staticInt41224;
+    static public int staticInt41225;
+    static public int staticInt41226;
+    static public int staticInt41227;
+    static public int staticInt41228;
+    static public int staticInt41229;
+    static public int staticInt41230;
+    static public int staticInt41231;
+    static public int staticInt41232;
+    static public int staticInt41233;
+    static public int staticInt41234;
+    static public int staticInt41235;
+    static public int staticInt41236;
+    static public int staticInt41237;
+    static public int staticInt41238;
+    static public int staticInt41239;
+    static public int staticInt41240;
+    static public int staticInt41241;
+    static public int staticInt41242;
+    static public int staticInt41243;
+    static public int staticInt41244;
+    static public int staticInt41245;
+    static public int staticInt41246;
+    static public int staticInt41247;
+    static public int staticInt41248;
+    static public int staticInt41249;
+    static public int staticInt41250;
+    static public int staticInt41251;
+    static public int staticInt41252;
+    static public int staticInt41253;
+    static public int staticInt41254;
+    static public int staticInt41255;
+    static public int staticInt41256;
+    static public int staticInt41257;
+    static public int staticInt41258;
+    static public int staticInt41259;
+    static public int staticInt41260;
+    static public int staticInt41261;
+    static public int staticInt41262;
+    static public int staticInt41263;
+    static public int staticInt41264;
+    static public int staticInt41265;
+    static public int staticInt41266;
+    static public int staticInt41267;
+    static public int staticInt41268;
+    static public int staticInt41269;
+    static public int staticInt41270;
+    static public int staticInt41271;
+    static public int staticInt41272;
+    static public int staticInt41273;
+    static public int staticInt41274;
+    static public int staticInt41275;
+    static public int staticInt41276;
+    static public int staticInt41277;
+    static public int staticInt41278;
+    static public int staticInt41279;
+    static public int staticInt41280;
+    static public int staticInt41281;
+    static public int staticInt41282;
+    static public int staticInt41283;
+    static public int staticInt41284;
+    static public int staticInt41285;
+    static public int staticInt41286;
+    static public int staticInt41287;
+    static public int staticInt41288;
+    static public int staticInt41289;
+    static public int staticInt41290;
+    static public int staticInt41291;
+    static public int staticInt41292;
+    static public int staticInt41293;
+    static public int staticInt41294;
+    static public int staticInt41295;
+    static public int staticInt41296;
+    static public int staticInt41297;
+    static public int staticInt41298;
+    static public int staticInt41299;
+    static public int staticInt41300;
+    static public int staticInt41301;
+    static public int staticInt41302;
+    static public int staticInt41303;
+    static public int staticInt41304;
+    static public int staticInt41305;
+    static public int staticInt41306;
+    static public int staticInt41307;
+    static public int staticInt41308;
+    static public int staticInt41309;
+    static public int staticInt41310;
+    static public int staticInt41311;
+    static public int staticInt41312;
+    static public int staticInt41313;
+    static public int staticInt41314;
+    static public int staticInt41315;
+    static public int staticInt41316;
+    static public int staticInt41317;
+    static public int staticInt41318;
+    static public int staticInt41319;
+    static public int staticInt41320;
+    static public int staticInt41321;
+    static public int staticInt41322;
+    static public int staticInt41323;
+    static public int staticInt41324;
+    static public int staticInt41325;
+    static public int staticInt41326;
+    static public int staticInt41327;
+    static public int staticInt41328;
+    static public int staticInt41329;
+    static public int staticInt41330;
+    static public int staticInt41331;
+    static public int staticInt41332;
+    static public int staticInt41333;
+    static public int staticInt41334;
+    static public int staticInt41335;
+    static public int staticInt41336;
+    static public int staticInt41337;
+    static public int staticInt41338;
+    static public int staticInt41339;
+    static public int staticInt41340;
+    static public int staticInt41341;
+    static public int staticInt41342;
+    static public int staticInt41343;
+    static public int staticInt41344;
+    static public int staticInt41345;
+    static public int staticInt41346;
+    static public int staticInt41347;
+    static public int staticInt41348;
+    static public int staticInt41349;
+    static public int staticInt41350;
+    static public int staticInt41351;
+    static public int staticInt41352;
+    static public int staticInt41353;
+    static public int staticInt41354;
+    static public int staticInt41355;
+    static public int staticInt41356;
+    static public int staticInt41357;
+    static public int staticInt41358;
+    static public int staticInt41359;
+    static public int staticInt41360;
+    static public int staticInt41361;
+    static public int staticInt41362;
+    static public int staticInt41363;
+    static public int staticInt41364;
+    static public int staticInt41365;
+    static public int staticInt41366;
+    static public int staticInt41367;
+    static public int staticInt41368;
+    static public int staticInt41369;
+    static public int staticInt41370;
+    static public int staticInt41371;
+    static public int staticInt41372;
+    static public int staticInt41373;
+    static public int staticInt41374;
+    static public int staticInt41375;
+    static public int staticInt41376;
+    static public int staticInt41377;
+    static public int staticInt41378;
+    static public int staticInt41379;
+    static public int staticInt41380;
+    static public int staticInt41381;
+    static public int staticInt41382;
+    static public int staticInt41383;
+    static public int staticInt41384;
+    static public int staticInt41385;
+    static public int staticInt41386;
+    static public int staticInt41387;
+    static public int staticInt41388;
+    static public int staticInt41389;
+    static public int staticInt41390;
+    static public int staticInt41391;
+    static public int staticInt41392;
+    static public int staticInt41393;
+    static public int staticInt41394;
+    static public int staticInt41395;
+    static public int staticInt41396;
+    static public int staticInt41397;
+    static public int staticInt41398;
+    static public int staticInt41399;
+    static public int staticInt41400;
+    static public int staticInt41401;
+    static public int staticInt41402;
+    static public int staticInt41403;
+    static public int staticInt41404;
+    static public int staticInt41405;
+    static public int staticInt41406;
+    static public int staticInt41407;
+    static public int staticInt41408;
+    static public int staticInt41409;
+    static public int staticInt41410;
+    static public int staticInt41411;
+    static public int staticInt41412;
+    static public int staticInt41413;
+    static public int staticInt41414;
+    static public int staticInt41415;
+    static public int staticInt41416;
+    static public int staticInt41417;
+    static public int staticInt41418;
+    static public int staticInt41419;
+    static public int staticInt41420;
+    static public int staticInt41421;
+    static public int staticInt41422;
+    static public int staticInt41423;
+    static public int staticInt41424;
+    static public int staticInt41425;
+    static public int staticInt41426;
+    static public int staticInt41427;
+    static public int staticInt41428;
+    static public int staticInt41429;
+    static public int staticInt41430;
+    static public int staticInt41431;
+    static public int staticInt41432;
+    static public int staticInt41433;
+    static public int staticInt41434;
+    static public int staticInt41435;
+    static public int staticInt41436;
+    static public int staticInt41437;
+    static public int staticInt41438;
+    static public int staticInt41439;
+    static public int staticInt41440;
+    static public int staticInt41441;
+    static public int staticInt41442;
+    static public int staticInt41443;
+    static public int staticInt41444;
+    static public int staticInt41445;
+    static public int staticInt41446;
+    static public int staticInt41447;
+    static public int staticInt41448;
+    static public int staticInt41449;
+    static public int staticInt41450;
+    static public int staticInt41451;
+    static public int staticInt41452;
+    static public int staticInt41453;
+    static public int staticInt41454;
+    static public int staticInt41455;
+    static public int staticInt41456;
+    static public int staticInt41457;
+    static public int staticInt41458;
+    static public int staticInt41459;
+    static public int staticInt41460;
+    static public int staticInt41461;
+    static public int staticInt41462;
+    static public int staticInt41463;
+    static public int staticInt41464;
+    static public int staticInt41465;
+    static public int staticInt41466;
+    static public int staticInt41467;
+    static public int staticInt41468;
+    static public int staticInt41469;
+    static public int staticInt41470;
+    static public int staticInt41471;
+    static public int staticInt41472;
+    static public int staticInt41473;
+    static public int staticInt41474;
+    static public int staticInt41475;
+    static public int staticInt41476;
+    static public int staticInt41477;
+    static public int staticInt41478;
+    static public int staticInt41479;
+    static public int staticInt41480;
+    static public int staticInt41481;
+    static public int staticInt41482;
+    static public int staticInt41483;
+    static public int staticInt41484;
+    static public int staticInt41485;
+    static public int staticInt41486;
+    static public int staticInt41487;
+    static public int staticInt41488;
+    static public int staticInt41489;
+    static public int staticInt41490;
+    static public int staticInt41491;
+    static public int staticInt41492;
+    static public int staticInt41493;
+    static public int staticInt41494;
+    static public int staticInt41495;
+    static public int staticInt41496;
+    static public int staticInt41497;
+    static public int staticInt41498;
+    static public int staticInt41499;
+    static public int staticInt41500;
+    static public int staticInt41501;
+    static public int staticInt41502;
+    static public int staticInt41503;
+    static public int staticInt41504;
+    static public int staticInt41505;
+    static public int staticInt41506;
+    static public int staticInt41507;
+    static public int staticInt41508;
+    static public int staticInt41509;
+    static public int staticInt41510;
+    static public int staticInt41511;
+    static public int staticInt41512;
+    static public int staticInt41513;
+    static public int staticInt41514;
+    static public int staticInt41515;
+    static public int staticInt41516;
+    static public int staticInt41517;
+    static public int staticInt41518;
+    static public int staticInt41519;
+    static public int staticInt41520;
+    static public int staticInt41521;
+    static public int staticInt41522;
+    static public int staticInt41523;
+    static public int staticInt41524;
+    static public int staticInt41525;
+    static public int staticInt41526;
+    static public int staticInt41527;
+    static public int staticInt41528;
+    static public int staticInt41529;
+    static public int staticInt41530;
+    static public int staticInt41531;
+    static public int staticInt41532;
+    static public int staticInt41533;
+    static public int staticInt41534;
+    static public int staticInt41535;
+    static public int staticInt41536;
+    static public int staticInt41537;
+    static public int staticInt41538;
+    static public int staticInt41539;
+    static public int staticInt41540;
+    static public int staticInt41541;
+    static public int staticInt41542;
+    static public int staticInt41543;
+    static public int staticInt41544;
+    static public int staticInt41545;
+    static public int staticInt41546;
+    static public int staticInt41547;
+    static public int staticInt41548;
+    static public int staticInt41549;
+    static public int staticInt41550;
+    static public int staticInt41551;
+    static public int staticInt41552;
+    static public int staticInt41553;
+    static public int staticInt41554;
+    static public int staticInt41555;
+    static public int staticInt41556;
+    static public int staticInt41557;
+    static public int staticInt41558;
+    static public int staticInt41559;
+    static public int staticInt41560;
+    static public int staticInt41561;
+    static public int staticInt41562;
+    static public int staticInt41563;
+    static public int staticInt41564;
+    static public int staticInt41565;
+    static public int staticInt41566;
+    static public int staticInt41567;
+    static public int staticInt41568;
+    static public int staticInt41569;
+    static public int staticInt41570;
+    static public int staticInt41571;
+    static public int staticInt41572;
+    static public int staticInt41573;
+    static public int staticInt41574;
+    static public int staticInt41575;
+    static public int staticInt41576;
+    static public int staticInt41577;
+    static public int staticInt41578;
+    static public int staticInt41579;
+    static public int staticInt41580;
+    static public int staticInt41581;
+    static public int staticInt41582;
+    static public int staticInt41583;
+    static public int staticInt41584;
+    static public int staticInt41585;
+    static public int staticInt41586;
+    static public int staticInt41587;
+    static public int staticInt41588;
+    static public int staticInt41589;
+    static public int staticInt41590;
+    static public int staticInt41591;
+    static public int staticInt41592;
+    static public int staticInt41593;
+    static public int staticInt41594;
+    static public int staticInt41595;
+    static public int staticInt41596;
+    static public int staticInt41597;
+    static public int staticInt41598;
+    static public int staticInt41599;
+    static public int staticInt41600;
+    static public int staticInt41601;
+    static public int staticInt41602;
+    static public int staticInt41603;
+    static public int staticInt41604;
+    static public int staticInt41605;
+    static public int staticInt41606;
+    static public int staticInt41607;
+    static public int staticInt41608;
+    static public int staticInt41609;
+    static public int staticInt41610;
+    static public int staticInt41611;
+    static public int staticInt41612;
+    static public int staticInt41613;
+    static public int staticInt41614;
+    static public int staticInt41615;
+    static public int staticInt41616;
+    static public int staticInt41617;
+    static public int staticInt41618;
+    static public int staticInt41619;
+    static public int staticInt41620;
+    static public int staticInt41621;
+    static public int staticInt41622;
+    static public int staticInt41623;
+    static public int staticInt41624;
+    static public int staticInt41625;
+    static public int staticInt41626;
+    static public int staticInt41627;
+    static public int staticInt41628;
+    static public int staticInt41629;
+    static public int staticInt41630;
+    static public int staticInt41631;
+    static public int staticInt41632;
+    static public int staticInt41633;
+    static public int staticInt41634;
+    static public int staticInt41635;
+    static public int staticInt41636;
+    static public int staticInt41637;
+    static public int staticInt41638;
+    static public int staticInt41639;
+    static public int staticInt41640;
+    static public int staticInt41641;
+    static public int staticInt41642;
+    static public int staticInt41643;
+    static public int staticInt41644;
+    static public int staticInt41645;
+    static public int staticInt41646;
+    static public int staticInt41647;
+    static public int staticInt41648;
+    static public int staticInt41649;
+    static public int staticInt41650;
+    static public int staticInt41651;
+    static public int staticInt41652;
+    static public int staticInt41653;
+    static public int staticInt41654;
+    static public int staticInt41655;
+    static public int staticInt41656;
+    static public int staticInt41657;
+    static public int staticInt41658;
+    static public int staticInt41659;
+    static public int staticInt41660;
+    static public int staticInt41661;
+    static public int staticInt41662;
+    static public int staticInt41663;
+    static public int staticInt41664;
+    static public int staticInt41665;
+    static public int staticInt41666;
+    static public int staticInt41667;
+    static public int staticInt41668;
+    static public int staticInt41669;
+    static public int staticInt41670;
+    static public int staticInt41671;
+    static public int staticInt41672;
+    static public int staticInt41673;
+    static public int staticInt41674;
+    static public int staticInt41675;
+    static public int staticInt41676;
+    static public int staticInt41677;
+    static public int staticInt41678;
+    static public int staticInt41679;
+    static public int staticInt41680;
+    static public int staticInt41681;
+    static public int staticInt41682;
+    static public int staticInt41683;
+    static public int staticInt41684;
+    static public int staticInt41685;
+    static public int staticInt41686;
+    static public int staticInt41687;
+    static public int staticInt41688;
+    static public int staticInt41689;
+    static public int staticInt41690;
+    static public int staticInt41691;
+    static public int staticInt41692;
+    static public int staticInt41693;
+    static public int staticInt41694;
+    static public int staticInt41695;
+    static public int staticInt41696;
+    static public int staticInt41697;
+    static public int staticInt41698;
+    static public int staticInt41699;
+    static public int staticInt41700;
+    static public int staticInt41701;
+    static public int staticInt41702;
+    static public int staticInt41703;
+    static public int staticInt41704;
+    static public int staticInt41705;
+    static public int staticInt41706;
+    static public int staticInt41707;
+    static public int staticInt41708;
+    static public int staticInt41709;
+    static public int staticInt41710;
+    static public int staticInt41711;
+    static public int staticInt41712;
+    static public int staticInt41713;
+    static public int staticInt41714;
+    static public int staticInt41715;
+    static public int staticInt41716;
+    static public int staticInt41717;
+    static public int staticInt41718;
+    static public int staticInt41719;
+    static public int staticInt41720;
+    static public int staticInt41721;
+    static public int staticInt41722;
+    static public int staticInt41723;
+    static public int staticInt41724;
+    static public int staticInt41725;
+    static public int staticInt41726;
+    static public int staticInt41727;
+    static public int staticInt41728;
+    static public int staticInt41729;
+    static public int staticInt41730;
+    static public int staticInt41731;
+    static public int staticInt41732;
+    static public int staticInt41733;
+    static public int staticInt41734;
+    static public int staticInt41735;
+    static public int staticInt41736;
+    static public int staticInt41737;
+    static public int staticInt41738;
+    static public int staticInt41739;
+    static public int staticInt41740;
+    static public int staticInt41741;
+    static public int staticInt41742;
+    static public int staticInt41743;
+    static public int staticInt41744;
+    static public int staticInt41745;
+    static public int staticInt41746;
+    static public int staticInt41747;
+    static public int staticInt41748;
+    static public int staticInt41749;
+    static public int staticInt41750;
+    static public int staticInt41751;
+    static public int staticInt41752;
+    static public int staticInt41753;
+    static public int staticInt41754;
+    static public int staticInt41755;
+    static public int staticInt41756;
+    static public int staticInt41757;
+    static public int staticInt41758;
+    static public int staticInt41759;
+    static public int staticInt41760;
+    static public int staticInt41761;
+    static public int staticInt41762;
+    static public int staticInt41763;
+    static public int staticInt41764;
+    static public int staticInt41765;
+    static public int staticInt41766;
+    static public int staticInt41767;
+    static public int staticInt41768;
+    static public int staticInt41769;
+    static public int staticInt41770;
+    static public int staticInt41771;
+    static public int staticInt41772;
+    static public int staticInt41773;
+    static public int staticInt41774;
+    static public int staticInt41775;
+    static public int staticInt41776;
+    static public int staticInt41777;
+    static public int staticInt41778;
+    static public int staticInt41779;
+    static public int staticInt41780;
+    static public int staticInt41781;
+    static public int staticInt41782;
+    static public int staticInt41783;
+    static public int staticInt41784;
+    static public int staticInt41785;
+    static public int staticInt41786;
+    static public int staticInt41787;
+    static public int staticInt41788;
+    static public int staticInt41789;
+    static public int staticInt41790;
+    static public int staticInt41791;
+    static public int staticInt41792;
+    static public int staticInt41793;
+    static public int staticInt41794;
+    static public int staticInt41795;
+    static public int staticInt41796;
+    static public int staticInt41797;
+    static public int staticInt41798;
+    static public int staticInt41799;
+    static public int staticInt41800;
+    static public int staticInt41801;
+    static public int staticInt41802;
+    static public int staticInt41803;
+    static public int staticInt41804;
+    static public int staticInt41805;
+    static public int staticInt41806;
+    static public int staticInt41807;
+    static public int staticInt41808;
+    static public int staticInt41809;
+    static public int staticInt41810;
+    static public int staticInt41811;
+    static public int staticInt41812;
+    static public int staticInt41813;
+    static public int staticInt41814;
+    static public int staticInt41815;
+    static public int staticInt41816;
+    static public int staticInt41817;
+    static public int staticInt41818;
+    static public int staticInt41819;
+    static public int staticInt41820;
+    static public int staticInt41821;
+    static public int staticInt41822;
+    static public int staticInt41823;
+    static public int staticInt41824;
+    static public int staticInt41825;
+    static public int staticInt41826;
+    static public int staticInt41827;
+    static public int staticInt41828;
+    static public int staticInt41829;
+    static public int staticInt41830;
+    static public int staticInt41831;
+    static public int staticInt41832;
+    static public int staticInt41833;
+    static public int staticInt41834;
+    static public int staticInt41835;
+    static public int staticInt41836;
+    static public int staticInt41837;
+    static public int staticInt41838;
+    static public int staticInt41839;
+    static public int staticInt41840;
+    static public int staticInt41841;
+    static public int staticInt41842;
+    static public int staticInt41843;
+    static public int staticInt41844;
+    static public int staticInt41845;
+    static public int staticInt41846;
+    static public int staticInt41847;
+    static public int staticInt41848;
+    static public int staticInt41849;
+    static public int staticInt41850;
+    static public int staticInt41851;
+    static public int staticInt41852;
+    static public int staticInt41853;
+    static public int staticInt41854;
+    static public int staticInt41855;
+    static public int staticInt41856;
+    static public int staticInt41857;
+    static public int staticInt41858;
+    static public int staticInt41859;
+    static public int staticInt41860;
+    static public int staticInt41861;
+    static public int staticInt41862;
+    static public int staticInt41863;
+    static public int staticInt41864;
+    static public int staticInt41865;
+    static public int staticInt41866;
+    static public int staticInt41867;
+    static public int staticInt41868;
+    static public int staticInt41869;
+    static public int staticInt41870;
+    static public int staticInt41871;
+    static public int staticInt41872;
+    static public int staticInt41873;
+    static public int staticInt41874;
+    static public int staticInt41875;
+    static public int staticInt41876;
+    static public int staticInt41877;
+    static public int staticInt41878;
+    static public int staticInt41879;
+    static public int staticInt41880;
+    static public int staticInt41881;
+    static public int staticInt41882;
+    static public int staticInt41883;
+    static public int staticInt41884;
+    static public int staticInt41885;
+    static public int staticInt41886;
+    static public int staticInt41887;
+    static public int staticInt41888;
+    static public int staticInt41889;
+    static public int staticInt41890;
+    static public int staticInt41891;
+    static public int staticInt41892;
+    static public int staticInt41893;
+    static public int staticInt41894;
+    static public int staticInt41895;
+    static public int staticInt41896;
+    static public int staticInt41897;
+    static public int staticInt41898;
+    static public int staticInt41899;
+    static public int staticInt41900;
+    static public int staticInt41901;
+    static public int staticInt41902;
+    static public int staticInt41903;
+    static public int staticInt41904;
+    static public int staticInt41905;
+    static public int staticInt41906;
+    static public int staticInt41907;
+    static public int staticInt41908;
+    static public int staticInt41909;
+    static public int staticInt41910;
+    static public int staticInt41911;
+    static public int staticInt41912;
+    static public int staticInt41913;
+    static public int staticInt41914;
+    static public int staticInt41915;
+    static public int staticInt41916;
+    static public int staticInt41917;
+    static public int staticInt41918;
+    static public int staticInt41919;
+    static public int staticInt41920;
+    static public int staticInt41921;
+    static public int staticInt41922;
+    static public int staticInt41923;
+    static public int staticInt41924;
+    static public int staticInt41925;
+    static public int staticInt41926;
+    static public int staticInt41927;
+    static public int staticInt41928;
+    static public int staticInt41929;
+    static public int staticInt41930;
+    static public int staticInt41931;
+    static public int staticInt41932;
+    static public int staticInt41933;
+    static public int staticInt41934;
+    static public int staticInt41935;
+    static public int staticInt41936;
+    static public int staticInt41937;
+    static public int staticInt41938;
+    static public int staticInt41939;
+    static public int staticInt41940;
+    static public int staticInt41941;
+    static public int staticInt41942;
+    static public int staticInt41943;
+    static public int staticInt41944;
+    static public int staticInt41945;
+    static public int staticInt41946;
+    static public int staticInt41947;
+    static public int staticInt41948;
+    static public int staticInt41949;
+    static public int staticInt41950;
+    static public int staticInt41951;
+    static public int staticInt41952;
+    static public int staticInt41953;
+    static public int staticInt41954;
+    static public int staticInt41955;
+    static public int staticInt41956;
+    static public int staticInt41957;
+    static public int staticInt41958;
+    static public int staticInt41959;
+    static public int staticInt41960;
+    static public int staticInt41961;
+    static public int staticInt41962;
+    static public int staticInt41963;
+    static public int staticInt41964;
+    static public int staticInt41965;
+    static public int staticInt41966;
+    static public int staticInt41967;
+    static public int staticInt41968;
+    static public int staticInt41969;
+    static public int staticInt41970;
+    static public int staticInt41971;
+    static public int staticInt41972;
+    static public int staticInt41973;
+    static public int staticInt41974;
+    static public int staticInt41975;
+    static public int staticInt41976;
+    static public int staticInt41977;
+    static public int staticInt41978;
+    static public int staticInt41979;
+    static public int staticInt41980;
+    static public int staticInt41981;
+    static public int staticInt41982;
+    static public int staticInt41983;
+    static public int staticInt41984;
+    static public int staticInt41985;
+    static public int staticInt41986;
+    static public int staticInt41987;
+    static public int staticInt41988;
+    static public int staticInt41989;
+    static public int staticInt41990;
+    static public int staticInt41991;
+    static public int staticInt41992;
+    static public int staticInt41993;
+    static public int staticInt41994;
+    static public int staticInt41995;
+    static public int staticInt41996;
+    static public int staticInt41997;
+    static public int staticInt41998;
+    static public int staticInt41999;
+    static public int staticInt42000;
+    static public int staticInt42001;
+    static public int staticInt42002;
+    static public int staticInt42003;
+    static public int staticInt42004;
+    static public int staticInt42005;
+    static public int staticInt42006;
+    static public int staticInt42007;
+    static public int staticInt42008;
+    static public int staticInt42009;
+    static public int staticInt42010;
+    static public int staticInt42011;
+    static public int staticInt42012;
+    static public int staticInt42013;
+    static public int staticInt42014;
+    static public int staticInt42015;
+    static public int staticInt42016;
+    static public int staticInt42017;
+    static public int staticInt42018;
+    static public int staticInt42019;
+    static public int staticInt42020;
+    static public int staticInt42021;
+    static public int staticInt42022;
+    static public int staticInt42023;
+    static public int staticInt42024;
+    static public int staticInt42025;
+    static public int staticInt42026;
+    static public int staticInt42027;
+    static public int staticInt42028;
+    static public int staticInt42029;
+    static public int staticInt42030;
+    static public int staticInt42031;
+    static public int staticInt42032;
+    static public int staticInt42033;
+    static public int staticInt42034;
+    static public int staticInt42035;
+    static public int staticInt42036;
+    static public int staticInt42037;
+    static public int staticInt42038;
+    static public int staticInt42039;
+    static public int staticInt42040;
+    static public int staticInt42041;
+    static public int staticInt42042;
+    static public int staticInt42043;
+    static public int staticInt42044;
+    static public int staticInt42045;
+    static public int staticInt42046;
+    static public int staticInt42047;
+    static public int staticInt42048;
+    static public int staticInt42049;
+    static public int staticInt42050;
+    static public int staticInt42051;
+    static public int staticInt42052;
+    static public int staticInt42053;
+    static public int staticInt42054;
+    static public int staticInt42055;
+    static public int staticInt42056;
+    static public int staticInt42057;
+    static public int staticInt42058;
+    static public int staticInt42059;
+    static public int staticInt42060;
+    static public int staticInt42061;
+    static public int staticInt42062;
+    static public int staticInt42063;
+    static public int staticInt42064;
+    static public int staticInt42065;
+    static public int staticInt42066;
+    static public int staticInt42067;
+    static public int staticInt42068;
+    static public int staticInt42069;
+    static public int staticInt42070;
+    static public int staticInt42071;
+    static public int staticInt42072;
+    static public int staticInt42073;
+    static public int staticInt42074;
+    static public int staticInt42075;
+    static public int staticInt42076;
+    static public int staticInt42077;
+    static public int staticInt42078;
+    static public int staticInt42079;
+    static public int staticInt42080;
+    static public int staticInt42081;
+    static public int staticInt42082;
+    static public int staticInt42083;
+    static public int staticInt42084;
+    static public int staticInt42085;
+    static public int staticInt42086;
+    static public int staticInt42087;
+    static public int staticInt42088;
+    static public int staticInt42089;
+    static public int staticInt42090;
+    static public int staticInt42091;
+    static public int staticInt42092;
+    static public int staticInt42093;
+    static public int staticInt42094;
+    static public int staticInt42095;
+    static public int staticInt42096;
+    static public int staticInt42097;
+    static public int staticInt42098;
+    static public int staticInt42099;
+    static public int staticInt42100;
+    static public int staticInt42101;
+    static public int staticInt42102;
+    static public int staticInt42103;
+    static public int staticInt42104;
+    static public int staticInt42105;
+    static public int staticInt42106;
+    static public int staticInt42107;
+    static public int staticInt42108;
+    static public int staticInt42109;
+    static public int staticInt42110;
+    static public int staticInt42111;
+    static public int staticInt42112;
+    static public int staticInt42113;
+    static public int staticInt42114;
+    static public int staticInt42115;
+    static public int staticInt42116;
+    static public int staticInt42117;
+    static public int staticInt42118;
+    static public int staticInt42119;
+    static public int staticInt42120;
+    static public int staticInt42121;
+    static public int staticInt42122;
+    static public int staticInt42123;
+    static public int staticInt42124;
+    static public int staticInt42125;
+    static public int staticInt42126;
+    static public int staticInt42127;
+    static public int staticInt42128;
+    static public int staticInt42129;
+    static public int staticInt42130;
+    static public int staticInt42131;
+    static public int staticInt42132;
+    static public int staticInt42133;
+    static public int staticInt42134;
+    static public int staticInt42135;
+    static public int staticInt42136;
+    static public int staticInt42137;
+    static public int staticInt42138;
+    static public int staticInt42139;
+    static public int staticInt42140;
+    static public int staticInt42141;
+    static public int staticInt42142;
+    static public int staticInt42143;
+    static public int staticInt42144;
+    static public int staticInt42145;
+    static public int staticInt42146;
+    static public int staticInt42147;
+    static public int staticInt42148;
+    static public int staticInt42149;
+    static public int staticInt42150;
+    static public int staticInt42151;
+    static public int staticInt42152;
+    static public int staticInt42153;
+    static public int staticInt42154;
+    static public int staticInt42155;
+    static public int staticInt42156;
+    static public int staticInt42157;
+    static public int staticInt42158;
+    static public int staticInt42159;
+    static public int staticInt42160;
+    static public int staticInt42161;
+    static public int staticInt42162;
+    static public int staticInt42163;
+    static public int staticInt42164;
+    static public int staticInt42165;
+    static public int staticInt42166;
+    static public int staticInt42167;
+    static public int staticInt42168;
+    static public int staticInt42169;
+    static public int staticInt42170;
+    static public int staticInt42171;
+    static public int staticInt42172;
+    static public int staticInt42173;
+    static public int staticInt42174;
+    static public int staticInt42175;
+    static public int staticInt42176;
+    static public int staticInt42177;
+    static public int staticInt42178;
+    static public int staticInt42179;
+    static public int staticInt42180;
+    static public int staticInt42181;
+    static public int staticInt42182;
+    static public int staticInt42183;
+    static public int staticInt42184;
+    static public int staticInt42185;
+    static public int staticInt42186;
+    static public int staticInt42187;
+    static public int staticInt42188;
+    static public int staticInt42189;
+    static public int staticInt42190;
+    static public int staticInt42191;
+    static public int staticInt42192;
+    static public int staticInt42193;
+    static public int staticInt42194;
+    static public int staticInt42195;
+    static public int staticInt42196;
+    static public int staticInt42197;
+    static public int staticInt42198;
+    static public int staticInt42199;
+    static public int staticInt42200;
+    static public int staticInt42201;
+    static public int staticInt42202;
+    static public int staticInt42203;
+    static public int staticInt42204;
+    static public int staticInt42205;
+    static public int staticInt42206;
+    static public int staticInt42207;
+    static public int staticInt42208;
+    static public int staticInt42209;
+    static public int staticInt42210;
+    static public int staticInt42211;
+    static public int staticInt42212;
+    static public int staticInt42213;
+    static public int staticInt42214;
+    static public int staticInt42215;
+    static public int staticInt42216;
+    static public int staticInt42217;
+    static public int staticInt42218;
+    static public int staticInt42219;
+    static public int staticInt42220;
+    static public int staticInt42221;
+    static public int staticInt42222;
+    static public int staticInt42223;
+    static public int staticInt42224;
+    static public int staticInt42225;
+    static public int staticInt42226;
+    static public int staticInt42227;
+    static public int staticInt42228;
+    static public int staticInt42229;
+    static public int staticInt42230;
+    static public int staticInt42231;
+    static public int staticInt42232;
+    static public int staticInt42233;
+    static public int staticInt42234;
+    static public int staticInt42235;
+    static public int staticInt42236;
+    static public int staticInt42237;
+    static public int staticInt42238;
+    static public int staticInt42239;
+    static public int staticInt42240;
+    static public int staticInt42241;
+    static public int staticInt42242;
+    static public int staticInt42243;
+    static public int staticInt42244;
+    static public int staticInt42245;
+    static public int staticInt42246;
+    static public int staticInt42247;
+    static public int staticInt42248;
+    static public int staticInt42249;
+    static public int staticInt42250;
+    static public int staticInt42251;
+    static public int staticInt42252;
+    static public int staticInt42253;
+    static public int staticInt42254;
+    static public int staticInt42255;
+    static public int staticInt42256;
+    static public int staticInt42257;
+    static public int staticInt42258;
+    static public int staticInt42259;
+    static public int staticInt42260;
+    static public int staticInt42261;
+    static public int staticInt42262;
+    static public int staticInt42263;
+    static public int staticInt42264;
+    static public int staticInt42265;
+    static public int staticInt42266;
+    static public int staticInt42267;
+    static public int staticInt42268;
+    static public int staticInt42269;
+    static public int staticInt42270;
+    static public int staticInt42271;
+    static public int staticInt42272;
+    static public int staticInt42273;
+    static public int staticInt42274;
+    static public int staticInt42275;
+    static public int staticInt42276;
+    static public int staticInt42277;
+    static public int staticInt42278;
+    static public int staticInt42279;
+    static public int staticInt42280;
+    static public int staticInt42281;
+    static public int staticInt42282;
+    static public int staticInt42283;
+    static public int staticInt42284;
+    static public int staticInt42285;
+    static public int staticInt42286;
+    static public int staticInt42287;
+    static public int staticInt42288;
+    static public int staticInt42289;
+    static public int staticInt42290;
+    static public int staticInt42291;
+    static public int staticInt42292;
+    static public int staticInt42293;
+    static public int staticInt42294;
+    static public int staticInt42295;
+    static public int staticInt42296;
+    static public int staticInt42297;
+    static public int staticInt42298;
+    static public int staticInt42299;
+    static public int staticInt42300;
+    static public int staticInt42301;
+    static public int staticInt42302;
+    static public int staticInt42303;
+    static public int staticInt42304;
+    static public int staticInt42305;
+    static public int staticInt42306;
+    static public int staticInt42307;
+    static public int staticInt42308;
+    static public int staticInt42309;
+    static public int staticInt42310;
+    static public int staticInt42311;
+    static public int staticInt42312;
+    static public int staticInt42313;
+    static public int staticInt42314;
+    static public int staticInt42315;
+    static public int staticInt42316;
+    static public int staticInt42317;
+    static public int staticInt42318;
+    static public int staticInt42319;
+    static public int staticInt42320;
+    static public int staticInt42321;
+    static public int staticInt42322;
+    static public int staticInt42323;
+    static public int staticInt42324;
+    static public int staticInt42325;
+    static public int staticInt42326;
+    static public int staticInt42327;
+    static public int staticInt42328;
+    static public int staticInt42329;
+    static public int staticInt42330;
+    static public int staticInt42331;
+    static public int staticInt42332;
+    static public int staticInt42333;
+    static public int staticInt42334;
+    static public int staticInt42335;
+    static public int staticInt42336;
+    static public int staticInt42337;
+    static public int staticInt42338;
+    static public int staticInt42339;
+    static public int staticInt42340;
+    static public int staticInt42341;
+    static public int staticInt42342;
+    static public int staticInt42343;
+    static public int staticInt42344;
+    static public int staticInt42345;
+    static public int staticInt42346;
+    static public int staticInt42347;
+    static public int staticInt42348;
+    static public int staticInt42349;
+    static public int staticInt42350;
+    static public int staticInt42351;
+    static public int staticInt42352;
+    static public int staticInt42353;
+    static public int staticInt42354;
+    static public int staticInt42355;
+    static public int staticInt42356;
+    static public int staticInt42357;
+    static public int staticInt42358;
+    static public int staticInt42359;
+    static public int staticInt42360;
+    static public int staticInt42361;
+    static public int staticInt42362;
+    static public int staticInt42363;
+    static public int staticInt42364;
+    static public int staticInt42365;
+    static public int staticInt42366;
+    static public int staticInt42367;
+    static public int staticInt42368;
+    static public int staticInt42369;
+    static public int staticInt42370;
+    static public int staticInt42371;
+    static public int staticInt42372;
+    static public int staticInt42373;
+    static public int staticInt42374;
+    static public int staticInt42375;
+    static public int staticInt42376;
+    static public int staticInt42377;
+    static public int staticInt42378;
+    static public int staticInt42379;
+    static public int staticInt42380;
+    static public int staticInt42381;
+    static public int staticInt42382;
+    static public int staticInt42383;
+    static public int staticInt42384;
+    static public int staticInt42385;
+    static public int staticInt42386;
+    static public int staticInt42387;
+    static public int staticInt42388;
+    static public int staticInt42389;
+    static public int staticInt42390;
+    static public int staticInt42391;
+    static public int staticInt42392;
+    static public int staticInt42393;
+    static public int staticInt42394;
+    static public int staticInt42395;
+    static public int staticInt42396;
+    static public int staticInt42397;
+    static public int staticInt42398;
+    static public int staticInt42399;
+    static public int staticInt42400;
+    static public int staticInt42401;
+    static public int staticInt42402;
+    static public int staticInt42403;
+    static public int staticInt42404;
+    static public int staticInt42405;
+    static public int staticInt42406;
+    static public int staticInt42407;
+    static public int staticInt42408;
+    static public int staticInt42409;
+    static public int staticInt42410;
+    static public int staticInt42411;
+    static public int staticInt42412;
+    static public int staticInt42413;
+    static public int staticInt42414;
+    static public int staticInt42415;
+    static public int staticInt42416;
+    static public int staticInt42417;
+    static public int staticInt42418;
+    static public int staticInt42419;
+    static public int staticInt42420;
+    static public int staticInt42421;
+    static public int staticInt42422;
+    static public int staticInt42423;
+    static public int staticInt42424;
+    static public int staticInt42425;
+    static public int staticInt42426;
+    static public int staticInt42427;
+    static public int staticInt42428;
+    static public int staticInt42429;
+    static public int staticInt42430;
+    static public int staticInt42431;
+    static public int staticInt42432;
+    static public int staticInt42433;
+    static public int staticInt42434;
+    static public int staticInt42435;
+    static public int staticInt42436;
+    static public int staticInt42437;
+    static public int staticInt42438;
+    static public int staticInt42439;
+    static public int staticInt42440;
+    static public int staticInt42441;
+    static public int staticInt42442;
+    static public int staticInt42443;
+    static public int staticInt42444;
+    static public int staticInt42445;
+    static public int staticInt42446;
+    static public int staticInt42447;
+    static public int staticInt42448;
+    static public int staticInt42449;
+    static public int staticInt42450;
+    static public int staticInt42451;
+    static public int staticInt42452;
+    static public int staticInt42453;
+    static public int staticInt42454;
+    static public int staticInt42455;
+    static public int staticInt42456;
+    static public int staticInt42457;
+    static public int staticInt42458;
+    static public int staticInt42459;
+    static public int staticInt42460;
+    static public int staticInt42461;
+    static public int staticInt42462;
+    static public int staticInt42463;
+    static public int staticInt42464;
+    static public int staticInt42465;
+    static public int staticInt42466;
+    static public int staticInt42467;
+    static public int staticInt42468;
+    static public int staticInt42469;
+    static public int staticInt42470;
+    static public int staticInt42471;
+    static public int staticInt42472;
+    static public int staticInt42473;
+    static public int staticInt42474;
+    static public int staticInt42475;
+    static public int staticInt42476;
+    static public int staticInt42477;
+    static public int staticInt42478;
+    static public int staticInt42479;
+    static public int staticInt42480;
+    static public int staticInt42481;
+    static public int staticInt42482;
+    static public int staticInt42483;
+    static public int staticInt42484;
+    static public int staticInt42485;
+    static public int staticInt42486;
+    static public int staticInt42487;
+    static public int staticInt42488;
+    static public int staticInt42489;
+    static public int staticInt42490;
+    static public int staticInt42491;
+    static public int staticInt42492;
+    static public int staticInt42493;
+    static public int staticInt42494;
+    static public int staticInt42495;
+    static public int staticInt42496;
+    static public int staticInt42497;
+    static public int staticInt42498;
+    static public int staticInt42499;
+    static public int staticInt42500;
+    static public int staticInt42501;
+    static public int staticInt42502;
+    static public int staticInt42503;
+    static public int staticInt42504;
+    static public int staticInt42505;
+    static public int staticInt42506;
+    static public int staticInt42507;
+    static public int staticInt42508;
+    static public int staticInt42509;
+    static public int staticInt42510;
+    static public int staticInt42511;
+    static public int staticInt42512;
+    static public int staticInt42513;
+    static public int staticInt42514;
+    static public int staticInt42515;
+    static public int staticInt42516;
+    static public int staticInt42517;
+    static public int staticInt42518;
+    static public int staticInt42519;
+    static public int staticInt42520;
+    static public int staticInt42521;
+    static public int staticInt42522;
+    static public int staticInt42523;
+    static public int staticInt42524;
+    static public int staticInt42525;
+    static public int staticInt42526;
+    static public int staticInt42527;
+    static public int staticInt42528;
+    static public int staticInt42529;
+    static public int staticInt42530;
+    static public int staticInt42531;
+    static public int staticInt42532;
+    static public int staticInt42533;
+    static public int staticInt42534;
+    static public int staticInt42535;
+    static public int staticInt42536;
+    static public int staticInt42537;
+    static public int staticInt42538;
+    static public int staticInt42539;
+    static public int staticInt42540;
+    static public int staticInt42541;
+    static public int staticInt42542;
+    static public int staticInt42543;
+    static public int staticInt42544;
+    static public int staticInt42545;
+    static public int staticInt42546;
+    static public int staticInt42547;
+    static public int staticInt42548;
+    static public int staticInt42549;
+    static public int staticInt42550;
+    static public int staticInt42551;
+    static public int staticInt42552;
+    static public int staticInt42553;
+    static public int staticInt42554;
+    static public int staticInt42555;
+    static public int staticInt42556;
+    static public int staticInt42557;
+    static public int staticInt42558;
+    static public int staticInt42559;
+    static public int staticInt42560;
+    static public int staticInt42561;
+    static public int staticInt42562;
+    static public int staticInt42563;
+    static public int staticInt42564;
+    static public int staticInt42565;
+    static public int staticInt42566;
+    static public int staticInt42567;
+    static public int staticInt42568;
+    static public int staticInt42569;
+    static public int staticInt42570;
+    static public int staticInt42571;
+    static public int staticInt42572;
+    static public int staticInt42573;
+    static public int staticInt42574;
+    static public int staticInt42575;
+    static public int staticInt42576;
+    static public int staticInt42577;
+    static public int staticInt42578;
+    static public int staticInt42579;
+    static public int staticInt42580;
+    static public int staticInt42581;
+    static public int staticInt42582;
+    static public int staticInt42583;
+    static public int staticInt42584;
+    static public int staticInt42585;
+    static public int staticInt42586;
+    static public int staticInt42587;
+    static public int staticInt42588;
+    static public int staticInt42589;
+    static public int staticInt42590;
+    static public int staticInt42591;
+    static public int staticInt42592;
+    static public int staticInt42593;
+    static public int staticInt42594;
+    static public int staticInt42595;
+    static public int staticInt42596;
+    static public int staticInt42597;
+    static public int staticInt42598;
+    static public int staticInt42599;
+    static public int staticInt42600;
+    static public int staticInt42601;
+    static public int staticInt42602;
+    static public int staticInt42603;
+    static public int staticInt42604;
+    static public int staticInt42605;
+    static public int staticInt42606;
+    static public int staticInt42607;
+    static public int staticInt42608;
+    static public int staticInt42609;
+    static public int staticInt42610;
+    static public int staticInt42611;
+    static public int staticInt42612;
+    static public int staticInt42613;
+    static public int staticInt42614;
+    static public int staticInt42615;
+    static public int staticInt42616;
+    static public int staticInt42617;
+    static public int staticInt42618;
+    static public int staticInt42619;
+    static public int staticInt42620;
+    static public int staticInt42621;
+    static public int staticInt42622;
+    static public int staticInt42623;
+    static public int staticInt42624;
+    static public int staticInt42625;
+    static public int staticInt42626;
+    static public int staticInt42627;
+    static public int staticInt42628;
+    static public int staticInt42629;
+    static public int staticInt42630;
+    static public int staticInt42631;
+    static public int staticInt42632;
+    static public int staticInt42633;
+    static public int staticInt42634;
+    static public int staticInt42635;
+    static public int staticInt42636;
+    static public int staticInt42637;
+    static public int staticInt42638;
+    static public int staticInt42639;
+    static public int staticInt42640;
+    static public int staticInt42641;
+    static public int staticInt42642;
+    static public int staticInt42643;
+    static public int staticInt42644;
+    static public int staticInt42645;
+    static public int staticInt42646;
+    static public int staticInt42647;
+    static public int staticInt42648;
+    static public int staticInt42649;
+    static public int staticInt42650;
+    static public int staticInt42651;
+    static public int staticInt42652;
+    static public int staticInt42653;
+    static public int staticInt42654;
+    static public int staticInt42655;
+    static public int staticInt42656;
+    static public int staticInt42657;
+    static public int staticInt42658;
+    static public int staticInt42659;
+    static public int staticInt42660;
+    static public int staticInt42661;
+    static public int staticInt42662;
+    static public int staticInt42663;
+    static public int staticInt42664;
+    static public int staticInt42665;
+    static public int staticInt42666;
+    static public int staticInt42667;
+    static public int staticInt42668;
+    static public int staticInt42669;
+    static public int staticInt42670;
+    static public int staticInt42671;
+    static public int staticInt42672;
+    static public int staticInt42673;
+    static public int staticInt42674;
+    static public int staticInt42675;
+    static public int staticInt42676;
+    static public int staticInt42677;
+    static public int staticInt42678;
+    static public int staticInt42679;
+    static public int staticInt42680;
+    static public int staticInt42681;
+    static public int staticInt42682;
+    static public int staticInt42683;
+    static public int staticInt42684;
+    static public int staticInt42685;
+    static public int staticInt42686;
+    static public int staticInt42687;
+    static public int staticInt42688;
+    static public int staticInt42689;
+    static public int staticInt42690;
+    static public int staticInt42691;
+    static public int staticInt42692;
+    static public int staticInt42693;
+    static public int staticInt42694;
+    static public int staticInt42695;
+    static public int staticInt42696;
+    static public int staticInt42697;
+    static public int staticInt42698;
+    static public int staticInt42699;
+    static public int staticInt42700;
+    static public int staticInt42701;
+    static public int staticInt42702;
+    static public int staticInt42703;
+    static public int staticInt42704;
+    static public int staticInt42705;
+    static public int staticInt42706;
+    static public int staticInt42707;
+    static public int staticInt42708;
+    static public int staticInt42709;
+    static public int staticInt42710;
+    static public int staticInt42711;
+    static public int staticInt42712;
+    static public int staticInt42713;
+    static public int staticInt42714;
+    static public int staticInt42715;
+    static public int staticInt42716;
+    static public int staticInt42717;
+    static public int staticInt42718;
+    static public int staticInt42719;
+    static public int staticInt42720;
+    static public int staticInt42721;
+    static public int staticInt42722;
+    static public int staticInt42723;
+    static public int staticInt42724;
+    static public int staticInt42725;
+    static public int staticInt42726;
+    static public int staticInt42727;
+    static public int staticInt42728;
+    static public int staticInt42729;
+    static public int staticInt42730;
+    static public int staticInt42731;
+    static public int staticInt42732;
+    static public int staticInt42733;
+    static public int staticInt42734;
+    static public int staticInt42735;
+    static public int staticInt42736;
+    static public int staticInt42737;
+    static public int staticInt42738;
+    static public int staticInt42739;
+    static public int staticInt42740;
+    static public int staticInt42741;
+    static public int staticInt42742;
+    static public int staticInt42743;
+    static public int staticInt42744;
+    static public int staticInt42745;
+    static public int staticInt42746;
+    static public int staticInt42747;
+    static public int staticInt42748;
+    static public int staticInt42749;
+    static public int staticInt42750;
+    static public int staticInt42751;
+    static public int staticInt42752;
+    static public int staticInt42753;
+    static public int staticInt42754;
+    static public int staticInt42755;
+    static public int staticInt42756;
+    static public int staticInt42757;
+    static public int staticInt42758;
+    static public int staticInt42759;
+    static public int staticInt42760;
+    static public int staticInt42761;
+    static public int staticInt42762;
+    static public int staticInt42763;
+    static public int staticInt42764;
+    static public int staticInt42765;
+    static public int staticInt42766;
+    static public int staticInt42767;
+    static public int staticInt42768;
+    static public int staticInt42769;
+    static public int staticInt42770;
+    static public int staticInt42771;
+    static public int staticInt42772;
+    static public int staticInt42773;
+    static public int staticInt42774;
+    static public int staticInt42775;
+    static public int staticInt42776;
+    static public int staticInt42777;
+    static public int staticInt42778;
+    static public int staticInt42779;
+    static public int staticInt42780;
+    static public int staticInt42781;
+    static public int staticInt42782;
+    static public int staticInt42783;
+    static public int staticInt42784;
+    static public int staticInt42785;
+    static public int staticInt42786;
+    static public int staticInt42787;
+    static public int staticInt42788;
+    static public int staticInt42789;
+    static public int staticInt42790;
+    static public int staticInt42791;
+    static public int staticInt42792;
+    static public int staticInt42793;
+    static public int staticInt42794;
+    static public int staticInt42795;
+    static public int staticInt42796;
+    static public int staticInt42797;
+    static public int staticInt42798;
+    static public int staticInt42799;
+    static public int staticInt42800;
+    static public int staticInt42801;
+    static public int staticInt42802;
+    static public int staticInt42803;
+    static public int staticInt42804;
+    static public int staticInt42805;
+    static public int staticInt42806;
+    static public int staticInt42807;
+    static public int staticInt42808;
+    static public int staticInt42809;
+    static public int staticInt42810;
+    static public int staticInt42811;
+    static public int staticInt42812;
+    static public int staticInt42813;
+    static public int staticInt42814;
+    static public int staticInt42815;
+    static public int staticInt42816;
+    static public int staticInt42817;
+    static public int staticInt42818;
+    static public int staticInt42819;
+    static public int staticInt42820;
+    static public int staticInt42821;
+    static public int staticInt42822;
+    static public int staticInt42823;
+    static public int staticInt42824;
+    static public int staticInt42825;
+    static public int staticInt42826;
+    static public int staticInt42827;
+    static public int staticInt42828;
+    static public int staticInt42829;
+    static public int staticInt42830;
+    static public int staticInt42831;
+    static public int staticInt42832;
+    static public int staticInt42833;
+    static public int staticInt42834;
+    static public int staticInt42835;
+    static public int staticInt42836;
+    static public int staticInt42837;
+    static public int staticInt42838;
+    static public int staticInt42839;
+    static public int staticInt42840;
+    static public int staticInt42841;
+    static public int staticInt42842;
+    static public int staticInt42843;
+    static public int staticInt42844;
+    static public int staticInt42845;
+    static public int staticInt42846;
+    static public int staticInt42847;
+    static public int staticInt42848;
+    static public int staticInt42849;
+    static public int staticInt42850;
+    static public int staticInt42851;
+    static public int staticInt42852;
+    static public int staticInt42853;
+    static public int staticInt42854;
+    static public int staticInt42855;
+    static public int staticInt42856;
+    static public int staticInt42857;
+    static public int staticInt42858;
+    static public int staticInt42859;
+    static public int staticInt42860;
+    static public int staticInt42861;
+    static public int staticInt42862;
+    static public int staticInt42863;
+    static public int staticInt42864;
+    static public int staticInt42865;
+    static public int staticInt42866;
+    static public int staticInt42867;
+    static public int staticInt42868;
+    static public int staticInt42869;
+    static public int staticInt42870;
+    static public int staticInt42871;
+    static public int staticInt42872;
+    static public int staticInt42873;
+    static public int staticInt42874;
+    static public int staticInt42875;
+    static public int staticInt42876;
+    static public int staticInt42877;
+    static public int staticInt42878;
+    static public int staticInt42879;
+    static public int staticInt42880;
+    static public int staticInt42881;
+    static public int staticInt42882;
+    static public int staticInt42883;
+    static public int staticInt42884;
+    static public int staticInt42885;
+    static public int staticInt42886;
+    static public int staticInt42887;
+    static public int staticInt42888;
+    static public int staticInt42889;
+    static public int staticInt42890;
+    static public int staticInt42891;
+    static public int staticInt42892;
+    static public int staticInt42893;
+    static public int staticInt42894;
+    static public int staticInt42895;
+    static public int staticInt42896;
+    static public int staticInt42897;
+    static public int staticInt42898;
+    static public int staticInt42899;
+    static public int staticInt42900;
+    static public int staticInt42901;
+    static public int staticInt42902;
+    static public int staticInt42903;
+    static public int staticInt42904;
+    static public int staticInt42905;
+    static public int staticInt42906;
+    static public int staticInt42907;
+    static public int staticInt42908;
+    static public int staticInt42909;
+    static public int staticInt42910;
+    static public int staticInt42911;
+    static public int staticInt42912;
+    static public int staticInt42913;
+    static public int staticInt42914;
+    static public int staticInt42915;
+    static public int staticInt42916;
+    static public int staticInt42917;
+    static public int staticInt42918;
+    static public int staticInt42919;
+    static public int staticInt42920;
+    static public int staticInt42921;
+    static public int staticInt42922;
+    static public int staticInt42923;
+    static public int staticInt42924;
+    static public int staticInt42925;
+    static public int staticInt42926;
+    static public int staticInt42927;
+    static public int staticInt42928;
+    static public int staticInt42929;
+    static public int staticInt42930;
+    static public int staticInt42931;
+    static public int staticInt42932;
+    static public int staticInt42933;
+    static public int staticInt42934;
+    static public int staticInt42935;
+    static public int staticInt42936;
+    static public int staticInt42937;
+    static public int staticInt42938;
+    static public int staticInt42939;
+    static public int staticInt42940;
+    static public int staticInt42941;
+    static public int staticInt42942;
+    static public int staticInt42943;
+    static public int staticInt42944;
+    static public int staticInt42945;
+    static public int staticInt42946;
+    static public int staticInt42947;
+    static public int staticInt42948;
+    static public int staticInt42949;
+    static public int staticInt42950;
+    static public int staticInt42951;
+    static public int staticInt42952;
+    static public int staticInt42953;
+    static public int staticInt42954;
+    static public int staticInt42955;
+    static public int staticInt42956;
+    static public int staticInt42957;
+    static public int staticInt42958;
+    static public int staticInt42959;
+    static public int staticInt42960;
+    static public int staticInt42961;
+    static public int staticInt42962;
+    static public int staticInt42963;
+    static public int staticInt42964;
+    static public int staticInt42965;
+    static public int staticInt42966;
+    static public int staticInt42967;
+    static public int staticInt42968;
+    static public int staticInt42969;
+    static public int staticInt42970;
+    static public int staticInt42971;
+    static public int staticInt42972;
+    static public int staticInt42973;
+    static public int staticInt42974;
+    static public int staticInt42975;
+    static public int staticInt42976;
+    static public int staticInt42977;
+    static public int staticInt42978;
+    static public int staticInt42979;
+    static public int staticInt42980;
+    static public int staticInt42981;
+    static public int staticInt42982;
+    static public int staticInt42983;
+    static public int staticInt42984;
+    static public int staticInt42985;
+    static public int staticInt42986;
+    static public int staticInt42987;
+    static public int staticInt42988;
+    static public int staticInt42989;
+    static public int staticInt42990;
+    static public int staticInt42991;
+    static public int staticInt42992;
+    static public int staticInt42993;
+    static public int staticInt42994;
+    static public int staticInt42995;
+    static public int staticInt42996;
+    static public int staticInt42997;
+    static public int staticInt42998;
+    static public int staticInt42999;
+    static public int staticInt43000;
+    static public int staticInt43001;
+    static public int staticInt43002;
+    static public int staticInt43003;
+    static public int staticInt43004;
+    static public int staticInt43005;
+    static public int staticInt43006;
+    static public int staticInt43007;
+    static public int staticInt43008;
+    static public int staticInt43009;
+    static public int staticInt43010;
+    static public int staticInt43011;
+    static public int staticInt43012;
+    static public int staticInt43013;
+    static public int staticInt43014;
+    static public int staticInt43015;
+    static public int staticInt43016;
+    static public int staticInt43017;
+    static public int staticInt43018;
+    static public int staticInt43019;
+    static public int staticInt43020;
+    static public int staticInt43021;
+    static public int staticInt43022;
+    static public int staticInt43023;
+    static public int staticInt43024;
+    static public int staticInt43025;
+    static public int staticInt43026;
+    static public int staticInt43027;
+    static public int staticInt43028;
+    static public int staticInt43029;
+    static public int staticInt43030;
+    static public int staticInt43031;
+    static public int staticInt43032;
+    static public int staticInt43033;
+    static public int staticInt43034;
+    static public int staticInt43035;
+    static public int staticInt43036;
+    static public int staticInt43037;
+    static public int staticInt43038;
+    static public int staticInt43039;
+    static public int staticInt43040;
+    static public int staticInt43041;
+    static public int staticInt43042;
+    static public int staticInt43043;
+    static public int staticInt43044;
+    static public int staticInt43045;
+    static public int staticInt43046;
+    static public int staticInt43047;
+    static public int staticInt43048;
+    static public int staticInt43049;
+    static public int staticInt43050;
+    static public int staticInt43051;
+    static public int staticInt43052;
+    static public int staticInt43053;
+    static public int staticInt43054;
+    static public int staticInt43055;
+    static public int staticInt43056;
+    static public int staticInt43057;
+    static public int staticInt43058;
+    static public int staticInt43059;
+    static public int staticInt43060;
+    static public int staticInt43061;
+    static public int staticInt43062;
+    static public int staticInt43063;
+    static public int staticInt43064;
+    static public int staticInt43065;
+    static public int staticInt43066;
+    static public int staticInt43067;
+    static public int staticInt43068;
+    static public int staticInt43069;
+    static public int staticInt43070;
+    static public int staticInt43071;
+    static public int staticInt43072;
+    static public int staticInt43073;
+    static public int staticInt43074;
+    static public int staticInt43075;
+    static public int staticInt43076;
+    static public int staticInt43077;
+    static public int staticInt43078;
+    static public int staticInt43079;
+    static public int staticInt43080;
+    static public int staticInt43081;
+    static public int staticInt43082;
+    static public int staticInt43083;
+    static public int staticInt43084;
+    static public int staticInt43085;
+    static public int staticInt43086;
+    static public int staticInt43087;
+    static public int staticInt43088;
+    static public int staticInt43089;
+    static public int staticInt43090;
+    static public int staticInt43091;
+    static public int staticInt43092;
+    static public int staticInt43093;
+    static public int staticInt43094;
+    static public int staticInt43095;
+    static public int staticInt43096;
+    static public int staticInt43097;
+    static public int staticInt43098;
+    static public int staticInt43099;
+    static public int staticInt43100;
+    static public int staticInt43101;
+    static public int staticInt43102;
+    static public int staticInt43103;
+    static public int staticInt43104;
+    static public int staticInt43105;
+    static public int staticInt43106;
+    static public int staticInt43107;
+    static public int staticInt43108;
+    static public int staticInt43109;
+    static public int staticInt43110;
+    static public int staticInt43111;
+    static public int staticInt43112;
+    static public int staticInt43113;
+    static public int staticInt43114;
+    static public int staticInt43115;
+    static public int staticInt43116;
+    static public int staticInt43117;
+    static public int staticInt43118;
+    static public int staticInt43119;
+    static public int staticInt43120;
+    static public int staticInt43121;
+    static public int staticInt43122;
+    static public int staticInt43123;
+    static public int staticInt43124;
+    static public int staticInt43125;
+    static public int staticInt43126;
+    static public int staticInt43127;
+    static public int staticInt43128;
+    static public int staticInt43129;
+    static public int staticInt43130;
+    static public int staticInt43131;
+    static public int staticInt43132;
+    static public int staticInt43133;
+    static public int staticInt43134;
+    static public int staticInt43135;
+    static public int staticInt43136;
+    static public int staticInt43137;
+    static public int staticInt43138;
+    static public int staticInt43139;
+    static public int staticInt43140;
+    static public int staticInt43141;
+    static public int staticInt43142;
+    static public int staticInt43143;
+    static public int staticInt43144;
+    static public int staticInt43145;
+    static public int staticInt43146;
+    static public int staticInt43147;
+    static public int staticInt43148;
+    static public int staticInt43149;
+    static public int staticInt43150;
+    static public int staticInt43151;
+    static public int staticInt43152;
+    static public int staticInt43153;
+    static public int staticInt43154;
+    static public int staticInt43155;
+    static public int staticInt43156;
+    static public int staticInt43157;
+    static public int staticInt43158;
+    static public int staticInt43159;
+    static public int staticInt43160;
+    static public int staticInt43161;
+    static public int staticInt43162;
+    static public int staticInt43163;
+    static public int staticInt43164;
+    static public int staticInt43165;
+    static public int staticInt43166;
+    static public int staticInt43167;
+    static public int staticInt43168;
+    static public int staticInt43169;
+    static public int staticInt43170;
+    static public int staticInt43171;
+    static public int staticInt43172;
+    static public int staticInt43173;
+    static public int staticInt43174;
+    static public int staticInt43175;
+    static public int staticInt43176;
+    static public int staticInt43177;
+    static public int staticInt43178;
+    static public int staticInt43179;
+    static public int staticInt43180;
+    static public int staticInt43181;
+    static public int staticInt43182;
+    static public int staticInt43183;
+    static public int staticInt43184;
+    static public int staticInt43185;
+    static public int staticInt43186;
+    static public int staticInt43187;
+    static public int staticInt43188;
+    static public int staticInt43189;
+    static public int staticInt43190;
+    static public int staticInt43191;
+    static public int staticInt43192;
+    static public int staticInt43193;
+    static public int staticInt43194;
+    static public int staticInt43195;
+    static public int staticInt43196;
+    static public int staticInt43197;
+    static public int staticInt43198;
+    static public int staticInt43199;
+    static public int staticInt43200;
+    static public int staticInt43201;
+    static public int staticInt43202;
+    static public int staticInt43203;
+    static public int staticInt43204;
+    static public int staticInt43205;
+    static public int staticInt43206;
+    static public int staticInt43207;
+    static public int staticInt43208;
+    static public int staticInt43209;
+    static public int staticInt43210;
+    static public int staticInt43211;
+    static public int staticInt43212;
+    static public int staticInt43213;
+    static public int staticInt43214;
+    static public int staticInt43215;
+    static public int staticInt43216;
+    static public int staticInt43217;
+    static public int staticInt43218;
+    static public int staticInt43219;
+    static public int staticInt43220;
+    static public int staticInt43221;
+    static public int staticInt43222;
+    static public int staticInt43223;
+    static public int staticInt43224;
+    static public int staticInt43225;
+    static public int staticInt43226;
+    static public int staticInt43227;
+    static public int staticInt43228;
+    static public int staticInt43229;
+    static public int staticInt43230;
+    static public int staticInt43231;
+    static public int staticInt43232;
+    static public int staticInt43233;
+    static public int staticInt43234;
+    static public int staticInt43235;
+    static public int staticInt43236;
+    static public int staticInt43237;
+    static public int staticInt43238;
+    static public int staticInt43239;
+    static public int staticInt43240;
+    static public int staticInt43241;
+    static public int staticInt43242;
+    static public int staticInt43243;
+    static public int staticInt43244;
+    static public int staticInt43245;
+    static public int staticInt43246;
+    static public int staticInt43247;
+    static public int staticInt43248;
+    static public int staticInt43249;
+    static public int staticInt43250;
+    static public int staticInt43251;
+    static public int staticInt43252;
+    static public int staticInt43253;
+    static public int staticInt43254;
+    static public int staticInt43255;
+    static public int staticInt43256;
+    static public int staticInt43257;
+    static public int staticInt43258;
+    static public int staticInt43259;
+    static public int staticInt43260;
+    static public int staticInt43261;
+    static public int staticInt43262;
+    static public int staticInt43263;
+    static public int staticInt43264;
+    static public int staticInt43265;
+    static public int staticInt43266;
+    static public int staticInt43267;
+    static public int staticInt43268;
+    static public int staticInt43269;
+    static public int staticInt43270;
+    static public int staticInt43271;
+    static public int staticInt43272;
+    static public int staticInt43273;
+    static public int staticInt43274;
+    static public int staticInt43275;
+    static public int staticInt43276;
+    static public int staticInt43277;
+    static public int staticInt43278;
+    static public int staticInt43279;
+    static public int staticInt43280;
+    static public int staticInt43281;
+    static public int staticInt43282;
+    static public int staticInt43283;
+    static public int staticInt43284;
+    static public int staticInt43285;
+    static public int staticInt43286;
+    static public int staticInt43287;
+    static public int staticInt43288;
+    static public int staticInt43289;
+    static public int staticInt43290;
+    static public int staticInt43291;
+    static public int staticInt43292;
+    static public int staticInt43293;
+    static public int staticInt43294;
+    static public int staticInt43295;
+    static public int staticInt43296;
+    static public int staticInt43297;
+    static public int staticInt43298;
+    static public int staticInt43299;
+    static public int staticInt43300;
+    static public int staticInt43301;
+    static public int staticInt43302;
+    static public int staticInt43303;
+    static public int staticInt43304;
+    static public int staticInt43305;
+    static public int staticInt43306;
+    static public int staticInt43307;
+    static public int staticInt43308;
+    static public int staticInt43309;
+    static public int staticInt43310;
+    static public int staticInt43311;
+    static public int staticInt43312;
+    static public int staticInt43313;
+    static public int staticInt43314;
+    static public int staticInt43315;
+    static public int staticInt43316;
+    static public int staticInt43317;
+    static public int staticInt43318;
+    static public int staticInt43319;
+    static public int staticInt43320;
+    static public int staticInt43321;
+    static public int staticInt43322;
+    static public int staticInt43323;
+    static public int staticInt43324;
+    static public int staticInt43325;
+    static public int staticInt43326;
+    static public int staticInt43327;
+    static public int staticInt43328;
+    static public int staticInt43329;
+    static public int staticInt43330;
+    static public int staticInt43331;
+    static public int staticInt43332;
+    static public int staticInt43333;
+    static public int staticInt43334;
+    static public int staticInt43335;
+    static public int staticInt43336;
+    static public int staticInt43337;
+    static public int staticInt43338;
+    static public int staticInt43339;
+    static public int staticInt43340;
+    static public int staticInt43341;
+    static public int staticInt43342;
+    static public int staticInt43343;
+    static public int staticInt43344;
+    static public int staticInt43345;
+    static public int staticInt43346;
+    static public int staticInt43347;
+    static public int staticInt43348;
+    static public int staticInt43349;
+    static public int staticInt43350;
+    static public int staticInt43351;
+    static public int staticInt43352;
+    static public int staticInt43353;
+    static public int staticInt43354;
+    static public int staticInt43355;
+    static public int staticInt43356;
+    static public int staticInt43357;
+    static public int staticInt43358;
+    static public int staticInt43359;
+    static public int staticInt43360;
+    static public int staticInt43361;
+    static public int staticInt43362;
+    static public int staticInt43363;
+    static public int staticInt43364;
+    static public int staticInt43365;
+    static public int staticInt43366;
+    static public int staticInt43367;
+    static public int staticInt43368;
+    static public int staticInt43369;
+    static public int staticInt43370;
+    static public int staticInt43371;
+    static public int staticInt43372;
+    static public int staticInt43373;
+    static public int staticInt43374;
+    static public int staticInt43375;
+    static public int staticInt43376;
+    static public int staticInt43377;
+    static public int staticInt43378;
+    static public int staticInt43379;
+    static public int staticInt43380;
+    static public int staticInt43381;
+    static public int staticInt43382;
+    static public int staticInt43383;
+    static public int staticInt43384;
+    static public int staticInt43385;
+    static public int staticInt43386;
+    static public int staticInt43387;
+    static public int staticInt43388;
+    static public int staticInt43389;
+    static public int staticInt43390;
+    static public int staticInt43391;
+    static public int staticInt43392;
+    static public int staticInt43393;
+    static public int staticInt43394;
+    static public int staticInt43395;
+    static public int staticInt43396;
+    static public int staticInt43397;
+    static public int staticInt43398;
+    static public int staticInt43399;
+    static public int staticInt43400;
+    static public int staticInt43401;
+    static public int staticInt43402;
+    static public int staticInt43403;
+    static public int staticInt43404;
+    static public int staticInt43405;
+    static public int staticInt43406;
+    static public int staticInt43407;
+    static public int staticInt43408;
+    static public int staticInt43409;
+    static public int staticInt43410;
+    static public int staticInt43411;
+    static public int staticInt43412;
+    static public int staticInt43413;
+    static public int staticInt43414;
+    static public int staticInt43415;
+    static public int staticInt43416;
+    static public int staticInt43417;
+    static public int staticInt43418;
+    static public int staticInt43419;
+    static public int staticInt43420;
+    static public int staticInt43421;
+    static public int staticInt43422;
+    static public int staticInt43423;
+    static public int staticInt43424;
+    static public int staticInt43425;
+    static public int staticInt43426;
+    static public int staticInt43427;
+    static public int staticInt43428;
+    static public int staticInt43429;
+    static public int staticInt43430;
+    static public int staticInt43431;
+    static public int staticInt43432;
+    static public int staticInt43433;
+    static public int staticInt43434;
+    static public int staticInt43435;
+    static public int staticInt43436;
+    static public int staticInt43437;
+    static public int staticInt43438;
+    static public int staticInt43439;
+    static public int staticInt43440;
+    static public int staticInt43441;
+    static public int staticInt43442;
+    static public int staticInt43443;
+    static public int staticInt43444;
+    static public int staticInt43445;
+    static public int staticInt43446;
+    static public int staticInt43447;
+    static public int staticInt43448;
+    static public int staticInt43449;
+    static public int staticInt43450;
+    static public int staticInt43451;
+    static public int staticInt43452;
+    static public int staticInt43453;
+    static public int staticInt43454;
+    static public int staticInt43455;
+    static public int staticInt43456;
+    static public int staticInt43457;
+    static public int staticInt43458;
+    static public int staticInt43459;
+    static public int staticInt43460;
+    static public int staticInt43461;
+    static public int staticInt43462;
+    static public int staticInt43463;
+    static public int staticInt43464;
+    static public int staticInt43465;
+    static public int staticInt43466;
+    static public int staticInt43467;
+    static public int staticInt43468;
+    static public int staticInt43469;
+    static public int staticInt43470;
+    static public int staticInt43471;
+    static public int staticInt43472;
+    static public int staticInt43473;
+    static public int staticInt43474;
+    static public int staticInt43475;
+    static public int staticInt43476;
+    static public int staticInt43477;
+    static public int staticInt43478;
+    static public int staticInt43479;
+    static public int staticInt43480;
+    static public int staticInt43481;
+    static public int staticInt43482;
+    static public int staticInt43483;
+    static public int staticInt43484;
+    static public int staticInt43485;
+    static public int staticInt43486;
+    static public int staticInt43487;
+    static public int staticInt43488;
+    static public int staticInt43489;
+    static public int staticInt43490;
+    static public int staticInt43491;
+    static public int staticInt43492;
+    static public int staticInt43493;
+    static public int staticInt43494;
+    static public int staticInt43495;
+    static public int staticInt43496;
+    static public int staticInt43497;
+    static public int staticInt43498;
+    static public int staticInt43499;
+    static public int staticInt43500;
+    static public int staticInt43501;
+    static public int staticInt43502;
+    static public int staticInt43503;
+    static public int staticInt43504;
+    static public int staticInt43505;
+    static public int staticInt43506;
+    static public int staticInt43507;
+    static public int staticInt43508;
+    static public int staticInt43509;
+    static public int staticInt43510;
+    static public int staticInt43511;
+    static public int staticInt43512;
+    static public int staticInt43513;
+    static public int staticInt43514;
+    static public int staticInt43515;
+    static public int staticInt43516;
+    static public int staticInt43517;
+    static public int staticInt43518;
+    static public int staticInt43519;
+    static public int staticInt43520;
+    static public int staticInt43521;
+    static public int staticInt43522;
+    static public int staticInt43523;
+    static public int staticInt43524;
+    static public int staticInt43525;
+    static public int staticInt43526;
+    static public int staticInt43527;
+    static public int staticInt43528;
+    static public int staticInt43529;
+    static public int staticInt43530;
+    static public int staticInt43531;
+    static public int staticInt43532;
+    static public int staticInt43533;
+    static public int staticInt43534;
+    static public int staticInt43535;
+    static public int staticInt43536;
+    static public int staticInt43537;
+    static public int staticInt43538;
+    static public int staticInt43539;
+    static public int staticInt43540;
+    static public int staticInt43541;
+    static public int staticInt43542;
+    static public int staticInt43543;
+    static public int staticInt43544;
+    static public int staticInt43545;
+    static public int staticInt43546;
+    static public int staticInt43547;
+    static public int staticInt43548;
+    static public int staticInt43549;
+    static public int staticInt43550;
+    static public int staticInt43551;
+    static public int staticInt43552;
+    static public int staticInt43553;
+    static public int staticInt43554;
+    static public int staticInt43555;
+    static public int staticInt43556;
+    static public int staticInt43557;
+    static public int staticInt43558;
+    static public int staticInt43559;
+    static public int staticInt43560;
+    static public int staticInt43561;
+    static public int staticInt43562;
+    static public int staticInt43563;
+    static public int staticInt43564;
+    static public int staticInt43565;
+    static public int staticInt43566;
+    static public int staticInt43567;
+    static public int staticInt43568;
+    static public int staticInt43569;
+    static public int staticInt43570;
+    static public int staticInt43571;
+    static public int staticInt43572;
+    static public int staticInt43573;
+    static public int staticInt43574;
+    static public int staticInt43575;
+    static public int staticInt43576;
+    static public int staticInt43577;
+    static public int staticInt43578;
+    static public int staticInt43579;
+    static public int staticInt43580;
+    static public int staticInt43581;
+    static public int staticInt43582;
+    static public int staticInt43583;
+    static public int staticInt43584;
+    static public int staticInt43585;
+    static public int staticInt43586;
+    static public int staticInt43587;
+    static public int staticInt43588;
+    static public int staticInt43589;
+    static public int staticInt43590;
+    static public int staticInt43591;
+    static public int staticInt43592;
+    static public int staticInt43593;
+    static public int staticInt43594;
+    static public int staticInt43595;
+    static public int staticInt43596;
+    static public int staticInt43597;
+    static public int staticInt43598;
+    static public int staticInt43599;
+    static public int staticInt43600;
+    static public int staticInt43601;
+    static public int staticInt43602;
+    static public int staticInt43603;
+    static public int staticInt43604;
+    static public int staticInt43605;
+    static public int staticInt43606;
+    static public int staticInt43607;
+    static public int staticInt43608;
+    static public int staticInt43609;
+    static public int staticInt43610;
+    static public int staticInt43611;
+    static public int staticInt43612;
+    static public int staticInt43613;
+    static public int staticInt43614;
+    static public int staticInt43615;
+    static public int staticInt43616;
+    static public int staticInt43617;
+    static public int staticInt43618;
+    static public int staticInt43619;
+    static public int staticInt43620;
+    static public int staticInt43621;
+    static public int staticInt43622;
+    static public int staticInt43623;
+    static public int staticInt43624;
+    static public int staticInt43625;
+    static public int staticInt43626;
+    static public int staticInt43627;
+    static public int staticInt43628;
+    static public int staticInt43629;
+    static public int staticInt43630;
+    static public int staticInt43631;
+    static public int staticInt43632;
+    static public int staticInt43633;
+    static public int staticInt43634;
+    static public int staticInt43635;
+    static public int staticInt43636;
+    static public int staticInt43637;
+    static public int staticInt43638;
+    static public int staticInt43639;
+    static public int staticInt43640;
+    static public int staticInt43641;
+    static public int staticInt43642;
+    static public int staticInt43643;
+    static public int staticInt43644;
+    static public int staticInt43645;
+    static public int staticInt43646;
+    static public int staticInt43647;
+    static public int staticInt43648;
+    static public int staticInt43649;
+    static public int staticInt43650;
+    static public int staticInt43651;
+    static public int staticInt43652;
+    static public int staticInt43653;
+    static public int staticInt43654;
+    static public int staticInt43655;
+    static public int staticInt43656;
+    static public int staticInt43657;
+    static public int staticInt43658;
+    static public int staticInt43659;
+    static public int staticInt43660;
+    static public int staticInt43661;
+    static public int staticInt43662;
+    static public int staticInt43663;
+    static public int staticInt43664;
+    static public int staticInt43665;
+    static public int staticInt43666;
+    static public int staticInt43667;
+    static public int staticInt43668;
+    static public int staticInt43669;
+    static public int staticInt43670;
+    static public int staticInt43671;
+    static public int staticInt43672;
+    static public int staticInt43673;
+    static public int staticInt43674;
+    static public int staticInt43675;
+    static public int staticInt43676;
+    static public int staticInt43677;
+    static public int staticInt43678;
+    static public int staticInt43679;
+    static public int staticInt43680;
+    static public int staticInt43681;
+    static public int staticInt43682;
+    static public int staticInt43683;
+    static public int staticInt43684;
+    static public int staticInt43685;
+    static public int staticInt43686;
+    static public int staticInt43687;
+    static public int staticInt43688;
+    static public int staticInt43689;
+    static public int staticInt43690;
+    static public int staticInt43691;
+    static public int staticInt43692;
+    static public int staticInt43693;
+    static public int staticInt43694;
+    static public int staticInt43695;
+    static public int staticInt43696;
+    static public int staticInt43697;
+    static public int staticInt43698;
+    static public int staticInt43699;
+    static public int staticInt43700;
+    static public int staticInt43701;
+    static public int staticInt43702;
+    static public int staticInt43703;
+    static public int staticInt43704;
+    static public int staticInt43705;
+    static public int staticInt43706;
+    static public int staticInt43707;
+    static public int staticInt43708;
+    static public int staticInt43709;
+    static public int staticInt43710;
+    static public int staticInt43711;
+    static public int staticInt43712;
+    static public int staticInt43713;
+    static public int staticInt43714;
+    static public int staticInt43715;
+    static public int staticInt43716;
+    static public int staticInt43717;
+    static public int staticInt43718;
+    static public int staticInt43719;
+    static public int staticInt43720;
+    static public int staticInt43721;
+    static public int staticInt43722;
+    static public int staticInt43723;
+    static public int staticInt43724;
+    static public int staticInt43725;
+    static public int staticInt43726;
+    static public int staticInt43727;
+    static public int staticInt43728;
+    static public int staticInt43729;
+    static public int staticInt43730;
+    static public int staticInt43731;
+    static public int staticInt43732;
+    static public int staticInt43733;
+    static public int staticInt43734;
+    static public int staticInt43735;
+    static public int staticInt43736;
+    static public int staticInt43737;
+    static public int staticInt43738;
+    static public int staticInt43739;
+    static public int staticInt43740;
+    static public int staticInt43741;
+    static public int staticInt43742;
+    static public int staticInt43743;
+    static public int staticInt43744;
+    static public int staticInt43745;
+    static public int staticInt43746;
+    static public int staticInt43747;
+    static public int staticInt43748;
+    static public int staticInt43749;
+    static public int staticInt43750;
+    static public int staticInt43751;
+    static public int staticInt43752;
+    static public int staticInt43753;
+    static public int staticInt43754;
+    static public int staticInt43755;
+    static public int staticInt43756;
+    static public int staticInt43757;
+    static public int staticInt43758;
+    static public int staticInt43759;
+    static public int staticInt43760;
+    static public int staticInt43761;
+    static public int staticInt43762;
+    static public int staticInt43763;
+    static public int staticInt43764;
+    static public int staticInt43765;
+    static public int staticInt43766;
+    static public int staticInt43767;
+    static public int staticInt43768;
+    static public int staticInt43769;
+    static public int staticInt43770;
+    static public int staticInt43771;
+    static public int staticInt43772;
+    static public int staticInt43773;
+    static public int staticInt43774;
+    static public int staticInt43775;
+    static public int staticInt43776;
+    static public int staticInt43777;
+    static public int staticInt43778;
+    static public int staticInt43779;
+    static public int staticInt43780;
+    static public int staticInt43781;
+    static public int staticInt43782;
+    static public int staticInt43783;
+    static public int staticInt43784;
+    static public int staticInt43785;
+    static public int staticInt43786;
+    static public int staticInt43787;
+    static public int staticInt43788;
+    static public int staticInt43789;
+    static public int staticInt43790;
+    static public int staticInt43791;
+    static public int staticInt43792;
+    static public int staticInt43793;
+    static public int staticInt43794;
+    static public int staticInt43795;
+    static public int staticInt43796;
+    static public int staticInt43797;
+    static public int staticInt43798;
+    static public int staticInt43799;
+    static public int staticInt43800;
+    static public int staticInt43801;
+    static public int staticInt43802;
+    static public int staticInt43803;
+    static public int staticInt43804;
+    static public int staticInt43805;
+    static public int staticInt43806;
+    static public int staticInt43807;
+    static public int staticInt43808;
+    static public int staticInt43809;
+    static public int staticInt43810;
+    static public int staticInt43811;
+    static public int staticInt43812;
+    static public int staticInt43813;
+    static public int staticInt43814;
+    static public int staticInt43815;
+    static public int staticInt43816;
+    static public int staticInt43817;
+    static public int staticInt43818;
+    static public int staticInt43819;
+    static public int staticInt43820;
+    static public int staticInt43821;
+    static public int staticInt43822;
+    static public int staticInt43823;
+    static public int staticInt43824;
+    static public int staticInt43825;
+    static public int staticInt43826;
+    static public int staticInt43827;
+    static public int staticInt43828;
+    static public int staticInt43829;
+    static public int staticInt43830;
+    static public int staticInt43831;
+    static public int staticInt43832;
+    static public int staticInt43833;
+    static public int staticInt43834;
+    static public int staticInt43835;
+    static public int staticInt43836;
+    static public int staticInt43837;
+    static public int staticInt43838;
+    static public int staticInt43839;
+    static public int staticInt43840;
+    static public int staticInt43841;
+    static public int staticInt43842;
+    static public int staticInt43843;
+    static public int staticInt43844;
+    static public int staticInt43845;
+    static public int staticInt43846;
+    static public int staticInt43847;
+    static public int staticInt43848;
+    static public int staticInt43849;
+    static public int staticInt43850;
+    static public int staticInt43851;
+    static public int staticInt43852;
+    static public int staticInt43853;
+    static public int staticInt43854;
+    static public int staticInt43855;
+    static public int staticInt43856;
+    static public int staticInt43857;
+    static public int staticInt43858;
+    static public int staticInt43859;
+    static public int staticInt43860;
+    static public int staticInt43861;
+    static public int staticInt43862;
+    static public int staticInt43863;
+    static public int staticInt43864;
+    static public int staticInt43865;
+    static public int staticInt43866;
+    static public int staticInt43867;
+    static public int staticInt43868;
+    static public int staticInt43869;
+    static public int staticInt43870;
+    static public int staticInt43871;
+    static public int staticInt43872;
+    static public int staticInt43873;
+    static public int staticInt43874;
+    static public int staticInt43875;
+    static public int staticInt43876;
+    static public int staticInt43877;
+    static public int staticInt43878;
+    static public int staticInt43879;
+    static public int staticInt43880;
+    static public int staticInt43881;
+    static public int staticInt43882;
+    static public int staticInt43883;
+    static public int staticInt43884;
+    static public int staticInt43885;
+    static public int staticInt43886;
+    static public int staticInt43887;
+    static public int staticInt43888;
+    static public int staticInt43889;
+    static public int staticInt43890;
+    static public int staticInt43891;
+    static public int staticInt43892;
+    static public int staticInt43893;
+    static public int staticInt43894;
+    static public int staticInt43895;
+    static public int staticInt43896;
+    static public int staticInt43897;
+    static public int staticInt43898;
+    static public int staticInt43899;
+    static public int staticInt43900;
+    static public int staticInt43901;
+    static public int staticInt43902;
+    static public int staticInt43903;
+    static public int staticInt43904;
+    static public int staticInt43905;
+    static public int staticInt43906;
+    static public int staticInt43907;
+    static public int staticInt43908;
+    static public int staticInt43909;
+    static public int staticInt43910;
+    static public int staticInt43911;
+    static public int staticInt43912;
+    static public int staticInt43913;
+    static public int staticInt43914;
+    static public int staticInt43915;
+    static public int staticInt43916;
+    static public int staticInt43917;
+    static public int staticInt43918;
+    static public int staticInt43919;
+    static public int staticInt43920;
+    static public int staticInt43921;
+    static public int staticInt43922;
+    static public int staticInt43923;
+    static public int staticInt43924;
+    static public int staticInt43925;
+    static public int staticInt43926;
+    static public int staticInt43927;
+    static public int staticInt43928;
+    static public int staticInt43929;
+    static public int staticInt43930;
+    static public int staticInt43931;
+    static public int staticInt43932;
+    static public int staticInt43933;
+    static public int staticInt43934;
+    static public int staticInt43935;
+    static public int staticInt43936;
+    static public int staticInt43937;
+    static public int staticInt43938;
+    static public int staticInt43939;
+    static public int staticInt43940;
+    static public int staticInt43941;
+    static public int staticInt43942;
+    static public int staticInt43943;
+    static public int staticInt43944;
+    static public int staticInt43945;
+    static public int staticInt43946;
+    static public int staticInt43947;
+    static public int staticInt43948;
+    static public int staticInt43949;
+    static public int staticInt43950;
+    static public int staticInt43951;
+    static public int staticInt43952;
+    static public int staticInt43953;
+    static public int staticInt43954;
+    static public int staticInt43955;
+    static public int staticInt43956;
+    static public int staticInt43957;
+    static public int staticInt43958;
+    static public int staticInt43959;
+    static public int staticInt43960;
+    static public int staticInt43961;
+    static public int staticInt43962;
+    static public int staticInt43963;
+    static public int staticInt43964;
+    static public int staticInt43965;
+    static public int staticInt43966;
+    static public int staticInt43967;
+    static public int staticInt43968;
+    static public int staticInt43969;
+    static public int staticInt43970;
+    static public int staticInt43971;
+    static public int staticInt43972;
+    static public int staticInt43973;
+    static public int staticInt43974;
+    static public int staticInt43975;
+    static public int staticInt43976;
+    static public int staticInt43977;
+    static public int staticInt43978;
+    static public int staticInt43979;
+    static public int staticInt43980;
+    static public int staticInt43981;
+    static public int staticInt43982;
+    static public int staticInt43983;
+    static public int staticInt43984;
+    static public int staticInt43985;
+    static public int staticInt43986;
+    static public int staticInt43987;
+    static public int staticInt43988;
+    static public int staticInt43989;
+    static public int staticInt43990;
+    static public int staticInt43991;
+    static public int staticInt43992;
+    static public int staticInt43993;
+    static public int staticInt43994;
+    static public int staticInt43995;
+    static public int staticInt43996;
+    static public int staticInt43997;
+    static public int staticInt43998;
+    static public int staticInt43999;
+    static public int staticInt44000;
+    static public int staticInt44001;
+    static public int staticInt44002;
+    static public int staticInt44003;
+    static public int staticInt44004;
+    static public int staticInt44005;
+    static public int staticInt44006;
+    static public int staticInt44007;
+    static public int staticInt44008;
+    static public int staticInt44009;
+    static public int staticInt44010;
+    static public int staticInt44011;
+    static public int staticInt44012;
+    static public int staticInt44013;
+    static public int staticInt44014;
+    static public int staticInt44015;
+    static public int staticInt44016;
+    static public int staticInt44017;
+    static public int staticInt44018;
+    static public int staticInt44019;
+    static public int staticInt44020;
+    static public int staticInt44021;
+    static public int staticInt44022;
+    static public int staticInt44023;
+    static public int staticInt44024;
+    static public int staticInt44025;
+    static public int staticInt44026;
+    static public int staticInt44027;
+    static public int staticInt44028;
+    static public int staticInt44029;
+    static public int staticInt44030;
+    static public int staticInt44031;
+    static public int staticInt44032;
+    static public int staticInt44033;
+    static public int staticInt44034;
+    static public int staticInt44035;
+    static public int staticInt44036;
+    static public int staticInt44037;
+    static public int staticInt44038;
+    static public int staticInt44039;
+    static public int staticInt44040;
+    static public int staticInt44041;
+    static public int staticInt44042;
+    static public int staticInt44043;
+    static public int staticInt44044;
+    static public int staticInt44045;
+    static public int staticInt44046;
+    static public int staticInt44047;
+    static public int staticInt44048;
+    static public int staticInt44049;
+    static public int staticInt44050;
+    static public int staticInt44051;
+    static public int staticInt44052;
+    static public int staticInt44053;
+    static public int staticInt44054;
+    static public int staticInt44055;
+    static public int staticInt44056;
+    static public int staticInt44057;
+    static public int staticInt44058;
+    static public int staticInt44059;
+    static public int staticInt44060;
+    static public int staticInt44061;
+    static public int staticInt44062;
+    static public int staticInt44063;
+    static public int staticInt44064;
+    static public int staticInt44065;
+    static public int staticInt44066;
+    static public int staticInt44067;
+    static public int staticInt44068;
+    static public int staticInt44069;
+    static public int staticInt44070;
+    static public int staticInt44071;
+    static public int staticInt44072;
+    static public int staticInt44073;
+    static public int staticInt44074;
+    static public int staticInt44075;
+    static public int staticInt44076;
+    static public int staticInt44077;
+    static public int staticInt44078;
+    static public int staticInt44079;
+    static public int staticInt44080;
+    static public int staticInt44081;
+    static public int staticInt44082;
+    static public int staticInt44083;
+    static public int staticInt44084;
+    static public int staticInt44085;
+    static public int staticInt44086;
+    static public int staticInt44087;
+    static public int staticInt44088;
+    static public int staticInt44089;
+    static public int staticInt44090;
+    static public int staticInt44091;
+    static public int staticInt44092;
+    static public int staticInt44093;
+    static public int staticInt44094;
+    static public int staticInt44095;
+    static public int staticInt44096;
+    static public int staticInt44097;
+    static public int staticInt44098;
+    static public int staticInt44099;
+    static public int staticInt44100;
+    static public int staticInt44101;
+    static public int staticInt44102;
+    static public int staticInt44103;
+    static public int staticInt44104;
+    static public int staticInt44105;
+    static public int staticInt44106;
+    static public int staticInt44107;
+    static public int staticInt44108;
+    static public int staticInt44109;
+    static public int staticInt44110;
+    static public int staticInt44111;
+    static public int staticInt44112;
+    static public int staticInt44113;
+    static public int staticInt44114;
+    static public int staticInt44115;
+    static public int staticInt44116;
+    static public int staticInt44117;
+    static public int staticInt44118;
+    static public int staticInt44119;
+    static public int staticInt44120;
+    static public int staticInt44121;
+    static public int staticInt44122;
+    static public int staticInt44123;
+    static public int staticInt44124;
+    static public int staticInt44125;
+    static public int staticInt44126;
+    static public int staticInt44127;
+    static public int staticInt44128;
+    static public int staticInt44129;
+    static public int staticInt44130;
+    static public int staticInt44131;
+    static public int staticInt44132;
+    static public int staticInt44133;
+    static public int staticInt44134;
+    static public int staticInt44135;
+    static public int staticInt44136;
+    static public int staticInt44137;
+    static public int staticInt44138;
+    static public int staticInt44139;
+    static public int staticInt44140;
+    static public int staticInt44141;
+    static public int staticInt44142;
+    static public int staticInt44143;
+    static public int staticInt44144;
+    static public int staticInt44145;
+    static public int staticInt44146;
+    static public int staticInt44147;
+    static public int staticInt44148;
+    static public int staticInt44149;
+    static public int staticInt44150;
+    static public int staticInt44151;
+    static public int staticInt44152;
+    static public int staticInt44153;
+    static public int staticInt44154;
+    static public int staticInt44155;
+    static public int staticInt44156;
+    static public int staticInt44157;
+    static public int staticInt44158;
+    static public int staticInt44159;
+    static public int staticInt44160;
+    static public int staticInt44161;
+    static public int staticInt44162;
+    static public int staticInt44163;
+    static public int staticInt44164;
+    static public int staticInt44165;
+    static public int staticInt44166;
+    static public int staticInt44167;
+    static public int staticInt44168;
+    static public int staticInt44169;
+    static public int staticInt44170;
+    static public int staticInt44171;
+    static public int staticInt44172;
+    static public int staticInt44173;
+    static public int staticInt44174;
+    static public int staticInt44175;
+    static public int staticInt44176;
+    static public int staticInt44177;
+    static public int staticInt44178;
+    static public int staticInt44179;
+    static public int staticInt44180;
+    static public int staticInt44181;
+    static public int staticInt44182;
+    static public int staticInt44183;
+    static public int staticInt44184;
+    static public int staticInt44185;
+    static public int staticInt44186;
+    static public int staticInt44187;
+    static public int staticInt44188;
+    static public int staticInt44189;
+    static public int staticInt44190;
+    static public int staticInt44191;
+    static public int staticInt44192;
+    static public int staticInt44193;
+    static public int staticInt44194;
+    static public int staticInt44195;
+    static public int staticInt44196;
+    static public int staticInt44197;
+    static public int staticInt44198;
+    static public int staticInt44199;
+    static public int staticInt44200;
+    static public int staticInt44201;
+    static public int staticInt44202;
+    static public int staticInt44203;
+    static public int staticInt44204;
+    static public int staticInt44205;
+    static public int staticInt44206;
+    static public int staticInt44207;
+    static public int staticInt44208;
+    static public int staticInt44209;
+    static public int staticInt44210;
+    static public int staticInt44211;
+    static public int staticInt44212;
+    static public int staticInt44213;
+    static public int staticInt44214;
+    static public int staticInt44215;
+    static public int staticInt44216;
+    static public int staticInt44217;
+    static public int staticInt44218;
+    static public int staticInt44219;
+    static public int staticInt44220;
+    static public int staticInt44221;
+    static public int staticInt44222;
+    static public int staticInt44223;
+    static public int staticInt44224;
+    static public int staticInt44225;
+    static public int staticInt44226;
+    static public int staticInt44227;
+    static public int staticInt44228;
+    static public int staticInt44229;
+    static public int staticInt44230;
+    static public int staticInt44231;
+    static public int staticInt44232;
+    static public int staticInt44233;
+    static public int staticInt44234;
+    static public int staticInt44235;
+    static public int staticInt44236;
+    static public int staticInt44237;
+    static public int staticInt44238;
+    static public int staticInt44239;
+    static public int staticInt44240;
+    static public int staticInt44241;
+    static public int staticInt44242;
+    static public int staticInt44243;
+    static public int staticInt44244;
+    static public int staticInt44245;
+    static public int staticInt44246;
+    static public int staticInt44247;
+    static public int staticInt44248;
+    static public int staticInt44249;
+    static public int staticInt44250;
+    static public int staticInt44251;
+    static public int staticInt44252;
+    static public int staticInt44253;
+    static public int staticInt44254;
+    static public int staticInt44255;
+    static public int staticInt44256;
+    static public int staticInt44257;
+    static public int staticInt44258;
+    static public int staticInt44259;
+    static public int staticInt44260;
+    static public int staticInt44261;
+    static public int staticInt44262;
+    static public int staticInt44263;
+    static public int staticInt44264;
+    static public int staticInt44265;
+    static public int staticInt44266;
+    static public int staticInt44267;
+    static public int staticInt44268;
+    static public int staticInt44269;
+    static public int staticInt44270;
+    static public int staticInt44271;
+    static public int staticInt44272;
+    static public int staticInt44273;
+    static public int staticInt44274;
+    static public int staticInt44275;
+    static public int staticInt44276;
+    static public int staticInt44277;
+    static public int staticInt44278;
+    static public int staticInt44279;
+    static public int staticInt44280;
+    static public int staticInt44281;
+    static public int staticInt44282;
+    static public int staticInt44283;
+    static public int staticInt44284;
+    static public int staticInt44285;
+    static public int staticInt44286;
+    static public int staticInt44287;
+    static public int staticInt44288;
+    static public int staticInt44289;
+    static public int staticInt44290;
+    static public int staticInt44291;
+    static public int staticInt44292;
+    static public int staticInt44293;
+    static public int staticInt44294;
+    static public int staticInt44295;
+    static public int staticInt44296;
+    static public int staticInt44297;
+    static public int staticInt44298;
+    static public int staticInt44299;
+    static public int staticInt44300;
+    static public int staticInt44301;
+    static public int staticInt44302;
+    static public int staticInt44303;
+    static public int staticInt44304;
+    static public int staticInt44305;
+    static public int staticInt44306;
+    static public int staticInt44307;
+    static public int staticInt44308;
+    static public int staticInt44309;
+    static public int staticInt44310;
+    static public int staticInt44311;
+    static public int staticInt44312;
+    static public int staticInt44313;
+    static public int staticInt44314;
+    static public int staticInt44315;
+    static public int staticInt44316;
+    static public int staticInt44317;
+    static public int staticInt44318;
+    static public int staticInt44319;
+    static public int staticInt44320;
+    static public int staticInt44321;
+    static public int staticInt44322;
+    static public int staticInt44323;
+    static public int staticInt44324;
+    static public int staticInt44325;
+    static public int staticInt44326;
+    static public int staticInt44327;
+    static public int staticInt44328;
+    static public int staticInt44329;
+    static public int staticInt44330;
+    static public int staticInt44331;
+    static public int staticInt44332;
+    static public int staticInt44333;
+    static public int staticInt44334;
+    static public int staticInt44335;
+    static public int staticInt44336;
+    static public int staticInt44337;
+    static public int staticInt44338;
+    static public int staticInt44339;
+    static public int staticInt44340;
+    static public int staticInt44341;
+    static public int staticInt44342;
+    static public int staticInt44343;
+    static public int staticInt44344;
+    static public int staticInt44345;
+    static public int staticInt44346;
+    static public int staticInt44347;
+    static public int staticInt44348;
+    static public int staticInt44349;
+    static public int staticInt44350;
+    static public int staticInt44351;
+    static public int staticInt44352;
+    static public int staticInt44353;
+    static public int staticInt44354;
+    static public int staticInt44355;
+    static public int staticInt44356;
+    static public int staticInt44357;
+    static public int staticInt44358;
+    static public int staticInt44359;
+    static public int staticInt44360;
+    static public int staticInt44361;
+    static public int staticInt44362;
+    static public int staticInt44363;
+    static public int staticInt44364;
+    static public int staticInt44365;
+    static public int staticInt44366;
+    static public int staticInt44367;
+    static public int staticInt44368;
+    static public int staticInt44369;
+    static public int staticInt44370;
+    static public int staticInt44371;
+    static public int staticInt44372;
+    static public int staticInt44373;
+    static public int staticInt44374;
+    static public int staticInt44375;
+    static public int staticInt44376;
+    static public int staticInt44377;
+    static public int staticInt44378;
+    static public int staticInt44379;
+    static public int staticInt44380;
+    static public int staticInt44381;
+    static public int staticInt44382;
+    static public int staticInt44383;
+    static public int staticInt44384;
+    static public int staticInt44385;
+    static public int staticInt44386;
+    static public int staticInt44387;
+    static public int staticInt44388;
+    static public int staticInt44389;
+    static public int staticInt44390;
+    static public int staticInt44391;
+    static public int staticInt44392;
+    static public int staticInt44393;
+    static public int staticInt44394;
+    static public int staticInt44395;
+    static public int staticInt44396;
+    static public int staticInt44397;
+    static public int staticInt44398;
+    static public int staticInt44399;
+    static public int staticInt44400;
+    static public int staticInt44401;
+    static public int staticInt44402;
+    static public int staticInt44403;
+    static public int staticInt44404;
+    static public int staticInt44405;
+    static public int staticInt44406;
+    static public int staticInt44407;
+    static public int staticInt44408;
+    static public int staticInt44409;
+    static public int staticInt44410;
+    static public int staticInt44411;
+    static public int staticInt44412;
+    static public int staticInt44413;
+    static public int staticInt44414;
+    static public int staticInt44415;
+    static public int staticInt44416;
+    static public int staticInt44417;
+    static public int staticInt44418;
+    static public int staticInt44419;
+    static public int staticInt44420;
+    static public int staticInt44421;
+    static public int staticInt44422;
+    static public int staticInt44423;
+    static public int staticInt44424;
+    static public int staticInt44425;
+    static public int staticInt44426;
+    static public int staticInt44427;
+    static public int staticInt44428;
+    static public int staticInt44429;
+    static public int staticInt44430;
+    static public int staticInt44431;
+    static public int staticInt44432;
+    static public int staticInt44433;
+    static public int staticInt44434;
+    static public int staticInt44435;
+    static public int staticInt44436;
+    static public int staticInt44437;
+    static public int staticInt44438;
+    static public int staticInt44439;
+    static public int staticInt44440;
+    static public int staticInt44441;
+    static public int staticInt44442;
+    static public int staticInt44443;
+    static public int staticInt44444;
+    static public int staticInt44445;
+    static public int staticInt44446;
+    static public int staticInt44447;
+    static public int staticInt44448;
+    static public int staticInt44449;
+    static public int staticInt44450;
+    static public int staticInt44451;
+    static public int staticInt44452;
+    static public int staticInt44453;
+    static public int staticInt44454;
+    static public int staticInt44455;
+    static public int staticInt44456;
+    static public int staticInt44457;
+    static public int staticInt44458;
+    static public int staticInt44459;
+    static public int staticInt44460;
+    static public int staticInt44461;
+    static public int staticInt44462;
+    static public int staticInt44463;
+    static public int staticInt44464;
+    static public int staticInt44465;
+    static public int staticInt44466;
+    static public int staticInt44467;
+    static public int staticInt44468;
+    static public int staticInt44469;
+    static public int staticInt44470;
+    static public int staticInt44471;
+    static public int staticInt44472;
+    static public int staticInt44473;
+    static public int staticInt44474;
+    static public int staticInt44475;
+    static public int staticInt44476;
+    static public int staticInt44477;
+    static public int staticInt44478;
+    static public int staticInt44479;
+    static public int staticInt44480;
+    static public int staticInt44481;
+    static public int staticInt44482;
+    static public int staticInt44483;
+    static public int staticInt44484;
+    static public int staticInt44485;
+    static public int staticInt44486;
+    static public int staticInt44487;
+    static public int staticInt44488;
+    static public int staticInt44489;
+    static public int staticInt44490;
+    static public int staticInt44491;
+    static public int staticInt44492;
+    static public int staticInt44493;
+    static public int staticInt44494;
+    static public int staticInt44495;
+    static public int staticInt44496;
+    static public int staticInt44497;
+    static public int staticInt44498;
+    static public int staticInt44499;
+    static public int staticInt44500;
+    static public int staticInt44501;
+    static public int staticInt44502;
+    static public int staticInt44503;
+    static public int staticInt44504;
+    static public int staticInt44505;
+    static public int staticInt44506;
+    static public int staticInt44507;
+    static public int staticInt44508;
+    static public int staticInt44509;
+    static public int staticInt44510;
+    static public int staticInt44511;
+    static public int staticInt44512;
+    static public int staticInt44513;
+    static public int staticInt44514;
+    static public int staticInt44515;
+    static public int staticInt44516;
+    static public int staticInt44517;
+    static public int staticInt44518;
+    static public int staticInt44519;
+    static public int staticInt44520;
+    static public int staticInt44521;
+    static public int staticInt44522;
+    static public int staticInt44523;
+    static public int staticInt44524;
+    static public int staticInt44525;
+    static public int staticInt44526;
+    static public int staticInt44527;
+    static public int staticInt44528;
+    static public int staticInt44529;
+    static public int staticInt44530;
+    static public int staticInt44531;
+    static public int staticInt44532;
+    static public int staticInt44533;
+    static public int staticInt44534;
+    static public int staticInt44535;
+    static public int staticInt44536;
+    static public int staticInt44537;
+    static public int staticInt44538;
+    static public int staticInt44539;
+    static public int staticInt44540;
+    static public int staticInt44541;
+    static public int staticInt44542;
+    static public int staticInt44543;
+    static public int staticInt44544;
+    static public int staticInt44545;
+    static public int staticInt44546;
+    static public int staticInt44547;
+    static public int staticInt44548;
+    static public int staticInt44549;
+    static public int staticInt44550;
+    static public int staticInt44551;
+    static public int staticInt44552;
+    static public int staticInt44553;
+    static public int staticInt44554;
+    static public int staticInt44555;
+    static public int staticInt44556;
+    static public int staticInt44557;
+    static public int staticInt44558;
+    static public int staticInt44559;
+    static public int staticInt44560;
+    static public int staticInt44561;
+    static public int staticInt44562;
+    static public int staticInt44563;
+    static public int staticInt44564;
+    static public int staticInt44565;
+    static public int staticInt44566;
+    static public int staticInt44567;
+    static public int staticInt44568;
+    static public int staticInt44569;
+    static public int staticInt44570;
+    static public int staticInt44571;
+    static public int staticInt44572;
+    static public int staticInt44573;
+    static public int staticInt44574;
+    static public int staticInt44575;
+    static public int staticInt44576;
+    static public int staticInt44577;
+    static public int staticInt44578;
+    static public int staticInt44579;
+    static public int staticInt44580;
+    static public int staticInt44581;
+    static public int staticInt44582;
+    static public int staticInt44583;
+    static public int staticInt44584;
+    static public int staticInt44585;
+    static public int staticInt44586;
+    static public int staticInt44587;
+    static public int staticInt44588;
+    static public int staticInt44589;
+    static public int staticInt44590;
+    static public int staticInt44591;
+    static public int staticInt44592;
+    static public int staticInt44593;
+    static public int staticInt44594;
+    static public int staticInt44595;
+    static public int staticInt44596;
+    static public int staticInt44597;
+    static public int staticInt44598;
+    static public int staticInt44599;
+    static public int staticInt44600;
+    static public int staticInt44601;
+    static public int staticInt44602;
+    static public int staticInt44603;
+    static public int staticInt44604;
+    static public int staticInt44605;
+    static public int staticInt44606;
+    static public int staticInt44607;
+    static public int staticInt44608;
+    static public int staticInt44609;
+    static public int staticInt44610;
+    static public int staticInt44611;
+    static public int staticInt44612;
+    static public int staticInt44613;
+    static public int staticInt44614;
+    static public int staticInt44615;
+    static public int staticInt44616;
+    static public int staticInt44617;
+    static public int staticInt44618;
+    static public int staticInt44619;
+    static public int staticInt44620;
+    static public int staticInt44621;
+    static public int staticInt44622;
+    static public int staticInt44623;
+    static public int staticInt44624;
+    static public int staticInt44625;
+    static public int staticInt44626;
+    static public int staticInt44627;
+    static public int staticInt44628;
+    static public int staticInt44629;
+    static public int staticInt44630;
+    static public int staticInt44631;
+    static public int staticInt44632;
+    static public int staticInt44633;
+    static public int staticInt44634;
+    static public int staticInt44635;
+    static public int staticInt44636;
+    static public int staticInt44637;
+    static public int staticInt44638;
+    static public int staticInt44639;
+    static public int staticInt44640;
+    static public int staticInt44641;
+    static public int staticInt44642;
+    static public int staticInt44643;
+    static public int staticInt44644;
+    static public int staticInt44645;
+    static public int staticInt44646;
+    static public int staticInt44647;
+    static public int staticInt44648;
+    static public int staticInt44649;
+    static public int staticInt44650;
+    static public int staticInt44651;
+    static public int staticInt44652;
+    static public int staticInt44653;
+    static public int staticInt44654;
+    static public int staticInt44655;
+    static public int staticInt44656;
+    static public int staticInt44657;
+    static public int staticInt44658;
+    static public int staticInt44659;
+    static public int staticInt44660;
+    static public int staticInt44661;
+    static public int staticInt44662;
+    static public int staticInt44663;
+    static public int staticInt44664;
+    static public int staticInt44665;
+    static public int staticInt44666;
+    static public int staticInt44667;
+    static public int staticInt44668;
+    static public int staticInt44669;
+    static public int staticInt44670;
+    static public int staticInt44671;
+    static public int staticInt44672;
+    static public int staticInt44673;
+    static public int staticInt44674;
+    static public int staticInt44675;
+    static public int staticInt44676;
+    static public int staticInt44677;
+    static public int staticInt44678;
+    static public int staticInt44679;
+    static public int staticInt44680;
+    static public int staticInt44681;
+    static public int staticInt44682;
+    static public int staticInt44683;
+    static public int staticInt44684;
+    static public int staticInt44685;
+    static public int staticInt44686;
+    static public int staticInt44687;
+    static public int staticInt44688;
+    static public int staticInt44689;
+    static public int staticInt44690;
+    static public int staticInt44691;
+    static public int staticInt44692;
+    static public int staticInt44693;
+    static public int staticInt44694;
+    static public int staticInt44695;
+    static public int staticInt44696;
+    static public int staticInt44697;
+    static public int staticInt44698;
+    static public int staticInt44699;
+    static public int staticInt44700;
+    static public int staticInt44701;
+    static public int staticInt44702;
+    static public int staticInt44703;
+    static public int staticInt44704;
+    static public int staticInt44705;
+    static public int staticInt44706;
+    static public int staticInt44707;
+    static public int staticInt44708;
+    static public int staticInt44709;
+    static public int staticInt44710;
+    static public int staticInt44711;
+    static public int staticInt44712;
+    static public int staticInt44713;
+    static public int staticInt44714;
+    static public int staticInt44715;
+    static public int staticInt44716;
+    static public int staticInt44717;
+    static public int staticInt44718;
+    static public int staticInt44719;
+    static public int staticInt44720;
+    static public int staticInt44721;
+    static public int staticInt44722;
+    static public int staticInt44723;
+    static public int staticInt44724;
+    static public int staticInt44725;
+    static public int staticInt44726;
+    static public int staticInt44727;
+    static public int staticInt44728;
+    static public int staticInt44729;
+    static public int staticInt44730;
+    static public int staticInt44731;
+    static public int staticInt44732;
+    static public int staticInt44733;
+    static public int staticInt44734;
+    static public int staticInt44735;
+    static public int staticInt44736;
+    static public int staticInt44737;
+    static public int staticInt44738;
+    static public int staticInt44739;
+    static public int staticInt44740;
+    static public int staticInt44741;
+    static public int staticInt44742;
+    static public int staticInt44743;
+    static public int staticInt44744;
+    static public int staticInt44745;
+    static public int staticInt44746;
+    static public int staticInt44747;
+    static public int staticInt44748;
+    static public int staticInt44749;
+    static public int staticInt44750;
+    static public int staticInt44751;
+    static public int staticInt44752;
+    static public int staticInt44753;
+    static public int staticInt44754;
+    static public int staticInt44755;
+    static public int staticInt44756;
+    static public int staticInt44757;
+    static public int staticInt44758;
+    static public int staticInt44759;
+    static public int staticInt44760;
+    static public int staticInt44761;
+    static public int staticInt44762;
+    static public int staticInt44763;
+    static public int staticInt44764;
+    static public int staticInt44765;
+    static public int staticInt44766;
+    static public int staticInt44767;
+    static public int staticInt44768;
+    static public int staticInt44769;
+    static public int staticInt44770;
+    static public int staticInt44771;
+    static public int staticInt44772;
+    static public int staticInt44773;
+    static public int staticInt44774;
+    static public int staticInt44775;
+    static public int staticInt44776;
+    static public int staticInt44777;
+    static public int staticInt44778;
+    static public int staticInt44779;
+    static public int staticInt44780;
+    static public int staticInt44781;
+    static public int staticInt44782;
+    static public int staticInt44783;
+    static public int staticInt44784;
+    static public int staticInt44785;
+    static public int staticInt44786;
+    static public int staticInt44787;
+    static public int staticInt44788;
+    static public int staticInt44789;
+    static public int staticInt44790;
+    static public int staticInt44791;
+    static public int staticInt44792;
+    static public int staticInt44793;
+    static public int staticInt44794;
+    static public int staticInt44795;
+    static public int staticInt44796;
+    static public int staticInt44797;
+    static public int staticInt44798;
+    static public int staticInt44799;
+    static public int staticInt44800;
+    static public int staticInt44801;
+    static public int staticInt44802;
+    static public int staticInt44803;
+    static public int staticInt44804;
+    static public int staticInt44805;
+    static public int staticInt44806;
+    static public int staticInt44807;
+    static public int staticInt44808;
+    static public int staticInt44809;
+    static public int staticInt44810;
+    static public int staticInt44811;
+    static public int staticInt44812;
+    static public int staticInt44813;
+    static public int staticInt44814;
+    static public int staticInt44815;
+    static public int staticInt44816;
+    static public int staticInt44817;
+    static public int staticInt44818;
+    static public int staticInt44819;
+    static public int staticInt44820;
+    static public int staticInt44821;
+    static public int staticInt44822;
+    static public int staticInt44823;
+    static public int staticInt44824;
+    static public int staticInt44825;
+    static public int staticInt44826;
+    static public int staticInt44827;
+    static public int staticInt44828;
+    static public int staticInt44829;
+    static public int staticInt44830;
+    static public int staticInt44831;
+    static public int staticInt44832;
+    static public int staticInt44833;
+    static public int staticInt44834;
+    static public int staticInt44835;
+    static public int staticInt44836;
+    static public int staticInt44837;
+    static public int staticInt44838;
+    static public int staticInt44839;
+    static public int staticInt44840;
+    static public int staticInt44841;
+    static public int staticInt44842;
+    static public int staticInt44843;
+    static public int staticInt44844;
+    static public int staticInt44845;
+    static public int staticInt44846;
+    static public int staticInt44847;
+    static public int staticInt44848;
+    static public int staticInt44849;
+    static public int staticInt44850;
+    static public int staticInt44851;
+    static public int staticInt44852;
+    static public int staticInt44853;
+    static public int staticInt44854;
+    static public int staticInt44855;
+    static public int staticInt44856;
+    static public int staticInt44857;
+    static public int staticInt44858;
+    static public int staticInt44859;
+    static public int staticInt44860;
+    static public int staticInt44861;
+    static public int staticInt44862;
+    static public int staticInt44863;
+    static public int staticInt44864;
+    static public int staticInt44865;
+    static public int staticInt44866;
+    static public int staticInt44867;
+    static public int staticInt44868;
+    static public int staticInt44869;
+    static public int staticInt44870;
+    static public int staticInt44871;
+    static public int staticInt44872;
+    static public int staticInt44873;
+    static public int staticInt44874;
+    static public int staticInt44875;
+    static public int staticInt44876;
+    static public int staticInt44877;
+    static public int staticInt44878;
+    static public int staticInt44879;
+    static public int staticInt44880;
+    static public int staticInt44881;
+    static public int staticInt44882;
+    static public int staticInt44883;
+    static public int staticInt44884;
+    static public int staticInt44885;
+    static public int staticInt44886;
+    static public int staticInt44887;
+    static public int staticInt44888;
+    static public int staticInt44889;
+    static public int staticInt44890;
+    static public int staticInt44891;
+    static public int staticInt44892;
+    static public int staticInt44893;
+    static public int staticInt44894;
+    static public int staticInt44895;
+    static public int staticInt44896;
+    static public int staticInt44897;
+    static public int staticInt44898;
+    static public int staticInt44899;
+    static public int staticInt44900;
+    static public int staticInt44901;
+    static public int staticInt44902;
+    static public int staticInt44903;
+    static public int staticInt44904;
+    static public int staticInt44905;
+    static public int staticInt44906;
+    static public int staticInt44907;
+    static public int staticInt44908;
+    static public int staticInt44909;
+    static public int staticInt44910;
+    static public int staticInt44911;
+    static public int staticInt44912;
+    static public int staticInt44913;
+    static public int staticInt44914;
+    static public int staticInt44915;
+    static public int staticInt44916;
+    static public int staticInt44917;
+    static public int staticInt44918;
+    static public int staticInt44919;
+    static public int staticInt44920;
+    static public int staticInt44921;
+    static public int staticInt44922;
+    static public int staticInt44923;
+    static public int staticInt44924;
+    static public int staticInt44925;
+    static public int staticInt44926;
+    static public int staticInt44927;
+    static public int staticInt44928;
+    static public int staticInt44929;
+    static public int staticInt44930;
+    static public int staticInt44931;
+    static public int staticInt44932;
+    static public int staticInt44933;
+    static public int staticInt44934;
+    static public int staticInt44935;
+    static public int staticInt44936;
+    static public int staticInt44937;
+    static public int staticInt44938;
+    static public int staticInt44939;
+    static public int staticInt44940;
+    static public int staticInt44941;
+    static public int staticInt44942;
+    static public int staticInt44943;
+    static public int staticInt44944;
+    static public int staticInt44945;
+    static public int staticInt44946;
+    static public int staticInt44947;
+    static public int staticInt44948;
+    static public int staticInt44949;
+    static public int staticInt44950;
+    static public int staticInt44951;
+    static public int staticInt44952;
+    static public int staticInt44953;
+    static public int staticInt44954;
+    static public int staticInt44955;
+    static public int staticInt44956;
+    static public int staticInt44957;
+    static public int staticInt44958;
+    static public int staticInt44959;
+    static public int staticInt44960;
+    static public int staticInt44961;
+    static public int staticInt44962;
+    static public int staticInt44963;
+    static public int staticInt44964;
+    static public int staticInt44965;
+    static public int staticInt44966;
+    static public int staticInt44967;
+    static public int staticInt44968;
+    static public int staticInt44969;
+    static public int staticInt44970;
+    static public int staticInt44971;
+    static public int staticInt44972;
+    static public int staticInt44973;
+    static public int staticInt44974;
+    static public int staticInt44975;
+    static public int staticInt44976;
+    static public int staticInt44977;
+    static public int staticInt44978;
+    static public int staticInt44979;
+    static public int staticInt44980;
+    static public int staticInt44981;
+    static public int staticInt44982;
+    static public int staticInt44983;
+    static public int staticInt44984;
+    static public int staticInt44985;
+    static public int staticInt44986;
+    static public int staticInt44987;
+    static public int staticInt44988;
+    static public int staticInt44989;
+    static public int staticInt44990;
+    static public int staticInt44991;
+    static public int staticInt44992;
+    static public int staticInt44993;
+    static public int staticInt44994;
+    static public int staticInt44995;
+    static public int staticInt44996;
+    static public int staticInt44997;
+    static public int staticInt44998;
+    static public int staticInt44999;
+    static public int staticInt45000;
+    static public int staticInt45001;
+    static public int staticInt45002;
+    static public int staticInt45003;
+    static public int staticInt45004;
+    static public int staticInt45005;
+    static public int staticInt45006;
+    static public int staticInt45007;
+    static public int staticInt45008;
+    static public int staticInt45009;
+    static public int staticInt45010;
+    static public int staticInt45011;
+    static public int staticInt45012;
+    static public int staticInt45013;
+    static public int staticInt45014;
+    static public int staticInt45015;
+    static public int staticInt45016;
+    static public int staticInt45017;
+    static public int staticInt45018;
+    static public int staticInt45019;
+    static public int staticInt45020;
+    static public int staticInt45021;
+    static public int staticInt45022;
+    static public int staticInt45023;
+    static public int staticInt45024;
+    static public int staticInt45025;
+    static public int staticInt45026;
+    static public int staticInt45027;
+    static public int staticInt45028;
+    static public int staticInt45029;
+    static public int staticInt45030;
+    static public int staticInt45031;
+    static public int staticInt45032;
+    static public int staticInt45033;
+    static public int staticInt45034;
+    static public int staticInt45035;
+    static public int staticInt45036;
+    static public int staticInt45037;
+    static public int staticInt45038;
+    static public int staticInt45039;
+    static public int staticInt45040;
+    static public int staticInt45041;
+    static public int staticInt45042;
+    static public int staticInt45043;
+    static public int staticInt45044;
+    static public int staticInt45045;
+    static public int staticInt45046;
+    static public int staticInt45047;
+    static public int staticInt45048;
+    static public int staticInt45049;
+    static public int staticInt45050;
+    static public int staticInt45051;
+    static public int staticInt45052;
+    static public int staticInt45053;
+    static public int staticInt45054;
+    static public int staticInt45055;
+    static public int staticInt45056;
+    static public int staticInt45057;
+    static public int staticInt45058;
+    static public int staticInt45059;
+    static public int staticInt45060;
+    static public int staticInt45061;
+    static public int staticInt45062;
+    static public int staticInt45063;
+    static public int staticInt45064;
+    static public int staticInt45065;
+    static public int staticInt45066;
+    static public int staticInt45067;
+    static public int staticInt45068;
+    static public int staticInt45069;
+    static public int staticInt45070;
+    static public int staticInt45071;
+    static public int staticInt45072;
+    static public int staticInt45073;
+    static public int staticInt45074;
+    static public int staticInt45075;
+    static public int staticInt45076;
+    static public int staticInt45077;
+    static public int staticInt45078;
+    static public int staticInt45079;
+    static public int staticInt45080;
+    static public int staticInt45081;
+    static public int staticInt45082;
+    static public int staticInt45083;
+    static public int staticInt45084;
+    static public int staticInt45085;
+    static public int staticInt45086;
+    static public int staticInt45087;
+    static public int staticInt45088;
+    static public int staticInt45089;
+    static public int staticInt45090;
+    static public int staticInt45091;
+    static public int staticInt45092;
+    static public int staticInt45093;
+    static public int staticInt45094;
+    static public int staticInt45095;
+    static public int staticInt45096;
+    static public int staticInt45097;
+    static public int staticInt45098;
+    static public int staticInt45099;
+    static public int staticInt45100;
+    static public int staticInt45101;
+    static public int staticInt45102;
+    static public int staticInt45103;
+    static public int staticInt45104;
+    static public int staticInt45105;
+    static public int staticInt45106;
+    static public int staticInt45107;
+    static public int staticInt45108;
+    static public int staticInt45109;
+    static public int staticInt45110;
+    static public int staticInt45111;
+    static public int staticInt45112;
+    static public int staticInt45113;
+    static public int staticInt45114;
+    static public int staticInt45115;
+    static public int staticInt45116;
+    static public int staticInt45117;
+    static public int staticInt45118;
+    static public int staticInt45119;
+    static public int staticInt45120;
+    static public int staticInt45121;
+    static public int staticInt45122;
+    static public int staticInt45123;
+    static public int staticInt45124;
+    static public int staticInt45125;
+    static public int staticInt45126;
+    static public int staticInt45127;
+    static public int staticInt45128;
+    static public int staticInt45129;
+    static public int staticInt45130;
+    static public int staticInt45131;
+    static public int staticInt45132;
+    static public int staticInt45133;
+    static public int staticInt45134;
+    static public int staticInt45135;
+    static public int staticInt45136;
+    static public int staticInt45137;
+    static public int staticInt45138;
+    static public int staticInt45139;
+    static public int staticInt45140;
+    static public int staticInt45141;
+    static public int staticInt45142;
+    static public int staticInt45143;
+    static public int staticInt45144;
+    static public int staticInt45145;
+    static public int staticInt45146;
+    static public int staticInt45147;
+    static public int staticInt45148;
+    static public int staticInt45149;
+    static public int staticInt45150;
+    static public int staticInt45151;
+    static public int staticInt45152;
+    static public int staticInt45153;
+    static public int staticInt45154;
+    static public int staticInt45155;
+    static public int staticInt45156;
+    static public int staticInt45157;
+    static public int staticInt45158;
+    static public int staticInt45159;
+    static public int staticInt45160;
+    static public int staticInt45161;
+    static public int staticInt45162;
+    static public int staticInt45163;
+    static public int staticInt45164;
+    static public int staticInt45165;
+    static public int staticInt45166;
+    static public int staticInt45167;
+    static public int staticInt45168;
+    static public int staticInt45169;
+    static public int staticInt45170;
+    static public int staticInt45171;
+    static public int staticInt45172;
+    static public int staticInt45173;
+    static public int staticInt45174;
+    static public int staticInt45175;
+    static public int staticInt45176;
+    static public int staticInt45177;
+    static public int staticInt45178;
+    static public int staticInt45179;
+    static public int staticInt45180;
+    static public int staticInt45181;
+    static public int staticInt45182;
+    static public int staticInt45183;
+    static public int staticInt45184;
+    static public int staticInt45185;
+    static public int staticInt45186;
+    static public int staticInt45187;
+    static public int staticInt45188;
+    static public int staticInt45189;
+    static public int staticInt45190;
+    static public int staticInt45191;
+    static public int staticInt45192;
+    static public int staticInt45193;
+    static public int staticInt45194;
+    static public int staticInt45195;
+    static public int staticInt45196;
+    static public int staticInt45197;
+    static public int staticInt45198;
+    static public int staticInt45199;
+    static public int staticInt45200;
+    static public int staticInt45201;
+    static public int staticInt45202;
+    static public int staticInt45203;
+    static public int staticInt45204;
+    static public int staticInt45205;
+    static public int staticInt45206;
+    static public int staticInt45207;
+    static public int staticInt45208;
+    static public int staticInt45209;
+    static public int staticInt45210;
+    static public int staticInt45211;
+    static public int staticInt45212;
+    static public int staticInt45213;
+    static public int staticInt45214;
+    static public int staticInt45215;
+    static public int staticInt45216;
+    static public int staticInt45217;
+    static public int staticInt45218;
+    static public int staticInt45219;
+    static public int staticInt45220;
+    static public int staticInt45221;
+    static public int staticInt45222;
+    static public int staticInt45223;
+    static public int staticInt45224;
+    static public int staticInt45225;
+    static public int staticInt45226;
+    static public int staticInt45227;
+    static public int staticInt45228;
+    static public int staticInt45229;
+    static public int staticInt45230;
+    static public int staticInt45231;
+    static public int staticInt45232;
+    static public int staticInt45233;
+    static public int staticInt45234;
+    static public int staticInt45235;
+    static public int staticInt45236;
+    static public int staticInt45237;
+    static public int staticInt45238;
+    static public int staticInt45239;
+    static public int staticInt45240;
+    static public int staticInt45241;
+    static public int staticInt45242;
+    static public int staticInt45243;
+    static public int staticInt45244;
+    static public int staticInt45245;
+    static public int staticInt45246;
+    static public int staticInt45247;
+    static public int staticInt45248;
+    static public int staticInt45249;
+    static public int staticInt45250;
+    static public int staticInt45251;
+    static public int staticInt45252;
+    static public int staticInt45253;
+    static public int staticInt45254;
+    static public int staticInt45255;
+    static public int staticInt45256;
+    static public int staticInt45257;
+    static public int staticInt45258;
+    static public int staticInt45259;
+    static public int staticInt45260;
+    static public int staticInt45261;
+    static public int staticInt45262;
+    static public int staticInt45263;
+    static public int staticInt45264;
+    static public int staticInt45265;
+    static public int staticInt45266;
+    static public int staticInt45267;
+    static public int staticInt45268;
+    static public int staticInt45269;
+    static public int staticInt45270;
+    static public int staticInt45271;
+    static public int staticInt45272;
+    static public int staticInt45273;
+    static public int staticInt45274;
+    static public int staticInt45275;
+    static public int staticInt45276;
+    static public int staticInt45277;
+    static public int staticInt45278;
+    static public int staticInt45279;
+    static public int staticInt45280;
+    static public int staticInt45281;
+    static public int staticInt45282;
+    static public int staticInt45283;
+    static public int staticInt45284;
+    static public int staticInt45285;
+    static public int staticInt45286;
+    static public int staticInt45287;
+    static public int staticInt45288;
+    static public int staticInt45289;
+    static public int staticInt45290;
+    static public int staticInt45291;
+    static public int staticInt45292;
+    static public int staticInt45293;
+    static public int staticInt45294;
+    static public int staticInt45295;
+    static public int staticInt45296;
+    static public int staticInt45297;
+    static public int staticInt45298;
+    static public int staticInt45299;
+    static public int staticInt45300;
+    static public int staticInt45301;
+    static public int staticInt45302;
+    static public int staticInt45303;
+    static public int staticInt45304;
+    static public int staticInt45305;
+    static public int staticInt45306;
+    static public int staticInt45307;
+    static public int staticInt45308;
+    static public int staticInt45309;
+    static public int staticInt45310;
+    static public int staticInt45311;
+    static public int staticInt45312;
+    static public int staticInt45313;
+    static public int staticInt45314;
+    static public int staticInt45315;
+    static public int staticInt45316;
+    static public int staticInt45317;
+    static public int staticInt45318;
+    static public int staticInt45319;
+    static public int staticInt45320;
+    static public int staticInt45321;
+    static public int staticInt45322;
+    static public int staticInt45323;
+    static public int staticInt45324;
+    static public int staticInt45325;
+    static public int staticInt45326;
+    static public int staticInt45327;
+    static public int staticInt45328;
+    static public int staticInt45329;
+    static public int staticInt45330;
+    static public int staticInt45331;
+    static public int staticInt45332;
+    static public int staticInt45333;
+    static public int staticInt45334;
+    static public int staticInt45335;
+    static public int staticInt45336;
+    static public int staticInt45337;
+    static public int staticInt45338;
+    static public int staticInt45339;
+    static public int staticInt45340;
+    static public int staticInt45341;
+    static public int staticInt45342;
+    static public int staticInt45343;
+    static public int staticInt45344;
+    static public int staticInt45345;
+    static public int staticInt45346;
+    static public int staticInt45347;
+    static public int staticInt45348;
+    static public int staticInt45349;
+    static public int staticInt45350;
+    static public int staticInt45351;
+    static public int staticInt45352;
+    static public int staticInt45353;
+    static public int staticInt45354;
+    static public int staticInt45355;
+    static public int staticInt45356;
+    static public int staticInt45357;
+    static public int staticInt45358;
+    static public int staticInt45359;
+    static public int staticInt45360;
+    static public int staticInt45361;
+    static public int staticInt45362;
+    static public int staticInt45363;
+    static public int staticInt45364;
+    static public int staticInt45365;
+    static public int staticInt45366;
+    static public int staticInt45367;
+    static public int staticInt45368;
+    static public int staticInt45369;
+    static public int staticInt45370;
+    static public int staticInt45371;
+    static public int staticInt45372;
+    static public int staticInt45373;
+    static public int staticInt45374;
+    static public int staticInt45375;
+    static public int staticInt45376;
+    static public int staticInt45377;
+    static public int staticInt45378;
+    static public int staticInt45379;
+    static public int staticInt45380;
+    static public int staticInt45381;
+    static public int staticInt45382;
+    static public int staticInt45383;
+    static public int staticInt45384;
+    static public int staticInt45385;
+    static public int staticInt45386;
+    static public int staticInt45387;
+    static public int staticInt45388;
+    static public int staticInt45389;
+    static public int staticInt45390;
+    static public int staticInt45391;
+    static public int staticInt45392;
+    static public int staticInt45393;
+    static public int staticInt45394;
+    static public int staticInt45395;
+    static public int staticInt45396;
+    static public int staticInt45397;
+    static public int staticInt45398;
+    static public int staticInt45399;
+    static public int staticInt45400;
+    static public int staticInt45401;
+    static public int staticInt45402;
+    static public int staticInt45403;
+    static public int staticInt45404;
+    static public int staticInt45405;
+    static public int staticInt45406;
+    static public int staticInt45407;
+    static public int staticInt45408;
+    static public int staticInt45409;
+    static public int staticInt45410;
+    static public int staticInt45411;
+    static public int staticInt45412;
+    static public int staticInt45413;
+    static public int staticInt45414;
+    static public int staticInt45415;
+    static public int staticInt45416;
+    static public int staticInt45417;
+    static public int staticInt45418;
+    static public int staticInt45419;
+    static public int staticInt45420;
+    static public int staticInt45421;
+    static public int staticInt45422;
+    static public int staticInt45423;
+    static public int staticInt45424;
+    static public int staticInt45425;
+    static public int staticInt45426;
+    static public int staticInt45427;
+    static public int staticInt45428;
+    static public int staticInt45429;
+    static public int staticInt45430;
+    static public int staticInt45431;
+    static public int staticInt45432;
+    static public int staticInt45433;
+    static public int staticInt45434;
+    static public int staticInt45435;
+    static public int staticInt45436;
+    static public int staticInt45437;
+    static public int staticInt45438;
+    static public int staticInt45439;
+    static public int staticInt45440;
+    static public int staticInt45441;
+    static public int staticInt45442;
+    static public int staticInt45443;
+    static public int staticInt45444;
+    static public int staticInt45445;
+    static public int staticInt45446;
+    static public int staticInt45447;
+    static public int staticInt45448;
+    static public int staticInt45449;
+    static public int staticInt45450;
+    static public int staticInt45451;
+    static public int staticInt45452;
+    static public int staticInt45453;
+    static public int staticInt45454;
+    static public int staticInt45455;
+    static public int staticInt45456;
+    static public int staticInt45457;
+    static public int staticInt45458;
+    static public int staticInt45459;
+    static public int staticInt45460;
+    static public int staticInt45461;
+    static public int staticInt45462;
+    static public int staticInt45463;
+    static public int staticInt45464;
+    static public int staticInt45465;
+    static public int staticInt45466;
+    static public int staticInt45467;
+    static public int staticInt45468;
+    static public int staticInt45469;
+    static public int staticInt45470;
+    static public int staticInt45471;
+    static public int staticInt45472;
+    static public int staticInt45473;
+    static public int staticInt45474;
+    static public int staticInt45475;
+    static public int staticInt45476;
+    static public int staticInt45477;
+    static public int staticInt45478;
+    static public int staticInt45479;
+    static public int staticInt45480;
+    static public int staticInt45481;
+    static public int staticInt45482;
+    static public int staticInt45483;
+    static public int staticInt45484;
+    static public int staticInt45485;
+    static public int staticInt45486;
+    static public int staticInt45487;
+    static public int staticInt45488;
+    static public int staticInt45489;
+    static public int staticInt45490;
+    static public int staticInt45491;
+    static public int staticInt45492;
+    static public int staticInt45493;
+    static public int staticInt45494;
+    static public int staticInt45495;
+    static public int staticInt45496;
+    static public int staticInt45497;
+    static public int staticInt45498;
+    static public int staticInt45499;
+    static public int staticInt45500;
+    static public int staticInt45501;
+    static public int staticInt45502;
+    static public int staticInt45503;
+    static public int staticInt45504;
+    static public int staticInt45505;
+    static public int staticInt45506;
+    static public int staticInt45507;
+    static public int staticInt45508;
+    static public int staticInt45509;
+    static public int staticInt45510;
+    static public int staticInt45511;
+    static public int staticInt45512;
+    static public int staticInt45513;
+    static public int staticInt45514;
+    static public int staticInt45515;
+    static public int staticInt45516;
+    static public int staticInt45517;
+    static public int staticInt45518;
+    static public int staticInt45519;
+    static public int staticInt45520;
+    static public int staticInt45521;
+    static public int staticInt45522;
+    static public int staticInt45523;
+    static public int staticInt45524;
+    static public int staticInt45525;
+    static public int staticInt45526;
+    static public int staticInt45527;
+    static public int staticInt45528;
+    static public int staticInt45529;
+    static public int staticInt45530;
+    static public int staticInt45531;
+    static public int staticInt45532;
+    static public int staticInt45533;
+    static public int staticInt45534;
+    static public int staticInt45535;
+    static public int staticInt45536;
+    static public int staticInt45537;
+    static public int staticInt45538;
+    static public int staticInt45539;
+    static public int staticInt45540;
+    static public int staticInt45541;
+    static public int staticInt45542;
+    static public int staticInt45543;
+    static public int staticInt45544;
+    static public int staticInt45545;
+    static public int staticInt45546;
+    static public int staticInt45547;
+    static public int staticInt45548;
+    static public int staticInt45549;
+    static public int staticInt45550;
+    static public int staticInt45551;
+    static public int staticInt45552;
+    static public int staticInt45553;
+    static public int staticInt45554;
+    static public int staticInt45555;
+    static public int staticInt45556;
+    static public int staticInt45557;
+    static public int staticInt45558;
+    static public int staticInt45559;
+    static public int staticInt45560;
+    static public int staticInt45561;
+    static public int staticInt45562;
+    static public int staticInt45563;
+    static public int staticInt45564;
+    static public int staticInt45565;
+    static public int staticInt45566;
+    static public int staticInt45567;
+    static public int staticInt45568;
+    static public int staticInt45569;
+    static public int staticInt45570;
+    static public int staticInt45571;
+    static public int staticInt45572;
+    static public int staticInt45573;
+    static public int staticInt45574;
+    static public int staticInt45575;
+    static public int staticInt45576;
+    static public int staticInt45577;
+    static public int staticInt45578;
+    static public int staticInt45579;
+    static public int staticInt45580;
+    static public int staticInt45581;
+    static public int staticInt45582;
+    static public int staticInt45583;
+    static public int staticInt45584;
+    static public int staticInt45585;
+    static public int staticInt45586;
+    static public int staticInt45587;
+    static public int staticInt45588;
+    static public int staticInt45589;
+    static public int staticInt45590;
+    static public int staticInt45591;
+    static public int staticInt45592;
+    static public int staticInt45593;
+    static public int staticInt45594;
+    static public int staticInt45595;
+    static public int staticInt45596;
+    static public int staticInt45597;
+    static public int staticInt45598;
+    static public int staticInt45599;
+    static public int staticInt45600;
+    static public int staticInt45601;
+    static public int staticInt45602;
+    static public int staticInt45603;
+    static public int staticInt45604;
+    static public int staticInt45605;
+    static public int staticInt45606;
+    static public int staticInt45607;
+    static public int staticInt45608;
+    static public int staticInt45609;
+    static public int staticInt45610;
+    static public int staticInt45611;
+    static public int staticInt45612;
+    static public int staticInt45613;
+    static public int staticInt45614;
+    static public int staticInt45615;
+    static public int staticInt45616;
+    static public int staticInt45617;
+    static public int staticInt45618;
+    static public int staticInt45619;
+    static public int staticInt45620;
+    static public int staticInt45621;
+    static public int staticInt45622;
+    static public int staticInt45623;
+    static public int staticInt45624;
+    static public int staticInt45625;
+    static public int staticInt45626;
+    static public int staticInt45627;
+    static public int staticInt45628;
+    static public int staticInt45629;
+    static public int staticInt45630;
+    static public int staticInt45631;
+    static public int staticInt45632;
+    static public int staticInt45633;
+    static public int staticInt45634;
+    static public int staticInt45635;
+    static public int staticInt45636;
+    static public int staticInt45637;
+    static public int staticInt45638;
+    static public int staticInt45639;
+    static public int staticInt45640;
+    static public int staticInt45641;
+    static public int staticInt45642;
+    static public int staticInt45643;
+    static public int staticInt45644;
+    static public int staticInt45645;
+    static public int staticInt45646;
+    static public int staticInt45647;
+    static public int staticInt45648;
+    static public int staticInt45649;
+    static public int staticInt45650;
+    static public int staticInt45651;
+    static public int staticInt45652;
+    static public int staticInt45653;
+    static public int staticInt45654;
+    static public int staticInt45655;
+    static public int staticInt45656;
+    static public int staticInt45657;
+    static public int staticInt45658;
+    static public int staticInt45659;
+    static public int staticInt45660;
+    static public int staticInt45661;
+    static public int staticInt45662;
+    static public int staticInt45663;
+    static public int staticInt45664;
+    static public int staticInt45665;
+    static public int staticInt45666;
+    static public int staticInt45667;
+    static public int staticInt45668;
+    static public int staticInt45669;
+    static public int staticInt45670;
+    static public int staticInt45671;
+    static public int staticInt45672;
+    static public int staticInt45673;
+    static public int staticInt45674;
+    static public int staticInt45675;
+    static public int staticInt45676;
+    static public int staticInt45677;
+    static public int staticInt45678;
+    static public int staticInt45679;
+    static public int staticInt45680;
+    static public int staticInt45681;
+    static public int staticInt45682;
+    static public int staticInt45683;
+    static public int staticInt45684;
+    static public int staticInt45685;
+    static public int staticInt45686;
+    static public int staticInt45687;
+    static public int staticInt45688;
+    static public int staticInt45689;
+    static public int staticInt45690;
+    static public int staticInt45691;
+    static public int staticInt45692;
+    static public int staticInt45693;
+    static public int staticInt45694;
+    static public int staticInt45695;
+    static public int staticInt45696;
+    static public int staticInt45697;
+    static public int staticInt45698;
+    static public int staticInt45699;
+    static public int staticInt45700;
+    static public int staticInt45701;
+    static public int staticInt45702;
+    static public int staticInt45703;
+    static public int staticInt45704;
+    static public int staticInt45705;
+    static public int staticInt45706;
+    static public int staticInt45707;
+    static public int staticInt45708;
+    static public int staticInt45709;
+    static public int staticInt45710;
+    static public int staticInt45711;
+    static public int staticInt45712;
+    static public int staticInt45713;
+    static public int staticInt45714;
+    static public int staticInt45715;
+    static public int staticInt45716;
+    static public int staticInt45717;
+    static public int staticInt45718;
+    static public int staticInt45719;
+    static public int staticInt45720;
+    static public int staticInt45721;
+    static public int staticInt45722;
+    static public int staticInt45723;
+    static public int staticInt45724;
+    static public int staticInt45725;
+    static public int staticInt45726;
+    static public int staticInt45727;
+    static public int staticInt45728;
+    static public int staticInt45729;
+    static public int staticInt45730;
+    static public int staticInt45731;
+    static public int staticInt45732;
+    static public int staticInt45733;
+    static public int staticInt45734;
+    static public int staticInt45735;
+    static public int staticInt45736;
+    static public int staticInt45737;
+    static public int staticInt45738;
+    static public int staticInt45739;
+    static public int staticInt45740;
+    static public int staticInt45741;
+    static public int staticInt45742;
+    static public int staticInt45743;
+    static public int staticInt45744;
+    static public int staticInt45745;
+    static public int staticInt45746;
+    static public int staticInt45747;
+    static public int staticInt45748;
+    static public int staticInt45749;
+    static public int staticInt45750;
+    static public int staticInt45751;
+    static public int staticInt45752;
+    static public int staticInt45753;
+    static public int staticInt45754;
+    static public int staticInt45755;
+    static public int staticInt45756;
+    static public int staticInt45757;
+    static public int staticInt45758;
+    static public int staticInt45759;
+    static public int staticInt45760;
+    static public int staticInt45761;
+    static public int staticInt45762;
+    static public int staticInt45763;
+    static public int staticInt45764;
+    static public int staticInt45765;
+    static public int staticInt45766;
+    static public int staticInt45767;
+    static public int staticInt45768;
+    static public int staticInt45769;
+    static public int staticInt45770;
+    static public int staticInt45771;
+    static public int staticInt45772;
+    static public int staticInt45773;
+    static public int staticInt45774;
+    static public int staticInt45775;
+    static public int staticInt45776;
+    static public int staticInt45777;
+    static public int staticInt45778;
+    static public int staticInt45779;
+    static public int staticInt45780;
+    static public int staticInt45781;
+    static public int staticInt45782;
+    static public int staticInt45783;
+    static public int staticInt45784;
+    static public int staticInt45785;
+    static public int staticInt45786;
+    static public int staticInt45787;
+    static public int staticInt45788;
+    static public int staticInt45789;
+    static public int staticInt45790;
+    static public int staticInt45791;
+    static public int staticInt45792;
+    static public int staticInt45793;
+    static public int staticInt45794;
+    static public int staticInt45795;
+    static public int staticInt45796;
+    static public int staticInt45797;
+    static public int staticInt45798;
+    static public int staticInt45799;
+    static public int staticInt45800;
+    static public int staticInt45801;
+    static public int staticInt45802;
+    static public int staticInt45803;
+    static public int staticInt45804;
+    static public int staticInt45805;
+    static public int staticInt45806;
+    static public int staticInt45807;
+    static public int staticInt45808;
+    static public int staticInt45809;
+    static public int staticInt45810;
+    static public int staticInt45811;
+    static public int staticInt45812;
+    static public int staticInt45813;
+    static public int staticInt45814;
+    static public int staticInt45815;
+    static public int staticInt45816;
+    static public int staticInt45817;
+    static public int staticInt45818;
+    static public int staticInt45819;
+    static public int staticInt45820;
+    static public int staticInt45821;
+    static public int staticInt45822;
+    static public int staticInt45823;
+    static public int staticInt45824;
+    static public int staticInt45825;
+    static public int staticInt45826;
+    static public int staticInt45827;
+    static public int staticInt45828;
+    static public int staticInt45829;
+    static public int staticInt45830;
+    static public int staticInt45831;
+    static public int staticInt45832;
+    static public int staticInt45833;
+    static public int staticInt45834;
+    static public int staticInt45835;
+    static public int staticInt45836;
+    static public int staticInt45837;
+    static public int staticInt45838;
+    static public int staticInt45839;
+    static public int staticInt45840;
+    static public int staticInt45841;
+    static public int staticInt45842;
+    static public int staticInt45843;
+    static public int staticInt45844;
+    static public int staticInt45845;
+    static public int staticInt45846;
+    static public int staticInt45847;
+    static public int staticInt45848;
+    static public int staticInt45849;
+    static public int staticInt45850;
+    static public int staticInt45851;
+    static public int staticInt45852;
+    static public int staticInt45853;
+    static public int staticInt45854;
+    static public int staticInt45855;
+    static public int staticInt45856;
+    static public int staticInt45857;
+    static public int staticInt45858;
+    static public int staticInt45859;
+    static public int staticInt45860;
+    static public int staticInt45861;
+    static public int staticInt45862;
+    static public int staticInt45863;
+    static public int staticInt45864;
+    static public int staticInt45865;
+    static public int staticInt45866;
+    static public int staticInt45867;
+    static public int staticInt45868;
+    static public int staticInt45869;
+    static public int staticInt45870;
+    static public int staticInt45871;
+    static public int staticInt45872;
+    static public int staticInt45873;
+    static public int staticInt45874;
+    static public int staticInt45875;
+    static public int staticInt45876;
+    static public int staticInt45877;
+    static public int staticInt45878;
+    static public int staticInt45879;
+    static public int staticInt45880;
+    static public int staticInt45881;
+    static public int staticInt45882;
+    static public int staticInt45883;
+    static public int staticInt45884;
+    static public int staticInt45885;
+    static public int staticInt45886;
+    static public int staticInt45887;
+    static public int staticInt45888;
+    static public int staticInt45889;
+    static public int staticInt45890;
+    static public int staticInt45891;
+    static public int staticInt45892;
+    static public int staticInt45893;
+    static public int staticInt45894;
+    static public int staticInt45895;
+    static public int staticInt45896;
+    static public int staticInt45897;
+    static public int staticInt45898;
+    static public int staticInt45899;
+    static public int staticInt45900;
+    static public int staticInt45901;
+    static public int staticInt45902;
+    static public int staticInt45903;
+    static public int staticInt45904;
+    static public int staticInt45905;
+    static public int staticInt45906;
+    static public int staticInt45907;
+    static public int staticInt45908;
+    static public int staticInt45909;
+    static public int staticInt45910;
+    static public int staticInt45911;
+    static public int staticInt45912;
+    static public int staticInt45913;
+    static public int staticInt45914;
+    static public int staticInt45915;
+    static public int staticInt45916;
+    static public int staticInt45917;
+    static public int staticInt45918;
+    static public int staticInt45919;
+    static public int staticInt45920;
+    static public int staticInt45921;
+    static public int staticInt45922;
+    static public int staticInt45923;
+    static public int staticInt45924;
+    static public int staticInt45925;
+    static public int staticInt45926;
+    static public int staticInt45927;
+    static public int staticInt45928;
+    static public int staticInt45929;
+    static public int staticInt45930;
+    static public int staticInt45931;
+    static public int staticInt45932;
+    static public int staticInt45933;
+    static public int staticInt45934;
+    static public int staticInt45935;
+    static public int staticInt45936;
+    static public int staticInt45937;
+    static public int staticInt45938;
+    static public int staticInt45939;
+    static public int staticInt45940;
+    static public int staticInt45941;
+    static public int staticInt45942;
+    static public int staticInt45943;
+    static public int staticInt45944;
+    static public int staticInt45945;
+    static public int staticInt45946;
+    static public int staticInt45947;
+    static public int staticInt45948;
+    static public int staticInt45949;
+    static public int staticInt45950;
+    static public int staticInt45951;
+    static public int staticInt45952;
+    static public int staticInt45953;
+    static public int staticInt45954;
+    static public int staticInt45955;
+    static public int staticInt45956;
+    static public int staticInt45957;
+    static public int staticInt45958;
+    static public int staticInt45959;
+    static public int staticInt45960;
+    static public int staticInt45961;
+    static public int staticInt45962;
+    static public int staticInt45963;
+    static public int staticInt45964;
+    static public int staticInt45965;
+    static public int staticInt45966;
+    static public int staticInt45967;
+    static public int staticInt45968;
+    static public int staticInt45969;
+    static public int staticInt45970;
+    static public int staticInt45971;
+    static public int staticInt45972;
+    static public int staticInt45973;
+    static public int staticInt45974;
+    static public int staticInt45975;
+    static public int staticInt45976;
+    static public int staticInt45977;
+    static public int staticInt45978;
+    static public int staticInt45979;
+    static public int staticInt45980;
+    static public int staticInt45981;
+    static public int staticInt45982;
+    static public int staticInt45983;
+    static public int staticInt45984;
+    static public int staticInt45985;
+    static public int staticInt45986;
+    static public int staticInt45987;
+    static public int staticInt45988;
+    static public int staticInt45989;
+    static public int staticInt45990;
+    static public int staticInt45991;
+    static public int staticInt45992;
+    static public int staticInt45993;
+    static public int staticInt45994;
+    static public int staticInt45995;
+    static public int staticInt45996;
+    static public int staticInt45997;
+    static public int staticInt45998;
+    static public int staticInt45999;
+    static public int staticInt46000;
+    static public int staticInt46001;
+    static public int staticInt46002;
+    static public int staticInt46003;
+    static public int staticInt46004;
+    static public int staticInt46005;
+    static public int staticInt46006;
+    static public int staticInt46007;
+    static public int staticInt46008;
+    static public int staticInt46009;
+    static public int staticInt46010;
+    static public int staticInt46011;
+    static public int staticInt46012;
+    static public int staticInt46013;
+    static public int staticInt46014;
+    static public int staticInt46015;
+    static public int staticInt46016;
+    static public int staticInt46017;
+    static public int staticInt46018;
+    static public int staticInt46019;
+    static public int staticInt46020;
+    static public int staticInt46021;
+    static public int staticInt46022;
+    static public int staticInt46023;
+    static public int staticInt46024;
+    static public int staticInt46025;
+    static public int staticInt46026;
+    static public int staticInt46027;
+    static public int staticInt46028;
+    static public int staticInt46029;
+    static public int staticInt46030;
+    static public int staticInt46031;
+    static public int staticInt46032;
+    static public int staticInt46033;
+    static public int staticInt46034;
+    static public int staticInt46035;
+    static public int staticInt46036;
+    static public int staticInt46037;
+    static public int staticInt46038;
+    static public int staticInt46039;
+    static public int staticInt46040;
+    static public int staticInt46041;
+    static public int staticInt46042;
+    static public int staticInt46043;
+    static public int staticInt46044;
+    static public int staticInt46045;
+    static public int staticInt46046;
+    static public int staticInt46047;
+    static public int staticInt46048;
+    static public int staticInt46049;
+    static public int staticInt46050;
+    static public int staticInt46051;
+    static public int staticInt46052;
+    static public int staticInt46053;
+    static public int staticInt46054;
+    static public int staticInt46055;
+    static public int staticInt46056;
+    static public int staticInt46057;
+    static public int staticInt46058;
+    static public int staticInt46059;
+    static public int staticInt46060;
+    static public int staticInt46061;
+    static public int staticInt46062;
+    static public int staticInt46063;
+    static public int staticInt46064;
+    static public int staticInt46065;
+    static public int staticInt46066;
+    static public int staticInt46067;
+    static public int staticInt46068;
+    static public int staticInt46069;
+    static public int staticInt46070;
+    static public int staticInt46071;
+    static public int staticInt46072;
+    static public int staticInt46073;
+    static public int staticInt46074;
+    static public int staticInt46075;
+    static public int staticInt46076;
+    static public int staticInt46077;
+    static public int staticInt46078;
+    static public int staticInt46079;
+    static public int staticInt46080;
+    static public int staticInt46081;
+    static public int staticInt46082;
+    static public int staticInt46083;
+    static public int staticInt46084;
+    static public int staticInt46085;
+    static public int staticInt46086;
+    static public int staticInt46087;
+    static public int staticInt46088;
+    static public int staticInt46089;
+    static public int staticInt46090;
+    static public int staticInt46091;
+    static public int staticInt46092;
+    static public int staticInt46093;
+    static public int staticInt46094;
+    static public int staticInt46095;
+    static public int staticInt46096;
+    static public int staticInt46097;
+    static public int staticInt46098;
+    static public int staticInt46099;
+    static public int staticInt46100;
+    static public int staticInt46101;
+    static public int staticInt46102;
+    static public int staticInt46103;
+    static public int staticInt46104;
+    static public int staticInt46105;
+    static public int staticInt46106;
+    static public int staticInt46107;
+    static public int staticInt46108;
+    static public int staticInt46109;
+    static public int staticInt46110;
+    static public int staticInt46111;
+    static public int staticInt46112;
+    static public int staticInt46113;
+    static public int staticInt46114;
+    static public int staticInt46115;
+    static public int staticInt46116;
+    static public int staticInt46117;
+    static public int staticInt46118;
+    static public int staticInt46119;
+    static public int staticInt46120;
+    static public int staticInt46121;
+    static public int staticInt46122;
+    static public int staticInt46123;
+    static public int staticInt46124;
+    static public int staticInt46125;
+    static public int staticInt46126;
+    static public int staticInt46127;
+    static public int staticInt46128;
+    static public int staticInt46129;
+    static public int staticInt46130;
+    static public int staticInt46131;
+    static public int staticInt46132;
+    static public int staticInt46133;
+    static public int staticInt46134;
+    static public int staticInt46135;
+    static public int staticInt46136;
+    static public int staticInt46137;
+    static public int staticInt46138;
+    static public int staticInt46139;
+    static public int staticInt46140;
+    static public int staticInt46141;
+    static public int staticInt46142;
+    static public int staticInt46143;
+    static public int staticInt46144;
+    static public int staticInt46145;
+    static public int staticInt46146;
+    static public int staticInt46147;
+    static public int staticInt46148;
+    static public int staticInt46149;
+    static public int staticInt46150;
+    static public int staticInt46151;
+    static public int staticInt46152;
+    static public int staticInt46153;
+    static public int staticInt46154;
+    static public int staticInt46155;
+    static public int staticInt46156;
+    static public int staticInt46157;
+    static public int staticInt46158;
+    static public int staticInt46159;
+    static public int staticInt46160;
+    static public int staticInt46161;
+    static public int staticInt46162;
+    static public int staticInt46163;
+    static public int staticInt46164;
+    static public int staticInt46165;
+    static public int staticInt46166;
+    static public int staticInt46167;
+    static public int staticInt46168;
+    static public int staticInt46169;
+    static public int staticInt46170;
+    static public int staticInt46171;
+    static public int staticInt46172;
+    static public int staticInt46173;
+    static public int staticInt46174;
+    static public int staticInt46175;
+    static public int staticInt46176;
+    static public int staticInt46177;
+    static public int staticInt46178;
+    static public int staticInt46179;
+    static public int staticInt46180;
+    static public int staticInt46181;
+    static public int staticInt46182;
+    static public int staticInt46183;
+    static public int staticInt46184;
+    static public int staticInt46185;
+    static public int staticInt46186;
+    static public int staticInt46187;
+    static public int staticInt46188;
+    static public int staticInt46189;
+    static public int staticInt46190;
+    static public int staticInt46191;
+    static public int staticInt46192;
+    static public int staticInt46193;
+    static public int staticInt46194;
+    static public int staticInt46195;
+    static public int staticInt46196;
+    static public int staticInt46197;
+    static public int staticInt46198;
+    static public int staticInt46199;
+    static public int staticInt46200;
+    static public int staticInt46201;
+    static public int staticInt46202;
+    static public int staticInt46203;
+    static public int staticInt46204;
+    static public int staticInt46205;
+    static public int staticInt46206;
+    static public int staticInt46207;
+    static public int staticInt46208;
+    static public int staticInt46209;
+    static public int staticInt46210;
+    static public int staticInt46211;
+    static public int staticInt46212;
+    static public int staticInt46213;
+    static public int staticInt46214;
+    static public int staticInt46215;
+    static public int staticInt46216;
+    static public int staticInt46217;
+    static public int staticInt46218;
+    static public int staticInt46219;
+    static public int staticInt46220;
+    static public int staticInt46221;
+    static public int staticInt46222;
+    static public int staticInt46223;
+    static public int staticInt46224;
+    static public int staticInt46225;
+    static public int staticInt46226;
+    static public int staticInt46227;
+    static public int staticInt46228;
+    static public int staticInt46229;
+    static public int staticInt46230;
+    static public int staticInt46231;
+    static public int staticInt46232;
+    static public int staticInt46233;
+    static public int staticInt46234;
+    static public int staticInt46235;
+    static public int staticInt46236;
+    static public int staticInt46237;
+    static public int staticInt46238;
+    static public int staticInt46239;
+    static public int staticInt46240;
+    static public int staticInt46241;
+    static public int staticInt46242;
+    static public int staticInt46243;
+    static public int staticInt46244;
+    static public int staticInt46245;
+    static public int staticInt46246;
+    static public int staticInt46247;
+    static public int staticInt46248;
+    static public int staticInt46249;
+    static public int staticInt46250;
+    static public int staticInt46251;
+    static public int staticInt46252;
+    static public int staticInt46253;
+    static public int staticInt46254;
+    static public int staticInt46255;
+    static public int staticInt46256;
+    static public int staticInt46257;
+    static public int staticInt46258;
+    static public int staticInt46259;
+    static public int staticInt46260;
+    static public int staticInt46261;
+    static public int staticInt46262;
+    static public int staticInt46263;
+    static public int staticInt46264;
+    static public int staticInt46265;
+    static public int staticInt46266;
+    static public int staticInt46267;
+    static public int staticInt46268;
+    static public int staticInt46269;
+    static public int staticInt46270;
+    static public int staticInt46271;
+    static public int staticInt46272;
+    static public int staticInt46273;
+    static public int staticInt46274;
+    static public int staticInt46275;
+    static public int staticInt46276;
+    static public int staticInt46277;
+    static public int staticInt46278;
+    static public int staticInt46279;
+    static public int staticInt46280;
+    static public int staticInt46281;
+    static public int staticInt46282;
+    static public int staticInt46283;
+    static public int staticInt46284;
+    static public int staticInt46285;
+    static public int staticInt46286;
+    static public int staticInt46287;
+    static public int staticInt46288;
+    static public int staticInt46289;
+    static public int staticInt46290;
+    static public int staticInt46291;
+    static public int staticInt46292;
+    static public int staticInt46293;
+    static public int staticInt46294;
+    static public int staticInt46295;
+    static public int staticInt46296;
+    static public int staticInt46297;
+    static public int staticInt46298;
+    static public int staticInt46299;
+    static public int staticInt46300;
+    static public int staticInt46301;
+    static public int staticInt46302;
+    static public int staticInt46303;
+    static public int staticInt46304;
+    static public int staticInt46305;
+    static public int staticInt46306;
+    static public int staticInt46307;
+    static public int staticInt46308;
+    static public int staticInt46309;
+    static public int staticInt46310;
+    static public int staticInt46311;
+    static public int staticInt46312;
+    static public int staticInt46313;
+    static public int staticInt46314;
+    static public int staticInt46315;
+    static public int staticInt46316;
+    static public int staticInt46317;
+    static public int staticInt46318;
+    static public int staticInt46319;
+    static public int staticInt46320;
+    static public int staticInt46321;
+    static public int staticInt46322;
+    static public int staticInt46323;
+    static public int staticInt46324;
+    static public int staticInt46325;
+    static public int staticInt46326;
+    static public int staticInt46327;
+    static public int staticInt46328;
+    static public int staticInt46329;
+    static public int staticInt46330;
+    static public int staticInt46331;
+    static public int staticInt46332;
+    static public int staticInt46333;
+    static public int staticInt46334;
+    static public int staticInt46335;
+    static public int staticInt46336;
+    static public int staticInt46337;
+    static public int staticInt46338;
+    static public int staticInt46339;
+    static public int staticInt46340;
+    static public int staticInt46341;
+    static public int staticInt46342;
+    static public int staticInt46343;
+    static public int staticInt46344;
+    static public int staticInt46345;
+    static public int staticInt46346;
+    static public int staticInt46347;
+    static public int staticInt46348;
+    static public int staticInt46349;
+    static public int staticInt46350;
+    static public int staticInt46351;
+    static public int staticInt46352;
+    static public int staticInt46353;
+    static public int staticInt46354;
+    static public int staticInt46355;
+    static public int staticInt46356;
+    static public int staticInt46357;
+    static public int staticInt46358;
+    static public int staticInt46359;
+    static public int staticInt46360;
+    static public int staticInt46361;
+    static public int staticInt46362;
+    static public int staticInt46363;
+    static public int staticInt46364;
+    static public int staticInt46365;
+    static public int staticInt46366;
+    static public int staticInt46367;
+    static public int staticInt46368;
+    static public int staticInt46369;
+    static public int staticInt46370;
+    static public int staticInt46371;
+    static public int staticInt46372;
+    static public int staticInt46373;
+    static public int staticInt46374;
+    static public int staticInt46375;
+    static public int staticInt46376;
+    static public int staticInt46377;
+    static public int staticInt46378;
+    static public int staticInt46379;
+    static public int staticInt46380;
+    static public int staticInt46381;
+    static public int staticInt46382;
+    static public int staticInt46383;
+    static public int staticInt46384;
+    static public int staticInt46385;
+    static public int staticInt46386;
+    static public int staticInt46387;
+    static public int staticInt46388;
+    static public int staticInt46389;
+    static public int staticInt46390;
+    static public int staticInt46391;
+    static public int staticInt46392;
+    static public int staticInt46393;
+    static public int staticInt46394;
+    static public int staticInt46395;
+    static public int staticInt46396;
+    static public int staticInt46397;
+    static public int staticInt46398;
+    static public int staticInt46399;
+    static public int staticInt46400;
+    static public int staticInt46401;
+    static public int staticInt46402;
+    static public int staticInt46403;
+    static public int staticInt46404;
+    static public int staticInt46405;
+    static public int staticInt46406;
+    static public int staticInt46407;
+    static public int staticInt46408;
+    static public int staticInt46409;
+    static public int staticInt46410;
+    static public int staticInt46411;
+    static public int staticInt46412;
+    static public int staticInt46413;
+    static public int staticInt46414;
+    static public int staticInt46415;
+    static public int staticInt46416;
+    static public int staticInt46417;
+    static public int staticInt46418;
+    static public int staticInt46419;
+    static public int staticInt46420;
+    static public int staticInt46421;
+    static public int staticInt46422;
+    static public int staticInt46423;
+    static public int staticInt46424;
+    static public int staticInt46425;
+    static public int staticInt46426;
+    static public int staticInt46427;
+    static public int staticInt46428;
+    static public int staticInt46429;
+    static public int staticInt46430;
+    static public int staticInt46431;
+    static public int staticInt46432;
+    static public int staticInt46433;
+    static public int staticInt46434;
+    static public int staticInt46435;
+    static public int staticInt46436;
+    static public int staticInt46437;
+    static public int staticInt46438;
+    static public int staticInt46439;
+    static public int staticInt46440;
+    static public int staticInt46441;
+    static public int staticInt46442;
+    static public int staticInt46443;
+    static public int staticInt46444;
+    static public int staticInt46445;
+    static public int staticInt46446;
+    static public int staticInt46447;
+    static public int staticInt46448;
+    static public int staticInt46449;
+    static public int staticInt46450;
+    static public int staticInt46451;
+    static public int staticInt46452;
+    static public int staticInt46453;
+    static public int staticInt46454;
+    static public int staticInt46455;
+    static public int staticInt46456;
+    static public int staticInt46457;
+    static public int staticInt46458;
+    static public int staticInt46459;
+    static public int staticInt46460;
+    static public int staticInt46461;
+    static public int staticInt46462;
+    static public int staticInt46463;
+    static public int staticInt46464;
+    static public int staticInt46465;
+    static public int staticInt46466;
+    static public int staticInt46467;
+    static public int staticInt46468;
+    static public int staticInt46469;
+    static public int staticInt46470;
+    static public int staticInt46471;
+    static public int staticInt46472;
+    static public int staticInt46473;
+    static public int staticInt46474;
+    static public int staticInt46475;
+    static public int staticInt46476;
+    static public int staticInt46477;
+    static public int staticInt46478;
+    static public int staticInt46479;
+    static public int staticInt46480;
+    static public int staticInt46481;
+    static public int staticInt46482;
+    static public int staticInt46483;
+    static public int staticInt46484;
+    static public int staticInt46485;
+    static public int staticInt46486;
+    static public int staticInt46487;
+    static public int staticInt46488;
+    static public int staticInt46489;
+    static public int staticInt46490;
+    static public int staticInt46491;
+    static public int staticInt46492;
+    static public int staticInt46493;
+    static public int staticInt46494;
+    static public int staticInt46495;
+    static public int staticInt46496;
+    static public int staticInt46497;
+    static public int staticInt46498;
+    static public int staticInt46499;
+    static public int staticInt46500;
+    static public int staticInt46501;
+    static public int staticInt46502;
+    static public int staticInt46503;
+    static public int staticInt46504;
+    static public int staticInt46505;
+    static public int staticInt46506;
+    static public int staticInt46507;
+    static public int staticInt46508;
+    static public int staticInt46509;
+    static public int staticInt46510;
+    static public int staticInt46511;
+    static public int staticInt46512;
+    static public int staticInt46513;
+    static public int staticInt46514;
+    static public int staticInt46515;
+    static public int staticInt46516;
+    static public int staticInt46517;
+    static public int staticInt46518;
+    static public int staticInt46519;
+    static public int staticInt46520;
+    static public int staticInt46521;
+    static public int staticInt46522;
+    static public int staticInt46523;
+    static public int staticInt46524;
+    static public int staticInt46525;
+    static public int staticInt46526;
+    static public int staticInt46527;
+    static public int staticInt46528;
+    static public int staticInt46529;
+    static public int staticInt46530;
+    static public int staticInt46531;
+    static public int staticInt46532;
+    static public int staticInt46533;
+    static public int staticInt46534;
+    static public int staticInt46535;
+    static public int staticInt46536;
+    static public int staticInt46537;
+    static public int staticInt46538;
+    static public int staticInt46539;
+    static public int staticInt46540;
+    static public int staticInt46541;
+    static public int staticInt46542;
+    static public int staticInt46543;
+    static public int staticInt46544;
+    static public int staticInt46545;
+    static public int staticInt46546;
+    static public int staticInt46547;
+    static public int staticInt46548;
+    static public int staticInt46549;
+    static public int staticInt46550;
+    static public int staticInt46551;
+    static public int staticInt46552;
+    static public int staticInt46553;
+    static public int staticInt46554;
+    static public int staticInt46555;
+    static public int staticInt46556;
+    static public int staticInt46557;
+    static public int staticInt46558;
+    static public int staticInt46559;
+    static public int staticInt46560;
+    static public int staticInt46561;
+    static public int staticInt46562;
+    static public int staticInt46563;
+    static public int staticInt46564;
+    static public int staticInt46565;
+    static public int staticInt46566;
+    static public int staticInt46567;
+    static public int staticInt46568;
+    static public int staticInt46569;
+    static public int staticInt46570;
+    static public int staticInt46571;
+    static public int staticInt46572;
+    static public int staticInt46573;
+    static public int staticInt46574;
+    static public int staticInt46575;
+    static public int staticInt46576;
+    static public int staticInt46577;
+    static public int staticInt46578;
+    static public int staticInt46579;
+    static public int staticInt46580;
+    static public int staticInt46581;
+    static public int staticInt46582;
+    static public int staticInt46583;
+    static public int staticInt46584;
+    static public int staticInt46585;
+    static public int staticInt46586;
+    static public int staticInt46587;
+    static public int staticInt46588;
+    static public int staticInt46589;
+    static public int staticInt46590;
+    static public int staticInt46591;
+    static public int staticInt46592;
+    static public int staticInt46593;
+    static public int staticInt46594;
+    static public int staticInt46595;
+    static public int staticInt46596;
+    static public int staticInt46597;
+    static public int staticInt46598;
+    static public int staticInt46599;
+    static public int staticInt46600;
+    static public int staticInt46601;
+    static public int staticInt46602;
+    static public int staticInt46603;
+    static public int staticInt46604;
+    static public int staticInt46605;
+    static public int staticInt46606;
+    static public int staticInt46607;
+    static public int staticInt46608;
+    static public int staticInt46609;
+    static public int staticInt46610;
+    static public int staticInt46611;
+    static public int staticInt46612;
+    static public int staticInt46613;
+    static public int staticInt46614;
+    static public int staticInt46615;
+    static public int staticInt46616;
+    static public int staticInt46617;
+    static public int staticInt46618;
+    static public int staticInt46619;
+    static public int staticInt46620;
+    static public int staticInt46621;
+    static public int staticInt46622;
+    static public int staticInt46623;
+    static public int staticInt46624;
+    static public int staticInt46625;
+    static public int staticInt46626;
+    static public int staticInt46627;
+    static public int staticInt46628;
+    static public int staticInt46629;
+    static public int staticInt46630;
+    static public int staticInt46631;
+    static public int staticInt46632;
+    static public int staticInt46633;
+    static public int staticInt46634;
+    static public int staticInt46635;
+    static public int staticInt46636;
+    static public int staticInt46637;
+    static public int staticInt46638;
+    static public int staticInt46639;
+    static public int staticInt46640;
+    static public int staticInt46641;
+    static public int staticInt46642;
+    static public int staticInt46643;
+    static public int staticInt46644;
+    static public int staticInt46645;
+    static public int staticInt46646;
+    static public int staticInt46647;
+    static public int staticInt46648;
+    static public int staticInt46649;
+    static public int staticInt46650;
+    static public int staticInt46651;
+    static public int staticInt46652;
+    static public int staticInt46653;
+    static public int staticInt46654;
+    static public int staticInt46655;
+    static public int staticInt46656;
+    static public int staticInt46657;
+    static public int staticInt46658;
+    static public int staticInt46659;
+    static public int staticInt46660;
+    static public int staticInt46661;
+    static public int staticInt46662;
+    static public int staticInt46663;
+    static public int staticInt46664;
+    static public int staticInt46665;
+    static public int staticInt46666;
+    static public int staticInt46667;
+    static public int staticInt46668;
+    static public int staticInt46669;
+    static public int staticInt46670;
+    static public int staticInt46671;
+    static public int staticInt46672;
+    static public int staticInt46673;
+    static public int staticInt46674;
+    static public int staticInt46675;
+    static public int staticInt46676;
+    static public int staticInt46677;
+    static public int staticInt46678;
+    static public int staticInt46679;
+    static public int staticInt46680;
+    static public int staticInt46681;
+    static public int staticInt46682;
+    static public int staticInt46683;
+    static public int staticInt46684;
+    static public int staticInt46685;
+    static public int staticInt46686;
+    static public int staticInt46687;
+    static public int staticInt46688;
+    static public int staticInt46689;
+    static public int staticInt46690;
+    static public int staticInt46691;
+    static public int staticInt46692;
+    static public int staticInt46693;
+    static public int staticInt46694;
+    static public int staticInt46695;
+    static public int staticInt46696;
+    static public int staticInt46697;
+    static public int staticInt46698;
+    static public int staticInt46699;
+    static public int staticInt46700;
+    static public int staticInt46701;
+    static public int staticInt46702;
+    static public int staticInt46703;
+    static public int staticInt46704;
+    static public int staticInt46705;
+    static public int staticInt46706;
+    static public int staticInt46707;
+    static public int staticInt46708;
+    static public int staticInt46709;
+    static public int staticInt46710;
+    static public int staticInt46711;
+    static public int staticInt46712;
+    static public int staticInt46713;
+    static public int staticInt46714;
+    static public int staticInt46715;
+    static public int staticInt46716;
+    static public int staticInt46717;
+    static public int staticInt46718;
+    static public int staticInt46719;
+    static public int staticInt46720;
+    static public int staticInt46721;
+    static public int staticInt46722;
+    static public int staticInt46723;
+    static public int staticInt46724;
+    static public int staticInt46725;
+    static public int staticInt46726;
+    static public int staticInt46727;
+    static public int staticInt46728;
+    static public int staticInt46729;
+    static public int staticInt46730;
+    static public int staticInt46731;
+    static public int staticInt46732;
+    static public int staticInt46733;
+    static public int staticInt46734;
+    static public int staticInt46735;
+    static public int staticInt46736;
+    static public int staticInt46737;
+    static public int staticInt46738;
+    static public int staticInt46739;
+    static public int staticInt46740;
+    static public int staticInt46741;
+    static public int staticInt46742;
+    static public int staticInt46743;
+    static public int staticInt46744;
+    static public int staticInt46745;
+    static public int staticInt46746;
+    static public int staticInt46747;
+    static public int staticInt46748;
+    static public int staticInt46749;
+    static public int staticInt46750;
+    static public int staticInt46751;
+    static public int staticInt46752;
+    static public int staticInt46753;
+    static public int staticInt46754;
+    static public int staticInt46755;
+    static public int staticInt46756;
+    static public int staticInt46757;
+    static public int staticInt46758;
+    static public int staticInt46759;
+    static public int staticInt46760;
+    static public int staticInt46761;
+    static public int staticInt46762;
+    static public int staticInt46763;
+    static public int staticInt46764;
+    static public int staticInt46765;
+    static public int staticInt46766;
+    static public int staticInt46767;
+    static public int staticInt46768;
+    static public int staticInt46769;
+    static public int staticInt46770;
+    static public int staticInt46771;
+    static public int staticInt46772;
+    static public int staticInt46773;
+    static public int staticInt46774;
+    static public int staticInt46775;
+    static public int staticInt46776;
+    static public int staticInt46777;
+    static public int staticInt46778;
+    static public int staticInt46779;
+    static public int staticInt46780;
+    static public int staticInt46781;
+    static public int staticInt46782;
+    static public int staticInt46783;
+    static public int staticInt46784;
+    static public int staticInt46785;
+    static public int staticInt46786;
+    static public int staticInt46787;
+    static public int staticInt46788;
+    static public int staticInt46789;
+    static public int staticInt46790;
+    static public int staticInt46791;
+    static public int staticInt46792;
+    static public int staticInt46793;
+    static public int staticInt46794;
+    static public int staticInt46795;
+    static public int staticInt46796;
+    static public int staticInt46797;
+    static public int staticInt46798;
+    static public int staticInt46799;
+    static public int staticInt46800;
+    static public int staticInt46801;
+    static public int staticInt46802;
+    static public int staticInt46803;
+    static public int staticInt46804;
+    static public int staticInt46805;
+    static public int staticInt46806;
+    static public int staticInt46807;
+    static public int staticInt46808;
+    static public int staticInt46809;
+    static public int staticInt46810;
+    static public int staticInt46811;
+    static public int staticInt46812;
+    static public int staticInt46813;
+    static public int staticInt46814;
+    static public int staticInt46815;
+    static public int staticInt46816;
+    static public int staticInt46817;
+    static public int staticInt46818;
+    static public int staticInt46819;
+    static public int staticInt46820;
+    static public int staticInt46821;
+    static public int staticInt46822;
+    static public int staticInt46823;
+    static public int staticInt46824;
+    static public int staticInt46825;
+    static public int staticInt46826;
+    static public int staticInt46827;
+    static public int staticInt46828;
+    static public int staticInt46829;
+    static public int staticInt46830;
+    static public int staticInt46831;
+    static public int staticInt46832;
+    static public int staticInt46833;
+    static public int staticInt46834;
+    static public int staticInt46835;
+    static public int staticInt46836;
+    static public int staticInt46837;
+    static public int staticInt46838;
+    static public int staticInt46839;
+    static public int staticInt46840;
+    static public int staticInt46841;
+    static public int staticInt46842;
+    static public int staticInt46843;
+    static public int staticInt46844;
+    static public int staticInt46845;
+    static public int staticInt46846;
+    static public int staticInt46847;
+    static public int staticInt46848;
+    static public int staticInt46849;
+    static public int staticInt46850;
+    static public int staticInt46851;
+    static public int staticInt46852;
+    static public int staticInt46853;
+    static public int staticInt46854;
+    static public int staticInt46855;
+    static public int staticInt46856;
+    static public int staticInt46857;
+    static public int staticInt46858;
+    static public int staticInt46859;
+    static public int staticInt46860;
+    static public int staticInt46861;
+    static public int staticInt46862;
+    static public int staticInt46863;
+    static public int staticInt46864;
+    static public int staticInt46865;
+    static public int staticInt46866;
+    static public int staticInt46867;
+    static public int staticInt46868;
+    static public int staticInt46869;
+    static public int staticInt46870;
+    static public int staticInt46871;
+    static public int staticInt46872;
+    static public int staticInt46873;
+    static public int staticInt46874;
+    static public int staticInt46875;
+    static public int staticInt46876;
+    static public int staticInt46877;
+    static public int staticInt46878;
+    static public int staticInt46879;
+    static public int staticInt46880;
+    static public int staticInt46881;
+    static public int staticInt46882;
+    static public int staticInt46883;
+    static public int staticInt46884;
+    static public int staticInt46885;
+    static public int staticInt46886;
+    static public int staticInt46887;
+    static public int staticInt46888;
+    static public int staticInt46889;
+    static public int staticInt46890;
+    static public int staticInt46891;
+    static public int staticInt46892;
+    static public int staticInt46893;
+    static public int staticInt46894;
+    static public int staticInt46895;
+    static public int staticInt46896;
+    static public int staticInt46897;
+    static public int staticInt46898;
+    static public int staticInt46899;
+    static public int staticInt46900;
+    static public int staticInt46901;
+    static public int staticInt46902;
+    static public int staticInt46903;
+    static public int staticInt46904;
+    static public int staticInt46905;
+    static public int staticInt46906;
+    static public int staticInt46907;
+    static public int staticInt46908;
+    static public int staticInt46909;
+    static public int staticInt46910;
+    static public int staticInt46911;
+    static public int staticInt46912;
+    static public int staticInt46913;
+    static public int staticInt46914;
+    static public int staticInt46915;
+    static public int staticInt46916;
+    static public int staticInt46917;
+    static public int staticInt46918;
+    static public int staticInt46919;
+    static public int staticInt46920;
+    static public int staticInt46921;
+    static public int staticInt46922;
+    static public int staticInt46923;
+    static public int staticInt46924;
+    static public int staticInt46925;
+    static public int staticInt46926;
+    static public int staticInt46927;
+    static public int staticInt46928;
+    static public int staticInt46929;
+    static public int staticInt46930;
+    static public int staticInt46931;
+    static public int staticInt46932;
+    static public int staticInt46933;
+    static public int staticInt46934;
+    static public int staticInt46935;
+    static public int staticInt46936;
+    static public int staticInt46937;
+    static public int staticInt46938;
+    static public int staticInt46939;
+    static public int staticInt46940;
+    static public int staticInt46941;
+    static public int staticInt46942;
+    static public int staticInt46943;
+    static public int staticInt46944;
+    static public int staticInt46945;
+    static public int staticInt46946;
+    static public int staticInt46947;
+    static public int staticInt46948;
+    static public int staticInt46949;
+    static public int staticInt46950;
+    static public int staticInt46951;
+    static public int staticInt46952;
+    static public int staticInt46953;
+    static public int staticInt46954;
+    static public int staticInt46955;
+    static public int staticInt46956;
+    static public int staticInt46957;
+    static public int staticInt46958;
+    static public int staticInt46959;
+    static public int staticInt46960;
+    static public int staticInt46961;
+    static public int staticInt46962;
+    static public int staticInt46963;
+    static public int staticInt46964;
+    static public int staticInt46965;
+    static public int staticInt46966;
+    static public int staticInt46967;
+    static public int staticInt46968;
+    static public int staticInt46969;
+    static public int staticInt46970;
+    static public int staticInt46971;
+    static public int staticInt46972;
+    static public int staticInt46973;
+    static public int staticInt46974;
+    static public int staticInt46975;
+    static public int staticInt46976;
+    static public int staticInt46977;
+    static public int staticInt46978;
+    static public int staticInt46979;
+    static public int staticInt46980;
+    static public int staticInt46981;
+    static public int staticInt46982;
+    static public int staticInt46983;
+    static public int staticInt46984;
+    static public int staticInt46985;
+    static public int staticInt46986;
+    static public int staticInt46987;
+    static public int staticInt46988;
+    static public int staticInt46989;
+    static public int staticInt46990;
+    static public int staticInt46991;
+    static public int staticInt46992;
+    static public int staticInt46993;
+    static public int staticInt46994;
+    static public int staticInt46995;
+    static public int staticInt46996;
+    static public int staticInt46997;
+    static public int staticInt46998;
+    static public int staticInt46999;
+    static public int staticInt47000;
+    static public int staticInt47001;
+    static public int staticInt47002;
+    static public int staticInt47003;
+    static public int staticInt47004;
+    static public int staticInt47005;
+    static public int staticInt47006;
+    static public int staticInt47007;
+    static public int staticInt47008;
+    static public int staticInt47009;
+    static public int staticInt47010;
+    static public int staticInt47011;
+    static public int staticInt47012;
+    static public int staticInt47013;
+    static public int staticInt47014;
+    static public int staticInt47015;
+    static public int staticInt47016;
+    static public int staticInt47017;
+    static public int staticInt47018;
+    static public int staticInt47019;
+    static public int staticInt47020;
+    static public int staticInt47021;
+    static public int staticInt47022;
+    static public int staticInt47023;
+    static public int staticInt47024;
+    static public int staticInt47025;
+    static public int staticInt47026;
+    static public int staticInt47027;
+    static public int staticInt47028;
+    static public int staticInt47029;
+    static public int staticInt47030;
+    static public int staticInt47031;
+    static public int staticInt47032;
+    static public int staticInt47033;
+    static public int staticInt47034;
+    static public int staticInt47035;
+    static public int staticInt47036;
+    static public int staticInt47037;
+    static public int staticInt47038;
+    static public int staticInt47039;
+    static public int staticInt47040;
+    static public int staticInt47041;
+    static public int staticInt47042;
+    static public int staticInt47043;
+    static public int staticInt47044;
+    static public int staticInt47045;
+    static public int staticInt47046;
+    static public int staticInt47047;
+    static public int staticInt47048;
+    static public int staticInt47049;
+    static public int staticInt47050;
+    static public int staticInt47051;
+    static public int staticInt47052;
+    static public int staticInt47053;
+    static public int staticInt47054;
+    static public int staticInt47055;
+    static public int staticInt47056;
+    static public int staticInt47057;
+    static public int staticInt47058;
+    static public int staticInt47059;
+    static public int staticInt47060;
+    static public int staticInt47061;
+    static public int staticInt47062;
+    static public int staticInt47063;
+    static public int staticInt47064;
+    static public int staticInt47065;
+    static public int staticInt47066;
+    static public int staticInt47067;
+    static public int staticInt47068;
+    static public int staticInt47069;
+    static public int staticInt47070;
+    static public int staticInt47071;
+    static public int staticInt47072;
+    static public int staticInt47073;
+    static public int staticInt47074;
+    static public int staticInt47075;
+    static public int staticInt47076;
+    static public int staticInt47077;
+    static public int staticInt47078;
+    static public int staticInt47079;
+    static public int staticInt47080;
+    static public int staticInt47081;
+    static public int staticInt47082;
+    static public int staticInt47083;
+    static public int staticInt47084;
+    static public int staticInt47085;
+    static public int staticInt47086;
+    static public int staticInt47087;
+    static public int staticInt47088;
+    static public int staticInt47089;
+    static public int staticInt47090;
+    static public int staticInt47091;
+    static public int staticInt47092;
+    static public int staticInt47093;
+    static public int staticInt47094;
+    static public int staticInt47095;
+    static public int staticInt47096;
+    static public int staticInt47097;
+    static public int staticInt47098;
+    static public int staticInt47099;
+    static public int staticInt47100;
+    static public int staticInt47101;
+    static public int staticInt47102;
+    static public int staticInt47103;
+    static public int staticInt47104;
+    static public int staticInt47105;
+    static public int staticInt47106;
+    static public int staticInt47107;
+    static public int staticInt47108;
+    static public int staticInt47109;
+    static public int staticInt47110;
+    static public int staticInt47111;
+    static public int staticInt47112;
+    static public int staticInt47113;
+    static public int staticInt47114;
+    static public int staticInt47115;
+    static public int staticInt47116;
+    static public int staticInt47117;
+    static public int staticInt47118;
+    static public int staticInt47119;
+    static public int staticInt47120;
+    static public int staticInt47121;
+    static public int staticInt47122;
+    static public int staticInt47123;
+    static public int staticInt47124;
+    static public int staticInt47125;
+    static public int staticInt47126;
+    static public int staticInt47127;
+    static public int staticInt47128;
+    static public int staticInt47129;
+    static public int staticInt47130;
+    static public int staticInt47131;
+    static public int staticInt47132;
+    static public int staticInt47133;
+    static public int staticInt47134;
+    static public int staticInt47135;
+    static public int staticInt47136;
+    static public int staticInt47137;
+    static public int staticInt47138;
+    static public int staticInt47139;
+    static public int staticInt47140;
+    static public int staticInt47141;
+    static public int staticInt47142;
+    static public int staticInt47143;
+    static public int staticInt47144;
+    static public int staticInt47145;
+    static public int staticInt47146;
+    static public int staticInt47147;
+    static public int staticInt47148;
+    static public int staticInt47149;
+    static public int staticInt47150;
+    static public int staticInt47151;
+    static public int staticInt47152;
+    static public int staticInt47153;
+    static public int staticInt47154;
+    static public int staticInt47155;
+    static public int staticInt47156;
+    static public int staticInt47157;
+    static public int staticInt47158;
+    static public int staticInt47159;
+    static public int staticInt47160;
+    static public int staticInt47161;
+    static public int staticInt47162;
+    static public int staticInt47163;
+    static public int staticInt47164;
+    static public int staticInt47165;
+    static public int staticInt47166;
+    static public int staticInt47167;
+    static public int staticInt47168;
+    static public int staticInt47169;
+    static public int staticInt47170;
+    static public int staticInt47171;
+    static public int staticInt47172;
+    static public int staticInt47173;
+    static public int staticInt47174;
+    static public int staticInt47175;
+    static public int staticInt47176;
+    static public int staticInt47177;
+    static public int staticInt47178;
+    static public int staticInt47179;
+    static public int staticInt47180;
+    static public int staticInt47181;
+    static public int staticInt47182;
+    static public int staticInt47183;
+    static public int staticInt47184;
+    static public int staticInt47185;
+    static public int staticInt47186;
+    static public int staticInt47187;
+    static public int staticInt47188;
+    static public int staticInt47189;
+    static public int staticInt47190;
+    static public int staticInt47191;
+    static public int staticInt47192;
+    static public int staticInt47193;
+    static public int staticInt47194;
+    static public int staticInt47195;
+    static public int staticInt47196;
+    static public int staticInt47197;
+    static public int staticInt47198;
+    static public int staticInt47199;
+    static public int staticInt47200;
+    static public int staticInt47201;
+    static public int staticInt47202;
+    static public int staticInt47203;
+    static public int staticInt47204;
+    static public int staticInt47205;
+    static public int staticInt47206;
+    static public int staticInt47207;
+    static public int staticInt47208;
+    static public int staticInt47209;
+    static public int staticInt47210;
+    static public int staticInt47211;
+    static public int staticInt47212;
+    static public int staticInt47213;
+    static public int staticInt47214;
+    static public int staticInt47215;
+    static public int staticInt47216;
+    static public int staticInt47217;
+    static public int staticInt47218;
+    static public int staticInt47219;
+    static public int staticInt47220;
+    static public int staticInt47221;
+    static public int staticInt47222;
+    static public int staticInt47223;
+    static public int staticInt47224;
+    static public int staticInt47225;
+    static public int staticInt47226;
+    static public int staticInt47227;
+    static public int staticInt47228;
+    static public int staticInt47229;
+    static public int staticInt47230;
+    static public int staticInt47231;
+    static public int staticInt47232;
+    static public int staticInt47233;
+    static public int staticInt47234;
+    static public int staticInt47235;
+    static public int staticInt47236;
+    static public int staticInt47237;
+    static public int staticInt47238;
+    static public int staticInt47239;
+    static public int staticInt47240;
+    static public int staticInt47241;
+    static public int staticInt47242;
+    static public int staticInt47243;
+    static public int staticInt47244;
+    static public int staticInt47245;
+    static public int staticInt47246;
+    static public int staticInt47247;
+    static public int staticInt47248;
+    static public int staticInt47249;
+    static public int staticInt47250;
+    static public int staticInt47251;
+    static public int staticInt47252;
+    static public int staticInt47253;
+    static public int staticInt47254;
+    static public int staticInt47255;
+    static public int staticInt47256;
+    static public int staticInt47257;
+    static public int staticInt47258;
+    static public int staticInt47259;
+    static public int staticInt47260;
+    static public int staticInt47261;
+    static public int staticInt47262;
+    static public int staticInt47263;
+    static public int staticInt47264;
+    static public int staticInt47265;
+    static public int staticInt47266;
+    static public int staticInt47267;
+    static public int staticInt47268;
+    static public int staticInt47269;
+    static public int staticInt47270;
+    static public int staticInt47271;
+    static public int staticInt47272;
+    static public int staticInt47273;
+    static public int staticInt47274;
+    static public int staticInt47275;
+    static public int staticInt47276;
+    static public int staticInt47277;
+    static public int staticInt47278;
+    static public int staticInt47279;
+    static public int staticInt47280;
+    static public int staticInt47281;
+    static public int staticInt47282;
+    static public int staticInt47283;
+    static public int staticInt47284;
+    static public int staticInt47285;
+    static public int staticInt47286;
+    static public int staticInt47287;
+    static public int staticInt47288;
+    static public int staticInt47289;
+    static public int staticInt47290;
+    static public int staticInt47291;
+    static public int staticInt47292;
+    static public int staticInt47293;
+    static public int staticInt47294;
+    static public int staticInt47295;
+    static public int staticInt47296;
+    static public int staticInt47297;
+    static public int staticInt47298;
+    static public int staticInt47299;
+    static public int staticInt47300;
+    static public int staticInt47301;
+    static public int staticInt47302;
+    static public int staticInt47303;
+    static public int staticInt47304;
+    static public int staticInt47305;
+    static public int staticInt47306;
+    static public int staticInt47307;
+    static public int staticInt47308;
+    static public int staticInt47309;
+    static public int staticInt47310;
+    static public int staticInt47311;
+    static public int staticInt47312;
+    static public int staticInt47313;
+    static public int staticInt47314;
+    static public int staticInt47315;
+    static public int staticInt47316;
+    static public int staticInt47317;
+    static public int staticInt47318;
+    static public int staticInt47319;
+    static public int staticInt47320;
+    static public int staticInt47321;
+    static public int staticInt47322;
+    static public int staticInt47323;
+    static public int staticInt47324;
+    static public int staticInt47325;
+    static public int staticInt47326;
+    static public int staticInt47327;
+    static public int staticInt47328;
+    static public int staticInt47329;
+    static public int staticInt47330;
+    static public int staticInt47331;
+    static public int staticInt47332;
+    static public int staticInt47333;
+    static public int staticInt47334;
+    static public int staticInt47335;
+    static public int staticInt47336;
+    static public int staticInt47337;
+    static public int staticInt47338;
+    static public int staticInt47339;
+    static public int staticInt47340;
+    static public int staticInt47341;
+    static public int staticInt47342;
+    static public int staticInt47343;
+    static public int staticInt47344;
+    static public int staticInt47345;
+    static public int staticInt47346;
+    static public int staticInt47347;
+    static public int staticInt47348;
+    static public int staticInt47349;
+    static public int staticInt47350;
+    static public int staticInt47351;
+    static public int staticInt47352;
+    static public int staticInt47353;
+    static public int staticInt47354;
+    static public int staticInt47355;
+    static public int staticInt47356;
+    static public int staticInt47357;
+    static public int staticInt47358;
+    static public int staticInt47359;
+    static public int staticInt47360;
+    static public int staticInt47361;
+    static public int staticInt47362;
+    static public int staticInt47363;
+    static public int staticInt47364;
+    static public int staticInt47365;
+    static public int staticInt47366;
+    static public int staticInt47367;
+    static public int staticInt47368;
+    static public int staticInt47369;
+    static public int staticInt47370;
+    static public int staticInt47371;
+    static public int staticInt47372;
+    static public int staticInt47373;
+    static public int staticInt47374;
+    static public int staticInt47375;
+    static public int staticInt47376;
+    static public int staticInt47377;
+    static public int staticInt47378;
+    static public int staticInt47379;
+    static public int staticInt47380;
+    static public int staticInt47381;
+    static public int staticInt47382;
+    static public int staticInt47383;
+    static public int staticInt47384;
+    static public int staticInt47385;
+    static public int staticInt47386;
+    static public int staticInt47387;
+    static public int staticInt47388;
+    static public int staticInt47389;
+    static public int staticInt47390;
+    static public int staticInt47391;
+    static public int staticInt47392;
+    static public int staticInt47393;
+    static public int staticInt47394;
+    static public int staticInt47395;
+    static public int staticInt47396;
+    static public int staticInt47397;
+    static public int staticInt47398;
+    static public int staticInt47399;
+    static public int staticInt47400;
+    static public int staticInt47401;
+    static public int staticInt47402;
+    static public int staticInt47403;
+    static public int staticInt47404;
+    static public int staticInt47405;
+    static public int staticInt47406;
+    static public int staticInt47407;
+    static public int staticInt47408;
+    static public int staticInt47409;
+    static public int staticInt47410;
+    static public int staticInt47411;
+    static public int staticInt47412;
+    static public int staticInt47413;
+    static public int staticInt47414;
+    static public int staticInt47415;
+    static public int staticInt47416;
+    static public int staticInt47417;
+    static public int staticInt47418;
+    static public int staticInt47419;
+    static public int staticInt47420;
+    static public int staticInt47421;
+    static public int staticInt47422;
+    static public int staticInt47423;
+    static public int staticInt47424;
+    static public int staticInt47425;
+    static public int staticInt47426;
+    static public int staticInt47427;
+    static public int staticInt47428;
+    static public int staticInt47429;
+    static public int staticInt47430;
+    static public int staticInt47431;
+    static public int staticInt47432;
+    static public int staticInt47433;
+    static public int staticInt47434;
+    static public int staticInt47435;
+    static public int staticInt47436;
+    static public int staticInt47437;
+    static public int staticInt47438;
+    static public int staticInt47439;
+    static public int staticInt47440;
+    static public int staticInt47441;
+    static public int staticInt47442;
+    static public int staticInt47443;
+    static public int staticInt47444;
+    static public int staticInt47445;
+    static public int staticInt47446;
+    static public int staticInt47447;
+    static public int staticInt47448;
+    static public int staticInt47449;
+    static public int staticInt47450;
+    static public int staticInt47451;
+    static public int staticInt47452;
+    static public int staticInt47453;
+    static public int staticInt47454;
+    static public int staticInt47455;
+    static public int staticInt47456;
+    static public int staticInt47457;
+    static public int staticInt47458;
+    static public int staticInt47459;
+    static public int staticInt47460;
+    static public int staticInt47461;
+    static public int staticInt47462;
+    static public int staticInt47463;
+    static public int staticInt47464;
+    static public int staticInt47465;
+    static public int staticInt47466;
+    static public int staticInt47467;
+    static public int staticInt47468;
+    static public int staticInt47469;
+    static public int staticInt47470;
+    static public int staticInt47471;
+    static public int staticInt47472;
+    static public int staticInt47473;
+    static public int staticInt47474;
+    static public int staticInt47475;
+    static public int staticInt47476;
+    static public int staticInt47477;
+    static public int staticInt47478;
+    static public int staticInt47479;
+    static public int staticInt47480;
+    static public int staticInt47481;
+    static public int staticInt47482;
+    static public int staticInt47483;
+    static public int staticInt47484;
+    static public int staticInt47485;
+    static public int staticInt47486;
+    static public int staticInt47487;
+    static public int staticInt47488;
+    static public int staticInt47489;
+    static public int staticInt47490;
+    static public int staticInt47491;
+    static public int staticInt47492;
+    static public int staticInt47493;
+    static public int staticInt47494;
+    static public int staticInt47495;
+    static public int staticInt47496;
+    static public int staticInt47497;
+    static public int staticInt47498;
+    static public int staticInt47499;
+    static public int staticInt47500;
+    static public int staticInt47501;
+    static public int staticInt47502;
+    static public int staticInt47503;
+    static public int staticInt47504;
+    static public int staticInt47505;
+    static public int staticInt47506;
+    static public int staticInt47507;
+    static public int staticInt47508;
+    static public int staticInt47509;
+    static public int staticInt47510;
+    static public int staticInt47511;
+    static public int staticInt47512;
+    static public int staticInt47513;
+    static public int staticInt47514;
+    static public int staticInt47515;
+    static public int staticInt47516;
+    static public int staticInt47517;
+    static public int staticInt47518;
+    static public int staticInt47519;
+    static public int staticInt47520;
+    static public int staticInt47521;
+    static public int staticInt47522;
+    static public int staticInt47523;
+    static public int staticInt47524;
+    static public int staticInt47525;
+    static public int staticInt47526;
+    static public int staticInt47527;
+    static public int staticInt47528;
+    static public int staticInt47529;
+    static public int staticInt47530;
+    static public int staticInt47531;
+    static public int staticInt47532;
+    static public int staticInt47533;
+    static public int staticInt47534;
+    static public int staticInt47535;
+    static public int staticInt47536;
+    static public int staticInt47537;
+    static public int staticInt47538;
+    static public int staticInt47539;
+    static public int staticInt47540;
+    static public int staticInt47541;
+    static public int staticInt47542;
+    static public int staticInt47543;
+    static public int staticInt47544;
+    static public int staticInt47545;
+    static public int staticInt47546;
+    static public int staticInt47547;
+    static public int staticInt47548;
+    static public int staticInt47549;
+    static public int staticInt47550;
+    static public int staticInt47551;
+    static public int staticInt47552;
+    static public int staticInt47553;
+    static public int staticInt47554;
+    static public int staticInt47555;
+    static public int staticInt47556;
+    static public int staticInt47557;
+    static public int staticInt47558;
+    static public int staticInt47559;
+    static public int staticInt47560;
+    static public int staticInt47561;
+    static public int staticInt47562;
+    static public int staticInt47563;
+    static public int staticInt47564;
+    static public int staticInt47565;
+    static public int staticInt47566;
+    static public int staticInt47567;
+    static public int staticInt47568;
+    static public int staticInt47569;
+    static public int staticInt47570;
+    static public int staticInt47571;
+    static public int staticInt47572;
+    static public int staticInt47573;
+    static public int staticInt47574;
+    static public int staticInt47575;
+    static public int staticInt47576;
+    static public int staticInt47577;
+    static public int staticInt47578;
+    static public int staticInt47579;
+    static public int staticInt47580;
+    static public int staticInt47581;
+    static public int staticInt47582;
+    static public int staticInt47583;
+    static public int staticInt47584;
+    static public int staticInt47585;
+    static public int staticInt47586;
+    static public int staticInt47587;
+    static public int staticInt47588;
+    static public int staticInt47589;
+    static public int staticInt47590;
+    static public int staticInt47591;
+    static public int staticInt47592;
+    static public int staticInt47593;
+    static public int staticInt47594;
+    static public int staticInt47595;
+    static public int staticInt47596;
+    static public int staticInt47597;
+    static public int staticInt47598;
+    static public int staticInt47599;
+    static public int staticInt47600;
+    static public int staticInt47601;
+    static public int staticInt47602;
+    static public int staticInt47603;
+    static public int staticInt47604;
+    static public int staticInt47605;
+    static public int staticInt47606;
+    static public int staticInt47607;
+    static public int staticInt47608;
+    static public int staticInt47609;
+    static public int staticInt47610;
+    static public int staticInt47611;
+    static public int staticInt47612;
+    static public int staticInt47613;
+    static public int staticInt47614;
+    static public int staticInt47615;
+    static public int staticInt47616;
+    static public int staticInt47617;
+    static public int staticInt47618;
+    static public int staticInt47619;
+    static public int staticInt47620;
+    static public int staticInt47621;
+    static public int staticInt47622;
+    static public int staticInt47623;
+    static public int staticInt47624;
+    static public int staticInt47625;
+    static public int staticInt47626;
+    static public int staticInt47627;
+    static public int staticInt47628;
+    static public int staticInt47629;
+    static public int staticInt47630;
+    static public int staticInt47631;
+    static public int staticInt47632;
+    static public int staticInt47633;
+    static public int staticInt47634;
+    static public int staticInt47635;
+    static public int staticInt47636;
+    static public int staticInt47637;
+    static public int staticInt47638;
+    static public int staticInt47639;
+    static public int staticInt47640;
+    static public int staticInt47641;
+    static public int staticInt47642;
+    static public int staticInt47643;
+    static public int staticInt47644;
+    static public int staticInt47645;
+    static public int staticInt47646;
+    static public int staticInt47647;
+    static public int staticInt47648;
+    static public int staticInt47649;
+    static public int staticInt47650;
+    static public int staticInt47651;
+    static public int staticInt47652;
+    static public int staticInt47653;
+    static public int staticInt47654;
+    static public int staticInt47655;
+    static public int staticInt47656;
+    static public int staticInt47657;
+    static public int staticInt47658;
+    static public int staticInt47659;
+    static public int staticInt47660;
+    static public int staticInt47661;
+    static public int staticInt47662;
+    static public int staticInt47663;
+    static public int staticInt47664;
+    static public int staticInt47665;
+    static public int staticInt47666;
+    static public int staticInt47667;
+    static public int staticInt47668;
+    static public int staticInt47669;
+    static public int staticInt47670;
+    static public int staticInt47671;
+    static public int staticInt47672;
+    static public int staticInt47673;
+    static public int staticInt47674;
+    static public int staticInt47675;
+    static public int staticInt47676;
+    static public int staticInt47677;
+    static public int staticInt47678;
+    static public int staticInt47679;
+    static public int staticInt47680;
+    static public int staticInt47681;
+    static public int staticInt47682;
+    static public int staticInt47683;
+    static public int staticInt47684;
+    static public int staticInt47685;
+    static public int staticInt47686;
+    static public int staticInt47687;
+    static public int staticInt47688;
+    static public int staticInt47689;
+    static public int staticInt47690;
+    static public int staticInt47691;
+    static public int staticInt47692;
+    static public int staticInt47693;
+    static public int staticInt47694;
+    static public int staticInt47695;
+    static public int staticInt47696;
+    static public int staticInt47697;
+    static public int staticInt47698;
+    static public int staticInt47699;
+    static public int staticInt47700;
+    static public int staticInt47701;
+    static public int staticInt47702;
+    static public int staticInt47703;
+    static public int staticInt47704;
+    static public int staticInt47705;
+    static public int staticInt47706;
+    static public int staticInt47707;
+    static public int staticInt47708;
+    static public int staticInt47709;
+    static public int staticInt47710;
+    static public int staticInt47711;
+    static public int staticInt47712;
+    static public int staticInt47713;
+    static public int staticInt47714;
+    static public int staticInt47715;
+    static public int staticInt47716;
+    static public int staticInt47717;
+    static public int staticInt47718;
+    static public int staticInt47719;
+    static public int staticInt47720;
+    static public int staticInt47721;
+    static public int staticInt47722;
+    static public int staticInt47723;
+    static public int staticInt47724;
+    static public int staticInt47725;
+    static public int staticInt47726;
+    static public int staticInt47727;
+    static public int staticInt47728;
+    static public int staticInt47729;
+    static public int staticInt47730;
+    static public int staticInt47731;
+    static public int staticInt47732;
+    static public int staticInt47733;
+    static public int staticInt47734;
+    static public int staticInt47735;
+    static public int staticInt47736;
+    static public int staticInt47737;
+    static public int staticInt47738;
+    static public int staticInt47739;
+    static public int staticInt47740;
+    static public int staticInt47741;
+    static public int staticInt47742;
+    static public int staticInt47743;
+    static public int staticInt47744;
+    static public int staticInt47745;
+    static public int staticInt47746;
+    static public int staticInt47747;
+    static public int staticInt47748;
+    static public int staticInt47749;
+    static public int staticInt47750;
+    static public int staticInt47751;
+    static public int staticInt47752;
+    static public int staticInt47753;
+    static public int staticInt47754;
+    static public int staticInt47755;
+    static public int staticInt47756;
+    static public int staticInt47757;
+    static public int staticInt47758;
+    static public int staticInt47759;
+    static public int staticInt47760;
+    static public int staticInt47761;
+    static public int staticInt47762;
+    static public int staticInt47763;
+    static public int staticInt47764;
+    static public int staticInt47765;
+    static public int staticInt47766;
+    static public int staticInt47767;
+    static public int staticInt47768;
+    static public int staticInt47769;
+    static public int staticInt47770;
+    static public int staticInt47771;
+    static public int staticInt47772;
+    static public int staticInt47773;
+    static public int staticInt47774;
+    static public int staticInt47775;
+    static public int staticInt47776;
+    static public int staticInt47777;
+    static public int staticInt47778;
+    static public int staticInt47779;
+    static public int staticInt47780;
+    static public int staticInt47781;
+    static public int staticInt47782;
+    static public int staticInt47783;
+    static public int staticInt47784;
+    static public int staticInt47785;
+    static public int staticInt47786;
+    static public int staticInt47787;
+    static public int staticInt47788;
+    static public int staticInt47789;
+    static public int staticInt47790;
+    static public int staticInt47791;
+    static public int staticInt47792;
+    static public int staticInt47793;
+    static public int staticInt47794;
+    static public int staticInt47795;
+    static public int staticInt47796;
+    static public int staticInt47797;
+    static public int staticInt47798;
+    static public int staticInt47799;
+    static public int staticInt47800;
+    static public int staticInt47801;
+    static public int staticInt47802;
+    static public int staticInt47803;
+    static public int staticInt47804;
+    static public int staticInt47805;
+    static public int staticInt47806;
+    static public int staticInt47807;
+    static public int staticInt47808;
+    static public int staticInt47809;
+    static public int staticInt47810;
+    static public int staticInt47811;
+    static public int staticInt47812;
+    static public int staticInt47813;
+    static public int staticInt47814;
+    static public int staticInt47815;
+    static public int staticInt47816;
+    static public int staticInt47817;
+    static public int staticInt47818;
+    static public int staticInt47819;
+    static public int staticInt47820;
+    static public int staticInt47821;
+    static public int staticInt47822;
+    static public int staticInt47823;
+    static public int staticInt47824;
+    static public int staticInt47825;
+    static public int staticInt47826;
+    static public int staticInt47827;
+    static public int staticInt47828;
+    static public int staticInt47829;
+    static public int staticInt47830;
+    static public int staticInt47831;
+    static public int staticInt47832;
+    static public int staticInt47833;
+    static public int staticInt47834;
+    static public int staticInt47835;
+    static public int staticInt47836;
+    static public int staticInt47837;
+    static public int staticInt47838;
+    static public int staticInt47839;
+    static public int staticInt47840;
+    static public int staticInt47841;
+    static public int staticInt47842;
+    static public int staticInt47843;
+    static public int staticInt47844;
+    static public int staticInt47845;
+    static public int staticInt47846;
+    static public int staticInt47847;
+    static public int staticInt47848;
+    static public int staticInt47849;
+    static public int staticInt47850;
+    static public int staticInt47851;
+    static public int staticInt47852;
+    static public int staticInt47853;
+    static public int staticInt47854;
+    static public int staticInt47855;
+    static public int staticInt47856;
+    static public int staticInt47857;
+    static public int staticInt47858;
+    static public int staticInt47859;
+    static public int staticInt47860;
+    static public int staticInt47861;
+    static public int staticInt47862;
+    static public int staticInt47863;
+    static public int staticInt47864;
+    static public int staticInt47865;
+    static public int staticInt47866;
+    static public int staticInt47867;
+    static public int staticInt47868;
+    static public int staticInt47869;
+    static public int staticInt47870;
+    static public int staticInt47871;
+    static public int staticInt47872;
+    static public int staticInt47873;
+    static public int staticInt47874;
+    static public int staticInt47875;
+    static public int staticInt47876;
+    static public int staticInt47877;
+    static public int staticInt47878;
+    static public int staticInt47879;
+    static public int staticInt47880;
+    static public int staticInt47881;
+    static public int staticInt47882;
+    static public int staticInt47883;
+    static public int staticInt47884;
+    static public int staticInt47885;
+    static public int staticInt47886;
+    static public int staticInt47887;
+    static public int staticInt47888;
+    static public int staticInt47889;
+    static public int staticInt47890;
+    static public int staticInt47891;
+    static public int staticInt47892;
+    static public int staticInt47893;
+    static public int staticInt47894;
+    static public int staticInt47895;
+    static public int staticInt47896;
+    static public int staticInt47897;
+    static public int staticInt47898;
+    static public int staticInt47899;
+    static public int staticInt47900;
+    static public int staticInt47901;
+    static public int staticInt47902;
+    static public int staticInt47903;
+    static public int staticInt47904;
+    static public int staticInt47905;
+    static public int staticInt47906;
+    static public int staticInt47907;
+    static public int staticInt47908;
+    static public int staticInt47909;
+    static public int staticInt47910;
+    static public int staticInt47911;
+    static public int staticInt47912;
+    static public int staticInt47913;
+    static public int staticInt47914;
+    static public int staticInt47915;
+    static public int staticInt47916;
+    static public int staticInt47917;
+    static public int staticInt47918;
+    static public int staticInt47919;
+    static public int staticInt47920;
+    static public int staticInt47921;
+    static public int staticInt47922;
+    static public int staticInt47923;
+    static public int staticInt47924;
+    static public int staticInt47925;
+    static public int staticInt47926;
+    static public int staticInt47927;
+    static public int staticInt47928;
+    static public int staticInt47929;
+    static public int staticInt47930;
+    static public int staticInt47931;
+    static public int staticInt47932;
+    static public int staticInt47933;
+    static public int staticInt47934;
+    static public int staticInt47935;
+    static public int staticInt47936;
+    static public int staticInt47937;
+    static public int staticInt47938;
+    static public int staticInt47939;
+    static public int staticInt47940;
+    static public int staticInt47941;
+    static public int staticInt47942;
+    static public int staticInt47943;
+    static public int staticInt47944;
+    static public int staticInt47945;
+    static public int staticInt47946;
+    static public int staticInt47947;
+    static public int staticInt47948;
+    static public int staticInt47949;
+    static public int staticInt47950;
+    static public int staticInt47951;
+    static public int staticInt47952;
+    static public int staticInt47953;
+    static public int staticInt47954;
+    static public int staticInt47955;
+    static public int staticInt47956;
+    static public int staticInt47957;
+    static public int staticInt47958;
+    static public int staticInt47959;
+    static public int staticInt47960;
+    static public int staticInt47961;
+    static public int staticInt47962;
+    static public int staticInt47963;
+    static public int staticInt47964;
+    static public int staticInt47965;
+    static public int staticInt47966;
+    static public int staticInt47967;
+    static public int staticInt47968;
+    static public int staticInt47969;
+    static public int staticInt47970;
+    static public int staticInt47971;
+    static public int staticInt47972;
+    static public int staticInt47973;
+    static public int staticInt47974;
+    static public int staticInt47975;
+    static public int staticInt47976;
+    static public int staticInt47977;
+    static public int staticInt47978;
+    static public int staticInt47979;
+    static public int staticInt47980;
+    static public int staticInt47981;
+    static public int staticInt47982;
+    static public int staticInt47983;
+    static public int staticInt47984;
+    static public int staticInt47985;
+    static public int staticInt47986;
+    static public int staticInt47987;
+    static public int staticInt47988;
+    static public int staticInt47989;
+    static public int staticInt47990;
+    static public int staticInt47991;
+    static public int staticInt47992;
+    static public int staticInt47993;
+    static public int staticInt47994;
+    static public int staticInt47995;
+    static public int staticInt47996;
+    static public int staticInt47997;
+    static public int staticInt47998;
+    static public int staticInt47999;
+    static public int staticInt48000;
+    static public int staticInt48001;
+    static public int staticInt48002;
+    static public int staticInt48003;
+    static public int staticInt48004;
+    static public int staticInt48005;
+    static public int staticInt48006;
+    static public int staticInt48007;
+    static public int staticInt48008;
+    static public int staticInt48009;
+    static public int staticInt48010;
+    static public int staticInt48011;
+    static public int staticInt48012;
+    static public int staticInt48013;
+    static public int staticInt48014;
+    static public int staticInt48015;
+    static public int staticInt48016;
+    static public int staticInt48017;
+    static public int staticInt48018;
+    static public int staticInt48019;
+    static public int staticInt48020;
+    static public int staticInt48021;
+    static public int staticInt48022;
+    static public int staticInt48023;
+    static public int staticInt48024;
+    static public int staticInt48025;
+    static public int staticInt48026;
+    static public int staticInt48027;
+    static public int staticInt48028;
+    static public int staticInt48029;
+    static public int staticInt48030;
+    static public int staticInt48031;
+    static public int staticInt48032;
+    static public int staticInt48033;
+    static public int staticInt48034;
+    static public int staticInt48035;
+    static public int staticInt48036;
+    static public int staticInt48037;
+    static public int staticInt48038;
+    static public int staticInt48039;
+    static public int staticInt48040;
+    static public int staticInt48041;
+    static public int staticInt48042;
+    static public int staticInt48043;
+    static public int staticInt48044;
+    static public int staticInt48045;
+    static public int staticInt48046;
+    static public int staticInt48047;
+    static public int staticInt48048;
+    static public int staticInt48049;
+    static public int staticInt48050;
+    static public int staticInt48051;
+    static public int staticInt48052;
+    static public int staticInt48053;
+    static public int staticInt48054;
+    static public int staticInt48055;
+    static public int staticInt48056;
+    static public int staticInt48057;
+    static public int staticInt48058;
+    static public int staticInt48059;
+    static public int staticInt48060;
+    static public int staticInt48061;
+    static public int staticInt48062;
+    static public int staticInt48063;
+    static public int staticInt48064;
+    static public int staticInt48065;
+    static public int staticInt48066;
+    static public int staticInt48067;
+    static public int staticInt48068;
+    static public int staticInt48069;
+    static public int staticInt48070;
+    static public int staticInt48071;
+    static public int staticInt48072;
+    static public int staticInt48073;
+    static public int staticInt48074;
+    static public int staticInt48075;
+    static public int staticInt48076;
+    static public int staticInt48077;
+    static public int staticInt48078;
+    static public int staticInt48079;
+    static public int staticInt48080;
+    static public int staticInt48081;
+    static public int staticInt48082;
+    static public int staticInt48083;
+    static public int staticInt48084;
+    static public int staticInt48085;
+    static public int staticInt48086;
+    static public int staticInt48087;
+    static public int staticInt48088;
+    static public int staticInt48089;
+    static public int staticInt48090;
+    static public int staticInt48091;
+    static public int staticInt48092;
+    static public int staticInt48093;
+    static public int staticInt48094;
+    static public int staticInt48095;
+    static public int staticInt48096;
+    static public int staticInt48097;
+    static public int staticInt48098;
+    static public int staticInt48099;
+    static public int staticInt48100;
+    static public int staticInt48101;
+    static public int staticInt48102;
+    static public int staticInt48103;
+    static public int staticInt48104;
+    static public int staticInt48105;
+    static public int staticInt48106;
+    static public int staticInt48107;
+    static public int staticInt48108;
+    static public int staticInt48109;
+    static public int staticInt48110;
+    static public int staticInt48111;
+    static public int staticInt48112;
+    static public int staticInt48113;
+    static public int staticInt48114;
+    static public int staticInt48115;
+    static public int staticInt48116;
+    static public int staticInt48117;
+    static public int staticInt48118;
+    static public int staticInt48119;
+    static public int staticInt48120;
+    static public int staticInt48121;
+    static public int staticInt48122;
+    static public int staticInt48123;
+    static public int staticInt48124;
+    static public int staticInt48125;
+    static public int staticInt48126;
+    static public int staticInt48127;
+    static public int staticInt48128;
+    static public int staticInt48129;
+    static public int staticInt48130;
+    static public int staticInt48131;
+    static public int staticInt48132;
+    static public int staticInt48133;
+    static public int staticInt48134;
+    static public int staticInt48135;
+    static public int staticInt48136;
+    static public int staticInt48137;
+    static public int staticInt48138;
+    static public int staticInt48139;
+    static public int staticInt48140;
+    static public int staticInt48141;
+    static public int staticInt48142;
+    static public int staticInt48143;
+    static public int staticInt48144;
+    static public int staticInt48145;
+    static public int staticInt48146;
+    static public int staticInt48147;
+    static public int staticInt48148;
+    static public int staticInt48149;
+    static public int staticInt48150;
+    static public int staticInt48151;
+    static public int staticInt48152;
+    static public int staticInt48153;
+    static public int staticInt48154;
+    static public int staticInt48155;
+    static public int staticInt48156;
+    static public int staticInt48157;
+    static public int staticInt48158;
+    static public int staticInt48159;
+    static public int staticInt48160;
+    static public int staticInt48161;
+    static public int staticInt48162;
+    static public int staticInt48163;
+    static public int staticInt48164;
+    static public int staticInt48165;
+    static public int staticInt48166;
+    static public int staticInt48167;
+    static public int staticInt48168;
+    static public int staticInt48169;
+    static public int staticInt48170;
+    static public int staticInt48171;
+    static public int staticInt48172;
+    static public int staticInt48173;
+    static public int staticInt48174;
+    static public int staticInt48175;
+    static public int staticInt48176;
+    static public int staticInt48177;
+    static public int staticInt48178;
+    static public int staticInt48179;
+    static public int staticInt48180;
+    static public int staticInt48181;
+    static public int staticInt48182;
+    static public int staticInt48183;
+    static public int staticInt48184;
+    static public int staticInt48185;
+    static public int staticInt48186;
+    static public int staticInt48187;
+    static public int staticInt48188;
+    static public int staticInt48189;
+    static public int staticInt48190;
+    static public int staticInt48191;
+    static public int staticInt48192;
+    static public int staticInt48193;
+    static public int staticInt48194;
+    static public int staticInt48195;
+    static public int staticInt48196;
+    static public int staticInt48197;
+    static public int staticInt48198;
+    static public int staticInt48199;
+    static public int staticInt48200;
+    static public int staticInt48201;
+    static public int staticInt48202;
+    static public int staticInt48203;
+    static public int staticInt48204;
+    static public int staticInt48205;
+    static public int staticInt48206;
+    static public int staticInt48207;
+    static public int staticInt48208;
+    static public int staticInt48209;
+    static public int staticInt48210;
+    static public int staticInt48211;
+    static public int staticInt48212;
+    static public int staticInt48213;
+    static public int staticInt48214;
+    static public int staticInt48215;
+    static public int staticInt48216;
+    static public int staticInt48217;
+    static public int staticInt48218;
+    static public int staticInt48219;
+    static public int staticInt48220;
+    static public int staticInt48221;
+    static public int staticInt48222;
+    static public int staticInt48223;
+    static public int staticInt48224;
+    static public int staticInt48225;
+    static public int staticInt48226;
+    static public int staticInt48227;
+    static public int staticInt48228;
+    static public int staticInt48229;
+    static public int staticInt48230;
+    static public int staticInt48231;
+    static public int staticInt48232;
+    static public int staticInt48233;
+    static public int staticInt48234;
+    static public int staticInt48235;
+    static public int staticInt48236;
+    static public int staticInt48237;
+    static public int staticInt48238;
+    static public int staticInt48239;
+    static public int staticInt48240;
+    static public int staticInt48241;
+    static public int staticInt48242;
+    static public int staticInt48243;
+    static public int staticInt48244;
+    static public int staticInt48245;
+    static public int staticInt48246;
+    static public int staticInt48247;
+    static public int staticInt48248;
+    static public int staticInt48249;
+    static public int staticInt48250;
+    static public int staticInt48251;
+    static public int staticInt48252;
+    static public int staticInt48253;
+    static public int staticInt48254;
+    static public int staticInt48255;
+    static public int staticInt48256;
+    static public int staticInt48257;
+    static public int staticInt48258;
+    static public int staticInt48259;
+    static public int staticInt48260;
+    static public int staticInt48261;
+    static public int staticInt48262;
+    static public int staticInt48263;
+    static public int staticInt48264;
+    static public int staticInt48265;
+    static public int staticInt48266;
+    static public int staticInt48267;
+    static public int staticInt48268;
+    static public int staticInt48269;
+    static public int staticInt48270;
+    static public int staticInt48271;
+    static public int staticInt48272;
+    static public int staticInt48273;
+    static public int staticInt48274;
+    static public int staticInt48275;
+    static public int staticInt48276;
+    static public int staticInt48277;
+    static public int staticInt48278;
+    static public int staticInt48279;
+    static public int staticInt48280;
+    static public int staticInt48281;
+    static public int staticInt48282;
+    static public int staticInt48283;
+    static public int staticInt48284;
+    static public int staticInt48285;
+    static public int staticInt48286;
+    static public int staticInt48287;
+    static public int staticInt48288;
+    static public int staticInt48289;
+    static public int staticInt48290;
+    static public int staticInt48291;
+    static public int staticInt48292;
+    static public int staticInt48293;
+    static public int staticInt48294;
+    static public int staticInt48295;
+    static public int staticInt48296;
+    static public int staticInt48297;
+    static public int staticInt48298;
+    static public int staticInt48299;
+    static public int staticInt48300;
+    static public int staticInt48301;
+    static public int staticInt48302;
+    static public int staticInt48303;
+    static public int staticInt48304;
+    static public int staticInt48305;
+    static public int staticInt48306;
+    static public int staticInt48307;
+    static public int staticInt48308;
+    static public int staticInt48309;
+    static public int staticInt48310;
+    static public int staticInt48311;
+    static public int staticInt48312;
+    static public int staticInt48313;
+    static public int staticInt48314;
+    static public int staticInt48315;
+    static public int staticInt48316;
+    static public int staticInt48317;
+    static public int staticInt48318;
+    static public int staticInt48319;
+    static public int staticInt48320;
+    static public int staticInt48321;
+    static public int staticInt48322;
+    static public int staticInt48323;
+    static public int staticInt48324;
+    static public int staticInt48325;
+    static public int staticInt48326;
+    static public int staticInt48327;
+    static public int staticInt48328;
+    static public int staticInt48329;
+    static public int staticInt48330;
+    static public int staticInt48331;
+    static public int staticInt48332;
+    static public int staticInt48333;
+    static public int staticInt48334;
+    static public int staticInt48335;
+    static public int staticInt48336;
+    static public int staticInt48337;
+    static public int staticInt48338;
+    static public int staticInt48339;
+    static public int staticInt48340;
+    static public int staticInt48341;
+    static public int staticInt48342;
+    static public int staticInt48343;
+    static public int staticInt48344;
+    static public int staticInt48345;
+    static public int staticInt48346;
+    static public int staticInt48347;
+    static public int staticInt48348;
+    static public int staticInt48349;
+    static public int staticInt48350;
+    static public int staticInt48351;
+    static public int staticInt48352;
+    static public int staticInt48353;
+    static public int staticInt48354;
+    static public int staticInt48355;
+    static public int staticInt48356;
+    static public int staticInt48357;
+    static public int staticInt48358;
+    static public int staticInt48359;
+    static public int staticInt48360;
+    static public int staticInt48361;
+    static public int staticInt48362;
+    static public int staticInt48363;
+    static public int staticInt48364;
+    static public int staticInt48365;
+    static public int staticInt48366;
+    static public int staticInt48367;
+    static public int staticInt48368;
+    static public int staticInt48369;
+    static public int staticInt48370;
+    static public int staticInt48371;
+    static public int staticInt48372;
+    static public int staticInt48373;
+    static public int staticInt48374;
+    static public int staticInt48375;
+    static public int staticInt48376;
+    static public int staticInt48377;
+    static public int staticInt48378;
+    static public int staticInt48379;
+    static public int staticInt48380;
+    static public int staticInt48381;
+    static public int staticInt48382;
+    static public int staticInt48383;
+    static public int staticInt48384;
+    static public int staticInt48385;
+    static public int staticInt48386;
+    static public int staticInt48387;
+    static public int staticInt48388;
+    static public int staticInt48389;
+    static public int staticInt48390;
+    static public int staticInt48391;
+    static public int staticInt48392;
+    static public int staticInt48393;
+    static public int staticInt48394;
+    static public int staticInt48395;
+    static public int staticInt48396;
+    static public int staticInt48397;
+    static public int staticInt48398;
+    static public int staticInt48399;
+    static public int staticInt48400;
+    static public int staticInt48401;
+    static public int staticInt48402;
+    static public int staticInt48403;
+    static public int staticInt48404;
+    static public int staticInt48405;
+    static public int staticInt48406;
+    static public int staticInt48407;
+    static public int staticInt48408;
+    static public int staticInt48409;
+    static public int staticInt48410;
+    static public int staticInt48411;
+    static public int staticInt48412;
+    static public int staticInt48413;
+    static public int staticInt48414;
+    static public int staticInt48415;
+    static public int staticInt48416;
+    static public int staticInt48417;
+    static public int staticInt48418;
+    static public int staticInt48419;
+    static public int staticInt48420;
+    static public int staticInt48421;
+    static public int staticInt48422;
+    static public int staticInt48423;
+    static public int staticInt48424;
+    static public int staticInt48425;
+    static public int staticInt48426;
+    static public int staticInt48427;
+    static public int staticInt48428;
+    static public int staticInt48429;
+    static public int staticInt48430;
+    static public int staticInt48431;
+    static public int staticInt48432;
+    static public int staticInt48433;
+    static public int staticInt48434;
+    static public int staticInt48435;
+    static public int staticInt48436;
+    static public int staticInt48437;
+    static public int staticInt48438;
+    static public int staticInt48439;
+    static public int staticInt48440;
+    static public int staticInt48441;
+    static public int staticInt48442;
+    static public int staticInt48443;
+    static public int staticInt48444;
+    static public int staticInt48445;
+    static public int staticInt48446;
+    static public int staticInt48447;
+    static public int staticInt48448;
+    static public int staticInt48449;
+    static public int staticInt48450;
+    static public int staticInt48451;
+    static public int staticInt48452;
+    static public int staticInt48453;
+    static public int staticInt48454;
+    static public int staticInt48455;
+    static public int staticInt48456;
+    static public int staticInt48457;
+    static public int staticInt48458;
+    static public int staticInt48459;
+    static public int staticInt48460;
+    static public int staticInt48461;
+    static public int staticInt48462;
+    static public int staticInt48463;
+    static public int staticInt48464;
+    static public int staticInt48465;
+    static public int staticInt48466;
+    static public int staticInt48467;
+    static public int staticInt48468;
+    static public int staticInt48469;
+    static public int staticInt48470;
+    static public int staticInt48471;
+    static public int staticInt48472;
+    static public int staticInt48473;
+    static public int staticInt48474;
+    static public int staticInt48475;
+    static public int staticInt48476;
+    static public int staticInt48477;
+    static public int staticInt48478;
+    static public int staticInt48479;
+    static public int staticInt48480;
+    static public int staticInt48481;
+    static public int staticInt48482;
+    static public int staticInt48483;
+    static public int staticInt48484;
+    static public int staticInt48485;
+    static public int staticInt48486;
+    static public int staticInt48487;
+    static public int staticInt48488;
+    static public int staticInt48489;
+    static public int staticInt48490;
+    static public int staticInt48491;
+    static public int staticInt48492;
+    static public int staticInt48493;
+    static public int staticInt48494;
+    static public int staticInt48495;
+    static public int staticInt48496;
+    static public int staticInt48497;
+    static public int staticInt48498;
+    static public int staticInt48499;
+    static public int staticInt48500;
+    static public int staticInt48501;
+    static public int staticInt48502;
+    static public int staticInt48503;
+    static public int staticInt48504;
+    static public int staticInt48505;
+    static public int staticInt48506;
+    static public int staticInt48507;
+    static public int staticInt48508;
+    static public int staticInt48509;
+    static public int staticInt48510;
+    static public int staticInt48511;
+    static public int staticInt48512;
+    static public int staticInt48513;
+    static public int staticInt48514;
+    static public int staticInt48515;
+    static public int staticInt48516;
+    static public int staticInt48517;
+    static public int staticInt48518;
+    static public int staticInt48519;
+    static public int staticInt48520;
+    static public int staticInt48521;
+    static public int staticInt48522;
+    static public int staticInt48523;
+    static public int staticInt48524;
+    static public int staticInt48525;
+    static public int staticInt48526;
+    static public int staticInt48527;
+    static public int staticInt48528;
+    static public int staticInt48529;
+    static public int staticInt48530;
+    static public int staticInt48531;
+    static public int staticInt48532;
+    static public int staticInt48533;
+    static public int staticInt48534;
+    static public int staticInt48535;
+    static public int staticInt48536;
+    static public int staticInt48537;
+    static public int staticInt48538;
+    static public int staticInt48539;
+    static public int staticInt48540;
+    static public int staticInt48541;
+    static public int staticInt48542;
+    static public int staticInt48543;
+    static public int staticInt48544;
+    static public int staticInt48545;
+    static public int staticInt48546;
+    static public int staticInt48547;
+    static public int staticInt48548;
+    static public int staticInt48549;
+    static public int staticInt48550;
+    static public int staticInt48551;
+    static public int staticInt48552;
+    static public int staticInt48553;
+    static public int staticInt48554;
+    static public int staticInt48555;
+    static public int staticInt48556;
+    static public int staticInt48557;
+    static public int staticInt48558;
+    static public int staticInt48559;
+    static public int staticInt48560;
+    static public int staticInt48561;
+    static public int staticInt48562;
+    static public int staticInt48563;
+    static public int staticInt48564;
+    static public int staticInt48565;
+    static public int staticInt48566;
+    static public int staticInt48567;
+    static public int staticInt48568;
+    static public int staticInt48569;
+    static public int staticInt48570;
+    static public int staticInt48571;
+    static public int staticInt48572;
+    static public int staticInt48573;
+    static public int staticInt48574;
+    static public int staticInt48575;
+    static public int staticInt48576;
+    static public int staticInt48577;
+    static public int staticInt48578;
+    static public int staticInt48579;
+    static public int staticInt48580;
+    static public int staticInt48581;
+    static public int staticInt48582;
+    static public int staticInt48583;
+    static public int staticInt48584;
+    static public int staticInt48585;
+    static public int staticInt48586;
+    static public int staticInt48587;
+    static public int staticInt48588;
+    static public int staticInt48589;
+    static public int staticInt48590;
+    static public int staticInt48591;
+    static public int staticInt48592;
+    static public int staticInt48593;
+    static public int staticInt48594;
+    static public int staticInt48595;
+    static public int staticInt48596;
+    static public int staticInt48597;
+    static public int staticInt48598;
+    static public int staticInt48599;
+    static public int staticInt48600;
+    static public int staticInt48601;
+    static public int staticInt48602;
+    static public int staticInt48603;
+    static public int staticInt48604;
+    static public int staticInt48605;
+    static public int staticInt48606;
+    static public int staticInt48607;
+    static public int staticInt48608;
+    static public int staticInt48609;
+    static public int staticInt48610;
+    static public int staticInt48611;
+    static public int staticInt48612;
+    static public int staticInt48613;
+    static public int staticInt48614;
+    static public int staticInt48615;
+    static public int staticInt48616;
+    static public int staticInt48617;
+    static public int staticInt48618;
+    static public int staticInt48619;
+    static public int staticInt48620;
+    static public int staticInt48621;
+    static public int staticInt48622;
+    static public int staticInt48623;
+    static public int staticInt48624;
+    static public int staticInt48625;
+    static public int staticInt48626;
+    static public int staticInt48627;
+    static public int staticInt48628;
+    static public int staticInt48629;
+    static public int staticInt48630;
+    static public int staticInt48631;
+    static public int staticInt48632;
+    static public int staticInt48633;
+    static public int staticInt48634;
+    static public int staticInt48635;
+    static public int staticInt48636;
+    static public int staticInt48637;
+    static public int staticInt48638;
+    static public int staticInt48639;
+    static public int staticInt48640;
+    static public int staticInt48641;
+    static public int staticInt48642;
+    static public int staticInt48643;
+    static public int staticInt48644;
+    static public int staticInt48645;
+    static public int staticInt48646;
+    static public int staticInt48647;
+    static public int staticInt48648;
+    static public int staticInt48649;
+    static public int staticInt48650;
+    static public int staticInt48651;
+    static public int staticInt48652;
+    static public int staticInt48653;
+    static public int staticInt48654;
+    static public int staticInt48655;
+    static public int staticInt48656;
+    static public int staticInt48657;
+    static public int staticInt48658;
+    static public int staticInt48659;
+    static public int staticInt48660;
+    static public int staticInt48661;
+    static public int staticInt48662;
+    static public int staticInt48663;
+    static public int staticInt48664;
+    static public int staticInt48665;
+    static public int staticInt48666;
+    static public int staticInt48667;
+    static public int staticInt48668;
+    static public int staticInt48669;
+    static public int staticInt48670;
+    static public int staticInt48671;
+    static public int staticInt48672;
+    static public int staticInt48673;
+    static public int staticInt48674;
+    static public int staticInt48675;
+    static public int staticInt48676;
+    static public int staticInt48677;
+    static public int staticInt48678;
+    static public int staticInt48679;
+    static public int staticInt48680;
+    static public int staticInt48681;
+    static public int staticInt48682;
+    static public int staticInt48683;
+    static public int staticInt48684;
+    static public int staticInt48685;
+    static public int staticInt48686;
+    static public int staticInt48687;
+    static public int staticInt48688;
+    static public int staticInt48689;
+    static public int staticInt48690;
+    static public int staticInt48691;
+    static public int staticInt48692;
+    static public int staticInt48693;
+    static public int staticInt48694;
+    static public int staticInt48695;
+    static public int staticInt48696;
+    static public int staticInt48697;
+    static public int staticInt48698;
+    static public int staticInt48699;
+    static public int staticInt48700;
+    static public int staticInt48701;
+    static public int staticInt48702;
+    static public int staticInt48703;
+    static public int staticInt48704;
+    static public int staticInt48705;
+    static public int staticInt48706;
+    static public int staticInt48707;
+    static public int staticInt48708;
+    static public int staticInt48709;
+    static public int staticInt48710;
+    static public int staticInt48711;
+    static public int staticInt48712;
+    static public int staticInt48713;
+    static public int staticInt48714;
+    static public int staticInt48715;
+    static public int staticInt48716;
+    static public int staticInt48717;
+    static public int staticInt48718;
+    static public int staticInt48719;
+    static public int staticInt48720;
+    static public int staticInt48721;
+    static public int staticInt48722;
+    static public int staticInt48723;
+    static public int staticInt48724;
+    static public int staticInt48725;
+    static public int staticInt48726;
+    static public int staticInt48727;
+    static public int staticInt48728;
+    static public int staticInt48729;
+    static public int staticInt48730;
+    static public int staticInt48731;
+    static public int staticInt48732;
+    static public int staticInt48733;
+    static public int staticInt48734;
+    static public int staticInt48735;
+    static public int staticInt48736;
+    static public int staticInt48737;
+    static public int staticInt48738;
+    static public int staticInt48739;
+    static public int staticInt48740;
+    static public int staticInt48741;
+    static public int staticInt48742;
+    static public int staticInt48743;
+    static public int staticInt48744;
+    static public int staticInt48745;
+    static public int staticInt48746;
+    static public int staticInt48747;
+    static public int staticInt48748;
+    static public int staticInt48749;
+    static public int staticInt48750;
+    static public int staticInt48751;
+    static public int staticInt48752;
+    static public int staticInt48753;
+    static public int staticInt48754;
+    static public int staticInt48755;
+    static public int staticInt48756;
+    static public int staticInt48757;
+    static public int staticInt48758;
+    static public int staticInt48759;
+    static public int staticInt48760;
+    static public int staticInt48761;
+    static public int staticInt48762;
+    static public int staticInt48763;
+    static public int staticInt48764;
+    static public int staticInt48765;
+    static public int staticInt48766;
+    static public int staticInt48767;
+    static public int staticInt48768;
+    static public int staticInt48769;
+    static public int staticInt48770;
+    static public int staticInt48771;
+    static public int staticInt48772;
+    static public int staticInt48773;
+    static public int staticInt48774;
+    static public int staticInt48775;
+    static public int staticInt48776;
+    static public int staticInt48777;
+    static public int staticInt48778;
+    static public int staticInt48779;
+    static public int staticInt48780;
+    static public int staticInt48781;
+    static public int staticInt48782;
+    static public int staticInt48783;
+    static public int staticInt48784;
+    static public int staticInt48785;
+    static public int staticInt48786;
+    static public int staticInt48787;
+    static public int staticInt48788;
+    static public int staticInt48789;
+    static public int staticInt48790;
+    static public int staticInt48791;
+    static public int staticInt48792;
+    static public int staticInt48793;
+    static public int staticInt48794;
+    static public int staticInt48795;
+    static public int staticInt48796;
+    static public int staticInt48797;
+    static public int staticInt48798;
+    static public int staticInt48799;
+    static public int staticInt48800;
+    static public int staticInt48801;
+    static public int staticInt48802;
+    static public int staticInt48803;
+    static public int staticInt48804;
+    static public int staticInt48805;
+    static public int staticInt48806;
+    static public int staticInt48807;
+    static public int staticInt48808;
+    static public int staticInt48809;
+    static public int staticInt48810;
+    static public int staticInt48811;
+    static public int staticInt48812;
+    static public int staticInt48813;
+    static public int staticInt48814;
+    static public int staticInt48815;
+    static public int staticInt48816;
+    static public int staticInt48817;
+    static public int staticInt48818;
+    static public int staticInt48819;
+    static public int staticInt48820;
+    static public int staticInt48821;
+    static public int staticInt48822;
+    static public int staticInt48823;
+    static public int staticInt48824;
+    static public int staticInt48825;
+    static public int staticInt48826;
+    static public int staticInt48827;
+    static public int staticInt48828;
+    static public int staticInt48829;
+    static public int staticInt48830;
+    static public int staticInt48831;
+    static public int staticInt48832;
+    static public int staticInt48833;
+    static public int staticInt48834;
+    static public int staticInt48835;
+    static public int staticInt48836;
+    static public int staticInt48837;
+    static public int staticInt48838;
+    static public int staticInt48839;
+    static public int staticInt48840;
+    static public int staticInt48841;
+    static public int staticInt48842;
+    static public int staticInt48843;
+    static public int staticInt48844;
+    static public int staticInt48845;
+    static public int staticInt48846;
+    static public int staticInt48847;
+    static public int staticInt48848;
+    static public int staticInt48849;
+    static public int staticInt48850;
+    static public int staticInt48851;
+    static public int staticInt48852;
+    static public int staticInt48853;
+    static public int staticInt48854;
+    static public int staticInt48855;
+    static public int staticInt48856;
+    static public int staticInt48857;
+    static public int staticInt48858;
+    static public int staticInt48859;
+    static public int staticInt48860;
+    static public int staticInt48861;
+    static public int staticInt48862;
+    static public int staticInt48863;
+    static public int staticInt48864;
+    static public int staticInt48865;
+    static public int staticInt48866;
+    static public int staticInt48867;
+    static public int staticInt48868;
+    static public int staticInt48869;
+    static public int staticInt48870;
+    static public int staticInt48871;
+    static public int staticInt48872;
+    static public int staticInt48873;
+    static public int staticInt48874;
+    static public int staticInt48875;
+    static public int staticInt48876;
+    static public int staticInt48877;
+    static public int staticInt48878;
+    static public int staticInt48879;
+    static public int staticInt48880;
+    static public int staticInt48881;
+    static public int staticInt48882;
+    static public int staticInt48883;
+    static public int staticInt48884;
+    static public int staticInt48885;
+    static public int staticInt48886;
+    static public int staticInt48887;
+    static public int staticInt48888;
+    static public int staticInt48889;
+    static public int staticInt48890;
+    static public int staticInt48891;
+    static public int staticInt48892;
+    static public int staticInt48893;
+    static public int staticInt48894;
+    static public int staticInt48895;
+    static public int staticInt48896;
+    static public int staticInt48897;
+    static public int staticInt48898;
+    static public int staticInt48899;
+    static public int staticInt48900;
+    static public int staticInt48901;
+    static public int staticInt48902;
+    static public int staticInt48903;
+    static public int staticInt48904;
+    static public int staticInt48905;
+    static public int staticInt48906;
+    static public int staticInt48907;
+    static public int staticInt48908;
+    static public int staticInt48909;
+    static public int staticInt48910;
+    static public int staticInt48911;
+    static public int staticInt48912;
+    static public int staticInt48913;
+    static public int staticInt48914;
+    static public int staticInt48915;
+    static public int staticInt48916;
+    static public int staticInt48917;
+    static public int staticInt48918;
+    static public int staticInt48919;
+    static public int staticInt48920;
+    static public int staticInt48921;
+    static public int staticInt48922;
+    static public int staticInt48923;
+    static public int staticInt48924;
+    static public int staticInt48925;
+    static public int staticInt48926;
+    static public int staticInt48927;
+    static public int staticInt48928;
+    static public int staticInt48929;
+    static public int staticInt48930;
+    static public int staticInt48931;
+    static public int staticInt48932;
+    static public int staticInt48933;
+    static public int staticInt48934;
+    static public int staticInt48935;
+    static public int staticInt48936;
+    static public int staticInt48937;
+    static public int staticInt48938;
+    static public int staticInt48939;
+    static public int staticInt48940;
+    static public int staticInt48941;
+    static public int staticInt48942;
+    static public int staticInt48943;
+    static public int staticInt48944;
+    static public int staticInt48945;
+    static public int staticInt48946;
+    static public int staticInt48947;
+    static public int staticInt48948;
+    static public int staticInt48949;
+    static public int staticInt48950;
+    static public int staticInt48951;
+    static public int staticInt48952;
+    static public int staticInt48953;
+    static public int staticInt48954;
+    static public int staticInt48955;
+    static public int staticInt48956;
+    static public int staticInt48957;
+    static public int staticInt48958;
+    static public int staticInt48959;
+    static public int staticInt48960;
+    static public int staticInt48961;
+    static public int staticInt48962;
+    static public int staticInt48963;
+    static public int staticInt48964;
+    static public int staticInt48965;
+    static public int staticInt48966;
+    static public int staticInt48967;
+    static public int staticInt48968;
+    static public int staticInt48969;
+    static public int staticInt48970;
+    static public int staticInt48971;
+    static public int staticInt48972;
+    static public int staticInt48973;
+    static public int staticInt48974;
+    static public int staticInt48975;
+    static public int staticInt48976;
+    static public int staticInt48977;
+    static public int staticInt48978;
+    static public int staticInt48979;
+    static public int staticInt48980;
+    static public int staticInt48981;
+    static public int staticInt48982;
+    static public int staticInt48983;
+    static public int staticInt48984;
+    static public int staticInt48985;
+    static public int staticInt48986;
+    static public int staticInt48987;
+    static public int staticInt48988;
+    static public int staticInt48989;
+    static public int staticInt48990;
+    static public int staticInt48991;
+    static public int staticInt48992;
+    static public int staticInt48993;
+    static public int staticInt48994;
+    static public int staticInt48995;
+    static public int staticInt48996;
+    static public int staticInt48997;
+    static public int staticInt48998;
+    static public int staticInt48999;
+    static public int staticInt49000;
+    static public int staticInt49001;
+    static public int staticInt49002;
+    static public int staticInt49003;
+    static public int staticInt49004;
+    static public int staticInt49005;
+    static public int staticInt49006;
+    static public int staticInt49007;
+    static public int staticInt49008;
+    static public int staticInt49009;
+    static public int staticInt49010;
+    static public int staticInt49011;
+    static public int staticInt49012;
+    static public int staticInt49013;
+    static public int staticInt49014;
+    static public int staticInt49015;
+    static public int staticInt49016;
+    static public int staticInt49017;
+    static public int staticInt49018;
+    static public int staticInt49019;
+    static public int staticInt49020;
+    static public int staticInt49021;
+    static public int staticInt49022;
+    static public int staticInt49023;
+    static public int staticInt49024;
+    static public int staticInt49025;
+    static public int staticInt49026;
+    static public int staticInt49027;
+    static public int staticInt49028;
+    static public int staticInt49029;
+    static public int staticInt49030;
+    static public int staticInt49031;
+    static public int staticInt49032;
+    static public int staticInt49033;
+    static public int staticInt49034;
+    static public int staticInt49035;
+    static public int staticInt49036;
+    static public int staticInt49037;
+    static public int staticInt49038;
+    static public int staticInt49039;
+    static public int staticInt49040;
+    static public int staticInt49041;
+    static public int staticInt49042;
+    static public int staticInt49043;
+    static public int staticInt49044;
+    static public int staticInt49045;
+    static public int staticInt49046;
+    static public int staticInt49047;
+    static public int staticInt49048;
+    static public int staticInt49049;
+    static public int staticInt49050;
+    static public int staticInt49051;
+    static public int staticInt49052;
+    static public int staticInt49053;
+    static public int staticInt49054;
+    static public int staticInt49055;
+    static public int staticInt49056;
+    static public int staticInt49057;
+    static public int staticInt49058;
+    static public int staticInt49059;
+    static public int staticInt49060;
+    static public int staticInt49061;
+    static public int staticInt49062;
+    static public int staticInt49063;
+    static public int staticInt49064;
+    static public int staticInt49065;
+    static public int staticInt49066;
+    static public int staticInt49067;
+    static public int staticInt49068;
+    static public int staticInt49069;
+    static public int staticInt49070;
+    static public int staticInt49071;
+    static public int staticInt49072;
+    static public int staticInt49073;
+    static public int staticInt49074;
+    static public int staticInt49075;
+    static public int staticInt49076;
+    static public int staticInt49077;
+    static public int staticInt49078;
+    static public int staticInt49079;
+    static public int staticInt49080;
+    static public int staticInt49081;
+    static public int staticInt49082;
+    static public int staticInt49083;
+    static public int staticInt49084;
+    static public int staticInt49085;
+    static public int staticInt49086;
+    static public int staticInt49087;
+    static public int staticInt49088;
+    static public int staticInt49089;
+    static public int staticInt49090;
+    static public int staticInt49091;
+    static public int staticInt49092;
+    static public int staticInt49093;
+    static public int staticInt49094;
+    static public int staticInt49095;
+    static public int staticInt49096;
+    static public int staticInt49097;
+    static public int staticInt49098;
+    static public int staticInt49099;
+    static public int staticInt49100;
+    static public int staticInt49101;
+    static public int staticInt49102;
+    static public int staticInt49103;
+    static public int staticInt49104;
+    static public int staticInt49105;
+    static public int staticInt49106;
+    static public int staticInt49107;
+    static public int staticInt49108;
+    static public int staticInt49109;
+    static public int staticInt49110;
+    static public int staticInt49111;
+    static public int staticInt49112;
+    static public int staticInt49113;
+    static public int staticInt49114;
+    static public int staticInt49115;
+    static public int staticInt49116;
+    static public int staticInt49117;
+    static public int staticInt49118;
+    static public int staticInt49119;
+    static public int staticInt49120;
+    static public int staticInt49121;
+    static public int staticInt49122;
+    static public int staticInt49123;
+    static public int staticInt49124;
+    static public int staticInt49125;
+    static public int staticInt49126;
+    static public int staticInt49127;
+    static public int staticInt49128;
+    static public int staticInt49129;
+    static public int staticInt49130;
+    static public int staticInt49131;
+    static public int staticInt49132;
+    static public int staticInt49133;
+    static public int staticInt49134;
+    static public int staticInt49135;
+    static public int staticInt49136;
+    static public int staticInt49137;
+    static public int staticInt49138;
+    static public int staticInt49139;
+    static public int staticInt49140;
+    static public int staticInt49141;
+    static public int staticInt49142;
+    static public int staticInt49143;
+    static public int staticInt49144;
+    static public int staticInt49145;
+    static public int staticInt49146;
+    static public int staticInt49147;
+    static public int staticInt49148;
+    static public int staticInt49149;
+    static public int staticInt49150;
+    static public int staticInt49151;
+    static public int staticInt49152;
+    static public int staticInt49153;
+    static public int staticInt49154;
+    static public int staticInt49155;
+    static public int staticInt49156;
+    static public int staticInt49157;
+    static public int staticInt49158;
+    static public int staticInt49159;
+    static public int staticInt49160;
+    static public int staticInt49161;
+    static public int staticInt49162;
+    static public int staticInt49163;
+    static public int staticInt49164;
+    static public int staticInt49165;
+    static public int staticInt49166;
+    static public int staticInt49167;
+    static public int staticInt49168;
+    static public int staticInt49169;
+    static public int staticInt49170;
+    static public int staticInt49171;
+    static public int staticInt49172;
+    static public int staticInt49173;
+    static public int staticInt49174;
+    static public int staticInt49175;
+    static public int staticInt49176;
+    static public int staticInt49177;
+    static public int staticInt49178;
+    static public int staticInt49179;
+    static public int staticInt49180;
+    static public int staticInt49181;
+    static public int staticInt49182;
+    static public int staticInt49183;
+    static public int staticInt49184;
+    static public int staticInt49185;
+    static public int staticInt49186;
+    static public int staticInt49187;
+    static public int staticInt49188;
+    static public int staticInt49189;
+    static public int staticInt49190;
+    static public int staticInt49191;
+    static public int staticInt49192;
+    static public int staticInt49193;
+    static public int staticInt49194;
+    static public int staticInt49195;
+    static public int staticInt49196;
+    static public int staticInt49197;
+    static public int staticInt49198;
+    static public int staticInt49199;
+    static public int staticInt49200;
+    static public int staticInt49201;
+    static public int staticInt49202;
+    static public int staticInt49203;
+    static public int staticInt49204;
+    static public int staticInt49205;
+    static public int staticInt49206;
+    static public int staticInt49207;
+    static public int staticInt49208;
+    static public int staticInt49209;
+    static public int staticInt49210;
+    static public int staticInt49211;
+    static public int staticInt49212;
+    static public int staticInt49213;
+    static public int staticInt49214;
+    static public int staticInt49215;
+    static public int staticInt49216;
+    static public int staticInt49217;
+    static public int staticInt49218;
+    static public int staticInt49219;
+    static public int staticInt49220;
+    static public int staticInt49221;
+    static public int staticInt49222;
+    static public int staticInt49223;
+    static public int staticInt49224;
+    static public int staticInt49225;
+    static public int staticInt49226;
+    static public int staticInt49227;
+    static public int staticInt49228;
+    static public int staticInt49229;
+    static public int staticInt49230;
+    static public int staticInt49231;
+    static public int staticInt49232;
+    static public int staticInt49233;
+    static public int staticInt49234;
+    static public int staticInt49235;
+    static public int staticInt49236;
+    static public int staticInt49237;
+    static public int staticInt49238;
+    static public int staticInt49239;
+    static public int staticInt49240;
+    static public int staticInt49241;
+    static public int staticInt49242;
+    static public int staticInt49243;
+    static public int staticInt49244;
+    static public int staticInt49245;
+    static public int staticInt49246;
+    static public int staticInt49247;
+    static public int staticInt49248;
+    static public int staticInt49249;
+    static public int staticInt49250;
+    static public int staticInt49251;
+    static public int staticInt49252;
+    static public int staticInt49253;
+    static public int staticInt49254;
+    static public int staticInt49255;
+    static public int staticInt49256;
+    static public int staticInt49257;
+    static public int staticInt49258;
+    static public int staticInt49259;
+    static public int staticInt49260;
+    static public int staticInt49261;
+    static public int staticInt49262;
+    static public int staticInt49263;
+    static public int staticInt49264;
+    static public int staticInt49265;
+    static public int staticInt49266;
+    static public int staticInt49267;
+    static public int staticInt49268;
+    static public int staticInt49269;
+    static public int staticInt49270;
+    static public int staticInt49271;
+    static public int staticInt49272;
+    static public int staticInt49273;
+    static public int staticInt49274;
+    static public int staticInt49275;
+    static public int staticInt49276;
+    static public int staticInt49277;
+    static public int staticInt49278;
+    static public int staticInt49279;
+    static public int staticInt49280;
+    static public int staticInt49281;
+    static public int staticInt49282;
+    static public int staticInt49283;
+    static public int staticInt49284;
+    static public int staticInt49285;
+    static public int staticInt49286;
+    static public int staticInt49287;
+    static public int staticInt49288;
+    static public int staticInt49289;
+    static public int staticInt49290;
+    static public int staticInt49291;
+    static public int staticInt49292;
+    static public int staticInt49293;
+    static public int staticInt49294;
+    static public int staticInt49295;
+    static public int staticInt49296;
+    static public int staticInt49297;
+    static public int staticInt49298;
+    static public int staticInt49299;
+    static public int staticInt49300;
+    static public int staticInt49301;
+    static public int staticInt49302;
+    static public int staticInt49303;
+    static public int staticInt49304;
+    static public int staticInt49305;
+    static public int staticInt49306;
+    static public int staticInt49307;
+    static public int staticInt49308;
+    static public int staticInt49309;
+    static public int staticInt49310;
+    static public int staticInt49311;
+    static public int staticInt49312;
+    static public int staticInt49313;
+    static public int staticInt49314;
+    static public int staticInt49315;
+    static public int staticInt49316;
+    static public int staticInt49317;
+    static public int staticInt49318;
+    static public int staticInt49319;
+    static public int staticInt49320;
+    static public int staticInt49321;
+    static public int staticInt49322;
+    static public int staticInt49323;
+    static public int staticInt49324;
+    static public int staticInt49325;
+    static public int staticInt49326;
+    static public int staticInt49327;
+    static public int staticInt49328;
+    static public int staticInt49329;
+    static public int staticInt49330;
+    static public int staticInt49331;
+    static public int staticInt49332;
+    static public int staticInt49333;
+    static public int staticInt49334;
+    static public int staticInt49335;
+    static public int staticInt49336;
+    static public int staticInt49337;
+    static public int staticInt49338;
+    static public int staticInt49339;
+    static public int staticInt49340;
+    static public int staticInt49341;
+    static public int staticInt49342;
+    static public int staticInt49343;
+    static public int staticInt49344;
+    static public int staticInt49345;
+    static public int staticInt49346;
+    static public int staticInt49347;
+    static public int staticInt49348;
+    static public int staticInt49349;
+    static public int staticInt49350;
+    static public int staticInt49351;
+    static public int staticInt49352;
+    static public int staticInt49353;
+    static public int staticInt49354;
+    static public int staticInt49355;
+    static public int staticInt49356;
+    static public int staticInt49357;
+    static public int staticInt49358;
+    static public int staticInt49359;
+    static public int staticInt49360;
+    static public int staticInt49361;
+    static public int staticInt49362;
+    static public int staticInt49363;
+    static public int staticInt49364;
+    static public int staticInt49365;
+    static public int staticInt49366;
+    static public int staticInt49367;
+    static public int staticInt49368;
+    static public int staticInt49369;
+    static public int staticInt49370;
+    static public int staticInt49371;
+    static public int staticInt49372;
+    static public int staticInt49373;
+    static public int staticInt49374;
+    static public int staticInt49375;
+    static public int staticInt49376;
+    static public int staticInt49377;
+    static public int staticInt49378;
+    static public int staticInt49379;
+    static public int staticInt49380;
+    static public int staticInt49381;
+    static public int staticInt49382;
+    static public int staticInt49383;
+    static public int staticInt49384;
+    static public int staticInt49385;
+    static public int staticInt49386;
+    static public int staticInt49387;
+    static public int staticInt49388;
+    static public int staticInt49389;
+    static public int staticInt49390;
+    static public int staticInt49391;
+    static public int staticInt49392;
+    static public int staticInt49393;
+    static public int staticInt49394;
+    static public int staticInt49395;
+    static public int staticInt49396;
+    static public int staticInt49397;
+    static public int staticInt49398;
+    static public int staticInt49399;
+    static public int staticInt49400;
+    static public int staticInt49401;
+    static public int staticInt49402;
+    static public int staticInt49403;
+    static public int staticInt49404;
+    static public int staticInt49405;
+    static public int staticInt49406;
+    static public int staticInt49407;
+    static public int staticInt49408;
+    static public int staticInt49409;
+    static public int staticInt49410;
+    static public int staticInt49411;
+    static public int staticInt49412;
+    static public int staticInt49413;
+    static public int staticInt49414;
+    static public int staticInt49415;
+    static public int staticInt49416;
+    static public int staticInt49417;
+    static public int staticInt49418;
+    static public int staticInt49419;
+    static public int staticInt49420;
+    static public int staticInt49421;
+    static public int staticInt49422;
+    static public int staticInt49423;
+    static public int staticInt49424;
+    static public int staticInt49425;
+    static public int staticInt49426;
+    static public int staticInt49427;
+    static public int staticInt49428;
+    static public int staticInt49429;
+    static public int staticInt49430;
+    static public int staticInt49431;
+    static public int staticInt49432;
+    static public int staticInt49433;
+    static public int staticInt49434;
+    static public int staticInt49435;
+    static public int staticInt49436;
+    static public int staticInt49437;
+    static public int staticInt49438;
+    static public int staticInt49439;
+    static public int staticInt49440;
+    static public int staticInt49441;
+    static public int staticInt49442;
+    static public int staticInt49443;
+    static public int staticInt49444;
+    static public int staticInt49445;
+    static public int staticInt49446;
+    static public int staticInt49447;
+    static public int staticInt49448;
+    static public int staticInt49449;
+    static public int staticInt49450;
+    static public int staticInt49451;
+    static public int staticInt49452;
+    static public int staticInt49453;
+    static public int staticInt49454;
+    static public int staticInt49455;
+    static public int staticInt49456;
+    static public int staticInt49457;
+    static public int staticInt49458;
+    static public int staticInt49459;
+    static public int staticInt49460;
+    static public int staticInt49461;
+    static public int staticInt49462;
+    static public int staticInt49463;
+    static public int staticInt49464;
+    static public int staticInt49465;
+    static public int staticInt49466;
+    static public int staticInt49467;
+    static public int staticInt49468;
+    static public int staticInt49469;
+    static public int staticInt49470;
+    static public int staticInt49471;
+    static public int staticInt49472;
+    static public int staticInt49473;
+    static public int staticInt49474;
+    static public int staticInt49475;
+    static public int staticInt49476;
+    static public int staticInt49477;
+    static public int staticInt49478;
+    static public int staticInt49479;
+    static public int staticInt49480;
+    static public int staticInt49481;
+    static public int staticInt49482;
+    static public int staticInt49483;
+    static public int staticInt49484;
+    static public int staticInt49485;
+    static public int staticInt49486;
+    static public int staticInt49487;
+    static public int staticInt49488;
+    static public int staticInt49489;
+    static public int staticInt49490;
+    static public int staticInt49491;
+    static public int staticInt49492;
+    static public int staticInt49493;
+    static public int staticInt49494;
+    static public int staticInt49495;
+    static public int staticInt49496;
+    static public int staticInt49497;
+    static public int staticInt49498;
+    static public int staticInt49499;
+    static public int staticInt49500;
+    static public int staticInt49501;
+    static public int staticInt49502;
+    static public int staticInt49503;
+    static public int staticInt49504;
+    static public int staticInt49505;
+    static public int staticInt49506;
+    static public int staticInt49507;
+    static public int staticInt49508;
+    static public int staticInt49509;
+    static public int staticInt49510;
+    static public int staticInt49511;
+    static public int staticInt49512;
+    static public int staticInt49513;
+    static public int staticInt49514;
+    static public int staticInt49515;
+    static public int staticInt49516;
+    static public int staticInt49517;
+    static public int staticInt49518;
+    static public int staticInt49519;
+    static public int staticInt49520;
+    static public int staticInt49521;
+    static public int staticInt49522;
+    static public int staticInt49523;
+    static public int staticInt49524;
+    static public int staticInt49525;
+    static public int staticInt49526;
+    static public int staticInt49527;
+    static public int staticInt49528;
+    static public int staticInt49529;
+    static public int staticInt49530;
+    static public int staticInt49531;
+    static public int staticInt49532;
+    static public int staticInt49533;
+    static public int staticInt49534;
+    static public int staticInt49535;
+    static public int staticInt49536;
+    static public int staticInt49537;
+    static public int staticInt49538;
+    static public int staticInt49539;
+    static public int staticInt49540;
+    static public int staticInt49541;
+    static public int staticInt49542;
+    static public int staticInt49543;
+    static public int staticInt49544;
+    static public int staticInt49545;
+    static public int staticInt49546;
+    static public int staticInt49547;
+    static public int staticInt49548;
+    static public int staticInt49549;
+    static public int staticInt49550;
+    static public int staticInt49551;
+    static public int staticInt49552;
+    static public int staticInt49553;
+    static public int staticInt49554;
+    static public int staticInt49555;
+    static public int staticInt49556;
+    static public int staticInt49557;
+    static public int staticInt49558;
+    static public int staticInt49559;
+    static public int staticInt49560;
+    static public int staticInt49561;
+    static public int staticInt49562;
+    static public int staticInt49563;
+    static public int staticInt49564;
+    static public int staticInt49565;
+    static public int staticInt49566;
+    static public int staticInt49567;
+    static public int staticInt49568;
+    static public int staticInt49569;
+    static public int staticInt49570;
+    static public int staticInt49571;
+    static public int staticInt49572;
+    static public int staticInt49573;
+    static public int staticInt49574;
+    static public int staticInt49575;
+    static public int staticInt49576;
+    static public int staticInt49577;
+    static public int staticInt49578;
+    static public int staticInt49579;
+    static public int staticInt49580;
+    static public int staticInt49581;
+    static public int staticInt49582;
+    static public int staticInt49583;
+    static public int staticInt49584;
+    static public int staticInt49585;
+    static public int staticInt49586;
+    static public int staticInt49587;
+    static public int staticInt49588;
+    static public int staticInt49589;
+    static public int staticInt49590;
+    static public int staticInt49591;
+    static public int staticInt49592;
+    static public int staticInt49593;
+    static public int staticInt49594;
+    static public int staticInt49595;
+    static public int staticInt49596;
+    static public int staticInt49597;
+    static public int staticInt49598;
+    static public int staticInt49599;
+    static public int staticInt49600;
+    static public int staticInt49601;
+    static public int staticInt49602;
+    static public int staticInt49603;
+    static public int staticInt49604;
+    static public int staticInt49605;
+    static public int staticInt49606;
+    static public int staticInt49607;
+    static public int staticInt49608;
+    static public int staticInt49609;
+    static public int staticInt49610;
+    static public int staticInt49611;
+    static public int staticInt49612;
+    static public int staticInt49613;
+    static public int staticInt49614;
+    static public int staticInt49615;
+    static public int staticInt49616;
+    static public int staticInt49617;
+    static public int staticInt49618;
+    static public int staticInt49619;
+    static public int staticInt49620;
+    static public int staticInt49621;
+    static public int staticInt49622;
+    static public int staticInt49623;
+    static public int staticInt49624;
+    static public int staticInt49625;
+    static public int staticInt49626;
+    static public int staticInt49627;
+    static public int staticInt49628;
+    static public int staticInt49629;
+    static public int staticInt49630;
+    static public int staticInt49631;
+    static public int staticInt49632;
+    static public int staticInt49633;
+    static public int staticInt49634;
+    static public int staticInt49635;
+    static public int staticInt49636;
+    static public int staticInt49637;
+    static public int staticInt49638;
+    static public int staticInt49639;
+    static public int staticInt49640;
+    static public int staticInt49641;
+    static public int staticInt49642;
+    static public int staticInt49643;
+    static public int staticInt49644;
+    static public int staticInt49645;
+    static public int staticInt49646;
+    static public int staticInt49647;
+    static public int staticInt49648;
+    static public int staticInt49649;
+    static public int staticInt49650;
+    static public int staticInt49651;
+    static public int staticInt49652;
+    static public int staticInt49653;
+    static public int staticInt49654;
+    static public int staticInt49655;
+    static public int staticInt49656;
+    static public int staticInt49657;
+    static public int staticInt49658;
+    static public int staticInt49659;
+    static public int staticInt49660;
+    static public int staticInt49661;
+    static public int staticInt49662;
+    static public int staticInt49663;
+    static public int staticInt49664;
+    static public int staticInt49665;
+    static public int staticInt49666;
+    static public int staticInt49667;
+    static public int staticInt49668;
+    static public int staticInt49669;
+    static public int staticInt49670;
+    static public int staticInt49671;
+    static public int staticInt49672;
+    static public int staticInt49673;
+    static public int staticInt49674;
+    static public int staticInt49675;
+    static public int staticInt49676;
+    static public int staticInt49677;
+    static public int staticInt49678;
+    static public int staticInt49679;
+    static public int staticInt49680;
+    static public int staticInt49681;
+    static public int staticInt49682;
+    static public int staticInt49683;
+    static public int staticInt49684;
+    static public int staticInt49685;
+    static public int staticInt49686;
+    static public int staticInt49687;
+    static public int staticInt49688;
+    static public int staticInt49689;
+    static public int staticInt49690;
+    static public int staticInt49691;
+    static public int staticInt49692;
+    static public int staticInt49693;
+    static public int staticInt49694;
+    static public int staticInt49695;
+    static public int staticInt49696;
+    static public int staticInt49697;
+    static public int staticInt49698;
+    static public int staticInt49699;
+    static public int staticInt49700;
+    static public int staticInt49701;
+    static public int staticInt49702;
+    static public int staticInt49703;
+    static public int staticInt49704;
+    static public int staticInt49705;
+    static public int staticInt49706;
+    static public int staticInt49707;
+    static public int staticInt49708;
+    static public int staticInt49709;
+    static public int staticInt49710;
+    static public int staticInt49711;
+    static public int staticInt49712;
+    static public int staticInt49713;
+    static public int staticInt49714;
+    static public int staticInt49715;
+    static public int staticInt49716;
+    static public int staticInt49717;
+    static public int staticInt49718;
+    static public int staticInt49719;
+    static public int staticInt49720;
+    static public int staticInt49721;
+    static public int staticInt49722;
+    static public int staticInt49723;
+    static public int staticInt49724;
+    static public int staticInt49725;
+    static public int staticInt49726;
+    static public int staticInt49727;
+    static public int staticInt49728;
+    static public int staticInt49729;
+    static public int staticInt49730;
+    static public int staticInt49731;
+    static public int staticInt49732;
+    static public int staticInt49733;
+    static public int staticInt49734;
+    static public int staticInt49735;
+    static public int staticInt49736;
+    static public int staticInt49737;
+    static public int staticInt49738;
+    static public int staticInt49739;
+    static public int staticInt49740;
+    static public int staticInt49741;
+    static public int staticInt49742;
+    static public int staticInt49743;
+    static public int staticInt49744;
+    static public int staticInt49745;
+    static public int staticInt49746;
+    static public int staticInt49747;
+    static public int staticInt49748;
+    static public int staticInt49749;
+    static public int staticInt49750;
+    static public int staticInt49751;
+    static public int staticInt49752;
+    static public int staticInt49753;
+    static public int staticInt49754;
+    static public int staticInt49755;
+    static public int staticInt49756;
+    static public int staticInt49757;
+    static public int staticInt49758;
+    static public int staticInt49759;
+    static public int staticInt49760;
+    static public int staticInt49761;
+    static public int staticInt49762;
+    static public int staticInt49763;
+    static public int staticInt49764;
+    static public int staticInt49765;
+    static public int staticInt49766;
+    static public int staticInt49767;
+    static public int staticInt49768;
+    static public int staticInt49769;
+    static public int staticInt49770;
+    static public int staticInt49771;
+    static public int staticInt49772;
+    static public int staticInt49773;
+    static public int staticInt49774;
+    static public int staticInt49775;
+    static public int staticInt49776;
+    static public int staticInt49777;
+    static public int staticInt49778;
+    static public int staticInt49779;
+    static public int staticInt49780;
+    static public int staticInt49781;
+    static public int staticInt49782;
+    static public int staticInt49783;
+    static public int staticInt49784;
+    static public int staticInt49785;
+    static public int staticInt49786;
+    static public int staticInt49787;
+    static public int staticInt49788;
+    static public int staticInt49789;
+    static public int staticInt49790;
+    static public int staticInt49791;
+    static public int staticInt49792;
+    static public int staticInt49793;
+    static public int staticInt49794;
+    static public int staticInt49795;
+    static public int staticInt49796;
+    static public int staticInt49797;
+    static public int staticInt49798;
+    static public int staticInt49799;
+    static public int staticInt49800;
+    static public int staticInt49801;
+    static public int staticInt49802;
+    static public int staticInt49803;
+    static public int staticInt49804;
+    static public int staticInt49805;
+    static public int staticInt49806;
+    static public int staticInt49807;
+    static public int staticInt49808;
+    static public int staticInt49809;
+    static public int staticInt49810;
+    static public int staticInt49811;
+    static public int staticInt49812;
+    static public int staticInt49813;
+    static public int staticInt49814;
+    static public int staticInt49815;
+    static public int staticInt49816;
+    static public int staticInt49817;
+    static public int staticInt49818;
+    static public int staticInt49819;
+    static public int staticInt49820;
+    static public int staticInt49821;
+    static public int staticInt49822;
+    static public int staticInt49823;
+    static public int staticInt49824;
+    static public int staticInt49825;
+    static public int staticInt49826;
+    static public int staticInt49827;
+    static public int staticInt49828;
+    static public int staticInt49829;
+    static public int staticInt49830;
+    static public int staticInt49831;
+    static public int staticInt49832;
+    static public int staticInt49833;
+    static public int staticInt49834;
+    static public int staticInt49835;
+    static public int staticInt49836;
+    static public int staticInt49837;
+    static public int staticInt49838;
+    static public int staticInt49839;
+    static public int staticInt49840;
+    static public int staticInt49841;
+    static public int staticInt49842;
+    static public int staticInt49843;
+    static public int staticInt49844;
+    static public int staticInt49845;
+    static public int staticInt49846;
+    static public int staticInt49847;
+    static public int staticInt49848;
+    static public int staticInt49849;
+    static public int staticInt49850;
+    static public int staticInt49851;
+    static public int staticInt49852;
+    static public int staticInt49853;
+    static public int staticInt49854;
+    static public int staticInt49855;
+    static public int staticInt49856;
+    static public int staticInt49857;
+    static public int staticInt49858;
+    static public int staticInt49859;
+    static public int staticInt49860;
+    static public int staticInt49861;
+    static public int staticInt49862;
+    static public int staticInt49863;
+    static public int staticInt49864;
+    static public int staticInt49865;
+    static public int staticInt49866;
+    static public int staticInt49867;
+    static public int staticInt49868;
+    static public int staticInt49869;
+    static public int staticInt49870;
+    static public int staticInt49871;
+    static public int staticInt49872;
+    static public int staticInt49873;
+    static public int staticInt49874;
+    static public int staticInt49875;
+    static public int staticInt49876;
+    static public int staticInt49877;
+    static public int staticInt49878;
+    static public int staticInt49879;
+    static public int staticInt49880;
+    static public int staticInt49881;
+    static public int staticInt49882;
+    static public int staticInt49883;
+    static public int staticInt49884;
+    static public int staticInt49885;
+    static public int staticInt49886;
+    static public int staticInt49887;
+    static public int staticInt49888;
+    static public int staticInt49889;
+    static public int staticInt49890;
+    static public int staticInt49891;
+    static public int staticInt49892;
+    static public int staticInt49893;
+    static public int staticInt49894;
+    static public int staticInt49895;
+    static public int staticInt49896;
+    static public int staticInt49897;
+    static public int staticInt49898;
+    static public int staticInt49899;
+    static public int staticInt49900;
+    static public int staticInt49901;
+    static public int staticInt49902;
+    static public int staticInt49903;
+    static public int staticInt49904;
+    static public int staticInt49905;
+    static public int staticInt49906;
+    static public int staticInt49907;
+    static public int staticInt49908;
+    static public int staticInt49909;
+    static public int staticInt49910;
+    static public int staticInt49911;
+    static public int staticInt49912;
+    static public int staticInt49913;
+    static public int staticInt49914;
+    static public int staticInt49915;
+    static public int staticInt49916;
+    static public int staticInt49917;
+    static public int staticInt49918;
+    static public int staticInt49919;
+    static public int staticInt49920;
+    static public int staticInt49921;
+    static public int staticInt49922;
+    static public int staticInt49923;
+    static public int staticInt49924;
+    static public int staticInt49925;
+    static public int staticInt49926;
+    static public int staticInt49927;
+    static public int staticInt49928;
+    static public int staticInt49929;
+    static public int staticInt49930;
+    static public int staticInt49931;
+    static public int staticInt49932;
+    static public int staticInt49933;
+    static public int staticInt49934;
+    static public int staticInt49935;
+    static public int staticInt49936;
+    static public int staticInt49937;
+    static public int staticInt49938;
+    static public int staticInt49939;
+    static public int staticInt49940;
+    static public int staticInt49941;
+    static public int staticInt49942;
+    static public int staticInt49943;
+    static public int staticInt49944;
+    static public int staticInt49945;
+    static public int staticInt49946;
+    static public int staticInt49947;
+    static public int staticInt49948;
+    static public int staticInt49949;
+    static public int staticInt49950;
+    static public int staticInt49951;
+    static public int staticInt49952;
+    static public int staticInt49953;
+    static public int staticInt49954;
+    static public int staticInt49955;
+    static public int staticInt49956;
+    static public int staticInt49957;
+    static public int staticInt49958;
+    static public int staticInt49959;
+    static public int staticInt49960;
+    static public int staticInt49961;
+    static public int staticInt49962;
+    static public int staticInt49963;
+    static public int staticInt49964;
+    static public int staticInt49965;
+    static public int staticInt49966;
+    static public int staticInt49967;
+    static public int staticInt49968;
+    static public int staticInt49969;
+    static public int staticInt49970;
+    static public int staticInt49971;
+    static public int staticInt49972;
+    static public int staticInt49973;
+    static public int staticInt49974;
+    static public int staticInt49975;
+    static public int staticInt49976;
+    static public int staticInt49977;
+    static public int staticInt49978;
+    static public int staticInt49979;
+    static public int staticInt49980;
+    static public int staticInt49981;
+    static public int staticInt49982;
+    static public int staticInt49983;
+    static public int staticInt49984;
+    static public int staticInt49985;
+    static public int staticInt49986;
+    static public int staticInt49987;
+    static public int staticInt49988;
+    static public int staticInt49989;
+    static public int staticInt49990;
+    static public int staticInt49991;
+    static public int staticInt49992;
+    static public int staticInt49993;
+    static public int staticInt49994;
+    static public int staticInt49995;
+    static public int staticInt49996;
+    static public int staticInt49997;
+    static public int staticInt49998;
+    static public int staticInt49999;
+    static public int staticInt50000;
+    static public int staticInt50001;
+    static public int staticInt50002;
+    static public int staticInt50003;
+    static public int staticInt50004;
+    static public int staticInt50005;
+    static public int staticInt50006;
+    static public int staticInt50007;
+    static public int staticInt50008;
+    static public int staticInt50009;
+    static public int staticInt50010;
+    static public int staticInt50011;
+    static public int staticInt50012;
+    static public int staticInt50013;
+    static public int staticInt50014;
+    static public int staticInt50015;
+    static public int staticInt50016;
+    static public int staticInt50017;
+    static public int staticInt50018;
+    static public int staticInt50019;
+    static public int staticInt50020;
+    static public int staticInt50021;
+    static public int staticInt50022;
+    static public int staticInt50023;
+    static public int staticInt50024;
+    static public int staticInt50025;
+    static public int staticInt50026;
+    static public int staticInt50027;
+    static public int staticInt50028;
+    static public int staticInt50029;
+    static public int staticInt50030;
+    static public int staticInt50031;
+    static public int staticInt50032;
+    static public int staticInt50033;
+    static public int staticInt50034;
+    static public int staticInt50035;
+    static public int staticInt50036;
+    static public int staticInt50037;
+    static public int staticInt50038;
+    static public int staticInt50039;
+    static public int staticInt50040;
+    static public int staticInt50041;
+    static public int staticInt50042;
+    static public int staticInt50043;
+    static public int staticInt50044;
+    static public int staticInt50045;
+    static public int staticInt50046;
+    static public int staticInt50047;
+    static public int staticInt50048;
+    static public int staticInt50049;
+    static public int staticInt50050;
+    static public int staticInt50051;
+    static public int staticInt50052;
+    static public int staticInt50053;
+    static public int staticInt50054;
+    static public int staticInt50055;
+    static public int staticInt50056;
+    static public int staticInt50057;
+    static public int staticInt50058;
+    static public int staticInt50059;
+    static public int staticInt50060;
+    static public int staticInt50061;
+    static public int staticInt50062;
+    static public int staticInt50063;
+    static public int staticInt50064;
+    static public int staticInt50065;
+    static public int staticInt50066;
+    static public int staticInt50067;
+    static public int staticInt50068;
+    static public int staticInt50069;
+    static public int staticInt50070;
+    static public int staticInt50071;
+    static public int staticInt50072;
+    static public int staticInt50073;
+    static public int staticInt50074;
+    static public int staticInt50075;
+    static public int staticInt50076;
+    static public int staticInt50077;
+    static public int staticInt50078;
+    static public int staticInt50079;
+    static public int staticInt50080;
+    static public int staticInt50081;
+    static public int staticInt50082;
+    static public int staticInt50083;
+    static public int staticInt50084;
+    static public int staticInt50085;
+    static public int staticInt50086;
+    static public int staticInt50087;
+    static public int staticInt50088;
+    static public int staticInt50089;
+    static public int staticInt50090;
+    static public int staticInt50091;
+    static public int staticInt50092;
+    static public int staticInt50093;
+    static public int staticInt50094;
+    static public int staticInt50095;
+    static public int staticInt50096;
+    static public int staticInt50097;
+    static public int staticInt50098;
+    static public int staticInt50099;
+    static public int staticInt50100;
+    static public int staticInt50101;
+    static public int staticInt50102;
+    static public int staticInt50103;
+    static public int staticInt50104;
+    static public int staticInt50105;
+    static public int staticInt50106;
+    static public int staticInt50107;
+    static public int staticInt50108;
+    static public int staticInt50109;
+    static public int staticInt50110;
+    static public int staticInt50111;
+    static public int staticInt50112;
+    static public int staticInt50113;
+    static public int staticInt50114;
+    static public int staticInt50115;
+    static public int staticInt50116;
+    static public int staticInt50117;
+    static public int staticInt50118;
+    static public int staticInt50119;
+    static public int staticInt50120;
+    static public int staticInt50121;
+    static public int staticInt50122;
+    static public int staticInt50123;
+    static public int staticInt50124;
+    static public int staticInt50125;
+    static public int staticInt50126;
+    static public int staticInt50127;
+    static public int staticInt50128;
+    static public int staticInt50129;
+    static public int staticInt50130;
+    static public int staticInt50131;
+    static public int staticInt50132;
+    static public int staticInt50133;
+    static public int staticInt50134;
+    static public int staticInt50135;
+    static public int staticInt50136;
+    static public int staticInt50137;
+    static public int staticInt50138;
+    static public int staticInt50139;
+    static public int staticInt50140;
+    static public int staticInt50141;
+    static public int staticInt50142;
+    static public int staticInt50143;
+    static public int staticInt50144;
+    static public int staticInt50145;
+    static public int staticInt50146;
+    static public int staticInt50147;
+    static public int staticInt50148;
+    static public int staticInt50149;
+    static public int staticInt50150;
+    static public int staticInt50151;
+    static public int staticInt50152;
+    static public int staticInt50153;
+    static public int staticInt50154;
+    static public int staticInt50155;
+    static public int staticInt50156;
+    static public int staticInt50157;
+    static public int staticInt50158;
+    static public int staticInt50159;
+    static public int staticInt50160;
+    static public int staticInt50161;
+    static public int staticInt50162;
+    static public int staticInt50163;
+    static public int staticInt50164;
+    static public int staticInt50165;
+    static public int staticInt50166;
+    static public int staticInt50167;
+    static public int staticInt50168;
+    static public int staticInt50169;
+    static public int staticInt50170;
+    static public int staticInt50171;
+    static public int staticInt50172;
+    static public int staticInt50173;
+    static public int staticInt50174;
+    static public int staticInt50175;
+    static public int staticInt50176;
+    static public int staticInt50177;
+    static public int staticInt50178;
+    static public int staticInt50179;
+    static public int staticInt50180;
+    static public int staticInt50181;
+    static public int staticInt50182;
+    static public int staticInt50183;
+    static public int staticInt50184;
+    static public int staticInt50185;
+    static public int staticInt50186;
+    static public int staticInt50187;
+    static public int staticInt50188;
+    static public int staticInt50189;
+    static public int staticInt50190;
+    static public int staticInt50191;
+    static public int staticInt50192;
+    static public int staticInt50193;
+    static public int staticInt50194;
+    static public int staticInt50195;
+    static public int staticInt50196;
+    static public int staticInt50197;
+    static public int staticInt50198;
+    static public int staticInt50199;
+    static public int staticInt50200;
+    static public int staticInt50201;
+    static public int staticInt50202;
+    static public int staticInt50203;
+    static public int staticInt50204;
+    static public int staticInt50205;
+    static public int staticInt50206;
+    static public int staticInt50207;
+    static public int staticInt50208;
+    static public int staticInt50209;
+    static public int staticInt50210;
+    static public int staticInt50211;
+    static public int staticInt50212;
+    static public int staticInt50213;
+    static public int staticInt50214;
+    static public int staticInt50215;
+    static public int staticInt50216;
+    static public int staticInt50217;
+    static public int staticInt50218;
+    static public int staticInt50219;
+    static public int staticInt50220;
+    static public int staticInt50221;
+    static public int staticInt50222;
+    static public int staticInt50223;
+    static public int staticInt50224;
+    static public int staticInt50225;
+    static public int staticInt50226;
+    static public int staticInt50227;
+    static public int staticInt50228;
+    static public int staticInt50229;
+    static public int staticInt50230;
+    static public int staticInt50231;
+    static public int staticInt50232;
+    static public int staticInt50233;
+    static public int staticInt50234;
+    static public int staticInt50235;
+    static public int staticInt50236;
+    static public int staticInt50237;
+    static public int staticInt50238;
+    static public int staticInt50239;
+    static public int staticInt50240;
+    static public int staticInt50241;
+    static public int staticInt50242;
+    static public int staticInt50243;
+    static public int staticInt50244;
+    static public int staticInt50245;
+    static public int staticInt50246;
+    static public int staticInt50247;
+    static public int staticInt50248;
+    static public int staticInt50249;
+    static public int staticInt50250;
+    static public int staticInt50251;
+    static public int staticInt50252;
+    static public int staticInt50253;
+    static public int staticInt50254;
+    static public int staticInt50255;
+    static public int staticInt50256;
+    static public int staticInt50257;
+    static public int staticInt50258;
+    static public int staticInt50259;
+    static public int staticInt50260;
+    static public int staticInt50261;
+    static public int staticInt50262;
+    static public int staticInt50263;
+    static public int staticInt50264;
+    static public int staticInt50265;
+    static public int staticInt50266;
+    static public int staticInt50267;
+    static public int staticInt50268;
+    static public int staticInt50269;
+    static public int staticInt50270;
+    static public int staticInt50271;
+    static public int staticInt50272;
+    static public int staticInt50273;
+    static public int staticInt50274;
+    static public int staticInt50275;
+    static public int staticInt50276;
+    static public int staticInt50277;
+    static public int staticInt50278;
+    static public int staticInt50279;
+    static public int staticInt50280;
+    static public int staticInt50281;
+    static public int staticInt50282;
+    static public int staticInt50283;
+    static public int staticInt50284;
+    static public int staticInt50285;
+    static public int staticInt50286;
+    static public int staticInt50287;
+    static public int staticInt50288;
+    static public int staticInt50289;
+    static public int staticInt50290;
+    static public int staticInt50291;
+    static public int staticInt50292;
+    static public int staticInt50293;
+    static public int staticInt50294;
+    static public int staticInt50295;
+    static public int staticInt50296;
+    static public int staticInt50297;
+    static public int staticInt50298;
+    static public int staticInt50299;
+    static public int staticInt50300;
+    static public int staticInt50301;
+    static public int staticInt50302;
+    static public int staticInt50303;
+    static public int staticInt50304;
+    static public int staticInt50305;
+    static public int staticInt50306;
+    static public int staticInt50307;
+    static public int staticInt50308;
+    static public int staticInt50309;
+    static public int staticInt50310;
+    static public int staticInt50311;
+    static public int staticInt50312;
+    static public int staticInt50313;
+    static public int staticInt50314;
+    static public int staticInt50315;
+    static public int staticInt50316;
+    static public int staticInt50317;
+    static public int staticInt50318;
+    static public int staticInt50319;
+    static public int staticInt50320;
+    static public int staticInt50321;
+    static public int staticInt50322;
+    static public int staticInt50323;
+    static public int staticInt50324;
+    static public int staticInt50325;
+    static public int staticInt50326;
+    static public int staticInt50327;
+    static public int staticInt50328;
+    static public int staticInt50329;
+    static public int staticInt50330;
+    static public int staticInt50331;
+    static public int staticInt50332;
+    static public int staticInt50333;
+    static public int staticInt50334;
+    static public int staticInt50335;
+    static public int staticInt50336;
+    static public int staticInt50337;
+    static public int staticInt50338;
+    static public int staticInt50339;
+    static public int staticInt50340;
+    static public int staticInt50341;
+    static public int staticInt50342;
+    static public int staticInt50343;
+    static public int staticInt50344;
+    static public int staticInt50345;
+    static public int staticInt50346;
+    static public int staticInt50347;
+    static public int staticInt50348;
+    static public int staticInt50349;
+    static public int staticInt50350;
+    static public int staticInt50351;
+    static public int staticInt50352;
+    static public int staticInt50353;
+    static public int staticInt50354;
+    static public int staticInt50355;
+    static public int staticInt50356;
+    static public int staticInt50357;
+    static public int staticInt50358;
+    static public int staticInt50359;
+    static public int staticInt50360;
+    static public int staticInt50361;
+    static public int staticInt50362;
+    static public int staticInt50363;
+    static public int staticInt50364;
+    static public int staticInt50365;
+    static public int staticInt50366;
+    static public int staticInt50367;
+    static public int staticInt50368;
+    static public int staticInt50369;
+    static public int staticInt50370;
+    static public int staticInt50371;
+    static public int staticInt50372;
+    static public int staticInt50373;
+    static public int staticInt50374;
+    static public int staticInt50375;
+    static public int staticInt50376;
+    static public int staticInt50377;
+    static public int staticInt50378;
+    static public int staticInt50379;
+    static public int staticInt50380;
+    static public int staticInt50381;
+    static public int staticInt50382;
+    static public int staticInt50383;
+    static public int staticInt50384;
+    static public int staticInt50385;
+    static public int staticInt50386;
+    static public int staticInt50387;
+    static public int staticInt50388;
+    static public int staticInt50389;
+    static public int staticInt50390;
+    static public int staticInt50391;
+    static public int staticInt50392;
+    static public int staticInt50393;
+    static public int staticInt50394;
+    static public int staticInt50395;
+    static public int staticInt50396;
+    static public int staticInt50397;
+    static public int staticInt50398;
+    static public int staticInt50399;
+    static public int staticInt50400;
+    static public int staticInt50401;
+    static public int staticInt50402;
+    static public int staticInt50403;
+    static public int staticInt50404;
+    static public int staticInt50405;
+    static public int staticInt50406;
+    static public int staticInt50407;
+    static public int staticInt50408;
+    static public int staticInt50409;
+    static public int staticInt50410;
+    static public int staticInt50411;
+    static public int staticInt50412;
+    static public int staticInt50413;
+    static public int staticInt50414;
+    static public int staticInt50415;
+    static public int staticInt50416;
+    static public int staticInt50417;
+    static public int staticInt50418;
+    static public int staticInt50419;
+    static public int staticInt50420;
+    static public int staticInt50421;
+    static public int staticInt50422;
+    static public int staticInt50423;
+    static public int staticInt50424;
+    static public int staticInt50425;
+    static public int staticInt50426;
+    static public int staticInt50427;
+    static public int staticInt50428;
+    static public int staticInt50429;
+    static public int staticInt50430;
+    static public int staticInt50431;
+    static public int staticInt50432;
+    static public int staticInt50433;
+    static public int staticInt50434;
+    static public int staticInt50435;
+    static public int staticInt50436;
+    static public int staticInt50437;
+    static public int staticInt50438;
+    static public int staticInt50439;
+    static public int staticInt50440;
+    static public int staticInt50441;
+    static public int staticInt50442;
+    static public int staticInt50443;
+    static public int staticInt50444;
+    static public int staticInt50445;
+    static public int staticInt50446;
+    static public int staticInt50447;
+    static public int staticInt50448;
+    static public int staticInt50449;
+    static public int staticInt50450;
+    static public int staticInt50451;
+    static public int staticInt50452;
+    static public int staticInt50453;
+    static public int staticInt50454;
+    static public int staticInt50455;
+    static public int staticInt50456;
+    static public int staticInt50457;
+    static public int staticInt50458;
+    static public int staticInt50459;
+    static public int staticInt50460;
+    static public int staticInt50461;
+    static public int staticInt50462;
+    static public int staticInt50463;
+    static public int staticInt50464;
+    static public int staticInt50465;
+    static public int staticInt50466;
+    static public int staticInt50467;
+    static public int staticInt50468;
+    static public int staticInt50469;
+    static public int staticInt50470;
+    static public int staticInt50471;
+    static public int staticInt50472;
+    static public int staticInt50473;
+    static public int staticInt50474;
+    static public int staticInt50475;
+    static public int staticInt50476;
+    static public int staticInt50477;
+    static public int staticInt50478;
+    static public int staticInt50479;
+    static public int staticInt50480;
+    static public int staticInt50481;
+    static public int staticInt50482;
+    static public int staticInt50483;
+    static public int staticInt50484;
+    static public int staticInt50485;
+    static public int staticInt50486;
+    static public int staticInt50487;
+    static public int staticInt50488;
+    static public int staticInt50489;
+    static public int staticInt50490;
+    static public int staticInt50491;
+    static public int staticInt50492;
+    static public int staticInt50493;
+    static public int staticInt50494;
+    static public int staticInt50495;
+    static public int staticInt50496;
+    static public int staticInt50497;
+    static public int staticInt50498;
+    static public int staticInt50499;
+    static public int staticInt50500;
+    static public int staticInt50501;
+    static public int staticInt50502;
+    static public int staticInt50503;
+    static public int staticInt50504;
+    static public int staticInt50505;
+    static public int staticInt50506;
+    static public int staticInt50507;
+    static public int staticInt50508;
+    static public int staticInt50509;
+    static public int staticInt50510;
+    static public int staticInt50511;
+    static public int staticInt50512;
+    static public int staticInt50513;
+    static public int staticInt50514;
+    static public int staticInt50515;
+    static public int staticInt50516;
+    static public int staticInt50517;
+    static public int staticInt50518;
+    static public int staticInt50519;
+    static public int staticInt50520;
+    static public int staticInt50521;
+    static public int staticInt50522;
+    static public int staticInt50523;
+    static public int staticInt50524;
+    static public int staticInt50525;
+    static public int staticInt50526;
+    static public int staticInt50527;
+    static public int staticInt50528;
+    static public int staticInt50529;
+    static public int staticInt50530;
+    static public int staticInt50531;
+    static public int staticInt50532;
+    static public int staticInt50533;
+    static public int staticInt50534;
+    static public int staticInt50535;
+    static public int staticInt50536;
+    static public int staticInt50537;
+    static public int staticInt50538;
+    static public int staticInt50539;
+    static public int staticInt50540;
+    static public int staticInt50541;
+    static public int staticInt50542;
+    static public int staticInt50543;
+    static public int staticInt50544;
+    static public int staticInt50545;
+    static public int staticInt50546;
+    static public int staticInt50547;
+    static public int staticInt50548;
+    static public int staticInt50549;
+    static public int staticInt50550;
+    static public int staticInt50551;
+    static public int staticInt50552;
+    static public int staticInt50553;
+    static public int staticInt50554;
+    static public int staticInt50555;
+    static public int staticInt50556;
+    static public int staticInt50557;
+    static public int staticInt50558;
+    static public int staticInt50559;
+    static public int staticInt50560;
+    static public int staticInt50561;
+    static public int staticInt50562;
+    static public int staticInt50563;
+    static public int staticInt50564;
+    static public int staticInt50565;
+    static public int staticInt50566;
+    static public int staticInt50567;
+    static public int staticInt50568;
+    static public int staticInt50569;
+    static public int staticInt50570;
+    static public int staticInt50571;
+    static public int staticInt50572;
+    static public int staticInt50573;
+    static public int staticInt50574;
+    static public int staticInt50575;
+    static public int staticInt50576;
+    static public int staticInt50577;
+    static public int staticInt50578;
+    static public int staticInt50579;
+    static public int staticInt50580;
+    static public int staticInt50581;
+    static public int staticInt50582;
+    static public int staticInt50583;
+    static public int staticInt50584;
+    static public int staticInt50585;
+    static public int staticInt50586;
+    static public int staticInt50587;
+    static public int staticInt50588;
+    static public int staticInt50589;
+    static public int staticInt50590;
+    static public int staticInt50591;
+    static public int staticInt50592;
+    static public int staticInt50593;
+    static public int staticInt50594;
+    static public int staticInt50595;
+    static public int staticInt50596;
+    static public int staticInt50597;
+    static public int staticInt50598;
+    static public int staticInt50599;
+    static public int staticInt50600;
+    static public int staticInt50601;
+    static public int staticInt50602;
+    static public int staticInt50603;
+    static public int staticInt50604;
+    static public int staticInt50605;
+    static public int staticInt50606;
+    static public int staticInt50607;
+    static public int staticInt50608;
+    static public int staticInt50609;
+    static public int staticInt50610;
+    static public int staticInt50611;
+    static public int staticInt50612;
+    static public int staticInt50613;
+    static public int staticInt50614;
+    static public int staticInt50615;
+    static public int staticInt50616;
+    static public int staticInt50617;
+    static public int staticInt50618;
+    static public int staticInt50619;
+    static public int staticInt50620;
+    static public int staticInt50621;
+    static public int staticInt50622;
+    static public int staticInt50623;
+    static public int staticInt50624;
+    static public int staticInt50625;
+    static public int staticInt50626;
+    static public int staticInt50627;
+    static public int staticInt50628;
+    static public int staticInt50629;
+    static public int staticInt50630;
+    static public int staticInt50631;
+    static public int staticInt50632;
+    static public int staticInt50633;
+    static public int staticInt50634;
+    static public int staticInt50635;
+    static public int staticInt50636;
+    static public int staticInt50637;
+    static public int staticInt50638;
+    static public int staticInt50639;
+    static public int staticInt50640;
+    static public int staticInt50641;
+    static public int staticInt50642;
+    static public int staticInt50643;
+    static public int staticInt50644;
+    static public int staticInt50645;
+    static public int staticInt50646;
+    static public int staticInt50647;
+    static public int staticInt50648;
+    static public int staticInt50649;
+    static public int staticInt50650;
+    static public int staticInt50651;
+    static public int staticInt50652;
+    static public int staticInt50653;
+    static public int staticInt50654;
+    static public int staticInt50655;
+    static public int staticInt50656;
+    static public int staticInt50657;
+    static public int staticInt50658;
+    static public int staticInt50659;
+    static public int staticInt50660;
+    static public int staticInt50661;
+    static public int staticInt50662;
+    static public int staticInt50663;
+    static public int staticInt50664;
+    static public int staticInt50665;
+    static public int staticInt50666;
+    static public int staticInt50667;
+    static public int staticInt50668;
+    static public int staticInt50669;
+    static public int staticInt50670;
+    static public int staticInt50671;
+    static public int staticInt50672;
+    static public int staticInt50673;
+    static public int staticInt50674;
+    static public int staticInt50675;
+    static public int staticInt50676;
+    static public int staticInt50677;
+    static public int staticInt50678;
+    static public int staticInt50679;
+    static public int staticInt50680;
+    static public int staticInt50681;
+    static public int staticInt50682;
+    static public int staticInt50683;
+    static public int staticInt50684;
+    static public int staticInt50685;
+    static public int staticInt50686;
+    static public int staticInt50687;
+    static public int staticInt50688;
+    static public int staticInt50689;
+    static public int staticInt50690;
+    static public int staticInt50691;
+    static public int staticInt50692;
+    static public int staticInt50693;
+    static public int staticInt50694;
+    static public int staticInt50695;
+    static public int staticInt50696;
+    static public int staticInt50697;
+    static public int staticInt50698;
+    static public int staticInt50699;
+    static public int staticInt50700;
+    static public int staticInt50701;
+    static public int staticInt50702;
+    static public int staticInt50703;
+    static public int staticInt50704;
+    static public int staticInt50705;
+    static public int staticInt50706;
+    static public int staticInt50707;
+    static public int staticInt50708;
+    static public int staticInt50709;
+    static public int staticInt50710;
+    static public int staticInt50711;
+    static public int staticInt50712;
+    static public int staticInt50713;
+    static public int staticInt50714;
+    static public int staticInt50715;
+    static public int staticInt50716;
+    static public int staticInt50717;
+    static public int staticInt50718;
+    static public int staticInt50719;
+    static public int staticInt50720;
+    static public int staticInt50721;
+    static public int staticInt50722;
+    static public int staticInt50723;
+    static public int staticInt50724;
+    static public int staticInt50725;
+    static public int staticInt50726;
+    static public int staticInt50727;
+    static public int staticInt50728;
+    static public int staticInt50729;
+    static public int staticInt50730;
+    static public int staticInt50731;
+    static public int staticInt50732;
+    static public int staticInt50733;
+    static public int staticInt50734;
+    static public int staticInt50735;
+    static public int staticInt50736;
+    static public int staticInt50737;
+    static public int staticInt50738;
+    static public int staticInt50739;
+    static public int staticInt50740;
+    static public int staticInt50741;
+    static public int staticInt50742;
+    static public int staticInt50743;
+    static public int staticInt50744;
+    static public int staticInt50745;
+    static public int staticInt50746;
+    static public int staticInt50747;
+    static public int staticInt50748;
+    static public int staticInt50749;
+    static public int staticInt50750;
+    static public int staticInt50751;
+    static public int staticInt50752;
+    static public int staticInt50753;
+    static public int staticInt50754;
+    static public int staticInt50755;
+    static public int staticInt50756;
+    static public int staticInt50757;
+    static public int staticInt50758;
+    static public int staticInt50759;
+    static public int staticInt50760;
+    static public int staticInt50761;
+    static public int staticInt50762;
+    static public int staticInt50763;
+    static public int staticInt50764;
+    static public int staticInt50765;
+    static public int staticInt50766;
+    static public int staticInt50767;
+    static public int staticInt50768;
+    static public int staticInt50769;
+    static public int staticInt50770;
+    static public int staticInt50771;
+    static public int staticInt50772;
+    static public int staticInt50773;
+    static public int staticInt50774;
+    static public int staticInt50775;
+    static public int staticInt50776;
+    static public int staticInt50777;
+    static public int staticInt50778;
+    static public int staticInt50779;
+    static public int staticInt50780;
+    static public int staticInt50781;
+    static public int staticInt50782;
+    static public int staticInt50783;
+    static public int staticInt50784;
+    static public int staticInt50785;
+    static public int staticInt50786;
+    static public int staticInt50787;
+    static public int staticInt50788;
+    static public int staticInt50789;
+    static public int staticInt50790;
+    static public int staticInt50791;
+    static public int staticInt50792;
+    static public int staticInt50793;
+    static public int staticInt50794;
+    static public int staticInt50795;
+    static public int staticInt50796;
+    static public int staticInt50797;
+    static public int staticInt50798;
+    static public int staticInt50799;
+    static public int staticInt50800;
+    static public int staticInt50801;
+    static public int staticInt50802;
+    static public int staticInt50803;
+    static public int staticInt50804;
+    static public int staticInt50805;
+    static public int staticInt50806;
+    static public int staticInt50807;
+    static public int staticInt50808;
+    static public int staticInt50809;
+    static public int staticInt50810;
+    static public int staticInt50811;
+    static public int staticInt50812;
+    static public int staticInt50813;
+    static public int staticInt50814;
+    static public int staticInt50815;
+    static public int staticInt50816;
+    static public int staticInt50817;
+    static public int staticInt50818;
+    static public int staticInt50819;
+    static public int staticInt50820;
+    static public int staticInt50821;
+    static public int staticInt50822;
+    static public int staticInt50823;
+    static public int staticInt50824;
+    static public int staticInt50825;
+    static public int staticInt50826;
+    static public int staticInt50827;
+    static public int staticInt50828;
+    static public int staticInt50829;
+    static public int staticInt50830;
+    static public int staticInt50831;
+    static public int staticInt50832;
+    static public int staticInt50833;
+    static public int staticInt50834;
+    static public int staticInt50835;
+    static public int staticInt50836;
+    static public int staticInt50837;
+    static public int staticInt50838;
+    static public int staticInt50839;
+    static public int staticInt50840;
+    static public int staticInt50841;
+    static public int staticInt50842;
+    static public int staticInt50843;
+    static public int staticInt50844;
+    static public int staticInt50845;
+    static public int staticInt50846;
+    static public int staticInt50847;
+    static public int staticInt50848;
+    static public int staticInt50849;
+    static public int staticInt50850;
+    static public int staticInt50851;
+    static public int staticInt50852;
+    static public int staticInt50853;
+    static public int staticInt50854;
+    static public int staticInt50855;
+    static public int staticInt50856;
+    static public int staticInt50857;
+    static public int staticInt50858;
+    static public int staticInt50859;
+    static public int staticInt50860;
+    static public int staticInt50861;
+    static public int staticInt50862;
+    static public int staticInt50863;
+    static public int staticInt50864;
+    static public int staticInt50865;
+    static public int staticInt50866;
+    static public int staticInt50867;
+    static public int staticInt50868;
+    static public int staticInt50869;
+    static public int staticInt50870;
+    static public int staticInt50871;
+    static public int staticInt50872;
+    static public int staticInt50873;
+    static public int staticInt50874;
+    static public int staticInt50875;
+    static public int staticInt50876;
+    static public int staticInt50877;
+    static public int staticInt50878;
+    static public int staticInt50879;
+    static public int staticInt50880;
+    static public int staticInt50881;
+    static public int staticInt50882;
+    static public int staticInt50883;
+    static public int staticInt50884;
+    static public int staticInt50885;
+    static public int staticInt50886;
+    static public int staticInt50887;
+    static public int staticInt50888;
+    static public int staticInt50889;
+    static public int staticInt50890;
+    static public int staticInt50891;
+    static public int staticInt50892;
+    static public int staticInt50893;
+    static public int staticInt50894;
+    static public int staticInt50895;
+    static public int staticInt50896;
+    static public int staticInt50897;
+    static public int staticInt50898;
+    static public int staticInt50899;
+    static public int staticInt50900;
+    static public int staticInt50901;
+    static public int staticInt50902;
+    static public int staticInt50903;
+    static public int staticInt50904;
+    static public int staticInt50905;
+    static public int staticInt50906;
+    static public int staticInt50907;
+    static public int staticInt50908;
+    static public int staticInt50909;
+    static public int staticInt50910;
+    static public int staticInt50911;
+    static public int staticInt50912;
+    static public int staticInt50913;
+    static public int staticInt50914;
+    static public int staticInt50915;
+    static public int staticInt50916;
+    static public int staticInt50917;
+    static public int staticInt50918;
+    static public int staticInt50919;
+    static public int staticInt50920;
+    static public int staticInt50921;
+    static public int staticInt50922;
+    static public int staticInt50923;
+    static public int staticInt50924;
+    static public int staticInt50925;
+    static public int staticInt50926;
+    static public int staticInt50927;
+    static public int staticInt50928;
+    static public int staticInt50929;
+    static public int staticInt50930;
+    static public int staticInt50931;
+    static public int staticInt50932;
+    static public int staticInt50933;
+    static public int staticInt50934;
+    static public int staticInt50935;
+    static public int staticInt50936;
+    static public int staticInt50937;
+    static public int staticInt50938;
+    static public int staticInt50939;
+    static public int staticInt50940;
+    static public int staticInt50941;
+    static public int staticInt50942;
+    static public int staticInt50943;
+    static public int staticInt50944;
+    static public int staticInt50945;
+    static public int staticInt50946;
+    static public int staticInt50947;
+    static public int staticInt50948;
+    static public int staticInt50949;
+    static public int staticInt50950;
+    static public int staticInt50951;
+    static public int staticInt50952;
+    static public int staticInt50953;
+    static public int staticInt50954;
+    static public int staticInt50955;
+    static public int staticInt50956;
+    static public int staticInt50957;
+    static public int staticInt50958;
+    static public int staticInt50959;
+    static public int staticInt50960;
+    static public int staticInt50961;
+    static public int staticInt50962;
+    static public int staticInt50963;
+    static public int staticInt50964;
+    static public int staticInt50965;
+    static public int staticInt50966;
+    static public int staticInt50967;
+    static public int staticInt50968;
+    static public int staticInt50969;
+    static public int staticInt50970;
+    static public int staticInt50971;
+    static public int staticInt50972;
+    static public int staticInt50973;
+    static public int staticInt50974;
+    static public int staticInt50975;
+    static public int staticInt50976;
+    static public int staticInt50977;
+    static public int staticInt50978;
+    static public int staticInt50979;
+    static public int staticInt50980;
+    static public int staticInt50981;
+    static public int staticInt50982;
+    static public int staticInt50983;
+    static public int staticInt50984;
+    static public int staticInt50985;
+    static public int staticInt50986;
+    static public int staticInt50987;
+    static public int staticInt50988;
+    static public int staticInt50989;
+    static public int staticInt50990;
+    static public int staticInt50991;
+    static public int staticInt50992;
+    static public int staticInt50993;
+    static public int staticInt50994;
+    static public int staticInt50995;
+    static public int staticInt50996;
+    static public int staticInt50997;
+    static public int staticInt50998;
+    static public int staticInt50999;
+    static public int staticInt51000;
+    static public int staticInt51001;
+    static public int staticInt51002;
+    static public int staticInt51003;
+    static public int staticInt51004;
+    static public int staticInt51005;
+    static public int staticInt51006;
+    static public int staticInt51007;
+    static public int staticInt51008;
+    static public int staticInt51009;
+    static public int staticInt51010;
+    static public int staticInt51011;
+    static public int staticInt51012;
+    static public int staticInt51013;
+    static public int staticInt51014;
+    static public int staticInt51015;
+    static public int staticInt51016;
+    static public int staticInt51017;
+    static public int staticInt51018;
+    static public int staticInt51019;
+    static public int staticInt51020;
+    static public int staticInt51021;
+    static public int staticInt51022;
+    static public int staticInt51023;
+    static public int staticInt51024;
+    static public int staticInt51025;
+    static public int staticInt51026;
+    static public int staticInt51027;
+    static public int staticInt51028;
+    static public int staticInt51029;
+    static public int staticInt51030;
+    static public int staticInt51031;
+    static public int staticInt51032;
+    static public int staticInt51033;
+    static public int staticInt51034;
+    static public int staticInt51035;
+    static public int staticInt51036;
+    static public int staticInt51037;
+    static public int staticInt51038;
+    static public int staticInt51039;
+    static public int staticInt51040;
+    static public int staticInt51041;
+    static public int staticInt51042;
+    static public int staticInt51043;
+    static public int staticInt51044;
+    static public int staticInt51045;
+    static public int staticInt51046;
+    static public int staticInt51047;
+    static public int staticInt51048;
+    static public int staticInt51049;
+    static public int staticInt51050;
+    static public int staticInt51051;
+    static public int staticInt51052;
+    static public int staticInt51053;
+    static public int staticInt51054;
+    static public int staticInt51055;
+    static public int staticInt51056;
+    static public int staticInt51057;
+    static public int staticInt51058;
+    static public int staticInt51059;
+    static public int staticInt51060;
+    static public int staticInt51061;
+    static public int staticInt51062;
+    static public int staticInt51063;
+    static public int staticInt51064;
+    static public int staticInt51065;
+    static public int staticInt51066;
+    static public int staticInt51067;
+    static public int staticInt51068;
+    static public int staticInt51069;
+    static public int staticInt51070;
+    static public int staticInt51071;
+    static public int staticInt51072;
+    static public int staticInt51073;
+    static public int staticInt51074;
+    static public int staticInt51075;
+    static public int staticInt51076;
+    static public int staticInt51077;
+    static public int staticInt51078;
+    static public int staticInt51079;
+    static public int staticInt51080;
+    static public int staticInt51081;
+    static public int staticInt51082;
+    static public int staticInt51083;
+    static public int staticInt51084;
+    static public int staticInt51085;
+    static public int staticInt51086;
+    static public int staticInt51087;
+    static public int staticInt51088;
+    static public int staticInt51089;
+    static public int staticInt51090;
+    static public int staticInt51091;
+    static public int staticInt51092;
+    static public int staticInt51093;
+    static public int staticInt51094;
+    static public int staticInt51095;
+    static public int staticInt51096;
+    static public int staticInt51097;
+    static public int staticInt51098;
+    static public int staticInt51099;
+    static public int staticInt51100;
+    static public int staticInt51101;
+    static public int staticInt51102;
+    static public int staticInt51103;
+    static public int staticInt51104;
+    static public int staticInt51105;
+    static public int staticInt51106;
+    static public int staticInt51107;
+    static public int staticInt51108;
+    static public int staticInt51109;
+    static public int staticInt51110;
+    static public int staticInt51111;
+    static public int staticInt51112;
+    static public int staticInt51113;
+    static public int staticInt51114;
+    static public int staticInt51115;
+    static public int staticInt51116;
+    static public int staticInt51117;
+    static public int staticInt51118;
+    static public int staticInt51119;
+    static public int staticInt51120;
+    static public int staticInt51121;
+    static public int staticInt51122;
+    static public int staticInt51123;
+    static public int staticInt51124;
+    static public int staticInt51125;
+    static public int staticInt51126;
+    static public int staticInt51127;
+    static public int staticInt51128;
+    static public int staticInt51129;
+    static public int staticInt51130;
+    static public int staticInt51131;
+    static public int staticInt51132;
+    static public int staticInt51133;
+    static public int staticInt51134;
+    static public int staticInt51135;
+    static public int staticInt51136;
+    static public int staticInt51137;
+    static public int staticInt51138;
+    static public int staticInt51139;
+    static public int staticInt51140;
+    static public int staticInt51141;
+    static public int staticInt51142;
+    static public int staticInt51143;
+    static public int staticInt51144;
+    static public int staticInt51145;
+    static public int staticInt51146;
+    static public int staticInt51147;
+    static public int staticInt51148;
+    static public int staticInt51149;
+    static public int staticInt51150;
+    static public int staticInt51151;
+    static public int staticInt51152;
+    static public int staticInt51153;
+    static public int staticInt51154;
+    static public int staticInt51155;
+    static public int staticInt51156;
+    static public int staticInt51157;
+    static public int staticInt51158;
+    static public int staticInt51159;
+    static public int staticInt51160;
+    static public int staticInt51161;
+    static public int staticInt51162;
+    static public int staticInt51163;
+    static public int staticInt51164;
+    static public int staticInt51165;
+    static public int staticInt51166;
+    static public int staticInt51167;
+    static public int staticInt51168;
+    static public int staticInt51169;
+    static public int staticInt51170;
+    static public int staticInt51171;
+    static public int staticInt51172;
+    static public int staticInt51173;
+    static public int staticInt51174;
+    static public int staticInt51175;
+    static public int staticInt51176;
+    static public int staticInt51177;
+    static public int staticInt51178;
+    static public int staticInt51179;
+    static public int staticInt51180;
+    static public int staticInt51181;
+    static public int staticInt51182;
+    static public int staticInt51183;
+    static public int staticInt51184;
+    static public int staticInt51185;
+    static public int staticInt51186;
+    static public int staticInt51187;
+    static public int staticInt51188;
+    static public int staticInt51189;
+    static public int staticInt51190;
+    static public int staticInt51191;
+    static public int staticInt51192;
+    static public int staticInt51193;
+    static public int staticInt51194;
+    static public int staticInt51195;
+    static public int staticInt51196;
+    static public int staticInt51197;
+    static public int staticInt51198;
+    static public int staticInt51199;
+    static public int staticInt51200;
+    static public int staticInt51201;
+    static public int staticInt51202;
+    static public int staticInt51203;
+    static public int staticInt51204;
+    static public int staticInt51205;
+    static public int staticInt51206;
+    static public int staticInt51207;
+    static public int staticInt51208;
+    static public int staticInt51209;
+    static public int staticInt51210;
+    static public int staticInt51211;
+    static public int staticInt51212;
+    static public int staticInt51213;
+    static public int staticInt51214;
+    static public int staticInt51215;
+    static public int staticInt51216;
+    static public int staticInt51217;
+    static public int staticInt51218;
+    static public int staticInt51219;
+    static public int staticInt51220;
+    static public int staticInt51221;
+    static public int staticInt51222;
+    static public int staticInt51223;
+    static public int staticInt51224;
+    static public int staticInt51225;
+    static public int staticInt51226;
+    static public int staticInt51227;
+    static public int staticInt51228;
+    static public int staticInt51229;
+    static public int staticInt51230;
+    static public int staticInt51231;
+    static public int staticInt51232;
+    static public int staticInt51233;
+    static public int staticInt51234;
+    static public int staticInt51235;
+    static public int staticInt51236;
+    static public int staticInt51237;
+    static public int staticInt51238;
+    static public int staticInt51239;
+    static public int staticInt51240;
+    static public int staticInt51241;
+    static public int staticInt51242;
+    static public int staticInt51243;
+    static public int staticInt51244;
+    static public int staticInt51245;
+    static public int staticInt51246;
+    static public int staticInt51247;
+    static public int staticInt51248;
+    static public int staticInt51249;
+    static public int staticInt51250;
+    static public int staticInt51251;
+    static public int staticInt51252;
+    static public int staticInt51253;
+    static public int staticInt51254;
+    static public int staticInt51255;
+    static public int staticInt51256;
+    static public int staticInt51257;
+    static public int staticInt51258;
+    static public int staticInt51259;
+    static public int staticInt51260;
+    static public int staticInt51261;
+    static public int staticInt51262;
+    static public int staticInt51263;
+    static public int staticInt51264;
+    static public int staticInt51265;
+    static public int staticInt51266;
+    static public int staticInt51267;
+    static public int staticInt51268;
+    static public int staticInt51269;
+    static public int staticInt51270;
+    static public int staticInt51271;
+    static public int staticInt51272;
+    static public int staticInt51273;
+    static public int staticInt51274;
+    static public int staticInt51275;
+    static public int staticInt51276;
+    static public int staticInt51277;
+    static public int staticInt51278;
+    static public int staticInt51279;
+    static public int staticInt51280;
+    static public int staticInt51281;
+    static public int staticInt51282;
+    static public int staticInt51283;
+    static public int staticInt51284;
+    static public int staticInt51285;
+    static public int staticInt51286;
+    static public int staticInt51287;
+    static public int staticInt51288;
+    static public int staticInt51289;
+    static public int staticInt51290;
+    static public int staticInt51291;
+    static public int staticInt51292;
+    static public int staticInt51293;
+    static public int staticInt51294;
+    static public int staticInt51295;
+    static public int staticInt51296;
+    static public int staticInt51297;
+    static public int staticInt51298;
+    static public int staticInt51299;
+    static public int staticInt51300;
+    static public int staticInt51301;
+    static public int staticInt51302;
+    static public int staticInt51303;
+    static public int staticInt51304;
+    static public int staticInt51305;
+    static public int staticInt51306;
+    static public int staticInt51307;
+    static public int staticInt51308;
+    static public int staticInt51309;
+    static public int staticInt51310;
+    static public int staticInt51311;
+    static public int staticInt51312;
+    static public int staticInt51313;
+    static public int staticInt51314;
+    static public int staticInt51315;
+    static public int staticInt51316;
+    static public int staticInt51317;
+    static public int staticInt51318;
+    static public int staticInt51319;
+    static public int staticInt51320;
+    static public int staticInt51321;
+    static public int staticInt51322;
+    static public int staticInt51323;
+    static public int staticInt51324;
+    static public int staticInt51325;
+    static public int staticInt51326;
+    static public int staticInt51327;
+    static public int staticInt51328;
+    static public int staticInt51329;
+    static public int staticInt51330;
+    static public int staticInt51331;
+    static public int staticInt51332;
+    static public int staticInt51333;
+    static public int staticInt51334;
+    static public int staticInt51335;
+    static public int staticInt51336;
+    static public int staticInt51337;
+    static public int staticInt51338;
+    static public int staticInt51339;
+    static public int staticInt51340;
+    static public int staticInt51341;
+    static public int staticInt51342;
+    static public int staticInt51343;
+    static public int staticInt51344;
+    static public int staticInt51345;
+    static public int staticInt51346;
+    static public int staticInt51347;
+    static public int staticInt51348;
+    static public int staticInt51349;
+    static public int staticInt51350;
+    static public int staticInt51351;
+    static public int staticInt51352;
+    static public int staticInt51353;
+    static public int staticInt51354;
+    static public int staticInt51355;
+    static public int staticInt51356;
+    static public int staticInt51357;
+    static public int staticInt51358;
+    static public int staticInt51359;
+    static public int staticInt51360;
+    static public int staticInt51361;
+    static public int staticInt51362;
+    static public int staticInt51363;
+    static public int staticInt51364;
+    static public int staticInt51365;
+    static public int staticInt51366;
+    static public int staticInt51367;
+    static public int staticInt51368;
+    static public int staticInt51369;
+    static public int staticInt51370;
+    static public int staticInt51371;
+    static public int staticInt51372;
+    static public int staticInt51373;
+    static public int staticInt51374;
+    static public int staticInt51375;
+    static public int staticInt51376;
+    static public int staticInt51377;
+    static public int staticInt51378;
+    static public int staticInt51379;
+    static public int staticInt51380;
+    static public int staticInt51381;
+    static public int staticInt51382;
+    static public int staticInt51383;
+    static public int staticInt51384;
+    static public int staticInt51385;
+    static public int staticInt51386;
+    static public int staticInt51387;
+    static public int staticInt51388;
+    static public int staticInt51389;
+    static public int staticInt51390;
+    static public int staticInt51391;
+    static public int staticInt51392;
+    static public int staticInt51393;
+    static public int staticInt51394;
+    static public int staticInt51395;
+    static public int staticInt51396;
+    static public int staticInt51397;
+    static public int staticInt51398;
+    static public int staticInt51399;
+    static public int staticInt51400;
+    static public int staticInt51401;
+    static public int staticInt51402;
+    static public int staticInt51403;
+    static public int staticInt51404;
+    static public int staticInt51405;
+    static public int staticInt51406;
+    static public int staticInt51407;
+    static public int staticInt51408;
+    static public int staticInt51409;
+    static public int staticInt51410;
+    static public int staticInt51411;
+    static public int staticInt51412;
+    static public int staticInt51413;
+    static public int staticInt51414;
+    static public int staticInt51415;
+    static public int staticInt51416;
+    static public int staticInt51417;
+    static public int staticInt51418;
+    static public int staticInt51419;
+    static public int staticInt51420;
+    static public int staticInt51421;
+    static public int staticInt51422;
+    static public int staticInt51423;
+    static public int staticInt51424;
+    static public int staticInt51425;
+    static public int staticInt51426;
+    static public int staticInt51427;
+    static public int staticInt51428;
+    static public int staticInt51429;
+    static public int staticInt51430;
+    static public int staticInt51431;
+    static public int staticInt51432;
+    static public int staticInt51433;
+    static public int staticInt51434;
+    static public int staticInt51435;
+    static public int staticInt51436;
+    static public int staticInt51437;
+    static public int staticInt51438;
+    static public int staticInt51439;
+    static public int staticInt51440;
+    static public int staticInt51441;
+    static public int staticInt51442;
+    static public int staticInt51443;
+    static public int staticInt51444;
+    static public int staticInt51445;
+    static public int staticInt51446;
+    static public int staticInt51447;
+    static public int staticInt51448;
+    static public int staticInt51449;
+    static public int staticInt51450;
+    static public int staticInt51451;
+    static public int staticInt51452;
+    static public int staticInt51453;
+    static public int staticInt51454;
+    static public int staticInt51455;
+    static public int staticInt51456;
+    static public int staticInt51457;
+    static public int staticInt51458;
+    static public int staticInt51459;
+    static public int staticInt51460;
+    static public int staticInt51461;
+    static public int staticInt51462;
+    static public int staticInt51463;
+    static public int staticInt51464;
+    static public int staticInt51465;
+    static public int staticInt51466;
+    static public int staticInt51467;
+    static public int staticInt51468;
+    static public int staticInt51469;
+    static public int staticInt51470;
+    static public int staticInt51471;
+    static public int staticInt51472;
+    static public int staticInt51473;
+    static public int staticInt51474;
+    static public int staticInt51475;
+    static public int staticInt51476;
+    static public int staticInt51477;
+    static public int staticInt51478;
+    static public int staticInt51479;
+    static public int staticInt51480;
+    static public int staticInt51481;
+    static public int staticInt51482;
+    static public int staticInt51483;
+    static public int staticInt51484;
+    static public int staticInt51485;
+    static public int staticInt51486;
+    static public int staticInt51487;
+    static public int staticInt51488;
+    static public int staticInt51489;
+    static public int staticInt51490;
+    static public int staticInt51491;
+    static public int staticInt51492;
+    static public int staticInt51493;
+    static public int staticInt51494;
+    static public int staticInt51495;
+    static public int staticInt51496;
+    static public int staticInt51497;
+    static public int staticInt51498;
+    static public int staticInt51499;
+    static public int staticInt51500;
+    static public int staticInt51501;
+    static public int staticInt51502;
+    static public int staticInt51503;
+    static public int staticInt51504;
+    static public int staticInt51505;
+    static public int staticInt51506;
+    static public int staticInt51507;
+    static public int staticInt51508;
+    static public int staticInt51509;
+    static public int staticInt51510;
+    static public int staticInt51511;
+    static public int staticInt51512;
+    static public int staticInt51513;
+    static public int staticInt51514;
+    static public int staticInt51515;
+    static public int staticInt51516;
+    static public int staticInt51517;
+    static public int staticInt51518;
+    static public int staticInt51519;
+    static public int staticInt51520;
+    static public int staticInt51521;
+    static public int staticInt51522;
+    static public int staticInt51523;
+    static public int staticInt51524;
+    static public int staticInt51525;
+    static public int staticInt51526;
+    static public int staticInt51527;
+    static public int staticInt51528;
+    static public int staticInt51529;
+    static public int staticInt51530;
+    static public int staticInt51531;
+    static public int staticInt51532;
+    static public int staticInt51533;
+    static public int staticInt51534;
+    static public int staticInt51535;
+    static public int staticInt51536;
+    static public int staticInt51537;
+    static public int staticInt51538;
+    static public int staticInt51539;
+    static public int staticInt51540;
+    static public int staticInt51541;
+    static public int staticInt51542;
+    static public int staticInt51543;
+    static public int staticInt51544;
+    static public int staticInt51545;
+    static public int staticInt51546;
+    static public int staticInt51547;
+    static public int staticInt51548;
+    static public int staticInt51549;
+    static public int staticInt51550;
+    static public int staticInt51551;
+    static public int staticInt51552;
+    static public int staticInt51553;
+    static public int staticInt51554;
+    static public int staticInt51555;
+    static public int staticInt51556;
+    static public int staticInt51557;
+    static public int staticInt51558;
+    static public int staticInt51559;
+    static public int staticInt51560;
+    static public int staticInt51561;
+    static public int staticInt51562;
+    static public int staticInt51563;
+    static public int staticInt51564;
+    static public int staticInt51565;
+    static public int staticInt51566;
+    static public int staticInt51567;
+    static public int staticInt51568;
+    static public int staticInt51569;
+    static public int staticInt51570;
+    static public int staticInt51571;
+    static public int staticInt51572;
+    static public int staticInt51573;
+    static public int staticInt51574;
+    static public int staticInt51575;
+    static public int staticInt51576;
+    static public int staticInt51577;
+    static public int staticInt51578;
+    static public int staticInt51579;
+    static public int staticInt51580;
+    static public int staticInt51581;
+    static public int staticInt51582;
+    static public int staticInt51583;
+    static public int staticInt51584;
+    static public int staticInt51585;
+    static public int staticInt51586;
+    static public int staticInt51587;
+    static public int staticInt51588;
+    static public int staticInt51589;
+    static public int staticInt51590;
+    static public int staticInt51591;
+    static public int staticInt51592;
+    static public int staticInt51593;
+    static public int staticInt51594;
+    static public int staticInt51595;
+    static public int staticInt51596;
+    static public int staticInt51597;
+    static public int staticInt51598;
+    static public int staticInt51599;
+    static public int staticInt51600;
+    static public int staticInt51601;
+    static public int staticInt51602;
+    static public int staticInt51603;
+    static public int staticInt51604;
+    static public int staticInt51605;
+    static public int staticInt51606;
+    static public int staticInt51607;
+    static public int staticInt51608;
+    static public int staticInt51609;
+    static public int staticInt51610;
+    static public int staticInt51611;
+    static public int staticInt51612;
+    static public int staticInt51613;
+    static public int staticInt51614;
+    static public int staticInt51615;
+    static public int staticInt51616;
+    static public int staticInt51617;
+    static public int staticInt51618;
+    static public int staticInt51619;
+    static public int staticInt51620;
+    static public int staticInt51621;
+    static public int staticInt51622;
+    static public int staticInt51623;
+    static public int staticInt51624;
+    static public int staticInt51625;
+    static public int staticInt51626;
+    static public int staticInt51627;
+    static public int staticInt51628;
+    static public int staticInt51629;
+    static public int staticInt51630;
+    static public int staticInt51631;
+    static public int staticInt51632;
+    static public int staticInt51633;
+    static public int staticInt51634;
+    static public int staticInt51635;
+    static public int staticInt51636;
+    static public int staticInt51637;
+    static public int staticInt51638;
+    static public int staticInt51639;
+    static public int staticInt51640;
+    static public int staticInt51641;
+    static public int staticInt51642;
+    static public int staticInt51643;
+    static public int staticInt51644;
+    static public int staticInt51645;
+    static public int staticInt51646;
+    static public int staticInt51647;
+    static public int staticInt51648;
+    static public int staticInt51649;
+    static public int staticInt51650;
+    static public int staticInt51651;
+    static public int staticInt51652;
+    static public int staticInt51653;
+    static public int staticInt51654;
+    static public int staticInt51655;
+    static public int staticInt51656;
+    static public int staticInt51657;
+    static public int staticInt51658;
+    static public int staticInt51659;
+    static public int staticInt51660;
+    static public int staticInt51661;
+    static public int staticInt51662;
+    static public int staticInt51663;
+    static public int staticInt51664;
+    static public int staticInt51665;
+    static public int staticInt51666;
+    static public int staticInt51667;
+    static public int staticInt51668;
+    static public int staticInt51669;
+    static public int staticInt51670;
+    static public int staticInt51671;
+    static public int staticInt51672;
+    static public int staticInt51673;
+    static public int staticInt51674;
+    static public int staticInt51675;
+    static public int staticInt51676;
+    static public int staticInt51677;
+    static public int staticInt51678;
+    static public int staticInt51679;
+    static public int staticInt51680;
+    static public int staticInt51681;
+    static public int staticInt51682;
+    static public int staticInt51683;
+    static public int staticInt51684;
+    static public int staticInt51685;
+    static public int staticInt51686;
+    static public int staticInt51687;
+    static public int staticInt51688;
+    static public int staticInt51689;
+    static public int staticInt51690;
+    static public int staticInt51691;
+    static public int staticInt51692;
+    static public int staticInt51693;
+    static public int staticInt51694;
+    static public int staticInt51695;
+    static public int staticInt51696;
+    static public int staticInt51697;
+    static public int staticInt51698;
+    static public int staticInt51699;
+    static public int staticInt51700;
+    static public int staticInt51701;
+    static public int staticInt51702;
+    static public int staticInt51703;
+    static public int staticInt51704;
+    static public int staticInt51705;
+    static public int staticInt51706;
+    static public int staticInt51707;
+    static public int staticInt51708;
+    static public int staticInt51709;
+    static public int staticInt51710;
+    static public int staticInt51711;
+    static public int staticInt51712;
+    static public int staticInt51713;
+    static public int staticInt51714;
+    static public int staticInt51715;
+    static public int staticInt51716;
+    static public int staticInt51717;
+    static public int staticInt51718;
+    static public int staticInt51719;
+    static public int staticInt51720;
+    static public int staticInt51721;
+    static public int staticInt51722;
+    static public int staticInt51723;
+    static public int staticInt51724;
+    static public int staticInt51725;
+    static public int staticInt51726;
+    static public int staticInt51727;
+    static public int staticInt51728;
+    static public int staticInt51729;
+    static public int staticInt51730;
+    static public int staticInt51731;
+    static public int staticInt51732;
+    static public int staticInt51733;
+    static public int staticInt51734;
+    static public int staticInt51735;
+    static public int staticInt51736;
+    static public int staticInt51737;
+    static public int staticInt51738;
+    static public int staticInt51739;
+    static public int staticInt51740;
+    static public int staticInt51741;
+    static public int staticInt51742;
+    static public int staticInt51743;
+    static public int staticInt51744;
+    static public int staticInt51745;
+    static public int staticInt51746;
+    static public int staticInt51747;
+    static public int staticInt51748;
+    static public int staticInt51749;
+    static public int staticInt51750;
+    static public int staticInt51751;
+    static public int staticInt51752;
+    static public int staticInt51753;
+    static public int staticInt51754;
+    static public int staticInt51755;
+    static public int staticInt51756;
+    static public int staticInt51757;
+    static public int staticInt51758;
+    static public int staticInt51759;
+    static public int staticInt51760;
+    static public int staticInt51761;
+    static public int staticInt51762;
+    static public int staticInt51763;
+    static public int staticInt51764;
+    static public int staticInt51765;
+    static public int staticInt51766;
+    static public int staticInt51767;
+    static public int staticInt51768;
+    static public int staticInt51769;
+    static public int staticInt51770;
+    static public int staticInt51771;
+    static public int staticInt51772;
+    static public int staticInt51773;
+    static public int staticInt51774;
+    static public int staticInt51775;
+    static public int staticInt51776;
+    static public int staticInt51777;
+    static public int staticInt51778;
+    static public int staticInt51779;
+    static public int staticInt51780;
+    static public int staticInt51781;
+    static public int staticInt51782;
+    static public int staticInt51783;
+    static public int staticInt51784;
+    static public int staticInt51785;
+    static public int staticInt51786;
+    static public int staticInt51787;
+    static public int staticInt51788;
+    static public int staticInt51789;
+    static public int staticInt51790;
+    static public int staticInt51791;
+    static public int staticInt51792;
+    static public int staticInt51793;
+    static public int staticInt51794;
+    static public int staticInt51795;
+    static public int staticInt51796;
+    static public int staticInt51797;
+    static public int staticInt51798;
+    static public int staticInt51799;
+    static public int staticInt51800;
+    static public int staticInt51801;
+    static public int staticInt51802;
+    static public int staticInt51803;
+    static public int staticInt51804;
+    static public int staticInt51805;
+    static public int staticInt51806;
+    static public int staticInt51807;
+    static public int staticInt51808;
+    static public int staticInt51809;
+    static public int staticInt51810;
+    static public int staticInt51811;
+    static public int staticInt51812;
+    static public int staticInt51813;
+    static public int staticInt51814;
+    static public int staticInt51815;
+    static public int staticInt51816;
+    static public int staticInt51817;
+    static public int staticInt51818;
+    static public int staticInt51819;
+    static public int staticInt51820;
+    static public int staticInt51821;
+    static public int staticInt51822;
+    static public int staticInt51823;
+    static public int staticInt51824;
+    static public int staticInt51825;
+    static public int staticInt51826;
+    static public int staticInt51827;
+    static public int staticInt51828;
+    static public int staticInt51829;
+    static public int staticInt51830;
+    static public int staticInt51831;
+    static public int staticInt51832;
+    static public int staticInt51833;
+    static public int staticInt51834;
+    static public int staticInt51835;
+    static public int staticInt51836;
+    static public int staticInt51837;
+    static public int staticInt51838;
+    static public int staticInt51839;
+    static public int staticInt51840;
+    static public int staticInt51841;
+    static public int staticInt51842;
+    static public int staticInt51843;
+    static public int staticInt51844;
+    static public int staticInt51845;
+    static public int staticInt51846;
+    static public int staticInt51847;
+    static public int staticInt51848;
+    static public int staticInt51849;
+    static public int staticInt51850;
+    static public int staticInt51851;
+    static public int staticInt51852;
+    static public int staticInt51853;
+    static public int staticInt51854;
+    static public int staticInt51855;
+    static public int staticInt51856;
+    static public int staticInt51857;
+    static public int staticInt51858;
+    static public int staticInt51859;
+    static public int staticInt51860;
+    static public int staticInt51861;
+    static public int staticInt51862;
+    static public int staticInt51863;
+    static public int staticInt51864;
+    static public int staticInt51865;
+    static public int staticInt51866;
+    static public int staticInt51867;
+    static public int staticInt51868;
+    static public int staticInt51869;
+    static public int staticInt51870;
+    static public int staticInt51871;
+    static public int staticInt51872;
+    static public int staticInt51873;
+    static public int staticInt51874;
+    static public int staticInt51875;
+    static public int staticInt51876;
+    static public int staticInt51877;
+    static public int staticInt51878;
+    static public int staticInt51879;
+    static public int staticInt51880;
+    static public int staticInt51881;
+    static public int staticInt51882;
+    static public int staticInt51883;
+    static public int staticInt51884;
+    static public int staticInt51885;
+    static public int staticInt51886;
+    static public int staticInt51887;
+    static public int staticInt51888;
+    static public int staticInt51889;
+    static public int staticInt51890;
+    static public int staticInt51891;
+    static public int staticInt51892;
+    static public int staticInt51893;
+    static public int staticInt51894;
+    static public int staticInt51895;
+    static public int staticInt51896;
+    static public int staticInt51897;
+    static public int staticInt51898;
+    static public int staticInt51899;
+    static public int staticInt51900;
+    static public int staticInt51901;
+    static public int staticInt51902;
+    static public int staticInt51903;
+    static public int staticInt51904;
+    static public int staticInt51905;
+    static public int staticInt51906;
+    static public int staticInt51907;
+    static public int staticInt51908;
+    static public int staticInt51909;
+    static public int staticInt51910;
+    static public int staticInt51911;
+    static public int staticInt51912;
+    static public int staticInt51913;
+    static public int staticInt51914;
+    static public int staticInt51915;
+    static public int staticInt51916;
+    static public int staticInt51917;
+    static public int staticInt51918;
+    static public int staticInt51919;
+    static public int staticInt51920;
+    static public int staticInt51921;
+    static public int staticInt51922;
+    static public int staticInt51923;
+    static public int staticInt51924;
+    static public int staticInt51925;
+    static public int staticInt51926;
+    static public int staticInt51927;
+    static public int staticInt51928;
+    static public int staticInt51929;
+    static public int staticInt51930;
+    static public int staticInt51931;
+    static public int staticInt51932;
+    static public int staticInt51933;
+    static public int staticInt51934;
+    static public int staticInt51935;
+    static public int staticInt51936;
+    static public int staticInt51937;
+    static public int staticInt51938;
+    static public int staticInt51939;
+    static public int staticInt51940;
+    static public int staticInt51941;
+    static public int staticInt51942;
+    static public int staticInt51943;
+    static public int staticInt51944;
+    static public int staticInt51945;
+    static public int staticInt51946;
+    static public int staticInt51947;
+    static public int staticInt51948;
+    static public int staticInt51949;
+    static public int staticInt51950;
+    static public int staticInt51951;
+    static public int staticInt51952;
+    static public int staticInt51953;
+    static public int staticInt51954;
+    static public int staticInt51955;
+    static public int staticInt51956;
+    static public int staticInt51957;
+    static public int staticInt51958;
+    static public int staticInt51959;
+    static public int staticInt51960;
+    static public int staticInt51961;
+    static public int staticInt51962;
+    static public int staticInt51963;
+    static public int staticInt51964;
+    static public int staticInt51965;
+    static public int staticInt51966;
+    static public int staticInt51967;
+    static public int staticInt51968;
+    static public int staticInt51969;
+    static public int staticInt51970;
+    static public int staticInt51971;
+    static public int staticInt51972;
+    static public int staticInt51973;
+    static public int staticInt51974;
+    static public int staticInt51975;
+    static public int staticInt51976;
+    static public int staticInt51977;
+    static public int staticInt51978;
+    static public int staticInt51979;
+    static public int staticInt51980;
+    static public int staticInt51981;
+    static public int staticInt51982;
+    static public int staticInt51983;
+    static public int staticInt51984;
+    static public int staticInt51985;
+    static public int staticInt51986;
+    static public int staticInt51987;
+    static public int staticInt51988;
+    static public int staticInt51989;
+    static public int staticInt51990;
+    static public int staticInt51991;
+    static public int staticInt51992;
+    static public int staticInt51993;
+    static public int staticInt51994;
+    static public int staticInt51995;
+    static public int staticInt51996;
+    static public int staticInt51997;
+    static public int staticInt51998;
+    static public int staticInt51999;
+    static public int staticInt52000;
+    static public int staticInt52001;
+    static public int staticInt52002;
+    static public int staticInt52003;
+    static public int staticInt52004;
+    static public int staticInt52005;
+    static public int staticInt52006;
+    static public int staticInt52007;
+    static public int staticInt52008;
+    static public int staticInt52009;
+    static public int staticInt52010;
+    static public int staticInt52011;
+    static public int staticInt52012;
+    static public int staticInt52013;
+    static public int staticInt52014;
+    static public int staticInt52015;
+    static public int staticInt52016;
+    static public int staticInt52017;
+    static public int staticInt52018;
+    static public int staticInt52019;
+    static public int staticInt52020;
+    static public int staticInt52021;
+    static public int staticInt52022;
+    static public int staticInt52023;
+    static public int staticInt52024;
+    static public int staticInt52025;
+    static public int staticInt52026;
+    static public int staticInt52027;
+    static public int staticInt52028;
+    static public int staticInt52029;
+    static public int staticInt52030;
+    static public int staticInt52031;
+    static public int staticInt52032;
+    static public int staticInt52033;
+    static public int staticInt52034;
+    static public int staticInt52035;
+    static public int staticInt52036;
+    static public int staticInt52037;
+    static public int staticInt52038;
+    static public int staticInt52039;
+    static public int staticInt52040;
+    static public int staticInt52041;
+    static public int staticInt52042;
+    static public int staticInt52043;
+    static public int staticInt52044;
+    static public int staticInt52045;
+    static public int staticInt52046;
+    static public int staticInt52047;
+    static public int staticInt52048;
+    static public int staticInt52049;
+    static public int staticInt52050;
+    static public int staticInt52051;
+    static public int staticInt52052;
+    static public int staticInt52053;
+    static public int staticInt52054;
+    static public int staticInt52055;
+    static public int staticInt52056;
+    static public int staticInt52057;
+    static public int staticInt52058;
+    static public int staticInt52059;
+    static public int staticInt52060;
+    static public int staticInt52061;
+    static public int staticInt52062;
+    static public int staticInt52063;
+    static public int staticInt52064;
+    static public int staticInt52065;
+    static public int staticInt52066;
+    static public int staticInt52067;
+    static public int staticInt52068;
+    static public int staticInt52069;
+    static public int staticInt52070;
+    static public int staticInt52071;
+    static public int staticInt52072;
+    static public int staticInt52073;
+    static public int staticInt52074;
+    static public int staticInt52075;
+    static public int staticInt52076;
+    static public int staticInt52077;
+    static public int staticInt52078;
+    static public int staticInt52079;
+    static public int staticInt52080;
+    static public int staticInt52081;
+    static public int staticInt52082;
+    static public int staticInt52083;
+    static public int staticInt52084;
+    static public int staticInt52085;
+    static public int staticInt52086;
+    static public int staticInt52087;
+    static public int staticInt52088;
+    static public int staticInt52089;
+    static public int staticInt52090;
+    static public int staticInt52091;
+    static public int staticInt52092;
+    static public int staticInt52093;
+    static public int staticInt52094;
+    static public int staticInt52095;
+    static public int staticInt52096;
+    static public int staticInt52097;
+    static public int staticInt52098;
+    static public int staticInt52099;
+    static public int staticInt52100;
+    static public int staticInt52101;
+    static public int staticInt52102;
+    static public int staticInt52103;
+    static public int staticInt52104;
+    static public int staticInt52105;
+    static public int staticInt52106;
+    static public int staticInt52107;
+    static public int staticInt52108;
+    static public int staticInt52109;
+    static public int staticInt52110;
+    static public int staticInt52111;
+    static public int staticInt52112;
+    static public int staticInt52113;
+    static public int staticInt52114;
+    static public int staticInt52115;
+    static public int staticInt52116;
+    static public int staticInt52117;
+    static public int staticInt52118;
+    static public int staticInt52119;
+    static public int staticInt52120;
+    static public int staticInt52121;
+    static public int staticInt52122;
+    static public int staticInt52123;
+    static public int staticInt52124;
+    static public int staticInt52125;
+    static public int staticInt52126;
+    static public int staticInt52127;
+    static public int staticInt52128;
+    static public int staticInt52129;
+    static public int staticInt52130;
+    static public int staticInt52131;
+    static public int staticInt52132;
+    static public int staticInt52133;
+    static public int staticInt52134;
+    static public int staticInt52135;
+    static public int staticInt52136;
+    static public int staticInt52137;
+    static public int staticInt52138;
+    static public int staticInt52139;
+    static public int staticInt52140;
+    static public int staticInt52141;
+    static public int staticInt52142;
+    static public int staticInt52143;
+    static public int staticInt52144;
+    static public int staticInt52145;
+    static public int staticInt52146;
+    static public int staticInt52147;
+    static public int staticInt52148;
+    static public int staticInt52149;
+    static public int staticInt52150;
+    static public int staticInt52151;
+    static public int staticInt52152;
+    static public int staticInt52153;
+    static public int staticInt52154;
+    static public int staticInt52155;
+    static public int staticInt52156;
+    static public int staticInt52157;
+    static public int staticInt52158;
+    static public int staticInt52159;
+    static public int staticInt52160;
+    static public int staticInt52161;
+    static public int staticInt52162;
+    static public int staticInt52163;
+    static public int staticInt52164;
+    static public int staticInt52165;
+    static public int staticInt52166;
+    static public int staticInt52167;
+    static public int staticInt52168;
+    static public int staticInt52169;
+    static public int staticInt52170;
+    static public int staticInt52171;
+    static public int staticInt52172;
+    static public int staticInt52173;
+    static public int staticInt52174;
+    static public int staticInt52175;
+    static public int staticInt52176;
+    static public int staticInt52177;
+    static public int staticInt52178;
+    static public int staticInt52179;
+    static public int staticInt52180;
+    static public int staticInt52181;
+    static public int staticInt52182;
+    static public int staticInt52183;
+    static public int staticInt52184;
+    static public int staticInt52185;
+    static public int staticInt52186;
+    static public int staticInt52187;
+    static public int staticInt52188;
+    static public int staticInt52189;
+    static public int staticInt52190;
+    static public int staticInt52191;
+    static public int staticInt52192;
+    static public int staticInt52193;
+    static public int staticInt52194;
+    static public int staticInt52195;
+    static public int staticInt52196;
+    static public int staticInt52197;
+    static public int staticInt52198;
+    static public int staticInt52199;
+    static public int staticInt52200;
+    static public int staticInt52201;
+    static public int staticInt52202;
+    static public int staticInt52203;
+    static public int staticInt52204;
+    static public int staticInt52205;
+    static public int staticInt52206;
+    static public int staticInt52207;
+    static public int staticInt52208;
+    static public int staticInt52209;
+    static public int staticInt52210;
+    static public int staticInt52211;
+    static public int staticInt52212;
+    static public int staticInt52213;
+    static public int staticInt52214;
+    static public int staticInt52215;
+    static public int staticInt52216;
+    static public int staticInt52217;
+    static public int staticInt52218;
+    static public int staticInt52219;
+    static public int staticInt52220;
+    static public int staticInt52221;
+    static public int staticInt52222;
+    static public int staticInt52223;
+    static public int staticInt52224;
+    static public int staticInt52225;
+    static public int staticInt52226;
+    static public int staticInt52227;
+    static public int staticInt52228;
+    static public int staticInt52229;
+    static public int staticInt52230;
+    static public int staticInt52231;
+    static public int staticInt52232;
+    static public int staticInt52233;
+    static public int staticInt52234;
+    static public int staticInt52235;
+    static public int staticInt52236;
+    static public int staticInt52237;
+    static public int staticInt52238;
+    static public int staticInt52239;
+    static public int staticInt52240;
+    static public int staticInt52241;
+    static public int staticInt52242;
+    static public int staticInt52243;
+    static public int staticInt52244;
+    static public int staticInt52245;
+    static public int staticInt52246;
+    static public int staticInt52247;
+    static public int staticInt52248;
+    static public int staticInt52249;
+    static public int staticInt52250;
+    static public int staticInt52251;
+    static public int staticInt52252;
+    static public int staticInt52253;
+    static public int staticInt52254;
+    static public int staticInt52255;
+    static public int staticInt52256;
+    static public int staticInt52257;
+    static public int staticInt52258;
+    static public int staticInt52259;
+    static public int staticInt52260;
+    static public int staticInt52261;
+    static public int staticInt52262;
+    static public int staticInt52263;
+    static public int staticInt52264;
+    static public int staticInt52265;
+    static public int staticInt52266;
+    static public int staticInt52267;
+    static public int staticInt52268;
+    static public int staticInt52269;
+    static public int staticInt52270;
+    static public int staticInt52271;
+    static public int staticInt52272;
+    static public int staticInt52273;
+    static public int staticInt52274;
+    static public int staticInt52275;
+    static public int staticInt52276;
+    static public int staticInt52277;
+    static public int staticInt52278;
+    static public int staticInt52279;
+    static public int staticInt52280;
+    static public int staticInt52281;
+    static public int staticInt52282;
+    static public int staticInt52283;
+    static public int staticInt52284;
+    static public int staticInt52285;
+    static public int staticInt52286;
+    static public int staticInt52287;
+    static public int staticInt52288;
+    static public int staticInt52289;
+    static public int staticInt52290;
+    static public int staticInt52291;
+    static public int staticInt52292;
+    static public int staticInt52293;
+    static public int staticInt52294;
+    static public int staticInt52295;
+    static public int staticInt52296;
+    static public int staticInt52297;
+    static public int staticInt52298;
+    static public int staticInt52299;
+    static public int staticInt52300;
+    static public int staticInt52301;
+    static public int staticInt52302;
+    static public int staticInt52303;
+    static public int staticInt52304;
+    static public int staticInt52305;
+    static public int staticInt52306;
+    static public int staticInt52307;
+    static public int staticInt52308;
+    static public int staticInt52309;
+    static public int staticInt52310;
+    static public int staticInt52311;
+    static public int staticInt52312;
+    static public int staticInt52313;
+    static public int staticInt52314;
+    static public int staticInt52315;
+    static public int staticInt52316;
+    static public int staticInt52317;
+    static public int staticInt52318;
+    static public int staticInt52319;
+    static public int staticInt52320;
+    static public int staticInt52321;
+    static public int staticInt52322;
+    static public int staticInt52323;
+    static public int staticInt52324;
+    static public int staticInt52325;
+    static public int staticInt52326;
+    static public int staticInt52327;
+    static public int staticInt52328;
+    static public int staticInt52329;
+    static public int staticInt52330;
+    static public int staticInt52331;
+    static public int staticInt52332;
+    static public int staticInt52333;
+    static public int staticInt52334;
+    static public int staticInt52335;
+    static public int staticInt52336;
+    static public int staticInt52337;
+    static public int staticInt52338;
+    static public int staticInt52339;
+    static public int staticInt52340;
+    static public int staticInt52341;
+    static public int staticInt52342;
+    static public int staticInt52343;
+    static public int staticInt52344;
+    static public int staticInt52345;
+    static public int staticInt52346;
+    static public int staticInt52347;
+    static public int staticInt52348;
+    static public int staticInt52349;
+    static public int staticInt52350;
+    static public int staticInt52351;
+    static public int staticInt52352;
+    static public int staticInt52353;
+    static public int staticInt52354;
+    static public int staticInt52355;
+    static public int staticInt52356;
+    static public int staticInt52357;
+    static public int staticInt52358;
+    static public int staticInt52359;
+    static public int staticInt52360;
+    static public int staticInt52361;
+    static public int staticInt52362;
+    static public int staticInt52363;
+    static public int staticInt52364;
+    static public int staticInt52365;
+    static public int staticInt52366;
+    static public int staticInt52367;
+    static public int staticInt52368;
+    static public int staticInt52369;
+    static public int staticInt52370;
+    static public int staticInt52371;
+    static public int staticInt52372;
+    static public int staticInt52373;
+    static public int staticInt52374;
+    static public int staticInt52375;
+    static public int staticInt52376;
+    static public int staticInt52377;
+    static public int staticInt52378;
+    static public int staticInt52379;
+    static public int staticInt52380;
+    static public int staticInt52381;
+    static public int staticInt52382;
+    static public int staticInt52383;
+    static public int staticInt52384;
+    static public int staticInt52385;
+    static public int staticInt52386;
+    static public int staticInt52387;
+    static public int staticInt52388;
+    static public int staticInt52389;
+    static public int staticInt52390;
+    static public int staticInt52391;
+    static public int staticInt52392;
+    static public int staticInt52393;
+    static public int staticInt52394;
+    static public int staticInt52395;
+    static public int staticInt52396;
+    static public int staticInt52397;
+    static public int staticInt52398;
+    static public int staticInt52399;
+    static public int staticInt52400;
+    static public int staticInt52401;
+    static public int staticInt52402;
+    static public int staticInt52403;
+    static public int staticInt52404;
+    static public int staticInt52405;
+    static public int staticInt52406;
+    static public int staticInt52407;
+    static public int staticInt52408;
+    static public int staticInt52409;
+    static public int staticInt52410;
+    static public int staticInt52411;
+    static public int staticInt52412;
+    static public int staticInt52413;
+    static public int staticInt52414;
+    static public int staticInt52415;
+    static public int staticInt52416;
+    static public int staticInt52417;
+    static public int staticInt52418;
+    static public int staticInt52419;
+    static public int staticInt52420;
+    static public int staticInt52421;
+    static public int staticInt52422;
+    static public int staticInt52423;
+    static public int staticInt52424;
+    static public int staticInt52425;
+    static public int staticInt52426;
+    static public int staticInt52427;
+    static public int staticInt52428;
+    static public int staticInt52429;
+    static public int staticInt52430;
+    static public int staticInt52431;
+    static public int staticInt52432;
+    static public int staticInt52433;
+    static public int staticInt52434;
+    static public int staticInt52435;
+    static public int staticInt52436;
+    static public int staticInt52437;
+    static public int staticInt52438;
+    static public int staticInt52439;
+    static public int staticInt52440;
+    static public int staticInt52441;
+    static public int staticInt52442;
+    static public int staticInt52443;
+    static public int staticInt52444;
+    static public int staticInt52445;
+    static public int staticInt52446;
+    static public int staticInt52447;
+    static public int staticInt52448;
+    static public int staticInt52449;
+    static public int staticInt52450;
+    static public int staticInt52451;
+    static public int staticInt52452;
+    static public int staticInt52453;
+    static public int staticInt52454;
+    static public int staticInt52455;
+    static public int staticInt52456;
+    static public int staticInt52457;
+    static public int staticInt52458;
+    static public int staticInt52459;
+    static public int staticInt52460;
+    static public int staticInt52461;
+    static public int staticInt52462;
+    static public int staticInt52463;
+    static public int staticInt52464;
+    static public int staticInt52465;
+    static public int staticInt52466;
+    static public int staticInt52467;
+    static public int staticInt52468;
+    static public int staticInt52469;
+    static public int staticInt52470;
+    static public int staticInt52471;
+    static public int staticInt52472;
+    static public int staticInt52473;
+    static public int staticInt52474;
+    static public int staticInt52475;
+    static public int staticInt52476;
+    static public int staticInt52477;
+    static public int staticInt52478;
+    static public int staticInt52479;
+    static public int staticInt52480;
+    static public int staticInt52481;
+    static public int staticInt52482;
+    static public int staticInt52483;
+    static public int staticInt52484;
+    static public int staticInt52485;
+    static public int staticInt52486;
+    static public int staticInt52487;
+    static public int staticInt52488;
+    static public int staticInt52489;
+    static public int staticInt52490;
+    static public int staticInt52491;
+    static public int staticInt52492;
+    static public int staticInt52493;
+    static public int staticInt52494;
+    static public int staticInt52495;
+    static public int staticInt52496;
+    static public int staticInt52497;
+    static public int staticInt52498;
+    static public int staticInt52499;
+    static public int staticInt52500;
+    static public int staticInt52501;
+    static public int staticInt52502;
+    static public int staticInt52503;
+    static public int staticInt52504;
+    static public int staticInt52505;
+    static public int staticInt52506;
+    static public int staticInt52507;
+    static public int staticInt52508;
+    static public int staticInt52509;
+    static public int staticInt52510;
+    static public int staticInt52511;
+    static public int staticInt52512;
+    static public int staticInt52513;
+    static public int staticInt52514;
+    static public int staticInt52515;
+    static public int staticInt52516;
+    static public int staticInt52517;
+    static public int staticInt52518;
+    static public int staticInt52519;
+    static public int staticInt52520;
+    static public int staticInt52521;
+    static public int staticInt52522;
+    static public int staticInt52523;
+    static public int staticInt52524;
+    static public int staticInt52525;
+    static public int staticInt52526;
+    static public int staticInt52527;
+    static public int staticInt52528;
+    static public int staticInt52529;
+    static public int staticInt52530;
+    static public int staticInt52531;
+    static public int staticInt52532;
+    static public int staticInt52533;
+    static public int staticInt52534;
+    static public int staticInt52535;
+    static public int staticInt52536;
+    static public int staticInt52537;
+    static public int staticInt52538;
+    static public int staticInt52539;
+    static public int staticInt52540;
+    static public int staticInt52541;
+    static public int staticInt52542;
+    static public int staticInt52543;
+    static public int staticInt52544;
+    static public int staticInt52545;
+    static public int staticInt52546;
+    static public int staticInt52547;
+    static public int staticInt52548;
+    static public int staticInt52549;
+    static public int staticInt52550;
+    static public int staticInt52551;
+    static public int staticInt52552;
+    static public int staticInt52553;
+    static public int staticInt52554;
+    static public int staticInt52555;
+    static public int staticInt52556;
+    static public int staticInt52557;
+    static public int staticInt52558;
+    static public int staticInt52559;
+    static public int staticInt52560;
+    static public int staticInt52561;
+    static public int staticInt52562;
+    static public int staticInt52563;
+    static public int staticInt52564;
+    static public int staticInt52565;
+    static public int staticInt52566;
+    static public int staticInt52567;
+    static public int staticInt52568;
+    static public int staticInt52569;
+    static public int staticInt52570;
+    static public int staticInt52571;
+    static public int staticInt52572;
+    static public int staticInt52573;
+    static public int staticInt52574;
+    static public int staticInt52575;
+    static public int staticInt52576;
+    static public int staticInt52577;
+    static public int staticInt52578;
+    static public int staticInt52579;
+    static public int staticInt52580;
+    static public int staticInt52581;
+    static public int staticInt52582;
+    static public int staticInt52583;
+    static public int staticInt52584;
+    static public int staticInt52585;
+    static public int staticInt52586;
+    static public int staticInt52587;
+    static public int staticInt52588;
+    static public int staticInt52589;
+    static public int staticInt52590;
+    static public int staticInt52591;
+    static public int staticInt52592;
+    static public int staticInt52593;
+    static public int staticInt52594;
+    static public int staticInt52595;
+    static public int staticInt52596;
+    static public int staticInt52597;
+    static public int staticInt52598;
+    static public int staticInt52599;
+    static public int staticInt52600;
+    static public int staticInt52601;
+    static public int staticInt52602;
+    static public int staticInt52603;
+    static public int staticInt52604;
+    static public int staticInt52605;
+    static public int staticInt52606;
+    static public int staticInt52607;
+    static public int staticInt52608;
+    static public int staticInt52609;
+    static public int staticInt52610;
+    static public int staticInt52611;
+    static public int staticInt52612;
+    static public int staticInt52613;
+    static public int staticInt52614;
+    static public int staticInt52615;
+    static public int staticInt52616;
+    static public int staticInt52617;
+    static public int staticInt52618;
+    static public int staticInt52619;
+    static public int staticInt52620;
+    static public int staticInt52621;
+    static public int staticInt52622;
+    static public int staticInt52623;
+    static public int staticInt52624;
+    static public int staticInt52625;
+    static public int staticInt52626;
+    static public int staticInt52627;
+    static public int staticInt52628;
+    static public int staticInt52629;
+    static public int staticInt52630;
+    static public int staticInt52631;
+    static public int staticInt52632;
+    static public int staticInt52633;
+    static public int staticInt52634;
+    static public int staticInt52635;
+    static public int staticInt52636;
+    static public int staticInt52637;
+    static public int staticInt52638;
+    static public int staticInt52639;
+    static public int staticInt52640;
+    static public int staticInt52641;
+    static public int staticInt52642;
+    static public int staticInt52643;
+    static public int staticInt52644;
+    static public int staticInt52645;
+    static public int staticInt52646;
+    static public int staticInt52647;
+    static public int staticInt52648;
+    static public int staticInt52649;
+    static public int staticInt52650;
+    static public int staticInt52651;
+    static public int staticInt52652;
+    static public int staticInt52653;
+    static public int staticInt52654;
+    static public int staticInt52655;
+    static public int staticInt52656;
+    static public int staticInt52657;
+    static public int staticInt52658;
+    static public int staticInt52659;
+    static public int staticInt52660;
+    static public int staticInt52661;
+    static public int staticInt52662;
+    static public int staticInt52663;
+    static public int staticInt52664;
+    static public int staticInt52665;
+    static public int staticInt52666;
+    static public int staticInt52667;
+    static public int staticInt52668;
+    static public int staticInt52669;
+    static public int staticInt52670;
+    static public int staticInt52671;
+    static public int staticInt52672;
+    static public int staticInt52673;
+    static public int staticInt52674;
+    static public int staticInt52675;
+    static public int staticInt52676;
+    static public int staticInt52677;
+    static public int staticInt52678;
+    static public int staticInt52679;
+    static public int staticInt52680;
+    static public int staticInt52681;
+    static public int staticInt52682;
+    static public int staticInt52683;
+    static public int staticInt52684;
+    static public int staticInt52685;
+    static public int staticInt52686;
+    static public int staticInt52687;
+    static public int staticInt52688;
+    static public int staticInt52689;
+    static public int staticInt52690;
+    static public int staticInt52691;
+    static public int staticInt52692;
+    static public int staticInt52693;
+    static public int staticInt52694;
+    static public int staticInt52695;
+    static public int staticInt52696;
+    static public int staticInt52697;
+    static public int staticInt52698;
+    static public int staticInt52699;
+    static public int staticInt52700;
+    static public int staticInt52701;
+    static public int staticInt52702;
+    static public int staticInt52703;
+    static public int staticInt52704;
+    static public int staticInt52705;
+    static public int staticInt52706;
+    static public int staticInt52707;
+    static public int staticInt52708;
+    static public int staticInt52709;
+    static public int staticInt52710;
+    static public int staticInt52711;
+    static public int staticInt52712;
+    static public int staticInt52713;
+    static public int staticInt52714;
+    static public int staticInt52715;
+    static public int staticInt52716;
+    static public int staticInt52717;
+    static public int staticInt52718;
+    static public int staticInt52719;
+    static public int staticInt52720;
+    static public int staticInt52721;
+    static public int staticInt52722;
+    static public int staticInt52723;
+    static public int staticInt52724;
+    static public int staticInt52725;
+    static public int staticInt52726;
+    static public int staticInt52727;
+    static public int staticInt52728;
+    static public int staticInt52729;
+    static public int staticInt52730;
+    static public int staticInt52731;
+    static public int staticInt52732;
+    static public int staticInt52733;
+    static public int staticInt52734;
+    static public int staticInt52735;
+    static public int staticInt52736;
+    static public int staticInt52737;
+    static public int staticInt52738;
+    static public int staticInt52739;
+    static public int staticInt52740;
+    static public int staticInt52741;
+    static public int staticInt52742;
+    static public int staticInt52743;
+    static public int staticInt52744;
+    static public int staticInt52745;
+    static public int staticInt52746;
+    static public int staticInt52747;
+    static public int staticInt52748;
+    static public int staticInt52749;
+    static public int staticInt52750;
+    static public int staticInt52751;
+    static public int staticInt52752;
+    static public int staticInt52753;
+    static public int staticInt52754;
+    static public int staticInt52755;
+    static public int staticInt52756;
+    static public int staticInt52757;
+    static public int staticInt52758;
+    static public int staticInt52759;
+    static public int staticInt52760;
+    static public int staticInt52761;
+    static public int staticInt52762;
+    static public int staticInt52763;
+    static public int staticInt52764;
+    static public int staticInt52765;
+    static public int staticInt52766;
+    static public int staticInt52767;
+    static public int staticInt52768;
+    static public int staticInt52769;
+    static public int staticInt52770;
+    static public int staticInt52771;
+    static public int staticInt52772;
+    static public int staticInt52773;
+    static public int staticInt52774;
+    static public int staticInt52775;
+    static public int staticInt52776;
+    static public int staticInt52777;
+    static public int staticInt52778;
+    static public int staticInt52779;
+    static public int staticInt52780;
+    static public int staticInt52781;
+    static public int staticInt52782;
+    static public int staticInt52783;
+    static public int staticInt52784;
+    static public int staticInt52785;
+    static public int staticInt52786;
+    static public int staticInt52787;
+    static public int staticInt52788;
+    static public int staticInt52789;
+    static public int staticInt52790;
+    static public int staticInt52791;
+    static public int staticInt52792;
+    static public int staticInt52793;
+    static public int staticInt52794;
+    static public int staticInt52795;
+    static public int staticInt52796;
+    static public int staticInt52797;
+    static public int staticInt52798;
+    static public int staticInt52799;
+    static public int staticInt52800;
+    static public int staticInt52801;
+    static public int staticInt52802;
+    static public int staticInt52803;
+    static public int staticInt52804;
+    static public int staticInt52805;
+    static public int staticInt52806;
+    static public int staticInt52807;
+    static public int staticInt52808;
+    static public int staticInt52809;
+    static public int staticInt52810;
+    static public int staticInt52811;
+    static public int staticInt52812;
+    static public int staticInt52813;
+    static public int staticInt52814;
+    static public int staticInt52815;
+    static public int staticInt52816;
+    static public int staticInt52817;
+    static public int staticInt52818;
+    static public int staticInt52819;
+    static public int staticInt52820;
+    static public int staticInt52821;
+    static public int staticInt52822;
+    static public int staticInt52823;
+    static public int staticInt52824;
+    static public int staticInt52825;
+    static public int staticInt52826;
+    static public int staticInt52827;
+    static public int staticInt52828;
+    static public int staticInt52829;
+    static public int staticInt52830;
+    static public int staticInt52831;
+    static public int staticInt52832;
+    static public int staticInt52833;
+    static public int staticInt52834;
+    static public int staticInt52835;
+    static public int staticInt52836;
+    static public int staticInt52837;
+    static public int staticInt52838;
+    static public int staticInt52839;
+    static public int staticInt52840;
+    static public int staticInt52841;
+    static public int staticInt52842;
+    static public int staticInt52843;
+    static public int staticInt52844;
+    static public int staticInt52845;
+    static public int staticInt52846;
+    static public int staticInt52847;
+    static public int staticInt52848;
+    static public int staticInt52849;
+    static public int staticInt52850;
+    static public int staticInt52851;
+    static public int staticInt52852;
+    static public int staticInt52853;
+    static public int staticInt52854;
+    static public int staticInt52855;
+    static public int staticInt52856;
+    static public int staticInt52857;
+    static public int staticInt52858;
+    static public int staticInt52859;
+    static public int staticInt52860;
+    static public int staticInt52861;
+    static public int staticInt52862;
+    static public int staticInt52863;
+    static public int staticInt52864;
+    static public int staticInt52865;
+    static public int staticInt52866;
+    static public int staticInt52867;
+    static public int staticInt52868;
+    static public int staticInt52869;
+    static public int staticInt52870;
+    static public int staticInt52871;
+    static public int staticInt52872;
+    static public int staticInt52873;
+    static public int staticInt52874;
+    static public int staticInt52875;
+    static public int staticInt52876;
+    static public int staticInt52877;
+    static public int staticInt52878;
+    static public int staticInt52879;
+    static public int staticInt52880;
+    static public int staticInt52881;
+    static public int staticInt52882;
+    static public int staticInt52883;
+    static public int staticInt52884;
+    static public int staticInt52885;
+    static public int staticInt52886;
+    static public int staticInt52887;
+    static public int staticInt52888;
+    static public int staticInt52889;
+    static public int staticInt52890;
+    static public int staticInt52891;
+    static public int staticInt52892;
+    static public int staticInt52893;
+    static public int staticInt52894;
+    static public int staticInt52895;
+    static public int staticInt52896;
+    static public int staticInt52897;
+    static public int staticInt52898;
+    static public int staticInt52899;
+    static public int staticInt52900;
+    static public int staticInt52901;
+    static public int staticInt52902;
+    static public int staticInt52903;
+    static public int staticInt52904;
+    static public int staticInt52905;
+    static public int staticInt52906;
+    static public int staticInt52907;
+    static public int staticInt52908;
+    static public int staticInt52909;
+    static public int staticInt52910;
+    static public int staticInt52911;
+    static public int staticInt52912;
+    static public int staticInt52913;
+    static public int staticInt52914;
+    static public int staticInt52915;
+    static public int staticInt52916;
+    static public int staticInt52917;
+    static public int staticInt52918;
+    static public int staticInt52919;
+    static public int staticInt52920;
+    static public int staticInt52921;
+    static public int staticInt52922;
+    static public int staticInt52923;
+    static public int staticInt52924;
+    static public int staticInt52925;
+    static public int staticInt52926;
+    static public int staticInt52927;
+    static public int staticInt52928;
+    static public int staticInt52929;
+    static public int staticInt52930;
+    static public int staticInt52931;
+    static public int staticInt52932;
+    static public int staticInt52933;
+    static public int staticInt52934;
+    static public int staticInt52935;
+    static public int staticInt52936;
+    static public int staticInt52937;
+    static public int staticInt52938;
+    static public int staticInt52939;
+    static public int staticInt52940;
+    static public int staticInt52941;
+    static public int staticInt52942;
+    static public int staticInt52943;
+    static public int staticInt52944;
+    static public int staticInt52945;
+    static public int staticInt52946;
+    static public int staticInt52947;
+    static public int staticInt52948;
+    static public int staticInt52949;
+    static public int staticInt52950;
+    static public int staticInt52951;
+    static public int staticInt52952;
+    static public int staticInt52953;
+    static public int staticInt52954;
+    static public int staticInt52955;
+    static public int staticInt52956;
+    static public int staticInt52957;
+    static public int staticInt52958;
+    static public int staticInt52959;
+    static public int staticInt52960;
+    static public int staticInt52961;
+    static public int staticInt52962;
+    static public int staticInt52963;
+    static public int staticInt52964;
+    static public int staticInt52965;
+    static public int staticInt52966;
+    static public int staticInt52967;
+    static public int staticInt52968;
+    static public int staticInt52969;
+    static public int staticInt52970;
+    static public int staticInt52971;
+    static public int staticInt52972;
+    static public int staticInt52973;
+    static public int staticInt52974;
+    static public int staticInt52975;
+    static public int staticInt52976;
+    static public int staticInt52977;
+    static public int staticInt52978;
+    static public int staticInt52979;
+    static public int staticInt52980;
+    static public int staticInt52981;
+    static public int staticInt52982;
+    static public int staticInt52983;
+    static public int staticInt52984;
+    static public int staticInt52985;
+    static public int staticInt52986;
+    static public int staticInt52987;
+    static public int staticInt52988;
+    static public int staticInt52989;
+    static public int staticInt52990;
+    static public int staticInt52991;
+    static public int staticInt52992;
+    static public int staticInt52993;
+    static public int staticInt52994;
+    static public int staticInt52995;
+    static public int staticInt52996;
+    static public int staticInt52997;
+    static public int staticInt52998;
+    static public int staticInt52999;
+    static public int staticInt53000;
+    static public int staticInt53001;
+    static public int staticInt53002;
+    static public int staticInt53003;
+    static public int staticInt53004;
+    static public int staticInt53005;
+    static public int staticInt53006;
+    static public int staticInt53007;
+    static public int staticInt53008;
+    static public int staticInt53009;
+    static public int staticInt53010;
+    static public int staticInt53011;
+    static public int staticInt53012;
+    static public int staticInt53013;
+    static public int staticInt53014;
+    static public int staticInt53015;
+    static public int staticInt53016;
+    static public int staticInt53017;
+    static public int staticInt53018;
+    static public int staticInt53019;
+    static public int staticInt53020;
+    static public int staticInt53021;
+    static public int staticInt53022;
+    static public int staticInt53023;
+    static public int staticInt53024;
+    static public int staticInt53025;
+    static public int staticInt53026;
+    static public int staticInt53027;
+    static public int staticInt53028;
+    static public int staticInt53029;
+    static public int staticInt53030;
+    static public int staticInt53031;
+    static public int staticInt53032;
+    static public int staticInt53033;
+    static public int staticInt53034;
+    static public int staticInt53035;
+    static public int staticInt53036;
+    static public int staticInt53037;
+    static public int staticInt53038;
+    static public int staticInt53039;
+    static public int staticInt53040;
+    static public int staticInt53041;
+    static public int staticInt53042;
+    static public int staticInt53043;
+    static public int staticInt53044;
+    static public int staticInt53045;
+    static public int staticInt53046;
+    static public int staticInt53047;
+    static public int staticInt53048;
+    static public int staticInt53049;
+    static public int staticInt53050;
+    static public int staticInt53051;
+    static public int staticInt53052;
+    static public int staticInt53053;
+    static public int staticInt53054;
+    static public int staticInt53055;
+    static public int staticInt53056;
+    static public int staticInt53057;
+    static public int staticInt53058;
+    static public int staticInt53059;
+    static public int staticInt53060;
+    static public int staticInt53061;
+    static public int staticInt53062;
+    static public int staticInt53063;
+    static public int staticInt53064;
+    static public int staticInt53065;
+    static public int staticInt53066;
+    static public int staticInt53067;
+    static public int staticInt53068;
+    static public int staticInt53069;
+    static public int staticInt53070;
+    static public int staticInt53071;
+    static public int staticInt53072;
+    static public int staticInt53073;
+    static public int staticInt53074;
+    static public int staticInt53075;
+    static public int staticInt53076;
+    static public int staticInt53077;
+    static public int staticInt53078;
+    static public int staticInt53079;
+    static public int staticInt53080;
+    static public int staticInt53081;
+    static public int staticInt53082;
+    static public int staticInt53083;
+    static public int staticInt53084;
+    static public int staticInt53085;
+    static public int staticInt53086;
+    static public int staticInt53087;
+    static public int staticInt53088;
+    static public int staticInt53089;
+    static public int staticInt53090;
+    static public int staticInt53091;
+    static public int staticInt53092;
+    static public int staticInt53093;
+    static public int staticInt53094;
+    static public int staticInt53095;
+    static public int staticInt53096;
+    static public int staticInt53097;
+    static public int staticInt53098;
+    static public int staticInt53099;
+    static public int staticInt53100;
+    static public int staticInt53101;
+    static public int staticInt53102;
+    static public int staticInt53103;
+    static public int staticInt53104;
+    static public int staticInt53105;
+    static public int staticInt53106;
+    static public int staticInt53107;
+    static public int staticInt53108;
+    static public int staticInt53109;
+    static public int staticInt53110;
+    static public int staticInt53111;
+    static public int staticInt53112;
+    static public int staticInt53113;
+    static public int staticInt53114;
+    static public int staticInt53115;
+    static public int staticInt53116;
+    static public int staticInt53117;
+    static public int staticInt53118;
+    static public int staticInt53119;
+    static public int staticInt53120;
+    static public int staticInt53121;
+    static public int staticInt53122;
+    static public int staticInt53123;
+    static public int staticInt53124;
+    static public int staticInt53125;
+    static public int staticInt53126;
+    static public int staticInt53127;
+    static public int staticInt53128;
+    static public int staticInt53129;
+    static public int staticInt53130;
+    static public int staticInt53131;
+    static public int staticInt53132;
+    static public int staticInt53133;
+    static public int staticInt53134;
+    static public int staticInt53135;
+    static public int staticInt53136;
+    static public int staticInt53137;
+    static public int staticInt53138;
+    static public int staticInt53139;
+    static public int staticInt53140;
+    static public int staticInt53141;
+    static public int staticInt53142;
+    static public int staticInt53143;
+    static public int staticInt53144;
+    static public int staticInt53145;
+    static public int staticInt53146;
+    static public int staticInt53147;
+    static public int staticInt53148;
+    static public int staticInt53149;
+    static public int staticInt53150;
+    static public int staticInt53151;
+    static public int staticInt53152;
+    static public int staticInt53153;
+    static public int staticInt53154;
+    static public int staticInt53155;
+    static public int staticInt53156;
+    static public int staticInt53157;
+    static public int staticInt53158;
+    static public int staticInt53159;
+    static public int staticInt53160;
+    static public int staticInt53161;
+    static public int staticInt53162;
+    static public int staticInt53163;
+    static public int staticInt53164;
+    static public int staticInt53165;
+    static public int staticInt53166;
+    static public int staticInt53167;
+    static public int staticInt53168;
+    static public int staticInt53169;
+    static public int staticInt53170;
+    static public int staticInt53171;
+    static public int staticInt53172;
+    static public int staticInt53173;
+    static public int staticInt53174;
+    static public int staticInt53175;
+    static public int staticInt53176;
+    static public int staticInt53177;
+    static public int staticInt53178;
+    static public int staticInt53179;
+    static public int staticInt53180;
+    static public int staticInt53181;
+    static public int staticInt53182;
+    static public int staticInt53183;
+    static public int staticInt53184;
+    static public int staticInt53185;
+    static public int staticInt53186;
+    static public int staticInt53187;
+    static public int staticInt53188;
+    static public int staticInt53189;
+    static public int staticInt53190;
+    static public int staticInt53191;
+    static public int staticInt53192;
+    static public int staticInt53193;
+    static public int staticInt53194;
+    static public int staticInt53195;
+    static public int staticInt53196;
+    static public int staticInt53197;
+    static public int staticInt53198;
+    static public int staticInt53199;
+    static public int staticInt53200;
+    static public int staticInt53201;
+    static public int staticInt53202;
+    static public int staticInt53203;
+    static public int staticInt53204;
+    static public int staticInt53205;
+    static public int staticInt53206;
+    static public int staticInt53207;
+    static public int staticInt53208;
+    static public int staticInt53209;
+    static public int staticInt53210;
+    static public int staticInt53211;
+    static public int staticInt53212;
+    static public int staticInt53213;
+    static public int staticInt53214;
+    static public int staticInt53215;
+    static public int staticInt53216;
+    static public int staticInt53217;
+    static public int staticInt53218;
+    static public int staticInt53219;
+    static public int staticInt53220;
+    static public int staticInt53221;
+    static public int staticInt53222;
+    static public int staticInt53223;
+    static public int staticInt53224;
+    static public int staticInt53225;
+    static public int staticInt53226;
+    static public int staticInt53227;
+    static public int staticInt53228;
+    static public int staticInt53229;
+    static public int staticInt53230;
+    static public int staticInt53231;
+    static public int staticInt53232;
+    static public int staticInt53233;
+    static public int staticInt53234;
+    static public int staticInt53235;
+    static public int staticInt53236;
+    static public int staticInt53237;
+    static public int staticInt53238;
+    static public int staticInt53239;
+    static public int staticInt53240;
+    static public int staticInt53241;
+    static public int staticInt53242;
+    static public int staticInt53243;
+    static public int staticInt53244;
+    static public int staticInt53245;
+    static public int staticInt53246;
+    static public int staticInt53247;
+    static public int staticInt53248;
+    static public int staticInt53249;
+    static public int staticInt53250;
+    static public int staticInt53251;
+    static public int staticInt53252;
+    static public int staticInt53253;
+    static public int staticInt53254;
+    static public int staticInt53255;
+    static public int staticInt53256;
+    static public int staticInt53257;
+    static public int staticInt53258;
+    static public int staticInt53259;
+    static public int staticInt53260;
+    static public int staticInt53261;
+    static public int staticInt53262;
+    static public int staticInt53263;
+    static public int staticInt53264;
+    static public int staticInt53265;
+    static public int staticInt53266;
+    static public int staticInt53267;
+    static public int staticInt53268;
+    static public int staticInt53269;
+    static public int staticInt53270;
+    static public int staticInt53271;
+    static public int staticInt53272;
+    static public int staticInt53273;
+    static public int staticInt53274;
+    static public int staticInt53275;
+    static public int staticInt53276;
+    static public int staticInt53277;
+    static public int staticInt53278;
+    static public int staticInt53279;
+    static public int staticInt53280;
+    static public int staticInt53281;
+    static public int staticInt53282;
+    static public int staticInt53283;
+    static public int staticInt53284;
+    static public int staticInt53285;
+    static public int staticInt53286;
+    static public int staticInt53287;
+    static public int staticInt53288;
+    static public int staticInt53289;
+    static public int staticInt53290;
+    static public int staticInt53291;
+    static public int staticInt53292;
+    static public int staticInt53293;
+    static public int staticInt53294;
+    static public int staticInt53295;
+    static public int staticInt53296;
+    static public int staticInt53297;
+    static public int staticInt53298;
+    static public int staticInt53299;
+    static public int staticInt53300;
+    static public int staticInt53301;
+    static public int staticInt53302;
+    static public int staticInt53303;
+    static public int staticInt53304;
+    static public int staticInt53305;
+    static public int staticInt53306;
+    static public int staticInt53307;
+    static public int staticInt53308;
+    static public int staticInt53309;
+    static public int staticInt53310;
+    static public int staticInt53311;
+    static public int staticInt53312;
+    static public int staticInt53313;
+    static public int staticInt53314;
+    static public int staticInt53315;
+    static public int staticInt53316;
+    static public int staticInt53317;
+    static public int staticInt53318;
+    static public int staticInt53319;
+    static public int staticInt53320;
+    static public int staticInt53321;
+    static public int staticInt53322;
+    static public int staticInt53323;
+    static public int staticInt53324;
+    static public int staticInt53325;
+    static public int staticInt53326;
+    static public int staticInt53327;
+    static public int staticInt53328;
+    static public int staticInt53329;
+    static public int staticInt53330;
+    static public int staticInt53331;
+    static public int staticInt53332;
+    static public int staticInt53333;
+    static public int staticInt53334;
+    static public int staticInt53335;
+    static public int staticInt53336;
+    static public int staticInt53337;
+    static public int staticInt53338;
+    static public int staticInt53339;
+    static public int staticInt53340;
+    static public int staticInt53341;
+    static public int staticInt53342;
+    static public int staticInt53343;
+    static public int staticInt53344;
+    static public int staticInt53345;
+    static public int staticInt53346;
+    static public int staticInt53347;
+    static public int staticInt53348;
+    static public int staticInt53349;
+    static public int staticInt53350;
+    static public int staticInt53351;
+    static public int staticInt53352;
+    static public int staticInt53353;
+    static public int staticInt53354;
+    static public int staticInt53355;
+    static public int staticInt53356;
+    static public int staticInt53357;
+    static public int staticInt53358;
+    static public int staticInt53359;
+    static public int staticInt53360;
+    static public int staticInt53361;
+    static public int staticInt53362;
+    static public int staticInt53363;
+    static public int staticInt53364;
+    static public int staticInt53365;
+    static public int staticInt53366;
+    static public int staticInt53367;
+    static public int staticInt53368;
+    static public int staticInt53369;
+    static public int staticInt53370;
+    static public int staticInt53371;
+    static public int staticInt53372;
+    static public int staticInt53373;
+    static public int staticInt53374;
+    static public int staticInt53375;
+    static public int staticInt53376;
+    static public int staticInt53377;
+    static public int staticInt53378;
+    static public int staticInt53379;
+    static public int staticInt53380;
+    static public int staticInt53381;
+    static public int staticInt53382;
+    static public int staticInt53383;
+    static public int staticInt53384;
+    static public int staticInt53385;
+    static public int staticInt53386;
+    static public int staticInt53387;
+    static public int staticInt53388;
+    static public int staticInt53389;
+    static public int staticInt53390;
+    static public int staticInt53391;
+    static public int staticInt53392;
+    static public int staticInt53393;
+    static public int staticInt53394;
+    static public int staticInt53395;
+    static public int staticInt53396;
+    static public int staticInt53397;
+    static public int staticInt53398;
+    static public int staticInt53399;
+    static public int staticInt53400;
+    static public int staticInt53401;
+    static public int staticInt53402;
+    static public int staticInt53403;
+    static public int staticInt53404;
+    static public int staticInt53405;
+    static public int staticInt53406;
+    static public int staticInt53407;
+    static public int staticInt53408;
+    static public int staticInt53409;
+    static public int staticInt53410;
+    static public int staticInt53411;
+    static public int staticInt53412;
+    static public int staticInt53413;
+    static public int staticInt53414;
+    static public int staticInt53415;
+    static public int staticInt53416;
+    static public int staticInt53417;
+    static public int staticInt53418;
+    static public int staticInt53419;
+    static public int staticInt53420;
+    static public int staticInt53421;
+    static public int staticInt53422;
+    static public int staticInt53423;
+    static public int staticInt53424;
+    static public int staticInt53425;
+    static public int staticInt53426;
+    static public int staticInt53427;
+    static public int staticInt53428;
+    static public int staticInt53429;
+    static public int staticInt53430;
+    static public int staticInt53431;
+    static public int staticInt53432;
+    static public int staticInt53433;
+    static public int staticInt53434;
+    static public int staticInt53435;
+    static public int staticInt53436;
+    static public int staticInt53437;
+    static public int staticInt53438;
+    static public int staticInt53439;
+    static public int staticInt53440;
+    static public int staticInt53441;
+    static public int staticInt53442;
+    static public int staticInt53443;
+    static public int staticInt53444;
+    static public int staticInt53445;
+    static public int staticInt53446;
+    static public int staticInt53447;
+    static public int staticInt53448;
+    static public int staticInt53449;
+    static public int staticInt53450;
+    static public int staticInt53451;
+    static public int staticInt53452;
+    static public int staticInt53453;
+    static public int staticInt53454;
+    static public int staticInt53455;
+    static public int staticInt53456;
+    static public int staticInt53457;
+    static public int staticInt53458;
+    static public int staticInt53459;
+    static public int staticInt53460;
+    static public int staticInt53461;
+    static public int staticInt53462;
+    static public int staticInt53463;
+    static public int staticInt53464;
+    static public int staticInt53465;
+    static public int staticInt53466;
+    static public int staticInt53467;
+    static public int staticInt53468;
+    static public int staticInt53469;
+    static public int staticInt53470;
+    static public int staticInt53471;
+    static public int staticInt53472;
+    static public int staticInt53473;
+    static public int staticInt53474;
+    static public int staticInt53475;
+    static public int staticInt53476;
+    static public int staticInt53477;
+    static public int staticInt53478;
+    static public int staticInt53479;
+    static public int staticInt53480;
+    static public int staticInt53481;
+    static public int staticInt53482;
+    static public int staticInt53483;
+    static public int staticInt53484;
+    static public int staticInt53485;
+    static public int staticInt53486;
+    static public int staticInt53487;
+    static public int staticInt53488;
+    static public int staticInt53489;
+    static public int staticInt53490;
+    static public int staticInt53491;
+    static public int staticInt53492;
+    static public int staticInt53493;
+    static public int staticInt53494;
+    static public int staticInt53495;
+    static public int staticInt53496;
+    static public int staticInt53497;
+    static public int staticInt53498;
+    static public int staticInt53499;
+    static public int staticInt53500;
+    static public int staticInt53501;
+    static public int staticInt53502;
+    static public int staticInt53503;
+    static public int staticInt53504;
+    static public int staticInt53505;
+    static public int staticInt53506;
+    static public int staticInt53507;
+    static public int staticInt53508;
+    static public int staticInt53509;
+    static public int staticInt53510;
+    static public int staticInt53511;
+    static public int staticInt53512;
+    static public int staticInt53513;
+    static public int staticInt53514;
+    static public int staticInt53515;
+    static public int staticInt53516;
+    static public int staticInt53517;
+    static public int staticInt53518;
+    static public int staticInt53519;
+    static public int staticInt53520;
+    static public int staticInt53521;
+    static public int staticInt53522;
+    static public int staticInt53523;
+    static public int staticInt53524;
+    static public int staticInt53525;
+    static public int staticInt53526;
+    static public int staticInt53527;
+    static public int staticInt53528;
+    static public int staticInt53529;
+    static public int staticInt53530;
+    static public int staticInt53531;
+    static public int staticInt53532;
+    static public int staticInt53533;
+    static public int staticInt53534;
+    static public int staticInt53535;
+    static public int staticInt53536;
+    static public int staticInt53537;
+    static public int staticInt53538;
+    static public int staticInt53539;
+    static public int staticInt53540;
+    static public int staticInt53541;
+    static public int staticInt53542;
+    static public int staticInt53543;
+    static public int staticInt53544;
+    static public int staticInt53545;
+    static public int staticInt53546;
+    static public int staticInt53547;
+    static public int staticInt53548;
+    static public int staticInt53549;
+    static public int staticInt53550;
+    static public int staticInt53551;
+    static public int staticInt53552;
+    static public int staticInt53553;
+    static public int staticInt53554;
+    static public int staticInt53555;
+    static public int staticInt53556;
+    static public int staticInt53557;
+    static public int staticInt53558;
+    static public int staticInt53559;
+    static public int staticInt53560;
+    static public int staticInt53561;
+    static public int staticInt53562;
+    static public int staticInt53563;
+    static public int staticInt53564;
+    static public int staticInt53565;
+    static public int staticInt53566;
+    static public int staticInt53567;
+    static public int staticInt53568;
+    static public int staticInt53569;
+    static public int staticInt53570;
+    static public int staticInt53571;
+    static public int staticInt53572;
+    static public int staticInt53573;
+    static public int staticInt53574;
+    static public int staticInt53575;
+    static public int staticInt53576;
+    static public int staticInt53577;
+    static public int staticInt53578;
+    static public int staticInt53579;
+    static public int staticInt53580;
+    static public int staticInt53581;
+    static public int staticInt53582;
+    static public int staticInt53583;
+    static public int staticInt53584;
+    static public int staticInt53585;
+    static public int staticInt53586;
+    static public int staticInt53587;
+    static public int staticInt53588;
+    static public int staticInt53589;
+    static public int staticInt53590;
+    static public int staticInt53591;
+    static public int staticInt53592;
+    static public int staticInt53593;
+    static public int staticInt53594;
+    static public int staticInt53595;
+    static public int staticInt53596;
+    static public int staticInt53597;
+    static public int staticInt53598;
+    static public int staticInt53599;
+    static public int staticInt53600;
+    static public int staticInt53601;
+    static public int staticInt53602;
+    static public int staticInt53603;
+    static public int staticInt53604;
+    static public int staticInt53605;
+    static public int staticInt53606;
+    static public int staticInt53607;
+    static public int staticInt53608;
+    static public int staticInt53609;
+    static public int staticInt53610;
+    static public int staticInt53611;
+    static public int staticInt53612;
+    static public int staticInt53613;
+    static public int staticInt53614;
+    static public int staticInt53615;
+    static public int staticInt53616;
+    static public int staticInt53617;
+    static public int staticInt53618;
+    static public int staticInt53619;
+    static public int staticInt53620;
+    static public int staticInt53621;
+    static public int staticInt53622;
+    static public int staticInt53623;
+    static public int staticInt53624;
+    static public int staticInt53625;
+    static public int staticInt53626;
+    static public int staticInt53627;
+    static public int staticInt53628;
+    static public int staticInt53629;
+    static public int staticInt53630;
+    static public int staticInt53631;
+    static public int staticInt53632;
+    static public int staticInt53633;
+    static public int staticInt53634;
+    static public int staticInt53635;
+    static public int staticInt53636;
+    static public int staticInt53637;
+    static public int staticInt53638;
+    static public int staticInt53639;
+    static public int staticInt53640;
+    static public int staticInt53641;
+    static public int staticInt53642;
+    static public int staticInt53643;
+    static public int staticInt53644;
+    static public int staticInt53645;
+    static public int staticInt53646;
+    static public int staticInt53647;
+    static public int staticInt53648;
+    static public int staticInt53649;
+    static public int staticInt53650;
+    static public int staticInt53651;
+    static public int staticInt53652;
+    static public int staticInt53653;
+    static public int staticInt53654;
+    static public int staticInt53655;
+    static public int staticInt53656;
+    static public int staticInt53657;
+    static public int staticInt53658;
+    static public int staticInt53659;
+    static public int staticInt53660;
+    static public int staticInt53661;
+    static public int staticInt53662;
+    static public int staticInt53663;
+    static public int staticInt53664;
+    static public int staticInt53665;
+    static public int staticInt53666;
+    static public int staticInt53667;
+    static public int staticInt53668;
+    static public int staticInt53669;
+    static public int staticInt53670;
+    static public int staticInt53671;
+    static public int staticInt53672;
+    static public int staticInt53673;
+    static public int staticInt53674;
+    static public int staticInt53675;
+    static public int staticInt53676;
+    static public int staticInt53677;
+    static public int staticInt53678;
+    static public int staticInt53679;
+    static public int staticInt53680;
+    static public int staticInt53681;
+    static public int staticInt53682;
+    static public int staticInt53683;
+    static public int staticInt53684;
+    static public int staticInt53685;
+    static public int staticInt53686;
+    static public int staticInt53687;
+    static public int staticInt53688;
+    static public int staticInt53689;
+    static public int staticInt53690;
+    static public int staticInt53691;
+    static public int staticInt53692;
+    static public int staticInt53693;
+    static public int staticInt53694;
+    static public int staticInt53695;
+    static public int staticInt53696;
+    static public int staticInt53697;
+    static public int staticInt53698;
+    static public int staticInt53699;
+    static public int staticInt53700;
+    static public int staticInt53701;
+    static public int staticInt53702;
+    static public int staticInt53703;
+    static public int staticInt53704;
+    static public int staticInt53705;
+    static public int staticInt53706;
+    static public int staticInt53707;
+    static public int staticInt53708;
+    static public int staticInt53709;
+    static public int staticInt53710;
+    static public int staticInt53711;
+    static public int staticInt53712;
+    static public int staticInt53713;
+    static public int staticInt53714;
+    static public int staticInt53715;
+    static public int staticInt53716;
+    static public int staticInt53717;
+    static public int staticInt53718;
+    static public int staticInt53719;
+    static public int staticInt53720;
+    static public int staticInt53721;
+    static public int staticInt53722;
+    static public int staticInt53723;
+    static public int staticInt53724;
+    static public int staticInt53725;
+    static public int staticInt53726;
+    static public int staticInt53727;
+    static public int staticInt53728;
+    static public int staticInt53729;
+    static public int staticInt53730;
+    static public int staticInt53731;
+    static public int staticInt53732;
+    static public int staticInt53733;
+    static public int staticInt53734;
+    static public int staticInt53735;
+    static public int staticInt53736;
+    static public int staticInt53737;
+    static public int staticInt53738;
+    static public int staticInt53739;
+    static public int staticInt53740;
+    static public int staticInt53741;
+    static public int staticInt53742;
+    static public int staticInt53743;
+    static public int staticInt53744;
+    static public int staticInt53745;
+    static public int staticInt53746;
+    static public int staticInt53747;
+    static public int staticInt53748;
+    static public int staticInt53749;
+    static public int staticInt53750;
+    static public int staticInt53751;
+    static public int staticInt53752;
+    static public int staticInt53753;
+    static public int staticInt53754;
+    static public int staticInt53755;
+    static public int staticInt53756;
+    static public int staticInt53757;
+    static public int staticInt53758;
+    static public int staticInt53759;
+    static public int staticInt53760;
+    static public int staticInt53761;
+    static public int staticInt53762;
+    static public int staticInt53763;
+    static public int staticInt53764;
+    static public int staticInt53765;
+    static public int staticInt53766;
+    static public int staticInt53767;
+    static public int staticInt53768;
+    static public int staticInt53769;
+    static public int staticInt53770;
+    static public int staticInt53771;
+    static public int staticInt53772;
+    static public int staticInt53773;
+    static public int staticInt53774;
+    static public int staticInt53775;
+    static public int staticInt53776;
+    static public int staticInt53777;
+    static public int staticInt53778;
+    static public int staticInt53779;
+    static public int staticInt53780;
+    static public int staticInt53781;
+    static public int staticInt53782;
+    static public int staticInt53783;
+    static public int staticInt53784;
+    static public int staticInt53785;
+    static public int staticInt53786;
+    static public int staticInt53787;
+    static public int staticInt53788;
+    static public int staticInt53789;
+    static public int staticInt53790;
+    static public int staticInt53791;
+    static public int staticInt53792;
+    static public int staticInt53793;
+    static public int staticInt53794;
+    static public int staticInt53795;
+    static public int staticInt53796;
+    static public int staticInt53797;
+    static public int staticInt53798;
+    static public int staticInt53799;
+    static public int staticInt53800;
+    static public int staticInt53801;
+    static public int staticInt53802;
+    static public int staticInt53803;
+    static public int staticInt53804;
+    static public int staticInt53805;
+    static public int staticInt53806;
+    static public int staticInt53807;
+    static public int staticInt53808;
+    static public int staticInt53809;
+    static public int staticInt53810;
+    static public int staticInt53811;
+    static public int staticInt53812;
+    static public int staticInt53813;
+    static public int staticInt53814;
+    static public int staticInt53815;
+    static public int staticInt53816;
+    static public int staticInt53817;
+    static public int staticInt53818;
+    static public int staticInt53819;
+    static public int staticInt53820;
+    static public int staticInt53821;
+    static public int staticInt53822;
+    static public int staticInt53823;
+    static public int staticInt53824;
+    static public int staticInt53825;
+    static public int staticInt53826;
+    static public int staticInt53827;
+    static public int staticInt53828;
+    static public int staticInt53829;
+    static public int staticInt53830;
+    static public int staticInt53831;
+    static public int staticInt53832;
+    static public int staticInt53833;
+    static public int staticInt53834;
+    static public int staticInt53835;
+    static public int staticInt53836;
+    static public int staticInt53837;
+    static public int staticInt53838;
+    static public int staticInt53839;
+    static public int staticInt53840;
+    static public int staticInt53841;
+    static public int staticInt53842;
+    static public int staticInt53843;
+    static public int staticInt53844;
+    static public int staticInt53845;
+    static public int staticInt53846;
+    static public int staticInt53847;
+    static public int staticInt53848;
+    static public int staticInt53849;
+    static public int staticInt53850;
+    static public int staticInt53851;
+    static public int staticInt53852;
+    static public int staticInt53853;
+    static public int staticInt53854;
+    static public int staticInt53855;
+    static public int staticInt53856;
+    static public int staticInt53857;
+    static public int staticInt53858;
+    static public int staticInt53859;
+    static public int staticInt53860;
+    static public int staticInt53861;
+    static public int staticInt53862;
+    static public int staticInt53863;
+    static public int staticInt53864;
+    static public int staticInt53865;
+    static public int staticInt53866;
+    static public int staticInt53867;
+    static public int staticInt53868;
+    static public int staticInt53869;
+    static public int staticInt53870;
+    static public int staticInt53871;
+    static public int staticInt53872;
+    static public int staticInt53873;
+    static public int staticInt53874;
+    static public int staticInt53875;
+    static public int staticInt53876;
+    static public int staticInt53877;
+    static public int staticInt53878;
+    static public int staticInt53879;
+    static public int staticInt53880;
+    static public int staticInt53881;
+    static public int staticInt53882;
+    static public int staticInt53883;
+    static public int staticInt53884;
+    static public int staticInt53885;
+    static public int staticInt53886;
+    static public int staticInt53887;
+    static public int staticInt53888;
+    static public int staticInt53889;
+    static public int staticInt53890;
+    static public int staticInt53891;
+    static public int staticInt53892;
+    static public int staticInt53893;
+    static public int staticInt53894;
+    static public int staticInt53895;
+    static public int staticInt53896;
+    static public int staticInt53897;
+    static public int staticInt53898;
+    static public int staticInt53899;
+    static public int staticInt53900;
+    static public int staticInt53901;
+    static public int staticInt53902;
+    static public int staticInt53903;
+    static public int staticInt53904;
+    static public int staticInt53905;
+    static public int staticInt53906;
+    static public int staticInt53907;
+    static public int staticInt53908;
+    static public int staticInt53909;
+    static public int staticInt53910;
+    static public int staticInt53911;
+    static public int staticInt53912;
+    static public int staticInt53913;
+    static public int staticInt53914;
+    static public int staticInt53915;
+    static public int staticInt53916;
+    static public int staticInt53917;
+    static public int staticInt53918;
+    static public int staticInt53919;
+    static public int staticInt53920;
+    static public int staticInt53921;
+    static public int staticInt53922;
+    static public int staticInt53923;
+    static public int staticInt53924;
+    static public int staticInt53925;
+    static public int staticInt53926;
+    static public int staticInt53927;
+    static public int staticInt53928;
+    static public int staticInt53929;
+    static public int staticInt53930;
+    static public int staticInt53931;
+    static public int staticInt53932;
+    static public int staticInt53933;
+    static public int staticInt53934;
+    static public int staticInt53935;
+    static public int staticInt53936;
+    static public int staticInt53937;
+    static public int staticInt53938;
+    static public int staticInt53939;
+    static public int staticInt53940;
+    static public int staticInt53941;
+    static public int staticInt53942;
+    static public int staticInt53943;
+    static public int staticInt53944;
+    static public int staticInt53945;
+    static public int staticInt53946;
+    static public int staticInt53947;
+    static public int staticInt53948;
+    static public int staticInt53949;
+    static public int staticInt53950;
+    static public int staticInt53951;
+    static public int staticInt53952;
+    static public int staticInt53953;
+    static public int staticInt53954;
+    static public int staticInt53955;
+    static public int staticInt53956;
+    static public int staticInt53957;
+    static public int staticInt53958;
+    static public int staticInt53959;
+    static public int staticInt53960;
+    static public int staticInt53961;
+    static public int staticInt53962;
+    static public int staticInt53963;
+    static public int staticInt53964;
+    static public int staticInt53965;
+    static public int staticInt53966;
+    static public int staticInt53967;
+    static public int staticInt53968;
+    static public int staticInt53969;
+    static public int staticInt53970;
+    static public int staticInt53971;
+    static public int staticInt53972;
+    static public int staticInt53973;
+    static public int staticInt53974;
+    static public int staticInt53975;
+    static public int staticInt53976;
+    static public int staticInt53977;
+    static public int staticInt53978;
+    static public int staticInt53979;
+    static public int staticInt53980;
+    static public int staticInt53981;
+    static public int staticInt53982;
+    static public int staticInt53983;
+    static public int staticInt53984;
+    static public int staticInt53985;
+    static public int staticInt53986;
+    static public int staticInt53987;
+    static public int staticInt53988;
+    static public int staticInt53989;
+    static public int staticInt53990;
+    static public int staticInt53991;
+    static public int staticInt53992;
+    static public int staticInt53993;
+    static public int staticInt53994;
+    static public int staticInt53995;
+    static public int staticInt53996;
+    static public int staticInt53997;
+    static public int staticInt53998;
+    static public int staticInt53999;
+    static public int staticInt54000;
+    static public int staticInt54001;
+    static public int staticInt54002;
+    static public int staticInt54003;
+    static public int staticInt54004;
+    static public int staticInt54005;
+    static public int staticInt54006;
+    static public int staticInt54007;
+    static public int staticInt54008;
+    static public int staticInt54009;
+    static public int staticInt54010;
+    static public int staticInt54011;
+    static public int staticInt54012;
+    static public int staticInt54013;
+    static public int staticInt54014;
+    static public int staticInt54015;
+    static public int staticInt54016;
+    static public int staticInt54017;
+    static public int staticInt54018;
+    static public int staticInt54019;
+    static public int staticInt54020;
+    static public int staticInt54021;
+    static public int staticInt54022;
+    static public int staticInt54023;
+    static public int staticInt54024;
+    static public int staticInt54025;
+    static public int staticInt54026;
+    static public int staticInt54027;
+    static public int staticInt54028;
+    static public int staticInt54029;
+    static public int staticInt54030;
+    static public int staticInt54031;
+    static public int staticInt54032;
+    static public int staticInt54033;
+    static public int staticInt54034;
+    static public int staticInt54035;
+    static public int staticInt54036;
+    static public int staticInt54037;
+    static public int staticInt54038;
+    static public int staticInt54039;
+    static public int staticInt54040;
+    static public int staticInt54041;
+    static public int staticInt54042;
+    static public int staticInt54043;
+    static public int staticInt54044;
+    static public int staticInt54045;
+    static public int staticInt54046;
+    static public int staticInt54047;
+    static public int staticInt54048;
+    static public int staticInt54049;
+    static public int staticInt54050;
+    static public int staticInt54051;
+    static public int staticInt54052;
+    static public int staticInt54053;
+    static public int staticInt54054;
+    static public int staticInt54055;
+    static public int staticInt54056;
+    static public int staticInt54057;
+    static public int staticInt54058;
+    static public int staticInt54059;
+    static public int staticInt54060;
+    static public int staticInt54061;
+    static public int staticInt54062;
+    static public int staticInt54063;
+    static public int staticInt54064;
+    static public int staticInt54065;
+    static public int staticInt54066;
+    static public int staticInt54067;
+    static public int staticInt54068;
+    static public int staticInt54069;
+    static public int staticInt54070;
+    static public int staticInt54071;
+    static public int staticInt54072;
+    static public int staticInt54073;
+    static public int staticInt54074;
+    static public int staticInt54075;
+    static public int staticInt54076;
+    static public int staticInt54077;
+    static public int staticInt54078;
+    static public int staticInt54079;
+    static public int staticInt54080;
+    static public int staticInt54081;
+    static public int staticInt54082;
+    static public int staticInt54083;
+    static public int staticInt54084;
+    static public int staticInt54085;
+    static public int staticInt54086;
+    static public int staticInt54087;
+    static public int staticInt54088;
+    static public int staticInt54089;
+    static public int staticInt54090;
+    static public int staticInt54091;
+    static public int staticInt54092;
+    static public int staticInt54093;
+    static public int staticInt54094;
+    static public int staticInt54095;
+    static public int staticInt54096;
+    static public int staticInt54097;
+    static public int staticInt54098;
+    static public int staticInt54099;
+    static public int staticInt54100;
+    static public int staticInt54101;
+    static public int staticInt54102;
+    static public int staticInt54103;
+    static public int staticInt54104;
+    static public int staticInt54105;
+    static public int staticInt54106;
+    static public int staticInt54107;
+    static public int staticInt54108;
+    static public int staticInt54109;
+    static public int staticInt54110;
+    static public int staticInt54111;
+    static public int staticInt54112;
+    static public int staticInt54113;
+    static public int staticInt54114;
+    static public int staticInt54115;
+    static public int staticInt54116;
+    static public int staticInt54117;
+    static public int staticInt54118;
+    static public int staticInt54119;
+    static public int staticInt54120;
+    static public int staticInt54121;
+    static public int staticInt54122;
+    static public int staticInt54123;
+    static public int staticInt54124;
+    static public int staticInt54125;
+    static public int staticInt54126;
+    static public int staticInt54127;
+    static public int staticInt54128;
+    static public int staticInt54129;
+    static public int staticInt54130;
+    static public int staticInt54131;
+    static public int staticInt54132;
+    static public int staticInt54133;
+    static public int staticInt54134;
+    static public int staticInt54135;
+    static public int staticInt54136;
+    static public int staticInt54137;
+    static public int staticInt54138;
+    static public int staticInt54139;
+    static public int staticInt54140;
+    static public int staticInt54141;
+    static public int staticInt54142;
+    static public int staticInt54143;
+    static public int staticInt54144;
+    static public int staticInt54145;
+    static public int staticInt54146;
+    static public int staticInt54147;
+    static public int staticInt54148;
+    static public int staticInt54149;
+    static public int staticInt54150;
+    static public int staticInt54151;
+    static public int staticInt54152;
+    static public int staticInt54153;
+    static public int staticInt54154;
+    static public int staticInt54155;
+    static public int staticInt54156;
+    static public int staticInt54157;
+    static public int staticInt54158;
+    static public int staticInt54159;
+    static public int staticInt54160;
+    static public int staticInt54161;
+    static public int staticInt54162;
+    static public int staticInt54163;
+    static public int staticInt54164;
+    static public int staticInt54165;
+    static public int staticInt54166;
+    static public int staticInt54167;
+    static public int staticInt54168;
+    static public int staticInt54169;
+    static public int staticInt54170;
+    static public int staticInt54171;
+    static public int staticInt54172;
+    static public int staticInt54173;
+    static public int staticInt54174;
+    static public int staticInt54175;
+    static public int staticInt54176;
+    static public int staticInt54177;
+    static public int staticInt54178;
+    static public int staticInt54179;
+    static public int staticInt54180;
+    static public int staticInt54181;
+    static public int staticInt54182;
+    static public int staticInt54183;
+    static public int staticInt54184;
+    static public int staticInt54185;
+    static public int staticInt54186;
+    static public int staticInt54187;
+    static public int staticInt54188;
+    static public int staticInt54189;
+    static public int staticInt54190;
+    static public int staticInt54191;
+    static public int staticInt54192;
+    static public int staticInt54193;
+    static public int staticInt54194;
+    static public int staticInt54195;
+    static public int staticInt54196;
+    static public int staticInt54197;
+    static public int staticInt54198;
+    static public int staticInt54199;
+    static public int staticInt54200;
+    static public int staticInt54201;
+    static public int staticInt54202;
+    static public int staticInt54203;
+    static public int staticInt54204;
+    static public int staticInt54205;
+    static public int staticInt54206;
+    static public int staticInt54207;
+    static public int staticInt54208;
+    static public int staticInt54209;
+    static public int staticInt54210;
+    static public int staticInt54211;
+    static public int staticInt54212;
+    static public int staticInt54213;
+    static public int staticInt54214;
+    static public int staticInt54215;
+    static public int staticInt54216;
+    static public int staticInt54217;
+    static public int staticInt54218;
+    static public int staticInt54219;
+    static public int staticInt54220;
+    static public int staticInt54221;
+    static public int staticInt54222;
+    static public int staticInt54223;
+    static public int staticInt54224;
+    static public int staticInt54225;
+    static public int staticInt54226;
+    static public int staticInt54227;
+    static public int staticInt54228;
+    static public int staticInt54229;
+    static public int staticInt54230;
+    static public int staticInt54231;
+    static public int staticInt54232;
+    static public int staticInt54233;
+    static public int staticInt54234;
+    static public int staticInt54235;
+    static public int staticInt54236;
+    static public int staticInt54237;
+    static public int staticInt54238;
+    static public int staticInt54239;
+    static public int staticInt54240;
+    static public int staticInt54241;
+    static public int staticInt54242;
+    static public int staticInt54243;
+    static public int staticInt54244;
+    static public int staticInt54245;
+    static public int staticInt54246;
+    static public int staticInt54247;
+    static public int staticInt54248;
+    static public int staticInt54249;
+    static public int staticInt54250;
+    static public int staticInt54251;
+    static public int staticInt54252;
+    static public int staticInt54253;
+    static public int staticInt54254;
+    static public int staticInt54255;
+    static public int staticInt54256;
+    static public int staticInt54257;
+    static public int staticInt54258;
+    static public int staticInt54259;
+    static public int staticInt54260;
+    static public int staticInt54261;
+    static public int staticInt54262;
+    static public int staticInt54263;
+    static public int staticInt54264;
+    static public int staticInt54265;
+    static public int staticInt54266;
+    static public int staticInt54267;
+    static public int staticInt54268;
+    static public int staticInt54269;
+    static public int staticInt54270;
+    static public int staticInt54271;
+    static public int staticInt54272;
+    static public int staticInt54273;
+    static public int staticInt54274;
+    static public int staticInt54275;
+    static public int staticInt54276;
+    static public int staticInt54277;
+    static public int staticInt54278;
+    static public int staticInt54279;
+    static public int staticInt54280;
+    static public int staticInt54281;
+    static public int staticInt54282;
+    static public int staticInt54283;
+    static public int staticInt54284;
+    static public int staticInt54285;
+    static public int staticInt54286;
+    static public int staticInt54287;
+    static public int staticInt54288;
+    static public int staticInt54289;
+    static public int staticInt54290;
+    static public int staticInt54291;
+    static public int staticInt54292;
+    static public int staticInt54293;
+    static public int staticInt54294;
+    static public int staticInt54295;
+    static public int staticInt54296;
+    static public int staticInt54297;
+    static public int staticInt54298;
+    static public int staticInt54299;
+    static public int staticInt54300;
+    static public int staticInt54301;
+    static public int staticInt54302;
+    static public int staticInt54303;
+    static public int staticInt54304;
+    static public int staticInt54305;
+    static public int staticInt54306;
+    static public int staticInt54307;
+    static public int staticInt54308;
+    static public int staticInt54309;
+    static public int staticInt54310;
+    static public int staticInt54311;
+    static public int staticInt54312;
+    static public int staticInt54313;
+    static public int staticInt54314;
+    static public int staticInt54315;
+    static public int staticInt54316;
+    static public int staticInt54317;
+    static public int staticInt54318;
+    static public int staticInt54319;
+    static public int staticInt54320;
+    static public int staticInt54321;
+    static public int staticInt54322;
+    static public int staticInt54323;
+    static public int staticInt54324;
+    static public int staticInt54325;
+    static public int staticInt54326;
+    static public int staticInt54327;
+    static public int staticInt54328;
+    static public int staticInt54329;
+    static public int staticInt54330;
+    static public int staticInt54331;
+    static public int staticInt54332;
+    static public int staticInt54333;
+    static public int staticInt54334;
+    static public int staticInt54335;
+    static public int staticInt54336;
+    static public int staticInt54337;
+    static public int staticInt54338;
+    static public int staticInt54339;
+    static public int staticInt54340;
+    static public int staticInt54341;
+    static public int staticInt54342;
+    static public int staticInt54343;
+    static public int staticInt54344;
+    static public int staticInt54345;
+    static public int staticInt54346;
+    static public int staticInt54347;
+    static public int staticInt54348;
+    static public int staticInt54349;
+    static public int staticInt54350;
+    static public int staticInt54351;
+    static public int staticInt54352;
+    static public int staticInt54353;
+    static public int staticInt54354;
+    static public int staticInt54355;
+    static public int staticInt54356;
+    static public int staticInt54357;
+    static public int staticInt54358;
+    static public int staticInt54359;
+    static public int staticInt54360;
+    static public int staticInt54361;
+    static public int staticInt54362;
+    static public int staticInt54363;
+    static public int staticInt54364;
+    static public int staticInt54365;
+    static public int staticInt54366;
+    static public int staticInt54367;
+    static public int staticInt54368;
+    static public int staticInt54369;
+    static public int staticInt54370;
+    static public int staticInt54371;
+    static public int staticInt54372;
+    static public int staticInt54373;
+    static public int staticInt54374;
+    static public int staticInt54375;
+    static public int staticInt54376;
+    static public int staticInt54377;
+    static public int staticInt54378;
+    static public int staticInt54379;
+    static public int staticInt54380;
+    static public int staticInt54381;
+    static public int staticInt54382;
+    static public int staticInt54383;
+    static public int staticInt54384;
+    static public int staticInt54385;
+    static public int staticInt54386;
+    static public int staticInt54387;
+    static public int staticInt54388;
+    static public int staticInt54389;
+    static public int staticInt54390;
+    static public int staticInt54391;
+    static public int staticInt54392;
+    static public int staticInt54393;
+    static public int staticInt54394;
+    static public int staticInt54395;
+    static public int staticInt54396;
+    static public int staticInt54397;
+    static public int staticInt54398;
+    static public int staticInt54399;
+    static public int staticInt54400;
+    static public int staticInt54401;
+    static public int staticInt54402;
+    static public int staticInt54403;
+    static public int staticInt54404;
+    static public int staticInt54405;
+    static public int staticInt54406;
+    static public int staticInt54407;
+    static public int staticInt54408;
+    static public int staticInt54409;
+    static public int staticInt54410;
+    static public int staticInt54411;
+    static public int staticInt54412;
+    static public int staticInt54413;
+    static public int staticInt54414;
+    static public int staticInt54415;
+    static public int staticInt54416;
+    static public int staticInt54417;
+    static public int staticInt54418;
+    static public int staticInt54419;
+    static public int staticInt54420;
+    static public int staticInt54421;
+    static public int staticInt54422;
+    static public int staticInt54423;
+    static public int staticInt54424;
+    static public int staticInt54425;
+    static public int staticInt54426;
+    static public int staticInt54427;
+    static public int staticInt54428;
+    static public int staticInt54429;
+    static public int staticInt54430;
+    static public int staticInt54431;
+    static public int staticInt54432;
+    static public int staticInt54433;
+    static public int staticInt54434;
+    static public int staticInt54435;
+    static public int staticInt54436;
+    static public int staticInt54437;
+    static public int staticInt54438;
+    static public int staticInt54439;
+    static public int staticInt54440;
+    static public int staticInt54441;
+    static public int staticInt54442;
+    static public int staticInt54443;
+    static public int staticInt54444;
+    static public int staticInt54445;
+    static public int staticInt54446;
+    static public int staticInt54447;
+    static public int staticInt54448;
+    static public int staticInt54449;
+    static public int staticInt54450;
+    static public int staticInt54451;
+    static public int staticInt54452;
+    static public int staticInt54453;
+    static public int staticInt54454;
+    static public int staticInt54455;
+    static public int staticInt54456;
+    static public int staticInt54457;
+    static public int staticInt54458;
+    static public int staticInt54459;
+    static public int staticInt54460;
+    static public int staticInt54461;
+    static public int staticInt54462;
+    static public int staticInt54463;
+    static public int staticInt54464;
+    static public int staticInt54465;
+    static public int staticInt54466;
+    static public int staticInt54467;
+    static public int staticInt54468;
+    static public int staticInt54469;
+    static public int staticInt54470;
+    static public int staticInt54471;
+    static public int staticInt54472;
+    static public int staticInt54473;
+    static public int staticInt54474;
+    static public int staticInt54475;
+    static public int staticInt54476;
+    static public int staticInt54477;
+    static public int staticInt54478;
+    static public int staticInt54479;
+    static public int staticInt54480;
+    static public int staticInt54481;
+    static public int staticInt54482;
+    static public int staticInt54483;
+    static public int staticInt54484;
+    static public int staticInt54485;
+    static public int staticInt54486;
+    static public int staticInt54487;
+    static public int staticInt54488;
+    static public int staticInt54489;
+    static public int staticInt54490;
+    static public int staticInt54491;
+    static public int staticInt54492;
+    static public int staticInt54493;
+    static public int staticInt54494;
+    static public int staticInt54495;
+    static public int staticInt54496;
+    static public int staticInt54497;
+    static public int staticInt54498;
+    static public int staticInt54499;
+    static public int staticInt54500;
+    static public int staticInt54501;
+    static public int staticInt54502;
+    static public int staticInt54503;
+    static public int staticInt54504;
+    static public int staticInt54505;
+    static public int staticInt54506;
+    static public int staticInt54507;
+    static public int staticInt54508;
+    static public int staticInt54509;
+    static public int staticInt54510;
+    static public int staticInt54511;
+    static public int staticInt54512;
+    static public int staticInt54513;
+    static public int staticInt54514;
+    static public int staticInt54515;
+    static public int staticInt54516;
+    static public int staticInt54517;
+    static public int staticInt54518;
+    static public int staticInt54519;
+    static public int staticInt54520;
+    static public int staticInt54521;
+    static public int staticInt54522;
+    static public int staticInt54523;
+    static public int staticInt54524;
+    static public int staticInt54525;
+    static public int staticInt54526;
+    static public int staticInt54527;
+    static public int staticInt54528;
+    static public int staticInt54529;
+    static public int staticInt54530;
+    static public int staticInt54531;
+    static public int staticInt54532;
+    static public int staticInt54533;
+    static public int staticInt54534;
+    static public int staticInt54535;
+    static public int staticInt54536;
+    static public int staticInt54537;
+    static public int staticInt54538;
+    static public int staticInt54539;
+    static public int staticInt54540;
+    static public int staticInt54541;
+    static public int staticInt54542;
+    static public int staticInt54543;
+    static public int staticInt54544;
+    static public int staticInt54545;
+    static public int staticInt54546;
+    static public int staticInt54547;
+    static public int staticInt54548;
+    static public int staticInt54549;
+    static public int staticInt54550;
+    static public int staticInt54551;
+    static public int staticInt54552;
+    static public int staticInt54553;
+    static public int staticInt54554;
+    static public int staticInt54555;
+    static public int staticInt54556;
+    static public int staticInt54557;
+    static public int staticInt54558;
+    static public int staticInt54559;
+    static public int staticInt54560;
+    static public int staticInt54561;
+    static public int staticInt54562;
+    static public int staticInt54563;
+    static public int staticInt54564;
+    static public int staticInt54565;
+    static public int staticInt54566;
+    static public int staticInt54567;
+    static public int staticInt54568;
+    static public int staticInt54569;
+    static public int staticInt54570;
+    static public int staticInt54571;
+    static public int staticInt54572;
+    static public int staticInt54573;
+    static public int staticInt54574;
+    static public int staticInt54575;
+    static public int staticInt54576;
+    static public int staticInt54577;
+    static public int staticInt54578;
+    static public int staticInt54579;
+    static public int staticInt54580;
+    static public int staticInt54581;
+    static public int staticInt54582;
+    static public int staticInt54583;
+    static public int staticInt54584;
+    static public int staticInt54585;
+    static public int staticInt54586;
+    static public int staticInt54587;
+    static public int staticInt54588;
+    static public int staticInt54589;
+    static public int staticInt54590;
+    static public int staticInt54591;
+    static public int staticInt54592;
+    static public int staticInt54593;
+    static public int staticInt54594;
+    static public int staticInt54595;
+    static public int staticInt54596;
+    static public int staticInt54597;
+    static public int staticInt54598;
+    static public int staticInt54599;
+    static public int staticInt54600;
+    static public int staticInt54601;
+    static public int staticInt54602;
+    static public int staticInt54603;
+    static public int staticInt54604;
+    static public int staticInt54605;
+    static public int staticInt54606;
+    static public int staticInt54607;
+    static public int staticInt54608;
+    static public int staticInt54609;
+    static public int staticInt54610;
+    static public int staticInt54611;
+    static public int staticInt54612;
+    static public int staticInt54613;
+    static public int staticInt54614;
+    static public int staticInt54615;
+    static public int staticInt54616;
+    static public int staticInt54617;
+    static public int staticInt54618;
+    static public int staticInt54619;
+    static public int staticInt54620;
+    static public int staticInt54621;
+    static public int staticInt54622;
+    static public int staticInt54623;
+    static public int staticInt54624;
+    static public int staticInt54625;
+    static public int staticInt54626;
+    static public int staticInt54627;
+    static public int staticInt54628;
+    static public int staticInt54629;
+    static public int staticInt54630;
+    static public int staticInt54631;
+    static public int staticInt54632;
+    static public int staticInt54633;
+    static public int staticInt54634;
+    static public int staticInt54635;
+    static public int staticInt54636;
+    static public int staticInt54637;
+    static public int staticInt54638;
+    static public int staticInt54639;
+    static public int staticInt54640;
+    static public int staticInt54641;
+    static public int staticInt54642;
+    static public int staticInt54643;
+    static public int staticInt54644;
+    static public int staticInt54645;
+    static public int staticInt54646;
+    static public int staticInt54647;
+    static public int staticInt54648;
+    static public int staticInt54649;
+    static public int staticInt54650;
+    static public int staticInt54651;
+    static public int staticInt54652;
+    static public int staticInt54653;
+    static public int staticInt54654;
+    static public int staticInt54655;
+    static public int staticInt54656;
+    static public int staticInt54657;
+    static public int staticInt54658;
+    static public int staticInt54659;
+    static public int staticInt54660;
+    static public int staticInt54661;
+    static public int staticInt54662;
+    static public int staticInt54663;
+    static public int staticInt54664;
+    static public int staticInt54665;
+    static public int staticInt54666;
+    static public int staticInt54667;
+    static public int staticInt54668;
+    static public int staticInt54669;
+    static public int staticInt54670;
+    static public int staticInt54671;
+    static public int staticInt54672;
+    static public int staticInt54673;
+    static public int staticInt54674;
+    static public int staticInt54675;
+    static public int staticInt54676;
+    static public int staticInt54677;
+    static public int staticInt54678;
+    static public int staticInt54679;
+    static public int staticInt54680;
+    static public int staticInt54681;
+    static public int staticInt54682;
+    static public int staticInt54683;
+    static public int staticInt54684;
+    static public int staticInt54685;
+    static public int staticInt54686;
+    static public int staticInt54687;
+    static public int staticInt54688;
+    static public int staticInt54689;
+    static public int staticInt54690;
+    static public int staticInt54691;
+    static public int staticInt54692;
+    static public int staticInt54693;
+    static public int staticInt54694;
+    static public int staticInt54695;
+    static public int staticInt54696;
+    static public int staticInt54697;
+    static public int staticInt54698;
+    static public int staticInt54699;
+    static public int staticInt54700;
+    static public int staticInt54701;
+    static public int staticInt54702;
+    static public int staticInt54703;
+    static public int staticInt54704;
+    static public int staticInt54705;
+    static public int staticInt54706;
+    static public int staticInt54707;
+    static public int staticInt54708;
+    static public int staticInt54709;
+    static public int staticInt54710;
+    static public int staticInt54711;
+    static public int staticInt54712;
+    static public int staticInt54713;
+    static public int staticInt54714;
+    static public int staticInt54715;
+    static public int staticInt54716;
+    static public int staticInt54717;
+    static public int staticInt54718;
+    static public int staticInt54719;
+    static public int staticInt54720;
+    static public int staticInt54721;
+    static public int staticInt54722;
+    static public int staticInt54723;
+    static public int staticInt54724;
+    static public int staticInt54725;
+    static public int staticInt54726;
+    static public int staticInt54727;
+    static public int staticInt54728;
+    static public int staticInt54729;
+    static public int staticInt54730;
+    static public int staticInt54731;
+    static public int staticInt54732;
+    static public int staticInt54733;
+    static public int staticInt54734;
+    static public int staticInt54735;
+    static public int staticInt54736;
+    static public int staticInt54737;
+    static public int staticInt54738;
+    static public int staticInt54739;
+    static public int staticInt54740;
+    static public int staticInt54741;
+    static public int staticInt54742;
+    static public int staticInt54743;
+    static public int staticInt54744;
+    static public int staticInt54745;
+    static public int staticInt54746;
+    static public int staticInt54747;
+    static public int staticInt54748;
+    static public int staticInt54749;
+    static public int staticInt54750;
+    static public int staticInt54751;
+    static public int staticInt54752;
+    static public int staticInt54753;
+    static public int staticInt54754;
+    static public int staticInt54755;
+    static public int staticInt54756;
+    static public int staticInt54757;
+    static public int staticInt54758;
+    static public int staticInt54759;
+    static public int staticInt54760;
+    static public int staticInt54761;
+    static public int staticInt54762;
+    static public int staticInt54763;
+    static public int staticInt54764;
+    static public int staticInt54765;
+    static public int staticInt54766;
+    static public int staticInt54767;
+    static public int staticInt54768;
+    static public int staticInt54769;
+    static public int staticInt54770;
+    static public int staticInt54771;
+    static public int staticInt54772;
+    static public int staticInt54773;
+    static public int staticInt54774;
+    static public int staticInt54775;
+    static public int staticInt54776;
+    static public int staticInt54777;
+    static public int staticInt54778;
+    static public int staticInt54779;
+    static public int staticInt54780;
+    static public int staticInt54781;
+    static public int staticInt54782;
+    static public int staticInt54783;
+    static public int staticInt54784;
+    static public int staticInt54785;
+    static public int staticInt54786;
+    static public int staticInt54787;
+    static public int staticInt54788;
+    static public int staticInt54789;
+    static public int staticInt54790;
+    static public int staticInt54791;
+    static public int staticInt54792;
+    static public int staticInt54793;
+    static public int staticInt54794;
+    static public int staticInt54795;
+    static public int staticInt54796;
+    static public int staticInt54797;
+    static public int staticInt54798;
+    static public int staticInt54799;
+    static public int staticInt54800;
+    static public int staticInt54801;
+    static public int staticInt54802;
+    static public int staticInt54803;
+    static public int staticInt54804;
+    static public int staticInt54805;
+    static public int staticInt54806;
+    static public int staticInt54807;
+    static public int staticInt54808;
+    static public int staticInt54809;
+    static public int staticInt54810;
+    static public int staticInt54811;
+    static public int staticInt54812;
+    static public int staticInt54813;
+    static public int staticInt54814;
+    static public int staticInt54815;
+    static public int staticInt54816;
+    static public int staticInt54817;
+    static public int staticInt54818;
+    static public int staticInt54819;
+    static public int staticInt54820;
+    static public int staticInt54821;
+    static public int staticInt54822;
+    static public int staticInt54823;
+    static public int staticInt54824;
+    static public int staticInt54825;
+    static public int staticInt54826;
+    static public int staticInt54827;
+    static public int staticInt54828;
+    static public int staticInt54829;
+    static public int staticInt54830;
+    static public int staticInt54831;
+    static public int staticInt54832;
+    static public int staticInt54833;
+    static public int staticInt54834;
+    static public int staticInt54835;
+    static public int staticInt54836;
+    static public int staticInt54837;
+    static public int staticInt54838;
+    static public int staticInt54839;
+    static public int staticInt54840;
+    static public int staticInt54841;
+    static public int staticInt54842;
+    static public int staticInt54843;
+    static public int staticInt54844;
+    static public int staticInt54845;
+    static public int staticInt54846;
+    static public int staticInt54847;
+    static public int staticInt54848;
+    static public int staticInt54849;
+    static public int staticInt54850;
+    static public int staticInt54851;
+    static public int staticInt54852;
+    static public int staticInt54853;
+    static public int staticInt54854;
+    static public int staticInt54855;
+    static public int staticInt54856;
+    static public int staticInt54857;
+    static public int staticInt54858;
+    static public int staticInt54859;
+    static public int staticInt54860;
+    static public int staticInt54861;
+    static public int staticInt54862;
+    static public int staticInt54863;
+    static public int staticInt54864;
+    static public int staticInt54865;
+    static public int staticInt54866;
+    static public int staticInt54867;
+    static public int staticInt54868;
+    static public int staticInt54869;
+    static public int staticInt54870;
+    static public int staticInt54871;
+    static public int staticInt54872;
+    static public int staticInt54873;
+    static public int staticInt54874;
+    static public int staticInt54875;
+    static public int staticInt54876;
+    static public int staticInt54877;
+    static public int staticInt54878;
+    static public int staticInt54879;
+    static public int staticInt54880;
+    static public int staticInt54881;
+    static public int staticInt54882;
+    static public int staticInt54883;
+    static public int staticInt54884;
+    static public int staticInt54885;
+    static public int staticInt54886;
+    static public int staticInt54887;
+    static public int staticInt54888;
+    static public int staticInt54889;
+    static public int staticInt54890;
+    static public int staticInt54891;
+    static public int staticInt54892;
+    static public int staticInt54893;
+    static public int staticInt54894;
+    static public int staticInt54895;
+    static public int staticInt54896;
+    static public int staticInt54897;
+    static public int staticInt54898;
+    static public int staticInt54899;
+    static public int staticInt54900;
+    static public int staticInt54901;
+    static public int staticInt54902;
+    static public int staticInt54903;
+    static public int staticInt54904;
+    static public int staticInt54905;
+    static public int staticInt54906;
+    static public int staticInt54907;
+    static public int staticInt54908;
+    static public int staticInt54909;
+    static public int staticInt54910;
+    static public int staticInt54911;
+    static public int staticInt54912;
+    static public int staticInt54913;
+    static public int staticInt54914;
+    static public int staticInt54915;
+    static public int staticInt54916;
+    static public int staticInt54917;
+    static public int staticInt54918;
+    static public int staticInt54919;
+    static public int staticInt54920;
+    static public int staticInt54921;
+    static public int staticInt54922;
+    static public int staticInt54923;
+    static public int staticInt54924;
+    static public int staticInt54925;
+    static public int staticInt54926;
+    static public int staticInt54927;
+    static public int staticInt54928;
+    static public int staticInt54929;
+    static public int staticInt54930;
+    static public int staticInt54931;
+    static public int staticInt54932;
+    static public int staticInt54933;
+    static public int staticInt54934;
+    static public int staticInt54935;
+    static public int staticInt54936;
+    static public int staticInt54937;
+    static public int staticInt54938;
+    static public int staticInt54939;
+    static public int staticInt54940;
+    static public int staticInt54941;
+    static public int staticInt54942;
+    static public int staticInt54943;
+    static public int staticInt54944;
+    static public int staticInt54945;
+    static public int staticInt54946;
+    static public int staticInt54947;
+    static public int staticInt54948;
+    static public int staticInt54949;
+    static public int staticInt54950;
+    static public int staticInt54951;
+    static public int staticInt54952;
+    static public int staticInt54953;
+    static public int staticInt54954;
+    static public int staticInt54955;
+    static public int staticInt54956;
+    static public int staticInt54957;
+    static public int staticInt54958;
+    static public int staticInt54959;
+    static public int staticInt54960;
+    static public int staticInt54961;
+    static public int staticInt54962;
+    static public int staticInt54963;
+    static public int staticInt54964;
+    static public int staticInt54965;
+    static public int staticInt54966;
+    static public int staticInt54967;
+    static public int staticInt54968;
+    static public int staticInt54969;
+    static public int staticInt54970;
+    static public int staticInt54971;
+    static public int staticInt54972;
+    static public int staticInt54973;
+    static public int staticInt54974;
+    static public int staticInt54975;
+    static public int staticInt54976;
+    static public int staticInt54977;
+    static public int staticInt54978;
+    static public int staticInt54979;
+    static public int staticInt54980;
+    static public int staticInt54981;
+    static public int staticInt54982;
+    static public int staticInt54983;
+    static public int staticInt54984;
+    static public int staticInt54985;
+    static public int staticInt54986;
+    static public int staticInt54987;
+    static public int staticInt54988;
+    static public int staticInt54989;
+    static public int staticInt54990;
+    static public int staticInt54991;
+    static public int staticInt54992;
+    static public int staticInt54993;
+    static public int staticInt54994;
+    static public int staticInt54995;
+    static public int staticInt54996;
+    static public int staticInt54997;
+    static public int staticInt54998;
+    static public int staticInt54999;
+    static public int staticInt55000;
+    static public int staticInt55001;
+    static public int staticInt55002;
+    static public int staticInt55003;
+    static public int staticInt55004;
+    static public int staticInt55005;
+    static public int staticInt55006;
+    static public int staticInt55007;
+    static public int staticInt55008;
+    static public int staticInt55009;
+    static public int staticInt55010;
+    static public int staticInt55011;
+    static public int staticInt55012;
+    static public int staticInt55013;
+    static public int staticInt55014;
+    static public int staticInt55015;
+    static public int staticInt55016;
+    static public int staticInt55017;
+    static public int staticInt55018;
+    static public int staticInt55019;
+    static public int staticInt55020;
+    static public int staticInt55021;
+    static public int staticInt55022;
+    static public int staticInt55023;
+    static public int staticInt55024;
+    static public int staticInt55025;
+    static public int staticInt55026;
+    static public int staticInt55027;
+    static public int staticInt55028;
+    static public int staticInt55029;
+    static public int staticInt55030;
+    static public int staticInt55031;
+    static public int staticInt55032;
+    static public int staticInt55033;
+    static public int staticInt55034;
+    static public int staticInt55035;
+    static public int staticInt55036;
+    static public int staticInt55037;
+    static public int staticInt55038;
+    static public int staticInt55039;
+    static public int staticInt55040;
+    static public int staticInt55041;
+    static public int staticInt55042;
+    static public int staticInt55043;
+    static public int staticInt55044;
+    static public int staticInt55045;
+    static public int staticInt55046;
+    static public int staticInt55047;
+    static public int staticInt55048;
+    static public int staticInt55049;
+    static public int staticInt55050;
+    static public int staticInt55051;
+    static public int staticInt55052;
+    static public int staticInt55053;
+    static public int staticInt55054;
+    static public int staticInt55055;
+    static public int staticInt55056;
+    static public int staticInt55057;
+    static public int staticInt55058;
+    static public int staticInt55059;
+    static public int staticInt55060;
+    static public int staticInt55061;
+    static public int staticInt55062;
+    static public int staticInt55063;
+    static public int staticInt55064;
+    static public int staticInt55065;
+    static public int staticInt55066;
+    static public int staticInt55067;
+    static public int staticInt55068;
+    static public int staticInt55069;
+    static public int staticInt55070;
+    static public int staticInt55071;
+    static public int staticInt55072;
+    static public int staticInt55073;
+    static public int staticInt55074;
+    static public int staticInt55075;
+    static public int staticInt55076;
+    static public int staticInt55077;
+    static public int staticInt55078;
+    static public int staticInt55079;
+    static public int staticInt55080;
+    static public int staticInt55081;
+    static public int staticInt55082;
+    static public int staticInt55083;
+    static public int staticInt55084;
+    static public int staticInt55085;
+    static public int staticInt55086;
+    static public int staticInt55087;
+    static public int staticInt55088;
+    static public int staticInt55089;
+    static public int staticInt55090;
+    static public int staticInt55091;
+    static public int staticInt55092;
+    static public int staticInt55093;
+    static public int staticInt55094;
+    static public int staticInt55095;
+    static public int staticInt55096;
+    static public int staticInt55097;
+    static public int staticInt55098;
+    static public int staticInt55099;
+    static public int staticInt55100;
+    static public int staticInt55101;
+    static public int staticInt55102;
+    static public int staticInt55103;
+    static public int staticInt55104;
+    static public int staticInt55105;
+    static public int staticInt55106;
+    static public int staticInt55107;
+    static public int staticInt55108;
+    static public int staticInt55109;
+    static public int staticInt55110;
+    static public int staticInt55111;
+    static public int staticInt55112;
+    static public int staticInt55113;
+    static public int staticInt55114;
+    static public int staticInt55115;
+    static public int staticInt55116;
+    static public int staticInt55117;
+    static public int staticInt55118;
+    static public int staticInt55119;
+    static public int staticInt55120;
+    static public int staticInt55121;
+    static public int staticInt55122;
+    static public int staticInt55123;
+    static public int staticInt55124;
+    static public int staticInt55125;
+    static public int staticInt55126;
+    static public int staticInt55127;
+    static public int staticInt55128;
+    static public int staticInt55129;
+    static public int staticInt55130;
+    static public int staticInt55131;
+    static public int staticInt55132;
+    static public int staticInt55133;
+    static public int staticInt55134;
+    static public int staticInt55135;
+    static public int staticInt55136;
+    static public int staticInt55137;
+    static public int staticInt55138;
+    static public int staticInt55139;
+    static public int staticInt55140;
+    static public int staticInt55141;
+    static public int staticInt55142;
+    static public int staticInt55143;
+    static public int staticInt55144;
+    static public int staticInt55145;
+    static public int staticInt55146;
+    static public int staticInt55147;
+    static public int staticInt55148;
+    static public int staticInt55149;
+    static public int staticInt55150;
+    static public int staticInt55151;
+    static public int staticInt55152;
+    static public int staticInt55153;
+    static public int staticInt55154;
+    static public int staticInt55155;
+    static public int staticInt55156;
+    static public int staticInt55157;
+    static public int staticInt55158;
+    static public int staticInt55159;
+    static public int staticInt55160;
+    static public int staticInt55161;
+    static public int staticInt55162;
+    static public int staticInt55163;
+    static public int staticInt55164;
+    static public int staticInt55165;
+    static public int staticInt55166;
+    static public int staticInt55167;
+    static public int staticInt55168;
+    static public int staticInt55169;
+    static public int staticInt55170;
+    static public int staticInt55171;
+    static public int staticInt55172;
+    static public int staticInt55173;
+    static public int staticInt55174;
+    static public int staticInt55175;
+    static public int staticInt55176;
+    static public int staticInt55177;
+    static public int staticInt55178;
+    static public int staticInt55179;
+    static public int staticInt55180;
+    static public int staticInt55181;
+    static public int staticInt55182;
+    static public int staticInt55183;
+    static public int staticInt55184;
+    static public int staticInt55185;
+    static public int staticInt55186;
+    static public int staticInt55187;
+    static public int staticInt55188;
+    static public int staticInt55189;
+    static public int staticInt55190;
+    static public int staticInt55191;
+    static public int staticInt55192;
+    static public int staticInt55193;
+    static public int staticInt55194;
+    static public int staticInt55195;
+    static public int staticInt55196;
+    static public int staticInt55197;
+    static public int staticInt55198;
+    static public int staticInt55199;
+    static public int staticInt55200;
+    static public int staticInt55201;
+    static public int staticInt55202;
+    static public int staticInt55203;
+    static public int staticInt55204;
+    static public int staticInt55205;
+    static public int staticInt55206;
+    static public int staticInt55207;
+    static public int staticInt55208;
+    static public int staticInt55209;
+    static public int staticInt55210;
+    static public int staticInt55211;
+    static public int staticInt55212;
+    static public int staticInt55213;
+    static public int staticInt55214;
+    static public int staticInt55215;
+    static public int staticInt55216;
+    static public int staticInt55217;
+    static public int staticInt55218;
+    static public int staticInt55219;
+    static public int staticInt55220;
+    static public int staticInt55221;
+    static public int staticInt55222;
+    static public int staticInt55223;
+    static public int staticInt55224;
+    static public int staticInt55225;
+    static public int staticInt55226;
+    static public int staticInt55227;
+    static public int staticInt55228;
+    static public int staticInt55229;
+    static public int staticInt55230;
+    static public int staticInt55231;
+    static public int staticInt55232;
+    static public int staticInt55233;
+    static public int staticInt55234;
+    static public int staticInt55235;
+    static public int staticInt55236;
+    static public int staticInt55237;
+    static public int staticInt55238;
+    static public int staticInt55239;
+    static public int staticInt55240;
+    static public int staticInt55241;
+    static public int staticInt55242;
+    static public int staticInt55243;
+    static public int staticInt55244;
+    static public int staticInt55245;
+    static public int staticInt55246;
+    static public int staticInt55247;
+    static public int staticInt55248;
+    static public int staticInt55249;
+    static public int staticInt55250;
+    static public int staticInt55251;
+    static public int staticInt55252;
+    static public int staticInt55253;
+    static public int staticInt55254;
+    static public int staticInt55255;
+    static public int staticInt55256;
+    static public int staticInt55257;
+    static public int staticInt55258;
+    static public int staticInt55259;
+    static public int staticInt55260;
+    static public int staticInt55261;
+    static public int staticInt55262;
+    static public int staticInt55263;
+    static public int staticInt55264;
+    static public int staticInt55265;
+    static public int staticInt55266;
+    static public int staticInt55267;
+    static public int staticInt55268;
+    static public int staticInt55269;
+    static public int staticInt55270;
+    static public int staticInt55271;
+    static public int staticInt55272;
+    static public int staticInt55273;
+    static public int staticInt55274;
+    static public int staticInt55275;
+    static public int staticInt55276;
+    static public int staticInt55277;
+    static public int staticInt55278;
+    static public int staticInt55279;
+    static public int staticInt55280;
+    static public int staticInt55281;
+    static public int staticInt55282;
+    static public int staticInt55283;
+    static public int staticInt55284;
+    static public int staticInt55285;
+    static public int staticInt55286;
+    static public int staticInt55287;
+    static public int staticInt55288;
+    static public int staticInt55289;
+    static public int staticInt55290;
+    static public int staticInt55291;
+    static public int staticInt55292;
+    static public int staticInt55293;
+    static public int staticInt55294;
+    static public int staticInt55295;
+    static public int staticInt55296;
+    static public int staticInt55297;
+    static public int staticInt55298;
+    static public int staticInt55299;
+    static public int staticInt55300;
+    static public int staticInt55301;
+    static public int staticInt55302;
+    static public int staticInt55303;
+    static public int staticInt55304;
+    static public int staticInt55305;
+    static public int staticInt55306;
+    static public int staticInt55307;
+    static public int staticInt55308;
+    static public int staticInt55309;
+    static public int staticInt55310;
+    static public int staticInt55311;
+    static public int staticInt55312;
+    static public int staticInt55313;
+    static public int staticInt55314;
+    static public int staticInt55315;
+    static public int staticInt55316;
+    static public int staticInt55317;
+    static public int staticInt55318;
+    static public int staticInt55319;
+    static public int staticInt55320;
+    static public int staticInt55321;
+    static public int staticInt55322;
+    static public int staticInt55323;
+    static public int staticInt55324;
+    static public int staticInt55325;
+    static public int staticInt55326;
+    static public int staticInt55327;
+    static public int staticInt55328;
+    static public int staticInt55329;
+    static public int staticInt55330;
+    static public int staticInt55331;
+    static public int staticInt55332;
+    static public int staticInt55333;
+    static public int staticInt55334;
+    static public int staticInt55335;
+    static public int staticInt55336;
+    static public int staticInt55337;
+    static public int staticInt55338;
+    static public int staticInt55339;
+    static public int staticInt55340;
+    static public int staticInt55341;
+    static public int staticInt55342;
+    static public int staticInt55343;
+    static public int staticInt55344;
+    static public int staticInt55345;
+    static public int staticInt55346;
+    static public int staticInt55347;
+    static public int staticInt55348;
+    static public int staticInt55349;
+    static public int staticInt55350;
+    static public int staticInt55351;
+    static public int staticInt55352;
+    static public int staticInt55353;
+    static public int staticInt55354;
+    static public int staticInt55355;
+    static public int staticInt55356;
+    static public int staticInt55357;
+    static public int staticInt55358;
+    static public int staticInt55359;
+    static public int staticInt55360;
+    static public int staticInt55361;
+    static public int staticInt55362;
+    static public int staticInt55363;
+    static public int staticInt55364;
+    static public int staticInt55365;
+    static public int staticInt55366;
+    static public int staticInt55367;
+    static public int staticInt55368;
+    static public int staticInt55369;
+    static public int staticInt55370;
+    static public int staticInt55371;
+    static public int staticInt55372;
+    static public int staticInt55373;
+    static public int staticInt55374;
+    static public int staticInt55375;
+    static public int staticInt55376;
+    static public int staticInt55377;
+    static public int staticInt55378;
+    static public int staticInt55379;
+    static public int staticInt55380;
+    static public int staticInt55381;
+    static public int staticInt55382;
+    static public int staticInt55383;
+    static public int staticInt55384;
+    static public int staticInt55385;
+    static public int staticInt55386;
+    static public int staticInt55387;
+    static public int staticInt55388;
+    static public int staticInt55389;
+    static public int staticInt55390;
+    static public int staticInt55391;
+    static public int staticInt55392;
+    static public int staticInt55393;
+    static public int staticInt55394;
+    static public int staticInt55395;
+    static public int staticInt55396;
+    static public int staticInt55397;
+    static public int staticInt55398;
+    static public int staticInt55399;
+    static public int staticInt55400;
+    static public int staticInt55401;
+    static public int staticInt55402;
+    static public int staticInt55403;
+    static public int staticInt55404;
+    static public int staticInt55405;
+    static public int staticInt55406;
+    static public int staticInt55407;
+    static public int staticInt55408;
+    static public int staticInt55409;
+    static public int staticInt55410;
+    static public int staticInt55411;
+    static public int staticInt55412;
+    static public int staticInt55413;
+    static public int staticInt55414;
+    static public int staticInt55415;
+    static public int staticInt55416;
+    static public int staticInt55417;
+    static public int staticInt55418;
+    static public int staticInt55419;
+    static public int staticInt55420;
+    static public int staticInt55421;
+    static public int staticInt55422;
+    static public int staticInt55423;
+    static public int staticInt55424;
+    static public int staticInt55425;
+    static public int staticInt55426;
+    static public int staticInt55427;
+    static public int staticInt55428;
+    static public int staticInt55429;
+    static public int staticInt55430;
+    static public int staticInt55431;
+    static public int staticInt55432;
+    static public int staticInt55433;
+    static public int staticInt55434;
+    static public int staticInt55435;
+    static public int staticInt55436;
+    static public int staticInt55437;
+    static public int staticInt55438;
+    static public int staticInt55439;
+    static public int staticInt55440;
+    static public int staticInt55441;
+    static public int staticInt55442;
+    static public int staticInt55443;
+    static public int staticInt55444;
+    static public int staticInt55445;
+    static public int staticInt55446;
+    static public int staticInt55447;
+    static public int staticInt55448;
+    static public int staticInt55449;
+    static public int staticInt55450;
+    static public int staticInt55451;
+    static public int staticInt55452;
+    static public int staticInt55453;
+    static public int staticInt55454;
+    static public int staticInt55455;
+    static public int staticInt55456;
+    static public int staticInt55457;
+    static public int staticInt55458;
+    static public int staticInt55459;
+    static public int staticInt55460;
+    static public int staticInt55461;
+    static public int staticInt55462;
+    static public int staticInt55463;
+    static public int staticInt55464;
+    static public int staticInt55465;
+    static public int staticInt55466;
+    static public int staticInt55467;
+    static public int staticInt55468;
+    static public int staticInt55469;
+    static public int staticInt55470;
+    static public int staticInt55471;
+    static public int staticInt55472;
+    static public int staticInt55473;
+    static public int staticInt55474;
+    static public int staticInt55475;
+    static public int staticInt55476;
+    static public int staticInt55477;
+    static public int staticInt55478;
+    static public int staticInt55479;
+    static public int staticInt55480;
+    static public int staticInt55481;
+    static public int staticInt55482;
+    static public int staticInt55483;
+    static public int staticInt55484;
+    static public int staticInt55485;
+    static public int staticInt55486;
+    static public int staticInt55487;
+    static public int staticInt55488;
+    static public int staticInt55489;
+    static public int staticInt55490;
+    static public int staticInt55491;
+    static public int staticInt55492;
+    static public int staticInt55493;
+    static public int staticInt55494;
+    static public int staticInt55495;
+    static public int staticInt55496;
+    static public int staticInt55497;
+    static public int staticInt55498;
+    static public int staticInt55499;
+    static public int staticInt55500;
+    static public int staticInt55501;
+    static public int staticInt55502;
+    static public int staticInt55503;
+    static public int staticInt55504;
+    static public int staticInt55505;
+    static public int staticInt55506;
+    static public int staticInt55507;
+    static public int staticInt55508;
+    static public int staticInt55509;
+    static public int staticInt55510;
+    static public int staticInt55511;
+    static public int staticInt55512;
+    static public int staticInt55513;
+    static public int staticInt55514;
+    static public int staticInt55515;
+    static public int staticInt55516;
+    static public int staticInt55517;
+    static public int staticInt55518;
+    static public int staticInt55519;
+    static public int staticInt55520;
+    static public int staticInt55521;
+    static public int staticInt55522;
+    static public int staticInt55523;
+    static public int staticInt55524;
+    static public int staticInt55525;
+    static public int staticInt55526;
+    static public int staticInt55527;
+    static public int staticInt55528;
+    static public int staticInt55529;
+    static public int staticInt55530;
+    static public int staticInt55531;
+    static public int staticInt55532;
+    static public int staticInt55533;
+    static public int staticInt55534;
+    static public int staticInt55535;
+    static public int staticInt55536;
+    static public int staticInt55537;
+    static public int staticInt55538;
+    static public int staticInt55539;
+    static public int staticInt55540;
+    static public int staticInt55541;
+    static public int staticInt55542;
+    static public int staticInt55543;
+    static public int staticInt55544;
+    static public int staticInt55545;
+    static public int staticInt55546;
+    static public int staticInt55547;
+    static public int staticInt55548;
+    static public int staticInt55549;
+    static public int staticInt55550;
+    static public int staticInt55551;
+    static public int staticInt55552;
+    static public int staticInt55553;
+    static public int staticInt55554;
+    static public int staticInt55555;
+    static public int staticInt55556;
+    static public int staticInt55557;
+    static public int staticInt55558;
+    static public int staticInt55559;
+    static public int staticInt55560;
+    static public int staticInt55561;
+    static public int staticInt55562;
+    static public int staticInt55563;
+    static public int staticInt55564;
+    static public int staticInt55565;
+    static public int staticInt55566;
+    static public int staticInt55567;
+    static public int staticInt55568;
+    static public int staticInt55569;
+    static public int staticInt55570;
+    static public int staticInt55571;
+    static public int staticInt55572;
+    static public int staticInt55573;
+    static public int staticInt55574;
+    static public int staticInt55575;
+    static public int staticInt55576;
+    static public int staticInt55577;
+    static public int staticInt55578;
+    static public int staticInt55579;
+    static public int staticInt55580;
+    static public int staticInt55581;
+    static public int staticInt55582;
+    static public int staticInt55583;
+    static public int staticInt55584;
+    static public int staticInt55585;
+    static public int staticInt55586;
+    static public int staticInt55587;
+    static public int staticInt55588;
+    static public int staticInt55589;
+    static public int staticInt55590;
+    static public int staticInt55591;
+    static public int staticInt55592;
+    static public int staticInt55593;
+    static public int staticInt55594;
+    static public int staticInt55595;
+    static public int staticInt55596;
+    static public int staticInt55597;
+    static public int staticInt55598;
+    static public int staticInt55599;
+    static public int staticInt55600;
+    static public int staticInt55601;
+    static public int staticInt55602;
+    static public int staticInt55603;
+    static public int staticInt55604;
+    static public int staticInt55605;
+    static public int staticInt55606;
+    static public int staticInt55607;
+    static public int staticInt55608;
+    static public int staticInt55609;
+    static public int staticInt55610;
+    static public int staticInt55611;
+    static public int staticInt55612;
+    static public int staticInt55613;
+    static public int staticInt55614;
+    static public int staticInt55615;
+    static public int staticInt55616;
+    static public int staticInt55617;
+    static public int staticInt55618;
+    static public int staticInt55619;
+    static public int staticInt55620;
+    static public int staticInt55621;
+    static public int staticInt55622;
+    static public int staticInt55623;
+    static public int staticInt55624;
+    static public int staticInt55625;
+    static public int staticInt55626;
+    static public int staticInt55627;
+    static public int staticInt55628;
+    static public int staticInt55629;
+    static public int staticInt55630;
+    static public int staticInt55631;
+    static public int staticInt55632;
+    static public int staticInt55633;
+    static public int staticInt55634;
+    static public int staticInt55635;
+    static public int staticInt55636;
+    static public int staticInt55637;
+    static public int staticInt55638;
+    static public int staticInt55639;
+    static public int staticInt55640;
+    static public int staticInt55641;
+    static public int staticInt55642;
+    static public int staticInt55643;
+    static public int staticInt55644;
+    static public int staticInt55645;
+    static public int staticInt55646;
+    static public int staticInt55647;
+    static public int staticInt55648;
+    static public int staticInt55649;
+    static public int staticInt55650;
+    static public int staticInt55651;
+    static public int staticInt55652;
+    static public int staticInt55653;
+    static public int staticInt55654;
+    static public int staticInt55655;
+    static public int staticInt55656;
+    static public int staticInt55657;
+    static public int staticInt55658;
+    static public int staticInt55659;
+    static public int staticInt55660;
+    static public int staticInt55661;
+    static public int staticInt55662;
+    static public int staticInt55663;
+    static public int staticInt55664;
+    static public int staticInt55665;
+    static public int staticInt55666;
+    static public int staticInt55667;
+    static public int staticInt55668;
+    static public int staticInt55669;
+    static public int staticInt55670;
+    static public int staticInt55671;
+    static public int staticInt55672;
+    static public int staticInt55673;
+    static public int staticInt55674;
+    static public int staticInt55675;
+    static public int staticInt55676;
+    static public int staticInt55677;
+    static public int staticInt55678;
+    static public int staticInt55679;
+    static public int staticInt55680;
+    static public int staticInt55681;
+    static public int staticInt55682;
+    static public int staticInt55683;
+    static public int staticInt55684;
+    static public int staticInt55685;
+    static public int staticInt55686;
+    static public int staticInt55687;
+    static public int staticInt55688;
+    static public int staticInt55689;
+    static public int staticInt55690;
+    static public int staticInt55691;
+    static public int staticInt55692;
+    static public int staticInt55693;
+    static public int staticInt55694;
+    static public int staticInt55695;
+    static public int staticInt55696;
+    static public int staticInt55697;
+    static public int staticInt55698;
+    static public int staticInt55699;
+    static public int staticInt55700;
+    static public int staticInt55701;
+    static public int staticInt55702;
+    static public int staticInt55703;
+    static public int staticInt55704;
+    static public int staticInt55705;
+    static public int staticInt55706;
+    static public int staticInt55707;
+    static public int staticInt55708;
+    static public int staticInt55709;
+    static public int staticInt55710;
+    static public int staticInt55711;
+    static public int staticInt55712;
+    static public int staticInt55713;
+    static public int staticInt55714;
+    static public int staticInt55715;
+    static public int staticInt55716;
+    static public int staticInt55717;
+    static public int staticInt55718;
+    static public int staticInt55719;
+    static public int staticInt55720;
+    static public int staticInt55721;
+    static public int staticInt55722;
+    static public int staticInt55723;
+    static public int staticInt55724;
+    static public int staticInt55725;
+    static public int staticInt55726;
+    static public int staticInt55727;
+    static public int staticInt55728;
+    static public int staticInt55729;
+    static public int staticInt55730;
+    static public int staticInt55731;
+    static public int staticInt55732;
+    static public int staticInt55733;
+    static public int staticInt55734;
+    static public int staticInt55735;
+    static public int staticInt55736;
+    static public int staticInt55737;
+    static public int staticInt55738;
+    static public int staticInt55739;
+    static public int staticInt55740;
+    static public int staticInt55741;
+    static public int staticInt55742;
+    static public int staticInt55743;
+    static public int staticInt55744;
+    static public int staticInt55745;
+    static public int staticInt55746;
+    static public int staticInt55747;
+    static public int staticInt55748;
+    static public int staticInt55749;
+    static public int staticInt55750;
+    static public int staticInt55751;
+    static public int staticInt55752;
+    static public int staticInt55753;
+    static public int staticInt55754;
+    static public int staticInt55755;
+    static public int staticInt55756;
+    static public int staticInt55757;
+    static public int staticInt55758;
+    static public int staticInt55759;
+    static public int staticInt55760;
+    static public int staticInt55761;
+    static public int staticInt55762;
+    static public int staticInt55763;
+    static public int staticInt55764;
+    static public int staticInt55765;
+    static public int staticInt55766;
+    static public int staticInt55767;
+    static public int staticInt55768;
+    static public int staticInt55769;
+    static public int staticInt55770;
+    static public int staticInt55771;
+    static public int staticInt55772;
+    static public int staticInt55773;
+    static public int staticInt55774;
+    static public int staticInt55775;
+    static public int staticInt55776;
+    static public int staticInt55777;
+    static public int staticInt55778;
+    static public int staticInt55779;
+    static public int staticInt55780;
+    static public int staticInt55781;
+    static public int staticInt55782;
+    static public int staticInt55783;
+    static public int staticInt55784;
+    static public int staticInt55785;
+    static public int staticInt55786;
+    static public int staticInt55787;
+    static public int staticInt55788;
+    static public int staticInt55789;
+    static public int staticInt55790;
+    static public int staticInt55791;
+    static public int staticInt55792;
+    static public int staticInt55793;
+    static public int staticInt55794;
+    static public int staticInt55795;
+    static public int staticInt55796;
+    static public int staticInt55797;
+    static public int staticInt55798;
+    static public int staticInt55799;
+    static public int staticInt55800;
+    static public int staticInt55801;
+    static public int staticInt55802;
+    static public int staticInt55803;
+    static public int staticInt55804;
+    static public int staticInt55805;
+    static public int staticInt55806;
+    static public int staticInt55807;
+    static public int staticInt55808;
+    static public int staticInt55809;
+    static public int staticInt55810;
+    static public int staticInt55811;
+    static public int staticInt55812;
+    static public int staticInt55813;
+    static public int staticInt55814;
+    static public int staticInt55815;
+    static public int staticInt55816;
+    static public int staticInt55817;
+    static public int staticInt55818;
+    static public int staticInt55819;
+    static public int staticInt55820;
+    static public int staticInt55821;
+    static public int staticInt55822;
+    static public int staticInt55823;
+    static public int staticInt55824;
+    static public int staticInt55825;
+    static public int staticInt55826;
+    static public int staticInt55827;
+    static public int staticInt55828;
+    static public int staticInt55829;
+    static public int staticInt55830;
+    static public int staticInt55831;
+    static public int staticInt55832;
+    static public int staticInt55833;
+    static public int staticInt55834;
+    static public int staticInt55835;
+    static public int staticInt55836;
+    static public int staticInt55837;
+    static public int staticInt55838;
+    static public int staticInt55839;
+    static public int staticInt55840;
+    static public int staticInt55841;
+    static public int staticInt55842;
+    static public int staticInt55843;
+    static public int staticInt55844;
+    static public int staticInt55845;
+    static public int staticInt55846;
+    static public int staticInt55847;
+    static public int staticInt55848;
+    static public int staticInt55849;
+    static public int staticInt55850;
+    static public int staticInt55851;
+    static public int staticInt55852;
+    static public int staticInt55853;
+    static public int staticInt55854;
+    static public int staticInt55855;
+    static public int staticInt55856;
+    static public int staticInt55857;
+    static public int staticInt55858;
+    static public int staticInt55859;
+    static public int staticInt55860;
+    static public int staticInt55861;
+    static public int staticInt55862;
+    static public int staticInt55863;
+    static public int staticInt55864;
+    static public int staticInt55865;
+    static public int staticInt55866;
+    static public int staticInt55867;
+    static public int staticInt55868;
+    static public int staticInt55869;
+    static public int staticInt55870;
+    static public int staticInt55871;
+    static public int staticInt55872;
+    static public int staticInt55873;
+    static public int staticInt55874;
+    static public int staticInt55875;
+    static public int staticInt55876;
+    static public int staticInt55877;
+    static public int staticInt55878;
+    static public int staticInt55879;
+    static public int staticInt55880;
+    static public int staticInt55881;
+    static public int staticInt55882;
+    static public int staticInt55883;
+    static public int staticInt55884;
+    static public int staticInt55885;
+    static public int staticInt55886;
+    static public int staticInt55887;
+    static public int staticInt55888;
+    static public int staticInt55889;
+    static public int staticInt55890;
+    static public int staticInt55891;
+    static public int staticInt55892;
+    static public int staticInt55893;
+    static public int staticInt55894;
+    static public int staticInt55895;
+    static public int staticInt55896;
+    static public int staticInt55897;
+    static public int staticInt55898;
+    static public int staticInt55899;
+    static public int staticInt55900;
+    static public int staticInt55901;
+    static public int staticInt55902;
+    static public int staticInt55903;
+    static public int staticInt55904;
+    static public int staticInt55905;
+    static public int staticInt55906;
+    static public int staticInt55907;
+    static public int staticInt55908;
+    static public int staticInt55909;
+    static public int staticInt55910;
+    static public int staticInt55911;
+    static public int staticInt55912;
+    static public int staticInt55913;
+    static public int staticInt55914;
+    static public int staticInt55915;
+    static public int staticInt55916;
+    static public int staticInt55917;
+    static public int staticInt55918;
+    static public int staticInt55919;
+    static public int staticInt55920;
+    static public int staticInt55921;
+    static public int staticInt55922;
+    static public int staticInt55923;
+    static public int staticInt55924;
+    static public int staticInt55925;
+    static public int staticInt55926;
+    static public int staticInt55927;
+    static public int staticInt55928;
+    static public int staticInt55929;
+    static public int staticInt55930;
+    static public int staticInt55931;
+    static public int staticInt55932;
+    static public int staticInt55933;
+    static public int staticInt55934;
+    static public int staticInt55935;
+    static public int staticInt55936;
+    static public int staticInt55937;
+    static public int staticInt55938;
+    static public int staticInt55939;
+    static public int staticInt55940;
+    static public int staticInt55941;
+    static public int staticInt55942;
+    static public int staticInt55943;
+    static public int staticInt55944;
+    static public int staticInt55945;
+    static public int staticInt55946;
+    static public int staticInt55947;
+    static public int staticInt55948;
+    static public int staticInt55949;
+    static public int staticInt55950;
+    static public int staticInt55951;
+    static public int staticInt55952;
+    static public int staticInt55953;
+    static public int staticInt55954;
+    static public int staticInt55955;
+    static public int staticInt55956;
+    static public int staticInt55957;
+    static public int staticInt55958;
+    static public int staticInt55959;
+    static public int staticInt55960;
+    static public int staticInt55961;
+    static public int staticInt55962;
+    static public int staticInt55963;
+    static public int staticInt55964;
+    static public int staticInt55965;
+    static public int staticInt55966;
+    static public int staticInt55967;
+    static public int staticInt55968;
+    static public int staticInt55969;
+    static public int staticInt55970;
+    static public int staticInt55971;
+    static public int staticInt55972;
+    static public int staticInt55973;
+    static public int staticInt55974;
+    static public int staticInt55975;
+    static public int staticInt55976;
+    static public int staticInt55977;
+    static public int staticInt55978;
+    static public int staticInt55979;
+    static public int staticInt55980;
+    static public int staticInt55981;
+    static public int staticInt55982;
+    static public int staticInt55983;
+    static public int staticInt55984;
+    static public int staticInt55985;
+    static public int staticInt55986;
+    static public int staticInt55987;
+    static public int staticInt55988;
+    static public int staticInt55989;
+    static public int staticInt55990;
+    static public int staticInt55991;
+    static public int staticInt55992;
+    static public int staticInt55993;
+    static public int staticInt55994;
+    static public int staticInt55995;
+    static public int staticInt55996;
+    static public int staticInt55997;
+    static public int staticInt55998;
+    static public int staticInt55999;
+    static public int staticInt56000;
+    static public int staticInt56001;
+    static public int staticInt56002;
+    static public int staticInt56003;
+    static public int staticInt56004;
+    static public int staticInt56005;
+    static public int staticInt56006;
+    static public int staticInt56007;
+    static public int staticInt56008;
+    static public int staticInt56009;
+    static public int staticInt56010;
+    static public int staticInt56011;
+    static public int staticInt56012;
+    static public int staticInt56013;
+    static public int staticInt56014;
+    static public int staticInt56015;
+    static public int staticInt56016;
+    static public int staticInt56017;
+    static public int staticInt56018;
+    static public int staticInt56019;
+    static public int staticInt56020;
+    static public int staticInt56021;
+    static public int staticInt56022;
+    static public int staticInt56023;
+    static public int staticInt56024;
+    static public int staticInt56025;
+    static public int staticInt56026;
+    static public int staticInt56027;
+    static public int staticInt56028;
+    static public int staticInt56029;
+    static public int staticInt56030;
+    static public int staticInt56031;
+    static public int staticInt56032;
+    static public int staticInt56033;
+    static public int staticInt56034;
+    static public int staticInt56035;
+    static public int staticInt56036;
+    static public int staticInt56037;
+    static public int staticInt56038;
+    static public int staticInt56039;
+    static public int staticInt56040;
+    static public int staticInt56041;
+    static public int staticInt56042;
+    static public int staticInt56043;
+    static public int staticInt56044;
+    static public int staticInt56045;
+    static public int staticInt56046;
+    static public int staticInt56047;
+    static public int staticInt56048;
+    static public int staticInt56049;
+    static public int staticInt56050;
+    static public int staticInt56051;
+    static public int staticInt56052;
+    static public int staticInt56053;
+    static public int staticInt56054;
+    static public int staticInt56055;
+    static public int staticInt56056;
+    static public int staticInt56057;
+    static public int staticInt56058;
+    static public int staticInt56059;
+    static public int staticInt56060;
+    static public int staticInt56061;
+    static public int staticInt56062;
+    static public int staticInt56063;
+    static public int staticInt56064;
+    static public int staticInt56065;
+    static public int staticInt56066;
+    static public int staticInt56067;
+    static public int staticInt56068;
+    static public int staticInt56069;
+    static public int staticInt56070;
+    static public int staticInt56071;
+    static public int staticInt56072;
+    static public int staticInt56073;
+    static public int staticInt56074;
+    static public int staticInt56075;
+    static public int staticInt56076;
+    static public int staticInt56077;
+    static public int staticInt56078;
+    static public int staticInt56079;
+    static public int staticInt56080;
+    static public int staticInt56081;
+    static public int staticInt56082;
+    static public int staticInt56083;
+    static public int staticInt56084;
+    static public int staticInt56085;
+    static public int staticInt56086;
+    static public int staticInt56087;
+    static public int staticInt56088;
+    static public int staticInt56089;
+    static public int staticInt56090;
+    static public int staticInt56091;
+    static public int staticInt56092;
+    static public int staticInt56093;
+    static public int staticInt56094;
+    static public int staticInt56095;
+    static public int staticInt56096;
+    static public int staticInt56097;
+    static public int staticInt56098;
+    static public int staticInt56099;
+    static public int staticInt56100;
+    static public int staticInt56101;
+    static public int staticInt56102;
+    static public int staticInt56103;
+    static public int staticInt56104;
+    static public int staticInt56105;
+    static public int staticInt56106;
+    static public int staticInt56107;
+    static public int staticInt56108;
+    static public int staticInt56109;
+    static public int staticInt56110;
+    static public int staticInt56111;
+    static public int staticInt56112;
+    static public int staticInt56113;
+    static public int staticInt56114;
+    static public int staticInt56115;
+    static public int staticInt56116;
+    static public int staticInt56117;
+    static public int staticInt56118;
+    static public int staticInt56119;
+    static public int staticInt56120;
+    static public int staticInt56121;
+    static public int staticInt56122;
+    static public int staticInt56123;
+    static public int staticInt56124;
+    static public int staticInt56125;
+    static public int staticInt56126;
+    static public int staticInt56127;
+    static public int staticInt56128;
+    static public int staticInt56129;
+    static public int staticInt56130;
+    static public int staticInt56131;
+    static public int staticInt56132;
+    static public int staticInt56133;
+    static public int staticInt56134;
+    static public int staticInt56135;
+    static public int staticInt56136;
+    static public int staticInt56137;
+    static public int staticInt56138;
+    static public int staticInt56139;
+    static public int staticInt56140;
+    static public int staticInt56141;
+    static public int staticInt56142;
+    static public int staticInt56143;
+    static public int staticInt56144;
+    static public int staticInt56145;
+    static public int staticInt56146;
+    static public int staticInt56147;
+    static public int staticInt56148;
+    static public int staticInt56149;
+    static public int staticInt56150;
+    static public int staticInt56151;
+    static public int staticInt56152;
+    static public int staticInt56153;
+    static public int staticInt56154;
+    static public int staticInt56155;
+    static public int staticInt56156;
+    static public int staticInt56157;
+    static public int staticInt56158;
+    static public int staticInt56159;
+    static public int staticInt56160;
+    static public int staticInt56161;
+    static public int staticInt56162;
+    static public int staticInt56163;
+    static public int staticInt56164;
+    static public int staticInt56165;
+    static public int staticInt56166;
+    static public int staticInt56167;
+    static public int staticInt56168;
+    static public int staticInt56169;
+    static public int staticInt56170;
+    static public int staticInt56171;
+    static public int staticInt56172;
+    static public int staticInt56173;
+    static public int staticInt56174;
+    static public int staticInt56175;
+    static public int staticInt56176;
+    static public int staticInt56177;
+    static public int staticInt56178;
+    static public int staticInt56179;
+    static public int staticInt56180;
+    static public int staticInt56181;
+    static public int staticInt56182;
+    static public int staticInt56183;
+    static public int staticInt56184;
+    static public int staticInt56185;
+    static public int staticInt56186;
+    static public int staticInt56187;
+    static public int staticInt56188;
+    static public int staticInt56189;
+    static public int staticInt56190;
+    static public int staticInt56191;
+    static public int staticInt56192;
+    static public int staticInt56193;
+    static public int staticInt56194;
+    static public int staticInt56195;
+    static public int staticInt56196;
+    static public int staticInt56197;
+    static public int staticInt56198;
+    static public int staticInt56199;
+    static public int staticInt56200;
+    static public int staticInt56201;
+    static public int staticInt56202;
+    static public int staticInt56203;
+    static public int staticInt56204;
+    static public int staticInt56205;
+    static public int staticInt56206;
+    static public int staticInt56207;
+    static public int staticInt56208;
+    static public int staticInt56209;
+    static public int staticInt56210;
+    static public int staticInt56211;
+    static public int staticInt56212;
+    static public int staticInt56213;
+    static public int staticInt56214;
+    static public int staticInt56215;
+    static public int staticInt56216;
+    static public int staticInt56217;
+    static public int staticInt56218;
+    static public int staticInt56219;
+    static public int staticInt56220;
+    static public int staticInt56221;
+    static public int staticInt56222;
+    static public int staticInt56223;
+    static public int staticInt56224;
+    static public int staticInt56225;
+    static public int staticInt56226;
+    static public int staticInt56227;
+    static public int staticInt56228;
+    static public int staticInt56229;
+    static public int staticInt56230;
+    static public int staticInt56231;
+    static public int staticInt56232;
+    static public int staticInt56233;
+    static public int staticInt56234;
+    static public int staticInt56235;
+    static public int staticInt56236;
+    static public int staticInt56237;
+    static public int staticInt56238;
+    static public int staticInt56239;
+    static public int staticInt56240;
+    static public int staticInt56241;
+    static public int staticInt56242;
+    static public int staticInt56243;
+    static public int staticInt56244;
+    static public int staticInt56245;
+    static public int staticInt56246;
+    static public int staticInt56247;
+    static public int staticInt56248;
+    static public int staticInt56249;
+    static public int staticInt56250;
+    static public int staticInt56251;
+    static public int staticInt56252;
+    static public int staticInt56253;
+    static public int staticInt56254;
+    static public int staticInt56255;
+    static public int staticInt56256;
+    static public int staticInt56257;
+    static public int staticInt56258;
+    static public int staticInt56259;
+    static public int staticInt56260;
+    static public int staticInt56261;
+    static public int staticInt56262;
+    static public int staticInt56263;
+    static public int staticInt56264;
+    static public int staticInt56265;
+    static public int staticInt56266;
+    static public int staticInt56267;
+    static public int staticInt56268;
+    static public int staticInt56269;
+    static public int staticInt56270;
+    static public int staticInt56271;
+    static public int staticInt56272;
+    static public int staticInt56273;
+    static public int staticInt56274;
+    static public int staticInt56275;
+    static public int staticInt56276;
+    static public int staticInt56277;
+    static public int staticInt56278;
+    static public int staticInt56279;
+    static public int staticInt56280;
+    static public int staticInt56281;
+    static public int staticInt56282;
+    static public int staticInt56283;
+    static public int staticInt56284;
+    static public int staticInt56285;
+    static public int staticInt56286;
+    static public int staticInt56287;
+    static public int staticInt56288;
+    static public int staticInt56289;
+    static public int staticInt56290;
+    static public int staticInt56291;
+    static public int staticInt56292;
+    static public int staticInt56293;
+    static public int staticInt56294;
+    static public int staticInt56295;
+    static public int staticInt56296;
+    static public int staticInt56297;
+    static public int staticInt56298;
+    static public int staticInt56299;
+    static public int staticInt56300;
+    static public int staticInt56301;
+    static public int staticInt56302;
+    static public int staticInt56303;
+    static public int staticInt56304;
+    static public int staticInt56305;
+    static public int staticInt56306;
+    static public int staticInt56307;
+    static public int staticInt56308;
+    static public int staticInt56309;
+    static public int staticInt56310;
+    static public int staticInt56311;
+    static public int staticInt56312;
+    static public int staticInt56313;
+    static public int staticInt56314;
+    static public int staticInt56315;
+    static public int staticInt56316;
+    static public int staticInt56317;
+    static public int staticInt56318;
+    static public int staticInt56319;
+    static public int staticInt56320;
+    static public int staticInt56321;
+    static public int staticInt56322;
+    static public int staticInt56323;
+    static public int staticInt56324;
+    static public int staticInt56325;
+    static public int staticInt56326;
+    static public int staticInt56327;
+    static public int staticInt56328;
+    static public int staticInt56329;
+    static public int staticInt56330;
+    static public int staticInt56331;
+    static public int staticInt56332;
+    static public int staticInt56333;
+    static public int staticInt56334;
+    static public int staticInt56335;
+    static public int staticInt56336;
+    static public int staticInt56337;
+    static public int staticInt56338;
+    static public int staticInt56339;
+    static public int staticInt56340;
+    static public int staticInt56341;
+    static public int staticInt56342;
+    static public int staticInt56343;
+    static public int staticInt56344;
+    static public int staticInt56345;
+    static public int staticInt56346;
+    static public int staticInt56347;
+    static public int staticInt56348;
+    static public int staticInt56349;
+    static public int staticInt56350;
+    static public int staticInt56351;
+    static public int staticInt56352;
+    static public int staticInt56353;
+    static public int staticInt56354;
+    static public int staticInt56355;
+    static public int staticInt56356;
+    static public int staticInt56357;
+    static public int staticInt56358;
+    static public int staticInt56359;
+    static public int staticInt56360;
+    static public int staticInt56361;
+    static public int staticInt56362;
+    static public int staticInt56363;
+    static public int staticInt56364;
+    static public int staticInt56365;
+    static public int staticInt56366;
+    static public int staticInt56367;
+    static public int staticInt56368;
+    static public int staticInt56369;
+    static public int staticInt56370;
+    static public int staticInt56371;
+    static public int staticInt56372;
+    static public int staticInt56373;
+    static public int staticInt56374;
+    static public int staticInt56375;
+    static public int staticInt56376;
+    static public int staticInt56377;
+    static public int staticInt56378;
+    static public int staticInt56379;
+    static public int staticInt56380;
+    static public int staticInt56381;
+    static public int staticInt56382;
+    static public int staticInt56383;
+    static public int staticInt56384;
+    static public int staticInt56385;
+    static public int staticInt56386;
+    static public int staticInt56387;
+    static public int staticInt56388;
+    static public int staticInt56389;
+    static public int staticInt56390;
+    static public int staticInt56391;
+    static public int staticInt56392;
+    static public int staticInt56393;
+    static public int staticInt56394;
+    static public int staticInt56395;
+    static public int staticInt56396;
+    static public int staticInt56397;
+    static public int staticInt56398;
+    static public int staticInt56399;
+    static public int staticInt56400;
+    static public int staticInt56401;
+    static public int staticInt56402;
+    static public int staticInt56403;
+    static public int staticInt56404;
+    static public int staticInt56405;
+    static public int staticInt56406;
+    static public int staticInt56407;
+    static public int staticInt56408;
+    static public int staticInt56409;
+    static public int staticInt56410;
+    static public int staticInt56411;
+    static public int staticInt56412;
+    static public int staticInt56413;
+    static public int staticInt56414;
+    static public int staticInt56415;
+    static public int staticInt56416;
+    static public int staticInt56417;
+    static public int staticInt56418;
+    static public int staticInt56419;
+    static public int staticInt56420;
+    static public int staticInt56421;
+    static public int staticInt56422;
+    static public int staticInt56423;
+    static public int staticInt56424;
+    static public int staticInt56425;
+    static public int staticInt56426;
+    static public int staticInt56427;
+    static public int staticInt56428;
+    static public int staticInt56429;
+    static public int staticInt56430;
+    static public int staticInt56431;
+    static public int staticInt56432;
+    static public int staticInt56433;
+    static public int staticInt56434;
+    static public int staticInt56435;
+    static public int staticInt56436;
+    static public int staticInt56437;
+    static public int staticInt56438;
+    static public int staticInt56439;
+    static public int staticInt56440;
+    static public int staticInt56441;
+    static public int staticInt56442;
+    static public int staticInt56443;
+    static public int staticInt56444;
+    static public int staticInt56445;
+    static public int staticInt56446;
+    static public int staticInt56447;
+    static public int staticInt56448;
+    static public int staticInt56449;
+    static public int staticInt56450;
+    static public int staticInt56451;
+    static public int staticInt56452;
+    static public int staticInt56453;
+    static public int staticInt56454;
+    static public int staticInt56455;
+    static public int staticInt56456;
+    static public int staticInt56457;
+    static public int staticInt56458;
+    static public int staticInt56459;
+    static public int staticInt56460;
+    static public int staticInt56461;
+    static public int staticInt56462;
+    static public int staticInt56463;
+    static public int staticInt56464;
+    static public int staticInt56465;
+    static public int staticInt56466;
+    static public int staticInt56467;
+    static public int staticInt56468;
+    static public int staticInt56469;
+    static public int staticInt56470;
+    static public int staticInt56471;
+    static public int staticInt56472;
+    static public int staticInt56473;
+    static public int staticInt56474;
+    static public int staticInt56475;
+    static public int staticInt56476;
+    static public int staticInt56477;
+    static public int staticInt56478;
+    static public int staticInt56479;
+    static public int staticInt56480;
+    static public int staticInt56481;
+    static public int staticInt56482;
+    static public int staticInt56483;
+    static public int staticInt56484;
+    static public int staticInt56485;
+    static public int staticInt56486;
+    static public int staticInt56487;
+    static public int staticInt56488;
+    static public int staticInt56489;
+    static public int staticInt56490;
+    static public int staticInt56491;
+    static public int staticInt56492;
+    static public int staticInt56493;
+    static public int staticInt56494;
+    static public int staticInt56495;
+    static public int staticInt56496;
+    static public int staticInt56497;
+    static public int staticInt56498;
+    static public int staticInt56499;
+    static public int staticInt56500;
+    static public int staticInt56501;
+    static public int staticInt56502;
+    static public int staticInt56503;
+    static public int staticInt56504;
+    static public int staticInt56505;
+    static public int staticInt56506;
+    static public int staticInt56507;
+    static public int staticInt56508;
+    static public int staticInt56509;
+    static public int staticInt56510;
+    static public int staticInt56511;
+    static public int staticInt56512;
+    static public int staticInt56513;
+    static public int staticInt56514;
+    static public int staticInt56515;
+    static public int staticInt56516;
+    static public int staticInt56517;
+    static public int staticInt56518;
+    static public int staticInt56519;
+    static public int staticInt56520;
+    static public int staticInt56521;
+    static public int staticInt56522;
+    static public int staticInt56523;
+    static public int staticInt56524;
+    static public int staticInt56525;
+    static public int staticInt56526;
+    static public int staticInt56527;
+    static public int staticInt56528;
+    static public int staticInt56529;
+    static public int staticInt56530;
+    static public int staticInt56531;
+    static public int staticInt56532;
+    static public int staticInt56533;
+    static public int staticInt56534;
+    static public int staticInt56535;
+    static public int staticInt56536;
+    static public int staticInt56537;
+    static public int staticInt56538;
+    static public int staticInt56539;
+    static public int staticInt56540;
+    static public int staticInt56541;
+    static public int staticInt56542;
+    static public int staticInt56543;
+    static public int staticInt56544;
+    static public int staticInt56545;
+    static public int staticInt56546;
+    static public int staticInt56547;
+    static public int staticInt56548;
+    static public int staticInt56549;
+    static public int staticInt56550;
+    static public int staticInt56551;
+    static public int staticInt56552;
+    static public int staticInt56553;
+    static public int staticInt56554;
+    static public int staticInt56555;
+    static public int staticInt56556;
+    static public int staticInt56557;
+    static public int staticInt56558;
+    static public int staticInt56559;
+    static public int staticInt56560;
+    static public int staticInt56561;
+    static public int staticInt56562;
+    static public int staticInt56563;
+    static public int staticInt56564;
+    static public int staticInt56565;
+    static public int staticInt56566;
+    static public int staticInt56567;
+    static public int staticInt56568;
+    static public int staticInt56569;
+    static public int staticInt56570;
+    static public int staticInt56571;
+    static public int staticInt56572;
+    static public int staticInt56573;
+    static public int staticInt56574;
+    static public int staticInt56575;
+    static public int staticInt56576;
+    static public int staticInt56577;
+    static public int staticInt56578;
+    static public int staticInt56579;
+    static public int staticInt56580;
+    static public int staticInt56581;
+    static public int staticInt56582;
+    static public int staticInt56583;
+    static public int staticInt56584;
+    static public int staticInt56585;
+    static public int staticInt56586;
+    static public int staticInt56587;
+    static public int staticInt56588;
+    static public int staticInt56589;
+    static public int staticInt56590;
+    static public int staticInt56591;
+    static public int staticInt56592;
+    static public int staticInt56593;
+    static public int staticInt56594;
+    static public int staticInt56595;
+    static public int staticInt56596;
+    static public int staticInt56597;
+    static public int staticInt56598;
+    static public int staticInt56599;
+    static public int staticInt56600;
+    static public int staticInt56601;
+    static public int staticInt56602;
+    static public int staticInt56603;
+    static public int staticInt56604;
+    static public int staticInt56605;
+    static public int staticInt56606;
+    static public int staticInt56607;
+    static public int staticInt56608;
+    static public int staticInt56609;
+    static public int staticInt56610;
+    static public int staticInt56611;
+    static public int staticInt56612;
+    static public int staticInt56613;
+    static public int staticInt56614;
+    static public int staticInt56615;
+    static public int staticInt56616;
+    static public int staticInt56617;
+    static public int staticInt56618;
+    static public int staticInt56619;
+    static public int staticInt56620;
+    static public int staticInt56621;
+    static public int staticInt56622;
+    static public int staticInt56623;
+    static public int staticInt56624;
+    static public int staticInt56625;
+    static public int staticInt56626;
+    static public int staticInt56627;
+    static public int staticInt56628;
+    static public int staticInt56629;
+    static public int staticInt56630;
+    static public int staticInt56631;
+    static public int staticInt56632;
+    static public int staticInt56633;
+    static public int staticInt56634;
+    static public int staticInt56635;
+    static public int staticInt56636;
+    static public int staticInt56637;
+    static public int staticInt56638;
+    static public int staticInt56639;
+    static public int staticInt56640;
+    static public int staticInt56641;
+    static public int staticInt56642;
+    static public int staticInt56643;
+    static public int staticInt56644;
+    static public int staticInt56645;
+    static public int staticInt56646;
+    static public int staticInt56647;
+    static public int staticInt56648;
+    static public int staticInt56649;
+    static public int staticInt56650;
+    static public int staticInt56651;
+    static public int staticInt56652;
+    static public int staticInt56653;
+    static public int staticInt56654;
+    static public int staticInt56655;
+    static public int staticInt56656;
+    static public int staticInt56657;
+    static public int staticInt56658;
+    static public int staticInt56659;
+    static public int staticInt56660;
+    static public int staticInt56661;
+    static public int staticInt56662;
+    static public int staticInt56663;
+    static public int staticInt56664;
+    static public int staticInt56665;
+    static public int staticInt56666;
+    static public int staticInt56667;
+    static public int staticInt56668;
+    static public int staticInt56669;
+    static public int staticInt56670;
+    static public int staticInt56671;
+    static public int staticInt56672;
+    static public int staticInt56673;
+    static public int staticInt56674;
+    static public int staticInt56675;
+    static public int staticInt56676;
+    static public int staticInt56677;
+    static public int staticInt56678;
+    static public int staticInt56679;
+    static public int staticInt56680;
+    static public int staticInt56681;
+    static public int staticInt56682;
+    static public int staticInt56683;
+    static public int staticInt56684;
+    static public int staticInt56685;
+    static public int staticInt56686;
+    static public int staticInt56687;
+    static public int staticInt56688;
+    static public int staticInt56689;
+    static public int staticInt56690;
+    static public int staticInt56691;
+    static public int staticInt56692;
+    static public int staticInt56693;
+    static public int staticInt56694;
+    static public int staticInt56695;
+    static public int staticInt56696;
+    static public int staticInt56697;
+    static public int staticInt56698;
+    static public int staticInt56699;
+    static public int staticInt56700;
+    static public int staticInt56701;
+    static public int staticInt56702;
+    static public int staticInt56703;
+    static public int staticInt56704;
+    static public int staticInt56705;
+    static public int staticInt56706;
+    static public int staticInt56707;
+    static public int staticInt56708;
+    static public int staticInt56709;
+    static public int staticInt56710;
+    static public int staticInt56711;
+    static public int staticInt56712;
+    static public int staticInt56713;
+    static public int staticInt56714;
+    static public int staticInt56715;
+    static public int staticInt56716;
+    static public int staticInt56717;
+    static public int staticInt56718;
+    static public int staticInt56719;
+    static public int staticInt56720;
+    static public int staticInt56721;
+    static public int staticInt56722;
+    static public int staticInt56723;
+    static public int staticInt56724;
+    static public int staticInt56725;
+    static public int staticInt56726;
+    static public int staticInt56727;
+    static public int staticInt56728;
+    static public int staticInt56729;
+    static public int staticInt56730;
+    static public int staticInt56731;
+    static public int staticInt56732;
+    static public int staticInt56733;
+    static public int staticInt56734;
+    static public int staticInt56735;
+    static public int staticInt56736;
+    static public int staticInt56737;
+    static public int staticInt56738;
+    static public int staticInt56739;
+    static public int staticInt56740;
+    static public int staticInt56741;
+    static public int staticInt56742;
+    static public int staticInt56743;
+    static public int staticInt56744;
+    static public int staticInt56745;
+    static public int staticInt56746;
+    static public int staticInt56747;
+    static public int staticInt56748;
+    static public int staticInt56749;
+    static public int staticInt56750;
+    static public int staticInt56751;
+    static public int staticInt56752;
+    static public int staticInt56753;
+    static public int staticInt56754;
+    static public int staticInt56755;
+    static public int staticInt56756;
+    static public int staticInt56757;
+    static public int staticInt56758;
+    static public int staticInt56759;
+    static public int staticInt56760;
+    static public int staticInt56761;
+    static public int staticInt56762;
+    static public int staticInt56763;
+    static public int staticInt56764;
+    static public int staticInt56765;
+    static public int staticInt56766;
+    static public int staticInt56767;
+    static public int staticInt56768;
+    static public int staticInt56769;
+    static public int staticInt56770;
+    static public int staticInt56771;
+    static public int staticInt56772;
+    static public int staticInt56773;
+    static public int staticInt56774;
+    static public int staticInt56775;
+    static public int staticInt56776;
+    static public int staticInt56777;
+    static public int staticInt56778;
+    static public int staticInt56779;
+    static public int staticInt56780;
+    static public int staticInt56781;
+    static public int staticInt56782;
+    static public int staticInt56783;
+    static public int staticInt56784;
+    static public int staticInt56785;
+    static public int staticInt56786;
+    static public int staticInt56787;
+    static public int staticInt56788;
+    static public int staticInt56789;
+    static public int staticInt56790;
+    static public int staticInt56791;
+    static public int staticInt56792;
+    static public int staticInt56793;
+    static public int staticInt56794;
+    static public int staticInt56795;
+    static public int staticInt56796;
+    static public int staticInt56797;
+    static public int staticInt56798;
+    static public int staticInt56799;
+    static public int staticInt56800;
+    static public int staticInt56801;
+    static public int staticInt56802;
+    static public int staticInt56803;
+    static public int staticInt56804;
+    static public int staticInt56805;
+    static public int staticInt56806;
+    static public int staticInt56807;
+    static public int staticInt56808;
+    static public int staticInt56809;
+    static public int staticInt56810;
+    static public int staticInt56811;
+    static public int staticInt56812;
+    static public int staticInt56813;
+    static public int staticInt56814;
+    static public int staticInt56815;
+    static public int staticInt56816;
+    static public int staticInt56817;
+    static public int staticInt56818;
+    static public int staticInt56819;
+    static public int staticInt56820;
+    static public int staticInt56821;
+    static public int staticInt56822;
+    static public int staticInt56823;
+    static public int staticInt56824;
+    static public int staticInt56825;
+    static public int staticInt56826;
+    static public int staticInt56827;
+    static public int staticInt56828;
+    static public int staticInt56829;
+    static public int staticInt56830;
+    static public int staticInt56831;
+    static public int staticInt56832;
+    static public int staticInt56833;
+    static public int staticInt56834;
+    static public int staticInt56835;
+    static public int staticInt56836;
+    static public int staticInt56837;
+    static public int staticInt56838;
+    static public int staticInt56839;
+    static public int staticInt56840;
+    static public int staticInt56841;
+    static public int staticInt56842;
+    static public int staticInt56843;
+    static public int staticInt56844;
+    static public int staticInt56845;
+    static public int staticInt56846;
+    static public int staticInt56847;
+    static public int staticInt56848;
+    static public int staticInt56849;
+    static public int staticInt56850;
+    static public int staticInt56851;
+    static public int staticInt56852;
+    static public int staticInt56853;
+    static public int staticInt56854;
+    static public int staticInt56855;
+    static public int staticInt56856;
+    static public int staticInt56857;
+    static public int staticInt56858;
+    static public int staticInt56859;
+    static public int staticInt56860;
+    static public int staticInt56861;
+    static public int staticInt56862;
+    static public int staticInt56863;
+    static public int staticInt56864;
+    static public int staticInt56865;
+    static public int staticInt56866;
+    static public int staticInt56867;
+    static public int staticInt56868;
+    static public int staticInt56869;
+    static public int staticInt56870;
+    static public int staticInt56871;
+    static public int staticInt56872;
+    static public int staticInt56873;
+    static public int staticInt56874;
+    static public int staticInt56875;
+    static public int staticInt56876;
+    static public int staticInt56877;
+    static public int staticInt56878;
+    static public int staticInt56879;
+    static public int staticInt56880;
+    static public int staticInt56881;
+    static public int staticInt56882;
+    static public int staticInt56883;
+    static public int staticInt56884;
+    static public int staticInt56885;
+    static public int staticInt56886;
+    static public int staticInt56887;
+    static public int staticInt56888;
+    static public int staticInt56889;
+    static public int staticInt56890;
+    static public int staticInt56891;
+    static public int staticInt56892;
+    static public int staticInt56893;
+    static public int staticInt56894;
+    static public int staticInt56895;
+    static public int staticInt56896;
+    static public int staticInt56897;
+    static public int staticInt56898;
+    static public int staticInt56899;
+    static public int staticInt56900;
+    static public int staticInt56901;
+    static public int staticInt56902;
+    static public int staticInt56903;
+    static public int staticInt56904;
+    static public int staticInt56905;
+    static public int staticInt56906;
+    static public int staticInt56907;
+    static public int staticInt56908;
+    static public int staticInt56909;
+    static public int staticInt56910;
+    static public int staticInt56911;
+    static public int staticInt56912;
+    static public int staticInt56913;
+    static public int staticInt56914;
+    static public int staticInt56915;
+    static public int staticInt56916;
+    static public int staticInt56917;
+    static public int staticInt56918;
+    static public int staticInt56919;
+    static public int staticInt56920;
+    static public int staticInt56921;
+    static public int staticInt56922;
+    static public int staticInt56923;
+    static public int staticInt56924;
+    static public int staticInt56925;
+    static public int staticInt56926;
+    static public int staticInt56927;
+    static public int staticInt56928;
+    static public int staticInt56929;
+    static public int staticInt56930;
+    static public int staticInt56931;
+    static public int staticInt56932;
+    static public int staticInt56933;
+    static public int staticInt56934;
+    static public int staticInt56935;
+    static public int staticInt56936;
+    static public int staticInt56937;
+    static public int staticInt56938;
+    static public int staticInt56939;
+    static public int staticInt56940;
+    static public int staticInt56941;
+    static public int staticInt56942;
+    static public int staticInt56943;
+    static public int staticInt56944;
+    static public int staticInt56945;
+    static public int staticInt56946;
+    static public int staticInt56947;
+    static public int staticInt56948;
+    static public int staticInt56949;
+    static public int staticInt56950;
+    static public int staticInt56951;
+    static public int staticInt56952;
+    static public int staticInt56953;
+    static public int staticInt56954;
+    static public int staticInt56955;
+    static public int staticInt56956;
+    static public int staticInt56957;
+    static public int staticInt56958;
+    static public int staticInt56959;
+    static public int staticInt56960;
+    static public int staticInt56961;
+    static public int staticInt56962;
+    static public int staticInt56963;
+    static public int staticInt56964;
+    static public int staticInt56965;
+    static public int staticInt56966;
+    static public int staticInt56967;
+    static public int staticInt56968;
+    static public int staticInt56969;
+    static public int staticInt56970;
+    static public int staticInt56971;
+    static public int staticInt56972;
+    static public int staticInt56973;
+    static public int staticInt56974;
+    static public int staticInt56975;
+    static public int staticInt56976;
+    static public int staticInt56977;
+    static public int staticInt56978;
+    static public int staticInt56979;
+    static public int staticInt56980;
+    static public int staticInt56981;
+    static public int staticInt56982;
+    static public int staticInt56983;
+    static public int staticInt56984;
+    static public int staticInt56985;
+    static public int staticInt56986;
+    static public int staticInt56987;
+    static public int staticInt56988;
+    static public int staticInt56989;
+    static public int staticInt56990;
+    static public int staticInt56991;
+    static public int staticInt56992;
+    static public int staticInt56993;
+    static public int staticInt56994;
+    static public int staticInt56995;
+    static public int staticInt56996;
+    static public int staticInt56997;
+    static public int staticInt56998;
+    static public int staticInt56999;
+    static public int staticInt57000;
+    static public int staticInt57001;
+    static public int staticInt57002;
+    static public int staticInt57003;
+    static public int staticInt57004;
+    static public int staticInt57005;
+    static public int staticInt57006;
+    static public int staticInt57007;
+    static public int staticInt57008;
+    static public int staticInt57009;
+    static public int staticInt57010;
+    static public int staticInt57011;
+    static public int staticInt57012;
+    static public int staticInt57013;
+    static public int staticInt57014;
+    static public int staticInt57015;
+    static public int staticInt57016;
+    static public int staticInt57017;
+    static public int staticInt57018;
+    static public int staticInt57019;
+    static public int staticInt57020;
+    static public int staticInt57021;
+    static public int staticInt57022;
+    static public int staticInt57023;
+    static public int staticInt57024;
+    static public int staticInt57025;
+    static public int staticInt57026;
+    static public int staticInt57027;
+    static public int staticInt57028;
+    static public int staticInt57029;
+    static public int staticInt57030;
+    static public int staticInt57031;
+    static public int staticInt57032;
+    static public int staticInt57033;
+    static public int staticInt57034;
+    static public int staticInt57035;
+    static public int staticInt57036;
+    static public int staticInt57037;
+    static public int staticInt57038;
+    static public int staticInt57039;
+    static public int staticInt57040;
+    static public int staticInt57041;
+    static public int staticInt57042;
+    static public int staticInt57043;
+    static public int staticInt57044;
+    static public int staticInt57045;
+    static public int staticInt57046;
+    static public int staticInt57047;
+    static public int staticInt57048;
+    static public int staticInt57049;
+    static public int staticInt57050;
+    static public int staticInt57051;
+    static public int staticInt57052;
+    static public int staticInt57053;
+    static public int staticInt57054;
+    static public int staticInt57055;
+    static public int staticInt57056;
+    static public int staticInt57057;
+    static public int staticInt57058;
+    static public int staticInt57059;
+    static public int staticInt57060;
+    static public int staticInt57061;
+    static public int staticInt57062;
+    static public int staticInt57063;
+    static public int staticInt57064;
+    static public int staticInt57065;
+    static public int staticInt57066;
+    static public int staticInt57067;
+    static public int staticInt57068;
+    static public int staticInt57069;
+    static public int staticInt57070;
+    static public int staticInt57071;
+    static public int staticInt57072;
+    static public int staticInt57073;
+    static public int staticInt57074;
+    static public int staticInt57075;
+    static public int staticInt57076;
+    static public int staticInt57077;
+    static public int staticInt57078;
+    static public int staticInt57079;
+    static public int staticInt57080;
+    static public int staticInt57081;
+    static public int staticInt57082;
+    static public int staticInt57083;
+    static public int staticInt57084;
+    static public int staticInt57085;
+    static public int staticInt57086;
+    static public int staticInt57087;
+    static public int staticInt57088;
+    static public int staticInt57089;
+    static public int staticInt57090;
+    static public int staticInt57091;
+    static public int staticInt57092;
+    static public int staticInt57093;
+    static public int staticInt57094;
+    static public int staticInt57095;
+    static public int staticInt57096;
+    static public int staticInt57097;
+    static public int staticInt57098;
+    static public int staticInt57099;
+    static public int staticInt57100;
+    static public int staticInt57101;
+    static public int staticInt57102;
+    static public int staticInt57103;
+    static public int staticInt57104;
+    static public int staticInt57105;
+    static public int staticInt57106;
+    static public int staticInt57107;
+    static public int staticInt57108;
+    static public int staticInt57109;
+    static public int staticInt57110;
+    static public int staticInt57111;
+    static public int staticInt57112;
+    static public int staticInt57113;
+    static public int staticInt57114;
+    static public int staticInt57115;
+    static public int staticInt57116;
+    static public int staticInt57117;
+    static public int staticInt57118;
+    static public int staticInt57119;
+    static public int staticInt57120;
+    static public int staticInt57121;
+    static public int staticInt57122;
+    static public int staticInt57123;
+    static public int staticInt57124;
+    static public int staticInt57125;
+    static public int staticInt57126;
+    static public int staticInt57127;
+    static public int staticInt57128;
+    static public int staticInt57129;
+    static public int staticInt57130;
+    static public int staticInt57131;
+    static public int staticInt57132;
+    static public int staticInt57133;
+    static public int staticInt57134;
+    static public int staticInt57135;
+    static public int staticInt57136;
+    static public int staticInt57137;
+    static public int staticInt57138;
+    static public int staticInt57139;
+    static public int staticInt57140;
+    static public int staticInt57141;
+    static public int staticInt57142;
+    static public int staticInt57143;
+    static public int staticInt57144;
+    static public int staticInt57145;
+    static public int staticInt57146;
+    static public int staticInt57147;
+    static public int staticInt57148;
+    static public int staticInt57149;
+    static public int staticInt57150;
+    static public int staticInt57151;
+    static public int staticInt57152;
+    static public int staticInt57153;
+    static public int staticInt57154;
+    static public int staticInt57155;
+    static public int staticInt57156;
+    static public int staticInt57157;
+    static public int staticInt57158;
+    static public int staticInt57159;
+    static public int staticInt57160;
+    static public int staticInt57161;
+    static public int staticInt57162;
+    static public int staticInt57163;
+    static public int staticInt57164;
+    static public int staticInt57165;
+    static public int staticInt57166;
+    static public int staticInt57167;
+    static public int staticInt57168;
+    static public int staticInt57169;
+    static public int staticInt57170;
+    static public int staticInt57171;
+    static public int staticInt57172;
+    static public int staticInt57173;
+    static public int staticInt57174;
+    static public int staticInt57175;
+    static public int staticInt57176;
+    static public int staticInt57177;
+    static public int staticInt57178;
+    static public int staticInt57179;
+    static public int staticInt57180;
+    static public int staticInt57181;
+    static public int staticInt57182;
+    static public int staticInt57183;
+    static public int staticInt57184;
+    static public int staticInt57185;
+    static public int staticInt57186;
+    static public int staticInt57187;
+    static public int staticInt57188;
+    static public int staticInt57189;
+    static public int staticInt57190;
+    static public int staticInt57191;
+    static public int staticInt57192;
+    static public int staticInt57193;
+    static public int staticInt57194;
+    static public int staticInt57195;
+    static public int staticInt57196;
+    static public int staticInt57197;
+    static public int staticInt57198;
+    static public int staticInt57199;
+    static public int staticInt57200;
+    static public int staticInt57201;
+    static public int staticInt57202;
+    static public int staticInt57203;
+    static public int staticInt57204;
+    static public int staticInt57205;
+    static public int staticInt57206;
+    static public int staticInt57207;
+    static public int staticInt57208;
+    static public int staticInt57209;
+    static public int staticInt57210;
+    static public int staticInt57211;
+    static public int staticInt57212;
+    static public int staticInt57213;
+    static public int staticInt57214;
+    static public int staticInt57215;
+    static public int staticInt57216;
+    static public int staticInt57217;
+    static public int staticInt57218;
+    static public int staticInt57219;
+    static public int staticInt57220;
+    static public int staticInt57221;
+    static public int staticInt57222;
+    static public int staticInt57223;
+    static public int staticInt57224;
+    static public int staticInt57225;
+    static public int staticInt57226;
+    static public int staticInt57227;
+    static public int staticInt57228;
+    static public int staticInt57229;
+    static public int staticInt57230;
+    static public int staticInt57231;
+    static public int staticInt57232;
+    static public int staticInt57233;
+    static public int staticInt57234;
+    static public int staticInt57235;
+    static public int staticInt57236;
+    static public int staticInt57237;
+    static public int staticInt57238;
+    static public int staticInt57239;
+    static public int staticInt57240;
+    static public int staticInt57241;
+    static public int staticInt57242;
+    static public int staticInt57243;
+    static public int staticInt57244;
+    static public int staticInt57245;
+    static public int staticInt57246;
+    static public int staticInt57247;
+    static public int staticInt57248;
+    static public int staticInt57249;
+    static public int staticInt57250;
+    static public int staticInt57251;
+    static public int staticInt57252;
+    static public int staticInt57253;
+    static public int staticInt57254;
+    static public int staticInt57255;
+    static public int staticInt57256;
+    static public int staticInt57257;
+    static public int staticInt57258;
+    static public int staticInt57259;
+    static public int staticInt57260;
+    static public int staticInt57261;
+    static public int staticInt57262;
+    static public int staticInt57263;
+    static public int staticInt57264;
+    static public int staticInt57265;
+    static public int staticInt57266;
+    static public int staticInt57267;
+    static public int staticInt57268;
+    static public int staticInt57269;
+    static public int staticInt57270;
+    static public int staticInt57271;
+    static public int staticInt57272;
+    static public int staticInt57273;
+    static public int staticInt57274;
+    static public int staticInt57275;
+    static public int staticInt57276;
+    static public int staticInt57277;
+    static public int staticInt57278;
+    static public int staticInt57279;
+    static public int staticInt57280;
+    static public int staticInt57281;
+    static public int staticInt57282;
+    static public int staticInt57283;
+    static public int staticInt57284;
+    static public int staticInt57285;
+    static public int staticInt57286;
+    static public int staticInt57287;
+    static public int staticInt57288;
+    static public int staticInt57289;
+    static public int staticInt57290;
+    static public int staticInt57291;
+    static public int staticInt57292;
+    static public int staticInt57293;
+    static public int staticInt57294;
+    static public int staticInt57295;
+    static public int staticInt57296;
+    static public int staticInt57297;
+    static public int staticInt57298;
+    static public int staticInt57299;
+    static public int staticInt57300;
+    static public int staticInt57301;
+    static public int staticInt57302;
+    static public int staticInt57303;
+    static public int staticInt57304;
+    static public int staticInt57305;
+    static public int staticInt57306;
+    static public int staticInt57307;
+    static public int staticInt57308;
+    static public int staticInt57309;
+    static public int staticInt57310;
+    static public int staticInt57311;
+    static public int staticInt57312;
+    static public int staticInt57313;
+    static public int staticInt57314;
+    static public int staticInt57315;
+    static public int staticInt57316;
+    static public int staticInt57317;
+    static public int staticInt57318;
+    static public int staticInt57319;
+    static public int staticInt57320;
+    static public int staticInt57321;
+    static public int staticInt57322;
+    static public int staticInt57323;
+    static public int staticInt57324;
+    static public int staticInt57325;
+    static public int staticInt57326;
+    static public int staticInt57327;
+    static public int staticInt57328;
+    static public int staticInt57329;
+    static public int staticInt57330;
+    static public int staticInt57331;
+    static public int staticInt57332;
+    static public int staticInt57333;
+    static public int staticInt57334;
+    static public int staticInt57335;
+    static public int staticInt57336;
+    static public int staticInt57337;
+    static public int staticInt57338;
+    static public int staticInt57339;
+    static public int staticInt57340;
+    static public int staticInt57341;
+    static public int staticInt57342;
+    static public int staticInt57343;
+    static public int staticInt57344;
+    static public int staticInt57345;
+    static public int staticInt57346;
+    static public int staticInt57347;
+    static public int staticInt57348;
+    static public int staticInt57349;
+    static public int staticInt57350;
+    static public int staticInt57351;
+    static public int staticInt57352;
+    static public int staticInt57353;
+    static public int staticInt57354;
+    static public int staticInt57355;
+    static public int staticInt57356;
+    static public int staticInt57357;
+    static public int staticInt57358;
+    static public int staticInt57359;
+    static public int staticInt57360;
+    static public int staticInt57361;
+    static public int staticInt57362;
+    static public int staticInt57363;
+    static public int staticInt57364;
+    static public int staticInt57365;
+    static public int staticInt57366;
+    static public int staticInt57367;
+    static public int staticInt57368;
+    static public int staticInt57369;
+    static public int staticInt57370;
+    static public int staticInt57371;
+    static public int staticInt57372;
+    static public int staticInt57373;
+    static public int staticInt57374;
+    static public int staticInt57375;
+    static public int staticInt57376;
+    static public int staticInt57377;
+    static public int staticInt57378;
+    static public int staticInt57379;
+    static public int staticInt57380;
+    static public int staticInt57381;
+    static public int staticInt57382;
+    static public int staticInt57383;
+    static public int staticInt57384;
+    static public int staticInt57385;
+    static public int staticInt57386;
+    static public int staticInt57387;
+    static public int staticInt57388;
+    static public int staticInt57389;
+    static public int staticInt57390;
+    static public int staticInt57391;
+    static public int staticInt57392;
+    static public int staticInt57393;
+    static public int staticInt57394;
+    static public int staticInt57395;
+    static public int staticInt57396;
+    static public int staticInt57397;
+    static public int staticInt57398;
+    static public int staticInt57399;
+    static public int staticInt57400;
+    static public int staticInt57401;
+    static public int staticInt57402;
+    static public int staticInt57403;
+    static public int staticInt57404;
+    static public int staticInt57405;
+    static public int staticInt57406;
+    static public int staticInt57407;
+    static public int staticInt57408;
+    static public int staticInt57409;
+    static public int staticInt57410;
+    static public int staticInt57411;
+    static public int staticInt57412;
+    static public int staticInt57413;
+    static public int staticInt57414;
+    static public int staticInt57415;
+    static public int staticInt57416;
+    static public int staticInt57417;
+    static public int staticInt57418;
+    static public int staticInt57419;
+    static public int staticInt57420;
+    static public int staticInt57421;
+    static public int staticInt57422;
+    static public int staticInt57423;
+    static public int staticInt57424;
+    static public int staticInt57425;
+    static public int staticInt57426;
+    static public int staticInt57427;
+    static public int staticInt57428;
+    static public int staticInt57429;
+    static public int staticInt57430;
+    static public int staticInt57431;
+    static public int staticInt57432;
+    static public int staticInt57433;
+    static public int staticInt57434;
+    static public int staticInt57435;
+    static public int staticInt57436;
+    static public int staticInt57437;
+    static public int staticInt57438;
+    static public int staticInt57439;
+    static public int staticInt57440;
+    static public int staticInt57441;
+    static public int staticInt57442;
+    static public int staticInt57443;
+    static public int staticInt57444;
+    static public int staticInt57445;
+    static public int staticInt57446;
+    static public int staticInt57447;
+    static public int staticInt57448;
+    static public int staticInt57449;
+    static public int staticInt57450;
+    static public int staticInt57451;
+    static public int staticInt57452;
+    static public int staticInt57453;
+    static public int staticInt57454;
+    static public int staticInt57455;
+    static public int staticInt57456;
+    static public int staticInt57457;
+    static public int staticInt57458;
+    static public int staticInt57459;
+    static public int staticInt57460;
+    static public int staticInt57461;
+    static public int staticInt57462;
+    static public int staticInt57463;
+    static public int staticInt57464;
+    static public int staticInt57465;
+    static public int staticInt57466;
+    static public int staticInt57467;
+    static public int staticInt57468;
+    static public int staticInt57469;
+    static public int staticInt57470;
+    static public int staticInt57471;
+    static public int staticInt57472;
+    static public int staticInt57473;
+    static public int staticInt57474;
+    static public int staticInt57475;
+    static public int staticInt57476;
+    static public int staticInt57477;
+    static public int staticInt57478;
+    static public int staticInt57479;
+    static public int staticInt57480;
+    static public int staticInt57481;
+    static public int staticInt57482;
+    static public int staticInt57483;
+    static public int staticInt57484;
+    static public int staticInt57485;
+    static public int staticInt57486;
+    static public int staticInt57487;
+    static public int staticInt57488;
+    static public int staticInt57489;
+    static public int staticInt57490;
+    static public int staticInt57491;
+    static public int staticInt57492;
+    static public int staticInt57493;
+    static public int staticInt57494;
+    static public int staticInt57495;
+    static public int staticInt57496;
+    static public int staticInt57497;
+    static public int staticInt57498;
+    static public int staticInt57499;
+    static public int staticInt57500;
+    static public int staticInt57501;
+    static public int staticInt57502;
+    static public int staticInt57503;
+    static public int staticInt57504;
+    static public int staticInt57505;
+    static public int staticInt57506;
+    static public int staticInt57507;
+    static public int staticInt57508;
+    static public int staticInt57509;
+    static public int staticInt57510;
+    static public int staticInt57511;
+    static public int staticInt57512;
+    static public int staticInt57513;
+    static public int staticInt57514;
+    static public int staticInt57515;
+    static public int staticInt57516;
+    static public int staticInt57517;
+    static public int staticInt57518;
+    static public int staticInt57519;
+    static public int staticInt57520;
+    static public int staticInt57521;
+    static public int staticInt57522;
+    static public int staticInt57523;
+    static public int staticInt57524;
+    static public int staticInt57525;
+    static public int staticInt57526;
+    static public int staticInt57527;
+    static public int staticInt57528;
+    static public int staticInt57529;
+    static public int staticInt57530;
+    static public int staticInt57531;
+    static public int staticInt57532;
+    static public int staticInt57533;
+    static public int staticInt57534;
+    static public int staticInt57535;
+    static public int staticInt57536;
+    static public int staticInt57537;
+    static public int staticInt57538;
+    static public int staticInt57539;
+    static public int staticInt57540;
+    static public int staticInt57541;
+    static public int staticInt57542;
+    static public int staticInt57543;
+    static public int staticInt57544;
+    static public int staticInt57545;
+    static public int staticInt57546;
+    static public int staticInt57547;
+    static public int staticInt57548;
+    static public int staticInt57549;
+    static public int staticInt57550;
+    static public int staticInt57551;
+    static public int staticInt57552;
+    static public int staticInt57553;
+    static public int staticInt57554;
+    static public int staticInt57555;
+    static public int staticInt57556;
+    static public int staticInt57557;
+    static public int staticInt57558;
+    static public int staticInt57559;
+    static public int staticInt57560;
+    static public int staticInt57561;
+    static public int staticInt57562;
+    static public int staticInt57563;
+    static public int staticInt57564;
+    static public int staticInt57565;
+    static public int staticInt57566;
+    static public int staticInt57567;
+    static public int staticInt57568;
+    static public int staticInt57569;
+    static public int staticInt57570;
+    static public int staticInt57571;
+    static public int staticInt57572;
+    static public int staticInt57573;
+    static public int staticInt57574;
+    static public int staticInt57575;
+    static public int staticInt57576;
+    static public int staticInt57577;
+    static public int staticInt57578;
+    static public int staticInt57579;
+    static public int staticInt57580;
+    static public int staticInt57581;
+    static public int staticInt57582;
+    static public int staticInt57583;
+    static public int staticInt57584;
+    static public int staticInt57585;
+    static public int staticInt57586;
+    static public int staticInt57587;
+    static public int staticInt57588;
+    static public int staticInt57589;
+    static public int staticInt57590;
+    static public int staticInt57591;
+    static public int staticInt57592;
+    static public int staticInt57593;
+    static public int staticInt57594;
+    static public int staticInt57595;
+    static public int staticInt57596;
+    static public int staticInt57597;
+    static public int staticInt57598;
+    static public int staticInt57599;
+    static public int staticInt57600;
+    static public int staticInt57601;
+    static public int staticInt57602;
+    static public int staticInt57603;
+    static public int staticInt57604;
+    static public int staticInt57605;
+    static public int staticInt57606;
+    static public int staticInt57607;
+    static public int staticInt57608;
+    static public int staticInt57609;
+    static public int staticInt57610;
+    static public int staticInt57611;
+    static public int staticInt57612;
+    static public int staticInt57613;
+    static public int staticInt57614;
+    static public int staticInt57615;
+    static public int staticInt57616;
+    static public int staticInt57617;
+    static public int staticInt57618;
+    static public int staticInt57619;
+    static public int staticInt57620;
+    static public int staticInt57621;
+    static public int staticInt57622;
+    static public int staticInt57623;
+    static public int staticInt57624;
+    static public int staticInt57625;
+    static public int staticInt57626;
+    static public int staticInt57627;
+    static public int staticInt57628;
+    static public int staticInt57629;
+    static public int staticInt57630;
+    static public int staticInt57631;
+    static public int staticInt57632;
+    static public int staticInt57633;
+    static public int staticInt57634;
+    static public int staticInt57635;
+    static public int staticInt57636;
+    static public int staticInt57637;
+    static public int staticInt57638;
+    static public int staticInt57639;
+    static public int staticInt57640;
+    static public int staticInt57641;
+    static public int staticInt57642;
+    static public int staticInt57643;
+    static public int staticInt57644;
+    static public int staticInt57645;
+    static public int staticInt57646;
+    static public int staticInt57647;
+    static public int staticInt57648;
+    static public int staticInt57649;
+    static public int staticInt57650;
+    static public int staticInt57651;
+    static public int staticInt57652;
+    static public int staticInt57653;
+    static public int staticInt57654;
+    static public int staticInt57655;
+    static public int staticInt57656;
+    static public int staticInt57657;
+    static public int staticInt57658;
+    static public int staticInt57659;
+    static public int staticInt57660;
+    static public int staticInt57661;
+    static public int staticInt57662;
+    static public int staticInt57663;
+    static public int staticInt57664;
+    static public int staticInt57665;
+    static public int staticInt57666;
+    static public int staticInt57667;
+    static public int staticInt57668;
+    static public int staticInt57669;
+    static public int staticInt57670;
+    static public int staticInt57671;
+    static public int staticInt57672;
+    static public int staticInt57673;
+    static public int staticInt57674;
+    static public int staticInt57675;
+    static public int staticInt57676;
+    static public int staticInt57677;
+    static public int staticInt57678;
+    static public int staticInt57679;
+    static public int staticInt57680;
+    static public int staticInt57681;
+    static public int staticInt57682;
+    static public int staticInt57683;
+    static public int staticInt57684;
+    static public int staticInt57685;
+    static public int staticInt57686;
+    static public int staticInt57687;
+    static public int staticInt57688;
+    static public int staticInt57689;
+    static public int staticInt57690;
+    static public int staticInt57691;
+    static public int staticInt57692;
+    static public int staticInt57693;
+    static public int staticInt57694;
+    static public int staticInt57695;
+    static public int staticInt57696;
+    static public int staticInt57697;
+    static public int staticInt57698;
+    static public int staticInt57699;
+    static public int staticInt57700;
+    static public int staticInt57701;
+    static public int staticInt57702;
+    static public int staticInt57703;
+    static public int staticInt57704;
+    static public int staticInt57705;
+    static public int staticInt57706;
+    static public int staticInt57707;
+    static public int staticInt57708;
+    static public int staticInt57709;
+    static public int staticInt57710;
+    static public int staticInt57711;
+    static public int staticInt57712;
+    static public int staticInt57713;
+    static public int staticInt57714;
+    static public int staticInt57715;
+    static public int staticInt57716;
+    static public int staticInt57717;
+    static public int staticInt57718;
+    static public int staticInt57719;
+    static public int staticInt57720;
+    static public int staticInt57721;
+    static public int staticInt57722;
+    static public int staticInt57723;
+    static public int staticInt57724;
+    static public int staticInt57725;
+    static public int staticInt57726;
+    static public int staticInt57727;
+    static public int staticInt57728;
+    static public int staticInt57729;
+    static public int staticInt57730;
+    static public int staticInt57731;
+    static public int staticInt57732;
+    static public int staticInt57733;
+    static public int staticInt57734;
+    static public int staticInt57735;
+    static public int staticInt57736;
+    static public int staticInt57737;
+    static public int staticInt57738;
+    static public int staticInt57739;
+    static public int staticInt57740;
+    static public int staticInt57741;
+    static public int staticInt57742;
+    static public int staticInt57743;
+    static public int staticInt57744;
+    static public int staticInt57745;
+    static public int staticInt57746;
+    static public int staticInt57747;
+    static public int staticInt57748;
+    static public int staticInt57749;
+    static public int staticInt57750;
+    static public int staticInt57751;
+    static public int staticInt57752;
+    static public int staticInt57753;
+    static public int staticInt57754;
+    static public int staticInt57755;
+    static public int staticInt57756;
+    static public int staticInt57757;
+    static public int staticInt57758;
+    static public int staticInt57759;
+    static public int staticInt57760;
+    static public int staticInt57761;
+    static public int staticInt57762;
+    static public int staticInt57763;
+    static public int staticInt57764;
+    static public int staticInt57765;
+    static public int staticInt57766;
+    static public int staticInt57767;
+    static public int staticInt57768;
+    static public int staticInt57769;
+    static public int staticInt57770;
+    static public int staticInt57771;
+    static public int staticInt57772;
+    static public int staticInt57773;
+    static public int staticInt57774;
+    static public int staticInt57775;
+    static public int staticInt57776;
+    static public int staticInt57777;
+    static public int staticInt57778;
+    static public int staticInt57779;
+    static public int staticInt57780;
+    static public int staticInt57781;
+    static public int staticInt57782;
+    static public int staticInt57783;
+    static public int staticInt57784;
+    static public int staticInt57785;
+    static public int staticInt57786;
+    static public int staticInt57787;
+    static public int staticInt57788;
+    static public int staticInt57789;
+    static public int staticInt57790;
+    static public int staticInt57791;
+    static public int staticInt57792;
+    static public int staticInt57793;
+    static public int staticInt57794;
+    static public int staticInt57795;
+    static public int staticInt57796;
+    static public int staticInt57797;
+    static public int staticInt57798;
+    static public int staticInt57799;
+    static public int staticInt57800;
+    static public int staticInt57801;
+    static public int staticInt57802;
+    static public int staticInt57803;
+    static public int staticInt57804;
+    static public int staticInt57805;
+    static public int staticInt57806;
+    static public int staticInt57807;
+    static public int staticInt57808;
+    static public int staticInt57809;
+    static public int staticInt57810;
+    static public int staticInt57811;
+    static public int staticInt57812;
+    static public int staticInt57813;
+    static public int staticInt57814;
+    static public int staticInt57815;
+    static public int staticInt57816;
+    static public int staticInt57817;
+    static public int staticInt57818;
+    static public int staticInt57819;
+    static public int staticInt57820;
+    static public int staticInt57821;
+    static public int staticInt57822;
+    static public int staticInt57823;
+    static public int staticInt57824;
+    static public int staticInt57825;
+    static public int staticInt57826;
+    static public int staticInt57827;
+    static public int staticInt57828;
+    static public int staticInt57829;
+    static public int staticInt57830;
+    static public int staticInt57831;
+    static public int staticInt57832;
+    static public int staticInt57833;
+    static public int staticInt57834;
+    static public int staticInt57835;
+    static public int staticInt57836;
+    static public int staticInt57837;
+    static public int staticInt57838;
+    static public int staticInt57839;
+    static public int staticInt57840;
+    static public int staticInt57841;
+    static public int staticInt57842;
+    static public int staticInt57843;
+    static public int staticInt57844;
+    static public int staticInt57845;
+    static public int staticInt57846;
+    static public int staticInt57847;
+    static public int staticInt57848;
+    static public int staticInt57849;
+    static public int staticInt57850;
+    static public int staticInt57851;
+    static public int staticInt57852;
+    static public int staticInt57853;
+    static public int staticInt57854;
+    static public int staticInt57855;
+    static public int staticInt57856;
+    static public int staticInt57857;
+    static public int staticInt57858;
+    static public int staticInt57859;
+    static public int staticInt57860;
+    static public int staticInt57861;
+    static public int staticInt57862;
+    static public int staticInt57863;
+    static public int staticInt57864;
+    static public int staticInt57865;
+    static public int staticInt57866;
+    static public int staticInt57867;
+    static public int staticInt57868;
+    static public int staticInt57869;
+    static public int staticInt57870;
+    static public int staticInt57871;
+    static public int staticInt57872;
+    static public int staticInt57873;
+    static public int staticInt57874;
+    static public int staticInt57875;
+    static public int staticInt57876;
+    static public int staticInt57877;
+    static public int staticInt57878;
+    static public int staticInt57879;
+    static public int staticInt57880;
+    static public int staticInt57881;
+    static public int staticInt57882;
+    static public int staticInt57883;
+    static public int staticInt57884;
+    static public int staticInt57885;
+    static public int staticInt57886;
+    static public int staticInt57887;
+    static public int staticInt57888;
+    static public int staticInt57889;
+    static public int staticInt57890;
+    static public int staticInt57891;
+    static public int staticInt57892;
+    static public int staticInt57893;
+    static public int staticInt57894;
+    static public int staticInt57895;
+    static public int staticInt57896;
+    static public int staticInt57897;
+    static public int staticInt57898;
+    static public int staticInt57899;
+    static public int staticInt57900;
+    static public int staticInt57901;
+    static public int staticInt57902;
+    static public int staticInt57903;
+    static public int staticInt57904;
+    static public int staticInt57905;
+    static public int staticInt57906;
+    static public int staticInt57907;
+    static public int staticInt57908;
+    static public int staticInt57909;
+    static public int staticInt57910;
+    static public int staticInt57911;
+    static public int staticInt57912;
+    static public int staticInt57913;
+    static public int staticInt57914;
+    static public int staticInt57915;
+    static public int staticInt57916;
+    static public int staticInt57917;
+    static public int staticInt57918;
+    static public int staticInt57919;
+    static public int staticInt57920;
+    static public int staticInt57921;
+    static public int staticInt57922;
+    static public int staticInt57923;
+    static public int staticInt57924;
+    static public int staticInt57925;
+    static public int staticInt57926;
+    static public int staticInt57927;
+    static public int staticInt57928;
+    static public int staticInt57929;
+    static public int staticInt57930;
+    static public int staticInt57931;
+    static public int staticInt57932;
+    static public int staticInt57933;
+    static public int staticInt57934;
+    static public int staticInt57935;
+    static public int staticInt57936;
+    static public int staticInt57937;
+    static public int staticInt57938;
+    static public int staticInt57939;
+    static public int staticInt57940;
+    static public int staticInt57941;
+    static public int staticInt57942;
+    static public int staticInt57943;
+    static public int staticInt57944;
+    static public int staticInt57945;
+    static public int staticInt57946;
+    static public int staticInt57947;
+    static public int staticInt57948;
+    static public int staticInt57949;
+    static public int staticInt57950;
+    static public int staticInt57951;
+    static public int staticInt57952;
+    static public int staticInt57953;
+    static public int staticInt57954;
+    static public int staticInt57955;
+    static public int staticInt57956;
+    static public int staticInt57957;
+    static public int staticInt57958;
+    static public int staticInt57959;
+    static public int staticInt57960;
+    static public int staticInt57961;
+    static public int staticInt57962;
+    static public int staticInt57963;
+    static public int staticInt57964;
+    static public int staticInt57965;
+    static public int staticInt57966;
+    static public int staticInt57967;
+    static public int staticInt57968;
+    static public int staticInt57969;
+    static public int staticInt57970;
+    static public int staticInt57971;
+    static public int staticInt57972;
+    static public int staticInt57973;
+    static public int staticInt57974;
+    static public int staticInt57975;
+    static public int staticInt57976;
+    static public int staticInt57977;
+    static public int staticInt57978;
+    static public int staticInt57979;
+    static public int staticInt57980;
+    static public int staticInt57981;
+    static public int staticInt57982;
+    static public int staticInt57983;
+    static public int staticInt57984;
+    static public int staticInt57985;
+    static public int staticInt57986;
+    static public int staticInt57987;
+    static public int staticInt57988;
+    static public int staticInt57989;
+    static public int staticInt57990;
+    static public int staticInt57991;
+    static public int staticInt57992;
+    static public int staticInt57993;
+    static public int staticInt57994;
+    static public int staticInt57995;
+    static public int staticInt57996;
+    static public int staticInt57997;
+    static public int staticInt57998;
+    static public int staticInt57999;
+    static public int staticInt58000;
+    static public int staticInt58001;
+    static public int staticInt58002;
+    static public int staticInt58003;
+    static public int staticInt58004;
+    static public int staticInt58005;
+    static public int staticInt58006;
+    static public int staticInt58007;
+    static public int staticInt58008;
+    static public int staticInt58009;
+    static public int staticInt58010;
+    static public int staticInt58011;
+    static public int staticInt58012;
+    static public int staticInt58013;
+    static public int staticInt58014;
+    static public int staticInt58015;
+    static public int staticInt58016;
+    static public int staticInt58017;
+    static public int staticInt58018;
+    static public int staticInt58019;
+    static public int staticInt58020;
+    static public int staticInt58021;
+    static public int staticInt58022;
+    static public int staticInt58023;
+    static public int staticInt58024;
+    static public int staticInt58025;
+    static public int staticInt58026;
+    static public int staticInt58027;
+    static public int staticInt58028;
+    static public int staticInt58029;
+    static public int staticInt58030;
+    static public int staticInt58031;
+    static public int staticInt58032;
+    static public int staticInt58033;
+    static public int staticInt58034;
+    static public int staticInt58035;
+    static public int staticInt58036;
+    static public int staticInt58037;
+    static public int staticInt58038;
+    static public int staticInt58039;
+    static public int staticInt58040;
+    static public int staticInt58041;
+    static public int staticInt58042;
+    static public int staticInt58043;
+    static public int staticInt58044;
+    static public int staticInt58045;
+    static public int staticInt58046;
+    static public int staticInt58047;
+    static public int staticInt58048;
+    static public int staticInt58049;
+    static public int staticInt58050;
+    static public int staticInt58051;
+    static public int staticInt58052;
+    static public int staticInt58053;
+    static public int staticInt58054;
+    static public int staticInt58055;
+    static public int staticInt58056;
+    static public int staticInt58057;
+    static public int staticInt58058;
+    static public int staticInt58059;
+    static public int staticInt58060;
+    static public int staticInt58061;
+    static public int staticInt58062;
+    static public int staticInt58063;
+    static public int staticInt58064;
+    static public int staticInt58065;
+    static public int staticInt58066;
+    static public int staticInt58067;
+    static public int staticInt58068;
+    static public int staticInt58069;
+    static public int staticInt58070;
+    static public int staticInt58071;
+    static public int staticInt58072;
+    static public int staticInt58073;
+    static public int staticInt58074;
+    static public int staticInt58075;
+    static public int staticInt58076;
+    static public int staticInt58077;
+    static public int staticInt58078;
+    static public int staticInt58079;
+    static public int staticInt58080;
+    static public int staticInt58081;
+    static public int staticInt58082;
+    static public int staticInt58083;
+    static public int staticInt58084;
+    static public int staticInt58085;
+    static public int staticInt58086;
+    static public int staticInt58087;
+    static public int staticInt58088;
+    static public int staticInt58089;
+    static public int staticInt58090;
+    static public int staticInt58091;
+    static public int staticInt58092;
+    static public int staticInt58093;
+    static public int staticInt58094;
+    static public int staticInt58095;
+    static public int staticInt58096;
+    static public int staticInt58097;
+    static public int staticInt58098;
+    static public int staticInt58099;
+    static public int staticInt58100;
+    static public int staticInt58101;
+    static public int staticInt58102;
+    static public int staticInt58103;
+    static public int staticInt58104;
+    static public int staticInt58105;
+    static public int staticInt58106;
+    static public int staticInt58107;
+    static public int staticInt58108;
+    static public int staticInt58109;
+    static public int staticInt58110;
+    static public int staticInt58111;
+    static public int staticInt58112;
+    static public int staticInt58113;
+    static public int staticInt58114;
+    static public int staticInt58115;
+    static public int staticInt58116;
+    static public int staticInt58117;
+    static public int staticInt58118;
+    static public int staticInt58119;
+    static public int staticInt58120;
+    static public int staticInt58121;
+    static public int staticInt58122;
+    static public int staticInt58123;
+    static public int staticInt58124;
+    static public int staticInt58125;
+    static public int staticInt58126;
+    static public int staticInt58127;
+    static public int staticInt58128;
+    static public int staticInt58129;
+    static public int staticInt58130;
+    static public int staticInt58131;
+    static public int staticInt58132;
+    static public int staticInt58133;
+    static public int staticInt58134;
+    static public int staticInt58135;
+    static public int staticInt58136;
+    static public int staticInt58137;
+    static public int staticInt58138;
+    static public int staticInt58139;
+    static public int staticInt58140;
+    static public int staticInt58141;
+    static public int staticInt58142;
+    static public int staticInt58143;
+    static public int staticInt58144;
+    static public int staticInt58145;
+    static public int staticInt58146;
+    static public int staticInt58147;
+    static public int staticInt58148;
+    static public int staticInt58149;
+    static public int staticInt58150;
+    static public int staticInt58151;
+    static public int staticInt58152;
+    static public int staticInt58153;
+    static public int staticInt58154;
+    static public int staticInt58155;
+    static public int staticInt58156;
+    static public int staticInt58157;
+    static public int staticInt58158;
+    static public int staticInt58159;
+    static public int staticInt58160;
+    static public int staticInt58161;
+    static public int staticInt58162;
+    static public int staticInt58163;
+    static public int staticInt58164;
+    static public int staticInt58165;
+    static public int staticInt58166;
+    static public int staticInt58167;
+    static public int staticInt58168;
+    static public int staticInt58169;
+    static public int staticInt58170;
+    static public int staticInt58171;
+    static public int staticInt58172;
+    static public int staticInt58173;
+    static public int staticInt58174;
+    static public int staticInt58175;
+    static public int staticInt58176;
+    static public int staticInt58177;
+    static public int staticInt58178;
+    static public int staticInt58179;
+    static public int staticInt58180;
+    static public int staticInt58181;
+    static public int staticInt58182;
+    static public int staticInt58183;
+    static public int staticInt58184;
+    static public int staticInt58185;
+    static public int staticInt58186;
+    static public int staticInt58187;
+    static public int staticInt58188;
+    static public int staticInt58189;
+    static public int staticInt58190;
+    static public int staticInt58191;
+    static public int staticInt58192;
+    static public int staticInt58193;
+    static public int staticInt58194;
+    static public int staticInt58195;
+    static public int staticInt58196;
+    static public int staticInt58197;
+    static public int staticInt58198;
+    static public int staticInt58199;
+    static public int staticInt58200;
+    static public int staticInt58201;
+    static public int staticInt58202;
+    static public int staticInt58203;
+    static public int staticInt58204;
+    static public int staticInt58205;
+    static public int staticInt58206;
+    static public int staticInt58207;
+    static public int staticInt58208;
+    static public int staticInt58209;
+    static public int staticInt58210;
+    static public int staticInt58211;
+    static public int staticInt58212;
+    static public int staticInt58213;
+    static public int staticInt58214;
+    static public int staticInt58215;
+    static public int staticInt58216;
+    static public int staticInt58217;
+    static public int staticInt58218;
+    static public int staticInt58219;
+    static public int staticInt58220;
+    static public int staticInt58221;
+    static public int staticInt58222;
+    static public int staticInt58223;
+    static public int staticInt58224;
+    static public int staticInt58225;
+    static public int staticInt58226;
+    static public int staticInt58227;
+    static public int staticInt58228;
+    static public int staticInt58229;
+    static public int staticInt58230;
+    static public int staticInt58231;
+    static public int staticInt58232;
+    static public int staticInt58233;
+    static public int staticInt58234;
+    static public int staticInt58235;
+    static public int staticInt58236;
+    static public int staticInt58237;
+    static public int staticInt58238;
+    static public int staticInt58239;
+    static public int staticInt58240;
+    static public int staticInt58241;
+    static public int staticInt58242;
+    static public int staticInt58243;
+    static public int staticInt58244;
+    static public int staticInt58245;
+    static public int staticInt58246;
+    static public int staticInt58247;
+    static public int staticInt58248;
+    static public int staticInt58249;
+    static public int staticInt58250;
+    static public int staticInt58251;
+    static public int staticInt58252;
+    static public int staticInt58253;
+    static public int staticInt58254;
+    static public int staticInt58255;
+    static public int staticInt58256;
+    static public int staticInt58257;
+    static public int staticInt58258;
+    static public int staticInt58259;
+    static public int staticInt58260;
+    static public int staticInt58261;
+    static public int staticInt58262;
+    static public int staticInt58263;
+    static public int staticInt58264;
+    static public int staticInt58265;
+    static public int staticInt58266;
+    static public int staticInt58267;
+    static public int staticInt58268;
+    static public int staticInt58269;
+    static public int staticInt58270;
+    static public int staticInt58271;
+    static public int staticInt58272;
+    static public int staticInt58273;
+    static public int staticInt58274;
+    static public int staticInt58275;
+    static public int staticInt58276;
+    static public int staticInt58277;
+    static public int staticInt58278;
+    static public int staticInt58279;
+    static public int staticInt58280;
+    static public int staticInt58281;
+    static public int staticInt58282;
+    static public int staticInt58283;
+    static public int staticInt58284;
+    static public int staticInt58285;
+    static public int staticInt58286;
+    static public int staticInt58287;
+    static public int staticInt58288;
+    static public int staticInt58289;
+    static public int staticInt58290;
+    static public int staticInt58291;
+    static public int staticInt58292;
+    static public int staticInt58293;
+    static public int staticInt58294;
+    static public int staticInt58295;
+    static public int staticInt58296;
+    static public int staticInt58297;
+    static public int staticInt58298;
+    static public int staticInt58299;
+    static public int staticInt58300;
+    static public int staticInt58301;
+    static public int staticInt58302;
+    static public int staticInt58303;
+    static public int staticInt58304;
+    static public int staticInt58305;
+    static public int staticInt58306;
+    static public int staticInt58307;
+    static public int staticInt58308;
+    static public int staticInt58309;
+    static public int staticInt58310;
+    static public int staticInt58311;
+    static public int staticInt58312;
+    static public int staticInt58313;
+    static public int staticInt58314;
+    static public int staticInt58315;
+    static public int staticInt58316;
+    static public int staticInt58317;
+    static public int staticInt58318;
+    static public int staticInt58319;
+    static public int staticInt58320;
+    static public int staticInt58321;
+    static public int staticInt58322;
+    static public int staticInt58323;
+    static public int staticInt58324;
+    static public int staticInt58325;
+    static public int staticInt58326;
+    static public int staticInt58327;
+    static public int staticInt58328;
+    static public int staticInt58329;
+    static public int staticInt58330;
+    static public int staticInt58331;
+    static public int staticInt58332;
+    static public int staticInt58333;
+    static public int staticInt58334;
+    static public int staticInt58335;
+    static public int staticInt58336;
+    static public int staticInt58337;
+    static public int staticInt58338;
+    static public int staticInt58339;
+    static public int staticInt58340;
+    static public int staticInt58341;
+    static public int staticInt58342;
+    static public int staticInt58343;
+    static public int staticInt58344;
+    static public int staticInt58345;
+    static public int staticInt58346;
+    static public int staticInt58347;
+    static public int staticInt58348;
+    static public int staticInt58349;
+    static public int staticInt58350;
+    static public int staticInt58351;
+    static public int staticInt58352;
+    static public int staticInt58353;
+    static public int staticInt58354;
+    static public int staticInt58355;
+    static public int staticInt58356;
+    static public int staticInt58357;
+    static public int staticInt58358;
+    static public int staticInt58359;
+    static public int staticInt58360;
+    static public int staticInt58361;
+    static public int staticInt58362;
+    static public int staticInt58363;
+    static public int staticInt58364;
+    static public int staticInt58365;
+    static public int staticInt58366;
+    static public int staticInt58367;
+    static public int staticInt58368;
+    static public int staticInt58369;
+    static public int staticInt58370;
+    static public int staticInt58371;
+    static public int staticInt58372;
+    static public int staticInt58373;
+    static public int staticInt58374;
+    static public int staticInt58375;
+    static public int staticInt58376;
+    static public int staticInt58377;
+    static public int staticInt58378;
+    static public int staticInt58379;
+    static public int staticInt58380;
+    static public int staticInt58381;
+    static public int staticInt58382;
+    static public int staticInt58383;
+    static public int staticInt58384;
+    static public int staticInt58385;
+    static public int staticInt58386;
+    static public int staticInt58387;
+    static public int staticInt58388;
+    static public int staticInt58389;
+    static public int staticInt58390;
+    static public int staticInt58391;
+    static public int staticInt58392;
+    static public int staticInt58393;
+    static public int staticInt58394;
+    static public int staticInt58395;
+    static public int staticInt58396;
+    static public int staticInt58397;
+    static public int staticInt58398;
+    static public int staticInt58399;
+    static public int staticInt58400;
+    static public int staticInt58401;
+    static public int staticInt58402;
+    static public int staticInt58403;
+    static public int staticInt58404;
+    static public int staticInt58405;
+    static public int staticInt58406;
+    static public int staticInt58407;
+    static public int staticInt58408;
+    static public int staticInt58409;
+    static public int staticInt58410;
+    static public int staticInt58411;
+    static public int staticInt58412;
+    static public int staticInt58413;
+    static public int staticInt58414;
+    static public int staticInt58415;
+    static public int staticInt58416;
+    static public int staticInt58417;
+    static public int staticInt58418;
+    static public int staticInt58419;
+    static public int staticInt58420;
+    static public int staticInt58421;
+    static public int staticInt58422;
+    static public int staticInt58423;
+    static public int staticInt58424;
+    static public int staticInt58425;
+    static public int staticInt58426;
+    static public int staticInt58427;
+    static public int staticInt58428;
+    static public int staticInt58429;
+    static public int staticInt58430;
+    static public int staticInt58431;
+    static public int staticInt58432;
+    static public int staticInt58433;
+    static public int staticInt58434;
+    static public int staticInt58435;
+    static public int staticInt58436;
+    static public int staticInt58437;
+    static public int staticInt58438;
+    static public int staticInt58439;
+    static public int staticInt58440;
+    static public int staticInt58441;
+    static public int staticInt58442;
+    static public int staticInt58443;
+    static public int staticInt58444;
+    static public int staticInt58445;
+    static public int staticInt58446;
+    static public int staticInt58447;
+    static public int staticInt58448;
+    static public int staticInt58449;
+    static public int staticInt58450;
+    static public int staticInt58451;
+    static public int staticInt58452;
+    static public int staticInt58453;
+    static public int staticInt58454;
+    static public int staticInt58455;
+    static public int staticInt58456;
+    static public int staticInt58457;
+    static public int staticInt58458;
+    static public int staticInt58459;
+    static public int staticInt58460;
+    static public int staticInt58461;
+    static public int staticInt58462;
+    static public int staticInt58463;
+    static public int staticInt58464;
+    static public int staticInt58465;
+    static public int staticInt58466;
+    static public int staticInt58467;
+    static public int staticInt58468;
+    static public int staticInt58469;
+    static public int staticInt58470;
+    static public int staticInt58471;
+    static public int staticInt58472;
+    static public int staticInt58473;
+    static public int staticInt58474;
+    static public int staticInt58475;
+    static public int staticInt58476;
+    static public int staticInt58477;
+    static public int staticInt58478;
+    static public int staticInt58479;
+    static public int staticInt58480;
+    static public int staticInt58481;
+    static public int staticInt58482;
+    static public int staticInt58483;
+    static public int staticInt58484;
+    static public int staticInt58485;
+    static public int staticInt58486;
+    static public int staticInt58487;
+    static public int staticInt58488;
+    static public int staticInt58489;
+    static public int staticInt58490;
+    static public int staticInt58491;
+    static public int staticInt58492;
+    static public int staticInt58493;
+    static public int staticInt58494;
+    static public int staticInt58495;
+    static public int staticInt58496;
+    static public int staticInt58497;
+    static public int staticInt58498;
+    static public int staticInt58499;
+    static public int staticInt58500;
+    static public int staticInt58501;
+    static public int staticInt58502;
+    static public int staticInt58503;
+    static public int staticInt58504;
+    static public int staticInt58505;
+    static public int staticInt58506;
+    static public int staticInt58507;
+    static public int staticInt58508;
+    static public int staticInt58509;
+    static public int staticInt58510;
+    static public int staticInt58511;
+    static public int staticInt58512;
+    static public int staticInt58513;
+    static public int staticInt58514;
+    static public int staticInt58515;
+    static public int staticInt58516;
+    static public int staticInt58517;
+    static public int staticInt58518;
+    static public int staticInt58519;
+    static public int staticInt58520;
+    static public int staticInt58521;
+    static public int staticInt58522;
+    static public int staticInt58523;
+    static public int staticInt58524;
+    static public int staticInt58525;
+    static public int staticInt58526;
+    static public int staticInt58527;
+    static public int staticInt58528;
+    static public int staticInt58529;
+    static public int staticInt58530;
+    static public int staticInt58531;
+    static public int staticInt58532;
+    static public int staticInt58533;
+    static public int staticInt58534;
+    static public int staticInt58535;
+    static public int staticInt58536;
+    static public int staticInt58537;
+    static public int staticInt58538;
+    static public int staticInt58539;
+    static public int staticInt58540;
+    static public int staticInt58541;
+    static public int staticInt58542;
+    static public int staticInt58543;
+    static public int staticInt58544;
+    static public int staticInt58545;
+    static public int staticInt58546;
+    static public int staticInt58547;
+    static public int staticInt58548;
+    static public int staticInt58549;
+    static public int staticInt58550;
+    static public int staticInt58551;
+    static public int staticInt58552;
+    static public int staticInt58553;
+    static public int staticInt58554;
+    static public int staticInt58555;
+    static public int staticInt58556;
+    static public int staticInt58557;
+    static public int staticInt58558;
+    static public int staticInt58559;
+    static public int staticInt58560;
+    static public int staticInt58561;
+    static public int staticInt58562;
+    static public int staticInt58563;
+    static public int staticInt58564;
+    static public int staticInt58565;
+    static public int staticInt58566;
+    static public int staticInt58567;
+    static public int staticInt58568;
+    static public int staticInt58569;
+    static public int staticInt58570;
+    static public int staticInt58571;
+    static public int staticInt58572;
+    static public int staticInt58573;
+    static public int staticInt58574;
+    static public int staticInt58575;
+    static public int staticInt58576;
+    static public int staticInt58577;
+    static public int staticInt58578;
+    static public int staticInt58579;
+    static public int staticInt58580;
+    static public int staticInt58581;
+    static public int staticInt58582;
+    static public int staticInt58583;
+    static public int staticInt58584;
+    static public int staticInt58585;
+    static public int staticInt58586;
+    static public int staticInt58587;
+    static public int staticInt58588;
+    static public int staticInt58589;
+    static public int staticInt58590;
+    static public int staticInt58591;
+    static public int staticInt58592;
+    static public int staticInt58593;
+    static public int staticInt58594;
+    static public int staticInt58595;
+    static public int staticInt58596;
+    static public int staticInt58597;
+    static public int staticInt58598;
+    static public int staticInt58599;
+    static public int staticInt58600;
+    static public int staticInt58601;
+    static public int staticInt58602;
+    static public int staticInt58603;
+    static public int staticInt58604;
+    static public int staticInt58605;
+    static public int staticInt58606;
+    static public int staticInt58607;
+    static public int staticInt58608;
+    static public int staticInt58609;
+    static public int staticInt58610;
+    static public int staticInt58611;
+    static public int staticInt58612;
+    static public int staticInt58613;
+    static public int staticInt58614;
+    static public int staticInt58615;
+    static public int staticInt58616;
+    static public int staticInt58617;
+    static public int staticInt58618;
+    static public int staticInt58619;
+    static public int staticInt58620;
+    static public int staticInt58621;
+    static public int staticInt58622;
+    static public int staticInt58623;
+    static public int staticInt58624;
+    static public int staticInt58625;
+    static public int staticInt58626;
+    static public int staticInt58627;
+    static public int staticInt58628;
+    static public int staticInt58629;
+    static public int staticInt58630;
+    static public int staticInt58631;
+    static public int staticInt58632;
+    static public int staticInt58633;
+    static public int staticInt58634;
+    static public int staticInt58635;
+    static public int staticInt58636;
+    static public int staticInt58637;
+    static public int staticInt58638;
+    static public int staticInt58639;
+    static public int staticInt58640;
+    static public int staticInt58641;
+    static public int staticInt58642;
+    static public int staticInt58643;
+    static public int staticInt58644;
+    static public int staticInt58645;
+    static public int staticInt58646;
+    static public int staticInt58647;
+    static public int staticInt58648;
+    static public int staticInt58649;
+    static public int staticInt58650;
+    static public int staticInt58651;
+    static public int staticInt58652;
+    static public int staticInt58653;
+    static public int staticInt58654;
+    static public int staticInt58655;
+    static public int staticInt58656;
+    static public int staticInt58657;
+    static public int staticInt58658;
+    static public int staticInt58659;
+    static public int staticInt58660;
+    static public int staticInt58661;
+    static public int staticInt58662;
+    static public int staticInt58663;
+    static public int staticInt58664;
+    static public int staticInt58665;
+    static public int staticInt58666;
+    static public int staticInt58667;
+    static public int staticInt58668;
+    static public int staticInt58669;
+    static public int staticInt58670;
+    static public int staticInt58671;
+    static public int staticInt58672;
+    static public int staticInt58673;
+    static public int staticInt58674;
+    static public int staticInt58675;
+    static public int staticInt58676;
+    static public int staticInt58677;
+    static public int staticInt58678;
+    static public int staticInt58679;
+    static public int staticInt58680;
+    static public int staticInt58681;
+    static public int staticInt58682;
+    static public int staticInt58683;
+    static public int staticInt58684;
+    static public int staticInt58685;
+    static public int staticInt58686;
+    static public int staticInt58687;
+    static public int staticInt58688;
+    static public int staticInt58689;
+    static public int staticInt58690;
+    static public int staticInt58691;
+    static public int staticInt58692;
+    static public int staticInt58693;
+    static public int staticInt58694;
+    static public int staticInt58695;
+    static public int staticInt58696;
+    static public int staticInt58697;
+    static public int staticInt58698;
+    static public int staticInt58699;
+    static public int staticInt58700;
+    static public int staticInt58701;
+    static public int staticInt58702;
+    static public int staticInt58703;
+    static public int staticInt58704;
+    static public int staticInt58705;
+    static public int staticInt58706;
+    static public int staticInt58707;
+    static public int staticInt58708;
+    static public int staticInt58709;
+    static public int staticInt58710;
+    static public int staticInt58711;
+    static public int staticInt58712;
+    static public int staticInt58713;
+    static public int staticInt58714;
+    static public int staticInt58715;
+    static public int staticInt58716;
+    static public int staticInt58717;
+    static public int staticInt58718;
+    static public int staticInt58719;
+    static public int staticInt58720;
+    static public int staticInt58721;
+    static public int staticInt58722;
+    static public int staticInt58723;
+    static public int staticInt58724;
+    static public int staticInt58725;
+    static public int staticInt58726;
+    static public int staticInt58727;
+    static public int staticInt58728;
+    static public int staticInt58729;
+    static public int staticInt58730;
+    static public int staticInt58731;
+    static public int staticInt58732;
+    static public int staticInt58733;
+    static public int staticInt58734;
+    static public int staticInt58735;
+    static public int staticInt58736;
+    static public int staticInt58737;
+    static public int staticInt58738;
+    static public int staticInt58739;
+    static public int staticInt58740;
+    static public int staticInt58741;
+    static public int staticInt58742;
+    static public int staticInt58743;
+    static public int staticInt58744;
+    static public int staticInt58745;
+    static public int staticInt58746;
+    static public int staticInt58747;
+    static public int staticInt58748;
+    static public int staticInt58749;
+    static public int staticInt58750;
+    static public int staticInt58751;
+    static public int staticInt58752;
+    static public int staticInt58753;
+    static public int staticInt58754;
+    static public int staticInt58755;
+    static public int staticInt58756;
+    static public int staticInt58757;
+    static public int staticInt58758;
+    static public int staticInt58759;
+    static public int staticInt58760;
+    static public int staticInt58761;
+    static public int staticInt58762;
+    static public int staticInt58763;
+    static public int staticInt58764;
+    static public int staticInt58765;
+    static public int staticInt58766;
+    static public int staticInt58767;
+    static public int staticInt58768;
+    static public int staticInt58769;
+    static public int staticInt58770;
+    static public int staticInt58771;
+    static public int staticInt58772;
+    static public int staticInt58773;
+    static public int staticInt58774;
+    static public int staticInt58775;
+    static public int staticInt58776;
+    static public int staticInt58777;
+    static public int staticInt58778;
+    static public int staticInt58779;
+    static public int staticInt58780;
+    static public int staticInt58781;
+    static public int staticInt58782;
+    static public int staticInt58783;
+    static public int staticInt58784;
+    static public int staticInt58785;
+    static public int staticInt58786;
+    static public int staticInt58787;
+    static public int staticInt58788;
+    static public int staticInt58789;
+    static public int staticInt58790;
+    static public int staticInt58791;
+    static public int staticInt58792;
+    static public int staticInt58793;
+    static public int staticInt58794;
+    static public int staticInt58795;
+    static public int staticInt58796;
+    static public int staticInt58797;
+    static public int staticInt58798;
+    static public int staticInt58799;
+    static public int staticInt58800;
+    static public int staticInt58801;
+    static public int staticInt58802;
+    static public int staticInt58803;
+    static public int staticInt58804;
+    static public int staticInt58805;
+    static public int staticInt58806;
+    static public int staticInt58807;
+    static public int staticInt58808;
+    static public int staticInt58809;
+    static public int staticInt58810;
+    static public int staticInt58811;
+    static public int staticInt58812;
+    static public int staticInt58813;
+    static public int staticInt58814;
+    static public int staticInt58815;
+    static public int staticInt58816;
+    static public int staticInt58817;
+    static public int staticInt58818;
+    static public int staticInt58819;
+    static public int staticInt58820;
+    static public int staticInt58821;
+    static public int staticInt58822;
+    static public int staticInt58823;
+    static public int staticInt58824;
+    static public int staticInt58825;
+    static public int staticInt58826;
+    static public int staticInt58827;
+    static public int staticInt58828;
+    static public int staticInt58829;
+    static public int staticInt58830;
+    static public int staticInt58831;
+    static public int staticInt58832;
+    static public int staticInt58833;
+    static public int staticInt58834;
+    static public int staticInt58835;
+    static public int staticInt58836;
+    static public int staticInt58837;
+    static public int staticInt58838;
+    static public int staticInt58839;
+    static public int staticInt58840;
+    static public int staticInt58841;
+    static public int staticInt58842;
+    static public int staticInt58843;
+    static public int staticInt58844;
+    static public int staticInt58845;
+    static public int staticInt58846;
+    static public int staticInt58847;
+    static public int staticInt58848;
+    static public int staticInt58849;
+    static public int staticInt58850;
+    static public int staticInt58851;
+    static public int staticInt58852;
+    static public int staticInt58853;
+    static public int staticInt58854;
+    static public int staticInt58855;
+    static public int staticInt58856;
+    static public int staticInt58857;
+    static public int staticInt58858;
+    static public int staticInt58859;
+    static public int staticInt58860;
+    static public int staticInt58861;
+    static public int staticInt58862;
+    static public int staticInt58863;
+    static public int staticInt58864;
+    static public int staticInt58865;
+    static public int staticInt58866;
+    static public int staticInt58867;
+    static public int staticInt58868;
+    static public int staticInt58869;
+    static public int staticInt58870;
+    static public int staticInt58871;
+    static public int staticInt58872;
+    static public int staticInt58873;
+    static public int staticInt58874;
+    static public int staticInt58875;
+    static public int staticInt58876;
+    static public int staticInt58877;
+    static public int staticInt58878;
+    static public int staticInt58879;
+    static public int staticInt58880;
+    static public int staticInt58881;
+    static public int staticInt58882;
+    static public int staticInt58883;
+    static public int staticInt58884;
+    static public int staticInt58885;
+    static public int staticInt58886;
+    static public int staticInt58887;
+    static public int staticInt58888;
+    static public int staticInt58889;
+    static public int staticInt58890;
+    static public int staticInt58891;
+    static public int staticInt58892;
+    static public int staticInt58893;
+    static public int staticInt58894;
+    static public int staticInt58895;
+    static public int staticInt58896;
+    static public int staticInt58897;
+    static public int staticInt58898;
+    static public int staticInt58899;
+    static public int staticInt58900;
+    static public int staticInt58901;
+    static public int staticInt58902;
+    static public int staticInt58903;
+    static public int staticInt58904;
+    static public int staticInt58905;
+    static public int staticInt58906;
+    static public int staticInt58907;
+    static public int staticInt58908;
+    static public int staticInt58909;
+    static public int staticInt58910;
+    static public int staticInt58911;
+    static public int staticInt58912;
+    static public int staticInt58913;
+    static public int staticInt58914;
+    static public int staticInt58915;
+    static public int staticInt58916;
+    static public int staticInt58917;
+    static public int staticInt58918;
+    static public int staticInt58919;
+    static public int staticInt58920;
+    static public int staticInt58921;
+    static public int staticInt58922;
+    static public int staticInt58923;
+    static public int staticInt58924;
+    static public int staticInt58925;
+    static public int staticInt58926;
+    static public int staticInt58927;
+    static public int staticInt58928;
+    static public int staticInt58929;
+    static public int staticInt58930;
+    static public int staticInt58931;
+    static public int staticInt58932;
+    static public int staticInt58933;
+    static public int staticInt58934;
+    static public int staticInt58935;
+    static public int staticInt58936;
+    static public int staticInt58937;
+    static public int staticInt58938;
+    static public int staticInt58939;
+    static public int staticInt58940;
+    static public int staticInt58941;
+    static public int staticInt58942;
+    static public int staticInt58943;
+    static public int staticInt58944;
+    static public int staticInt58945;
+    static public int staticInt58946;
+    static public int staticInt58947;
+    static public int staticInt58948;
+    static public int staticInt58949;
+    static public int staticInt58950;
+    static public int staticInt58951;
+    static public int staticInt58952;
+    static public int staticInt58953;
+    static public int staticInt58954;
+    static public int staticInt58955;
+    static public int staticInt58956;
+    static public int staticInt58957;
+    static public int staticInt58958;
+    static public int staticInt58959;
+    static public int staticInt58960;
+    static public int staticInt58961;
+    static public int staticInt58962;
+    static public int staticInt58963;
+    static public int staticInt58964;
+    static public int staticInt58965;
+    static public int staticInt58966;
+    static public int staticInt58967;
+    static public int staticInt58968;
+    static public int staticInt58969;
+    static public int staticInt58970;
+    static public int staticInt58971;
+    static public int staticInt58972;
+    static public int staticInt58973;
+    static public int staticInt58974;
+    static public int staticInt58975;
+    static public int staticInt58976;
+    static public int staticInt58977;
+    static public int staticInt58978;
+    static public int staticInt58979;
+    static public int staticInt58980;
+    static public int staticInt58981;
+    static public int staticInt58982;
+    static public int staticInt58983;
+    static public int staticInt58984;
+    static public int staticInt58985;
+    static public int staticInt58986;
+    static public int staticInt58987;
+    static public int staticInt58988;
+    static public int staticInt58989;
+    static public int staticInt58990;
+    static public int staticInt58991;
+    static public int staticInt58992;
+    static public int staticInt58993;
+    static public int staticInt58994;
+    static public int staticInt58995;
+    static public int staticInt58996;
+    static public int staticInt58997;
+    static public int staticInt58998;
+    static public int staticInt58999;
+    static public int staticInt59000;
+    static public int staticInt59001;
+    static public int staticInt59002;
+    static public int staticInt59003;
+    static public int staticInt59004;
+    static public int staticInt59005;
+    static public int staticInt59006;
+    static public int staticInt59007;
+    static public int staticInt59008;
+    static public int staticInt59009;
+    static public int staticInt59010;
+    static public int staticInt59011;
+    static public int staticInt59012;
+    static public int staticInt59013;
+    static public int staticInt59014;
+    static public int staticInt59015;
+    static public int staticInt59016;
+    static public int staticInt59017;
+    static public int staticInt59018;
+    static public int staticInt59019;
+    static public int staticInt59020;
+    static public int staticInt59021;
+    static public int staticInt59022;
+    static public int staticInt59023;
+    static public int staticInt59024;
+    static public int staticInt59025;
+    static public int staticInt59026;
+    static public int staticInt59027;
+    static public int staticInt59028;
+    static public int staticInt59029;
+    static public int staticInt59030;
+    static public int staticInt59031;
+    static public int staticInt59032;
+    static public int staticInt59033;
+    static public int staticInt59034;
+    static public int staticInt59035;
+    static public int staticInt59036;
+    static public int staticInt59037;
+    static public int staticInt59038;
+    static public int staticInt59039;
+    static public int staticInt59040;
+    static public int staticInt59041;
+    static public int staticInt59042;
+    static public int staticInt59043;
+    static public int staticInt59044;
+    static public int staticInt59045;
+    static public int staticInt59046;
+    static public int staticInt59047;
+    static public int staticInt59048;
+    static public int staticInt59049;
+    static public int staticInt59050;
+    static public int staticInt59051;
+    static public int staticInt59052;
+    static public int staticInt59053;
+    static public int staticInt59054;
+    static public int staticInt59055;
+    static public int staticInt59056;
+    static public int staticInt59057;
+    static public int staticInt59058;
+    static public int staticInt59059;
+    static public int staticInt59060;
+    static public int staticInt59061;
+    static public int staticInt59062;
+    static public int staticInt59063;
+    static public int staticInt59064;
+    static public int staticInt59065;
+    static public int staticInt59066;
+    static public int staticInt59067;
+    static public int staticInt59068;
+    static public int staticInt59069;
+    static public int staticInt59070;
+    static public int staticInt59071;
+    static public int staticInt59072;
+    static public int staticInt59073;
+    static public int staticInt59074;
+    static public int staticInt59075;
+    static public int staticInt59076;
+    static public int staticInt59077;
+    static public int staticInt59078;
+    static public int staticInt59079;
+    static public int staticInt59080;
+    static public int staticInt59081;
+    static public int staticInt59082;
+    static public int staticInt59083;
+    static public int staticInt59084;
+    static public int staticInt59085;
+    static public int staticInt59086;
+    static public int staticInt59087;
+    static public int staticInt59088;
+    static public int staticInt59089;
+    static public int staticInt59090;
+    static public int staticInt59091;
+    static public int staticInt59092;
+    static public int staticInt59093;
+    static public int staticInt59094;
+    static public int staticInt59095;
+    static public int staticInt59096;
+    static public int staticInt59097;
+    static public int staticInt59098;
+    static public int staticInt59099;
+    static public int staticInt59100;
+    static public int staticInt59101;
+    static public int staticInt59102;
+    static public int staticInt59103;
+    static public int staticInt59104;
+    static public int staticInt59105;
+    static public int staticInt59106;
+    static public int staticInt59107;
+    static public int staticInt59108;
+    static public int staticInt59109;
+    static public int staticInt59110;
+    static public int staticInt59111;
+    static public int staticInt59112;
+    static public int staticInt59113;
+    static public int staticInt59114;
+    static public int staticInt59115;
+    static public int staticInt59116;
+    static public int staticInt59117;
+    static public int staticInt59118;
+    static public int staticInt59119;
+    static public int staticInt59120;
+    static public int staticInt59121;
+    static public int staticInt59122;
+    static public int staticInt59123;
+    static public int staticInt59124;
+    static public int staticInt59125;
+    static public int staticInt59126;
+    static public int staticInt59127;
+    static public int staticInt59128;
+    static public int staticInt59129;
+    static public int staticInt59130;
+    static public int staticInt59131;
+    static public int staticInt59132;
+    static public int staticInt59133;
+    static public int staticInt59134;
+    static public int staticInt59135;
+    static public int staticInt59136;
+    static public int staticInt59137;
+    static public int staticInt59138;
+    static public int staticInt59139;
+    static public int staticInt59140;
+    static public int staticInt59141;
+    static public int staticInt59142;
+    static public int staticInt59143;
+    static public int staticInt59144;
+    static public int staticInt59145;
+    static public int staticInt59146;
+    static public int staticInt59147;
+    static public int staticInt59148;
+    static public int staticInt59149;
+    static public int staticInt59150;
+    static public int staticInt59151;
+    static public int staticInt59152;
+    static public int staticInt59153;
+    static public int staticInt59154;
+    static public int staticInt59155;
+    static public int staticInt59156;
+    static public int staticInt59157;
+    static public int staticInt59158;
+    static public int staticInt59159;
+    static public int staticInt59160;
+    static public int staticInt59161;
+    static public int staticInt59162;
+    static public int staticInt59163;
+    static public int staticInt59164;
+    static public int staticInt59165;
+    static public int staticInt59166;
+    static public int staticInt59167;
+    static public int staticInt59168;
+    static public int staticInt59169;
+    static public int staticInt59170;
+    static public int staticInt59171;
+    static public int staticInt59172;
+    static public int staticInt59173;
+    static public int staticInt59174;
+    static public int staticInt59175;
+    static public int staticInt59176;
+    static public int staticInt59177;
+    static public int staticInt59178;
+    static public int staticInt59179;
+    static public int staticInt59180;
+    static public int staticInt59181;
+    static public int staticInt59182;
+    static public int staticInt59183;
+    static public int staticInt59184;
+    static public int staticInt59185;
+    static public int staticInt59186;
+    static public int staticInt59187;
+    static public int staticInt59188;
+    static public int staticInt59189;
+    static public int staticInt59190;
+    static public int staticInt59191;
+    static public int staticInt59192;
+    static public int staticInt59193;
+    static public int staticInt59194;
+    static public int staticInt59195;
+    static public int staticInt59196;
+    static public int staticInt59197;
+    static public int staticInt59198;
+    static public int staticInt59199;
+    static public int staticInt59200;
+    static public int staticInt59201;
+    static public int staticInt59202;
+    static public int staticInt59203;
+    static public int staticInt59204;
+    static public int staticInt59205;
+    static public int staticInt59206;
+    static public int staticInt59207;
+    static public int staticInt59208;
+    static public int staticInt59209;
+    static public int staticInt59210;
+    static public int staticInt59211;
+    static public int staticInt59212;
+    static public int staticInt59213;
+    static public int staticInt59214;
+    static public int staticInt59215;
+    static public int staticInt59216;
+    static public int staticInt59217;
+    static public int staticInt59218;
+    static public int staticInt59219;
+    static public int staticInt59220;
+    static public int staticInt59221;
+    static public int staticInt59222;
+    static public int staticInt59223;
+    static public int staticInt59224;
+    static public int staticInt59225;
+    static public int staticInt59226;
+    static public int staticInt59227;
+    static public int staticInt59228;
+    static public int staticInt59229;
+    static public int staticInt59230;
+    static public int staticInt59231;
+    static public int staticInt59232;
+    static public int staticInt59233;
+    static public int staticInt59234;
+    static public int staticInt59235;
+    static public int staticInt59236;
+    static public int staticInt59237;
+    static public int staticInt59238;
+    static public int staticInt59239;
+    static public int staticInt59240;
+    static public int staticInt59241;
+    static public int staticInt59242;
+    static public int staticInt59243;
+    static public int staticInt59244;
+    static public int staticInt59245;
+    static public int staticInt59246;
+    static public int staticInt59247;
+    static public int staticInt59248;
+    static public int staticInt59249;
+    static public int staticInt59250;
+    static public int staticInt59251;
+    static public int staticInt59252;
+    static public int staticInt59253;
+    static public int staticInt59254;
+    static public int staticInt59255;
+    static public int staticInt59256;
+    static public int staticInt59257;
+    static public int staticInt59258;
+    static public int staticInt59259;
+    static public int staticInt59260;
+    static public int staticInt59261;
+    static public int staticInt59262;
+    static public int staticInt59263;
+    static public int staticInt59264;
+    static public int staticInt59265;
+    static public int staticInt59266;
+    static public int staticInt59267;
+    static public int staticInt59268;
+    static public int staticInt59269;
+    static public int staticInt59270;
+    static public int staticInt59271;
+    static public int staticInt59272;
+    static public int staticInt59273;
+    static public int staticInt59274;
+    static public int staticInt59275;
+    static public int staticInt59276;
+    static public int staticInt59277;
+    static public int staticInt59278;
+    static public int staticInt59279;
+    static public int staticInt59280;
+    static public int staticInt59281;
+    static public int staticInt59282;
+    static public int staticInt59283;
+    static public int staticInt59284;
+    static public int staticInt59285;
+    static public int staticInt59286;
+    static public int staticInt59287;
+    static public int staticInt59288;
+    static public int staticInt59289;
+    static public int staticInt59290;
+    static public int staticInt59291;
+    static public int staticInt59292;
+    static public int staticInt59293;
+    static public int staticInt59294;
+    static public int staticInt59295;
+    static public int staticInt59296;
+    static public int staticInt59297;
+    static public int staticInt59298;
+    static public int staticInt59299;
+    static public int staticInt59300;
+    static public int staticInt59301;
+    static public int staticInt59302;
+    static public int staticInt59303;
+    static public int staticInt59304;
+    static public int staticInt59305;
+    static public int staticInt59306;
+    static public int staticInt59307;
+    static public int staticInt59308;
+    static public int staticInt59309;
+    static public int staticInt59310;
+    static public int staticInt59311;
+    static public int staticInt59312;
+    static public int staticInt59313;
+    static public int staticInt59314;
+    static public int staticInt59315;
+    static public int staticInt59316;
+    static public int staticInt59317;
+    static public int staticInt59318;
+    static public int staticInt59319;
+    static public int staticInt59320;
+    static public int staticInt59321;
+    static public int staticInt59322;
+    static public int staticInt59323;
+    static public int staticInt59324;
+    static public int staticInt59325;
+    static public int staticInt59326;
+    static public int staticInt59327;
+    static public int staticInt59328;
+    static public int staticInt59329;
+    static public int staticInt59330;
+    static public int staticInt59331;
+    static public int staticInt59332;
+    static public int staticInt59333;
+    static public int staticInt59334;
+    static public int staticInt59335;
+    static public int staticInt59336;
+    static public int staticInt59337;
+    static public int staticInt59338;
+    static public int staticInt59339;
+    static public int staticInt59340;
+    static public int staticInt59341;
+    static public int staticInt59342;
+    static public int staticInt59343;
+    static public int staticInt59344;
+    static public int staticInt59345;
+    static public int staticInt59346;
+    static public int staticInt59347;
+    static public int staticInt59348;
+    static public int staticInt59349;
+    static public int staticInt59350;
+    static public int staticInt59351;
+    static public int staticInt59352;
+    static public int staticInt59353;
+    static public int staticInt59354;
+    static public int staticInt59355;
+    static public int staticInt59356;
+    static public int staticInt59357;
+    static public int staticInt59358;
+    static public int staticInt59359;
+    static public int staticInt59360;
+    static public int staticInt59361;
+    static public int staticInt59362;
+    static public int staticInt59363;
+    static public int staticInt59364;
+    static public int staticInt59365;
+    static public int staticInt59366;
+    static public int staticInt59367;
+    static public int staticInt59368;
+    static public int staticInt59369;
+    static public int staticInt59370;
+    static public int staticInt59371;
+    static public int staticInt59372;
+    static public int staticInt59373;
+    static public int staticInt59374;
+    static public int staticInt59375;
+    static public int staticInt59376;
+    static public int staticInt59377;
+    static public int staticInt59378;
+    static public int staticInt59379;
+    static public int staticInt59380;
+    static public int staticInt59381;
+    static public int staticInt59382;
+    static public int staticInt59383;
+    static public int staticInt59384;
+    static public int staticInt59385;
+    static public int staticInt59386;
+    static public int staticInt59387;
+    static public int staticInt59388;
+    static public int staticInt59389;
+    static public int staticInt59390;
+    static public int staticInt59391;
+    static public int staticInt59392;
+    static public int staticInt59393;
+    static public int staticInt59394;
+    static public int staticInt59395;
+    static public int staticInt59396;
+    static public int staticInt59397;
+    static public int staticInt59398;
+    static public int staticInt59399;
+    static public int staticInt59400;
+    static public int staticInt59401;
+    static public int staticInt59402;
+    static public int staticInt59403;
+    static public int staticInt59404;
+    static public int staticInt59405;
+    static public int staticInt59406;
+    static public int staticInt59407;
+    static public int staticInt59408;
+    static public int staticInt59409;
+    static public int staticInt59410;
+    static public int staticInt59411;
+    static public int staticInt59412;
+    static public int staticInt59413;
+    static public int staticInt59414;
+    static public int staticInt59415;
+    static public int staticInt59416;
+    static public int staticInt59417;
+    static public int staticInt59418;
+    static public int staticInt59419;
+    static public int staticInt59420;
+    static public int staticInt59421;
+    static public int staticInt59422;
+    static public int staticInt59423;
+    static public int staticInt59424;
+    static public int staticInt59425;
+    static public int staticInt59426;
+    static public int staticInt59427;
+    static public int staticInt59428;
+    static public int staticInt59429;
+    static public int staticInt59430;
+    static public int staticInt59431;
+    static public int staticInt59432;
+    static public int staticInt59433;
+    static public int staticInt59434;
+    static public int staticInt59435;
+    static public int staticInt59436;
+    static public int staticInt59437;
+    static public int staticInt59438;
+    static public int staticInt59439;
+    static public int staticInt59440;
+    static public int staticInt59441;
+    static public int staticInt59442;
+    static public int staticInt59443;
+    static public int staticInt59444;
+    static public int staticInt59445;
+    static public int staticInt59446;
+    static public int staticInt59447;
+    static public int staticInt59448;
+    static public int staticInt59449;
+    static public int staticInt59450;
+    static public int staticInt59451;
+    static public int staticInt59452;
+    static public int staticInt59453;
+    static public int staticInt59454;
+    static public int staticInt59455;
+    static public int staticInt59456;
+    static public int staticInt59457;
+    static public int staticInt59458;
+    static public int staticInt59459;
+    static public int staticInt59460;
+    static public int staticInt59461;
+    static public int staticInt59462;
+    static public int staticInt59463;
+    static public int staticInt59464;
+    static public int staticInt59465;
+    static public int staticInt59466;
+    static public int staticInt59467;
+    static public int staticInt59468;
+    static public int staticInt59469;
+    static public int staticInt59470;
+    static public int staticInt59471;
+    static public int staticInt59472;
+    static public int staticInt59473;
+    static public int staticInt59474;
+    static public int staticInt59475;
+    static public int staticInt59476;
+    static public int staticInt59477;
+    static public int staticInt59478;
+    static public int staticInt59479;
+    static public int staticInt59480;
+    static public int staticInt59481;
+    static public int staticInt59482;
+    static public int staticInt59483;
+    static public int staticInt59484;
+    static public int staticInt59485;
+    static public int staticInt59486;
+    static public int staticInt59487;
+    static public int staticInt59488;
+    static public int staticInt59489;
+    static public int staticInt59490;
+    static public int staticInt59491;
+    static public int staticInt59492;
+    static public int staticInt59493;
+    static public int staticInt59494;
+    static public int staticInt59495;
+    static public int staticInt59496;
+    static public int staticInt59497;
+    static public int staticInt59498;
+    static public int staticInt59499;
+    static public int staticInt59500;
+    static public int staticInt59501;
+    static public int staticInt59502;
+    static public int staticInt59503;
+    static public int staticInt59504;
+    static public int staticInt59505;
+    static public int staticInt59506;
+    static public int staticInt59507;
+    static public int staticInt59508;
+    static public int staticInt59509;
+    static public int staticInt59510;
+    static public int staticInt59511;
+    static public int staticInt59512;
+    static public int staticInt59513;
+    static public int staticInt59514;
+    static public int staticInt59515;
+    static public int staticInt59516;
+    static public int staticInt59517;
+    static public int staticInt59518;
+    static public int staticInt59519;
+    static public int staticInt59520;
+    static public int staticInt59521;
+    static public int staticInt59522;
+    static public int staticInt59523;
+    static public int staticInt59524;
+    static public int staticInt59525;
+    static public int staticInt59526;
+    static public int staticInt59527;
+    static public int staticInt59528;
+    static public int staticInt59529;
+    static public int staticInt59530;
+    static public int staticInt59531;
+    static public int staticInt59532;
+    static public int staticInt59533;
+    static public int staticInt59534;
+    static public int staticInt59535;
+    static public int staticInt59536;
+    static public int staticInt59537;
+    static public int staticInt59538;
+    static public int staticInt59539;
+    static public int staticInt59540;
+    static public int staticInt59541;
+    static public int staticInt59542;
+    static public int staticInt59543;
+    static public int staticInt59544;
+    static public int staticInt59545;
+    static public int staticInt59546;
+    static public int staticInt59547;
+    static public int staticInt59548;
+    static public int staticInt59549;
+    static public int staticInt59550;
+    static public int staticInt59551;
+    static public int staticInt59552;
+    static public int staticInt59553;
+    static public int staticInt59554;
+    static public int staticInt59555;
+    static public int staticInt59556;
+    static public int staticInt59557;
+    static public int staticInt59558;
+    static public int staticInt59559;
+    static public int staticInt59560;
+    static public int staticInt59561;
+    static public int staticInt59562;
+    static public int staticInt59563;
+    static public int staticInt59564;
+    static public int staticInt59565;
+    static public int staticInt59566;
+    static public int staticInt59567;
+    static public int staticInt59568;
+    static public int staticInt59569;
+    static public int staticInt59570;
+    static public int staticInt59571;
+    static public int staticInt59572;
+    static public int staticInt59573;
+    static public int staticInt59574;
+    static public int staticInt59575;
+    static public int staticInt59576;
+    static public int staticInt59577;
+    static public int staticInt59578;
+    static public int staticInt59579;
+    static public int staticInt59580;
+    static public int staticInt59581;
+    static public int staticInt59582;
+    static public int staticInt59583;
+    static public int staticInt59584;
+    static public int staticInt59585;
+    static public int staticInt59586;
+    static public int staticInt59587;
+    static public int staticInt59588;
+    static public int staticInt59589;
+    static public int staticInt59590;
+    static public int staticInt59591;
+    static public int staticInt59592;
+    static public int staticInt59593;
+    static public int staticInt59594;
+    static public int staticInt59595;
+    static public int staticInt59596;
+    static public int staticInt59597;
+    static public int staticInt59598;
+    static public int staticInt59599;
+    static public int staticInt59600;
+    static public int staticInt59601;
+    static public int staticInt59602;
+    static public int staticInt59603;
+    static public int staticInt59604;
+    static public int staticInt59605;
+    static public int staticInt59606;
+    static public int staticInt59607;
+    static public int staticInt59608;
+    static public int staticInt59609;
+    static public int staticInt59610;
+    static public int staticInt59611;
+    static public int staticInt59612;
+    static public int staticInt59613;
+    static public int staticInt59614;
+    static public int staticInt59615;
+    static public int staticInt59616;
+    static public int staticInt59617;
+    static public int staticInt59618;
+    static public int staticInt59619;
+    static public int staticInt59620;
+    static public int staticInt59621;
+    static public int staticInt59622;
+    static public int staticInt59623;
+    static public int staticInt59624;
+    static public int staticInt59625;
+    static public int staticInt59626;
+    static public int staticInt59627;
+    static public int staticInt59628;
+    static public int staticInt59629;
+    static public int staticInt59630;
+    static public int staticInt59631;
+    static public int staticInt59632;
+    static public int staticInt59633;
+    static public int staticInt59634;
+    static public int staticInt59635;
+    static public int staticInt59636;
+    static public int staticInt59637;
+    static public int staticInt59638;
+    static public int staticInt59639;
+    static public int staticInt59640;
+    static public int staticInt59641;
+    static public int staticInt59642;
+    static public int staticInt59643;
+    static public int staticInt59644;
+    static public int staticInt59645;
+    static public int staticInt59646;
+    static public int staticInt59647;
+    static public int staticInt59648;
+    static public int staticInt59649;
+    static public int staticInt59650;
+    static public int staticInt59651;
+    static public int staticInt59652;
+    static public int staticInt59653;
+    static public int staticInt59654;
+    static public int staticInt59655;
+    static public int staticInt59656;
+    static public int staticInt59657;
+    static public int staticInt59658;
+    static public int staticInt59659;
+    static public int staticInt59660;
+    static public int staticInt59661;
+    static public int staticInt59662;
+    static public int staticInt59663;
+    static public int staticInt59664;
+    static public int staticInt59665;
+    static public int staticInt59666;
+    static public int staticInt59667;
+    static public int staticInt59668;
+    static public int staticInt59669;
+    static public int staticInt59670;
+    static public int staticInt59671;
+    static public int staticInt59672;
+    static public int staticInt59673;
+    static public int staticInt59674;
+    static public int staticInt59675;
+    static public int staticInt59676;
+    static public int staticInt59677;
+    static public int staticInt59678;
+    static public int staticInt59679;
+    static public int staticInt59680;
+    static public int staticInt59681;
+    static public int staticInt59682;
+    static public int staticInt59683;
+    static public int staticInt59684;
+    static public int staticInt59685;
+    static public int staticInt59686;
+    static public int staticInt59687;
+    static public int staticInt59688;
+    static public int staticInt59689;
+    static public int staticInt59690;
+    static public int staticInt59691;
+    static public int staticInt59692;
+    static public int staticInt59693;
+    static public int staticInt59694;
+    static public int staticInt59695;
+    static public int staticInt59696;
+    static public int staticInt59697;
+    static public int staticInt59698;
+    static public int staticInt59699;
+    static public int staticInt59700;
+    static public int staticInt59701;
+    static public int staticInt59702;
+    static public int staticInt59703;
+    static public int staticInt59704;
+    static public int staticInt59705;
+    static public int staticInt59706;
+    static public int staticInt59707;
+    static public int staticInt59708;
+    static public int staticInt59709;
+    static public int staticInt59710;
+    static public int staticInt59711;
+    static public int staticInt59712;
+    static public int staticInt59713;
+    static public int staticInt59714;
+    static public int staticInt59715;
+    static public int staticInt59716;
+    static public int staticInt59717;
+    static public int staticInt59718;
+    static public int staticInt59719;
+    static public int staticInt59720;
+    static public int staticInt59721;
+    static public int staticInt59722;
+    static public int staticInt59723;
+    static public int staticInt59724;
+    static public int staticInt59725;
+    static public int staticInt59726;
+    static public int staticInt59727;
+    static public int staticInt59728;
+    static public int staticInt59729;
+    static public int staticInt59730;
+    static public int staticInt59731;
+    static public int staticInt59732;
+    static public int staticInt59733;
+    static public int staticInt59734;
+    static public int staticInt59735;
+    static public int staticInt59736;
+    static public int staticInt59737;
+    static public int staticInt59738;
+    static public int staticInt59739;
+    static public int staticInt59740;
+    static public int staticInt59741;
+    static public int staticInt59742;
+    static public int staticInt59743;
+    static public int staticInt59744;
+    static public int staticInt59745;
+    static public int staticInt59746;
+    static public int staticInt59747;
+    static public int staticInt59748;
+    static public int staticInt59749;
+    static public int staticInt59750;
+    static public int staticInt59751;
+    static public int staticInt59752;
+    static public int staticInt59753;
+    static public int staticInt59754;
+    static public int staticInt59755;
+    static public int staticInt59756;
+    static public int staticInt59757;
+    static public int staticInt59758;
+    static public int staticInt59759;
+    static public int staticInt59760;
+    static public int staticInt59761;
+    static public int staticInt59762;
+    static public int staticInt59763;
+    static public int staticInt59764;
+    static public int staticInt59765;
+    static public int staticInt59766;
+    static public int staticInt59767;
+    static public int staticInt59768;
+    static public int staticInt59769;
+    static public int staticInt59770;
+    static public int staticInt59771;
+    static public int staticInt59772;
+    static public int staticInt59773;
+    static public int staticInt59774;
+    static public int staticInt59775;
+    static public int staticInt59776;
+    static public int staticInt59777;
+    static public int staticInt59778;
+    static public int staticInt59779;
+    static public int staticInt59780;
+    static public int staticInt59781;
+    static public int staticInt59782;
+    static public int staticInt59783;
+    static public int staticInt59784;
+    static public int staticInt59785;
+    static public int staticInt59786;
+    static public int staticInt59787;
+    static public int staticInt59788;
+    static public int staticInt59789;
+    static public int staticInt59790;
+    static public int staticInt59791;
+    static public int staticInt59792;
+    static public int staticInt59793;
+    static public int staticInt59794;
+    static public int staticInt59795;
+    static public int staticInt59796;
+    static public int staticInt59797;
+    static public int staticInt59798;
+    static public int staticInt59799;
+    static public int staticInt59800;
+    static public int staticInt59801;
+    static public int staticInt59802;
+    static public int staticInt59803;
+    static public int staticInt59804;
+    static public int staticInt59805;
+    static public int staticInt59806;
+    static public int staticInt59807;
+    static public int staticInt59808;
+    static public int staticInt59809;
+    static public int staticInt59810;
+    static public int staticInt59811;
+    static public int staticInt59812;
+    static public int staticInt59813;
+    static public int staticInt59814;
+    static public int staticInt59815;
+    static public int staticInt59816;
+    static public int staticInt59817;
+    static public int staticInt59818;
+    static public int staticInt59819;
+    static public int staticInt59820;
+    static public int staticInt59821;
+    static public int staticInt59822;
+    static public int staticInt59823;
+    static public int staticInt59824;
+    static public int staticInt59825;
+    static public int staticInt59826;
+    static public int staticInt59827;
+    static public int staticInt59828;
+    static public int staticInt59829;
+    static public int staticInt59830;
+    static public int staticInt59831;
+    static public int staticInt59832;
+    static public int staticInt59833;
+    static public int staticInt59834;
+    static public int staticInt59835;
+    static public int staticInt59836;
+    static public int staticInt59837;
+    static public int staticInt59838;
+    static public int staticInt59839;
+    static public int staticInt59840;
+    static public int staticInt59841;
+    static public int staticInt59842;
+    static public int staticInt59843;
+    static public int staticInt59844;
+    static public int staticInt59845;
+    static public int staticInt59846;
+    static public int staticInt59847;
+    static public int staticInt59848;
+    static public int staticInt59849;
+    static public int staticInt59850;
+    static public int staticInt59851;
+    static public int staticInt59852;
+    static public int staticInt59853;
+    static public int staticInt59854;
+    static public int staticInt59855;
+    static public int staticInt59856;
+    static public int staticInt59857;
+    static public int staticInt59858;
+    static public int staticInt59859;
+    static public int staticInt59860;
+    static public int staticInt59861;
+    static public int staticInt59862;
+    static public int staticInt59863;
+    static public int staticInt59864;
+    static public int staticInt59865;
+    static public int staticInt59866;
+    static public int staticInt59867;
+    static public int staticInt59868;
+    static public int staticInt59869;
+    static public int staticInt59870;
+    static public int staticInt59871;
+    static public int staticInt59872;
+    static public int staticInt59873;
+    static public int staticInt59874;
+    static public int staticInt59875;
+    static public int staticInt59876;
+    static public int staticInt59877;
+    static public int staticInt59878;
+    static public int staticInt59879;
+    static public int staticInt59880;
+    static public int staticInt59881;
+    static public int staticInt59882;
+    static public int staticInt59883;
+    static public int staticInt59884;
+    static public int staticInt59885;
+    static public int staticInt59886;
+    static public int staticInt59887;
+    static public int staticInt59888;
+    static public int staticInt59889;
+    static public int staticInt59890;
+    static public int staticInt59891;
+    static public int staticInt59892;
+    static public int staticInt59893;
+    static public int staticInt59894;
+    static public int staticInt59895;
+    static public int staticInt59896;
+    static public int staticInt59897;
+    static public int staticInt59898;
+    static public int staticInt59899;
+    static public int staticInt59900;
+    static public int staticInt59901;
+    static public int staticInt59902;
+    static public int staticInt59903;
+    static public int staticInt59904;
+    static public int staticInt59905;
+    static public int staticInt59906;
+    static public int staticInt59907;
+    static public int staticInt59908;
+    static public int staticInt59909;
+    static public int staticInt59910;
+    static public int staticInt59911;
+    static public int staticInt59912;
+    static public int staticInt59913;
+    static public int staticInt59914;
+    static public int staticInt59915;
+    static public int staticInt59916;
+    static public int staticInt59917;
+    static public int staticInt59918;
+    static public int staticInt59919;
+    static public int staticInt59920;
+    static public int staticInt59921;
+    static public int staticInt59922;
+    static public int staticInt59923;
+    static public int staticInt59924;
+    static public int staticInt59925;
+    static public int staticInt59926;
+    static public int staticInt59927;
+    static public int staticInt59928;
+    static public int staticInt59929;
+    static public int staticInt59930;
+    static public int staticInt59931;
+    static public int staticInt59932;
+    static public int staticInt59933;
+    static public int staticInt59934;
+    static public int staticInt59935;
+    static public int staticInt59936;
+    static public int staticInt59937;
+    static public int staticInt59938;
+    static public int staticInt59939;
+    static public int staticInt59940;
+    static public int staticInt59941;
+    static public int staticInt59942;
+    static public int staticInt59943;
+    static public int staticInt59944;
+    static public int staticInt59945;
+    static public int staticInt59946;
+    static public int staticInt59947;
+    static public int staticInt59948;
+    static public int staticInt59949;
+    static public int staticInt59950;
+    static public int staticInt59951;
+    static public int staticInt59952;
+    static public int staticInt59953;
+    static public int staticInt59954;
+    static public int staticInt59955;
+    static public int staticInt59956;
+    static public int staticInt59957;
+    static public int staticInt59958;
+    static public int staticInt59959;
+    static public int staticInt59960;
+    static public int staticInt59961;
+    static public int staticInt59962;
+    static public int staticInt59963;
+    static public int staticInt59964;
+    static public int staticInt59965;
+    static public int staticInt59966;
+    static public int staticInt59967;
+    static public int staticInt59968;
+    static public int staticInt59969;
+    static public int staticInt59970;
+    static public int staticInt59971;
+    static public int staticInt59972;
+    static public int staticInt59973;
+    static public int staticInt59974;
+    static public int staticInt59975;
+    static public int staticInt59976;
+    static public int staticInt59977;
+    static public int staticInt59978;
+    static public int staticInt59979;
+    static public int staticInt59980;
+    static public int staticInt59981;
+    static public int staticInt59982;
+    static public int staticInt59983;
+    static public int staticInt59984;
+    static public int staticInt59985;
+    static public int staticInt59986;
+    static public int staticInt59987;
+    static public int staticInt59988;
+    static public int staticInt59989;
+    static public int staticInt59990;
+    static public int staticInt59991;
+    static public int staticInt59992;
+    static public int staticInt59993;
+    static public int staticInt59994;
+    static public int staticInt59995;
+    static public int staticInt59996;
+    static public int staticInt59997;
+    static public int staticInt59998;
+    static public int staticInt59999;
+    static public int staticInt60000;
+    static public int staticInt60001;
+    static public int staticInt60002;
+    static public int staticInt60003;
+    static public int staticInt60004;
+    static public int staticInt60005;
+    static public int staticInt60006;
+    static public int staticInt60007;
+    static public int staticInt60008;
+    static public int staticInt60009;
+    static public int staticInt60010;
+    static public int staticInt60011;
+    static public int staticInt60012;
+    static public int staticInt60013;
+    static public int staticInt60014;
+    static public int staticInt60015;
+    static public int staticInt60016;
+    static public int staticInt60017;
+    static public int staticInt60018;
+    static public int staticInt60019;
+    static public int staticInt60020;
+    static public int staticInt60021;
+    static public int staticInt60022;
+    static public int staticInt60023;
+    static public int staticInt60024;
+    static public int staticInt60025;
+    static public int staticInt60026;
+    static public int staticInt60027;
+    static public int staticInt60028;
+    static public int staticInt60029;
+    static public int staticInt60030;
+    static public int staticInt60031;
+    static public int staticInt60032;
+    static public int staticInt60033;
+    static public int staticInt60034;
+    static public int staticInt60035;
+    static public int staticInt60036;
+    static public int staticInt60037;
+    static public int staticInt60038;
+    static public int staticInt60039;
+    static public int staticInt60040;
+    static public int staticInt60041;
+    static public int staticInt60042;
+    static public int staticInt60043;
+    static public int staticInt60044;
+    static public int staticInt60045;
+    static public int staticInt60046;
+    static public int staticInt60047;
+    static public int staticInt60048;
+    static public int staticInt60049;
+    static public int staticInt60050;
+    static public int staticInt60051;
+    static public int staticInt60052;
+    static public int staticInt60053;
+    static public int staticInt60054;
+    static public int staticInt60055;
+    static public int staticInt60056;
+    static public int staticInt60057;
+    static public int staticInt60058;
+    static public int staticInt60059;
+    static public int staticInt60060;
+    static public int staticInt60061;
+    static public int staticInt60062;
+    static public int staticInt60063;
+    static public int staticInt60064;
+    static public int staticInt60065;
+    static public int staticInt60066;
+    static public int staticInt60067;
+    static public int staticInt60068;
+    static public int staticInt60069;
+    static public int staticInt60070;
+    static public int staticInt60071;
+    static public int staticInt60072;
+    static public int staticInt60073;
+    static public int staticInt60074;
+    static public int staticInt60075;
+    static public int staticInt60076;
+    static public int staticInt60077;
+    static public int staticInt60078;
+    static public int staticInt60079;
+    static public int staticInt60080;
+    static public int staticInt60081;
+    static public int staticInt60082;
+    static public int staticInt60083;
+    static public int staticInt60084;
+    static public int staticInt60085;
+    static public int staticInt60086;
+    static public int staticInt60087;
+    static public int staticInt60088;
+    static public int staticInt60089;
+    static public int staticInt60090;
+    static public int staticInt60091;
+    static public int staticInt60092;
+    static public int staticInt60093;
+    static public int staticInt60094;
+    static public int staticInt60095;
+    static public int staticInt60096;
+    static public int staticInt60097;
+    static public int staticInt60098;
+    static public int staticInt60099;
+    static public int staticInt60100;
+    static public int staticInt60101;
+    static public int staticInt60102;
+    static public int staticInt60103;
+    static public int staticInt60104;
+    static public int staticInt60105;
+    static public int staticInt60106;
+    static public int staticInt60107;
+    static public int staticInt60108;
+    static public int staticInt60109;
+    static public int staticInt60110;
+    static public int staticInt60111;
+    static public int staticInt60112;
+    static public int staticInt60113;
+    static public int staticInt60114;
+    static public int staticInt60115;
+    static public int staticInt60116;
+    static public int staticInt60117;
+    static public int staticInt60118;
+    static public int staticInt60119;
+    static public int staticInt60120;
+    static public int staticInt60121;
+    static public int staticInt60122;
+    static public int staticInt60123;
+    static public int staticInt60124;
+    static public int staticInt60125;
+    static public int staticInt60126;
+    static public int staticInt60127;
+    static public int staticInt60128;
+    static public int staticInt60129;
+    static public int staticInt60130;
+    static public int staticInt60131;
+    static public int staticInt60132;
+    static public int staticInt60133;
+    static public int staticInt60134;
+    static public int staticInt60135;
+    static public int staticInt60136;
+    static public int staticInt60137;
+    static public int staticInt60138;
+    static public int staticInt60139;
+    static public int staticInt60140;
+    static public int staticInt60141;
+    static public int staticInt60142;
+    static public int staticInt60143;
+    static public int staticInt60144;
+    static public int staticInt60145;
+    static public int staticInt60146;
+    static public int staticInt60147;
+    static public int staticInt60148;
+    static public int staticInt60149;
+    static public int staticInt60150;
+    static public int staticInt60151;
+    static public int staticInt60152;
+    static public int staticInt60153;
+    static public int staticInt60154;
+    static public int staticInt60155;
+    static public int staticInt60156;
+    static public int staticInt60157;
+    static public int staticInt60158;
+    static public int staticInt60159;
+    static public int staticInt60160;
+    static public int staticInt60161;
+    static public int staticInt60162;
+    static public int staticInt60163;
+    static public int staticInt60164;
+    static public int staticInt60165;
+    static public int staticInt60166;
+    static public int staticInt60167;
+    static public int staticInt60168;
+    static public int staticInt60169;
+    static public int staticInt60170;
+    static public int staticInt60171;
+    static public int staticInt60172;
+    static public int staticInt60173;
+    static public int staticInt60174;
+    static public int staticInt60175;
+    static public int staticInt60176;
+    static public int staticInt60177;
+    static public int staticInt60178;
+    static public int staticInt60179;
+    static public int staticInt60180;
+    static public int staticInt60181;
+    static public int staticInt60182;
+    static public int staticInt60183;
+    static public int staticInt60184;
+    static public int staticInt60185;
+    static public int staticInt60186;
+    static public int staticInt60187;
+    static public int staticInt60188;
+    static public int staticInt60189;
+    static public int staticInt60190;
+    static public int staticInt60191;
+    static public int staticInt60192;
+    static public int staticInt60193;
+    static public int staticInt60194;
+    static public int staticInt60195;
+    static public int staticInt60196;
+    static public int staticInt60197;
+    static public int staticInt60198;
+    static public int staticInt60199;
+    static public int staticInt60200;
+    static public int staticInt60201;
+    static public int staticInt60202;
+    static public int staticInt60203;
+    static public int staticInt60204;
+    static public int staticInt60205;
+    static public int staticInt60206;
+    static public int staticInt60207;
+    static public int staticInt60208;
+    static public int staticInt60209;
+    static public int staticInt60210;
+    static public int staticInt60211;
+    static public int staticInt60212;
+    static public int staticInt60213;
+    static public int staticInt60214;
+    static public int staticInt60215;
+    static public int staticInt60216;
+    static public int staticInt60217;
+    static public int staticInt60218;
+    static public int staticInt60219;
+    static public int staticInt60220;
+    static public int staticInt60221;
+    static public int staticInt60222;
+    static public int staticInt60223;
+    static public int staticInt60224;
+    static public int staticInt60225;
+    static public int staticInt60226;
+    static public int staticInt60227;
+    static public int staticInt60228;
+    static public int staticInt60229;
+    static public int staticInt60230;
+    static public int staticInt60231;
+    static public int staticInt60232;
+    static public int staticInt60233;
+    static public int staticInt60234;
+    static public int staticInt60235;
+    static public int staticInt60236;
+    static public int staticInt60237;
+    static public int staticInt60238;
+    static public int staticInt60239;
+    static public int staticInt60240;
+    static public int staticInt60241;
+    static public int staticInt60242;
+    static public int staticInt60243;
+    static public int staticInt60244;
+    static public int staticInt60245;
+    static public int staticInt60246;
+    static public int staticInt60247;
+    static public int staticInt60248;
+    static public int staticInt60249;
+    static public int staticInt60250;
+    static public int staticInt60251;
+    static public int staticInt60252;
+    static public int staticInt60253;
+    static public int staticInt60254;
+    static public int staticInt60255;
+    static public int staticInt60256;
+    static public int staticInt60257;
+    static public int staticInt60258;
+    static public int staticInt60259;
+    static public int staticInt60260;
+    static public int staticInt60261;
+    static public int staticInt60262;
+    static public int staticInt60263;
+    static public int staticInt60264;
+    static public int staticInt60265;
+    static public int staticInt60266;
+    static public int staticInt60267;
+    static public int staticInt60268;
+    static public int staticInt60269;
+    static public int staticInt60270;
+    static public int staticInt60271;
+    static public int staticInt60272;
+    static public int staticInt60273;
+    static public int staticInt60274;
+    static public int staticInt60275;
+    static public int staticInt60276;
+    static public int staticInt60277;
+    static public int staticInt60278;
+    static public int staticInt60279;
+    static public int staticInt60280;
+    static public int staticInt60281;
+    static public int staticInt60282;
+    static public int staticInt60283;
+    static public int staticInt60284;
+    static public int staticInt60285;
+    static public int staticInt60286;
+    static public int staticInt60287;
+    static public int staticInt60288;
+    static public int staticInt60289;
+    static public int staticInt60290;
+    static public int staticInt60291;
+    static public int staticInt60292;
+    static public int staticInt60293;
+    static public int staticInt60294;
+    static public int staticInt60295;
+    static public int staticInt60296;
+    static public int staticInt60297;
+    static public int staticInt60298;
+    static public int staticInt60299;
+    static public int staticInt60300;
+    static public int staticInt60301;
+    static public int staticInt60302;
+    static public int staticInt60303;
+    static public int staticInt60304;
+    static public int staticInt60305;
+    static public int staticInt60306;
+    static public int staticInt60307;
+    static public int staticInt60308;
+    static public int staticInt60309;
+    static public int staticInt60310;
+    static public int staticInt60311;
+    static public int staticInt60312;
+    static public int staticInt60313;
+    static public int staticInt60314;
+    static public int staticInt60315;
+    static public int staticInt60316;
+    static public int staticInt60317;
+    static public int staticInt60318;
+    static public int staticInt60319;
+    static public int staticInt60320;
+    static public int staticInt60321;
+    static public int staticInt60322;
+    static public int staticInt60323;
+    static public int staticInt60324;
+    static public int staticInt60325;
+    static public int staticInt60326;
+    static public int staticInt60327;
+    static public int staticInt60328;
+    static public int staticInt60329;
+    static public int staticInt60330;
+    static public int staticInt60331;
+    static public int staticInt60332;
+    static public int staticInt60333;
+    static public int staticInt60334;
+    static public int staticInt60335;
+    static public int staticInt60336;
+    static public int staticInt60337;
+    static public int staticInt60338;
+    static public int staticInt60339;
+    static public int staticInt60340;
+    static public int staticInt60341;
+    static public int staticInt60342;
+    static public int staticInt60343;
+    static public int staticInt60344;
+    static public int staticInt60345;
+    static public int staticInt60346;
+    static public int staticInt60347;
+    static public int staticInt60348;
+    static public int staticInt60349;
+    static public int staticInt60350;
+    static public int staticInt60351;
+    static public int staticInt60352;
+    static public int staticInt60353;
+    static public int staticInt60354;
+    static public int staticInt60355;
+    static public int staticInt60356;
+    static public int staticInt60357;
+    static public int staticInt60358;
+    static public int staticInt60359;
+    static public int staticInt60360;
+    static public int staticInt60361;
+    static public int staticInt60362;
+    static public int staticInt60363;
+    static public int staticInt60364;
+    static public int staticInt60365;
+    static public int staticInt60366;
+    static public int staticInt60367;
+    static public int staticInt60368;
+    static public int staticInt60369;
+    static public int staticInt60370;
+    static public int staticInt60371;
+    static public int staticInt60372;
+    static public int staticInt60373;
+    static public int staticInt60374;
+    static public int staticInt60375;
+    static public int staticInt60376;
+    static public int staticInt60377;
+    static public int staticInt60378;
+    static public int staticInt60379;
+    static public int staticInt60380;
+    static public int staticInt60381;
+    static public int staticInt60382;
+    static public int staticInt60383;
+    static public int staticInt60384;
+    static public int staticInt60385;
+    static public int staticInt60386;
+    static public int staticInt60387;
+    static public int staticInt60388;
+    static public int staticInt60389;
+    static public int staticInt60390;
+    static public int staticInt60391;
+    static public int staticInt60392;
+    static public int staticInt60393;
+    static public int staticInt60394;
+    static public int staticInt60395;
+    static public int staticInt60396;
+    static public int staticInt60397;
+    static public int staticInt60398;
+    static public int staticInt60399;
+    static public int staticInt60400;
+    static public int staticInt60401;
+    static public int staticInt60402;
+    static public int staticInt60403;
+    static public int staticInt60404;
+    static public int staticInt60405;
+    static public int staticInt60406;
+    static public int staticInt60407;
+    static public int staticInt60408;
+    static public int staticInt60409;
+    static public int staticInt60410;
+    static public int staticInt60411;
+    static public int staticInt60412;
+    static public int staticInt60413;
+    static public int staticInt60414;
+    static public int staticInt60415;
+    static public int staticInt60416;
+    static public int staticInt60417;
+    static public int staticInt60418;
+    static public int staticInt60419;
+    static public int staticInt60420;
+    static public int staticInt60421;
+    static public int staticInt60422;
+    static public int staticInt60423;
+    static public int staticInt60424;
+    static public int staticInt60425;
+    static public int staticInt60426;
+    static public int staticInt60427;
+    static public int staticInt60428;
+    static public int staticInt60429;
+    static public int staticInt60430;
+    static public int staticInt60431;
+    static public int staticInt60432;
+    static public int staticInt60433;
+    static public int staticInt60434;
+    static public int staticInt60435;
+    static public int staticInt60436;
+    static public int staticInt60437;
+    static public int staticInt60438;
+    static public int staticInt60439;
+    static public int staticInt60440;
+    static public int staticInt60441;
+    static public int staticInt60442;
+    static public int staticInt60443;
+    static public int staticInt60444;
+    static public int staticInt60445;
+    static public int staticInt60446;
+    static public int staticInt60447;
+    static public int staticInt60448;
+    static public int staticInt60449;
+    static public int staticInt60450;
+    static public int staticInt60451;
+    static public int staticInt60452;
+    static public int staticInt60453;
+    static public int staticInt60454;
+    static public int staticInt60455;
+    static public int staticInt60456;
+    static public int staticInt60457;
+    static public int staticInt60458;
+    static public int staticInt60459;
+    static public int staticInt60460;
+    static public int staticInt60461;
+    static public int staticInt60462;
+    static public int staticInt60463;
+    static public int staticInt60464;
+    static public int staticInt60465;
+    static public int staticInt60466;
+    static public int staticInt60467;
+    static public int staticInt60468;
+    static public int staticInt60469;
+    static public int staticInt60470;
+    static public int staticInt60471;
+    static public int staticInt60472;
+    static public int staticInt60473;
+    static public int staticInt60474;
+    static public int staticInt60475;
+    static public int staticInt60476;
+    static public int staticInt60477;
+    static public int staticInt60478;
+    static public int staticInt60479;
+    static public int staticInt60480;
+    static public int staticInt60481;
+    static public int staticInt60482;
+    static public int staticInt60483;
+    static public int staticInt60484;
+    static public int staticInt60485;
+    static public int staticInt60486;
+    static public int staticInt60487;
+    static public int staticInt60488;
+    static public int staticInt60489;
+    static public int staticInt60490;
+    static public int staticInt60491;
+    static public int staticInt60492;
+    static public int staticInt60493;
+    static public int staticInt60494;
+    static public int staticInt60495;
+    static public int staticInt60496;
+    static public int staticInt60497;
+    static public int staticInt60498;
+    static public int staticInt60499;
+    static public int staticInt60500;
+    static public int staticInt60501;
+    static public int staticInt60502;
+    static public int staticInt60503;
+    static public int staticInt60504;
+    static public int staticInt60505;
+    static public int staticInt60506;
+    static public int staticInt60507;
+    static public int staticInt60508;
+    static public int staticInt60509;
+    static public int staticInt60510;
+    static public int staticInt60511;
+    static public int staticInt60512;
+    static public int staticInt60513;
+    static public int staticInt60514;
+    static public int staticInt60515;
+    static public int staticInt60516;
+    static public int staticInt60517;
+    static public int staticInt60518;
+    static public int staticInt60519;
+    static public int staticInt60520;
+    static public int staticInt60521;
+    static public int staticInt60522;
+    static public int staticInt60523;
+    static public int staticInt60524;
+    static public int staticInt60525;
+    static public int staticInt60526;
+    static public int staticInt60527;
+    static public int staticInt60528;
+    static public int staticInt60529;
+    static public int staticInt60530;
+    static public int staticInt60531;
+    static public int staticInt60532;
+    static public int staticInt60533;
+    static public int staticInt60534;
+    static public int staticInt60535;
+    static public int staticInt60536;
+    static public int staticInt60537;
+    static public int staticInt60538;
+    static public int staticInt60539;
+    static public int staticInt60540;
+    static public int staticInt60541;
+    static public int staticInt60542;
+    static public int staticInt60543;
+    static public int staticInt60544;
+    static public int staticInt60545;
+    static public int staticInt60546;
+    static public int staticInt60547;
+    static public int staticInt60548;
+    static public int staticInt60549;
+    static public int staticInt60550;
+    static public int staticInt60551;
+    static public int staticInt60552;
+    static public int staticInt60553;
+    static public int staticInt60554;
+    static public int staticInt60555;
+    static public int staticInt60556;
+    static public int staticInt60557;
+    static public int staticInt60558;
+    static public int staticInt60559;
+    static public int staticInt60560;
+    static public int staticInt60561;
+    static public int staticInt60562;
+    static public int staticInt60563;
+    static public int staticInt60564;
+    static public int staticInt60565;
+    static public int staticInt60566;
+    static public int staticInt60567;
+    static public int staticInt60568;
+    static public int staticInt60569;
+    static public int staticInt60570;
+    static public int staticInt60571;
+    static public int staticInt60572;
+    static public int staticInt60573;
+    static public int staticInt60574;
+    static public int staticInt60575;
+    static public int staticInt60576;
+    static public int staticInt60577;
+    static public int staticInt60578;
+    static public int staticInt60579;
+    static public int staticInt60580;
+    static public int staticInt60581;
+    static public int staticInt60582;
+    static public int staticInt60583;
+    static public int staticInt60584;
+    static public int staticInt60585;
+    static public int staticInt60586;
+    static public int staticInt60587;
+    static public int staticInt60588;
+    static public int staticInt60589;
+    static public int staticInt60590;
+    static public int staticInt60591;
+    static public int staticInt60592;
+    static public int staticInt60593;
+    static public int staticInt60594;
+    static public int staticInt60595;
+    static public int staticInt60596;
+    static public int staticInt60597;
+    static public int staticInt60598;
+    static public int staticInt60599;
+    static public int staticInt60600;
+    static public int staticInt60601;
+    static public int staticInt60602;
+    static public int staticInt60603;
+    static public int staticInt60604;
+    static public int staticInt60605;
+    static public int staticInt60606;
+    static public int staticInt60607;
+    static public int staticInt60608;
+    static public int staticInt60609;
+    static public int staticInt60610;
+    static public int staticInt60611;
+    static public int staticInt60612;
+    static public int staticInt60613;
+    static public int staticInt60614;
+    static public int staticInt60615;
+    static public int staticInt60616;
+    static public int staticInt60617;
+    static public int staticInt60618;
+    static public int staticInt60619;
+    static public int staticInt60620;
+    static public int staticInt60621;
+    static public int staticInt60622;
+    static public int staticInt60623;
+    static public int staticInt60624;
+    static public int staticInt60625;
+    static public int staticInt60626;
+    static public int staticInt60627;
+    static public int staticInt60628;
+    static public int staticInt60629;
+    static public int staticInt60630;
+    static public int staticInt60631;
+    static public int staticInt60632;
+    static public int staticInt60633;
+    static public int staticInt60634;
+    static public int staticInt60635;
+    static public int staticInt60636;
+    static public int staticInt60637;
+    static public int staticInt60638;
+    static public int staticInt60639;
+    static public int staticInt60640;
+    static public int staticInt60641;
+    static public int staticInt60642;
+    static public int staticInt60643;
+    static public int staticInt60644;
+    static public int staticInt60645;
+    static public int staticInt60646;
+    static public int staticInt60647;
+    static public int staticInt60648;
+    static public int staticInt60649;
+    static public int staticInt60650;
+    static public int staticInt60651;
+    static public int staticInt60652;
+    static public int staticInt60653;
+    static public int staticInt60654;
+    static public int staticInt60655;
+    static public int staticInt60656;
+    static public int staticInt60657;
+    static public int staticInt60658;
+    static public int staticInt60659;
+    static public int staticInt60660;
+    static public int staticInt60661;
+    static public int staticInt60662;
+    static public int staticInt60663;
+    static public int staticInt60664;
+    static public int staticInt60665;
+    static public int staticInt60666;
+    static public int staticInt60667;
+    static public int staticInt60668;
+    static public int staticInt60669;
+    static public int staticInt60670;
+    static public int staticInt60671;
+    static public int staticInt60672;
+    static public int staticInt60673;
+    static public int staticInt60674;
+    static public int staticInt60675;
+    static public int staticInt60676;
+    static public int staticInt60677;
+    static public int staticInt60678;
+    static public int staticInt60679;
+    static public int staticInt60680;
+    static public int staticInt60681;
+    static public int staticInt60682;
+    static public int staticInt60683;
+    static public int staticInt60684;
+    static public int staticInt60685;
+    static public int staticInt60686;
+    static public int staticInt60687;
+    static public int staticInt60688;
+    static public int staticInt60689;
+    static public int staticInt60690;
+    static public int staticInt60691;
+    static public int staticInt60692;
+    static public int staticInt60693;
+    static public int staticInt60694;
+    static public int staticInt60695;
+    static public int staticInt60696;
+    static public int staticInt60697;
+    static public int staticInt60698;
+    static public int staticInt60699;
+    static public int staticInt60700;
+    static public int staticInt60701;
+    static public int staticInt60702;
+    static public int staticInt60703;
+    static public int staticInt60704;
+    static public int staticInt60705;
+    static public int staticInt60706;
+    static public int staticInt60707;
+    static public int staticInt60708;
+    static public int staticInt60709;
+    static public int staticInt60710;
+    static public int staticInt60711;
+    static public int staticInt60712;
+    static public int staticInt60713;
+    static public int staticInt60714;
+    static public int staticInt60715;
+    static public int staticInt60716;
+    static public int staticInt60717;
+    static public int staticInt60718;
+    static public int staticInt60719;
+    static public int staticInt60720;
+    static public int staticInt60721;
+    static public int staticInt60722;
+    static public int staticInt60723;
+    static public int staticInt60724;
+    static public int staticInt60725;
+    static public int staticInt60726;
+    static public int staticInt60727;
+    static public int staticInt60728;
+    static public int staticInt60729;
+    static public int staticInt60730;
+    static public int staticInt60731;
+    static public int staticInt60732;
+    static public int staticInt60733;
+    static public int staticInt60734;
+    static public int staticInt60735;
+    static public int staticInt60736;
+    static public int staticInt60737;
+    static public int staticInt60738;
+    static public int staticInt60739;
+    static public int staticInt60740;
+    static public int staticInt60741;
+    static public int staticInt60742;
+    static public int staticInt60743;
+    static public int staticInt60744;
+    static public int staticInt60745;
+    static public int staticInt60746;
+    static public int staticInt60747;
+    static public int staticInt60748;
+    static public int staticInt60749;
+    static public int staticInt60750;
+    static public int staticInt60751;
+    static public int staticInt60752;
+    static public int staticInt60753;
+    static public int staticInt60754;
+    static public int staticInt60755;
+    static public int staticInt60756;
+    static public int staticInt60757;
+    static public int staticInt60758;
+    static public int staticInt60759;
+    static public int staticInt60760;
+    static public int staticInt60761;
+    static public int staticInt60762;
+    static public int staticInt60763;
+    static public int staticInt60764;
+    static public int staticInt60765;
+    static public int staticInt60766;
+    static public int staticInt60767;
+    static public int staticInt60768;
+    static public int staticInt60769;
+    static public int staticInt60770;
+    static public int staticInt60771;
+    static public int staticInt60772;
+    static public int staticInt60773;
+    static public int staticInt60774;
+    static public int staticInt60775;
+    static public int staticInt60776;
+    static public int staticInt60777;
+    static public int staticInt60778;
+    static public int staticInt60779;
+    static public int staticInt60780;
+    static public int staticInt60781;
+    static public int staticInt60782;
+    static public int staticInt60783;
+    static public int staticInt60784;
+    static public int staticInt60785;
+    static public int staticInt60786;
+    static public int staticInt60787;
+    static public int staticInt60788;
+    static public int staticInt60789;
+    static public int staticInt60790;
+    static public int staticInt60791;
+    static public int staticInt60792;
+    static public int staticInt60793;
+    static public int staticInt60794;
+    static public int staticInt60795;
+    static public int staticInt60796;
+    static public int staticInt60797;
+    static public int staticInt60798;
+    static public int staticInt60799;
+    static public int staticInt60800;
+    static public int staticInt60801;
+    static public int staticInt60802;
+    static public int staticInt60803;
+    static public int staticInt60804;
+    static public int staticInt60805;
+    static public int staticInt60806;
+    static public int staticInt60807;
+    static public int staticInt60808;
+    static public int staticInt60809;
+    static public int staticInt60810;
+    static public int staticInt60811;
+    static public int staticInt60812;
+    static public int staticInt60813;
+    static public int staticInt60814;
+    static public int staticInt60815;
+    static public int staticInt60816;
+    static public int staticInt60817;
+    static public int staticInt60818;
+    static public int staticInt60819;
+    static public int staticInt60820;
+    static public int staticInt60821;
+    static public int staticInt60822;
+    static public int staticInt60823;
+    static public int staticInt60824;
+    static public int staticInt60825;
+    static public int staticInt60826;
+    static public int staticInt60827;
+    static public int staticInt60828;
+    static public int staticInt60829;
+    static public int staticInt60830;
+    static public int staticInt60831;
+    static public int staticInt60832;
+    static public int staticInt60833;
+    static public int staticInt60834;
+    static public int staticInt60835;
+    static public int staticInt60836;
+    static public int staticInt60837;
+    static public int staticInt60838;
+    static public int staticInt60839;
+    static public int staticInt60840;
+    static public int staticInt60841;
+    static public int staticInt60842;
+    static public int staticInt60843;
+    static public int staticInt60844;
+    static public int staticInt60845;
+    static public int staticInt60846;
+    static public int staticInt60847;
+    static public int staticInt60848;
+    static public int staticInt60849;
+    static public int staticInt60850;
+    static public int staticInt60851;
+    static public int staticInt60852;
+    static public int staticInt60853;
+    static public int staticInt60854;
+    static public int staticInt60855;
+    static public int staticInt60856;
+    static public int staticInt60857;
+    static public int staticInt60858;
+    static public int staticInt60859;
+    static public int staticInt60860;
+    static public int staticInt60861;
+    static public int staticInt60862;
+    static public int staticInt60863;
+    static public int staticInt60864;
+    static public int staticInt60865;
+    static public int staticInt60866;
+    static public int staticInt60867;
+    static public int staticInt60868;
+    static public int staticInt60869;
+    static public int staticInt60870;
+    static public int staticInt60871;
+    static public int staticInt60872;
+    static public int staticInt60873;
+    static public int staticInt60874;
+    static public int staticInt60875;
+    static public int staticInt60876;
+    static public int staticInt60877;
+    static public int staticInt60878;
+    static public int staticInt60879;
+    static public int staticInt60880;
+    static public int staticInt60881;
+    static public int staticInt60882;
+    static public int staticInt60883;
+    static public int staticInt60884;
+    static public int staticInt60885;
+    static public int staticInt60886;
+    static public int staticInt60887;
+    static public int staticInt60888;
+    static public int staticInt60889;
+    static public int staticInt60890;
+    static public int staticInt60891;
+    static public int staticInt60892;
+    static public int staticInt60893;
+    static public int staticInt60894;
+    static public int staticInt60895;
+    static public int staticInt60896;
+    static public int staticInt60897;
+    static public int staticInt60898;
+    static public int staticInt60899;
+    static public int staticInt60900;
+    static public int staticInt60901;
+    static public int staticInt60902;
+    static public int staticInt60903;
+    static public int staticInt60904;
+    static public int staticInt60905;
+    static public int staticInt60906;
+    static public int staticInt60907;
+    static public int staticInt60908;
+    static public int staticInt60909;
+    static public int staticInt60910;
+    static public int staticInt60911;
+    static public int staticInt60912;
+    static public int staticInt60913;
+    static public int staticInt60914;
+    static public int staticInt60915;
+    static public int staticInt60916;
+    static public int staticInt60917;
+    static public int staticInt60918;
+    static public int staticInt60919;
+    static public int staticInt60920;
+    static public int staticInt60921;
+    static public int staticInt60922;
+    static public int staticInt60923;
+    static public int staticInt60924;
+    static public int staticInt60925;
+    static public int staticInt60926;
+    static public int staticInt60927;
+    static public int staticInt60928;
+    static public int staticInt60929;
+    static public int staticInt60930;
+    static public int staticInt60931;
+    static public int staticInt60932;
+    static public int staticInt60933;
+    static public int staticInt60934;
+    static public int staticInt60935;
+    static public int staticInt60936;
+    static public int staticInt60937;
+    static public int staticInt60938;
+    static public int staticInt60939;
+    static public int staticInt60940;
+    static public int staticInt60941;
+    static public int staticInt60942;
+    static public int staticInt60943;
+    static public int staticInt60944;
+    static public int staticInt60945;
+    static public int staticInt60946;
+    static public int staticInt60947;
+    static public int staticInt60948;
+    static public int staticInt60949;
+    static public int staticInt60950;
+    static public int staticInt60951;
+    static public int staticInt60952;
+    static public int staticInt60953;
+    static public int staticInt60954;
+    static public int staticInt60955;
+    static public int staticInt60956;
+    static public int staticInt60957;
+    static public int staticInt60958;
+    static public int staticInt60959;
+    static public int staticInt60960;
+    static public int staticInt60961;
+    static public int staticInt60962;
+    static public int staticInt60963;
+    static public int staticInt60964;
+    static public int staticInt60965;
+    static public int staticInt60966;
+    static public int staticInt60967;
+    static public int staticInt60968;
+    static public int staticInt60969;
+    static public int staticInt60970;
+    static public int staticInt60971;
+    static public int staticInt60972;
+    static public int staticInt60973;
+    static public int staticInt60974;
+    static public int staticInt60975;
+    static public int staticInt60976;
+    static public int staticInt60977;
+    static public int staticInt60978;
+    static public int staticInt60979;
+    static public int staticInt60980;
+    static public int staticInt60981;
+    static public int staticInt60982;
+    static public int staticInt60983;
+    static public int staticInt60984;
+    static public int staticInt60985;
+    static public int staticInt60986;
+    static public int staticInt60987;
+    static public int staticInt60988;
+    static public int staticInt60989;
+    static public int staticInt60990;
+    static public int staticInt60991;
+    static public int staticInt60992;
+    static public int staticInt60993;
+    static public int staticInt60994;
+    static public int staticInt60995;
+    static public int staticInt60996;
+    static public int staticInt60997;
+    static public int staticInt60998;
+    static public int staticInt60999;
+    static public int staticInt61000;
+    static public int staticInt61001;
+    static public int staticInt61002;
+    static public int staticInt61003;
+    static public int staticInt61004;
+    static public int staticInt61005;
+    static public int staticInt61006;
+    static public int staticInt61007;
+    static public int staticInt61008;
+    static public int staticInt61009;
+    static public int staticInt61010;
+    static public int staticInt61011;
+    static public int staticInt61012;
+    static public int staticInt61013;
+    static public int staticInt61014;
+    static public int staticInt61015;
+    static public int staticInt61016;
+    static public int staticInt61017;
+    static public int staticInt61018;
+    static public int staticInt61019;
+    static public int staticInt61020;
+    static public int staticInt61021;
+    static public int staticInt61022;
+    static public int staticInt61023;
+    static public int staticInt61024;
+    static public int staticInt61025;
+    static public int staticInt61026;
+    static public int staticInt61027;
+    static public int staticInt61028;
+    static public int staticInt61029;
+    static public int staticInt61030;
+    static public int staticInt61031;
+    static public int staticInt61032;
+    static public int staticInt61033;
+    static public int staticInt61034;
+    static public int staticInt61035;
+    static public int staticInt61036;
+    static public int staticInt61037;
+    static public int staticInt61038;
+    static public int staticInt61039;
+    static public int staticInt61040;
+    static public int staticInt61041;
+    static public int staticInt61042;
+    static public int staticInt61043;
+    static public int staticInt61044;
+    static public int staticInt61045;
+    static public int staticInt61046;
+    static public int staticInt61047;
+    static public int staticInt61048;
+    static public int staticInt61049;
+    static public int staticInt61050;
+    static public int staticInt61051;
+    static public int staticInt61052;
+    static public int staticInt61053;
+    static public int staticInt61054;
+    static public int staticInt61055;
+    static public int staticInt61056;
+    static public int staticInt61057;
+    static public int staticInt61058;
+    static public int staticInt61059;
+    static public int staticInt61060;
+    static public int staticInt61061;
+    static public int staticInt61062;
+    static public int staticInt61063;
+    static public int staticInt61064;
+    static public int staticInt61065;
+    static public int staticInt61066;
+    static public int staticInt61067;
+    static public int staticInt61068;
+    static public int staticInt61069;
+    static public int staticInt61070;
+    static public int staticInt61071;
+    static public int staticInt61072;
+    static public int staticInt61073;
+    static public int staticInt61074;
+    static public int staticInt61075;
+    static public int staticInt61076;
+    static public int staticInt61077;
+    static public int staticInt61078;
+    static public int staticInt61079;
+    static public int staticInt61080;
+    static public int staticInt61081;
+    static public int staticInt61082;
+    static public int staticInt61083;
+    static public int staticInt61084;
+    static public int staticInt61085;
+    static public int staticInt61086;
+    static public int staticInt61087;
+    static public int staticInt61088;
+    static public int staticInt61089;
+    static public int staticInt61090;
+    static public int staticInt61091;
+    static public int staticInt61092;
+    static public int staticInt61093;
+    static public int staticInt61094;
+    static public int staticInt61095;
+    static public int staticInt61096;
+    static public int staticInt61097;
+    static public int staticInt61098;
+    static public int staticInt61099;
+    static public int staticInt61100;
+    static public int staticInt61101;
+    static public int staticInt61102;
+    static public int staticInt61103;
+    static public int staticInt61104;
+    static public int staticInt61105;
+    static public int staticInt61106;
+    static public int staticInt61107;
+    static public int staticInt61108;
+    static public int staticInt61109;
+    static public int staticInt61110;
+    static public int staticInt61111;
+    static public int staticInt61112;
+    static public int staticInt61113;
+    static public int staticInt61114;
+    static public int staticInt61115;
+    static public int staticInt61116;
+    static public int staticInt61117;
+    static public int staticInt61118;
+    static public int staticInt61119;
+    static public int staticInt61120;
+    static public int staticInt61121;
+    static public int staticInt61122;
+    static public int staticInt61123;
+    static public int staticInt61124;
+    static public int staticInt61125;
+    static public int staticInt61126;
+    static public int staticInt61127;
+    static public int staticInt61128;
+    static public int staticInt61129;
+    static public int staticInt61130;
+    static public int staticInt61131;
+    static public int staticInt61132;
+    static public int staticInt61133;
+    static public int staticInt61134;
+    static public int staticInt61135;
+    static public int staticInt61136;
+    static public int staticInt61137;
+    static public int staticInt61138;
+    static public int staticInt61139;
+    static public int staticInt61140;
+    static public int staticInt61141;
+    static public int staticInt61142;
+    static public int staticInt61143;
+    static public int staticInt61144;
+    static public int staticInt61145;
+    static public int staticInt61146;
+    static public int staticInt61147;
+    static public int staticInt61148;
+    static public int staticInt61149;
+    static public int staticInt61150;
+    static public int staticInt61151;
+    static public int staticInt61152;
+    static public int staticInt61153;
+    static public int staticInt61154;
+    static public int staticInt61155;
+    static public int staticInt61156;
+    static public int staticInt61157;
+    static public int staticInt61158;
+    static public int staticInt61159;
+    static public int staticInt61160;
+    static public int staticInt61161;
+    static public int staticInt61162;
+    static public int staticInt61163;
+    static public int staticInt61164;
+    static public int staticInt61165;
+    static public int staticInt61166;
+    static public int staticInt61167;
+    static public int staticInt61168;
+    static public int staticInt61169;
+    static public int staticInt61170;
+    static public int staticInt61171;
+    static public int staticInt61172;
+    static public int staticInt61173;
+    static public int staticInt61174;
+    static public int staticInt61175;
+    static public int staticInt61176;
+    static public int staticInt61177;
+    static public int staticInt61178;
+    static public int staticInt61179;
+    static public int staticInt61180;
+    static public int staticInt61181;
+    static public int staticInt61182;
+    static public int staticInt61183;
+    static public int staticInt61184;
+    static public int staticInt61185;
+    static public int staticInt61186;
+    static public int staticInt61187;
+    static public int staticInt61188;
+    static public int staticInt61189;
+    static public int staticInt61190;
+    static public int staticInt61191;
+    static public int staticInt61192;
+    static public int staticInt61193;
+    static public int staticInt61194;
+    static public int staticInt61195;
+    static public int staticInt61196;
+    static public int staticInt61197;
+    static public int staticInt61198;
+    static public int staticInt61199;
+    static public int staticInt61200;
+    static public int staticInt61201;
+    static public int staticInt61202;
+    static public int staticInt61203;
+    static public int staticInt61204;
+    static public int staticInt61205;
+    static public int staticInt61206;
+    static public int staticInt61207;
+    static public int staticInt61208;
+    static public int staticInt61209;
+    static public int staticInt61210;
+    static public int staticInt61211;
+    static public int staticInt61212;
+    static public int staticInt61213;
+    static public int staticInt61214;
+    static public int staticInt61215;
+    static public int staticInt61216;
+    static public int staticInt61217;
+    static public int staticInt61218;
+    static public int staticInt61219;
+    static public int staticInt61220;
+    static public int staticInt61221;
+    static public int staticInt61222;
+    static public int staticInt61223;
+    static public int staticInt61224;
+    static public int staticInt61225;
+    static public int staticInt61226;
+    static public int staticInt61227;
+    static public int staticInt61228;
+    static public int staticInt61229;
+    static public int staticInt61230;
+    static public int staticInt61231;
+    static public int staticInt61232;
+    static public int staticInt61233;
+    static public int staticInt61234;
+    static public int staticInt61235;
+    static public int staticInt61236;
+    static public int staticInt61237;
+    static public int staticInt61238;
+    static public int staticInt61239;
+    static public int staticInt61240;
+    static public int staticInt61241;
+    static public int staticInt61242;
+    static public int staticInt61243;
+    static public int staticInt61244;
+    static public int staticInt61245;
+    static public int staticInt61246;
+    static public int staticInt61247;
+    static public int staticInt61248;
+    static public int staticInt61249;
+    static public int staticInt61250;
+    static public int staticInt61251;
+    static public int staticInt61252;
+    static public int staticInt61253;
+    static public int staticInt61254;
+    static public int staticInt61255;
+    static public int staticInt61256;
+    static public int staticInt61257;
+    static public int staticInt61258;
+    static public int staticInt61259;
+    static public int staticInt61260;
+    static public int staticInt61261;
+    static public int staticInt61262;
+    static public int staticInt61263;
+    static public int staticInt61264;
+    static public int staticInt61265;
+    static public int staticInt61266;
+    static public int staticInt61267;
+    static public int staticInt61268;
+    static public int staticInt61269;
+    static public int staticInt61270;
+    static public int staticInt61271;
+    static public int staticInt61272;
+    static public int staticInt61273;
+    static public int staticInt61274;
+    static public int staticInt61275;
+    static public int staticInt61276;
+    static public int staticInt61277;
+    static public int staticInt61278;
+    static public int staticInt61279;
+    static public int staticInt61280;
+    static public int staticInt61281;
+    static public int staticInt61282;
+    static public int staticInt61283;
+    static public int staticInt61284;
+    static public int staticInt61285;
+    static public int staticInt61286;
+    static public int staticInt61287;
+    static public int staticInt61288;
+    static public int staticInt61289;
+    static public int staticInt61290;
+    static public int staticInt61291;
+    static public int staticInt61292;
+    static public int staticInt61293;
+    static public int staticInt61294;
+    static public int staticInt61295;
+    static public int staticInt61296;
+    static public int staticInt61297;
+    static public int staticInt61298;
+    static public int staticInt61299;
+    static public int staticInt61300;
+    static public int staticInt61301;
+    static public int staticInt61302;
+    static public int staticInt61303;
+    static public int staticInt61304;
+    static public int staticInt61305;
+    static public int staticInt61306;
+    static public int staticInt61307;
+    static public int staticInt61308;
+    static public int staticInt61309;
+    static public int staticInt61310;
+    static public int staticInt61311;
+    static public int staticInt61312;
+    static public int staticInt61313;
+    static public int staticInt61314;
+    static public int staticInt61315;
+    static public int staticInt61316;
+    static public int staticInt61317;
+    static public int staticInt61318;
+    static public int staticInt61319;
+    static public int staticInt61320;
+    static public int staticInt61321;
+    static public int staticInt61322;
+    static public int staticInt61323;
+    static public int staticInt61324;
+    static public int staticInt61325;
+    static public int staticInt61326;
+    static public int staticInt61327;
+    static public int staticInt61328;
+    static public int staticInt61329;
+    static public int staticInt61330;
+    static public int staticInt61331;
+    static public int staticInt61332;
+    static public int staticInt61333;
+    static public int staticInt61334;
+    static public int staticInt61335;
+    static public int staticInt61336;
+    static public int staticInt61337;
+    static public int staticInt61338;
+    static public int staticInt61339;
+    static public int staticInt61340;
+    static public int staticInt61341;
+    static public int staticInt61342;
+    static public int staticInt61343;
+    static public int staticInt61344;
+    static public int staticInt61345;
+    static public int staticInt61346;
+    static public int staticInt61347;
+    static public int staticInt61348;
+    static public int staticInt61349;
+    static public int staticInt61350;
+    static public int staticInt61351;
+    static public int staticInt61352;
+    static public int staticInt61353;
+    static public int staticInt61354;
+    static public int staticInt61355;
+    static public int staticInt61356;
+    static public int staticInt61357;
+    static public int staticInt61358;
+    static public int staticInt61359;
+    static public int staticInt61360;
+    static public int staticInt61361;
+    static public int staticInt61362;
+    static public int staticInt61363;
+    static public int staticInt61364;
+    static public int staticInt61365;
+    static public int staticInt61366;
+    static public int staticInt61367;
+    static public int staticInt61368;
+    static public int staticInt61369;
+    static public int staticInt61370;
+    static public int staticInt61371;
+    static public int staticInt61372;
+    static public int staticInt61373;
+    static public int staticInt61374;
+    static public int staticInt61375;
+    static public int staticInt61376;
+    static public int staticInt61377;
+    static public int staticInt61378;
+    static public int staticInt61379;
+    static public int staticInt61380;
+    static public int staticInt61381;
+    static public int staticInt61382;
+    static public int staticInt61383;
+    static public int staticInt61384;
+    static public int staticInt61385;
+    static public int staticInt61386;
+    static public int staticInt61387;
+    static public int staticInt61388;
+    static public int staticInt61389;
+    static public int staticInt61390;
+    static public int staticInt61391;
+    static public int staticInt61392;
+    static public int staticInt61393;
+    static public int staticInt61394;
+    static public int staticInt61395;
+    static public int staticInt61396;
+    static public int staticInt61397;
+    static public int staticInt61398;
+    static public int staticInt61399;
+    static public int staticInt61400;
+    static public int staticInt61401;
+    static public int staticInt61402;
+    static public int staticInt61403;
+    static public int staticInt61404;
+    static public int staticInt61405;
+    static public int staticInt61406;
+    static public int staticInt61407;
+    static public int staticInt61408;
+    static public int staticInt61409;
+    static public int staticInt61410;
+    static public int staticInt61411;
+    static public int staticInt61412;
+    static public int staticInt61413;
+    static public int staticInt61414;
+    static public int staticInt61415;
+    static public int staticInt61416;
+    static public int staticInt61417;
+    static public int staticInt61418;
+    static public int staticInt61419;
+    static public int staticInt61420;
+    static public int staticInt61421;
+    static public int staticInt61422;
+    static public int staticInt61423;
+    static public int staticInt61424;
+    static public int staticInt61425;
+    static public int staticInt61426;
+    static public int staticInt61427;
+    static public int staticInt61428;
+    static public int staticInt61429;
+    static public int staticInt61430;
+    static public int staticInt61431;
+    static public int staticInt61432;
+    static public int staticInt61433;
+    static public int staticInt61434;
+    static public int staticInt61435;
+    static public int staticInt61436;
+    static public int staticInt61437;
+    static public int staticInt61438;
+    static public int staticInt61439;
+    static public int staticInt61440;
+    static public int staticInt61441;
+    static public int staticInt61442;
+    static public int staticInt61443;
+    static public int staticInt61444;
+    static public int staticInt61445;
+    static public int staticInt61446;
+    static public int staticInt61447;
+    static public int staticInt61448;
+    static public int staticInt61449;
+    static public int staticInt61450;
+    static public int staticInt61451;
+    static public int staticInt61452;
+    static public int staticInt61453;
+    static public int staticInt61454;
+    static public int staticInt61455;
+    static public int staticInt61456;
+    static public int staticInt61457;
+    static public int staticInt61458;
+    static public int staticInt61459;
+    static public int staticInt61460;
+    static public int staticInt61461;
+    static public int staticInt61462;
+    static public int staticInt61463;
+    static public int staticInt61464;
+    static public int staticInt61465;
+    static public int staticInt61466;
+    static public int staticInt61467;
+    static public int staticInt61468;
+    static public int staticInt61469;
+    static public int staticInt61470;
+    static public int staticInt61471;
+    static public int staticInt61472;
+    static public int staticInt61473;
+    static public int staticInt61474;
+    static public int staticInt61475;
+    static public int staticInt61476;
+    static public int staticInt61477;
+    static public int staticInt61478;
+    static public int staticInt61479;
+    static public int staticInt61480;
+    static public int staticInt61481;
+    static public int staticInt61482;
+    static public int staticInt61483;
+    static public int staticInt61484;
+    static public int staticInt61485;
+    static public int staticInt61486;
+    static public int staticInt61487;
+    static public int staticInt61488;
+    static public int staticInt61489;
+    static public int staticInt61490;
+    static public int staticInt61491;
+    static public int staticInt61492;
+    static public int staticInt61493;
+    static public int staticInt61494;
+    static public int staticInt61495;
+    static public int staticInt61496;
+    static public int staticInt61497;
+    static public int staticInt61498;
+    static public int staticInt61499;
+    static public int staticInt61500;
+    static public int staticInt61501;
+    static public int staticInt61502;
+    static public int staticInt61503;
+    static public int staticInt61504;
+    static public int staticInt61505;
+    static public int staticInt61506;
+    static public int staticInt61507;
+    static public int staticInt61508;
+    static public int staticInt61509;
+    static public int staticInt61510;
+    static public int staticInt61511;
+    static public int staticInt61512;
+    static public int staticInt61513;
+    static public int staticInt61514;
+    static public int staticInt61515;
+    static public int staticInt61516;
+    static public int staticInt61517;
+    static public int staticInt61518;
+    static public int staticInt61519;
+    static public int staticInt61520;
+    static public int staticInt61521;
+    static public int staticInt61522;
+    static public int staticInt61523;
+    static public int staticInt61524;
+    static public int staticInt61525;
+    static public int staticInt61526;
+    static public int staticInt61527;
+    static public int staticInt61528;
+    static public int staticInt61529;
+    static public int staticInt61530;
+    static public int staticInt61531;
+    static public int staticInt61532;
+    static public int staticInt61533;
+    static public int staticInt61534;
+    static public int staticInt61535;
+    static public int staticInt61536;
+    static public int staticInt61537;
+    static public int staticInt61538;
+    static public int staticInt61539;
+    static public int staticInt61540;
+    static public int staticInt61541;
+    static public int staticInt61542;
+    static public int staticInt61543;
+    static public int staticInt61544;
+    static public int staticInt61545;
+    static public int staticInt61546;
+    static public int staticInt61547;
+    static public int staticInt61548;
+    static public int staticInt61549;
+    static public int staticInt61550;
+    static public int staticInt61551;
+    static public int staticInt61552;
+    static public int staticInt61553;
+    static public int staticInt61554;
+    static public int staticInt61555;
+    static public int staticInt61556;
+    static public int staticInt61557;
+    static public int staticInt61558;
+    static public int staticInt61559;
+    static public int staticInt61560;
+    static public int staticInt61561;
+    static public int staticInt61562;
+    static public int staticInt61563;
+    static public int staticInt61564;
+    static public int staticInt61565;
+    static public int staticInt61566;
+    static public int staticInt61567;
+    static public int staticInt61568;
+    static public int staticInt61569;
+    static public int staticInt61570;
+    static public int staticInt61571;
+    static public int staticInt61572;
+    static public int staticInt61573;
+    static public int staticInt61574;
+    static public int staticInt61575;
+    static public int staticInt61576;
+    static public int staticInt61577;
+    static public int staticInt61578;
+    static public int staticInt61579;
+    static public int staticInt61580;
+    static public int staticInt61581;
+    static public int staticInt61582;
+    static public int staticInt61583;
+    static public int staticInt61584;
+    static public int staticInt61585;
+    static public int staticInt61586;
+    static public int staticInt61587;
+    static public int staticInt61588;
+    static public int staticInt61589;
+    static public int staticInt61590;
+    static public int staticInt61591;
+    static public int staticInt61592;
+    static public int staticInt61593;
+    static public int staticInt61594;
+    static public int staticInt61595;
+    static public int staticInt61596;
+    static public int staticInt61597;
+    static public int staticInt61598;
+    static public int staticInt61599;
+    static public int staticInt61600;
+    static public int staticInt61601;
+    static public int staticInt61602;
+    static public int staticInt61603;
+    static public int staticInt61604;
+    static public int staticInt61605;
+    static public int staticInt61606;
+    static public int staticInt61607;
+    static public int staticInt61608;
+    static public int staticInt61609;
+    static public int staticInt61610;
+    static public int staticInt61611;
+    static public int staticInt61612;
+    static public int staticInt61613;
+    static public int staticInt61614;
+    static public int staticInt61615;
+    static public int staticInt61616;
+    static public int staticInt61617;
+    static public int staticInt61618;
+    static public int staticInt61619;
+    static public int staticInt61620;
+    static public int staticInt61621;
+    static public int staticInt61622;
+    static public int staticInt61623;
+    static public int staticInt61624;
+    static public int staticInt61625;
+    static public int staticInt61626;
+    static public int staticInt61627;
+    static public int staticInt61628;
+    static public int staticInt61629;
+    static public int staticInt61630;
+    static public int staticInt61631;
+    static public int staticInt61632;
+    static public int staticInt61633;
+    static public int staticInt61634;
+    static public int staticInt61635;
+    static public int staticInt61636;
+    static public int staticInt61637;
+    static public int staticInt61638;
+    static public int staticInt61639;
+    static public int staticInt61640;
+    static public int staticInt61641;
+    static public int staticInt61642;
+    static public int staticInt61643;
+    static public int staticInt61644;
+    static public int staticInt61645;
+    static public int staticInt61646;
+    static public int staticInt61647;
+    static public int staticInt61648;
+    static public int staticInt61649;
+    static public int staticInt61650;
+    static public int staticInt61651;
+    static public int staticInt61652;
+    static public int staticInt61653;
+    static public int staticInt61654;
+    static public int staticInt61655;
+    static public int staticInt61656;
+    static public int staticInt61657;
+    static public int staticInt61658;
+    static public int staticInt61659;
+    static public int staticInt61660;
+    static public int staticInt61661;
+    static public int staticInt61662;
+    static public int staticInt61663;
+    static public int staticInt61664;
+    static public int staticInt61665;
+    static public int staticInt61666;
+    static public int staticInt61667;
+    static public int staticInt61668;
+    static public int staticInt61669;
+    static public int staticInt61670;
+    static public int staticInt61671;
+    static public int staticInt61672;
+    static public int staticInt61673;
+    static public int staticInt61674;
+    static public int staticInt61675;
+    static public int staticInt61676;
+    static public int staticInt61677;
+    static public int staticInt61678;
+    static public int staticInt61679;
+    static public int staticInt61680;
+    static public int staticInt61681;
+    static public int staticInt61682;
+    static public int staticInt61683;
+    static public int staticInt61684;
+    static public int staticInt61685;
+    static public int staticInt61686;
+    static public int staticInt61687;
+    static public int staticInt61688;
+    static public int staticInt61689;
+    static public int staticInt61690;
+    static public int staticInt61691;
+    static public int staticInt61692;
+    static public int staticInt61693;
+    static public int staticInt61694;
+    static public int staticInt61695;
+    static public int staticInt61696;
+    static public int staticInt61697;
+    static public int staticInt61698;
+    static public int staticInt61699;
+    static public int staticInt61700;
+    static public int staticInt61701;
+    static public int staticInt61702;
+    static public int staticInt61703;
+    static public int staticInt61704;
+    static public int staticInt61705;
+    static public int staticInt61706;
+    static public int staticInt61707;
+    static public int staticInt61708;
+    static public int staticInt61709;
+    static public int staticInt61710;
+    static public int staticInt61711;
+    static public int staticInt61712;
+    static public int staticInt61713;
+    static public int staticInt61714;
+    static public int staticInt61715;
+    static public int staticInt61716;
+    static public int staticInt61717;
+    static public int staticInt61718;
+    static public int staticInt61719;
+    static public int staticInt61720;
+    static public int staticInt61721;
+    static public int staticInt61722;
+    static public int staticInt61723;
+    static public int staticInt61724;
+    static public int staticInt61725;
+    static public int staticInt61726;
+    static public int staticInt61727;
+    static public int staticInt61728;
+    static public int staticInt61729;
+    static public int staticInt61730;
+    static public int staticInt61731;
+    static public int staticInt61732;
+    static public int staticInt61733;
+    static public int staticInt61734;
+    static public int staticInt61735;
+    static public int staticInt61736;
+    static public int staticInt61737;
+    static public int staticInt61738;
+    static public int staticInt61739;
+    static public int staticInt61740;
+    static public int staticInt61741;
+    static public int staticInt61742;
+    static public int staticInt61743;
+    static public int staticInt61744;
+    static public int staticInt61745;
+    static public int staticInt61746;
+    static public int staticInt61747;
+    static public int staticInt61748;
+    static public int staticInt61749;
+    static public int staticInt61750;
+    static public int staticInt61751;
+    static public int staticInt61752;
+    static public int staticInt61753;
+    static public int staticInt61754;
+    static public int staticInt61755;
+    static public int staticInt61756;
+    static public int staticInt61757;
+    static public int staticInt61758;
+    static public int staticInt61759;
+    static public int staticInt61760;
+    static public int staticInt61761;
+    static public int staticInt61762;
+    static public int staticInt61763;
+    static public int staticInt61764;
+    static public int staticInt61765;
+    static public int staticInt61766;
+    static public int staticInt61767;
+    static public int staticInt61768;
+    static public int staticInt61769;
+    static public int staticInt61770;
+    static public int staticInt61771;
+    static public int staticInt61772;
+    static public int staticInt61773;
+    static public int staticInt61774;
+    static public int staticInt61775;
+    static public int staticInt61776;
+    static public int staticInt61777;
+    static public int staticInt61778;
+    static public int staticInt61779;
+    static public int staticInt61780;
+    static public int staticInt61781;
+    static public int staticInt61782;
+    static public int staticInt61783;
+    static public int staticInt61784;
+    static public int staticInt61785;
+    static public int staticInt61786;
+    static public int staticInt61787;
+    static public int staticInt61788;
+    static public int staticInt61789;
+    static public int staticInt61790;
+    static public int staticInt61791;
+    static public int staticInt61792;
+    static public int staticInt61793;
+    static public int staticInt61794;
+    static public int staticInt61795;
+    static public int staticInt61796;
+    static public int staticInt61797;
+    static public int staticInt61798;
+    static public int staticInt61799;
+    static public int staticInt61800;
+    static public int staticInt61801;
+    static public int staticInt61802;
+    static public int staticInt61803;
+    static public int staticInt61804;
+    static public int staticInt61805;
+    static public int staticInt61806;
+    static public int staticInt61807;
+    static public int staticInt61808;
+    static public int staticInt61809;
+    static public int staticInt61810;
+    static public int staticInt61811;
+    static public int staticInt61812;
+    static public int staticInt61813;
+    static public int staticInt61814;
+    static public int staticInt61815;
+    static public int staticInt61816;
+    static public int staticInt61817;
+    static public int staticInt61818;
+    static public int staticInt61819;
+    static public int staticInt61820;
+    static public int staticInt61821;
+    static public int staticInt61822;
+    static public int staticInt61823;
+    static public int staticInt61824;
+    static public int staticInt61825;
+    static public int staticInt61826;
+    static public int staticInt61827;
+    static public int staticInt61828;
+    static public int staticInt61829;
+    static public int staticInt61830;
+    static public int staticInt61831;
+    static public int staticInt61832;
+    static public int staticInt61833;
+    static public int staticInt61834;
+    static public int staticInt61835;
+    static public int staticInt61836;
+    static public int staticInt61837;
+    static public int staticInt61838;
+    static public int staticInt61839;
+    static public int staticInt61840;
+    static public int staticInt61841;
+    static public int staticInt61842;
+    static public int staticInt61843;
+    static public int staticInt61844;
+    static public int staticInt61845;
+    static public int staticInt61846;
+    static public int staticInt61847;
+    static public int staticInt61848;
+    static public int staticInt61849;
+    static public int staticInt61850;
+    static public int staticInt61851;
+    static public int staticInt61852;
+    static public int staticInt61853;
+    static public int staticInt61854;
+    static public int staticInt61855;
+    static public int staticInt61856;
+    static public int staticInt61857;
+    static public int staticInt61858;
+    static public int staticInt61859;
+    static public int staticInt61860;
+    static public int staticInt61861;
+    static public int staticInt61862;
+    static public int staticInt61863;
+    static public int staticInt61864;
+    static public int staticInt61865;
+    static public int staticInt61866;
+    static public int staticInt61867;
+    static public int staticInt61868;
+    static public int staticInt61869;
+    static public int staticInt61870;
+    static public int staticInt61871;
+    static public int staticInt61872;
+    static public int staticInt61873;
+    static public int staticInt61874;
+    static public int staticInt61875;
+    static public int staticInt61876;
+    static public int staticInt61877;
+    static public int staticInt61878;
+    static public int staticInt61879;
+    static public int staticInt61880;
+    static public int staticInt61881;
+    static public int staticInt61882;
+    static public int staticInt61883;
+    static public int staticInt61884;
+    static public int staticInt61885;
+    static public int staticInt61886;
+    static public int staticInt61887;
+    static public int staticInt61888;
+    static public int staticInt61889;
+    static public int staticInt61890;
+    static public int staticInt61891;
+    static public int staticInt61892;
+    static public int staticInt61893;
+    static public int staticInt61894;
+    static public int staticInt61895;
+    static public int staticInt61896;
+    static public int staticInt61897;
+    static public int staticInt61898;
+    static public int staticInt61899;
+    static public int staticInt61900;
+    static public int staticInt61901;
+    static public int staticInt61902;
+    static public int staticInt61903;
+    static public int staticInt61904;
+    static public int staticInt61905;
+    static public int staticInt61906;
+    static public int staticInt61907;
+    static public int staticInt61908;
+    static public int staticInt61909;
+    static public int staticInt61910;
+    static public int staticInt61911;
+    static public int staticInt61912;
+    static public int staticInt61913;
+    static public int staticInt61914;
+    static public int staticInt61915;
+    static public int staticInt61916;
+    static public int staticInt61917;
+    static public int staticInt61918;
+    static public int staticInt61919;
+    static public int staticInt61920;
+    static public int staticInt61921;
+    static public int staticInt61922;
+    static public int staticInt61923;
+    static public int staticInt61924;
+    static public int staticInt61925;
+    static public int staticInt61926;
+    static public int staticInt61927;
+    static public int staticInt61928;
+    static public int staticInt61929;
+    static public int staticInt61930;
+    static public int staticInt61931;
+    static public int staticInt61932;
+    static public int staticInt61933;
+    static public int staticInt61934;
+    static public int staticInt61935;
+    static public int staticInt61936;
+    static public int staticInt61937;
+    static public int staticInt61938;
+    static public int staticInt61939;
+    static public int staticInt61940;
+    static public int staticInt61941;
+    static public int staticInt61942;
+    static public int staticInt61943;
+    static public int staticInt61944;
+    static public int staticInt61945;
+    static public int staticInt61946;
+    static public int staticInt61947;
+    static public int staticInt61948;
+    static public int staticInt61949;
+    static public int staticInt61950;
+    static public int staticInt61951;
+    static public int staticInt61952;
+    static public int staticInt61953;
+    static public int staticInt61954;
+    static public int staticInt61955;
+    static public int staticInt61956;
+    static public int staticInt61957;
+    static public int staticInt61958;
+    static public int staticInt61959;
+    static public int staticInt61960;
+    static public int staticInt61961;
+    static public int staticInt61962;
+    static public int staticInt61963;
+    static public int staticInt61964;
+    static public int staticInt61965;
+    static public int staticInt61966;
+    static public int staticInt61967;
+    static public int staticInt61968;
+    static public int staticInt61969;
+    static public int staticInt61970;
+    static public int staticInt61971;
+    static public int staticInt61972;
+    static public int staticInt61973;
+    static public int staticInt61974;
+    static public int staticInt61975;
+    static public int staticInt61976;
+    static public int staticInt61977;
+    static public int staticInt61978;
+    static public int staticInt61979;
+    static public int staticInt61980;
+    static public int staticInt61981;
+    static public int staticInt61982;
+    static public int staticInt61983;
+    static public int staticInt61984;
+    static public int staticInt61985;
+    static public int staticInt61986;
+    static public int staticInt61987;
+    static public int staticInt61988;
+    static public int staticInt61989;
+    static public int staticInt61990;
+    static public int staticInt61991;
+    static public int staticInt61992;
+    static public int staticInt61993;
+    static public int staticInt61994;
+    static public int staticInt61995;
+    static public int staticInt61996;
+    static public int staticInt61997;
+    static public int staticInt61998;
+    static public int staticInt61999;
+    static public int staticInt62000;
+    static public int staticInt62001;
+    static public int staticInt62002;
+    static public int staticInt62003;
+    static public int staticInt62004;
+    static public int staticInt62005;
+    static public int staticInt62006;
+    static public int staticInt62007;
+    static public int staticInt62008;
+    static public int staticInt62009;
+    static public int staticInt62010;
+    static public int staticInt62011;
+    static public int staticInt62012;
+    static public int staticInt62013;
+    static public int staticInt62014;
+    static public int staticInt62015;
+    static public int staticInt62016;
+    static public int staticInt62017;
+    static public int staticInt62018;
+    static public int staticInt62019;
+    static public int staticInt62020;
+    static public int staticInt62021;
+    static public int staticInt62022;
+    static public int staticInt62023;
+    static public int staticInt62024;
+    static public int staticInt62025;
+    static public int staticInt62026;
+    static public int staticInt62027;
+    static public int staticInt62028;
+    static public int staticInt62029;
+    static public int staticInt62030;
+    static public int staticInt62031;
+    static public int staticInt62032;
+    static public int staticInt62033;
+    static public int staticInt62034;
+    static public int staticInt62035;
+    static public int staticInt62036;
+    static public int staticInt62037;
+    static public int staticInt62038;
+    static public int staticInt62039;
+    static public int staticInt62040;
+    static public int staticInt62041;
+    static public int staticInt62042;
+    static public int staticInt62043;
+    static public int staticInt62044;
+    static public int staticInt62045;
+    static public int staticInt62046;
+    static public int staticInt62047;
+    static public int staticInt62048;
+    static public int staticInt62049;
+    static public int staticInt62050;
+    static public int staticInt62051;
+    static public int staticInt62052;
+    static public int staticInt62053;
+    static public int staticInt62054;
+    static public int staticInt62055;
+    static public int staticInt62056;
+    static public int staticInt62057;
+    static public int staticInt62058;
+    static public int staticInt62059;
+    static public int staticInt62060;
+    static public int staticInt62061;
+    static public int staticInt62062;
+    static public int staticInt62063;
+    static public int staticInt62064;
+    static public int staticInt62065;
+    static public int staticInt62066;
+    static public int staticInt62067;
+    static public int staticInt62068;
+    static public int staticInt62069;
+    static public int staticInt62070;
+    static public int staticInt62071;
+    static public int staticInt62072;
+    static public int staticInt62073;
+    static public int staticInt62074;
+    static public int staticInt62075;
+    static public int staticInt62076;
+    static public int staticInt62077;
+    static public int staticInt62078;
+    static public int staticInt62079;
+    static public int staticInt62080;
+    static public int staticInt62081;
+    static public int staticInt62082;
+    static public int staticInt62083;
+    static public int staticInt62084;
+    static public int staticInt62085;
+    static public int staticInt62086;
+    static public int staticInt62087;
+    static public int staticInt62088;
+    static public int staticInt62089;
+    static public int staticInt62090;
+    static public int staticInt62091;
+    static public int staticInt62092;
+    static public int staticInt62093;
+    static public int staticInt62094;
+    static public int staticInt62095;
+    static public int staticInt62096;
+    static public int staticInt62097;
+    static public int staticInt62098;
+    static public int staticInt62099;
+    static public int staticInt62100;
+    static public int staticInt62101;
+    static public int staticInt62102;
+    static public int staticInt62103;
+    static public int staticInt62104;
+    static public int staticInt62105;
+    static public int staticInt62106;
+    static public int staticInt62107;
+    static public int staticInt62108;
+    static public int staticInt62109;
+    static public int staticInt62110;
+    static public int staticInt62111;
+    static public int staticInt62112;
+    static public int staticInt62113;
+    static public int staticInt62114;
+    static public int staticInt62115;
+    static public int staticInt62116;
+    static public int staticInt62117;
+    static public int staticInt62118;
+    static public int staticInt62119;
+    static public int staticInt62120;
+    static public int staticInt62121;
+    static public int staticInt62122;
+    static public int staticInt62123;
+    static public int staticInt62124;
+    static public int staticInt62125;
+    static public int staticInt62126;
+    static public int staticInt62127;
+    static public int staticInt62128;
+    static public int staticInt62129;
+    static public int staticInt62130;
+    static public int staticInt62131;
+    static public int staticInt62132;
+    static public int staticInt62133;
+    static public int staticInt62134;
+    static public int staticInt62135;
+    static public int staticInt62136;
+    static public int staticInt62137;
+    static public int staticInt62138;
+    static public int staticInt62139;
+    static public int staticInt62140;
+    static public int staticInt62141;
+    static public int staticInt62142;
+    static public int staticInt62143;
+    static public int staticInt62144;
+    static public int staticInt62145;
+    static public int staticInt62146;
+    static public int staticInt62147;
+    static public int staticInt62148;
+    static public int staticInt62149;
+    static public int staticInt62150;
+    static public int staticInt62151;
+    static public int staticInt62152;
+    static public int staticInt62153;
+    static public int staticInt62154;
+    static public int staticInt62155;
+    static public int staticInt62156;
+    static public int staticInt62157;
+    static public int staticInt62158;
+    static public int staticInt62159;
+    static public int staticInt62160;
+    static public int staticInt62161;
+    static public int staticInt62162;
+    static public int staticInt62163;
+    static public int staticInt62164;
+    static public int staticInt62165;
+    static public int staticInt62166;
+    static public int staticInt62167;
+    static public int staticInt62168;
+    static public int staticInt62169;
+    static public int staticInt62170;
+    static public int staticInt62171;
+    static public int staticInt62172;
+    static public int staticInt62173;
+    static public int staticInt62174;
+    static public int staticInt62175;
+    static public int staticInt62176;
+    static public int staticInt62177;
+    static public int staticInt62178;
+    static public int staticInt62179;
+    static public int staticInt62180;
+    static public int staticInt62181;
+    static public int staticInt62182;
+    static public int staticInt62183;
+    static public int staticInt62184;
+    static public int staticInt62185;
+    static public int staticInt62186;
+    static public int staticInt62187;
+    static public int staticInt62188;
+    static public int staticInt62189;
+    static public int staticInt62190;
+    static public int staticInt62191;
+    static public int staticInt62192;
+    static public int staticInt62193;
+    static public int staticInt62194;
+    static public int staticInt62195;
+    static public int staticInt62196;
+    static public int staticInt62197;
+    static public int staticInt62198;
+    static public int staticInt62199;
+    static public int staticInt62200;
+    static public int staticInt62201;
+    static public int staticInt62202;
+    static public int staticInt62203;
+    static public int staticInt62204;
+    static public int staticInt62205;
+    static public int staticInt62206;
+    static public int staticInt62207;
+    static public int staticInt62208;
+    static public int staticInt62209;
+    static public int staticInt62210;
+    static public int staticInt62211;
+    static public int staticInt62212;
+    static public int staticInt62213;
+    static public int staticInt62214;
+    static public int staticInt62215;
+    static public int staticInt62216;
+    static public int staticInt62217;
+    static public int staticInt62218;
+    static public int staticInt62219;
+    static public int staticInt62220;
+    static public int staticInt62221;
+    static public int staticInt62222;
+    static public int staticInt62223;
+    static public int staticInt62224;
+    static public int staticInt62225;
+    static public int staticInt62226;
+    static public int staticInt62227;
+    static public int staticInt62228;
+    static public int staticInt62229;
+    static public int staticInt62230;
+    static public int staticInt62231;
+    static public int staticInt62232;
+    static public int staticInt62233;
+    static public int staticInt62234;
+    static public int staticInt62235;
+    static public int staticInt62236;
+    static public int staticInt62237;
+    static public int staticInt62238;
+    static public int staticInt62239;
+    static public int staticInt62240;
+    static public int staticInt62241;
+    static public int staticInt62242;
+    static public int staticInt62243;
+    static public int staticInt62244;
+    static public int staticInt62245;
+    static public int staticInt62246;
+    static public int staticInt62247;
+    static public int staticInt62248;
+    static public int staticInt62249;
+    static public int staticInt62250;
+    static public int staticInt62251;
+    static public int staticInt62252;
+    static public int staticInt62253;
+    static public int staticInt62254;
+    static public int staticInt62255;
+    static public int staticInt62256;
+    static public int staticInt62257;
+    static public int staticInt62258;
+    static public int staticInt62259;
+    static public int staticInt62260;
+    static public int staticInt62261;
+    static public int staticInt62262;
+    static public int staticInt62263;
+    static public int staticInt62264;
+    static public int staticInt62265;
+    static public int staticInt62266;
+    static public int staticInt62267;
+    static public int staticInt62268;
+    static public int staticInt62269;
+    static public int staticInt62270;
+    static public int staticInt62271;
+    static public int staticInt62272;
+    static public int staticInt62273;
+    static public int staticInt62274;
+    static public int staticInt62275;
+    static public int staticInt62276;
+    static public int staticInt62277;
+    static public int staticInt62278;
+    static public int staticInt62279;
+    static public int staticInt62280;
+    static public int staticInt62281;
+    static public int staticInt62282;
+    static public int staticInt62283;
+    static public int staticInt62284;
+    static public int staticInt62285;
+    static public int staticInt62286;
+    static public int staticInt62287;
+    static public int staticInt62288;
+    static public int staticInt62289;
+    static public int staticInt62290;
+    static public int staticInt62291;
+    static public int staticInt62292;
+    static public int staticInt62293;
+    static public int staticInt62294;
+    static public int staticInt62295;
+    static public int staticInt62296;
+    static public int staticInt62297;
+    static public int staticInt62298;
+    static public int staticInt62299;
+    static public int staticInt62300;
+    static public int staticInt62301;
+    static public int staticInt62302;
+    static public int staticInt62303;
+    static public int staticInt62304;
+    static public int staticInt62305;
+    static public int staticInt62306;
+    static public int staticInt62307;
+    static public int staticInt62308;
+    static public int staticInt62309;
+    static public int staticInt62310;
+    static public int staticInt62311;
+    static public int staticInt62312;
+    static public int staticInt62313;
+    static public int staticInt62314;
+    static public int staticInt62315;
+    static public int staticInt62316;
+    static public int staticInt62317;
+    static public int staticInt62318;
+    static public int staticInt62319;
+    static public int staticInt62320;
+    static public int staticInt62321;
+    static public int staticInt62322;
+    static public int staticInt62323;
+    static public int staticInt62324;
+    static public int staticInt62325;
+    static public int staticInt62326;
+    static public int staticInt62327;
+    static public int staticInt62328;
+    static public int staticInt62329;
+    static public int staticInt62330;
+    static public int staticInt62331;
+    static public int staticInt62332;
+    static public int staticInt62333;
+    static public int staticInt62334;
+    static public int staticInt62335;
+    static public int staticInt62336;
+    static public int staticInt62337;
+    static public int staticInt62338;
+    static public int staticInt62339;
+    static public int staticInt62340;
+    static public int staticInt62341;
+    static public int staticInt62342;
+    static public int staticInt62343;
+    static public int staticInt62344;
+    static public int staticInt62345;
+    static public int staticInt62346;
+    static public int staticInt62347;
+    static public int staticInt62348;
+    static public int staticInt62349;
+    static public int staticInt62350;
+    static public int staticInt62351;
+    static public int staticInt62352;
+    static public int staticInt62353;
+    static public int staticInt62354;
+    static public int staticInt62355;
+    static public int staticInt62356;
+    static public int staticInt62357;
+    static public int staticInt62358;
+    static public int staticInt62359;
+    static public int staticInt62360;
+    static public int staticInt62361;
+    static public int staticInt62362;
+    static public int staticInt62363;
+    static public int staticInt62364;
+    static public int staticInt62365;
+    static public int staticInt62366;
+    static public int staticInt62367;
+    static public int staticInt62368;
+    static public int staticInt62369;
+    static public int staticInt62370;
+    static public int staticInt62371;
+    static public int staticInt62372;
+    static public int staticInt62373;
+    static public int staticInt62374;
+    static public int staticInt62375;
+    static public int staticInt62376;
+    static public int staticInt62377;
+    static public int staticInt62378;
+    static public int staticInt62379;
+    static public int staticInt62380;
+    static public int staticInt62381;
+    static public int staticInt62382;
+    static public int staticInt62383;
+    static public int staticInt62384;
+    static public int staticInt62385;
+    static public int staticInt62386;
+    static public int staticInt62387;
+    static public int staticInt62388;
+    static public int staticInt62389;
+    static public int staticInt62390;
+    static public int staticInt62391;
+    static public int staticInt62392;
+    static public int staticInt62393;
+    static public int staticInt62394;
+    static public int staticInt62395;
+    static public int staticInt62396;
+    static public int staticInt62397;
+    static public int staticInt62398;
+    static public int staticInt62399;
+    static public int staticInt62400;
+    static public int staticInt62401;
+    static public int staticInt62402;
+    static public int staticInt62403;
+    static public int staticInt62404;
+    static public int staticInt62405;
+    static public int staticInt62406;
+    static public int staticInt62407;
+    static public int staticInt62408;
+    static public int staticInt62409;
+    static public int staticInt62410;
+    static public int staticInt62411;
+    static public int staticInt62412;
+    static public int staticInt62413;
+    static public int staticInt62414;
+    static public int staticInt62415;
+    static public int staticInt62416;
+    static public int staticInt62417;
+    static public int staticInt62418;
+    static public int staticInt62419;
+    static public int staticInt62420;
+    static public int staticInt62421;
+    static public int staticInt62422;
+    static public int staticInt62423;
+    static public int staticInt62424;
+    static public int staticInt62425;
+    static public int staticInt62426;
+    static public int staticInt62427;
+    static public int staticInt62428;
+    static public int staticInt62429;
+    static public int staticInt62430;
+    static public int staticInt62431;
+    static public int staticInt62432;
+    static public int staticInt62433;
+    static public int staticInt62434;
+    static public int staticInt62435;
+    static public int staticInt62436;
+    static public int staticInt62437;
+    static public int staticInt62438;
+    static public int staticInt62439;
+    static public int staticInt62440;
+    static public int staticInt62441;
+    static public int staticInt62442;
+    static public int staticInt62443;
+    static public int staticInt62444;
+    static public int staticInt62445;
+    static public int staticInt62446;
+    static public int staticInt62447;
+    static public int staticInt62448;
+    static public int staticInt62449;
+    static public int staticInt62450;
+    static public int staticInt62451;
+    static public int staticInt62452;
+    static public int staticInt62453;
+    static public int staticInt62454;
+    static public int staticInt62455;
+    static public int staticInt62456;
+    static public int staticInt62457;
+    static public int staticInt62458;
+    static public int staticInt62459;
+    static public int staticInt62460;
+    static public int staticInt62461;
+    static public int staticInt62462;
+    static public int staticInt62463;
+    static public int staticInt62464;
+    static public int staticInt62465;
+    static public int staticInt62466;
+    static public int staticInt62467;
+    static public int staticInt62468;
+    static public int staticInt62469;
+    static public int staticInt62470;
+    static public int staticInt62471;
+    static public int staticInt62472;
+    static public int staticInt62473;
+    static public int staticInt62474;
+    static public int staticInt62475;
+    static public int staticInt62476;
+    static public int staticInt62477;
+    static public int staticInt62478;
+    static public int staticInt62479;
+    static public int staticInt62480;
+    static public int staticInt62481;
+    static public int staticInt62482;
+    static public int staticInt62483;
+    static public int staticInt62484;
+    static public int staticInt62485;
+    static public int staticInt62486;
+    static public int staticInt62487;
+    static public int staticInt62488;
+    static public int staticInt62489;
+    static public int staticInt62490;
+    static public int staticInt62491;
+    static public int staticInt62492;
+    static public int staticInt62493;
+    static public int staticInt62494;
+    static public int staticInt62495;
+    static public int staticInt62496;
+    static public int staticInt62497;
+    static public int staticInt62498;
+    static public int staticInt62499;
+    static public int staticInt62500;
+    static public int staticInt62501;
+    static public int staticInt62502;
+    static public int staticInt62503;
+    static public int staticInt62504;
+    static public int staticInt62505;
+    static public int staticInt62506;
+    static public int staticInt62507;
+    static public int staticInt62508;
+    static public int staticInt62509;
+    static public int staticInt62510;
+    static public int staticInt62511;
+    static public int staticInt62512;
+    static public int staticInt62513;
+    static public int staticInt62514;
+    static public int staticInt62515;
+    static public int staticInt62516;
+    static public int staticInt62517;
+    static public int staticInt62518;
+    static public int staticInt62519;
+    static public int staticInt62520;
+    static public int staticInt62521;
+    static public int staticInt62522;
+    static public int staticInt62523;
+    static public int staticInt62524;
+    static public int staticInt62525;
+    static public int staticInt62526;
+    static public int staticInt62527;
+    static public int staticInt62528;
+    static public int staticInt62529;
+    static public int staticInt62530;
+    static public int staticInt62531;
+    static public int staticInt62532;
+    static public int staticInt62533;
+    static public int staticInt62534;
+    static public int staticInt62535;
+    static public int staticInt62536;
+    static public int staticInt62537;
+    static public int staticInt62538;
+    static public int staticInt62539;
+    static public int staticInt62540;
+    static public int staticInt62541;
+    static public int staticInt62542;
+    static public int staticInt62543;
+    static public int staticInt62544;
+    static public int staticInt62545;
+    static public int staticInt62546;
+    static public int staticInt62547;
+    static public int staticInt62548;
+    static public int staticInt62549;
+    static public int staticInt62550;
+    static public int staticInt62551;
+    static public int staticInt62552;
+    static public int staticInt62553;
+    static public int staticInt62554;
+    static public int staticInt62555;
+    static public int staticInt62556;
+    static public int staticInt62557;
+    static public int staticInt62558;
+    static public int staticInt62559;
+    static public int staticInt62560;
+    static public int staticInt62561;
+    static public int staticInt62562;
+    static public int staticInt62563;
+    static public int staticInt62564;
+    static public int staticInt62565;
+    static public int staticInt62566;
+    static public int staticInt62567;
+    static public int staticInt62568;
+    static public int staticInt62569;
+    static public int staticInt62570;
+    static public int staticInt62571;
+    static public int staticInt62572;
+    static public int staticInt62573;
+    static public int staticInt62574;
+    static public int staticInt62575;
+    static public int staticInt62576;
+    static public int staticInt62577;
+    static public int staticInt62578;
+    static public int staticInt62579;
+    static public int staticInt62580;
+    static public int staticInt62581;
+    static public int staticInt62582;
+    static public int staticInt62583;
+    static public int staticInt62584;
+    static public int staticInt62585;
+    static public int staticInt62586;
+    static public int staticInt62587;
+    static public int staticInt62588;
+    static public int staticInt62589;
+    static public int staticInt62590;
+    static public int staticInt62591;
+    static public int staticInt62592;
+    static public int staticInt62593;
+    static public int staticInt62594;
+    static public int staticInt62595;
+    static public int staticInt62596;
+    static public int staticInt62597;
+    static public int staticInt62598;
+    static public int staticInt62599;
+    static public int staticInt62600;
+    static public int staticInt62601;
+    static public int staticInt62602;
+    static public int staticInt62603;
+    static public int staticInt62604;
+    static public int staticInt62605;
+    static public int staticInt62606;
+    static public int staticInt62607;
+    static public int staticInt62608;
+    static public int staticInt62609;
+    static public int staticInt62610;
+    static public int staticInt62611;
+    static public int staticInt62612;
+    static public int staticInt62613;
+    static public int staticInt62614;
+    static public int staticInt62615;
+    static public int staticInt62616;
+    static public int staticInt62617;
+    static public int staticInt62618;
+    static public int staticInt62619;
+    static public int staticInt62620;
+    static public int staticInt62621;
+    static public int staticInt62622;
+    static public int staticInt62623;
+    static public int staticInt62624;
+    static public int staticInt62625;
+    static public int staticInt62626;
+    static public int staticInt62627;
+    static public int staticInt62628;
+    static public int staticInt62629;
+    static public int staticInt62630;
+    static public int staticInt62631;
+    static public int staticInt62632;
+    static public int staticInt62633;
+    static public int staticInt62634;
+    static public int staticInt62635;
+    static public int staticInt62636;
+    static public int staticInt62637;
+    static public int staticInt62638;
+    static public int staticInt62639;
+    static public int staticInt62640;
+    static public int staticInt62641;
+    static public int staticInt62642;
+    static public int staticInt62643;
+    static public int staticInt62644;
+    static public int staticInt62645;
+    static public int staticInt62646;
+    static public int staticInt62647;
+    static public int staticInt62648;
+    static public int staticInt62649;
+    static public int staticInt62650;
+    static public int staticInt62651;
+    static public int staticInt62652;
+    static public int staticInt62653;
+    static public int staticInt62654;
+    static public int staticInt62655;
+    static public int staticInt62656;
+    static public int staticInt62657;
+    static public int staticInt62658;
+    static public int staticInt62659;
+    static public int staticInt62660;
+    static public int staticInt62661;
+    static public int staticInt62662;
+    static public int staticInt62663;
+    static public int staticInt62664;
+    static public int staticInt62665;
+    static public int staticInt62666;
+    static public int staticInt62667;
+    static public int staticInt62668;
+    static public int staticInt62669;
+    static public int staticInt62670;
+    static public int staticInt62671;
+    static public int staticInt62672;
+    static public int staticInt62673;
+    static public int staticInt62674;
+    static public int staticInt62675;
+    static public int staticInt62676;
+    static public int staticInt62677;
+    static public int staticInt62678;
+    static public int staticInt62679;
+    static public int staticInt62680;
+    static public int staticInt62681;
+    static public int staticInt62682;
+    static public int staticInt62683;
+    static public int staticInt62684;
+    static public int staticInt62685;
+    static public int staticInt62686;
+    static public int staticInt62687;
+    static public int staticInt62688;
+    static public int staticInt62689;
+    static public int staticInt62690;
+    static public int staticInt62691;
+    static public int staticInt62692;
+    static public int staticInt62693;
+    static public int staticInt62694;
+    static public int staticInt62695;
+    static public int staticInt62696;
+    static public int staticInt62697;
+    static public int staticInt62698;
+    static public int staticInt62699;
+    static public int staticInt62700;
+    static public int staticInt62701;
+    static public int staticInt62702;
+    static public int staticInt62703;
+    static public int staticInt62704;
+    static public int staticInt62705;
+    static public int staticInt62706;
+    static public int staticInt62707;
+    static public int staticInt62708;
+    static public int staticInt62709;
+    static public int staticInt62710;
+    static public int staticInt62711;
+    static public int staticInt62712;
+    static public int staticInt62713;
+    static public int staticInt62714;
+    static public int staticInt62715;
+    static public int staticInt62716;
+    static public int staticInt62717;
+    static public int staticInt62718;
+    static public int staticInt62719;
+    static public int staticInt62720;
+    static public int staticInt62721;
+    static public int staticInt62722;
+    static public int staticInt62723;
+    static public int staticInt62724;
+    static public int staticInt62725;
+    static public int staticInt62726;
+    static public int staticInt62727;
+    static public int staticInt62728;
+    static public int staticInt62729;
+    static public int staticInt62730;
+    static public int staticInt62731;
+    static public int staticInt62732;
+    static public int staticInt62733;
+    static public int staticInt62734;
+    static public int staticInt62735;
+    static public int staticInt62736;
+    static public int staticInt62737;
+    static public int staticInt62738;
+    static public int staticInt62739;
+    static public int staticInt62740;
+    static public int staticInt62741;
+    static public int staticInt62742;
+    static public int staticInt62743;
+    static public int staticInt62744;
+    static public int staticInt62745;
+    static public int staticInt62746;
+    static public int staticInt62747;
+    static public int staticInt62748;
+    static public int staticInt62749;
+    static public int staticInt62750;
+    static public int staticInt62751;
+    static public int staticInt62752;
+    static public int staticInt62753;
+    static public int staticInt62754;
+    static public int staticInt62755;
+    static public int staticInt62756;
+    static public int staticInt62757;
+    static public int staticInt62758;
+    static public int staticInt62759;
+    static public int staticInt62760;
+    static public int staticInt62761;
+    static public int staticInt62762;
+    static public int staticInt62763;
+    static public int staticInt62764;
+    static public int staticInt62765;
+    static public int staticInt62766;
+    static public int staticInt62767;
+    static public int staticInt62768;
+    static public int staticInt62769;
+    static public int staticInt62770;
+    static public int staticInt62771;
+    static public int staticInt62772;
+    static public int staticInt62773;
+    static public int staticInt62774;
+    static public int staticInt62775;
+    static public int staticInt62776;
+    static public int staticInt62777;
+    static public int staticInt62778;
+    static public int staticInt62779;
+    static public int staticInt62780;
+    static public int staticInt62781;
+    static public int staticInt62782;
+    static public int staticInt62783;
+    static public int staticInt62784;
+    static public int staticInt62785;
+    static public int staticInt62786;
+    static public int staticInt62787;
+    static public int staticInt62788;
+    static public int staticInt62789;
+    static public int staticInt62790;
+    static public int staticInt62791;
+    static public int staticInt62792;
+    static public int staticInt62793;
+    static public int staticInt62794;
+    static public int staticInt62795;
+    static public int staticInt62796;
+    static public int staticInt62797;
+    static public int staticInt62798;
+    static public int staticInt62799;
+    static public int staticInt62800;
+    static public int staticInt62801;
+    static public int staticInt62802;
+    static public int staticInt62803;
+    static public int staticInt62804;
+    static public int staticInt62805;
+    static public int staticInt62806;
+    static public int staticInt62807;
+    static public int staticInt62808;
+    static public int staticInt62809;
+    static public int staticInt62810;
+    static public int staticInt62811;
+    static public int staticInt62812;
+    static public int staticInt62813;
+    static public int staticInt62814;
+    static public int staticInt62815;
+    static public int staticInt62816;
+    static public int staticInt62817;
+    static public int staticInt62818;
+    static public int staticInt62819;
+    static public int staticInt62820;
+    static public int staticInt62821;
+    static public int staticInt62822;
+    static public int staticInt62823;
+    static public int staticInt62824;
+    static public int staticInt62825;
+    static public int staticInt62826;
+    static public int staticInt62827;
+    static public int staticInt62828;
+    static public int staticInt62829;
+    static public int staticInt62830;
+    static public int staticInt62831;
+    static public int staticInt62832;
+    static public int staticInt62833;
+    static public int staticInt62834;
+    static public int staticInt62835;
+    static public int staticInt62836;
+    static public int staticInt62837;
+    static public int staticInt62838;
+    static public int staticInt62839;
+    static public int staticInt62840;
+    static public int staticInt62841;
+    static public int staticInt62842;
+    static public int staticInt62843;
+    static public int staticInt62844;
+    static public int staticInt62845;
+    static public int staticInt62846;
+    static public int staticInt62847;
+    static public int staticInt62848;
+    static public int staticInt62849;
+    static public int staticInt62850;
+    static public int staticInt62851;
+    static public int staticInt62852;
+    static public int staticInt62853;
+    static public int staticInt62854;
+    static public int staticInt62855;
+    static public int staticInt62856;
+    static public int staticInt62857;
+    static public int staticInt62858;
+    static public int staticInt62859;
+    static public int staticInt62860;
+    static public int staticInt62861;
+    static public int staticInt62862;
+    static public int staticInt62863;
+    static public int staticInt62864;
+    static public int staticInt62865;
+    static public int staticInt62866;
+    static public int staticInt62867;
+    static public int staticInt62868;
+    static public int staticInt62869;
+    static public int staticInt62870;
+    static public int staticInt62871;
+    static public int staticInt62872;
+    static public int staticInt62873;
+    static public int staticInt62874;
+    static public int staticInt62875;
+    static public int staticInt62876;
+    static public int staticInt62877;
+    static public int staticInt62878;
+    static public int staticInt62879;
+    static public int staticInt62880;
+    static public int staticInt62881;
+    static public int staticInt62882;
+    static public int staticInt62883;
+    static public int staticInt62884;
+    static public int staticInt62885;
+    static public int staticInt62886;
+    static public int staticInt62887;
+    static public int staticInt62888;
+    static public int staticInt62889;
+    static public int staticInt62890;
+    static public int staticInt62891;
+    static public int staticInt62892;
+    static public int staticInt62893;
+    static public int staticInt62894;
+    static public int staticInt62895;
+    static public int staticInt62896;
+    static public int staticInt62897;
+    static public int staticInt62898;
+    static public int staticInt62899;
+    static public int staticInt62900;
+    static public int staticInt62901;
+    static public int staticInt62902;
+    static public int staticInt62903;
+    static public int staticInt62904;
+    static public int staticInt62905;
+    static public int staticInt62906;
+    static public int staticInt62907;
+    static public int staticInt62908;
+    static public int staticInt62909;
+    static public int staticInt62910;
+    static public int staticInt62911;
+    static public int staticInt62912;
+    static public int staticInt62913;
+    static public int staticInt62914;
+    static public int staticInt62915;
+    static public int staticInt62916;
+    static public int staticInt62917;
+    static public int staticInt62918;
+    static public int staticInt62919;
+    static public int staticInt62920;
+    static public int staticInt62921;
+    static public int staticInt62922;
+    static public int staticInt62923;
+    static public int staticInt62924;
+    static public int staticInt62925;
+    static public int staticInt62926;
+    static public int staticInt62927;
+    static public int staticInt62928;
+    static public int staticInt62929;
+    static public int staticInt62930;
+    static public int staticInt62931;
+    static public int staticInt62932;
+    static public int staticInt62933;
+    static public int staticInt62934;
+    static public int staticInt62935;
+    static public int staticInt62936;
+    static public int staticInt62937;
+    static public int staticInt62938;
+    static public int staticInt62939;
+    static public int staticInt62940;
+    static public int staticInt62941;
+    static public int staticInt62942;
+    static public int staticInt62943;
+    static public int staticInt62944;
+    static public int staticInt62945;
+    static public int staticInt62946;
+    static public int staticInt62947;
+    static public int staticInt62948;
+    static public int staticInt62949;
+    static public int staticInt62950;
+    static public int staticInt62951;
+    static public int staticInt62952;
+    static public int staticInt62953;
+    static public int staticInt62954;
+    static public int staticInt62955;
+    static public int staticInt62956;
+    static public int staticInt62957;
+    static public int staticInt62958;
+    static public int staticInt62959;
+    static public int staticInt62960;
+    static public int staticInt62961;
+    static public int staticInt62962;
+    static public int staticInt62963;
+    static public int staticInt62964;
+    static public int staticInt62965;
+    static public int staticInt62966;
+    static public int staticInt62967;
+    static public int staticInt62968;
+    static public int staticInt62969;
+    static public int staticInt62970;
+    static public int staticInt62971;
+    static public int staticInt62972;
+    static public int staticInt62973;
+    static public int staticInt62974;
+    static public int staticInt62975;
+    static public int staticInt62976;
+    static public int staticInt62977;
+    static public int staticInt62978;
+    static public int staticInt62979;
+    static public int staticInt62980;
+    static public int staticInt62981;
+    static public int staticInt62982;
+    static public int staticInt62983;
+    static public int staticInt62984;
+    static public int staticInt62985;
+    static public int staticInt62986;
+    static public int staticInt62987;
+    static public int staticInt62988;
+    static public int staticInt62989;
+    static public int staticInt62990;
+    static public int staticInt62991;
+    static public int staticInt62992;
+    static public int staticInt62993;
+    static public int staticInt62994;
+    static public int staticInt62995;
+    static public int staticInt62996;
+    static public int staticInt62997;
+    static public int staticInt62998;
+    static public int staticInt62999;
+    static public int staticInt63000;
+    static public int staticInt63001;
+    static public int staticInt63002;
+    static public int staticInt63003;
+    static public int staticInt63004;
+    static public int staticInt63005;
+    static public int staticInt63006;
+    static public int staticInt63007;
+    static public int staticInt63008;
+    static public int staticInt63009;
+    static public int staticInt63010;
+    static public int staticInt63011;
+    static public int staticInt63012;
+    static public int staticInt63013;
+    static public int staticInt63014;
+    static public int staticInt63015;
+    static public int staticInt63016;
+    static public int staticInt63017;
+    static public int staticInt63018;
+    static public int staticInt63019;
+    static public int staticInt63020;
+    static public int staticInt63021;
+    static public int staticInt63022;
+    static public int staticInt63023;
+    static public int staticInt63024;
+    static public int staticInt63025;
+    static public int staticInt63026;
+    static public int staticInt63027;
+    static public int staticInt63028;
+    static public int staticInt63029;
+    static public int staticInt63030;
+    static public int staticInt63031;
+    static public int staticInt63032;
+    static public int staticInt63033;
+    static public int staticInt63034;
+    static public int staticInt63035;
+    static public int staticInt63036;
+    static public int staticInt63037;
+    static public int staticInt63038;
+    static public int staticInt63039;
+    static public int staticInt63040;
+    static public int staticInt63041;
+    static public int staticInt63042;
+    static public int staticInt63043;
+    static public int staticInt63044;
+    static public int staticInt63045;
+    static public int staticInt63046;
+    static public int staticInt63047;
+    static public int staticInt63048;
+    static public int staticInt63049;
+    static public int staticInt63050;
+    static public int staticInt63051;
+    static public int staticInt63052;
+    static public int staticInt63053;
+    static public int staticInt63054;
+    static public int staticInt63055;
+    static public int staticInt63056;
+    static public int staticInt63057;
+    static public int staticInt63058;
+    static public int staticInt63059;
+    static public int staticInt63060;
+    static public int staticInt63061;
+    static public int staticInt63062;
+    static public int staticInt63063;
+    static public int staticInt63064;
+    static public int staticInt63065;
+    static public int staticInt63066;
+    static public int staticInt63067;
+    static public int staticInt63068;
+    static public int staticInt63069;
+    static public int staticInt63070;
+    static public int staticInt63071;
+    static public int staticInt63072;
+    static public int staticInt63073;
+    static public int staticInt63074;
+    static public int staticInt63075;
+    static public int staticInt63076;
+    static public int staticInt63077;
+    static public int staticInt63078;
+    static public int staticInt63079;
+    static public int staticInt63080;
+    static public int staticInt63081;
+    static public int staticInt63082;
+    static public int staticInt63083;
+    static public int staticInt63084;
+    static public int staticInt63085;
+    static public int staticInt63086;
+    static public int staticInt63087;
+    static public int staticInt63088;
+    static public int staticInt63089;
+    static public int staticInt63090;
+    static public int staticInt63091;
+    static public int staticInt63092;
+    static public int staticInt63093;
+    static public int staticInt63094;
+    static public int staticInt63095;
+    static public int staticInt63096;
+    static public int staticInt63097;
+    static public int staticInt63098;
+    static public int staticInt63099;
+    static public int staticInt63100;
+    static public int staticInt63101;
+    static public int staticInt63102;
+    static public int staticInt63103;
+    static public int staticInt63104;
+    static public int staticInt63105;
+    static public int staticInt63106;
+    static public int staticInt63107;
+    static public int staticInt63108;
+    static public int staticInt63109;
+    static public int staticInt63110;
+    static public int staticInt63111;
+    static public int staticInt63112;
+    static public int staticInt63113;
+    static public int staticInt63114;
+    static public int staticInt63115;
+    static public int staticInt63116;
+    static public int staticInt63117;
+    static public int staticInt63118;
+    static public int staticInt63119;
+    static public int staticInt63120;
+    static public int staticInt63121;
+    static public int staticInt63122;
+    static public int staticInt63123;
+    static public int staticInt63124;
+    static public int staticInt63125;
+    static public int staticInt63126;
+    static public int staticInt63127;
+    static public int staticInt63128;
+    static public int staticInt63129;
+    static public int staticInt63130;
+    static public int staticInt63131;
+    static public int staticInt63132;
+    static public int staticInt63133;
+    static public int staticInt63134;
+    static public int staticInt63135;
+    static public int staticInt63136;
+    static public int staticInt63137;
+    static public int staticInt63138;
+    static public int staticInt63139;
+    static public int staticInt63140;
+    static public int staticInt63141;
+    static public int staticInt63142;
+    static public int staticInt63143;
+    static public int staticInt63144;
+    static public int staticInt63145;
+    static public int staticInt63146;
+    static public int staticInt63147;
+    static public int staticInt63148;
+    static public int staticInt63149;
+    static public int staticInt63150;
+    static public int staticInt63151;
+    static public int staticInt63152;
+    static public int staticInt63153;
+    static public int staticInt63154;
+    static public int staticInt63155;
+    static public int staticInt63156;
+    static public int staticInt63157;
+    static public int staticInt63158;
+    static public int staticInt63159;
+    static public int staticInt63160;
+    static public int staticInt63161;
+    static public int staticInt63162;
+    static public int staticInt63163;
+    static public int staticInt63164;
+    static public int staticInt63165;
+    static public int staticInt63166;
+    static public int staticInt63167;
+    static public int staticInt63168;
+    static public int staticInt63169;
+    static public int staticInt63170;
+    static public int staticInt63171;
+    static public int staticInt63172;
+    static public int staticInt63173;
+    static public int staticInt63174;
+    static public int staticInt63175;
+    static public int staticInt63176;
+    static public int staticInt63177;
+    static public int staticInt63178;
+    static public int staticInt63179;
+    static public int staticInt63180;
+    static public int staticInt63181;
+    static public int staticInt63182;
+    static public int staticInt63183;
+    static public int staticInt63184;
+    static public int staticInt63185;
+    static public int staticInt63186;
+    static public int staticInt63187;
+    static public int staticInt63188;
+    static public int staticInt63189;
+    static public int staticInt63190;
+    static public int staticInt63191;
+    static public int staticInt63192;
+    static public int staticInt63193;
+    static public int staticInt63194;
+    static public int staticInt63195;
+    static public int staticInt63196;
+    static public int staticInt63197;
+    static public int staticInt63198;
+    static public int staticInt63199;
+    static public int staticInt63200;
+    static public int staticInt63201;
+    static public int staticInt63202;
+    static public int staticInt63203;
+    static public int staticInt63204;
+    static public int staticInt63205;
+    static public int staticInt63206;
+    static public int staticInt63207;
+    static public int staticInt63208;
+    static public int staticInt63209;
+    static public int staticInt63210;
+    static public int staticInt63211;
+    static public int staticInt63212;
+    static public int staticInt63213;
+    static public int staticInt63214;
+    static public int staticInt63215;
+    static public int staticInt63216;
+    static public int staticInt63217;
+    static public int staticInt63218;
+    static public int staticInt63219;
+    static public int staticInt63220;
+    static public int staticInt63221;
+    static public int staticInt63222;
+    static public int staticInt63223;
+    static public int staticInt63224;
+    static public int staticInt63225;
+    static public int staticInt63226;
+    static public int staticInt63227;
+    static public int staticInt63228;
+    static public int staticInt63229;
+    static public int staticInt63230;
+    static public int staticInt63231;
+    static public int staticInt63232;
+    static public int staticInt63233;
+    static public int staticInt63234;
+    static public int staticInt63235;
+    static public int staticInt63236;
+    static public int staticInt63237;
+    static public int staticInt63238;
+    static public int staticInt63239;
+    static public int staticInt63240;
+    static public int staticInt63241;
+    static public int staticInt63242;
+    static public int staticInt63243;
+    static public int staticInt63244;
+    static public int staticInt63245;
+    static public int staticInt63246;
+    static public int staticInt63247;
+    static public int staticInt63248;
+    static public int staticInt63249;
+    static public int staticInt63250;
+    static public int staticInt63251;
+    static public int staticInt63252;
+    static public int staticInt63253;
+    static public int staticInt63254;
+    static public int staticInt63255;
+    static public int staticInt63256;
+    static public int staticInt63257;
+    static public int staticInt63258;
+    static public int staticInt63259;
+    static public int staticInt63260;
+    static public int staticInt63261;
+    static public int staticInt63262;
+    static public int staticInt63263;
+    static public int staticInt63264;
+    static public int staticInt63265;
+    static public int staticInt63266;
+    static public int staticInt63267;
+    static public int staticInt63268;
+    static public int staticInt63269;
+    static public int staticInt63270;
+    static public int staticInt63271;
+    static public int staticInt63272;
+    static public int staticInt63273;
+    static public int staticInt63274;
+    static public int staticInt63275;
+    static public int staticInt63276;
+    static public int staticInt63277;
+    static public int staticInt63278;
+    static public int staticInt63279;
+    static public int staticInt63280;
+    static public int staticInt63281;
+    static public int staticInt63282;
+    static public int staticInt63283;
+    static public int staticInt63284;
+    static public int staticInt63285;
+    static public int staticInt63286;
+    static public int staticInt63287;
+    static public int staticInt63288;
+    static public int staticInt63289;
+    static public int staticInt63290;
+    static public int staticInt63291;
+    static public int staticInt63292;
+    static public int staticInt63293;
+    static public int staticInt63294;
+    static public int staticInt63295;
+    static public int staticInt63296;
+    static public int staticInt63297;
+    static public int staticInt63298;
+    static public int staticInt63299;
+    static public int staticInt63300;
+    static public int staticInt63301;
+    static public int staticInt63302;
+    static public int staticInt63303;
+    static public int staticInt63304;
+    static public int staticInt63305;
+    static public int staticInt63306;
+    static public int staticInt63307;
+    static public int staticInt63308;
+    static public int staticInt63309;
+    static public int staticInt63310;
+    static public int staticInt63311;
+    static public int staticInt63312;
+    static public int staticInt63313;
+    static public int staticInt63314;
+    static public int staticInt63315;
+    static public int staticInt63316;
+    static public int staticInt63317;
+    static public int staticInt63318;
+    static public int staticInt63319;
+    static public int staticInt63320;
+    static public int staticInt63321;
+    static public int staticInt63322;
+    static public int staticInt63323;
+    static public int staticInt63324;
+    static public int staticInt63325;
+    static public int staticInt63326;
+    static public int staticInt63327;
+    static public int staticInt63328;
+    static public int staticInt63329;
+    static public int staticInt63330;
+    static public int staticInt63331;
+    static public int staticInt63332;
+    static public int staticInt63333;
+    static public int staticInt63334;
+    static public int staticInt63335;
+    static public int staticInt63336;
+    static public int staticInt63337;
+    static public int staticInt63338;
+    static public int staticInt63339;
+    static public int staticInt63340;
+    static public int staticInt63341;
+    static public int staticInt63342;
+    static public int staticInt63343;
+    static public int staticInt63344;
+    static public int staticInt63345;
+    static public int staticInt63346;
+    static public int staticInt63347;
+    static public int staticInt63348;
+    static public int staticInt63349;
+    static public int staticInt63350;
+    static public int staticInt63351;
+    static public int staticInt63352;
+    static public int staticInt63353;
+    static public int staticInt63354;
+    static public int staticInt63355;
+    static public int staticInt63356;
+    static public int staticInt63357;
+    static public int staticInt63358;
+    static public int staticInt63359;
+    static public int staticInt63360;
+    static public int staticInt63361;
+    static public int staticInt63362;
+    static public int staticInt63363;
+    static public int staticInt63364;
+    static public int staticInt63365;
+    static public int staticInt63366;
+    static public int staticInt63367;
+    static public int staticInt63368;
+    static public int staticInt63369;
+    static public int staticInt63370;
+    static public int staticInt63371;
+    static public int staticInt63372;
+    static public int staticInt63373;
+    static public int staticInt63374;
+    static public int staticInt63375;
+    static public int staticInt63376;
+    static public int staticInt63377;
+    static public int staticInt63378;
+    static public int staticInt63379;
+    static public int staticInt63380;
+    static public int staticInt63381;
+    static public int staticInt63382;
+    static public int staticInt63383;
+    static public int staticInt63384;
+    static public int staticInt63385;
+    static public int staticInt63386;
+    static public int staticInt63387;
+    static public int staticInt63388;
+    static public int staticInt63389;
+    static public int staticInt63390;
+    static public int staticInt63391;
+    static public int staticInt63392;
+    static public int staticInt63393;
+    static public int staticInt63394;
+    static public int staticInt63395;
+    static public int staticInt63396;
+    static public int staticInt63397;
+    static public int staticInt63398;
+    static public int staticInt63399;
+    static public int staticInt63400;
+    static public int staticInt63401;
+    static public int staticInt63402;
+    static public int staticInt63403;
+    static public int staticInt63404;
+    static public int staticInt63405;
+    static public int staticInt63406;
+    static public int staticInt63407;
+    static public int staticInt63408;
+    static public int staticInt63409;
+    static public int staticInt63410;
+    static public int staticInt63411;
+    static public int staticInt63412;
+    static public int staticInt63413;
+    static public int staticInt63414;
+    static public int staticInt63415;
+    static public int staticInt63416;
+    static public int staticInt63417;
+    static public int staticInt63418;
+    static public int staticInt63419;
+    static public int staticInt63420;
+    static public int staticInt63421;
+    static public int staticInt63422;
+    static public int staticInt63423;
+    static public int staticInt63424;
+    static public int staticInt63425;
+    static public int staticInt63426;
+    static public int staticInt63427;
+    static public int staticInt63428;
+    static public int staticInt63429;
+    static public int staticInt63430;
+    static public int staticInt63431;
+    static public int staticInt63432;
+    static public int staticInt63433;
+    static public int staticInt63434;
+    static public int staticInt63435;
+    static public int staticInt63436;
+    static public int staticInt63437;
+    static public int staticInt63438;
+    static public int staticInt63439;
+    static public int staticInt63440;
+    static public int staticInt63441;
+    static public int staticInt63442;
+    static public int staticInt63443;
+    static public int staticInt63444;
+    static public int staticInt63445;
+    static public int staticInt63446;
+    static public int staticInt63447;
+    static public int staticInt63448;
+    static public int staticInt63449;
+    static public int staticInt63450;
+    static public int staticInt63451;
+    static public int staticInt63452;
+    static public int staticInt63453;
+    static public int staticInt63454;
+    static public int staticInt63455;
+    static public int staticInt63456;
+    static public int staticInt63457;
+    static public int staticInt63458;
+    static public int staticInt63459;
+    static public int staticInt63460;
+    static public int staticInt63461;
+    static public int staticInt63462;
+    static public int staticInt63463;
+    static public int staticInt63464;
+    static public int staticInt63465;
+    static public int staticInt63466;
+    static public int staticInt63467;
+    static public int staticInt63468;
+    static public int staticInt63469;
+    static public int staticInt63470;
+    static public int staticInt63471;
+    static public int staticInt63472;
+    static public int staticInt63473;
+    static public int staticInt63474;
+    static public int staticInt63475;
+    static public int staticInt63476;
+    static public int staticInt63477;
+    static public int staticInt63478;
+    static public int staticInt63479;
+    static public int staticInt63480;
+    static public int staticInt63481;
+    static public int staticInt63482;
+    static public int staticInt63483;
+    static public int staticInt63484;
+    static public int staticInt63485;
+    static public int staticInt63486;
+    static public int staticInt63487;
+    static public int staticInt63488;
+    static public int staticInt63489;
+    static public int staticInt63490;
+    static public int staticInt63491;
+    static public int staticInt63492;
+    static public int staticInt63493;
+    static public int staticInt63494;
+    static public int staticInt63495;
+    static public int staticInt63496;
+    static public int staticInt63497;
+    static public int staticInt63498;
+    static public int staticInt63499;
+    static public int staticInt63500;
+    static public int staticInt63501;
+    static public int staticInt63502;
+    static public int staticInt63503;
+    static public int staticInt63504;
+    static public int staticInt63505;
+    static public int staticInt63506;
+    static public int staticInt63507;
+    static public int staticInt63508;
+    static public int staticInt63509;
+    static public int staticInt63510;
+    static public int staticInt63511;
+    static public int staticInt63512;
+    static public int staticInt63513;
+    static public int staticInt63514;
+    static public int staticInt63515;
+    static public int staticInt63516;
+    static public int staticInt63517;
+    static public int staticInt63518;
+    static public int staticInt63519;
+    static public int staticInt63520;
+    static public int staticInt63521;
+    static public int staticInt63522;
+    static public int staticInt63523;
+    static public int staticInt63524;
+    static public int staticInt63525;
+    static public int staticInt63526;
+    static public int staticInt63527;
+    static public int staticInt63528;
+    static public int staticInt63529;
+    static public int staticInt63530;
+    static public int staticInt63531;
+    static public int staticInt63532;
+    static public int staticInt63533;
+    static public int staticInt63534;
+    static public int staticInt63535;
+    static public int staticInt63536;
+    static public int staticInt63537;
+    static public int staticInt63538;
+    static public int staticInt63539;
+    static public int staticInt63540;
+    static public int staticInt63541;
+    static public int staticInt63542;
+    static public int staticInt63543;
+    static public int staticInt63544;
+    static public int staticInt63545;
+    static public int staticInt63546;
+    static public int staticInt63547;
+    static public int staticInt63548;
+    static public int staticInt63549;
+    static public int staticInt63550;
+    static public int staticInt63551;
+    static public int staticInt63552;
+    static public int staticInt63553;
+    static public int staticInt63554;
+    static public int staticInt63555;
+    static public int staticInt63556;
+    static public int staticInt63557;
+    static public int staticInt63558;
+    static public int staticInt63559;
+    static public int staticInt63560;
+    static public int staticInt63561;
+    static public int staticInt63562;
+    static public int staticInt63563;
+    static public int staticInt63564;
+    static public int staticInt63565;
+    static public int staticInt63566;
+    static public int staticInt63567;
+    static public int staticInt63568;
+    static public int staticInt63569;
+    static public int staticInt63570;
+    static public int staticInt63571;
+    static public int staticInt63572;
+    static public int staticInt63573;
+    static public int staticInt63574;
+    static public int staticInt63575;
+    static public int staticInt63576;
+    static public int staticInt63577;
+    static public int staticInt63578;
+    static public int staticInt63579;
+    static public int staticInt63580;
+    static public int staticInt63581;
+    static public int staticInt63582;
+    static public int staticInt63583;
+    static public int staticInt63584;
+    static public int staticInt63585;
+    static public int staticInt63586;
+    static public int staticInt63587;
+    static public int staticInt63588;
+    static public int staticInt63589;
+    static public int staticInt63590;
+    static public int staticInt63591;
+    static public int staticInt63592;
+    static public int staticInt63593;
+    static public int staticInt63594;
+    static public int staticInt63595;
+    static public int staticInt63596;
+    static public int staticInt63597;
+    static public int staticInt63598;
+    static public int staticInt63599;
+    static public int staticInt63600;
+    static public int staticInt63601;
+    static public int staticInt63602;
+    static public int staticInt63603;
+    static public int staticInt63604;
+    static public int staticInt63605;
+    static public int staticInt63606;
+    static public int staticInt63607;
+    static public int staticInt63608;
+    static public int staticInt63609;
+    static public int staticInt63610;
+    static public int staticInt63611;
+    static public int staticInt63612;
+    static public int staticInt63613;
+    static public int staticInt63614;
+    static public int staticInt63615;
+    static public int staticInt63616;
+    static public int staticInt63617;
+    static public int staticInt63618;
+    static public int staticInt63619;
+    static public int staticInt63620;
+    static public int staticInt63621;
+    static public int staticInt63622;
+    static public int staticInt63623;
+    static public int staticInt63624;
+    static public int staticInt63625;
+    static public int staticInt63626;
+    static public int staticInt63627;
+    static public int staticInt63628;
+    static public int staticInt63629;
+    static public int staticInt63630;
+    static public int staticInt63631;
+    static public int staticInt63632;
+    static public int staticInt63633;
+    static public int staticInt63634;
+    static public int staticInt63635;
+    static public int staticInt63636;
+    static public int staticInt63637;
+    static public int staticInt63638;
+    static public int staticInt63639;
+    static public int staticInt63640;
+    static public int staticInt63641;
+    static public int staticInt63642;
+    static public int staticInt63643;
+    static public int staticInt63644;
+    static public int staticInt63645;
+    static public int staticInt63646;
+    static public int staticInt63647;
+    static public int staticInt63648;
+    static public int staticInt63649;
+    static public int staticInt63650;
+    static public int staticInt63651;
+    static public int staticInt63652;
+    static public int staticInt63653;
+    static public int staticInt63654;
+    static public int staticInt63655;
+    static public int staticInt63656;
+    static public int staticInt63657;
+    static public int staticInt63658;
+    static public int staticInt63659;
+    static public int staticInt63660;
+    static public int staticInt63661;
+    static public int staticInt63662;
+    static public int staticInt63663;
+    static public int staticInt63664;
+    static public int staticInt63665;
+    static public int staticInt63666;
+    static public int staticInt63667;
+    static public int staticInt63668;
+    static public int staticInt63669;
+    static public int staticInt63670;
+    static public int staticInt63671;
+    static public int staticInt63672;
+    static public int staticInt63673;
+    static public int staticInt63674;
+    static public int staticInt63675;
+    static public int staticInt63676;
+    static public int staticInt63677;
+    static public int staticInt63678;
+    static public int staticInt63679;
+    static public int staticInt63680;
+    static public int staticInt63681;
+    static public int staticInt63682;
+    static public int staticInt63683;
+    static public int staticInt63684;
+    static public int staticInt63685;
+    static public int staticInt63686;
+    static public int staticInt63687;
+    static public int staticInt63688;
+    static public int staticInt63689;
+    static public int staticInt63690;
+    static public int staticInt63691;
+    static public int staticInt63692;
+    static public int staticInt63693;
+    static public int staticInt63694;
+    static public int staticInt63695;
+    static public int staticInt63696;
+    static public int staticInt63697;
+    static public int staticInt63698;
+    static public int staticInt63699;
+    static public int staticInt63700;
+    static public int staticInt63701;
+    static public int staticInt63702;
+    static public int staticInt63703;
+    static public int staticInt63704;
+    static public int staticInt63705;
+    static public int staticInt63706;
+    static public int staticInt63707;
+    static public int staticInt63708;
+    static public int staticInt63709;
+    static public int staticInt63710;
+    static public int staticInt63711;
+    static public int staticInt63712;
+    static public int staticInt63713;
+    static public int staticInt63714;
+    static public int staticInt63715;
+    static public int staticInt63716;
+    static public int staticInt63717;
+    static public int staticInt63718;
+    static public int staticInt63719;
+    static public int staticInt63720;
+    static public int staticInt63721;
+    static public int staticInt63722;
+    static public int staticInt63723;
+    static public int staticInt63724;
+    static public int staticInt63725;
+    static public int staticInt63726;
+    static public int staticInt63727;
+    static public int staticInt63728;
+    static public int staticInt63729;
+    static public int staticInt63730;
+    static public int staticInt63731;
+    static public int staticInt63732;
+    static public int staticInt63733;
+    static public int staticInt63734;
+    static public int staticInt63735;
+    static public int staticInt63736;
+    static public int staticInt63737;
+    static public int staticInt63738;
+    static public int staticInt63739;
+    static public int staticInt63740;
+    static public int staticInt63741;
+    static public int staticInt63742;
+    static public int staticInt63743;
+    static public int staticInt63744;
+    static public int staticInt63745;
+    static public int staticInt63746;
+    static public int staticInt63747;
+    static public int staticInt63748;
+    static public int staticInt63749;
+    static public int staticInt63750;
+    static public int staticInt63751;
+    static public int staticInt63752;
+    static public int staticInt63753;
+    static public int staticInt63754;
+    static public int staticInt63755;
+    static public int staticInt63756;
+    static public int staticInt63757;
+    static public int staticInt63758;
+    static public int staticInt63759;
+    static public int staticInt63760;
+    static public int staticInt63761;
+    static public int staticInt63762;
+    static public int staticInt63763;
+    static public int staticInt63764;
+    static public int staticInt63765;
+    static public int staticInt63766;
+    static public int staticInt63767;
+    static public int staticInt63768;
+    static public int staticInt63769;
+    static public int staticInt63770;
+    static public int staticInt63771;
+    static public int staticInt63772;
+    static public int staticInt63773;
+    static public int staticInt63774;
+    static public int staticInt63775;
+    static public int staticInt63776;
+    static public int staticInt63777;
+    static public int staticInt63778;
+    static public int staticInt63779;
+    static public int staticInt63780;
+    static public int staticInt63781;
+    static public int staticInt63782;
+    static public int staticInt63783;
+    static public int staticInt63784;
+    static public int staticInt63785;
+    static public int staticInt63786;
+    static public int staticInt63787;
+    static public int staticInt63788;
+    static public int staticInt63789;
+    static public int staticInt63790;
+    static public int staticInt63791;
+    static public int staticInt63792;
+    static public int staticInt63793;
+    static public int staticInt63794;
+    static public int staticInt63795;
+    static public int staticInt63796;
+    static public int staticInt63797;
+    static public int staticInt63798;
+    static public int staticInt63799;
+    static public int staticInt63800;
+    static public int staticInt63801;
+    static public int staticInt63802;
+    static public int staticInt63803;
+    static public int staticInt63804;
+    static public int staticInt63805;
+    static public int staticInt63806;
+    static public int staticInt63807;
+    static public int staticInt63808;
+    static public int staticInt63809;
+    static public int staticInt63810;
+    static public int staticInt63811;
+    static public int staticInt63812;
+    static public int staticInt63813;
+    static public int staticInt63814;
+    static public int staticInt63815;
+    static public int staticInt63816;
+    static public int staticInt63817;
+    static public int staticInt63818;
+    static public int staticInt63819;
+    static public int staticInt63820;
+    static public int staticInt63821;
+    static public int staticInt63822;
+    static public int staticInt63823;
+    static public int staticInt63824;
+    static public int staticInt63825;
+    static public int staticInt63826;
+    static public int staticInt63827;
+    static public int staticInt63828;
+    static public int staticInt63829;
+    static public int staticInt63830;
+    static public int staticInt63831;
+    static public int staticInt63832;
+    static public int staticInt63833;
+    static public int staticInt63834;
+    static public int staticInt63835;
+    static public int staticInt63836;
+    static public int staticInt63837;
+    static public int staticInt63838;
+    static public int staticInt63839;
+    static public int staticInt63840;
+    static public int staticInt63841;
+    static public int staticInt63842;
+    static public int staticInt63843;
+    static public int staticInt63844;
+    static public int staticInt63845;
+    static public int staticInt63846;
+    static public int staticInt63847;
+    static public int staticInt63848;
+    static public int staticInt63849;
+    static public int staticInt63850;
+    static public int staticInt63851;
+    static public int staticInt63852;
+    static public int staticInt63853;
+    static public int staticInt63854;
+    static public int staticInt63855;
+    static public int staticInt63856;
+    static public int staticInt63857;
+    static public int staticInt63858;
+    static public int staticInt63859;
+    static public int staticInt63860;
+    static public int staticInt63861;
+    static public int staticInt63862;
+    static public int staticInt63863;
+    static public int staticInt63864;
+    static public int staticInt63865;
+    static public int staticInt63866;
+    static public int staticInt63867;
+    static public int staticInt63868;
+    static public int staticInt63869;
+    static public int staticInt63870;
+    static public int staticInt63871;
+    static public int staticInt63872;
+    static public int staticInt63873;
+    static public int staticInt63874;
+    static public int staticInt63875;
+    static public int staticInt63876;
+    static public int staticInt63877;
+    static public int staticInt63878;
+    static public int staticInt63879;
+    static public int staticInt63880;
+    static public int staticInt63881;
+    static public int staticInt63882;
+    static public int staticInt63883;
+    static public int staticInt63884;
+    static public int staticInt63885;
+    static public int staticInt63886;
+    static public int staticInt63887;
+    static public int staticInt63888;
+    static public int staticInt63889;
+    static public int staticInt63890;
+    static public int staticInt63891;
+    static public int staticInt63892;
+    static public int staticInt63893;
+    static public int staticInt63894;
+    static public int staticInt63895;
+    static public int staticInt63896;
+    static public int staticInt63897;
+    static public int staticInt63898;
+    static public int staticInt63899;
+    static public int staticInt63900;
+    static public int staticInt63901;
+    static public int staticInt63902;
+    static public int staticInt63903;
+    static public int staticInt63904;
+    static public int staticInt63905;
+    static public int staticInt63906;
+    static public int staticInt63907;
+    static public int staticInt63908;
+    static public int staticInt63909;
+    static public int staticInt63910;
+    static public int staticInt63911;
+    static public int staticInt63912;
+    static public int staticInt63913;
+    static public int staticInt63914;
+    static public int staticInt63915;
+    static public int staticInt63916;
+    static public int staticInt63917;
+    static public int staticInt63918;
+    static public int staticInt63919;
+    static public int staticInt63920;
+    static public int staticInt63921;
+    static public int staticInt63922;
+    static public int staticInt63923;
+    static public int staticInt63924;
+    static public int staticInt63925;
+    static public int staticInt63926;
+    static public int staticInt63927;
+    static public int staticInt63928;
+    static public int staticInt63929;
+    static public int staticInt63930;
+    static public int staticInt63931;
+    static public int staticInt63932;
+    static public int staticInt63933;
+    static public int staticInt63934;
+    static public int staticInt63935;
+    static public int staticInt63936;
+    static public int staticInt63937;
+    static public int staticInt63938;
+    static public int staticInt63939;
+    static public int staticInt63940;
+    static public int staticInt63941;
+    static public int staticInt63942;
+    static public int staticInt63943;
+    static public int staticInt63944;
+    static public int staticInt63945;
+    static public int staticInt63946;
+    static public int staticInt63947;
+    static public int staticInt63948;
+    static public int staticInt63949;
+    static public int staticInt63950;
+    static public int staticInt63951;
+    static public int staticInt63952;
+    static public int staticInt63953;
+    static public int staticInt63954;
+    static public int staticInt63955;
+    static public int staticInt63956;
+    static public int staticInt63957;
+    static public int staticInt63958;
+    static public int staticInt63959;
+    static public int staticInt63960;
+    static public int staticInt63961;
+    static public int staticInt63962;
+    static public int staticInt63963;
+    static public int staticInt63964;
+    static public int staticInt63965;
+    static public int staticInt63966;
+    static public int staticInt63967;
+    static public int staticInt63968;
+    static public int staticInt63969;
+    static public int staticInt63970;
+    static public int staticInt63971;
+    static public int staticInt63972;
+    static public int staticInt63973;
+    static public int staticInt63974;
+    static public int staticInt63975;
+    static public int staticInt63976;
+    static public int staticInt63977;
+    static public int staticInt63978;
+    static public int staticInt63979;
+    static public int staticInt63980;
+    static public int staticInt63981;
+    static public int staticInt63982;
+    static public int staticInt63983;
+    static public int staticInt63984;
+    static public int staticInt63985;
+    static public int staticInt63986;
+    static public int staticInt63987;
+    static public int staticInt63988;
+    static public int staticInt63989;
+    static public int staticInt63990;
+    static public int staticInt63991;
+    static public int staticInt63992;
+    static public int staticInt63993;
+    static public int staticInt63994;
+    static public int staticInt63995;
+    static public int staticInt63996;
+    static public int staticInt63997;
+    static public int staticInt63998;
+    static public int staticInt63999;
+    static public int staticInt64000;
+    static public int staticInt64001;
+    static public int staticInt64002;
+    static public int staticInt64003;
+    static public int staticInt64004;
+    static public int staticInt64005;
+    static public int staticInt64006;
+    static public int staticInt64007;
+    static public int staticInt64008;
+    static public int staticInt64009;
+    static public int staticInt64010;
+    static public int staticInt64011;
+    static public int staticInt64012;
+    static public int staticInt64013;
+    static public int staticInt64014;
+    static public int staticInt64015;
+    static public int staticInt64016;
+    static public int staticInt64017;
+    static public int staticInt64018;
+    static public int staticInt64019;
+    static public int staticInt64020;
+    static public int staticInt64021;
+    static public int staticInt64022;
+    static public int staticInt64023;
+    static public int staticInt64024;
+    static public int staticInt64025;
+    static public int staticInt64026;
+    static public int staticInt64027;
+    static public int staticInt64028;
+    static public int staticInt64029;
+    static public int staticInt64030;
+    static public int staticInt64031;
+    static public int staticInt64032;
+    static public int staticInt64033;
+    static public int staticInt64034;
+    static public int staticInt64035;
+    static public int staticInt64036;
+    static public int staticInt64037;
+    static public int staticInt64038;
+    static public int staticInt64039;
+    static public int staticInt64040;
+    static public int staticInt64041;
+    static public int staticInt64042;
+    static public int staticInt64043;
+    static public int staticInt64044;
+    static public int staticInt64045;
+    static public int staticInt64046;
+    static public int staticInt64047;
+    static public int staticInt64048;
+    static public int staticInt64049;
+    static public int staticInt64050;
+    static public int staticInt64051;
+    static public int staticInt64052;
+    static public int staticInt64053;
+    static public int staticInt64054;
+    static public int staticInt64055;
+    static public int staticInt64056;
+    static public int staticInt64057;
+    static public int staticInt64058;
+    static public int staticInt64059;
+    static public int staticInt64060;
+    static public int staticInt64061;
+    static public int staticInt64062;
+    static public int staticInt64063;
+    static public int staticInt64064;
+    static public int staticInt64065;
+    static public int staticInt64066;
+    static public int staticInt64067;
+    static public int staticInt64068;
+    static public int staticInt64069;
+    static public int staticInt64070;
+    static public int staticInt64071;
+    static public int staticInt64072;
+    static public int staticInt64073;
+    static public int staticInt64074;
+    static public int staticInt64075;
+    static public int staticInt64076;
+    static public int staticInt64077;
+    static public int staticInt64078;
+    static public int staticInt64079;
+    static public int staticInt64080;
+    static public int staticInt64081;
+    static public int staticInt64082;
+    static public int staticInt64083;
+    static public int staticInt64084;
+    static public int staticInt64085;
+    static public int staticInt64086;
+    static public int staticInt64087;
+    static public int staticInt64088;
+    static public int staticInt64089;
+    static public int staticInt64090;
+    static public int staticInt64091;
+    static public int staticInt64092;
+    static public int staticInt64093;
+    static public int staticInt64094;
+    static public int staticInt64095;
+    static public int staticInt64096;
+    static public int staticInt64097;
+    static public int staticInt64098;
+    static public int staticInt64099;
+    static public int staticInt64100;
+    static public int staticInt64101;
+    static public int staticInt64102;
+    static public int staticInt64103;
+    static public int staticInt64104;
+    static public int staticInt64105;
+    static public int staticInt64106;
+    static public int staticInt64107;
+    static public int staticInt64108;
+    static public int staticInt64109;
+    static public int staticInt64110;
+    static public int staticInt64111;
+    static public int staticInt64112;
+    static public int staticInt64113;
+    static public int staticInt64114;
+    static public int staticInt64115;
+    static public int staticInt64116;
+    static public int staticInt64117;
+    static public int staticInt64118;
+    static public int staticInt64119;
+    static public int staticInt64120;
+    static public int staticInt64121;
+    static public int staticInt64122;
+    static public int staticInt64123;
+    static public int staticInt64124;
+    static public int staticInt64125;
+    static public int staticInt64126;
+    static public int staticInt64127;
+    static public int staticInt64128;
+    static public int staticInt64129;
+    static public int staticInt64130;
+    static public int staticInt64131;
+    static public int staticInt64132;
+    static public int staticInt64133;
+    static public int staticInt64134;
+    static public int staticInt64135;
+    static public int staticInt64136;
+    static public int staticInt64137;
+    static public int staticInt64138;
+    static public int staticInt64139;
+    static public int staticInt64140;
+    static public int staticInt64141;
+    static public int staticInt64142;
+    static public int staticInt64143;
+    static public int staticInt64144;
+    static public int staticInt64145;
+    static public int staticInt64146;
+    static public int staticInt64147;
+    static public int staticInt64148;
+    static public int staticInt64149;
+    static public int staticInt64150;
+    static public int staticInt64151;
+    static public int staticInt64152;
+    static public int staticInt64153;
+    static public int staticInt64154;
+    static public int staticInt64155;
+    static public int staticInt64156;
+    static public int staticInt64157;
+    static public int staticInt64158;
+    static public int staticInt64159;
+    static public int staticInt64160;
+    static public int staticInt64161;
+    static public int staticInt64162;
+    static public int staticInt64163;
+    static public int staticInt64164;
+    static public int staticInt64165;
+    static public int staticInt64166;
+    static public int staticInt64167;
+    static public int staticInt64168;
+    static public int staticInt64169;
+    static public int staticInt64170;
+    static public int staticInt64171;
+    static public int staticInt64172;
+    static public int staticInt64173;
+    static public int staticInt64174;
+    static public int staticInt64175;
+    static public int staticInt64176;
+    static public int staticInt64177;
+    static public int staticInt64178;
+    static public int staticInt64179;
+    static public int staticInt64180;
+    static public int staticInt64181;
+    static public int staticInt64182;
+    static public int staticInt64183;
+    static public int staticInt64184;
+    static public int staticInt64185;
+    static public int staticInt64186;
+    static public int staticInt64187;
+    static public int staticInt64188;
+    static public int staticInt64189;
+    static public int staticInt64190;
+    static public int staticInt64191;
+    static public int staticInt64192;
+    static public int staticInt64193;
+    static public int staticInt64194;
+    static public int staticInt64195;
+    static public int staticInt64196;
+    static public int staticInt64197;
+    static public int staticInt64198;
+    static public int staticInt64199;
+    static public int staticInt64200;
+    static public int staticInt64201;
+    static public int staticInt64202;
+    static public int staticInt64203;
+    static public int staticInt64204;
+    static public int staticInt64205;
+    static public int staticInt64206;
+    static public int staticInt64207;
+    static public int staticInt64208;
+    static public int staticInt64209;
+    static public int staticInt64210;
+    static public int staticInt64211;
+    static public int staticInt64212;
+    static public int staticInt64213;
+    static public int staticInt64214;
+    static public int staticInt64215;
+    static public int staticInt64216;
+    static public int staticInt64217;
+    static public int staticInt64218;
+    static public int staticInt64219;
+    static public int staticInt64220;
+    static public int staticInt64221;
+    static public int staticInt64222;
+    static public int staticInt64223;
+    static public int staticInt64224;
+    static public int staticInt64225;
+    static public int staticInt64226;
+    static public int staticInt64227;
+    static public int staticInt64228;
+    static public int staticInt64229;
+    static public int staticInt64230;
+    static public int staticInt64231;
+    static public int staticInt64232;
+    static public int staticInt64233;
+    static public int staticInt64234;
+    static public int staticInt64235;
+    static public int staticInt64236;
+    static public int staticInt64237;
+    static public int staticInt64238;
+    static public int staticInt64239;
+    static public int staticInt64240;
+    static public int staticInt64241;
+    static public int staticInt64242;
+    static public int staticInt64243;
+    static public int staticInt64244;
+    static public int staticInt64245;
+    static public int staticInt64246;
+    static public int staticInt64247;
+    static public int staticInt64248;
+    static public int staticInt64249;
+    static public int staticInt64250;
+    static public int staticInt64251;
+    static public int staticInt64252;
+    static public int staticInt64253;
+    static public int staticInt64254;
+    static public int staticInt64255;
+    static public int staticInt64256;
+    static public int staticInt64257;
+    static public int staticInt64258;
+    static public int staticInt64259;
+    static public int staticInt64260;
+    static public int staticInt64261;
+    static public int staticInt64262;
+    static public int staticInt64263;
+    static public int staticInt64264;
+    static public int staticInt64265;
+    static public int staticInt64266;
+    static public int staticInt64267;
+    static public int staticInt64268;
+    static public int staticInt64269;
+    static public int staticInt64270;
+    static public int staticInt64271;
+    static public int staticInt64272;
+    static public int staticInt64273;
+    static public int staticInt64274;
+    static public int staticInt64275;
+    static public int staticInt64276;
+    static public int staticInt64277;
+    static public int staticInt64278;
+    static public int staticInt64279;
+    static public int staticInt64280;
+    static public int staticInt64281;
+    static public int staticInt64282;
+    static public int staticInt64283;
+    static public int staticInt64284;
+    static public int staticInt64285;
+    static public int staticInt64286;
+    static public int staticInt64287;
+    static public int staticInt64288;
+    static public int staticInt64289;
+    static public int staticInt64290;
+    static public int staticInt64291;
+    static public int staticInt64292;
+    static public int staticInt64293;
+    static public int staticInt64294;
+    static public int staticInt64295;
+    static public int staticInt64296;
+    static public int staticInt64297;
+    static public int staticInt64298;
+    static public int staticInt64299;
+    static public int staticInt64300;
+    static public int staticInt64301;
+    static public int staticInt64302;
+    static public int staticInt64303;
+    static public int staticInt64304;
+    static public int staticInt64305;
+    static public int staticInt64306;
+    static public int staticInt64307;
+    static public int staticInt64308;
+    static public int staticInt64309;
+    static public int staticInt64310;
+    static public int staticInt64311;
+    static public int staticInt64312;
+    static public int staticInt64313;
+    static public int staticInt64314;
+    static public int staticInt64315;
+    static public int staticInt64316;
+    static public int staticInt64317;
+    static public int staticInt64318;
+    static public int staticInt64319;
+    static public int staticInt64320;
+    static public int staticInt64321;
+    static public int staticInt64322;
+    static public int staticInt64323;
+    static public int staticInt64324;
+    static public int staticInt64325;
+    static public int staticInt64326;
+    static public int staticInt64327;
+    static public int staticInt64328;
+    static public int staticInt64329;
+    static public int staticInt64330;
+    static public int staticInt64331;
+    static public int staticInt64332;
+    static public int staticInt64333;
+    static public int staticInt64334;
+    static public int staticInt64335;
+    static public int staticInt64336;
+    static public int staticInt64337;
+    static public int staticInt64338;
+    static public int staticInt64339;
+    static public int staticInt64340;
+    static public int staticInt64341;
+    static public int staticInt64342;
+    static public int staticInt64343;
+    static public int staticInt64344;
+    static public int staticInt64345;
+    static public int staticInt64346;
+    static public int staticInt64347;
+    static public int staticInt64348;
+    static public int staticInt64349;
+    static public int staticInt64350;
+    static public int staticInt64351;
+    static public int staticInt64352;
+    static public int staticInt64353;
+    static public int staticInt64354;
+    static public int staticInt64355;
+    static public int staticInt64356;
+    static public int staticInt64357;
+    static public int staticInt64358;
+    static public int staticInt64359;
+    static public int staticInt64360;
+    static public int staticInt64361;
+    static public int staticInt64362;
+    static public int staticInt64363;
+    static public int staticInt64364;
+    static public int staticInt64365;
+    static public int staticInt64366;
+    static public int staticInt64367;
+    static public int staticInt64368;
+    static public int staticInt64369;
+    static public int staticInt64370;
+    static public int staticInt64371;
+    static public int staticInt64372;
+    static public int staticInt64373;
+    static public int staticInt64374;
+    static public int staticInt64375;
+    static public int staticInt64376;
+    static public int staticInt64377;
+    static public int staticInt64378;
+    static public int staticInt64379;
+    static public int staticInt64380;
+    static public int staticInt64381;
+    static public int staticInt64382;
+    static public int staticInt64383;
+    static public int staticInt64384;
+    static public int staticInt64385;
+    static public int staticInt64386;
+    static public int staticInt64387;
+    static public int staticInt64388;
+    static public int staticInt64389;
+    static public int staticInt64390;
+    static public int staticInt64391;
+    static public int staticInt64392;
+    static public int staticInt64393;
+    static public int staticInt64394;
+    static public int staticInt64395;
+    static public int staticInt64396;
+    static public int staticInt64397;
+    static public int staticInt64398;
+    static public int staticInt64399;
+    static public int staticInt64400;
+    static public int staticInt64401;
+    static public int staticInt64402;
+    static public int staticInt64403;
+    static public int staticInt64404;
+    static public int staticInt64405;
+    static public int staticInt64406;
+    static public int staticInt64407;
+    static public int staticInt64408;
+    static public int staticInt64409;
+    static public int staticInt64410;
+    static public int staticInt64411;
+    static public int staticInt64412;
+    static public int staticInt64413;
+    static public int staticInt64414;
+    static public int staticInt64415;
+    static public int staticInt64416;
+    static public int staticInt64417;
+    static public int staticInt64418;
+    static public int staticInt64419;
+    static public int staticInt64420;
+    static public int staticInt64421;
+    static public int staticInt64422;
+    static public int staticInt64423;
+    static public int staticInt64424;
+    static public int staticInt64425;
+    static public int staticInt64426;
+    static public int staticInt64427;
+    static public int staticInt64428;
+    static public int staticInt64429;
+    static public int staticInt64430;
+    static public int staticInt64431;
+    static public int staticInt64432;
+    static public int staticInt64433;
+    static public int staticInt64434;
+    static public int staticInt64435;
+    static public int staticInt64436;
+    static public int staticInt64437;
+    static public int staticInt64438;
+    static public int staticInt64439;
+    static public int staticInt64440;
+    static public int staticInt64441;
+    static public int staticInt64442;
+    static public int staticInt64443;
+    static public int staticInt64444;
+    static public int staticInt64445;
+    static public int staticInt64446;
+    static public int staticInt64447;
+    static public int staticInt64448;
+    static public int staticInt64449;
+    static public int staticInt64450;
+    static public int staticInt64451;
+    static public int staticInt64452;
+    static public int staticInt64453;
+    static public int staticInt64454;
+    static public int staticInt64455;
+    static public int staticInt64456;
+    static public int staticInt64457;
+    static public int staticInt64458;
+    static public int staticInt64459;
+    static public int staticInt64460;
+    static public int staticInt64461;
+    static public int staticInt64462;
+    static public int staticInt64463;
+    static public int staticInt64464;
+    static public int staticInt64465;
+    static public int staticInt64466;
+    static public int staticInt64467;
+    static public int staticInt64468;
+    static public int staticInt64469;
+    static public int staticInt64470;
+    static public int staticInt64471;
+    static public int staticInt64472;
+    static public int staticInt64473;
+    static public int staticInt64474;
+    static public int staticInt64475;
+    static public int staticInt64476;
+    static public int staticInt64477;
+    static public int staticInt64478;
+    static public int staticInt64479;
+    static public int staticInt64480;
+    static public int staticInt64481;
+    static public int staticInt64482;
+    static public int staticInt64483;
+    static public int staticInt64484;
+    static public int staticInt64485;
+    static public int staticInt64486;
+    static public int staticInt64487;
+    static public int staticInt64488;
+    static public int staticInt64489;
+    static public int staticInt64490;
+    static public int staticInt64491;
+    static public int staticInt64492;
+    static public int staticInt64493;
+    static public int staticInt64494;
+    static public int staticInt64495;
+    static public int staticInt64496;
+    static public int staticInt64497;
+    static public int staticInt64498;
+    static public int staticInt64499;
+    static public int staticInt64500;
+    static public int staticInt64501;
+    static public int staticInt64502;
+    static public int staticInt64503;
+    static public int staticInt64504;
+    static public int staticInt64505;
+    static public int staticInt64506;
+    static public int staticInt64507;
+    static public int staticInt64508;
+    static public int staticInt64509;
+    static public int staticInt64510;
+    static public int staticInt64511;
+    static public int staticInt64512;
+    static public int staticInt64513;
+    static public int staticInt64514;
+    static public int staticInt64515;
+    static public int staticInt64516;
+    static public int staticInt64517;
+    static public int staticInt64518;
+    static public int staticInt64519;
+    static public int staticInt64520;
+    static public int staticInt64521;
+    static public int staticInt64522;
+    static public int staticInt64523;
+    static public int staticInt64524;
+    static public int staticInt64525;
+    static public int staticInt64526;
+    static public int staticInt64527;
+    static public int staticInt64528;
+    static public int staticInt64529;
+    static public int staticInt64530;
+    static public int staticInt64531;
+    static public int staticInt64532;
+    static public int staticInt64533;
+    static public int staticInt64534;
+    static public int staticInt64535;
+    static public int staticInt64536;
+    static public int staticInt64537;
+    static public int staticInt64538;
+    static public int staticInt64539;
+    static public int staticInt64540;
+    static public int staticInt64541;
+    static public int staticInt64542;
+    static public int staticInt64543;
+    static public int staticInt64544;
+    static public int staticInt64545;
+    static public int staticInt64546;
+    static public int staticInt64547;
+    static public int staticInt64548;
+    static public int staticInt64549;
+    static public int staticInt64550;
+    static public int staticInt64551;
+    static public int staticInt64552;
+    static public int staticInt64553;
+    static public int staticInt64554;
+    static public int staticInt64555;
+    static public int staticInt64556;
+    static public int staticInt64557;
+    static public int staticInt64558;
+    static public int staticInt64559;
+    static public int staticInt64560;
+    static public int staticInt64561;
+    static public int staticInt64562;
+    static public int staticInt64563;
+    static public int staticInt64564;
+    static public int staticInt64565;
+    static public int staticInt64566;
+    static public int staticInt64567;
+    static public int staticInt64568;
+    static public int staticInt64569;
+    static public int staticInt64570;
+    static public int staticInt64571;
+    static public int staticInt64572;
+    static public int staticInt64573;
+    static public int staticInt64574;
+    static public int staticInt64575;
+    static public int staticInt64576;
+    static public int staticInt64577;
+    static public int staticInt64578;
+    static public int staticInt64579;
+    static public int staticInt64580;
+    static public int staticInt64581;
+    static public int staticInt64582;
+    static public int staticInt64583;
+    static public int staticInt64584;
+    static public int staticInt64585;
+    static public int staticInt64586;
+    static public int staticInt64587;
+    static public int staticInt64588;
+    static public int staticInt64589;
+    static public int staticInt64590;
+    static public int staticInt64591;
+    static public int staticInt64592;
+    static public int staticInt64593;
+    static public int staticInt64594;
+    static public int staticInt64595;
+    static public int staticInt64596;
+    static public int staticInt64597;
+    static public int staticInt64598;
+    static public int staticInt64599;
+    static public int staticInt64600;
+    static public int staticInt64601;
+    static public int staticInt64602;
+    static public int staticInt64603;
+    static public int staticInt64604;
+    static public int staticInt64605;
+    static public int staticInt64606;
+    static public int staticInt64607;
+    static public int staticInt64608;
+    static public int staticInt64609;
+    static public int staticInt64610;
+    static public int staticInt64611;
+    static public int staticInt64612;
+    static public int staticInt64613;
+    static public int staticInt64614;
+    static public int staticInt64615;
+    static public int staticInt64616;
+    static public int staticInt64617;
+    static public int staticInt64618;
+    static public int staticInt64619;
+    static public int staticInt64620;
+    static public int staticInt64621;
+    static public int staticInt64622;
+    static public int staticInt64623;
+    static public int staticInt64624;
+    static public int staticInt64625;
+    static public int staticInt64626;
+    static public int staticInt64627;
+    static public int staticInt64628;
+    static public int staticInt64629;
+    static public int staticInt64630;
+    static public int staticInt64631;
+    static public int staticInt64632;
+    static public int staticInt64633;
+    static public int staticInt64634;
+    static public int staticInt64635;
+    static public int staticInt64636;
+    static public int staticInt64637;
+    static public int staticInt64638;
+    static public int staticInt64639;
+    static public int staticInt64640;
+    static public int staticInt64641;
+    static public int staticInt64642;
+    static public int staticInt64643;
+    static public int staticInt64644;
+    static public int staticInt64645;
+    static public int staticInt64646;
+    static public int staticInt64647;
+    static public int staticInt64648;
+    static public int staticInt64649;
+    static public int staticInt64650;
+    static public int staticInt64651;
+    static public int staticInt64652;
+    static public int staticInt64653;
+    static public int staticInt64654;
+    static public int staticInt64655;
+    static public int staticInt64656;
+    static public int staticInt64657;
+    static public int staticInt64658;
+    static public int staticInt64659;
+    static public int staticInt64660;
+    static public int staticInt64661;
+    static public int staticInt64662;
+    static public int staticInt64663;
+    static public int staticInt64664;
+    static public int staticInt64665;
+    static public int staticInt64666;
+    static public int staticInt64667;
+    static public int staticInt64668;
+    static public int staticInt64669;
+    static public int staticInt64670;
+    static public int staticInt64671;
+    static public int staticInt64672;
+    static public int staticInt64673;
+    static public int staticInt64674;
+    static public int staticInt64675;
+    static public int staticInt64676;
+    static public int staticInt64677;
+    static public int staticInt64678;
+    static public int staticInt64679;
+    static public int staticInt64680;
+    static public int staticInt64681;
+    static public int staticInt64682;
+    static public int staticInt64683;
+    static public int staticInt64684;
+    static public int staticInt64685;
+    static public int staticInt64686;
+    static public int staticInt64687;
+    static public int staticInt64688;
+    static public int staticInt64689;
+    static public int staticInt64690;
+    static public int staticInt64691;
+    static public int staticInt64692;
+    static public int staticInt64693;
+    static public int staticInt64694;
+    static public int staticInt64695;
+    static public int staticInt64696;
+    static public int staticInt64697;
+    static public int staticInt64698;
+    static public int staticInt64699;
+    static public int staticInt64700;
+    static public int staticInt64701;
+    static public int staticInt64702;
+    static public int staticInt64703;
+    static public int staticInt64704;
+    static public int staticInt64705;
+    static public int staticInt64706;
+    static public int staticInt64707;
+    static public int staticInt64708;
+    static public int staticInt64709;
+    static public int staticInt64710;
+    static public int staticInt64711;
+    static public int staticInt64712;
+    static public int staticInt64713;
+    static public int staticInt64714;
+    static public int staticInt64715;
+    static public int staticInt64716;
+    static public int staticInt64717;
+    static public int staticInt64718;
+    static public int staticInt64719;
+    static public int staticInt64720;
+    static public int staticInt64721;
+    static public int staticInt64722;
+    static public int staticInt64723;
+    static public int staticInt64724;
+    static public int staticInt64725;
+    static public int staticInt64726;
+    static public int staticInt64727;
+    static public int staticInt64728;
+    static public int staticInt64729;
+    static public int staticInt64730;
+    static public int staticInt64731;
+    static public int staticInt64732;
+    static public int staticInt64733;
+    static public int staticInt64734;
+    static public int staticInt64735;
+    static public int staticInt64736;
+    static public int staticInt64737;
+    static public int staticInt64738;
+    static public int staticInt64739;
+    static public int staticInt64740;
+    static public int staticInt64741;
+    static public int staticInt64742;
+    static public int staticInt64743;
+    static public int staticInt64744;
+    static public int staticInt64745;
+    static public int staticInt64746;
+    static public int staticInt64747;
+    static public int staticInt64748;
+    static public int staticInt64749;
+    static public int staticInt64750;
+    static public int staticInt64751;
+    static public int staticInt64752;
+    static public int staticInt64753;
+    static public int staticInt64754;
+    static public int staticInt64755;
+    static public int staticInt64756;
+    static public int staticInt64757;
+    static public int staticInt64758;
+    static public int staticInt64759;
+    static public int staticInt64760;
+    static public int staticInt64761;
+    static public int staticInt64762;
+    static public int staticInt64763;
+    static public int staticInt64764;
+    static public int staticInt64765;
+    static public int staticInt64766;
+    static public int staticInt64767;
+    static public int staticInt64768;
+    static public int staticInt64769;
+    static public int staticInt64770;
+    static public int staticInt64771;
+    static public int staticInt64772;
+    static public int staticInt64773;
+    static public int staticInt64774;
+    static public int staticInt64775;
+    static public int staticInt64776;
+    static public int staticInt64777;
+    static public int staticInt64778;
+    static public int staticInt64779;
+    static public int staticInt64780;
+    static public int staticInt64781;
+    static public int staticInt64782;
+    static public int staticInt64783;
+    static public int staticInt64784;
+    static public int staticInt64785;
+    static public int staticInt64786;
+    static public int staticInt64787;
+    static public int staticInt64788;
+    static public int staticInt64789;
+    static public int staticInt64790;
+    static public int staticInt64791;
+    static public int staticInt64792;
+    static public int staticInt64793;
+    static public int staticInt64794;
+    static public int staticInt64795;
+    static public int staticInt64796;
+    static public int staticInt64797;
+    static public int staticInt64798;
+    static public int staticInt64799;
+    static public int staticInt64800;
+    static public int staticInt64801;
+    static public int staticInt64802;
+    static public int staticInt64803;
+    static public int staticInt64804;
+    static public int staticInt64805;
+    static public int staticInt64806;
+    static public int staticInt64807;
+    static public int staticInt64808;
+    static public int staticInt64809;
+    static public int staticInt64810;
+    static public int staticInt64811;
+    static public int staticInt64812;
+    static public int staticInt64813;
+    static public int staticInt64814;
+    static public int staticInt64815;
+    static public int staticInt64816;
+    static public int staticInt64817;
+    static public int staticInt64818;
+    static public int staticInt64819;
+    static public int staticInt64820;
+    static public int staticInt64821;
+    static public int staticInt64822;
+    static public int staticInt64823;
+    static public int staticInt64824;
+    static public int staticInt64825;
+    static public int staticInt64826;
+    static public int staticInt64827;
+    static public int staticInt64828;
+    static public int staticInt64829;
+    static public int staticInt64830;
+    static public int staticInt64831;
+    static public int staticInt64832;
+    static public int staticInt64833;
+    static public int staticInt64834;
+    static public int staticInt64835;
+    static public int staticInt64836;
+    static public int staticInt64837;
+    static public int staticInt64838;
+    static public int staticInt64839;
+    static public int staticInt64840;
+    static public int staticInt64841;
+    static public int staticInt64842;
+    static public int staticInt64843;
+    static public int staticInt64844;
+    static public int staticInt64845;
+    static public int staticInt64846;
+    static public int staticInt64847;
+    static public int staticInt64848;
+    static public int staticInt64849;
+    static public int staticInt64850;
+    static public int staticInt64851;
+    static public int staticInt64852;
+    static public int staticInt64853;
+    static public int staticInt64854;
+    static public int staticInt64855;
+    static public int staticInt64856;
+    static public int staticInt64857;
+    static public int staticInt64858;
+    static public int staticInt64859;
+    static public int staticInt64860;
+    static public int staticInt64861;
+    static public int staticInt64862;
+    static public int staticInt64863;
+    static public int staticInt64864;
+    static public int staticInt64865;
+    static public int staticInt64866;
+    static public int staticInt64867;
+    static public int staticInt64868;
+    static public int staticInt64869;
+    static public int staticInt64870;
+    static public int staticInt64871;
+    static public int staticInt64872;
+    static public int staticInt64873;
+    static public int staticInt64874;
+    static public int staticInt64875;
+    static public int staticInt64876;
+    static public int staticInt64877;
+    static public int staticInt64878;
+    static public int staticInt64879;
+    static public int staticInt64880;
+    static public int staticInt64881;
+    static public int staticInt64882;
+    static public int staticInt64883;
+    static public int staticInt64884;
+    static public int staticInt64885;
+    static public int staticInt64886;
+    static public int staticInt64887;
+    static public int staticInt64888;
+    static public int staticInt64889;
+    static public int staticInt64890;
+    static public int staticInt64891;
+    static public int staticInt64892;
+    static public int staticInt64893;
+    static public int staticInt64894;
+    static public int staticInt64895;
+    static public int staticInt64896;
+    static public int staticInt64897;
+    static public int staticInt64898;
+    static public int staticInt64899;
+    static public int staticInt64900;
+    static public int staticInt64901;
+    static public int staticInt64902;
+    static public int staticInt64903;
+    static public int staticInt64904;
+    static public int staticInt64905;
+    static public int staticInt64906;
+    static public int staticInt64907;
+    static public int staticInt64908;
+    static public int staticInt64909;
+    static public int staticInt64910;
+    static public int staticInt64911;
+    static public int staticInt64912;
+    static public int staticInt64913;
+    static public int staticInt64914;
+    static public int staticInt64915;
+    static public int staticInt64916;
+    static public int staticInt64917;
+    static public int staticInt64918;
+    static public int staticInt64919;
+    static public int staticInt64920;
+    static public int staticInt64921;
+    static public int staticInt64922;
+    static public int staticInt64923;
+    static public int staticInt64924;
+    static public int staticInt64925;
+    static public int staticInt64926;
+    static public int staticInt64927;
+    static public int staticInt64928;
+    static public int staticInt64929;
+    static public int staticInt64930;
+    static public int staticInt64931;
+    static public int staticInt64932;
+    static public int staticInt64933;
+    static public int staticInt64934;
+    static public int staticInt64935;
+    static public int staticInt64936;
+    static public int staticInt64937;
+    static public int staticInt64938;
+    static public int staticInt64939;
+    static public int staticInt64940;
+    static public int staticInt64941;
+    static public int staticInt64942;
+    static public int staticInt64943;
+    static public int staticInt64944;
+    static public int staticInt64945;
+    static public int staticInt64946;
+    static public int staticInt64947;
+    static public int staticInt64948;
+    static public int staticInt64949;
+    static public int staticInt64950;
+    static public int staticInt64951;
+    static public int staticInt64952;
+    static public int staticInt64953;
+    static public int staticInt64954;
+    static public int staticInt64955;
+    static public int staticInt64956;
+    static public int staticInt64957;
+    static public int staticInt64958;
+    static public int staticInt64959;
+    static public int staticInt64960;
+    static public int staticInt64961;
+    static public int staticInt64962;
+    static public int staticInt64963;
+    static public int staticInt64964;
+    static public int staticInt64965;
+    static public int staticInt64966;
+    static public int staticInt64967;
+    static public int staticInt64968;
+    static public int staticInt64969;
+    static public int staticInt64970;
+    static public int staticInt64971;
+    static public int staticInt64972;
+    static public int staticInt64973;
+    static public int staticInt64974;
+    static public int staticInt64975;
+    static public int staticInt64976;
+    static public int staticInt64977;
+    static public int staticInt64978;
+    static public int staticInt64979;
+    static public int staticInt64980;
+    static public int staticInt64981;
+    static public int staticInt64982;
+    static public int staticInt64983;
+    static public int staticInt64984;
+    static public int staticInt64985;
+    static public int staticInt64986;
+    static public int staticInt64987;
+    static public int staticInt64988;
+    static public int staticInt64989;
+    static public int staticInt64990;
+    static public int staticInt64991;
+    static public int staticInt64992;
+    static public int staticInt64993;
+    static public int staticInt64994;
+    static public int staticInt64995;
+    static public int staticInt64996;
+    static public int staticInt64997;
+    static public int staticInt64998;
+    static public int staticInt64999;
+    static public int staticInt65000;
+    static public int staticInt65001;
+    static public int staticInt65002;
+    static public int staticInt65003;
+    static public int staticInt65004;
+    static public int staticInt65005;
+    static public int staticInt65006;
+    static public int staticInt65007;
+    static public int staticInt65008;
+    static public int staticInt65009;
+    static public int staticInt65010;
+    static public int staticInt65011;
+    static public int staticInt65012;
+    static public int staticInt65013;
+    static public int staticInt65014;
+    static public int staticInt65015;
+    static public int staticInt65016;
+    static public int staticInt65017;
+    static public int staticInt65018;
+    static public int staticInt65019;
+    static public int staticInt65020;
+    static public int staticInt65021;
+    static public int staticInt65022;
+    static public int staticInt65023;
+    static public int staticInt65024;
+    static public int staticInt65025;
+    static public int staticInt65026;
+    static public int staticInt65027;
+    static public int staticInt65028;
+    static public int staticInt65029;
+    static public int staticInt65030;
+    static public int staticInt65031;
+    static public int staticInt65032;
+    static public int staticInt65033;
+    static public int staticInt65034;
+    static public int staticInt65035;
+    static public int staticInt65036;
+    static public int staticInt65037;
+    static public int staticInt65038;
+    static public int staticInt65039;
+    static public int staticInt65040;
+    static public int staticInt65041;
+    static public int staticInt65042;
+    static public int staticInt65043;
+    static public int staticInt65044;
+    static public int staticInt65045;
+    static public int staticInt65046;
+    static public int staticInt65047;
+    static public int staticInt65048;
+    static public int staticInt65049;
+    static public int staticInt65050;
+    static public int staticInt65051;
+    static public int staticInt65052;
+    static public int staticInt65053;
+    static public int staticInt65054;
+    static public int staticInt65055;
+    static public int staticInt65056;
+    static public int staticInt65057;
+    static public int staticInt65058;
+    static public int staticInt65059;
+    static public int staticInt65060;
+    static public int staticInt65061;
+    static public int staticInt65062;
+    static public int staticInt65063;
+    static public int staticInt65064;
+    static public int staticInt65065;
+    static public int staticInt65066;
+    static public int staticInt65067;
+    static public int staticInt65068;
+    static public int staticInt65069;
+    static public int staticInt65070;
+    static public int staticInt65071;
+    static public int staticInt65072;
+    static public int staticInt65073;
+    static public int staticInt65074;
+    static public int staticInt65075;
+    static public int staticInt65076;
+    static public int staticInt65077;
+    static public int staticInt65078;
+    static public int staticInt65079;
+    static public int staticInt65080;
+    static public int staticInt65081;
+    static public int staticInt65082;
+    static public int staticInt65083;
+    static public int staticInt65084;
+    static public int staticInt65085;
+    static public int staticInt65086;
+    static public int staticInt65087;
+    static public int staticInt65088;
+    static public int staticInt65089;
+    static public int staticInt65090;
+    static public int staticInt65091;
+    static public int staticInt65092;
+    static public int staticInt65093;
+    static public int staticInt65094;
+    static public int staticInt65095;
+    static public int staticInt65096;
+    static public int staticInt65097;
+    static public int staticInt65098;
+    static public int staticInt65099;
+    static public int staticInt65100;
+    static public int staticInt65101;
+    static public int staticInt65102;
+    static public int staticInt65103;
+    static public int staticInt65104;
+    static public int staticInt65105;
+    static public int staticInt65106;
+    static public int staticInt65107;
+    static public int staticInt65108;
+    static public int staticInt65109;
+    static public int staticInt65110;
+    static public int staticInt65111;
+    static public int staticInt65112;
+    static public int staticInt65113;
+    static public int staticInt65114;
+    static public int staticInt65115;
+    static public int staticInt65116;
+    static public int staticInt65117;
+    static public int staticInt65118;
+    static public int staticInt65119;
+    static public int staticInt65120;
+    static public int staticInt65121;
+    static public int staticInt65122;
+    static public int staticInt65123;
+    static public int staticInt65124;
+    static public int staticInt65125;
+    static public int staticInt65126;
+    static public int staticInt65127;
+    static public int staticInt65128;
+    static public int staticInt65129;
+    static public int staticInt65130;
+    static public int staticInt65131;
+    static public int staticInt65132;
+    static public int staticInt65133;
+    static public int staticInt65134;
+    static public int staticInt65135;
+    static public int staticInt65136;
+    static public int staticInt65137;
+    static public int staticInt65138;
+    static public int staticInt65139;
+    static public int staticInt65140;
+    static public int staticInt65141;
+    static public int staticInt65142;
+    static public int staticInt65143;
+    static public int staticInt65144;
+    static public int staticInt65145;
+    static public int staticInt65146;
+    static public int staticInt65147;
+    static public int staticInt65148;
+    static public int staticInt65149;
+    static public int staticInt65150;
+    static public int staticInt65151;
+    static public int staticInt65152;
+    static public int staticInt65153;
+    static public int staticInt65154;
+    static public int staticInt65155;
+    static public int staticInt65156;
+    static public int staticInt65157;
+    static public int staticInt65158;
+    static public int staticInt65159;
+    static public int staticInt65160;
+    static public int staticInt65161;
+    static public int staticInt65162;
+    static public int staticInt65163;
+    static public int staticInt65164;
+    static public int staticInt65165;
+    static public int staticInt65166;
+    static public int staticInt65167;
+    static public int staticInt65168;
+    static public int staticInt65169;
+    static public int staticInt65170;
+    static public int staticInt65171;
+    static public int staticInt65172;
+    static public int staticInt65173;
+    static public int staticInt65174;
+    static public int staticInt65175;
+    static public int staticInt65176;
+    static public int staticInt65177;
+    static public int staticInt65178;
+    static public int staticInt65179;
+    static public int staticInt65180;
+    static public int staticInt65181;
+    static public int staticInt65182;
+    static public int staticInt65183;
+    static public int staticInt65184;
+    static public int staticInt65185;
+    static public int staticInt65186;
+    static public int staticInt65187;
+    static public int staticInt65188;
+    static public int staticInt65189;
+    static public int staticInt65190;
+    static public int staticInt65191;
+    static public int staticInt65192;
+    static public int staticInt65193;
+    static public int staticInt65194;
+    static public int staticInt65195;
+    static public int staticInt65196;
+    static public int staticInt65197;
+    static public int staticInt65198;
+    static public int staticInt65199;
+    static public int staticInt65200;
+    static public int staticInt65201;
+    static public int staticInt65202;
+    static public int staticInt65203;
+    static public int staticInt65204;
+    static public int staticInt65205;
+    static public int staticInt65206;
+    static public int staticInt65207;
+    static public int staticInt65208;
+    static public int staticInt65209;
+    static public int staticInt65210;
+    static public int staticInt65211;
+    static public int staticInt65212;
+    static public int staticInt65213;
+    static public int staticInt65214;
+    static public int staticInt65215;
+    static public int staticInt65216;
+    static public int staticInt65217;
+    static public int staticInt65218;
+    static public int staticInt65219;
+    static public int staticInt65220;
+    static public int staticInt65221;
+    static public int staticInt65222;
+    static public int staticInt65223;
+    static public int staticInt65224;
+    static public int staticInt65225;
+    static public int staticInt65226;
+    static public int staticInt65227;
+    static public int staticInt65228;
+    static public int staticInt65229;
+    static public int staticInt65230;
+    static public int staticInt65231;
+    static public int staticInt65232;
+    static public int staticInt65233;
+    static public int staticInt65234;
+    static public int staticInt65235;
+    static public int staticInt65236;
+    static public int staticInt65237;
+    static public int staticInt65238;
+    static public int staticInt65239;
+    static public int staticInt65240;
+    static public int staticInt65241;
+    static public int staticInt65242;
+    static public int staticInt65243;
+    static public int staticInt65244;
+    static public int staticInt65245;
+    static public int staticInt65246;
+    static public int staticInt65247;
+    static public int staticInt65248;
+    static public int staticInt65249;
+    static public int staticInt65250;
+    static public int staticInt65251;
+    static public int staticInt65252;
+    static public int staticInt65253;
+    static public int staticInt65254;
+    static public int staticInt65255;
+    static public int staticInt65256;
+    static public int staticInt65257;
+    static public int staticInt65258;
+    static public int staticInt65259;
+    static public int staticInt65260;
+    static public int staticInt65261;
+    static public int staticInt65262;
+    static public int staticInt65263;
+    static public int staticInt65264;
+    static public int staticInt65265;
+    static public int staticInt65266;
+    static public int staticInt65267;
+    static public int staticInt65268;
+    static public int staticInt65269;
+    static public int staticInt65270;
+    static public int staticInt65271;
+    static public int staticInt65272;
+    static public int staticInt65273;
+    static public int staticInt65274;
+    static public int staticInt65275;
+    static public int staticInt65276;
+    static public int staticInt65277;
+    static public int staticInt65278;
+    static public int staticInt65279;
+    static public int staticInt65280;
+    static public int staticInt65281;
+    static public int staticInt65282;
+    static public int staticInt65283;
+    static public int staticInt65284;
+    static public int staticInt65285;
+    static public int staticInt65286;
+    static public int staticInt65287;
+    static public int staticInt65288;
+    static public int staticInt65289;
+    static public int staticInt65290;
+    static public int staticInt65291;
+    static public int staticInt65292;
+    static public int staticInt65293;
+    static public int staticInt65294;
+    static public int staticInt65295;
+    static public int staticInt65296;
+    static public int staticInt65297;
+    static public int staticInt65298;
+    static public int staticInt65299;
+    static public int staticInt65300;
+    static public int staticInt65301;
+    static public int staticInt65302;
+    static public int staticInt65303;
+    static public int staticInt65304;
+    static public int staticInt65305;
+    static public int staticInt65306;
+    static public int staticInt65307;
+    static public int staticInt65308;
+    static public int staticInt65309;
+    static public int staticInt65310;
+    static public int staticInt65311;
+    static public int staticInt65312;
+    static public int staticInt65313;
+    static public int staticInt65314;
+    static public int staticInt65315;
+    static public int staticInt65316;
+    static public int staticInt65317;
+    static public int staticInt65318;
+    static public int staticInt65319;
+    static public int staticInt65320;
+    static public int staticInt65321;
+    static public int staticInt65322;
+    static public int staticInt65323;
+    static public int staticInt65324;
+    static public int staticInt65325;
+    static public int staticInt65326;
+    static public int staticInt65327;
+    static public int staticInt65328;
+    static public int staticInt65329;
+    static public int staticInt65330;
+    static public int staticInt65331;
+    static public int staticInt65332;
+    static public int staticInt65333;
+    static public int staticInt65334;
+    static public int staticInt65335;
+    static public int staticInt65336;
+    static public int staticInt65337;
+    static public int staticInt65338;
+    static public int staticInt65339;
+    static public int staticInt65340;
+    static public int staticInt65341;
+    static public int staticInt65342;
+    static public int staticInt65343;
+    static public int staticInt65344;
+    static public int staticInt65345;
+    static public int staticInt65346;
+    static public int staticInt65347;
+    static public int staticInt65348;
+    static public int staticInt65349;
+    static public int staticInt65350;
+    static public int staticInt65351;
+    static public int staticInt65352;
+    static public int staticInt65353;
+    static public int staticInt65354;
+    static public int staticInt65355;
+    static public int staticInt65356;
+    static public int staticInt65357;
+    static public int staticInt65358;
+    static public int staticInt65359;
+    static public int staticInt65360;
+    static public int staticInt65361;
+    static public int staticInt65362;
+    static public int staticInt65363;
+    static public int staticInt65364;
+    static public int staticInt65365;
+    static public int staticInt65366;
+    static public int staticInt65367;
+    static public int staticInt65368;
+    static public int staticInt65369;
+    static public int staticInt65370;
+    static public int staticInt65371;
+    static public int staticInt65372;
+    static public int staticInt65373;
+    static public int staticInt65374;
+    static public int staticInt65375;
+    static public int staticInt65376;
+    static public int staticInt65377;
+    static public int staticInt65378;
+    static public int staticInt65379;
+    static public int staticInt65380;
+    static public int staticInt65381;
+    static public int staticInt65382;
+    static public int staticInt65383;
+    static public int staticInt65384;
+    static public int staticInt65385;
+    static public int staticInt65386;
+    static public int staticInt65387;
+    static public int staticInt65388;
+    static public int staticInt65389;
+    static public int staticInt65390;
+    static public int staticInt65391;
+    static public int staticInt65392;
+    static public int staticInt65393;
+    static public int staticInt65394;
+    static public int staticInt65395;
+    static public int staticInt65396;
+    static public int staticInt65397;
+    static public int staticInt65398;
+    static public int staticInt65399;
+    static public int staticInt65400;
+    static public int staticInt65401;
+    static public int staticInt65402;
+    static public int staticInt65403;
+    static public int staticInt65404;
+    static public int staticInt65405;
+    static public int staticInt65406;
+    static public int staticInt65407;
+    static public int staticInt65408;
+    static public int staticInt65409;
+    static public int staticInt65410;
+    static public int staticInt65411;
+    static public int staticInt65412;
+    static public int staticInt65413;
+    static public int staticInt65414;
+    static public int staticInt65415;
+    static public int staticInt65416;
+    static public int staticInt65417;
+    static public int staticInt65418;
+    static public int staticInt65419;
+    static public int staticInt65420;
+    static public int staticInt65421;
+    static public int staticInt65422;
+    static public int staticInt65423;
+    static public int staticInt65424;
+    static public int staticInt65425;
+    static public int staticInt65426;
+    static public int staticInt65427;
+    static public int staticInt65428;
+    static public int staticInt65429;
+    static public int staticInt65430;
+    static public int staticInt65431;
+    static public int staticInt65432;
+    static public int staticInt65433;
+    static public int staticInt65434;
+    static public int staticInt65435;
+    static public int staticInt65436;
+    static public int staticInt65437;
+    static public int staticInt65438;
+    static public int staticInt65439;
+    static public int staticInt65440;
+    static public int staticInt65441;
+    static public int staticInt65442;
+    static public int staticInt65443;
+    static public int staticInt65444;
+    static public int staticInt65445;
+    static public int staticInt65446;
+    static public int staticInt65447;
+    static public int staticInt65448;
+    static public int staticInt65449;
+    static public int staticInt65450;
+    static public int staticInt65451;
+    static public int staticInt65452;
+    static public int staticInt65453;
+    static public int staticInt65454;
+    static public int staticInt65455;
+    static public int staticInt65456;
+    static public int staticInt65457;
+    static public int staticInt65458;
+    static public int staticInt65459;
+    static public int staticInt65460;
+    static public int staticInt65461;
+    static public int staticInt65462;
+    static public int staticInt65463;
+    static public int staticInt65464;
+    static public int staticInt65465;
+    static public int staticInt65466;
+    static public int staticInt65467;
+    static public int staticInt65468;
+    static public int staticInt65469;
+    static public int staticInt65470;
+    static public int staticInt65471;
+    static public int staticInt65472;
+    static public int staticInt65473;
+    static public int staticInt65474;
+    static public int staticInt65475;
+    static public int staticInt65476;
+    static public int staticInt65477;
+    static public int staticInt65478;
+    static public int staticInt65479;
+    static public int staticInt65480;
+    static public int staticInt65481;
+    static public int staticInt65482;
+    static public int staticInt65483;
+    static public int staticInt65484;
+    static public int staticInt65485;
+    static public int staticInt65486;
+    static public int staticInt65487;
+    static public int staticInt65488;
+    static public int staticInt65489;
+    static public int staticInt65490;
+    static public int staticInt65491;
+    static public int staticInt65492;
+    static public int staticInt65493;
+    static public int staticInt65494;
+    static public int staticInt65495;
+    static public int staticInt65496;
+    static public int staticInt65497;
+    static public int staticInt65498;
+    static public int staticInt65499;
+    static public int staticInt65500;
+}
diff --git a/dx/tests/129-numthread-deterministic/expected.txt b/dx/tests/129-numthread-deterministic/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/129-numthread-deterministic/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/129-numthread-deterministic/info.txt b/dx/tests/129-numthread-deterministic/info.txt
new file mode 100644
index 0000000..e4885fa
--- /dev/null
+++ b/dx/tests/129-numthread-deterministic/info.txt
@@ -0,0 +1,2 @@
+Test that dx generates deterministic output when using --num-threads
+
diff --git a/dx/tests/129-numthread-deterministic/run b/dx/tests/129-numthread-deterministic/run
new file mode 100644
index 0000000..b14523e
--- /dev/null
+++ b/dx/tests/129-numthread-deterministic/run
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+# Stop if something fails.
+set -e
+
+# Write out classes
+mkdir src
+awk '
+BEGIN {
+    for (c = 1; c <= 500; c++) {
+        writeClass(c);
+    }
+}
+function writeClass(name) {
+    fileName = "src/Clazz" name ".java";
+    printf("public class Clazz%s {\n", name) > fileName;
+    for (i = 1; i <= 100; i++) {
+        printf("    int field%d;\n", i) > fileName;
+    }
+    for (i = 1; i <= 100; i++) {
+        printf("    void method%d(int param) { }\n", i) > fileName;
+    }
+    printf("}\n") > fileName;
+}'
+
+
+mkdir classes
+${JAVAC} -source 1.8 -target 1.8 -d classes `find src -name '*.java'`
+
+mkdir out
+dx -JXmx4g -JXms4g --dex --no-optimize --output=out classes
+
+mkdir out-multi
+dx -JXmx4g -JXms4g --dex --no-optimize --num-threads=4 --output=out-multi classes
+
+diff -r out out-multi > unit-out.txt
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/130-numthread-multidex-deterministic/expected.txt b/dx/tests/130-numthread-multidex-deterministic/expected.txt
new file mode 100644
index 0000000..5418338
--- /dev/null
+++ b/dx/tests/130-numthread-multidex-deterministic/expected.txt
@@ -0,0 +1 @@
+Yay!
diff --git a/dx/tests/130-numthread-multidex-deterministic/info.txt b/dx/tests/130-numthread-multidex-deterministic/info.txt
new file mode 100644
index 0000000..e4885fa
--- /dev/null
+++ b/dx/tests/130-numthread-multidex-deterministic/info.txt
@@ -0,0 +1,2 @@
+Test that dx generates deterministic output when using --num-threads
+
diff --git a/dx/tests/130-numthread-multidex-deterministic/run b/dx/tests/130-numthread-multidex-deterministic/run
new file mode 100644
index 0000000..efcf435
--- /dev/null
+++ b/dx/tests/130-numthread-multidex-deterministic/run
@@ -0,0 +1,54 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+# Stop if something fails.
+set -e
+
+# Write out classes
+mkdir src
+awk '
+BEGIN {
+    for (c = 1; c <= 1000; c++) {
+        writeClass(c);
+    }
+}
+function writeClass(name) {
+    fileName = "src/Clazz" name ".java";
+    printf("public class Clazz%s {\n", name) > fileName;
+    for (i = 1; i <= 100; i++) {
+        printf("    int field%d;\n", i) > fileName;
+    }
+    for (i = 1; i <= 100; i++) {
+        printf("    void method%d(int param) { }\n", i) > fileName;
+    }
+    printf("}\n") > fileName;
+}'
+
+mkdir classes
+${JAVAC} -d classes `find src -name '*.java'`
+
+mkdir out
+dx -JXmx4g -JXms4g --dex --no-optimize --multi-dex --output=out classes
+
+mkdir out-multi
+dx -JXmx4g -JXms4g --dex --no-optimize --multi-dex --num-threads=4 --output=out-multi classes
+
+diff -r out out-multi > unit-out.txt
+if [ "$?" = "0" ]; then
+    echo "Yay!"
+else
+    cat unit-out.txt
+fi
diff --git a/dx/tests/131-perf/ClassGen.java b/dx/tests/131-perf/ClassGen.java
new file mode 100644
index 0000000..c35bbcf
--- /dev/null
+++ b/dx/tests/131-perf/ClassGen.java
@@ -0,0 +1,53 @@
+import java.io.File;
+import java.io.PrintWriter;
+
+public class ClassGen {
+
+    public static void main(String... args) {
+
+	int start = 1;
+        int end =   8024;
+	int fields =   4;
+        int methods =   6;
+	if (args.length > 0) {
+	    start = Integer.parseInt(args[0]);
+        }
+	if (args.length > 1) {
+	    end = Integer.parseInt(args[1]);
+        }
+	if (args.length > 2) {
+	    fields = Integer.parseInt(args[2]);
+        }
+	if (args.length > 3) {
+	    methods = Integer.parseInt(args[3]);
+        }
+
+	for (int file = start; file <= end; file++) {
+            try {
+	        File f = new File("src/Clazz" + file + ".java");
+	        PrintWriter pw = new PrintWriter(f);
+		pw.println("class Clazz" + file + " {");
+		for (int field = 1; field <= fields; field++) {
+		    pw.println("    public static int f" + field + ";");
+		}
+		for (int method = 1; method <= methods; method++) {
+		    pw.println("    boolean m" + method + "_" + (file%(end/2)) + "() {"
+);
+		    pw.println("      int max = Thread.MAX_PRIORITY;");
+		    pw.println("      for (int i = 0; i < max; i++) {");
+		    pw.println("        System.out.println(\"Hello from: \" + Clazz"
+                            + file + ".class + \".method" + method
+                            + "() \" + Clazz" + (end-file+1) + ".f1);");
+		    pw.println("        Thread.dumpStack();");
+		    pw.println("      }");
+		    pw.println("      return Thread.holdsLock(this);");
+		    pw.println("    }");
+		}
+		pw.println("}");
+                pw.close();
+            } catch(Exception ex) {
+		System.out.println("Ups");
+            }
+        }
+    }
+}
diff --git a/dx/tests/131-perf/expected.txt b/dx/tests/131-perf/expected.txt
new file mode 100644
index 0000000..6a7da70
--- /dev/null
+++ b/dx/tests/131-perf/expected.txt
@@ -0,0 +1,2 @@
+1000 / 1000
+Yay!
diff --git a/dx/tests/131-perf/info.txt b/dx/tests/131-perf/info.txt
new file mode 100644
index 0000000..f5b6a0c
--- /dev/null
+++ b/dx/tests/131-perf/info.txt
@@ -0,0 +1,2 @@
+Script for --multi-dex --num-threads performance testing, default just test options can be used together
+
diff --git a/dx/tests/131-perf/run b/dx/tests/131-perf/run
new file mode 100644
index 0000000..91d59a1
--- /dev/null
+++ b/dx/tests/131-perf/run
@@ -0,0 +1,86 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+# Stop if something fails.
+set -e
+
+JAVAC_SOURCE=1.7
+JAVAC_TARGET=1.8
+JAVAC_OPTIONS="-Xlint:-options -source ${JAVAC_SOURCE} -target ${JAVAC_TARGET}"
+
+# Write out classes
+
+${JAVAC} ${JAVAC_OPTIONS} ClassGen.java
+
+mkdir src
+mkdir classes
+
+# Heap size, min and max
+MEM=4g
+
+MULTIDEX="--multi-dex"
+THREADS="--num-threads=5"
+
+# Extra statistics, use to calibrate test.
+#EXTRA="--profile-concurrency"
+
+# Test smaller dex files
+#EXTRA="--set-max-idx-number=20000"
+
+# Test GC options
+#GC="-JXX:+UseConcMarkSweepGC"
+
+# Limit HW threads
+#TASKSET="taskset 0x00000fff
+
+# Number of classes, initial
+TEST_SIZE=1000
+
+# number of classes, max
+LIMIT=1000
+
+# Number of additional classes per test
+STEP=100
+
+# Number of fields per classes
+FIELDS=4
+
+# Number of methods per class
+METHODS=6
+
+first=1;
+while [ $TEST_SIZE -le $LIMIT ]; do
+  echo $TEST_SIZE / $LIMIT
+  rm -rf out
+  mkdir out
+
+  sleep 2
+  ${JAVA} -classpath . ClassGen $first $TEST_SIZE $FIELDS $METHODS || exit 1
+  first=`expr $TEST_SIZE + 1`
+
+  ${JAVAC} ${JAVAC_OPTIONS} -d classes `find src -name '*.java'` || exit 1
+  (cd classes; jar cf ../x.jar `find . -name '*.class'`)
+  sleep 3
+
+  start=`date +'%s%N'`
+  $TASKSET dx -JXmx$MEM -JXms$MEM $GC --dex $EXTRA --no-optimize $MULTIDEX $THREADS --output=out x.jar || exit 1
+  end=`date +'%s%N'`
+  nsec=`expr $end - $start`
+  msec=`expr $nsec / 1000000`
+  TEST_SIZE=`expr $TEST_SIZE + $STEP`
+done
+
+echo Yay!
diff --git a/dx/tests/132-invoke-polymorphic/TestInvokePolymorphic.class b/dx/tests/132-invoke-polymorphic/TestInvokePolymorphic.class
new file mode 100644
index 0000000..da971a8
Binary files /dev/null and b/dx/tests/132-invoke-polymorphic/TestInvokePolymorphic.class differ
diff --git a/dx/tests/132-invoke-polymorphic/TestInvokePolymorphic.java b/dx/tests/132-invoke-polymorphic/TestInvokePolymorphic.java
new file mode 100644
index 0000000..ac02b70
--- /dev/null
+++ b/dx/tests/132-invoke-polymorphic/TestInvokePolymorphic.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+import java.lang.invoke.MethodHandle;
+
+public class TestInvokePolymorphic {
+    public static void testInvokeVoidReturnNoArgs(MethodHandle mh) throws Throwable {
+        mh.invoke();
+    }
+
+    public static void testInvokeExactVoidReturnNoArgs(MethodHandle mh) throws Throwable {
+        mh.invokeExact();
+    }
+
+    public static int testInvokeIntReturnNoArgs(MethodHandle mh) throws Throwable {
+        return (int) mh.invoke();
+    }
+
+    public static int testInvokeExactIntReturnNoArgs(MethodHandle mh) throws Throwable {
+        return (int) mh.invokeExact();
+    }
+
+    public static long testInvokeLongReturnNoArgs(MethodHandle mh) throws Throwable {
+        return (long) mh.invoke();
+    }
+
+    public static long testInvokeExactLongReturnNoArgs(MethodHandle mh) throws Throwable {
+        return (long) mh.invokeExact();
+    }
+
+    public static double testInvokeDoubleReturnNoArgs(MethodHandle mh) throws Throwable {
+        return (double) mh.invoke();
+    }
+
+    public static double testInvokeExactDoubleReturnNoArgs(MethodHandle mh) throws Throwable {
+        return (double) mh.invokeExact();
+    }
+
+    public static double testInvokeDoubleReturn2Arguments(MethodHandle mh, Object o, long l)
+            throws Throwable {
+        return (double) mh.invoke(o, l);
+    }
+
+    public static double testInvokeExactDoubleReturn2Arguments(MethodHandle mh, Object o, long l)
+            throws Throwable {
+        return (double) mh.invokeExact(o, l);
+    }
+
+    public static void testInvokeVoidReturn3IntArguments(MethodHandle mh, int x, int y, int z)
+            throws Throwable {
+        mh.invoke( x, y, z);
+    }
+
+    public static void testInvokeExactVoidReturn3IntArguments(MethodHandle mh, int x, int y, int z)
+            throws Throwable {
+        mh.invokeExact(x, y, z);
+    }
+
+    public static void testInvokeVoidReturn3Arguments(MethodHandle mh, Object o, long l, double d)
+            throws Throwable {
+        mh.invoke(o, l, d);
+    }
+
+    public static void testInvokeExactVoidReturn3Arguments(MethodHandle mh, Object o, long l,
+                                                           double d) throws Throwable {
+        mh.invokeExact(o, l, d);
+    }
+
+    public static int testInvokeIntReturn5Arguments(MethodHandle mh, Object o, long l, double d,
+                                                    float f, String s) throws Throwable {
+        return (int) mh.invoke(o, l, d, f, s);
+    }
+
+    public static int testInvokeExactIntReturn5Arguments(MethodHandle mh, Object o, long l,
+                                                         double d, float f, String s)
+            throws Throwable {
+        return (int) mh.invokeExact(o, l, d, f, s);
+    }
+}
diff --git a/dx/tests/132-invoke-polymorphic/build b/dx/tests/132-invoke-polymorphic/build
new file mode 100644
index 0000000..5d6b981
--- /dev/null
+++ b/dx/tests/132-invoke-polymorphic/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+$JAVAC -source 1.7 -target 1.7 -g -d . *.java
diff --git a/dx/tests/132-invoke-polymorphic/expected.txt b/dx/tests/132-invoke-polymorphic/expected.txt
new file mode 100644
index 0000000..0c8baea
--- /dev/null
+++ b/dx/tests/132-invoke-polymorphic/expected.txt
@@ -0,0 +1,1488 @@
+Trying SDK version 20 with invoke-polymorphic.
+com.android.dx.cf.code.SimException: ERROR in TestInvokePolymorphic.testInvokeVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V: invoking a signature-polymorphic requires --min-sdk-version >= 26 (currently 20)
+000000: 6465 780a 3033 3800     |magic: "dex\n038\0"
+000008: e0bf ccf6               |checksum
+00000c: 8d21 2f5c 9993 542c 2566|signature
+000016: e0ce d615 6943 fc57 48a3|
+000020: 780b 0000               |file_size:       00000b78
+000024: 7000 0000               |header_size:     00000070
+000028: 7856 3412               |endian_tag:      12345678
+00002c: 0000 0000               |link_size:       0
+000030: 0000 0000               |link_off:        0
+000034: c00a 0000               |map_off:         00000ac0
+000038: 3800 0000               |string_ids_size: 00000038
+00003c: 7000 0000               |string_ids_off:  00000070
+000040: 0c00 0000               |type_ids_size:   0000000c
+000044: 5001 0000               |type_ids_off:    00000150
+000048: 1100 0000               |proto_ids_size:  00000011
+00004c: 8001 0000               |proto_ids_off:   00000180
+000050: 0000 0000               |field_ids_size:  00000000
+000054: 0000 0000               |field_ids_off:   00000000
+000058: 2400 0000               |method_ids_size: 00000024
+00005c: 4c02 0000               |method_ids_off:  0000024c
+000060: 0100 0000               |class_defs_size: 00000001
+000064: 6c03 0000               |class_defs_off:  0000036c
+000068: ec07 0000               |data_size:       000007ec
+00006c: 8c03 0000               |data_off:        0000038c
+                                |
+                                |string_ids:
+                                |[0] "<init>"
+000070: 7006 0000               |  string_data_off: 00000670
+                                |[1] "D"
+000074: 7806 0000               |  string_data_off: 00000678
+                                |[2] "DL"
+000078: 7b06 0000               |  string_data_off: 0000067b
+                                |[3] "DLJ"
+00007c: 7f06 0000               |  string_data_off: 0000067f
+                                |[4] "DLLJ"
+000080: 8406 0000               |  string_data_off: 00000684
+                                |[5] "F"
+000084: 8a06 0000               |  string_data_off: 0000068a
+                                |[6] "I"
+000088: 8d06 0000               |  string_data_off: 0000068d
+                                |[7] "IL"
+00008c: 9006 0000               |  string_data_off: 00000690
+                                |[8] "ILJDFL"
+000090: 9406 0000               |  string_data_off: 00000694
+                                |[9] "ILLJDFL"
+000094: 9c06 0000               |  string_data_off: 0000069c
+                                |[a] "J"
+000098: a506 0000               |  string_data_off: 000006a5
+                                |[b] "JL"
+00009c: a806 0000               |  string_data_off: 000006a8
+                                |[c] "LL"
+0000a0: ac06 0000               |  string_data_off: 000006ac
+                                |[d] "LTestInvokePolymorphic;"
+0000a4: b006 0000               |  string_data_off: 000006b0
+                                |[e] "Ldalvik/annotation/Throws;"
+0000a8: c906 0000               |  string_data_off: 000006c9
+                                |[f] "Ljava/lang/Object;"
+0000ac: e506 0000               |  string_data_off: 000006e5
+                                |[10] "Ljava/lang/String;"
+0000b0: f906 0000               |  string_data_off: 000006f9
+                                |[11] "Ljava/lang/Throwable;"
+0000b4: 0d07 0000               |  string_data_off: 0000070d
+                                |[12] "Ljava/lang/invoke/MethodHandle;"
+0000b8: 2407 0000               |  string_data_off: 00000724
+                                |[13] "TestInvokePolymorphic.java"
+0000bc: 4507 0000               |  string_data_off: 00000745
+                                |[14] "V"
+0000c0: 6107 0000               |  string_data_off: 00000761
+                                |[15] "VIII"
+0000c4: 6407 0000               |  string_data_off: 00000764
+                                |[16] "VL"
+0000c8: 6a07 0000               |  string_data_off: 0000076a
+                                |[17] "VLIII"
+0000cc: 6e07 0000               |  string_data_off: 0000076e
+                                |[18] "VLJD"
+0000d0: 7507 0000               |  string_data_off: 00000775
+                                |[19] "VLLJD"
+0000d4: 7b07 0000               |  string_data_off: 0000077b
+                                |[1a] "[Ljava/lang/Object;"
+0000d8: 8207 0000               |  string_data_off: 00000782
+                                |[1b] "d"
+0000dc: 9707 0000               |  string_data_off: 00000797
+                                |[1c] "f"
+0000e0: 9a07 0000               |  string_data_off: 0000079a
+                                |[1d] "invoke"
+0000e4: 9d07 0000               |  string_data_off: 0000079d
+                                |[1e] "invokeExact"
+0000e8: a507 0000               |  string_data_off: 000007a5
+                                |[1f] "l"
+0000ec: b207 0000               |  string_data_off: 000007b2
+                                |[20] "mh"
+0000f0: b507 0000               |  string_data_off: 000007b5
+                                |[21] "o"
+0000f4: b907 0000               |  string_data_off: 000007b9
+                                |[22] "s"
+0000f8: bc07 0000               |  string_data_off: 000007bc
+                                |[23] "testInvokeDoubleReturn2Arguments"
+0000fc: bf07 0000               |  string_data_off: 000007bf
+                                |[24] "testInvokeDoubleReturnNoArgs"
+000100: e107 0000               |  string_data_off: 000007e1
+                                |[25] "testInvokeExactDoubleReturn2Arguments"
+000104: ff07 0000               |  string_data_off: 000007ff
+                                |[26] "testInvokeExactDoubleReturnNoArgs"
+000108: 2608 0000               |  string_data_off: 00000826
+                                |[27] "testInvokeExactIntReturn5Arguments"
+00010c: 4908 0000               |  string_data_off: 00000849
+                                |[28] "testInvokeExactIntReturnNoArgs"
+000110: 6d08 0000               |  string_data_off: 0000086d
+                                |[29] "testInvokeExactLongReturnNoArgs"
+000114: 8d08 0000               |  string_data_off: 0000088d
+                                |[2a] "testInvokeExactVoidReturn3Arguments"
+000118: ae08 0000               |  string_data_off: 000008ae
+                                |[2b] "testInvokeExactVoidReturn3IntArguments"
+00011c: d308 0000               |  string_data_off: 000008d3
+                                |[2c] "testInvokeExactVoidReturnNoArgs"
+000120: fb08 0000               |  string_data_off: 000008fb
+                                |[2d] "testInvokeIntReturn5Arguments"
+000124: 1c09 0000               |  string_data_off: 0000091c
+                                |[2e] "testInvokeIntReturnNoArgs"
+000128: 3b09 0000               |  string_data_off: 0000093b
+                                |[2f] "testInvokeLongReturnNoArgs"
+00012c: 5609 0000               |  string_data_off: 00000956
+                                |[30] "testInvokeVoidReturn3Arguments"
+000130: 7209 0000               |  string_data_off: 00000972
+                                |[31] "testInvokeVoidReturn3IntArguments"
+000134: 9209 0000               |  string_data_off: 00000992
+                                |[32] "testInvokeVoidReturnNoArgs"
+000138: b509 0000               |  string_data_off: 000009b5
+                                |[33] "this"
+00013c: d109 0000               |  string_data_off: 000009d1
+                                |[34] "value"
+000140: d709 0000               |  string_data_off: 000009d7
+                                |[35] "x"
+000144: de09 0000               |  string_data_off: 000009de
+                                |[36] "y"
+000148: e109 0000               |  string_data_off: 000009e1
+                                |[37] "z"
+00014c: e409 0000               |  string_data_off: 000009e4
+                                |
+                                |type_ids:
+                                |[0] D
+000150: 0100 0000               |  descriptor_idx: 00000001
+                                |[1] F
+000154: 0500 0000               |  descriptor_idx: 00000005
+                                |[2] I
+000158: 0600 0000               |  descriptor_idx: 00000006
+                                |[3] J
+00015c: 0a00 0000               |  descriptor_idx: 0000000a
+                                |[4] LTestInvokePolymorphic;
+000160: 0d00 0000               |  descriptor_idx: 0000000d
+                                |[5] Ldalvik/annotation/Throws;
+000164: 0e00 0000               |  descriptor_idx: 0000000e
+                                |[6] Ljava/lang/Object;
+000168: 0f00 0000               |  descriptor_idx: 0000000f
+                                |[7] Ljava/lang/String;
+00016c: 1000 0000               |  descriptor_idx: 00000010
+                                |[8] Ljava/lang/Throwable;
+000170: 1100 0000               |  descriptor_idx: 00000011
+                                |[9] Ljava/lang/invoke/MethodHandle;
+000174: 1200 0000               |  descriptor_idx: 00000012
+                                |[a] V
+000178: 1400 0000               |  descriptor_idx: 00000014
+                                |[b] [Ljava/lang/Object;
+00017c: 1a00 0000               |  descriptor_idx: 0000001a
+                                |
+                                |proto_ids:
+                                |[0] double proto()
+000180: 0100 0000               |  shorty_idx:      00000001 // "D"
+000184: 0000 0000               |  return_type_idx: 00000000 // double
+000188: 0000 0000               |  parameters_off:  00000000
+                                |[1] double proto(java.lang.Object, long)
+00018c: 0300 0000               |  shorty_idx:      00000003 // "DLJ"
+000190: 0000 0000               |  return_type_idx: 00000000 // double
+000194: fc05 0000               |  parameters_off:  000005fc
+                                |[2] double proto(java.lang.invoke.MethodHandle)
+000198: 0200 0000               |  shorty_idx:      00000002 // "DL"
+00019c: 0000 0000               |  return_type_idx: 00000000 // double
+0001a0: 0406 0000               |  parameters_off:  00000604
+                                |[3] double proto(java.lang.invoke.MethodHandle, java.lang.Object, long)
+0001a4: 0400 0000               |  shorty_idx:      00000004 // "DLLJ"
+0001a8: 0000 0000               |  return_type_idx: 00000000 // double
+0001ac: 0c06 0000               |  parameters_off:  0000060c
+                                |[4] int proto()
+0001b0: 0600 0000               |  shorty_idx:      00000006 // "I"
+0001b4: 0200 0000               |  return_type_idx: 00000002 // int
+0001b8: 0000 0000               |  parameters_off:  00000000
+                                |[5] int proto(java.lang.Object, long, double, float, java.lang.String)
+0001bc: 0800 0000               |  shorty_idx:      00000008 // "ILJDFL"
+0001c0: 0200 0000               |  return_type_idx: 00000002 // int
+0001c4: 1806 0000               |  parameters_off:  00000618
+                                |[6] int proto(java.lang.invoke.MethodHandle)
+0001c8: 0700 0000               |  shorty_idx:      00000007 // "IL"
+0001cc: 0200 0000               |  return_type_idx: 00000002 // int
+0001d0: 0406 0000               |  parameters_off:  00000604
+                                |[7] int proto(java.lang.invoke.MethodHandle, java.lang.Object, long, double, float, java.lang.String)
+0001d4: 0900 0000               |  shorty_idx:      00000009 // "ILLJDFL"
+0001d8: 0200 0000               |  return_type_idx: 00000002 // int
+0001dc: 2806 0000               |  parameters_off:  00000628
+                                |[8] long proto()
+0001e0: 0a00 0000               |  shorty_idx:      0000000a // "J"
+0001e4: 0300 0000               |  return_type_idx: 00000003 // long
+0001e8: 0000 0000               |  parameters_off:  00000000
+                                |[9] long proto(java.lang.invoke.MethodHandle)
+0001ec: 0b00 0000               |  shorty_idx:      0000000b // "JL"
+0001f0: 0300 0000               |  return_type_idx: 00000003 // long
+0001f4: 0406 0000               |  parameters_off:  00000604
+                                |[a] java.lang.Object proto(java.lang.Object[])
+0001f8: 0c00 0000               |  shorty_idx:      0000000c // "LL"
+0001fc: 0600 0000               |  return_type_idx: 00000006 // java.lang.Object
+000200: 3806 0000               |  parameters_off:  00000638
+                                |[b] void proto()
+000204: 1400 0000               |  shorty_idx:      00000014 // "V"
+000208: 0a00 0000               |  return_type_idx: 0000000a // void
+00020c: 0000 0000               |  parameters_off:  00000000
+                                |[c] void proto(int, int, int)
+000210: 1500 0000               |  shorty_idx:      00000015 // "VIII"
+000214: 0a00 0000               |  return_type_idx: 0000000a // void
+000218: 4006 0000               |  parameters_off:  00000640
+                                |[d] void proto(java.lang.Object, long, double)
+00021c: 1800 0000               |  shorty_idx:      00000018 // "VLJD"
+000220: 0a00 0000               |  return_type_idx: 0000000a // void
+000224: 4c06 0000               |  parameters_off:  0000064c
+                                |[e] void proto(java.lang.invoke.MethodHandle)
+000228: 1600 0000               |  shorty_idx:      00000016 // "VL"
+00022c: 0a00 0000               |  return_type_idx: 0000000a // void
+000230: 0406 0000               |  parameters_off:  00000604
+                                |[f] void proto(java.lang.invoke.MethodHandle, int, int, int)
+000234: 1700 0000               |  shorty_idx:      00000017 // "VLIII"
+000238: 0a00 0000               |  return_type_idx: 0000000a // void
+00023c: 5806 0000               |  parameters_off:  00000658
+                                |[10] void proto(java.lang.invoke.MethodHandle, java.lang.Object, long, double)
+000240: 1900 0000               |  shorty_idx:      00000019 // "VLLJD"
+000244: 0a00 0000               |  return_type_idx: 0000000a // void
+000248: 6406 0000               |  parameters_off:  00000664
+                                |
+                                |field_ids:
+                                |
+                                |method_ids:
+                                |[0] TestInvokePolymorphic.<init>:()V
+00024c: 0400                    |  class_idx: 0004
+00024e: 0b00                    |  proto_idx: 000b
+000250: 0000 0000               |  name_idx:  00000000
+                                |[1] TestInvokePolymorphic.testInvokeDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+000254: 0400                    |  class_idx: 0004
+000256: 0300                    |  proto_idx: 0003
+000258: 2300 0000               |  name_idx:  00000023
+                                |[2] TestInvokePolymorphic.testInvokeDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+00025c: 0400                    |  class_idx: 0004
+00025e: 0200                    |  proto_idx: 0002
+000260: 2400 0000               |  name_idx:  00000024
+                                |[3] TestInvokePolymorphic.testInvokeExactDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+000264: 0400                    |  class_idx: 0004
+000266: 0300                    |  proto_idx: 0003
+000268: 2500 0000               |  name_idx:  00000025
+                                |[4] TestInvokePolymorphic.testInvokeExactDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+00026c: 0400                    |  class_idx: 0004
+00026e: 0200                    |  proto_idx: 0002
+000270: 2600 0000               |  name_idx:  00000026
+                                |[5] TestInvokePolymorphic.testInvokeExactIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+000274: 0400                    |  class_idx: 0004
+000276: 0700                    |  proto_idx: 0007
+000278: 2700 0000               |  name_idx:  00000027
+                                |[6] TestInvokePolymorphic.testInvokeExactIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+00027c: 0400                    |  class_idx: 0004
+00027e: 0600                    |  proto_idx: 0006
+000280: 2800 0000               |  name_idx:  00000028
+                                |[7] TestInvokePolymorphic.testInvokeExactLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+000284: 0400                    |  class_idx: 0004
+000286: 0900                    |  proto_idx: 0009
+000288: 2900 0000               |  name_idx:  00000029
+                                |[8] TestInvokePolymorphic.testInvokeExactVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+00028c: 0400                    |  class_idx: 0004
+00028e: 1000                    |  proto_idx: 0010
+000290: 2a00 0000               |  name_idx:  0000002a
+                                |[9] TestInvokePolymorphic.testInvokeExactVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+000294: 0400                    |  class_idx: 0004
+000296: 0f00                    |  proto_idx: 000f
+000298: 2b00 0000               |  name_idx:  0000002b
+                                |[a] TestInvokePolymorphic.testInvokeExactVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+00029c: 0400                    |  class_idx: 0004
+00029e: 0e00                    |  proto_idx: 000e
+0002a0: 2c00 0000               |  name_idx:  0000002c
+                                |[b] TestInvokePolymorphic.testInvokeIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+0002a4: 0400                    |  class_idx: 0004
+0002a6: 0700                    |  proto_idx: 0007
+0002a8: 2d00 0000               |  name_idx:  0000002d
+                                |[c] TestInvokePolymorphic.testInvokeIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+0002ac: 0400                    |  class_idx: 0004
+0002ae: 0600                    |  proto_idx: 0006
+0002b0: 2e00 0000               |  name_idx:  0000002e
+                                |[d] TestInvokePolymorphic.testInvokeLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+0002b4: 0400                    |  class_idx: 0004
+0002b6: 0900                    |  proto_idx: 0009
+0002b8: 2f00 0000               |  name_idx:  0000002f
+                                |[e] TestInvokePolymorphic.testInvokeVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+0002bc: 0400                    |  class_idx: 0004
+0002be: 1000                    |  proto_idx: 0010
+0002c0: 3000 0000               |  name_idx:  00000030
+                                |[f] TestInvokePolymorphic.testInvokeVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+0002c4: 0400                    |  class_idx: 0004
+0002c6: 0f00                    |  proto_idx: 000f
+0002c8: 3100 0000               |  name_idx:  00000031
+                                |[10] TestInvokePolymorphic.testInvokeVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+0002cc: 0400                    |  class_idx: 0004
+0002ce: 0e00                    |  proto_idx: 000e
+0002d0: 3200 0000               |  name_idx:  00000032
+                                |[11] java.lang.Object.<init>:()V
+0002d4: 0600                    |  class_idx: 0006
+0002d6: 0b00                    |  proto_idx: 000b
+0002d8: 0000 0000               |  name_idx:  00000000
+                                |[12] java.lang.invoke.MethodHandle.invoke:()D
+0002dc: 0900                    |  class_idx: 0009
+0002de: 0000                    |  proto_idx: 0000
+0002e0: 1d00 0000               |  name_idx:  0000001d
+                                |[13] java.lang.invoke.MethodHandle.invoke:(Ljava/lang/Object;J)D
+0002e4: 0900                    |  class_idx: 0009
+0002e6: 0100                    |  proto_idx: 0001
+0002e8: 1d00 0000               |  name_idx:  0000001d
+                                |[14] java.lang.invoke.MethodHandle.invoke:()I
+0002ec: 0900                    |  class_idx: 0009
+0002ee: 0400                    |  proto_idx: 0004
+0002f0: 1d00 0000               |  name_idx:  0000001d
+                                |[15] java.lang.invoke.MethodHandle.invoke:(Ljava/lang/Object;JDFLjava/lang/String;)I
+0002f4: 0900                    |  class_idx: 0009
+0002f6: 0500                    |  proto_idx: 0005
+0002f8: 1d00 0000               |  name_idx:  0000001d
+                                |[16] java.lang.invoke.MethodHandle.invoke:()J
+0002fc: 0900                    |  class_idx: 0009
+0002fe: 0800                    |  proto_idx: 0008
+000300: 1d00 0000               |  name_idx:  0000001d
+                                |[17] java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;
+000304: 0900                    |  class_idx: 0009
+000306: 0a00                    |  proto_idx: 000a
+000308: 1d00 0000               |  name_idx:  0000001d
+                                |[18] java.lang.invoke.MethodHandle.invoke:()V
+00030c: 0900                    |  class_idx: 0009
+00030e: 0b00                    |  proto_idx: 000b
+000310: 1d00 0000               |  name_idx:  0000001d
+                                |[19] java.lang.invoke.MethodHandle.invoke:(III)V
+000314: 0900                    |  class_idx: 0009
+000316: 0c00                    |  proto_idx: 000c
+000318: 1d00 0000               |  name_idx:  0000001d
+                                |[1a] java.lang.invoke.MethodHandle.invoke:(Ljava/lang/Object;JD)V
+00031c: 0900                    |  class_idx: 0009
+00031e: 0d00                    |  proto_idx: 000d
+000320: 1d00 0000               |  name_idx:  0000001d
+                                |[1b] java.lang.invoke.MethodHandle.invokeExact:()D
+000324: 0900                    |  class_idx: 0009
+000326: 0000                    |  proto_idx: 0000
+000328: 1e00 0000               |  name_idx:  0000001e
+                                |[1c] java.lang.invoke.MethodHandle.invokeExact:(Ljava/lang/Object;J)D
+00032c: 0900                    |  class_idx: 0009
+00032e: 0100                    |  proto_idx: 0001
+000330: 1e00 0000               |  name_idx:  0000001e
+                                |[1d] java.lang.invoke.MethodHandle.invokeExact:()I
+000334: 0900                    |  class_idx: 0009
+000336: 0400                    |  proto_idx: 0004
+000338: 1e00 0000               |  name_idx:  0000001e
+                                |[1e] java.lang.invoke.MethodHandle.invokeExact:(Ljava/lang/Object;JDFLjava/lang/String;)I
+00033c: 0900                    |  class_idx: 0009
+00033e: 0500                    |  proto_idx: 0005
+000340: 1e00 0000               |  name_idx:  0000001e
+                                |[1f] java.lang.invoke.MethodHandle.invokeExact:()J
+000344: 0900                    |  class_idx: 0009
+000346: 0800                    |  proto_idx: 0008
+000348: 1e00 0000               |  name_idx:  0000001e
+                                |[20] java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;
+00034c: 0900                    |  class_idx: 0009
+00034e: 0a00                    |  proto_idx: 000a
+000350: 1e00 0000               |  name_idx:  0000001e
+                                |[21] java.lang.invoke.MethodHandle.invokeExact:()V
+000354: 0900                    |  class_idx: 0009
+000356: 0b00                    |  proto_idx: 000b
+000358: 1e00 0000               |  name_idx:  0000001e
+                                |[22] java.lang.invoke.MethodHandle.invokeExact:(III)V
+00035c: 0900                    |  class_idx: 0009
+00035e: 0c00                    |  proto_idx: 000c
+000360: 1e00 0000               |  name_idx:  0000001e
+                                |[23] java.lang.invoke.MethodHandle.invokeExact:(Ljava/lang/Object;JD)V
+000364: 0900                    |  class_idx: 0009
+000366: 0d00                    |  proto_idx: 000d
+000368: 1e00 0000               |  name_idx:  0000001e
+                                |
+                                |class_defs:
+                                |[0] TestInvokePolymorphic
+00036c: 0400 0000               |  class_idx:           00000004
+000370: 0100 0000               |  access_flags:        public
+000374: 0600 0000               |  superclass_idx:      00000006 // java.lang.Object
+000378: 0000 0000               |  interfaces_off:      00000000
+00037c: 1300 0000               |  source_file_idx:     00000013 // TestInvokePolymorphic.java
+000380: 6c05 0000               |  annotations_off:     0000056c
+000384: 740a 0000               |  class_data_off:      00000a74
+000388: 0000 0000               |  static_values_off:   00000000
+                                |
+                                |word_data:
+                                |[38c] annotation set
+00038c: 0100 0000               |  size: 00000001
+000390: 6c0a 0000               |  entries[0]: 00000a6c
+                                |    visibility: system
+                                |    type: dalvik.annotation.Throws
+                                |    value: array {java.lang.Throwable}
+                                |
+                                |[394] TestInvokePolymorphic.<init>:()V
+000394: 0100                    |  registers_size: 0001
+000396: 0100                    |  ins_size:       0001
+000398: 0100                    |  outs_size:      0001
+00039a: 0000                    |  tries_size:     0000
+00039c: e709 0000               |  debug_off:      000009e7
+0003a0: 0400 0000               |  insns_size:     00000004
+0003a4: 7010 1100 0000          |  0000: invoke-direct {v0}, java.lang.Object.<init>:()V // method@0011
+0003aa: 0e00                    |  0003: return-void
+                                |  debug info
+                                |    line_start: 19
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 19
+                                |    end sequence
+                                |
+                                |[3ac] TestInvokePolymorphic.testInvokeDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+0003ac: 0600                    |  registers_size: 0006
+0003ae: 0400                    |  ins_size:       0004
+0003b0: 0400                    |  outs_size:      0004
+0003b2: 0000                    |  tries_size:     0000
+0003b4: ec09 0000               |  debug_off:      000009ec
+0003b8: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+0003bc: fa40 1700 3254 0100     |  0000: invoke-polymorphic {v2, v3, v4, v5}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/Object;J)D // method@0017, proto@0001
+0003c4: 0b00                    |  0004: move-result-wide v0
+0003c6: 1000                    |  0005: return-wide v0
+                                |  debug info
+                                |    line_start: 54
+                                |    parameters_size: 0003
+                                |    parameter mh v2
+                                |    parameter o v3
+                                |    parameter l v4
+                                |    0000: prologue end
+                                |    0000: line 54
+                                |    end sequence
+                                |
+                                |[3c8] TestInvokePolymorphic.testInvokeDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+0003c8: 0300                    |  registers_size: 0003
+0003ca: 0100                    |  ins_size:       0001
+0003cc: 0100                    |  outs_size:      0001
+0003ce: 0000                    |  tries_size:     0000
+0003d0: f409 0000               |  debug_off:      000009f4
+0003d4: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+0003d8: fa10 1700 0200 0000     |  0000: invoke-polymorphic {v2}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, ()D // method@0017, proto@0000
+0003e0: 0b00                    |  0004: move-result-wide v0
+0003e2: 1000                    |  0005: return-wide v0
+                                |  debug info
+                                |    line_start: 45
+                                |    parameters_size: 0001
+                                |    parameter mh v2
+                                |    0000: prologue end
+                                |    0000: line 45
+                                |    end sequence
+                                |
+                                |[3e4] TestInvokePolymorphic.testInvokeExactDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+0003e4: 0600                    |  registers_size: 0006
+0003e6: 0400                    |  ins_size:       0004
+0003e8: 0400                    |  outs_size:      0004
+0003ea: 0000                    |  tries_size:     0000
+0003ec: fa09 0000               |  debug_off:      000009fa
+0003f0: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+0003f4: fa40 2000 3254 0100     |  0000: invoke-polymorphic {v2, v3, v4, v5}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/Object;J)D // method@0020, proto@0001
+0003fc: 0b00                    |  0004: move-result-wide v0
+0003fe: 1000                    |  0005: return-wide v0
+                                |  debug info
+                                |    line_start: 59
+                                |    parameters_size: 0003
+                                |    parameter mh v2
+                                |    parameter o v3
+                                |    parameter l v4
+                                |    0000: prologue end
+                                |    0000: line 59
+                                |    end sequence
+                                |
+                                |[400] TestInvokePolymorphic.testInvokeExactDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+000400: 0300                    |  registers_size: 0003
+000402: 0100                    |  ins_size:       0001
+000404: 0100                    |  outs_size:      0001
+000406: 0000                    |  tries_size:     0000
+000408: 020a 0000               |  debug_off:      00000a02
+00040c: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+000410: fa10 2000 0200 0000     |  0000: invoke-polymorphic {v2}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()D // method@0020, proto@0000
+000418: 0b00                    |  0004: move-result-wide v0
+00041a: 1000                    |  0005: return-wide v0
+                                |  debug info
+                                |    line_start: 49
+                                |    parameters_size: 0001
+                                |    parameter mh v2
+                                |    0000: prologue end
+                                |    0000: line 49
+                                |    end sequence
+                                |
+                                |[41c] TestInvokePolymorphic.testInvokeExactIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+00041c: 0a00                    |  registers_size: 000a
+00041e: 0800                    |  ins_size:       0008
+000420: 0800                    |  outs_size:      0008
+000422: 0000                    |  tries_size:     0000
+000424: 080a 0000               |  debug_off:      00000a08
+000428: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+00042c: fb08 2000 0200 0500     |  0000: invoke-polymorphic/range {v2..v9}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/Object;JDFLjava/lang/String;)I // method@0020, proto@0005
+000434: 0a00                    |  0004: move-result v0
+000436: 0f00                    |  0005: return v0
+                                |  debug info
+                                |    line_start: 90
+                                |    parameters_size: 0006
+                                |    parameter mh v2
+                                |    parameter o v3
+                                |    parameter l v4
+                                |    parameter d v6
+                                |    parameter f v8
+                                |    parameter s v9
+                                |    0000: prologue end
+                                |    0000: line 90
+                                |    end sequence
+                                |
+                                |[438] TestInvokePolymorphic.testInvokeExactIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+000438: 0200                    |  registers_size: 0002
+00043a: 0100                    |  ins_size:       0001
+00043c: 0100                    |  outs_size:      0001
+00043e: 0000                    |  tries_size:     0000
+000440: 130a 0000               |  debug_off:      00000a13
+000444: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+000448: fa10 2000 0100 0400     |  0000: invoke-polymorphic {v1}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@0020, proto@0004
+000450: 0a00                    |  0004: move-result v0
+000452: 0f00                    |  0005: return v0
+                                |  debug info
+                                |    line_start: 33
+                                |    parameters_size: 0001
+                                |    parameter mh v1
+                                |    0000: prologue end
+                                |    0000: line 33
+                                |    end sequence
+                                |
+                                |[454] TestInvokePolymorphic.testInvokeExactLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+000454: 0300                    |  registers_size: 0003
+000456: 0100                    |  ins_size:       0001
+000458: 0100                    |  outs_size:      0001
+00045a: 0000                    |  tries_size:     0000
+00045c: 190a 0000               |  debug_off:      00000a19
+000460: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+000464: fa10 2000 0200 0800     |  0000: invoke-polymorphic {v2}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()J // method@0020, proto@0008
+00046c: 0b00                    |  0004: move-result-wide v0
+00046e: 1000                    |  0005: return-wide v0
+                                |  debug info
+                                |    line_start: 41
+                                |    parameters_size: 0001
+                                |    parameter mh v2
+                                |    0000: prologue end
+                                |    0000: line 41
+                                |    end sequence
+                                |
+                                |[470] TestInvokePolymorphic.testInvokeExactVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+000470: 0600                    |  registers_size: 0006
+000472: 0600                    |  ins_size:       0006
+000474: 0600                    |  outs_size:      0006
+000476: 0000                    |  tries_size:     0000
+000478: 1f0a 0000               |  debug_off:      00000a1f
+00047c: 0500 0000               |  insns_size:     00000005
+                                |  throws java.lang.Throwable
+000480: fb06 2000 0000 0d00     |  0000: invoke-polymorphic/range {v0..v5}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/Object;JD)V // method@0020, proto@000d
+000488: 0e00                    |  0004: return-void
+                                |  debug info
+                                |    line_start: 79
+                                |    parameters_size: 0004
+                                |    parameter mh v0
+                                |    parameter o v1
+                                |    parameter l v2
+                                |    parameter d v4
+                                |    0000: prologue end
+                                |    0000: line 79
+                                |    0004: line 80
+                                |    end sequence
+                                |
+00048a: 0000                    |
+                                |[48c] TestInvokePolymorphic.testInvokeExactVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+00048c: 0400                    |  registers_size: 0004
+00048e: 0400                    |  ins_size:       0004
+000490: 0400                    |  outs_size:      0004
+000492: 0000                    |  tries_size:     0000
+000494: 290a 0000               |  debug_off:      00000a29
+000498: 0500 0000               |  insns_size:     00000005
+                                |  throws java.lang.Throwable
+00049c: fa40 2000 1032 0c00     |  0000: invoke-polymorphic {v0, v1, v2, v3}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (III)V // method@0020, proto@000c
+0004a4: 0e00                    |  0004: return-void
+                                |  debug info
+                                |    line_start: 69
+                                |    parameters_size: 0004
+                                |    parameter mh v0
+                                |    parameter x v1
+                                |    parameter y v2
+                                |    parameter z v3
+                                |    0000: prologue end
+                                |    0000: line 69
+                                |    0004: line 70
+                                |    end sequence
+                                |
+0004a6: 0000                    |
+                                |[4a8] TestInvokePolymorphic.testInvokeExactVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+0004a8: 0100                    |  registers_size: 0001
+0004aa: 0100                    |  ins_size:       0001
+0004ac: 0100                    |  outs_size:      0001
+0004ae: 0000                    |  tries_size:     0000
+0004b0: 330a 0000               |  debug_off:      00000a33
+0004b4: 0500 0000               |  insns_size:     00000005
+                                |  throws java.lang.Throwable
+0004b8: fa10 2000 0000 0b00     |  0000: invoke-polymorphic {v0}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()V // method@0020, proto@000b
+0004c0: 0e00                    |  0004: return-void
+                                |  debug info
+                                |    line_start: 25
+                                |    parameters_size: 0001
+                                |    parameter mh v0
+                                |    0000: prologue end
+                                |    0000: line 25
+                                |    0004: line 26
+                                |    end sequence
+                                |
+0004c2: 0000                    |
+                                |[4c4] TestInvokePolymorphic.testInvokeIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+0004c4: 0a00                    |  registers_size: 000a
+0004c6: 0800                    |  ins_size:       0008
+0004c8: 0800                    |  outs_size:      0008
+0004ca: 0000                    |  tries_size:     0000
+0004cc: 3a0a 0000               |  debug_off:      00000a3a
+0004d0: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+0004d4: fb08 1700 0200 0500     |  0000: invoke-polymorphic/range {v2..v9}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/Object;JDFLjava/lang/String;)I // method@0017, proto@0005
+0004dc: 0a00                    |  0004: move-result v0
+0004de: 0f00                    |  0005: return v0
+                                |  debug info
+                                |    line_start: 84
+                                |    parameters_size: 0006
+                                |    parameter mh v2
+                                |    parameter o v3
+                                |    parameter l v4
+                                |    parameter d v6
+                                |    parameter f v8
+                                |    parameter s v9
+                                |    0000: prologue end
+                                |    0000: line 84
+                                |    end sequence
+                                |
+                                |[4e0] TestInvokePolymorphic.testInvokeIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+0004e0: 0200                    |  registers_size: 0002
+0004e2: 0100                    |  ins_size:       0001
+0004e4: 0100                    |  outs_size:      0001
+0004e6: 0000                    |  tries_size:     0000
+0004e8: 450a 0000               |  debug_off:      00000a45
+0004ec: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+0004f0: fa10 1700 0100 0400     |  0000: invoke-polymorphic {v1}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@0017, proto@0004
+0004f8: 0a00                    |  0004: move-result v0
+0004fa: 0f00                    |  0005: return v0
+                                |  debug info
+                                |    line_start: 29
+                                |    parameters_size: 0001
+                                |    parameter mh v1
+                                |    0000: prologue end
+                                |    0000: line 29
+                                |    end sequence
+                                |
+                                |[4fc] TestInvokePolymorphic.testInvokeLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+0004fc: 0300                    |  registers_size: 0003
+0004fe: 0100                    |  ins_size:       0001
+000500: 0100                    |  outs_size:      0001
+000502: 0000                    |  tries_size:     0000
+000504: 4b0a 0000               |  debug_off:      00000a4b
+000508: 0600 0000               |  insns_size:     00000006
+                                |  throws java.lang.Throwable
+00050c: fa10 1700 0200 0800     |  0000: invoke-polymorphic {v2}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, ()J // method@0017, proto@0008
+000514: 0b00                    |  0004: move-result-wide v0
+000516: 1000                    |  0005: return-wide v0
+                                |  debug info
+                                |    line_start: 37
+                                |    parameters_size: 0001
+                                |    parameter mh v2
+                                |    0000: prologue end
+                                |    0000: line 37
+                                |    end sequence
+                                |
+                                |[518] TestInvokePolymorphic.testInvokeVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+000518: 0600                    |  registers_size: 0006
+00051a: 0600                    |  ins_size:       0006
+00051c: 0600                    |  outs_size:      0006
+00051e: 0000                    |  tries_size:     0000
+000520: 510a 0000               |  debug_off:      00000a51
+000524: 0500 0000               |  insns_size:     00000005
+                                |  throws java.lang.Throwable
+000528: fb06 1700 0000 0d00     |  0000: invoke-polymorphic/range {v0..v5}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/Object;JD)V // method@0017, proto@000d
+000530: 0e00                    |  0004: return-void
+                                |  debug info
+                                |    line_start: 74
+                                |    parameters_size: 0004
+                                |    parameter mh v0
+                                |    parameter o v1
+                                |    parameter l v2
+                                |    parameter d v4
+                                |    0000: prologue end
+                                |    0000: line 74
+                                |    0004: line 75
+                                |    end sequence
+                                |
+000532: 0000                    |
+                                |[534] TestInvokePolymorphic.testInvokeVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+000534: 0400                    |  registers_size: 0004
+000536: 0400                    |  ins_size:       0004
+000538: 0400                    |  outs_size:      0004
+00053a: 0000                    |  tries_size:     0000
+00053c: 5b0a 0000               |  debug_off:      00000a5b
+000540: 0500 0000               |  insns_size:     00000005
+                                |  throws java.lang.Throwable
+000544: fa40 1700 1032 0c00     |  0000: invoke-polymorphic {v0, v1, v2, v3}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (III)V // method@0017, proto@000c
+00054c: 0e00                    |  0004: return-void
+                                |  debug info
+                                |    line_start: 64
+                                |    parameters_size: 0004
+                                |    parameter mh v0
+                                |    parameter x v1
+                                |    parameter y v2
+                                |    parameter z v3
+                                |    0000: prologue end
+                                |    0000: line 64
+                                |    0004: line 65
+                                |    end sequence
+                                |
+00054e: 0000                    |
+                                |[550] TestInvokePolymorphic.testInvokeVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+000550: 0100                    |  registers_size: 0001
+000552: 0100                    |  ins_size:       0001
+000554: 0100                    |  outs_size:      0001
+000556: 0000                    |  tries_size:     0000
+000558: 650a 0000               |  debug_off:      00000a65
+00055c: 0500 0000               |  insns_size:     00000005
+                                |  throws java.lang.Throwable
+000560: fa10 1700 0000 0b00     |  0000: invoke-polymorphic {v0}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, ()V // method@0017, proto@000b
+000568: 0e00                    |  0004: return-void
+                                |  debug info
+                                |    line_start: 21
+                                |    parameters_size: 0001
+                                |    parameter mh v0
+                                |    0000: prologue end
+                                |    0000: line 21
+                                |    0004: line 22
+                                |    end sequence
+                                |
+00056a: 0000                    |
+                                |[56c] annotations directory
+00056c: 0000 0000               |  class_annotations_off: 00000000
+000570: 0000 0000               |  fields_size:           00000000
+000574: 1000 0000               |  methods_size:          00000010
+000578: 0000 0000               |  parameters_size:       00000000
+                                |  methods:
+                                |    TestInvokePolymorphic.testInvokeDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+00057c: 0100 0000               |      method_idx:      00000001
+000580: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+000584: 0200 0000               |      method_idx:      00000002
+000588: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeExactDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+00058c: 0300 0000               |      method_idx:      00000003
+000590: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeExactDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+000594: 0400 0000               |      method_idx:      00000004
+000598: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeExactIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+00059c: 0500 0000               |      method_idx:      00000005
+0005a0: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeExactIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+0005a4: 0600 0000               |      method_idx:      00000006
+0005a8: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeExactLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+0005ac: 0700 0000               |      method_idx:      00000007
+0005b0: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeExactVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+0005b4: 0800 0000               |      method_idx:      00000008
+0005b8: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeExactVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+0005bc: 0900 0000               |      method_idx:      00000009
+0005c0: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeExactVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+0005c4: 0a00 0000               |      method_idx:      0000000a
+0005c8: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+0005cc: 0b00 0000               |      method_idx:      0000000b
+0005d0: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+0005d4: 0c00 0000               |      method_idx:      0000000c
+0005d8: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+0005dc: 0d00 0000               |      method_idx:      0000000d
+0005e0: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+0005e4: 0e00 0000               |      method_idx:      0000000e
+0005e8: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+0005ec: 0f00 0000               |      method_idx:      0000000f
+0005f0: 8c03 0000               |      annotations_off: 0000038c
+                                |    TestInvokePolymorphic.testInvokeVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+0005f4: 1000 0000               |      method_idx:      00000010
+0005f8: 8c03 0000               |      annotations_off: 0000038c
+                                |
+                                |[5fc] type_list
+0005fc: 0200 0000               |  size: 00000002
+000600: 0600                    |  0006 // java.lang.Object
+000602: 0300                    |  0003 // long
+                                |
+                                |[604] type_list
+000604: 0100 0000               |  size: 00000001
+000608: 0900                    |  0009 // java.lang.invoke.MethodHandle
+                                |
+00060a: 0000                    |
+                                |[60c] type_list
+00060c: 0300 0000               |  size: 00000003
+000610: 0900                    |  0009 // java.lang.invoke.MethodHandle
+000612: 0600                    |  0006 // java.lang.Object
+000614: 0300                    |  0003 // long
+                                |
+000616: 0000                    |
+                                |[618] type_list
+000618: 0500 0000               |  size: 00000005
+00061c: 0600                    |  0006 // java.lang.Object
+00061e: 0300                    |  0003 // long
+000620: 0000                    |  0000 // double
+000622: 0100                    |  0001 // float
+000624: 0700                    |  0007 // java.lang.String
+                                |
+000626: 0000                    |
+                                |[628] type_list
+000628: 0600 0000               |  size: 00000006
+00062c: 0900                    |  0009 // java.lang.invoke.MethodHandle
+00062e: 0600                    |  0006 // java.lang.Object
+000630: 0300                    |  0003 // long
+000632: 0000                    |  0000 // double
+000634: 0100                    |  0001 // float
+000636: 0700                    |  0007 // java.lang.String
+                                |
+                                |[638] type_list
+000638: 0100 0000               |  size: 00000001
+00063c: 0b00                    |  000b // java.lang.Object[]
+                                |
+00063e: 0000                    |
+                                |[640] type_list
+000640: 0300 0000               |  size: 00000003
+000644: 0200                    |  0002 // int
+000646: 0200                    |  0002 // int
+000648: 0200                    |  0002 // int
+                                |
+00064a: 0000                    |
+                                |[64c] type_list
+00064c: 0300 0000               |  size: 00000003
+000650: 0600                    |  0006 // java.lang.Object
+000652: 0300                    |  0003 // long
+000654: 0000                    |  0000 // double
+                                |
+000656: 0000                    |
+                                |[658] type_list
+000658: 0400 0000               |  size: 00000004
+00065c: 0900                    |  0009 // java.lang.invoke.MethodHandle
+00065e: 0200                    |  0002 // int
+000660: 0200                    |  0002 // int
+000662: 0200                    |  0002 // int
+                                |
+                                |[664] type_list
+000664: 0400 0000               |  size: 00000004
+000668: 0900                    |  0009 // java.lang.invoke.MethodHandle
+00066a: 0600                    |  0006 // java.lang.Object
+00066c: 0300                    |  0003 // long
+00066e: 0000                    |  0000 // double
+                                |
+                                |string_data:
+000670: 06                      |utf16_size: 00000006
+000671: 3c69 6e69 743e 00       |"<init>"
+                                |
+000678: 01                      |utf16_size: 00000001
+000679: 4400                    |"D"
+                                |
+00067b: 02                      |utf16_size: 00000002
+00067c: 444c 00                 |"DL"
+                                |
+00067f: 03                      |utf16_size: 00000003
+000680: 444c 4a00               |"DLJ"
+                                |
+000684: 04                      |utf16_size: 00000004
+000685: 444c 4c4a 00            |"DLLJ"
+                                |
+00068a: 01                      |utf16_size: 00000001
+00068b: 4600                    |"F"
+                                |
+00068d: 01                      |utf16_size: 00000001
+00068e: 4900                    |"I"
+                                |
+000690: 02                      |utf16_size: 00000002
+000691: 494c 00                 |"IL"
+                                |
+000694: 06                      |utf16_size: 00000006
+000695: 494c 4a44 464c 00       |"ILJDFL"
+                                |
+00069c: 07                      |utf16_size: 00000007
+00069d: 494c 4c4a 4446 4c00     |"ILLJDFL"
+                                |
+0006a5: 01                      |utf16_size: 00000001
+0006a6: 4a00                    |"J"
+                                |
+0006a8: 02                      |utf16_size: 00000002
+0006a9: 4a4c 00                 |"JL"
+                                |
+0006ac: 02                      |utf16_size: 00000002
+0006ad: 4c4c 00                 |"LL"
+                                |
+0006b0: 17                      |utf16_size: 00000017
+0006b1: 4c54 6573 7449 6e76 6f6b|"LTestInvokePolymorphic;"
+0006bb: 6550 6f6c 796d 6f72 7068|
+0006c5: 6963 3b00               |
+                                |
+0006c9: 1a                      |utf16_size: 0000001a
+0006ca: 4c64 616c 7669 6b2f 616e|"Ldalvik/annotation/Throws;"
+0006d4: 6e6f 7461 7469 6f6e 2f54|
+0006de: 6872 6f77 733b 00       |
+                                |
+0006e5: 12                      |utf16_size: 00000012
+0006e6: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/Object;"
+0006f0: 2f4f 626a 6563 743b 00  |
+                                |
+0006f9: 12                      |utf16_size: 00000012
+0006fa: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/String;"
+000704: 2f53 7472 696e 673b 00  |
+                                |
+00070d: 15                      |utf16_size: 00000015
+00070e: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/Throwable;"
+000718: 2f54 6872 6f77 6162 6c65|
+000722: 3b00                    |
+                                |
+000724: 1f                      |utf16_size: 0000001f
+000725: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/MethodHandle;"
+00072f: 2f69 6e76 6f6b 652f 4d65|
+000739: 7468 6f64 4861 6e64 6c65|
+000743: 3b00                    |
+                                |
+000745: 1a                      |utf16_size: 0000001a
+000746: 5465 7374 496e 766f 6b65|"TestInvokePolymorphic.java"
+000750: 506f 6c79 6d6f 7270 6869|
+00075a: 632e 6a61 7661 00       |
+                                |
+000761: 01                      |utf16_size: 00000001
+000762: 5600                    |"V"
+                                |
+000764: 04                      |utf16_size: 00000004
+000765: 5649 4949 00            |"VIII"
+                                |
+00076a: 02                      |utf16_size: 00000002
+00076b: 564c 00                 |"VL"
+                                |
+00076e: 05                      |utf16_size: 00000005
+00076f: 564c 4949 4900          |"VLIII"
+                                |
+000775: 04                      |utf16_size: 00000004
+000776: 564c 4a44 00            |"VLJD"
+                                |
+00077b: 05                      |utf16_size: 00000005
+00077c: 564c 4c4a 4400          |"VLLJD"
+                                |
+000782: 13                      |utf16_size: 00000013
+000783: 5b4c 6a61 7661 2f6c 616e|"[Ljava/lang/Object;"
+00078d: 672f 4f62 6a65 6374 3b00|
+                                |
+000797: 01                      |utf16_size: 00000001
+000798: 6400                    |"d"
+                                |
+00079a: 01                      |utf16_size: 00000001
+00079b: 6600                    |"f"
+                                |
+00079d: 06                      |utf16_size: 00000006
+00079e: 696e 766f 6b65 00       |"invoke"
+                                |
+0007a5: 0b                      |utf16_size: 0000000b
+0007a6: 696e 766f 6b65 4578 6163|"invokeExact"
+0007b0: 7400                    |
+                                |
+0007b2: 01                      |utf16_size: 00000001
+0007b3: 6c00                    |"l"
+                                |
+0007b5: 02                      |utf16_size: 00000002
+0007b6: 6d68 00                 |"mh"
+                                |
+0007b9: 01                      |utf16_size: 00000001
+0007ba: 6f00                    |"o"
+                                |
+0007bc: 01                      |utf16_size: 00000001
+0007bd: 7300                    |"s"
+                                |
+0007bf: 20                      |utf16_size: 00000020
+0007c0: 7465 7374 496e 766f 6b65|"testInvokeDoubleReturn2Arguments"
+0007ca: 446f 7562 6c65 5265 7475|
+0007d4: 726e 3241 7267 756d 656e|
+0007de: 7473 00                 |
+                                |
+0007e1: 1c                      |utf16_size: 0000001c
+0007e2: 7465 7374 496e 766f 6b65|"testInvokeDoubleReturnNoArgs"
+0007ec: 446f 7562 6c65 5265 7475|
+0007f6: 726e 4e6f 4172 6773 00  |
+                                |
+0007ff: 25                      |utf16_size: 00000025
+000800: 7465 7374 496e 766f 6b65|"testInvokeExactDoubleReturn2Arguments"
+00080a: 4578 6163 7444 6f75 626c|
+000814: 6552 6574 7572 6e32 4172|
+00081e: 6775 6d65 6e74 7300     |
+                                |
+000826: 21                      |utf16_size: 00000021
+000827: 7465 7374 496e 766f 6b65|"testInvokeExactDoubleReturnNoArgs"
+000831: 4578 6163 7444 6f75 626c|
+00083b: 6552 6574 7572 6e4e 6f41|
+000845: 7267 7300               |
+                                |
+000849: 22                      |utf16_size: 00000022
+00084a: 7465 7374 496e 766f 6b65|"testInvokeExactIntReturn5Arguments"
+000854: 4578 6163 7449 6e74 5265|
+00085e: 7475 726e 3541 7267 756d|
+000868: 656e 7473 00            |
+                                |
+00086d: 1e                      |utf16_size: 0000001e
+00086e: 7465 7374 496e 766f 6b65|"testInvokeExactIntReturnNoArgs"
+000878: 4578 6163 7449 6e74 5265|
+000882: 7475 726e 4e6f 4172 6773|
+00088c: 00                      |
+                                |
+00088d: 1f                      |utf16_size: 0000001f
+00088e: 7465 7374 496e 766f 6b65|"testInvokeExactLongReturnNoArgs"
+000898: 4578 6163 744c 6f6e 6752|
+0008a2: 6574 7572 6e4e 6f41 7267|
+0008ac: 7300                    |
+                                |
+0008ae: 23                      |utf16_size: 00000023
+0008af: 7465 7374 496e 766f 6b65|"testInvokeExactVoidReturn3Arguments"
+0008b9: 4578 6163 7456 6f69 6452|
+0008c3: 6574 7572 6e33 4172 6775|
+0008cd: 6d65 6e74 7300          |
+                                |
+0008d3: 26                      |utf16_size: 00000026
+0008d4: 7465 7374 496e 766f 6b65|"testInvokeExactVoidReturn3IntArguments"
+0008de: 4578 6163 7456 6f69 6452|
+0008e8: 6574 7572 6e33 496e 7441|
+0008f2: 7267 756d 656e 7473 00  |
+                                |
+0008fb: 1f                      |utf16_size: 0000001f
+0008fc: 7465 7374 496e 766f 6b65|"testInvokeExactVoidReturnNoArgs"
+000906: 4578 6163 7456 6f69 6452|
+000910: 6574 7572 6e4e 6f41 7267|
+00091a: 7300                    |
+                                |
+00091c: 1d                      |utf16_size: 0000001d
+00091d: 7465 7374 496e 766f 6b65|"testInvokeIntReturn5Arguments"
+000927: 496e 7452 6574 7572 6e35|
+000931: 4172 6775 6d65 6e74 7300|
+                                |
+00093b: 19                      |utf16_size: 00000019
+00093c: 7465 7374 496e 766f 6b65|"testInvokeIntReturnNoArgs"
+000946: 496e 7452 6574 7572 6e4e|
+000950: 6f41 7267 7300          |
+                                |
+000956: 1a                      |utf16_size: 0000001a
+000957: 7465 7374 496e 766f 6b65|"testInvokeLongReturnNoArgs"
+000961: 4c6f 6e67 5265 7475 726e|
+00096b: 4e6f 4172 6773 00       |
+                                |
+000972: 1e                      |utf16_size: 0000001e
+000973: 7465 7374 496e 766f 6b65|"testInvokeVoidReturn3Arguments"
+00097d: 566f 6964 5265 7475 726e|
+000987: 3341 7267 756d 656e 7473|
+000991: 00                      |
+                                |
+000992: 21                      |utf16_size: 00000021
+000993: 7465 7374 496e 766f 6b65|"testInvokeVoidReturn3IntArguments"
+00099d: 566f 6964 5265 7475 726e|
+0009a7: 3349 6e74 4172 6775 6d65|
+0009b1: 6e74 7300               |
+                                |
+0009b5: 1a                      |utf16_size: 0000001a
+0009b6: 7465 7374 496e 766f 6b65|"testInvokeVoidReturnNoArgs"
+0009c0: 566f 6964 5265 7475 726e|
+0009ca: 4e6f 4172 6773 00       |
+                                |
+0009d1: 04                      |utf16_size: 00000004
+0009d2: 7468 6973 00            |"this"
+                                |
+0009d7: 05                      |utf16_size: 00000005
+0009d8: 7661 6c75 6500          |"value"
+                                |
+0009de: 01                      |utf16_size: 00000001
+0009df: 7800                    |"x"
+                                |
+0009e1: 01                      |utf16_size: 00000001
+0009e2: 7900                    |"y"
+                                |
+0009e4: 01                      |utf16_size: 00000001
+0009e5: 7a00                    |"z"
+                                |
+                                |byte_data:
+                                |[9e7] debug info
+0009e7: 13                      |line_start: 19
+0009e8: 00                      |parameters_size: 0000
+0009e9: 07                      |0000: prologue end
+0009ea: 0e                      |0000: line 19
+0009eb: 00                      |end sequence
+                                |
+                                |[9ec] debug info
+0009ec: 36                      |line_start: 54
+0009ed: 03                      |parameters_size: 0003
+0009ee: 21                      |parameter mh v2
+0009ef: 22                      |parameter o v3
+0009f0: 20                      |parameter l v4
+0009f1: 07                      |0000: prologue end
+0009f2: 0e                      |0000: line 54
+0009f3: 00                      |end sequence
+                                |
+                                |[9f4] debug info
+0009f4: 2d                      |line_start: 45
+0009f5: 01                      |parameters_size: 0001
+0009f6: 21                      |parameter mh v2
+0009f7: 07                      |0000: prologue end
+0009f8: 0e                      |0000: line 45
+0009f9: 00                      |end sequence
+                                |
+                                |[9fa] debug info
+0009fa: 3b                      |line_start: 59
+0009fb: 03                      |parameters_size: 0003
+0009fc: 21                      |parameter mh v2
+0009fd: 22                      |parameter o v3
+0009fe: 20                      |parameter l v4
+0009ff: 07                      |0000: prologue end
+000a00: 0e                      |0000: line 59
+000a01: 00                      |end sequence
+                                |
+                                |[a02] debug info
+000a02: 31                      |line_start: 49
+000a03: 01                      |parameters_size: 0001
+000a04: 21                      |parameter mh v2
+000a05: 07                      |0000: prologue end
+000a06: 0e                      |0000: line 49
+000a07: 00                      |end sequence
+                                |
+                                |[a08] debug info
+000a08: 5a                      |line_start: 90
+000a09: 06                      |parameters_size: 0006
+000a0a: 21                      |parameter mh v2
+000a0b: 22                      |parameter o v3
+000a0c: 20                      |parameter l v4
+000a0d: 1c                      |parameter d v6
+000a0e: 1d                      |parameter f v8
+000a0f: 23                      |parameter s v9
+000a10: 07                      |0000: prologue end
+000a11: 0e                      |0000: line 90
+000a12: 00                      |end sequence
+                                |
+                                |[a13] debug info
+000a13: 21                      |line_start: 33
+000a14: 01                      |parameters_size: 0001
+000a15: 21                      |parameter mh v1
+000a16: 07                      |0000: prologue end
+000a17: 0e                      |0000: line 33
+000a18: 00                      |end sequence
+                                |
+                                |[a19] debug info
+000a19: 29                      |line_start: 41
+000a1a: 01                      |parameters_size: 0001
+000a1b: 21                      |parameter mh v2
+000a1c: 07                      |0000: prologue end
+000a1d: 0e                      |0000: line 41
+000a1e: 00                      |end sequence
+                                |
+                                |[a1f] debug info
+000a1f: 4f                      |line_start: 79
+000a20: 04                      |parameters_size: 0004
+000a21: 21                      |parameter mh v0
+000a22: 22                      |parameter o v1
+000a23: 20                      |parameter l v2
+000a24: 1c                      |parameter d v4
+000a25: 07                      |0000: prologue end
+000a26: 0e                      |0000: line 79
+000a27: 4b                      |0004: line 80
+000a28: 00                      |end sequence
+                                |
+                                |[a29] debug info
+000a29: 45                      |line_start: 69
+000a2a: 04                      |parameters_size: 0004
+000a2b: 21                      |parameter mh v0
+000a2c: 36                      |parameter x v1
+000a2d: 37                      |parameter y v2
+000a2e: 38                      |parameter z v3
+000a2f: 07                      |0000: prologue end
+000a30: 0e                      |0000: line 69
+000a31: 4b                      |0004: line 70
+000a32: 00                      |end sequence
+                                |
+                                |[a33] debug info
+000a33: 19                      |line_start: 25
+000a34: 01                      |parameters_size: 0001
+000a35: 21                      |parameter mh v0
+000a36: 07                      |0000: prologue end
+000a37: 0e                      |0000: line 25
+000a38: 4b                      |0004: line 26
+000a39: 00                      |end sequence
+                                |
+                                |[a3a] debug info
+000a3a: 54                      |line_start: 84
+000a3b: 06                      |parameters_size: 0006
+000a3c: 21                      |parameter mh v2
+000a3d: 22                      |parameter o v3
+000a3e: 20                      |parameter l v4
+000a3f: 1c                      |parameter d v6
+000a40: 1d                      |parameter f v8
+000a41: 23                      |parameter s v9
+000a42: 07                      |0000: prologue end
+000a43: 0e                      |0000: line 84
+000a44: 00                      |end sequence
+                                |
+                                |[a45] debug info
+000a45: 1d                      |line_start: 29
+000a46: 01                      |parameters_size: 0001
+000a47: 21                      |parameter mh v1
+000a48: 07                      |0000: prologue end
+000a49: 0e                      |0000: line 29
+000a4a: 00                      |end sequence
+                                |
+                                |[a4b] debug info
+000a4b: 25                      |line_start: 37
+000a4c: 01                      |parameters_size: 0001
+000a4d: 21                      |parameter mh v2
+000a4e: 07                      |0000: prologue end
+000a4f: 0e                      |0000: line 37
+000a50: 00                      |end sequence
+                                |
+                                |[a51] debug info
+000a51: 4a                      |line_start: 74
+000a52: 04                      |parameters_size: 0004
+000a53: 21                      |parameter mh v0
+000a54: 22                      |parameter o v1
+000a55: 20                      |parameter l v2
+000a56: 1c                      |parameter d v4
+000a57: 07                      |0000: prologue end
+000a58: 0e                      |0000: line 74
+000a59: 4b                      |0004: line 75
+000a5a: 00                      |end sequence
+                                |
+                                |[a5b] debug info
+000a5b: 40                      |line_start: 64
+000a5c: 04                      |parameters_size: 0004
+000a5d: 21                      |parameter mh v0
+000a5e: 36                      |parameter x v1
+000a5f: 37                      |parameter y v2
+000a60: 38                      |parameter z v3
+000a61: 07                      |0000: prologue end
+000a62: 0e                      |0000: line 64
+000a63: 4b                      |0004: line 65
+000a64: 00                      |end sequence
+                                |
+                                |[a65] debug info
+000a65: 15                      |line_start: 21
+000a66: 01                      |parameters_size: 0001
+000a67: 21                      |parameter mh v0
+000a68: 07                      |0000: prologue end
+000a69: 0e                      |0000: line 21
+000a6a: 4b                      |0004: line 22
+000a6b: 00                      |end sequence
+                                |
+                                |[a6c] annotation
+000a6c: 02                      |  visibility: VISBILITY_SYSTEM
+000a6d: 05                      |  type_idx: 00000005 // dalvik.annotation.Throws
+000a6e: 01                      |  size: 00000001
+                                |  elements[0]:
+000a6f: 34                      |    name_idx: 00000034 // value
+000a70: 1c01 1808               |    value: array {java.lang.Throwable}
+                                |
+                                |[a74] class data for TestInvokePolymorphic
+000a74: 00                      |  static_fields_size:   00000000
+000a75: 00                      |  instance_fields_size: 00000000
+000a76: 11                      |  direct_methods_size:  00000011
+000a77: 00                      |  virtual_methods_size: 00000000
+                                |  direct_methods:
+                                |  [0] TestInvokePolymorphic.<init>:()V
+000a78: 00                      |    method_idx:   00000000
+000a79: 8180 04                 |    access_flags: public|constructor
+000a7c: 9407                    |    code_off:     00000394
+                                |  [1] TestInvokePolymorphic.testInvokeDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+000a7e: 01                      |    method_idx:   00000001
+000a7f: 09                      |    access_flags: public|static
+000a80: ac07                    |    code_off:     000003ac
+                                |  [2] TestInvokePolymorphic.testInvokeDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+000a82: 01                      |    method_idx:   00000002
+000a83: 09                      |    access_flags: public|static
+000a84: c807                    |    code_off:     000003c8
+                                |  [3] TestInvokePolymorphic.testInvokeExactDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+000a86: 01                      |    method_idx:   00000003
+000a87: 09                      |    access_flags: public|static
+000a88: e407                    |    code_off:     000003e4
+                                |  [4] TestInvokePolymorphic.testInvokeExactDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+000a8a: 01                      |    method_idx:   00000004
+000a8b: 09                      |    access_flags: public|static
+000a8c: 8008                    |    code_off:     00000400
+                                |  [5] TestInvokePolymorphic.testInvokeExactIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+000a8e: 01                      |    method_idx:   00000005
+000a8f: 09                      |    access_flags: public|static
+000a90: 9c08                    |    code_off:     0000041c
+                                |  [6] TestInvokePolymorphic.testInvokeExactIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+000a92: 01                      |    method_idx:   00000006
+000a93: 09                      |    access_flags: public|static
+000a94: b808                    |    code_off:     00000438
+                                |  [7] TestInvokePolymorphic.testInvokeExactLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+000a96: 01                      |    method_idx:   00000007
+000a97: 09                      |    access_flags: public|static
+000a98: d408                    |    code_off:     00000454
+                                |  [8] TestInvokePolymorphic.testInvokeExactVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+000a9a: 01                      |    method_idx:   00000008
+000a9b: 09                      |    access_flags: public|static
+000a9c: f008                    |    code_off:     00000470
+                                |  [9] TestInvokePolymorphic.testInvokeExactVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+000a9e: 01                      |    method_idx:   00000009
+000a9f: 09                      |    access_flags: public|static
+000aa0: 8c09                    |    code_off:     0000048c
+                                |  [a] TestInvokePolymorphic.testInvokeExactVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+000aa2: 01                      |    method_idx:   0000000a
+000aa3: 09                      |    access_flags: public|static
+000aa4: a809                    |    code_off:     000004a8
+                                |  [b] TestInvokePolymorphic.testInvokeIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+000aa6: 01                      |    method_idx:   0000000b
+000aa7: 09                      |    access_flags: public|static
+000aa8: c409                    |    code_off:     000004c4
+                                |  [c] TestInvokePolymorphic.testInvokeIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+000aaa: 01                      |    method_idx:   0000000c
+000aab: 09                      |    access_flags: public|static
+000aac: e009                    |    code_off:     000004e0
+                                |  [d] TestInvokePolymorphic.testInvokeLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+000aae: 01                      |    method_idx:   0000000d
+000aaf: 09                      |    access_flags: public|static
+000ab0: fc09                    |    code_off:     000004fc
+                                |  [e] TestInvokePolymorphic.testInvokeVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+000ab2: 01                      |    method_idx:   0000000e
+000ab3: 09                      |    access_flags: public|static
+000ab4: 980a                    |    code_off:     00000518
+                                |  [f] TestInvokePolymorphic.testInvokeVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+000ab6: 01                      |    method_idx:   0000000f
+000ab7: 09                      |    access_flags: public|static
+000ab8: b40a                    |    code_off:     00000534
+                                |  [10] TestInvokePolymorphic.testInvokeVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+000aba: 01                      |    method_idx:   00000010
+000abb: 09                      |    access_flags: public|static
+000abc: d00a                    |    code_off:     00000550
+000abe: 0000                    |
+                                |
+                                |map:
+                                |[ac0] map list
+000ac0: 0f00 0000               |  size: 0000000f
+                                |[ac4] header_item map
+000ac4: 0000                    |  type:   0000 // TYPE_HEADER_ITEM
+000ac6: 0000                    |  unused: 0
+000ac8: 0100 0000               |  size:   00000001
+000acc: 0000 0000               |  offset: 00000000
+                                |[ad0] string_id_item map
+000ad0: 0100                    |  type:   0001 // TYPE_STRING_ID_ITEM
+000ad2: 0000                    |  unused: 0
+000ad4: 3800 0000               |  size:   00000038
+000ad8: 7000 0000               |  offset: 00000070
+                                |[adc] type_id_item map
+000adc: 0200                    |  type:   0002 // TYPE_TYPE_ID_ITEM
+000ade: 0000                    |  unused: 0
+000ae0: 0c00 0000               |  size:   0000000c
+000ae4: 5001 0000               |  offset: 00000150
+                                |[ae8] proto_id_item map
+000ae8: 0300                    |  type:   0003 // TYPE_PROTO_ID_ITEM
+000aea: 0000                    |  unused: 0
+000aec: 1100 0000               |  size:   00000011
+000af0: 8001 0000               |  offset: 00000180
+                                |[af4] method_id_item map
+000af4: 0500                    |  type:   0005 // TYPE_METHOD_ID_ITEM
+000af6: 0000                    |  unused: 0
+000af8: 2400 0000               |  size:   00000024
+000afc: 4c02 0000               |  offset: 0000024c
+                                |[b00] class_def_item map
+000b00: 0600                    |  type:   0006 // TYPE_CLASS_DEF_ITEM
+000b02: 0000                    |  unused: 0
+000b04: 0100 0000               |  size:   00000001
+000b08: 6c03 0000               |  offset: 0000036c
+                                |[b0c] annotation_set_item map
+000b0c: 0310                    |  type:   1003 // TYPE_ANNOTATION_SET_ITEM
+000b0e: 0000                    |  unused: 0
+000b10: 0100 0000               |  size:   00000001
+000b14: 8c03 0000               |  offset: 0000038c
+                                |[b18] code_item map
+000b18: 0120                    |  type:   2001 // TYPE_CODE_ITEM
+000b1a: 0000                    |  unused: 0
+000b1c: 1100 0000               |  size:   00000011
+000b20: 9403 0000               |  offset: 00000394
+                                |[b24] annotations_directory_item map
+000b24: 0620                    |  type:   2006 // TYPE_ANNOTATIONS_DIRECTORY_ITEM
+000b26: 0000                    |  unused: 0
+000b28: 0100 0000               |  size:   00000001
+000b2c: 6c05 0000               |  offset: 0000056c
+                                |[b30] type_list map
+000b30: 0110                    |  type:   1001 // TYPE_TYPE_LIST
+000b32: 0000                    |  unused: 0
+000b34: 0a00 0000               |  size:   0000000a
+000b38: fc05 0000               |  offset: 000005fc
+                                |[b3c] string_data_item map
+000b3c: 0220                    |  type:   2002 // TYPE_STRING_DATA_ITEM
+000b3e: 0000                    |  unused: 0
+000b40: 3800 0000               |  size:   00000038
+000b44: 7006 0000               |  offset: 00000670
+                                |[b48] debug_info_item map
+000b48: 0320                    |  type:   2003 // TYPE_DEBUG_INFO_ITEM
+000b4a: 0000                    |  unused: 0
+000b4c: 1100 0000               |  size:   00000011
+000b50: e709 0000               |  offset: 000009e7
+                                |[b54] annotation_item map
+000b54: 0420                    |  type:   2004 // TYPE_ANNOTATION_ITEM
+000b56: 0000                    |  unused: 0
+000b58: 0100 0000               |  size:   00000001
+000b5c: 6c0a 0000               |  offset: 00000a6c
+                                |[b60] class_data_item map
+000b60: 0020                    |  type:   2000 // TYPE_CLASS_DATA_ITEM
+000b62: 0000                    |  unused: 0
+000b64: 0100 0000               |  size:   00000001
+000b68: 740a 0000               |  offset: 00000a74
+                                |[b6c] map_list map
+000b6c: 0010                    |  type:   1000 // TYPE_MAP_LIST
+000b6e: 0000                    |  unused: 0
+000b70: 0100 0000               |  size:   00000001
+000b74: c00a 0000               |  offset: 00000ac0
+                                |
+                                |method code index:
+                                |
+                                |[394] TestInvokePolymorphic.<init>:()V
+                                |[3ac] TestInvokePolymorphic.testInvokeDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+                                |[3c8] TestInvokePolymorphic.testInvokeDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+                                |[3e4] TestInvokePolymorphic.testInvokeExactDoubleReturn2Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;J)D
+                                |[400] TestInvokePolymorphic.testInvokeExactDoubleReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)D
+                                |[41c] TestInvokePolymorphic.testInvokeExactIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+                                |[438] TestInvokePolymorphic.testInvokeExactIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+                                |[454] TestInvokePolymorphic.testInvokeExactLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+                                |[470] TestInvokePolymorphic.testInvokeExactVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+                                |[48c] TestInvokePolymorphic.testInvokeExactVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+                                |[4a8] TestInvokePolymorphic.testInvokeExactVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+                                |[4c4] TestInvokePolymorphic.testInvokeIntReturn5Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JDFLjava/lang/String;)I
+                                |[4e0] TestInvokePolymorphic.testInvokeIntReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)I
+                                |[4fc] TestInvokePolymorphic.testInvokeLongReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)J
+                                |[518] TestInvokePolymorphic.testInvokeVoidReturn3Arguments:(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;JD)V
+                                |[534] TestInvokePolymorphic.testInvokeVoidReturn3IntArguments:(Ljava/lang/invoke/MethodHandle;III)V
+                                |[550] TestInvokePolymorphic.testInvokeVoidReturnNoArgs:(Ljava/lang/invoke/MethodHandle;)V
+                                |
+                                |statistics:
+                                |  annotation: 1 item; 8 bytes total
+                                |    8 bytes/item
+                                |  annotation set: 1 item; 8 bytes total
+                                |    8 bytes/item
+                                |  annotations directory: 1 item; 144 bytes total
+                                |    144 bytes/item
+                                |  class data: 1 item; 74 bytes total
+                                |    74 bytes/item
+                                |  class def: 1 item; 32 bytes total
+                                |    32 bytes/item
+                                |  code: 17 items; 472 bytes total
+                                |    24..28 bytes/item; average 27
+                                |  debug info: 17 items; 133 bytes total
+                                |    5..11 bytes/item; average 7
+                                |  header: 1 item; 112 bytes total
+                                |    112 bytes/item
+                                |  map list: 1 item; 184 bytes total
+                                |    184 bytes/item
+                                |  method id: 36 items; 288 bytes total
+                                |    8 bytes/item
+                                |  proto id: 17 items; 204 bytes total
+                                |    12 bytes/item
+                                |  string data: 56 items; 887 bytes total
+                                |    3..40 bytes/item; average 15
+                                |  string id: 56 items; 224 bytes total
+                                |    4 bytes/item
+                                |  type id: 12 items; 48 bytes total
+                                |    4 bytes/item
+                                |  type list: 10 items; 104 bytes total
+                                |    6..16 bytes/item; average 10
diff --git a/dx/tests/132-invoke-polymorphic/info.txt b/dx/tests/132-invoke-polymorphic/info.txt
new file mode 100644
index 0000000..63a955f
--- /dev/null
+++ b/dx/tests/132-invoke-polymorphic/info.txt
@@ -0,0 +1,3 @@
+This test checks the conversion of signature-polymorphic methods
+invoked with invoke-virtual/invoke-virtual-range are converted to
+invoke-polymorphic/invoke-polymorphic-range.
diff --git a/dx/tests/132-invoke-polymorphic/run b/dx/tests/132-invoke-polymorphic/run
new file mode 100644
index 0000000..7031deb
--- /dev/null
+++ b/dx/tests/132-invoke-polymorphic/run
@@ -0,0 +1,27 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+UNSUPPORTED_SDK_VERSION=20
+SUPPORTED_SDK_VERSION=26
+
+echo Trying SDK version $UNSUPPORTED_SDK_VERSION with invoke-polymorphic.
+dx --min-sdk-version=$UNSUPPORTED_SDK_VERSION --debug --dex --dump-to=- --dump-width=1000 TestInvokePolymorphic.class 2>&1 | grep "SimException"
+if [ $? != 0 ] ; then
+    echo Unexpected success with SDK version $UNSUPPORTED_SDK_VERSION
+    exit 1
+fi
+
+dx --min-sdk-version=$SUPPORTED_SDK_VERSION --debug --dex --dump-to=- --dump-width=1000 TestInvokePolymorphic.class
diff --git a/dx/tests/133-source-debug-extension/HelloKt.class b/dx/tests/133-source-debug-extension/HelloKt.class
new file mode 100644
index 0000000..c4e8a67
Binary files /dev/null and b/dx/tests/133-source-debug-extension/HelloKt.class differ
diff --git a/dx/tests/133-source-debug-extension/expected.txt b/dx/tests/133-source-debug-extension/expected.txt
new file mode 100644
index 0000000..04d943c
--- /dev/null
+++ b/dx/tests/133-source-debug-extension/expected.txt
@@ -0,0 +1,4 @@
+1c1
+< SourceDebugExtension
+---
+> (Ldalvik/annotation/SourceDebugExtension;
diff --git a/dx/tests/133-source-debug-extension/info.txt b/dx/tests/133-source-debug-extension/info.txt
new file mode 100644
index 0000000..3bec03c
--- /dev/null
+++ b/dx/tests/133-source-debug-extension/info.txt
@@ -0,0 +1,7 @@
+This test checks that SourceDebugExtension information propagates from
+the class file to the DEX file emitted by dx. It extracts SMAP information
+from the class file and DEX file and checks the strings match.
+
+NB dalvik/dexdump does not have support for DEX annotations so the test
+just checks that the SMAP string appears in the DEX file and assumes
+it is packaged within an annotation.
diff --git a/dx/tests/133-source-debug-extension/run b/dx/tests/133-source-debug-extension/run
new file mode 100755
index 0000000..4c12360
--- /dev/null
+++ b/dx/tests/133-source-debug-extension/run
@@ -0,0 +1,30 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Test runs in temporary directory created by test-run.
+
+test_class=HelloKt.class
+test_dex=HelloKt.dex
+
+# Generate DEX file
+dx --dex --output=$test_dex $test_class
+
+# Extract for SMAP string in DEX and class file.
+for i in $test_class $test_dex; do
+  strings $i | sed -n -e "/SourceDebugExtension/ p" -e "/SMAP/,/23/ p" > $i.output
+done
+
+diff $test_class.output $test_dex.output
diff --git a/dx/tests/134-maindexlist-lambdas/build b/dx/tests/134-maindexlist-lambdas/build
new file mode 100644
index 0000000..e2a1281
--- /dev/null
+++ b/dx/tests/134-maindexlist-lambdas/build
@@ -0,0 +1,22 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+JAVAC_SOURCE=1.8
+JAVAC_TARGET=1.8
+JAVAC_OPTIONS="-Xlint:-options -source ${JAVAC_SOURCE} -target ${JAVAC_TARGET}"
+
+mkdir classes
+${JAVAC} ${JAVAC_OPTIONS} -d classes `find lambda -name '*.java'`
diff --git a/dx/tests/134-maindexlist-lambdas/classes/lambda/A.class b/dx/tests/134-maindexlist-lambdas/classes/lambda/A.class
new file mode 100644
index 0000000..919d25b
Binary files /dev/null and b/dx/tests/134-maindexlist-lambdas/classes/lambda/A.class differ
diff --git a/dx/tests/134-maindexlist-lambdas/classes/lambda/B.class b/dx/tests/134-maindexlist-lambdas/classes/lambda/B.class
new file mode 100644
index 0000000..dd88bbf
Binary files /dev/null and b/dx/tests/134-maindexlist-lambdas/classes/lambda/B.class differ
diff --git a/dx/tests/134-maindexlist-lambdas/expected.txt b/dx/tests/134-maindexlist-lambdas/expected.txt
new file mode 100644
index 0000000..1917a61
--- /dev/null
+++ b/dx/tests/134-maindexlist-lambdas/expected.txt
@@ -0,0 +1,2 @@
+lambda/A.class
+lambda/B.class
diff --git a/dx/tests/134-maindexlist-lambdas/info.txt b/dx/tests/134-maindexlist-lambdas/info.txt
new file mode 100644
index 0000000..1dffae9
--- /dev/null
+++ b/dx/tests/134-maindexlist-lambdas/info.txt
@@ -0,0 +1,2 @@
+This test that MainDexListBuilder can run on class files with InvokeDynamic,
+MethodType and MethodHandle entries in the constant pool.
diff --git a/dx/tests/134-maindexlist-lambdas/lambda/A.java b/dx/tests/134-maindexlist-lambdas/lambda/A.java
new file mode 100644
index 0000000..9afc376
--- /dev/null
+++ b/dx/tests/134-maindexlist-lambdas/lambda/A.java
@@ -0,0 +1,14 @@
+package lambda;
+
+public class A {
+
+  public static void main(String[] args) {
+    new A().run(new B()::doIt);
+    new A().run(B::doItStatic);
+  }
+
+  public void run(Runnable todo) {
+    todo.run();
+  }
+
+}
diff --git a/dx/tests/134-maindexlist-lambdas/lambda/B.java b/dx/tests/134-maindexlist-lambdas/lambda/B.java
new file mode 100644
index 0000000..0108a54
--- /dev/null
+++ b/dx/tests/134-maindexlist-lambdas/lambda/B.java
@@ -0,0 +1,8 @@
+package lambda;
+
+public class B {
+
+  public void doIt() {}
+  public static void doItStatic() {}
+
+}
diff --git a/dx/tests/134-maindexlist-lambdas/run b/dx/tests/134-maindexlist-lambdas/run
new file mode 100644
index 0000000..ca63e37
--- /dev/null
+++ b/dx/tests/134-maindexlist-lambdas/run
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+prog=`which dx`
+progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
+
+if [ ! -r "$dxjar" ]; then
+    echo Missing dependency $i. Build dx.
+    exit 1
+fi
+
+mkdir -p traceOut/lambda
+cp classes/lambda/A.class traceOut/lambda/
+
+jar cf classes.jar -C classes .
+jar cf traceOut.jar -C traceOut .
+${JAVA} -classpath $dxjar com.android.multidex.MainDexListBuilder traceOut.jar classes.jar | sort
diff --git a/dx/tests/135-invoke-custom/build b/dx/tests/135-invoke-custom/build
new file mode 100755
index 0000000..eb8701d
--- /dev/null
+++ b/dx/tests/135-invoke-custom/build
@@ -0,0 +1,38 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+function fail() {
+  echo Build failed: $1 1>&2
+  exit 1
+}
+
+if [[ -z "${ANDROID_BUILD_TOP}" ]]; then
+  fail "ANDROID_BUILD_TOP is not defined. Try running 'lunch' first."
+fi
+
+SCRIPT_PATH=$( cd $(dirname $0) ; pwd -P )
+ASM_CLASSPATH="${ANDROID_BUILD_TOP}/prebuilts/misc/common/asm/asm-5.2.jar"
+SRC_PATH="${SCRIPT_PATH}/src"
+BUILD_PATH="${SCRIPT_PATH}/classes"
+JAR_FILE="${SCRIPT_PATH}/invokecustom.jar"
+
+if [[ ! -d "${BUILD_PATH}" ]]; then
+    mkdir "$BUILD_PATH" || exit 1
+fi
+
+(cd "${SRC_PATH}" && javac -cp "${ASM_CLASSPATH}" -d "${BUILD_PATH}" invokecustom/*.java) || fail "javac error"
+(cd "${SCRIPT_PATH}" && ${JAVA} -cp "${ASM_CLASSPATH}:${BUILD_PATH}" invokecustom.TestGenerator "${BUILD_PATH}") || fail "generator failure"
+(cd "${BUILD_PATH}" && jar cf "${JAR_FILE}" invokecustom/InvokeCustom.class invokecustom/Super.class ) || fail "jar creation error"
diff --git a/dx/tests/135-invoke-custom/expected.txt b/dx/tests/135-invoke-custom/expected.txt
new file mode 100644
index 0000000..3a9ad7e
--- /dev/null
+++ b/dx/tests/135-invoke-custom/expected.txt
@@ -0,0 +1,6400 @@
+Trying SDK version 25 with invoke-custom.
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in invokecustom.InvokeCustom.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V: invoking a signature-polymorphic requires --min-sdk-version >= 26 (currently 25)
+1 error; aborting
+Trying SDK version 26 with invoke-custom.
+000000: 6465 780a 3033 3800     |magic: "dex\n038\0"
+000008: dfc1 2240               |checksum
+00000c: 665a 629f 7c24 f7b7 45c0|signature
+000016: f275 8a42 7d1e 887c c413|
+000020: a423 0000               |file_size:       000023a4
+000024: 7000 0000               |header_size:     00000070
+000028: 7856 3412               |endian_tag:      12345678
+00002c: 0000 0000               |link_size:       0
+000030: 0000 0000               |link_off:        0
+000034: bc22 0000               |map_off:         000022bc
+000038: a700 0000               |string_ids_size: 000000a7
+00003c: 7000 0000               |string_ids_off:  00000070
+000040: 2600 0000               |type_ids_size:   00000026
+000044: 0c03 0000               |type_ids_off:    0000030c
+000048: 3300 0000               |proto_ids_size:  00000033
+00004c: a403 0000               |proto_ids_off:   000003a4
+000050: 0300 0000               |field_ids_size:  00000003
+000054: 0806 0000               |field_ids_off:   00000608
+000058: 4f00 0000               |method_ids_size: 0000004f
+00005c: 2006 0000               |method_ids_off:  00000620
+000060: 0200 0000               |class_defs_size: 00000002
+000064: 9808 0000               |class_defs_off:  00000898
+000068: 0c1a 0000               |data_size:       00001a0c
+00006c: 9809 0000               |data_off:        00000998
+                                |
+                                |string_ids:
+                                |[0] ""
+000070: d216 0000               |  string_data_off: 000016d2
+                                |[1] " "
+000074: d416 0000               |  string_data_off: 000016d4
+                                |[2] " != "
+000078: d716 0000               |  string_data_off: 000016d7
+                                |[3] " * "
+00007c: dd16 0000               |  string_data_off: 000016dd
+                                |[4] " + "
+000080: e216 0000               |  string_data_off: 000016e2
+                                |[5] " = "
+000084: e716 0000               |  string_data_off: 000016e7
+                                |[6] " expected "
+000088: ec16 0000               |  string_data_off: 000016ec
+                                |[7] " new "
+00008c: f816 0000               |  string_data_off: 000016f8
+                                |[8] ")"
+000090: ff16 0000               |  string_data_off: 000016ff
+                                |[9] ", "
+000094: 0217 0000               |  string_data_off: 00001702
+                                |[a] "<clinit>"
+000098: 0617 0000               |  string_data_off: 00001706
+                                |[b] "<init>"
+00009c: 1017 0000               |  string_data_off: 00001710
+                                |[c] "B"
+0000a0: 1817 0000               |  string_data_off: 00001718
+                                |[d] "C"
+0000a4: 1b17 0000               |  string_data_off: 0000171b
+                                |[e] "D"
+0000a8: 1e17 0000               |  string_data_off: 0000171e
+                                |[f] "DFFD"
+0000ac: 2117 0000               |  string_data_off: 00001721
+                                |[10] "Dupe first invokedynamic invocation"
+0000b0: 2717 0000               |  string_data_off: 00001727
+                                |[11] "ERROR"
+0000b4: 4c17 0000               |  string_data_off: 0000174c
+                                |[12] "F"
+0000b8: 5317 0000               |  string_data_off: 00001753
+                                |[13] "FL"
+0000bc: 5617 0000               |  string_data_off: 00001756
+                                |[14] "Failed "
+0000c0: 5a17 0000               |  string_data_off: 0000175a
+                                |[15] "First invokedynamic invocation"
+0000c4: 6317 0000               |  string_data_off: 00001763
+                                |[16] "FortyTwo"
+0000c8: 8317 0000               |  string_data_off: 00001783
+                                |[17] "Hello World!"
+0000cc: 8d17 0000               |  string_data_off: 0000178d
+                                |[18] "I"
+0000d0: 9b17 0000               |  string_data_off: 0000179b
+                                |[19] "IIII"
+0000d4: 9e17 0000               |  string_data_off: 0000179e
+                                |[1a] "InvokeCustom.<init>("
+0000d8: a417 0000               |  string_data_off: 000017a4
+                                |[1b] "InvokeCustom.java"
+0000dc: ba17 0000               |  string_data_off: 000017ba
+                                |[1c] "InvokeCustom.privateMethodTest9()"
+0000e0: cd17 0000               |  string_data_off: 000017cd
+                                |[1d] "J"
+0000e4: f017 0000               |  string_data_off: 000017f0
+                                |[1e] "JJJJ"
+0000e8: f317 0000               |  string_data_off: 000017f3
+                                |[1f] "L"
+0000ec: f917 0000               |  string_data_off: 000017f9
+                                |[20] "LD"
+0000f0: fc17 0000               |  string_data_off: 000017fc
+                                |[21] "LF"
+0000f4: 0018 0000               |  string_data_off: 00001800
+                                |[22] "LI"
+0000f8: 0418 0000               |  string_data_off: 00001804
+                                |[23] "LJ"
+0000fc: 0818 0000               |  string_data_off: 00001808
+                                |[24] "LL"
+000100: 0c18 0000               |  string_data_off: 0000180c
+                                |[25] "LLLL"
+000104: 1018 0000               |  string_data_off: 00001810
+                                |[26] "LLLLIJFD"
+000108: 1618 0000               |  string_data_off: 00001816
+                                |[27] "LLLLL"
+00010c: 2018 0000               |  string_data_off: 00001820
+                                |[28] "LLLLLLL"
+000110: 2718 0000               |  string_data_off: 00001827
+                                |[29] "LLLLLLLLLLLL"
+000114: 3018 0000               |  string_data_off: 00001830
+                                |[2a] "Ldalvik/annotation/Throws;"
+000118: 3e18 0000               |  string_data_off: 0000183e
+                                |[2b] "Linvokecustom/InvokeCustom;"
+00011c: 5a18 0000               |  string_data_off: 0000185a
+                                |[2c] "Linvokecustom/Super;"
+000120: 7718 0000               |  string_data_off: 00001877
+                                |[2d] "Ljava/io/PrintStream;"
+000124: 8d18 0000               |  string_data_off: 0000188d
+                                |[2e] "Ljava/lang/Class;"
+000128: a418 0000               |  string_data_off: 000018a4
+                                |[2f] "Ljava/lang/IllegalAccessException;"
+00012c: b718 0000               |  string_data_off: 000018b7
+                                |[30] "Ljava/lang/NoSuchMethodException;"
+000130: db18 0000               |  string_data_off: 000018db
+                                |[31] "Ljava/lang/Object;"
+000134: fe18 0000               |  string_data_off: 000018fe
+                                |[32] "Ljava/lang/Runnable;"
+000138: 1219 0000               |  string_data_off: 00001912
+                                |[33] "Ljava/lang/String;"
+00013c: 2819 0000               |  string_data_off: 00001928
+                                |[34] "Ljava/lang/StringBuilder;"
+000140: 3c19 0000               |  string_data_off: 0000193c
+                                |[35] "Ljava/lang/System;"
+000144: 5719 0000               |  string_data_off: 00001957
+                                |[36] "Ljava/lang/Throwable;"
+000148: 6b19 0000               |  string_data_off: 0000196b
+                                |[37] "Ljava/lang/invoke/CallSite;"
+00014c: 8219 0000               |  string_data_off: 00001982
+                                |[38] "Ljava/lang/invoke/ConstantCallSite;"
+000150: 9f19 0000               |  string_data_off: 0000199f
+                                |[39] "Ljava/lang/invoke/LambdaMetafactory;"
+000154: c419 0000               |  string_data_off: 000019c4
+                                |[3a] "Ljava/lang/invoke/MethodHandle;"
+000158: ea19 0000               |  string_data_off: 000019ea
+                                |[3b] "Ljava/lang/invoke/MethodHandles$Lookup;"
+00015c: 0b1a 0000               |  string_data_off: 00001a0b
+                                |[3c] "Ljava/lang/invoke/MethodHandles;"
+000160: 341a 0000               |  string_data_off: 00001a34
+                                |[3d] "Ljava/lang/invoke/MethodType;"
+000164: 561a 0000               |  string_data_off: 00001a56
+                                |[3e] "Ljava/util/Arrays;"
+000168: 751a 0000               |  string_data_off: 00001a75
+                                |[3f] "Ljava/util/List;"
+00016c: 891a 0000               |  string_data_off: 00001a89
+                                |[40] "Ljava/util/Optional;"
+000170: 9b1a 0000               |  string_data_off: 00001a9b
+                                |[41] "Ljava/util/function/Consumer;"
+000174: b11a 0000               |  string_data_off: 00001ab1
+                                |[42] "Ljava/util/function/Function;"
+000178: d01a 0000               |  string_data_off: 00001ad0
+                                |[43] "Ljava/util/function/Predicate;"
+00017c: ef1a 0000               |  string_data_off: 00001aef
+                                |[44] "Ljava/util/stream/Stream;"
+000180: 0f1b 0000               |  string_data_off: 00001b0f
+                                |[45] "OK"
+000184: 2a1b 0000               |  string_data_off: 00001b2a
+                                |[46] "One"
+000188: 2e1b 0000               |  string_data_off: 00001b2e
+                                |[47] "S"
+00018c: 331b 0000               |  string_data_off: 00001b33
+                                |[48] "Second invokedynamic invocation"
+000190: 361b 0000               |  string_data_off: 00001b36
+                                |[49] "String"
+000194: 571b 0000               |  string_data_off: 00001b57
+                                |[4a] "Three"
+000198: 5f1b 0000               |  string_data_off: 00001b5f
+                                |[4b] "V"
+00019c: 661b 0000               |  string_data_off: 00001b66
+                                |[4c] "VC"
+0001a0: 691b 0000               |  string_data_off: 00001b69
+                                |[4d] "VD"
+0001a4: 6d1b 0000               |  string_data_off: 00001b6d
+                                |[4e] "VF"
+0001a8: 711b 0000               |  string_data_off: 00001b71
+                                |[4f] "VI"
+0001ac: 751b 0000               |  string_data_off: 00001b75
+                                |[50] "VJ"
+0001b0: 791b 0000               |  string_data_off: 00001b79
+                                |[51] "VL"
+0001b4: 7d1b 0000               |  string_data_off: 00001b7d
+                                |[52] "VLF"
+0001b8: 811b 0000               |  string_data_off: 00001b81
+                                |[53] "VLL"
+0001bc: 861b 0000               |  string_data_off: 00001b86
+                                |[54] "VZ"
+0001c0: 8b1b 0000               |  string_data_off: 00001b8b
+                                |[55] "VZBCSIFJDL"
+0001c4: 8f1b 0000               |  string_data_off: 00001b8f
+                                |[56] "Z"
+0001c8: 9b1b 0000               |  string_data_off: 00001b9b
+                                |[57] "ZL"
+0001cc: 9e1b 0000               |  string_data_off: 00001b9e
+                                |[58] "[Ljava/lang/Object;"
+0001d0: a21b 0000               |  string_data_off: 00001ba2
+                                |[59] "[Ljava/lang/String;"
+0001d4: b71b 0000               |  string_data_off: 00001bb7
+                                |[5a] "]"
+0001d8: cc1b 0000               |  string_data_off: 00001bcc
+                                |[5b] "accept"
+0001dc: cf1b 0000               |  string_data_off: 00001bcf
+                                |[5c] "append"
+0001e0: d71b 0000               |  string_data_off: 00001bd7
+                                |[5d] "apply"
+0001e4: df1b 0000               |  string_data_off: 00001bdf
+                                |[5e] "asList"
+0001e8: e61b 0000               |  string_data_off: 00001be6
+                                |[5f] "asType"
+0001ec: ee1b 0000               |  string_data_off: 00001bee
+                                |[60] "bsmCreateCallSite"
+0001f0: f61b 0000               |  string_data_off: 00001bf6
+                                |[61] "bsmCreateCallSite ["
+0001f4: 091c 0000               |  string_data_off: 00001c09
+                                |[62] "bsmLookupStatic"
+0001f8: 1e1c 0000               |  string_data_off: 00001c1e
+                                |[63] "bsmLookupStatic []"
+0001fc: 2f1c 0000               |  string_data_off: 00001c2f
+                                |[64] "bsmLookupStaticWithExtraArgs"
+000200: 431c 0000               |  string_data_off: 00001c43
+                                |[65] "bsmLookupStaticWithExtraArgs ["
+000204: 611c 0000               |  string_data_off: 00001c61
+                                |[66] "bsmLookupTest9"
+000208: 811c 0000               |  string_data_off: 00001c81
+                                |[67] "bsmLookupTest9 ["
+00020c: 911c 0000               |  string_data_off: 00001c91
+                                |[68] "checkFieldTest9"
+000210: a31c 0000               |  string_data_off: 00001ca3
+                                |[69] "checkFieldTest9: old "
+000214: b41c 0000               |  string_data_off: 00001cb4
+                                |[6a] "checkStaticFieldTest9"
+000218: cb1c 0000               |  string_data_off: 00001ccb
+                                |[6b] "checkStaticFieldTest9: old "
+00021c: e21c 0000               |  string_data_off: 00001ce2
+                                |[6c] "equals"
+000220: ff1c 0000               |  string_data_off: 00001cff
+                                |[6d] "fieldTest9"
+000224: 071d 0000               |  string_data_off: 00001d07
+                                |[6e] "filter"
+000228: 131d 0000               |  string_data_off: 00001d13
+                                |[6f] "findAny"
+00022c: 1b1d 0000               |  string_data_off: 00001d1b
+                                |[70] "findStatic"
+000230: 241d 0000               |  string_data_off: 00001d24
+                                |[71] "forEach"
+000234: 301d 0000               |  string_data_off: 00001d30
+                                |[72] "getClass"
+000238: 391d 0000               |  string_data_off: 00001d39
+                                |[73] "helperMethodTest9"
+00023c: 431d 0000               |  string_data_off: 00001d43
+                                |[74] "helperMethodTest9 in "
+000240: 561d 0000               |  string_data_off: 00001d56
+                                |[75] "invoke"
+000244: 6d1d 0000               |  string_data_off: 00001d6d
+                                |[76] "invokeExact"
+000248: 751d 0000               |  string_data_off: 00001d75
+                                |[77] "lambda$lambdaTest$0"
+00024c: 821d 0000               |  string_data_off: 00001d82
+                                |[78] "lambdaTest"
+000250: 971d 0000               |  string_data_off: 00001d97
+                                |[79] "lookup"
+000254: a31d 0000               |  string_data_off: 00001da3
+                                |[7a] "lookupClass"
+000258: ab1d 0000               |  string_data_off: 00001dab
+                                |[7b] "main"
+00025c: b81d 0000               |  string_data_off: 00001db8
+                                |[7c] "map"
+000260: be1d 0000               |  string_data_off: 00001dbe
+                                |[7d] "metafactory"
+000264: c31d 0000               |  string_data_off: 00001dc3
+                                |[7e] "orElse"
+000268: d01d 0000               |  string_data_off: 00001dd0
+                                |[7f] "out"
+00026c: d81d 0000               |  string_data_off: 00001dd8
+                                |[80] "print"
+000270: dd1d 0000               |  string_data_off: 00001ddd
+                                |[81] "println"
+000274: e41d 0000               |  string_data_off: 00001de4
+                                |[82] "privateMethodTest9"
+000278: ed1d 0000               |  string_data_off: 00001ded
+                                |[83] "run"
+00027c: 011e 0000               |  string_data_off: 00001e01
+                                |[84] "run() for Test9"
+000280: 061e 0000               |  string_data_off: 00001e06
+                                |[85] "staticFieldTest9"
+000284: 171e 0000               |  string_data_off: 00001e17
+                                |[86] "stream"
+000288: 291e 0000               |  string_data_off: 00001e29
+                                |[87] "targetMethodTest1"
+00028c: 311e 0000               |  string_data_off: 00001e31
+                                |[88] "targetMethodTest2"
+000290: 441e 0000               |  string_data_off: 00001e44
+                                |[89] "targetMethodTest3"
+000294: 571e 0000               |  string_data_off: 00001e57
+                                |[8a] "targetMethodTest3 from InvokeCustom"
+000298: 6a1e 0000               |  string_data_off: 00001e6a
+                                |[8b] "targetMethodTest4"
+00029c: 8f1e 0000               |  string_data_off: 00001e8f
+                                |[8c] "targetMethodTest4 from InvokeCustom (oops!)"
+0002a0: a21e 0000               |  string_data_off: 00001ea2
+                                |[8d] "targetMethodTest4 from Super"
+0002a4: cf1e 0000               |  string_data_off: 00001ecf
+                                |[8e] "targetMethodTest5"
+0002a8: ed1e 0000               |  string_data_off: 00001eed
+                                |[8f] "targetMethodTest5 "
+0002ac: 001f 0000               |  string_data_off: 00001f00
+                                |[90] "targetMethodTest5 returned: "
+0002b0: 141f 0000               |  string_data_off: 00001f14
+                                |[91] "targetMethodTest6"
+0002b4: 321f 0000               |  string_data_off: 00001f32
+                                |[92] "targetMethodTest6 "
+0002b8: 451f 0000               |  string_data_off: 00001f45
+                                |[93] "targetMethodTest6 returned: "
+0002bc: 591f 0000               |  string_data_off: 00001f59
+                                |[94] "targetMethodTest7"
+0002c0: 771f 0000               |  string_data_off: 00001f77
+                                |[95] "targetMethodTest7 "
+0002c4: 8a1f 0000               |  string_data_off: 00001f8a
+                                |[96] "targetMethodTest8"
+0002c8: 9e1f 0000               |  string_data_off: 00001f9e
+                                |[97] "targetMethodTest8 "
+0002cc: b11f 0000               |  string_data_off: 00001fb1
+                                |[98] "targetMethodTest9"
+0002d0: c51f 0000               |  string_data_off: 00001fc5
+                                |[99] "targetMethodTest9()"
+0002d4: d81f 0000               |  string_data_off: 00001fd8
+                                |[9a] "test"
+0002d8: ed1f 0000               |  string_data_off: 00001fed
+                                |[9b] "test1"
+0002dc: f31f 0000               |  string_data_off: 00001ff3
+                                |[9c] "test2"
+0002e0: fa1f 0000               |  string_data_off: 00001ffa
+                                |[9d] "test3"
+0002e4: 0120 0000               |  string_data_off: 00002001
+                                |[9e] "test4"
+0002e8: 0820 0000               |  string_data_off: 00002008
+                                |[9f] "test5"
+0002ec: 0f20 0000               |  string_data_off: 0000200f
+                                |[a0] "test6"
+0002f0: 1620 0000               |  string_data_off: 00002016
+                                |[a1] "test7"
+0002f4: 1d20 0000               |  string_data_off: 0000201d
+                                |[a2] "test8"
+0002f8: 2420 0000               |  string_data_off: 00002024
+                                |[a3] "test9"
+0002fc: 2b20 0000               |  string_data_off: 0000202b
+                                |[a4] "toString"
+000300: 3220 0000               |  string_data_off: 00002032
+                                |[a5] "trim"
+000304: 3c20 0000               |  string_data_off: 0000203c
+                                |[a6] "value"
+000308: 4220 0000               |  string_data_off: 00002042
+                                |
+                                |type_ids:
+                                |[0] B
+00030c: 0c00 0000               |  descriptor_idx: 0000000c
+                                |[1] C
+000310: 0d00 0000               |  descriptor_idx: 0000000d
+                                |[2] D
+000314: 0e00 0000               |  descriptor_idx: 0000000e
+                                |[3] F
+000318: 1200 0000               |  descriptor_idx: 00000012
+                                |[4] I
+00031c: 1800 0000               |  descriptor_idx: 00000018
+                                |[5] J
+000320: 1d00 0000               |  descriptor_idx: 0000001d
+                                |[6] Ldalvik/annotation/Throws;
+000324: 2a00 0000               |  descriptor_idx: 0000002a
+                                |[7] Linvokecustom/InvokeCustom;
+000328: 2b00 0000               |  descriptor_idx: 0000002b
+                                |[8] Linvokecustom/Super;
+00032c: 2c00 0000               |  descriptor_idx: 0000002c
+                                |[9] Ljava/io/PrintStream;
+000330: 2d00 0000               |  descriptor_idx: 0000002d
+                                |[a] Ljava/lang/Class;
+000334: 2e00 0000               |  descriptor_idx: 0000002e
+                                |[b] Ljava/lang/IllegalAccessException;
+000338: 2f00 0000               |  descriptor_idx: 0000002f
+                                |[c] Ljava/lang/NoSuchMethodException;
+00033c: 3000 0000               |  descriptor_idx: 00000030
+                                |[d] Ljava/lang/Object;
+000340: 3100 0000               |  descriptor_idx: 00000031
+                                |[e] Ljava/lang/Runnable;
+000344: 3200 0000               |  descriptor_idx: 00000032
+                                |[f] Ljava/lang/String;
+000348: 3300 0000               |  descriptor_idx: 00000033
+                                |[10] Ljava/lang/StringBuilder;
+00034c: 3400 0000               |  descriptor_idx: 00000034
+                                |[11] Ljava/lang/System;
+000350: 3500 0000               |  descriptor_idx: 00000035
+                                |[12] Ljava/lang/Throwable;
+000354: 3600 0000               |  descriptor_idx: 00000036
+                                |[13] Ljava/lang/invoke/CallSite;
+000358: 3700 0000               |  descriptor_idx: 00000037
+                                |[14] Ljava/lang/invoke/ConstantCallSite;
+00035c: 3800 0000               |  descriptor_idx: 00000038
+                                |[15] Ljava/lang/invoke/LambdaMetafactory;
+000360: 3900 0000               |  descriptor_idx: 00000039
+                                |[16] Ljava/lang/invoke/MethodHandle;
+000364: 3a00 0000               |  descriptor_idx: 0000003a
+                                |[17] Ljava/lang/invoke/MethodHandles$Lookup;
+000368: 3b00 0000               |  descriptor_idx: 0000003b
+                                |[18] Ljava/lang/invoke/MethodHandles;
+00036c: 3c00 0000               |  descriptor_idx: 0000003c
+                                |[19] Ljava/lang/invoke/MethodType;
+000370: 3d00 0000               |  descriptor_idx: 0000003d
+                                |[1a] Ljava/util/Arrays;
+000374: 3e00 0000               |  descriptor_idx: 0000003e
+                                |[1b] Ljava/util/List;
+000378: 3f00 0000               |  descriptor_idx: 0000003f
+                                |[1c] Ljava/util/Optional;
+00037c: 4000 0000               |  descriptor_idx: 00000040
+                                |[1d] Ljava/util/function/Consumer;
+000380: 4100 0000               |  descriptor_idx: 00000041
+                                |[1e] Ljava/util/function/Function;
+000384: 4200 0000               |  descriptor_idx: 00000042
+                                |[1f] Ljava/util/function/Predicate;
+000388: 4300 0000               |  descriptor_idx: 00000043
+                                |[20] Ljava/util/stream/Stream;
+00038c: 4400 0000               |  descriptor_idx: 00000044
+                                |[21] S
+000390: 4700 0000               |  descriptor_idx: 00000047
+                                |[22] V
+000394: 4b00 0000               |  descriptor_idx: 0000004b
+                                |[23] Z
+000398: 5600 0000               |  descriptor_idx: 00000056
+                                |[24] [Ljava/lang/Object;
+00039c: 5800 0000               |  descriptor_idx: 00000058
+                                |[25] [Ljava/lang/String;
+0003a0: 5900 0000               |  descriptor_idx: 00000059
+                                |
+                                |proto_ids:
+                                |[0] double proto(float, float, double)
+0003a4: 0f00 0000               |  shorty_idx:      0000000f // "DFFD"
+0003a8: 0200 0000               |  return_type_idx: 00000002 // double
+0003ac: 9c15 0000               |  parameters_off:  0000159c
+                                |[1] float proto(invokecustom.InvokeCustom)
+0003b0: 1300 0000               |  shorty_idx:      00000013 // "FL"
+0003b4: 0300 0000               |  return_type_idx: 00000003 // float
+0003b8: a815 0000               |  parameters_off:  000015a8
+                                |[2] int proto()
+0003bc: 1800 0000               |  shorty_idx:      00000018 // "I"
+0003c0: 0400 0000               |  return_type_idx: 00000004 // int
+0003c4: 0000 0000               |  parameters_off:  00000000
+                                |[3] int proto(int, int, int)
+0003c8: 1900 0000               |  shorty_idx:      00000019 // "IIII"
+0003cc: 0400 0000               |  return_type_idx: 00000004 // int
+0003d0: b015 0000               |  parameters_off:  000015b0
+                                |[4] long proto(long, long, long)
+0003d4: 1e00 0000               |  shorty_idx:      0000001e // "JJJJ"
+0003d8: 0500 0000               |  return_type_idx: 00000005 // long
+0003dc: bc15 0000               |  parameters_off:  000015bc
+                                |[5] invokecustom.InvokeCustom proto(int)
+0003e0: 2200 0000               |  shorty_idx:      00000022 // "LI"
+0003e4: 0700 0000               |  return_type_idx: 00000007 // invokecustom.InvokeCustom
+0003e8: c815 0000               |  parameters_off:  000015c8
+                                |[6] java.lang.Class proto()
+0003ec: 1f00 0000               |  shorty_idx:      0000001f // "L"
+0003f0: 0a00 0000               |  return_type_idx: 0000000a // java.lang.Class
+0003f4: 0000 0000               |  parameters_off:  00000000
+                                |[7] java.lang.Object proto(java.lang.Object)
+0003f8: 2400 0000               |  shorty_idx:      00000024 // "LL"
+0003fc: 0d00 0000               |  return_type_idx: 0000000d // java.lang.Object
+000400: d015 0000               |  parameters_off:  000015d0
+                                |[8] java.lang.Object proto(java.lang.Object[])
+000404: 2400 0000               |  shorty_idx:      00000024 // "LL"
+000408: 0d00 0000               |  return_type_idx: 0000000d // java.lang.Object
+00040c: d815 0000               |  parameters_off:  000015d8
+                                |[9] java.lang.String proto()
+000410: 1f00 0000               |  shorty_idx:      0000001f // "L"
+000414: 0f00 0000               |  return_type_idx: 0000000f // java.lang.String
+000418: 0000 0000               |  parameters_off:  00000000
+                                |[a] java.lang.String proto(java.lang.String)
+00041c: 2400 0000               |  shorty_idx:      00000024 // "LL"
+000420: 0f00 0000               |  return_type_idx: 0000000f // java.lang.String
+000424: e015 0000               |  parameters_off:  000015e0
+                                |[b] java.lang.StringBuilder proto(double)
+000428: 2000 0000               |  shorty_idx:      00000020 // "LD"
+00042c: 1000 0000               |  return_type_idx: 00000010 // java.lang.StringBuilder
+000430: e815 0000               |  parameters_off:  000015e8
+                                |[c] java.lang.StringBuilder proto(float)
+000434: 2100 0000               |  shorty_idx:      00000021 // "LF"
+000438: 1000 0000               |  return_type_idx: 00000010 // java.lang.StringBuilder
+00043c: f015 0000               |  parameters_off:  000015f0
+                                |[d] java.lang.StringBuilder proto(int)
+000440: 2200 0000               |  shorty_idx:      00000022 // "LI"
+000444: 1000 0000               |  return_type_idx: 00000010 // java.lang.StringBuilder
+000448: c815 0000               |  parameters_off:  000015c8
+                                |[e] java.lang.StringBuilder proto(long)
+00044c: 2300 0000               |  shorty_idx:      00000023 // "LJ"
+000450: 1000 0000               |  return_type_idx: 00000010 // java.lang.StringBuilder
+000454: f815 0000               |  parameters_off:  000015f8
+                                |[f] java.lang.StringBuilder proto(java.lang.Object)
+000458: 2400 0000               |  shorty_idx:      00000024 // "LL"
+00045c: 1000 0000               |  return_type_idx: 00000010 // java.lang.StringBuilder
+000460: d015 0000               |  parameters_off:  000015d0
+                                |[10] java.lang.StringBuilder proto(java.lang.String)
+000464: 2400 0000               |  shorty_idx:      00000024 // "LL"
+000468: 1000 0000               |  return_type_idx: 00000010 // java.lang.StringBuilder
+00046c: e015 0000               |  parameters_off:  000015e0
+                                |[11] java.lang.invoke.CallSite proto(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.invoke.MethodType)
+000470: 2500 0000               |  shorty_idx:      00000025 // "LLLL"
+000474: 1300 0000               |  return_type_idx: 00000013 // java.lang.invoke.CallSite
+000478: 0016 0000               |  parameters_off:  00001600
+                                |[12] java.lang.invoke.CallSite proto(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.invoke.MethodType, int, long, float, double)
+00047c: 2600 0000               |  shorty_idx:      00000026 // "LLLLIJFD"
+000480: 1300 0000               |  return_type_idx: 00000013 // java.lang.invoke.CallSite
+000484: 0c16 0000               |  parameters_off:  0000160c
+                                |[13] java.lang.invoke.CallSite proto(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle)
+000488: 2700 0000               |  shorty_idx:      00000027 // "LLLLL"
+00048c: 1300 0000               |  return_type_idx: 00000013 // java.lang.invoke.CallSite
+000490: 2016 0000               |  parameters_off:  00001620
+                                |[14] java.lang.invoke.CallSite proto(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)
+000494: 2900 0000               |  shorty_idx:      00000029 // "LLLLLLLLLLLL"
+000498: 1300 0000               |  return_type_idx: 00000013 // java.lang.invoke.CallSite
+00049c: 2c16 0000               |  parameters_off:  0000162c
+                                |[15] java.lang.invoke.CallSite proto(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.invoke.MethodType, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle, java.lang.invoke.MethodType)
+0004a0: 2800 0000               |  shorty_idx:      00000028 // "LLLLLLL"
+0004a4: 1300 0000               |  return_type_idx: 00000013 // java.lang.invoke.CallSite
+0004a8: 4816 0000               |  parameters_off:  00001648
+                                |[16] java.lang.invoke.MethodHandle proto(java.lang.Class, java.lang.String, java.lang.invoke.MethodType)
+0004ac: 2500 0000               |  shorty_idx:      00000025 // "LLLL"
+0004b0: 1600 0000               |  return_type_idx: 00000016 // java.lang.invoke.MethodHandle
+0004b4: 5816 0000               |  parameters_off:  00001658
+                                |[17] java.lang.invoke.MethodHandle proto(java.lang.invoke.MethodType)
+0004b8: 2400 0000               |  shorty_idx:      00000024 // "LL"
+0004bc: 1600 0000               |  return_type_idx: 00000016 // java.lang.invoke.MethodHandle
+0004c0: 6416 0000               |  parameters_off:  00001664
+                                |[18] java.lang.invoke.MethodHandles$Lookup proto()
+0004c4: 1f00 0000               |  shorty_idx:      0000001f // "L"
+0004c8: 1700 0000               |  return_type_idx: 00000017 // java.lang.invoke.MethodHandles$Lookup
+0004cc: 0000 0000               |  parameters_off:  00000000
+                                |[19] java.util.List proto(java.lang.Object[])
+0004d0: 2400 0000               |  shorty_idx:      00000024 // "LL"
+0004d4: 1b00 0000               |  return_type_idx: 0000001b // java.util.List
+0004d8: d815 0000               |  parameters_off:  000015d8
+                                |[1a] java.util.Optional proto()
+0004dc: 1f00 0000               |  shorty_idx:      0000001f // "L"
+0004e0: 1c00 0000               |  return_type_idx: 0000001c // java.util.Optional
+0004e4: 0000 0000               |  parameters_off:  00000000
+                                |[1b] java.util.function.Consumer proto(java.io.PrintStream)
+0004e8: 2400 0000               |  shorty_idx:      00000024 // "LL"
+0004ec: 1d00 0000               |  return_type_idx: 0000001d // java.util.function.Consumer
+0004f0: 6c16 0000               |  parameters_off:  0000166c
+                                |[1c] java.util.function.Function proto()
+0004f4: 1f00 0000               |  shorty_idx:      0000001f // "L"
+0004f8: 1e00 0000               |  return_type_idx: 0000001e // java.util.function.Function
+0004fc: 0000 0000               |  parameters_off:  00000000
+                                |[1d] java.util.function.Predicate proto()
+000500: 1f00 0000               |  shorty_idx:      0000001f // "L"
+000504: 1f00 0000               |  return_type_idx: 0000001f // java.util.function.Predicate
+000508: 0000 0000               |  parameters_off:  00000000
+                                |[1e] java.util.stream.Stream proto()
+00050c: 1f00 0000               |  shorty_idx:      0000001f // "L"
+000510: 2000 0000               |  return_type_idx: 00000020 // java.util.stream.Stream
+000514: 0000 0000               |  parameters_off:  00000000
+                                |[1f] java.util.stream.Stream proto(java.util.function.Function)
+000518: 2400 0000               |  shorty_idx:      00000024 // "LL"
+00051c: 2000 0000               |  return_type_idx: 00000020 // java.util.stream.Stream
+000520: 7416 0000               |  parameters_off:  00001674
+                                |[20] java.util.stream.Stream proto(java.util.function.Predicate)
+000524: 2400 0000               |  shorty_idx:      00000024 // "LL"
+000528: 2000 0000               |  return_type_idx: 00000020 // java.util.stream.Stream
+00052c: 7c16 0000               |  parameters_off:  0000167c
+                                |[21] void proto()
+000530: 4b00 0000               |  shorty_idx:      0000004b // "V"
+000534: 2200 0000               |  return_type_idx: 00000022 // void
+000538: 0000 0000               |  parameters_off:  00000000
+                                |[22] void proto(char)
+00053c: 4c00 0000               |  shorty_idx:      0000004c // "VC"
+000540: 2200 0000               |  return_type_idx: 00000022 // void
+000544: 8416 0000               |  parameters_off:  00001684
+                                |[23] void proto(double)
+000548: 4d00 0000               |  shorty_idx:      0000004d // "VD"
+00054c: 2200 0000               |  return_type_idx: 00000022 // void
+000550: e815 0000               |  parameters_off:  000015e8
+                                |[24] void proto(float)
+000554: 4e00 0000               |  shorty_idx:      0000004e // "VF"
+000558: 2200 0000               |  return_type_idx: 00000022 // void
+00055c: f015 0000               |  parameters_off:  000015f0
+                                |[25] void proto(int)
+000560: 4f00 0000               |  shorty_idx:      0000004f // "VI"
+000564: 2200 0000               |  return_type_idx: 00000022 // void
+000568: c815 0000               |  parameters_off:  000015c8
+                                |[26] void proto(long)
+00056c: 5000 0000               |  shorty_idx:      00000050 // "VJ"
+000570: 2200 0000               |  return_type_idx: 00000022 // void
+000574: f815 0000               |  parameters_off:  000015f8
+                                |[27] void proto(invokecustom.InvokeCustom)
+000578: 5100 0000               |  shorty_idx:      00000051 // "VL"
+00057c: 2200 0000               |  return_type_idx: 00000022 // void
+000580: a815 0000               |  parameters_off:  000015a8
+                                |[28] void proto(invokecustom.InvokeCustom, float)
+000584: 5200 0000               |  shorty_idx:      00000052 // "VLF"
+000588: 2200 0000               |  return_type_idx: 00000022 // void
+00058c: 8c16 0000               |  parameters_off:  0000168c
+                                |[29] void proto(java.lang.Object)
+000590: 5100 0000               |  shorty_idx:      00000051 // "VL"
+000594: 2200 0000               |  return_type_idx: 00000022 // void
+000598: d015 0000               |  parameters_off:  000015d0
+                                |[2a] void proto(java.lang.String)
+00059c: 5100 0000               |  shorty_idx:      00000051 // "VL"
+0005a0: 2200 0000               |  return_type_idx: 00000022 // void
+0005a4: e015 0000               |  parameters_off:  000015e0
+                                |[2b] void proto(java.lang.invoke.MethodHandle)
+0005a8: 5100 0000               |  shorty_idx:      00000051 // "VL"
+0005ac: 2200 0000               |  return_type_idx: 00000022 // void
+0005b0: 9416 0000               |  parameters_off:  00001694
+                                |[2c] void proto(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)
+0005b4: 5300 0000               |  shorty_idx:      00000053 // "VLL"
+0005b8: 2200 0000               |  return_type_idx: 00000022 // void
+0005bc: 9c16 0000               |  parameters_off:  0000169c
+                                |[2d] void proto(java.util.function.Consumer)
+0005c0: 5100 0000               |  shorty_idx:      00000051 // "VL"
+0005c4: 2200 0000               |  return_type_idx: 00000022 // void
+0005c8: a416 0000               |  parameters_off:  000016a4
+                                |[2e] void proto(boolean)
+0005cc: 5400 0000               |  shorty_idx:      00000054 // "VZ"
+0005d0: 2200 0000               |  return_type_idx: 00000022 // void
+0005d4: ac16 0000               |  parameters_off:  000016ac
+                                |[2f] void proto(boolean, byte, char, short, int, float, long, double, java.lang.String)
+0005d8: 5500 0000               |  shorty_idx:      00000055 // "VZBCSIFJDL"
+0005dc: 2200 0000               |  return_type_idx: 00000022 // void
+0005e0: b416 0000               |  parameters_off:  000016b4
+                                |[30] void proto(java.lang.String[])
+0005e4: 5100 0000               |  shorty_idx:      00000051 // "VL"
+0005e8: 2200 0000               |  return_type_idx: 00000022 // void
+0005ec: cc16 0000               |  parameters_off:  000016cc
+                                |[31] boolean proto(java.lang.Object)
+0005f0: 5700 0000               |  shorty_idx:      00000057 // "ZL"
+0005f4: 2300 0000               |  return_type_idx: 00000023 // boolean
+0005f8: d015 0000               |  parameters_off:  000015d0
+                                |[32] boolean proto(java.lang.String)
+0005fc: 5700 0000               |  shorty_idx:      00000057 // "ZL"
+000600: 2300 0000               |  return_type_idx: 00000023 // boolean
+000604: e015 0000               |  parameters_off:  000015e0
+                                |
+                                |field_ids:
+                                |[0] invokecustom.InvokeCustom.fieldTest9:F
+000608: 0700                    |  class_idx: 0007
+00060a: 0300                    |  type_idx:  0003
+00060c: 6d00 0000               |  name_idx:  0000006d
+                                |[1] invokecustom.InvokeCustom.staticFieldTest9:I
+000610: 0700                    |  class_idx: 0007
+000612: 0400                    |  type_idx:  0004
+000614: 8500 0000               |  name_idx:  00000085
+                                |[2] java.lang.System.out:Ljava/io/PrintStream;
+000618: 1100                    |  class_idx: 0011
+00061a: 0900                    |  type_idx:  0009
+00061c: 7f00 0000               |  name_idx:  0000007f
+                                |
+                                |method_ids:
+                                |[0] invokecustom.InvokeCustom.<clinit>:()V
+000620: 0700                    |  class_idx: 0007
+000622: 2100                    |  proto_idx: 0021
+000624: 0a00 0000               |  name_idx:  0000000a
+                                |[1] invokecustom.InvokeCustom.<init>:()V
+000628: 0700                    |  class_idx: 0007
+00062a: 2100                    |  proto_idx: 0021
+00062c: 0b00 0000               |  name_idx:  0000000b
+                                |[2] invokecustom.InvokeCustom.<init>:(I)V
+000630: 0700                    |  class_idx: 0007
+000632: 2500                    |  proto_idx: 0025
+000634: 0b00 0000               |  name_idx:  0000000b
+                                |[3] invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+000638: 0700                    |  class_idx: 0007
+00063a: 1300                    |  proto_idx: 0013
+00063c: 6000 0000               |  name_idx:  00000060
+                                |[4] invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+000640: 0700                    |  class_idx: 0007
+000642: 1100                    |  proto_idx: 0011
+000644: 6200 0000               |  name_idx:  00000062
+                                |[5] invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+000648: 0700                    |  class_idx: 0007
+00064a: 1200                    |  proto_idx: 0012
+00064c: 6400 0000               |  name_idx:  00000064
+                                |[6] invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+000650: 0700                    |  class_idx: 0007
+000652: 1400                    |  proto_idx: 0014
+000654: 6600 0000               |  name_idx:  00000066
+                                |[7] invokecustom.InvokeCustom.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+000658: 0700                    |  class_idx: 0007
+00065a: 2c00                    |  proto_idx: 002c
+00065c: 6800 0000               |  name_idx:  00000068
+                                |[8] invokecustom.InvokeCustom.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+000660: 0700                    |  class_idx: 0007
+000662: 2c00                    |  proto_idx: 002c
+000664: 6a00 0000               |  name_idx:  0000006a
+                                |[9] invokecustom.InvokeCustom.helperMethodTest9:()V
+000668: 0700                    |  class_idx: 0007
+00066a: 2100                    |  proto_idx: 0021
+00066c: 7300 0000               |  name_idx:  00000073
+                                |[a] invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z
+000670: 0700                    |  class_idx: 0007
+000672: 3200                    |  proto_idx: 0032
+000674: 7700 0000               |  name_idx:  00000077
+                                |[b] invokecustom.InvokeCustom.lambdaTest:()V
+000678: 0700                    |  class_idx: 0007
+00067a: 2100                    |  proto_idx: 0021
+00067c: 7800 0000               |  name_idx:  00000078
+                                |[c] invokecustom.InvokeCustom.main:([Ljava/lang/String;)V
+000680: 0700                    |  class_idx: 0007
+000682: 3000                    |  proto_idx: 0030
+000684: 7b00 0000               |  name_idx:  0000007b
+                                |[d] invokecustom.InvokeCustom.privateMethodTest9:()V
+000688: 0700                    |  class_idx: 0007
+00068a: 2100                    |  proto_idx: 0021
+00068c: 8200 0000               |  name_idx:  00000082
+                                |[e] invokecustom.InvokeCustom.run:()V
+000690: 0700                    |  class_idx: 0007
+000692: 2100                    |  proto_idx: 0021
+000694: 8300 0000               |  name_idx:  00000083
+                                |[f] invokecustom.InvokeCustom.targetMethodTest1:()V
+000698: 0700                    |  class_idx: 0007
+00069a: 2100                    |  proto_idx: 0021
+00069c: 8700 0000               |  name_idx:  00000087
+                                |[10] invokecustom.InvokeCustom.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+0006a0: 0700                    |  class_idx: 0007
+0006a2: 2f00                    |  proto_idx: 002f
+0006a4: 8800 0000               |  name_idx:  00000088
+                                |[11] invokecustom.InvokeCustom.targetMethodTest3:()V
+0006a8: 0700                    |  class_idx: 0007
+0006aa: 2100                    |  proto_idx: 0021
+0006ac: 8900 0000               |  name_idx:  00000089
+                                |[12] invokecustom.InvokeCustom.targetMethodTest4:()V
+0006b0: 0700                    |  class_idx: 0007
+0006b2: 2100                    |  proto_idx: 0021
+0006b4: 8b00 0000               |  name_idx:  0000008b
+                                |[13] invokecustom.InvokeCustom.targetMethodTest5:(III)I
+0006b8: 0700                    |  class_idx: 0007
+0006ba: 0300                    |  proto_idx: 0003
+0006bc: 8e00 0000               |  name_idx:  0000008e
+                                |[14] invokecustom.InvokeCustom.targetMethodTest6:(JJJ)J
+0006c0: 0700                    |  class_idx: 0007
+0006c2: 0400                    |  proto_idx: 0004
+0006c4: 9100 0000               |  name_idx:  00000091
+                                |[15] invokecustom.InvokeCustom.targetMethodTest7:(FFD)D
+0006c8: 0700                    |  class_idx: 0007
+0006ca: 0000                    |  proto_idx: 0000
+0006cc: 9400 0000               |  name_idx:  00000094
+                                |[16] invokecustom.InvokeCustom.targetMethodTest8:(Ljava/lang/String;)V
+0006d0: 0700                    |  class_idx: 0007
+0006d2: 2a00                    |  proto_idx: 002a
+0006d4: 9600 0000               |  name_idx:  00000096
+                                |[17] invokecustom.InvokeCustom.targetMethodTest9:()V
+0006d8: 0700                    |  class_idx: 0007
+0006da: 2100                    |  proto_idx: 0021
+0006dc: 9800 0000               |  name_idx:  00000098
+                                |[18] invokecustom.InvokeCustom.test1:()V
+0006e0: 0700                    |  class_idx: 0007
+0006e2: 2100                    |  proto_idx: 0021
+0006e4: 9b00 0000               |  name_idx:  0000009b
+                                |[19] invokecustom.InvokeCustom.test2:()V
+0006e8: 0700                    |  class_idx: 0007
+0006ea: 2100                    |  proto_idx: 0021
+0006ec: 9c00 0000               |  name_idx:  0000009c
+                                |[1a] invokecustom.InvokeCustom.test3:()V
+0006f0: 0700                    |  class_idx: 0007
+0006f2: 2100                    |  proto_idx: 0021
+0006f4: 9d00 0000               |  name_idx:  0000009d
+                                |[1b] invokecustom.InvokeCustom.test4:()V
+0006f8: 0700                    |  class_idx: 0007
+0006fa: 2100                    |  proto_idx: 0021
+0006fc: 9e00 0000               |  name_idx:  0000009e
+                                |[1c] invokecustom.InvokeCustom.test5:()V
+000700: 0700                    |  class_idx: 0007
+000702: 2100                    |  proto_idx: 0021
+000704: 9f00 0000               |  name_idx:  0000009f
+                                |[1d] invokecustom.InvokeCustom.test6:()V
+000708: 0700                    |  class_idx: 0007
+00070a: 2100                    |  proto_idx: 0021
+00070c: a000 0000               |  name_idx:  000000a0
+                                |[1e] invokecustom.InvokeCustom.test7:()V
+000710: 0700                    |  class_idx: 0007
+000712: 2100                    |  proto_idx: 0021
+000714: a100 0000               |  name_idx:  000000a1
+                                |[1f] invokecustom.InvokeCustom.test8:()V
+000718: 0700                    |  class_idx: 0007
+00071a: 2100                    |  proto_idx: 0021
+00071c: a200 0000               |  name_idx:  000000a2
+                                |[20] invokecustom.InvokeCustom.test9:()V
+000720: 0700                    |  class_idx: 0007
+000722: 2100                    |  proto_idx: 0021
+000724: a300 0000               |  name_idx:  000000a3
+                                |[21] invokecustom.Super.<init>:()V
+000728: 0800                    |  class_idx: 0008
+00072a: 2100                    |  proto_idx: 0021
+00072c: 0b00 0000               |  name_idx:  0000000b
+                                |[22] invokecustom.Super.helperMethodTest9:()V
+000730: 0800                    |  class_idx: 0008
+000732: 2100                    |  proto_idx: 0021
+000734: 7300 0000               |  name_idx:  00000073
+                                |[23] invokecustom.Super.targetMethodTest4:()V
+000738: 0800                    |  class_idx: 0008
+00073a: 2100                    |  proto_idx: 0021
+00073c: 8b00 0000               |  name_idx:  0000008b
+                                |[24] java.io.PrintStream.print:(Ljava/lang/String;)V
+000740: 0900                    |  class_idx: 0009
+000742: 2a00                    |  proto_idx: 002a
+000744: 8000 0000               |  name_idx:  00000080
+                                |[25] java.io.PrintStream.println:(C)V
+000748: 0900                    |  class_idx: 0009
+00074a: 2200                    |  proto_idx: 0022
+00074c: 8100 0000               |  name_idx:  00000081
+                                |[26] java.io.PrintStream.println:(D)V
+000750: 0900                    |  class_idx: 0009
+000752: 2300                    |  proto_idx: 0023
+000754: 8100 0000               |  name_idx:  00000081
+                                |[27] java.io.PrintStream.println:(F)V
+000758: 0900                    |  class_idx: 0009
+00075a: 2400                    |  proto_idx: 0024
+00075c: 8100 0000               |  name_idx:  00000081
+                                |[28] java.io.PrintStream.println:(I)V
+000760: 0900                    |  class_idx: 0009
+000762: 2500                    |  proto_idx: 0025
+000764: 8100 0000               |  name_idx:  00000081
+                                |[29] java.io.PrintStream.println:(J)V
+000768: 0900                    |  class_idx: 0009
+00076a: 2600                    |  proto_idx: 0026
+00076c: 8100 0000               |  name_idx:  00000081
+                                |[2a] java.io.PrintStream.println:(Ljava/lang/String;)V
+000770: 0900                    |  class_idx: 0009
+000772: 2a00                    |  proto_idx: 002a
+000774: 8100 0000               |  name_idx:  00000081
+                                |[2b] java.io.PrintStream.println:(Z)V
+000778: 0900                    |  class_idx: 0009
+00077a: 2e00                    |  proto_idx: 002e
+00077c: 8100 0000               |  name_idx:  00000081
+                                |[2c] java.lang.Object.<init>:()V
+000780: 0d00                    |  class_idx: 000d
+000782: 2100                    |  proto_idx: 0021
+000784: 0b00 0000               |  name_idx:  0000000b
+                                |[2d] java.lang.Object.getClass:()Ljava/lang/Class;
+000788: 0d00                    |  class_idx: 000d
+00078a: 0600                    |  proto_idx: 0006
+00078c: 7200 0000               |  name_idx:  00000072
+                                |[2e] java.lang.Runnable.run:()V
+000790: 0e00                    |  class_idx: 000e
+000792: 2100                    |  proto_idx: 0021
+000794: 8300 0000               |  name_idx:  00000083
+                                |[2f] java.lang.String.equals:(Ljava/lang/Object;)Z
+000798: 0f00                    |  class_idx: 000f
+00079a: 3100                    |  proto_idx: 0031
+00079c: 6c00 0000               |  name_idx:  0000006c
+                                |[30] java.lang.String.trim:()Ljava/lang/String;
+0007a0: 0f00                    |  class_idx: 000f
+0007a2: 0900                    |  proto_idx: 0009
+0007a4: a500 0000               |  name_idx:  000000a5
+                                |[31] java.lang.StringBuilder.<init>:()V
+0007a8: 1000                    |  class_idx: 0010
+0007aa: 2100                    |  proto_idx: 0021
+0007ac: 0b00 0000               |  name_idx:  0000000b
+                                |[32] java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;
+0007b0: 1000                    |  class_idx: 0010
+0007b2: 0b00                    |  proto_idx: 000b
+0007b4: 5c00 0000               |  name_idx:  0000005c
+                                |[33] java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;
+0007b8: 1000                    |  class_idx: 0010
+0007ba: 0c00                    |  proto_idx: 000c
+0007bc: 5c00 0000               |  name_idx:  0000005c
+                                |[34] java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
+0007c0: 1000                    |  class_idx: 0010
+0007c2: 0d00                    |  proto_idx: 000d
+0007c4: 5c00 0000               |  name_idx:  0000005c
+                                |[35] java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
+0007c8: 1000                    |  class_idx: 0010
+0007ca: 0e00                    |  proto_idx: 000e
+0007cc: 5c00 0000               |  name_idx:  0000005c
+                                |[36] java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
+0007d0: 1000                    |  class_idx: 0010
+0007d2: 0f00                    |  proto_idx: 000f
+0007d4: 5c00 0000               |  name_idx:  0000005c
+                                |[37] java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+0007d8: 1000                    |  class_idx: 0010
+0007da: 1000                    |  proto_idx: 0010
+0007dc: 5c00 0000               |  name_idx:  0000005c
+                                |[38] java.lang.StringBuilder.toString:()Ljava/lang/String;
+0007e0: 1000                    |  class_idx: 0010
+0007e2: 0900                    |  proto_idx: 0009
+0007e4: a400 0000               |  name_idx:  000000a4
+                                |[39] java.lang.invoke.ConstantCallSite.<init>:(Ljava/lang/invoke/MethodHandle;)V
+0007e8: 1400                    |  class_idx: 0014
+0007ea: 2b00                    |  proto_idx: 002b
+0007ec: 0b00 0000               |  name_idx:  0000000b
+                                |[3a] java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+0007f0: 1500                    |  class_idx: 0015
+0007f2: 1500                    |  proto_idx: 0015
+0007f4: 7d00 0000               |  name_idx:  0000007d
+                                |[3b] java.lang.invoke.MethodHandle.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;
+0007f8: 1600                    |  class_idx: 0016
+0007fa: 1700                    |  proto_idx: 0017
+0007fc: 5f00 0000               |  name_idx:  0000005f
+                                |[3c] java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;
+000800: 1600                    |  class_idx: 0016
+000802: 0800                    |  proto_idx: 0008
+000804: 7500 0000               |  name_idx:  00000075
+                                |[3d] java.lang.invoke.MethodHandle.invoke:(Linvokecustom/InvokeCustom;)V
+000808: 1600                    |  class_idx: 0016
+00080a: 2700                    |  proto_idx: 0027
+00080c: 7500 0000               |  name_idx:  00000075
+                                |[3e] java.lang.invoke.MethodHandle.invokeExact:(Linvokecustom/InvokeCustom;)F
+000810: 1600                    |  class_idx: 0016
+000812: 0100                    |  proto_idx: 0001
+000814: 7600 0000               |  name_idx:  00000076
+                                |[3f] java.lang.invoke.MethodHandle.invokeExact:()I
+000818: 1600                    |  class_idx: 0016
+00081a: 0200                    |  proto_idx: 0002
+00081c: 7600 0000               |  name_idx:  00000076
+                                |[40] java.lang.invoke.MethodHandle.invokeExact:(I)Linvokecustom/InvokeCustom;
+000820: 1600                    |  class_idx: 0016
+000822: 0500                    |  proto_idx: 0005
+000824: 7600 0000               |  name_idx:  00000076
+                                |[41] java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;
+000828: 1600                    |  class_idx: 0016
+00082a: 0800                    |  proto_idx: 0008
+00082c: 7600 0000               |  name_idx:  00000076
+                                |[42] java.lang.invoke.MethodHandle.invokeExact:(I)V
+000830: 1600                    |  class_idx: 0016
+000832: 2500                    |  proto_idx: 0025
+000834: 7600 0000               |  name_idx:  00000076
+                                |[43] java.lang.invoke.MethodHandle.invokeExact:(Linvokecustom/InvokeCustom;)V
+000838: 1600                    |  class_idx: 0016
+00083a: 2700                    |  proto_idx: 0027
+00083c: 7600 0000               |  name_idx:  00000076
+                                |[44] java.lang.invoke.MethodHandle.invokeExact:(Linvokecustom/InvokeCustom;F)V
+000840: 1600                    |  class_idx: 0016
+000842: 2800                    |  proto_idx: 0028
+000844: 7600 0000               |  name_idx:  00000076
+                                |[45] java.lang.invoke.MethodHandles$Lookup.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;
+000848: 1700                    |  class_idx: 0017
+00084a: 1600                    |  proto_idx: 0016
+00084c: 7000 0000               |  name_idx:  00000070
+                                |[46] java.lang.invoke.MethodHandles$Lookup.lookupClass:()Ljava/lang/Class;
+000850: 1700                    |  class_idx: 0017
+000852: 0600                    |  proto_idx: 0006
+000854: 7a00 0000               |  name_idx:  0000007a
+                                |[47] java.lang.invoke.MethodHandles.lookup:()Ljava/lang/invoke/MethodHandles$Lookup;
+000858: 1800                    |  class_idx: 0018
+00085a: 1800                    |  proto_idx: 0018
+00085c: 7900 0000               |  name_idx:  00000079
+                                |[48] java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
+000860: 1a00                    |  class_idx: 001a
+000862: 1900                    |  proto_idx: 0019
+000864: 5e00 0000               |  name_idx:  0000005e
+                                |[49] java.util.List.stream:()Ljava/util/stream/Stream;
+000868: 1b00                    |  class_idx: 001b
+00086a: 1e00                    |  proto_idx: 001e
+00086c: 8600 0000               |  name_idx:  00000086
+                                |[4a] java.util.Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object;
+000870: 1c00                    |  class_idx: 001c
+000872: 0700                    |  proto_idx: 0007
+000874: 7e00 0000               |  name_idx:  0000007e
+                                |[4b] java.util.stream.Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+000878: 2000                    |  class_idx: 0020
+00087a: 2000                    |  proto_idx: 0020
+00087c: 6e00 0000               |  name_idx:  0000006e
+                                |[4c] java.util.stream.Stream.findAny:()Ljava/util/Optional;
+000880: 2000                    |  class_idx: 0020
+000882: 1a00                    |  proto_idx: 001a
+000884: 6f00 0000               |  name_idx:  0000006f
+                                |[4d] java.util.stream.Stream.forEach:(Ljava/util/function/Consumer;)V
+000888: 2000                    |  class_idx: 0020
+00088a: 2d00                    |  proto_idx: 002d
+00088c: 7100 0000               |  name_idx:  00000071
+                                |[4e] java.util.stream.Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
+000890: 2000                    |  class_idx: 0020
+000892: 1f00                    |  proto_idx: 001f
+000894: 7c00 0000               |  name_idx:  0000007c
+                                |
+                                |class_defs:
+                                |[0] invokecustom.Super
+000898: 0800 0000               |  class_idx:           00000008
+00089c: 0004 0000               |  access_flags:        abstract
+0008a0: 0d00 0000               |  superclass_idx:      0000000d // java.lang.Object
+0008a4: 0000 0000               |  interfaces_off:      00000000
+0008a8: 1b00 0000               |  source_file_idx:     0000001b // InvokeCustom.java
+0008ac: 0000 0000               |  annotations_off:     00000000
+0008b0: 1422 0000               |  class_data_off:      00002214
+0008b4: 0000 0000               |  static_values_off:   00000000
+                                |[1] invokecustom.InvokeCustom
+0008b8: 0700 0000               |  class_idx:           00000007
+0008bc: 0100 0000               |  access_flags:        public
+0008c0: 0800 0000               |  superclass_idx:      00000008 // invokecustom.Super
+0008c4: 9415 0000               |  interfaces_off:      00001594
+                                |    java.lang.Runnable
+0008c8: 1b00 0000               |  source_file_idx:     0000001b // InvokeCustom.java
+0008cc: 5415 0000               |  annotations_off:     00001554
+0008d0: 2622 0000               |  class_data_off:      00002226
+0008d4: 0000 0000               |  static_values_off:   00000000
+                                |
+                                |call_site_ids:
+                                |[0] call site{method-handle{invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"test"}, proto{()Ljava/util/function/Predicate;}, proto{(Ljava/lang/Object;)Z}, method-handle{invoke-static,method{invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z}}, proto{(Ljava/lang/String;)Z}}
+0008d8: 8721 0000               |call_site_off: 00002187
+                                |[1] call site{method-handle{invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"apply"}, proto{()Ljava/util/function/Function;}, proto{(Ljava/lang/Object;)Ljava/lang/Object;}, method-handle{invoke-instance,method{java.lang.String.trim:()Ljava/lang/String;}}, proto{(Ljava/lang/String;)Ljava/lang/String;}}
+0008dc: 9421 0000               |call_site_off: 00002194
+                                |[2] call site{method-handle{invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"accept"}, proto{(Ljava/io/PrintStream;)Ljava/util/function/Consumer;}, proto{(Ljava/lang/Object;)V}, method-handle{invoke-instance,method{java.io.PrintStream.println:(Ljava/lang/String;)V}}, proto{(Ljava/lang/String;)V}}
+0008e0: a121 0000               |call_site_off: 000021a1
+                                |[3] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest1"}, proto{()V}}
+0008e4: ae21 0000               |call_site_off: 000021ae
+                                |[4] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest2"}, proto{(ZBCSIFJDLjava/lang/String;)V}}
+0008e8: b521 0000               |call_site_off: 000021b5
+                                |[5] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest5"}, proto{(III)I}}
+0008ec: bc21 0000               |call_site_off: 000021bc
+                                |[6] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest6"}, proto{(JJJ)J}}
+0008f0: c321 0000               |call_site_off: 000021c3
+                                |[7] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest7"}, proto{(FFD)D}}
+0008f4: ca21 0000               |call_site_off: 000021ca
+                                |[8] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest8"}, proto{(Ljava/lang/String;)V}}
+0008f8: d121 0000               |call_site_off: 000021d1
+                                |[9] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest8"}, proto{(Ljava/lang/String;)V}}
+0008fc: d121 0000               |call_site_off: 000021d1
+                                |[a] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest8"}, proto{(Ljava/lang/String;)V}}
+000900: d121 0000               |call_site_off: 000021d1
+                                |[b] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest3"}, proto{()V}, int{0x00000001 / 1}, long{0x00000000075bcd15 / 123456789}, float{0x42f6e979 / 123.456}, double{0x40fe240ca03f7058 / 123456.789123}}
+000904: d821 0000               |call_site_off: 000021d8
+                                |[c] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest4"}, proto{(Linvokecustom/InvokeCustom;)V}, method-handle{invoke-direct,method{invokecustom.Super.targetMethodTest4:()V}}}
+000908: f421 0000               |call_site_off: 000021f4
+                                |[d] call site{method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}}, string{"targetMethodTest9"}, proto{()V}, method-handle{static-get,field{invokecustom.InvokeCustom.staticFieldTest9:I}}, method-handle{static-put,field{invokecustom.InvokeCustom.staticFieldTest9:I}}, method-handle{instance-get,field{invokecustom.InvokeCustom.fieldTest9:F}}, method-handle{instance-put,field{invokecustom.InvokeCustom.fieldTest9:F}}, method-handle{invoke-instance,method{invokecustom.InvokeCustom.helperMethodTest9:()V}}, method-handle{invoke-constructor,method{invokecustom.InvokeCustom.<init>:
+                                |(I)V}}, method-handle{invoke-interface,ifaceMethod{java.lang.Runnable.run:()V}}, method-handle{invoke-direct,method{invokecustom.InvokeCustom.privateMethodTest9:()V}}}
+00090c: fd21 0000               |call_site_off: 000021fd
+                                |
+                                |method_handles:
+                                |[0] method-handle{static-put,field{invokecustom.InvokeCustom.staticFieldTest9:I}}
+000910: 0000                    |type:     0000 // static-put
+000912: 0000                    |reserved: 0000
+000914: 0100                    |fieldId:  0001 // field{invokecustom.InvokeCustom.staticFieldTest9:I}
+000916: 0000                    |reserved: 0000
+                                |[1] method-handle{static-get,field{invokecustom.InvokeCustom.staticFieldTest9:I}}
+000918: 0100                    |type:     0001 // static-get
+00091a: 0000                    |reserved: 0000
+00091c: 0100                    |fieldId:  0001 // field{invokecustom.InvokeCustom.staticFieldTest9:I}
+00091e: 0000                    |reserved: 0000
+                                |[2] method-handle{instance-put,field{invokecustom.InvokeCustom.fieldTest9:F}}
+000920: 0200                    |type:     0002 // instance-put
+000922: 0000                    |reserved: 0000
+000924: 0000                    |fieldId:  0000 // field{invokecustom.InvokeCustom.fieldTest9:F}
+000926: 0000                    |reserved: 0000
+                                |[3] method-handle{instance-get,field{invokecustom.InvokeCustom.fieldTest9:F}}
+000928: 0300                    |type:     0003 // instance-get
+00092a: 0000                    |reserved: 0000
+00092c: 0000                    |fieldId:  0000 // field{invokecustom.InvokeCustom.fieldTest9:F}
+00092e: 0000                    |reserved: 0000
+                                |[4] method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}}
+000930: 0400                    |type:     0004 // invoke-static
+000932: 0000                    |reserved: 0000
+000934: 0300                    |methodId: 0003 // method{invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}
+000936: 0000                    |reserved: 0000
+                                |[5] method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}
+000938: 0400                    |type:     0004 // invoke-static
+00093a: 0000                    |reserved: 0000
+00093c: 0400                    |methodId: 0004 // method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+00093e: 0000                    |reserved: 0000
+                                |[6] method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;}}
+000940: 0400                    |type:     0004 // invoke-static
+000942: 0000                    |reserved: 0000
+000944: 0500                    |methodId: 0005 // method{invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;}
+000946: 0000                    |reserved: 0000
+                                |[7] method-handle{invoke-static,method{invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}}
+000948: 0400                    |type:     0004 // invoke-static
+00094a: 0000                    |reserved: 0000
+00094c: 0600                    |methodId: 0006 // method{invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}
+00094e: 0000                    |reserved: 0000
+                                |[8] method-handle{invoke-static,method{invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z}}
+000950: 0400                    |type:     0004 // invoke-static
+000952: 0000                    |reserved: 0000
+000954: 0a00                    |methodId: 000a // method{invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z}
+000956: 0000                    |reserved: 0000
+                                |[9] method-handle{invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}
+000958: 0400                    |type:     0004 // invoke-static
+00095a: 0000                    |reserved: 0000
+00095c: 3a00                    |methodId: 003a // method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+00095e: 0000                    |reserved: 0000
+                                |[a] method-handle{invoke-instance,method{invokecustom.InvokeCustom.helperMethodTest9:()V}}
+000960: 0500                    |type:     0005 // invoke-instance
+000962: 0000                    |reserved: 0000
+000964: 0900                    |methodId: 0009 // method{invokecustom.InvokeCustom.helperMethodTest9:()V}
+000966: 0000                    |reserved: 0000
+                                |[b] method-handle{invoke-instance,method{java.io.PrintStream.println:(Ljava/lang/String;)V}}
+000968: 0500                    |type:     0005 // invoke-instance
+00096a: 0000                    |reserved: 0000
+00096c: 2a00                    |methodId: 002a // method{java.io.PrintStream.println:(Ljava/lang/String;)V}
+00096e: 0000                    |reserved: 0000
+                                |[c] method-handle{invoke-instance,method{java.lang.String.trim:()Ljava/lang/String;}}
+000970: 0500                    |type:     0005 // invoke-instance
+000972: 0000                    |reserved: 0000
+000974: 3000                    |methodId: 0030 // method{java.lang.String.trim:()Ljava/lang/String;}
+000976: 0000                    |reserved: 0000
+                                |[d] method-handle{invoke-constructor,method{invokecustom.InvokeCustom.<init>:(I)V}}
+000978: 0600                    |type:     0006 // invoke-constructor
+00097a: 0000                    |reserved: 0000
+00097c: 0200                    |methodId: 0002 // method{invokecustom.InvokeCustom.<init>:(I)V}
+00097e: 0000                    |reserved: 0000
+                                |[e] method-handle{invoke-direct,method{invokecustom.InvokeCustom.privateMethodTest9:()V}}
+000980: 0700                    |type:     0007 // invoke-direct
+000982: 0000                    |reserved: 0000
+000984: 0d00                    |methodId: 000d // method{invokecustom.InvokeCustom.privateMethodTest9:()V}
+000986: 0000                    |reserved: 0000
+                                |[f] method-handle{invoke-direct,method{invokecustom.Super.targetMethodTest4:()V}}
+000988: 0700                    |type:     0007 // invoke-direct
+00098a: 0000                    |reserved: 0000
+00098c: 2300                    |methodId: 0023 // method{invokecustom.Super.targetMethodTest4:()V}
+00098e: 0000                    |reserved: 0000
+                                |[10] method-handle{invoke-interface,ifaceMethod{java.lang.Runnable.run:()V}}
+000990: 0800                    |type:     0008 // invoke-interface
+000992: 0000                    |reserved: 0000
+000994: 2e00                    |methodId: 002e // ifaceMethod{java.lang.Runnable.run:()V}
+000996: 0000                    |reserved: 0000
+                                |
+                                |word_data:
+                                |[998] annotation set
+000998: 0100 0000               |  size: 00000001
+00099c: 7321 0000               |  entries[0]: 00002173
+                                |    visibility: system
+                                |    type: dalvik.annotation.Throws
+                                |    value: array {java.lang.Throwable}
+                                |
+                                |[9a0] annotation set
+0009a0: 0100 0000               |  size: 00000001
+0009a4: 7c21 0000               |  entries[0]: 0000217c
+                                |    visibility: system
+                                |    type: dalvik.annotation.Throws
+                                |    value: array {java.lang.NoSuchMethodException, java.lang.IllegalAccessException}
+                                |
+                                |[9a8] invokecustom.Super.<init>:()V
+0009a8: 0100                    |  registers_size: 0001
+0009aa: 0100                    |  ins_size:       0001
+0009ac: 0100                    |  outs_size:      0001
+0009ae: 0000                    |  tries_size:     0000
+0009b0: 4920 0000               |  debug_off:      00002049
+0009b4: 0400 0000               |  insns_size:     00000004
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+0009b8: 7010 2c00 0000          |  0000: invoke-direct {v0}, java.lang.Object.<init>:()V // method@002c
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+0009be: 0e00                    |  0003: return-void
+                                |  0004: code-address
+                                |  debug info
+                                |    line_start: 29
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 29
+                                |    end sequence
+                                |
+                                |[9c0] invokecustom.Super.targetMethodTest4:()V
+0009c0: 0300                    |  registers_size: 0003
+0009c2: 0100                    |  ins_size:       0001
+0009c4: 0200                    |  outs_size:      0002
+0009c6: 0000                    |  tries_size:     0000
+0009c8: 4e20 0000               |  debug_off:      0000204e
+0009cc: 0800 0000               |  insns_size:     00000008
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+0009d0: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+0009d4: 1a01 8d00               |  0002: const-string v1, "targetMethodTest4 from Super" // utf8@008d
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+0009d8: 6e20 2a00 1000          |  0004: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+0009de: 0e00                    |  0007: return-void
+                                |  0008: code-address
+                                |  debug info
+                                |    line_start: 31
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 31
+                                |    0007: line 32
+                                |    end sequence
+                                |
+                                |[9e0] invokecustom.InvokeCustom.<clinit>:()V
+0009e0: 0100                    |  registers_size: 0001
+0009e2: 0000                    |  ins_size:       0000
+0009e4: 0000                    |  outs_size:      0000
+0009e6: 0000                    |  tries_size:     0000
+0009e8: 5420 0000               |  debug_off:      00002054
+0009ec: 0400 0000               |  insns_size:     00000004
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+0009f0: 1200                    |  0000: const/4 v0, #int 0 // #0
+                                |  0001: code-address
+0009f2: 6700 0100               |  0001: sput v0, invokecustom.InvokeCustom.staticFieldTest9:I // field@0001
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+0009f6: 0e00                    |  0003: return-void
+                                |  0004: code-address
+                                |  debug info
+                                |    line_start: 102
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 102
+                                |    end sequence
+                                |
+                                |[9f8] invokecustom.InvokeCustom.<init>:()V
+0009f8: 0200                    |  registers_size: 0002
+0009fa: 0100                    |  ins_size:       0001
+0009fc: 0100                    |  outs_size:      0001
+0009fe: 0000                    |  tries_size:     0000
+000a00: 5920 0000               |  debug_off:      00002059
+000a04: 0700 0000               |  insns_size:     00000007
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000a08: 7010 2100 0100          |  0000: invoke-direct {v1}, invokecustom.Super.<init>:()V // method@0021
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+000a0e: 1200                    |  0003: const/4 v0, #float 0.0 // #0
+                                |  0004: code-address
+000a10: 5910 0000               |  0004: iput v0, v1, invokecustom.InvokeCustom.fieldTest9:F // field@0000
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+000a14: 0e00                    |  0006: return-void
+                                |  0007: code-address
+                                |  debug info
+                                |    line_start: 39
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 39
+                                |    line = 115
+                                |    0003: line 115
+                                |    line = 39
+                                |    0006: line 39
+                                |    end sequence
+                                |
+000a16: 0000                    |
+                                |[a18] invokecustom.InvokeCustom.<init>:(I)V
+000a18: 0500                    |  registers_size: 0005
+000a1a: 0200                    |  ins_size:       0002
+000a1c: 0200                    |  outs_size:      0002
+000a1e: 0000                    |  tries_size:     0000
+000a20: 6620 0000               |  debug_off:      00002066
+000a24: 2500 0000               |  insns_size:     00000025
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000a28: 7010 2100 0300          |  0000: invoke-direct {v3}, invokecustom.Super.<init>:()V // method@0021
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+000a2e: 1200                    |  0003: const/4 v0, #float 0.0 // #0
+                                |  0004: code-address
+000a30: 5930 0000               |  0004: iput v0, v3, invokecustom.InvokeCustom.fieldTest9:F // field@0000
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+000a34: 6200 0200               |  0006: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0008: code-address
+                                |  0008: code-address
+                                |  0008: local-snapshot
+                                |  0008: code-address
+                                |  0008: code-address
+                                |  0008: local-snapshot
+                                |  0008: code-address
+000a38: 2201 1000               |  0008: new-instance v1, java.lang.StringBuilder // type@0010
+                                |  000a: code-address
+                                |  000a: code-address
+                                |  000a: local-snapshot
+                                |  000a: code-address
+                                |  000a: code-address
+                                |  000a: local-snapshot
+                                |  000a: code-address
+000a3c: 7010 3100 0100          |  000a: invoke-direct {v1}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  000d: code-address
+                                |  000d: code-address
+                                |  000d: local-snapshot
+                                |  000d: code-address
+000a42: 1a02 1a00               |  000d: const-string v2, "InvokeCustom.<init>(" // utf8@001a
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+000a46: 6e20 3700 2100          |  000f: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0012: code-address
+                                |  0012: code-address
+                                |  0012: local-snapshot
+000a4c: 0c01                    |  0012: move-result-object v1
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+000a4e: 6e20 3400 4100          |  0013: invoke-virtual {v1, v4}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+000a54: 0c01                    |  0016: move-result-object v1
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+000a56: 1a02 0800               |  0017: const-string v2, ")" // utf8@0008
+                                |  0019: code-address
+                                |  0019: code-address
+                                |  0019: local-snapshot
+                                |  0019: code-address
+                                |  0019: code-address
+                                |  0019: local-snapshot
+                                |  0019: code-address
+000a5a: 6e20 3700 2100          |  0019: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  001c: code-address
+                                |  001c: code-address
+                                |  001c: local-snapshot
+000a60: 0c01                    |  001c: move-result-object v1
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+                                |  001d: code-address
+000a62: 6e10 3800 0100          |  001d: invoke-virtual {v1}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+000a68: 0c01                    |  0020: move-result-object v1
+                                |  0021: code-address
+                                |  0021: code-address
+                                |  0021: local-snapshot
+                                |  0021: code-address
+000a6a: 6e20 2a00 1000          |  0021: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+000a70: 0e00                    |  0024: return-void
+                                |  0025: code-address
+                                |  debug info
+                                |    line_start: 40
+                                |    parameters_size: 0001
+                                |    parameter <unnamed> v4
+                                |    0000: prologue end
+                                |    0000: line 40
+                                |    line = 115
+                                |    0003: line 115
+                                |    line = 41
+                                |    0006: line 41
+                                |    0024: advance pc
+                                |    0024: line 42
+                                |    end sequence
+                                |
+000a72: 0000                    |
+                                |[a74] invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+000a74: 0700                    |  registers_size: 0007
+000a76: 0400                    |  ins_size:       0004
+000a78: 0200                    |  outs_size:      0002
+000a7a: 0000                    |  tries_size:     0000
+000a7c: 7720 0000               |  debug_off:      00002077
+000a80: 2400 0000               |  insns_size:     00000024
+                                |  throws java.lang.Throwable
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000a84: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+000a88: 2201 1000               |  0002: new-instance v1, java.lang.StringBuilder // type@0010
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+000a8c: 7010 3100 0100          |  0004: invoke-direct {v1}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+000a92: 1a02 6100               |  0007: const-string v2, "bsmCreateCallSite [" // utf8@0061
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+000a96: 6e20 3700 2100          |  0009: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+000a9c: 0c01                    |  000c: move-result-object v1
+                                |  000d: code-address
+                                |  000d: code-address
+                                |  000d: local-snapshot
+                                |  000d: code-address
+000a9e: 6e20 3600 6100          |  000d: invoke-virtual {v1, v6}, java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@0036
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+000aa4: 0c01                    |  0010: move-result-object v1
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+000aa6: 1a02 5a00               |  0011: const-string v2, "]" // utf8@005a
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+000aaa: 6e20 3700 2100          |  0013: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+000ab0: 0c01                    |  0016: move-result-object v1
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+000ab2: 6e10 3800 0100          |  0017: invoke-virtual {v1}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+000ab8: 0c01                    |  001a: move-result-object v1
+                                |  001b: code-address
+                                |  001b: code-address
+                                |  001b: local-snapshot
+                                |  001b: code-address
+000aba: 6e20 2a00 1000          |  001b: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  001e: code-address
+                                |  001e: code-address
+                                |  001e: local-snapshot
+                                |  001e: code-address
+000ac0: 2200 1400               |  001e: new-instance v0, java.lang.invoke.ConstantCallSite // type@0014
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+                                |  0020: code-address
+000ac4: 7020 3900 6000          |  0020: invoke-direct {v0, v6}, java.lang.invoke.ConstantCallSite.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@0039
+                                |  0023: code-address
+                                |  0023: code-address
+                                |  0023: local-snapshot
+000aca: 1100                    |  0023: return-object v0
+                                |  0024: code-address
+                                |  debug info
+                                |    line_start: 160
+                                |    parameters_size: 0004
+                                |    parameter <unnamed> v3
+                                |    parameter <unnamed> v4
+                                |    parameter <unnamed> v5
+                                |    parameter <unnamed> v6
+                                |    0000: prologue end
+                                |    0000: line 160
+                                |    001e: advance pc
+                                |    001e: line 161
+                                |    end sequence
+                                |
+                                |[acc] invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+000acc: 0500                    |  registers_size: 0005
+000ace: 0300                    |  ins_size:       0003
+000ad0: 0400                    |  outs_size:      0004
+000ad2: 0000                    |  tries_size:     0000
+000ad4: 8420 0000               |  debug_off:      00002084
+000ad8: 1d00 0000               |  insns_size:     0000001d
+                                |  throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000adc: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+000ae0: 1a01 6300               |  0002: const-string v1, "bsmLookupStatic []" // utf8@0063
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+000ae4: 6e20 2a00 1000          |  0004: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+000aea: 7100 4700 0000          |  0007: invoke-static {}, java.lang.invoke.MethodHandles.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@0047
+                                |  000a: code-address
+                                |  000a: code-address
+                                |  000a: local-snapshot
+000af0: 0c00                    |  000a: move-result-object v0
+                                |  000b: code-address
+                                |  000b: code-address
+                                |  000b: local-snapshot
+                                |  000b: code-address
+000af2: 6e10 4600 0000          |  000b: invoke-virtual {v0}, java.lang.invoke.MethodHandles$Lookup.lookupClass:()Ljava/lang/Class; // method@0046
+                                |  000e: code-address
+                                |  000e: code-address
+                                |  000e: local-snapshot
+000af8: 0c01                    |  000e: move-result-object v1
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+000afa: 6e40 4500 1043          |  000f: invoke-virtual {v0, v1, v3, v4}, java.lang.invoke.MethodHandles$Lookup.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@0045
+                                |  0012: code-address
+                                |  0012: code-address
+                                |  0012: local-snapshot
+000b00: 0c00                    |  0012: move-result-object v0
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+000b02: 2201 1400               |  0013: new-instance v1, java.lang.invoke.ConstantCallSite // type@0014
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+000b06: 6e20 3b00 4000          |  0015: invoke-virtual {v0, v4}, java.lang.invoke.MethodHandle.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@003b
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+000b0c: 0c00                    |  0018: move-result-object v0
+                                |  0019: code-address
+                                |  0019: code-address
+                                |  0019: local-snapshot
+                                |  0019: code-address
+000b0e: 7020 3900 0100          |  0019: invoke-direct {v1, v0}, java.lang.invoke.ConstantCallSite.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@0039
+                                |  001c: code-address
+                                |  001c: code-address
+                                |  001c: local-snapshot
+000b14: 1101                    |  001c: return-object v1
+                                |  001d: code-address
+                                |  debug info
+                                |    line_start: 142
+                                |    parameters_size: 0003
+                                |    parameter <unnamed> v2
+                                |    parameter <unnamed> v3
+                                |    parameter <unnamed> v4
+                                |    0000: prologue end
+                                |    0000: line 142
+                                |    0007: line 143
+                                |    000b: line 144
+                                |    0013: line 145
+                                |    end sequence
+                                |
+000b16: 0000                    |
+                                |[b18] invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+000b18: 0c00                    |  registers_size: 000c
+000b1a: 0900                    |  ins_size:       0009
+000b1c: 0400                    |  outs_size:      0004
+000b1e: 0000                    |  tries_size:     0000
+000b20: 9020 0000               |  debug_off:      00002090
+000b24: 5200 0000               |  insns_size:     00000052
+                                |  throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000b28: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+000b2c: 2201 1000               |  0002: new-instance v1, java.lang.StringBuilder // type@0010
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+000b30: 7010 3100 0100          |  0004: invoke-direct {v1}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+000b36: 1a02 6500               |  0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // utf8@0065
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+000b3a: 6e20 3700 2100          |  0009: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+000b40: 0c01                    |  000c: move-result-object v1
+                                |  000d: code-address
+                                |  000d: code-address
+                                |  000d: local-snapshot
+                                |  000d: code-address
+000b42: 6e20 3400 6100          |  000d: invoke-virtual {v1, v6}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+000b48: 0c01                    |  0010: move-result-object v1
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+000b4a: 1a02 0900               |  0011: const-string v2, ", " // utf8@0009
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+000b4e: 6e20 3700 2100          |  0013: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+000b54: 0c01                    |  0016: move-result-object v1
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+000b56: 6e30 3500 7108          |  0017: invoke-virtual {v1, v7, v8}, java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder; // method@0035
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+000b5c: 0c01                    |  001a: move-result-object v1
+                                |  001b: code-address
+                                |  001b: code-address
+                                |  001b: local-snapshot
+                                |  001b: code-address
+000b5e: 1a02 0900               |  001b: const-string v2, ", " // utf8@0009
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+                                |  001d: code-address
+000b62: 6e20 3700 2100          |  001d: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+000b68: 0c01                    |  0020: move-result-object v1
+                                |  0021: code-address
+                                |  0021: code-address
+                                |  0021: local-snapshot
+                                |  0021: code-address
+000b6a: 6e20 3300 9100          |  0021: invoke-virtual {v1, v9}, java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder; // method@0033
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+000b70: 0c01                    |  0024: move-result-object v1
+                                |  0025: code-address
+                                |  0025: code-address
+                                |  0025: local-snapshot
+                                |  0025: code-address
+000b72: 1a02 0900               |  0025: const-string v2, ", " // utf8@0009
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+                                |  0027: code-address
+000b76: 6e20 3700 2100          |  0027: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  002a: code-address
+                                |  002a: code-address
+                                |  002a: local-snapshot
+000b7c: 0c01                    |  002a: move-result-object v1
+                                |  002b: code-address
+                                |  002b: code-address
+                                |  002b: local-snapshot
+                                |  002b: code-address
+000b7e: 6e30 3200 a10b          |  002b: invoke-virtual {v1, v10, v11}, java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder; // method@0032
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+000b84: 0c01                    |  002e: move-result-object v1
+                                |  002f: code-address
+                                |  002f: code-address
+                                |  002f: local-snapshot
+                                |  002f: code-address
+000b86: 1a02 5a00               |  002f: const-string v2, "]" // utf8@005a
+                                |  0031: code-address
+                                |  0031: code-address
+                                |  0031: local-snapshot
+                                |  0031: code-address
+                                |  0031: code-address
+                                |  0031: local-snapshot
+                                |  0031: code-address
+000b8a: 6e20 3700 2100          |  0031: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0034: code-address
+                                |  0034: code-address
+                                |  0034: local-snapshot
+000b90: 0c01                    |  0034: move-result-object v1
+                                |  0035: code-address
+                                |  0035: code-address
+                                |  0035: local-snapshot
+                                |  0035: code-address
+000b92: 6e10 3800 0100          |  0035: invoke-virtual {v1}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0038: code-address
+                                |  0038: code-address
+                                |  0038: local-snapshot
+000b98: 0c01                    |  0038: move-result-object v1
+                                |  0039: code-address
+                                |  0039: code-address
+                                |  0039: local-snapshot
+                                |  0039: code-address
+000b9a: 6e20 2a00 1000          |  0039: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+                                |  003c: code-address
+000ba0: 7100 4700 0000          |  003c: invoke-static {}, java.lang.invoke.MethodHandles.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@0047
+                                |  003f: code-address
+                                |  003f: code-address
+                                |  003f: local-snapshot
+000ba6: 0c00                    |  003f: move-result-object v0
+                                |  0040: code-address
+                                |  0040: code-address
+                                |  0040: local-snapshot
+                                |  0040: code-address
+000ba8: 6e10 4600 0000          |  0040: invoke-virtual {v0}, java.lang.invoke.MethodHandles$Lookup.lookupClass:()Ljava/lang/Class; // method@0046
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+000bae: 0c01                    |  0043: move-result-object v1
+                                |  0044: code-address
+                                |  0044: code-address
+                                |  0044: local-snapshot
+                                |  0044: code-address
+000bb0: 6e40 4500 1054          |  0044: invoke-virtual {v0, v1, v4, v5}, java.lang.invoke.MethodHandles$Lookup.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@0045
+                                |  0047: code-address
+                                |  0047: code-address
+                                |  0047: local-snapshot
+000bb6: 0c00                    |  0047: move-result-object v0
+                                |  0048: code-address
+                                |  0048: code-address
+                                |  0048: local-snapshot
+                                |  0048: code-address
+000bb8: 2201 1400               |  0048: new-instance v1, java.lang.invoke.ConstantCallSite // type@0014
+                                |  004a: code-address
+                                |  004a: code-address
+                                |  004a: local-snapshot
+                                |  004a: code-address
+                                |  004a: code-address
+                                |  004a: local-snapshot
+                                |  004a: code-address
+000bbc: 6e20 3b00 5000          |  004a: invoke-virtual {v0, v5}, java.lang.invoke.MethodHandle.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@003b
+                                |  004d: code-address
+                                |  004d: code-address
+                                |  004d: local-snapshot
+000bc2: 0c00                    |  004d: move-result-object v0
+                                |  004e: code-address
+                                |  004e: code-address
+                                |  004e: local-snapshot
+                                |  004e: code-address
+000bc4: 7020 3900 0100          |  004e: invoke-direct {v1, v0}, java.lang.invoke.ConstantCallSite.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@0039
+                                |  0051: code-address
+                                |  0051: code-address
+                                |  0051: local-snapshot
+000bca: 1101                    |  0051: return-object v1
+                                |  0052: code-address
+                                |  debug info
+                                |    line_start: 151
+                                |    parameters_size: 0007
+                                |    parameter <unnamed> v3
+                                |    parameter <unnamed> v4
+                                |    parameter <unnamed> v5
+                                |    parameter <unnamed> v6
+                                |    parameter <unnamed> v7
+                                |    parameter <unnamed> v9
+                                |    parameter <unnamed> v10
+                                |    0000: prologue end
+                                |    0000: line 151
+                                |    003c: advance pc
+                                |    003c: line 152
+                                |    0040: line 153
+                                |    0048: line 154
+                                |    end sequence
+                                |
+                                |[bcc] invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+000bcc: 0e00                    |  registers_size: 000e
+000bce: 0b00                    |  ins_size:       000b
+000bd0: 0400                    |  outs_size:      0004
+000bd2: 0000                    |  tries_size:     0000
+000bd4: a220 0000               |  debug_off:      000020a2
+000bd8: 8b00 0000               |  insns_size:     0000008b
+                                |  throws java.lang.Throwable
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000bdc: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+000be0: 2201 1000               |  0002: new-instance v1, java.lang.StringBuilder // type@0010
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+000be4: 7010 3100 0100          |  0004: invoke-direct {v1}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+000bea: 1a02 6700               |  0007: const-string v2, "bsmLookupTest9 [" // utf8@0067
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+000bee: 6e20 3700 2100          |  0009: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+000bf4: 0c01                    |  000c: move-result-object v1
+                                |  000d: code-address
+                                |  000d: code-address
+                                |  000d: local-snapshot
+                                |  000d: code-address
+000bf6: 6e20 3600 6100          |  000d: invoke-virtual {v1, v6}, java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@0036
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+000bfc: 0c01                    |  0010: move-result-object v1
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+000bfe: 1a02 0900               |  0011: const-string v2, ", " // utf8@0009
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+000c02: 6e20 3700 2100          |  0013: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+000c08: 0c01                    |  0016: move-result-object v1
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+000c0a: 6e20 3600 7100          |  0017: invoke-virtual {v1, v7}, java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@0036
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+000c10: 0c01                    |  001a: move-result-object v1
+                                |  001b: code-address
+                                |  001b: code-address
+                                |  001b: local-snapshot
+                                |  001b: code-address
+000c12: 1a02 0900               |  001b: const-string v2, ", " // utf8@0009
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+                                |  001d: code-address
+000c16: 6e20 3700 2100          |  001d: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+000c1c: 0c01                    |  0020: move-result-object v1
+                                |  0021: code-address
+                                |  0021: code-address
+                                |  0021: local-snapshot
+                                |  0021: code-address
+000c1e: 6e20 3600 8100          |  0021: invoke-virtual {v1, v8}, java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@0036
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+000c24: 0c01                    |  0024: move-result-object v1
+                                |  0025: code-address
+                                |  0025: code-address
+                                |  0025: local-snapshot
+                                |  0025: code-address
+000c26: 1a02 0900               |  0025: const-string v2, ", " // utf8@0009
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+                                |  0027: code-address
+000c2a: 6e20 3700 2100          |  0027: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  002a: code-address
+                                |  002a: code-address
+                                |  002a: local-snapshot
+000c30: 0c01                    |  002a: move-result-object v1
+                                |  002b: code-address
+                                |  002b: code-address
+                                |  002b: local-snapshot
+                                |  002b: code-address
+000c32: 6e20 3600 9100          |  002b: invoke-virtual {v1, v9}, java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@0036
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+000c38: 0c01                    |  002e: move-result-object v1
+                                |  002f: code-address
+                                |  002f: code-address
+                                |  002f: local-snapshot
+                                |  002f: code-address
+000c3a: 1a02 5a00               |  002f: const-string v2, "]" // utf8@005a
+                                |  0031: code-address
+                                |  0031: code-address
+                                |  0031: local-snapshot
+                                |  0031: code-address
+                                |  0031: code-address
+                                |  0031: local-snapshot
+                                |  0031: code-address
+000c3e: 6e20 3700 2100          |  0031: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0034: code-address
+                                |  0034: code-address
+                                |  0034: local-snapshot
+000c44: 0c01                    |  0034: move-result-object v1
+                                |  0035: code-address
+                                |  0035: code-address
+                                |  0035: local-snapshot
+                                |  0035: code-address
+000c46: 6e10 3800 0100          |  0035: invoke-virtual {v1}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0038: code-address
+                                |  0038: code-address
+                                |  0038: local-snapshot
+000c4c: 0c01                    |  0038: move-result-object v1
+                                |  0039: code-address
+                                |  0039: code-address
+                                |  0039: local-snapshot
+                                |  0039: code-address
+000c4e: 6e20 2a00 1000          |  0039: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+                                |  003c: code-address
+000c54: 6200 0200               |  003c: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  003e: code-address
+                                |  003e: code-address
+                                |  003e: local-snapshot
+                                |  003e: code-address
+                                |  003e: code-address
+                                |  003e: local-snapshot
+                                |  003e: code-address
+000c58: 2201 1000               |  003e: new-instance v1, java.lang.StringBuilder // type@0010
+                                |  0040: code-address
+                                |  0040: code-address
+                                |  0040: local-snapshot
+                                |  0040: code-address
+                                |  0040: code-address
+                                |  0040: local-snapshot
+                                |  0040: code-address
+000c5c: 7010 3100 0100          |  0040: invoke-direct {v1}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+                                |  0043: code-address
+000c62: 6e20 3700 4100          |  0043: invoke-virtual {v1, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0046: code-address
+                                |  0046: code-address
+                                |  0046: local-snapshot
+000c68: 0c01                    |  0046: move-result-object v1
+                                |  0047: code-address
+                                |  0047: code-address
+                                |  0047: local-snapshot
+                                |  0047: code-address
+000c6a: 1a02 0100               |  0047: const-string v2, " " // utf8@0001
+                                |  0049: code-address
+                                |  0049: code-address
+                                |  0049: local-snapshot
+                                |  0049: code-address
+                                |  0049: code-address
+                                |  0049: local-snapshot
+                                |  0049: code-address
+000c6e: 6e20 3700 2100          |  0049: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  004c: code-address
+                                |  004c: code-address
+                                |  004c: local-snapshot
+000c74: 0c01                    |  004c: move-result-object v1
+                                |  004d: code-address
+                                |  004d: code-address
+                                |  004d: local-snapshot
+                                |  004d: code-address
+000c76: 6e20 3600 5100          |  004d: invoke-virtual {v1, v5}, java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@0036
+                                |  0050: code-address
+                                |  0050: code-address
+                                |  0050: local-snapshot
+000c7c: 0c01                    |  0050: move-result-object v1
+                                |  0051: code-address
+                                |  0051: code-address
+                                |  0051: local-snapshot
+                                |  0051: code-address
+000c7e: 6e10 3800 0100          |  0051: invoke-virtual {v1}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0054: code-address
+                                |  0054: code-address
+                                |  0054: local-snapshot
+000c84: 0c01                    |  0054: move-result-object v1
+                                |  0055: code-address
+                                |  0055: code-address
+                                |  0055: local-snapshot
+                                |  0055: code-address
+000c86: 6e20 2a00 1000          |  0055: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0058: code-address
+                                |  0058: code-address
+                                |  0058: local-snapshot
+                                |  0058: code-address
+000c8c: 7120 0800 7600          |  0058: invoke-static {v6, v7}, invokecustom.InvokeCustom.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@0008
+                                |  005b: code-address
+                                |  005b: code-address
+                                |  005b: local-snapshot
+                                |  005b: code-address
+000c92: 2200 0700               |  005b: new-instance v0, invokecustom.InvokeCustom // type@0007
+                                |  005d: code-address
+                                |  005d: code-address
+                                |  005d: local-snapshot
+                                |  005d: code-address
+                                |  005d: code-address
+                                |  005d: local-snapshot
+                                |  005d: code-address
+000c96: 7010 0100 0000          |  005d: invoke-direct {v0}, invokecustom.InvokeCustom.<init>:()V // method@0001
+                                |  0060: code-address
+                                |  0060: code-address
+                                |  0060: local-snapshot
+                                |  0060: code-address
+000c9c: 7030 0700 8009          |  0060: invoke-direct {v0, v8, v9}, invokecustom.InvokeCustom.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@0007
+                                |  0063: code-address
+                                |  0063: code-address
+                                |  0063: local-snapshot
+                                |  0063: code-address
+000ca2: fa20 4100 0a00 2700     |  0063: invoke-polymorphic {v10, v0}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@0041, proto@0027
+                                |  0067: code-address
+                                |  0067: code-address
+                                |  0067: local-snapshot
+000caa: 1230                    |  0067: const/4 v0, #int 3 // #3
+                                |  0068: code-address
+000cac: fa20 4100 0b00 0500     |  0068: invoke-polymorphic {v11, v0}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@0041, proto@0005
+                                |  006c: code-address
+                                |  006c: code-address
+                                |  006c: local-snapshot
+000cb4: 0c00                    |  006c: move-result-object v0
+                                |  006d: code-address
+                                |  006d: code-address
+                                |  006d: local-snapshot
+                                |  006d: code-address
+000cb6: fa20 3c00 0c00 2700     |  006d: invoke-polymorphic {v12, v0}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@003c, proto@0027
+                                |  0071: code-address
+                                |  0071: code-address
+                                |  0071: local-snapshot
+                                |  0071: code-address
+000cbe: fa20 3c00 0d00 2700     |  0071: invoke-polymorphic {v13, v0}, java.lang.invoke.MethodHandle.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@003c, proto@0027
+                                |  0075: code-address
+                                |  0075: code-address
+                                |  0075: local-snapshot
+                                |  0075: code-address
+000cc6: 7100 4700 0000          |  0075: invoke-static {}, java.lang.invoke.MethodHandles.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@0047
+                                |  0078: code-address
+                                |  0078: code-address
+                                |  0078: local-snapshot
+000ccc: 0c00                    |  0078: move-result-object v0
+                                |  0079: code-address
+                                |  0079: code-address
+                                |  0079: local-snapshot
+                                |  0079: code-address
+000cce: 6e10 4600 0000          |  0079: invoke-virtual {v0}, java.lang.invoke.MethodHandles$Lookup.lookupClass:()Ljava/lang/Class; // method@0046
+                                |  007c: code-address
+                                |  007c: code-address
+                                |  007c: local-snapshot
+000cd4: 0c01                    |  007c: move-result-object v1
+                                |  007d: code-address
+                                |  007d: code-address
+                                |  007d: local-snapshot
+                                |  007d: code-address
+000cd6: 6e40 4500 1054          |  007d: invoke-virtual {v0, v1, v4, v5}, java.lang.invoke.MethodHandles$Lookup.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@0045
+                                |  0080: code-address
+                                |  0080: code-address
+                                |  0080: local-snapshot
+000cdc: 0c00                    |  0080: move-result-object v0
+                                |  0081: code-address
+                                |  0081: code-address
+                                |  0081: local-snapshot
+                                |  0081: code-address
+000cde: 2201 1400               |  0081: new-instance v1, java.lang.invoke.ConstantCallSite // type@0014
+                                |  0083: code-address
+                                |  0083: code-address
+                                |  0083: local-snapshot
+                                |  0083: code-address
+                                |  0083: code-address
+                                |  0083: local-snapshot
+                                |  0083: code-address
+000ce2: 6e20 3b00 5000          |  0083: invoke-virtual {v0, v5}, java.lang.invoke.MethodHandle.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@003b
+                                |  0086: code-address
+                                |  0086: code-address
+                                |  0086: local-snapshot
+000ce8: 0c00                    |  0086: move-result-object v0
+                                |  0087: code-address
+                                |  0087: code-address
+                                |  0087: local-snapshot
+                                |  0087: code-address
+000cea: 7020 3900 0100          |  0087: invoke-direct {v1, v0}, java.lang.invoke.ConstantCallSite.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@0039
+                                |  008a: code-address
+                                |  008a: code-address
+                                |  008a: local-snapshot
+000cf0: 1101                    |  008a: return-object v1
+                                |  008b: code-address
+                                |  debug info
+                                |    line_start: 174
+                                |    parameters_size: 000b
+                                |    parameter <unnamed> v3
+                                |    parameter <unnamed> v4
+                                |    parameter <unnamed> v5
+                                |    parameter <unnamed> v6
+                                |    parameter <unnamed> v7
+                                |    parameter <unnamed> v8
+                                |    parameter <unnamed> v9
+                                |    parameter <unnamed> v10
+                                |    parameter <unnamed> v11
+                                |    parameter <unnamed> v12
+                                |    parameter <unnamed> v13
+                                |    0000: prologue end
+                                |    0000: line 174
+                                |    003c: advance pc
+                                |    003c: line 176
+                                |    0058: advance pc
+                                |    0058: line 179
+                                |    005b: line 180
+                                |    0060: line 181
+                                |    0063: line 184
+                                |    0067: line 186
+                                |    006d: line 187
+                                |    0071: line 188
+                                |    0075: line 190
+                                |    0079: line 191
+                                |    0081: line 192
+                                |    end sequence
+                                |
+000cf2: 0000                    |
+                                |[cf4] invokecustom.InvokeCustom.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+000cf4: 0900                    |  registers_size: 0009
+000cf6: 0300                    |  ins_size:       0003
+000cf8: 0300                    |  outs_size:      0003
+000cfa: 0000                    |  tries_size:     0000
+000cfc: c220 0000               |  debug_off:      000020c2
+000d00: 5200 0000               |  insns_size:     00000052
+                                |  throws java.lang.Throwable
+                                |  0000: code-address
+                                |  0000: local-snapshot
+000d04: 1405 0ff0 6a20          |  0000: const v5, #float 1.99E-19 // #206af00f
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+                                |  0003: code-address
+000d0a: fa20 4100 6700 0100     |  0003: invoke-polymorphic {v7, v6}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@0041, proto@0001
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+000d12: 0a00                    |  0007: move-result v0
+                                |  0008: code-address
+                                |  0008: code-address
+                                |  0008: local-snapshot
+                                |  0008: code-address
+000d14: fa30 4100 6805 2800     |  0008: invoke-polymorphic {v8, v6, v5}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@0041, proto@0028
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+000d1c: fa20 4100 6700 0100     |  000c: invoke-polymorphic {v7, v6}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@0041, proto@0001
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+000d24: 0a01                    |  0010: move-result v1
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+000d26: 6202 0200               |  0011: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+000d2a: 2203 1000               |  0013: new-instance v3, java.lang.StringBuilder // type@0010
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+000d2e: 7010 3100 0300          |  0015: invoke-direct {v3}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+                                |  0018: code-address
+000d34: 1a04 6900               |  0018: const-string v4, "checkFieldTest9: old " // utf8@0069
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+                                |  001a: code-address
+000d38: 6e20 3700 4300          |  001a: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+000d3e: 0c03                    |  001d: move-result-object v3
+                                |  001e: code-address
+                                |  001e: code-address
+                                |  001e: local-snapshot
+                                |  001e: code-address
+000d40: 6e20 3300 0300          |  001e: invoke-virtual {v3, v0}, java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder; // method@0033
+                                |  0021: code-address
+                                |  0021: code-address
+                                |  0021: local-snapshot
+000d46: 0c00                    |  0021: move-result-object v0
+                                |  0022: code-address
+                                |  0022: code-address
+                                |  0022: local-snapshot
+                                |  0022: code-address
+000d48: 1a03 0700               |  0022: const-string v3, " new " // utf8@0007
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+                                |  0024: code-address
+000d4c: 6e20 3700 3000          |  0024: invoke-virtual {v0, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+000d52: 0c00                    |  0027: move-result-object v0
+                                |  0028: code-address
+                                |  0028: code-address
+                                |  0028: local-snapshot
+                                |  0028: code-address
+000d54: 6e20 3300 1000          |  0028: invoke-virtual {v0, v1}, java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder; // method@0033
+                                |  002b: code-address
+                                |  002b: code-address
+                                |  002b: local-snapshot
+000d5a: 0c00                    |  002b: move-result-object v0
+                                |  002c: code-address
+                                |  002c: code-address
+                                |  002c: local-snapshot
+                                |  002c: code-address
+000d5c: 1a03 0600               |  002c: const-string v3, " expected " // utf8@0006
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+                                |  002e: code-address
+000d60: 6e20 3700 3000          |  002e: invoke-virtual {v0, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0031: code-address
+                                |  0031: code-address
+                                |  0031: local-snapshot
+000d66: 0c00                    |  0031: move-result-object v0
+                                |  0032: code-address
+                                |  0032: code-address
+                                |  0032: local-snapshot
+                                |  0032: code-address
+000d68: 6e20 3300 5000          |  0032: invoke-virtual {v0, v5}, java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder; // method@0033
+                                |  0035: code-address
+                                |  0035: code-address
+                                |  0035: local-snapshot
+000d6e: 0c00                    |  0035: move-result-object v0
+                                |  0036: code-address
+                                |  0036: code-address
+                                |  0036: local-snapshot
+                                |  0036: code-address
+000d70: 1a03 0100               |  0036: const-string v3, " " // utf8@0001
+                                |  0038: code-address
+                                |  0038: code-address
+                                |  0038: local-snapshot
+                                |  0038: code-address
+                                |  0038: code-address
+                                |  0038: local-snapshot
+                                |  0038: code-address
+000d74: 6e20 3700 3000          |  0038: invoke-virtual {v0, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  003b: code-address
+                                |  003b: code-address
+                                |  003b: local-snapshot
+000d7a: 0c00                    |  003b: move-result-object v0
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+                                |  003c: code-address
+000d7c: 6e10 3800 0000          |  003c: invoke-virtual {v0}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  003f: code-address
+                                |  003f: code-address
+                                |  003f: local-snapshot
+000d82: 0c00                    |  003f: move-result-object v0
+                                |  0040: code-address
+                                |  0040: code-address
+                                |  0040: local-snapshot
+                                |  0040: code-address
+000d84: 6e20 2400 0200          |  0040: invoke-virtual {v2, v0}, java.io.PrintStream.print:(Ljava/lang/String;)V // method@0024
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+                                |  0043: code-address
+000d8a: 6202 0200               |  0043: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0045: code-address
+                                |  0045: code-address
+                                |  0045: local-snapshot
+                                |  0045: code-address
+                                |  0045: code-address
+                                |  0045: local-snapshot
+000d8e: 2d00 0105               |  0045: cmpl-float v0, v1, v5
+000d92: 3900 0800               |  0047: if-nez v0, 004f // +0008
+                                |  0049: code-address
+                                |  0049: code-address
+                                |  0049: local-snapshot
+                                |  0049: code-address
+000d96: 1a00 4500               |  0049: const-string v0, "OK" // utf8@0045
+                                |  004b: code-address
+                                |  004b: code-address
+                                |  004b: local-snapshot
+                                |  004b: code-address
+                                |  004b: code-address
+                                |  004b: local-snapshot
+                                |  004b: code-address
+000d9a: 6e20 2a00 0200          |  004b: invoke-virtual {v2, v0}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  004e: code-address
+                                |  004e: code-address
+                                |  004e: local-snapshot
+000da0: 0e00                    |  004e: return-void
+                                |  004f: code-address
+                                |  004f: code-address
+                                |  004f: local-snapshot
+                                |  004f: code-address
+000da2: 1a00 1100               |  004f: const-string v0, "ERROR" // utf8@0011
+                                |  0051: code-address
+                                |  0051: code-address
+                                |  0051: local-snapshot
+                                |  0051: code-address
+000da6: 28fa                    |  0051: goto 004b // -0006
+                                |  debug info
+                                |    line_start: 120
+                                |    parameters_size: 0002
+                                |    parameter <unnamed> v7
+                                |    parameter <unnamed> v8
+                                |    0000: prologue end
+                                |    0003: line 120
+                                |    0008: line 121
+                                |    000c: line 122
+                                |    0011: line 123
+                                |    0043: advance pc
+                                |    0043: line 125
+                                |    004e: line 126
+                                |    004f: line 125
+                                |    end sequence
+                                |
+                                |[da8] invokecustom.InvokeCustom.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+000da8: 0800                    |  registers_size: 0008
+000daa: 0200                    |  ins_size:       0002
+000dac: 0200                    |  outs_size:      0002
+000dae: 0000                    |  tries_size:     0000
+000db0: d120 0000               |  debug_off:      000020d1
+000db4: 5000 0000               |  insns_size:     00000050
+                                |  throws java.lang.Throwable
+                                |  0000: code-address
+                                |  0000: local-snapshot
+000db8: 1405 1032 5476          |  0000: const v5, #int 1985229328 // #76543210
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+                                |  0003: code-address
+000dbe: fa10 4100 0600 0200     |  0003: invoke-polymorphic {v6}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@0041, proto@0002
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+000dc6: 0a00                    |  0007: move-result v0
+                                |  0008: code-address
+                                |  0008: code-address
+                                |  0008: local-snapshot
+                                |  0008: code-address
+000dc8: fa20 4100 5700 2500     |  0008: invoke-polymorphic {v7, v5}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@0041, proto@0025
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+000dd0: fa10 4100 0600 0200     |  000c: invoke-polymorphic {v6}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@0041, proto@0002
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+000dd8: 0a01                    |  0010: move-result v1
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+000dda: 6202 0200               |  0011: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+000dde: 2203 1000               |  0013: new-instance v3, java.lang.StringBuilder // type@0010
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+000de2: 7010 3100 0300          |  0015: invoke-direct {v3}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+                                |  0018: code-address
+000de8: 1a04 6b00               |  0018: const-string v4, "checkStaticFieldTest9: old " // utf8@006b
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+                                |  001a: code-address
+000dec: 6e20 3700 4300          |  001a: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+000df2: 0c03                    |  001d: move-result-object v3
+                                |  001e: code-address
+                                |  001e: code-address
+                                |  001e: local-snapshot
+                                |  001e: code-address
+000df4: 6e20 3400 0300          |  001e: invoke-virtual {v3, v0}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  0021: code-address
+                                |  0021: code-address
+                                |  0021: local-snapshot
+000dfa: 0c00                    |  0021: move-result-object v0
+                                |  0022: code-address
+                                |  0022: code-address
+                                |  0022: local-snapshot
+                                |  0022: code-address
+000dfc: 1a03 0700               |  0022: const-string v3, " new " // utf8@0007
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+                                |  0024: code-address
+000e00: 6e20 3700 3000          |  0024: invoke-virtual {v0, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+000e06: 0c00                    |  0027: move-result-object v0
+                                |  0028: code-address
+                                |  0028: code-address
+                                |  0028: local-snapshot
+                                |  0028: code-address
+000e08: 6e20 3400 1000          |  0028: invoke-virtual {v0, v1}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  002b: code-address
+                                |  002b: code-address
+                                |  002b: local-snapshot
+000e0e: 0c00                    |  002b: move-result-object v0
+                                |  002c: code-address
+                                |  002c: code-address
+                                |  002c: local-snapshot
+                                |  002c: code-address
+000e10: 1a03 0600               |  002c: const-string v3, " expected " // utf8@0006
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+                                |  002e: code-address
+000e14: 6e20 3700 3000          |  002e: invoke-virtual {v0, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0031: code-address
+                                |  0031: code-address
+                                |  0031: local-snapshot
+000e1a: 0c00                    |  0031: move-result-object v0
+                                |  0032: code-address
+                                |  0032: code-address
+                                |  0032: local-snapshot
+                                |  0032: code-address
+000e1c: 6e20 3400 5000          |  0032: invoke-virtual {v0, v5}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  0035: code-address
+                                |  0035: code-address
+                                |  0035: local-snapshot
+000e22: 0c00                    |  0035: move-result-object v0
+                                |  0036: code-address
+                                |  0036: code-address
+                                |  0036: local-snapshot
+                                |  0036: code-address
+000e24: 1a03 0100               |  0036: const-string v3, " " // utf8@0001
+                                |  0038: code-address
+                                |  0038: code-address
+                                |  0038: local-snapshot
+                                |  0038: code-address
+                                |  0038: code-address
+                                |  0038: local-snapshot
+                                |  0038: code-address
+000e28: 6e20 3700 3000          |  0038: invoke-virtual {v0, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  003b: code-address
+                                |  003b: code-address
+                                |  003b: local-snapshot
+000e2e: 0c00                    |  003b: move-result-object v0
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+                                |  003c: code-address
+000e30: 6e10 3800 0000          |  003c: invoke-virtual {v0}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  003f: code-address
+                                |  003f: code-address
+                                |  003f: local-snapshot
+000e36: 0c00                    |  003f: move-result-object v0
+                                |  0040: code-address
+                                |  0040: code-address
+                                |  0040: local-snapshot
+                                |  0040: code-address
+000e38: 6e20 2400 0200          |  0040: invoke-virtual {v2, v0}, java.io.PrintStream.print:(Ljava/lang/String;)V // method@0024
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+                                |  0043: code-address
+000e3e: 6202 0200               |  0043: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0045: code-address
+                                |  0045: code-address
+                                |  0045: local-snapshot
+                                |  0045: code-address
+                                |  0045: code-address
+                                |  0045: local-snapshot
+000e42: 3351 0800               |  0045: if-ne v1, v5, 004d // +0008
+                                |  0047: code-address
+                                |  0047: code-address
+                                |  0047: local-snapshot
+                                |  0047: code-address
+000e46: 1a00 4500               |  0047: const-string v0, "OK" // utf8@0045
+                                |  0049: code-address
+                                |  0049: code-address
+                                |  0049: local-snapshot
+                                |  0049: code-address
+                                |  0049: code-address
+                                |  0049: local-snapshot
+                                |  0049: code-address
+000e4a: 6e20 2a00 0200          |  0049: invoke-virtual {v2, v0}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  004c: code-address
+                                |  004c: code-address
+                                |  004c: local-snapshot
+000e50: 0e00                    |  004c: return-void
+                                |  004d: code-address
+                                |  004d: code-address
+                                |  004d: local-snapshot
+                                |  004d: code-address
+000e52: 1a00 1100               |  004d: const-string v0, "ERROR" // utf8@0011
+                                |  004f: code-address
+                                |  004f: code-address
+                                |  004f: local-snapshot
+                                |  004f: code-address
+000e56: 28fa                    |  004f: goto 0049 // -0006
+                                |  debug info
+                                |    line_start: 107
+                                |    parameters_size: 0002
+                                |    parameter <unnamed> v6
+                                |    parameter <unnamed> v7
+                                |    0000: prologue end
+                                |    0003: line 107
+                                |    0008: line 108
+                                |    000c: line 109
+                                |    0011: line 110
+                                |    0043: advance pc
+                                |    0043: line 112
+                                |    004c: line 113
+                                |    004d: line 112
+                                |    end sequence
+                                |
+                                |[e58] invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z
+000e58: 0300                    |  registers_size: 0003
+000e5a: 0100                    |  ins_size:       0001
+000e5c: 0200                    |  outs_size:      0002
+000e5e: 0000                    |  tries_size:     0000
+000e60: e020 0000               |  debug_off:      000020e0
+000e64: 0b00 0000               |  insns_size:     0000000b
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000e68: 1a00 4600               |  0000: const-string v0, "One" // utf8@0046
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+000e6c: 6e10 3000 0200          |  0002: invoke-virtual {v2}, java.lang.String.trim:()Ljava/lang/String; // method@0030
+                                |  0005: code-address
+                                |  0005: code-address
+                                |  0005: local-snapshot
+000e72: 0c01                    |  0005: move-result-object v1
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+000e74: 6e20 2f00 1000          |  0006: invoke-virtual {v0, v1}, java.lang.String.equals:(Ljava/lang/Object;)Z // method@002f
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+000e7a: 0a00                    |  0009: move-result v0
+                                |  000a: code-address
+                                |  000a: code-address
+                                |  000a: local-snapshot
+000e7c: 0f00                    |  000a: return v0
+                                |  000b: code-address
+                                |  debug info
+                                |    line_start: 197
+                                |    parameters_size: 0001
+                                |    parameter <unnamed> v2
+                                |    0000: prologue end
+                                |    0000: line 197
+                                |    end sequence
+                                |
+000e7e: 0000                    |
+                                |[e80] invokecustom.InvokeCustom.lambdaTest:()V
+000e80: 0300                    |  registers_size: 0003
+000e82: 0000                    |  ins_size:       0000
+000e84: 0200                    |  outs_size:      0002
+000e86: 0000                    |  tries_size:     0000
+000e88: e720 0000               |  debug_off:      000020e7
+000e8c: 4700 0000               |  insns_size:     00000047
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+000e90: 1230                    |  0000: const/4 v0, #int 3 // #3
+                                |  0001: code-address
+000e92: 2300 2500               |  0001: new-array v0, v0, java.lang.String[] // type@0025
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+000e96: 1201                    |  0003: const/4 v1, #int 0 // #0
+                                |  0004: code-address
+000e98: 1a02 4a00               |  0004: const-string v2, "Three" // utf8@004a
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+000e9c: 4d02 0001               |  0006: aput-object v2, v0, v1
+                                |  0008: code-address
+                                |  0008: code-address
+                                |  0008: local-snapshot
+000ea0: 1211                    |  0008: const/4 v1, #int 1 // #1
+                                |  0009: code-address
+000ea2: 1a02 4600               |  0009: const-string v2, "One" // utf8@0046
+                                |  000b: code-address
+                                |  000b: code-address
+                                |  000b: local-snapshot
+                                |  000b: code-address
+                                |  000b: code-address
+                                |  000b: local-snapshot
+                                |  000b: code-address
+000ea6: 4d02 0001               |  000b: aput-object v2, v0, v1
+                                |  000d: code-address
+                                |  000d: code-address
+                                |  000d: local-snapshot
+000eaa: 1221                    |  000d: const/4 v1, #int 2 // #2
+                                |  000e: code-address
+000eac: 1a02 1600               |  000e: const-string v2, "FortyTwo" // utf8@0016
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+                                |  0010: code-address
+000eb0: 4d02 0001               |  0010: aput-object v2, v0, v1
+                                |  0012: code-address
+                                |  0012: code-address
+                                |  0012: local-snapshot
+                                |  0012: code-address
+000eb4: 7110 4800 0000          |  0012: invoke-static {v0}, java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List; // method@0048
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+000eba: 0c01                    |  0015: move-result-object v1
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+                                |  0016: code-address
+000ebc: 7210 4900 0100          |  0016: invoke-interface {v1}, java.util.List.stream:()Ljava/util/stream/Stream; // method@0049
+                                |  0019: code-address
+                                |  0019: code-address
+                                |  0019: local-snapshot
+000ec2: 0c00                    |  0019: move-result-object v0
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+                                |  001a: code-address
+000ec4: fc00 0000 0000          |  001a: invoke-custom {}, {invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, test, ()Ljava/util/function/Predicate;, (Ljava/lang/Object;)Z, invoke-static,method{invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z}, (Ljava/lang/String;)Z} // CallSiteRef@0000
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+000eca: 0c02                    |  001d: move-result-object v2
+                                |  001e: code-address
+                                |  001e: code-address
+                                |  001e: local-snapshot
+                                |  001e: code-address
+000ecc: 7220 4b00 2000          |  001e: invoke-interface {v0, v2}, java.util.stream.Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream; // method@004b
+                                |  0021: code-address
+                                |  0021: code-address
+                                |  0021: local-snapshot
+000ed2: 0c00                    |  0021: move-result-object v0
+                                |  0022: code-address
+                                |  0022: code-address
+                                |  0022: local-snapshot
+                                |  0022: code-address
+000ed4: fc00 0100 0000          |  0022: invoke-custom {}, {invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, apply, ()Ljava/util/function/Function;, (Ljava/lang/Object;)Ljava/lang/Object;, invoke-instance,method{java.lang.String.trim:()Ljava/lang/String;}, (Ljava/lang/String;)Ljava/lang/String;} // CallSiteRef@0001
+                                |  0025: code-address
+                                |  0025: code-address
+                                |  0025: local-snapshot
+000eda: 0c02                    |  0025: move-result-object v2
+                                |  0026: code-address
+                                |  0026: code-address
+                                |  0026: local-snapshot
+                                |  0026: code-address
+000edc: 7220 4e00 2000          |  0026: invoke-interface {v0, v2}, java.util.stream.Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream; // method@004e
+                                |  0029: code-address
+                                |  0029: code-address
+                                |  0029: local-snapshot
+000ee2: 0c00                    |  0029: move-result-object v0
+                                |  002a: code-address
+                                |  002a: code-address
+                                |  002a: local-snapshot
+                                |  002a: code-address
+000ee4: 7210 4c00 0000          |  002a: invoke-interface {v0}, java.util.stream.Stream.findAny:()Ljava/util/Optional; // method@004c
+                                |  002d: code-address
+                                |  002d: code-address
+                                |  002d: local-snapshot
+000eea: 0c00                    |  002d: move-result-object v0
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+                                |  002e: code-address
+000eec: 1a02 0000               |  002e: const-string v2, "" // utf8@0000
+                                |  0030: code-address
+                                |  0030: code-address
+                                |  0030: local-snapshot
+                                |  0030: code-address
+                                |  0030: code-address
+                                |  0030: local-snapshot
+                                |  0030: code-address
+000ef0: 6e20 4a00 2000          |  0030: invoke-virtual {v0, v2}, java.util.Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object; // method@004a
+                                |  0033: code-address
+                                |  0033: code-address
+                                |  0033: local-snapshot
+000ef6: 0c00                    |  0033: move-result-object v0
+                                |  0034: code-address
+                                |  0034: code-address
+                                |  0034: local-snapshot
+                                |  0034: code-address
+000ef8: 1f00 0f00               |  0034: check-cast v0, java.lang.String // type@000f
+                                |  0036: code-address
+                                |  0036: code-address
+                                |  0036: local-snapshot
+                                |  0036: code-address
+                                |  0036: code-address
+                                |  0036: local-snapshot
+                                |  0036: code-address
+000efc: 7210 4900 0100          |  0036: invoke-interface {v1}, java.util.List.stream:()Ljava/util/stream/Stream; // method@0049
+                                |  0039: code-address
+                                |  0039: code-address
+                                |  0039: local-snapshot
+000f02: 0c00                    |  0039: move-result-object v0
+                                |  003a: code-address
+                                |  003a: code-address
+                                |  003a: local-snapshot
+                                |  003a: code-address
+000f04: 6201 0200               |  003a: sget-object v1, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+                                |  003c: code-address
+000f08: 6e10 2d00 0100          |  003c: invoke-virtual {v1}, java.lang.Object.getClass:()Ljava/lang/Class; // method@002d
+                                |  003f: code-address
+                                |  003f: code-address
+                                |  003f: local-snapshot
+                                |  003f: code-address
+000f0e: fc10 0200 0100          |  003f: invoke-custom {v1}, {invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, accept, (Ljava/io/PrintStream;)Ljava/util/function/Consumer;, (Ljava/lang/Object;)V, invoke-instance,method{java.io.PrintStream.println:(Ljava/lang/String;)V}, (Ljava/lang/String;)V} // CallSiteRef@0002
+                                |  0042: code-address
+                                |  0042: code-address
+                                |  0042: local-snapshot
+000f14: 0c01                    |  0042: move-result-object v1
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+                                |  0043: code-address
+000f16: 7220 4d00 1000          |  0043: invoke-interface {v0, v1}, java.util.stream.Stream.forEach:(Ljava/util/function/Consumer;)V // method@004d
+                                |  0046: code-address
+                                |  0046: code-address
+                                |  0046: local-snapshot
+000f1c: 0e00                    |  0046: return-void
+                                |  0047: code-address
+                                |  debug info
+                                |    line_start: 196
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 196
+                                |    0016: advance pc
+                                |    0016: line 197
+                                |    0026: line 198
+                                |    0036: line 199
+                                |    0046: line 200
+                                |    end sequence
+                                |
+000f1e: 0000                    |
+                                |[f20] invokecustom.InvokeCustom.main:([Ljava/lang/String;)V
+000f20: 0100                    |  registers_size: 0001
+000f22: 0100                    |  ins_size:       0001
+000f24: 0000                    |  outs_size:      0000
+000f26: 0000                    |  tries_size:     0000
+000f28: 0000 0000               |  debug_off:      00000000
+000f2c: 1c00 0000               |  insns_size:     0000001c
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000f30: 7100 1800 0000          |  0000: invoke-static {}, invokecustom.InvokeCustom.test1:()V // method@0018
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+                                |  0003: code-address
+000f36: 7100 1900 0000          |  0003: invoke-static {}, invokecustom.InvokeCustom.test2:()V // method@0019
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+000f3c: 7100 1a00 0000          |  0006: invoke-static {}, invokecustom.InvokeCustom.test3:()V // method@001a
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+000f42: 7100 1b00 0000          |  0009: invoke-static {}, invokecustom.InvokeCustom.test4:()V // method@001b
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+000f48: 7100 1c00 0000          |  000c: invoke-static {}, invokecustom.InvokeCustom.test5:()V // method@001c
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+000f4e: 7100 1d00 0000          |  000f: invoke-static {}, invokecustom.InvokeCustom.test6:()V // method@001d
+                                |  0012: code-address
+                                |  0012: code-address
+                                |  0012: local-snapshot
+                                |  0012: code-address
+000f54: 7100 1e00 0000          |  0012: invoke-static {}, invokecustom.InvokeCustom.test7:()V // method@001e
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+000f5a: 7100 1f00 0000          |  0015: invoke-static {}, invokecustom.InvokeCustom.test8:()V // method@001f
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+                                |  0018: code-address
+000f60: 7100 2000 0000          |  0018: invoke-static {}, invokecustom.InvokeCustom.test9:()V // method@0020
+                                |  001b: code-address
+                                |  001b: code-address
+                                |  001b: local-snapshot
+000f66: 0e00                    |  001b: return-void
+                                |  001c: code-address
+                                |
+                                |[f68] invokecustom.InvokeCustom.privateMethodTest9:()V
+000f68: 0300                    |  registers_size: 0003
+000f6a: 0100                    |  ins_size:       0001
+000f6c: 0200                    |  outs_size:      0002
+000f6e: 0000                    |  tries_size:     0000
+000f70: f320 0000               |  debug_off:      000020f3
+000f74: 0800 0000               |  insns_size:     00000008
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000f78: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+000f7c: 1a01 1c00               |  0002: const-string v1, "InvokeCustom.privateMethodTest9()" // utf8@001c
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+000f80: 6e20 2a00 1000          |  0004: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+000f86: 0e00                    |  0007: return-void
+                                |  0008: code-address
+                                |  debug info
+                                |    line_start: 165
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 165
+                                |    0007: line 166
+                                |    end sequence
+                                |
+                                |[f88] invokecustom.InvokeCustom.targetMethodTest1:()V
+000f88: 0200                    |  registers_size: 0002
+000f8a: 0000                    |  ins_size:       0000
+000f8c: 0200                    |  outs_size:      0002
+000f8e: 0000                    |  tries_size:     0000
+000f90: fa20 0000               |  debug_off:      000020fa
+000f94: 0800 0000               |  insns_size:     00000008
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000f98: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+000f9c: 1a01 1700               |  0002: const-string v1, "Hello World!" // utf8@0017
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+000fa0: 6e20 2a00 1000          |  0004: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+000fa6: 0e00                    |  0007: return-void
+                                |  0008: code-address
+                                |  debug info
+                                |    line_start: 45
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 45
+                                |    0007: line 46
+                                |    end sequence
+                                |
+                                |[fa8] invokecustom.InvokeCustom.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+000fa8: 0d00                    |  registers_size: 000d
+000faa: 0b00                    |  ins_size:       000b
+000fac: 0300                    |  outs_size:      0003
+000fae: 0000                    |  tries_size:     0000
+000fb0: 0021 0000               |  debug_off:      00002100
+000fb4: 2e00 0000               |  insns_size:     0000002e
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+000fb8: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+000fbc: 6e20 2b00 2000          |  0002: invoke-virtual {v0, v2}, java.io.PrintStream.println:(Z)V // method@002b
+                                |  0005: code-address
+                                |  0005: code-address
+                                |  0005: local-snapshot
+                                |  0005: code-address
+000fc2: 6200 0200               |  0005: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+000fc6: 6e20 2800 3000          |  0007: invoke-virtual {v0, v3}, java.io.PrintStream.println:(I)V // method@0028
+                                |  000a: code-address
+                                |  000a: code-address
+                                |  000a: local-snapshot
+                                |  000a: code-address
+000fcc: 6200 0200               |  000a: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+000fd0: 6e20 2500 4000          |  000c: invoke-virtual {v0, v4}, java.io.PrintStream.println:(C)V // method@0025
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+000fd6: 6200 0200               |  000f: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+000fda: 6e20 2800 5000          |  0011: invoke-virtual {v0, v5}, java.io.PrintStream.println:(I)V // method@0028
+                                |  0014: code-address
+                                |  0014: code-address
+                                |  0014: local-snapshot
+                                |  0014: code-address
+000fe0: 6200 0200               |  0014: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+                                |  0016: code-address
+000fe4: 6e20 2800 6000          |  0016: invoke-virtual {v0, v6}, java.io.PrintStream.println:(I)V // method@0028
+                                |  0019: code-address
+                                |  0019: code-address
+                                |  0019: local-snapshot
+                                |  0019: code-address
+000fea: 6200 0200               |  0019: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  001b: code-address
+                                |  001b: code-address
+                                |  001b: local-snapshot
+                                |  001b: code-address
+                                |  001b: code-address
+                                |  001b: local-snapshot
+                                |  001b: code-address
+000fee: 6e20 2700 7000          |  001b: invoke-virtual {v0, v7}, java.io.PrintStream.println:(F)V // method@0027
+                                |  001e: code-address
+                                |  001e: code-address
+                                |  001e: local-snapshot
+                                |  001e: code-address
+000ff4: 6200 0200               |  001e: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+                                |  0020: code-address
+000ff8: 6e30 2900 8009          |  0020: invoke-virtual {v0, v8, v9}, java.io.PrintStream.println:(J)V // method@0029
+                                |  0023: code-address
+                                |  0023: code-address
+                                |  0023: local-snapshot
+                                |  0023: code-address
+000ffe: 6200 0200               |  0023: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0025: code-address
+                                |  0025: code-address
+                                |  0025: local-snapshot
+                                |  0025: code-address
+                                |  0025: code-address
+                                |  0025: local-snapshot
+                                |  0025: code-address
+001002: 6e30 2600 a00b          |  0025: invoke-virtual {v0, v10, v11}, java.io.PrintStream.println:(D)V // method@0026
+                                |  0028: code-address
+                                |  0028: code-address
+                                |  0028: local-snapshot
+                                |  0028: code-address
+001008: 6200 0200               |  0028: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  002a: code-address
+                                |  002a: code-address
+                                |  002a: local-snapshot
+                                |  002a: code-address
+                                |  002a: code-address
+                                |  002a: local-snapshot
+                                |  002a: code-address
+00100c: 6e20 2a00 c000          |  002a: invoke-virtual {v0, v12}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  002d: code-address
+                                |  002d: code-address
+                                |  002d: local-snapshot
+001012: 0e00                    |  002d: return-void
+                                |  002e: code-address
+                                |  debug info
+                                |    line_start: 50
+                                |    parameters_size: 0009
+                                |    parameter <unnamed> v2
+                                |    parameter <unnamed> v3
+                                |    parameter <unnamed> v4
+                                |    parameter <unnamed> v5
+                                |    parameter <unnamed> v6
+                                |    parameter <unnamed> v7
+                                |    parameter <unnamed> v8
+                                |    parameter <unnamed> v10
+                                |    parameter <unnamed> v12
+                                |    0000: prologue end
+                                |    0000: line 50
+                                |    0005: line 51
+                                |    000a: line 52
+                                |    000f: line 53
+                                |    0014: line 54
+                                |    0019: line 55
+                                |    001e: line 56
+                                |    0023: line 57
+                                |    0028: line 58
+                                |    002d: line 59
+                                |    end sequence
+                                |
+                                |[1014] invokecustom.InvokeCustom.targetMethodTest3:()V
+001014: 0200                    |  registers_size: 0002
+001016: 0000                    |  ins_size:       0000
+001018: 0200                    |  outs_size:      0002
+00101a: 0000                    |  tries_size:     0000
+00101c: 1721 0000               |  debug_off:      00002117
+001020: 0800 0000               |  insns_size:     00000008
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+001024: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+001028: 1a01 8a00               |  0002: const-string v1, "targetMethodTest3 from InvokeCustom" // utf8@008a
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+00102c: 6e20 2a00 1000          |  0004: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+001032: 0e00                    |  0007: return-void
+                                |  0008: code-address
+                                |  debug info
+                                |    line_start: 62
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 62
+                                |    0007: line 63
+                                |    end sequence
+                                |
+                                |[1034] invokecustom.InvokeCustom.targetMethodTest5:(III)I
+001034: 0700                    |  registers_size: 0007
+001036: 0300                    |  ins_size:       0003
+001038: 0200                    |  outs_size:      0002
+00103a: 0000                    |  tries_size:     0000
+00103c: 1d21 0000               |  debug_off:      0000211d
+001040: 5300 0000               |  insns_size:     00000053
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+001044: 9000 0405               |  0000: add-int v0, v4, v5
+                                |  0002: code-address
+001048: 6201 0200               |  0002: sget-object v1, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+00104c: 2202 1000               |  0004: new-instance v2, java.lang.StringBuilder // type@0010
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+001050: 7010 3100 0200          |  0006: invoke-direct {v2}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+001056: 1a03 8f00               |  0009: const-string v3, "targetMethodTest5 " // utf8@008f
+                                |  000b: code-address
+                                |  000b: code-address
+                                |  000b: local-snapshot
+                                |  000b: code-address
+                                |  000b: code-address
+                                |  000b: local-snapshot
+                                |  000b: code-address
+00105a: 6e20 3700 3200          |  000b: invoke-virtual {v2, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  000e: code-address
+                                |  000e: code-address
+                                |  000e: local-snapshot
+001060: 0c02                    |  000e: move-result-object v2
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+001062: 6e20 3400 4200          |  000f: invoke-virtual {v2, v4}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  0012: code-address
+                                |  0012: code-address
+                                |  0012: local-snapshot
+001068: 0c02                    |  0012: move-result-object v2
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+00106a: 1a03 0400               |  0013: const-string v3, " + " // utf8@0004
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+00106e: 6e20 3700 3200          |  0015: invoke-virtual {v2, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+001074: 0c02                    |  0018: move-result-object v2
+                                |  0019: code-address
+                                |  0019: code-address
+                                |  0019: local-snapshot
+                                |  0019: code-address
+001076: 6e20 3400 5200          |  0019: invoke-virtual {v2, v5}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  001c: code-address
+                                |  001c: code-address
+                                |  001c: local-snapshot
+00107c: 0c02                    |  001c: move-result-object v2
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+                                |  001d: code-address
+00107e: 1a03 0500               |  001d: const-string v3, " = " // utf8@0005
+                                |  001f: code-address
+                                |  001f: code-address
+                                |  001f: local-snapshot
+                                |  001f: code-address
+                                |  001f: code-address
+                                |  001f: local-snapshot
+                                |  001f: code-address
+001082: 6e20 3700 3200          |  001f: invoke-virtual {v2, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0022: code-address
+                                |  0022: code-address
+                                |  0022: local-snapshot
+001088: 0c02                    |  0022: move-result-object v2
+                                |  0023: code-address
+                                |  0023: code-address
+                                |  0023: local-snapshot
+                                |  0023: code-address
+00108a: 6e20 3400 0200          |  0023: invoke-virtual {v2, v0}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  0026: code-address
+                                |  0026: code-address
+                                |  0026: local-snapshot
+001090: 0c02                    |  0026: move-result-object v2
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+                                |  0027: code-address
+001092: 6e10 3800 0200          |  0027: invoke-virtual {v2}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  002a: code-address
+                                |  002a: code-address
+                                |  002a: local-snapshot
+001098: 0c02                    |  002a: move-result-object v2
+                                |  002b: code-address
+                                |  002b: code-address
+                                |  002b: local-snapshot
+                                |  002b: code-address
+00109a: 6e20 2a00 2100          |  002b: invoke-virtual {v1, v2}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+0010a0: 3260 2400               |  002e: if-eq v0, v6, 0052 // +0024
+                                |  0030: code-address
+                                |  0030: code-address
+                                |  0030: local-snapshot
+                                |  0030: code-address
+0010a4: 6201 0200               |  0030: sget-object v1, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0032: code-address
+                                |  0032: code-address
+                                |  0032: local-snapshot
+                                |  0032: code-address
+                                |  0032: code-address
+                                |  0032: local-snapshot
+                                |  0032: code-address
+0010a8: 2202 1000               |  0032: new-instance v2, java.lang.StringBuilder // type@0010
+                                |  0034: code-address
+                                |  0034: code-address
+                                |  0034: local-snapshot
+                                |  0034: code-address
+                                |  0034: code-address
+                                |  0034: local-snapshot
+                                |  0034: code-address
+0010ac: 7010 3100 0200          |  0034: invoke-direct {v2}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0037: code-address
+                                |  0037: code-address
+                                |  0037: local-snapshot
+                                |  0037: code-address
+0010b2: 1a03 1400               |  0037: const-string v3, "Failed " // utf8@0014
+                                |  0039: code-address
+                                |  0039: code-address
+                                |  0039: local-snapshot
+                                |  0039: code-address
+                                |  0039: code-address
+                                |  0039: local-snapshot
+                                |  0039: code-address
+0010b6: 6e20 3700 3200          |  0039: invoke-virtual {v2, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+0010bc: 0c02                    |  003c: move-result-object v2
+                                |  003d: code-address
+                                |  003d: code-address
+                                |  003d: local-snapshot
+                                |  003d: code-address
+0010be: 6e20 3400 0200          |  003d: invoke-virtual {v2, v0}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  0040: code-address
+                                |  0040: code-address
+                                |  0040: local-snapshot
+0010c4: 0c02                    |  0040: move-result-object v2
+                                |  0041: code-address
+                                |  0041: code-address
+                                |  0041: local-snapshot
+                                |  0041: code-address
+0010c6: 1a03 0200               |  0041: const-string v3, " != " // utf8@0002
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+                                |  0043: code-address
+0010ca: 6e20 3700 3200          |  0043: invoke-virtual {v2, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0046: code-address
+                                |  0046: code-address
+                                |  0046: local-snapshot
+0010d0: 0c02                    |  0046: move-result-object v2
+                                |  0047: code-address
+                                |  0047: code-address
+                                |  0047: local-snapshot
+                                |  0047: code-address
+0010d2: 6e20 3400 6200          |  0047: invoke-virtual {v2, v6}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  004a: code-address
+                                |  004a: code-address
+                                |  004a: local-snapshot
+0010d8: 0c02                    |  004a: move-result-object v2
+                                |  004b: code-address
+                                |  004b: code-address
+                                |  004b: local-snapshot
+                                |  004b: code-address
+0010da: 6e10 3800 0200          |  004b: invoke-virtual {v2}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  004e: code-address
+                                |  004e: code-address
+                                |  004e: local-snapshot
+0010e0: 0c02                    |  004e: move-result-object v2
+                                |  004f: code-address
+                                |  004f: code-address
+                                |  004f: local-snapshot
+                                |  004f: code-address
+0010e2: 6e20 2a00 2100          |  004f: invoke-virtual {v1, v2}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0052: code-address
+                                |  0052: code-address
+                                |  0052: local-snapshot
+0010e8: 0f00                    |  0052: return v0
+                                |  0053: code-address
+                                |  debug info
+                                |    line_start: 72
+                                |    parameters_size: 0003
+                                |    parameter <unnamed> v4
+                                |    parameter <unnamed> v5
+                                |    parameter <unnamed> v6
+                                |    0000: prologue end
+                                |    0000: line 72
+                                |    0002: line 73
+                                |    002e: advance pc
+                                |    002e: line 74
+                                |    0030: line 75
+                                |    0052: advance pc
+                                |    0052: line 77
+                                |    end sequence
+                                |
+0010ea: 0000                    |
+                                |[10ec] invokecustom.InvokeCustom.targetMethodTest6:(JJJ)J
+0010ec: 0c00                    |  registers_size: 000c
+0010ee: 0600                    |  ins_size:       0006
+0010f0: 0300                    |  outs_size:      0003
+0010f2: 0000                    |  tries_size:     0000
+0010f4: 2d21 0000               |  debug_off:      0000212d
+0010f8: 5500 0000               |  insns_size:     00000055
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+0010fc: 9b00 0608               |  0000: add-long v0, v6, v8
+                                |  0002: code-address
+001100: 6202 0200               |  0002: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+001104: 2203 1000               |  0004: new-instance v3, java.lang.StringBuilder // type@0010
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+                                |  0006: code-address
+                                |  0006: local-snapshot
+                                |  0006: code-address
+001108: 7010 3100 0300          |  0006: invoke-direct {v3}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+00110e: 1a04 9200               |  0009: const-string v4, "targetMethodTest6 " // utf8@0092
+                                |  000b: code-address
+                                |  000b: code-address
+                                |  000b: local-snapshot
+                                |  000b: code-address
+                                |  000b: code-address
+                                |  000b: local-snapshot
+                                |  000b: code-address
+001112: 6e20 3700 4300          |  000b: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  000e: code-address
+                                |  000e: code-address
+                                |  000e: local-snapshot
+001118: 0c03                    |  000e: move-result-object v3
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+00111a: 6e30 3500 6307          |  000f: invoke-virtual {v3, v6, v7}, java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder; // method@0035
+                                |  0012: code-address
+                                |  0012: code-address
+                                |  0012: local-snapshot
+001120: 0c03                    |  0012: move-result-object v3
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+001122: 1a04 0400               |  0013: const-string v4, " + " // utf8@0004
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+001126: 6e20 3700 4300          |  0015: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+00112c: 0c03                    |  0018: move-result-object v3
+                                |  0019: code-address
+                                |  0019: code-address
+                                |  0019: local-snapshot
+                                |  0019: code-address
+00112e: 6e30 3500 8309          |  0019: invoke-virtual {v3, v8, v9}, java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder; // method@0035
+                                |  001c: code-address
+                                |  001c: code-address
+                                |  001c: local-snapshot
+001134: 0c03                    |  001c: move-result-object v3
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+                                |  001d: code-address
+001136: 1a04 0500               |  001d: const-string v4, " = " // utf8@0005
+                                |  001f: code-address
+                                |  001f: code-address
+                                |  001f: local-snapshot
+                                |  001f: code-address
+                                |  001f: code-address
+                                |  001f: local-snapshot
+                                |  001f: code-address
+00113a: 6e20 3700 4300          |  001f: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0022: code-address
+                                |  0022: code-address
+                                |  0022: local-snapshot
+001140: 0c03                    |  0022: move-result-object v3
+                                |  0023: code-address
+                                |  0023: code-address
+                                |  0023: local-snapshot
+                                |  0023: code-address
+001142: 6e30 3500 0301          |  0023: invoke-virtual {v3, v0, v1}, java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder; // method@0035
+                                |  0026: code-address
+                                |  0026: code-address
+                                |  0026: local-snapshot
+001148: 0c03                    |  0026: move-result-object v3
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+                                |  0027: code-address
+00114a: 6e10 3800 0300          |  0027: invoke-virtual {v3}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  002a: code-address
+                                |  002a: code-address
+                                |  002a: local-snapshot
+001150: 0c03                    |  002a: move-result-object v3
+                                |  002b: code-address
+                                |  002b: code-address
+                                |  002b: local-snapshot
+                                |  002b: code-address
+001152: 6e20 2a00 3200          |  002b: invoke-virtual {v2, v3}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  002e: code-address
+                                |  002e: code-address
+                                |  002e: local-snapshot
+001158: 3102 000a               |  002e: cmp-long v2, v0, v10
+00115c: 3802 2400               |  0030: if-eqz v2, 0054 // +0024
+                                |  0032: code-address
+                                |  0032: code-address
+                                |  0032: local-snapshot
+                                |  0032: code-address
+001160: 6202 0200               |  0032: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0034: code-address
+                                |  0034: code-address
+                                |  0034: local-snapshot
+                                |  0034: code-address
+                                |  0034: code-address
+                                |  0034: local-snapshot
+                                |  0034: code-address
+001164: 2203 1000               |  0034: new-instance v3, java.lang.StringBuilder // type@0010
+                                |  0036: code-address
+                                |  0036: code-address
+                                |  0036: local-snapshot
+                                |  0036: code-address
+                                |  0036: code-address
+                                |  0036: local-snapshot
+                                |  0036: code-address
+001168: 7010 3100 0300          |  0036: invoke-direct {v3}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0039: code-address
+                                |  0039: code-address
+                                |  0039: local-snapshot
+                                |  0039: code-address
+00116e: 1a04 1400               |  0039: const-string v4, "Failed " // utf8@0014
+                                |  003b: code-address
+                                |  003b: code-address
+                                |  003b: local-snapshot
+                                |  003b: code-address
+                                |  003b: code-address
+                                |  003b: local-snapshot
+                                |  003b: code-address
+001172: 6e20 3700 4300          |  003b: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  003e: code-address
+                                |  003e: code-address
+                                |  003e: local-snapshot
+001178: 0c03                    |  003e: move-result-object v3
+                                |  003f: code-address
+                                |  003f: code-address
+                                |  003f: local-snapshot
+                                |  003f: code-address
+00117a: 6e30 3500 0301          |  003f: invoke-virtual {v3, v0, v1}, java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder; // method@0035
+                                |  0042: code-address
+                                |  0042: code-address
+                                |  0042: local-snapshot
+001180: 0c03                    |  0042: move-result-object v3
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+                                |  0043: code-address
+001182: 1a04 0200               |  0043: const-string v4, " != " // utf8@0002
+                                |  0045: code-address
+                                |  0045: code-address
+                                |  0045: local-snapshot
+                                |  0045: code-address
+                                |  0045: code-address
+                                |  0045: local-snapshot
+                                |  0045: code-address
+001186: 6e20 3700 4300          |  0045: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0048: code-address
+                                |  0048: code-address
+                                |  0048: local-snapshot
+00118c: 0c03                    |  0048: move-result-object v3
+                                |  0049: code-address
+                                |  0049: code-address
+                                |  0049: local-snapshot
+                                |  0049: code-address
+00118e: 6e30 3500 a30b          |  0049: invoke-virtual {v3, v10, v11}, java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder; // method@0035
+                                |  004c: code-address
+                                |  004c: code-address
+                                |  004c: local-snapshot
+001194: 0c03                    |  004c: move-result-object v3
+                                |  004d: code-address
+                                |  004d: code-address
+                                |  004d: local-snapshot
+                                |  004d: code-address
+001196: 6e10 3800 0300          |  004d: invoke-virtual {v3}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0050: code-address
+                                |  0050: code-address
+                                |  0050: local-snapshot
+00119c: 0c03                    |  0050: move-result-object v3
+                                |  0051: code-address
+                                |  0051: code-address
+                                |  0051: local-snapshot
+                                |  0051: code-address
+00119e: 6e20 2a00 3200          |  0051: invoke-virtual {v2, v3}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0054: code-address
+                                |  0054: code-address
+                                |  0054: local-snapshot
+0011a4: 1000                    |  0054: return-wide v0
+                                |  0055: code-address
+                                |  debug info
+                                |    line_start: 81
+                                |    parameters_size: 0003
+                                |    parameter <unnamed> v6
+                                |    parameter <unnamed> v8
+                                |    parameter <unnamed> v10
+                                |    0000: prologue end
+                                |    0000: line 81
+                                |    0002: line 82
+                                |    002e: advance pc
+                                |    002e: line 83
+                                |    0032: line 84
+                                |    0054: advance pc
+                                |    0054: line 86
+                                |    end sequence
+                                |
+0011a6: 0000                    |
+                                |[11a8] invokecustom.InvokeCustom.targetMethodTest7:(FFD)D
+0011a8: 0a00                    |  registers_size: 000a
+0011aa: 0400                    |  ins_size:       0004
+0011ac: 0300                    |  outs_size:      0003
+0011ae: 0000                    |  tries_size:     0000
+0011b0: 3d21 0000               |  debug_off:      0000213d
+0011b4: 5600 0000               |  insns_size:     00000056
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+0011b8: a800 0607               |  0000: mul-float v0, v6, v7
+0011bc: 8900                    |  0002: float-to-double v0, v0
+                                |  0003: code-address
+0011be: 6202 0200               |  0003: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0005: code-address
+                                |  0005: code-address
+                                |  0005: local-snapshot
+                                |  0005: code-address
+                                |  0005: code-address
+                                |  0005: local-snapshot
+                                |  0005: code-address
+0011c2: 2203 1000               |  0005: new-instance v3, java.lang.StringBuilder // type@0010
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+0011c6: 7010 3100 0300          |  0007: invoke-direct {v3}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  000a: code-address
+                                |  000a: code-address
+                                |  000a: local-snapshot
+                                |  000a: code-address
+0011cc: 1a04 9500               |  000a: const-string v4, "targetMethodTest7 " // utf8@0095
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+0011d0: 6e20 3700 4300          |  000c: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+0011d6: 0c03                    |  000f: move-result-object v3
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+                                |  0010: code-address
+0011d8: 6e20 3300 6300          |  0010: invoke-virtual {v3, v6}, java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder; // method@0033
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+0011de: 0c03                    |  0013: move-result-object v3
+                                |  0014: code-address
+                                |  0014: code-address
+                                |  0014: local-snapshot
+                                |  0014: code-address
+0011e0: 1a04 0300               |  0014: const-string v4, " * " // utf8@0003
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+                                |  0016: code-address
+0011e4: 6e20 3700 4300          |  0016: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0019: code-address
+                                |  0019: code-address
+                                |  0019: local-snapshot
+0011ea: 0c03                    |  0019: move-result-object v3
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+                                |  001a: code-address
+0011ec: 6e20 3300 7300          |  001a: invoke-virtual {v3, v7}, java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder; // method@0033
+                                |  001d: code-address
+                                |  001d: code-address
+                                |  001d: local-snapshot
+0011f2: 0c03                    |  001d: move-result-object v3
+                                |  001e: code-address
+                                |  001e: code-address
+                                |  001e: local-snapshot
+                                |  001e: code-address
+0011f4: 1a04 0500               |  001e: const-string v4, " = " // utf8@0005
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+                                |  0020: code-address
+0011f8: 6e20 3700 4300          |  0020: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0023: code-address
+                                |  0023: code-address
+                                |  0023: local-snapshot
+0011fe: 0c03                    |  0023: move-result-object v3
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+                                |  0024: code-address
+001200: 6e30 3200 0301          |  0024: invoke-virtual {v3, v0, v1}, java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder; // method@0032
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+001206: 0c03                    |  0027: move-result-object v3
+                                |  0028: code-address
+                                |  0028: code-address
+                                |  0028: local-snapshot
+                                |  0028: code-address
+001208: 6e10 3800 0300          |  0028: invoke-virtual {v3}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  002b: code-address
+                                |  002b: code-address
+                                |  002b: local-snapshot
+00120e: 0c03                    |  002b: move-result-object v3
+                                |  002c: code-address
+                                |  002c: code-address
+                                |  002c: local-snapshot
+                                |  002c: code-address
+001210: 6e20 2a00 3200          |  002c: invoke-virtual {v2, v3}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  002f: code-address
+                                |  002f: code-address
+                                |  002f: local-snapshot
+001216: 2f02 0008               |  002f: cmpl-double v2, v0, v8
+00121a: 3802 2400               |  0031: if-eqz v2, 0055 // +0024
+                                |  0033: code-address
+                                |  0033: code-address
+                                |  0033: local-snapshot
+                                |  0033: code-address
+00121e: 6202 0200               |  0033: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0035: code-address
+                                |  0035: code-address
+                                |  0035: local-snapshot
+                                |  0035: code-address
+                                |  0035: code-address
+                                |  0035: local-snapshot
+                                |  0035: code-address
+001222: 2203 1000               |  0035: new-instance v3, java.lang.StringBuilder // type@0010
+                                |  0037: code-address
+                                |  0037: code-address
+                                |  0037: local-snapshot
+                                |  0037: code-address
+                                |  0037: code-address
+                                |  0037: local-snapshot
+                                |  0037: code-address
+001226: 7010 3100 0300          |  0037: invoke-direct {v3}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  003a: code-address
+                                |  003a: code-address
+                                |  003a: local-snapshot
+                                |  003a: code-address
+00122c: 1a04 1400               |  003a: const-string v4, "Failed " // utf8@0014
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+                                |  003c: code-address
+                                |  003c: code-address
+                                |  003c: local-snapshot
+                                |  003c: code-address
+001230: 6e20 3700 4300          |  003c: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  003f: code-address
+                                |  003f: code-address
+                                |  003f: local-snapshot
+001236: 0c03                    |  003f: move-result-object v3
+                                |  0040: code-address
+                                |  0040: code-address
+                                |  0040: local-snapshot
+                                |  0040: code-address
+001238: 6e30 3200 0301          |  0040: invoke-virtual {v3, v0, v1}, java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder; // method@0032
+                                |  0043: code-address
+                                |  0043: code-address
+                                |  0043: local-snapshot
+00123e: 0c03                    |  0043: move-result-object v3
+                                |  0044: code-address
+                                |  0044: code-address
+                                |  0044: local-snapshot
+                                |  0044: code-address
+001240: 1a04 0200               |  0044: const-string v4, " != " // utf8@0002
+                                |  0046: code-address
+                                |  0046: code-address
+                                |  0046: local-snapshot
+                                |  0046: code-address
+                                |  0046: code-address
+                                |  0046: local-snapshot
+                                |  0046: code-address
+001244: 6e20 3700 4300          |  0046: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0049: code-address
+                                |  0049: code-address
+                                |  0049: local-snapshot
+00124a: 0c03                    |  0049: move-result-object v3
+                                |  004a: code-address
+                                |  004a: code-address
+                                |  004a: local-snapshot
+                                |  004a: code-address
+00124c: 6e30 3200 8309          |  004a: invoke-virtual {v3, v8, v9}, java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder; // method@0032
+                                |  004d: code-address
+                                |  004d: code-address
+                                |  004d: local-snapshot
+001252: 0c03                    |  004d: move-result-object v3
+                                |  004e: code-address
+                                |  004e: code-address
+                                |  004e: local-snapshot
+                                |  004e: code-address
+001254: 6e10 3800 0300          |  004e: invoke-virtual {v3}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0051: code-address
+                                |  0051: code-address
+                                |  0051: local-snapshot
+00125a: 0c03                    |  0051: move-result-object v3
+                                |  0052: code-address
+                                |  0052: code-address
+                                |  0052: local-snapshot
+                                |  0052: code-address
+00125c: 6e20 2a00 3200          |  0052: invoke-virtual {v2, v3}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0055: code-address
+                                |  0055: code-address
+                                |  0055: local-snapshot
+001262: 1000                    |  0055: return-wide v0
+                                |  0056: code-address
+                                |  debug info
+                                |    line_start: 90
+                                |    parameters_size: 0003
+                                |    parameter <unnamed> v6
+                                |    parameter <unnamed> v7
+                                |    parameter <unnamed> v8
+                                |    0000: prologue end
+                                |    0000: line 90
+                                |    0003: line 91
+                                |    002f: advance pc
+                                |    002f: line 92
+                                |    0033: line 93
+                                |    0055: advance pc
+                                |    0055: line 95
+                                |    end sequence
+                                |
+                                |[1264] invokecustom.InvokeCustom.targetMethodTest8:(Ljava/lang/String;)V
+001264: 0400                    |  registers_size: 0004
+001266: 0100                    |  ins_size:       0001
+001268: 0200                    |  outs_size:      0002
+00126a: 0000                    |  tries_size:     0000
+00126c: 4d21 0000               |  debug_off:      0000214d
+001270: 1900 0000               |  insns_size:     00000019
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+001274: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+001278: 2201 1000               |  0002: new-instance v1, java.lang.StringBuilder // type@0010
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+00127c: 7010 3100 0100          |  0004: invoke-direct {v1}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+001282: 1a02 9700               |  0007: const-string v2, "targetMethodTest8 " // utf8@0097
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+001286: 6e20 3700 2100          |  0009: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+00128c: 0c01                    |  000c: move-result-object v1
+                                |  000d: code-address
+                                |  000d: code-address
+                                |  000d: local-snapshot
+                                |  000d: code-address
+00128e: 6e20 3700 3100          |  000d: invoke-virtual {v1, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0010: code-address
+                                |  0010: code-address
+                                |  0010: local-snapshot
+001294: 0c01                    |  0010: move-result-object v1
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+001296: 6e10 3800 0100          |  0011: invoke-virtual {v1}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0014: code-address
+                                |  0014: code-address
+                                |  0014: local-snapshot
+00129c: 0c01                    |  0014: move-result-object v1
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+00129e: 6e20 2a00 1000          |  0015: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+0012a4: 0e00                    |  0018: return-void
+                                |  0019: code-address
+                                |  debug info
+                                |    line_start: 99
+                                |    parameters_size: 0001
+                                |    parameter <unnamed> v3
+                                |    0000: prologue end
+                                |    0000: line 99
+                                |    0018: advance pc
+                                |    0018: line 100
+                                |    end sequence
+                                |
+0012a6: 0000                    |
+                                |[12a8] invokecustom.InvokeCustom.targetMethodTest9:()V
+0012a8: 0200                    |  registers_size: 0002
+0012aa: 0000                    |  ins_size:       0000
+0012ac: 0200                    |  outs_size:      0002
+0012ae: 0000                    |  tries_size:     0000
+0012b0: 5621 0000               |  debug_off:      00002156
+0012b4: 0800 0000               |  insns_size:     00000008
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+0012b8: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+0012bc: 1a01 9900               |  0002: const-string v1, "targetMethodTest9()" // utf8@0099
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+0012c0: 6e20 2a00 1000          |  0004: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+0012c6: 0e00                    |  0007: return-void
+                                |  0008: code-address
+                                |  debug info
+                                |    line_start: 133
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 133
+                                |    0007: line 134
+                                |    end sequence
+                                |
+                                |[12c8] invokecustom.InvokeCustom.test1:()V
+0012c8: 0000                    |  registers_size: 0000
+0012ca: 0000                    |  ins_size:       0000
+0012cc: 0000                    |  outs_size:      0000
+0012ce: 0000                    |  tries_size:     0000
+0012d0: 0000 0000               |  debug_off:      00000000
+0012d4: 0400 0000               |  insns_size:     00000004
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+0012d8: fc00 0300 0000          |  0000: invoke-custom {}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, targetMethodTest1, ()V} // CallSiteRef@0003
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+0012de: 0e00                    |  0003: return-void
+                                |  0004: code-address
+                                |
+                                |[12e0] invokecustom.InvokeCustom.test2:()V
+0012e0: 0b00                    |  registers_size: 000b
+0012e2: 0000                    |  ins_size:       0000
+0012e4: 0b00                    |  outs_size:      000b
+0012e6: 0000                    |  tries_size:     0000
+0012e8: 0000 0000               |  debug_off:      00000000
+0012ec: 1b00 0000               |  insns_size:     0000001b
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+0012f0: 1210                    |  0000: const/4 v0, #int 1 // #1
+0012f2: 1301 7f00               |  0001: const/16 v1, #int 127 // #007f
+0012f6: 1302 6300               |  0003: const/16 v2, #int 99 // #0063
+0012fa: 1303 0004               |  0005: const/16 v3, #int 1024 // #0400
+0012fe: 1404 40e2 0100          |  0007: const v4, #int 123456 // #0001e240
+001304: 1405 9a99 993f          |  000a: const v5, #float 1.2 // #3f99999a
+00130a: 1706 15cd 5b07          |  000d: const-wide/32 v6, #long 123456789 // #075bcd15
+001310: 1808 b6fa f8b0 4819 0c40|  0010: const-wide v8, #double 3.5123456789 // #400c1948b0f8fab6
+                                |  0015: code-address
+00131a: 1a0a 4900               |  0015: const-string v10, "String" // utf8@0049
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+00131e: fd0b 0400 0000          |  0017: invoke-custom/range {v0..v10}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, targetMethodTest2, (ZBCSIFJDLjava/lang/String;)V} // CallSiteRef@0004
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+001324: 0e00                    |  001a: return-void
+                                |  001b: code-address
+                                |
+001326: 0000                    |
+                                |[1328] invokecustom.InvokeCustom.test3:()V
+001328: 0000                    |  registers_size: 0000
+00132a: 0000                    |  ins_size:       0000
+00132c: 0000                    |  outs_size:      0000
+00132e: 0000                    |  tries_size:     0000
+001330: 0000 0000               |  debug_off:      00000000
+001334: 0400 0000               |  insns_size:     00000004
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+001338: fc00 0b00 0000          |  0000: invoke-custom {}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;}, targetMethodTest3, ()V, 1, 123456789, 123.456, 123456.789123} // CallSiteRef@000b
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+00133e: 0e00                    |  0003: return-void
+                                |  0004: code-address
+                                |
+                                |[1340] invokecustom.InvokeCustom.test4:()V
+001340: 0100                    |  registers_size: 0001
+001342: 0000                    |  ins_size:       0000
+001344: 0100                    |  outs_size:      0001
+001346: 0000                    |  tries_size:     0000
+001348: 0000 0000               |  debug_off:      00000000
+00134c: 0900 0000               |  insns_size:     00000009
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+001350: 2200 0700               |  0000: new-instance v0, invokecustom.InvokeCustom // type@0007
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+001354: 7010 0100 0000          |  0002: invoke-direct {v0}, invokecustom.InvokeCustom.<init>:()V // method@0001
+                                |  0005: code-address
+                                |  0005: code-address
+                                |  0005: local-snapshot
+                                |  0005: code-address
+00135a: fc10 0c00 0000          |  0005: invoke-custom {v0}, {invoke-static,method{invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}, targetMethodTest4, (Linvokecustom/InvokeCustom;)V, invoke-direct,method{invokecustom.Super.targetMethodTest4:()V}} // CallSiteRef@000c
+                                |  0008: code-address
+                                |  0008: code-address
+                                |  0008: local-snapshot
+001360: 0e00                    |  0008: return-void
+                                |  0009: code-address
+                                |
+001362: 0000                    |
+                                |[1364] invokecustom.InvokeCustom.test5:()V
+001364: 0400                    |  registers_size: 0004
+001366: 0000                    |  ins_size:       0000
+001368: 0300                    |  outs_size:      0003
+00136a: 0000                    |  tries_size:     0000
+00136c: 0000 0000               |  debug_off:      00000000
+001370: 2300 0000               |  insns_size:     00000023
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+001374: 1300 e803               |  0000: const/16 v0, #int 1000 // #03e8
+001378: 1301 65fc               |  0002: const/16 v1, #int -923 // #fc65
+00137c: 1302 4d00               |  0004: const/16 v2, #int 77 // #004d
+                                |  0006: code-address
+001380: fc30 0500 1002          |  0006: invoke-custom {v0, v1, v2}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, targetMethodTest5, (III)I} // CallSiteRef@0005
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+001386: 0a00                    |  0009: move-result v0
+                                |  000a: code-address
+                                |  000a: code-address
+                                |  000a: local-snapshot
+                                |  000a: code-address
+001388: 6201 0200               |  000a: sget-object v1, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+00138c: 2202 1000               |  000c: new-instance v2, java.lang.StringBuilder // type@0010
+                                |  000e: code-address
+                                |  000e: code-address
+                                |  000e: local-snapshot
+                                |  000e: code-address
+                                |  000e: code-address
+                                |  000e: local-snapshot
+                                |  000e: code-address
+001390: 7010 3100 0200          |  000e: invoke-direct {v2}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+001396: 1a03 9000               |  0011: const-string v3, "targetMethodTest5 returned: " // utf8@0090
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+00139a: 6e20 3700 3200          |  0013: invoke-virtual {v2, v3}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+0013a0: 0c02                    |  0016: move-result-object v2
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+0013a2: 6e20 3400 0200          |  0017: invoke-virtual {v2, v0}, java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder; // method@0034
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+0013a8: 0c00                    |  001a: move-result-object v0
+                                |  001b: code-address
+                                |  001b: code-address
+                                |  001b: local-snapshot
+                                |  001b: code-address
+0013aa: 6e10 3800 0000          |  001b: invoke-virtual {v0}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  001e: code-address
+                                |  001e: code-address
+                                |  001e: local-snapshot
+0013b0: 0c00                    |  001e: move-result-object v0
+                                |  001f: code-address
+                                |  001f: code-address
+                                |  001f: local-snapshot
+                                |  001f: code-address
+0013b2: 6e20 2a00 0100          |  001f: invoke-virtual {v1, v0}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0022: code-address
+                                |  0022: code-address
+                                |  0022: local-snapshot
+0013b8: 0e00                    |  0022: return-void
+                                |  0023: code-address
+                                |
+0013ba: 0000                    |
+                                |[13bc] invokecustom.InvokeCustom.test6:()V
+0013bc: 0600                    |  registers_size: 0006
+0013be: 0000                    |  ins_size:       0000
+0013c0: 0600                    |  outs_size:      0006
+0013c2: 0000                    |  tries_size:     0000
+0013c4: 0000 0000               |  debug_off:      00000000
+0013c8: 2c00 0000               |  insns_size:     0000002c
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+0013cc: 1800 7777 7777 7707 0000|  0000: const-wide v0, #long 8209686820727 // #0000077777777777
+0013d6: 1802 efee eeee eefe ffff|  0005: const-wide v2, #long -1172812402961 // #fffffeeeeeeeeeef
+0013e0: 1804 6666 6666 6606 0000|  000a: const-wide v4, #long 7036874417766 // #0000066666666666
+                                |  000f: code-address
+0013ea: fd06 0600 0000          |  000f: invoke-custom/range {v0..v5}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, targetMethodTest6, (JJJ)J} // CallSiteRef@0006
+                                |  0012: code-address
+                                |  0012: code-address
+                                |  0012: local-snapshot
+0013f0: 0b00                    |  0012: move-result-wide v0
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+0013f2: 6202 0200               |  0013: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+                                |  0015: code-address
+                                |  0015: local-snapshot
+                                |  0015: code-address
+0013f6: 2203 1000               |  0015: new-instance v3, java.lang.StringBuilder // type@0010
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+0013fa: 7010 3100 0300          |  0017: invoke-direct {v3}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+                                |  001a: code-address
+001400: 1a04 9300               |  001a: const-string v4, "targetMethodTest6 returned: " // utf8@0093
+                                |  001c: code-address
+                                |  001c: code-address
+                                |  001c: local-snapshot
+                                |  001c: code-address
+                                |  001c: code-address
+                                |  001c: local-snapshot
+                                |  001c: code-address
+001404: 6e20 3700 4300          |  001c: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  001f: code-address
+                                |  001f: code-address
+                                |  001f: local-snapshot
+00140a: 0c03                    |  001f: move-result-object v3
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+                                |  0020: code-address
+00140c: 6e30 3500 0301          |  0020: invoke-virtual {v3, v0, v1}, java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder; // method@0035
+                                |  0023: code-address
+                                |  0023: code-address
+                                |  0023: local-snapshot
+001412: 0c00                    |  0023: move-result-object v0
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+                                |  0024: code-address
+001414: 6e10 3800 0000          |  0024: invoke-virtual {v0}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+00141a: 0c00                    |  0027: move-result-object v0
+                                |  0028: code-address
+                                |  0028: code-address
+                                |  0028: local-snapshot
+                                |  0028: code-address
+00141c: 6e20 2a00 0200          |  0028: invoke-virtual {v2, v0}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  002b: code-address
+                                |  002b: code-address
+                                |  002b: local-snapshot
+001422: 0e00                    |  002b: return-void
+                                |  002c: code-address
+                                |
+                                |[1424] invokecustom.InvokeCustom.test7:()V
+001424: 0500                    |  registers_size: 0005
+001426: 0000                    |  ins_size:       0000
+001428: 0400                    |  outs_size:      0004
+00142a: 0000                    |  tries_size:     0000
+00142c: 0000 0000               |  debug_off:      00000000
+001430: 2800 0000               |  insns_size:     00000028
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+001434: 1400 0040 003f          |  0000: const v0, #float 0.50097656 // #3f004000
+00143a: 1401 0040 00bf          |  0003: const v1, #float -0.50097656 // #bf004000
+001440: 1802 0000 0000 0410 d0bf|  0006: const-wide v2, #double -0.2509775161743164 // #bfd0100400000000
+                                |  000b: code-address
+00144a: fc40 0700 1032          |  000b: invoke-custom {v0, v1, v2, v3}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, targetMethodTest7, (FFD)D} // CallSiteRef@0007
+                                |  000e: code-address
+                                |  000e: code-address
+                                |  000e: local-snapshot
+001450: 0b00                    |  000e: move-result-wide v0
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+001452: 6202 0200               |  000f: sget-object v2, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+                                |  0011: code-address
+                                |  0011: local-snapshot
+                                |  0011: code-address
+001456: 2203 1000               |  0011: new-instance v3, java.lang.StringBuilder // type@0010
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+00145a: 7010 3100 0300          |  0013: invoke-direct {v3}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+                                |  0016: code-address
+001460: 1a04 9300               |  0016: const-string v4, "targetMethodTest6 returned: " // utf8@0093
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+                                |  0018: code-address
+                                |  0018: code-address
+                                |  0018: local-snapshot
+                                |  0018: code-address
+001464: 6e20 3700 4300          |  0018: invoke-virtual {v3, v4}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  001b: code-address
+                                |  001b: code-address
+                                |  001b: local-snapshot
+00146a: 0c03                    |  001b: move-result-object v3
+                                |  001c: code-address
+                                |  001c: code-address
+                                |  001c: local-snapshot
+                                |  001c: code-address
+00146c: 6e30 3200 0301          |  001c: invoke-virtual {v3, v0, v1}, java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder; // method@0032
+                                |  001f: code-address
+                                |  001f: code-address
+                                |  001f: local-snapshot
+001472: 0c00                    |  001f: move-result-object v0
+                                |  0020: code-address
+                                |  0020: code-address
+                                |  0020: local-snapshot
+                                |  0020: code-address
+001474: 6e10 3800 0000          |  0020: invoke-virtual {v0}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0023: code-address
+                                |  0023: code-address
+                                |  0023: local-snapshot
+00147a: 0c00                    |  0023: move-result-object v0
+                                |  0024: code-address
+                                |  0024: code-address
+                                |  0024: local-snapshot
+                                |  0024: code-address
+00147c: 6e20 2a00 0200          |  0024: invoke-virtual {v2, v0}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0027: code-address
+                                |  0027: code-address
+                                |  0027: local-snapshot
+001482: 0e00                    |  0027: return-void
+                                |  0028: code-address
+                                |
+                                |[1484] invokecustom.InvokeCustom.test8:()V
+001484: 0100                    |  registers_size: 0001
+001486: 0000                    |  ins_size:       0000
+001488: 0100                    |  outs_size:      0001
+00148a: 0000                    |  tries_size:     0000
+00148c: 0000 0000               |  debug_off:      00000000
+001490: 1000 0000               |  insns_size:     00000010
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+001494: 1a00 1500               |  0000: const-string v0, "First invokedynamic invocation" // utf8@0015
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+001498: fc10 0800 0000          |  0002: invoke-custom {v0}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, targetMethodTest8, (Ljava/lang/String;)V} // CallSiteRef@0008
+                                |  0005: code-address
+                                |  0005: code-address
+                                |  0005: local-snapshot
+                                |  0005: code-address
+00149e: 1a00 4800               |  0005: const-string v0, "Second invokedynamic invocation" // utf8@0048
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+0014a2: fc10 0900 0000          |  0007: invoke-custom {v0}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, targetMethodTest8, (Ljava/lang/String;)V} // CallSiteRef@0009
+                                |  000a: code-address
+                                |  000a: code-address
+                                |  000a: local-snapshot
+                                |  000a: code-address
+0014a8: 1a00 1000               |  000a: const-string v0, "Dupe first invokedynamic invocation" // utf8@0010
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+                                |  000c: code-address
+0014ac: fc10 0a00 0000          |  000c: invoke-custom {v0}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, targetMethodTest8, (Ljava/lang/String;)V} // CallSiteRef@000a
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+0014b2: 0e00                    |  000f: return-void
+                                |  0010: code-address
+                                |
+                                |[14b4] invokecustom.InvokeCustom.test9:()V
+0014b4: 0000                    |  registers_size: 0000
+0014b6: 0000                    |  ins_size:       0000
+0014b8: 0000                    |  outs_size:      0000
+0014ba: 0000                    |  tries_size:     0000
+0014bc: 0000 0000               |  debug_off:      00000000
+0014c0: 0400 0000               |  insns_size:     00000004
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+0014c4: fc00 0d00 0000          |  0000: invoke-custom {}, {invoke-static,method{invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}, targetMethodTest9, ()V, static-get,field{invokecustom.InvokeCustom.staticFieldTest9:I}, static-put,field{invokecustom.InvokeCustom.staticFieldTest9:I}, instance-get,field{invokecustom.InvokeCustom.fieldTest9:F}, instance-put,field{invokecustom.InvokeCustom.fieldTest9:F}, invoke-instance,method{invokecustom.InvokeCustom.helperMethodTest9:()V}, invoke-constructor,method{invokecustom.InvokeCustom.<init>:(I)V}, invoke-interface,ifaceMethod{java.lang.Runnable.run:()V}, invoke-direct,method{invokecustom.InvokeCus
+                                |        tom.privateMethodTest9:()V}} // CallSiteRef@000d
+                                |  0003: code-address
+                                |  0003: code-address
+                                |  0003: local-snapshot
+0014ca: 0e00                    |  0003: return-void
+                                |  0004: code-address
+                                |
+                                |[14cc] invokecustom.InvokeCustom.helperMethodTest9:()V
+0014cc: 0400                    |  registers_size: 0004
+0014ce: 0100                    |  ins_size:       0001
+0014d0: 0200                    |  outs_size:      0002
+0014d2: 0000                    |  tries_size:     0000
+0014d4: 5d21 0000               |  debug_off:      0000215d
+0014d8: 1b00 0000               |  insns_size:     0000001b
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+0014dc: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+0014e0: 2201 1000               |  0002: new-instance v1, java.lang.StringBuilder // type@0010
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+0014e4: 7010 3100 0100          |  0004: invoke-direct {v1}, java.lang.StringBuilder.<init>:()V // method@0031
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+                                |  0007: code-address
+0014ea: 1a02 7400               |  0007: const-string v2, "helperMethodTest9 in " // utf8@0074
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+                                |  0009: code-address
+                                |  0009: local-snapshot
+                                |  0009: code-address
+0014ee: 6e20 3700 2100          |  0009: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@0037
+                                |  000c: code-address
+                                |  000c: code-address
+                                |  000c: local-snapshot
+0014f4: 0c01                    |  000c: move-result-object v1
+                                |  000d: code-address
+                                |  000d: code-address
+                                |  000d: local-snapshot
+                                |  000d: code-address
+0014f6: 1c02 0700               |  000d: const-class v2, invokecustom.InvokeCustom // type@0007
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+                                |  000f: code-address
+                                |  000f: local-snapshot
+                                |  000f: code-address
+0014fa: 6e20 3600 2100          |  000f: invoke-virtual {v1, v2}, java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@0036
+                                |  0012: code-address
+                                |  0012: code-address
+                                |  0012: local-snapshot
+001500: 0c01                    |  0012: move-result-object v1
+                                |  0013: code-address
+                                |  0013: code-address
+                                |  0013: local-snapshot
+                                |  0013: code-address
+001502: 6e10 3800 0100          |  0013: invoke-virtual {v1}, java.lang.StringBuilder.toString:()Ljava/lang/String; // method@0038
+                                |  0016: code-address
+                                |  0016: code-address
+                                |  0016: local-snapshot
+001508: 0c01                    |  0016: move-result-object v1
+                                |  0017: code-address
+                                |  0017: code-address
+                                |  0017: local-snapshot
+                                |  0017: code-address
+00150a: 6e20 2a00 1000          |  0017: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  001a: code-address
+                                |  001a: code-address
+                                |  001a: local-snapshot
+001510: 0e00                    |  001a: return-void
+                                |  001b: code-address
+                                |  debug info
+                                |    line_start: 129
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 129
+                                |    001a: advance pc
+                                |    001a: line 130
+                                |    end sequence
+                                |
+001512: 0000                    |
+                                |[1514] invokecustom.InvokeCustom.run:()V
+001514: 0300                    |  registers_size: 0003
+001516: 0100                    |  ins_size:       0001
+001518: 0200                    |  outs_size:      0002
+00151a: 0000                    |  tries_size:     0000
+00151c: 6621 0000               |  debug_off:      00002166
+001520: 0800 0000               |  insns_size:     00000008
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+001524: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+001528: 1a01 8400               |  0002: const-string v1, "run() for Test9" // utf8@0084
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+00152c: 6e20 2a00 1000          |  0004: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+001532: 0e00                    |  0007: return-void
+                                |  0008: code-address
+                                |  debug info
+                                |    line_start: 137
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 137
+                                |    0007: line 138
+                                |    end sequence
+                                |
+                                |[1534] invokecustom.InvokeCustom.targetMethodTest4:()V
+001534: 0300                    |  registers_size: 0003
+001536: 0100                    |  ins_size:       0001
+001538: 0200                    |  outs_size:      0002
+00153a: 0000                    |  tries_size:     0000
+00153c: 6d21 0000               |  debug_off:      0000216d
+001540: 0800 0000               |  insns_size:     00000008
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+                                |  0000: code-address
+                                |  0000: local-snapshot
+                                |  0000: code-address
+001544: 6200 0200               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0002
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+                                |  0002: code-address
+                                |  0002: local-snapshot
+                                |  0002: code-address
+001548: 1a01 8c00               |  0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // utf8@008c
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+                                |  0004: code-address
+                                |  0004: local-snapshot
+                                |  0004: code-address
+00154c: 6e20 2a00 1000          |  0004: invoke-virtual {v0, v1}, java.io.PrintStream.println:(Ljava/lang/String;)V // method@002a
+                                |  0007: code-address
+                                |  0007: code-address
+                                |  0007: local-snapshot
+001552: 0e00                    |  0007: return-void
+                                |  0008: code-address
+                                |  debug info
+                                |    line_start: 68
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 68
+                                |    0007: line 69
+                                |    end sequence
+                                |
+                                |[1554] annotations directory
+001554: 0000 0000               |  class_annotations_off: 00000000
+001558: 0000 0000               |  fields_size:           00000000
+00155c: 0600 0000               |  methods_size:          00000006
+001560: 0000 0000               |  parameters_size:       00000000
+                                |  methods:
+                                |    invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+001564: 0300 0000               |      method_idx:      00000003
+001568: 9809 0000               |      annotations_off: 00000998
+                                |    invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+00156c: 0400 0000               |      method_idx:      00000004
+001570: a009 0000               |      annotations_off: 000009a0
+                                |    invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+001574: 0500 0000               |      method_idx:      00000005
+001578: a009 0000               |      annotations_off: 000009a0
+                                |    invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+00157c: 0600 0000               |      method_idx:      00000006
+001580: 9809 0000               |      annotations_off: 00000998
+                                |    invokecustom.InvokeCustom.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+001584: 0700 0000               |      method_idx:      00000007
+001588: 9809 0000               |      annotations_off: 00000998
+                                |    invokecustom.InvokeCustom.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+00158c: 0800 0000               |      method_idx:      00000008
+001590: 9809 0000               |      annotations_off: 00000998
+                                |
+                                |[1594] type_list
+001594: 0100 0000               |  size: 00000001
+001598: 0e00                    |  000e // java.lang.Runnable
+                                |
+00159a: 0000                    |
+                                |[159c] type_list
+00159c: 0300 0000               |  size: 00000003
+0015a0: 0300                    |  0003 // float
+0015a2: 0300                    |  0003 // float
+0015a4: 0200                    |  0002 // double
+                                |
+0015a6: 0000                    |
+                                |[15a8] type_list
+0015a8: 0100 0000               |  size: 00000001
+0015ac: 0700                    |  0007 // invokecustom.InvokeCustom
+                                |
+0015ae: 0000                    |
+                                |[15b0] type_list
+0015b0: 0300 0000               |  size: 00000003
+0015b4: 0400                    |  0004 // int
+0015b6: 0400                    |  0004 // int
+0015b8: 0400                    |  0004 // int
+                                |
+0015ba: 0000                    |
+                                |[15bc] type_list
+0015bc: 0300 0000               |  size: 00000003
+0015c0: 0500                    |  0005 // long
+0015c2: 0500                    |  0005 // long
+0015c4: 0500                    |  0005 // long
+                                |
+0015c6: 0000                    |
+                                |[15c8] type_list
+0015c8: 0100 0000               |  size: 00000001
+0015cc: 0400                    |  0004 // int
+                                |
+0015ce: 0000                    |
+                                |[15d0] type_list
+0015d0: 0100 0000               |  size: 00000001
+0015d4: 0d00                    |  000d // java.lang.Object
+                                |
+0015d6: 0000                    |
+                                |[15d8] type_list
+0015d8: 0100 0000               |  size: 00000001
+0015dc: 2400                    |  0024 // java.lang.Object[]
+                                |
+0015de: 0000                    |
+                                |[15e0] type_list
+0015e0: 0100 0000               |  size: 00000001
+0015e4: 0f00                    |  000f // java.lang.String
+                                |
+0015e6: 0000                    |
+                                |[15e8] type_list
+0015e8: 0100 0000               |  size: 00000001
+0015ec: 0200                    |  0002 // double
+                                |
+0015ee: 0000                    |
+                                |[15f0] type_list
+0015f0: 0100 0000               |  size: 00000001
+0015f4: 0300                    |  0003 // float
+                                |
+0015f6: 0000                    |
+                                |[15f8] type_list
+0015f8: 0100 0000               |  size: 00000001
+0015fc: 0500                    |  0005 // long
+                                |
+0015fe: 0000                    |
+                                |[1600] type_list
+001600: 0300 0000               |  size: 00000003
+001604: 1700                    |  0017 // java.lang.invoke.MethodHandles$Lookup
+001606: 0f00                    |  000f // java.lang.String
+001608: 1900                    |  0019 // java.lang.invoke.MethodType
+                                |
+00160a: 0000                    |
+                                |[160c] type_list
+00160c: 0700 0000               |  size: 00000007
+001610: 1700                    |  0017 // java.lang.invoke.MethodHandles$Lookup
+001612: 0f00                    |  000f // java.lang.String
+001614: 1900                    |  0019 // java.lang.invoke.MethodType
+001616: 0400                    |  0004 // int
+001618: 0500                    |  0005 // long
+00161a: 0300                    |  0003 // float
+00161c: 0200                    |  0002 // double
+                                |
+00161e: 0000                    |
+                                |[1620] type_list
+001620: 0400 0000               |  size: 00000004
+001624: 1700                    |  0017 // java.lang.invoke.MethodHandles$Lookup
+001626: 0f00                    |  000f // java.lang.String
+001628: 1900                    |  0019 // java.lang.invoke.MethodType
+00162a: 1600                    |  0016 // java.lang.invoke.MethodHandle
+                                |
+                                |[162c] type_list
+00162c: 0b00 0000               |  size: 0000000b
+001630: 1700                    |  0017 // java.lang.invoke.MethodHandles$Lookup
+001632: 0f00                    |  000f // java.lang.String
+001634: 1900                    |  0019 // java.lang.invoke.MethodType
+001636: 1600                    |  0016 // java.lang.invoke.MethodHandle
+001638: 1600                    |  0016 // java.lang.invoke.MethodHandle
+00163a: 1600                    |  0016 // java.lang.invoke.MethodHandle
+00163c: 1600                    |  0016 // java.lang.invoke.MethodHandle
+00163e: 1600                    |  0016 // java.lang.invoke.MethodHandle
+001640: 1600                    |  0016 // java.lang.invoke.MethodHandle
+001642: 1600                    |  0016 // java.lang.invoke.MethodHandle
+001644: 1600                    |  0016 // java.lang.invoke.MethodHandle
+                                |
+001646: 0000                    |
+                                |[1648] type_list
+001648: 0600 0000               |  size: 00000006
+00164c: 1700                    |  0017 // java.lang.invoke.MethodHandles$Lookup
+00164e: 0f00                    |  000f // java.lang.String
+001650: 1900                    |  0019 // java.lang.invoke.MethodType
+001652: 1900                    |  0019 // java.lang.invoke.MethodType
+001654: 1600                    |  0016 // java.lang.invoke.MethodHandle
+001656: 1900                    |  0019 // java.lang.invoke.MethodType
+                                |
+                                |[1658] type_list
+001658: 0300 0000               |  size: 00000003
+00165c: 0a00                    |  000a // java.lang.Class
+00165e: 0f00                    |  000f // java.lang.String
+001660: 1900                    |  0019 // java.lang.invoke.MethodType
+                                |
+001662: 0000                    |
+                                |[1664] type_list
+001664: 0100 0000               |  size: 00000001
+001668: 1900                    |  0019 // java.lang.invoke.MethodType
+                                |
+00166a: 0000                    |
+                                |[166c] type_list
+00166c: 0100 0000               |  size: 00000001
+001670: 0900                    |  0009 // java.io.PrintStream
+                                |
+001672: 0000                    |
+                                |[1674] type_list
+001674: 0100 0000               |  size: 00000001
+001678: 1e00                    |  001e // java.util.function.Function
+                                |
+00167a: 0000                    |
+                                |[167c] type_list
+00167c: 0100 0000               |  size: 00000001
+001680: 1f00                    |  001f // java.util.function.Predicate
+                                |
+001682: 0000                    |
+                                |[1684] type_list
+001684: 0100 0000               |  size: 00000001
+001688: 0100                    |  0001 // char
+                                |
+00168a: 0000                    |
+                                |[168c] type_list
+00168c: 0200 0000               |  size: 00000002
+001690: 0700                    |  0007 // invokecustom.InvokeCustom
+001692: 0300                    |  0003 // float
+                                |
+                                |[1694] type_list
+001694: 0100 0000               |  size: 00000001
+001698: 1600                    |  0016 // java.lang.invoke.MethodHandle
+                                |
+00169a: 0000                    |
+                                |[169c] type_list
+00169c: 0200 0000               |  size: 00000002
+0016a0: 1600                    |  0016 // java.lang.invoke.MethodHandle
+0016a2: 1600                    |  0016 // java.lang.invoke.MethodHandle
+                                |
+                                |[16a4] type_list
+0016a4: 0100 0000               |  size: 00000001
+0016a8: 1d00                    |  001d // java.util.function.Consumer
+                                |
+0016aa: 0000                    |
+                                |[16ac] type_list
+0016ac: 0100 0000               |  size: 00000001
+0016b0: 2300                    |  0023 // boolean
+                                |
+0016b2: 0000                    |
+                                |[16b4] type_list
+0016b4: 0900 0000               |  size: 00000009
+0016b8: 2300                    |  0023 // boolean
+0016ba: 0000                    |  0000 // byte
+0016bc: 0100                    |  0001 // char
+0016be: 2100                    |  0021 // short
+0016c0: 0400                    |  0004 // int
+0016c2: 0300                    |  0003 // float
+0016c4: 0500                    |  0005 // long
+0016c6: 0200                    |  0002 // double
+0016c8: 0f00                    |  000f // java.lang.String
+                                |
+0016ca: 0000                    |
+                                |[16cc] type_list
+0016cc: 0100 0000               |  size: 00000001
+0016d0: 2500                    |  0025 // java.lang.String[]
+                                |
+                                |string_data:
+0016d2: 00                      |utf16_size: 00000000
+0016d3: 00                      |""
+                                |
+0016d4: 01                      |utf16_size: 00000001
+0016d5: 2000                    |" "
+                                |
+0016d7: 04                      |utf16_size: 00000004
+0016d8: 2021 3d20 00            |" != "
+                                |
+0016dd: 03                      |utf16_size: 00000003
+0016de: 202a 2000               |" * "
+                                |
+0016e2: 03                      |utf16_size: 00000003
+0016e3: 202b 2000               |" + "
+                                |
+0016e7: 03                      |utf16_size: 00000003
+0016e8: 203d 2000               |" = "
+                                |
+0016ec: 0a                      |utf16_size: 0000000a
+0016ed: 2065 7870 6563 7465 6420|" expected "
+0016f7: 00                      |
+                                |
+0016f8: 05                      |utf16_size: 00000005
+0016f9: 206e 6577 2000          |" new "
+                                |
+0016ff: 01                      |utf16_size: 00000001
+001700: 2900                    |")"
+                                |
+001702: 02                      |utf16_size: 00000002
+001703: 2c20 00                 |", "
+                                |
+001706: 08                      |utf16_size: 00000008
+001707: 3c63 6c69 6e69 743e 00  |"<clinit>"
+                                |
+001710: 06                      |utf16_size: 00000006
+001711: 3c69 6e69 743e 00       |"<init>"
+                                |
+001718: 01                      |utf16_size: 00000001
+001719: 4200                    |"B"
+                                |
+00171b: 01                      |utf16_size: 00000001
+00171c: 4300                    |"C"
+                                |
+00171e: 01                      |utf16_size: 00000001
+00171f: 4400                    |"D"
+                                |
+001721: 04                      |utf16_size: 00000004
+001722: 4446 4644 00            |"DFFD"
+                                |
+001727: 23                      |utf16_size: 00000023
+001728: 4475 7065 2066 6972 7374|"Dupe first invokedynamic invocation"
+001732: 2069 6e76 6f6b 6564 796e|
+00173c: 616d 6963 2069 6e76 6f63|
+001746: 6174 696f 6e00          |
+                                |
+00174c: 05                      |utf16_size: 00000005
+00174d: 4552 524f 5200          |"ERROR"
+                                |
+001753: 01                      |utf16_size: 00000001
+001754: 4600                    |"F"
+                                |
+001756: 02                      |utf16_size: 00000002
+001757: 464c 00                 |"FL"
+                                |
+00175a: 07                      |utf16_size: 00000007
+00175b: 4661 696c 6564 2000     |"Failed "
+                                |
+001763: 1e                      |utf16_size: 0000001e
+001764: 4669 7273 7420 696e 766f|"First invokedynamic invocation"
+00176e: 6b65 6479 6e61 6d69 6320|
+001778: 696e 766f 6361 7469 6f6e|
+001782: 00                      |
+                                |
+001783: 08                      |utf16_size: 00000008
+001784: 466f 7274 7954 776f 00  |"FortyTwo"
+                                |
+00178d: 0c                      |utf16_size: 0000000c
+00178e: 4865 6c6c 6f20 576f 726c|"Hello World!"
+001798: 6421 00                 |
+                                |
+00179b: 01                      |utf16_size: 00000001
+00179c: 4900                    |"I"
+                                |
+00179e: 04                      |utf16_size: 00000004
+00179f: 4949 4949 00            |"IIII"
+                                |
+0017a4: 14                      |utf16_size: 00000014
+0017a5: 496e 766f 6b65 4375 7374|"InvokeCustom.<init>("
+0017af: 6f6d 2e3c 696e 6974 3e28|
+0017b9: 00                      |
+                                |
+0017ba: 11                      |utf16_size: 00000011
+0017bb: 496e 766f 6b65 4375 7374|"InvokeCustom.java"
+0017c5: 6f6d 2e6a 6176 6100     |
+                                |
+0017cd: 21                      |utf16_size: 00000021
+0017ce: 496e 766f 6b65 4375 7374|"InvokeCustom.privateMethodTest9()"
+0017d8: 6f6d 2e70 7269 7661 7465|
+0017e2: 4d65 7468 6f64 5465 7374|
+0017ec: 3928 2900               |
+                                |
+0017f0: 01                      |utf16_size: 00000001
+0017f1: 4a00                    |"J"
+                                |
+0017f3: 04                      |utf16_size: 00000004
+0017f4: 4a4a 4a4a 00            |"JJJJ"
+                                |
+0017f9: 01                      |utf16_size: 00000001
+0017fa: 4c00                    |"L"
+                                |
+0017fc: 02                      |utf16_size: 00000002
+0017fd: 4c44 00                 |"LD"
+                                |
+001800: 02                      |utf16_size: 00000002
+001801: 4c46 00                 |"LF"
+                                |
+001804: 02                      |utf16_size: 00000002
+001805: 4c49 00                 |"LI"
+                                |
+001808: 02                      |utf16_size: 00000002
+001809: 4c4a 00                 |"LJ"
+                                |
+00180c: 02                      |utf16_size: 00000002
+00180d: 4c4c 00                 |"LL"
+                                |
+001810: 04                      |utf16_size: 00000004
+001811: 4c4c 4c4c 00            |"LLLL"
+                                |
+001816: 08                      |utf16_size: 00000008
+001817: 4c4c 4c4c 494a 4644 00  |"LLLLIJFD"
+                                |
+001820: 05                      |utf16_size: 00000005
+001821: 4c4c 4c4c 4c00          |"LLLLL"
+                                |
+001827: 07                      |utf16_size: 00000007
+001828: 4c4c 4c4c 4c4c 4c00     |"LLLLLLL"
+                                |
+001830: 0c                      |utf16_size: 0000000c
+001831: 4c4c 4c4c 4c4c 4c4c 4c4c|"LLLLLLLLLLLL"
+00183b: 4c4c 00                 |
+                                |
+00183e: 1a                      |utf16_size: 0000001a
+00183f: 4c64 616c 7669 6b2f 616e|"Ldalvik/annotation/Throws;"
+001849: 6e6f 7461 7469 6f6e 2f54|
+001853: 6872 6f77 733b 00       |
+                                |
+00185a: 1b                      |utf16_size: 0000001b
+00185b: 4c69 6e76 6f6b 6563 7573|"Linvokecustom/InvokeCustom;"
+001865: 746f 6d2f 496e 766f 6b65|
+00186f: 4375 7374 6f6d 3b00     |
+                                |
+001877: 14                      |utf16_size: 00000014
+001878: 4c69 6e76 6f6b 6563 7573|"Linvokecustom/Super;"
+001882: 746f 6d2f 5375 7065 723b|
+00188c: 00                      |
+                                |
+00188d: 15                      |utf16_size: 00000015
+00188e: 4c6a 6176 612f 696f 2f50|"Ljava/io/PrintStream;"
+001898: 7269 6e74 5374 7265 616d|
+0018a2: 3b00                    |
+                                |
+0018a4: 11                      |utf16_size: 00000011
+0018a5: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/Class;"
+0018af: 2f43 6c61 7373 3b00     |
+                                |
+0018b7: 22                      |utf16_size: 00000022
+0018b8: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/IllegalAccessException;"
+0018c2: 2f49 6c6c 6567 616c 4163|
+0018cc: 6365 7373 4578 6365 7074|
+0018d6: 696f 6e3b 00            |
+                                |
+0018db: 21                      |utf16_size: 00000021
+0018dc: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/NoSuchMethodException;"
+0018e6: 2f4e 6f53 7563 684d 6574|
+0018f0: 686f 6445 7863 6570 7469|
+0018fa: 6f6e 3b00               |
+                                |
+0018fe: 12                      |utf16_size: 00000012
+0018ff: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/Object;"
+001909: 2f4f 626a 6563 743b 00  |
+                                |
+001912: 14                      |utf16_size: 00000014
+001913: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/Runnable;"
+00191d: 2f52 756e 6e61 626c 653b|
+001927: 00                      |
+                                |
+001928: 12                      |utf16_size: 00000012
+001929: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/String;"
+001933: 2f53 7472 696e 673b 00  |
+                                |
+00193c: 19                      |utf16_size: 00000019
+00193d: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/StringBuilder;"
+001947: 2f53 7472 696e 6742 7569|
+001951: 6c64 6572 3b00          |
+                                |
+001957: 12                      |utf16_size: 00000012
+001958: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/System;"
+001962: 2f53 7973 7465 6d3b 00  |
+                                |
+00196b: 15                      |utf16_size: 00000015
+00196c: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/Throwable;"
+001976: 2f54 6872 6f77 6162 6c65|
+001980: 3b00                    |
+                                |
+001982: 1b                      |utf16_size: 0000001b
+001983: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/CallSite;"
+00198d: 2f69 6e76 6f6b 652f 4361|
+001997: 6c6c 5369 7465 3b00     |
+                                |
+00199f: 23                      |utf16_size: 00000023
+0019a0: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/ConstantCallSite;"
+0019aa: 2f69 6e76 6f6b 652f 436f|
+0019b4: 6e73 7461 6e74 4361 6c6c|
+0019be: 5369 7465 3b00          |
+                                |
+0019c4: 24                      |utf16_size: 00000024
+0019c5: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/LambdaMetafactory;"
+0019cf: 2f69 6e76 6f6b 652f 4c61|
+0019d9: 6d62 6461 4d65 7461 6661|
+0019e3: 6374 6f72 793b 00       |
+                                |
+0019ea: 1f                      |utf16_size: 0000001f
+0019eb: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/MethodHandle;"
+0019f5: 2f69 6e76 6f6b 652f 4d65|
+0019ff: 7468 6f64 4861 6e64 6c65|
+001a09: 3b00                    |
+                                |
+001a0b: 27                      |utf16_size: 00000027
+001a0c: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/MethodHandles$Lookup;"
+001a16: 2f69 6e76 6f6b 652f 4d65|
+001a20: 7468 6f64 4861 6e64 6c65|
+001a2a: 7324 4c6f 6f6b 7570 3b00|
+                                |
+001a34: 20                      |utf16_size: 00000020
+001a35: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/MethodHandles;"
+001a3f: 2f69 6e76 6f6b 652f 4d65|
+001a49: 7468 6f64 4861 6e64 6c65|
+001a53: 733b 00                 |
+                                |
+001a56: 1d                      |utf16_size: 0000001d
+001a57: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/MethodType;"
+001a61: 2f69 6e76 6f6b 652f 4d65|
+001a6b: 7468 6f64 5479 7065 3b00|
+                                |
+001a75: 12                      |utf16_size: 00000012
+001a76: 4c6a 6176 612f 7574 696c|"Ljava/util/Arrays;"
+001a80: 2f41 7272 6179 733b 00  |
+                                |
+001a89: 10                      |utf16_size: 00000010
+001a8a: 4c6a 6176 612f 7574 696c|"Ljava/util/List;"
+001a94: 2f4c 6973 743b 00       |
+                                |
+001a9b: 14                      |utf16_size: 00000014
+001a9c: 4c6a 6176 612f 7574 696c|"Ljava/util/Optional;"
+001aa6: 2f4f 7074 696f 6e61 6c3b|
+001ab0: 00                      |
+                                |
+001ab1: 1d                      |utf16_size: 0000001d
+001ab2: 4c6a 6176 612f 7574 696c|"Ljava/util/function/Consumer;"
+001abc: 2f66 756e 6374 696f 6e2f|
+001ac6: 436f 6e73 756d 6572 3b00|
+                                |
+001ad0: 1d                      |utf16_size: 0000001d
+001ad1: 4c6a 6176 612f 7574 696c|"Ljava/util/function/Function;"
+001adb: 2f66 756e 6374 696f 6e2f|
+001ae5: 4675 6e63 7469 6f6e 3b00|
+                                |
+001aef: 1e                      |utf16_size: 0000001e
+001af0: 4c6a 6176 612f 7574 696c|"Ljava/util/function/Predicate;"
+001afa: 2f66 756e 6374 696f 6e2f|
+001b04: 5072 6564 6963 6174 653b|
+001b0e: 00                      |
+                                |
+001b0f: 19                      |utf16_size: 00000019
+001b10: 4c6a 6176 612f 7574 696c|"Ljava/util/stream/Stream;"
+001b1a: 2f73 7472 6561 6d2f 5374|
+001b24: 7265 616d 3b00          |
+                                |
+001b2a: 02                      |utf16_size: 00000002
+001b2b: 4f4b 00                 |"OK"
+                                |
+001b2e: 03                      |utf16_size: 00000003
+001b2f: 4f6e 6500               |"One"
+                                |
+001b33: 01                      |utf16_size: 00000001
+001b34: 5300                    |"S"
+                                |
+001b36: 1f                      |utf16_size: 0000001f
+001b37: 5365 636f 6e64 2069 6e76|"Second invokedynamic invocation"
+001b41: 6f6b 6564 796e 616d 6963|
+001b4b: 2069 6e76 6f63 6174 696f|
+001b55: 6e00                    |
+                                |
+001b57: 06                      |utf16_size: 00000006
+001b58: 5374 7269 6e67 00       |"String"
+                                |
+001b5f: 05                      |utf16_size: 00000005
+001b60: 5468 7265 6500          |"Three"
+                                |
+001b66: 01                      |utf16_size: 00000001
+001b67: 5600                    |"V"
+                                |
+001b69: 02                      |utf16_size: 00000002
+001b6a: 5643 00                 |"VC"
+                                |
+001b6d: 02                      |utf16_size: 00000002
+001b6e: 5644 00                 |"VD"
+                                |
+001b71: 02                      |utf16_size: 00000002
+001b72: 5646 00                 |"VF"
+                                |
+001b75: 02                      |utf16_size: 00000002
+001b76: 5649 00                 |"VI"
+                                |
+001b79: 02                      |utf16_size: 00000002
+001b7a: 564a 00                 |"VJ"
+                                |
+001b7d: 02                      |utf16_size: 00000002
+001b7e: 564c 00                 |"VL"
+                                |
+001b81: 03                      |utf16_size: 00000003
+001b82: 564c 4600               |"VLF"
+                                |
+001b86: 03                      |utf16_size: 00000003
+001b87: 564c 4c00               |"VLL"
+                                |
+001b8b: 02                      |utf16_size: 00000002
+001b8c: 565a 00                 |"VZ"
+                                |
+001b8f: 0a                      |utf16_size: 0000000a
+001b90: 565a 4243 5349 464a 444c|"VZBCSIFJDL"
+001b9a: 00                      |
+                                |
+001b9b: 01                      |utf16_size: 00000001
+001b9c: 5a00                    |"Z"
+                                |
+001b9e: 02                      |utf16_size: 00000002
+001b9f: 5a4c 00                 |"ZL"
+                                |
+001ba2: 13                      |utf16_size: 00000013
+001ba3: 5b4c 6a61 7661 2f6c 616e|"[Ljava/lang/Object;"
+001bad: 672f 4f62 6a65 6374 3b00|
+                                |
+001bb7: 13                      |utf16_size: 00000013
+001bb8: 5b4c 6a61 7661 2f6c 616e|"[Ljava/lang/String;"
+001bc2: 672f 5374 7269 6e67 3b00|
+                                |
+001bcc: 01                      |utf16_size: 00000001
+001bcd: 5d00                    |"]"
+                                |
+001bcf: 06                      |utf16_size: 00000006
+001bd0: 6163 6365 7074 00       |"accept"
+                                |
+001bd7: 06                      |utf16_size: 00000006
+001bd8: 6170 7065 6e64 00       |"append"
+                                |
+001bdf: 05                      |utf16_size: 00000005
+001be0: 6170 706c 7900          |"apply"
+                                |
+001be6: 06                      |utf16_size: 00000006
+001be7: 6173 4c69 7374 00       |"asList"
+                                |
+001bee: 06                      |utf16_size: 00000006
+001bef: 6173 5479 7065 00       |"asType"
+                                |
+001bf6: 11                      |utf16_size: 00000011
+001bf7: 6273 6d43 7265 6174 6543|"bsmCreateCallSite"
+001c01: 616c 6c53 6974 6500     |
+                                |
+001c09: 13                      |utf16_size: 00000013
+001c0a: 6273 6d43 7265 6174 6543|"bsmCreateCallSite ["
+001c14: 616c 6c53 6974 6520 5b00|
+                                |
+001c1e: 0f                      |utf16_size: 0000000f
+001c1f: 6273 6d4c 6f6f 6b75 7053|"bsmLookupStatic"
+001c29: 7461 7469 6300          |
+                                |
+001c2f: 12                      |utf16_size: 00000012
+001c30: 6273 6d4c 6f6f 6b75 7053|"bsmLookupStatic []"
+001c3a: 7461 7469 6320 5b5d 00  |
+                                |
+001c43: 1c                      |utf16_size: 0000001c
+001c44: 6273 6d4c 6f6f 6b75 7053|"bsmLookupStaticWithExtraArgs"
+001c4e: 7461 7469 6357 6974 6845|
+001c58: 7874 7261 4172 6773 00  |
+                                |
+001c61: 1e                      |utf16_size: 0000001e
+001c62: 6273 6d4c 6f6f 6b75 7053|"bsmLookupStaticWithExtraArgs ["
+001c6c: 7461 7469 6357 6974 6845|
+001c76: 7874 7261 4172 6773 205b|
+001c80: 00                      |
+                                |
+001c81: 0e                      |utf16_size: 0000000e
+001c82: 6273 6d4c 6f6f 6b75 7054|"bsmLookupTest9"
+001c8c: 6573 7439 00            |
+                                |
+001c91: 10                      |utf16_size: 00000010
+001c92: 6273 6d4c 6f6f 6b75 7054|"bsmLookupTest9 ["
+001c9c: 6573 7439 205b 00       |
+                                |
+001ca3: 0f                      |utf16_size: 0000000f
+001ca4: 6368 6563 6b46 6965 6c64|"checkFieldTest9"
+001cae: 5465 7374 3900          |
+                                |
+001cb4: 15                      |utf16_size: 00000015
+001cb5: 6368 6563 6b46 6965 6c64|"checkFieldTest9: old "
+001cbf: 5465 7374 393a 206f 6c64|
+001cc9: 2000                    |
+                                |
+001ccb: 15                      |utf16_size: 00000015
+001ccc: 6368 6563 6b53 7461 7469|"checkStaticFieldTest9"
+001cd6: 6346 6965 6c64 5465 7374|
+001ce0: 3900                    |
+                                |
+001ce2: 1b                      |utf16_size: 0000001b
+001ce3: 6368 6563 6b53 7461 7469|"checkStaticFieldTest9: old "
+001ced: 6346 6965 6c64 5465 7374|
+001cf7: 393a 206f 6c64 2000     |
+                                |
+001cff: 06                      |utf16_size: 00000006
+001d00: 6571 7561 6c73 00       |"equals"
+                                |
+001d07: 0a                      |utf16_size: 0000000a
+001d08: 6669 656c 6454 6573 7439|"fieldTest9"
+001d12: 00                      |
+                                |
+001d13: 06                      |utf16_size: 00000006
+001d14: 6669 6c74 6572 00       |"filter"
+                                |
+001d1b: 07                      |utf16_size: 00000007
+001d1c: 6669 6e64 416e 7900     |"findAny"
+                                |
+001d24: 0a                      |utf16_size: 0000000a
+001d25: 6669 6e64 5374 6174 6963|"findStatic"
+001d2f: 00                      |
+                                |
+001d30: 07                      |utf16_size: 00000007
+001d31: 666f 7245 6163 6800     |"forEach"
+                                |
+001d39: 08                      |utf16_size: 00000008
+001d3a: 6765 7443 6c61 7373 00  |"getClass"
+                                |
+001d43: 11                      |utf16_size: 00000011
+001d44: 6865 6c70 6572 4d65 7468|"helperMethodTest9"
+001d4e: 6f64 5465 7374 3900     |
+                                |
+001d56: 15                      |utf16_size: 00000015
+001d57: 6865 6c70 6572 4d65 7468|"helperMethodTest9 in "
+001d61: 6f64 5465 7374 3920 696e|
+001d6b: 2000                    |
+                                |
+001d6d: 06                      |utf16_size: 00000006
+001d6e: 696e 766f 6b65 00       |"invoke"
+                                |
+001d75: 0b                      |utf16_size: 0000000b
+001d76: 696e 766f 6b65 4578 6163|"invokeExact"
+001d80: 7400                    |
+                                |
+001d82: 13                      |utf16_size: 00000013
+001d83: 6c61 6d62 6461 246c 616d|"lambda$lambdaTest$0"
+001d8d: 6264 6154 6573 7424 3000|
+                                |
+001d97: 0a                      |utf16_size: 0000000a
+001d98: 6c61 6d62 6461 5465 7374|"lambdaTest"
+001da2: 00                      |
+                                |
+001da3: 06                      |utf16_size: 00000006
+001da4: 6c6f 6f6b 7570 00       |"lookup"
+                                |
+001dab: 0b                      |utf16_size: 0000000b
+001dac: 6c6f 6f6b 7570 436c 6173|"lookupClass"
+001db6: 7300                    |
+                                |
+001db8: 04                      |utf16_size: 00000004
+001db9: 6d61 696e 00            |"main"
+                                |
+001dbe: 03                      |utf16_size: 00000003
+001dbf: 6d61 7000               |"map"
+                                |
+001dc3: 0b                      |utf16_size: 0000000b
+001dc4: 6d65 7461 6661 6374 6f72|"metafactory"
+001dce: 7900                    |
+                                |
+001dd0: 06                      |utf16_size: 00000006
+001dd1: 6f72 456c 7365 00       |"orElse"
+                                |
+001dd8: 03                      |utf16_size: 00000003
+001dd9: 6f75 7400               |"out"
+                                |
+001ddd: 05                      |utf16_size: 00000005
+001dde: 7072 696e 7400          |"print"
+                                |
+001de4: 07                      |utf16_size: 00000007
+001de5: 7072 696e 746c 6e00     |"println"
+                                |
+001ded: 12                      |utf16_size: 00000012
+001dee: 7072 6976 6174 654d 6574|"privateMethodTest9"
+001df8: 686f 6454 6573 7439 00  |
+                                |
+001e01: 03                      |utf16_size: 00000003
+001e02: 7275 6e00               |"run"
+                                |
+001e06: 0f                      |utf16_size: 0000000f
+001e07: 7275 6e28 2920 666f 7220|"run() for Test9"
+001e11: 5465 7374 3900          |
+                                |
+001e17: 10                      |utf16_size: 00000010
+001e18: 7374 6174 6963 4669 656c|"staticFieldTest9"
+001e22: 6454 6573 7439 00       |
+                                |
+001e29: 06                      |utf16_size: 00000006
+001e2a: 7374 7265 616d 00       |"stream"
+                                |
+001e31: 11                      |utf16_size: 00000011
+001e32: 7461 7267 6574 4d65 7468|"targetMethodTest1"
+001e3c: 6f64 5465 7374 3100     |
+                                |
+001e44: 11                      |utf16_size: 00000011
+001e45: 7461 7267 6574 4d65 7468|"targetMethodTest2"
+001e4f: 6f64 5465 7374 3200     |
+                                |
+001e57: 11                      |utf16_size: 00000011
+001e58: 7461 7267 6574 4d65 7468|"targetMethodTest3"
+001e62: 6f64 5465 7374 3300     |
+                                |
+001e6a: 23                      |utf16_size: 00000023
+001e6b: 7461 7267 6574 4d65 7468|"targetMethodTest3 from InvokeCustom"
+001e75: 6f64 5465 7374 3320 6672|
+001e7f: 6f6d 2049 6e76 6f6b 6543|
+001e89: 7573 746f 6d00          |
+                                |
+001e8f: 11                      |utf16_size: 00000011
+001e90: 7461 7267 6574 4d65 7468|"targetMethodTest4"
+001e9a: 6f64 5465 7374 3400     |
+                                |
+001ea2: 2b                      |utf16_size: 0000002b
+001ea3: 7461 7267 6574 4d65 7468|"targetMethodTest4 from InvokeCustom (oops!)"
+001ead: 6f64 5465 7374 3420 6672|
+001eb7: 6f6d 2049 6e76 6f6b 6543|
+001ec1: 7573 746f 6d20 286f 6f70|
+001ecb: 7321 2900               |
+                                |
+001ecf: 1c                      |utf16_size: 0000001c
+001ed0: 7461 7267 6574 4d65 7468|"targetMethodTest4 from Super"
+001eda: 6f64 5465 7374 3420 6672|
+001ee4: 6f6d 2053 7570 6572 00  |
+                                |
+001eed: 11                      |utf16_size: 00000011
+001eee: 7461 7267 6574 4d65 7468|"targetMethodTest5"
+001ef8: 6f64 5465 7374 3500     |
+                                |
+001f00: 12                      |utf16_size: 00000012
+001f01: 7461 7267 6574 4d65 7468|"targetMethodTest5 "
+001f0b: 6f64 5465 7374 3520 00  |
+                                |
+001f14: 1c                      |utf16_size: 0000001c
+001f15: 7461 7267 6574 4d65 7468|"targetMethodTest5 returned: "
+001f1f: 6f64 5465 7374 3520 7265|
+001f29: 7475 726e 6564 3a20 00  |
+                                |
+001f32: 11                      |utf16_size: 00000011
+001f33: 7461 7267 6574 4d65 7468|"targetMethodTest6"
+001f3d: 6f64 5465 7374 3600     |
+                                |
+001f45: 12                      |utf16_size: 00000012
+001f46: 7461 7267 6574 4d65 7468|"targetMethodTest6 "
+001f50: 6f64 5465 7374 3620 00  |
+                                |
+001f59: 1c                      |utf16_size: 0000001c
+001f5a: 7461 7267 6574 4d65 7468|"targetMethodTest6 returned: "
+001f64: 6f64 5465 7374 3620 7265|
+001f6e: 7475 726e 6564 3a20 00  |
+                                |
+001f77: 11                      |utf16_size: 00000011
+001f78: 7461 7267 6574 4d65 7468|"targetMethodTest7"
+001f82: 6f64 5465 7374 3700     |
+                                |
+001f8a: 12                      |utf16_size: 00000012
+001f8b: 7461 7267 6574 4d65 7468|"targetMethodTest7 "
+001f95: 6f64 5465 7374 3720 00  |
+                                |
+001f9e: 11                      |utf16_size: 00000011
+001f9f: 7461 7267 6574 4d65 7468|"targetMethodTest8"
+001fa9: 6f64 5465 7374 3800     |
+                                |
+001fb1: 12                      |utf16_size: 00000012
+001fb2: 7461 7267 6574 4d65 7468|"targetMethodTest8 "
+001fbc: 6f64 5465 7374 3820 00  |
+                                |
+001fc5: 11                      |utf16_size: 00000011
+001fc6: 7461 7267 6574 4d65 7468|"targetMethodTest9"
+001fd0: 6f64 5465 7374 3900     |
+                                |
+001fd8: 13                      |utf16_size: 00000013
+001fd9: 7461 7267 6574 4d65 7468|"targetMethodTest9()"
+001fe3: 6f64 5465 7374 3928 2900|
+                                |
+001fed: 04                      |utf16_size: 00000004
+001fee: 7465 7374 00            |"test"
+                                |
+001ff3: 05                      |utf16_size: 00000005
+001ff4: 7465 7374 3100          |"test1"
+                                |
+001ffa: 05                      |utf16_size: 00000005
+001ffb: 7465 7374 3200          |"test2"
+                                |
+002001: 05                      |utf16_size: 00000005
+002002: 7465 7374 3300          |"test3"
+                                |
+002008: 05                      |utf16_size: 00000005
+002009: 7465 7374 3400          |"test4"
+                                |
+00200f: 05                      |utf16_size: 00000005
+002010: 7465 7374 3500          |"test5"
+                                |
+002016: 05                      |utf16_size: 00000005
+002017: 7465 7374 3600          |"test6"
+                                |
+00201d: 05                      |utf16_size: 00000005
+00201e: 7465 7374 3700          |"test7"
+                                |
+002024: 05                      |utf16_size: 00000005
+002025: 7465 7374 3800          |"test8"
+                                |
+00202b: 05                      |utf16_size: 00000005
+00202c: 7465 7374 3900          |"test9"
+                                |
+002032: 08                      |utf16_size: 00000008
+002033: 746f 5374 7269 6e67 00  |"toString"
+                                |
+00203c: 04                      |utf16_size: 00000004
+00203d: 7472 696d 00            |"trim"
+                                |
+002042: 05                      |utf16_size: 00000005
+002043: 7661 6c75 6500          |"value"
+                                |
+                                |byte_data:
+                                |[2049] debug info
+002049: 1d                      |line_start: 29
+00204a: 00                      |parameters_size: 0000
+00204b: 07                      |0000: prologue end
+00204c: 0e                      |0000: line 29
+00204d: 00                      |end sequence
+                                |
+                                |[204e] debug info
+00204e: 1f                      |line_start: 31
+00204f: 00                      |parameters_size: 0000
+002050: 07                      |0000: prologue end
+002051: 0e                      |0000: line 31
+002052: 78                      |0007: line 32
+002053: 00                      |end sequence
+                                |
+                                |[2054] debug info
+002054: 66                      |line_start: 102
+002055: 00                      |parameters_size: 0000
+002056: 07                      |0000: prologue end
+002057: 0e                      |0000: line 102
+002058: 00                      |end sequence
+                                |
+                                |[2059] debug info
+002059: 27                      |line_start: 39
+00205a: 00                      |parameters_size: 0000
+00205b: 07                      |0000: prologue end
+00205c: 0e                      |0000: line 39
+00205d: 02cc 00                 |line = 115
+002060: 3b                      |0003: line 115
+002061: 02b4 7f                 |line = 39
+002064: 3b                      |0006: line 39
+002065: 00                      |end sequence
+                                |
+                                |[2066] debug info
+002066: 28                      |line_start: 40
+002067: 01                      |parameters_size: 0001
+002068: 00                      |parameter <unnamed> v4
+002069: 07                      |0000: prologue end
+00206a: 0e                      |0000: line 40
+00206b: 02cb 00                 |line = 115
+00206e: 3b                      |0003: line 115
+00206f: 02b6 7f                 |line = 41
+002072: 3b                      |0006: line 41
+002073: 011e                    |0024: advance pc
+002075: 0f                      |0024: line 42
+002076: 00                      |end sequence
+                                |
+                                |[2077] debug info
+002077: a001                    |line_start: 160
+002079: 04                      |parameters_size: 0004
+00207a: 00                      |parameter <unnamed> v3
+00207b: 00                      |parameter <unnamed> v4
+00207c: 00                      |parameter <unnamed> v5
+00207d: 00                      |parameter <unnamed> v6
+00207e: 07                      |0000: prologue end
+00207f: 0e                      |0000: line 160
+002080: 011e                    |001e: advance pc
+002082: 0f                      |001e: line 161
+002083: 00                      |end sequence
+                                |
+                                |[2084] debug info
+002084: 8e01                    |line_start: 142
+002086: 03                      |parameters_size: 0003
+002087: 00                      |parameter <unnamed> v2
+002088: 00                      |parameter <unnamed> v3
+002089: 00                      |parameter <unnamed> v4
+00208a: 07                      |0000: prologue end
+00208b: 0e                      |0000: line 142
+00208c: 78                      |0007: line 143
+00208d: 4b                      |000b: line 144
+00208e: 87                      |0013: line 145
+00208f: 00                      |end sequence
+                                |
+                                |[2090] debug info
+002090: 9701                    |line_start: 151
+002092: 07                      |parameters_size: 0007
+002093: 00                      |parameter <unnamed> v3
+002094: 00                      |parameter <unnamed> v4
+002095: 00                      |parameter <unnamed> v5
+002096: 00                      |parameter <unnamed> v6
+002097: 00                      |parameter <unnamed> v7
+002098: 00                      |parameter <unnamed> v9
+002099: 00                      |parameter <unnamed> v10
+00209a: 07                      |0000: prologue end
+00209b: 0e                      |0000: line 151
+00209c: 013c                    |003c: advance pc
+00209e: 0f                      |003c: line 152
+00209f: 4b                      |0040: line 153
+0020a0: 87                      |0048: line 154
+0020a1: 00                      |end sequence
+                                |
+                                |[20a2] debug info
+0020a2: ae01                    |line_start: 174
+0020a4: 0b                      |parameters_size: 000b
+0020a5: 00                      |parameter <unnamed> v3
+0020a6: 00                      |parameter <unnamed> v4
+0020a7: 00                      |parameter <unnamed> v5
+0020a8: 00                      |parameter <unnamed> v6
+0020a9: 00                      |parameter <unnamed> v7
+0020aa: 00                      |parameter <unnamed> v8
+0020ab: 00                      |parameter <unnamed> v9
+0020ac: 00                      |parameter <unnamed> v10
+0020ad: 00                      |parameter <unnamed> v11
+0020ae: 00                      |parameter <unnamed> v12
+0020af: 00                      |parameter <unnamed> v13
+0020b0: 07                      |0000: prologue end
+0020b1: 0e                      |0000: line 174
+0020b2: 013c                    |003c: advance pc
+0020b4: 10                      |003c: line 176
+0020b5: 011c                    |0058: advance pc
+0020b7: 11                      |0058: line 179
+0020b8: 3c                      |005b: line 180
+0020b9: 5a                      |0060: line 181
+0020ba: 3e                      |0063: line 184
+0020bb: 4c                      |0067: line 186
+0020bc: 69                      |006d: line 187
+0020bd: 4b                      |0071: line 188
+0020be: 4c                      |0075: line 190
+0020bf: 4b                      |0079: line 191
+0020c0: 87                      |0081: line 192
+0020c1: 00                      |end sequence
+                                |
+                                |[20c2] debug info
+0020c2: 78                      |line_start: 120
+0020c3: 02                      |parameters_size: 0002
+0020c4: 00                      |parameter <unnamed> v7
+0020c5: 00                      |parameter <unnamed> v8
+0020c6: 07                      |0000: prologue end
+0020c7: 3b                      |0003: line 120
+0020c8: 5a                      |0008: line 121
+0020c9: 4b                      |000c: line 122
+0020ca: 5a                      |0011: line 123
+0020cb: 0132                    |0043: advance pc
+0020cd: 10                      |0043: line 125
+0020ce: b4                      |004e: line 126
+0020cf: 1c                      |004f: line 125
+0020d0: 00                      |end sequence
+                                |
+                                |[20d1] debug info
+0020d1: 6b                      |line_start: 107
+0020d2: 02                      |parameters_size: 0002
+0020d3: 00                      |parameter <unnamed> v6
+0020d4: 00                      |parameter <unnamed> v7
+0020d5: 07                      |0000: prologue end
+0020d6: 3b                      |0003: line 107
+0020d7: 5a                      |0008: line 108
+0020d8: 4b                      |000c: line 109
+0020d9: 5a                      |0011: line 110
+0020da: 0132                    |0043: advance pc
+0020dc: 10                      |0043: line 112
+0020dd: 96                      |004c: line 113
+0020de: 1c                      |004d: line 112
+0020df: 00                      |end sequence
+                                |
+                                |[20e0] debug info
+0020e0: c501                    |line_start: 197
+0020e2: 01                      |parameters_size: 0001
+0020e3: 00                      |parameter <unnamed> v2
+0020e4: 07                      |0000: prologue end
+0020e5: 0e                      |0000: line 197
+0020e6: 00                      |end sequence
+                                |
+                                |[20e7] debug info
+0020e7: c401                    |line_start: 196
+0020e9: 00                      |parameters_size: 0000
+0020ea: 07                      |0000: prologue end
+0020eb: 0e                      |0000: line 196
+0020ec: 0116                    |0016: advance pc
+0020ee: 0f                      |0016: line 197
+0020ef: ff                      |0026: line 198
+0020f0: ff                      |0036: line 199
+0020f1: ff                      |0046: line 200
+0020f2: 00                      |end sequence
+                                |
+                                |[20f3] debug info
+0020f3: a501                    |line_start: 165
+0020f5: 00                      |parameters_size: 0000
+0020f6: 07                      |0000: prologue end
+0020f7: 0e                      |0000: line 165
+0020f8: 78                      |0007: line 166
+0020f9: 00                      |end sequence
+                                |
+                                |[20fa] debug info
+0020fa: 2d                      |line_start: 45
+0020fb: 00                      |parameters_size: 0000
+0020fc: 07                      |0000: prologue end
+0020fd: 0e                      |0000: line 45
+0020fe: 78                      |0007: line 46
+0020ff: 00                      |end sequence
+                                |
+                                |[2100] debug info
+002100: 32                      |line_start: 50
+002101: 09                      |parameters_size: 0009
+002102: 00                      |parameter <unnamed> v2
+002103: 00                      |parameter <unnamed> v3
+002104: 00                      |parameter <unnamed> v4
+002105: 00                      |parameter <unnamed> v5
+002106: 00                      |parameter <unnamed> v6
+002107: 00                      |parameter <unnamed> v7
+002108: 00                      |parameter <unnamed> v8
+002109: 00                      |parameter <unnamed> v10
+00210a: 00                      |parameter <unnamed> v12
+00210b: 07                      |0000: prologue end
+00210c: 0e                      |0000: line 50
+00210d: 5a                      |0005: line 51
+00210e: 5a                      |000a: line 52
+00210f: 5a                      |000f: line 53
+002110: 5a                      |0014: line 54
+002111: 5a                      |0019: line 55
+002112: 5a                      |001e: line 56
+002113: 5a                      |0023: line 57
+002114: 5a                      |0028: line 58
+002115: 5a                      |002d: line 59
+002116: 00                      |end sequence
+                                |
+                                |[2117] debug info
+002117: 3e                      |line_start: 62
+002118: 00                      |parameters_size: 0000
+002119: 07                      |0000: prologue end
+00211a: 0e                      |0000: line 62
+00211b: 78                      |0007: line 63
+00211c: 00                      |end sequence
+                                |
+                                |[211d] debug info
+00211d: 48                      |line_start: 72
+00211e: 03                      |parameters_size: 0003
+00211f: 00                      |parameter <unnamed> v4
+002120: 00                      |parameter <unnamed> v5
+002121: 00                      |parameter <unnamed> v6
+002122: 07                      |0000: prologue end
+002123: 0e                      |0000: line 72
+002124: 2d                      |0002: line 73
+002125: 012c                    |002e: advance pc
+002127: 0f                      |002e: line 74
+002128: 2d                      |0030: line 75
+002129: 0122                    |0052: advance pc
+00212b: 10                      |0052: line 77
+00212c: 00                      |end sequence
+                                |
+                                |[212d] debug info
+00212d: 51                      |line_start: 81
+00212e: 03                      |parameters_size: 0003
+00212f: 00                      |parameter <unnamed> v6
+002130: 00                      |parameter <unnamed> v8
+002131: 00                      |parameter <unnamed> v10
+002132: 07                      |0000: prologue end
+002133: 0e                      |0000: line 81
+002134: 2d                      |0002: line 82
+002135: 012c                    |002e: advance pc
+002137: 0f                      |002e: line 83
+002138: 4b                      |0032: line 84
+002139: 0122                    |0054: advance pc
+00213b: 10                      |0054: line 86
+00213c: 00                      |end sequence
+                                |
+                                |[213d] debug info
+00213d: 5a                      |line_start: 90
+00213e: 03                      |parameters_size: 0003
+00213f: 00                      |parameter <unnamed> v6
+002140: 00                      |parameter <unnamed> v7
+002141: 00                      |parameter <unnamed> v8
+002142: 07                      |0000: prologue end
+002143: 0e                      |0000: line 90
+002144: 3c                      |0003: line 91
+002145: 012c                    |002f: advance pc
+002147: 0f                      |002f: line 92
+002148: 4b                      |0033: line 93
+002149: 0122                    |0055: advance pc
+00214b: 10                      |0055: line 95
+00214c: 00                      |end sequence
+                                |
+                                |[214d] debug info
+00214d: 63                      |line_start: 99
+00214e: 01                      |parameters_size: 0001
+00214f: 00                      |parameter <unnamed> v3
+002150: 07                      |0000: prologue end
+002151: 0e                      |0000: line 99
+002152: 0118                    |0018: advance pc
+002154: 0f                      |0018: line 100
+002155: 00                      |end sequence
+                                |
+                                |[2156] debug info
+002156: 8501                    |line_start: 133
+002158: 00                      |parameters_size: 0000
+002159: 07                      |0000: prologue end
+00215a: 0e                      |0000: line 133
+00215b: 78                      |0007: line 134
+00215c: 00                      |end sequence
+                                |
+                                |[215d] debug info
+00215d: 8101                    |line_start: 129
+00215f: 00                      |parameters_size: 0000
+002160: 07                      |0000: prologue end
+002161: 0e                      |0000: line 129
+002162: 011a                    |001a: advance pc
+002164: 0f                      |001a: line 130
+002165: 00                      |end sequence
+                                |
+                                |[2166] debug info
+002166: 8901                    |line_start: 137
+002168: 00                      |parameters_size: 0000
+002169: 07                      |0000: prologue end
+00216a: 0e                      |0000: line 137
+00216b: 78                      |0007: line 138
+00216c: 00                      |end sequence
+                                |
+                                |[216d] debug info
+00216d: 44                      |line_start: 68
+00216e: 00                      |parameters_size: 0000
+00216f: 07                      |0000: prologue end
+002170: 0e                      |0000: line 68
+002171: 78                      |0007: line 69
+002172: 00                      |end sequence
+                                |
+                                |[2173] annotation
+002173: 02                      |  visibility: VISBILITY_SYSTEM
+002174: 06                      |  type_idx: 00000006 // dalvik.annotation.Throws
+002175: 01                      |  size: 00000001
+                                |  elements[0]:
+002176: a601                    |    name_idx: 000000a6 // value
+002178: 1c01 1812               |    value: array {java.lang.Throwable}
+                                |
+                                |[217c] annotation
+00217c: 02                      |  visibility: VISBILITY_SYSTEM
+00217d: 06                      |  type_idx: 00000006 // dalvik.annotation.Throws
+00217e: 01                      |  size: 00000001
+                                |  elements[0]:
+00217f: a601                    |    name_idx: 000000a6 // value
+002181: 1c02 180c 180b          |    value: array {java.lang.NoSuchMethodException, java.lang.IllegalAccessException}
+                                |
+                                |[2187] call site
+002187: 06                      |  size: 00000006
+002188: 1609                    |  [0] method handle invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+00218a: 179a                    |  [1] utf8 test
+00218c: 151d                    |  [2] proto ()Ljava/util/function/Predicate;
+00218e: 1531                    |  [3] proto (Ljava/lang/Object;)Z
+002190: 1608                    |  [4] method handle invoke-static,method{invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z}
+002192: 1532                    |  [5] proto (Ljava/lang/String;)Z
+                                |
+                                |[2194] call site
+002194: 06                      |  size: 00000006
+002195: 1609                    |  [0] method handle invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+002197: 175d                    |  [1] utf8 apply
+002199: 151c                    |  [2] proto ()Ljava/util/function/Function;
+00219b: 1507                    |  [3] proto (Ljava/lang/Object;)Ljava/lang/Object;
+00219d: 160c                    |  [4] method handle invoke-instance,method{java.lang.String.trim:()Ljava/lang/String;}
+00219f: 150a                    |  [5] proto (Ljava/lang/String;)Ljava/lang/String;
+                                |
+                                |[21a1] call site
+0021a1: 06                      |  size: 00000006
+0021a2: 1609                    |  [0] method handle invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+0021a4: 175b                    |  [1] utf8 accept
+0021a6: 151b                    |  [2] proto (Ljava/io/PrintStream;)Ljava/util/function/Consumer;
+0021a8: 1529                    |  [3] proto (Ljava/lang/Object;)V
+0021aa: 160b                    |  [4] method handle invoke-instance,method{java.io.PrintStream.println:(Ljava/lang/String;)V}
+0021ac: 152a                    |  [5] proto (Ljava/lang/String;)V
+                                |
+                                |[21ae] call site
+0021ae: 03                      |  size: 00000003
+0021af: 1605                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+0021b1: 1787                    |  [1] utf8 targetMethodTest1
+0021b3: 1521                    |  [2] proto ()V
+                                |
+                                |[21b5] call site
+0021b5: 03                      |  size: 00000003
+0021b6: 1605                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+0021b8: 1788                    |  [1] utf8 targetMethodTest2
+0021ba: 152f                    |  [2] proto (ZBCSIFJDLjava/lang/String;)V
+                                |
+                                |[21bc] call site
+0021bc: 03                      |  size: 00000003
+0021bd: 1605                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+0021bf: 178e                    |  [1] utf8 targetMethodTest5
+0021c1: 1503                    |  [2] proto (III)I
+                                |
+                                |[21c3] call site
+0021c3: 03                      |  size: 00000003
+0021c4: 1605                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+0021c6: 1791                    |  [1] utf8 targetMethodTest6
+0021c8: 1504                    |  [2] proto (JJJ)J
+                                |
+                                |[21ca] call site
+0021ca: 03                      |  size: 00000003
+0021cb: 1605                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+0021cd: 1794                    |  [1] utf8 targetMethodTest7
+0021cf: 1500                    |  [2] proto (FFD)D
+                                |
+                                |[21d1] call site
+0021d1: 03                      |  size: 00000003
+0021d2: 1605                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+0021d4: 1796                    |  [1] utf8 targetMethodTest8
+0021d6: 152a                    |  [2] proto (Ljava/lang/String;)V
+                                |
+                                |[21d8] call site
+0021d8: 07                      |  size: 00000007
+0021d9: 1606                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;}
+0021db: 1789                    |  [1] utf8 targetMethodTest3
+0021dd: 1521                    |  [2] proto ()V
+0021df: 0401                    |  [3] int 1
+0021e1: 6615 cd5b 07            |  [4] long 123456789
+0021e6: 7079 e9f6 42            |  [5] float 123.456
+0021eb: f158 703f a00c 24fe 40  |  [6] double 123456.789123
+                                |
+                                |[21f4] call site
+0021f4: 04                      |  size: 00000004
+0021f5: 1604                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}
+0021f7: 178b                    |  [1] utf8 targetMethodTest4
+0021f9: 1527                    |  [2] proto (Linvokecustom/InvokeCustom;)V
+0021fb: 160f                    |  [3] method handle invoke-direct,method{invokecustom.Super.targetMethodTest4:()V}
+                                |
+                                |[21fd] call site
+0021fd: 0b                      |  size: 0000000b
+0021fe: 1607                    |  [0] method handle invoke-static,method{invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;}
+002200: 1798                    |  [1] utf8 targetMethodTest9
+002202: 1521                    |  [2] proto ()V
+002204: 1601                    |  [3] method handle static-get,field{invokecustom.InvokeCustom.staticFieldTest9:I}
+002206: 1600                    |  [4] method handle static-put,field{invokecustom.InvokeCustom.staticFieldTest9:I}
+002208: 1603                    |  [5] method handle instance-get,field{invokecustom.InvokeCustom.fieldTest9:F}
+00220a: 1602                    |  [6] method handle instance-put,field{invokecustom.InvokeCustom.fieldTest9:F}
+00220c: 160a                    |  [7] method handle invoke-instance,method{invokecustom.InvokeCustom.helperMethodTest9:()V}
+00220e: 160d                    |  [8] method handle invoke-constructor,method{invokecustom.InvokeCustom.<init>:(I)V}
+002210: 1610                    |  [9] method handle invoke-interface,ifaceMethod{java.lang.Runnable.run:()V}
+002212: 160e                    |  [a] method handle invoke-direct,method{invokecustom.InvokeCustom.privateMethodTest9:()V}
+                                |
+                                |[2214] class data for invokecustom.Super
+002214: 00                      |  static_fields_size:   00000000
+002215: 00                      |  instance_fields_size: 00000000
+002216: 01                      |  direct_methods_size:  00000001
+002217: 02                      |  virtual_methods_size: 00000002
+                                |  direct_methods:
+                                |  [0] invokecustom.Super.<init>:()V
+002218: 21                      |    method_idx:   00000021
+002219: 8080 04                 |    access_flags: constructor
+00221c: a813                    |    code_off:     000009a8
+                                |  virtual_methods:
+                                |  [0] invokecustom.Super.helperMethodTest9:()V
+00221e: 22                      |    method_idx:   00000022
+00221f: 8108                    |    access_flags: public|abstract
+002221: 00                      |    code_off:     00000000
+                                |  [1] invokecustom.Super.targetMethodTest4:()V
+002222: 01                      |    method_idx:   00000023
+002223: 01                      |    access_flags: public
+002224: c013                    |    code_off:     000009c0
+                                |
+                                |[2226] class data for invokecustom.InvokeCustom
+002226: 01                      |  static_fields_size:   00000001
+002227: 01                      |  instance_fields_size: 00000001
+002228: 1e                      |  direct_methods_size:  0000001e
+002229: 03                      |  virtual_methods_size: 00000003
+                                |  static_fields:
+                                |  [0] invokecustom.InvokeCustom.staticFieldTest9:I
+00222a: 01                      |    field_idx:    00000001
+00222b: 0a                      |    access_flags: private|static
+                                |  instance_fields:
+                                |  [0] invokecustom.InvokeCustom.fieldTest9:F
+00222c: 00                      |    field_idx:    00000000
+00222d: 02                      |    access_flags: private
+                                |  direct_methods:
+                                |  [0] invokecustom.InvokeCustom.<clinit>:()V
+00222e: 00                      |    method_idx:   00000000
+00222f: 8880 04                 |    access_flags: static|constructor
+002232: e013                    |    code_off:     000009e0
+                                |  [1] invokecustom.InvokeCustom.<init>:()V
+002234: 01                      |    method_idx:   00000001
+002235: 8180 04                 |    access_flags: public|constructor
+002238: f813                    |    code_off:     000009f8
+                                |  [2] invokecustom.InvokeCustom.<init>:(I)V
+00223a: 01                      |    method_idx:   00000002
+00223b: 8180 04                 |    access_flags: public|constructor
+00223e: 9814                    |    code_off:     00000a18
+                                |  [3] invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+002240: 01                      |    method_idx:   00000003
+002241: 09                      |    access_flags: public|static
+002242: f414                    |    code_off:     00000a74
+                                |  [4] invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+002244: 01                      |    method_idx:   00000004
+002245: 09                      |    access_flags: public|static
+002246: cc15                    |    code_off:     00000acc
+                                |  [5] invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+002248: 01                      |    method_idx:   00000005
+002249: 09                      |    access_flags: public|static
+00224a: 9816                    |    code_off:     00000b18
+                                |  [6] invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+00224c: 01                      |    method_idx:   00000006
+00224d: 09                      |    access_flags: public|static
+00224e: cc17                    |    code_off:     00000bcc
+                                |  [7] invokecustom.InvokeCustom.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+002250: 01                      |    method_idx:   00000007
+002251: 02                      |    access_flags: private
+002252: f419                    |    code_off:     00000cf4
+                                |  [8] invokecustom.InvokeCustom.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+002254: 01                      |    method_idx:   00000008
+002255: 0a                      |    access_flags: private|static
+002256: a81b                    |    code_off:     00000da8
+                                |  [9] invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z
+002258: 02                      |    method_idx:   0000000a
+002259: 8a20                    |    access_flags: private|static|synthetic
+00225b: d81c                    |    code_off:     00000e58
+                                |  [a] invokecustom.InvokeCustom.lambdaTest:()V
+00225d: 01                      |    method_idx:   0000000b
+00225e: 09                      |    access_flags: public|static
+00225f: 801d                    |    code_off:     00000e80
+                                |  [b] invokecustom.InvokeCustom.main:([Ljava/lang/String;)V
+002261: 01                      |    method_idx:   0000000c
+002262: 09                      |    access_flags: public|static
+002263: a01e                    |    code_off:     00000f20
+                                |  [c] invokecustom.InvokeCustom.privateMethodTest9:()V
+002265: 01                      |    method_idx:   0000000d
+002266: 02                      |    access_flags: private
+002267: e81e                    |    code_off:     00000f68
+                                |  [d] invokecustom.InvokeCustom.targetMethodTest1:()V
+002269: 02                      |    method_idx:   0000000f
+00226a: 0a                      |    access_flags: private|static
+00226b: 881f                    |    code_off:     00000f88
+                                |  [e] invokecustom.InvokeCustom.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+00226d: 01                      |    method_idx:   00000010
+00226e: 0a                      |    access_flags: private|static
+00226f: a81f                    |    code_off:     00000fa8
+                                |  [f] invokecustom.InvokeCustom.targetMethodTest3:()V
+002271: 01                      |    method_idx:   00000011
+002272: 0a                      |    access_flags: private|static
+002273: 9420                    |    code_off:     00001014
+                                |  [10] invokecustom.InvokeCustom.targetMethodTest5:(III)I
+002275: 02                      |    method_idx:   00000013
+002276: 09                      |    access_flags: public|static
+002277: b420                    |    code_off:     00001034
+                                |  [11] invokecustom.InvokeCustom.targetMethodTest6:(JJJ)J
+002279: 01                      |    method_idx:   00000014
+00227a: 09                      |    access_flags: public|static
+00227b: ec21                    |    code_off:     000010ec
+                                |  [12] invokecustom.InvokeCustom.targetMethodTest7:(FFD)D
+00227d: 01                      |    method_idx:   00000015
+00227e: 09                      |    access_flags: public|static
+00227f: a823                    |    code_off:     000011a8
+                                |  [13] invokecustom.InvokeCustom.targetMethodTest8:(Ljava/lang/String;)V
+002281: 01                      |    method_idx:   00000016
+002282: 09                      |    access_flags: public|static
+002283: e424                    |    code_off:     00001264
+                                |  [14] invokecustom.InvokeCustom.targetMethodTest9:()V
+002285: 01                      |    method_idx:   00000017
+002286: 0a                      |    access_flags: private|static
+002287: a825                    |    code_off:     000012a8
+                                |  [15] invokecustom.InvokeCustom.test1:()V
+002289: 01                      |    method_idx:   00000018
+00228a: 09                      |    access_flags: public|static
+00228b: c825                    |    code_off:     000012c8
+                                |  [16] invokecustom.InvokeCustom.test2:()V
+00228d: 01                      |    method_idx:   00000019
+00228e: 09                      |    access_flags: public|static
+00228f: e025                    |    code_off:     000012e0
+                                |  [17] invokecustom.InvokeCustom.test3:()V
+002291: 01                      |    method_idx:   0000001a
+002292: 09                      |    access_flags: public|static
+002293: a826                    |    code_off:     00001328
+                                |  [18] invokecustom.InvokeCustom.test4:()V
+002295: 01                      |    method_idx:   0000001b
+002296: 09                      |    access_flags: public|static
+002297: c026                    |    code_off:     00001340
+                                |  [19] invokecustom.InvokeCustom.test5:()V
+002299: 01                      |    method_idx:   0000001c
+00229a: 09                      |    access_flags: public|static
+00229b: e426                    |    code_off:     00001364
+                                |  [1a] invokecustom.InvokeCustom.test6:()V
+00229d: 01                      |    method_idx:   0000001d
+00229e: 09                      |    access_flags: public|static
+00229f: bc27                    |    code_off:     000013bc
+                                |  [1b] invokecustom.InvokeCustom.test7:()V
+0022a1: 01                      |    method_idx:   0000001e
+0022a2: 09                      |    access_flags: public|static
+0022a3: a428                    |    code_off:     00001424
+                                |  [1c] invokecustom.InvokeCustom.test8:()V
+0022a5: 01                      |    method_idx:   0000001f
+0022a6: 09                      |    access_flags: public|static
+0022a7: 8429                    |    code_off:     00001484
+                                |  [1d] invokecustom.InvokeCustom.test9:()V
+0022a9: 01                      |    method_idx:   00000020
+0022aa: 09                      |    access_flags: public|static
+0022ab: b429                    |    code_off:     000014b4
+                                |  virtual_methods:
+                                |  [0] invokecustom.InvokeCustom.helperMethodTest9:()V
+0022ad: 09                      |    method_idx:   00000009
+0022ae: 01                      |    access_flags: public
+0022af: cc29                    |    code_off:     000014cc
+                                |  [1] invokecustom.InvokeCustom.run:()V
+0022b1: 05                      |    method_idx:   0000000e
+0022b2: 01                      |    access_flags: public
+0022b3: 942a                    |    code_off:     00001514
+                                |  [2] invokecustom.InvokeCustom.targetMethodTest4:()V
+0022b5: 04                      |    method_idx:   00000012
+0022b6: 01                      |    access_flags: public
+0022b7: b42a                    |    code_off:     00001534
+0022b9: 0000 00                 |
+                                |
+                                |map:
+                                |[22bc] map list
+0022bc: 1300 0000               |  size: 00000013
+                                |[22c0] header_item map
+0022c0: 0000                    |  type:   0000 // TYPE_HEADER_ITEM
+0022c2: 0000                    |  unused: 0
+0022c4: 0100 0000               |  size:   00000001
+0022c8: 0000 0000               |  offset: 00000000
+                                |[22cc] string_id_item map
+0022cc: 0100                    |  type:   0001 // TYPE_STRING_ID_ITEM
+0022ce: 0000                    |  unused: 0
+0022d0: a700 0000               |  size:   000000a7
+0022d4: 7000 0000               |  offset: 00000070
+                                |[22d8] type_id_item map
+0022d8: 0200                    |  type:   0002 // TYPE_TYPE_ID_ITEM
+0022da: 0000                    |  unused: 0
+0022dc: 2600 0000               |  size:   00000026
+0022e0: 0c03 0000               |  offset: 0000030c
+                                |[22e4] proto_id_item map
+0022e4: 0300                    |  type:   0003 // TYPE_PROTO_ID_ITEM
+0022e6: 0000                    |  unused: 0
+0022e8: 3300 0000               |  size:   00000033
+0022ec: a403 0000               |  offset: 000003a4
+                                |[22f0] field_id_item map
+0022f0: 0400                    |  type:   0004 // TYPE_FIELD_ID_ITEM
+0022f2: 0000                    |  unused: 0
+0022f4: 0300 0000               |  size:   00000003
+0022f8: 0806 0000               |  offset: 00000608
+                                |[22fc] method_id_item map
+0022fc: 0500                    |  type:   0005 // TYPE_METHOD_ID_ITEM
+0022fe: 0000                    |  unused: 0
+002300: 4f00 0000               |  size:   0000004f
+002304: 2006 0000               |  offset: 00000620
+                                |[2308] class_def_item map
+002308: 0600                    |  type:   0006 // TYPE_CLASS_DEF_ITEM
+00230a: 0000                    |  unused: 0
+00230c: 0200 0000               |  size:   00000002
+002310: 9808 0000               |  offset: 00000898
+                                |[2314] call_site_id_item map
+002314: 0700                    |  type:   0007 // TYPE_CALL_SITE_ID_ITEM
+002316: 0000                    |  unused: 0
+002318: 0e00 0000               |  size:   0000000e
+00231c: d808 0000               |  offset: 000008d8
+                                |[2320] method_handle_item map
+002320: 0800                    |  type:   0008 // TYPE_METHOD_HANDLE_ITEM
+002322: 0000                    |  unused: 0
+002324: 1100 0000               |  size:   00000011
+002328: 1009 0000               |  offset: 00000910
+                                |[232c] annotation_set_item map
+00232c: 0310                    |  type:   1003 // TYPE_ANNOTATION_SET_ITEM
+00232e: 0000                    |  unused: 0
+002330: 0200 0000               |  size:   00000002
+002334: 9809 0000               |  offset: 00000998
+                                |[2338] code_item map
+002338: 0120                    |  type:   2001 // TYPE_CODE_ITEM
+00233a: 0000                    |  unused: 0
+00233c: 2300 0000               |  size:   00000023
+002340: a809 0000               |  offset: 000009a8
+                                |[2344] annotations_directory_item map
+002344: 0620                    |  type:   2006 // TYPE_ANNOTATIONS_DIRECTORY_ITEM
+002346: 0000                    |  unused: 0
+002348: 0100 0000               |  size:   00000001
+00234c: 5415 0000               |  offset: 00001554
+                                |[2350] type_list map
+002350: 0110                    |  type:   1001 // TYPE_TYPE_LIST
+002352: 0000                    |  unused: 0
+002354: 1e00 0000               |  size:   0000001e
+002358: 9415 0000               |  offset: 00001594
+                                |[235c] string_data_item map
+00235c: 0220                    |  type:   2002 // TYPE_STRING_DATA_ITEM
+00235e: 0000                    |  unused: 0
+002360: a700 0000               |  size:   000000a7
+002364: d216 0000               |  offset: 000016d2
+                                |[2368] debug_info_item map
+002368: 0320                    |  type:   2003 // TYPE_DEBUG_INFO_ITEM
+00236a: 0000                    |  unused: 0
+00236c: 1900 0000               |  size:   00000019
+002370: 4920 0000               |  offset: 00002049
+                                |[2374] annotation_item map
+002374: 0420                    |  type:   2004 // TYPE_ANNOTATION_ITEM
+002376: 0000                    |  unused: 0
+002378: 0200 0000               |  size:   00000002
+00237c: 7321 0000               |  offset: 00002173
+                                |[2380] encoded_array_item map
+002380: 0520                    |  type:   2005 // TYPE_ENCODED_ARRAY_ITEM
+002382: 0000                    |  unused: 0
+002384: 0c00 0000               |  size:   0000000c
+002388: 8721 0000               |  offset: 00002187
+                                |[238c] class_data_item map
+00238c: 0020                    |  type:   2000 // TYPE_CLASS_DATA_ITEM
+00238e: 0000                    |  unused: 0
+002390: 0200 0000               |  size:   00000002
+002394: 1422 0000               |  offset: 00002214
+                                |[2398] map_list map
+002398: 0010                    |  type:   1000 // TYPE_MAP_LIST
+00239a: 0000                    |  unused: 0
+00239c: 0100 0000               |  size:   00000001
+0023a0: bc22 0000               |  offset: 000022bc
+                                |
+                                |method code index:
+                                |
+                                |[9e0] invokecustom.InvokeCustom.<clinit>:()V
+                                |[9f8] invokecustom.InvokeCustom.<init>:()V
+                                |[a18] invokecustom.InvokeCustom.<init>:(I)V
+                                |[a74] invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+                                |[acc] invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+                                |[b18] invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+                                |[bcc] invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+                                |[cf4] invokecustom.InvokeCustom.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+                                |[da8] invokecustom.InvokeCustom.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+                                |[14cc] invokecustom.InvokeCustom.helperMethodTest9:()V
+                                |[e58] invokecustom.InvokeCustom.lambda$lambdaTest$0:(Ljava/lang/String;)Z
+                                |[e80] invokecustom.InvokeCustom.lambdaTest:()V
+                                |[f20] invokecustom.InvokeCustom.main:([Ljava/lang/String;)V
+                                |[f68] invokecustom.InvokeCustom.privateMethodTest9:()V
+                                |[1514] invokecustom.InvokeCustom.run:()V
+                                |[f88] invokecustom.InvokeCustom.targetMethodTest1:()V
+                                |[fa8] invokecustom.InvokeCustom.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+                                |[1014] invokecustom.InvokeCustom.targetMethodTest3:()V
+                                |[1534] invokecustom.InvokeCustom.targetMethodTest4:()V
+                                |[1034] invokecustom.InvokeCustom.targetMethodTest5:(III)I
+                                |[10ec] invokecustom.InvokeCustom.targetMethodTest6:(JJJ)J
+                                |[11a8] invokecustom.InvokeCustom.targetMethodTest7:(FFD)D
+                                |[1264] invokecustom.InvokeCustom.targetMethodTest8:(Ljava/lang/String;)V
+                                |[12a8] invokecustom.InvokeCustom.targetMethodTest9:()V
+                                |[12c8] invokecustom.InvokeCustom.test1:()V
+                                |[12e0] invokecustom.InvokeCustom.test2:()V
+                                |[1328] invokecustom.InvokeCustom.test3:()V
+                                |[1340] invokecustom.InvokeCustom.test4:()V
+                                |[1364] invokecustom.InvokeCustom.test5:()V
+                                |[13bc] invokecustom.InvokeCustom.test6:()V
+                                |[1424] invokecustom.InvokeCustom.test7:()V
+                                |[1484] invokecustom.InvokeCustom.test8:()V
+                                |[14b4] invokecustom.InvokeCustom.test9:()V
+                                |[9a8] invokecustom.Super.<init>:()V
+                                |[9c0] invokecustom.Super.targetMethodTest4:()V
+                                |
+                                |statistics:
+                                |  annotation: 2 items; 20 bytes total
+                                |    9..11 bytes/item; average 10
+                                |  annotation set: 2 items; 16 bytes total
+                                |    8 bytes/item
+                                |  annotations directory: 1 item; 64 bytes total
+                                |    64 bytes/item
+                                |  call site id: 14 items; 56 bytes total
+                                |    4 bytes/item
+                                |  class data: 2 items; 165 bytes total
+                                |    18..147 bytes/item; average 82
+                                |  class def: 2 items; 64 bytes total
+                                |    32 bytes/item
+                                |  code: 35 items; 2988 bytes total
+                                |    24..296 bytes/item; average 85
+                                |  debug info: 25 items; 298 bytes total
+                                |    5..32 bytes/item; average 11
+                                |  encoded array: 12 items; 141 bytes total
+                                |    7..28 bytes/item; average 11
+                                |  field id: 3 items; 24 bytes total
+                                |    8 bytes/item
+                                |  header: 1 item; 112 bytes total
+                                |    112 bytes/item
+                                |  map list: 1 item; 232 bytes total
+                                |    232 bytes/item
+                                |  method handle: 17 items; 136 bytes total
+                                |    8 bytes/item
+                                |  method id: 79 items; 632 bytes total
+                                |    8 bytes/item
+                                |  proto id: 51 items; 612 bytes total
+                                |    12 bytes/item
+                                |  string data: 167 items; 2423 bytes total
+                                |    2..45 bytes/item; average 14
+                                |  string id: 167 items; 668 bytes total
+                                |    4 bytes/item
+                                |  type id: 38 items; 152 bytes total
+                                |    4 bytes/item
+                                |  type list: 30 items; 268 bytes total
+                                |    6..26 bytes/item; average 8
diff --git a/dx/tests/135-invoke-custom/info.txt b/dx/tests/135-invoke-custom/info.txt
new file mode 100644
index 0000000..14ebe84
--- /dev/null
+++ b/dx/tests/135-invoke-custom/info.txt
@@ -0,0 +1,6 @@
+This test checks the conversion of invokedynamic in classfiles to
+invoke-custom in DEX files.
+
+When modifying this test please ensure that the following produce the same output:
+$ art -cp invokecustom.dex invokecustom.InvokeCustom
+$ ${JAVA} -cp invokecustom.jar invokecustom.InvokeCustom
diff --git a/dx/tests/135-invoke-custom/invokecustom.jar b/dx/tests/135-invoke-custom/invokecustom.jar
new file mode 100644
index 0000000..85e1c41
Binary files /dev/null and b/dx/tests/135-invoke-custom/invokecustom.jar differ
diff --git a/dx/tests/135-invoke-custom/run b/dx/tests/135-invoke-custom/run
new file mode 100755
index 0000000..c4d00e2
--- /dev/null
+++ b/dx/tests/135-invoke-custom/run
@@ -0,0 +1,69 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+UNSUPPORTED_SDK_VERSION=25
+SUPPORTED_SDK_VERSION=26
+
+# Expect failure with unsupported SDK version
+EXPECTED_STATUS[${UNSUPPORTED_SDK_VERSION}]=1
+
+# Expect success with supported SDK version
+EXPECTED_STATUS[${SUPPORTED_SDK_VERSION}]=0
+
+DX_OUTPUT=dx.log
+rm -f ${DX_OUTPUT} 2>/dev/null
+
+for SDK_VERSION in ${UNSUPPORTED_SDK_VERSION} ${SUPPORTED_SDK_VERSION}; do
+  echo Trying SDK version ${SDK_VERSION} with invoke-custom.
+  dx --min-sdk-version=${SDK_VERSION} --dex --output=invokecustom.dex \
+     --verbose-dump --dump-to=- --dump-width=1000 invokecustom.jar 2>&1
+  STATUS=$?
+  if [[ ${STATUS} != ${EXPECTED_STATUS[$SDK_VERSION]} ]]; then
+    echo Unexpected status ${STATUS} for SDK version ${SDK_VERSION}.
+    exit 1
+  fi
+done | tee -a ${DX_OUTPUT}
+
+JAVAP_OUTPUT=invokecustom.InvokeCustom.txt
+javap -c -v -cp invokecustom.jar invokecustom.InvokeCustom > ${JAVAP_OUTPUT}
+
+# Check each invokedynamic instruction produced one invoke-custom
+INVOKEDYNAMIC_COUNT=$( grep "invokedynamic #" ${JAVAP_OUTPUT} | wc -l )
+INVOKE_CUSTOM_COUNT=$( grep ": invoke-custom" ${DX_OUTPUT} | wc -l )
+if [ "${INVOKEDYNAMIC_COUNT}" -ne "${INVOKE_CUSTOM_COUNT}" ]; then
+    echo Found ${INVOKEDYNAMIC_COUNT} uses of invokedynamic but ${INVOKE_CUSTOM_COUNT} uses of invoke-custom.
+    exit 1
+fi
+
+# Check there is a 1:1 correspondance between the number of call site ids and invoke-custom bytecodes.
+CALL_SITE_ID_COUNT=$( sed -n -e '/call_site_off:/ p' ${DX_OUTPUT} | wc -l )
+if [ ${CALL_SITE_ID_COUNT} -gt ${INVOKE_CUSTOM_COUNT} ]; then
+    echo Found ${CALL_SITE_ID_COUNT} call sites but ${INVOKE_CUSTOM_COUNT} uses of invoke-custom.
+    exit 1
+fi
+
+# Check number of invokedynamic constants matches the number of unique call sites
+CST_INDY_COUNT=$( sed -n -e 's@.*: invokedynamic #\([0-9]*\),.*@\1@p' ${JAVAP_OUTPUT} | \
+                  sort | \
+                  uniq -c | \
+                  wc -l )
+CALL_SITE_COUNT=$( sed -n -e 's@.*call_site_off: \([0-9a-f]\+\)@\1@p' ${DX_OUTPUT} | \
+                   uniq -c | \
+                   wc -l )
+if [ ${CST_INDY_COUNT} -ne ${CALL_SITE_COUNT} ]; then
+    echo Found ${CST_INDY_COUNT} invokedynamic constants but ${CALL_SITE_COUNT} call sites.
+    exit 1
+fi
diff --git a/dx/tests/135-invoke-custom/src/invokecustom/InvokeCustom.java b/dx/tests/135-invoke-custom/src/invokecustom/InvokeCustom.java
new file mode 100644
index 0000000..efd937a
--- /dev/null
+++ b/dx/tests/135-invoke-custom/src/invokecustom/InvokeCustom.java
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package invokecustom;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+abstract class Super {
+  public void targetMethodTest4() {
+    System.out.println("targetMethodTest4 from Super");
+  }
+
+  public abstract void helperMethodTest9();
+}
+
+public class InvokeCustom extends Super implements Runnable {
+
+  public InvokeCustom() {}
+  public InvokeCustom(int i) {
+    System.out.println("InvokeCustom.<init>(" + i + ")");
+  }
+
+  private static void targetMethodTest1() {
+    System.out.println("Hello World!");
+  }
+
+  private static void targetMethodTest2(boolean z, byte b, char c, short s, int i, float f, long l,
+      double d, String str) {
+    System.out.println(z);
+    System.out.println(b);
+    System.out.println(c);
+    System.out.println(s);
+    System.out.println(i);
+    System.out.println(f);
+    System.out.println(l);
+    System.out.println(d);
+    System.out.println(str);
+  }
+
+  private static void targetMethodTest3() {
+    System.out.println("targetMethodTest3 from InvokeCustom");
+  }
+
+  @Override
+  public void targetMethodTest4() {
+    // The generated code should be calling Super.targetMethodTest4.
+    System.out.println("targetMethodTest4 from InvokeCustom (oops!)");
+  }
+
+  public static int targetMethodTest5(int x, int y, int total) {
+    int calculated = x + y;
+    System.out.println("targetMethodTest5 " + x + " + " + y + " = " + calculated);
+    if (calculated != total) {
+        System.out.println("Failed " + calculated + " != " + total);
+    }
+    return calculated;
+  }
+
+  public static long targetMethodTest6(long x, long y, long total) {
+    long calculated = x + y;
+    System.out.println("targetMethodTest6 " + x + " + " + y + " = " + calculated);
+    if (calculated != total) {
+        System.out.println("Failed " + calculated + " != " + total);
+    }
+    return calculated;
+  }
+
+  public static double targetMethodTest7(float x, float y, double product) {
+    double calculated = x * y;
+    System.out.println("targetMethodTest7 " + x + " * " + y + " = " + calculated);
+    if (calculated != product) {
+      System.out.println("Failed " + calculated + " != " + product);
+    }
+    return calculated;
+  }
+
+  public static void targetMethodTest8(String s) {
+    System.out.println("targetMethodTest8 " + s);
+  }
+
+  private static int staticFieldTest9 = 0;
+
+  private static void checkStaticFieldTest9(MethodHandle getter, MethodHandle setter)
+      throws Throwable {
+    final int NEW_VALUE = 0x76543210;
+    int oldValue = (int) getter.invokeExact();
+    setter.invokeExact(NEW_VALUE);
+    int newValue = (int) getter.invokeExact();
+    System.out.print("checkStaticFieldTest9: old " + oldValue + " new " + newValue +
+                     " expected " + NEW_VALUE + " ");
+    System.out.println((newValue == NEW_VALUE) ? "OK" : "ERROR");
+  }
+
+  private float fieldTest9 = 0.0f;
+
+  private void checkFieldTest9(MethodHandle getter, MethodHandle setter)
+      throws Throwable {
+    final float NEW_VALUE = 1.99e-19f;
+    float oldValue = (float) getter.invokeExact(this);
+    setter.invokeExact(this, NEW_VALUE);
+    float newValue = (float) getter.invokeExact(this);
+    System.out.print("checkFieldTest9: old " + oldValue + " new " + newValue +
+                     " expected " + NEW_VALUE + " ");
+    System.out.println((newValue == NEW_VALUE) ? "OK" : "ERROR");
+  }
+
+  public void helperMethodTest9() {
+    System.out.println("helperMethodTest9 in " + InvokeCustom.class);
+  }
+
+  private static void targetMethodTest9() {
+    System.out.println("targetMethodTest9()");
+  }
+
+  public void run() {
+    System.out.println("run() for Test9");
+  }
+
+  public static CallSite bsmLookupStatic(MethodHandles.Lookup caller, String name, MethodType type)
+      throws NoSuchMethodException, IllegalAccessException {
+    System.out.println("bsmLookupStatic []");
+    final MethodHandles.Lookup lookup = MethodHandles.lookup();
+    final MethodHandle targetMH = lookup.findStatic(lookup.lookupClass(), name, type);
+    return new ConstantCallSite(targetMH.asType(type));
+  }
+
+  public static CallSite bsmLookupStaticWithExtraArgs(
+      MethodHandles.Lookup caller, String name, MethodType type, int i, long l, float f, double d)
+      throws NoSuchMethodException, IllegalAccessException {
+    System.out.println("bsmLookupStaticWithExtraArgs [" + i + ", " + l + ", " + f + ", " + d + "]");
+    final MethodHandles.Lookup lookup = MethodHandles.lookup();
+    final MethodHandle targetMH = lookup.findStatic(lookup.lookupClass(), name, type);
+    return new ConstantCallSite(targetMH.asType(type));
+  }
+
+  public static CallSite bsmCreateCallSite(
+      MethodHandles.Lookup caller, String name, MethodType type, MethodHandle mh)
+      throws Throwable {
+    System.out.println("bsmCreateCallSite [" + mh + "]");
+    return new ConstantCallSite(mh);
+  }
+
+  private void privateMethodTest9() {
+    System.out.println("InvokeCustom.privateMethodTest9()");
+  }
+
+  public static CallSite bsmLookupTest9(MethodHandles.Lookup caller, String name, MethodType type,
+                                        MethodHandle staticGetter,  MethodHandle staticSetter,
+                                        MethodHandle fieldGetter, MethodHandle fieldSetter,
+                                        MethodHandle instanceInvoke, MethodHandle constructor,
+                                        MethodHandle interfaceInvoke, MethodHandle privateInvoke)
+          throws Throwable {
+    System.out.println("bsmLookupTest9 [" + staticGetter + ", " + staticSetter + ", " +
+                       fieldGetter + ", " + fieldSetter + "]");
+    System.out.println(name + " " + type);
+
+    // Check constant method handles passed can be invoked.
+    checkStaticFieldTest9(staticGetter, staticSetter);
+    InvokeCustom instance = new InvokeCustom();
+    instance.checkFieldTest9(fieldGetter, fieldSetter);
+
+    // Check virtual method.
+    instanceInvoke.invokeExact(instance);
+
+    InvokeCustom instance2 = (InvokeCustom) constructor.invokeExact(3);
+    interfaceInvoke.invoke(instance2);
+    privateInvoke.invoke(instance2);
+
+    final MethodHandles.Lookup lookup = MethodHandles.lookup();
+    final MethodHandle targetMH = lookup.findStatic(lookup.lookupClass(), name, type);
+    return new ConstantCallSite(targetMH.asType(type));
+  }
+
+  public static void lambdaTest() {
+    List<String> strings = Arrays.asList(new String[] { "Three", "One", "FortyTwo" });
+    String sample = strings.stream().filter(x -> "One".equals(x.trim()))
+        .map(String::trim).findAny().orElse("");
+    strings.stream().forEach(System.out::println);
+  }
+}
diff --git a/dx/tests/135-invoke-custom/src/invokecustom/TestGenerator.java b/dx/tests/135-invoke-custom/src/invokecustom/TestGenerator.java
new file mode 100644
index 0000000..897ba84
--- /dev/null
+++ b/dx/tests/135-invoke-custom/src/invokecustom/TestGenerator.java
@@ -0,0 +1,356 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package invokecustom;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.nio.file.OpenOption;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Handle;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+
+public class TestGenerator {
+
+  private final Path classNamePath;
+
+  public static void main(String[] args) throws IOException {
+    assert args.length == 1;
+    TestGenerator testGenerator = new TestGenerator(Paths.get(args[0],
+        TestGenerator.class.getPackage().getName(), InvokeCustom.class.getSimpleName() + ".class"));
+    testGenerator.generateTests();
+  }
+
+  public TestGenerator(Path classNamePath) {
+    this.classNamePath = classNamePath;
+  }
+
+  private void generateTests() throws IOException {
+    ClassReader cr = new ClassReader(new FileInputStream(classNamePath.toFile()));
+    ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
+    cr.accept(
+        new ClassVisitor(Opcodes.ASM5, cw) {
+          @Override
+          public void visitEnd() {
+            generateMethodTest1(cw);
+            generateMethodTest2(cw);
+            generateMethodTest3(cw);
+            generateMethodTest4(cw);
+            generateMethodTest5(cw);
+            generateMethodTest6(cw);
+            generateMethodTest7(cw);
+            generateMethodTest8(cw);
+            generateMethodTest9(cw);
+            generateMethodMain(cw);
+            super.visitEnd();
+          }
+        }, 0);
+    new FileOutputStream(classNamePath.toFile()).write(cw.toByteArray());
+  }
+
+  /* generate main method that only call all test methods. */
+  private void generateMethodMain(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC,
+                                      "main", "([Ljava/lang/String;)V", null, null);
+    String internalName = Type.getInternalName(InvokeCustom.class);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test1", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test2", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test3", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test4", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test5", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test6", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test7", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test8", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test9", "()V", false);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   *  Generate test with an invokedynamic, a static bootstrap method without extra args and no arg
+   *  to the target method.
+   */
+  private void generateMethodTest1(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test1", "()V",
+                                      null, null);
+    MethodType mt = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class,
+                                          MethodType.class);
+    Handle bootstrap = new Handle(Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+                                  "bsmLookupStatic", mt.toMethodDescriptorString(), false);
+    mv.visitInvokeDynamicInsn("targetMethodTest1", "()V", bootstrap);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   *  Generate test with an invokedynamic, a static bootstrap method without extra args and
+   *  args to the target method.
+   */
+  private void generateMethodTest2(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test2", "()V",
+                                      null, null);
+    MethodType mt = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class,
+                                          MethodType.class);
+    Handle bootstrap = new Handle(Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+                                  "bsmLookupStatic", mt.toMethodDescriptorString(), false);
+    mv.visitLdcInsn(new Boolean(true));
+    mv.visitLdcInsn(new Byte((byte) 127));
+    mv.visitLdcInsn(new Character('c'));
+    mv.visitLdcInsn(new Short((short) 1024));
+    mv.visitLdcInsn(new Integer(123456));
+    mv.visitLdcInsn(new Float(1.2f));
+    mv.visitLdcInsn(new Long(123456789));
+    mv.visitLdcInsn(new Double(3.5123456789));
+    mv.visitLdcInsn("String");
+    mv.visitInvokeDynamicInsn("targetMethodTest2", "(ZBCSIFJDLjava/lang/String;)V", bootstrap);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   *  Generate test with an invokedynamic, a static bootstrap method with extra args and no arg
+   *  to the target method.
+   */
+  private void generateMethodTest3(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test3", "()V",
+                                      null, null);
+    MethodType mt = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class,
+                                          MethodType.class, int.class,
+                                          long.class, float.class, double.class);
+    Handle bootstrap = new Handle( Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+        "bsmLookupStaticWithExtraArgs", mt.toMethodDescriptorString(), false);
+    mv.visitInvokeDynamicInsn("targetMethodTest3", "()V", bootstrap, new Integer(1),
+        new Long(123456789), new Float(123.456), new Double(123456.789123));
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   *  Generate test with an invokedynamic, a static bootstrap method with an extra arg that is a
+   *  MethodHandle of kind invokespecial.
+   */
+  private void generateMethodTest4(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test4", "()V",
+        null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class,
+            MethodHandles.Lookup.class,
+            String.class,
+            MethodType.class,
+            MethodHandle.class);
+    Handle bootstrap = new Handle( Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+        "bsmCreateCallSite", mt.toMethodDescriptorString(), false);
+    mv.visitTypeInsn(Opcodes.NEW, Type.getInternalName(InvokeCustom.class));
+    mv.visitInsn(Opcodes.DUP);
+    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getInternalName(InvokeCustom.class),
+                       "<init>", "()V", false);
+    mv.visitInvokeDynamicInsn("targetMethodTest4", "(Linvokecustom/InvokeCustom;)V", bootstrap,
+                              new Handle(Opcodes.H_INVOKESPECIAL, Type.getInternalName(Super.class),
+                                         "targetMethodTest4", "()V", false));
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with an invokedynamic where the target generates
+   * a result that the call site prints out.
+   */
+  private void generateMethodTest5(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test5", "()V",
+        null, null);
+    MethodType mt = MethodType.methodType(
+            CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    Handle bootstrap = new Handle(Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+                                  "bsmLookupStatic", mt.toMethodDescriptorString(), false);
+    mv.visitIntInsn(Opcodes.SIPUSH, 1000);
+    mv.visitIntInsn(Opcodes.SIPUSH, -923);
+    mv.visitIntInsn(Opcodes.SIPUSH, 77);
+    mv.visitInvokeDynamicInsn("targetMethodTest5", "(III)I", bootstrap);
+    mv.visitVarInsn(Opcodes.ISTORE, 0);
+    mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+    mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
+    mv.visitInsn(Opcodes.DUP);
+    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
+    mv.visitLdcInsn("targetMethodTest5 returned: ");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
+                       "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
+    mv.visitVarInsn(Opcodes.ILOAD, 0);
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
+                       "(I)Ljava/lang/StringBuilder;");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString",
+                       "()Ljava/lang/String;");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println",
+                       "(Ljava/lang/String;)V");
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with an invokedynamic where the call site invocation tests the summation of
+   * two long values and returns a long.
+   */
+  private void generateMethodTest6(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test6", "()V",
+                                      null, null);
+    MethodType mt = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class,
+                                          MethodType.class);
+    Handle bootstrap = new Handle(Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+                                  "bsmLookupStatic", mt.toMethodDescriptorString(), false);
+    mv.visitLdcInsn(0x77777777777l);
+    mv.visitLdcInsn(-0x11111111111l);
+    mv.visitLdcInsn(0x66666666666l);
+    mv.visitInvokeDynamicInsn("targetMethodTest6", "(JJJ)J", bootstrap);
+    mv.visitVarInsn(Opcodes.LSTORE, 0);
+    mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+    mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
+    mv.visitInsn(Opcodes.DUP);
+    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
+    mv.visitLdcInsn("targetMethodTest6 returned: ");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
+                       "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
+    mv.visitVarInsn(Opcodes.LLOAD, 0);
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
+                       "(J)Ljava/lang/StringBuilder;");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString",
+                       "()Ljava/lang/String;");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println",
+                       "(Ljava/lang/String;)V");
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with an invokedynamic where the call site invocation tests the product of
+   * two float values and returns a double.
+   */
+  private void generateMethodTest7(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test7", "()V",
+                                      null, null);
+    MethodType mt = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class,
+                                          MethodType.class);
+    Handle bootstrap = new Handle(Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+                                  "bsmLookupStatic", mt.toMethodDescriptorString(), false);
+    double x = 0.5009765625;
+    double y = -x;
+    mv.visitLdcInsn((float) x);
+    mv.visitLdcInsn((float) y);
+    mv.visitLdcInsn(x * y);
+    mv.visitInvokeDynamicInsn("targetMethodTest7", "(FFD)D", bootstrap);
+    mv.visitVarInsn(Opcodes.DSTORE, 0);
+    mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+    mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
+    mv.visitInsn(Opcodes.DUP);
+    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
+    mv.visitLdcInsn("targetMethodTest6 returned: ");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
+                       "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
+    mv.visitVarInsn(Opcodes.DLOAD, 0);
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
+                       "(D)Ljava/lang/StringBuilder;");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString",
+                       "()Ljava/lang/String;");
+    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println",
+                       "(Ljava/lang/String;)V");
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with multiple invokedynamic bytecodes operating on the same parameters.
+   * These invocations should each produce invoke-custom bytecodes with unique call site ids.
+   */
+  private void generateMethodTest8(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test8", "()V",
+                                      null, null);
+    MethodType mt = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class,
+                                          MethodType.class);
+    // These should be two distinct call sites and both invoke the
+    // bootstrap method. An erroneous implementation might treat them
+    // as the same call site because the handle arguments are the same.
+    Handle bootstrap1 = new Handle(Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+                                   "bsmLookupStatic", mt.toMethodDescriptorString(), false);
+    mv.visitLdcInsn("First invokedynamic invocation");
+    mv.visitInvokeDynamicInsn("targetMethodTest8", "(Ljava/lang/String;)V", bootstrap1);
+
+    Handle bootstrap2 = new Handle(Opcodes.H_INVOKESTATIC, Type.getInternalName(InvokeCustom.class),
+                                   "bsmLookupStatic", mt.toMethodDescriptorString(), false);
+    mv.visitLdcInsn("Second invokedynamic invocation");
+    mv.visitInvokeDynamicInsn("targetMethodTest8", "(Ljava/lang/String;)V", bootstrap2);
+
+    // Using same handle again creates a new call site so invokes the bootstrap method.
+    mv.visitLdcInsn("Dupe first invokedynamic invocation");
+    mv.visitInvokeDynamicInsn("targetMethodTest8", "(Ljava/lang/String;)V", bootstrap1);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with different kinds of constant method handles.
+   */
+  private void generateMethodTest9(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test9", "()V",
+                                      null, null);
+    MethodType mt =
+        MethodType.methodType(CallSite.class,
+                              MethodHandles.Lookup.class, String.class, MethodType.class,
+                              MethodHandle.class, MethodHandle.class,
+                              MethodHandle.class, MethodHandle.class,
+                              MethodHandle.class, MethodHandle.class,
+                              MethodHandle.class, MethodHandle.class);
+    String internalName = Type.getInternalName(InvokeCustom.class);
+    Handle bootstrap = new Handle(Opcodes.H_INVOKESTATIC, internalName, "bsmLookupTest9",
+                                  mt.toMethodDescriptorString(), false);
+    Handle staticSetter =
+        new Handle(Opcodes.H_GETSTATIC, internalName, "staticFieldTest9", "I", false);
+    Handle staticGetter =
+        new Handle(Opcodes.H_PUTSTATIC, internalName, "staticFieldTest9", "I", false);
+    Handle setter =
+        new Handle(Opcodes.H_GETFIELD, internalName, "fieldTest9", "F", false);
+    Handle getter =
+        new Handle(Opcodes.H_PUTFIELD, internalName, "fieldTest9", "F", false);
+    Handle instanceInvoke =
+        new Handle(Opcodes.H_INVOKEVIRTUAL, internalName, "helperMethodTest9", "()V", false);
+    Handle constructor =
+        new Handle(Opcodes.H_NEWINVOKESPECIAL, internalName, "<init>", "(I)V", false);
+    Handle interfaceInvoke =
+        new Handle(Opcodes.H_INVOKEINTERFACE,
+                   Type.getInternalName(Runnable.class),
+                   "run", "()V", true);
+    // test4 covers invokespecial for a super method. This covers invokespecial of a private method.
+    Handle privateInvoke =
+        new Handle(Opcodes.H_INVOKESPECIAL, internalName, "privateMethodTest9", "()V", false);
+
+    mv.visitInvokeDynamicInsn("targetMethodTest9", "()V", bootstrap,
+                              staticSetter, staticGetter,
+                              setter, getter,
+                              instanceInvoke, constructor,
+                              interfaceInvoke, privateInvoke);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+}
diff --git a/dx/tests/136-null-constant-debug-info/NullConstant.class b/dx/tests/136-null-constant-debug-info/NullConstant.class
new file mode 100644
index 0000000..d4223a2
Binary files /dev/null and b/dx/tests/136-null-constant-debug-info/NullConstant.class differ
diff --git a/dx/tests/136-null-constant-debug-info/NullConstant.java b/dx/tests/136-null-constant-debug-info/NullConstant.java
new file mode 100644
index 0000000..5e70654
--- /dev/null
+++ b/dx/tests/136-null-constant-debug-info/NullConstant.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class NullConstant extends Throwable {
+
+  public final void m() {
+    NullConstant t = this;
+    NullConstant f;
+    f = t = null;
+    long lout = 0L;
+  }
+}
diff --git a/dx/tests/136-null-constant-debug-info/build b/dx/tests/136-null-constant-debug-info/build
new file mode 100644
index 0000000..6a66fb7
--- /dev/null
+++ b/dx/tests/136-null-constant-debug-info/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+${JAVAC} -g -d . *.java &> /dev/null
diff --git a/dx/tests/136-null-constant-debug-info/expected.txt b/dx/tests/136-null-constant-debug-info/expected.txt
new file mode 100644
index 0000000..e69de29
diff --git a/dx/tests/136-null-constant-debug-info/info.txt b/dx/tests/136-null-constant-debug-info/info.txt
new file mode 100644
index 0000000..45e4a26
--- /dev/null
+++ b/dx/tests/136-null-constant-debug-info/info.txt
@@ -0,0 +1,9 @@
+This is a non-regression test that reproduces a case where a local variable
+would have the java.lang.Object type because of a null constant.
+The type of the local variable would be transformed from "KNOWN_NULL" to
+"java.lang.Object", but "java.lang.Object" wouldn't be added to the types of
+the dex.
+So in the rare case where java.lang.Object wouldn't be referenced anywhere else
+in the compilation unit it would fail with "java.lang.IllegalArgumentException:
+not found: Ljava/lang/Object;"
+
diff --git a/dx/tests/136-null-constant-debug-info/run b/dx/tests/136-null-constant-debug-info/run
new file mode 100644
index 0000000..dd12eb4
--- /dev/null
+++ b/dx/tests/136-null-constant-debug-info/run
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+dx --debug --dex *.class 2>&1
diff --git a/dx/tests/137-dexmerger-dex38/build b/dx/tests/137-dexmerger-dex38/build
new file mode 100755
index 0000000..33c7774
--- /dev/null
+++ b/dx/tests/137-dexmerger-dex38/build
@@ -0,0 +1,38 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+function fail() {
+  echo Build failed: $1 1>&2
+  exit 1
+}
+
+if [[ -z "${ANDROID_BUILD_TOP}" ]]; then
+  fail "ANDROID_BUILD_TOP is not defined. Try running 'lunch' first."
+fi
+
+SCRIPT_PATH=$( cd $(dirname $0) ; pwd -P )
+ASM_CLASSPATH="${ANDROID_BUILD_TOP}/prebuilts/misc/common/asm/asm-5.2.jar"
+SRC_PATH="${SCRIPT_PATH}/src"
+BUILD_PATH="${SCRIPT_PATH}/classes"
+JAR_FILE="${SCRIPT_PATH}/invokecustom.jar"
+
+if [[ ! -d "${BUILD_PATH}" ]]; then
+    mkdir "$BUILD_PATH" || exit 1
+fi
+
+(cd "${SRC_PATH}" && javac -cp "${ASM_CLASSPATH}" -d "${BUILD_PATH}" invokecustom/*.java) || fail "javac error"
+(cd "${SCRIPT_PATH}" && ${JAVA} -cp "${ASM_CLASSPATH}:${BUILD_PATH}" invokecustom.TestGenerator "${BUILD_PATH}") || fail "generator failure"
+(cd "${BUILD_PATH}" && jar cf "${JAR_FILE}" invokecustom/InvokeCustom*.class invokecustom/Super.class ) || fail "jar creation error"
diff --git a/dx/tests/137-dexmerger-dex38/expected.txt b/dx/tests/137-dexmerger-dex38/expected.txt
new file mode 100644
index 0000000..709bb13
--- /dev/null
+++ b/dx/tests/137-dexmerger-dex38/expected.txt
@@ -0,0 +1,7147 @@
+Processing 'out.dex'...
+Opened 'out.dex', DEX version '038'
+Class #0            -
+  Class descriptor  : 'Linvokecustom/Super;'
+  Access flags      : 0x0400 (ABSTRACT)
+  Superclass        : 'Ljava/lang/Object;'
+  Interfaces        -
+  Static fields     -
+  Instance fields   -
+  Direct methods    -
+    #0              : (in Linvokecustom/Super;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10000 (CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 1
+      outs          : 1
+      insns size    : 4 16-bit code units
+0040ac:                                        |[0040ac] invokecustom.Super.<init>:()V
+0040bc: 7010 b300 0000                         |0000: invoke-direct {v0}, Ljava/lang/Object;.<init>:()V // method@00b3
+0040c2: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=25
+      locals        :
+        0x0000 - 0x0004 reg=0 this Linvokecustom/Super;
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/Super;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0401 (PUBLIC ABSTRACT)
+      code          : (none)
+
+    #1              : (in Linvokecustom/Super;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+0040c4:                                        |[0040c4] invokecustom.Super.targetMethodTest4:()V
+0040d4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0040d8: 1a01 7600                              |0002: const-string v1, "targetMethodTest4 from Super" // string@0076
+0040dc: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0040e2: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=27
+        0x0007 line=28
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/Super;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Class #1            -
+  Class descriptor  : 'Linvokecustom/InvokeCustom1;'
+  Access flags      : 0x0001 (PUBLIC)
+  Superclass        : 'Linvokecustom/Super;'
+  Interfaces        -
+    #0              : 'Ljava/lang/Runnable;'
+  Static fields     -
+    #0              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'staticFieldTest9'
+      type          : 'I'
+      access        : 0x000a (PRIVATE STATIC)
+  Instance fields   -
+    #0              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'fieldTest9'
+      type          : 'F'
+      access        : 0x0002 (PRIVATE)
+  Direct methods    -
+    #0              : (in Linvokecustom/InvokeCustom1;)
+      name          : '<clinit>'
+      type          : '()V'
+      access        : 0x10008 (STATIC CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+0040e4:                                        |[0040e4] invokecustom.InvokeCustom1.<clinit>:()V
+0040f4: 1200                                   |0000: const/4 v0, #int 0 // #0
+0040f6: 6700 0f00                              |0001: sput v0, Linvokecustom/InvokeCustom;.staticFieldTest9:I // field@000f
+0040fa: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=98
+      locals        :
+
+    #1              : (in Linvokecustom/InvokeCustom1;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 2
+      ins           : 1
+      outs          : 1
+      insns size    : 7 16-bit code units
+0040fc:                                        |[0040fc] invokecustom.InvokeCustom1.<init>:()V
+00410c: 7010 a800 0100                         |0000: invoke-direct {v1}, Linvokecustom/Super;.<init>:()V // method@00a8
+004112: 1200                                   |0003: const/4 v0, #int 0 // #0
+004114: 5910 0e00                              |0004: iput v0, v1, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+004118: 0e00                                   |0006: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=35
+        0x0003 line=111
+        0x0006 line=35
+      locals        :
+        0x0000 - 0x0007 reg=1 this Linvokecustom/InvokeCustom1;
+
+    #2              : (in Linvokecustom/InvokeCustom1;)
+      name          : '<init>'
+      type          : '(I)V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 5
+      ins           : 2
+      outs          : 2
+      insns size    : 37 16-bit code units
+00411c:                                        |[00411c] invokecustom.InvokeCustom1.<init>:(I)V
+00412c: 7010 a800 0300                         |0000: invoke-direct {v3}, Linvokecustom/Super;.<init>:()V // method@00a8
+004132: 1200                                   |0003: const/4 v0, #int 0 // #0
+004134: 5930 0e00                              |0004: iput v0, v3, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+004138: 6200 1000                              |0006: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00413c: 2201 1700                              |0008: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004140: 7010 b400 0100                         |000a: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004146: 1a02 1800                              |000d: const-string v2, "InvokeCustom.<init>(" // string@0018
+00414a: 6e20 ba00 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004150: 0c01                                   |0012: move-result-object v1
+004152: 6e20 b700 4100                         |0013: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004158: 0c01                                   |0016: move-result-object v1
+00415a: 1a02 0700                              |0017: const-string v2, ")" // string@0007
+00415e: 6e20 ba00 2100                         |0019: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004164: 0c01                                   |001c: move-result-object v1
+004166: 6e10 bb00 0100                         |001d: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00416c: 0c01                                   |0020: move-result-object v1
+00416e: 6e20 b100 1000                         |0021: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004174: 0e00                                   |0024: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=36
+        0x0003 line=111
+        0x0006 line=37
+        0x0024 line=38
+      locals        :
+        0x0000 - 0x0025 reg=3 this Linvokecustom/InvokeCustom1;
+        0x0000 - 0x0025 reg=4 (null) I
+
+    #3              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'bsmCreateCallSite'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 4
+      outs          : 2
+      insns size    : 36 16-bit code units
+004178:                                        |[004178] invokecustom.InvokeCustom1.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+004188: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00418c: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004190: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004196: 1a02 5600                              |0007: const-string v2, "bsmCreateCallSite [" // string@0056
+00419a: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0041a0: 0c01                                   |000c: move-result-object v1
+0041a2: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0041a8: 0c01                                   |0010: move-result-object v1
+0041aa: 1a02 5200                              |0011: const-string v2, "]" // string@0052
+0041ae: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0041b4: 0c01                                   |0016: move-result-object v1
+0041b6: 6e10 bb00 0100                         |0017: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0041bc: 0c01                                   |001a: move-result-object v1
+0041be: 6e20 b100 1000                         |001b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0041c4: 2200 1b00                              |001e: new-instance v0, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0041c8: 7020 bc00 6000                         |0020: invoke-direct {v0, v6}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0041ce: 1100                                   |0023: return-object v0
+      catches       : (none)
+      positions     :
+        0x0000 line=156
+        0x001e line=157
+      locals        :
+        0x0000 - 0x0024 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0024 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0024 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0024 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+
+    #4              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'bsmLookupStatic'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 3
+      outs          : 4
+      insns size    : 29 16-bit code units
+0041d0:                                        |[0041d0] invokecustom.InvokeCustom1.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+0041e0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0041e4: 1a01 5800                              |0002: const-string v1, "bsmLookupStatic []" // string@0058
+0041e8: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0041ee: 7100 c900 0000                         |0007: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+0041f4: 0c00                                   |000a: move-result-object v0
+0041f6: 6e10 c800 0000                         |000b: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+0041fc: 0c01                                   |000e: move-result-object v1
+0041fe: 6e40 c700 1043                         |000f: invoke-virtual {v0, v1, v3, v4}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+004204: 0c00                                   |0012: move-result-object v0
+004206: 2201 1b00                              |0013: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+00420a: 6e20 bd00 4000                         |0015: invoke-virtual {v0, v4}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+004210: 0c00                                   |0018: move-result-object v0
+004212: 7020 bc00 0100                         |0019: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+004218: 1101                                   |001c: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=138
+        0x0007 line=139
+        0x000b line=140
+        0x0013 line=141
+      locals        :
+        0x0000 - 0x001d reg=2 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x001d reg=3 (null) Ljava/lang/String;
+        0x0000 - 0x001d reg=4 (null) Ljava/lang/invoke/MethodType;
+
+    #5              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'bsmLookupStaticWithExtraArgs'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 9
+      outs          : 4
+      insns size    : 82 16-bit code units
+00421c:                                        |[00421c] invokecustom.InvokeCustom1.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+00422c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004230: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004234: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00423a: 1a02 5a00                              |0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // string@005a
+00423e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004244: 0c01                                   |000c: move-result-object v1
+004246: 6e20 b700 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00424c: 0c01                                   |0010: move-result-object v1
+00424e: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+004252: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004258: 0c01                                   |0016: move-result-object v1
+00425a: 6e30 b800 7108                         |0017: invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004260: 0c01                                   |001a: move-result-object v1
+004262: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+004266: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00426c: 0c01                                   |0020: move-result-object v1
+00426e: 6e20 b600 9100                         |0021: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+004274: 0c01                                   |0024: move-result-object v1
+004276: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+00427a: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004280: 0c01                                   |002a: move-result-object v1
+004282: 6e30 b500 a10b                         |002b: invoke-virtual {v1, v10, v11}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+004288: 0c01                                   |002e: move-result-object v1
+00428a: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+00428e: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004294: 0c01                                   |0034: move-result-object v1
+004296: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00429c: 0c01                                   |0038: move-result-object v1
+00429e: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0042a4: 7100 c900 0000                         |003c: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+0042aa: 0c00                                   |003f: move-result-object v0
+0042ac: 6e10 c800 0000                         |0040: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+0042b2: 0c01                                   |0043: move-result-object v1
+0042b4: 6e40 c700 1054                         |0044: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+0042ba: 0c00                                   |0047: move-result-object v0
+0042bc: 2201 1b00                              |0048: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0042c0: 6e20 bd00 5000                         |004a: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+0042c6: 0c00                                   |004d: move-result-object v0
+0042c8: 7020 bc00 0100                         |004e: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0042ce: 1101                                   |0051: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=147
+        0x003c line=148
+        0x0040 line=149
+        0x0048 line=150
+      locals        :
+        0x0000 - 0x0052 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0052 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0052 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0052 reg=6 (null) I
+        0x0000 - 0x0052 reg=7 (null) J
+        0x0000 - 0x0052 reg=9 (null) F
+        0x0000 - 0x0052 reg=10 (null) D
+
+    #6              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'bsmLookupTest9'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 13
+      ins           : 10
+      outs          : 4
+      insns size    : 135 16-bit code units
+0042d0:                                        |[0042d0] invokecustom.InvokeCustom1.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+0042e0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0042e4: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0042e8: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0042ee: 1a02 5c00                              |0007: const-string v2, "bsmLookupTest9 [" // string@005c
+0042f2: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0042f8: 0c01                                   |000c: move-result-object v1
+0042fa: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004300: 0c01                                   |0010: move-result-object v1
+004302: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+004306: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00430c: 0c01                                   |0016: move-result-object v1
+00430e: 6e20 b900 7100                         |0017: invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004314: 0c01                                   |001a: move-result-object v1
+004316: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+00431a: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004320: 0c01                                   |0020: move-result-object v1
+004322: 6e20 b900 8100                         |0021: invoke-virtual {v1, v8}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004328: 0c01                                   |0024: move-result-object v1
+00432a: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+00432e: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004334: 0c01                                   |002a: move-result-object v1
+004336: 6e20 b900 9100                         |002b: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+00433c: 0c01                                   |002e: move-result-object v1
+00433e: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+004342: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004348: 0c01                                   |0034: move-result-object v1
+00434a: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004350: 0c01                                   |0038: move-result-object v1
+004352: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004358: 6200 1000                              |003c: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00435c: 2201 1700                              |003e: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004360: 7010 b400 0100                         |0040: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004366: 6e20 ba00 4100                         |0043: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00436c: 0c01                                   |0046: move-result-object v1
+00436e: 1a02 0000                              |0047: const-string v2, " " // string@0000
+004372: 6e20 ba00 2100                         |0049: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004378: 0c01                                   |004c: move-result-object v1
+00437a: 6e20 b900 5100                         |004d: invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004380: 0c01                                   |0050: move-result-object v1
+004382: 6e10 bb00 0100                         |0051: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004388: 0c01                                   |0054: move-result-object v1
+00438a: 6e20 b100 1000                         |0055: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004390: 7120 9b00 7600                         |0058: invoke-static {v6, v7}, Linvokecustom/InvokeCustom;.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009b
+004396: 2200 0e00                              |005b: new-instance v0, Linvokecustom/InvokeCustom; // type@000e
+00439a: 7010 9400 0000                         |005d: invoke-direct {v0}, Linvokecustom/InvokeCustom;.<init>:()V // method@0094
+0043a0: 6f30 9a00 8009                         |0060: invoke-super {v0, v8, v9}, Linvokecustom/InvokeCustom;.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009a
+0043a6: fa20 c300 0a00 1c00                    |0063: invoke-polymorphic {v10, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00c3, proto@001c
+0043ae: 1230                                   |0067: const/4 v0, #int 3 // #3
+0043b0: fa20 c300 0b00 0500                    |0068: invoke-polymorphic {v11, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@00c3, proto@0005
+0043b8: 0c00                                   |006c: move-result-object v0
+0043ba: fa20 be00 0c00 1c00                    |006d: invoke-polymorphic {v12, v0}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00be, proto@001c
+0043c2: 7100 c900 0000                         |0071: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+0043c8: 0c00                                   |0074: move-result-object v0
+0043ca: 6e10 c800 0000                         |0075: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+0043d0: 0c01                                   |0078: move-result-object v1
+0043d2: 6e40 c700 1054                         |0079: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+0043d8: 0c00                                   |007c: move-result-object v0
+0043da: 2201 1b00                              |007d: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0043de: 6e20 bd00 5000                         |007f: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+0043e4: 0c00                                   |0082: move-result-object v0
+0043e6: 7020 bc00 0100                         |0083: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0043ec: 1101                                   |0086: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=166
+        0x003c line=168
+        0x0058 line=171
+        0x005b line=172
+        0x0060 line=173
+        0x0063 line=176
+        0x0067 line=178
+        0x006d line=179
+        0x0071 line=181
+        0x0075 line=182
+        0x007d line=183
+      locals        :
+        0x0000 - 0x0087 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0087 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0087 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0087 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=9 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=10 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=11 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=12 (null) Ljava/lang/invoke/MethodHandle;
+
+    #7              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'checkFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x0002 (PRIVATE)
+      code          -
+      registers     : 9
+      ins           : 3
+      outs          : 3
+      insns size    : 82 16-bit code units
+0043f0:                                        |[0043f0] invokecustom.InvokeCustom1.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+004400: 1405 0ff0 6a20                         |0000: const v5, #float 1.99e-19 // #206af00f
+004406: fa20 c300 6700 0100                    |0003: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+00440e: 0a00                                   |0007: move-result v0
+004410: fa30 c300 6805 1d00                    |0008: invoke-polymorphic {v8, v6, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@00c3, proto@001d
+004418: fa20 c300 6700 0100                    |000c: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+004420: 0a01                                   |0010: move-result v1
+004422: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004426: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+00442a: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004430: 1a04 5e00                              |0018: const-string v4, "checkFieldTest9: old " // string@005e
+004434: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00443a: 0c03                                   |001d: move-result-object v3
+00443c: 6e20 b600 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+004442: 0c00                                   |0021: move-result-object v0
+004444: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+004448: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00444e: 0c00                                   |0027: move-result-object v0
+004450: 6e20 b600 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+004456: 0c00                                   |002b: move-result-object v0
+004458: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+00445c: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004462: 0c00                                   |0031: move-result-object v0
+004464: 6e20 b600 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00446a: 0c00                                   |0035: move-result-object v0
+00446c: 1a03 0000                              |0036: const-string v3, " " // string@0000
+004470: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004476: 0c00                                   |003b: move-result-object v0
+004478: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00447e: 0c00                                   |003f: move-result-object v0
+004480: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+004486: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00448a: 2d00 0105                              |0045: cmpl-float v0, v1, v5
+00448e: 3900 0800                              |0047: if-nez v0, 004f // +0008
+004492: 1a00 4000                              |0049: const-string v0, "OK" // string@0040
+004496: 6e20 b100 0200                         |004b: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00449c: 0e00                                   |004e: return-void
+00449e: 1a00 1000                              |004f: const-string v0, "ERROR" // string@0010
+0044a2: 28fa                                   |0051: goto 004b // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=116
+        0x0008 line=117
+        0x000c line=118
+        0x0011 line=119
+        0x0043 line=121
+        0x004e line=122
+        0x004f line=121
+      locals        :
+        0x0000 - 0x0052 reg=6 this Linvokecustom/InvokeCustom1;
+        0x0000 - 0x0052 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0052 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+
+    #8              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'checkStaticFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 8
+      ins           : 2
+      outs          : 2
+      insns size    : 80 16-bit code units
+0044a4:                                        |[0044a4] invokecustom.InvokeCustom1.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+0044b4: 1405 1032 5476                         |0000: const v5, #float 1.07596e+33 // #76543210
+0044ba: fa10 c300 0600 0200                    |0003: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+0044c2: 0a00                                   |0007: move-result v0
+0044c4: fa20 c300 5700 1a00                    |0008: invoke-polymorphic {v7, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@00c3, proto@001a
+0044cc: fa10 c300 0600 0200                    |000c: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+0044d4: 0a01                                   |0010: move-result v1
+0044d6: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0044da: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0044de: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0044e4: 1a04 6000                              |0018: const-string v4, "checkStaticFieldTest9: old " // string@0060
+0044e8: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0044ee: 0c03                                   |001d: move-result-object v3
+0044f0: 6e20 b700 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0044f6: 0c00                                   |0021: move-result-object v0
+0044f8: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+0044fc: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004502: 0c00                                   |0027: move-result-object v0
+004504: 6e20 b700 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00450a: 0c00                                   |002b: move-result-object v0
+00450c: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+004510: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004516: 0c00                                   |0031: move-result-object v0
+004518: 6e20 b700 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00451e: 0c00                                   |0035: move-result-object v0
+004520: 1a03 0000                              |0036: const-string v3, " " // string@0000
+004524: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00452a: 0c00                                   |003b: move-result-object v0
+00452c: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004532: 0c00                                   |003f: move-result-object v0
+004534: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+00453a: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00453e: 3351 0800                              |0045: if-ne v1, v5, 004d // +0008
+004542: 1a00 4000                              |0047: const-string v0, "OK" // string@0040
+004546: 6e20 b100 0200                         |0049: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00454c: 0e00                                   |004c: return-void
+00454e: 1a00 1000                              |004d: const-string v0, "ERROR" // string@0010
+004552: 28fa                                   |004f: goto 0049 // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=103
+        0x0008 line=104
+        0x000c line=105
+        0x0011 line=106
+        0x0043 line=108
+        0x004c line=109
+        0x004d line=108
+      locals        :
+        0x0000 - 0x0050 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0050 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+
+    #9              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest1'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+004554:                                        |[004554] invokecustom.InvokeCustom1.targetMethodTest1:()V
+004564: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004568: 1a01 1500                              |0002: const-string v1, "Hello World!" // string@0015
+00456c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004572: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=41
+        0x0007 line=42
+      locals        :
+
+    #10              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest2'
+      type          : '(ZBCSIFJDLjava/lang/String;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 13
+      ins           : 11
+      outs          : 3
+      insns size    : 46 16-bit code units
+004574:                                        |[004574] invokecustom.InvokeCustom1.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+004584: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004588: 6e20 b200 2000                         |0002: invoke-virtual {v0, v2}, Ljava/io/PrintStream;.println:(Z)V // method@00b2
+00458e: 6200 1000                              |0005: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004592: 6e20 af00 3000                         |0007: invoke-virtual {v0, v3}, Ljava/io/PrintStream;.println:(I)V // method@00af
+004598: 6200 1000                              |000a: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00459c: 6e20 ac00 4000                         |000c: invoke-virtual {v0, v4}, Ljava/io/PrintStream;.println:(C)V // method@00ac
+0045a2: 6200 1000                              |000f: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0045a6: 6e20 af00 5000                         |0011: invoke-virtual {v0, v5}, Ljava/io/PrintStream;.println:(I)V // method@00af
+0045ac: 6200 1000                              |0014: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0045b0: 6e20 af00 6000                         |0016: invoke-virtual {v0, v6}, Ljava/io/PrintStream;.println:(I)V // method@00af
+0045b6: 6200 1000                              |0019: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0045ba: 6e20 ae00 7000                         |001b: invoke-virtual {v0, v7}, Ljava/io/PrintStream;.println:(F)V // method@00ae
+0045c0: 6200 1000                              |001e: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0045c4: 6e30 b000 8009                         |0020: invoke-virtual {v0, v8, v9}, Ljava/io/PrintStream;.println:(J)V // method@00b0
+0045ca: 6200 1000                              |0023: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0045ce: 6e30 ad00 a00b                         |0025: invoke-virtual {v0, v10, v11}, Ljava/io/PrintStream;.println:(D)V // method@00ad
+0045d4: 6200 1000                              |0028: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0045d8: 6e20 b100 c000                         |002a: invoke-virtual {v0, v12}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0045de: 0e00                                   |002d: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=46
+        0x0005 line=47
+        0x000a line=48
+        0x000f line=49
+        0x0014 line=50
+        0x0019 line=51
+        0x001e line=52
+        0x0023 line=53
+        0x0028 line=54
+        0x002d line=55
+      locals        :
+        0x0000 - 0x002e reg=2 (null) Z
+        0x0000 - 0x002e reg=3 (null) B
+        0x0000 - 0x002e reg=4 (null) C
+        0x0000 - 0x002e reg=5 (null) S
+        0x0000 - 0x002e reg=6 (null) I
+        0x0000 - 0x002e reg=7 (null) F
+        0x0000 - 0x002e reg=8 (null) J
+        0x0000 - 0x002e reg=10 (null) D
+        0x0000 - 0x002e reg=12 (null) Ljava/lang/String;
+
+    #11              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest3'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+0045e0:                                        |[0045e0] invokecustom.InvokeCustom1.targetMethodTest3:()V
+0045f0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0045f4: 1a01 7300                              |0002: const-string v1, "targetMethodTest3 from InvokeCustom" // string@0073
+0045f8: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0045fe: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=58
+        0x0007 line=59
+      locals        :
+
+    #12              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest5'
+      type          : '(III)I'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 3
+      outs          : 2
+      insns size    : 83 16-bit code units
+004600:                                        |[004600] invokecustom.InvokeCustom1.targetMethodTest5:(III)I
+004610: 9000 0405                              |0000: add-int v0, v4, v5
+004614: 6201 1000                              |0002: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004618: 2202 1700                              |0004: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+00461c: 7010 b400 0200                         |0006: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004622: 1a03 7800                              |0009: const-string v3, "targetMethodTest5 " // string@0078
+004626: 6e20 ba00 3200                         |000b: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00462c: 0c02                                   |000e: move-result-object v2
+00462e: 6e20 b700 4200                         |000f: invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004634: 0c02                                   |0012: move-result-object v2
+004636: 1a03 0300                              |0013: const-string v3, " + " // string@0003
+00463a: 6e20 ba00 3200                         |0015: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004640: 0c02                                   |0018: move-result-object v2
+004642: 6e20 b700 5200                         |0019: invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004648: 0c02                                   |001c: move-result-object v2
+00464a: 1a03 0400                              |001d: const-string v3, " = " // string@0004
+00464e: 6e20 ba00 3200                         |001f: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004654: 0c02                                   |0022: move-result-object v2
+004656: 6e20 b700 0200                         |0023: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00465c: 0c02                                   |0026: move-result-object v2
+00465e: 6e10 bb00 0200                         |0027: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004664: 0c02                                   |002a: move-result-object v2
+004666: 6e20 b100 2100                         |002b: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00466c: 3260 2400                              |002e: if-eq v0, v6, 0052 // +0024
+004670: 6201 1000                              |0030: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004674: 2202 1700                              |0032: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+004678: 7010 b400 0200                         |0034: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00467e: 1a03 1300                              |0037: const-string v3, "Failed " // string@0013
+004682: 6e20 ba00 3200                         |0039: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004688: 0c02                                   |003c: move-result-object v2
+00468a: 6e20 b700 0200                         |003d: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004690: 0c02                                   |0040: move-result-object v2
+004692: 1a03 0100                              |0041: const-string v3, " != " // string@0001
+004696: 6e20 ba00 3200                         |0043: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00469c: 0c02                                   |0046: move-result-object v2
+00469e: 6e20 b700 6200                         |0047: invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0046a4: 0c02                                   |004a: move-result-object v2
+0046a6: 6e10 bb00 0200                         |004b: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0046ac: 0c02                                   |004e: move-result-object v2
+0046ae: 6e20 b100 2100                         |004f: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0046b4: 0f00                                   |0052: return v0
+      catches       : (none)
+      positions     :
+        0x0000 line=68
+        0x0002 line=69
+        0x002e line=70
+        0x0030 line=71
+        0x0052 line=73
+      locals        :
+        0x0000 - 0x0053 reg=4 (null) I
+        0x0000 - 0x0053 reg=5 (null) I
+        0x0000 - 0x0053 reg=6 (null) I
+
+    #13              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest6'
+      type          : '(JJJ)J'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 6
+      outs          : 3
+      insns size    : 85 16-bit code units
+0046b8:                                        |[0046b8] invokecustom.InvokeCustom1.targetMethodTest6:(JJJ)J
+0046c8: 9b00 0608                              |0000: add-long v0, v6, v8
+0046cc: 6202 1000                              |0002: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0046d0: 2203 1700                              |0004: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0046d4: 7010 b400 0300                         |0006: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0046da: 1a04 7b00                              |0009: const-string v4, "targetMethodTest6 " // string@007b
+0046de: 6e20 ba00 4300                         |000b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0046e4: 0c03                                   |000e: move-result-object v3
+0046e6: 6e30 b800 6307                         |000f: invoke-virtual {v3, v6, v7}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0046ec: 0c03                                   |0012: move-result-object v3
+0046ee: 1a04 0300                              |0013: const-string v4, " + " // string@0003
+0046f2: 6e20 ba00 4300                         |0015: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0046f8: 0c03                                   |0018: move-result-object v3
+0046fa: 6e30 b800 8309                         |0019: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004700: 0c03                                   |001c: move-result-object v3
+004702: 1a04 0400                              |001d: const-string v4, " = " // string@0004
+004706: 6e20 ba00 4300                         |001f: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00470c: 0c03                                   |0022: move-result-object v3
+00470e: 6e30 b800 0301                         |0023: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004714: 0c03                                   |0026: move-result-object v3
+004716: 6e10 bb00 0300                         |0027: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00471c: 0c03                                   |002a: move-result-object v3
+00471e: 6e20 b100 3200                         |002b: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004724: 3102 000a                              |002e: cmp-long v2, v0, v10
+004728: 3802 2400                              |0030: if-eqz v2, 0054 // +0024
+00472c: 6202 1000                              |0032: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004730: 2203 1700                              |0034: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+004734: 7010 b400 0300                         |0036: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00473a: 1a04 1300                              |0039: const-string v4, "Failed " // string@0013
+00473e: 6e20 ba00 4300                         |003b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004744: 0c03                                   |003e: move-result-object v3
+004746: 6e30 b800 0301                         |003f: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+00474c: 0c03                                   |0042: move-result-object v3
+00474e: 1a04 0100                              |0043: const-string v4, " != " // string@0001
+004752: 6e20 ba00 4300                         |0045: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004758: 0c03                                   |0048: move-result-object v3
+00475a: 6e30 b800 a30b                         |0049: invoke-virtual {v3, v10, v11}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004760: 0c03                                   |004c: move-result-object v3
+004762: 6e10 bb00 0300                         |004d: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004768: 0c03                                   |0050: move-result-object v3
+00476a: 6e20 b100 3200                         |0051: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004770: 1000                                   |0054: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=77
+        0x0002 line=78
+        0x002e line=79
+        0x0032 line=80
+        0x0054 line=82
+      locals        :
+        0x0000 - 0x0055 reg=6 (null) J
+        0x0000 - 0x0055 reg=8 (null) J
+        0x0000 - 0x0055 reg=10 (null) J
+
+    #14              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest7'
+      type          : '(FFD)D'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 10
+      ins           : 4
+      outs          : 3
+      insns size    : 86 16-bit code units
+004774:                                        |[004774] invokecustom.InvokeCustom1.targetMethodTest7:(FFD)D
+004784: a800 0607                              |0000: mul-float v0, v6, v7
+004788: 8900                                   |0002: float-to-double v0, v0
+00478a: 6202 1000                              |0003: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00478e: 2203 1700                              |0005: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+004792: 7010 b400 0300                         |0007: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004798: 1a04 7e00                              |000a: const-string v4, "targetMethodTest7 " // string@007e
+00479c: 6e20 ba00 4300                         |000c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0047a2: 0c03                                   |000f: move-result-object v3
+0047a4: 6e20 b600 6300                         |0010: invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+0047aa: 0c03                                   |0013: move-result-object v3
+0047ac: 1a04 0200                              |0014: const-string v4, " * " // string@0002
+0047b0: 6e20 ba00 4300                         |0016: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0047b6: 0c03                                   |0019: move-result-object v3
+0047b8: 6e20 b600 7300                         |001a: invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+0047be: 0c03                                   |001d: move-result-object v3
+0047c0: 1a04 0400                              |001e: const-string v4, " = " // string@0004
+0047c4: 6e20 ba00 4300                         |0020: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0047ca: 0c03                                   |0023: move-result-object v3
+0047cc: 6e30 b500 0301                         |0024: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+0047d2: 0c03                                   |0027: move-result-object v3
+0047d4: 6e10 bb00 0300                         |0028: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0047da: 0c03                                   |002b: move-result-object v3
+0047dc: 6e20 b100 3200                         |002c: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0047e2: 2f02 0008                              |002f: cmpl-double v2, v0, v8
+0047e6: 3802 2400                              |0031: if-eqz v2, 0055 // +0024
+0047ea: 6202 1000                              |0033: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0047ee: 2203 1700                              |0035: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0047f2: 7010 b400 0300                         |0037: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0047f8: 1a04 1300                              |003a: const-string v4, "Failed " // string@0013
+0047fc: 6e20 ba00 4300                         |003c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004802: 0c03                                   |003f: move-result-object v3
+004804: 6e30 b500 0301                         |0040: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00480a: 0c03                                   |0043: move-result-object v3
+00480c: 1a04 0100                              |0044: const-string v4, " != " // string@0001
+004810: 6e20 ba00 4300                         |0046: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004816: 0c03                                   |0049: move-result-object v3
+004818: 6e30 b500 8309                         |004a: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00481e: 0c03                                   |004d: move-result-object v3
+004820: 6e10 bb00 0300                         |004e: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004826: 0c03                                   |0051: move-result-object v3
+004828: 6e20 b100 3200                         |0052: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00482e: 1000                                   |0055: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=86
+        0x0003 line=87
+        0x002f line=88
+        0x0033 line=89
+        0x0055 line=91
+      locals        :
+        0x0000 - 0x0056 reg=6 (null) F
+        0x0000 - 0x0056 reg=7 (null) F
+        0x0000 - 0x0056 reg=8 (null) D
+
+    #15              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest8'
+      type          : '(Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 25 16-bit code units
+004830:                                        |[004830] invokecustom.InvokeCustom1.targetMethodTest8:(Ljava/lang/String;)V
+004840: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004844: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004848: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00484e: 1a02 8000                              |0007: const-string v2, "targetMethodTest8 " // string@0080
+004852: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004858: 0c01                                   |000c: move-result-object v1
+00485a: 6e20 ba00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004860: 0c01                                   |0010: move-result-object v1
+004862: 6e10 bb00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004868: 0c01                                   |0014: move-result-object v1
+00486a: 6e20 b100 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004870: 0e00                                   |0018: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=95
+        0x0018 line=96
+      locals        :
+        0x0000 - 0x0019 reg=3 (null) Ljava/lang/String;
+
+    #16              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest9'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+004874:                                        |[004874] invokecustom.InvokeCustom1.targetMethodTest9:()V
+004884: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004888: 1a01 8200                              |0002: const-string v1, "targetMethodTest9()" // string@0082
+00488c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004892: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=129
+        0x0007 line=130
+      locals        :
+
+    #17              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'test1'
+      type          : '()V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 0
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+004894:                                        |[004894] invokecustom.InvokeCustom1.test1:()V
+0048a4: fc00 0000 0000                         |0000: invoke-custom {}, call_site@0000
+0048aa: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+      locals        :
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 27 16-bit code units
+0048ac:                                        |[0048ac] invokecustom.InvokeCustom1.helperMethodTest9:()V
+0048bc: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0048c0: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0048c4: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0048ca: 1a02 6400                              |0007: const-string v2, "helperMethodTest9 in " // string@0064
+0048ce: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0048d4: 0c01                                   |000c: move-result-object v1
+0048d6: 1c02 0e00                              |000d: const-class v2, Linvokecustom/InvokeCustom; // type@000e
+0048da: 6e20 b900 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0048e0: 0c01                                   |0012: move-result-object v1
+0048e2: 6e10 bb00 0100                         |0013: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0048e8: 0c01                                   |0016: move-result-object v1
+0048ea: 6e20 b100 1000                         |0017: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0048f0: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=125
+        0x001a line=126
+      locals        :
+        0x0000 - 0x001b reg=3 this Linvokecustom/InvokeCustom1;
+
+    #1              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'run'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+0048f4:                                        |[0048f4] invokecustom.InvokeCustom1.run:()V
+004904: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004908: 1a01 6e00                              |0002: const-string v1, "run() for Test9" // string@006e
+00490c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004912: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=133
+        0x0007 line=134
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom1;
+
+    #2              : (in Linvokecustom/InvokeCustom1;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+004914:                                        |[004914] invokecustom.InvokeCustom1.targetMethodTest4:()V
+004924: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004928: 1a01 7500                              |0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // string@0075
+00492c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004932: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=64
+        0x0007 line=65
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom1;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Class #2            -
+  Class descriptor  : 'Linvokecustom/InvokeCustom2;'
+  Access flags      : 0x0001 (PUBLIC)
+  Superclass        : 'Linvokecustom/Super;'
+  Interfaces        -
+    #0              : 'Ljava/lang/Runnable;'
+  Static fields     -
+    #0              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'staticFieldTest9'
+      type          : 'I'
+      access        : 0x000a (PRIVATE STATIC)
+  Instance fields   -
+    #0              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'fieldTest9'
+      type          : 'F'
+      access        : 0x0002 (PRIVATE)
+  Direct methods    -
+    #0              : (in Linvokecustom/InvokeCustom2;)
+      name          : '<clinit>'
+      type          : '()V'
+      access        : 0x10008 (STATIC CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+004934:                                        |[004934] invokecustom.InvokeCustom2.<clinit>:()V
+004944: 1200                                   |0000: const/4 v0, #int 0 // #0
+004946: 6700 0f00                              |0001: sput v0, Linvokecustom/InvokeCustom;.staticFieldTest9:I // field@000f
+00494a: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=98
+      locals        :
+
+    #1              : (in Linvokecustom/InvokeCustom2;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 2
+      ins           : 1
+      outs          : 1
+      insns size    : 7 16-bit code units
+00494c:                                        |[00494c] invokecustom.InvokeCustom2.<init>:()V
+00495c: 7010 a800 0100                         |0000: invoke-direct {v1}, Linvokecustom/Super;.<init>:()V // method@00a8
+004962: 1200                                   |0003: const/4 v0, #int 0 // #0
+004964: 5910 0e00                              |0004: iput v0, v1, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+004968: 0e00                                   |0006: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=35
+        0x0003 line=111
+        0x0006 line=35
+      locals        :
+        0x0000 - 0x0007 reg=1 this Linvokecustom/InvokeCustom2;
+
+    #2              : (in Linvokecustom/InvokeCustom2;)
+      name          : '<init>'
+      type          : '(I)V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 5
+      ins           : 2
+      outs          : 2
+      insns size    : 37 16-bit code units
+00496c:                                        |[00496c] invokecustom.InvokeCustom2.<init>:(I)V
+00497c: 7010 a800 0300                         |0000: invoke-direct {v3}, Linvokecustom/Super;.<init>:()V // method@00a8
+004982: 1200                                   |0003: const/4 v0, #int 0 // #0
+004984: 5930 0e00                              |0004: iput v0, v3, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+004988: 6200 1000                              |0006: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00498c: 2201 1700                              |0008: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004990: 7010 b400 0100                         |000a: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004996: 1a02 1800                              |000d: const-string v2, "InvokeCustom.<init>(" // string@0018
+00499a: 6e20 ba00 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0049a0: 0c01                                   |0012: move-result-object v1
+0049a2: 6e20 b700 4100                         |0013: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0049a8: 0c01                                   |0016: move-result-object v1
+0049aa: 1a02 0700                              |0017: const-string v2, ")" // string@0007
+0049ae: 6e20 ba00 2100                         |0019: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0049b4: 0c01                                   |001c: move-result-object v1
+0049b6: 6e10 bb00 0100                         |001d: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0049bc: 0c01                                   |0020: move-result-object v1
+0049be: 6e20 b100 1000                         |0021: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0049c4: 0e00                                   |0024: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=36
+        0x0003 line=111
+        0x0006 line=37
+        0x0024 line=38
+      locals        :
+        0x0000 - 0x0025 reg=3 this Linvokecustom/InvokeCustom2;
+        0x0000 - 0x0025 reg=4 (null) I
+
+    #3              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'bsmCreateCallSite'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 4
+      outs          : 2
+      insns size    : 36 16-bit code units
+0049c8:                                        |[0049c8] invokecustom.InvokeCustom2.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+0049d8: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0049dc: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0049e0: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0049e6: 1a02 5600                              |0007: const-string v2, "bsmCreateCallSite [" // string@0056
+0049ea: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0049f0: 0c01                                   |000c: move-result-object v1
+0049f2: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0049f8: 0c01                                   |0010: move-result-object v1
+0049fa: 1a02 5200                              |0011: const-string v2, "]" // string@0052
+0049fe: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004a04: 0c01                                   |0016: move-result-object v1
+004a06: 6e10 bb00 0100                         |0017: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004a0c: 0c01                                   |001a: move-result-object v1
+004a0e: 6e20 b100 1000                         |001b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004a14: 2200 1b00                              |001e: new-instance v0, Ljava/lang/invoke/ConstantCallSite; // type@001b
+004a18: 7020 bc00 6000                         |0020: invoke-direct {v0, v6}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+004a1e: 1100                                   |0023: return-object v0
+      catches       : (none)
+      positions     :
+        0x0000 line=156
+        0x001e line=157
+      locals        :
+        0x0000 - 0x0024 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0024 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0024 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0024 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+
+    #4              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'bsmLookupStatic'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 3
+      outs          : 4
+      insns size    : 29 16-bit code units
+004a20:                                        |[004a20] invokecustom.InvokeCustom2.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+004a30: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004a34: 1a01 5800                              |0002: const-string v1, "bsmLookupStatic []" // string@0058
+004a38: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004a3e: 7100 c900 0000                         |0007: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+004a44: 0c00                                   |000a: move-result-object v0
+004a46: 6e10 c800 0000                         |000b: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+004a4c: 0c01                                   |000e: move-result-object v1
+004a4e: 6e40 c700 1043                         |000f: invoke-virtual {v0, v1, v3, v4}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+004a54: 0c00                                   |0012: move-result-object v0
+004a56: 2201 1b00                              |0013: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+004a5a: 6e20 bd00 4000                         |0015: invoke-virtual {v0, v4}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+004a60: 0c00                                   |0018: move-result-object v0
+004a62: 7020 bc00 0100                         |0019: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+004a68: 1101                                   |001c: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=138
+        0x0007 line=139
+        0x000b line=140
+        0x0013 line=141
+      locals        :
+        0x0000 - 0x001d reg=2 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x001d reg=3 (null) Ljava/lang/String;
+        0x0000 - 0x001d reg=4 (null) Ljava/lang/invoke/MethodType;
+
+    #5              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'bsmLookupStaticWithExtraArgs'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 9
+      outs          : 4
+      insns size    : 82 16-bit code units
+004a6c:                                        |[004a6c] invokecustom.InvokeCustom2.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+004a7c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004a80: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004a84: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004a8a: 1a02 5a00                              |0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // string@005a
+004a8e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004a94: 0c01                                   |000c: move-result-object v1
+004a96: 6e20 b700 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004a9c: 0c01                                   |0010: move-result-object v1
+004a9e: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+004aa2: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004aa8: 0c01                                   |0016: move-result-object v1
+004aaa: 6e30 b800 7108                         |0017: invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004ab0: 0c01                                   |001a: move-result-object v1
+004ab2: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+004ab6: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004abc: 0c01                                   |0020: move-result-object v1
+004abe: 6e20 b600 9100                         |0021: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+004ac4: 0c01                                   |0024: move-result-object v1
+004ac6: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+004aca: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004ad0: 0c01                                   |002a: move-result-object v1
+004ad2: 6e30 b500 a10b                         |002b: invoke-virtual {v1, v10, v11}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+004ad8: 0c01                                   |002e: move-result-object v1
+004ada: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+004ade: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004ae4: 0c01                                   |0034: move-result-object v1
+004ae6: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004aec: 0c01                                   |0038: move-result-object v1
+004aee: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004af4: 7100 c900 0000                         |003c: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+004afa: 0c00                                   |003f: move-result-object v0
+004afc: 6e10 c800 0000                         |0040: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+004b02: 0c01                                   |0043: move-result-object v1
+004b04: 6e40 c700 1054                         |0044: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+004b0a: 0c00                                   |0047: move-result-object v0
+004b0c: 2201 1b00                              |0048: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+004b10: 6e20 bd00 5000                         |004a: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+004b16: 0c00                                   |004d: move-result-object v0
+004b18: 7020 bc00 0100                         |004e: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+004b1e: 1101                                   |0051: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=147
+        0x003c line=148
+        0x0040 line=149
+        0x0048 line=150
+      locals        :
+        0x0000 - 0x0052 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0052 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0052 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0052 reg=6 (null) I
+        0x0000 - 0x0052 reg=7 (null) J
+        0x0000 - 0x0052 reg=9 (null) F
+        0x0000 - 0x0052 reg=10 (null) D
+
+    #6              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'bsmLookupTest9'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 13
+      ins           : 10
+      outs          : 4
+      insns size    : 135 16-bit code units
+004b20:                                        |[004b20] invokecustom.InvokeCustom2.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+004b30: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004b34: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004b38: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004b3e: 1a02 5c00                              |0007: const-string v2, "bsmLookupTest9 [" // string@005c
+004b42: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004b48: 0c01                                   |000c: move-result-object v1
+004b4a: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004b50: 0c01                                   |0010: move-result-object v1
+004b52: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+004b56: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004b5c: 0c01                                   |0016: move-result-object v1
+004b5e: 6e20 b900 7100                         |0017: invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004b64: 0c01                                   |001a: move-result-object v1
+004b66: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+004b6a: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004b70: 0c01                                   |0020: move-result-object v1
+004b72: 6e20 b900 8100                         |0021: invoke-virtual {v1, v8}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004b78: 0c01                                   |0024: move-result-object v1
+004b7a: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+004b7e: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004b84: 0c01                                   |002a: move-result-object v1
+004b86: 6e20 b900 9100                         |002b: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004b8c: 0c01                                   |002e: move-result-object v1
+004b8e: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+004b92: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004b98: 0c01                                   |0034: move-result-object v1
+004b9a: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004ba0: 0c01                                   |0038: move-result-object v1
+004ba2: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004ba8: 6200 1000                              |003c: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004bac: 2201 1700                              |003e: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+004bb0: 7010 b400 0100                         |0040: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004bb6: 6e20 ba00 4100                         |0043: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004bbc: 0c01                                   |0046: move-result-object v1
+004bbe: 1a02 0000                              |0047: const-string v2, " " // string@0000
+004bc2: 6e20 ba00 2100                         |0049: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004bc8: 0c01                                   |004c: move-result-object v1
+004bca: 6e20 b900 5100                         |004d: invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+004bd0: 0c01                                   |0050: move-result-object v1
+004bd2: 6e10 bb00 0100                         |0051: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004bd8: 0c01                                   |0054: move-result-object v1
+004bda: 6e20 b100 1000                         |0055: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004be0: 7120 9b00 7600                         |0058: invoke-static {v6, v7}, Linvokecustom/InvokeCustom;.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009b
+004be6: 2200 0e00                              |005b: new-instance v0, Linvokecustom/InvokeCustom; // type@000e
+004bea: 7010 9400 0000                         |005d: invoke-direct {v0}, Linvokecustom/InvokeCustom;.<init>:()V // method@0094
+004bf0: 6f30 9a00 8009                         |0060: invoke-super {v0, v8, v9}, Linvokecustom/InvokeCustom;.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009a
+004bf6: fa20 c300 0a00 1c00                    |0063: invoke-polymorphic {v10, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00c3, proto@001c
+004bfe: 1230                                   |0067: const/4 v0, #int 3 // #3
+004c00: fa20 c300 0b00 0500                    |0068: invoke-polymorphic {v11, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@00c3, proto@0005
+004c08: 0c00                                   |006c: move-result-object v0
+004c0a: fa20 be00 0c00 1c00                    |006d: invoke-polymorphic {v12, v0}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00be, proto@001c
+004c12: 7100 c900 0000                         |0071: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+004c18: 0c00                                   |0074: move-result-object v0
+004c1a: 6e10 c800 0000                         |0075: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+004c20: 0c01                                   |0078: move-result-object v1
+004c22: 6e40 c700 1054                         |0079: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+004c28: 0c00                                   |007c: move-result-object v0
+004c2a: 2201 1b00                              |007d: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+004c2e: 6e20 bd00 5000                         |007f: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+004c34: 0c00                                   |0082: move-result-object v0
+004c36: 7020 bc00 0100                         |0083: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+004c3c: 1101                                   |0086: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=166
+        0x003c line=168
+        0x0058 line=171
+        0x005b line=172
+        0x0060 line=173
+        0x0063 line=176
+        0x0067 line=178
+        0x006d line=179
+        0x0071 line=181
+        0x0075 line=182
+        0x007d line=183
+      locals        :
+        0x0000 - 0x0087 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0087 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0087 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0087 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=9 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=10 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=11 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=12 (null) Ljava/lang/invoke/MethodHandle;
+
+    #7              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'checkFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x0002 (PRIVATE)
+      code          -
+      registers     : 9
+      ins           : 3
+      outs          : 3
+      insns size    : 82 16-bit code units
+004c40:                                        |[004c40] invokecustom.InvokeCustom2.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+004c50: 1405 0ff0 6a20                         |0000: const v5, #float 1.99e-19 // #206af00f
+004c56: fa20 c300 6700 0100                    |0003: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+004c5e: 0a00                                   |0007: move-result v0
+004c60: fa30 c300 6805 1d00                    |0008: invoke-polymorphic {v8, v6, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@00c3, proto@001d
+004c68: fa20 c300 6700 0100                    |000c: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+004c70: 0a01                                   |0010: move-result v1
+004c72: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004c76: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+004c7a: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004c80: 1a04 5e00                              |0018: const-string v4, "checkFieldTest9: old " // string@005e
+004c84: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004c8a: 0c03                                   |001d: move-result-object v3
+004c8c: 6e20 b600 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+004c92: 0c00                                   |0021: move-result-object v0
+004c94: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+004c98: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004c9e: 0c00                                   |0027: move-result-object v0
+004ca0: 6e20 b600 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+004ca6: 0c00                                   |002b: move-result-object v0
+004ca8: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+004cac: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004cb2: 0c00                                   |0031: move-result-object v0
+004cb4: 6e20 b600 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+004cba: 0c00                                   |0035: move-result-object v0
+004cbc: 1a03 0000                              |0036: const-string v3, " " // string@0000
+004cc0: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004cc6: 0c00                                   |003b: move-result-object v0
+004cc8: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004cce: 0c00                                   |003f: move-result-object v0
+004cd0: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+004cd6: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004cda: 2d00 0105                              |0045: cmpl-float v0, v1, v5
+004cde: 3900 0800                              |0047: if-nez v0, 004f // +0008
+004ce2: 1a00 4000                              |0049: const-string v0, "OK" // string@0040
+004ce6: 6e20 b100 0200                         |004b: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004cec: 0e00                                   |004e: return-void
+004cee: 1a00 1000                              |004f: const-string v0, "ERROR" // string@0010
+004cf2: 28fa                                   |0051: goto 004b // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=116
+        0x0008 line=117
+        0x000c line=118
+        0x0011 line=119
+        0x0043 line=121
+        0x004e line=122
+        0x004f line=121
+      locals        :
+        0x0000 - 0x0052 reg=6 this Linvokecustom/InvokeCustom2;
+        0x0000 - 0x0052 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0052 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+
+    #8              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'checkStaticFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 8
+      ins           : 2
+      outs          : 2
+      insns size    : 80 16-bit code units
+004cf4:                                        |[004cf4] invokecustom.InvokeCustom2.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+004d04: 1405 1032 5476                         |0000: const v5, #float 1.07596e+33 // #76543210
+004d0a: fa10 c300 0600 0200                    |0003: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+004d12: 0a00                                   |0007: move-result v0
+004d14: fa20 c300 5700 1a00                    |0008: invoke-polymorphic {v7, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@00c3, proto@001a
+004d1c: fa10 c300 0600 0200                    |000c: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+004d24: 0a01                                   |0010: move-result v1
+004d26: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004d2a: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+004d2e: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004d34: 1a04 6000                              |0018: const-string v4, "checkStaticFieldTest9: old " // string@0060
+004d38: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004d3e: 0c03                                   |001d: move-result-object v3
+004d40: 6e20 b700 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004d46: 0c00                                   |0021: move-result-object v0
+004d48: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+004d4c: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004d52: 0c00                                   |0027: move-result-object v0
+004d54: 6e20 b700 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004d5a: 0c00                                   |002b: move-result-object v0
+004d5c: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+004d60: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004d66: 0c00                                   |0031: move-result-object v0
+004d68: 6e20 b700 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004d6e: 0c00                                   |0035: move-result-object v0
+004d70: 1a03 0000                              |0036: const-string v3, " " // string@0000
+004d74: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004d7a: 0c00                                   |003b: move-result-object v0
+004d7c: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004d82: 0c00                                   |003f: move-result-object v0
+004d84: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+004d8a: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004d8e: 3351 0800                              |0045: if-ne v1, v5, 004d // +0008
+004d92: 1a00 4000                              |0047: const-string v0, "OK" // string@0040
+004d96: 6e20 b100 0200                         |0049: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004d9c: 0e00                                   |004c: return-void
+004d9e: 1a00 1000                              |004d: const-string v0, "ERROR" // string@0010
+004da2: 28fa                                   |004f: goto 0049 // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=103
+        0x0008 line=104
+        0x000c line=105
+        0x0011 line=106
+        0x0043 line=108
+        0x004c line=109
+        0x004d line=108
+      locals        :
+        0x0000 - 0x0050 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0050 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+
+    #9              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest1'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+004da4:                                        |[004da4] invokecustom.InvokeCustom2.targetMethodTest1:()V
+004db4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004db8: 1a01 1500                              |0002: const-string v1, "Hello World!" // string@0015
+004dbc: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004dc2: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=41
+        0x0007 line=42
+      locals        :
+
+    #10              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest2'
+      type          : '(ZBCSIFJDLjava/lang/String;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 13
+      ins           : 11
+      outs          : 3
+      insns size    : 46 16-bit code units
+004dc4:                                        |[004dc4] invokecustom.InvokeCustom2.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+004dd4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004dd8: 6e20 b200 2000                         |0002: invoke-virtual {v0, v2}, Ljava/io/PrintStream;.println:(Z)V // method@00b2
+004dde: 6200 1000                              |0005: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004de2: 6e20 af00 3000                         |0007: invoke-virtual {v0, v3}, Ljava/io/PrintStream;.println:(I)V // method@00af
+004de8: 6200 1000                              |000a: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004dec: 6e20 ac00 4000                         |000c: invoke-virtual {v0, v4}, Ljava/io/PrintStream;.println:(C)V // method@00ac
+004df2: 6200 1000                              |000f: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004df6: 6e20 af00 5000                         |0011: invoke-virtual {v0, v5}, Ljava/io/PrintStream;.println:(I)V // method@00af
+004dfc: 6200 1000                              |0014: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004e00: 6e20 af00 6000                         |0016: invoke-virtual {v0, v6}, Ljava/io/PrintStream;.println:(I)V // method@00af
+004e06: 6200 1000                              |0019: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004e0a: 6e20 ae00 7000                         |001b: invoke-virtual {v0, v7}, Ljava/io/PrintStream;.println:(F)V // method@00ae
+004e10: 6200 1000                              |001e: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004e14: 6e30 b000 8009                         |0020: invoke-virtual {v0, v8, v9}, Ljava/io/PrintStream;.println:(J)V // method@00b0
+004e1a: 6200 1000                              |0023: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004e1e: 6e30 ad00 a00b                         |0025: invoke-virtual {v0, v10, v11}, Ljava/io/PrintStream;.println:(D)V // method@00ad
+004e24: 6200 1000                              |0028: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004e28: 6e20 b100 c000                         |002a: invoke-virtual {v0, v12}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004e2e: 0e00                                   |002d: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=46
+        0x0005 line=47
+        0x000a line=48
+        0x000f line=49
+        0x0014 line=50
+        0x0019 line=51
+        0x001e line=52
+        0x0023 line=53
+        0x0028 line=54
+        0x002d line=55
+      locals        :
+        0x0000 - 0x002e reg=2 (null) Z
+        0x0000 - 0x002e reg=3 (null) B
+        0x0000 - 0x002e reg=4 (null) C
+        0x0000 - 0x002e reg=5 (null) S
+        0x0000 - 0x002e reg=6 (null) I
+        0x0000 - 0x002e reg=7 (null) F
+        0x0000 - 0x002e reg=8 (null) J
+        0x0000 - 0x002e reg=10 (null) D
+        0x0000 - 0x002e reg=12 (null) Ljava/lang/String;
+
+    #11              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest3'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+004e30:                                        |[004e30] invokecustom.InvokeCustom2.targetMethodTest3:()V
+004e40: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004e44: 1a01 7300                              |0002: const-string v1, "targetMethodTest3 from InvokeCustom" // string@0073
+004e48: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004e4e: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=58
+        0x0007 line=59
+      locals        :
+
+    #12              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest5'
+      type          : '(III)I'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 3
+      outs          : 2
+      insns size    : 83 16-bit code units
+004e50:                                        |[004e50] invokecustom.InvokeCustom2.targetMethodTest5:(III)I
+004e60: 9000 0405                              |0000: add-int v0, v4, v5
+004e64: 6201 1000                              |0002: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004e68: 2202 1700                              |0004: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+004e6c: 7010 b400 0200                         |0006: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004e72: 1a03 7800                              |0009: const-string v3, "targetMethodTest5 " // string@0078
+004e76: 6e20 ba00 3200                         |000b: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004e7c: 0c02                                   |000e: move-result-object v2
+004e7e: 6e20 b700 4200                         |000f: invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004e84: 0c02                                   |0012: move-result-object v2
+004e86: 1a03 0300                              |0013: const-string v3, " + " // string@0003
+004e8a: 6e20 ba00 3200                         |0015: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004e90: 0c02                                   |0018: move-result-object v2
+004e92: 6e20 b700 5200                         |0019: invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004e98: 0c02                                   |001c: move-result-object v2
+004e9a: 1a03 0400                              |001d: const-string v3, " = " // string@0004
+004e9e: 6e20 ba00 3200                         |001f: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004ea4: 0c02                                   |0022: move-result-object v2
+004ea6: 6e20 b700 0200                         |0023: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004eac: 0c02                                   |0026: move-result-object v2
+004eae: 6e10 bb00 0200                         |0027: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004eb4: 0c02                                   |002a: move-result-object v2
+004eb6: 6e20 b100 2100                         |002b: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004ebc: 3260 2400                              |002e: if-eq v0, v6, 0052 // +0024
+004ec0: 6201 1000                              |0030: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004ec4: 2202 1700                              |0032: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+004ec8: 7010 b400 0200                         |0034: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004ece: 1a03 1300                              |0037: const-string v3, "Failed " // string@0013
+004ed2: 6e20 ba00 3200                         |0039: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004ed8: 0c02                                   |003c: move-result-object v2
+004eda: 6e20 b700 0200                         |003d: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004ee0: 0c02                                   |0040: move-result-object v2
+004ee2: 1a03 0100                              |0041: const-string v3, " != " // string@0001
+004ee6: 6e20 ba00 3200                         |0043: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004eec: 0c02                                   |0046: move-result-object v2
+004eee: 6e20 b700 6200                         |0047: invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+004ef4: 0c02                                   |004a: move-result-object v2
+004ef6: 6e10 bb00 0200                         |004b: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004efc: 0c02                                   |004e: move-result-object v2
+004efe: 6e20 b100 2100                         |004f: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004f04: 0f00                                   |0052: return v0
+      catches       : (none)
+      positions     :
+        0x0000 line=68
+        0x0002 line=69
+        0x002e line=70
+        0x0030 line=71
+        0x0052 line=73
+      locals        :
+        0x0000 - 0x0053 reg=4 (null) I
+        0x0000 - 0x0053 reg=5 (null) I
+        0x0000 - 0x0053 reg=6 (null) I
+
+    #13              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest6'
+      type          : '(JJJ)J'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 6
+      outs          : 3
+      insns size    : 85 16-bit code units
+004f08:                                        |[004f08] invokecustom.InvokeCustom2.targetMethodTest6:(JJJ)J
+004f18: 9b00 0608                              |0000: add-long v0, v6, v8
+004f1c: 6202 1000                              |0002: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004f20: 2203 1700                              |0004: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+004f24: 7010 b400 0300                         |0006: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004f2a: 1a04 7b00                              |0009: const-string v4, "targetMethodTest6 " // string@007b
+004f2e: 6e20 ba00 4300                         |000b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004f34: 0c03                                   |000e: move-result-object v3
+004f36: 6e30 b800 6307                         |000f: invoke-virtual {v3, v6, v7}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004f3c: 0c03                                   |0012: move-result-object v3
+004f3e: 1a04 0300                              |0013: const-string v4, " + " // string@0003
+004f42: 6e20 ba00 4300                         |0015: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004f48: 0c03                                   |0018: move-result-object v3
+004f4a: 6e30 b800 8309                         |0019: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004f50: 0c03                                   |001c: move-result-object v3
+004f52: 1a04 0400                              |001d: const-string v4, " = " // string@0004
+004f56: 6e20 ba00 4300                         |001f: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004f5c: 0c03                                   |0022: move-result-object v3
+004f5e: 6e30 b800 0301                         |0023: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004f64: 0c03                                   |0026: move-result-object v3
+004f66: 6e10 bb00 0300                         |0027: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004f6c: 0c03                                   |002a: move-result-object v3
+004f6e: 6e20 b100 3200                         |002b: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004f74: 3102 000a                              |002e: cmp-long v2, v0, v10
+004f78: 3802 2400                              |0030: if-eqz v2, 0054 // +0024
+004f7c: 6202 1000                              |0032: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004f80: 2203 1700                              |0034: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+004f84: 7010 b400 0300                         |0036: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004f8a: 1a04 1300                              |0039: const-string v4, "Failed " // string@0013
+004f8e: 6e20 ba00 4300                         |003b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004f94: 0c03                                   |003e: move-result-object v3
+004f96: 6e30 b800 0301                         |003f: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004f9c: 0c03                                   |0042: move-result-object v3
+004f9e: 1a04 0100                              |0043: const-string v4, " != " // string@0001
+004fa2: 6e20 ba00 4300                         |0045: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004fa8: 0c03                                   |0048: move-result-object v3
+004faa: 6e30 b800 a30b                         |0049: invoke-virtual {v3, v10, v11}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+004fb0: 0c03                                   |004c: move-result-object v3
+004fb2: 6e10 bb00 0300                         |004d: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+004fb8: 0c03                                   |0050: move-result-object v3
+004fba: 6e20 b100 3200                         |0051: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+004fc0: 1000                                   |0054: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=77
+        0x0002 line=78
+        0x002e line=79
+        0x0032 line=80
+        0x0054 line=82
+      locals        :
+        0x0000 - 0x0055 reg=6 (null) J
+        0x0000 - 0x0055 reg=8 (null) J
+        0x0000 - 0x0055 reg=10 (null) J
+
+    #14              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest7'
+      type          : '(FFD)D'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 10
+      ins           : 4
+      outs          : 3
+      insns size    : 86 16-bit code units
+004fc4:                                        |[004fc4] invokecustom.InvokeCustom2.targetMethodTest7:(FFD)D
+004fd4: a800 0607                              |0000: mul-float v0, v6, v7
+004fd8: 8900                                   |0002: float-to-double v0, v0
+004fda: 6202 1000                              |0003: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+004fde: 2203 1700                              |0005: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+004fe2: 7010 b400 0300                         |0007: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+004fe8: 1a04 7e00                              |000a: const-string v4, "targetMethodTest7 " // string@007e
+004fec: 6e20 ba00 4300                         |000c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+004ff2: 0c03                                   |000f: move-result-object v3
+004ff4: 6e20 b600 6300                         |0010: invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+004ffa: 0c03                                   |0013: move-result-object v3
+004ffc: 1a04 0200                              |0014: const-string v4, " * " // string@0002
+005000: 6e20 ba00 4300                         |0016: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005006: 0c03                                   |0019: move-result-object v3
+005008: 6e20 b600 7300                         |001a: invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00500e: 0c03                                   |001d: move-result-object v3
+005010: 1a04 0400                              |001e: const-string v4, " = " // string@0004
+005014: 6e20 ba00 4300                         |0020: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00501a: 0c03                                   |0023: move-result-object v3
+00501c: 6e30 b500 0301                         |0024: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+005022: 0c03                                   |0027: move-result-object v3
+005024: 6e10 bb00 0300                         |0028: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00502a: 0c03                                   |002b: move-result-object v3
+00502c: 6e20 b100 3200                         |002c: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005032: 2f02 0008                              |002f: cmpl-double v2, v0, v8
+005036: 3802 2400                              |0031: if-eqz v2, 0055 // +0024
+00503a: 6202 1000                              |0033: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00503e: 2203 1700                              |0035: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+005042: 7010 b400 0300                         |0037: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005048: 1a04 1300                              |003a: const-string v4, "Failed " // string@0013
+00504c: 6e20 ba00 4300                         |003c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005052: 0c03                                   |003f: move-result-object v3
+005054: 6e30 b500 0301                         |0040: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00505a: 0c03                                   |0043: move-result-object v3
+00505c: 1a04 0100                              |0044: const-string v4, " != " // string@0001
+005060: 6e20 ba00 4300                         |0046: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005066: 0c03                                   |0049: move-result-object v3
+005068: 6e30 b500 8309                         |004a: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00506e: 0c03                                   |004d: move-result-object v3
+005070: 6e10 bb00 0300                         |004e: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005076: 0c03                                   |0051: move-result-object v3
+005078: 6e20 b100 3200                         |0052: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00507e: 1000                                   |0055: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=86
+        0x0003 line=87
+        0x002f line=88
+        0x0033 line=89
+        0x0055 line=91
+      locals        :
+        0x0000 - 0x0056 reg=6 (null) F
+        0x0000 - 0x0056 reg=7 (null) F
+        0x0000 - 0x0056 reg=8 (null) D
+
+    #15              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest8'
+      type          : '(Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 25 16-bit code units
+005080:                                        |[005080] invokecustom.InvokeCustom2.targetMethodTest8:(Ljava/lang/String;)V
+005090: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005094: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005098: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00509e: 1a02 8000                              |0007: const-string v2, "targetMethodTest8 " // string@0080
+0050a2: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0050a8: 0c01                                   |000c: move-result-object v1
+0050aa: 6e20 ba00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0050b0: 0c01                                   |0010: move-result-object v1
+0050b2: 6e10 bb00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0050b8: 0c01                                   |0014: move-result-object v1
+0050ba: 6e20 b100 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0050c0: 0e00                                   |0018: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=95
+        0x0018 line=96
+      locals        :
+        0x0000 - 0x0019 reg=3 (null) Ljava/lang/String;
+
+    #16              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest9'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+0050c4:                                        |[0050c4] invokecustom.InvokeCustom2.targetMethodTest9:()V
+0050d4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0050d8: 1a01 8200                              |0002: const-string v1, "targetMethodTest9()" // string@0082
+0050dc: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0050e2: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=129
+        0x0007 line=130
+      locals        :
+
+    #17              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'test2'
+      type          : '()V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 11
+      ins           : 0
+      outs          : 11
+      insns size    : 27 16-bit code units
+0050e4:                                        |[0050e4] invokecustom.InvokeCustom2.test2:()V
+0050f4: 1210                                   |0000: const/4 v0, #int 1 // #1
+0050f6: 1301 7f00                              |0001: const/16 v1, #int 127 // #7f
+0050fa: 1302 6300                              |0003: const/16 v2, #int 99 // #63
+0050fe: 1303 0004                              |0005: const/16 v3, #int 1024 // #400
+005102: 1404 40e2 0100                         |0007: const v4, #float 1.72999e-40 // #0001e240
+005108: 1405 9a99 993f                         |000a: const v5, #float 1.2 // #3f99999a
+00510e: 1706 15cd 5b07                         |000d: const-wide/32 v6, #float 1.6536e-34 // #075bcd15
+005114: 1808 b6fa f8b0 4819 0c40               |0010: const-wide v8, #double 3.51235 // #400c1948b0f8fab6
+00511e: 1a0a 4300                              |0015: const-string v10, "String" // string@0043
+005122: fd0b 0100 0000                         |0017: invoke-custom/range {v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10}, call_site@0001
+005128: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+      locals        :
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 27 16-bit code units
+00512c:                                        |[00512c] invokecustom.InvokeCustom2.helperMethodTest9:()V
+00513c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005140: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005144: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00514a: 1a02 6400                              |0007: const-string v2, "helperMethodTest9 in " // string@0064
+00514e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005154: 0c01                                   |000c: move-result-object v1
+005156: 1c02 0e00                              |000d: const-class v2, Linvokecustom/InvokeCustom; // type@000e
+00515a: 6e20 b900 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005160: 0c01                                   |0012: move-result-object v1
+005162: 6e10 bb00 0100                         |0013: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005168: 0c01                                   |0016: move-result-object v1
+00516a: 6e20 b100 1000                         |0017: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005170: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=125
+        0x001a line=126
+      locals        :
+        0x0000 - 0x001b reg=3 this Linvokecustom/InvokeCustom2;
+
+    #1              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'run'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+005174:                                        |[005174] invokecustom.InvokeCustom2.run:()V
+005184: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005188: 1a01 6e00                              |0002: const-string v1, "run() for Test9" // string@006e
+00518c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005192: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=133
+        0x0007 line=134
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom2;
+
+    #2              : (in Linvokecustom/InvokeCustom2;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+005194:                                        |[005194] invokecustom.InvokeCustom2.targetMethodTest4:()V
+0051a4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0051a8: 1a01 7500                              |0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // string@0075
+0051ac: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0051b2: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=64
+        0x0007 line=65
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom2;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Class #3            -
+  Class descriptor  : 'Linvokecustom/InvokeCustom3;'
+  Access flags      : 0x0001 (PUBLIC)
+  Superclass        : 'Linvokecustom/Super;'
+  Interfaces        -
+    #0              : 'Ljava/lang/Runnable;'
+  Static fields     -
+    #0              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'staticFieldTest9'
+      type          : 'I'
+      access        : 0x000a (PRIVATE STATIC)
+  Instance fields   -
+    #0              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'fieldTest9'
+      type          : 'F'
+      access        : 0x0002 (PRIVATE)
+  Direct methods    -
+    #0              : (in Linvokecustom/InvokeCustom3;)
+      name          : '<clinit>'
+      type          : '()V'
+      access        : 0x10008 (STATIC CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+0051b4:                                        |[0051b4] invokecustom.InvokeCustom3.<clinit>:()V
+0051c4: 1200                                   |0000: const/4 v0, #int 0 // #0
+0051c6: 6700 0f00                              |0001: sput v0, Linvokecustom/InvokeCustom;.staticFieldTest9:I // field@000f
+0051ca: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=98
+      locals        :
+
+    #1              : (in Linvokecustom/InvokeCustom3;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 2
+      ins           : 1
+      outs          : 1
+      insns size    : 7 16-bit code units
+0051cc:                                        |[0051cc] invokecustom.InvokeCustom3.<init>:()V
+0051dc: 7010 a800 0100                         |0000: invoke-direct {v1}, Linvokecustom/Super;.<init>:()V // method@00a8
+0051e2: 1200                                   |0003: const/4 v0, #int 0 // #0
+0051e4: 5910 0e00                              |0004: iput v0, v1, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+0051e8: 0e00                                   |0006: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=35
+        0x0003 line=111
+        0x0006 line=35
+      locals        :
+        0x0000 - 0x0007 reg=1 this Linvokecustom/InvokeCustom3;
+
+    #2              : (in Linvokecustom/InvokeCustom3;)
+      name          : '<init>'
+      type          : '(I)V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 5
+      ins           : 2
+      outs          : 2
+      insns size    : 37 16-bit code units
+0051ec:                                        |[0051ec] invokecustom.InvokeCustom3.<init>:(I)V
+0051fc: 7010 a800 0300                         |0000: invoke-direct {v3}, Linvokecustom/Super;.<init>:()V // method@00a8
+005202: 1200                                   |0003: const/4 v0, #int 0 // #0
+005204: 5930 0e00                              |0004: iput v0, v3, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+005208: 6200 1000                              |0006: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00520c: 2201 1700                              |0008: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005210: 7010 b400 0100                         |000a: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005216: 1a02 1800                              |000d: const-string v2, "InvokeCustom.<init>(" // string@0018
+00521a: 6e20 ba00 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005220: 0c01                                   |0012: move-result-object v1
+005222: 6e20 b700 4100                         |0013: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005228: 0c01                                   |0016: move-result-object v1
+00522a: 1a02 0700                              |0017: const-string v2, ")" // string@0007
+00522e: 6e20 ba00 2100                         |0019: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005234: 0c01                                   |001c: move-result-object v1
+005236: 6e10 bb00 0100                         |001d: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00523c: 0c01                                   |0020: move-result-object v1
+00523e: 6e20 b100 1000                         |0021: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005244: 0e00                                   |0024: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=36
+        0x0003 line=111
+        0x0006 line=37
+        0x0024 line=38
+      locals        :
+        0x0000 - 0x0025 reg=3 this Linvokecustom/InvokeCustom3;
+        0x0000 - 0x0025 reg=4 (null) I
+
+    #3              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'bsmCreateCallSite'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 4
+      outs          : 2
+      insns size    : 36 16-bit code units
+005248:                                        |[005248] invokecustom.InvokeCustom3.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+005258: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00525c: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005260: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005266: 1a02 5600                              |0007: const-string v2, "bsmCreateCallSite [" // string@0056
+00526a: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005270: 0c01                                   |000c: move-result-object v1
+005272: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005278: 0c01                                   |0010: move-result-object v1
+00527a: 1a02 5200                              |0011: const-string v2, "]" // string@0052
+00527e: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005284: 0c01                                   |0016: move-result-object v1
+005286: 6e10 bb00 0100                         |0017: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00528c: 0c01                                   |001a: move-result-object v1
+00528e: 6e20 b100 1000                         |001b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005294: 2200 1b00                              |001e: new-instance v0, Ljava/lang/invoke/ConstantCallSite; // type@001b
+005298: 7020 bc00 6000                         |0020: invoke-direct {v0, v6}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+00529e: 1100                                   |0023: return-object v0
+      catches       : (none)
+      positions     :
+        0x0000 line=156
+        0x001e line=157
+      locals        :
+        0x0000 - 0x0024 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0024 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0024 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0024 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+
+    #4              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'bsmLookupStatic'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 3
+      outs          : 4
+      insns size    : 29 16-bit code units
+0052a0:                                        |[0052a0] invokecustom.InvokeCustom3.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+0052b0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0052b4: 1a01 5800                              |0002: const-string v1, "bsmLookupStatic []" // string@0058
+0052b8: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0052be: 7100 c900 0000                         |0007: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+0052c4: 0c00                                   |000a: move-result-object v0
+0052c6: 6e10 c800 0000                         |000b: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+0052cc: 0c01                                   |000e: move-result-object v1
+0052ce: 6e40 c700 1043                         |000f: invoke-virtual {v0, v1, v3, v4}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+0052d4: 0c00                                   |0012: move-result-object v0
+0052d6: 2201 1b00                              |0013: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0052da: 6e20 bd00 4000                         |0015: invoke-virtual {v0, v4}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+0052e0: 0c00                                   |0018: move-result-object v0
+0052e2: 7020 bc00 0100                         |0019: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0052e8: 1101                                   |001c: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=138
+        0x0007 line=139
+        0x000b line=140
+        0x0013 line=141
+      locals        :
+        0x0000 - 0x001d reg=2 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x001d reg=3 (null) Ljava/lang/String;
+        0x0000 - 0x001d reg=4 (null) Ljava/lang/invoke/MethodType;
+
+    #5              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'bsmLookupStaticWithExtraArgs'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 9
+      outs          : 4
+      insns size    : 82 16-bit code units
+0052ec:                                        |[0052ec] invokecustom.InvokeCustom3.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+0052fc: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005300: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005304: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00530a: 1a02 5a00                              |0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // string@005a
+00530e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005314: 0c01                                   |000c: move-result-object v1
+005316: 6e20 b700 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00531c: 0c01                                   |0010: move-result-object v1
+00531e: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+005322: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005328: 0c01                                   |0016: move-result-object v1
+00532a: 6e30 b800 7108                         |0017: invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+005330: 0c01                                   |001a: move-result-object v1
+005332: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+005336: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00533c: 0c01                                   |0020: move-result-object v1
+00533e: 6e20 b600 9100                         |0021: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+005344: 0c01                                   |0024: move-result-object v1
+005346: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+00534a: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005350: 0c01                                   |002a: move-result-object v1
+005352: 6e30 b500 a10b                         |002b: invoke-virtual {v1, v10, v11}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+005358: 0c01                                   |002e: move-result-object v1
+00535a: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+00535e: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005364: 0c01                                   |0034: move-result-object v1
+005366: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00536c: 0c01                                   |0038: move-result-object v1
+00536e: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005374: 7100 c900 0000                         |003c: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+00537a: 0c00                                   |003f: move-result-object v0
+00537c: 6e10 c800 0000                         |0040: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+005382: 0c01                                   |0043: move-result-object v1
+005384: 6e40 c700 1054                         |0044: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+00538a: 0c00                                   |0047: move-result-object v0
+00538c: 2201 1b00                              |0048: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+005390: 6e20 bd00 5000                         |004a: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+005396: 0c00                                   |004d: move-result-object v0
+005398: 7020 bc00 0100                         |004e: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+00539e: 1101                                   |0051: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=147
+        0x003c line=148
+        0x0040 line=149
+        0x0048 line=150
+      locals        :
+        0x0000 - 0x0052 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0052 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0052 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0052 reg=6 (null) I
+        0x0000 - 0x0052 reg=7 (null) J
+        0x0000 - 0x0052 reg=9 (null) F
+        0x0000 - 0x0052 reg=10 (null) D
+
+    #6              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'bsmLookupTest9'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 13
+      ins           : 10
+      outs          : 4
+      insns size    : 135 16-bit code units
+0053a0:                                        |[0053a0] invokecustom.InvokeCustom3.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+0053b0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0053b4: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0053b8: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0053be: 1a02 5c00                              |0007: const-string v2, "bsmLookupTest9 [" // string@005c
+0053c2: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0053c8: 0c01                                   |000c: move-result-object v1
+0053ca: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0053d0: 0c01                                   |0010: move-result-object v1
+0053d2: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+0053d6: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0053dc: 0c01                                   |0016: move-result-object v1
+0053de: 6e20 b900 7100                         |0017: invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0053e4: 0c01                                   |001a: move-result-object v1
+0053e6: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+0053ea: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0053f0: 0c01                                   |0020: move-result-object v1
+0053f2: 6e20 b900 8100                         |0021: invoke-virtual {v1, v8}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0053f8: 0c01                                   |0024: move-result-object v1
+0053fa: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+0053fe: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005404: 0c01                                   |002a: move-result-object v1
+005406: 6e20 b900 9100                         |002b: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+00540c: 0c01                                   |002e: move-result-object v1
+00540e: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+005412: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005418: 0c01                                   |0034: move-result-object v1
+00541a: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005420: 0c01                                   |0038: move-result-object v1
+005422: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005428: 6200 1000                              |003c: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00542c: 2201 1700                              |003e: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005430: 7010 b400 0100                         |0040: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005436: 6e20 ba00 4100                         |0043: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00543c: 0c01                                   |0046: move-result-object v1
+00543e: 1a02 0000                              |0047: const-string v2, " " // string@0000
+005442: 6e20 ba00 2100                         |0049: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005448: 0c01                                   |004c: move-result-object v1
+00544a: 6e20 b900 5100                         |004d: invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005450: 0c01                                   |0050: move-result-object v1
+005452: 6e10 bb00 0100                         |0051: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005458: 0c01                                   |0054: move-result-object v1
+00545a: 6e20 b100 1000                         |0055: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005460: 7120 9b00 7600                         |0058: invoke-static {v6, v7}, Linvokecustom/InvokeCustom;.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009b
+005466: 2200 0e00                              |005b: new-instance v0, Linvokecustom/InvokeCustom; // type@000e
+00546a: 7010 9400 0000                         |005d: invoke-direct {v0}, Linvokecustom/InvokeCustom;.<init>:()V // method@0094
+005470: 6f30 9a00 8009                         |0060: invoke-super {v0, v8, v9}, Linvokecustom/InvokeCustom;.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009a
+005476: fa20 c300 0a00 1c00                    |0063: invoke-polymorphic {v10, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00c3, proto@001c
+00547e: 1230                                   |0067: const/4 v0, #int 3 // #3
+005480: fa20 c300 0b00 0500                    |0068: invoke-polymorphic {v11, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@00c3, proto@0005
+005488: 0c00                                   |006c: move-result-object v0
+00548a: fa20 be00 0c00 1c00                    |006d: invoke-polymorphic {v12, v0}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00be, proto@001c
+005492: 7100 c900 0000                         |0071: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+005498: 0c00                                   |0074: move-result-object v0
+00549a: 6e10 c800 0000                         |0075: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+0054a0: 0c01                                   |0078: move-result-object v1
+0054a2: 6e40 c700 1054                         |0079: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+0054a8: 0c00                                   |007c: move-result-object v0
+0054aa: 2201 1b00                              |007d: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0054ae: 6e20 bd00 5000                         |007f: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+0054b4: 0c00                                   |0082: move-result-object v0
+0054b6: 7020 bc00 0100                         |0083: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0054bc: 1101                                   |0086: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=166
+        0x003c line=168
+        0x0058 line=171
+        0x005b line=172
+        0x0060 line=173
+        0x0063 line=176
+        0x0067 line=178
+        0x006d line=179
+        0x0071 line=181
+        0x0075 line=182
+        0x007d line=183
+      locals        :
+        0x0000 - 0x0087 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0087 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0087 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0087 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=9 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=10 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=11 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=12 (null) Ljava/lang/invoke/MethodHandle;
+
+    #7              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'checkFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x0002 (PRIVATE)
+      code          -
+      registers     : 9
+      ins           : 3
+      outs          : 3
+      insns size    : 82 16-bit code units
+0054c0:                                        |[0054c0] invokecustom.InvokeCustom3.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+0054d0: 1405 0ff0 6a20                         |0000: const v5, #float 1.99e-19 // #206af00f
+0054d6: fa20 c300 6700 0100                    |0003: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+0054de: 0a00                                   |0007: move-result v0
+0054e0: fa30 c300 6805 1d00                    |0008: invoke-polymorphic {v8, v6, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@00c3, proto@001d
+0054e8: fa20 c300 6700 0100                    |000c: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+0054f0: 0a01                                   |0010: move-result v1
+0054f2: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0054f6: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0054fa: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005500: 1a04 5e00                              |0018: const-string v4, "checkFieldTest9: old " // string@005e
+005504: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00550a: 0c03                                   |001d: move-result-object v3
+00550c: 6e20 b600 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+005512: 0c00                                   |0021: move-result-object v0
+005514: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+005518: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00551e: 0c00                                   |0027: move-result-object v0
+005520: 6e20 b600 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+005526: 0c00                                   |002b: move-result-object v0
+005528: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+00552c: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005532: 0c00                                   |0031: move-result-object v0
+005534: 6e20 b600 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00553a: 0c00                                   |0035: move-result-object v0
+00553c: 1a03 0000                              |0036: const-string v3, " " // string@0000
+005540: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005546: 0c00                                   |003b: move-result-object v0
+005548: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00554e: 0c00                                   |003f: move-result-object v0
+005550: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+005556: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00555a: 2d00 0105                              |0045: cmpl-float v0, v1, v5
+00555e: 3900 0800                              |0047: if-nez v0, 004f // +0008
+005562: 1a00 4000                              |0049: const-string v0, "OK" // string@0040
+005566: 6e20 b100 0200                         |004b: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00556c: 0e00                                   |004e: return-void
+00556e: 1a00 1000                              |004f: const-string v0, "ERROR" // string@0010
+005572: 28fa                                   |0051: goto 004b // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=116
+        0x0008 line=117
+        0x000c line=118
+        0x0011 line=119
+        0x0043 line=121
+        0x004e line=122
+        0x004f line=121
+      locals        :
+        0x0000 - 0x0052 reg=6 this Linvokecustom/InvokeCustom3;
+        0x0000 - 0x0052 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0052 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+
+    #8              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'checkStaticFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 8
+      ins           : 2
+      outs          : 2
+      insns size    : 80 16-bit code units
+005574:                                        |[005574] invokecustom.InvokeCustom3.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+005584: 1405 1032 5476                         |0000: const v5, #float 1.07596e+33 // #76543210
+00558a: fa10 c300 0600 0200                    |0003: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+005592: 0a00                                   |0007: move-result v0
+005594: fa20 c300 5700 1a00                    |0008: invoke-polymorphic {v7, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@00c3, proto@001a
+00559c: fa10 c300 0600 0200                    |000c: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+0055a4: 0a01                                   |0010: move-result v1
+0055a6: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0055aa: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0055ae: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0055b4: 1a04 6000                              |0018: const-string v4, "checkStaticFieldTest9: old " // string@0060
+0055b8: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0055be: 0c03                                   |001d: move-result-object v3
+0055c0: 6e20 b700 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0055c6: 0c00                                   |0021: move-result-object v0
+0055c8: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+0055cc: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0055d2: 0c00                                   |0027: move-result-object v0
+0055d4: 6e20 b700 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0055da: 0c00                                   |002b: move-result-object v0
+0055dc: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+0055e0: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0055e6: 0c00                                   |0031: move-result-object v0
+0055e8: 6e20 b700 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0055ee: 0c00                                   |0035: move-result-object v0
+0055f0: 1a03 0000                              |0036: const-string v3, " " // string@0000
+0055f4: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0055fa: 0c00                                   |003b: move-result-object v0
+0055fc: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005602: 0c00                                   |003f: move-result-object v0
+005604: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+00560a: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00560e: 3351 0800                              |0045: if-ne v1, v5, 004d // +0008
+005612: 1a00 4000                              |0047: const-string v0, "OK" // string@0040
+005616: 6e20 b100 0200                         |0049: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00561c: 0e00                                   |004c: return-void
+00561e: 1a00 1000                              |004d: const-string v0, "ERROR" // string@0010
+005622: 28fa                                   |004f: goto 0049 // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=103
+        0x0008 line=104
+        0x000c line=105
+        0x0011 line=106
+        0x0043 line=108
+        0x004c line=109
+        0x004d line=108
+      locals        :
+        0x0000 - 0x0050 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0050 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+
+    #9              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest1'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+005624:                                        |[005624] invokecustom.InvokeCustom3.targetMethodTest1:()V
+005634: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005638: 1a01 1500                              |0002: const-string v1, "Hello World!" // string@0015
+00563c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005642: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=41
+        0x0007 line=42
+      locals        :
+
+    #10              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest2'
+      type          : '(ZBCSIFJDLjava/lang/String;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 13
+      ins           : 11
+      outs          : 3
+      insns size    : 46 16-bit code units
+005644:                                        |[005644] invokecustom.InvokeCustom3.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+005654: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005658: 6e20 b200 2000                         |0002: invoke-virtual {v0, v2}, Ljava/io/PrintStream;.println:(Z)V // method@00b2
+00565e: 6200 1000                              |0005: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005662: 6e20 af00 3000                         |0007: invoke-virtual {v0, v3}, Ljava/io/PrintStream;.println:(I)V // method@00af
+005668: 6200 1000                              |000a: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00566c: 6e20 ac00 4000                         |000c: invoke-virtual {v0, v4}, Ljava/io/PrintStream;.println:(C)V // method@00ac
+005672: 6200 1000                              |000f: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005676: 6e20 af00 5000                         |0011: invoke-virtual {v0, v5}, Ljava/io/PrintStream;.println:(I)V // method@00af
+00567c: 6200 1000                              |0014: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005680: 6e20 af00 6000                         |0016: invoke-virtual {v0, v6}, Ljava/io/PrintStream;.println:(I)V // method@00af
+005686: 6200 1000                              |0019: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00568a: 6e20 ae00 7000                         |001b: invoke-virtual {v0, v7}, Ljava/io/PrintStream;.println:(F)V // method@00ae
+005690: 6200 1000                              |001e: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005694: 6e30 b000 8009                         |0020: invoke-virtual {v0, v8, v9}, Ljava/io/PrintStream;.println:(J)V // method@00b0
+00569a: 6200 1000                              |0023: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00569e: 6e30 ad00 a00b                         |0025: invoke-virtual {v0, v10, v11}, Ljava/io/PrintStream;.println:(D)V // method@00ad
+0056a4: 6200 1000                              |0028: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0056a8: 6e20 b100 c000                         |002a: invoke-virtual {v0, v12}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0056ae: 0e00                                   |002d: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=46
+        0x0005 line=47
+        0x000a line=48
+        0x000f line=49
+        0x0014 line=50
+        0x0019 line=51
+        0x001e line=52
+        0x0023 line=53
+        0x0028 line=54
+        0x002d line=55
+      locals        :
+        0x0000 - 0x002e reg=2 (null) Z
+        0x0000 - 0x002e reg=3 (null) B
+        0x0000 - 0x002e reg=4 (null) C
+        0x0000 - 0x002e reg=5 (null) S
+        0x0000 - 0x002e reg=6 (null) I
+        0x0000 - 0x002e reg=7 (null) F
+        0x0000 - 0x002e reg=8 (null) J
+        0x0000 - 0x002e reg=10 (null) D
+        0x0000 - 0x002e reg=12 (null) Ljava/lang/String;
+
+    #11              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest3'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+0056b0:                                        |[0056b0] invokecustom.InvokeCustom3.targetMethodTest3:()V
+0056c0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0056c4: 1a01 7300                              |0002: const-string v1, "targetMethodTest3 from InvokeCustom" // string@0073
+0056c8: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0056ce: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=58
+        0x0007 line=59
+      locals        :
+
+    #12              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest5'
+      type          : '(III)I'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 3
+      outs          : 2
+      insns size    : 83 16-bit code units
+0056d0:                                        |[0056d0] invokecustom.InvokeCustom3.targetMethodTest5:(III)I
+0056e0: 9000 0405                              |0000: add-int v0, v4, v5
+0056e4: 6201 1000                              |0002: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0056e8: 2202 1700                              |0004: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+0056ec: 7010 b400 0200                         |0006: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0056f2: 1a03 7800                              |0009: const-string v3, "targetMethodTest5 " // string@0078
+0056f6: 6e20 ba00 3200                         |000b: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0056fc: 0c02                                   |000e: move-result-object v2
+0056fe: 6e20 b700 4200                         |000f: invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005704: 0c02                                   |0012: move-result-object v2
+005706: 1a03 0300                              |0013: const-string v3, " + " // string@0003
+00570a: 6e20 ba00 3200                         |0015: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005710: 0c02                                   |0018: move-result-object v2
+005712: 6e20 b700 5200                         |0019: invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005718: 0c02                                   |001c: move-result-object v2
+00571a: 1a03 0400                              |001d: const-string v3, " = " // string@0004
+00571e: 6e20 ba00 3200                         |001f: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005724: 0c02                                   |0022: move-result-object v2
+005726: 6e20 b700 0200                         |0023: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00572c: 0c02                                   |0026: move-result-object v2
+00572e: 6e10 bb00 0200                         |0027: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005734: 0c02                                   |002a: move-result-object v2
+005736: 6e20 b100 2100                         |002b: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00573c: 3260 2400                              |002e: if-eq v0, v6, 0052 // +0024
+005740: 6201 1000                              |0030: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005744: 2202 1700                              |0032: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+005748: 7010 b400 0200                         |0034: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00574e: 1a03 1300                              |0037: const-string v3, "Failed " // string@0013
+005752: 6e20 ba00 3200                         |0039: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005758: 0c02                                   |003c: move-result-object v2
+00575a: 6e20 b700 0200                         |003d: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005760: 0c02                                   |0040: move-result-object v2
+005762: 1a03 0100                              |0041: const-string v3, " != " // string@0001
+005766: 6e20 ba00 3200                         |0043: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00576c: 0c02                                   |0046: move-result-object v2
+00576e: 6e20 b700 6200                         |0047: invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005774: 0c02                                   |004a: move-result-object v2
+005776: 6e10 bb00 0200                         |004b: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00577c: 0c02                                   |004e: move-result-object v2
+00577e: 6e20 b100 2100                         |004f: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005784: 0f00                                   |0052: return v0
+      catches       : (none)
+      positions     :
+        0x0000 line=68
+        0x0002 line=69
+        0x002e line=70
+        0x0030 line=71
+        0x0052 line=73
+      locals        :
+        0x0000 - 0x0053 reg=4 (null) I
+        0x0000 - 0x0053 reg=5 (null) I
+        0x0000 - 0x0053 reg=6 (null) I
+
+    #13              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest6'
+      type          : '(JJJ)J'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 6
+      outs          : 3
+      insns size    : 85 16-bit code units
+005788:                                        |[005788] invokecustom.InvokeCustom3.targetMethodTest6:(JJJ)J
+005798: 9b00 0608                              |0000: add-long v0, v6, v8
+00579c: 6202 1000                              |0002: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0057a0: 2203 1700                              |0004: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0057a4: 7010 b400 0300                         |0006: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0057aa: 1a04 7b00                              |0009: const-string v4, "targetMethodTest6 " // string@007b
+0057ae: 6e20 ba00 4300                         |000b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0057b4: 0c03                                   |000e: move-result-object v3
+0057b6: 6e30 b800 6307                         |000f: invoke-virtual {v3, v6, v7}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0057bc: 0c03                                   |0012: move-result-object v3
+0057be: 1a04 0300                              |0013: const-string v4, " + " // string@0003
+0057c2: 6e20 ba00 4300                         |0015: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0057c8: 0c03                                   |0018: move-result-object v3
+0057ca: 6e30 b800 8309                         |0019: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0057d0: 0c03                                   |001c: move-result-object v3
+0057d2: 1a04 0400                              |001d: const-string v4, " = " // string@0004
+0057d6: 6e20 ba00 4300                         |001f: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0057dc: 0c03                                   |0022: move-result-object v3
+0057de: 6e30 b800 0301                         |0023: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0057e4: 0c03                                   |0026: move-result-object v3
+0057e6: 6e10 bb00 0300                         |0027: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0057ec: 0c03                                   |002a: move-result-object v3
+0057ee: 6e20 b100 3200                         |002b: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0057f4: 3102 000a                              |002e: cmp-long v2, v0, v10
+0057f8: 3802 2400                              |0030: if-eqz v2, 0054 // +0024
+0057fc: 6202 1000                              |0032: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005800: 2203 1700                              |0034: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+005804: 7010 b400 0300                         |0036: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00580a: 1a04 1300                              |0039: const-string v4, "Failed " // string@0013
+00580e: 6e20 ba00 4300                         |003b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005814: 0c03                                   |003e: move-result-object v3
+005816: 6e30 b800 0301                         |003f: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+00581c: 0c03                                   |0042: move-result-object v3
+00581e: 1a04 0100                              |0043: const-string v4, " != " // string@0001
+005822: 6e20 ba00 4300                         |0045: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005828: 0c03                                   |0048: move-result-object v3
+00582a: 6e30 b800 a30b                         |0049: invoke-virtual {v3, v10, v11}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+005830: 0c03                                   |004c: move-result-object v3
+005832: 6e10 bb00 0300                         |004d: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005838: 0c03                                   |0050: move-result-object v3
+00583a: 6e20 b100 3200                         |0051: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005840: 1000                                   |0054: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=77
+        0x0002 line=78
+        0x002e line=79
+        0x0032 line=80
+        0x0054 line=82
+      locals        :
+        0x0000 - 0x0055 reg=6 (null) J
+        0x0000 - 0x0055 reg=8 (null) J
+        0x0000 - 0x0055 reg=10 (null) J
+
+    #14              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest7'
+      type          : '(FFD)D'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 10
+      ins           : 4
+      outs          : 3
+      insns size    : 86 16-bit code units
+005844:                                        |[005844] invokecustom.InvokeCustom3.targetMethodTest7:(FFD)D
+005854: a800 0607                              |0000: mul-float v0, v6, v7
+005858: 8900                                   |0002: float-to-double v0, v0
+00585a: 6202 1000                              |0003: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00585e: 2203 1700                              |0005: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+005862: 7010 b400 0300                         |0007: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005868: 1a04 7e00                              |000a: const-string v4, "targetMethodTest7 " // string@007e
+00586c: 6e20 ba00 4300                         |000c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005872: 0c03                                   |000f: move-result-object v3
+005874: 6e20 b600 6300                         |0010: invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00587a: 0c03                                   |0013: move-result-object v3
+00587c: 1a04 0200                              |0014: const-string v4, " * " // string@0002
+005880: 6e20 ba00 4300                         |0016: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005886: 0c03                                   |0019: move-result-object v3
+005888: 6e20 b600 7300                         |001a: invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00588e: 0c03                                   |001d: move-result-object v3
+005890: 1a04 0400                              |001e: const-string v4, " = " // string@0004
+005894: 6e20 ba00 4300                         |0020: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00589a: 0c03                                   |0023: move-result-object v3
+00589c: 6e30 b500 0301                         |0024: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+0058a2: 0c03                                   |0027: move-result-object v3
+0058a4: 6e10 bb00 0300                         |0028: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0058aa: 0c03                                   |002b: move-result-object v3
+0058ac: 6e20 b100 3200                         |002c: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0058b2: 2f02 0008                              |002f: cmpl-double v2, v0, v8
+0058b6: 3802 2400                              |0031: if-eqz v2, 0055 // +0024
+0058ba: 6202 1000                              |0033: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0058be: 2203 1700                              |0035: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0058c2: 7010 b400 0300                         |0037: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0058c8: 1a04 1300                              |003a: const-string v4, "Failed " // string@0013
+0058cc: 6e20 ba00 4300                         |003c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0058d2: 0c03                                   |003f: move-result-object v3
+0058d4: 6e30 b500 0301                         |0040: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+0058da: 0c03                                   |0043: move-result-object v3
+0058dc: 1a04 0100                              |0044: const-string v4, " != " // string@0001
+0058e0: 6e20 ba00 4300                         |0046: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0058e6: 0c03                                   |0049: move-result-object v3
+0058e8: 6e30 b500 8309                         |004a: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+0058ee: 0c03                                   |004d: move-result-object v3
+0058f0: 6e10 bb00 0300                         |004e: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0058f6: 0c03                                   |0051: move-result-object v3
+0058f8: 6e20 b100 3200                         |0052: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0058fe: 1000                                   |0055: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=86
+        0x0003 line=87
+        0x002f line=88
+        0x0033 line=89
+        0x0055 line=91
+      locals        :
+        0x0000 - 0x0056 reg=6 (null) F
+        0x0000 - 0x0056 reg=7 (null) F
+        0x0000 - 0x0056 reg=8 (null) D
+
+    #15              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest8'
+      type          : '(Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 25 16-bit code units
+005900:                                        |[005900] invokecustom.InvokeCustom3.targetMethodTest8:(Ljava/lang/String;)V
+005910: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005914: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005918: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00591e: 1a02 8000                              |0007: const-string v2, "targetMethodTest8 " // string@0080
+005922: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005928: 0c01                                   |000c: move-result-object v1
+00592a: 6e20 ba00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005930: 0c01                                   |0010: move-result-object v1
+005932: 6e10 bb00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005938: 0c01                                   |0014: move-result-object v1
+00593a: 6e20 b100 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005940: 0e00                                   |0018: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=95
+        0x0018 line=96
+      locals        :
+        0x0000 - 0x0019 reg=3 (null) Ljava/lang/String;
+
+    #16              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest9'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+005944:                                        |[005944] invokecustom.InvokeCustom3.targetMethodTest9:()V
+005954: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005958: 1a01 8200                              |0002: const-string v1, "targetMethodTest9()" // string@0082
+00595c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005962: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=129
+        0x0007 line=130
+      locals        :
+
+    #17              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'test3'
+      type          : '()V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 0
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+005964:                                        |[005964] invokecustom.InvokeCustom3.test3:()V
+005974: fc00 0200 0000                         |0000: invoke-custom {}, call_site@0002
+00597a: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+      locals        :
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 27 16-bit code units
+00597c:                                        |[00597c] invokecustom.InvokeCustom3.helperMethodTest9:()V
+00598c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005990: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005994: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00599a: 1a02 6400                              |0007: const-string v2, "helperMethodTest9 in " // string@0064
+00599e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0059a4: 0c01                                   |000c: move-result-object v1
+0059a6: 1c02 0e00                              |000d: const-class v2, Linvokecustom/InvokeCustom; // type@000e
+0059aa: 6e20 b900 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0059b0: 0c01                                   |0012: move-result-object v1
+0059b2: 6e10 bb00 0100                         |0013: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0059b8: 0c01                                   |0016: move-result-object v1
+0059ba: 6e20 b100 1000                         |0017: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0059c0: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=125
+        0x001a line=126
+      locals        :
+        0x0000 - 0x001b reg=3 this Linvokecustom/InvokeCustom3;
+
+    #1              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'run'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+0059c4:                                        |[0059c4] invokecustom.InvokeCustom3.run:()V
+0059d4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0059d8: 1a01 6e00                              |0002: const-string v1, "run() for Test9" // string@006e
+0059dc: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0059e2: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=133
+        0x0007 line=134
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom3;
+
+    #2              : (in Linvokecustom/InvokeCustom3;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+0059e4:                                        |[0059e4] invokecustom.InvokeCustom3.targetMethodTest4:()V
+0059f4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0059f8: 1a01 7500                              |0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // string@0075
+0059fc: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005a02: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=64
+        0x0007 line=65
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom3;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Class #4            -
+  Class descriptor  : 'Linvokecustom/InvokeCustom5;'
+  Access flags      : 0x0001 (PUBLIC)
+  Superclass        : 'Linvokecustom/Super;'
+  Interfaces        -
+    #0              : 'Ljava/lang/Runnable;'
+  Static fields     -
+    #0              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'staticFieldTest9'
+      type          : 'I'
+      access        : 0x000a (PRIVATE STATIC)
+  Instance fields   -
+    #0              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'fieldTest9'
+      type          : 'F'
+      access        : 0x0002 (PRIVATE)
+  Direct methods    -
+    #0              : (in Linvokecustom/InvokeCustom5;)
+      name          : '<clinit>'
+      type          : '()V'
+      access        : 0x10008 (STATIC CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+005a04:                                        |[005a04] invokecustom.InvokeCustom5.<clinit>:()V
+005a14: 1200                                   |0000: const/4 v0, #int 0 // #0
+005a16: 6700 0f00                              |0001: sput v0, Linvokecustom/InvokeCustom;.staticFieldTest9:I // field@000f
+005a1a: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=98
+      locals        :
+
+    #1              : (in Linvokecustom/InvokeCustom5;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 2
+      ins           : 1
+      outs          : 1
+      insns size    : 7 16-bit code units
+005a1c:                                        |[005a1c] invokecustom.InvokeCustom5.<init>:()V
+005a2c: 7010 a800 0100                         |0000: invoke-direct {v1}, Linvokecustom/Super;.<init>:()V // method@00a8
+005a32: 1200                                   |0003: const/4 v0, #int 0 // #0
+005a34: 5910 0e00                              |0004: iput v0, v1, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+005a38: 0e00                                   |0006: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=35
+        0x0003 line=111
+        0x0006 line=35
+      locals        :
+        0x0000 - 0x0007 reg=1 this Linvokecustom/InvokeCustom5;
+
+    #2              : (in Linvokecustom/InvokeCustom5;)
+      name          : '<init>'
+      type          : '(I)V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 5
+      ins           : 2
+      outs          : 2
+      insns size    : 37 16-bit code units
+005a3c:                                        |[005a3c] invokecustom.InvokeCustom5.<init>:(I)V
+005a4c: 7010 a800 0300                         |0000: invoke-direct {v3}, Linvokecustom/Super;.<init>:()V // method@00a8
+005a52: 1200                                   |0003: const/4 v0, #int 0 // #0
+005a54: 5930 0e00                              |0004: iput v0, v3, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+005a58: 6200 1000                              |0006: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005a5c: 2201 1700                              |0008: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005a60: 7010 b400 0100                         |000a: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005a66: 1a02 1800                              |000d: const-string v2, "InvokeCustom.<init>(" // string@0018
+005a6a: 6e20 ba00 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005a70: 0c01                                   |0012: move-result-object v1
+005a72: 6e20 b700 4100                         |0013: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005a78: 0c01                                   |0016: move-result-object v1
+005a7a: 1a02 0700                              |0017: const-string v2, ")" // string@0007
+005a7e: 6e20 ba00 2100                         |0019: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005a84: 0c01                                   |001c: move-result-object v1
+005a86: 6e10 bb00 0100                         |001d: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005a8c: 0c01                                   |0020: move-result-object v1
+005a8e: 6e20 b100 1000                         |0021: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005a94: 0e00                                   |0024: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=36
+        0x0003 line=111
+        0x0006 line=37
+        0x0024 line=38
+      locals        :
+        0x0000 - 0x0025 reg=3 this Linvokecustom/InvokeCustom5;
+        0x0000 - 0x0025 reg=4 (null) I
+
+    #3              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'bsmCreateCallSite'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 4
+      outs          : 2
+      insns size    : 36 16-bit code units
+005a98:                                        |[005a98] invokecustom.InvokeCustom5.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+005aa8: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005aac: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005ab0: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005ab6: 1a02 5600                              |0007: const-string v2, "bsmCreateCallSite [" // string@0056
+005aba: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005ac0: 0c01                                   |000c: move-result-object v1
+005ac2: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005ac8: 0c01                                   |0010: move-result-object v1
+005aca: 1a02 5200                              |0011: const-string v2, "]" // string@0052
+005ace: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005ad4: 0c01                                   |0016: move-result-object v1
+005ad6: 6e10 bb00 0100                         |0017: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005adc: 0c01                                   |001a: move-result-object v1
+005ade: 6e20 b100 1000                         |001b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005ae4: 2200 1b00                              |001e: new-instance v0, Ljava/lang/invoke/ConstantCallSite; // type@001b
+005ae8: 7020 bc00 6000                         |0020: invoke-direct {v0, v6}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+005aee: 1100                                   |0023: return-object v0
+      catches       : (none)
+      positions     :
+        0x0000 line=156
+        0x001e line=157
+      locals        :
+        0x0000 - 0x0024 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0024 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0024 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0024 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+
+    #4              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'bsmLookupStatic'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 3
+      outs          : 4
+      insns size    : 29 16-bit code units
+005af0:                                        |[005af0] invokecustom.InvokeCustom5.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+005b00: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005b04: 1a01 5800                              |0002: const-string v1, "bsmLookupStatic []" // string@0058
+005b08: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005b0e: 7100 c900 0000                         |0007: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+005b14: 0c00                                   |000a: move-result-object v0
+005b16: 6e10 c800 0000                         |000b: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+005b1c: 0c01                                   |000e: move-result-object v1
+005b1e: 6e40 c700 1043                         |000f: invoke-virtual {v0, v1, v3, v4}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+005b24: 0c00                                   |0012: move-result-object v0
+005b26: 2201 1b00                              |0013: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+005b2a: 6e20 bd00 4000                         |0015: invoke-virtual {v0, v4}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+005b30: 0c00                                   |0018: move-result-object v0
+005b32: 7020 bc00 0100                         |0019: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+005b38: 1101                                   |001c: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=138
+        0x0007 line=139
+        0x000b line=140
+        0x0013 line=141
+      locals        :
+        0x0000 - 0x001d reg=2 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x001d reg=3 (null) Ljava/lang/String;
+        0x0000 - 0x001d reg=4 (null) Ljava/lang/invoke/MethodType;
+
+    #5              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'bsmLookupStaticWithExtraArgs'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 9
+      outs          : 4
+      insns size    : 82 16-bit code units
+005b3c:                                        |[005b3c] invokecustom.InvokeCustom5.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+005b4c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005b50: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005b54: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005b5a: 1a02 5a00                              |0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // string@005a
+005b5e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005b64: 0c01                                   |000c: move-result-object v1
+005b66: 6e20 b700 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005b6c: 0c01                                   |0010: move-result-object v1
+005b6e: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+005b72: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005b78: 0c01                                   |0016: move-result-object v1
+005b7a: 6e30 b800 7108                         |0017: invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+005b80: 0c01                                   |001a: move-result-object v1
+005b82: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+005b86: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005b8c: 0c01                                   |0020: move-result-object v1
+005b8e: 6e20 b600 9100                         |0021: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+005b94: 0c01                                   |0024: move-result-object v1
+005b96: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+005b9a: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005ba0: 0c01                                   |002a: move-result-object v1
+005ba2: 6e30 b500 a10b                         |002b: invoke-virtual {v1, v10, v11}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+005ba8: 0c01                                   |002e: move-result-object v1
+005baa: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+005bae: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005bb4: 0c01                                   |0034: move-result-object v1
+005bb6: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005bbc: 0c01                                   |0038: move-result-object v1
+005bbe: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005bc4: 7100 c900 0000                         |003c: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+005bca: 0c00                                   |003f: move-result-object v0
+005bcc: 6e10 c800 0000                         |0040: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+005bd2: 0c01                                   |0043: move-result-object v1
+005bd4: 6e40 c700 1054                         |0044: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+005bda: 0c00                                   |0047: move-result-object v0
+005bdc: 2201 1b00                              |0048: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+005be0: 6e20 bd00 5000                         |004a: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+005be6: 0c00                                   |004d: move-result-object v0
+005be8: 7020 bc00 0100                         |004e: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+005bee: 1101                                   |0051: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=147
+        0x003c line=148
+        0x0040 line=149
+        0x0048 line=150
+      locals        :
+        0x0000 - 0x0052 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0052 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0052 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0052 reg=6 (null) I
+        0x0000 - 0x0052 reg=7 (null) J
+        0x0000 - 0x0052 reg=9 (null) F
+        0x0000 - 0x0052 reg=10 (null) D
+
+    #6              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'bsmLookupTest9'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 13
+      ins           : 10
+      outs          : 4
+      insns size    : 135 16-bit code units
+005bf0:                                        |[005bf0] invokecustom.InvokeCustom5.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+005c00: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005c04: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005c08: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005c0e: 1a02 5c00                              |0007: const-string v2, "bsmLookupTest9 [" // string@005c
+005c12: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005c18: 0c01                                   |000c: move-result-object v1
+005c1a: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005c20: 0c01                                   |0010: move-result-object v1
+005c22: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+005c26: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005c2c: 0c01                                   |0016: move-result-object v1
+005c2e: 6e20 b900 7100                         |0017: invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005c34: 0c01                                   |001a: move-result-object v1
+005c36: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+005c3a: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005c40: 0c01                                   |0020: move-result-object v1
+005c42: 6e20 b900 8100                         |0021: invoke-virtual {v1, v8}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005c48: 0c01                                   |0024: move-result-object v1
+005c4a: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+005c4e: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005c54: 0c01                                   |002a: move-result-object v1
+005c56: 6e20 b900 9100                         |002b: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005c5c: 0c01                                   |002e: move-result-object v1
+005c5e: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+005c62: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005c68: 0c01                                   |0034: move-result-object v1
+005c6a: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005c70: 0c01                                   |0038: move-result-object v1
+005c72: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005c78: 6200 1000                              |003c: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005c7c: 2201 1700                              |003e: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+005c80: 7010 b400 0100                         |0040: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005c86: 6e20 ba00 4100                         |0043: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005c8c: 0c01                                   |0046: move-result-object v1
+005c8e: 1a02 0000                              |0047: const-string v2, " " // string@0000
+005c92: 6e20 ba00 2100                         |0049: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005c98: 0c01                                   |004c: move-result-object v1
+005c9a: 6e20 b900 5100                         |004d: invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+005ca0: 0c01                                   |0050: move-result-object v1
+005ca2: 6e10 bb00 0100                         |0051: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005ca8: 0c01                                   |0054: move-result-object v1
+005caa: 6e20 b100 1000                         |0055: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005cb0: 7120 9b00 7600                         |0058: invoke-static {v6, v7}, Linvokecustom/InvokeCustom;.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009b
+005cb6: 2200 0e00                              |005b: new-instance v0, Linvokecustom/InvokeCustom; // type@000e
+005cba: 7010 9400 0000                         |005d: invoke-direct {v0}, Linvokecustom/InvokeCustom;.<init>:()V // method@0094
+005cc0: 6f30 9a00 8009                         |0060: invoke-super {v0, v8, v9}, Linvokecustom/InvokeCustom;.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009a
+005cc6: fa20 c300 0a00 1c00                    |0063: invoke-polymorphic {v10, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00c3, proto@001c
+005cce: 1230                                   |0067: const/4 v0, #int 3 // #3
+005cd0: fa20 c300 0b00 0500                    |0068: invoke-polymorphic {v11, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@00c3, proto@0005
+005cd8: 0c00                                   |006c: move-result-object v0
+005cda: fa20 be00 0c00 1c00                    |006d: invoke-polymorphic {v12, v0}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00be, proto@001c
+005ce2: 7100 c900 0000                         |0071: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+005ce8: 0c00                                   |0074: move-result-object v0
+005cea: 6e10 c800 0000                         |0075: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+005cf0: 0c01                                   |0078: move-result-object v1
+005cf2: 6e40 c700 1054                         |0079: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+005cf8: 0c00                                   |007c: move-result-object v0
+005cfa: 2201 1b00                              |007d: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+005cfe: 6e20 bd00 5000                         |007f: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+005d04: 0c00                                   |0082: move-result-object v0
+005d06: 7020 bc00 0100                         |0083: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+005d0c: 1101                                   |0086: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=166
+        0x003c line=168
+        0x0058 line=171
+        0x005b line=172
+        0x0060 line=173
+        0x0063 line=176
+        0x0067 line=178
+        0x006d line=179
+        0x0071 line=181
+        0x0075 line=182
+        0x007d line=183
+      locals        :
+        0x0000 - 0x0087 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0087 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0087 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0087 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=9 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=10 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=11 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=12 (null) Ljava/lang/invoke/MethodHandle;
+
+    #7              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'checkFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x0002 (PRIVATE)
+      code          -
+      registers     : 9
+      ins           : 3
+      outs          : 3
+      insns size    : 82 16-bit code units
+005d10:                                        |[005d10] invokecustom.InvokeCustom5.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+005d20: 1405 0ff0 6a20                         |0000: const v5, #float 1.99e-19 // #206af00f
+005d26: fa20 c300 6700 0100                    |0003: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+005d2e: 0a00                                   |0007: move-result v0
+005d30: fa30 c300 6805 1d00                    |0008: invoke-polymorphic {v8, v6, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@00c3, proto@001d
+005d38: fa20 c300 6700 0100                    |000c: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+005d40: 0a01                                   |0010: move-result v1
+005d42: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005d46: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+005d4a: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005d50: 1a04 5e00                              |0018: const-string v4, "checkFieldTest9: old " // string@005e
+005d54: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005d5a: 0c03                                   |001d: move-result-object v3
+005d5c: 6e20 b600 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+005d62: 0c00                                   |0021: move-result-object v0
+005d64: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+005d68: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005d6e: 0c00                                   |0027: move-result-object v0
+005d70: 6e20 b600 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+005d76: 0c00                                   |002b: move-result-object v0
+005d78: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+005d7c: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005d82: 0c00                                   |0031: move-result-object v0
+005d84: 6e20 b600 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+005d8a: 0c00                                   |0035: move-result-object v0
+005d8c: 1a03 0000                              |0036: const-string v3, " " // string@0000
+005d90: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005d96: 0c00                                   |003b: move-result-object v0
+005d98: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005d9e: 0c00                                   |003f: move-result-object v0
+005da0: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+005da6: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005daa: 2d00 0105                              |0045: cmpl-float v0, v1, v5
+005dae: 3900 0800                              |0047: if-nez v0, 004f // +0008
+005db2: 1a00 4000                              |0049: const-string v0, "OK" // string@0040
+005db6: 6e20 b100 0200                         |004b: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005dbc: 0e00                                   |004e: return-void
+005dbe: 1a00 1000                              |004f: const-string v0, "ERROR" // string@0010
+005dc2: 28fa                                   |0051: goto 004b // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=116
+        0x0008 line=117
+        0x000c line=118
+        0x0011 line=119
+        0x0043 line=121
+        0x004e line=122
+        0x004f line=121
+      locals        :
+        0x0000 - 0x0052 reg=6 this Linvokecustom/InvokeCustom5;
+        0x0000 - 0x0052 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0052 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+
+    #8              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'checkStaticFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 8
+      ins           : 2
+      outs          : 2
+      insns size    : 80 16-bit code units
+005dc4:                                        |[005dc4] invokecustom.InvokeCustom5.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+005dd4: 1405 1032 5476                         |0000: const v5, #float 1.07596e+33 // #76543210
+005dda: fa10 c300 0600 0200                    |0003: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+005de2: 0a00                                   |0007: move-result v0
+005de4: fa20 c300 5700 1a00                    |0008: invoke-polymorphic {v7, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@00c3, proto@001a
+005dec: fa10 c300 0600 0200                    |000c: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+005df4: 0a01                                   |0010: move-result v1
+005df6: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005dfa: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+005dfe: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005e04: 1a04 6000                              |0018: const-string v4, "checkStaticFieldTest9: old " // string@0060
+005e08: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005e0e: 0c03                                   |001d: move-result-object v3
+005e10: 6e20 b700 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005e16: 0c00                                   |0021: move-result-object v0
+005e18: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+005e1c: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005e22: 0c00                                   |0027: move-result-object v0
+005e24: 6e20 b700 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005e2a: 0c00                                   |002b: move-result-object v0
+005e2c: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+005e30: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005e36: 0c00                                   |0031: move-result-object v0
+005e38: 6e20 b700 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005e3e: 0c00                                   |0035: move-result-object v0
+005e40: 1a03 0000                              |0036: const-string v3, " " // string@0000
+005e44: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005e4a: 0c00                                   |003b: move-result-object v0
+005e4c: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005e52: 0c00                                   |003f: move-result-object v0
+005e54: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+005e5a: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005e5e: 3351 0800                              |0045: if-ne v1, v5, 004d // +0008
+005e62: 1a00 4000                              |0047: const-string v0, "OK" // string@0040
+005e66: 6e20 b100 0200                         |0049: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005e6c: 0e00                                   |004c: return-void
+005e6e: 1a00 1000                              |004d: const-string v0, "ERROR" // string@0010
+005e72: 28fa                                   |004f: goto 0049 // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=103
+        0x0008 line=104
+        0x000c line=105
+        0x0011 line=106
+        0x0043 line=108
+        0x004c line=109
+        0x004d line=108
+      locals        :
+        0x0000 - 0x0050 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0050 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+
+    #9              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest1'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+005e74:                                        |[005e74] invokecustom.InvokeCustom5.targetMethodTest1:()V
+005e84: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005e88: 1a01 1500                              |0002: const-string v1, "Hello World!" // string@0015
+005e8c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005e92: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=41
+        0x0007 line=42
+      locals        :
+
+    #10              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest2'
+      type          : '(ZBCSIFJDLjava/lang/String;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 13
+      ins           : 11
+      outs          : 3
+      insns size    : 46 16-bit code units
+005e94:                                        |[005e94] invokecustom.InvokeCustom5.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+005ea4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005ea8: 6e20 b200 2000                         |0002: invoke-virtual {v0, v2}, Ljava/io/PrintStream;.println:(Z)V // method@00b2
+005eae: 6200 1000                              |0005: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005eb2: 6e20 af00 3000                         |0007: invoke-virtual {v0, v3}, Ljava/io/PrintStream;.println:(I)V // method@00af
+005eb8: 6200 1000                              |000a: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005ebc: 6e20 ac00 4000                         |000c: invoke-virtual {v0, v4}, Ljava/io/PrintStream;.println:(C)V // method@00ac
+005ec2: 6200 1000                              |000f: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005ec6: 6e20 af00 5000                         |0011: invoke-virtual {v0, v5}, Ljava/io/PrintStream;.println:(I)V // method@00af
+005ecc: 6200 1000                              |0014: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005ed0: 6e20 af00 6000                         |0016: invoke-virtual {v0, v6}, Ljava/io/PrintStream;.println:(I)V // method@00af
+005ed6: 6200 1000                              |0019: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005eda: 6e20 ae00 7000                         |001b: invoke-virtual {v0, v7}, Ljava/io/PrintStream;.println:(F)V // method@00ae
+005ee0: 6200 1000                              |001e: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005ee4: 6e30 b000 8009                         |0020: invoke-virtual {v0, v8, v9}, Ljava/io/PrintStream;.println:(J)V // method@00b0
+005eea: 6200 1000                              |0023: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005eee: 6e30 ad00 a00b                         |0025: invoke-virtual {v0, v10, v11}, Ljava/io/PrintStream;.println:(D)V // method@00ad
+005ef4: 6200 1000                              |0028: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005ef8: 6e20 b100 c000                         |002a: invoke-virtual {v0, v12}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005efe: 0e00                                   |002d: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=46
+        0x0005 line=47
+        0x000a line=48
+        0x000f line=49
+        0x0014 line=50
+        0x0019 line=51
+        0x001e line=52
+        0x0023 line=53
+        0x0028 line=54
+        0x002d line=55
+      locals        :
+        0x0000 - 0x002e reg=2 (null) Z
+        0x0000 - 0x002e reg=3 (null) B
+        0x0000 - 0x002e reg=4 (null) C
+        0x0000 - 0x002e reg=5 (null) S
+        0x0000 - 0x002e reg=6 (null) I
+        0x0000 - 0x002e reg=7 (null) F
+        0x0000 - 0x002e reg=8 (null) J
+        0x0000 - 0x002e reg=10 (null) D
+        0x0000 - 0x002e reg=12 (null) Ljava/lang/String;
+
+    #11              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest3'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+005f00:                                        |[005f00] invokecustom.InvokeCustom5.targetMethodTest3:()V
+005f10: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005f14: 1a01 7300                              |0002: const-string v1, "targetMethodTest3 from InvokeCustom" // string@0073
+005f18: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005f1e: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=58
+        0x0007 line=59
+      locals        :
+
+    #12              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest5'
+      type          : '(III)I'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 3
+      outs          : 2
+      insns size    : 83 16-bit code units
+005f20:                                        |[005f20] invokecustom.InvokeCustom5.targetMethodTest5:(III)I
+005f30: 9000 0405                              |0000: add-int v0, v4, v5
+005f34: 6201 1000                              |0002: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005f38: 2202 1700                              |0004: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+005f3c: 7010 b400 0200                         |0006: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005f42: 1a03 7800                              |0009: const-string v3, "targetMethodTest5 " // string@0078
+005f46: 6e20 ba00 3200                         |000b: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005f4c: 0c02                                   |000e: move-result-object v2
+005f4e: 6e20 b700 4200                         |000f: invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005f54: 0c02                                   |0012: move-result-object v2
+005f56: 1a03 0300                              |0013: const-string v3, " + " // string@0003
+005f5a: 6e20 ba00 3200                         |0015: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005f60: 0c02                                   |0018: move-result-object v2
+005f62: 6e20 b700 5200                         |0019: invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005f68: 0c02                                   |001c: move-result-object v2
+005f6a: 1a03 0400                              |001d: const-string v3, " = " // string@0004
+005f6e: 6e20 ba00 3200                         |001f: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005f74: 0c02                                   |0022: move-result-object v2
+005f76: 6e20 b700 0200                         |0023: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005f7c: 0c02                                   |0026: move-result-object v2
+005f7e: 6e10 bb00 0200                         |0027: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005f84: 0c02                                   |002a: move-result-object v2
+005f86: 6e20 b100 2100                         |002b: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005f8c: 3260 2400                              |002e: if-eq v0, v6, 0052 // +0024
+005f90: 6201 1000                              |0030: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005f94: 2202 1700                              |0032: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+005f98: 7010 b400 0200                         |0034: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005f9e: 1a03 1300                              |0037: const-string v3, "Failed " // string@0013
+005fa2: 6e20 ba00 3200                         |0039: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005fa8: 0c02                                   |003c: move-result-object v2
+005faa: 6e20 b700 0200                         |003d: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005fb0: 0c02                                   |0040: move-result-object v2
+005fb2: 1a03 0100                              |0041: const-string v3, " != " // string@0001
+005fb6: 6e20 ba00 3200                         |0043: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+005fbc: 0c02                                   |0046: move-result-object v2
+005fbe: 6e20 b700 6200                         |0047: invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+005fc4: 0c02                                   |004a: move-result-object v2
+005fc6: 6e10 bb00 0200                         |004b: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+005fcc: 0c02                                   |004e: move-result-object v2
+005fce: 6e20 b100 2100                         |004f: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+005fd4: 0f00                                   |0052: return v0
+      catches       : (none)
+      positions     :
+        0x0000 line=68
+        0x0002 line=69
+        0x002e line=70
+        0x0030 line=71
+        0x0052 line=73
+      locals        :
+        0x0000 - 0x0053 reg=4 (null) I
+        0x0000 - 0x0053 reg=5 (null) I
+        0x0000 - 0x0053 reg=6 (null) I
+
+    #13              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest6'
+      type          : '(JJJ)J'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 6
+      outs          : 3
+      insns size    : 85 16-bit code units
+005fd8:                                        |[005fd8] invokecustom.InvokeCustom5.targetMethodTest6:(JJJ)J
+005fe8: 9b00 0608                              |0000: add-long v0, v6, v8
+005fec: 6202 1000                              |0002: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+005ff0: 2203 1700                              |0004: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+005ff4: 7010 b400 0300                         |0006: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+005ffa: 1a04 7b00                              |0009: const-string v4, "targetMethodTest6 " // string@007b
+005ffe: 6e20 ba00 4300                         |000b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006004: 0c03                                   |000e: move-result-object v3
+006006: 6e30 b800 6307                         |000f: invoke-virtual {v3, v6, v7}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+00600c: 0c03                                   |0012: move-result-object v3
+00600e: 1a04 0300                              |0013: const-string v4, " + " // string@0003
+006012: 6e20 ba00 4300                         |0015: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006018: 0c03                                   |0018: move-result-object v3
+00601a: 6e30 b800 8309                         |0019: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+006020: 0c03                                   |001c: move-result-object v3
+006022: 1a04 0400                              |001d: const-string v4, " = " // string@0004
+006026: 6e20 ba00 4300                         |001f: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00602c: 0c03                                   |0022: move-result-object v3
+00602e: 6e30 b800 0301                         |0023: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+006034: 0c03                                   |0026: move-result-object v3
+006036: 6e10 bb00 0300                         |0027: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00603c: 0c03                                   |002a: move-result-object v3
+00603e: 6e20 b100 3200                         |002b: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006044: 3102 000a                              |002e: cmp-long v2, v0, v10
+006048: 3802 2400                              |0030: if-eqz v2, 0054 // +0024
+00604c: 6202 1000                              |0032: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006050: 2203 1700                              |0034: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+006054: 7010 b400 0300                         |0036: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00605a: 1a04 1300                              |0039: const-string v4, "Failed " // string@0013
+00605e: 6e20 ba00 4300                         |003b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006064: 0c03                                   |003e: move-result-object v3
+006066: 6e30 b800 0301                         |003f: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+00606c: 0c03                                   |0042: move-result-object v3
+00606e: 1a04 0100                              |0043: const-string v4, " != " // string@0001
+006072: 6e20 ba00 4300                         |0045: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006078: 0c03                                   |0048: move-result-object v3
+00607a: 6e30 b800 a30b                         |0049: invoke-virtual {v3, v10, v11}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+006080: 0c03                                   |004c: move-result-object v3
+006082: 6e10 bb00 0300                         |004d: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006088: 0c03                                   |0050: move-result-object v3
+00608a: 6e20 b100 3200                         |0051: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006090: 1000                                   |0054: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=77
+        0x0002 line=78
+        0x002e line=79
+        0x0032 line=80
+        0x0054 line=82
+      locals        :
+        0x0000 - 0x0055 reg=6 (null) J
+        0x0000 - 0x0055 reg=8 (null) J
+        0x0000 - 0x0055 reg=10 (null) J
+
+    #14              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest7'
+      type          : '(FFD)D'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 10
+      ins           : 4
+      outs          : 3
+      insns size    : 86 16-bit code units
+006094:                                        |[006094] invokecustom.InvokeCustom5.targetMethodTest7:(FFD)D
+0060a4: a800 0607                              |0000: mul-float v0, v6, v7
+0060a8: 8900                                   |0002: float-to-double v0, v0
+0060aa: 6202 1000                              |0003: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0060ae: 2203 1700                              |0005: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0060b2: 7010 b400 0300                         |0007: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0060b8: 1a04 7e00                              |000a: const-string v4, "targetMethodTest7 " // string@007e
+0060bc: 6e20 ba00 4300                         |000c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0060c2: 0c03                                   |000f: move-result-object v3
+0060c4: 6e20 b600 6300                         |0010: invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+0060ca: 0c03                                   |0013: move-result-object v3
+0060cc: 1a04 0200                              |0014: const-string v4, " * " // string@0002
+0060d0: 6e20 ba00 4300                         |0016: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0060d6: 0c03                                   |0019: move-result-object v3
+0060d8: 6e20 b600 7300                         |001a: invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+0060de: 0c03                                   |001d: move-result-object v3
+0060e0: 1a04 0400                              |001e: const-string v4, " = " // string@0004
+0060e4: 6e20 ba00 4300                         |0020: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0060ea: 0c03                                   |0023: move-result-object v3
+0060ec: 6e30 b500 0301                         |0024: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+0060f2: 0c03                                   |0027: move-result-object v3
+0060f4: 6e10 bb00 0300                         |0028: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0060fa: 0c03                                   |002b: move-result-object v3
+0060fc: 6e20 b100 3200                         |002c: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006102: 2f02 0008                              |002f: cmpl-double v2, v0, v8
+006106: 3802 2400                              |0031: if-eqz v2, 0055 // +0024
+00610a: 6202 1000                              |0033: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00610e: 2203 1700                              |0035: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+006112: 7010 b400 0300                         |0037: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006118: 1a04 1300                              |003a: const-string v4, "Failed " // string@0013
+00611c: 6e20 ba00 4300                         |003c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006122: 0c03                                   |003f: move-result-object v3
+006124: 6e30 b500 0301                         |0040: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00612a: 0c03                                   |0043: move-result-object v3
+00612c: 1a04 0100                              |0044: const-string v4, " != " // string@0001
+006130: 6e20 ba00 4300                         |0046: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006136: 0c03                                   |0049: move-result-object v3
+006138: 6e30 b500 8309                         |004a: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00613e: 0c03                                   |004d: move-result-object v3
+006140: 6e10 bb00 0300                         |004e: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006146: 0c03                                   |0051: move-result-object v3
+006148: 6e20 b100 3200                         |0052: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00614e: 1000                                   |0055: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=86
+        0x0003 line=87
+        0x002f line=88
+        0x0033 line=89
+        0x0055 line=91
+      locals        :
+        0x0000 - 0x0056 reg=6 (null) F
+        0x0000 - 0x0056 reg=7 (null) F
+        0x0000 - 0x0056 reg=8 (null) D
+
+    #15              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest8'
+      type          : '(Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 25 16-bit code units
+006150:                                        |[006150] invokecustom.InvokeCustom5.targetMethodTest8:(Ljava/lang/String;)V
+006160: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006164: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006168: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00616e: 1a02 8000                              |0007: const-string v2, "targetMethodTest8 " // string@0080
+006172: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006178: 0c01                                   |000c: move-result-object v1
+00617a: 6e20 ba00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006180: 0c01                                   |0010: move-result-object v1
+006182: 6e10 bb00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006188: 0c01                                   |0014: move-result-object v1
+00618a: 6e20 b100 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006190: 0e00                                   |0018: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=95
+        0x0018 line=96
+      locals        :
+        0x0000 - 0x0019 reg=3 (null) Ljava/lang/String;
+
+    #16              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest9'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+006194:                                        |[006194] invokecustom.InvokeCustom5.targetMethodTest9:()V
+0061a4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0061a8: 1a01 8200                              |0002: const-string v1, "targetMethodTest9()" // string@0082
+0061ac: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0061b2: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=129
+        0x0007 line=130
+      locals        :
+
+    #17              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'test5'
+      type          : '()V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 0
+      outs          : 3
+      insns size    : 35 16-bit code units
+0061b4:                                        |[0061b4] invokecustom.InvokeCustom5.test5:()V
+0061c4: 1300 e803                              |0000: const/16 v0, #int 1000 // #3e8
+0061c8: 1301 65fc                              |0002: const/16 v1, #int -923 // #fc65
+0061cc: 1302 4d00                              |0004: const/16 v2, #int 77 // #4d
+0061d0: fc30 0300 1002                         |0006: invoke-custom {v0, v1, v2}, call_site@0003
+0061d6: 0a00                                   |0009: move-result v0
+0061d8: 6201 1000                              |000a: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0061dc: 2202 1700                              |000c: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+0061e0: 7010 b400 0200                         |000e: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0061e6: 1a03 7900                              |0011: const-string v3, "targetMethodTest5 returned: " // string@0079
+0061ea: 6e20 ba00 3200                         |0013: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0061f0: 0c02                                   |0016: move-result-object v2
+0061f2: 6e20 b700 0200                         |0017: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0061f8: 0c00                                   |001a: move-result-object v0
+0061fa: 6e10 bb00 0000                         |001b: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006200: 0c00                                   |001e: move-result-object v0
+006202: 6e20 b100 0100                         |001f: invoke-virtual {v1, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006208: 0e00                                   |0022: return-void
+      catches       : (none)
+      positions     :
+      locals        :
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 27 16-bit code units
+00620c:                                        |[00620c] invokecustom.InvokeCustom5.helperMethodTest9:()V
+00621c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006220: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006224: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00622a: 1a02 6400                              |0007: const-string v2, "helperMethodTest9 in " // string@0064
+00622e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006234: 0c01                                   |000c: move-result-object v1
+006236: 1c02 0e00                              |000d: const-class v2, Linvokecustom/InvokeCustom; // type@000e
+00623a: 6e20 b900 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006240: 0c01                                   |0012: move-result-object v1
+006242: 6e10 bb00 0100                         |0013: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006248: 0c01                                   |0016: move-result-object v1
+00624a: 6e20 b100 1000                         |0017: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006250: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=125
+        0x001a line=126
+      locals        :
+        0x0000 - 0x001b reg=3 this Linvokecustom/InvokeCustom5;
+
+    #1              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'run'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+006254:                                        |[006254] invokecustom.InvokeCustom5.run:()V
+006264: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006268: 1a01 6e00                              |0002: const-string v1, "run() for Test9" // string@006e
+00626c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006272: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=133
+        0x0007 line=134
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom5;
+
+    #2              : (in Linvokecustom/InvokeCustom5;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+006274:                                        |[006274] invokecustom.InvokeCustom5.targetMethodTest4:()V
+006284: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006288: 1a01 7500                              |0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // string@0075
+00628c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006292: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=64
+        0x0007 line=65
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom5;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Class #5            -
+  Class descriptor  : 'Linvokecustom/InvokeCustom6;'
+  Access flags      : 0x0001 (PUBLIC)
+  Superclass        : 'Linvokecustom/Super;'
+  Interfaces        -
+    #0              : 'Ljava/lang/Runnable;'
+  Static fields     -
+    #0              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'staticFieldTest9'
+      type          : 'I'
+      access        : 0x000a (PRIVATE STATIC)
+  Instance fields   -
+    #0              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'fieldTest9'
+      type          : 'F'
+      access        : 0x0002 (PRIVATE)
+  Direct methods    -
+    #0              : (in Linvokecustom/InvokeCustom6;)
+      name          : '<clinit>'
+      type          : '()V'
+      access        : 0x10008 (STATIC CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+006294:                                        |[006294] invokecustom.InvokeCustom6.<clinit>:()V
+0062a4: 1200                                   |0000: const/4 v0, #int 0 // #0
+0062a6: 6700 0f00                              |0001: sput v0, Linvokecustom/InvokeCustom;.staticFieldTest9:I // field@000f
+0062aa: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=98
+      locals        :
+
+    #1              : (in Linvokecustom/InvokeCustom6;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 2
+      ins           : 1
+      outs          : 1
+      insns size    : 7 16-bit code units
+0062ac:                                        |[0062ac] invokecustom.InvokeCustom6.<init>:()V
+0062bc: 7010 a800 0100                         |0000: invoke-direct {v1}, Linvokecustom/Super;.<init>:()V // method@00a8
+0062c2: 1200                                   |0003: const/4 v0, #int 0 // #0
+0062c4: 5910 0e00                              |0004: iput v0, v1, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+0062c8: 0e00                                   |0006: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=35
+        0x0003 line=111
+        0x0006 line=35
+      locals        :
+        0x0000 - 0x0007 reg=1 this Linvokecustom/InvokeCustom6;
+
+    #2              : (in Linvokecustom/InvokeCustom6;)
+      name          : '<init>'
+      type          : '(I)V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 5
+      ins           : 2
+      outs          : 2
+      insns size    : 37 16-bit code units
+0062cc:                                        |[0062cc] invokecustom.InvokeCustom6.<init>:(I)V
+0062dc: 7010 a800 0300                         |0000: invoke-direct {v3}, Linvokecustom/Super;.<init>:()V // method@00a8
+0062e2: 1200                                   |0003: const/4 v0, #int 0 // #0
+0062e4: 5930 0e00                              |0004: iput v0, v3, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+0062e8: 6200 1000                              |0006: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0062ec: 2201 1700                              |0008: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0062f0: 7010 b400 0100                         |000a: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0062f6: 1a02 1800                              |000d: const-string v2, "InvokeCustom.<init>(" // string@0018
+0062fa: 6e20 ba00 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006300: 0c01                                   |0012: move-result-object v1
+006302: 6e20 b700 4100                         |0013: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+006308: 0c01                                   |0016: move-result-object v1
+00630a: 1a02 0700                              |0017: const-string v2, ")" // string@0007
+00630e: 6e20 ba00 2100                         |0019: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006314: 0c01                                   |001c: move-result-object v1
+006316: 6e10 bb00 0100                         |001d: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00631c: 0c01                                   |0020: move-result-object v1
+00631e: 6e20 b100 1000                         |0021: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006324: 0e00                                   |0024: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=36
+        0x0003 line=111
+        0x0006 line=37
+        0x0024 line=38
+      locals        :
+        0x0000 - 0x0025 reg=3 this Linvokecustom/InvokeCustom6;
+        0x0000 - 0x0025 reg=4 (null) I
+
+    #3              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'bsmCreateCallSite'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 4
+      outs          : 2
+      insns size    : 36 16-bit code units
+006328:                                        |[006328] invokecustom.InvokeCustom6.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+006338: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00633c: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006340: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006346: 1a02 5600                              |0007: const-string v2, "bsmCreateCallSite [" // string@0056
+00634a: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006350: 0c01                                   |000c: move-result-object v1
+006352: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006358: 0c01                                   |0010: move-result-object v1
+00635a: 1a02 5200                              |0011: const-string v2, "]" // string@0052
+00635e: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006364: 0c01                                   |0016: move-result-object v1
+006366: 6e10 bb00 0100                         |0017: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00636c: 0c01                                   |001a: move-result-object v1
+00636e: 6e20 b100 1000                         |001b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006374: 2200 1b00                              |001e: new-instance v0, Ljava/lang/invoke/ConstantCallSite; // type@001b
+006378: 7020 bc00 6000                         |0020: invoke-direct {v0, v6}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+00637e: 1100                                   |0023: return-object v0
+      catches       : (none)
+      positions     :
+        0x0000 line=156
+        0x001e line=157
+      locals        :
+        0x0000 - 0x0024 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0024 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0024 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0024 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+
+    #4              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'bsmLookupStatic'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 3
+      outs          : 4
+      insns size    : 29 16-bit code units
+006380:                                        |[006380] invokecustom.InvokeCustom6.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+006390: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006394: 1a01 5800                              |0002: const-string v1, "bsmLookupStatic []" // string@0058
+006398: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00639e: 7100 c900 0000                         |0007: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+0063a4: 0c00                                   |000a: move-result-object v0
+0063a6: 6e10 c800 0000                         |000b: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+0063ac: 0c01                                   |000e: move-result-object v1
+0063ae: 6e40 c700 1043                         |000f: invoke-virtual {v0, v1, v3, v4}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+0063b4: 0c00                                   |0012: move-result-object v0
+0063b6: 2201 1b00                              |0013: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0063ba: 6e20 bd00 4000                         |0015: invoke-virtual {v0, v4}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+0063c0: 0c00                                   |0018: move-result-object v0
+0063c2: 7020 bc00 0100                         |0019: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0063c8: 1101                                   |001c: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=138
+        0x0007 line=139
+        0x000b line=140
+        0x0013 line=141
+      locals        :
+        0x0000 - 0x001d reg=2 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x001d reg=3 (null) Ljava/lang/String;
+        0x0000 - 0x001d reg=4 (null) Ljava/lang/invoke/MethodType;
+
+    #5              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'bsmLookupStaticWithExtraArgs'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 9
+      outs          : 4
+      insns size    : 82 16-bit code units
+0063cc:                                        |[0063cc] invokecustom.InvokeCustom6.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+0063dc: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0063e0: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0063e4: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0063ea: 1a02 5a00                              |0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // string@005a
+0063ee: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0063f4: 0c01                                   |000c: move-result-object v1
+0063f6: 6e20 b700 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0063fc: 0c01                                   |0010: move-result-object v1
+0063fe: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+006402: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006408: 0c01                                   |0016: move-result-object v1
+00640a: 6e30 b800 7108                         |0017: invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+006410: 0c01                                   |001a: move-result-object v1
+006412: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+006416: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00641c: 0c01                                   |0020: move-result-object v1
+00641e: 6e20 b600 9100                         |0021: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+006424: 0c01                                   |0024: move-result-object v1
+006426: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+00642a: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006430: 0c01                                   |002a: move-result-object v1
+006432: 6e30 b500 a10b                         |002b: invoke-virtual {v1, v10, v11}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+006438: 0c01                                   |002e: move-result-object v1
+00643a: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+00643e: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006444: 0c01                                   |0034: move-result-object v1
+006446: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00644c: 0c01                                   |0038: move-result-object v1
+00644e: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006454: 7100 c900 0000                         |003c: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+00645a: 0c00                                   |003f: move-result-object v0
+00645c: 6e10 c800 0000                         |0040: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+006462: 0c01                                   |0043: move-result-object v1
+006464: 6e40 c700 1054                         |0044: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+00646a: 0c00                                   |0047: move-result-object v0
+00646c: 2201 1b00                              |0048: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+006470: 6e20 bd00 5000                         |004a: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+006476: 0c00                                   |004d: move-result-object v0
+006478: 7020 bc00 0100                         |004e: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+00647e: 1101                                   |0051: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=147
+        0x003c line=148
+        0x0040 line=149
+        0x0048 line=150
+      locals        :
+        0x0000 - 0x0052 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0052 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0052 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0052 reg=6 (null) I
+        0x0000 - 0x0052 reg=7 (null) J
+        0x0000 - 0x0052 reg=9 (null) F
+        0x0000 - 0x0052 reg=10 (null) D
+
+    #6              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'bsmLookupTest9'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 13
+      ins           : 10
+      outs          : 4
+      insns size    : 135 16-bit code units
+006480:                                        |[006480] invokecustom.InvokeCustom6.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+006490: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006494: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006498: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00649e: 1a02 5c00                              |0007: const-string v2, "bsmLookupTest9 [" // string@005c
+0064a2: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0064a8: 0c01                                   |000c: move-result-object v1
+0064aa: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0064b0: 0c01                                   |0010: move-result-object v1
+0064b2: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+0064b6: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0064bc: 0c01                                   |0016: move-result-object v1
+0064be: 6e20 b900 7100                         |0017: invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0064c4: 0c01                                   |001a: move-result-object v1
+0064c6: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+0064ca: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0064d0: 0c01                                   |0020: move-result-object v1
+0064d2: 6e20 b900 8100                         |0021: invoke-virtual {v1, v8}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0064d8: 0c01                                   |0024: move-result-object v1
+0064da: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+0064de: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0064e4: 0c01                                   |002a: move-result-object v1
+0064e6: 6e20 b900 9100                         |002b: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0064ec: 0c01                                   |002e: move-result-object v1
+0064ee: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+0064f2: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0064f8: 0c01                                   |0034: move-result-object v1
+0064fa: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006500: 0c01                                   |0038: move-result-object v1
+006502: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006508: 6200 1000                              |003c: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00650c: 2201 1700                              |003e: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006510: 7010 b400 0100                         |0040: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006516: 6e20 ba00 4100                         |0043: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00651c: 0c01                                   |0046: move-result-object v1
+00651e: 1a02 0000                              |0047: const-string v2, " " // string@0000
+006522: 6e20 ba00 2100                         |0049: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006528: 0c01                                   |004c: move-result-object v1
+00652a: 6e20 b900 5100                         |004d: invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006530: 0c01                                   |0050: move-result-object v1
+006532: 6e10 bb00 0100                         |0051: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006538: 0c01                                   |0054: move-result-object v1
+00653a: 6e20 b100 1000                         |0055: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006540: 7120 9b00 7600                         |0058: invoke-static {v6, v7}, Linvokecustom/InvokeCustom;.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009b
+006546: 2200 0e00                              |005b: new-instance v0, Linvokecustom/InvokeCustom; // type@000e
+00654a: 7010 9400 0000                         |005d: invoke-direct {v0}, Linvokecustom/InvokeCustom;.<init>:()V // method@0094
+006550: 6f30 9a00 8009                         |0060: invoke-super {v0, v8, v9}, Linvokecustom/InvokeCustom;.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009a
+006556: fa20 c300 0a00 1c00                    |0063: invoke-polymorphic {v10, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00c3, proto@001c
+00655e: 1230                                   |0067: const/4 v0, #int 3 // #3
+006560: fa20 c300 0b00 0500                    |0068: invoke-polymorphic {v11, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@00c3, proto@0005
+006568: 0c00                                   |006c: move-result-object v0
+00656a: fa20 be00 0c00 1c00                    |006d: invoke-polymorphic {v12, v0}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00be, proto@001c
+006572: 7100 c900 0000                         |0071: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+006578: 0c00                                   |0074: move-result-object v0
+00657a: 6e10 c800 0000                         |0075: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+006580: 0c01                                   |0078: move-result-object v1
+006582: 6e40 c700 1054                         |0079: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+006588: 0c00                                   |007c: move-result-object v0
+00658a: 2201 1b00                              |007d: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+00658e: 6e20 bd00 5000                         |007f: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+006594: 0c00                                   |0082: move-result-object v0
+006596: 7020 bc00 0100                         |0083: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+00659c: 1101                                   |0086: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=166
+        0x003c line=168
+        0x0058 line=171
+        0x005b line=172
+        0x0060 line=173
+        0x0063 line=176
+        0x0067 line=178
+        0x006d line=179
+        0x0071 line=181
+        0x0075 line=182
+        0x007d line=183
+      locals        :
+        0x0000 - 0x0087 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0087 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0087 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0087 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=9 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=10 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=11 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=12 (null) Ljava/lang/invoke/MethodHandle;
+
+    #7              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'checkFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x0002 (PRIVATE)
+      code          -
+      registers     : 9
+      ins           : 3
+      outs          : 3
+      insns size    : 82 16-bit code units
+0065a0:                                        |[0065a0] invokecustom.InvokeCustom6.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+0065b0: 1405 0ff0 6a20                         |0000: const v5, #float 1.99e-19 // #206af00f
+0065b6: fa20 c300 6700 0100                    |0003: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+0065be: 0a00                                   |0007: move-result v0
+0065c0: fa30 c300 6805 1d00                    |0008: invoke-polymorphic {v8, v6, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@00c3, proto@001d
+0065c8: fa20 c300 6700 0100                    |000c: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+0065d0: 0a01                                   |0010: move-result v1
+0065d2: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0065d6: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0065da: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0065e0: 1a04 5e00                              |0018: const-string v4, "checkFieldTest9: old " // string@005e
+0065e4: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0065ea: 0c03                                   |001d: move-result-object v3
+0065ec: 6e20 b600 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+0065f2: 0c00                                   |0021: move-result-object v0
+0065f4: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+0065f8: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0065fe: 0c00                                   |0027: move-result-object v0
+006600: 6e20 b600 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+006606: 0c00                                   |002b: move-result-object v0
+006608: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+00660c: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006612: 0c00                                   |0031: move-result-object v0
+006614: 6e20 b600 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00661a: 0c00                                   |0035: move-result-object v0
+00661c: 1a03 0000                              |0036: const-string v3, " " // string@0000
+006620: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006626: 0c00                                   |003b: move-result-object v0
+006628: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00662e: 0c00                                   |003f: move-result-object v0
+006630: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+006636: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00663a: 2d00 0105                              |0045: cmpl-float v0, v1, v5
+00663e: 3900 0800                              |0047: if-nez v0, 004f // +0008
+006642: 1a00 4000                              |0049: const-string v0, "OK" // string@0040
+006646: 6e20 b100 0200                         |004b: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00664c: 0e00                                   |004e: return-void
+00664e: 1a00 1000                              |004f: const-string v0, "ERROR" // string@0010
+006652: 28fa                                   |0051: goto 004b // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=116
+        0x0008 line=117
+        0x000c line=118
+        0x0011 line=119
+        0x0043 line=121
+        0x004e line=122
+        0x004f line=121
+      locals        :
+        0x0000 - 0x0052 reg=6 this Linvokecustom/InvokeCustom6;
+        0x0000 - 0x0052 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0052 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+
+    #8              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'checkStaticFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 8
+      ins           : 2
+      outs          : 2
+      insns size    : 80 16-bit code units
+006654:                                        |[006654] invokecustom.InvokeCustom6.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+006664: 1405 1032 5476                         |0000: const v5, #float 1.07596e+33 // #76543210
+00666a: fa10 c300 0600 0200                    |0003: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+006672: 0a00                                   |0007: move-result v0
+006674: fa20 c300 5700 1a00                    |0008: invoke-polymorphic {v7, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@00c3, proto@001a
+00667c: fa10 c300 0600 0200                    |000c: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+006684: 0a01                                   |0010: move-result v1
+006686: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00668a: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+00668e: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006694: 1a04 6000                              |0018: const-string v4, "checkStaticFieldTest9: old " // string@0060
+006698: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00669e: 0c03                                   |001d: move-result-object v3
+0066a0: 6e20 b700 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0066a6: 0c00                                   |0021: move-result-object v0
+0066a8: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+0066ac: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0066b2: 0c00                                   |0027: move-result-object v0
+0066b4: 6e20 b700 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0066ba: 0c00                                   |002b: move-result-object v0
+0066bc: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+0066c0: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0066c6: 0c00                                   |0031: move-result-object v0
+0066c8: 6e20 b700 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0066ce: 0c00                                   |0035: move-result-object v0
+0066d0: 1a03 0000                              |0036: const-string v3, " " // string@0000
+0066d4: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0066da: 0c00                                   |003b: move-result-object v0
+0066dc: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0066e2: 0c00                                   |003f: move-result-object v0
+0066e4: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+0066ea: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0066ee: 3351 0800                              |0045: if-ne v1, v5, 004d // +0008
+0066f2: 1a00 4000                              |0047: const-string v0, "OK" // string@0040
+0066f6: 6e20 b100 0200                         |0049: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0066fc: 0e00                                   |004c: return-void
+0066fe: 1a00 1000                              |004d: const-string v0, "ERROR" // string@0010
+006702: 28fa                                   |004f: goto 0049 // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=103
+        0x0008 line=104
+        0x000c line=105
+        0x0011 line=106
+        0x0043 line=108
+        0x004c line=109
+        0x004d line=108
+      locals        :
+        0x0000 - 0x0050 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0050 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+
+    #9              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest1'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+006704:                                        |[006704] invokecustom.InvokeCustom6.targetMethodTest1:()V
+006714: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006718: 1a01 1500                              |0002: const-string v1, "Hello World!" // string@0015
+00671c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006722: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=41
+        0x0007 line=42
+      locals        :
+
+    #10              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest2'
+      type          : '(ZBCSIFJDLjava/lang/String;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 13
+      ins           : 11
+      outs          : 3
+      insns size    : 46 16-bit code units
+006724:                                        |[006724] invokecustom.InvokeCustom6.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+006734: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006738: 6e20 b200 2000                         |0002: invoke-virtual {v0, v2}, Ljava/io/PrintStream;.println:(Z)V // method@00b2
+00673e: 6200 1000                              |0005: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006742: 6e20 af00 3000                         |0007: invoke-virtual {v0, v3}, Ljava/io/PrintStream;.println:(I)V // method@00af
+006748: 6200 1000                              |000a: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00674c: 6e20 ac00 4000                         |000c: invoke-virtual {v0, v4}, Ljava/io/PrintStream;.println:(C)V // method@00ac
+006752: 6200 1000                              |000f: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006756: 6e20 af00 5000                         |0011: invoke-virtual {v0, v5}, Ljava/io/PrintStream;.println:(I)V // method@00af
+00675c: 6200 1000                              |0014: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006760: 6e20 af00 6000                         |0016: invoke-virtual {v0, v6}, Ljava/io/PrintStream;.println:(I)V // method@00af
+006766: 6200 1000                              |0019: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00676a: 6e20 ae00 7000                         |001b: invoke-virtual {v0, v7}, Ljava/io/PrintStream;.println:(F)V // method@00ae
+006770: 6200 1000                              |001e: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006774: 6e30 b000 8009                         |0020: invoke-virtual {v0, v8, v9}, Ljava/io/PrintStream;.println:(J)V // method@00b0
+00677a: 6200 1000                              |0023: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00677e: 6e30 ad00 a00b                         |0025: invoke-virtual {v0, v10, v11}, Ljava/io/PrintStream;.println:(D)V // method@00ad
+006784: 6200 1000                              |0028: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006788: 6e20 b100 c000                         |002a: invoke-virtual {v0, v12}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00678e: 0e00                                   |002d: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=46
+        0x0005 line=47
+        0x000a line=48
+        0x000f line=49
+        0x0014 line=50
+        0x0019 line=51
+        0x001e line=52
+        0x0023 line=53
+        0x0028 line=54
+        0x002d line=55
+      locals        :
+        0x0000 - 0x002e reg=2 (null) Z
+        0x0000 - 0x002e reg=3 (null) B
+        0x0000 - 0x002e reg=4 (null) C
+        0x0000 - 0x002e reg=5 (null) S
+        0x0000 - 0x002e reg=6 (null) I
+        0x0000 - 0x002e reg=7 (null) F
+        0x0000 - 0x002e reg=8 (null) J
+        0x0000 - 0x002e reg=10 (null) D
+        0x0000 - 0x002e reg=12 (null) Ljava/lang/String;
+
+    #11              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest3'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+006790:                                        |[006790] invokecustom.InvokeCustom6.targetMethodTest3:()V
+0067a0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0067a4: 1a01 7300                              |0002: const-string v1, "targetMethodTest3 from InvokeCustom" // string@0073
+0067a8: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0067ae: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=58
+        0x0007 line=59
+      locals        :
+
+    #12              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest5'
+      type          : '(III)I'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 3
+      outs          : 2
+      insns size    : 83 16-bit code units
+0067b0:                                        |[0067b0] invokecustom.InvokeCustom6.targetMethodTest5:(III)I
+0067c0: 9000 0405                              |0000: add-int v0, v4, v5
+0067c4: 6201 1000                              |0002: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0067c8: 2202 1700                              |0004: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+0067cc: 7010 b400 0200                         |0006: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0067d2: 1a03 7800                              |0009: const-string v3, "targetMethodTest5 " // string@0078
+0067d6: 6e20 ba00 3200                         |000b: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0067dc: 0c02                                   |000e: move-result-object v2
+0067de: 6e20 b700 4200                         |000f: invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0067e4: 0c02                                   |0012: move-result-object v2
+0067e6: 1a03 0300                              |0013: const-string v3, " + " // string@0003
+0067ea: 6e20 ba00 3200                         |0015: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0067f0: 0c02                                   |0018: move-result-object v2
+0067f2: 6e20 b700 5200                         |0019: invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0067f8: 0c02                                   |001c: move-result-object v2
+0067fa: 1a03 0400                              |001d: const-string v3, " = " // string@0004
+0067fe: 6e20 ba00 3200                         |001f: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006804: 0c02                                   |0022: move-result-object v2
+006806: 6e20 b700 0200                         |0023: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00680c: 0c02                                   |0026: move-result-object v2
+00680e: 6e10 bb00 0200                         |0027: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006814: 0c02                                   |002a: move-result-object v2
+006816: 6e20 b100 2100                         |002b: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00681c: 3260 2400                              |002e: if-eq v0, v6, 0052 // +0024
+006820: 6201 1000                              |0030: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006824: 2202 1700                              |0032: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+006828: 7010 b400 0200                         |0034: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00682e: 1a03 1300                              |0037: const-string v3, "Failed " // string@0013
+006832: 6e20 ba00 3200                         |0039: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006838: 0c02                                   |003c: move-result-object v2
+00683a: 6e20 b700 0200                         |003d: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+006840: 0c02                                   |0040: move-result-object v2
+006842: 1a03 0100                              |0041: const-string v3, " != " // string@0001
+006846: 6e20 ba00 3200                         |0043: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00684c: 0c02                                   |0046: move-result-object v2
+00684e: 6e20 b700 6200                         |0047: invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+006854: 0c02                                   |004a: move-result-object v2
+006856: 6e10 bb00 0200                         |004b: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00685c: 0c02                                   |004e: move-result-object v2
+00685e: 6e20 b100 2100                         |004f: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006864: 0f00                                   |0052: return v0
+      catches       : (none)
+      positions     :
+        0x0000 line=68
+        0x0002 line=69
+        0x002e line=70
+        0x0030 line=71
+        0x0052 line=73
+      locals        :
+        0x0000 - 0x0053 reg=4 (null) I
+        0x0000 - 0x0053 reg=5 (null) I
+        0x0000 - 0x0053 reg=6 (null) I
+
+    #13              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest6'
+      type          : '(JJJ)J'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 6
+      outs          : 3
+      insns size    : 85 16-bit code units
+006868:                                        |[006868] invokecustom.InvokeCustom6.targetMethodTest6:(JJJ)J
+006878: 9b00 0608                              |0000: add-long v0, v6, v8
+00687c: 6202 1000                              |0002: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006880: 2203 1700                              |0004: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+006884: 7010 b400 0300                         |0006: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00688a: 1a04 7b00                              |0009: const-string v4, "targetMethodTest6 " // string@007b
+00688e: 6e20 ba00 4300                         |000b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006894: 0c03                                   |000e: move-result-object v3
+006896: 6e30 b800 6307                         |000f: invoke-virtual {v3, v6, v7}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+00689c: 0c03                                   |0012: move-result-object v3
+00689e: 1a04 0300                              |0013: const-string v4, " + " // string@0003
+0068a2: 6e20 ba00 4300                         |0015: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0068a8: 0c03                                   |0018: move-result-object v3
+0068aa: 6e30 b800 8309                         |0019: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0068b0: 0c03                                   |001c: move-result-object v3
+0068b2: 1a04 0400                              |001d: const-string v4, " = " // string@0004
+0068b6: 6e20 ba00 4300                         |001f: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0068bc: 0c03                                   |0022: move-result-object v3
+0068be: 6e30 b800 0301                         |0023: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0068c4: 0c03                                   |0026: move-result-object v3
+0068c6: 6e10 bb00 0300                         |0027: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0068cc: 0c03                                   |002a: move-result-object v3
+0068ce: 6e20 b100 3200                         |002b: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0068d4: 3102 000a                              |002e: cmp-long v2, v0, v10
+0068d8: 3802 2400                              |0030: if-eqz v2, 0054 // +0024
+0068dc: 6202 1000                              |0032: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0068e0: 2203 1700                              |0034: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0068e4: 7010 b400 0300                         |0036: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0068ea: 1a04 1300                              |0039: const-string v4, "Failed " // string@0013
+0068ee: 6e20 ba00 4300                         |003b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0068f4: 0c03                                   |003e: move-result-object v3
+0068f6: 6e30 b800 0301                         |003f: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0068fc: 0c03                                   |0042: move-result-object v3
+0068fe: 1a04 0100                              |0043: const-string v4, " != " // string@0001
+006902: 6e20 ba00 4300                         |0045: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006908: 0c03                                   |0048: move-result-object v3
+00690a: 6e30 b800 a30b                         |0049: invoke-virtual {v3, v10, v11}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+006910: 0c03                                   |004c: move-result-object v3
+006912: 6e10 bb00 0300                         |004d: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006918: 0c03                                   |0050: move-result-object v3
+00691a: 6e20 b100 3200                         |0051: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006920: 1000                                   |0054: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=77
+        0x0002 line=78
+        0x002e line=79
+        0x0032 line=80
+        0x0054 line=82
+      locals        :
+        0x0000 - 0x0055 reg=6 (null) J
+        0x0000 - 0x0055 reg=8 (null) J
+        0x0000 - 0x0055 reg=10 (null) J
+
+    #14              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest7'
+      type          : '(FFD)D'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 10
+      ins           : 4
+      outs          : 3
+      insns size    : 86 16-bit code units
+006924:                                        |[006924] invokecustom.InvokeCustom6.targetMethodTest7:(FFD)D
+006934: a800 0607                              |0000: mul-float v0, v6, v7
+006938: 8900                                   |0002: float-to-double v0, v0
+00693a: 6202 1000                              |0003: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00693e: 2203 1700                              |0005: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+006942: 7010 b400 0300                         |0007: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006948: 1a04 7e00                              |000a: const-string v4, "targetMethodTest7 " // string@007e
+00694c: 6e20 ba00 4300                         |000c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006952: 0c03                                   |000f: move-result-object v3
+006954: 6e20 b600 6300                         |0010: invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00695a: 0c03                                   |0013: move-result-object v3
+00695c: 1a04 0200                              |0014: const-string v4, " * " // string@0002
+006960: 6e20 ba00 4300                         |0016: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006966: 0c03                                   |0019: move-result-object v3
+006968: 6e20 b600 7300                         |001a: invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00696e: 0c03                                   |001d: move-result-object v3
+006970: 1a04 0400                              |001e: const-string v4, " = " // string@0004
+006974: 6e20 ba00 4300                         |0020: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00697a: 0c03                                   |0023: move-result-object v3
+00697c: 6e30 b500 0301                         |0024: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+006982: 0c03                                   |0027: move-result-object v3
+006984: 6e10 bb00 0300                         |0028: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00698a: 0c03                                   |002b: move-result-object v3
+00698c: 6e20 b100 3200                         |002c: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006992: 2f02 0008                              |002f: cmpl-double v2, v0, v8
+006996: 3802 2400                              |0031: if-eqz v2, 0055 // +0024
+00699a: 6202 1000                              |0033: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00699e: 2203 1700                              |0035: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0069a2: 7010 b400 0300                         |0037: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0069a8: 1a04 1300                              |003a: const-string v4, "Failed " // string@0013
+0069ac: 6e20 ba00 4300                         |003c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0069b2: 0c03                                   |003f: move-result-object v3
+0069b4: 6e30 b500 0301                         |0040: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+0069ba: 0c03                                   |0043: move-result-object v3
+0069bc: 1a04 0100                              |0044: const-string v4, " != " // string@0001
+0069c0: 6e20 ba00 4300                         |0046: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0069c6: 0c03                                   |0049: move-result-object v3
+0069c8: 6e30 b500 8309                         |004a: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+0069ce: 0c03                                   |004d: move-result-object v3
+0069d0: 6e10 bb00 0300                         |004e: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0069d6: 0c03                                   |0051: move-result-object v3
+0069d8: 6e20 b100 3200                         |0052: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0069de: 1000                                   |0055: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=86
+        0x0003 line=87
+        0x002f line=88
+        0x0033 line=89
+        0x0055 line=91
+      locals        :
+        0x0000 - 0x0056 reg=6 (null) F
+        0x0000 - 0x0056 reg=7 (null) F
+        0x0000 - 0x0056 reg=8 (null) D
+
+    #15              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest8'
+      type          : '(Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 25 16-bit code units
+0069e0:                                        |[0069e0] invokecustom.InvokeCustom6.targetMethodTest8:(Ljava/lang/String;)V
+0069f0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0069f4: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0069f8: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0069fe: 1a02 8000                              |0007: const-string v2, "targetMethodTest8 " // string@0080
+006a02: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006a08: 0c01                                   |000c: move-result-object v1
+006a0a: 6e20 ba00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006a10: 0c01                                   |0010: move-result-object v1
+006a12: 6e10 bb00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006a18: 0c01                                   |0014: move-result-object v1
+006a1a: 6e20 b100 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006a20: 0e00                                   |0018: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=95
+        0x0018 line=96
+      locals        :
+        0x0000 - 0x0019 reg=3 (null) Ljava/lang/String;
+
+    #16              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest9'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+006a24:                                        |[006a24] invokecustom.InvokeCustom6.targetMethodTest9:()V
+006a34: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006a38: 1a01 8200                              |0002: const-string v1, "targetMethodTest9()" // string@0082
+006a3c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006a42: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=129
+        0x0007 line=130
+      locals        :
+
+    #17              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'test6'
+      type          : '()V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 6
+      ins           : 0
+      outs          : 6
+      insns size    : 44 16-bit code units
+006a44:                                        |[006a44] invokecustom.InvokeCustom6.test6:()V
+006a54: 1800 7777 7777 7707 0000               |0000: const-wide v0, #double 4.05612e-311 // #0000077777777777
+006a5e: 1802 efee eeee eefe ffff               |0005: const-wide v2, #double -nan // #fffffeeeeeeeeeef
+006a68: 1804 6666 6666 6606 0000               |000a: const-wide v4, #double 3.47668e-311 // #0000066666666666
+006a72: fd06 0400 0000                         |000f: invoke-custom/range {v0, v1, v2, v3, v4, v5}, call_site@0004
+006a78: 0b00                                   |0012: move-result-wide v0
+006a7a: 6202 1000                              |0013: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006a7e: 2203 1700                              |0015: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+006a82: 7010 b400 0300                         |0017: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006a88: 1a04 7c00                              |001a: const-string v4, "targetMethodTest6 returned: " // string@007c
+006a8c: 6e20 ba00 4300                         |001c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006a92: 0c03                                   |001f: move-result-object v3
+006a94: 6e30 b800 0301                         |0020: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+006a9a: 0c00                                   |0023: move-result-object v0
+006a9c: 6e10 bb00 0000                         |0024: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006aa2: 0c00                                   |0027: move-result-object v0
+006aa4: 6e20 b100 0200                         |0028: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006aaa: 0e00                                   |002b: return-void
+      catches       : (none)
+      positions     :
+      locals        :
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 27 16-bit code units
+006aac:                                        |[006aac] invokecustom.InvokeCustom6.helperMethodTest9:()V
+006abc: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006ac0: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006ac4: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006aca: 1a02 6400                              |0007: const-string v2, "helperMethodTest9 in " // string@0064
+006ace: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006ad4: 0c01                                   |000c: move-result-object v1
+006ad6: 1c02 0e00                              |000d: const-class v2, Linvokecustom/InvokeCustom; // type@000e
+006ada: 6e20 b900 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006ae0: 0c01                                   |0012: move-result-object v1
+006ae2: 6e10 bb00 0100                         |0013: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006ae8: 0c01                                   |0016: move-result-object v1
+006aea: 6e20 b100 1000                         |0017: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006af0: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=125
+        0x001a line=126
+      locals        :
+        0x0000 - 0x001b reg=3 this Linvokecustom/InvokeCustom6;
+
+    #1              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'run'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+006af4:                                        |[006af4] invokecustom.InvokeCustom6.run:()V
+006b04: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006b08: 1a01 6e00                              |0002: const-string v1, "run() for Test9" // string@006e
+006b0c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006b12: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=133
+        0x0007 line=134
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom6;
+
+    #2              : (in Linvokecustom/InvokeCustom6;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+006b14:                                        |[006b14] invokecustom.InvokeCustom6.targetMethodTest4:()V
+006b24: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006b28: 1a01 7500                              |0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // string@0075
+006b2c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006b32: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=64
+        0x0007 line=65
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom6;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Class #6            -
+  Class descriptor  : 'Linvokecustom/InvokeCustom7;'
+  Access flags      : 0x0001 (PUBLIC)
+  Superclass        : 'Linvokecustom/Super;'
+  Interfaces        -
+    #0              : 'Ljava/lang/Runnable;'
+  Static fields     -
+    #0              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'staticFieldTest9'
+      type          : 'I'
+      access        : 0x000a (PRIVATE STATIC)
+  Instance fields   -
+    #0              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'fieldTest9'
+      type          : 'F'
+      access        : 0x0002 (PRIVATE)
+  Direct methods    -
+    #0              : (in Linvokecustom/InvokeCustom7;)
+      name          : '<clinit>'
+      type          : '()V'
+      access        : 0x10008 (STATIC CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+006b34:                                        |[006b34] invokecustom.InvokeCustom7.<clinit>:()V
+006b44: 1200                                   |0000: const/4 v0, #int 0 // #0
+006b46: 6700 0f00                              |0001: sput v0, Linvokecustom/InvokeCustom;.staticFieldTest9:I // field@000f
+006b4a: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=98
+      locals        :
+
+    #1              : (in Linvokecustom/InvokeCustom7;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 2
+      ins           : 1
+      outs          : 1
+      insns size    : 7 16-bit code units
+006b4c:                                        |[006b4c] invokecustom.InvokeCustom7.<init>:()V
+006b5c: 7010 a800 0100                         |0000: invoke-direct {v1}, Linvokecustom/Super;.<init>:()V // method@00a8
+006b62: 1200                                   |0003: const/4 v0, #int 0 // #0
+006b64: 5910 0e00                              |0004: iput v0, v1, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+006b68: 0e00                                   |0006: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=35
+        0x0003 line=111
+        0x0006 line=35
+      locals        :
+        0x0000 - 0x0007 reg=1 this Linvokecustom/InvokeCustom7;
+
+    #2              : (in Linvokecustom/InvokeCustom7;)
+      name          : '<init>'
+      type          : '(I)V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 5
+      ins           : 2
+      outs          : 2
+      insns size    : 37 16-bit code units
+006b6c:                                        |[006b6c] invokecustom.InvokeCustom7.<init>:(I)V
+006b7c: 7010 a800 0300                         |0000: invoke-direct {v3}, Linvokecustom/Super;.<init>:()V // method@00a8
+006b82: 1200                                   |0003: const/4 v0, #int 0 // #0
+006b84: 5930 0e00                              |0004: iput v0, v3, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+006b88: 6200 1000                              |0006: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006b8c: 2201 1700                              |0008: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006b90: 7010 b400 0100                         |000a: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006b96: 1a02 1800                              |000d: const-string v2, "InvokeCustom.<init>(" // string@0018
+006b9a: 6e20 ba00 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006ba0: 0c01                                   |0012: move-result-object v1
+006ba2: 6e20 b700 4100                         |0013: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+006ba8: 0c01                                   |0016: move-result-object v1
+006baa: 1a02 0700                              |0017: const-string v2, ")" // string@0007
+006bae: 6e20 ba00 2100                         |0019: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006bb4: 0c01                                   |001c: move-result-object v1
+006bb6: 6e10 bb00 0100                         |001d: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006bbc: 0c01                                   |0020: move-result-object v1
+006bbe: 6e20 b100 1000                         |0021: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006bc4: 0e00                                   |0024: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=36
+        0x0003 line=111
+        0x0006 line=37
+        0x0024 line=38
+      locals        :
+        0x0000 - 0x0025 reg=3 this Linvokecustom/InvokeCustom7;
+        0x0000 - 0x0025 reg=4 (null) I
+
+    #3              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'bsmCreateCallSite'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 4
+      outs          : 2
+      insns size    : 36 16-bit code units
+006bc8:                                        |[006bc8] invokecustom.InvokeCustom7.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+006bd8: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006bdc: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006be0: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006be6: 1a02 5600                              |0007: const-string v2, "bsmCreateCallSite [" // string@0056
+006bea: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006bf0: 0c01                                   |000c: move-result-object v1
+006bf2: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006bf8: 0c01                                   |0010: move-result-object v1
+006bfa: 1a02 5200                              |0011: const-string v2, "]" // string@0052
+006bfe: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006c04: 0c01                                   |0016: move-result-object v1
+006c06: 6e10 bb00 0100                         |0017: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006c0c: 0c01                                   |001a: move-result-object v1
+006c0e: 6e20 b100 1000                         |001b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006c14: 2200 1b00                              |001e: new-instance v0, Ljava/lang/invoke/ConstantCallSite; // type@001b
+006c18: 7020 bc00 6000                         |0020: invoke-direct {v0, v6}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+006c1e: 1100                                   |0023: return-object v0
+      catches       : (none)
+      positions     :
+        0x0000 line=156
+        0x001e line=157
+      locals        :
+        0x0000 - 0x0024 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0024 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0024 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0024 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+
+    #4              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'bsmLookupStatic'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 3
+      outs          : 4
+      insns size    : 29 16-bit code units
+006c20:                                        |[006c20] invokecustom.InvokeCustom7.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+006c30: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006c34: 1a01 5800                              |0002: const-string v1, "bsmLookupStatic []" // string@0058
+006c38: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006c3e: 7100 c900 0000                         |0007: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+006c44: 0c00                                   |000a: move-result-object v0
+006c46: 6e10 c800 0000                         |000b: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+006c4c: 0c01                                   |000e: move-result-object v1
+006c4e: 6e40 c700 1043                         |000f: invoke-virtual {v0, v1, v3, v4}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+006c54: 0c00                                   |0012: move-result-object v0
+006c56: 2201 1b00                              |0013: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+006c5a: 6e20 bd00 4000                         |0015: invoke-virtual {v0, v4}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+006c60: 0c00                                   |0018: move-result-object v0
+006c62: 7020 bc00 0100                         |0019: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+006c68: 1101                                   |001c: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=138
+        0x0007 line=139
+        0x000b line=140
+        0x0013 line=141
+      locals        :
+        0x0000 - 0x001d reg=2 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x001d reg=3 (null) Ljava/lang/String;
+        0x0000 - 0x001d reg=4 (null) Ljava/lang/invoke/MethodType;
+
+    #5              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'bsmLookupStaticWithExtraArgs'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 9
+      outs          : 4
+      insns size    : 82 16-bit code units
+006c6c:                                        |[006c6c] invokecustom.InvokeCustom7.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+006c7c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006c80: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006c84: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006c8a: 1a02 5a00                              |0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // string@005a
+006c8e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006c94: 0c01                                   |000c: move-result-object v1
+006c96: 6e20 b700 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+006c9c: 0c01                                   |0010: move-result-object v1
+006c9e: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+006ca2: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006ca8: 0c01                                   |0016: move-result-object v1
+006caa: 6e30 b800 7108                         |0017: invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+006cb0: 0c01                                   |001a: move-result-object v1
+006cb2: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+006cb6: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006cbc: 0c01                                   |0020: move-result-object v1
+006cbe: 6e20 b600 9100                         |0021: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+006cc4: 0c01                                   |0024: move-result-object v1
+006cc6: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+006cca: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006cd0: 0c01                                   |002a: move-result-object v1
+006cd2: 6e30 b500 a10b                         |002b: invoke-virtual {v1, v10, v11}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+006cd8: 0c01                                   |002e: move-result-object v1
+006cda: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+006cde: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006ce4: 0c01                                   |0034: move-result-object v1
+006ce6: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006cec: 0c01                                   |0038: move-result-object v1
+006cee: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006cf4: 7100 c900 0000                         |003c: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+006cfa: 0c00                                   |003f: move-result-object v0
+006cfc: 6e10 c800 0000                         |0040: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+006d02: 0c01                                   |0043: move-result-object v1
+006d04: 6e40 c700 1054                         |0044: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+006d0a: 0c00                                   |0047: move-result-object v0
+006d0c: 2201 1b00                              |0048: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+006d10: 6e20 bd00 5000                         |004a: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+006d16: 0c00                                   |004d: move-result-object v0
+006d18: 7020 bc00 0100                         |004e: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+006d1e: 1101                                   |0051: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=147
+        0x003c line=148
+        0x0040 line=149
+        0x0048 line=150
+      locals        :
+        0x0000 - 0x0052 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0052 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0052 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0052 reg=6 (null) I
+        0x0000 - 0x0052 reg=7 (null) J
+        0x0000 - 0x0052 reg=9 (null) F
+        0x0000 - 0x0052 reg=10 (null) D
+
+    #6              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'bsmLookupTest9'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 13
+      ins           : 10
+      outs          : 4
+      insns size    : 135 16-bit code units
+006d20:                                        |[006d20] invokecustom.InvokeCustom7.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+006d30: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006d34: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006d38: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006d3e: 1a02 5c00                              |0007: const-string v2, "bsmLookupTest9 [" // string@005c
+006d42: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006d48: 0c01                                   |000c: move-result-object v1
+006d4a: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006d50: 0c01                                   |0010: move-result-object v1
+006d52: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+006d56: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006d5c: 0c01                                   |0016: move-result-object v1
+006d5e: 6e20 b900 7100                         |0017: invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006d64: 0c01                                   |001a: move-result-object v1
+006d66: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+006d6a: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006d70: 0c01                                   |0020: move-result-object v1
+006d72: 6e20 b900 8100                         |0021: invoke-virtual {v1, v8}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006d78: 0c01                                   |0024: move-result-object v1
+006d7a: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+006d7e: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006d84: 0c01                                   |002a: move-result-object v1
+006d86: 6e20 b900 9100                         |002b: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006d8c: 0c01                                   |002e: move-result-object v1
+006d8e: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+006d92: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006d98: 0c01                                   |0034: move-result-object v1
+006d9a: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006da0: 0c01                                   |0038: move-result-object v1
+006da2: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006da8: 6200 1000                              |003c: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006dac: 2201 1700                              |003e: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+006db0: 7010 b400 0100                         |0040: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006db6: 6e20 ba00 4100                         |0043: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006dbc: 0c01                                   |0046: move-result-object v1
+006dbe: 1a02 0000                              |0047: const-string v2, " " // string@0000
+006dc2: 6e20 ba00 2100                         |0049: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006dc8: 0c01                                   |004c: move-result-object v1
+006dca: 6e20 b900 5100                         |004d: invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+006dd0: 0c01                                   |0050: move-result-object v1
+006dd2: 6e10 bb00 0100                         |0051: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006dd8: 0c01                                   |0054: move-result-object v1
+006dda: 6e20 b100 1000                         |0055: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006de0: 7120 9b00 7600                         |0058: invoke-static {v6, v7}, Linvokecustom/InvokeCustom;.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009b
+006de6: 2200 0e00                              |005b: new-instance v0, Linvokecustom/InvokeCustom; // type@000e
+006dea: 7010 9400 0000                         |005d: invoke-direct {v0}, Linvokecustom/InvokeCustom;.<init>:()V // method@0094
+006df0: 6f30 9a00 8009                         |0060: invoke-super {v0, v8, v9}, Linvokecustom/InvokeCustom;.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009a
+006df6: fa20 c300 0a00 1c00                    |0063: invoke-polymorphic {v10, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00c3, proto@001c
+006dfe: 1230                                   |0067: const/4 v0, #int 3 // #3
+006e00: fa20 c300 0b00 0500                    |0068: invoke-polymorphic {v11, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@00c3, proto@0005
+006e08: 0c00                                   |006c: move-result-object v0
+006e0a: fa20 be00 0c00 1c00                    |006d: invoke-polymorphic {v12, v0}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00be, proto@001c
+006e12: 7100 c900 0000                         |0071: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+006e18: 0c00                                   |0074: move-result-object v0
+006e1a: 6e10 c800 0000                         |0075: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+006e20: 0c01                                   |0078: move-result-object v1
+006e22: 6e40 c700 1054                         |0079: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+006e28: 0c00                                   |007c: move-result-object v0
+006e2a: 2201 1b00                              |007d: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+006e2e: 6e20 bd00 5000                         |007f: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+006e34: 0c00                                   |0082: move-result-object v0
+006e36: 7020 bc00 0100                         |0083: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+006e3c: 1101                                   |0086: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=166
+        0x003c line=168
+        0x0058 line=171
+        0x005b line=172
+        0x0060 line=173
+        0x0063 line=176
+        0x0067 line=178
+        0x006d line=179
+        0x0071 line=181
+        0x0075 line=182
+        0x007d line=183
+      locals        :
+        0x0000 - 0x0087 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0087 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0087 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0087 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=9 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=10 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=11 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=12 (null) Ljava/lang/invoke/MethodHandle;
+
+    #7              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'checkFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x0002 (PRIVATE)
+      code          -
+      registers     : 9
+      ins           : 3
+      outs          : 3
+      insns size    : 82 16-bit code units
+006e40:                                        |[006e40] invokecustom.InvokeCustom7.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+006e50: 1405 0ff0 6a20                         |0000: const v5, #float 1.99e-19 // #206af00f
+006e56: fa20 c300 6700 0100                    |0003: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+006e5e: 0a00                                   |0007: move-result v0
+006e60: fa30 c300 6805 1d00                    |0008: invoke-polymorphic {v8, v6, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@00c3, proto@001d
+006e68: fa20 c300 6700 0100                    |000c: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+006e70: 0a01                                   |0010: move-result v1
+006e72: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006e76: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+006e7a: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006e80: 1a04 5e00                              |0018: const-string v4, "checkFieldTest9: old " // string@005e
+006e84: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006e8a: 0c03                                   |001d: move-result-object v3
+006e8c: 6e20 b600 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+006e92: 0c00                                   |0021: move-result-object v0
+006e94: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+006e98: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006e9e: 0c00                                   |0027: move-result-object v0
+006ea0: 6e20 b600 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+006ea6: 0c00                                   |002b: move-result-object v0
+006ea8: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+006eac: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006eb2: 0c00                                   |0031: move-result-object v0
+006eb4: 6e20 b600 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+006eba: 0c00                                   |0035: move-result-object v0
+006ebc: 1a03 0000                              |0036: const-string v3, " " // string@0000
+006ec0: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006ec6: 0c00                                   |003b: move-result-object v0
+006ec8: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006ece: 0c00                                   |003f: move-result-object v0
+006ed0: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+006ed6: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006eda: 2d00 0105                              |0045: cmpl-float v0, v1, v5
+006ede: 3900 0800                              |0047: if-nez v0, 004f // +0008
+006ee2: 1a00 4000                              |0049: const-string v0, "OK" // string@0040
+006ee6: 6e20 b100 0200                         |004b: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006eec: 0e00                                   |004e: return-void
+006eee: 1a00 1000                              |004f: const-string v0, "ERROR" // string@0010
+006ef2: 28fa                                   |0051: goto 004b // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=116
+        0x0008 line=117
+        0x000c line=118
+        0x0011 line=119
+        0x0043 line=121
+        0x004e line=122
+        0x004f line=121
+      locals        :
+        0x0000 - 0x0052 reg=6 this Linvokecustom/InvokeCustom7;
+        0x0000 - 0x0052 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0052 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+
+    #8              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'checkStaticFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 8
+      ins           : 2
+      outs          : 2
+      insns size    : 80 16-bit code units
+006ef4:                                        |[006ef4] invokecustom.InvokeCustom7.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+006f04: 1405 1032 5476                         |0000: const v5, #float 1.07596e+33 // #76543210
+006f0a: fa10 c300 0600 0200                    |0003: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+006f12: 0a00                                   |0007: move-result v0
+006f14: fa20 c300 5700 1a00                    |0008: invoke-polymorphic {v7, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@00c3, proto@001a
+006f1c: fa10 c300 0600 0200                    |000c: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+006f24: 0a01                                   |0010: move-result v1
+006f26: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006f2a: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+006f2e: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+006f34: 1a04 6000                              |0018: const-string v4, "checkStaticFieldTest9: old " // string@0060
+006f38: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006f3e: 0c03                                   |001d: move-result-object v3
+006f40: 6e20 b700 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+006f46: 0c00                                   |0021: move-result-object v0
+006f48: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+006f4c: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006f52: 0c00                                   |0027: move-result-object v0
+006f54: 6e20 b700 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+006f5a: 0c00                                   |002b: move-result-object v0
+006f5c: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+006f60: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006f66: 0c00                                   |0031: move-result-object v0
+006f68: 6e20 b700 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+006f6e: 0c00                                   |0035: move-result-object v0
+006f70: 1a03 0000                              |0036: const-string v3, " " // string@0000
+006f74: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+006f7a: 0c00                                   |003b: move-result-object v0
+006f7c: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+006f82: 0c00                                   |003f: move-result-object v0
+006f84: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+006f8a: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006f8e: 3351 0800                              |0045: if-ne v1, v5, 004d // +0008
+006f92: 1a00 4000                              |0047: const-string v0, "OK" // string@0040
+006f96: 6e20 b100 0200                         |0049: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006f9c: 0e00                                   |004c: return-void
+006f9e: 1a00 1000                              |004d: const-string v0, "ERROR" // string@0010
+006fa2: 28fa                                   |004f: goto 0049 // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=103
+        0x0008 line=104
+        0x000c line=105
+        0x0011 line=106
+        0x0043 line=108
+        0x004c line=109
+        0x004d line=108
+      locals        :
+        0x0000 - 0x0050 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0050 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+
+    #9              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest1'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+006fa4:                                        |[006fa4] invokecustom.InvokeCustom7.targetMethodTest1:()V
+006fb4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006fb8: 1a01 1500                              |0002: const-string v1, "Hello World!" // string@0015
+006fbc: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+006fc2: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=41
+        0x0007 line=42
+      locals        :
+
+    #10              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest2'
+      type          : '(ZBCSIFJDLjava/lang/String;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 13
+      ins           : 11
+      outs          : 3
+      insns size    : 46 16-bit code units
+006fc4:                                        |[006fc4] invokecustom.InvokeCustom7.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+006fd4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006fd8: 6e20 b200 2000                         |0002: invoke-virtual {v0, v2}, Ljava/io/PrintStream;.println:(Z)V // method@00b2
+006fde: 6200 1000                              |0005: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006fe2: 6e20 af00 3000                         |0007: invoke-virtual {v0, v3}, Ljava/io/PrintStream;.println:(I)V // method@00af
+006fe8: 6200 1000                              |000a: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006fec: 6e20 ac00 4000                         |000c: invoke-virtual {v0, v4}, Ljava/io/PrintStream;.println:(C)V // method@00ac
+006ff2: 6200 1000                              |000f: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+006ff6: 6e20 af00 5000                         |0011: invoke-virtual {v0, v5}, Ljava/io/PrintStream;.println:(I)V // method@00af
+006ffc: 6200 1000                              |0014: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007000: 6e20 af00 6000                         |0016: invoke-virtual {v0, v6}, Ljava/io/PrintStream;.println:(I)V // method@00af
+007006: 6200 1000                              |0019: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00700a: 6e20 ae00 7000                         |001b: invoke-virtual {v0, v7}, Ljava/io/PrintStream;.println:(F)V // method@00ae
+007010: 6200 1000                              |001e: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007014: 6e30 b000 8009                         |0020: invoke-virtual {v0, v8, v9}, Ljava/io/PrintStream;.println:(J)V // method@00b0
+00701a: 6200 1000                              |0023: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00701e: 6e30 ad00 a00b                         |0025: invoke-virtual {v0, v10, v11}, Ljava/io/PrintStream;.println:(D)V // method@00ad
+007024: 6200 1000                              |0028: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007028: 6e20 b100 c000                         |002a: invoke-virtual {v0, v12}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00702e: 0e00                                   |002d: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=46
+        0x0005 line=47
+        0x000a line=48
+        0x000f line=49
+        0x0014 line=50
+        0x0019 line=51
+        0x001e line=52
+        0x0023 line=53
+        0x0028 line=54
+        0x002d line=55
+      locals        :
+        0x0000 - 0x002e reg=2 (null) Z
+        0x0000 - 0x002e reg=3 (null) B
+        0x0000 - 0x002e reg=4 (null) C
+        0x0000 - 0x002e reg=5 (null) S
+        0x0000 - 0x002e reg=6 (null) I
+        0x0000 - 0x002e reg=7 (null) F
+        0x0000 - 0x002e reg=8 (null) J
+        0x0000 - 0x002e reg=10 (null) D
+        0x0000 - 0x002e reg=12 (null) Ljava/lang/String;
+
+    #11              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest3'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+007030:                                        |[007030] invokecustom.InvokeCustom7.targetMethodTest3:()V
+007040: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007044: 1a01 7300                              |0002: const-string v1, "targetMethodTest3 from InvokeCustom" // string@0073
+007048: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00704e: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=58
+        0x0007 line=59
+      locals        :
+
+    #12              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest5'
+      type          : '(III)I'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 3
+      outs          : 2
+      insns size    : 83 16-bit code units
+007050:                                        |[007050] invokecustom.InvokeCustom7.targetMethodTest5:(III)I
+007060: 9000 0405                              |0000: add-int v0, v4, v5
+007064: 6201 1000                              |0002: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007068: 2202 1700                              |0004: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+00706c: 7010 b400 0200                         |0006: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007072: 1a03 7800                              |0009: const-string v3, "targetMethodTest5 " // string@0078
+007076: 6e20 ba00 3200                         |000b: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00707c: 0c02                                   |000e: move-result-object v2
+00707e: 6e20 b700 4200                         |000f: invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007084: 0c02                                   |0012: move-result-object v2
+007086: 1a03 0300                              |0013: const-string v3, " + " // string@0003
+00708a: 6e20 ba00 3200                         |0015: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007090: 0c02                                   |0018: move-result-object v2
+007092: 6e20 b700 5200                         |0019: invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007098: 0c02                                   |001c: move-result-object v2
+00709a: 1a03 0400                              |001d: const-string v3, " = " // string@0004
+00709e: 6e20 ba00 3200                         |001f: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0070a4: 0c02                                   |0022: move-result-object v2
+0070a6: 6e20 b700 0200                         |0023: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0070ac: 0c02                                   |0026: move-result-object v2
+0070ae: 6e10 bb00 0200                         |0027: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0070b4: 0c02                                   |002a: move-result-object v2
+0070b6: 6e20 b100 2100                         |002b: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0070bc: 3260 2400                              |002e: if-eq v0, v6, 0052 // +0024
+0070c0: 6201 1000                              |0030: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0070c4: 2202 1700                              |0032: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+0070c8: 7010 b400 0200                         |0034: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0070ce: 1a03 1300                              |0037: const-string v3, "Failed " // string@0013
+0070d2: 6e20 ba00 3200                         |0039: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0070d8: 0c02                                   |003c: move-result-object v2
+0070da: 6e20 b700 0200                         |003d: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0070e0: 0c02                                   |0040: move-result-object v2
+0070e2: 1a03 0100                              |0041: const-string v3, " != " // string@0001
+0070e6: 6e20 ba00 3200                         |0043: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0070ec: 0c02                                   |0046: move-result-object v2
+0070ee: 6e20 b700 6200                         |0047: invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0070f4: 0c02                                   |004a: move-result-object v2
+0070f6: 6e10 bb00 0200                         |004b: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0070fc: 0c02                                   |004e: move-result-object v2
+0070fe: 6e20 b100 2100                         |004f: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007104: 0f00                                   |0052: return v0
+      catches       : (none)
+      positions     :
+        0x0000 line=68
+        0x0002 line=69
+        0x002e line=70
+        0x0030 line=71
+        0x0052 line=73
+      locals        :
+        0x0000 - 0x0053 reg=4 (null) I
+        0x0000 - 0x0053 reg=5 (null) I
+        0x0000 - 0x0053 reg=6 (null) I
+
+    #13              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest6'
+      type          : '(JJJ)J'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 6
+      outs          : 3
+      insns size    : 85 16-bit code units
+007108:                                        |[007108] invokecustom.InvokeCustom7.targetMethodTest6:(JJJ)J
+007118: 9b00 0608                              |0000: add-long v0, v6, v8
+00711c: 6202 1000                              |0002: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007120: 2203 1700                              |0004: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+007124: 7010 b400 0300                         |0006: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00712a: 1a04 7b00                              |0009: const-string v4, "targetMethodTest6 " // string@007b
+00712e: 6e20 ba00 4300                         |000b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007134: 0c03                                   |000e: move-result-object v3
+007136: 6e30 b800 6307                         |000f: invoke-virtual {v3, v6, v7}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+00713c: 0c03                                   |0012: move-result-object v3
+00713e: 1a04 0300                              |0013: const-string v4, " + " // string@0003
+007142: 6e20 ba00 4300                         |0015: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007148: 0c03                                   |0018: move-result-object v3
+00714a: 6e30 b800 8309                         |0019: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+007150: 0c03                                   |001c: move-result-object v3
+007152: 1a04 0400                              |001d: const-string v4, " = " // string@0004
+007156: 6e20 ba00 4300                         |001f: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00715c: 0c03                                   |0022: move-result-object v3
+00715e: 6e30 b800 0301                         |0023: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+007164: 0c03                                   |0026: move-result-object v3
+007166: 6e10 bb00 0300                         |0027: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00716c: 0c03                                   |002a: move-result-object v3
+00716e: 6e20 b100 3200                         |002b: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007174: 3102 000a                              |002e: cmp-long v2, v0, v10
+007178: 3802 2400                              |0030: if-eqz v2, 0054 // +0024
+00717c: 6202 1000                              |0032: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007180: 2203 1700                              |0034: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+007184: 7010 b400 0300                         |0036: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00718a: 1a04 1300                              |0039: const-string v4, "Failed " // string@0013
+00718e: 6e20 ba00 4300                         |003b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007194: 0c03                                   |003e: move-result-object v3
+007196: 6e30 b800 0301                         |003f: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+00719c: 0c03                                   |0042: move-result-object v3
+00719e: 1a04 0100                              |0043: const-string v4, " != " // string@0001
+0071a2: 6e20 ba00 4300                         |0045: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0071a8: 0c03                                   |0048: move-result-object v3
+0071aa: 6e30 b800 a30b                         |0049: invoke-virtual {v3, v10, v11}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0071b0: 0c03                                   |004c: move-result-object v3
+0071b2: 6e10 bb00 0300                         |004d: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0071b8: 0c03                                   |0050: move-result-object v3
+0071ba: 6e20 b100 3200                         |0051: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0071c0: 1000                                   |0054: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=77
+        0x0002 line=78
+        0x002e line=79
+        0x0032 line=80
+        0x0054 line=82
+      locals        :
+        0x0000 - 0x0055 reg=6 (null) J
+        0x0000 - 0x0055 reg=8 (null) J
+        0x0000 - 0x0055 reg=10 (null) J
+
+    #14              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest7'
+      type          : '(FFD)D'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 10
+      ins           : 4
+      outs          : 3
+      insns size    : 86 16-bit code units
+0071c4:                                        |[0071c4] invokecustom.InvokeCustom7.targetMethodTest7:(FFD)D
+0071d4: a800 0607                              |0000: mul-float v0, v6, v7
+0071d8: 8900                                   |0002: float-to-double v0, v0
+0071da: 6202 1000                              |0003: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0071de: 2203 1700                              |0005: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0071e2: 7010 b400 0300                         |0007: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0071e8: 1a04 7e00                              |000a: const-string v4, "targetMethodTest7 " // string@007e
+0071ec: 6e20 ba00 4300                         |000c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0071f2: 0c03                                   |000f: move-result-object v3
+0071f4: 6e20 b600 6300                         |0010: invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+0071fa: 0c03                                   |0013: move-result-object v3
+0071fc: 1a04 0200                              |0014: const-string v4, " * " // string@0002
+007200: 6e20 ba00 4300                         |0016: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007206: 0c03                                   |0019: move-result-object v3
+007208: 6e20 b600 7300                         |001a: invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00720e: 0c03                                   |001d: move-result-object v3
+007210: 1a04 0400                              |001e: const-string v4, " = " // string@0004
+007214: 6e20 ba00 4300                         |0020: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00721a: 0c03                                   |0023: move-result-object v3
+00721c: 6e30 b500 0301                         |0024: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+007222: 0c03                                   |0027: move-result-object v3
+007224: 6e10 bb00 0300                         |0028: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00722a: 0c03                                   |002b: move-result-object v3
+00722c: 6e20 b100 3200                         |002c: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007232: 2f02 0008                              |002f: cmpl-double v2, v0, v8
+007236: 3802 2400                              |0031: if-eqz v2, 0055 // +0024
+00723a: 6202 1000                              |0033: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00723e: 2203 1700                              |0035: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+007242: 7010 b400 0300                         |0037: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007248: 1a04 1300                              |003a: const-string v4, "Failed " // string@0013
+00724c: 6e20 ba00 4300                         |003c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007252: 0c03                                   |003f: move-result-object v3
+007254: 6e30 b500 0301                         |0040: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00725a: 0c03                                   |0043: move-result-object v3
+00725c: 1a04 0100                              |0044: const-string v4, " != " // string@0001
+007260: 6e20 ba00 4300                         |0046: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007266: 0c03                                   |0049: move-result-object v3
+007268: 6e30 b500 8309                         |004a: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00726e: 0c03                                   |004d: move-result-object v3
+007270: 6e10 bb00 0300                         |004e: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007276: 0c03                                   |0051: move-result-object v3
+007278: 6e20 b100 3200                         |0052: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00727e: 1000                                   |0055: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=86
+        0x0003 line=87
+        0x002f line=88
+        0x0033 line=89
+        0x0055 line=91
+      locals        :
+        0x0000 - 0x0056 reg=6 (null) F
+        0x0000 - 0x0056 reg=7 (null) F
+        0x0000 - 0x0056 reg=8 (null) D
+
+    #15              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest8'
+      type          : '(Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 25 16-bit code units
+007280:                                        |[007280] invokecustom.InvokeCustom7.targetMethodTest8:(Ljava/lang/String;)V
+007290: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007294: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007298: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00729e: 1a02 8000                              |0007: const-string v2, "targetMethodTest8 " // string@0080
+0072a2: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0072a8: 0c01                                   |000c: move-result-object v1
+0072aa: 6e20 ba00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0072b0: 0c01                                   |0010: move-result-object v1
+0072b2: 6e10 bb00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0072b8: 0c01                                   |0014: move-result-object v1
+0072ba: 6e20 b100 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0072c0: 0e00                                   |0018: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=95
+        0x0018 line=96
+      locals        :
+        0x0000 - 0x0019 reg=3 (null) Ljava/lang/String;
+
+    #16              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest9'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+0072c4:                                        |[0072c4] invokecustom.InvokeCustom7.targetMethodTest9:()V
+0072d4: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0072d8: 1a01 8200                              |0002: const-string v1, "targetMethodTest9()" // string@0082
+0072dc: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0072e2: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=129
+        0x0007 line=130
+      locals        :
+
+    #17              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'test7'
+      type          : '()V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 0
+      outs          : 4
+      insns size    : 40 16-bit code units
+0072e4:                                        |[0072e4] invokecustom.InvokeCustom7.test7:()V
+0072f4: 1400 0040 003f                         |0000: const v0, #float 0.500977 // #3f004000
+0072fa: 1401 0040 00bf                         |0003: const v1, #float -0.500977 // #bf004000
+007300: 1802 0000 0000 0410 d0bf               |0006: const-wide v2, #double -0.250978 // #bfd0100400000000
+00730a: fc40 0500 1032                         |000b: invoke-custom {v0, v1, v2, v3}, call_site@0005
+007310: 0b00                                   |000e: move-result-wide v0
+007312: 6202 1000                              |000f: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007316: 2203 1700                              |0011: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+00731a: 7010 b400 0300                         |0013: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007320: 1a04 7c00                              |0016: const-string v4, "targetMethodTest6 returned: " // string@007c
+007324: 6e20 ba00 4300                         |0018: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00732a: 0c03                                   |001b: move-result-object v3
+00732c: 6e30 b500 0301                         |001c: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+007332: 0c00                                   |001f: move-result-object v0
+007334: 6e10 bb00 0000                         |0020: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00733a: 0c00                                   |0023: move-result-object v0
+00733c: 6e20 b100 0200                         |0024: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007342: 0e00                                   |0027: return-void
+      catches       : (none)
+      positions     :
+      locals        :
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 27 16-bit code units
+007344:                                        |[007344] invokecustom.InvokeCustom7.helperMethodTest9:()V
+007354: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007358: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+00735c: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007362: 1a02 6400                              |0007: const-string v2, "helperMethodTest9 in " // string@0064
+007366: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00736c: 0c01                                   |000c: move-result-object v1
+00736e: 1c02 0e00                              |000d: const-class v2, Linvokecustom/InvokeCustom; // type@000e
+007372: 6e20 b900 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007378: 0c01                                   |0012: move-result-object v1
+00737a: 6e10 bb00 0100                         |0013: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007380: 0c01                                   |0016: move-result-object v1
+007382: 6e20 b100 1000                         |0017: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007388: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=125
+        0x001a line=126
+      locals        :
+        0x0000 - 0x001b reg=3 this Linvokecustom/InvokeCustom7;
+
+    #1              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'run'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+00738c:                                        |[00738c] invokecustom.InvokeCustom7.run:()V
+00739c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0073a0: 1a01 6e00                              |0002: const-string v1, "run() for Test9" // string@006e
+0073a4: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0073aa: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=133
+        0x0007 line=134
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom7;
+
+    #2              : (in Linvokecustom/InvokeCustom7;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+0073ac:                                        |[0073ac] invokecustom.InvokeCustom7.targetMethodTest4:()V
+0073bc: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0073c0: 1a01 7500                              |0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // string@0075
+0073c4: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0073ca: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=64
+        0x0007 line=65
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom7;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Class #7            -
+  Class descriptor  : 'Linvokecustom/InvokeCustom8;'
+  Access flags      : 0x0001 (PUBLIC)
+  Superclass        : 'Linvokecustom/Super;'
+  Interfaces        -
+    #0              : 'Ljava/lang/Runnable;'
+  Static fields     -
+    #0              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'staticFieldTest9'
+      type          : 'I'
+      access        : 0x000a (PRIVATE STATIC)
+  Instance fields   -
+    #0              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'fieldTest9'
+      type          : 'F'
+      access        : 0x0002 (PRIVATE)
+  Direct methods    -
+    #0              : (in Linvokecustom/InvokeCustom8;)
+      name          : '<clinit>'
+      type          : '()V'
+      access        : 0x10008 (STATIC CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+0073cc:                                        |[0073cc] invokecustom.InvokeCustom8.<clinit>:()V
+0073dc: 1200                                   |0000: const/4 v0, #int 0 // #0
+0073de: 6700 0f00                              |0001: sput v0, Linvokecustom/InvokeCustom;.staticFieldTest9:I // field@000f
+0073e2: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=98
+      locals        :
+
+    #1              : (in Linvokecustom/InvokeCustom8;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 2
+      ins           : 1
+      outs          : 1
+      insns size    : 7 16-bit code units
+0073e4:                                        |[0073e4] invokecustom.InvokeCustom8.<init>:()V
+0073f4: 7010 a800 0100                         |0000: invoke-direct {v1}, Linvokecustom/Super;.<init>:()V // method@00a8
+0073fa: 1200                                   |0003: const/4 v0, #int 0 // #0
+0073fc: 5910 0e00                              |0004: iput v0, v1, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+007400: 0e00                                   |0006: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=35
+        0x0003 line=111
+        0x0006 line=35
+      locals        :
+        0x0000 - 0x0007 reg=1 this Linvokecustom/InvokeCustom8;
+
+    #2              : (in Linvokecustom/InvokeCustom8;)
+      name          : '<init>'
+      type          : '(I)V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 5
+      ins           : 2
+      outs          : 2
+      insns size    : 37 16-bit code units
+007404:                                        |[007404] invokecustom.InvokeCustom8.<init>:(I)V
+007414: 7010 a800 0300                         |0000: invoke-direct {v3}, Linvokecustom/Super;.<init>:()V // method@00a8
+00741a: 1200                                   |0003: const/4 v0, #int 0 // #0
+00741c: 5930 0e00                              |0004: iput v0, v3, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+007420: 6200 1000                              |0006: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007424: 2201 1700                              |0008: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007428: 7010 b400 0100                         |000a: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00742e: 1a02 1800                              |000d: const-string v2, "InvokeCustom.<init>(" // string@0018
+007432: 6e20 ba00 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007438: 0c01                                   |0012: move-result-object v1
+00743a: 6e20 b700 4100                         |0013: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007440: 0c01                                   |0016: move-result-object v1
+007442: 1a02 0700                              |0017: const-string v2, ")" // string@0007
+007446: 6e20 ba00 2100                         |0019: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00744c: 0c01                                   |001c: move-result-object v1
+00744e: 6e10 bb00 0100                         |001d: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007454: 0c01                                   |0020: move-result-object v1
+007456: 6e20 b100 1000                         |0021: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00745c: 0e00                                   |0024: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=36
+        0x0003 line=111
+        0x0006 line=37
+        0x0024 line=38
+      locals        :
+        0x0000 - 0x0025 reg=3 this Linvokecustom/InvokeCustom8;
+        0x0000 - 0x0025 reg=4 (null) I
+
+    #3              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'bsmCreateCallSite'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 4
+      outs          : 2
+      insns size    : 36 16-bit code units
+007460:                                        |[007460] invokecustom.InvokeCustom8.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+007470: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007474: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007478: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00747e: 1a02 5600                              |0007: const-string v2, "bsmCreateCallSite [" // string@0056
+007482: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007488: 0c01                                   |000c: move-result-object v1
+00748a: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007490: 0c01                                   |0010: move-result-object v1
+007492: 1a02 5200                              |0011: const-string v2, "]" // string@0052
+007496: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00749c: 0c01                                   |0016: move-result-object v1
+00749e: 6e10 bb00 0100                         |0017: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0074a4: 0c01                                   |001a: move-result-object v1
+0074a6: 6e20 b100 1000                         |001b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0074ac: 2200 1b00                              |001e: new-instance v0, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0074b0: 7020 bc00 6000                         |0020: invoke-direct {v0, v6}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0074b6: 1100                                   |0023: return-object v0
+      catches       : (none)
+      positions     :
+        0x0000 line=156
+        0x001e line=157
+      locals        :
+        0x0000 - 0x0024 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0024 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0024 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0024 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+
+    #4              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'bsmLookupStatic'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 3
+      outs          : 4
+      insns size    : 29 16-bit code units
+0074b8:                                        |[0074b8] invokecustom.InvokeCustom8.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+0074c8: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0074cc: 1a01 5800                              |0002: const-string v1, "bsmLookupStatic []" // string@0058
+0074d0: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0074d6: 7100 c900 0000                         |0007: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+0074dc: 0c00                                   |000a: move-result-object v0
+0074de: 6e10 c800 0000                         |000b: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+0074e4: 0c01                                   |000e: move-result-object v1
+0074e6: 6e40 c700 1043                         |000f: invoke-virtual {v0, v1, v3, v4}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+0074ec: 0c00                                   |0012: move-result-object v0
+0074ee: 2201 1b00                              |0013: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0074f2: 6e20 bd00 4000                         |0015: invoke-virtual {v0, v4}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+0074f8: 0c00                                   |0018: move-result-object v0
+0074fa: 7020 bc00 0100                         |0019: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+007500: 1101                                   |001c: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=138
+        0x0007 line=139
+        0x000b line=140
+        0x0013 line=141
+      locals        :
+        0x0000 - 0x001d reg=2 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x001d reg=3 (null) Ljava/lang/String;
+        0x0000 - 0x001d reg=4 (null) Ljava/lang/invoke/MethodType;
+
+    #5              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'bsmLookupStaticWithExtraArgs'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 9
+      outs          : 4
+      insns size    : 82 16-bit code units
+007504:                                        |[007504] invokecustom.InvokeCustom8.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+007514: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007518: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+00751c: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007522: 1a02 5a00                              |0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // string@005a
+007526: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00752c: 0c01                                   |000c: move-result-object v1
+00752e: 6e20 b700 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007534: 0c01                                   |0010: move-result-object v1
+007536: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+00753a: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007540: 0c01                                   |0016: move-result-object v1
+007542: 6e30 b800 7108                         |0017: invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+007548: 0c01                                   |001a: move-result-object v1
+00754a: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+00754e: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007554: 0c01                                   |0020: move-result-object v1
+007556: 6e20 b600 9100                         |0021: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00755c: 0c01                                   |0024: move-result-object v1
+00755e: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+007562: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007568: 0c01                                   |002a: move-result-object v1
+00756a: 6e30 b500 a10b                         |002b: invoke-virtual {v1, v10, v11}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+007570: 0c01                                   |002e: move-result-object v1
+007572: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+007576: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00757c: 0c01                                   |0034: move-result-object v1
+00757e: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007584: 0c01                                   |0038: move-result-object v1
+007586: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00758c: 7100 c900 0000                         |003c: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+007592: 0c00                                   |003f: move-result-object v0
+007594: 6e10 c800 0000                         |0040: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+00759a: 0c01                                   |0043: move-result-object v1
+00759c: 6e40 c700 1054                         |0044: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+0075a2: 0c00                                   |0047: move-result-object v0
+0075a4: 2201 1b00                              |0048: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0075a8: 6e20 bd00 5000                         |004a: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+0075ae: 0c00                                   |004d: move-result-object v0
+0075b0: 7020 bc00 0100                         |004e: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0075b6: 1101                                   |0051: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=147
+        0x003c line=148
+        0x0040 line=149
+        0x0048 line=150
+      locals        :
+        0x0000 - 0x0052 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0052 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0052 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0052 reg=6 (null) I
+        0x0000 - 0x0052 reg=7 (null) J
+        0x0000 - 0x0052 reg=9 (null) F
+        0x0000 - 0x0052 reg=10 (null) D
+
+    #6              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'bsmLookupTest9'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 13
+      ins           : 10
+      outs          : 4
+      insns size    : 135 16-bit code units
+0075b8:                                        |[0075b8] invokecustom.InvokeCustom8.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+0075c8: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0075cc: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0075d0: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0075d6: 1a02 5c00                              |0007: const-string v2, "bsmLookupTest9 [" // string@005c
+0075da: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0075e0: 0c01                                   |000c: move-result-object v1
+0075e2: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0075e8: 0c01                                   |0010: move-result-object v1
+0075ea: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+0075ee: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0075f4: 0c01                                   |0016: move-result-object v1
+0075f6: 6e20 b900 7100                         |0017: invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+0075fc: 0c01                                   |001a: move-result-object v1
+0075fe: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+007602: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007608: 0c01                                   |0020: move-result-object v1
+00760a: 6e20 b900 8100                         |0021: invoke-virtual {v1, v8}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007610: 0c01                                   |0024: move-result-object v1
+007612: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+007616: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00761c: 0c01                                   |002a: move-result-object v1
+00761e: 6e20 b900 9100                         |002b: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007624: 0c01                                   |002e: move-result-object v1
+007626: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+00762a: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007630: 0c01                                   |0034: move-result-object v1
+007632: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007638: 0c01                                   |0038: move-result-object v1
+00763a: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007640: 6200 1000                              |003c: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007644: 2201 1700                              |003e: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007648: 7010 b400 0100                         |0040: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00764e: 6e20 ba00 4100                         |0043: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007654: 0c01                                   |0046: move-result-object v1
+007656: 1a02 0000                              |0047: const-string v2, " " // string@0000
+00765a: 6e20 ba00 2100                         |0049: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007660: 0c01                                   |004c: move-result-object v1
+007662: 6e20 b900 5100                         |004d: invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007668: 0c01                                   |0050: move-result-object v1
+00766a: 6e10 bb00 0100                         |0051: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007670: 0c01                                   |0054: move-result-object v1
+007672: 6e20 b100 1000                         |0055: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007678: 7120 9b00 7600                         |0058: invoke-static {v6, v7}, Linvokecustom/InvokeCustom;.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009b
+00767e: 2200 0e00                              |005b: new-instance v0, Linvokecustom/InvokeCustom; // type@000e
+007682: 7010 9400 0000                         |005d: invoke-direct {v0}, Linvokecustom/InvokeCustom;.<init>:()V // method@0094
+007688: 6f30 9a00 8009                         |0060: invoke-super {v0, v8, v9}, Linvokecustom/InvokeCustom;.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009a
+00768e: fa20 c300 0a00 1c00                    |0063: invoke-polymorphic {v10, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00c3, proto@001c
+007696: 1230                                   |0067: const/4 v0, #int 3 // #3
+007698: fa20 c300 0b00 0500                    |0068: invoke-polymorphic {v11, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@00c3, proto@0005
+0076a0: 0c00                                   |006c: move-result-object v0
+0076a2: fa20 be00 0c00 1c00                    |006d: invoke-polymorphic {v12, v0}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00be, proto@001c
+0076aa: 7100 c900 0000                         |0071: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+0076b0: 0c00                                   |0074: move-result-object v0
+0076b2: 6e10 c800 0000                         |0075: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+0076b8: 0c01                                   |0078: move-result-object v1
+0076ba: 6e40 c700 1054                         |0079: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+0076c0: 0c00                                   |007c: move-result-object v0
+0076c2: 2201 1b00                              |007d: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+0076c6: 6e20 bd00 5000                         |007f: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+0076cc: 0c00                                   |0082: move-result-object v0
+0076ce: 7020 bc00 0100                         |0083: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+0076d4: 1101                                   |0086: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=166
+        0x003c line=168
+        0x0058 line=171
+        0x005b line=172
+        0x0060 line=173
+        0x0063 line=176
+        0x0067 line=178
+        0x006d line=179
+        0x0071 line=181
+        0x0075 line=182
+        0x007d line=183
+      locals        :
+        0x0000 - 0x0087 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0087 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0087 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0087 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=9 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=10 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=11 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=12 (null) Ljava/lang/invoke/MethodHandle;
+
+    #7              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'checkFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x0002 (PRIVATE)
+      code          -
+      registers     : 9
+      ins           : 3
+      outs          : 3
+      insns size    : 82 16-bit code units
+0076d8:                                        |[0076d8] invokecustom.InvokeCustom8.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+0076e8: 1405 0ff0 6a20                         |0000: const v5, #float 1.99e-19 // #206af00f
+0076ee: fa20 c300 6700 0100                    |0003: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+0076f6: 0a00                                   |0007: move-result v0
+0076f8: fa30 c300 6805 1d00                    |0008: invoke-polymorphic {v8, v6, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@00c3, proto@001d
+007700: fa20 c300 6700 0100                    |000c: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+007708: 0a01                                   |0010: move-result v1
+00770a: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00770e: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+007712: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007718: 1a04 5e00                              |0018: const-string v4, "checkFieldTest9: old " // string@005e
+00771c: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007722: 0c03                                   |001d: move-result-object v3
+007724: 6e20 b600 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00772a: 0c00                                   |0021: move-result-object v0
+00772c: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+007730: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007736: 0c00                                   |0027: move-result-object v0
+007738: 6e20 b600 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00773e: 0c00                                   |002b: move-result-object v0
+007740: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+007744: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00774a: 0c00                                   |0031: move-result-object v0
+00774c: 6e20 b600 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+007752: 0c00                                   |0035: move-result-object v0
+007754: 1a03 0000                              |0036: const-string v3, " " // string@0000
+007758: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00775e: 0c00                                   |003b: move-result-object v0
+007760: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007766: 0c00                                   |003f: move-result-object v0
+007768: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+00776e: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007772: 2d00 0105                              |0045: cmpl-float v0, v1, v5
+007776: 3900 0800                              |0047: if-nez v0, 004f // +0008
+00777a: 1a00 4000                              |0049: const-string v0, "OK" // string@0040
+00777e: 6e20 b100 0200                         |004b: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007784: 0e00                                   |004e: return-void
+007786: 1a00 1000                              |004f: const-string v0, "ERROR" // string@0010
+00778a: 28fa                                   |0051: goto 004b // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=116
+        0x0008 line=117
+        0x000c line=118
+        0x0011 line=119
+        0x0043 line=121
+        0x004e line=122
+        0x004f line=121
+      locals        :
+        0x0000 - 0x0052 reg=6 this Linvokecustom/InvokeCustom8;
+        0x0000 - 0x0052 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0052 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+
+    #8              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'checkStaticFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 8
+      ins           : 2
+      outs          : 2
+      insns size    : 80 16-bit code units
+00778c:                                        |[00778c] invokecustom.InvokeCustom8.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+00779c: 1405 1032 5476                         |0000: const v5, #float 1.07596e+33 // #76543210
+0077a2: fa10 c300 0600 0200                    |0003: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+0077aa: 0a00                                   |0007: move-result v0
+0077ac: fa20 c300 5700 1a00                    |0008: invoke-polymorphic {v7, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@00c3, proto@001a
+0077b4: fa10 c300 0600 0200                    |000c: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+0077bc: 0a01                                   |0010: move-result v1
+0077be: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0077c2: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0077c6: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0077cc: 1a04 6000                              |0018: const-string v4, "checkStaticFieldTest9: old " // string@0060
+0077d0: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0077d6: 0c03                                   |001d: move-result-object v3
+0077d8: 6e20 b700 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0077de: 0c00                                   |0021: move-result-object v0
+0077e0: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+0077e4: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0077ea: 0c00                                   |0027: move-result-object v0
+0077ec: 6e20 b700 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0077f2: 0c00                                   |002b: move-result-object v0
+0077f4: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+0077f8: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0077fe: 0c00                                   |0031: move-result-object v0
+007800: 6e20 b700 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007806: 0c00                                   |0035: move-result-object v0
+007808: 1a03 0000                              |0036: const-string v3, " " // string@0000
+00780c: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007812: 0c00                                   |003b: move-result-object v0
+007814: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00781a: 0c00                                   |003f: move-result-object v0
+00781c: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+007822: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007826: 3351 0800                              |0045: if-ne v1, v5, 004d // +0008
+00782a: 1a00 4000                              |0047: const-string v0, "OK" // string@0040
+00782e: 6e20 b100 0200                         |0049: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007834: 0e00                                   |004c: return-void
+007836: 1a00 1000                              |004d: const-string v0, "ERROR" // string@0010
+00783a: 28fa                                   |004f: goto 0049 // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=103
+        0x0008 line=104
+        0x000c line=105
+        0x0011 line=106
+        0x0043 line=108
+        0x004c line=109
+        0x004d line=108
+      locals        :
+        0x0000 - 0x0050 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0050 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+
+    #9              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest1'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+00783c:                                        |[00783c] invokecustom.InvokeCustom8.targetMethodTest1:()V
+00784c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007850: 1a01 1500                              |0002: const-string v1, "Hello World!" // string@0015
+007854: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00785a: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=41
+        0x0007 line=42
+      locals        :
+
+    #10              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest2'
+      type          : '(ZBCSIFJDLjava/lang/String;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 13
+      ins           : 11
+      outs          : 3
+      insns size    : 46 16-bit code units
+00785c:                                        |[00785c] invokecustom.InvokeCustom8.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+00786c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007870: 6e20 b200 2000                         |0002: invoke-virtual {v0, v2}, Ljava/io/PrintStream;.println:(Z)V // method@00b2
+007876: 6200 1000                              |0005: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00787a: 6e20 af00 3000                         |0007: invoke-virtual {v0, v3}, Ljava/io/PrintStream;.println:(I)V // method@00af
+007880: 6200 1000                              |000a: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007884: 6e20 ac00 4000                         |000c: invoke-virtual {v0, v4}, Ljava/io/PrintStream;.println:(C)V // method@00ac
+00788a: 6200 1000                              |000f: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00788e: 6e20 af00 5000                         |0011: invoke-virtual {v0, v5}, Ljava/io/PrintStream;.println:(I)V // method@00af
+007894: 6200 1000                              |0014: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007898: 6e20 af00 6000                         |0016: invoke-virtual {v0, v6}, Ljava/io/PrintStream;.println:(I)V // method@00af
+00789e: 6200 1000                              |0019: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0078a2: 6e20 ae00 7000                         |001b: invoke-virtual {v0, v7}, Ljava/io/PrintStream;.println:(F)V // method@00ae
+0078a8: 6200 1000                              |001e: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0078ac: 6e30 b000 8009                         |0020: invoke-virtual {v0, v8, v9}, Ljava/io/PrintStream;.println:(J)V // method@00b0
+0078b2: 6200 1000                              |0023: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0078b6: 6e30 ad00 a00b                         |0025: invoke-virtual {v0, v10, v11}, Ljava/io/PrintStream;.println:(D)V // method@00ad
+0078bc: 6200 1000                              |0028: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0078c0: 6e20 b100 c000                         |002a: invoke-virtual {v0, v12}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0078c6: 0e00                                   |002d: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=46
+        0x0005 line=47
+        0x000a line=48
+        0x000f line=49
+        0x0014 line=50
+        0x0019 line=51
+        0x001e line=52
+        0x0023 line=53
+        0x0028 line=54
+        0x002d line=55
+      locals        :
+        0x0000 - 0x002e reg=2 (null) Z
+        0x0000 - 0x002e reg=3 (null) B
+        0x0000 - 0x002e reg=4 (null) C
+        0x0000 - 0x002e reg=5 (null) S
+        0x0000 - 0x002e reg=6 (null) I
+        0x0000 - 0x002e reg=7 (null) F
+        0x0000 - 0x002e reg=8 (null) J
+        0x0000 - 0x002e reg=10 (null) D
+        0x0000 - 0x002e reg=12 (null) Ljava/lang/String;
+
+    #11              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest3'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+0078c8:                                        |[0078c8] invokecustom.InvokeCustom8.targetMethodTest3:()V
+0078d8: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0078dc: 1a01 7300                              |0002: const-string v1, "targetMethodTest3 from InvokeCustom" // string@0073
+0078e0: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0078e6: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=58
+        0x0007 line=59
+      locals        :
+
+    #12              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest5'
+      type          : '(III)I'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 3
+      outs          : 2
+      insns size    : 83 16-bit code units
+0078e8:                                        |[0078e8] invokecustom.InvokeCustom8.targetMethodTest5:(III)I
+0078f8: 9000 0405                              |0000: add-int v0, v4, v5
+0078fc: 6201 1000                              |0002: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007900: 2202 1700                              |0004: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+007904: 7010 b400 0200                         |0006: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00790a: 1a03 7800                              |0009: const-string v3, "targetMethodTest5 " // string@0078
+00790e: 6e20 ba00 3200                         |000b: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007914: 0c02                                   |000e: move-result-object v2
+007916: 6e20 b700 4200                         |000f: invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00791c: 0c02                                   |0012: move-result-object v2
+00791e: 1a03 0300                              |0013: const-string v3, " + " // string@0003
+007922: 6e20 ba00 3200                         |0015: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007928: 0c02                                   |0018: move-result-object v2
+00792a: 6e20 b700 5200                         |0019: invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007930: 0c02                                   |001c: move-result-object v2
+007932: 1a03 0400                              |001d: const-string v3, " = " // string@0004
+007936: 6e20 ba00 3200                         |001f: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00793c: 0c02                                   |0022: move-result-object v2
+00793e: 6e20 b700 0200                         |0023: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007944: 0c02                                   |0026: move-result-object v2
+007946: 6e10 bb00 0200                         |0027: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00794c: 0c02                                   |002a: move-result-object v2
+00794e: 6e20 b100 2100                         |002b: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007954: 3260 2400                              |002e: if-eq v0, v6, 0052 // +0024
+007958: 6201 1000                              |0030: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00795c: 2202 1700                              |0032: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+007960: 7010 b400 0200                         |0034: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007966: 1a03 1300                              |0037: const-string v3, "Failed " // string@0013
+00796a: 6e20 ba00 3200                         |0039: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007970: 0c02                                   |003c: move-result-object v2
+007972: 6e20 b700 0200                         |003d: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007978: 0c02                                   |0040: move-result-object v2
+00797a: 1a03 0100                              |0041: const-string v3, " != " // string@0001
+00797e: 6e20 ba00 3200                         |0043: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007984: 0c02                                   |0046: move-result-object v2
+007986: 6e20 b700 6200                         |0047: invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00798c: 0c02                                   |004a: move-result-object v2
+00798e: 6e10 bb00 0200                         |004b: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007994: 0c02                                   |004e: move-result-object v2
+007996: 6e20 b100 2100                         |004f: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00799c: 0f00                                   |0052: return v0
+      catches       : (none)
+      positions     :
+        0x0000 line=68
+        0x0002 line=69
+        0x002e line=70
+        0x0030 line=71
+        0x0052 line=73
+      locals        :
+        0x0000 - 0x0053 reg=4 (null) I
+        0x0000 - 0x0053 reg=5 (null) I
+        0x0000 - 0x0053 reg=6 (null) I
+
+    #13              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest6'
+      type          : '(JJJ)J'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 6
+      outs          : 3
+      insns size    : 85 16-bit code units
+0079a0:                                        |[0079a0] invokecustom.InvokeCustom8.targetMethodTest6:(JJJ)J
+0079b0: 9b00 0608                              |0000: add-long v0, v6, v8
+0079b4: 6202 1000                              |0002: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0079b8: 2203 1700                              |0004: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0079bc: 7010 b400 0300                         |0006: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0079c2: 1a04 7b00                              |0009: const-string v4, "targetMethodTest6 " // string@007b
+0079c6: 6e20 ba00 4300                         |000b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0079cc: 0c03                                   |000e: move-result-object v3
+0079ce: 6e30 b800 6307                         |000f: invoke-virtual {v3, v6, v7}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0079d4: 0c03                                   |0012: move-result-object v3
+0079d6: 1a04 0300                              |0013: const-string v4, " + " // string@0003
+0079da: 6e20 ba00 4300                         |0015: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0079e0: 0c03                                   |0018: move-result-object v3
+0079e2: 6e30 b800 8309                         |0019: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0079e8: 0c03                                   |001c: move-result-object v3
+0079ea: 1a04 0400                              |001d: const-string v4, " = " // string@0004
+0079ee: 6e20 ba00 4300                         |001f: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0079f4: 0c03                                   |0022: move-result-object v3
+0079f6: 6e30 b800 0301                         |0023: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0079fc: 0c03                                   |0026: move-result-object v3
+0079fe: 6e10 bb00 0300                         |0027: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007a04: 0c03                                   |002a: move-result-object v3
+007a06: 6e20 b100 3200                         |002b: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007a0c: 3102 000a                              |002e: cmp-long v2, v0, v10
+007a10: 3802 2400                              |0030: if-eqz v2, 0054 // +0024
+007a14: 6202 1000                              |0032: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007a18: 2203 1700                              |0034: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+007a1c: 7010 b400 0300                         |0036: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007a22: 1a04 1300                              |0039: const-string v4, "Failed " // string@0013
+007a26: 6e20 ba00 4300                         |003b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007a2c: 0c03                                   |003e: move-result-object v3
+007a2e: 6e30 b800 0301                         |003f: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+007a34: 0c03                                   |0042: move-result-object v3
+007a36: 1a04 0100                              |0043: const-string v4, " != " // string@0001
+007a3a: 6e20 ba00 4300                         |0045: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007a40: 0c03                                   |0048: move-result-object v3
+007a42: 6e30 b800 a30b                         |0049: invoke-virtual {v3, v10, v11}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+007a48: 0c03                                   |004c: move-result-object v3
+007a4a: 6e10 bb00 0300                         |004d: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007a50: 0c03                                   |0050: move-result-object v3
+007a52: 6e20 b100 3200                         |0051: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007a58: 1000                                   |0054: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=77
+        0x0002 line=78
+        0x002e line=79
+        0x0032 line=80
+        0x0054 line=82
+      locals        :
+        0x0000 - 0x0055 reg=6 (null) J
+        0x0000 - 0x0055 reg=8 (null) J
+        0x0000 - 0x0055 reg=10 (null) J
+
+    #14              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest7'
+      type          : '(FFD)D'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 10
+      ins           : 4
+      outs          : 3
+      insns size    : 86 16-bit code units
+007a5c:                                        |[007a5c] invokecustom.InvokeCustom8.targetMethodTest7:(FFD)D
+007a6c: a800 0607                              |0000: mul-float v0, v6, v7
+007a70: 8900                                   |0002: float-to-double v0, v0
+007a72: 6202 1000                              |0003: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007a76: 2203 1700                              |0005: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+007a7a: 7010 b400 0300                         |0007: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007a80: 1a04 7e00                              |000a: const-string v4, "targetMethodTest7 " // string@007e
+007a84: 6e20 ba00 4300                         |000c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007a8a: 0c03                                   |000f: move-result-object v3
+007a8c: 6e20 b600 6300                         |0010: invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+007a92: 0c03                                   |0013: move-result-object v3
+007a94: 1a04 0200                              |0014: const-string v4, " * " // string@0002
+007a98: 6e20 ba00 4300                         |0016: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007a9e: 0c03                                   |0019: move-result-object v3
+007aa0: 6e20 b600 7300                         |001a: invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+007aa6: 0c03                                   |001d: move-result-object v3
+007aa8: 1a04 0400                              |001e: const-string v4, " = " // string@0004
+007aac: 6e20 ba00 4300                         |0020: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007ab2: 0c03                                   |0023: move-result-object v3
+007ab4: 6e30 b500 0301                         |0024: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+007aba: 0c03                                   |0027: move-result-object v3
+007abc: 6e10 bb00 0300                         |0028: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007ac2: 0c03                                   |002b: move-result-object v3
+007ac4: 6e20 b100 3200                         |002c: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007aca: 2f02 0008                              |002f: cmpl-double v2, v0, v8
+007ace: 3802 2400                              |0031: if-eqz v2, 0055 // +0024
+007ad2: 6202 1000                              |0033: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007ad6: 2203 1700                              |0035: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+007ada: 7010 b400 0300                         |0037: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007ae0: 1a04 1300                              |003a: const-string v4, "Failed " // string@0013
+007ae4: 6e20 ba00 4300                         |003c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007aea: 0c03                                   |003f: move-result-object v3
+007aec: 6e30 b500 0301                         |0040: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+007af2: 0c03                                   |0043: move-result-object v3
+007af4: 1a04 0100                              |0044: const-string v4, " != " // string@0001
+007af8: 6e20 ba00 4300                         |0046: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007afe: 0c03                                   |0049: move-result-object v3
+007b00: 6e30 b500 8309                         |004a: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+007b06: 0c03                                   |004d: move-result-object v3
+007b08: 6e10 bb00 0300                         |004e: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007b0e: 0c03                                   |0051: move-result-object v3
+007b10: 6e20 b100 3200                         |0052: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007b16: 1000                                   |0055: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=86
+        0x0003 line=87
+        0x002f line=88
+        0x0033 line=89
+        0x0055 line=91
+      locals        :
+        0x0000 - 0x0056 reg=6 (null) F
+        0x0000 - 0x0056 reg=7 (null) F
+        0x0000 - 0x0056 reg=8 (null) D
+
+    #15              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest8'
+      type          : '(Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 25 16-bit code units
+007b18:                                        |[007b18] invokecustom.InvokeCustom8.targetMethodTest8:(Ljava/lang/String;)V
+007b28: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007b2c: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007b30: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007b36: 1a02 8000                              |0007: const-string v2, "targetMethodTest8 " // string@0080
+007b3a: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007b40: 0c01                                   |000c: move-result-object v1
+007b42: 6e20 ba00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007b48: 0c01                                   |0010: move-result-object v1
+007b4a: 6e10 bb00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007b50: 0c01                                   |0014: move-result-object v1
+007b52: 6e20 b100 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007b58: 0e00                                   |0018: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=95
+        0x0018 line=96
+      locals        :
+        0x0000 - 0x0019 reg=3 (null) Ljava/lang/String;
+
+    #16              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest9'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+007b5c:                                        |[007b5c] invokecustom.InvokeCustom8.targetMethodTest9:()V
+007b6c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007b70: 1a01 8200                              |0002: const-string v1, "targetMethodTest9()" // string@0082
+007b74: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007b7a: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=129
+        0x0007 line=130
+      locals        :
+
+    #17              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'test8'
+      type          : '()V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 1
+      insns size    : 16 16-bit code units
+007b7c:                                        |[007b7c] invokecustom.InvokeCustom8.test8:()V
+007b8c: 1a00 1400                              |0000: const-string v0, "First invokedynamic invocation" // string@0014
+007b90: fc10 0600 0000                         |0002: invoke-custom {v0}, call_site@0006
+007b96: 1a00 4200                              |0005: const-string v0, "Second invokedynamic invocation" // string@0042
+007b9a: fc10 0700 0000                         |0007: invoke-custom {v0}, call_site@0007
+007ba0: 1a00 0f00                              |000a: const-string v0, "Dupe first invokedynamic invocation" // string@000f
+007ba4: fc10 0800 0000                         |000c: invoke-custom {v0}, call_site@0008
+007baa: 0e00                                   |000f: return-void
+      catches       : (none)
+      positions     :
+      locals        :
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 27 16-bit code units
+007bac:                                        |[007bac] invokecustom.InvokeCustom8.helperMethodTest9:()V
+007bbc: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007bc0: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007bc4: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007bca: 1a02 6400                              |0007: const-string v2, "helperMethodTest9 in " // string@0064
+007bce: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007bd4: 0c01                                   |000c: move-result-object v1
+007bd6: 1c02 0e00                              |000d: const-class v2, Linvokecustom/InvokeCustom; // type@000e
+007bda: 6e20 b900 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007be0: 0c01                                   |0012: move-result-object v1
+007be2: 6e10 bb00 0100                         |0013: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007be8: 0c01                                   |0016: move-result-object v1
+007bea: 6e20 b100 1000                         |0017: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007bf0: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=125
+        0x001a line=126
+      locals        :
+        0x0000 - 0x001b reg=3 this Linvokecustom/InvokeCustom8;
+
+    #1              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'run'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+007bf4:                                        |[007bf4] invokecustom.InvokeCustom8.run:()V
+007c04: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007c08: 1a01 6e00                              |0002: const-string v1, "run() for Test9" // string@006e
+007c0c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007c12: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=133
+        0x0007 line=134
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom8;
+
+    #2              : (in Linvokecustom/InvokeCustom8;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+007c14:                                        |[007c14] invokecustom.InvokeCustom8.targetMethodTest4:()V
+007c24: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007c28: 1a01 7500                              |0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // string@0075
+007c2c: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007c32: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=64
+        0x0007 line=65
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom8;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Class #8            -
+  Class descriptor  : 'Linvokecustom/InvokeCustom;'
+  Access flags      : 0x0001 (PUBLIC)
+  Superclass        : 'Linvokecustom/Super;'
+  Interfaces        -
+    #0              : 'Ljava/lang/Runnable;'
+  Static fields     -
+    #0              : (in Linvokecustom/InvokeCustom;)
+      name          : 'staticFieldTest9'
+      type          : 'I'
+      access        : 0x000a (PRIVATE STATIC)
+  Instance fields   -
+    #0              : (in Linvokecustom/InvokeCustom;)
+      name          : 'fieldTest9'
+      type          : 'F'
+      access        : 0x0002 (PRIVATE)
+  Direct methods    -
+    #0              : (in Linvokecustom/InvokeCustom;)
+      name          : '<clinit>'
+      type          : '()V'
+      access        : 0x10008 (STATIC CONSTRUCTOR)
+      code          -
+      registers     : 1
+      ins           : 0
+      outs          : 0
+      insns size    : 4 16-bit code units
+007c34:                                        |[007c34] invokecustom.InvokeCustom.<clinit>:()V
+007c44: 1200                                   |0000: const/4 v0, #int 0 // #0
+007c46: 6700 0f00                              |0001: sput v0, Linvokecustom/InvokeCustom;.staticFieldTest9:I // field@000f
+007c4a: 0e00                                   |0003: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=98
+      locals        :
+
+    #1              : (in Linvokecustom/InvokeCustom;)
+      name          : '<init>'
+      type          : '()V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 2
+      ins           : 1
+      outs          : 1
+      insns size    : 7 16-bit code units
+007c4c:                                        |[007c4c] invokecustom.InvokeCustom.<init>:()V
+007c5c: 7010 a800 0100                         |0000: invoke-direct {v1}, Linvokecustom/Super;.<init>:()V // method@00a8
+007c62: 1200                                   |0003: const/4 v0, #int 0 // #0
+007c64: 5910 0e00                              |0004: iput v0, v1, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+007c68: 0e00                                   |0006: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=35
+        0x0003 line=111
+        0x0006 line=35
+      locals        :
+        0x0000 - 0x0007 reg=1 this Linvokecustom/InvokeCustom;
+
+    #2              : (in Linvokecustom/InvokeCustom;)
+      name          : '<init>'
+      type          : '(I)V'
+      access        : 0x10001 (PUBLIC CONSTRUCTOR)
+      code          -
+      registers     : 5
+      ins           : 2
+      outs          : 2
+      insns size    : 37 16-bit code units
+007c6c:                                        |[007c6c] invokecustom.InvokeCustom.<init>:(I)V
+007c7c: 7010 a800 0300                         |0000: invoke-direct {v3}, Linvokecustom/Super;.<init>:()V // method@00a8
+007c82: 1200                                   |0003: const/4 v0, #int 0 // #0
+007c84: 5930 0e00                              |0004: iput v0, v3, Linvokecustom/InvokeCustom;.fieldTest9:F // field@000e
+007c88: 6200 1000                              |0006: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007c8c: 2201 1700                              |0008: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007c90: 7010 b400 0100                         |000a: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007c96: 1a02 1800                              |000d: const-string v2, "InvokeCustom.<init>(" // string@0018
+007c9a: 6e20 ba00 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007ca0: 0c01                                   |0012: move-result-object v1
+007ca2: 6e20 b700 4100                         |0013: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007ca8: 0c01                                   |0016: move-result-object v1
+007caa: 1a02 0700                              |0017: const-string v2, ")" // string@0007
+007cae: 6e20 ba00 2100                         |0019: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007cb4: 0c01                                   |001c: move-result-object v1
+007cb6: 6e10 bb00 0100                         |001d: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007cbc: 0c01                                   |0020: move-result-object v1
+007cbe: 6e20 b100 1000                         |0021: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007cc4: 0e00                                   |0024: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=36
+        0x0003 line=111
+        0x0006 line=37
+        0x0024 line=38
+      locals        :
+        0x0000 - 0x0025 reg=3 this Linvokecustom/InvokeCustom;
+        0x0000 - 0x0025 reg=4 (null) I
+
+    #3              : (in Linvokecustom/InvokeCustom;)
+      name          : 'bsmCreateCallSite'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 4
+      outs          : 2
+      insns size    : 36 16-bit code units
+007cc8:                                        |[007cc8] invokecustom.InvokeCustom.bsmCreateCallSite:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+007cd8: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007cdc: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007ce0: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007ce6: 1a02 5600                              |0007: const-string v2, "bsmCreateCallSite [" // string@0056
+007cea: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007cf0: 0c01                                   |000c: move-result-object v1
+007cf2: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007cf8: 0c01                                   |0010: move-result-object v1
+007cfa: 1a02 5200                              |0011: const-string v2, "]" // string@0052
+007cfe: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007d04: 0c01                                   |0016: move-result-object v1
+007d06: 6e10 bb00 0100                         |0017: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007d0c: 0c01                                   |001a: move-result-object v1
+007d0e: 6e20 b100 1000                         |001b: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007d14: 2200 1b00                              |001e: new-instance v0, Ljava/lang/invoke/ConstantCallSite; // type@001b
+007d18: 7020 bc00 6000                         |0020: invoke-direct {v0, v6}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+007d1e: 1100                                   |0023: return-object v0
+      catches       : (none)
+      positions     :
+        0x0000 line=156
+        0x001e line=157
+      locals        :
+        0x0000 - 0x0024 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0024 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0024 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0024 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+
+    #4              : (in Linvokecustom/InvokeCustom;)
+      name          : 'bsmLookupStatic'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 5
+      ins           : 3
+      outs          : 4
+      insns size    : 29 16-bit code units
+007d20:                                        |[007d20] invokecustom.InvokeCustom.bsmLookupStatic:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+007d30: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007d34: 1a01 5800                              |0002: const-string v1, "bsmLookupStatic []" // string@0058
+007d38: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007d3e: 7100 c900 0000                         |0007: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+007d44: 0c00                                   |000a: move-result-object v0
+007d46: 6e10 c800 0000                         |000b: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+007d4c: 0c01                                   |000e: move-result-object v1
+007d4e: 6e40 c700 1043                         |000f: invoke-virtual {v0, v1, v3, v4}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+007d54: 0c00                                   |0012: move-result-object v0
+007d56: 2201 1b00                              |0013: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+007d5a: 6e20 bd00 4000                         |0015: invoke-virtual {v0, v4}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+007d60: 0c00                                   |0018: move-result-object v0
+007d62: 7020 bc00 0100                         |0019: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+007d68: 1101                                   |001c: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=138
+        0x0007 line=139
+        0x000b line=140
+        0x0013 line=141
+      locals        :
+        0x0000 - 0x001d reg=2 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x001d reg=3 (null) Ljava/lang/String;
+        0x0000 - 0x001d reg=4 (null) Ljava/lang/invoke/MethodType;
+
+    #5              : (in Linvokecustom/InvokeCustom;)
+      name          : 'bsmLookupStaticWithExtraArgs'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 9
+      outs          : 4
+      insns size    : 82 16-bit code units
+007d6c:                                        |[007d6c] invokecustom.InvokeCustom.bsmLookupStaticWithExtraArgs:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+007d7c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007d80: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007d84: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007d8a: 1a02 5a00                              |0007: const-string v2, "bsmLookupStaticWithExtraArgs [" // string@005a
+007d8e: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007d94: 0c01                                   |000c: move-result-object v1
+007d96: 6e20 b700 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+007d9c: 0c01                                   |0010: move-result-object v1
+007d9e: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+007da2: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007da8: 0c01                                   |0016: move-result-object v1
+007daa: 6e30 b800 7108                         |0017: invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+007db0: 0c01                                   |001a: move-result-object v1
+007db2: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+007db6: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007dbc: 0c01                                   |0020: move-result-object v1
+007dbe: 6e20 b600 9100                         |0021: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+007dc4: 0c01                                   |0024: move-result-object v1
+007dc6: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+007dca: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007dd0: 0c01                                   |002a: move-result-object v1
+007dd2: 6e30 b500 a10b                         |002b: invoke-virtual {v1, v10, v11}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+007dd8: 0c01                                   |002e: move-result-object v1
+007dda: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+007dde: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007de4: 0c01                                   |0034: move-result-object v1
+007de6: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007dec: 0c01                                   |0038: move-result-object v1
+007dee: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007df4: 7100 c900 0000                         |003c: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+007dfa: 0c00                                   |003f: move-result-object v0
+007dfc: 6e10 c800 0000                         |0040: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+007e02: 0c01                                   |0043: move-result-object v1
+007e04: 6e40 c700 1054                         |0044: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+007e0a: 0c00                                   |0047: move-result-object v0
+007e0c: 2201 1b00                              |0048: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+007e10: 6e20 bd00 5000                         |004a: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+007e16: 0c00                                   |004d: move-result-object v0
+007e18: 7020 bc00 0100                         |004e: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+007e1e: 1101                                   |0051: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=147
+        0x003c line=148
+        0x0040 line=149
+        0x0048 line=150
+      locals        :
+        0x0000 - 0x0052 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0052 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0052 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0052 reg=6 (null) I
+        0x0000 - 0x0052 reg=7 (null) J
+        0x0000 - 0x0052 reg=9 (null) F
+        0x0000 - 0x0052 reg=10 (null) D
+
+    #6              : (in Linvokecustom/InvokeCustom;)
+      name          : 'bsmLookupTest9'
+      type          : '(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 13
+      ins           : 10
+      outs          : 4
+      insns size    : 135 16-bit code units
+007e20:                                        |[007e20] invokecustom.InvokeCustom.bsmLookupTest9:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
+007e30: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007e34: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007e38: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007e3e: 1a02 5c00                              |0007: const-string v2, "bsmLookupTest9 [" // string@005c
+007e42: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007e48: 0c01                                   |000c: move-result-object v1
+007e4a: 6e20 b900 6100                         |000d: invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007e50: 0c01                                   |0010: move-result-object v1
+007e52: 1a02 0800                              |0011: const-string v2, ", " // string@0008
+007e56: 6e20 ba00 2100                         |0013: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007e5c: 0c01                                   |0016: move-result-object v1
+007e5e: 6e20 b900 7100                         |0017: invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007e64: 0c01                                   |001a: move-result-object v1
+007e66: 1a02 0800                              |001b: const-string v2, ", " // string@0008
+007e6a: 6e20 ba00 2100                         |001d: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007e70: 0c01                                   |0020: move-result-object v1
+007e72: 6e20 b900 8100                         |0021: invoke-virtual {v1, v8}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007e78: 0c01                                   |0024: move-result-object v1
+007e7a: 1a02 0800                              |0025: const-string v2, ", " // string@0008
+007e7e: 6e20 ba00 2100                         |0027: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007e84: 0c01                                   |002a: move-result-object v1
+007e86: 6e20 b900 9100                         |002b: invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007e8c: 0c01                                   |002e: move-result-object v1
+007e8e: 1a02 5200                              |002f: const-string v2, "]" // string@0052
+007e92: 6e20 ba00 2100                         |0031: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007e98: 0c01                                   |0034: move-result-object v1
+007e9a: 6e10 bb00 0100                         |0035: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007ea0: 0c01                                   |0038: move-result-object v1
+007ea2: 6e20 b100 1000                         |0039: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007ea8: 6200 1000                              |003c: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007eac: 2201 1700                              |003e: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+007eb0: 7010 b400 0100                         |0040: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007eb6: 6e20 ba00 4100                         |0043: invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007ebc: 0c01                                   |0046: move-result-object v1
+007ebe: 1a02 0000                              |0047: const-string v2, " " // string@0000
+007ec2: 6e20 ba00 2100                         |0049: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007ec8: 0c01                                   |004c: move-result-object v1
+007eca: 6e20 b900 5100                         |004d: invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+007ed0: 0c01                                   |0050: move-result-object v1
+007ed2: 6e10 bb00 0100                         |0051: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007ed8: 0c01                                   |0054: move-result-object v1
+007eda: 6e20 b100 1000                         |0055: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007ee0: 7120 9b00 7600                         |0058: invoke-static {v6, v7}, Linvokecustom/InvokeCustom;.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009b
+007ee6: 2200 0e00                              |005b: new-instance v0, Linvokecustom/InvokeCustom; // type@000e
+007eea: 7010 9400 0000                         |005d: invoke-direct {v0}, Linvokecustom/InvokeCustom;.<init>:()V // method@0094
+007ef0: 7030 9a00 8009                         |0060: invoke-direct {v0, v8, v9}, Linvokecustom/InvokeCustom;.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V // method@009a
+007ef6: fa20 c300 0a00 1c00                    |0063: invoke-polymorphic {v10, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00c3, proto@001c
+007efe: 1230                                   |0067: const/4 v0, #int 3 // #3
+007f00: fa20 c300 0b00 0500                    |0068: invoke-polymorphic {v11, v0}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)Linvokecustom/InvokeCustom; // method@00c3, proto@0005
+007f08: 0c00                                   |006c: move-result-object v0
+007f0a: fa20 be00 0c00 1c00                    |006d: invoke-polymorphic {v12, v0}, Ljava/lang/invoke/MethodHandle;.invoke:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)V // method@00be, proto@001c
+007f12: 7100 c900 0000                         |0071: invoke-static {}, Ljava/lang/invoke/MethodHandles;.lookup:()Ljava/lang/invoke/MethodHandles$Lookup; // method@00c9
+007f18: 0c00                                   |0074: move-result-object v0
+007f1a: 6e10 c800 0000                         |0075: invoke-virtual {v0}, Ljava/lang/invoke/MethodHandles$Lookup;.lookupClass:()Ljava/lang/Class; // method@00c8
+007f20: 0c01                                   |0078: move-result-object v1
+007f22: 6e40 c700 1054                         |0079: invoke-virtual {v0, v1, v4, v5}, Ljava/lang/invoke/MethodHandles$Lookup;.findStatic:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00c7
+007f28: 0c00                                   |007c: move-result-object v0
+007f2a: 2201 1b00                              |007d: new-instance v1, Ljava/lang/invoke/ConstantCallSite; // type@001b
+007f2e: 6e20 bd00 5000                         |007f: invoke-virtual {v0, v5}, Ljava/lang/invoke/MethodHandle;.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; // method@00bd
+007f34: 0c00                                   |0082: move-result-object v0
+007f36: 7020 bc00 0100                         |0083: invoke-direct {v1, v0}, Ljava/lang/invoke/ConstantCallSite;.<init>:(Ljava/lang/invoke/MethodHandle;)V // method@00bc
+007f3c: 1101                                   |0086: return-object v1
+      catches       : (none)
+      positions     :
+        0x0000 line=166
+        0x003c line=168
+        0x0058 line=171
+        0x005b line=172
+        0x0060 line=173
+        0x0063 line=176
+        0x0067 line=178
+        0x006d line=179
+        0x0071 line=181
+        0x0075 line=182
+        0x007d line=183
+      locals        :
+        0x0000 - 0x0087 reg=3 (null) Ljava/lang/invoke/MethodHandles$Lookup;
+        0x0000 - 0x0087 reg=4 (null) Ljava/lang/String;
+        0x0000 - 0x0087 reg=5 (null) Ljava/lang/invoke/MethodType;
+        0x0000 - 0x0087 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=9 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=10 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=11 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0087 reg=12 (null) Ljava/lang/invoke/MethodHandle;
+
+    #7              : (in Linvokecustom/InvokeCustom;)
+      name          : 'checkFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x0002 (PRIVATE)
+      code          -
+      registers     : 9
+      ins           : 3
+      outs          : 3
+      insns size    : 82 16-bit code units
+007f40:                                        |[007f40] invokecustom.InvokeCustom.checkFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+007f50: 1405 0ff0 6a20                         |0000: const v5, #float 1.99e-19 // #206af00f
+007f56: fa20 c300 6700 0100                    |0003: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+007f5e: 0a00                                   |0007: move-result v0
+007f60: fa30 c300 6805 1d00                    |0008: invoke-polymorphic {v8, v6, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;F)V // method@00c3, proto@001d
+007f68: fa20 c300 6700 0100                    |000c: invoke-polymorphic {v7, v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Linvokecustom/InvokeCustom;)F // method@00c3, proto@0001
+007f70: 0a01                                   |0010: move-result v1
+007f72: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007f76: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+007f7a: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+007f80: 1a04 5e00                              |0018: const-string v4, "checkFieldTest9: old " // string@005e
+007f84: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007f8a: 0c03                                   |001d: move-result-object v3
+007f8c: 6e20 b600 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+007f92: 0c00                                   |0021: move-result-object v0
+007f94: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+007f98: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007f9e: 0c00                                   |0027: move-result-object v0
+007fa0: 6e20 b600 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+007fa6: 0c00                                   |002b: move-result-object v0
+007fa8: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+007fac: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007fb2: 0c00                                   |0031: move-result-object v0
+007fb4: 6e20 b600 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+007fba: 0c00                                   |0035: move-result-object v0
+007fbc: 1a03 0000                              |0036: const-string v3, " " // string@0000
+007fc0: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+007fc6: 0c00                                   |003b: move-result-object v0
+007fc8: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+007fce: 0c00                                   |003f: move-result-object v0
+007fd0: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+007fd6: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+007fda: 2d00 0105                              |0045: cmpl-float v0, v1, v5
+007fde: 3900 0800                              |0047: if-nez v0, 004f // +0008
+007fe2: 1a00 4000                              |0049: const-string v0, "OK" // string@0040
+007fe6: 6e20 b100 0200                         |004b: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+007fec: 0e00                                   |004e: return-void
+007fee: 1a00 1000                              |004f: const-string v0, "ERROR" // string@0010
+007ff2: 28fa                                   |0051: goto 004b // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=116
+        0x0008 line=117
+        0x000c line=118
+        0x0011 line=119
+        0x0043 line=121
+        0x004e line=122
+        0x004f line=121
+      locals        :
+        0x0000 - 0x0052 reg=6 this Linvokecustom/InvokeCustom;
+        0x0000 - 0x0052 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0052 reg=8 (null) Ljava/lang/invoke/MethodHandle;
+
+    #8              : (in Linvokecustom/InvokeCustom;)
+      name          : 'checkStaticFieldTest9'
+      type          : '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 8
+      ins           : 2
+      outs          : 2
+      insns size    : 80 16-bit code units
+007ff4:                                        |[007ff4] invokecustom.InvokeCustom.checkStaticFieldTest9:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V
+008004: 1405 1032 5476                         |0000: const v5, #float 1.07596e+33 // #76543210
+00800a: fa10 c300 0600 0200                    |0003: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+008012: 0a00                                   |0007: move-result v0
+008014: fa20 c300 5700 1a00                    |0008: invoke-polymorphic {v7, v5}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (I)V // method@00c3, proto@001a
+00801c: fa10 c300 0600 0200                    |000c: invoke-polymorphic {v6}, Ljava/lang/invoke/MethodHandle;.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, ()I // method@00c3, proto@0002
+008024: 0a01                                   |0010: move-result v1
+008026: 6202 1000                              |0011: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00802a: 2203 1700                              |0013: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+00802e: 7010 b400 0300                         |0015: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+008034: 1a04 6000                              |0018: const-string v4, "checkStaticFieldTest9: old " // string@0060
+008038: 6e20 ba00 4300                         |001a: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00803e: 0c03                                   |001d: move-result-object v3
+008040: 6e20 b700 0300                         |001e: invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+008046: 0c00                                   |0021: move-result-object v0
+008048: 1a03 0600                              |0022: const-string v3, " new " // string@0006
+00804c: 6e20 ba00 3000                         |0024: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008052: 0c00                                   |0027: move-result-object v0
+008054: 6e20 b700 1000                         |0028: invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00805a: 0c00                                   |002b: move-result-object v0
+00805c: 1a03 0500                              |002c: const-string v3, " expected " // string@0005
+008060: 6e20 ba00 3000                         |002e: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008066: 0c00                                   |0031: move-result-object v0
+008068: 6e20 b700 5000                         |0032: invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00806e: 0c00                                   |0035: move-result-object v0
+008070: 1a03 0000                              |0036: const-string v3, " " // string@0000
+008074: 6e20 ba00 3000                         |0038: invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00807a: 0c00                                   |003b: move-result-object v0
+00807c: 6e10 bb00 0000                         |003c: invoke-virtual {v0}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+008082: 0c00                                   |003f: move-result-object v0
+008084: 6e20 ab00 0200                         |0040: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.print:(Ljava/lang/String;)V // method@00ab
+00808a: 6202 1000                              |0043: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00808e: 3351 0800                              |0045: if-ne v1, v5, 004d // +0008
+008092: 1a00 4000                              |0047: const-string v0, "OK" // string@0040
+008096: 6e20 b100 0200                         |0049: invoke-virtual {v2, v0}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00809c: 0e00                                   |004c: return-void
+00809e: 1a00 1000                              |004d: const-string v0, "ERROR" // string@0010
+0080a2: 28fa                                   |004f: goto 0049 // -0006
+      catches       : (none)
+      positions     :
+        0x0003 line=103
+        0x0008 line=104
+        0x000c line=105
+        0x0011 line=106
+        0x0043 line=108
+        0x004c line=109
+        0x004d line=108
+      locals        :
+        0x0000 - 0x0050 reg=6 (null) Ljava/lang/invoke/MethodHandle;
+        0x0000 - 0x0050 reg=7 (null) Ljava/lang/invoke/MethodHandle;
+
+    #9              : (in Linvokecustom/InvokeCustom;)
+      name          : 'main'
+      type          : '([Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 1
+      ins           : 1
+      outs          : 0
+      insns size    : 22 16-bit code units
+0080a4:                                        |[0080a4] invokecustom.InvokeCustom.main:([Ljava/lang/String;)V
+0080b4: 7100 1400 0000                         |0000: invoke-static {}, Linvokecustom/InvokeCustom1;.test1:()V // method@0014
+0080ba: 7100 2900 0000                         |0003: invoke-static {}, Linvokecustom/InvokeCustom2;.test2:()V // method@0029
+0080c0: 7100 3e00 0000                         |0006: invoke-static {}, Linvokecustom/InvokeCustom3;.test3:()V // method@003e
+0080c6: 7100 5300 0000                         |0009: invoke-static {}, Linvokecustom/InvokeCustom5;.test5:()V // method@0053
+0080cc: 7100 6800 0000                         |000c: invoke-static {}, Linvokecustom/InvokeCustom6;.test6:()V // method@0068
+0080d2: 7100 7d00 0000                         |000f: invoke-static {}, Linvokecustom/InvokeCustom7;.test7:()V // method@007d
+0080d8: 7100 9200 0000                         |0012: invoke-static {}, Linvokecustom/InvokeCustom8;.test8:()V // method@0092
+0080de: 0e00                                   |0015: return-void
+      catches       : (none)
+      positions     :
+      locals        :
+
+    #10              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest1'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+0080e0:                                        |[0080e0] invokecustom.InvokeCustom.targetMethodTest1:()V
+0080f0: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0080f4: 1a01 1500                              |0002: const-string v1, "Hello World!" // string@0015
+0080f8: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0080fe: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=41
+        0x0007 line=42
+      locals        :
+
+    #11              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest2'
+      type          : '(ZBCSIFJDLjava/lang/String;)V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 13
+      ins           : 11
+      outs          : 3
+      insns size    : 46 16-bit code units
+008100:                                        |[008100] invokecustom.InvokeCustom.targetMethodTest2:(ZBCSIFJDLjava/lang/String;)V
+008110: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008114: 6e20 b200 2000                         |0002: invoke-virtual {v0, v2}, Ljava/io/PrintStream;.println:(Z)V // method@00b2
+00811a: 6200 1000                              |0005: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00811e: 6e20 af00 3000                         |0007: invoke-virtual {v0, v3}, Ljava/io/PrintStream;.println:(I)V // method@00af
+008124: 6200 1000                              |000a: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008128: 6e20 ac00 4000                         |000c: invoke-virtual {v0, v4}, Ljava/io/PrintStream;.println:(C)V // method@00ac
+00812e: 6200 1000                              |000f: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008132: 6e20 af00 5000                         |0011: invoke-virtual {v0, v5}, Ljava/io/PrintStream;.println:(I)V // method@00af
+008138: 6200 1000                              |0014: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00813c: 6e20 af00 6000                         |0016: invoke-virtual {v0, v6}, Ljava/io/PrintStream;.println:(I)V // method@00af
+008142: 6200 1000                              |0019: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008146: 6e20 ae00 7000                         |001b: invoke-virtual {v0, v7}, Ljava/io/PrintStream;.println:(F)V // method@00ae
+00814c: 6200 1000                              |001e: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008150: 6e30 b000 8009                         |0020: invoke-virtual {v0, v8, v9}, Ljava/io/PrintStream;.println:(J)V // method@00b0
+008156: 6200 1000                              |0023: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00815a: 6e30 ad00 a00b                         |0025: invoke-virtual {v0, v10, v11}, Ljava/io/PrintStream;.println:(D)V // method@00ad
+008160: 6200 1000                              |0028: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008164: 6e20 b100 c000                         |002a: invoke-virtual {v0, v12}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00816a: 0e00                                   |002d: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=46
+        0x0005 line=47
+        0x000a line=48
+        0x000f line=49
+        0x0014 line=50
+        0x0019 line=51
+        0x001e line=52
+        0x0023 line=53
+        0x0028 line=54
+        0x002d line=55
+      locals        :
+        0x0000 - 0x002e reg=2 (null) Z
+        0x0000 - 0x002e reg=3 (null) B
+        0x0000 - 0x002e reg=4 (null) C
+        0x0000 - 0x002e reg=5 (null) S
+        0x0000 - 0x002e reg=6 (null) I
+        0x0000 - 0x002e reg=7 (null) F
+        0x0000 - 0x002e reg=8 (null) J
+        0x0000 - 0x002e reg=10 (null) D
+        0x0000 - 0x002e reg=12 (null) Ljava/lang/String;
+
+    #12              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest3'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+00816c:                                        |[00816c] invokecustom.InvokeCustom.targetMethodTest3:()V
+00817c: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008180: 1a01 7300                              |0002: const-string v1, "targetMethodTest3 from InvokeCustom" // string@0073
+008184: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00818a: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=58
+        0x0007 line=59
+      locals        :
+
+    #13              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest5'
+      type          : '(III)I'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 7
+      ins           : 3
+      outs          : 2
+      insns size    : 83 16-bit code units
+00818c:                                        |[00818c] invokecustom.InvokeCustom.targetMethodTest5:(III)I
+00819c: 9000 0405                              |0000: add-int v0, v4, v5
+0081a0: 6201 1000                              |0002: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0081a4: 2202 1700                              |0004: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+0081a8: 7010 b400 0200                         |0006: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0081ae: 1a03 7800                              |0009: const-string v3, "targetMethodTest5 " // string@0078
+0081b2: 6e20 ba00 3200                         |000b: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0081b8: 0c02                                   |000e: move-result-object v2
+0081ba: 6e20 b700 4200                         |000f: invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0081c0: 0c02                                   |0012: move-result-object v2
+0081c2: 1a03 0300                              |0013: const-string v3, " + " // string@0003
+0081c6: 6e20 ba00 3200                         |0015: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0081cc: 0c02                                   |0018: move-result-object v2
+0081ce: 6e20 b700 5200                         |0019: invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0081d4: 0c02                                   |001c: move-result-object v2
+0081d6: 1a03 0400                              |001d: const-string v3, " = " // string@0004
+0081da: 6e20 ba00 3200                         |001f: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0081e0: 0c02                                   |0022: move-result-object v2
+0081e2: 6e20 b700 0200                         |0023: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+0081e8: 0c02                                   |0026: move-result-object v2
+0081ea: 6e10 bb00 0200                         |0027: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0081f0: 0c02                                   |002a: move-result-object v2
+0081f2: 6e20 b100 2100                         |002b: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0081f8: 3260 2400                              |002e: if-eq v0, v6, 0052 // +0024
+0081fc: 6201 1000                              |0030: sget-object v1, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008200: 2202 1700                              |0032: new-instance v2, Ljava/lang/StringBuilder; // type@0017
+008204: 7010 b400 0200                         |0034: invoke-direct {v2}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00820a: 1a03 1300                              |0037: const-string v3, "Failed " // string@0013
+00820e: 6e20 ba00 3200                         |0039: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008214: 0c02                                   |003c: move-result-object v2
+008216: 6e20 b700 0200                         |003d: invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+00821c: 0c02                                   |0040: move-result-object v2
+00821e: 1a03 0100                              |0041: const-string v3, " != " // string@0001
+008222: 6e20 ba00 3200                         |0043: invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008228: 0c02                                   |0046: move-result-object v2
+00822a: 6e20 b700 6200                         |0047: invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;.append:(I)Ljava/lang/StringBuilder; // method@00b7
+008230: 0c02                                   |004a: move-result-object v2
+008232: 6e10 bb00 0200                         |004b: invoke-virtual {v2}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+008238: 0c02                                   |004e: move-result-object v2
+00823a: 6e20 b100 2100                         |004f: invoke-virtual {v1, v2}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+008240: 0f00                                   |0052: return v0
+      catches       : (none)
+      positions     :
+        0x0000 line=68
+        0x0002 line=69
+        0x002e line=70
+        0x0030 line=71
+        0x0052 line=73
+      locals        :
+        0x0000 - 0x0053 reg=4 (null) I
+        0x0000 - 0x0053 reg=5 (null) I
+        0x0000 - 0x0053 reg=6 (null) I
+
+    #14              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest6'
+      type          : '(JJJ)J'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 12
+      ins           : 6
+      outs          : 3
+      insns size    : 85 16-bit code units
+008244:                                        |[008244] invokecustom.InvokeCustom.targetMethodTest6:(JJJ)J
+008254: 9b00 0608                              |0000: add-long v0, v6, v8
+008258: 6202 1000                              |0002: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00825c: 2203 1700                              |0004: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+008260: 7010 b400 0300                         |0006: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+008266: 1a04 7b00                              |0009: const-string v4, "targetMethodTest6 " // string@007b
+00826a: 6e20 ba00 4300                         |000b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008270: 0c03                                   |000e: move-result-object v3
+008272: 6e30 b800 6307                         |000f: invoke-virtual {v3, v6, v7}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+008278: 0c03                                   |0012: move-result-object v3
+00827a: 1a04 0300                              |0013: const-string v4, " + " // string@0003
+00827e: 6e20 ba00 4300                         |0015: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008284: 0c03                                   |0018: move-result-object v3
+008286: 6e30 b800 8309                         |0019: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+00828c: 0c03                                   |001c: move-result-object v3
+00828e: 1a04 0400                              |001d: const-string v4, " = " // string@0004
+008292: 6e20 ba00 4300                         |001f: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008298: 0c03                                   |0022: move-result-object v3
+00829a: 6e30 b800 0301                         |0023: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0082a0: 0c03                                   |0026: move-result-object v3
+0082a2: 6e10 bb00 0300                         |0027: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0082a8: 0c03                                   |002a: move-result-object v3
+0082aa: 6e20 b100 3200                         |002b: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0082b0: 3102 000a                              |002e: cmp-long v2, v0, v10
+0082b4: 3802 2400                              |0030: if-eqz v2, 0054 // +0024
+0082b8: 6202 1000                              |0032: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0082bc: 2203 1700                              |0034: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+0082c0: 7010 b400 0300                         |0036: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0082c6: 1a04 1300                              |0039: const-string v4, "Failed " // string@0013
+0082ca: 6e20 ba00 4300                         |003b: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0082d0: 0c03                                   |003e: move-result-object v3
+0082d2: 6e30 b800 0301                         |003f: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0082d8: 0c03                                   |0042: move-result-object v3
+0082da: 1a04 0100                              |0043: const-string v4, " != " // string@0001
+0082de: 6e20 ba00 4300                         |0045: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0082e4: 0c03                                   |0048: move-result-object v3
+0082e6: 6e30 b800 a30b                         |0049: invoke-virtual {v3, v10, v11}, Ljava/lang/StringBuilder;.append:(J)Ljava/lang/StringBuilder; // method@00b8
+0082ec: 0c03                                   |004c: move-result-object v3
+0082ee: 6e10 bb00 0300                         |004d: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0082f4: 0c03                                   |0050: move-result-object v3
+0082f6: 6e20 b100 3200                         |0051: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0082fc: 1000                                   |0054: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=77
+        0x0002 line=78
+        0x002e line=79
+        0x0032 line=80
+        0x0054 line=82
+      locals        :
+        0x0000 - 0x0055 reg=6 (null) J
+        0x0000 - 0x0055 reg=8 (null) J
+        0x0000 - 0x0055 reg=10 (null) J
+
+    #15              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest7'
+      type          : '(FFD)D'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 10
+      ins           : 4
+      outs          : 3
+      insns size    : 86 16-bit code units
+008300:                                        |[008300] invokecustom.InvokeCustom.targetMethodTest7:(FFD)D
+008310: a800 0607                              |0000: mul-float v0, v6, v7
+008314: 8900                                   |0002: float-to-double v0, v0
+008316: 6202 1000                              |0003: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00831a: 2203 1700                              |0005: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+00831e: 7010 b400 0300                         |0007: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+008324: 1a04 7e00                              |000a: const-string v4, "targetMethodTest7 " // string@007e
+008328: 6e20 ba00 4300                         |000c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00832e: 0c03                                   |000f: move-result-object v3
+008330: 6e20 b600 6300                         |0010: invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+008336: 0c03                                   |0013: move-result-object v3
+008338: 1a04 0200                              |0014: const-string v4, " * " // string@0002
+00833c: 6e20 ba00 4300                         |0016: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008342: 0c03                                   |0019: move-result-object v3
+008344: 6e20 b600 7300                         |001a: invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;.append:(F)Ljava/lang/StringBuilder; // method@00b6
+00834a: 0c03                                   |001d: move-result-object v3
+00834c: 1a04 0400                              |001e: const-string v4, " = " // string@0004
+008350: 6e20 ba00 4300                         |0020: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008356: 0c03                                   |0023: move-result-object v3
+008358: 6e30 b500 0301                         |0024: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+00835e: 0c03                                   |0027: move-result-object v3
+008360: 6e10 bb00 0300                         |0028: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+008366: 0c03                                   |002b: move-result-object v3
+008368: 6e20 b100 3200                         |002c: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00836e: 2f02 0008                              |002f: cmpl-double v2, v0, v8
+008372: 3802 2400                              |0031: if-eqz v2, 0055 // +0024
+008376: 6202 1000                              |0033: sget-object v2, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00837a: 2203 1700                              |0035: new-instance v3, Ljava/lang/StringBuilder; // type@0017
+00837e: 7010 b400 0300                         |0037: invoke-direct {v3}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+008384: 1a04 1300                              |003a: const-string v4, "Failed " // string@0013
+008388: 6e20 ba00 4300                         |003c: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+00838e: 0c03                                   |003f: move-result-object v3
+008390: 6e30 b500 0301                         |0040: invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+008396: 0c03                                   |0043: move-result-object v3
+008398: 1a04 0100                              |0044: const-string v4, " != " // string@0001
+00839c: 6e20 ba00 4300                         |0046: invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0083a2: 0c03                                   |0049: move-result-object v3
+0083a4: 6e30 b500 8309                         |004a: invoke-virtual {v3, v8, v9}, Ljava/lang/StringBuilder;.append:(D)Ljava/lang/StringBuilder; // method@00b5
+0083aa: 0c03                                   |004d: move-result-object v3
+0083ac: 6e10 bb00 0300                         |004e: invoke-virtual {v3}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0083b2: 0c03                                   |0051: move-result-object v3
+0083b4: 6e20 b100 3200                         |0052: invoke-virtual {v2, v3}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0083ba: 1000                                   |0055: return-wide v0
+      catches       : (none)
+      positions     :
+        0x0000 line=86
+        0x0003 line=87
+        0x002f line=88
+        0x0033 line=89
+        0x0055 line=91
+      locals        :
+        0x0000 - 0x0056 reg=6 (null) F
+        0x0000 - 0x0056 reg=7 (null) F
+        0x0000 - 0x0056 reg=8 (null) D
+
+    #16              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest8'
+      type          : '(Ljava/lang/String;)V'
+      access        : 0x0009 (PUBLIC STATIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 25 16-bit code units
+0083bc:                                        |[0083bc] invokecustom.InvokeCustom.targetMethodTest8:(Ljava/lang/String;)V
+0083cc: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+0083d0: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+0083d4: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+0083da: 1a02 8000                              |0007: const-string v2, "targetMethodTest8 " // string@0080
+0083de: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0083e4: 0c01                                   |000c: move-result-object v1
+0083e6: 6e20 ba00 3100                         |000d: invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+0083ec: 0c01                                   |0010: move-result-object v1
+0083ee: 6e10 bb00 0100                         |0011: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+0083f4: 0c01                                   |0014: move-result-object v1
+0083f6: 6e20 b100 1000                         |0015: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0083fc: 0e00                                   |0018: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=95
+        0x0018 line=96
+      locals        :
+        0x0000 - 0x0019 reg=3 (null) Ljava/lang/String;
+
+    #17              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest9'
+      type          : '()V'
+      access        : 0x000a (PRIVATE STATIC)
+      code          -
+      registers     : 2
+      ins           : 0
+      outs          : 2
+      insns size    : 8 16-bit code units
+008400:                                        |[008400] invokecustom.InvokeCustom.targetMethodTest9:()V
+008410: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008414: 1a01 8200                              |0002: const-string v1, "targetMethodTest9()" // string@0082
+008418: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+00841e: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=129
+        0x0007 line=130
+      locals        :
+
+  Virtual methods   -
+    #0              : (in Linvokecustom/InvokeCustom;)
+      name          : 'helperMethodTest9'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 4
+      ins           : 1
+      outs          : 2
+      insns size    : 27 16-bit code units
+008420:                                        |[008420] invokecustom.InvokeCustom.helperMethodTest9:()V
+008430: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+008434: 2201 1700                              |0002: new-instance v1, Ljava/lang/StringBuilder; // type@0017
+008438: 7010 b400 0100                         |0004: invoke-direct {v1}, Ljava/lang/StringBuilder;.<init>:()V // method@00b4
+00843e: 1a02 6400                              |0007: const-string v2, "helperMethodTest9 in " // string@0064
+008442: 6e20 ba00 2100                         |0009: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // method@00ba
+008448: 0c01                                   |000c: move-result-object v1
+00844a: 1c02 0e00                              |000d: const-class v2, Linvokecustom/InvokeCustom; // type@000e
+00844e: 6e20 b900 2100                         |000f: invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; // method@00b9
+008454: 0c01                                   |0012: move-result-object v1
+008456: 6e10 bb00 0100                         |0013: invoke-virtual {v1}, Ljava/lang/StringBuilder;.toString:()Ljava/lang/String; // method@00bb
+00845c: 0c01                                   |0016: move-result-object v1
+00845e: 6e20 b100 1000                         |0017: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+008464: 0e00                                   |001a: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=125
+        0x001a line=126
+      locals        :
+        0x0000 - 0x001b reg=3 this Linvokecustom/InvokeCustom;
+
+    #1              : (in Linvokecustom/InvokeCustom;)
+      name          : 'run'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+008468:                                        |[008468] invokecustom.InvokeCustom.run:()V
+008478: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00847c: 1a01 6e00                              |0002: const-string v1, "run() for Test9" // string@006e
+008480: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+008486: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=133
+        0x0007 line=134
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom;
+
+    #2              : (in Linvokecustom/InvokeCustom;)
+      name          : 'targetMethodTest4'
+      type          : '()V'
+      access        : 0x0001 (PUBLIC)
+      code          -
+      registers     : 3
+      ins           : 1
+      outs          : 2
+      insns size    : 8 16-bit code units
+008488:                                        |[008488] invokecustom.InvokeCustom.targetMethodTest4:()V
+008498: 6200 1000                              |0000: sget-object v0, Ljava/lang/System;.out:Ljava/io/PrintStream; // field@0010
+00849c: 1a01 7500                              |0002: const-string v1, "targetMethodTest4 from InvokeCustom (oops!)" // string@0075
+0084a0: 6e20 b100 1000                         |0004: invoke-virtual {v0, v1}, Ljava/io/PrintStream;.println:(Ljava/lang/String;)V // method@00b1
+0084a6: 0e00                                   |0007: return-void
+      catches       : (none)
+      positions     :
+        0x0000 line=64
+        0x0007 line=65
+      locals        :
+        0x0000 - 0x0008 reg=2 this Linvokecustom/InvokeCustom;
+
+  source_file_idx   : 25 (InvokeCustom.java)
+
+Method handle #0:
+  type        : invoke-static
+  target      : Linvokecustom/InvokeCustom; bsmLookupStatic
+  target_type : (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+Method handle #1:
+  type        : invoke-static
+  target      : Linvokecustom/InvokeCustom; bsmLookupStaticWithExtraArgs
+  target_type : (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;IJFD)Ljava/lang/invoke/CallSite;
+Call site #0: // offset 57196
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest1 (String)
+  link_argument[2] : ()V (MethodType)
+Call site #1: // offset 57203
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest2 (String)
+  link_argument[2] : (ZBCSIFJDLjava/lang/String;)V (MethodType)
+Call site #2: // offset 57210
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest3 (String)
+  link_argument[2] : ()V (MethodType)
+  link_argument[3] : 1 (int)
+  link_argument[4] : 123456789 (long)
+  link_argument[5] : 123.456 (float)
+  link_argument[6] : 123457 (double)
+Call site #3: // offset 57238
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest5 (String)
+  link_argument[2] : (III)I (MethodType)
+Call site #4: // offset 57245
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest6 (String)
+  link_argument[2] : (JJJ)J (MethodType)
+Call site #5: // offset 57252
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest7 (String)
+  link_argument[2] : (FFD)D (MethodType)
+Call site #6: // offset 57259
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest8 (String)
+  link_argument[2] : (Ljava/lang/String;)V (MethodType)
+Call site #7: // offset 57259
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest8 (String)
+  link_argument[2] : (Ljava/lang/String;)V (MethodType)
+Call site #8: // offset 57259
+  link_argument[0] : 0 (MethodHandle)
+  link_argument[1] : targetMethodTest8 (String)
+  link_argument[2] : (Ljava/lang/String;)V (MethodType)
diff --git a/dx/tests/137-dexmerger-dex38/info.txt b/dx/tests/137-dexmerger-dex38/info.txt
new file mode 100644
index 0000000..be5c0e9
--- /dev/null
+++ b/dx/tests/137-dexmerger-dex38/info.txt
@@ -0,0 +1 @@
+This test checks that dexmerger supports dex 38 features.
diff --git a/dx/tests/137-dexmerger-dex38/invokecustom.jar b/dx/tests/137-dexmerger-dex38/invokecustom.jar
new file mode 100644
index 0000000..ac56f78
Binary files /dev/null and b/dx/tests/137-dexmerger-dex38/invokecustom.jar differ
diff --git a/dx/tests/137-dexmerger-dex38/run b/dx/tests/137-dexmerger-dex38/run
new file mode 100755
index 0000000..70c77ec
--- /dev/null
+++ b/dx/tests/137-dexmerger-dex38/run
@@ -0,0 +1,26 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+jar xf invokecustom.jar
+(
+  CLASSES=(invokecustom/Super.class invokecustom/InvokeCustom*.class)
+  for CLASS in "${CLASSES[@]}"; do
+    dx --min-sdk-version=26 --dex --output="${CLASS/%.class/.dex}" "${CLASS}" 2>&1
+  done
+)
+${JAVA} -cp $(dirname $(which dx))/../framework/dx.jar com.android.dx.merge.DexMerger \
+  out.dex invokecustom/*.dex >& /dev/null
+dexdump -d out.dex
diff --git a/dx/tests/137-dexmerger-dex38/src/invokecustom/InvokeCustom.java b/dx/tests/137-dexmerger-dex38/src/invokecustom/InvokeCustom.java
new file mode 100644
index 0000000..c6cd3c3
--- /dev/null
+++ b/dx/tests/137-dexmerger-dex38/src/invokecustom/InvokeCustom.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package invokecustom;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+abstract class Super {
+  public void targetMethodTest4() {
+    System.out.println("targetMethodTest4 from Super");
+  }
+
+  public abstract void helperMethodTest9();
+}
+
+public class InvokeCustom extends Super implements Runnable {
+
+  public InvokeCustom() {}
+  public InvokeCustom(int i) {
+    System.out.println("InvokeCustom.<init>(" + i + ")");
+  }
+
+  private static void targetMethodTest1() {
+    System.out.println("Hello World!");
+  }
+
+  private static void targetMethodTest2(boolean z, byte b, char c, short s, int i, float f, long l,
+      double d, String str) {
+    System.out.println(z);
+    System.out.println(b);
+    System.out.println(c);
+    System.out.println(s);
+    System.out.println(i);
+    System.out.println(f);
+    System.out.println(l);
+    System.out.println(d);
+    System.out.println(str);
+  }
+
+  private static void targetMethodTest3() {
+    System.out.println("targetMethodTest3 from InvokeCustom");
+  }
+
+  @Override
+  public void targetMethodTest4() {
+    // The generated code should be calling Super.targetMethodTest4.
+    System.out.println("targetMethodTest4 from InvokeCustom (oops!)");
+  }
+
+  public static int targetMethodTest5(int x, int y, int total) {
+    int calculated = x + y;
+    System.out.println("targetMethodTest5 " + x + " + " + y + " = " + calculated);
+    if (calculated != total) {
+        System.out.println("Failed " + calculated + " != " + total);
+    }
+    return calculated;
+  }
+
+  public static long targetMethodTest6(long x, long y, long total) {
+    long calculated = x + y;
+    System.out.println("targetMethodTest6 " + x + " + " + y + " = " + calculated);
+    if (calculated != total) {
+        System.out.println("Failed " + calculated + " != " + total);
+    }
+    return calculated;
+  }
+
+  public static double targetMethodTest7(float x, float y, double product) {
+    double calculated = x * y;
+    System.out.println("targetMethodTest7 " + x + " * " + y + " = " + calculated);
+    if (calculated != product) {
+      System.out.println("Failed " + calculated + " != " + product);
+    }
+    return calculated;
+  }
+
+  public static void targetMethodTest8(String s) {
+    System.out.println("targetMethodTest8 " + s);
+  }
+
+  private static int staticFieldTest9 = 0;
+
+  private static void checkStaticFieldTest9(MethodHandle getter, MethodHandle setter)
+      throws Throwable {
+    final int NEW_VALUE = 0x76543210;
+    int oldValue = (int) getter.invokeExact();
+    setter.invokeExact(NEW_VALUE);
+    int newValue = (int) getter.invokeExact();
+    System.out.print("checkStaticFieldTest9: old " + oldValue + " new " + newValue +
+                     " expected " + NEW_VALUE + " ");
+    System.out.println((newValue == NEW_VALUE) ? "OK" : "ERROR");
+  }
+
+  private float fieldTest9 = 0.0f;
+
+  private void checkFieldTest9(MethodHandle getter, MethodHandle setter)
+      throws Throwable {
+    final float NEW_VALUE = 1.99e-19f;
+    float oldValue = (float) getter.invokeExact(this);
+    setter.invokeExact(this, NEW_VALUE);
+    float newValue = (float) getter.invokeExact(this);
+    System.out.print("checkFieldTest9: old " + oldValue + " new " + newValue +
+                     " expected " + NEW_VALUE + " ");
+    System.out.println((newValue == NEW_VALUE) ? "OK" : "ERROR");
+  }
+
+  public void helperMethodTest9() {
+    System.out.println("helperMethodTest9 in " + InvokeCustom.class);
+  }
+
+  private static void targetMethodTest9() {
+    System.out.println("targetMethodTest9()");
+  }
+
+  public void run() {
+    System.out.println("run() for Test9");
+  }
+
+  public static CallSite bsmLookupStatic(MethodHandles.Lookup caller, String name, MethodType type)
+      throws NoSuchMethodException, IllegalAccessException {
+    System.out.println("bsmLookupStatic []");
+    final MethodHandles.Lookup lookup = MethodHandles.lookup();
+    final MethodHandle targetMH = lookup.findStatic(lookup.lookupClass(), name, type);
+    return new ConstantCallSite(targetMH.asType(type));
+  }
+
+  public static CallSite bsmLookupStaticWithExtraArgs(
+      MethodHandles.Lookup caller, String name, MethodType type, int i, long l, float f, double d)
+      throws NoSuchMethodException, IllegalAccessException {
+    System.out.println("bsmLookupStaticWithExtraArgs [" + i + ", " + l + ", " + f + ", " + d + "]");
+    final MethodHandles.Lookup lookup = MethodHandles.lookup();
+    final MethodHandle targetMH = lookup.findStatic(lookup.lookupClass(), name, type);
+    return new ConstantCallSite(targetMH.asType(type));
+  }
+
+  public static CallSite bsmCreateCallSite(
+      MethodHandles.Lookup caller, String name, MethodType type, MethodHandle mh)
+      throws Throwable {
+    System.out.println("bsmCreateCallSite [" + mh + "]");
+    return new ConstantCallSite(mh);
+  }
+
+  public static CallSite bsmLookupTest9(MethodHandles.Lookup caller, String name, MethodType type,
+                                        MethodHandle staticGetter,  MethodHandle staticSetter,
+                                        MethodHandle fieldGetter, MethodHandle fieldSetter,
+                                        MethodHandle instanceInvoke, MethodHandle constructor,
+                                        MethodHandle interfaceInvoke)
+          throws Throwable {
+    System.out.println("bsmLookupTest9 [" + staticGetter + ", " + staticSetter + ", " +
+                       fieldGetter + ", " + fieldSetter + "]");
+    System.out.println(name + " " + type);
+
+    // Check constant method handles passed can be invoked.
+    checkStaticFieldTest9(staticGetter, staticSetter);
+    InvokeCustom instance = new InvokeCustom();
+    instance.checkFieldTest9(fieldGetter, fieldSetter);
+
+    // Check virtual method.
+    instanceInvoke.invokeExact(instance);
+
+    InvokeCustom instance2 = (InvokeCustom) constructor.invokeExact(3);
+    interfaceInvoke.invoke(instance2);
+
+    final MethodHandles.Lookup lookup = MethodHandles.lookup();
+    final MethodHandle targetMH = lookup.findStatic(lookup.lookupClass(), name, type);
+    return new ConstantCallSite(targetMH.asType(type));
+  }
+}
diff --git a/dx/tests/137-dexmerger-dex38/src/invokecustom/TestGenerator.java b/dx/tests/137-dexmerger-dex38/src/invokecustom/TestGenerator.java
new file mode 100644
index 0000000..c47d132
--- /dev/null
+++ b/dx/tests/137-dexmerger-dex38/src/invokecustom/TestGenerator.java
@@ -0,0 +1,464 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package invokecustom;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.function.Consumer;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Handle;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+
+public class TestGenerator {
+
+  private final Path baseName;
+
+  public static void main(String[] args) throws IOException {
+    assert args.length == 1;
+    TestGenerator testGenerator = new TestGenerator(Paths.get(args[0]));
+    testGenerator.generateTests();
+  }
+
+  public TestGenerator(Path baseName) {
+    this.baseName = baseName;
+  }
+
+  private void generateTests() throws IOException {
+    generateTest(this::generateMethodTest1, "invokecustom/InvokeCustom1");
+    generateTest(this::generateMethodTest2, "invokecustom/InvokeCustom2");
+    generateTest(this::generateMethodTest3, "invokecustom/InvokeCustom3");
+    // skip generateMethodTest4 - dexdump doesn't support invoke-direct handles
+    generateTest(this::generateMethodTest5, "invokecustom/InvokeCustom5");
+    generateTest(this::generateMethodTest6, "invokecustom/InvokeCustom6");
+    generateTest(this::generateMethodTest7, "invokecustom/InvokeCustom7");
+    generateTest(this::generateMethodTest8, "invokecustom/InvokeCustom8");
+    // skip generateMethodTest9 - dexdump doesn't support invoke-interface handles
+    generateTest(this::generateMethodMain, "invokecustom/InvokeCustom");
+  }
+
+  private void generateTest(Consumer<ClassWriter> generator, String className) throws IOException {
+    ClassReader cr =
+        new ClassReader(
+            new FileInputStream(baseName.resolve("invokecustom/InvokeCustom.class").toFile()));
+    ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
+    cr.accept(
+        new ClassVisitor(Opcodes.ASM5, cw) {
+          @Override
+          public void visit(
+              int version,
+              int access,
+              String name,
+              String signature,
+              String superName,
+              String[] interfaces) {
+            super.visit(version, access, className, signature, superName, interfaces);
+          }
+
+          @Override
+          public void visitEnd() {
+            generator.accept(cw);
+            super.visitEnd();
+          }
+        },
+        0);
+    new FileOutputStream(baseName.resolve(className + ".class").toFile()).write(cw.toByteArray());
+  }
+
+  /* generate main method that only call all test methods. */
+  private void generateMethodMain(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(
+            Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
+    String internalName = Type.getInternalName(InvokeCustom.class);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "1", "test1", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "2", "test2", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "3", "test3", "()V", false);
+    // mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "4", "test4", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "5", "test5", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "6", "test6", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "7", "test7", "()V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "8", "test8", "()V", false);
+    // mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName + "9", "test9", "()V", false);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate test with an invokedynamic, a static bootstrap method without extra args and no arg to
+   * the target method.
+   */
+  private void generateMethodTest1(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test1", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    Handle bootstrap =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmLookupStatic",
+            mt.toMethodDescriptorString(),
+            false);
+    mv.visitInvokeDynamicInsn("targetMethodTest1", "()V", bootstrap);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate test with an invokedynamic, a static bootstrap method without extra args and args to
+   * the target method.
+   */
+  private void generateMethodTest2(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test2", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    Handle bootstrap =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmLookupStatic",
+            mt.toMethodDescriptorString(),
+            false);
+    mv.visitLdcInsn(new Boolean(true));
+    mv.visitLdcInsn(new Byte((byte) 127));
+    mv.visitLdcInsn(new Character('c'));
+    mv.visitLdcInsn(new Short((short) 1024));
+    mv.visitLdcInsn(new Integer(123456));
+    mv.visitLdcInsn(new Float(1.2f));
+    mv.visitLdcInsn(new Long(123456789));
+    mv.visitLdcInsn(new Double(3.5123456789));
+    mv.visitLdcInsn("String");
+    mv.visitInvokeDynamicInsn("targetMethodTest2", "(ZBCSIFJDLjava/lang/String;)V", bootstrap);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate test with an invokedynamic, a static bootstrap method with extra args and no arg to
+   * the target method.
+   */
+  private void generateMethodTest3(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test3", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class,
+            MethodHandles.Lookup.class,
+            String.class,
+            MethodType.class,
+            int.class,
+            long.class,
+            float.class,
+            double.class);
+    Handle bootstrap =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmLookupStaticWithExtraArgs",
+            mt.toMethodDescriptorString(),
+            false);
+    mv.visitInvokeDynamicInsn(
+        "targetMethodTest3",
+        "()V",
+        bootstrap,
+        new Integer(1),
+        new Long(123456789),
+        new Float(123.456),
+        new Double(123456.789123));
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate test with an invokedynamic, a static bootstrap method with an extra arg that is a
+   * MethodHandle of kind invokespecial.
+   */
+  private void generateMethodTest4(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test4", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class,
+            MethodHandles.Lookup.class,
+            String.class,
+            MethodType.class,
+            MethodHandle.class);
+    Handle bootstrap =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmCreateCallSite",
+            mt.toMethodDescriptorString(),
+            false);
+    mv.visitTypeInsn(Opcodes.NEW, Type.getInternalName(InvokeCustom.class));
+    mv.visitInsn(Opcodes.DUP);
+    mv.visitMethodInsn(
+        Opcodes.INVOKESPECIAL, Type.getInternalName(InvokeCustom.class), "<init>", "()V", false);
+    mv.visitInvokeDynamicInsn(
+        "targetMethodTest4",
+        "(Linvokecustom/InvokeCustom;)V",
+        bootstrap,
+        new Handle(
+            Opcodes.H_INVOKESPECIAL,
+            Type.getInternalName(Super.class),
+            "targetMethodTest4",
+            "()V",
+            false));
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with an invokedynamic where the target generates a result that the call site
+   * prints out.
+   */
+  private void generateMethodTest5(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test5", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    Handle bootstrap =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmLookupStatic",
+            mt.toMethodDescriptorString(),
+            false);
+    mv.visitIntInsn(Opcodes.SIPUSH, 1000);
+    mv.visitIntInsn(Opcodes.SIPUSH, -923);
+    mv.visitIntInsn(Opcodes.SIPUSH, 77);
+    mv.visitInvokeDynamicInsn("targetMethodTest5", "(III)I", bootstrap);
+    mv.visitVarInsn(Opcodes.ISTORE, 0);
+    mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+    mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
+    mv.visitInsn(Opcodes.DUP);
+    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
+    mv.visitLdcInsn("targetMethodTest5 returned: ");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL,
+        "java/lang/StringBuilder",
+        "append",
+        "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
+    mv.visitVarInsn(Opcodes.ILOAD, 0);
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(I)Ljava/lang/StringBuilder;");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with an invokedynamic where the call site invocation tests the summation of two
+   * long values and returns a long.
+   */
+  private void generateMethodTest6(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test6", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    Handle bootstrap =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmLookupStatic",
+            mt.toMethodDescriptorString(),
+            false);
+    mv.visitLdcInsn(0x77777777777l);
+    mv.visitLdcInsn(-0x11111111111l);
+    mv.visitLdcInsn(0x66666666666l);
+    mv.visitInvokeDynamicInsn("targetMethodTest6", "(JJJ)J", bootstrap);
+    mv.visitVarInsn(Opcodes.LSTORE, 0);
+    mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+    mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
+    mv.visitInsn(Opcodes.DUP);
+    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
+    mv.visitLdcInsn("targetMethodTest6 returned: ");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL,
+        "java/lang/StringBuilder",
+        "append",
+        "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
+    mv.visitVarInsn(Opcodes.LLOAD, 0);
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(J)Ljava/lang/StringBuilder;");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with an invokedynamic where the call site invocation tests the product of two
+   * float values and returns a double.
+   */
+  private void generateMethodTest7(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test7", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    Handle bootstrap =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmLookupStatic",
+            mt.toMethodDescriptorString(),
+            false);
+    double x = 0.5009765625;
+    double y = -x;
+    mv.visitLdcInsn((float) x);
+    mv.visitLdcInsn((float) y);
+    mv.visitLdcInsn(x * y);
+    mv.visitInvokeDynamicInsn("targetMethodTest7", "(FFD)D", bootstrap);
+    mv.visitVarInsn(Opcodes.DSTORE, 0);
+    mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+    mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
+    mv.visitInsn(Opcodes.DUP);
+    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
+    mv.visitLdcInsn("targetMethodTest6 returned: ");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL,
+        "java/lang/StringBuilder",
+        "append",
+        "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
+    mv.visitVarInsn(Opcodes.DLOAD, 0);
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(D)Ljava/lang/StringBuilder;");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
+    mv.visitMethodInsn(
+        Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test with multiple invokedynamic bytecodes operating on the same parameters. These
+   * invocations should each produce invoke-custom bytecodes with unique call site ids.
+   */
+  private void generateMethodTest8(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test8", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    // These should be two distinct call sites and both invoke the
+    // bootstrap method. An erroneous implementation might treat them
+    // as the same call site because the handle arguments are the same.
+    Handle bootstrap1 =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmLookupStatic",
+            mt.toMethodDescriptorString(),
+            false);
+    mv.visitLdcInsn("First invokedynamic invocation");
+    mv.visitInvokeDynamicInsn("targetMethodTest8", "(Ljava/lang/String;)V", bootstrap1);
+
+    Handle bootstrap2 =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            Type.getInternalName(InvokeCustom.class),
+            "bsmLookupStatic",
+            mt.toMethodDescriptorString(),
+            false);
+    mv.visitLdcInsn("Second invokedynamic invocation");
+    mv.visitInvokeDynamicInsn("targetMethodTest8", "(Ljava/lang/String;)V", bootstrap2);
+
+    // Using same handle again creates a new call site so invokes the bootstrap method.
+    mv.visitLdcInsn("Dupe first invokedynamic invocation");
+    mv.visitInvokeDynamicInsn("targetMethodTest8", "(Ljava/lang/String;)V", bootstrap1);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /** Generate a test with different kinds of constant method handles. */
+  private void generateMethodTest9(ClassVisitor cv) {
+    MethodVisitor mv =
+        cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test9", "()V", null, null);
+    MethodType mt =
+        MethodType.methodType(
+            CallSite.class,
+            MethodHandles.Lookup.class,
+            String.class,
+            MethodType.class,
+            MethodHandle.class,
+            MethodHandle.class,
+            MethodHandle.class,
+            MethodHandle.class,
+            MethodHandle.class,
+            MethodHandle.class,
+            MethodHandle.class);
+    String internalName = Type.getInternalName(InvokeCustom.class);
+    Handle bootstrap =
+        new Handle(
+            Opcodes.H_INVOKESTATIC,
+            internalName,
+            "bsmLookupTest9",
+            mt.toMethodDescriptorString(),
+            false);
+    Handle staticSetter =
+        new Handle(Opcodes.H_GETSTATIC, internalName, "staticFieldTest9", "I", false);
+    Handle staticGetter =
+        new Handle(Opcodes.H_PUTSTATIC, internalName, "staticFieldTest9", "I", false);
+    Handle setter = new Handle(Opcodes.H_GETFIELD, internalName, "fieldTest9", "F", false);
+    Handle getter = new Handle(Opcodes.H_PUTFIELD, internalName, "fieldTest9", "F", false);
+    Handle instanceInvoke =
+        new Handle(Opcodes.H_INVOKEVIRTUAL, internalName, "helperMethodTest9", "()V", false);
+    // H_INVOKESTATIC and H_INVOKESPECIAL are tested elsewhere.
+    Handle constructor =
+        new Handle(Opcodes.H_NEWINVOKESPECIAL, internalName, "<init>", "(I)V", false);
+    Handle interfaceInvoke =
+        new Handle(
+            Opcodes.H_INVOKEINTERFACE, Type.getInternalName(Runnable.class), "run", "()V", true);
+
+    mv.visitInvokeDynamicInsn(
+        "targetMethodTest9",
+        "()V",
+        bootstrap,
+        staticSetter,
+        staticGetter,
+        setter,
+        getter,
+        instanceInvoke,
+        constructor,
+        interfaceInvoke);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+}
diff --git a/dx/tests/138-invoke-polymorphic-again/Main.class b/dx/tests/138-invoke-polymorphic-again/Main.class
new file mode 100644
index 0000000..751d450
Binary files /dev/null and b/dx/tests/138-invoke-polymorphic-again/Main.class differ
diff --git a/dx/tests/138-invoke-polymorphic-again/Main.java b/dx/tests/138-invoke-polymorphic-again/Main.java
new file mode 100644
index 0000000..48de64d
--- /dev/null
+++ b/dx/tests/138-invoke-polymorphic-again/Main.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * 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.
+ */
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
+import java.lang.invoke.MethodType;
+
+public class Main {
+  public static void assertEquals(int i1, int i2) {
+  }
+
+  public int foof(int a, int b, int c, int d,
+                  int e, int f, int g, int h,
+                  int i, int j, int k, int l,
+                  int m, int n, int o) {
+    return a;
+  }
+
+  public static void $opt$BasicTest() throws Throwable {
+    Main m = null;
+    // OTH: >= 15 arguments to invokeExact tickles this bug. Fewer, no repro.
+    assertEquals(42, -42);
+    m.foof(0, 1, 2, 3,
+           4, 5, 6, 7,
+           8, 9, 10, 11,
+           12, 13, 14);
+    MethodHandle mh0 = null;
+    mh0.invokeExact("bad");
+  }
+
+  public static int $opt$BasicTest2() throws Throwable {
+    Main m = null;
+    // OTH: >= 15 arguments to invokeExact tickles this bug. Fewer, no repro.
+    assertEquals(42, -42);
+    m.foof(0, 1, 2, 3,
+           4, 5, 6, 7,
+           8, 9, 10, 11,
+           12, 13, 14);
+    MethodHandle mh0 = null;
+    return (int) mh0.invokeExact("bad");
+  }
+
+  public static void main(String[] args) throws Throwable {
+    $opt$BasicTest();
+  }
+}
diff --git a/dx/tests/138-invoke-polymorphic-again/build b/dx/tests/138-invoke-polymorphic-again/build
new file mode 100755
index 0000000..740d729
--- /dev/null
+++ b/dx/tests/138-invoke-polymorphic-again/build
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+JAVAC_FLAGS="-g -Xlint:-options -source 1.8 -target 1.8 -implicit:none"
+$JAVAC $JAVAC_FLAGS -d . *.java
diff --git a/dx/tests/138-invoke-polymorphic-again/expected.txt b/dx/tests/138-invoke-polymorphic-again/expected.txt
new file mode 100644
index 0000000..7c3fb77
--- /dev/null
+++ b/dx/tests/138-invoke-polymorphic-again/expected.txt
@@ -0,0 +1,88 @@
+Main.$opt$BasicTest:()V:
+regs: 0012; ins: 0000; outs: 0010
+  0000: const/4 v1, #null // #0
+  0001: const/16 v2, #int 42 // #002a
+  0003: const/16 v3, #int -42 // #ffd6
+  0005: invoke-static {v2, v3}, Main.assertEquals:(II)V
+  0008: const/4 v2, #int 0 // #0
+  0009: const/4 v3, #int 1 // #1
+  000a: const/4 v4, #int 2 // #2
+  000b: const/4 v5, #int 3 // #3
+  000c: const/4 v6, #int 4 // #4
+  000d: const/4 v7, #int 5 // #5
+  000e: const/4 v8, #int 6 // #6
+  000f: const/4 v9, #int 7 // #7
+  0010: const/16 v10, #int 8 // #0008
+  0012: const/16 v11, #int 9 // #0009
+  0014: const/16 v12, #int 10 // #000a
+  0016: const/16 v13, #int 11 // #000b
+  0018: const/16 v14, #int 12 // #000c
+  001a: const/16 v15, #int 13 // #000d
+  001c: const/16 v16, #int 14 // #000e
+  001e: invoke-virtual/range {v1..v16}, Main.foof:(IIIIIIIIIIIIIII)I
+  0021: const/16 v17, #null // #0000
+  0023: const-string v2, "bad"
+  0025: move-object/from16 v0, v17
+  0027: invoke-polymorphic {v0, v2}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/String;)V
+  002b: return-void
+  debug info
+    line_start: 34
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 34
+    0001: line 36
+    0001: +local v1 m Main
+    0008: line 37
+    0021: advance pc
+    0021: line 41
+    0023: line 42
+    0023: +local v17 mh0 java.lang.invoke.MethodHandle
+    002b: line 43
+    end sequence
+  source file: "Main.java"
+  method annotations:
+    system-annotation dalvik.annotation.Throws {value: {java.lang.Throwable}}
+Main.$opt$BasicTest2:()I:
+regs: 0012; ins: 0000; outs: 0010
+  0000: const/4 v1, #null // #0
+  0001: const/16 v2, #int 42 // #002a
+  0003: const/16 v3, #int -42 // #ffd6
+  0005: invoke-static {v2, v3}, Main.assertEquals:(II)V
+  0008: const/4 v2, #int 0 // #0
+  0009: const/4 v3, #int 1 // #1
+  000a: const/4 v4, #int 2 // #2
+  000b: const/4 v5, #int 3 // #3
+  000c: const/4 v6, #int 4 // #4
+  000d: const/4 v7, #int 5 // #5
+  000e: const/4 v8, #int 6 // #6
+  000f: const/4 v9, #int 7 // #7
+  0010: const/16 v10, #int 8 // #0008
+  0012: const/16 v11, #int 9 // #0009
+  0014: const/16 v12, #int 10 // #000a
+  0016: const/16 v13, #int 11 // #000b
+  0018: const/16 v14, #int 12 // #000c
+  001a: const/16 v15, #int 13 // #000d
+  001c: const/16 v16, #int 14 // #000e
+  001e: invoke-virtual/range {v1..v16}, Main.foof:(IIIIIIIIIIIIIII)I
+  0021: const/16 v17, #null // #0000
+  0023: const-string v2, "bad"
+  0025: move-object/from16 v0, v17
+  0027: invoke-polymorphic {v0, v2}, java.lang.invoke.MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/String;)I
+  002b: move-result v2
+  002c: return v2
+  debug info
+    line_start: 46
+    parameters_size: 0000
+    0000: prologue end
+    0000: line 46
+    0001: line 48
+    0001: +local v1 m Main
+    0008: line 49
+    0021: advance pc
+    0021: line 53
+    0023: line 54
+    0023: +local v17 mh0 java.lang.invoke.MethodHandle
+    end sequence
+  source file: "Main.java"
+  method annotations:
+    system-annotation dalvik.annotation.Throws {value: {java.lang.Throwable}}
diff --git a/dx/tests/138-invoke-polymorphic-again/info.txt b/dx/tests/138-invoke-polymorphic-again/info.txt
new file mode 100644
index 0000000..98a8f78
--- /dev/null
+++ b/dx/tests/138-invoke-polymorphic-again/info.txt
@@ -0,0 +1,7 @@
+This tests the proper register preparation for invoke-polymorphic
+instructions. The test was written as the invoke-polymorphic bytecodes
+were mis-annotated in dx as having a return result. This led to a path
+that did not emit the necessary move instructions and the generated
+DEX file was rejected by ART. The issue was only visible when dx
+optimization was enabled, but the problem lay in the OutputFinisher
+register selection.
diff --git a/dx/tests/138-invoke-polymorphic-again/run b/dx/tests/138-invoke-polymorphic-again/run
new file mode 100755
index 0000000..7bec0be
--- /dev/null
+++ b/dx/tests/138-invoke-polymorphic-again/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+SDK_VERSION=26
+
+dx --debug --dex --min-sdk-version=${SDK_VERSION} --output="classes.dex" \
+   --dump-method=Main.\$opt\$BasicTest* --dump-width=1000 --dump-to=- Main.class 2>&1
diff --git a/dx/tests/139-lambda-metafactory/Consumer.class b/dx/tests/139-lambda-metafactory/Consumer.class
new file mode 100644
index 0000000..86ea51c
Binary files /dev/null and b/dx/tests/139-lambda-metafactory/Consumer.class differ
diff --git a/dx/tests/139-lambda-metafactory/Foo.class b/dx/tests/139-lambda-metafactory/Foo.class
new file mode 100644
index 0000000..2d4339e
Binary files /dev/null and b/dx/tests/139-lambda-metafactory/Foo.class differ
diff --git a/dx/tests/139-lambda-metafactory/Main.class b/dx/tests/139-lambda-metafactory/Main.class
new file mode 100644
index 0000000..2a2dfef
Binary files /dev/null and b/dx/tests/139-lambda-metafactory/Main.class differ
diff --git a/dx/tests/139-lambda-metafactory/Main.java b/dx/tests/139-lambda-metafactory/Main.java
new file mode 100644
index 0000000..03bd4a7
--- /dev/null
+++ b/dx/tests/139-lambda-metafactory/Main.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+interface Consumer<T> {
+    void accept(T t);
+}
+
+class Foo {
+    int i;
+    void bar(int j) {
+        Consumer consumer = k -> System.out.println(((i + j) + (int)k));
+        consumer.accept(1);
+    }
+}
+
+class Main {
+    public static void main(String[] args) {
+        new Foo().bar(5);
+    }
+}
diff --git a/dx/tests/139-lambda-metafactory/build b/dx/tests/139-lambda-metafactory/build
new file mode 100755
index 0000000..740d729
--- /dev/null
+++ b/dx/tests/139-lambda-metafactory/build
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+JAVAC_FLAGS="-g -Xlint:-options -source 1.8 -target 1.8 -implicit:none"
+$JAVAC $JAVAC_FLAGS -d . *.java
diff --git a/dx/tests/139-lambda-metafactory/expected.txt b/dx/tests/139-lambda-metafactory/expected.txt
new file mode 100644
index 0000000..6b5ddd7
--- /dev/null
+++ b/dx/tests/139-lambda-metafactory/expected.txt
@@ -0,0 +1,880 @@
+000000: 6465 780a 3033 3800     |magic: "dex\n038\0"
+000008: 590b 1a16               |checksum
+00000c: 8798 f7ff b191 97b1 2e9c|signature
+000016: f739 ab2b 8ae4 9ef9 73a8|
+000020: 3c07 0000               |file_size:       0000073c
+000024: 7000 0000               |header_size:     00000070
+000028: 7856 3412               |endian_tag:      12345678
+00002c: 0000 0000               |link_size:       0
+000030: 0000 0000               |link_off:        0
+000034: 5406 0000               |map_off:         00000654
+000038: 2c00 0000               |string_ids_size: 0000002c
+00003c: 7000 0000               |string_ids_off:  00000070
+000040: 1100 0000               |type_ids_size:   00000011
+000044: 2001 0000               |type_ids_off:    00000120
+000048: 0900 0000               |proto_ids_size:  00000009
+00004c: 6401 0000               |proto_ids_off:   00000164
+000050: 0200 0000               |field_ids_size:  00000002
+000054: d001 0000               |field_ids_off:   000001d0
+000058: 0b00 0000               |method_ids_size: 0000000b
+00005c: e001 0000               |method_ids_off:  000001e0
+000060: 0300 0000               |class_defs_size: 00000003
+000064: 3802 0000               |class_defs_off:  00000238
+000068: 8c04 0000               |data_size:       0000048c
+00006c: b002 0000               |data_off:        000002b0
+                                |
+                                |string_ids:
+                                |[0] "(TT;)V"
+000070: be03 0000               |  string_data_off: 000003be
+                                |[1] "<T:"
+000074: c603 0000               |  string_data_off: 000003c6
+                                |[2] "<init>"
+000078: cb03 0000               |  string_data_off: 000003cb
+                                |[3] ">"
+00007c: d303 0000               |  string_data_off: 000003d3
+                                |[4] "I"
+000080: d603 0000               |  string_data_off: 000003d6
+                                |[5] "LConsumer;"
+000084: d903 0000               |  string_data_off: 000003d9
+                                |[6] "LFoo;"
+000088: e503 0000               |  string_data_off: 000003e5
+                                |[7] "LI"
+00008c: ec03 0000               |  string_data_off: 000003ec
+                                |[8] "LLI"
+000090: f003 0000               |  string_data_off: 000003f0
+                                |[9] "LLLLLLL"
+000094: f503 0000               |  string_data_off: 000003f5
+                                |[a] "LMain;"
+000098: fe03 0000               |  string_data_off: 000003fe
+                                |[b] "Ldalvik/annotation/Signature;"
+00009c: 0604 0000               |  string_data_off: 00000406
+                                |[c] "Ljava/io/PrintStream;"
+0000a0: 2504 0000               |  string_data_off: 00000425
+                                |[d] "Ljava/lang/Integer;"
+0000a4: 3c04 0000               |  string_data_off: 0000043c
+                                |[e] "Ljava/lang/Object;"
+0000a8: 5104 0000               |  string_data_off: 00000451
+                                |[f] "Ljava/lang/String;"
+0000ac: 6504 0000               |  string_data_off: 00000465
+                                |[10] "Ljava/lang/System;"
+0000b0: 7904 0000               |  string_data_off: 00000479
+                                |[11] "Ljava/lang/invoke/CallSite;"
+0000b4: 8d04 0000               |  string_data_off: 0000048d
+                                |[12] "Ljava/lang/invoke/LambdaMetafactory;"
+0000b8: aa04 0000               |  string_data_off: 000004aa
+                                |[13] "Ljava/lang/invoke/MethodHandle;"
+0000bc: d004 0000               |  string_data_off: 000004d0
+                                |[14] "Ljava/lang/invoke/MethodHandles$Lookup;"
+0000c0: f104 0000               |  string_data_off: 000004f1
+                                |[15] "Ljava/lang/invoke/MethodType;"
+0000c4: 1a05 0000               |  string_data_off: 0000051a
+                                |[16] "Main.java"
+0000c8: 3905 0000               |  string_data_off: 00000539
+                                |[17] "V"
+0000cc: 4405 0000               |  string_data_off: 00000544
+                                |[18] "VI"
+0000d0: 4705 0000               |  string_data_off: 00000547
+                                |[19] "VIL"
+0000d4: 4b05 0000               |  string_data_off: 0000054b
+                                |[1a] "VL"
+0000d8: 5005 0000               |  string_data_off: 00000550
+                                |[1b] "[Ljava/lang/String;"
+0000dc: 5405 0000               |  string_data_off: 00000554
+                                |[1c] "accept"
+0000e0: 6905 0000               |  string_data_off: 00000569
+                                |[1d] "args"
+0000e4: 7105 0000               |  string_data_off: 00000571
+                                |[1e] "bar"
+0000e8: 7705 0000               |  string_data_off: 00000577
+                                |[1f] "consumer"
+0000ec: 7c05 0000               |  string_data_off: 0000057c
+                                |[20] "i"
+0000f0: 8605 0000               |  string_data_off: 00000586
+                                |[21] "intValue"
+0000f4: 8905 0000               |  string_data_off: 00000589
+                                |[22] "j"
+0000f8: 9305 0000               |  string_data_off: 00000593
+                                |[23] "k"
+0000fc: 9605 0000               |  string_data_off: 00000596
+                                |[24] "lambda$bar$0"
+000100: 9905 0000               |  string_data_off: 00000599
+                                |[25] "main"
+000104: a705 0000               |  string_data_off: 000005a7
+                                |[26] "metafactory"
+000108: ad05 0000               |  string_data_off: 000005ad
+                                |[27] "out"
+00010c: ba05 0000               |  string_data_off: 000005ba
+                                |[28] "println"
+000110: bf05 0000               |  string_data_off: 000005bf
+                                |[29] "this"
+000114: c805 0000               |  string_data_off: 000005c8
+                                |[2a] "value"
+000118: ce05 0000               |  string_data_off: 000005ce
+                                |[2b] "valueOf"
+00011c: d505 0000               |  string_data_off: 000005d5
+                                |
+                                |type_ids:
+                                |[0] I
+000120: 0400 0000               |  descriptor_idx: 00000004
+                                |[1] LConsumer;
+000124: 0500 0000               |  descriptor_idx: 00000005
+                                |[2] LFoo;
+000128: 0600 0000               |  descriptor_idx: 00000006
+                                |[3] LMain;
+00012c: 0a00 0000               |  descriptor_idx: 0000000a
+                                |[4] Ldalvik/annotation/Signature;
+000130: 0b00 0000               |  descriptor_idx: 0000000b
+                                |[5] Ljava/io/PrintStream;
+000134: 0c00 0000               |  descriptor_idx: 0000000c
+                                |[6] Ljava/lang/Integer;
+000138: 0d00 0000               |  descriptor_idx: 0000000d
+                                |[7] Ljava/lang/Object;
+00013c: 0e00 0000               |  descriptor_idx: 0000000e
+                                |[8] Ljava/lang/String;
+000140: 0f00 0000               |  descriptor_idx: 0000000f
+                                |[9] Ljava/lang/System;
+000144: 1000 0000               |  descriptor_idx: 00000010
+                                |[a] Ljava/lang/invoke/CallSite;
+000148: 1100 0000               |  descriptor_idx: 00000011
+                                |[b] Ljava/lang/invoke/LambdaMetafactory;
+00014c: 1200 0000               |  descriptor_idx: 00000012
+                                |[c] Ljava/lang/invoke/MethodHandle;
+000150: 1300 0000               |  descriptor_idx: 00000013
+                                |[d] Ljava/lang/invoke/MethodHandles$Lookup;
+000154: 1400 0000               |  descriptor_idx: 00000014
+                                |[e] Ljava/lang/invoke/MethodType;
+000158: 1500 0000               |  descriptor_idx: 00000015
+                                |[f] V
+00015c: 1700 0000               |  descriptor_idx: 00000017
+                                |[10] [Ljava/lang/String;
+000160: 1b00 0000               |  descriptor_idx: 0000001b
+                                |
+                                |proto_ids:
+                                |[0] int proto()
+000164: 0400 0000               |  shorty_idx:      00000004 // "I"
+000168: 0000 0000               |  return_type_idx: 00000000 // int
+00016c: 0000 0000               |  parameters_off:  00000000
+                                |[1] Consumer proto(Foo, int)
+000170: 0800 0000               |  shorty_idx:      00000008 // "LLI"
+000174: 0100 0000               |  return_type_idx: 00000001 // Consumer
+000178: 8803 0000               |  parameters_off:  00000388
+                                |[2] java.lang.Integer proto(int)
+00017c: 0700 0000               |  shorty_idx:      00000007 // "LI"
+000180: 0600 0000               |  return_type_idx: 00000006 // java.lang.Integer
+000184: 9003 0000               |  parameters_off:  00000390
+                                |[3] java.lang.invoke.CallSite proto(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.invoke.MethodType, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle, java.lang.invoke.MethodType)
+000188: 0900 0000               |  shorty_idx:      00000009 // "LLLLLLL"
+00018c: 0a00 0000               |  return_type_idx: 0000000a // java.lang.invoke.CallSite
+000190: 9803 0000               |  parameters_off:  00000398
+                                |[4] void proto()
+000194: 1700 0000               |  shorty_idx:      00000017 // "V"
+000198: 0f00 0000               |  return_type_idx: 0000000f // void
+00019c: 0000 0000               |  parameters_off:  00000000
+                                |[5] void proto(int)
+0001a0: 1800 0000               |  shorty_idx:      00000018 // "VI"
+0001a4: 0f00 0000               |  return_type_idx: 0000000f // void
+0001a8: 9003 0000               |  parameters_off:  00000390
+                                |[6] void proto(int, java.lang.Object)
+0001ac: 1900 0000               |  shorty_idx:      00000019 // "VIL"
+0001b0: 0f00 0000               |  return_type_idx: 0000000f // void
+0001b4: a803 0000               |  parameters_off:  000003a8
+                                |[7] void proto(java.lang.Object)
+0001b8: 1a00 0000               |  shorty_idx:      0000001a // "VL"
+0001bc: 0f00 0000               |  return_type_idx: 0000000f // void
+0001c0: b003 0000               |  parameters_off:  000003b0
+                                |[8] void proto(java.lang.String[])
+0001c4: 1a00 0000               |  shorty_idx:      0000001a // "VL"
+0001c8: 0f00 0000               |  return_type_idx: 0000000f // void
+0001cc: b803 0000               |  parameters_off:  000003b8
+                                |
+                                |field_ids:
+                                |[0] Foo.i:I
+0001d0: 0200                    |  class_idx: 0002
+0001d2: 0000                    |  type_idx:  0000
+0001d4: 2000 0000               |  name_idx:  00000020
+                                |[1] java.lang.System.out:Ljava/io/PrintStream;
+0001d8: 0900                    |  class_idx: 0009
+0001da: 0500                    |  type_idx:  0005
+0001dc: 2700 0000               |  name_idx:  00000027
+                                |
+                                |method_ids:
+                                |[0] Consumer.accept:(Ljava/lang/Object;)V
+0001e0: 0100                    |  class_idx: 0001
+0001e2: 0700                    |  proto_idx: 0007
+0001e4: 1c00 0000               |  name_idx:  0000001c
+                                |[1] Foo.<init>:()V
+0001e8: 0200                    |  class_idx: 0002
+0001ea: 0400                    |  proto_idx: 0004
+0001ec: 0200 0000               |  name_idx:  00000002
+                                |[2] Foo.bar:(I)V
+0001f0: 0200                    |  class_idx: 0002
+0001f2: 0500                    |  proto_idx: 0005
+0001f4: 1e00 0000               |  name_idx:  0000001e
+                                |[3] Foo.lambda$bar$0:(ILjava/lang/Object;)V
+0001f8: 0200                    |  class_idx: 0002
+0001fa: 0600                    |  proto_idx: 0006
+0001fc: 2400 0000               |  name_idx:  00000024
+                                |[4] Main.<init>:()V
+000200: 0300                    |  class_idx: 0003
+000202: 0400                    |  proto_idx: 0004
+000204: 0200 0000               |  name_idx:  00000002
+                                |[5] Main.main:([Ljava/lang/String;)V
+000208: 0300                    |  class_idx: 0003
+00020a: 0800                    |  proto_idx: 0008
+00020c: 2500 0000               |  name_idx:  00000025
+                                |[6] java.io.PrintStream.println:(I)V
+000210: 0500                    |  class_idx: 0005
+000212: 0500                    |  proto_idx: 0005
+000214: 2800 0000               |  name_idx:  00000028
+                                |[7] java.lang.Integer.intValue:()I
+000218: 0600                    |  class_idx: 0006
+00021a: 0000                    |  proto_idx: 0000
+00021c: 2100 0000               |  name_idx:  00000021
+                                |[8] java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
+000220: 0600                    |  class_idx: 0006
+000222: 0200                    |  proto_idx: 0002
+000224: 2b00 0000               |  name_idx:  0000002b
+                                |[9] java.lang.Object.<init>:()V
+000228: 0700                    |  class_idx: 0007
+00022a: 0400                    |  proto_idx: 0004
+00022c: 0200 0000               |  name_idx:  00000002
+                                |[a] java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+000230: 0b00                    |  class_idx: 000b
+000232: 0300                    |  proto_idx: 0003
+000234: 2600 0000               |  name_idx:  00000026
+                                |
+                                |class_defs:
+                                |[0] Consumer
+000238: 0100 0000               |  class_idx:           00000001
+00023c: 0006 0000               |  access_flags:        interface|abstract
+000240: 0700 0000               |  superclass_idx:      00000007 // java.lang.Object
+000244: 0000 0000               |  interfaces_off:      00000000
+000248: 1600 0000               |  source_file_idx:     00000016 // Main.java
+00024c: 7003 0000               |  annotations_off:     00000370
+000250: 2906 0000               |  class_data_off:      00000629
+000254: 0000 0000               |  static_values_off:   00000000
+                                |[1] Foo
+000258: 0200 0000               |  class_idx:           00000002
+00025c: 0000 0000               |  access_flags:        0000
+000260: 0700 0000               |  superclass_idx:      00000007 // java.lang.Object
+000264: 0000 0000               |  interfaces_off:      00000000
+000268: 1600 0000               |  source_file_idx:     00000016 // Main.java
+00026c: 0000 0000               |  annotations_off:     00000000
+000270: 3106 0000               |  class_data_off:      00000631
+000274: 0000 0000               |  static_values_off:   00000000
+                                |[2] Main
+000278: 0300 0000               |  class_idx:           00000003
+00027c: 0000 0000               |  access_flags:        0000
+000280: 0700 0000               |  superclass_idx:      00000007 // java.lang.Object
+000284: 0000 0000               |  interfaces_off:      00000000
+000288: 1600 0000               |  source_file_idx:     00000016 // Main.java
+00028c: 0000 0000               |  annotations_off:     00000000
+000290: 4606 0000               |  class_data_off:      00000646
+000294: 0000 0000               |  static_values_off:   00000000
+                                |
+                                |call_site_ids:
+                                |[0] call site{method-handle{invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"accept"}, proto{(LFoo;I)LConsumer;}, proto{(Ljava/lang/Object;)V}, method-handle{invoke-direct,method{Foo.lambda$bar$0:(ILjava/lang/Object;)V}}, proto{(Ljava/lang/Object;)V}}
+000298: 1c06 0000               |call_site_off: 0000061c
+00029c: 0000 0000               |
+                                |
+                                |method_handles:
+                                |[0] method-handle{invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}
+0002a0: 0400                    |type:     0004 // invoke-static
+0002a2: 0000                    |reserved: 0000
+0002a4: 0a00                    |methodId: 000a // method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+0002a6: 0000                    |reserved: 0000
+                                |[1] method-handle{invoke-direct,method{Foo.lambda$bar$0:(ILjava/lang/Object;)V}}
+0002a8: 0700                    |type:     0007 // invoke-direct
+0002aa: 0000                    |reserved: 0000
+0002ac: 0300                    |methodId: 0003 // method{Foo.lambda$bar$0:(ILjava/lang/Object;)V}
+0002ae: 0000                    |reserved: 0000
+                                |
+                                |word_data:
+                                |[2b0] annotation set
+0002b0: 0100 0000               |  size: 00000001
+0002b4: 0606 0000               |  entries[0]: 00000606
+                                |    visibility: system
+                                |    type: dalvik.annotation.Signature
+                                |    value: array {<T:, Ljava/lang/Object;, >, Ljava/lang/Object;}
+                                |
+                                |[2b8] annotation set
+0002b8: 0100 0000               |  size: 00000001
+0002bc: 1406 0000               |  entries[0]: 00000614
+                                |    visibility: system
+                                |    type: dalvik.annotation.Signature
+                                |    value: array {(TT;)V}
+                                |
+                                |[2c0] Foo.<init>:()V
+0002c0: 0100                    |  registers_size: 0001
+0002c2: 0100                    |  ins_size:       0001
+0002c4: 0100                    |  outs_size:      0001
+0002c6: 0000                    |  tries_size:     0000
+0002c8: de05 0000               |  debug_off:      000005de
+0002cc: 0400 0000               |  insns_size:     00000004
+0002d0: 7010 0900 0000          |  0000: invoke-direct {v0}, java.lang.Object.<init>:()V // method@0009
+0002d6: 0e00                    |  0003: return-void
+                                |  debug info
+                                |    line_start: 21
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 21
+                                |    end sequence
+                                |
+                                |[2d8] Foo.lambda$bar$0:(ILjava/lang/Object;)V
+0002d8: 0600                    |  registers_size: 0006
+0002da: 0300                    |  ins_size:       0003
+0002dc: 0200                    |  outs_size:      0002
+0002de: 0000                    |  tries_size:     0000
+0002e0: e305 0000               |  debug_off:      000005e3
+0002e4: 1000 0000               |  insns_size:     00000010
+0002e8: 6200 0100               |  0000: sget-object v0, java.lang.System.out:Ljava/io/PrintStream; // field@0001
+0002ec: 5231 0000               |  0002: iget v1, v3, Foo.i:I // field@0000
+0002f0: b041                    |  0004: add-int/2addr v1, v4
+0002f2: 1f05 0600               |  0005: check-cast v5, java.lang.Integer // type@0006
+0002f6: 6e10 0700 0500          |  0007: invoke-virtual {v5}, java.lang.Integer.intValue:()I // method@0007
+0002fc: 0a02                    |  000a: move-result v2
+0002fe: b021                    |  000b: add-int/2addr v1, v2
+000300: 6e20 0600 1000          |  000c: invoke-virtual {v0, v1}, java.io.PrintStream.println:(I)V // method@0006
+000306: 0e00                    |  000f: return-void
+                                |  debug info
+                                |    line_start: 24
+                                |    parameters_size: 0002
+                                |    parameter j v4
+                                |    parameter k v5
+                                |    0000: prologue end
+                                |    0000: line 24
+                                |    0007: advance pc
+                                |    0007: -local v5 k java.lang.Object
+                                |    end sequence
+                                |
+                                |[308] Foo.bar:(I)V
+000308: 0400                    |  registers_size: 0004
+00030a: 0200                    |  ins_size:       0002
+00030c: 0200                    |  outs_size:      0002
+00030e: 0000                    |  tries_size:     0000
+000310: ee05 0000               |  debug_off:      000005ee
+000314: 0d00 0000               |  insns_size:     0000000d
+000318: fc20 0000 3200          |  0000: invoke-custom {v2, v3}, {invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}, accept, (LFoo;I)LConsumer;, (Ljava/lang/Object;)V, invoke-direct,method{Foo.lambda$bar$0:(ILjava/lang/Object;)V}, (Ljava/lang/Object;)V} // CallSiteRef@0000
+00031e: 0c00                    |  0003: move-result-object v0
+000320: 1211                    |  0004: const/4 v1, #int 1 // #1
+000322: 7110 0800 0100          |  0005: invoke-static {v1}, java.lang.Integer.valueOf:(I)Ljava/lang/Integer; // method@0008
+000328: 0c01                    |  0008: move-result-object v1
+00032a: 7220 0000 1000          |  0009: invoke-interface {v0, v1}, Consumer.accept:(Ljava/lang/Object;)V // method@0000
+000330: 0e00                    |  000c: return-void
+                                |  debug info
+                                |    line_start: 24
+                                |    parameters_size: 0001
+                                |    parameter j v3
+                                |    0000: prologue end
+                                |    0000: line 24
+                                |    0004: line 25
+                                |    0004: +local v0 consumer Consumer
+                                |    000c: line 26
+                                |    end sequence
+                                |
+000332: 0000                    |
+                                |[334] Main.<init>:()V
+000334: 0100                    |  registers_size: 0001
+000336: 0100                    |  ins_size:       0001
+000338: 0100                    |  outs_size:      0001
+00033a: 0000                    |  tries_size:     0000
+00033c: fa05 0000               |  debug_off:      000005fa
+000340: 0400 0000               |  insns_size:     00000004
+000344: 7010 0900 0000          |  0000: invoke-direct {v0}, java.lang.Object.<init>:()V // method@0009
+00034a: 0e00                    |  0003: return-void
+                                |  debug info
+                                |    line_start: 29
+                                |    parameters_size: 0000
+                                |    0000: prologue end
+                                |    0000: line 29
+                                |    end sequence
+                                |
+                                |[34c] Main.main:([Ljava/lang/String;)V
+00034c: 0300                    |  registers_size: 0003
+00034e: 0100                    |  ins_size:       0001
+000350: 0200                    |  outs_size:      0002
+000352: 0000                    |  tries_size:     0000
+000354: ff05 0000               |  debug_off:      000005ff
+000358: 0a00 0000               |  insns_size:     0000000a
+00035c: 2200 0200               |  0000: new-instance v0, Foo // type@0002
+000360: 7010 0100 0000          |  0002: invoke-direct {v0}, Foo.<init>:()V // method@0001
+000366: 1251                    |  0005: const/4 v1, #int 5 // #5
+000368: 6e20 0200 1000          |  0006: invoke-virtual {v0, v1}, Foo.bar:(I)V // method@0002
+00036e: 0e00                    |  0009: return-void
+                                |  debug info
+                                |    line_start: 31
+                                |    parameters_size: 0001
+                                |    parameter args v2
+                                |    0000: prologue end
+                                |    0000: line 31
+                                |    0009: line 32
+                                |    end sequence
+                                |
+                                |[370] annotations directory
+000370: b002 0000               |  class_annotations_off: 000002b0
+000374: 0000 0000               |  fields_size:           00000000
+000378: 0100 0000               |  methods_size:          00000001
+00037c: 0000 0000               |  parameters_size:       00000000
+                                |  methods:
+                                |    Consumer.accept:(Ljava/lang/Object;)V
+000380: 0000 0000               |      method_idx:      00000000
+000384: b802 0000               |      annotations_off: 000002b8
+                                |
+                                |[388] type_list
+000388: 0200 0000               |  size: 00000002
+00038c: 0200                    |  0002 // Foo
+00038e: 0000                    |  0000 // int
+                                |
+                                |[390] type_list
+000390: 0100 0000               |  size: 00000001
+000394: 0000                    |  0000 // int
+                                |
+000396: 0000                    |
+                                |[398] type_list
+000398: 0600 0000               |  size: 00000006
+00039c: 0d00                    |  000d // java.lang.invoke.MethodHandles$Lookup
+00039e: 0800                    |  0008 // java.lang.String
+0003a0: 0e00                    |  000e // java.lang.invoke.MethodType
+0003a2: 0e00                    |  000e // java.lang.invoke.MethodType
+0003a4: 0c00                    |  000c // java.lang.invoke.MethodHandle
+0003a6: 0e00                    |  000e // java.lang.invoke.MethodType
+                                |
+                                |[3a8] type_list
+0003a8: 0200 0000               |  size: 00000002
+0003ac: 0000                    |  0000 // int
+0003ae: 0700                    |  0007 // java.lang.Object
+                                |
+                                |[3b0] type_list
+0003b0: 0100 0000               |  size: 00000001
+0003b4: 0700                    |  0007 // java.lang.Object
+                                |
+0003b6: 0000                    |
+                                |[3b8] type_list
+0003b8: 0100 0000               |  size: 00000001
+0003bc: 1000                    |  0010 // java.lang.String[]
+                                |
+                                |string_data:
+0003be: 06                      |utf16_size: 00000006
+0003bf: 2854 543b 2956 00       |"(TT;)V"
+                                |
+0003c6: 03                      |utf16_size: 00000003
+0003c7: 3c54 3a00               |"<T:"
+                                |
+0003cb: 06                      |utf16_size: 00000006
+0003cc: 3c69 6e69 743e 00       |"<init>"
+                                |
+0003d3: 01                      |utf16_size: 00000001
+0003d4: 3e00                    |">"
+                                |
+0003d6: 01                      |utf16_size: 00000001
+0003d7: 4900                    |"I"
+                                |
+0003d9: 0a                      |utf16_size: 0000000a
+0003da: 4c43 6f6e 7375 6d65 723b|"LConsumer;"
+0003e4: 00                      |
+                                |
+0003e5: 05                      |utf16_size: 00000005
+0003e6: 4c46 6f6f 3b00          |"LFoo;"
+                                |
+0003ec: 02                      |utf16_size: 00000002
+0003ed: 4c49 00                 |"LI"
+                                |
+0003f0: 03                      |utf16_size: 00000003
+0003f1: 4c4c 4900               |"LLI"
+                                |
+0003f5: 07                      |utf16_size: 00000007
+0003f6: 4c4c 4c4c 4c4c 4c00     |"LLLLLLL"
+                                |
+0003fe: 06                      |utf16_size: 00000006
+0003ff: 4c4d 6169 6e3b 00       |"LMain;"
+                                |
+000406: 1d                      |utf16_size: 0000001d
+000407: 4c64 616c 7669 6b2f 616e|"Ldalvik/annotation/Signature;"
+000411: 6e6f 7461 7469 6f6e 2f53|
+00041b: 6967 6e61 7475 7265 3b00|
+                                |
+000425: 15                      |utf16_size: 00000015
+000426: 4c6a 6176 612f 696f 2f50|"Ljava/io/PrintStream;"
+000430: 7269 6e74 5374 7265 616d|
+00043a: 3b00                    |
+                                |
+00043c: 13                      |utf16_size: 00000013
+00043d: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/Integer;"
+000447: 2f49 6e74 6567 6572 3b00|
+                                |
+000451: 12                      |utf16_size: 00000012
+000452: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/Object;"
+00045c: 2f4f 626a 6563 743b 00  |
+                                |
+000465: 12                      |utf16_size: 00000012
+000466: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/String;"
+000470: 2f53 7472 696e 673b 00  |
+                                |
+000479: 12                      |utf16_size: 00000012
+00047a: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/System;"
+000484: 2f53 7973 7465 6d3b 00  |
+                                |
+00048d: 1b                      |utf16_size: 0000001b
+00048e: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/CallSite;"
+000498: 2f69 6e76 6f6b 652f 4361|
+0004a2: 6c6c 5369 7465 3b00     |
+                                |
+0004aa: 24                      |utf16_size: 00000024
+0004ab: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/LambdaMetafactory;"
+0004b5: 2f69 6e76 6f6b 652f 4c61|
+0004bf: 6d62 6461 4d65 7461 6661|
+0004c9: 6374 6f72 793b 00       |
+                                |
+0004d0: 1f                      |utf16_size: 0000001f
+0004d1: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/MethodHandle;"
+0004db: 2f69 6e76 6f6b 652f 4d65|
+0004e5: 7468 6f64 4861 6e64 6c65|
+0004ef: 3b00                    |
+                                |
+0004f1: 27                      |utf16_size: 00000027
+0004f2: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/MethodHandles$Lookup;"
+0004fc: 2f69 6e76 6f6b 652f 4d65|
+000506: 7468 6f64 4861 6e64 6c65|
+000510: 7324 4c6f 6f6b 7570 3b00|
+                                |
+00051a: 1d                      |utf16_size: 0000001d
+00051b: 4c6a 6176 612f 6c61 6e67|"Ljava/lang/invoke/MethodType;"
+000525: 2f69 6e76 6f6b 652f 4d65|
+00052f: 7468 6f64 5479 7065 3b00|
+                                |
+000539: 09                      |utf16_size: 00000009
+00053a: 4d61 696e 2e6a 6176 6100|"Main.java"
+                                |
+000544: 01                      |utf16_size: 00000001
+000545: 5600                    |"V"
+                                |
+000547: 02                      |utf16_size: 00000002
+000548: 5649 00                 |"VI"
+                                |
+00054b: 03                      |utf16_size: 00000003
+00054c: 5649 4c00               |"VIL"
+                                |
+000550: 02                      |utf16_size: 00000002
+000551: 564c 00                 |"VL"
+                                |
+000554: 13                      |utf16_size: 00000013
+000555: 5b4c 6a61 7661 2f6c 616e|"[Ljava/lang/String;"
+00055f: 672f 5374 7269 6e67 3b00|
+                                |
+000569: 06                      |utf16_size: 00000006
+00056a: 6163 6365 7074 00       |"accept"
+                                |
+000571: 04                      |utf16_size: 00000004
+000572: 6172 6773 00            |"args"
+                                |
+000577: 03                      |utf16_size: 00000003
+000578: 6261 7200               |"bar"
+                                |
+00057c: 08                      |utf16_size: 00000008
+00057d: 636f 6e73 756d 6572 00  |"consumer"
+                                |
+000586: 01                      |utf16_size: 00000001
+000587: 6900                    |"i"
+                                |
+000589: 08                      |utf16_size: 00000008
+00058a: 696e 7456 616c 7565 00  |"intValue"
+                                |
+000593: 01                      |utf16_size: 00000001
+000594: 6a00                    |"j"
+                                |
+000596: 01                      |utf16_size: 00000001
+000597: 6b00                    |"k"
+                                |
+000599: 0c                      |utf16_size: 0000000c
+00059a: 6c61 6d62 6461 2462 6172|"lambda$bar$0"
+0005a4: 2430 00                 |
+                                |
+0005a7: 04                      |utf16_size: 00000004
+0005a8: 6d61 696e 00            |"main"
+                                |
+0005ad: 0b                      |utf16_size: 0000000b
+0005ae: 6d65 7461 6661 6374 6f72|"metafactory"
+0005b8: 7900                    |
+                                |
+0005ba: 03                      |utf16_size: 00000003
+0005bb: 6f75 7400               |"out"
+                                |
+0005bf: 07                      |utf16_size: 00000007
+0005c0: 7072 696e 746c 6e00     |"println"
+                                |
+0005c8: 04                      |utf16_size: 00000004
+0005c9: 7468 6973 00            |"this"
+                                |
+0005ce: 05                      |utf16_size: 00000005
+0005cf: 7661 6c75 6500          |"value"
+                                |
+0005d5: 07                      |utf16_size: 00000007
+0005d6: 7661 6c75 654f 6600     |"valueOf"
+                                |
+                                |byte_data:
+                                |[5de] debug info
+0005de: 15                      |line_start: 21
+0005df: 00                      |parameters_size: 0000
+0005e0: 07                      |0000: prologue end
+0005e1: 0e                      |0000: line 21
+0005e2: 00                      |end sequence
+                                |
+                                |[5e3] debug info
+0005e3: 18                      |line_start: 24
+0005e4: 02                      |parameters_size: 0002
+0005e5: 23                      |parameter j v4
+0005e6: 24                      |parameter k v5
+0005e7: 07                      |0000: prologue end
+0005e8: 0e                      |0000: line 24
+0005e9: 0107                    |0007: advance pc
+0005eb: 0505                    |0007: -local v5 k java.lang.Object
+0005ed: 00                      |end sequence
+                                |
+                                |[5ee] debug info
+0005ee: 18                      |line_start: 24
+0005ef: 01                      |parameters_size: 0001
+0005f0: 23                      |parameter j v3
+0005f1: 07                      |0000: prologue end
+0005f2: 0e                      |0000: line 24
+0005f3: 4b                      |0004: line 25
+0005f4: 0300 2002               |0004: +local v0 consumer Consumer
+0005f8: 87                      |000c: line 26
+0005f9: 00                      |end sequence
+                                |
+                                |[5fa] debug info
+0005fa: 1d                      |line_start: 29
+0005fb: 00                      |parameters_size: 0000
+0005fc: 07                      |0000: prologue end
+0005fd: 0e                      |0000: line 29
+0005fe: 00                      |end sequence
+                                |
+                                |[5ff] debug info
+0005ff: 1f                      |line_start: 31
+000600: 01                      |parameters_size: 0001
+000601: 1e                      |parameter args v2
+000602: 07                      |0000: prologue end
+000603: 0e                      |0000: line 31
+000604: 96                      |0009: line 32
+000605: 00                      |end sequence
+                                |
+                                |[606] annotation
+000606: 02                      |  visibility: VISBILITY_SYSTEM
+000607: 04                      |  type_idx: 00000004 // dalvik.annotation.Signature
+000608: 01                      |  size: 00000001
+                                |  elements[0]:
+000609: 2a                      |    name_idx: 0000002a // value
+00060a: 1c04 1701 170e 1703 170e|    value: array {<T:, Ljava/lang/Object;, >, Ljava/lang/Object;}
+                                |
+                                |[614] annotation
+000614: 02                      |  visibility: VISBILITY_SYSTEM
+000615: 04                      |  type_idx: 00000004 // dalvik.annotation.Signature
+000616: 01                      |  size: 00000001
+                                |  elements[0]:
+000617: 2a                      |    name_idx: 0000002a // value
+000618: 1c01 1700               |    value: array {(TT;)V}
+                                |
+                                |[61c] call site
+00061c: 06                      |  size: 00000006
+00061d: 1600                    |  [0] method handle invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}
+00061f: 171c                    |  [1] utf8 accept
+000621: 1501                    |  [2] proto (LFoo;I)LConsumer;
+000623: 1507                    |  [3] proto (Ljava/lang/Object;)V
+000625: 1601                    |  [4] method handle invoke-direct,method{Foo.lambda$bar$0:(ILjava/lang/Object;)V}
+000627: 1507                    |  [5] proto (Ljava/lang/Object;)V
+                                |
+                                |[629] class data for Consumer
+000629: 00                      |  static_fields_size:   00000000
+00062a: 00                      |  instance_fields_size: 00000000
+00062b: 00                      |  direct_methods_size:  00000000
+00062c: 01                      |  virtual_methods_size: 00000001
+                                |  virtual_methods:
+                                |  [0] Consumer.accept:(Ljava/lang/Object;)V
+00062d: 00                      |    method_idx:   00000000
+00062e: 8108                    |    access_flags: public|abstract
+000630: 00                      |    code_off:     00000000
+                                |
+                                |[631] class data for Foo
+000631: 00                      |  static_fields_size:   00000000
+000632: 01                      |  instance_fields_size: 00000001
+000633: 02                      |  direct_methods_size:  00000002
+000634: 01                      |  virtual_methods_size: 00000001
+                                |  instance_fields:
+                                |  [0] Foo.i:I
+000635: 00                      |    field_idx:    00000000
+000636: 00                      |    access_flags: 0000
+                                |  direct_methods:
+                                |  [0] Foo.<init>:()V
+000637: 01                      |    method_idx:   00000001
+000638: 8080 04                 |    access_flags: constructor
+00063b: c005                    |    code_off:     000002c0
+                                |  [1] Foo.lambda$bar$0:(ILjava/lang/Object;)V
+00063d: 02                      |    method_idx:   00000003
+00063e: 8220                    |    access_flags: private|synthetic
+000640: d805                    |    code_off:     000002d8
+                                |  virtual_methods:
+                                |  [0] Foo.bar:(I)V
+000642: 02                      |    method_idx:   00000002
+000643: 00                      |    access_flags: 0000
+000644: 8806                    |    code_off:     00000308
+                                |
+                                |[646] class data for Main
+000646: 00                      |  static_fields_size:   00000000
+000647: 00                      |  instance_fields_size: 00000000
+000648: 02                      |  direct_methods_size:  00000002
+000649: 00                      |  virtual_methods_size: 00000000
+                                |  direct_methods:
+                                |  [0] Main.<init>:()V
+00064a: 04                      |    method_idx:   00000004
+00064b: 8080 04                 |    access_flags: constructor
+00064e: b406                    |    code_off:     00000334
+                                |  [1] Main.main:([Ljava/lang/String;)V
+000650: 01                      |    method_idx:   00000005
+000651: 09                      |    access_flags: public|static
+000652: cc06                    |    code_off:     0000034c
+                                |
+                                |map:
+                                |[654] map list
+000654: 1300 0000               |  size: 00000013
+                                |[658] header_item map
+000658: 0000                    |  type:   0000 // TYPE_HEADER_ITEM
+00065a: 0000                    |  unused: 0
+00065c: 0100 0000               |  size:   00000001
+000660: 0000 0000               |  offset: 00000000
+                                |[664] string_id_item map
+000664: 0100                    |  type:   0001 // TYPE_STRING_ID_ITEM
+000666: 0000                    |  unused: 0
+000668: 2c00 0000               |  size:   0000002c
+00066c: 7000 0000               |  offset: 00000070
+                                |[670] type_id_item map
+000670: 0200                    |  type:   0002 // TYPE_TYPE_ID_ITEM
+000672: 0000                    |  unused: 0
+000674: 1100 0000               |  size:   00000011
+000678: 2001 0000               |  offset: 00000120
+                                |[67c] proto_id_item map
+00067c: 0300                    |  type:   0003 // TYPE_PROTO_ID_ITEM
+00067e: 0000                    |  unused: 0
+000680: 0900 0000               |  size:   00000009
+000684: 6401 0000               |  offset: 00000164
+                                |[688] field_id_item map
+000688: 0400                    |  type:   0004 // TYPE_FIELD_ID_ITEM
+00068a: 0000                    |  unused: 0
+00068c: 0200 0000               |  size:   00000002
+000690: d001 0000               |  offset: 000001d0
+                                |[694] method_id_item map
+000694: 0500                    |  type:   0005 // TYPE_METHOD_ID_ITEM
+000696: 0000                    |  unused: 0
+000698: 0b00 0000               |  size:   0000000b
+00069c: e001 0000               |  offset: 000001e0
+                                |[6a0] class_def_item map
+0006a0: 0600                    |  type:   0006 // TYPE_CLASS_DEF_ITEM
+0006a2: 0000                    |  unused: 0
+0006a4: 0300 0000               |  size:   00000003
+0006a8: 3802 0000               |  offset: 00000238
+                                |[6ac] call_site_id_item map
+0006ac: 0700                    |  type:   0007 // TYPE_CALL_SITE_ID_ITEM
+0006ae: 0000                    |  unused: 0
+0006b0: 0100 0000               |  size:   00000001
+0006b4: 9802 0000               |  offset: 00000298
+                                |[6b8] method_handle_item map
+0006b8: 0800                    |  type:   0008 // TYPE_METHOD_HANDLE_ITEM
+0006ba: 0000                    |  unused: 0
+0006bc: 0200 0000               |  size:   00000002
+0006c0: a002 0000               |  offset: 000002a0
+                                |[6c4] annotation_set_item map
+0006c4: 0310                    |  type:   1003 // TYPE_ANNOTATION_SET_ITEM
+0006c6: 0000                    |  unused: 0
+0006c8: 0200 0000               |  size:   00000002
+0006cc: b002 0000               |  offset: 000002b0
+                                |[6d0] code_item map
+0006d0: 0120                    |  type:   2001 // TYPE_CODE_ITEM
+0006d2: 0000                    |  unused: 0
+0006d4: 0500 0000               |  size:   00000005
+0006d8: c002 0000               |  offset: 000002c0
+                                |[6dc] annotations_directory_item map
+0006dc: 0620                    |  type:   2006 // TYPE_ANNOTATIONS_DIRECTORY_ITEM
+0006de: 0000                    |  unused: 0
+0006e0: 0100 0000               |  size:   00000001
+0006e4: 7003 0000               |  offset: 00000370
+                                |[6e8] type_list map
+0006e8: 0110                    |  type:   1001 // TYPE_TYPE_LIST
+0006ea: 0000                    |  unused: 0
+0006ec: 0600 0000               |  size:   00000006
+0006f0: 8803 0000               |  offset: 00000388
+                                |[6f4] string_data_item map
+0006f4: 0220                    |  type:   2002 // TYPE_STRING_DATA_ITEM
+0006f6: 0000                    |  unused: 0
+0006f8: 2c00 0000               |  size:   0000002c
+0006fc: be03 0000               |  offset: 000003be
+                                |[700] debug_info_item map
+000700: 0320                    |  type:   2003 // TYPE_DEBUG_INFO_ITEM
+000702: 0000                    |  unused: 0
+000704: 0500 0000               |  size:   00000005
+000708: de05 0000               |  offset: 000005de
+                                |[70c] annotation_item map
+00070c: 0420                    |  type:   2004 // TYPE_ANNOTATION_ITEM
+00070e: 0000                    |  unused: 0
+000710: 0200 0000               |  size:   00000002
+000714: 0606 0000               |  offset: 00000606
+                                |[718] encoded_array_item map
+000718: 0520                    |  type:   2005 // TYPE_ENCODED_ARRAY_ITEM
+00071a: 0000                    |  unused: 0
+00071c: 0100 0000               |  size:   00000001
+000720: 1c06 0000               |  offset: 0000061c
+                                |[724] class_data_item map
+000724: 0020                    |  type:   2000 // TYPE_CLASS_DATA_ITEM
+000726: 0000                    |  unused: 0
+000728: 0300 0000               |  size:   00000003
+00072c: 2906 0000               |  offset: 00000629
+                                |[730] map_list map
+000730: 0010                    |  type:   1000 // TYPE_MAP_LIST
+000732: 0000                    |  unused: 0
+000734: 0100 0000               |  size:   00000001
+000738: 5406 0000               |  offset: 00000654
+                                |
+                                |method code index:
+                                |
+                                |[2c0] Foo.<init>:()V
+                                |[308] Foo.bar:(I)V
+                                |[2d8] Foo.lambda$bar$0:(ILjava/lang/Object;)V
+                                |[334] Main.<init>:()V
+                                |[34c] Main.main:([Ljava/lang/String;)V
+                                |
+                                |statistics:
+                                |  annotation: 2 items; 22 bytes total
+                                |    8..14 bytes/item; average 11
+                                |  annotation set: 2 items; 16 bytes total
+                                |    8 bytes/item
+                                |  annotations directory: 1 item; 24 bytes total
+                                |    24 bytes/item
+                                |  call site id: 1 item; 4 bytes total
+                                |    4 bytes/item
+                                |  class data: 3 items; 43 bytes total
+                                |    8..21 bytes/item; average 14
+                                |  class def: 3 items; 96 bytes total
+                                |    32 bytes/item
+                                |  code: 5 items; 176 bytes total
+                                |    24..48 bytes/item; average 35
+                                |  debug info: 5 items; 40 bytes total
+                                |    5..12 bytes/item; average 8
+                                |  encoded array: 1 item; 13 bytes total
+                                |    13 bytes/item
+                                |  field id: 2 items; 16 bytes total
+                                |    8 bytes/item
+                                |  header: 1 item; 112 bytes total
+                                |    112 bytes/item
+                                |  map list: 1 item; 232 bytes total
+                                |    232 bytes/item
+                                |  method handle: 2 items; 16 bytes total
+                                |    8 bytes/item
+                                |  method id: 11 items; 88 bytes total
+                                |    8 bytes/item
+                                |  proto id: 9 items; 108 bytes total
+                                |    12 bytes/item
+                                |  string data: 44 items; 544 bytes total
+                                |    3..41 bytes/item; average 12
+                                |  string id: 44 items; 176 bytes total
+                                |    4 bytes/item
+                                |  type id: 17 items; 68 bytes total
+                                |    4 bytes/item
+                                |  type list: 6 items; 50 bytes total
+                                |    6..16 bytes/item; average 8
diff --git a/dx/tests/139-lambda-metafactory/info.txt b/dx/tests/139-lambda-metafactory/info.txt
new file mode 100644
index 0000000..5768a8e
--- /dev/null
+++ b/dx/tests/139-lambda-metafactory/info.txt
@@ -0,0 +1 @@
+Tests lambda metafactory constructs are convertible to DEX (b/63112734).
diff --git a/dx/tests/139-lambda-metafactory/run b/dx/tests/139-lambda-metafactory/run
new file mode 100755
index 0000000..faa2819
--- /dev/null
+++ b/dx/tests/139-lambda-metafactory/run
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+SDK_VERSION=26
+
+dx --debug --dex --min-sdk-version=${SDK_VERSION} --output="classes.dex" \
+   --dump-width=1000 --dump-to=- *.class 2>&1
diff --git a/dx/tests/140-ssa-phi-overlap/Test$1.class b/dx/tests/140-ssa-phi-overlap/Test$1.class
new file mode 100644
index 0000000..5c83f5a
Binary files /dev/null and b/dx/tests/140-ssa-phi-overlap/Test$1.class differ
diff --git a/dx/tests/140-ssa-phi-overlap/Test$A.class b/dx/tests/140-ssa-phi-overlap/Test$A.class
new file mode 100644
index 0000000..5dfafb0
Binary files /dev/null and b/dx/tests/140-ssa-phi-overlap/Test$A.class differ
diff --git a/dx/tests/140-ssa-phi-overlap/Test$B.class b/dx/tests/140-ssa-phi-overlap/Test$B.class
new file mode 100644
index 0000000..54ea6d5
Binary files /dev/null and b/dx/tests/140-ssa-phi-overlap/Test$B.class differ
diff --git a/dx/tests/140-ssa-phi-overlap/Test$C.class b/dx/tests/140-ssa-phi-overlap/Test$C.class
new file mode 100644
index 0000000..c01698f
Binary files /dev/null and b/dx/tests/140-ssa-phi-overlap/Test$C.class differ
diff --git a/dx/tests/140-ssa-phi-overlap/Test$X.class b/dx/tests/140-ssa-phi-overlap/Test$X.class
new file mode 100644
index 0000000..02dc9f4
Binary files /dev/null and b/dx/tests/140-ssa-phi-overlap/Test$X.class differ
diff --git a/dx/tests/140-ssa-phi-overlap/Test.class b/dx/tests/140-ssa-phi-overlap/Test.class
new file mode 100644
index 0000000..b829e6f
Binary files /dev/null and b/dx/tests/140-ssa-phi-overlap/Test.class differ
diff --git a/dx/tests/140-ssa-phi-overlap/Test.java b/dx/tests/140-ssa-phi-overlap/Test.java
new file mode 100644
index 0000000..9d599ed
--- /dev/null
+++ b/dx/tests/140-ssa-phi-overlap/Test.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+/**
+ * AOSP JFuzz Tester.
+ * Automatically generated program.
+ * jfuzz -s 3674365851 -d 1 -l 8 -i 2 -n 3 (version 1.3)
+ */
+
+import java.util.Arrays;
+
+@SuppressWarnings("deprecation")
+public class Test {
+
+  private interface X {
+    int x();
+  }
+
+  private class A {
+    public int a() {
+      return (mI--);
+    }
+  }
+
+  private class B extends A implements X {
+    public int a() {
+      return super.a() + ((235022827 >> mI) & 574409782);
+    }
+    public int x() {
+      return ((mZ) ? mI : ((Math.addExact(852067216, 246625693)) % mI));
+    }
+  }
+
+  private static class C implements X {
+    public static int s() {
+      return 1878004320;
+    }
+    public int c() {
+      return -618864356;
+    }
+    public int x() {
+      return -556993081;
+    }
+  }
+
+  private A mA  = new B();
+  private B mB  = new B();
+  private X mBX = new B();
+  private C mC  = new C();
+  private X mCX = new C();
+
+  private boolean mZ = false;
+  private int     mI = 0;
+  private long    mJ = 0;
+  private float   mF = 0;
+  private double  mD = 0;
+
+  private float[][][][][][][] mArray = new float[2][2][2][2][2][2][2];
+
+  private Test() {
+    float a = -774156645.0f;
+    for (int i0 = 0; i0 < 2; i0++) {
+      for (int i1 = 0; i1 < 2; i1++) {
+        for (int i2 = 0; i2 < 2; i2++) {
+          for (int i3 = 0; i3 < 2; i3++) {
+            for (int i4 = 0; i4 < 2; i4++) {
+              for (int i5 = 0; i5 < 2; i5++) {
+                for (int i6 = 0; i6 < 2; i6++) {
+                  mArray[i0][i1][i2][i3][i4][i5][i6] = a;
+                  a++;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  private float testMethod() {
+    {
+      long lJ0 = (Long.MIN_VALUE);
+      if (((boolean) new Boolean(mZ))) {
+        lJ0 |= ((-609721394L | -601487228L) + (--mJ));
+        for (int i0 = mArray.length - 1; i0 >= 0; i0--) {
+          mF = ((float) new Float(921021787.0f));
+          mZ ^= ((mZ ? (mZ) : (Boolean.logicalXor((Boolean.logicalAnd(mZ, mZ)), mZ))) ^ true);
+          for (int i1 = 2 - 1; i1 >= 0; i1--) {
+            {
+              int i2 = -1;              while (++i2 < mArray.length) {
+                mI = ((int) new Integer(((int) mD)));
+                mI <<= (mI++);
+                mZ = ((boolean) new Boolean(true));
+                mJ >>= (- (~ (lJ0++)));
+              }
+            }
+          }
+          mI >>= (Integer.MIN_VALUE);
+        }
+        mD *= (mC.x());
+        mI *= (Math.multiplyExact(61363273, (-1448306837 | mI)));
+      } else {
+        mZ = (mZ);
+        for (int i0 = 0; i0 < 2; i0++) {
+          for (int i1 = 2 - 1; i1 >= 0; i1--) {
+            mArray[i0][i1][mArray.length - 1][i0][i1][1][i1] *= ((! mZ) ? -1041059197.0f : (mF / -1370212878.0f));
+            lJ0 += (~ mJ);
+            for (int i2 = 2 - 1; i2 >= 0; i2--) {
+              {
+                int i3 = -1;                while (++i3 < 2) {
+                  return ((mZ) ? ((float) new Float((--mF))) : (++mF));
+                }
+              }
+              mI = (--mI);
+            }
+            mJ &= (--lJ0);
+          }
+          if (((mZ) ^ false)) {
+            mI >>>= (mC.c());
+          } else {
+            if (((+ (Long.reverseBytes(mJ))) >= 1517367973L)) {
+              mI <<= (mI--);
+            } else {
+              {
+                int i1 = 0;                do {
+                  mZ |= (true && true);
+                  if ((Boolean.logicalAnd(mZ, (! true)))) {
+                    mI %= ((mI ^ mI) ^ mI);
+                  } else {
+                    mI = (mI << mI);
+                  }
+                } while (++i1 < 2);
+              }
+            }
+          }
+        }
+        switch (mArray.length - 1) {
+          case 1: {
+            mF *= (-1336843462.0f - ((804606312.0f * 1709271074.0f) - (Float.MIN_NORMAL)));
+            break;
+          }
+          default: {
+            mF /= (mF--);
+            break;
+          }
+        }
+      }
+      lJ0 >>>= (lJ0 | mJ);
+    }
+    mJ %= ( (-1288553765 ^ mI));
+    return (--mArray[1][0][1][1][0][1][0]);
+  }
+
+  public static void main(String[] args) {
+    Test t = new Test();
+    float r = -985685074.0f;
+    try {
+      r = t.testMethod();
+    } catch (Exception e) {
+      // Arithmetic, null pointer, index out of bounds, etc.
+      System.out.println("An exception was caught.");
+    }
+    System.out.println("r  = " + r);
+    System.out.println("mZ = " + t.mZ);
+    System.out.println("mI = " + t.mI);
+    System.out.println("mJ = " + t.mJ);
+    System.out.println("mF = " + t.mF);
+    System.out.println("mD = " + t.mD);
+    System.out.println("mArray = " + Arrays.deepToString(t.mArray));
+  }
+}
+
diff --git a/dx/tests/140-ssa-phi-overlap/build b/dx/tests/140-ssa-phi-overlap/build
new file mode 100644
index 0000000..8862395
--- /dev/null
+++ b/dx/tests/140-ssa-phi-overlap/build
@@ -0,0 +1,21 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+JAVAC_SOURCE=1.8
+JAVAC_TARGET=1.8
+JAVAC_FLAGS="-source ${JAVAC_SOURCE} -target ${JAVAC_TARGET}"
+
+${JAVAC} ${JAVAC_FLAGS} Test.java
diff --git a/dx/tests/140-ssa-phi-overlap/expected.txt b/dx/tests/140-ssa-phi-overlap/expected.txt
new file mode 100644
index 0000000..23c775c
--- /dev/null
+++ b/dx/tests/140-ssa-phi-overlap/expected.txt
@@ -0,0 +1,7 @@
+r  = 1.0
+mZ = false
+mI = 0
+mJ = 0
+mF = 1.0
+mD = 0.0
+mArray = [[[[[[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]], [[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]]], [[[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]], [[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]]]], [[[[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]], [[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]]], [[[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, 8.0594292E17]]], [[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]]]]], [[[[[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]], [[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]]], [[[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]], [[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]]]], [[[[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]], [[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]]], [[[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]], [[[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]], [[-7.7415667E8, -7.7415667E8], [-7.7415667E8, -7.7415667E8]]]]]]]
diff --git a/dx/tests/140-ssa-phi-overlap/info.txt b/dx/tests/140-ssa-phi-overlap/info.txt
new file mode 100644
index 0000000..3021f51
--- /dev/null
+++ b/dx/tests/140-ssa-phi-overlap/info.txt
@@ -0,0 +1,4 @@
+This test comes from jfuzz (b/63722269). The SSA optimizer was failing
+to identify interference between source and result registers for phi
+functions in the same basic block and generate a dex file with
+conflicting moves which was rejected by ART.
diff --git a/dx/tests/140-ssa-phi-overlap/run b/dx/tests/140-ssa-phi-overlap/run
new file mode 100644
index 0000000..015570c
--- /dev/null
+++ b/dx/tests/140-ssa-phi-overlap/run
@@ -0,0 +1,32 @@
+#!/bin/bash
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+dx --dex --output=classes.dex *.class
+
+# Run the test with art. The original bug leading to this test
+# (b/63722269) would fail verification on art due to dx generating
+# bytecode that corrupted a register pair holding a long in
+# Test;.testMethod.
+art -classpath classes.dex Test 1>art.out.log 2>art.err.log
+if [[ $? != 0 ]]; then
+  # Only print stderr output from art if art fails to run test as
+  # stderr output is non-deterministic (timestamps, source line info).
+  cat art.err.log
+fi
+
+# Wrapper script will compare output from test execution with
+# expected.txt.
+cat art.out.log
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.class b/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.class
new file mode 100644
index 0000000..f65495e
Binary files /dev/null and b/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.class differ
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.java b/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.java
new file mode 100644
index 0000000..577531d
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
+import java.lang.invoke.VarHandle;
+
+public class VarHandleDexTest {
+
+    // A static field to access.
+    private static boolean bsValue = false;
+
+    // An instance field to access.
+    private Float fValue = Float.valueOf(99.9f);
+
+    public static void main(String[] args) throws Throwable {
+        // This code is entirely nonsense. It is just to exercise
+        // signature polymorphic methods in dx.
+        VarHandleDexTest t = new VarHandleDexTest();
+        {
+            VarHandle vb = MethodHandles.lookup().findStaticVarHandle(t.getClass(), "bsValue", boolean.class);
+            boolean newValue = true;
+            boolean expectedValue = false;
+
+            boolean b0 = (boolean) vb.compareAndExchangeAcquire(t, expectedValue, newValue);
+            vb.compareAndExchangeAcquire(t, expectedValue, newValue);
+            boolean b1 = (boolean) vb.compareAndExchange(t, expectedValue, newValue);
+            vb.compareAndExchange(t, expectedValue, newValue);
+            boolean b2 = (boolean) vb.compareAndExchangeRelease(t, expectedValue, newValue);
+            vb.compareAndExchangeRelease(t, expectedValue, newValue);
+
+            boolean r0 = vb.compareAndSet(t, expectedValue, newValue);
+            vb.compareAndSet(t, expectedValue, newValue);
+            boolean r1 = vb.weakCompareAndSetAcquire(t, expectedValue, newValue);
+            vb.weakCompareAndSetAcquire(t, expectedValue, newValue);
+            boolean r2 = vb.weakCompareAndSet(t, expectedValue, newValue);
+            vb.weakCompareAndSet(t, expectedValue, newValue);
+            boolean r3 = vb.weakCompareAndSetPlain(t, expectedValue, newValue);
+            vb.weakCompareAndSetPlain(t, expectedValue, newValue);
+            boolean r4 = vb.weakCompareAndSetRelease(t, expectedValue, newValue);
+            vb.weakCompareAndSetRelease(t, expectedValue, newValue);
+
+            boolean b3 = (boolean) vb.getAndAddAcquire(t, expectedValue, newValue);
+            vb.getAndAddAcquire(t, expectedValue, newValue);
+            boolean b4 = (boolean) vb.getAndAdd(t, expectedValue, newValue);
+            vb.getAndAdd(t, expectedValue, newValue);
+            boolean b5 = (boolean) vb.getAndAddRelease(t, expectedValue, newValue);
+            vb.getAndAddRelease(t, expectedValue, newValue);
+            boolean b6 = (boolean) vb.getAndBitwiseAndAcquire(t, expectedValue, newValue);
+            vb.getAndBitwiseAndAcquire(t, expectedValue, newValue);
+            boolean b7 = (boolean) vb.getAndBitwiseAnd(t, expectedValue, newValue);
+            vb.getAndBitwiseAnd(t, expectedValue, newValue);
+            boolean b8 = (boolean) vb.getAndBitwiseAndRelease(t, expectedValue, newValue);
+            vb.getAndBitwiseAndRelease(t, expectedValue, newValue);
+            boolean b9 = (boolean) vb.getAndBitwiseOrAcquire(t, expectedValue, newValue);
+            vb.getAndBitwiseOrAcquire(t, expectedValue, newValue);
+            boolean b10 = (boolean) vb.getAndBitwiseOr(t, expectedValue, newValue);
+            vb.getAndBitwiseOr(t, expectedValue, newValue);
+            boolean b11 = (boolean) vb.getAndBitwiseOrRelease(t, expectedValue, newValue);
+            vb.getAndBitwiseOrRelease(t, expectedValue, newValue);
+            boolean b12 = (boolean) vb.getAndBitwiseXorAcquire(t, expectedValue, newValue);
+            vb.getAndBitwiseXorAcquire(t, expectedValue, newValue);
+            boolean b13 = (boolean) vb.getAndBitwiseXor(t, expectedValue, newValue);
+            vb.getAndBitwiseXor(t, expectedValue, newValue);
+            boolean b14 = (boolean) vb.getAndBitwiseXorRelease(t, expectedValue, newValue);
+            vb.getAndBitwiseXorRelease(t, expectedValue, newValue);
+
+            boolean b15 = (boolean) vb.getAndSetAcquire(t, newValue);
+            vb.getAndSetAcquire(t, newValue);
+            boolean b16 = (boolean) vb.getAndSet(t, newValue);
+            vb.getAndSet(t, newValue);
+            boolean b17 = (boolean) vb.getAndSetRelease(t, newValue);
+            vb.getAndSetRelease(t, newValue);
+
+            boolean b18 = (boolean) vb.get(t);
+            vb.get(t);
+            boolean b19 = (boolean) vb.getAcquire(t);
+            vb.getAcquire(t);
+            boolean b20 = (boolean) vb.getOpaque(t);
+            vb.getOpaque(t);
+            boolean b21 = (boolean) vb.getVolatile(t);
+            vb.getVolatile(t);
+
+            vb.set(t, newValue);
+            vb.setOpaque(t, newValue);
+            vb.setRelease(t, newValue);
+            vb.setVolatile(t, newValue);
+        }
+        {
+            VarHandle vf = MethodHandles.lookup().findStaticVarHandle(t.getClass(), "fValue", Float.class);
+            Float newValue = Float.valueOf(1.1f);
+            Float expectedValue = Float.valueOf(2.2e-6f);
+
+            Float f0 = (Float) vf.compareAndExchangeAcquire(t, expectedValue, newValue);
+            vf.compareAndExchangeAcquire(t, expectedValue, newValue);
+            Float f1 = (Float) vf.compareAndExchange(t, expectedValue, newValue);
+            vf.compareAndExchange(t, expectedValue, newValue);
+            Float f2 = (Float) vf.compareAndExchangeRelease(t, expectedValue, newValue);
+            vf.compareAndExchangeRelease(t, expectedValue, newValue);
+
+            boolean r0 = vf.compareAndSet(t, expectedValue, newValue);
+            vf.compareAndSet(t, expectedValue, newValue);
+            boolean r1 = vf.weakCompareAndSetAcquire(t, expectedValue, newValue);
+            vf.weakCompareAndSetAcquire(t, expectedValue, newValue);
+            boolean r2 = vf.weakCompareAndSet(t, expectedValue, newValue);
+            vf.weakCompareAndSet(t, expectedValue, newValue);
+            boolean r3 = vf.weakCompareAndSetPlain(t, expectedValue, newValue);
+            vf.weakCompareAndSetPlain(t, expectedValue, newValue);
+            boolean r4 = vf.weakCompareAndSetRelease(t, expectedValue, newValue);
+            vf.weakCompareAndSetRelease(t, expectedValue, newValue);
+
+            Float f3 = (Float) vf.getAndAddAcquire(t, expectedValue, newValue);
+            vf.getAndAddAcquire(t, expectedValue, newValue);
+            Float f4 = (Float) vf.getAndAdd(t, expectedValue, newValue);
+            vf.getAndAdd(t, expectedValue, newValue);
+            Float f5 = (Float) vf.getAndAddRelease(t, expectedValue, newValue);
+            vf.getAndAddRelease(t, expectedValue, newValue);
+            Float f6 = (Float) vf.getAndBitwiseAndAcquire(t, expectedValue, newValue);
+            vf.getAndBitwiseAndAcquire(t, expectedValue, newValue);
+            Float f7 = (Float) vf.getAndBitwiseAnd(t, expectedValue, newValue);
+            vf.getAndBitwiseAnd(t, expectedValue, newValue);
+            Float f8 = (Float) vf.getAndBitwiseAndRelease(t, expectedValue, newValue);
+            vf.getAndBitwiseAndRelease(t, expectedValue, newValue);
+            Float f9 = (Float) vf.getAndBitwiseOrAcquire(t, expectedValue, newValue);
+            vf.getAndBitwiseOrAcquire(t, expectedValue, newValue);
+            Float f10 = (Float) vf.getAndBitwiseOr(t, expectedValue, newValue);
+            vf.getAndBitwiseOr(t, expectedValue, newValue);
+            Float f11 = (Float) vf.getAndBitwiseOrRelease(t, expectedValue, newValue);
+            vf.getAndBitwiseOrRelease(t, expectedValue, newValue);
+            Float f12 = (Float) vf.getAndBitwiseXorAcquire(t, expectedValue, newValue);
+            vf.getAndBitwiseXorAcquire(t, expectedValue, newValue);
+            Float f13 = (Float) vf.getAndBitwiseXor(t, expectedValue, newValue);
+            vf.getAndBitwiseXor(t, expectedValue, newValue);
+            Float f14 = (Float) vf.getAndBitwiseXorRelease(t, expectedValue, newValue);
+            vf.getAndBitwiseXorRelease(t, expectedValue, newValue);
+
+            Float f15 = (Float) vf.getAndSetAcquire(t, newValue);
+            vf.getAndSetAcquire(t, newValue);
+            Float f16 = (Float) vf.getAndSet(t, newValue);
+            vf.getAndSet(t, newValue);
+            Float f17 = (Float) vf.getAndSetRelease(t, newValue);
+            vf.getAndSetRelease(t, newValue);
+
+            Float f18 = (Float) vf.get(t);
+            vf.get(t);
+            Float f19 = (Float) vf.getAcquire(t);
+            vf.getAcquire(t);
+            Float f20 = (Float) vf.getOpaque(t);
+            vf.getOpaque(t);
+            Float f21 = (Float) vf.getVolatile(t);
+            vf.getVolatile(t);
+
+            vf.set(t, newValue);
+            vf.setOpaque(t, newValue);
+            vf.setRelease(t, newValue);
+            vf.setVolatile(t, newValue);
+        }
+        {
+            String[] words = { "okay", "stevie", "bring", "your", "three", "friends", "up" };
+            VarHandle vw = MethodHandles.arrayElementVarHandle(words.getClass());
+            String newValue = "four";
+            String expectedValue = "three";
+            int index = 4;
+
+            String s0 = (String) vw.compareAndExchangeAcquire(words, index, expectedValue, newValue);
+            vw.compareAndExchangeAcquire(words, index, expectedValue, newValue);
+            String s1 = (String) vw.compareAndExchange(words, index, expectedValue, newValue);
+            vw.compareAndExchange(words, index, expectedValue, newValue);
+            String s2 = (String) vw.compareAndExchangeRelease(words, index, expectedValue, newValue);
+            vw.compareAndExchangeRelease(words, index, expectedValue, newValue);
+
+            boolean r0 = vw.compareAndSet(words, index, expectedValue, newValue);
+            vw.compareAndSet(words, index, expectedValue, newValue);
+            boolean r1 = vw.weakCompareAndSetAcquire(words, index, expectedValue, newValue);
+            vw.weakCompareAndSetAcquire(words, index, expectedValue, newValue);
+            boolean r2 = vw.weakCompareAndSet(words, index, expectedValue, newValue);
+            vw.weakCompareAndSet(words, index, expectedValue, newValue);
+            boolean r3 = vw.weakCompareAndSetPlain(words, index, expectedValue, newValue);
+            vw.weakCompareAndSetPlain(words, index, expectedValue, newValue);
+            boolean r4 = vw.weakCompareAndSetRelease(words, index, expectedValue, newValue);
+            vw.weakCompareAndSetRelease(words, index, expectedValue, newValue);
+
+            String s3 = (String) vw.getAndAddAcquire(words, index, expectedValue, newValue);
+            vw.getAndAddAcquire(words, index, expectedValue, newValue);
+            String s4 = (String) vw.getAndAdd(words, index, expectedValue, newValue);
+            vw.getAndAdd(words, index, expectedValue, newValue);
+            String s5 = (String) vw.getAndAddRelease(words, index, expectedValue, newValue);
+            vw.getAndAddRelease(words, index, expectedValue, newValue);
+            String s6 = (String) vw.getAndBitwiseAndAcquire(words, index, expectedValue, newValue);
+            vw.getAndBitwiseAndAcquire(words, index, expectedValue, newValue);
+            String s7 = (String) vw.getAndBitwiseAnd(words, index, expectedValue, newValue);
+            vw.getAndBitwiseAnd(words, index, expectedValue, newValue);
+            String s8 = (String) vw.getAndBitwiseAndRelease(words, index, expectedValue, newValue);
+            vw.getAndBitwiseAndRelease(words, index, expectedValue, newValue);
+            String s9 = (String) vw.getAndBitwiseOrAcquire(words, index, expectedValue, newValue);
+            vw.getAndBitwiseOrAcquire(words, index, expectedValue, newValue);
+            String s10 = (String) vw.getAndBitwiseOr(words, index, expectedValue, newValue);
+            vw.getAndBitwiseOr(words, index, expectedValue, newValue);
+            String s11 = (String) vw.getAndBitwiseOrRelease(words, index, expectedValue, newValue);
+            vw.getAndBitwiseOrRelease(words, index, expectedValue, newValue);
+            String s12 = (String) vw.getAndBitwiseXorAcquire(words, index, expectedValue, newValue);
+            vw.getAndBitwiseXorAcquire(words, index, expectedValue, newValue);
+            String s13 = (String) vw.getAndBitwiseXor(words, index, expectedValue, newValue);
+            vw.getAndBitwiseXor(words, index, expectedValue, newValue);
+            String s14 = (String) vw.getAndBitwiseXorRelease(words, index, expectedValue, newValue);
+            vw.getAndBitwiseXorRelease(words, index, expectedValue, newValue);
+
+            String s15 = (String) vw.getAndSetAcquire(words, index, newValue);
+            vw.getAndSetAcquire(words, index, newValue);
+            String s16 = (String) vw.getAndSet(words, index, newValue);
+            vw.getAndSet(words, index, newValue);
+            String s17 = (String) vw.getAndSetRelease(words, index, newValue);
+            vw.getAndSetRelease(words, index, newValue);
+
+            String s18 = (String) vw.get(words, index);
+            vw.get(words, index);
+            String s19 = (String) vw.getAcquire(words, index);
+            vw.getAcquire(words, index);
+            String s20 = (String) vw.getOpaque(words, index);
+            vw.getOpaque(words, index);
+            String s21 = (String) vw.getVolatile(words, index);
+            vw.getVolatile(words, index);
+
+            vw.set(words, index, newValue);
+            vw.setOpaque(words, index, newValue);
+            vw.setRelease(words, index, newValue);
+            vw.setVolatile(words, index, newValue);
+        }
+    }
+}
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/build b/dx/tests/141-invoke-polymorphic-varhandles/build
new file mode 100644
index 0000000..5b5e11d
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/build
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+# Compilation requires Java 9 compiler.
+$JAVAC javac --release 9 -d . *.java
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/expected.txt b/dx/tests/141-invoke-polymorphic-varhandles/expected.txt
new file mode 100644
index 0000000..12d3a9e
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/expected.txt
@@ -0,0 +1,364 @@
+Trying SDK version 20 with invoke-polymorphic.
+com.android.dx.cf.code.SimException: ERROR in VarHandleDexTest.main:([Ljava/lang/String;)V: invoking a signature-polymorphic requires --min-sdk-version >= 26 (currently 20)
+java.lang.invoke.VarHandle proto(java.lang.Class)
+java.lang.invoke.VarHandle proto(java.lang.Class, java.lang.String, java.lang.Class)
+java.lang.invoke.VarHandle.compareAndExchange:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.compareAndExchange:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.compareAndExchange:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.compareAndExchange:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.compareAndSet:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.compareAndSet:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z
+java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+java.lang.invoke.VarHandle.get:(LVarHandleDexTest;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.get:([Ljava/lang/String;I)Ljava/lang/String;
+java.lang.invoke.VarHandle.get:(LVarHandleDexTest;)V
+java.lang.invoke.VarHandle.get:([Ljava/lang/String;I)V
+java.lang.invoke.VarHandle.get:(LVarHandleDexTest;)Z
+java.lang.invoke.VarHandle.getAcquire:(LVarHandleDexTest;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/String;I)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAcquire:(LVarHandleDexTest;)V
+java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/String;I)V
+java.lang.invoke.VarHandle.getAcquire:(LVarHandleDexTest;)Z
+java.lang.invoke.VarHandle.getAndAdd:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndAdd:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndAdd:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndAdd:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndAddAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndAddAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndAddAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndAddAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndAddRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndAddRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndAddRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndAddRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseAnd:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseAnd:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseAnd:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseAnd:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseOr:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseOr:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseOr:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseOr:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseXor:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseXor:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseXor:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseXor:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndSet:(LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndSet:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndSet:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.getAndSet:(LVarHandleDexTest;Z)Z
+java.lang.invoke.VarHandle.getAndSetAcquire:(LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndSetAcquire:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndSetAcquire:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.getAndSetAcquire:(LVarHandleDexTest;Z)Z
+java.lang.invoke.VarHandle.getAndSetRelease:(LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndSetRelease:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndSetRelease:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.getAndSetRelease:(LVarHandleDexTest;Z)Z
+java.lang.invoke.VarHandle.getOpaque:(LVarHandleDexTest;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/String;I)Ljava/lang/String;
+java.lang.invoke.VarHandle.getOpaque:(LVarHandleDexTest;)V
+java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/String;I)V
+java.lang.invoke.VarHandle.getOpaque:(LVarHandleDexTest;)Z
+java.lang.invoke.VarHandle.getVolatile:(LVarHandleDexTest;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/String;I)Ljava/lang/String;
+java.lang.invoke.VarHandle.getVolatile:(LVarHandleDexTest;)V
+java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/String;I)V
+java.lang.invoke.VarHandle.getVolatile:(LVarHandleDexTest;)Z
+java.lang.invoke.VarHandle.set:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.set:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)V
+java.lang.invoke.VarHandle.set:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.setOpaque:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.setOpaque:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)V
+java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.setRelease:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.setRelease:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)V
+java.lang.invoke.VarHandle.setRelease:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.setVolatile:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.setVolatile:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)V
+java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.weakCompareAndSet:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.weakCompareAndSet:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z
+java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetPlain:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetPlain:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)Z
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)Z
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)Z
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Z
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Z
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Z
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Z
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)V, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)V, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)V, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)V, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)V, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)V, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)V, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)V, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)V
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)V
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)V
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)V, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)V, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)V, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)V, ([Ljava/lang/String;ILjava/lang/String;)V
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/info.txt b/dx/tests/141-invoke-polymorphic-varhandles/info.txt
new file mode 100644
index 0000000..b3613e8
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/info.txt
@@ -0,0 +1,2 @@
+This test checks the conversion of signature-polymorphic methods
+in the java.lang.invoke.VarHandle class.
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/run b/dx/tests/141-invoke-polymorphic-varhandles/run
new file mode 100644
index 0000000..aae451c
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/run
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+UNSUPPORTED_SDK_VERSION=20
+SUPPORTED_SDK_VERSION=27
+
+echo Trying SDK version $UNSUPPORTED_SDK_VERSION with invoke-polymorphic.
+dx --min-sdk-version=$UNSUPPORTED_SDK_VERSION --debug --dex --dump-to=- --dump-width=1000 VarHandleDexTest.class 2>&1 | grep "SimException"
+if [ $? != 0 ] ; then
+    echo Unexpected success with SDK version $UNSUPPORTED_SDK_VERSION
+    exit 1
+fi
+
+# Run dx and capture cleaned-up lines refering to invoke.VarHandle.
+dx --min-sdk-version=$SUPPORTED_SDK_VERSION --debug --dex --dump-to=- --dump-width=1000 VarHandleDexTest.class | \
+    sed -n -e 's/.*] *//' -e 's/.*\(invoke-polymorphic\)/\1/' -e 's@ *//.*@@' -e '/invoke[.]VarHandle/p'
diff --git a/dx/tests/142-const-method-handle/build b/dx/tests/142-const-method-handle/build
new file mode 100755
index 0000000..df5fe05
--- /dev/null
+++ b/dx/tests/142-const-method-handle/build
@@ -0,0 +1,38 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+function fail() {
+  echo Build failed: $1 1>&2
+  exit 1
+}
+
+if [[ -z "${ANDROID_BUILD_TOP}" ]]; then
+  fail "ANDROID_BUILD_TOP is not defined. Try running 'lunch' first."
+fi
+
+SCRIPT_PATH=$( cd $(dirname $0) ; pwd -P )
+ASM_CLASSPATH="${ANDROID_BUILD_TOP}/prebuilts/misc/common/asm/asm-5.2.jar"
+SRC_PATH="${SCRIPT_PATH}/src"
+BUILD_PATH="${SCRIPT_PATH}/classes"
+JAR_FILE="${SCRIPT_PATH}/constmethodhandle.jar"
+
+if [[ ! -d "${BUILD_PATH}" ]]; then
+    mkdir "$BUILD_PATH" || exit 1
+fi
+
+(cd "${SRC_PATH}" && javac -cp "${ASM_CLASSPATH}" -d "${BUILD_PATH}" Main.java constmethodhandle/*.java) || fail "javac error"
+(cd "${SCRIPT_PATH}" && ${JAVA} -cp "${ASM_CLASSPATH}:${BUILD_PATH}" constmethodhandle.TestGenerator "${BUILD_PATH}") || fail "generator failure"
+(cd "${BUILD_PATH}" && jar cf "${JAR_FILE}" Main.class constmethodhandle/ConstTest.class) || fail "jar creation error"
diff --git a/dx/tests/142-const-method-handle/classes/Main.class b/dx/tests/142-const-method-handle/classes/Main.class
new file mode 100644
index 0000000..8d6b7d8
Binary files /dev/null and b/dx/tests/142-const-method-handle/classes/Main.class differ
diff --git a/dx/tests/142-const-method-handle/classes/constmethodhandle/ConstTest.class b/dx/tests/142-const-method-handle/classes/constmethodhandle/ConstTest.class
new file mode 100644
index 0000000..a21b0a3
Binary files /dev/null and b/dx/tests/142-const-method-handle/classes/constmethodhandle/ConstTest.class differ
diff --git a/dx/tests/142-const-method-handle/classes/constmethodhandle/TestGenerator$1.class b/dx/tests/142-const-method-handle/classes/constmethodhandle/TestGenerator$1.class
new file mode 100644
index 0000000..3a8803b
Binary files /dev/null and b/dx/tests/142-const-method-handle/classes/constmethodhandle/TestGenerator$1.class differ
diff --git a/dx/tests/142-const-method-handle/classes/constmethodhandle/TestGenerator.class b/dx/tests/142-const-method-handle/classes/constmethodhandle/TestGenerator.class
new file mode 100644
index 0000000..594f9f8
Binary files /dev/null and b/dx/tests/142-const-method-handle/classes/constmethodhandle/TestGenerator.class differ
diff --git a/dx/tests/142-const-method-handle/constmethodhandle.jar b/dx/tests/142-const-method-handle/constmethodhandle.jar
new file mode 100644
index 0000000..692303e
Binary files /dev/null and b/dx/tests/142-const-method-handle/constmethodhandle.jar differ
diff --git a/dx/tests/142-const-method-handle/expected.txt b/dx/tests/142-const-method-handle/expected.txt
new file mode 100644
index 0000000..268707f
--- /dev/null
+++ b/dx/tests/142-const-method-handle/expected.txt
@@ -0,0 +1,6 @@
+Trying SDK version 26 with const-method-handle.
+Trying SDK version 27 with const-method-handle.
+Trying SDK version 28 with const-method-handle.
+"dex\n039\0"
+const-method-handle v0, invoke-instance,method{java.lang.Object.getClass:()Ljava/lang/Class;}
+const-method-type v0, (CSIJFDLjava/lang/Object;)Z
diff --git a/dx/tests/142-const-method-handle/info.txt b/dx/tests/142-const-method-handle/info.txt
new file mode 100644
index 0000000..4942773
--- /dev/null
+++ b/dx/tests/142-const-method-handle/info.txt
@@ -0,0 +1,2 @@
+This test checks the conversion of ldc with a MethodHandle operand
+and a MethodType operand.
diff --git a/dx/tests/142-const-method-handle/run b/dx/tests/142-const-method-handle/run
new file mode 100755
index 0000000..ad141e7
--- /dev/null
+++ b/dx/tests/142-const-method-handle/run
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+UNSUPPORTED_SDK_VERSION_0=26
+UNSUPPORTED_SDK_VERSION_1=27
+SUPPORTED_SDK_VERSION=28
+
+# Expect failure with unsupported SDK version
+EXPECTED_STATUS[${UNSUPPORTED_SDK_VERSION_0}]=1
+EXPECTED_STATUS[${UNSUPPORTED_SDK_VERSION_1}]=1
+
+# Expect success with supported SDK version
+EXPECTED_STATUS[${SUPPORTED_SDK_VERSION}]=0
+
+DX_OUTPUT=dx.log
+rm -f ${DX_OUTPUT} 2>/dev/null
+
+for SDK_VERSION in ${!EXPECTED_STATUS[@]}; do
+  echo Trying SDK version ${SDK_VERSION} with const-method-handle.
+  dx --min-sdk-version=${SDK_VERSION} --dex --output=constmethodhandle.dex \
+     --verbose-dump --dump-to=- --dump-width=1000 constmethodhandle.jar >>${DX_OUTPUT} 2>&1
+  STATUS=$?
+  if [[ ${STATUS} != ${EXPECTED_STATUS[$SDK_VERSION]} ]]; then
+    echo Unexpected status ${STATUS} for SDK version ${SDK_VERSION}.
+    exit 1
+  fi
+done
+
+sed -n -e 's/.*: //g' -e 's_ *//.*__' -e '/const-method/p' -e '/dex[\\]/p' ${DX_OUTPUT}
diff --git a/dx/tests/142-const-method-handle/src/Main.java b/dx/tests/142-const-method-handle/src/Main.java
new file mode 100644
index 0000000..6ab922d
--- /dev/null
+++ b/dx/tests/142-const-method-handle/src/Main.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+import constmethodhandle.ConstTest;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+public class Main{
+  public static void main(String[] args) throws Throwable {
+    // At compilation time, ConstTest.main has not yet been
+    // generated. It is generated before execution / linking.
+    MethodHandle generatedMain = MethodHandles.lookup()
+        .findStatic(ConstTest.class, "main", MethodType.methodType(void.class, String[].class));
+    generatedMain.invokeExact(args);
+  }
+}
diff --git a/dx/tests/142-const-method-handle/src/constmethodhandle/ConstTest.java b/dx/tests/142-const-method-handle/src/constmethodhandle/ConstTest.java
new file mode 100644
index 0000000..31abb97
--- /dev/null
+++ b/dx/tests/142-const-method-handle/src/constmethodhandle/ConstTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package constmethodhandle;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+
+public class ConstTest {
+  private static void displayMethodHandle(MethodHandle mh) throws Throwable {
+    System.out.println("MethodHandle " + mh + " => " +
+                       (Class) mh.invoke((Object) Float.valueOf(1.23e4f)));
+  }
+
+  private static void displayMethodType(MethodType mt) {
+    System.out.println("MethodType " + mt);
+  }
+}
diff --git a/dx/tests/142-const-method-handle/src/constmethodhandle/TestGenerator.java b/dx/tests/142-const-method-handle/src/constmethodhandle/TestGenerator.java
new file mode 100644
index 0000000..f769da9
--- /dev/null
+++ b/dx/tests/142-const-method-handle/src/constmethodhandle/TestGenerator.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package constmethodhandle;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.nio.file.OpenOption;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Handle;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+
+public class TestGenerator {
+
+  private final Path classNamePath;
+
+  public static void main(String[] args) throws IOException {
+    assert args.length == 1;
+    TestGenerator testGenerator = new TestGenerator(Paths.get(args[0],
+        TestGenerator.class.getPackage().getName(), ConstTest.class.getSimpleName() + ".class"));
+    testGenerator.generateTests();
+  }
+
+  public TestGenerator(Path classNamePath) {
+    this.classNamePath = classNamePath;
+  }
+
+  private void generateTests() throws IOException {
+    ClassReader cr = new ClassReader(new FileInputStream(classNamePath.toFile()));
+    ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
+    cr.accept(
+        new ClassVisitor(Opcodes.ASM5, cw) {
+          @Override
+          public void visitEnd() {
+            generateMethodTest1(cw);
+            generateMethodTest2(cw);
+            generateMethodMain(cw);
+            super.visitEnd();
+          }
+        }, 0);
+    new FileOutputStream(classNamePath.toFile()).write(cw.toByteArray());
+  }
+
+  /* generate main method that only call all test methods. */
+  private void generateMethodMain(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC,
+                                      "main", "([Ljava/lang/String;)V", null, null);
+    String internalName = Type.getInternalName(ConstTest.class);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test1",
+                       "()Ljava/lang/invoke/MethodHandle;", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName,
+                       "displayMethodHandle", "(Ljava/lang/invoke/MethodHandle;)V", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "test2",
+                       "()Ljava/lang/invoke/MethodType;", false);
+    mv.visitMethodInsn(Opcodes.INVOKESTATIC, internalName, "displayMethodType",
+                       "(Ljava/lang/invoke/MethodType;)V", false);
+    mv.visitInsn(Opcodes.RETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test that returns a constant method handle.
+   */
+  private void generateMethodTest1(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test1",
+                                      "()Ljava/lang/invoke/MethodHandle;", null, null);
+    MethodType mt = MethodType.methodType(Class.class);
+    Handle mh = new Handle(Opcodes.H_INVOKEVIRTUAL, Type.getInternalName(Object.class),
+                           "getClass", mt.toMethodDescriptorString(), false);
+    mv.visitLdcInsn(mh);
+    mv.visitInsn(Opcodes.ARETURN);
+    mv.visitMaxs(-1, -1);
+  }
+
+  /**
+   * Generate a test that returns a constant method type.
+   */
+  private void generateMethodTest2(ClassVisitor cv) {
+    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "test2",
+                                      "()Ljava/lang/invoke/MethodType;", null, null);
+    Type mt = Type.getMethodType(Type.getType(boolean.class), Type.getType(char.class),
+                                 Type.getType(short.class), Type.getType(int.class),
+                                 Type.getType(long.class), Type.getType(float.class),
+                                 Type.getType(double.class), Type.getType(Object.class));
+    mv.visitLdcInsn(mt);
+    mv.visitInsn(Opcodes.ARETURN);
+    mv.visitMaxs(-1, -1);
+  }
+}
diff --git a/dx/tests/143-interface-methods/DefaultDefinition.java b/dx/tests/143-interface-methods/DefaultDefinition.java
new file mode 100644
index 0000000..ee2e54c
--- /dev/null
+++ b/dx/tests/143-interface-methods/DefaultDefinition.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public interface DefaultDefinition {
+    default int countIt(String s) {
+        return s.length();
+    }
+}
diff --git a/dx/tests/143-interface-methods/InvokeDefault.java b/dx/tests/143-interface-methods/InvokeDefault.java
new file mode 100644
index 0000000..88771e8
--- /dev/null
+++ b/dx/tests/143-interface-methods/InvokeDefault.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class InvokeDefault implements DefaultDefinition {
+    public void foo() {
+        DefaultDefinition.super.countIt("123");
+    }
+}
diff --git a/dx/tests/143-interface-methods/InvokeStatic.java b/dx/tests/143-interface-methods/InvokeStatic.java
new file mode 100644
index 0000000..ed4bbf8
--- /dev/null
+++ b/dx/tests/143-interface-methods/InvokeStatic.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public class InvokeStatic {
+    public static void main(String[] args) {
+        StaticDefinition.printIt(args[0]);
+    }
+}
diff --git a/dx/tests/143-interface-methods/StaticDefinition.java b/dx/tests/143-interface-methods/StaticDefinition.java
new file mode 100644
index 0000000..ab82cfc
--- /dev/null
+++ b/dx/tests/143-interface-methods/StaticDefinition.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.
+ */
+
+public interface StaticDefinition {
+  long createsClinit = System.currentTimeMillis();
+  public static void printIt(String s) {
+        System.out.println(s);
+    }
+}
diff --git a/dx/tests/143-interface-methods/expected.txt b/dx/tests/143-interface-methods/expected.txt
new file mode 100644
index 0000000..ffbc589
--- /dev/null
+++ b/dx/tests/143-interface-methods/expected.txt
@@ -0,0 +1,122 @@
+--------------------- Testing 19 ------------------------
+InvokeDefault.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (blocked at current API level 19)
+1 error; aborting
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 19) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (blocked at current API level 19)
+1 error; aborting
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 19) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 20 ------------------------
+InvokeDefault.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (blocked at current API level 20)
+1 error; aborting
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 20) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (blocked at current API level 20)
+1 error; aborting
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 20) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 21 ------------------------
+InvokeDefault.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (blocked at current API level 21)
+1 error; aborting
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 21) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (blocked at current API level 21)
+1 error; aborting
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 21) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 22 ------------------------
+InvokeDefault.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (blocked at current API level 22)
+1 error; aborting
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 22) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (blocked at current API level 22)
+1 error; aborting
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 22) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 23 ------------------------
+InvokeDefault.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (blocked at current API level 23)
+1 error; aborting
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 23) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (blocked at current API level 23)
+1 error; aborting
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 23) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 24 ------------------------
+InvokeDefault.class
+DefaultDefinition.class
+InvokeStatic.class
+StaticDefinition.class
+--------------------- Testing 25 ------------------------
+InvokeDefault.class
+DefaultDefinition.class
+InvokeStatic.class
+StaticDefinition.class
+--------------------- Testing 19 ------------------------
+InvokeDefault.class
+WARNING in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (experimental at current API level 19)
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 19) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (blocked at current API level 19)
+1 error; aborting
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 19) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 20 ------------------------
+InvokeDefault.class
+WARNING in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (experimental at current API level 20)
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 20) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (blocked at current API level 20)
+1 error; aborting
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 20) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 21 ------------------------
+InvokeDefault.class
+WARNING in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (experimental at current API level 21)
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 21) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+WARNING in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (experimental at current API level 21)
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 21) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 22 ------------------------
+InvokeDefault.class
+WARNING in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (experimental at current API level 22)
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 22) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+WARNING in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (experimental at current API level 22)
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 22) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 23 ------------------------
+InvokeDefault.class
+WARNING in InvokeDefault.foo:()V: invoking a default interface method DefaultDefinition.countIt:(Ljava/lang/String;)I strictly requires --min-sdk-version >= 24 (experimental at current API level 23)
+DefaultDefinition.class
+WARNING in DefaultDefinition.countIt:(Ljava/lang/String;)I: defining a default interface method requires --min-sdk-version >= 24 (currently 23) for interface methods: DefaultDefinition.countIt:(Ljava/lang/String;)I
+InvokeStatic.class
+WARNING in InvokeStatic.main:([Ljava/lang/String;)V: invoking a static interface method StaticDefinition.printIt:(Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (experimental at current API level 23)
+StaticDefinition.class
+WARNING in StaticDefinition.printIt:(Ljava/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 23) for interface methods: StaticDefinition.printIt:(Ljava/lang/String;)V
+--------------------- Testing 24 ------------------------
+InvokeDefault.class
+DefaultDefinition.class
+InvokeStatic.class
+StaticDefinition.class
+--------------------- Testing 25 ------------------------
+InvokeDefault.class
+DefaultDefinition.class
+InvokeStatic.class
+StaticDefinition.class
diff --git a/dx/tests/143-interface-methods/info.txt b/dx/tests/143-interface-methods/info.txt
new file mode 100644
index 0000000..9fd700c
--- /dev/null
+++ b/dx/tests/143-interface-methods/info.txt
@@ -0,0 +1,3 @@
+Tests that interface method invocation is permitted below API level
+24, and interface method declaration is only permitted at level 24
+upwards.
diff --git a/dx/tests/143-interface-methods/run b/dx/tests/143-interface-methods/run
new file mode 100644
index 0000000..59c233b
--- /dev/null
+++ b/dx/tests/143-interface-methods/run
@@ -0,0 +1,90 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+JAVAC_SOURCE=1.8
+JAVAC_TARGET=1.8
+
+JAVAC_FLAGS="-source ${JAVAC_SOURCE} -target ${JAVAC_TARGET}"
+
+# Suppress warning over bootclass path from Java 9 compiler (if used).
+JAVAC_FLAGS="${JAVAC_FLAGS} -Xlint:-options"
+
+# Check interface method defintions cause warnings and {default,static}
+# interface method invocations fail hard.
+declare -A SUPPORT_THRESHOLD
+SUPPORT_THRESHOLD["DefaultDefinition.class"]=0
+SUPPORT_THRESHOLD["InvokeStatic.class"]=24
+SUPPORT_THRESHOLD["InvokeDefault.class"]=24
+SUPPORT_THRESHOLD["StaticDefinition.class"]=0
+
+CLASS_FILES=${!SUPPORT_THRESHOLD[@]}
+SOURCE_FILES=${CLASS_FILES//class/java}
+
+${JAVAC} ${JAVAC_FLAGS} ${SOURCE_FILES}
+
+for API_LEVEL in 19 20 21 22 23 24 25; do
+  echo --------------------- Testing $API_LEVEL ------------------------
+  for c in $CLASS_FILES; do
+    echo $c
+    dx --dex --dump-width=500 --dump-to=$c.log --min-sdk-version=$API_LEVEL $c
+    if [ $? = 0 ]; then
+      if [[ $API_LEVEL -lt ${SUPPORT_THRESHOLD[$c]} ]]; then
+        echo Unexpected success for $c at API level $API_LEVEL 1>&2
+        cat $c.log
+        exit 0
+      fi
+    else
+      if [[ $API_LEVEL -ge ${SUPPORT_THRESHOLD[$c]} ]]; then
+        echo Unexpected failure for $c at API level $API_LEVEL 1>&2
+        exit 0
+      fi
+    fi
+  done
+done
+
+# Now repeat with --allowAllInterfaceMethodInvokes which turns hard
+# failures for {default,static} interface invokes to warnings.
+EXTRA_DX_FLAG=--allow-all-interface-method-invokes
+
+SUPPORT_THRESHOLD["DefaultDefinition.class"]=0
+SUPPORT_THRESHOLD["InvokeStatic.class"]=21
+SUPPORT_THRESHOLD["InvokeDefault.class"]=0
+SUPPORT_THRESHOLD["StaticDefinition.class"]=0
+
+CLASS_FILES=${!SUPPORT_THRESHOLD[@]}
+SOURCE_FILES=${CLASS_FILES//class/java}
+
+${JAVAC} ${JAVAC_FLAGS} ${SOURCE_FILES}
+
+for API_LEVEL in 19 20 21 22 23 24 25; do
+  echo --------------------- Testing $API_LEVEL ------------------------
+  for c in $CLASS_FILES; do
+    echo $c
+    dx --dex --dump-width=500 --dump-to=$c.log --min-sdk-version=$API_LEVEL $EXTRA_DX_FLAG $c
+    if [ $? = 0 ]; then
+      if [[ $API_LEVEL -lt ${SUPPORT_THRESHOLD[$c]} ]]; then
+        echo Unexpected success for $c at API level $API_LEVEL 1>&2
+        cat $c.log
+        exit 0
+      fi
+    else
+      if [[ $API_LEVEL -ge ${SUPPORT_THRESHOLD[$c]} ]]; then
+        echo Unexpected failure for $c at API level $API_LEVEL 1>&2
+        exit 0
+      fi
+    fi
+  done
+done
diff --git a/dx/tests/run-all-tests b/dx/tests/run-all-tests
new file mode 100755
index 0000000..577e97b
--- /dev/null
+++ b/dx/tests/run-all-tests
@@ -0,0 +1,198 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+
+skip_tests="115-merge 127-merge-stress 129-numthread-deterministic 130-numthread-multidex-deterministic 143-interface-methods"
+
+# Command-line options
+sequential="no"
+usage="no"
+while [[ "$1" == "-"* ]]; do
+  case $1 in
+    --seq) sequential="yes" ;;
+    --skip) skip_tests="$2 $skip_tests"
+            shift ;;
+    *) usage="yes" ;;
+  esac
+  shift
+done
+
+if [ $usage = "yes" ]; then
+    prog=`basename $prog`
+    cat 1>&2 <<END_USAGE
+Usage:
+  $prog [options]   Run all tests with given options.
+Options:
+  --seq             Run tests sequentially (default: parallel)
+  --skip <test>     Skip running specified test
+END_USAGE
+    exit 1
+fi
+
+# Globals for tracking numbers of successes and failures and their names.
+passed=()
+surprised=()
+ignored=()
+failed=()
+skipped=()
+
+# Tests failing and require attention (e.g. 115-merge)
+known_bad="100-local-mismatch 115-merge 119-merge-conflict"
+
+function display_results {
+  printf    "\n\nTest Results\n"
+  printf -- "----------------------------\n"
+  printf    "Pass:                   % 4d\n" ${#passed[@]}
+  printf    "Surprise pass:          % 4d\n" ${#surprised[@]}
+  printf    "Known failures:         % 4d\n" ${#ignored[@]}
+  printf    "Failures:               % 4d\n" ${#failed[@]}
+  printf    "Skipped:                % 4d\n" ${#skipped[@]}
+  printf -- "----------------------------\n"
+  printf    "Elapsed time(s):        % 4d\n" $SECONDS
+
+  list_files "Unexpected successes" ${surprised[@]}
+  list_files "Known failures" ${ignored[@]}
+  list_files "Failures" ${failed[@]}
+  list_files "Skipped" ${skipped[@]}
+
+  needing_attention=$(( ${#failed[@]} + ${#surprised[@]} ))
+  exit ${needing_attention}
+}
+
+function list_files {
+  # Arguments: Title test_name0 test_name1 ... test_nameN
+  echo "$1:"
+  shift
+  if [[ "$1" = "" ]]; then
+    echo "  NONE"
+    return
+  fi
+  while [[ "$1" != "" ]]; do
+    echo "  $1"
+    shift
+  done
+}
+
+function update_result {
+  local -r test_name=$1
+  local -r output=$2
+  local -r result=$3
+  local expectFail
+
+  if [[ "$known_bad" == *"$test_name"* ]]; then
+    expectFail=1
+  else
+    expectFail=0
+  fi
+  if [ $result = 0 ]; then
+    if [[ $expectFail = 0 ]]; then
+      passed+=(${test_name})
+    else
+      echo "Failing on unexpected success of $test_name"
+      surprised+=(${test_name})
+    fi
+  else
+    if [[ $expectFail = 0 ]]; then
+      failed+=(${test_name})
+    else
+      echo "Ignoring expected failure of $test_name"
+      ignored+=(${test_name})
+      # Clean up when we expect a test to fail.
+      # run-test only does this on success.
+      rm -rf "$output"
+    fi
+  fi
+}
+
+function run_one_test_with_flock {
+  local -r output_dir=$1
+  local -r test_name=$2
+  local -r lock_file=$3
+
+  # Wait for the lock and run the test when acquired
+  flock "${lock_file}" ./run-test --output_dir "${output_dir}" "${test_name}"
+}
+
+function run_tests {
+  readonly test_root=$(mktemp -d)
+  trap "rm -rf ${test_root}" EXIT
+  if [[ "$sequential" = "yes" ]]; then
+    for test_name in *; do
+      if [[ "$skip_tests" = *"$test_name"* ]]; then
+        skipped+=(${test_name})
+        continue
+      fi
+      if [ -d "$test_name" -a -r "$test_name" ]; then
+        output="${test_root}/${test_name}"
+        ./run-test --output_dir "${output}" "${test_name}"
+        update_result "${test_name}" "${output}" $?
+      fi
+    done
+  else
+    readonly num_workers=4
+    local i=0
+    for test_name in *; do
+      if [[ "$skip_tests" = *"$test_name"* ]]; then
+        skipped+=(${test_name})
+        continue
+      fi
+      local lock_file=${test_root}/lock.$((i % num_workers))
+      if [ -d "${test_name}" -a -r "${test_name}" ]; then
+        output="${test_root}/${test_name}"
+        run_one_test_with_flock "$output" "$test_name" "$lock_file" &
+        test_pids[i]=$!
+        test_names[test_pids[i]]="$test_name"
+        test_outputs[test_pids[i]]="output"
+        let i+=1
+      fi
+    done
+
+    for pid in ${test_pids[@]}; do
+      wait $pid
+      update_result ${test_names[$pid]} ${test_outputs[$pid]} $?
+    done
+  fi
+}
+
+function handle_interrupt {
+  trap INT
+  display_results
+  if [ ! -z "${test_pids}" ]; then
+    killall ${test_pids}
+  fi
+}
+
+trap handle_interrupt INT
+run_tests
+display_results
diff --git a/dx/tests/run-test b/dx/tests/run-test
new file mode 100755
index 0000000..cf80cc0
--- /dev/null
+++ b/dx/tests/run-test
@@ -0,0 +1,187 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+
+if [[ -z "${JAVA_HOME}" ]]; then
+    unix=$(uname | tr '[A-Z]' '[a-z]')
+    JAVA_HOME="${progdir}/../../../prebuilts/jdk/jdk11/${unix}-x86"
+fi
+
+if [[ ! -d "${JAVA_HOME}" ]]; then
+    echo "Missing JAVA_HOME directory: $JAVA_HOME" 1>&2
+    exit 1
+fi
+
+export JAVAC="${JAVA_HOME}/bin/javac"
+if [ "!" -e "$JAVAC" ]; then
+    echo "Missing JAVAC executable: ${JAVAC}" 1>&2
+    exit 1
+fi
+
+export JAVA="${JAVA_HOME}/bin/java"
+if [ "!" -e "$JAVA" ]; then
+    echo "Missing JAVA executable: ${JAVA}" 1>&2
+    exit 1
+fi
+
+info="info.txt"
+run="run"
+expected="expected.txt"
+output="out.txt"
+
+clean_on_exit="yes"
+dev_mode="no"
+update_mode="no"
+tmpdir=/tmp/test-$$
+usage="no"
+
+while [[ "x$1" = "x-"* ]]; do
+    case $1 in
+        --dev) dev_mode="yes" ;;
+        --no-clean) clean_on_exit="no" ;;
+         --output_dir)
+             tmpdir=$2
+             shift ;;
+         --update) update_mode="yes" ;;
+         --help) usage="yes" ;;
+         *) usage="yes" ;;
+     esac
+     shift
+done
+
+if [ "x$1" = "x" ]; then
+    testdir=`basename "$oldwd"`
+else
+    testdir="$1"
+fi
+
+if [ '!' -d "$testdir" ]; then
+    td2=`echo ${testdir}-*`
+    if [ '!' -d "$td2" ]; then
+        echo "${testdir}: no such test directory" 1>&2
+        usage="yes"
+    fi
+    testdir="$td2"
+fi
+
+if [ "$update_mode" = "yes" -a "$dev_mode" = "yes" ] ; then
+    echo Error: --dev is incompatible with --update. 1>&2
+    usage="yes"
+fi
+
+if [ "$usage" = "yes" ]; then
+    prog=`basename $prog`
+    (
+        echo "usage:"
+        echo "  $prog --help             Print this message."
+        echo "  $prog testname           Run test normally."
+        echo "  $prog --dev testname     Development mode (dump to stdout)."
+        echo "  $prog --update testname  Update mode (replace expected.txt)."
+        echo "  Omitting the test name uses the current directory as the test."
+        echo "options:"
+        echo "        --output_dir <dir> Use <dir> for the test outputs."
+    ) 1>&2
+    exit 1
+fi
+
+td_info="${testdir}/${info}"
+td_run="${testdir}/${run}"
+td_expected="${testdir}/${expected}"
+
+for td_file in "$td_info" "$td_run" "$td_expected"; do
+    if [[ ! -r "$td_file" ]]; then
+        echo "${testdir}: missing file $td_file" 1>&2
+        exit 1
+    fi
+done
+
+# copy the test to a temp dir and run it
+if [ -d "$tmpdir" ]; then
+    rm -rf "$tmpdir" || exit 1
+fi
+output_parent=`dirname ${tmpdir}`
+mkdir -p "${output_parent}" || exit 1
+cp -Rp "$testdir" "$tmpdir" || exit 1
+cd "$tmpdir"
+chmod 755 "$run"
+
+echo "${testdir}: running..." 1>&2
+good="no"
+if [ "$dev_mode" = "yes" ]; then
+    "./$run" 2>&1
+    echo "exit status: $?" 1>&2
+    good="yes"
+elif [ "$update_mode" = "yes" ]; then
+    "./$run" >"$output" 2>&1
+    if [[ $? == 0 ]]; then
+        good="yes"
+        mv "$output" "${progdir}/${td_expected}"
+    else
+        echo "Test failed during update."
+        good="no"
+    fi
+
+else
+    "./$run" >"$output" 2>&1
+    cmp -s "$expected" "$output"
+    if [ "$?" = "0" ]; then
+        # output == expected
+        good="yes"
+        echo "$testdir"': succeeded!' 1>&2
+    fi
+fi
+
+if [ "$good" = "yes" ]; then
+    cd "$oldwd"
+    if [ "$clean_on_exit" = "yes" ]; then
+        rm -rf "$tmpdir"
+    else
+        echo "Test artifacts left in $tmpdir"
+    fi
+    exit 0
+fi
+
+(
+    echo "${testdir}: FAILED!"
+    echo ' '
+    echo '#################### info'
+    cat "$info" | sed 's/^/# /g'
+    echo '#################### diffs'
+    diff -u "$expected" "$output"
+    echo '####################'
+    echo ' '
+    echo "files left in $tmpdir"
+) 1>&2
+
+exit 1
diff --git a/opcode-gen/README.txt b/opcode-gen/README.txt
new file mode 100644
index 0000000..a210842
--- /dev/null
+++ b/opcode-gen/README.txt
@@ -0,0 +1,74 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# 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.
+
+---------------------------------------------------------------------
+Notes on updating the sets of defined opcodes and instruction formats
+---------------------------------------------------------------------
+
+##########
+
+If you want to add, delete, or change opcodes:
+
+* Update the file bytecode.txt, in this directory.
+
+* Run the regen-all script, in this directory. This will regenerate a
+  number of tables, definitions, and declarations in the code, in
+  dalvik/dx, dalvik/libdex, and libcore/dalvik.
+
+* Implement/update the opcode in C in vm/mterp/c/...
+  * Verify new code by running with "dalvik.vm.execution-mode = int:portable"
+    or "-Xint:portable".
+
+* Implement/update the instruction in assembly in vm/mterp/{arm*,x86*}/...
+  * Verify by enabling the assembly (e.g. ARM) handler for that instruction
+    in mterp/config-* and running "int:fast" as above.
+
+* Implement/update the instruction in
+  vm/compiler/codegen/{arm,x86}/CodegenDriver.c.
+
+* Rebuild the interpreter code. See the notes in vm/mterp/ReadMe.txt for
+  details.
+
+* Look in the directory vm/analysis at the files CodeVerify.c,
+  DexVerify.c, and Optimize.c. You may need to update them to account
+  for your changes.
+  * If you change anything here, be sure to try running the system with
+    the verifier enabled (which is in fact the default).
+
+##########
+
+If you want to add, delete, or change instruction formats:
+
+This is a more manual affair than changing opcodes.
+
+* Update the file bytecode.txt, and run regen-all, as per above.
+
+* Update the instruction format list in libdex/InstrUtils.h.
+
+* Update dexDecodeInstruction() in libdex/InstrUtils.c.
+
+* Update dumpInstruction() and its helper code in dexdump/DexDump.c.
+
+* Update the switch inside dvmCompilerMIR2LIR() in
+  vm/compiler/codegen/{arm,x86}/CodegenDriver.c. (There may be other
+  architectures to deal with too.)
+
+##########
+
+Testing your work:
+
+The Dalvik VM tests (in the vm/tests directory) provide a convenient
+way to test most of the above without doing any rebuilds. In
+particular, test 003-omnibus-opcodes will exercise most of the
+opcodes.
diff --git a/opcode-gen/bytecode.txt b/opcode-gen/bytecode.txt
new file mode 100644
index 0000000..0129ad9
--- /dev/null
+++ b/opcode-gen/bytecode.txt
@@ -0,0 +1,354 @@
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+#
+# Bytecode definition file
+#
+
+# One line per instruction format family. Each line consists of a
+# series of instruction formats that all take (potentially) compatible
+# arguments. The order is the preferred order (most to least
+# preferable) of formats, when more than one opcode could be used for
+# a given instruction's arguments.
+#
+# Note: The family that starts with 12x has a mix of both two- and
+# three- register formats. This is because some of the two-register
+# opcodes effectively take three, with a destination and two sources
+# where the destination and one of the sources have to be the same.
+
+# Regular formats
+format 10t 20t 30t
+format 10x
+format 11n 21s 21h 31i 51l
+format 11x
+format 12x 22x 23x 32x  # See note, above.
+format 21c 31c
+format 21t 31t
+format 22b 22s
+format 22c
+format 22t
+format 35c 3rc
+format 45cc 4rcc
+
+# Optimized formats
+format 00x
+format 20bc
+format 22cs
+format 35mi
+format 35ms
+format 3rmi
+format 3rms
+
+# One line per opcode. Columns are:
+#   hex for opcode
+#   opcode name
+#   format
+#   has result register; one of:
+#     y
+#     n
+#   index type; one of:
+#     unknown -- used for undefined opcodes and breakpoint
+#     none
+#     varies
+#     type-ref
+#     string-ref
+#     method-ref
+#     field-ref
+#     inline-method
+#     vtable-offset
+#     field-offset
+#     method-and-proto-ref
+#     call-site-ref
+#     method-handle-ref
+#     proto-ref
+#   flags; pipe-combined combo of one or more of:
+#     optimized     -- optimized; not to be included in unoptimized dex files
+#     branch        -- might branch to an address
+#     continue      -- might continue to the next address in sequence
+#     switch        -- is a switch
+#     throw         -- might throw an exception
+#     return        -- is a return from method
+#     invoke        -- is a method invoke; this is only used for true
+#                      method invokes and notably *not* vm-implemented
+#                      execute-inline nor the nop-equivalent
+#                      invoke-direct-empty
+
+#
+# Regular opcodes (with a couple holes)
+#
+
+op   00 nop                         10x  n none          continue
+op   01 move                        12x  y none          continue
+op   02 move/from16                 22x  y none          continue
+op   03 move/16                     32x  y none          continue
+op   04 move-wide                   12x  y none          continue
+op   05 move-wide/from16            22x  y none          continue
+op   06 move-wide/16                32x  y none          continue
+op   07 move-object                 12x  y none          continue
+op   08 move-object/from16          22x  y none          continue
+op   09 move-object/16              32x  y none          continue
+op   0a move-result                 11x  y none          continue
+op   0b move-result-wide            11x  y none          continue
+op   0c move-result-object          11x  y none          continue
+op   0d move-exception              11x  y none          continue
+op   0e return-void                 10x  n none          return
+op   0f return                      11x  n none          return
+op   10 return-wide                 11x  n none          return
+op   11 return-object               11x  n none          return
+op   12 const/4                     11n  y none          continue
+op   13 const/16                    21s  y none          continue
+op   14 const                       31i  y none          continue
+op   15 const/high16                21h  y none          continue
+op   16 const-wide/16               21s  y none          continue
+op   17 const-wide/32               31i  y none          continue
+op   18 const-wide                  51l  y none          continue
+op   19 const-wide/high16           21h  y none          continue
+op   1a const-string                21c  y string-ref    continue|throw
+op   1b const-string/jumbo          31c  y string-ref    continue|throw
+op   1c const-class                 21c  y type-ref      continue|throw
+op   1d monitor-enter               11x  n none          continue|throw
+op   1e monitor-exit                11x  n none          continue|throw
+op   1f check-cast                  21c  y type-ref      continue|throw
+op   20 instance-of                 22c  y type-ref      continue|throw
+op   21 array-length                12x  y none          continue|throw
+op   22 new-instance                21c  y type-ref      continue|throw
+op   23 new-array                   22c  y type-ref      continue|throw
+op   24 filled-new-array            35c  n type-ref      continue|throw
+op   25 filled-new-array/range      3rc  n type-ref      continue|throw
+op   26 fill-array-data             31t  n none          continue
+op   27 throw                       11x  n none          throw
+op   28 goto                        10t  n none          branch
+op   29 goto/16                     20t  n none          branch
+op   2a goto/32                     30t  n none          branch
+op   2b packed-switch               31t  n none          continue|switch
+op   2c sparse-switch               31t  n none          continue|switch
+op   2d cmpl-float                  23x  y none          continue
+op   2e cmpg-float                  23x  y none          continue
+op   2f cmpl-double                 23x  y none          continue
+op   30 cmpg-double                 23x  y none          continue
+op   31 cmp-long                    23x  y none          continue
+op   32 if-eq                       22t  n none          continue|branch
+op   33 if-ne                       22t  n none          continue|branch
+op   34 if-lt                       22t  n none          continue|branch
+op   35 if-ge                       22t  n none          continue|branch
+op   36 if-gt                       22t  n none          continue|branch
+op   37 if-le                       22t  n none          continue|branch
+op   38 if-eqz                      21t  n none          continue|branch
+op   39 if-nez                      21t  n none          continue|branch
+op   3a if-ltz                      21t  n none          continue|branch
+op   3b if-gez                      21t  n none          continue|branch
+op   3c if-gtz                      21t  n none          continue|branch
+op   3d if-lez                      21t  n none          continue|branch
+# unused: op 3e..43
+op   44 aget                        23x  y none          continue|throw
+op   45 aget-wide                   23x  y none          continue|throw
+op   46 aget-object                 23x  y none          continue|throw
+op   47 aget-boolean                23x  y none          continue|throw
+op   48 aget-byte                   23x  y none          continue|throw
+op   49 aget-char                   23x  y none          continue|throw
+op   4a aget-short                  23x  y none          continue|throw
+op   4b aput                        23x  n none          continue|throw
+op   4c aput-wide                   23x  n none          continue|throw
+op   4d aput-object                 23x  n none          continue|throw
+op   4e aput-boolean                23x  n none          continue|throw
+op   4f aput-byte                   23x  n none          continue|throw
+op   50 aput-char                   23x  n none          continue|throw
+op   51 aput-short                  23x  n none          continue|throw
+op   52 iget                        22c  y field-ref     continue|throw
+op   53 iget-wide                   22c  y field-ref     continue|throw
+op   54 iget-object                 22c  y field-ref     continue|throw
+op   55 iget-boolean                22c  y field-ref     continue|throw
+op   56 iget-byte                   22c  y field-ref     continue|throw
+op   57 iget-char                   22c  y field-ref     continue|throw
+op   58 iget-short                  22c  y field-ref     continue|throw
+op   59 iput                        22c  n field-ref     continue|throw
+op   5a iput-wide                   22c  n field-ref     continue|throw
+op   5b iput-object                 22c  n field-ref     continue|throw
+op   5c iput-boolean                22c  n field-ref     continue|throw
+op   5d iput-byte                   22c  n field-ref     continue|throw
+op   5e iput-char                   22c  n field-ref     continue|throw
+op   5f iput-short                  22c  n field-ref     continue|throw
+op   60 sget                        21c  y field-ref     continue|throw
+op   61 sget-wide                   21c  y field-ref     continue|throw
+op   62 sget-object                 21c  y field-ref     continue|throw
+op   63 sget-boolean                21c  y field-ref     continue|throw
+op   64 sget-byte                   21c  y field-ref     continue|throw
+op   65 sget-char                   21c  y field-ref     continue|throw
+op   66 sget-short                  21c  y field-ref     continue|throw
+op   67 sput                        21c  n field-ref     continue|throw
+op   68 sput-wide                   21c  n field-ref     continue|throw
+op   69 sput-object                 21c  n field-ref     continue|throw
+op   6a sput-boolean                21c  n field-ref     continue|throw
+op   6b sput-byte                   21c  n field-ref     continue|throw
+op   6c sput-char                   21c  n field-ref     continue|throw
+op   6d sput-short                  21c  n field-ref     continue|throw
+op   6e invoke-virtual              35c  n method-ref    continue|throw|invoke
+op   6f invoke-super                35c  n method-ref    continue|throw|invoke
+op   70 invoke-direct               35c  n method-ref    continue|throw|invoke
+op   71 invoke-static               35c  n method-ref    continue|throw|invoke
+op   72 invoke-interface            35c  n method-ref    continue|throw|invoke
+# unused: op 73
+op   74 invoke-virtual/range        3rc  n method-ref    continue|throw|invoke
+op   75 invoke-super/range          3rc  n method-ref    continue|throw|invoke
+op   76 invoke-direct/range         3rc  n method-ref    continue|throw|invoke
+op   77 invoke-static/range         3rc  n method-ref    continue|throw|invoke
+op   78 invoke-interface/range      3rc  n method-ref    continue|throw|invoke
+# unused: op 79..7a
+op   7b neg-int                     12x  y none          continue
+op   7c not-int                     12x  y none          continue
+op   7d neg-long                    12x  y none          continue
+op   7e not-long                    12x  y none          continue
+op   7f neg-float                   12x  y none          continue
+op   80 neg-double                  12x  y none          continue
+op   81 int-to-long                 12x  y none          continue
+op   82 int-to-float                12x  y none          continue
+op   83 int-to-double               12x  y none          continue
+op   84 long-to-int                 12x  y none          continue
+op   85 long-to-float               12x  y none          continue
+op   86 long-to-double              12x  y none          continue
+op   87 float-to-int                12x  y none          continue
+op   88 float-to-long               12x  y none          continue
+op   89 float-to-double             12x  y none          continue
+op   8a double-to-int               12x  y none          continue
+op   8b double-to-long              12x  y none          continue
+op   8c double-to-float             12x  y none          continue
+op   8d int-to-byte                 12x  y none          continue
+op   8e int-to-char                 12x  y none          continue
+op   8f int-to-short                12x  y none          continue
+op   90 add-int                     23x  y none          continue
+op   91 sub-int                     23x  y none          continue
+op   92 mul-int                     23x  y none          continue
+op   93 div-int                     23x  y none          continue|throw
+op   94 rem-int                     23x  y none          continue|throw
+op   95 and-int                     23x  y none          continue
+op   96 or-int                      23x  y none          continue
+op   97 xor-int                     23x  y none          continue
+op   98 shl-int                     23x  y none          continue
+op   99 shr-int                     23x  y none          continue
+op   9a ushr-int                    23x  y none          continue
+op   9b add-long                    23x  y none          continue
+op   9c sub-long                    23x  y none          continue
+op   9d mul-long                    23x  y none          continue
+op   9e div-long                    23x  y none          continue|throw
+op   9f rem-long                    23x  y none          continue|throw
+op   a0 and-long                    23x  y none          continue
+op   a1 or-long                     23x  y none          continue
+op   a2 xor-long                    23x  y none          continue
+op   a3 shl-long                    23x  y none          continue
+op   a4 shr-long                    23x  y none          continue
+op   a5 ushr-long                   23x  y none          continue
+op   a6 add-float                   23x  y none          continue
+op   a7 sub-float                   23x  y none          continue
+op   a8 mul-float                   23x  y none          continue
+op   a9 div-float                   23x  y none          continue
+op   aa rem-float                   23x  y none          continue
+op   ab add-double                  23x  y none          continue
+op   ac sub-double                  23x  y none          continue
+op   ad mul-double                  23x  y none          continue
+op   ae div-double                  23x  y none          continue
+op   af rem-double                  23x  y none          continue
+op   b0 add-int/2addr               12x  y none          continue
+op   b1 sub-int/2addr               12x  y none          continue
+op   b2 mul-int/2addr               12x  y none          continue
+op   b3 div-int/2addr               12x  y none          continue|throw
+op   b4 rem-int/2addr               12x  y none          continue|throw
+op   b5 and-int/2addr               12x  y none          continue
+op   b6 or-int/2addr                12x  y none          continue
+op   b7 xor-int/2addr               12x  y none          continue
+op   b8 shl-int/2addr               12x  y none          continue
+op   b9 shr-int/2addr               12x  y none          continue
+op   ba ushr-int/2addr              12x  y none          continue
+op   bb add-long/2addr              12x  y none          continue
+op   bc sub-long/2addr              12x  y none          continue
+op   bd mul-long/2addr              12x  y none          continue
+op   be div-long/2addr              12x  y none          continue|throw
+op   bf rem-long/2addr              12x  y none          continue|throw
+op   c0 and-long/2addr              12x  y none          continue
+op   c1 or-long/2addr               12x  y none          continue
+op   c2 xor-long/2addr              12x  y none          continue
+op   c3 shl-long/2addr              12x  y none          continue
+op   c4 shr-long/2addr              12x  y none          continue
+op   c5 ushr-long/2addr             12x  y none          continue
+op   c6 add-float/2addr             12x  y none          continue
+op   c7 sub-float/2addr             12x  y none          continue
+op   c8 mul-float/2addr             12x  y none          continue
+op   c9 div-float/2addr             12x  y none          continue
+op   ca rem-float/2addr             12x  y none          continue
+op   cb add-double/2addr            12x  y none          continue
+op   cc sub-double/2addr            12x  y none          continue
+op   cd mul-double/2addr            12x  y none          continue
+op   ce div-double/2addr            12x  y none          continue
+op   cf rem-double/2addr            12x  y none          continue
+op   d0 add-int/lit16               22s  y none          continue
+op   d1 rsub-int                    22s  y none          continue
+op   d2 mul-int/lit16               22s  y none          continue
+op   d3 div-int/lit16               22s  y none          continue|throw
+op   d4 rem-int/lit16               22s  y none          continue|throw
+op   d5 and-int/lit16               22s  y none          continue
+op   d6 or-int/lit16                22s  y none          continue
+op   d7 xor-int/lit16               22s  y none          continue
+op   d8 add-int/lit8                22b  y none          continue
+op   d9 rsub-int/lit8               22b  y none          continue
+op   da mul-int/lit8                22b  y none          continue
+op   db div-int/lit8                22b  y none          continue|throw
+op   dc rem-int/lit8                22b  y none          continue|throw
+op   dd and-int/lit8                22b  y none          continue
+op   de or-int/lit8                 22b  y none          continue
+op   df xor-int/lit8                22b  y none          continue
+op   e0 shl-int/lit8                22b  y none          continue
+op   e1 shr-int/lit8                22b  y none          continue
+op   e2 ushr-int/lit8               22b  y none          continue
+
+#
+# Optimized opcodes (not valid in an unoptimized dex file)
+#
+
+op   e3 +iget-volatile              22c  y field-ref     optimized|continue|throw
+op   e4 +iput-volatile              22c  n field-ref     optimized|continue|throw
+op   e5 +sget-volatile              21c  y field-ref     optimized|continue|throw
+op   e6 +sput-volatile              21c  n field-ref     optimized|continue|throw
+op   e7 +iget-object-volatile       22c  y field-ref     optimized|continue|throw
+op   e8 +iget-wide-volatile         22c  y field-ref     optimized|continue|throw
+op   e9 +iput-wide-volatile         22c  n field-ref     optimized|continue|throw
+op   ea +sget-wide-volatile         21c  y field-ref     optimized|continue|throw
+op   eb +sput-wide-volatile         21c  n field-ref     optimized|continue|throw
+
+# Technically "breakpoint" isn't really an optimized opcode, but it
+# fits the label in terms of not being valid in regular dex files.
+op   ec ^breakpoint                 00x  n unknown       optimized
+
+op   ed ^throw-verification-error   20bc n varies        optimized|throw
+op   ee +execute-inline             35mi n inline-method optimized|continue|throw
+op   ef +execute-inline/range       3rmi n inline-method optimized|continue|throw
+
+op   f0 +invoke-object-init/range   35c  n method-ref    optimized|continue|throw|invoke
+op   f1 +return-void-barrier        10x  n none          optimized|return
+op   f2 +iget-quick                 22cs y field-offset  optimized|continue|throw
+
+# unused: op f3..f9
+
+#
+# Bytecodes relating to method handles API.
+#
+
+# Invoke-polymorphic
+op   fa invoke-polymorphic          45cc n method-and-proto-ref continue|throw|invoke
+op   fb invoke-polymorphic/range    4rcc n method-and-proto-ref continue|throw|invoke
+op   fc invoke-custom               35c  n call-site-ref continue|throw|invoke
+op   fd invoke-custom/range         3rc  n call-site-ref continue|throw|invoke
+
+# Constant loading for method handles and method types. NB these may throw OOME
+op   fe const-method-handle         21c y method-handle-ref continue|throw
+op   ff const-method-type           21c y proto-ref         continue|throw
+
diff --git a/opcode-gen/opcode-gen b/opcode-gen/opcode-gen
new file mode 100755
index 0000000..b8e4397
--- /dev/null
+++ b/opcode-gen/opcode-gen
@@ -0,0 +1,67 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# opcode-gen <file>
+#
+# This script uses the file bytecodes.txt (in this directory) to
+# generate code inside the given <file>, based on the directives found
+# in that file. Refer to those files to understand what's being
+# generated. (Look for comments that say "BEGIN(name)" where "name" is
+# one of the "emission" directives defined in opcode-gen.awk in this
+# directory.)
+
+file="$1"
+tmpfile="/tmp/$$.txt"
+
+echo "processing `basename $1`" 1>&2
+
+if [ "x$1" = "x" ]; then
+    echo "must specify a file" 1>&2
+    exit 1
+fi
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+bytecodeFile="$progdir/bytecode.txt"
+
+awk -v "bytecodeFile=$bytecodeFile" -f "$progdir/opcode-gen.awk" \
+    "$file" > "$tmpfile"
+
+if [ "$?" = "0" ]; then
+    cp "$tmpfile" "$file"
+    rm "$tmpfile"
+else
+    echo "error running awk" 1>&2
+    exit 1
+fi
diff --git a/opcode-gen/opcode-gen.awk b/opcode-gen/opcode-gen.awk
new file mode 100644
index 0000000..16823bb
--- /dev/null
+++ b/opcode-gen/opcode-gen.awk
@@ -0,0 +1,542 @@
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+#
+# Awk helper script for opcode-gen.
+#
+
+#
+# Initialization.
+#
+
+BEGIN {
+    MAX_OPCODE = 65535;
+    MAX_PACKED_OPCODE = 511;
+    MAX_PACKED_OPCODE = 255; # TODO: Not for long!
+    initIndexTypes();
+    initFlags();
+    if (readBytecodes()) exit 1;
+    deriveOpcodeChains();
+    createPackedTables();
+    consumeUntil = "";
+    emission = "";
+}
+
+#
+# General control (must appear above directive handlers).
+#
+
+# Clear out the preexisting output within a directive section.
+consumeUntil != "" {
+    if (index($0, consumeUntil) != 0) {
+        consumeUntil = "";
+        print;
+    }
+
+    next;
+}
+
+# Detect directives.
+/BEGIN\([a-z-]*\)/ {
+    i = match($0, /BEGIN\([a-z-]*\)/);
+    emission = substr($0, i + 6, RLENGTH - 7);
+    consumeUntil = "END(" emission ")";
+    emissionHandled = 0;
+}
+
+# Most lines just get copied from the source as-is, including the start
+# comment for directives.
+{
+    print;
+}
+
+#
+# Handlers for all of the directives.
+#
+
+emission == "opcodes" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_OPCODE; i++) {
+        if (isUnused(i) || isOptimized(i)) continue;
+        printf("    public static final int %s = 0x%s;\n",
+               constName[i], hex[i]);
+    }
+}
+
+emission == "first-opcodes" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_OPCODE; i++) {
+        if (isUnused(i) || isOptimized(i)) continue;
+        if (isFirst[i] == "true") {
+            printf("    //     Opcodes.%s\n", constName[i]);
+        }
+    }
+}
+
+emission == "dops" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_OPCODE; i++) {
+        if (isUnused(i) || isOptimized(i)) continue;
+
+        nextOp = nextOpcode[i];
+        nextOp = (nextOp == -1) ? "NO_NEXT" : constName[nextOp];
+
+        printf("    public static final Dop %s =\n" \
+               "        new Dop(Opcodes.%s, Opcodes.%s,\n" \
+               "            Opcodes.%s, Form%s.THE_ONE, %s);\n\n",
+               constName[i], constName[i], family[i], nextOp, format[i],
+               hasResult[i]);
+    }
+}
+
+emission == "opcode-info-defs" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_OPCODE; i++) {
+        if (isUnused(i) || isOptimized(i)) continue;
+
+        itype = toupper(indexType[i]);
+        gsub(/-/, "_", itype);
+
+        printf("    public static final Info %s =\n" \
+               "        new Info(Opcodes.%s, \"%s\",\n" \
+               "            InstructionCodec.FORMAT_%s, IndexType.%s);\n\n", \
+               constName[i], constName[i], name[i], toupper(format[i]), itype);
+    }
+}
+
+emission == "dops-init" || emission == "opcode-info-init" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_OPCODE; i++) {
+        if (isUnused(i) || isOptimized(i)) continue;
+        printf("        set(%s);\n", constName[i]);
+    }
+}
+
+emission == "libcore-opcodes" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_OPCODE; i++) {
+        if (isUnused(i) || isOptimized(i)) continue;
+        printf("    int OP_%-28s = 0x%04x;\n", constName[i], i);
+    }
+}
+
+emission == "libcore-maximum-values" {
+    emissionHandled = 1;
+
+    printf("        MAXIMUM_VALUE = %d;\n", MAX_OPCODE);
+    printf("        MAXIMUM_PACKED_VALUE = %d;\n", MAX_PACKED_OPCODE);
+}
+
+emission == "libdex-maximum-values" {
+    emissionHandled = 1;
+
+    printf("#define kMaxOpcodeValue 0x%x\n", MAX_OPCODE);
+    printf("#define kNumPackedOpcodes 0x%x\n", MAX_PACKED_OPCODE + 1);
+}
+
+emission == "libdex-opcode-enum" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_PACKED_OPCODE; i++) {
+        printf("    OP_%-28s = 0x%02x,\n", packedConstName[i], i);
+    }
+}
+
+emission == "libdex-goto-table" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_PACKED_OPCODE; i++) {
+        content = sprintf("        H(OP_%s),", packedConstName[i]);
+        printf("%-78s\\\n", content);
+    }
+}
+
+emission == "libdex-opcode-names" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_PACKED_OPCODE; i++) {
+        printf("    \"%s\",\n", packedName[i]);
+    }
+}
+
+emission == "libdex-widths" {
+    emissionHandled = 1;
+
+    col = 1;
+    for (i = 0; i <= MAX_PACKED_OPCODE; i++) {
+        value = sprintf("%d,", packedWidth[i]);
+        col = colPrint(value, (i == MAX_PACKED_OPCODE), col, 16, 2, "    ");
+    }
+}
+
+emission == "libdex-flags" {
+    emissionHandled = 1;
+
+    for (i = 0; i <= MAX_PACKED_OPCODE; i++) {
+        value = flagsToC(packedFlags[i]);
+        printf("    %s,\n", value);
+    }
+}
+
+emission == "libdex-formats" {
+    emissionHandled = 1;
+
+    col = 1;
+    for (i = 0; i <= MAX_PACKED_OPCODE; i++) {
+        value = sprintf("kFmt%s,", packedFormat[i]);
+        col = colPrint(value, (i == MAX_PACKED_OPCODE), col, 7, 9, "    ");
+    }
+}
+
+emission == "libdex-index-types" {
+    emissionHandled = 1;
+
+    col = 1;
+    for (i = 0; i <= MAX_PACKED_OPCODE; i++) {
+        value = sprintf("%s,", indexTypeValues[packedIndexType[i]]);
+        col = colPrint(value, (i == MAX_PACKED_OPCODE), col, 3, 19, "    ");
+    }
+}
+
+# Handle the end of directive processing (must appear after the directive
+# clauses).
+emission != "" {
+    if (!emissionHandled) {
+        printf("WARNING: unknown tag \"%s\"\n", emission) >"/dev/stderr";
+        consumeUntil = "";
+    }
+
+    emission = "";
+}
+
+#
+# Helper functions.
+#
+
+# Helper to print out an element in a multi-column fashion. It returns
+# the (one-based) column number that the next element will be printed
+# in.
+function colPrint(value, isLast, col, numCols, colWidth, linePrefix) {
+    isLast = (isLast || (col == numCols));
+    printf("%s%-*s%s",
+        (col == 1) ? linePrefix : " ",
+        isLast ? 1 : colWidth, value,
+        isLast ? "\n" : "");
+
+    return (col % numCols) + 1;
+}
+
+# Read the bytecode description file.
+function readBytecodes(i, parts, line, cmd, status, count) {
+    # locals: parts, line, cmd, status, count
+    for (;;) {
+        # Read a line.
+        status = getline line <bytecodeFile;
+        if (status == 0) break;
+        if (status < 0) {
+            print "trouble reading bytecode file";
+            exit 1;
+        }
+
+        # Clean up the line and extract the command.
+        gsub(/  */, " ", line);
+        sub(/ *#.*$/, "", line);
+        sub(/ $/, "", line);
+        sub(/^ /, "", line);
+        count = split(line, parts);
+        if (count == 0) continue; # Blank or comment line.
+        cmd = parts[1];
+        sub(/^[a-z][a-z]* */, "", line); # Remove the command from line.
+
+        if (cmd == "op") {
+            status = defineOpcode(line);
+        } else if (cmd == "format") {
+            status = defineFormat(line);
+        } else {
+            status = -1;
+        }
+
+        if (status != 0) {
+            printf("syntax error on line: %s\n", line) >"/dev/stderr";
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+# Define an opcode.
+function defineOpcode(line, count, parts, idx) {
+    # locals: count, parts, idx
+    count = split(line, parts);
+    if (count != 6)  return -1;
+    idx = parseHex(parts[1]);
+    if (idx < 0) return -1;
+
+    # Extract directly specified values from the line.
+    hex[idx] = parts[1];
+    name[idx] = parts[2];
+    format[idx] = parts[3];
+    hasResult[idx] = (parts[4] == "n") ? "false" : "true";
+    indexType[idx] = parts[5];
+    flags[idx] = parts[6];
+
+    # Calculate derived values.
+
+    constName[idx] = toupper(name[idx]);
+    gsub("[/-]", "_", constName[idx]);   # Dash and slash become underscore.
+    gsub("[+^]", "", constName[idx]);    # Plus and caret are removed.
+    split(name[idx], parts, "/");
+
+    family[idx] = toupper(parts[1]);
+    gsub("-", "_", family[idx]);         # Dash becomes underscore.
+    gsub("[+^]", "", family[idx]);       # Plus and caret are removed.
+
+    split(format[idx], parts, "");       # Width is the first format char.
+    width[idx] = parts[1];
+
+    # This association is used when computing "next" opcodes.
+    familyFormat[family[idx],format[idx]] = idx;
+
+    # Verify values.
+
+    if (nextFormat[format[idx]] == "") {
+        printf("unknown format: %s\n", format[idx]) >"/dev/stderr";
+        return 1;
+    }
+
+    if (indexTypeValues[indexType[idx]] == "") {
+        printf("unknown index type: %s\n", indexType[idx]) >"/dev/stderr";
+        return 1;
+    }
+
+    if (flagsToC(flags[idx]) == "") {
+        printf("bogus flags: %s\n", flags[idx]) >"/dev/stderr";
+        return 1;
+    }
+
+    return 0;
+}
+
+# Define a format family.
+function defineFormat(line, count, parts, i) {
+    # locals: count, parts, i
+    count = split(line, parts);
+    if (count < 1)  return -1;
+    formats[parts[1]] = line;
+
+    parts[count + 1] = "none";
+    for (i = 1; i <= count; i++) {
+        nextFormat[parts[i]] = parts[i + 1];
+    }
+
+    return 0;
+}
+
+# Produce the nextOpcode and isFirst arrays. The former indicates, for
+# each opcode, which one should be tried next when doing instruction
+# fitting. The latter indicates which opcodes are at the head of an
+# instruction fitting chain.
+function deriveOpcodeChains(i, op) {
+    # locals: i, op
+
+    for (i = 0; i <= MAX_OPCODE; i++) {
+        if (isUnused(i)) continue;
+        isFirst[i] = "true";
+    }
+
+    for (i = 0; i <= MAX_OPCODE; i++) {
+        if (isUnused(i)) continue;
+        op = findNextOpcode(i);
+        nextOpcode[i] = op;
+        if (op != -1) {
+            isFirst[op] = "false";
+        }
+    }
+}
+
+# Given an opcode by index, find the next opcode in the same family
+# (that is, with the same base name) to try when matching instructions
+# to opcodes. This simply walks the nextFormat chain looking for a
+# match. This returns the index of the matching opcode or -1 if there
+# is none.
+function findNextOpcode(idx, fam, fmt, result) {
+    # locals: fam, fmt, result
+    fam = family[idx];
+    fmt = format[idx];
+
+    # Not every opcode has a version with every possible format, so
+    # we have to iterate down the chain until we find one or run out of
+    # formats to try.
+    for (fmt = nextFormat[format[idx]]; fmt != "none"; fmt = nextFormat[fmt]) {
+        result = familyFormat[fam,fmt];
+        if (result != "") {
+            return result;
+        }
+    }
+
+    return -1;
+}
+
+# Construct the tables of info indexed by packed opcode. The packed opcode
+# values are in the range 0-0x1ff, whereas the unpacked opcodes sparsely
+# span the range 0-0xffff.
+function createPackedTables(i, op) {
+    # locals: i, op
+    for (i = 0; i <= MAX_PACKED_OPCODE; i++) {
+        op = unpackOpcode(i);
+        if (isUnused(op)) {
+            packedName[i]      = unusedName(op);
+            packedConstName[i] = unusedConstName(op);
+            packedFormat[i]    = "00x";
+            packedFlags[i]     = 0;
+            packedWidth[i]     = 0;
+            packedIndexType[i] = "unknown";
+        } else {
+            packedName[i]      = name[op];
+            packedConstName[i] = constName[op];
+            packedFormat[i]    = format[op];
+            packedFlags[i]     = flags[op];
+            packedWidth[i]     = width[op];
+            packedIndexType[i] = indexType[op];
+        }
+    }
+}
+
+# Given a packed opcode, returns the raw (unpacked) opcode value.
+function unpackOpcode(idx) {
+    # Note: This must be the inverse of the corresponding code in
+    # libdex/DexOpcodes.h.
+    if (idx <= 255) {
+        return idx;
+    } else {
+        idx -= 256;
+        return (idx * 256) + 255;
+    }
+}
+
+# Returns the "unused" name of the given opcode (by index).
+# That is, this is the human-oriented name to use for an opcode
+# definition in cases
+# where the opcode isn't used.
+function unusedName(idx) {
+    if (idx <= 255) {
+         return sprintf("unused-%02x", idx);
+    } else {
+         return sprintf("unused-%04x", idx);
+    }
+}
+
+# Returns the "unused" constant name of the given opcode (by index).
+# That is, this is the name to use for a constant definition in cases
+# where the opcode isn't used.
+function unusedConstName(idx) {
+    if (idx <= 255) {
+         return toupper(sprintf("UNUSED_%02x", idx));
+    } else {
+         return toupper(sprintf("UNUSED_%04x", idx));
+    }
+}
+
+# Convert a hex value to an int.
+function parseHex(hex, result, chars, count, c, i) {
+    # locals: result, chars, count, c, i
+    hex = tolower(hex);
+    count = split(hex, chars, "");
+    result = 0;
+    for (i = 1; i <= count; i++) {
+        c = index("0123456789abcdef", chars[i]);
+        if (c == 0) {
+            printf("bogus hex value: %s\n", hex) >"/dev/stderr";
+            return -1;
+        }
+        result = (result * 16) + c - 1;
+    }
+    return result;
+}
+
+# Initialize the indexTypes data.
+function initIndexTypes() {
+    indexTypeValues["unknown"]              = "kIndexUnknown";
+    indexTypeValues["none"]                 = "kIndexNone";
+    indexTypeValues["varies"]               = "kIndexVaries";
+    indexTypeValues["type-ref"]             = "kIndexTypeRef";
+    indexTypeValues["string-ref"]           = "kIndexStringRef";
+    indexTypeValues["method-ref"]           = "kIndexMethodRef";
+    indexTypeValues["field-ref"]            = "kIndexFieldRef";
+    indexTypeValues["inline-method"]        = "kIndexInlineMethod";
+    indexTypeValues["vtable-offset"]        = "kIndexVtableOffset";
+    indexTypeValues["field-offset"]         = "kIndexFieldOffset";
+    indexTypeValues["method-and-proto-ref"] = "kIndexMethodAndProtoRef";
+    indexTypeValues["call-site-ref"]        = "kIndexCallSiteRef";
+    indexTypeValues["method-handle-ref"]    = "kIndexMethodHandleRef";
+    indexTypeValues["proto-ref"]            = "kIndexProtoRef";
+}
+
+# Initialize the flags data.
+function initFlags() {
+    flagValues["branch"]        = "kInstrCanBranch";
+    flagValues["continue"]      = "kInstrCanContinue";
+    flagValues["switch"]        = "kInstrCanSwitch";
+    flagValues["throw"]         = "kInstrCanThrow";
+    flagValues["return"]        = "kInstrCanReturn";
+    flagValues["invoke"]        = "kInstrInvoke";
+    flagValues["optimized"]     = "0"; # Not represented in C output
+    flagValues["0"]             = "0";
+}
+
+# Translate the given flags into the equivalent C expression. Returns
+# "" on error.
+function flagsToC(f, parts, result, i) {
+    # locals: parts, result, i
+    count = split(f, parts, /\|/); # Split input at pipe characters.
+    result = "0";
+
+    for (i = 1; i <= count; i++) {
+        f = flagValues[parts[i]];
+        if (f == "") {
+            printf("bogus flag: %s\n", f) >"/dev/stderr";
+            return ""; # Bogus flag name.
+        } else if (f == "0") {
+            # Nothing to append for this case.
+        } else if (result == "0") {
+            result = f;
+        } else {
+            result = result "|" f;
+        }
+    }
+
+    return result;
+}
+
+# Returns true if the given opcode (by index) is an "optimized" opcode.
+function isOptimized(idx, parts, f) {
+    # locals: parts, f
+    split(flags[idx], parts, /\|/); # Split flags[idx] at pipes.
+    for (f in parts) {
+        if (parts[f] == "optimized") return 1;
+    }
+    return 0;
+}
+
+# Returns true if there is no definition for the given opcode (by index).
+function isUnused(idx) {
+    return (name[idx] == "");
+}
diff --git a/opcode-gen/regen-all b/opcode-gen/regen-all
new file mode 100755
index 0000000..161cda9
--- /dev/null
+++ b/opcode-gen/regen-all
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+
+# Be in the parent of the progdir when running the rest of the script.
+cd ".."
+
+${progdir}/opcode-gen dx/src/com/android/dx/dex/code/Dops.java
+${progdir}/opcode-gen dx/src/com/android/dx/dex/code/RopToDop.java
+${progdir}/opcode-gen dx/src/com/android/dx/io/OpcodeInfo.java
+${progdir}/opcode-gen dx/src/com/android/dx/io/Opcodes.java
+${progdir}/opcode-gen libdex/DexOpcodes.cpp
+${progdir}/opcode-gen libdex/DexOpcodes.h
+${progdir}/opcode-gen libdex/InstrUtils.cpp
+
+# It's a minor shame that these files live in a different top-level project.
+# So it goes.
+${progdir}/opcode-gen \
+    ../libcore/dalvik/src/main/java/dalvik/bytecode/OpcodeInfo.java
+${progdir}/opcode-gen \
+    ../libcore/dalvik/src/main/java/dalvik/bytecode/Opcodes.java
diff --git a/tools/dexdeps/Android.bp b/tools/dexdeps/Android.bp
new file mode 100644
index 0000000..3d914bf
--- /dev/null
+++ b/tools/dexdeps/Android.bp
@@ -0,0 +1,31 @@
+// Copyright (C) 2009 The Android Open Source Project
+//
+// 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.
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "dalvik_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["dalvik_license"],
+}
+
+java_binary_host {
+    name: "dexdeps",
+    manifest: "etc/manifest.txt",
+    srcs: [
+        "src/**/*.java",
+    ],
+    wrapper: "etc/dexdeps",
+}
diff --git a/tools/dexdeps/README.txt b/tools/dexdeps/README.txt
new file mode 100644
index 0000000..22380ce
--- /dev/null
+++ b/tools/dexdeps/README.txt
@@ -0,0 +1,32 @@
+dexdeps -- DEX external dependency dump
+
+
+This tool dumps a list of fields and methods that a DEX file uses but does
+not define.  When combined with a list of public APIs, it can be used to
+determine whether an APK is accessing fields and calling methods that it
+shouldn't be.  It may also be useful in determining whether an application
+requires a certain minimum API level to execute.
+
+Basic usage:
+
+  dexdeps [options] <file.{dex,apk,jar}> ...
+
+For zip archives (including .jar and .apk), dexdeps will look for a
+"classes.dex" entry.
+
+Supported options are:
+
+  --format={brief,xml}
+
+    Specifies the output format.
+
+    "brief" produces one line of output for each field and method.  Field
+    and argument types are shown as descriptor strings.
+
+    "xml" produces a larger output file, readable with an XML browser.  Types
+    are shown in a more human-readable form (e.g. "[I" becomes "int[]").
+
+  --just-classes
+
+    Indicates that output should only include a list of classes, as
+    opposed to also listing fields and methods.
diff --git a/tools/dexdeps/etc/dexdeps b/tools/dexdeps/etc/dexdeps
new file mode 100644
index 0000000..dc628bd
--- /dev/null
+++ b/tools/dexdeps/etc/dexdeps
@@ -0,0 +1,69 @@
+#!/bin/bash
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# 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.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+jarfile=dexdeps.jar
+libdir="$progdir"
+if [ ! -r "$libdir/$jarfile" ]
+then
+    libdir=`dirname "$progdir"`/tools/lib
+fi
+if [ ! -r "$libdir/$jarfile" ]
+then
+    libdir=`dirname "$progdir"`/framework
+fi
+if [ ! -r "$libdir/$jarfile" ]
+then
+    echo `basename "$prog"`": can't find $jarfile"
+    exit 1
+fi
+
+javaOpts=""
+
+# Alternatively, this will extract any parameter "-Jxxx" from the command line
+# and pass them to Java (instead of to dexdeps).
+while expr "x$1" : 'x-J' >/dev/null; do
+    opt=`expr "$1" : '-J\(.*\)'`
+    javaOpts="${javaOpts} -${opt}"
+    shift
+done
+
+if [ "$OSTYPE" = "cygwin" ] ; then
+    jarpath=`cygpath -w  "$libdir/$jarfile"`
+else
+    jarpath="$libdir/$jarfile"
+fi
+
+exec java $javaOpts -jar "$jarpath" "$@"
diff --git a/tools/dexdeps/etc/manifest.txt b/tools/dexdeps/etc/manifest.txt
new file mode 100644
index 0000000..7606744
--- /dev/null
+++ b/tools/dexdeps/etc/manifest.txt
@@ -0,0 +1 @@
+Main-Class: com.android.dexdeps.Main
diff --git a/tools/dexdeps/src/Android.bp b/tools/dexdeps/src/Android.bp
new file mode 100644
index 0000000..7487902
--- /dev/null
+++ b/tools/dexdeps/src/Android.bp
@@ -0,0 +1,41 @@
+// Copyright (C) 2009 The Android Open Source Project
+//
+// 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.
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "dalvik_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["dalvik_license"],
+}
+
+droidstubs {
+    name: "dexdeps-doc-stubs",
+    srcs: [
+        "com/**/*.java",
+    ],
+    create_doc_stubs: true,
+}
+
+droiddoc {
+    name: "dexdeps-docs",
+    srcs: [
+        ":dexdeps-doc-stubs",
+    ],
+    libs: [
+        "stub-annotations",
+    ],
+    custom_template: "droiddoc-templates-sdk",
+}
diff --git a/tools/dexdeps/src/com/android/dexdeps/ClassRef.java b/tools/dexdeps/src/com/android/dexdeps/ClassRef.java
new file mode 100644
index 0000000..7f6edc9
--- /dev/null
+++ b/tools/dexdeps/src/com/android/dexdeps/ClassRef.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dexdeps;
+
+import java.util.ArrayList;
+
+public class ClassRef {
+    private String mClassName;
+    private ArrayList<FieldRef> mFieldRefs;
+    private ArrayList<MethodRef> mMethodRefs;
+
+    /**
+     * Initializes a new class reference.
+     */
+    public ClassRef(String className) {
+        mClassName = className;
+        mFieldRefs = new ArrayList<FieldRef>();
+        mMethodRefs = new ArrayList<MethodRef>();
+    }
+
+    /**
+     * Adds the field to the field list.
+     */
+    public void addField(FieldRef fref) {
+        mFieldRefs.add(fref);
+    }
+
+    /**
+     * Returns the field list as an array.
+     */
+    public FieldRef[] getFieldArray() {
+        return mFieldRefs.toArray(new FieldRef[mFieldRefs.size()]);
+    }
+
+    /**
+     * Adds the method to the method list.
+     */
+    public void addMethod(MethodRef mref) {
+        mMethodRefs.add(mref);
+    }
+
+    /**
+     * Returns the method list as an array.
+     */
+    public MethodRef[] getMethodArray() {
+        return mMethodRefs.toArray(new MethodRef[mMethodRefs.size()]);
+    }
+
+    /**
+     * Gets the class name.
+     */
+    public String getName() {
+        return mClassName;
+    }
+}
diff --git a/tools/dexdeps/src/com/android/dexdeps/DexData.java b/tools/dexdeps/src/com/android/dexdeps/DexData.java
new file mode 100644
index 0000000..1b6cc98
--- /dev/null
+++ b/tools/dexdeps/src/com/android/dexdeps/DexData.java
@@ -0,0 +1,624 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dexdeps;
+
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+
+/**
+ * Data extracted from a DEX file.
+ */
+public class DexData {
+    private RandomAccessFile mDexFile;
+    private HeaderItem mHeaderItem;
+    private String[] mStrings;              // strings from string_data_*
+    private TypeIdItem[] mTypeIds;
+    private ProtoIdItem[] mProtoIds;
+    private FieldIdItem[] mFieldIds;
+    private MethodIdItem[] mMethodIds;
+    private ClassDefItem[] mClassDefs;
+
+    private byte tmpBuf[] = new byte[4];
+    private ByteOrder mByteOrder = ByteOrder.LITTLE_ENDIAN;
+
+    /**
+     * Constructs a new DexData for this file.
+     */
+    public DexData(RandomAccessFile raf) {
+        mDexFile = raf;
+    }
+
+    /**
+     * Loads the contents of the DEX file into our data structures.
+     *
+     * @throws IOException if we encounter a problem while reading
+     * @throws DexDataException if the DEX contents look bad
+     */
+    public void load() throws IOException {
+        parseHeaderItem();
+
+        loadStrings();
+        loadTypeIds();
+        loadProtoIds();
+        loadFieldIds();
+        loadMethodIds();
+        loadClassDefs();
+
+        markInternalClasses();
+    }
+
+    /**
+     * Verifies the given magic number.
+     */
+    private static boolean verifyMagic(byte[] magic) {
+        return Arrays.equals(magic, HeaderItem.DEX_FILE_MAGIC_v035) ||
+            Arrays.equals(magic, HeaderItem.DEX_FILE_MAGIC_v037) ||
+            Arrays.equals(magic, HeaderItem.DEX_FILE_MAGIC_v038) ||
+            Arrays.equals(magic, HeaderItem.DEX_FILE_MAGIC_v039);
+    }
+
+    /**
+     * Parses the interesting bits out of the header.
+     */
+    void parseHeaderItem() throws IOException {
+        mHeaderItem = new HeaderItem();
+
+        seek(0);
+
+        byte[] magic = new byte[8];
+        readBytes(magic);
+        if (!verifyMagic(magic)) {
+            System.err.println("Magic number is wrong -- are you sure " +
+                "this is a DEX file?");
+            throw new DexDataException();
+        }
+
+        /*
+         * Read the endian tag, so we properly swap things as we read
+         * them from here on.
+         */
+        seek(8+4+20+4+4);
+        mHeaderItem.endianTag = readInt();
+        if (mHeaderItem.endianTag == HeaderItem.ENDIAN_CONSTANT) {
+            /* do nothing */
+        } else if (mHeaderItem.endianTag == HeaderItem.REVERSE_ENDIAN_CONSTANT){
+            /* file is big-endian (!), reverse future reads */
+            mByteOrder = ByteOrder.BIG_ENDIAN;
+        } else {
+            System.err.println("Endian constant has unexpected value " +
+                Integer.toHexString(mHeaderItem.endianTag));
+            throw new DexDataException();
+        }
+
+        seek(8+4+20);  // magic, checksum, signature
+        ByteBuffer buffer = readByteBuffer(Integer.BYTES * 20);
+        mHeaderItem.fileSize = buffer.getInt();
+        mHeaderItem.headerSize = buffer.getInt();
+        /*mHeaderItem.endianTag =*/ buffer.getInt();
+        /*mHeaderItem.linkSize =*/ buffer.getInt();
+        /*mHeaderItem.linkOff =*/ buffer.getInt();
+        /*mHeaderItem.mapOff =*/ buffer.getInt();
+        mHeaderItem.stringIdsSize = buffer.getInt();
+        mHeaderItem.stringIdsOff = buffer.getInt();
+        mHeaderItem.typeIdsSize = buffer.getInt();
+        mHeaderItem.typeIdsOff = buffer.getInt();
+        mHeaderItem.protoIdsSize = buffer.getInt();
+        mHeaderItem.protoIdsOff = buffer.getInt();
+        mHeaderItem.fieldIdsSize = buffer.getInt();
+        mHeaderItem.fieldIdsOff = buffer.getInt();
+        mHeaderItem.methodIdsSize = buffer.getInt();
+        mHeaderItem.methodIdsOff = buffer.getInt();
+        mHeaderItem.classDefsSize = buffer.getInt();
+        mHeaderItem.classDefsOff = buffer.getInt();
+        /*mHeaderItem.dataSize =*/ buffer.getInt();
+        /*mHeaderItem.dataOff =*/ buffer.getInt();
+    }
+
+    /**
+     * Loads the string table out of the DEX.
+     *
+     * First we read all of the string_id_items, then we read all of the
+     * string_data_item.  Doing it this way should allow us to avoid
+     * seeking around in the file.
+     */
+    void loadStrings() throws IOException {
+        int count = mHeaderItem.stringIdsSize;
+        int stringOffsets[] = new int[count];
+
+        //System.out.println("reading " + count + " strings");
+
+        seek(mHeaderItem.stringIdsOff);
+        readByteBuffer(Integer.BYTES * count).asIntBuffer().get(stringOffsets);
+
+        mStrings = new String[count];
+
+        seek(stringOffsets[0]);
+        for (int i = 0; i < count; i++) {
+            seek(stringOffsets[i]);         // should be a no-op
+            mStrings[i] = readString();
+            //System.out.println("STR: " + i + ": " + mStrings[i]);
+        }
+    }
+
+    /**
+     * Loads the type ID list.
+     */
+    void loadTypeIds() throws IOException {
+        int count = mHeaderItem.typeIdsSize;
+        mTypeIds = new TypeIdItem[count];
+
+        //System.out.println("reading " + count + " typeIds");
+        seek(mHeaderItem.typeIdsOff);
+        ByteBuffer buffer = readByteBuffer(Integer.BYTES * count);
+        for (int i = 0; i < count; i++) {
+            mTypeIds[i] = new TypeIdItem();
+            mTypeIds[i].descriptorIdx = buffer.getInt();
+
+            //System.out.println(i + ": " + mTypeIds[i].descriptorIdx +
+            //    " " + mStrings[mTypeIds[i].descriptorIdx]);
+        }
+    }
+
+    /**
+     * Loads the proto ID list.
+     */
+    void loadProtoIds() throws IOException {
+        int count = mHeaderItem.protoIdsSize;
+        mProtoIds = new ProtoIdItem[count];
+
+        //System.out.println("reading " + count + " protoIds");
+        seek(mHeaderItem.protoIdsOff);
+        ByteBuffer buffer = readByteBuffer(Integer.BYTES * 3 * count);
+
+        /*
+         * Read the proto ID items.
+         */
+        for (int i = 0; i < count; i++) {
+            mProtoIds[i] = new ProtoIdItem();
+            mProtoIds[i].shortyIdx = buffer.getInt();
+            mProtoIds[i].returnTypeIdx = buffer.getInt();
+            mProtoIds[i].parametersOff = buffer.getInt();
+
+            //System.out.println(i + ": " + mProtoIds[i].shortyIdx +
+            //    " " + mStrings[mProtoIds[i].shortyIdx]);
+        }
+
+        /*
+         * Go back through and read the type lists.
+         */
+        for (int i = 0; i < count; i++) {
+            ProtoIdItem protoId = mProtoIds[i];
+
+            int offset = protoId.parametersOff;
+
+            if (offset == 0) {
+                protoId.types = new int[0];
+                continue;
+            } else {
+                seek(offset);
+                int size = readInt();       // #of entries in list
+                buffer = readByteBuffer(Short.BYTES * size);
+                protoId.types = new int[size];
+
+                for (int j = 0; j < size; j++) {
+                    protoId.types[j] = buffer.getShort() & 0xffff;
+                }
+            }
+        }
+    }
+
+    /**
+     * Loads the field ID list.
+     */
+    void loadFieldIds() throws IOException {
+        int count = mHeaderItem.fieldIdsSize;
+        mFieldIds = new FieldIdItem[count];
+
+        //System.out.println("reading " + count + " fieldIds");
+        seek(mHeaderItem.fieldIdsOff);
+        ByteBuffer buffer = readByteBuffer((Integer.BYTES + Short.BYTES * 2) * count);
+        for (int i = 0; i < count; i++) {
+            mFieldIds[i] = new FieldIdItem();
+            mFieldIds[i].classIdx = buffer.getShort() & 0xffff;
+            mFieldIds[i].typeIdx = buffer.getShort() & 0xffff;
+            mFieldIds[i].nameIdx = buffer.getInt();
+
+            //System.out.println(i + ": " + mFieldIds[i].nameIdx +
+            //    " " + mStrings[mFieldIds[i].nameIdx]);
+        }
+    }
+
+    /**
+     * Loads the method ID list.
+     */
+    void loadMethodIds() throws IOException {
+        int count = mHeaderItem.methodIdsSize;
+        mMethodIds = new MethodIdItem[count];
+
+        //System.out.println("reading " + count + " methodIds");
+        seek(mHeaderItem.methodIdsOff);
+        ByteBuffer buffer = readByteBuffer((Integer.BYTES + Short.BYTES * 2) * count);
+        for (int i = 0; i < count; i++) {
+            mMethodIds[i] = new MethodIdItem();
+            mMethodIds[i].classIdx = buffer.getShort() & 0xffff;
+            mMethodIds[i].protoIdx = buffer.getShort() & 0xffff;
+            mMethodIds[i].nameIdx = buffer.getInt();
+
+            //System.out.println(i + ": " + mMethodIds[i].nameIdx +
+            //    " " + mStrings[mMethodIds[i].nameIdx]);
+        }
+    }
+
+    /**
+     * Loads the class defs list.
+     */
+    void loadClassDefs() throws IOException {
+        int count = mHeaderItem.classDefsSize;
+        mClassDefs = new ClassDefItem[count];
+
+        //System.out.println("reading " + count + " classDefs");
+        seek(mHeaderItem.classDefsOff);
+        ByteBuffer buffer = readByteBuffer(Integer.BYTES * 8 * count);
+        for (int i = 0; i < count; i++) {
+            mClassDefs[i] = new ClassDefItem();
+            mClassDefs[i].classIdx = buffer.getInt();
+
+            /* access_flags = */ buffer.getInt();
+            /* superclass_idx = */ buffer.getInt();
+            /* interfaces_off = */ buffer.getInt();
+            /* source_file_idx = */ buffer.getInt();
+            /* annotations_off = */ buffer.getInt();
+            /* class_data_off = */ buffer.getInt();
+            /* static_values_off = */ buffer.getInt();
+
+            //System.out.println(i + ": " + mClassDefs[i].classIdx + " " +
+            //    mStrings[mTypeIds[mClassDefs[i].classIdx].descriptorIdx]);
+        }
+    }
+
+    /**
+     * Sets the "internal" flag on type IDs which are defined in the
+     * DEX file or within the VM (e.g. primitive classes and arrays).
+     */
+    void markInternalClasses() {
+        for (int i = mClassDefs.length -1; i >= 0; i--) {
+            mTypeIds[mClassDefs[i].classIdx].internal = true;
+        }
+
+        for (int i = 0; i < mTypeIds.length; i++) {
+            String className = mStrings[mTypeIds[i].descriptorIdx];
+
+            if (className.length() == 1) {
+                // primitive class
+                mTypeIds[i].internal = true;
+            } else if (className.charAt(0) == '[') {
+                mTypeIds[i].internal = true;
+            }
+
+            //System.out.println(i + " " +
+            //    (mTypeIds[i].internal ? "INTERNAL" : "external") + " - " +
+            //    mStrings[mTypeIds[i].descriptorIdx]);
+        }
+    }
+
+
+    /*
+     * =======================================================================
+     *      Queries
+     * =======================================================================
+     */
+
+    /**
+     * Returns the class name, given an index into the type_ids table.
+     */
+    private String classNameFromTypeIndex(int idx) {
+        return mStrings[mTypeIds[idx].descriptorIdx];
+    }
+
+    /**
+     * Returns an array of method argument type strings, given an index
+     * into the proto_ids table.
+     */
+    private String[] argArrayFromProtoIndex(int idx) {
+        ProtoIdItem protoId = mProtoIds[idx];
+        String[] result = new String[protoId.types.length];
+
+        for (int i = 0; i < protoId.types.length; i++) {
+            result[i] = mStrings[mTypeIds[protoId.types[i]].descriptorIdx];
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns a string representing the method's return type, given an
+     * index into the proto_ids table.
+     */
+    private String returnTypeFromProtoIndex(int idx) {
+        ProtoIdItem protoId = mProtoIds[idx];
+        return mStrings[mTypeIds[protoId.returnTypeIdx].descriptorIdx];
+    }
+
+    /**
+     * Returns an array with all of the class references that don't
+     * correspond to classes in the DEX file.  Each class reference has
+     * a list of the referenced fields and methods associated with
+     * that class.
+     */
+    public ClassRef[] getExternalReferences() {
+        // create a sparse array of ClassRef that parallels mTypeIds
+        ClassRef[] sparseRefs = new ClassRef[mTypeIds.length];
+
+        // create entries for all externally-referenced classes
+        int count = 0;
+        for (int i = 0; i < mTypeIds.length; i++) {
+            if (!mTypeIds[i].internal) {
+                sparseRefs[i] =
+                    new ClassRef(mStrings[mTypeIds[i].descriptorIdx]);
+                count++;
+            }
+        }
+
+        // add fields and methods to the appropriate class entry
+        addExternalFieldReferences(sparseRefs);
+        addExternalMethodReferences(sparseRefs);
+
+        // crunch out the sparseness
+        ClassRef[] classRefs = new ClassRef[count];
+        int idx = 0;
+        for (int i = 0; i < mTypeIds.length; i++) {
+            if (sparseRefs[i] != null)
+                classRefs[idx++] = sparseRefs[i];
+        }
+
+        assert idx == count;
+
+        return classRefs;
+    }
+
+    /**
+     * Runs through the list of field references, inserting external
+     * references into the appropriate ClassRef.
+     */
+    private void addExternalFieldReferences(ClassRef[] sparseRefs) {
+        for (int i = 0; i < mFieldIds.length; i++) {
+            if (!mTypeIds[mFieldIds[i].classIdx].internal) {
+                FieldIdItem fieldId = mFieldIds[i];
+                FieldRef newFieldRef = new FieldRef(
+                        classNameFromTypeIndex(fieldId.classIdx),
+                        classNameFromTypeIndex(fieldId.typeIdx),
+                        mStrings[fieldId.nameIdx]);
+                sparseRefs[mFieldIds[i].classIdx].addField(newFieldRef);
+            }
+        }
+    }
+
+    /**
+     * Runs through the list of method references, inserting external
+     * references into the appropriate ClassRef.
+     */
+    private void addExternalMethodReferences(ClassRef[] sparseRefs) {
+        for (int i = 0; i < mMethodIds.length; i++) {
+            if (!mTypeIds[mMethodIds[i].classIdx].internal) {
+                MethodIdItem methodId = mMethodIds[i];
+                MethodRef newMethodRef = new MethodRef(
+                        classNameFromTypeIndex(methodId.classIdx),
+                        argArrayFromProtoIndex(methodId.protoIdx),
+                        returnTypeFromProtoIndex(methodId.protoIdx),
+                        mStrings[methodId.nameIdx]);
+                sparseRefs[mMethodIds[i].classIdx].addMethod(newMethodRef);
+            }
+        }
+    }
+
+
+    /*
+     * =======================================================================
+     *      Basic I/O functions
+     * =======================================================================
+     */
+
+    /**
+     * Seeks the DEX file to the specified absolute position.
+     */
+    void seek(int position) throws IOException {
+        mDexFile.seek(position);
+    }
+
+    /**
+     * Fills the buffer by reading bytes from the DEX file.
+     */
+    void readBytes(byte[] buffer) throws IOException {
+        mDexFile.readFully(buffer);
+    }
+
+    /**
+     * Reads a single signed byte value.
+     */
+    byte readByte() throws IOException {
+        mDexFile.readFully(tmpBuf, 0, 1);
+        return tmpBuf[0];
+    }
+
+    /**
+     * Reads a signed 32-bit integer, byte-swapping if necessary.
+     */
+    int readInt() throws IOException {
+        mDexFile.readFully(tmpBuf, 0, 4);
+
+        if (mByteOrder == ByteOrder.BIG_ENDIAN) {
+            return (tmpBuf[3] & 0xff) | ((tmpBuf[2] & 0xff) << 8) |
+                   ((tmpBuf[1] & 0xff) << 16) | ((tmpBuf[0] & 0xff) << 24);
+        } else {
+            return (tmpBuf[0] & 0xff) | ((tmpBuf[1] & 0xff) << 8) |
+                   ((tmpBuf[2] & 0xff) << 16) | ((tmpBuf[3] & 0xff) << 24);
+        }
+    }
+
+    /**
+     * Reads a variable-length unsigned LEB128 value.  Does not attempt to
+     * verify that the value is valid.
+     *
+     * @throws EOFException if we run off the end of the file
+     */
+    int readUnsignedLeb128() throws IOException {
+        int result = 0;
+        byte val;
+
+        do {
+            val = readByte();
+            result = (result << 7) | (val & 0x7f);
+        } while (val < 0);
+
+        return result;
+    }
+
+    /**
+     * Reads bytes and transforms them into a ByteBuffer with the desired byte order set, from which
+     * primitive values can be read.
+     */
+    ByteBuffer readByteBuffer(int size) throws IOException {
+        byte bytes[] = new byte[size];
+        mDexFile.read(bytes);
+        return ByteBuffer.wrap(bytes).order(mByteOrder);
+    }
+
+    /**
+     * Reads a UTF-8 string.
+     *
+     * We don't know how long the UTF-8 string is, so we try to read the worst case amount of bytes.
+     *
+     * Note that the dex file pointer will likely be at a wrong location after this operation, which
+     * means it can't be used in the middle of sequential reads.
+     */
+    String readString() throws IOException {
+        int utf16len = readUnsignedLeb128();
+        byte inBuf[] = new byte[utf16len * 3];      // worst case
+
+        int bytesRead = mDexFile.read(inBuf);
+        for (int i = 0; i < bytesRead; i++) {
+            if (inBuf[i] == 0) {
+                bytesRead = i;
+                break;
+            }
+        }
+
+        return new String(inBuf, 0, bytesRead, "UTF-8");
+    }
+
+    /*
+     * =======================================================================
+     *      Internal "structure" declarations
+     * =======================================================================
+     */
+
+    /**
+     * Holds the contents of a header_item.
+     */
+    static class HeaderItem {
+        public int fileSize;
+        public int headerSize;
+        public int endianTag;
+        public int stringIdsSize, stringIdsOff;
+        public int typeIdsSize, typeIdsOff;
+        public int protoIdsSize, protoIdsOff;
+        public int fieldIdsSize, fieldIdsOff;
+        public int methodIdsSize, methodIdsOff;
+        public int classDefsSize, classDefsOff;
+
+        /* expected magic values */
+        public static final byte[] DEX_FILE_MAGIC_v035 =
+            "dex\n035\0".getBytes(StandardCharsets.US_ASCII);
+
+        // Dex version 036 skipped because of an old dalvik bug on some versions
+        // of android where dex files with that version number would erroneously
+        // be accepted and run. See: art/runtime/dex_file.cc
+
+        // V037 was introduced in API LEVEL 24
+        public static final byte[] DEX_FILE_MAGIC_v037 =
+            "dex\n037\0".getBytes(StandardCharsets.US_ASCII);
+
+        // V038 was introduced in API LEVEL 26
+        public static final byte[] DEX_FILE_MAGIC_v038 =
+            "dex\n038\0".getBytes(StandardCharsets.US_ASCII);
+
+        // V039 was introduced in API LEVEL 28
+        public static final byte[] DEX_FILE_MAGIC_v039 =
+            "dex\n039\0".getBytes(StandardCharsets.US_ASCII);
+
+        public static final int ENDIAN_CONSTANT = 0x12345678;
+        public static final int REVERSE_ENDIAN_CONSTANT = 0x78563412;
+    }
+
+    /**
+     * Holds the contents of a type_id_item.
+     *
+     * This is chiefly a list of indices into the string table.  We need
+     * some additional bits of data, such as whether or not the type ID
+     * represents a class defined in this DEX, so we use an object for
+     * each instead of a simple integer.  (Could use a parallel array, but
+     * since this is a desktop app it's not essential.)
+     */
+    static class TypeIdItem {
+        public int descriptorIdx;       // index into string_ids
+
+        public boolean internal;        // defined within this DEX file?
+    }
+
+    /**
+     * Holds the contents of a proto_id_item.
+     */
+    static class ProtoIdItem {
+        public int shortyIdx;           // index into string_ids
+        public int returnTypeIdx;       // index into type_ids
+        public int parametersOff;       // file offset to a type_list
+
+        public int types[];             // contents of type list
+    }
+
+    /**
+     * Holds the contents of a field_id_item.
+     */
+    static class FieldIdItem {
+        public int classIdx;            // index into type_ids (defining class)
+        public int typeIdx;             // index into type_ids (field type)
+        public int nameIdx;             // index into string_ids
+    }
+
+    /**
+     * Holds the contents of a method_id_item.
+     */
+    static class MethodIdItem {
+        public int classIdx;            // index into type_ids
+        public int protoIdx;            // index into proto_ids
+        public int nameIdx;             // index into string_ids
+    }
+
+    /**
+     * Holds the contents of a class_def_item.
+     *
+     * We don't really need a class for this, but there's some stuff in
+     * the class_def_item that we might want later.
+     */
+    static class ClassDefItem {
+        public int classIdx;            // index into type_ids
+    }
+}
diff --git a/tools/dexdeps/src/com/android/dexdeps/DexDataException.java b/tools/dexdeps/src/com/android/dexdeps/DexDataException.java
new file mode 100644
index 0000000..873db94
--- /dev/null
+++ b/tools/dexdeps/src/com/android/dexdeps/DexDataException.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dexdeps;
+
+/**
+ * Bad data found inside a DEX file.
+ */
+public class DexDataException extends RuntimeException {
+}
diff --git a/tools/dexdeps/src/com/android/dexdeps/FieldRef.java b/tools/dexdeps/src/com/android/dexdeps/FieldRef.java
new file mode 100644
index 0000000..93e87cb
--- /dev/null
+++ b/tools/dexdeps/src/com/android/dexdeps/FieldRef.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dexdeps;
+
+public class FieldRef {
+    private String mDeclClass, mFieldType, mFieldName;
+
+    /**
+     * Initializes a new field reference.
+     */
+    public FieldRef(String declClass, String fieldType, String fieldName) {
+        mDeclClass = declClass;
+        mFieldType = fieldType;
+        mFieldName = fieldName;
+    }
+
+    /**
+     * Gets the name of the field's declaring class.
+     */
+    public String getDeclClassName() {
+        return mDeclClass;
+    }
+
+    /**
+     * Gets the type name.  Examples: "Ljava/lang/String;", "[I".
+     */
+    public String getTypeName() {
+        return mFieldType;
+    }
+
+    /**
+     * Gets the field name.
+     */
+    public String getName() {
+        return mFieldName;
+    }
+}
diff --git a/tools/dexdeps/src/com/android/dexdeps/Main.java b/tools/dexdeps/src/com/android/dexdeps/Main.java
new file mode 100644
index 0000000..5e57ac1
--- /dev/null
+++ b/tools/dexdeps/src/com/android/dexdeps/Main.java
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dexdeps;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class Main {
+    private String[] mInputFileNames;
+    private String mOutputFormat = "xml";
+
+    /**
+     * whether to only emit info about classes used; when {@code false},
+     * info about fields and methods is also emitted
+     */
+    private boolean mJustClasses = false;
+
+    /**
+     * Entry point.
+     */
+    public static void main(String[] args) {
+        Main main = new Main();
+        main.run(args);
+    }
+
+    /**
+     * Start things up.
+     */
+    void run(String[] args) {
+        try {
+            parseArgs(args);
+            boolean first = true;
+
+            for (String fileName : mInputFileNames) {
+                if (first) {
+                    first = false;
+                    Output.generateFirstHeader(fileName, mOutputFormat);
+                } else {
+                    Output.generateHeader(fileName, mOutputFormat);
+                }
+                List<RandomAccessFile> rafs = openInputFiles(fileName);
+                for (RandomAccessFile raf : rafs) {
+                    DexData dexData = new DexData(raf);
+                    dexData.load();
+                    Output.generate(dexData, mOutputFormat, mJustClasses);
+                    raf.close();
+                }
+                Output.generateFooter(mOutputFormat);
+            }
+        } catch (UsageException ue) {
+            usage();
+            System.exit(2);
+        } catch (IOException ioe) {
+            if (ioe.getMessage() != null) {
+                System.err.println("Failed: " + ioe);
+            }
+            System.exit(1);
+        } catch (DexDataException dde) {
+            /* a message was already reported, just bail quietly */
+            System.exit(1);
+        }
+    }
+
+    /**
+     * Opens an input file, which could be a .dex or a .jar/.apk with a
+     * classes.dex inside.  If the latter, we extract the contents to a
+     * temporary file.
+     *
+     * @param fileName the name of the file to open
+     */
+    List<RandomAccessFile> openInputFiles(String fileName) throws IOException {
+        List<RandomAccessFile> rafs = openInputFileAsZip(fileName);
+
+        if (rafs == null) {
+            File inputFile = new File(fileName);
+            RandomAccessFile raf = new RandomAccessFile(inputFile, "r");
+            rafs = Collections.singletonList(raf);
+        }
+
+        return rafs;
+    }
+
+    /**
+     * Tries to open an input file as a Zip archive (jar/apk) with dex files inside.
+     *
+     * @param fileName the name of the file to open
+     * @return a list of RandomAccessFile for classes.dex,
+     *         classes2.dex, etc., or null if the input file is not a
+     *         zip archive
+     * @throws IOException if the file isn't found, or it's a zip and
+     *         no classes.dex isn't found inside
+     */
+    List<RandomAccessFile> openInputFileAsZip(String fileName) throws IOException {
+        /*
+         * Try it as a zip file.
+         */
+        ZipFile zipFile;
+        try {
+            zipFile = new ZipFile(fileName);
+        } catch (FileNotFoundException fnfe) {
+            /* not found, no point in retrying as non-zip */
+            System.err.println("Unable to open '" + fileName + "': " +
+                fnfe.getMessage());
+            throw fnfe;
+        } catch (ZipException ze) {
+            /* not a zip */
+            return null;
+        }
+
+        List<RandomAccessFile> result = new ArrayList<RandomAccessFile>();
+        try {
+            int classesDexNumber = 1;
+            while (true) {
+                result.add(openClassesDexZipFileEntry(zipFile, classesDexNumber));
+                classesDexNumber++;
+            }
+        } catch (IOException ioe) {
+            // We didn't find any of the expected dex files in the zip.
+            if (result.isEmpty()) {
+                throw ioe;
+            }
+            return result;
+        }
+    }
+
+    RandomAccessFile openClassesDexZipFileEntry(ZipFile zipFile, int classesDexNumber)
+            throws IOException {
+        /*
+         * We know it's a zip; see if there's anything useful inside.  A
+         * failure here results in some type of IOException (of which
+         * ZipException is a subclass).
+         */
+        String zipEntryName = ("classes" +
+                               (classesDexNumber == 1 ? "" : classesDexNumber) +
+                               ".dex");
+        ZipEntry entry = zipFile.getEntry(zipEntryName);
+        if (entry == null) {
+            zipFile.close();
+            throw new ZipException("Unable to find '" + zipEntryName +
+                "' in '" + zipFile.getName() + "'");
+        }
+
+        InputStream zis = zipFile.getInputStream(entry);
+
+        /*
+         * Create a temp file to hold the DEX data, open it, and delete it
+         * to ensure it doesn't hang around if we fail.
+         */
+        File tempFile = File.createTempFile("dexdeps", ".dex");
+        //System.out.println("+++ using temp " + tempFile);
+        RandomAccessFile raf = new RandomAccessFile(tempFile, "rw");
+        tempFile.delete();
+
+        /*
+         * Copy all data from input stream to output file.
+         */
+        byte copyBuf[] = new byte[32768];
+        int actual;
+
+        while (true) {
+            actual = zis.read(copyBuf);
+            if (actual == -1)
+                break;
+
+            raf.write(copyBuf, 0, actual);
+        }
+
+        zis.close();
+        raf.seek(0);
+
+        return raf;
+    }
+
+
+    /**
+     * Parses command-line arguments.
+     *
+     * @throws UsageException if arguments are missing or poorly formed
+     */
+    void parseArgs(String[] args) {
+        int idx;
+
+        for (idx = 0; idx < args.length; idx++) {
+            String arg = args[idx];
+
+            if (arg.equals("--") || !arg.startsWith("--")) {
+                break;
+            } else if (arg.startsWith("--format=")) {
+                mOutputFormat = arg.substring(arg.indexOf('=') + 1);
+                if (!mOutputFormat.equals("brief") &&
+                    !mOutputFormat.equals("xml"))
+                {
+                    System.err.println("Unknown format '" + mOutputFormat +"'");
+                    throw new UsageException();
+                }
+                //System.out.println("+++ using format " + mOutputFormat);
+            } else if (arg.equals("--just-classes")) {
+                mJustClasses = true;
+            } else {
+                System.err.println("Unknown option '" + arg + "'");
+                throw new UsageException();
+            }
+        }
+
+        // We expect at least one more argument (file name).
+        int fileCount = args.length - idx;
+        if (fileCount == 0) {
+            throw new UsageException();
+        }
+
+        mInputFileNames = new String[fileCount];
+        System.arraycopy(args, idx, mInputFileNames, 0, fileCount);
+    }
+
+    /**
+     * Prints command-line usage info.
+     */
+    void usage() {
+        System.err.print(
+                "DEX dependency scanner v1.2\n" +
+                "Copyright (C) 2009 The Android Open Source Project\n\n" +
+                "Usage: dexdeps [options] <file.{dex,apk,jar}> ...\n" +
+                "Options:\n" +
+                "  --format={xml,brief}\n" +
+                "  --just-classes\n");
+    }
+}
diff --git a/tools/dexdeps/src/com/android/dexdeps/MethodRef.java b/tools/dexdeps/src/com/android/dexdeps/MethodRef.java
new file mode 100644
index 0000000..67dce62
--- /dev/null
+++ b/tools/dexdeps/src/com/android/dexdeps/MethodRef.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dexdeps;
+
+public class MethodRef {
+    private String mDeclClass, mReturnType, mMethodName;
+    private String[] mArgTypes;
+
+    /**
+     * Initializes a new field reference.
+     */
+    public MethodRef(String declClass, String[] argTypes, String returnType,
+            String methodName) {
+        mDeclClass = declClass;
+        mArgTypes = argTypes;
+        mReturnType = returnType;
+        mMethodName = methodName;
+    }
+
+    /**
+     * Gets the name of the method's declaring class.
+     */
+    public String getDeclClassName() {
+        return mDeclClass;
+    }
+
+    /**
+     * Gets the method's descriptor.
+     */
+    public String getDescriptor() {
+        return descriptorFromProtoArray(mArgTypes, mReturnType);
+    }
+
+    /**
+     * Gets the method's name.
+     */
+    public String getName() {
+        return mMethodName;
+    }
+
+    /**
+     * Gets an array of method argument types.
+     */
+    public String[] getArgumentTypeNames() {
+        return mArgTypes;
+    }
+
+    /**
+     * Gets the method's return type.  Examples: "Ljava/lang/String;", "[I".
+     */
+    public String getReturnTypeName() {
+        return mReturnType;
+    }
+
+    /**
+     * Returns the method descriptor, given the argument and return type
+     * prototype strings.
+     */
+    private static String descriptorFromProtoArray(String[] protos,
+            String returnType) {
+        StringBuilder builder = new StringBuilder();
+
+        builder.append("(");
+        for (int i = 0; i < protos.length; i++) {
+            builder.append(protos[i]);
+        }
+
+        builder.append(")");
+        builder.append(returnType);
+
+        return builder.toString();
+    }
+}
diff --git a/tools/dexdeps/src/com/android/dexdeps/Output.java b/tools/dexdeps/src/com/android/dexdeps/Output.java
new file mode 100644
index 0000000..dbe3bc2
--- /dev/null
+++ b/tools/dexdeps/src/com/android/dexdeps/Output.java
@@ -0,0 +1,346 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dexdeps;
+
+import java.io.PrintStream;
+
+/**
+ * Generate fancy output.
+ */
+public class Output {
+    private static final String IN0 = "";
+    private static final String IN1 = "  ";
+    private static final String IN2 = "    ";
+    private static final String IN3 = "      ";
+    private static final String IN4 = "        ";
+
+    private static final PrintStream out = System.out;
+
+    private static void generateHeader0(String fileName, String format) {
+        if (format.equals("brief")) {
+            if (fileName != null) {
+                out.println("File: " + fileName);
+            }
+        } else if (format.equals("xml")) {
+            if (fileName != null) {
+                out.println(IN0 + "<external file=\"" + fileName + "\">");
+            } else {
+                out.println(IN0 + "<external>");
+            }
+        } else {
+            /* should've been trapped in arg handler */
+            throw new RuntimeException("unknown output format");
+        }
+    }
+
+    public static void generateFirstHeader(String fileName, String format) {
+        generateHeader0(fileName, format);
+    }
+
+    public static void generateHeader(String fileName, String format) {
+        out.println();
+        generateHeader0(fileName, format);
+    }
+
+    public static void generateFooter(String format) {
+        if (format.equals("brief")) {
+            // Nothing to do.
+        } else if (format.equals("xml")) {
+            out.println("</external>");
+        } else {
+            /* should've been trapped in arg handler */
+            throw new RuntimeException("unknown output format");
+        }
+    }
+
+    public static void generate(DexData dexData, String format,
+            boolean justClasses) {
+        if (format.equals("brief")) {
+            printBrief(dexData, justClasses);
+        } else if (format.equals("xml")) {
+            printXml(dexData, justClasses);
+        } else {
+            /* should've been trapped in arg handler */
+            throw new RuntimeException("unknown output format");
+        }
+    }
+
+    /**
+     * Prints the data in a simple human-readable format.
+     */
+    static void printBrief(DexData dexData, boolean justClasses) {
+        ClassRef[] externClassRefs = dexData.getExternalReferences();
+
+        printClassRefs(externClassRefs, justClasses);
+
+        if (!justClasses) {
+            printFieldRefs(externClassRefs);
+            printMethodRefs(externClassRefs);
+        }
+    }
+
+    /**
+     * Prints the list of classes in a simple human-readable format.
+     */
+    static void printClassRefs(ClassRef[] classes, boolean justClasses) {
+        if (!justClasses) {
+            out.println("Classes:");
+        }
+
+        for (int i = 0; i < classes.length; i++) {
+            ClassRef ref = classes[i];
+
+            out.println(descriptorToDot(ref.getName()));
+        }
+    }
+
+    /**
+     * Prints the list of fields in a simple human-readable format.
+     */
+    static void printFieldRefs(ClassRef[] classes) {
+        out.println("\nFields:");
+        for (int i = 0; i < classes.length; i++) {
+            FieldRef[] fields = classes[i].getFieldArray();
+
+            for (int j = 0; j < fields.length; j++) {
+                FieldRef ref = fields[j];
+
+                out.println(descriptorToDot(ref.getDeclClassName()) +
+                    "." + ref.getName() + " : " + ref.getTypeName());
+            }
+        }
+    }
+
+    /**
+     * Prints the list of methods in a simple human-readable format.
+     */
+    static void printMethodRefs(ClassRef[] classes) {
+        out.println("\nMethods:");
+        for (int i = 0; i < classes.length; i++) {
+            MethodRef[] methods = classes[i].getMethodArray();
+
+            for (int j = 0; j < methods.length; j++) {
+                MethodRef ref = methods[j];
+
+                out.println(descriptorToDot(ref.getDeclClassName()) +
+                    "." + ref.getName() + " : " + ref.getDescriptor());
+            }
+        }
+    }
+
+    /**
+     * Prints the output in XML format.
+     *
+     * We shouldn't need to XML-escape the field/method info.
+     */
+    static void printXml(DexData dexData, boolean justClasses) {
+        ClassRef[] externClassRefs = dexData.getExternalReferences();
+
+        /*
+         * Iterate through externClassRefs.  For each class, dump all of
+         * the matching fields and methods.
+         */
+        String prevPackage = null;
+        for (int i = 0; i < externClassRefs.length; i++) {
+            ClassRef cref = externClassRefs[i];
+            String declClassName = cref.getName();
+            String className = classNameOnly(declClassName);
+            String packageName = packageNameOnly(declClassName);
+
+            /*
+             * If we're in a different package, emit the appropriate tags.
+             */
+            if (!packageName.equals(prevPackage)) {
+                if (prevPackage != null) {
+                    out.println(IN1 + "</package>");
+                }
+
+                out.println(IN1 +
+                    "<package name=\"" + packageName + "\">");
+
+                prevPackage = packageName;
+            }
+
+            out.println(IN2 + "<class name=\"" + className + "\">");
+            if (!justClasses) {
+                printXmlFields(cref);
+                printXmlMethods(cref);
+            }
+            out.println(IN2 + "</class>");
+        }
+
+        if (prevPackage != null)
+            out.println(IN1 + "</package>");
+    }
+
+    /**
+     * Prints the externally-visible fields in XML format.
+     */
+    private static void printXmlFields(ClassRef cref) {
+        FieldRef[] fields = cref.getFieldArray();
+        for (int i = 0; i < fields.length; i++) {
+            FieldRef fref = fields[i];
+
+            out.println(IN3 + "<field name=\"" + fref.getName() +
+                "\" type=\"" + descriptorToDot(fref.getTypeName()) + "\"/>");
+        }
+    }
+
+    /**
+     * Prints the externally-visible methods in XML format.
+     */
+    private static void printXmlMethods(ClassRef cref) {
+        MethodRef[] methods = cref.getMethodArray();
+        for (int i = 0; i < methods.length; i++) {
+            MethodRef mref = methods[i];
+            String declClassName = mref.getDeclClassName();
+            boolean constructor;
+
+            constructor = mref.getName().equals("<init>");
+            if (constructor) {
+                // use class name instead of method name
+                out.println(IN3 + "<constructor name=\"" +
+                    classNameOnly(declClassName) + "\">");
+            } else {
+                out.println(IN3 + "<method name=\"" + mref.getName() +
+                    "\" return=\"" + descriptorToDot(mref.getReturnTypeName()) +
+                    "\">");
+            }
+            String[] args = mref.getArgumentTypeNames();
+            for (int j = 0; j < args.length; j++) {
+                out.println(IN4 + "<parameter type=\"" +
+                    descriptorToDot(args[j]) + "\"/>");
+            }
+            if (constructor) {
+                out.println(IN3 + "</constructor>");
+            } else {
+                out.println(IN3 + "</method>");
+            }
+        }
+    }
+
+
+    /*
+     * =======================================================================
+     *      Utility functions
+     * =======================================================================
+     */
+
+    /**
+     * Converts a single-character primitive type into its human-readable
+     * equivalent.
+     */
+    static String primitiveTypeLabel(char typeChar) {
+        /* primitive type; substitute human-readable name in */
+        switch (typeChar) {
+            case 'B':   return "byte";
+            case 'C':   return "char";
+            case 'D':   return "double";
+            case 'F':   return "float";
+            case 'I':   return "int";
+            case 'J':   return "long";
+            case 'S':   return "short";
+            case 'V':   return "void";
+            case 'Z':   return "boolean";
+            default:
+                /* huh? */
+                System.err.println("Unexpected class char " + typeChar);
+                assert false;
+                return "UNKNOWN";
+        }
+    }
+
+    /**
+     * Converts a type descriptor to human-readable "dotted" form.  For
+     * example, "Ljava/lang/String;" becomes "java.lang.String", and
+     * "[I" becomes "int[].
+     */
+    static String descriptorToDot(String descr) {
+        int targetLen = descr.length();
+        int offset = 0;
+        int arrayDepth = 0;
+
+        /* strip leading [s; will be added to end */
+        while (targetLen > 1 && descr.charAt(offset) == '[') {
+            offset++;
+            targetLen--;
+        }
+        arrayDepth = offset;
+
+        if (targetLen == 1) {
+            descr = primitiveTypeLabel(descr.charAt(offset));
+            offset = 0;
+            targetLen = descr.length();
+        } else {
+            /* account for leading 'L' and trailing ';' */
+            if (targetLen >= 2 && descr.charAt(offset) == 'L' &&
+                descr.charAt(offset+targetLen-1) == ';')
+            {
+                targetLen -= 2;     /* two fewer chars to copy */
+                offset++;           /* skip the 'L' */
+            }
+        }
+
+        char[] buf = new char[targetLen + arrayDepth * 2];
+
+        /* copy class name over */
+        int i;
+        for (i = 0; i < targetLen; i++) {
+            char ch = descr.charAt(offset + i);
+            buf[i] = (ch == '/') ? '.' : ch;
+        }
+
+        /* add the appopriate number of brackets for arrays */
+        while (arrayDepth-- > 0) {
+            buf[i++] = '[';
+            buf[i++] = ']';
+        }
+        assert i == buf.length;
+
+        return new String(buf);
+    }
+
+    /**
+     * Extracts the class name from a type descriptor.
+     */
+    static String classNameOnly(String typeName) {
+        String dotted = descriptorToDot(typeName);
+
+        int start = dotted.lastIndexOf(".");
+        if (start < 0) {
+            return dotted;
+        } else {
+            return dotted.substring(start+1);
+        }
+    }
+
+    /**
+     * Extracts the package name from a type descriptor, and returns it in
+     * dotted form.
+     */
+    static String packageNameOnly(String typeName) {
+        String dotted = descriptorToDot(typeName);
+
+        int end = dotted.lastIndexOf(".");
+        if (end < 0) {
+            /* lives in default package */
+            return "";
+        } else {
+            return dotted.substring(0, end);
+        }
+    }
+}
diff --git a/tools/dexdeps/src/com/android/dexdeps/UsageException.java b/tools/dexdeps/src/com/android/dexdeps/UsageException.java
new file mode 100644
index 0000000..e695fc7
--- /dev/null
+++ b/tools/dexdeps/src/com/android/dexdeps/UsageException.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package com.android.dexdeps;
+
+/**
+ * Tells the main entry point to show the usage information and bail.
+ */
+public class UsageException extends RuntimeException {
+}
diff --git a/tools/get-hprof b/tools/get-hprof
new file mode 100755
index 0000000..d56d7ad
--- /dev/null
+++ b/tools/get-hprof
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# 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.
+
+# Grab an hprof file using adb. If an argument is specified, grab
+# the so-named file. If no argument is specified, grab the last such file
+# as found by using "ls".
+
+FILE_BASE="$1"
+if [ "x$FILE_BASE" = "x" ]; then
+    # Note: substr() is to get rid of the final carriage return.
+    FILE_BASE=`adb shell ls -l '/data/misc/heap-dump*.hprof' | tail -1 | \
+	awk '{ printf("%s", substr($7, 1, length($7) - 1)); }'`
+    if [ "x$FILE_BASE" = "x" ]; then
+        echo "No file base defined."
+        exit 1
+    fi
+fi
+
+FILE_BASE=/data/misc/${FILE_BASE}
+OUT_FILE=heap-dump.hprof
+
+adb pull "$FILE_BASE" "$OUT_FILE"
+if [ $? -ne 0 ]; then
+    echo "Failed pulling $FILE_BASE."
+    exit 1
+fi
+echo "hat $OUT_FILE"
+exit 0
diff --git a/tools/hprof-conv/Android.bp b/tools/hprof-conv/Android.bp
new file mode 100644
index 0000000..ca5343e
--- /dev/null
+++ b/tools/hprof-conv/Android.bp
@@ -0,0 +1,33 @@
+// Copyright (C) 2009 The Android Open Source Project
+//
+// 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.
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "dalvik_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["dalvik_license"],
+}
+
+cc_binary_host {
+    name: "hprof-conv",
+    srcs: ["HprofConv.c"],
+    cflags: ["-Wall", "-Werror"],
+    target: {
+        windows: {
+            enabled: true,
+        },
+    },
+}
diff --git a/tools/hprof-conv/HprofConv.c b/tools/hprof-conv/HprofConv.c
new file mode 100644
index 0000000..cc90176
--- /dev/null
+++ b/tools/hprof-conv/HprofConv.c
@@ -0,0 +1,772 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.
+ */
+
+/*
+ * Strip Android-specific records out of hprof data, back-converting from
+ * 1.0.3 to 1.0.2.  This removes some useful information, but allows
+ * Android hprof data to be handled by widely-available tools (like "jhat").
+ */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <errno.h>
+#include <assert.h>
+#include <unistd.h>
+
+//#define VERBOSE_DEBUG
+#ifdef VERBOSE_DEBUG
+# define DBUG(...) fprintf(stderr, __VA_ARGS__)
+#else
+# define DBUG(...)
+#endif
+
+#ifndef FALSE
+# define FALSE 0
+# define TRUE (!FALSE)
+#endif
+
+// An attribute to place on a parameter to a function, for example:
+//   int foo(int x ATTRIBUTE_UNUSED) { return 10; }
+// to avoid compiler warnings.
+#define ATTRIBUTE_UNUSED __attribute__((__unused__))
+
+typedef enum HprofBasicType {
+    HPROF_BASIC_OBJECT = 2,
+    HPROF_BASIC_BOOLEAN = 4,
+    HPROF_BASIC_CHAR = 5,
+    HPROF_BASIC_FLOAT = 6,
+    HPROF_BASIC_DOUBLE = 7,
+    HPROF_BASIC_BYTE = 8,
+    HPROF_BASIC_SHORT = 9,
+    HPROF_BASIC_INT = 10,
+    HPROF_BASIC_LONG = 11,
+} HprofBasicType;
+
+typedef enum HprofTag {
+    /* tags we must handle specially */
+    HPROF_TAG_HEAP_DUMP                 = 0x0c,
+    HPROF_TAG_HEAP_DUMP_SEGMENT         = 0x1c,
+} HprofTag;
+
+typedef enum HprofHeapTag {
+    /* 1.0.2 tags */
+    HPROF_ROOT_UNKNOWN                  = 0xff,
+    HPROF_ROOT_JNI_GLOBAL               = 0x01,
+    HPROF_ROOT_JNI_LOCAL                = 0x02,
+    HPROF_ROOT_JAVA_FRAME               = 0x03,
+    HPROF_ROOT_NATIVE_STACK             = 0x04,
+    HPROF_ROOT_STICKY_CLASS             = 0x05,
+    HPROF_ROOT_THREAD_BLOCK             = 0x06,
+    HPROF_ROOT_MONITOR_USED             = 0x07,
+    HPROF_ROOT_THREAD_OBJECT            = 0x08,
+    HPROF_CLASS_DUMP                    = 0x20,
+    HPROF_INSTANCE_DUMP                 = 0x21,
+    HPROF_OBJECT_ARRAY_DUMP             = 0x22,
+    HPROF_PRIMITIVE_ARRAY_DUMP          = 0x23,
+
+    /* Android 1.0.3 tags */
+    HPROF_HEAP_DUMP_INFO                = 0xfe,
+    HPROF_ROOT_INTERNED_STRING          = 0x89,
+    HPROF_ROOT_FINALIZING               = 0x8a,
+    HPROF_ROOT_DEBUGGER                 = 0x8b,
+    HPROF_ROOT_REFERENCE_CLEANUP        = 0x8c,
+    HPROF_ROOT_VM_INTERNAL              = 0x8d,
+    HPROF_ROOT_JNI_MONITOR              = 0x8e,
+    HPROF_UNREACHABLE                   = 0x90,  /* deprecated */
+    HPROF_PRIMITIVE_ARRAY_NODATA_DUMP   = 0xc3,
+} HprofHeapTag;
+
+typedef enum HprofHeapId {
+    HPROF_HEAP_DEFAULT = 0,
+    HPROF_HEAP_ZYGOTE = 'Z',
+    HPROF_HEAP_APP = 'A',
+    HPROF_HEAP_IMAGE = 'I',
+} HprofHeapId;
+
+#define kIdentSize  4
+#define kRecHdrLen  9
+
+#define kFlagAppOnly 1
+
+/*
+ * ===========================================================================
+ *      Expanding buffer
+ * ===========================================================================
+ */
+
+/* simple struct */
+typedef struct {
+    unsigned char* storage;
+    size_t curLen;
+    size_t maxLen;
+} ExpandBuf;
+
+/*
+ * Create an ExpandBuf.
+ */
+static ExpandBuf* ebAlloc(void)
+{
+    static const int kInitialSize = 64;
+
+    ExpandBuf* newBuf = (ExpandBuf*) malloc(sizeof(ExpandBuf));
+    if (newBuf == NULL)
+        return NULL;
+    newBuf->storage = (unsigned char*) malloc(kInitialSize);
+    newBuf->curLen = 0;
+    newBuf->maxLen = kInitialSize;
+
+    return newBuf;
+}
+
+/*
+ * Release the storage associated with an ExpandBuf.
+ */
+static void ebFree(ExpandBuf* pBuf)
+{
+    if (pBuf != NULL) {
+        free(pBuf->storage);
+        free(pBuf);
+    }
+}
+
+/*
+ * Return a pointer to the data buffer.
+ *
+ * The pointer may change as data is added to the buffer, so this value
+ * should not be cached.
+ */
+static inline unsigned char* ebGetBuffer(ExpandBuf* pBuf)
+{
+    return pBuf->storage;
+}
+
+/*
+ * Get the amount of data currently in the buffer.
+ */
+static inline size_t ebGetLength(ExpandBuf* pBuf)
+{
+    return pBuf->curLen;
+}
+
+/*
+ * Empty the buffer.
+ */
+static void ebClear(ExpandBuf* pBuf)
+{
+    pBuf->curLen = 0;
+}
+
+/*
+ * Ensure that the buffer can hold at least "size" additional bytes.
+ */
+static int ebEnsureCapacity(ExpandBuf* pBuf, int size)
+{
+    assert(size > 0);
+
+    if (pBuf->curLen + size > pBuf->maxLen) {
+        int newSize = pBuf->curLen + size + 128;    /* oversize slightly */
+        unsigned char* newStorage = realloc(pBuf->storage, newSize);
+        if (newStorage == NULL) {
+            fprintf(stderr, "ERROR: realloc failed on size=%d\n", newSize);
+            return -1;
+        }
+
+        pBuf->storage = newStorage;
+        pBuf->maxLen = newSize;
+    }
+
+    assert(pBuf->curLen + size <= pBuf->maxLen);
+    return 0;
+}
+
+/*
+ * Add data to the buffer after ensuring it can hold it.
+ */
+static int ebAddData(ExpandBuf* pBuf, const void* data, size_t count)
+{
+    ebEnsureCapacity(pBuf, count);
+    memcpy(pBuf->storage + pBuf->curLen, data, count);
+    pBuf->curLen += count;
+    return 0;
+}
+
+/*
+ * Read a NULL-terminated string from the input.
+ */
+static int ebReadString(ExpandBuf* pBuf, FILE* in)
+{
+    int ic;
+
+    do {
+        ebEnsureCapacity(pBuf, 1);
+
+        ic = getc(in);
+        if (feof(in) || ferror(in)) {
+            fprintf(stderr, "ERROR: failed reading input\n");
+            return -1;
+        }
+
+        pBuf->storage[pBuf->curLen++] = (unsigned char) ic;
+    } while (ic != 0);
+
+    return 0;
+}
+
+/*
+ * Read some data, adding it to the expanding buffer.
+ *
+ * This will ensure that the buffer has enough space to hold the new data
+ * (plus the previous contents).
+ */
+static int ebReadData(ExpandBuf* pBuf, FILE* in, size_t count, int eofExpected)
+{
+    size_t actual;
+
+    assert(count > 0);
+
+    ebEnsureCapacity(pBuf, count);
+    actual = fread(pBuf->storage + pBuf->curLen, 1, count, in);
+    if (actual != count) {
+        if (eofExpected && feof(in) && !ferror(in)) {
+            /* return without reporting an error */
+        } else {
+            fprintf(stderr, "ERROR: read %zu of %zu bytes\n", actual, count);
+            return -1;
+        }
+    }
+
+    pBuf->curLen += count;
+    assert(pBuf->curLen <= pBuf->maxLen);
+
+    return 0;
+}
+
+/*
+ * Write the data from the buffer.  Resets the data count to zero.
+ */
+static int ebWriteData(ExpandBuf* pBuf, FILE* out)
+{
+    size_t actual;
+
+    assert(pBuf->curLen > 0);
+    assert(pBuf->curLen <= pBuf->maxLen);
+
+    actual = fwrite(pBuf->storage, 1, pBuf->curLen, out);
+    if (actual != pBuf->curLen) {
+        fprintf(stderr, "ERROR: write %zu of %zu bytes\n", actual, pBuf->curLen);
+        return -1;
+    }
+
+    pBuf->curLen = 0;
+
+    return 0;
+}
+
+
+/*
+ * ===========================================================================
+ *      Hprof stuff
+ * ===========================================================================
+ */
+
+/*
+ * Get a 2-byte value, in big-endian order, from memory.
+ */
+static uint16_t get2BE(const unsigned char* buf)
+{
+    uint16_t val;
+
+    val = (buf[0] << 8) | buf[1];
+    return val;
+}
+
+/*
+ * Get a 4-byte value, in big-endian order, from memory.
+ */
+static uint32_t get4BE(const unsigned char* buf)
+{
+    uint32_t val;
+
+    val = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+    return val;
+}
+
+/*
+ * Set a 4-byte value, in big-endian order.
+ */
+static void set4BE(unsigned char* buf, uint32_t val)
+{
+    buf[0] = val >> 24;
+    buf[1] = val >> 16;
+    buf[2] = val >> 8;
+    buf[3] = val;
+}
+
+/*
+ * Get the size, in bytes, of one of the "basic types".
+ */
+static int computeBasicLen(HprofBasicType basicType)
+{
+    static const int sizes[] = { -1, -1, 4, -1, 1, 2, 4, 8, 1, 2, 4, 8  };
+    static const size_t maxSize = sizeof(sizes) / sizeof(sizes[0]);
+
+    assert(basicType >= 0);
+    if (basicType >= maxSize)
+        return -1;
+    return sizes[basicType];
+}
+
+/*
+ * Compute the length of a HPROF_CLASS_DUMP block.
+ */
+static int computeClassDumpLen(const unsigned char* origBuf, int len)
+{
+    const unsigned char* buf = origBuf;
+    int blockLen = 0;
+    int i, count;
+
+    blockLen += kIdentSize * 7 + 8;
+    buf += blockLen;
+    len -= blockLen;
+
+    if (len < 0)
+        return -1;
+
+    count = get2BE(buf);
+    buf += 2;
+    len -= 2;
+    DBUG("CDL: 1st count is %d\n", count);
+    for (i = 0; i < count; i++) {
+        HprofBasicType basicType;
+        int basicLen;
+
+        basicType = buf[2];
+        basicLen = computeBasicLen(basicType);
+        if (basicLen < 0) {
+            DBUG("ERROR: invalid basicType %d\n", basicType);
+            return -1;
+        }
+
+        buf += 2 + 1 + basicLen;
+        len -= 2 + 1 + basicLen;
+        if (len < 0)
+            return -1;
+    }
+
+    count = get2BE(buf);
+    buf += 2;
+    len -= 2;
+    DBUG("CDL: 2nd count is %d\n", count);
+    for (i = 0; i < count; i++) {
+        HprofBasicType basicType;
+        int basicLen;
+
+        basicType = buf[kIdentSize];
+        basicLen = computeBasicLen(basicType);
+        if (basicLen < 0) {
+            fprintf(stderr, "ERROR: invalid basicType %d\n", basicType);
+            return -1;
+        }
+
+        buf += kIdentSize + 1 + basicLen;
+        len -= kIdentSize + 1 + basicLen;
+        if (len < 0)
+            return -1;
+    }
+
+    count = get2BE(buf);
+    buf += 2;
+    len -= 2;
+    DBUG("CDL: 3rd count is %d\n", count);
+    for (i = 0; i < count; i++) {
+        buf += kIdentSize + 1;
+        len -= kIdentSize + 1;
+        if (len < 0)
+            return -1;
+    }
+
+    DBUG("Total class dump len: %d\n", buf - origBuf);
+    return buf - origBuf;
+}
+
+/*
+ * Compute the length of a HPROF_INSTANCE_DUMP block.
+ */
+static int computeInstanceDumpLen(const unsigned char* origBuf, int len ATTRIBUTE_UNUSED)
+{
+    int extraCount = get4BE(origBuf + kIdentSize * 2 + 4);
+    return kIdentSize * 2 + 8 + extraCount;
+}
+
+/*
+ * Compute the length of a HPROF_OBJECT_ARRAY_DUMP block.
+ */
+static int computeObjectArrayDumpLen(const unsigned char* origBuf, int len ATTRIBUTE_UNUSED)
+{
+    int arrayCount = get4BE(origBuf + kIdentSize + 4);
+    return kIdentSize * 2 + 8 + arrayCount * kIdentSize;
+}
+
+/*
+ * Compute the length of a HPROF_PRIMITIVE_ARRAY_DUMP block.
+ */
+static int computePrimitiveArrayDumpLen(const unsigned char* origBuf, int len ATTRIBUTE_UNUSED)
+{
+    int arrayCount = get4BE(origBuf + kIdentSize + 4);
+    HprofBasicType basicType = origBuf[kIdentSize + 8];
+    int basicLen = computeBasicLen(basicType);
+
+    return kIdentSize + 9 + arrayCount * basicLen;
+}
+
+/*
+ * Crunch through a heap dump record, writing the original or converted
+ * data to "out".
+ */
+static int processHeapDump(ExpandBuf* pBuf, FILE* out, int flags)
+{
+    ExpandBuf* pOutBuf = ebAlloc();
+    unsigned char* origBuf = ebGetBuffer(pBuf);
+    unsigned char* buf = origBuf;
+    int len = ebGetLength(pBuf);
+    int result = -1;
+    int heapType = HPROF_HEAP_DEFAULT;
+    int heapIgnore = FALSE;
+
+    pBuf = NULL;        /* we just use the raw pointer from here forward */
+
+    /* copy the original header to the output buffer */
+    if (ebAddData(pOutBuf, buf, kRecHdrLen) != 0)
+        goto bail;
+
+    buf += kRecHdrLen;      /* skip past record header */
+    len -= kRecHdrLen;
+
+    while (len > 0) {
+        unsigned char subType = buf[0];
+        int justCopy = TRUE;
+        int subLen;
+
+        DBUG("--- 0x%02x  ", subType);
+        switch (subType) {
+        /* 1.0.2 types */
+        case HPROF_ROOT_UNKNOWN:
+            subLen = kIdentSize;
+            break;
+        case HPROF_ROOT_JNI_GLOBAL:
+            subLen = kIdentSize * 2;
+            break;
+        case HPROF_ROOT_JNI_LOCAL:
+            subLen = kIdentSize + 8;
+            break;
+        case HPROF_ROOT_JAVA_FRAME:
+            subLen = kIdentSize + 8;
+            break;
+        case HPROF_ROOT_NATIVE_STACK:
+            subLen = kIdentSize + 4;
+            break;
+        case HPROF_ROOT_STICKY_CLASS:
+            subLen = kIdentSize;
+            break;
+        case HPROF_ROOT_THREAD_BLOCK:
+            subLen = kIdentSize + 4;
+            break;
+        case HPROF_ROOT_MONITOR_USED:
+            subLen = kIdentSize;
+            break;
+        case HPROF_ROOT_THREAD_OBJECT:
+            subLen = kIdentSize + 8;
+            break;
+        case HPROF_CLASS_DUMP:
+            subLen = computeClassDumpLen(buf+1, len-1);
+            break;
+        case HPROF_INSTANCE_DUMP:
+            subLen = computeInstanceDumpLen(buf+1, len-1);
+            if (heapIgnore) {
+                justCopy = FALSE;
+            }
+            break;
+        case HPROF_OBJECT_ARRAY_DUMP:
+            subLen = computeObjectArrayDumpLen(buf+1, len-1);
+            if (heapIgnore) {
+                justCopy = FALSE;
+            }
+            break;
+        case HPROF_PRIMITIVE_ARRAY_DUMP:
+            subLen = computePrimitiveArrayDumpLen(buf+1, len-1);
+            if (heapIgnore) {
+                justCopy = FALSE;
+            }
+            break;
+        /* these were added for Android in 1.0.3 */
+        case HPROF_HEAP_DUMP_INFO:
+            heapType = get4BE(buf+1);
+            if ((flags & kFlagAppOnly) != 0
+                    && (heapType == HPROF_HEAP_ZYGOTE || heapType == HPROF_HEAP_IMAGE)) {
+                heapIgnore = TRUE;
+            } else {
+                heapIgnore = FALSE;
+            }
+            justCopy = FALSE;
+            subLen = kIdentSize + 4;
+            // no 1.0.2 equivalent for this
+            break;
+        case HPROF_ROOT_INTERNED_STRING:
+            buf[0] = HPROF_ROOT_UNKNOWN;
+            subLen = kIdentSize;
+            break;
+        case HPROF_ROOT_FINALIZING:
+            buf[0] = HPROF_ROOT_UNKNOWN;
+            subLen = kIdentSize;
+            break;
+        case HPROF_ROOT_DEBUGGER:
+            buf[0] = HPROF_ROOT_UNKNOWN;
+            subLen = kIdentSize;
+            break;
+        case HPROF_ROOT_REFERENCE_CLEANUP:
+            buf[0] = HPROF_ROOT_UNKNOWN;
+            subLen = kIdentSize;
+            break;
+        case HPROF_ROOT_VM_INTERNAL:
+            buf[0] = HPROF_ROOT_UNKNOWN;
+            subLen = kIdentSize;
+            break;
+        case HPROF_ROOT_JNI_MONITOR:
+            /* keep the ident, drop the next 8 bytes */
+            buf[0] = HPROF_ROOT_UNKNOWN;
+            justCopy = FALSE;
+            ebAddData(pOutBuf, buf, 1 + kIdentSize);
+            subLen = kIdentSize + 8;
+            break;
+        case HPROF_UNREACHABLE:
+            buf[0] = HPROF_ROOT_UNKNOWN;
+            subLen = kIdentSize;
+            break;
+        case HPROF_PRIMITIVE_ARRAY_NODATA_DUMP:
+            buf[0] = HPROF_PRIMITIVE_ARRAY_DUMP;
+            buf[5] = buf[6] = buf[7] = buf[8] = 0;  /* set array len to 0 */
+            subLen = kIdentSize + 9;
+            break;
+
+        /* shouldn't get here */
+        default:
+            fprintf(stderr, "ERROR: unexpected subtype 0x%02x at offset %zu\n",
+                subType, (size_t) (buf - origBuf));
+            goto bail;
+        }
+
+        if (justCopy) {
+            /* copy source data */
+            DBUG("(%d)\n", 1 + subLen);
+            ebAddData(pOutBuf, buf, 1 + subLen);
+        } else {
+            /* other data has been written, or the sub-record omitted */
+            DBUG("(adv %d)\n", 1 + subLen);
+        }
+
+        /* advance to next entry */
+        buf += 1 + subLen;
+        len -= 1 + subLen;
+    }
+
+    /*
+     * Update the record length.
+     */
+    set4BE(ebGetBuffer(pOutBuf) + 5, ebGetLength(pOutBuf) - kRecHdrLen);
+
+    if (ebWriteData(pOutBuf, out) != 0)
+        goto bail;
+
+    result = 0;
+
+bail:
+    ebFree(pOutBuf);
+    return result;
+}
+
+/*
+ * Filter an hprof data file.
+ */
+static int filterData(FILE* in, FILE* out, int flags)
+{
+    const char *magicString;
+    ExpandBuf* pBuf;
+    int result = -1;
+
+    pBuf = ebAlloc();
+    if (pBuf == NULL)
+        goto bail;
+
+    /*
+     * Start with the header.
+     */
+    if (ebReadString(pBuf, in) != 0)
+        goto bail;
+
+    magicString = (const char*)ebGetBuffer(pBuf);
+    if (strcmp(magicString, "JAVA PROFILE 1.0.3") != 0) {
+        if (strcmp(magicString, "JAVA PROFILE 1.0.2") == 0) {
+            fprintf(stderr, "ERROR: HPROF file already in 1.0.2 format.\n");
+        } else {
+            fprintf(stderr, "ERROR: expecting HPROF file format 1.0.3\n");
+        }
+        goto bail;
+    }
+
+    /* downgrade to 1.0.2 */
+    (ebGetBuffer(pBuf))[17] = '2';
+    if (ebWriteData(pBuf, out) != 0)
+        goto bail;
+
+    /*
+     * Copy:
+     * (4b) identifier size, always 4
+     * (8b) file creation date
+     */
+    if (ebReadData(pBuf, in, 12, FALSE) != 0)
+        goto bail;
+    if (ebWriteData(pBuf, out) != 0)
+        goto bail;
+
+    /*
+     * Read records until we hit EOF.  Each record begins with:
+     * (1b) type
+     * (4b) timestamp
+     * (4b) length of data that follows
+     */
+    while (1) {
+        assert(ebGetLength(pBuf) == 0);
+
+        /* read type char */
+        if (ebReadData(pBuf, in, 1, TRUE) != 0)
+            goto bail;
+        if (feof(in))
+            break;
+
+        /* read the rest of the header */
+        if (ebReadData(pBuf, in, kRecHdrLen-1, FALSE) != 0)
+            goto bail;
+
+        unsigned char* buf = ebGetBuffer(pBuf);
+        unsigned char type;
+        unsigned int timestamp, length;
+
+        type = buf[0];
+        timestamp = get4BE(buf + 1);
+        length = get4BE(buf + 5);
+        buf = NULL;     /* ptr invalid after next read op */
+
+        /* read the record data */
+        if (length != 0) {
+            if (ebReadData(pBuf, in, length, FALSE) != 0)
+                goto bail;
+        }
+
+        if (type == HPROF_TAG_HEAP_DUMP
+                || type == HPROF_TAG_HEAP_DUMP_SEGMENT) {
+            DBUG("Processing heap dump 0x%02x (%d bytes)\n",
+                type, length);
+            if (processHeapDump(pBuf, out, flags) != 0)
+                goto bail;
+            ebClear(pBuf);
+        } else {
+            /* keep */
+            DBUG("Keeping 0x%02x (%d bytes)\n", type, length);
+            if (ebWriteData(pBuf, out) != 0)
+                goto bail;
+        }
+    }
+
+    result = 0;
+
+bail:
+    ebFree(pBuf);
+    return result;
+}
+
+static FILE* fopen_or_default(const char* path, const char* mode, FILE* def) {
+    if (!strcmp(path, "-")) {
+        return def;
+    } else {
+        return fopen(path, mode);
+    }
+}
+
+int main(int argc, char** argv)
+{
+    FILE* in = NULL;
+    FILE* out = NULL;
+    int flags = 0;
+    int res = 1;
+
+    int opt;
+    while ((opt = getopt(argc, argv, "z")) != -1) {
+        switch (opt) {
+            case 'z':
+                flags |= kFlagAppOnly;
+                break;
+            case '?':
+            default:
+                goto usage;
+        }
+    }
+
+    int i;
+    for (i = optind; i < argc; i++) {
+        char* arg = argv[i];
+        if (!in) {
+            in = fopen_or_default(arg, "rb", stdin);
+        } else if (!out) {
+            out = fopen_or_default(arg, "wb", stdout);
+        } else {
+            goto usage;
+        }
+    }
+
+    if (in == NULL || out == NULL) {
+        goto usage;
+    }
+
+    res = filterData(in, out, flags);
+    goto finish;
+
+usage:
+    fprintf(stderr, "Usage: hprof-conf [-z] infile outfile\n");
+    fprintf(stderr, "\n");
+    fprintf(stderr, "  -z: exclude non-app heaps, such as Zygote\n");
+    fprintf(stderr, "\n");
+    fprintf(stderr, "Specify '-' for either or both files to use stdin/stdout.\n");
+    fprintf(stderr, "\n");
+
+    fprintf(stderr,
+        "Copyright (C) 2009 The Android Open Source Project\n\n"
+        "This software is built from source code licensed under the "
+        "Apache License,\n"
+        "Version 2.0 (the \"License\"). You may obtain a copy of the "
+        "License at\n\n"
+        "     http://www.apache.org/licenses/LICENSE-2.0\n\n"
+        "See the associated NOTICE file for this software for further "
+        "details.\n");
+    res = 2;
+
+finish:
+    if (in != stdin && in != NULL)
+        fclose(in);
+    if (out != stdout && out != NULL)
+        fclose(out);
+    return res;
+}